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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top