Instruction
FNCLEX
Clears the x87 exception flags without first handling pending exceptions; FCLEX is FWAIT followed by it.
- Extensions
- Mnemonics
- FNCLEX, FCLEX
- Forms
- 1 (1 Legacy)
- Data
- Intel XED v2026.08.23
FNCLEX clears the x87’s exception flags: IE, DE, ZE, OE, UE and PE in the status word, and with them SF, the summary bit ES and the busy bit B. Nothing else changes. The control word, TOP, the tags and the registers stay as they were, which is the difference from FNINIT, the full reset. FCLEX, listed on this page, is FWAIT followed by FNCLEX: 9B DB E2 against DB E2.
Sticky flags
The exception flags are sticky: an instruction sets the flag of each
exception it raises and never clears one, so the status word collects
every exception since the flags were last cleared, masked or not. Code
that wants to know whether one computation raised IE or PE clears the
flags first and reads them with FNSTSW afterwards. In C
that is feclearexcept and fetestexcept; GCC 14 and Clang 23 at -O2
compile both to calls of the library, which on x86-64 must clear MXCSR’s
flags as well, since FNCLEX leaves the SSE side alone.
No wait, and the exception handler
An unmasked exception sets its flag and ES, and the #MF comes at the next x87 instruction that waits. ES stays set until something clears it, so an #MF handler that returns into x87 code has to clear the flags first, or the next waiting instruction faults again. FNCLEX is the one to use there: it does not wait, and so does not fault itself. Zen 5 ran it with IE, with UE and PE, and with ZE and OE flagged, ZE unmasked and ES set: there was no #MF, and every flag, ES included, was clear afterwards. With FCLEX, the FWAIT in front would have raised the #MF first.
Both manuals leave C0 to C3 undefined after FNCLEX; Zen 5 kept them as they were in all five recorded cases. FNCLEX raises no floating-point exception of its own, only #NM when CR0.EM or CR0.TS is set.
AMD’s Zen 5 instruction table has no row for FNCLEX.
Forms
| Instruction | Encoding | Requires |
|---|---|---|
FNCLEX
FNCLEX | DB E2 | FPU |
Operation
What the forms do, in pseudocode that our tests run against results recorded on real processors. How to read.
ie = de = ze = oe = ue = pe = 0 # and ES and B, which follow
stack_fault = 0
c0 = c1 = c2 = c3 = UNDEFINEDRun on AMD Zen 5 (EPYC 9645): 5 cases.
Operands
| Operand | Kind | Action |
|---|---|---|
FNCLEX | ||
x87 status word | implicit | write |
Flags
| C0 | C1 | C2 | C3 |
|---|---|---|---|
| All forms | |||
| U | U | U | U |
Attributes
What else XED records about the forms. How to read.
- All forms
- may abort a TSX transaction
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.
| ISA set | CPUID | Processors |
|---|---|---|
X87 | FPU | Every x86-64 processor in XED’s model and Zen 3 to Zen 6 |
More x87 instructions
Sources
- Intel XED v2026.08.23 (commit
0bcb6237345c): forms, encodings, operands, flags, exception classes, attributes, ISA sets, CPUID bits and chip model. - The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s
-marchfeature sets and AMD’s Processor Programming References, which the page of each processor cites. - Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026): Volume 2A, page 3-320 (FCLEX/
FNCLEX) - Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1 (253665-093, September 2026)
- AMD64 Architecture Programmer's Manual, Volume 5: 64-Bit Media and x87 Floating-Point Instructions (26569, rev. 3.16, November 2021), Wayback Machine copy of AMD's PDF
- 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 text is our own.