SSSE3

SSSE3Intel命名的SSE3指令集的擴充,不使用新的號碼是因為SSSE3比較像是加強版的SSE3,以至於推出SSSE3之前,SSE4的定義容易被混淆。在公開Intel的Core微架構的時候,SSSE3出現在Xeon 5100與Intel Core 2行動版與桌上型處理器上。

SSSE3包含了16個新的不同於SSE3的指令。每一個都能夠運作於64位元的MMX暫存器或是128位元XMM暫存器之中。因此,有些Intel的文件表示有32個新指令。之前的SIMD指令由舊排到新依序是MMX3DNow!(AMD開發的)、SSE3DNow! ProfessionalSSE2SSE3

支援SSSE3指令集的處理器

新增的指令

在以下的列表中,satsw(X)(飽和爲有符號字(saturate to signed word)的簡寫),任取有號整數X,如果X小於-32768時就代表-32768,X大於32767時就代表32767 ,其餘數值不變。在一般的Intel架構上,字節(byte)表示8位元,字(word)是16位元,而雙字(dword)是32位元;暫存器表示MMX或是XMM向量暫存器。

PSIGNB, PSIGNW, PSIGND 包裹式有符號整型取反 如果另一個暫存器中的整形爲負,那麼將目標暫存器中的數取反。
PABSB, PABSW, PABSD 包裹式絕對值 將源暫存器中的數取絕對值並放到目標暫存器中。
PALIGNR 包裹式右移 將兩個暫存器的值串起來,然後根據編碼到指令中的立即數將暫存器中的值右移。
PSHUFB 包裹式將任意字節重新排布到目的暫存器 如果源暫存器高位被置1,就把目的暫存器賦值爲0,否則根據源操作數的低4位選擇目的操作數,將其拷貝到目的操作數的相應位置。
PMULHRSW 包裹式捨入相乘 將兩個暫存器中的16位word處理成-1到1間的15位定點數(例如0x4000被處理成0.5,0xa000 處理成−0.75), 並且將他們捨入相乘。
PMADDUBSW 相乘並相加包裹式整型然後飽和 將兩個暫存器中的8位整型相乘並相加,然後飽和成有符號整型。(也就是 [a0 a1 a2 …] pmaddubsw [b0 b1 b2 …] = [satsw(a0b0+a1b1) satsw(a2b2+a3b3) …])
PHSUBW, PHSUBD 包裹式水平相減 將兩個暫存器 A = [a0 a1 a2 …] 和 B = [b0 b1 b2 …] 相減輸出 [a0−a1 a2−a3 … b0−b1 b2−b3 …]
PHSUBSW 包裹式水平相減並且飽和爲有符號字 類似PHSUBW, 但是輸出的是[satsw(a0−a1) satsw(a2−a3) … satsw(b0−b1) satsw(b2−b3) …]
PHADDW, PHADDD 包裹式有符號相加 將兩個暫存器 A = [a0 a1 a2 …] 和 B = [b0 b1 b2 …] 相加然後輸出 [a0+a1 a2+a3 … b0+b1 b2+b3 …]
PHADDSW 包裹式水平相加並且飽和爲有符號字 類似PHADDW, 但是輸出的是[satsw(a0+a1) satsw(a2+a3) … satsw(b0+b1) satsw(b2+b3) …]

參見

外部連結

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.