如何确定哪些英特尔处理器系​​列支持哪些指令?

时间:2013-07-19 13:57:46

标签: assembly x86 cpu intel instructions

举个例子,我想确切地知道哪个x86处理器系列支持fisttp指令。我很确定它在奔腾4及更高版本上得到了支持,但我想对此进行一些官方验证。更重要的是,我想知道它是否得到了进一步的支持:它是否可以在Pentium III上使用?

我尝试了所有明显的Google搜索字词,但在网上没有任何关于此特定指令的内容。即使有,这也不是一个好的通用解决方案。

我了解英特尔IA-32架构手册,可在线获取here。看Instruction Set Reference, A–Z,我可以找到我感兴趣的指令和大量有趣的信息。但是在那本手册中没有任何地方告诉我哪些处理器系列支持每条指令,甚至是第一次引入时。

我试图找到本手册的旧版本(即奔腾III系列),但我空了 - 所有链接都指向上面链接的页面,其中包含当前版本的手册。此外,为每个家庭挖掘手册并查看我关心的指示是否存在,还有很多工作要做。

当然,这些信息是其他人经常查看的信息......他们使用什么资源?

注意:对于粗心的读者,请注意我并未询问如何在运行时以以编程方式确定此信息。我想坐在我的办公桌前。

2 个答案:

答案 0 :(得分:6)

一般来说,这里实际上不可能有一个整洁的答案。虽然“更大”的指令集扩展(SSE,SSE2,...,AVX)往往会增加(从某种意义上说,一旦它们被添加,它们就不会消失),有许多较小的ISA扩展,如(英特尔认为AESNI和TSX一样)是英特尔认为可选的;在最初添加之后,一个系列中的各个处理器可能会根据您支付的金额包含或排除该功能。

以AESNI为例;这些说明是在Westmere / Clarkdale / Arrandale中添加的,但只有i5和i7变体才有它们(IIRC,它们在某些i5 SKU中也被禁用)。在下一代(Sandybridge),他们只是i5和i7,根据维基百科,有时在BIOS中被禁用。在Ivybridge,它们仍然是i5 / i7,除了一个或两个高端i3 SKU。

所以,尽管人们可以对SSE,SSE2,...,SSE4.x,AVX,AVX2进行广泛的陈述,这些声明“大部分”都是正确的(甚至对于迄今为止所有出货的CPU都是正确的),唯一真正正确的答案是通过查看英特尔建议的相应功能位来检查指令是否在运行时可用。这正是你不想要的答案。遗憾。

对于“如何近似回答这个问题”的更一般性问题,维基百科是一个非常好的参考。对于特定的处理器型号而不是系列,请使用ark.intel.com

答案 1 :(得分:4)

实际上,您已经有了答案:查找此类信息的最佳资源在CPU制造商的文档中。

如果仔细观察,您(几乎)链接到的英特尔手册中包含您在示例FISTTP上所需的所有信息:它明确列为SSE3指令(请参阅here:Vol 1,“Intel 64和IA-32架构软件开发人员手册”(2013年6月,第5.7.1节)。这意味着任何支持SSE3指令集的CPU都应该支持FISTTP

就现代指令集而言(SSE,AVX,BMI,......,你的名字),英特尔手册确实很好地详细说明了哪些指令集(以及相关的CPUID特征标志)任何指令都属于,几乎回到引入CPUID时的指令(80486年末)。有了这些信息,就可以很容易地找出哪种CPU模型支持给定的指令。

我不确定英特尔手册在确定何时引入真正古老的东西时的效果如何(对于高达486的CPU,我有一本旧的硬拷贝Microsoft MASM参考手册,从1992年开始详述这些内容)。但是,如果这些信息不具备谷歌能力,我会感到惊讶 - 无论如何,这些真正古老的变化(如386上的BT说明的介绍)现在可能只是从学术角度来看才有意思。