VMAX.VX

RISC-V VMAX.VX Instruction Details

Instruction ManualOPIVX

Select the larger value element by signed integer ordering and write the selected SEW-bit pattern to vd.

Instruction Syntax

vmax.vx vd, vs2, rs1[, v0.t]
Operand Breakdown
vd is the SEW-bit destination; compare vs2 and the second source by two’s-complement signed ordering and select the larger source pattern.
rs1 selects an integer x-register: take low SEW bits when XLEN>SEW, sign-extend when XLEN<SEW; x0 supplies zero.
Require V 1.0, enabled vector state, valid vtype, and supported widths. Same-EEW source/destination overlap is allowed; masked vd cannot cover v0, and v0 cannot supply both EEW=1 mask and SEW data.
Body is vstart≤i<vl; omitting v0.t means vm=1 and including it means vm=0. Prestart is unchanged; inactive/tail follow vma/vta, with no guarantee of zero agnostic values. VL=0 or vstart≥vl updates no destination.
VVector IntegerMin/Max

Extension condition: Requires V 1.0, enabled vector state, valid vtype, and supported element widths.

Instruction Behavior

VMAX.VX is the RISC-V V extension vector-scalar signed maximum instruction. Each active body element reads vs2[i] and integer scalar x[rs1], compares them by signed integer ordering, and writes the selected original SEW-bit pattern to vd; with vm=0, the v0 mask controls which elements execute.

VMAX.VX Decode And Execute Animation

Starts from OP-V encoding fields, then shows how VMAX compares active elements as signed integers and writes the larger SEW-bit pattern to vd.

Instruction input
vmax.vx
Execution Context

The teaching model fixes LMUL=m1 and vstart=0 and shows only body elements in the selected VL. It fixes VLEN=4096, VLMAX=4096/16=256, and assumes support for the selected SEW; equal vector sources require equal elements. In ordinary masked forms, inactive and tail elements follow vtype.vma/vta and the result row does not invent a definite value; VADC/VMADC/VSBC/VMSBC execute every body element, with v0 bits used only as carry/borrow-in.

OP-V encodingvmax.vx
funct6
000111
vm
0
vs2
01000
rs1
01011
funct3
100
vd
00100
opcode
1010111
lane
0
1
2
3
4
5
6
7
v8
0x00fa
0x010b
0x011c
0x012d
0x013e
0x014f
0x0160
0x0171
max
max
max
max
max
max
max
max
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

vmax.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, SEW-width integer signed maximum, mask control, and vd writeback. It does not model pipelines, caches, or timing.

Quick Understanding & Search Notes

VMAX.VX compares vs2 with x[rs1] after the XLEN/SEW scalar rule lane by lane for active elements within the current vl and selects the larger value by signed integer ordering. The result is the selected source element's SEW-bit pattern written to vd; it does not compute a difference.

32-bit OP-V encoding: opcode=1010111, funct6=000111, funct3=100 (OPIVX). Syntax places vs2 before vs1/rs1.
Active elements compare vs2 and the second source using two’s-complement signed integer ordering and write the larger value’s SEW-bit pattern to vd.
When XLEN>SEW, use the low SEW bits of x[rs1]; when XLEN<SEW, sign-extend to SEW. rs1=x0 supplies zero.
Body elements satisfy vstart≤i<vl. Omitting v0.t means vm=1; including it means vm=0, enabling only masked-on body elements. Prestart is unchanged; inactive/tail elements follow vma/vta, with agnostic elements retaining old values or becoming all ones.
VL=0 or vstart≥vl updates no destination elements, including tails. Normal completion resets vstart=0 and leaves vl unchanged. Masked vd cannot cover v0, and v0 cannot be read as both an EEW=1 mask and SEW data.

Vector Execution Context

vd is the SEW-bit destination; compare vs2 and the second source by two’s-complement signed ordering and select the larger source pattern.

rs1 selects an integer x-register: take low SEW bits when XLEN>SEW, sign-extend when XLEN<SEW; x0 supplies zero.

Require V 1.0, enabled vector state, valid vtype, and supported widths. Same-EEW source/destination overlap is allowed; masked vd cannot cover v0, and v0 cannot supply both EEW=1 mask and SEW data.

Body is vstart≤i<vl; omitting v0.t means vm=1 and including it means vm=0. Prestart is unchanged; inactive/tail follow vma/vta, with no guarantee of zero agnostic values. VL=0 or vstart≥vl updates no destination.

The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, Chapter 31

Common Usage Scenarios

Elementwise maximum selection

Assume RV32/RV64 V, enabled vector state, supported e32,m1, and VLEN≥128; after vsetivli, vl=4, vstart=0, ta/ma, with initialized sources and v0.mask=[1,0,1,1]. v8=[0xffffffff,2,0x80000000,7], x11=3 → v4=[3,policy,3,7]. policy means mask-agnostic: retain the old value or write all ones; tails are likewise not guaranteed zero.

Pre-Use Checklist

Syntax Check
  • vd is the SEW-bit destination; compare vs2 and the second source by two’s-complement signed ordering and select the larger source pattern.
  • rs1 selects an integer x-register: take low SEW bits when XLEN>SEW, sign-extend when XLEN<SEW; x0 supplies zero.
Semantic Check
  • Require V 1.0, enabled vector state, valid vtype, and supported widths. Same-EEW source/destination overlap is allowed; masked vd cannot cover v0, and v0 cannot supply both EEW=1 mask and SEW data.
  • Body is vstart≤i<vl; omitting v0.t means vm=1 and including it means vm=0. Prestart is unchanged; inactive/tail follow vma/vta, with no guarantee of zero agnostic values. VL=0 or vstart≥vl updates no destination.

Pitfalls / Common Confusions

VMAX selects one source element pattern; it is not addition, subtraction, or a saturating operation.
Signed forms interpret each SEW-wide source element as a two's-complement signed integer, so a value with the top bit set can be smaller than one with the top bit clear.
The VX form takes its second source from integer register x[rs1]; if XLEN>SEW the low SEW bits are used, and if XLEN<SEW the value is sign-extended to SEW before comparison.
With vm=0, masked-off body elements do not perform this compare; their destination elements follow the current mask policy and must not be assumed to become zero.

FAQ

How does VMAX.VX differ from the unsigned form?

VMAX.VX uses signed integer ordering; the corresponding U form uses unsigned integer ordering. Both write back the selected source's SEW-bit pattern; the .vx scalar source first follows the XLEN/SEW scalar rule.

How does VMAX.VX handle masking and tails?

vm=0 uses v0.t and enables only elements where vstart≤i<vl and the mask bit is 1. vm=1 is unmasked. Prestart is unchanged; inactive/tail elements follow vma/vta. With VL=0 or vstart≥vl, even tails are unchanged.