Next: Accessors, Previous: RTL Objects, Up: RTL
不同的表达式代码被分为几个类别(classes),其有单个字符表示。你可以使用宏GET_RTX_CLASS (code)来确定RTX代码的类别。当前,rtl.def定义了这些类别:
RTX_OBJREG)或者一个内存位置(MEM, SYMBOL_REF)。也包括LO_SUM);但是,SUBREG和STRICT_LOW_PART不在这个类别中,而是在x类别中。
RTX_CONST_OBJHIGH也包含在该类别中。
RTX_COMPAREGEU或LT。
RTX_COMM_COMPAREEQ或ORDERED。
RTX_UNARYNEG,NOT或者ABS。这个类别还包括值扩展(符号扩展或者零扩展),以及整数和浮点之间的转换。
RTX_COMM_ARITHPLUS或者AND。NE和EQ为比较运算,所以它们具有类别<。
RTX_BIN_ARITHMINUS,DIV或者ASHIFTRT。
RTX_BITFIELD_OPSZERO_EXTRACT和SIGN_EXTRACT。这些有三个输入,并且为左值。参见Bit-Fields。
RTX_TERNARYIF_THEN_ELSE和VEC_MERGE。
RTX_INSNINSN,JUMP_INSN和CALL_INSN。参见Insns。
RTX_MATCHMATCH_DUP。这些只出现在机器描述中。
RTX_AUTOINCPOST_INC。
RTX_EXTRADEFINE_*等)中使用的其它RTX代码。其还表示所有表述副作用的RTX代码(SET,USE,CLOBBER等),以及在insn链中可能出现的非insn,例如NOTE,BARRIER和CODE_LABEL。SUBREG也属于该类。
对于每个表达式代码,rtl.def使用称作表达式代码格式(format)的字符序列,来说明所包含的对象数目,以及它们的种类。例如,subreg的格式为‘ei’。
eiwsE还有一些其它的格式字符有时会被用到:
unnote insn的行号和代码号。
SVB0一些RTX代码的类别总是具有相同的格式。例如,可以安全的假设所有的比较运算都具有格式ee。
1e。
<c2ee。
b3eee。
iiuueiee。参见Insns。注意,并不是所有被链接到insn链表中的RTX对象都属于类别i。
omx