VFWSUB.WF 的目标寄存器宽度是多少?
它写入 2*SEW 宽度的浮点结果,因此目标寄存器组占用按拓宽结果计算。
宽向量 vs2 减去浮点标量 f[rs1],结果以 2*SEW 宽度写入 vd。
VFWSUB.WF 是 RISC-V V 扩展的拓宽浮点减法指令。左操作数 vs2 已是 2*SEW 宽度,右操作数按需要扩展后相减。结果写入 2*SEW 宽度的 vd 元素,浮点舍入、异常标志和 NaN 处理遵循 RVV 浮点规则。
从 OP-V 编码解码到逐元素拓宽浮点减法:vs2 已是 2*SEW=64 宽,f[rs1] 从 SEW=32 精确扩展后参与运算,结果写入 2*SEW=64。
lane 0: 1 - 1.5 -> -0.5
显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
VFWSUB.WF 的方向是 vs2 减去 f[rs1];不要把它理解成反向减法。
32 位 OP-V:opcode=1010111、funct3=101、funct6=110110。vs2 为2×SEW 浮点源,rs1 选择 SEW 浮点 f 寄存器。
窄源精确拓宽后计算 vs2[i]−f[rs1],以动态 frm 舍入到 2×SEW。目标 EEW=2×SEW、EMUL=2×LMUL,vs2 同样为宽组;EMUL=2/4/8 按组大小对齐、EMUL>8 保留。
同宽目标/源可以重叠;窄源 EMUL≥1 时只能与宽目标最高端重叠,不同 EEW 合法重叠强制 agnostic。同一寄存器不能以两个源 EEW 读取(包括 EEW=1 掩码)。FLEN>SEW 检查 NaN-box,无效时使用 canonical NaN;FLEN<SEW 保留。
省略 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,ft0 在 FLEN=64 下有效 NaN-boxed;省略 v0.t,未掩码;v4/v5(binary64)=[2,4,-2,0], ft0=1.5 → v2/v3(binary64)=[0.5,2.5,-3.5,-1.5]。非活动/尾部按 ma/ta 处理,不保证清零。
它写入 2*SEW 宽度的浮点结果,因此目标寄存器组占用按拓宽结果计算。
vm=0 时用 v0 选择活动元素,vm=1 时所有 body 元素都参与;非活动和尾部元素按当前策略处理。