WMMX Technology Overview (Windows Embedded CE 6.0)
1/5/2010
Intel's wireless MMX (WMMX) technology is an extended implementation of the Intel architecture (IA) MMX instruction set. The technology uses a single-instruction, multiple-data (SIMD) technique to speed up multimedia and communications software by processing data elements in parallel.
The WMMX instruction set adds 57 opcodes and a 64-bit data type. In addition, there are sixteen 64-bit MMX technology registers, each of which can be directly addressed using the register names wR0 to wR15.
Additional information and details about the MMX instructions, data types, and registers can be found in the Intel Wireless MMX Technology Developer Guide, number 251793-001. This guide is available online at Intel hardware design.
New Registers
The WMMX technology intrinsic functions provide sixteen registers (wR0 to wR15) that are 64 bits long (0 to 63).
These new data registers enable the processing of data elements in parallel. Because each register can hold more than one data element, the processor can process more than one data element simultaneously. This processing capability is also known as SIMD processing. To enable SIMD processing with the C/C++ compiler, new data types are defined to exploit the expanded size of the new registers.
Using intrinsic functions allows you to code with the syntax of C function calls and variables instead of with the assembly language. For each computational and data manipulation instruction in the new extension sets, there is a corresponding C intrinsic that directly implements that instruction. This frees you from managing registers and assembly programming. Further, the compiler optimizes the instruction scheduling so that your executable runs faster.
__m64 data type
The __m64 data type is used to represent the contents of a WMMX register, which is the register used by the WMMX technology intrinsic functions. The __m64 data type can hold eight 8-bit values, four 16-bit values, two 32-bit values, or one 64-bit value.
New Data Types Usage Guidelines
The new __m64 data type is not a basic ANSI C data type, and therefore you must observe the following usage restrictions:
- Use __m64 only on the left side of an assignment as a return value or as a parameter. You cannot use it with other arithmetic expressions (" + ", " ", and so on).
- Use __m64 as objects in aggregates, such as unions, to access the byte elements and structures.
- Use __m64 only with the WMMX intrinsic functions.
Data Alignment
Many of the WMMX intrinsic functions have data alignment requirements. If these intrinsic functions are used and data is not appropriately aligned, the program will throw an exception that must be handled by the program; otherwise, the program will fault. To support the use of WMMX intrinsic functions, the user must take a more active role to guarantee that alignment issues are appropriately addressed.
For more information, see RISC Processor Data Alignment.