2010-02-09 5 views
9

क्या एक 128 बिट xmm रजिस्टर में दो x86 32 बिट रजिस्टरों को स्टोर करने के लिए कोई तेज विधि है?128 बिट xmm रजिस्टर में दो x86 32 बिट रजिस्टरों को संग्रहीत करना

movd xmm0, edx 
    movd xmm1, eax 
    pshufd xmm0, xmm0, $1 
    por xmm0, xmm1 

तो अगर EAX 0x12345678 है और EDX है 0x87654321 xmm0 में परिणाम 0x8765432112345678 होना चाहिए।

धन्यवाद

+0

वाह! यह एक अच्छा असेंबलर है ... आखिरी बार मैंने 32 बिट देखा था ... नहीं पता था कि आप एक 128 बिट पीसी खरीद सकते हैं ...: पी :) – t0mm13b

+0

स्ट्रीमिंग सिम एक्सटेंशन (एसएसई) x86 आर्किटेक्चर के लिए एक सिमड निर्देश सेट एक्सटेंशन है , इंटेल द्वारा डिज़ाइन किया गया और 1 999 में पेश किया गया। –

+3

एसएसई निर्देश सेट संस्करण के लिए क्या अनुमति है? – PhiS

उत्तर

15

एसएसई 4.1 के साथ आप movd xmm0, eax/pinsrd xmm0, edx, 1 का उपयोग कर सकते हैं और इसे 2 निर्देशों में कर सकते हैं।

पुराने सीपीयू के लिए आप 3 निर्देश के लिए कुल 2 एक्स movd और फिर punpckldq उपयोग कर सकते हैं:

movd xmm0, edx 
movd xmm1, eax 
punpckldq xmm0, xmm1 
+0

धन्यवाद। लेकिन 2007 के बाद से यह अपेक्षाकृत नया एक्सटेंशन सेट है और गति और कोड आकार लगभग समान है। –

+2

ठीक है - अब एसएसई 2/एसएसई 3 के लिए 3 निर्देश अनुक्रम जोड़ा है। –

+1

सुपर ... मुझे यही चाहिए! धन्यवाद। –

1

मैं MMX के बारे में ज्यादा पता नहीं है, लेकिन शायद आप PACKSSDW अनुदेश चाहते हैं।

PACKSSDW अनुदेश गंतव्य संकार्य में दो स्रोत संकार्य में डबल शब्द और दो डबल शब्द लेता है और संतृप्ति के माध्यम से इन चार पर हस्ताक्षर किए शब्द बदल देता है। निर्देश इन चार शब्दों को एक साथ पैक करता है और परिणाम गंतव्य MMX रजिस्टर में संग्रहीत करता है।

(http://webster.cs.ucr.edu/AoA/Windows/HTML/TheMMXInstructionSeta2.html से)

संपादित करें: मैं सिर्फ महसूस किया कि उन SSE पंजीकृत करता थे। ओह अच्छा।

संपादित करें: मैं अभी बंद करने जा रहा हूं।

+0

मुझे xmm रजिस्टर्स बजाय एमएमएक्स (64 बिट) पसंद है क्योंकि उन्हें इसका उपयोग करने के बाद 'emms' निर्देश की आवश्यकता नहीं है। –

+0

हां, संभवतः समर्पित रजिस्टरों के साथ अच्छा .. –

+0

+1 अभी बंद करने के लिए :-) – hirschhornsalz

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