CN110268384A - 寄存器重命名、调用返回预测和预取的实现 - Google Patents
寄存器重命名、调用返回预测和预取的实现 Download PDFInfo
- Publication number
- CN110268384A CN110268384A CN201880006336.5A CN201880006336A CN110268384A CN 110268384 A CN110268384 A CN 110268384A CN 201880006336 A CN201880006336 A CN 201880006336A CN 110268384 A CN110268384 A CN 110268384A
- Authority
- CN
- China
- Prior art keywords
- register
- pointer
- physical register
- instruction
- processor
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 31
- 230000004044 response Effects 0.000 claims abstract description 28
- 230000008569 process Effects 0.000 claims abstract description 17
- 230000007423 decrease Effects 0.000 claims description 6
- 230000003247 decreasing effect Effects 0.000 claims description 4
- 238000007599 discharging Methods 0.000 claims 2
- 238000003860 storage Methods 0.000 description 26
- 230000015654 memory Effects 0.000 description 10
- 230000006870 function Effects 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 6
- 238000013461 design Methods 0.000 description 6
- 238000013507 mapping Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000033228 biological regulation Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
处理器包括多个物理寄存器和通信地耦合到多个物理寄存器的处理器核心,处理器核心执行包括多个指令的进程,以:响应于用于无序执行的调用指令的发出,基于多个物理寄存器的头指针来识别多个物理寄存器中的第一物理寄存器;将返回地址存储在第一物理寄存器中,其中第一物理寄存器与第一标识符相关联;基于与进程相关联的调用堆栈的无序指针来将第一标识符存储在调用堆栈的第一条目中;以及使调用堆栈的无序指针递增并由调用堆栈的长度调节,以指向调用堆栈的第二条目。
Description
相关申请
本申请要求于2017年1月13日提交的美国临时申请号62/446,130的优先权,该临时申请的内容通过引用被并入本文。
技术领域
本公开涉及处理器,且更具体地,涉及用于管理重命名寄存器和与处理器相关联的调用堆栈的系统和方法。
背景技术
处理器(例如中央处理单元(CPU))可执行包括系统软件(例如操作系统)和用户软件应用的软件应用。由处理器执行的软件应用被称为操作系统的进程。软件应用的源代码可被编译成机器指令。关于处理器架构规定的指令集(也被称为指令集架构(ISA))可包括指示处理器操作的命令。
附图说明
从下面给出的详细描述中和从本公开的各种实施方式的附图中,本公开将被更充分地理解。然而,附图不应被理解为将本公开限制到特定的实施方式,但仅为了解释和理解。
图1示出根据本公开的实施方式的包括处理器的片上系统(SoC)。
图2示出用于寄存器重命名的物理寄存器的队列的头指针和尾指针的使用。
图3示出使用调用堆栈来管理推测性指令执行的调用指令和返回指令的例子。
图4示出根据本公开的实施方式的计算设备。
图5示出根据本公开的实施方式的调用堆栈和物理寄存器的实现。
图6是示出根据本公开的实施方式的用于推测性地执行调用/返回指令的方法的方框图。
具体实施方式
指令可参考输入和输出参数的寄存器。例如,指令可包括用于存储输入和输出寄存器的标识符的一个或多个操作数字段。寄存器可存储数据值,其用作用于计算的值的源和/或用作由指令执行的计算的结果的目的地。例如,指令addi$r3,$r5,1可读取存储在寄存器r5中的值并使该值递增一(“1”),并将递增后的值存储在寄存器r3中。指令集架构可定义可由在指令集架构中规定的指令参考的一组寄存器(也被称为架构式寄存器)。
可根据指令集架构的规定来实现处理器。处理器可包括可用于支持在处理器的指令集架构中定义的架构式寄存器的物理寄存器。在一些实现中,每个架构式寄存器与相应的物理寄存器相关联。使用下面的代码序列作为例子,
div $r3,$r5,$r6
add $r4,$r3,1
mul $r3,$r5,$r6
其中处理器首先通过执行除法(div)指令来写架构式寄存器r3,然后通过执行加法指令来读寄存器r3,以及最后通过执行乘法(mul)指令来盖写寄存器r3。当每个架构式寄存器与唯一的物理寄存器相关联时,由实现流水线架构的处理器执行指令的序列可引起“写后读”危险,即,在先前的指令完成之前由后面的指令盖写r3。因此,该实现需要确保在加法指令开始(以及读由除法指令产生的r3的值)之前乘法指令不能完成(以及写r3)。
高性能处理器实现可使用比在指令架构集中定义的架构式寄存器更多的物理寄存器。架构式寄存器可随着时间的过去被映射到不同的物理寄存器。当前未被分配的物理寄存器的列表(被称为自由列表)可提供可加以利用的物理寄存器。每当新值被写到架构式寄存器时,值就存储到新物理寄存器,且在架构式寄存器和物理寄存器之间的映射被更新以反映最新创建的映射。映射的更新被称为寄存器重命名。表1示出应用于指令的上述序列的执行的寄存器重命名。
表1
在如表1中所示的例子中,架构式寄存器用小写体(r#)表示,而物理寄存器用大写体(R#)表示。架构式寄存器r3被分配到来自自由列表的物理寄存器R8。除法指令的结果被写到R8。加法指令从物理寄存器R8读。乘法指令在寄存器重命名之后写到物理寄存器R9。因此,乘法指令可被执行而不需要避免盖写除法指令的结果,因为架构式寄存器r3通过寄存器重命名被映射到不同的物理寄存器。
寄存器重命名也可确定不再被需要并可返回到自由列表的寄存器。例如,在加法指令读取存储在R8中的值之后,R8被确定为不再被需要并可返回到自由列表。
寄存器重命名一般与在指令的流水线执行中的无序执行结合以实现高性能。在这样的情况下,是否将寄存器释放回到自由列表的确定可能需要考虑维持有序状态(保持在包括例如其它指令的失败的推测性执行的某些状况下将处理器状态回滚到在指令执行开始时的原始状态的能力)的需要。例如,R8可能不能被释放,直到乘法指令被撤回为止。
如果在自由列表中没有可用的寄存器,则处理器可暂时停止发出更多的指令直到一些已经发出的指令完成它们的执行,并将物理寄存器释放到自由列表。在那时,处理器可重新开始发出新指令。
架构式寄存器可被分类为不同的类型(例如用于存储浮点值的浮点、用于存储整数值的通用整数等)。在一些实现中,每种类型的架构式寄存器与用于寄存器重命名的单个池的相应物理寄存器相关联。例如,可能有用于重命名架构式浮点寄存器的浮点物理寄存器的池和用于重命名架构式通用寄存器的通用物理寄存器的池。
在某种类型的架构式寄存器的总数很小或不同的架构式寄存器展示不同的行为的实现中,每个架构式寄存器可与物理寄存器的池相关联。例如,如果在指令架构集中定义某种类型t的仅仅两个架构式寄存器(例如$t0和$tl),则八个物理寄存器可分成两个池,包括专用于重命名$t0的四个物理寄存器的第一池和专用于重命名$t l的另四个物理寄存器。这种方法对于架构式寄存器的较大集合是低效的。例如,16个通用寄存器需要每个被重命名至少6次,总共96个物理寄存器被需要构成16个池。
如果物理寄存器的单个池与架构式寄存器相关,则该池可使用物理寄存器的旋转缓冲器——即队列——来实现。这个实现可包括下列项的部件:
●包括多个(N个)物理寄存器的物理寄存器阵列,
●索引到阵列内的头指针(HD),
●也索引到阵列内的尾指针(TL),以及
●用于检测物理寄存器的池是否被完全映射到架构式寄存器的部件。为了检测物理寄存器的池是否被完全映射到架构式寄存器,处理器可以:
1.保持使用中的物理寄存器的数量的计数器,或
2.比较HD和TL的位置。
头指针和尾指针可以如在图2中所示的被使用,其中重命名寄存器被实现为可以后进先出(LIFO)或先进先出(FIFO)地被访问的循环堆栈。与重命名寄存器的其它实现比较,重命名寄存器的循环堆栈使用两个指针(HL和TL)来跟踪自由物理寄存器和所占用的物理寄存器。因此,循环堆栈是占据较小的电路区域并消耗较少的功率的重命名寄存器的较简单的实现。假设基于在头指针和尾指针之间的比较来确定物理寄存器的完全映射的池,则处理器可以:
●最初设置指向同一值(例如0)的头指针和尾指针;
●当新的架构式寄存器由执行参考架构式寄存器的读指令的处理器重命名时,处理器可移动头指针以指向内容被读取自的物理寄存器;
●当新的架构式寄存器由执行参考架构式寄存器的写指令的处理器重命名时,处理器可使头指针递增,以物理寄存器的总数(N)取模,其中递增的头指针指向将被写到的新物理寄存器。使头指针递增可包括移动头指针以指向由较高索引值识别的另一物理寄存器;
●如果头指针比尾指针小一(以N取模),则处理器可确定物理寄存器的池完全被用尽(或都被映射到架构式寄存器),且可停止发出引起向架构式寄存器的写操作的指令;
●当物理寄存器以后进先出(LIFO)顺序被释放时,处理器可使尾指针递增(以N取模),因而导致释放由尾指针指向的先前位置。当物理寄存器以先进先出(FIFO)顺序被释放时,处理器可使头指针递增(以N取模)。
●响应于由于指令的错误推测性(无序)执行而引起的处理器的执行状态的回滚,处理器可将架构式寄存器映射到在队列中的未被回滚释放的最后一个物理寄存器。在一些实现中,这可等效于将头指针设置为尾指针的值。
图1示出根据本公开的实施方式的包括处理器102的片上系统(SoC)100。处理器102可包括被制造在半导体芯片集(例如SoC 100)上的逻辑电路。处理器100可以是中央处理单元(CPU)、图形处理单元(GPU)或多核处理器的处理核心。如图1所示,处理器102可包括指令执行流水线104和寄存器空间106。流水线104可包括多个流水线级,且每个级包括被制造成执行在多级过程中的特定级的操作的逻辑电路,多级过程被需要来完全执行在处理器102的指令集架构(ISA)中规定的指令。在一个示例实现中,流水线104可包括指令取出/解码级110、数据取出级112、执行级114和写回级116。
寄存器空间106是包括与处理器102相关联的不同类型的物理寄存器的逻辑电路区域。在一个实施方式中,寄存器空间106可包括寄存器池108、109,每个寄存器池可包括某个数量的物理寄存器。在池108、109中的每个寄存器可包括多个位(被称为寄存器的“长度”)以存储由在流水线104中执行的指令处理的数据项。例如,根据实现,在寄存器池108、109中的寄存器可以是32位、64位、128位、256或512位。
程序的源代码可被编译成在与处理器102相关联的指令集架构(ISA)中定义的一系列机器可执行指令。当处理器102开始执行可执行指令时,这些机器可执行指令可被放置在流水线104上以连续地(按顺序)或带分支地(无序地)被执行。指令取出/解码级110可取回放置在流水线104上的指令并识别与指令相关联的标识符。指令标识符可使所接收的指令与在处理器102的ISA中规定的指令相关联。
在ISA中规定的指令可被设计来处理存储在通用寄存器(GPR)中的数据项。数据取出级112可从GPR取回待处理的数据项(例如字节或半字节)。执行级114可包括逻辑电路以执行在处理器102的ISA中规定的指令。
在一个实现中,与执行级114相关联的逻辑电路可包括多个“执行单元”(或功能单元),每个执行单元专用于执行某个指令集。由这些执行单元执行的所有指令的集合可构成与处理器102相关联的指令集。在执行指令以处理由数据取出级112取回的数据项之后,写回级116可输出结果并将结果存储在寄存器池108、109中的物理寄存器中。
处理器102的ISA可定义指令,且处理器102的执行级114可包括执行单元118,其包括在ISA中定义的指令的硬件实现。用高级编程语言编码的程序可包括函数的调用(call)。函数的执行可包括指令的序列的执行。在函数的执行开始时,流水线104的执行级114可通过将返回(return)地址保存在指定存储位置处(例如在返回寄存器处)来保存返回地址。返回地址可指向存储指令指针的存储位置。在函数的执行结束时,返回指令可返回到被保存为返回地址的指令指针。在一个实现中,处理器102可包括调用堆栈120,其为用于将指针122存储到正被执行的函数的返回地址的堆栈数据结构。调用堆栈120可在调用之后跟踪下一指令的位置(例如通过地址指针),即,作为对那个调用的目标匹配返回的地址。考虑到如在表2中所示的调用的序列:
表2
在表2中的调用的序列中,调用堆栈120用于跟踪调用和返回(调用指针+4),其中A、B、C是调用以及X、Y、Z是返回。这些指针在调用时被推进到调用堆栈120并在返回之后被弹出。当在流水线104中执行多对调用/返回时,返回指令的地址非常可能分支到调用堆栈120的顶部。表3示出对如在表2中所示的调用的调用堆栈,其中假设地址是32位。
表3
在一些实现中,调用由调用指令执行,调用指令分支到新地址,同时将返回地址写到寄存器(例如在执行调用B之后的[B+4])。相应的返回指令从寄存器读并分支到那个地址。这些调用和返回指令可以是专用指令,或可以是在跳转/分支指令上的变型。
在一些实现中,由于调用/返回指令的定义或由于所使用的软件调用约定,存储返回地址的寄存器对于不同的调用可以是相同的架构式寄存器。如果有连续地被执行的两个调用而没有介入的返回,则第二调用可盖写返回寄存器。所以存在备份返回寄存器的需要,以保存返回地址用于以后将值复制回到返回寄存器。
在无序地推测性地发出指令的高性能实现中,当返回指令被发出时,流水线104(例如写回电路116)可能需要取出在返回的目标处的指令。然而由于推测性地执行的调用的序列,返回地址可能是不可用的。在那种情况下,流水线104可包括预测器电路124以基于调用堆栈来预测下一地址。预测器电路124可以是确定返回的目标的写回电路116的部分。在一个实现中,预测器电路124可使用在调用堆栈的头部处的值来预测下一返回地址。
在某个以后的执行点处,对照实际返回地址来比较所预测的返回地址。如果这两个返回地址是不同的,则返回预测被确定为不正确的。使处理器状态回滚到返回指令的有序状态,并在正确的地址处重新开始指令取出。
当用允许指令的推测性执行的流水线104实现处理器102时,调用堆栈可包括有序组成部分(IO)和无序组成部分(OoO)。有序组成部分(IO)保持已撤回的所有调用/返回指令的记录;无序组成部分保持已发出的所有调用/返回指令——包括推测性地发出的那些指令——的记录。
调用堆栈的一些实现可包括下面的组成部分以支持指令的推测性执行:
●所确定的大小(M,其中M是整数值)的地址阵列,其中地址阵列可以是由所确定的大小的地址空间规定的存储器区,
●有序堆栈顶部(IO ToS),以及
●无序堆栈顶部(OoO ToS)。
这些组成部分可以如下被使用:
●当发出调用指令时,将返回地址添加到在由当前OoO ToS所指向的位置处的堆栈,且OoO ToS指针递增,以M(M是调用堆栈的长度)取模。
●当发出返回指令时,存储在OoO ToS处的值用作所预测的下一地址,且OoO ToS指针递减,以M取模。
●当撤回调用(或返回)指令时,IO ToS相应地递增(或递减),以M取模。
●如果处理器状态由于任何原因而回滚,则OoO ToS被设置到IOToS。
图3示出使用调用堆栈来管理推测性指令执行的调用/返回的例子。如图3所示,处理器102可维持调用堆栈。在302,调用堆栈可最初具有指向调用堆栈的同一条目的IO指针和OoO指针。条目可存储A+4的返回地址。在304,处理器102可以推测性地执行第二指令(B)并使OoO指针递增,以M取模。OoO指针可指向存储第二调用(B)的所预测的返回地址(B+4)的条目。在306,处理器102可完成第二调用(B)并将OoO指针设置到所预测的返回地址(所预测的B+4)。在308,处理器102可以推测性地完成第一调用(A)并将OoO设置到所预测的返回地址(A+4)。在310,处理器可实际上撤回第二调用(B)并将IO指针设置到第二调用(B)的返回地址。在312,处理器可实际上撤回第二调用(B)并从第二调用(B)返回,以及将IO指针设置到第一调用(A)的返回地址。步骤314显示在状态312之后的异常的效应。因为IO指针和OoO指针不匹配,在314,处理器102可能需要回滚到当前顺序,将OoO ToS设置到IO ToS,指示来自A的返回还没有被撤回。
在一些实现中,可以有特殊逻辑电路以检测下溢条件,其中连续返回的数量超过调用堆栈的大小(M)。在那种情况下,处理器可包括使禁用预测并等待将被取出的实际返回地址的逻辑。
在一些实现中,返回寄存器——用于调用和返回的寄存器——固定到特定的架构式寄存器。作为重命名的部分,这个架构式寄存器每当它被盖写时被重命名为新的物理寄存器。例如,每当调用指令被执行时,那个返回寄存器就被重命名并被分配新的物理寄存器。存储在返回寄存器中的值是在执行调用指令之后的指令的地址。返回寄存器重命名的其它原因可包括通过用于在函数调用序列期间保存并恢复返回地址值的任何手段来盖写返回地址寄存器。
当使用如上所述的队列实现寄存器重命名时,可使用由调用写入的重命名条目的子集(即,在重命名寄存器池中的物理寄存器)来实现调用堆栈。本公开的实现可提供使用寄存器重命名条目来实现调用堆栈的系统和方法。与使用不同的索引系统来实现调用堆栈和重命名寄存器比较,本公开的实现减小了管理调用和返回指令所需的电路面积和功率消耗。例如,如果调用堆栈和重命名寄存器池单独地被实现,则调用堆栈的条目可以是64位宽以存储完整的地址。如果调用堆栈被实现来存储重命名寄存器索引,则调用堆栈的条目可能需要较少的位。例如,可使用3个位来给八重名命名寄存器池编索引,因而减小处理器的电路面积和功率消耗。
在本公开的一个实施方式中,在调用堆栈中的条目被索引到存储返回地址的重命名寄存器的阵列内,而不是使用固定架构式寄存器来存储返回地址。图4示出根据本公开的实施方式的计算设备400。如图4所示,处理器402可包括调用堆栈408,其包括直接被索引到寄存器406A-406C内的条目404A-404C。例如,可使用仅仅三个位来对在八寄存器池中的寄存器编索引。在寄存器池108中的寄存器406A-406C用作重命名寄存器。因此,调用堆栈408用重命名寄存器406A-406C直接编索引。下面的例子可示出这个实施方式如何工作。考虑包括下列项的2个调用的序列:
A:call X
B:call Y,
其中调用指令写到返回架构式寄存器$btr。这个序列的调用堆栈是:
B+4
A+4。
假设指令地址包括8个字节,意味着对于每个条目有64位地址。另外假设返回架构式寄存器$btr对于第一调用(调用X)被重命名为$BTR0以及对于第二调用(调用Y)被重命名为$BTR2。存储在这两个物理寄存器中的值是:
$BTR2<-B+4
$BTR0<-A+4
可通过在返回寄存器中存储包含返回地址的物理寄存器的索引号来实现调用堆栈。在这个特定的序列中,可通过在下列寄存器中存储来实现调用堆栈:
$BTR2
$BTR0
如果有8个物理返回寄存器,则需要每条目三个位以在调用堆栈中编索引。为了从来自调用Y的返回地址预测返回地址,执行级读取调用堆栈,并基于该读取来查看$BTR2,$BTR2是B+4。
图5示出根据本公开的实施方式的调用堆栈502和物理寄存器504的实现500。调用堆栈502可与IO指针和OoO指针相关联,如上面讨论的。物理寄存器504可被实现为与头指针(HD)和尾指针(TL)相关联的队列,如上面讨论的。物理寄存器504用于存储返回地址。调用堆栈502和物理寄存器504可如下合作地工作:
●调用指令被发出到指令执行流水线(例如流水线104)用于无序执行;
●指令执行电路(例如执行单元114)可将对应于调用指令的返回地址存储在由重命名物理寄存器的队列的头(HD)指针所指向的物理寄存器中,其中HD指针由索引值识别;
●指令执行电路可接着存储指示在由调用堆栈的OoO指针所指向的调用堆栈的条目中的当前返回地址寄存器的HD指针的索引值,并使OoO指针递增,以调用堆栈的长度(M)取模。递增以M(整数)取模意味着HD=(HD+1)%M。例如,如果M是八(8)以及HD是七(7),则HD的新值是零(0);
●当与调用指令相关联的返回指令被发出用于无序执行时,指令执行电路可首先确定在由OoO指针所指向的条目中存储的索引值并确定在重命名物理寄存器的队列中的返回地址寄存器。由OoO所指向的返回地址寄存器可包含所预测的下一指令地址。OoO指针递增,以M取模;
●当调用(或返回)指令被撤回时,IO递增(或递减),以M取模。
●如果处理器状态由于任何原因而回滚,则OoO指针被设置到IO指针。
本公开的这个实现从电路面积使用方面来说比传统调用堆栈实现更有效,因为条目被索引到少量物理寄存器(其需要2-4位来寻址)而不是完整的存储器地址(32或64位)内。
应注意,这种技术也可结合基于标准池的寄存器重命名来使用,调用堆栈指向池中的条目。为了避免使返回值被释放并重新分配同时仍然从调用堆栈被指向的风险,可修改分配机制,使得由调用堆栈所指向的物理寄存器尽可能不频繁地被重新分配。也就是说,如果有在自由列表中的寄存器,其中一些寄存器从调用堆栈被指向以及一些寄存器不被指向,则处理器可包括从不由调用堆栈所指向的那些寄存器挑选的寄存器分配器电路。响应于确定所有自由寄存器由调用堆栈指向,寄存器分配器电路重新分配由调用堆栈所指向的寄存器。在那些寄存器当中,寄存器分配器电路选择使用在调用堆栈中最深的条目来指向的寄存器。在那种情况下,寄存器分配器电路还可通过设置与条目相关联的有效性标志来将条目标记为无效的。
在本公开的另一实施方式中,物理寄存器504中的每个可包括两个标志(例如使用两个标志位)。第一标志位可指示物理寄存器是否由于调用而被写入,而第二标志位可指示物理寄存器是否已经用于调用堆栈预测。IO指针和OoO指针可直接索引到这些物理寄存器504内而不需要调用堆栈502。在这个实施方式中,预测器124负责OoO指针,以及寄存器重命名单元负责头(HD)指针。此外,尾(TL)指针将前进,作为正常重命名过程的部分。
●当调用指令被发出时,
○处理器可以为来自池(108)的架构式返回寄存器分配新物理寄存器,并可将返回地址存储在所分配的物理寄存器中。处理器还可使头指针位置进一步递增,以寄存器池大小取模以指向下一返回寄存器;
○处理器可将与物理寄存器相关联的第一标志位设置为第一值(例如“1”)以指示物理寄存器由调用指令写入,并将与物理寄存器相关联的第二标志位设置为第二值(例如“0”)以指示物理寄存器被标记为不用于返回地址预测;
○OoO指针被设置为等于这个HD指针。
●当写到架构式返回寄存器的另一指令被发出时,
○为来自池(108)的架构式返回寄存器分配新物理寄存器以存储新返回地址,导致HD指针递增,以寄存器池大小取模;
○这个新物理寄存器被标记为不由调用指令写入;
○OoO指针保持不被修改。
●当返回指令被发出时,
○在由OoO指针所指向的返回寄存器池中的物理寄存器中的值用作所预测的下一地址;
○物理寄存器被标记为用作预测;
○OoO指针递减一次或多次,以寄存器池大小取模,直到OoO指针移动以指向被标记为由调用指令写入(例如第一标志位被置位)并被标记为不用于预测(例如第二标志位未被置位)的物理寄存器为止。
●当调用/返回指令被撤回时,IO指针递增/递减一次或多次,以寄存器池大小取模,直到它指向被标记为由调用写入的物理寄存器为止。此外,尾(TL)指针将前进,作为正常重命名过程的部分。当返回指令撤回时,IO指针可相应地递减到被标记为由调用指令写入的物理寄存器。
●如果处理器状态由于任何原因而回滚,则HD指针被设置到TL指针,作为正常重命名过程的部分。此外
○OoO指针被设置到IO指针。
○所有物理寄存器条目被标记为不用于预测。
因此,IO指针和OoO指针的递增(或递减)可能需要搜索由调用写入的下一(或前一)条目,并可能不用于预测。
本公开的实施方式可提供包括分支目标预测器电路的处理器,在分支指令的目标被计算之前,分支目标预测器电路预测所采用的条件分支或无条件分支指令的目标。所预测的分支目标可存储在与处理器相关联的分支目标寄存器中。一般,存在分支目标寄存器和目标返回寄存器。分支目标寄存器向除了返回指令以外的间接分支指令提供分支地址。目标返回寄存器向返回指令提供分支地址,并由调用指令使用调用返回地址值(例如调用指令+4的地址)写入。此外,本公开的实施方式提供用于存储中间基本地址的一个或多个目标基本寄存器。可从基本地址加上移位来计算地址。目标基本寄存器不向分支指令或返回指令提供值。
当架构式寄存器的数量很小时,分支目标寄存器和目标返回寄存器可被实现为如上所述的每寄存器队列。物理寄存器池的大小可能对每个分支目标寄存器是不同的。特别是,因为返回目标寄存器被用作调用堆栈机制的部分,返回寄存器池具有比其它寄存器明显更多的物理寄存器是有意义的。较大的返回寄存器池可允许较大的调用堆栈。
在一些实现中,分支目标寄存器值充当指令预取提示。每寄存器队列实现提供如下允许在地址之间的选择的细调的信息:
●对于分支目标寄存器,在队列的头部处的物理寄存器用作用于预测未来分支指令的提示,除非有回滚。如果有回滚,则在队列的尾部处的物理寄存器被使用。因此,那些需要被考虑用于预取的地址。
●因为目标基本寄存器不是分支的目标,在它们的物理寄存器中的地址不需要被预取。
●目标返回寄存器用作调用-返回预测器。被标记为调用的目标的物理寄存器用于预测。因此,它们将具有在这些物理寄存器当中的最高优先级。此外,它们到头部越近,它们就越可能被很快使用。
可产生预取规则作为下面的描述。这些规则可确定预取指令的顺序。启发法可以是:
●选择正常分支目标寄存器的HD或TL之一;
●偏爱被标记为由对返回寄存器的调用写入的指针;
●选择最接近OoO指针的指针;或
●不预加载目标基本寄存器。
图6是示出根据本公开的实施方式的用于推测性执行调用/返回指令的方法600的方框图。参考图6,在602,响应于用于无序执行的调用指令的发出,处理器核心可基于多个物理寄存器的头指针来识别通信地耦合到处理器核心的多个物理寄存器中的第一物理寄存器。
在604,处理器核心可将返回地址存储在第一物理寄存器中,其中第一物理寄存器与第一标识符相关联。
在606,处理器核心可基于与进程相关联的调用堆栈的无序指针来将第一标识符存储在调用堆栈的第一条目中。
在608,处理器核心可使调用堆栈的无序指针递增(由调用堆栈的长度调节)以指向调用堆栈的第二条目。
本公开的例子1是一种方法,其包括响应于用于无序执行的调用指令的发出,基于多个物理寄存器的头指针来识别通信地耦合到处理器核心的多个物理寄存器中的第一物理寄存器;将返回地址存储在第一物理寄存器中,其中第一物理寄存器与第一标识符相关联;基于与进程相关联的调用堆栈的无序指针来将第一标识符存储在调用堆栈的第一条目中;以及使调用堆栈的无序指针递增(由调用堆栈的长度调节)以指向调用堆栈的第二条目。
本公开的例子2是处理器,其包括多个物理寄存器和通信地耦合到多个物理寄存器的处理器核心,处理器核心执行包括多个指令的进程以:响应于用于无序执行的调用指令的发出,基于多个物理寄存器的头指针来识别多个物理寄存器中的第一物理寄存器;将返回地址存储在第一物理寄存器中,其中第一物理寄存器与第一标识符相关联;基于与进程相关联的调用堆栈的无序指针来将第一标识符存储在调用堆栈的第一条目中;以及使调用堆栈的无序指针递增(由调用堆栈的长度调节)以指向调用堆栈的第二条目。
虽然关于有限数量的实施方式描述了本公开,但本领域中的技术人员将从那里认识到很多修改和变化。意图是所附权利要求涵盖如落在本公开的真实精神和范围内的所有这样的修改和变化。
设计可经历从创建到模拟到制造的各种阶段。表示设计的数据可以用很多方式表示该设计。首先,如在模拟中有用的,可使用硬件描述语言或另一功能描述语言来表示硬件。此外,可在设计过程的一些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,大部分设计在某个阶段达到表示在硬件模型中的各种设备的物理放置的数据的级别。在常规半导体制造技术被使用的情况下,表示硬件模型的数据可以是规定在掩模的不同掩模层上的用于产生集成电路的各种特征的存在或缺乏的数据。在设计的任何表示中,数据可存储在任何形式的机器可读介质中。存储器或磁性或光学存储装置例如磁盘可以是机器可读介质以存储经由光波或电波传输的信息,光波或电波被调制或以另外方式被产生以传输这样的信息。当指示或携带代码或设计的电载波在电信号的拷贝、缓冲或重新传输被执行的程度上被传输时,新拷贝被制造。因此,通信提供商或网络提供商可在有形机器可读介质上至少临时地存储物品,例如被编码到载波内的信息,体现本公开的实施方式的技术。
如本文使用的模块指硬件、软件和/或固件的任何组合。作为例子,模块包括硬件,例如微控制器,其与非临时介质相关以存储适合于由微控制器执行的代码。因此,对模块的提及在一个实施方式中指硬件,其特别配置成识别和/或执行在非临时介质上保持的代码。此外在另一实施方式中,模块的使用指包括代码的非临时介质,代码特别适合于由微控制器执行以执行预定操作。而且如可被推断出的,在又一实施方式中,术语“模块”(在这个例子中)可以指微控制器和非临时介质的组合。经常地,被示为分开的模块边界通常改变并可能重叠。例如,第一和第二模块可共享硬件、软件、固件或其组合,同时可能保留某个独立的硬件、软件或固件。在一个实施方式中,术语“逻辑”的使用包括硬件,例如晶体管、寄存器或其它硬件,例如可编程逻辑设备。
短语“配置成”的使用在一个实施方式中指布置、装配、制造、许诺销售、进口和/或设计装置、硬件、逻辑或元件以执行所指定或确定的任务。在这个例子中,未正在操作的装置或其元件仍然“配置成”执行指定任务,如果它被设计、耦合和/或互连以执行所述指定任务。作为纯粹示例性的例子,逻辑门可在操作期间提供0或1。但“配置成”向时钟提供使能信号的逻辑门不包括可提供1或0的每个潜在逻辑门。替代地,逻辑门是以某种方式耦合的逻辑门,使得在操作期间1或0输出启用时钟。再一次注意,术语“配置成”的使用并不需要操作,而是替代地聚焦于装置、硬件和/或元件的潜伏状态,其中在潜伏状态中,当装置、硬件和/或元件正操作时,装置、硬件和/或元件设计成执行特定的任务。
此外,短语“以”、“能够”和/或“可操作来”的使用在一个实施方式中指被设计成以特定的方式实现装置、逻辑、硬件和/或元件的使用的一些装置、逻辑、硬件和/或元件。如上注意,以、能够或可操作来的使用在一个实施方式中指装置、逻辑、硬件和/或元件的潜伏状态,其中装置、逻辑、硬件和/或元件没有正在操作,但被设计成以特定的方式实现装置的使用。
如在本文使用的值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知的表示。逻辑电平、逻辑值(logic values)或逻辑值(logical values)的使用常常也被称为1和0,其简单地表示二进制状态。例如,1指高逻辑电平而0指低逻辑电平。在一个实施方式中,存储单元例如晶体管或闪存单元也许能够保持单个逻辑值或多个逻辑值。然而,在计算机系统中的值的其它表示被使用。例如,十进制数据10也可被表示为910的二进制值和十六进制字母A。因此,值包括能够在计算机系统中保持的信息的任何表示。
而且,状态可由值或值的部分表示。作为例子,第一值例如逻辑一可表示默认或初始状态,而第二值例如逻辑零可表示非默认状态。此外,术语“重置”和“置位”在一个实施方式中分别指默认或已更新的值或状态。例如,默认值可能包括高逻辑值,即,重置,而已更新的值可能包括低逻辑值,即,置位。注意,值的任何组合可用于表示任何数量的状态。
可经由存储在机器可访问、机器可读、计算机可访问或计算机可读介质上的由处理元件可执行的指令或代码来实现上面阐述的方法、硬件、软件、固件或代码的实施方式。非临时机器可访问/可读介质包括提供(即,存储和/或传输)以由机器例如计算机或电子系统可读的形式的信息的任何机制。例如,非临时机器可访问介质包括:随机存取存储器(RAM)例如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁性或光学存储介质;闪存设备;电气存储设备;光学存储设备;声存储设备;用于保持从临时(传播的)信号(例如载波、红外信号、数字信号)接收的信息的其它形式的存储设备;等等,这些存储器与可从那里接收信息的非临时介质区分开。
用于对逻辑编程以执行本公开的实施方式的指令可存储在系统中的存储器例如DRAM、高速缓存器、闪存或其它存储装置中。此外,指令可经由网络或借助于其它计算机可读介质被分发。因此,机器可读介质可包括用于存储或传输以由机器(例如计算机)可读的形式的信息的任何机制,但不限于软盘、光学盘、光盘、只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存或有形机器可读存储装置,其在信息通过互联网经由电气、光学、声或其它形式的传播信号(例如载波、红外信号、数字信号等)的传输中被使用。因此,计算机可读介质包括适合于存储或传输电子指令或以由机器(例如计算机)可读的形式的信息的任何类型的有形机器可读介质。
在整个这个说明书中对“一个实施方式”或“实施方式”的提及意指结合该实施方式所述的特定特征、结构或特性被包括在本公开的至少一个实施方式中。因此,短语“在一个实施方式中”或“在实施方式中”在整个这个说明书中的不同地方中的出现并不一定都指同一实施方式。此外,可在一个或多个实施方式中以任何适当的方式组合特定特征、结构或特性。
在前述描述中,关于特定的示例性实施方式给出详细描述。然而将明显,可对其做出各种修改和变化而不偏离如在所附权利要求中阐述的本公开的更宽的精神和范围。说明书和附图相应地在示例性意义而不是限制性意义上被看待。此外,实施方式和其它示例性语言的前述使用并不一定指同一实施方式或同一例子,但可以指不同和独特的实施方式以及可能同一实施方式。
Claims (25)
1.一种处理器,包括:
多个物理寄存器;以及
处理器核心,其通信地耦合到所述多个物理寄存器,所述处理器核心用于执行包括多个指令的进程,以:
响应于用于无序执行的调用指令的发出,基于所述多个物理寄存器的头指针来识别所述多个物理寄存器中的第一物理寄存器;
将返回地址存储在所述第一物理寄存器中,其中所述第一物理寄存器与第一标识符相关联;
基于与所述进程相关联的调用堆栈的无序指针来将所述第一标识符存储在所述调用堆栈的第一条目中;以及
使所述调用堆栈的所述无序指针递增并由所述调用堆栈的长度调节,以指向所述调用堆栈的第二条目。
2.如权利要求1所述的处理器,其中所述处理器核心还用于:
响应于与所述调用指令对应的返回指令的发出,确定由所述无序指针所指向的所述调用堆栈的第二条目;
基于存储在所述调用堆栈的所述第二条目中的第二标识符来确定所述多个物理寄存器中的第二物理寄存器;
确定存储在所述第二物理寄存器中的预测返回地址;以及
从所述预测返回地址继续指令执行。
3.如权利要求2所述的处理器,其中所述第二物理寄存器与所述第一物理寄存器相同或不同于所述第一物理寄存器,以及其中所述第二标识符与所述第一物理标识符相同或不同于所述第一物理标识符。
4.如权利要求2所述的处理器,其中所述处理器核心还用于:
响应于撤回所述调用指令,使所述调用堆栈的有序指针递增并由所述调用堆栈的长度调节;以及
响应于撤回所述返回指令,使所述调用堆栈的所述有序指针递减并由所述调用堆栈的长度调节。
5.如权利要求4所述的处理器,其中响应于所述无序执行的回滚,所述处理器核心设置所述无序指针以指向由所述有序指针所指向的条目。
6.如权利要求5所述的处理器,其中所述处理器核心还用于:
响应于将所述返回地址存储在所述第一物理寄存器中,使所述头指针递增并由有序列表的长度调节,以指向所述多个物理寄存器中的第三物理寄存器。
7.如权利要求1所述的处理器,其中所述多个物理寄存器形成有序列表,其中所述多个物理寄存器中的每个唯一地与标识符相关联,所述标识符是在所述有序列表中的相应物理寄存器的索引值。
8.如权利要求1所述的处理器,其中所述调用指令的执行将所述进程的执行从指令的第一分支切换到指令的第二分支,以及其中与所述调用指令对应的所述返回指令的执行从指令的所述第二分支切换到指令的所述第一分支。
9.如权利要求1所述的处理器,其中所述多个物理寄存器为在所述处理器的指令集架构(ISA)中定义的架构式寄存器提供重命名寄存器的池。
10.一种方法,包括:
响应于用于无序执行的调用指令的发出,基于所述多个物理寄存器的头指针来识别通信地耦合到处理器核心的多个物理寄存器中的第一物理寄存器;
将返回地址存储在所述第一物理寄存器中,其中所述第一物理寄存器与第一标识符相关联;
基于与所述进程相关联的调用堆栈的无序指针来将所述第一标识符存储在所述调用堆栈的第一条目中;以及
使所述调用堆栈的所述无序指针递增并由所述调用堆栈的长度调节,以指向所述调用堆栈的第二条目。
11.如权利要求10所述的方法,还包括:
响应于与所述调用指令对应的返回指令的发出,确定由所述无序指针所指向的所述调用堆栈的第二条目;
基于存储在所述调用堆栈的所述第二条目中的第二标识符来确定所述多个物理寄存器中的第二物理寄存器;
确定存储在所述第二物理寄存器中的预测返回地址;以及
从所述预测返回地址继续指令执行。
12.如权利要求11所述的方法,还包括:
响应于撤回所述调用指令,使所述调用堆栈的有序指针递增并由所述调用堆栈的长度调节;以及
响应于撤回所述返回指令,使所述调用堆栈的所述有序指针递减并由所述调用堆栈的长度调节。
13.如权利要求12所述的方法,还包括:
响应于将所述返回地址存储在所述第一物理寄存器中,使所述头指针递增并由有序列表的长度调节,以指向所述多个物理寄存器中的第三物理寄存器。
14.如权利要求10所述的方法,其中所述多个物理寄存器形成有序列表,其中所述多个物理寄存器中的每个唯一地与标识符相关联,所述标识符是在所述有序列表中的相应物理寄存器的索引值。
15.一种处理器,包括:
物理寄存器的有序列表;以及
处理器核心,其通信地耦合到多个物理寄存器,所述处理器核心用于执行包括多个指令的进程,以:
响应于用于无序执行的第一调用指令的发出,基于所述多个物理寄存器的头指针来识别所述多个物理寄存器中的第一物理寄存器;
将返回地址存储在所述第一物理寄存器中;
将与所述第一物理寄存器相关联的第一指示符设置为第一值,所述第一值指示所述第一物理寄存器由调用指令写入;以及
使所述头指针递增并由所述有序列表的大小调节,以指向第二物理寄存器。
16.如权利要求15所述的处理器,其中所述处理器核心还用于:
设置无序指针以指向所述第二物理寄存器。
17.如权利要求15所述的处理器,其中所述处理器核心还用于:
响应于写到所述第二物理寄存器的第二指令的发出,使所述头指针递增并由所述有序列表的大小调节,以指向第三物理寄存器;
将与所述第三物理寄存器相关联的第一指示符设置为第二值,所述第二值指示所述第三物理寄存器不由调用指令写入;以及
维持所述无序指针的位置以指向所述第二物理寄存器。
18.如权利要求15所述的处理器,其中所述处理器核心还用于:
响应于与所述调用指令对应的返回指令的发出,确定存储在由所述无序指针所指向的所述第二物理寄存器中的所述返回地址;
基于存储在所述第二物理寄存器中的所述返回地址来计算预测返回地址;
将与所述第二物理寄存器相关联的第二指示符设置为第一值,所述第一值指示所述第二物理寄存器用于返回地址预测;以及
使所述无序指针递减并由所述有序列表的大小调节,直到所述无序指针到达与被设置为所述第一值的所述第一指示符和被设置为所述第二值的所述第二指示符相关联的第四物理寄存器为止。
19.如权利要求15所述的处理器,其中所述处理器核心还用于:
响应于撤回所述调用指令,使物理指针的所述有序列表的有序指针递增并由所述有序列表的大小调节,直到所述有序指针到达与被设置为所述第一值的所述第一指示符相关联的第五物理寄存器为止;以及
响应于撤回所述返回指令,使物理指针的所述有序列表的有序指针递减并由所述有序列表的大小调节,直到所述有序指针到达与被设置为所述第一值的所述第一指示符相关联的第五物理寄存器为止。
20.如权利要求19所述的处理器,其中响应于回滚,所述处理器核心还用于设置所述无序指针到由所述有序指针所指向的位置。
21.一种处理器,包括:
多个物理寄存器的循环堆栈实现,其中所述循环堆栈实现包括头指针、尾指针和物理寄存器的总数(N);以及
处理器核心,其通信地耦合到所述多个物理寄存器,所述处理器核心用于执行包括多个指令的进程,以:
响应于执行参考待重命名的第一架构式寄存器的写指令,使所述头指针递增并由N调节,以指向第一物理寄存器;以及
响应于执行参考所述第一架构式寄存器的读指令,读所述第一物理寄存器。
22.如权利要求21所述的处理器,其中所述尾指针被初始化以指向与所述头指针相同的物理重命名寄存器。
23.如权利要求21所述的处理器,其中所述处理器核心还用于:
响应于释放所述第一架构式寄存器,使所述尾指针递增并由N调节。
24.如权利要求21所述的处理器,其中所述处理器核心还用于:
响应于释放所述第一架构式寄存器,使所述头指针递减并由N调节。
25.如权利要求21所述的处理器,其中响应于回滚事件,所述处理器核心还用于移动所述头指针以指向与由所述尾指针所指向的相同的物理寄存器。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762446130P | 2017-01-13 | 2017-01-13 | |
US62/446130 | 2017-01-13 | ||
US15/868497 | 2018-01-11 | ||
US15/868,497 US20180203703A1 (en) | 2017-01-13 | 2018-01-11 | Implementation of register renaming, call-return prediction and prefetch |
PCT/US2018/013480 WO2018132652A1 (en) | 2017-01-13 | 2018-01-12 | Implementation of register renaming, call-return prediction and prefetch |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110268384A true CN110268384A (zh) | 2019-09-20 |
Family
ID=62839709
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880006336.5A Pending CN110268384A (zh) | 2017-01-13 | 2018-01-12 | 寄存器重命名、调用返回预测和预取的实现 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20180203703A1 (zh) |
EP (1) | EP3568755A4 (zh) |
KR (1) | KR102521929B1 (zh) |
CN (1) | CN110268384A (zh) |
WO (1) | WO2018132652A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116339830A (zh) * | 2023-05-26 | 2023-06-27 | 北京开源芯片研究院 | 一种寄存器管理方法、装置、电子设备及可读存储介质 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11119772B2 (en) | 2019-12-06 | 2021-09-14 | International Business Machines Corporation | Check pointing of accumulator register results in a microprocessor |
US20220083644A1 (en) * | 2020-09-16 | 2022-03-17 | Cisco Technology, Inc. | Security policies for software call stacks |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070061555A1 (en) * | 2005-09-15 | 2007-03-15 | St Clair Michael | Call return tracking technique |
CN104793920A (zh) * | 2014-01-17 | 2015-07-22 | 想象力科技有限公司 | 堆栈指针值预测 |
CN104794067A (zh) * | 2014-01-17 | 2015-07-22 | 想象力科技有限公司 | 堆栈存储的变量值预测 |
CN105144084A (zh) * | 2013-03-15 | 2015-12-09 | 高通股份有限公司 | 提高处理器中返回分支指令的执行速度的方法 |
US20160314075A1 (en) * | 2015-04-24 | 2016-10-27 | Optimum Semiconductor Technologies, Inc. | Computer processor that implements pre-translation of virtual addresses with target registers |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5675759A (en) * | 1995-03-03 | 1997-10-07 | Shebanow; Michael C. | Method and apparatus for register management using issue sequence prior physical register and register association validity information |
US5764970A (en) * | 1995-11-20 | 1998-06-09 | International Business Machines Corporation | Method and apparatus for supporting speculative branch and link/branch on count instructions |
US6009509A (en) * | 1997-10-08 | 1999-12-28 | International Business Machines Corporation | Method and system for the temporary designation and utilization of a plurality of physical registers as a stack |
US6094716A (en) * | 1998-07-14 | 2000-07-25 | Advanced Micro Devices, Inc. | Register renaming in which moves are accomplished by swapping rename tags |
KR100628573B1 (ko) * | 2004-09-08 | 2006-09-26 | 삼성전자주식회사 | 조건부실행명령어의 비순차적 수행이 가능한 하드웨어장치 및 그 수행방법 |
US7793086B2 (en) * | 2007-09-10 | 2010-09-07 | International Business Machines Corporation | Link stack misprediction resolution |
US8078854B2 (en) * | 2008-12-12 | 2011-12-13 | Oracle America, Inc. | Using register rename maps to facilitate precise exception semantics |
US8423751B2 (en) * | 2009-03-04 | 2013-04-16 | Via Technologies, Inc. | Microprocessor with fast execution of call and return instructions |
US10338928B2 (en) * | 2011-05-20 | 2019-07-02 | Oracle International Corporation | Utilizing a stack head register with a call return stack for each instruction fetch |
US9354886B2 (en) * | 2011-11-28 | 2016-05-31 | Apple Inc. | Maintaining the integrity of an execution return address stack |
US9946549B2 (en) | 2015-03-04 | 2018-04-17 | Qualcomm Incorporated | Register renaming in block-based instruction set architecture |
CN106406814B (zh) * | 2016-09-30 | 2019-06-14 | 上海兆芯集成电路有限公司 | 处理器和将架构指令转译成微指令的方法 |
-
2018
- 2018-01-11 US US15/868,497 patent/US20180203703A1/en not_active Abandoned
- 2018-01-12 WO PCT/US2018/013480 patent/WO2018132652A1/en unknown
- 2018-01-12 EP EP18738868.1A patent/EP3568755A4/en not_active Withdrawn
- 2018-01-12 CN CN201880006336.5A patent/CN110268384A/zh active Pending
- 2018-01-12 KR KR1020197023272A patent/KR102521929B1/ko active IP Right Grant
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070061555A1 (en) * | 2005-09-15 | 2007-03-15 | St Clair Michael | Call return tracking technique |
CN105144084A (zh) * | 2013-03-15 | 2015-12-09 | 高通股份有限公司 | 提高处理器中返回分支指令的执行速度的方法 |
CN104793920A (zh) * | 2014-01-17 | 2015-07-22 | 想象力科技有限公司 | 堆栈指针值预测 |
CN104794067A (zh) * | 2014-01-17 | 2015-07-22 | 想象力科技有限公司 | 堆栈存储的变量值预测 |
US20160314075A1 (en) * | 2015-04-24 | 2016-10-27 | Optimum Semiconductor Technologies, Inc. | Computer processor that implements pre-translation of virtual addresses with target registers |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116339830A (zh) * | 2023-05-26 | 2023-06-27 | 北京开源芯片研究院 | 一种寄存器管理方法、装置、电子设备及可读存储介质 |
CN116339830B (zh) * | 2023-05-26 | 2023-08-15 | 北京开源芯片研究院 | 一种寄存器管理方法、装置、电子设备及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
KR102521929B1 (ko) | 2023-04-13 |
KR20190107691A (ko) | 2019-09-20 |
EP3568755A1 (en) | 2019-11-20 |
WO2018132652A1 (en) | 2018-07-19 |
EP3568755A4 (en) | 2020-08-26 |
US20180203703A1 (en) | 2018-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9448936B2 (en) | Concurrent store and load operations | |
CN101449237B (zh) | 快速和廉价的存储-加载冲突调度和转送机制 | |
US7024545B1 (en) | Hybrid branch prediction device with two levels of branch prediction cache | |
US9146744B2 (en) | Store queue having restricted and unrestricted entries | |
KR20180038456A (ko) | 명령 피연산자들에 대한 좁은 산출 값들을 비순차적 프로세서의 레지스터 맵에 직접 저장하는 것 | |
CN104756090B (zh) | 提供扩展的缓存替换状态信息 | |
US7464253B2 (en) | Tracking multiple dependent instructions with instruction queue pointer mapping table linked to a multiple wakeup table by a pointer | |
WO2006028555A2 (en) | Processor with dependence mechanism to predict whether a load is dependent on older store | |
CN108228094A (zh) | 存储器侧高速缓存中通路的伺机增加 | |
CN113490913A (zh) | 具有旁路优化、可变网格架构和融合矢量操作的协处理器 | |
US20070033385A1 (en) | Call return stack way prediction repair | |
CN103513964A (zh) | 循环缓冲器打包 | |
US11163573B2 (en) | Hierarchical metadata predictor with periodic updates | |
US10318172B2 (en) | Cache operation in a multi-threaded processor | |
CN108885551A (zh) | 存储器复制指令、处理器、方法和系统 | |
CN110268384A (zh) | 寄存器重命名、调用返回预测和预取的实现 | |
US10853075B2 (en) | Controlling accesses to a branch prediction unit for sequences of fetch groups | |
US6873184B1 (en) | Circular buffer using grouping for find first function | |
US7080170B1 (en) | Circular buffer using age vectors | |
EP3850480B1 (en) | Controlling accesses to a branch prediction unit for sequences of fetch groups | |
US7783692B1 (en) | Fast flag generation | |
US11740908B2 (en) | Systems and methods for defining a dependency of preceding and succeeding instructions | |
WO2021133469A1 (en) | Controlling accesses to a branch prediction unit for sequences of fetch groups | |
EP0912928A1 (en) | A data address prediction structure utilizing a stride prediction method | |
US20110320782A1 (en) | Program status word dependency handling in an out of order microprocessor design |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190920 |