3DNow!
# 3DNow!

3DNow! è un'estensione multimediale di 21 istruzioni, creata da AMD per i propri processori, inizialmente progettato per l'K6-2. Più tecnicamente, è un instruction set SIMD, in aggiunta all'x86, rivolto a migliorare le prestazioni nel calcolo vettoriale richiesto da molte applicazioni grafiche. Inizialmente era un mero miglioramento dell'MMX di Intel con l'aggiunta del calcolo in virgola mobile oltre a quello intero. Intel avrebbe in seguito introdotto un set molto simile, ma incompatibile, chiamato SSE, col Pentium III.

## Storia

AMD ha migliorato questo set di istruzioni nel tempo. Il primo aggiornamento fu chiamato semplicemente Enhanced 3DNow! (a volte detto anche Extended 3DNow! o 3DNow!+): con la prima generazione di Athlon, furono introdotte 24 nuove istruzioni (5 3DNow! e 19 MMX). La serie K6-2+/III+ (processori pensati per i portatili) beneficiò solo delle 5 nuove istruzioni DSP, ma non delle 19 istruzioni MMX. Il secondo aggiornamento fu denominato 3DNow! Professional, e debuttò con l'Athlon XP. In pratica questa versione includeva completamente il SSE della Intel e lo integrava con il 3DNow!.

Nel 2010, AMD ha annunciato che il set di istruzioni 3DNow! è stato ufficialmente deprecato, pertanto i futuri processori potrebbero non supportarlo, con l'eccezione di due istruzioni.

## Caratteristiche

Un vantaggio del 3DNow! è che può addizionare e moltiplicare due numeri sullo stesso registro, mentre l'SSE può trattare solo operandi in posizioni uguali su registri diversi. Questa capacità, chiamata orizzontale da Intel, è la maggiore aggiunta all'SSE3, reso disponibile agli inizi del 2004 con il Pentium 4 basato su core Prescott, ed implementata negli Athlon 64 "Revision E" nell'aprile 2005.

Di contro 3DNow! può memorizzare solo due numeri in un registro contro i quattro dell'SSE, le sue istruzioni sono comunque in generale più veloci nell'esecuzione.

Inoltre 3DNow! condivide gli stessi registri dell'MMX, mentre SSE ha i suoi propri registri. Dato che i registri di 3DNow! e di MMX sono usati dalle tradizionali FPU x86, le istruzioni di queste e del 3DNow! non possono essere eseguite contemporaneamente. Tuttavia, dato che l'unità 3DNow! è assimilata ad una FPU, essa può usare le istruzioni x86 FNSAVE e FRSTR per salvare e caricare le informazioni presenti nei registri. Questo significa che non sono necessarie modifiche al sistema operativo per supportare il 3DNow!.

Al contrario, l'SSE utilizza per salvare e caricare i registri delle istruzioni originali, chiamate FXSAVE e FXRSTR, aggiunte all'instruction set x86 per salvare solo i registri SSE e non anche i registri x86 (quelli usati dalla FPU, dall'MMX e dal 3DNow!). Per usare queste istruzioni FX* dovette essere introdotta una modalità protetta modificata, chiamata "enhanced mode"; l'unica differenza era che in quest'ultima abilitava l'uso dell'SSE e delle istruzioni FX*, mentre la precedente lo impediva. I sistemi operativi che supportavano l'SSE entravano nella enhanced mode, negli altri non era prevista questa possibilità.

