CN101884025B - 用于使过程返回序列加速的方法和系统 - Google Patents
用于使过程返回序列加速的方法和系统 Download PDFInfo
- Publication number
- CN101884025B CN101884025B CN200880118806.3A CN200880118806A CN101884025B CN 101884025 B CN101884025 B CN 101884025B CN 200880118806 A CN200880118806 A CN 200880118806A CN 101884025 B CN101884025 B CN 101884025B
- Authority
- CN
- China
- Prior art keywords
- instruction
- address
- logic circuit
- return
- 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
Links
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/38—Concurrent instruction execution, e.g. pipeline, 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/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
-
- 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, look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
Abstract
本发明揭示一种用于当从管线处理器中的过程返回时从链接栈检索返回地址的方法。所述方法识别可操作以从软件栈检索返回地址的检索指令。所述方法进一步识别可操作以分支到所述返回地址的分支指令。所述方法响应于所述指令和所述分支指令两者被识别而从所述链接栈检索所述返回地址,并使用所述返回地址来提取指令。
Description
技术领域
本发明大体涉及计算机系统,且更明确地说涉及一种用于通过识别处理器内的上托分支指令序列而使返回序列加速的方法和系统。
背景技术
处理器执行的大多数程序包含子例程或过程。过程是通过过程调用序列存取的代码的模块。一旦过程完成,指令执行就通过过程返回序列的执行而返回到调用程序。
在一些处理器结构内,过程调用和返回序列可编译为指令的序列。举例来说,过程调用序列可由推送(PUSH)指令之后是分支和链接指令组成。推送指令可将过程内的指令使用的参数保存到软件栈上。在推送指令之后,处理器可执行分支和链接指令。分支和链接指令促使在过程的开始地址处开始指令提取和执行,并将分支和链接指令之后的下一顺序指令的地址(称为返回或链接地址)保存在链接寄存器中。链接寄存器可为特殊用途寄存器或处理器使用的通用寄存器(GPR)之一。在过程内,通常将链接寄存器内容推送到软件栈上,使得其值在在返回到原始调用程序之前调用另一过程的情况下不被覆写。
在过程完成其功能之后,处理器执行过程返回序列以在链接地址(过程调用指令之后的下一顺序指令地址)处继续进行指令执行。因为返回地址经常保存在软件栈上,所以过程返回序列必须首先从软件栈检索返回地址以使用所述地址来确定待提取的下一指令群组。
过程返回序列可由一个或一个以上指令组成。在一些处理器结构中,过程返回序列可以是单一指令,例如上托(POP)或加载指令,其可从软件栈读取下一返回地址并更新程序计数器(PC)。或者,处理器可使用上托或加载指令将链接地址从软件栈读取到中间寄存器(例如,GPR)中,之后将所述值移动到程序计数器以完成过程返回序列。在另一说明性实例中,处理器可确定从过程的返回可能是将保存在链接寄存器(LR)中的值移动到PC中的指令。当处理器在过程调用之后遇到这些过程返回序列中的任一者时,处理器使用从软件栈检索的返回地址值跳回到过程调用指令之后的下一顺序指令。
可将额外的逻辑添加到处理器的硬件以改进指令处理的效率。举例来说,可将链接栈添加到处理器的提取逻辑以使指令提取加速。所属领域的技术人员了解,链接栈可含有还可存在于软件栈上的返回地址。然而,链接栈独立于软件栈而操作。与链接栈相关联的硬件逻辑识别过程调用和返回。当在执行之前识别过程调用指令时,将相关联的返回地址加载到链接栈上。相反,当识别过程返回时,从链接栈检索相关联的返回地址并使用其来继续进行指令提取。代替于等待指令执行和从软件栈检索返回地址,处理器可使用存储在链接栈中的地址来推测性地提取指令。
随着处理器的发展,过程返回序列继续变化。在一些处理器结构中,过程返回可包括多个指令。如果支持链接栈的硬件逻辑不将这些指令辨认为过程返回序列,那么可能不会从链接栈检索返回地址,且因此链接栈可能会变得与指令序列不同步。当链接栈变得不同步时,链接栈可能会提供可导致多个地址误预测的错误的返回地址信息。
发明内容
因此,业内需要有将某些指令序列(更明确地说,上托(或加载)和分支指令序列)辨认为过程返回序列的处理器电路。本发明认识到此需要并揭示一种具有在指令管线中较早识别对应于过程返回的指令的电路的处理器。在识别过程返回之后,处理器通过使用来自链接栈的下一返回地址而提取下一指令群组。通过将上托和分支指令序列辨认为程序返回,处理器可基于从链接栈检索的正确地址来继续提取指令。
揭示一种用于当从管线处理器中的过程返回时从链接栈检索返回地址的方法。所述方法识别操作以从链接栈检索返回地址的检索指令。所述方法识别操作以分支到所述返回地址的分支指令。所述方法响应于所述指令和所述分支指令两者被识别而从所述链接栈检索所述返回地址。所述方法使用所述返回地址来提取后续指令。
揭示一种管线处理器。所述管线处理器具有线缓冲器。线缓冲器耦合到指令高速缓冲存储器。处理器还具有耦合到指令高速缓冲存储器的提取逻辑电路。提取逻辑电路具有存储预测性返回地址的链接栈,其中指令从线缓冲器加载到指令高速缓冲存储器中。提取逻辑电路从指令高速缓冲存储器检索指令。管线处理器还具有与线缓冲器通信的预解码逻辑电路,其中预解码逻辑电路具有用于识别过程返回序列的检测逻辑电路。过程返回序列识别为操作以从软件栈检索返回地址的检索指令,和分支到所检索的返回地址的分支指令。管线处理器响应于对过程返回序列的识别而从链接栈检索所预测的返回地址。
揭示一种管线处理器。所述管线处理器具有提取逻辑电路。提取逻辑电路具有存储所预测的返回地址的链接栈。提取逻辑电路从指令高速缓冲存储器提取指令。管线处理器还具有解码逻辑电路,所述解码逻辑电路耦合到提取逻辑电路,其中所提取的指令由解码逻辑电路解码。解码逻辑电路进一步具有检测逻辑电路,其中所述检测逻辑电路识别过程返回序列。过程返回序列是从软件栈检索地址的检索指令,和操作以分支到所检索的地址的分支指令。管线处理器响应于对过程返回序列的识别而从链接栈检索所预测的返回地址。管线处理器响应于对过程返回的识别而从链接栈检索所预测的返回地址。
从以下详细描述和附图将了解对本发明的更完整理解以及本发明的更多特征和优点。
附图说明
图1展示使用本发明的一实施例的处理器的高级逻辑硬件框图。
图2展示由图1的处理器执行的示范性指令群组。
图3显示根据本发明的一个实施例并入有检测逻辑电路的图1的CPU的上部和下部管线的更详细框图。
图4展示图3的提取逻辑电路的更详细视图。
图5展示利用检测逻辑电路的上部和下部管线的替代实施例。
图6展示说明由图1的处理器执行的指令处理流的流程图,所述处理器辨认程序返回并使用链接栈来提取指令。
图7展示说明由处理器使用图4的上部管线执行的替代指令处理流的流程图。
具体实施方式
下文结合附图陈述的详细描述希望作为对本发明的各种实施例的描述,且不希望表示其中可实践本发明的仅有实施例。详细描述包含特定细节以用于提供对本发明的彻底理解。然而,所属领域的技术人员将了解,可在没有这些特定细节的情况下实践本发明。在一些例子中,以框图形式展示众所周知的结构和组件以免混淆本发明的概念。可仅为了方便和清楚而使用首字母缩写词和其它描述性术语,且其不希望限制本发明的范围。
图1展示利用如下文描述的本发明的一个实施例的超标量处理器100的高级视图。处理器100具有中央处理单元(CPU)102,其经由控制信号104耦合到指令高速缓冲存储器106。指令高速缓冲存储器106还耦合到线缓冲器107且通过通用总线110耦合到存储器108。CPU 102控制经由线缓冲器107将指令从存储器108加载到指令高速缓冲存储器106中。CPU 102具有耦合到下部管线160和165的上部管线150。在下部管线160和165内是执行级220和225。在执行级220内是执行单元(EU)130A,且在执行级225内是EU 130B。
如所属领域的技术人员了解,指令高速缓冲存储器106可以是经设计以弥合存储器108与处理器100之间的速度差距的专用存储器。将从存储器108提取的指令放置在能够以处理器时钟速度读取的较快指令高速缓冲存储器106中。如果指令不存在于指令高速缓冲存储器106中,那么处理器100从存储器108检索指令。当从存储器108检索到指令时,将其首先加载到线缓冲器107中且最终写入到指令高速缓冲存储器106中。
在指令高速缓冲存储器106中加载了指令之后,CPU 102经由控制信号104存取所述指令。将指令从指令高速缓冲存储器106加载到上部管线150中。在上部管线150中处理指令且接着将所述指令发送到下部管线160或165以供进一步处理。如结合图3-5的论述所描述,处理器可具有经设计以检测特定指令序列的逻辑电路。这些特定指令序列可对应于过程返回。在已识别过程返回指令序列之后,处理器100可根据本发明的多个实施例基于那些指令执行功能。
在上部管线150中对指令执行的一些示范性处理功能可包含提取指令、将指令对准、对指令进行解码、将指令发布到下部管线160或165等。在下部管线160和165内,可由执行单元130A和130B执行指令,并记录结果。
图2中说明具有使用上托和分支指令序列的过程返回的说明性指令群组200。显示指令260、指令270的操作和执行指令的模块280。出于清楚的目的,从此指令群组200中省略将在软件栈上推送参数以供过程本身使用的任何指令。也省略将组成过程执行的实际功能的任何指令。图2中描绘的指令是调用过程、将返回地址保存在链接寄存器(在此实例中为GPR R14)中、将返回地址存储到软件栈上、从软件栈检索返回地址,并继续处理位于返回地址处的指令的指令。图2中以指令群组200在追踪指令执行时将呈现的程序次序显示指令群组200。所属领域的技术人员了解,所追踪的指令是处理器可能已提取的实际代码的子集,且以其将被执行的状态展示。指令群组200由三个嵌套过程组成。
在指令群组200内是三个过程调用及其相关联的返回。第一过程调用是指令A,其调用过程PROC1。指令B是过程PROC1内的预备指令,其将当前返回地址保存到软件栈上。指令C是第二过程调用指令,其调用过程PROC2。指令D是过程PROC2内的另一预备指令,其将与PROC2相关联的返回地址保存到软件栈上。最后过程调用指令是指令E,其调用过程PROC3。
对应于过程调用指令的是过程返回指令。第一过程返回指令是指令F。在先前处理器结构中,将指令F辨认为过程返回指令。接下来两个指令(指令G与H组合)表示另一过程返回。通常,在先前处理器结构中,上托和分支指令的指令组合可能不会被正确地识别为供硬件链接栈使用的过程返回。因此在这些先前处理器中,当识别指令G和H时,可能未检索链接栈上的下一返回地址。使用一个实施例的处理器可缓解此可能的链接栈讹误。在一个实施例中,在将指令H识别为过程返回指令之后,处理器100可从链接栈检索下一地址并使用所检索的地址来继续提取指令。在此实例中,链接栈上的下一地址指回过程PROC1,且更明确地说其指向指令C之后的下一顺序指令(指令I)。指令H也可称为隐式分支指令。
接下来两个指令(指令I和J)也解译为过程返回序列。当指令J由处理器100识别为过程返回指令时,检索链接栈上的下一地址并使用所述地址来继续指令提取。指令J是显式分支指令。在此实例中,链接栈外的下一地址将程序执行指回主程序。在先前处理器结构中,指令I与J的组合可能未被正确地识别为供硬件链接栈使用的过程返回序列。如图3-7的论述中更详细描述,本发明的各种实施例将上托和分支指令的组合识别为过程返回序列。
图3显示利用本发明实施例的CPU 102的更详细框图。在CPU 102内,上部管线150具有提取级203,其含有通过控制信号104耦合到指令高速缓冲存储器106的提取逻辑电路202。同样在CPU 102中的是具有检测逻辑电路250的预解码逻辑电路201。预解码逻辑电路201耦合到线缓冲器107,所述线缓冲器107耦合到指令高速缓冲存储器106。提取级203耦合到解码级205,解码级205又耦合到发布级207。耦合到解码级205的是解码逻辑电路(为了便于说明未图示),其对关于指令的特定信息进行解码。在发布级207内的可为若干指令队列(为了便于说明未图示),其在指令发布到下部管线160和165之前保持指令。
如所属领域的技术人员可了解,管线级可具有经设计以保持指令的寄存器或寄存器群组。当指令进入特定级时,处理器100将指令加载到链接到所述级的寄存器或寄存器群组中。当指令保持在每一级内的寄存器或寄存器群组中时,逻辑电路可依据指令而执行某些操作。在逻辑电路已执行既定操作之后,指令接着传递到下一顺序级。另外,当指令在上部管线150中时,其由各种逻辑电路“处理”。处理指令可包含提取指令、对指令进行解码、将指令对准、发布指令等。
指令进入上部管线150并从提取级203移动穿过发布级207。指令在提取级203期间由提取逻辑电路202提取。在提取指令之后,其在解码级205期间由解码逻辑电路解码。在解码级205之后,在发布级207中处理指令。在指令离开发布级207之后,在下部管线160或下部管线165中执行指令。如先前论述,在下部管线160内的是执行级220和EU 130A。在下部管线165内的是执行级225和EU 130B。下部管线160和165分别存取寄存器堆230或235。
预解码逻辑电路201可由处理器100使用以在指令保存在指令高速缓冲存储器106中之前对关于指令的信息进行部分解码和识别。经预解码的信息可在指令存储在指令高速缓冲存储器106中时连同指令一起保存。在预解码逻辑电路201内,检测逻辑电路250可识别指令之间的相依性。举例来说,检测逻辑电路250可经设计以识别何时上托指令和分支指令利用相同寄存器。如图4的论述中所阐释,在检测逻辑电路250将由上托和分支指令组成的指令序列识别为来自过程调用的返回之后,提取逻辑电路202在从指令高速缓冲存储器106提取分支指令时解译此信息。
当指令加载到指令高速缓冲存储器106中时,可通过设定与指令相关联的信息字段内的特定位置中的位来实现将经预解码的信息与指令相关联。将经预解码的信息保存在指令高速缓冲存储器106中也可称为以旗标标记指令。举例来说,在确定指令是过程返回指令之后,可在指令标头中的一个位置中设定一位,其识别所述指令是过程返回指令。或者,处理器100可针对经识别的指令将经预解码的信息编码到指令标头中。以此方式,处理器100可针对不同指令基于选定或预定标准使用多个位来编码不同信息。可在正从指令高速缓冲存储器106提取指令时检索经预解码的信息。处理器100可接着基于经识别的信息执行某些功能。
图4显示根据本发明一个实施例的提取逻辑电路202。提取逻辑电路202包含控制地址选择多路复用器302的地址选择器逻辑电路320。地址选择器逻辑电路320包含返回选择器逻辑电路350。耦合到地址选择多路复用器302的输入的是来自链接栈304的链接栈输出316。链接栈逻辑电路310与地址选择器逻辑电路320通信并控制链接栈304的输入和输出两者。当识别过程调用时,链接栈304从地址总线接收返回地址。
在链接栈304内,可保存预测性返回地址。链接栈304可以是存储器的存储对应于与过程返回相关联的返回地址的指令地址的后进先出(LIFO)部分。链接栈304独立于软件栈而操作。当指令在指令管线中较早地被识别为过程返回指令时,处理器100可使用存储在链接栈上的返回地址抢先提取指令,而不是等待过程返回在下部管线160或165中执行。
如图4中显示,地址选择多路复用器302可接收下一顺序程序地址。下一顺序程序地址可以是当前程序计数器递增8个地址位置(PC+8)。在此实施例中,从指令高速缓冲存储器106提取指令,一次提取两个指令,其中每一指令为四个字节长。在其它处理器实施例中,下一顺序程序地址可以是递增不同量的程序计数器。如先前所提及,地址选择多路复用器302还可从链接栈304接收预测性地址信息。当处理器100确定已发生过程返回时,检索链接栈304中的下一地址并将其用作开始位置以提取下一指令群组。
地址选择多路复用器302可从其它来源接收地址信息。举例来说,分支目标地址高速缓冲存储器(BTAC)可提供用于提取指令的地址。或者,中断地址可用于提取指令。为了便于说明,未展示地址的这些其它来源。
地址选择器逻辑电路320确定其输入中的哪一者将通过地址选择多路复用器302并用于提取下一指令群组。如果地址选择器逻辑电路320确定待提取的下一地址群组是下一顺序地址(PC+8),那么选择PC+8输入,或者,如果地址选择器逻辑电路320内的返回选择器逻辑电路350确定链接栈304含有下一提取地址,那么选择链接栈输出316。
为了利用链接栈304,处理器100需要确定何时在上部管线150内的指令处理序列期间识别过程调用和对应的返回。由于链接栈304用于预测性地提取指令,所以处理器100不会等到指令执行再提取后续指令。替代地,在处理器100已识别为上部管线150中的过程调用指令之后,处理器100经由地址总线将与过程调用相关联的返回地址加载到链接栈304上。接着处理器100提取过程的指令。
在过程结束时,处理器100遇到过程返回序列。由于过程返回序列的缘故,处理器将“上托”链接栈304以检索对应的返回地址并分支到所述返回地址以继续进行指令提取。处理器100识别过程返回指令并检索链接栈外的下一返回地址。过程返回指令可以是上托指令或加载指令,其读取软件栈并写入PC。如果返回选择器逻辑电路350识别特定上托指令是过程返回,那么返回选择器逻辑电路350接着促使地址选择器逻辑电路320促使引导链接栈输出316穿过地址选择多路复用器302。接着用取自链接栈304的返回地址来提取下一指令集。
如先前所描述,过程返回序列可由一个或一个以上指令组成。举例来说,在一些ARM实施方案中,到存储在链接寄存器(R14)中的值的分支指令可解译为过程返回。或者,将链接寄存器(R14)的值移动到程序计数器(R15)中的移动指令也可解译为过程返回。重要的是,处理器100准确地识别过程返回。如果处理器100未准确地识别过程返回,那么链接栈304将变得相对于过程返回指令不同步。如果链接栈304变得不同步,那么处理器100可能必须进入分支校正序列,且可影响执行性能。
由于处理器指令集已发展,可将替代指令序列识别为过程返回序列。在一个示范性实施例中,将返回地址上托到特定寄存器的上托或加载指令(其不更新PC)之后是到特定寄存器中存储的值的分支指令可解译为过程返回序列。分支指令可能是或可能不是上托指令之后的下一顺序指令。
为了促进识别由上托和分支指令组成的过程返回序列,搜集关于所述两个指令的信息。过程返回的上托指令可涉及一个或一个以上寄存器。当识别上托指令时,可保存上托指令的寄存器列表并将其与任何后续指令的寄存器目标进行比较。寄存器列表的保存和比较也可称为认定已识别上托指令。如果不分支(non-branching)指令在遇到到与上托指令相关联的寄存器列表中识别的寄存器的分支之前利用所述寄存器,那么将所述寄存器从所保存的寄存器列表中扣除。如果在确实使用所保存的寄存器列表中的寄存器的分支指令之前遇到不使用所保存的寄存器列表中的寄存器的分支指令,那么对先前上托的上托-分支返回序列的搜索终止。当遇到使用寄存器列表中的寄存器的分支指令时,处理器100可接着确定过程返回正被处理。因此,链接栈304的顶部处的地址可接着被检索并用于提取下一指令群组。
如先前所描述,预解码逻辑电路201(图3)可能已识别利用相同寄存器的上托和分支指令序列,且因此分支指令被识别为过程返回指令。处理器100可能已在分支指令被存储到指令高速缓冲存储器106中时将此信息保存到指令标头中。当提取逻辑电路202检索随分支指令保存的经预解码信息时,处理器100使用返回选择器逻辑电路350来识别分支指令是过程返回。在返回选择器逻辑电路350已确定分支指令是过程返回之后,返回选择器逻辑电路350促使地址选择逻辑电路320引导链接栈输出316穿过地址选择多路复用器302。返回选择器逻辑电路350还与链接栈逻辑电路310通信,从而促使返回链接栈中的下一值。因此,用链接栈地址来提取下一指令集。
图5显示根据替代实施例的具有上部管线151的CPU 102,所述CPU 102具有能够检测由上托/分支指令序列组成的过程返回的解码逻辑电路。更明确地说,CPU 102含有具有检测逻辑电路450的解码逻辑电路406。当解码逻辑电路406对指令进行解码时,识别关于指令的信息。检测逻辑电路450可监视经解码指令以确定何时识别过程返回。如先前所论述,过程返回序列可由一个或一个以上指令组成。当上托指令和后续分支指令被解码时,检测逻辑电路450可确定发生过程返回序列。
当检测逻辑电路450确定已经识别过程返回时,检测逻辑电路450将此信息传送到返回选择器逻辑电路350,返回选择器逻辑电路350又将此信息传送到链接栈逻辑电路310(图4)。返回选择器逻辑电路350接着促使地址选择器逻辑电路320引导链接栈输出316穿过地址选择多路复用器302。接着使用取自链接栈304的返回地址来提取下一指令集。
可通过返回参考图2中的指令群组200来进一步阐释与实施例相关联的发明概念。指令A是过程PROC1的调用。当指令A分支到PROC1时,处理器100将下一顺序地址存储到链接寄存器(R14)中。下一顺序地址是与返回到主程序相关联的返回地址。当指令A被识别为过程调用时,链接栈逻辑电路310促使将与指令A相关联的返回地址加载到链接栈304上。如图2中显示,指令A是主程序的一部分。指令A分支到PROC1且下一经处理指令为指令B。
指令B是PROC1内的第一指令且是过程PROC2的调用的预备指令。指令B通过将R14的值推送到软件栈上来保存当前返回地址。接下来,处理指令C。指令C是过程PROC2的调用。当指令C被识别为过程调用时,链接栈逻辑电路310将与指令C相关联的返回地址保存到链接栈304上。指令C分支到过程PROC2且经处理的下一指令为指令D。
指令D是过程PROC2内的第一指令,且通过将R14的值推送到软件栈上来保存当前返回地址。指令D是另一预备指令,其为下一过程调用指令(指令E)作准备。当指令E被识别为过程调用时,链接栈逻辑电路310促使将与指令E相关联的返回地址加载到链接栈304上。指令E是过程PROC2内的第二指令且调用过程PROC3。指令E分支到与指令F相关联的地址,指令F是过程PROC3内的第一指令。指令F是过程PROC3内仅有的指令且是返回。明确地说,指令F分支到当前在链接寄存器(R14)中的值。通常,在现有处理器结构中,将指令F辨认为指令返回。当处理指令F时,检测逻辑电路450确定指令F是过程返回且促使检索链接栈304上的下一返回地址。处理器使用返回地址而返回到过程PROC2。
在过程PROC2内,待处理的下一指令是指令G,其将当前值从软件栈“上托”出来并将其保存到寄存器R12中。为了便于说明,指令G“上托”单一寄存器。然而,在替代实施例中,上托指令可返回多个寄存器的多个值。在此替代实施例中,处理器100可保持“经上托”寄存器的列表以便使用寄存器列表中的那些寄存器中的一者作为分支目标地址而将寄存器列表与后续分支指令进行比较。在一个实施例中,检测逻辑电路450可存储“经上托”寄存器的列表。
指令H分支到现在在R12中的所检索的地址。尽管指令H不是显式分支指令(BX),但其是等效分支指令。如所属领域的技术人员了解,MOV、PC、RN也可解译为隐式分支指令。如图6和7的指令流程图600和700中所阐释,检测逻辑电路250、450确定上托指令(指令G)连同到“经上托”寄存器(指令H的R12)的分支指令一起组成过程返回序列。因此,处理器100使用链接栈304来提供下一提取地址,且指令提取返回到过程PROC1。
在处理指令H之后,指令提取返回到过程PROC1并识别指令I。指令I将下一值从软件栈上托出来到R2中。仍在过程PROC1内,指令J分支到存储在R2中的地址。类似于指令H,指令J分支到存储在先前“经上托”寄存器中的地址。因此,检测逻辑电路250、450确定指令J是过程返回指令,且使用来自链接栈304的下一值来提取下一指令群组。在此实例中,在处理指令J之后,提取指令K。指令K可以是如图3中显示的主程序内的任何指令。
在一个实施例中,处理器100使用检测逻辑电路250来识别指令F和指令G与H以及I与J的序列将解译为过程返回。因此,当检测逻辑电路250在线缓冲器107中遇到指令集200时,将指令F、H和J预解码为过程返回指令,其中经预解码信息保存在指令高速缓冲存储器106中。因此,当提取逻辑电路202从指令高速缓冲存储器106提取指令F、H和J时,返回选择逻辑电路350促使从链接304检索返回地址,所述返回地址用于提取下一指令群组。
在替代实施例中,检测逻辑电路450也可经设计以识别指令F和指令G与H以及I与J的序列将解译为过程返回。在此情况下,当在解码级205中对指令群组200进行解码时,检测逻辑电路450识别指令F、H和J为过程返回指令并将此传送到返回选择器逻辑电路350。返回选择器逻辑电路350接着促使使用链接栈304内的下一返回地址来确定下一提取地址。
图6显示说明由处理器100执行的步骤的指令流600,所述处理器100具有图3的CPU 102内的检测逻辑电路250。为了便于说明,流程图600假定CPU 102内的线缓冲器107的宽度仅为单一指令,且指令从高速缓冲存储器线地址的开始依次返回。所属领域的技术人员了解,一些处理器可具有能够不以顺序次序处理多个指令的线缓冲器。本文描述的发明概念可应用于任一类型的处理器。
指令流600在开始框602处开始。指令流从框602进行到框604,其中线缓冲器107中的第一指令由检测逻辑电路250处理。指令流600接着进行到决策框606。在决策框606中,检测逻辑电路250确定指令是否为已知的过程返回。如先前论述,已知的过程返回可以是先前识别的过程返回中的任一者,上托/分支序列除外。如果在决策框606处检测逻辑电路250确定指令是先前已知的过程返回,那么指令流600进行到框626,其中将指令识别或以旗标标记为过程返回。如果在决策框606处检测逻辑电路250确定指令不是先前已知的过程返回,那么指令流进行到决策框610。
在决策框610处,检测逻辑电路250确定指令是否为不具有经上托寄存器列表中的程序计数器(PC)的上托指令。如果指令不是没有寄存器列表中的PC的上托指令,那么指令流600进行到决策框628。否则,如果指令是不含有寄存器列表中的PC的上托指令,那么指令流600进行到框612。在框612处,检测逻辑电路250保存上托指令的寄存器列表以供用于分析线缓冲器107中的任何后续指令。
指令流从框612进行到框614。在框614处,检测逻辑电路250从线缓冲器107检索下一指令。处理流从框614继续到决策框616。在决策框616处,检测逻辑电路250确定线缓冲器107中的下一指令是否为到寄存器列表中所保存的寄存器中的任一者的分支指令。如果指令是到寄存器列表中的寄存器的分支,那么指令流进行到框626,其中将指令以旗标标记为过程返回指令。如果在决策框616处检测逻辑电路250确定指令不是到所保存的寄存器列表中的寄存器的分支指令,那么指令流600继续到决策框617。
在决策框617处,检测逻辑电路250确定指令是否为分支指令。如果指令为分支指令,那么指令流进行到决策框628。如果在决策框617处检测逻辑电路250确定指令不是分支指令,那么指令流进行到决策框618。在决策框618处,检测逻辑电路250确定指令是否覆写所保存的寄存器列表中的寄存器中的任一者。如果指令覆写所保存的寄存器列表中的寄存器中的任一者,那么指令流600继续到框620,其中从所保存的寄存器列表移除被覆写的寄存器。指令流600从框620继续到决策框622。
如果在决策框618处检测逻辑电路250确定指令未覆写所保存的寄存器列表中的任何寄存器,那么指令流600进行到决策框622。在决策框622处,检测逻辑电路250确定针对线缓冲器107是否存在任何剩余指令。如果针对线缓冲器不存在剩余指令,那么指令流600在框624处结束。如果线缓冲器107中存在剩余指令,那么指令流600回到框614,其中处理线缓冲器107中的下一指令。
在框626处,检测逻辑电路将指令以旗标标记为返回指令。如先前所提及,以旗标标记返回指令允许提取逻辑电路202在从指令高速缓冲存储器106提取返回指令时识别所述返回指令。指令流600从框626进行到决策框628。在决策框628处,检测逻辑电路250确定是否存在待在线缓冲器107中处理的任何剩余指令。如果不存在待在线缓冲器107中处理的剩余指令,那么指令流600在框624处结束。如果存在待处理的剩余额外指令,那么指令流600进行到框604,其中检测逻辑电路250处理下一指令。
图7显示说明由CPU 102执行的步骤的指令流700,所述CPU 102内具有耦合到图4的上部管线151的解码逻辑电路406中的检测逻辑电路450。为了便于说明,对指令流700中概述的指令的处理假定解码逻辑电路406每处理器循环处理单一指令。所属领域的技术人员了解,一些处理器可具有能够每处理器循环处理多个指令的解码逻辑电路。本文描述的发明概念可应用于任一类型的处理器。
指令流700在开始框702处开始。指令流从框702进行到框704,其中解码逻辑电路406在解码级205中处理指令。指令流从框704继续到决策框706。在决策框706处,检测逻辑电路450确定指令是否为过程返回。在此实例中,如果指令是除上托/分支序列外的先前已知的过程返回中的任一者,那么检测逻辑电路450确定指令为过程返回。如果检测逻辑电路450确定指令为过程返回,那么指令流700继续到框708。如果检测逻辑电路450确定指令不是过程返回,那么指令流继续到决策框710。
在决策框710处,检测逻辑电路450确定指令是否为不具有寄存器列表中的程序计数器(PC)的上托指令。如果指令不是没有其寄存器列表中的PC的上托指令,那么处理流返回到框704。如果在决策框710处检测逻辑电路450确定经解码指令是不含有其寄存器列表中的PC的上托指令,那么指令流700继续到框712。由于处理器100可能能够从软件栈上托多个寄存器,所以在框712处检测逻辑电路450保存经上托寄存器列表。指令流700从框712进行到框714。
在框714处,处理器100将下一指令加载到解码级205中,且解码逻辑电路406处理所述指令。在在框714处加载指令之后,指令流700进行到决策框716。在决策框716处,检测逻辑电路450确定指令是否为到所保存寄存器列表中的寄存器的分支。如果检测逻辑电路450确定指令是到所保存寄存器列表中的寄存器的分支,那么处理流继续到框708。如果检测逻辑电路450确定指令不是到所保存的寄存器列表中的寄存器的分支指令,那么指令流700继续到决策框718。
在决策框718处,检测逻辑电路450确定指令是否为分支指令。如果指令为分支指令,那么指令流返回到框704,其中将下一指令加载到解码级205中。如果在决策框718处指令不是分支指令,那么指令流700进行到决策框720。在决策框720处,检测逻辑电路450确定指令是否覆写所保存的寄存器列表中的寄存器。
如果指令未覆写所保存的寄存器列表中的寄存器,那么指令流700返回到框714,其中将下一指令加载到解码级205且由解码逻辑电路406处理所述指令。如果在决策框720处指令覆写所保存的寄存器列表中的寄存器,那么指令流700继续到框722,其中从所保存的寄存器列表移除经覆写的寄存器。指令流700从框722返回到框714,其中将下一指令加载到解码级205中且由解码逻辑电路406处理所述指令。
结合本文所揭示的实施例而描述的各种说明性逻辑块、模块、电路、元件和/或组件可用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑组件、离散门或晶体管逻辑、离散硬件组件或其经设计以执行本文所描述的功能的任何组合来实施或执行。通用处理器可以是微处理器,但在替代实施例中,处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器也可实施为计算组件的组合,例如DSP与微处理器的组合、多个微处理器、结合DSP核心的一个或一个以上微处理器,或任何其它此配置。
尽管本文已说明和描述特定实施例,但所属领域的一般技术人员了解,预计实现相同目的的任何布置可替代所展示的特定实施例,且本发明在其它环境中具有其它应用。本申请案希望涵盖本发明的任何修改或变化。所附权利要求书决不希望将本发明的范围限于本文描述的特定实施例。
Claims (25)
1.一种用于当从管线处理器中的过程返回时从链接栈检索返回地址的方法,其包括:
识别可操作以从软件栈检索返回地址的检索指令;
识别可操作以分支到所述返回地址的分支指令;
识别过程返回序列,所述过程返回序列包括所述检索指令和所述分支指令的组合;
响应于所述过程返回序列被识别而从所述链接栈检索所述返回地址;以及
使用所述返回地址来提取后续指令。
2.根据权利要求1所述的方法,其中所述检索指令是上托指令。
3.根据权利要求1所述的方法,其中所述检索指令是加载指令。
4.根据权利要求1所述的方法,其中所述分支指令是BX指令。
5.根据权利要求1所述的方法,其中所述分支指令是MOV指令。
6.根据权利要求1所述的方法,其中所述识别所述检索指令进一步包括识别含有所述返回地址的寄存器。
7.根据权利要求1所述的方法,其中识别所述检索指令进一步包括维持寄存器列表,其中所述寄存器列表具有多个寄存器,其中所述多个寄存器中的至少一个寄存器含有所述返回地址。
8.根据权利要求7所述的方法,其中维持所述寄存器列表包括在所述多个寄存器中的任一者由后续指令覆写的情况下从所述寄存器列表移除寄存器。
9.根据权利要求1所述的方法,其中由检测逻辑电路执行识别所述分支指令。
10.根据权利要求9所述的方法,其中预解码逻辑电路中包含所述检测逻辑电路。
11.根据权利要求9所述的方法,其中解码逻辑电路中包含所述检测逻辑电路。
12.根据权利要求1所述的方法,其中识别所述分支指令进一步包括在指令高速缓冲存储器中以旗标标记所述分支指令。
13.一种管线处理器,其包括:
线缓冲器,所述线缓冲器耦合到指令高速缓冲存储器,
提取逻辑电路,其耦合到所述指令高速缓冲存储器,所述提取逻辑电路具有存储预测性返回地址的链接栈,其中指令从所述线缓冲器加载到所述指令高速缓冲存储器中,所述提取逻辑电路从所述指令高速缓冲存储器检索指令,
预解码逻辑电路,其与所述线缓冲器通信,其中所述预解码逻辑电路进一步包括用于识别过程返回序列的检测逻辑电路,所述过程返回序列包括检索指令和分支指令的组合,所述检索指令可操作以从软件栈检索返回地址,所述分支指令分支到所述检索的返回地址,所述管线处理器响应于对所述过程返回序列的所述识别而从所述链接栈检索所述预测的返回地址。
14.根据权利要求13所述的管线处理器,其中当所述分支指令从所述线缓冲器加载到所述指令高速缓冲存储器中时,所述检测逻辑电路以旗标标记所述过程返回序列的所述分支指令。
15.根据权利要求14所述的管线处理器,其中所述提取逻辑电路根据所述以旗标标记的信息识别所述过程返回序列。
16.根据权利要求15所述的管线处理器,其中所述提取逻辑电路内的返回选择器逻辑电路根据所述以旗标标记的信息识别所述返回序列。
17.根据权利要求13所述的管线处理器,其中所述检索指令是上托指令。
18.根据权利要求13所述的管线处理器,其中所述检索指令是加载指令。
19.根据权利要求13所述的管线处理器,其中所述分支指令是BX指令。
20.一种管线处理器,其包括:
提取逻辑电路,其具有存储所预测的返回地址的链接栈,所述提取逻辑电路从指令高速缓冲存储器提取指令,
解码逻辑电路,所述解码逻辑电路耦合到所述提取逻辑电路,其中所述提取的指令由所述解码逻辑电路解码,所述解码逻辑电路进一步包括检测逻辑电路,其中所述检测逻辑电路识别过程返回序列,所述过程返回序列包括检索指令和分支指令的组合,所述检索指令可操作以从软件栈检索地址,所述分支指令可操作以分支到所述检索的地址,所述管线处理器响应于对所述过程返回序列的所述识别而从所述链接栈检索所述预测的返回地址。
21.根据权利要求20所述的管线处理器,其中所述提取逻辑电路使用所述检索的地址来提取指令。
22.根据权利要求20所述的管线处理器,其中所述检索指令是上托指令。
23.根据权利要求20所述的管线处理器,其中所述检索指令是加载指令。
24.根据权利要求20所述的管线处理器,其中所述分支指令分支到所述检索指令所识别的地址。
25.根据权利要求20所述的管线处理器,其中所述分支指令是MOV指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/934,264 US8341383B2 (en) | 2007-11-02 | 2007-11-02 | Method and a system for accelerating procedure return sequences |
US11/934,264 | 2007-11-02 | ||
PCT/US2008/081947 WO2009059100A1 (en) | 2007-11-02 | 2008-10-31 | A method and a system for accelerating procedure return sequences |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101884025A CN101884025A (zh) | 2010-11-10 |
CN101884025B true CN101884025B (zh) | 2014-04-09 |
Family
ID=40085506
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200880118806.3A Expired - Fee Related CN101884025B (zh) | 2007-11-02 | 2008-10-31 | 用于使过程返回序列加速的方法和系统 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8341383B2 (zh) |
EP (1) | EP2220556B1 (zh) |
JP (3) | JP5301554B2 (zh) |
KR (1) | KR101254067B1 (zh) |
CN (1) | CN101884025B (zh) |
WO (1) | WO2009059100A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7587580B2 (en) * | 2005-02-03 | 2009-09-08 | Qualcomm Corporated | Power efficient instruction prefetch mechanism |
US8341383B2 (en) * | 2007-11-02 | 2012-12-25 | Qualcomm Incorporated | Method and a system for accelerating procedure return sequences |
US9411590B2 (en) * | 2013-03-15 | 2016-08-09 | Qualcomm Incorporated | Method to improve speed of executing return branch instructions in a processor |
US9703948B2 (en) * | 2014-03-28 | 2017-07-11 | Intel Corporation | Return-target restrictive return from procedure instructions, processors, methods, and systems |
GB2542831B (en) * | 2015-09-30 | 2018-05-30 | Imagination Tech Ltd | Fetch unit for predicting target for subroutine return instructions |
GB2551548B (en) | 2016-06-22 | 2019-05-08 | Advanced Risc Mach Ltd | Register restoring branch instruction |
US11055098B2 (en) * | 2018-07-24 | 2021-07-06 | Advanced Micro Devices, Inc. | Branch target buffer with early return prediction |
WO2021141760A1 (en) * | 2020-01-06 | 2021-07-15 | Quadric. Io, Inc | Systems and methods for optimizing nested loop instructions in pipeline processing stages |
US11586440B2 (en) * | 2021-06-01 | 2023-02-21 | International Business Machines Corporation | Link stack based instruction prefetch augmentation |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5812813A (en) * | 1996-07-29 | 1998-09-22 | Integrated Device Technology, Inc. | Apparatus and method for of register changes during execution of a micro instruction tracking sequence |
US6374350B1 (en) * | 1998-02-20 | 2002-04-16 | Intel Corporation | System and method of maintaining and utilizing multiple return stack buffers |
US6898698B1 (en) * | 1999-09-29 | 2005-05-24 | Fujitsu Limited | Device predicting a branch of an instruction equivalent to a subroutine return and a method thereof |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0417916B1 (en) * | 1989-09-13 | 1998-12-16 | Digital Equipment Corporation | Procedure state descriptor system for digital data processors |
JPH06131250A (ja) * | 1992-10-20 | 1994-05-13 | Toshiba Corp | データ処理装置 |
JPH07239782A (ja) * | 1994-02-28 | 1995-09-12 | Toshiba Corp | 演算処理装置 |
JPH07281892A (ja) * | 1994-04-06 | 1995-10-27 | Hitachi Ltd | 情報処理装置 |
JP2735523B2 (ja) * | 1995-11-29 | 1998-04-02 | 日本電気アイシーマイコンシステム株式会社 | プロシージャ・ステップ処理方法 |
US6094716A (en) | 1998-07-14 | 2000-07-25 | Advanced Micro Devices, Inc. | Register renaming in which moves are accomplished by swapping rename tags |
US6363473B1 (en) * | 1999-04-01 | 2002-03-26 | Compaq Information Technologies Group, L.P. | Simulated memory stack in a stackless environment |
GB2358261B (en) * | 2000-01-17 | 2004-06-09 | Advanced Risc Mach Ltd | Data processing with native and interpreted program instruction words |
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 |
US6898699B2 (en) | 2001-12-21 | 2005-05-24 | Intel Corporation | Return address stack including speculative return address buffer with back pointers |
US7017030B2 (en) * | 2002-02-20 | 2006-03-21 | Arm Limited | Prediction of instructions in a data processing apparatus |
US7996659B2 (en) * | 2005-06-06 | 2011-08-09 | Atmel Corporation | Microprocessor instruction that allows system routine calls and returns from all contexts |
US7478228B2 (en) * | 2006-08-31 | 2009-01-13 | Qualcomm Incorporated | Apparatus for generating return address predictions for implicit and explicit subroutine calls |
US8341383B2 (en) * | 2007-11-02 | 2012-12-25 | Qualcomm Incorporated | Method and a system for accelerating procedure return sequences |
-
2007
- 2007-11-02 US US11/934,264 patent/US8341383B2/en active Active
-
2008
- 2008-10-31 KR KR1020107012265A patent/KR101254067B1/ko not_active IP Right Cessation
- 2008-10-31 EP EP08844409.6A patent/EP2220556B1/en not_active Not-in-force
- 2008-10-31 CN CN200880118806.3A patent/CN101884025B/zh not_active Expired - Fee Related
- 2008-10-31 JP JP2010533174A patent/JP5301554B2/ja not_active Expired - Fee Related
- 2008-10-31 WO PCT/US2008/081947 patent/WO2009059100A1/en active Application Filing
-
2013
- 2013-04-30 JP JP2013095916A patent/JP5815596B2/ja not_active Expired - Fee Related
-
2015
- 2015-02-16 JP JP2015027891A patent/JP2015133126A/ja active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5812813A (en) * | 1996-07-29 | 1998-09-22 | Integrated Device Technology, Inc. | Apparatus and method for of register changes during execution of a micro instruction tracking sequence |
US6374350B1 (en) * | 1998-02-20 | 2002-04-16 | Intel Corporation | System and method of maintaining and utilizing multiple return stack buffers |
US6898698B1 (en) * | 1999-09-29 | 2005-05-24 | Fujitsu Limited | Device predicting a branch of an instruction equivalent to a subroutine return and a method thereof |
Also Published As
Publication number | Publication date |
---|---|
JP2015133126A (ja) | 2015-07-23 |
EP2220556B1 (en) | 2019-03-06 |
US8341383B2 (en) | 2012-12-25 |
CN101884025A (zh) | 2010-11-10 |
EP2220556A1 (en) | 2010-08-25 |
US20090119486A1 (en) | 2009-05-07 |
KR20100087357A (ko) | 2010-08-04 |
WO2009059100A1 (en) | 2009-05-07 |
JP5815596B2 (ja) | 2015-11-17 |
JP2013211023A (ja) | 2013-10-10 |
JP2011503718A (ja) | 2011-01-27 |
JP5301554B2 (ja) | 2013-09-25 |
KR101254067B1 (ko) | 2013-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101884025B (zh) | 用于使过程返回序列加速的方法和系统 | |
JP3798404B2 (ja) | 2レベルの分岐予測キャッシュによる分岐予測 | |
US8069336B2 (en) | Transitioning from instruction cache to trace cache on label boundaries | |
US4991078A (en) | Apparatus and method for a pipelined central processing unit in a data processing system | |
US5276882A (en) | Subroutine return through branch history table | |
JP2744890B2 (ja) | ブランチ予測式データ処理装置および動作方法 | |
US10162635B2 (en) | Confidence-driven selective predication of processor instructions | |
KR20080023723A (ko) | 분기 명령들을 예측하기 위한 방법 및 장치 | |
JPH0773036A (ja) | 命令シーケンスを識別してタグを付加する方法 | |
CN1282024A (zh) | 具有静态转移预测支持的去耦取指令-执行引擎 | |
US7243350B2 (en) | Speculative execution for java hardware accelerator | |
KR100986375B1 (ko) | 피연산자의 빠른 조건부 선택 | |
US7426631B2 (en) | Methods and systems for storing branch information in an address table of a processor | |
US5901309A (en) | Method for improved interrupt handling within a microprocessor | |
US8285976B2 (en) | Method and apparatus for predicting branches using a meta predictor | |
US20070220235A1 (en) | Instruction subgraph identification for a configurable accelerator | |
US7873813B2 (en) | Variable length VLIW instruction with instruction fetch control bits for prefetching, stalling, or realigning in order to handle padding bits and instructions that cross memory line boundaries | |
KR100431975B1 (ko) | 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템 | |
US5890006A (en) | Apparatus for extracting instruction specific bytes from an instruction | |
EP2348399B1 (en) | System and method for processing interrupts in a computing system | |
CN112181497B (zh) | 一种分支目标预测地址在流水线中的传递方法和装置 | |
JP3335735B2 (ja) | 演算処理装置 | |
WO1998002806A1 (en) | A data address prediction structure utilizing a stride prediction method | |
WO1998020416A1 (en) | A stride-based data address prediction structure | |
EP0912929A1 (en) | A data address prediction structure and a method for operating the same |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
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: 20140409 Termination date: 20211031 |