[发明专利]一种基于寄存器映射的动态编译方法无效
申请号: | 201110203365.0 | 申请日: | 2011-07-20 |
公开(公告)号: | CN102236575A | 公开(公告)日: | 2011-11-09 |
发明(设计)人: | 杨珉;张源;彭智俊;朱东来 | 申请(专利权)人: | 复旦大学 |
主分类号: | G06F9/45 | 分类号: | G06F9/45 |
代理公司: | 上海正旦专利代理有限公司 31200 | 代理人: | 陆飞;盛志范 |
地址: | 200433 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 寄存器 映射 动态 编译 方法 | ||
1.一种基于寄存器映射的动态编译方法,将所有的Java函数划分为两类函数,即简单函数和复杂函数,其中,简单函数:虚拟寄存器使用数目不超过实际机器物理寄存器总个数;复杂函数:虚拟寄存器使用数目大于或等于实际机器物理寄存器总个数;其特征在于利用RISC处理器拥有大量寄存器的特性,在动态编译阶段,以函数为粒度,将基于寄存器的Java字节码中所使用的虚拟寄存器和物理寄存器通过一一映射进行绑定;通过动态编译直接生成本地代码。
2.根据权利要求1所述的动态编译方法,其特征在于,所述进行寄存器一一映射的策略根据函数类型的不同而不同:
在编译简单函数时,采取如下寄存器映射策略:
(1)虚拟寄存器和物理寄存器的映射关系是由函数本身决定,固定为一一映射;
(2)在每个函数中,所有的虚拟寄存器指派一个物理寄存器与之映射,即使是在字节码中并未使用到寄存器也不能例外;而任意一个物理寄存器都分配给至少一个虚拟寄存器进行映射绑定;
(3)被分配的物理寄存器总数目等于虚拟寄存器的总数目;
在编译复杂函数时,采取如下寄存器映射策略:
(1)首先将实际的物理寄存器与字节码中的虚拟寄存器一一映射,此外,将不能映射到物理寄存器的虚拟寄存器映射到线程栈上一段溢出区;
(2)在每个函数中,所有的虚拟寄存器指派一个物理寄存器与之映射,即使是在字节码中并未使用到寄存器也不能例外;而任意一个物理寄存器都分配给至少一个虚拟寄存器进行映射绑定;
(3)同编译简单函数一样,虚拟寄存器和物理寄存器或者溢出区的映射关系是由函数本身决定,固定为一一映射;
(4)被分配的物理寄存器数目加上溢出区使用的数目等于虚拟寄存器的总数目;
(5)对于那些被分配到溢出区的虚拟寄存器,在使用他们时,将他们先读取到物理寄存器中,然后进行操作;如果操作后,其值发生了改变,将改变后的值写回到溢出区相应的位置。
3.根据权利要求2所述的动态编译方法,其特征在于,在编译某些复杂的基于寄存器设计的字节码的指令时,选择一些已经被映射过的物理寄存器做为临时寄存器;在编译该条字节码指令时,这些被选作用充当临时寄存器的物理寄存器中的值将被压入栈上进行保存,编译完后,取回栈上保存的值存入物理寄存器中进行恢复。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于复旦大学,未经复旦大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110203365.0/1.html,转载请声明来源钻瓜专利网。