表8-1显示了寄存器:
寄存器 | 名称 | 描述 | 别称 |
---|---|---|---|
SP | 栈指针 | 指向栈顶 | R29 |
FR | 框架指针 | 指向上一个栈 | R30 |
LR | 线寄存器 | 包含了主线上的返回值地址 | R31 |
FRAMELIMIT | 框架限制寄存器 | 包含了栈的最底地址值 | C16 |
FRAMEKEY | 框架关机寄存器 | 包含了框架争夺关键值 | C17 |
注:SP、FP和LR是三个通用寄存器的别名(第2.1节)。这些通用寄存器通常专用于用作堆栈寄存器
Hexagon处理器包括allocframe和DealocFrame指令,用于
在调用堆栈上高效地分配和取消分配堆栈帧。
表8-2描述了这些说明
语法 | 操作 |
---|---|
allocframe(#u11:3) | 分配堆栈帧。此指令在调用后使用。它首先对LR中的值进行XOR运算和帧键,并推送得到的加扰返回地址和FP到堆栈顶部。接下来,它从SP中减去一个无符号立即数,以便为局部变量分配空间。如果生成的SP小于FRAMELIMIT,处理器引发异常0x27。否则,SP设置为新值,FP设置为堆栈上的旧帧指针。以程序集语法表示的立即数操作数指定字节偏移量。此值必须是8字节对齐的。这个有效范围为0到16 KB |
deallocframe | 释放堆栈帧。在返回之前使用此指令以释放堆栈框架它首先从地址在FP,并将恢复的LR与中的值异或FRAMEKEY来解读回信地址。然后是SPis指向上一帧。 |
dealloc_return | 子程序返回堆栈帧取消分配。执行deallocframe操作,然后执行子程序返回(第7.3.3节)到加载的目标地址通过DealocFrame从LR |
注意allocframe和DealocFrame加载并将LR和FP寄存器存储在
堆叠为单个对齐的64位寄存器对(即LR:FP)