一种回应非标准返回序列的检测而选择性覆盖返回堆栈预测的装置及方法

文档序号:6429361阅读:72来源:国知局
专利名称:一种回应非标准返回序列的检测而选择性覆盖返回堆栈预测的装置及方法
技术领域
本发明有关于一种微处理器中的分支预测的相关技术领域,尤指一种有关于使用返回堆栈及分支目标地址高速缓存的返回指令目标地址预测。
背景技术
微处理器为一种执行计算机程序所指定的指令的数字装置。现代的微处理器一般为管线式。亦即,在微处理器的不同区块或管线阶段内,可同时使许多指令运作。Hennessy与Patterson将管线定义为“一种多种指令可同时执行的实施技术”。在“Computer ArchitectureA Quantitative Approach”(第二版),1996年由加州旧金山的Morgan Kaufmann出版商出版,John L.Hennessy与david A.Patterson所著。他们提供了以下的管线佳例管线与组装线类似。在汽车组装线中,有许多步骤,每个步骤对于汽车的建造都有某些贡献。虽然在不同的汽车上,但是每个步骤会与其它步骤并行地运作。在计算机管线中,管线中的每个步骤会完成指令中的一部份。如同组装线,不同步骤会并行地完成不同指令中的不同部份。这些步骤中的每一个称为管线阶段或管线区段。这些阶段会将一个阶段连接至下个阶段,而形成管道-指令会从一端进入,经由这些阶段来进行,并且从另一端离开,就如同组装线中的汽车。
微处理器根据频率周期来运作。通常,以一个频率周期为单位,指令会从微处理器管线的一个阶段传至另一阶段。在汽车组装线中,若在此线的一个阶段中的工作者因为未有汽车需运作而处于闲置状态,则此线的生产或效能会降低。同样地,若微处理器阶段因为未有指令需运作而在一频率周期期间,处于闲置状态(通常称为管线泡沫(pipeline bubble)的事件),则处理器的效能会降低。
管线泡沫的潜在原因是分支指令。当遭遇分支指令时,处理器必须决定分支指令的目标地址,并且开始在目标地址(而不是在分支指令之后的下个循序地址)处提取指令。因为明确地决定目标地址的管线阶段刚好位于提取指令的阶段之后,所以泡沫是由分支指令所产生。如底下更多的讨论,微处理器通常包括分支预测机制,以降低由分支指令所产生的泡沫的数目。
分支指令的一种特定型式是返回指令。为了使程序流程恢复到呼叫例程(其为使程控转移到副例程的例程)的目的,返回指令通常是由副例程所执行的上一个指令。在典型的程序序列中,呼叫例程会执行呼叫指令。呼叫指令会指示微处理器,将返回地址推入内存中的堆栈,然后使副例程的地址分支。推入堆栈的返回地址为紧接于呼叫例程中的呼叫指令之后的指令的地址。副例程最终会执行返回指令,其会使返回地址离开堆栈(其是先前通过呼叫指令所推入),并且会使返回地址分支,其为返回指令的目标地址。返回指令的一例为X86 RET指令。呼叫指令的一例为x86呼叫指令。
执行呼叫/返回序列的优点之一是能使副例程呼叫巢状化。例如,主例程会呼叫副例程A,用以推入返回地址;以及副例程A会呼叫副例程B,用以推入返回地址;然后副例程B会执行返回指令,用以将由副例程A所推入的返回地址推出;然后副例程A会执行返回指令,用以将由主例程所推入的返回地址推出。巢状式副例程呼叫的概念非常有用,并且上例可延伸至与可支持的堆栈大小一样多的呼叫深度。
因为呼叫/返回指令序列的规则特性,所以现代微处理器会使用平常称为返回堆栈的分支预测机制,来预测返回指令的目标地址。返回堆栈为小缓冲器,以后进先出的方式,来快取返回地址。每次遇到呼叫指令时,推入内存堆栈的返回地址也会推入返回堆栈。每次遇到返回指令时,在返回堆栈的顶端的返回地址会推出,并且用来当作返回指令的预测目标地址。因为微处理器不必等待从内存堆栈中所提取的返回地址,所以此运作会降低泡沫。
由于呼叫/返回序列的规则特性,所以返回堆栈预测返回指令目标地址通常非常精确。然而,本发明者已发现某些程序(如某些操作系统)不会总是以标准形式来执行呼叫/返回指令。例如,执行位于x86微处理器的上的程序代码(code)可包括呼叫(CALL),然后推入(PUSH),用以将不同的返回地址置于堆栈上,然后返回(RET),其会导致回到推入的返回地址,而不是回到CALL后的指令的地址(其通过CALL而推入堆栈)。在另一例中,程序代码会执行PUSH,用以将返回地址置于堆栈上,然后会执行CALL,然后会执行二个RET指令,其会导致回到第二RET的事件中的推入的返回地址,而不是回到位于PUSH之前的CALL后的指令。这种行为会因为返回堆栈,而导致预测错误。
因此,需要一种能更精确预测返回指令目标地址,特别是用以执行非标准呼叫/返回的程序代码的装置。

发明内容
本发明提出一种装置,用以检测返回堆栈预测错误且响应地设定对应于返回指令的覆盖(override)旗标,以致于在下次出现的返回指令之后,微处理器可立即通过除了返回堆栈之外的机制来预测返回指令的目标地址。分支目标地址高速缓存(Branch Target Address Cache,简称BTAC)用来储存对应于返回指令的覆盖旗标。在一实施例中,用以预测返回指令的目标地址的其它机制为BTAC,其在正常呼叫/返回序列的事件中,或许通常会比返回堆栈的精确度低,但是其在用以执行非标准呼叫/返回序列的程序代码(code)的事件中,会较为精确。
在本发明的一方案中,提出一种微处理器。此微处理器包括返回堆栈,用以产生返回指令的目标地址的第一预测。此微处理器还包括分支目标地址高速缓存(BTAC),用以产生返回指令的目标地址的第二预测,以及用以产生覆盖指标。若第一预测错误预测第一事件的返回指令的目标地址,则覆盖指标会显示预定值。此微处理器还包括分支控制逻辑电路,其耦接至返回堆栈及BTAC,若覆盖指标显示预定值,则对于第二事件的返回指令而言,用以使此微处理器分支到第二预测的目标地址,而不会分支到第一预测。
在另一方案中,本发明提出一种用以改善微处理器中的分支预测精确度的装置,此微处理器具有分支目标地址高速缓存(BTAC)及返回堆栈,每个返回堆栈会产生返回指令的目标地址的预测。此装置包括覆盖指标。此装置还包括更新逻辑电路,耦接至覆盖指标,若由返回堆栈所产生的预测错误预测第一出现的返回指令的目标地址,则其用以使覆盖指标更新为真值。此装置还包括分支控制逻辑电路,耦接至覆盖指标,若覆盖指标为真,则对于第二出现的返回指令而言,是用以选择由BTAC所产生的预测,而不会选择由返回堆栈所产生的预测。
在另一方案中,本发明提出一种预测微处理器中的返回指令的目标地址的方法。此方法包括响应于返回堆栈错误预测返回指令的目标地址,而将覆盖指标更新为真值。此方法还包括在更新之后,通过分支目标地址高速缓存(BTAC)来产生目标地址的预测。此方法还包括在BTAC产生预测之后,判断覆盖指标是否具有真值。此方法还包括若覆盖指标具有真值,则使此微处理器分支到由BTAC所产生的预测。
在另一方案中,本发明提出一种用以改善微处理器中的分支预测精确度的装置,此微处理器具有返回堆栈及另一种预测装置,每个会产生返回指令的目标地址的预测,以及分支目标地址高速缓存(BTAC)。此装置包括覆盖指标。此装置还包括更新逻辑电路,耦接至覆盖指标,若由返回堆栈所产生的预测错误预测第一出现的返回指令的目标地址,则其用以使BTAC中的覆盖指标更新为真值。此装置还包括分支控制逻辑电路,耦接至覆盖指标,若覆盖指标为真,则对于第二出现的返回指令而言,用以选择由另一种预测装置所产生的预测,而不会选择由返回堆栈所产生的预测。
在另一方案中,本发明提出一种传输媒体中所包含的计算机数据信号,包括计算机可读取程序代码,用以提供给微处理器。此程序代码包括第一程序代码,用以提供给返回堆栈,其用以产生返回指令的目标地址的第一预测。此程序代码还包括第二程序代码,用以提供给分支目标地址高速缓存(BTAC),其用以产生返回指令的目标地址的第二预测,以及用以产生覆盖指标。若第一预测错误预测第一事件的返回指令的目标地址,则覆盖指标会显示预定值。此程序代码还包括第三程序代码,用以提供给分支控制逻辑电路,其耦接至返回堆栈及BTAC,若覆盖指标显示预定值,则对于第二事件的返回指令而言,用以使微处理器分支到第二预测的目标地址,而不会分支到第一预测。
本发明的一优点是可潜在地改善执行非标准呼叫/返回序列的程序的分支预测精确度。当使用如在此实施例中所述的覆盖机制时,所执行的仿真已显示benchmark分数的效能改善。此外,若微处理器已包括BTAC及另一种返回指令目标地址预测机制,则会以增加小量硬件,来实现此优点。
在研读说明书的其余部分及附图式之后,本发明的其它特性及优点将立即会变成显然可知。


图1是根据本发明的管线式微处理器的方块图;图2是根据本发明的图1的微处理器的运作流程图;图3是根据本发明的图1的微处理器的运作流程图;图4是根据本发明的图1的微处理器的运作的流程图;图5是根据本发明的另一实施例的管线式微处理器的方块图;以及图6是根据本发明的另一实施例的图5的微处理器的运作的流程图。
其中,附图标记说明如下100,500管线式微处理器101、103、105、107、111、1 13、121、123、125、127管线缓存器102BTAC阵列104BTAC返回堆栈106,126多工器108指令高速缓存112分支控制逻辑电路114指令解码器116F-阶段返回堆栈118比较器122BTAC更新逻辑电路124分支解决逻辑电路132提取地址134BTAC更新请求信号136覆盖信号138,154返回(ret)信号142、144、146、164、176目标地址148E-阶段目标地址信号152未匹配信号158预测错误信号
162下个循序提取地址164预测目标地址168多工(mux)选择信号172override_F信号174override_E信号182加法器184控制信号186指令字节具体实施方式
现在参照图1,其显示根据本发明的管线式微处理器100的方块图。在此一实施例中,微处理器100包括指令集实质上符合x86架构指令集(包括x86呼叫(CALL)及返回(RET)指令)的微处理器。然而,本发明不受限于x86架构的微处理器,而是可用于使用返回堆栈,来预测返回指令的目标地址的任何微处理器中。
微处理器100包括指令高速缓存108。指令高速缓存108会从耦接至微处理器100的系统内存中,快取指令字节。指令高速缓存108会快取数条线的指令字节。在一实施例中,快取线包括32个字节的指令字节。指令高速缓存108会从多工器106中,接收提取地址132。若提取地址132命中指令高速缓存108,则指令高速缓存108会输出由提取地址132所指定的一快取线的指令字节186。特别而言,由提取地址132所指定的此快取线的指令字节186会包括一个或多个返回指令。指令字节186会经由管线缓存器121及123而沿着微处理器100管线往下传送,如图所示。虽然只有二个管线缓存器121及123显示用于往下传送的指令字节186,所以其它实施例会包括更多的管线阶段。
微处理器100还包括耦接至管线缓存器123的输出的指令解码器(称为F-阶段指令解码器114)。指令解码器114会接收指令字节186及相关信息,以及将指令字节解码。在一实施例中,微处理器100会支持可变长度的指令。指令解码器114会接收串流指令字节,并且会将指令格式化为分离指令,以判断每个指令的长度。特别而言,指令解码器114会使返回(ret)信号154产生真值,以显示其已解码成返回指令。在一实施例中,微处理器100包括用以执行微指令的精简指令集计算机(RISC)核心,以及指令解码器114会将宏指令(如x86宏指令)转译成原有RISC指令集的微指令。微指令会经由管线缓存器125及127而沿着微处理器100管线往下传送,如所示。虽然只有二个管线缓存器125及127显示用于往下传送的微指令,所以其它实施例会包括更多的管线阶段。例如,这些阶段可包括缓存器文件、地址产生器、数据加载/储存单元、整数执行单元、浮点执行单元、MMX执行单元、SSE执行单元、以及SSE-2执行单元。
微处理器100还包括耦接至管线缓存器127的输出的分支解决逻辑电路(称为E-阶段分支解决逻辑电路124)。当分支指令沿着微处理器100管线往下传送时,分支解决逻辑电路124会接收分支指令(包括返回指令),以及最后会决定出所有分支指令的目标地址。分支解决逻辑电路124会将正确分支指令目标地址提供给多工器106的输入的E-阶段目标地址信号148。此外,若目标地址用来预测分支指令,则分支解决逻辑电路124会接收预测目标地址。分支解决逻辑电路124会比较预测目标地址与正确目标地址148,并且判断是否做出目标地址的错误预测(如因为分支目标地址高速缓存(BranchTarget Address Cache,简称BTAC)阵列102、BTAC返回堆栈104、或F-阶段返回堆栈116),其全部会于底下详细揭示。若做出目标地址的错误预测,则分支解决逻辑电路124会产生预测错误信号158的真值。
微处理器100还包括分支控制逻辑电路112,其耦接至多工器106。分支控制逻辑电路112会产生多工(mux)选择信号168,用以控制多工器106选择多种输入地址其中之一(如底下所述),而输出当作提取地址132。分支控制逻辑电路112的运作会于底下进行更详细地说明。
微处理器100还包括加法器182,用以接收提取地址132,以及使提取地址132增加,而产生下个循序提取地址162,来当作多工器106的输入。若在已知频率周期的期间,未预测或执行分支指令,则分支控制逻辑电路112会控制多工器106选择下个循序提取地址162。
微处理器100还包括分支目标地址高速缓存(BTAC)阵列102,其耦接用以接收提取地址132。BTAC阵列102包括多个储存元件,或项目(entry),每个用以快取分支指令目标地址及相关的分支预测信息。当将提取地址132输入至指令高速缓存108且指令高速缓存108响应地产生此线的指令字节186时,BTAC阵列102实质上会同时产生分支指令是否存在于快取线186中的预测、分支指令的预测目标地址、以及分支指令是否为返回指令。有帮助的是,根据本发明,BTAC阵列102也会产生覆盖指标,用以指示返回指令的目标地址应该由BTAC阵列102而不是由返回堆栈来预测,如底下详细地说明。
由BTAC阵列102所预测的返回指令的目标地址164用来当作第二多工器126的输入。多工器126的输出(目标地址144)用来当作多工器106的输入。目标地址144也会经由管线缓存器111及113而沿着微处理器100管线往下传送,如图所示。管线缓存器113的输出称为目标地址176。虽然只有二个管线缓存器111及113显示用于往下传送的目标地址144,所以其它实施例会包括更多的管线阶段。
在一实施例中,BTAC阵列102配置为可储存4096个目标地址及相关信息的2向集合组合式(way set associative)高速缓存。然而,本发明不受限于一特定实施例的BTAC阵列102。在一实施例中,提取地址132的较低位会选择BTAC阵列102中的一组,或列。地址卷标储存用于BTAC阵列102中的每个项目,用以显示分支指令(其目标地址储存于对应的项目中)的地址的较高地址位。提取地址132的较高位会与选择组中的每个项目的地址卷标进行比较。若提取地址132的较高位与选择组中的有效地址卷标匹配,则BTAC阵列102中的命中会发生,其显示BTAC阵列102会预测分支指令是存在于由提取地址132所选择的指令快取线186中,并且是通过实质上与目标地址预测164同时的指令高速缓存108而输出。
BTAC阵列102中的每个项目也会储存存在于由提取地址132所指定的指令快取线186中的分支指令的型式的指示。亦即,BTAC阵列102也会储存分支指令的型式,其预测目标地址164是通过BTAC阵列102而传送到多工器126。特别而言,若分支指令型式为返回指令,则BTAC阵列102会使返回(ret)信号138(其会传送到分支控制逻辑电路112)产生真值。此外,BTAC阵列102会输出覆盖信号136,如底下详细地讨论,其也会传送到分支控制逻辑电路112。在一实施例中,每个BTAC阵列102项目中所储存的分支指令型式字段包括二个位,其以如表1中所显示的来进行编码。
00 不返回或呼叫01 呼叫10 正常呼叫11 覆盖返回表1在一实施例中,分支型式字段的最大有效位位于返回信号138上,而覆盖信号的最小有效位位于覆盖信号136上。在呼叫指令的事件中,不会使用覆盖信号136。如可观察到的是,因为型式字段已经是二个位,并且四个可能状态中,只使用三个,所以不需额外的储存元件来容纳覆盖位。覆盖信号136会经由管线缓存器101、103、105、以及107而沿着微处理器100管线往下传送,如所示。特别而言,管线缓存器103的输出(称为覆盖(override)_F信号172)会传送到分支控制逻辑电路112。此外,管线缓存器107的输出称为override_E信号174。虽然只有四个管线缓存器101、103、105、以及107显示用于往下传送的覆盖信号136,但是其它实施例可包括更多的管线阶段。
在一实施例中,当分支解决逻辑电路124解决新呼叫指令时,呼叫指令的目标地址,以及用以显示呼叫指令的型式字段值会快取于BTAC阵列102中。同样地,当分支解决逻辑电路124解决新返回指令时,返回指令的目标地址,以及用以显示正常返回指令的型式字段值会快取于BTAC阵列102中。
微处理器100还包括返回堆栈104(称为BTAC返回堆栈104),其耦接用以接收来自于BTAC阵列102的返回信号138。BTAC返回堆栈104会以后进先出的方式,来快取由呼叫指令所指定的返回地址。在一实施例中,当分支解决逻辑电路124解决新呼叫指令时,由呼叫指令所指定的返回地址会推入BTAC返回堆栈104的顶端。当BTAC阵列102经由返回信号138来显示返回指令存在于由提取地址132所指定的快取线186中时,位于BTAC返回堆栈104的顶端的返回地址会推出,并且用来当作多工器126的目标地址142。若返回信号138为真且覆盖信号136为伪,则分支控制逻辑电路112会经由控制信号184,来控制多工器126选择由BTAC返回堆栈104所预测的目标地址142。此外,分支控制逻辑电路112会经由控制信号184,来控制多工器126选择由BTAC阵列102所预测的目标地址164。
微处理器100还包括第二返回堆栈116(称为F-阶段返回堆栈116),其耦接用以接收来自于指令解码器114的返回信号154。F-阶段返回堆栈116会以后进先出的方式,来快取由呼叫指令所指定的返回地址。在一实施例中,当分支解决逻辑电路124解决新呼叫指令时,由呼叫指令所指定的返回地址会推入F-阶段返回堆栈116的顶端。当指令解码器114经由返回信号154来显示返回指令已解码时,位于F-阶段返回堆栈116的顶端的返回地址会推出,并且用来当作多工器126的目标地址146。
微处理器100还包括比较器118。比较器118会比较F-阶段返回堆栈116的目标地址146与往下传送的目标地址176。若F-阶段返回堆栈116的目标地址146与往下传送的目标地址176未匹配,则比较器118会使未匹配信号152(其会传送到分支控制逻辑电路112)产生真值。若返回信号154为真、若ovenide_F 172为伪、以及若未匹配信号152为真,则分支控制逻辑电路112会经由控制信号168,来控制多工器106选择F-阶段返回堆栈116的目标地址146。此外,分支控制逻辑电路112会经由控制信号168,来控制多工器106选择其另外输入其中之一。
微处理器100还包括BTAC更新逻辑电路122,其耦接至分支解决逻辑电路124及BTAC阵列102。BTAC更新逻辑电路122会接收来自于分支解决逻辑电路124的预测错误信号158。BTAC更新逻辑电路122会接收于来自于管线缓存器107的override_F信号174。BTAC更新逻辑电路122会产生BTAC更新请求信号134,其会传送到BTAC阵列102。BTAC更新请求信号134包括用以更新BTAC阵列102的项目的信息。在一实施例中,BTAC更新请求信号134包括分支指令的目标地址、分支指令的地址、以及形式字段的值。
当分支解决逻辑电路124解决新分支指令时,BTAC更新逻辑电路122会产生BTAC更新请求134,而以用以预测其后出现的新分支指令的目标地址及型式,或例如是由提取地址132所指定的指令快取线中的分支指令的目标地址及型式的信息,来更新BTAC阵列102。此外,若错误预测信号158为真,则BTAC更新逻辑电路122会产生BTAC更新请求134,来更新对应于分支指令的BTAC阵列102中的项目。特别而言,若分支指令为由BTAC返回堆栈104或由F-阶段返回堆栈116所错误预测的返回指令,则BTAC更新逻辑电路122会将BTAC阵列102项目中的覆盖位指定成预定值,以表示BTAC返回堆栈104的预测142及F-阶段返回堆栈116的预测146应该在返回指令的下次出现或事件时,通过BTAC阵列102的预测164来覆盖。在一实施例中,型式字段设定为覆盖返回值,或11,如以上的表1所指定。反之,若因为已设定覆盖位,所以分支指令为由BTAC阵列102所错误预测的返回指令,则BTAC更新逻辑电路122会将BTAC阵列102项目中的覆盖位指定成预定值,以表示应该选择BTAC返回堆栈104的预测142,以及若必要的话,F-阶段返回堆栈116的预测146,而不会选择在返回指令的下次出现或事件时的BTAC阵列102的预测164。在一实施例中,型式字段设定为正常返回值,或10,如以上的表1所指定。微处理器100的运作现在将配合图2到4,做更完整地说明。
现在参考图2,所显示的是根据本发明的图1的微处理器100的运作状态一流程图。图2描述微处理器100响应于通过图1的BTAC阵列102及BTAC返回堆栈104来预测返回指令的运作。流程从方块202开始。
在方块202,图1的提取地址132用于图1的指令高速缓存108及并行的BTAC阵列102。响应时,指令高速缓存108会响应提取地址132,而将图1的快取线的指令字节186,传送到微处理器100管线。流程会继续进行方块204。
在方块204,BTAC阵列102会基于提取地址132,而经由返回信号138,来预测返回指令是存在于指令高速缓存108送到微处理器100的指令快取线186中,并且BTAC阵列102会将目标地址164传送到多工器126。流程会继续进行判断方块206。
在判断方块206,分支控制逻辑电路112会判断是否已设定覆盖指标136。若如此,流程会继续进行方块212;否则,流程会继续进行方块208。
在方块208,分支控制逻辑电路112会控制多工器126及多工器106,选择BTAC返回堆栈目标地址142来当作提取地址132,而使微处理器100到此时会分支。在方块208,流程会结束。
在方块212,分支控制逻辑电路112会控制多工器126及多工器106,选择BTAC阵列目标地址164来当作提取地址132,而使微处理器100到此时会分支。在方块212,流程会结束。
如可从图2观察得知,若已设定覆盖指标136(如底下配合方块408所述的先前出现返回指令的期间),分支控制逻辑电路112会有助于覆盖BTAC返回堆栈104,并且另一种可选择由BTAC阵列102所预测的目标地址164,藉此,若执行程序正执行非标准呼叫/返回序列,则几乎可避免由BTAC返回堆栈104所产生的某种错误预测。
现在参照图3,所显示的是根据本发明的图1的微处理器100的运作状态的一流程图。图3描述微处理器100响应于预测返回指令(如通过图1的F-阶段返回堆栈116的图2中所预测的返回指令)的运作。流程从方块302开始。
在方块302,图1的F-阶段指令解码器114会响应于施加至图2的方块202中的BTAC阵列102,而将存在于由指令高速缓存108所输出的指令快取线186中,并且接下来会由BTAC阵列102及BTAC返回堆栈104来预测的返回指令进行解码,如配合图2所述。响应于经由返回信号154,来表示返回指令已解码的F-阶段指令解码器114,F-阶段返回堆栈116会将其预测的目标地址146传送到多工器106。流程会继续进行方块304。
在方块304,图1的比较器118会比较图1的F-阶段返回堆栈所预测的目标地址146及目标地址176。若地址146及176未匹配,则比较器118会使图1的未匹配信号152产生真值。流程会继续进行判断方块306。
在判断方块306,分支控制逻辑电路112会检查未匹配信号152,来判断是否发生未匹配。若如此,则流程会继续进行判断方块308;否则,流程会结束。
在判断方块308,分支控制逻辑电路112会检查图1的override_F信号172,来判断是否已设定override_F位172。若如此,流程会结束(亦即,在图2的方块212所执行的BTAC阵列目标地址164的分支不会由F-阶段返回堆栈所预测的目标地址146来取代)。若清除override_F位172,则流程会继续进行方块312。
在方块312,分支控制逻辑电路112会控制多工器106,选择F-阶段返回堆栈所预测的目标地址146,而使微处理器100到此时会分支。在一实施例中,在F-阶段返回堆栈所预测的目标地址146的分支之前,微处理器100会刷新F-阶段之上的阶段中的指令。在方块312,流程会结束。
如可从图3观察得知,若已设定override_F指标172(如底下配合方块408所述的先前出现返回指令的期间),分支控制逻辑电路112会有助于覆盖F-阶段返回堆栈116,并且另一种可维持由BTAC阵列102所预测的目标地址164,藉此,若执行程序正执行非标准呼叫/返回序列,则几乎可避免由F-阶段返回堆栈116所产生的某种错误预测。
现在参照图4,所显示的是绘示根据本发明的图1的微处理器100的运作的流程图。图4描述微处理器100响应于解决返回指令(如图2及3中所预测及解码的先前事件的返回指令)的运作。流程从方块402开始。
在方块402,图1的E-阶段分支解决逻辑电路124会解决返回指令。亦即,分支解决逻辑电路124最后会决定返回指令的图1的正确目标地址148。特别而言,若使微处理器100分支到返回指令的不正确目标地址,则分支解决逻辑电路124会使图1的错误预测信号158产生真值。流程会继续进行判断方块404。
在判断方块404,BTAC更新逻辑电路122会检查未匹配信号158,来判断返回指令目标地址是否预测错误。若如此,则流程会继续进行判断方块406;否则,流程会结束。
在判断方块406,BTAC更新逻辑电路122会检查override_F信号174,来判断是否已设定override_F位174。若如此,流程会继续进行方块408;否则,流程会继续进行方块412。
在方块408,BTAC更新逻辑电路122会产生BTAC更新请求134,而清除错误预测返回指令的项目的覆盖位。本发明者已观察到已知返回指令可由多种程序路径达成。亦即,有时返回会由非标准程序代码路径达成(如上述的程序代码路径其中之一),其总是会使返回堆栈错误预测返回指令的目标地址;然而,相同返回指令也可由构成标准呼叫/返回对序列的程序代码路径达成。在后者的事件中,返回堆栈一般能更精确地预测返回指令的目标地址。因此,若当已设定覆盖位时,发生错误预测,则因为可预期的是,以标准呼叫/返回对序列为主,所以BTAC更新逻辑电路122会清除方块408中的覆盖位。流程会继续进行方块414。
在方块412,因为F-阶段返回堆栈116错误预测返回指令的目标地址,所以BTAC更新逻辑电路122会产生BTAC更新请求134,以设定BTAC阵列102中的合适项目中的覆盖位。通过设定用以储存返回指令的预测的项目的BTAC 102的负载位,本发明有助于解决由非标准呼叫/返回序列所产生的问题。亦即,会分支到BTAC阵列的目标地址164,而不会分支到BTAC返回堆栈的目标地址142或F-阶段返回堆栈所预测的目标地址146,其预测返回指令的目标地址将会不正确。流程会继续进行方块414。
在方块414,因为不正确指令所导致的错误预测的返回指令目标地址会从指令高速缓存108提取到微处理器100管线,所以微处理器100会刷新其管线;因此,不必执行那些指令。接下来,分支控制逻辑电路112会控制多工器106,选择E-阶段目标地址146,而使微处理器100到此分支,以提取正确目标指令。在方块414,流程会结束。
在一实施例中,根据以上的表1,方块412会以二进制值11来更新BTAC阵列102项目的型式字段,方块408会以二进制值10来更新BTAC阵列102项目的型式字段。
如可从图2到4观察得知,覆盖指标可潜在地改善返回指令的预测精确度。若微处理器感测到因为返回堆栈错误预测返回指令的目标地址,而使返回指令已执行一部份非标准呼叫/返回序列,则微处理器会设定对应于BTAC中的返回指令的覆盖指标,以及在返回指令的下个事件中,因为微处理器会从覆盖指标中,判断返回堆栈可能错误预测目前出现的返回指令的目标地址,所以微处理器会使用除了返回堆栈的外的预测机制,来预测返回指令的目标地址。反之,虽然返回指令先前已执行一部份的非标准呼叫/返回序列,但是若微处理器感测到因为BTAC阵列错误预测返回指令的目标地址,而使返回指令接下来已执行一部份标准呼叫/返回序列,则微处理器会清除对应于BTAC中的返回指令的覆盖指标,以及在返回指令的下个事件中,因为微处理器会从覆盖指标中,判断返回堆栈可能正确地预测目前出现的返回指令的目标地址,所以微处理器会使用返回堆栈,来预测返回指令的目标地址。
现在参照图5,所显示的是根据本发明的另一实施例的管线式微处理器500的方块图。图5的微处理器500与图1的微处理器100类似,除了不包括BTAC返回堆栈104或多工器126之外。因此,由BTAC阵列102所输出的预测的目标地址164会直接传送到多工器106,而不会经由多工器126。此外,BTAC阵列102的目标地址(而不是图1的目标地址144)会用来当作管线缓存器111的输入,并且会往下传送,当作目标地址176。
现在参照图6,所显示的是绘示根据本发明的另一实施例的图5的微处理器500的运作的流程图。图6与图2类似,除了判断方块206及方块208不存在之外;因此,流程会从方块204进行到方块212。因此,因为图1的微处理器100的BTAC返回堆栈104及多工器126并不存在于图5的微处理器500,所以当BTAC阵列102经由返回信号138来预测返回指令时,分支控制逻辑电路112总会用来使微处理器500分支到由BTAC阵列102所预测的目标地址164。
图5的微处理器500也会根据图3及4的流程图来运作。要注意的是,因为BTAC返回堆栈104不存在于微处理器500中,所以往下传送的目标地址176总是为BTAC阵列102的目标地址164;因此,在F-阶段返回堆栈116的目标地址146与目标地址176之间的方块304中所执行的比较会与往下传送的BTAC阵列102的目标地址164进行比较。
虽然本发明及其目的、特性、以及优点已详细地说明、但是本发明包含其它的实施例。例如,虽然实施例已说明微处理器具有二个返回堆栈,但是微处理器可具有其它数目的返回堆栈,如只有单一返回堆栈,或超过二个返回堆栈。另外,虽然实施例已说明除了储存对应于由返回堆栈所错误预测的返回指令的覆盖位之外,BTAC还是用以覆盖返回堆栈的另一种目标地址预测机制,但是可使用其它另一种目标地址预测机制,如分支目标缓冲器。
再者,虽然本发明及其目的、特性、以及优点已详细地说明、但是本发明包含其它的实施例。本发明除了使用硬件来实施之外,本发明也可实施于计算机可使用(例如,可读取)媒体中所包含的计算机可读取码(例如,计算机可读取程序代码,数据等)中。计算机程序码可使在此所揭示的本发明的功能或制造可行,或者是二者皆可行。例如,这可经由使用一般程序语言(例如,C、C++、JAVA、以及类似的程序语言);GDSII数据库;包括Verilog HDL、VHDL、Altera HDL(AHDL)等等的硬件描述语言(HDL);或此项技术中可用的其它程序化及/或电路(例如,概图)记录工具来达成。计算机程序码可置于任何已知的计算机可使用(例如,可读取)媒体(包括半导体内存、磁盘、光盘(例如,CD-ROM、DVD-ROM、以及类似之物)、以及如计算机可使用(例如,可读取)传送媒体(例如,载波,或包括数字、光学、或运用模拟的媒体的任意其它的媒体)所包含的计算机数据信号中。就本身而言,计算机程序码可在通讯网络(包括因特网及内部网络)上传输。要了解到的是,本发明可实施于计算机程序码(例如,如知识产权(IP)核心(如微处理器核心)的部份,或如系统阶层式设计(如系统单芯片(System on Chip,简称SOC)))中,并且会转换成硬件,当作集成电路制造的一部份。再者,本发明可实施为硬件及计算机程序码的组合。
最后,本领域的技术人员应该了解到的是,在不脱离后附的权利要求所定义的本发明的精神及范围之下,为了进行与本发明相同的目的,其可立即使用揭示的概念及特定的实施例,来当作设计或修改其它的结构的基础。
权利要求
1.一种微处理器,包括一返回堆栈,用以产生一返回指令的一目标地址的一第一预测;一分支目标地址高速缓存,用以产生该返回指令的该目标地址的一第二预测,以及用以产生一覆盖指标,其中若该第一预测错误预测一第一事件的该返回指令的该目标地址,则该覆盖指标会显示一预定值;以及一分支控制逻辑电路,耦接至该返回堆栈及该分支目标地址高速缓存,若该覆盖指标显示该预定值,则对于一第二事件的该返回指令而言,用以使该微处理器分支到该第二预测的该目标地址,而不会分支到该第一预测。
2.如权利要求1所述的微处理器,其中还包括一更新逻辑电路,耦接至该分支目标地址高速缓存,若该第一预测错误预测该第一事件的该返回指令的该目标地址,则用以将该覆盖指标更新为该预定值。
3.如权利要求2所述的微处理器,其中若该第二预测错误预测一第三事件的该返回指令的该目标地址,则该更新逻辑电路会将该覆盖指标更新为一第二预定值,其中该第二预定值与该预定值不同,并且当该覆盖指标显示该第二预定值,则对于一第四事件的该返回指令而言,该分支控制逻辑电路会使该微处理器分支到该第一预测的该目标地址。
4.如权利要求3所述的微处理器,其中还包括一比较器,耦接至该分支控制逻辑电路,用以比较该第一预测与该第二预测,其中若该覆盖指标显示该第二预定值,则只要该比较器显示该第一预测与该第二预测未匹配,该分支控制逻辑电路会使该微处理器分支到该第一预测的该目标地址。
5.如权利要求3所述的微处理器,其中该返回指令的该第三事件为该第二事件。
6.如权利要求1所述的微处理器,其中该返回堆栈会产生该第一预测,紧接着该分支目标地址高速缓存会产生该第二预测。
7.如权利要求1所述的微处理器,其中还包括一指令解码逻辑电路,耦接至该分支控制逻辑电路,用以将该返回指令解码,其中该返回堆栈会响应该指令解码逻辑电路将该返回指令解码而产生该第一预测。
8.如权利要求7所述的微处理器,其中该返回堆栈会响应用以将一呼叫指令解码的该指令解码逻辑电路而储存该目标地址的该第一预测。
9.如权利要求1所述的微处理器,其中该返回堆栈产生的该第一预测实质上与该分支目标地址高速缓存产生的该第二预测同时发生。
10.如权利要求1所述的微处理器,其中该分支目标地址高速缓存还配置用以产生一指示,该指示显示该返回指令存在于由一指令高速缓存所提供的一快取线的指令字节中。
11.如权利要求10所述的微处理器,其中该分支目标地址高速缓存配置用以产生一指示包含下列可能方式该返回堆栈会响应于该分支目标地址高速缓存产生该返回指令是存在于该快取线中的该指示,而产生该第一预测;以及该分支目标地址高速缓存会响应用以指定该指令高速缓存中的该快取线,而产生该返回指令是存在于该快取线中的该指示。
12.如权利要求1所述的微处理器,其中该返回堆栈会响应于该分支目标地址高速缓存产生一呼叫指令是存在于一指令快取线中的一指示,而储存该目标地址的第一预测。
13.如权利要求1所述的微处理器,其中还包括一第二返回堆栈,耦接至该分支控制逻辑电路,用以产生该返回指令的该目标地址的一第三预测。
14.如权利要求13所述的微处理器,其中若该覆盖指标显示该预定值,则对于该第二事件的该返回指令而言,该分支控制逻辑电路会使该微处理器分支到该第二预测的该目标地址,而不会分支到该第三预测的该目标地址,另外若该覆盖指标显示除了该预定值之外的值,则对于该第二事件的该返回指令而言,该分支控制逻辑电路会使该微处理器分支到该第三预测的该目标地址。
15.如权利要求14所述的微处理器,其中还包括一比较器,耦接至该分支控制逻辑电路,用以比较该第一预测与该第三预测;其中若该比较器显示该第一预测与该第三预测未匹配,以及若该覆盖指标显示除了该预定值之外的值,则在分支到该第三预测之后,该分支控制逻辑电路会使该微处理器分支到该第一预测。
16.如权利要求1所述的微处理器,其中该分支控制逻辑电路包括一多工器,用以选择该第一预测与该第二预测中的一个,而传送到一指令高速缓存,当作用以使该微处理器分支到该第一预测与该第二预测中的该选择一个的一提取地址。
17.一种用以改善微处理器中的分支预测精确度的装置,该微处理器具有一分支目标地址高速缓存及一返回堆栈,每个会产生一返回指令的一目标地址的一预测,该装置包括一覆盖指标;一更新逻辑电路,耦接至该覆盖指标,若由该返回堆栈所产生的该预测错误预测一第一出现的该返回指令的该目标地址,则用以使该覆盖指标更新为一真值;以及一分支控制逻辑电路,耦接至该覆盖指标,若该覆盖指标为真,则对于一第二出现的该返回指令而言,用以选择由该分支目标地址高速缓存所产生的该预测,而不会选择由该返回堆栈所产生的该预测。
18.如权利要求17所述的装置,其中该覆盖指标由该分支目标地址高速缓存所产生,并且该分支目标地址高速缓存用以储存多个返回指令的多个覆盖指标,其中若该多个返回指令其中之一为该返回指令,则该分支目标地址高速缓存会将该返回指令的该多个覆盖指标其中之一当作该覆盖指标。
19.如权利要求18所述的装置,其中该分支目标地址高速缓存基于一提取地址输入,来判断该多个返回指令其中之一是否为该返回指令,其中该提取地址为该微处理器的一指令高速缓存的一地址输入。
20.如权利要求17所述的装置,其中若由该分支目标地址高速缓存所产生的该预测错误预测该第一出现的该返回指令的该目标地址,则该更新逻辑电路会使该覆盖指标更新为一伪值。
21.如权利要求17所述的装置,其中若该覆盖指标为伪,则对于该第二出现的该返回指令而言,该分支控制逻辑电路会选择由该返回堆栈所产生的该预测,而不会选择由该分支目标地址高速缓存所产生的该预测。
22.如权利要求17所述的装置,其中还包括一比较器,耦接至该分支控制逻辑电路,用以比较由该分支目标地址高速缓存所产生的对该第二出现的该返回指令的该预测,与由该返回堆栈所产生的对该第二出现的该返回指令的该预测。
23.如权利要求22所述的装置,其中若该覆盖指标为伪,则该分支控制逻辑电路会选择由该分支目标地址高速缓存所产生的对该第二出现的该返回指令的该预测,而接下来若该比较器显示由该返回堆栈所产生的该预测,与由该分支目标地址高速缓存所产生的该预测不匹配,则会选择由该返回堆栈所产生的对该第二出现的该返回指令的该预测。
24.如权利要求23所述的装置,其中在一第一频率周期中,该分支控制逻辑电路会接收由该分支目标地址高速缓存所产生的该预测,紧接着在一第二频率周期中,该分支控制逻辑电路会接收由该返回堆栈所产生的该预测。
25.一种预测微处理器中的返回指令的目标地址的方法,包括下列步骤响应于一返回堆栈错误预测该返回指令的该目标地址,而将一覆盖指标更新为一真值;在该更新之后,通过一分支目标地址高速缓存来产生该目标地址的一预测;在该分支目标地址高速缓存产生该预测之后,判断该覆盖指标是否具有一真值;以及若该覆盖指标具有一真值,则使该微处理器分支到由该分支目标地址高速缓存所产生的该预测。
26.如权利要求25所述的方法,其中还包括响应于该分支目标地址高速缓存错误预测该返回指令的该目标地址,而将该覆盖指标更新为一伪值。
27.如权利要求第25所述的方法,其中还包括使该微处理器分支到由该分支目标地址高速缓存所产生的该预测;在该分支目标地址高速缓存产生该目标地址的该预测之后,通过该返回堆栈来产生该目标地址的一预测;以及在使该微处理器分支到由该分支目标地址高速缓存所产生的该预测之后,会比较由该分支目标地址高速缓存所产生的该预测,与由该返回堆栈来所产生的该预测。
28.如权利要求27所述的方法,其中还包括若由该分支目标地址高速缓存所产生的该预测,与由该返回堆栈来所产生的该预测未匹配,则会使该微处理器分支到由该返回堆栈所产生的该预测。
29.如权利要求25所述的方法,其中还包括在该更新之后,通过一返回堆栈来产生该返回指令的该目标地址的一预测;以及若该覆盖指标具有一伪值,则使该微处理器分支到由该返回堆栈所产生的该预测。
30.如权利要求29所述的方法,其中还包括响应于一提取地址,会通过该分支目标地址高速缓存,来预测该返回指令是存在于由一指令高速缓存所提供的一快取线中,其中该提取地址用以指定由该指令高速缓存所提供的该快取线。
31.如权利要求30所述的方法,其中该分支目标地址高速缓存产生该返回指令的该目标地址的动作,包括响应于该分支目标地址高速缓存预测该返回指令是存在于由该快取线中,而产生该目标地址。
32.如权利要求30所述的方法,其中该返回堆栈产生该返回指令的该目标地址的该预测的动作,包括响应于该分支目标地址高速缓存预测该返回指令是存在于由该快取线中,而产生该目标地址。
33.如权利要求25所述的方法,其中还包括在该分支目标地址高速缓存产生该目标地址的该预测之后,将该返回指令解码。
34.如权利要求33所述的方法,其中该返回堆栈产生该返回指令的该目标地址的该预测的动作,包括响应于将该返回指令解码,而产生该目标地址。
35.如权利要求33所述的方法,其中在该返回指令由一指令高速缓存输出之后,会将该返回指令进行解码。
36.一种用以改善微处理器中的分支预测精确度的装置,该微处理器具有一返回堆栈及一另一种预测装置,每个会产生一返回指令的一目标地址的一预测,以及一分支目标地址高速缓存,该装置包括一覆盖指标,由该分支目标地址高速缓存所提供;一更新逻辑电路,耦接至该覆盖指标,若由该返回堆栈所产生的该预测错误预测一第一出现的该返回指令的该目标地址,则用以使该分支目标地址高速缓存中的该覆盖指标更新为一真值;以及一分支控制逻辑电路,耦接至该覆盖指标,若该覆盖指标为真,则对于一第二出现的该返回指令而言,用以选择由该另一种预测装置所产生的该预测,而不会选择由该返回堆栈所产生的该预测。
37.一种传输媒体中所包含的计算机数据信号,包括计算机可读取程序代码,用以提供给一微处理器,该程序代码包括第一程序代码,用以提供给一返回堆栈,其用以产生一返回指令的一目标地址的一第一预测;第二程序代码,用以提供给一分支目标地址高速缓存,其用以产生该返回指令的该目标地址的一第二预测,以及用以产生一覆盖指标,其中若该第一预测错误预测一第一事件的该返回指令的该目标地址,则该覆盖指标会显示一预定值;以及第三程序代码,用以提供给分支控制逻辑电路,其耦接至该返回堆栈及该分支目标地址高速缓存,若该覆盖指标显示该预定值,则对于一第二事件的该返回指令而言,用以使该微处理器分支到该第二预测的该目标地址,而不会分支到该第一预测。
全文摘要
本发明提供一种用以预测返回指令的目标地址的微处理器。此微处理器包括BTAC及返回堆栈,每个用以达成目标地址的预测。通常返回堆栈会更加精确。然而,若返回堆栈预测错误,则更新逻辑电路会设定对应于BTAC中的返回指令的覆盖旗标。下次遇到返回指令时,若已设定覆盖旗标,则分支控制逻辑电路会使微处理器分支到BTAC预测。否则,微处理器会分支到返回堆栈预测。若BTAC预测错误,则更新逻辑电路会清除覆盖旗标。在一实施例中,返回堆栈会响应于返回指令的解码,来进行预测。在另一实施例中,返回堆栈会响应于BTAC预测返回指令是存在于指令快取线中,来进行预测。另一实施例包括第二个基于BTAC的返回堆栈。
文档编号G06F9/44GK1581070SQ20041007983
公开日2005年2月16日 申请日期2004年9月23日 优先权日2003年10月6日
发明者G·葛兰·亨利, 汤玛斯·麦当劳 申请人:智慧第一公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1