本发明专利技术公开了一种微处理器子程序调用的处理方法及其装置,该方法包括以下步骤:获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;从子程序调用类指令中提取无符号立即数;根据无符号立即数得到延迟槽内的指令总数;根据延迟槽内的指令总数得到子程序调用类指令的返回地址。该装置包括:获取单元,用于获取子程序调用类指令;提取单元,从子程序调用类指令中提取无符号立即数;计算单元,根据无符号立即数得到延迟槽内的指令总数,通过延迟槽内的指令总数计算出子程序调用类指令的返回地址。根据本发明专利技术的方法及其装置,大大的提高了处理器在处理子程序调用类指令时的性能。
【技术实现步骤摘要】
本专利技术涉及一种处理器技术,尤其涉及一种微处理器子程序调用的处理方法及其装置。
技术介绍
在各类应用程序中,条件跳转指令是频繁使用的一种指令,子程序调用类和循环是条件跳转指令应用的主要领域之一,条件跳转指令的高效设计是处理器高效运行的关键。现有的处理器中,跳转指令一般采用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为本专利技术一个实施例带寄存器参数的子程序调用类跳转指令编码结构;图本文档来自技高网...
【技术保护点】
1.一种微处理器子程序调用的处理方法,其特征在于包括以下步骤:获取子程序调用类指令,所述子程序调用类指令携带无符号立即数;从所述子程序调用类指令中提取所述无符号立即数;根据所述无符号立即数得到延迟槽内的指令总数;根据所述延迟槽内的指令总数得到所述子程序调用类指令的返回地址。
【技术特征摘要】
【专利技术属性】
技术研发人员:张铁军,王东辉,王琪,洪缨,侯朝焕,
申请(专利权)人:中国科学院声学研究所,
类型:发明
国别省市:11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。