تخزين سجلتين X86 32 بت في سجل 128 بت XMM
سؤال
هل هناك طريقة أسرع لتخزين سجلتين X86 32 بت في سجل واحد 128 بت xmm؟
movd xmm0, edx
movd xmm1, eax
pshufd xmm0, xmm0, $1
por xmm0, xmm1
لذلك إذا كان EAX هو 0x12345678 و EDX هو 0x87654321 يجب أن تكون النتيجة في xmm0 0x8765432112345678.
شكرا
المحلول
مع SSE 4.1 يمكنك استخدام movd xmm0, eax
/ pinsrd xmm0, edx, 1
وتفعل ذلك في 2 تعليمات.
بالنسبة لمعالجة وحدات المعالجة المركزية القديمة، يمكنك استخدام 2 س movd
وثم punpckldq
للحصول على ما مجموعه 3 تعليمات:
movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
نصائح أخرى
لا أعرف الكثير عن MMX، ولكن ربما تريد تعليمات العبوات.
تأخذ تعليمات PacksSDW الكلمات المزدوجة في المعامل المصدر والكلمتين المزدجين في معامل الوجهة وتحويل هذه إلى أربعة كلمات موقعة عبر التشبع. حزم التعليمات هذه الكلمات الأربع معا وتخزين النتيجة في سجل MMX الوجهة.
(من http://webster.cs.ucr.edu/aoa/windows/html/themmxinstructionseta2.html.)
تحرير: لقد أدركت فقط أن تلك كانت سجلات SSE. اوه حسنا.
تحرير: سأستخرج الآن.