How is VNCLIPU.WI different from VNSRL/VNSRA?
VNCLIPU.WI rounds shifted-out bits using vxrm and saturates with vxsat when the result is outside the unsigned SEW range; VNSRL/VNSRA are narrowing shifts without saturation clipping.
VNCLIPU.WI is an RVV unsigned fixed-point narrowing clip instruction that rounds a 2*SEW source with vxrm and saturates to SEW.
VNCLIPU.WI reads each active 2*SEW-wide vs2 element, performs a fixed-point rounded right shift using a shift amount from the 5-bit unsigned uimm, then clips into the unsigned SEW range and writes the SEW-wide vd result; any active saturation sets sticky vxsat.
Starts from OP-V encoding fields, then shows how VNCLIPU reads 2*SEW-wide vs2, rounded-shifts right using the shift amount and vxrm, saturates into a unsigned SEW-wide vd result, and sets vxsat on saturation.
Require enabled vector state, valid vtype, and support for source 2*SEW and destination SEW; VL=0 updates no destination elements. Same-start narrow-destination/wide-source overlap is legal and forces mask- and tail-agnostic behavior. Only body elements are shown; no definite inactive or tail values are invented.
The teaching model fixes LMUL=m1, vstart=0, and VLEN=4096, so VLMAX=4096/16=256. Only body elements for selected VL=8 are shown; support for source 2*SEW and destination SEW is assumed. Wide vs2 has EMUL=2 and must start at an even register; .wv vs1 cannot overlap the wide source group. No definite inactive or tail results are shown; legal different-EEW overlap forces agnostic behavior. Steps are teaching stages, not processor cycles.
vnclipu.wi uses OP-V encoding. The animation places fixed fields, register fields, vm, and the uimm 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-to-SEW narrowing clip integer unsigned narrowing clip, vxrm fixed-point rounding, and vd writeback; this example sets sticky vxsat. It does not model pipelines, caches, or timing.
VNCLIPU.WI narrows a wide fixed-point intermediate back to SEW width: it applies a rounded right shift using the shift amount and vxrm, clips to the unsigned destination range, and records active-element saturation in vxsat.
vd is the SEW/LMUL narrow destination group; vs2 is the 2*SEW/2*LMUL wide source group. Group starts must align, EMUL≤8, and source/destination widths must be supported.
The count comes from a zero-extended 5-bit uimm (0–31); only its low lg2(2*SEW) bits are used. Interpret the source as unsigned, apply the vxrm rnu/rne/rdn/rod rounded right shift, then saturate to unsigned SEW; active saturation sets sticky vxsat.
vd may overlap wide vs2 only at the same lowest register, forcing mask/tail agnostic; .wv vs1 cannot overlap the wide source group. One register cannot supply sources at multiple EEWs.
vm denotes optional v0.t: vm=0 selects active body elements, omitted for vm=1. A masked vd cannot contain v0; v0 cannot supply both mask and data. Body satisfies vstart≤i<vl; vstart≥vl (including vl=0) updates no destination elements.
Require V 1.0, enabled vector state, and valid supported vtype. The example assumes LMUL=m1, SEW=8, vl=4, vstart=0, and initialized sources, vxrm, and v0.
Assume enabled V/VS, valid m1, VLEN≥128, vl=4, vstart=0, v0.mask[0..3]=1111 and initialized sources. SEW=8, vs2=[3,5,511,65535], uimm=1, vxrm=rne, prior vxsat=0 → vd=[2,2,255,255], vxsat=1. This demonstrates unsigned saturation after rounding. Inactive/tail values follow policy without assumed zeroing.
Assume enabled V/VS, valid m1, VLEN≥128, vl=4, vstart=0, v0.mask[0..3]=1111 and initialized sources. SEW=8, vs2=[3,5,511,65535], uimm=1, vxrm=rne, prior vxsat=0 → vd=[2,2,255,255], vxsat=1. This demonstrates unsigned saturation after rounding. Inactive/tail values follow policy without assumed zeroing.
Assume enabled V/VS, valid m1, VLEN≥128, vl=4, vstart=0, v0.mask[0..3]=1111 and initialized sources. SEW=8, vs2=[3,5,511,65535], uimm=1, vxrm=rne, prior vxsat=0 → vd=[2,2,255,255], vxsat=1. This demonstrates unsigned saturation after rounding. Inactive/tail values follow policy without assumed zeroing.
VNCLIPU.WI rounds shifted-out bits using vxrm and saturates with vxsat when the result is outside the unsigned SEW range; VNSRL/VNSRA are narrowing shifts without saturation clipping.
This instruction sets sticky vxsat when any active element has a rounded shifted result outside the unsigned SEW range and is clipped. Elements disabled by v0.t do not participate in that decision.