用于在奇存器堆和存储器之间传送数据值的数据处理设备和方法

文档序号:6486198阅读:180来源:国知局
专利名称:用于在奇存器堆和存储器之间传送数据值的数据处理设备和方法
技术领域
本发明涉及用于在寄存器堆和存储器之间传送数据值的数据处理设备和方法。
背景技术
数据处理设备一般含有可用于对数据值执行数据处理操作的数据处理单元。数据处理单元可使用含有多个寄存器的寄存器堆,所述多个寄存器可设为存储数据处理单元在执行那些数据处理操作期间所需的数据值。由数据处理单元执行的用于那些数据处理操作的指令,一般将指定寄存器堆内其中包含要用作那些数据处理操作的操作数的数据值的的寄存器。
寄存器堆向数据处理单元提供对数据值的快速存取,但是寄存器堆相对较小,所以不能保存数据处理单元可能需要的所有数据值。因此,一般设置具有较长期限的数据值存储量的存储系统,需要数据值时,就在寄存器堆和存储系统之间传送数据值。通过该方法,当数据处理单元不再需要寄存器堆中的数据值时,就可将这些数据值存储到存储器,当需要时,也可将数据值从存储器装入到寄存器堆,使得它们然后可用于数据处理单元。用于将数据值装入寄存器堆的典型装入指令可如下表示LDR RX,[RZ,#OFFSET]寄存器R7设置成包含基址(base address),该基址被加上偏移值以产生包含所需数据值的存储地址。执行该装入指令时,从存储器中检索出在那个地址上的数据值,并将该数据值写入寄存器堆的寄存器RX。
典型的存储指令可如下表示
STR RX,[RZ,#OFFSET]如前,通过将偏移值加在寄存器RZ内存储的数据值上可得出相关的存储地址,但是在此例中,存储在寄存器RX内的数据值然后被写入存储器内的那个存储地址。
可以理解,在数据处理设备上要执行的典型程序中,会存在很多这种装入和存储指令,多个这种装入或存储指令采用代码序列一个接一个的出现以存取相邻存储单元,这实在很普通,例如当存取64位“long long”或“double”数据类型时,或者当存取相邻的结构字段时,就会使用许多32位的装入或存储。因此,举例来说,可能发生下面的两个装入指令序列LDR RX,[RZ,#OFFSET]LDR RY,[RZ,#OFFSET±INCR]在这两个装入指令中,使用了相同的基址,但是对于第二装入指令将偏移量增加或减少等于各数据值中字节数的字节数。举例来说,如果数据值是32位的数据值、即4字节长,那么第一装入指令的偏移量可为0,而第二装入指令的偏移量在这种情况下即为+/-4。
为了增加处理速度,近来数据处理设备的体系结构已提供了用于寄存器堆的多个读和/或多个写端口,以允许在每个时钟周期内存取多于一个寄存器。为了利用该点,已经开发了在某种情况下允许由单一指令取代两个或两个以上连续装入或存储指令的新指令。一个实例是可用于由ARM有限公司设计的微处理器的装入多指令,它可如下表示LDMIA RZ,{RX,RY}约束条件1)RY>RX2)基址偏移量从0开始上例假设试图以单一的装入多重指令取代前面已识别的两个装入指令。该指令会使由寄存器RZ的内容识别的存储单元处的数据值写到寄存器RX,然后将存储在寄存器RZ的内容加上等于数据值大小的增量值后所认定的存储单元处的数据值写到寄存器RY。因此,来自相继的存储地址的两个数据值将被存储在寄存器RX和RY中。
上述的LDMIA指令不限于执行如上所述的两个装入操作。装入操作的目的寄存器由位屏蔽指定,因此举例来说,如果寄存器堆包含16个寄存器,则位屏蔽可作为16位字段的指令提供,位屏蔽的每一位与对应的寄存器关联。假设寄存器RX为寄存器0且寄存器RY为寄存器2,那么上例LDMIA指令的位屏蔽可为如下

在此例中,假设值“1”识别应当装入数据值的寄存器,值“0”指示不应装入数据值的寄存器。
虽然该LDMIA指令可能允许作为使用单一指令的结果而使很多寄存器被装入,但是存在限制其使用的多个约束条件。首先,该位屏蔽对使用的寄存器进行排序。在第一地址上的数据值会装入到由位屏蔽识别为目的寄存器的第一寄存器,下一相继地址的数据值会装入到由位屏蔽识别为目的寄存器的下一寄存器,等等。因此,该单一指令仅可用来组合存储器存取,这些存取既确定增加的地址也确定增加的目的寄存器。因此,考虑两个LDR指令的先例,若寄存器RX为寄存器0且寄存器RY为寄存器2,则有可能使用该指令,如果偏移量增加的话。然而,若寄存器RX为寄存器2且寄存器RY为寄存器0,则该指令不能使用。
另外,因为位屏蔽占用了指定指令用的大量位空间,所以在指令内没有足够的可用空间来指定偏移量,因此这进一步限制了可使用LDMIA指令的场合的数量。因此,考虑前述的两个LDR指令的序列,如果第一LDR指令的偏移量为0,则它可能使用LDMIA指令,但如果第一偏移量为非0,则一般不能使用LDMIA指令。
除LDMIA指令之外,也可提供对应的STMIA指令,用以将寄存器堆中的众多数据值存储到存储器。然而,具有完全相同的约束条件。为了缓和与LDMIA和STMIA指令相关联的一些约束条件,开发了用于ARM有限公司设计的微处理器的寄存器对装入与存储指令。寄存器对装入指令可如下表示LDRD RX,[RZ,#OFFSET]约束条件1)只能装入RX和RX+1,即Y=X+1(且RX偶数)2)基址+偏移量必须为8字节对准的。
该指令使两个寄存器能装入数据值,并含有类似上述的单寄存器装入(LDR)指令的偏移量字段。该指令将存储器中位于偏移量与寄存器RZ的内容相加得出的地址处的数据值装入寄存器RX。然后将相邻即相继的数据值地址处的数据值装入寄存器RX+1。而且,因为该指令被设计成用于其寄存器堆被认为是由能够存储两个分离的单数据字或一个双数据字的寄存器对组成的系统中,所以该指令只能用于寄存器RX为偶数寄存器例如寄存器0、寄存器2、寄存器4等的情况,并且通过将基址与偏移量相加得出的地址值必须在存储器中以8字节的边界对准。
虽然该LDRD指令能在假定已适当设置的硬件中具有良好的性能,但是,由于上述约束条件的关系,要编写总是能够利用这种指令的软件是困难的。
也可提供类似的寄存器对存储指令(称为STRD指令),但是这仍受制于与LDRD指令完全相同的约束条件。
从上面讨论中可看出,允许由单一指令指定的多装入或存储的上述两种方法都对可为每次传送识别的寄存器施加了重要约束条件。特别是,用于第一次传送的寄存器的选择会限制可用于随后传送的选择。举例来说,考虑LDMIA指令,如果在位屏蔽内识别的第一寄存器是寄存器R4,则下一次传送不能由寄存器R0到R4中的任一个执行,而必须由含有较高寄存器编号的寄存器进行。而且,考虑LDRD指令,无论指定哪一个寄存器用于第一次传送,用于下一次传送的寄存器是偶数/奇数寄存器对中的相邻寄存器。
因此,本发明的目的是提供一种技术,该技术允许数据处理设备响应单一传送指令以在寄存器堆和存储器之间执行多传送,同时缓和与公知技术相关联的一些约束条件。

发明内容
从第一方面看,本发明提供一种数据处理设备,包括一种数据处理设备,包括数据处理单元,可用于对数据值执行数据处理操作;寄存器堆,含有可用于存储所述数据值供数据处理单元存取的多个寄存器,数据处理单元响应单一传送指令,执行所述寄存器堆的对应的多个所述寄存器与存储器中相继数据值地址之间的多个数据值传送,单一传送指令提供从中可导出所述相继数据值地址的地址标识符,还为各所述数据值传送提供识别所述多个寄存器中是数据值传送对象的寄存器,用于各所述数据值传送的所述寄存器标识符能够独立于为其它所述数据值传送指定的寄存器标识符而被指定。
根据本发明,定义了单一传送指令,该指令在数据处理单元上执行时会引起执行在寄存器堆中对应的多个寄存器与存储器中相继数据值地址之间的多个数据值传送。单一传送指令提供从中可导出相继数据值地址的地址标识符。一般,地址标识符会提供可从中导出一个数据值地址的信息,例如与第一次传送相关联的数据值地址,并且通过对地址增加或减少或乘以数据值长度,可从该数据值地址导出任一个相继数据值地址。
单一传送指令还为各数据值传送提供识别多个寄存器中是数据值传送对象的那个寄存器。而且,用于各数据值传送的寄存器标识符能够独立于为其它数据值传送指定的寄存器标识符而被指定,这在使用单一传送指令时提供了很多灵活性,因此允许将显著经常发生的多条单独的指令(每条用于传送一个数据值)由该新的单一传送指令取代。
特别地,可看出,当比较该新的单一传送指令与上述的LDMIA指令时,现在不存在每个随后执行的传送寄存器编号必须增长这样的限制。而且,当与上述的LDRD指令比较时,不要求传送对应于两个相邻寄存器发生,也不要求第一寄存器为偶数寄存器。结果,对于用一个或多个该新的单一传送指令取代一系列均传送单数据值的指令,这显然存在更大的余地。
可以理解,所发生的传送可以从寄存器到存储器或从存储器到寄存器。因此,在一个实施例中,单一传送指令是一装入指令,数据处理单元响应该装入指令而执行从所述存储器中相继数据值地址到所述寄存器堆中所述对应的多个所述寄存器的所述多个数据值传送。通过这种方法,可由一个单一装入指令引起将多数据值从存储器装入寄存器的操作,因此在码长中产生了改善,也为允许多个数据值并行装入寄存器的硬件中的性能改善创造了条件。
在一个实施例中,为允许从寄存器到存储器的传送,单一传送指令是存储指令,数据处理单元响应该存储指令而执行从所述寄存器堆中所述对应的多个所述寄存器到所述存储器中相继数据值地址的所述多个数据值传送。因此,这允许由单存储指令指定从寄存器到存储器的多个数据值传送,因此可以再次减少码长,同时也促进硬件性能的增长,假定该硬件允许寄存器堆向存储器并行输出多于一个的数据值。
可以理解,地址标识符可采用各种形式。然而,在一个实施例中,地址标识符包括基址和偏移值。可以理解,通过允许提供偏移值,该单一传送指令可比上述的LDMIA指令具有更显著的灵活性,LDMIA指令由于指令内可用空间数被位屏蔽占用,所以不能指定任何偏移量。因此,与上述的LDMIA指令相比,不需要用基址直接识别序列中第一次传送所需的地址。因为基址一般由一个寄存器的内容提供,这减少了在能执行多传送之前可能需要更新该寄存器内容的情况。而且,与上述的LDRD指令相比,不要求地址为8字节对准的。实际上,在本发明的一个实施例中,根据新的单一传送指令确定的地址可为任何多个数据值长度,因此,如果数据值长度为32位,则地址可为4字节的任何倍数。
在一个实施例中,在单一传送指令内基址由用以识别设为存储基址的所述多个寄存器之一的基址寄存器标识符指定。一般,在指令本身存在足够的空间用以直接指定基址,从而,此法减少了指令内为指定基址所需的空间量。
在一个实施例中,偏移值在单一传送指令内由用以识别设为存储偏移值的所述多个寄存器之一的偏移值寄存器标识符指定。然而,因为偏移值一般是比基址小很多的值,所以经常发现指令本身有足够的空间可用于直接指定偏移量,因此在备选实施例中,由设在单一传送指令内的立即值来指定偏移值。通过作为立即值来提供偏移值,避免了寄存器为确定偏移值而进行查找的需要,这样就可提高指令执行的性能。另外,码长由于不需要附加指令来将偏移值装入寄存器,码长较小。
可以理解,可由单一传送指令执行的多个数据值传送的次数将取决于每次传送该指令内指定寄存器标识符的可用空间。在一个实施例中,数据处理单元响应单一传送指令而执行两个数据值传送。在一个特定实例中,单一传送指令为32位指令,在这种情况下发现有足够的空间可允许指定两个寄存器标识符,因此在单一传送指令内定义两次传送。然而,可以理解,随着可用于指定指令的位数的增加,这势必会增加可在指令内识别的寄存器标识符的数目,使单一传送指令能定义更多的多个数据值传送。更多的位会允许定义更大的偏移值,这可作为备选或另增的方式。
可以理解,数据值可为任意预定长度。一般,各数据值可具有与寄存器堆中的各寄存器相同的长度,因此,例如若各寄存器是32位长,则数据值一般可为32位数据值。然而,可以理解,如果需要,数据值实际上可小于寄存器长度。在一个实施例中,各数据值包含一个32位数据字,所述相继数据值地址可识别存储器中一系列相邻的32位数据字的地址。
尽管单一传送指令的使用会直接实现软件中码长的减少,但是当软件在硬件上执行时也会发生所需传送操作的增加,假定该硬件支持并行的多个数据值传送。因此,在一个实施例中,数据处理设备还包含一个所述寄存器堆和所述存储器之间的接口,以促进所述多数据值的并行传送性能。
本领域技术人员理解,由于数据处理设备内其它逻辑单元的存在,“接口”一般会比寄存器堆和存储器之间的单连接路径更复杂,事实上存储器一般是含有一个或多个高速缓存层、随机存取存储器(RAM)层等的多级存储器系统。然而,假设经由寄存器堆和存储器之间的各种互连路径在寄存器堆和存储器之间并行传送两个或两个以上数据值,则这会允许实现显著的性能效益。例如,利用具有为寄存器堆提供两个写端口和两个读端口的硬件装置,就有可能在以其它方式仅执行数据值的单一装入或存储的相同时钟周期数内,让两个数据值装入寄存器堆,或者将两个数据值从寄存器堆中存储到存储器。一般,如果将高速缓存用作存储器,这会占用一个周期。
从第二方面看,本发明提供一种操作数据处理设备从而在寄存器堆和存储器之间传送数据值的方法,该寄存器堆含有多个寄存器,可用于存储供对所述数据值执行数据处理操作的数据处理单元存取的所述数据值,所述方法包括响应单一传送指令,通过以下步骤执行所述寄存器堆的对应的多个所述寄存器与存储器中相继数据值地址之间的多个数据值传送从单一传送指令提供的地址标识符中导出所述相继数据值地址;参照所述单一传送指令提供的对应的寄存器标识符,为各所述数据值传送确定所述多个寄存器内是数据值传送的对象的寄存器,用于各所述数据值传送的寄存器标识符能够独立于为其它所述数据值传送所指定的寄存器标识符而被指定;并执行多个数据值传送。
可以理解,由上述方法的各步骤规定的处理的某些部分可并行执行,因此例如没有必要在确定各数据值传送的对象寄存器之前,导出所有的相继数据值地址。而是,例如,可在进行第一数据值传送的同时确定下一传送的数据值地址和寄存器。
从第三方面看,本发明提供一种含有可在数据处理设备上执行的计算机程序的计算机程序产品,所述数据处理设备含有可用于对数据值执行数据处理操作的数据处理单元和具有可用于存储所述数据值供数据处理单元存取的多个寄存器的寄存器堆,该计算机程序包括单一传送指令,当在数据处理设备上执行所述单一传送指令时,可通过以下步骤引起所述寄存器堆中对应的多个所述寄存器与存储器中相继数据值地址之间的多个数据值传送从单一传送指令提供的地址标识符中导出所述相继数据值地址;参照所述单一传送指令提供的对应的寄存器标识符,为各所述数据值传送确定所述多个寄存器内成为数据值传送对象的寄存器,用于各所述数据值传送的寄存器标识符能够独立于为其它所述数据值传送指定的寄存器标识符而被指定;并执行多个数据值传送。


以下,通过参照如附图所说明的本发明优选实施例,仅以举例方式进一步描述本发明,其中图1是示意说明用于本发明一实施例的数据处理设备的相关部件的框图;图2是说明在本发明一实施例的数据处理设备的部件之间的信号流的框图;图3是示意说明在本发明另一实施例的数据处理设备的部件之间的信号流的框图;图4是说明在图2的设备上执行本发明一实施例的装入指令的流程图;图5是说明在图3的设备上执行本发明一实施例的装入指令的流程图;图6是说明在图2的设备上执行本发明一实施例的存储指令的流程图;图7是说明在图3的设备上执行本发明一实施例的存储指令的流程图;图8A至8E举例说明由两个标准装入指令构成的序列,并表示那些装入指令是否可由本发明实施例的单一装入指令取代,且它们是否可由公知的现有技术单一装入指令取代;以及图9是示意说明对本发明一实施例的单一装入或存储指令进行编码的示图。
具体实施例方式
图1是本发明的数据处理设备的示意框图。在本例中,数据处理设备采用处理器内核10的形式,处理器内核中设置数据处理单元20和寄存器堆40。寄存器堆包含多个寄存器50和需要存取那些寄存器的各种其它逻辑单元,例如写和读端口。本领域的技术人员理解,数据处理单元一般在内部包含多个功能性逻辑单元,例如算术逻辑单元(ALU)、浮点部件(FPU)、装入/存储单元(LSU)30等。LSU 30是数据处理单元20的一部分,负责控制寄存器堆40的寄存器50和数据存储器60之间的数据值的传送,因此LSU 30会用来执行本发明优选实施例的单一传送指令。
当数据处理单元20执行指令时,它一般会通过路径24从寄存器50中检索出数据值,并通过路径22将数据值写回到寄存器50。在本发明的一个实施例中,寄存器是32位寄存器,并且数据值是32位数据值(文中也称为32位数据字)。
当LSU 30执行单一传送指令时,它可能通过路径24从寄存器50检索出某些数据、例如基址,然后一般通过路径32向数据存储器60输出一个或多个地址,以识别传送操作中涉及的存储器地址。一般也将各种控制信号从LSU 30传到寄存器堆40(后面将更详细讨论),以识别作为各种传送操作对象的寄存器。在单一传送指令是装入指令时,这会导致通过路径34从数据存储器60向寄存器堆40的相关寄存器50传送数据,反之,如果单一传送指令是存储指令,这会导致通过路径36从寄存器堆40的相关寄存器50向数据存储器60传送数据。
图2是说明在为寄存器堆40设有单写端口和单读端口的示范性硬件实现中图1讨论的各种元件之间的信号流的框图。用来执行两次装入传送的本发明优选实施例的单一装入指令可如下表示LDRDNEWRX,RY,[RZ,#OFFSET]将参照图4描述该指令在图2的设备上的执行。
如图2所示,指令70被传到LSU 30,在步骤200它被解码以识别各种寄存器值RX、RY、RZ和偏移值,在该实施例中的偏移值作为LDRDNEW指令内的立即值提供。然后,在步骤205,一控制信号通过路径100传到寄存器堆40,从而引起从寄存器堆中读取寄存器RZ,从而通过路径110向LSU 30返回基址。
此后,在步骤210,寄存器RZ的内容即基址被加到偏移值上以产生用于第一次传送的地址。可以理解,用以认出用于第一次传送的地址的基址与偏移量组合方式并不重要,因为一个地址一旦已知,就可仅对该地址增加或减少字的大小来识别另一个地址。然而,以下方法可视为更有效将基址和偏移量设置得能认出用于第一次传送的地址。
在步骤210计算出地址,然后进入步骤215,其中地址通过路径120输出到数据存储器60,并且控制信号也通过路径130输出到存储器60,以使存储器认出需要存储器从所提供地址中读取的数据值。
存储器可采用多个周期来完成读出过程,此后(假设在那个存储器位置存在一有效数据值)将该数据值通过至寄存器堆40的路径140而被认定。因此,在步骤220,确定存储器是否完成了读出过程,如果完成了读出过程,则进入到步骤225,其中LSU 30被设置为通过路径100向寄存器堆输出控制信号,从而使寄存器堆通过路径140将从存储器接收的数据字写入寄存器RX。虽然路径140和对应的写路径150被示为数据存储器60和寄存器堆40之间的单一互连线,但是本领域技术人员理解,由于数据处理设备内其它逻辑单元的存在,数据存储器60和寄存器堆40之间的互连一般是更复杂的,并不只是单连接路径,事实上存储器一般是多级存储系统。图2中的单路径只是要说明在特定时钟周期内仅有单一的数据值可从数据存储器60传送到寄存器堆40,类似地,图2中的单写路径150是要说明在特定时钟周期内单一的数据值可从寄存器堆40写到数据存储器60。
接收的数据值一旦写入寄存器RX,过程就进入步骤230,其中地址被增加字长以产生一个相继数据值地址,即邻近用于第一次传送的数据值地址的地址。前面提到的对指令进行编码以使得在此阶段地址增加字长并不是必需的,在一备选实施例中,可代之以采用以下方式在步骤230将地址减少字长来识别下一地址。
一旦LSU 30在步骤230确定了新地址,就在步骤235将该地址通过路径120输出到数据存储器60,同时将读控制信号通过路径130传到数据存储器60,从而使数据存储器从经识别的存储器单元中读出数据值。在步骤240一旦确定存储器完成了读出过程,LSU 30就在步骤245将控制信号通过路径100输出到寄存器堆,以使寄存器堆将通过路径140从存储器中接收的数据字写入寄存器RY,过程随后在步骤250结束。
以下参照图6讨论可为本发明优选实施例的单存储指令执行的一个类似过程,该指令可如下表示STRDNEWRX,RY,[RZ,#OFFSET]从图6和图4的比较中可看出,图6的步骤400到410对应于图4的步骤200到210。在步骤415,地址通过路径120输出到数据存储器60,并且写控制信号也通过路径130输出。另外,在步骤420,LSU 30被设置为向寄存器堆40输出控制信号,从而使寄存器堆通过路径150将寄存器RX中的数据字输出到存储器。可以理解,步骤415和420可被并行执行。在步骤425,确定存储器是否完成了写入过程(即已经将从寄存器堆40接收的数据值写入经LSU 30识别的存储单元),这一般由通过控制路径130从存储器60返回给LSU 30的信号指示。若存储器完成了写入过程,则过程进入步骤430,其中LSU30用来将地址增加字长。此后,在步骤435,通过路径120输出地址,同时通过路径130输出对应的写控制信号。另外,在步骤440,LSU 30通过路径100将控制信号输出到寄存器堆40,从而使寄存器堆通过路径150将寄存器RY中的数据字输出到存储器。此后,在步骤445,确定存储器是否完成了写入过程,过程随后在步骤450结束。
从上面对图4和图6的讨论中可以理解,LDRDNEW和STRDNEW指令的使用有助于减少采用其它方式时可能需要的码长,因为如上所述,因为能够比上文讨论的通过单一传送指令执行多传送的任一现有技术更频繁地被使用,但若在如图2所示的设备上实现,则不大可能产生显著的性能效益,因为图2的设备不支持寄存器堆40和存储器60之间的并行多传送。LSU 30有可能以流水线方式设置,所以两次装入或存储操作的发生一般会遍及两个周期,而当在寄存器堆和高速缓存之间发生单数据传送时,一般用一个周期。
然而,如果使用图3的设备,则又可另外实现显著的性能效益。从图3与图2的比较中显见,设备基本上是相同的,但图3中提供了两个读路径140、150和两个写路径150、155。因此,在图3的例中,寄存器堆40设有两个读端口和两个写端口,从而允许并行地将两个数据值装入两个寄存器,也允许寄存器堆40的两个寄存器内的数据值并行地输出到存储器。
图5是说明在图3的设备上执行LDRDNEW指令时由LSU 30执行的处理的流程图。通过比较图5和图4,可以看出图5的步骤300到310对应于图4的步骤200到210。然而,在步骤310之后,过程进入到步骤315,其中地址通过路径120输出到数据存储器60,并且读控制信号通过路径130传送,以指示存储器读取两个相继数据值(文中也称为数据字)。在优选实施例中,向存储器暗示它应当从提供的地址读取第一数据字并且从该地址的增加版本读取第二数据字。
过程然后进入步骤320,其中确定存储器是否完成了对两个字的读取。这由通过路径130从数据存储器60返回给LSU 30的信号指示。如果完成了对两个字的读取,则过程进入步骤355,其中LSU 30通过路径100将两个控制信号输出给寄存器堆,从而使寄存器堆将从存储器接收的数据字在第一写端口写入寄存器RX,同时将从存储器接收的数据字在第二写端口写入寄存器RY。此后,过程在步骤360结束。通过这种方法,可实现显著的性能效益,因为可在其它方式进行单一装入操作所需的时间内执行两次装入操作。
然而,可能的是,存储器也许不总是能够在特定时钟周期内读取两个字,例如因为如果地址是8字节对准的,则它在一个时钟周期内只能读取两个字,或者说在该特定时钟周期内正好没有时间读取两个数据字。因此,有必要规定两个字未被读取的情况。
因此,如果在步骤320确定存储器未完成对两个字的读取,则在步骤322确定存储器是否完成了对于第一数据字的读取。这会再次由通过路径130从数据存储器60返回到LSU 30的信号指示。
如果在步骤322确定存储器完成了对于第一字的读取,则过程进入到步骤325,其中LSU 30通过路径100将控制信号输出到寄存器堆40,从而使寄存器堆将从存储器接收的数据字写入寄存器RX中。此后,步骤330到350类似于图4的步骤230到250,导致第二数据字存入寄存器RY。
从图4与图5的比较中可看出,当LDRDNEW指令在图3的设备上执行时,在任何场合存储器能够在同一时钟周期内完成对两个字的读取,于是提高了性能,从而在步骤355能够使两个字并行存入寄存器堆(即从两个周期减为一个周期)。另外,通过设置步骤322到345,也适合存储器不能在同一时钟周期内完成对两个字的读取的情况。
图7是与图6类似的流程图,但是用于STRDNEW指令在图3的设备上执行的情况。图7的步骤500-510类似于图6的步骤400-410。然而,在步骤515,LSU 30将地址连同指示存储器写入两个相继的数据字的控制信号输出到存储器60,第一数据字写入指定地址,第二数据字写入由第一地址和数据字长相加所确定地址的增加版本。
另外,在步骤520,LSU 30设置成通过路径100向寄存器堆40输出两个控制信号,从而使该寄存器堆将寄存器RX中的数据字通过第一读端口输出并将寄存器RY中的数据字通过第二读端口输出,结果,两个数据字分别通过路径150、155输出到数据存储器60。不难理解,步骤515和520可并行执行。
在步骤525,确定存储器是否完成了两个字的写入,这由通过路径130返回给LSU 30的控制信号指示。如果已完成,则过程直接进入步骤555,过程结束。否则,在步骤530,确定存储器是否完成了第一字的写入,如果没有,则过程返回到步骤525。
然而,如果在步骤530确定存储器已经完成了第一字的写入但没有写入第二字,则过程进入步骤535,其中LSU设置为增加地址一字长。此后,步骤540到555类似于图6的步骤435到450,结果使第二数据字写入到存储器。
通过比较图7与图6可看出,当STRDNEW指令在如图3所示的设备上执行时,在存储器能在同一时钟周期内完成两个字的写入的场合,可实现显著的性能效益(即,一般从两个周期减为一个周期,其中高速缓存用作存储器)。
图8A到8E给出两个分离的装入指令的说明例,它们各使单一数据字传送,它们是可由单一装入指令替代的候选指令,并且相对于上述的已知LDMIA和LDRD指令特别说明了由优选实施例的LDRDNEW指令提供的附加的灵活性。
从图8A可看出,图8A中的两条LDR指令可由单LDMIA指令、单LDRD指令或本发明优选实施例的单LDRDNEW中的任一个取代。对于LDMIA指令,这是可能的,因为寄存器编号对于两个装入操作是增加的且初始偏移量为0。对于LDRD指令,这是可能的,因为两个装入指令供给一个的偶-奇寄存器对(even-odd pair ofregisters)。
从图8B可看出,这个序列的两个LDR指令不能由LDMIA指令取代,因为初始偏移量为非0,而LDMIA指令不能指定非0的偏移量。然而,仍可使用LDRD指令,因为两条LDRD指令仍供给一个偶-奇寄存器对。另外,可使用LDRDNEW指令。
如图8C所示,可使用LDMIA指令,因为对于每次传送寄存器是增加的,且初始偏移量为0。然而,不能使用LDRD指令,因为传送不供给一个的偶-奇寄存器对。然而,仍可使用LDRDNEW指令,因为它不受施加于LDRD指令上的约束条件的限制。
如图8D所示,这对特定的LDR指令不能由LDMIA指令取代,因为在装入之间寄存器没有增长,另外初始偏移量为非0。而且,不能使用LDRD指令,因为寄存器与一个偶奇寄存器对无关。然而,仍可使用LDRDNEW指令,因为它不受施加于LDMIA或LDRD指令上的约束条件的限制。
再次,如图8E所示,仅有LDRDNEW指令可代表两条LDR指令的这个特定序列。不能使用LDMIA指令,因为初始偏移量为非0,另外不能使用LDRD指令,因为通过将基址与偏移量相加后得出的地址不是如LDRD指令所需的8字节对准的。然而,可使用LDRDNEW指令,因为在优选实施例中该指令只需要地址是4字节的倍数。
因此,从图8A到8E可看出,本发明优选实施例的LDRDNEW指令比公知现有技术的多传送指令更具灵活性,因此在任何给定代码分段内能够更频繁地实现码密度和性能效益。可以理解,对于存储指令也可提供一些类似的示例,以说明STRDNEW指令比已知STMIA或STRD指令更具灵活性。
如前所述,在本发明的一个实施例中,LDRDNEW和STRDNEW指令限定偏移值为8位长。假定在一个实施例中还要求地址为4字节的倍数,这意味着偏移值被乘以4,因此实际上提供了10位的偏移。
图9说明在一个特定实施例中LDRDNEW和STRDNEW指令的编码格式,这些指令是32位指令。左边的最初5位(11-15)是主解码位,另3位(在半字1中的位10、9和6)指定该指令是LDRD/STRD,并且PUWL位表示是开始于基址或是开始于基址加上偏移量(P),是将基址加上还是减去偏移量(U),是装入还是存储(L),以及修改的地址是否写回到原始寄存器中(W)。可看出,剩余的20位用于指定包含基址(Rbase)的寄存器、偏移值(imm8)和传送中涉及的两个寄存器(RXf和RXf2)。
从上面的描述中,可看出本发明实施例的LDRDNEW和STRDNEW指令与已知的装入或存储数据用的多传送指令相比具有显著的优点。由于这些新指令显著增强的灵活性,它们可比采用已知的现有技术的指令更频繁地使用,因此使得在代码密度和性能中的增加能够比利用已知的现有技术指令以其它方式可能的代码密度和性能中的增加更显著。
虽然本文描述了特定实施例,但可以理解本发明不限于这些特定实施例,在本发明的范围内可进行很多修改和添加。例如,从属权利要求的特征可与其独立权利要求的特征作出各种组合而不偏离本发明的范围。
权利要求
1.一种数据处理设备,包括数据处理单元,可用于对数据值执行数据处理操作;寄存器堆,含有可用于存储所述数据值供所述数据处理单元存取的多个寄存器;所述数据处理单元响应单一传送指令,执行所述寄存器堆的对应的多个所述寄存器与存储器中相继数据值地址之间的多个数据值传送,所述单一传送指令提供从中可导出所述相继数据值地址的地址标识符,还为各所述数据值传送提供识别所述多个寄存器中作为数据值传送对象的寄存器,用于各所述数据值传送的所述寄存器标识符能够独立于为其它所述数据值传送所指定的寄存器标识符而被指定。
2.如权利要求1所述的数据处理设备,其中,所述单一传送指令是装入指令,数据处理单元响应装入指令而执行从所述存储器中的相继数据值地址到所述寄存器堆中所述对应的多个所述寄存器的所述多个数据值传送。
3.如权利要求1所述的数据处理设备,其中,所述单一传送指令是存储指令,数据处理单元响应存储指令而执行从所述寄存器堆中所述对应的多个所述寄存器到所述存储器中的相继数据值地址的所述多个数据值传送。
4.如任一上述权利要求所述的数据处理设备,其中,所述地址标识符包含基址和偏移值。
5.如权利要求4所述的数据处理设备,其中,所述基址在单一传送指令内由基址寄存器标识符指定,该标识符用以识别所述多个寄存器中的一个用来存储基址的寄存器。
6.如权利要求4或权利要求5所述的数据处理设备,其中,所述偏移值在单一传送指令内由一偏移值寄存器标识符指定,该标识符用以识别所述多个寄存器中的一个用来存储偏移值的寄存器。
7.如权利要求4或权利要求5所述的数据处理设备,其中,所述偏移值由设在单一传送指令内的立即值指定。
8.如任一上述权利要求所述的数据处理设备,其中,所述数据处理单元响应单一传送指令而执行两个数据值传送。
9.如任一上述权利要求所述的数据处理设备,其中,各所述数据值包括一个32位数据字,并且所述相继数据值地址可识别所述存储器中一系列相邻的32位数据字的地址。
10.如任一上述权利要求所述的数据处理设备,还包含所述寄存器堆和所述存储器之间的接口,该接口便于所述多数据值传送的并行执行。
11.一种操作数据处理设备以在寄存器堆和存储器之间传送数据值的方法,所述寄存器堆含有多个寄存器,用来存储所述数据值供能够对所述数据值执行数据处理操作的数据处理单元存取,所述方法包括以下步骤响应单一传送指令,执行所述寄存器堆的对应的多个所述寄存器与存储器中相继数据值地址之间的多个数据值传送,其过程如下从单一传送指令提供的地址标识符中导出所述相继数据值地址;参照所述单一传送指令提供的对应的寄存器标识符,为各所述数据值传送确定所述多个寄存器内作为数据值传送对象的寄存器,用于各所述数据值传送的寄存器标识符能够独立于为其它所述数据值传送所指定的寄存器标识符而被指定;执行多个数据值传送。
12.如权利要求11所述的方法,其中,所述单一传送指令是装入指令,响应该装入指令,所述方法执行从所述存储器中的相继数据值地址到所述寄存器堆中所述对应的多个所述寄存器的所述多个数据值传送。
13.如权利要求11所述的方法,其中,所述单一传送指令是存储指令,响应该存储指令,所述方法执行从所述寄存器堆中所述对应的多个所述寄存器到所述存储器中的相继数据值地址的所述多个数据值传送。
14.如权利要求11至13中任一项所述的方法,其中,所述地址标识符包含基址和偏移值。
15.如权利要求14所述的方法,其中,所述基址在单一传送指令内由基址寄存器标识符指定,该标识符识别所述多个寄存器中的一个用来存储所述基址的寄存器。
16.如权利要求14或权利要求15所述的方法,其中,所述偏移值在单一传送指令内由偏移值寄存器标识符指定,该标识符识别所述多个寄存器中的一个用来存储所述偏移值的寄存器。
17.如权利要求14或权利要求15所述的方法,其中,所述偏移值由设在单一传送指令内的立即值指定。
18.如权利要求11至17中任一项所述的方法,其中,所述方法响应单一传送指令而执行两个数据值传送。
19.如权利要求11至18中任一项所述的方法,其中,各所述数据值包含一个32位数据字,并且所述相继数据值地址识别所述存储器中的一系列相邻的32位数据字的地址。
20.如权利要求11至19中任一项所述的方法,其中,所述寄存器堆和所述存储器之间的所述多个数据值传送并行地执行。
21.一种含有可在数据处理设备上执行的计算机程序的计算机程序产品,所述数据处理设备包括能够对数据值执行数据处理操作的数据处理单元和含有用以存储供所述数据处理单元存取的所述数据值的多个寄存器的寄存器堆,所述计算机程序包含单一传送指令,所述单一传送指令在数据处理设备上执行时能够引起所述寄存器堆中对应的多个所述寄存器与存储器中相继数据值地址之间的多个数据值传送,其过程如下从单一传送指令提供的地址标识符中导出所述相继数据值地址;参照所述单一传送指令提供的对应的寄存器标识符,为各所述数据值传送确定所述多个寄存器内作为数据值传送对象的寄存器,用于各所述数据值传送的寄存器标识符能够独立于为其它所述数据值传送所指定的寄存器标识符而被指定;执行多个数据值传送。
22.如权利要求21所述的计算机程序产品,其中,所述单一传送指令是装入指令,该指令在数据处理设备上执行时能够使得从所述存储器中的相继数据值地址到所述寄存器堆中所述对应的多个所述寄存器的所述多个数据值传送被执行。
23.如权利要求21所述的计算机程序产品,其中,所述单一传送指令是存储指令,该指令在数据处理设备上执行时能够使得从所述寄存器堆中所述对应的多个所述寄存器到所述存储器中的相继数据值地址的所述多个数据值传送被执行。
24.如权利要求21至23中任一项所述的计算机程序产品,其中,所述地址标识符包含基址和偏移值。
25.如权利要求24所述的计算机程序产品,其中,所述基址在单一传送指令内由基址寄存器标识符指定,该标识符识别所述多个寄存器中的一个用来存储所述基址的寄存器。
26.如权利要求24或权利要求25所述的计算机程序产品,其中,所述偏移值在单一传送指令内由偏移值寄存器标识符指定,该标识符识别所述多个寄存器中的一个用来存储所述偏移值的寄存器。
27.如权利要求24或权利要求25所述的计算机程序产品,其中,所述偏移值由设在单一传送指令内的立即值指定。
28.如权利要求21至27中任一项所述的计算机程序产品,其中,当所述单一传送指令在数据处理设备上执行时,进行两个数据值传送。
29.如权利要求21至28中任一项所述的计算机程序产品,其中,各所述数据值包含一个32位数据字,并且所述相继数据值地址识别存储器中一系列相邻的32位数据字的地址。
30.如权利要求21至29中任一项所述的计算机程序产品,其中,所述多个数据值传送在所述寄存器堆和所述存储器之间并行地执行。
31.一种计算机程序,可用来配置数据处理设备以使之执行如权利要求11至20中任一项所述的方法。
32.一种载体,其中包含如权利要求31所述的计算机程序。
全文摘要
本发明提供用于在寄存器堆和存储器之间传送数据值的数据处理设备和方法。所述数据处理设备包含可用来对数据值执行数据处理操作的数据处理单元,以及设有用来存储供数据处理单元存取的数据值的多个寄存器的寄存器堆。所述数据处理单元响应单一传送指令而执行在寄存器堆中对应的多个寄存器与存储器中的相继数据值地址之间的多个数据值传送。所述单一传送指令提供可从中导出相继数据值地址的地址标识符,还为各数据值传送提供用以识别多个寄存器中作为数据值传送对象的寄存器的寄存器标识符。而且,用于各数据值传送的寄存器标识符能够独立于为其它数据值传送指定的寄存器标识符而被指定,从而提供了使用该单一传送指令的显著增强的灵活性。
文档编号G06F9/312GK1802630SQ200480016078
公开日2006年7月12日 申请日期2004年2月11日 优先权日2003年6月12日
发明者W·迪克斯特拉 申请人:Arm有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1