インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
次に、EMMS を使用する際のガイドラインを示します。
MMX® 命令の後に浮動小数点 (FP) 命令を実行する場合は、その前に _mm_empty() を使用してください。 例えば、float、double、または long double 型の計算を実行する前に EMMS を使用します。 MMX® 命令を生成するコードでは、次のすべての状況に注意してください。
MMX® テクノロジー組込み関数を使用する場合
__m64 データ型を使用する、インテル® ストリーミング SIMD 拡張命令 (インテル® SSE) の整数組込み関数を使用する場合
__m64 データ型の変数を参照する場合
インライン・アセンブリーによって MMX® 命令を使用する場合
浮動小数点命令を使用する操作と MMX® 命令を使用する操作は、別々の関数に分けてください。そうすれば、性能に大きな影響を及ぼすループの中で、マルチメディア・ステートを空にする必要はありません。
実行時に __m64 および FP データ型を初期化するときは、_mm_empty() を使用してください。 これによって、データ型が切り替わる間に、レジスターが確実にリセットされます。
MMX® 命令の前に _mm_empty() を使用しないでください。MMX® 命令の前に _mm_empty() を使用すると、何のメリットもない操作 (no-op) が行われます。
次の表の正しい使用方法と誤った使用方法のコーディング例を参照してください。