首页/指令库/VMXNOR-MM
VMXNOR.MM

RISC-V VMXNOR.MM 指令详解

指令手册V-type

向量掩码 XNOR:vd.mask[i] = ~(vs2.mask[i] ^ vs1.mask[i])

指令语法

vmxnor.mm vd, vs2, vs1
操作数说明
vd:目标 mask register,接收逐元素 1 bit 布尔结果。
vs2:第一个源 mask register;元素 i 提供 vs2.mask[i]。
vs1:第二个源 mask register;元素 i 提供 vs1.mask[i]。`.mm` mask logical 指令总是 unmasked,不由 v0.t 控制;vd 可为任意 mask register,只有结果写到或搬到 v0 后,后续普通 masked vector 指令才通过 v0.t 消费。
V向量运算掩码逻辑

指令行为说明

VMXNOR.MM 是 RVV 的 向量掩码同或 指令。`.mm` 表示源和目的都是 mask register 操作数;每个 mask 元素只有 1 bit,并按元素索引计算 vd.mask[i] = ~(vs2.mask[i] ^ vs1.mask[i])。该类指令总是 unmasked,vm=0 编码保留;尾部元素按 tail-agnostic 策略更新。

VMXNOR.MM 指令解析与执行动画

从 V 扩展编码字段开始,展示 XNOR mask 逻辑的字段解析、mask bit 读取、逐 lane 运算和 vd 写回。

vd
vs2
vs1
vmxnor.mm
,
,
执行环境
V-format mask logical encoding
31..26
25
24..20
19..15
14..12
11..7
6..0
lane
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
v8
1
0
1
1
0
1
0
0
1
0
1
1
0
1
0
0
XNOR
~^
~^
~^
~^
~^
~^
~^
~^
~^
~^
~^
~^
~^
~^
~^
~^
v16
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
v0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

本动画只模拟 vd.mask[i] = ~(vs2.mask[i] ^ vs1.mask[i]) 的 ISA 语义关系:读取两个 mask register 的 predicate bits,逐 lane 计算 XNOR,再写入目标 mask register。

快速理解与检索要点

VMXNOR.MM 是 RVV 掩码寄存器逻辑指令 的 向量掩码同或 指令,用来做 predicate 条件组合。`.mm` 后缀表示 vd、vs2、vs1 都是 mask register 语义;每个元素只占 1 bit,与当前 SEW 的数据元素宽度无关。

操作数语义:vd 可为任意 mask register 并接收结果 mask;vs2 和 vs1 提供两个源 mask。元素 i 的布尔公式是 vd.mask[i] = ~(vs2.mask[i] ^ vs1.mask[i])。
mask register 是按元素索引排列的一位谓词值,不是 SEW 宽的数据元素;改变 SEW 会改变普通数据元素解释,但不会把一个 mask 元素变成 SEW 位。
掩码逻辑指令总是 unmasked;它们不使用 v0.t 来限制本条指令执行,且 vm=0 编码保留。vd 可为任意 mask register;只有结果写到或搬到 v0 后,后续普通 masked vector 指令才通过 v0.t 消费。
用来选择两个 predicate 相等的 lane;结果为 1 表示两个源 mask 在该 lane 同为真或同为假。 C 语义类比:maskC = (a > 0) == (b < 10),先生成两个比较 mask,再逐 bit 做 XNOR。
典型 workflow:先用 vmsgt/vmslt/vmseq 等比较指令生成 predicate masks,再用 VMXNOR.MM 做 XNOR 组合,最后在组合结果位于 v0 时,让后续支持掩码的向量指令通过 v0.t 消费该 mask。

向量执行上下文

阅读 VMXNOR.MM 时,重点是 mask register 上的逐 bit 谓词组合。.mm:源和目的都是 mask register,逐元素处理 1 bit 谓词值。

mask 元素

每个元素索引对应 1 bit 谓词值;本页指令操作 mask 位,不操作 SEW 宽的数据元素。

.mm 操作数

vd 可为任意 mask register,接收结果 mask;vs2 与 vs1 提供两个源 mask,按相同元素索引逐 bit 组合。

v0.t 关系

mask logical 指令总是 unmasked;只有把组合结果写到或搬到 v0 后,后续普通 masked vector 指令才通过 v0.t 消费它。

官方来源:RISC-V V Standard Extension for Vector Operations

常见使用场景

predicate 条件组合

结合 «vmxnor.mm v1, v2, v3» 等实际代码理解该场景。

mask logical family 对比

结合 «vmxnor.mm v1, v2, v3» 等实际代码理解该场景。

masked execution 前的掩码构造

结合 «vmxnor.mm v1, v2, v3» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 V-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

汇编操作数顺序是 vd, vs2, vs1;ANDN/ORN 的取反对象是 vs1。
这些 mask logical 指令总是 unmasked,vm=0 编码保留;不要把 v0.t 当成本条指令的执行掩码。
它们操作 one-bit mask 元素,不是普通 SEW 宽向量数据元素;不要与 vand/vor/vxor 混淆。

常见问题

`.mm` 后缀具体表示什么?

它表示 mask-mask 形式:vd、vs2、vs1 都按 mask register 解释,逐元素处理 1 bit 谓词值。

VMXNOR.MM 的布尔公式是什么?

公式是 vd.mask[i] = ~(vs2.mask[i] ^ vs1.mask[i])。

是否受 v0 掩码控制?

不受。向量 mask logical 指令总是 unmasked,vm=0 编码保留;vd 可为任意 mask register。只有结果写到或搬到 v0 后,后续普通 masked vector 指令才通过 v0.t 消费。

VMXNOR.MM 结果为 1 表示什么?

表示两个源 mask 在该 lane 相等:同为 1 或同为 0。