90 likes | 379 Views
面向 UniCore 体系结构的 C 语言子集编译器. 设计并实现一个编译器,可以将使用 给定的 C 语言子集 (Mini C) 编写的源程序 编译成 面向 UniCore 指令系统的汇编程序 给定的前端语言支持为 MiniC ,同学们在构建词法分析和语法分析等模块时,不需要考虑过于复杂的 C 和 C++ 语言特性。 提供一个 UniCore 指令系统的子集,同学们在构建代码生成部分时只需要考虑较少的指令形式。虽然是经裁剪的子集,但编译出来的程序经汇编和链接后仍可以在 UniCore 体系结构下运行。. 实习流程. 了解 Mini C 语言 词法分析 语法分析
E N D
面向UniCore体系结构的C语言子集编译器 • 设计并实现一个编译器,可以将使用给定的C语言子集(Mini C)编写的源程序编译成面向UniCore指令系统的汇编程序 • 给定的前端语言支持为MiniC,同学们在构建词法分析和语法分析等模块时,不需要考虑过于复杂的C和C++语言特性。 • 提供一个UniCore指令系统的子集,同学们在构建代码生成部分时只需要考虑较少的指令形式。虽然是经裁剪的子集,但编译出来的程序经汇编和链接后仍可以在UniCore体系结构下运行。
实习流程 • 了解Mini C语言 • 词法分析 • 语法分析 • 分析方法不限,实现语法检查和结构分析 • 语义分析和汇编代码生成 • 生成UniCore汇编程序 • 最终生成UniCore CPU上可运行的程序 • 汇编器、链接器和库函数由我们提供 • 可在模拟器上进行调试,SimpleSim/UniCore模拟器
MiniC(一个C语言的子集) • 数据类型:整型、数组、指针; • 变量声明应在函数最前; • 包含赋值、返回、if、for、while等语句,不需包含switch; • 支持运算:加、减、乘,逻辑与、逻辑或、按位与、按位或,比较操作等; • 届时会给出具体文法
UniCore32指令系统此外还有UniCore16、 UniCore64、多媒体加速扩展指令等632页的文档,so…
裁剪的UniCore指令系统 • 32个通用寄存器 • r0 - r31(PC) • 运算类指令 • add, sub, mul • and, or • shift • 比较指令 • 跳转指令 • 访存指令
UniCore体系结构应用程序二进制接口 • 数据描述 • Little Endian • 数据类型参考ANSI C规范 • 不考虑浮点支持 • 关于地址空间的使用、堆栈分布和传参规范,届时可参阅《北大众志UniCore处理器应用程序二进制接口规范》 • 只需生成汇编程序,不需考虑可执行文件格式 • 不需考虑嵌入式汇编的支持
北京大学微处理器研发中心编译组 • LCC->GCC->GCC+LLVM • 对北大自主CPU的编译环境支持 • 编译优化 • 面向特定体系结构的编译优化,例如基本块重排、条件执行指令优化、混合代码生成、面向存储的优化等。 • 高层次综合 • ESL Synthesis,将特定约束下的C语言或其他语言描述的算法或系统转化为对硬件的描述。