|This page uses content from the English Wikipedia. The original article was at 3DNow!. The list of authors can be seen in the page history. As with All articles on the Computing Knowledgebase Wikia, the text of Wikipedia is available under the GNU Free Documentation License.|
3DNow! is the name of a multimedia extension created by AMD for its processors, starting with the K6-2 in 1998. In more technical terms, it's an addition of SIMD instructions to the traditional x86 instruction set, to better cope with the vector-processing requirements of many graphic-intensive applications. It was originally developed as an enhancement to the MMX instruction set to extend it from integer-only to Floating Point capabilities too. Later, Intel would add similar (but incompatible) instructions to the Pentium III, known as SSE.
AMD upgraded the instruction set over time. The first enhancement was called quite simply Enhanced 3DNow!, introduced with the first-generation Athlons; which added about 19 new instructions mostly to do with instruction prefetching, etc. The second enhancement was called 3DNow! Professional, which was introduced with the Athlon XP processors; this version basically integrated the full SSE technology from Intel and combined it with its own 3DNow!.
One advantage of 3DNow!, is that it is possible to add or multiply the two numbers that are stored in the same register. With SSE, each number can only be combined with a number in the same position in another register. This capability, known as horizonal in Intel-speak, is the major addition to the SSE3 instruction set, recently released.
A disadvantage with 3DNow! compared to SSE, is that it only stores two numbers in a register, as opposed to four in SSE. However, 3DNow! instructions can generally be executed with a lower latency and throughput than SSE instructions.
3DNow! also shares the same physical registers as MMX, while SSE has its own independent registers. Because these MMX and 3DNow! registers are also used by the standard x87 FPU, 3DNow! instructions and x87 instructions can't be executed simultaneously. However, since it is aliased to the x87 FPU, the 3DNow! & MMX register states can be saved and restored by the traditional x87 FNSAVE and FRSTR instructions. Using the traditional x87 instructions meant that no operating system modifications had to be made to support 3DNow!.
By contrast, to save and restore the state of SSE registers required the use of the newly added FXSAVE and FXRSTR instructions; the FX* instructions are an upgrade to the older x87 save and restore instructions because these could save not only SSE register states but also those x87 register states (hence which meant that it could save MMX and 3DNow! registers too). Use of the FX* instructions required that the processor entered a slightly modified version of Protected mode called Enhanced mode; the only difference between Protected mode and Enhanced mode was that the latter enabled the use of SSE (and thus the FX* instructions), and the former disabled their use. Operating systems which supported SSE would enter Enhanced mode, whereas those which were unaware of its existence would enter only traditional Protected mode.