具体实施方式
图1为微处理器100的一个实施例的方框图。微处理器100配置用来执行储存于系统内存200中的指令。许多这些指令操作储存于系统内存200中的数据。值得注意的是,系统内存200可实际分配遍及整个计算机系统,并可由一个或多个微处理器100所存取。
微处理器100可包括指令高速缓存106和数据高速缓存128。微处理器100可包括联接到指令高速缓存106的预取单元108。分派单元104可配置成用来接收从指令高速缓存106来的指令,并向一个或多个调度装置118分派操作。一个或多个调度装置118可被联接以接收从分派单元104来的分派操作,并发出操作至一个或多个执行内核124。执行内核124可包括加载/储存单元126,该加载/储存单元126配置以执行对数据高速缓存128的存取。由执行内核124所产生的结果可输出至结果总线130。可使用这些结果作为操作数值用于后续发出的指令和/或储存于寄存器堆116。退除队列(retire queue)102可联接至调度装置118和分派单元104。可配置退除队列以决定何时可退除各发出的操作。在一个实施例中,微处理器100可设计成与x86架构兼容。值得注意的是微处理器100也可包括其它的组件,例如,微处理器100可包括分支预测单元(图中未显示)。
指令高速缓存106在各指令由分派单元104所接收之前可暂时地储存这些指令。可经由预取单元108自系统内存200预先取得指令码以提供给指令高速缓存106。指令高速缓存106可在各种配置情况下(例如,集合关联(set-associative)、完全关联(fully-associative)、或直接映射(direct-mapped))执行。
预取单元108可从系统内存200预先取得指令码用来储存在指令高速缓存106中。在一个实施例中,预取单元108可配置以将从系统内存200来的代码发入指令高速缓存106中。预取单元108可使用各种指定码预先取得技术和算法。
分派单元104可输出可通过执行内核124执行的包含位编码操作和操作数地址信息、立即数、和/或替换数据的信号。在一些实施例中,分派单元104可包括译码电路(图中未显示),用来将某些指令译码成在执行内核124内可执行的操作。简单的指令可对应于单一操作。在一些实施例中,更复杂的指令可对应于多重操作。若操作包含寄存器的更新,则可保留在寄存器堆116内的寄存器位置(例如,在该操作的译码后)以储存预测的寄存器状态(在一个替代实施例中,可使用重新排序缓冲器以储存各寄存器的一个或多个预测寄存器状态)。寄存器图134可将来源和目的操作数的逻辑寄存器名称转译成物理寄存器名称,以便于寄存器重命名。寄存器图134可追踪在寄存器堆116内的哪个寄存器现在已分配和尚未分配。
图1A的微处理器100支持无序执行(out of order execution)。退除队列102可保持追踪用于寄存器读取和写入操作的原始程序序列,允许预测指令的执行和分支错误预测的恢复,并促使精确的异常(exception)。在一些实施例中,退除队列102也可通过提供用于预测寄存器状态的数据值的储存而支持寄存器重命名。在许多实施例中,退除队列102可类似于重新排序缓冲器而操作。然而,不像一般的重新排序缓冲器,退除队列102可不提供任何的数据值的储存。在一些实施例中,可用先进先出方式配置退除队列102,其中当操作经验证后,则将他们移到缓冲器的“底部”,因此让出队列的“顶部”空间供新进入操作使用。当退除操作时,退除队列102可将寄存器堆116中不再需要用来储存预测寄存器状态的寄存器解除分配,并提供信号至寄存器图134以指示哪些寄存器当前闲置着。通过维持在寄存器堆116中(或在一个替代实施例中,在重新排序缓冲器内)的预测寄存器状态,直到产生这些状态的操作经过验证后,若分支预测为不正确的话,则沿着错误预测通路的预测执行操作的结果可以在寄存器堆116中变成无效。
若特定操作所需的操作数为寄存器位置,则寄存器地址信息可路由到寄存器图134(或至重新排序缓冲器)。举例而言,在x86架构中,有8个32位逻辑寄存器(例如,EAX、EBX、ECX、EDX、EBP、ESI、EDI和ESP)。物理寄存器堆116(或重新排序缓冲器)包括改变这些逻辑寄存器内容的结果的储存,允许无序执行。寄存器堆116中的物理寄存器可分配来储存决定修正其中一个逻辑寄存器的内容的每个操作的结果。因此,在执行特定程序期间的各不同点上,寄存器堆116(或者,在一个替代实施例中,重新排序缓冲器)可以有一个或多个寄存器包含了某一给定逻辑寄存器的预测执行内容。
寄存器图134可将一个物理寄存器指定给特定的逻辑寄存器,该逻辑寄存器特定用于操作的目的操作数。分派单元104可判定寄存器堆116具有一个或多个指定给逻辑寄存器的先前分配的物理寄存器,该逻辑寄存器特定为在某一操作中的来源操作数。寄存器图134可提供用于最近指定给该逻辑寄存器的物理寄存器的标记。可使用此标记来存取在寄存器堆116中操作数的数据值,或经由在结果总线130上传送的结果来接收数据值。若操作数对应于内存地址,则操作数值可经由加载/储存单元126而提供在结果总线上(用于结果传送和/或储存在寄存器堆116中)。当通过其中一个调度装置118发出操作时,操作数数据值可被提供给执行内核124。值得注意的是在一个替代实施例中,当分派操作指令时,操作数值可被提供给对应的调度装置118(而非当发出操作指令时提供给对应的执行内核124)。
在分派单元104的输出提供的位编码操作和立即数可路由至一个或多个调度装置118。值得注意的是此处所使用的调度装置为检测何时操作已准备好执行和发出准备操作指令至一个或多个执行单元的装置。举例而言,保留站(reservation station)为一个调度装置。各调度装置118可以保持住几个等待发出至执行内核124的尚未处理操作的操作信息(例如,位编码执行位和操作数值、操作数标记、和/或立即数)。在一些实施例中,各调度装置118可不提供操作数值的储存。取而代之,各调度装置可监视可从寄存器堆116中获得的发出操作和结果,以便决定操作数值何时能供执行内核124读取(从寄存器堆116或结果总线130)。在一些实施例中,各调度装置118可关联于专用的执行内核124。在其它的实施例中,单一调度装置118可向多于一个的执行内核124发出操作。
调度装置118可提供将由执行内核124所执行的操作信息的暂时储存。如前所述,各调度装置118可储存尚未处理操作的操作信息。此外,各调度装置可储存用于已经执行但是也许仍将再发出的操作的操作信息。当可得到用于执行的任何所需操作数的值时,则将操作发出至执行内核124。因此,执行操作时的次序可与原始程序指令序列的次序不同。包含数据预测的操作可保持在调度装置118中,直到他们变成非预测为止,这样若数据预测不正确时可再将其发出。
在一个实施例中,各执行内核124可包括配置用来执行加法和减法的整数算术运算,以及移位、旋转、逻辑运算、和分支操作的组件。还可包含有浮点单元以容许浮点操作。可配置一个或多个执行内核124以执行将由加载/储存单元126所执行的用于加载和储存内存操作的地址产生。
执行内核124也可将关于条件分支指令的执行的信息提供给分支预测单元,而使得若分支为错误预测时,分支预测单元可清洗(flush)紧随已进入指令处理管线的错误预测分支的指令,并将预取单元108改向。然后该改向的预取单元108可开始从指令高速缓存106或系统内存200中取得更正指令组。在这些情况中,可舍弃掉在错误预测分支指令后在原始程序序列中所发生的指令结果,包括那些预测执行和暂时储存于寄存器堆116中的指令结果。若寄存器值被更新,则可将由执行内核124内组件所产生的结果在结果总线130上输出到寄存器堆116。若内存位置的内容被改变,则在执行内核124内产生的结果可提供给加载/储存单元126。
加载/储存单元126提供执行内核124和数据高速缓存128之间的接口。在一个实施例中,加载/储存单元126可配置具有加载/储存缓冲器含数个尚未处理的加载或储存的数据和地址信息的储存位置。加载/储存单元126也可执行加载指令相对于尚未处理的储存指令的依附性检验,以确保维持数据一致性。
数据高速缓存128为高速缓存,其提供用来暂时地储存加载/储存单元126和系统内存200之间传送的数据。如上述的指令高速缓存106一样,数据高速缓存128可以各种特定的内存配置实现,包括集合相关的内存配置。此外,在某些实施例中,数据高速缓存128和指令高速缓存106可实现于统一的高速缓存中。
堆栈区域
由微处理器100所支持的一个逻辑寄存器(例如堆栈段寄存器,诸如在x86应用中的SS)可识别在内存200中堆栈区域的基地址。另外的逻辑寄存器(例如,ESP)可用作堆栈指针寄存器,以识别堆栈区域目前的顶端。可通过结合堆栈区域的基地址与在堆栈指针寄存器中指定的堆栈内的偏移而形成堆栈的目前顶端的地址。可使用此地址以将值推入堆栈,并从堆栈取出值。
某些指令可使得一个或多个寄存器的内容被“推”至堆栈。例如,在子程序调用期间,一个或多个寄存器的现有内容可被推至内存的堆栈区域。推入(push)指令修正堆栈指针,然后将数据值储存至当前由该修正的堆栈指针所指向的堆栈的顶端。举例而言,在x86的实施例中,推入指令可减少堆栈指针寄存器值,该减少的值对应于将推到该堆栈的操作数大小的量,然后使用该修正值来将操作数值储存到堆栈的顶端。同样地,取出(pop)指令将从堆栈的顶端来的操作数加载至寄存器或内存位置,然后修正堆栈指针,使得该堆栈指针指向堆栈的新的顶端,以有效地从该堆栈移去取出的操作数。当子程序完成时,子程序一开始储存的值可从堆栈取出,并恢复到寄存器堆116内的适当地址。
子程序可以是程序或中断处理或异常处理程序。当执行子程序调用指令时,一些寄存器值(例如,代码段寄存器值和/或指令指针寄存器值指示返回地址)可以自动地储存。可储存其它的寄存器值以响应在调用子程序内或在子程序的开始处包括特定的储存指令(例如,在PUSHEAX或MOV[EBP-2],EAX,则储存在EAX中的值)。
返回指令可使得某些寄存器值自动地从堆栈取出。当在子程序中包括取出或储存指令时,可从该堆栈取出其它寄存器值。在一些实施例中,微处理器可支持这样的指令,当其执行时,推入所有的逻辑寄存器值至堆栈,和/或从该堆栈取出所有的逻辑寄存器值。值得注意的是,中断和异常也可引起寄存器值推入堆栈。
各子程序可以在堆栈区域内有关联的堆栈帧,其中传递至该子程序的各局部变量和参数被储存。可使用基址指针寄存器(例如,EBP)作为堆栈帧指针,该堆栈帧指针指向当前子程序的堆栈帧的基地址。在子程序内的指令可使用堆栈帧指针用于寻址模式中,该寻址模式用来存取传递至该子程序的参数和存取用于子程序内的局部数值。在一个实施例中,可使用于堆栈帧指针的正偏移以存取参数,而同时可使用堆栈帧指针的负偏移以存取局部变量。
因此,可使用堆栈指针寄存器或堆栈帧指针寄存器任何其中之一来指定堆栈相关寻址模式。可使用堆栈指针来寻址由调用程序推至堆栈的参数值。可使用堆栈帧指针来寻址存取于调用子程序内的参数值。当调用子程序时,可将堆栈帧指针寄存器(用于调用程序)的当前值储存到堆栈的顶端。然后,子程序可将堆栈指针寄存器的当前值复制到堆栈帧指针寄存器中,建立指向子程序的堆栈帧的帧指针。当子程序完成时,可将调用程序的帧指针值再次储存到帧指针寄存器。
根据堆栈相关寻址模式的数据预测
可配置微处理器100以使用预测的数据值而实行数据预测执行,该数据值使用各种操作的堆栈相关寻址模式(亦即,存取内存的堆栈区的寻址模式)而预测。举例而言,当操作分派至调度装置118时,可通过比较操作的操作数的寻址模式与现存于堆栈文件中的寻址模式,而判别用于一个或多个操作的操作数的预测值。在一些实施例中,调度装置118可使用预测值而发出执行的操作。若稍后判定预测值为不正确,则可使用非预测值而再发出操作。
图2A显示分派单元104的一个实施例,该分派单元104可根据操作数的寻址模式而配置以判别预测的操作数值。在此实施例中,分派单元104包括寄存器图134和堆栈文件132。如上所述,寄存器图134可配置用来提供寄存器重命名。寄存器图134可接受各指令(或操作)的各来源和目的操作数的逻辑寄存器名称,并输出最近指定到这些逻辑寄存器的物理寄存器的物理寄存器名称。寄存器图134可指定物理寄存器以储存操作的结果。堆栈文件132包括堆栈文件控制器202和堆栈文件储存器204。在一些实施例中可从数个寄存器、锁存器、计数器、加法器/减法器、触发器、或其它的时钟控制的储存器而执行堆栈文件储存器204。在替代实施例中,堆栈文件储存器204可包括一个或多个RAM(随机存取存储器)单元。
堆栈文件储存器204包括一个或多个登录项220。各登录项220可包括寻址模式206和与登录项之寻址模式206相关联的标记208。各标记可通过当数据值产生时指示该数据值将储存于何处(例如,在重新排序缓冲器内或是在寄存器堆116)而识别该数据值。举例而言,如例示的实施例中所示,各标记可识别分配用来储存该数据值的物理寄存器,由寄存器图134所指示。各寻址模式可包括用来识别特定的堆栈位置的所有的或一些的信息。举例而言,很快地参阅图2B,该图显示了一个示例性寻址模式206。在此实施例中,寻址模式206包括逻辑寄存器名称210和位移量214。逻辑寄存器名称210是用来存取堆栈中数据的逻辑寄存器的名称(例如,堆栈指针寄存器或堆栈帧指针寄存器)。位移量可指示加至当前储存于逻辑寄存器中的地址的值,或从该逻辑寄存器中的地址减去的值。一些寻址模式206也可包括其它的信息,比如段逻辑寄存器的名称或索引寄存器的名称。
当指令或操作的寻址模式指定内存的堆栈区内的位置时,可分配在堆栈文件储存器204内的登录项220。举例而言,当一储存操作将值(例如,从物理寄存器来的值)储存至堆栈区内的内存位置时,则可分配一登录项。推入指令为包含储存操作的指令的例子。将内存位置指定为目的地的移动指令是包含储存操作的指令的另一个例子。堆栈文件控制器202可检测将数据值储存于内存中堆栈区域内的内存位置的储存操作(例如,根据操作的操作码和/或寻址模式)。若检测到的储存操作的寻址模式尚未包括在堆栈文件登录项220中,则堆栈文件控制器202可分配新的登录项220以储存该寻址模式。堆栈文件控制器也可储存识别将由储存操作所储存的数据值的标记。举例而言,若堆栈文件控制器202检测指令PUSH EAX,则堆栈文件控制器可将用来识别当前指定给逻辑寄存器EAX的物理寄存器的标记储存到响应PUSH指令而分配的堆栈文件登录项220中。堆栈文件控制器可储存ESP+0(其中+0是以字节为单位的位移量)作为用于PUSH指令的寻址模式。若在堆栈文件储存器204内没有闲置的登录项用以分配,则堆栈文件控制器202可使用譬如LRU(最近最少使用)、FIFO(先进先出)、随机位移等的位移方案来选择登录项加以覆盖(overwrite)。
若操作的寻址模式已经包括于堆栈文件登录项中,则堆栈文件控制器202可用在该操作中所指出的标记来覆盖储存于匹配登录项中的标记。举例而言,若储存操作的寻址模式在堆栈文件储存器204中命中,则堆栈文件控制器202可用储存操作的来源操作数的标记覆盖储存于匹配登录项220中的标记。
堆栈文件控制器202可比较在未分派操作中指明的寻址模式与储存于堆栈文件储存器204中登录项内的寻址模式。若操作的寻址模式匹配储存于堆栈文件储存器204中登录项中的寻址模式(例如,操作的堆栈相关位移在堆栈文件储存器204中命中),则堆栈文件控制器202可使用或修正(如上所述)包含匹配寻址模式的登录项。若正在处理把从堆栈来的值加载到寄存器中的操作,则堆栈文件控制器202可输出储存于堆栈文件储存器204内匹配登录项220中的标记(例如,物理寄存器名称)。此处把从堆栈来的值加载到寄存器中的操作称之为加载操作。取出指令是包含加载操作指令的例子。值得注意的是,在执行x86指令组的实施例中,MOV指令的使用可实行储存操作和加载操作。
因为堆栈指针值常被修正以响应数据储存到堆栈或从堆栈移出的操作(例如,推入和取出指令一般会更新堆栈指针值),所以可配置堆栈文件控制器202通过更新登录项220以反映修正或通过修正输入到堆栈文件132的寻址模式,和比较修正的寻址模式与在各堆栈文件登录项220中的寻址模式,而补偿对堆栈文件值的修正。
在一个实施例中,每次改变堆栈指针值时,堆栈文件控制器202可通过修正储存在堆栈文件登录项220中的相对位移,而补偿对堆栈指针值的修正。举例而言,堆栈文件132可包括减法器和/或加法器(或者,可用上升和/或下降计数器来取代),其配置成更新各堆栈文件登录项220以响应推入和取出指令。修正量可根据操作数的大小而定。例如,若推入指令推4字节的操作数到堆栈中,则堆栈文件控制器202可将各登录项中的位移加4,该登录项在其寻址模式206中指明堆栈指针。同样地,若取出指令从堆栈移走2字节的操作数,则堆栈文件控制器202可从包括在各寻址模式206中的相对位移减去2,该寻址模式206指明该堆栈指针。以此方式,各登录项之寻址模式关于堆栈指针的当前位置正确。
在其它实施例中,堆栈文件控制器202可通过追踪一个或多个寻址模式调整值,并在比较输入寻址模式与包含在各堆栈文件登录项220中的寻址模式之前,将这些调整值应用于输入到堆栈文件132的寻址模式,而补偿堆栈指针值的修改。堆栈文件控制器可追踪用于各逻辑寄存器(例如,在一些x86实施例中的ESP和EBP)的寻址模式调整值,该逻辑寄存器用来寻址位于内存的堆栈区中的数据。举例而言,堆栈文件控制器可包括加法器或计数器以储存各寻址模式调整值。各加法器或计数器可关联于用来寻址在堆栈区域中数据的其中一个逻辑寄存器。每次修改关联于逻辑寄存器的值的操作被分派时,则为了反映该修正,寻址模式调整值可被增加、减少、加载新值、清除或无效。例如,每次推入指令被分派时,则可减少与堆栈指针寄存器相关联的计数器的值(例如,响应PUSH EBX,count=count-4)。
每次由堆栈文件处理新操作时,堆栈文件控制器202可将适当的寻址模式调整值应用到新操作的寻址模式,以为了判定寻址模式是否在该堆栈文件储存器命中。举例而言,若目前ESP相关寻址模式调整值为(-12)并接收到操作MOV EAX,[EBP+8],则堆栈文件控制器202可将寻址模式调整值加至寻址模式,获得模式[ESP+8-12]或[ESP-4]。若修正的寻址模式[ESP-4]包含于堆栈文件登录项220中,则堆栈文件控制器202可输出包含于该堆栈文件登录项中的物理寄存器识别符。
堆栈文件控制器202可包括一个或多个加法器,以将该寻址模式调整值应用于输入到堆栈文件的寻址模式。举例而言,若每个时钟周期可输入两个操作至堆栈文件,则堆栈文件控制器202可包括两个加法器以应用该寻址模式调整值。此实施例相对于通过修正包含于各堆栈文件登录项中的相对位移而补偿堆栈指针的改变的实施例,需要较少的加法器和/或计数器。此外,许多子程序包括执行从堆栈指针减去相当大数值的操作,以分配大的局部堆栈帧。在在堆栈文件内处理这些操作的实施例中,为了作大的偏移可能需要花费相当贵的加法器和/或计数器。在这些情况下,减少加法器和/或计数器的数目也许是重要的设计考虑。
在一些追踪寻址模式调整值的实施例中,寻址模式调整值也可以用来调整将要储存于堆栈文件登录项中的寻址模式。举例而言,考虑第一序列的操作:MOV[ESP-4],EAX;MOV[ESP-8],EBX;MOV[ESP-12],ECX;ADD ESP,-12;接着是第二序列的操作:MOV[ESP-4],ESI;MOV[ESP-8],EDI;MOV[ESP-12],EBP;ADD ESP,-12。这些序列可通过将一系列的PUSH指令译码成MOV和ADD操作,并在译码的操作上执行固定值传送而产生。当操作的第一序列通过堆栈文件控制器处理时,堆栈文件控制器202可分配或修正具有寻址模式[ESP-4]、[ESP-8]、和[ESP-12]的登录项。为响应第一序列中的加法运算,堆栈文件控制器202可更新堆栈指针寻址模式调整值从0至-12。当处理操作的第二序列时,在分配用于该操作的登录所述之前,堆栈文件控制器202可将寻址模式调整值加至各操作的寻址模式。因此,分配于操作的第二序列的堆栈文件登录项可具有寻址模式[ESP-16]、[ESP-20]、和[ESP-24]。为响应在第二序列的加法运算,堆栈文件控制器202可更新该堆栈指针寻址调整值至-24。
若堆栈指针复制至堆栈帧指针(例如,MOV EBP,ESP)(例如,在子程序的开始),则堆栈文件控制器202可额外地补偿此更新。例如,在一个实施例中,堆栈文件控制器202可更新各登录项220,该登录项220的寻址模式中指明堆栈帧指针寄存器,而不是识别堆栈帧指针寄存器。在一个x86实施例中,可将指定ESP的各登录项更新成指定EBP,以响应指令MOV EBP,ESP。同样地,为响应将堆栈帧指针复制至堆栈指针(例如,在子程序结束的MOV ESP,EBP)的操作时,堆栈文件控制器可将各登录项更新成由原先识别堆栈帧指针改成识别堆栈指针。或可取而代之,可将任何指明这种复制操作的目标寄存器作为寻址模式一部分的登录项变为无效。例如,寻址模式为EBP+4的登录项可被无效,以响应复制操作MOV EBP,ESP。
在另外的替代实施例中,当发生将堆栈帧指针复制至堆栈指针或反之将堆栈指针复制至堆栈帧指针的复制操作时,堆栈文件控制器202通过设定一个或多个标识符或其它的状态指示符而补偿。若使用一个标识符,则当检测到一种类型的复制(例如,MOV EBP,ESP)时可设定该标识符,和当检测到另一种类型的复制(例如,MOV ESP,EBP)时清除该标识符。若设定了标识符和状态指示符以表示堆栈指针已经复制到堆栈帧指针,则堆栈文件控制器202可使堆栈文件储存器204内指明堆栈指针寄存器的寻址模式等同于指明在未分派操作中堆栈帧指针的寻址模式(或反之,根据发生了哪种类型的复制),前提是各寻址模式中的位移相同。举例而言,若堆栈文件登录项的寻址模式206为ESP+8,且未分派加载操作的寻址模式为EBP+8,且若已设定了状态指示符,则堆栈文件控制器202可判定未分派加载操作的寻址模式匹配包含在登录项内的寻址模式。因此,堆栈文件控制器202可将储存于该登录项中的标记输出给未分派加载操作。
在堆栈文件控制器202追踪寻址模式调整值的实施例中,堆栈文件控制器202可补偿复制到堆栈帧指针的堆栈指针,通过将堆栈指针寻址模式调整值复制至堆栈帧指针寻址模式调整值。举例而言,若操作MOV EBP,ESP被分派,则堆栈文件控制器202可将EBP寻址模式调整值设定等于目前ESP寻址模式调整值。堆栈文件控制器202可将EBP寻址模式调整值应用至其后处理的指定EBP相关寻址模式的操作。当EBP寻址模式具有有效值,则堆栈文件控制器202可配置成比较输入至堆栈文件132的操作中修正的EBP相关寻址模式与在堆栈文件登录项中的ESP相关寻址模式。若堆栈文件包括的登录项220的ESP相关寻址模式含有与修正的EBP相关寻址模式相同位移,则修正的EBP相关寻址模式可命中堆栈文件。在一些实施例中,当分派任何指定EBP为目标寄存器的任何其它操作(除了MOV EBP,ESP操作),EBP寻址模式调整值可被无效。当EBP寻址模式调整值为无效,则堆栈文件控制器202可能不处理具有EBP相关寻址模式的操作。在一些实施例中,堆栈文件控制器202也可(或替换性的)无效该EBP寻址模式调整值以响应一返回指令。
若一操作调整堆栈指针的值(例如,ADD ESP,12或MOV ESP,EBP),则堆栈文件控制器202可更新堆栈文件指针寻址模式调整值的值。举例而言,为响应堆栈帧指针复制至堆栈指针的操作,堆栈文件控制器可将堆栈帧指针调整值复制到堆栈指针调整值,并无效该堆栈帧指针调整值。为响应修正该堆栈指针值的操作(例如,ADD运算),堆栈文件控制器202可更新堆栈指针调整值以反映该修正。举例而言,当分派了加法运算时,若使用操作ADD ESP,12来恢复先前的堆栈帧,堆栈文件控制器可加上12以修正该堆栈指针寻址模式调整值。
在一些实施例中,堆栈文件132可通过储存用于各子程序的调整值而处理嵌套子程序,以及每当处理返回指令时,恢复对应于先前堆栈帧的调整值。例如,每次处理调用指令,堆栈文件控制器202可在LIFO(后入先出)结构中储存目前的寻址模式调整值,类似于返回地址堆栈。当处理对应的返回指令时,储存的调整值可在该堆栈文件控制器202中从该结构恢复取得。
在一些实施例中,寻址模式调整值可包括指示堆栈指针和堆栈帧指针之间偏差的偏移值。每当操作设定该两个指针为相同值时,偏移值可重设至0。例如,当操作设定该堆栈指针值等于该堆栈帧指针值时(例如,MOV ESP,EBP),或相反情况时,偏移值可重设至0。当操作修正ESP和EBP的值时,即适当地修正了偏移值。举例而言,为响应推入指令(该推入指令减少ESP),可增加偏移值以反映ESP修正。为响应从EBP减少某值的操作,可减少偏移值。为了反映正或负偏移值,而可加正负符号于该偏移值。当由堆栈文件处理操作时,可使用偏移值(和/或堆栈指针寻址模式调整值)以修正用来判定在堆栈文件储存器204中命中和未命中的寻址模式,并在这些寻址模式储存作为新的堆栈文件登录项之前修正寻址模式。举例而言,若具有EBP相关寻址模式的操作输入至堆栈文件132,则在比较该寻址模式与这些储存于堆栈文件登录项220中的寻址模式之前,堆栈文件控制器202可将该ESP相关寻址模式调整值和EBP-ESP偏移值应用到操作的寻址模式。在一些实施例中可提供该偏移值替代堆栈帧指针调整值或作为额外的值。
若加载操作的寻址模式在堆栈文件储存器204命中,则可使用由堆栈文件控制器202输出的标记来将由标记识别的值链接至加载操作的预测结果。举例而言,在一些实施例中,当加载操作分派至调度装置118时,由堆栈文件132输出的标记也可提供给调度装置(例如,作为预测的来源操作数标记)。调度装置118可根据是否有该标记所识别之值(例如,在寄存器堆116中或在结果总线130上),而发出加载操作。执行内核124可执行加载操作,而使得该链接值在结果总线130上广播作为加载操作的预测结果(值得注意的是在一些实施例中,产生为加载结果的值其本身可不定标识符或识别为预测值)。如下所述,在其它实施例中,该值可通过在预测的映射中储存标记而链接至加载操作的预测结果。
作为链接的结果,一旦取得由标记所识别的数据值时(例如,于寄存器堆116中或于结果总线130上),则可传送该值作为加载操作的预测结果,以便使得相依操作可使用该预测结果执行。在许多情况下,这可允许相依操作执行使用该加载操作的预测结果比延迟相依操作的执行直到可取得加载操作的非预测结果值为止的方式更快得以执行。
在一些实施例中,可通过执行加载操作而传送数据值,而使得数据值输出到结果总线130作为该加载操作的预测结果。举例而言,在一个实施例中,通过输出数据值和识别该数据值作为操作的结果的标记可在单次循环中执行加载操作,以替代采用三次循环来执行该非预测的加载操作(假设该操作命中该数据高速缓存128中)。在其它实施例中,当分派各相依操作时,可用更多间接的方法,通过由堆栈文件控制器202直接提供标记输出到相依操作(具有由加载操作所产生的操作数的操作)而传送数据值,作为预测操作数来源。传送此数据值的装置可包括一个或多个:分派单元,配置用来修正加载操作以执行作为预测寄存器至寄存器移动操作,或提供标记给相依操作以作为预测操作数来源标记;调度装置,配置用来根据是否具有链接数据值而发出修正加载和或相依操作;以及执行内核,配置用来输出链接数据值作为加载的结果,或使用该链接数据值以执行该相依操作。
加载/储存单元126(或其它在微处理器100内用来验证链接的装置)可以验证储存在由堆栈文件132所识别的物理寄存器中的值至加载操作的预测结果的链接。若该链接不正确,则加载/储存单元126可再发出加载操作和/或广播在结果总线130上加载操作的正确结果。再发出加载可导致任何使用加载的预测结果而执行的相依操作使用更新、非预测值而再发出和执行。或可取而代之,若链接不正确,则处理器100可清洗在错误预测后发生的操作,并使用加载操作的正确结果再开始执行这些操作。若登录项被用来不正确地将各值链接至加载操作的预测结果,则堆栈文件控制器202可以使堆栈文件储存器204内的登录项无效。
如所示,堆栈文件132追踪在操作中的寻址模式,该操作存取在数据高速缓存128(或系统内存200)中的数据。结果,堆栈文件132允许储存在物理寄存器中的寄存器值被链接到储存于内存中特定地址的值。
值得注意的是,在一个实施例中,储存在堆栈文件储存器204内的相对位移206可包括少于用来指明在位移字段214内位移的所有的位。在另外的实施例中,堆栈文件控制器202可根据在该堆栈文件中的登录项是否能够储存用于特定操作的所有的寻址信息,而选择性地选择是否将登录项分配在堆栈文件储存器204中。举例而言,若在堆栈文件储存器204中的各登录项储存达16位的位移信息,而一个特定的操作包括24位的位移信息,则堆栈文件控制器202可不分配堆栈文件登录项给该操作。
为了进一步说明堆栈文件132的一个实施例的操作,假设由分派单元104所处理的指令序列包括图2C中所示的指令。图2C显示可包括在示例性调用程序中的指令,以及可包括在示例性子程序SUB1中的指令。值得注意的是,图2C中所显示的这些指令,可由一个或多个在程序次序中的插入指令(图中未显示)所分隔。图2D显示堆栈的内容和恰在子程序调用之前的堆栈文件的内容。图2E显示堆栈的内容和恰在子程序指令MOV[EBP-4],EBX之后的堆栈文件的内容。值得注意的是,其它的实施例可以不同的方式处理这些指令(例如,为响应修正的堆栈指针,一些实施例可更新寻址模式调整值以代替更新储存在堆栈文件中的寻址模式)。
可使用在调用程序中的第一指令PUSH EBX,以在堆栈上储存逻辑寄存器值(在此例子中是EBX),而使得该值不必受到子程序的修正。当用来执行PUSH EBX的储存操作的寻址模式被提供给堆栈文件132时,堆栈文件控制器202可检验堆栈文件储存器204匹配的寻址模式。假定寻址模式在堆栈文件储存器204中未命中,则堆栈文件控制器202可分配登录项(可通过使用未分配的登录项或通过覆盖已经分配的登录项)以储存推入指令所有的或一些的寻址模式和来源操作数的标记。在所示实施例中,标记为目前指定给EBX的物理寄存器的物理寄存器识别符(然而,为了容易参照,在图2D和2E图中的标记显示为逻辑寄存器识别符)。堆栈文件控制器可将寻址模式储存为ESP+0。因为寻址模式在堆栈文件储存器中未命中,则堆栈文件控制器202可不输出用于该寻址模式的标记。
可使用接着的两个指令以储存两个参数,即储存在EDI和ESI的值到堆栈以供子程序使用。假设在调用程序中用于下两个储存操作的寻址模式(用来执行PUSH EDI和PUSH ESI)也未在堆栈文件储存器204中命中,则堆栈文件控制器202可分配另外两个登录项以储存各储存操作的这些标记和寻址模式。此外,每次检测到推入指令(该推入指令将堆栈指针减值),该堆栈文件控制器可修正包含于现有的堆栈文件登录项中的位移,该登录项的寻址模式指明堆栈指针ESP。因此,当检测到PUSH EDI时,堆栈文件控制器204可响应PUSH EBX而将分配的登录项位移增4(因此而使得登录项的位移变成ESP+4)。同样地,当检测到PUSH ESI时,堆栈文件控制器204可增加为响应PUSH EBX分配的登录项中和为响应PUSH EDI分配的登录项中的位移。因此,为响应PUSHEBX分配的登录项中寻址模式可更新为指定ESP+8,且为响应PUSH EDI分配的登录项中寻址模式可更新为指定ESP+4。因此,分派包含在PUSH参数1指令中的操作后,包含于堆栈文件中的寻址模式可如图2D中所示。
为响应CALL SUB1指令,将指令指针推到堆栈上(用作为返回地址)。因为堆栈指针为了响应CALL指令而修正,则可更新包括在堆栈文件中登录项中的位移,该登录项的寻址模式指定堆栈指针。举例而言,响应PUSH EBX而分配的包含于登录项中寻址模式可被更新以指定ESP+12。CALL指令可包括更新堆栈文件的储存操作。举例而言,堆栈文件也可响应CALL SUB1指令而分配一个堆栈文件登录项(图2D至图2E中未显示)(例如,具有等同于目前指定给EIP的物理寄存器的物理寄存器识别符的标记,和等同于ESP+0的寻址模式)。
在子程序SUB1内,指令PUSH EBP可导致将分配一个新的堆栈文件登录项(具有标记等同于目前指定给EBP的物理寄存器的物理寄存器识别符,和ESP+0的寻址模式)。此外,因为该推入修改堆栈指针,则可修改包含于寻址模式内指定该堆栈指针的位移(例如,可增加4)。
为了响应指令MOV EBP,ESP,堆栈文件控制器可将具有寻址模式指定ESP的登录项更新成指定EBP,如图2E中所示。因此,寻址模式ESP+12可更新成指定EBP+12等等。
下一个指令SUB ESP,4分配空间在堆栈的上端以让子程序储存局部变量。因为在此例子中,堆栈文件目前追踪EBP修正,堆栈文件对于此指令的响应可为不分配或修改任何的登录项。然而,值得注意的是在其它的譬如寻址模式调整值的这些实施例中,这一指令可能导致一个或多个寻址模式调整值和/或登录项的寻址模式的更新,以反映ESP的改变。
当MOV EAX,[EBP+8]的寻址模式提供至堆栈文件时,来源操作数的寻址模式[EBP+8]匹配其中一个包含于堆栈文件中的寻址模式。因此,堆栈文件可输出在匹配登录项中的标记。此处,在匹配登录项中的标记为物理寄存器的物理寄存器识别符,当分配该匹配登录项时该物理寄存器指定给ESI。可使用此标记以将物理寄存器中的数据值链接至MOV EAX,[EBP+8]的预测结果。同样地,当MOV EBX,[EBP+12]的寻址模式提供给堆栈文件时,该寻址模式匹配现有的登录项,该堆栈文件可输出包含于匹配登录项中的标记,在此例中,当该登录项被分配时识别指定给EDI的物理寄存器该标记。
对于MOV[EBP-4],EBX的目的操作数的寻址模式也许在堆栈文件132中未命中。因此,堆栈文件可分配新的登录项,其具有EBP-4寻址模式和目前指定给EBX的物理寄存器的物理寄存器识别符的标记。当包含于ADD EAX,[EBP-4]中的加载操作的来源操作数的寻址模式提供给堆栈文件时,寻址模式命中并输出储存在匹配登录项中的标记(当建立匹配登录项时,该标记识别指定给EBX的物理寄存器)。
指令MOV ESP,EBP复制堆栈帧指针值至堆栈指针。响应此复制指令,堆栈文件控制器可使任何其寻址模式指定于ESP的堆栈文件登录项无效。此外,堆栈文件控制器可将任何其寻址模式指定EBP堆栈文件登录项更改成指定ESP。在一个实施例中,堆栈文件控制器可配置成使任何其寻址模式修改成指定负位移和堆栈指针的登录项无效。例如,在这样的实施例中,响应MOV[EBP-4],EBX分配的登录项若其寻址模式修改为指定EBP-4,则该登录项可为无效。
指令POP EBP将堆栈帧指针值还原成之前在调用程序中的值。对于包含在POP指令的加载操作的来源操作数的寻址模式ESP,在该堆栈文件中命中(如上述将寻址模式EBP+0修改成指定ESP+0后),因此该堆栈文件可输出包含于该登录项中的标记。因为包含于POP指令中的加法运算在加载取出值后修改堆栈指针值,该堆栈文件控制器可接着修改指定堆栈指针的各寻址模式(例如,通过将包含于各寻址模式中的位移减去4)。
值得注意的是,在一些实施例中当一些诸如推入和取出指令包括诸如储存或加载操作的几种组成操作时,这些指令可分派和调度为单一指令。在另外的实施例中,可分别地分派和调度包含于这种指令中的一个或多个组成操作。举例而言,对于取出指令,可使增量堆栈指针的操作以及将堆栈顶端的数据加载于特定的寄存器中的操作分别地分派与调度。
因为堆栈文件132被用作预测结构,则储存于堆栈文件储存器204中的信息的准确度对于微处理器100的正确操作而言可不重要(例如,在堆栈文件132中的错误预测也许不造成在微处理器100的输出中的错误)。然而,为了增加由正确地将加载操作的预测结果链接至储存于物理寄存器中的值所提供的好处,和/或减少对于错误预测链接所招致的任何性能损失,而希望改进堆栈文件132的准确度。在一些实施例中,可响应窥视(snooping)取得写入存取于特定地址的数据的另外装置,而使堆栈文件储存器204中的登录项无效。同样地,可响应检测的错误预测而使登录项无效。一般而言,可监视和使用诸如这些可影响在堆栈文件储存器204中的登录项的准确度的许多状况,而判定何时将登录项无效。然而,因为堆栈文件132为预测结构,而一些实施例并不执行一些这些监视方法(例如,若执行某些监视方法的额外的硬件成本超出堆栈文件准确度的可能的改进)。
值得注意的是堆栈文件132允许在操作流中彼此相隔颇远的操作之间相互依存,以用来将值链接至预测结果。因此,堆栈文件可提供操作之间相依的经历,这些操作可由几个插入的操作所分离。
图3显示将加载操作的预测结果链接至寄存器值的一个方法实施例的流程图。在步骤301,标记与寻址模式相关联,指示二者可能识别相同的数据值。该标记和寻址模式皆指定用于第一加载或储存操作。举例而言,若第一操作为加载操作,则标记可识别分配以储存加载结果的物理寄存器,并可使用寻址模式计算用于加载的地址。可替代的,若第一操作为储存操作,则寻址模式可指示储存的目的地的地址,并标记可识别由储存操作所储存的数据。在一些实施例中,可通过将二者储存于堆栈文件中的登录项中,而关联该标记和寻址模式。值得注意的是,在与标记之相关联前,可根据寻址模式调整值(例如,由追踪对堆栈指针值的较早修正值而获得)而修改寻址模式。
若一个加载操作的寻址模式匹配第一操作的寻址模式,则加载的预测结果可链接至由该第一操作指明的标记所识别的数据值,如步骤303至305所示。若加载操作的寻址模式不匹配第一操作的寻址模式,则可关联加载的寻址模式与用于加载的目的地的标记(例如,通过在堆栈文件中的登录项中储存二者),如步骤303至311所示。再者,如在步骤313所示,通常可通过存取数据高速缓存而执行加载。在一个实施例中,加载操作的寻址模式可与多于一个的先前操作的寻址模式相比较。例如,加载的寻址模式可与当前储存于堆栈文件中的各寻址模式相比较。还值得注意的是,在一些实施例中,在与先前操作的寻址模式相比较之前,根据寻址模式调整值,而可修改加载操作的寻址模式。
如在步骤307所示,若加载的预测结果链接至由标记所识别的数据值,则该数据值可传送至一个或多个相依操作以作为加载操作的预测结果。该数据值可经由结果传送或通过传送相关操作可使用数据值作为预测的操作数来源的指示,这将在下文中作更详细的说明。在一个实施例中,若数据值经由结果传送而传送的话,则在产生该数据值的操作完全执行的一周期后执行相关操作。若经由指示相关操作可使用物理寄存器作为预测操作数的来源而传送该数据值的话,则一旦完成执行产生该数据值的操作后,可立即发出相关操作。如在步骤309所示,在验证预测结果之前,可传送预测结果。可传送预测结果而不须存取数据高速缓存(亦即,预测结果比由存取数据高速缓存而产生非预测的结果更快传送)。
若在步骤309验证该预测结果是正确的,则可完成加载操作而不须执行数据高速缓存存取。在其它的实施例中,可施行加载操作而不管该预测结果是否验证为正确。若在步骤309判定预测结果为不正确的话,则可执行数据高速缓存存取以便获得正确的结果(图中未显示)。若如此,则任何使用加载预测结果所执行的相关操作可使用加载的更正结果而再执行。值得注意的是在一些情况下,在传送链接数据值作为加载的预测结果(在步骤307)之前,可执行验证(在步骤309)。在这些情况下,可正常执行加载,或若判定链接为正确的话,则可传送数据值作为加载操作的非预测结果。
内存文件
图4A显示分派单元104的一个实施例,该分派单元104包括内存文件136。内存文件136包括内存文件控制器402和内存文件储存器404。可使用内存文件136根据寻址模式将储存于物理寄存器中的寄存器值链接至储存于内存中特定地址的值。不像堆栈文件,可使用内存文件将寄存器值链接至在内存区域中而不在堆栈区域中的内存值。在一些实施例中,内存文件136也可如上述般执行一些堆栈文件132的功能,以便额外地将寄存器值链接至内存的堆栈区域内的内存值。或可取而代之,分派单元104也可包括分离的堆栈文件132以执行这些功能。
内存文件储存器404包括一个或多个登录项420。各登录项420可包括寻址模式406和与登录项的寻址模式相关联的标记408。当产生标记时,各标记408可通过指示数据值将储存于何处(例如,在重排序缓冲器内或在寄存器堆116内)而指示出该数据值。例如,如说明的实施例中所示,各标记408可识别分配以储存该数据值的物理寄存器,如由寄存器图134所指示。各寻址模式406可包括所有或一些信息,用来指出操作中地址。储存于内存文件136中的寻址模式406可包括类似于储存在堆栈文件132中的寻址模式206的信息。值得注意的是在一些实施例中,储存于内存文件储存器404中的寻址模式406可包括少于用于指定操作的所有的寻址信息。在其它实施例中,内存文件控制器402可根据在内存文件中的登录项是否可储存所有用于特定操作的寻址信息,而选择性地选择是否在内存文件储存器404中分配登录项。类似于堆栈文件储存器204,内存文件储存器404可从数个寄存器、锁存器、正反器、一个或多个随机存取存储器(RAM)单元等等而实现。
内存文件控制器402可比较指明于非分派操作中的寻址模式与储存于内存文件储存器404中登录项420内的寻址模式。若操作的寻址模式不匹配任何当前储存于内存文件储存器404中登录项内的寻址模式406(亦即,操作的寻址模式在内存文件储存器中未命中),则内存文件控制器402可在内存文件储存器404中分配新的登录项420以储存所有的或一些该操作的寻址模式。若没有闲置的登录项可在内存文件储存器404中分配,则内存文件控制器402可使用诸如最少最近使用(LRU)、先进先出(FIFO)、随机取代等等替代设计而选择登录项以覆盖。除了在分配的登录项内储存操作的寻址模式之外,内存文件控制器402也可储存标记408(例如,物理寄存器的名称)以识别从内存位置所加载或储存于内存位置的值,该内存位置由操作的寻址模式识别。举例而言,若处理从内存加载数据的操作,则响应该操作而分配的登录项420可储存物理寄存器的名称,该物理寄存器配置成储存加载操作的结果。若处理储存数据于内存位置的操作,则内存文件控制器402可储存寄存器的物理寄存器名称,该寄存器储存由内存文件储存器404中的储存操作储存的值。
若操作的寻址模式(或该模式的一部分)已经储存于内存文件404的登录项中(亦即,操作的寻址模式在内存文件储存器中命中),则内存文件控制器402可使用或修改包含匹配的寻址模式的该登录项。若加载操作被处理(将值从特定地址加载到一寄存器的操作),则内存文件控制器402可输出储存于匹配的登录项中的物理寄存器名称。若储存操作被处理(将从寄存器来的值储存于特定地址的操作),则内存文件控制器402可用储存的数据的标记覆盖储存于匹配的登录项中的该标记(例如,物理寄存器名称)。
在一些实施例中,若分派指定特定逻辑寄存器(而不是用来储存堆栈指针和堆栈帧指针的寄存器)为目的操作数的操作,则内存文件控制器402可使包含该逻辑寄存器为其寻址模式406的一部分的任何登录项420无效。因此,各操作的目标寄存器的逻辑寄存器名称可输入至内存文件136以便执行登录项无效。此外,在一些实施例中,当窥视到另外的装置取得在特定地址数据的写入存取时,即令内存文件储存器404内的登录项无效。同样地,当检测到错误预测时可使登录项无效。
若内存文件136也分配用于操作的登录项,该操作的寻址模式指定内存的堆栈区域内的位置,则内存文件控制器402可包括其中一种上述的针对这些登录项的堆栈文件补偿机制。或者这些登录项可维持在独立的堆栈文件132内(亦即,内存文件136可不分配登录项给各操作,该操作的寻址模式指定堆栈内的位置)。一般而言,内存文件控制器402可根据各寻址模式内包含哪一个逻辑寄存器识别符而区别指定堆栈区域内的位置的寻址模式与指定内存内其它地址的寻址模式之间的不同。因为内存文件136为预测结构,则由使用这种机制以区别寻址模式所发生的可能不正确是可接受的。
在一些架构中,用来指定堆栈帧指针的逻辑寄存器(例如,像是EBP基址指针寄存器)也可用作为通用寄存器。因此,包括这种双目标寄存器的寻址模式406可指定在内存的堆栈区域内的位置,或不包括在堆栈区域内的位置。为了区别这些寻址模式之间的不同,内存文件控制器402可包括追踪目前基址指针寄存器用作堆栈帧指针的可能性的机制。这种机制可包括这样的标识符,该标识符当基址指针寄存器可能用作堆栈帧指针时予以设定,和当基址指针寄存器可能用作通用寄存器时予以清除。举例而言,这种标识符可响应CALL指令而设定,和响应RET操作而清除。在其它的实施例中,这种标识符可响应ENTER指令而设定,和响应LEAVE指令而清除。或可取而代之,这种标识符可响应MOV EBP,ESP操作的分派而设定,和响应MOV ESP,EBP操作的分派而清除。当设定标识符时,内存文件控制器402可禁止处理那些寻址模式包括基址指针寄存器的操作(在内存文件136不包括堆栈文件功能的这些实施例中)。在这些情况下,堆栈文件132可替代处理这些操作,或完全不处理这些操作。或可取而代之,在内存文件136也执行堆栈文件功能的这些实施例中,当标识符设定时,内存文件控制器402可用具有堆栈相关的寻址模式的方式处理这些输入至内存文件的操作。当已清除该标识符时,若这些操作输入到内存文件中,则可以具有非堆栈相关寻址模式的方式处理该些操作。
在一些实施例中,可通过内存文件控制器402维持其它的信息,以便在嵌套子程序环境中更正确地处理双目的逻辑寄存器。举例而言,代替仅维持指示是否已经处理CALL指令的标识符,内存文件控制器402可追踪“调用深度”。调用深度可指示现用嵌套层级,和用来判定将如何通过内存文件控制器402来处理特定的基址指针寄存器寻址模式(或甚至是否该处理这种操作)。
在一个实施例中,内存文件控制器402可包括追踪调用深度的计数器。在一些实施例中调用深度计数器最初可设定为0。每次处理CALL指令后,内存文件控制器402可增值调用深度计数器。每次处理RET指令后,内存文件控制器402可减值调用深度计数器。当分配登录项420时,若该登录项的寻址模式406包括基础指针逻辑寄存器识别符,则内存文件控制器402可将当前调用深度附加到该登录项。
当由内存文件控制器402依序地处理其寻址模式包括基址指针寄存器的操作后,目前的调用深度可与储存于各登录项中的调用深度相比较。若这些调用深度并不匹配,则操作将在内存文件136中不命中。例如,指令的序列将包括:
MOV EAX,[EBP+20]
CALL
<设定子程序EBP的新值的操作>
MOV EBX,[EBP+20]
RET<恢复EBP的CALL之前的值>
MOV ECX,[EBP+20]
可通过一个或多个插入指令而分隔各指令。由分派单元104处理此指令序列之前,在内存文件控制器402中的调用深度可等于1。当处理MOV EAX,[EBP+20]操作时,内存文件控制器402可用具有调用深度等于1的EBP+20来比较储存在内存文件储存器404内的其它登录项中的寻址模式。假设这些寻址模式没有一个匹配,则内存文件控制器402可分配新的登录项以储存寻址模式EBP+20和识别EAX的标记。内存文件控制器402可额外地将识别目前调用深度的值(例如,1)附加至新登录项内的调用深度字段。值得注意的是,在许多实施例中,内存文件控制器402可仅附加此值至储存包括基础指针的寻址模式的登录项。
响应CALL操作的分派,内存文件控制器402可更新目前的调用深度(例如,通过将目前的调用深度增加至2)。在调用子程序中的操作可更新堆栈帧指针EBP的值(例如,MOV EBP,ESP)。因为在登录项中的调用深度不匹配当前调用深度,则由于EBP的更新,内存文件控制器402并不会使该登录项无效。再者,由于更新EBP,则MOV EBX,[EBP+20]将在内存文件中不命中,因为目前具有寻址模式EBP+20的内存文件登录项是根据不同的EBP值。为了正确地判定MOV EBX,[EBP+20]的寻址模式不匹配已经储存于内存文件储存器中的寻址模式,则内存文件控制器可比较当前调用深度(2)与存在的登录项的调用深度(1)。因为目前的调用深度不同于存在的登录项的调用深度,则内存文件控制器可判定新的指令在内存文件中未命中。因此,内存文件控制器可分配登录项以储存EBP+20并将指示目前调用深度的值附加至该登录项。值得注意的是,现在也许有(至少)两个具有寻址模式EBP+20的内存文件登录项。当处理RET指令时,内存文件控制器可减少目前的调用深度(例如,再至1)。因为目前的调用深度等于当之前登录项分配至MOVEAX,[EBP+20]的调用深度,则MOV ECX,[EBP+20]可在内存文件中命中。值得注意的是在一些实施例中,内存文件控制器402可使登录项无效,该登录项的调用深度要大于目前的调用深度。
在一些包含堆栈文件132和内存文件136的实施例中,可使用各种机制来判定哪一结构针对特定的操作而分配登录项。在一些实施例中,堆栈文件132和内存文件136可针对具有堆栈相关寻址模式(例如,包括EBP或ESP的寻址模式)的操作而分配登录项。在其它实施例中,可通过结合堆栈文件132和内存文件136成为单一结构而消除冗余。
在其它的替代实施例中,针对寻址模式指定堆栈指针的操作,内存文件136可不分配登录项并判定内存文件命中和/或未命中。内存文件136可选择性地处理(或全然不处理)具有指定基址指针寄存器或其它双目的逻辑寄存器的寻址模式的操作。在一个实施例中,若内存文件136选择性地处理其寻址模式指定基址指针寄存器的操作,则内存文件136可如上述般根据在堆栈文件控制器202中的堆栈帧指针寻址模式调整值是否有效,或根据指示子程序是否正在处理的标识符,而判定是否处理特定的操作。当堆栈帧指针寻址模式调整值为有效时,堆栈文件132可处理包括基址指针寄存器的寻址模式。当堆栈帧指针寻址模式调整值为无效时,内存文件136可处理这些操作。
若正在处理加载操作,且加载操作在内存文件储存器404中命中,则由内存文件控制器402输出的标记可用来将由标记识别的储存值链接至加载操作的预测结果。举例而言,在一些实施例中,当加载操作被分派至调度装置118中,则由内存文件136所输出的标记也可提供给调度装置(例如,作为预测来源操作数标记)。调度装置118可针对该标记所识别的值的有效性(例如,在寄存器堆116中或在结果总线130上)而可发出操作。执行内核124可执行加载操作,而使得链接值在结果总线130上广播作为加载操作的预测结果(应注意的是,在一些实施例中,产生作为加载结果的数据值其本身可不设为标识符,或否则识别为预测值)。如下所述,在其它的实施例中,数据值可通过在预测映射中储存标记而链接至加载操作的预测结果。
为了进一步说明内存文件136的操作,假设由分派单元104所处理的操作的序列包括下列的操作:
MOV EBX,[EDX+EAX-位移A] (加载1(LOAD 1))
·····
MOV ECX,[EDX+EAX-位移A] (加载2(LOAD 2))
·····
MOV[EDX+EAX-位移A],EAX (储存1(STORE 1))
这些操作的每一个可通过在程序顺序中插入一个或多个干预操作而分隔。如所示,这些三个操作的每一个包括相同的寻址模式:EDX+EAX-位移A。
当LOAD 1的寻址模式提供给内存文件136时,内存文件控制器402可检验内存文件储存器404的寻址模式是否匹配LOAD 1的寻址模式。假设寻址模式在内存文件储存器404中未命中,则内存文件控制器402可分配登录项(通过使用未分配的登录项或通过覆盖已经分配的登录项)以储存所有的或一些的加载操作的寻址模式,并加载操作的目标物理寄存器的物理寄存器名称,如由寄存器图134所提供。因为加载操作在内存文件储存器中未命中,则内存文件控制器402可不输出用于该加载操作的标记。
当接着由内存文件136处理LOAD 2时,其寻址模式可匹配分配给LOAD 1的登录项的寻址模式(假设LOAD 1的登录项尚未因为中间插入操作而被覆盖)。响应LOAD 2的寻址模式在内存文件储存器404中命中,内存文件控制器402可输出分配以储存LOAD 1的结果的物理寄存器的物理寄存器名称。可使用物理寄存器名称将由LOAD 1加载的数据值链接至LOAD 2的预测结果。
当通过内存文件136而处理STORE 1时,其寻址模式可在分配给LOAD 1的登录项中命中(再假设没有插入操作造成此登录项被覆盖)。然而,替代输出分配以储存该LOAD 1结果的实际登录的实际登录项名称(如对于LOAD 2所施行的),内存文件控制器402可用包含由STORE 1所储存的数据的寄存器的物理寄存器名称覆盖储存在该登录项中的实际登录项名称。因此,当后续的加载操作在此登录项中命中时,内存文件控制器402将输出STORE 1的来源物理寄存器的物理寄存器名称,以代替输出LOAD 1的目标寄存器的物理寄存器名称。
如所示,堆栈文件132和/或内存文件136追踪在数据高速缓存128(或系统内存200)中存取数据的操作中的寻址模式。结果,储存于物理寄存器中的寄存器值可链接到储存于内存中特定地址的值。
具有预测来源的操作的调度
各种实施例可用许多不同的方法链接加载操作的预测结果与寄存器数据值。在一些实施例中,可通过识别用于操作数的两个来源而链接各值:预测来源与非预测来源。预测来源可以是链接的数据值。可提供预测来源用于加载操作,以指示链接到加载的预测结果的数据值。在一些实施例中,也可提供预测来源用于根据这种加载操作的操作。因此,一些操作数可具有两个标记:一个识别预测的来源,和一个识别非预测的来源。在这些实施例中,各调度装置118可提供标记储存器用于预测操作数和非预测操作数,如图5中所示。
图5显示调度装置118的一个实施例,该调度装置118可包含于微处理器中。在所示实施例中,调度装置118包括调度装置控制器502和操作储存器504。响应分派单元分派操作,调度装置控制器502可分配操作储存器504内的登录项以储存对应于该操作的信息。举例而言,在操作储存器504内的登录项522可包括操作码字段510、一个或多个操作数字段、和结果字段516。结果字段516可储存识别物理寄存器的标记,其中将储存该登录项的操作的结果。当发出操作时,此标记可传送至在其中一个或多个标记总线520上的各调度装置118。各调度装置可比较传送于标记总线520上的各标记与未处理的操作的操作数标记(如下所述,预测的和非预测的),以便判定何时将可取得未处理操作的操作数。因此,当标记总线520上出现操作的来源操作数标记时发出(或注明为准备发出)该操作。
各操作数字段可包括用于识别预测操作数来源的预测标记和识别非预测操作数来源的非预测标记的储存器。在所示的登录项522中,操作数1的两个来源由非预测标记512和预测标记514所识别。调度装置118可配置成当有一个或多个指示可得到操作的操作数则发出操作。若可从预测的来源和非预测的来源其中任何一者取得操作数,则代表可得到该操作数。若从预测的来源和非预测的来源得到该操作数,则可使用从非预测的来源取得的值来执行该操作。在一些实施例中,调度装置118可对具有非预测的来源操作,较之仅具有预测的来源的操作,给予发出操作较高的优先权。
值得注意的是一个操作可包括一些具有预测的来源的操作数,和其它的不具有预测的来源的操作数。还应注意的是,同一个来源对于一个操作也许是预测的来源,而对于另一个操作也许是非预测的来源。在一些实施例中,当执行操作时,对于各操作数也许仅可读取一个数据值(例如,执行内核124可读取预测的操作数来源或非预测的操作数来源,但不能同时读取二者)。如此可使得操作不需增加额外的端口至寄存器堆116中。在一些实施例中,预测的来源和实际来源可储存于相同的储存位置(例如,在寄存器堆116内),且预测的来源可不被定标识符或相反识别为预测来源。
在许多实施例中,在这些操作已发出至执行内核124后,调度装置118可配置成仍保持分配给各操作的登录项。当根据是否可得一个或多个预测操作数,而通过调度装置118发出操作时,则该调度装置可保持分配至该操作的登录项522而使得当若该预测链接不正确时能再发出操作。在一些实施例中,可配置加载/储存单元以验证当预测的加载结果链接至储存于物理寄存器中的数据值时,所发生的预测链接。若该链接为正确,则加载储存单元可配置成不广播非预测的加载结果,因为已经可经由链接而取得正确结果。假如如此,若识别用于该操作的非预测操作数来源的标记广播于结果总线130上,则调度装置118可配置成再发出操作。
可选择的,加载/储存单元可广播该储存的结果与一额外状态位,该额外状态位屏蔽广播,或指示预测的链接为正确而不必再发出该加载。然而,若预测的链接不正确,则加载/储存单元可执行数据高速缓存和/或内存存取,以便获得用于加载的正确的结果,并广播该加载结果。在一些实施例中,总是广播结果,额外的状态位可指示预测的链接不正确。因此,在许多实施例中,在微处理器中已经取得的一些标记和结果总线可用来指示预测的链接为不正确。在其它的实施例中,可以执行其它替代的指示机制(例如,使用分离的结果总线130和/或结果标记总线520以指示错误预测)。
图6显示具有预测的和非预测的操作数来源而发出和再发出操作的一个方法实施例的流程图。若操作的预测操作数来源为有效,则可发出操作,如步骤801至803所示。当数据值存在于寄存器堆内的特定寄存器中,或当数据值输出到结果总线上时,则可得到操作的预测操作数来源。值得注意的是在一些情况中,可在预测操作数来源之前先得到用于相同操作数的操作的非预测操作数来源。在这些情况下,在预测的操作数来源得到前,可以发出操作。在某些实施例中,之后得到预测来源并不触发操作的再发出。
可使用由预测的操作数来源所提供的数据值来执行操作的发出,如步骤805所指示,并可广播操作的结果,如步骤805所指示。广播该操作的结果使得可执行相依操作。
若在某些稍后时间判定预测的来源为不正确(例如,由预测的来源和非预测的来源所提供的数据值并不相同,或用来产生预测的来源的标记的预测的链接为不正确),则非预测的来源的标记可广播作为预测的来源值为不正确的指示。广播非预测的来源的标记包含广播该标记使调度装置以再发出操作作为响应。举例而言,在一些实施例中,若标记被广播且与该标记相关联的状态标识符设定于某一值时,则调度装置可响应,而在其它的实施例中,也许没有关联的状态标识符,且调度装置可配置成只要广播非预测标记时即再发出操作。
预测的寄存器图
图7显示分派单元104的另一个实施例,该分派单元104可包含于微处理器100中。在此实施例中,分派单元104包括寄存器图134、堆栈文件132(和/或内存文件136,图中未显示)和预测的寄存器图800。类似于寄存器图134,预测的寄存器图800可将逻辑寄存器名称转译至物理寄存器名称。然而,预测的寄存器图800可响应堆栈文件132(和/或内存文件136)将储存于物理寄存器中的值链接至加载操作的预测结果,而预测地将逻辑寄存器名称映射至物理寄存器名称。预测的寄存器图800可允许用于操作的预测的操作数值,该操作并不包括链接到寄存器数据值的寻址模式。举例而言,若逻辑寄存器EAX具有有效的预测映射,则具有EAX作为来源操作数的操作可具有两个来源标记:由寄存器图134所提供的非预测标记和由预测的寄存器图800所提供的预测标记。由于一旦得到操作的预测来源即可发出该操作,因此预测的寄存器图800可将数据消耗器(consumer)经由预测操作数标记直接链接到数据产生器,旁通了任何插入加载和储存。值得注意的是,在一些实施例中,预测的映射可储存不是物理寄存器名称的标记(例如,在具有包含了预测寄存器状态的储存器的重排序缓冲器的各实施例中)。
预测的寄存器图800包括预测的寄存器图控制器802和预测的寄存器图储存器804。预测的寄存器图储存器可包括一个或多个的登录项820。各登录项820可与特定的逻辑寄存器相关联,并指示目前该逻辑寄存器预测映射的物理寄存器的物理寄存器识别符812。各预测的寄存器图登录项820也可包括一个关于当前使用的登录项是否为有效或无效的指示(图中未显示)。在一个实施例中,预测的寄存器图储存器804可包括用于各逻辑寄存器的一个登录项。在其它的实施例中,预测的寄存器图储存器804可包括较逻辑寄存器数目要少的登录项。在这些实施例中,各登录项820可包括一个目前登录项对应的逻辑寄存器的指示。
预测的寄存器图控制器802可配置成响应加载操作的预测结果已与由特定的物理寄存器名称所识别的数据值链接的指示,而更新登录项820。在所例示的实施例中,此指示由堆栈文件132所提供。在其它的实施例中,这些指示也可或者替代地由内存文件136所提供。欲更新的登录项820是作为加载操作目的地的逻辑寄存器的登录项。可更新登录项以包括由堆栈文件132所输出针对该加载操作的该物理寄存器识别符。
在一些实施例中,在与将各操作提供给寄存器图134的期间,各操作可提供给预测的寄存器图800。寄存器图134执行操作的非预测寄存器更名,预测的寄存器图800可指示任何作为储存操作的预测来源操作数之一的逻辑寄存器是否链接至特定的物理寄存器。若寄存器图储存器804中有一个逻辑寄存器来源的有效登录,则预测的寄存器图控制器802可输出储存于该逻辑寄存器的登录项中的物理寄存器名称。当该操作分派至调度装置118时,分派单元104可输出此预测的物理寄存器名称作为预测的来源。因此,若将ADD运算提供给预测的寄存器图800,且其中一个ADD的来源具有在预测的寄存器图储存器804中的有效的登录项,则在该登录项中的物理寄存器识别的标记可提供作为至调度装置118的预测的来源操作数标记。可配置调度装置以如上述般储存预测的和非预测的操作数标记,并在一些实施例中可配置成响应非预测的标记在结果总线上广播而再发出操作(如果已经发出了操作)。
可响应将修改对于特定的逻辑寄存器的数据值的指示,而使在预测映射内的登录项无效。举例而言,若通过分派单元104而处理操作ADD EAX,ECX,则预测的寄存器图控制器802可使当前指定给EAX的预测映射登录项无效,因为ADD运算将修改该寄存器值。
一般而言,每当一个操作的预测的结果链接到寄存器数据值时,则预测的操作数标记可提供给调度装置118。在一些实施例中,堆栈文件132和/或内存文件136以及追踪经过几个循环的依附性的结构(例如,如于下文中所描述的预测的寄存器图800)可被用来将预测结果链接至寄存器值。例如,分派单元104可产生用于操作的预测标记,以响应堆栈文件132或内存文件136识别一链接。在一些实施例中,可无须使用这种预测映射来产生预测标记。例如,一指令序列可包括:
ADD EBX,EBX (相加1(ADD 1))
MOV[寻址模式A],EBX (储存1(STORE 1))
ADD[寻址模式A],ECX (相加2(ADD 2))
这些指令可以为连续指令(例如,他们可以以程序次序而彼此直接相随)。这些指令可以分离成下列的组成操作(将逻辑地址转译成实际地址而显示),且在执行内核124内执行:
ADD PR2,PR2,PR1 (ADD 1)
MOV[寻址模式A],PR2 (STORE 1)
MOV PR3,[寻址模式A] (ADD 2的加载)
ADD PR4,PR3,PR5 (ADD 2的相加)
MOV[寻址模式A],PR4 (ADD 2的储存)
在分配ADD 2的组成的加载、相加和储存操作之前,分配单元104可检测由任何序列组成的操作之间是否有任何的依附性以允许预测的结果的链接。此外,由STORE 1所储存的数据可以链接至加载的预测结果(例如,通过堆栈文件)。因为没有插入操作,则分派单元可在同一个分派循环中具有所有需要用来检测加载操作与相加操作(由相同的指令导得的两个操作)之间依附性的所有的信息。根据这两个依附性,分配单元104可将由STORE 1,PR2所储存的数据的标记链接至执行作为ADD 2部分的加载操作的预测结果。此预测的链接可接着允许分派单元将执行作为ADD 2部分的加法运算的来源链接至储存于PR2中的值。因此,分配单元104可输出指示PR2可预测地用作加法操作的操作数的其中一个来源,而PR3为该操作数的非预测的来源。因此,在一个实施例中,可通过分派单元而输出的操作和操作数识别符如下:
ADD PR2,PR2,PR1 (ADD 1)
MOV[寻址模式A],PR2 (STORE 1)
MOV PR3,[寻址模式A] (ADD 2的加载)
ADD PR4,PR2*,PR3,PR5 (ADD 2的相加,其中PR2*为用于ECX的预测的来源,且PR3为用于ECX的非预测的来源)
MOV[寻址模式A],PR4 (ADD 2的储存)
在其它实施例中,分配单元104可不配置成为根据加载操作的操作识别预测的来源操作数。取而代之,如图8中所示,分配单元104可包括操作转换器108,配置将加载操作转换成为一个或多个的包括寄存器至寄存器移动操作的操作,以便将预测的加载结果提供给依附的操作。执行加载操作的转换以响应链接存在于加载操作的预测结果和由特定的物理寄存器名称所识别的数据值之间的指示。在一些实施例中,此指示由链接检测器182所提供,该链接检测器182可包括堆栈文件132和/或内存文件136。在其它的实施例中,链接检测器182可包括配置以响应诸如条件移动操作而链接数据值的逻辑,如上所述。
在一个实施例中,操作转换器180可接收用于操作的输入运算码,以及是否检测到寄存器值和操作的预测的结果之间的链接的指示。若该操作为加载并已检测到预测的链接,则操作转换器180可输出一个寄存器至寄存器移动操作的运算码。分派单元104可使用通过链接检测单元182输出的标记作为寄存器至寄存器移动的来源操作数标记,而分派寄存器至寄存器移动操作。
在一些实施例中,可配置操作转换器180以分派所得的寄存器至寄存器移动,而使得调度装置在寄存器至寄存器移动操作的登录项中储存所需用于寄存器至寄存器移动和原来加载操作的操作数标记。这使得若检测到寄存器至寄存器移动操作的预测结果为不正确的话,则可再发出操作作为原来的加载操作。为了执行此操作,额外的来源操作数可加至从修改的加载操作获得的各寄存器至寄存器移动操作(或者,在一替代实施例中,可修改已经存在的来源操作数以执行此操作)。在一些实施例中,可通过执行原始加载地址的计算和/或比较链接的数据值与实际加载结果数据值而验证寄存器至寄存器移动操作的预测结果。若该预测结果为不正确,则可存取该数据高速缓存以便获得正确的加载结果。再广播更正的加载结果可引起调度装置118再发出任何使用不正确值所执行的依附操作。
在一些实施例中,可配置操作转换器180以将加载操作转换成双重性操作。如同加载操作,此双重性操作可包含地址计算和数据移动。而不同于加载操作,由双重性操作所起始的数据移动为寄存器至寄存器移动。再者,由双重性操作所起始的数据移动可在地址计算已经完成之前发生。可使用地址计算以验证预测的链接是否为正确。若预测的链接为不正确,则可再发出双目的操作作为正常的加载操作,和当完成数据高速缓存存取时,其结果可再广播至依附的操作。
下列的例子显示不同的实施例如何可以转换此示例性序列操作:
ADD PR2,PR1,PR1 (ADD 1)
STORE[寻址模式A],PR2 (STORE 1)
LOAD PR3,[寻址模式A] (LOAD 1)
ADD PR4,PR3,PR3 (ADD 2)
在此序列中,特定的操作可由一个或多个插入操作而分离。然而,假设没有插入操作出现来修改用于寻址模式A的值,或者修改储存在从寻址模式A所计算的地址和在PR2中的数据值,则可检测到储存于PR2中的数据值和从寻址模式A所计算的地址之间的预测的链接。
在一个实施例中,为响应通过预测链接检测器182的预测链接检测,操作转换器180可转换LOAD 1成为双目的移动操作:MOV PR3,PR2。除了指明寄存器来源和目的地以外,此双目的移动操作也可指明寻址模式A,而使得可执行对于LOAD 1的地址计算。然而,一旦可得到ECX后,即可立即发出双目的移动操作的移动部分。一旦广播双部分操作的移动部分的结果后,可使用移动操作的预测结果作为操作数而发出ADD 2。当执行地址计算时,可验证预测链接。若该预测的链接为不正确,则加载/储存单元可提供指示至调度装置,该指示使得调度装置再发出双目的移动操作以作为加载操作。可广播加载操作的结果,而导致再发出诸如ADD 2的任何已使用移动预测结果执行的依附操作。值得注意的是,可使用单一调度装置登录项而调度此双目的操作,且调度装置118可选择双目的操作用于发出二次:一次用于加载的地址计算和一次用于寄存器至寄存器移动。
在一个替代实施例中,操作转换器180可响应检测到的预测链接,而将LOAD 1转换成为两个链接的操作,LOAD PR3,[寻址模式A]和MOVPR3,PR2。不像先前包含双目的操作的例子,这些链接操作可各自取得在调度装置118中的登录项,以代替共享单一调度装置登录项。当寄存器至寄存器移动操作发出时,诸如ADD 2的依附操作可使用PR3的预测值作为操作数值而发出。可标记LOAD操作作为特定类型的加载操作,而使得若决定该预测的链接正确时,不广播该加载的结果标记(或者,广播该移动的结果为正确,和依附操作不应再发出的指示)。同时,若加载和移动操作在同一循环中广播他们的结果,则可提供一指示而使得加载结果用于依附操作而不是移动的结果。在一些实施例中,这种情况可通过加上额外的位至微处理器100内的各标记总线而发生,该位指示调度装置将对哪一个标记响应。若预测链接为不正确(例如,当通过加载的结果标记的广播所指示),则可取消移动操作(例如,调度该移动操作的调度装置118可解除分配当前用于分配该寄存器至寄存器移动的该调度装置登录项,而使得该操作不能再发出)。在许多实施例中,可配置调度装置再发出任何使用预测加载结果执行的依附操作,若加载结果标记再出现于结果总线上。在一个替代实施例中,可配置调度装置118成同时发出两个链接的操作。在这样的实施例中,两个链接的操作可使用读取端口进入物理寄存器堆,该物理寄存器堆否则将由原来的未修正的LOAD 1操作所使用。
图9显示转换加载操作以包括预测的寄存器至寄存器移动操作的一个方法的实施例。如图中所示,在步骤1401,若检测到由特定标记所识别的寄存器数据值与加载操作的预测结果之间的链接(例如,通过堆栈文件或内存文件),则可修改加载操作以包括具有来源操作数标记等于链接到预测加载结果的数据值的标记的寄存器至寄存器移动操作,如在步骤1403所示。在步骤1405,寄存器至寄存器移动操作的执行可包含输出该标记所识别的数据值以及加载结果的标记到结果总线上。
在步骤1409可验证预测结果(例如,通过执行对于原来加载的地址计算)。若预测结果为正确,则加载的结果可不再广播到结果总线上(或可取而代之,可再广播加载的结果,并伴随着依附操作不应响应再广播的结果而再发出的指示)。若预测结果为不正确,则可存取数据高速缓存以恢复正确的加载结果,且正确的加载结果可广播于结果总线上。这可接着造成任何使用预测结果值的已发出依附操作再发出。值得注意的是,在一些情况下,在执行寄存器至寄存器移动操作之前,可验证预测结果。若预测结果为不正确,则不执行寄存器至寄存器移动操作。
若加载操作的预测结果和寄存器数据值之间未检测到链接(例如,加载的地址模式在堆栈文件中未命中),则可不修改加载。加载可正常地执行,存取该数据高速缓存并将其结果广播于结果总线上,如步骤1417和1419所示。
追踪缓存
图1A显示根据一个实施例的微处理器。在此实施例中,微处理器包括追踪缓存160,该追踪缓存160配置以高速缓存指令的轨迹(trace)和/或至少部分的译码操作。在所示实施例中,追踪缓存160位于微处理器的后端,而使得当各操作被退除时,通过追踪填充单元(trace fillunit)162而建立轨迹。若再取出轨迹内的操作时,可从追踪缓存160取出操作而不从指令高速缓存106或系统内存200取出操作。值得注意的是在其它实施例中,追踪填充单元162可包含在微处理器的前端(例如,在分派单元104之前)。
图10显示追踪缓存160的一个实施例。如图中所示,追踪缓存160可包括一个或多个追踪缓存登录项170。各追踪缓存登录项170储存指令或操作的轨迹172。轨迹172可包括从多于一个的基本区段来的几个指令或操作。在特定轨迹内的一些操作可根据包括在轨迹内的一个或多个分支操作,而在同一轨迹内的其它操作可不根据这些分支操作。在一些实施例中,轨迹172也可包括流程控制信息以识别包含于各轨迹内的各操作是否根据包含在该轨迹内的一个或多个分支操作,是否在建立轨迹时也取得这些分支操作,且当下一次执行分支操作时,若分支操作以不同方式分解的话,包括一卷标以识别控制将转换到的操作或指令。
各轨迹可包括已优化的操作。优化可包括减少轨迹内的操作的大小和/或数目,而使得在该轨迹内的操作占用追踪缓存登录项170和/或调度装置118内较少的空间。优化还造成轨迹内的一个或多个操作变成可较早发出(例如,通过减少在相同轨迹中各操作间的数据依附性)等等。
若有任何由于执行该轨迹172内的指令和/或操作而造堆栈指针(例如,ESP)的改变,各追踪缓存登录项170可包括指示该改变的信息174。当处理包含于轨迹内的各操作时,堆栈文件控制器202(或内存文件控制器402,若内存文件136执行堆栈文件功能的话)可使用此信息以更新该堆栈指针寻址调整值,调整输入到该堆栈文件的各操作的寻址模式,和/或调整在堆栈文件储存器内的登录项的寻址模式。举例而言,包括各加4至堆栈指针值的三个操作的追踪缓存登录项170当分派这三个操作时,可指示该堆栈和/或内存文件控制器应加12至堆栈指针寻址模式调整值。若另一个操作设定堆栈帧指针等于堆栈指针,则当分派该操作时,追踪缓存登录项170可包括指示堆栈和/或内存文件控制器应设定补偿值等于0的信息(或设定该堆栈帧指针寻址模式调整值等于堆栈指针寻址模式调整值)。
在各追踪缓存登录项170中包含指示对该堆栈指针和/或堆栈帧指针改变的信息174,可使该堆栈和/或内存文件保持正确,甚至在分派几个轨迹以后。没有此信息,轨迹内各操作的优化在堆栈和/或内存文件处理这些优化操作后,可能造成堆栈和/或内存文件内的错误。举例而言,指令序列可包括:
PUSH<>
MOV EBP,ESP
PUSH<>
这些指令可分解成下列的操作序列:
MOV[ESP-4],<>
ADD ESP,ESP,-4
MOV EBP,ESP
ADD ESP,ESP,-4
MOV[ESP],<>
值得注意的是几乎所有的上述操作皆根据由先前操作所产生的数据值。因此,当等待先前操作的结果出来时,这些操作在调度装置中有极大可能无法进行。当追踪填充单元162处理该一连串操作,以储存作为追踪缓存登录项170内轨迹172的一部分时,追踪填充单元162可执行某些转换以便减少各操作之间的数据依附性。例如,上述的操作序列可优化为:
MOV[ESP-4],<>
ADD o1,ESP,-4
MOV EBP,o1
ADD[ESP-8],<>
ADD ESP,ESP,-8
此外,信息174指示在轨迹内有共-8的ESP偏移,和+4的ESP-ESP偏移可包括在追踪缓存登录项170中。追踪填充单元162可在当处理各原来的操作时一次更新一个操作信息,和在包括优化操作的轨迹172的追踪缓存登录项170中储存最后值。
由于执行于各操作的转换,在上述例子中的各优化操作现仅根据ESP值。因此,一旦可取得ESP值时,在轨迹中的所有的操作就立刻变成可发送。然而,某些优化,诸如在ADD运算中将ESP“定位置(slotified)”至暂时寄存器o1的一个优化,会模糊信息,该信息否则将由堆栈和/或内存文件控制器所使用以维持堆栈和/或内存文件的正确性。在此示例性中,定位置转换(slotification transformation)隐藏MOV EBP,01操作实际上指定从堆栈和/或内存文件控制器来的堆栈指针的值给EBP的事实,该内存文件控制器可配置成仅通过比较寄存器逻辑识别符而检测此指定。由于轨迹172内操作的执行,包含在追踪缓存登录项170内的信息174指示可通过堆栈和/或内存文件控制器而使用ESP-EBP偏移等于+4,以适当地调整寻址模式调整值、寻址模式和/或偏移值,以响应对该轨迹中操作的处理。
因此,在一些实施例中,优化诸如上述的定位置转换可导致一些操作将以某种格式储存于追踪缓存登录项170内,该格式在堆栈和/或内存文件中将不会被辨认出来,即使可通过在堆栈和/或内存文件中命中或通过引起更新一个或多个寻址模式、寻址模式调整值、和/或偏移值而辨认出这些操作的未优化形式。不管这些操作有多混乱,然而,由于信息174包含于各追踪缓存登录项170内,堆栈和/或内存文件可保持正确。
若从多于一个基本区段来的操作包含于轨迹内,则该轨迹可包括对应同一基本区段内各组操作的信息174。堆栈和/或内存文件控制器可根据与各调整值相关联的基本区段是否分派和/或预测将要(或实际地)执行,而使用各组的信息174。例如,轨迹可包括从两个不同的基本区段和每一群组操作的一组信息174。第二组操作的执行可取决于包含于第一组操作中的一个分支的采取。当分派该轨迹时,若预测未采取该分支,则堆栈和/或内存文件控制器可使用与第一组操作相关联的信息174来作调整。然而,堆栈和/或内存文件控制器可忽略关联于另一组操作的信息174,因为该分支预测指示将不执行这些操作。
示例性计算机系统
图11显示计算机系统400的一个实施例的方框图。该计算机系统400包括处理器100,该处理器100经由总线桥接器402联接到各种系统组件。处理器100可包括如上述的分派单元104、堆栈文件132、调度装置118、和/或预测寄存器图800的实施例。可能并考虑有计算机系统的其它实施例。在所述系统中,主存储器200经由内存总线406联接到总线桥接器402,图形控制器408经由AGP总线410联接到总线桥接器402。几个PCI装置412A至412B经由PCI总线414联接到总线桥接器402。也可设有第二总线桥接器416以容纳经由EISA/ISA总线430至一个或多个EISA或ISA装置418的电接口。在此例子中,处理器100经由CPU总线424而联接至总线桥接器402,并联接至可选的L2高速缓存428。在一些实施例中,处理器100可包括集成L1高速缓存(图中未显示)。
总线桥接器402提供处理器100、主存储器404、图形控制器408、和附接到PCI总线414的各装置之间的接口。当从连接到总线桥接器402的其中一个装置接收操作时,总线桥接器402识别该操作的目标(例如,特定的装置,或在PCI总线414的情况时,该目标是在PCI总线414上)。总线桥接器402将操作路由至该目标装置。总线桥接器402通常将操作从由来源装置或总线所使用的协议转译至由该目标装置或总线所用的协议。
除了为PCI总线414提供至ISA/EISA总线的接口之外,第二总线桥接器416可合并额外的功能。第二总线桥接器416的外部或与第二总线桥接器416集成的输入/输出控制器(图中未显示)也可包括于计算机系统400内,以提供用于键盘和鼠标422和用于各种串行和并列端口的操作支持。在其它的实施例中,外部的高速缓存单元(图中未显示)也可联接至处理器100与总线桥接器402之间的CPU总线424。或可选择的,外部高速缓存可联接至总线桥接器402,且用于外部高速缓存的高速缓存控制逻辑可集成到总线桥接器402中。L2高速缓存428以背面结构(backside configuration)联接至处理器100。应注意的是L2高速缓存428可与处理器100分离,与处理器100集成到一卡盒(例如,插槽1或插槽A)中,或甚至与具有处理器100的半导体基板集成。
主存储器200为应用程序储存于其中且处理器100可从该主存储器200取得应用程序而首先执行的内存。适当的主存储器200包括动态随机存取存储器(DRAM)。例如,可适合使用多个库(bank)的同步动态随机存取存储器(SDRAM)或Rambus公司的Rambus动态随机存取存储器(RDRAM)。
PCI装置412A至412B示出了多种外围设备,诸如网络接口卡、视频加速器、音频卡、硬盘或软盘驱动器或驱动控制器、小型计算机系统接口(SCSI)适配器和电话卡。同样地,ISA装置418为例示的各种类型的外围设备,诸如调制解调器、声卡、和诸如GPIB或现场总线接口卡的各种的数据采集卡。
图形控制器408提供用来控制显示器426上文字内容和影像的显现。图形控制器408可具体实现本领域技术人员已知的典型的图形加速器,以显现能有效地移入主存储器200和从主存储器200移出的三维数据结构。图形控制器408因此可以是AGP总线410的主控者,其中该图形控制器408可请求和接收对总线桥接器402内的目标接口的存取,由此获得对主存储器200的存取。专用图形总线允许从主存储器404快速取得数据。对某些操作而言,图形控制器408可进一步配置以在AGP总线410上产生PCI协议事项。因此总线桥接器402的AGP接口可包括支持AGP协议事项以及PCI协议目标和起始端事项的功能。显示器426为影像和文字内容可呈现于其上的任何的电子显示器。适当的显示器426包括阴极射线管(CRT)、液晶显示器(LCD)等等。
值得注意的是,虽然在上述说明中AGP、PCI、和ISA或EISA总线已作为示例给出,但是当需要时可用任何总线架构替代。还值得注意的是,计算机系统400可以是包括额外处理器(例如,处理器100a显示为计算机系统400的可选组件)的多重处理计算机系统。处理器100a可与处理器100类似。具体来说,处理器100a可以是处理器100的相同的复制品。处理器100a可经由独立总线(如图11中所示)而连接至总线桥接器402,或可与处理器100共享CPU总线424。再者,处理器100a可联接至与L2高速缓存428相似的L2高速缓存428a。
现在参照图12,其显示计算机系统400的另一个实施例,该计算机系统400可包括如上述的分派单元104、堆栈文件132、调度装置118、和/或预测寄存器图800。也存在并考虑其它的实施例。在图12所示的实施例中,计算机系统400包括几个处理节点612A、612B、612C、和612D。各处理节点经由包括在各自处理节点612A至612D内的内存控制器616A至616D而联接至各自的内存614A至614D。此外,处理节点612A至612D包括用于处理节点612A至612D之间通讯的接口逻辑。举例而言,处理节点612A包括用来与处理节点612B通讯的接口逻辑618A,用来与处理节点612C通讯的接口逻辑618B,和用来与又一处理节点(图中未显示)通讯的第三接口逻辑618C。同样地,处理节点612B包括接口逻辑618D、618E、和618F;处理节点612C包括接口逻辑618G、618H、和618I;及处理节点612D包括接口逻辑618J、618K、和618L。处理节点612D被联接以经由接口逻辑618L而与多个输入/输出装置(例如,以菊链配置的装置620A至620B)通讯。其它的处理节点可用相似的方式而与其它的输入/输出装置通讯。
处理节点612A至612D执行基于分组的链接,用于处理节点间通讯。在本实施例中,该链接以数组的单向线路来实施(例如,线路624A用来将分组从处理节点612A传输至处理节点612B,和线路624B用来将分组从处理节点612B传输至处理节点612A)。如图12中所示,其它组的线路624C至624H用来在其它的处理节点之间传输分组。一般而言,线路624的各组可包括一条或多条的数据线,一条或多条对应于这些数据线的时钟线、和一条或多条指示传输的分组的类型的控制线。对于处理节点之间的通讯,链接可以高速缓存一致性的方式操作,或对于处理节点和输入/输出装置之间的通讯,链接可以非一致性的方式操作(或至诸如PCI总线或ISA总线的公知结构的输入/输出总线的总线桥接器)。再者,链接可使用如所示的输入/输出装置之间的菊链结构而以非一致性的方式操作。应注意的是从一个处理节点传输至另一个处理节点的分组可通过一个或多个的中间节点。举例而言,如图12中所示,通过处理节点612A传输至处理节点612D的分组可通过处理节点612B或处理节点612C。可使用任何适当的路由算法。计算机系统400的其它实施例可包括较图12中所示实施例中更多或更少的处理节点。
一般而言,分组在各节点之间的线路624上可传输为一个或多个位时间。位时间可以是在对应时钟线上时钟信号的上升沿或下降沿。分组可包括用于起始事项的命令分组、用于维持高速缓存一致性的探测分组、和响应探测和命令而来的响应分组。
处理节点612A至612D除了内存控制器和接口逻辑以外,还可包括一个或多个处理器。广义而言,处理节点包括至少一个处理器和当需要时可选择性地包括用于与内存和其它逻辑通讯的内存控制器。具体来说,各处理节点612A至612D可包括一个或多个处理器100的复制品。外部接口单元18可包括节点内的接口逻辑618,以及内存控制器616。
内存614A至614D可包括任何适当的内存装置。例如,内存614A至614D可包括一个或多个RAMBUS DRAM(RDRAM)、同步DRAM(SDRAM)、静态RAM等。计算机系统400的地址空间在内存614A至614D之间划分。各处理节点612A至612D可包括用来决定哪一个地址映射至614A至614D中哪一个内存的内存映射,而因此对于特定地址的内存请求将路由到处理节点612A至612D中的该个处理节点。在一个实施例中,计算机系统400内的地址的一致点为联接到对应于该地址的内存储存字节的内存控制器616A至616D。换言之,内存控制器616A至616D负责确保对应内存614A至614D的各内存存取以高速缓存一致性的方式发生。内存控制器616A至616D可包括控制电路,用来连接到内存614A至614D。此外,内存控制器616A至616D可包括用于队列内存请求的请求队列。
接口逻辑618A至618L可包括用于接收从链路来的分组的各种缓冲器,和用于缓冲将根据链接而发送的分组。计算机系统400可使用任何适当的用于传输分组的流程控制机制。举例而言,在一个实施例中,各接口逻辑618储存由接口逻辑所连接到的链接另一端的接收器内各类型缓冲器的计数数目。接口逻辑并不传送分组,除非接收接口逻辑具有闲置的缓冲器以储存分组。当通过路由出分组而空出接收缓冲器时,接收接口逻辑传输一信息至发送接口逻辑以指示缓冲器已经闲置。如此的机制可称之为“连动式(coupon-based)”系统。
输入/输出装置620A至620B可以是任何适当的输入/输出装置。举例而言,输入/输出装置620A至620B可包括用于与另一计算机系统通讯的各装置,这些装置(例如,网络接口卡或调制解调器)可联接至该另一计算机系统。再者,输入/输出装置620A至620B可包括视频加速器、音频卡、硬盘或软盘驱动器或驱动控制器、小型计算机系统接口适配器和电话卡、声卡、和诸如GPIB或现场总线接口卡的各种数据采集卡。值得注意的是术语“输入/输出装置”和术语“外围设备”在此文中有相同的意义。
在此所使用的“时钟周期”或“周期”二词是指时间间距,在此时间间距期间各种阶段的指令处理管线完成其工作。内存组件(比如寄存器或数组)根据定义时钟周期的时钟信号而获取各指令和计算的值。例如,内存组件可根据时钟信号的上升沿或下降沿而获取数值。
本领域技术人员一旦完全了解本发明上述揭示内容后,显然可对其作许多的变更和修饰。下列权利要求范围将被解释为包含所有的这些变化和修饰。