Assembler Instructions as Expressions
=====================================
The RTX code `asm_operands' represents a value produced by a
user-specified assembler instruction. It is used to represent an `asm'
statement with arguments. An `asm' statement with a single output
operand, like this:
asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
is represented using a single `asm_operands' RTX which represents the
value that is stored in `outputvar':
(set RTX-FOR-OUTPUTVAR
(asm_operands "foo %1,%2,%0" "a" 0
[RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
[(asm_input:M1 "g")
(asm_input:M2 "di")]))
Here the operands of the `asm_operands' RTX are the assembler template
string, the output-operand's constraint, the index-number of the output
operand among the output operands specified, a vector of input operand
RTX's, and a vector of input-operand modes and constraints. The mode
M1 is the mode of the sum `x+y'; M2 is that of `*z'.
When an `asm' statement has multiple output values, its insn has
several such `set' RTX's inside of a `parallel'. Each `set' contains a
`asm_operands'; all of these share the same assembler template and
vectors, but each contains the constraint for the respective output
operand. They are also distinguished by the output-operand index
number, which is 0, 1, ... for successive output operands.