先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
从 x[rs1] 起连续装入 ceil(vl/8) 个字节,并把这些 packed bits 写入目标掩码寄存器。
VLM.V 是 RISC-V V 扩展的 unit-stride mask load。它按字节读取紧凑掩码表示,访问字节数为 ceil(vl/8),第 i 个 mask bit 来自 byte floor(i/8) 的 bit i mod 8。该指令装载掩码位,不按当前 SEW 装载普通向量数据元素。
从编码字段解析 packed mask 装载,再逐元素计算 x[rs1] + floor(i/8)。
动画从 32 位向量内存指令编码开始,按官方位段显示 nf、mew、mop、vm、rs2/vs2 或 lumop/sumop、width、寄存器字段和 opcode。
VLM.V 把内存中的紧凑位图还原成 mask register:VL=16 时只读 2 个字节,每个 lane 取一个 bit。
阅读 VLM.V 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。后缀和操作数形式决定源操作数来自向量、标量还是立即数。
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。
带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。
结合 «vlm.v v0, (a0) # load ceil(vl/8) packed mask bytes» 等实际代码理解该场景。
结合 «vlm.v v0, (a0) # load ceil(vl/8) packed mask bytes» 等实际代码理解该场景。
结合 «vlm.v v0, (a0) # load ceil(vl/8) packed mask bytes» 等实际代码理解该场景。
不会。它装载 packed mask bytes,并把每一位映射到一个 mask element。
因为每个 mask element 只占 1 bit,VL 个 mask bits 需要向上取整到完整字节数。