先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
按 rs1/rd 的 AVL 规则和 rs2 中的完整 vtype 值配置 vl/vtype,并写回新 vl
VSETVL 是寄存器 vtype 形式的 RVV 配置指令。它与 VSETVLI 一样按 rs1/rd 组合确定 AVL。普通 AVL 形式:rs1 非零,AVL=x[rs1]。VLMAX 请求形式:rs1=x0,rd 必须非零。保留当前 vl 形式:rd=x0,rs1=x0,并且只在 VLMAX 不变和原 vtype.vill=0 时有效。rs2 提供完整 vtype 值,而不是 e32/m1/ta/ma 这类汇编文本字段。指令按官方规则检查 vtype、选择新 vl、更新 vl/vtype,并把新 vl 写入 rd。
从 vset 编码字段解析 AVL 来源和 vtype 设置,再展示 vl/vtype/rd 的架构可见更新。
VSETVL 属于 OP-V 配置指令。本步先看 opcode、funct3 以及承载 AVL/vtype 的字段。
VSETVL 用寄存器而不是 vtypei 立即数字段提供 vtype。它仍然按 rs1/rd 组合确定 AVL。普通 AVL 形式从 rs1 读取元素请求数。VLMAX 请求形式:rs1=x0,rd 必须非零。保留当前 vl 形式:rd=x0,rs1=x0。该形式适合从整数寄存器中的完整 vtype 值恢复向量状态。
阅读 VSETVL 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。后缀和操作数形式决定源操作数来自向量、标量还是立即数。
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。
带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。
结合 «vsetvl t0, a0, a1 # AVL from a0, vtype value from a1» 等实际代码理解该场景。
结合 «vsetvl t0, a0, a1 # AVL from a0, vtype value from a1» 等实际代码理解该场景。
不是。rs2 的值被解释为完整 vtype 配置,用于设置 SEW、LMUL、vta、vma 等状态。
因为保存/恢复代码可以把之前保存的 vtype 值放入 rs2,再用 VSETVL 重建 vl/vtype 一致状态。
不是。普通 AVL 形式:rs1 非零,AVL=x[rs1]。VLMAX 请求形式:rs1=x0,rd 必须非零。保留当前 vl 形式:rd=x0,rs1=x0。