首页/指令库/VAADD-VV
VAADD.VV

RISC-V VAADD.VV 指令详解

指令手册R-type

向量有符号平均加:vd[i] = roundoff_signed(vs2[i] + vs1[i], 1)

指令语法

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

指令行为说明

vaadd.vv 执行向量有符号平均加。中间结果右移 1 位并按 vxrm 舍入,然后写回 SEW 位结果。

快速理解与检索要点

VAADD.VV 是 RVV 定点平均加法:先以无限精度相加,再右移 1 位并按 vxrm 舍入,最后截断为 SEW 位结果。

VAADD 使用有符号 roundoff 规则。
vaadd/vaaddu 的结果不会溢出;这不同于饱和加法和普通加法。

常见使用场景

位操作与掩码

结合 «vaadd.vv vd, vs2, vs1» 等实际代码理解该场景。

向量运算

结合 «vaadd.vv vd, vs2, vs1» 等实际代码理解该场景。

循环与迭代

结合 «vaadd.vv vd, vs2, vs1» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

舍入由 vxrm 控制(rnu/rne/rdn/rod),不是固定加 1 后右移。
vaadd/vaaddu 的结果不会溢出。

常见问题

它等价于先加再简单右移吗?

不完全等价。右移前会按 vxrm 的 rnu/rne/rdn/rod 模式舍入。

它会设置 vxsat 吗?

不会因结果溢出设置;平均加法结果按规范不会溢出。