首页/指令库/设置向量长度立即数
VSETVLI

RISC-V VSETVLI 指令详解

指令手册OP-V vector-configuration format

按 rs1/rd 的 AVL 规则和 vtypei 配置 vl/vtype,并把新 vl 写入 rd

指令语法

vsetvli rd, rs1, vtypei
操作数说明
rd:接收硬件选择后的新 vl;rd=x0 时不保存到整数寄存器。
rs1:提供 AVL,特殊 rs1=x0 形式用于请求 VLMAX 或保留当前 vl。
vtypei:编码 SEW、LMUL、tail policy 和 mask policy。
V向量运算向量配置

指令行为说明

VSETVLI 是 RVV 的向量配置指令。它使用 OP-V 编码空间和 funct3=111,根据 rs1/rd 组合确定 AVL。普通 AVL 形式:rs1 非零,AVL=x[rs1]。VLMAX 请求形式:rs1=x0,rd 必须非零。保留当前 vl 形式:rd=x0,rs1=x0,且只在新 SEW/LMUL 比例不改变 VLMAX 并且原 vtype.vill=0 时有效。vtypei 编码 SEW、LMUL、vta 和 vma;新 vl 写入 rd,rd=x0 时不保存到整数寄存器。若 vtype 不受支持,官方规则设置 vill 且 vl=0。

VSETVLI 指令解析与执行动画

从 vset 编码字段解析 AVL 来源和 vtype 设置,再展示 vl/vtype/rd 的架构可见更新。

步骤 1 / 6

编码

VSETVLI 属于 OP-V 配置指令。本步先看 opcode、funct3 以及承载 AVL/vtype 的字段。

输入的指令
vsetvli
执行环境
范围提示:此动画只展示 V 扩展定义的 ISA 可见 vl/vtype 选择关系。示例 VLMAX 与中间区间 vl 选择都是教学输入,不代表具体处理器的 VLEN、ELEN、支持矩阵或操作系统处理。
编码字段vsetvli / OP-V
31
fixed
0
30..20
vtypei
00011010000
19..15
rs1
01010
14..12
funct3
111
11..7
rd
00101
6..0
opcode
1010111
asm
form
VSETVLI
配置数据路径
AVL source
x10
AVL
40
VLMAX
16
selected vl
16
vtype
e32, m1, ta, ma
x5
尚未写回
vstart
3
当前配置摘要
vl result
16
policy
ta/ma
vl 选择结果
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例按 AVL=40 和 VLMAX=16 得到 vl=16。绿色格表示本次配置后 body 元素范围。

快速理解与检索要点

VSETVLI 是 RVV 向量配置指令。先从 rs1/rd 组合得到 AVL,再从 vtypei 得到 SEW、LMUL、vta、vma,最后按实现的 VLMAX 选择 vl,并把 vl 写入 rd。后续向量指令按这个 vl/vtype 解释活动元素、尾部和掩码关闭元素。

OP-V opcode 为 1010111,funct3=111;vtypei 位段编码 vma、vta、vsew 和 vlmul。
普通 AVL 形式:rs1 非零,AVL=x[rs1]。VLMAX 请求形式:rs1=x0,rd 必须非零。保留当前 vl 形式:rd=x0,rs1=x0。
合法形式更新 vl/vtype 并将 vstart 归零;新 vl 写入 rd,rd=x0 时丢弃整数寄存器写回。
不支持的 vtype 按官方规则设置 vill 且 vl=0;页面动画不模拟具体实现的支持矩阵。

常见使用场景

向量整数算术

结合 «vsetvli t0, a0, e32, m1, ta, ma # configure SEW=32, LMUL=1, write vl to t0» 等实际代码理解该场景。

拓宽运算

结合 «vsetvli t0, a0, e32, m1, ta, ma # configure SEW=32, LMUL=1, write vl to t0» 等实际代码理解该场景。

向量化循环

结合 «vsetvli t0, a0, e32, m1, ta, ma # configure SEW=32, LMUL=1, write vl to t0» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 需要 V 扩展;使用 rd、rs1 和 vtypei,并显式指定 ta/tu 与 ma/mu。
语义检查
  • 先按 rs1/rd 组合确认 AVL 来源;保留当前 vl 的形式还要求 VLMAX 不变且原 vill=0。
  • vl 由 AVL 与 VLMAX 的选择规则确定;合法执行更新 vl/vtype、将 vstart 归零,rd=x0 丢弃 GPR 写回。

容易混淆 / 常见误区

rs1=x0 且 rd!=x0 才是请求 VLMAX;rd=x0,rs1=x0 是保留现有 vl 的特殊形式。
V 1.0 汇编应显式写 ta/tu 和 ma/mu。
不支持的 vtype 按官方规则设置 vill 并使 vl=0。

常见问题

vsetvli x0, x0, ... 是请求 VLMAX 吗?

不是。保留当前 vl 形式:rd=x0,rs1=x0。VLMAX 请求形式:rs1=x0,rd 必须非零。

vsetvli 会按 vtypei 直接固定 vl 吗?

不会。vtypei 选择 SEW/LMUL 和策略位;vl 由 AVL、VLMAX 和官方向量长度选择规则决定。