background image

22-12 Vol. 3B

ARCHITECTURE COMPATIBILITY

22.18.7.1   FDIV, FPREM, and FSQRT Instructions

The 32-bit x87 FPUs support operations on denormalized operands and, when detected, an underflow exception 
can occur, for compatibility with the IEEE Standard 754. The 16-bit IA-32 math coprocessors do not operate on 
denormalized operands or return underflow results. Instead, they generate an invalid-operation exception when 
they detect an underflow condition. An existing underflow exception handler will require change only if it gives 
different treatment to different opcodes. Also, it is possible that fewer invalid-operation exceptions will occur.

22.18.7.2   FSCALE Instruction

With the 32-bit x87 FPUs, the range of the scaling operand is not restricted. If (0 < | ST(1) < 1), the scaling factor 
is 0; therefore, ST(0) remains unchanged. If the rounded result is not exact or if there was a loss of accuracy 
(masked underflow), the precision exception is signaled. With the 16-bit IA-32 math coprocessors, the range of the 
scaling operand is restricted. If (0 < | ST(1) | < 1), the result is undefined and no exception is signaled. The 
impact of this difference on exiting software is that different results are delivered on the 32-bit and 16-bit FPUs and 
math coprocessors when (0 < | ST(1) | < 1).

22.18.7.3   FPREM1 Instruction

The 32-bit x87 FPUs compute a partial remainder according to IEEE Standard 754. This instruction does not exist 
on the 16-bit IA-32 math coprocessors. The availability of the FPREM1 instruction has is no impact on existing soft-
ware.

22.18.7.4   FPREM Instruction

On the 32-bit x87 FPUs, the condition code flags C0, C3, C1 in the status word correctly reflect the three low-order 
bits of the quotient following execution of the FPREM instruction. On the 16-bit IA-32 math coprocessors, the 
quotient bits are incorrect when performing a reduction of (64

+ M) when (N â‰¥ 1) and M is 1 or 2. This difference 

does not affect existing software; software that works around the bug should not be affected.

22.18.7.5   FUCOM, FUCOMP, and FUCOMPP Instructions

When executing the FUCOM, FUCOMP, and FUCOMPP instructions, the 32-bit x87 FPUs perform unordered compare 
according to IEEE Standard 754. These instructions do not exist on the 16-bit IA-32 math coprocessors. The avail-
ability of these new instructions has no impact on existing software.

22.18.7.6   FPTAN Instruction

On the 32-bit x87 FPUs, the range of the operand for the FPTAN instruction is much less restricted (| ST(0) | < 2

63

than on earlier math coprocessors. The instruction reduces the operand internally using an internal Ï€/4 constant 

that is more accurate. The range of the operand is restricted to (| ST(0) | < Ï€/4) on the 16-bit IA-32 math copro-

cessors; the operand must be reduced to this range using FPREM. This change has no impact on existing software. 
See also sections 8.3.8 and section 8.3.10 of the Intel® 64 and IA-32 Architectures Software Developer’s Manual, 
Volume 1
 for more information on the accuracy of the FPTAN instruction.

22.18.7.7   Stack Overflow

On the 32-bit x87 FPUs, if an FPU stack overflow occurs when the invalid-operation exception is masked, the FPU 
returns the real, integer, or BCD-integer indefinite value to the destination operand, depending on the instruction 
being executed. On the 16-bit IA-32 math coprocessors, the original operand remains unchanged following a stack 
overflow, but it is loaded into register ST(1). This difference has no impact on existing software.

22.18.7.8   FSIN, FCOS, and FSINCOS Instructions

On the 32-bit x87 FPUs, these instructions perform three common trigonometric functions. These instructions do 
not exist on the 16-bit IA-32 math coprocessors. The availability of these instructions has no impact on existing