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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top