大约两个多星期没做JIT了,经过之前些其他代码消遣,现在还是继续做下去的好。目前的成果是完成了汇编数据结构、完成了汇编到机器码的转换器、知道了成员对齐、调用转换的约定、知道如何实现异常处理以及完成了中间指令的数据结构和检查。现在需要做的事中间指令到汇编的转换程序。
为了尽快看到结果(因为优化并不是JIT第一版的重点),完成一个C简化版编译器,现在采取的策略如下:
1、不优化,将每一条中间指令都转换到几条汇编指令,而忽略中间指令之间的关系。
2、将变量进行4字节对齐。因为x86要求参数要4字节对齐,那么变量也对其的话,将会简化很多事情。譬如说将一个8字节的函数结果(EDX:EAX)写进一个变量就很容易了。
3、如果出现大于8个字节的函数结果,那么在函数启动的时候将EAX存进EBX。因为最简单的指令生成方法是不需要动用EBX的。
4、函数开始的时候保存所有寄存器,结束的时候恢复,不计算实际用了多少寄存器。
用了这么多层数据结构将JIT要命的部分分离开了。以后即使上面有很多个语言,我重写中间指令到汇编指令的代码也是完全没有影响的,实现了各个部分单独变化的目标。
posted on 2009-04-10 23:30
陈梓瀚(vczh) 阅读(1906)
评论(1) 编辑 收藏 引用 所属分类:
JIT