如何告诉gcc不要生成特定的指令

时间:2018-01-08 11:14:05

标签: gcc assembly mips

我正在使用gcc编译一组c代码。我的问题是:我可以告诉gcc不要生成一些具体的指示吗?

e.g。我不希望gcc生成MUL指令,我该怎么办?

我正在研究自己实施的MIPS cpu和相关代码,出于某些原因,我不希望gcc生成一些我没有实现的奇怪指令。似乎我需要稍微破解gcc。

1 个答案:

答案 0 :(得分:1)

基于Krister Walfridsson's blog,该方法可能是:

  • 将命令行选项添加到machine.opt文件中,以便创建全局变量。
  • machine.md或其他文件中找到指令节点,该节点发出要禁用的指令。将条件更改为添加的新变量。如果不满足条件,则gcc将发出对您将在.c文件或lib文件中提供的函数的调用。

作为一个简单的示例,请查看ft32体系结构目录。它基于NODIV命令行选项创建全局变量-mnodivft32.md文件中的指令节点包含:

(define_insn "divsi3"
  [(set (match_operand:SI 0 "register_operand" "=r,r")
          (div:SI
           (match_operand:SI 1 "register_operand" "r,r")
           (match_operand:SI 2 "ft32_rimm_operand" "r,KA")))]
  "!TARGET_NODIV"
  "div.l  %0,%1,%2")

在这种ft32情况下,如果未设置变量,则gcc发出div.l汇编代码。设置后,它将调用名为__divsi3的函数。

尽管我还没有尝试过。当我有机会尝试时,将使用确切的信息进行更新。