Хранение двух 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.

Спасибо

9
задан GJ. 13 July 2011 в 12:09
поделиться

2 ответа

С SSE 4.1, вы можете использовать movd xmm0, eax / pinsrd xmm0, edx, 1 и сделать это в двух инструкциях.

Для старых процессоров вы можете использовать 2 x movd , а затем punpckldq , всего 3 инструкции:

movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
15
ответ дан 4 December 2019 в 13:01
поделиться

Я не очень много знаю о MMX, но, возможно, вам нужна инструкция PACKSSDW.

Инструкция PACKSSDW берет два двойных слова в исходном операнде и два двойных слова в операнде назначения и преобразует их в четыре знаковых слова с помощью насыщения. Инструкция упаковывает эти четыре слова вместе и сохраняет результат в регистр MMX назначения.

(из http://webster.cs.ucr.edu/AoA/Windows/HTML/TheMMXInstructionSeta2.html)

Edit: I just realized that those were SSE registers. Ну что ж.

Edit: Теперь я собираюсь заткнуться.

1
ответ дан 4 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: