CN101819523B - 微处理器以及相关指令执行的方法 - Google Patents
微处理器以及相关指令执行的方法 Download PDFInfo
- Publication number
- CN101819523B CN101819523B CN201010126866.9A CN201010126866A CN101819523B CN 101819523 B CN101819523 B CN 101819523B CN 201010126866 A CN201010126866 A CN 201010126866A CN 101819523 B CN101819523 B CN 101819523B
- Authority
- CN
- China
- Prior art keywords
- instruction
- mentioned
- return
- calling
- microcode
- 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
Links
Images
Landscapes
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明提供一种微处理器以及相关指令执行的方法,微处理器包括指令集结构,指令集结构包括呼叫指令类型、返回指令类型及其他指令类型。执行单元用以正确地执行其他指令类型的程序指令。呼叫/返回堆叠具有多个以后进先出方式设置的项目。呼叫/返回堆叠为微处理器的结构状态,其不可被其他指令类型的程序指令所修改,但可被呼叫及返回指令类型的程序指令所修改。微处理器包括提取单元,用以提取程序指令及传送其他指令类型的程序指令至执行单元以被正确地执行。提取单元正确地执行呼叫及返回指令类型的程序指令,而不传送呼叫及返回指令类型的程序指令至执行单元以被正确地执行。本发明需更少的微处理器资源来解析及引退快速呼叫及返回指令。
Description
技术领域
本发明有关于微处理器,特别有关于一管线(pipelined)微处理器中的呼叫以及返回指令的处理。
背景技术
程序通常包含子程序呼叫指令(subroutine call instructions)以及从子程序返回指令(return instruction)。一个呼叫指令会使得一个程序流程从目前的程序或指令序列改变至一个与目前提取及执行的程序不同的一指令序列或程序。一呼叫指令指定(specify)一个呼叫地址或称目的地址,其为子程序的第一个指令的地址。此外,呼叫指令指示处理器储存在呼叫指令之后的下一个指令地址,此地址称为返回地址。一返回指令也会使得一个程序流程改变至一个与目前提取及执行的程序不同的一个指令序列。然而,一个返回指令并没有明确的指定目的地址(target address)。此外,一个返回指令指示微处理器使用最近一个储存的返回地址当做不同指令序列的第一指令的地址,或是一现在返回(now-returning)子程序的地址。上述现在返回子程序中的返回指令使得处理器开始提取在最近一个已执行的呼叫指令的次一指令。
呼叫以及返回指令将更新系统的结构状态(architecturalstate)。例如,于一个传统x86架构中的处理器,一个呼叫指令更新一个结构堆叠指针暂存器以及更新存储器(即:将一个返回地址推入(push)至存储器中的一个堆叠的堆叠指针值上)。一个返回指令亦会更新结构堆叠指针暂存器。
许多传统处理器也预测地(speculatively)执行指令。也就是说,当传统处理器遇到一个条件分支指令,其预测分支指令的结果(即方向以及目的地址),并根据预测结果继续提取以及执行指令。当一个呼叫或返回指令发生在指令的预测路径上,直到处理器不再预测的执行时,处理器才更新关联于呼叫或返回指令的结构状态,亦即直到处理器解析(resolve)完所有在呼叫或返回指令之前的条件分支指令。也就是说,传统的处理器将呼叫或返回指令送至其多个执行单元,并且在执行单元解析完所有在呼叫或返回指令之前被提取且未引退的条件分支指令之后,更新关联于呼叫或返回指令的结构状态。因此,呼叫以及返回指令像其他指令(例如条件分支指令),会通过执行阶段(stage)以及引退(retirement)阶段以被执行以及引退。因此,就时脉周期来说,呼叫或返回指令的延迟与其他指令相同。再者,呼叫或返回指令消耗相当多的资源,例如,执行单元的时间槽(time slot)、暂存器别名表(register alias table,以下简称RAT)项目(entry)、保留站项目或重排序缓冲器项目。
因此,需要一种具有更佳技术的微处理器,以允许程序来呼叫子程序以及从子程序返回。
发明内容
本发明实施例提供一种微处理器,包括一指令集结构,其中包括一呼叫指令类型、一返回指令类型以及其他指令类型。且该微处理器包括一执行单元,其用以正确地执行其他指令类型的程序指令;以及一呼叫/返回堆叠,其具有多个以后进先出方式设置的项目。呼叫/返回堆叠为微处理器的结构状态,其不可被其他指令类型的程序指令所修改,但其可被呼叫以及返回指令类型的程序指令所修改。微处理器也包括一提取单元,用以提取程序指令以及传送其他指令类型的程序指令至执行单元以被正确地执行。提取单元正确地执行呼叫以及返回指令类型的程序指令,而不传送呼叫以及返回指令类型的程序指令至执行单元以被正确地执行。
本发明另一实施例提供一种指令执行的方法,用以立即地执行一微处理器的一提取单元中呼叫以及返回指令类型的程序指令。方法包含由提取单元提取程序指令,其中程序指令包括微处理器的一指令集结构的一呼叫指令类型、一返回指令类型以及其他指令类型。方法包含由提取单元传送其他指令类型的程序指令至微处理器的执行单元以被正确地执行。方法也包含正确地执行呼叫以及返回指令类型的程序指令,而不传送上述呼叫以及返回指令类型的程序指令至执行单元以被正确地执行。其中正确地执行上述呼叫以及返回指令类型的程序指令由提取单元所执行。呼叫以及返回指令类型的程序指令修改一呼叫/返回堆叠,此呼叫/返回堆叠为微处理器的结构状态。其中,呼叫/返回堆叠具有多个个以后进先出方式设置的项目,且其中呼叫/返回堆叠为不可被其他指令类型的程序指令所修改的结构状态。
本发明的其中一个优点在于,由于提取单元(其可为微码单元)可在不将快速呼叫以及返回指令分配至执行管线的情况下,直接执行以及引退快速呼叫以及返回指令,因此,快速呼叫以及返回指令的执行可以比传统呼叫以及返回指令的执行具有更少的延迟。其次,利用提取单元正确的执行快速呼叫以及返回指令,可避免在传统呼叫以及返回指令中,产生的错误预测以及后续更正(correction)所耗费的微处理器资源。本发明的另一个优点为,可使用比传统呼叫以及返回指令所需的更少的微处理器资源来解析以及引退快速呼叫以及返回指令。例如,由于快速呼叫或返回指令并没有被分配至执行管线,因此快速呼叫以及返回指令并不会占用在暂存器别名表、保留站、执行单元或重排序缓冲器中的项目。
附图说明
图1是显示依据本发明施例的一微处理器的区块图。
图2是显示图1中依据本发明的快速呼叫/返回堆叠单元122的区块图。
图3是显示一依据本发明实施例的流程图,显示快速呼叫/返回堆叠单元的初始化流程。
图4是显示依据本发明实施例的图1的提取单元的操作流程图,以处理一个快速呼叫指令。
图5是显示依据本发明实施例的一流程图,用以显示图1的提取单元执行一个快速返回指令的操作。
图6是显示依据本发明实施例的一流程图,用以显示图1的微处理器执行一个条件分支指令的操作。
图7a、图7b与图7c是显示依据本发明实施例的一表格,用以显示图1的微处理器100执行一个程序顺序的操作。
图8是显示依据本发明另一实施例的一微处理器示意图。
图9是显示依据本发明实施例的一流程图,用以显示图8的微处理器的操作,用以处理由微码所实现的一使用者程序,其中使用者程序可包含可由一微码单元所提取以及执行的快速呼叫以及返回指令。
具体实施方式
为使本发明的上述和其他目的、特征、和优点能更明显易懂,下文特举出较佳实施例,并配合所附图式,作详细说明如下。
参见图1,是显示依据本发明的一微处理器100的区块图。微处理器100包括一提取单元(fetch unit)104,其从一指令快取106提取程序指令。一指令指针暂存器112提供一提取地址168至指令快取106。提取单元104从指令快取106的提取地址168上提取指令。提取的程序指令可包含使用者程序指令,例如一个操作系统或应用程序。提取的指令可包含一般指令,其中包含条件分支指令(conditional branch instruction,以下简称CB)。提取的指令也包含依据本发明的快速呼叫以及返回指令。一般指令(normal instruction)为由微处理器100的执行单元138执行以及引退单元(retire unit)144引退的程序指令。相反地,一个快速呼叫或返回指令为一由微处理器100的提取单元104或微码单元128所解析以及引退的程序指令,而非由微处理器100的执行单元138以及引退单元144来处理。
提取单元104也包含一分支预测器118。分支预测器118相应于提取单元104的指令指针暂存器(pointer)112产生一个提取地址168至指令快取106的动作,产生一预测目的地址156至多工器114以及一预测方向158至提取地址控制器126。特别地,分支预测器118依据提取地址168是否指定一个先前包含一条件分支指令的快取列,指示提取地址控制器126预测目的地址156及预测方向158是否为有效(valid)。
于一实施例中,分支预测器118包含一个分支目的快取(未图示)。当提取地址168在分支目的快取中时,分支预测器118产生预测目的地址156至多工器114以及预测方向158至提取地址控制器126。微处理器100利用先前执行过的条件分支指令地址以及解析的目的地址更新分支目的快取。此外,微处理器100依据先前执行过的条件分支指令的已解析方向所得到的方向预测信息更新分支目的快取。
提取单元104从指令快取106中读出程序指令,并传送提取到的程序指令至指令解码器108。指令解码器108解码提取到的指令,并判断每一个提取到的指令应该发送至微处理器100的执行管线或在提取单元104中执行以及引退。此处执行管线可视为于图1所示的提取单元104以及微码单元128之下的管线部份,即多工器132、暂存器别名表134、指令排程器136、执行单元138以及引退单元144。一个条件分支指令为指令解码器108发送至执行单元的一般指令146的例子之一。在发送一个一般指令146至微处理器100的执行单元的同时,指令解码器108也产生一个CB发送指示162至提取单元104的快速呼叫/返回堆叠单元122。CB发送指示162的操作请参见以下的快速呼叫/返回堆叠单元122的描述。
指令解码器108传送一般指令146至一多工器132,此多工器132从来自提取单元104的一般指令146以及来自一个微码单元128的一般指令148之间进行选择。微码单元128提供一般指令148至多工器132,其将详细描述于图8。多工器132传送一般指令146/148至暂存器别名表134。
暂存器别名表134(RAT)决定所有一般指令146/148的运算元相依性。一个在暂存器别名表134中的目前一般指令146/148可具有一或多个相依于先前执行过的一般指令146/148的结果的运算元。暂存器别名表134决定这些运算元相依性之后,转送一般指令146/148至一个指令排程器136。于一条件分支指令146例子中,对一先前指令产生一个用以解析分支条件或条件分支指令146的目的地址的结果,会存在一运算元相依性。
指令排程器136用以排程一般指令146/148以供执行。在指令排程器136发送欲执行的一般指令146/148之前,指令排程器136将等候,一直到要求的运算元为可用(available)。在一条件分支指令146的例子中,在指令排程器136发送条件分支指令146准备执行之前,一个先前一般指令146的结果必须为可用。指令排程器136传送所具有可用运算元的一般指令146/148至微处理器100的多个执行单元138。
执行单元138执行一般指令146/148。对一个条件分支146,执行单元138计算正确的分支方向以及目的地址,接着将计算的正确分支方向与随着条件分支指令146下至执行管线的预测方向158进行比较,并且将计算的正确分支目的地址与伴随条件分支指令146下至执行管线的预测目的地址156进行比较。当上述两预测的值皆正确时,分支预测器118正确地预测分支,且提取单元104在提取条件分支指令146后提取到适当的指令。否则,分支预测器118不正确地预测分支结果,且提取单元104在提取条件分支指令146后提取到错误的指令,以上情形的错误预测必须要被更正。执行单元138传送所有已执行的一般指令146/148其包含条件分支指令错误预测信息的结果至一引退单元144。
引退单元144架构性地位于执行管线的末端,用以写回执行结果至微处理器100的结构暂存器以及引退一般指令146/148。微处理器100的执行管线包含多工器132、暂存器别名表134、指令排程器136、执行单元138以及引退单元144。在条件分支指令146的例子中,引退单元144产生一个CB错误预测指示(CBmispredicted indication)178至提取单元104以及微码单元128。当分支预测器118错误预测分支结果时,CB错误预测指示178为真。在这种情况下,引退单元144也会产生一个CB正确目的地址176。其地址为执行单元138解析分支会发生时,条件分支指令146中所指定的分支目的地址,或当执行单元138解析分支不会发生时,条件分支指令146之后的下一个接续地址。错误预测一个条件分支指令146将致使微处理器100从微处理器100的执行管线中刷新(flush)(例如,依照程序顺序)比条件分支指令146更新的所有指令,并开始从引退单元144所产生的CB正确目的地址176中提取指令。
提取单元104中的提取地址控制器126从引退单元144中接收CB错误预测指示178以及CB正确目的地址176。多工器选择信号152控制多工器114以从多个可能的地址中选择其中一个,提取单元104将这些位于指令快取106中的可能地址上提取指令。多工器114将选到的地址载入至指令指针暂存器112。若CB错误预测指示178为真,提取地址控制器126产生多工器选择信号152以选择CB正确目的地址176。若CB错误预测指示178为假,提取地址控制器126预设产生多工器选择信号152以选择下一接续IP地址(next sequential IP address,以下简称NSIP)154,除非分支预测器118预测有一个会发生的分支,或指令解码器108指出遇到一个快速呼叫或返回指令。NSIP 154是由一个递增电路116所产生的提取地址168之后的下一个接续地址。
指令解码器108从指令快取106中提取快速呼叫以及返回指令。指令解码器100分别产生其值为真的一个呼叫指令指示124或一个返回指令指示142至快速呼叫/返回堆叠单元122以及提取地址控制器126。快速呼叫/返回堆叠单元122正确地以及非选择性的执行以及引退在提取单元104里的快速呼叫或返回指令(即不管任何情况,提取单元104绝对不会分配快速呼叫以及返回指令至执行单元138),并且不会将快速呼叫或返回指令转送至微处理器100的执行管线。特别地,快速呼叫/返回堆叠单元122包含并更新相关的结构状态,以如前述执行以及引退快速呼叫或返回指令。因此,本发明的微处理器100,可以比必须被分配至执行管线的一个一般呼叫以及返回指令使用更少时脉周期,并且更快及正确地执行并引退快速呼叫以及返回指令。值得注意的是,此处所描述的快速呼叫以及返回指令的早期执行以及引退,有别于处理器设计领域所熟知的呼叫或返回指令预测。于一个可预测呼叫以及返回指令的传统微处理器中,必须进行预测操作,并发现错误预测后清除不正确的提取到的指令,以及在正确目的地址(即正确的呼叫或返回地址)提取指令。反之,本发明的快速呼叫/返回堆叠单元122永远正确地执行以及解析在提取单元104中的快速呼叫以及返回指令,如此一来不需要使用执行单元138以及引退单元144以正确地执行呼叫以及返回指令,也不需由快速呼叫/返回堆叠单元122更正一个错误预测,因为快速呼叫/返回堆叠单元122不需要预测快速呼叫以及返回指令。
指令解码器108也提供呼叫指令指示124以及返回指令指示142至提取地址控制器126。指令解码器108也提供呼叫地址164至多工器114。快速呼叫/返回堆叠单元122也从指令解码器108接收CB发送指示162以及从引退单元144接收CB错误预测指示178。最后,快速呼叫/返回堆叠单元122提供一个推出的(popped)返回地址166至提取地址控制器126。关于快速呼叫/返回堆叠单元122以及其操作将详细描述于以下的图2以及图7a-图7c的区块图以及图3-图6的流程图。
接着参见图2,是显示图1中依据本发明的快速呼叫/返回堆叠单元122的区块图。快速呼叫/返回堆叠单元122包括多个呼叫/返回堆叠212(call/return stacks,以下简称为CRS 212),如图所示的呼叫/返回堆叠0 212至呼叫/返回堆叠3 212。于一实施例中,快速呼叫/返回堆叠单元122包含4个CRS 212。虽然所有实施例包含多个CRS 212于快速呼叫/返回堆叠单元122中,其它实施例可包含更多或更少于4的CRS 212。
每一CRS 212包含相同多个项目,其中每一个项目用以储存来自一个快速呼叫指令的返回地址,以一后进先出(last infirst out,LIFO)的方式设置。于一实施例中,每一个CRS 212具有8个呼叫/返回堆叠项目(虽然图2只显示6个项目),仅管其他实施例可考虑每一CRS 212中具有更多或更少于8个的项目。一个CRS 212中的项目数为一个设计项目,通过考量可能由一个程序所执行的快速呼叫指令的最大期望数量,以及微处理器100的架构中每个CRS 212所消耗的电力(在没有一个插入的快速返回指令下)。当快速呼叫/返回堆叠单元122执行一呼叫指令时,快速呼叫/返回堆叠单元122将返回指令推入至多个CRS 212中适当的一个,以及当快速呼叫/返回堆叠单元122执行一个快速返回指令时,快速呼叫/返回堆叠单元122从多个CRS 212中的一适当者推出一个返回地址。快速呼叫/返回堆叠单元122包括一个堆叠指针(未图示),其用来指示推入以及推出一个返回地址至每一个CRS 212的项目。
每一CRS 212具有一个指定的对应的呼叫/返回堆叠计数器214(call/return stack counter,以下称为CRS C 214),使得快速呼叫/返回堆叠单元122包含有与CRSC 214相同数目的呼叫/返回堆叠212。当对应的CRS 212为目前的CRS 212时,每个CRSC 214维持一提取单元104分配去执行管线的未解析条件分支指令146的计数值。换句话说,每一个CRSC 214在关联于CRS 212的预测层级中,维持看见的未解析的条件分支指令146的一个计数值。于一实施例中,每一CRSC 214为一个6位计数器并且可计数最多64个未解析条件分支指令。另一实施例中,CRSC 214中可包含更多或更少的位。一个未解析条件分支指令146为尚未被执行单元138解析以及尚未被引退单元144引退的条件分支指令146。亦即,执行单元138尚未决定正确的分支方向以及目的地址,并且引退单元144尚未产生一个真值或假值于图1的CB错误预测指示178上,以供条件分支指令指示是否条件分支指令被正确地或不正确地预测。
快速呼叫/返回堆叠单元122包括一个预测指针(speculativepointer)206以及一个非预测指针(non-speculative pointer)208,均储存一值可用来指向多个CRS 212中的一个CRS 212。预测指针206指向CRS 212中的目前呼叫/返回堆叠,即分别相应于一个快速呼叫或返回指令,推入或推出一个返回地址的CRS 212。非预测指针208指向多个CRS 212中的一个CRS 212,其包含关联于在程序顺序中所有未解析条件分支指令146之前的未引退呼叫指令的返回地址。换句话说,如以下图6的步骤626所讨论,非预测指针208指向CRS 212,其中提取单元104于当一个条件分支指令146被解析为不正确时,提取单元104复制非预测指针208至预测指针206。
快速呼叫/返回堆叠单元122也包含控制逻辑单元204,此控制逻辑单元204控制关于CRS 212、CRSC 214、预测指针206以及非预测指针208的读取、写入、递增操作、递减操作以及清除操作。控制逻辑单元204相应于接收来自图1的指令解码器108的呼叫指令指示124,产生一个推入的返回地址232至由预测指针206所指示的目前CRS 212。推入的返回地址232的值为在呼叫指令地址之后的下一地址,当呼叫指令的地址为图1的提取地址168时,则推入的返回地址232的值为NSIP 154。控制逻辑单元204相应于接收来自图1指令解码器108的返回指令指示142,使得预测指针206所指示的目前CRS 212产生图1的推出的返回地址166至多工器114。控制逻辑单元204也通过读取呼叫/返回堆叠计数器信号228读取每一CRSC 214,并通过增加/清除/减少/选取的呼叫/返回堆叠计数器信号226写入CRSC 214。
控制逻辑单元204通过信号216读取预测指针206,以依据预测指针206的值下达控制指令,并且根据上述控制指令通过信号218写入预测指针206。控制逻辑单元204也通过信号224读取非预测指针208,以依据非预测指针208的值下达控制指令,并且根据上述控制指令通过信号222写入非预测指针208。关于控制指令以及快速呼叫/返回堆叠单元122的详细操作请参见以下图3至图6的流程图以及图7a-图7c的区块图。
CRS 212以及CRSC 214,整体观之,位于关联于快速呼叫以及返回指令的微处理器100的结构状态中,因此,当快速呼叫/返回堆叠单元122相应于提取单元104解码一个快速呼叫或返回指令更新CRS 212时,快速呼叫或返回指令将由提取单元104正确地执行以及引退。CRS 212以及CRSC 214只可间接的由微处理器100指令集架构的快速呼叫以及返回指令所修改,而不可由指令集架构中其它指令所修改。因此,由于快速呼叫以及返回指令由提取单元所执行及引退,故CRS 212以及CRSC 214仅可由提取单元所修改,而不可由其他单元(ex.执行单元)所修改。此为相反于其它传统微处理器,其关联于传统呼叫以及返回指令的结构状态,可被指令集架构中的呼叫以及返回指令以外的指令所修改。例如,于x86架构中,关联于CALL以及RET指令的结构状态为一个结构堆叠指针暂存器以及存储器,其可由指令架构中的其它指令,例如PUSH、POP、ENTER、LEAVE以及MOV指令所修改。此外,指令集架构对包含快速呼叫以及返回指令的程序加入一个限制,使得在执行每一个快速呼叫返回指令前,程序必须已经在先前执行过一个对应的快速呼叫指令。
如前述,CRS 212并不是用来预测快速返回指令的返回地址。因此,CRS 212将不会与处理器设计领域所熟知用以预测返回地址的呼叫/返回堆叠所混淆,例如名称为“METHOD ANDAPPARATUS FOR CORRECTING AN INTERNALCALL/RETURN STACK IN A MICROPROCES SOR THATSPECULATIVELY EXECUTES CALL AND RETURNINSTRUCTION”的美国第6314514号专利所描述的内部呼叫/返回堆叠。美国第6314514号专利所描述的内部呼叫/返回堆叠不是系统结构状态的一部份;相反的,于美国第6314514号专利的系统中是以系统存储器储存返回地址的结构状态,并且内部呼叫/返回堆叠是简单的试图保留一个结构状态的快取版本于系统存储器中。然而,内部呼叫/返回堆叠可能变成与在系统存储器中的结构状态不一致。因此,内部呼叫/返回堆叠所提供的返回地址为一种可能需要更正的预测,导致相当多的时脉周期损失。也就是说,尽管美国第6314514号专利的发明试图保持与系统存储器中的结构堆叠一致,因为非系统结构状态的内部呼叫/返回堆叠的内容可能变成跟系统存储器中的结构堆叠不一致,内部呼叫/返回堆叠所提供的预测的返回地址可能需要更正。相反地,本发明的CRS 212是包含在关联于快速呼叫以及返回指令的一设置在微处理器100中的结构状态。
值得注意的是,本发明的实施例除了考虑此处所描述的快速呼叫以及返回指令之外,且微处理器100的指令以及架构可包含结构状态有别于关联于快速呼叫以及返回指令的结构状态的一般呼叫以及返回指令。于一实施例中,关联于微处理器100的指令及架构的一般呼叫以及返回指令的结构状态,为包含在系统存储器中由一结构堆叠指针暂存器所指向的一个堆叠。此外,提取单元104用于分辨一般呼叫以及返回指令以及快速呼叫以及返回指令。更详细的来说,提取单元104把一般呼叫及返回指令分配至执行管线以执行与引退,但提取单元104本身正确地执行及引退快速呼叫及返回指令。于一实施例中,一般呼叫以及返回指令为x86架构CALL以及RET指令。除非文章中有另外提到,于本发明实施例中,一个呼叫或返回指令分别视为一个快速呼叫或返回指令,而非一个一般呼叫或返回指令。
图3显示一依据本发明实施例的流程图,显示快速呼叫/返回堆叠单元122的初始化流程。流程开始于步骤304。
于步骤304,微处理器100在开机、一个例外情况(exceptioncondition)发生、或快速呼叫/返回堆叠单元122接收一第一个呼叫指令指示124、第一个返回指令指示142或第一个CB发送指示162时,接着执行步骤306。
于步骤306,提取单元104清除预测指针206、非预测指针208、多个CRS212以及多个CRSC214,之后流程结束于步骤306。
参见图4,显示依据本发明实施例的图1的提取单元104的操作的流程图,用以处理一个快速呼叫指令。流程开始于步骤404。
于步骤404,提取单元104在指令指针暂存器112提供提取地址168至指令快取106之后,从指令快取106提取一个快速呼叫指令。接着执行步骤406。
于步骤406,指令解码器108解码被提取的快速呼叫指令,并且产生呼叫指令指示124至快速呼叫/返回堆叠单元122以及提取地址控制器126。指令解码器108也撷取与计算来自解码的呼叫指令的呼叫地址164,并且提供呼叫地址164至多工器114。接着执行步骤408。
于步骤408,提取单元104通过测试呼叫/返回堆叠计数器是否包含一个非零值来判断是否有未解决条件分支指令。若选取的CRSC 214包含一个非零值,则表示有未解析条件分支指令146。若选取的CRSC 214包含一个零值,则表示没有未解析条件分支指令146。流程接着执行至判断步骤412。
于判断步骤412,若有未解析条件分支指令146存在时,则流程执行判断步骤422;否则,流程执行步骤414。
于步骤414,提取单元104将快速呼叫指令的返回地址推入至预测指针206所指的目前CRS 212。快速呼叫/返回堆叠单元122中的控制逻辑单元204读取预测指针206以决定目前CRS212,将推入的返回地址232(其为NSIP 154)写入至对应于从预测指针206所读出的值所对应的CRS 212,并且随着更新目前CRS 212的堆叠指针。于一实施例中,若返回地址的推入动作会造成目前CRS 212的溢位(overflow),微处理器100将产生一个堆叠溢位例外(stack overflow exception)。此例外处理例行程序(exception handler)将目前CRS 212的内容存到存储器,以空出返回地址所需的空间。相反地,若于图5的步骤514中的返回地址的推出动作会造成目前CRS 212的下溢(underflow),微处理器100将产生一个堆叠下溢例外。此例外处理例行程序将从存储器中回存(restore)目前CRS 212的内容。于此实施例中,当一个效能不佳的程序产生一个相对多数的例外时,例外的产生以及例外的处理可能抵销此处所描述的快速呼叫以及返回指令的优点;然而,一般的程序(即:以防止执行多于CRS 212的深度的快速呼叫指令)仍可以从快速呼叫以及返回指令获得好处。流程接着执行步骤416。
于步骤416,提取地址控制器126相应于呼叫指令指示124,经由多工器选择信号152控制多工器114以将呼叫地址164载入指令指针暂存器112,使得下一个指令将在指令快取106的呼叫地址164上被提取。流程接着执行步骤418。
于步骤418,提取单元104引退快速呼叫指令。特别来说,快速呼叫指令不会被分配至执行管线中。流程结束于步骤418。
于判断步骤422,提取单元104判断是否快速呼叫指令为在一条件分支指令146之后所提取的第一个呼叫或返回指令。当指令解码器108分配一个条件分支指令146至执行管线时,指令解码器108产生一值为真的CB发送指示162至快速呼叫/返回堆叠单元122,以通知快速呼叫/返回堆叠单元122,并且当一个条件分支指令被引退时,引退单元144亦会通知快速呼叫/返回堆叠单元122。如此,自CB发送指示162为真后,控制逻辑单元204会持续的追踪被分配的快速呼叫或返回指令的数目。当提取单元104判断快速呼叫指令为在一条件分支指令146之后所提取的第一个呼叫或返回指令时,则预测层级将增加并且流程执行至步骤424;否则,预测层级将不会被增加并且流程执行至步骤414。
于步骤424,当在目前的预测层级中没有任何可用(available)的CRS 212时,提取单元104停止提取指令并且暂停快速呼叫指令的执行,直到有一个CRS 212变成可用。当于步骤428(或于图5的步骤528)增加预测指针206的值将会使得其值与非预测指针208的值相同时,表示在目前的预测层级中没有任何可用的CRS 212。如下面将讨论的,当指令解码器108发送一个条件分支指令146至执行管线之后解码第一个快速呼叫指令(或于图5的步骤526,当一个快速返回指令被解码)时,快速呼叫/返回堆叠单元122于步骤426配置一个新的CRS 212,其使得此新配置的CRS 212不可再被配置。相反地,当一条件分支指令146被解析时,一CRS 212可能变成可被配置。特别地,当一条件分支指令被错误预测时,因为预测指针206将于以下所描述的图6中的步骤626中被更新,一或多个CRS 212可能变成可用。此外,当一条件分支指令被解析为正确地预测时,当其他条件也满足时,因为非预测指针208将于以下所描述的图6中的步骤624中被更新,一CRS 212变成可用的。流程接着执行至步骤428。
于步骤426,提取单元104配置一个新的CRS 212,复制目前CRS 212的内容至新配置的CRS 212中,其中包含了堆叠中的项目,并且清除新的CRSC 214。特别地,于目前CRS 212中的返回地址被复制至新配置的CRS 212中。流程接着执行至步骤428。
于步骤428,提取单元104递增预测指针206的值以指向新配置的CRS 212。当提取单元104增加预测指针206的值时,预测层级将增加。提取单元104以于一包裹(wrapping)方式递增预测指针206,使得CRS 212以环状队列(circular queue)设置。也就是说,例如当CRS 212的数目为4、当预测指针206的目前值为3、当控制逻辑单元204增加预测指针206时,新的值将为零。控制逻辑单元204执行一类似的包裹(wrapping)方式递增操作,如图6中于步骤624中的非预测指针208所示。流程接着执行至步骤432。
于步骤432,控制逻辑单元204将返回地址232(其为NSIP154)推入至目前CRS 212,亦即于步骤426中新配置的CRS 212。流程接着执行至步骤416。
图5显示依据本发明实施例的一流程图,用以显示图1的提取单元104执行一个快速返回指令的操作。流程开始于步骤504。
于步骤504,提取单元104在指令指针暂存器112提供提取地址168至指令快取106之后,从指令快取106提取一个快速返回指令。流程接着执行至步骤506。
于步骤506,指令解码器108解码提取到的快速返回指令,并且产生返回指令指示142至快速呼叫/返回堆叠单元122以及提取地址控制器126。流程接着执行至步骤508。
于步骤508,提取单元104通过测试目前CRSC 214是否为非零值,判断是否有未解析条件分支指令146。如果选取的CRSC214包含了一个非零值,则表示有未解析分支条件指令146。如果选取的CRSC 214包含了一个零值,则表示没有未解析分支条件指令146。流程接着执行至判断步骤512。
于判断步骤512,当有未解析条件分支指令146存在时,则流程执行判断步骤522;否则,流程执行步骤514。
于步骤514,提取单元104将从预测指针206所指的目前CRS212中推出返回地址。快速呼叫/返回堆叠单元122中的控制逻辑单元204读取预测指针206以决定目前CRS 212,更新目前CRS212的堆叠指针,并且从对应于预测指针206的目前堆叠指针读出的值的CRS 212来读出返回地址166。流程接着执行步骤516。
于步骤516,相应于返回指令指示142,提取地址控制器126经由多工器选择信号152控制多工器114以将推出的返回地址166载入指令指针暂存器112,使得下一个指令将在指令快取106上的推出的返回地址166提取。流程接着执行步骤518。
于步骤518,提取单元104引退快速返回指令。特别来说,快速返回指令不会被分配至执行管线中。流程结束于步骤518。
于判断步骤522,提取单元104判断是否快速返回指令为在一条件分支指令146之后所提取的第一个呼叫或返回指令。当返回指令为自上一个CB发送指示162后的第一个被分配的快速呼叫或返回指令时,则预测层级将增加并且流程执行至步骤524;否则,预测层级将不会被增加并且流程执行至步骤514。
于步骤524,当在目前的预测层级中没有任何可用的CRS212时,提取单元104停止提取指令并且暂停快速返回指令的执行,直到有一个CRS 212变成可用。流程接着执行步骤526。
于步骤526,提取单元104配置一个新的CRS 212,复制目前CRS 212的内容至新配置的CRS 212中,并清除新的CRSC214。特别地,于目前CRS 212中的返回地址复制至新配置的CRS212中。流程接着执行至步骤528。
于步骤528,提取单元104递增预测指针206以指向新配置的CRS 212。流程接着执行至步骤532。
于步骤532,控制逻辑单元204从新配置的CRS 212推出返回地址166。流程接着执行至步骤516。
图6显示依据本发明实施例的一流程图,其用以显示图1的微处理器100执行一个条件分支指令的操作。流程开始于步骤604。
于步骤604,提取单元104在指令指针暂存器112提供提取地址168至指令快取106之后,从指令快取106提取一个条件分支指令。流程接着执行至步骤606。
于步骤606,指令解码器108解码提取到的条件分支指令,并且产生一个真值在CB发送指示162。快速呼叫/返回堆叠单元122对应地增加由预测指针206所指向CRS 212对应的CRSC 214的值,亦即,目前CRSC 214。每一个CRSC 214储存其对应的CRS 212的未解析条件分支指令146的数目。流程接着执行至步骤608。
于步骤608,提取单元104依据预测方向158是否会发生,发送条件分支指令至执行管线并且从预测目的地址156或NSIP154中提取下一个指令。流程接着执行至步骤612。
于步骤612,执行管线执行以及引退条件分支指令146。执行管线包含多工器132、RAT 134、排程器136、执行单元138以及引退单元144。流程接着执行至步骤614。
于步骤614,引退单元144通过CB正确目的地址176通知提取单元104条件分支指令146已引退、正确分支目的地址、以及是否通过CB错误预测指示178所预测的分支为错误地预测。流程接着执行至判断步骤616。
于判断步骤616,提取单元104依据CB错误预测指示178来判断应该执行哪一种操作。当CB错误预测指示178为伪时,则分支被正确地预测,并且流程接着执行至步骤618。当CB错误预测指示178为真时,则分支被不正确地预测,并且流程接着执行至步骤626。
于步骤618,因为分支预测器118正确地预测到条件分支指令146将被引退,提取单元104减少非预测指针208所指的CRSC214的值。流程接着执行至判断步骤622。
于判断步骤622,提取单元104判断是否于步骤618所减少的CRSC 214包含一个零值。一个在CRSC 214中的零值表示没有关联于非预测指针208所指的CRS 212的未解析条件分支指令146。当CRSC 214为零时,流程接着执行至步骤624;否则,流程结束于步骤622。
于步骤624,提取单元104递增非预测指针208的值,使其指向在CRS 212的环状队列中的下一个CRS 212。提取单元104如前述步骤426中所描述的以一个包裹方式递增非预测指针208的值。流程结束于步骤624。
于步骤626,由于侦测到一个条件分支指令的错误预测发生并且必须被更正,提取单元104复制非预测指针208的值至预测指针206。复制非预测指针208的值至预测指针206的操作使得由非预测指针208所指向的CRS 212变为目前的CRS 212。流程接着执行至步骤628。
于步骤628,微处理器100刷新执行管线。错误预测的条件分支指令是将被引退亦即表示其为微处理器100中最老的指令。刷新执行管线将清除所有来自于微处理器100且在其程序执行顺序中比错误预测以及目前引退的条件分支指令146还新的指令。此行为是必要的,因为分支预测器118错误地预测条件分支指令,使得提取单元104从不正确的路径提取指令。流程接着执行至步骤632。
于步骤632,因为步骤628中的管线刷新操作使得微处理器100中没有任何未解析的条件分支指令,提取单元104清除目前CRSC 214。流程接着执行至步骤634。
于步骤634,提取单元104相应于其值为真的CB错误预测指示178,将CB正确目的地址176载入至指令指针暂存器112,使得提取单元104从CB正确目的地址176中提取下一指令。流程结束于步骤634。
本发明的图4-图6所描述的方法描述提取单元104如何操作,以便于未解析条件分支指令146出现时,正确地执行快速呼叫以及返回指令。当预测层级增加时,提取单元104配置一新的CRS 212,当预测层级减少时,提取单元104解除一或多个CRS212的配置。因此,适当返回地址依据执行管线如何解析条件分支指令146,对应于提取单元104如何预测条件分支指令146而被储存。当一正确预测到的条件分支指令引退时,快速呼叫/返回堆叠单元122将减少被非预测指针208所指向的CRSC 214的值(参见图6的步骤618)。若已经没有任何未解析条件分支指令146在目前的预测层级中,则目前CRS 212为非预测的,并且快速呼叫/返回堆叠单元122递增非预测指针208的值,以指向在下一个CRS 212上(如图6所示的步骤624)。当一错误预测到的条件分支指令引退时,由于没有任何未解析的条件分支指令146,快速呼叫/返回堆叠单元122将使得由非预测CRS 212所指向CRS 212变成目前CRS 212,刷新管线并清除目前CRSC 214(参见图6的步骤626-632)。
图7a显示依据本发明实施例的一表格,用以显示图1的微处理器100执行一个第一程序顺序的操作。第一程序顺序紧接在图3所示的初始化步骤之后。图7a-图7c所显示的例子使用四个CRSC 214,标示为c0至c3。堆叠深度表示在目前操作完成之后,在目前CRS 212上的返回地址数目。指针的值为在目前操作完成之后,非预测指针208以及预测指针206的内容。指令指针的值为在目前操作完成之后,在指令指针暂存器112的内容。每一指令的大小为四个位组并且地址以十六进位表示。虽然指令序列极可能包括许多其他非快速呼叫/返回指令以及非条件分支指令,为了简化说明,本实施例中只显示主要包含快速呼叫/返回指令以及条件分支指令的例子。
于图7a的第一步骤,微处理器100被初始化。初始化操作使得微处理器100清除所有CRS 212以及CRSC 214,连同预测指针206以及非预测指针208。
于图7a的第二步骤,提取单元104从一个地址为0x100的提取地址168中提取一初始指令。
于图7a的第三步骤,提取单元104提取一个快速呼叫指令(从地址0x104,在第二步骤的初始指令地址之后的下一个接续IP地址(NSIP)154)。呼叫指令指定跳跃(jump)至地址0x300的指令,于地址0x300,提取单元104提取一新的指令。指令解码器108产生呼叫指令指示124至快速呼叫/返回堆叠单元122。快速呼叫/返回堆叠单元122产生推入的返回地址232,其将值为0x108的地址值(在呼叫指令指示124之后的下一接续地址)推入至目前CRS 212(CRS 0),并且将目前CRS 212(CRS 0)的堆叠深度增加为1。
于图7a的第四步骤,提取单元104从地址0x300中提取一条件分支指令146。条件分支指令146指定一值为0xC80的目的地址。于此实施例中,假设分支预测器118预测分支会发生。分支预测器118产生一个值为0xC80的预测目的地址156以及一预测方向158指示为分支会发生。多工器114选择值为0xC80的预测目的地址156并将预测目的地址156载入至指令指针暂存器112。指令解码器108发送条件分支指令146至执行管线,并产生CB发送指示162至快速呼叫/返回堆叠单元122,其使得快速呼叫/返回堆叠单元122将目前CRSC 214(c0)的值增加为1。
于图7a的第五步骤,提取单元104从地址0xC80提取一快速返回地址,地址0xC80其为第四步骤中的条件分支指令的预测目的地址156。指令解码器108产生一真值在返回指令指示142至快速呼叫/返回堆叠单元122。因为此为提取单元104在一条件分支指令146之后所提取的第一个呼叫或返回指令,提取单元104配置一新的CRS 212(CRS 1)并复制目前CRS 212(CRS 0)的内容至新的CRS 212(CRS 1),清除新的CRSC 214(c1),并增加预测指针206至1,致使CRS 1变成目前CRS 212。快速呼叫/返回堆叠单元122从新的CRS 212(CRS 1)中读取推出的返回地址166。多工器114选择值为0x108的推出的返回地址166,并且将选取的地址载入至指令指针暂存器112。因为返回指令指示142推出在新的CRS 212(CRS 1)上的唯一返回地址(0x108),堆叠深度返回至零。
于图7a的第六步骤,图7a的第四步骤中的条件分支指令146被执行以及引退,其中分支正确地解析为不会发生。然而,因为预测分支方向(会发生)并不符合正确地解析的分支方向(不会发生),此为一分支错误预测。引退单元144产生一值为真的CB错误预测指示178以及CB正确目的地址176至提取单元104。依据图6的步骤626所示,提取单元104将非预测指针208的值复制至预测指针206。如此,使得CRS 0变为目前CRS 212。因此,预测指针206以及非预测指针208均具有一个0的值。接着,如图6的步骤632所示,提取单元104清除CRSC 214(c0)。最后,如图6的步骤628以及634所示,微处理器100刷新执行管线并且将CB正确目的地址176(0x304)载入至指令指针暂存器112。
图7b显示依据本发明实施例的一表格,用以显示一个第二程序顺序的操作。第二程序顺序由图7a的结束之处开始执行,因此CRS 212、CRSC 214、堆叠的计数值、预测指针206以及非预测指针208与图7a的最后一个步骤相同。
于图7b的第一步骤,指令指针暂存器112产生一个地址值为0x220的程序顺序提取地址168。
于图7b的第二步骤,提取单元104从一个地址值为0x220的提取地址168中提取一快速呼叫指令。呼叫指令指定一呼叫地址值为0x600,其中提取单元104于此提取一新的指令序列。指令解码器108产生一真值在呼叫指令指示124至快速呼叫/返回堆叠单元122。快速呼叫/返回堆叠单元122产生推入返回地址(0x224),为在呼叫指令之后的下一个接续地址,至目前CRS 212(CRS 0)。目前CRS 212的堆叠深度为1。
于图7b的第三步骤,提取单元104从值为0x600的提取地址168提取一个非条件分支指令的一般指令146。指令解码器108发送此一般指令146至执行管线,且提取单元104增加指令指针暂存器112的值。
于图7b的第四步骤,提取单元104从值为0x604的提取地址168提取一个快速呼叫指令。呼叫指令指定一呼叫地址值为0x700,其中提取单元104将于此提取一新的指令序列。指令解码器108产生一真值在呼叫指令指示124至快速呼叫/返回堆叠单元122。快速呼叫/返回堆叠单元122产生推入的返回地址232至目前CRS 212(CRS 0),其为在呼叫指令指示124之后的下一个接续地址的返回地址,该推入的返回地址232地址值为0x608。目前CRS 212的堆叠深度为2。
于图7b的第五步骤,提取单元104从值为0x700的提取地址168提取一个非条件分支指令的一般指令146。指令解码器108发送此一般指令146至执行管线,并且提取单元104增加指令指针暂存器112的值。
于图7b的第六步骤,提取单元104从值为0x704的提取地址168提取一个非条件分支指令的一般指令146。指令解码器108发送此一般指令146至执行管线,并且提取单元104增加指令指针暂存器112的值。
于图7b的第七步骤,提取单元104从地址0x708中提取到一个条件分支指令,此条件分支指令的目的地址值为0xD80。于此实施例中,假设分支预测器118预测分支不会发生。分支预测器118产生一个预测方向158指示为分支不会发生,并且递增电路116产生NSIP 154。多工器114将值为0x70C的NSIP 154载入至指令指针暂存器112。指令解码器108发送条件分支指令146至执行管线,并产生一真值在CB发送指示162至快速呼叫/返回堆叠单元122,其使得快速呼叫/返回堆叠单元122将目前CRSC214(c0)的值增加为1。
于图7b的第八步骤,提取单元104从地址0x70C提取一快速返回地址。指令解码器108产生一真值在返回指令指示142至快速呼叫/返回堆叠单元122。因为此为提取单元104在一条件分支指令146之后所提取的第一个呼叫或返回指令,提取单元104复制目前CRS 212(CRS 0)的内容至一新的CRS 212(CRS 1),清除新的CRSC 214(c1),并增加预测指针206至1。快速呼叫/返回堆叠单元122从新的CRS 212(CRS 1)中读取推出的返回地址166,并产生一真值在返回指令指示142至提取地址控制器126。多工器114选择推出的返回地址166,并且由图7b的第四步骤的返回地址0x608中提取下一指令。因为图7b的第二步骤的返回地址0x224仍在CRS 212中,堆叠深度返回至1。
于图7b的第九步骤,图7b的第七步骤中的条件分支指令146被执行以及引退,其中分支正确地解析为不会发生。由于不会发生预测分支方向158指示符合正确地的分支解析结果(不会发生),因此此为一正确的分支预测。引退单元144产生一伪CB错误预测指示178以及CB正确目的地址176至提取单元104。依据图6的步骤618所示,提取单元104减少非预测指针208所指向的CRS 212对应的CRS C 214的值(c0)。接着,如图6的步骤622所示,提取单元104检查非预测CRSC 214是否为零。于此例中,非预测CRSC 214为c0,其具有一个0的值。因此,如图6的步骤624所示,提取单元104将非预测指针208增加至1。
于图7b的第十步骤,提取单元104从地址0x60C提取一快速返回地址。指令解码器108产生一真值在返回指令指示142至快速呼叫/返回堆叠单元122。快速呼叫/返回堆叠单元122从目前CRS 212(CRS 1)中读取推出的返回地址166(0x224),并产生一真值在返回指令指示142至提取地址控制器126。多工器114选择推出的返回地址166,且提取单元104由图7b的第二步骤的返回地址0x224中提取下一指令。因为此并非提取单元104在提取一条件分支指令146之后所提取的第一个呼叫或返回指令,预测指针206并未被影响。因为目前CRS 212中已经没有任何返回地址,堆叠深度返回至0。
图7c显示依据本发明实施例的一表格,用以显示一个第三程序顺序的操作。第三程序顺序由图7b的结束之处开始执行,因此CRS 212、CRSC 214、堆叠的计数值、预测指针206以及非预测指针208与图7b的最后一个步骤相同。
于图7c的第一步骤,指令指针暂存器112产生一个地址值为0x540的提取地址168。
于图7c的第二步骤,提取单元104从一个地址值为0x540的提取地址168中提取一快速呼叫指令。呼叫指令指定一呼叫地址值为0x580,其中提取单元104于此提取一新的指令序列。指令解码器108产生一真值在呼叫指令指示124至快速呼叫/返回堆叠单元122。快速呼叫/返回堆叠单元122产生地址值为0x544的推入的返回地址232至目前CRS 212(CRS 1)。目前CRS 212的堆叠深度为1。
于图7c的第三步骤,提取单元104从地址0x580提取一个条件分支指令146。条件分支指令146指定一值为0xE60的目的地址。于此实施例中,假设分支预测器118预测分支不会发生。分支预测器118产生一个预测方向158指示为分支不会发生,并且递增电路116产生NSIP 154。多工器114将值为0x584的NSIP 154载入至指令指针暂存器112。指令解码器108发送条件分支指令146至执行管线,并产生一真值在CB发送指示162至快速呼叫/返回堆叠单元122,其使得快速呼叫/返回堆叠单元122将目前CRSC 214(c1)的值增加为1。
于图7c的第四步骤,提取单元104从地址值为0x584的提取地址168提取一快速呼叫指令。呼叫指令指定一呼叫地址值为0x5D0,其中提取单元104将于此提取下一个指令。指令解码器108产生呼叫指令指示124至快速呼叫/返回堆叠单元122。因为此为提取单元104在提取一条件分支指令146之后所提取的第一个呼叫或返回指令,提取单元104复制目前CRS 212(CRS 1)的内容至一新的CRS 212(CRS 2),清除新的CRSC 214(c2),并增加预测指针206至2。快速呼叫/返回堆叠单元122产生地址值为0x588的返回地址至新的CRS 212(CRS 2),该返回地址为在呼叫指令之后的下一个接续地址。新的CRS 212(CRS 2)的堆叠深度为2。
于图7c的第五步骤,提取单元104从地址0x5D0提取一快速返回指令。指令解码器108产生一返回指令指示142至快速呼叫/返回堆叠单元122。快速呼叫/返回堆叠单元122从目前CRS 212(CRS 2)中读取推出的返回地址166,并产生一真值在返回指令指示142至提取地址控制器126。多工器114选择推出的返回地址166,并且由图7c的第四步骤的返回地址0x588中提取下一指令。因为此并非提取单元104在提取一条件分支指令146之后所提取的第一个呼叫或返回指令,预测指针206并未被影响。因为图7c的第二步骤的返回地址0x544仍然在CRS 212上,因此堆叠深度返回至1。
于图7c的第六步骤,提取单元104从地址0x588提取一快速返回地址。指令解码器108产生一返回指令指示142至快速呼叫/返回堆叠单元122。快速呼叫/返回堆叠单元122从目前CRS 212(CRS 2)中读取推出的返回地址166,并产生一真值在返回指令指示142至提取地址控制器126。多工器114选择推出的返回地址166,并且提取单元104由图7c的第二步骤的返回地址0x544中提取下一指令。因为此并非提取单元104在提取一条件分支指令146之后所提取的第一个呼叫或返回指令,预测指针206并未被影响。因为目前CRS 212(CRS 2)中已经没有任何返回地址,堆叠深度返回至0。
于图7c的第七步骤,图7c的第三步骤中的条件分支指令146被执行以及引退,其中分支正确地解析为不会发生。由于不会发生预测分支方向158指示符合正确地的分支解析结果(不会发生),因此此为一正确的分支预测。引退单元144产生一伪CB错误预测指示178以及CB正确目的地址176至提取单元104。依据图6的步骤618所示,提取单元104减少非预测指针208所指向的CRS 212对应的CRSC 214的值(c1)。接着,如图6的步骤622所示,提取单元104检查非预测CRSC 214是否为零。于此例中,非预测CRSC 214为c1,其现在具有一个0的值。因此,如图6的步骤624所示,提取单元104将非预测指针208增加至2。
于图7c的第八步骤,微处理器100遇到一个例外情况。如图3所示,提取单元104清除预测指针206、非预测指针208、每一CRS 212以及每一CRSC 214。于此时,快速呼叫/返回堆叠单元122已被初始化,并且例外情况将决定于指令指针暂存器112中的下一个提取地址168。
请参见图8,是显示依据本发明另一实施例的一微处理器800示意图。微处理器800类似于、以及于一些实施例中是相同于图1的微处理器100。图8的实施例显示图1的微码单元128的详细细节。特别地,微码单元128包含多个详细描述于图1中的类似元件,例如提取单元104。特别地,微码单元128包含一快速呼叫/返回堆叠单元822,其是类似于图2中所示的快速呼叫/返回堆叠单元122并且其操作类似于图3至图7a至图7c图描述的步骤,以正确地执行以及引退快速呼叫以及返回指令于混合有条件分支指令的指令串流。图8的快速呼叫/返回堆叠单元822中对应于图2的快速呼叫/返回堆叠单元122。图8的提取单元104类似于图1的提取单元104,并且虽然未图示,图8的微处理器800也包含一指令快取106,其是类似于图1的指令快取106。
于图8的实施例中,微码单元128正确地执行以及引退包含在混合有条件分支指令的微码顺序中的快速呼叫以及返回指令,类似于图1的提取单元104正确地执行以及引退混合有条件分支指令的使用者程序中的快速呼叫以及返回指令。特别地,快速呼叫以及返回指令并不发送至微处理器800的执行管线中,而是由微码单元128正确地执行以及引退。于图8的实施例中,微码单元128从一微码ROM 806中提取微码指令,而非如图1所示的从指令快取106中提取。储存在微码ROM 806中的微码指令序列可包含如同储存于指令快取106中的使用者程序所包含的包含条件分支指令的一般指令。储存在微码ROM 806中的微码指令序列也可包含如同储存于指令快取106中的使用者程序所包含的快速呼叫以及返回指令。类似于图1的提取单元104,微码单元128可发送包含条件分支指令的一般指令148至微处理器800的执行管线。因此,微码单元128如同微处理器800里的一第二提取单元,其执行储存在微码ROM 806中的微码,而非储存于指令快取106中的使用者程序。
依据一实施例,不同于图1的提取单元104,微码单元128并不包含分支预测器(尽管实施例中考虑微码单元128包含一分支预测器的情形)。因此,于图6的步骤608,微码单元128将总是从微码ROM 806的下一接续地址854中提取指令。也就是说,当微码单元128从微码ROM 806中提取到一条件分支指令时,微码单元128将总“预测”条件分支指令的条件分支为不会发生。一递增电路816递增条件分支指令的提取地址868的值,其产生下一接续IP地址(NSIP)854。提取地址控制器826产生多工器选择信号852,以选择来自多工器814的NSIP 854。选取到的地址载入至一指令指针暂存器812,使得提取地址868为NSIP 854。
当一个微码条件分支指令148送至执行单元138时,其可被正确地解析为会发生(taken)或不会发生(not take)。然而,不同于图1的提取单元104,当一条件分支指令正确地解析为会发生时,于所有情况下,一条件分支指令由微码单元128所错误预测。此乃因为,如前述,微码单元128将总“预测”条件分支指令的条件分支为不会发生,并且总是从微码ROM 806的NSIP地址854中提取指令。若执行单元138正确地解析条件分支指令为会发生,引退单元144产生一真值在CB错误预测指示878至微码单元128,连同一个CB正确目的地址876,并且提取地址控制器826产生一多工器选择信号852以致使多工器814来选择CB正确目的地址876。当条件分支指令148被错误预测时,将会使得如同前述图6的步骤626-634所示的包含刷新执行管线的动作发生。
图9显示依据本发明实施例的一流程图,用以显示图8的微处理器800的操作,用以处理由微码所实现的一使用者程序,其中使用者程序可包含可由一微码单元128所提取以及执行的快速呼叫以及返回指令,其中上述微码是专属(private to)于上述微处理器。流程开始于步骤904。
于步骤904,图8中的提取单元104从指令快取106中提取一使用者程序指令。使用者程序以微处理器800的原生(native)指令集所撰写而成,并且为一操作系统、应用程序或任何微处理器800从指令快取106中提取的其他程序。流程接着执行至步骤906。
于步骤906,于提取单元104中的指令解码器108解码使用者程序指令。流程接着执行至步骤908。
于步骤908,于提取单元104中的指令解码器108判断是否使用者程序指令以微码实现。微码单元128提取并执行微码指令序列以实现较复杂及/或不常被执行的使用者程序指令。此外,微码指令序列包含例外处理例行程序。当使用者程序指令非以微码实现时,流程接着执行至步骤912。当使用者程序指令以微码实现时,流程接着执行至步骤916。
于步骤912,于提取单元104中的指令解码器108分配使用者程序指令至执行单元138以被正确地执行。流程接着执行至步骤914。
于步骤914,执行单元138正确地执行以及引退使用者程序指令。特别地,执行单元138通过如前述图6所示的方式决定正确的分支方向以及正确的目的地址,以正确地执行以及引退由微码单元128所分配的条件分支指令。流程结束于步骤914。
于步骤916,于提取单元104中的指令解码器108转换控制权至微码单元128,以实现使用者程序指令。微码单元128储存了可实现使用者程序指令的微码指令序列。流程接着执行至步骤918。
于步骤918,微码单元128从微码ROM 806中提取一微码指令。初始地,微码单元128从提取单元104所指定的一第一微码程序地址中提取微码指令。当微码单元128遇到一个指示微码单元128控制权转换回提取单元104的微码指令,微码单元128将停止微码指令的提取。依照这种方式,微码单元128提取并执行一连串的微码指令,以实现一个使用者程序指令。流程接着执行至步骤922。
于步骤922,微码单元128中的指令解码器808解码从步骤918提取到的微码指令。流程接着执行至判断步骤924。
于步骤924,微码单元128判断是否提取到的微码指令为一快速呼叫或返回指令。利用类似于图1至图7所示的方式,微码单元128执行并引退微码单元128里的快速呼叫或返回指令,并且不传送快速呼叫或返回指令至微处理器800的执行单元138。当提取到的微码指令并非一快速呼叫或返回指令时,则接着执行至步骤926。当提取到的微码指令为一快速呼叫或返回指令时,则接着执行至步骤932。
于步骤926,微码单元128中的指令解码器808传送提取到非快速呼叫或返回指令的微码指令至执行单元138以被正确地执行以及引退。在一实施例中,提取的微码指令为一一般指令148。流程接着执行至步骤928。
于步骤928,执行单元138正确地执行以及引退为一般指令148的微码指令。当一般指令148为一条件分支指令时,执行单元138以及引退单元144如步骤914所描述的执行以及引退条件分支指令。当一般指令148为微码指令序列中的最后一个指令时,微码单元128转换控制权至提取单元104,并且流程结束于步骤928;否则,流程接着执行至步骤918。
于步骤932,微码单元128分别如同图4或图5所示的方式正确地执行以及引退快速呼叫或返回指令。微码单元128里执行以及引退的微码呼叫或返回指令为快速呼叫或返回指令,因为他们不会被发送至执行单元138且不会造成执行管线中的延迟。当快速呼叫或返回指令为微码指令序列中的最后一个指令时,微码单元128转换控制权至提取单元104,并且流程结束于步骤932;否则,流程接着执行至步骤918。
虽然图1-图7以及图8-图9的实施例分开描述,于一设计良好的实施例中,提取单元104以及微码单元128均可执行以及引退快速呼叫以及返回指令。
虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明,本领域技术人员,在不脱离本发明的精神和范围内,当可做些许更动与润饰,因此本发明的保护范围当视前述权利要求书所界定者为准。例如,软件可致能,例如,功能、制造、模型化、模拟、描述及/或测试本发明所述的装置以及方法。上述可通过使用一般程序语言(例如:C、C++)、硬件描述语言(HDL)包括Verilog HDL、VHDL等等来实现。此类软件可以以程序码的型态包含于实体介质,例如任何其他机器可读取(如计算机可读取)储存介质如半导体、软盘、硬盘或光盘片(例如:CD-ROM、DVD-ROM等等),其中,当程序码被机器,如计算机载入且执行时,此机器变成用以实施本发明的装置。本发明的方法与装置也可以以程序码型态通过一些传送介质,如电线或电缆、光纤、或是任何传输型态进行传送,其中,当程序码被机器,如计算机接收、载入且执行时,此机器变成用以实施本发明的装置。当在一般用途处理器实作时,程序码结合处理器提供一操作类似于应用特定逻辑电路的独特装置。本发明所述的装置以及方法可包含于一半导体知识产权核例如一微处理器核心(嵌入于HDL),并转换成集成电路的硬件产品。此外,本发明所述的装置以及方法可包含具有硬件以及软件的组合的实体实施例。因此本发明的保护范围当视前述权利要求书所界定者为准。最后,本领域技术人员可基于本发明所揭露的概念以及特定实施例,在不脱离本发明的精神和范围内,可做些许更动与润饰以达到本发明的相同目的。
附图中符号的简单说明如下:
100:微处理器;104:提取单元;106:指令快取;108:指令解码器;112:指令指针暂存器;114:多工器;116:递增电路;118:分支预测器;122:快速呼叫/返回堆叠单元;124:呼叫指令指示;126:提取地址控制器;128:微码单元;132:多工器;134:暂存器别名表;136:指令排程器;138:执行单元;142:返回指令指示;144:引退单元;146、148:指令;152:多工器选择信号;154:下一接续IP地址(NSIP);156:预测目的地址;158:预测方向;162:CB发送指示;164:呼叫地址;166:推出的返回地址;168:提取地址;176:CB正确目的地址;178:CB错误预测指示;204:控制逻辑单元;206:预测指针;208:非预测指针;212:呼叫/返回堆叠单元(CRS);214:呼叫/返回堆叠计数器(CRSC);222、224、216:信号;226、228:呼叫/返回堆叠计数器信号;232:推入的返回地址;304-306、404-432、504-532、604-634:执行步骤;800:微处理器;806:微码ROM;808:指令解码器;812:指令指针暂存器;814:多工器;816:递增电路;822:快速呼叫/返回堆叠单元;824:呼叫指令指示;826:提取地址控制器;842:返回指令指示;852:多工器选择信号;854:下一接续地址;862:CB发送指示;864:呼叫地址;866:推出的返回地址;868:提取地址;876:CB正确目的地址;878:CB错误预测指示;904-932:执行步骤。
Claims (16)
1.一种微处理器,其特征在于,包括:
一指令快取,用以存储包括一呼叫指令类型、一返回指令类型以及其他指令类型的程序指令;
多个执行单元,用以正确地执行上述其他指令类型的程序指令;
一快速呼叫/返回堆叠单元,其包括多个呼叫/返回堆叠,每个上述呼叫/返回堆叠具有以一后进先出方式设置的多个项目,其中上述呼叫/返回堆叠为上述微处理器的结构状态,其不能被上述其他指令类型的程序指令所修改,其能被上述呼叫指令类型以及上述返回指令类型的程序指令所修改;以及
一提取单元,用以提取多个程序指令以及传送上述其他指令类型的上述程序指令至上述执行单元以被正确地执行,并且上述提取单元用以正确地执行上述呼叫指令类型以及上述返回指令类型的程序指令,而不传送上述呼叫指令类型以及上述返回指令类型的上述程序指令至上述执行单元,其中在执行每一上述返回指令类型的指令之前,必须先执行过上述呼叫指令类型的一对应指令。
2.根据权利要求1所述的微处理器,其特征在于,上述提取单元将相应于上述呼叫指令类型的一返回地址推入至上述呼叫/返回堆叠中,接着在上述呼叫指令类型的上述程序指令所指定的一目的地址上提取一程序指令。
3.根据权利要求1所述的微处理器,其特征在于,上述提取单元将相应于上述返回指令类型的一返回地址从上述呼叫/返回堆叠中推出,接着在上述呼叫/返回堆叠所推出的上述返回地址上提取一程序指令。
4.根据权利要求1所述的微处理器,其特征在于,上述呼叫/返回堆叠能由上述提取单元所修改且不能由上述执行单元所修改。
5.根据权利要求1所述的微处理器,其特征在于,上述呼叫/返回堆叠设置在上述微处理器中。
6.根据权利要求1所述的微处理器,其特征在于,还包括:
一微码ROM,用以存储包括一微码呼叫指令类型、一微码返回指令类型以及微码其他指令类型的程序指令;
一微码单元,耦接至上述执行单元,用以提取上述微码ROM的一微码指令;上述微码单元用以传送上述微码呼叫指令类型、上述微码返回指令类型以及上述微码其他指令类型的上述微码指令以使其被正确地执行;
其中当上述指令快取的上述程序指令为一以微码实现的程序指令,上述提取单元转换控制权至上述微码单元,并且上述微码单元用以正确地执行上述微码呼叫指令类型以及上述微码返回指令类型的程序指令,而不传送上述微码呼叫指令以及上述微码返回指令至上述执行单元。
7.根据权利要求1所述的微处理器,其特征在于,上述呼叫/返回堆叠被设置为一环形队列,其中上述指令快取的上述其他指令类型包含一条件分支指令类型,其中当上述提取单元在发送未被上述执行单元所解析的上述条件分支指令类型的一程序指令之后提取到上述呼叫指令类型以及上述返回指令类型的一程序指令时,上述微处理器配置上述呼叫/返回堆叠的一新呼叫/返回堆叠,并且复制目前呼叫/返回堆叠的内容至上述新呼叫/返回堆叠,以及将上述新呼叫/返回堆叠设置为上述目前呼叫/返回堆叠。
8.根据权利要求7所述的微处理器,其特征在于,当上述微处理器侦测到上述呼叫/返回堆叠中没有任何一个能被配置时,上述提取单元暂停提取程序指令并等候直到上述呼叫/返回堆叠的一个为可用。
9.一种快速执行呼叫以及返回指令类型的程序指令的方法,其特征在于,上述方法包括下列步骤:
由一提取单元提取程序指令,上述程序指令包括一微处理器的一指令快取所存储的一呼叫指令类型、一返回指令类型以及其他指令类型的程序指令,其中在执行每一上述返回指令类型的指令之前,上述程序必须先执行过上述呼叫指令类型的一对应指令;
由上述提取单元传送上述其他指令类型的上述程序指令至上述微处理器的执行单元以被正确地执行;以及
由上述提取单元正确地执行上述呼叫指令类型以及上述返回指令类型的程序指令,而不传送上述呼叫指令类型以及上述返回指令类型的上述程序指令至上述执行单元以被正确地执行,其中上述呼叫指令类型以及上述返回指令类型的程序指令修改一快速呼叫/返回堆叠单元所包括的多个呼叫/返回堆叠,上述呼叫/返回堆叠为上述微处理器的结构状态,其中每个上述呼叫/返回堆叠具有以一后进先出方式设置的多个项目,其中上述呼叫/返回堆叠为不能被上述其他指令类型的程序指令所修改的结构状态。
10.根据权利要求9所述的快速执行呼叫以及返回指令类型的程序指令的方法,其特征在于,还包括:
将相应于一呼叫指令类型的程序指令的一返回地址推入至上述呼叫/返回堆叠中;以及
在上述呼叫指令类型的上述程序指令所指定的一目的地址上提取一程序指令。
11.根据权利要求9所述的快速执行呼叫以及返回指令类型的程序指令的方法,其特征在于,还包括:
由上述提取单元将相应于一返回指令类型的程序指令的一返回地址从上述呼叫/返回堆叠中推出;以及
在上述呼叫/返回堆叠所推出的上述返回地址上提取一程序指令。
12.根据权利要求9所述的快速执行呼叫以及返回指令类型的程序指令的方法,其特征在于,上述呼叫/返回堆叠能由上述提取单元所修改且不能由上述执行单元所修改。
13.根据权利要求9所述的快速执行呼叫以及返回指令类型的程序指令的方法,其特征在于,上述呼叫/返回堆叠设置在上述微处理器中。
14.根据权利要求9所述的快速执行呼叫以及返回指令类型的程序指令的方法,其特征在于,
由一微码单元提取包括一微码ROM的指令的一使用者程序的指令,上述微码ROM存储一微码呼叫指令类型、一微码返回指令类型以及微码其他指令类型的程序指令;以及
由上述微码单元传送上述微码呼叫指令类型、上述微码返回指令类型以及上述微码其他指令类型的上述使用者程序的指令至上述微码单元以使其被正确地执行;
上述指令快取的上述程序指令为一以微码实现的程序指令,上述提取单元转换控制权至上述微码单元,并且上述微码单元用以正确地执行上述微码呼叫指令类型以及上述微码返回指令类型的程序指令,而不传送上述微码呼叫指令类型以及上述微码返回指令类型至上述执行单元。
15.根据权利要求9所述的快速执行呼叫以及返回指令类型的程序指令的方法,其特征在于,上述呼叫/返回堆叠被设置为一环形队列,其中上述指令快取的上述其他指令类型包含一条件分支指令类型,上述方法还包括:
当上述条件分支指令类型的一程序指令未被上述执行单元所解析时,由上述提取单元提取到上述呼叫指令类型或上述返回指令类型的一程序指令;以及
相应于上述提取步骤,配置上述呼叫/返回堆叠的一新呼叫/返回堆叠;
复制目前呼叫/返回堆叠的内容至上述新呼叫/返回堆叠;以及
将上述新呼叫/返回堆叠设置为上述目前呼叫/返回堆叠。
16.根据权利要求15所述的快速执行呼叫以及返回指令类型的程序指令的方法,其特征在于,还包括:
侦测到上述呼叫/返回堆叠中没有任何一个能被配置;以及
暂停提取程序指令并等候直到上述呼叫/返回堆叠的一个为可用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310401305.9A CN103543985B (zh) | 2009-03-04 | 2010-03-04 | 微处理器以及相关指令执行的方法 |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15735109P | 2009-03-04 | 2009-03-04 | |
US61/157,351 | 2009-03-04 | ||
US12/481,199 | 2009-06-09 | ||
US12/481,199 US8423751B2 (en) | 2009-03-04 | 2009-06-09 | Microprocessor with fast execution of call and return instructions |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310401305.9A Division CN103543985B (zh) | 2009-03-04 | 2010-03-04 | 微处理器以及相关指令执行的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101819523A CN101819523A (zh) | 2010-09-01 |
CN101819523B true CN101819523B (zh) | 2014-04-02 |
Family
ID=42654638
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010126866.9A Active CN101819523B (zh) | 2009-03-04 | 2010-03-04 | 微处理器以及相关指令执行的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101819523B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335129B (zh) * | 2014-06-23 | 2019-03-29 | 联想(北京)有限公司 | 信息处理方法及电子设备 |
US10296463B2 (en) * | 2016-01-07 | 2019-05-21 | Samsung Electronics Co., Ltd. | Instruction prefetcher dynamically controlled by readily available prefetcher accuracy |
US20170371669A1 (en) * | 2016-06-24 | 2017-12-28 | Qualcomm Incorporated | Branch target predictor |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1397875A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 双调用/返回堆栈分支预测系统 |
CN101231584A (zh) * | 2007-01-23 | 2008-07-30 | 矽统科技股份有限公司 | 处理系统以及用以处理该处理系统中指令的相关方法 |
US7478228B2 (en) * | 2006-08-31 | 2009-01-13 | Qualcomm Incorporated | Apparatus for generating return address predictions for implicit and explicit subroutine calls |
-
2010
- 2010-03-04 CN CN201010126866.9A patent/CN101819523B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1397875A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 双调用/返回堆栈分支预测系统 |
US7478228B2 (en) * | 2006-08-31 | 2009-01-13 | Qualcomm Incorporated | Apparatus for generating return address predictions for implicit and explicit subroutine calls |
CN101231584A (zh) * | 2007-01-23 | 2008-07-30 | 矽统科技股份有限公司 | 处理系统以及用以处理该处理系统中指令的相关方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101819523A (zh) | 2010-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103543985B (zh) | 微处理器以及相关指令执行的方法 | |
CN101876891B (zh) | 微处理器以及快速执行条件分支指令的方法 | |
CN101876890B (zh) | 管线式微处理器及其执行两种条件分支指令的方法 | |
CN101866280B (zh) | 微处理器及其执行方法 | |
TWI470547B (zh) | 非循序執行微處理器及其操作方法 | |
US7689809B2 (en) | Transparent return to parallel mode by rampoline instruction subsequent to interrupt processing to accommodate slave processor not supported by operating system | |
US8856496B2 (en) | Microprocessor that fuses load-alu-store and JCC macroinstructions | |
US20100169611A1 (en) | Branch misprediction recovery mechanism for microprocessors | |
JPH09185506A (ja) | プロセッサ内で命令を実行する方法およびシステム | |
JP2013122774A (ja) | 同時に予測された分岐命令を解決するための方法および装置 | |
US20090198967A1 (en) | Method and structure for low latency load-tagged pointer instruction for computer microarchitechture | |
TWI506551B (zh) | 一種微處理器及其執行方法與電腦程式產品 | |
CN101819522B (zh) | 微处理器以及相关指令解析的方法 | |
CN101819523B (zh) | 微处理器以及相关指令执行的方法 | |
CN102163139B (zh) | 微处理器融合载入算术/逻辑运算及跳跃宏指令 | |
US5713012A (en) | Microprocessor | |
CN102193775B (zh) | 微处理器融合搬运/算术逻辑运算/条件跳跃指令 | |
AU1490888A (en) | Apparatus and method for synchronization of arithmetic exceptions in parallel pipelined execution units | |
Richardson et al. | Precise exception handling for a self-timed processor | |
CN101324841A (zh) | 用于增强处理单元中的独立加载的执行的方法和系统 | |
REAL | Today’s Menu |
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 |