سؤال

هل هناك طريقة أسرع لتخزين سجلتين 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. اوه حسنا.

تحرير: سأستخرج الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top