Jus*_*eff 45 c compiler-construction customization
为自定义CPU创建C编译器最简单的方法是什么,假设我当然已经有了汇编程序?
由于C编译器生成汇编,是否有一些方法可以为各种C语言定义标准位和汇编代码片段,重建编译器,从而获得目标硬件的交叉编译器?
优选地,编译器本身将用C编写,并且构建为Linux或Windows的本机可执行文件.
请注意:我不是在问如何编写编译器本身.我确实在大学里学过这门课程,我知道一般的编译器编译器等等.在这种情况下,我只想配置一些现有的框架,如果可能的话.我不想修改语言,我只是希望能够定位任意架构.如果答案结果是"它不会那样工作",那么这些信息对我自己和其他可能做出类似假设的人都有用.
Pub*_*bby 31
本文档描述了为LLVM编写后端的技术,LLVM将LLVM表示转换为机器汇编代码或其他语言.
[...]
要创建静态编译器(发出文本汇编的编译器),您需要实现以下内容:
- 描述寄存器组.
- 描述指令集.
- 描述目标机器.
- 为架构实现组装打印机.
- 实现架构的指令选择器.
简短的回答是,事实并非如此。
更长的答案是,为新的 CPU 类型编写编译器确实需要一些努力。但是,您不需要从头开始创建编译器。大多数编译器都是分多次构建的;这是一个典型的架构(可能有很多变化):
在本描述中,只有步骤 4 是与机器相关的。因此,您可以采用一个将步骤 4 明确分开的编译器,并插入您自己的步骤 4。这样做需要对 CPU 的深入了解以及对编译器内部结构的一些了解,但您无需担心之前发生的情况。
几乎所有不是非常小、非常罕见或非常旧的 CPU 都有一个GCC后端(步骤 4) 。编写 GCC 后端的主要文档是GCC 内部手册,特别是有关机器描述和目标描述的章节。GCC 是免费软件,因此使用它无需支付许可费用。
vbcc(位于 www.compilers.de)是一个用 C 语言编写的优秀且简单的可重定向 C 编译器。它比 GCC/LLVM 简单得多。它非常简单,我只需几周的工作就能将编译器重新定位到我自己的 CPU,而无需事先了解编译器。