首页/指令库/VASUB-VX
VASUB.VX

RISC-V VASUB.VX 指令详解

指令手册V-type

向量-标量有符号平均减:活动元素读取 vs2 和 x[rs1],按 vxrm 舍入后写回 SEW 位 vd。

指令语法

vasub.vx vd, vs2, rs1[, v0.t]
操作数说明
vd、vs2 是 SEW 位向量寄存器组;同宽源与目标可重叠,同名源必须读取相同初值。
rs1 是整数标量源:XLEN>SEW 取低 SEW 位,XLEN<SEW 符号扩展;无符号 VASUBU 也遵守此规则,x0 提供 0。
先按指令的有符号/无符号解释形成无限精度差,再右移 1 位并按 vxrm 舍入,最后截断到 SEW;溢出回绕,不饱和、不设置 vxsat。
要求 V 与所选 vtype 可用。vm=0 使用 v0.t,vm=1 未掩码;仅活动 body 元素计算,inactive/tail 遵循 vma/vta。masked vd 不得重叠 v0,v0 不能同时作为不同 EEW 数据源。
V向量运算定点算术

指令行为说明

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

VASUB.VX 指令解析与执行动画

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

输入的指令
vasub.vx

要求合法 vtype、已启用 VS 与受支持 SEW;VL=0 时包括 tail 在内均不更新。步骤仅为教学分解,不是处理器周期。

执行环境

教学模型固定 LMUL=m1、vstart=0,只展示所选 VL 的 body 元素。固定 VLEN=4096,VLMAX=4096/16=256,只演示支持所选 SEW 的实现;同名向量源必须具有相同元素。普通掩码形式的 inactive 与 tail 元素按 vtype.vma/vta 处理,不在结果行中伪造确定值;VADC/VMADC/VSBC/VMSBC 则对所有 body 元素执行,v0 位仅作 carry/borrow-in。

OP-V encodingvasub.vx
funct6
001011
vm
0
vs2
01000
rs1
01011
funct3
110
vd
00100
opcode
1010111
lane
0
1
2
3
4
5
6
7
v8
0x0021
0xfff8
0x0080
0x00f1
0xffef
0x00fe
0x0021
0xffe6
avg-
avg-
avg-
avg-
avg-
avg-
avg-
avg-
x11
0x0013
0x0013
0x0013
0x0013
0x0013
0x0013
0x0013
0x0013
v0.t
1
0
1
1
1
0
1
1
v4
...
-
...
...
...
-
...
...
当前步骤

显示 OP-V 32 位编码字段

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

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

快速理解与检索要点

VASUB.VX 用于 RVV 定点平均减。源元素按有符号二进制补码解释,结果按 vxrm 舍入后写回 SEW 位 vd;它不设置浮点异常标志,也不是饱和指令。

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

向量执行上下文

vd、vs2 是 SEW 位向量寄存器组;同宽源与目标可重叠,同名源必须读取相同初值。

rs1 是整数标量源:XLEN>SEW 取低 SEW 位,XLEN<SEW 符号扩展;无符号 VASUBU 也遵守此规则,x0 提供 0。

先按指令的有符号/无符号解释形成无限精度差,再右移 1 位并按 vxrm 舍入,最后截断到 SEW;溢出回绕,不饱和、不设置 vxsat。

要求 V 与所选 vtype 可用。vm=0 使用 v0.t,vm=1 未掩码;仅活动 body 元素计算,inactive/tail 遵循 vma/vta。masked vd 不得重叠 v0,v0 不能同时作为不同 EEW 数据源。

The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, Chapter 31

常见使用场景

定点平均运算

假定 V、e16,m1 可用且 VLMAX≥4,a0=4、vxrm=rne,v0 按 lane 0..3 为 1010。各 vs2 元素为 32767,a1=-32768;示例活动 lane 0 和 2 得到 0x8000(-32768),因为 32767-(-32768)=65535,rne 把 32767.5 舍入为 32768 后回绕,关闭及尾部元素遵循 ma/ta。

向量数据处理

假定 V、e16,m1 可用且 VLMAX≥4,a0=4、vxrm=rne,v0 按 lane 0..3 为 1010。各 vs2 元素为 32767,a1=-32768;示例活动 lane 0 和 2 得到 0x8000(-32768),因为 32767-(-32768)=65535,rne 把 32767.5 舍入为 32768 后回绕,关闭及尾部元素遵循 ma/ta。

RVV 掩码执行

假定 V、e16,m1 可用且 VLMAX≥4,a0=4、vxrm=rne,v0 按 lane 0..3 为 1010。各 vs2 元素为 32767,a1=-32768;示例活动 lane 0 和 2 得到 0x8000(-32768),因为 32767-(-32768)=65535,rne 把 32767.5 舍入为 32768 后回绕,关闭及尾部元素遵循 ma/ta。

使用前检查清单

语法检查
  • vd、vs2 是 SEW 位向量寄存器组;同宽源与目标可重叠,同名源必须读取相同初值。
  • rs1 是整数标量源:XLEN>SEW 取低 SEW 位,XLEN<SEW 符号扩展;无符号 VASUBU 也遵守此规则,x0 提供 0。
语义检查
  • 先按指令的有符号/无符号解释形成无限精度差,再右移 1 位并按 vxrm 舍入,最后截断到 SEW;溢出回绕,不饱和、不设置 vxsat。
  • 要求 V 与所选 vtype 可用。vm=0 使用 v0.t,vm=1 未掩码;仅活动 body 元素计算,inactive/tail 遵循 vma/vta。masked vd 不得重叠 v0,v0 不能同时作为不同 EEW 数据源。

容易混淆 / 常见误区

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

常见问题

VASUB.VX 和普通 VSUB 有什么区别?

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

VASUB.VX 会设置 vxsat 吗?

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