VFWSUB.VV 的目标寄存器宽度是多少?
它写入 2*SEW 宽度的浮点结果,因此目标寄存器组占用按拓宽结果计算。
窄向量 vs2 减去窄向量 vs1,结果以 2*SEW 宽度写入 vd。
VFWSUB.VV 是 RISC-V V 扩展的拓宽浮点减法指令。两个输入先扩展到 2*SEW 宽度后相减。结果写入 2*SEW 宽度的 vd 元素,浮点舍入、异常标志和 NaN 处理遵循 RVV 浮点规则。
从 OP-V 编码解码到逐元素拓宽浮点减法:两个 SEW=32 源先扩展,再写入 2*SEW=64 的结果。
lane 0: 1 - 0.5 -> 0.5
显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
VFWSUB.VV 的方向是 vs2 减去 vs1;不要把它理解成反向减法。
32 位 OP-V:opcode=1010111、funct3=001、funct6=110010。vs2 为SEW 浮点源,vs1 为 SEW 浮点向量源。
窄源精确拓宽后计算 vs2[i]−vs1[i],以动态 frm 舍入到 2×SEW。目标 EEW=2×SEW、EMUL=2×LMUL,EMUL=2/4/8 按组大小对齐、EMUL>8 保留。
同宽目标/源可以重叠;窄源 EMUL≥1 时只能与宽目标最高端重叠,不同 EEW 合法重叠强制 agnostic。同一寄存器不能以两个源 EEW 读取(包括 EEW=1 掩码)。同名窄源必须读取相同初值。
省略 v0.t 为 vm=1,写出为 vm=0。prestart 不更新;inactive/tail 按 vma/vta 处理,undisturbed 保留旧值,agnostic 可保留旧值或写全1。vl=0 或 vstart≥vl 不更新任何目标(包括 tail);成功执行后 vstart=0。
V 1.0 适用于 RV32/RV64,并依赖 F/D;要求支持源/目标浮点格式、合法 vtype、VS/FS 已启用。无效 frm 使用保留(包括 vl=0),vxrm 不参与。活动异常累积到 fflags,inactive 不产生异常;NaN 规则与标量相同。动画仅展示 SEW=32 到 binary64 的有限 RNE 路径;NaN、无穷和完整 fflags 在模型之外。
假定合法 e32,m1、VS/FS 已启用、所需格式受支持、VLMAX≥4、a0=4,vsetvli 后 vl=4、vstart=0。frm=RNE,省略 v0.t,未掩码;v4(binary32)=[2,4,-2,0], v6(binary32)=[3,-1,2,5] → v2/v3(binary64)=[-1,5,-4,-5]。非活动/尾部按 ma/ta 处理,不保证清零。
它写入 2*SEW 宽度的浮点结果,因此目标寄存器组占用按拓宽结果计算。
vm=0 时用 v0 选择活动元素,vm=1 时所有 body 元素都参与;非活动和尾部元素按当前策略处理。