Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Ubuntu 10.10 has dropped support for i586 and lesser processors, along with i686 processors that do not support the CMOV instruction (Conditional MOVe, AFAIK).

What is so special about the CMOV command? It even has a flag of its own in the flags : line of /proc/cpuinfo.

share|improve this question

2 Answers 2

up vote 4 down vote accepted

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.

share|improve this answer
    
Ah, just like the conditionals in ARM and ia64 architectures, in this case applying only to a move instruction. Thank you. –  ΤΖΩΤΖΙΟΥ Oct 14 '10 at 0:10
    
@ΤΖΩΤΖΙΟΥ: See also blueraja.com/blog/285/… –  BlueRaja - Danny Pflughoeft Dec 21 '11 at 0:15

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.

share|improve this answer
    
Very informative. Where can I get details about which of the so-called i686 compatible chips do not support this ? Any link to ubuntu kernel team website that has more info (like what a user / packager can do to deal with this) ? –  koushik Oct 11 '10 at 5:30
    
koushik - this discussion log from IRC should answer some of your questions - irclogs.ubuntu.com/2010/06/18/%23ubuntu-kernel.html#t14:16 –  Dennis Sheil Oct 11 '10 at 7:36
    
Thanks, Dennis. I still feel that there's something more to it, based on this article, and I quote: “CMOV instructions heavily used in compiler optimization”. Unless sb else comes up with something more detailed, please include this link in your answer and I'll accept it. –  ΤΖΩΤΖΙΟΥ Oct 11 '10 at 9:27

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.