buntu 10.1 a abandonné la prise en charge des processeurs i586 et inférieurs, ainsi que des processeurs i686 ne prenant pas en charge l'instruction CMOV (Conditional MOVe, AFAIK).
Quelle est la particularité de la commande CMOV? Il a même son propre drapeau dans la ligne flags :
de /proc/cpuinfo
.
L’instruction CMOV est une instruction de mouvement déterminée (ou conditionnelle). Il combine une branche et déplace une instruction dans un seul opcode.
L'instruction CMOV est utile dans l'optimisation du compilateur, car elle permet de supprimer certaines des instructions de saut conditionnelles du code. Ceci est important dans les processeurs superscalaires modernes car de nombreuses instructions sont en vol et exécutées en parallèle et une instruction de saut conditionnel rendrait plus difficile la prédiction du code à exécuter ou non jusqu'à la résolution de la branche.
Lorsque le code source est compilé pour l'architecture 686 avec gcc et le drapeau -march, gcc génère parfois un code objet contenant l'instruction CMOV. En effet, CMOV était une instruction fournie avec l’architecture originale 686 qui a été publiée il ya 15 ans.
Une poignée de processeurs qui prétendent être compatibles 686 ne supporte pas cette instruction. Ainsi, beaucoup de travail doit être fait pour traiter les quelques puces qui ne supportent pas cette instruction standard qui existe depuis plus de 15 ans et qui fait partie de l’architecture 686 originale. L’équipe du noyau Ubuntu dispose de peu de temps et a décidé qu’il ne valait plus la peine de continuer à supporter des processeurs supposément compatibles avec 686 processeurs qui n’ont pas été en mesure, ces 15 dernières années, d’inclure cette instruction dans le jeu d’instructions de base 686. .
La commande CMOV n’a rien de particulièrement spécial, si ce n’est pas une instruction d’architecture antérieure à i686 (i486, i586, etc.) et que certaines puces supposément compatibles i686 ne l’ont pas.