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