vslide1up.vxmnemonic在最低元素插入整数标量,其余源元素移动到高一个索引。
vslide1up.vx 把整数寄存器中的标量写入 vd[0],并把 vs2[i-1] 写入 vd[i]。它等价于带标量插入的固定偏移 1 上滑。
vslide1up.vx 02vd, 03vs2, 04rs1, 05vmvslide1up.vxmnemonic在最低元素插入整数标量,其余源元素移动到高一个索引。
vddestination接收插入和滑动结果。
vs2source元素 i 被复制到目标元素 i+1。
rs1source整数寄存器中的最低 XLEN 位标量按照 SEW 截断或符号扩展。
vmmask掩码操作数逐目标元素控制是否写入;无掩码形式可省略。
li a0, 10
vsetvli t0, a0, e32, m4, tu, mu # VLEN=128
vslide1up.vx v0, v8, a1, v0.t插入值=99(x[a0])[511:384]v2[383:256]v1[255:128]v0[127:0][511:384]v10[383:256]v9[255:128]v8[127:0][511:384]v2[383:256]v1[255:128]v0[127:0]for i = vstart .. vl-1:
if mask[i]:
vd[i] = (i == 0) ? scalar : vs2[i-1]浮点对应形式为 vfslide1up.vf vd, vs2, fs1, vm,它从浮点寄存器取得一个 SEW 宽元素;本页演示整数形式。
# integer scalar is inserted at element 0
for i = vstart .. vl - 1:
if vm == 1 or v0.mask[i] == 1:
vd[i] = i == 0 ? scalar(rs1) : vs2[i - 1]
else:
vd[i] = vma ? agnostic : old_vd[i]
for i = vl .. VLMAX - 1:
vd[i] = vta ? agnostic : old_vd[i]
vstart = 0指令修改 vd[vstart .. vl-1] 中启用的元素。被屏蔽元素由 vtype.vma 决定,尾部由 vtype.vta 决定。正常完成后 vstart 重置为 0;vs2、标量源、vl 和 vtype 不变。
vd 不能与 vs2 重叠,否则编码保留;掩码形式的 vd 不能与 v0 重叠。
XLEN 小于 SEW 时,插入标量被符号扩展;XLEN 大于 SEW 时,只复制最低 SEW 位。
若 vstart>0,元素 0 不会被重新插入。使用 v0.t 时,掩码位 0 也控制标量是否写入 vd[0]。当 vstart >= vl 时不写入任何元素。
指令不访问内存,因此没有内存对齐要求。
指令不修改整数条件码、vxsat、vxrm 或 fflags。
.text
.globl slide1up_demo
slide1up_demo:
vsetivli t0, 6, e32, m2, tu, mu
vle32.v v10, (a0)
vslide1up.vx v8, v10, a2
vse32.v v8, (a1)
ret