コンパイラの警告 (レベル 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
}