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
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour