随笔-341  评论-2670  文章-0  trackbacks-0
    大约两个多星期没做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

评论:
# re: JIT脚本引擎:继续工作 2009-04-13 00:50 | expter
都是人,差距咋那么大捏。。

膜拜一下。。。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理