Qual é o significado da instrução da CPU CMOV?

6

O Ubuntu 10.10 diminuiu o suporte para processadores i586 e menores, junto com os processadores i686 que não suportam a instrução CMOV (MOVe condicional, AFAIK).

O que há de tão especial sobre o comando CMOV? Ele ainda tem um sinalizador próprio na linha flags : de /proc/cpuinfo .

    
por ΤΖΩΤΖΙΟΥ 11.10.2010 / 01:18

2 respostas

5

A instrução CMOV é uma instrução de movimento predicada (ou condicional). Ele combina uma ramificação e move a instrução em um opcode.

A instrução CMOV é útil na otimização do compilador porque ajuda a remover algumas das instruções de saltos condicionais do código. Isso é importante em processadores superescalares modernos, pois muitas instruções estão em execução e executadas em paralelo, e uma instrução de salto condicional dificultaria a previsão se o código deveria ou não ser executado até que a ramificação fosse resolvida.

    
por pkumar 13.10.2010 / 22:05
5

Quando o código-fonte é compilado para a arquitetura 686 com o gcc e o sinalizador -march, o gcc irá gerar código objeto que contém a instrução CMOV. Isso porque o CMOV era uma instrução que veio com a arquitetura 686 original, lançada há 15 anos.

Um punhado de processadores que afirmam ser compatíveis com 686 não suportam esta instrução. Assim, muito trabalho tem que ser feito para lidar com o punhado de chips que não suportam esta instrução padrão que existe há mais de 15 anos e faz parte da arquitetura original do 686 de alguma forma. A equipe de kernel do Ubuntu tem uma quantidade limitada de tempo e decidiu que não vale mais seu tempo continuar a suportar processadores supostamente compatíveis com 686 que não puderam nos últimos 15 anos incluir essa instrução que faz parte do conjunto de instruções do núcleo 686 .

Não há nada de especial sobre o comando CMOV em si, além de não ser uma instrução na arquitetura pré-i686 (i486, i586 etc.) e que alguns chips supostamente compatíveis com i686 não têm a instrução.

    
por Dennis Sheil 11.10.2010 / 02:38

Tags