先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
使用 5 位立即数 AVL 和 vtypei 配置 vl/vtype,并把新 vl 写入 rd
VSETIVLI 是 VSETVLI 的立即数 AVL 形式。它使用 5 位零扩展 uimm 作为 AVL,并用 vtypei 编码 SEW、LMUL、vta 和 vma。硬件按 AVL 与 VLMAX 选择新 vl,更新 vl/vtype,并把新 vl 写入 rd;rd=x0 时只丢弃整数寄存器写回。
从 vset 编码字段解析 AVL 来源和 vtype 设置,再展示 vl/vtype/rd 的架构可见更新。
VSETIVLI 属于 OP-V 配置指令。本步先看 opcode、funct3 以及承载 AVL/vtype 的字段。
VSETIVLI 把 AVL 直接放在指令的 5 位立即数字段中,适合小常量元素数。它仍然通过 vtypei 配置 SEW、LMUL、vta 和 vma,最终更新 vl/vtype 并可把新 vl 保存到 rd。
阅读 VSETIVLI 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。后缀和操作数形式决定源操作数来自向量、标量还是立即数。
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。
带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。
结合 «vsetivli t0, 8, e32, m1, ta, ma # configure up to 8 elements» 等实际代码理解该场景。
结合 «vsetivli t0, 8, e32, m1, ta, ma # configure up to 8 elements» 等实际代码理解该场景。
VSETIVLI 的 AVL 来自 5 位 uimm;VSETVLI 的 AVL 通常来自 rs1,并有 rs1=x0 的特殊形式。二者都用 vtypei 配置 vtype。
不是。uimm=0 表示 AVL=0,按官方向量长度选择规则得到 vl=0。