如何从C代码编写编译器后端以生成用户定义的硬件体系结构的程序集



我正在做一个项目,我必须定义一个新的处理器硬件架构。我需要一个编译器来为这个目标生成汇编代码(它有自己的指令集)。

这个处理器的程序将用c语言编写。

我的想法是解析C代码并生成一个抽象语法树(AST),然后从AST生成程序集。

当然我想重用现有的组件(不需要重写C解析器我希望),但我可以使用什么工具或框架来完成这项任务?

谢谢。

看看LLVM。

它由独立的模块组成,这些模块可以单独创建,并通过中间语言进行通信。在这种情况下,您将不得不编写汇编后端并重用其他人的C编译器。

我认为GNU GCC是4.5。X工具链非常出色,因为它现在也可以有插件。创建一个foo.c文件,并查看来自gcc的原始树转储:

gcc -fdump-tree-original-raw ./foo.c

偏见看法

我更喜欢它而不是LLVM进行移植,因为它被广泛采用和移植。LLVM提供了一个额外的抽象级别,您的项目可能不需要。然而,两者都学,有利有弊。

更多有趣的东西

http://dragonegg.llvm.org/

您应该查看LLVM (http://llvm.org)。

编写编译器远非微不足道。我不建议从头开始。

LLVM是模块化的,你只需要创建组装后端。

LLVM是一种选择。你也可以考虑编写一个gcc后端,但考虑到gcc的复杂程度,这将会困难得多。

Clang + LLVMis是其中一个选项。或者,您可以尝试重新获取lcc或Open64。

lcc适用于简单的、非标准的体系结构,有一点希望进行适当的底层优化。LLVM是寄存器机器的最佳选择(但如果需要分段的16位内存,则会造成麻烦)。Open64提供了几乎相同的级别。

重定向gcc也是一种选择,但是它需要比其他方法更多的体力劳动。

最新更新