Mask elements
Each element index maps to one predicate bit; this instruction operates on mask bits, not SEW-wide data elements.
Vector mask OR-NOT: vd.mask[i] = vs2.mask[i] | ~vs1.mask[i]
VMORN.MM is an RVV vector mask OR-NOT 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 OR-NOT mask-logical field decode, mask-bit reads, per-lane execution, and vd writeback.
This animation models only the ISA semantic relationship vd.mask[i] = vs2.mask[i] | ~vs1.mask[i]: read predicate bits from two mask registers, compute OR-NOT per lane, then write the destination mask register.
VMORN.MM applies bitwise OR-NOT to two RVV mask registers: vd.mask[i] = vs2.mask[i] | ~vs1.mask[i]. The inverted operand is the third assembly operand, vs1; the result remains a one-bit-per-element predicate mask.
When reading VMORN.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 «vmorn.mm v1, v2, v3».
Understand this scenario with real code like «vmorn.mm v1, v2, v3».
Understand this scenario with real code like «vmorn.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.
It inverts vs1, the third assembly operand; the formula is vs2 | ~vs1.
VMORN.MM is vs2 | ~vs1, inverting only vs1. VMNOR.MM is ~(vs2 | vs1), inverting the whole OR result.