Where does vslide1down.vx insert the scalar?
Insert only when vd[vl-1] is active; if masked off, it follows vma. Other active elements take vs2[i+1]. The destination is unchanged when vstart>=vl or vl=0.
Slide vector elements toward lower indexes and insert a scalar.
VSLIDE1DOWN.VX copies adjacent vs2 elements to active destinations and inserts x[rs1] into vd[vl-1] only when that destination is active. Inactive/tail elements follow vma/vta.
Starts from OP-V encoding fields, then shows how VSLIDE1DOWN moves vs2 elements one position toward lower indexes and inserts scalar x[rs1] into vd[vl-1].
Require V 1.0, enabled vector state, and valid supported vtype/SEW. Fix LMUL=m1 and vstart=0; this teaching configuration has VLEN=VLMAX×SEW=256, at least 128 bits. Changing SEW/VLMAX switches configurations. Only body is shown; inactive/tail values follow vma/vta without definite values. VL=0 updates no destination elements, including tails. With masking, vd/vs2 cannot be v0. Equal-width vd/vs2 may overlap. Inserted scalars sign-extend when XLEN<SEW and take low bits when XLEN>SEW; x0 supplies zero. Steps are teaching stages, not processor cycles.
The teaching model fixes LMUL=m1 and vstart=0 and shows only body elements in the selected VL. 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.
vslide1down.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, element-index/packing/select/move rearrangement integer slide one down with scalar insert, boundary/selection rules, and vd writeback. It does not model pipelines, caches, or timing.
vslide1down.vx is the fixed OFFSET=1 slidedown variant: active vd[i<vl-1] reads vs2[i+1], and active vd[vl-1] receives x[rs1].
vd/vs2 are SEW/LMUL vector groups with starts aligned to EMUL. Equal-width source/destination overlap is allowed. rs1 supplies the inserted scalar: sign-extend for XLEN<SEW and take low SEW bits for XLEN>SEW; x0 supplies zero.
32-bit OP-V: funct6=001111 at bits31:26, vm at bit25, vs2 at bits24:20, rs1 at bits19:15, funct3=110 at bits14:12, vd at bits11:7, opcode=1010111 at bits6:0.
Only active destinations update: for i<vl-1, vd[i]=vs2[i+1]; vd[vl-1]=x[rs1]. No memory access.
Optional v0.t means vm=0; omission means vm=1. Masked vd cannot contain v0, which cannot supply both EEW=1 mask and SEW data. Prestart is unchanged; inactive/tail follow vma/vta, with the slideup region below both OFFSET and vl always unchanged.
Require V 1.0, enabled vector state and valid supported vtype/SEW. vstart>=vl (including vl=0) leaves all destination elements unchanged. Examples assume LMUL=m1, SEW=16, vl=8, vstart=0 and initialized sources, scalars and v0; animation stages are for teaching.
Understand this scenario with real code like «vslide1down.vx v8, v12, x5, v0.t».
Insert only when vd[vl-1] is active; if masked off, it follows vma. Other active elements take vs2[i+1]. The destination is unchanged when vstart>=vl or vl=0.
No. It only rearranges vector-register elements or inserts a scalar-register value; memory loads and stores are handled by vector load/store instructions.