2012-01-30 3 views

답변

6

GCC와 함께 당신은 _mm_set_pi64x을 사용할 수 있습니다 : 모든 컴파일러 _mm_set_pi64xmmintrin.h에 정의되어

#include <mmintrin.h> 

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

참고. gcc의 경우 다음과 같이 정의됩니다.

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

이렇게하면 원하는 경우에만 캐스트를 사용할 수 있습니다. 실패

__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

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

+0

'mmintrin.h'을보십시오 –

+0

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

관련 문제