我正在使用gcc编译一组c代码。我的问题是:我可以告诉gcc不要生成一些具体的指示吗?
e.g。我不希望gcc生成MUL
指令,我该怎么办?
我正在研究自己实施的MIPS cpu和相关代码,出于某些原因,我不希望gcc生成一些我没有实现的奇怪指令。似乎我需要稍微破解gcc。
答案 0 :(得分:1)
基于Krister Walfridsson's blog,该方法可能是:
machine.opt
文件中,以便创建全局变量。 machine.md
或其他文件中找到指令节点,该节点发出要禁用的指令。将条件更改为添加的新变量。如果不满足条件,则gcc将发出对您将在.c
文件或lib文件中提供的函数的调用。 作为一个简单的示例,请查看ft32
体系结构目录。它基于NODIV
命令行选项创建全局变量-mnodiv
。 ft32.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
的函数。
尽管我还没有尝试过。当我有机会尝试时,将使用确切的信息进行更新。