David Wohlferd's patch to document more issues with basic asms
authorDavid Wohlferd <dw@LimeGreenSocks.com>
Fri, 18 Mar 2016 19:12:10 +0000 (19:12 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Fri, 18 Mar 2016 19:12:10 +0000 (19:12 +0000)
* doc/extend.texi: Document more potential problems with basic asms.

From-SVN: r234343

gcc/ChangeLog
gcc/doc/extend.texi

index 328fde839dd433f61a84ee051f8a18a4742062e6..9aee1f0f834eac1dc5bddfd7d80817c0ad52a92d 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-16  David Wohlferd  <dw@LimeGreenSocks.com>
+            Bernd Schmidt  <bschmidt@redhat.com>
+
+       * doc/extend.texi: Document more potential problems with basic asms.
+
 2016-03-18  Bernd Schmidt  <bschmidt@redhat.com>
 
        PR rtl-optimization/70278
@@ -42,7 +47,7 @@
        define_constraint for "Q" and "T" constraints.
 
 2016-03-17  Evandro Menezes  <e.menezes@samsung.com>
-       
+
        Tweak the pipeline model for Exynos M1
 
        * config/aarch64/aarch64.c (exynosm1_tunings):  Enable weak prefetching
 
        PR rtl-optimization/69032
        * sel-sched-ir.c (get_seqno_by_preds): Include both insn and head when
-       looping backwards over basic block insns. 
+       looping backwards over basic block insns.
 
 2016-03-15  Andrey Belevantsev  <abel@ispras.ru>
 
        PR target/66660
        * sel-sched-ir.c (merge_expr): Avoid changing the speculative pattern
-       to non-speculative when propagating trap bits. 
+       to non-speculative when propagating trap bits.
 
 2016-03-15  Andrey Belevantsev  <abel@ispras.ru>
 
        PR rtl-optimization/63384
        * sel-sched.c (invoke_aftermath_hooks): Do not decrease issue_more on
-       DEBUG_INSN_P insns. 
+       DEBUG_INSN_P insns.
 
 2016-03-15  Andrey Belevantsev  <abel@ispras.ru>
 
index 8fddb34a7e3370b0188a1246c01741b9c66a70c4..623a5d0c85b8bb10deb203040967791cf473d6bf 100644 (file)
@@ -7452,10 +7452,10 @@ note that some assembler dialects use semicolons to start a comment.
 @end table
 
 @subsubheading Remarks
-Using extended @code{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:
+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:
 
 @itemize @bullet
 @item
@@ -7492,9 +7492,24 @@ assembly code when optimizing. This can lead to unexpected duplicate
 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