2010-06-28 18 views
5

मैं 2 डी घुमाव के लिए एक SSE कोड लिख रहा हूँ, लेकिन SSE प्रलेखन बहुत विरल है का उपयोग कर के लिए एक हेक्स नाव कन्वर्ट करने के लिए। मैं _mm_dp_ps साथ डॉट उत्पाद की गणना कर रहा हूँ और _mm_extract_ps का उपयोग कर डॉट उत्पाद परिणाम प्राप्त करने के लिए, लेकिन एक हेक्स कि एक नाव का प्रतिनिधित्व करता है _mm_extract_ps वापस आती है और मैं समझ नहीं कैसे एक नियमित रूप से नाव को यह हेक्स नाव कन्वर्ट करने के लिए। मैं __builtin_ia32_vec_ext_v4sf का उपयोग कर सकता हूं जो एक फ्लोट देता है लेकिन मैं दूसरों के कंपाइलर्स के साथ संगतता रखना चाहता हूं।कैसे C/C++ एक नाव _mm_extract_ps SSE जीसीसी instrinc समारोह

_mm_extract_ps (__m128 __X, const int __N) 
{ 
    union { int i; float f; } __tmp; 
    __tmp.f = __builtin_ia32_vec_ext_v4sf ((__v4sf)__X, __N); 
    return __tmp.i; 
} 

मुझे किस बिंदु पर याद आ रही है?

एक छोटी सी मदद की सराहना की जाएगी, धन्यवाद।

OpenSUSE 11.2
जीसीसी 4.4.1
सी ++
संकलक विकल्प
-fopenmp -Wall -O3 -msse4.1 मार्च = core2
लिंकर विकल्पों
-lgomp -Wall -O3 -msse4। 1-मार्च = कोर 2

उत्तर

5

आपको _MM_EXTRACT_FLOAT का उपयोग करने में सक्षम होना चाहिए।

संयोग से यह मेरे लिए लगता है जैसे _mm_extract_ps और _MM_EXTRACT_FLOAT दूसरी तरह के आसपास होना चाहिए, जैसे _mm_extract_ps एक नाव लौटना चाहिए और _MM_EXTRACT_FLOAT पूर्णांक प्रतिनिधित्व लौटना चाहिए, लेकिन मैं क्या जानते हो।

+2

मैंने यह भी सोचा। –

+0

मुझे लगता है कि इंटेल इंटेलिजेंट को उनके दस्तावेज़ीकरण में निर्देश का वर्णन करता है, जो कि त्रुटि हो सकती है या नहीं भी हो सकती है - जीसीसी हेडर दस्तावेज़ों में बस क्या लागू करते हैं। –

1

_mm_cvtss_f32(_mm_shuffle_ps(__X, __X, __N)) काम करेगा।

0

extern शून्य _mm_store_ss (नाव *, __m128);

देखें 'xmmintrin.h।'

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