mask 元素
每个元素索引对应 1 bit 谓词值;本页指令操作 mask 位,不操作 SEW 宽的数据元素。
向量掩码 OR-NOT:vd.mask[i] = vs2.mask[i] | ~vs1.mask[i]
VMORN.MM 是 RVV 的 向量掩码或非 指令。`.mm` 表示源和目的都是 mask register 操作数;每个 mask 元素只有 1 bit,并按元素索引计算 vd.mask[i] = vs2.mask[i] | ~vs1.mask[i]。该类指令总是 unmasked,vm=0 编码保留;尾部元素按 tail-agnostic 策略更新。
从 V 扩展编码字段开始,展示 OR-NOT mask 逻辑的字段解析、mask bit 读取、逐 lane 运算和 vd 写回。
本动画只模拟 vd.mask[i] = vs2.mask[i] | ~vs1.mask[i] 的 ISA 语义关系:读取两个 mask register 的 predicate bits,逐 lane 计算 OR-NOT,再写入目标 mask register。
VMORN.MM 对两个 RVV mask register 做逐 bit OR-NOT,语义是 vd.mask[i] = vs2.mask[i] | ~vs1.mask[i]。注意取反的是汇编语法中的第三个操作数 vs1;结果仍是 one-bit-per-element predicate mask。
阅读 VMORN.MM 时,重点是 mask register 上的逐 bit 谓词组合。.mm:源和目的都是 mask register,逐元素处理 1 bit 谓词值。
每个元素索引对应 1 bit 谓词值;本页指令操作 mask 位,不操作 SEW 宽的数据元素。
vd 可为任意 mask register,接收结果 mask;vs2 与 vs1 提供两个源 mask,按相同元素索引逐 bit 组合。
mask logical 指令总是 unmasked;只有把组合结果写到或搬到 v0 后,后续普通 masked vector 指令才通过 v0.t 消费它。
结合 «vmorn.mm v1, v2, v3» 等实际代码理解该场景。
结合 «vmorn.mm v1, v2, v3» 等实际代码理解该场景。
结合 «vmorn.mm v1, v2, v3» 等实际代码理解该场景。
它表示 mask-mask 形式:vd、vs2、vs1 都按 mask register 解释,逐元素处理 1 bit 谓词值。
公式是 vd.mask[i] = vs2.mask[i] | ~vs1.mask[i]。
不受。向量 mask logical 指令总是 unmasked,vm=0 编码保留;vd 可为任意 mask register。只有结果写到或搬到 v0 后,后续普通 masked vector 指令才通过 v0.t 消费。
取反对象是 vs1,也就是汇编语法里的第三个操作数;公式是 vs2 | ~vs1。
VMORN.MM 是 vs2 | ~vs1,只取反 vs1;VMNOR.MM 是 ~(vs2 | vs1),取反整个 OR 结果。