用于对计算机架构条件码设置进行有效仿真的方法

文档序号:6476348阅读:186来源:国知局

专利名称::用于对计算机架构条件码设置进行有效仿真的方法
技术领域
:本发明总体上涉及对计算机系统架构的仿真,并且具体地,本发明涉及用于处理在仿真过程中遇到的条件码设置的方法和系统。更具体地,本发明涉及提供指令序列,该指令序列在不使用来自目标结构的分支指令的情况下生成有效的条件码设置。
背景技术
:在实质上所有的现代数据处理系统中,各种操作(诸如,算术运算、逻辑运算甚至数据传输操作)的执行可以导致生成用于指示指令执行的输出状态的多个数据位。这些位通常被称作条件码。作为简单示例,在由于加数对于可用于结果的位数而言过大而导致溢出的算术加法之后,可以设置特殊的条件码设置。几乎每个指令的执行都涉及条件码的使用。在执行后会产生条件码变化的指令的经典示例是比较指令,如果操作数相等,则该指令将条件码设置为"0",而如果第一操作数严格小于第二操作数,则设置为"r,并且如果第一操作数严格大于第二操作数,则设置为"2"。比较指令表示条件码设置的原型使用(archetypicaluse)。出于多种原因,期望在具有不同可执行指令集的其他系统上对针对一种计算机架构设计的指令进行仿真。例如,在系统或者测试中可以使用仿真。还可以使用仿真来扩展一个数据处理系统的能力,从而使其能够处理针对另一系统编写的指令。本发明涉及指令仿真环境中的条件码设置的处理。尽管本发明的系统和方法广泛适用于存在有条件码的任何仿真方法,但是其特别适用于对z/架构进行仿真。然而,在此阐明的原理适用于任意源架构,并且适用于任何目在本说明书所考虑的原理性仿真环境中,仿真软件的任务在于接收源架构的指令流以作为车lr入,并且根据该输入生成在目标架构上运行时会产生相同结果的指令流。这些结果包括各种条件码的设置,诸如符号、进位、溢出以及各种其他指示异常和机器状态的设置。应该注意,尽管仿真环境优选地在目标架构中得到硬件或者条件码元的设置,但是本发明还涉及如下情况条件码被生成并存储在不同于目标机器中的条件码寄存器的位置。还应该特别注意,本发明有意避免了条件码生成的传统处理。通过对比较指令的简单考虑来提供该差异的示例。此指令将两个操作数进行比较,并且根据该比较的输出来设置两位的条件码。例如,如果两个操作数的比较确定它们是相同的,则将条件码设置为"0"。如果确定第一操作数严格小于第二操作数,则将条件码设置为"1"。最后,如果确定第一操作数大于第二操作数,则将条件码设置为"2"。在对比较指令进行仿真的传统方法中,结果是构建出包括有三个分支指令的指令序列。出于在下文中即将阐明的原因,不期望在目标架构指令流中存在分支指令。至少出于两个原因而不期望出现分支指令。特别地,应该注意,最为现代的数据处理架构包括称为"分支预测,,的特征。在这些架构中,针对指令流在遇到分支指令之后将遵循的两个或者多个路径来进行猜想。如果做出了正确猜想,则一切正常,并且机器处理时间由此得到加速。然而,如果做出了错误猜想,则机器硬件必须退回所采取的路径,继而选择另一路径。此时可以看出,分支指令有碍于整体处理速度。由此可见,分支指令引入了在没有分支指令时不会出现的复杂性。此外,避免分支指令的第二个原因在于,应该注意,分支指令实际上消耗了上述分支预测资源,从而使这些资源无法用于处理器执行的其他指令流。由此,分支指令不但潜在地自身存在浪费,而且还剥夺了其他指令流的有限珍贵计算机资源。由此可见,仿真系统的设计者面临进退两难的选择为了成功地仿真条件码设置在目标架构中的生成,其需要分支指令;而同时由于分支的不利之处,又希望避免分支指令。当目标架构中的条件码生成和功能与源机器架构中差别很大时,这一问题尤其严重。特别应注意,对z/架构的机器状态进行仿真的计算机程序要处理多种修改条件码的z/架构指令。简言之,z/架构是其中的条件码设置通常与其他架构(尤其是历史上从相对简单的微处理器设计发展起来的那些架构)差别很大的架构的一个主要示例。另外,z/架构中对条件码设置的修改是普遍存在的。条件码设置的生成和使用通常是执行算术运算、逻辑运算或者比较运算的结果,在这些运算之后,一个或多个条件码基于结果或者其他因素而改变。在Z/架构中条件码修改指令的普遍性、以及有时候这些指令的任意语法导致了对最终在目标架构上执行的指令流的复杂控制流。此控制流对所仿真的指令增加了相当大的空间开销和执行开销。本发明涉及更为有效地处理这一状况。尽管在此的方法和系统尤其适用于所谓的z/架构(该z/架构存在于本发明的受让人所制造并销售的大数据处理系统中),然而这绝不意味着其限于作为源指令供给基础的该Z/架构。应该注意,本发明在两种上下文或者说才莫式下使用。在一种才莫式下,源计算机指令被转换为目标机器指令,以便随后执行。在另一种操作模式下,源指令被转换为目标指令以便立刻执行,这更类似于解释器操作。宽泛地讲,本发明包含这两种操作形式。
发明内容在一种用于对来自源机器的计算机指令进行仿真以便在目标机器上生成指令序列的方法中,本发明生成目标机器指令的序列,这些指令一起进行操作,以根据进位、符号和溢出码来直接计算目标机器条件码,而不使用来自所述目标机器的分支指令。直接计算避免了分支指令的使用(分支指令的缺点已在上文中阐明)。本发明提供了特定的指导性技术,并且从这些技术中获得多个序列,以便在针对z/架构的仿真二进制转换环境中有效地设置条件码或者检测异常情况。这些技术特别地涉及使用PowerPC架构以及IntelIA32架构的状况来仿真z/架构的情况。相对于需要较多流控制的较为直接的方法来说,本发明的序列更为有效,并且通常更小。然而应该注意,本发明的原理、技术和方法不限于任何特定的目标机器架构。在此讨论的两个示例性架构仅仅是期望最大价值的最近的架构。通过本发明的技术还实现了其他特征和优点。在此详细描述了本发明的其他实施方式和方面,并且将其作为本发明要求保护的一部分。在此记载的本发明各种实施方式所满足的期望目的的列表并非暗示或者建议任何或者全部这些目的单独地或者整体上存在于本发明最为一般的实施方式或者其较为具体的任一实施方式中作为基本特征。在说明书的结论部分中,特别地指出并且明确了要求保护的本发明的主题。然而,结合附图并且参考下文描述将最好地理解本发明(作为实践的组织和方法二者)及其其他目标和优点,在附图中图1是表示在使用最多三个分支指令的仿真环境中的条件码设置的传统处理这一事实的流程图2是在计算机指令的仿真中避免分支指令的本过程的流程图3是示出使用本发明的环境示例的框图4是包含执行本发明方法的程序代码的典型计算机可读介质(例如所示出的压缩盘(CD))的俯视图;以及图5是示出了操作并使用本发明的环境的框图。具体实施例方式两个指令序列片段,该指令序列片段设置结果寄存器或者临时寄存器中的一个或者多个位,以区分条件码设置的每个可能输出。这些小代码片段通常操纵进位、符号以及溢出位,并且通过多数计算机架构上可用的、标准且通常高性能的移位、旋转和各种算术或者逻辑指令而联系为略微较大的序列。通过避免不太可能在硬件中得到优化的分支指令和较为复杂的指令两者,得到了非常有效的序列。在某些情况下,操纵PowerPC条件码寄存器本身来导出z/架构条件码设置是可行并且有效的。在这些情况下,使用PowerPC记录形式指令,并且得到的PowerPC条件寄存器由旋转和逻辑运算来操纵,以导出相应的z/架构条件码设置。下文中的示例是汇编器伪代码的形式,并且适用于可以操纵进位位(carrybit)且具有通常的移位/旋转/求反指令的多数架构。所使用的汇编器伪代码旨在详细,从而使暗含的语法清楚明了。在某些情况下,当用于实现特定操作的有效方式有可能根据不同架构而变化时,使用非标准的记忆法(mnemonics)。在下文的表中将更全面地解释这些非标准的记忆法。在每种情况下,将rX和rY命名为目标机器寄存器,而"b,,是立即值(immediatevalue)。carry—bit(进位位)是高阶比特位置的进位。表I<table>tableseeoriginaldocumentpage8</column></row><table><table>tableseeoriginaldocumentpage9</column></row><table>flip—bitrX,rY,b在rY的位置b的位值从0变成1或者从1变成O,并且将全部改变的寄存器值置于rX中对于64位寄存器,位从0-63编号,而对于32位寄存器,位从0-31编号。0是最高位,而31或者63是最低位。在下文描述中,使用以下寄存器命名习惯rA、rB:分别为赋值到寄存器中的z/架构指令的第一和第二操作数;rT:计算到寄存器中的z/架构指令的结果值;rX、rY、rZ:用于保存中间结果的临时寄存器;rC:在序列结束时保存条件码的寄存器。在下文中将列出并讨论通过这种技术导出的各种序列。如上文所述,比较指令是设置条件码的指令的原型示例。由此,在下文中提供对条件码设置进行仿真的序列。所提供的序列是在本发明的实践中所采取的典型方法。特别地,作为对象的源指令是称为"比较逻辑操作"的z/架构指令。该示例假设rA和rB在64位环境是零扩展的(仅当比较指令对32位操作数进行操作时)。<table>tableseeoriginaldocumentpage10</column></row><table>如上表所示,在执行"sub—set—carry"(指令[l])之后,寄存器rX的条件是不适用的。然而,目标机器中指令[l]的执行却设置了在CPU状态中的进位位,其可由之后的指令进行访问。这在表中的"进位"列中指示,其表示目标机器中的进位位标志。重点应该注意并且认识到,与目标机器中的多个其他标志位类似,在目标机器中,该进位位不是通过与源机器相同的方式或者在相同的条件下设置的。此时,用来设置寄存器位置rC中相应值的传统方法将使用如图1中所示的分支指令。这些传统方法以及本过程将进行操作,从而提供适当的进位位指示,以供仿真软件使用。对于指令[l],在rA〉-rB的情况下,其执行将进位位(即,CPU进位位)设置为"1";而在rA々B的情况下,将进位位设置为"0"。另外,rC包含减法的结果,特别地其可以是"0"。上表中的条目"rC>0"、"rO0"以及"rC<0,,意味着提供结果状态的指示。在指令[2](set—bit_on_zero)的执行之后,寄存器rC的状态未变,但是在两个操作数rA和rB相同的情况下,基于rC的内容(在此情况下将其限制为0或者不限制为0)而将rX的内容设置为"1"。指令[2]的执行不影响rC的内容。而且,指令[2]不影响CPU进位位。对于指令[3](set—bit—on—not—zero),无论rC是否为0(即,无论rA是否等于rB),都将rC设置为"1"。CPU进位位不受指令[3]的影响。由此,此时,如果rA〉rB,或者如果rA〈rB,则rC=l;但是如果rA二rB,则rC=0。注意,此时,设置rX以提供区别信息以区分相等和不相等,并且这发生在rC和CPU进位位二者的外部(即,与其分离)。继而,利用示出的自变量(rC、rC、0)来执行指令[4](add—to_carry—immed),其中"0"是立即操作数。对于示出的操作数,其执行操作rc+"CPU进位位"+0。尽管其还可以设置CPU进位位,但是后续处理并不需要此结果。可见,在上文表II中,如果rA〉rB,则rC的内容现在是"2";如果rA-rB,则rC的内容是"1",以及如果rA々B,rC的内容也是"1"。在此阶段,相关的是,应该注意,在rC中提供了指示,用于指示rA>rB的情况不同于其他两种情况(rA=rB以及rA<rB)。利用操作数"rC、rC、rX"来执行指令[5](减法),其提供最后的步骤,在该步骤中从rC减去rX的内容(现在表示相等),以作为将rA=rB的情况区别于rA<rB的情况的机制,这是因为相等的情况会导致从"1"中减去"1",并将结果"0"置于rC中。由此,在上文示出的指令序列结束时,获得如下结果如果rA〉rB,则rC=2;如果rA〈rB,则rC=l;以及如果rA^B,则rC=0。以此方式,则可见在没有执行分支指令的情况下获得对条件码设置的期望仿真结果。上文给出的概念同样适用于产生条件码改变的任何源指令的仿真。尽管上述示例特别地涉及进位位的设置,但其同样适用于其他目标架构条件码位,诸如符号位和溢出位。作为应用本发明从而在仿真环境中提供条件码生成的另一示例,下面将考虑Add逻辑(32位)和Add逻辑(64位)指令。如同上述比较逻辑示例,假定对于Add逻辑(32位)的64位目标架构环境,rA和rB是零扩展的。下文是伪汇编代码形式的序列,该序列在处理结束时提供rC位置中的正确设置。在下文中,c是进位位。add_set_carryrT,rA,rB[2]move一from一carryrC[3]doublerCset—bit—o'n_not—zerorX,rT[5]orrC,rC,rX<table>tableseeoriginaldocumentpage12</column></row><table>总体上,该过程具有如下步骤,其中任何步骤都不使用或者执行任何分支指令。首先,执行目标机器的架构中的指令(图2中的步骤IOO),其以如下方式模拟源指令流中存在的指令设置一个或者多个目标CPU标志位,并将结果置于仿真器可访问的存储位置(第一位置,诸如上述rC)。接着,执行指令(步骤105),其使用该结果来设置仿真器控制的其他存储位置(第二位置,诸如上述rX)中的一个或者多个位,以区分一个或者多个情况结果。接着,使用上述结果来将其自身重置(步骤110)为较短的位配置(上述示例中的一个位),这也用于区分一个或者多个情况结果。接着,执行指令(步骤115),该指令使用第一存储位置来生成区分情况结果的不同集合的结果。最后,执行目标机器指令(步骤120),其使用第一位置和第二位置中的结果在仿真器可访问的两个指令之一中提供指示,其中至少区分三种情况。更为一般地,本过程涉及这样的仿真方法,其不使用目标机器分支指令,而是使用如下目标机器指令,这些指令的执行导致以如下方式来控制在随后执行的非分支指令中使用的目标机器条件码其用来区分一个或者多个结果状态,而该结果状态可以从仿真器可以用作条件码仿真位置的位置中获得。应该注意,在此记载的过程旨在涵盖以下二者生成将在目标机器上执行指令的适当序列,以及在目标机器上实际执行这些指令,而不考虑执行是在生成源指令序列时立即进行(如同"解释"环境中那样),还是实际执行在必要的情况下稍后进行(如同在"类编译"环境中那样)。无论哪种情况,在图3中示出了本发明操作于其中的环境。本发明在数据处理环境中操作,其有效地包括图3中示出的一个或者多个计算机元件。具体地,计算机500包括中央处理单元(CPU)520,其访问存储在随机访问存储器510中的程序和数据。存储器510通常实质上是易失性的,因此为这种系统提供有非易失性存储器,其形式通常是可旋转的磁性存储器540。尽管存储器540优选地是非易失性磁性设备,但其也可以使用其他介质。CPU530通过输入/输出单元530来与控制台(例如,终端550)处的用户进行通信。终端550通常是成千上万种控制台中的一种,其通过一个或者多个I/O单元530来与计算机500进行通信。特别地,将控制台单元550示为包括用于读取一个或者多个类型的介质的设备,诸如图5所示的CD-ROM600。在图4中示出的示例中,媒体600包括任何方便设备,其中包括但不限于磁性媒体、光学存储设备以及诸如闪存设备或者所谓拇指设备的芯片。盘600也表示更为通用的分布介质,其形式是电信号,用来传输表示在此讨论的指令码的数据位。尽管此类传输信号实质上可以是临时的,该传输信号仍然构成承载已编码指令位的物理介质,并且旨在于在信号的一个或者多个目的地处被持久性捕获。在图5中示出了其中可以使用本发明的典型仿真环境。仿真器(诸如320)接收输入指令流305,其表示被设计用于在源机器300上进行操作机器指令或者汇编语言指令。仿真器320使用目标机器310中的存储器315来生成能够在目标机器310上执行的指令流。尽管图5具体地示出了在仿真环境中的操作,但是还应该注意,本发明旨在包含以下情况仿真器320实质上作为解译器来操作,其不是仅将指令转换至新的架构,而是实质上可以同时执行该指令。明,本领域技术人员在此可以进行多种修改和变化。由此,旨在于由所附权利要求书来涵盖落入本发明的真实精神和范围的所有此类修改和变4匕。权利要求1.一种用于对来自源机器的计算机指令进行仿真从而在目标机器上生成指令序列的方法,所述方法生成目标机器指令序列,所述目标机器指令一起进行操作,从而在不包括来自所述目标机器的分支指令的情况下,根据进位、符号和溢出码来直接计算目标机器条件码,所述方法包括步骤通过设置一个或者多个目标CPU标志位的方式来模拟源指令流中存在的指令,并将结果置于第一存储位置;执行如下指令,所述指令使用所述结果来设置第二存储位置中的至少一个位,以区分一个或者多个情况结果;使用所述结果将其自身重置为较短的位配置,所述较短的位配置用于区分所述情况结果中的至少一个;执行如下指令,所述指令使用所述第一存储位置来生成区分不同情况结果集合的结果;以及执行如下指令,所述指令使用所述第一存储位置和所述第二存储位置中的所述结果来提供指示,其中对至少三种情况进行区分,所述情况表示所述源机器的条件码。2.根据权利要求1所述的方法,其中在非分支指令序列中执行目标机器条件码的所述计算,所述非分支指令操纵在所述目标机器自身中生成的条件码设置,以便在目标机器位置中生成相同的条件码。3.根据权利要求2所述的方法,其中所述操纵使用临时位置来存储中间结果。4.根据权利要求1所述的方法,进一步包括执行所述生成的目标机器指令序列的步骤。5.根据权利要求4所述的方法,其中所述执行基本上与所述生成同时进行。6.—种系统,包括适用于^l行任一前述方法权利要求的所述方法的所有步骤的装置。7.—种计算机程序,包括指令,当所述计算机程序产品在计算机系统上执行时,所述指令用于执行根据任一前述方法权利要求的所述方法的所有步骤。全文摘要提供了对源机器指令的仿真,其中,使用目标机器CPU条件码来生成仿真的条件码设置,而不使用、编码或者生成分支指令。文档编号G06F9/318GK101601011SQ200880003566公开日2009年12月9日申请日期2008年1月22日优先权日2007年1月30日发明者A·希克,A·约翰森,C·哈尔,P·多伊勒,R·科普兰德申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1