Partager via


Avertissement du compilateur (niveau 1) C4730

'main' : la combinaison de _m64 et d’expressions à virgule flottante peut entraîner un code incorrect

Une fonction utilise __m64 et float/double types. Étant donné que les registres MMX et à virgule flottante partagent le même espace d’enregistrement physique (ne peuvent pas être utilisés simultanément), l’utilisation __m64 et float/double les types dans la même fonction peuvent entraîner une altération des données, ce qui peut entraîner une exception.

Pour utiliser __m64 en toute sécurité les types et les types à virgule flottante dans la même fonction, chaque instruction qui utilise l’un des types doit être séparée par l’intrinsèque _m_empty() (pour MMX) ou _m_femms() (pour 3DNow !) intrinsèque.

L’exemple suivant génère l’erreur 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
}