Using and Porting GNU CC - Assembler

Node: Assembler Next: Insns Prev: Incdec Up: RTL

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.


Next: Insns Up: RTL