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

RISC-V VSETIVLI 指令详解

指令手册I-type

使用 5 位立即数 AVL 和 vtypei 配置 vl/vtype,并把新 vl 写入 rd

指令语法

vsetivli rd, uimm, vtypei
操作数说明
rd:接收硬件选择后的新 vl。
uimm:5 位零扩展 AVL 立即数。
vtypei:编码 SEW、LMUL、tail policy 和 mask policy。
V向量配置vset指令

指令行为说明

VSETIVLI 是 VSETVLI 的立即数 AVL 形式。它使用 5 位零扩展 uimm 作为 AVL,并用 vtypei 编码 SEW、LMUL、vta 和 vma。硬件按 AVL 与 VLMAX 选择新 vl,更新 vl/vtype,并把新 vl 写入 rd;rd=x0 时只丢弃整数寄存器写回。

VSETIVLI 指令解析与执行动画

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

步骤 1 / 6

编码

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

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

快速理解与检索要点

VSETIVLI 把 AVL 直接放在指令的 5 位立即数字段中,适合小常量元素数。它仍然通过 vtypei 配置 SEW、LMUL、vta 和 vma,最终更新 vl/vtype 并可把新 vl 保存到 rd。

uimm 是 5 位零扩展 AVL,范围为 0 到 31。
vtypei 与 vsetvli 相同,编码 vma、vta、vsew 和 vlmul。
rd=x0 不保存新 vl,但 vl/vtype 仍按该指令更新。
不支持的 vtype 按官方规则设置 vill 且 vl=0。

向量执行上下文

阅读 VSETIVLI 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。后缀和操作数形式决定源操作数来自向量、标量还是立即数。

先看 vl

当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。

再看 vtype

当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。

最后看 vm/v0

带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。

官方来源:RISC-V V Standard Extension for Vector Operations

常见使用场景

循环stripmining

结合 «vsetivli t0, 8, e32, m1, ta, ma # configure up to 8 elements» 等实际代码理解该场景。

向量长度配置

结合 «vsetivli t0, 8, e32, m1, ta, ma # configure up to 8 elements» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 I-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

AVL 是 5 位零扩展立即数,范围 0-31。
不支持的 vtype 按官方规则设置 vill 并令 vl=0;软件应检查 vill。
vsetivli/vsetvli 汇编应显式写出 ta/tu 和 ma/mu。

常见问题

VSETIVLI 和 VSETVLI 的区别是什么?

VSETIVLI 的 AVL 来自 5 位 uimm;VSETVLI 的 AVL 通常来自 rs1,并有 rs1=x0 的特殊形式。二者都用 vtypei 配置 vtype。

uimm=0 是否非法?

不是。uimm=0 表示 AVL=0,按官方向量长度选择规则得到 vl=0。