<<<    Index    >>>
3-267
INSTRUCTION SET REFERENCE
FUCOM/FUCOMP/FUCOMPP—Unordered Compare Real
Description
These instructions perform an unordered comparison of the contents of register ST(0) and ST(i)
and sets condition code flags C0, C2, and C3 in the FPU status word according to the results
(refer to the table below). If no operand is specified, the contents of registers ST(0) and ST(1)
are compared. The sign of zero is ignored, so that –0.0 = +0.0.
NOTE:
*Flags not set if unmasked invalid-arithmetic-operand (#IA) exception is generated.
An unordered comparison checks the class of the numbers being compared (refer to
“FXAM—Examine” in this chapter). The FUCOM instructions perform the same operations as
the FCOM instructions. The only difference is that the FUCOM instructions raise the invalid-
arithmetic-operand exception (#IA) only when either or both operands are an sNaN or are in an
unsupported format; qNaNs cause the condition code flags to be set to unordered, but do not
cause an exception to be generated. The FCOM instructions raise an invalid operation exception
when either or both of the operands are a NaN value of any kind or are in an unsupported format.
As with the FCOM instructions, if the operation results in an invalid-arithmetic-operand excep-
tion being raised, the condition code flags are set only if the exception is masked.
The FUCOMP instruction pops the register stack following the comparison operation and the
FUCOMPP instruction pops the register stack twice following the comparison operation. To pop
the register stack, the processor marks the ST(0) register as empty and increments the stack
pointer (TOP) by 1.
Opcode
Instruction
Description
DD E0+i
FUCOM ST(i)
Compare ST(0) with ST(i)
DD E1
FUCOM
Compare ST(0) with ST(1)
DD E8+i
FUCOMP ST(i)
Compare ST(0) with ST(i) and pop register stack
DD E9
FUCOMP
Compare ST(0) with ST(1) and pop register stack
DA E9
FUCOMPP
Compare ST(0) with ST(1) and pop register stack twice
Comparison Results
C3
C2
C0
ST0 > ST(i)
0
0
0
ST0 < ST(i)
0
0
1
ST0 = ST(i)
1
0
0
Unordered
1
1
1
<<<    Index    >>>