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) …]

参见[编辑]

外部链接[编辑]