指令分支的预跳转方法和系统的制作方法

文档序号:6363435阅读:200来源:国知局
专利名称:指令分支的预跳转方法和系统的制作方法
技术领域
本发明涉及一种指令分支的预跳转方法和系统,特别涉及一种基于栈模式的预跳转方法和系统。
背景技术
在微处理器的运行过程中,跳转指令的出现十分频繁,因此对跳转指令的处理方式显著的影响着以流水线方式工作的微处理器的性能。跳转指令的一般功能是:如果满足某一条件,则跳转到某一目的地,而该条件通常是由该跳转指令之前的用于生成跳转发生的条件的条件生成指令(例如比较指令CMP)产生的。由于流水线的工作方式是:在流水线的起点读取指令,在流水线的终点产生指令的结果,因此,如果按照指令的自然顺序依次执行指令,就会出现这样的问题:当条件生成指令在流水线的最后一级Sn产生结果时,跳转指令处于倒数第二级Sn_1;跳转指令之后的按自然顺序排列的各条指令也已经被读出并依次处于流水线的S1-Slrf级,此时,如果跳转指令根据条件生成指令的结果判断出跳转条件已经满足,需要发生跳转,也就是说不再按照自然顺序执行指令,而是要执行跳转指令的跳转目的地的指令,这样一来,之前读出的各条指令就必须取消执行,造成了流水线资源的浪费。目前,解决这一问题的方法主要包括延迟槽技术和跳转预测技术。延迟槽技术的原理是,将跳转指令提前,将跳转指令之前与跳转无关的一定数量(即延迟槽长度,一般为2或3的固定长度)的指令放在跳转指令之后,这样,无论跳转指令判断的结果如何,被转移到跳转指令之后的与跳转无关的指令都可以顺序执行。延迟槽技术的主要问题是,使得指令排序不自然,并且,这种定长延迟槽十分死板,当跳转指令附近缺少合适的可调换的指令时,只能通过填入空操作NOP来满足延迟槽长度,事实上,大多数时候只能通过NOP来构成延迟槽,这同样造成流水线资源的浪费。跳转预测技术的原理是,根据很多历史记录猜测跳转指令后应该执行哪一条指令,并按照猜测的结果读取指令,如果猜测错误,则将已经读取的错误指令全部取消。这种跳转预测技术的问题是,其逻辑十分复杂,硬件成本显著,且某些已经读出甚至已经执行的指令是很难干净的取消的,只能被迫推迟执行,因此大大影响了微处理器的性能。

发明内容
本发明提出了一种指令分支的预跳转方法和系统,其克服了现有技术中的上述问题,不受定长延迟槽的限制,也无需引入取消执行,提高了编译灵活性和流水线效率,降低了设计复杂度。根据本发明的方法和系统基于栈模式,特别有利于循环嵌套语句的优化。根据本发明的一方面,提出了一种指令分支的预跳转方法,该方法包括:步骤Sll:当根据当前指令判断出后续指令中包含跳转指令时,根据当前指令的结果,判断所述跳转指令是否执行跳转;步骤S12:若判断结果为执行跳转,则确定跳转指令的跳转位置和跳转目的地,并将所述跳转位置和所述跳转目的地压入栈,若判断结果为不执行跳转,则按原有顺序执行之后的指令;步骤S13:当所述栈顶部的跳转位置与待执行的指令地址一致时,则弹出所述栈顶部的跳转位置和跳转目的地,以弹出的所述跳转目的地作为下一条指令的地址,当所述栈顶部的跳转位置与待执行的指令地址不一致时,则以待执行的指令地址作为下一条指令的地址;步骤S14,根据所述下一条指令的地址读取指令并执行。优选地,步骤S12通过预跳转指令来实现,该预跳转指令基于条件生成指令的结果进行操作,若条件生成指令的结果指示为执行跳转,则确定跳转指令的跳转位置和跳转目的地,并将所述跳转位置和所述跳转目的地压入栈,若判断结果为不执行跳转,则顺序执行之后的指令。优选地,所述与跳转指令包括条件字段、跳转位置字段和跳转目的地字段。优选地,待执行的指令的地址由程序计数器指示。根据本发明的另一方面,提出了一种指令分支的预跳转系统,该系统包括:用于存储预跳转数据的栈;预跳转模块,其输入端连接指令处理模块的输出,其输入端连接所述栈的输入,当指令处理模块的输出结果指示后面的跳转指令将执行跳转时,将所述跳转指令的跳转位置和跳转目的地作为跳转数据压入所述栈;指令地址比较模块,其比较所述栈的顶部的跳转位置和待执行的指令地址,当所述栈顶部的跳转位置与待执行的指令地址一致时,则弹出所述栈顶部的跳转位置和跳转目的地作为指令地址比较模块的输出,当所述栈顶部的跳转位置与待执行的指令地址不一致时,则以所述待执行的指令地址作为指令地址比较模块的输出;指令读取模块,根据指令地址比较模块的输出读取指令;指令处理模块,对指令读取模块读取的指令进行处理,输出结果。优选地,由程序计数器指示所述待执行的指令地址。优选地,指令处理器模块进行指令译码、读操作数、运算操作。


图1是根据本发明的一个实施例的一种指令分支的预跳转方法的流程图;图2是一条预跳转指令的示意性结构图;图3是根据本发明的一个实施例的一种指令分支的预跳转系统的结构图;图4是本发明的预跳转系统的一个优选实施例。
具体实施例方式本发明提出了一种指令分支的预跳转方法及系统,其基本原理是:在判断出后面将要发生跳转时,就确定将要发生的跳转的跳转位置和跳转目的地,从而在指令进行到该跳转位置时完成跳转操作。事实上,程序中的任何一个有条件的跳转都是在条件生成时就能够知道后面将会有跳转发生的。例如对于标准的“for”循环,在循环起点就可以知道,在后面肯定会面临是否跳转的判断,甚至根据循环变量的当前数值,就能够知道未来要不要跳转,根据本发明的方法在得知未来要跳转的时候就指明在哪里跳转,要跳到哪里去,在指令进行到之前预计跳转的位置时,就执行之前预计的跳转操作。本发明的预跳转方法基于栈模式,其基本原理是可预先判断后面将要发生的若干条跳转,将这些跳转按顺序压栈,当到达各个跳转位置时将这些跳转逐次弹栈,这种栈模式(即,先进后出的模式)与嵌套循环的模式是匹配的,因此特别适用于多重嵌套循环。图1是根据本发明的一个实施例的一种指令分支的预跳转方法的流程图,其包括:步骤Sll:当根据当前指令判断出后续指令中包含跳转指令时,根据当前指令的结果,确定所述跳转指令是否执行跳转;步骤S12:若判断结果为执行跳转,则确定跳转指令的跳转位置和跳转目的地,并将所述跳转位置和所述跳转目的地压入栈,若判断结果为不执行跳转,则按原有顺序执行之后的指令;步骤S13:当所述栈顶部的跳转位置与待执行的指令地址一致时,则弹出所述栈顶部的跳转位置和跳转目的地,以弹出的所述跳转目的地作为下一条指令的地址,当所述栈顶部的跳转位置与待执行的指令地址不一致时,则以待执行的指令地址作为下一条指令的地址;步骤S14,根据所述下一条指令的地址读取指令并执行。其中,步骤S12可通过预跳转指令PJ来实现,该预跳转指令PJ的功能是:基于条件生成指令的结果进行操作,若条件生成指令的结果指示为执行跳转,则确定跳转指令的跳转位置和跳转目的地,并将所述跳转位置和所述跳转目的地压入栈,若判断结果为不执行跳转,则顺序执行之后的指令。图2是一条预跳转指令的示意性结构图。其中该预跳转指令主要包括条件字段#C、跳转位置字段B和跳转目的地字段A。条件字段#(:规定了跳转发生的条件,#C通常为常数,可对应于条件生成指令产生的标示位FLAG。跳转位置字段B指示了在所执行的指令中,“跳转”这一动作所在的位置,即指明“在哪里跳转”的问题,该位置与执行“跳转”操作的指令的指令地址相关联。跳转目的地字段A指示了执行“跳转”操作时,指令的分支地址,即指明“跳转到哪里去”的问题。步骤S13可以通过将栈顶部的跳转位置与程序计数器PC指示的指令地址相比较来实现,其中程序技术器PC指示的地址就是待执行的指令的地址,若栈顶的跳转位置与PC指示的指令地址一致,则标志着指令已经运行到了应该发生跳转的位置,则弹出栈顶部的跳转位置和跳转目的地,该跳转目的地就是执行跳转时应“跳转”到的指令分支地址,按照这个指令分支地址读取指令,就完成了此次跳转。由于栈的工作机制是“先进后出”,因此在多层嵌套循环指令中,外层循环的跳转先进栈,内层循环的跳转后进栈,此后指令必然先运行至内层循环的跳转位置,从而使顶部的内层循环跳转出栈。当指令运行到外层循环的跳转位置时,再使外层循环跳转出栈,从而完成整个多层嵌套循环。下面以标准的二重嵌套循环为例详细描述本发明的方法。以下是标准的二重循环的c语言代码:
权利要求
1.一种指令分支的预跳转方法,该方法包括: 步骤Sll:当根据当前指令判断出后续指令中包含跳转指令时,根据当前指令的结果,判断所述跳转指令是否执行跳转; 步骤S12:若判断结果为执行跳转,则确定跳转指令的跳转位置和跳转目的地,并将所述跳转位置和所述跳转目的地压入栈,若判断结果为不执行跳转,则按原有顺序执行之后的指令; 步骤S13:当所述栈顶部的跳转位置与待执行的指令地址一致时,则弹出所述栈顶部的跳转位置和跳转目的地,以弹出的所述跳转目的地作为下一条指令的地址,当所述栈顶部的跳转位置与待执行的指令地址不一致时,则以待执行的指令地址作为下一条指令的地址; 步骤S14,根据所述下一条指令的地址读取指令并执行。
2.根据权利要求1所述的指令分支的预跳转方法,其中,步骤S12通过预跳转指令来实现,该预跳转指令基于条件生成指令的结果进行操作,若条件生成指令的结果指示为执行跳转,则确定跳转指令的跳转位置和跳转目的地,并将所述跳转位置和所述跳转目的地压入栈,若判断结果为不执行跳转,则顺序执行之后的指令。
3.根据权利要求2所述的指令分支的预跳转方法,其中所述与跳转指令包括条件字段、跳转位置字段和跳转目的地字段。
4.根据权利要求1所述的指令分支的预跳转方法,其中待执行的指令的地址由程序计数器指示。
5.一种指令分支的预跳转系统,该系统包括: 用于存储预跳转数据的栈; 预跳转模块,其输入端连接指令处理模块的输出,其输入端连接所述栈的输入,当指令处理模块的输出结果指示后面的跳转指令将执行跳转时,将所述跳转指令的跳转位置和跳转目的地作为跳转数据压入所述栈; 指令地址比较模块,其比较所述栈的顶部的跳转位置和待执行的指令地址,当所述栈顶部的跳转位置与待执行的指令地址一致时,则弹出所述栈顶部的跳转位置和跳转目的地作为指令地址比较模块的输出,当所述栈顶部的跳转位置与待执行的指令地址不一致时,则以所述待执行的指令地址作为指令地址比较模块的输出; 指令读取模块,根据指令地址比较模块的输出读取指令; 指令处理模块,对指令读取模块读取的指令进行处理,输出结果。
6.根据权利要求5所述的指令分支的预跳转系统,其中由程序计数器指示所述待执行的指令地址。
7.根据权利要求5所述的指令分支的预跳转系统,其中指令处理器模块进行指令译码、读操作数、运算操作。
全文摘要
一种指令分支的预跳转方法和系统,该方法包括当根据当前指令判断出后续指令中包含跳转指令时,根据当前指令的结果,判断所述跳转指令是否执行跳转;若判断结果为执行跳转,则确定跳转指令的跳转位置和跳转目的地,并将所述跳转位置和所述跳转目的地压入栈,若判断结果为不执行跳转,则按原有顺序执行之后的指令;当所述栈顶部的跳转位置与待执行的指令地址一致时,则弹出所述栈顶部的跳转位置和跳转目的地,以弹出的所述跳转目的地作为下一条指令的地址,当所述栈顶部的跳转位置与待执行的指令地址不一致时,则以待执行的指令地址作为下一条指令的地址;根据所述下一条指令的地址读取指令并执行。
文档编号G06F9/38GK103218206SQ20121001528
公开日2013年7月24日 申请日期2012年1月18日 优先权日2012年1月18日
发明者沙力, 兰军强, 朱磊 申请人:上海算芯微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1