寄存器指南

RISC-V tp / x4 寄存器:线程指针与不可分配 ABI 约定

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

psABI:x4 的 ABI 名称是 tp,含义是 Thread pointer。
psABI:tp 是不可分配寄存器,标准 ABI 过程不应修改。
新手规则:不要把 tp 当 t0/t1 那样的临时寄存器。
物理编号 x4ABI 名 tp保存责任 不可分配
角色
线程指针;不可分配,标准 ABI 过程不应修改。
调用约定
标准 ABI 中不可分配
先记一句
psABI 将 tp 标记为不可分配寄存器。
psABI 规范依据

不可分配寄存器

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

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

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

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

适合什么时候用

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

什么时候不要这样用

  • - 不要在标准 ABI 过程中修改 tp。
  • - 不要把 tp 当通用寄存器或临时寄存器使用。

调用前后会发生什么

1

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

2

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

3

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

阅读 tp 时先按保留值理解

示例用于理解规则,不替代完整程序
# 不要在标准 ABI 函数中借用 tp
# 页面不定义具体线程模型或访问形式
# 临时计算请使用 t0-t6 或按调用约定保存其他寄存器

常见问题

tp / x4 可以当普通临时寄存器吗?

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

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

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