<<<    Index    >>>
7-20
FLOATING-POINT UNIT
7.3.5.Infinity Control Flag
The infinity control flag (bit 12 of the FPU control word) is provided for compatibility with the
Intel 287 Math Coprocessor; it is not meaningful for the Pentium
®
 Pro processor FPU or for the
Pentium
®
 processor
 
FPU, the Intel486™ processor FPU, or Intel 387 processor NPX. Refer to
Section 7.2.3.3., “Signed Infinities”, for information on how the IA FPUs handle infinity values.
7.3.6.FPU Tag Word
The 16-bit tag word (refer to Figure 7-11) indicates the contents of each the 8 registers in the
FPU data-register stack (one 2-bit tag per register). The tag codes indicate whether a register
contains a valid number, zero, or a special floating-point number (NaN, infinity, denormal, or
unsupported format), or whether it is empty. The FPU tag word is cached in the FPU in the FPU
tag word register. When the FPU is initialized with either an FINIT/FNINIT or
FSAVE/FNSAVE instruction, the FPU tag word is set to FFFFH, which marks all the FPU data
registers as empty.
.
Each tag in the FPU tag word corresponds to a physical register (numbers 0 through 7). The
current top-of-stack (TOP) pointer stored in the FPU status word can be used to associate tags
with registers relative to ST(0).
The FPU uses the tag values to detect stack overflow and underflow conditions. Stack overflow
occurs when the TOP pointer is decremented (due to a register load or push operation) to point
to a non-empty register. Stack underflow occurs when the TOP pointer is incremented (due to a
save or pop operation) to point to an empty register or when an empty register is also referenced
as a source operand. A non-empty register is defined as a register containing a zero (01), a valid
value (00), or an special (10) value.
Application programs and exception handlers can use this tag information to check the contents
of an FPU data register without performing complex decoding of the actual data in the register.
To read the tag register, it must be stored in memory using either the FSTENV/FNSTENV or
FSAVE/FNSAVE instructions. The location of the tag word in memory after being saved with
one of these instructions is shown in Figures 7-13 through 7-16.
Figure 7-11.  FPU Tag Word
0
15
TAG Values
TAG(7)
TAG(5)
TAG(6)
TAG(4)TAG(3)TAG(2)TAG(1)TAG(0)
00 — Valid
01 — Zero
10 — Special: invalid (NaN, unsupported), infinity, or denormal
11 — Empty
<<<    Index    >>>