SSSE3 是Intel 命名的SSE3 指令集的扩展,不使用新的号码是因为SSSE3比较像是加强版的SSE3,以至于推出SSSE3之前,SSE4 的定义容易被混淆。在公开Intel的Core微架构的时候,SSSE3出现在Xeon 5100与Intel Core 2移动版与桌面型处理器上。
SSSE3包含了16个新的不同于SSE3的指令。每一个都能够运作于64位的MMX寄存器或是128位XMM寄存器之中。因此,有些Intel的文件表示有32个新指令。之前的SIMD指令由旧排到新依序是MMX 、3DNow! (AMD开发的)、SSE 、3DNow! Professional 、SSE2 与SSE3 。
支持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) …]
外部链接 [ 编辑 ]