What unit does VSSE16.V use for stride?
The stride is the byte count in x[rs2]. It is not an element count and is not implicitly multiplied by EEW again; if encoded as rs2=x0, x0 is always 0.
Store 16-bit vector elements from vs3 using byte stride x[rs2] from base x[rs1].
VSSE16.V is a RISC-V V 16-bit strided vector store. Active body elements use address x[rs1] plus the lane index times x[rs2]; x[rs2] is a byte-count stride and may represent positive, negative, or zero stride. With vm=0, v0.t selects elements, and masked-off elements do not access memory.
Decode the 16-bit strided store, then compute each element address as x[rs1] + i * x[rs2] (16 bytes).
Teaching context: V 1.0, enabled vector state, valid supported vtype; fix XLEN=64, VLEN=4096, SEW=EEW=16, LMUL=EMUL=m1, vstart=0, VLMAX=256. rs1=x0 supplies base zero; equal rs1/rs2 require equal values. v0 cannot supply both the EEW=1 mask and data. Active writes are assumed successful; misaligned accesses require environment support, and traps are not modeled. Rows show per-element store events, not a final byte-memory image; accesses are unordered, and overlapping addresses have no guaranteed final value. rs2=x0 shows only candidate accesses that may be combined; non-x0 zero stride still requires one access per active element. VL=0, inactive elements and tails make no access. Sources stay unchanged; normal completion resets vstart=0. Stages are teaching steps, not processor cycles.
The animation starts from the 32-bit vector memory encoding and shows the official bit fields: nf, mew, mop, vm, rs2/vs2 or lumop/sumop, width, register fields, and opcode.
VSSE16.V is an RVV 16-bit strided vector store: each active element uses memory address x[rs1] plus the lane index times x[rs2], where x[rs2] is a byte stride. vl and the v0.t mask decide which body elements participate in memory access.
vs3 supplies store data, rs1 the base and rs2 the byte stride; x0 supplies zero. Fixed EEW=16; EMUL=(EEW/SEW)*LMUL must be 1/8..8 with aligned groups. SEW need not equal EEW.
32-bit STORE-FP: opcode=0100111, nf=000, mew=0, mop=10, width=101; vm at bit25, rs2 at bits24:20, rs1 at bits19:15, vs3 at bits11:7. vm=0 uses v0.t; omission means vm=1.
Active addresses are x[rs1]+i*x[rs2], without EEW scaling; positive, negative and zero strides are supported. rs2=x0 permits fewer than one access per active element; a non-x0 register containing zero still requires one access per active element. Strided accesses are unordered, with no guaranteed final value at overlapping addresses.
Require V 1.0, enabled vector state, vill=0 and supported vtype/EEW. v0 cannot supply both EEW=1 mask and data. Only mask-enabled vstart<=i<vl elements access memory; inactive/tail and vstart>=vl (including vl=0) make no access. Misalignment may succeed or fault, and active accesses may trap. Sources stay unchanged; normal completion resets vstart=0.
Assume enabled V/VS, valid e16,m1,ta,ma, VLEN=4096, XLEN=64, a0=0x8000, a2=4, v8=[10,20,30,40], v0.mask[0..3]=1011, writable memory and successful accesses. vsetvli sets vl=4 and vstart=0; li sets t0=8 bytes. Active elements 0,2,3 store [10,30,40] at [0x8000,0x8010,0x8018]. Element 1 and tails make no access; sources stay unchanged. The address list does not specify access order; normal completion resets vstart=0.
Assume enabled V/VS, valid e16,m1,ta,ma, VLEN=4096, XLEN=64, a0=0x8000, a2=4, v8=[10,20,30,40], v0.mask[0..3]=1011, writable memory and successful accesses. vsetvli sets vl=4 and vstart=0; li sets t0=8 bytes. Active elements 0,2,3 store [10,30,40] at [0x8000,0x8010,0x8018]. Element 1 and tails make no access; sources stay unchanged. The address list does not specify access order; normal completion resets vstart=0.
Assume enabled V/VS, valid e16,m1,ta,ma, VLEN=4096, XLEN=64, a0=0x8000, a2=4, v8=[10,20,30,40], v0.mask[0..3]=1011, writable memory and successful accesses. vsetvli sets vl=4 and vstart=0; li sets t0=8 bytes. Active elements 0,2,3 store [10,30,40] at [0x8000,0x8010,0x8018]. Element 1 and tails make no access; sources stay unchanged. The address list does not specify access order; normal completion resets vstart=0.
The stride is the byte count in x[rs2]. It is not an element count and is not implicitly multiplied by EEW again; if encoded as rs2=x0, x0 is always 0.
Unit-stride access advances by consecutive 2-byte elements; VSSE16.V uses byte stride x[rs2], so it can access structure fields, matrix columns, or reverse sequences.
Yes. rs2=x0 permits fewer memory operations than active elements. With rs2!=x0 and x[rs2]=0, one access per active element is required. Both forms are unordered.
No. With vm=0, a body element whose v0.t bit is 0 does not perform that element's store memory access.