寄存器指南

RISC-V vlenb / vlenb 向量寄存器字节长度寄存器寄存器

vlenb 是向量寄存器字节长度寄存器(只读 CSR 0xC22),值为 VLEN/8,即单个向量寄存器以字节为单位的宽度。

ABI 名称:vlenb;物理寄存器:vlenb。
保存责任:由软件按上下文需要保存。
先按 psABI 角色理解它,再看具体指令如何读写。
物理编号 vlenbABI 名 vlenb保存责任 由软件按上下文需要保存
角色
向量寄存器字节长度寄存器
调用约定
架构状态/CSR语义
先记一句
t* 属于 caller-saved,callee 可以覆盖。
psABI 规范依据

ABI 寄存器

vlenb 是向量寄存器字节长度寄存器(只读 CSR 0xC22),值为 VLEN/8,即单个向量寄存器以字节为单位的宽度。

调用后保持:由软件按上下文需要保存
RISC-V psABI integer register convention

适合什么时候用

  • - 保存短生命周期临时计算结果。
  • - 在不会跨函数调用存活的局部计算里使用。
  • - 作为 caller 自行管理的 scratch register。

什么时候不要这样用

  • - 不要把 t* 用来保存 call 之后还要用的值,除非调用前自己保存。
  • - 不要把 t* 当成 callee 会帮你恢复的寄存器。

调用前后会发生什么

1

t* 属于 caller-saved,callee 可以覆盖。

2

如果 caller 在 call 后还需要 t* 的值,caller 必须提前保存。

临时值跨 call 前先自保

示例用于理解规则,不替代完整程序
addi t0, a0, 1
# 如果 call 后还要用 t0,caller 先保存到 ABI 合法的位置
call foo
# call 返回后再从该保存位置恢复 t0