Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

Guidelines for When to Use EMMS

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
__m64 x = _m_paddd(y, z);
float f = init();
__m64 x = _m_paddd(y, z);
float f = (_mm_empty(), init());

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, see http://developer.intel.com.

END Microsoft Specific

See Also

MMX Technology | MMX Technology General Support Intrinsics

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.