Partilhar via


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
}