Next: Condition Code, Previous: Addressing Modes, Up: Target Macros
GCC通常将每一个静态对象作为一个单独的实体来寻址。例如,如果我们有:
static int a, b, c; int foo (void) { return a + b + c; }
foo
的代码通常会计算三个独立的符号地址:a
,b
和c
的。
在一些target上,只计算一个符号地址并且通过相对地址来访问这三个变量会更好些。
等价的伪代码可能为:
int foo (void) { register int *xr = &x; return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; }
(这不是有效的C)。我们称像x
这样的共享地址为“section anchors”。
它们的用法由-fsection-anchors控制。
下面的钩子描述了GCC需要知道的target属性,以便有效利用section anchors。
除非TARGET_MIN_ANCHOR_OFFSET
或TARGET_MAX_ANCHOR_OFFSET
被设为一个非0的值,否则section anchors根本不会被使用。
应该应用到section anchor的最小偏移量。在大多数target上, 其应该为可以应用到基址寄存器并且对每种机器模式都可以给出合法地址的最小偏移量。 缺省值为0。
类似
TARGET_MIN_ANCHOR_OFFSET
, 但是为可以应用到section anchors的最大(包括)偏移量。缺省为0。