寄存器指南

RISC-V gp / x3 寄存器:全局指针与不可分配 ABI 约定

gp 是 psABI 中的 global pointer,并被标记为不可分配寄存器。标准 ABI 过程不应修改 gp,因为信号处理器可能依赖它的值。

psABI:x3 的 ABI 名称是 gp,含义是 Global pointer。
psABI:gp 是不可分配寄存器,不属于普通临时寄存器池。
新手规则:看到 gp 就把它当不可分配 ABI 寄存器,不要借来做计算。
物理编号 x3ABI 名 gp保存责任 不可分配
角色
全局指针;不可分配,标准 ABI 过程不应修改。
调用约定
标准 ABI 中不可分配
先记一句
psABI 将 gp 标记为不可分配寄存器。
psABI 规范依据

不可分配寄存器

gp 在 psABI 中标记为不可分配寄存器。过程不应修改它,因为信号处理器可能依赖该值。

调用后保持:不适用
RISC-V psABI integer register convention
快速理解与检索要点

gp / x3 是 psABI 标记的不可分配寄存器。标准 ABI 过程不应修改它;它不是普通 caller-saved 或 callee-saved 寄存器选择。

psABI 将 x3/gp 标记为不可分配。
标准 ABI 过程不应修改 gp/tp,因为信号处理器可能依赖其值。

适合什么时候用

  • - 按 psABI 把它识别为 global pointer,而不是普通临时寄存器。
  • - 阅读反汇编时,看到 gp 要先按 psABI 的不可分配寄存器理解。
  • - 需要了解超出 psABI 表的具体环境约定时,应查阅该环境的官方 ABI 文档。

什么时候不要这样用

  • - 不要在标准 ABI 过程中修改 gp。
  • - 不要把 gp 当通用寄存器或临时寄存器使用。
  • - 不要从 gp 的 ABI 名称推断页面未说明的具体环境行为。

调用前后会发生什么

1

psABI 将 gp 标记为不可分配寄存器。

2

psABI 明确标准 ABI 过程不应修改 gp,因为信号处理器可能依赖它。

3

它不是 caller-saved 或 callee-saved 的普通选择题,而是不要分配给普通代码使用。

阅读 gp 时先按保留值理解

示例用于理解规则,不替代完整程序
# 不要在标准 ABI 函数中借用 gp
# 如果平台 ABI 指定了 gp 用途,按平台 ABI 处理
# 临时计算请使用 t0-t6 或按调用约定保存其他寄存器

常见问题

gp / x3 可以当普通临时寄存器吗?

不应该。psABI 将它标记为不可分配,标准 ABI 过程不应修改。

gp 的保存责任是 caller 还是 callee?

都不是普通意义上的 caller/callee 选择;它是不可分配寄存器,普通代码不应借用。