How does VMAXU.VX differ from the signed form?
VMAXU compares unsigned values; VMAX compares signed values. Both select the original SEW bits. The .vx scalar follows XLEN/SEW rules.
Select the larger value element by unsigned integer ordering and write the selected SEW-bit pattern to vd.
VMAXU.VX is the RISC-V V extension vector-scalar unsigned maximum instruction. Each active body element reads vs2[i] and integer scalar x[rs1], compares them by unsigned integer ordering, and writes the selected original SEW-bit pattern to vd; with vm=0, the v0 mask controls which elements execute.
Starts from OP-V encoding fields, then shows how VMAXU compares active elements as unsigned integers and writes the larger SEW-bit pattern to vd.
Require valid vtype, enabled VS, and supported SEW. Only body elements are shown; VL=0 updates no destination elements, including tails. Same-EEW sources/destination may overlap. When v0 supplies EEW=1 mask/selection bits, it cannot also supply SEW data or be vd.
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.
vmaxu.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 unsigned maximum, mask control, and vd writeback. It does not model pipelines, caches, or timing.
For active elements, VMAXU.VX selects the larger unsigned value of vs2[i] and the XLEN/SEW-adapted x[rs1], writing its SEW-bit pattern to vd[i].
vd is the SEW-bit destination; compare vs2 and the second source by unsigned 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.
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=[0xffffffff,policy,0x80000000,7]. policy means mask-agnostic: retain the old value or write all ones; tails are likewise not guaranteed zero.
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=[0xffffffff,policy,0x80000000,7]. policy means mask-agnostic: retain the old value or write all ones; tails are likewise not guaranteed zero.
VMAXU compares unsigned values; VMAX compares signed values. Both select the original SEW bits. The .vx scalar follows XLEN/SEW rules.
Use the low SEW bits if XLEN>SEW; sign-extend if XLEN<SEW, even for this unsigned comparison. x0 supplies zero.
vm=0 executes body lanes with v0.t=1; vm=1 executes all body lanes. Inactive and tail results follow vtype policies.