編譯器警告 (層級 1) C4730
'main' :混合_m64和浮點表達式可能會導致不正確的程序代碼
函式會使用 __m64 和 float
/double
型別。 由於MMX和浮點緩存器會共用相同的實體緩存器空間(無法同時使用),因此使用 __m64
float
/double
和相同函式中的型別可能會導致數據損毀,因而造成例外狀況。
若要在相同的函式中安全地使用__m64
類型和浮點類型,使用其中一種類型的每個指令都應該以 _m_empty() 或 _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
}