vrgatherei16.vvmnemonicvrgatherei16.vv:16 位索引收集
vrgatherei16 是 RISC-V V 1.0 的16 位索引收集指令。不同操作数后缀属于同一助记符并集中列在本页。
vrgatherei16.vv 02vd, vs2, vs1, vmvrgatherei16.vvmnemonicvrgatherei16.vv:16 位索引收集
vd, vs2, vs1, vmdestination该形式的操作数顺序;其他形式见下表。
li a0, 10
vsetvli t0, a0, e32, m4, tu, mu # VLEN=128
vrgatherei16.vv v0, v8, v12[511:0][511:0][511:0]| 语法 | 说明 |
|---|---|
vrgatherei16.vv vd, vs2, vs1, vm | RISC-V V 1.0 规范形式 |
元素 0 位于寄存器组最低 SEW 位;活动 body 元素按 permute 类语义处理。VLMAX = LMUL × VLEN / SEW,实际写入范围由 vstart、vl、执行掩码和尾部策略共同决定。
# vs1 contains 16-bit unsigned indices
for i = vstart .. vl - 1:
if vm == 1 or v0.mask[i] == 1:
vd[i] = zero_extend(vs1[i]) >= VLMAX ? 0 : vs2[zero_extend(vs1[i])]
else:
vd[i] = vma ? agnostic : old_vd[i]
for i = vl .. VLMAX - 1:
vd[i] = vta ? agnostic : old_vd[i]
vstart = 0活动目标元素写入 vd,来源保持不变;prestart 元素不变,被掩码元素由 vma、尾部元素由 vta 决定保持或 agnostic,正常完成后 vstart=0。目标与来源须满足 LMUL/EMUL 对齐、编号范围和重叠限制。
该指令只使用寄存器,不访问数据内存,因此没有内存对齐要求。整数、掩码和排列操作不修改 x86 风格条件码;浮点运算按规范累积 fflags。
vsetvli t0, a0, e16, m1, tu, mu
vrgatherei16.vv v0, v8, v12