2012-01-30 22 views

cevap

6

gcc ile sadece _mm_set_pi64x kullanabilirsiniz: tüm derleyiciler _mm_set_pi64xmmintrin.h tanımlanan sahip

#include <mmintrin.h> 

__int64 i = 0x123456LL; 
__m64 v = _mm_set_pi64x(i); 

Not. gcc için böyle tanımladı: Eğer örneğin tercih ediyorsanız muhtemelen sadece döküm kullanabilirsiniz düşündürmektedir

extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 
_mm_set_pi64x (long long __i) 
{ 
    return (__m64) __i; 
} 

Başarısız

__int64 i = 0x123456LL; 
__m64 v = (__m64)i; 

ki böyle sadece bir birlik kullanabilir ve içsel kendi uygulayabileceğiniz son çare olarak, Visual C/C++ gibi bir aşırı seçici derleyici ile takılıp:

#ifdef _MSC_VER // if Visual C/C++ 
__inline __m64 _mm_set_pi64x (const __int64 i) { 
    union { 
     __int64 i; 
     __m64 v; 
    } u; 

    u.i = i; 
    return u.v; 
} 
#endif 

Kesinlikle bunun bir konuşma olduğunu ve bir başka birinden okuduğumuzdan, bunun bu örnekte çalışması gerektiğinden, bunun UB olduğunu unutmayın.

+0

Huh? https://www.google.com/search?q=_mm_set_pi64 – Mehrdad

+0

'mmintrin.h' –

+0

http://pastebin.com/4bwAbbLZ? – Mehrdad