什么指令设置在打桩机而不是推土机

时间:2013-12-22 14:31:34

标签: assembly x86-64 cpu-architecture instruction-set

我用64位x86_64汇编语言编写了相当多的代码,我即将开始另一个大型函数库,为s0128提供所有传统的按位,移位,逻辑,算术,数学运算符和函数。 ,s0256s0512s1024有符号整数类型以及f0128f0256f0512f1024个浮点类型。

我的计算机(ubuntu64和win7-64)中都有AMD FX-8150(推土机)CPU。在查看了我的代码需要执行的操作之后,我发现大量最近的位操作指令将非常有用。

然而,当我阅读各种文档,包括他们网站上的官方AMD文档时,我发现推土机CPU(FX-8150)和/或打桩机({{{{{{{{ 1}})。关于各种最近的位操作指令和指令集以及FX-8350FMA3指令集,这种混淆特别常见。

我知道有些AMD文档是错误的,因为我在我的FMA4上使用FMA3FMA4指令编程并且它们工作得很好,而AMD文档比较推土机和打桩机与此相矛盾。

鉴于我可以找到的所有文档来源在某种程度上都与此问题有关,那么是否有人知道哪些指令和/或指令集在打桩机(FX-8150)上工作但不是推土机({ {1}})?

由于我的问题是文档的有效性,请不要只指向某个文档,除非您确定它是正确的。最好的答案来自程序员,他们在推土机[和打桩机] CPU上测试了这些指令和指令集。

1 个答案:

答案 0 :(得分:2)

正如您已经想到的那样,官方AMD release document(第2页)确实具有误导性。具体来说,此表中的第一行是错误的supported instructions (wrong)

推土机支持FMA4,但不支持FMA3。

为了完整起见,推土机中没有的打桩机指令是BMITBMF16C(以前称为CVT16)和FMA32)。

这些应该提供关于FMA3不存在于Bulldozer中的确认。但此外,您可以信任the GCC Manual。 Bulldozer和Piledriver的体系结构分别命名为bdver1bdver2

更重要的是,您可以信任cpuid返回值。为方便起见,我在这里为Zambezi和Vishera(桌面部分)重新制作截图:

Zambezi and Vishera cores (screenshots from Aida64) 资料来源:CPUID Dump List

请注意,cpuid仅使用fma来指定FMA3和FMA4支持。 GCC遵循相同的语义。从Wikipedia link开始,您可以推断这是因为FMA4变体实际上是在 FMA3之前实现的(因此之前定义的fma4标识符不能简单被删除或它会破坏现有的应用程序。)