2012-01-30 9 views

答えて

6

あなただけ_mm_set_pi64xを使用することができますないすべてのコンパイラがmmintrin.h_mm_set_pi64xが定義されていること

#include <mmintrin.h> 

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

注意。ご希望の場合は、おそらく、例えば、キャストを使用することができることを示唆して

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

:gccのために、それは次のように定義されています

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

あなたは、あなただけの組合を使用して、独自の固有を実装することができ、最後の手段として、そのようなビジュアルC/C++のように過度にうるさいコンパイラで立ち往生している場合は、それに失敗:

#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 

厳密に言えば、これはUBです。なぜなら、私たちは組合の一変形に別のものを書いていて、別のものから読んでいるからです。しかし、この例ではうまくいくはずです。

+0

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

+0

'mmintrin.h'を見てください –

+0

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

関連する問題