public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: David Wohlferd <dw@LimeGreenSocks.com>
To: Sandra Loosemore <sandra@codesourcery.com>,
	Bernd Schmidt <bschmidt@redhat.com>,
	Bernd Edlinger <bernd.edlinger@hotmail.de>,
	"gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>,
	Richard Henderson <rth@redhat.com>,
	"jason@redhat.com" <jason@redhat.com>
Cc: "segher@kernel.crashing.org" <segher@kernel.crashing.org>,
	"Paul_Koning@Dell.com" <Paul_Koning@Dell.com>,
	Jeff Law <law@redhat.com>, Andrew Haley <aph@redhat.com>,
	hubicka@ucw.cz
Subject: Re: AW: Wonly-top-basic-asm
Date: Sat, 20 Feb 2016 01:03:00 -0000	[thread overview]
Message-ID: <56C7BB50.4000909@LimeGreenSocks.com> (raw)
In-Reply-To: <56BFFBD9.7010202@LimeGreenSocks.com>

[-- Attachment #1: Type: text/plain, Size: 351 bytes --]

On 2/13/2016 8:00 PM, David Wohlferd wrote:
> Fair enough.  Committing what we can right now sounds like a good plan.

Attached is the doc patch, minus the proposed warning.

ChangeLog:

2016-02-19  David Wohlferd  <dw@LimeGreenSocks.com>
         Bernd Schmidt  <bschmidt@redhat.com>

     * doc/extend.texi: Doc basic asm behavior re clobbers.

dw


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 24414T.patch --]
[-- Type: text/x-patch; name="24414T.patch", Size: 3015 bytes --]

Index: extend.texi
===================================================================
--- extend.texi	(revision 233367)
+++ extend.texi	(working copy)
@@ -7458,7 +7458,8 @@
 @end table
 
 @subsubheading Remarks
-Using extended @code{asm} typically produces smaller, safer, and more
+Using extended @code{asm} (@pxref{Extended Asm}) typically produces smaller,
+safer, and more
 efficient code, and in most cases it is a better solution than basic
 @code{asm}.  However, there are two situations where only basic @code{asm}
 can be used:
@@ -7498,10 +7499,25 @@
 symbol errors during compilation if your assembly code defines symbols or 
 labels.
 
-Since GCC does not parse the @var{AssemblerInstructions}, it has no 
-visibility of any symbols it references. This may result in GCC discarding 
-those symbols as unreferenced.
+@strong{Warning:} The C standards do not specify semantics for @code{asm},
+making it a potential source of incompatibilities between compilers.  These
+incompatibilities may not produce compiler warnings/errors.
 
+GCC does not parse basic @code{asm}'s @var{AssemblerInstructions}, which
+means there is no way to communicate to the compiler what is happening
+inside them.  GCC has no visibility of symbols in the @code{asm} and may
+discard them as unreferenced.  It also does not know about side effects of
+the assembler code, such as modifications to memory or registers.  Unlike
+some compilers, GCC assumes that no changes to either memory or registers
+occur.  This assumption may change in a future release.
+
+To avoid complications from future changes to the semantics and the
+compatibility issues between compilers, consider replacing basic @code{asm}
+with extended @code{asm}.  See
+@uref{https://gcc.gnu.org/wiki/ConvertBasicAsmToExtended, How to convert
+from basic asm to extended asm} for information about how to perform this
+conversion.
+
 The compiler copies the assembler instructions in a basic @code{asm} 
 verbatim to the assembly language output file, without 
 processing dialects or any of the @samp{%} operators that are available with
@@ -7516,11 +7532,25 @@
 Basic @code{asm} provides no
 mechanism to provide different assembler strings for different dialects.
 
-Here is an example of basic @code{asm} for i386:
+Here is an example of top-level basic @code{asm} for i386 that defines an
+asm macro.  That macro is then invoked from within a function using
+extended @code{asm}:
 
 @example
-/* Note that this code will not compile with -masm=intel */
-#define DebugBreak() asm("int $3")
+/* Define macro at file scope with basic asm.  */
+/* Add macro parameter p to eax.  */
+asm (".macro testme p\n\t"
+    "addl $\\p, %eax\n\t"
+    ".endm");
+
+/* Use macro in function using extended asm.  It needs
+   the "cc" clobber since the flags are changed and uses
+   the "a" constraint since it modifies eax.  */
+int DoAdd (int value)
+@{
+   asm ("testme 5" : "+a" (value) : : "cc");
+   return value;
+@}
 @end example
 
 @node Extended Asm

  reply	other threads:[~2016-02-20  1:03 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-24 22:24 Wonly-top-basic-asm David Wohlferd
2016-01-25 12:25 ` Wonly-top-basic-asm Bernd Schmidt
2016-01-28  7:21   ` Wonly-top-basic-asm David Wohlferd
2016-02-08  3:46     ` Wonly-top-basic-asm David Wohlferd
2016-02-08  6:45       ` AW: Wonly-top-basic-asm Bernd Edlinger
2016-02-08 20:15         ` David Wohlferd
2016-02-10 23:50         ` David Wohlferd
2016-02-11  6:51           ` AW: " Bernd Edlinger
2016-02-12  7:01             ` David Wohlferd
2016-02-11 15:40           ` Bernd Schmidt
2016-02-11 16:03             ` Sandra Loosemore
2016-02-12  7:08               ` David Wohlferd
2016-02-12  7:05             ` David Wohlferd
2016-02-12 12:51               ` Bernd Schmidt
2016-02-13  1:03                 ` Sandra Loosemore
2016-02-14  4:00                   ` David Wohlferd
2016-02-20  1:03                     ` David Wohlferd [this message]
2016-02-20 12:08                       ` Wonly-top-basic-asm Bernd Edlinger
2016-02-21 10:28                         ` Wonly-top-basic-asm David Wohlferd
2016-02-26 15:10                           ` Wonly-top-basic-asm Bernd Schmidt
2016-02-29  7:02                             ` Wonly-top-basic-asm David Wohlferd
2016-03-11  0:56                               ` Wonly-top-basic-asm David Wohlferd
2016-03-14 15:29                                 ` Wonly-top-basic-asm Bernd Schmidt
2016-03-17  5:24                                   ` Wonly-top-basic-asm David Wohlferd
2016-03-18 13:32                                     ` Wonly-top-basic-asm Bernd Schmidt
2016-03-18 15:01                                       ` Wonly-top-basic-asm Richard Biener
2016-03-18 19:14                                     ` Wonly-top-basic-asm Bernd Schmidt
2016-02-14  3:57                 ` AW: Wonly-top-basic-asm David Wohlferd
2016-01-26  0:32 ` Wonly-top-basic-asm Segher Boessenkool
2016-01-26 12:11   ` Wonly-top-basic-asm Bernd Schmidt
2016-01-26 16:12     ` Wonly-top-basic-asm Segher Boessenkool
2016-01-26 23:38       ` Wonly-top-basic-asm David Wohlferd
2016-02-16 14:03 ` Wonly-top-basic-asm Jan Hubicka
2016-02-16 20:02   ` Wonly-top-basic-asm Bernd Edlinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56C7BB50.4000909@LimeGreenSocks.com \
    --to=dw@limegreensocks.com \
    --cc=Paul_Koning@Dell.com \
    --cc=aph@redhat.com \
    --cc=bernd.edlinger@hotmail.de \
    --cc=bschmidt@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=hubicka@ucw.cz \
    --cc=jason@redhat.com \
    --cc=law@redhat.com \
    --cc=rth@redhat.com \
    --cc=sandra@codesourcery.com \
    --cc=segher@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).