0

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

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

我知道英特尔 IA-32 架构手册,可在此处在线获取。查看指令集参考,A–Z,我可以找到我感兴趣的指令以及大量关于它的有趣信息。但是该手册中没有任何地方告诉我哪些处理器系列支持每条指令,甚至没有告诉我何时首次引入。

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

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

注意:对于粗心的读者,请注意我不是在问如何在运行时以编程方式确定这些信息。我想坐在我的办公桌前做这件事。

4

2 回答 2

7

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

以AESNI为例;这些说明已添加到 Westmere/Clarkdale/Arrandale,但只有 i5 和 i7 变体具有它们(IIRC,它们在某些 i5 SKU 中也被禁用)。在下一代(Sandybridge)中,它们再次只有 i5 和 i7,根据 Wikipedia,有时也会在 BIOS 中禁用。在 Ivybridge,除了一两个高端的 i3 SKU 外,它们仍然是 i5/i7。

因此,尽管人们可以对 SSE、SSE2、...、SSE4.x、AVX、AVX2 做出“大部分”正确(甚至对于迄今为止所有 CPU 都正确)的广泛陈述,但唯一真正正确的答案是检查如果指令在运行时可用,请按照英特尔的建议查看适当的功能位。这正是您不想要的答案。对不起。

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

于 2013-07-19T14:44:38.497 回答
5

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

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

就现代指令集而言(SSE、AVX、BMI ......,你的名字),英特尔手册确实很好地详细说明了CPUID任何指令属于哪些指令集(和相关的功能标志),几乎回来了到CPUID引入时的指令(后期 80486 CPU)。有了这些信息,就很容易确定哪个 CPU 型号支持给定指令。

我不确定英特尔手册在确定何时引入真正古老的东西方面的​​效果如何(对于高达 486 的 CPU,我有一本 1992 年的旧硬拷贝 Microsoft MASM 参考手册,其中详细说明了这些东西)。但是,如果这些信息不能通过谷歌搜索,我会感到惊讶——无论如何,这些真正古老的变化(比如BT在 386 上引入指令)现在可能只是从学术角度来看才有趣。

于 2013-07-19T19:52:00.043 回答