Pregunta

¿Hay algún método más rápido para almacenar dos registros X86 de 32 bits en un registro XMM de 128 bits?

  movd  xmm0, edx
  movd  xmm1, eax
  pshufd xmm0, xmm0, $1
  por   xmm0, xmm1 

Entonces, si EAX es 0x12345678 y EDX es 0x87654321, el resultado en XMM0 debe ser 0x8765432112345678.

Gracias

¿Fue útil?

Solución

Con SSE 4.1 puedes usar movd xmm0, eax / pinsrd xmm0, edx, 1 y hazlo en 2 instrucciones.

Para las CPU más antiguas puedes usar 2 x movd y entonces punpckldq Para un total de 3 instrucciones:

movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1

Otros consejos

No sé mucho sobre MMX, pero tal vez quieras la instrucción PacksSDW.

La instrucción PACKSSDW toma las dos palabras dobles en el operando de origen y las dos palabras dobles en el operando de destino y las convierte en cuatro palabras firmadas por saturación. La instrucción une estas cuatro palabras juntas y almacena el resultado en el registro de destino MMX.

(de http://webster.cs.ucr.edu/aoa/windows/html/themmxinstructionseta2.html)

EDITAR: Me acabo de dar cuenta de que esos eran registros de SSE. Oh bien.

Editar: me voy a callar ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top