CN101815984A - 错误的推测性更新的链接栈修复 - Google Patents

错误的推测性更新的链接栈修复 Download PDF

Info

Publication number
CN101815984A
CN101815984A CN200880110141A CN200880110141A CN101815984A CN 101815984 A CN101815984 A CN 101815984A CN 200880110141 A CN200880110141 A CN 200880110141A CN 200880110141 A CN200880110141 A CN 200880110141A CN 101815984 A CN101815984 A CN 101815984A
Authority
CN
China
Prior art keywords
link stack
instruction
link
stack
branch
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.)
Granted
Application number
CN200880110141A
Other languages
English (en)
Other versions
CN101815984B (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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Priority to CN201310139414.8A priority Critical patent/CN103353833B/zh
Publication of CN101815984A publication Critical patent/CN101815984A/zh
Application granted granted Critical
Publication of CN101815984B publication Critical patent/CN101815984B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

每当将链接地址写入到链接栈时,保存链接栈条目的先前值,且在在错误预测的分支之后推测性地执行链接栈推进操作之后将所述先前值恢复到所述链接栈。通过维持管线中未提交的链接栈写入指令的总数的计数以及每一分支指令之前的未提交的链接栈写入指令的数目的计数来检测此情形。当分支被估计且确定为已错误预测时,将与其相关联的计数与总计数进行比较。不一致指示链接栈写入指令是在所述错误预测的分支指令之后被推测性地发布到所述管线中,且将链接地址推进到所述链接栈上。从链接栈恢复缓冲器将先前链接地址恢复到所述链接栈。

Description

错误的推测性更新的链接栈修复
技术领域
本发明大体涉及处理器的领域,且明确地说涉及一种用于修复被推测性指令执行破坏的链接栈的系统和方法。
背景技术
现代软件本质上是模块化的,其特定功能在子例程中实施。为了有效地实施子例程调用和返回,许多现代处理器采用实施(或仿真)链接栈的电路。链接栈是用于存储仅硬件可见且程序设计者不可直接存取的链接地址的逻辑结构。调用(分支到)子例程的指令,例如分支和链接指令,将随后指令的地址“推进”到链接栈上。在子例程中遇到返回型指令时,链接栈被“上托(popped)”以产生进行子例程调用的指令之后的指令的地址。随着子例程调用其它子例程,链接地址被相继推进到链接栈上,且当子例程完成执行并返回时被上托。
大多数现代处理器采用管线式架构,其中各具有多个执行步骤的连续指令在执行中重叠。为了获得最大性能,指令应连续流动穿过管线。任何导致指令在管线中停止的情形均不利地影响性能。
几乎所有现实世界程序均包含有条件分支指令,直到在管线中深处估计指令时才知道其实际分支行为。为了避免将由于等待每一分支指令的实际估计而引起的管线停止,许多现代处理器采用某一形式的分支预测,借此在管线中较早地预测有条件分支指令的分支行为。基于所预测的分支估计,处理器推测性地从所预测地址(分支目标地址(如果分支经预测为被采取)或分支指令之后的下一连续地址(如果分支经预测为未采取))获取指令并执行指令。当确定实际分支行为时,如果分支被错误地预测,那么从管线冲洗推测性获取的指令,且从正确的下一地址获取新指令。错误预测的分支不利地影响性能和功率消耗两者。
错误预测的分支的另一结果可能是链接栈被破坏。如果错误预测的分支之后推测性地执行的指令包含子例程返回和后续调用,那么将从链接栈上托有效链接地址,且将新链接地址推进到栈上。依据链接栈硬件实施方案,错误地上托链接栈本身不会具有不利后果,因为上托所述栈仅移动读取指针;数据保持在链接栈缓冲器中。然而,随后将新的值错误地推进到链接栈上可重写先前的值。当检测到分支错误预测且获取并执行适当指令流时,如果链接栈破坏未检测到并加以修复,那么子例程返回将把控制转移到错误位置。
一种避免链接栈破坏的方式是禁止推测性指令进行的链接栈更新。举例来说,可延迟链接栈更新,直到解析所有有条件分支为止。随着分支估计在管线中深处在执行管级中发生,这将有效地将链接栈更新移动到管线中深处。然而,这将由于有效地拒绝短的子例程使用链接栈功能性而不利地影响短的子例程的性能。因此,为了获得来自链接栈硬件的最大性能,链接栈优选地在管线中较早地更新,例如在解码管级处更新。
一种防止由于分支错误预测引起的处理器资源(例如,寄存器重命名缓冲器等)的破坏的已知方法是维持资源的并行、“已提交的”副本。所述已提交的副本仅在改变其状态的指令提交以供执行时才被更新。当指令确定不存在将阻止指令完成执行的危险时,所述指令确认其自身的执行。举例来说,实施算术或逻辑运算的指令可在其所有运算数可用(即,其已由其它指令计算或已从存储器成功检索)时确认执行。当一指令和管线中在其之前的所有指令被确认时,所述指令提交以供执行。
为了避免由于分支错误预测引起的破坏,处理器资源的工作副本的状态在指令的例程执行期间以正在进行为基础而改变;然而,处理器资源的已提交副本的状态仅由已提交以供执行的指令改变。当检测到分支错误预测时,将处理器资源的已提交副本复制到工作副本并替换工作副本的内容。此技术将工作副本置于其在任何指令的推测性执行之前所具有的状态中。
有可能采用此方法来解决链接栈破坏问题。工作链接栈将由管线中实施子例程调用和返回的指令更新。已提交链接栈将仅由已提交以供执行的子例程调用和返回指令更新。在发现分支错误预测后,链接栈的已提交副本将被简单地复制为工作链接栈。然而,此方法在硅面积和功率消耗两个方面代价较大。复制链接栈需要复制实施所述链接栈的寄存器或其它存储器结构,连同管理链接栈所必需的控制逻辑。额外硬件占据了宝贵的集成电路面积,增加了布线拥塞,且使时钟和功率分布复杂化。连续更新两个完整的链接栈标称消耗仅运行一个链接栈的功率的两倍。尤其在部署于移动电子装置中的处理器中,使功率消耗最小化对于保存电池寿命和减少热耗散很关键。
发明内容
根据本文揭示和主张的一个或一个以上实施例,检测并有效地修复链接栈破坏。每当将链接地址写入到链接栈时,将链接栈条目的先前值保存在链接栈恢复缓冲器中。当检测到错误的链接栈推进操作时,将此值恢复到链接栈。错误的链接栈推进操作是在错误预测的分支之后推测性地执行的操作。通过维持管线中未提交的链接栈写入指令的总数的计数以及在每一分支指令之前的未提交的链接栈写入指令的数目的计数来检测此情形。当分支经估计且确定为已错误预测时,将与其相关联的计数与总计数进行比较。不一致指示链接栈写入指令是在所述错误预测的分支指令之后被推测性地发布到所述管线中,且将链接地址推进到所述链接栈上。在此情况下,从链接栈恢复缓冲器将先前链接地址恢复到所述链接栈。
一个实施例涉及一种管理包括多个条目的链接栈的方法,每一条目操作以存储链接地址。在将任何新链接地址写入到链接栈时,保存链接栈条目的先前值。预测分支指令的分支估计。响应于所述预测,推测性地执行指令。确定分支估计已错误预测。确定链接栈已被推测性地写入。将所保存的值恢复到链接栈。
另一实施例涉及一种处理器。所述处理器包含指令执行管线和包括多个条目的链接栈,每一条目操作以存储链接地址。所述处理器进一步包含链接栈恢复缓冲器,其操作以在任何链接栈条目被以新的链接地址重写后存储链接栈条目的先前值,且进一步操作以在检测到置换所述链接栈条目的链接栈写入是推测性的且错误的之后将先前值恢复到链接栈条目。所述处理器还包含链接栈监视器电路,其操作以检测向链接栈的错误的推测性写入。
又一实施例涉及一种处理器。所述处理器包含指令执行管线和包括多个条目的链接栈,每一条目操作以存储链接地址。所述处理器进一步包含链接栈恢复缓冲器,其操作以在任何链接栈条目被以新的链接地址重写后存储链接栈条目的先前值,且进一步操作以在检测到置换所述链接栈条目的链接栈写入是推测性的且错误的之后将先前值恢复到链接栈条目。所述处理器还包含升/降计数器,其操作以通过在解码链接栈写入指令后递增且在链接栈写入指令提交以供执行后递减而维持管线中未提交的链接栈写入指令的计数。所述处理器进一步包含与管线中每一未提交的分支指令相关联的计数器,所述计数器操作以通过在解码分支指令后初始化到升/降计数器值且在链接栈写入指令提交以供执行后递减而维持管线中在分支指令之前的未提交的链接栈写入指令的计数。所述处理器还进一步包含比较器,其操作以通过将升/降计数器值与和错误预测的分支指令相关联的计数器的值进行比较而检测错误的推测性链接栈写入操作。
附图说明
图1是处理器的功能框图。
图2是处理器的选定部分的功能框图。
图3是代码流程图。
图4是链接栈管理的方法的流程图。
具体实施方式
图1描绘包含用以有效地修复由于分支错误预测引起的链接栈的破坏的电路的处理器10的功能框图。处理器10根据控制逻辑11执行指令执行管线12中的指令。管线12可以是具有多个并行执行管线14、16的超标量设计。管线12包含组织在若干管级中的各种寄存器或锁存器18,以及例如算术逻辑单元(ALU)(未图示)等逻辑和计算电路。通用寄存器(GPR)堆20提供构成存储器层级的顶部的寄存器。支持管线12的其它处理器资源是链接栈22、链接栈恢复缓冲器(LSRB)23、分支预测电路24和分支信息队列(BIQ)25,其操作在本文中进一步阐释。
管线12从指令高速缓冲存储器(I-高速缓冲存储器或I$)26获取指令,其中存储器寻址和许可由指令侧翻译旁视缓冲器(ITLB)28管理。从数据高速缓冲存储器(D-高速缓冲存储器或D$)30存取数据,其中存储器寻址和许可由主翻译旁视缓冲器(TLB)32管理。在各种实施例中,ITLB 28可包括TLB 32的一部分的副本。或者,ITLB 28与TLB 32可集成。在一些实施例中,专用数据侧TLB或DTLB(未图示)可与ITLB 28完全分离。类似地,在处理器10的各种实施例中,I-高速缓冲存储器26与D-高速缓冲存储器30可统一。
I-高速缓冲存储器26和/或D-高速缓冲存储器30中的未中致使在存储器接口36的控制下存取主(芯片外)存储器34(其它高速缓冲存储器(未图示)可插入在处理器10与主存储器34之间)。处理器10可包含控制对各种外围装置40、42的存取的输入/输出(I/O)接口38。所属领域的技术人员将了解,处理器10的众多变型是可能的。举例来说,处理器10可包含针对I-高速缓冲存储器26和D-高速缓冲存储器30中的任一者或两者的第二级(L2)高速缓冲存储器。另外,处理器10中描绘的功能块中的一者或一者以上可从特定实施例中省略。
图2是描绘链接栈恢复缓冲器23修复由于错误预测的分支引起的链接栈22的破坏的操作的功能框图。为了清楚起见从图2中省略例如控制电路和信号等低级细节。在所描绘的实施例中,链接栈22通过如此项技术中众所周知递增和递减读取和写入指针而实施为环形缓冲器,其在此情况下包括8个寄存器。此实施方案不是限定性的,且本发明的实施例可有利地应用于使用此项技术中已知或尚待发明的任何硬件结构而实施的链接栈22。
链接栈恢复缓冲器23维持由链接栈推进操作重写的最后链接地址的副本。即,当分支和链接指令将链接地址写入到链接栈22时,存储在对应链接栈条目中的先前地址自动保存到链接栈恢复缓冲器23。另外,在所描绘的实施例中,存储链接栈索引,使得链接地址可视需要恢复到链接栈22中其被重写的位置。在所描绘的实施例中,链接栈恢复缓冲器23包括单一寄存器。然而,本发明不限于此实施例。在其它实施例中,尤其在具有非常深的管线的处理器中,链接栈恢复缓冲器23可包括多个条目,且可视要求或需要而组织为栈、缓冲器或其它逻辑结构。
当在管线12中执行子例程调用(例如,分支和链接)指令时,将链接地址写入到链接栈22。优选地在管线12中较早地写入链接地址,例如在解码管级处,如图2中描绘的实施例中那样。这允许短的子例程利用链接栈22硬件。然而,在其它实施例中,可视特定管线12的要求或需要而在任何管级处写入链接栈22。如果响应于分支预测而推测性地获取包含链接栈写入指令的指令流,那么有可能链接栈写入操作可超越有效链接地址。因此,当新的值写入到链接栈22时,将先前链接地址保存到链接栈恢复缓冲器23。当检测到分支错误预测时,如果链接栈写入确定为已错误,那么可将存储在链接栈恢复缓冲器23中的先前值恢复到其被重写处的链接栈22条目。
图3描绘论证可如何响应于错误预测的分支而破坏链接栈22的指令的假设序列。主程序序列(右侧)执行两个加载(LD)指令:ADD和存储(ST),接着是分支和链接指令调用子例程A(BL SUB A)。这是适当的代码序列,如描绘程序流的实线箭头所表示。BL SUB A指令将随后的LD指令的地址推进到链接栈上,且分支到子例程A,其中执行LD、ADD和比较(CMP)指令。
当管线12获取针对子例程A的指令时,检测到如果相等则分支(branch if equal,BEQ)指令,且所预测的分支方向以及下一地址在分支预测电路51中公式化。在此实例中,分支被错误地预测为采用(以索引1为分支目标)。在索引1处开始获取指令且推测性地执行指令,如描绘程序流的虚线箭头所指示。执行流因此分支到索引1处的LD指令,从而跳过到链接返回指令BX LR(其是从子例程A的第一退出点)的第一分支。
推测性地执行LD、减法(SUB)和ST指令,且BX LR指令分支到链接栈22的顶部处的链接地址,从而通过移动读取指针而上托链接栈22。在图2中描绘的链接栈实施例中,上托链接栈22不会破坏任何条目。即,在检测到错误预测的分支后,链接栈22读取指针可简单地复位到其先前位置。
推测性程序执行沿主程序流继续,执行LD、SUB和ST指令。接着推测性地执行对子例程B的调用,从而分支到子例程B中的LD指令且将随后的主程序ADD指令的地址推进到链接栈22上。链接栈22推进操作重写链接栈条目的先前值,其含有较早主程序LD指令的地址。根据本发明的实施例,当将ADD指令的地址推进到链接栈22上时,将LD指令的地址保存在链接栈恢复缓冲器23中。推测性执行在子例程B处继续,执行两个LD指令和一ADD。
此时,较早的错误预测的分支指令已行进穿过管线12且在执行管级中估计。检测到分支错误预测,且冲洗管线12中在错误预测的分支指令之后的所有指令(子例程A中到索引1的BEQ)。还检测到对链接栈22的错误的推进操作(如本文中更详细描述),且将主程序LD指令的地址从链接栈恢复缓冲器23写入到链接栈22中的适当条目(即,将链接栈索引连同链接地址一起保存在链接栈恢复缓冲器23中),从而重写主程序ADD指令的错误地址。还复位链接栈22读取和写入指针,且获取并执行在错误预测的分支指令之后的指令(即,以在到索引1的BEQ之后的LD开始)。在执行LD和ORR指令之后,到链接返回指令的分支分支到主程序中的LD指令(并非受破坏的链接栈22原本会将其导向到的ADD),且适当的指令执行继续。
返回参看图2,通过针对每一预测的分支指令将管线12中未提交的链接栈写入指令的总数的计数与管线12中在分支指令之前的未提交的链接栈写入指令的数目的计数进行比较而检测对链接栈22的错误的推测性写入。这两个计数的不一致指示将链接地址推进到链接栈22上的在相关分支指令之后的链接栈写入指令。如果所述分支指令被确定为已被错误预测,那么已知推进操作已经是推测性的且是错误的,且可通过恢复保存在链接栈修复缓冲器23中的链接地址来修复。
当在管线12中解码写入到链接栈22的指令(例如,分支和链接构造)时,将链接地址写入到链接栈22且递增升/降计数器50。在图2中描绘的实施例中,这在解码管级处发生,但本发明不限于此实施方案。当写入到链接栈22的每一指令提交以供在管线12中执行时,递减升/降计数器50。因此,升/降计数器50的值指示管线12中“正在进行中”的未提交的链接栈写入指令的数目,而不管管线12中指令的次序如何。
支持分支预测和推测性指令执行的许多处理器包含分支信息队列(BIQ)25。BIQ 25存储关于正在进行中的分支指令的信息,例如分支预测、所预测的分支目标地址等。BIQ25中的每一条目与唯一未提交(即,正在进行中)的分支指令相关联。根据本发明的一个或一个以上实施例,计数字段界定于每一BIQ 25条目中,且因此与每一未提交的分支指令相关联。当分支指令离开例如解码管级等较早管级时,将升/降计数器50的当前值复制到BIQ条目的与所述分支指令相关联的计数字段中。此值表示管线12中以及因此在分支指令之前的未提交的链接栈写入指令的数目。BIQ计数字段值每当写入到链接栈22的指令提交以供在管线12中执行时被递减。BIQ计数字段值因此表示管线12中在相关联的分支指令之前的未提交的链接栈写入指令的数目。
BIQ计数字段以升/降计数器50的值初始化。BIQ计数字段和升/降计数器50两者均通过链接栈写入指令提交而递减。升/降计数器50通过新解码的链接栈写入指令而递增;BIQ计数字段永不递增。因此,两个计数值将仅当在相关分支指令之后没有新的链接栈写入指令进入管线12的情况下彼此跟踪。相反,两个计数值的不一致指示在相关分支指令之后至少一个新的链接栈写入指令进入管线12。
当分支指令在管线12中估计且经确定为已错误预测时,从管线12冲洗在错误预测的分支指令之后的所有指令,如此项技术中已知。另外,在比较器52处将与错误预测的分支指令相关联的BIQ计数字段与升/降计数器50的值进行比较。如果两个计数相同,那么在错误预测的分支指令之前的未提交的链接栈写入指令的数目等于管线12中未提交的链接栈写入指令的总数,这意味着在错误预测的分支之后没有未提交(推测性执行)的链接栈写入指令。因此,不需要链接栈22修复。
然而,如果BIQ计数字段不同于升/降计数器50的值,那么在为错误预测的分支指令创建BIQ条目之后解码至少一个链接栈写入指令,这意味着链接栈22是由响应于分支错误预测而推测性执行的指令写入,且可需要通过将链接栈修复缓冲器23的内容恢复到链接栈22而进行修复。这在功能上由比较电路52的输出指示,所述输出在链接栈修复缓冲器23与管线12之间多路复用对链接栈22的输入。所属领域的技术人员将了解,实际的实施方案将不同。升/降计数器50、多个BIQ计数字段、比较器52和其它实施逻辑(未图示)包括链接栈监视器电路。
在图2中描绘的实施例中,链接栈修复缓冲器23包括单一条目。在此情况下,比较器52可实施简单的逐位XOR函数,以及归约AND。在其它实施例(其中两个或两个以上链接地址可保存在链接栈修复缓冲器23中)中,升/降计数器50值与BIQ计数字段之间的数值比较将指示在错误预测的分支之后且将被修复的链接栈写入操作的数目。注意,XOR/AND函数可能不能在2n个链接栈写入指令跟随错误预测的分支指令的情况下检测受破坏的链接栈22,其中n是BIQ计数字段的宽度(促使所述计数字段“缠绕”)。对于n>=2,这是不可能的,除非管线12极深。
在图2中描绘的至少链接栈22(即,实施为环形缓冲器)的实施例中,推测性链接栈写入指令(推进)将不会破坏链接栈22条目,除非推测性链接栈读取指令(上托)在其之前。因此,在一个实施例中,来自链接栈修复缓冲器23的所存储的值仅在检测到推测性链接栈上托操作在错误的推测性链接栈推进之前的情况下恢复到链接栈22。在另一实施例中,来自链接栈修复缓冲器23的所存储的值仅在检测到推测性链接栈上托和推进操作两者的情况下恢复到链接栈22,而不管其执行的相对次序如何。在一个实施例中,推测性链接栈上托检测可类似于本文针对检测推测性链接栈推进操作所描述而实施,即,维持管线范围的推测性链接栈读取指令升/降计数器和与每一分支指令相关联的推测性链接栈读取指令计数,并在分支经确定为已错误预测的情况下比较所述两个值。
图4描绘管理链接栈的方法60的流程图。预测分支指令的估计(框62)。基于分支预测,推测性地从下一连续地址或所预测的分支目标地址获取指令并执行指令(框64)。在指令(包含推测性执行的指令)写入链接栈22的任何时间(框66),将被重写的链接栈条目的先前值保存在链接栈恢复缓冲器23中(框68)。当在执行管级中估计分支指令时,如果分支预测是正确的(框70),那么管线操作照常继续。如果分支被错误预测(框70),那么从管线冲洗推测性指令,且从分支指令之后的地址或所计算的分支目标地址获取适当指令(框72)。
确认推测性指令(即,分支指令之后的指令)是否写入了链接栈22(框74)。在一个实施例中,这包括维持管线中所有未提交的链接栈写入指令的进行中的计数以及在每一分支指令之前的所有未提交的链接栈写入指令的计数,以及将与错误预测的分支指令相关联的计数与总计数进行比较。如果错误预测的分支指令之后没有指令写入链接栈22(框74),那么管线操作照常继续。如果推测性指令写入了链接栈22,那么可在所存储的链接栈索引处,从链接栈恢复缓冲器23恢复先前链接栈条目值(框76),且管线操作照常继续。在一些实施例中,链接栈22恢复仅在推测性读取指令还上托链接栈22的情况下发生。
在一个实施例中,单一条目链接栈修复缓冲器23包括用于链接地址的32个位和一模式位(例如,ARM/Thumb模式位),以及一3位索引(用于8条目链接栈22)。每一BIQ计数字段可仅包括2或3个位,这取决于管线12的深度。因此,此方法的硬件影响最小。单一条目链接栈修复缓冲器23的仿真与无链接栈修复机制相比产生链接栈准确性的大于20%的增加。较深链接栈修复缓冲器的仿真产生可忽略的额外准确性的增加。当然,这些结果取决于众多因素,包含管线深度、代码特性等。一般来说,在已知本发明的教示的情况下,所属领域的技术人员将能够针对任何特定处理器实施方案选择使性能和功率节省与设计复杂性和硅面积平衡的链接栈修复缓冲器深度。即使具有多个链接栈修复缓冲器条目(以及计数器比较的相伴复杂性),本发明的实施例也提供比单独“已提交”的链接栈有效得多的受破坏链接栈修复的解决方案。此外,链接栈22操作在管线12中较早发生,从而针对甚至短的子例程也提供链接栈优化。
如本文所使用,“链接栈写入指令”是将链接地址推进到链接栈上的任何指令(例如,分支和链接指令),即使所述指令实施其它功能性(例如,程序流重定向)。如本文所使用,“计数器”可包括操作以递增和/或递减所存储的值的硬件计数器,或可包括缓冲器中的位字段,其值是通过读取所述值、执行所述操作和将新的值写入到位字段而递增和/或递减。
尽管本文中已相对于本发明的特定特征、方面和实施例描述了本发明,但将了解,在本发明的广泛范围内,众多变化、修改和其它实施例是可能的,且因此,所有变化、修改和实施例应被视为属于本发明的范围内。因此,当前实施例应在所有方面被解释为说明性而非限定性的,且落在所附权利要求书的含义和等效性范围内的所有改变均既定包含于其中。

Claims (18)

1.一种管理包括多个条目的链接栈的方法,每一条目操作以存储链接地址,所述方法包括:
在将任何新链接地址写入到链接栈条目后,保存所述链接栈条目的先前值;
预测分支指令的分支估计;
响应于所述预测,推测性地执行指令;
检测所述分支估计被错误预测;
检测所述链接栈被推测性地写入;以及
将所述保存的值恢复到所述链接栈。
2.根据权利要求1所述的方法,其中检测所述链接栈被推测性地写入包括:
维持管线中未提交的链接栈写入指令的总数的计数;
维持所述管线中每一未提交的分支指令之前的所述未提交的链接栈写入指令的与所述每一未提交的分支指令相关联的计数;以及
在检测到分支被错误预测后,将与所述分支指令相关联的所述计数与所述总计数进行比较,且如果所述计数不相同,那么检测所述链接栈被推测性地写入。
3.根据权利要求2所述的方法,其中维持所述管线中未提交的链接栈写入指令的所述总数的计数包括:
在解码链接栈写入指令后递增升/降计数器;以及
在链接栈写入指令提交以供执行时递减所述升/降计数器。
4.根据权利要求3所述的方法,其中维持所述管线中每一未提交的分支指令之前的所述未提交的链接栈写入指令的与所述每一未提交的分支指令相关联的计数包括:
在解码所述分支指令后将所述升/降计数器的值复制到与所述分支指令相关联的计数器,以及
当链接栈写入指令提交以供执行时递减所述计数器。
5.根据权利要求4所述的方法,其中与所述分支指令相关联的所述计数器是与所述分支指令相关联的分支指令队列条目中的字段。
6.根据权利要求1所述的方法,其进一步包括连同所述先前值一起保存所述新写入的链接栈条目的链接栈索引,且其中将所述保存的值恢复到所述链接栈包括将所述值恢复到所述保存的链接栈索引处的所述链接栈条目。
7.根据权利要求1所述的方法,其进一步包括检测所述链接栈被推测性地读取,且其中将所述保存的值恢复到所述链接栈包括仅在所述链接栈被推测性地读取且还被推测性地写入的情况下将所述保存的值恢复到所述链接栈。
8.根据权利要求7所述的方法,其中将所述保存的值恢复到所述链接栈包括仅在所述链接栈在被推测性地写入之前被推测性地读取的情况下将所述保存的值恢复到所述链接栈。
9.一种处理器,其包括:
指令执行管线;
包括多个条目的链接栈,每一条目操作以存储链接地址;
链接栈恢复缓冲器,其操作以在任何链接栈条目被以新的链接地址重写后存储链接栈条目的先前值,且进一步操作以在检测到置换所述链接栈条目的链接栈写入是推测性的且错误的之后将所述先前值恢复到所述链接栈条目;以及
链接栈监视器电路,其操作以检测向所述链接栈的错误的推测性写入。
10.根据权利要求9所述的处理器,其中所述链接栈监视器电路操作以通过检测所述管线中错误预测的分支指令之后的一个或一个以上链接栈写入指令而检测向所述链接栈的错误的推测性写入。
11.根据权利要求10所述的处理器,其中所述链接栈监视器电路操作以通过将所述管线中在错误预测的分支指令之前的未提交的链接栈写入指令的计数与所述管线中未提交的链接栈写入指令的总数的计数进行比较而检测所述管线中在错误预测的分支指令之后的一个或一个以上链接栈写入指令。
12.根据权利要求11所述的处理器,其中所述管线中未提交的链接写入指令的所述总数的所述计数是升/降计数器的值,所述升/降计数器当解码链接栈写入指令时递增且当链接栈写入指令提交以供执行时递减。
13.根据权利要求12所述的处理器,其中所述管线中在错误预测的分支指令之前的所述未提交的链接栈写入指令的所述计数是与分支指令相关联的计数器的值,所述计数器当解码所述分支指令时初始化到所述升/降计数器的所述值且在链接栈写入指令提交以供执行时递减,且所述分支指令被估计为已被错误预测。
14.一种处理器,其包括:
指令执行管线;
包括多个条目的链接栈,每一条目操作以存储链接地址;
链接栈恢复缓冲器,其操作以在任何链接栈条目被以新的链接地址重写后存储链接栈条目的先前值,且进一步操作以在检测到置换所述链接栈条目的链接栈写入是推测性的且错误的之后将所述先前值恢复到所述链接栈条目;
升/降计数器,其操作以通过在解码链接栈写入指令后递增且在链接栈写入指令提交以供执行后递减而维持所述管线中未提交的链接栈写入指令的计数;
与所述管线中每一未提交的分支指令相关联的计数器,所述计数器操作以通过在解码分支指令后初始化到所述升/降计数器值且在链接栈写入指令提交以供执行后递减而维持所述管线中在所述分支指令之前的未提交的链接栈写入指令的计数;以及
比较器,其操作以通过将所述升/降计数器值与和错误预测的分支指令相关联的所述计数器的值进行比较而检测错误的推测性链接栈写入操作。
15.根据权利要求14所述的处理器,其中所述链接栈恢复缓冲器进一步操作以存储所述被重写条目的链接栈索引。
16.根据权利要求14所述的处理器,其中所述链接栈恢复缓冲器包括单一条目。
17.根据权利要求14所述的处理器,其中所述比较器实施逐位XOR和归约AND函数。
18.根据权利要求14所述的处理器,其中与所述管线中每一未提交的分支指令相关联的所述计数器包括分支指令队列中的计数字段。
CN2008801101411A 2007-10-05 2008-10-03 错误的推测性更新的链接栈修复 Expired - Fee Related CN101815984B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310139414.8A CN103353833B (zh) 2007-10-05 2008-10-03 错误的推测性更新的链接栈修复

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/867,727 US7971044B2 (en) 2007-10-05 2007-10-05 Link stack repair of erroneous speculative update
US11/867,727 2007-10-05
PCT/US2008/078789 WO2009046326A1 (en) 2007-10-05 2008-10-03 Link stack repair of erroneous speculative update

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201310139414.8A Division CN103353833B (zh) 2007-10-05 2008-10-03 错误的推测性更新的链接栈修复

Publications (2)

Publication Number Publication Date
CN101815984A true CN101815984A (zh) 2010-08-25
CN101815984B CN101815984B (zh) 2013-05-29

Family

ID=39951564

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201310139414.8A Expired - Fee Related CN103353833B (zh) 2007-10-05 2008-10-03 错误的推测性更新的链接栈修复
CN2008801101411A Expired - Fee Related CN101815984B (zh) 2007-10-05 2008-10-03 错误的推测性更新的链接栈修复

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201310139414.8A Expired - Fee Related CN103353833B (zh) 2007-10-05 2008-10-03 错误的推测性更新的链接栈修复

Country Status (6)

Country Link
US (2) US7971044B2 (zh)
EP (1) EP2195735A1 (zh)
JP (1) JP5313253B2 (zh)
KR (1) KR101174560B1 (zh)
CN (2) CN103353833B (zh)
WO (1) WO2009046326A1 (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106527335A (zh) * 2016-12-08 2017-03-22 湖南戈人自动化科技有限公司 一种支持协程功能的plc控制器
CN107077335A (zh) * 2014-11-18 2017-08-18 高通股份有限公司 使用所预测值表来提供循环不变值预测,以及相关设备、方法和计算机可读媒体
CN109358948A (zh) * 2013-03-15 2019-02-19 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
CN111989676A (zh) * 2018-04-24 2020-11-24 Arm有限公司 使用间接控制流指令的推测
US11294680B2 (en) 2013-03-15 2022-04-05 Intel Corporation Determining branch targets for guest branch instructions executed in native address space
US11467839B2 (en) 2011-01-27 2022-10-11 Intel Corporation Unified register file for supporting speculative architectural states

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8510596B1 (en) 2006-02-09 2013-08-13 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
US8438372B2 (en) 2007-10-05 2013-05-07 Qualcomm Incorporated Link stack repair of erroneous speculative update
US7971044B2 (en) * 2007-10-05 2011-06-28 Qualcomm Incorporated Link stack repair of erroneous speculative update
US8943299B2 (en) * 2010-06-17 2015-01-27 International Business Machines Corporation Operating a stack of information in an information handling system
US9411590B2 (en) * 2013-03-15 2016-08-09 Qualcomm Incorporated Method to improve speed of executing return branch instructions in a processor
US10079841B2 (en) 2013-09-12 2018-09-18 Virsec Systems, Inc. Automated runtime detection of malware
GB2516999B (en) * 2014-01-31 2015-07-22 Imagination Tech Ltd An improved return stack buffer
CN107077412B (zh) 2014-06-24 2022-04-08 弗塞克系统公司 单层或n层应用的自动化根本原因分析
CN106687981B (zh) 2014-06-24 2020-09-01 弗塞克系统公司 用于自动化检测输入和输出验证和资源管理漏洞的系统和方法
KR102419574B1 (ko) 2016-06-16 2022-07-11 버섹 시스템즈, 인코포레이션 컴퓨터 애플리케이션에서 메모리 손상을 교정하기 위한 시스템 및 방법
WO2024076427A1 (en) * 2022-10-04 2024-04-11 Microsoft Technology Licensing, Llc Reuse of branch information queue entries for multiple instances of predicted control instructions in captured loops in a processor

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5563594A (en) * 1994-08-31 1996-10-08 Motorola Circuit and method of timing data transfers
US5964868A (en) * 1996-05-15 1999-10-12 Intel Corporation Method and apparatus for implementing a speculative return stack buffer
US6151671A (en) * 1998-02-20 2000-11-21 Intel Corporation System and method of maintaining and utilizing multiple return stack buffers
US6560696B1 (en) * 1999-12-29 2003-05-06 Intel Corporation Return register stack target predictor
US6910124B1 (en) * 2000-05-02 2005-06-21 International Business Machines Corporation Apparatus and method for recovering a link stack from mis-speculation
US6848044B2 (en) * 2001-03-08 2005-01-25 International Business Machines Corporation Circuits and methods for recovering link stack data upon branch instruction mis-speculation
CN1326037C (zh) * 2004-02-06 2007-07-11 智慧第一公司 用于更正微处理器中的内部调用或返回堆栈的方法与装置
US20070204142A1 (en) * 2006-02-27 2007-08-30 Dieffenderfer James N Method and apparatus for repairing a link stack
US7971044B2 (en) 2007-10-05 2011-06-28 Qualcomm Incorporated Link stack repair of erroneous speculative update
US8438372B2 (en) 2007-10-05 2013-05-07 Qualcomm Incorporated Link stack repair of erroneous speculative update

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11467839B2 (en) 2011-01-27 2022-10-11 Intel Corporation Unified register file for supporting speculative architectural states
CN109358948A (zh) * 2013-03-15 2019-02-19 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
CN109358948B (zh) * 2013-03-15 2022-03-25 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
US11294680B2 (en) 2013-03-15 2022-04-05 Intel Corporation Determining branch targets for guest branch instructions executed in native address space
CN107077335A (zh) * 2014-11-18 2017-08-18 高通股份有限公司 使用所预测值表来提供循环不变值预测,以及相关设备、方法和计算机可读媒体
CN106527335A (zh) * 2016-12-08 2017-03-22 湖南戈人自动化科技有限公司 一种支持协程功能的plc控制器
CN106527335B (zh) * 2016-12-08 2019-03-19 湖南戈人自动化科技有限公司 一种支持协程功能的plc控制器
CN111989676A (zh) * 2018-04-24 2020-11-24 Arm有限公司 使用间接控制流指令的推测

Also Published As

Publication number Publication date
KR20100075607A (ko) 2010-07-02
JP2010541106A (ja) 2010-12-24
CN103353833B (zh) 2016-04-13
CN101815984B (zh) 2013-05-29
WO2009046326A1 (en) 2009-04-09
JP5313253B2 (ja) 2013-10-09
US20110219220A1 (en) 2011-09-08
CN103353833A (zh) 2013-10-16
KR101174560B1 (ko) 2012-08-17
US8438371B2 (en) 2013-05-07
EP2195735A1 (en) 2010-06-16
US20090094444A1 (en) 2009-04-09
US7971044B2 (en) 2011-06-28

Similar Documents

Publication Publication Date Title
CN101815984B (zh) 错误的推测性更新的链接栈修复
US5615350A (en) Apparatus to dynamically control the out-of-order execution of load-store instructions in a processor capable of dispatching, issuing and executing multiple instructions in a single processor cycle
US7689812B2 (en) Method and system for restoring register mapper states for an out-of-order microprocessor
US7673190B1 (en) System and method for detecting and recovering from errors in an instruction stream of an electronic data processing system
US7203817B2 (en) Power consumption reduction in a pipeline by stalling instruction issue on a load miss
CN101601009B (zh) 处理器及在其中执行指令的方法
EP1296229B1 (en) Scoreboarding mechanism in a pipeline that includes replays and redirects
US6671762B1 (en) System and method of saving and restoring registers in a data processing system
US7155599B2 (en) Method and apparatus for a register renaming structure
US6973563B1 (en) Microprocessor including return prediction unit configured to determine whether a stored return address corresponds to more than one call instruction
CN101147127A (zh) 指令预取机构
CN103488463A (zh) 通过循环结束分支来抑制分支历史寄存器的更新
CN101826001A (zh) 微处理器以及快速执行条件分支指令的方法
US10977038B2 (en) Checkpointing speculative register mappings
US8301992B2 (en) System and apparatus for error-correcting register files
US11599359B2 (en) Methods and systems for utilizing a master-shadow physical register file based on verified activation
EP0649086B1 (en) Microprocessor with speculative execution
US7269714B2 (en) Inhibiting of a co-issuing instruction in a processor having different pipeline lengths
EP1369786B1 (en) Method and apparatus for providing fault-tolerance for temporary results within a central processing unit
US7100024B2 (en) Pipelined microprocessor, apparatus, and method for generating early status flags

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130529

Termination date: 20211003

CF01 Termination of patent right due to non-payment of annual fee