发明名称 动态二进制翻译系统中超级块的寄存器分配方法
摘要 本发明涉及一种动态二进制翻译系统中超级块的寄存器分配方法,是一种根据二进制翻译系统超级块的特性简化了的图染色寄存器分配方法。利用超级块内变量的活性信息构造干扰图,然后把寄存器分配问题转化为干扰图的精简问题,使得超级块的目标代码能够最大限度的使用目标平台寄存器,具有目标代码执行效率高的特性。分配时根据动态二进制翻译领域的不同需要对基本块中的变量进行寄存器的分配,分为普通分配、强制要求特定寄存器分配、强制要求非特定寄存器分配。本发明具有可重定向特性,对于超级块具有分配效果好、分配开销低的特点,适用于多种目标平台,尤其适用于多源多目标的二进制翻译平台。
申请公布号 CN101546271A 申请公布日期 2009.09.30
申请号 CN200910050440.7 申请日期 2009.04.30
申请人 上海交通大学 发明人 管海兵;梁阿磊;蔡战举;姜玲燕;李晓龙
分类号 G06F9/45(2006.01)I 主分类号 G06F9/45(2006.01)I
代理机构 上海交达专利事务所 代理人 毛翠莹
主权项 1、一种动态二进制翻译系统中超级块的寄存器分配方法,其特征在于包括如下步骤:1)初始化寄存器分配器的目标平台,包括目标平台的寄存器数目,目标平台的寄存器之间的数据移动机器指令,内存到寄存器的数据移动机器指令以及寄存器到内存的数据移动机器指令;2)初始化寄存器分配器内部数据结构,包括初始化目标平台寄存器状态的数据结构数据,所有目标平台寄存器状态设为空闲,所匹配的变量设为空,所在指令设为空;初始化所有超级块变量所在位置为内存;清空用来存放超级块指令干扰列表的队列;初始化用来存放单条指令里变量干扰信息的干扰列表为空;初始化寄存器预分配结果表为空;3)从每个超级块尾部到头部遍历,依次查看每条指令的变量,从中先找到DEF类型的变量,查看干扰列表里是否有这个变量,如果有,则从干扰列表里移除该变量,再找到USE类型的变量,查看干扰列表里是否有这个变量,如果没有,则插入这个变量;遍历完这条指令的所有变量后,把干扰列表插入到队列头部,并把该干扰列表作为产生下一条指令的干扰列表的基础,直到超级块的第一条指令为止,得到超级块指令干扰列表组成的队列,完成干扰信息的收集;4)初始化干扰图为不存在干扰边;从队首到队尾遍历超级块指令干扰列表组成的队列,依次处理队列里的干扰列表,凡在同一个列表的两个变量,都在干扰图里对应这对变量的位置记录一条干扰边;直到队列尾部的干扰列表被处理,干扰图的生成过程结束;5)通过干扰图查看每个变量的干扰边,如果干扰边数目少于目标平台寄存器数目,则把该变量入栈,并删除干扰图里与该变量相关的干扰边,如果不少于目标平台寄存器数目,则查看下一个变量,如果干扰图里剩余变量的干扰边都不少于目标平台寄存器数目,则选择其中一个变量作为牺牲变量,从干扰图里删除,并删除与之相关的干扰边;然后再查看下一个变量,直到干扰图所有变量入栈为止,干扰图简化过程结束;6)从栈顶依次弹出变量,找到一个没有分配给与其存在干扰关系变量的寄存器,分配给该变量,把结果记录在预分配结果表里;直到栈空为止,寄存器预分配结束;7)根据不同翻译需要对超级块中的变量进行寄存器的分配,分为普通分配、强制要求特定寄存器分配、强制要求非特定寄存器分配;8)对于普通分配,依次查看寄存器的状态,如果有寄存器状态是已被分配,并且被分配的对象是该变量,则继续保持这种分配,否则查看预分配结果表;如果有寄存器分配给该变量,并且该寄存器状态是已被分配,则查看干扰图,如果被分配给的变量与当前变量不存在干扰关系,则直接分配该寄存器,如果该变量后续指令是被使用的,把变量对应内存的值装载进该寄存器,如果存在干扰关系,保存该寄存器里的值到被分配给的变量对应的内存,然后分配该寄存器,如果该变量后续指令是被使用的,把变量的值装载进该寄存器;如果该寄存器为受保护状态,则查看所有的寄存器,如果存在空闲状态的寄存器,则分配它,如果该变量后续指令是被使用的,把变量对应的内存里的值装载进该寄存器,如果没有空闲寄存器,则查找一个已被分配的寄存器,保存该已被分配的寄存器里的值到该已被分配的寄存器对应的变量的内存,然后分配该已被分配的寄存器,如果该变量后续指令是被使用的,把变量对应的内存里的值装载进该寄存器;如果预分配结果里没有寄存器分配给它,则找到一个非受保护状态的寄存器,优先选择空闲寄存器分配给该变量,如果找到的是空闲寄存器,且该变量后续指令是被使用的,把该变量对应内存里的值装载进该寄存器,如果找到的是已被分配的寄存器,首先把该已给分配的寄存器的值保存在该已被分配的寄存器对应的变量的内存,如果该变量后续指令是被使用的,把该变量对应内存里的值装载进该寄存器;9)对于强制要求特定寄存器分配,如果强制要求寄存器已被分配的变量恰好是该变量,则继续保持这种分配;如果强制要求寄存器被分配的变量不是该变量,且被分配的变量与该变量存在干扰关系,则把强制要求特定寄存器的值保存到对应变量的内存,完成数据保护处理,把该强制要求特定寄存器分配给该变量,如果该变量后续指令是被使用的并且该变量在内存里,把该变量对应的内存的数据装载到强制要求特定寄存器,如果该变量后续指令是被使用的并且该变量在寄存器里,把该变量对应的寄存器的数据装载到强制要求特定寄存器;如果强制要求寄存器被分配的变量不是该变量,且被分配的变量与该变量不存在干扰关系,则把该强制要求特定寄存器分配给该变量,如果该变量后续指令是被使用的并且该变量在内存里,把该变量对应的内存的数据装载到强制要求特定寄存器,如果该变量后续指令是被使用的并且该变量在寄存器里,把该变量对应的寄存器的数据装载到强制要求特定寄存器;10)对于强制要求非特定寄存器分配,先保存强制要求非特定寄存器的状态到一个临时变量,如果强制要求非特定寄存器已经分配给了该变量,则保存强制要求非特定寄存器到该变量对应的内存,更改临时变量的状态为空闲,更改强制要求非特定寄存器的状态为受保护的,然后对该变量进行普通分配,将受保护的强制要求非特定寄存器改回临时变量的值,并以普通分配的结果作为分配结果;如果强制要求非特定寄存器没有分配给该变量,更改强制要求非特定寄存器的状态为受保护的,然后对该变量进行普通分配,将受保护的强制要求非特定寄存器改回临时变量的值,并以普通分配的结果作为分配结果。
地址 200240上海市闵行区东川路800号