What is the destination width of VFWSUB.VF?
It writes 2*SEW floating-point results, so destination register-group use is based on the widened result.
Subtract floating-point scalar f[rs1] from narrow vector vs2 and write the 2*SEW result to vd.
VFWSUB.VF is a RISC-V V widening floating-point subtract instruction. Both inputs are widened to 2*SEW before subtraction. The result is written to 2*SEW vd elements, with floating-point rounding, exception flags, and NaN handling following RVV FP rules.
Decode the OP-V encoding and execute lane-wise widening FP subtraction: SEW=32 sources are widened before writing 2*SEW=64 results.
lane 0: 1 - 1.5 -> -0.5
This lane follows the current-step highlight; the remaining lane results appear below.
V-extension FP instructions use the OP-V major opcode, with funct6, source registers, vm, funct3, vd, and opcode fields.
VFWSUB.VF subtracts f[rs1] from vs2; it is not a reversed subtract.
32-bit OP-V: opcode=1010111, funct3=101, funct6=110010. vs2 is a SEW FP source; rs1 selects an SEW FP f register.
Widen narrow sources exactly, compute vs2[i]−f[rs1], then round to 2×SEW using dynamic frm. Destination EEW=2×SEW, EMUL=2×LMUL; EMUL=2/4/8 groups align to their size; EMUL>8 is reserved.
Equal-width destination/source overlap is legal. A narrow source with EMUL≥1 may overlap only the wide destination high end; legal different-EEW overlap forces agnostic policy. One register cannot be read with two source EEWs, including an EEW=1 mask. FLEN>SEW checks NaN-boxing and supplies canonical NaN for an invalid box; FLEN<SEW is reserved.
Omit v0.t for vm=1; include it for vm=0. Prestart stays unchanged; inactive/tail elements follow vma/vta. Undisturbed preserves old values; agnostic may preserve them or write all ones. vl=0 or vstart≥vl updates no destination elements, including tails; successful execution resets vstart=0.
V 1.0 supports RV32/RV64 and depends on F/D. Require supported source/result formats, valid vtype, and enabled VS/FS. Invalid frm use is reserved even at vl=0; vxrm is not used. Active exceptions accrue in fflags, inactive elements raise none, and NaN rules match scalar FP. This finite RNE model shows SEW=32 to binary64 only; NaNs, infinities, and full fflags are outside it.
Assume valid e32,m1, enabled VS/FS, supported formats, VLMAX≥4, and a0=4; vsetvli sets vl=4 and vstart=0. frm=RNE; ft0 is validly NaN-boxed at FLEN=64. Omit v0.t for unmasked execution. v4(binary32)=[2,4,-2,0], ft0=1.5 → v2/v3(binary64)=[0.5,2.5,-3.5,-1.5]. Inactive/tail elements follow ma/ta without guaranteed zeros.
It writes 2*SEW floating-point results, so destination register-group use is based on the widened result.
With vm=0, v0 selects active elements; with vm=1, all body elements participate. Inactive and tail elements follow the current policies.