会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 电脑零配件 / 微处理器 / 微处理器以及快速执行条件分支指令的方法

微处理器以及快速执行条件分支指令的方法

阅读:728发布:2021-02-28

IPRDB可以提供微处理器以及快速执行条件分支指令的方法专利检索,专利查询,专利分析的服务。并且一种微处理器以及快速执行条件分支指令的方法,微处理器具有存储器、第一提取单元、指令解码器、执行单元及第二提取单元。存储器储存非使用者程序的指令以执行微处理器的使用者可见指令集的使用者程序指令,非使用者程序具有条件分支指令。第一提取单元提取使用者程序的指令,使用者程序具有非使用者程序所执行的使用者程序指令。指令解码器解码使用者程序的指令,响应解码非使用者程序所执行的使用者程序指令而储存状态。执行单元执行第一提取单元所提取的使用者程序的指令及非使用者程序的指令中除条件分支指令之外的指令。第二提取单元自存储器提取非使用者程序的指令,并根据状态解析条件分支指令而不将条件分支指令传送到执行单元去解析。,下面是微处理器以及快速执行条件分支指令的方法专利的具体信息内容。

1.一种微处理器,其特征在于,包括:

一存储器,用以储存一非使用者程序的多个指令以执行上述微处理器的一使用者可见指令集的一使用者程序指令,上述非使用者程序包括一快速条件分支指令,上述快速条件分支指令为静态的条件分支指令;

一第一提取单元,用以提取一使用者程序的多个指令,上述使用者程序包括上述非使用者程序所执行的上述使用者程序指令;

一指令解码器,用以解码上述使用者程序的多个指令,并且响应解码上述非使用者程序所执行的上述使用者程序指令而储存一状态;

一执行单元,用以执行上述第一提取单元所提取的上述使用者程序的多个指令,并且用以执行上述非使用者程序的多个指令中除了上述快速条件分支指令之外的指令;以及一第二提取单元,用以自上述存储器提取上述非使用者程序的多个指令,并且用以根据上述状态解析上述快速条件分支指令而不将上述快速条件分支指令传送到上述执行单元去进行解析。

2.根据权利要求1所述的微处理器,其特征在于,上述微处理器保证上述状态在上述第二提取单元解析完上述快速条件分支指令之前都不会改变。

3.根据权利要求1所述的微处理器,其特征在于,上述第二提取单元解析上述快速条件分支指令的步骤还包括:决定上述状态是否满足由上述快速条件分支指令所指定的一条件;

如果满足,则从上述快速条件分支指令所指定的一目标地址提取一指令;

如果不满足,则提取上述快速条件分支指令的下一个指令;以及产生上述快速条件分支指令所指定的上述目标地址。

4.根据权利要求1所述的微处理器,其特征在于,上述状态指定上述非使用者程序所执行的上述使用者程序指令的相关信息。

5.根据权利要求4所述的微处理器,其特征在于,上述相关信息指定以下之一:指定上述非使用者程序所执行的上述使用者程序指令之后的下一个指令的一地址;

指定上述非使用者程序所执行的上述使用者程序指令的一操作码的解码信息;

指定上述非使用者程序所执行的上述使用者程序指令的一运算元尺寸信息;

指定上述非使用者程序所执行的上述使用者程序指令所指定的多个地址的尺寸信息;

指定上述非使用者程序所执行的上述使用者程序指令所指定的地址栏位信息;

指定上述微处理器是否执行多个锁定原子级存储器运作以执行上述非使用者程序所执行的上述使用者程序指令;

指定上述非使用者程序所执行的上述使用者程序指令是否为一非存储器存取指令;以及如果上述非使用者程序所执行的上述使用者程序指令造成一异常,则上述相关信息指定上述微处理器是否复原由上述非使用者程序所执行的上述使用者程序指令所修改的多个暂存器值。

6.一种快速执行条件分支指令的方法,其特征在于,适用于一微处理器,包括:储存一非使用者程序的多个指令于一存储器,以执行上述微处理器的一使用者可见指令集的一使用者程序指令,上述非使用者程序包括一快速条件分支指令,上述快速条件分支指令为静态的条件分支指令;

由上述微处理器的一第一提取单元提取一使用者程序的多个指令,上述使用者程序包括上述非使用者程序所执行的上述使用者程序指令;

解码上述使用者程序的多个指令;

响应解码上述非使用者程序所执行的上述使用者程序指令而储存一状态;

由上述微处理器的一执行单元执行上述第一提取单元所提取的上述使用者程序的多个指令,并且执行上述非使用者程序的多个指令中除了上述快速条件分支指令之外的指令;

由上述微处理器的一第二提取单元进行自上述存储器提取上述非使用者程序的多个指令;以及由上述第二提取单元进行根据上述状态解析上述快速条件分支指令而不将上述快速条件分支指令传送到上述执行单元去进行解析。

7.根据权利要求6所述的快速执行条件分支指令的方法,其特征在于,上述微处理器保证上述状态在上述第二提取单元解析完上述快速条件分支指令之前都不会改变。

8.根据权利要求6所述的快速执行条件分支指令的方法,其特征在于,上述第二提取单元解析上述快速条件分支指令的步骤还包括:决定上述状态是否满足由上述快速条件分支指令所指定的一条件;

如果满足,则从上述快速条件分支指令所指定的一目标地址提取一指令;

如果不满足,则提取上述快速条件分支指令的下一个指令;以及产生上述快速条件分支指令所指定的上述目标地址。

9.根据权利要求6所述的快速执行条件分支指令的方法,其特征在于,上述状态指定上述非使用者程序所执行的上述使用者程序指令的相关信息。

10.根据权利要求9所述的快速执行条件分支指令的方法,其特征在于,上述相关信息指定以下之一:指定上述非使用者程序所执行的上述使用者程序指令之后的下一个指令的一地址;

指定上述非使用者程序所执行的上述使用者程序指令的一操作码的解码信息;

指定上述非使用者程序所执行的上述使用者程序指令的一运算元尺寸信息;

指定上述非使用者程序所执行的上述使用者程序指令所指定的多个地址的尺寸信息;

指定上述非使用者程序所执行的上述使用者程序指令所指定的地址栏位信息;

指定上述微处理器是否执行多个锁定原子级存储器运作以执行上述非使用者程序所执行的上述使用者程序指令;

指定上述非使用者程序所执行的上述使用者程序指令是否为一非存储器存取指令;以及如果上述非使用者程序所执行的上述使用者程序指令造成一异常,则上述相关信息指定上述微处理器是否复原由上述非使用者程序所执行的上述使用者程序指令所修改的多个暂存器值。

说明书全文

微处理器以及快速执行条件分支指令的方法

[0001] 本申请是申请日为2010年1月28日、申请号为201010111901.X、发明名称为“微处理器以及快速执行条件分支指令的方法”的申请的分案申请。

技术领域

[0002] 本发明主要关于微处理器的技术,特别有关于一种执行条件分支指令的微处理器与方法。

背景技术

[0003] 当没有控制流程指令时,微处理器依序地提取指令并执行该指令。换言之,预设动作就是让微处理器先提取一指令,接着再提取下一个循序指令,然后再提取下一个循序指令,以此类推。然而,控制流程指令会命令微处理器脱离此循序提取制度。微处理器在其指令集架构(instruction set architecture)中包括某种型式的条件分支指令,用以指定一分支条件状态(通常是一条件旗标(condition flag)或是一通用暂存器中的数值)及一分支条件(举例而言,位设定、位清除、等于零或大于一定值)。条件分支指令也指定一分支目标地址(branch target address)。微处理器根据分支条件检查分支条件状态,用以决定分支条件状态是否满足被条件分支指令所指定的分支条件。若分支条件状态满足分支条件,微处理器开始提取分支目标地址上的指令,而不是提取下一个循序指令。
[0004] 正如众所皆知的微处理器技术,现今的微处理器包括一具有多个阶段的管线(pipeline),每一阶段执行有关程序指令的不同的工作。在标准的管线式微处理器中,阶段包括指令提取(instruction fetch)、指令解码(instruction decode-)、运算元提取(operand fetch)、执行(execute)以及写回结果(result write-back)这五个阶段。一程序中的条件分支指令会大大地增加微处理器执行程序所需的时间。这是因为在传统上,执行阶段(execute stage)用以分析条件分支指令,即决定分支条件状态是否满足分支条件。其中一个原因是程序中的指令在程序顺序(program order)中的顺序可能会比条件分支指令还要老旧(older),而这些比条件分支指令还要老旧的指令用以更新分支条件状态。因此,在运算元提取阶段可以提取条件分支指令的来源运算元(source operands)之前,微处理器必须等待直到执行单元产生上述比较老旧的指令的结果(这些比较老旧的指令的结果为条件分支指令中用以构成(constitute)分支条件状态的来源运算元),以便发出条件分支指令用以执行。然而,特别是在高度管线化(deeply pipelined)及/或乱序执行(out-of-order execution)微处理器中,微处理器可能已经提取以及处理许多程度不同的下一个循序指令(位于条件分支指令之后),并且在执行单元分析条件分支指令时,这些循序指令在程序顺序中的顺序要比条件分支指令还要新(newer)。若执行单元决定分支条件状态满足分支条件(即代表条件分支指令将会被取用(taken)),微处理器必须清除所有位于条件分支指令之后依序提取的指令,并开始提取分支目标地址上的指令。这大大地增加了微处理器执行程序所需的时间。
[0005] 为了解决此问题,现今的微处理器包括分支预测器(branch predictors)用以预测方向(direction)(即分支条件状态满足分支条件(称为“被取用”),或不满足分支条件(称为“不被取用(not taken)”))。然而,分支预测器可能会误预测(mispredict)方向,在此情况下,因为微处理器必须清除管线中错误提取的指令,并开始提取正确地址上的指令(即根据是否发生正确的方向来决定该正确地址为下一个地址或分支目标地址),所以微处理器需要承担一分支误预测代价(branch misprediction penalty)。再者,这会大大地增加程序执行时间,特别是在程序中具有一些难以准确预测的条件分支指令的情况下。因此,需要一种能够及早正确地分析管线中的条件分支指令的方法,用以置换(override)分支预测器的分支预测信息。举例而言,该方法已揭露于Bose et al.所获得的美国专利第5,805,876号“一种适用于一处理器的方法与系统,用以减少平均分支解析时间及有影响的误预测代价”。然而,Bose et al.所提出的微处理器有一个缺点,就是该微处理器会选择性地(条件性地)提早分析条件分支指令。换言之,该微处理器只在分支指令满足一组特定的条件时,才会提早分析条件分支指令,例如第一个侦测到的条件分支指令设置在一指令缓冲器中的第一可配送位置(dispatchable position)中。
[0006] 因此,需要一种具有一改良技术的微处理器,用以允许程序条件性地分支。

发明内容

[0007] 本发明提供了一种微处理器,包括一存储器、一第一提取单元、一指令解码器、一执行单元以及一第二提取单元。存储器用以储存一非使用者程序的多个指令以执行上述微处理器的一使用者可见指令集的一使用者程序指令,上述非使用者程序包括一快速条件分支指令。第一提取单元用以提取一使用者程序的多个指令,上述使用者程序包括上述非使用者程序所执行的上述使用者程序指令。指令解码器用以解码上述使用者程序的多个指令,并且响应解码上述非使用者程序所执行的上述使用者程序指令而储存一状态。执行单元用以执行上述第一提取单元所提取的上述使用者程序的多个指令,并且用以执行上述非使用者程序的多个指令中除了上述快速条件分支指令之外的指令。第二提取单元用以自上述存储器提取上述非使用者程序的多个指令,并且用以根据上述状态解析上述快速条件分支指令而不将上述快速条件分支指令传送到上述执行单元去进行解析。
[0008] 本发明另外提供了一种快速执行条件分支指令的方法,适用于一微处理器,包括储存一非使用者程序的多个指令于一存储器,以执行上述微处理器的一使用者可见指令集的一使用者程序指令,上述非使用者程序包括一快速条件分支指令;由上述微处理器的一第一提取单元进行提取一使用者程序的多个指令,上述使用者程序包括上述非使用者程序所执行的上述使用者程序指令;解码上述使用者程序的多个指令;响应解码上述非使用者程序所执行的上述使用者程序指令而储存一状态;由上述微处理器的一执行单元执行上述第一提取单元所提取的上述使用者程序的多个指令,并且执行上述非使用者程序的多个指令中除了上述快速条件分支指令之外的指令;由上述微处理器的一第二提取单元进行自上述存储器提取上述非使用者程序的多个指令;以及由上述第二提取单元进行根据上述状态解析上述快速条件分支指令而不将上述快速条件分支指令传送到上述执行单元去进行解析。
[0009] 本发明的一优点在于提取单元不需配送(dispatch)快速条件分支(Fast Conditional Branch,FCB)指令到执行管线即可解析并引退FCB指令,因此使得FCB指令在执行上能够比传统的条件分支指令更快。此外,在程序设计者使用FCB指令的情况下,本发明的提取单元正确地执行FCB指令能够排除传统的条件分支指令容易发生的错误分支预测以及校正。本发明的另一优点在于解析以及引退FCB指令时,FCB指令所占用的微处理器资源比传统的条件分支指令更少,举例来说,因为FCB指令不需被配送至执行管线,所以不会占用暂存器别名表(Register Alias Table,RAT)、预留站(reservation station)、执行单元、或重排缓冲器(ReOrder Buffer,ROB)的空间。

附图说明

[0010] 图1是根据本发明所述的微处理器100的方块图。
[0011] 图2a与图2b是根据本发明所述的微处理器执行条件分支指令的流程图。
[0012] 图3是根据本发明另一实施例所述的微处理器的方块图。
[0013] 图4a与图4b是根据本发明图3所示的微处理器100的运作流程图。
[0014] 图5是根据本发明另一实施例所述的微处理器100的方块图。
[0015] 图6是根据本发明图5所示的微处理器100的运作流程图。
[0016] 图7是根据本发明另一实施例所述的微处理器100的方块图。
[0017] 图8是根据本发明图7所示的微处理器100的运作流程图。
[0018] 图9是根据本发明另一实施例所述的微处理器100的方块图。
[0019] 图10是根据本发明图9所示的微处理器100的运作流程图。

具体实施方式

[0020] 如上所述,关于传统技术的缺点在于其依赖微处理器决定是否可于管线中早些解析一条件分支指令,如果决定的结果为否,则微处理器必须预测该条件分支指令,且如果误预测,则微处理器因为所需进行的校正(即清除(flushing)、自正确的地址提取以及执行)而付出代价(penalty)。本发明的发明人观察到有些时候程序设计者在编写程序时,知道或能够控制相关于一分支条件状态更新的情况,且该分支条件状态将于该程序中被一条件分支指令所使用。特别是,程序设计者所知道的某些特定的分支条件状态在特定的时候是静态的(static)。本发明的发明人即利用此观察在一微处理器的指令集中包括一特别类型的条件分支指令(往后在此说明书中即以快速条件分支指令(FCB指令)称之),用以指示微处理器于管线前期使用静态分支条件状态非选择性地、正确地解析位于提取单元中的该FCB指令,而非传送该FCB指令到执行单元去解析,亦非针对该FCB指令进行预测。在侦测到该FCB指令时,提取单元非选择性地、正确地解析该FCB指令,也就是说,提取单元并未预测该FCB指令以及并未将该FCB指令传送至执行单元去进行解析,而是使用上述静态状态立即正确地解析该FCB指令。所以包含该FCB指令的程序就能够执行得较快。另外,立即正确地解析该FCB指令具有明显的优势,因为其能够避免错误的分支预测以及在一管线式微处理器中所伴随发生的代价。FCB指令在避免错误分支预测的优点在没有分支预测的情况下(例如:低价或/且低功率的微处理器或微控制器,或微处理器中一微码(microcode)单元的微定序器)更为明显,如此后的一实施例所述。
[0021] 在此章节中所述的为管线式微处理器的实施例,程序设计者可在程序中使用FCB指令特殊类别的条件分支指令取代或加上原有的正规条件分支(Normal Conditional Branch,NCB)指令,以改善程序执行时间。相较于NCB指令,FCB指令使程序设计者能够指示微处理器总是正确地解析并引退位于微处理器的提取单元中的该FCB指令,而非将该FCB指令发送至微处理器的执行单元去进行解析与引退,从而节省所需的管线式微处理器的时脉周期。也就是说,FCB指令让程序设计者能够指示微处理器在不需要检查程序中是否有其它比该FCB指令更老旧的指令尚未更新FCB指令的条件状态的情况下,根据该FCB指令的条件状态正确地解析并引退该FCB指令。其中上述微处理器中比上述第一类别条件分支指令或第二类别条件分支指令更老旧的其它指令分别指于上述第一类别条件分支指令或第二类别条件分支指令之前被提取的指令。由于程序设计者在编写程序的时候便知道FCB指令的条件状态并不相依于微处理器中其它未解析指令的结果,所以FCB指令的条件状态总是能够正确地解析并引退提取单元中的FCB指令。然而,对NCB指令来说,这却是无法达到的。特别需要注意的是,此章节的实施例是能够正确地解析并引退位于提取单元中FCB指令的微处理器,其不同于传统微处理器其包括一分支预测器预测位于提取单元中的传统条件分支指令,进一步说明,因为传统微处理器所进行的分支预测可能不正确,使得执行单元无法正确地解析该传统条件分支指令,所以造成提取单元无法引退该传统条件分支指令。相较之下,在本发明所述的实施例中,提取单元总是能够正确地解析FCB指令,所以使得提取单元能够引退该FCB指令。
[0022] 图1是根据本发明所述的微处理器100的方块图。在一实施例中,微处理器100储存使用者程序于一外部存储器(未绘示),使用者程序包括操作系统、应用程序、基本输入输出系统(Basic Input Output System,BIOS)或其它类别的程序,可为程序设计者所编写、转译(translate)或编译成微处理器的原生(native)指令集。指令快取106自外部存储器中提取使用者程序并暂时储存最常被提取的指令。在一实施例中,指令快取106位于微处理器100中,在其它实施例中,指令快取106可位于微处理器100的外部。
[0023] 微处理器100的提取单元104自指令快取106中提取指令,提取单元104包括指令解码器108,用以决定所提取指令的类别,自指令快取106中所提取的指令包括FCB指令以及正规指令,上述正规指令包括NCB指令及其他正规指令。正规指令由微处理器100的执行单元所执行,当微处理器100决定了一条件分支指令(NCB指令或FCB指令)的正确方向(direction)以及正确地址时,便可以正确地解析该条件分支指令,此不同于预测该条件分支指令的另一微处理器,因为该另一微处理器可能发现该预测是不正确的而必须进行校正。
[0024] FCB指令在微处理器100的提取单元104中被正确地解析并引退。微处理器100的多个执行单元138用以执行正规指令,包括NCB指令。微处理器100的引退单元144用以引退正规指令,包括NCB指令。条件分支指令指定(specify)了一分支条件与一分支目标地址,处理器检查一储存的分支条件状态以决定其是否满足由该条件分支指令所指定的一条件,意即,决定该条件分支指令的方向。如果满足该条件,则分支方向为“被取用”,否则,分支方向为“未被取用”;如果该分支方向被取用,则该分支目标地址指定了下一个要执行的指令的地址,反之,如果该分支方向未被取用,则下一个要执行的指令为该FCB指令或该NCB指令之后的下一个指令,关于该FCB指令以及该NCB指令的处理程序将于后续段落中详尽叙述。
[0025] 在一实施例中,指令解码器108包括一指令转译器用以将微处理器100中一宏指令集的宏指令(例如:x86指令集架构)转译为微处理器100中一微指令集架构的微指令。该指令转译器可将微指令转译为一FCB指令、NCB指令或在此章节中所述及的其它指令。
[0026] 指令解码器108决定一提取的指令是否为一FCB指令或NCB指令,如果解码的指令为NCB指令或其它正规指令,则指令解码器108将正规指令146转送(transfer)至多工器132;如果解码的指令为一FCB指令,则指令解码器108将FCB查见指示(seen indication)164的值设为真并将之传送至提取单元104中的FCB方向解析器122,同时,指令解码器108把由该FCB指令所指定的一FCB条件166转送至FCB方向解析器122,举例来说,FCB条件166可为位开启(bit on)、位关闭(bit off)、相等于、小于或大于,且本领域技术人员可知在快速分支条件状态(Fast Branch Conditional State,FBCS)124中的位或栏位也可由FCB条件166所指定。指令解码器108亦把由FCB指令所指定的FCB目标地址162转送至提取单元104中的多工器114。
[0027] FCB方向解析器122解析位于提取单元104中的FCB指令的方向。为响应上述FCB查见指示164、FCB条件166以及FBCS124,FCB方向解析器122产生FCB方向172给提取地址控制器126。如果FBCS124满足FCB条件166,则FCB方向172为真;反之,则FCB方向172为假。提取单元104总是能正确地解析并引退FCB指令,提取单元104并不配送FCB指令到执行单元138与引退单元144,因为提取单元104会自行执行并引退所有的FCB指令。
[0028] 就意义上来说程序设计者保证没有任何未引退的指令要比改变FBCS124的FCB指令更老旧,所以程序设计者通过使用FCB指令而非NCB指令,可以设置(assert)FBCS124或由该FCB指令所指定为分支条件状态的FBCS124的至少一部分,在相关的时框(timeframe)中为静态的。FBCS124可以是微处理器100中许多不同分支条件状态中的其中之一,且因为各种不同的原因而为静态的。在一实施例中,程序设计者可设置FBCS124是静态的,因为根据图5与图6,FBCS124为异常(exception)状态586。在一实施例中,程序设计者可设置FBCS124是静态的,因为根据图7与图8,FBCS124为微码执行指令(Microcode Implemented Instruction,MII)状态786。在一实施例中,程序设计者可设置FBCS124是静态的,因为根据图9与图10,FBCS124由微处理器100指令集架构的一序列化(serializing)指令所写入。
[0029] 在一实施例中,程序设计者可设置FBCS124是静态的,因为FBCS124是仅能由微码只读存储器306中的微码例行程序(routine)所存取(即写入或读取),并且当提取单元读取该状态以解析一位于一微码例行程序中的一FCB指令时,该微码例行程序保证该状态为静态的。其中FBCS124被多个微码例行程序中的多个FCB指令使用,而上述微码例行程序是负责执行微处理器的一指令集架构中分别对应FCB指令的不同类别的指令。该微码例行程序保证该状态为静态的运作细节如下:每个微码例行程序包含一写入该状态的指令,亦包含下一指令以让上述管线于归还控制给使用者程序之前将微处理器100中所有较新的指令清除掉,其中该使用者程序包括由该微码例行程序所执行的指令或由该微码例行程序所处理的异常所产生的指令。在一实施例中,该状态是当微处理器100自一重置条件启动(boot up)时,由该微码例行程序(一个或多个指令)所写入。该状态所指定的值由多重微码例行程序所全域使用(globally used),而非由个别微码例行程序局部使用(locally used)。在另一实施例中,该状态实际上存在于引退单元144中的重排缓冲器。
[0030] 在一实施例中,FBCS124可为微处理器100中的通用暂存器(general purpose register)或个别的位;然而,由于微处理器100执行提取单元104中的FCB指令而且不会确保该FCB指令会接收到任何其它未引退指令更新FBCS124的结果,所以为了保持程序的正确运作,程序设计者必须保证FBCS124对于程序中比该FCB指令更老旧的其它指令是静态的。
[0031] 提取单元104亦包括分支预测器118,用以分别产生一预测目标地址156与一预测方向158给提取单元104的多工器114与提取地址控制器126,以响应提取单元104的指令指针暂存器112产生一提取地址168给指令快取106,特别是,分支预测器118向提取地址控制器126指出,如果提取地址168指定了先前存有一条件分支指令的一快取列(cache line),则预测目标地址156与预测方向158为有效的(valid)。
[0032] 提取单元104的提取地址控制器126产生一多工选择信号152给提取单元104的多工器114选择提取地址168以自指令快取106中提取下一个指令。为响应NCB误预测指示178的值为真,提取地址控制器126产生该多工选择信号152以选择NCB正确目标地址176。除此之外,为响应FCB方向172指示一FCB指令被取用,提取地址控制器126产生该多工选择信号152以选择上述FCB目标地址162。除此之外,为响应预测方向158指示NCB指令被取用,提取地址控制器126产生该多工选择信号152以选择上述预测目标地址156。否则,提取地址控制器126产生该多工选择信号152以选择下一指令指针地址(Next Sequential IP(Instruction Pointer)address,NSIP)154。NSIP154代表指令快取106中在提取地址168之后的下一个地址。地址增量电路(address increment circuit)116每次于指令指针暂存器112产生一提取地址168时都产生该NSIP154。
[0033] 在一实施例中,分支预测器118包括一分支地址快取(未绘示),当提取地址168所指示的地址落于该分支地址快取时,分支预测器118则产生上述预测目标地址156与预测方向158给提取地址控制器126。微处理器100以先前所执行的条件分支指令的地址与解析目标地址去更新该分支地址快取,而且微处理器100以分支预测信息去更新该分支地址快取,其中分支预测信息根据先前所执行的条件分支指令的解析方向所得到。在一实施例中,上述分支预测信息包含预测目标地址156以及预测方向158。在一实施例中,由于提取单元104正确地解析并引退FCB指令,所以微处理器100不会根据所执行的FCB指令去更新该分支地址快取。因为提取单元104总是正确地解析并引退FCB指令,使得微处理器在处理FCB指令时,能够优势地避免造成分支误预测代价;反之如下所述,传统的微处理器在处理NCB指令时可能会造成分支误预测代价。
[0034] 指令指针暂存器112接收并储存由提取单元104的多工器114所选择的地址,指令指针暂存器112提供提取地址168给指令快取106以自指令快取106中提取一快取列。
[0035] 位于提取单元104之外的多工器132自两个来源接收指令并从中选择其一。其中第一个来源是从指令快取106中所提取且由提取单元104所提供的正规指令146,第二个来源是由微处理器100的微码单元128所提供的正规指令148。微码单元128包括多个微码例行程序,举例说明,该微码例行程序可用以执行复杂指令(complex instruction)并处理特定异常状况。经过思忖后,在某些实施例中可不将微码单元128包括在微处理器100中。
[0036] 微处理器100包括一暂存器别名表134,用以决定正规指令146与148的运算元相依性,暂存器别名表134在决定运算元相依性之后,将正规指令146与148转送至微处理器100的一指令排程器136。在一实施例中,微处理器100亦包括一重排缓冲器(未绘示,但在一实施例中位于引退单元144里)用以储存微处理器100中未引退指令的信息,该重排缓冲器确保以程序顺序引退正规指令,即便正规指令可能不以程序顺序执行。暂存器别名表
134于配送正规指令146与148到一保留站(后续将进一步叙述)之前,在重排缓冲器中为每个指令配置(allocate)一空间(entry)。指令排程器136排程正规指令146与148以便将之发送至执行单元138去执行。在一实施例中,微处理器100包括多个保留站(未绘示)用以当作指令队列(queue)储存等待运算元的指令,该指令在等到运算元时便可由指令排程器136将其发送至执行单元138,此普遍在该技术领域中被称为乱序执行(out-of-order execution)微处理器。在一实施例中,微处理器100以乱序执行指令,且指令排程器136使用暂存器别名表134所产生的相依性信息以排程适当的指令执行。
[0037] NCB指令根据正规分支条件状态(Normal Branch Condition State,NBCS)142指定一分支条件。NBCS142可以正规指令的结果去更新,其中该正规指令指在NCB指令之前被提取的指令。因此,指令排程器136等待直到用以更新NBCS142的较老旧指令已经产生结果且执行单元138取得该结果之后,再将NCB指令发送至执行单元138。在一实施例中,上述较老旧指令为微处理器中用以更新NBCS142并且比NCB指令更老旧的其它指令中最新的一个指令。NBCS142可储存于可见于微处理器100架构的暂存器,如通用暂存器以及/或条件码暂存器,举例来说,可为x86的EFLAGS暂存器。
[0038] 微处理器100的执行单元138执行所有的正规指令146与148,包括NCB指令。执行单元138使用NBCS142去执行NCB指令,如果NBCS142满足NCB指令所指定的分支条件,则该分支被取用并且以NCB指令所指定的分支目标地址去提取指令;如果NBCS142不满足NCB指令所指定的分支条件,则该分支不被取用,并且提取单元104或微码单元128分别自指令快取106或微码只读存储器306中位于该NCB指令地址之后的下一个地址去提取指令。
[0039] 在一实施例中,微处理器于上述第一分支条件状态满足上述第一类别条件分支指令所指定的一分支条件时,提取上述第一类别条件分支指令所指定的一目标地址中的指令,以正确地解析上述第一类别条件分支指令;于上述第二分支条件状态满足上述第二类别条件分支指令所指定的一分支条件时,提取上述第二类别条件分支指令所指定的一目标地址中的指令,以正确地解析上述第二类别条件分支指令;并且于上述第一分支条件状态不满足上述第一类别条件分支指令所指定的分支条件及上述第二分支条件状态不满足上述第二类别条件分支指令所指定的分支条件时,提取下一个指令。
[0040] 执行单元138将所有执行后的正规指令,包括NCB指令,转送至引退单元144。引退单元144记录发送至执行单元138的指令以及其对应的执行状态,特别是,引退单元144写入更新NBCS142的正规指令结果174。引退单元144于更新NBCS142的指令已经将正规指令结果174写入到更新NBCS142之后,引退该NCB指令。引退单元144产生一NCB误预测指示178给提取单元104的提取地址控制器126以指示分支预测器118是否误预测该NCB指令。
[0041] 如果NCB指令被误预测,则微处理器100将程序顺序上比该NCB指令较新的所有指令从管线中清除;引退单元144引退该NCB指令;提取地址控制器126产生多工选择信号152以选择由引退单元144所提供的NCB正确目标地址176,其中NCB正确目标地址176先前由执行单元138所解析,且经由多工器114选择后被载入指令指针暂存器112;提取单元104以指令指针暂存器112提供的提取地址168自指令快取106中提取下一个指令。因此,针对NCB指令的处理,微处理器可能造成分支误预测代价,而针对FCB指令的处理则没有此问题。
[0042] 在一实施例中,提取单元104与引退单元144之间的管线阶段数量大约为10,所以提取单元104可正确地执行并引退FCB指令,且比NCB指令必须由执行单元138执行、由引退单元144引退要快上许多时脉周期。此外,在分支预测器118可能误预测一NCB指令的情况下,程序设计者在程序中使用FCB指令将可比使用NCB指令节省更多时脉周期。
[0043] 图2a与图2b是根据本发明所述的微处理器执行条件分支指令的流程图。该流程图所述的微处理器是依据图1中所示的微处理器100,流程从方块202开始。
[0044] 在方块202,提取单元104自指令快取106中提取一条件分支指令,该条件分支指令为一NCB指令或FCB指令。执行单元138执行NCB指令,引退单元144引退NCB指令,而微处理器100的提取单元104执行并引退FCB指令。流程同步往下进行到方块204与232。
[0045] 在方块204,提取单元104中的指令解码器108解码该条件分支指令,流程往下进行到方块206。
[0046] 在方块206,指令解码器108决定从指令快取106中所提取的该条件分支指令是NCB指令或FCB指令,如果是NCB指令,则流程往下进行到方块252;反之,则流程往下进行到方块208。
[0047] 在方块208,指令解码器108将FCB查见指示164与FCB条件166转送至FCB方向解析器122,并且产生FCB目标地址162给图1中的多工器114。FCB条件166向FCB方向解析器122指示由FCB指令所指定的分支条件。如果满足了FCB条件166,则FCB目标地址162是由FCB指令所指定的分支目标地址,而且是指令快取106中被提取的指令的提取地址168。流程往下进行到方块212。
[0048] 在方块212,FCB方向解析器122使用图1中的FBCS124去解析FCB方向172,并且提供FCB方向172给提取单元104中的提取地址控制器126。如果FBCS124满足了FCB条件166,则将FCB方向172解析为被取用;反之,则将FCB方向172解析为未被取用。流程往下进行到决策方块214。
[0049] 在决策方块214,FCB方向解析器122决定FCB条件166是否被满足,如果FCB条件166被满足了,则流程往下进行到方块216;如果FCB条件166没有被满足,则流程往下进行到方块218。
[0050] 在方块216,提取地址控制器126设置多工选择信号152传送至多工器114以挑选FCB目标地址162,这代表了FCB方向172被解析为被取用,并且提取单元104从一提取地址168提取下一个指令,其中提取地址168为该FCB指令所指定的FCB目标地址162。流程往下进行到方块222。
[0051] 在方块218,提取地址控制器126设置多工选择信号152传送至多工器114以挑选NSIP154,这代表了FCB方向172被解析为未被取用,并且提取单元104从一提取地址168提取下一个指令,其中提取地址168即为NSIP154。流程往下进行到方块222。
[0052] 在方块222,将方块216或218中所挑选的地址载入至指令指针暂存器112。流程往下进行到方块224。
[0053] 在方块224,提取单元104从指令指针暂存器112所提供的提取地址168提取下一个指令。如果该FCB指令被取用,则提取地址168是由该FCB指令所指定的FCB目标地址162;如果该FCB指令未被取用,则提取地址168是指令快取106中位于该FCB指令地址之后的下一个地址。流程往下进行到方块226。
[0054] 在方块226,提取单元104引退该FCB指令,而非配送该FCB指令至执行管线,需要注意的是引退单元144引退正规指令,并且提取单元104引退从指令快取106中所提取出的该FCB指令。然后流程结束于方块226。
[0055] 在方块232,分支预测器118根据提取地址168预测一条件分支指令的分支方向。分支预测器118针对NCB指令产生一预测目标地址156与一预测方向158。提取单元104将该预测目标地址156与该预测方向158,连同所提取的NCB指令146一并在管线中往下递送(forward),相较之下,FCB指令在提取单元104中可以完全且正确地被提取、执行以及引退。流程往下进行到决策方块234。
[0056] 在决策方块234,提取地址控制器126检查由分支预测器118所输出的预测方向158,如果预测方向158为被取用,则流程往下进行到方块236;如果预测方向158为未被取用,则流程往下进行到方块238。
[0057] 在方块236,提取单元104中的提取地址控制器126产生多工选择信号152以选择预测目标地址156。流程往下进行到方块242。
[0058] 在方块238,提取单元104中的提取地址控制器126产生多工选择信号152以选择NSIP154。流程往下进行到方块242。
[0059] 在方块242,提取单元104中的指令指针暂存器112载入方块236或238所选择的地址。流程往下进行到方块244。
[0060] 在方块244,提取单元104以提取地址168自指令快取106中提取下一个指令。然后流程结束于方块244。
[0061] 在方块252,提取单元104将NCB指令146转送至指令排程器136,提取单元104中的指令解码器108将NCB指令146输出至多工器132,多工器132选择NCB指令146并将之传送至暂存器别名表134,在此之前,暂存器别名表134先决定NCB指令146的运算元相依性,并且配送NCB指令146至指令排程器136。流程往下进行到方块254。
[0062] 在方块254,指令排程器136等待直到用以更新NBCS142且比该NCB指令146更老旧的所有指令都已将其结果写入至NBCS142之后,再将该NCB指令146发送至执行单元138,如此一来就能确保在执行单元138解析NCB指令146的分支方向之前,NBCS142是稳定且正确的。流程往下进行到方块256。
[0063] 在方块256,指令排程器136排程执行单元138以执行该NCB指令146。流程往下进行到方块258。
[0064] 在方块258,执行单元138使用NBCS142解析该NCB指令146,并且将其结果转送至引退单元144。如果NBCS142满足了该NCB指令146所指定的分支条件,则该分支被解析为被取用;反之,则该分支被解析为未被取用。此外,执行单元138计算NCB正确目标地址176。流程往下进行到方块262。
[0065] 在方块262,引退单元144将方块258中所决定的NCB正确目标地址176转送至提取单元104。如果该NCB指令146的分支为被取用,则NCB正确目标地址176为该NCB指令146所指定的分支目标地址;如果该NCB指令146的分支为未被取用,则NCB正确目标地址
176为该NCB指令146的地址之后的下一个存储器地址。流程往下进行到方块264。
[0066] 在方块264,引退单元144比较NCB正确目标地址176与预测目标地址156,并且比较NCB正确方向与提取单元104所转送的预测方向158。上述比较是为了决定预测目标地址156与预测方向158是否正确。之前在方块232,提取单元104把预测目标地址156与预测方向158,以及所提取的该NCB指令146一并在执行管线中往下递送。流程往下进行到决策方块266。
[0067] 在决策方块266,引退单元144决定NCB正确目标地址176是否与预测目标地址156相符(match),以及NCB正确方向是否与预测方向158相符,如果都相符,则表示分支预测118正确地预测了目标地址与分支方向,且流程往下进行到方块268;反之,则流程往下进行到方块272。
[0068] 在方块268,引退单元144引退NCB指令146。由于分支预测器118正确地预测了该分支并且也从指令快取106中在预测目标地址156取出正确的指令,所以引退单元144不需要执行额外的步骤。流程结束于方块268。
[0069] 在方块272,为响应NCB正确目标地址176与预测目标地址156不相符,或者NCB正确方向与预测方向158不相符,所以引退单元144产生如图1所示的值为真的NCB误预测指示178并将之传送到提取单元104中的提取地址控制器126。流程往下进行到方块274、276以及278。
[0070] 在方块274,微处理器100把在程序顺序上比NCB指令146较新的所有指令从执行管线中清除掉,该清除动作是因为管线中的指令是从不正确的提取地址所提取的,所以管线中的指令都是不合法的,因此需要清除执行管线。流程结束于方块274。
[0071] 在方块276,引退单元144引退NCB指令146。流程结束于方块276。
[0072] 在方块278,提取单元104中的提取地址控制器126产生多工选择信号152以选择NCB正确目标地址176。流程往下进行到方块282。
[0073] 在方块282,指令指针暂存器112载入在方块278中由多工器114所选择的地址,也就是NCB正确目标地址176。流程往下进行到方块284。
[0074] 在方块284,提取单元104以提取地址168从指令快取106中提取下一个指令,其中提取地址168即为储存于指令指针暂存器112中的地址,也就是NCB正确目标地址176。流程结束于方块284。
[0075] 图3是根据本发明另一实施例所述的微处理器的方块图。图3与图1所示的微处理器100大致上类似,然而,在图3中绘示了微码单元128的细节,但并未绘示提取单元104的细节。图3中的微码单元128所包含的许多元件都相似于图1中的提取单元104,且类似编号的元件所执行的功能也是类似的。
[0076] 图3与图1其中一个不同之处在于,微码单元128是从一微码只读存储器306提取微码指令,而不是如图1所示从指令快取106提取指令。微码只读存储器306储存微码例行程序指令用以执行微处理器100处理使用者程序指令所需的动作,因此,储存于微码只读存储器306中的微码例行程序为非使用者程序,因为其并非属于使用者程序的一部份。也就是说,微处理器100的设计者所发展的微码例行程序是储存于微码只读存储器306中,而微处理器100的一般使用者则将其所撰写的使用者程序储存于系统存储器以及/或计算机系统的一非易失性储存介质,例如:硬盘。
[0077] 举例来说,微码例行程序所负责执行的动作之一是异常处理(exception handling),微码只读存储器306包括异常处理例行程序(exception handler)用以处理使用者程序指令所产生的异常,例如:不合法的操作码(opcode)异常、除以零异常、中断以及分页失败(page fault),以上的异常例子用以说明特别相关于微处理器100的微架构的微异常(micro-exception),而非由微处理器100的宏架构所指定的异常。举另一例子,微码例行程序包括用以执行微处理器100的指令集中复杂且不被频繁执行的指令的程序码,诸如:三角函数指令、读取/写入模块特定暂存器(read/write model specific register)指令以及序列化指令(将于图9与图10中进一步说明)等等可能更新控制数值、使微处理器100处于一新的模式或状态,例如:改变分页模式、保护模式、更新描述符表(descriptor table)或将快取列无效化(invalidate)。因此,微码单元128是微处理器100的第二个提取单元,自微码只读存储器306提取并解码微码例行程序指令,并且当提取的是FCB指令时,亦能正确地解析并引退该FCB指令。
[0078] 图3与图1的另一个不同之处在于,微码单元128不包括图1中的分支预测器118,所以在一般正常流程中(意即,未接收到FCB指令、不需修正误预测的NCB指令、未发生异常或警示(trap)微码以执行使用者指令等等于本说明书中提及的状况),微码单元128总是会“预测”一条件分支指令为未被取用,也就是说微码单元128从NSIP154提取指令,而非从例如图1中的分支预测器118所提供的预测目标地址提取指令。然而,经过思忖后,虽然微码单元128可能较小、较不复杂以及较不耗能,但在其它实施例中,微码单元128亦可包括一分支预测器,用以执行与图1中的分支预测器118类似的功能。
[0079] 不过如图1的提取单元104一样,图3中的微码单元128用以提取以及无条件地、正确地解析并引退FCB指令,如以下于第4图中详述。需要注意的是,经过思忖后,在一实施例中,提取单元104和微码单元128两者皆用以提取以及无条件地、正确地解析并引退FCB指令;而在其它实施例中,仅提取单元104和微码单元128的一者用以提取以及无条件地、正确地解析并引退FCB指令。
[0080] 图4是根据本发明图3所示的微处理器100的运作流程图。图4中所示的许多执行步骤与图2类似,然而,图2中由提取单元104所执行的步骤在图4中由微码单元128所执行,另外,如上所述,微码单元128不会执行分支预测,因此,图4并未包括与分支预测相关的运作步骤。流程开始于方块402。
[0081] 在方块402,微码单元128自微码只读存储器306中提取一条件分支指令,该条件分支指令为一NCB指令或FCB指令,执行单元138执行NCB指令,而引退单元144引退NCB指令,微处理器100中的微码单元128则执行并引退从微码只读存储器306所提取的FCB指令。流程往下进行到方块404。
[0082] 在方块404,微码单元128中的指令解码器108解码该条件分支指令。流程往下进行到方块406。
[0083] 在方块406,指令解码器108决定自微码只读存储器306所提取的该条件分支指令为一NCB指令或FCB指令,如果是FCB指令,则流程往下进行到方块408;如果是NCB指令,则流程往下进行到方块452。
[0084] 在方块408,指令解码器108将FCB查见指示164以及FCB条件166转送至FCB方向解析器122,并且产生FCB目标地址162给图3中的多工器114。FCB条件166向FCB方向解析器122指示由FCB指令所指定的分支条件。如果满足了FCB条件166,则FCB目标地址162为FCB指令所指定的分支目标地址,并且是上述从微码只读存储器306提取指令所根据的提取地址168。流程往下进行到方块412。
[0085] 在方块412,FCB方向解析器122使用图3中的FBCS124解析FCB方向172,并且提供FCB方向172给微码单元128中的提取地址控制器126。如果FBCS124满足了FCB条件166,则FCB方向172被解析为被取用;反之,则FCB方向172被解析为未被取用。流程往下进行到方块414。
[0086] 在方块414,FCB方向解析器122决定是否满足了FCB条件166,如果是,则流程往下进行到方块416;如果否,则流程往下进行到方块418。
[0087] 在方块416,提取地址控制器126设置多工选择信号152并传送给多工器114以选择FCB目标地址162,这代表了FCB方向172被解析为被取用,并且微码单元128自一提取地址168提取下一个指令,其中提取地址168指该FCB指令中所指定的FCB目标地址162。流程往下进行到方块422。
[0088] 在方块418,提取地址控制器126设置多工选择信号152并且传送至多工器114以选择NSIP154,这代表了FCB方向172被解析为未被取用,并且微码单元128自一提取地址168提取下一个指令,其中提取地址168指该FCB指令后的NSIP154。流程往下进行到方块
422。
[0089] 在方块422,于方块416或418中所选择的地址被载入至指令指针暂存器112。流程往下进行到方块424。
[0090] 在方块424,微码单元128从指令指针暂存器112所提供的提取地址中提取下一个指令,如果该FCB指令为被取用,则提取地址168为该FCB指令所指定的FCB目标地址162;如果该FCB指令为未被取用,则提取地址168为微码只读存储器306中位于该FCB指令地址之后的下一个地址。流程往下进行到方块426。
[0091] 在方块426,微码单元128引退该FCB指令,而不将之配送至执行管线,值得注意的是,引退单元144引退NCB指令,而且微码单元128引退自微码只读存储器306所提取的该FCB指令。流程结束方块426。
[0092] 在方块452,微码单元128将NCB指令148转送至指令排程器136。微码单元128中的指令解码器108将NCB指令148输出至多工器132以选择微码单元128的指令(即NCB指令148)给暂存器别名表134。事前,暂存器别名表134先决定NCB指令148的运算元相依性,并且将NCB指令148配送至指令排程器136。流程往下进行到方块454。
[0093] 在方块454,指令排程器136等待直到用以更新NBCS142并且比NCB指令148更老旧的所有指令都已将其结果写入NBCS142之后,再将NCB指令148发送至执行单元138,这么一来便能确保在执行单元138解析NCB指令148的分支方向之前,NBCS142是稳定且正确的。流程往下进行到方块456。
[0094] 在方块456,指令排程器136排程执行单元138以执行NCB指令148。流程往下进行到方块458。
[0095] 在方块458,执行单元138使用NBCS142解析NCB指令148,并且将结果转送至引退单元144。如果NBCS142满足了NCB指令148所指定的分支条件,则该分支被解析为被取用;反之,则该分支被解析为未被取用。此外,执行单元138计算NCB正确目标地址176。流程往下进行到方块462。
[0096] 在方块462,引退单元144将方块458中所决定的NCB正确目标地址176转送至微码单元128。如果NCB指令148所指定的分支条件为被取用,则NCB正确目标地址176为NCB指令148所指定的分支目标地址;如果NCB指令148所指定的分支条件为未被取用,则NCB正确目标地址176为NCB指令148地址之后的下一个存储器地址。流程往下进行到决策方块466。
[0097] 在决策方块466,引退单元144决定该NCB指令的正确方向是否为被取用,如果是,则微码单元128正确地“预测”该分支方向,然后流程往下进行到方块468;反之,则流程往下进行到方块472。
[0098] 在方块468,引退单元144引退NCB指令148。由于微码单元128正确地预测了分支方向且已从微码只读存储器306中的NSIP154提取出正确的指令,所以引退单元144不需要执行额外的步骤。流程结束于方块468。
[0099] 在方块472,引退单元144产生了值为真的NCB误预测指示178(参照图3)给微码单元128中的提取地址控制器126,以响应决定上述NCB指令的正确方向为被取用,意即微码单元128“误预测”该NCB指令。流程往下进行到方块474、476以及478。
[0100] 在方块474,微处理器100将执行管线中程序顺序比NCB指令148更新的所有指令都清除掉。上述执行管线中的清除是因为管线中的指令是提取自错误提取地址168。流程结束于方块474。
[0101] 在方块476,引退单元144引退NCB指令148。流程结束于方块476。
[0102] 在方块478,微码单元128中的提取地址控制器126产生多工选择信号152以选择NCB正确目标地址176。流程往下进行到方块482。
[0103] 在方块482,指令指针暂存器112载入方块478中s由多工器114所选择的地址,即NCB正确目标地址176。流程往下进行到方块484。
[0104] 在方块484,微码单元128自微码只读存储器306中的提取地址168提取下一个指令,其中提取地址168储存于指令指针暂存器112中,意即为NCB正确目标地址176。流程结束于方块484。
[0105] 图5是根据本发明另一实施例所述的微处理器100的方块图。图5与图3在许多方面是类似的,然而,在图5所示的微处理器100中,引退单元144亦产生一异常侦测指示582、一异常处理例行程序地址584以及一异常状态586。异常状态586包括了指定异常发生原因的信息、引发异常的指令的存储器地址以及/或下一个指令的地址。在以下状况,异常状态586会被闩锁(latch):该异常状态586包括了微处理器100的多个控制暂存器的多个状态位,用以控制各种操作模式(例如x86控制暂存器(CR register)),例如决定上述微处理器的一现行运作模式;该异常状态586包括了控制多个虚拟主机延伸(Virtual Machine eXtension,VMX)的多个位(例如x86虚拟主机延伸位);该异常状态586包括了控制分支条件旗标(flag)的多个位(例如x86EFLAGS暂存器),该异常状态58包括微处理器的一状态暂存器中的多个位,且上述位用以指定由上述使用者程序的多个条件分支指令所指定为多个分支条件的多个旗标;该异常状态586包括了控制码分段描述符(code segment descriptor)的多个位(例如x86码分段暂存器分段描述符);该异常状态586包括了控制任务状态分段描述符的多个位(例如x86任务状态分段位);该异常状态586包括了指定数据与地址的一预设尺寸的多个位(例如x86D位);该异常状态586包括了指定微处理器100的一现行特权阶段的多个位。在一实施例中,微处理器100的硬件保证被闩锁的异常状态586不会在异常处理例行程序执行时有所改变,而且特别是直到提取单元104或微码单元
128完成解析FCB指令,除非是异常处理例行程序自己去改变异常状态586。
[0106] 如果引退单元144即将引退由一异常条件所产生的一指令,则引退单元144产生异常侦测指示582的值为真,并将异常处理例行程序地址584提供给异常处理例行程序的微码单元128的多工器114,其中异常处理例行程序用以处理产生的特定类别异常,并且提供描述关于该异常的信息的异常状态586以载入FBCS124。引退单元144亦将异常侦测指示582、异常处理例行程序地址584以及异常状态586提供给提取单元104。
[0107] 图6是根据本发明图5所示的微处理器100的运作流程图。流程由方块604开始进行。
[0108] 在方块604,提取单元104自指令快取106提取一使用者程序指令(即正规指令与FCB指令188),提取单元104的指令解码器108(如图1所示)解码该使用者程序指令(即正规指令与FCB指令188),并且将指令146配送至执行管线(意即,多工器132、暂存器别名表134、指令排程器136、执行单元138以及引退单元144)去执行。流程往下进行到方块606。
[0109] 在方块606,指令146产生一异常,在一实施例中,关于该异常的信息储存于重排缓冲器中,典型的状况是,异常条件在执行单元138中被侦测,且以该异常的信息更新重排缓冲器;然而,异常条件亦可于微处理器100的其它功能单元中被侦测。流程往下进行到方块608。
[0110] 在方块608,该指令成为了微处理器100中最老旧的指令且已准备要引退。因此,引退单元144产生异常侦测指示582的值为真,此外,引退单元144输出异常处理例行程序地址584与异常状态586,且异常处理例行程序地址584与异常状态586载入至FBCS124以供该异常处理例行程序的下一FCB指令使用。流程往下进行到方块612。
[0111] 在方块612,微码单元128将异常处理例行程序地址584载入至指令指针暂存器112。流程往下进行到方块614。
[0112] 在方块614,微码单元128以指令指针暂存器112中的地址从微码只读存储器306中提取一微码指令,然后指令解码器108解码该微码指令,特别是,指令解码器108产生FCB查见指示164以指示该微码指令是否为一FCB指令。流程往下进行到方块616。
[0113] 在方块616,如果提取地址控制器126决定该指令为一FCB指令,则流程往下进行到方块618;反之,则流程往下进行到方块622。
[0114] 在方块618,流程往下进行到图4a中的方块408接续执行以解析并引退该FCB指令,以及根据该FCB指令的解析结果提取目标指令(意即,如果该FCB指令为被取用,则从FCB目标地址162提取;如果该FCB指令为未被取用,则从NSIP154提取)。特别是,在图4a中的方块412,微码单元128中的FCB方向解析器122将使用于方块608中被载入至FBCS124的异常状态586,并根据FCB条件166解析FCB方向172。然后流程回到图6中的决策方块616。
[0115] 在方块622,微码单元128将NSIP154载入至指令指针暂存器112。流程回到方块614以提取下一个指令,指令提取完毕之后,流程往下进行到方块624。
[0116] 在方块624,微码单元128的指令解码器108将非FCB指令配送至执行管线。流程往下进行到方块626。
[0117] 在方块626,执行管线执行并引退该非FCB指令,然后流程结束于方块626。
[0118] 尽管图5与图6已描述了本发明的一实施例,且在该实施例中,异常处理例行程序存在于微码只读存储器306并且FCB指令由微码单元128所解析与引退。而在其它实施例中,异常处理例行程序可存在于指令快取106(例如:为操作系统的一部份)并且FCB指令由提取单元104所解析与引退。
[0119] 图7是根据本发明另一实施例所述的微处理器100的方块图。图7与图5在许多方面是类似的,然而,在图7所示的微处理器100中,提取单元104产生一微码执行指令侦测指示782用以指示一微码执行指令(microcode-implemented instruction,MII)已被解码、产生微码例行程序的微码只读存储器306中的一微码执行指令地址784用以执行该微码执行指令以及产生相关的该微码执行指令状态786。微码执行指令状态786包括指定该微码执行指令的存储器地址以及下一个指令地址的信息。在以下状况,微码执行指令状态786会被闩锁:该微码执行指令状态786包括了微处理器100的控制暂存器的状态位,用以控制各种操作模式(例如x86控制暂存器);该微码执行指令状态78包括了由微码例行程序所执行的指令的操作码相关解码信息;该微码执行指令状态786包括了由微码例行程序所执行的指令的运算元尺寸相关信息(例如x86操作系统位);该微码执行指令状态786包括了由微码例行程序执行的指令所指定的多个地址尺寸相关信息(例如x86地址尺寸(Address Size,AS)位);该微码执行指令状态786包括了指示微处理器是否执行锁定原子级存储器运作(locked atomic memory operation)的相关信息,用以执行由微码例行程序所执行的指令(例如x86锁定自动存储器指令);该微码执行指令状态786包括了由微码例行程序执行的指令所指定的地址栏位相关信息(例如x86模式/存储器参照(mod/rm)栏位);该微码执行指令状态786包括了由微码例行程序所执行的指令是否为非存储器存取指令的相关信息;当该微码执行指令引发一异常,该微码执行指令状态786包括了微处理器是否复原由微码例行程序执行的指令所修改的暂存器值的信息。在一实施例中,微处理器
100的硬件保证在微码例行程序执行的过程中,闩锁的微码执行指令状态786不会改变,直到微码单元128解析完该FCB指令,除非是执行该FCB的微码例行程序自己去改变微码执行指令状态786。
[0120] 如果提取单元104的指令解码器108解码一微码执行指令,则提取单元104产生微码执行指令侦测指示782的值为真、提供微码执行指令地址784给微码单元128的多工器114、并且提供微码执行指令状态786以将之载入至FBCS124。如上所述,微码执行指令可包括微处理器100的指令集中复杂且不常被执行的指令,例如:三角函数指令、读取/写入模块特定暂存器指令以及序列化指令。
[0121] 图8是根据本发明图7所示的微处理器100的运作流程图。流程由方块804开始进行。
[0122] 在方块804,提取单元104自指令快取106中提取一使用者程序指令(即正规指令与FCB指令188),提取单元104的指令解码器108(如图1所示)解码该使用者程序指令(即正规指令与FCB指令188),并决定该指令为一微码执行指令。流程往下进行到方块808。
[0123] 在方块808,提取单元104产生微码执行指令侦测指示782的值为真,并且输出微码执行指令地址784以及微码执行指令状态786,其中微码执行指令状态786如以下所述被载入至FBCS124以供执行该微码执行指令的微码例行程序的下一个FCB指令所使用。流程往下进行到方块812。
[0124] 在方块812,微码单元128将微码执行指令地址784载入至指令指针暂存器112。流程往下进行到方块614。
[0125] 图8中的方块614到626类似于图6中类似编号的方块,为简洁起见,方块614到626的运作细节就不再重复描述。然而,值得注意的是,在方块618,当流程往下进行到图4a的方块408接续执行以进行解析并引退FCB指令以及图4a的方块412以进行根据该FCB指令的解析结果提取目标指令时,微码单元128的FCB方向解析器122会使用微码执行指令状态786(于方块808中被载入至FBCS124)以根据FCB条件166解析FCB方向172。
[0126] 图9是根据本发明另一实施例所述的微处理器100的方块图。图9与图7在许多方面是类似的,然而,引退单元144也负责将序列化指令(serializing instruction)所指定的新数值写入FBCS124,此外,特别是微码执行指令侦测指示782指示出一序列化指令已解码,且微码只读存储器306的微码执行指令地址784位于执行该序列化指令的微码例行程序,微码执行指令状态786则相关于该序列化指令。微码执行指令状态786包括了指定该序列化指令的后一个指令地址的相关信息,其余部分请参照图7。
[0127] 在一实施例中,更新微处理器100的架构状态的所有序列化指令都是微码执行指令,因此,写入至上述由序列化指令更新的架构状态的指令指微码只读存储器306中微码例行程序的指令。在一实施例中,微处理器更用以在由微处理器所执行的一微码例行程序中执行上述序列化指令,其中上述微码例行程序包括在上述微码例行程序的程序顺序上位于一更新指令之后的一清除指令,上述更新指令以上述序列化指令所指定的一分支条件(例如一数值)更新上述控制暂存器中的上述控制值,上述清除指令把在上述微码例行程序的程序顺序上位于上述清除指令之后的所有指令从微处理器的一管线清除掉。以下将进一步描述,执行序列化指令的微码例行程序的写入方式能够确保由序列化指令所写入的FBCS124的部分在关于FCB指令是静态的。
[0128] 在一实施例中,指令集架构的序列化指令包括由x86架构所认定的序列化指令,例如:请参照2006年七月发布的 架构软件开发者手册第3册:“系统编程指南第一篇”的第7.4章节,其中定义序列化指令是强迫处理器完成先前指令所引发对于旗标、暂存器以及存储器的修改,并且在提取并执行下一个指令之前泄流(drain)全部缓冲的存储器写入。微处理器的一指令集架构包括多个序列化指令,且每个序列化指令需要微处理器完成由序列化指令之前所执行的指令所造成对微处理器的状态(例如多个旗标,多个暂存器)以及对存储器的全部修改,并且需要微处理器于提取并执行在序列化指令之后的下一个指令之前,泄流全部缓冲的存储器写入,其中上述指令集架构仅容许序列化指令修改微码执行指令状态786。举例来说:序列化指令可为将微处理器100的快取存储器无效化的指令,例如:指令快取106以及/或数据快取(未绘示)或将微处理器100的转译后备缓冲区(translation lookaside buffer)(未绘示)的一项目(entry)无效化的指令或恢复(resume)处于系统管理模式(System Management Mode,SMM)的微处理器100的指令。在一实施例中,暂存器别名表134与指令排程器136不会针对由序列化指令所写入的FBCS124执行相依性检查。
[0129] 由序列化指令所写入的状态倾向为比较不频繁变动的状态,例如:控制暂存器的位(如x86CRx控制暂存器),上述控制暂存器用以储存影响管线式微处理器的运作的一控制值。此外,状态中的位通常由系统软件所写入,而非由使用者程序所写入。因为仅由指令集架构的序列化指令所写入,所以FBCS124是静态的,FBCS124所含的位可举例如:控制微处理器100是否运作于使用多个存储器保护设备(例如x86控制暂存器CR0的同位误差(Parity Error,PE)位)的模式下的位;控制微处理器100是否运作于一存储器分页模式;控制微处理器100是否自动执行存储器参照的校准检查的位(例如x86控制暂存器CR0的校准遮罩(Alignment Mask,AM)位);控制微处理器的虚拟模式延伸(virtual mode extension)是否致能(enabled)的位(例如x86虚拟主机延伸位);特定模块暂存器(Model Specific Regsiter,MSR)的位(例如x86特定模块暂存器位);描述符表暂存器(Descriptor Table Register,DTR)的位(例如x86全域描述符表暂存器位(Global Descriptor Table Register,GDTR)、局部描述符表暂存器位(Local Descriptor Table Register,LDTR)以及中断描述符表暂存器位(Interrupt Descriptor Table Register,IGDTR));操作暂存器(Task Register,TR)的位(例如x86操作暂存器位)。
[0130] 图10是根据本发明图9所示的微处理器100的运作流程图。流程由方块1004开始进行。
[0131] 在方块1004,如图8的方块804~812与614所示,提取单元104自指令快取106中提取一序列化指令,将之解码,并决定其为一微码执行指令,然后提取单元104储存下一个指令指针暂存器的值,产生执行该序列化指令的微码例行程序位于微码只读存储器306中的目标地址,以及产生微码执行指令侦测指示的值为真,并且将控制转送至微码单元128。然后微码单元128开始执行执行该序列化指令的微码例行程序的指令,该微码例行程序的指令不包括任何FCB指令,用以指定FBCS124中由该序列化指令所写入的部分。然而,该微码例行程序包括一指令,用以将该序列化指令所指定的新数值写入到该序列化指令所指定的架构状态,而该架构状态包括于图9的FBCS124中。流程往下进行到方块1006。
[0132] 在方块1006,微码单元128将微码指令提取出来并配送至执行管线,其中该微码指令将该序列化指令所指定的新数值写入到该序列化指令所指定的FBCS124中。引退单元144于是将该新数值写入到FBCS124中。流程往下进行到方块1008。
[0133] 在方块1008,微码单元128把分支到方块1004中被储存的NSIP的指令,当作执行序列化指令的微码例行程序中的最后一个指令进行配送。为响应上述分支到NSIP,引退单元144清除微处理器100的管线、将提取单元104的指令指针暂存器112更新为NSIP的值(通过正确目标地址176)以及将控制从微码单元128转送回提取单元104,使提取单元104再度开始从NSIP提取使用者程序指令。上述清除管线的动作能够保证在微处理器100提取或发送其它指令进行执行之前,在方块1006中写入FBCS124的微码指令已被引退,意即,已将新数值写入FBCS124。流程往下进行到方块1012。
[0134] 在方块1012,微处理器呼叫包括FCB指令的微码例行程序(例如因微码执行指令或异常所造成)。在执行序列化指令的微码例行程序已结束之后一段时间,提取单元104将控制从目前执行的使用者程序转送到微码单元128以执行另一微码例行程序,此现象可能是因为由使用者程序微码所执行的指令的解码或异常条件所造成,如上于图5-6或图7-8中已分别叙述。特别是,该微码例行程序包括了方块1006中指定FBCS124的FCB指令,并以该快速分支条件为其分支条件状态。如图4中方块408到426所述,微码单元128提取、解析以及引退该FCB指令。其优点是,FBCS124是静态的,因为微处理器100的管线中不存在比修改FBCS124的FCB指令更老旧且未引退的指令(除非微码例行程序中包含了一个这样的指令,但事实上并非如此),因为在方块1008中响应分支到NSIP而执行了清除动作。又或者FBCS124是静态的,是因为写入至FBCS124的任何使用者程序指令都是由包括分支到NSIP的微码例行程序所执行,而且除了执行该使用者程序指令的微码例行程序之外,没有其它微码例行程序会写入至FBCS124。流程结束于方块1012。
[0135] 从以上描述可窥知其优点在于,对执行序列化指令的微码例行程序之外的FCB指令来说,由一序列化指令所写入的FBCS124是静态的。由于认知到此一特性,本发明的发明人提供了一种FCB指令能够指定该静态的状态,并且比起传统的条件分支指令能够更快地被解析、引退,因为传统的条件分支指令动态依据其分支条件状态而指定其状态。
[0136] 尽管图1到图10各自提供了多种实施例,但其它实施例当可自上述实施例所述的特性加以变化或组合而得到。例如:在其它实施例中,微处理器可于使用者程序以及/或微码例行程序中包括FCB指令,其中该使用者程序与微码例行程序包括有执行微指令的微码例行程序与异常处理例行程序,以及包括异常状态、微码执行指令状态、由序列化指令所写入的状态、由微码保证为静态的状态或其上任意的组合的微码例行程序或使用者程序。
[0137] 本发明虽以各种实施例揭露如上,然而其仅为范例参考而非用以限定本发明的范围,任何本领域技术人员,在不脱离本发明的精神和范围内,当可做些许的更动与润饰。举例来说:可用软件来执行本发明的系统与方法中的上述功能、构造、模块、模拟、描述以及/或测试,该软件可使用一般的程序语言(例如:C、C++)、硬件描述语言(Hardware Description Language,HDL),包括Verilog硬件描述语言、超高速集成电路硬件描述语言(VHSIC(Very High Speed Integrated Circuit)Hardware Description Language,VHDL)等等或其它程序语言。这些软件可配置于任何公知的计算机可使用的介质,例如:半导体、磁盘或光盘(包括:只读光盘(Compact Disc Read-Only Memory)、数字多功能只读光盘(Digital Versatile Disc Read-Only Memory)、等等)。本发明的实施例所述的装置与方法可包括于半导体知识产权核(semiconductor intellectual property core),例如:微处理器核心(例如以硬件描述语言来实现)以及转换为硬件型态的集成电路产品。此外,本发明的实施例所述的装置与方法亦可用硬件与软件的组合得以实现。因此,本发明的范围并非限定于上述的实施例,而当视前述的权利要求书与其等效物所界定者为准,特别是,本发明可执行在运用于一般用途计算机的微处理器装置中。最后,在不脱离本发明的精神和范围内,任何本领域技术人员当可以上述所揭露的实施例及其概念为基础,做些许的更动与润饰得出与本发明相同的目的。
[0138] 附图中的符号简单说明如下:
[0139] 100:微处理器;104:提取单元;106:指令快取;108:指令解码器;112:指令指针暂存器;114、132:多工器;116:地址增量电路;118:分支预测器;122:FCB方向解析器;124:快速分支条件状态(FBCS);126:提取地址控制器;128:微码单元;134:暂存器别名表;136:指令排程器;138:多个执行单元;142:正规分支条件状态(NBCS);144:引退单元;
152:多工选择信号;154:NSIP;156:预测目标地址;158:预测方向;162:FCB目标地址;
164:FCB查见指示;166:FCB条件;168:提取地址;172:FCB方向;174:正规指令结果;176:
NCB正确目标地址;178:NCB误预测指示;188:正规指令与FCB指令;306:微码只读存储器;582:异常侦测指示;584:异常处理例行程序地址;586:异常状态;782:微码执行指令侦测指示;784:微码执行指令地址;786:微码执行指令状态。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用