This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Wonly-top-basic-asm
- From: David Wohlferd <dw at LimeGreenSocks dot com>
- To: Bernd Schmidt <bschmidt at redhat dot com>, Bernd Edlinger <bernd dot edlinger at hotmail dot de>, Sandra Loosemore <sandra at codesourcery dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Cc: Richard Henderson <rth at redhat dot com>, "jason at redhat dot com" <jason at redhat dot com>, "segher at kernel dot crashing dot org" <segher at kernel dot crashing dot org>, "Paul_Koning at Dell dot com" <Paul_Koning at Dell dot com>, Jeff Law <law at redhat dot com>, Andrew Haley <aph at redhat dot com>, "hubicka at ucw dot cz" <hubicka at ucw dot cz>, David Wohlferd <dw at LimeGreenSocks dot com>
- Date: Wed, 16 Mar 2016 22:23:33 -0700
- Subject: Re: Wonly-top-basic-asm
- Authentication-results: sourceware.org; auth=none
- References: <56A54EF9 dot 8060006 at LimeGreenSocks dot com> <56A61442 dot 3090803 at redhat dot com> <56A9C134 dot 1030500 at LimeGreenSocks dot com> <56B80F57 dot 9020606 at LimeGreenSocks dot com> <HE1PR07MB09059C5C9C060394C61A1232E4D50 at HE1PR07MB0905 dot eurprd07 dot prod dot outlook dot com> <56BBCC90 dot 9020001 at LimeGreenSocks dot com> <56BCAB73 dot 20506 at redhat dot com> <56BD8427 dot 4050405 at LimeGreenSocks dot com> <56BDD550 dot 3050908 at redhat dot com> <56BE80F4 dot 6060803 at codesourcery dot com> <56BFFBD9 dot 7010202 at LimeGreenSocks dot com> <56C7BB50 dot 4000909 at LimeGreenSocks dot com> <HE1PR07MB0905FC1A625C57C8A0C56C72E4A10 at HE1PR07MB0905 dot eurprd07 dot prod dot outlook dot com> <56C99113 dot 7090602 at LimeGreenSocks dot com> <56D06AC1 dot 7090607 at redhat dot com> <56D3ECEE dot 4050503 at LimeGreenSocks dot com> <56E21779 dot 4020804 at LimeGreenSocks dot com> <56E6D8BB dot 3060507 at redhat dot com>
On 3/14/2016 8:28 AM, Bernd Schmidt wrote:
The example is not good, as discussed previously, and IMO the best
option is to remove it. Otherwise I have no objections to the latest
variant.
Despite the problems I have with the existing sample, adding the
information/warnings is more important to me, and more valuable to
users. Perhaps we can revisit the sample when pr24414 gets addressed.
I have removed my changes to the sample in the attached patch.
ChangeLog:
2016-03-16 David Wohlferd <dw@LimeGreenSocks.com>
Bernd Schmidt <bschmidt@redhat.com>
* doc/extend.texi: Doc basic asm behavior re clobbers.
dw
Index: extend.texi
===================================================================
--- extend.texi (revision 234245)
+++ extend.texi (working copy)
@@ -7441,7 +7441,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:
@@ -7481,10 +7482,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