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)