一种执行非标准呼叫/返回的程序代码的装置及方法制造方法及图纸

技术编号:2865721 阅读:350 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种用以预测返回指令的目标地址的微处理器。此微处理器包括BTAC及返回堆栈,每个用以达成目标地址的预测。通常返回堆栈会更加精确。然而,若返回堆栈预测错误,则更新逻辑电路会设定对应于BTAC中的返回指令的覆盖旗标。下次遇到返回指令时,若已设定覆盖旗标,则分支控制逻辑电路会使微处理器分支到BTAC预测。否则,微处理器会分支到返回堆栈预测。若BTAC预测错误,则更新逻辑电路会清除覆盖旗标。在一实施例中,返回堆栈会响应于返回指令的解码,来进行预测。在另一实施例中,返回堆栈会响应于BTAC预测返回指令是存在于指令快取线中,来进行预测。另一实施例包括第二个基于BTAC的返回堆栈。

【技术实现步骤摘要】

本专利技术有关于一种微处理器中的分支预测的相关
,尤指一种有关于使用返回堆栈及分支目标地址高速缓存的返回指令目标地址预测。
技术介绍
微处理器为一种执行计算机程序所指定的指令的数字装置。现代的微处理器一般为管线式。亦即,在微处理器的不同区块或管线阶段内,可同时使许多指令运作。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中的覆盖指标更新为真值。此装置还包括分支控制逻辑电路,耦接至覆盖指标,若覆盖指本文档来自技高网
...

【技术保护点】
一种微处理器,包括:    一返回堆栈,用以产生一返回指令的一目标地址的一第一预测;    一分支目标地址高速缓存,用以产生该返回指令的该目标地址的一第二预测,以及用以产生一覆盖指标,其中若该第一预测错误预测一第一事件的该返回指令的该目标地址,则该覆盖指标会显示一预定值;以及    一分支控制逻辑电路,耦接至该返回堆栈及该分支目标地址高速缓存,若该覆盖指标显示该预定值,则对于一第二事件的该返回指令而言,用以使该微处理器分支到该第二预测的该目标地址,而不会分支到该第一预测。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:G葛兰亨利汤玛斯麦当劳
申请(专利权)人:智慧第一公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1