Intel 64 and IA-32 Architectures Software Developers Manual Volume 1, Basic Architecture
Vol. 1 8-9
PROGRAMMING WITH THE X87 FPU
8.1.3.4 Stack Fault Flag
The stack fault flag (bit 6 of the x87 FPU status word) indicates that stack overflow or
stack underflow has occurred with data in the x87 FPU data register stack. The x87
FPU explicitly sets the SF flag when it detects a stack overflow or underflow condi-
tion, but it does not explicitly clear the flag when it detects an invalid-arithmetic-
operand condition.
When this flag is set, the condition code flag C1 indicates the nature of the fault:
overflow (C1 = 1) and underflow (C1 = 0). The SF flag is a “sticky” flag, meaning
that after it is set, the processor does not clear it until it is explicitly instructed to do
so (for example, by an FINIT/FNINIT, FCLEX/FNCLEX, or FSAVE/FNSAVE instruction).
See Section 8.1.7, “x87 FPU Tag Word,” for more information on x87 FPU stack faults.
8.1.4 Branching and Conditional Moves on Condition Codes
The x87 FPU (beginning with the P6 family processors) supports two mechanisms for
branching and performing conditional moves according to comparisons of two
floating-point values. These mechanism are referred to here as the “old mechanism”
and the “new mechanism.”
The old mechanism is available in x87 FPU’s prior to the P6 family processors and in
P6 family processors. This mechanism uses the floating-point compare instructions
(FCOM, FCOMP, FCOMPP, FTST, FUCOMPP, FICOM, and FICOMP) to compare two
floating-point values and set the condition code flags (C0 through C3) according to
the results. The contents of the condition code flags are then copied into the status
flags of the EFLAGS register using a two step process (see Figure 8-5):
1. The FSTSW AX instruction moves the x87 FPU status word into the AX register.
2. The SAHF instruction copies the upper 8 bits of the AX register, which includes the
condition code flags, into the lower 8 bits of the EFLAGS register.
When the condition code flags have been loaded into the EFLAGS register, conditional
jumps or conditional moves can be performed based on the new settings of the
status flags in the EFLAGS register.