CN102360283B - 一种微处理器子程序调用的处理方法及其装置 - Google Patents
一种微处理器子程序调用的处理方法及其装置 Download PDFInfo
- Publication number
- CN102360283B CN102360283B CN201110300283.8A CN201110300283A CN102360283B CN 102360283 B CN102360283 B CN 102360283B CN 201110300283 A CN201110300283 A CN 201110300283A CN 102360283 B CN102360283 B CN 102360283B
- Authority
- CN
- China
- Prior art keywords
- instruction
- delay
- slot
- groove
- subroutine call
- 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
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 (4)
1.一种微处理器子程序调用的处理方法,其特征在于包括以下步骤:
获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;
从所述子程序调用类指令中提取所述无符号立即数;
根据所述无符号立即数得到延迟槽内的指令总数;
根据所述延迟槽内的指令总数得到所述子程序调用类指令的返回地址;
所述延迟槽内的指令总数是通过公式Ninst_delay_slot=Ndelay_slot+uimmm计算获得,其中Ninst_delay_slot是延迟槽内的指令总数,Ndelay_slot是指令延迟槽数,uimmm是所述无符号立即数;
所述子程序调用类指令的返回地址是通过公式retPC=PCcall_package_end+Ninst_delay_slot*(Linst/Step)获得,其中retPC是子程序返回地址,PCcall_package_end是所述子程序调用类指令所在执行包的最后一条指令地址,Ninst_delay_slot是延迟槽内的指令总数,Linst是所述子程序调用类指令的编码位长,Step代表处理器的最小寻址单元位长。
2.根据权利要求1所述的方法,其特征在于:所述无符号立即数在程序编译阶段,根据处理器可调用的延迟槽中指令数目计算获得。
3.根据权利要求1所述的方法,其特征在于:所述Ninst_delay_slot大于等于Ndelay_slot,且小于等于Ndelay_slot与Nissue的乘积,其中Nissue是处理器同时发射指令数目。
4.一种微处理器子程序调用的处理装置,其特征在于包括:
获取单元,获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;
提取单元,从所述子程序调用类指令中提取所述无符号立即数;
计算单元,根据所述无符号立即数得到延迟槽内的指令总数,通过所述延迟槽内的指令总数得到子程序调用类指令的返回地址;
所述计算单元根据公式Ninst_delay_slot=Ndelay_slot+uimmm得到延迟槽内的指令总数,其中Ninst_delay_slot是延迟槽内的指令总数,Ndelay_slot是指令延迟槽数,uimmm是所述无符号立即数;
所述计算单元根据公式retPC=PCcall_package_end+Ninst_delay_slot*(Linst/Step)得到子程序调用类指令的返回地址,其中retPC是子程序返回地址,PCcall_package_end是所述子程序调用类指令所在执行包的最后一条指令地址,Ninst_delay_slot是延迟槽内的指令总数,Linst是所述子程序调用类指令的编码位长,Step代表处理器的最小寻址单元位长。
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 CN102360283A (zh) | 2012-02-22 |
CN102360283B true 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) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103577242B (zh) * | 2013-11-14 | 2016-11-02 | 中国科学院声学研究所 | 针对已调度汇编代码的控制流图重构方法 |
CN113110879B (zh) * | 2021-03-31 | 2023-05-30 | 北京中科晶上科技股份有限公司 | 指令处理方法及装置 |
Citations (3)
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 | 北京龙芯中科技术服务中心有限公司 | 微处理器跳转指令分支预测处理系统和方法 |
-
2011
- 2011-09-28 CN CN201110300283.8A patent/CN102360283B/zh not_active Expired - Fee Related
Patent Citations (3)
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 | 北京龙芯中科技术服务中心有限公司 | 微处理器跳转指令分支预测处理系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102360283A (zh) | 2012-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101916180B (zh) | Risc处理器中执行寄存器类型指令的方法和其系统 | |
KR101607549B1 (ko) | 명령어의 제어 흐름 추적 | |
CN109918130A (zh) | 一种具有快速数据旁路结构的四级流水线risc-v处理器 | |
CN102662640B (zh) | 双重分支目标缓冲器和分支目标处理系统及处理方法 | |
CN109101276B (zh) | 在cpu中执行指令的方法 | |
CN101223504B (zh) | 高速缓存用于多状态处理器的指令 | |
CN104335168A (zh) | 分支预测预加载 | |
CN105975252B (zh) | 一种处理指令的流水线的实现方法、装置及处理器 | |
CN102508635A (zh) | 一种处理器装置及其循环处理方法 | |
CN101506773A (zh) | 用于模拟显式子例行程序调用的分支预测行为的方法和设备 | |
US20080091921A1 (en) | Data prefetching in a microprocessing environment | |
US20120284489A1 (en) | Methods and Apparatus for Constant Extension in a Processor | |
CN101535951A (zh) | 用于辨识子例程调用的方法及设备 | |
CN103593164B (zh) | 用于指令代码转译的定制链接存根 | |
CN102938653A (zh) | 一种利用图形处理器gpu实现的并行rs译码方法 | |
GB2521019A (en) | Decoding instructions that are modified by one or more other instructions | |
CN1266591C (zh) | 用于java硬件加速器的猜测执行的方法和装置 | |
CN102360283B (zh) | 一种微处理器子程序调用的处理方法及其装置 | |
EP2980703B1 (en) | Instruction cache management based on temporal locality | |
CN112631660A (zh) | 一种并行提取指令的方法与可读存储介质 | |
CN101727312B (zh) | 一种支持自动纠错功能的返回地址栈实现方法 | |
CN102945148A (zh) | 一种并行指令集的实现方法 | |
CN104854556A (zh) | 建立用于子例程返回的分支目标指令高速缓冲存储器(btic)条目以减少执行管线泡,以及相关系统、方法和计算机可读媒体 | |
CN104572024A (zh) | 一种用于函数返回地址预测的装置及方法 | |
CN102779026B (zh) | 一种高性能dsp处理器中的指令多发射方法 |
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 |