如何从C代码编写编译器后端以生成用户定义的硬件体系结构的程序集
How to write a compiler back-end to generate assembly for user defined hw architecture, from C code
我正在做一个项目,我必须定义一个新的处理器硬件架构。我需要一个编译器来为这个目标生成汇编代码(它有自己的指令集)。
这个处理器的程序将用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也是一种选择,但是它需要比其他方法更多的体力劳动。
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- Visual C++(VS2017)中用户定义的转换不明确
- 使用用户定义的参数调用future/async并调用类方法
- 带有用户定义类的c++折叠表达式
- g++用户定义的动态链接库上的全局new和delete运算符
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 修改"std::set"中用户定义类型的值
- 参数包构造函数在类模板中隐藏用户定义的转换
- MAKE:找不到包含的用户定义的头文件?
- C++:用户定义的显式类型转换函数错误
- 从用户定义的类生成格式字符串?
- 为用户定义的类正确调用复制构造函数/赋值运算符
- C++ 向量与用户定义的类比较?(==, <, >)
- STL 用户定义的二进制操作
- 将用户定义的类型与 std::vector 和 std::sort 一起使用
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- C++:用户定义的类,以成员字段作为地址