析码多目标编译器是国内某开源社区发起的开源项目,三年以来先后发布了三次二进制版本,这次的0.3.0在上一版本基础上改动略小一些,主要完成了寄存器分配模块、完善了ARM汇编器等。
0.3.0 更新以下特性: 前段部分 全面支持预处理指令与宏特性。 实现了C99的变量定义、变量引用、函数定义、if-else、while、do-while,以及二元表达式等语法。 中段部分 实现了抽象语法与第0层抽象代码模块、SSA、寄存器分配器(基于YT模型)。 后段部分 实现了部分第0层抽象代码到ARMv7汇编代码转换模块、ARMv7汇编器,实现加减乘除、寻址等THUMB指令集编码。 实现了ARM-ELF动态链接器,支持多目标链接,并建立内存镜像,内存镜像可直接运行。 代码:http://semo.googlecode.com/svn/trunk/ 程序:http://code.google.com/p/semo/do ... &q=#makechanges 最新更新 2011年1月29号: 1. 修正了C语言预处理模块,宏函数替换bug。 2. 修正C语言词法分析模块,预读取FUNDEF与FUNCAL时原始状态丢失问题。 2011年1月28号: 1. 更新“内部原理”文档。 2. 更新“front-para”只要针对因为输入尚未实现的语法可能引起的异常错误。 2011年1月27号: 1. 修改生命域的干涉关系判定函数判定误差问题。 2. 修改编译后的输出信息,如总时间开销、二进制编码总量、生命域分裂次数、寄存器分配器开销等。 2011年1月26号 修改mid-para以下几处 bug: 1. a = a , a1.0 = a1 无法确定生命域编号。 2. 检测LiveScopeMonitor?中的节点时,无法确定全部节点的交涉关系,需要O(N*N)。 3. 生命域分裂时,在原始LAC中操作。否则是无效的。 2011年1月25号: 1. 添加ISA_INTEGER。 2. 汇编模块词法分析解析代码时,遇到寄存器直接返回机器码。 3. 对于ISA_INTEGER等立即数不产生SSA。 |
|