# 3DNow!

3DNow! é uma extensão multimídia criada pela AMD para seus processadores, que teve início com o K6-2 em 1998. Em termos mais técnicos, é um acréscimo de instruções SIMD ao tradicional conjunto de instruções x86, com o objetivo de melhor atender aos requisitos de processamento vetorial de muitas aplicações predominantemente gráficas. Foi originalmente desenvolvido como um aperfeiçoamento do conjunto de instruções MMX, de modo a estender sua capacidade limitada a números inteiros também para ponto flutuante. Posteriormente, a Intel incorporaria instruções similares (porém incompatíveis) ao Pentium III, chamadas de SSE.
A AMD aperfeiçoou o conjunto de instruções ao longo do tempo. A primeira melhoria foi chamada simplesmente de Enhanced 3DNow! (3DNow! Aperfeiçoado), algumas vezes Extended 3DNow! (3DNow! Estendido), introduzida com os Athlons de primeira geração, que acrescentou cerca de 19 novas instruções, a maioria das quais para lidar com previsão de instrução, etc. Um fato pouco conhecido é que essas novas adições continham uma implementação parcial do SSE1. A segunda melhoria foi chamada de 3DNow! Profissional, que foi introduzida com os processadores Athlon XP; essa versão basicamente integrava por completo a tecnologia SSE1 da Intel, combinando-a com a sua própria 3DNow!
Uma vantagem da 3DNow! é poder somar ou mutiplicar os dois números que estão armazenados no mesmo registro. Com a SSE, cada número só pode ser combinado com um número na mesma posição em outro registro. Essa habilidade, denominada horizontal pela Intel, é o principal acréscimo ao recém-lançado conjunto de instruções SSE3.
Uma desvantagem da 3DNow! relativamente à SSE é que ela somente armazena dois números num registro, diferentemente dos quatro na SSE. Entretanto, as intruções 3DNow! podem ser geralmente executadas em menos tempo que as instruções SSE.
3DNow! também compartilha os mesmos registros físicos do MMX, enquanto que o SSE tem seus próprios registros independentes. Como esses registros MMX e 3DNow! são também utilizados pelo padrão x87 FPU, as instruções 3DNow! e x87 não podem ser utilizadas simultaneamente. Todavia, por estarem referenciados ao FPU x87, os estados dos registros da 3DNow! e MMX podem ser salvos e restaurados pelas tradicionais instruções x87 FNSAVE e FRSTR. O uso das tradicionais instruções x87 significou que não foram necessárias quaisquer modificações no sistema operacional para dar suporte ao 3DNow!
Em contraste, para salvar e restaurar o estado dos registros SSE, foi necessário o uso das recém-introduzidas instruções FXSAVE e FXRSTR; as instruções FX* são uma atualização das instruções Salva e Restaura do antigo x87, porque estas poderiam salvar não apenas os estados do registro SSE, como também os estados do registro x87 (o que significa, portanto, que poderiam salvar também registros MMX e 3DNow!).
O uso das instruções FX* exigiram que o processador entrasse numa versão ligeiramente modificada do modo Protegido, chamada modo Aperfeiçoado ("Enhanced mode"); a única diferença entre esses dois modos foi que este último permitiu o uso de SSE (e, portanto, das instruções FX*) e aquele desabilitou seu uso. Sistemas operacionais que dão suporte à SSE entrariam no modo Aperfeiçoado, enquanto que aqueles desconhecedores de sua existência entrariam somente no tradicional modo Protegido.