Extensions
Forms
1 (1 Legacy)
Data
Intel XED v2026.08.23

MONITOR is the first half of a wait. It arms the processor’s address monitor on the range that holds the address in RAX (DS by default, a segment override allowed), and a later MWAIT lets the core rest until something writes to that range. It reads no data and writes no register, but the address is checked as for a one-byte load: an unmapped page raises #PF, and Intel’s manual adds that it sets the page’s accessed bit. ECX must be 0, since no extension is defined, or it raises #GP; EDX carries hints that no processor defines.

Sizing the watched range

The monitored range is not defined as a cache line: CPUID leaf 05H reports the smallest and the largest monitor-line size. Intel’s manual asks for the watched flag to fit in the smallest, so that a store to it always wakes the waiter, and for it to be padded to the largest, so that stores to unrelated neighbours do not wake it for nothing (volume 3, Section 11.10.5). Both manuals promise the monitor only on write-back memory.

Arm, check, then wait

MWAIT does not re-arm the monitor, and events other than the awaited store end a wait. So the pair runs in a loop, and the flag is read again between MONITOR and MWAIT: a store that lands after the first check but before the monitor is armed would otherwise go unseen, and the core would sleep with its work already posted. Both manuals give this shape.

Who may run it

Intel’s MONITOR runs only at CPL 0 and raises #UD elsewhere. AMD’s also runs at CPL 3 when the operating system sets MonMwaitUserEn in MSR C001_0015h, and AMD’s manual tells user code to test for #UD, not only CPUID leaf 1, ECX bit 3. Each vendor has a pair for user code instead: UMONITOR and UMWAIT on Intel’s processors, MONITORX and MWAITX on AMD’s.

The probe runs at CPL 3 in a Zen 5 guest whose CPUID reports no MONITOR, so this page has no recorded cases. AMD’s Zen 5 guide lists MONITOR as microcoded.

Forms

Every encoding of MONITOR that Intel XED knows, one row per XED instruction form (iform). How to read the notation.
InstructionEncodingRequires
MONITOR MONITORNP 0F 01 C8
67 0F 01 C8
MONITOR

Operation

What the forms do, in pseudocode that our tests run against results recorded on real processors. How to read.

if CPL > 0:
    fault(UD)                    # CPL 0 alone (AMD: unless the OS
                                 # sets HWCR's MonMwaitUserEn)
if rcx != 0:
    fault(GP, 0)                 # no extension is defined
a = low(rax, ASIZE)              # DS:rAX, EAX with a 67 prefix
if not canonical(a):
    fault(GP, 0)
if not readable(a):
    fault(PF)                    # the checks of a 1-byte read
# arms the monitor on the range that holds a, for MWAIT; EDX holds
# hints, which no processor defines

Not run on a processor: MONITOR runs only at CPL 0, and the Zen 5 guest that ran the probe does not report it in CPUID.

Operands

What each form reads and writes, as Intel XED records it: the operands of its syntax, in order, and the implicit ones that the syntax does not name. How to read.
OperandKindAction
MONITOR
RAXimplicitread
ECXimplicitread
EDXimplicitread

Flags

None: XED records no flag that the forms test or change.

Attributes

What else XED records about the forms. How to read.

All forms
privileged: CPL 0 only; may abort a TSX transaction

Intrinsics

The C intrinsics of Clang 23.1.2 that compile to MONITOR, each with the form it compiles to and the Clang options it needs. The forms come from compiling every intrinsic and decoding the result with Intel XED; all intrinsics A–Z explains the method.

IntrinsicCompiles to
_mm_monitor void _mm_monitor(const void *__p, unsigned int __extensions, unsigned int __hints)

MONITOR Legacy -msse3

CPUID and processors

Each form belongs to an XED ISA set. A form can be used when the processor reports every CPUID bit of one of its ISA set's alternatives.

CPUID requirements and processors of the XED ISA sets above. Alternatives are separated by “or”; processors follow XED’s chip model, whose AMD processors end with Zen 2, and the CPU data of this site for Zen 3 to Zen 6.
ISA setCPUIDProcessors
MONITOR

MONITOR
CPUID.01H:ECX[3] MONITOR

Every x86-64 processor in XED’s model and Zen 3 to Zen 6

More MONITOR/MWAIT instructions

Sources

  1. Intel XED v2026.08.23 (commit 0bcb6237345c): forms, encodings, operands, flags, exception classes, attributes, ISA sets, CPUID bits and chip model.
  2. The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s -march feature sets and AMD’s Processor Programming References, which the page of each processor cites.
  3. Clang's x86 intrinsic headers, LLVM 23.1.2 (commit 85ac56026243): the intrinsics, their signatures and doc comments, and the Clang of that release, which compiled each of them.
  4. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2B, page 4-26 (MONITOR)
  5. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3 (325384-093, September 2026)
  6. AMD64 Architecture Programmer's Manual, Volume 3: General-Purpose and System Instructions (24594, rev. 3.36, March 2024), Wayback Machine copy of AMD's PDF
  7. Software Optimization Guide for the AMD Zen5 Microarchitecture (58455, rev. 1.00, August 2024), Wayback Machine copy of AMD's ZIP

The tables are derived from Intel XED, Copyright Intel Corporation, licensed under the Apache License 2.0; x86-64.net converted and reformatted them. The intrinsics and their signatures come from Clang, part of the LLVM Project, licensed under the Apache License 2.0 with LLVM Exceptions. The text is our own.