インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド
次に、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) が行われます。
次の表の正しい使用方法と誤った使用方法のコーディング例を参照してください。
誤った使用例 |
正しい使用例 |
---|---|
__m64 x = _m_paddd(y, z); float f = init(); |
__m64 x = _m_paddd(y, z); float f = ( _mm_empty(), init()); |