最近Jim Wilson在郵件列表中給出了一個非常完整的介紹,講解如何在GCC的相關工具中添加一條RISC-V指令。
- binutils: 如果只是想在匯編的級別添加一條指令,那么只需要修改binutils而不用動編譯器本身。 Kito Cheng提供了.insn模板。使用改模板可以全面定制每一條匯編指令。 不過,小修小改的話,直接修改binutils的代碼可能來的更加方便。 主要來說,需要將指令添加到opcodes/riscv-opc.c中, 將指令的格式添加到include/opcode/riscv-opc.h中, 格式中的各種縮寫符號可以在gas/config/tc-riscv.c的riscv_ip()函數中找到。
- gcc自動生成: 如果需要讓GCC能自動生成添加的指令,這就會麻煩很多。 如果被添加的指令在一種明確的pattern出現時被使用, 那么,在gcc/config/riscv/riscv.md中添加該pattern的描述即可。 如果並不存在這種pattern,那么就需要修改和架構無關或相關的優化步驟,這樣就會比較困難。
- 有限的資料:關於GCC可以看GCC的網站https://gcc.gnu.org/wiki/GettingStarted#Tutorials.2C_HOWTOs 關於Binutils,可以看https://sourceware.org/binutils/binutils-porting-guide.txt 不過Binutils的這個網站講解不夠詳細。 涉及到連接器優化的話,看這本書(“Linkers and Loaders” by John R Levine)會更好。
更詳細的講解,請參看Jim Wilson的郵件原文: sw-dev