我需要编译一个针对特定架构或更好的程序,使用通用的AMD64指令进行编译,忽略更新的AMD CPU(推土机和打桩机)。
具体而言我需要完全忽略任何FMA或XOP指令(我的理解是这些指令通常在O2 / 3优化期间启用。
我知道我可以使用--march或-mcpu指定一个特定的cpu,但是我在哪里找到这些值,有什么想法?
谢谢!
答案 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
或类似的方式实现相同的功能,但这样做更粗糙,并且可能会转向其他一些扩展/选项。