一种用于函数返回地址预测的装置及方法

文档序号:8257904阅读:245来源:国知局
一种用于函数返回地址预测的装置及方法
【技术领域】
[0001]本发明属于微处理器领域,尤其涉及一种用于函数返回地址预测的装置及方法。
【背景技术】
[0002]转移指令是处理器的基本指令之一,广泛存在于程序中。转移指令会引入程序控制流的转移,是处理器的性能杀手之一。进一步,转移指令包括条件转移指令和无条件转移指令以及间接转移指令。其中,函数返回指令作为间接转移指令的一种,频繁应用于子函数的程序返回,对处理器的性能有着重大影响。为了加快函数返回指令的执行速度,中高端嵌入式处理器普遍采用了函数返回地址栈,为函数返回指令提供返回地址的预测。其基本原理是在发生函数调用时,将函数调用指令的下一条指令的地址视为函数返回的地址,并缓冲到函数返回地址栈中;在发生函数返回时,从函数返回地址栈中读取缓存的地址作为预测的函数返回地址并返回。
[0003]由于函数返回地址栈常位于处理器中的流水线前级,导致函数返回地址栈在运行过程中由于流水线的原因效率较低。目前对函数返回地址栈的改进集中于对其性能的改进,根据函数调用与返回指令在流水线中处理的不同节点设计多个返回栈指针,包括栈顶指针、检验指针、恢复指针等,用于维护函数返回地址栈读取指针的正确性,进一步,也有为在流水线中不同处理节点设计多个函数返回地址栈的方法,使得返回地址栈具有了内容纠错能力。但这两类方法都是对性能进行优化的方法。
[0004]有研宄表明,受限于函数的大小,函数调用的地址偏移大都在IMb范围以内,因此函数返回地址栈中对函数返回地址的高位进行保存在大多数情况下是没有意义的。

【发明内容】

[0005]为了克服已有函数返回地址栈方式的成本较高、处理器性能受限的不足,本发明提供了一种有效降低函数返回地址栈的成本、提升处理器性能的用于函数返回地址预测的装置及方法。
[0006]本发明解决其技术问题所采用的技术方案是:
[0007]一种用于函数返回地址预测的装置,所述装置包括:
[0008]指令译码单元,用于对输入的指令进行译码,产生操作指示符;
[0009]函数返回地址栈,包含S个表项,用于接受指令译码单元的操作指示符,对于译码得到的函数调用指令,函数返回地址栈截取并保存函数调用指令的下一条指令的地址的低M比特,对于译码得到的函数返回指令,从函数返回地址栈中弹出最近入栈的表项的M比特地址,拼上函数返回指令地址的高(N-M)位,封装产生N比特的目标地址作为函数返回指令的预测地址A,并记录返回地址A对应的表项索引X ;
[0010]执行单元,用于接受指令译码单元的操作指示符以及函数返回地址栈的预测地址A与表项索引X,当操作指示符指示为函数返回指令时,判断地址A是否预测正确,产生预测正确信息与实际跳转地址;
[0011]纠错单元,用于接受执行单元的输出,在函数返回地址预测错误时用实际地址B对函数返回地址栈中表项索引X指向的内容进行纠正。
[0012]进一步,所述的函数返回地址栈中每个表项的内容为M比特,预测地址A与实际地址B为N比特,M、N均为整数,M<No
[0013]所述译码单元对函数调用和函数返回指令进行译码,并根据译码结果完成函数返回地址栈的入栈和出栈操作。
[0014]函数返回地址栈采用先进后出的堆栈结构。
[0015]再进一步,所述执行单元中,计算产生实际函数返回地址B,并与预测地址A进行比较,产生预测正确信息以及实际地址B;所述纠错单元中,接受执行单元的输出,在函数返回地址预测错误时用实际地址B的低M比特信息对函数返回地址栈中表项索引X指向的内容进行纠正。
[0016]一种用于函数返回地址预测的方法,所述方法包括如下步骤:
[0017]I)对指令进行译码,译出函数调用指令和函数返回指令,并产生操作指示符;
[0018]2)当指令译码为函数调用指令时,截取下一条指令的地址的低M比特并保存在函数返回地址栈中;当指令译码为函数返回指令时,从函数返回地址栈中弹出最近入栈的表项的M位地址,拼接上函数返回指令的高(N-M)位地址,封装产生函数返回指令的预测地址A,并记录预测地址A对应的表项索引X ;
[0019]3)当操作指示符指示为函数返回指令时,判断地址A是否预测正确,产生预测正确信息与实际跳转地址;
[0020]4)在函数返回地址预测错误时用实际地址B对函数返回地址栈中表项索引X指向的内容进行纠正;
[0021]进一步,所述步骤3)中,计算产生实际函数返回地址B,并与预测地址A进行比较,产生预测正确信息以及实际地址B ;所述步骤4)中,在函数返回地址预测错误时用实际地址B的低M比特信息对函数返回地址栈中表项索引X指向的内容进行纠正。
[0022]再进一步,所述的函数返回地址栈包含S个表项,每个表项的内容为M比特,预测地址A与实际地址B为N比特,M、N均为整数,M<No
[0023]更进一步,函数返回地址栈采用先进后出的堆栈结构。
[0024]本发明的技术构思为:在保证函数返回地址栈对函数返回地址较高预测准确率的情况下,以减小函数返回地址栈每个表项内数据宽度的方法来降低函数返回地址栈的成本。在此基础上提出了函数返回地址栈无需保留全部地址信息而只保留低位地址信息的预测装置和方法。
[0025]本发明的有益效果主要表现在:有效降低函数返回地址栈的成本、提升处理器性會K。
【附图说明】
[0026]图1是一种函数返回地址预测装置的示意图。
[0027]图2是函数返回地址栈原理图。
[0028]图3是函数返回地址栈栈顶指针维护原理图。
[0029]图4是纠错单元原理图。
[0030]图5是一种函数返回地址预测方法的流程示意图。
【具体实施方式】
[0031]下面结合附图对本发明作进一步描述。
[0032]实施例1
[0033]参照图1?图4,一种函数返回地址预测装置,包括译码单元,函数返回地址栈,执行单元和纠错单元。
[0034]指令译码单元对输入的指令进行译码得到操作指示符、寄存器索引等信息。操作指示符包括指令类型、操作数类型以及操作数个数等。指令类型可以有运算类指令、内存访问指令、条件转移指令、无条件转移指令和间接转移指令等。其中间接转移类指令里的函数调用和函数返回指令必须经由译码单元译出。寄存器索引信息可以帮助确定函数返回指令以及为间接转移指令提供地址信息。指令译码单元在译出当前输入指令为函数调用指令时,会将该指令下一条指令的地址连同一根写控制信号传递给函数返回地址栈。指令译码单元在译出当前输入指令为函数返回指令时,会传递给函数返回地址栈当前指令的地址连同一根读控制信号。同时,指令译码单元还会将操作指示符和寄存器索引等信息传递给执行单元。
[0035]参照图2所示,为函数返回地址栈的一种示意图。函数返回地址栈共有8个表项,每个表项的数据宽度为20比特。函数返回地址栈采用先进后出的堆栈式结构,以栈顶指针P对返回地址栈的写入和读取操作进行控制,指针P在复位时指向表项O的位置。当译码单元译出当前指令为函数调用指令时,会将该指令下一条指令的地址连同写控制信号传递给函数返回地址栈。当译码单元译出其他类型的指令时,该写控制信号不会被置起。函数返回地址栈在接收到该写控制信号后,会截取译码单元传递来的指令地址的低20比特信息,写入指针P所指向的函数返回地址栈的表项,同时指针P执行“加一”的操作。当译码单元译出当前指令为函数返回指令时,会传递给函数返回地址栈当前函数返回指令的地址连同一读控制信号。当译码单元在译出其他类型的指令时,该读控制信号不会被置起。函数返回地址栈在看到该读控制信号后,指针P会执行“减一”的操作,之后将指针P所指向的函数返回地址栈表项内的信息读取出来。与此同时,函数返回地址栈会截取从译码单元传递过来的指令地址的高12比特信息,拼接上从地址栈表项内读取的20比特信息作为函数返回的预测地址A。该预测地址A以及指针P所指向的表项位置即索引X会被传递给执行单元用于函数返回地址正确性的检验。
[0036]参照图3所示,为函数返回地址栈栈顶指针P的维护示意图。栈顶指针P以8位独热码表示所指向的表项索引。当函数返回地址栈接收到的写控制信号被置起时,执行“加一”的操作;当函数返回地址栈接收到的读控制信号被置起时,执行“减一”的操作。当指针P加到7之后,写控制信号再次被置起时,指针P变成0,指向函数返回地址栈O号表项所在的位置;当指针P减到O之后,读控制信号再次被置起时,指针P变成7,指向函数返回地址栈7号表项所在的位置。
[0037]执行单元在接收到译码单元的操作指示符以及寄存器索引等信息表明当前指令为函数返回指令时,会同时接收从函数返回地址栈传递来的函数返回预测地址A以及预测地址A所对应的函数返回地址栈表项索引X。执行单元根据从译码单元传递来的寄存器索引去寄存器组读得相应
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1