通过指令集结构转换的指令集模拟 背景
1、发明领域
本发明涉及计算机系统。特别是,本发明涉及微处理器指令的模拟。
2、相关领域的描述
改进一个处理器使之引入增强的性能时,重要的是保持与以先前模型开发的应用程序之间的软件兼容性。一个特别的难题就是用于逻辑与/或算术操作的数据的表示法。
举个例子来说,浮点(FP)数的格式有单精度(SP)和双精度(DP)两种数据格式。SP格式典型地由32-位表示法表示,而DP格式可以有2种不同的表示类型:常规64-位格式和扩展的82-位格式。常规的处理器典型地使用64-位FPDP格式作为存储在寄存器和存储器中的操作数的格式。增强型的处理器典型地使用扩展的82-位FPDP格式作为存储在寄存器中的操作数的格式,而使用常规的64-位FPDP格式作为存储在存储器中的操作数的格式。举个例子来说,英特尔架构(IA)处理器有32-位型和64-位型:IA-32处理器和IA-64处理器。IA-32处理器使用64-位FPDP格式作为存储在寄存器和存储器中的操作数的格式。IA-64处理器使用64-位FPDP格式作为存储器操作数地格式,以及使用扩展的82-位FPDP格式作为寄存器操作数的格式。
将使用常规数据格式进行操作的指令集转换到使用增强的数据格式进行操作的指令集被称作指令集结构(ISA)转换。在这样一个ISA转换中,其中用常规操作方式(例如,64-位FPDP)编写的应用程序被传送到使用增强操作方式(例如,82-位FPDP)的处理器时,就会发生操作数不匹配,反之亦然。操作数不匹配会导致性能降低,以及在多数情形中可能导致软件不兼容。
因此,在技术上有必要提供一种方法,以便在使用扩展数据格式的处理器上对一种数据格式的指令集进行模拟。
概述
本发明是在处理器上模拟一个指令的方法和设备。指令用第一数据格式操作操作数,处理器用第二数据格式进行操作。操作数从第一数据格式转换到第二数据格式。然后处理器用第二数据格式执行指令产生第二数据格式的结果。该结果从第二数据格式转换到第一数据格式。
附图简述
根据以下本发明的附图详述,本发明的特征和优点将变得明显。
图1是说明了可以实施本发明一个实施方案的计算机系统的框图。
图2是说明了依照本发明的一个实施方案的标签结构的框图。
图3是说明了依照本发明的一个实施方案的格式转换的框图。
图4是说明了依照本发明的一个实施方案的模式转换的框图。
图5是说明了依照本发明的一个实施方案的语境转换的框图。
图6是说明了依照本发明的一个实施方案的数字格式转换的框图。
图7是说明了依照本发明的一个实施方案模拟逻辑指令的过程的框图。
图8是说明了依照本发明的实施方案的调用操作的框图。
图9是说明了依照本发明的实施方案用于目标代码转换(OCT)的一个过程的流程图。
描述
本发明是一种方法和设备,用于在具有一种数据格式表示法的处理器上模拟用另一种数据格式表示的指令操作。该技术包括许多实施方案。一种标签结构提供了要与每一个寄存器相联系的标签位。提供了各种用于转换数据表示的方案。在模式转换或语境转换中使用带有跳转指令的代码修补以便跳转到合适代码。转换指令是为算术和逻辑指令在整型和浮点数之间进行数据表示转换。本发明提供了在处理器结构和增强的处理器结构之间的软件兼容性。
在以下描述中,出于解释的目的,提出众多细节以便提供对本发明的透彻理解。不过,对于本领域的技术人员显而易见的是,为实施本发明并不要求这些特定的细节。在其它实例中,为了不搞混本发明,以框图形式说明了众所周知的电气结构和电路。
图1是说明了一个可以实施本发明一个实施方案的计算机系统的框图。该计算机系统100包括处理器110、主机总线120、存储器控制器130和存储设备150。
处理器110代表了任何类型结构的中央处理单元,如复杂指令集计算机(CISC)、精简指令集计算机(RISC)、超长指令字(VLIW)或混合结构。虽然本发明是按照单处理器计算机系统来描述的,但本发明可以在多处理器计算机系统中得到实现。
存储器控制器140提供各种访问存储设备150的功能。存储器控制器140被连接到主机总线130来允许处理器访问存储设备150。存储设备150代表了一个或更多存储信息的机制。举个例子来说,存储设备150可能包括非易失性存储器或易失性存储器。这些存储器的例子包括闪存、只读存储器(ROM)或随机存取存储器(RAM)。
图1也说明了存储设备150,在那里存储了程序代码152和数据154。程序代码152表示了用于执行本发明中任何和/或全部技术所必须的代码。尤其是,程序代码152包括模拟代码153。模拟代码153在处理器110上以一种数据格式(或模式)模拟指令。数据154存储了由程序代码152使用的数据,图象数据和临时数据。尤其是数据存储器154包括数据分段155,其中包含以格式1表示的数据,格式1被称作存储器格式或扩展格式。当然,存储设备150优选地包含附加的软件(没有显示),该软件对于理解本发明不是必须的。
图1附加地说明了处理器110,包括解码单元112、执行单元114、寄存器集116和内部总线111。当然,处理器110包含附加电路,该电路对于理解本发明不是必须的。解码单元112将处理器110接收的指令解码成控制信号和/或微代码入口点。执行单元114响应这些控制信号和/或微代码入口点,执行合适的操作。寄存器集116包括多个寄存器,用以存储用格式2(称之为寄存器格式)表示的数据。
在一个实施方案中,处理器110是英特尔架构-64(IA-64)处理器。IA-64是处理64-位数据的64-位处理器。在IA-64中,64-位浮点双精度数字被表示成寄存器116(扩展或寄存器格式)中的82-位FPDP,但在存储器115中是64-位FPDP(常规或存储器格式)。32-位处理器(例如,IA-32)在其寄存器和存储器中都将一个64-位FPDP数字表示为64-位FPDP格式,该格式被称作常规格式。为保持软件的兼容性,在把为32-位处理器(例如,IA-32)开发的程序移植到64-位处理器(例如,IA-64)时,需要进行一些转化或变换。本发明的技术可用于在64-位处理器上模拟32-位指令。在下面的讨论中,处理器110被称作平台处理器而用32-位指令编写的程序或软件被称为移植程序或软件。
模拟可以使用多种方法来实现。一种方法涉及对平台处理器作细微的硬件修改。其他方法涉及通过对移植程序修补代码而进行数据格式的变换。
实现本发明所描述技术的计算机程序或软件能够在机器可读的媒体中存储和/或传输。这种机器可读的媒体的例子包括半导体存储器如随机存取存储器(RAM)、只读存储器(ROM)、可擦写ROM(EROM)、闪存、磁介质媒体、小型光盘只读存储器(CDROM)、软盘、硬盘、光盘、信号、载波等。计算机程序或代码序列模拟了这样的指令,该指令用第一数据格式操作至少一个操作数,而处理器用第二数据格式进行操作。该计算机程序或代码序列包括执行多个操作的多个代码段、子程序、子例程或函数。这些操作的例子包括将操作数从第一数据格式转换到第二数据格式,由处理器用第二数据格式执行指令来产生第二数据格式表示的结果,将该结果从第二数据格式转换成第一数据格式。使用附加的代码段来执行其他功能,如在下面描述中所解释的。
图2是说明了依照本发明的一个实施方案的一个标签结构的框图。标签结构包括要与寄存器集相联系的标签构造。
如图2所示,处理器110包括寄存器集116a和相应的标签集116b。寄存器集116a包括N个寄存器2101—210N。标签集116b包括与N个寄存器2101—210N各自相对应的N个标签2121—212N。
2121—212N中的每一个标签存储一个标签位用来指示相应寄存器的格式。例如,标签位可以用0来指明寄存器格式是64-位常规格式,而用1来指明寄存器格式是82-位扩展格式。本领域的技术人员清楚,可以使用其他的位模式。标签集提供了一种手段用以检测在操作和操作数之间是否存在不匹配。可以实现一种探测逻辑电路来将操作类型与相应的标签位进行比较。当格式不匹配时,可以调用中断来将控制转向微例程以改变操作数格式。格式不匹配不会经常发生。因此由微中断辅助引起的时间延迟是可以被接受的。
在从寄存器到存储器的所有存储中,格式由扩展格式改变到存储器格式。图2说明了将寄存器K210K的内容转移到存储器230的存储指令。
在语境转换中,由保存指令(例如,FXSAVE)将寄存器集116a保存在存储器中作为被保存的寄存器240以及由恢复指令(例如,FXRESTORE)对寄存器集116a进行恢复。当操作和操作数格式之间出现不匹配时,在第一次使用数据时进行格式转换。保存指令并不对标签集116b进行保存。在恢复时要重新设置标签来指明存储器格式。
图3是说明了一个依照本发明的一个实施方案的格式转换的框图。格式转换方法在所有操作前将64-位格式转换成82-位格式以及在所有操作后将82-位格式转换成64-位格式。格式转换包括格式1转换器320、格式2转换器360和操作340。
图3显示了操作数310、330、350和370。操作数310和370采用格式1(例如,64-位)而操作数330和350采用格式2(例如,82-位)。在操作前,格式1转换器将操作数310从格式1转换成采用格式2的操作数330。操作340是使用格式2执行的。在操作后,格式2转换器360将操作数350转换回采用格式1的操作数370。
图4是说明了一个依照本发明的一个实施方案的模式转换的框图。当采用第一模式(例如,IA32)运行的应用程序调用采用第二模式(例如,IA64)的一个应用程序时就发生模式转换(例如,ISA转换)。
模式转换包括模式1应用程序410、模式1域420、模式2域430和模式2应用程序440。模式1应用程序410调用模式2应用程序440。模式2应用程序440不了解模式1格式(例如,寄存器格式)。模式1域420通过跳转指令(例如,JUMPE)给模式2提供一个跳转。模式2域430提供参数的模式2转换。然后在模式2应用程序440中进行操作。
在从模式2应用程序440到模式1应用程序的模式转换时,分支指令(例如,BR-IA)提供了从模式2应用程序440到模式1应用程序的出口。
在模式1应用程序410中,双精度数据在寄存器中可以表示成存储器的格式或扩展格式。在模式1域420中,所有模式1应用程序410中的寄存器被保存在存储器中。模式2域430根据使用的格式从存储器装入参数。在模式2应用程序440中,双精度数据在寄存器中被转换成扩展格式。在模式2应用程序中进行操作后,分支指令将存储器中的结果参数传递到模式1应用程序410。
图5是说明了一个依照本发明的一个实施方案的语境转换500的框图。语境转换500由于中断而发生,它涉及模式1应用程序410和模式2操作系统520。正如本领域的技术人员所知道的,可能存在其他引起语境转换的原因如过程交换、多任务等。
模式1应用程序是用模式1指令集(例如,IA32)运行的应用程序。模式1应用程序410包括调用代码512和返回代码514。模式2操作系统(OS)520是用模式2指令集(例如,IA64)运行的操作系统。模式2操作系统包括修补代码522、保存代码524、模式2代码525、恢复代码526和返回代码528。
在图5说明的语境转换500中,模式1应用程序410接收到一个中断。模式1应用程序410中的寄存器采用存储器和扩展的格式。调用代码512调用模式2OS520。当控制传递到模式2OS520时,修补代码522通过执行一个修补指令(如JUMPE指令)来执行从模拟模式到本地模式的转换。所有寄存器通过修补指令被转换为存储器格式。保存代码524用位存储指令将所有模式1寄存器按位保存。位存储指令(例如,STF.SPILL)无需进行转换就可存储寄存器的内容。例如,无需进行转换就可将IA32FP寄存器作为16字节存储在存储器中。
于是模式2代码525继续执行模式2指令集(例如,IA64)来恰当地为中断或其他任务服务。在模式2代码525完成其执行后,恢复代码526用位恢复指令将保存的模式1寄存器按位恢复。位恢复指令(例如,LDF.FILL)将通过位存储指令存储在存储器中的寄存器位恢复到该寄存器中。例如,IA32FP寄存器无需经过转换就可用来自存储器的16字节进行恢复。然后返回代码528通过执行分支指令(例如,BR_IA)引起ISA转换以返回到模式1应用程序。在返回到模式1应用程序410中的返回代码514时,所有寄存器用存储器格式恢复。如果使用了标签结构,所有内部标签都被重新设置为存储器格式。模式1应用程序410中的返回代码514继续执行模式1环境中的操作。
图6是说明了一个依照本发明的一个实施方案的数字格式转换的框图。数字格式转换将压缩的32-位整型(INT)项610转换成压缩的32-位单精度(SP)项660,反之亦然。由转换序列605将压缩的32-位INT项610转换成压缩的32-位SP项660。通过使用本地转换指令如fpcvt指令将压缩的32-位SP项660转换成压缩的32-位INT项610。
转换序列605通过把项660解压缩成两个独立的部分(其中每一部分都是32-位INT项)而将压缩的32-位INT项610转换成一个解压缩后的32-位INT项620。然后通过将每一个32-位INT项转换成相应的64-位INT项来将解压缩后的32-位INT项620转换成解压缩后的64-位INT项630。接着通过将每一个64-位INT项转换成相应的82-位DP项来将解压缩后的64-位INT项630转换成解压缩后的82-位INT项640。随后通过把82-位DP项压缩或组合成压缩格式来将解压缩后的82-位DP项640转换成压缩的82-位DP项650。最后,压缩的82-位DP项650被转换成32-位DP项660。
图7是说明了一个依照本发明的一个实施方案的模拟逻辑指令的过程700的框图。
开始后,过程700判定指令是否是逻辑双精度(DP)指令如ANDNDP、ANDDPD、ORDP、XORDP(程序块710)。如果不是,终止过程700。如果该指令是逻辑DP指令中的一种,过程700接着判定操作数是否采用存储器格式(程序块720)。如果不是,终止过程700。如果操作数采用存储器格式,则过程700判定significand(有效值)是否为0(程序块730)。如果不是,则过程700将指数域设为0×1003E(程序块750)并继续执行逻辑操作(程序块760)。如果有效值为0,则过程700将指数域设为0×0(程序块740)并继续执行相应的逻辑操作(程序块760)如FAND、FANDCM、FOR或FXOR。
图8是说明了一个依照本发明的一个实施方案的调用操作800的框图。调用操作800包括调用方810和被调用方820。
调用方810采用一种数据格式来运行应用程序并调用被调用方820。被调用方820采用另一种数据格式来运行应用程序。调用方知道其寄存器的用法,因此在调用被调用方820前只保存需要被保存的寄存器。被调用方820通过在存储器将寄存器按位存储而依据标签位溢出寄存器。在该操作后,被调用方820采用存储器格式恢复保存在存储器中的寄存器位。如果格式不匹配,则被调用方820在执行调用方指令时会转换回去。在返回到调用方810后,调用方要避免假的数据类型转换。
图9是说明了一个依照本发明的一个实施方案用于目标代码转换(OCT)的过程900的流程图。
开始后,过程900判定指令是否是增强模式(EM)的本地指令(程序块910)。如果不是,终止过程900。如果指令是EM本地指令,过程900判定其是否是压缩DP指令中的一个(程序块920)。如果不是,终止过程900。如果指令是压缩DP指令,过程900使用相应的本地DP指令来模拟指令(程序块930)。过程900插入一个合适的转换指令将存储器格式(例如,64-位DP)转换成扩展的DP指令(例如,82-位DP)。转换指令典型地包括一个存储和装载序列。
接下来,过程900用扩展的DP格式(例如,82-位DP)执行该DP指令(程序块950)。在执行后,过程900插入一个转换指令将扩展的DP格式(例如,82-位DP)转换成存储器格式(例如,64-位DP)。同样,转换指令典型地包括一个存储和装载序列。然后终止过程900。
本发明提供一种技术,用以在包含扩展精度格式表示法的处理器上模拟一个双精度指令。该技术包括格式转换、语境转换、标签结构、调用协议和转换指令。
虽然本发明已经参照说明的实施方案进行描述,但该描述不应被看作是限制性的。对本领域的技术人员而言,显然,对说明的实施方案的各种修改以及其他实施方案,都应该被认为是包括于本发明的精神和范围之内的。