VSUB.VV 和 VRSUB 有什么区别?
VSUB.VV 的方向是 vs2[i] - vs1[i]。VRSUB 是反向减法,用标量或立即数减 vs2[i]。
VSUB.VV 计算活动元素的 vs2 减vs1,保留低 SEW 位。
VSUB.VV 对活动元素计算 vs2[i] - vs1[i],结果按 SEW 宽度回绕。
从 OP-V 编码字段开始,展示 VSUB 如何按 vs2 减第二源计算活动元素、按 SEW 回绕,并写回 vd。
要求 V 1.0、已启用向量状态及合法受支持 vtype/SEW。固定 LMUL=m1、vstart=0、VLEN=4096,VLMAX=4096/16=256。普通 masked vd 不可为 v0;同宽源/目标可重叠。XLEN>SEW 取标量低 SEW 位,XLEN<SEW 符号扩展,x0 提供零。v0 提供 EEW=1 掩码时不可同时作 SEW 数据源。VL=0 不更新任何目标元素;这里只展示 body,不伪造 inactive/tail 的确定值。步骤是教学分解,不是处理器周期。
vsub.vv 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 vs1 字段放在同一条编码带中。
动画展示 OP-V 字段解析、活动元素读取、SEW 宽度整数减法、mask 控制和 vd 写回。步骤是教学分解,不表示流水线、缓存或执行时延。
VSUB.VV 对活动元素计算 vs2[i] - vs1[i],结果按 SEW 宽度回绕。
vd/vs2/vs1 是 EEW=SEW、EMUL=LMUL 的向量组,组起点须合法对齐。同宽源/目标可重叠,同名源读取相同值。vs1[i] 是减数。
32 位 OP-V:opcode=1010111、funct6=000010、funct3=000;vm 在 bit25,vs2 在 bits24:20,vs1 在 bits19:15,vd 在 bits11:7。
活动 vd[i]=(vs2[i] - vs1[i]) mod 2^SEW;不产生借位标志或整数溢出异常,不饱和、不改变 vxsat。VRSUB 的减法方向相反。
要求 RV32/RV64 V 1.0、向量状态已启用、vill=0 和受支持 vtype/SEW。v0.t 为 vm=0,省略为 vm=1;仅掩码允许的 vstart≤i<vl 元素计算;prestart 不变,inactive/tail 按 vma/vta 保留或全1;masked vd 不可含 v0。vstart≥vl(含 vl=0)目标不更新;v0 不可同时提供 EEW=1 掩码和数据。正常完成后 vstart=0。
假定 V/VS 已启用、合法 m1,tu,mu、VLEN=4096、vl=4、vstart=0,v0.mask[0..3]=1101;SEW=8, v12=[0,1,255,7], v4=[1,1,1,1]。v8[0]=255, v8[1]=0, v8[3]=6。lane2和tail保持旧值;vxsat不变。正常完成后vstart=0。
假定 V/VS 已启用、合法 m1,tu,mu、VLEN=4096、vl=4、vstart=0,v0.mask[0..3]=1101;SEW=8, v12=[0,1,255,7], v4=[1,1,1,1]。v8[0]=255, v8[1]=0, v8[3]=6。lane2和tail保持旧值;vxsat不变。正常完成后vstart=0。
VSUB.VV 的方向是 vs2[i] - vs1[i]。VRSUB 是反向减法,用标量或立即数减 vs2[i]。
不会。普通向量整数减法保留低 SEW 位,结果按 SEW 宽度回绕。