User Guide

274 x87 Floating-Point Programming
AMD64 Technology 24592—Rev. 3.15—November 2009
The FINIT and FNINIT instructions set all bits in the x87 control-word, status-word, and tag word
registers to their default values. Assemblers issue FINIT as an FWAIT instruction f ollowed by an
FNINIT instruction. Thus, FINIT (but not FNINIT) reports pending unmasked x87 floating-point
exceptions before performing the initialization.
Both FINIT and FNINIT write the control word with its initialization value, 037Fh, which specifies
round-to-nearest, all exceptions masked, and double-extended-precision. The tag word indicates that
the floating-point registers are empty. The status word and the four condition-code bits are cleared to 0.
The x87 pointers and opcode state (“Pointers and Opcode State” on page 247) are all cleared to 0.
The FINIT instruction should be used when pending x87 floating-point exceptions are being reported
(unmasked). The no-wait instruction, FNINIT, should be used when pending x87 floating-point
exceptions are not being reported (masked).
Wait for Exceptions
FWAIT or WAIT—Wait for Unmasked x87 Floating-Point Exceptions
The FWAIT and WAIT instructions are synonyms. The instruction forces the processor to test for and
handle any pending, unmasked x87 floating-point exceptions.
Clear Exceptions
FCLEX—Floating-Point Clear Flags
FNCLEX—Floating-Point No-Wait Clear Flags
These instructions clear the status-word exception flags, stack-fault flag, and busy flag. They leave the
four condition-code bits undefined.
Assemblers issue F CLEX as an FWAIT instruction followed by an FNCLEX instruction. Thus,
FCLEX (but not FNCLEX) reports pending unmasked x87 floating-point exceptions before clearing
the exception flags.
The FCLEX instruction should be used when pending x87 floating-point exceptions are being reported
(unmasked). The no-wait instruction, FNCLEX, should be used when pending x87 floating-point
exceptions are not being reported (masked).
Save and Restore x87 Control Word
FLDCW—Floating-Point Load x87 Control Word
FSTCW—Floating-Point Store Control Word
FNSTCW—Floating-Point No-Wait Store Control Word
These instructions load or store the x87 control-word register as a 2-byte value from or to a memory
location.
The FLDCW instruction loads a control word. If the loaded control word unmasks any pending x87
floating-point exceptions, these exceptions are reported when the next non-control x87 or 64-bit media
instruction is executed.