Share via


Derleyici Uyarısı (Düzey 1) C4730

'main' : _m64 ve kayan nokta ifadelerinin karıştırılması yanlış koda neden olabilir

İşlev __m64 ve float/double türleri kullanır. MMX ve kayan nokta yazmaçları aynı fiziksel yazmaç alanını paylaştığından (aynı anda kullanılamaz), ve float/double türlerinin aynı işlevde kullanılması __m64 veri bozulmasına neden olabilir ve büyük olasılıkla bir özel duruma neden olabilir.

Aynı işlevde türleri ve kayan nokta türlerini güvenli bir şekilde kullanmak __m64 için, türlerden birini kullanan her yönerge _m_empty() (MMX için) veya _m_femms() (3DNow!) iç yönergesi ile ayrılmalıdır.

Aşağıdaki örnek C4730 oluşturur:

// 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
}