2010-04-11 14 views
10

यह विशेष रूप से एआरएम नियॉन सिम कोडिंग से संबंधित है। मैं एक वीडियो डिकोडर में कुछ मॉड्यूल के लिए एआरएम नियॉन इंस्टीटिक्स का उपयोग कर रहा हूं। मेरे पास एक वेक्टरकृत डेटा निम्नानुसार है:मैं एआरएम नियॉन इंट्रिनिक्स का उपयोग कर वेक्टर डेटा को पुन: व्यवस्थित कैसे करूं?

नियॉन रजिस्टर में चार 32 बिट तत्व हैं - कहें, Q0 - जो 128 बिट आकार का है।

3B 3A 1B 1A 

एक और चार अन्य नियॉन रजिस्टर में 32 बिट तत्वों Q1 आकार 128 बिट की है जो कहते हैं कि कर रहे हैं।

1D 1C 1B 1A 
3D 3C 3B 3A 

क्या नियॉन instrinsics वांछित डेटा आदेश प्राप्त कर सकते हैं:

3D 3C 1D 1C 

मैं जैसा कि नीचे दिखाया अंतिम डेटा क्रम में बनना चाहते हो?

+0

अंतिम डेटा ऑर्डर में टाइपो? '3 डी 3 सी 3 बी 3 ए' होना चाहिए? –

+0

@ पॉल आर: धन्यवाद, इसे सही किया। – goldenmean

उत्तर

9

कैसे कुछ इस तरह के बारे में:

int32x4_t q0, q1; 

    /* split into 64 bit vectors */ 
    int32x2_t q0_hi = vget_high_s32 (q0); 
    int32x2_t q1_hi = vget_high_s32 (q1); 
    int32x2_t q0_lo = vget_low_s32 (q0); 
    int32x2_t q1_lo = vget_low_s32 (q1); 

    /* recombine into 128 bit vectors */ 
    q0 = vcombine_s32 (q0_lo, q1_lo); 
    q1 = vcombine_s32 (q0_hi, q1_hi); 

सिद्धांत रूप में यह सिर्फ दो कदम निर्देशों के संकलन चाहिए क्योंकि vget_high और vget_low सिर्फ दो 64 बिट डी रजिस्टरों के रूप में 128 बिट क्यू रजिस्टरों पुनर्व्याख्या। vcombine otoh सिर्फ एक या दो चालों तक संकलित होता है (रजिस्टर आवंटन पर निर्भर करता है)।

ओह - और आउटपुट में पूर्णांक का क्रम बिल्कुल गलत तरीका हो सकता है। यदि ऐसा है तो तर्कों को vcombine_s32 पर स्वैप करें।

3

ऐसा लगता है कि आप VTRN निर्देश (उदा। vtrnq_u32) का उपयोग करने में सक्षम होना चाहिए।

+0

@ पॉल: vtrnq_u32 मदद नहीं करता है। दरअसल मुझे VTRN.64 जैसे कुछ करने की ज़रूरत है, लेकिन दुख की बात है कि VTRN.64 की तरह कोई निर्देश/आंतरिक नहीं है। – goldenmean

+0

@goldenmean: क्षमा करें - मुझे लगता है कि अब आप क्या मतलब है - नीयन सामान्य उद्देश्य परमिट/शफल ऑपरेशंस से कम प्रतीत होता है। –

+0

लिंक नीचे है ... – Antonio

4

याद रखें प्रत्येक क्यू रजिस्टर दो डी रजिस्टरों से बना है, उदाहरण के लिए q0 का निम्न भाग डी 0 और उच्च भाग डी 1 है। तो वास्तव में, यह ऑपरेशन सिर्फ डी 0 और डी 3 (या डी 1 और डी 2) को स्वैप कर रहा है, यह आपकी डेटा प्रस्तुति से पूरी तरह स्पष्ट नहीं है)। एक निर्देश में इसे करने के लिए एक स्वैप निर्देश भी है!

अस्वीकरण: मुझे नियॉन इंट्रिनिक्स (मैं सीधे असेंबली में कोड) नहीं जानता, हालांकि मुझे आश्चर्य होगा अगर यह इंट्रिनिक्स का उपयोग करके नहीं किया जा सका।

2

पियरे सही है।

बनाम डी 0, डी 3

जो करेगा।

@Pierre: मैंने कई महीने पहले आपके ब्लॉग पर नीयन के बारे में पोस्ट पढ़ा था। मैं सुखद आश्चर्यचकित था कि मेरे जैसे कोई व्यक्ति था - एआरएम और नीयन दोनों हाथ से अनुकूलित असेंबली कोड लिखना। आपको देखकर अच्छा लगा।