Do inactive, tail and prestart elements behave identically?
Prestart stays unchanged. Inactive/tail follow vma/vta: undisturbed, or agnostic (old values or all ones, without a fixed guarantee). Legal different-EEW overlap forces agnostic behavior.
VWMUL.VX writes the full signed 2*SEW product to vd without accumulation.
RISC-V V 1.0 widening integer multiply using signed multiplicands. Write the full 2*SEW product. Require enabled vector state, valid vtype and supported SEW/2*SEW. Update only mask-enabled vstart<=i<vl elements; prestart stays unchanged. Inactive/tail follow vma/vta; legal different-EEW overlap forces agnostic behavior.
Starts from OP-V encoding fields, then shows how VWMUL interprets SEW source elements as signed-by-signed and writes the full 2*SEW product to vd.
Teaching context: V 1.0, enabled vector state and valid supported vtype; fix LMUL=m1, VLEN=4096, vstart=0. Require SEW and 2*SEW support; SEW=64 needs additional 128-bit integer elements. Enter nonnegative SEW bit patterns, interpreted as signed two’s-complement. .vx takes low bits when XLEN>SEW or sign-extends when XLEN<SEW; x0 supplies zero. Write the full product to 2*SEW vd without accumulating old vd, saturation or vxsat change. Destination EMUL=2 requires an even start; a narrow source may overlap only its highest register, forcing mask/tail-agnostic behavior. Equal sources require equal initial values; with v0.t, vd and data sources exclude v0. Only body is shown, without definite inactive/tail values. VL=0 updates nothing; success resets vstart=0. Stages are not processor cycles.
vwmul.vx uses OP-V encoding. The animation places fixed fields, register fields, vm, and the rs1 field in one encoding strip.
This animation shows only ISA-visible relationships from the official V extension: OP-V field decode, active-element reads, 2*SEW widening integer signed widening multiplication, mask control, and vd writeback. It does not model pipelines, caches, or timing.
VWMUL.VX writes the full signed 2*SEW product to vd without accumulation.
RV32/RV64 V 1.0; enabled vector state, vill=0, supported SEW and 2*SEW. vd is a wide destination with EEW=2*SEW, EMUL=2*LMUL<=8 and an aligned group start. SEW=64 needs additional 128-bit integer elements.
32-bit OP-V: opcode=1010111, funct6=111011, funct3=110 (OPMVX); vm bit25, vs2 bits24:20, rs1 bits19:15, vd bits11:7. Syntax source order: vs2, vs1/rs1. Optional v0.t means vm=0; omission means vm=1.
Form the full 2*SEW product as signed × signed and write vd directly. A narrow source overlaps wide vd only with EMUL>=1 and equal highest registers, forcing mask/tail-agnostic behavior. First take low scalar bits for XLEN>SEW or sign-extend for XLEN<SEW; x0 supplies zero.
Compute only mask-enabled vstart<=i<vl elements. Prestart stays unchanged; inactive/tail follow vma/vta: undisturbed or agnostic (old values or all ones). Masked vd excludes v0, which cannot supply mask and data together. vstart>=vl (including vl=0) leaves all destination elements unchanged; success resets vstart=0 without saturation or vxsat change.
Assume enabled V/VS, valid e8,m1,tu,mu, supported 16-bit results, VLEN=4096, XLEN=64, vl=4, vstart=0, v0.mask[0..3]=1101; v12=[255,128,1,127], x5=255. v8=[0x0001,0x0080,unchanged,0xff81], with 16-bit results. Lane2 and tails keep old values; vxsat is unchanged, and success resets vstart=0.
Prestart stays unchanged. Inactive/tail follow vma/vta: undisturbed, or agnostic (old values or all ones, without a fixed guarantee). Legal different-EEW overlap forces agnostic behavior.
This widening operation needs implementation support for 128-bit integer elements, beyond baseline V guarantees. Check supported SEW/2*SEW and legal register groups.