禁用gcc / g ++中的预测

时间:2011-03-07 22:45:08

标签: gcc

我想知道是否有一种方法可以禁用gcc / g ++中的预测。当我得到代码的对象转储时,我不希望其中有任何CMOV,CCMP等指令。

我已经通过gcc手册页但没有成功。到目前为止,前进的唯一方法似乎是攻击gcc本身。在RHEL x86_64机器上使用gcc 4.3。有什么想法吗?

提前致谢。

3 个答案:

答案 0 :(得分:3)

之前我遇到过这个问题,在我的情况下解决方案是禁用if-conversion。您可以使用编译标志:

-fno-if-conversion -fno-if-conversion2 

答案 1 :(得分:2)

您可以尝试定位之前没有这些指令的x86指令集吗?

http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Target-Options.html

gcc -b i386 main.c

(我没试过这个)

答案 2 :(得分:1)

在gcc命令行上尝试以下参数:

-fno-if-conversion -fno-if-conversion2 -fno-tree-loop-if-convert

这对我有用,而诀窍是最后一个参数,在某些情况下,如果if在循环内将ifs转换为条件移动,而其他两个参数未涵盖这些情况,则需要此参数。

我是根据this conversation从gcc邮件列表中发现的:

  

---评论来自Andrew Pinski的#1 ---我不认为-fno-if-conversion和-fno-if-conversion2是设计的   关闭所有谓词指令。

     

注意-O3打开-ftree-loop-if-convert,这也会导致生产   谓词指令(谓词移动)。