Next: , Previous: Accessors, Up: RTL


10.4 访问特殊操作数

一些RTL节点具有与它们相关联的特殊的注解。

MEM
MEM_ALIAS_SET (x)
如果为0,则x不在任何别名集中,并可能为任何对象的别名。否则,x只能为在冲突别名集中的MEM的别名。该值在前端使用语言相关的方式来设置,并且不能在后端修改。在一些前端中,这些可以通过某种方式对应到类型,或者其它语言级的实体,但是不要求非要这样,所以在后端不要做这样的假设。这些集合编号使用alias_sets_conflict_p来测试。


MEM_EXPR (x)
如果该寄存器被已知为存放了一些用户级的声明的值,则为那个tree节点。其也可以为COMPONENT_REF,这种情况下,其为某个域的引用,并且TREE_OPERAND (x, 0)包含了声明,或者另一个COMPONENT_REF,或者如果没有编译时对象相关引用,则为空。


MEM_OFFSET (x)
MEM_EXPR起始的偏移量,为一个CONST_INT rtx。


MEM_SIZE (x)
以字节为单位的内存引用长度,为一个CONST_INT rtx。这主要与BLKmode引用相关,否则机器模式已经隐含了长度。


MEM_ALIGN (x)
内存引用的已知的对齐方式,以位为单位。


MEM_ADDR_SPACE (x)
The address space of the memory reference. This will commonly be zero for the generic address space.

REG
ORIGINAL_REGNO (x)
该域存放了寄存器原先具有的编号;对于伪寄存器放入到一个硬寄存器中,其将存放旧的伪寄存器编号。


REG_EXPR (x)
如果该寄存器被已知存放了某个用户级的声明的值,则其为那个tree节点。


REG_OFFSET (x)
如果该寄存器被已知存放了某个用户级的声明的值,则其为相对那个逻辑存储的便宜量。

SYMBOL_REF
SYMBOL_REF_DECL (x)
如果是针对VAR_DECLFUNCTION_DECL创建的symbol_ref x,则那个tree被记录在这里。如果该值为空,则x由后端代码生成例程创建,并不与前端的符号表实体相关联。

SYMBOL_REF_DECL也可以指向'c'类别的tree,即某种常量。这种情况下,symbol_ref为每个文件的常量池中的实体;同样,不与前端的符号表实体相关联。


SYMBOL_REF_CONSTANT (x)
如果‘CONSTANT_POOL_ADDRESS_P (x)’为真,则为x的常量池实体。否则为空。


SYMBOL_REF_DATA (x)
一个不透明类型的域,用来存储SYMBOL_REF_DECLSYMBOL_REF_CONSTANT


SYMBOL_REF_FLAGS (x)
在一个symbol_ref中,其用于传达关于符号的各种断言。它们中的一些可以使用通用的代码来计算,一些是特定于目标机器的。通用的位:
SYMBOL_FLAG_FUNCTION
用来表示符号引用一个函数。


SYMBOL_FLAG_LOCAL
用来表示符号局部于该模块。参见TARGET_BINDS_LOCAL_P


SYMBOL_FLAG_EXTERNAL
用来表示该符号不在该转换单元中定义。注意,其并不是SYMBOL_FLAG_LOCAL的反转。


SYMBOL_FLAG_SMALL
用来表示符号位于小数据段。参见TARGET_IN_SMALL_DATA_P


SYMBOL_REF_TLS_MODEL (x)
这是多个位的域访问,其返回用于线程局部存储符号的tls_model。对于非线程局部符号,其返回0。


SYMBOL_FLAG_HAS_BLOCK_INFO
用来表示符号具有SYMBOL_REF_BLOCKSYMBOL_REF_BLOCK_OFFSET域。


SYMBOL_FLAG_ANCHOR
用来表示符号作为section anchor。“Section anchors”为在object_block中具有一个已知位置的符号,并且可以用来访问该块中的附近成员。它们用来实现-fsection-anchors

如果该标记被设置,则SYMBOL_FLAG_HAS_BLOCK_INFO也被设置。

起始于SYMBOL_FLAG_MACH_DEP的位,可供目标机器使用。


SYMBOL_REF_BLOCK (x)
如果‘SYMBOL_REF_HAS_BLOCK_INFO_P (x)’,则其为该符号所属的‘object_block’结构体, 或者如果其没有被分配给一个块,则为NULL

如果‘SYMBOL_REF_HAS_BLOCK_INFO_P (x)’,则其为x的偏移量,从‘SYMBOL_REF_BLOCK (x)’中的第一个对象开始。如果x还没有被分配给一个块,或者其还没有在那个块中给定一个偏移量,则值为负数。