VRSUB.VX 和 VSUB.VX 的区别是什么?
VRSUB.VX 计算 x[rs1] - vs2[i],VSUB.VX 计算 vs2[i] - x[rs1]。减法不满足交换律,两个结果通常不同。
从标量寄存器中减去向量元素。
VRSUB.VX 对活动元素计算 x[rs1] - vs2[i],低 SEW 位写入 vd。
从 OP-V 编码字段开始,展示 VRSUB 如何按第二源减 vs2 计算活动元素、按 SEW 回绕,并写回 vd。
要求 V 1.0、启用向量状态及合法受支持 vtype/SEW;固定 LMUL=m1、vstart=0。固定 VLEN=4096,VLMAX=4096/16=256;同宽源/目标可重叠。计算按 XLEN/SEW 转换的标量减 vs2[i],保留低 SEW 位。x0 提供零。v0 用于 EEW=1 掩码/借位时不可同时作数据源。输入元素为非负位模式;VL=0 不更新任何目标位。只展示 body,不指定 inactive/tail 值;教学步骤不是处理器周期。
vrsub.vx 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 rs1 字段放在同一条编码带中。
动画展示 OP-V 字段解析、反向减法、执行掩码与 vd 写回;步骤是教学分解,不表示处理器周期。
VRSUB.VX 是反向减法:每个活动元素计算 x[rs1] - vs2[i]。它不是 VSUB.VX 的同义词,二者操作数方向相反。
语法:vrsub.vx vd, vs2, rs1[, v0.t];省略掩码为 vm=1,给出为 vm=0。32 位 OP-V:opcode=1010111、funct3=100(OPIVX)、funct6=000011。
计算x[rs1],XLEN>SEW 取低 SEW 位,XLEN<SEW 符号扩展,x0 提供零减 vs2[i],结果保留低 SEW 位,不产生算术溢出异常。
body 为 vstart≤i<vl;仅掩码开启的 body 元素执行,inactive/tail 按 vma/vta。prestart 不变;vl=0 或 vstart≥vl 不更新任何目标元素。
同宽源/目标可重叠;普通 masked vd 不可为v0。v0 提供 EEW=1 掩码/借位时不可同时作数据源;源组不能以不同 EEW 读取同一寄存器。组起点按 EMUL 对齐,EMUL≤8。
要求 RV32/RV64 V 1.0、已启用向量状态、合法受支持 vtype/SEW。动画固定 m1、vstart=0;VLEN=4096,只展示 body;步骤不是处理器周期。
假定 V/VS 已启用、合法 m1、支持 SEW、VLEN=4096、XLEN=64、vl=4、vstart=0,源已初始化,v0.mask[0..3]=1111。SEW=8, x5=7, v12=[10,0,255,7] → v8=[253,7,8,0]。inactive/tail 按 vma/vta。vl=0 不更新目标。
假定 V/VS 已启用、合法 m1、支持 SEW、VLEN=4096、XLEN=64、vl=4、vstart=0,源已初始化,v0.mask[0..3]=1111。SEW=8, x5=7, v12=[10,0,255,7] → v8=[253,7,8,0]。inactive/tail 按 vma/vta。vl=0 不更新目标。
VRSUB.VX 计算 x[rs1] - vs2[i],VSUB.VX 计算 vs2[i] - x[rs1]。减法不满足交换律,两个结果通常不同。
结果保留低 SEW 位,按 SEW 宽度回绕,不产生整数异常或借位标志。