On 11/9/2015 1:52 PM, Jeff Law wrote:
On 11/07/2015 12:50 AM, David Wohlferd wrote:
- Starting with 'modifiers', "=+&" and (reluctantly) "%" seem reasonable
for inline asm. But both "#*" seem sketchy.
Right. =+& are no-brainer yes, as are the constants 0-9. % is
probably OK as well.
#* are similar to !? in that they are inherently tied into the
register class preferencing implementation and documenting them would
be inadvisable.
Actually, #* are already doc'ed in the user guide. Are you advising
they be removed?
If so, the attached patch does this. It also removes references to
define_peephole2 and define_splits from the user guide version of this
page. There are other parts of this page that are more md than ug, but
these are the ones that annoyed me the most.
dw
Original: https://gcc.gnu.org/onlinedocs/gcc/Modifiers.html
Proposed: http://limegreensocks.com/gcc/Modifiers.html
Index: md.texi
===================================================================
--- md.texi (revision 229910)
+++ md.texi (working copy)
@@ -1646,7 +1646,9 @@
GCC can only handle one commutative pair in an asm; if you use more,
the compiler may fail. Note that you need not use the modifier if
the two alternatives are strictly identical; this would only waste
-time in the reload pass. The modifier is not operational after
+time in the reload pass.
+@ifset INTERNALS
+The modifier is not operational after
register allocation, so the result of @code{define_peephole2}
and @code{define_split}s performed after reload cannot rely on
@samp{%} to make the intended insn match.
@@ -1665,7 +1667,6 @@
@samp{*} additionally disparages slightly the alternative if the
following character matches the operand.
-@ifset INTERNALS
Here is an example: the 68000 has an instruction to sign-extend a
halfword in a data register, and can also sign-extend a value by
copying it into an address register. While either kind of register is