What is the destination width of VFWSUB.VV?
It writes 2*SEW floating-point results, so destination register-group use is based on the widened result.
Subtract narrow vector vs1 from narrow vector vs2 and write the 2*SEW result to vd.
VFWSUB.VV 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 - 0.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.VV subtracts vs1 from vs2; it is not a reversed subtract.
32-bit OP-V: opcode=1010111, funct3=001, funct6=110010. vs2 is a SEW FP source; vs1 is an SEW FP vector source.
Widen narrow sources exactly, compute vs2[i]−vs1[i], 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. Equal narrow source registers read equal initial values.
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; Omit v0.t for unmasked execution. v4(binary32)=[2,4,-2,0], v6(binary32)=[3,-1,2,5] → v2/v3(binary64)=[-1,5,-4,-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.