Question

Existe-t-il une méthode plus rapide pour stocker deux registres x86 32 bits dans un registre XMM 128 bits?

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

Donc, si EAX est 0x12345678 et EDX est 0x87654321, le résultat en XMM0 doit être 0x8765432112345678.

Merci

Était-ce utile?

La solution

Avec SSE 4.1, vous pouvez utiliser movd xmm0, eax / pinsrd xmm0, edx, 1 Et faites-le en 2 instructions.

Pour les CPU plus anciens, vous pouvez utiliser 2 x movd et alors punpckldq Pour un total de 3 instructions:

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

Autres conseils

Je ne sais pas grand-chose sur MMX, mais peut-être que vous voulez l'instruction PackSSDW.

L'instruction PackSSDW prend les deux doubles mots de l'opérande source et les deux doubles mots de l'opérande de destination et les convertissent en quatre mots signés par saturation. L'instruction rassemble ces quatre mots et stocke le résultat dans le registre MMX de destination.

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

Edit: Je viens de réaliser que c'était des registres SSE. Tant pis.

Edit: Je vais me taire maintenant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top