Codex Gamicus
Basic Information

MMX was a set of SIMD multimedia instructions developed by Intel Corporation that enabled enhanced performance for applications coded to support it. It has been implemented in all Intel processors since the Pentium MMX, and all AMD processors since the AMD K6.

MMX was initially rumoured to stand for MultiMedia eXtensions or Multiple Math eXtension, but officially it is a meaningless initialism trademarked by Intel.

To simplify the design, and to avoid modifying the operating system to preserve additional state through context switches, MMX re-uses the existing eight IA-32 FPU registers. This made it difficult to work with floating-point and SIMD data at the same time. To maximize performance, programmers must use the processor exclusively in one mode or the other, deferring the relatively slow switch between them as long as possible.

Another problem for MMX was that it only provided integer operations. Each of the eight 64-bit MMX vector registers, aliased on the eight existing floating point registers, could represent two 32-bit integers, four 16-bit short integers, or eight 8-bit chars. When MMX was originally developed, the use of vectored-integer operations made sense (both 2D and 3D setup required it), but as systems moved to utilize graphics cards for this work, MMX fell out of favour and vectored floating-point operations became much more important.

Intel later addressed these shortcomings with SSE, a greatly expanded set of SIMD instructions with 32-bit floating-point support and an additional set of 128-bit vector registers that made it easier to perform SIMD and FPU operations at the same time.

Intel's main competitor, AMD, built upon MMX with their 3DNow! instruction sets while another competitor, Cyrix, developed their own version of MMX; instead of directly copying Intel's MMX (as AMD were allowed to do due to their cross-license patent agreement with Intel), they reverse-engineered the MMX instruction set, with the intention of extending it, much like AMD did. The end result was called Cyrix MMX.

Intel's development of SSE2 rendered MMX effectively obsolete, although MMX continues to still be supported in Intel processors for software specifically optimized for it that do not take advantage of SSE2.