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
next prev parent 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).