一种risc处理器及其浮点栈指令翻译装置及方法

文档序号:6464105阅读:245来源:国知局

专利名称::一种risc处理器及其浮点栈指令翻译装置及方法
技术领域
:本发明涉及计算机领域内的翻译技术,特别是涉及一种RISC处理器及其浮点栈指令翻译装置及方法。
背景技术
:二进制翻译是解决软件移植问题中的一种重要技术,它可以将一种指令集体系结构(InstructionSetArchitecture,ISA)上的可执行禾呈序翻译到另一种指令集体系结构的计算机上执行,并且具备很高的执行效率。二进制翻译现在也经常用来将一种指令集体系结构(ISA)上的可执行程序翻译到同种指令集体系结构(ISA)的较高版本上执行,以在同一个系列的计算机中使用高档次的机器高效地运行低档次机器上开发的软件。特别是随着虚拟机技术的普及,二进制翻译技术的重要性也越来越大,很多虚拟机软件中都不同程度的运用了二进制翻译技术以保障虚拟机的运行效率。IA32体系结构(或称为X86体系结构)是以Intel、AMD公司为主导开发的一种指令集体系结构,是目前市场上应用最广泛的指令集体系结构之一,目前流行的大量软件是基于IA32体系结构的,因此,针对IA32的二进制翻译技术研究也格外受到重视,新推出处理器的很多厂家希望借助二进制翻译技术或虚拟机技术在自己的计算机上运行IA32软件。IA32的x87浮点运算部件(FloatingpointUnit,FPU)比较特殊,x87浮点运算部件执行环境包括8个数据寄存器,以及状态寄存器和控制寄存器等功能部件,主要作用是完成浮点运算。其中最为特殊的是浮点运算部件(FPU)的8个数据寄存器,被组织为栈结构。浮点运算部件(FPU)的状态寄存器中有3位表示栈顶的位置,即T0P。例如T0P的值等于3时,则3号数据寄存器为栈顶寄存器ST(O),4号、5号数据寄存器分别为ST(1)、ST(2),依次类推。指令中对数据寄存器的引用均为对ST(i)的引用(其中i二0…7),因此具体是引用的几号数据寄存器随TOP值的不同而不同。当进行入栈操作,如FLD指令时,T0P的值减一,当进行出栈操作,如FSTP、FADDP等指令时,TOP的值加一。FPU数据寄存器栈组织如图1所示。关于x87FPU更详细的介绍可参考IA32技术手册。而在ALPHA、MIPS等精简指令系统计算机(ReducedInstructionSetComputer,简称RISC)体系结构的处理器中,大多不存在类似x87浮点运算部件(FPU)的栈式结构,指令中可以直接以寄存器号引用逻辑寄存器进行运算。因此在以IA32为源体系结构,以ALPHA或MIPS等RISC系列为目标体系结构的二进制翻译器中,如何有效的消除上述浮点运算部件的差异,从而翻译生成正确高效的目标代码是一个较为复杂的问题。一种现有方法是在内存中设置模拟x87浮点运算部件(FPU)数据寄存器及TOP部件的数据结构,同时在翻译每一条FPU指令时均对内存中这些数据结构进行模拟操作,但这种方法开销太大,经常不能满足二进制翻译系统的性能要求;中国专利号200410074532.6的专利申请"二进制翻译中对X86中浮点运算的处理方法"中公开了一种在基本块内采用目标体系结构寄存器去映射FPU数据寄存器的处理方法,可以利用寄存器操作减少开销,但该方法寄存器间的映射关系是固定的,即一旦ST(i)与某个目标寄存器相映射,则持续保持这种映射关系。
发明内容本发明的目的在于提供一种RISC处理器及其浮点栈指令翻译装置及方法,其能够节省因固定映射寄存器而产生的数据交换和数据传输指令翻译时的开销,提高二进制翻译系统的效率。为实现本发明目的而提供的一种RISC处理器,包括浮点寄存器和内存,其特征在于,还包括浮点栈指令翻译装置,用于利用所述浮点寄存器、内存中的一整型数据变量和一浮点数组变量来模拟浮点栈指令的寄存器操作,将复杂指令集体系结构的源体系结构的浮点栈指令翻译到所述RISC处理器中。所述浮点栈指令翻译装置,包括寄存器选择模块,寄存器模拟模块,以及翻译器,其中所述寄存器选择模块,用于选择目标体系结构的多个浮点寄存器作为目标寄存器;所述寄存器模拟模块,用于模拟复杂指令体系结构的TOP寄存器操作和数据寄存器操作;所述寄存器模拟模块选择一整型数据变量,用于模拟复杂指令体系FPU执行环境的TOP寄存器,称为模拟TOP寄存器;以及一浮点数组变量,用于模拟复杂指令体系FPU执行环境中的数据寄存器,称为模拟数据寄存器;所述翻译器,包括寄存器翻译模块,用于根据不同的浮点栈指令,选择未被分配的目标寄存器,将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。所述寄存器翻译模块,包括寄存器分配子模块,寄存器映射子模块,寄存器操作子模块,其中所述寄存器分配子模块,用于从目标寄存器中选择未被分配的目标寄存器,作为源体系结构的浮点栈指令的模拟数据寄存器映射的目标寄存器,同时在目标寄存器分配表中将所述被选择的目标寄存器标记为被分配状态;所述寄存器映射子模块,用于在翻译器翻译浮点栈指令时,根据不同的浮点栈指令,将所述浮点栈指令的模拟数据寄存器映射到相应的目标寄存器,并更新寄存器映射表和目标寄存器分配表;所述寄存器操作子模块,在翻译浮点栈指令时,根据寄存器映射子模块所映射的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。所述寄存器分配子模块,还包括初始化子模块,用于在翻译开始时,初始化所有的可分配目标寄存器为未被分配状态。所述复杂指令集体系结构的源体系结构处理器,是指IA32的复杂指令集体系结构处理器;所述RISC处理器,是指ALPHA或MIPS精简指令集体系结构处理器。所述寄存器选择模块选择的浮点寄存器个数不少于8个。为实现本发明目的还提供一种RISC处理器浮点栈指令翻译装置,包括寄存器选择模块,寄存器模拟模块,以及翻译器,其中所述寄存器选择模块,用于选择目标体系结构的多个浮点寄存器作为目标寄存器;所述寄存器模拟模块,用于模拟复杂指令体系结构的TOP寄存器操作和数据寄存器操作;所述寄存器模拟模块选择一整型数据变量,用于模拟复杂指令体系FPU执行环境的TOP寄存器,称为模拟TOP寄存器;以及一浮点数组变量,甩于模拟复杂指令体系FPU执行环境中的数据寄存器,称为模拟数据寄存器;所述翻译器,包括寄存器翻译模块,用于根据不同的浮点栈指令,选择未被分配的目标寄存器,将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。所述寄存器翻译模块,包括寄存器分配子模块,寄存器映射子模块,寄存器操作子模块,其中所述寄存器分配子模块,用于从目标寄存器中选择未被分配的目标寄存器,作为源体系结构的浮点栈指令的模拟数据寄存器映射的目标寄存器,同时在目标寄存器分配表中将所述被选择的目标寄存器标记为被分配状态;所述寄存器映射子模块,用于在翻译器翻译浮点栈指令时,根据不同的浮点栈指令,将所述浮点栈指令的模拟数据寄存器映射到相应的目标寄存器,并更新寄存器映射表和目标寄存器分配表;所述寄存器操作子模块,在翻译浮点栈指令时,根据寄存器映射子模块所映射的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。所述寄存器分配子模块,还包括初始化子模块,用于在翻译开始时,初始化所有的可分配目标寄存器为未被分配状态。为实现本发明目的更提供-一种RISC处理器浮点栈指令翻译方法,包括下列步骤步骤A,选择目标体系结构的多个浮点寄存器作为目标寄存器,并以一整型数据变量和浮点数组变量,作为模拟TOP寄存器和模拟数据寄存器,模拟源体系结构的TOP寄存器操作和数据寄存器;歩骤B,在翻译浮点栈指令中,根据不同的浮点栈指令,选择未被分配的目标寄存器,将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。所述步骤B包括下列步骤步骤Bl,在翻译浮点栈指令中,从目标寄存器中选择未被分配的目标寄存器,作为源体系结构的浮点栈指令的模拟数据寄存器映射的目标寄存器,同时在目标寄存器分配表中将所述被选择的目标寄存器标记为被分配状态;将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,并更新寄存器映射表和目标寄存器分配表;步骤B2,根据所映射的目标寄存器,对所述相应的目标寄存器进行翻译操作;步骤B3,根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存诉益o所述步骤B2包括下列步骤步骤B21,若翻译指令是对FPU数据寄存器进行定值操作,在翻译生成目标体系结构的指令同时,为FPU数据寄存器分配新的目标寄存器,将要定值的FPU数据寄存器映射到新分配的目标寄存器;步骤B22,若翻译指令是对FPU数据寄存器的值进行引用操作,并且该FPU数据寄存器没有映射到目标寄存器,则在翻译生成目标体系结构的指令同时,分配新的目标寄存器与FPU数据寄存器相映射,并在所述目标寄存器中装入FPU数据寄存器的值,同时在目标寄存器分配表中,被分配的目标寄存器的分配次数加1;若翻译指令是对FPU数据寄存器的值进行引用操作,并且该FPU数据寄存器已经映射到目标寄存器,则直接引用该目标寄存器,翻译生成目标体系结构的指令;步骤B23,若翻译指令是对FPU数据寄存器进行既引用又定值操作,则规定其先引用后定值,在翻译生成目标体系结构的指令同时,对FPU目标寄存器进行翻译操作,即实施重命名先按照步骤B22进行引用处理,再按照步骤B21进行定值处理;歩骤B24,翻译FXCH指令,或是FLD指令且该指令的源操作数为浮点数据寄存器,或是FST指令且该指令的目的操作数是浮点数据寄存器时,只对FPU目标寄存器进行翻译操作。所述歩骤B21包括下列步骤不论要定值的FPU数据寄存器在翻译指令之前是否己经映射到目标寄存器,都要为其分配新的目标寄存器;若上述FPU数据寄存器,设为ST(i),在翻译该指令之前已经映射到一个目标寄存器,设为Sfk,则解除ST(i)与求fk的映射关系,并在目标寄存器分配表中令Sfk的分配次数减1,并为其分配新的目标寄存器。所述歩骤B24包括下列步骤步骤B241,当前翻译的指令是FXCH指令,即交换两个FPU数据寄存器的内容,则翻译该指令时,不必生成目标体系结构的指令;只需对FPU数据寄存器进行重命名交换这两个数据寄存器各自映射的目标寄存器;步骤B242,当前翻译的指令是FLD指令,且该指令的源操作数为数据寄存器ST(i)时,其中0《i》7,则翻译该指令时,不必生成目标体系结构的指令;只需对FPU数据寄存器进行重命名将ST(0)映射到ST(i)所映射的目标寄存器上,即ST(0)与ST(i)映射到同一个目标寄存器上,同时解除ST(O)与原来目标寄存器的映射关系,同时,在目标寄存器分配表中令原来目标寄存器的分配次数减l;步骤B243,当前翻译的指令是FST指令,且该指令的目的操作数为数据寄存器ST(i)时,其中0《i》7,则翻译该指令时,不必生成目标体系结构的指令;只需对FPU数据寄存器进行重命名将ST(i)映射到ST(O)所映射的目标寄存器上,即ST(i)与ST(O)映射到同一个目标寄存器上,同时解除ST(i)与原来目标寄存器的映射关系,同时,在目标寄存器分配表中令原来目标寄存器的分配次数减l。本发明的有益效果在于1.相对于完全采用内存单元模拟FPU数据寄存器的方法,本发明提供了一种可以充分利用寄存器进行数据运算的方法,节省了访问内存的开销,具备更髙的运行效率;2.相对于固定映射FPU数据寄存器的方法,即将ST(i)固定映射到一个目标寄存器,本发明提供了一种非固定映射的重命名方法,使用该方法进行二进制翻译,对于FPU数据寄存器间的交换操作FXCH指令,以及FPU数据寄存器间的数据传送操作FLDST(i)指令,FSTST(i)指令,可以不必翻译生成目标体系结构上的指令,且能保证正确性,即优化了指令翻译,提高二进制翻译系统的运行效率。图1是现有x87FPU数据寄存器栈结构示意图2是本发明RISC处理器及其浮点栈指令翻译装置的结构示意图3是本发明的RISC处理器浮点栈指令翻译方法流程图4是FPU数据寄存器与目标寄存器映射关系示意图5是目标寄存器分配表示示意图6(a)~图6(g)是实施例示例中翻译第17条指令前后寄存器映射表和目标寄存器分配表内容变化图。具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种RISC处理器及其浮点栈指令翻译装置及方法进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明的一种RISC处理器及其浮点栈指令翻译装置及方法,是针对在以IA32为源体系结构的二进制翻译器中,如果翻译的目标体系结构没有类似IA32浮点寄存器栈的硬件支持条件下,采用软件方法翻译IA32指令集中的浮点栈指令(FPU指令)的方法。该方法在指令翻译阶段,将IA32为源体系结构中的x87浮点运算部件(FPU)数据寄存器映射到目标体系结构上不固定的浮点寄存器,即进行软件寄存器重命名处理,相比于固定映射寄存器的方法,该方法具有更高的执行效率。下面详细说明本发明的RISC处理器及其浮点栈指令翻译装置。在本发明实施例中,以IA32作为源体系结构,目标体系结构为ALPHA体系的RISC处理器,即将IA32可执行程序翻译到ALPHA指令集RISC处理器上执行为例而进行说明。但是,应当说明的是,本发明同样适用于其他复杂指令集(CISC)体系结构作为源体系结构的情况,以及其他精简指令集体系结构(如MIPS)作为目标体系结构的情况,除本发明实施例所述的情况外,其他复杂指令集体系结构作为源体系结构翻译到精简指令集体系结构作为目标体系结构的情况,同样在本发明的保护范围之内。如图2所示,本发明的RISC处理器1,包括浮点寄存器2,内部存储器(内存)3,以及浮点栈指令翻译装置4,用于在将复杂指令集体系结构的浮点栈指令翻译到所述精简指令集体系结构的处理器(RISC)过程中,利用目标寄存器Sfk、整型变量T0P、浮点数组变量DATA—REG[8]来模拟浮点栈指令的寄存器操作,将复杂指令集体系结构的源体系结构的浮点栈指令翻译到精简指令集体系结构的处理器(RISC)中。所述复杂指令集体系的源体系结构处理器,是指IA32等的复杂指令集体系纟吉构(ComplexInstructionSetComputer,CISC)处理器。所述精简指令集体系结构的目标体系结构的处理器,是指将要运行翻译后的指令的体系结构处理器,如ALPHA或MIPS等精简指令集(RISC)体系结构处理器。所述浮点栈指令翻译装置4,包括寄存器选择模块10,寄存器模拟模块20,以及翻译器30,其中所述寄存器选择模块10,用于选择目标体系结构的多个浮点寄存器2作为目标寄存器,记为Sfk。寄存器模拟模块20,用于模拟IA32源体系结构的TOP寄存器操作和数据寄存器操作。所述寄存器模拟模块20选择一整型数据变量TOP,用于模拟X87FPU执行环境的TOP寄存器,称为模拟TOP寄存器;以及一浮点数组变量DATA—REG[8],用于模拟X87FPU执行环境中的数据寄存器,称为模拟数据寄存器,记为ST(0)ST(7)。所述翻译器30,包括寄存器翻译模块100,用于根据不同的浮点栈指令,选择未被分配的目标寄存器,将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。所述寄存器翻译模块100,包括寄存器分配子模块130,寄存器映射子模块120,寄存器操作子模块110,其中所述寄存器分配子模块130,用于从目标寄存器中选择未被分配的目标寄存器Sfk,作为源体系结构的浮点栈指令(FPU)的模拟数据寄存器ST映射的目标寄存器,同时在目标寄存器分配表中将所述被选择的目标寄存器标记为被分配状态。所述寄存器映射子模块120,用于在翻译器翻译浮点栈指令时,根据不同的浮点栈指令,将所述浮点栈指令的模拟数据寄存器映射到相应的目标寄存器,并更新寄存器映射表和目标寄存器分配表。所述寄存器操作子模块110,在翻译浮点栈指令时,根据寄存器映射子模块120所映射的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。较佳地,所述寄存器分配子模块130,还包括初始化子模块131,用于在翻译开始时,初始化所有的可分配目标寄存器为未被分配状态。所述寄存器选择模块,从目标体系结构ALPHA中,选择多个浮点寄存器Sfk作为可分配的寄存器,本发明将这些可分配的寄存称为目标寄存器。较佳地,所选择的可分配目标寄存器Sfk的个数应不少于源体系结构的模拟数据寄存器的个数,即不少于8个。因为在极端的情况下,每个模拟数据寄存器可能都需要用到,且如果这些模拟数据寄存器中的数据各不相同,那么在其翻译到目标体系结构时,二进制翻译过程中需要为每一个模拟数据寄存器各分配一个目标寄存器,因此选择不少于8个浮点寄存器可以保证有充足的目标寄存器分配给模拟数据寄存器。如果只选择8个浮点寄存器作为目标寄存器,则只有当8个模拟数据寄存器与这8个目标寄存器己经一一映射时才会找不到处于未被分配状态的寄存器,这也意味着不会有多个模拟数据寄存器映射到同一个目标寄存器上,因此不必分配新的目标寄存器与模拟数据寄存器相映射,可仍然保持原来的映射关系不变,不会导致二进制翻译系统出错。翻译器30将IA32源体系结构的浮点栈指令(FPU指令),翻译到目标体系结构(如ALPHA、MIPS)的处理器中,根据翻译的FPU指令内容,寄存器翻译模块根据寄存器映射模块所映射的目标寄存器,对所述相应的目标寄存器进行翻译操作,即实施寄存器重命名,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。相应地,'本发明还提供一种RISC处理器浮点栈指令翻译方法,如图3所示,包括下列步骤步骤SIOO,选择目标体系结构的多个浮点寄存器作为目标寄存器Sfk,并以一整型数据变量TOP和浮点数组变量DATA一REG[8],作为模拟TOP寄存器和模拟数据寄存器,模拟源体系结构的TOP寄存器操作和数据寄存器;所述目标寄存器的个数不少于x87浮点运算部件(FPU)数据寄存器的个数,即不少于8个。在本发明实施例中,较佳地,作为一种可实施方式,选择ALPHA体系结构中的$2$10这9个浮点寄存器作为可分配目标寄存器。由于8个模拟数据寄存器最多映射8个目标寄存器,因此选择9个寄存器作为目标寄存器是足够的,且至少有一个目标寄存器处于未被分配状态,寄存器分配模块总能找到未被分配的目标寄存器,使之与模拟数据寄存器映射。一整型数据变量TOP模拟X87FPU执行环境的TOP寄存器,称为模拟TOP寄存器;一浮点数组变量DATA一REG[8]模拟X87FPU执行环境中的数据寄存器,称为模拟数据寄存器,记为ST(0)ST(7)。步骤S200,在翻译浮点栈指令中,根据不同的浮点栈指令,选择未被分配的目标寄存器,将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。翻译器将IA32源体系结构的浮点栈指令(FPU指令),翻译到目标体系结构(如ALPHA、MIPS)的处理器中,根据不同的浮点栈指令翻译的FPU指令内容,选择未被分配的目标寄存器,映射到模拟数据寄存器,对所述相应的目标寄存器进行翻译操作,或称为实施寄存器重命名。并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。在本发明实施例中,翻译器对FPU指令的翻译,除了寄存器翻译(或称寄存器重命名)过程与现有技术不同以外,其他的翻译过程都可以依照现有的标准翻译流程而进行,因而,在本发明实施例中,不再一一详细描述。较佳地,在翻译器翻译FPU指令时,首先选择一个线性指令序列作为翻译单元,然后翻译器对此翻译单元中的FPU指令逐条进行二进制翻译。所述线性指令序列的翻译单元,可以是单入口单出口的指令序列(通常称为基本块),也可以是单入口多出口的指令序列(通常称为trace)。表1示例出一个单入口单出口的指令序列的翻译单元,即指令流从第1条指令顺序执行到最后1条指令,不会有其它指令跳转到他们之间的任何一条指令上。表1翻译单元<table>tableseeoriginaldocumentpage17</column></row><table>在翻译器翻译FPU指令的过程中,对选择出来的指令序列的翻译单元中的指令逐条进行翻译。在翻译单元的入口处(即翻译指令序列第一条指令之前),将源休系结构中FPU指令的所有数据寄存器的值写入到目标体系结构的内存的模拟数据寄存器ST中,即数组DATA—REG[]中,并与目标寄存器映射;在翻译单元出口处(即翻译完指令序列最后一条指令之后),根据目标寄存器的变化,将所有变更的FPU数据更新到模拟数据寄存器ST,即数组DATA—REG[]中,保证在下一个翻译单元入口处模拟数据寄存器的都有正确的值。本发明实施例中,在翻译单元的出口处,只更新必要的FPU数据,没有发生变化的FPU数据不必进行更新操作,以节省目标体系结构的内存和寄存器开销。具体进一步地,所述步骤S200,包括下列歩骤步骤S210,在翻译浮点栈指令中,从目标寄存器中选择未被分配的目标寄存器Sfk,作为源体系结构的浮点栈指令(FPU)的模拟数据寄存器ST映射的目标寄存器,同时在目标寄存器分配表中将所述被选择的目标寄存器标记为被分配状态;将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,并更新寄存器映射表和目标寄存器分配表;从目标寄存器中选择一个还未被分配的目标寄存器作为x87浮点运算部件(FPU)数据寄存器的映射目标寄存器,同时将被选择出来的目标寄存器变为已被分配状态。为了方便实施目标寄存器分配,在本发明实施例中,如图2所示,设置一寄存器映射表记录模拟数据寄存器与目标寄存器的映射关系;设置一个目标寄存分配表记录每一个目标寄存器的分配情况。图4示出模拟数据寄存器ST(O),ST(3),ST(4),ST(6)分别映射到目标寄存器Sf3,$f4,$f2,Sf3上,也可以表述为目标寄存器Sf2,Sf4分别映射到模拟数据寄存器ST(4),ST(3),目标寄存器Sf3映射到模拟数据寄存器ST(0)和ST(6)。图5表示目标寄存器Sf2和Sf3各被分配1次,Sf4被分配2次,其它目标寄存器未被分配。利用目标寄存器分配表可以知道每个目标寄存器是否己经分配出去,以及映射到那几个模拟数据寄存器。将一个目标寄存器分配出去后,要更新寄存器映射表和目标寄存器分配表。步骤S220,根据所映射的目标寄存器,对所述相应的目标寄存器进行翻译操作;对翻译单元内的指令逐条进行翻译,在翻译第一条指令之前所有的目标寄存器为未被分配状态。进一歩地,所述步骤S220包括下列步骤步骤S221,若翻译指令是对FPU数据寄存器进行定值操作,在翻译生成目标体系结构的指令同时,为FPU数据寄存器分配新的目标寄存器,将要定值的FPU数据寄存器映射到新分配的目标寄存器;不论要定值的FPU数据寄存器在翻译指令之前是否已经映射到目标寄存器,都要为其分配新的目标寄存器;若上述FPU数据寄存器,设为ST(i),在翻译该指令之前已经映射到某一个目标寄存器,假设为Sfk,则解除ST(i)与$fk的映射关系,并在目标寄存器分配表中令Sfk的分配次数减1,并为其分配新的目标寄存器。步骤S222,若翻译指令是对FPU数据寄存器的值进行引用操作,并且该FPU数据寄存器没有映射到目标寄存器,则在翻译生成目标体系结构的指令同时,分配新的目标寄存器与FPU数据寄存器相映射,并在所述目标寄存器中装入FPU数据寄存器的值,同时在目标寄存器分配表中,被分配的目标寄存器的分配次数加1;若翻译指令是对FPU数据寄存器的值进行引用操作,并且该FPU数据寄存器已经映射到目标寄存器,则直接引用该目标寄存器,翻译生成目标体系结构的指令;步骤S223,若翻译指令是对FPU数据寄存器进行既引用又定值操作,则规定其先引用后定值,在翻译生成目标体系结构的指令同时,对FPU目标寄存器进行翻译操作,即实施重命名先按照步骤S222进行引用处理,再按照步骤S221进行定值处理;步骤S224,翻译FXCH指令,或是FLD指令且该指令的源操作数为浮点数据寄存器,或是FST指令且该指令的目的操作数是浮点数据寄存器时,不必翻译生成目标体系结构的指令,只对FPU目标寄存器进行翻译操作,即实施重命名;进一步地,所述步骤S234包括下列步骤步骤S2241,当前翻译的指令是FXCH指令,即交换两个FPU数据寄存器的内容,则翻译该指令时,如表2所示,不必生成目标体系结构的指令;只需对FPU数据寄存器进行重命名交换这两个数据寄存器各自映射的目标寄存器;步骤S2242,当前翻译的指令是FLD指令,且该指令的源操作数为数据寄存器ST(i)时,其中0《i》7,则翻译该指令时,不必生成目标体系结构的指令;只需对FPU数据寄存器进行重命名将ST(0)映射到ST(i)所映射的目标寄存器上,即ST(0)与ST(i)映射到同一个目标寄存器上,同时解除ST(O)与原来目标寄存器的映射关系,同吋,在目标寄存器分配表中令原来目标寄存器的分配次数减1;步骤S2243,当前翻译的指令是FST指令,且该指令的目的操作数为数据寄存器ST(i)时,其中0《i^7,则翻译该指令时,不必生成目标体系结构的指令;只需对FPU数据寄存器进行重命名将ST(i)映射到ST(O)所映射的目标寄存器上,即ST(i)与ST(O)映射到同一个目标寄存器上,同时解除ST(i)与原来目标寄存器的映射关系,同时,在目标寄存器分配表中令原来目标寄存器的分配次数减l。步骤S230,根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。整型数据变量TOP(模拟TOP寄存器)模拟x87浮点运算部件(FPU)执行环境的TOP寄存器,当遇到入栈操作的FPU指令时,T0P寄存器的值减1,如果T0P寄存器的值减1后小于0,则令TOP寄存器的值为7;当遇到出桟操作的FPU指令时,TOP寄存器的值加1,如果TOP寄存器的值加1后大于7,则令TOP寄存器的值为0。浮点数组变量DATA—REG[8]来模拟x87浮点运算部件(FPU)执行环境中的数据寄存器,TOP寄存器的值指示栈顶元素的位置,数据寄存器ST(i)表示浮点数组变量DATA一REG[8]中从TOP寄存器的值开始第i个元素(i以8为模)。因此数据寄存器ST(i)与DATA—REG[8]的对应关系用公式(1)表达ST(i)^DATA—REG[(TOP+i)%8](1)这里数据寄存器ST(i)实际上等同于按照公式(1)所定义的数组元素DATA—REG[(TOP+i)%8],即ST(i)是DATA—REG[(TOP+i)。/。8]的别名。如果Sfk是第k个目标寄存器,一旦ST(i)与一目标寄存器Sfk建立了映射关系,则数据寄存器ST(i)与目标寄存器Sfk建立了映射关系。在翻译器翻译FPU指令过程中,根据翻译的FPU指令内容,当模拟TOP寄存器的值发生变化时,模拟数据寄存器DATA一REG[8]各元素保持原来已经建2立起来的与目标寄存器的映射关系,ST(i)按照公式(1)以变化后的模拟TOP寄存器的值计算与模拟数据寄存器DATA—REG[(T0P十iH8]的对应关系,从而,模拟TOP寄存器的值改变后的模拟数据寄存器ST(i)不再与原来的目标寄存器$fk映射而与新的目标寄存器映射。例如模拟TOP寄存器的值为4时,模拟数据寄存器ST(O)是DATA_REG[4]的别名,若模拟数据寄存器ST(0)与目标寄存器Sf2建立了映射关系,意味着DATA—REG[4]与Sf2建立了映射关系;当模拟TOP寄存器的值变成3时,模拟数据寄存器DATA—REG[4]仍然保持与Sf2的映射关系,而此时按照公式(1),ST(1)是DATA—REG[4]的别名,ST(l)与Sf2映射;ST(0)是DATA—REG[3]的别名,不再与Sf2映射。较佳地,进一歩地,在更改寄存器映射关系时要取消原来的映射关系,并使与原来数据寄存器相映射的目标寄存器被分配次数减1。如果只选择8个寄存器作为目标寄存器,则只有当8个FPU数据寄存器与这8个目标寄存器已经一一映射时才会找不到处于未被分配状态的寄存器,这也意味着不会有多个FPU数据寄存器映射到同一个目标寄存器上,此时不必分配新的目标寄存器与FPU数据寄存器相映射,可仍然保持原来的映射关系不变。下面以表2所示的FPU指令翻译为例,进一步详细说明本发明的RISC处理器浮点栈指令翻译方法,首先,在翻译单元入口处初始化所有的可分配寄存器为未被分配状态,即目标寄存器分配表中各目标寄存器的分配次数为0;初始化T0P二4。对翻译单元内的指令逐条进行翻译,即从该翻译单元中的第一条指令翻译到最后一条指令。由于T0P二4,则ST(O)^DATA—REG[4]。指令翻译如下指令1,如图6(a)所示,TOP值减1模8,T0P=3;由于该指令FPU数据寄存器进行定值,分配一个新的目标寄存器Sf2,并将该FPU数据寄存器映射到目标寄存器Sf2,在目标寄存器分配表中令Sf2的分配次数加1,此时ST(O)>DATA—REG[3]^$f2;指令2,如图6(b)所示,T0P值减1模8,T0P二2;由于该指令FPU数据寄存器进行定值分配一个新的目标寄存器Sf3,并将该FPU数据寄存器映射到目标寄存器Sf3,在目标寄存器分配表中令Sf3的分配次数加1,此时,此时ST(O)》DATA一REG[2]—$f3;原来的ST(O)变成ST(l),ST(l)^DATA—REG[3]■>$f2;指令3,如图6(c)所示,T0P二2不变;由于该指令FPU数据寄存器进行定值,分配一个新的目标寄存器Sf4,并将该FPU数据寄存器映射到目标寄存器Sf4,在目标寄存器分配表中令Sf4的分配次数加1;由于该FPU数据寄存器在翻译该指令之前已经映射到目标寄存器Sf3,则解除该数据寄存器与求f3的映射关系,通过在目标寄存器分配表中令Sf3的分配次数减1,此时Sf3的分配次数为O,ST(O)—DATA—REG[2]">$f4;ST(l)—DATA—REG[3]》$f2;指令4,如图6(d)所示,T0P值减1模8,T0P二1;由于该指令是特殊情况的一种,即该指令是FLD指令,且该指令的源操作数为数据寄存器ST(l),该指令表示将源操作数ST(l)中的数据传送到数据寄存器ST(O)中,则翻译该指令时只需将ST(O)映射到原ST(l)所映射的目标寄存器Sf2上,即ST(O)与原ST(1)映射到同一个目标寄存器Sf2上,通过在目标寄存器分配表中令Sf2的分配次数加1,此时Sf2的分配次数为2,同时解除原ST(0)与原来目标寄存器Sf4的映射关系,此时ST(l)映射到目标寄存器Sf4,ST(2)映射到目标寄存器Sf2,此时,ST(O)—DATA—REG[1]—$f2;ST(l)—DATA_REG[2]~>$f4,ST(2)—DATA_REG[3]~>$f2;指令5,如图6(e)所示,T0P4不变;由于该指令是特殊情况的一种,即当前翻译的指令是FXCH指令,即交换两个FPU数据寄存器的内容,则翻译该指令时只需交换这两个数据寄存器各自映射的目标寄存器,不必翻译生成目标体系结构的指令;即原ST(O)解除与目标寄存器Sf2的映射关系,而与原ST(1)的目标寄存器Sf4相映射;同理,原ST(l)解除与目标寄存器Sf4的映射关系,而与原ST(O)的目标寄存器Sf2相映射;原ST(2)的映射关系不变;各目标寄存器的分配次数不变,此时,ST(O)—DATA一REG[1]—$f4;ST(l)+DATA—REG[2]^$f2,ST(2)^DATA—REG[3]>^$f2;指令6,如图6(f)所示,T0P二1不变;由于该指令FPU数据寄存器进行定值,分配一个新的目标寄存器Sf5,并将该FPU数据寄存器映射到目标寄存器Sf5,在目标寄存器分配表中令Sf5的分配次数加1;由于该FPU数据寄存器在翻译该指令之前己经映射到目标寄存器Sf4,则解除该数据寄存器与Sf4的映射关系,通过在目标寄存器分配表中令Sf4的分配次数减1,此时Sf4的分配次数为0;其他映射关系不变,此时,ST(O)—DATA—REG[l]+$f5;ST(l)DATA一REG[2」—$f2,ST(2)—DATA—REG[3]^$f2;指令7,如图6(g)所示,将原ST(O)中的数据存放到内存中地址为addrl处,同时原ST(0)同时解除该数据寄存器与Sf5的映射关系,通过在目标寄存器分配表中令Sf5的分配次数减l,此时Sf5的分配次数为0;此时ST(O)与目标寄存器Sf2相映射,ST(l)与目标寄存器Sf2相映射;TOP值加1模8,T0P=2,此时,ST(O)^DATA—REG[2]~>$f2;ST(l)+DATA—REG[3]^$f2。如表2所示,按照本发明RISC处理器浮点栈指令翻译方法,对翻译单元中的指令依次进行翻译,得到的目标体系结构指令如表2的第3列所示,而如果不实施本发明,翻译得到的目标体系结构指令如表2的第2列所示。在出口处需要将发生变更的FPU数据寄存器的值存回到模拟数据寄存器中,本例中两种方法处理一样。从表2中可见第3列翻译出的指令数目较少,具备更高的效率。表2对翻译单元所示的指令序列进行翻译得到的目标体系结构指令<table>tableseeoriginaldocumentpage23</column></row><table>本发明的有益效果在于:1.相对于完全采用内存单元模拟FPU数据寄存器的方法,本发明提供了一种可以充分利用寄存器进行数据运算的方法,节省r访问内存的开销,具备更高的运行效率;2.相对于固定映射FPU数据寄存器的方法,即将ST(i)固定映射到一个目标寄存器,本发明提供了一种非固定映射的重命名方法,使用该方法进行二进制翻译,对于FPU数据寄存器间的交换操作FXCH指令,以及FPU数据寄存器间的数据传送操作FLDST(i)指令,FSTST(i)指令,可以不必翻译生成目标体系结构上的指令,且能保证正确性,即优化了指令翻译,提高二进制翻译系统的运行效率。通过结合附图对本发明具体实施例的描述,本发明的其它方面及特征对本领域的技术人员而言是显而易见的。以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行解释。权利要求1.一种RISC处理器,包括浮点寄存器和内存,其特征在于,还包括浮点栈指令翻译装置,用于利用所述浮点寄存器、内存中的一整型数据变量和一浮点数组变量来模拟浮点栈指令的寄存器操作,将复杂指令集体系结构的源体系结构的浮点栈指令翻译到所述RISC处理器中。2.根据权利要求1所述的RISC处理器,其特征在于,所述浮点栈指令翻译装置,包括寄存器选择模块,寄存器模拟模块,以及翻译器,其中所述寄存器选择模块,用于选择目标体系结构的多个浮点寄存器作为目标寄存器;所述寄存器模拟模块,用于模拟复杂指令体系结构的TOP寄存器操作和数据寄存器操作;所述寄存器模拟模块选择一整型数据变量,用于模拟复杂指令体系FPU执行环境的TOP寄存器,称为模拟TOP寄存器;以及一浮点数组变量,用于模拟复杂指令体系FPU执行环境中的数据寄存器,称为模拟数据寄存器;所述翻译器,包括寄存器翻译模块,用于根据不同的浮点栈指令,选择未被分配的目标寄存器,将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。3.根据权利要求2所述的RISC处理器,其特征在于,所述寄存器翻译模块,包括寄存器分配子模块,寄存器映射子模块,寄存器操作子模块,其中所述寄存器分配子模块,用于从目标寄存器中选择未被分配的目标寄存器,作为源体系结构的浮点栈指令的模拟数据寄存器映射的目标寄存器,同时在目标寄存器分配表中将所述被选择的目标寄存器标记为被分配状态;所述寄存器映射子模块,用于在翻译器翻译浮点栈指令时,根据不同的浮点栈指令,将所述浮点栈指令的模拟数据寄存器映射到相应的目标寄存器,并更新寄存器映射表和目标寄存器分配表;所述寄存器操作子模块,在翻译浮点栈指令时,根据寄存器映射子模块所映射的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。4.根据权利要求3所述的RISC处理器,其特征在于,所述寄存器分配子模块,还包括初始化子模块,用于在翻译开始时,初始化所有的可分配目标寄存器为未被分配状态。5.根据权利要求1至4任一项所述的RISC处理器,其特征在于,所述复杂指令集体系结构的源体系结构处理器,是指IA32的复杂指令集体系结构处理器;所述RISC处理器,是指ALPHA或MIPS精简指令集体系结构处理器。6.根据权利要求2所述的RISC处理器,其特征在于,所述寄存器选择模块选择的浮点寄存器个数不少于8个。7.—种RISC处理器浮点栈指令翻译装置,其特征在于,包括寄存器选择模块,寄存器模拟模块,以及翻译器,其中-所述寄存器选择模块,用于选择目标体系结构的多个浮点寄存器作为目标寄存器;所述寄存器模拟模块,用于模拟复杂指令体系结构的TOP寄存器操作和数据寄存器操作;所述寄存器模拟模块选择一整型数据变量,用于模拟复杂指令体系FPU执行环境的TOP寄存器,称为模拟TOP寄存器;以及一浮点数组变量,用于模拟复杂指令体系FPU执行环境中的数据寄存器,称为模拟数据寄存器;所述翻译器,包括寄存器翻译模块,用于根据不同的浮点栈指令,选择未被分配的目标寄存器,将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。8.根据权利要求7所述的RISC处理器浮点栈指令翻译装置,其特征在于,所述寄存器翻译模块,包括寄存器分配子模块,寄存器映射子模块,寄存器操作子模块,其中所述寄存器分配子模块,用于从目标寄存器中选择未被分配的目标寄存器,作为源体系结构的浮点栈指令的模拟数据寄存器映射的目标寄存器,同时在目标寄存器分配表中将所述被选择的目标寄存器标记为被分配状态;所述寄存器映射子模块,用于在翻译器翻译浮点栈指令时,根据不同的浮点栈指令,将所述浮点栈指令的模拟数据寄存器映射到相应的目标寄存器,并更新寄存器映射表和目标寄存器分配表;所述寄存器操作子模块,在翻译浮点栈指令时,根据寄存器映射子模块所映射的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。9.根据权利要求8所述的RISC处理器浮点栈指令翻译装置,其特征在于,所述寄存器分配子模块,还包括初始化子模块,用于在翻译开始时,初始化所有的可分配目标寄存器为未被分配状态。10.—种RISC处理器浮点栈指令翻译方法,其特征在于,包括下列步骤步骤A,选择目标体系结构的多个浮点寄存器作为目标寄存器,并以一整型数据变量和浮点数组变量,作为模拟TOP寄存器和模拟数据寄存器,模拟源体系结构的TOP寄存器操作和数据寄存器;步骤B,在翻译浮点栈指令中,根据不同的浮点栈指令,选择未被分配的目标寄存器,将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。11.根据权利要求10所述的RISC处理器浮点栈指令翻译方法,其特征在于,所述步骤B包括下列步骤步骤B1,在翻译浮点栈指令中,从目标寄存器中选择未被分配的目标寄存器,作为源体系结构的浮点栈指令的模拟数据寄存器映射的目标寄存器,同时在目标寄存器分配表中将所述被选择的目标寄存器标记为被分配状态;将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,并更新寄存器映射表和目标寄存器分配表;歩骤B2,根据所映射的目标寄存器,对所述相应的目标寄存器进行翻译操作;步骤B3,根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器。12.根据权利要求11所述的RISC处理器浮点栈指令翻译方法,其特征在于,所述歩骤B2包括下列步骤步骤B21,若翻译指令是对FPU数据寄存器进行定值操作,在翻译生成目标体系结构的指令同时,为FPU数据寄存器分配新的目标寄存器,将要定值的FPU数据寄存器映射到新分配的目标寄存器;步骤B22,若翻译指令是对FPU数据寄存器的值进行引用操作,并且该FPU数据寄存器没有映射到目标寄存器,则在翻译生成目标体系结构的指令同时,分配新的目标寄存器与FPU数据寄存器相映射,并在所述目标寄存器中装入FPU数据寄存器的值,同时在目标寄存器分配表中,被分配的目标寄存器的分配次数加1;若翻译指令是对FPU数据寄存器的值进行引用操作,并且该FPU数据寄存器已经映射到目标寄存器,则直接引用该目标寄存器,翻译生成目标体系结构的指令;步骤B23,若翻译指令是对FPU数据寄存器进行既引用又定值操作,则规定其先引用后定值,在翻译生成目标体系结构的指令同时,对FPU目标寄存器进行翻译操作,即实施重命名先按照步骤B22进行引用处理,再按照步骤B21进行定值处理;步骤B24,翻译FXCH指令,或是FLD指令且该指令的源操作数为浮点数据寄存器,或是FST指令且该指令的目的操作数是浮点数据寄存器时,只对FPU目标寄存器进行翻译操作。13.根据权利要求12所述的RISC处理器浮点栈指令翻译方法,其特征在于,所述步骤B21包括下列步骤不论要定值的FPU数据寄存器在翻译指令之前是否已经映射到目标寄存器,都要为其分配新的目标寄存器;若上述FPU数据寄存器,设为ST(i),在翻译该指令之前已经映射到一个目标寄存器,设为$&,则解除ST(i)与Sfk的映射关系,并在目标寄存器分配表中令$&的分配次数减1,并为其分配新的目标寄存器。14.根据权利要求12或13所述的RISC处理器浮点栈指令翻译方法,其特征在于,所述步骤B24包括下列步骤步骤B241,当前翻译的指令是FXCH指令,即交换两个FPU数据寄存器的内容,则翻译该指令时,不必生成目标体系结构的指令;只需对FPU数据寄存器进行重命名交换这两个数据寄存器各自映射的目标寄存器;步骤B242,当前翻译的指令是FLD指令,且该指令的源操作数为数据寄存器ST①时,其中0《i^7,则翻译该指令时,不必生成目标体系结构的指令;只需对FPU数据寄存器进行重命名将ST(O)映射到ST(i)所映射的目标寄存器上,即ST(O)与ST(i)映射到同一个目标寄存器上,同时解除ST(O)与原来目标寄存器的映射关系,同时,在目标寄存器分配表中令原来目标寄存器的分配次数减1;步骤B243,当前翻译的指令是FST指令,且该指令的目的操作数为数据寄存器ST(i)时,其中0《i》7,则翻译该指令时,不必生成目标体系结构的指令;只需对FPU数据寄存器进行重命名将ST(i)映射到ST(O)所映射的目标寄存器上,即ST(i)与ST(O)映射到同一个目标寄存器上,同时解除ST(i)与原来目标寄存器的映射关系,同时,在目标寄存器分配表中令原来目标寄存器的分配次数减1。全文摘要本发明公开了RISC处理器及其浮点栈指令翻译装置及方法,其选择目标体系结构的多个浮点寄存器作为目标寄存器,并以一整型数据变量和浮点数组变量,作为模拟TOP寄存器和模拟数据寄存器,模拟源体系结构的TOP寄存器操作和数据寄存器;在翻译浮点栈指令中,根据不同的浮点栈指令,选择未被分配的目标寄存器,将所述浮点栈指令的模拟数据寄存器映射到相应的所述未被分配的目标寄存器,对所述相应的目标寄存器进行翻译操作,并根据目标寄存器的变化更新模拟TOP寄存器以及模拟数据寄存器;其能够节省因固定映射寄存器而生产的数据交换和数据传输指令翻译时的开销,提高二进制翻译系统的效率。文档编号G06F9/45GK101286122SQ20081011223公开日2008年10月15日申请日期2008年5月22日优先权日2008年5月22日发明者崔慧敏,武成岗,龙陈申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1