簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM