Here are constraint modifier characters.
=
’+
’When the compiler fixes up the operands to satisfy the constraints, it needs to know which operands are inputs to the instruction and which are outputs from it. ‘=
’ identifies an output; ‘+
’ identifies an operand that is both input and output; all other operands are assumed to be input only.
If you specify ‘=
’ or ‘+
’ in a constraint, you put it in the first character of the constraint string.
&
’‘&
’ applies only to the alternative in which it is written. In constraints with multiple alternatives, sometimes one alternative requires ‘&
’ while others do not. See, for example, the ‘movdf
’ insn of the 68000.
An input operand can be tied to an earlyclobber operand if its only use as an input occurs before the early result is written. Adding alternatives of this form often allows GCC to produce better code when only some of the inputs can be affected by the earlyclobber. See, for example, the ‘mulsi3
’ insn of the ARM.
‘&
’ does not obviate the need to write ‘=
’.
%
’define_peephole2
and define_split
s performed after reload cannot rely on ‘%
’ to make the intended insn match.
#
’*
’*
’ has no effect on the meaning of the constraint as a constraint, and no effect on reloading. For LRA ‘*
’ additionally disparages slightly the alternative if the following character matches the operand.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.3/gcc/Modifiers.html