2012-04-25 17 views
9

के बिना जीसीसी के साथ एसएसई निर्देशों का उपयोग करना मुझे जीसीसी के साथ x86-64 के एसएसई वेक्टर निर्देशों का उपयोग करने में दिलचस्पी है और इसके लिए किसी भी इनलाइन असेंबली का उपयोग नहीं करना चाहते हैं। क्या सी में ऐसा कोई तरीका है? यदि हां, तो क्या कोई मुझे एक उदाहरण दे सकता है?बिना किसी असेंबली

उत्तर

15

हां, आप * mmintrin.h हेडर (emmintrin.h, xmmintrin.h, आदि) में अंतर्निहित एसएसई के आधार पर इंट्रिनिक्स का उपयोग कर सकते हैं, जो आप उपयोग करना चाहते हैं)। आम तौर पर कई कारणों से असेंबलर का उपयोग करना बेहतर होता है।

#include <emmintrin.h> 

int main(void) 
{ 
    __m128i a = _mm_set_epi32(4, 3, 2, 1); 
    __m128i b = _mm_set_epi32(7, 6, 5, 4); 
    __m128i c = _mm_add_epi32(a, b); 

    // ... 

    return 0; 
} 

ध्यान दें कि यह दृष्टिकोण विभिन्न प्लेटफ़ॉर्म पर अधिकांश x86 और x86-64 संकलक के लिए काम करता है, उदाहरण के लिए जीसीसी, क्लैंग और इंटेल के आईसीसी पर लिनक्स/मैक ओएस एक्स/विंडोज़ और यहां तक ​​कि माइक्रोसॉफ्ट के विजुअल सी/सी ++ (केवल विंडोज़)।

+0

क्या यह जीसीसी या वीसी ++ के लिए है? – pythonic

+4

दोनों जीसीसी और वीसी ++ इंट्रिनिक्स का समर्थन करते हैं। –

+0

एफटीडब्लू, आईसीसी इन इंट्रिनिक्स का भी समर्थन करता है – hroptatyr

4

अपने जीसीसी में *intrin.h शीर्षलेख खोजें (/usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/include/ यहां)।

शायद ध्यान देने योग्य, हेडर immintrin.h में आपके द्वारा अनुमति देने वाली सुविधाओं के अनुसार अन्य सभी अंतर्निहित शामिल हैं (उदाहरण के लिए -msse2 या -mavx का उपयोग करके)।

4

आप जो चाहते हैं intrinsics, जो लाइब्रेरी फ़ंक्शंस की तरह दिखते हैं लेकिन वास्तव में संकलक में बनाए जाते हैं ताकि वे विशिष्ट मशीन कोड में अनुवाद कर सकें।

पॉल आर और hroptatyr वर्णन जीसीसी के दस्तावेज कहां मिलना है। Microsoft also has good documentation on the intrinsics in their compiler; भले ही आप जीसीसी का उपयोग कर रहे हों, आप विचार के एमएस 'विवरण को एक बेहतर ट्यूटोरियल पा सकते हैं।

+0

एआरएम आर्किटेक्चर के बारे में क्या? क्या यह नीयन सिम का समर्थन करता है? या यह केवल x86 के लिए है? – enthusiasticgeek

+1

@enthusiasticgeek प्रश्न x86-64 निर्दिष्ट करता है। एआरएम और नीयन के पास अपने स्वयं के कंपाइलर और स्वयं के अंतर्निहित हैं। – Crashworks