Intel processors provide special register sets. The MMX instructions use eight 64-bit registers (mm0 to mm7) which are aliased on the floating-point stack registers.
Because each of these registers can hold more than one data element, the processor can process more than one data element simultaneously. This processing capability is also known as single-instruction multiple data processing (SIMD).
For each computational and data manipulation instruction in the new extension sets, there is a corresponding C intrinsic that implements that instruction directly. This frees you from managing registers and assembly programming. Further, the compiler optimizes the instruction scheduling so that your executable runs faster.
The MM and XMM registers are the SIMD registers used by the IA-32 architecture-based platforms to implement MMX™ technology and SSE or SSE2 intrinsics. On the IA-64 architecture, the MMX™ and SSE intrinsics use the 64-bit general registers and the 64-bit significand of the 80-bit floating-point register.
Intrinsic functions use four new C data types as operands, representing the new registers that are used as the operands to these intrinsic functions.
The __m64 data type is used to represent the contents of an MMX register, which is the register that is used by the MMX technology intrinsics. The __m64 data type can hold eight 8-bit values, four 16-bit values, two 32-bit values, or one 64-bit value.
These data types are not basic ANSI C data types. You must observe the following usage restrictions:
Use data types only on either side of an assignment, as a return value, or as a parameter. You cannot use it with other arithmetic expressions (+, -, etc).
Use data types as objects in aggregates, such as unions, to access the byte elements and structures.
Use data types only with the respective intrinsics described in this documentation.