Check vl first
The current vl determines the number of body elements. Typical code executes vsetvli, vsetivli, or vsetvl before this instruction.
VSMUL.VV is an RVV signed fixed-point fractional multiply instruction that uses vxrm rounding and sets vxsat on saturation.
VSMUL.VV reads each active vs2 element and the same-lane vs1 element, computes a 2*SEW signed product, rounds the value scaled right by SEW-1 bits according to vxrm, then saturates into the signed SEW range and writes vd; any active saturation sets sticky vxsat.
Starts from OP-V encoding fields, then shows how VSMUL forms a signed fractional 2*SEW product, rounds the SEW-1 scaled result with vxrm, saturates into vd, and sets vxsat on saturation.
vsmul.vv uses OP-V encoding. The animation places fixed fields, register fields, vm, and the vs1 field in one encoding strip.
This animation shows only ISA-visible relationships from the official V extension: OP-V field decode, active-element reads, SEW-width integer signed fractional saturating multiply, vxrm fixed-point rounding, and vd writeback; this example sets sticky vxsat. It does not model pipelines, caches, or timing.
VSMUL.VV multiplies two signed SEW fixed-point fractions, equivalent to scaling the 2*SEW product by SEW-1 bits, rounding with vxrm, and signed saturation; it is Q-format-style fractional multiply, not ordinary integer multiply.
When reading VSMUL.VV, do not stop at the mnemonic. Official V-extension semantics also depend on the current vl, vtype, and mask state. .vv: two vector sources participate element by element.
The current vl determines the number of body elements. Typical code executes vsetvli, vsetivli, or vsetvl before this instruction.
The current vtype supplies SEW, LMUL, tail policy, and mask policy; these affect element width, register-group size, and inactive/tail destination elements.
For ordinary vector instructions with vm, vm=0 uses v0 as the execution mask and vm=1 is unmasked. A few forms such as VMERGE use v0 as data-selection input.
Understand this scenario with real code like «vsmul.vv v4, v8, v12, v0.t # signed fractional multiply, vxrm rounding, vxsat on saturation».
Understand this scenario with real code like «vsmul.vv v4, v8, v12, v0.t # signed fractional multiply, vxrm rounding, vxsat on saturation».
Understand this scenario with real code like «vsmul.vv v4, v8, v12, v0.t # signed fractional multiply, vxrm rounding, vxsat on saturation».
VMUL/VMULH are ordinary integer multiply low-half or high-half operations; VSMUL is signed fixed-point fractional multiply, scales by SEW-1 bits, rounds with vxrm, and can set vxsat.
VSMUL sets sticky vxsat when any active element has a rounded scaled result outside the signed SEW range and saturates. Elements disabled by v0.t do not participate in this instruction's saturation decision.