先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
按 rs1/rd 的 AVL 规则和 vtypei 配置 vl/vtype,并把新 vl 写入 rd
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。
从 vset 编码字段解析 AVL 来源和 vtype 设置,再展示 vl/vtype/rd 的架构可见更新。
VSETVLI 属于 OP-V 配置指令。本步先看 opcode、funct3 以及承载 AVL/vtype 的字段。
VSETVLI 是最常见的 RVV 配置入口。先从 rs1/rd 组合得到 AVL,再从 vtypei 得到 SEW、LMUL、vta、vma,最后按实现的 VLMAX 选择 vl,并把 vl 写入 rd。后续向量指令按这个 vl/vtype 解释活动元素、尾部和掩码关闭元素。
阅读 VSETVLI 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。后缀和操作数形式决定源操作数来自向量、标量还是立即数。
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。
带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。
结合 «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» 等实际代码理解该场景。
不是。保留当前 vl 形式:rd=x0,rs1=x0。VLMAX 请求形式:rs1=x0,rd 必须非零。
不会。vtypei 选择 SEW/LMUL 和策略位;vl 由 AVL、VLMAX 和官方向量长度选择规则决定。