Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly Piledriver体系结构中哪些指令集不在推土机中?_Assembly_X86 64_Cpu Architecture_Instruction Set - Fatal编程技术网

Assembly Piledriver体系结构中哪些指令集不在推土机中?

Assembly Piledriver体系结构中哪些指令集不在推土机中?,assembly,x86-64,cpu-architecture,instruction-set,Assembly,X86 64,Cpu Architecture,Instruction Set,我用64位x86_64汇编语言编写了大量代码,我即将开始另一个大型函数库,为s0128、s0256、s0512、s1024有符号整数类型和f0128提供所有常规的按位、移位、逻辑、算术、数学运算符和函数,f0256,f0512,f1024浮点类型 我的两台计算机(ubuntu64和win7-64)中都有AMDFX-8150(推土机)CPU。在回顾了代码需要执行的操作之后,我发现大量最新的位操作指令将非常有用 然而,当我阅读各种文档,包括他们网站上的官方AMD文档时,我发现关于某些指令和指令集是否

我用64位x86_64汇编语言编写了大量代码,我即将开始另一个大型函数库,为
s0128
s0256
s0512
s1024
有符号整数类型和
f0128
提供所有常规的按位、移位、逻辑、算术、数学运算符和函数,
f0256
f0512
f1024
浮点类型

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

然而,当我阅读各种文档,包括他们网站上的官方AMD文档时,我发现关于某些指令和指令集是否由推土机CPU(
FX-8150
)和/或piledriver(
FX-8350
)支持的矛盾层出不穷。对于最近的各种位操作指令和指令集,以及
FMA3
FMA4
指令集,这种混淆尤其常见


我知道一些AMD文档是错误的,因为我在我的
FX-8150
上用
FMA3
FMA4
指令编程,它们工作得很好,而AMD文档比较推土机和打桩机却与此相矛盾

考虑到我能找到的所有文档来源在某种程度上都是错误的,有人知道哪些指令和/或指令集适用于Pilledriver(
FX-8350
),而不适用于推土机(
FX-8150


因为我的问题是文档的有效性,所以请不要只指向某个文档,除非您确定它是正确的。最好的答案来自那些在推土机[和piledriver]CPU上测试过这些指令和指令集的程序员。

正如您已经指出的,官方(第2页)确实存在误导。具体来说,此表中的第一行是错误的:

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

为完整起见,推土机中未提供的打桩机说明书包括(以前命名为CVT16)和()

这些应提供推土机中不存在FMA3的确认。但除此之外,你可以信任。推土机和打桩机的结构分别命名为
bdver1
bdver2

更重要的是,您可以信任返回值。为了方便起见,我在这里复制赞比西和维舍拉(桌面部分)的屏幕截图:

资料来源:


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

“因为我一直在FX-8150上使用FMA3和FMA4指令编程,它们工作得很好。”-我怀疑。您确定在推土机上使用FMA3吗?推土机没有FMA3。关于FMA3。嗯,我记得和他们一起编程,但当我意识到FMA4可用时,我就切换了。FMA4指令对我来说效率更高,因为我不必写任何操作数。另外,在编程时,它们更容易理解1000倍。我会去找一个FMA3应该工作的地方,看看会发生什么。@Mystical:哦,顺便告诉我你在下面的AMD文档第2页上看到了什么:@Hans:请看前面的评论(AMD文档)。坦率地说,我不确定我是否相信CPUID在这个问题上的观点。如果没有人能彻底解决我的问题,我将亲自编写一些程序集并测试每一条指令(通过调试器逐步完成),以查看实际工作情况。我真的不想这么努力,但看起来我可能不得不这么做。各种文档之间存在如此严重的分歧,我为什么要相信CPUID呢?似乎没人知道这里发生了什么。第一次发现。嗯,我想我的记忆力确实有缺陷。当我试图执行一条
FMA3
指令时,它生成了一条
SIGILL
(非法指令),而
FMA4
指令工作正常(事实上,我的代码中有几十条
FMA4
指令)。当然,如果你看我在上面提供链接的AMD文档,它声称推土机可以执行
FMA3
指令(错误),但不能执行
FMA4
指令(错误)。现在转到面向位的指令。