Speichern Sie zwei x86 32 -Bit -Register in 128 -Bit -XMM -Register
Frage
Gibt es eine schnellere Methode, um zwei x86 32 -Bit -Register in einem 128 -Bit -XMM -Register zu speichern?
movd xmm0, edx
movd xmm1, eax
pshufd xmm0, xmm0, $1
por xmm0, xmm1
Wenn also EAX 0x12345678 und EDX 0x87654321 ist, muss das Ergebnis in XMM0 0x8765432112345678 sein.
Vielen Dank
Lösung
Mit SSE 4.1 können Sie verwenden movd xmm0, eax
/ pinsrd xmm0, edx, 1
und machen Sie es in 2 Anweisungen.
Für ältere CPUs können Sie 2 x verwenden movd
und dann punpckldq
Für insgesamt 3 Anweisungen:
movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
Andere Tipps
Ich weiß nicht viel über MMX, aber vielleicht möchten Sie die Packssdw -Anweisung.
Die PacksSDW -Anweisung nimmt die beiden Doppelwörter im Quelloperanden und die beiden Doppelwörter im Zieloperanden auf und wandelt diese über die Sättigung in vier signierte Wörter um. Die Anweisung packt diese vier Wörter zusammen und speichert das Ergebnis im Ziel MMX -Register.
(aus http://webster.cs.ucr.edu/aoa/windows/html/themmxinstructionseta2.html)
EDIT: Mir wurde gerade klar, dass dies SSE -Register waren. Nun ja.
EDIT: Ich werde jetzt die Klappe halten.