Aviso C4730 (compilador) (nível 1)
'main': misturar _m64 e expressões de ponto flutuante pode resultar em código incorreto
Uma função usa __m64 e tipos de float
/double
. Como os registros MMX e ponto flutuante compartilham o mesmo espaço de registro físico (não podem ser usados simultaneamente), usar __m64
e os tipos de float
/double
na mesma função pode resultar em corrupção de dados, possivelmente causando uma exceção.
Para usar tipos de __m64
com segurança e tipos de ponto flutuante na mesma função, cada instrução que usa um dos tipos deve ser separada pelo_m_empty() (para MMX) ou _m_femms() (para 3DNow!) intrínseco.
O exemplo a seguir gera o aviso 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
}