Next: Regs and Memory, Previous: Machine Modes, Up: RTL
(const_int
i)
INTVAL
来访问,INTVAL (
exp)
相当于XWINT (
exp, 0)
。
为模式所生成的常量如果位数小于HOST_WIDE_INT
,则必须符号扩展为全部宽度(例如,gen_int_mode
)。
只有一个表达式对象表示整数值0;是变量const0_rtx
的值。同样的,整数值1的唯一表达式为const1_rtx
,整数值2的唯一表达式为const2_rtx
,负1的唯一表达式为constm1_rtx
。任何试图去创建值为0,1,2或者-1的const_int
都会返回相应的const0_rtx
, const1_rtx
, const2_rtx
或者constm1_rtx
。
类似的,只有一个对象表示值为STORE_FLAG_VALUE
的整数,其为const_true_rtx
。如果STORE_FLAG_VALUE
为1,则const_true_rtx
和const1_rtx
将会指向同一对象。如果STORE_FLAG_VALUE
为-1,const_true_rtx
和constm1_rtx
将会指向同一对象。
(const_double:
m i0 i1 ...)
HOST_BITS_PER_WIDE_INT
位的,但是小于其两倍的位数的整数常量(GCC并没有提供表示更大的常量的机制)。对于后者,m将为VOIDmode
。
如果m为VOIDmode
,则值的位数存储在i0和i1中。i0使用宏CONST_DOUBLE_LOW
来访问,i1使用CONST_DOUBLE_HIGH
。
如果常量为浮点(不管是什么精度),则用于存储值得整数数目取决于REAL_VALUE_TYPE
的大小(参见Floating Point)。整数表示一个浮点数,但是不如target机器的或者host机器的浮点格式那么精确。要将它们转换为target机器使用的精确的位模式,使用宏REAL_VALUE_TO_TARGET_DOUBLE
等(参见Data Output)。
(const_fixed:
m ...)
struct fixed_value
数据结构,并使用宏CONST_FIXED_VALUE
来访问。数据的高部分使用CONST_FIXED_VALUE_HIGH
来访问;低部分使用CONST_FIXED_VALUE_LOW
来访问。
(const_vector:
m [
x0 x1 ...])
const_int
,const_double
或者const_fixed
元素。
在const_vector
中的单元数可以通过宏CONST_VECTOR_NUNITS
来获得,形如CONST_VECTOR_NUNITS (
v)
。
在向量常量中的单个元素使用宏CONST_VECTOR_ELT
来访问,形如CONST_VECTOR_ELT (
v,
n)
,其中v为向量常量,n为要访问的元素编号。
(const_string
str)
(symbol_ref:
mode symbol)
symbol_ref
包含一个机器模式,其通常为Pmode
。通常这是唯一的使得符号有效的机器模式。
(label_ref:
mode label)
code_label
或者一个NOTE_INSN_DELETED_LABEL
类型的note
,其出现在指令序列中,来标识标号应该处于的位置。
对于代码标号引用,使用一个不同的表达式类型的原因是跳转优化可以区分它们。
label_ref
包含了一个机器模式,其通常为Pmode
。通常这是唯一的使得标号有效的机器模式。
(const:
m exp)
plus
和minus
组合的常量(const_int
, symbol_ref
和 label_ref
表达式)。然而,并不是所有的组合都是有效的,因为汇编器不能对重定位符号做任意的算术运算。
m should be Pmode
.
m应该为Pmode
。
(high:
m exp)
symbol_ref
。位数是机器相关的并且通常为初始化一个寄存器的高位的指令所指定的位数。其和lo_sum
一起使用来表示典型的用于RISC机器的双指令序列来引用一个全局内存位置。
m应该为Pmode
。
宏CONST0_RTX (
mode)
指定一个具有值0,机器模式为mode的表达式。如果mode为MODE_INT
类别,则返回const0_rtx
。如果mode为 MODE_FLOAT
类别,则返回模式为mode的表达式CONST_DOUBLE
。否则,其返回一个模式为mode的表达式CONST_VECTOR
。类似的,宏CONST1_RTX (
mode)
指定一个具有值1,机器模式为mode的表达式,类似的对于CONST2_RTX
。宏CONST1_RTX
和CONST2_RTX
对于向量模式没有定义。