Mask elements
Each element index maps to one predicate bit; this instruction operates on mask bits, not SEW-wide data elements.
Vector mask NAND: vd.mask[i] = ~(vs2.mask[i] & vs1.mask[i])
VMNAND.MM is an RVV vector mask NAND instruction. The `.mm` suffix means the sources and destination are mask-register operands; each mask element is one bit, and the instruction computes vd.mask[i] = ~(vs2.mask[i] & vs1.mask[i]) by element index. These instructions are always unmasked, vm=0 encodings are reserved, and tail elements are updated tail-agnostically.
Starts from V-extension encoding fields, then shows NAND mask-logical field decode, mask-bit reads, per-lane execution, and vd writeback.
This animation fixes vstart=0 and models vd.mask[i] = ~(vs2.mask[i] & vs1.mask[i]) only for the shown VL body elements. Source rows show the original operand values used by the model; the specification permits vd to overlap either source. The final vd appears at Writeback, and successful completion leaves vstart at zero. The unshown mask tail is always tail-agnostic and may retain old bits, become 1s, or contain a result allowed by the specification, so the animation does not present a deterministic tail value.
VMNAND.MM applies bitwise NAND to two RVV mask registers: vd.mask[i] = ~(vs2.mask[i] & vs1.mask[i]). The `.mm` suffix means vd, vs2, and vs1 have mask-register semantics; the result is still a one-bit-per-element predicate mask, not ordinary SEW-wide data.
When reading VMNAND.MM, focus on bit-by-bit predicate composition in mask registers. .mm: sources and destination are mask registers, operating on one predicate bit per element.
Each element index maps to one predicate bit; this instruction operates on mask bits, not SEW-wide data elements.
vd can be any mask register receiving the result mask, while vs2 and vs1 provide the two source masks combined bit by bit at the same element index.
Mask logical instructions are always unmasked; only a result written or moved into v0 is later consumed through v0.t by ordinary masked vector instructions.
Understand this scenario with real code like «vmnand.mm v1, v2, v3».
Understand this scenario with real code like «vmnand.mm v1, v2, v3».
Understand this scenario with real code like «vmnand.mm v1, v2, v3».
It means a mask-mask form: vd, vs2, and vs1 are interpreted as mask registers, operating on one predicate bit per element.
The formula is vd.mask[i] = ~(vs2.mask[i] & vs1.mask[i]).
No. Vector mask logical instructions are always unmasked and vm=0 encodings are reserved; vd can be any mask register. Only a result written or moved into v0 is later consumed through v0.t by ordinary masked vector instructions.
VMNAND.MM is the bitwise inverse of VMAND.MM, marking lanes where the two source predicates are not both true.
Only when both vs2.mask[i] and vs1.mask[i] are 1 for that lane. Every other input combination produces 1.