【发布时间】:2014-01-10 21:36:55
【问题描述】:
我用 64 位 x86_64 汇编语言编写了相当多的代码,我即将开始另一个大型函数库,为s0128、@ 提供所有常规的按位、移位、逻辑、算术、数学运算符和函数987654323@、s0512、s1024 有符号整数类型和f0128、f0256、f0512、f1024 浮点类型。
我的两台计算机(ubuntu64 和 win7-64)中都有 AMD FX-8150(推土机)CPU。在查看了我的代码需要执行的操作之后,我发现大量最近的位操作指令将非常有帮助。
但是,当我阅读各种文档时,包括他们网站上的 AMD 官方文档,我发现关于推土机 CPU (FX-8150) 和/或打桩机 (FX-8350) 是否支持某些指令和指令集的矛盾无穷无尽.对于最近出现的各种位操作指令和指令集以及FMA3 和FMA4 指令集,这种混淆尤为常见。
我知道一些 AMD 文档是错误的,因为我一直在我的 FX-8150 上使用 FMA3 和 FMA4 指令进行编程,它们工作得很好,而比较推土机和打桩机的 AMD 文档与此相矛盾。
鉴于我能找到的所有文档来源似乎在某种程度上关于这个问题是错误的,有没有人知道哪些指令和/或指令集适用于打桩机 (FX-8350) 而不是推土机 (FX-8150 )?
由于我的问题是那里的文档的有效性,请不要只指出一些文档除非您确定它是正确的。最好的答案来自在推土机 [和打桩机] CPU 上测试过这些指令和指令集的程序员。
【问题讨论】:
-
“因为我一直在我的 FX-8150 上使用 FMA3 和 FMA4 指令进行编程,它们工作得很好” - 我对此表示怀疑。你确定你在推土机上使用 FMA3 吗?推土机没有 FMA3。
-
关于 FMA3。嗯,我记得和他们一起编程,但是当我意识到 FMA4 可用时,我切换了。 FMA4 指令对我的目的来说效率更高,因为我不必重写任何操作数。此外,它们在编程时更容易理解 1000 倍。我会去找一个 FMA3 应该工作的地方,看看会发生什么。
-
@Mystical:哦,顺便说一下,告诉我您在以下 AMD 文档的第 2 页上看到了什么:developer.amd.com/wordpress/media/2012/10/…
-
第一次发现。好吧,我想我的记忆确实有缺陷。当我尝试执行
FMA3指令时,会生成SIGILL(非法指令),而FMA4指令工作正常(实际上,我的代码中有数十条FMA4指令)。当然,如果您查看我在上面给出的链接的 AMD 文档,它声称推土机可以执行FMA3指令(错误),但不能执行FMA4指令(错误)。现在进入面向位的指令。 -
下一个发现。较新的位指令在我的推土机中不起作用 (
FX-8150)。在对各种CPUID位进行了艰苦的检查之后,它们似乎大多是准确的(但很难理解)。一个奇怪的是FMA位(在我的推土机FX-8150中包含错误),而它确实执行FMA4但不执行FMA3指令。但我确实在第二组中找到了另一个FMA位(带有0x80000000前缀),它设置为1。总体而言,CPUID确实看起来相当可靠,而世界上推土机的文档非常不一致,并且很大程度上是错误的。
标签: assembly x86-64 cpu-architecture instruction-set