Next: Accessors, Previous: RTL Objects, Up: RTL
不同的表达式代码被分为几个类别(classes),其有单个字符表示。你可以使用宏GET_RTX_CLASS (
code)
来确定RTX代码的类别。当前,rtl.def定义了这些类别:
RTX_OBJ
REG
)或者一个内存位置(MEM
, SYMBOL_REF
)。也包括LO_SUM
);但是,SUBREG
和STRICT_LOW_PART
不在这个类别中,而是在x
类别中。
RTX_CONST_OBJ
HIGH
也包含在该类别中。
RTX_COMPARE
GEU
或LT
。
RTX_COMM_COMPARE
EQ
或ORDERED
。
RTX_UNARY
NEG
,NOT
或者ABS
。这个类别还包括值扩展(符号扩展或者零扩展),以及整数和浮点之间的转换。
RTX_COMM_ARITH
PLUS
或者AND
。NE
和EQ
为比较运算,所以它们具有类别<
。
RTX_BIN_ARITH
MINUS
,DIV
或者ASHIFTRT
。
RTX_BITFIELD_OPS
ZERO_EXTRACT
和SIGN_EXTRACT
。这些有三个输入,并且为左值。参见Bit-Fields。
RTX_TERNARY
IF_THEN_ELSE
和VEC_MERGE
。
RTX_INSN
INSN
,JUMP_INSN
和CALL_INSN
。参见Insns。
RTX_MATCH
MATCH_DUP
。这些只出现在机器描述中。
RTX_AUTOINC
POST_INC
。
RTX_EXTRA
DEFINE_*
等)中使用的其它RTX代码。其还表示所有表述副作用的RTX代码(SET
,USE
,CLOBBER
等),以及在insn链中可能出现的非insn,例如NOTE
,BARRIER
和CODE_LABEL
。SUBREG
也属于该类。
对于每个表达式代码,rtl.def使用称作表达式代码格式(format)的字符序列,来说明所包含的对象数目,以及它们的种类。例如,subreg
的格式为‘ei’。
e
i
w
s
E
还有一些其它的格式字符有时会被用到:
u
n
note
insn的行号和代码号。
S
V
B
0
一些RTX代码的类别总是具有相同的格式。例如,可以安全的假设所有的比较运算都具有格式ee
。
1
e
。
<
c
2
ee
。
b
3
eee
。
i
iuueiee
。参见Insns。注意,并不是所有被链接到insn链表中的RTX对象都属于类别i
。
o
m
x