Você está analisando os primeiros processadores AMD de 64 bits, antes do Rev F (que é quando eles mudaram para a memória DDR2). Há alguns passos iniciais da Intel Noconas também que não suportam isso, eu acho, mas estes são mais raros.
A instrução cmpxchg16b para fazer trocas de memória atômica de 128 bits não é suportada em versões antigas do processador x64, mas parece que isso tem sido suportado por versões mais recentes do processador há vários anos. Qual é a probabilidade de encontrar uma máquina de 64 bits com um processador antigo sem essa instrução?
Você está analisando os primeiros processadores AMD de 64 bits, antes do Rev F (que é quando eles mudaram para a memória DDR2). Há alguns passos iniciais da Intel Noconas também que não suportam isso, eu acho, mas estes são mais raros.
Não tenho dados sobre a prevalência de determinados tipos de CPUs, por isso não posso responder diretamente à sua pergunta. No entanto, você pode descobrir se a CPU suporta CMPXCHG16B
verificando se CPUID.01h.ECX.bit13
é 1
(disponível) ou 0
(não disponível).
Observe também que os manuais da Intel sugerem que, para que esta instrução seja executada atomicamente, você precisa combiná-la com o prefixo LOCK
.
O suporte na CPU pode não ser suficiente, já que alguns Ainda não tenho certeza do que na placa-mãe poderia impedir o funcionamento do CMPXCHG16B. Provavelmente, os bits de detecção de recursos podem ser desabilitados pelo BIOS. Para resumir o que o blog de Yuhong Bao diz sobre isso, houve uma errata de processador nos primeiros chips Core 2 (passos E0 / R0 do Core 2 de 45nm) que causaram seus recursos ser reportado incorretamente via CPUID. Foi possível contornar isso através da atualização do BIOS / microcódigo, até onde eu sei.
Tags assembly