What is the significance of the CMOV CPU instruction?

Solution 1:

The CMOV instruction is a predicated (or conditional) move instruction. It combines a branch and move instruction into one opcode.

The CMOV instruction is useful in compiler optimization because it helps remove some of the conditional jump instructions from the code. This is important in modern superscalar processors because many instruction are in flight and executed in parallel and a conditional jump instruction would make it harder to predict whether code should be executed or not until the branch is resolved.

Solution 2:

When source code is compiled for the 686 architecture with gcc and the -march flag, gcc will sometimes generate object code which contains the CMOV instruction. That is because CMOV was an instruction which came with the original 686 architecture which was released 15 years ago.

A handful of processors which claim to be 686 compatible do not support this instruction. Thus, a lot of work has to be done to deal with the handful of chips that do not support this standard instruction which has been around for over 15 years and is part of the original 686 architecture any how. The Ubuntu kernel team has a limited amount of time, and decided it is no longer worth their time to continue supporting supposedly 686 compatible processors which have not been able over the past 15 years to include this instruction which is part of the core 686 instruction set.

There's nothing particularly special about the CMOV command itself, other than it was not an instruction in pre-i686 architecture (i486, i586 etc.) and that some supposedly i686 compatible chips do not have the instruction.