CN101727312B - 一种支持自动纠错功能的返回地址栈实现方法 - Google Patents

一种支持自动纠错功能的返回地址栈实现方法 Download PDF

Info

Publication number
CN101727312B
CN101727312B CN 200910207204 CN200910207204A CN101727312B CN 101727312 B CN101727312 B CN 101727312B CN 200910207204 CN200910207204 CN 200910207204 CN 200910207204 A CN200910207204 A CN 200910207204A CN 101727312 B CN101727312 B CN 101727312B
Authority
CN
China
Prior art keywords
return
stack
address
pointer
function
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.)
Active
Application number
CN 200910207204
Other languages
English (en)
Other versions
CN101727312A (zh
Inventor
严晓浪
龚帅帅
葛海通
孟建熠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou C Sky Microsystems Co Ltd
Original Assignee
Hangzhou C Sky Microsystems Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou C Sky Microsystems Co Ltd filed Critical Hangzhou C Sky Microsystems Co Ltd
Priority to CN 200910207204 priority Critical patent/CN101727312B/zh
Publication of CN101727312A publication Critical patent/CN101727312A/zh
Application granted granted Critical
Publication of CN101727312B publication Critical patent/CN101727312B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

一种支持自动纠错功能的返回地址栈实现方法,所述的返回地址栈实现方法包括以下步骤:1)在指令预取过程中对函数调用指令和函数返回指令进行预译码,并根据预译码结果进行函数返回地址信息的入栈和出栈操作;2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置;3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态,在流水线清空操作时,利用退休指针对栈顶指针的自动恢复。本发明能有效提高函数返回的预测精度、提升处理器的性能。

Description

一种支持自动纠错功能的返回地址栈实现方法
技术领域
本发明属于嵌入式处理器系统领域。更具体地说,涉及一种函数返回地址栈实现方法。
背景技术
嵌入式处理器发展至今,已经在多媒体编解码、通信技术和超大规模集成电路设计领域展现出了巨大的应用价值。一直以来,嵌入式处理器对于功耗、面积、成本、性能等多项指标都有着严格的设计要求。随着应用领域的不断扩大和应用要求的不断提高,对于嵌入式处理器的处理性能提出了更高的要求。
在流水线技术广泛应用于处理器设计的今天,如何充分发挥流水线的作用成为设计中需要考虑的重点问题。分支指令对于流水线技术的运用带来的障碍使得分支预测技术在处理器的设计中变得越来越重要,为实现高性能,精确的分支预测成为关键。分支预测失效将浪费大量的时钟周期,无法发挥处理器乱序执行的效能,从而影响处理器性能的进一步提高。
函数调用和函数返回作为重要的分支指令,在处理器的指令集中占有相对重要的地位,能否在尽可能少的等待时间之内完成函数返回指令正确目标地址的获取,成为了一种重要的分支预测技术。当前大多数高性能的嵌入式处理器都采用了返回地址栈为函数返回指令提供返回地址,而返回地址栈的维护方法在不同的嵌入式处理器中各不相同。在现有的常见嵌入式处理器架构中,返回地址栈主要采用保存当前栈顶指针、数据或保存全栈的修复方法。前者需要对每一条分支指令保存一个栈顶指针的拷贝,预测精度也不高;后者虽然可以获得百分之百的预测准确率,但硬件开销过大。
发明内容
为了克服已有的嵌入式处理器的函数返回地址栈实现方法的函数返回的预测精度较低、限制处理器的性能的不足,本发明提供一种有效提高函数返回的预测精度、提升处理器的性能的支持自动纠错功能的返回地址栈实现方法。
本发明解决其技术问题所采用的技术方案是:
一种支持自动纠错功能的返回地址栈实现方法,所述的返回地址栈实现方法包括以下步骤:
1)在指令预取过程中对函数调用指令和函数返回指令进行预译码,并根据预译码结果进行函数返回地址信息的入栈和出栈操作;
2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置;
3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态,在流水线清空操作时,利用退休指针对栈顶指针的自动恢复。
作为优选的一种方案:所述的返回地址栈实现方法还包括:步骤4)采用检验指针记录后级流水线确认预测后的返回地址栈状态,在分支跳转预测出错时,利用检验指针对栈顶指针的自动恢复。
作为优选的另一种方案:在所述步骤1)中,在指令预取过程中设置返回地址栈,并对预取指令进行动态预译码,若当前指令为函数调用指令,将函数的返回地址压入返回地址栈;若当前指令为函数返回指令,从返回地址栈中获得返回地址,跳入返回函数开始预取指令。
进一步,在所述步骤2)中,所述返回地址栈为循环堆栈结构,栈顶指针指示返回地址栈当前写入和读取的位置,栈顶指针在有效范围内循环更新,在指令预取的同时控制栈顶指针的更新和返回地址栈对应位置的入栈和出栈操作。
更进一步,在所述步骤3)中,程序遇到异常时产生流水线清空操作,流水线的各种状态恢复为指令退休时的状态,利用退休指针恢复返回地址栈的栈顶指针,返回地址栈重新进入正常工作状态。
再进一步,在所述步骤4)中,后级流水线在函数调用指令和函数返回指令执行时即对返回地址预测进行检验。
当流水线执行过程中出现分支预测错误,将返回地址栈栈顶指针更新为检验指针,恢复操作无需等待当前分支预测错误指令退休时进行,返回地址栈提前进入正常工作状态。
本发明的技术构思为:利用一组指针寄存器的协同工作,实现了在流水线出现清空操作或其他分支预测出现错误时的自动纠错。该单元的本质是在嵌入式处理器中通过简单的扩展,保持其控制能力的同时,确保了函数调用和函数返回指令接近百分之百的预测精度。
支持自动纠错功能的返回地址栈是一个为通用嵌入式处理器设计的加速函数调用和函数返回指令执行的硬件执行单元。其仅仅是一个执行单元,是复杂嵌入式处理器的有效补充。
因此,利用较小的硬件代价对返回地址栈进行必要的修复,能够获得正确的返回地址,即提高函数返回指令的预测精度,就显得尤为重要。
本发明的有益效果主要表现在:在实现对函数调用和函数返回指令的自动识别的基础上,通过相应的入栈和出栈操作,达到对函数返回指令加速的目的;通过退休指针、检验指针和栈顶指针的协同工作,实现返回地址栈在流水线进行清空操作和分支预测出现错误时的自动纠错功能。该方法应用于嵌入式处理器中,有效地提高了处理器取指单元的取指效率,从而提升整个嵌入式处理器的处理性能。
附图说明
图1是返回地址栈指针寄存器组的硬件原理图;
图2是栈顶指针自动纠错的硬件原理图;
图3是返回地址栈入栈出栈操作的硬件原理图。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1-图3,一种支持自动纠错功能的返回地址栈实现方法,所述的返回地址栈实现方法包括以下步骤:
1)在指令预取过程中对函数调用指令和函数返回指令进行预译码,并根据预译码结果进行函数返回地址信息的入栈和出栈操作;
2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置;
3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态,在流水线清空操作时,利用退休指针对栈顶指针的自动恢复。
所述的返回地址栈实现方法还包括:步骤4)采用检验指针记录后级流水线确认预测后的返回地址栈状态,在分支跳转预测出错时,利用检验指针对栈顶指针的自动恢复。
本实施例的支持自动纠错功能的返回地址栈实现方法特征如下:
1)在指令预取过程中对函数调用和函数返回指令进行预译码,并根据预译码结果进行函数返回地址信息的入栈和出栈操作;
2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置;
3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态;
4)采用检验指针记录后级流水线确认预测后的返回地址栈状态;
5)在流水线清空操作时,利用退休指针对栈顶指针的自动恢复;
6)在分支跳转预测出错时,利用检验指针对栈顶指针的自动恢复。
本专利提出的返回地址栈通过循环堆栈结构实现,设计栈顶指针指示返回地址栈当前操作的位置。在不同的处理器指令集中,都有不同的函数调用和函数返回指令,但都通过固定的编码格式实现。取指单元对预取指令的动态预译码通过一组比较器组成的译码单元实现,根据处理器中单发或多发的不同分配逻辑,实现相关地址信息的入栈和出栈操作。
在返回地址栈中存放的是函数返回指令的目标返回地址,也就是函数调用指令下一条指令对应的PC。根据取指单元动态预译码的结果,若当前指令为函数调用指令,将函数的返回地址压入返回地址栈;若当前指令为函数返回指令,从返回地址栈中获得返回地址,跳入返回函数开始预取指令。这一过程如图1所示。
栈顶指针决定了返回地址栈入栈和出栈操作的位置,栈顶指针的维护由取指单元来完成。取指单元直接根据译码单元对操作数的译码结果,直接完成对栈顶指针的修改,按序记录函数调用和函数返回指令的序列信息。当译码为函数调用指令,栈顶指针做加一操作;当译码为函数返回指令,栈顶指针做减一操作。这一过程如图2所示。
在乱序执行的处理器中,指令只有在按序退休后才被确认为正常完成,设计退休指针记录函数调用和函数返回指令的退休情况,为特殊情况下栈顶指针的自动纠错做准备。在综合执行单元中,将根据取指单元的译码信息对函数调用、函数返回指令的退休发起广播,取指单元在获得这一信息后,将修改退休指针以确保准确记录这一过程。函数调用指令退休,退休指针做加一操作;函数返回指令退休,退休指针做减一操作,这一过程如图2所示。
分支指令的目标地址预测预取是一种重要的处理器技术,只有在分支预测正确的情况下,取指单元获得的函数调用和函数返回指令才是有可能被执行的,设计检验指针记录函数调用和函数返回指令在分支预测正确情况下的指令序列信息,为特殊情况下栈顶指针的自动纠错做准备。当分支预测出现错误的时候,取指单元将会把错误指令序列下的函数调用和函数返回指令译码并记录下来,从而导致返回地址栈错误的入栈或出栈操作。在综合执行单元中,将根据取指单元的译码信息对已经确保正确预测的分支后的函数调用和函数返回指令进行检验,并广播确认信息,取指单元在获得这一信息后,将修改检验指针以确保准确记录这一过程。函数调用指令被确认,检验指针做加一操作;函数返回指令被确认,检验指针做减一操作,这一过程如图2所示。
返回地址栈的修复将通过退休指针和检验指针的协同工作来实现,具体的纠错方案如下:
在流水线清空操作时,利用退休指针对栈顶指针自动恢复。当流水线出现清空操作时,栈顶指针将有可能错误的记录下已被清空的函数调用和函数返回指令,由于退休指针正确记录了所有函数调用和函数返回指令的退休信息,可用于在这种情况下对栈顶指针的恢复。当取指单元获得综合执行单元广播的流水线清空操作后,直接将栈顶指针同步到和退休指针相同的数值,这一过程如图3所示。
在分支跳转预测出错时,利用检验指针对栈顶指针的自动恢复。当分支预测出现错误时,栈顶指针将有可能错误的记录下不会被执行的函数调用和函数返回指令,由于检验指针正确记录了在分支预测正确前提下的所有函数调用和函数返回指令的序列信息,可用于在这种情况下对栈顶指针的恢复。当取指单元获得综合执行单元广播的分支指令预测错误信息后,直接将栈顶指针同步到和检验指针相同的数值,恢复操作无需等待当前分支预测错误指令退休时进行,返回地址栈提前进入正常工作状态。这一过程如图3所示。
由于取指单元利用栈顶指针直接完成所有函数调用指令的入栈操作和所有函数返回指令的出栈操作,因此无论被调用子程序的指令周期长短如何,由于有退休指针、检验指针对栈顶指针的自动纠错功能的支持,其函数返回指令的目标地址都会被正确的获得。根据返回地址栈的深度可以确定栈顶指针的宽度,相应的退休指针、检验指针的宽度因为和栈顶指针相同可以随之确定。

Claims (8)

1.一种支持自动纠错功能的返回地址栈实现方法,其特征在于:所述的返回地址栈实现方法包括以下步骤:
1)在指令预取过程中对函数调用指令和函数返回指令进行预译码,并根据预译码结果进行函数返回地址信息的入栈和出栈操作;
2)设置栈顶指针标识指令预译码时返回地址栈的当前操作的位置;
3)采用退休指针记录函数调用和函数返回指令退休后的返回地址栈状态,在流水线清空操作时,利用退休指针对栈顶指针进行自动恢复;
4)采用检验指针记录后级流水线确认预测后的返回地址栈状态,在分支跳转预测出错时,利用检验指针对栈顶指针进行自动恢复。
2.如权利要求1所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于:在所述步骤1)中,在指令预取过程中设置返回地址栈,并对预取指令进行动态预译码,若当前指令为函数调用指令,将函数的返回地址压入返回地址栈;若当前指令为函数返回指令,从返回地址栈中获得返回地址,跳入返回函数开始预取指令。
3.如权利要求1所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于:在所述步骤2)中,所述返回地址栈为循环堆栈结构,栈顶指针指示返回地址栈当前写入和读取的位置,栈顶指针在有效范围内循环更新,在指令预取的同时控制栈顶指针的更新和返回地址栈对应位置的入栈和出栈操作。
4.如权利要求2所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于:在所述步骤2)中,所述返回地址栈为循环堆栈结构,栈顶指针指示返回地址栈当前写入和读取的位置,栈顶指针在有效范围内循环更新,在指令预取的同时控制栈顶指针的更新和返回地址栈对应位置的入栈和出栈操作。
5.如权利要求1所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于:在所述步骤3)中,程序遇到异常时产生流水线清空操作,流水线的各种状态恢复为指令退休时的状态,利用退休指针恢复返回地址栈的栈顶指针,返回地址栈重新进入正常工作状态。
6.如权利要求4所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于:在所述步骤3)中,程序遇到异常时产生流水线清空操作,流水线的各种状态恢复为指令退休时的状态,利用退休指针恢复返回地址栈的栈顶指针,返回地址栈重新进入正常工作状态。
7.如权利要求1所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于:在所述步骤4)中,后级流水线在函数调用指令和函数返回指令执行时即对返回地址预测进行检验。
8.如权利要求7所述的一种支持自动纠错功能的返回地址栈实现方法,其特征在于:在所述步骤4)中,当流水线执行过程中出现分支预测错误,将返回地址栈栈顶指针更新为检验指针,恢复操作无需等待当前分支预测错误指令退休时进行,返回地址栈提前进入正常工作状态。
CN 200910207204 2009-01-22 2009-10-12 一种支持自动纠错功能的返回地址栈实现方法 Active CN101727312B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200910207204 CN101727312B (zh) 2009-01-22 2009-10-12 一种支持自动纠错功能的返回地址栈实现方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN200910095585.9 2009-01-22
CN200910095585 2009-01-22
CN 200910207204 CN101727312B (zh) 2009-01-22 2009-10-12 一种支持自动纠错功能的返回地址栈实现方法

Publications (2)

Publication Number Publication Date
CN101727312A CN101727312A (zh) 2010-06-09
CN101727312B true CN101727312B (zh) 2013-01-09

Family

ID=42448251

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200910207204 Active CN101727312B (zh) 2009-01-22 2009-10-12 一种支持自动纠错功能的返回地址栈实现方法

Country Status (1)

Country Link
CN (1) CN101727312B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102063370B (zh) * 2010-12-17 2013-10-16 北京控制工程研究所 一种从总线指令流中提取实际执行指令和预取指令的方法
US9361144B2 (en) * 2013-06-28 2016-06-07 Globalfoundries Inc. Predictive fetching and decoding for selected return instructions
CN103593169B (zh) * 2013-11-29 2017-09-05 深圳中微电科技有限公司 一种多线程处理器中的指令输出装置、方法及其处理器
US9703948B2 (en) * 2014-03-28 2017-07-11 Intel Corporation Return-target restrictive return from procedure instructions, processors, methods, and systems
CN104035765B (zh) * 2014-05-22 2017-03-15 烽火通信科技股份有限公司 一种嵌入式系统上下文的分析方法
CN104572024A (zh) * 2014-12-30 2015-04-29 杭州中天微系统有限公司 一种用于函数返回地址预测的装置及方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5673408A (en) * 1995-02-14 1997-09-30 Hal Computer Systems, Inc. Processor structure and method for renamable trap-stack
CN1280713C (zh) * 2004-03-09 2006-10-18 中国人民解放军国防科学技术大学 双栈返回地址预测器设计方法
CN1295598C (zh) * 2004-03-09 2007-01-17 中国人民解放军国防科学技术大学 双栈返回地址预测器中返回地址栈的恢复方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5673408A (en) * 1995-02-14 1997-09-30 Hal Computer Systems, Inc. Processor structure and method for renamable trap-stack
CN1280713C (zh) * 2004-03-09 2006-10-18 中国人民解放军国防科学技术大学 双栈返回地址预测器设计方法
CN1295598C (zh) * 2004-03-09 2007-01-17 中国人民解放军国防科学技术大学 双栈返回地址预测器中返回地址栈的恢复方法

Also Published As

Publication number Publication date
CN101727312A (zh) 2010-06-09

Similar Documents

Publication Publication Date Title
CN101727312B (zh) 一种支持自动纠错功能的返回地址栈实现方法
CN101156132B (zh) 用于预测不对准存储器存取的方法和设备
JP3798404B2 (ja) 2レベルの分岐予測キャッシュによる分岐予測
CN100480994C (zh) 分支目标缓冲器及其使用方法
US20070043934A1 (en) Early misprediction recovery through periodic checkpoints
US7478228B2 (en) Apparatus for generating return address predictions for implicit and explicit subroutine calls
CN103543985B (zh) 微处理器以及相关指令执行的方法
CN101916180A (zh) Risc处理器中执行寄存器类型指令的方法和其系统
GB2363873A (en) Processor and Method including a Cache having Confirmation Bits for Improving Address-Predictable Branch Instruction Target Predictions
JP2008544353A (ja) マイクロプロセッサの命令パイプライン内の命令フラッシングを管理する方法及び装置
CN101449238A (zh) 本地和全局分支预测信息存储
JP2000112758A (ja) 投機的実行中に発生する例外を遅延させるシステム及び方法
CN101763249A (zh) 对非控制流指令减少分支检验
CN101477455B (zh) 无预测延时的分支预测控制方法
US11645078B2 (en) Detecting a dynamic control flow re-convergence point for conditional branches in hardware
CN114721724A (zh) 一种基于risc-v指令集的六级流水线处理器
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
WO2018059337A1 (zh) 数据处理装置和方法
CN101866281B (zh) 一种多周期指令执行方法和装置
CN1266592C (zh) 依据确定延迟的动态vliw指令调度方法
CN104854556A (zh) 建立用于子例程返回的分支目标指令高速缓冲存储器(btic)条目以减少执行管线泡,以及相关系统、方法和计算机可读媒体
CN102163139B (zh) 微处理器融合载入算术/逻辑运算及跳跃宏指令
CN104572024A (zh) 一种用于函数返回地址预测的装置及方法
US7873813B2 (en) Variable length VLIW instruction with instruction fetch control bits for prefetching, stalling, or realigning in order to handle padding bits and instructions that cross memory line boundaries
US20140052963A1 (en) Technique to perform three-source operations

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