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

文档序号:6434795阅读:202来源:国知局
专利名称:一种微处理器子程序调用的处理方法及其装置的制作方法
技术领域
本发明涉及一种处理器技术,尤其涉及一种微处理器子程序调用的处理方法及其装置。
背景技术
在各类应用程序中,条件跳转指令是频繁使用的一种指令,子程序调用类和循环是条件跳转指令应用的主要领域之一,条件跳转指令的高效设计是处理器高效运行的关键。现有的处理器中,跳转指令一般采用J指令或B指令来实现,这类跳转指令主要实现将程序跳转到特定的地址,其中立即数或寄存器作为偏移量。子程序调用类跳转要求首先能跳转到子程序入口地址,然后在子程序执行结束后,指令的执行顺序须返回到调用位置。因为子程序可能会从许多不同的地址被调用,所以,必须保存有关的调用返回地址。保存返回地址有很多方法,如在执行转移之前,由调用程序计算出返回地址,并把它存储到标准存储器或特定寄存器或压入堆栈,以便于程序作为返回地址使用。由于子程序调用的使用很频繁,因此大多数处理器都采用指令实现子程序的跳转和返回以提高效率。子程序调用类跳转与返回一般使用特殊指令,本发明中针对子程序调用类跳转指令命名为CALL,对子程序返回跳转指令命名为RET。子程序调用类跳转指令实现跳转的同时计算返回地址,并且将返回地址存储到特定的寄存器中;RET指令通过读取特定的寄存器中的地址,并且跳转到该地址,实现程序的返回。如果出现嵌套子程序的调用,则会通过指令将特定寄存器中保存的返回地址压入存储器的堆栈中。以保证现有的返回地址不会被嵌套子程序的返回地址所覆盖。目前的大多数处理器都采用流水线结构来提高性能,为了消除跳转指令带来的开销,一般采用延迟槽填充或刷新流水线的方法来实现。对于采用延迟槽方法实现的处理器, 子程序调用类跳转指令返回地址(retPC)的计算可由公式1获得。公式1 :retPC = PCcall—package—end+Ninst—delay—sl。t* (Linst/St 印)其中,PCcalljackage end代表子程序调用类跳转指令所在执行包的最后一条指令地址,该地址可由执行包首地址和执行包指令条数在流水线的执行级中计算获得;Ninst—delay— slot代表延迟槽中的指令的总数目;Linst是所述子程序调用类指令的编码位长,例如现在大多数DSP处理器指令编码位长为32比特Jt印代表处理器的最小寻址单元位长;例如按字节寻址的处理器的最小寻址单元位长为8比特,按字寻址的处理器的最小寻址单元位长为 32比特。对于单发射的处理器而言,每个执行包都只有一条指令,因而PCeall pa。kage end = PCcall_package_start _ PCcaH Ninst—delay—slot _ Ndelay—slot。胃巾,PCcall_package_start ^^^fej^ijfffi^ 跳转指令所在执行包的首指令地址;PC。all代表子程序调用类跳转指令的地址;Ndelay—sl。t代表延迟槽的数目。Ndelay—sl。t只跟流水线结构有关,因而对于处理器,Ndelay—sl。t是确定的。那么retPC的计算可由公式2获得。公式2 :retPC = PCcall+Ndelay sl。t* (Linst/St印)在单发射处理器中,公式2中所有参数都是确定的,因而执行子程序调用类跳转指令时就能计算出返回地址,通过硬件结构将此返回地址存储到特定的寄存器中,便于返回指令RET的调用。在多发射处理器中,每个执行包中的指令数目不确定,因而若想实现执行子程序调用类跳转指令时能计算出返回地址,就必须能够确定公式中的参数延迟槽内指令总数
Ninst_delay_slot °子程序调用类跳转指令一般通过固定延迟槽内每个执行包中指令数目来固定延迟槽内指令总数,从而计算返回地址。如德州仪器(Texas Instruments, Tl)公司的DSP芯片C64+系列支持子程序调用类跳转指令,可同时发射指令数目为8条,S卩Nissue为8,延迟槽数目为5,即Ndelay sl。t为5,但其延迟槽内的执行包都必须是单指令包,而且大多数情况下都是通过NOP指令来填充延迟槽。当处理器执行子程序调用类跳转指令时,指令并行度为1,其效率和单发射处理器一样。TI公司的C64+系列采用固定子程序调用类跳转指令延迟槽内执行包指令数目同理可以采用固定子程序调用类跳转指令延迟槽内执行包指令数目为X来固定Ninst—delay—sl。t, 即 Ninst_
delay_slot ^delay_slot^<·^·‘
X的范围为1 < X彡Nissue。采用这种方法返回地址计算可由
公式3得到公式3 :retPC = PCcall package end+ (Ndelay slot^X) * (Linst/St印)延迟槽中指令调度依赖于编译器以及应用程序特点,指令前后相关性的检测,以及处理器的硬件资源结构等。因而对于不同的处理器,不同的应用程序,以及同一应用程序中不同的子程序调用类跳转指令,可调度到延迟槽内的指令数目(例如Y)不一定。若Y > Ndelay slot^x, PJ X的设置相对当前跳转太小,限定了延迟槽并行度的开发,从而影响了多发射处理器高性能发挥;若Y < Ndelay slot^x,则X的设置相对于当前跳转太大,又需要填充 Y-Nttelay-sl。t*X条NOP指令。因此,这种方法灵活性差,会降低处理器的高性能或带来指令代码冗余、浪费程序存储空间,取指带宽和功耗等问题。

发明内容
本发明的目的是实现延迟槽内的每个执行包可以根据指令的调度情况设置指令数目,从而降低处理器在处理子程序跳转指令时,引发的处理器性能降低或由带来冗余指令进而引起程序存储空间、取指带宽以及功耗浪费等问题。为实现上述目的,本发明一方面提供一种微处理器子程序调用的处理方法,该方法包括以下步骤获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;从子程序调用类指令中提取无符号立即数;根据无符号立即数得到延迟槽内的指令总数;根据延迟槽内的指令总数得到子程序调用类指令的返回地址。本发明另一方面提供一种微处理器子程序调用的处理装置,该装置包括获取单元,获取子程序调用类指令,上述子程序调用类指令携带无符号立即数;提取单元,从子程序调用类指令中提取无符号立即数;计算单元,根据无符号立即数得到延迟槽内的指令总数,通过延迟槽内的指令总数得到子程序调用类指令的返回地址。根据本发明的方法及其装置,可以灵活分配延迟槽内执行包的指令数目,既可以支持延迟槽中执行包中最大并行度的开发,也无需填充多余的NOP等指令。大大降低了处理器在处理子程序调用类指令时,存在的延迟槽并行度开发太小或指令代码冗余以及由此带来的程序存储空间、取指带宽以及功耗浪费等问题。大大的提高了处理器在处理子程序调用类指令时的性能。


通过以下结合附图以举例方式对本发明的实施方式进行详细描述后,本发明的其他特征、特点和优点将会更加明显。图1为现有技术中带立即数参数的子程序调用类跳转指令编码结构;图2为现有技术中带寄存器参数的子程序调用类跳转指令编码结构;图3为本发明实施例微处理器子程序调用的处理方法流程图;图4为本发明一个实施例带立即数参数的子程序调用类跳转指令编码结构;图5为本发明一个实施例带寄存器参数的子程序调用类跳转指令编码结构;图6为本发明一个实施例带立即数参数的子程序调用类跳转指令编码结构示例;图7为本发明一个实施例带寄存器参数的子程序调用类跳转指令编码结构示例;图8为本发明实施例微处理器子程序调用的处理装置结构图。
具体实施例方式本发明通过在子程序调用类跳转指令编码中增加一个无符号立即数,用于计算延迟槽内指令总数,实现延迟槽内执行包的指令数目可以根据延迟槽指令调度情况灵活分配。图1为现有技术中带立即数参数的子程序调用类跳转指令编码结构。如图所示, 指令编码位长为List比特,指令标识位长度为a比特,并行位等长度为b比特,剩下立即数 immn = Linst-a-b比特,用于计算转移地址。立即数immn代表的是跳转偏移量,跳转目标地址FPC的计算由公式4获得。公式4 =FPC = PCcalLpackage end+immn* (Linst/St印)相应地,子程序调用类跳转指令在实现跳转的同时,根据延迟槽数目Ndelay sl。t和固定的延迟槽内的执行包指令数目X,根据上述公式3计算出子程序返回地址,并存入特定的寄存器中,返回跳转RET指令通过读取上述特定的寄存器中的返回地址,并且跳转到该地址。图2为现有技术中带寄存器参数的子程序调用类跳转指令编码结构。如图所示, 指令编码位长为Linst比特,指令标识位长度为a比特,并行位等长度为b比特,与图1不同的是,其跳转偏移量不是用立即数表示,而是存在寄存器中,寄存器的索引占用指令编码的 c比特,剩下η比特保留。其支持的跳转偏移地址只与寄存器的位数有关。相应地,子程序调用类跳转指令在实现跳转的同时,根据延迟槽内的执行包指令数目X和延迟槽数目,根据公式3计算出子程序返回地址,并存入特定的寄存器中。图3为本发明实施例微处理器子程序调用的处理方法流程图。该方法包括步骤301-304 在步骤301,获取子程序调用类指令,该子程序调用类指令携带无符号立即数 Uimmm,无符号立即数ui_值根据微处理器延迟槽的指令调度情况进行灵活分配。图4所示的子程序调用类跳转指令编码是在图1所示的子程序调用类跳转指令编码中增加的一个无符号立即数ui_。如图4所示,指令编码位长SLinst比特,指令标识位长度为a比特,并行位等长度为b比特,无符号立即数ui_占m比特,立即数immn占η比特。在一个实施例中,以某一微处理器设计为例,子程序调用类跳转指令编码如图6 所示,其中指令编码位长Linst为32比特;标识位占5比特;细类标识位占1比特;pr代表推断寄存器的索引,占3比特;P代表并行标志位,占1比特。该处理器同时发射的指令数目为4,即Nissue为4 ;延迟槽的数目为5,即Ndelay—sl。t为5。以字节为单位寻址,即最小寻址单元位长乂印为8比特。通过Nissue值和^lelay sl。t值,根据公式7 (a)和公式7 (b),可以计算获得无符号立即数ui_所占位数m的值为4。图5所示的子程序调用类跳转指令编码是在图2所示的子程序调用类跳转指令编码中增加的一个无符号立即数ui_。如图5所示,无符号立即数ui_占指令编码的m比特,无符号立即数ui_只是占用了指令编码中保留位η的多余保留位,对指令其余参数没有任何影响,其支持的最大跳转偏移仍然由寄存器的位数决定。在上一个实施例中,以同一款微处理器为例,如图7所示,指令编码位长为32比特,指令标识位长度为5比特;细类标识位占1比特;寄存器的索引占5比特;保留位占13 比特;pr代表推断寄存器的索引,占3比特;P代表并行标志位,占1比特。该处理器同时发射的指令数目为4,即Nissue为4,无符号立即数uimmm占4比特,取值在0_15之间。延迟槽的数目为5,即Ndelay sl。t为5。以字节为单位寻址,即最小寻址单元位长乂印为8比特。上述无符号立即数uimmm所占位数m的值是根据公式7(a)和公式7(b)获得。公式7(a) :2m_l+Ndelay
slot ^ ^issue^^delay_slot公式7(b) Jm-LhNdelay
slot < ^issue^^delay_slot对于一款微处理器,由公式7(a)和公式7(b)获得的位数m值是固定的,与该处理器当前运行的程序无关。在程序编译阶段,根据微处理器能调用的延迟槽中指令数目情况计算出子程序调用类跳转指令中的无符号立即数ui_值,并产生相应的子程序调用类跳转指令。在步骤302,从子程序调用类指令中提取无符号立即数ui_。微处理器在译码阶段,从子程序调用类跳转指令编码结构中提取无符号立即数 uimmm 值。在步骤303,根据无符号立即数uimmm得到延迟槽内的指令总数。微处理器根据在步骤302提取的无符号立即数ui_值,通过公式Ninst delay sl。t =Ndelay—sl。t+ui_,计算出延迟槽内的指令总delay—sl。t,其中 elay—sl。t是指令延迟槽数;uimmm是无符号立即数,无符号立即数uimmm的值可以为0到(Nissue-I) Ndelay—sl。t之间, Nissue为多发射处理器可同时发射的指令数目。延迟槽内的指令总数范围由公式Ndelay— slot 进行限定,即延迟槽内的指令总数Ninst—delay—sl。t大于等于 Ndelay—slot 且小于等于N
issueslot 的乘积。
在步骤304,根据延迟槽内的指令总数得到子程序调用类指令的返回地址。微处理器根据延迟槽内的指令总数Ninst delay sl。t通过以下公式retPC = PCcall
package_end+Ninst_delay_slot
*(Linst/Step)计算出子程序调用类指令的返回地址retPC,其中PCcall— package_end是所述子程序调用类指令所在执行包的最后一条指令地址,PC。all—pa。kage—md可以由执行包首地址和执行包指令条数在流水线的执行级中计算得到;Linst是所述子程序调用类指令的长度,Step代表处理器的最小寻址单元位长。图8为本发明实施例微处理器子程序调用的处理装置结构图。如图所示,该装置包括获取单元81、提取单元82和计算单元83。获取单元81用于获取子程序调用类子程序调用类跳转指令,其中子程序调用类跳转指令携带无符号立即数ui_。提取单元82从获取单元81获取的子程序调用类跳转指令中提取无符号立即数ui_。计算单元83根据无符号立即数ui_值计算延迟槽内的指令总delay—sl。t,并通过延迟槽内的指令总数Ninst—delay—sl。t计算出子程序调用类指令的返回地址retPC。子程序调用类跳转指令携带的无符号立即数Uimmm在程序编译阶段,根据微处理器能调用的延迟槽中指令数目情况计算获得。具体地,计算单元82根据公式=Ninst delay sl。t = Ndelay_slot+uimmm,计算出延迟槽内的指令总数,其中Ninst—delay—sl。t是延迟槽内的指令总数,Ndelay_slot是指令延迟槽数,Uimmm是无符号立即数。另外,计算单元82根据以下公式retPC =
PCcaIl_package_end+Ninst_delay_slot* ^inst/
Step)计算出子程序调用类指令的返回地址,其中retPC是子程序返回地址,PCcall package end 是所述子程序调用类指令所在执行包的最后一条指令地址,Linst是所述子程序调用类指令的编码位长,Step代表处理器的最小寻址单元位长。本发明实施例装置的获取单元81、提取单元82和计算单元83分别为了实现图3 中各个方法的相应流程,在此不再赘述。显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。本发明所要求保护的范围仅由所述的权利要求书进行限定。
权利要求
1.一种微处理器子程序调用的处理方法,其特征在于包括以下步骤获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;从所述子程序调用类指令中提取所述无符号立即数;根据所述无符号立即数得到延迟槽内的指令总数;根据所述延迟槽内的指令总数得到所述子程序调用类指令的返回地址。
2.根据权利要求1所述的方法,其特征在于所述无符号立即数在程序编译阶段,根据处理器可调用的延迟槽中指令数目计算获得。
3.根据权利要求1所述的方法,其特征在于所述根据所述无符号立即数得到延迟槽内的指令总数是通过公式Ninst—delay—sl。t = Ndelay_slot+uimmm计算获得,其中Ninst—delay—sl。t是延迟槽内的指令总数,Ndelay_slot是指令延迟槽数,Uimmm是所述无符号立即数。
4.根据权利要求3所述的方法,其特征在于所述Ninstdelay sl。t大于等于^telay sl。t,且小于等于 elay—sl。t与Nissue的乘积,其中Nissue是处理器同时发射指令数目。
5.根据权利要求1所述的方法,其特征在于所述根据所述延迟槽内的指令总数得到子程序调用类指令的返回地址是通过公式retPC = PC。all—pa。kage—end+Ninst—delay—sl。t* (Linst/St印) 获得,其中retPC是子程序返回地址,PC。all pa。kage md是所述子程序调用类指令所在执行包的最后一条指令地址,Linst是所述子程序调用类指令的编码位长,Mep代表处理器的最小寻址单元位长。
6.一种微处理器子程序调用的处理装置,其特征在于包括获取单元,获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;提取单元,从所述子程序调用类指令中提取所述无符号立即数;计算单元,根据所述无符号立即数得到延迟槽内的指令总数,通过所述延迟槽内的指令总数得到子程序调用类指令的返回地址。
7.根据权利要求6所述的装置,其特征在于所述计算单元根据公式Ninstdelay sl。t = Ndelay—sl。t+ui_得到延迟槽内的指令总数,其中Ninst—delay—sl。t是延迟槽内的指令总数,Ndelay_ slot是指令延迟槽数,uimmm是所述无符号立即数。
8.根据权利要求6所述的装置,其特征在于所述计算单元根据公式retPC= PC。allpackage_end+Ninst_delay_slot* (Linst/St印)得到子程序调用类指令的返回地址,其中retPC是子程序返回地址,PC。all pa。kage md是所述子程序调用类指令所在执行包的最后一条指令地址,Linst是所述子程序调用类指令的编码位长,Step代表处理器的最小寻址单元位长。
全文摘要
本发明公开了一种微处理器子程序调用的处理方法及其装置,该方法包括以下步骤获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;从子程序调用类指令中提取无符号立即数;根据无符号立即数得到延迟槽内的指令总数;根据延迟槽内的指令总数得到子程序调用类指令的返回地址。该装置包括获取单元,用于获取子程序调用类指令;提取单元,从子程序调用类指令中提取无符号立即数;计算单元,根据无符号立即数得到延迟槽内的指令总数,通过延迟槽内的指令总数计算出子程序调用类指令的返回地址。根据本发明的方法及其装置,大大的提高了处理器在处理子程序调用类指令时的性能。
文档编号G06F9/38GK102360283SQ20111030028
公开日2012年2月22日 申请日期2011年9月28日 优先权日2011年9月28日
发明者侯朝焕, 张铁军, 洪缨, 王东辉, 王琪 申请人:中国科学院声学研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1