VLM.V 会装载 SEW 宽元素吗?
不会。它装载 packed mask bytes,并把每一位映射到一个 mask element。
从 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)。
教学环境:VLEN=4096,SEW=8,LMUL=m1,VLMAX=512,合法 vtype、VS 已启用、vstart=0,无访问异常。固定 EEW=8、EMUL=1;rs1=x0 时基址为 0。VL=0 不更新目标;否则完整装入 ceil(VL/8) 字节(包括最后一个字节的所有位),字节传输范围外的 tail 按 tail-agnostic 处理,不保证清零。逐 bit 步骤只解释映射,不表示实际访问顺序或处理器周期。
动画从 32 位向量内存指令编码开始,按官方位段显示 nf、mew、mop、vm、rs2/vs2 或 lumop/sumop、width、寄存器字段和 opcode。
VLM.V 把内存中的紧凑位图还原成 mask register:VL=16 时只读 2 个字节,每个 lane 取一个 bit。
语法 vlm.v vd, (rs1),没有 v0.t 执行掩码;vm=1。32 位 LOAD-FP:opcode=0000111、nf=000、mew=0、mop=00、width=000、lumop=01011。
vd 是任意单个 v0–v31,固定 EEW=8、EMUL=1。基址来自 x[rs1],x0 恒为 0;从该地址读取 ceil(vl/8) 个连续字节,包括完整的最后一个字节。
mask bit i 对应 byte floor(i/8) 的 bit i mod 8。字节传输范围外的 tail 强制 tail-agnostic,与 vta 无关;不保证清零。
需要 V/VS 已启用、合法 vtype;仍遵守 vill 和 vtype 对 vl 的约束。vstart 以字节计,先前字节保持不变;vstart≥ceil(vl/8) 或 vl=0 不更新目标。正常完成后 vstart=0。
假定 V/VS 已启用、合法 e8,m1、VLEN≥128、vl=9、vstart=0、a0=0x8000,内存可读,两个字节为 [0x81,0x03]。VLM.V 读取 ceil(9/8)=2 字节并整体写入 v0:mask bits 0、7、8、9 为 1,其他已载入位为 0;bit 9 超出 vl 但仍属于实际装入的最后字节。字节范围之外 tail-agnostic,不保证清零。
假定 V/VS 已启用、合法 e8,m1、VLEN≥128、vl=9、vstart=0、a0=0x8000,内存可读,两个字节为 [0x81,0x03]。VLM.V 读取 ceil(9/8)=2 字节并整体写入 v0:mask bits 0、7、8、9 为 1,其他已载入位为 0;bit 9 超出 vl 但仍属于实际装入的最后字节。字节范围之外 tail-agnostic,不保证清零。
假定 V/VS 已启用、合法 e8,m1、VLEN≥128、vl=9、vstart=0、a0=0x8000,内存可读,两个字节为 [0x81,0x03]。VLM.V 读取 ceil(9/8)=2 字节并整体写入 v0:mask bits 0、7、8、9 为 1,其他已载入位为 0;bit 9 超出 vl 但仍属于实际装入的最后字节。字节范围之外 tail-agnostic,不保证清零。
不会。它装载 packed mask bytes,并把每一位映射到一个 mask element。
因为每个 mask element 只占 1 bit,VL 个 mask bits 需要向上取整到完整字节数。