Next: , Previous: Incdec, Up: RTL


10.17 作为表达式的汇编指令

RTX代码asm_operands表示由用户特定的汇编指令所产生的值。其用来表示带有参数的asm语句。一个具有单个输出操作数的asm语句,如下:

     asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));

其通过一个单个的asm_operands RTX来表示,其表示了存储在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")]))

这里,asm_operands RTX的操作数为汇编模板字符串,输出操作数的约束,在指定的输出操作数中的索引编号,一个输入操作数RTX向量,以及一个输出操作数机器模式和约束的向量。机器模式m1x+y的和的机器模式;m2*z的机器模式。

asm语句具有多个输出值时,它的insn具有多个这样的set RTX,并位于一个parallel中。每个set包括了一个asm_operands;所有这些共享相同的汇编模板和向量,但是每个包含了相应的输出操作数的约束。它们也是通过输出操作数索引编号来区分的,即0,1...连续的输出操作数。