CN104854556B - 建立分支目标指令高速缓冲存储器条目的方法和系统 - Google Patents
建立分支目标指令高速缓冲存储器条目的方法和系统 Download PDFInfo
- Publication number
- CN104854556B CN104854556B CN201380061574.3A CN201380061574A CN104854556B CN 104854556 B CN104854556 B CN 104854556B CN 201380061574 A CN201380061574 A CN 201380061574A CN 104854556 B CN104854556 B CN 104854556B
- Authority
- CN
- China
- Prior art keywords
- instruction
- btic
- subroutine
- entries
- address
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 230000015654 memory Effects 0.000 claims abstract description 24
- 230000004044 response Effects 0.000 claims abstract description 20
- 210000005103 brain tumor initiating cell Anatomy 0.000 claims abstract 43
- 238000001514 detection method Methods 0.000 claims description 15
- 230000009467 reduction Effects 0.000 claims description 10
- 238000007689 inspection Methods 0.000 claims description 4
- 239000004065 semiconductor Substances 0.000 claims description 4
- 210000004027 cell Anatomy 0.000 claims 2
- 238000012545 processing Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 230000005611 electricity Effects 0.000 description 4
- 238000011017 operating method Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000006249 magnetic particle Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明揭示建立用于子例程返回的分支目标指令高速缓冲存储器BTIC条目以减少管线泡,以及相关的系统、方法和计算机可读媒体。在一个实施例中,建立BTIC条目的方法包含检测执行管线中的子例程调用。作为响应,将按顺序在所述子例程调用之后获取的至少一个指令写入作为用于子例程返回的BTIC条目中的分支目标指令。计算下一指令获取地址,且将其写入到所述BTIC条目中的下一指令获取地址字段中。以此方式,即使首次遇到所述子例程返回或从不同调用位置调用所述子例程,所述BTIC也可提供用于所述子例程返回的正确分支目标指令和下一指令获取地址数据。
Description
优先权申请
本申请案主张2012年11月28日申请且标题为“建立用于子例程返回的分支目标指令高速缓冲存储器(BTIC)条目以减少执行管线暂停,以及相关系统、方法和计算机可读媒体(ESTABLISHING A BRANCH TARGET INSTRUCTION CACHE(BTIC)ENTRY FOR SUBROUTINERETURNS TO REDUCE EXECUTION PIPELINE STALLS,AND RELATED SYSTEMS,METHODS,ANDCOMPUTER-READABLE MEDIA)的第61/730,717号美国临时专利申请案的优先权,所述美国临时专利申请案通过引用以其全文结合在此。
技术领域
本发明的技术涉及计算机系统中的分支预测,且更具体地说涉及分支目标缓冲器(BTB)和/或分支目标指令高速缓冲存储器(BTIC)。
背景技术
指令管线化是处理技术,通过所述技术,可通过将每一指令的处置分裂为一系列步骤且在由多个级组成的执行管线中执行所述步骤而增加处理器正执行的计算机指令的处理量。如果执行管线中的所有级能够同时处理指令而当指令重定向发生时不会带来管线“泡”,那么可实现最佳处理器性能。在执行管线内处理的指令可包含分支指令,其通过将程序控制转移到指定分支目标指令而重定向程序的流。如果分支指令是条件性的,(即,直到执行时才知道是否将采取所述分支),那么可采用分支预测硬件来基于先前执行的条件性分支指令的解析而预测是否将采取所述分支。
在常规执行管线中,跟随分支指令的指令与所述分支指令的解码同时地被取入执行管线。因此,当预测将采取分支时,按顺序在分支指令之后获取的指令(即,在不采取所述分支的情况下将执行的指令)被清空。随后获取正确的分支目标指令。此过程通常被称作指令获取重定向。因为指令获取重定向可消耗一或多个时钟循环,所以在其中获取分支目标指令的同时解码级空闲的点处可能将一或多个管线泡引入到执行管线。一旦被引入,管线泡便传播穿过执行管线的后续级。
为了减少管线泡的频率,可利用分支目标指令高速缓冲存储器(BTIC)。BTIC存储一或多个分支目标指令(即,当采取分支时分支指令将程序控制转移到的目标地址处的指令)的副本。BTIC中高速缓冲存储的分支目标指令可经部分或完全解码。BTIC还可高速缓冲存储下一指令获取地址以用于获取在经高速缓冲存储分支目标指令之后的一或多个接着的后续指令。BTIC通常是在执行管线的获取级期间查询,且将分支目标指令提供到执行管线的一或多个后续级以减少或消除由于指令获取重定向而引入的管线泡的发生。
当辨识出分支指令且首先采取所述分支时针对所述分支指令建立BTIC条目。因此,当首次遇到分支指令时,BTIC条目对于所述分支指令并不存在,且BTIC高速缓冲存储器“未中”发生。在子例程返回指令(特定类型的分支指令)的特定情况中,当首先遇到子例程返回指令时,所述子例程返回指令将始终经历BTIC高速缓冲存储器未中。希望当首次遇到子例程返回指令时对应于所述子例程返回指令的BTIC条目提供正确的分支目标指令。
此外,因为子例程可能从程序内的不同点处的多个分支指令调用,所以用于子例程返回指令的BTIC条目可能经常含有不正确的分支目标指令。举例来说,当从第一调用位置调用的子例程返回时,按顺序在所述第一调用位置之后的指令执行且填充于用于子例程返回指令的BTIC条目中作为分支目标指令。如果随后从第二调用位置调用子例程,那么在子例程返回之后应执行按顺序在所述第二调用位置之后的指令。然而,在用于子例程返回指令的BTIC条目中高速缓冲存储的分支目标指令是跟随第一调用位置的指令,而不是跟随第二调用位置的指令。因此,子例程返回指令的BTIC条目不含有用于第二调用位置的正确分支目标指令。希望即使在从不同调用位置调用子例程之后子例程返回指令的BTIC条目也提供正确的分支目标指令。
发明内容
本发明的实施例提供建立用于子例程返回指令的分支目标指令高速缓冲存储器(BTIC)条目以减少执行管线泡。还揭示相关系统、方法及计算机可读媒体。常规地,响应于检测到预测将采取的分支指令,将已经获取的按顺序在所述分支指令之后(按编程次序)的指令从执行管线清空。然而,当分支指令是子例程调用指令时,那些清空的顺序指令很可能是将从由子例程调用指令调用的子例程转移回程序控制的用于所述子例程返回指令的分支目标指令。因此,本文所揭示的实施例提供响应于检测到子例程调用指令而建立用于子例程返回指令的BTIC条目。以此方式,BTIC可当首先遇到子例程返回指令时提供用于子例程返回指令的有效BTIC条目。此外,即使当从不同于先前调用位置的调用位置调用子例程时,BTIC条目也可提供用于子例程返回指令的正确分支目标指令。
在此方面,在一个实施例中,提供建立在执行管线中用于子例程返回指令的BTIC条目以减少执行管线泡的发生的方法。所述方法包括检测执行管线中的子例程调用指令。响应于检测到子例程调用指令,所述方法进一步包括通过将按顺序在子例程调用指令之后获取的至少一个顺序指令写入作为用于子例程返回指令的BTIC条目中的分支目标指令,来建立用于子例程返回指令的BTIC条目。所述方法还包括计算下一指令获取地址。所述方法另外包括将下一指令获取地址写入到用于子例程返回指令的BTIC条目中的下一指令获取地址字段中。以此方式,即使首次遇到子例程返回指令或从不同于先前调用位置的调用位置调用子例程,BTIC也可提供正确分支目标指令和用于子例程返回指令的下一指令获取地址数据。
在另一实施例中,提供管线泡减少电路。所述管线泡减少电路包括子例程调用检测电路,其经配置以检测执行管线中的子例程调用指令。所述管线泡减少电路进一步包括BTIC条目建立电路,其经配置以响应于所述子例程调用检测电路检测到所述子例程调用指令而将按顺序在所述子例程调用指令之后获取的至少一个顺序指令写入作为用于子例程返回指令的BTIC条目中的分支目标指令。所述BTIC条目建立电路进一步经配置以计算下一指令获取地址。所述BTIC建立电路还经配置以将所述下一指令获取地址写入到用于所述子例程返回指令的所述BTIC条目中的下一指令获取地址字段中。
在另一实施例中,提供管线泡减少电路。所述管线泡减少电路包括用于检测执行管线中的子例程调用指令的装置。所述管线泡减少电路进一步包括用于响应于检测到所述子例程调用指令而建立用于子例程返回指令的BTIC条目的装置。所述用于建立BTIC条目的装置包括用于响应于检测到所述子例程调用指令而将按顺序在所述子例程调用指令之后获取的至少一个顺序指令写入作为用于所述子例程返回指令的所述BTIC条目中的分支目标指令的装置。所述用于建立BTIC条目的装置还包括用于响应于检测到所述子例程调用指令而计算下一指令获取地址的装置。所述用于建立BTIC条目的装置另外包括用于响应于检测到所述子例程调用指令而将所述下一指令获取地址写入到用于所述子例程返回指令的所述BTIC条目中的下一指令获取地址字段中的装置。
在另一实施例中,提供非暂时性计算机可读媒体,其具有存储于其上的计算机可执行指令以致使处理器实施建立用于执行管线中的子例程返回指令的BTIC条目以减少管线泡的发生的方法。由所述计算机可执行指令实施的方法包括检测执行管线中的子例程调用指令。由所述计算机可执行指令实施的方法进一步包括响应于检测到所述子例程调用指令,通过以下操作建立用于子例程返回指令的BTIC条目:将按顺序在所述子例程调用指令之后获取的至少一个顺序指令写入作为用于所述子例程返回指令的所述BTIC条目中的分支目标指令。由所述计算机可执行指令实施的方法还包括计算下一指令获取地址。由所述计算机可执行指令实施的方法另外包括将所述下一指令获取地址写入到用于所述子例程返回指令的所述BTIC条目中的下一指令获取地址字段中。
附图说明
图1是包含管线泡减少电路的示范性处理器的框图,所述管线泡减少电路经配置以建立用于子例程返回指令的分支目标指令高速缓冲存储器(BTIC)条目以减少执行管线泡的发生;
图2是提供可由图1的执行管线泡减少电路处理的示范性指令序列的图;
图3是说明由图1的示范性处理器利用BTIC处理图2的示范性指令序列的时序图,其展示由于遇到预测采取的分支的管线泡的示范性发生,以及使用图1的管线泡减少电路消除管线泡;
图4A和4B是展示在处理器中利用图1的管线泡减少电路处理图2的示范性指令序列的时序图,其说明因遇到子例程返回指令而产生的管线泡的消除;
图5是展示用于建立用于子例程返回指令的BTIC条目以减少执行管线泡的发生的示范性操作的流程图;
图6是说明用于响应于检测到子例程返回指令而消耗用于子例程返回指令的BTIC条目的示范性操作的流程图;
图7A和7B是更详细说明用于建立和消耗BTIC条目以减少管线泡的发生的示范性操作的流程图;以及
图8是可包含图1的管线泡减少电路的示范性基于处理器的系统的图,其经配置以建立用于子例程返回指令的BTIC条目以减少管线泡的发生。
具体实施方式
现在参看各图,描述了本发明的几个示范性实施例。词语“示范性”在本文中用以意味着“充当实例、例子或说明”。本文中被描述为“示范性”的任何实施例未必应解释为比其它实施例优选或有利。
本发明的实施例提供建立用于子例程返回指令的分支目标指令高速缓冲存储器(BTIC)条目以减少执行管线泡。还揭示相关系统、方法及计算机可读媒体。常规地,响应于检测到预测将采取的分支指令,将已经获取的按顺序在所述分支指令之后(按编程次序)的指令从执行管线清空。然而,当分支指令是子例程调用指令时,那些清空的顺序指令很可能是将从由子例程调用指令调用的子例程转移回程序控制的用于所述子例程返回指令的分支目标指令。因此,本文所揭示的实施例提供响应于检测到子例程调用指令而建立用于子例程返回指令的BTIC条目。以此方式,BTIC可当首先遇到子例程返回指令时提供用于子例程返回指令的有效BTIC条目。此外,即使当从不同于先前调用位置的调用位置调用子例程时,BTIC条目也可提供用于子例程返回指令的正确分支目标指令。
在这点上,在一个实施例中,提供建立用于执行管线中的子例程返回指令的BTIC条目以减少执行管线泡的发生的方法。所述方法包括检测执行管线中的子例程调用指令。响应于检测到子例程调用指令,所述方法进一步包括通过将按顺序在子例程调用指令之后获取的至少一个顺序指令写入作为用于子例程返回指令的BTIC条目中的分支目标指令,来建立用于子例程返回指令的BTIC条目。所述方法还包括计算下一指令获取地址。所述方法另外包括将下一指令获取地址写入到用于子例程返回指令的BTIC条目中的下一指令获取地址字段中。以此方式,即使首次遇到子例程返回指令或从不同于先前调用位置的调用位置调用子例程,BTIC也可提供正确分支目标指令和用于子例程返回指令的下一指令获取地址数据。
在此方面,图1是示范性处理器10的框图。处理器10包含管线泡减少电路12,其经配置以建立用于子例程返回指令的BTIC条目(未图示)以减少管线泡的发生。处理器10可涵盖已知数字逻辑元件、半导体电路、处理核心和/或存储器结构以及其它元件中的任一者或其组合。本文中所描述的实施例并不限于任何特定元件布置,且所揭示技术可容易地扩展到半导体裸片或封装上的各种结构及布局。处理器10包含输入/输出(I/O)电路14、指令高速缓冲存储器16和数据高速缓冲存储器18。处理器10进一步包括执行管线20,其包含前端电路22、执行单元24和完成单元26。处理器10另外包含链栈28以及寄存器30,其包括一或多个通用寄存器(GPR)32、程序计数器34和链接寄存器36。在一些实施例中,例如采用ARM v7架构的那些实施例,链接寄存器36是如图1所示的GPR 32中的一者。替代地,例如利用PowerPC架构的那些实施例的一些实施例可提供链接寄存器36与GPR 32分开(未图示)。
在示范性操作中,执行管线20的前端电路22从指令高速缓冲存储器16提取指令。在大多数实施例中,指令高速缓冲存储器16可为芯片上层级1(L1)高速缓冲存储器,作为非限制性实例。所获取指令由前端电路22解码且发出到执行单元24。执行单元24执行发出的指令,且完成单元26重试执行的指令。在一些实施例中,完成单元26可包括回写机制,其将执行结果存储在一或多个定向文件寄存器中。应理解,执行单元24及/或完成单元26可各自包括一或多个顺序管线级。应进一步理解,可以一个以上的群组获取及/或解码指令。
在一些实施例中,处理器10可采用分支预测,现在描述其示范性操作。前端电路22包括若干管线级,包含顺序获取/解码管线级38、40和42(在本文中分别被称作FE1、FE2和FE3)以及发出/分派级44。管线级38、40和42中的一或多者与分支预测电路46相关联,所述分支预测电路包括分支逻辑控制(BCL)电路48、分支目标指令高速缓冲存储器(BTIC)50、分支目标地址高速缓冲存储器(BTAC)52和分支历史表(BHT)54。
处理器10的管线泡减少电路12包含子例程调用检测电路56、BTIC条目建立电路58、子例程返回检测电路60和BTIC消耗电路62。下文更详细论述由管线泡减少电路12的这些元件执行以建立用于子例程返回指令的BTIC条目以减少执行管线泡的操作。在一些实施例中,BTIC条目建立电路58和/或BTIC消耗电路62可利用由BTIC 50部分地提供的逻辑或功能性。
在描述用于建立用于子例程返回指令的BTIC条目的方法、系统和计算机可读媒体的实例之前,首先描述常规BTIC的操作。为了简化下文论述的实例,图2中提供表示可由图1的执行管线20处理的典型系列的指令的示范性指令序列。示范性指令序列64包括指令66、68、70、72、74、76、78和79,在本文中分别被称作Instr0、Instr1、Instr2、Instr3、InstrX、InstrX+1、InstrX+2和InstrY。上文参考的指令在图2中出现的次序表示其中指令在例如硬盘驱动器或快闪存储器等永久性存储媒体内存储的顺序次序。然而,由于指令由处理器10执行,因此程序控制可通过例如分支指令等指令从一个位置转移到另一位置。因此,指令由处理器10获取且执行的实际次序可不同于所述指令存储的顺序。
在图2中,通过程序流80的箭头说明在指令执行期间程序控制的转移。如程序流80指示,程序执行以指令Instr0开始且前进到Instr1,其在此实例中是子例程调用指令。在一些实施例中,子例程调用指令可包含分支和链接(BL)指令,其将子例程调用指令的返回地址放置于链接寄存器中,例如图1的链接寄存器36,且将例如图1的程序计数器34等程序计数器设定于子例程的指令地址。此处,子例程调用指令Instr1致使程序控制转移到指令InstrX,其为子例程开始指令。
接着,按顺序获取且执行指令InstrX+1和InstrX+2。InstrX+2是子例程返回指令,其是致使程序控制返回到按顺序在调用子例程的子例程调用指令之后的指令的分支指令。一些实施例可提供子例程返回指令是分支和链接(BLR)指令,其将例如图1的程序计数器34等程序计数器设定于子例程调用指令的返回地址。在此实例中,指令InstrX+2的执行将程序控制转移到指令Instr2,紧跟子例程调用指令Instr1的指令。指令的处理随后循序地进行,其中按顺序获取和执行指令Instr3和任何跟随的指令。如图2所示,指令InstrY表示下一子例程的起始点。虽然指令InstrY紧跟在子例程返回指令InstrX+2之后,但除非由程序内的另一分支指令(未图示)调用,否则不执行指令InstrY和后续指令。
提供图3以更清楚地说明由于遇到预测采取的分支的执行管线泡的示范性发生以及使用BTIC消除管线泡。图3是展示图2的示范性指令序列64在由采用BTIC的处理器(例如图1的处理器10)处理时的时序图。时序图中的列(标记0、1、2、…8)各自表示单个处理器时钟循环。时序图中的行(标记“下一获取”、“FE1”、“FE2”和“FE3”)指示在每一处理器时钟循环期间“下一获取”指示符82以及执行管线级FE1、FE2和FE3的内容。在此实例中,“下一获取”指示符82指示在执行管线级FE1中在下一处理器时钟循环期间将由处理器获取的下一指令。以此方式,展示在若干时钟循环的过程中指令通过执行管线级的进展。
图3进一步说明为了存储对应于示范性指令序列64中检测到的分支指令的条目而采用的图1的BTIC 50。BTIC 50包含下一指令获取地址字段和分支目标指令字段作为每一BTIC条目的部分。分支目标指令字段存储对应分支指令预测将把程序控制转移到的一或多个指令的副本。下一指令获取地址字段将跟随分支目标指令的下一指令的地址存储在分支目标指令字段中。下文更详细地论述使用下一指令获取地址字段和分支目标指令字段来消除管线泡。应理解图3中说明的实例时序图假定子例程调用指令Instr1已经检测一次,导致填充有适当的下一指令获取地址和分支目标指令值的BTIC 50中的BTIC条目84的建立。
继续参考图3,处理在处理器时钟循环0处以图2的示范性指令序列64中的第一指令Instr0开始。在处理器时钟循环0处,下一获取指示符82指示将接着获取指令Instr0用于处理。在处理器时钟循环1处,指令Instr0已前进到执行管线级FE1用于获取。下一获取指示符82也已经更新以指示接着将获取子例程调用指令Instr1,其按顺序在示范性指令序列64中的指令Instr0之后。在处理器时钟循环2期间,在执行管线级FE2中解码指令Instr0,同时在执行管线级FE1中获取指令Instr1。此时,指令Instr1不被辨识为分支指令。因此,下一获取指示符82在处理器时钟循环2中经更新以指示接着将获取按顺序在指令Instr1之后的下一指令(即,指令Instr2)。
在处理器时钟循环3中,执行管线泡发生。指令Instr0已到达执行管线级FE3。在执行管线级FE2中解码子例程调用指令Instr1,其中将其识别为预测采取的分支。起始指令获取重定向以从执行管线清空任何不正确获取的指令,且获取用于子例程调用指令Instr1的正确分支目标指令。因为在下一处理器时钟循环之前无法获取用于子例程调用指令Instr1的正确分支目标指令(即,指令InstrX),所以在执行管线级FE1中引入图3中指示为“Instr2(泡)”的管线泡。如图3中所见,获取到FE1中的指令Instr2在处理器时钟循环3期间占据管线泡。
如果处理器并不采用BTIC 50,那么执行管线泡将在随后的处理器时钟循环中在执行管线内传播,导致减少的处理器处理量和低效的电力消耗。然而,在此实例中,BTIC 50可用于消除执行管线泡。在处理器时钟循环3期间,存取BTIC 50,且定位用于子例程调用指令Instr1的先前建立的BTIC条目84。BTIC 50提供用于BTIC条目84的下一指令获取地址字段的内容。因此,下一获取指示符82经更新以指示接着将获取指令InstrX+1(即,跟随分支目标指令InstrX的指令),如箭头86指示。
继续参考图3,在处理器时钟循环4期间,指令Instr0前进到执行管线88的其余部分中的其余发出和执行级,而指令Instr1到达执行管线级FE3。在执行管线级FE1中获取指令InstrX+1。应注意,处理器时钟循环3中引入的执行管线泡仍存在,已到达执行管线级FE2。然而,当在处理器时钟循环5期间执行管线泡到达执行级FE3时,BTIC 50将分支目标指令(例如,InstrX)从用于子例程调用指令Instr1的BTIC条目84供应到执行管线级FE3,如箭头90指示。以此方式,消除管线泡,且其余指令在处理器时钟循环6和7期间移动通过管线。
如同其它类型的分支指令,当首先遇到子例程返回指令时,子例程返回指令将始终导致BTIC高速缓冲存储器未中。此外,因为子例程可能从程序内的不同点处的多个分支指令调用,所以用于子例程返回指令的BTIC条目可能经常含有不正确的分支目标指令。因此,可提供图1的管线泡减少电路12以当处理子例程返回指令时减少管线泡的发生。
在此方面,图4A和4B是说明正由图1的处理器10利用管线泡减少电路12处理的图2的示范性指令序列64的时序图。图4A展示在检测到子例程调用指令之后即刻建立用于子例程返回指令的BTIC条目,而图4B说明用以消除管线泡的建立的BTIC条目。如同图3,图4A和4B的时序图中的列(标记0、1、2、…8)各自表示单个处理器时钟循环,而每一时序图中的行指示在每一处理器时钟循环期间“下一获取”指示符82以及执行管线级FE1、FE2和FE3的内容。下一获取指示符82展示在执行管线级FE1中在下一处理器时钟循环期间处理器将获取的下一指令。图4A和4B还说明管线泡减少电路12和BTIC 50。出于清楚和简洁起见,假定用于子例程调用指令Instr1的BTIC条目的建立如图3中描述而发生,且在图4A和4B中未图示或未结合图4A和4B再次描述。虽然图4A和4B中说明的实例采用一个指令的指令获取宽度,但应理解一些实施例可提供大于一个指令的指令获取宽度。
参考图4A,在处理器时钟循环0,下一获取指示符82指示接着将获取指令Instr0(图2的示范性指令序列64中的第一指令)用于处理。在处理器时钟循环1,指令Instr0已前进到执行管线级FE1用于获取,且下一获取指示符82经更新以指示接着将获取按顺序在示范性指令序列64中的指令Instr0之后的子例程调用指令Instr1。在处理器时钟循环2期间,在执行管线级FE2中解码指令Instr0,而在执行管线级FE1中获取子例程调用指令Instr1。此时,子例程调用指令Instr1不被辨识为分支指令。因此,下一获取指示符82在处理器时钟循环2中经更新以指示接着将获取按顺序在指令Instr1之后的下一指令(即,指令Instr2)。
继续参考图4A,在处理器时钟循环3中,管线泡发生。指令Instr0已到达执行管线级FE3,且在执行管线级FE2中解码子例程调用指令Instr1,其中将其识别为预测采取的分支。起始指令获取重定向以从执行管线清空任何不正确获取的指令(即,指令Instr2),且获取用于子例程调用指令Instr1的正确分支目标指令,如图3中说明。
然而,并非不正确获取的指令的弃置,管线泡减少电路12利用当遇到子例程调用指令Instr1时获取的指令来建立用于子例程返回指令InstrX+2的BTIC条目92。确切地说,在处理器时钟循环4中,管线泡减少电路12从执行管线的FE2级检索所获取指令Instr2(如由箭头94指示),且将所获取指令Instr2存储在BTIC条目92中作为分支目标指令,如由箭头96指示。基于指令Instr2的大小,管线泡减少电路12还计算按顺序在指令Instr2之后的指令Instr3的地址,且将指令Instr3的地址存储在BTIC条目92中作为下一指令获取地址,如由箭头98指示。处理随后以与如上文在图3中描述极为相同的方式继续,其中在处理器时钟循环5中使用BTIC 50消除与子例程调用指令Instr1相关联的管线泡。
现参看图4B,说明用于消除与子例程返回指令Instrx+2相关联的管线泡的操作。在处理器时钟循环6中,当子例程返回指令InstrX+2在执行管线级FE2中经解码且识别为预测采取的分支时在执行管线级FE1中发生管线泡,从而触发指令获取重定向。当管线泡减少电路12检测到子例程返回指令InstrX+2时,存取BTIC 50,且定位用于子例程返回指令InstrX+2的BTIC条目92。BTIC 50将用于BTIC条目92的下一指令获取地址字段的内容提供到下一获取指示符82,其经更新以指示接着将获取指令Instr3(即,跟随分支目标指令Instr2的指令),如由箭头99指示。两个处理器时钟循环之后,在处理器时钟循环8期间,BTIC 50将分支目标指令(例如,Instr2)从用于子例程返回指令InstrX+2的BTIC条目92供应到执行管线级FE3,如由箭头100指示。以此方式,消除管线泡。
在一些实施例中,管线泡减少电路12的子例程调用检测电路56(图1中所示)可操作以检测子例程调用指令Instr1。一些实施例提供用于子例程返回指令InstrX+2的BTIC条目92可建立且由管线泡减少电路12的BTIC条目建立电路58填充。一些实施例可提供由管线泡减少电路12的子例程返回检测电路60检测子例程返回指令InstrX+2。在一些实施例中,管线泡减少电路12的BTIC消耗电路62可检测用于子例程返回指令InstrX+2的BTIC命中,且可存取BTIC 50以检索BTIC条目92中的下一指令获取地址字段和分支目标指令。
如图4A和4B中所示,子例程调用指令的检测可触发创建BTIC条目,例如BTIC条目92,用于对应子例程返回指令。在其创建之后,可即刻以子例程返回指令地址“标记”BTIC条目,其可促进当遇到子例程返回指令时检索BTIC条目。举例来说,在一些实施例中子例程返回指令的检测导致搜索BTIC以确定具有子例程返回指令的地址作为标签的BTIC条目是否存在于BTIC中。
一些实施例可提供用于检索用于子例程返回地址的BTIC条目的替代机制。举例来说,在一些实施例中,BTIC可链接到链栈,例如图1的链栈28。当检测到子例程调用指令时,可如上文所描述产生用于子例程返回指令的BTIC条目。另外,链栈中用于子例程调用指令的链栈条目可经更新以指示存在用于子例程返回指令的BTIC条目。在检测到子例程返回指令之后,可即刻通过检查用于子例程调用指令的链栈条目而确定适当BTIC条目。一些实施例可提供链栈条目直接指示对应BTIC,以使得给定链栈条目始终对应于特定BTIC条目。在一些实施例中,链栈条目可通过例如包含指向对应BTIC条目的指针而间接地指示对应BTIC条目。图5是说明由图1的管线泡减少电路12进行以参考图1和2建立用于子例程返回指令的BTIC条目以减少管线泡的发生的示范性操作的流程图。在此实例中的过程以管线泡减少电路12确定执行管线20中是否已检测到子例程调用指令(框102)开始。如上所述,一些实施例可提供在分支指令经解码之前无法检测例如子例程调用指令等分支指令。因此,在一些实施例中,管线泡减少电路12可与例如执行管线级FE2等执行管线级通信,以便检测子例程调用指令。
如果在框102处未检测到子例程调用指令,那么指令的处理在框104处继续。然而,如果在执行管线20中检测到子例程调用指令,那么管线泡减少电路12已识别建立用于对应于所检测子例程调用指令的子例程返回指令的BTIC条目的机会。应注意在识别出子例程调用指令时,已获取或正获取按顺序在子例程调用指令之后的至少一个顺序指令。因为用于子例程的子例程返回指令在子例程执行之后将把程序控制转移回到所述至少一个顺序指令,所以所述至少一个顺序指令可作为用于子例程返回指令的分支目标指令而经高速缓冲存储。因此,管线泡减少电路12将按顺序在子例程调用指令之后获取的所述至少一个顺序指令作为分支目标指令写入在用于子例程返回指令的BTIC条目中(框106)。在一些实施例中,所述至少一个顺序指令作为分支目标指令由BTIC条目建立电路写入在BTIC条目中,所述BTIC条目建立电路例如管线泡减少电路12的BTIC条目建立电路58。
接着,管线泡减少电路12计算下一指令获取地址(框108)。下一指令获取地址指示在作为用于子例程返回指令的分支目标指令而存储的所述至少一个顺序指令之后将获取且执行的下一指令的位置。在一些实施例中,用于计算下一指令获取地址的操作可取决于所述至少一个顺序指令内的分支指令的存在或不存在。作为非限制性实例,如果所述至少一个顺序指令仅包含非分支指令,那么管线泡减少电路12可通过计算跟随所述至少一个顺序指令中的最后一者的指令的地址而计算下一指令获取地址。这可例如通过将所述至少一个顺序指令中的第一者的指令地址与等于所述至少一个顺序指令的字节大小的偏移进行求和来实现。作为另一非限制性实例,如果所述至少一个顺序指令中的最后一者是分支指令,那么管线泡减少电路12可通过计算分支指令的目标指令的地址而计算下一指令获取地址。作为额外非限制性实例,如果在所述至少一个顺序指令中的最后一者之前的所述至少一个顺序指令中的一或多者是分支指令,且所述分支指令的目标指令是非分支指令,那么管线泡减少电路12可通过计算跟随所述分支指令的目标指令的指令的地址而计算下一指令获取地址。
在计算下一指令获取地址之后,管线泡减少电路12将下一指令获取地址写入到用于子例程返回指令的BTIC条目中的下一指令获取地址字段中(框110)。用于子例程返回指令的BTIC条目随后可用于消除原本可能在遇到子例程返回指令之后传播通过执行管线的管线泡。处理随后在框104处继续。
图6是说明由图1的管线泡减少电路12进行以响应于检测到子例程返回指令而消耗用于子例程返回指令的BTIC条目的示范性操作的流程图。管线泡减少电路12首先确定执行管线20中是否已检测到子例程返回指令(框112)。一些实施例可提供在分支指令经解码之前无法检测例如子例程返回指令等分支指令。因此,在一些实施例中,管线泡减少电路12可与例如执行管线级FE2等执行管线级通信,以便检测子例程返回指令。
如果未检测到子例程返回指令,那么指令的处理在框114处继续。如果检测到子例程返回指令,那么管线泡减少电路12检测用于子例程返回指令的BTIC命中(框113)。管线泡减少电路12随后消耗用于子例程返回指令的BTIC条目(框116)。在一些实施例中,消耗用于子例程返回指令的BTIC条目通过将下一指令获取地址和分支目标指令提供到执行管线而消除与子例程返回指令相关联的管线泡。处理随后在框114处继续。
图7A和7B中展示由图1的管线泡减少电路12进行以建立和消耗BTIC条目以减少管线泡的发生的更详细示范性操作。图7A是详述与建立BTIC条目以减少管线泡的发生有关的示范性操作的流程图,而图7B是展示用于消耗用于子例程返回指令的BTIC条目以消除执行管线中的管线泡的示范性操作的流程图。
在图7A中,管线泡减少电路12确定执行管线20中是否已检测到子例程调用指令(框117)。示范性子例程调用指令可包含分支和链接(BL)指令,其将子例程调用指令的返回地址放置到链接寄存器36中,且将程序计数器34设定于子例程的指令地址。在一些实施例中,管线泡减少电路12可检测执行管线20的解码级(例如解码级FE2)中的子例程调用指令。
如果在框117处未检测到子例程调用指令,那么处理在图7B的框118处继续。如果管线泡减少电路12检测到子例程调用指令,那么进行用于建立BTIC条目的操作。在一些实施例中,可在与BTIC自身分开的缓冲器中建立BTIC条目,且随后复制到BTIC中。或者,一些实施例可提供通过直接写入到BTIC中而建立BTIC条目。在后一种情况下,可首先清除对应于BTIC条目的有效性指示符,以指示BTIC条目尚未有效供消耗(框119)。应理解,在采用用于建立BTIC条目的单独缓冲器的实施例中,框119的操作可能不是必要的。
接着,将按顺序在子例程调用指令之后获取的至少一个顺序指令作为分支目标指令写入在用于子例程返回指令的BTIC条目中(框120)。在一些实施例中,子例程返回指令是指示从由子例程调用指令调用的子例程的返回的分支指令。一些实施例可提供BTIC条目专用于子例程返回指令。在一些实施例中BTIC条目可对应于存储子例程调用指令的返回地址的链栈28中的链栈条目。在一些实施例中,所述至少一个顺序指令作为分支目标指令由BTIC条目建立电路写入在BTIC条目中,所述BTIC条目建立电路例如管线泡减少电路12的BTIC条目建立电路58。
管线泡减少电路12随后计算下一指令获取地址(框122)。下一指令获取地址指示在作为用于子例程返回指令的分支目标指令而存储的所述至少一个顺序指令之后将获取且执行的下一指令的位置。在一些实施例中,用于计算下一指令获取地址的操作可取决于所述至少一个顺序指令内的分支指令的存在或不存在。作为非限制性实例,如果所述至少一个顺序指令仅包含非分支指令,那么管线泡减少电路12可通过计算跟随所述至少一个顺序指令中的最后一者的指令的地址而计算下一指令获取地址。这可例如通过将所述至少一个顺序指令中的第一者的指令地址与等于所述至少一个顺序指令的字节大小的偏移进行求和来实现。作为另一非限制性实例,如果所述至少一个顺序指令中的最后一者是分支指令,那么管线泡减少电路12可通过计算分支指令的目标指令的地址而计算下一指令获取地址。作为额外非限制性实例,如果在所述至少一个顺序指令中的最后一者之前的所述至少一个顺序指令中的一或多者是分支指令,且所述分支指令的目标指令是非分支指令,那么管线泡减少电路12可通过计算跟随所述分支指令的目标指令的指令的地址而计算下一指令获取地址。
随后将下一指令获取地址写入到用于子例程返回指令的BTIC条目中的下一指令获取地址字段中(框124)。在一些实施例中,由例如管线泡减少电路12的BTIC条目建立电路58等BTIC条目建立电路将下一指令获取地址写入到BTIC条目中的下一指令获取地址字段中。管线泡减少电路12设定对应于BTIC条目的有效性指示符以指示BTIC条目有效供消耗(框126)。处理随后在图7B的框118处继续。
现参看图7B,管线泡减少电路12确定执行管线20中是否已检测到子例程返回指令(框118)。示范性子例程返回指令可包含分支和链接(BLR)指令,用于将程序计数器34设定于子例程调用指令的返回地址。一些实施例可提供管线泡减少电路12检测执行管线20的解码级(例如解码级FE2 40)中的子例程返回指令。如果未检测到子例程返回指令,那么处理在下文更详细地论述的图7A的框117处继续。如果管线泡减少电路12检测到子例程返回指令,那么管线泡减少电路12接着确定是否检测到用于子例程返回指令的BTIC命中(即,用于BTIC中的子例程返回指令的有效BTIC条目)(框130)。在一些实施例中,检测用于子例程返回指令的BTIC命中可包含评估对应于所述BTIC条目的有效性位以确定所述BTIC条目是否有效。如果针对BTIC中的子例程返回指令未检测BTIC命中,那么处理在图7A的框117处继续。
如果检测到BTIC命中,那么管线泡减少电路12将下一指令获取地址从用于子例程返回指令的BTIC条目的下一指令获取地址字段提供到执行管线20的获取级,例如顺序获取级FE1(框134)。管线泡减少电路12接着将作为用于子例程返回地址的BTIC条目中的分支目标指令存储的所述至少一个顺序指令提供到执行管线20的后续级,例如FE2级40(框136)。以此方式,在一些实施例中管线泡减少电路12可将所述至少一个顺序指令填充到执行管线中以消除与子例程返回指令相关联的管线泡。处理在图7A的框117处继续。
根据本文中所揭示的实施例的管线泡减少电路12可提供于或集成于任何基于处理器的装置中。实例包含(但不限于)机顶盒、娱乐单元、导航装置、通信装置、固定位置数据单元、移动位置数据单元、移动电话、蜂窝式电话、计算机、便携式计算机、桌上型计算机、个人数字助理(PDA)、监视器、计算机监视器、电视机、调谐器、无线电、卫星无线电、音乐播放器、数字音乐播放器、便携式音乐播放器、数字视频播放器、视频播放器、数字影音光盘(DVD)播放器及便携型数字视频播放器。
在此方面,图8说明可采用图1中说明的管线泡减少电路(PBRC)12的基于处理器的系统138的实例。在此实例中,基于处理器的系统138包含一或多个CPU 140。CPU 140可包含一或多个处理器10,且可具有高速缓冲存储器142,其耦合到处理器10用于对临时存储数据的快速存取。处理器10可包括管线泡减少电路12。CPU 140耦合到系统总线144且可使基于处理器的系统138中包含的主装置和从属装置互耦合。众所周知,CPU 140通过经由系统总线144交换地址、控制和数据信息与这些其它装置通信。举例来说,CPU 140可将总线事务请求传送到存储器控制器146(作为从属装置的实例)。尽管图8中未说明,但可提供多个系统总线144。
其它主装置和从属装置可连接到系统总线144。如图8中所示,作为实例,这些装置可包含存储器系统148、一或多个输入装置150、一或多个输出装置152、一或多个网络接口装置154,和一或多个显示器控制器156。输入装置150可包含任何类型的输入装置,包含但不限于输入键、开关、话音处理器,等。输出装置152可包含任何类型的输出装置,包含但不限于音频、视频、其它视觉指示器,等等。网络接口装置154可为经配置以允许数据与网络158间的交换的任何装置。网络158可为任何类型的网络,包含但不限于有线或无线网络、私人或公共网络、局域网(LAN)、广域网(WLAN)和因特网。网络接口装置154可经配置以支持所需的任何类型的通信协议。存储器系统148可包含一或多个存储器单元160(0-N)。
CPU 140还可经配置以经由系统总线144存取显示器控制器156以控制发送到一或多个显示器162的信息。显示器控制器156将信息发送到显示器162以待经由一或多个视频处理器164显示,所述视频处理器将待显示的信息处理成适合于显示器162的格式。显示器162可包含任何类型的显示器,包含但不限于阴极射线管(CRT)、液晶显示器(LCD)、等离子显示器,等。
所属领域的技术人员将进一步了解,结合本文所揭示的实施例描述的多种说明性逻辑块、模块、电路和算法可以实施为电子硬件、存储在存储器或另一计算机可读媒体中且通过处理器或其它处理装置执行的指令或两者的组合。作为实例,本文所描述的主装置及从属装置可用于任何电路、硬件组件、集成电路(IC)、IC芯片或半导体裸片中。本文所揭示的存储器可为任何类型及大小的存储器,且可经配置以存储所要的任何类型的信息。为清楚说明这个可互换性,上文已大体上关于其功能性而描述了各种说明性组件、块、模块、电路及步骤。如何实施此功能性取决于特定应用、设计选项和/或强加于整个系统的设计约束。所属领域的技术人员可针对每一特定应用以不同方式实施所描述的功能性,但此类实施决策不应被解译为引起对本发明的范围的偏离。
因而,结合本文所揭示的实施例描述的各种说明性逻辑块、模块和电路可以用处理器、DSP、专用集成电路(ASIC)、FPGA或经设计以执行本文所述的功能的其它可编程逻辑装置、离散门或晶体管逻辑、离散硬件组件或其任何组合来实施或执行。处理器可为微处理器,但在替代方案中,处理器可为任何常规处理器、控制器、微控制器或状态机。处理器还可实施为计算装置的组合,例如,DSP与微处理器的组合、多个微处理器、结合DSP核心的一个或一个以上微处理器,或任何其它此类配置。
本文所揭示的实施例可以体现在硬件及存储在硬件中的指令中,并且可以(例如)驻留在随机存取存储器(RAM)、快闪存储器、只读存储器(ROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、寄存器、硬盘、可装卸式磁盘、CD-ROM或所属领域中已知的任何其它形式的计算机可读媒体中。示范性存储媒体耦合到处理器,使得处理器可从存储媒体读取信息和将信息写入到存储媒体。在替代方案中,存储媒体可与处理器成一体式。处理器及存储媒体可驻留在ASIC中。ASIC可以驻留在远程站中。在替代方案中,处理器及存储媒体可作为离散组件驻留在远程站、基站或服务器中。
还应注意,描述本文中的示范性实施例中的任一者中描述的操作步骤是为了提供实例和论述。可以用除了所说明的序列之外的大量不同序列执行所描述的操作。另外,在单个操作步骤中描述的操作实际上可以在多个不同步骤中执行。另外,可组合示范性实施例中所论述的一或多个操作步骤。应理解,如所属领域的技术人员将容易显而易见,流程图中所说明的操作步骤可以经受众多不同修改。所属领域的技术人员还将理解,可使用各种不同技术和技法中的任一者来表示信息和信号。举例来说,可通过电压、电流、电磁波、磁场或磁粒子、光场或光粒子或其任何组合来表示可能贯穿上述描述提及的数据、指令、命令、信息、信号、位、符号及码片。
本发明的先前描述经提供以使所属领域的技术人员能够制造或使用本发明。所属领域的技术人员将容易显而易见对本发明的各种修改,且本文中界定的一般原理可应用于其它变化而不脱离本发明的精神或范围。因此,本发明并不希望限于本文中所描述的实例及设计,而应被赋予与本文中所揭示的原理及新颖特征相一致的最广范围。
Claims (25)
1.一种建立用于执行管线中的子例程返回指令的分支目标指令高速缓冲存储器BTIC条目以减少管线泡的发生的方法,其包括:
检测执行管线中的子例程调用指令;以及
响应于检测到所述子例程调用指令,通过以下操作建立用于子例程返回指令的BTIC条目:
将按顺序在所述子例程调用指令之后获取的至少一个顺序指令作为用于所述子例程返回指令的所述BTIC条目中的分支目标指令进行写入;
计算对应于所述执行管线中跟随所述分支目标指令的下一指令的地址的下一指令获取地址;以及
将所述下一指令获取地址写入到用于所述子例程返回指令的所述BTIC条目中的下一指令获取地址字段中。
2.根据权利要求1所述的方法,其中所述子例程返回指令指示从由所述子例程调用指令调用的子例程的返回。
3.根据权利要求1所述的方法,其中所述至少一个顺序指令是非分支指令;且
其中计算所述下一指令获取地址包括计算跟随所述至少一个顺序指令中的最后一者的下一指令的地址。
4.根据权利要求1所述的方法,其中所述至少一个顺序指令中的最后一者是分支指令;且
其中计算所述下一指令获取地址包括计算所述分支指令的目标指令的地址。
5.根据权利要求1所述的方法,其中在所述至少一个顺序指令中的最后一者之前的所述至少一个顺序指令中的一或多者是分支指令;
其中所述分支指令的目标指令是非分支指令;且
其中计算所述下一指令获取地址包括计算跟随所述分支指令的所述目标指令的下一指令的地址。
6.根据权利要求1所述的方法,其中建立所述BTIC条目进一步包括设定对应于所述BTIC条目的有效性指示符以指示所述BTIC条目是有效的。
7.根据权利要求1所述的方法,其中检测所述子例程调用指令包括在所述执行管线中的解码级中检测所述子例程调用指令。
8.根据权利要求1所述的方法,其进一步包括:
检测所述执行管线中的所述子例程返回指令;以及
响应于检测到所述子例程返回指令:
检测用于所述子例程返回指令的BTIC命中;以及
将所述下一指令获取地址从用于所述子例程返回指令的所述BTIC条目中的所述下一指令获取地址字段提供到所述执行管线的获取级;以及
将所述至少一个顺序指令从用于所述子例程返回指令的所述BTIC条目提供到所述执行管线的跟随所述获取级的后续级。
9.根据权利要求8所述的方法,其中检测用于所述子例程返回指令的所述BTIC命中包括基于对应于用于所述子例程返回指令的所述BTIC条目的有效性指示符确定用于所述子例程返回指令的所述BTIC条目是有效的。
10.根据权利要求8所述的方法,其中检测所述子例程返回指令包括在所述执行管线中的解码级中检测所述子例程返回指令。
11.根据权利要求1所述的方法,其中所述下一指令获取地址包括紧跟所述至少一个顺序指令中的最后一者的下一指令的地址。
12.根据权利要求1所述的方法,其中用于所述子例程返回指令的所述BTIC条目对应于存储所述子例程调用指令的返回地址的链栈条目。
13.根据权利要求1所述的方法,其中所述子例程调用指令包括分支和链接BL指令,所述BL指令操作以将所述子例程调用指令的返回地址放置到链接寄存器LR中且将程序计数器设定于子例程的指令地址。
14.根据权利要求1所述的方法,其中所述子例程返回指令包括用于将程序计数器设定于所述子例程调用指令的返回地址的分支和链接BLR指令。
15.一种管线泡减少电路,其包括:
子例程调用检测电路,其经配置以检测执行管线中的子例程调用指令;以及
分支目标指令高速缓冲存储器BTIC条目建立电路,其经配置以响应于所述子例程调用检测电路检测到所述子例程调用指令而:
将按顺序在所述子例程调用指令之后获取的至少一个顺序指令作为用于子例程返回指令的BTIC条目中的分支目标指令进行写入;
计算对应于所述执行管线中跟随所述分支目标指令的下一指令的地址的下一指令获取地址;以及
将所述下一指令获取地址写入到用于所述子例程返回指令的所述BTIC条目中的下一指令获取地址字段中。
16.根据权利要求15所述的管线泡减少电路,其包括所述BTIC条目建立电路进一步经配置以响应于所述子例程调用检测电路检测到所述子例程调用指令而设定对应于所述BTIC条目的有效性指示符以指示所述BTIC条目是有效的。
17.根据权利要求15所述的管线泡减少电路,其进一步包括:
子例程返回检测电路,其经配置以检测所述执行管线中的所述子例程返回指令;以及
BTIC消耗电路,其经配置以:
将所述下一指令获取地址从用于所述子例程返回指令的所述BTIC条目中的所述下一指令获取地址字段提供到所述执行管线的获取级;以及
将所述至少一个顺序指令从用于所述子例程返回指令的所述BTIC条目提供到所述执行管线的跟随所述获取级的后续级。
18.根据权利要求17所述的管线泡减少电路,其包括所述子例程返回检测电路经配置以基于对应于用于所述子例程返回指令的所述BTIC条目的有效性指示符确定用于所述子例程返回指令的所述BTIC条目是有效的。
19.根据权利要求15所述的管线泡减少电路,其集成到半导体裸片中。
20.根据权利要求15所述的管线泡减少电路,其中所述管线泡减少电路被集成到选自由以下各者组成的群组的装置:娱乐单元、导航装置、通信装置、固定位置数据单元、移动位置数据单元、计算机、个人数字助理PDA、监视器及调谐器。
21.一种管线泡减少电路,其包括:
用于检测执行管线中的子例程调用指令的装置;以及
用于响应于检测到所述子例程调用指令而建立用于子例程返回指令的分支目标指令高速缓冲存储器BTIC条目的装置,其包括:
用于将按顺序在所述子例程调用指令之后获取的至少一个顺序指令作为用于所述子例程返回指令的所述BTIC条目中的分支目标指令进行写入的装置;
用于计算对应于所述执行管线中跟随所述分支目标指令的下一指令的地址的下一指令获取地址的装置;以及
用于将所述下一指令获取地址写入到用于所述子例程返回指令的所述BTIC条目中的下一指令获取地址字段中的装置。
22.一种非暂时性计算机可读媒体,其具有存储于其上的计算机可执行指令以致使处理器:
检测执行管线中的子例程调用指令;以及
响应于检测到所述子例程调用指令,通过以下操作建立用于子例程返回指令的分支目标指令高速缓冲存储器BTIC条目:
将按顺序在所述子例程调用指令之后获取的至少一个顺序指令作为用于所述子例程返回指令的所述BTIC条目中的分支目标指令进行写入;
计算对应于所述执行管线中跟随所述分支目标指令的下一指令的地址的下一指令获取地址;以及
将所述下一指令获取地址写入到用于所述子例程返回指令的所述BTIC条目中的下一指令获取地址字段中。
23.根据权利要求22所述的非暂时性计算机可读媒体,其具有存储于其上的进一步计算机可执行指令以致使所述处理器通过设定对应于所述BTIC条目的有效性指示符以指示所述BTIC条目是有效的来建立所述BTIC条目。
24.根据权利要求22所述的非暂时性计算机可读媒体,其具有存储于其上的进一步计算机可执行指令以致使所述处理器:
检测所述执行管线中的所述子例程返回指令;以及
响应于检测到所述子例程返回指令:
将所述下一指令获取地址从用于所述子例程返回指令的所述BTIC条目中的所述下一指令获取地址字段提供到所述执行管线的获取级;以及
将所述至少一个顺序指令从用于所述子例程返回指令的所述BTIC条目提供到所述执行管线的跟随所述获取级的后续级。
25.根据权利要求24所述的非暂时性计算机可读媒体,其具有存储于其上的进一步计算机可执行指令以致使所述处理器通过基于对应于用于所述子例程返回指令的所述BTIC条目的有效性指示符确定用于所述子例程返回指令的所述BTIC条目是有效的来检测所述子例程返回指令。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261730717P | 2012-11-28 | 2012-11-28 | |
US61/730,717 | 2012-11-28 | ||
US13/792,335 | 2013-03-11 | ||
US13/792,335 US9317293B2 (en) | 2012-11-28 | 2013-03-11 | Establishing a branch target instruction cache (BTIC) entry for subroutine returns to reduce execution pipeline bubbles, and related systems, methods, and computer-readable media |
PCT/US2013/072372 WO2014085683A1 (en) | 2012-11-28 | 2013-11-27 | Establishing a branch target instruction cache (btic) entry for subroutine returns to reduce execution pipeline bubbles, and related systems, methods, and computer-readable media |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104854556A CN104854556A (zh) | 2015-08-19 |
CN104854556B true CN104854556B (zh) | 2017-11-10 |
Family
ID=50774370
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380061574.3A Active CN104854556B (zh) | 2012-11-28 | 2013-11-27 | 建立分支目标指令高速缓冲存储器条目的方法和系统 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9317293B2 (zh) |
EP (1) | EP2926240A1 (zh) |
JP (1) | JP6271572B2 (zh) |
CN (1) | CN104854556B (zh) |
WO (1) | WO2014085683A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170083333A1 (en) * | 2015-09-21 | 2017-03-23 | Qualcomm Incorporated | Branch target instruction cache (btic) to store a conditional branch instruction |
GB2542831B (en) * | 2015-09-30 | 2018-05-30 | Imagination Tech Ltd | Fetch unit for predicting target for subroutine return instructions |
US11099849B2 (en) * | 2016-09-01 | 2021-08-24 | Oracle International Corporation | Method for reducing fetch cycles for return-type instructions |
US11481221B2 (en) * | 2018-05-02 | 2022-10-25 | Micron Technology, Inc. | Separate branch target buffers for different levels of calls |
US11880231B2 (en) * | 2020-12-14 | 2024-01-23 | Microsoft Technology Licensing, Llc | Accurate timestamp or derived counter value generation on a complex CPU |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5604877A (en) * | 1994-01-04 | 1997-02-18 | Intel Corporation | Method and apparatus for resolving return from subroutine instructions in a computer processor |
US5850543A (en) * | 1996-10-30 | 1998-12-15 | Texas Instruments Incorporated | Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return |
CN1549113A (zh) * | 2003-01-14 | 2004-11-24 | 智权第一公司 | 将加载管线式微处理器指令队列的指令删除的设备及方法 |
CN102483696A (zh) * | 2009-08-19 | 2012-05-30 | 高通股份有限公司 | 用以预测有条件非分支指令的不执行的方法和设备 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US5230068A (en) | 1990-02-26 | 1993-07-20 | Nexgen Microsystems | Cache memory system for dynamically altering single cache memory line as either branch target entry or pre-fetch instruction queue based upon instruction sequence |
US5276882A (en) * | 1990-07-27 | 1994-01-04 | International Business Machines Corp. | Subroutine return through branch history table |
US5623614A (en) | 1993-09-17 | 1997-04-22 | Advanced Micro Devices, Inc. | Branch prediction cache with multiple entries for returns having multiple callers |
US5561782A (en) | 1994-06-30 | 1996-10-01 | Intel Corporation | Pipelined cache system having low effective latency for nonsequential accesses |
US6279106B1 (en) | 1998-09-21 | 2001-08-21 | Advanced Micro Devices, Inc. | Method for reducing branch target storage by calculating direct branch targets on the fly |
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 |
US6289444B1 (en) * | 1999-06-02 | 2001-09-11 | International Business Machines Corporation | Method and apparatus for subroutine call-return prediction |
US6823444B1 (en) | 2001-07-03 | 2004-11-23 | Ip-First, Llc | Apparatus and method for selectively accessing disparate instruction buffer stages based on branch target address cache hit and instruction stage wrap |
JP4247132B2 (ja) | 2004-01-29 | 2009-04-02 | 株式会社ルネサステクノロジ | 情報処理装置 |
WO2006112190A1 (ja) | 2005-04-08 | 2006-10-26 | Matsushita Electric Industrial Co., Ltd. | プロセッサ |
US7447883B2 (en) | 2006-08-10 | 2008-11-04 | Arm Limited | Allocation of branch target cache resources in dependence upon program instructions within an instruction queue |
JP2008299795A (ja) | 2007-06-04 | 2008-12-11 | Nec Electronics Corp | 分岐予測制御装置及びその方法 |
US7882338B2 (en) | 2008-02-20 | 2011-02-01 | International Business Machines Corporation | Method, system and computer program product for an implicit predicted return from a predicted subroutine |
-
2013
- 2013-03-11 US US13/792,335 patent/US9317293B2/en not_active Expired - Fee Related
- 2013-11-27 CN CN201380061574.3A patent/CN104854556B/zh active Active
- 2013-11-27 JP JP2015544210A patent/JP6271572B2/ja not_active Expired - Fee Related
- 2013-11-27 WO PCT/US2013/072372 patent/WO2014085683A1/en active Application Filing
- 2013-11-27 EP EP13803413.7A patent/EP2926240A1/en not_active Ceased
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5604877A (en) * | 1994-01-04 | 1997-02-18 | Intel Corporation | Method and apparatus for resolving return from subroutine instructions in a computer processor |
US5850543A (en) * | 1996-10-30 | 1998-12-15 | Texas Instruments Incorporated | Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return |
CN1549113A (zh) * | 2003-01-14 | 2004-11-24 | 智权第一公司 | 将加载管线式微处理器指令队列的指令删除的设备及方法 |
CN102483696A (zh) * | 2009-08-19 | 2012-05-30 | 高通股份有限公司 | 用以预测有条件非分支指令的不执行的方法和设备 |
Also Published As
Publication number | Publication date |
---|---|
US20140149726A1 (en) | 2014-05-29 |
JP6271572B2 (ja) | 2018-01-31 |
US9317293B2 (en) | 2016-04-19 |
WO2014085683A1 (en) | 2014-06-05 |
JP2015535634A (ja) | 2015-12-14 |
EP2926240A1 (en) | 2015-10-07 |
CN104854556A (zh) | 2015-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104854556B (zh) | 建立分支目标指令高速缓冲存储器条目的方法和系统 | |
CN102483696B (zh) | 用以预测有条件非分支指令的不执行的方法和设备 | |
US10255074B2 (en) | Selective flushing of instructions in an instruction pipeline in a processor back to an execution-resolved target address, in response to a precise interrupt | |
CN103119537B (zh) | 用于通过使指令拾取单元掉电来降低处理器中的功耗的方法和装置 | |
US20160055003A1 (en) | Branch prediction using least-recently-used (lru)-class linked list branch predictors, and related circuits, methods, and computer-readable media | |
TW201737068A (zh) | 在基於處理器系統中基於負載路徑歷史使用位址預測表以提供負載位址預測 | |
US9830152B2 (en) | Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor | |
US9851979B2 (en) | Split-level history buffer in a computer processing unit | |
CN101901133B (zh) | 信息处理设备和分支预测方法 | |
CN107368450A (zh) | 实现维护被拒指令的加载/存储单元的多片处理器的操作 | |
CN107077335A (zh) | 使用所预测值表来提供循环不变值预测,以及相关设备、方法和计算机可读媒体 | |
CN107111487A (zh) | 在乱序(ooo)处理器中提供早期指令执行,以及相关设备、方法和计算机可读媒体 | |
TW202111524A (zh) | 經由跳過無分歧的快取線改善分歧預測通量的設備及系統 | |
WO2018057222A1 (en) | Performing distributed branch prediction using fused processor cores in processor-based systems | |
CN106605207A (zh) | 使用文字加载预测表预测文字加载值,以及相关电路、方法和计算机可读媒体 | |
TWI701590B (zh) | 管線重組態電路、基於失序(ooo)處理器之系統及重組態一執行管線之方法 | |
CN107924310A (zh) | 使用避免转出表(pat)预测计算机处理器中的存储器指令转出 | |
CN106104466B (zh) | 在超越控制分支预测器中的推测历史转递以及相关电路、方法和计算机可读媒体 | |
CN104335167B (zh) | 用于处理计算机指令的方法和处理器 | |
US20110083030A1 (en) | Cache memory control device, cache memory device, processor, and controlling method for storage device | |
US20160291981A1 (en) | Removing invalid literal load values, and related circuits, methods, and computer-readable media | |
US20160092232A1 (en) | Propagating constant values using a computed constants table, and related apparatuses and methods |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |