Vol. 2A 3-583
INSTRUCTION SET REFERENCE, A-M
MFENCE—Memory Fence
MFENCE—Memory Fence
Description
Performs a serializing operation on all load-from-memory and store-to-memory
instructions that were issued prior the MFENCE instruction. This serializing operation
guarantees that every load and store instruction that precedes in program order the
MFENCE instruction is globally visible before any load or store instruction that follows
the MFENCE instruction is globally visible. The MFENCE instruction is ordered with
respect to all load and store instructions, other MFENCE instructions, any SFENCE
and LFENCE instructions, and any serializing instructions (such as the CPUID instruc-
tion).
Weakly ordered memory types can be used to achieve higher processor performance
through such techniques as out-of-order issue, speculative reads, write-combining,
and write-collapsing. The degree to which a consumer of data recognizes or knows
that the data is weakly ordered varies among applications and may be unknown to
the producer of this data. The MFENCE instruction provides a performance-efficient
way of ensuring load and store ordering between routines that produce weakly-
ordered results and routines that consume that data.
It should be noted that processors are free to speculatively fetch and cache data from
system memory regions that are assigned a memory-type that permits speculative
reads (that is, the WB, WC, and WT memory types). The PREFETCHh instruction is
considered a hint to this speculative behavior. Because this speculative fetching can
occur at any time and is not tied to instruction execution, the MFENCE instruction is
not ordered with respect to PREFETCHh instructions or any other speculative fetching
mechanism (that is, data could be speculatively loaded into the cache just before,
during, or after the execution of an MFENCE instruction).
This instruction’s operation is the same in non-64-bit modes and 64-bit mode.
Operation
Wait_On_Following_Loads_And_Stores_Until(preceding_loads_and_stores_globally_visible);
Intel C/C++ Compiler Intrinsic Equivalent
void _mm_mfence(void)
Exceptions (All Modes of Operation)
#UD If CPUID.01H:EDX.SSE2[bit 26] = 0.
If the LOCK prefix is used.
Opcode Instruction 64-Bit
Mode
Compat/
Leg Mode
Description
0F AE /6 MFENCE Valid Valid Serializes load and store operations.