2011-08-26 8 views
11

मुझे कुछ इंटेल एसएसई संचालन के नियॉन समकक्ष को समझने में कुछ परेशानी हो रही है। ऐसा लगता है कि नियॉन एक बार पूरे क्यू रजिस्टर को संभालने में सक्षम नहीं है (128 बिट मूल्य डेटा प्रकार)। मुझे arm_neon.h शीर्षलेख में या NEON intrinsics reference में कुछ भी नहीं मिला है।नीयन बनाम इंटेल एसएसई - कुछ परिचालनों के समतुल्य

मुझे क्या करना चाहते हैं निम्नलिखित है:

// Intel SSE 
// shift the entire 128 bit value with 2 bytes to the right; this is done 
// without sign extension by shifting in zeros 
__m128i val = _mm_srli_si128(vector_of_8_s16, 2); 
// insert the least significant 16 bits of "some_16_bit_val" 
// the whole thing in this case, into the selected 16 bit 
// integer of vector "val"(the 16 bit element with index 7 in this case) 
val = _mm_insert_epi16(val, some_16_bit_val, 7); 

मैं नियोन द्वारा प्रदान की स्थानांतरण आपरेशन को देखा है, लेकिन (ऊपर कर के समतुल्य तरह से मैं ज्यादा अनुभव नहीं है नहीं पा सके नीयन के साथ)। क्या उपर्युक्त करना संभव है (मुझे लगता है कि यह मुझे नहीं पता कि कैसे)? किसी भी पॉइंटर्स की बहुत सराहना की।

उत्तर

6

आप VEXT निर्देश चाहते हैं। आपका उदाहरण कुछ ऐसा दिखाई देगा:

int16x8_t val = vextq_s16(vector_of_8_s16, another_vector_s16, 1); 

इस के बाद, बिट्स val की 0-111 vector_of_8_s16 की 16-127 बिट्स में शामिल होंगे, और बिट्स val की 112-127 बिट्स another_vector_s16 की 0-15 शामिल होंगे।

+0

मैंने वास्तव में इसे पहले से ही लागू किया है। क्या आपके लिए एक उदाहरण प्रदान करना संभव होगा ताकि मैं अपना दृष्टिकोण मान्य कर सकूं? – celavek

+0

ने vtbl और vtbx के बारे में अपना उत्तर हटा दिया। vext जाने का रास्ता है! –

+0

@celavek: मैंने एक उदाहरण प्रदान किया है, लेकिन आपके दृष्टिकोण को सत्यापित करने का तरीका इसका परीक्षण करके है, इसे किसी उदाहरण से तुलना करके नहीं। यह या तो काम करता है या नहीं करता है। –

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

  • कोई संबंधित समस्या नहीं^_^