FCMOVcc                 FP Conditional Move          Exceptions: S
C3 C2 C1 C0: ? ? * ?
FCMOVcc destination,source FPU: PPro+

Logic if condition
ST ← ST(i)
endif

Tests the status flags in the EFLAGS register and moves the source
operand to the destination operand if the given test condition is
true. The source operand is always in an ST(i) register and the
destination operand is always ST(0).

The FCMOVcc instructions are useful for optimizing small IF
constructions. They also help eliminate branching overhead for IF
operations and the possibility of branch mispredictions by the
processor.

Note
The FCMOVcc instructions are new for the Pentium Pro
processor family; however, they may not be supported
by all the processors in the family. By checking the
processor's feature information with CPUID, a program
can determine if the CPU supports FCMOVcc. If both the
CMOV and FPU feature bits are set, the FCMOVcc
instructions are supported.



Instruction Move if ... Flags
FCMOVA, FCMOVNBE Above, Not Below or Equal CF=0 AND ZF=0
FCMOVAE, FCMOVNB, Above or Equal, Not Below,
FCMOVNC Not Carry CF=0
FCMOVB, FCMOVC, Below, Carry,
FCMONAE Not Above or Equal CF=1
FCMOVBE, FCMOVNA Below or Equal, Not Above CF=1 OR ZF=1
FCMOVE, FCMOVZ Equal, Zero ZF=1
FCMOVNE, FCMOVNZ Not Equal, Not Zero ZF=0
FCMOVU Unordered PF=1 (C2=1)
FCMOVNU Not Unordered PF=0 (C2=0)


Opcode Format
DA C0 + i FCMOVB ST, ST(i)
DA C8 + i FCMOVE ST, ST(i)
DA D0 + i FCMOVBE ST, ST(i)
DA D8 + i FCMOVU ST, ST(i)
DB C0 + i FCMOVNB ST, ST(i)
DB C8 + i FCMOVNE ST, ST(i)
DB D0 + i FCMOVNBE ST, ST(i)
DB D8 + i FCMOVNU ST, ST(i)


Timing
??