次に、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) が行われます。
IA-64 アーキテクチャー・ベースのシステム上では使用しないでください。EMMS 組み込み関数がサポートされている場合でも、IA-64 アーキテクチャー・ベースのシステム上には、MMX® 命令やインテル® SSE 用の特殊なレジスター (またはオーバーレイ) はありません。
次の表の正しい使用方法と誤った使用方法のコーディング例を参照してください。
誤った使用例 |
正しい使用例 |
---|---|
__m64 x = _m_paddd(y, z); float f = init(); |
__m64 x = _m_paddd(y, z); float f = (_mm_empty(), init()); |