[英]How to tell gcc not to generate particular instructions
我正在使用gcc編譯一組c代碼。 我的問題是:我可以告訴gcc不要生成一些具體的指令嗎?
例如,我不希望gcc生成MUL
指令,我該怎么辦?
我正在研究自我實現的MIPS cpu和相關代碼,由於某些原因,我不希望gcc生成一些我沒有實現的奇怪指令。 似乎我需要稍微破解gcc。
根據Krister Walfridsson的博客 ,做到這一點的方法可能是:
machine.opt
文件添加命令行選項,以創建全局變量。 machine.md
或其他文件中查找指令節點,該節點發出要禁用的指令。 將條件更改為添加的新變量。 當條件不滿足時,gcc將發出對您將在.c
文件或lib文件中提供的函數的調用。 作為一個更簡單的示例,請查看ft32
體系結構目錄。 它基於-mnodiv
命令行選項創建全局變量NODIV
。 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
的函數。
雖然我沒有試過這個。 當我有機會嘗試時會更新確切的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.