本周最新的GNU C Library(Glibc)开发代码已经开始放弃各种SSSE3指令集优化代码路径。补充流SIMD扩展3指令集(SSSE3)可以追溯到十多年前的英特尔至强5100/酷睿2或AMD Bobcat/Bulldozer核心,当时的设想是作为SSE的一个迭代。
但是由于Glibc也携带了与SSSE3差不多时间的旧版SSE2或SSE4.1的优化代码路径,加上用于较新的Intel/AMD CPU的AVX2和EVEX代码路径,SSSE3的代码路径实质上已经无人在使用或者均已被替代。
Glibc开发者认为,考虑到SSE2/SSE4.1/AVX2/EVEX代码路径的存在,已经不值得再提供SSSE3指令集优化的代码路径,因为很少有英特尔/AMD CPU被留在SSSE3这条路径上,而在代码中提供SSSE3支持的成本却不低,因此从本周起,开发人员已经开始舍弃它。
Xeon 5100系列引入了SSSE3支持
在删除的SSSE3支持中包括放弃mem{move|cpy}-ssse3-back、str{p}{n}cpy-ssse3、str{n}cat-ssse3、str{n}{case}cmp-ssse3和{w}memcmp-ssse3代码路径。
SSSE3在Core 2时代很有用,但对于过去几年的CPU来说,Glibc AVX2代码路径更有利
围绕memmove/mempcpy/memcpy的SSSE3代码也有减少。提交人解释说。
我们的目标是删除大部分SSSE3功能,因为SSE4、AVX2和EVEX通常更受欢迎。memcpy/memmove是一个例外,对于某些目标来说,用`palignr`避免无符号负载很重要。
此提交用一个更好的优化和更低的代码占用率的版本替换了 memmove-ssse3。此外,它还将 memcpy 别名为 memmove。