支持SSE4的处理器是否支持SSSE3指令?

Eri*_*son 4 x86 sse instruction-set sse4

我正在开发一个需要SSSE3指令集的硬件平台.在查看IntelAtom®x5-Z8350等处理器时,数据表显示它支持SSE4.1和SSE4.2.这是否允许为SSSE3指令编写的软件运行?

我相信这个问题与这个问题略有不同,因为它从未明确表示SSE4是SSSE3的超集.它只说AVX是一个超集.

Had*_*ais 5

这个答案仅适用于英特尔处理器.

首先,所有英特尔凌动处理器从最早的处理器到最新的处理器都支持SSSE3.英特尔手册第1.2.14节规定:

最初的英特尔凌动处理器系列和后续产品包括英特尔凌动处理器D2000,N2000,E2000,Z2000,C1000系列,提供以下功能:

  • ...
  • 支持指令集扩展,包括Supplemental Streaming SIMD Extensions 3(SSSE3).
  • ...

并且手册的表5-1说明:

SSSE3扩展:Intel Xeon处理器3xxx,5100,5200,5300,5400,5500,5600,7300,7400,7500系列,Intel Core 2 Extreme处理器QX6000系列,Intel Core 2 Duo,Intel Core 2 Quad处理器,Intel Pentium Dual-核心处理器,Intel Atom处理器.

这也与维基百科一致.

我不确定手册是否明确声明如果支持SSE4则支持SSSE3,但我们可以推导出来.

第12.7.3节讨论了如何检查SSSE3支持:

在应用程序尝试使用SSSE3扩展之前,应用程序应遵循第11.6.2节"检查SSE/SSE2支持"中所示的步骤.接下来,使用下面提供的附加步骤:

  • 检查处理器是否支持SSSE3(如果CPUID.01H:ECX.SSSE3 [bit 9] = 1).

第12.12.2节还讨论了如何检查SSE4.1支持:

检查处理器是否支持SSE4.1(如果CPUID.01H:ECX.SSE4_1 [bit 19] = 1),SSE3(如果CPUID.01H:ECX.SSE3 [bit 0] = 1)和SSSE3(如果CPUID.01H) :ECX.SSSE3 [bit 9] = 1).

最后,第12.12.3节讨论了如何检查SSE4.2支持:

检查处理器是否支持SSE4.2(如果CPUID.01H:ECX.SSE4_2 [bit 20] = 1),SSE4.1(如果CPUID.01H:ECX.SSE4_1 [bit 19] = 1)和SSSE3(如果CPUID) .01H:ECX.SSSE3 [bit 9] = 1).

如您所见,SSE4.1和SSE4.1都需要支持SSSE3.我们还可以得出结论,SSSE3需要支持SSE2.

CAVEAT:尽管很难确定100%,但未来很可能会继续这样做.

但有一个有趣的观察结果是,将支持SSSE3的处理器列表与支持SSE4.1和SSE4.2的处理器列表(表5-1和表5-2)进行比较时,只有一个处理器,Intel Core i7 965处理器,在SSE4.2列表中但不在SSSE3中,但处理器实际上支持SSSE3.不确定这是手册中的错误,还是更可怕,它是不完整的.

另一个有趣的观察是,对于Atom以外的处理器(参见上面第1.2.14节的引用),似乎对SSSE3,SSE4.1或SSE4.2的支持并不一定意味着支持SSE3.我没有在手册中找到任何能够让我得出结论的内容.同时,我不知道任何支持SSSE3,SSE4.1或SSE4.2的处理器,但不支持SSE3.

第12.1.1节规定了SSSE3中可用的寄存器:

在兼容模式下,SSE3,SSSE3和SSE4的功能与它们在保护模式下的功能相同.在64位模式下,可以访问8个额外的XMM寄存器.通过使用REX前缀访问寄存器XMM8-XMM15.

第12.7.1节讨论了对SSSE3的操作系统支持:

确保您的操作系统支持SSE/SSE2/SSE3/SSSE3扩展.(对SSE扩展的操作系统支持意味着对SSE2,SSE3和SSSE3的足够支持.)

因此,任何需要SSE的操作系统都会自动支持SSSE3.