在一個 xmm 暫存器中,我有 3 個值小于 256 的整數。我想將它們轉換為位元組,并將它們保存到記憶體中。我不知道如何處理它。
我正在考慮從中獲取這些數字xmm1并將它們保存到eax,然后將最低位元組移動到記憶體中,但我不確定如何從 xmm 暫存器中獲取整數。我只能在第 0 個位置獲取元素,但如何移動其余元素?
有一個完美的指令對我VPMOVDB有用,但我不能在我的處理器上使用它。有其他選擇嗎?
uj5u.com熱心網友回復:
最簡單的方法可能是使用pshufb置換位元組,然后movd存盤資料:
; convert dwords in xmm0 into bytes and store into dest
pshufb xmm0, xmmword ptr mask
movd dword ptr dest, xmm0
...
align 16
mask db 0, 4, 8, 12, 12 dup (-1)
這存盤 4 個位元組而不是 3 個位元組,因此請確保您的代碼可以處理它。也可以只存盤 3 個位元組,但需要更多的作業:
; convert dwords in xmm0 into bytes and store into dest
pshufb xmm0, xmmword ptr mask
movd eax, xmm0
mov word ptr dest, ax
bswap eax
mov byte ptr dest 2, ah
...
align 16
mask db 0, 4, 8, 12, 12 dup (-1)
如果這種情況不止一次發生,您可以提前加載遮罩以避免重復加載它的懲罰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/420275.html
標籤:
