寄存器保存区域

在 32 位环境中,寄存器保存区域提供了保存被调用程序使用的所有非易失性 FPR 和 GPRs 所需的空间。

FPR 保存在调用者的最小堆栈帧旁边。 GPRs 保存在 FPR 下 (在较低地址中)。

在 64 位环境中,寄存器保存区域是对 GPRS 和 FPR 的双字对齐,对 VR 的四字对齐。 它提供了保存被调用程序使用的所有非易失性 FPR , GPRs 和 VR 所需的空间。 FPR 保存在链接区域旁边。 FPR 保存在堆栈帧的最高地址。 GPRs 保存在 FPR 的正下方 (地址比 FPR 低)。 VR 保存在 GPRs 的正下方 (地址比 GPRs 低)。 被调用函数可以在这里保存寄存器,即使它不需要分配新的堆栈帧。 系统定义的堆栈层包含最大可能的保存区域:
   32-bit platforms:  18*8 for FPRs + 19*4 for GPRs + 12*16 for VRs
   64-bit platforms:  18*8 for FPRs + 19*8 for GPRs + 12*16 for VRs
不应访问在数字上低于堆栈层的地址的位置。

对于每种寄存器类型,被调用者只需要从其实际使用的最低寄存器开始保存非易失性寄存器,直到最高寄存器号; 例如,使用 r27 和 r31 表示必须保存 r27 到 r31 。 它始终将寄存器 31 保存在最高寻址字 (在 32 位环境中) 或双字 (在 64 位环境中) 中。