Intel 64 and IA-32 Architectures Software Developers Manual Volume 1, Basic Architecture
Vol. 1 8-35
PROGRAMMING WITH THE X87 FPU
various classes of floating-point exceptions. This information pertains
to x87 FPU as well as SSE/SSE2/SSE3 extensions.
The following sections give specific information about how the x87 FPU handles
floating-point exceptions that are unique to the x87 FPU.
8.4.1 Arithmetic vs. Non-arithmetic Instructions
When dealing with floating-point exceptions, it is useful to distinguish between
arithmetic instructions and non-arithmetic instructions. Non-arithmetic
instructions have no operands or do not make substantial changes to their operands.
Arithmetic instructions do make significant changes to their operands; in particular,
they make changes that could result in floating-point exceptions being signaled.
Table 8-9 lists the non-arithmetic and arithmetic instructions. It should be noted that
some non-arithmetic instructions can signal a floating-point stack (fault) exception,
but this exception is not the result of an operation on an operand.
Table 8-9. Arithmetic and Non-arithmetic Instructions
Non-arithmetic Instructions Arithmetic Instructions
FABS F2XM1
FCHS FADD/FADDP
FCLEX FBLD
FDECSTP FBSTP
FFREE FCOM/FCOMP/FCOMPP
FINCSTP FCOS
FINIT/FNINIT FDIV/FDIVP/FDIVR/FDIVRP
FLD (register-to-register) FIADD
FLD (extended format from memory) FICOM/FICOMP
FLD constant FIDIV/FIDIVR
FLDCW FILD
FLDENV FIMUL
FNOP FIST/FISTP
1
FRSTOR FISUB/FISUBR
FSAVE/FNSAVE FLD (single and double)
FST/FSTP (register-to-register) FMUL/FMULP
FSTP (extended format to memory) FPATAN
FSTCW/FNSTCW FPREM/FPREM1
FSTENV/FNSTENV FPTAN