Там какой-либо более быстрый метод должен сохранить два 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 x movd
, а затем punpckldq
, всего 3 инструкции:
movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
Я не очень много знаю о MMX, но, возможно, вам нужна инструкция PACKSSDW.
Инструкция PACKSSDW берет два двойных слова в исходном операнде и два двойных слова в операнде назначения и преобразует их в четыре знаковых слова с помощью насыщения. Инструкция упаковывает эти четыре слова вместе и сохраняет результат в регистр MMX назначения.
(из http://webster.cs.ucr.edu/AoA/Windows/HTML/TheMMXInstructionSeta2.html)
Edit: I just realized that those were SSE registers. Ну что ж.
Edit: Теперь я собираюсь заткнуться.