CN1560734A - 双栈返回地址预测器设计方法 - Google Patents
双栈返回地址预测器设计方法 Download PDFInfo
- Publication number
- CN1560734A CN1560734A CNA2004100229657A CN200410022965A CN1560734A CN 1560734 A CN1560734 A CN 1560734A CN A2004100229657 A CNA2004100229657 A CN A2004100229657A CN 200410022965 A CN200410022965 A CN 200410022965A CN 1560734 A CN1560734 A CN 1560734A
- Authority
- CN
- China
- Prior art keywords
- ras
- pred
- module
- data
- switch
- 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
Links
Images
Landscapes
- Advance Control (AREA)
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、指针模块2和读写模块2构成,执行模块由RAS_EXE、指针模块1和读写模块1构成;预测模块的作用是为返回指令提供预测目标地址,执行模块的作用是当发生分支误预测时对预测模块的状态进行恢复。分支预测信息包括分支类型以及预测得到的分支方向,实际执行信息包括分支类型以及实际得到的分支方向。返回地址2是处在分支预测阶段的调用指令的返回地址,返回地址1是处在分支执行阶段的调用指令的返回地址。
RAS_PRED和RAS_EXE是两个返回地址栈,各包含n个入口项,设计时可以根据需要调整n的大小。为了对RAS_PRED和RAS_EXE进行索引,设置了栈顶指针TOS_PRED和TOS_EXE。TOS_PRED是RAS_PRED的栈顶指针,如果TOS_PRED为i,则RAS_PRED的当前栈顶是它的第i+1项。TOS_EXE是RAS_EXE的栈顶指针,如果TOS_EXE为i,则RAS_EXE的当前栈顶是它的第i+1项。
在分支预测阶段,预测为跳转的调用指令把返回地址2压入RAS_PRED的栈顶,预测为跳转的返回指令从RAS_PRED栈顶弹出一个地址作为预测的目标地址;在分支执行阶段,发生跳转的调用指令把返回地址1压入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_PRED、指针模块2和读写模块2。TOS_PRED的值由寄存器1保存。
指针模块2的作用是修改TOS_PRED,由加1模块1、减1模块1、3选1开关1和2选1开关2组成。加1模块1实现对TOS_PRED的加1操作,减1模块1实现对TOS_PRED的减1操作。减1模块1的输出连到开关1的A端,加1模块1的输出连到开关1的C端,未经修改的TOS_PRED连到开关1的B端,开关1的输出送到开关2的D端。如果分支预测信息指示检测到调用指令且预测其发生跳转,那么开关1输出C端的数据;如果检测到返回指令且预测其发生跳转,则输出A端的数据,否则把B端的数据作为输出,也就是TOS_PRED的值保持不变。开关2的E端接的是TOS_EXE,输出送给寄存器1。如果发生了分支误预测,那么把E端的数据作为输出,也就是使用TOS_EXE恢复TOS_PRED,否则输出D端的数据。通过这种方式,指针模块2实现了对TOS_PRED修改。
读写模块2的作用是完成对RAS_PRED的读写操作,由读模块2和写模块2构成。读模块2的主要结构是一个n选1开关4,输入是RAS_PRED的n个入口项中的数据,由TOS_PRED选择输出哪个数据。比如,如果TOS_PRED为0,那么输出RAS_PRED的第1项中的数据,如果TOS_PRED为1,那么输出RAS_PRED的第2项中的数据,依此类推,如果TOS_PRED为n-1,那么输出RAS_PRED的第n项中的数据。读模块2的输出就是返回指令的预测目标地址。
写模块2完成RAS_PRED的写操作。为了描述清楚,以对RAS_PRED中一项的写操作为例,假定对RAS_PRED中的第i+1项进行写操作,来自RAS_PRED数据是RAS_PRED第i+1项中的数据,且连到2选1开关5的I端;来自RAS_PRED的数据是RAS_EXE第i+1项中的数据,且连到开关6的L端。返回地址2连到开关5的J端,开关5的输出送到开关6的K端。如果TOS_PRED为i,同时分支预测信息指示检测到调用指令且预测其发生跳转,那么开关5把J端的数据作为输出,否则输出I端的数据。如果发生了分支误预测,那么开关6把L端的数据作为输出,也就是使用RAS_EXE第i+1项中的数据对RAS_PRED的第i+1项进行恢复,否则输出K端的数据。开关6的输出是新的将要被写入RAS_PRED第i+1项中的数据。
执行模块包括RAS EXE、指针模块1和读写模块1。TOS_EXE的值由寄存器2保存。
指针模块1的作用是修改TOS_EXE,由加1模块2、减1模块2和3选1开关3。加1模块2实现对TOS_EXE的加1操作,减1模块2实现对TOS_EXE的减1操作。减1模块2的输出连到开关3的F端,加1模块2的输出连到开关3的H端,未经修改的TOS_EXE连到开关3的G端,开关1的输出直接送给寄存器3。如果实际执行信息指示检测到调用指令且发生跳转,那么开关3输出H端的数据;如果检测到返回指令且发生跳转,则输出F端的数据,否则把G端的数据作为输出,也就是TOS_EXE的值保持不变。这样,指针模块1实现了对TOS_EXE的修改。
读写模块1由于只需要实现写功能,所以只包含一个写模块1。为了描述清楚,以对RAS_EXE中一项的写操作为例,假定对RAS_EXE中的第i+1项进行写操作,来自RAS_EXE的数据是RAS_EXE第i+1项中的数据,且连到2选1开关7的M端。返回地址1连到开关7的N端。如果TOS_EXE为i,且实际执行信息指示检测到发生跳转的调用指令,那么开关7把N端的数据作为输出,否则输出M端的数据。开关7的输出是新的将要被写入RAS_EXE第i+1项中的数据。
采用本发明可以达到以下效果:
1)硬件实现复杂度低。只有检测到跳转的调用指令和返回指令,才需要修改返回地址栈;如果是其他类型的分支指令或者是不发生跳转的调用指令和返回指令,本发明不需要进行任何操作。如果检测到分支误预测,只需要简单地使用执行模块的状态恢复预测模块的状态即可,而不必考虑分支类型以及分支是否发生跳转等各种情况。
2)返回指令目标地址的预测精度高。由于只有最终要被提交的调用指令和返回指令才能修改执行模块的状态,所以执行模块准确地记录了程序的执行状态,也就是说RAS_EXE中保存的返回地址是正确的。发生分支误预测时,虽然预测模块的状态可能被错误地修改了,但是使用执行模块的状态对其进行恢复后,预测模块所受到的污染完全被清除了,所以RAS_PRED能够为返回指令提供正确的预测目标地址。
附图说明:
图1双栈返回地址预测器的总体结构图
图2预测模块的逻辑结构图
图3执行模块的逻辑结构图
图4读模块2的内部实现图
图5写模块2的内部实现图
图6写模块1的内部实现图
具体实施方式:
图1是双栈返回地址预测器的总体结构图。包括两个返回地址栈——RAS_PRED和RAS_EXE,指针模块1,指针模块2,读写模块1和读写模块2。RAS_PRED,指针模块2和读写模块2构成预测模块。RAS_EXE,指针模块1和读写模块1构成执行模块。RAS_PRED和RAS_EXE的项数都设为n。在国防科大研制的YHFT64高性能通用CPU芯片中,n等于8。
预测模块接收到分支预测信息后,如果发现是调用指令且预测其发生跳转,则把TOS_PRED加1,并把返回地址2写入TOS_PRED所指向的入口;如果发现是返回指令且预测其发生跳转,则从RAS_PRED栈顶弹出一个地址作为返回指令的预测目标地址,并把TOS_PRED减1。如果发生了分支误预测,则使用执行模块的状态对预测模块的状态进行恢复。
执行模块接收到实际执行信息后,如果发现是调用指令且发生跳转,则把TOS_EXE加1,并把返回地址1写入TOS_EXE所指向的入口;如果发现是返回指令且发生跳转,只需要把TOS_EXE减1即可。
图2是预测模块的逻辑结构图。包括RAS_PRED、指针模块2和读写模块2。RAS_PRED由n个寄存器组成,分别保存RAS_PRED的n个入口项;寄存器1用于保存TOS_PRED。指针模块2接收到分支预测信息后,如果发现是调用指令且预测其发生跳转,则把TOS_PRED加1,并把新得到的TOS_PRED送给读写模块2和寄存器1,然后读写模块2把返回地址2写入RAS_PRED的相应项中;如果发现是返回指令且预测其发生跳转,指针模块2把未经修改的TOS_PRED送给读写模块2后把TOS_PRED减1,并把新得到的TOS_PRED送给寄存器1,读写模块2则根据TOS_PRED选择RAS_PRED送过来的相应数据作为返回指令的预测目标地址。如果发生了分支误预测,则把TOS_EXE的值送给寄存器1,把来自RAS_EXE的数据送给RAS_PRED。
指针模块2由加1模块1、减1模块1、3选1开关1和2选1开关2组成。加1模块1实现对TOS_PRED的加1操作,减1模块1实现对TOS_PRED的减1操作。减1模块1的输出连到开关1的A端,加1模块1的输出连到开关1的C端,未经修改的TOS_PRED连到开关1的B端,开关1的输出送到开关2的D端。如果分支预测信息指示检测到调用指令且预测其发生跳转,那么开关1输出C端的数据;如果检测到返回指令且预测其发生跳转,则输出A端的数据,否则把B端的数据作为输出,也就是TOS_PRED的值保持不变。开关2的E端接的是TOS_EXE,输出送给寄存器1。如果发生了分支误预测,那么把E端的数据作为输出,也就是使用TOS_EXE恢复TOS_PRED,否则输出D端的数据。
读写模块2包含一个读模块和一个写模块。读模块2接收到分支预测信息后,如果发现是返回指令且预测其发生跳转,则把RAS_PRED相应项中的数据输出,作为返回指令的预测目标地址。写模块2的实现比较复杂。首先写模块2要检查是否发生了分支误预测,如果是,那么把来自RAS_EXE的数据写入RAS_PRED中的各个项中,也就是使用RAS_EXE恢复RAS_PRED;如果没有发生分支误预测,那么再查看分支预测信息,如果检测到调用指令且预测其发生跳转,则把返回地址2写入RAS_PRED的相应项中,RAS_PRED其他项中的数据保持不变,否则RAS_PRED所有项中的数据都保持不变。
图3是执行模块的逻辑结构图。包括RAS_EXE、指针模块1和读写模块1。RAS_EXE由n个寄存器组成的,分别保存RAS_EXE的n个入口项;寄存器2用于保存TOS_EXE。指针模块1接收到实际执行信息后,如果发现是调用指令且发生跳转,则把TOS_EXE加1,并把新得到的TOS_EXE送给读写模块1和寄存器2,读写模块1把返回地址1写入RAS_EXE的相应项中;如果发现是返回指令且发生跳转,把TOS_EXE减1后送给寄存器2,读写模块1不需要进行任何操作。因此,读写模块1只需要实现写功能。
指针模块1由加1模块2、减1模块2和3选1开关3组成。加1模块2实现对TOS_EXE的加1操作,减1模块2实现对TOS_EXE的减1操作。减1模块2的输出连到开关3的F端,加1模块2的输出连到开关3的H端,未经修改的TOS_EXE连到开关3的G端,开关1的输出直接送给寄存器3。如果实际执行信息指示检测到调用指令且发生跳转,那么开关3输出H端的数据;如果检测到返回指令且发生跳转,则输出F端的数据,否则把G端的数据作为输出,也就是TOS_EXE的值保持不变。
读写模块1由于只需要实现写功能,所以只包含一个写模块1。写模块1查看实际执行信息,如果检测到调用指令且发生跳转,则把返回地址1写入RAS_EXE的相应项中,RAS_EXE其他项中的数据保持不变,否则RAS_EXE所有项中的数据都保持不变。
图4是读模块2的内部实现图。读模块2的主要结构是一个n选1开关4,输入是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是写模块2的内部实现图。写模块2完成RAS_PRED的写操作,为了描述清楚,图5只给出了对其中一项的写操作,对其他项的写操作都是相同的。假定对RAS_PRED中的第i+1项进行写操作,因此图5中的来自RAS_PRED数据是RAS_PRED第i+1项中的数据,且连到2选1开关5的I端;来自RAS_PRED的数据是RAS_EXE第i+1项中的数据,且连到开关6的L端。返回地址2连到开关5的J端,开关5的输出送到开关6的K端。如果TOS_PRED为i,同时分支预测信息指示检测到调用指令且预测其发生跳转,那么开关5把J端的数据作为输出,否则输出I端的数据。如果发生了分支误预测,那么开关6把L端的数据作为输出,也就是使用RAS_EXE第i+1项中的数据对RAS_PRED的第i+1项进行恢复,否则输出K端的数据。开关6的输出是新的将要被写入RAS_PRED第i+1项中的数据。
图6是写模块1的内部实现图。写模块1完成RAS_EXE的写操作,为了描述清楚,图6同样也只给出了对其中一项的写操作。仍然假定对RAS_EXE中的第i+1项进行写操作,因此图6中的来自RAS_EXE的数据是RAS_EXE第i+1项中的数据,且连到2选1开关7的M端。返回地址1连到开关7的N端。如果TOS_EXE为i,且实际执行信息指示检测到发生跳转的调用指令,那么开关7把N端的数据作为输出,否则输出M端的数据。开关7的输出是新的将要被写入RAS_EXE第i+1项中的数据。
Claims (6)
1.一种返回地址预测器的设计方法,采用它设计的微处理器拥有与一般微处理器相同的流水线结构、功能部件和控制信号,其特征在于总体硬件叫双栈返回地址预测器,它包括预测模块、执行模块,预测模块由RAS_PRED、指针模块2和读写模块2构成,执行模块由RAS_EXE、指针模块1和读写模块1构成;分支预测信息包括分支类型以及预测得到的分支方向,实际执行信息包括分支类型以及实际得到的分支方向;处在分支预测阶段的调用指令的返回地址称为返回地址2,处在分支执行阶段的调用指令的返回地址称返回地址1;由预测模块为返回指令提供预测目标地址,由执行模块在发生分支误预测时对预测模块的状态进行恢复。
2.如权利要求1所述的返回地址预测器的设计方法,其特征在于所述预测模块中的RAS_PRED和RAS_EXE是两个返回地址栈,各包含n个入口项;设置栈顶指针TOS_PRED和TOS_EXE分别对RAS_PRED和RAS_EXE进行索引;如果TOS_PRED为i,则RAS_PRED的当前栈顶是它的第i+1项,如果TOS_EXE为i,则RAS_EXE的当前栈顶是它的第i+1项;在分支预测阶段,预测为跳转的调用指令把返回地址2压入RAS_PRED的栈顶,预测为跳转的返回指令从RAS_PRED栈顶弹出一个地址作为预测的目标地址;在分支执行阶段,发生跳转的调用指令把返回地址1压入RAS_EXE的栈顶;RAS_PRED和RAS_EXE的项之间一一对应,当发生分支误预测时,使用RAS_EXE第1项中的数据恢复RAS_PRED的第1项—即把RAS_EXE第1项中的数据写入RAS_PRED的第1项中,使用RAS_EXE第2项中的数据恢复RAS_PRED的第2项,依此类推。
3.如权利要求1所述的返回地址预测器的设计方法,其特征在于所述指针模块2由加1模块1、减1模块1、3选1开关(1)和2选1开关(2)组成;加1模块1实现对TOS_PRED的加1操作,减1模块1实现对TOS_PRED的减1操作;减1模块1的输出连到开关1的A端,加1模块1的输出连到开关1的C端,未经修改的TOS_PRED连到开关1的B端,开关1的输出送到开关2的D端;如果分支预测信息指示检测到调用指令且预测其发生跳转,那么开关(1)输出C端的数据;如果检测到返回指令且预测其发生跳转,则输出A端的数据,否则把B端的数据作为输出,也就是TOS_PRED的值保持不变;开关(2)的E端接的是TOS_EXE,输出送给寄存器1;如果发生了分支误预测,那么把E端的数据作为输出,也就是使用TOS_EXE恢复TOS_PRED,否则输出D端的数据;通过这种方式,指针模块2实现了对TOS_PRED修改。
4.如权利要求1所述的返回地址预测器的设计方法,其特征在于所述读写模块2由读模块2和写模块2构成:
4.1读模块2的主要结构是一个n选1开关(4),输入是RAS_PRED的n个入口项中的数据,由TOS_PRED选择输出哪个数据;比如,如果TOS_PRED为0,那么输出RAS_PRED的第1项中的数据,如果TOS_PRED为1,那么输出RAS_PRED的第2项中的数据,依此类推,如果TOS_PRED为n-1,那么输出RAS_PRED的第n项中的数据;读模块2的输出就是返回指令的预测目标地址;
4.2由写模块2完成RAS_PRED的写操作,若对RAS_PRED中的第i+1项进行写操作,来自RAS_PRED数据是RAS_PRED第i+1项中的数据,且连到2选1开关(5)的I端;来自RAS_PRED的数据是RAS_EXE第i+1项中的数据,且连到开关(6)的L端;返回地址2连到开关(5)的J端,开关(5)的输出送到开关(6)的K端;如果TOS_PRED为i,同时分支预测信息指示检测到调用指令且预测其发生跳转,开关(5)把J端的数据作为输出,否则输出I端的数据;如果发生了分支误预测,开关(6)把L端的数据作为输出,也就是使用RAS_EXE第i+1项中的数据对RAS_PRED的第i+1项进行恢复,否则输出K端的数据;开关(6)的输出是新的将要被写入RAS_PRED第i+1项中的数据。
5.如权利要求1所述的返回地址预测器的设计方法,其特征在于所述指针模块1由加1模块2、减1模块2和3选1开关(3)组成;加1模块2实现对TOS_EXE的加1操作,减1模块2实现对TOS_EXE的减1操作;减1模块2的输出连到开关(3)的F端,加1模块2的输出连到开关(3)的H端,未经修改的TOS_EXE连到开关(3)的G端,开关(1)的输出直接送给寄存器3;如果实际执行信息指示检测到调用指令且发生跳转,那么开关(3)输出H端的数据;如果检测到返回指令且发生跳转,则输出F端的数据,否则把G端的数据作为输出,也就是TOS_EXE的值保持不变;这样,指针模块1实现了对TOS_EXE的修改。
6.如权利要求1所述的返回地址预测器的设计方法,其特征在于所述读写模块1只需要实现写功能,只包含一个写模块1,若对RAS_EXE中的第i+1项进行写操作,来自RAS_EXE的数据是RAS_EXE第i+1项中的数据,且连到2选1开关(7)的M端;返回地址1连到开关(7)的N端;如果TOS_EXE为i,且实际执行信息指示检测到发生跳转的调用指令,那么开关(7)把N端的数据作为输出,否则输出M端的数据;开关(7)的输出是新的将要被写入RAS_EXE第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 true CN1560734A (zh) | 2005-01-05 |
CN1280713C 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 (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101807145A (zh) * | 2010-04-16 | 2010-08-18 | 浙江大学 | 栈式分支预测器的硬件实现方法 |
CN101452378B (zh) * | 2007-12-05 | 2011-11-23 | 国际商业机器公司 | 阻止指令提取调节的方法、处理器和装置 |
CN103593169A (zh) * | 2013-11-29 | 2014-02-19 | 深圳中微电科技有限公司 | 一种多线程处理器中的指令输出装置、方法及其处理器 |
CN104252335A (zh) * | 2013-06-28 | 2014-12-31 | 国际商业机器公司 | 用于选择的返回指令的预测获取和解码方法和系统 |
CN104820580A (zh) * | 2014-01-31 | 2015-08-05 | 想象技术有限公司 | 改进的返回堆栈缓存 |
CN104951697A (zh) * | 2014-03-28 | 2015-09-30 | 英特尔公司 | 来自过程指令的返回-目标限制性返回、处理器、方法及系统 |
CN106557304A (zh) * | 2015-09-30 | 2017-04-05 | 想象技术有限公司 | 用于预测子程序返回指令的目标的取指单元 |
CN107925690A (zh) * | 2015-09-30 | 2018-04-17 | 英特尔公司 | 指示调用或返回的意图的控制转移指令 |
CN109960607A (zh) * | 2017-12-22 | 2019-07-02 | 龙芯中科技术有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727312B (zh) * | 2009-01-22 | 2013-01-09 | 杭州中天微系统有限公司 | 一种支持自动纠错功能的返回地址栈实现方法 |
-
2004
- 2004-03-09 CN CN 200410022965 patent/CN1280713C/zh not_active Expired - Fee Related
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452378B (zh) * | 2007-12-05 | 2011-11-23 | 国际商业机器公司 | 阻止指令提取调节的方法、处理器和装置 |
CN101807145A (zh) * | 2010-04-16 | 2010-08-18 | 浙江大学 | 栈式分支预测器的硬件实现方法 |
CN101807145B (zh) * | 2010-04-16 | 2012-12-26 | 浙江大学 | 栈式分支预测器的硬件实现方法 |
CN104252335B (zh) * | 2013-06-28 | 2017-04-12 | 国际商业机器公司 | 用于选择的返回指令的预测获取和解码方法和系统 |
CN104252335A (zh) * | 2013-06-28 | 2014-12-31 | 国际商业机器公司 | 用于选择的返回指令的预测获取和解码方法和系统 |
CN103593169A (zh) * | 2013-11-29 | 2014-02-19 | 深圳中微电科技有限公司 | 一种多线程处理器中的指令输出装置、方法及其处理器 |
CN103593169B (zh) * | 2013-11-29 | 2017-09-05 | 深圳中微电科技有限公司 | 一种多线程处理器中的指令输出装置、方法及其处理器 |
CN104820580A (zh) * | 2014-01-31 | 2015-08-05 | 想象技术有限公司 | 改进的返回堆栈缓存 |
CN104820580B (zh) * | 2014-01-31 | 2018-10-16 | 美普思技术有限责任公司 | 改进的返回堆栈缓存 |
CN104951697B (zh) * | 2014-03-28 | 2018-07-03 | 英特尔公司 | 来自过程指令的返回-目标限制性返回、处理器、方法及系统 |
CN104951697A (zh) * | 2014-03-28 | 2015-09-30 | 英特尔公司 | 来自过程指令的返回-目标限制性返回、处理器、方法及系统 |
CN107925690A (zh) * | 2015-09-30 | 2018-04-17 | 英特尔公司 | 指示调用或返回的意图的控制转移指令 |
CN106557304A (zh) * | 2015-09-30 | 2017-04-05 | 想象技术有限公司 | 用于预测子程序返回指令的目标的取指单元 |
CN107925690B (zh) * | 2015-09-30 | 2021-07-13 | 英特尔公司 | 指示调用或返回的意图的控制转移指令 |
CN106557304B (zh) * | 2015-09-30 | 2022-02-18 | 美普思技术有限责任公司 | 用于预测子程序返回指令的目标的取指单元 |
CN109960607A (zh) * | 2017-12-22 | 2019-07-02 | 龙芯中科技术有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
CN109960607B (zh) * | 2017-12-22 | 2021-04-20 | 龙芯中科技术股份有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN1280713C (zh) | 2006-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1188778C (zh) | 处理指令的方法、处理器和数据处理系统 | |
CN1161691C (zh) | 检测被寻址单元预测失败的存储控制器 | |
CN1141647C (zh) | 赋予高级微处理器内存储器数据别名的方法和装置 | |
CN1177275C (zh) | 减少处理器中写入通信量的方法和系统 | |
US7398523B2 (en) | Adaptive class loading | |
Bae et al. | {FlashNeuron}:{SSD-Enabled}{Large-Batch} training of very deep neural networks | |
CN104156197B (zh) | 微处理器以及微处理器操作方法 | |
CN1534462A (zh) | 流水线处理一系列处理指令的方法和设备 | |
CN101933002A (zh) | 包含用于逻辑错误保护的混合冗余的处理器 | |
CN1280713C (zh) | 双栈返回地址预测器设计方法 | |
CN1885269A (zh) | 在微处理器恢复单元中进行写队列读数据的方法和装置 | |
CN1945525A (zh) | 从队列处理指令刷新的生存期计数器设计的系统和方法 | |
CN100435102C (zh) | 在数字信号处理器内调换代码的方法及系统 | |
CN1450450A (zh) | 采用双指令集的32位嵌入式微处理器 | |
CN1758215A (zh) | 更新指令错误状态暂存器 | |
CN1297888C (zh) | 32位媒体数字信号处理器 | |
CN1731346A (zh) | 微处理器的整数单元中五级容错流水结构的实现方法 | |
CN1151047A (zh) | 将指令装入指令高速缓冲存储器中的方法 | |
CN1848101A (zh) | 可快速地于不同储存装置间传输数据的计算机系统 | |
CN1237732A (zh) | 分布式指令完成逻辑 | |
JP3170472B2 (ja) | レジスタ・リマップ構造を有する情報処理システム及び方法 | |
CN1295598C (zh) | 双栈返回地址预测器中返回地址栈的恢复方法 | |
CN1752885A (zh) | 计算机系统及其配置方法 | |
CN1848093A (zh) | 基本输入输出系统中高级配置和电源接口模块的调试方法 | |
US7831809B2 (en) | Method for reducing code size of a program in code memory by dynamically storing an instruction into a memory location following a group of instructions indicated by an offset operand and either a length operand or a bitmask operand of an echo instruction |
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 |