Intel 64 and IA-32 Architectures Software Developers Manual Volume 1, Basic Architecture
Vol. 1 8-27
PROGRAMMING WITH THE X87 FPU
FTST Test (compare floating point with 0.0).
FXAM Examine.
Comparison of floating-point values differ from comparison of integers because
floating-point values have four (rather than three) mutually exclusive relationships:
less than, equal, greater than, and unordered.
The unordered relationship is true when at least one of the two values being
compared is a NaN or in an unsupported format. This additional relationship is
required because, by definition, NaNs are not numbers, so they cannot have less
than, equal, or greater than relationships with other floating-point values.
The FCOM, FCOMP, and FCOMPP instructions compare the value in register ST(0) with
a floating-point source operand and set the condition code flags (C0, C2, and C3) in
the x87 FPU status word according to the results (see Table 8-6).
If an unordered condition is detected (one or both of the values are NaNs or in an
undefined format), a floating-point invalid-operation exception is generated.
The pop versions of the instruction pop the x87 FPU register stack once or twice after
the comparison operation is complete.
The FUCOM, FUCOMP, and FUCOMPP instructions operate the same as the FCOM,
FCOMP, and FCOMPP instructions. The only difference is that with the FUCOM,
FUCOMP, and FUCOMPP instructions, if an unordered condition is detected because
one or both of the operands are QNaNs, the floating-point invalid-operation excep-
tion is not generated.
The FICOM and FICOMP instructions also operate the same as the FCOM and FCOMP
instructions, except that the source operand is an integer value in memory. The
integer value is automatically converted into an double extended-precision floating-
point value prior to making the comparison. The FICOMP instruction pops the x87
FPU register stack following the comparison operation.
The FTST instruction performs the same operation as the FCOM instruction, except
that the value in register ST(0) is always compared with the value 0.0.
The FCOMI and FCOMIP instructions were introduced into the IA-32 architecture in
the P6 family processors. They perform the same comparison as the FCOM and
Table 8-6. Setting of x87 FPU Condition Code Flags for Floating-Point Number
Comparisons
Condition C3 C2 C0
ST(0) > Source Operand 0 0 0
ST(0) < Source Operand 0 0 1
ST(0) = Source Operand 1 0 0
Unordered 1 1 1