寄存器指南

RISC-V vl / vl 向量长度寄存器寄存器

vl 是向量长度寄存器,记录当前向量指令将要处理的元素个数,由 vsetvl/vsetvli 指令设置,或由 fault-only-first 加载指令更新。

ABI 名称:vl;物理寄存器:vl。
保存责任:调用者。
先按 psABI 角色理解它,再看具体指令如何读写。
物理编号 vlABI 名 vl保存责任 调用者
角色
向量长度寄存器
调用约定
调用者保存
先记一句
t* 属于 caller-saved,callee 可以覆盖。
psABI 规范依据

ABI 寄存器

vl 是向量长度寄存器,记录当前向量指令将要处理的元素个数,由 vsetvl/vsetvli 指令设置,或由 fault-only-first 加载指令更新。

调用后保持:调用者
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