Armazenamento de dois registros x86 de 32 bits em registro de 128 bits xmm
Pergunta
Existe algum método mais rápido para armazenar dois registros x86 de 32 bits em um registro de 128 bits xmm?
movd xmm0, edx
movd xmm1, eax
pshufd xmm0, xmm0, $1
por xmm0, xmm1
Portanto, se o EAX for 0x12345678 e o EDX for 0x87654321, o resultado no XMM0 deve ser 0x8765432112345678.
Obrigado
Solução
Com SSE 4.1 você pode usar movd xmm0, eax
/ pinsrd xmm0, edx, 1
e faça -o em 2 instruções.
Para CPUs mais antigas, você pode usar 2 x movd
e depois punpckldq
Para um total de 3 instruções:
movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
Outras dicas
Não sei muito sobre o MMX, mas talvez você queira a instrução PackSSDW.
A instrução PackSSDW pega as duas palavras duplas no operando de origem e as duas palavras duplas no operando de destino e as converte em quatro palavras assinadas por saturação. As instruções embalam essas quatro palavras e armazenam o resultado no registro MMX de destino.
(a partir de http://webster.cs.ucr.edu/aoa/windows/html/themxinstructionsetA2.html)
EDIT: Acabei de perceber que esses eram registros SSE. Ah bem.
EDIT: Vou calar a boca agora.