background image

Vol. 3B 22-13

ARCHITECTURE COMPATIBILITY

software, but using them provides a performance upgrade. 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 mor
e information on the accuracy of the 
FSIN, FCOS, and FSINCOS instructions.

22.18.7.9   FPATAN Instruction

On the 32-bit x87 FPUs, the range of operands for the FPATAN instruction is unrestricted. On the 16-bit IA-32 math 
coprocessors, the absolute value of the operand in register ST(0) must be smaller than the absolute value of the 
operand in register ST(1). This difference has impact on existing software.

22.18.7.10  F2XM1 Instruction

The 32-bit x87 FPUs support a wider range of operands (–1 < ST (0) < + 1) for the F2XM1 instruction. The 
supported operand range for the 16-bit IA-32 math coprocessors is (0 ≤ ST(0) ≤ 0.5). This difference has no impact 

on existing software.

22.18.7.11  FLD Instruction

On the 32-bit x87 FPUs, when using the FLD instruction to load an extended-real value, a denormal-operand 
exception is not generated because the instruction is not arithmetic. The 16-bit IA-32 math coprocessors do report 
a denormal-operand exception in this situation. This difference does not affect existing software.
On the 32-bit x87 FPUs, loading a denormal value that is in single- or double-real format causes the value to be 
converted to extended-real format. Loading a denormal value on the 16-bit IA-32 math coprocessors causes the 
value to be converted to an unnormal. If the next instruction is FXTRACT or FXAM, the 32-bit x87 FPUs will give a 
different result than the 16-bit IA-32 math coprocessors. This change was made for IEEE Standard 754 compati-
bility.
On the 32-bit x87 FPUs, loading an SNaN that is in single- or double-real format causes the FPU to generate an 
invalid-operation exception. The 16-bit IA-32 math coprocessors do not raise an exception when loading a 
signaling NaN. The invalid-operation exception handler for 16-bit math coprocessor software needs to be updated 
to handle this condition when porting software to 32-bit FPUs. This change was made for IEEE Standard 754 
compatibility.

22.18.7.12  FXTRACT Instruction

On the 32-bit x87 FPUs, if the operand is 0 for the FXTRACT instruction, the divide-by-zero exception is reported 
and –∞ is delivered to register ST(1). If the operand is +∞, no exception is reported. If the operand is 0 on the 16-

bit IA-32 math coprocessors, 0 is delivered to register ST(1) and no exception is reported. If the operand is +∞, the 

invalid-operation exception is reported. These differences have no impact on existing software. Software usually 
bypasses 0 and ∞. This change is due to the IEEE Standard 754 recommendation to fully support the “logb” func-

tion.

22.18.7.13  Load Constant Instructions

On 32-bit x87 FPUs, rounding control is in effect for the load constant instructions. Rounding control is not in effect 
for the 16-bit IA-32 math coprocessors. Results for the FLDPI, FLDLN2, FLDLG2, and FLDL2E instructions are the 
same as for the 16-bit IA-32 math coprocessors when rounding control is set to round to nearest or round to +∞. 

They are the same for the FLDL2T instruction when rounding control is set to round to nearest, round to –∞, or 

round to zero. Results are different from the 16-bit IA-32 math coprocessors in the least significant bit of the 
mantissa if rounding control is set to round to –∞ or round to 0 for the FLDPI, FLDLN2, FLDLG2, and FLDL2E instruc-

tions; they are different for the FLDL2T instruction if round to +∞ is specified. These changes were implemented for 

compatibility with IEEE Standard 754 for Floating-Point Arithmetic recommendations.