专利名称::二进制翻译中标志位的优化处理方法
技术领域:
:本发明涉及指令集体系结构、二进制翻译
技术领域:
,特别是一种二进制翻译中标志位的优化处理方法,及相应编译优化技术。
背景技术:
:二进制翻译是代码移植的重要方法之一,可以将一种指令集体系结构(InstructionSetArchitecture,ISA)上的代码翻译到另一种ISA上运行。二进制翻译的目的不仅仅是仿真源ISA,更高的目标是翻译产生的代码在目标ISA上运行的速度等同甚至超过源ISA的原有代码。基于软件的二进制翻译,可以分为三类ERAltman,DKaeliandYSheffer.Welcometotheopportunitiesofbinarytranslation.IEEEComputer,2000,33(3)40~45解释执行,静态翻译,动态翻译,由于三类方法各有所长,近年来的研究更倾向于三类方法的结合。无论何种翻译形式,都必须与原程序的语义相同、执行结果相同,因此目标ISA中必须保存在源ISA的专用寄存器中保存的系统状态。在CISCISA上(如Intel的X86系列、Digital的VAX、以及Motorola68000等)存在为保存条件码而用到的标志寄存器,很多指令的执行都会对其中的一部分标志位进行设置,而另外一些指令(如条件指令)可以通过这些标志位的状态来决定程序下一步的执行。然而对于RISCISA(如MIPS,Alpha),通常并不包含设置状态标志的指令。因此,目标RISCISA只能通过一系列指令来仿真源ISA的状态标志。由于标志寄存器使用频繁,对它的处理既关系到程序执行的正确性,又关系到程序翻译后的执行效率。国际上对二进制翻译的研究已有二十年的历史,所有涉及到标志位的翻译系统,都对标志位进行了处理和优化,所采用的方法与各自系统的特点有关,如Digital公司的FX!RJHookwayandMAHerdeg.DigitalFX!32combiningemulationandbinarytranslation.DigitalTechnicalJ,1977,9(1)3~12和Sun公司的WabiPHohensee,MMyszewski,andDReese.WABICPUemulation.HotChipsVIII,PaloAlto,CA1996都采用延迟计算方法对模拟器中的标志位处理进行了优化;Queensland大学的UQBTCCifuentesandMVanEmmerik.UQBTadaptablebinarytranslationatlowcost.IEEEComputer,2000,33(3)60~66等一些静态翻译系统,使用数据流分析法删除冗余标志位处理;Transmeta公司的CodeMorphingAKlaiber.ThetechnologybehindCrusoeprocessor.TransmetaCorporation,TechRepJan.2000软件则有专门的硬件支持标志位的处理。目前对静态翻译采用的数据流分析优化标志位的方法已经比较成熟,本发明着重解决了解释执行和动态翻译中标志位处理优化问题,提出了新的标志位优化处理方法。不同指令集体系结构(ISA)之间的差异,对利用二进制翻译技术移植代码造成了很大的困难,其中为了实现没有标志位寄存器支持的目标ISA对源ISA标志位的仿真,需要增加大量的目标ISA代码。
发明内容本发明提供了一种二进制翻译中标志位的优化处理方法,其目的在于减少在二进制翻译过程中,由于对源ISA的标志位仿真而生成的大量用于标志位处理的目标ISA代码,利用按需生成标志位处理指令的原则减少冗余代码,提高目标代码的质量,加速二进制翻译过程和翻译生成代码的执行。本发明解决了从源ISA到目标ISA的二进制翻译过程中的标志位处理问题,可以很好地减少用于仿真源ISA标志位的目标ISA指令,从而提高此类翻译器的效率。本发明针对二进制翻译中的解释执行提出了即时计算与延迟计算相结合(InstantComputingandDelayedComputing)的解决方法,用于优化解释执行中的标志位处理,减少了仅用延迟计算方法带来的目标代码访存开销,以下简称ICDC法。本发明针对二进制翻译中的动态翻译提出了数据流分析和延迟计算相结合(DataFlowAnalysisandDelayedComputing)的解决方法,优化动态翻译时的标志位处理,该方法在基本翻译单元内采用数据流分析方法删除处理冗余标志位的目标代码,而在翻译单元之间采用延迟计算方法减少翻译单元之间处理冗余标志位而生成的冗余目标代码。以下简称DFADC法。通过上述两种方法,可以使翻译时减少用于仿真源ISA的标志位而产生的目标代码数量,提高了翻译代码的质量,从而使翻译执行速度得到提高。本发明用于计算机之间二进制翻译过程中的标志位处理,广泛用于计算机之中。一、解释执行中的即时计算与延迟计算相结合的方法(ICDC法)统计发现,多个标志位的定值并非是孤立的,通常是一条指令对多个标志同时定值。例如X86处理器中,绝大部分对标志位定值的指令,都是对全部常用标志一起定值,参见IntelArchitectureSoftwareDeveloper’sManualVolume1BasicArchitecture的附录A。为了避免大量访存操作,我们对所有标志定义相同的信息存储单元,用来保存同一条指令信息。当某条指令对所有N个标志位同时定值时,使用延迟计算的方法,将该指令的操作码、操作数及运算结果保存到预设的存储单元供延迟计算标志位时使用;而当某条指令仅对N个标志位中的部分定值,则根据定值的标志位数目,按照下述两种规则将延迟计算与即时计算结合使用a)若定值的标志数目少于等于N/2个,则在模拟该指令时将这三个标志也根据运算情况即时计算出来,存放到模拟的标志寄存器中,当后续指令引用这几个标志时,可以直接取用寄存器中的状态,无需从信息存储单元中取出信息延迟计算出标志。信息存储单元的内容保持不变,不用本指令的信息覆盖。b)若定值的标志数大于N/2个,则首先将不被本指令定值的几个标志位状态确定下来(这可能需要通过信息存储单元中前面指令保存的信息,延迟计算出来,将结果存入标志寄存器)。然后再将该指令的相关信息存入存储信息单元,以供后续指令引用这些被本指令定值的标志时使用(后续指令需据此信息延迟计算标志)。ICDC法流程描述定义一个信息存储单元M{opcode,operand1,operand2,result}。定义模拟的标志寄存器Rfx,用于保存源ISA的N个标志位。定义与每个标志Fx相对应的状态指示Sx{defined,undefined},defined表示该标志已经被计算,且结果已经置于Rfx中。当解释到某条指令,按照下述流程解释执行该指令1.若该指令需要引用某个标志,则读取Rfx的相应Sx状态i.若Sx=undefined,即该标志没有被计算,则读取M中的信息,做相应的标志计算,得出标志状态,将该状态写回相应Rfx,并将Rfx相应Sx改为defined,然后根据该结果解释执行该条指令;ii.若Sx=defined,即该标志已经被计算,则直接根据Rfx中的标志状态进行该指令的解释执行。2.若该指令对n个标志有定值,则i.若n<=N/2,则在解释执行该指令的同时,即时计算出这n个标志状态,写回相应Rfx,并将Rfx相应的Sx状态改为defined;ii.若n>N/2,则首先计算本指令不对其定值的那N-n个标志状态(这取决于这N-n个标志原来对应的Sx,可能需要通过读取M中的值进行计算,也可能这些标志状态已经是计算好存入Rfx中的),之后这几个标志的Sx改为defined,结果写回相应的Rfx。最后将该指令的相应信息保存到M,且将需定值的n个标志对应的Sx改为undefined;重复上述步骤直到结束。上述即时计算与延迟计算相结合的标志位处理方法,利用源ISA中的指令对标志位定值的特点,减少了延迟计算模拟标志位所造成的目标ISA代码访存开销,使解释执行的效率得到了提高。二、动态翻译中的数据流分析与延迟计算相结合的方法(DFADC法)动态二进制翻译仅在源ISA程序代码被执行时才翻译这段代码,源程序的控制流关系是随着程序的执行逐渐形成的,而并非在动态时刻生成全部的控制流图。通常情况下,在翻译一段代码时(此时并未执行本段代码),并不知道其后继,因而静态翻译所采用的数据流分析方法,在动态翻译中只能应用在一个翻译单元的局部范围内(如一个基本块)。为了能使后继翻译单元能够引用前驱翻译单元为标志位定的值,只能在翻译时在每个翻译单元的出口增加几条指令来计算出本翻译单元内部对标志位最终的定值结果,而不论后继翻译单元是否会引用。所以,数据流分析删除冗余标志位定值的方法对动态翻译达到的优化效果有限,在每个翻译单元出口所增加的计算标志位值的指令,仍然可能是冗余标志位定值指令。针对动态翻译的特点,我们在动态翻译过程中的标志位优化,结合静态翻译和解释执行的标志位优化策略,提出在基本翻译单元内采用数据流分析方法,而在翻译单元间使用延迟计算的方法,使其既能够减少基本翻译单元内部,又能减少基本翻译单元之间因处理冗余标志位而生成的冗余目标代码。该方法规则如下a)翻译单元中的标志定值引用进行数据流分析,标识出冗余的标志位定值,在翻译该翻译单元时,不对此类定值进行处理。b)若某条指令是该翻译单元中对某个标志位的最后定值点,则在翻译该指令时,生成保存当前状态(可能包括源操作数,执行结果以及操作码)的指令,供以后真正需要该标志值时计算使用,但并不生成即时计算当前标志值的指令。c)若某条指令需要对某个标志进行引用,但该标志值的定值点并不是在本翻译单元内部,则需要多翻译生成若干指令,用于读取前驱翻译单元为这个标志位定值而保存的信息,并且依据这些信息进行标志位的计算。DFADC法流程描述为了实现上述基本翻译单元内数据流分析,翻译单元间延迟计算的方法,我们对静态数据流分析略做修改,使之既可以删除基本翻译单元内的冗余定值,又可以为延迟计算提供信息,从而可以指明某次定值是基本单元内部使用、基本单元外部可能使用、或是无用定值。获取这些信息后,按照下述流程处理在翻译某个基本翻译单元B时,若翻译指令Iy,y[1,N]则1.若Iy引用Fxa)若Sx为defined,翻译生成指令,用于读取Rfx中Fx的值,b)否则,翻译生成指令,用于读取Mx中的值,并计算Fx;(即为延迟计算)翻译生成指令,用于根据Fx的不同值而执行不同路径或完成不同的功能;2.若Iy定值Fxa)若该定值将被翻译单元内指令使用,则翻译生成指令,用于计算Fx并将计算得出的Fx值存入Rfx中,还要将Sx改为defined;b)若该定值可能会被翻译单元外指令使用,则翻译生成指令,用于将延迟计算Fx所需的当前信息保存到Mx并将Sx改为undefined;c)若该定值是无用定值,则不生成任何处理标志位的指令;3.若Iy对Fx无影响,则不生成任何处理标志位的指令;上述流程中,Fx为标志值、Iy为指令、B为基本翻译单元、Rfx为标志寄存器、Sx为标志寄存器的相应状态位、Mx为信息存储单元(Mx),该翻译单元有N条指令。其中Rfx保存标志Fx的值;Sx用于指明相应的标志寄存器Rfx中的值是否可用,若为defined,则可用,若为undefined,则需要对该标志值计算后才能使用;Mx用于保存用于计算Fx正确值的信息。DFADC方法中提到的翻译单元间使用延迟计算方法,同样结合了部分延迟计算,由于在ICDC方法中已经说明,在此不再赘述。图1是本发明的二进制翻译中标志位即时计算和延迟计算的示意图;图2是本发明的解释执行时对标志位处理的即时计算与延迟计算相结合的ICDC处理方法的流程图;图3是本发明的动态翻译时对标志位处理的基本翻译单元内数据流分析与基本翻译单元间延迟计算相结合的DFADC处理方法的流程图。图1中,可以看出这两种处理标志位的方法的区别图中A表示了源ISA的一段代码,(1)表示该处的指令执行后会改变某个标志位F的值,(2)表示该处的指令需要根据标志F的值进行相应的操作(如x86的CMP指令改变ZF标志,JZ指令根据ZF标志决定控制转移是否成功);图B表示目标ISA对图A所示的标志位定值进行即时计算,即在处理(1)处的指令时,模拟全部标志位定值语义,供处理(2)处的指令时使用;图C表示目标ISA对图A所示的标志位定值进行延迟计算,即在处理(1)处的指令时,不模拟标志位定值语义,而是保存(1)处的指令信息,直到处理(2)处的指令时,才读取保存的指令信息,仅模拟生成该处实际需要使用的标志值。可以看出延迟计算与即时计算相比,节省了许多无用标志模拟的开销,但也增加了保存和读取指令信息的开销。图2中,流程图中字母含义信息存储单元M{opcode,operand1,operand2,result}。模拟的标志寄存器Rfx,用于保存源ISA的N个标志位Fx内容。与每个标志Fx相对应的状态指示Sx{defined,undefined},defined表示该标志已经被计算,且结果已经置于Rfx中。首先执行步骤S1取出一条源ISA指令,若该指令不是结束指令,则分下述三种情况1、对某些标志位有引用,则执行步骤S2依次读出Rfx所对应的状态Sx,若Sx为undefined,则执行步骤S3读取信息存储单元M中的内容延迟计算出标志fx的状态,写回Rfx,并将相应的Sx改为defined。最后执行步骤S4,、根据Rfx中的标志状态Fx解释执行该指令。读取Rfx标志状态,解释执行该指令。2、对n个(n>0)标志位有定值,则若n>N/2则依次执行步骤S5.1~S5.4;1、延迟计算出剩余的N-n个标志状态,并写回相应的Rfx。S5.2、相应的Sx置definedS5.3、保存该指令的相应信息到信息存取单元M,且需定值的那n个标志对应的Sx置为undefined(以备延迟计算);若n<=N/2则依次执行步骤S6.1~S6.3;6.1、即时计算出这n个标志状态,并写回相应的RfxS6.2、相应的Sx置为definedS6.3、解释执行该指令。3、若该指令对标志位无引用、定值,则执行步骤S7,直接解释执行该指令。图3中的字母含义同图2。预处理部分对一个动态翻译单元完成改进的数据流分析,获取了该翻译单元每条指令对标志位定值的分类信息,在此信息基础上再按下述步骤依次处理该翻译单元的每条指令。执行步骤S8,取出源ISA指令,若该指令不是翻译单元结束指令,则1、若该指令引用标志Fx,则判断Fx所对应的Sx是否为defined,若是,则说明Rfx寄存器中的值可以直接使用,执行步骤S9,翻译生成用于读取Rfx中Fx值的目标指令,执行步骤S10翻译生成指令,用于根据Fx的不同值而执行不同路径或完成不同的功能;若不是,则说明此时Rfx中的Fx值不是正确的值,则执行步骤S11翻译生成指令,用于读取Mx中的值,并延迟计算出Fx;将该值存入Rfx,Sx置defined,延迟计算出正确的Fx值,然后执行步骤S10。2、若该指令定值标志Fx,则根据预处理得到的信息,进行下述处理若该定值在本翻译单元内部使用,则执行步骤S12翻译生成指令,用于计算Fx并将计算得出的Fx值存入Rfx中,还要将Sx改为defined;;若该定值可能在本翻译单元外使用,则执行步骤S13翻译生成指令,用于将延迟计算Fx所需的当前信息保存到Mx并将Sx改为undefined;;若该定值不被使用,则执行步骤S14不生成任何处理标志位的指令;权利要求1.一种二进制翻译中标志位的优化处理方法,解释执行中标志位的ICDC解决方法有别于单独的标志位即时计算或延迟计算方法,其特征是,将两种方法结合起来,既利用了延迟标志计算来减少冗余的标志计算开销,又利用即时计算来减少纯延迟计算方法造成的访存开销。2.一种二进制翻译中标志位的优化处理方法,动态翻译中标志位的DFADC解决方法,其特征在于,在基本翻译单元内部使用数据流分析法减少处理标志生成的目标代码;利用延迟计算法减少基本翻译单元之间的因处理标志而增加的目标代码。3.根据权利要求1和2的解决方法,其特征在于,在二进制翻译过程中,减少不必要的标志位处理指令,加快二进制代码翻译执行过程。4.根据权利要求1的二进制翻译中标志位的优化处理方法,解释执行时对标志位处理的即时计算与延迟计算相结合,其步骤如下步骤S1取出一条源ISA指令,若该指令不是结束指令,则分下述三种情况1)对某些标志位有引用,则执行步骤S2依次读出Rfx所对应的状态Sx,若Sx为undefined,则执行步骤S3读取信息存储单元M中的内容延迟计算出标志fx的状态,写回Rfx,并将相应的Sx改为defined;最后执行步骤S4、根据Rfx中的标志状态Fx解释执行该指令,读取Rfx标志状态,解释执行该指令;2)对n个(n>0)标志位有定值,则若n>N/2则依次执行步骤S5.1~S5.4;1、延迟计算出剩余的N-n个标志状态,并写回相应的Rfx,S5.2、相应的Sx置definedS5.3、保存该指令的相应信息到信息存取单元M,且需定值的那n个标志对应的Sx置为undefined,以备延迟计算;若n<=N/2则依次执行步骤S6.1~S6.3;6.1、即时计算出这n个标志状态,并写回相应的RfxS6.2、相应的Sx置为definedS6.3、解释执行该指令;3)若该指令对标志位无引用、定值,则执行步骤S7,直接解释执行该指令。5.根据权利要求2的二进制翻译中标志位的优化处理方法,动态翻译时对标志位处理的基本翻译单元内数据流分析与基本翻译单元间延迟计算相结合,其步骤如下步骤S8,取出源ISA指令,若该指令不是翻译单元结束指令,则1)若该指令引用标志Fx,则判断Fx所对应的Sx是否为defined,若是,则说明Rfx寄存器中的值可以直接使用,执行步骤S9,翻译生成用于读取Rfx中Fx值的目标指令,执行步骤S10翻译生成指令,用于根据Fx的不同值而执行不同路径或完成不同的功能;若不是,则说明此时Rfx中的Fx值不是正确的值,则执行步骤S11翻译生成指令,用于读取Mx中的值,并延迟计算出Fx;将该值存入Rfx,Sx置defined,延迟计算出正确的Fx值,然后执行步骤S10;2)若该指令定值标志Fx,则根据预处理得到的信息,进行下述处理若该定值在本翻译单元内部使用,则执行步骤S12翻译生成指令,用于计算Fx并将计算得出的Fx值存入Rfx中,还要将Sx改为defined;若该定值可能在本翻译单元外使用,则执行步骤S13翻译生成指令,用于将延迟计算Fx所需的当前信息保存到Mx并将Sx改为undefined;若该定值不被使用,则执行步骤S14不生成任何处理标志位的指令。全文摘要本发明涉及指令集体系结构、二进制翻译
技术领域:
,本发明针对二进制翻译中的解释执行提出了即时计算与延迟计算相结合的解决方法,用于优化解释执行中的标志位处理。对二进制翻译中的动态翻译提出了数据流分析和延迟计算相结合的解决方法,优化动态翻译时的标志位处理,该方法在基本翻译单元内采用数据流分析方法删除处理冗余标志位的目标代码,而在翻译单元之间采用延迟计算方法减少翻译单元之间处理冗余标志位而生成的冗余目标代码。以下简称DFADC法。通过上述两种方法,可以使翻译时减少用于仿真源ISA的标志位而产生的目标代码数量,提高了翻译代码的质量,从而使翻译执行速度得到提高。文档编号G06F9/30GK1529229SQ20031010244公开日2004年9月15日申请日期2003年10月21日优先权日2003年10月21日发明者马湘宁,冯晓兵,张兆庆,武成岗,唐锋申请人:中国科学院计算技术研究所