CN105144084A - 提高处理器中返回分支指令的执行速度的方法 - Google Patents
提高处理器中返回分支指令的执行速度的方法 Download PDFInfo
- Publication number
- CN105144084A CN105144084A CN201480013935.1A CN201480013935A CN105144084A CN 105144084 A CN105144084 A CN 105144084A CN 201480013935 A CN201480013935 A CN 201480013935A CN 105144084 A CN105144084 A CN 105144084A
- Authority
- CN
- China
- Prior art keywords
- branch instruction
- instruction
- branch
- counter
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 38
- 230000004044 response Effects 0.000 claims abstract description 43
- 230000009471 action Effects 0.000 description 11
- 230000008569 process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000007423 decrease Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 239000006249 magnetic particle Substances 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
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 (19)
1.一种用于在处理器中执行调用分支指令与返回分支指令的方法,所述方法包括:
响应于所述处理器解码除调用分支指令以外的链接寄存器操控指令,设定状态机到初始状态;以及
响应于解码调用分支指令或返回分支指令,将状态机改变到指示自从所述处理器解码除调用分支指令以外的链接寄存器操控指令以来由所述处理器解码的调用分支指令的数目的状态,并且其中所述处理器尚未解码与所述经解码的调用分支指令配对的返回分支指令。
2.根据权利要求1所述的方法,其进一步包括:
假如所述状态机的所述状态指示自从所述处理器解码除调用分支指令以外的链接寄存器操控指令以来,已经解码至少一个调用分支指令,并且其中尚未解码与所述至少一个经解码的调用分支指令配对的至少一个返回分支指令,响应于所述处理器提取并解码返回分支指令,从链接寄存器堆栈弹出目标地址且使用所述目标地址作为提取下一指令的地址;以及
完成所述返回分支指令的执行,无需检查所述目标地址的正确性。
3.一种用于在处理器中执行调用分支指令与返回分支指令的方法,所述方法包括:
响应于所述处理器解码除调用分支指令以外的链接寄存器操控指令,设定计数器到初始值;
响应于所述处理器解码调用分支指令,将所述计数器递增第一常数;以及
响应于所述处理器解码返回分支指令,将所述计数器递增第二常数。
4.根据权利要求3所述的方法,其进一步包括∶
响应于所述处理器确定所述计数器的值不等于所述初始值且响应于所述处理器解码所述返回分支指令,从链接寄存器堆栈弹出用于所述返回分支指令的目标地址;以及
完成所述返回分支指令的执行,无需检查所述目标地址的正确性。
5.根据权利要求4所述的方法,其中
所述初始值为0;
所述第一常数等于1;以及
所述第二常数等于-1。
6.根据权利要求3所述的方法,其中
所述初始值为0;
所述第一常数等于1;以及
所述第二常数等于-1。
7.一种设备,其包括:
链接寄存器;
分支计数器;以及
处理器,其用以
响应于解码除对所述链接寄存器进行写入的调用分支指令以外的指令,将所述分支计数器设定到初始值;
响应于解码调用分支指令,将所述分支计数器递增第一常数;以及
响应于解码返回分支指令,将所述分支计数器递增第二常数。
8.根据权利要求7所述的设备,其进一步包括:
链接寄存器堆栈;
所述处理器,其用以
响应于确定所述计数器的值不等于所述初始值且响应于解码所述返回分支指令,从所述链接寄存器堆栈弹出用于所述返回分支指令的目标地址;以及
完成所述返回分支指令的执行,无需检查所述目标地址的正确性。
9.根据权利要求8所述的设备,其中
所述初始值为0;
所述第一常数等于1;以及
所述第二常数等于-1。
10.根据权利要求7所述的设备,其中
所述初始值为0;
所述第一常数等于1;
所述第二常数等于-1。
11.根据权利要求7所述的设备,其中所述设备是从由蜂窝电话和基站组成的集合中选出的。
12.一种处理器,其包括:
分支计数器;
链接寄存器堆栈;
用于设定计数器的装置,所述用于设定计数器的装置响应于所述处理器解码除调用分支指令以外的链接寄存器操控指令而设定所述分支计数器到初始值;以及
用于递增计数器的装置,所述用于递增计数器的装置响应于所述处理器解码调用分支指令而将所述分支计数器递增第一常数,且响应于所述处理器解码返回分支指令而将所述分支计数器递增第二常数。
13.根据权利要求12所述的处理器,其进一步包括:
用于弹出链接寄存器堆栈的装置,所述用于弹出链接寄存器堆栈的装置响应于所述处理器确定所述分支计数器的值不等于所述初始值且响应于所述处理器解码所述返回分支指令而从所述链接寄存器堆栈弹出用于所述返回分支指令的目标地址;以及
所述处理器,其完成所述返回分支指令的执行而检查所述目标地址的正确性。
14.根据权利要求13所述的处理器,其中
所述初始值为0;
所述第一常数等于1;以及
所述第二常数等于-1。
15.根据权利要求12所述的处理器,其中
所述初始值为0;
所述第一常数等于1;以及
所述第二常数等于-1。
16.一种非暂时性计算机可读媒体,其具有可由处理器执行的所存储指令,所述处理器当执行所述指令时履行方法,所述方法包括:
响应于所述处理器解码除调用分支指令以外的链接寄存器操控指令,将计数器设定到初始值;
响应于所述处理器解码调用分支指令,将所述计数器递增第一常数;以及
响应于所述处理器解码返回分支指令,将所述计数器递增第二常数。
17.根据权利要求16所述的非暂时性计算机可读媒体,所述方法进一步包括:
响应于所述处理器确定所述计数器的值不等于所述初始值且响应于所述处理器解码所述返回分支指令,从链接寄存器堆栈弹出用于所述返回分支指令的目标地址;以及
完成所述返回分支指令的执行,无需检查所述目标地址的正确性。
18.根据权利要求17所述的非暂时性计算机可读媒体,其中
所述初始值为0;
所述第一常数等于1;以及
所述第二常数等于-1。
19.根据权利要求16所述的非暂时性计算机可读媒体,其中
所述初始值为0;
所述第一常数等于1;以及
所述第二常数等于-1。
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 true CN105144084A (zh) | 2015-12-09 |
CN105144084B 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) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108073526A (zh) * | 2016-11-15 | 2018-05-25 | 晶心科技股份有限公司 | 数据处理系统及控制执行流程的方法 |
CN110268384A (zh) * | 2017-01-13 | 2019-09-20 | 优创半导体科技有限公司 | 寄存器重命名、调用返回预测和预取的实现 |
CN111771188A (zh) * | 2018-03-16 | 2020-10-13 | Arm有限公司 | 带链接分支指令的分支目标变体 |
Families Citing this family (2)
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 |
US10831884B1 (en) * | 2019-09-16 | 2020-11-10 | International Business Machines Corporation | Nested function pointer calls |
Citations (3)
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)
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 |
US7971044B2 (en) * | 2007-10-05 | 2011-06-28 | Qualcomm Incorporated | Link stack repair of erroneous speculative update |
US8438372B2 (en) * | 2007-10-05 | 2013-05-07 | 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 |
-
2013
- 2013-03-15 US US13/833,844 patent/US9411590B2/en active Active
-
2014
- 2014-03-14 CN CN201480013935.1A patent/CN105144084B/zh not_active Expired - Fee Related
- 2014-03-14 JP JP2016503221A patent/JP6257745B2/ja not_active Expired - Fee Related
- 2014-03-14 KR KR1020157029133A patent/KR20150130513A/ko active IP Right Grant
- 2014-03-14 EP EP14720842.5A patent/EP2972789B8/en active Active
- 2014-03-14 WO PCT/US2014/029778 patent/WO2014145101A1/en active Application Filing
Patent Citations (3)
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有限公司 | 受保护的功能调用 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108073526A (zh) * | 2016-11-15 | 2018-05-25 | 晶心科技股份有限公司 | 数据处理系统及控制执行流程的方法 |
CN108073526B (zh) * | 2016-11-15 | 2021-08-10 | 晶心科技股份有限公司 | 数据处理系统及控制执行流程的方法 |
CN110268384A (zh) * | 2017-01-13 | 2019-09-20 | 优创半导体科技有限公司 | 寄存器重命名、调用返回预测和预取的实现 |
CN111771188A (zh) * | 2018-03-16 | 2020-10-13 | Arm有限公司 | 带链接分支指令的分支目标变体 |
Also Published As
Publication number | Publication date |
---|---|
EP2972789B8 (en) | 2020-03-04 |
CN105144084B (zh) | 2018-03-20 |
JP6257745B2 (ja) | 2018-01-10 |
KR20150130513A (ko) | 2015-11-23 |
JP2016517092A (ja) | 2016-06-09 |
WO2014145101A1 (en) | 2014-09-18 |
US9411590B2 (en) | 2016-08-09 |
EP2972789B1 (en) | 2019-11-20 |
US20140281394A1 (en) | 2014-09-18 |
EP2972789A1 (en) | 2016-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102415508B1 (ko) | 컨볼루션 신경망 처리 방법 및 장치 | |
CN105144084A (zh) | 提高处理器中返回分支指令的执行速度的方法 | |
CN103250131B (zh) | 包括用于早期远分支预测的影子缓存的单周期多分支预测 | |
US10884744B2 (en) | System and method of loop vectorization by compressing indices and data elements from iterations based on a control mask | |
CN104884145A (zh) | 指令合并优化 | |
CN103827818B (zh) | Fifo加载指令 | |
US10922785B2 (en) | Processor and method for scaling image | |
CN104063329B (zh) | 64位立即数处理方法及装置 | |
US20170060552A1 (en) | Method of splitting register live ranges | |
CN104106044A (zh) | 使用经调用函数的地址的最低有效位来切换处理器模式 | |
US10067715B2 (en) | Buffer-based update of state data | |
CN114090466A (zh) | 一种指令处理装置、方法、计算机设备及存储介质 | |
CN107924306A (zh) | 使用simd指令的表查找 | |
CN108874491A (zh) | 信息加载的方法及装置 | |
CN102662851A (zh) | 一种堆栈入栈出栈装置及方法 | |
CN104428745A (zh) | 一种输入字符的方法和电子设备 | |
JP2014215624A (ja) | 演算処理装置 | |
CN108491546A (zh) | 一种页面切换方法及电子设备 | |
US20140310501A1 (en) | Apparatus and method for calculating physical address of a processor register | |
US10545661B2 (en) | Touch screen device allowing selective input of free line, and method of supporting selective input of free line in touch screen device | |
CN108897522A (zh) | 数据处理方法、数据处理装置以及电子设备 | |
CN111860772B (zh) | 一种用于执行人工神经网络pooling运算的装置和方法 | |
US9871554B2 (en) | Method and vector computing unit for implementing de-scrambling and de-spreading, and computer storage medium | |
US9667271B2 (en) | Path encoding and decoding | |
CN108958802A (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180320 Termination date: 20210314 |