首页> 中国专利> 提高处理器中返回分支指令的执行速度的方法

提高处理器中返回分支指令的执行速度的方法

摘要

本发明揭示一种用于通过利用链接寄存器堆栈在处理器中执行调用分支指令与返回分支指令的设备和方法。所述处理器包含初始化到0、且每当所述处理器解码除调用分支指令以外的链接寄存器操控指令时设定到0的分支计数器。每当解码调用分支指令且地址被推送到所述链接寄存器堆栈上时,所述分支计数器递增1。响应于解码返回分支指令且假如所述分支计数器不是0,所述经解码的返回分支指令的目标地址被从所述链接寄存器堆栈弹出,所述分支计数器递减,且不需要检查所述目标地址的正确性。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-02-25

    未缴年费专利权终止 IPC(主分类):G06F 9/30 专利号:ZL2014800139351 申请日:20140314 授权公告日:20180320

    专利权的终止

  • 2018-03-20

    授权

    授权

  • 2016-01-06

    实质审查的生效 IPC(主分类):G06F9/30 申请日:20140314

    实质审查的生效

  • 2015-12-09

    公开

    公开

说明书

技术领域

本发明的实施例是针对微处理器。

背景技术

调用分支指令允许程序控制分支到实施子例程(函数)的一部分代码。举例来说,当 调用分支指令执行时,程序计数器中的地址递增而且加载到随后回顾的链接寄存器,而 且被调用子例程中的初次代码行的地址加载到程序计数器,这样使得程序控制分支到表 示被调用子例程的部分代码。在所述部分代码末端的返回分支指令使得程序控制以返回 到存储在所述链接寄存器中的地址,借此返回到按程序排序的调用子例程的调用分支指 令之后的下一指令。

为了执行嵌套式或递归的子例程(函数),也就是说,当一个子例程调用另一个子例 程(可以是自身)时,软件可利用存储器中的堆栈。举例来说,如果地址由于第一次子例 程调用已经加载到链接寄存器,而且如果第二次子例程调用到表示第一子例程的代码 内,那么当第一子例程被调用时,加载到链接寄存器的地址按软件惯例推送到存储器中 的堆栈顶端之上,而且表示按程序排序在第二分支指令之后的下一指令的地址加载到链 接寄存器。当执行用于第二次被调用的子例程的返回分支指令时,存储在链接寄存器中 的地址加载到程序计数器,而且在堆栈顶端的地址随后弹出而且加载到链接寄存器,这 样使得程序控制可返回到当第一子例程完成时立刻遵循(按程序排序)第一分支指令的指 令。

发明内容

本发明的实施例是针对用以减少用于利用链接寄存器堆栈执行返回分支指令的处 理器周期的次数的系统和方法。

在一个实施例中,方法包含响应于处理器解码除调用分支指令以外的链接寄存器操 控指令,设定状态机到初始状态;而且自从处理器解码除调用分支指令以外的链接寄存 器操控指令且其中所述处理器尚未解码相对应的返回分支指令,响应于解码调用分支指 令或返回分支指令,改变状态机到指示由处理器解码的多个调用分支指令的状态。假如 自从处理器解码除调用分支指令以外的链接寄存器操控指令,而且其中一个相对应的返 回分支指令尚未解码,所述状态机的状态表明至少一个调用分支指令已经解码,所述方 法进一步包含响应于处理器提取并解码返回分支指令,从链接寄存器堆栈取出目标地址 而且使用所述目标地址作为提取下一指令的地址,并且完成所述返回分支指令的执行无 需检查所述目标地址的正确性。

在另一个实施例中,一种方法包含响应于处理器解码除调用分支指令以外的链接寄 存器操控指令,设定计数器到初始值;响应于处理器解码调用分支指令,将所述计数器 递增第一常数;而且响应于处理器解码返回分支指令,将所述计数器递增第二常数。所 述方法进一步包含响应于处理器确定所述计数器的值不等于初始值并且响应于处理器 解码返回分支指令,从链接寄存器堆栈取出用于返回分支指令的目标地址,并且完成返 回分支指令的执行,无需检查所述目标地址的正确性。

在另一个实施例中,设备包含链接寄存器、分支计数器及处理器,所述设备响应于 解码除写入到链接寄存器的调用分支指令以外的指令,用以设定分支计数器到初始值; 响应于解码调用分支指令,将所述分支计数器递增第一常数;并且响应于解码返回分支 指令,将所述分支计数器递增第二常数。所述设备进一步包含链接寄存器堆栈,其中响 应于确定所述计数器的值不等于初始值并且响应于解码返回分支指令,处理器从链接寄 存器堆栈取出用于返回分支指令的目标地址,并且完成执行以及收回所述返回分支指 令,无需检查所述目标地址的正确性。

在另一个实施例中,处理器包含分支计数器、链接寄存器堆栈、用于设定计数器的 装置(所述装置用于响应于处理器解码除调用分支指令以外的链接寄存器操控指令,设定 计数器以设定所述分支计数器到初始值)、用于增加计数器的装置(所述装置用于响应于 处理器解码调用分支指令,增加计数器以将所述分支计数器递增第一常数,并且响应于 处理器解码返回分支指令,以将所述分支计数器递增第二常数)。所述处理器进一步包含 用于取出链接寄存器堆栈的装置,所述装置用于响应于所述处理器确定分支计数器的值 不等于初始值并且响应于所述处理器解码返回分支指令,取出链接寄存器堆栈以从所述 链接寄存器堆栈取出用于返回分支指令的目标地址;并且所述处理器为了完成执行并收 回所述返回分支指令,无需检查所述目标地址的正确性。

在另一个实施例中,存储媒体已经存储通过处理器可执行的指令,所述处理器为了 执行指令时履行一种方法,所述方法包括响应于所述处理器解码除调用分支指令以外的 链接寄存器操控指令,设定计数器到初始值;响应于所述处理器解码调用分支指令,将 计数器递增第一常数;并且响应于所述处理器解码返回分支指令,将计数器递增第二常 数。所述方法进一步包含响应于处理器确定所述计数器的值不等于初始值并且响应于处 理器解码返回分支指令,从链接寄存器堆栈取出用于返回分支指令的目标地址,并且完 成返回分支指令的执行,无需检查所述目标地址的正确性。

附图说明

呈现附图以辅助描述本发明的实施例,且提供所述附图仅用于实施例的说明且不加 限制。

图1根据一个实施例概括微处理器。

图2根据一个实施例说明指令流程。

图3根据一个实施例说明流程图。

图4是包含一个实施例的无线通信系统。

具体实施方式

在以下针对本发明特定实施例的描述和相关图式中揭示本发明的若干方面。可在不 脱离本发明的范围的情况下设计出替代实施例。另外,将不会详细描述或将省略本发明 的众所周知的元件以免混淆本发明的相关细节。

单词“示例性”在本文中使用意指“充当实例、例子或说明”。在本文中被描述为 “示范性”的任何实施例未必被解释为比其它实施例优选或有利。同样,术语“本发明 的实施例”并不需要本发明的所有实施例包含所论述的特征、优点或操作模式。

本文中所使用的术语仅仅是为了描述特定实施例,且并不希望限制本发明的实施 例。如本文中所使用,除非上下文另作明确指示,否则单数形式“一”和“所述”也意 图包含复数形式。将进一步理解,术语“包括”和/或“包含”在本文中使用时指定所陈 述的特征、整数、步骤、操作、元件和/或组件的存在,但并不排除一或多种其它特征、 整数、步骤、操作、元件、组件和/或其群组的存在或添加。

另外,许多实施例是依据待由(例如)计算设备的元件执行的动作序列来描述。将认 识到,可由特定电路(例如,专用集成电路(ASIC))、由正由一个或一个以上处理器执行 的程序指令或由两者的组合来执行本文中所述的各种动作。此外,可认为本文中所描述 的这些动作序列完全体现于任何形式的非暂时性计算机可读存储媒体内,所述非暂时性 计算机可读存储媒体已存储一组对应的计算机指令,所述指令在被执行时将致使相关联 的处理器执行本文中所描述的功能性。因此,本发明的各种方面可以以许多不同形式来 体现,已预期所有形式在所主张的标的物的范围内。另外,对于本文中所描述的实施例 中的每一者来说,任何此类实施例的对应形式可在本文中被描述为(例如)“经配置以(执 行所描述的动作)的逻辑”。

通过使用硬件结构(在此称为链接寄存器堆栈)而使用软件堆栈时,期待实施例提高。 所述链接寄存器堆栈是用于存储链接寄存器值(地址),这样使得在恰当情况下,用于返 回分支指令的目标地址可以从所述链接寄存器传送到管道,无需验证所述目标地址的正 确性。

图1是根据一个实施例一个微处理器100的简化抽象。管道102从数据高速缓冲存 储器104接收数据并且从指令高速缓冲存储器106接收指令。控制器108控制所述管道 102内的各个阶段与执行单位(诸如提取阶段、解码阶段等)以解码并且执行指令。当完 成时,由所述被执行的指令产生的结果可以存储在寄存器堆110中、所述数据高速缓冲 存储器104中及其他缓冲区或由存储器112表示的存储器单元中。所述存储器112可表 示存储器分层结构。如先前技术中描述的软件堆栈是抽象的存储器类型而且标注为113。

所述寄存器堆110包括多个寄存器,其中三个在图1中说明:程序计数器寄存器114、 链接寄存器116及用于存储指针到所述软件堆栈113顶端的堆栈指针寄存器118。

链接寄存器堆栈在图1中说明为标注为120的硬件存储器结构。所述链接寄存器堆 栈120可以是位于与微处理器100相同的裸片(晶片)上的寄存器堆,而且展示为与所述 寄存器堆110分离的结构。实际上,所述链接寄存器堆栈120可为寄存器堆110的一部 分,但是它展示为一个独立结构以表明它可能并非微处理器100的架构寄存器的一部分。 所述链接寄存器堆栈120包含标注为124的分支计数器。分支计数器124的作用随后论 述。

对于一个实施例,控制器108经配置,使得当管道102解码调用分支指令时,下一 (按程序次序)指令的地址被推送到链接寄存器堆栈120上。(如背景技术中所论述,此地 址也被存储为链接寄存器116中的值,其中存储在链接寄存器116中的先前值被推送到 软件堆栈113上并且由存储在堆栈指针寄存器118中的地址指向。)

对于软件程序中的调用子例程(函数)的每一调用分支指令,在所述子例程末端存在 返回分支指令。可将各个这样的调用分支指令与返回分支指令视作为一对分支指令。也 就是说,返回分支指令与调用分支指令配对。记住这一点,分支计数器124可以被描述 为用以跟踪经解码的调用分支指令的数目的结构,其中管道102尚未解码与所述经解码 的调用分支指令配对的返回分支指令,并且其中管道102尚未碰到链接寄存器操控指令。 链接寄存器操控指令是指除调用分支指令以外的任何对链接寄存器116进行写入的指 令。

分支计数器124初始化为0,并且每当管道102解码链接寄存器操控指令时,分支 计数器124设定到0。每当解码调用分支指令并且将指令地址推送到链接寄存器堆栈120 上时,分支计数器124的值递增1;并且每当解码返回分支指令且将指令地址弹出链接 寄存器堆栈120时,分支计数器124的值递减1。

只要自从第一指令地址被推送到链接寄存器堆栈120上以来不存在链接寄存器操控 指令,存储在链接寄存器堆栈120中的值(地址)就表示已被写入到链接寄存器116的值 (地址)的正确历史记录。因此,只要分支计数器124的值大于0,链接寄存器堆栈120 的状态就表示链接寄存器116的正确历史记录。

对于一个实施例,控制器108经配置使得当管道102解码返回分支指令时并且假如 存储在分支计数器124中的值大于0,在链接寄存器堆栈102顶端的地址被转发到管道 102作为经解码的返回分支指令的目标地址。由于存储在所述分支计数器124中的值大 于0,从所述链接寄存器堆栈102弹出的地址是正确的目标地址,并且因此完成执行与 停用并不需要对经解码的返回分支指令执行正确性检查。

但是,如果当所述管道102解码返回分支指令时所述分支计数器124的值是0,那 么不存在所述链接寄存器堆栈120的状态表示所述链接寄存器116的正确历史记录的保 证,在此情况下所述控制器108以常规方式处理所述管道102,由此如先前技术中所论 述而使用软件堆栈113以提供所预测的目标地址,而且在允许经解码的返回分支指令完 成执行与收回之前,为了正确性履行检查。

通过使用所述分支计数器124,在嵌套式子例程的情况下,为了目标地址,实施例 可使用所述链接寄存器堆栈120,只要不存在操控(写入至)所述链接寄存器116的介入 链接寄存器操控指令,其中一个调用子例程调用另一个子例程。

根据所述实施例,预测处理器存储处理器周期,借此节省供电与时间。

图2通过考虑一段代码中的指令流程说明一个实施例。从A到L的字母表示所述代 码段中的指令。出于描述图2实施例的目的,变量x表示所述分支计数器124的值。执 行所述代码段之前,如通过所述标记200所指示,所述分支计数器124的值设定到0。

图2中说明的所述代码段中的第一指令是指令A,调用分支指令送至标注为L1的 指令,所述标注为L1的指令是图2中的指令D。当解码且执行所述调用分支指令A时, 用于指令B的地址写入至所述链接寄存器116并且也推送到所述链接寄存器堆栈120上。 通过图2中的标记201所指示,所述分支计数器124递增1。所述分支计数器124的值 现在是1。

所述程序计数器寄存器114现在设定到所述指令D的地址,且如通过标注为202的 箭头所指示,所述管道102中的指令流程从所述指令A继续到所述指令D。如通过图2 中标注为204、206及208的箭头所指示,所述指令流程然后从所述指令D继续到指令 E,从所述指令E继续到指令F,并且从所述指令F继续到指令G。

所述指令G是送至标注为L2指令的调用分支指令,其是图2中的指令J。所述指 令J的地址加载到所述程序计数器寄存器114,并且如通过标注为210的箭头所指示, 对所述指令J进行控制。用于指令H的地址推送到所述链接寄存器堆栈120上并且写入 到所述链接寄存器116。如通过标记212所指示,所述分支计数器124递增1。所述分 支计数器124的值现在等于2。

由于所述程序计数器寄存器114已经设定到所述指令J的地址,如通过标注为214 与216的箭头所指示,所述管道102中的指令流程从所述指令J继续到指令K,并且然 后从指令K继续到指令L。

所述指令L是返回分支指令,并且由于所述分支计数器124的值(图2中的x)大于0, 已知所述链接寄存器堆栈120的状态是正确的,并且因此从所述链接寄存器堆栈120的 顶端弹出的目标地址是正确的。因此,当执行所述指令L并且完成时,不需要检查所弹 出的地址的正确性。此弹出的地址是用于指令H的地址。如通过标记218所指示,当解 码并且执行所述指令L时,所述分支计数器124递减1。所述分支计数器124的值现在 是1。

继续图2中说明的例子,由于所述指令L的目标是指令H的地址(其中所述指令H 是按程序排序立刻遵循调用分支指令G的指令),所以如通过标注为220的箭头所指示, 对所述指令H进行程序控制。

所述指令H作为返回分支指令解码,并且由于所述分支计数器124的值大于0,已 知所述链接寄存器堆栈120的状态是正确的,并且因此从所述链接寄存器堆栈120弹出 的目标地址是正确的目标地址。此目标地址是用于指令B的指令地址,并且当指令H 执行并且完成时,不需要检查正确性。在执行所述指令H时,如通过标记222所指示, 分支计数器124递减1,并且如通过标注为224的箭头所指示,对指令B进行控制。所 述分支计数器124的值现在是0。

如先前所述,配置控制器108,这样使得当解码并且执行链接寄存器操控指令时(也 就是说,除写入到链接寄存器116调用分支指令以外的指令),分支计数器124的值设定 到0。如果解码返回分支指令并且开始所述分支计数器124的值是0的执行,那么不存 在链接寄存器堆栈120的状态是正确的的保证。因此,如果所预测的目标地址从软件堆 栈113弹出,那么在返回分支指令完成执行并且收回之前,应检查所述目标地址的正确 性。

图3根据一个实施例说明流程图。从标注为302的步骤开始,当从指令高速缓冲存 储器106提取指令并且解码时,图3中的确定流程取决于所述经解码的指令是否是调用 分支指令、返回分支指令或链接寄存器操控指令。在不缺失概括性的情况下,确定这三 种指令中哪个是经解码的指令的排序在具有标记304、306及308的图3中所指示。但 是,应理解对于其它实施例,这些确定可不按图3中所指示而排序。

参考步骤304,关于指令是否是调用分支指令而作出确定。如果它是,那么如步骤 310中所指示,下一指令(按程序排序)的地址推送到链接寄存器堆栈120上,并且如步 骤312中所指示,分支计数器124的值递增1(x←x+1)。图3展示在实施步骤312的操 作之后返回到步骤302的流程图。从步骤312到步骤302的数据流不为暗示在步骤312 之后,一个有效的实施例管道中采取的接下来的动作必定是提取的指令,但是所述数据 流仅为方便起见而照此说明。

参考步骤306,关于指令是否是返回分支指令而作出确定。如果它是,并且分支计 数器124的值大于0(步骤314),那么从链接寄存器堆栈120弹出目标地址(步骤316)以 转发到管道102并且写入到程序计数器寄存器114;所述分支计数器124递减1(步骤 318);并且当指令执行并且完成时,不需要检查所述目标地址的正确性(步骤320)。

但是,如果在步骤314中确定分支计数器124的值是0,那么微处理器100以常规 方式继续,借此如果使用所预测的目标地址,那么应检查它的正确性(步骤322)。

图3展示在实施步骤320或322的动作之后流程图返回到步骤302,但是如先前所 论述,仅为方便起见引入这样的过程流程。

参考步骤308,关于指令是否是操纵(例如写入至)链接寄存器116的(除调用分支指 令以外的)任何指令而作出确定。如果它是,那么如步骤324中所指示,将分支计数器 124的值复位为0(x←0)。否则的话,使控制回到步骤302。再次,在实施步骤308与324 的动作之后流程图返回到步骤302是仅为方便起见而引入的。

我们假设以下惯例:分支计数器124不会递减为负。也就是说,可能发生以下情况, 管道102解码返回分支指令,但是由于管道102解码了除调用分支指令以外的链接寄存 器操控指令,分支计数器124已经设定为0。在此情况下,分支计数器124保持在0。

应了解,一般而言,状态机可实施分支计数器124的动作,其中所述状态跟踪自从 解码介入的链接寄存器操控指令以来由处理器100解码的调用分支指令的数目,并且其 中与所述经解码的调用分支指令配对的返回分支指令尚未解码。

举例来说,不必每当解码调用分支指令时,使计数器递增1;不必每当解码返回分 支指令时,使计数器递减1;或不必每当解码链接寄存器操控指令时,将计数器复位为 0。作为一个特定实例,计数器的方向可以颠倒,其中初始化计数器为其最大值,每当 解码调用分支指令时递减,并且每当解码返回分支指令时递增。由图3表示的流程图可 为此特定实例相应地进行调整。

参看图3所描述的动作可以在控制器108中实现的硬件中实施。对于一些实施例, 图3中说明的动作中的一些或全部可以通过在控制器108中执行的指令实现,这样的指 令被视为固件或软件,并且其中这样的指令可以存储于存储器112中。

图4说明无线通信系统,其中的实施例可找到应用程序。图4说明包括基站404A、 404B与404C的无线通信网络402。图4展示标记为406的通信装置,其可以是移动蜂 窝式通信装置(诸如所谓的智能手机、平板电脑)或适合于蜂窝电话网络的一些其它种类 的通信装置(诸如计算机)。所述通信装置406无需是移动的。在图4的特定实例中,通 信装置406位于与基站404C相关联的单元内。箭头408与410形象地对应表示上行链 路信道与下行链路信道,通过此两种信道,通信装置406与基站404C通信。

举例来说,实施例可用于数据处理系统,所述数据处理系统与通信装置406相关联, 或与基站404C相关联,或与二者都相关联。图4仅说明多个应用程序中的一个,其中 可使用本文中所述的实施例。

所属领域的技术人员将了解,可使用多种不同技术和技法中的任一者来表示信息和 信号。举例来说,可通过电压、电流、电磁波、磁场或磁粒子、光场或光粒子或其任何 组合来表示贯穿以上描述可能参考的数据、指令、命令、信息、信号、位、符号和码片。

另外,所属领域的技术人员将了解,结合本文中所揭示实施例描述的各种说明性逻 辑块、模块、电路和算法步骤可实施为电子硬件、计算机软件或两者的组合。为清楚说 明硬件与软件的此可互换性,上文已大体上关于其功能性而描述了各种说明性组件、块、 模块、电路和步骤。此功能性是实施为硬件还是软件取决于特定应用及施加于整个系统 上的设计约束。熟练的技术人员可针对每一特定应用以不同方式来实施所描述的功能 性,但这样的实施方案决策不应被解释为会导致脱离本发明的范围。

结合本文中所揭示的实施例而描述的方法、序列和/或算法可直接以硬件、以由处理 器执行的软件模块或以两者的组合体现。软件模块可驻留在RAM存储器、快闪存储器、 ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可装卸式磁盘、CD-ROM, 或所属领域中已知的任何其它形式的存储媒体中。在图1的特定实例中,软件模块或模 块可以存储于存储器112中。一个例示性存储媒体耦合到处理器,这样使得处理器可从 所述存储媒体读取信息,并且写入信息到所述存储媒体。在替代方案中,存储媒体可集 成到处理器。

因此,本发明的一实施例可包含非暂时性计算机可读媒体,其包含提高执行返回分 支指令速度的方法。因此,本发明不限于所说明的实例,且任何用于执行本文中所描述 的功能性的装置包含于本发明的实施例中。

虽然前述揭示内容展示本发明的说明性实施例,但应注意,在不脱离如所附权利要 求书界定的本发明的范围的情况下,可在此做出各种改变和修改。无需按任何特定次序 来执行根据本文中所述的本发明的实施例的方法权利要求项的功能、步骤及/或动作。此 外,尽管可以以单数形式描述或主张本发明的元件,但除非明确陈述限于单数形式,否 则也涵盖复数形式。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号