No momento em que este artigo foi escrito (novembro de 2024), ainda havia alguma distribuição Linux de 64 bits mantida que fosse instalada e executada com sucesso em hardware de nível de microarquitetura x86_64-v1?
Ou todas as distribuições de 64 bits mantidas atualmente exigem uma CPU que suporte no mínimo o conjunto de instruções x86_64-v2?
amd64
A variante do Debian ainda suporta todas as CPUs x86 de 64 bits , incluindo a linha de base “v1” (compare a seção correspondente parai386
, que menciona CPUs de 32 bits não suportadas).Além do RHEL e do Tumbleweed, acho que a maioria das distribuições ainda suporta a linha de base v1. O Ubuntu tem imagens de teste v3 disponíveis , mas o padrão da distribuição ainda é v1.
Em 2024-11-19, uma maioria significativa de distribuições Linux que enviam pacotes x86 de 64 bits enviam todo o código compilado para x86-64 de linha de base (equivalente ao hardware AMD K8 ou Intel Prescott). Há algumas exceções a isso, com algumas distros exigindo x86-64-v2 ou x86-64-v3, e algumas das distros indiscutivelmente mais inteligentes procurando fornecer uma opção para usar tal compilação, mas ainda fornecendo compilações de linha de base também, mas como regra geral, elas são uma minoria relativa, a menos que você olhe apenas para distros 'grandes'.
Parte disso se resume a um desejo de preservar a compatibilidade, mas uma parte não trivial disso também se resume ao fato de que tanto o GCC quanto o Clang produzirão apenas código x86-64 de base, a menos que você diga explicitamente para eles usarem outras coisas, e a maioria das distros não diz explicitamente para eles fazerem outras coisas. Uma parte muito menor também se resume ao fato de que se um nível de microarquitetura mais alto tem ou não um impacto significativo no x86-64 depende muito do que você está fazendo exatamente. Um pequeno punhado de instruções em x86-64-v2 são universalmente úteis (cmpxchg16b é provavelmente o melhor exemplo), mas muitas coisas nos níveis mais altos (incluindo muito do x86-64-v2) são muito mais específicas (por exemplo, popcnt é muito útil para um pequeno punhado de coisas muito específicas (a ponto de tanto o GCC quanto o Clang poderem reconhecer implementações simples do que ele faz em C/C++ e substituí-las por essa única instrução), mas absolutamente inútil fora desses casos).