Does VFWMUL.VV use old vd as an accumulator?
It does not use old vd as an accumulator. Active elements receive double-width products; legal narrow-source/wide-destination overlap still reads the overlapping source values.
Multiply vs2[i] by same-lane vs1[i] and write the 2*SEW-wide result to vd[i].
Extension condition: V 1.0 on RV32/RV64, with supported FP formats and vtype and enabled VS/FS. Standard V supports the SEW=32-to-binary64 path shown here; this does not imply a supported binary128 result at SEW=64.
VFWMUL.VV performs lane-wise widening FP multiplication: each active element computes vs2[i] x vs1[i] and writes a 2*SEW-wide result to vd[i]. It does not read old vd as an accumulator; the mask, vl, and current vtype determine which elements execute.
Decode the OP-V encoding and execute lane-wise widening FP multiplication: SEW=32 sources are widened before their product is written as a 2*SEW=64 result.
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.
VFWMUL.VV multiplies each active vs2[i] by vs1[i] and writes the widened 2*SEW result to vd[i]; there is no old-vd accumulation term.
Syntax: vfwmul.vv vd, vs2, vs1[, v0.t]. 32-bit OP-V: opcode=1010111, funct3=001, funct6=111000. Old vd is not an accumulator.
Narrow vector sources use EEW=SEW, EMUL=LMUL; vd uses EEW=2×SEW, EMUL=2×LMUL. Groups with EMUL=2/4/8 align to their size; EMUL>8 is reserved. Narrow-source/wide-destination overlap requires source EMUL≥1 and equal highest register numbers; legal different-EEW overlap forces mask/tail agnostic. Equal narrow sources read equal initial values.
Each active element computes (vs1[i] * vs2[i]), producing a double-width product. The real instruction uses dynamic frm, not vxrm. Both multipliers are same-index vector elements.
Omitting v0.t means vm=1; including it means vm=0. Only elements with vstart≤i<vl and an enabled mask execute and accrue FP exceptions to fflags. A masked destination cannot include v0; one register cannot be read as both an EEW=1 mask and different-EEW data source.
Prestart elements do not update or raise exceptions; vl=0 or vstart≥vl updates no destination elements, including tails. Other inactive/tail elements follow vma/vta; ta/ma does not guarantee zeros. Successful execution resets vstart=0.
V 1.0 supports RV32/RV64 and depends on F/D. Require supported FP formats, valid vtype, and enabled VS/FS; with H and virtualization V=1, vsstatus.VS/FS must also be enabled. Invalid frm use is reserved even at vl=0. This animation fixes SEW=32, LMUL=m1, VLEN=4096, vstart=0, RNE, ta/ma, and finite inputs; it does not fully simulate NaNs, infinities, or fflags.
Assume enabled V/VS/FS, valid e32,m1, supported formats, frm=RNE, VLMAX≥4, and a0=4; vsetvli sets vl=4 and vstart=0. Omitting v0.t makes this unmasked: v4(binary32)=[3,-1,2,5], v6(binary32)=[2,4,-2,0] → v2/v3(binary64)=[6,-4,-4,0]. Tails follow ta without guaranteed zeros.
It does not use old vd as an accumulator. Active elements receive double-width products; legal narrow-source/wide-destination overlap still reads the overlapping source values.