2012-01-30 12 views
6

कैसे परिवर्तित करें __int64 मान को __m64 एसएसई के साथ उपयोग के लिए मूल्य बदलने के लिए उचित तरीका क्या है?'long long' (या __int64) से __m64

उत्तर

6

जीसीसी के साथ आप सिर्फ _mm_set_pi64x उपयोग कर सकते हैं:

#include <mmintrin.h> 

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

ध्यान रखें कि सभी compilers _mm_set_pi64xmmintrin.h में परिभाषित किया गया है। जीसीसी के लिए यह इस तरह परिभाषित किया है:

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++, एक अंतिम उपाय के रूप में आप सिर्फ एक संघ का उपयोग करें और अपने स्वयं के आंतरिक लागू कर सकते हैं के रूप में एक बेहद picky संकलक के साथ फंस रहे हैं:

#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 

ध्यान दें कि यह कड़ाई से बोल रहा है यूबी है, क्योंकि हम एक संघ के एक संस्करण को लिख रहे हैं और दूसरे से पढ़ रहे हैं, लेकिन इसे इस उदाहरण में काम करना चाहिए।

+0

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

+0

'mmintrin.h' –

+0

http://pastebin.com/4bwAbbLZ पर एक नज़र डालें? – Mehrdad

संबंधित मुद्दे