Skip to content

vslide1down ​

vslide1down.vx vd, vs2, rs1, vm 固定滑动一个元素,并从寄存器标量向空出的边界位置插入一个值。

操作码
OP-V · funct6=001110
指令集
RISC-V V 1.0
英文全称
Vector Slide One Down
参考资料
RISC-V V 1.0
页码
01vslide1down.vx02vd, vs2, rs1, vm
01
指令助记符vslide1down.vxmnemonic

向低索引滑动一格并在最高活动边界插入整数标量。

02
操作数vd, vs2, rs1, vmdestination

目标、向量来源、整数标量来源与可选执行掩码。

RVV REGISTER OPERATIONSLIDE1 DOWN
li a0, 10 vsetvli t0, a0, e32, m4, tu, mu # VLEN=128 vslide1down.vx v0, v8, a1, v0.t
VLMAXLMUL × VLEN ÷ SEW;派生值,不能直接设置16 个元素
插入值=99(x[rs1])
vd · v0–v1–v2–v3(初值)写入前的目标寄存器组
v3[511:384]v2[383:256]v1[255:128]v0[127:0]
vd[15]32SEW=32
vd[14]31SEW=32
vd[13]30SEW=32
vd[12]29SEW=32
vd[11]28SEW=32
vd[10]27SEW=32
vd[9]26SEW=32
vd[8]25SEW=32
vd[7]24SEW=32
vd[6]23SEW=32
vd[5]22SEW=32
vd[4]21SEW=32
vd[3]20SEW=32
vd[2]19SEW=32
vd[1]18SEW=32
vd[0]17SEW=32
vs2 · v8–v9–v10–v11512 BITS / REGISTER GROUP
v11[511:384]v10[383:256]v9[255:128]v8[127:0]
vs2[15]16SEW=32
vs2[14]15SEW=32
vs2[13]14SEW=32
vs2[12]13SEW=32
vs2[11]12SEW=32
vs2[10]11SEW=32
vs2[9]10SEW=32
vs2[8]9SEW=32
vs2[7]8SEW=32
vs2[6]7SEW=32
vs2[5]6SEW=32
vs2[4]5SEW=32
vs2[3]4SEW=32
vs2[2]3SEW=32
vs2[1]2SEW=32
vs2[0]1SEW=32
vs2[9] → vd[8]vs2[8] → vd[7]vs2[7] → vd[6]vs2[6] → vd[5]vs2[5] → vd[4]vs2[4] → vd[3]vs2[3] → vd[2]vs2[2] → vd[1]vs2[1] → vd[0]
vd · v0–v1–v2–v3(结果)目标索引减小
v3[511:384]v2[383:256]v1[255:128]v0[127:0]
vd[15]32tail 保持
vd[14]31tail 保持
vd[13]30tail 保持
vd[12]29tail 保持
vd[11]28tail 保持
vd[10]27tail 保持
vd[9]99x[rs1]
vd[8]10vs2[9]
vd[7]9vs2[8]
vd[6]8vs2[7]
vd[5]7vs2[6]
vd[4]6vs2[5]
vd[3]5vs2[4]
vd[2]4vs2[3]
vd[1]3vs2[2]
vd[0]2vs2[1]
body:执行并写入强调背景:本次操作写入tail:tu 下保持旧值图中高索引在左、低索引在右

元素语义 ​

text
vstart <= i < vl-1: vd[i] = vs2[i + 1]
vstart <= i = vl-1: vd[i] = x[rs1]

元素 0 位于最低 SEW 位。仅修改 vstart 到 vl-1 的活动目标元素;来源与标量寄存器保持不变,尾部遵循 vta,被掩码元素遵循 vma,正常完成后 vstart=0。向上形式禁止目标组与来源组重叠;向下形式遵循规范规定的安全重叠约束。

该指令不访问内存,没有内存对齐要求。它不修改 fflags、vxrm 或 vxsat。

语义伪代码 ​

VSLIDE1DOWNRISC-V V 1.0 · PSEUDOCODE
# integer scalar is inserted at element vl-1
for i = vstart .. vl - 1:
    if vm == 1 or v0.mask[i] == 1:
        vd[i] = i == vl - 1 ? 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
agnostic 表示规范允许保留旧值或写全 1;辅助函数名称直接表达其规范动作。

示例 ​

asm
vsetvli t0, a0, e32, m4, tu, mu
vslide1down.vx v0, v8, a1

参考 ​

SIGNAL MAINTAINED · BUILT FROM MARKDOWN