के साथ 32 बिट मान को घुमाया गया है, मैं 128 बिट रजिस्टर से प्रभावी तरीके से 4 बाइट निकालने का प्रयास कर रहा हूं। समस्या यह है कि प्रत्येक मान एक अलग 32 बिट {120,0,0,0,55,0,0,0,42,0,0,0,120,0,0,0}
में है। मैं 128 बिट से 32 बिट को फॉर्म {120,55,42,120}
रूपांतरित करना चाहता हूं।एसएसई निकालने के लिए केवल एसएसई 2
"कच्चे" कोड ऐसा दिखाई देता है:
__m128i byte_result_vec={120,0,0,0,55,0,0,0,42,0,0,0,120,0,0,0};
unsigned char * byte_result_array=(unsigned char*)&byte_result_vec;
result_array[x]=byte_result_array[0];
result_array[x+1]=byte_result_array[4];
result_array[x+2]=byte_result_array[8];
result_array[x+3]=byte_result_array[12];
मेरे SSSE3 कोड है:
unsigned int * byte_result_array=...;
__m128i byte_result_vec={120,0,0,0,55,0,0,0,42,0,0,0,120,0,0,0};
const __m128i eight_bit_shuffle_mask=_mm_set_epi8(1,1,1,1,1,1,1,1,1,1,1,1,0,4,8,12);
byte_result_vec=_mm_shuffle_epi8(byte_result_vec,eight_bit_shuffle_mask);
unsigned int * byte_result_array=(unsigned int*)&byte_result_vec;
result_array[x]=byte_result_array[0];
मैं SSE2 के साथ इस कुशलता से कैसे कर सकते। एसएसएसई 3 या एसएसई 4 के साथ कोई बेहतर संस्करण है?
यह एक सही जवाब है। मैं इसे दो बार कैसे बढ़ा सकता हूं? :) इसने मेरी बहुत मदद की। क्या आपको एसएसई 4 के साथ बेहतर तरीका पता है? –
@ मार्टिन: एसएसएसई 3 और अधिक के साथ, आप बस एक पीएसएचयूएफबी चाहते हैं (जो आपके मौजूदा कोड को संकलित करना चाहिए)। –
@ मार्टिन मैं एसएसई> 2 में अच्छी तरह से ज्ञात नहीं हूं, शायद मैं इसे देखने की कोशिश करूंगा। –