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

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

Info

Publication number
CN105144084B
CN105144084B CN201480013935.1A CN201480013935A CN105144084B CN 105144084 B CN105144084 B CN 105144084B CN 201480013935 A CN201480013935 A CN 201480013935A CN 105144084 B CN105144084 B CN 105144084B
Authority
CN
China
Prior art keywords
instruction
processor
counter
address
link register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201480013935.1A
Other languages
English (en)
Other versions
CN105144084A (zh
Inventor
罗德尼·韦恩·史密斯
杰弗里·M·斯科特米勒
迈克尔·斯科特·麦克勒瓦伊内
布莱恩·迈克尔·斯坦普尔
梅林达·J·布朗
达朗·尤金·施特雷特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of CN105144084A publication Critical patent/CN105144084A/zh
Application granted granted Critical
Publication of CN105144084B publication Critical patent/CN105144084B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer

Abstract

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

Description

提高处理器中返回分支指令的执行速度的方法
技术领域
本发明的实施例是针对微处理器。
背景技术
调用分支指令允许程序控制分支到实施子例程(函数)的一部分代码。举例来说,当调用分支指令执行时,程序计数器中的地址递增而且加载到随后回顾的链接寄存器,而且被调用子例程中的初次代码行的地址加载到程序计数器,这样使得程序控制分支到表示被调用子例程的部分代码。在所述部分代码末端的返回分支指令使得程序控制以返回到存储在所述链接寄存器中的地址,借此返回到按程序排序的调用子例程的调用分支指令之后的下一指令。
为了执行嵌套式或递归的子例程(函数),也就是说,当一个子例程调用另一个子例程(可以是自身)时,软件可利用存储器中的堆栈。举例来说,如果地址由于第一次子例程调用已经加载到链接寄存器,而且如果第二次子例程调用到表示第一子例程的代码内,那么当第一子例程被调用时,加载到链接寄存器的地址按软件惯例推送到存储器中的堆栈顶端之上,而且表示按程序排序在第二分支指令之后的下一指令的地址加载到链接寄存器。当执行用于第二次被调用的子例程的返回分支指令时,存储在链接寄存器中的地址加载到程序计数器,而且在堆栈顶端的地址随后弹出而且加载到链接寄存器,这样使得程序控制可返回到当第一子例程完成时立刻遵循(按程序排序)第一分支指令的指令。
发明内容
本发明的实施例是针对用以减少用于利用链接寄存器堆栈执行返回分支指令的处理器周期的次数的系统和方法。
在一个实施例中,方法包含响应于处理器解码除调用分支指令以外的链接寄存器操控指令,设定状态机到初始状态;而且自从处理器解码除调用分支指令以外的链接寄存器操控指令且其中所述处理器尚未解码相对应的返回分支指令,响应于解码调用分支指令或返回分支指令,改变状态机到指示由处理器解码的多个调用分支指令的状态。假如自从处理器解码除调用分支指令以外的链接寄存器操控指令,而且其中一个相对应的返回分支指令尚未解码,所述状态机的状态表明至少一个调用分支指令已经解码,所述方法进一步包含响应于处理器提取并解码返回分支指令,从链接寄存器堆栈取出目标地址而且使用所述目标地址作为提取下一指令的地址,并且完成所述返回分支指令的执行无需检查所述目标地址的正确性。
在另一个实施例中,一种方法包含响应于处理器解码除调用分支指令以外的链接寄存器操控指令,设定计数器到初始值;响应于处理器解码调用分支指令,将所述计数器递增第一常数;而且响应于处理器解码返回分支指令,将所述计数器递增第二常数。所述方法进一步包含响应于处理器确定所述计数器的值不等于初始值并且响应于处理器解码返回分支指令,从链接寄存器堆栈取出用于返回分支指令的目标地址,并且完成返回分支指令的执行,无需检查所述目标地址的正确性。
在另一个实施例中,设备包含链接寄存器、分支计数器及处理器,所述设备响应于解码除写入到链接寄存器的调用分支指令以外的指令,用以设定分支计数器到初始值;响应于解码调用分支指令,将所述分支计数器递增第一常数;并且响应于解码返回分支指令,将所述分支计数器递增第二常数。所述设备进一步包含链接寄存器堆栈,其中响应于确定所述计数器的值不等于初始值并且响应于解码返回分支指令,处理器从链接寄存器堆栈取出用于返回分支指令的目标地址,并且完成执行以及收回所述返回分支指令,无需检查所述目标地址的正确性。
在另一个实施例中,处理器包含分支计数器、链接寄存器堆栈、用于设定计数器的装置(所述装置用于响应于处理器解码除调用分支指令以外的链接寄存器操控指令,设定计数器以设定所述分支计数器到初始值)、用于增加计数器的装置(所述装置用于响应于处理器解码调用分支指令,增加计数器以将所述分支计数器递增第一常数,并且响应于处理器解码返回分支指令,以将所述分支计数器递增第二常数)。所述处理器进一步包含用于取出链接寄存器堆栈的装置,所述装置用于响应于所述处理器确定分支计数器的值不等于初始值并且响应于所述处理器解码返回分支指令,取出链接寄存器堆栈以从所述链接寄存器堆栈取出用于返回分支指令的目标地址;并且所述处理器为了完成执行并收回所述返回分支指令,无需检查所述目标地址的正确性。
在另一个实施例中,存储媒体已经存储通过处理器可执行的指令,所述处理器为了执行指令时履行一种方法,所述方法包括响应于所述处理器解码除调用分支指令以外的链接寄存器操控指令,设定计数器到初始值;响应于所述处理器解码调用分支指令,将计数器递增第一常数;并且响应于所述处理器解码返回分支指令,将计数器递增第二常数。所述方法进一步包含响应于处理器确定所述计数器的值不等于初始值并且响应于处理器解码返回分支指令,从链接寄存器堆栈取出用于返回分支指令的目标地址,并且完成返回分支指令的执行,无需检查所述目标地址的正确性。
附图说明
呈现附图以辅助描述本发明的实施例,且提供所述附图仅用于实施例的说明且不加限制。
图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中。一个例示性存储媒体耦合到处理器,这样使得处理器可从所述存储媒体读取信息,并且写入信息到所述存储媒体。在替代方案中,存储媒体可集成到处理器。
因此,本发明的一实施例可包含非暂时性计算机可读媒体,其包含提高执行返回分支指令速度的方法。因此,本发明不限于所说明的实例,且任何用于执行本文中所描述的功能性的装置包含于本发明的实施例中。
虽然前述揭示内容展示本发明的说明性实施例,但应注意,在不脱离如所附权利要求书界定的本发明的范围的情况下,可在此做出各种改变和修改。无需按任何特定次序来执行根据本文中所述的本发明的实施例的方法权利要求项的功能、步骤及/或动作。此外,尽管可以以单数形式描述或主张本发明的元件,但除非明确陈述限于单数形式,否则也涵盖复数形式。

Claims (12)

1.一种用于在处理器中执行调用分支指令与返回分支指令的方法,所述方法包括:
每次所述处理器解码除分支指令以外的任何对链接寄存器进行写入的指令的时候,设定计数器到初始值;
响应于所述处理器解码调用分支指令,将下一指令的地址推送到链接寄存器堆栈上,并且将所述计数器递增常数;以及
响应于所述处理器解码返回分支指令,将所述计数器反向递增所述常数;以及
响应于所述处理器解码所述返回分支指令及所述计数器不等于所述初始值的结合,
从所述链接寄存器堆栈弹出用于所述返回分支指令的目标地址,及
完成所述返回分支指令的执行,无需检查所述目标地址的正确性。
2.根据权利要求1所述的方法,其中
所述初始值为0;以及
所述常数等于1。
3.根据权利要求1所述的方法,其进一步包括:响应于所述处理器解码调用分支指令:
将下一指令地址推送到所述链接寄存器堆栈上,
将所述下一指令地址加载到链接寄存器中;
将所述链接寄存器的先前内容推送到软件堆栈上;以及
更新堆栈指针以指示所述软件堆栈上的所述先前内容。
4.根据权利要求3所述的方法,其进一步包括:响应于所述计数器的值等于所述初始值:
从所述软件堆栈弹出地址,
使用从所述软件堆栈弹出的所述地址提供所预测目标地址,
检查所述所预测目标地址的正确性,以及
当所述检查指示所述所预测目标地址正确时,完成所述返回分支指令的执行。
5.一种处理器,其包括:
计数器;
链接寄存器堆栈;
用于获取供所述处理器解码的指令的装置;
用于设定计数器的装置,其中所述用于设定计数器的装置经配置以每次所述处理器解码除分支指令以外的任何对链接寄存器进行写入的指令的时候,设定所述计数器到初始值;以及
用于递增所述计数器的装置,其中所述用于递增所述计数器的装置经配置以
响应于所述处理器解码调用分支指令而将所述计数器递增常数,且
响应于所述处理器解码返回分支指令而将所述计数器反向递增所述常数;
用于响应于所述处理器解码所述调用分支指令将下一指令的地址推送到链接寄存器堆栈上的装置;以及
用于弹出所述链接寄存器堆栈的装置,其中所述用于弹出所述链接寄存器堆栈的装置经配置以响应于所述计数器的值不等于所述初始值及所述处理器解码所述返回分支指令的结合而从所述链接寄存器堆栈弹出用于所述返回分支指令的目标地址;以及
用于完成通过从所述链接寄存器堆栈弹出的所述目标地址寻址的所述返回分支指令的执行而无需检查所述目标地址的正确性的装置。
6.根据权利要求5所述的处理器,其进一步包括存储器,其中所述存储器经配置以维持由所述存储器支持的软件堆栈,并且其中所述处理器进一步经配置以响应于所述处理器解码调用分支指令:
将下一指令地址推送到所述链接寄存器堆栈上,
将所述下一指令地址加载到所述链接寄存器中,
将所述链接寄存器的先前内容推送到所述软件堆栈上,以及
更新堆栈指针以指示所述软件堆栈上的所述先前内容。
7.根据权利要求6所述的处理器,其中所述处理器进一步经配置以响应于所述计数器的值等于所述初始值:
从所述软件堆栈弹出地址,
使用从所述软件堆栈弹出的所述地址提供所预测目标地址,
检查所述所预测目标地址的正确性,且当所述检查指示所述所预测目标地址正确时,完成所述返回分支指令的执行。
8.根据权利要求5所述的处理器,其进一步包括:
存储器,其中所述存储器经配置以维持由所述存储器支持的软件堆栈;以及
用于响应于所述处理器解码调用分支指令而进行以下操作的装置:
将下一指令地址推送到所述链接寄存器堆栈上,
将所述下一地址指令地址加载到所述链接寄存器中,
将所述链接寄存器的先前内容推送到所述软件堆栈上,
更新堆栈指针以指示所述软件堆栈上的所述先前内容。
9.根据权利要求8所述的处理器,其进一步包括:
用于响应于所述确定的结果指示所述计数器的值等于所述初始值而进行以下操作的装置:
从所述软件堆栈弹出地址,
使用从所述软件堆栈弹出的所述地址提供所预测目标地址,
检查所述所预测目标地址的正确性,以及
当所述检查指示所述所预测目标地址正确时,完成所述经解码返回分支指令的执行。
10.一种非暂时性计算机可读媒体,其存储有可由耦合到计数器且耦合到寄存器堆栈的处理器执行的指令,所述处理器当执行所述指令时履行方法,所述方法包括:
获取供所述处理器解码的指令,其中所述指令包含调用分支指令、返回分支指令及链接寄存器操控指令、或其组合;
每次所述处理器解码除分支指令以外的任何对链接寄存器进行写入的指令的时候,将所述计数器设定到初始值;
响应于所述处理器解码调用分支指令,将下一指令的地址推送到链接寄存器堆栈上,并且将所述计数器递增常数;以及
响应于所述处理器解码返回分支指令,将所述计数器反向递增所述常数;以及
响应于所述计数器的值不等于所述初始值及所述处理器解码所述返回分支指令的结合,从所述链接寄存器堆栈弹出用于所述返回分支指令的目标地址;以及
完成通过从所述寄存器堆栈弹出的所述目标地址寻址的所述返回分支指令的执行,而无需检查所述目标地址的正确性。
11.根据权利要求10所述的非暂时性计算机可读媒体,其中
所述初始值为0;
所述常数等于1。
12.一种非暂时性计算机可读媒体,其存储有可由耦合到计数器且耦合到寄存器堆栈的处理器执行的指令,所述处理器当执行所述指令时履行权利要求1-4中任何一者所述的方法。
CN201480013935.1A 2013-03-15 2014-03-14 提高处理器中返回分支指令的执行速度的方法 Expired - Fee Related CN105144084B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/833,844 US9411590B2 (en) 2013-03-15 2013-03-15 Method to improve speed of executing return branch instructions in a processor
US13/833,844 2013-03-15
PCT/US2014/029778 WO2014145101A1 (en) 2013-03-15 2014-03-14 Method to improve speed of executing return branch instructions in a processor

Publications (2)

Publication Number Publication Date
CN105144084A CN105144084A (zh) 2015-12-09
CN105144084B true CN105144084B (zh) 2018-03-20

Family

ID=50629003

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480013935.1A Expired - Fee Related CN105144084B (zh) 2013-03-15 2014-03-14 提高处理器中返回分支指令的执行速度的方法

Country Status (6)

Country Link
US (1) US9411590B2 (zh)
EP (1) EP2972789B8 (zh)
JP (1) JP6257745B2 (zh)
KR (1) KR20150130513A (zh)
CN (1) CN105144084B (zh)
WO (1) WO2014145101A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9934831B2 (en) * 2014-04-07 2018-04-03 Micron Technology, Inc. Apparatuses and methods for storing and writing multiple parameter codes for memory operating parameters
US10120688B2 (en) * 2016-11-15 2018-11-06 Andes Technology Corporation Data processing system and method for executing block call and block return instructions
US20180203703A1 (en) * 2017-01-13 2018-07-19 Optimum Semiconductor Technologies, Inc. Implementation of register renaming, call-return prediction and prefetch
GB2571996B (en) * 2018-03-16 2020-09-09 Advanced Risc Mach Ltd Branch target variant of branch-with-link instruction
US10831884B1 (en) * 2019-09-16 2020-11-10 International Business Machines Corporation Nested function pointer calls

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623614A (en) * 1993-09-17 1997-04-22 Advanced Micro Devices, Inc. Branch prediction cache with multiple entries for returns having multiple callers
US6170054B1 (en) * 1998-11-16 2001-01-02 Intel Corporation Method and apparatus for predicting target addresses for return from subroutine instructions utilizing a return address cache
CN101281459A (zh) * 2007-04-03 2008-10-08 Arm有限公司 受保护的功能调用

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4164037A (en) * 1976-10-27 1979-08-07 Texas Instruments Incorporated Electronic calculator or microprocessor system having combined data and flag bit storage system
US4112495A (en) * 1977-02-09 1978-09-05 Texas Instruments Incorporated Electronic calculator or microprocessor having a selectively loadable instruction register
US5193205A (en) * 1988-03-01 1993-03-09 Mitsubishi Denki Kabushiki Kaisha Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
US5179673A (en) * 1989-12-18 1993-01-12 Digital Equipment Corporation Subroutine return prediction mechanism using ring buffer and comparing predicated address with actual address to validate or flush the pipeline
US6157999A (en) * 1997-06-03 2000-12-05 Motorola Inc. Data processing system having a synchronizing link stack and method thereof
US6092188A (en) 1997-12-23 2000-07-18 Intel Corporation Processor and instruction set with predict instructions
SE513431C2 (sv) * 1999-01-11 2000-09-11 Ericsson Telefon Ab L M Buffert för icke-rapporterade hopp
US6848044B2 (en) * 2001-03-08 2005-01-25 International Business Machines Corporation Circuits and methods for recovering link stack data upon branch instruction mis-speculation
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US20080040576A1 (en) 2006-08-09 2008-02-14 Brian Michael Stempel Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set
US7478228B2 (en) * 2006-08-31 2009-01-13 Qualcomm Incorporated Apparatus for generating return address predictions for implicit and explicit subroutine calls
US7617387B2 (en) 2006-09-27 2009-11-10 Qualcomm Incorporated Methods and system for resolving simultaneous predicted branch instructions
US8438372B2 (en) * 2007-10-05 2013-05-07 Qualcomm Incorporated Link stack repair of erroneous speculative update
US7971044B2 (en) * 2007-10-05 2011-06-28 Qualcomm Incorporated Link stack repair of erroneous speculative update
US8341383B2 (en) * 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences
US10042776B2 (en) 2012-11-20 2018-08-07 Arm Limited Prefetching based upon return addresses

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623614A (en) * 1993-09-17 1997-04-22 Advanced Micro Devices, Inc. Branch prediction cache with multiple entries for returns having multiple callers
US6170054B1 (en) * 1998-11-16 2001-01-02 Intel Corporation Method and apparatus for predicting target addresses for return from subroutine instructions utilizing a return address cache
CN101281459A (zh) * 2007-04-03 2008-10-08 Arm有限公司 受保护的功能调用

Also Published As

Publication number Publication date
EP2972789A1 (en) 2016-01-20
KR20150130513A (ko) 2015-11-23
EP2972789B8 (en) 2020-03-04
CN105144084A (zh) 2015-12-09
WO2014145101A1 (en) 2014-09-18
US20140281394A1 (en) 2014-09-18
JP2016517092A (ja) 2016-06-09
US9411590B2 (en) 2016-08-09
EP2972789B1 (en) 2019-11-20
JP6257745B2 (ja) 2018-01-10

Similar Documents

Publication Publication Date Title
CN105144084B (zh) 提高处理器中返回分支指令的执行速度的方法
EP2991004B1 (en) Method and apparatus for labeling training samples
KR101603751B1 (ko) 명령어 병렬 처리 컴퓨터를 위한 명령어 압축 장치 및 방법
US10884744B2 (en) System and method of loop vectorization by compressing indices and data elements from iterations based on a control mask
CN105453031B (zh) 用于优化指令的方法和系统
CN105190540B (zh) 优化用于上下文相关指令的性能
CN104884145A (zh) 指令合并优化
CN103827818B (zh) Fifo加载指令
CN106708497A (zh) 一种代码执行方法及装置
WO2016048718A1 (en) Sharing initial dictionaries and huffman trees between multiple compressed blocks in lz-based compression algorithms
CN106649210A (zh) 一种数据转换方法及装置
CN110503180A (zh) 模型处理方法、装置以及电子设备
CN110399972A (zh) 数据处理方法、装置及电子设备
CN105892995B (zh) 查找负数的方法、装置及处理器
US20150301799A1 (en) Parallelized in-place radix sorting
CN110321824B (zh) 基于神经网络的绑扎判定方法及装置
US20190108018A1 (en) Forwarded operand and machine learning utilizing the same
CN104461938A (zh) 数据读取方法和装置
CN108491546A (zh) 一种页面切换方法及电子设备
CN104317501B (zh) 触摸书写状态下的操作指令输入方法和系统
US10761847B2 (en) Linear feedback shift register for a reconfigurable logic unit
CN107193538A (zh) 一种改进的钩取技术的方法及装置
US10977215B2 (en) System and method for storage optimization in a de-duplication system
CN111475304A (zh) 一种特征提取加速方法及系统
CN104035811B (zh) 虚拟机现场数据的处理方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20180320

Termination date: 20210314

CF01 Termination of patent right due to non-payment of annual fee