PSHUFW - 壓縮字亂序

操作碼

指令

說明

0F 70 /r ib

PSHUFW mm1, mm2/m64, imm8

按照 imm8 中的編碼對 mm2/m64 中的字執行亂序處理,結果儲存到 mm1

說明

mm2/m64 中的字執行亂序處理,對於 mm2/mem 中的四個字,使用 imm8 運算元選擇要將哪些字放入 MM1 中的每個字。imm8 的位 1 與 0 的編碼確定字 0 (MM1[15-0]) 的來源,位 3 與 2 的編碼確定字 1 的來源,位 5 與 4 編碼確定字 2 的來源,位 7 與 6 的編碼則確定字 3 (MM1[63-48]) 的來源。類似地,兩位編碼代表將使用哪個源字,例如,二進制編碼 10 指示將使用源字 2 (MM2/Mem[47-32])。

從源運算元(第二個運算元)中複製字,按照順序運算元(第三個運算元)選擇的字位置,將它們插入目標運算元(第一個運算元)。此操作同 PSHUFD 指令使用的操作相似,如圖 3-10 所示。對於 PSHUFW 指令,順序運算元中的每 2 個位欄位選擇目標運算元中一個字位置的內容。順序運算元欄位的編碼從源運算元中選擇將複製到目標運算元的字。

源運算元可以是 MMX™ 技術暫存器或 64 位記憶體位置。目標運算元是 MMX 暫存器。順序運算元是 8 位立即數。

請注意,此指令允許將源運算元中的一個字複製到目標運算元中的多個字位置。

操作

DEST[15-0] (SRC >> (ORDER[1-0] * 16) )[15-0]
DEST[31-16] (SRC >> (ORDER[3-2] * 16) )[15-0]
DEST[47-32] (SRC >> (ORDER[5-4] * 16) )[15-0]
DEST[63-48] (SRC >> (ORDER[7-6] * 16) )[15-0]

英特爾(R) C++ 編譯器等價內部函式

PSHUFW __m64 _mm_shuffle_pi16(__m64 a, int n)

影響的標誌

無。

保護模式異常

#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

#UD - 如果 CR0 中的 EM 設定為 1。

#NM - 如果 CR0 中的 TS 設定為 1。

#MF - 如果存在未決的 x87 FPU 異常。

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果啟用對齊檢查並在目前特權級別為 3 時進行未對齊的記憶體引用。

實地址模式異常

#GP(0) - 如果運算元的任何部分出現在 0 到 FFFFH 的有效地址空間之外。

#UD - 如果 CR0 中的 EM 設定為 1。

#NM - 如果 CR0 中的 TS 設定為 1。

#MF - 如果存在未決的 x87 FPU 異常。

虛 8086 模式異常

與“實地址模式”中的異常相同。

#PF(錯誤程式碼) - 頁錯誤。

#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。

數值異常

無。