gccint: Assembler

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