CN102360283A - 一种微处理器子程序调用的处理方法及其装置 - Google Patents

一种微处理器子程序调用的处理方法及其装置 Download PDF

Info

Publication number
CN102360283A
CN102360283A CN2011103002838A CN201110300283A CN102360283A CN 102360283 A CN102360283 A CN 102360283A CN 2011103002838 A CN2011103002838 A CN 2011103002838A CN 201110300283 A CN201110300283 A CN 201110300283A CN 102360283 A CN102360283 A CN 102360283A
Authority
CN
China
Prior art keywords
delay
instruction
slot
subroutine call
groove
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
Application number
CN2011103002838A
Other languages
English (en)
Other versions
CN102360283B (zh
Inventor
张铁军
王东辉
王琪
洪缨
侯朝焕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Acoustics CAS
Original Assignee
Institute of Acoustics CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Acoustics CAS filed Critical Institute of Acoustics CAS
Priority to CN201110300283.8A priority Critical patent/CN102360283B/zh
Publication of CN102360283A publication Critical patent/CN102360283A/zh
Application granted granted Critical
Publication of CN102360283B publication Critical patent/CN102360283B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

本发明公开了一种微处理器子程序调用的处理方法及其装置,该方法包括以下步骤:获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;从子程序调用类指令中提取无符号立即数;根据无符号立即数得到延迟槽内的指令总数;根据延迟槽内的指令总数得到子程序调用类指令的返回地址。该装置包括:获取单元,用于获取子程序调用类指令;提取单元,从子程序调用类指令中提取无符号立即数;计算单元,根据无符号立即数得到延迟槽内的指令总数,通过延迟槽内的指令总数计算出子程序调用类指令的返回地址。根据本发明的方法及其装置,大大的提高了处理器在处理子程序调用类指令时的性能。

Description

一种微处理器子程序调用的处理方法及其装置
技术领域
本发明涉及一种处理器技术,尤其涉及一种微处理器子程序调用的处理方法及其装置。
背景技术
在各类应用程序中,条件跳转指令是频繁使用的一种指令,子程序调用类和循环是条件跳转指令应用的主要领域之一,条件跳转指令的高效设计是处理器高效运行的关键。
现有的处理器中,跳转指令一般采用J指令或B指令来实现,这类跳转指令主要实现将程序跳转到特定的地址,其中立即数或寄存器作为偏移量。
子程序调用类跳转要求首先能跳转到子程序入口地址,然后在子程序执行结束后,指令的执行顺序须返回到调用位置。因为子程序可能会从许多不同的地址被调用,所以,必须保存有关的调用返回地址。保存返回地址有很多方法,如在执行转移之前,由调用程序计算出返回地址,并把它存储到标准存储器或特定寄存器或压入堆栈,以便于程序作为返回地址使用。由于子程序调用的使用很频繁,因此大多数处理器都采用指令实现子程序的跳转和返回以提高效率。
子程序调用类跳转与返回一般使用特殊指令,本发明中针对子程序调用类跳转指令命名为CALL,对子程序返回跳转指令命名为RET。子程序调用类跳转指令实现跳转的同时计算返回地址,并且将返回地址存储到特定的寄存器中;RET指令通过读取特定的寄存器中的地址,并且跳转到该地址,实现程序的返回。如果出现嵌套子程序的调用,则会通过指令将特定寄存器中保存的返回地址压入存储器的堆栈中。以保证现有的返回地址不会被嵌套子程序的返回地址所覆盖。
目前的大多数处理器都采用流水线结构来提高性能,为了消除跳转指令带来的开销,一般采用延迟槽填充或刷新流水线的方法来实现。对于采用延迟槽方法实现的处理器,子程序调用类跳转指令返回地址(retPC)的计算可由公式1获得。
公式1:retPC=PCcall_package_end+Ninst_delay_slot*(Linst/Step)
其中,PCcall_package_end代表子程序调用类跳转指令所在执行包的最后一条指令地址,该地址可由执行包首地址和执行包指令条数在流水线的执行级中计算获得;Ninst_delay_slot代表延迟槽中的指令的总数目;Linst是所述子程序调用类指令的编码位长,例如现在大多数DSP处理器指令编码位长为32比特;Step代表处理器的最小寻址单元位长;例如按字节寻址的处理器的最小寻址单元位长为8比特,按字寻址的处理器的最小寻址单元位长为32比特。
对于单发射的处理器而言,每个执行包都只有一条指令,因而PCcall_package_end=PCcall_package_start=PCcall,Ninst_delay_slot=Ndelay_slot。其中,PCcall_package_start代表子程序调用类跳转指令所在执行包的首指令地址;PCcall代表子程序调用类跳转指令的地址;Ndelay_slot代表延迟槽的数目。Ndelay_slot只跟流水线结构有关,因而对于处理器,Ndelay_slot是确定的。那么retPC的计算可由公式2获得。
公式2:retPC=PCcall+Ndelay_slot*(Linst/Step)
在单发射处理器中,公式2中所有参数都是确定的,因而执行子程序调用类跳转指令时就能计算出返回地址,通过硬件结构将此返回地址存储到特定的寄存器中,便于返回指令RET的调用。
在多发射处理器中,每个执行包中的指令数目不确定,因而若想实现执行子程序调用类跳转指令时能计算出返回地址,就必须能够确定公式中的参数:延迟槽内指令总数Ninst_delay_slot
子程序调用类跳转指令一般通过固定延迟槽内每个执行包中指令数目来固定延迟槽内指令总数,从而计算返回地址。
如德州仪器(Texas Instruments,TI)公司的DSP芯片C64+系列支持子程序调用类跳转指令,可同时发射指令数目为8条,即Nissue为8,延迟槽数目为5,即Ndelay_slot为5,但其延迟槽内的执行包都必须是单指令包,而且大多数情况下都是通过NOP指令来填充延迟槽。当处理器执行子程序调用类跳转指令时,指令并行度为1,其效率和单发射处理器一样。
TI公司的C64+系列采用固定子程序调用类跳转指令延迟槽内执行包指令数目同理可以采用固定子程序调用类跳转指令延迟槽内执行包指令数目为X来固定Ninst_delay_slot,即Ninst_delay_slot=Ndelay_slot*X,X的范围为1≤X≤Nissue。采用这种方法返回地址计算可由公式3得到:
公式3:retPC=PCcall_package_end+(Ndelay_slot*X)*(Linst/Step)
延迟槽中指令调度依赖于编译器以及应用程序特点,指令前后相关性的检测,以及处理器的硬件资源结构等。因而对于不同的处理器,不同的应用程序,以及同一应用程序中不同的子程序调用类跳转指令,可调度到延迟槽内的指令数目(例如Y)不一定。若Y>Ndelay_slot*X,则X的设置相对当前跳转太小,限定了延迟槽并行度的开发,从而影响了多发射处理器高性能发挥;若Y<Ndelay_slot*X,则X的设置相对于当前跳转太大,又需要填充Y-Ndelay_slot*X条NOP指令。因此,这种方法灵活性差,会降低处理器的高性能或带来指令代码冗余、浪费程序存储空间,取指带宽和功耗等问题。
发明内容
本发明的目的是实现延迟槽内的每个执行包可以根据指令的调度情况设置指令数目,从而降低处理器在处理子程序跳转指令时,引发的处理器性能降低或由带来冗余指令进而引起程序存储空间、取指带宽以及功耗浪费等问题。
为实现上述目的,本发明一方面提供一种微处理器子程序调用的处理方法,该方法包括以下步骤:
获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;从子程序调用类指令中提取无符号立即数;根据无符号立即数得到延迟槽内的指令总数;根据延迟槽内的指令总数得到子程序调用类指令的返回地址。
本发明另一方面提供一种微处理器子程序调用的处理装置,该装置包括:
获取单元,获取子程序调用类指令,上述子程序调用类指令携带无符号立即数;提取单元,从子程序调用类指令中提取无符号立即数;计算单元,根据无符号立即数得到延迟槽内的指令总数,通过延迟槽内的指令总数得到子程序调用类指令的返回地址。
根据本发明的方法及其装置,可以灵活分配延迟槽内执行包的指令数目,既可以支持延迟槽中执行包中最大并行度的开发,也无需填充多余的NOP等指令。大大降低了处理器在处理子程序调用类指令时,存在的延迟槽并行度开发太小或指令代码冗余以及由此带来的程序存储空间、取指带宽以及功耗浪费等问题。大大的提高了处理器在处理子程序调用类指令时的性能。
附图说明
通过以下结合附图以举例方式对本发明的实施方式进行详细描述后,本发明的其他特征、特点和优点将会更加明显。
图1为现有技术中带立即数参数的子程序调用类跳转指令编码结构;
图2为现有技术中带寄存器参数的子程序调用类跳转指令编码结构;
图3为本发明实施例微处理器子程序调用的处理方法流程图;
图4为本发明一个实施例带立即数参数的子程序调用类跳转指令编码结构;
图5为本发明一个实施例带寄存器参数的子程序调用类跳转指令编码结构;
图6为本发明一个实施例带立即数参数的子程序调用类跳转指令编码结构示例;
图7为本发明一个实施例带寄存器参数的子程序调用类跳转指令编码结构示例;
图8为本发明实施例微处理器子程序调用的处理装置结构图。
具体实施方式
本发明通过在子程序调用类跳转指令编码中增加一个无符号立即数,用于计算延迟槽内指令总数,实现延迟槽内执行包的指令数目可以根据延迟槽指令调度情况灵活分配。
图1为现有技术中带立即数参数的子程序调用类跳转指令编码结构。如图所示,指令编码位长为List比特,指令标识位长度为a比特,并行位等长度为b比特,剩下立即数immn=Linst-a-b比特,用于计算转移地址。立即数immn代表的是跳转偏移量,跳转目标地址FPC的计算由公式4获得。
公式4:FPC=PCcall_package_end+immn*(Linst/Step)
相应地,子程序调用类跳转指令在实现跳转的同时,根据延迟槽数目Ndelay_slot和固定的延迟槽内的执行包指令数目X,根据上述公式3计算出子程序返回地址,并存入特定的寄存器中,返回跳转RET指令通过读取上述特定的寄存器中的返回地址,并且跳转到该地址。
图2为现有技术中带寄存器参数的子程序调用类跳转指令编码结构。如图所示,指令编码位长为Linst比特,指令标识位长度为a比特,并行位等长度为b比特,与图1不同的是,其跳转偏移量不是用立即数表示,而是存在寄存器中,寄存器的索引占用指令编码的c比特,剩下n比特保留。其支持的跳转偏移地址只与寄存器的位数有关。相应地,子程序调用类跳转指令在实现跳转的同时,根据延迟槽内的执行包指令数目X和延迟槽数目,根据公式3计算出子程序返回地址,并存入特定的寄存器中。
图3为本发明实施例微处理器子程序调用的处理方法流程图。该方法包括步骤301-304:
在步骤301,获取子程序调用类指令,该子程序调用类指令携带无符号立即数uimmm,无符号立即数uimmm值根据微处理器延迟槽的指令调度情况进行灵活分配。
图4所示的子程序调用类跳转指令编码是在图1所示的子程序调用类跳转指令编码中增加的一个无符号立即数uimmm。如图4所示,指令编码位长为Linst比特,指令标识位长度为a比特,并行位等长度为b比特,无符号立即数uimmm占m比特,立即数immn占n比特。
在一个实施例中,以某一微处理器设计为例,子程序调用类跳转指令编码如图6所示,其中指令编码位长Linst为32比特;标识位占5比特;细类标识位占1比特;pr代表推断寄存器的索引,占3比特;P代表并行标志位,占1比特。该处理器同时发射的指令数目为4,即Nissue为4;延迟槽的数目为5,即Ndelay_slot为5。以字节为单位寻址,即最小寻址单元位长Step为8比特。通过Nissue值和Ndelay_slot值,根据公式7(a)和公式7(b),可以计算获得无符号立即数uimmm所占位数m的值为4。
图5所示的子程序调用类跳转指令编码是在图2所示的子程序调用类跳转指令编码中增加的一个无符号立即数uimmm。如图5所示,无符号立即数uimmm占指令编码的m比特,无符号立即数uimmm只是占用了指令编码中保留位n的多余保留位,对指令其余参数没有任何影响,其支持的最大跳转偏移仍然由寄存器的位数决定。
在上一个实施例中,以同一款微处理器为例,如图7所示,指令编码位长为32比特,指令标识位长度为5比特;细类标识位占1比特;寄存器的索引占5比特;保留位占13比特;pr代表推断寄存器的索引,占3比特;P代表并行标志位,占1比特。该处理器同时发射的指令数目为4,即Nissue为4,无符号立即数uimmm占4比特,取值在0-15之间。延迟槽的数目为5,即Ndelay_slot为5。以字节为单位寻址,即最小寻址单元位长Step为8比特。
上述无符号立即数uimmm所占位数m的值是根据公式7(a)和公式7(b)获得。
公式7(a):2m-1+Ndelay_slot≥Nissue*Ndelay_slot
公式7(b):2m-1-1+Ndelay_slot<Nissue*Ndelay_slot
对于一款微处理器,由公式7(a)和公式7(b)获得的位数m值是固定的,与该处理器当前运行的程序无关。在程序编译阶段,根据微处理器能调用的延迟槽中指令数目情况计算出子程序调用类跳转指令中的无符号立即数uimmm值,并产生相应的子程序调用类跳转指令。
在步骤302,从子程序调用类指令中提取无符号立即数uimmm。
微处理器在译码阶段,从子程序调用类跳转指令编码结构中提取无符号立即数uimmm值。
在步骤303,根据无符号立即数uimmm得到延迟槽内的指令总数。
微处理器根据在步骤302提取的无符号立即数uimmm值,通过公式:Ninst_delay_slot=Ndelay_slot+uimmm,计算出延迟槽内的指令总数Ninst_delay_slot,其中Ndelay_slot是指令延迟槽数;uimmm是无符号立即数,无符号立即数uimmm的值可以为0到(Nissue-1)*Ndelay_slot之间,Nissue为多发射处理器可同时发射的指令数目。延迟槽内的指令总数范围由公式:Ndelay_slot≤Ninst_delay_slot≤Nissue*Ndelay_slot进行限定,即延迟槽内的指令总数Ninst_delay_slot大于等于Ndelay_slot且小于等于Nissue与Ndelay_slot的乘积。
在步骤304,根据延迟槽内的指令总数得到子程序调用类指令的返回地址。
微处理器根据延迟槽内的指令总数Ninst_delay_slot通过以下公式:retPC=PCcall_package_end+Ninst_delay_slot*(Linst/Step)计算出子程序调用类指令的返回地址retPC,其中PCcall_package_end是所述子程序调用类指令所在执行包的最后一条指令地址,PCcall_package_end可以由执行包首地址和执行包指令条数在流水线的执行级中计算得到;Linst是所述子程序调用类指令的长度,Step代表处理器的最小寻址单元位长。
图8为本发明实施例微处理器子程序调用的处理装置结构图。如图所示,该装置包括获取单元81、提取单元82和计算单元83。
获取单元81用于获取子程序调用类子程序调用类跳转指令,其中子程序调用类跳转指令携带无符号立即数uimmm。提取单元82从获取单元81获取的子程序调用类跳转指令中提取无符号立即数uimmm。计算单元83根据无符号立即数uimmm值计算延迟槽内的指令总数Ninst_delay_slot,并通过延迟槽内的指令总数Ninst_delay_slot计算出子程序调用类指令的返回地址retPC。
子程序调用类跳转指令携带的无符号立即数uimmm在程序编译阶段,根据微处理器能调用的延迟槽中指令数目情况计算获得。
具体地,计算单元82根据公式:Ninst_delay_slot=Ndelay_slot+uimmm,计算出延迟槽内的指令总数,其中Ninst_delay_slot是延迟槽内的指令总数,Ndelay_slot是指令延迟槽数,uimmm是无符号立即数。另外,计算单元82根据以下公式:retPC=PCcall_package_end+Ninst_delay_slot*(Linst/Step)计算出子程序调用类指令的返回地址,其中retPC是子程序返回地址,PCcall_package_end是所述子程序调用类指令所在执行包的最后一条指令地址,Linst是所述子程序调用类指令的编码位长,Step代表处理器的最小寻址单元位长。
本发明实施例装置的获取单元81、提取单元82和计算单元83分别为了实现图3中各个方法的相应流程,在此不再赘述。
显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。本发明所要求保护的范围仅由所述的权利要求书进行限定。

Claims (8)

1.一种微处理器子程序调用的处理方法,其特征在于包括以下步骤:
获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;
从所述子程序调用类指令中提取所述无符号立即数;
根据所述无符号立即数得到延迟槽内的指令总数;
根据所述延迟槽内的指令总数得到所述子程序调用类指令的返回地址。
2.根据权利要求1所述的方法,其特征在于:所述无符号立即数在程序编译阶段,根据处理器可调用的延迟槽中指令数目计算获得。
3.根据权利要求1所述的方法,其特征在于:所述根据所述无符号立即数得到延迟槽内的指令总数是通过公式Ninst_delay_slot=Ndelay_slot+uimmm计算获得,其中Ninst_delay_slot是延迟槽内的指令总数,Ndelay_slot是指令延迟槽数,uimmm是所述无符号立即数。
4.根据权利要求3所述的方法,其特征在于:所述Ninst_delay_slot大于等于Ndelay_slot,且小于等于Ndelay_slot与Nissue的乘积,其中Nissue是处理器同时发射指令数目。
5.根据权利要求1所述的方法,其特征在于:所述根据所述延迟槽内的指令总数得到子程序调用类指令的返回地址是通过公式retPC=PCcall_package_end+Ninst_delay_slot*(Linst/Step)获得,其中retPC是子程序返回地址,PCcall_package_end是所述子程序调用类指令所在执行包的最后一条指令地址,Linst是所述子程序调用类指令的编码位长,Step代表处理器的最小寻址单元位长。
6.一种微处理器子程序调用的处理装置,其特征在于包括:
获取单元,获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;
提取单元,从所述子程序调用类指令中提取所述无符号立即数;
计算单元,根据所述无符号立即数得到延迟槽内的指令总数,通过所述延迟槽内的指令总数得到子程序调用类指令的返回地址。
7.根据权利要求6所述的装置,其特征在于:所述计算单元根据公式Ninst_delay_slot=Ndelay_slot+uimmm得到延迟槽内的指令总数,其中Ninst_delay_slot是延迟槽内的指令总数,Ndelay_slot是指令延迟槽数,uimmm是所述无符号立即数。
8.根据权利要求6所述的装置,其特征在于:所述计算单元根据公式retPC=PCcall_package_end+Ninst_delay_slot*(Linst/Step)得到子程序调用类指令的返回地址,其中retPC是子程序返回地址,PCcall_package_end是所述子程序调用类指令所在执行包的最后一条指令地址,Linst是所述子程序调用类指令的编码位长,Step代表处理器的最小寻址单元位长。
CN201110300283.8A 2011-09-28 2011-09-28 一种微处理器子程序调用的处理方法及其装置 Expired - Fee Related CN102360283B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110300283.8A CN102360283B (zh) 2011-09-28 2011-09-28 一种微处理器子程序调用的处理方法及其装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110300283.8A CN102360283B (zh) 2011-09-28 2011-09-28 一种微处理器子程序调用的处理方法及其装置

Publications (2)

Publication Number Publication Date
CN102360283A true CN102360283A (zh) 2012-02-22
CN102360283B CN102360283B (zh) 2014-01-08

Family

ID=45585617

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110300283.8A Expired - Fee Related CN102360283B (zh) 2011-09-28 2011-09-28 一种微处理器子程序调用的处理方法及其装置

Country Status (1)

Country Link
CN (1) CN102360283B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577242A (zh) * 2013-11-14 2014-02-12 中国科学院声学研究所 针对已调度汇编代码的控制流图重构方法
CN113110879A (zh) * 2021-03-31 2021-07-13 北京中科晶上科技股份有限公司 指令处理方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6889320B1 (en) * 1999-12-30 2005-05-03 Texas Instruments Incorporated Microprocessor with an instruction immediately next to a branch instruction for adding a constant to a program counter
CN101156137A (zh) * 2005-03-30 2008-04-02 Arm有限公司 选择子例程返回机制
CN101770358A (zh) * 2010-02-10 2010-07-07 北京龙芯中科技术服务中心有限公司 微处理器跳转指令分支预测处理系统和方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6889320B1 (en) * 1999-12-30 2005-05-03 Texas Instruments Incorporated Microprocessor with an instruction immediately next to a branch instruction for adding a constant to a program counter
CN101156137A (zh) * 2005-03-30 2008-04-02 Arm有限公司 选择子例程返回机制
CN101770358A (zh) * 2010-02-10 2010-07-07 北京龙芯中科技术服务中心有限公司 微处理器跳转指令分支预测处理系统和方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577242A (zh) * 2013-11-14 2014-02-12 中国科学院声学研究所 针对已调度汇编代码的控制流图重构方法
CN103577242B (zh) * 2013-11-14 2016-11-02 中国科学院声学研究所 针对已调度汇编代码的控制流图重构方法
CN113110879A (zh) * 2021-03-31 2021-07-13 北京中科晶上科技股份有限公司 指令处理方法及装置

Also Published As

Publication number Publication date
CN102360283B (zh) 2014-01-08

Similar Documents

Publication Publication Date Title
US9396172B2 (en) Method for data chunk partitioning in XML parsing and method for XML parsing
CN101916180B (zh) Risc处理器中执行寄存器类型指令的方法和其系统
CN104335168A (zh) 分支预测预加载
CN109101276B (zh) 在cpu中执行指令的方法
US9304898B2 (en) Hardware-based array compression
CN102508635A (zh) 一种处理器装置及其循环处理方法
US10846228B2 (en) Instruction cache management based on temporal locality
CN102298352B (zh) 高性能可编程控制器专用处理器体系结构及其实现方法
CN101506773A (zh) 用于模拟显式子例行程序调用的分支预测行为的方法和设备
CN101901132B (zh) 微处理器以及相关储存方法
CN103593164B (zh) 用于指令代码转译的定制链接存根
CN101884025B (zh) 用于使过程返回序列加速的方法和系统
WO2012151331A1 (en) Methods and apparatus for constant extension in a processor
CN102141903B (zh) 用于16/32位混合指令的对称编码装置与译码装置
CN105391514B (zh) 字符编码解码方法及装置
CN102360283B (zh) 一种微处理器子程序调用的处理方法及其装置
CN1266591C (zh) 用于java硬件加速器的猜测执行的方法和装置
CN104572024A (zh) 一种用于函数返回地址预测的装置及方法
CN108027728A (zh) 动态寄存器虚拟化
CN103744642A (zh) 用于改进处理器中直接跳转的方法及系统
CN101001089A (zh) 一种纠错码解码中的钱搜索方法及装置
CN101369223B (zh) 指令编码方法和处理器
CN112445520B (zh) 针对循环内条件转移指令的转移预测优化方法
CN105159864A (zh) 一种不需要对加、减、乘、除进行操作的24点求解方法
CN101989188A (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
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: 20140108

Termination date: 20190928