VADD.VI

RISC-V VADD.VI 指令详解

指令手册R-type

将vs2每个元素与imm相加:vd[i]=vs2[i]+imm。

指令语法

vadd.vi vd, vs2, imm, vm
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
V向量运算整数算术

指令行为说明

VADD.VI 对活动元素执行普通向量整数加法:vd[i] = vs2[i] + sign_extend(imm)。imm 是 5 位有符号立即数(-16..15),符号扩展到 SEW。结果按 SEW 宽度回绕写回;它不是饱和加法,也不使用 vxrm 舍入。

快速理解与检索要点

VADD.VI 对每个活动元素执行普通整数加法,第二操作数是符号扩展到 SEW 的 5 位立即数,结果按 SEW 宽度写回。

立即数范围是 -16 到 15;更大的常量通常放入整数寄存器后使用 vadd.vx。
普通向量整数加法不是饱和加法;溢出按 SEW 宽度回绕。

常见使用场景

向量化循环

结合 «vsetvli t0, a0, e32, m1, ta, ma vadd.vi v1, v2, 5» 等实际代码理解该场景。

数组运算

结合 «vsetvli t0, a0, e32, m1, ta, ma vadd.vi v1, v2, 5» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

imm 是 5 位有符号立即数(-16..15),符号扩展到 SEW。
普通整数加法按 SEW 宽度回绕,不是饱和加法。
需要更大常量时通常使用 vadd.vx。

常见问题

它会使用 vxrm 舍入吗?

不会。VADD.VI 是普通整数加法,vxrm 用于定点舍入类指令。

imm 是几位?

imm 是 5 位有符号立即数,符号扩展到当前 SEW。