vsetivlimnemonic用 5 位立即数 AVL 配置 vl 与 vtype。
vsetivli 使用 5 位零扩展立即数给出应用向量长度(AVL),使用 vtypei 配置 vl、vtype,并把硬件选出的新 vl 写入整数寄存器 rd。
vsetivli 02rd, 03uimm, 04vtypeivsetivlimnemonic用 5 位立即数 AVL 配置 vl 与 vtype。
rddestination接收硬件选出的 vl;写 x0 可丢弃结果。
uimmimmediate5 位零扩展立即数,范围为 0…31。
vtypeiimmediate编码 SEW、LMUL、尾部策略与掩码策略。
vsetivli x5, 10, e32, m4, tu, mu # VLEN=12811选择立即数 AVL 形式
0000010010位 9:8 必须为 0;位 7:0 按下表写入 vtype
01010零扩展 AVL=10
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
| 语法 | 说明 |
|---|---|
vsetivli rd, uimm, vtypei | uimm[4:0] 给出 AVL,vtypei 提供新向量类型 |
VLMAX = LMUL × VLEN / SEW。AVL 是 uimm[4:0] 的零扩展值,范围为 0…31;硬件依据 AVL、VLMAX 和规范约束选择新 vl,成功执行后 x[rd] = vl。
vtype 中 vill 位于 XLEN-1,XLEN-2:8 为必须写零的保留位,位 7 是 vma,位 6 是 vta,位 5:3 是 vsew,位 2:0 是 vlmul。上方演示会逐位显示当前设置及其含义;在本指令编码内,vtypei[9:8] 必须为零。
AVL = zero_extend(uimm[4:0])
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 清零;向量寄存器、fflags、vxrm 与 vxsat 保持不变。配置指令不使用执行掩码,也不直接改写任何尾部或被掩码的向量元素;vta、vma 只规定后续向量指令的写入策略。
若实现不支持给出的 vtype 任一位组合,硬件令 vtype.vill=1、其余 vtype 位为零,并令 vl=0。
不访问数据内存,因此没有内存对齐要求。
vsetivli t0, 12, e16, m2, ta, ma # AVL=12,t0 得到硬件选择的新 vl