论文部分内容阅读
C*Core是苏州国芯科技有限公司基于Motorola公司M*Core自主研发的嵌入式处理器架构。而目前C*Core平台仍使用十年前开发的GCC的M*Core后端,缺乏先进的编译器后端支持以充分发挥该平台的性能优势,制约了其系统的应用与发展。LLVM是伊利诺伊香槟分校(UIUC)近年来开发出的优秀开源编译框架,具有编译效率高、组件模块化和可复用性等特点,有替代GCC、成为新一代主流商用编译器的趋势。本文基于LLVM编译框架,设计并实现了C*Core后端,以解决现存GCC对C*Core支持力度不足的问题。首先,本文剖析了LLVM中间表示语言和后端工具集,论述了基于TableGen语言的目标平台描述方法,以及LLVM后端代码生成流程;其次,通过深入分析C*Core体系结构,利用TableGen语言完成对C*Core目标平台的寄存器文件、指令集和调用惯例的描述;利用LLVM提供的DAG构造和转换方法,设计了C*Core指令的多种DAG匹配模式,最终实现了从LLVM中间表示到C*Core指令的代码生成。同时,本文还面向包含条件执行指令及C*Core特有指令组合等程序,采用了多种优化技术,进一步提高了汇编代码的质量。实验表明,本文所设计的基于LLVM的C*Core后端,不仅实现了对大部分C*Core指令的支持,生成的部分代码质量在一定程度上还优于GCC。