Next: Assembler, Previous: Side Effects, Up: RTL
(pre_dec:
m x)
reg
或者mem
,但是大多数机器只允许reg
。m必须为机器所使用的指针的机器模式。x被递减的数量为,所包含的内存引用的机器模式的长度,以字节为单位。这里有一个关于用法的例子:
(mem:DF (pre_dec:SI (reg:SI 39)))
这说明将伪寄存器39递减一个DFmode
值的长度,并将结果用来对一个DFmode
值进行寻址。
(pre_inc:
m x)
(post_dec:
m x)
pre_dec
相同的副作用,但表示不同的值。这里表示的值为递减之前的x的值。
(post_inc:
m x)
(post_modify:
m x y)
reg
或者mem
,但是大多数机器只允许reg
。m必须为机器所使用的指针的机器模式。
表达式y必须为下列三种形式之一:
(plus:
m x z)
,
(minus:
m x z)
, 或者
(plus:
m x i)
,
其中z为一个索引寄存器,i为一个常量。
这里为一个有关用法的例子:
(mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42) (reg:SI 48))))
这说明在使用了伪寄存器42曾经指向的值之后,将伪寄存器42修改为,加上其伪寄存器48的内容,
(pre_modify:
m x expr)
这些嵌入的副作用表达式在使用时要小心。指令模式可以不使用它们。在到达编译器的‘flow’ pass之前,它们可能只出现在用于表示压栈。‘flow’ pass查找寄存器在一条指令中被递增或递减,并且在之前或者之后被作为地址使用的情况;这些情况然后被转换成使用前增(减)或后增(减)。
如果这些表达式中作为操作数的寄存器,在一个insn中的另一个地址中使用,则会使用寄存器的原始的值。在地址之外使用寄存器是不被允许的,因为这样的insn在不同的机器上行为是不同的,因此会有歧义。
可以被表示成具有嵌入副作用的指令,也可以被表示成使用parallel
,包含一个额外的set
来描述地址寄存器如何被修改。