Microsoft Specific
These guidelines help you determine when to use the EMMS instruction:
- If the next instruction is a floating-point instruction, use _mm_empty after an MMX instruction (for example, before doing calculations on floats, doubles, or long doubles). 
- Don't empty when already empty. If the next instruction uses an MMX register, _mm_empty incurs an operation with no benefit (no-op). 
- Use different functions for regions that use floating-point instructions and those that use MMX instructions. This eliminates needing an EMMS instruction within the body of a critical loop. 
- Use _mm_empty during run-time initialization of __m64 and FP data types. This ensures resetting the register between data type transitions. See usage coding in the following example. 
Correct EMMS Usage in Initialization Code
| Incorrect usage | Correct usage | 
|---|---|
|  |  | 
Further, you must be aware of all situations when your code generates an MMX instruction:
- When using an MMX intrinsic. 
- When using the Streaming SIMD Extensions (for those intrinsics that use MMX data). 
- When using an MMX instruction through inline assembly. 
- When referencing an __m64 data type variable. 
For more documentation on EMMS, refer to the Intel documentation.
MMX intrinsics use the __m64 data type, which is not supported on x64 processors.