CN101535951A - 用于辨识子例程调用的方法及设备 - Google Patents
用于辨识子例程调用的方法及设备 Download PDFInfo
- Publication number
- CN101535951A CN101535951A CNA2007800414772A CN200780041477A CN101535951A CN 101535951 A CN101535951 A CN 101535951A CN A2007800414772 A CNA2007800414772 A CN A2007800414772A CN 200780041477 A CN200780041477 A CN 200780041477A CN 101535951 A CN101535951 A CN 101535951A
- Authority
- CN
- China
- Prior art keywords
- program flow
- instruction
- subroutine call
- register
- unordered change
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 27
- 238000012545 processing Methods 0.000 claims description 8
- 230000015654 memory Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 5
- 238000011282 treatment Methods 0.000 description 4
- 239000000284 extract Substances 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 238000002203 pretreatment Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000008672 reprogramming Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- 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
-
- 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/46—Multiprogramming arrangements
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)
- Communication Control (AREA)
- Advance Control (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明揭示一种用于辨识子例程调用的设备。所述设备包含电路,所述电路包括:用于接收寄存器的内容的第一输入、用于接收程序流中的无序改变的第二输入,及用于接收所述程序流中的无序改变之后的下一有序地址的第三输入。所述电路经配置以将下一有序地址与所述寄存器的内容进行比较以确定所述程序流中的无序改变是否是子例程调用。
Description
技术领域
本发明大体来说涉及管线处理器领域,且更特定来说涉及一种辨识子例程调用以减小功率并增大管线处理器的利用率的方法。
背景技术
微处理器可在各种各样的应用中执行计算任务。几乎总期望改进的处理器性能,以允许通过软件改变而得到更快的操作及/或增加的功能性。在许多嵌入式应用(例如便携式电子装置)中,节约功率也是处理器设计及实施中的重要目标。
许多现代处理器采用管线架构,其中有序指令在执行中是重叠的以增大总体处理器吞吐量。通过管线维持平缓的执行有助于实现高性能。多数现代处理器还利用分级存储器,其中快速的芯片上高速缓冲存储器存储最近存取的数据及指令的本地副本。
现实世界程序包含间接分支指令,其实际转移行为直到在执行管线深处进行实际评估时才被获知。多数现代处理器采用某一形式的分支预测,由此间接分支指令的转移行为早在管线中被预测,例如在提取或解码管道级期间。通过利用分支预测技术,处理器推测性地提取间接分支指令的目标且重定向所述管线以开始处理所述经推测性地提取的指令。当在随后的管道级(例如执行管道级)中确定实际的分支目标时,如果误预测所述分支,则必须将所述推测性地提取的指令从所述管线冲洗,且从正确的目标地址中提取新的指令。响应于错误的分支目标预测来预提取指令会不利地影响处理器性能及功率消耗。
间接分支指令的一个实例包含用于从子例程返回的分支指令。例如,来自子例程的回答呼叫可包含返回地址由寄存器的内容界定的分支指令。返回地址界定子例程完成后待提取的下一指令且通常为最初从中调用子例程的分支指令之后的指令。许多高性能架构指派特定的通用寄存器来用于子例程返回中,所述通用寄存器通常称为链路寄存器。
为方便起见,还可将回答呼叫称为分支返回指令。为使处理器管线针对分支返回指令利用分支预测,常规的软件包含显式子例程调用,例如用以记录到所述链路寄存器中的返回地址的分支及链路指令。许多高性能实施方案包含在处理所述分支及链路指令的解码级处的链路堆栈结构。使链路返回值进栈到此堆栈上,以允许在对应的子例程返回时进行准确的分支预测。常规的链路堆栈结构含有一列返回地址以支持流经管线的多个子例程调用且支持多个子例程调用级的嵌套。随后,当对子例程内的分支返回指令进行解码时,返回地址从链路堆栈结构中被读取且在其它分支预测硬件指定处理器应重定向管线的情况下可用于用以预测目标地址的分支预测中。如果所预测的结果指示重定向管线,则管线开始从自链路堆栈结构读取的返回地址提取指令。
然而,存在许多在调用子例程时不产生且不并入常规的分支及链路指令的编译器及遗旧代码。因此,在所述情况下不利用链路堆栈结构,从而导致链路堆栈结构的整体性遭到损害。例如,返回地址从链路堆栈结构的常规出栈可不与首先激发返回地址的出栈的返回指令相关。受损害的链路堆栈结构的一个影响包含对返回指令的误预测增加。此外,在其中子例程调用在程序段中未被辨识的情况下,问题更为严重,因为在随后的不可辨识的子例程调用时可能不利用分支预测硬件来填充链路堆栈结构。以实例方式,参照下表,其中含有将在ARM有限公司兼容处理器上运行的代码段:
表1 代码段。
表1中的代码段的程序流包含在地址0x00899808处开始以有序次序处理指令且一直到地址0x00899814。在地址0x00899814处,分支指令改变程序流以使得所处理的下一指令位于地址0x00990000处(例程的开始)。
设置链路寄存器(即LDR LR,0x00899818)与分支指令(即BR)的组合使处理器准备用于随后到子例程的分支。在此实例中,对其做出调用的实际子例程开始于地址0x00990000处且结束于地址0x0099000C处。所述LDR LR,0x00899818指令指示地址0x00899818应被复制到链路寄存器(LR)中,从而致使将返回地址(地址0x00899818)储存到所述链路寄存器中。在子例程结束时,从链路寄存器中检索返回地址。更特定来说,当执行BX LR(分支返回指令)时检索返回地址。暗示子例程调用的其它代码段存在且包含修改链路寄存器的指令,例如指令MOV LR、PC BR[A]的有序组合,其中[A]是例程开始的地址。
发明内容
本发明认识到可产生具有对应于子例程调用的两个或两个以上指令的代码段的此遗旧软件、编译器的普遍性,及且当调用子例程时利用常规分支及链路指令的重写遗旧软件中所包含的成本。此外,本发明认识到,需要现今研发的用以辨识暗示子例程调用的指令序列的微处理器以利用链路堆栈结构且在分支返回指令时有效地预测返回地址。
根据一个实施例,提供一种辨识子例程调用的方法。所述方法包含:检测程序流中的无序改变;检索已检测的程序流中的无序改变之后的下一有序地址;及将所述下一有序地址与寄存器的内容进行比较以确定所述无序改变是否是子例程调用。
另一实施例涉及一种用于辨识子例程调用的设备。所述设备包含具有三个输入的电路。第一输入经配置以接收寄存器的内容。第二输入经配置以接收程序流中的无序改变。第三输入经配置以接收程序流中的无序改变之后的下一有序地址。所述电路经配置以将下一有序地址与所述寄存器的内容进行比较以确定程序流中的无序改变是否是子例程调用。
根据又一实施例,揭示另一设备。所述设备包括用于处理指令的处理器管线及耦合到所述处理器管线的电路。所述电路经配置以接收寄存器的内容、程序流中的无序改变的指示及所述程序流中的无序改变的指示之后的下一有序地址。所述电路还经配置以将链路寄存器的内容与下一有序地址进行比较以确定所述程序流中的无序改变的指示是否是子例程调用。
应了解,依据以下详细说明,本发明的其它实施例对所属领域的技术人员将变得显而易见,其中本发明的各种实施例均以图解说明的方式加以显示及描述。应认识到,本发明容许其它及不同实施例,且能够在各种其它方面修改本发明的数个细节,此均不背离本发明。因此,应将本文的图示及实施方式视为具图解说明性质而非限制性质。
附图说明
图1是处理器的功能性方块图。
图2是在通过图1中所图解说明的管线的例示性指令流之后的时序图。
图3是分支目标地址高速缓冲存储器(BTAC)的例示性部分。
图4A及4B(统称为图4)是图1中所图解说明的IsCall逻辑电路的例示性实施例。
图5是图解说明一种辨识子例程调用的方法的流程图。
具体实施方式
图1描绘其中可采用本发明各方面的处理器100的功能性方块图。处理器100包含用于高速缓存最近处理的指令的指令高速缓冲存储器(1-高速缓冲存储器)110及用于在I-高速缓冲存储器110中找不到指令时存取存储器138的存储器接口136。存储器138可位于处理器100上或处理器100之外,且可包括层2(L2)存储器组件。
处理器100还包含用于处理指令的指令管线105及用于预测间接分支指令的目标地址且预测是否将重定向指令管线105以处理所述目标地址的分支预测电路132。如果分支预测电路132预测将重定向指令管线105,则所述间接分支指令称为已被“预测采用”。如果所述间接分支指令已被“预测采用”,则分支预测电路132预测间接分支指令的目标地址且重定向指令管线105以在所述目标地址处开始提取指令。
处理器100根据控制逻辑电路122在指令管线105中处理指令。在某些实施例中,管线105可以是具有两个或两个以上并行管线的超标量设计。管线105包含各种管道级:指令提取单元(IFU)级102、解码(DCD)级106、指令队列(IQ)级108、寄存器存取(RACC)级112及执行级(EXE)120。在某些实施例中,管道级一次可处理单个指令。在另一实施例中,管道级一次可同时处理两个或两个以上指令。应注意,可在不限定本发明的范围的情况下向管线105添加或从管线105中减去管道级。处理器100还包含通用寄存器(GPR)堆118,所述通用寄存器堆包含管道级112及120可通过微架构惯例进行存取的寄存器。
指令提取单元(IFU)级102试图从I-高速缓冲存储器110中检索指令。如果I-高速缓冲存储器110中未找到指令地址,则指令提取单元(IFU)级102起始从存储器138中检索对应的指令的请求。解码级106对指令进行完全解码。此外,除了在解码级处执行的常规功能之外,解码级106还辨识常规子例程调用指令,例如ARM公司的分支及链路指令,且将返回地址写入到链路堆栈结构134中。链路堆栈结构134可以是作为循环缓冲器来管理的一组寄存器。所述返回地址是管线105在子例程完成时将重定向到的指令的地址。依据间接分支指令,解码级106可调用分支预测电路132以确定是否开始从所述分支指令的推测性目标提取到管线105的指令。
指令队列级108缓冲一个或一个以上指令以允许推测性提取在执行管线的拖延(如果有)期间继续进行。寄存器存取级112从通用寄存器118中检索指令可能需要的一个或一个以上操作数。执行级(EXE)120包含例如算术逻辑单元等的已知组件以执行指令。将从执行级120产生的结果写入到GPR堆118。在执行级120期间,发生实际的分支解决方案以确定在解码级106期间做出的分支预测是否正确。如果实际的分支解决方案与所预测的目的地不同,则称分支已被误预测。
执行级120还调用IsCall逻辑电路114以确定分支指令是否对应于隐式子例程调用。IsCall逻辑电路114将此结果记录在分支预测(BP)电路132中以使得分支指令的随后执行在早先的管道级期间(例如IFU 102的DCD 106)被解译为隐式子例程调用。在一个实施例中,所记录的结果是存储在BP电路132中且与分支指令相关联的旗标。如果分支指令是隐式子例程调用,则IsCall逻辑电路114用分支指令之后的指令的地址来更新链路堆栈结构134。将结合图4的论述更详细地描述IsCall逻辑电路114。
虽然图1描绘耦合到IsCall逻辑电路114的执行级(EXE)120,但IsCall逻辑电路114可替代地耦合到管线105中早先的级。在替代实施例中,解码级(DCD)106可耦合到IsCall逻辑电路114。在此实施例中,一旦解码级(DCD)106确定BR指令已被解码,其即调用IsCall逻辑电路114。
所属领域的技术人员将认识到,处理器100的诸多变化形式也是可能的。例如,处理器100可包含I-高速缓冲存储器110的第二级(L2)高速缓冲存储器。另外,可从特定实施例中省去处理器100中所描绘的一个或一个以上功能块。可驻留在处理器100中的其它功能块(例如转换后备缓冲器、数据高速缓冲存储器等等)与本发明的说明没有密切关系,且为清晰起见将其省去。
图2是在通过图1中所图解说明的管线105的指令流之后的时序图200。特定来说,时序图200中跟踪的指令流是如表1中所图解说明的代码段。出于本发明的目的,术语“隐式子例程调用”是指两个或两个以上指令的组合,其组合的功能是设置准备用于子例程调用的寄存器且调用子例程。例如,参照表1,LDR LR,0x0089908及BR0x00990000两个指令界定隐式子例程调用。在此情况下,LDR指令界定所述隐式子例程调用的开始且BR指令界定所述隐式子例程调用的结束。
时序图200的列210A-210E对应于管线105的各级。行1-11对应于有序定时循环。出于解释的目的,每一管道级每循环处理一个指令。然而,所属领域的技术人员应认识到,本发明的教示既适用于多个循环管道级也适用于每循环能够处理多个指令的管道级。
时序图200的列210F对应于名称为IsCallFlag的旗标的内容,所述旗标指示间接分支指令是否导致子例程调用。列210G对应于链路寄存器(LR)的内容。列210H对应于链路堆栈结构(例如作为IsCall逻辑电路114的结果的链路堆栈结构134)的内容。
一般来说,指令进入IFU级210A且在下一循环中传播到下一级。在循环1中,LDR LR,0x00899818指令在IFU级210A中。从IFU管道级210A中依序提取指令ADD、SUB、BR及类属指令、INSTRA。在循环5中,在时间点215处,解码级210B对BR指令进行解码且调用分支预测,例如分支预测电路132。分支预测预测将采取BR指令,且因此重定向管线105以依序提取子例程指令ADD、SUB、MOV及BX。所述子例程包括以ADD指令开始且以BX指令结束的所有指令,如表1中所示。在重定向管线105之前,由于INSTRA在分支预测之前被提取,因此将其从管线105中冲洗。BR指令之后的空白循环描绘INSTRA指令如果没被冲洗则在管线105中将采取的位置。
LDR指令从循环1-5通过管道级210B-210E传播。在循环5中,在时间点205处,执行级210E执行LDR指令以将返回地址0x00899818加载到链路寄存器(LR)中。在时间点220处,返回地址(RA)0x00899818在链路寄存器中可用。返回地址是指表1中的INSTRA,其意味着在执行在地址0x00990000处开始的子例程结束时,指令执行流应返回到地址0x00899818。
在时间点225处,执行级210E执行BR指令。不论是否应采取BR指令,执行级210E均生效。执行级210E还调用IsCall逻辑电路114以确定BR指令是否是到子例程的分支。短语“到子例程的分支”还称为子例程调用。IsCall逻辑电路114利用BR指令之后的下一地址,所述地址是INSTRA的地址,尽管INSTRA先前从管线105中被冲洗。由于下一指令的地址与链路寄存器(LR)中存储的返回地址相等,因此IsCall逻辑电路114设置与BR指令相关联的isCallFlag 210F并将其与BR指令的地址一起存储在分支预测电路132中。下面将结合图3描述例示性分支预测存储元件。同样,IsCall逻辑电路114在时间点230处将返回地址复制到链路状态结构210H。
在循环10中时间点235处对子例程的最后指令BX进行解码。解码级210B将BX指令辨识为回答呼叫,且因此分支预测132通过使返回地址(RA)从链路状态结构210H出栈来预测程序流。解码级210B重定向管线105以从INSTRA开始提取,INSTRA的地址与返回地址(RA)相同。参见参考点240。同样,在循环11中,由于RA出栈(即从链路状态结构中读取并移除),因此链路状态结构210H不再含有返回地址。通过利用图1的处理器(如时序图200中所图解说明),由组合的LDR与BR指令界定的隐式子例程调用允许链路状态结构存储返回地址。
在管线105下一次处理BR指令时,分支预测电路132可比管线105第一次处理BR指令更早地利用与其中存储的所述BR指令的地址相关联的所设置的IsCallFlag来填充链路状态结构。
在时钟循环n处,相同的BR指令在IFU级210A处进入管线105。在时钟循环n+1处,INSTRA进入IFU级210A且BR指令由DCD级210B解码。在DCD级210B期间,分支预测电路132查找BR指令的地址且发现其具有指示BR指令是子例程调用的对应IsCallFlag设置。因此,DCD级210B使下一地址(INSTRA的地址)进栈到链路状态结构210H上,如参考245处所示。
图3是分支目标地址高速缓冲存储器(BTAC)300的例示性部分。BTAC 300由分支预测电路132合适地采用。BTAC 300包含至少三列:列310A、310B及310N。列310A含有分支指令的地址。列310B含有分支目标地址,即对应的分支指令所转移到的最后一个地址。列310N含有IsCallFlag的值。IsCallFlag在被设置时指示相关联的分支指令对应于子例程调用。行305对应于表1中的BR指令,其中其地址为0x00899814,其目标地址为0x00990000且对应于ADD指令,且其IsCallFlag已设置。
图4A及4B图解说明IsCall逻辑电路的各种实施例。这些实施例可耦合到如图1中所示的执行管道级120或任何管道早先管道级。图4A是可在图1中合适地采用的IsCall逻辑电路400的例示性实施例。IsCall逻辑电路400包含比较器440、两端口“或”门445及两端口“与”门450。比较器440接收两个输入;含有链路寄存器(LR)405的值的输入及含有下一地址410的输入。如图2中所描述,下一地址是在BR指令之后依序提取的下一地址。比较器440的输出耦合到两端口“或”门445的一个端口。另一端口耦合到指示耦合到IsCall逻辑电路400的管道级中的当前指令是否是分支及链路指令的信号415。“或”门445是任选的且被使用来以与隐式子例程相同的方式支持分支及链路指令。“或”门445的输出耦合到两端口“与”门425中的一个端口。另一端口耦合到分支预测电路132所产生的isTakenBranch信号420。分支预测电路132从曾调用IsCall逻辑电路400的BR指令产生isTakenBranch信号420。在非推测性实施例中,EXE级120可替代地产生isTakenBranch信号420。当IsCall逻辑电路400的输出425真实时,利用输出425来设置分支预测电路132中的isCallFlag且将返回地址复制到链路状态结构中。所属领域的技术人员认识到,可在IsCall逻辑电路400中利用其它逻辑电路以控制是否指示间接分支指令对应于子例程调用,且如果是则用下一地址来更新链路状态结构。
图4B是图1中可合适地采用的IsCall逻辑电路401的第二实施例。比较器440及其输入及IsCall逻辑电路401的输出与图4A中所描绘的相同。比较器440的输出作为输入馈送到“与”门455。“与”门455还接收isBranch信号430作为输入。当正由耦合到IsCall逻辑电路401的管道级处理的当前指令是分支指令时,isBranch信号430活动。在操作中,如果当前指令是分支指令且所述分支指令之后的下一地址与链路寄存器中含有的地址相等,则利用输出信号425来将isCallflag与分支预测电路132中的此分支指令相关联且用下一地址来更新链路状态结构134。此第二实施例允许以常规的方式在IsCall逻辑电路401外部处理分支及链路指令。
图5是图解说明辨识子例程的方法500的流程图。在方块510处,检测程序流中的无序改变。例如,分支指令。更特定来说,检测不是分支及链路指令的分支指令。此检测可由已知的解码技术来执行。在方块515处,方法500确定所检测的程序流中的无序改变是否已被指示为子例程调用。以实例的方式,如果分支指令已被管线105处理,则将在预测电路132中设置指示当前处理的分支指令已被指示或标记为子例程调用的isCallFlag。如果所述分支指令已被指示或标记为子例程调用,则方法500先前已处理了程序流中的此无序改变,且因此继续进行到方块550。
如果所检测的程序流中的无序改变先前尚未被指示为子例程调用,则方法500继续进行到方块520。在方块520处,检索程序流中的所检测的无序改变之后的下一有序地址。例如,分支指令之后的下一地址。下一地址可以各种装置来提供,其中包含前面的管道级、IFU级102中的下一程序计数器(PC)产生电路等等。在方块530处,将下一有序地址与链路寄存器的内容进行比较。如以上结合图2所论述,在预期子例程调用时给链路寄存器(LR)指派返回地址。在方块540处,将所检测的程序流中的无序改变指示为子例程调用。例如,可设置与分支指令相关联的旗标并将其存储在分支预测电路132中。方法500接着继续进行到方块550。
在方块550处,使链路寄存器的内容进栈到链路堆栈结构上。例如,当如图2中所图解说明执行分支指令时,将链路寄存器复制到链路堆栈结构。等效地,可替代地使下一有序地址进栈到链路堆栈结构上。虽然未被图解说明,但程序流中的无序改变可导致由管线处理子例程。在方块560处,方法500等待指示所述子例程的结束的回答呼叫。一旦已辨识回答呼叫,方法500即继续进行到方块570,其中来自链路堆栈结构的下一有序地址出栈。方块570允许处理器重定向管线的处理以在回答呼叫的地址处开始处理指令。
方法500继续进行到等待方块580,等待方块580等待程序流中的下一无序改变。一旦程序流中的下一无序改变到达管线中,方法500即继续进行到方块510且接着到方块515。如果先前已检测到程序流中的下一无序改变,则程序流中的无序改变将已被指示,因此方块515将继续进行到方块550。
结合本文所揭示实施例描述的各种说明性逻辑块、模块、电路、元件及/或组件可用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑组件、离散门或晶体管逻辑、离散硬件组件或其经设计以执行本文中所描述的功能的任何组合来实施或执行。通用处理器可以是微处理器,但或者,所述处理器还可以是任何常规处理器、控制器、微控制器或状态机。处理器还可实施为计算组件的组合,例如DSP与微处理器的组合、多个微处理器的组合、一个或一个以上微处理器与DSP核心的联合或任何其它此类配置。
结合本文所揭示的实施例描述的方法可直接包含在硬件、由处理器执行的软件模块或两者的组合中。软件模块可驻留在:RAM存储器、快闪存储器、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬磁盘、可装卸式磁盘、CD-ROM或此项技术中已知的任何其它形式的存储媒体中。存储媒体可耦合到处理器以使得处理器可从所述存储媒体读取信息且向所述存储媒体写入信息。或者,可将所述存储媒体集成到处理器。
虽然以实施例为背景来揭示本发明,但应认识到,所属领域的技术人员可采用与上文所论述及上文权利要求书相一致的各种各样的实施方案。
Claims (19)
1、一种辨识子例程调用的方法,其包括:
检测程序流中的无序改变;
检索所检测的程序流中的无序改变之后的下一有序地址;及
将所述下一有序地址与寄存器的内容进行比较以确定所述无序改变是否是子例程调用。
2、如权利要求1所述的方法,其中所述程序流中的无序改变是分支指令。
3、如权利要求1所述的方法,其中所述寄存器是链路寄存器。
4、如权利要求1所述的方法,其进一步包括:
使所述程序流中的无序改变之后的所述下一有序地址进栈到链路堆栈结构上。
5、如权利要求1所述的方法,其进一步包括:
指示所述程序流中的无序改变是子例程调用。
6、如权利要求5所述的方法,其中指示所述程序流中的无序改变是子例程调用包括:
在与所述程序流中的无序改变相关联的分支预测电路中存储旗标。
7、一种在处理器中用于辨识子例程调用的设备,其包括:
电路,其包括:
用于接收寄存器的内容的第一输入;
用于接收程序流中的无序改变的第二输入;
用于接收所述程序流中的无序改变之后的下一有序地址的第三输入,其中所述电路经配置以将所述下一有序地址与所述寄存器的所述内容进行比较以确定所述程序流中的无序改变是否是子例程调用。
8、如权利要求7所述的设备,其中所述程序流中的无序改变是分支指令。
9、如权利要求7所述的设备,其中所述寄存器是链路寄存器。
10、如权利要求7所述的设备,其进一步包括:
链路堆栈结构,其中所述设备经配置以使所述程序流中的无序改变之后的所述下一有序地址进栈到所述链路堆栈结构上。
11、如权利要求7所述的设备,其进一步包括:
分支预测电路,其经配置以存储所述程序流中的无序改变是子例程调用的指示。
12、一种用于辨识子例程调用的设备,其包括:
用于检测程序流中的无序改变的装置;
用于检索所述所检测的程序流中的无序改变之后的下一有序地址的装置;及
用于将所述下一有序地址与寄存器的内容进行比较以确定所述无序改变是否是子例程调用的装置。
13、如权利要求12所述的设备,其中所述程序流中的无序改变是分支指令。
14、如权利要求12所述的设备,其中所述寄存器是链路寄存器。
15、如权利要求12所述的设备,其进一步包括:
用于使所述程序流中的无序改变之后的所述下一有序地址进栈到链路堆栈结构上的装置。
16、如权利要求12所述的设备,其进一步包括:
用于指示所述程序流中的无序改变是子例程调用的装置。
如权利要求12所述的设备,其中所述用于指示所述程序流中的无序改变是子例程调用的装置包括:
用于在与所述程序流中的无序改变相关联的分支预测电路中存储旗标的装置。
18、一种用于辨识子例程调用的设备,其包括:
用于处理指令的处理器管线;及
耦合到所述处理器管线的电路,所述电路经配置以接收寄存器的内容、程序流中的无序改变的指示及所述程序流中的无序改变的所述指示之后的下一有序地址,所述电路经配置以将所述链路寄存器的所述内容与所述下一有序地址进行比较以确定所述程序流中的无序改变的所述指示是否是子例程调用。
19、如权利要求18所述的设备,其进一步包括:
链路堆栈结构,其中所述电路经配置以使所述链路寄存器的所述内容进栈到所述链路堆栈结构上。
20、如权利要求18所述的设备,其进一步包括:
分支预测电路,其中所述电路经配置以存储所述程序流中的无序改变是子例程调用的指示。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/563,943 US7444501B2 (en) | 2006-11-28 | 2006-11-28 | Methods and apparatus for recognizing a subroutine call |
US11/563,943 | 2006-11-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101535951A true CN101535951A (zh) | 2009-09-16 |
Family
ID=39465182
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007800414772A Pending CN101535951A (zh) | 2006-11-28 | 2007-11-27 | 用于辨识子例程调用的方法及设备 |
Country Status (13)
Country | Link |
---|---|
US (1) | US7444501B2 (zh) |
EP (1) | EP2087420B1 (zh) |
JP (1) | JP2010511251A (zh) |
KR (1) | KR20090094335A (zh) |
CN (1) | CN101535951A (zh) |
AT (1) | ATE484795T1 (zh) |
BR (1) | BRPI0719371A2 (zh) |
CA (1) | CA2668584A1 (zh) |
DE (1) | DE602007009861D1 (zh) |
ES (1) | ES2351894T3 (zh) |
MX (1) | MX2009005584A (zh) |
RU (1) | RU2009124438A (zh) |
WO (1) | WO2008067277A2 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103795738A (zh) * | 2012-10-26 | 2014-05-14 | 苏州工业园区新宏博通讯科技有限公司 | 一种采集终端及应用该采集终端的远程监控系统 |
CN109960607A (zh) * | 2017-12-22 | 2019-07-02 | 龙芯中科技术有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
CN111095201A (zh) * | 2017-09-19 | 2020-05-01 | 国际商业机器公司 | 响应于到子例程的分支而预测内容表指针值 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4836903B2 (ja) * | 2007-09-13 | 2011-12-14 | 株式会社東芝 | マイクロプロセッサ制御装置並びにその方法およびプログラム |
CN102099781A (zh) * | 2009-05-19 | 2011-06-15 | 松下电器产业株式会社 | 分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质 |
US20140025894A1 (en) * | 2012-07-18 | 2014-01-23 | Electronics And Telecommunications Research Institute | Processor using branch instruction execution cache and method of operating the same |
US10209992B2 (en) * | 2014-04-25 | 2019-02-19 | Avago Technologies International Sales Pte. Limited | System and method for branch prediction using two branch history tables and presetting a global branch history register |
US10908902B2 (en) * | 2016-05-26 | 2021-02-02 | International Business Machines Corporation | Distance based branch prediction and detection of potential call and potential return instructions |
GB2563384B (en) | 2017-06-07 | 2019-12-25 | Advanced Risc Mach Ltd | Programmable instruction buffering |
US10896030B2 (en) | 2017-09-19 | 2021-01-19 | International Business Machines Corporation | Code generation relating to providing table of contents pointer values |
US10705973B2 (en) | 2017-09-19 | 2020-07-07 | International Business Machines Corporation | Initializing a data structure for use in predicting table of contents pointer values |
US11061575B2 (en) | 2017-09-19 | 2021-07-13 | International Business Machines Corporation | Read-only table of contents register |
US10884929B2 (en) | 2017-09-19 | 2021-01-05 | International Business Machines Corporation | Set table of contents (TOC) register instruction |
US10713050B2 (en) | 2017-09-19 | 2020-07-14 | International Business Machines Corporation | Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions |
US10725918B2 (en) | 2017-09-19 | 2020-07-28 | International Business Machines Corporation | Table of contents cache entry having a pointer for a range of addresses |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4831517A (en) * | 1986-10-10 | 1989-05-16 | International Business Machines Corporation | Branch and return on address instruction and methods and apparatus for implementing same in a digital data processing system |
US6157999A (en) * | 1997-06-03 | 2000-12-05 | Motorola Inc. | Data processing system having a synchronizing link stack and method thereof |
US5974543A (en) * | 1998-01-23 | 1999-10-26 | International Business Machines Corporation | Apparatus and method for performing subroutine call and return operations |
JP3513038B2 (ja) * | 1998-12-10 | 2004-03-31 | 富士通株式会社 | 命令フェッチ制御装置 |
JP3723019B2 (ja) * | 1999-09-29 | 2005-12-07 | 富士通株式会社 | サブルーチンリターン相当の命令の分岐予測を行う装置および方法 |
US6910124B1 (en) * | 2000-05-02 | 2005-06-21 | International Business Machines Corporation | Apparatus and method for recovering a link stack from mis-speculation |
US6973563B1 (en) * | 2002-01-04 | 2005-12-06 | Advanced Micro Devices, Inc. | Microprocessor including return prediction unit configured to determine whether a stored return address corresponds to more than one call instruction |
JP2007041837A (ja) * | 2005-08-03 | 2007-02-15 | Nec Electronics Corp | 命令プリフェッチ装置及び命令プリフェッチ方法 |
US7478228B2 (en) * | 2006-08-31 | 2009-01-13 | Qualcomm Incorporated | Apparatus for generating return address predictions for implicit and explicit subroutine calls |
-
2006
- 2006-11-28 US US11/563,943 patent/US7444501B2/en not_active Expired - Fee Related
-
2007
- 2007-11-27 AT AT07871578T patent/ATE484795T1/de not_active IP Right Cessation
- 2007-11-27 MX MX2009005584A patent/MX2009005584A/es not_active Application Discontinuation
- 2007-11-27 ES ES07871578T patent/ES2351894T3/es active Active
- 2007-11-27 BR BRPI0719371-8A patent/BRPI0719371A2/pt not_active Application Discontinuation
- 2007-11-27 EP EP07871578A patent/EP2087420B1/en not_active Not-in-force
- 2007-11-27 KR KR1020097013467A patent/KR20090094335A/ko not_active Application Discontinuation
- 2007-11-27 RU RU2009124438/08A patent/RU2009124438A/ru not_active Application Discontinuation
- 2007-11-27 DE DE602007009861T patent/DE602007009861D1/de active Active
- 2007-11-27 WO PCT/US2007/085574 patent/WO2008067277A2/en active Application Filing
- 2007-11-27 JP JP2009539433A patent/JP2010511251A/ja active Pending
- 2007-11-27 CN CNA2007800414772A patent/CN101535951A/zh active Pending
- 2007-11-27 CA CA002668584A patent/CA2668584A1/en not_active Abandoned
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103795738A (zh) * | 2012-10-26 | 2014-05-14 | 苏州工业园区新宏博通讯科技有限公司 | 一种采集终端及应用该采集终端的远程监控系统 |
CN111095201A (zh) * | 2017-09-19 | 2020-05-01 | 国际商业机器公司 | 响应于到子例程的分支而预测内容表指针值 |
CN111095201B (zh) * | 2017-09-19 | 2023-07-25 | 国际商业机器公司 | 响应于到子例程的分支而预测内容表指针值 |
CN109960607A (zh) * | 2017-12-22 | 2019-07-02 | 龙芯中科技术有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
CN109960607B (zh) * | 2017-12-22 | 2021-04-20 | 龙芯中科技术股份有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
ES2351894T3 (es) | 2011-02-11 |
RU2009124438A (ru) | 2011-01-10 |
ATE484795T1 (de) | 2010-10-15 |
BRPI0719371A2 (pt) | 2014-02-11 |
DE602007009861D1 (de) | 2010-11-25 |
KR20090094335A (ko) | 2009-09-04 |
MX2009005584A (es) | 2009-06-15 |
JP2010511251A (ja) | 2010-04-08 |
WO2008067277A3 (en) | 2008-09-25 |
EP2087420A2 (en) | 2009-08-12 |
US7444501B2 (en) | 2008-10-28 |
US20080126770A1 (en) | 2008-05-29 |
EP2087420B1 (en) | 2010-10-13 |
WO2008067277A2 (en) | 2008-06-05 |
CA2668584A1 (en) | 2008-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101535951A (zh) | 用于辨识子例程调用的方法及设备 | |
US10409605B2 (en) | System and method for using a branch mis-prediction buffer | |
CN102112966B (zh) | 用于推测式中断向量预取的设备及方法 | |
US7437537B2 (en) | Methods and apparatus for predicting unaligned memory access | |
US7003629B1 (en) | System and method of identifying liveness groups within traces stored in a trace cache | |
JP5748800B2 (ja) | ループバッファのパッキング | |
CN101876890B (zh) | 管线式微处理器及其执行两种条件分支指令的方法 | |
EP1296229A2 (en) | Scoreboarding mechanism in a pipeline that includes replays and redirects | |
US20070033385A1 (en) | Call return stack way prediction repair | |
CN104335168A (zh) | 分支预测预加载 | |
MX2009001911A (es) | Metodo y aparato para emular el comportamiento de pronostico de ramificacion de una llamada de subrutina explicita. | |
KR101723711B1 (ko) | 조건부 쇼트 포워드 브랜치들을 산술적으로 동등한 술어적 명령어들로 변환 | |
CN101438237A (zh) | 基于区块的分支目标地址高速缓冲存储器 | |
CN103019652A (zh) | 滑动窗口、基于区块的分支目标地址高速缓冲存储器 | |
TWI397816B (zh) | 減少在分支目標位址快取記憶體搜尋的方法與裝置 | |
KR100431975B1 (ko) | 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템 | |
US7694110B1 (en) | System and method of implementing microcode operations as subroutines | |
US5850563A (en) | Processor and method for out-of-order completion of floating-point operations during load/store multiple operations | |
CN114116002A (zh) | 一种存储重命名的实现方法、处理器及计算机设备 | |
CN117270972B (zh) | 指令处理方法、装置、设备和介质 | |
EP0912925B1 (en) | A return stack structure and a superscalar microprocessor employing same | |
EP0912928A1 (en) | A data address prediction structure utilizing a stride prediction method | |
WO1998020416A1 (en) | A stride-based data address prediction structure | |
JPS6247747A (ja) | 先取り制御処理装置 | |
MXPA98002291A (en) | Apparatus for detection based on region of interference between reordered memory operations in a process |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20090916 |