CN1280713C - 双栈返回地址预测器设计方法 - Google Patents
双栈返回地址预测器设计方法 Download PDFInfo
- Publication number
- CN1280713C CN1280713C CN 200410022965 CN200410022965A CN1280713C CN 1280713 C CN1280713 C CN 1280713C CN 200410022965 CN200410022965 CN 200410022965 CN 200410022965 A CN200410022965 A CN 200410022965A CN 1280713 C CN1280713 C CN 1280713C
- Authority
- CN
- China
- Prior art keywords
- stack
- return
- module
- address
- prediction
- 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.)
- Expired - Fee Related
Links
Images
Abstract
本发明公开了一种双栈返回地址预测器的设计方法,目的是在减小硬件实现复杂度的同时,克服返回地址预测错误,提高返回地址预测器的预测精度。本发明总体硬件叫双栈返回地址预测器,包括预测模块、执行模块,预测模块由RAS_PRED、指针模块2和读写模块2构成,执行模块由RAS_EXE、指针模块1和读写模块1构成;由预测模块为返回指令提供预测目标地址,由执行模块在发生分支误预测时对预测模块的状态进行恢复。本发明硬件实现复杂度低,返回指令目标地址的预测精度高。
Description
技术领域:本发明涉及微处理器设计中返回地址预测器的设计方法,尤其是在允许前瞻执行的高性能微处理器设计中当发生分支误预测时返回地址预测器的设计方法。
背景技术:过程调用时的返回指令是导致分支误预测的重要根源之一。不过,过程调用指令和返回指令总是成对出现的,且满足后进先出原则,因此可以使用返回地址栈RAS(Return Address Stack)对返回指令进行预测。但是由于大多数微处理器都允许前瞻执行,所以可能会有一些不该执行的调用/返回指令被执行了,从而错误地修改了返回地址栈。为了提高返回地址栈的预测精度,必须在发生分支误预测时对返回地址栈进行恢复。
通常的做法是在分支预测阶段遇到分支指令时保存返回地址栈的栈顶指针,Intel的64位系列微处理器采用的就是这种方法。在专利号为6,253,315的美国专利中对这种方法进行了详细说明。这种方法的缺点主要有两点:一是在分支预测阶段,只要遇到分支指令,就必须保存返回地址栈的当前栈顶指针,以便发生分支误预测时进行恢复,而检测到分支误预测时,需要根据分支的类型以及不同的分支执行情况进行相应的恢复,因此硬件实现比较复杂,成本较高;二是如果被错误执行的指令中包含<……返回,调用……>这样的指令序列,那么即使使用保存的栈顶指针进行了恢复,可是栈顶的内容却被错误执行的指令序列修改了,还会发生返回地址预测错误,因此预测精度不高。
为了进一步提高返回地址栈的预测精度,在保存栈顶指针的同时,还可以保存栈顶指针所指向的入口的内容,在第31界国际微体系结构年会(the 31stAnnual ACM/IEEE International Symposium on Microarchitecture)论文集中的“Improving Prediction for Procedure Returns with Return-Address-Stack RepairMechanisms”一文中提到了这种方法。这种方法的硬件实现更加复杂,因为除了保存栈顶指针外,还要保存栈顶指针所指向的入口的内容;此外,如果被错误执行的指令中包含<……返回,返回,调用……>这样的指令序列,那么恢复操作无法完全清除返回地址栈所受到的污染,因此仍然会发生返回地址预测错误。
发明内容:本发明所要解决的技术问题是在减小硬件实现复杂度的同时,克服返回地址预测错误,提高返回地址预测器的预测精度。
本发明的技术方案是:
双栈返回地址预测器的设计方法是:它的逻辑结构设计为由预测模块和执行模块组成。预测模块的作用是为返回指令提供预测目标地址,执行模块的作用是当发生分支误预测时对预测模块的状态进行恢复。预测模块设计成由预测返回地址栈RAS_PRED(Return Address Stack for PREDiction)、第二指针模块和第二读写模块构成,执行模块设计成由执行返回地址栈RAS_EXE(Return Address Stack for EXEcution)、第一指针模块和第一读写模块构成;预测模块的外部输入信号有:分支预测信息,该信息包括分支类型以及预测得到的分支方向;是否发生了分支误预测;以及第二返回地址,即处在分支预测阶段的调用指令的返回地址;预测模块的输出信号是返回指令的预测目标地址。执行模块的外部输入信号有:实际执行信息,该信息包括分支类型以及实际得到的分支方向,以及第一返回地址,即处在分支执行阶段的调用指令的返回地址。
RAS_PRED和RAS_EXE各包含n个入口项,设计时可以根据需要调整n的大小。为了对RAS_PRED和RAS_EXE进行索引,设置了预测栈顶指针TOS_PRED(Top Of Stack for PREDiction)和执行栈顶指针TOS_EXE(Top OfStack for EXEcution)。TOS_PRED是RAS_PRED的栈顶指针,它的值由第一寄存器保存。如果TOS_PRED为i,则RAS_PRED的当前栈顶是它的第i+1项。TOS_EXE是RAS_EXE的栈顶指针,它的值由第二寄存器保存。如果TOS_EXE为i,则RAS_EXE的当前栈顶是它的第i+1项。
在分支预测阶段,预测为跳转的调用指令把第二返回地址压入RAS_PRED的栈顶,预测为跳转的返回指令从RAS_PRED栈顶弹出一个地址作为预测的目标地址;在分支执行阶段,发生跳转的调用指令把第一返回地址压入RAS_EXE的栈顶。RAS_PRED和RAS_EXE的项之间一一对应,当发生分支误预测时,使用RAS_EXE第1项中的数据恢复RAS_PRED的第1项-即把RAS_EXE第1项中的数据写入RAS_PRED的第1项中,使用RAS_EXE第2项中的数据恢复RAS_PRED的第2项,依此类推,使用RAS_EXE第n项中的数据恢复RAS_PRED的第n项。
第二指针模块的作用是修改TOS_PRED,由第一加1模块、第一减1模块、第一3选1开关和第二2选1开关组成。第一加1模块实现对TOS_PRED的加1操作,第一减1模块实现对TOS_PRED的减1操作。第一减1模块的输出连到第一开关的A端,第一加1模块的输出连到第一开关的C端,未经修改的TOS_PRED连到第一开关的B端,第一开关的输出送到第二开关的D端。如果分支预测信息指示检测到调用指令且预测其发生跳转,那么第一开关输出C端的数据;如果检测到返回指令且预测其发生跳转,则输出A端的数据,否则把B端的数据作为输出,也就是TOS_PRED的值保持不变。第二开关的E端接的是TOS_EXE,输出送给第一寄存器。如果发生了分支误预测,那么把E端的数据作为输出,也就是使用TOS_EXE恢复TOS_PRED,否则输出D端的数据。通过这种方式,第二指针模块实现了对TOS_PRED修改。
第二读写模块的作用是完成对RAS_PRED的读写操作,由第二读模块和第二写模块构成。第二读模块的主要结构是一个第四n选1开关,输入是RAS_PRED的n个入口项中的数据,由TOS_PRED选择输出哪个数据。比如,如果TOS_PRED为0,那么输出RAS_PRED的第1项中的数据,如果TOS_PRED为1,那么输出RAS_PRED的第2项中的数据,依此类推,如果TOS_PRED为n-1,那么输出RAS_PRED的第n项中的数据。第二读模块的输出就是返回指令的预测目标地址。
第二写模块完成RAS_PRED的写操作。为了描述清楚,以对RAS_PRED中一项的写操作为例,假定对RAS_PRED中的第i+1项进行写操作,来自RAS_PRED数据是RAS_PRED第i+1项中的数据,且连到第五2选1开关的I端;来自RAS_PRED的数据是RAS_EXE第i+1项中的数据,且连到第六开关的L端。第二返回地址连到第五开关的J端,第五开关的输出送到第六开关的K端。如果TOS_PRED为i,同时分支预测信息指示检测到调用指令且预测其发生跳转,那么第五开关把J端的数据作为输出,否则输出I端的数据。如果发生了分支误预测,那么第六开关把L端的数据作为输出,也就是使用RAS_EXE第i+1项中的数据对RAS_PRED的第i+1项进行恢复,否则输出K端的数据。第六开关的输出是新的将要被写入RAS_PRED第i+1项中的数据。
第一指针模块的作用是修改TOS_EXE,由第二加1模块、第二减1模块和第三3选1开关。第二加1模块实现对TOS_EXE的加1操作,第二减1模块实现对TOS_EXE的减1操作。第二减1模块的输出连到第三开关的F端,第二加1模块的输出连到第三开关的H端,未经修改的TOS_EXE连到第三开关的G端,第三开关的输出直接送给第二寄存器。如果实际执行信息指示检测到调用指令且发生跳转,那么第三开关输出H端的数据;如果检测到返回指令且发生跳转,则输出F端的数据,否则把G端的数据作为输出,也就是TOS_EXE的值保持不变。这样,第一指针模块实现了对TOS_EXE的修改。
第一读写模块由于只需要实现写功能,所以只包含一个第一写模块。为了描述清楚,以对RAS_EXE中一项的写操作为例,假定对RAS_EXE中的第i+1项进行写操作,来自RAS_EXE的数据是RAS_EXE第i+1项中的数据,且连到第七2选1开关的M端。第一返回地址连到第七开关的N端。如果TOS_EXE为i,且实际执行信息指示检测到发生跳转的调用指令,那么第七开关把N端的数据作为输出,否则输出M端的数据。第七开关的输出是新的将要被写入RAS_EXE第i+1项中的数据。
采用本发明可以达到以下效果:
1)硬件实现复杂度低。只有检测到跳转的调用指令和返回指令,才需要修改返回地址栈;如果是其他类型的分支指令或者是不发生跳转的调用指令和返回指令,本发明不需要进行任何操作。如果检测到分支误预测,只需要简单地使用执行模块的状态恢复预测模块的状态即可,而不必考虑分支类型以及分支是否发生跳转等各种情况。
2)返回指令目标地址的预测精度高。由于只有最终要被提交的调用指令和返回指令才能修改执行模块的状态,所以执行模块准确地记录了程序的执行状态,也就是说RAS_EXE中保存的返回地址是正确的。发生分支误预测时,虽然预测模块的状态可能被错误地修改了,但是使用执行模块的状态对其进行恢复后,预测模块所受到的污染完全被清除了,所以RAS_PRED能够为返回指令提供正确的预测目标地址。
附图说明:
图1 双栈返回地址预测器的总体结构图
图2 预测模块的逻辑结构图
图3 执行模块的逻辑结构图
图4 第二读模块的内部实现图
图5 第二写模块的内部实现图
图6 第一写模块的内部实现图
具体实施方式:
图1是双栈返回地址预测器的总体结构图。包括两个返回地址栈——RAS_PRED和RAS_EXE,第一指针模块,第二指针模块,第一读写模块和第二读写模块。RAS_PRED,第二指针模块和第二读写模块构成预测模块。RAS_EXE,第一指针模块和第一读写模块构成执行模块。RAS_PRED和RAS_EXE的项数都设为n。在国防科大研制的YHFT64高性能通用CPU芯片中,n等于8。
预测模块接收到分支预测信息后,如果发现是调用指令且预测其发生跳转,则把TOS_PRED加1,并把第二返回地址写入TOS_PRED所指向的入口;如果发现是返回指令且预测其发生跳转,则从RAS_PRED栈顶弹出一个地址作为返回指令的预测目标地址,并把TOS_PRED减1。如果发生了分支误预测,则使用执行模块的状态对预测模块的状态进行恢复。
执行模块接收到实际执行信息后,如果发现是调用指令且发生跳转,则把TOS_EXE加1,并把返回地址第一写入TOS_EXE所指向的入口;如果发现是返回指令且发生跳转,只需要把TOS_EXE减1即可。
图2是预测模块的逻辑结构图。包括RAS_PRED、第二指针模块和第二读写模块。RAS_PRED由n个寄存器组成,分别保存RAS_PRED的n个入口项;第一寄存器用于保存TOS_PRED。第二指针模块接收到分支预测信息后,如果发现是调用指令且预测其发生跳转,则把TOS_PRED加1,并把新得到的TOS_PRED送给第二读写模块和第一寄存器,然后第二读写模块把第二返回地址写入RAS_PRED的相应项中;如果发现是返回指令且预测其发生跳转,第二指针模块把未经修改的TOS_PRED送给第二读写模块后把TOS_PRED减1,并把新得到的TOS_PRED送给第一寄存器,第二读写模块则根据TOS_PRED选择RAS_PRED送过来的相应数据作为返回指令的预测目标地址。如果发生了分支误预测,则把TOS_EXE的值送给第一寄存器,把来自RAS_EXE的数据送给RAS_PRED。
第二指针模块由第一加1模块、第一减1模块、第一3选1开关和第二2选1开关组成。第一加1模块实现对TOS_PRED的加1操作,第一减1模块实现对TOS_PRED的减1操作。第一减1模块的输出连到第一开关的A端,第一加1模块的输出连到第一开关的C端,未经修改的TOS_PRED连到第一开关的B端,第一开关的输出送到第二开关的D端。如果分支预测信息指示检测到调用指令且预测其发生跳转,那么第一开关输出C端的数据;如果检测到返回指令且预测其发生跳转,则输出A端的数据,否则把B端的数据作为输出,也就是TOS_PRED的值保持不变。第二开关的E端接的是TOS_EXE,输出送给第一寄存器。如果发生了分支误预测,那么把E端的数据作为输出,也就是使用TOS_EXE恢复TOS_PRED,否则输出D端的数据。
第二读写模块包含一个第二读模块和一个第二写模块。第二读模块接收到分支预测信息后,如果发现是返回指令且预测其发生跳转,则把RAS_PRED相应项中的数据输出,作为返回指令的预测目标地址。第二写模块的实现比较复杂。首先第二写模块要检查是否发生了分支误预测,如果是,那么把来自RAS_EXE的数据写入RAS_PRED中的各个项中,也就是使用RAS_EXE恢复RAS_PRED;如果没有发生分支误预测,那么再查看分支预测信息,如果检测到调用指令且预测其发生跳转,则把第二返回地址写入RAS_PRED的相应项中,RAS_PRED其他项中的数据保持不变,否则RAS_PRED所有项中的数据都保持不变。
图3是执行模块的逻辑结构图。包括RAS_EXE、第一指针模块和第一读写模块。RAS_EXE由n个寄存器组成的,分别保存RAS_EXE的n个入口项;第二寄存器用于保存TOS_EXE。第一指针模块接收到实际执行信息后,如果发现是调用指令且发生跳转,则把TOS_EXE加1,并把新得到的TOS_EXE送给第一读写模块和第二寄存器,第一读写模块把第一返回地址写入RAS_EXE的相应项中;如果发现是返回指令且发生跳转,把TOS_EXE减1后送给第二寄存器,第一读写模块不需要进行任何操作。因此,第一读写模块只需要实现写功能。
第一指针模块由第二加1模块、第二减1模块和第三3选1开关组成。第二加1模块实现对TOS _EXE的加1操作,第二减1模块实现对TOS_EXE的减1操作。第二减1模块的输出连到第三开关的F端,第二加1模块的输出连到第三开关的H端,未经修改的TOS_EXE连到第三开关的G端,第三开关的输出直接送给第二寄存器。如果实际执行信息指示检测到调用指令且发生跳转,那么第三开关输出H端的数据;如果检测到返回指令且发生跳转,则输出F端的数据,否则把G端的数据作为输出,也就是TOS_EXE的值保持不变。
第一读写模块由于只需要实现写功能,所以只包含一个第一写模块。第一写模块查看实际执行信息,如果检测到调用指令且发生跳转,则把第一返回地址写入RAS_EXE的相应项中,RAS_EXE其他项中的数据保持不变,否则RAS_EXE所有项中的数据都保持不变。
图4是第二读模块的内部实现图。第二读模块的主要结构是一个第四n选1开关,输入是RAS_PRED的n个入口项中的数据,由TOS_PRED选择输出哪个数据。比如,如果TOS_PRED为0,那么输出RAS_PRED的第1项中的数据,如果TOS_PRED为1,那么输出RAS_PRED的第2项中的数据,依此类推,如果TOS_PRED为n-1,那么输出RAS_PRED的第n项中的数据。
图5是第二写模块的内部实现图。第二写模块完成RAS_PRED的写操作,为了描述清楚,图5只给出了对其中一项的写操作,对其他项的写操作都是相同的。假定对RAS_PRED中的第i+1项进行写操作,因此图5中的来自RAS_PRED数据是RAS_PRED第i+1项中的数据,且连到第五2选1开关的I端;来自RAS_PRED的数据是RAS_EXE第i+1项中的数据,且连到第六开关的L端。第二返回地址连到第五开关的J端,第五开关的输出送到第六开关的K端。如果TOS_PRED为i,同时分支预测信息指示检测到调用指令且预测其发生跳转,那么第五开关把J端的数据作为输出,否则输出I端的数据。如果发生了分支误预测,那么第六开关把L端的数据作为输出,也就是使用RAS_EXE第i+1项中的数据对RAS_PRED的第i+1项进行恢复,否则输出K端的数据。第六开关的输出是新的将要被写入RAS_PRED第i+1项中的数据。
图6是第一写模块的内部实现图。第一写模块完成RAS_EXE的写操作,为了描述清楚,图6同样也只给出了对其中一项的写操作。仍然假定对RAS_EXE中的第i+1项进行写操作,因此图6中的来自RAS_EXE的数据是RAS_EXE第i+1项中的数据,且连到第七2选1开关的M端。第一返回地址连到第七开关的N端。如果TOS_EXE为i,且实际执行信息指示检测到发生跳转的调用指令,那么第七开关把N端的数据作为输出,否则输出M端的数据。第七开关的输出是新的将要被写入RAS_EXE第i+1项中的数据。
Claims (5)
1.一种双栈返回地址预测器的设计方法,采用它设计的微处理器拥有与一般微处理器相同的流水线结构、功能部件和控制信号,其特征在于双栈返回地址预测器的设计方法是:它的逻辑结构设计为由预测模块和执行模块组成,预测模块设计成由预测返回地址栈、第二指针模块和第二读写模块构成,执行模块设计成由执行返回地址栈、第一指针模块和第一读写模块构成;预测模块的外部输入信号有:分支预测信息,该信息包括分支类型以及预测得到的分支方向;是否发生了分支误预测;以及第二返回地址,即处在分支预测阶段的调用指令的返回地址;预测模块的输出信号是返回指令的预测目标地址;执行模块的外部输入信号有:实际执行信息,该信息包括分支类型以及实际得到的分支方向,以及第一返回地址,即处在分支执行阶段的调用指令的返回地址;预测返回地址栈和执行返回地址栈设计为各包含n个入口项;设置预测栈顶指针和执行栈顶指针,分别对预测返回地址栈和执行返回地址栈进行索引;预测栈顶指针的值由第一寄存器保存,执行栈顶指针的值由第二寄存器保存;如果预测栈顶指针为i,则预测返回地址栈的当前栈顶是它的第i+1项,如果执行栈顶指针为i,则执行返回地址栈的当前栈顶是它的第i+1项;在分支预测阶段,预测为跳转的调用指令把第二返回地址压入预测返回地址栈的栈顶,预测为跳转的返回指令从预测返回地址栈栈顶弹出一个地址作为预测的目标地址;在分支执行阶段,发生跳转的调用指令把第一返回地址压入执行返回地址栈的栈顶;预测返回地址栈和执行返回地址栈的项之间一一对应,当发生分支误预测时,使用执行返回地址栈第1项中的数据恢复预测返回地址栈的第1项—即把执行返回地址栈第1项中的数据写入预测返回地址栈的第1项中,使用执行返回地址栈第2项中的数据恢复预测返回地址栈的第2项,依此类推,使用执行返回地址栈第n项中的数据恢复预测返回地址栈的第n项。
2.如权利要求1所述的双栈返回地址预测器的设计方法,其特征在于所述第二指针模块由第一加1模块、第一减1模块、第一3选1开关和第二2选1开关组成;第一加1模块实现对预测栈顶指针的加1操作,第一减1模块实现对预测栈顶指针的减1操作;第一减1模块的输出连到第一开关的A端,第一加1模块的输出连到第一开关的C端,未经修改的预测栈顶指针连到第一开关的B端,第一开关的输出送到第二开关的D端;如果分支预测信息指示检测到调用指令且预测其发生跳转,那么第一开关输出C端的数据;如果检测到返回指令且预测其发生跳转,则输出A端的数据,否则把B端的数据作为输出,也就是预测栈顶指针的值保持不变;第二开关的E端接的是执行栈顶指针,输出送给第一寄存器;如果发生了分支误预测,那么把E端的数据作为输出,也就是使用执行栈顶指针恢复预测栈顶指针,否则输出D端的数据;通过这种方式,第二指针模块实现了对预测栈顶指针修改。
3.如权利要求1所述的双栈返回地址预测器的设计方法,其特征在于所述第二读写模块由第二读模块和第二写模块构成:
4.1第二读模块主要结构是一个第四n选1开关,输入是预测返回地址栈的n个入口项中的数据,由预测栈顶指针选择输出哪个数据;比如,如果预测栈顶指针为0,那么输出预测返回地址栈的第1项中的数据,如果预测栈顶指针为1,那么输出预测返回地址栈的第2项中的数据,依此类推,如果预测栈顶指针为n-1,那么输出预测返回地址栈的第n项中的数据。第二读模块的输出就是返回指令的预测目标地址。
4.2由第二写模块完成预测返回地址栈的写操作,若对预测返回地址栈中的第i+1项进行写操作,来自预测返回地址栈数据是预测返回地址栈第i+1项中的数据,且连到第五2选1开关的I端;来自预测返回地址栈的数据是执行返回地址栈第i+1项中的数据,且连到第六开关的L端;第二返回地址连到第五开关的J端,第五开关的输出送到第六开关的K端;如果预测栈顶指针为i,同时分支预测信息指示检测到调用指令且预测其发生跳转,第五开关把J端的数据作为输出,否则输出I端的数据;如果发生了分支误预测,第六开关把L端的数据作为输出,也就是使用执行返回地址栈第i+1项中的数据对预测返回地址栈的第i+1项进行恢复,否则输出K端的数据;第六开关的输出是新的将要被写入预测返回地址栈第i+1项中的数据。
4.如权利要求1所述的双栈返回地址预测器的设计方法,其特征在于所述第一指针模块由第二加1模块、第二减1模块和第三3选1开关组成。第二加1模块实现对执行栈顶指针的加1操作,第二减1模块实现对执行栈顶指针的减1操作;第二减1模块的输出连到第三开关的F端,第二加1模块的输出连到第三开关的H端,未经修改的执行栈顶指针连到第三开关的G端,第三开关的输出直接送给第二寄存器;如果实际执行信息指示检测到调用指令且发生跳转,那么第三开关输出H端的数据;如果检测到返回指令且发生跳转,则输出F端的数据,否则把G端的数据作为输出,也就是执行栈顶指针的值保持不变;这样,第一指针模块实现了对执行栈顶指针的修改。
5.如权利要求1所述的双栈返回地址预测器的设计方法,其特征在于所述第一读写模块只需要实现写功能,只包含一个第一写模块,若对执行返回地址栈中的第i+1项进行写操作,来自执行返回地址栈的数据是执行返回地址栈第i+1项中的数据,且连到第七2选1开关的M端;第一返回地址连到第七开关的N端;如果执行栈顶指针为i,且实际执行信息指示检测到发生跳转的调用指令,那么第七开关把N端的数据作为输出,否则输出M端的数据;第七开关的输出是新的将要被写入执行返回地址栈第i+1项中的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200410022965 CN1280713C (zh) | 2004-03-09 | 2004-03-09 | 双栈返回地址预测器设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200410022965 CN1280713C (zh) | 2004-03-09 | 2004-03-09 | 双栈返回地址预测器设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1560734A CN1560734A (zh) | 2005-01-05 |
CN1280713C true CN1280713C (zh) | 2006-10-18 |
Family
ID=34441039
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200410022965 Expired - Fee Related CN1280713C (zh) | 2004-03-09 | 2004-03-09 | 双栈返回地址预测器设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1280713C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727312B (zh) * | 2009-01-22 | 2013-01-09 | 杭州中天微系统有限公司 | 一种支持自动纠错功能的返回地址栈实现方法 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8006070B2 (en) * | 2007-12-05 | 2011-08-23 | International Business Machines Corporation | Method and apparatus for inhibiting fetch throttling when a processor encounters a low confidence branch instruction in an information handling system |
CN101807145B (zh) * | 2010-04-16 | 2012-12-26 | 浙江大学 | 栈式分支预测器的硬件实现方法 |
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 | 深圳中微电科技有限公司 | 一种多线程处理器中的指令输出装置、方法及其处理器 |
GB2516999B (en) * | 2014-01-31 | 2015-07-22 | Imagination Tech Ltd | An improved return stack buffer |
US9703948B2 (en) * | 2014-03-28 | 2017-07-11 | Intel Corporation | Return-target restrictive return from procedure instructions, processors, methods, and systems |
GB2542831B (en) * | 2015-09-30 | 2018-05-30 | Imagination Tech Ltd | Fetch unit for predicting target for subroutine return instructions |
US20170090927A1 (en) * | 2015-09-30 | 2017-03-30 | Paul Caprioli | Control transfer instructions indicating intent to call or return |
CN109960607B (zh) * | 2017-12-22 | 2021-04-20 | 龙芯中科技术股份有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
-
2004
- 2004-03-09 CN CN 200410022965 patent/CN1280713C/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727312B (zh) * | 2009-01-22 | 2013-01-09 | 杭州中天微系统有限公司 | 一种支持自动纠错功能的返回地址栈实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1560734A (zh) | 2005-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1188778C (zh) | 处理指令的方法、处理器和数据处理系统 | |
CN1177275C (zh) | 减少处理器中写入通信量的方法和系统 | |
CN1280713C (zh) | 双栈返回地址预测器设计方法 | |
CN1204499C (zh) | 在以正常模式执行指令期间执行硬件测试的处理器 | |
US20070168768A1 (en) | ECC coding for high speed implementation | |
CN1265204A (zh) | 检测被寻址单元预测失败的存储控制器 | |
CN106547518A (zh) | 用于加速器的低等待时间调用的装置和方法 | |
CN1534462A (zh) | 流水线处理一系列处理指令的方法和设备 | |
Bae et al. | {FlashNeuron}:{SSD-Enabled}{Large-Batch} Training of Very Deep Neural Networks | |
CN1885269A (zh) | 在微处理器恢复单元中进行写队列读数据的方法和装置 | |
CN1306639A (zh) | 用于嵌入式系统的实时调试器接口 | |
CN104156197A (zh) | 微处理器以及微处理器操作方法 | |
US20050081021A1 (en) | Automatic register backup/restore system and method | |
CN1758215A (zh) | 更新指令错误状态暂存器 | |
CN1450450A (zh) | 采用双指令集的32位嵌入式微处理器 | |
CN1731346A (zh) | 微处理器的整数单元中五级容错流水结构的实现方法 | |
CN101539852A (zh) | 处理器和信息处理设备 | |
CN1151047A (zh) | 将指令装入指令高速缓冲存储器中的方法 | |
CN1124546C (zh) | 一种超标量处理器及在该超标量处理器中完成指令的方法 | |
CN1860438A (zh) | 多端口装置配置 | |
US4791560A (en) | Macro level control of an activity switch in a scientific vector processor which processor requires an external executive control program | |
CN1459719A (zh) | 图形化开发程序的系统及方法 | |
JP3170472B2 (ja) | レジスタ・リマップ構造を有する情報処理システム及び方法 | |
NL2029030B1 (en) | Device, system and method to determine a structure of a crash log record | |
CN1295598C (zh) | 双栈返回地址预测器中返回地址栈的恢复方法 |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20061018 Termination date: 20100309 |