次の方法で共有


コンパイラの警告 (レベル 1) C4730

'main': _m64 と浮動小数点式を混用することで、正しくないコードが発生する可能性があります

関数は __m64 および float/double 型を使用します。 MMX レジスタと浮動小数点レジスタは同じ物理レジスタ スペースを共有するため (同時に使用することはできません)、同じ関数で __m64 および float/double 型を使用すると、データが破損し、例外が発生する可能性があります。

同じ関数で __m64 型と浮動小数点型を安全に使用するには、いずれかの型を使用する各命令を、 _m_empty() (MMX の場合) または _m_femms() (3DNow!) 組み込み関数で区切る必要があります。

次の例では C4730 が生成されます。

// C4730.cpp
// compile with: /W1
// processor: x86
#include "mmintrin.h"

void func(double)
{
}

int main(__m64 a, __m64 b)
{
   __m64 m;
   double f;
   f = 1.0;
   m = _m_paddb(a, b);
   // uncomment the next line to resolve C4730
   // _m_empty();
   func(f * 3.0);   // C4730
}