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

RISC-V VASUBU.VV 指令详解

指令手册R-type

向量-向量无符号平均减:活动元素读取 vs2 和 vs1,按 vxrm 舍入后写回 SEW 位 vd。

指令语法

vasubu.vv vd, vs2, vs1, vm
操作数说明
vd:目标向量寄存器组。
vs2/vs1 或标量源:按指令后缀 .vv/.vx/.vi/.vf 决定来源。
vm:若语法包含 vm,vm=0 使用 v0 作为执行掩码,vm=1 为未掩码。
V向量运算定点算术

指令行为说明

vasubu.vv 是 RVV 定点平均减指令。它在 vl 范围内对活动元素执行无符号运算,使用 vxrm 的 rnu/rne/rdn/rod 舍入模式,并受 vm/v0.t 执行掩码控制。

VASUBU.VV 指令解析与执行动画

从 OP-V 编码字段开始,展示 VASUBU 如何按无限精度差值执行平均减,用 vxrm 舍入后再写回 SEW 宽 vd;最终溢出结果按规范回绕。

输入的指令
vasubu.vv
OP-V encodingvasubu.vv
funct6
001010
vm
0
vs2
01000
vs1
01100
funct3
010
vd
00100
opcode
1010111
lane
0
1
2
3
4
5
6
7
v8
0x0021
0x007f
0x0080
0x00f1
0x0012
0x00fe
0x0021
0x007f
avg-
avg-
avg-
avg-
avg-
avg-
avg-
avg-
v12
0x0005
0x0041
0x0090
0x0002
0x007f
0x0013
0x0005
0x0041
v0.t
1
0
1
1
1
0
1
1
v4
...
-
...
...
...
-
...
...
当前步骤

显示 OP-V 32 位编码字段

vasubu.vv 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 vs1 字段放在同一条编码带中。

动画只展示官方 V 扩展定义的 ISA 可见关系:OP-V 字段解析、活动元素读取、SEW 宽度整数无符号平均减法、vxrm 定点舍入和 vd 写回;不模拟流水线、缓存或执行时延。

快速理解与检索要点

VASUBU.VV 用于 RVV 定点平均减。源元素按无符号数解释,结果按 vxrm 舍入后写回 SEW 位 vd;它不设置浮点异常标志,也不是饱和指令。

vasubu.vv vd, vs2, vs1, vm 使用 OP-V 编码;.vv 形式由 funct3 区分,funct6 选择 VASUBU。
平均减按无限精度差值执行右移 1 位舍入;规范说明 VASUB/VASUBU 的溢出被忽略并回绕。
舍入模式来自 fixed-point rounding mode CSR vxrm,包括 rnu、rne、rdn 和 rod。
只处理 vl 范围内的 active body 元素;vm=0 使用 v0.t,尾部和掩码关闭目标元素遵循 vtype 策略。

向量执行上下文

阅读 VASUBU.VV 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。.vv:两个向量源逐元素参与运算。

先看 vl

当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。

再看 vtype

当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。

最后看 vm/v0

带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。

官方来源:RISC-V V Standard Extension for Vector Operations

常见使用场景

定点平均运算

结合 «vsetvli t0, a0, e16, m1, ta, ma vasubu.vv v4, v8, v12, v0.t» 等实际代码理解该场景。

向量数据处理

结合 «vsetvli t0, a0, e16, m1, ta, ma vasubu.vv v4, v8, v12, v0.t» 等实际代码理解该场景。

RVV 掩码执行

结合 «vsetvli t0, a0, e16, m1, ta, ma vasubu.vv v4, v8, v12, v0.t» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

舍入由 vxrm 控制,不是固定加 1 后右移。
VASUB/VASUBU 在舍入前按无限精度差值计算;若平均减结果溢出,最终结果按 SEW 宽度回绕。
vm=0 时 v0.t 控制活动元素;关闭元素和尾元素遵循当前 vtype 策略。

常见问题

VASUBU.VV 和普通 VSUB 有什么区别?

VASUBU.VV 是定点平均减,会按 vxrm 对右移 1 位的结果舍入;普通整数减不使用 vxrm。

VASUBU.VV 会设置 vxsat 吗?

不会。本页指令使用 vxrm 舍入,但不是饱和指令;需要饱和语义时应查看 VSADD/VSSUB 等饱和定点指令。