VSUB.VX 是标量减向量吗?
不是。VSUB.VX 的方向是 vs2[i] - x[rs1]。标量减向量应使用 VRSUB.VX。
VSUB.VX 计算活动元素的 vs2 减整数标量,保留低 SEW 位。
VSUB.VX 对活动元素计算 vs2[i] - 标量,结果按 SEW 宽度回绕。rs1 的整数标量在 XLEN>SEW 时取低 SEW 位,XLEN<SEW 时符号扩展;x0 提供零。
从 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.vx 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 rs1 字段放在同一条编码带中。
动画展示 OP-V 字段解析、活动元素读取、SEW 宽度整数减法、mask 控制和 vd 写回。步骤是教学分解,不表示流水线、缓存或执行时延。
VSUB.VX 对活动元素计算 vs2[i] - 标量,结果按 SEW 宽度回绕。rs1 的整数标量在 XLEN>SEW 时取低 SEW 位,XLEN<SEW 时符号扩展;x0 提供零。
vd/vs2 是 EEW=SEW、EMUL=LMUL 的向量组,组起点须合法对齐。同宽源/目标可重叠,同名源读取相同值。rs1 标量在 XLEN>SEW 时取低 SEW 位,XLEN<SEW 时符号扩展;x0 提供零。
32 位 OP-V:opcode=1010111、funct6=000010、funct3=100;vm 在 bit25,vs2 在 bits24:20,rs1 在 bits19:15,vd 在 bits11:7。
活动 vd[i]=(vs2[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], XLEN=64, x5=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], XLEN=64, x5=1。v8[0]=255, v8[1]=0, v8[3]=6。lane2和tail保持旧值;vxsat不变。正常完成后vstart=0。
不是。VSUB.VX 的方向是 vs2[i] - x[rs1]。标量减向量应使用 VRSUB.VX。
VX 形式的标量来自整数寄存器 rs1,并参与每个活动元素的同一条减法。