gcc禁用AMD64推土机/打桩机指令

时间:2014-03-30 22:58:56

标签: c++ c gcc optimization amd-processor


   我需要编译一个针对特定架构或更好的程序,使用通用的AMD64指令进行编译,忽略更新的AMD CPU(推土机和打桩机)。

具体而言我需要完全忽略任何FMA或XOP指令(我的理解是这些指令通常在O2 / 3优化期间启用。

我知道我可以使用--march或-mcpu指定一个特定的cpu,但是我在哪里找到这些值,有什么想法?

谢谢!

2 个答案:

答案 0 :(得分:2)

有禁用和启用特定指令集的选项。它们在不同的gcc版本中可能有所不同。我的gcc 4.7有以下选项来启用/禁用FMA4和XOP指令集:

-mfma4
-mno-fma4
-mxop
-mno-xop

据我所知FMA3是在FMA4之后发布的,我认为我的gcc版本不知道这个指令集。

gcc手册也说:

虽然选择特定的cpu类型会为该特定芯片安排适当的事情,但如果没有使用-march = cpu-type选项,编译器将不会生成任何不在i386上运行的代码。

我认为这意味着如果您不指定-march选项,您的代码将在您的架构上正确运行。

答案 1 :(得分:1)

gcc manual给出:

-mfma4
-mno-fma4
-mxop
-mno-xop

显然,根据编译器的使用年限,可能不支持这些(但编译器也不会生成指令)

可以用-march或类似的方式实现相同的功能,但这样做更粗糙,并且可能会转向其他一些扩展/选项。