Compartir a través de


Advertencia del compilador (nivel 1) C4730

'main': la combinación de expresiones de punto flotante y _m64 puede dar lugar a código incorrecto

Una función usa los tipos __m64 y float/double. Dado que los registros MMX y de punto flotante comparten el mismo espacio de registro físico (no se puede usar simultáneamente), el uso de los tipos __m64 y float/double de la misma función pueden provocar daños en los datos, lo que puede provocar una excepción.

Para usar los tipos de __m64 de forma segura y tipos de punto flotante en la misma función, cada instrucción que use uno de los tipos debe estar separado por el _m_empty() (para MMX) o _m_femms() (para 3DNow!) intrínseco.

El ejemplo siguiente genera 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
}