Home/Instructions/VMULHU-VX
VMULHU.VX

RISC-V VMULHU.VX Instruction Details

Instruction ManualR-type

VMULHU.VX forms each active element's 2*SEW integer product and writes the product's high SEW bits.

Instruction Syntax

vmulhu.vx vd, vs2, rs1, vm
Operand Breakdown
vd: mask destination register, with one Boolean result bit per element.
vs2/vs1 or scalar source: compared at the current SEW.
vm: vm=0 uses v0 to restrict participating elements, and vm=1 is unmasked.
VVector IntegerMultiply

Instruction Behavior

VMULHU.VX is a RISC-V V extension single-width integer vector-scalar multiply instruction. Each active element reads vs2 and the second source from integer scalar register rs1, forms a 2*SEW product, and writes the high SEW bits to vd. both source operands are interpreted as unsigned; with vm=0, only body elements whose v0.t bit is 1 are processed, while masked-off and tail elements follow the current vtype policies.

VMULHU.VX Decode And Execute Animation

Starts from OP-V encoding fields, then shows how VMULHU forms a 2*SEW product and writes the unsigned-by-unsigned high SEW bits to vd.

Instruction input
vmulhu.vx
OP-V encodingvmulhu.vx
funct6
100100
vm
0
vs2
01000
rs1
01011
funct3
110
vd
00100
opcode
1010111
lane
0
1
2
3
4
5
6
7
v8
0xfffe
0x003a
0x004f
0xfffb
0x0079
0x008e
0xfff8
0x00b8
*
*
*
*
*
*
*
*
x11
0x0013
0x0013
0x0013
0x0013
0x0013
0x0013
0x0013
0x0013
v0.t
1
0
1
1
1
0
1
1
v4
...
-
...
...
...
-
...
...
Current step

Show OP-V 32-bit encoding fields

vmulhu.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, the high half of a 2*SEW product integer unsigned high-half multiplication, mask control, and vd writeback. It does not model pipelines, caches, or timing.

Quick Understanding & Search Notes

VMULHU.VX does not write a full widening product. It forms a 2*SEW product for active elements within the current vl and writes only the high SEW bits to vd; the second source comes from integer scalar register rs1, and both source operands are interpreted as unsigned.

VMULHU.VX uses OP-V multiply-class encoding; the .vx form is selected by funct3=110, and funct6=100100 selects VMULHU.
Each active element first forms a 2*SEW product and then writes the high SEW bits; vd remains an SEW-width ordinary vector destination, not a 2*SEW widening destination.
x[rs1] is first converted to an SEW-width element by the official .vx scalar rule before participating in each lane multiply.
both source operands are interpreted as unsigned.
Only body elements within the current vl are processed; vm=0 uses the v0.t mask, and masked-off plus tail elements follow the current vtype policies.

Vector Execution Context

When reading VMULHU.VX, do not stop at the mnemonic. Official V-extension semantics also depend on the current vl, vtype, and mask state. .vx: one vector source and one integer scalar source participate.

Check vl first

The current vl determines the number of body elements. Typical code executes vsetvli, vsetivli, or vsetvl before this instruction.

Then check vtype

The current vtype supplies SEW, LMUL, tail policy, and mask policy; these affect element width, register-group size, and inactive/tail destination elements.

Then check vm/v0

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.

Official source: RISC-V V Standard Extension for Vector Operations

Common Usage Scenarios

Fixed-Point

Understand this scenario with real code like «vmulhu.vx v4, v8, a1, v0.t # high SEW bits of unsigned vector-scalar product».

Fractional

Understand this scenario with real code like «vmulhu.vx v4, v8, a1, v0.t # high SEW bits of unsigned vector-scalar product».

Pre-Use Checklist

Syntax Check
  • Confirm the current instruction format is R-type.
  • Confirm the operand order matches the example.
Semantic Check
  • Ensure the destination register usage is compatible with the calling convention.
  • Confirm this is not the lower-level form of a pseudo-instruction expansion.

Pitfalls / Common Confusions

VMULHU.VX writes the high SEW bits, not the low half; use VMUL for low-half multiplication.
both source operands are interpreted as unsigned; do not mix up the signedness combinations of VMULH, VMULHU, and VMULHSU.
With vm=0, v0.t is the execution mask; the destination value for masked-off elements is controlled by the current vtype.vma policy.
These instructions are not multiply-accumulate operations and do not read old vd as an accumulator; use VMACC/VWMACC-family instructions for accumulation.

FAQ

How does VMULHU.VX differ from VWMUL*?

VMULHU.VX writes only the high SEW bits to an SEW-width vd. VWMUL* writes the full 2*SEW widening product.

Does VMULHU.VX read old vd for accumulation?

No. This instruction writes only the selected high SEW bits from the current multiply; use VMACC/VWMACC-family multiply-accumulate instructions when accumulation is required.