SSSE3
此条目没有列出任何参考或来源。 (2019年5月3日) |
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指令集的处理器
编辑- Intel:
- Xeon 5100系列
- Xeon 5300系列
- Xeon 3000系列
- Core 2
- Core i3
- Core i5
- Core i7
- Core i9
- Pentium Dual-Core
- Celeron 4xx的Conroe-L
- Celeron Dual Core系列
- Celeron M 500系列
- Atom
- AMD
- VIA:
新增的指令
编辑在以下的列表中,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) …] |