vsetvlimnemonic用整数寄存器中的 AVL 配置 vl 与 vtype。
vsetvli 使用整数寄存器给出的应用向量长度(AVL)和立即数 vtypei 配置 vl、vtype,并把硬件选出的新 vl 写入整数寄存器 rd。
vsetvli 02rd, 03rs1, 04vtypeivsetvlimnemonic用整数寄存器中的 AVL 配置 vl 与 vtype。
rddestination接收硬件选出的 vl;写 x0 可丢弃结果。
rs1source整数寄存器提供应用向量长度;x0 的特殊组合见下文。
vtypeiimmediate编码 SEW、LMUL、尾部策略与掩码策略。
vsetvli x5, x10, e32, m4, tu, mu # VLEN=1280区分 vsetvli 与另外两种配置指令
00000010010位 10:8 必须为 0;位 7:0 按下表写入 vtype
01010整数寄存器 x10 提供 AVL
111向量配置指令的固定功能码
00101x5 接收新的 vl;rd=x0 时只更新 CSR
1010111OP-V 主操作码
0硬件接受配置时为 0;不支持任一位组合时置 1,并把其余位及 vl 清零。
全 0每一位都必须写 0;任一位非零都是不支持的 vtype。vsetvl 会检查 rs2 的全部 XLEN 位。
0mu:被掩码元素保持旧值
0tu:尾部元素保持旧值
0与位 4、3 组成 vsew=010,选择 SEW=32
1与位 5、3 共同编码元素宽度 SEW=32
0与位 5、4 共同编码元素宽度 SEW=32
0与位 1、0 组成 vlmul=010,选择 m4 · 4
1与位 2、0 共同编码 m4 · 4
0与位 2、1 共同编码 m4 · 4
| 语法 | 说明 |
|---|---|
vsetvli rd, rs1, vtypei | x[rs1] 提供 AVL,vtypei 提供新向量类型 |
VLMAX = LMUL × VLEN / SEW。软件给出 AVL,硬件依据 AVL、VLMAX 和规范约束选择新 vl;成功执行后 x[rd] = vl。若 rs1=x0, rd≠x0,AVL 按全 1 处理并将 vl 设为 VLMAX;若二者均为 x0,则以当前 vl 为 AVL,且只有不改变 VLMAX 比率的配置才是保留语义之外的合法用法。
vtype 中 vill 位于 XLEN-1,XLEN-2:8 为必须写零的保留位,位 7 是 vma,位 6 是 vta,位 5:3 是 vsew,位 2:0 是 vlmul。上方演示会逐位显示当前设置及其含义。
AVL = (rs1 == x0) ? special_AVL_rule(rd, old_vl) : x[rs1]
requested_vtype = zero_extend(vtypei)
(vl, vtype) = select_vl_and_validate_vtype(AVL, requested_vtype)
x[rd] = vl # rd=x0 discards this write
vstart = 0指令写入 vl、vtype 和整数目标 rd,并在成功结束时把 vstart 清零;rs1、向量寄存器、fflags、vxrm 与 vxsat 保持不变。配置指令不使用执行掩码,也不直接改写任何尾部或被掩码的向量元素;vta、vma 只规定后续向量指令的写入策略。
若实现不支持给出的 vtype 任一位组合,硬件令 vtype.vill=1、其余 vtype 位为零,并令 vl=0。
不访问数据内存,因此没有内存对齐要求。
vsetvli t0, a0, e32, m1, tu, mu # AVL=a0,配置 e32/m1,t0 得到新 vl