インテル® C++ コンパイラー 18.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()); |