具有条件指令的微处理器及其处理方法转让专利

申请号 : CN201711069237.5

文献号 : CN107832083B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : G.葛兰.亨利泰瑞.派克斯罗德尼.E.虎克

申请人 : 威盛电子股份有限公司

摘要 :

一种具有一指令集架构的微处理器。该指令集架构是定义有一指令,其包含一立即字段,其具有一第一部分指定一第一数值与一第二部分指定一第二数值,该指令指示该微处理器执行操作将一固定数值作为其中之一的来源操作数,该固定数值是将第一数值基于第二数值转动/移动一定数量的位而获得。该微处理器包含:指令转译器,将指令转译为至少一立即ALU微指令,其中立即ALU微指令是以不同于指令集架构所定义的指令编码方式进行编码;以及执行管线,执行由指令转译器所产生的微指令,以产生由指令集架构定义的结果。其中指令转译器而非该执行管线,依据第一数值与第二数值产生固定数值作为给立即ALU微指令的一来源操作数,供该执行管线执行。

权利要求 :

1.一种具有一指令集架构的微处理器,该指令集架构是定义有一指令,该指令包含一立即字段,该立即字段内具有一第一部分指定一第一数值与一第二部分指定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的来源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该微处理器包含:一指令转译器,将该指令转译为至少一立即ALU微指令,其中该立即ALU微指令是以不同于该指令集架构所定义的指令编码方式进行编码;以及一执行管线,执行由该指令转译器所产生的微指令,以产生由该指令集架构定义的结果;

其中该指令转译器,而非该执行管线,依据该第一数值与该第二数值产生该固定数值作为给立即ALU微指令的一来源操作数,供该执行管线执行。

2.根据权利要求1所述的微处理器,其中该指令转译器依据该立即字段的一数值是否落于一预定的数值子集内,以将该指令转译为不同的微指令。

3.根据权利要求1所述的微处理器,其中该执行管线包含:

多个执行单元,执行该微指令以产生该结果;以及

一发布单元,将该指令转译器产生的该固定数值发布给至少一个该执行单元,该固定数值是作为由该至少一该执行单元执行的该立即ALU微指令的该来源操作数。

4.根据权利要求1所述的微处理器,其中该执行管线包含:

多个执行单元,执行该微指令以产生该结果;

其中,该微处理器还包含:

一个或多个第一总线,将来自该执行单元的该微指令的执行结果传送回该执行单元,作为其它微指令的来源操作数;以及一第二总线,提供由该指令转译器产生的该固定数值给该执行管线,其中该第二总线不同于该一个或多个第一总线。

5.根据权利要求4所述的微处理器,还包含:

多个寄存器,接收来自该执行单元的该微指令的执行结果,由该指令转译器产生的该固定数值不会被该微处理器写入该寄存器。

6.根据权利要求1所述的微处理器,其中该固定数值是将该第一数值转动/移动两倍于该第二数值的数量的位而获得。

7.根据权利要求1所述的微处理器,其中该微处理器的指令集架构定义每个包括立即字段的多个指令,包含进阶精简指令集机器ARM指令集架构ISA的数据处理指令,该数据处理指令指定一修正后立即常数。

8.根据权利要求7所述的微处理器,其中该ARM指令集架构的指定一修正后立即常数的该数据处理指令包含指定一修正后立即常数的条件ALU指令。

9.一种微处理器的处理方法,由一具有一指令集架构的微处理器执行,该指令集架构是定义一指令,该指令包含一立即字段,该立即字段内具有一第一部分指定一第一数值与一第二部分指定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的来源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该方法包含:将该指令转译为至少一立即ALU微指令,其中该立即ALU微指令是以不同于该指令集架构所定义的指令编码方式进行编码,其中,该转译步骤是由该微处理器的一指令转译器执行;以及执行由该指令转译器所产生的微指令,以产生一由该指令集架构定义的结果,其中该执行步骤是由该微处理器的一执行管线执行;

其中由该指令转译器,而非该执行管线,依据该第一数值与该第二数值产生该固定数值作为给立即ALU微指令的一来源操作数,供该执行管线执行。

10.根据权利要求9所述的方法,其中该转译步骤包含依据该立即字段的一数值是否落于一预定的数值子集内,将该指令转译为不同的微指令。

11.根据权利要求9所述的方法,其中该固定数值是将该第一数值转动/移动两倍于该第二数值的数量的位而获得。

12.根据权利要求9所述的方法,其中该微处理器的指令集架构定义每个包括立即字段的多个指令,包含进阶精简指令集机器ARM指令集架构ISA的数据处理指令,该数据处理指令指定一修正后立即常数。

13.一种具有一指令集架构的微处理器,该指令集架构是定义一指令,该指令包含一立即字段,该立即字段内具有一第一部分指定一第一数值与一第二部分指定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的来源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该微处理器包含:一指令转译器,将该指令转译为微指令;以及

一执行管线,执行由该指令转译器所产生的该微指令,以产生一由该指令集架构定义的结果;

其中,当该立即字段的一数值是落于一预定的数值子集内:

该指令转译器将该指令转译为至少一立即ALU微指令;

该指令转译器而非该执行管线,依据该第一数值与该第二数值产生该固定数值;以及该执行管线利用该指令转译器产生的该固定数值作为其中之一的来源操作数,执行该立即ALU微指令;以及其中,当该立即字段的该数值并不落于该预定的数值子集内:

该指令转译器将该指令转译为至少第一微指令与第二微指令;

该执行管线而非该指令转译器,通过执行该第一微指令,产生该固定数值;以及该执行管线通过利用该第一微指令执行产生的该固定数值作为其中之一的来源操作数,以执行该第二微指令。

14.根据权利要求13所述的微处理器,其中该执行管线包含:一寄存器配置表,产生该第二微指令与该第一微指令执行产生的该固定数值的关联性。

15.根据权利要求13所述的微处理器,其中全部所述微指令是由该微处理器的一微架构所定义,并且是以不同于该指令集架构定义的指令编码方式进行编码。

16.根据权利要求13所述的微处理器,其中该第一微指令是一移位/转动微指令。

17.一种微处理器的处理方法,由具有一指令集架构的一微处理器执行,该指令集架构是定义一指令,该指令包含一立即字段,该立即字段内具有一第一部分指定一第一数值与一第二部分指定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的来源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该微处理器并包含一指令转译器与一执行管线,该方法包含:利用该指令转译器,确认该立即字段的一数值是否落于一预定的数值子集内;

当该立即字段的该数值是落于该预定的数值子集内:

利用该指令转译器将该指令转译为至少立即ALU微指令;

利用该指令转译器而非该执行管线,依据该第一数值与该第二数值产生该固定数值;

以及

利用该执行管线,将该指令转译器产生的该固定数值作为其中之一的来源操作数,来执行该立即ALU微指令;以及其中,当该立即字段的该数值并不落于该预定的数值子集内:

利用该指令转译器,将该指令转译为至少第一微指令与第二微指令;

利用该执行管线而非该指令转译器,通过执行该第一微指令,以产生该固定数值;以及利用该执行管线,通过利用该第一微指令执行产生的该固定数值作为其中之一的来源操作数,以执行该第二微指令。

18.根据权利要求17所述的方法,还包含:

产生该第二微指令与该第一微指令执行产生的该固定数值的关联性,其中产生该关联性的步骤是由该微处理器的一寄存器配置表实现。

19.根据权利要求17所述的方法,其中全部所述微指令是由该微处理器的一微架构所定义,并且是以不同于该指令集架构定义的指令编码方式进行编码。

说明书 :

具有条件指令的微处理器及其处理方法

[0001] 本发明为申请日为2012年4月9日、申请号为201610126292.2的名称为“具有条件指令的微处理器及其处理方法”的申请案(其中该申请案的原申请的申请日为2012年4月9日以及申请号为201210102141.5)的分案申请。

技术领域

[0002] 本发明是关于微处理器的技术领域,特别是关于在指令集中具有条件指令的微处理器。

背景技术

[0003] 由Intel Corporation of Santa Clara,California开发出来的x86处理器架构以及由ARM Ltd.of Cambridge,UK开发出来的进阶精简指令集机器(advanced risc machines,ARM)架构是计算机领域中两种广为人知的处理器架构。许多使用ARM或x86处理器的计算机系统已经出现,并且,对于此计算机系统的需求正在快速成长。现今,ARM架构处理核心是主宰低功耗、低价位的计算机市场,例如手机、手持式电子产品、平板计算机、网络路由器与集线器、机上盒等。举例来说,苹果iPhone与iPad主要的处理能力即是由ARM架构的处理核心提供。另一方面,x86架构处理器则是主宰需要高效能的高价位市场,例如膝上计算机、桌上型计算机与服务器等。然而,随着ARM核心效能的提升,以及某些x86处理器在功耗与成本的改善,前述低价位与高价位市场的界线逐渐模糊。在移动运算市场,如智能型手机,这两种架构已经开始激烈竞争。在膝上计算机、桌上型计算机与服务器市场,可以预期这两种架构将会有更频繁的竞争。
[0004] 前述竞争态势使得计算机装置制造业者与消费者陷入两难,因无从判断哪一个架构将会主宰市场,更精确来说,无法判定哪一种架构的软件开发商将会开发更多软件。举例来说,一些每月或每年会定期购买大量计算机系统的消费个体,基于成本效率的考虑,例如大量采购的价格优惠与系统维修的简化等,会倾向于购买具有相同系统配置设定的计算机系统。然而,这些大型消费个体中的使用者群体,对于这些具有相同系统配置设定的计算机系统,往往有各种各样的运算需求。具体来说,部分使用者的需求是希望能够在ARM架构处理器上执行程序,其它部分使用者的需求是希望能够在x86架构处理器上执行程序,甚至有部分使用者希望能够同时在两种架构上执行程序。此外,新的、预期外的运算需求也可能出现而需要使用另一种架构。在这些情况下,这些大型个体所投入的部分资金就变成浪费。在另一个例子中,使用者具有一个重要的应用程序只能在x86架构上执行,因而他购买了x86架构的计算机系统(反之亦然)。不过,这个应用程序的后续版本改为针对ARM架构开发,并且优于原本的x86版本。使用者会希望转换架构来执行新版本的应用程序,但不幸地,他已经对于不倾向使用的架构投入相当成本。同样地,使用者原本投资于只能在ARM架构上执行的应用程序,但是后来也希望能够使用针对x86架构开发而未见于ARM架构的应用程序或是优于以ARM架构开发的应用程序,亦会遭遇这样的问题,反之亦然。值得注意的是,虽然小实体或是个人投入的金额较大实体为小,然而投资损失比例可能更高。其它类似的投资损失的例子可能出现在各种不同的运算市场中,例如由x86架构转换至ARM架构或是由ARM架构转换至x86架构的情况。最后,投资大量资源来开发新产品的运算装置制造业者,例如OEM厂商,也会陷入此架构选择的困境。若是制造业者基于x86或ARM架构研发制造大量产品,而使用者的需求突然改变,则会导致许多有价值的研发资源的浪费。
[0005] 对于运算装置的制造业者与消费者,能够保有其投资免于受到二种架构中何者胜出的影响是有帮助的,因而有必要提出一种解决方法让系统制造业者发展出可让使用者同时执行x86架构与ARM架构的程序的运算装置。
[0006] 使系统能够执行多个指令集程序的需求由来已久,这些需求主要是因为消费者会投入相当成本在旧硬件上执行的软件程序,而其指令集往往不兼容于新硬件。举例来说,IBM 360系统Model 30即具有兼容于IBM 1401系统的特征来缓和使用者由1401系统转换至较高效能与改良特征的360系统的痛苦。Model 30具有360系统与1401系统的只读储存控制(Read Only Storage,ROS)),使其在辅助储存空间预先存入所需信息的情况下能够使用于1401系统。此外,在软件程序以高级语言开发的情况下,新的硬件开发商几乎没有办法控制为旧硬件所编译的软件程序,而软件开发商也欠缺动力为新硬件重新编译(re-compile)源码,此情形尤其发生在软件开发商与硬件开发商是不同个体的情况。Siberman与Ebcioglu于Computer,June 1993,No.6提出的文章“An Architectural Framework for Supporting Heterogeneous Instruction-Set Architectures”中揭露一种利用执行于精简指令集(RISC)、超纯量架构(superscalar)与超长指令字(VLIW)架构(下称原生架构)的系统来改善既存复杂指令集(CISC)架构(例如IBM S/390)执行效率的技术,其所揭露的系统包含执行原生码的原生引擎(native engine)与执行目的码的迁移引擎(migrant engine),并可依据转译软件将目的码(object bode)转译为原生码(native code)的转译效果,在这两种编码间视需要进行转换。请参照2006年5月16日公告的美国专利第7,047,394号专利案,Van Dyke et al.揭露一处理器,具有用以执行原生精简指令集(Tapestry)的程序指令的执行管线,并利用硬件转译与软件转译的结合,将x86程序指令转译为原生精简指令集的指令。
Nakada et al.提出具有ARM架构的前端管线与Fujitsu FR-V(超长指令字)架构的前端管线的异质多线程处理器(heterogeneous SMT processor),ARM架构前端管线用于非规则(irregular)软件程序(如操作系统),而Fujitsu FR-V(超长指令字)架构的前端管线用于多媒体应用程序,其将一增加的超长指令字队列提供予FR-V超长指令字的后端管线以维持来自前端管线的指令。请参照Buchty与Weib,eds,Universitatsverlag Karlsruhe于2008年11月在First International Workshop on New Frontiers in High-performance and Hardware-aware Computing(HipHaC’08),Lake Como,Italy,(配合MICRO-41)发表的论文集(ISBN 978-3-86644-298-6)的文章“OROCHI:A Multiple Instruction Set SMT 
Processor”。文中提出的方法用以降低整个系统在异质系统单芯片(SOC)装置(如德州仪器OMAP应用处理器)内所占据的空间,此异质系统单芯片装置具有一个ARM处理器核心加上一个或多个协同处理器(co-processors)(例如TMS320、多种数字信号处理器、或是多种图形处理单元(GPUs))。这些协同处理器并不分享指令执行资源,只是集成于同一芯片上的不同处理核心。
[0007] 软件转译器(software translator)、或称软件仿真器(software emulator,software simulator)、动态二进制码转译器等,亦被用于支持将软件程序在与此软件程序架构不同的处理器上执行的能力。其中受欢迎的商用实例如搭配苹果麦金塔(Macintosh)计算机的Motorola 68K-to-PowerPC仿真器,其可在具有PowerPC处理器的麦金塔计算机上执行68K程序,以及后续研发出来的PowerPC-to-x86仿真器,其可在具有x86处理器的麦金塔计算机上执行68K程序。位于加州圣塔克拉拉(Santa Clara,California)的全美达公司,结合超长指令字(VLIW)的核心硬件与“纯粹软件指令的转译器(亦即程序码转译软件(Code Morphing Software))以动态地编译或仿真(emulate)x86程序码序列”以执行x86程序码,请参照2011年维基百科针对全美达(Transmeta)的说明。另外,参照1998年11月3日由Kelly et al.提出的美国专利第5,832,205号公告案。IBM的DAISY(Dynamic Architecture Instruction Set from Yorktown)系统具有超长指令字(VLIW)机器与动态二进制软件转译,可提供100%的旧架构软件相容仿真。DAISY具有位于只读存储器内的虚拟机器观测器(Virtual Machine Monitor),以平行处理
(parallelize)与储存超长指令字原始码(VLIW primitives)至未见于旧有系统架构的部分主要存储器内,其能避免这些旧有体系架构的程序码片段在后续程序被重新编译(re-translation)。DAISY具有高速编译器优化算法(fast compiler optimization 
algorithms)以提升效能。QEMU是一具有软件动态转译器的机器仿真器(machine 
emulator)。QEMU可在多种主系统(host),如x86、PowerPC、ARM、SPARC、Alpha与MIPS,模拟多种中央处理器,如x86、PowerPC、ARM与SPARC。请参照QEMU,a Fast and Portable Dynamic Translator,Fabrice Bellard,USENIX Association,FREENIX Track:2005USENIX Annual Technical Conference,如同其开发者所称“动态转译器对于目标处理器指令执行时的转换(runtime conversion),将其转换至主系统指令集,所产生的二进制码是储存于一转译快取以利于重复取用。…QEMU[较之其它动态转译器]远为简单,因为它只连接GNC C编译器于离线(off line)时所产生的机器码片段”。同时可参照2009年6月19日Adelaide大学Lee Wang Hao的学位论文“ARM Instruction Set Simulation on Multi-core x86Hardware”。
虽然以软件转译为基础的解决方案所提供的处理效能可以满足多个运算需求的一部分,但是不大能够满足多个使用者的情况。
[0008] 静态(static)二进制转译是另一种具有高效能潜力的技术。不过,二进制转译技术的使用存在技术上的问题(例如自我修改程序码(self-modifying code)、只在执行时(run-time)可知的间接分支(indirect branches)数值)以及商业与法律上的障碍(例如:此技术可能需要硬件开发商配合开发散布新程序所需的管道;对原程序散布者存在潜在的授权或是著作权侵害的风险)。
[0009] ARM指令集架构(ISA)具有条件指令执行的特色。如ARM架构参考手册(ARM Architecture Reference Manual)第A4-3页所述:“大部分ARM指令可被有条件地执行,意谓若是APSR中的N、Z、C与V旗标满足指令所指定的条件,他们才会在程序者的模式操作、存储器与协同处理器发挥正常的效果。若是这些旗标不满足条件,指令就会如同一个不操作(NOP)机器指令,此指令执行至下一个正常指令,包括对于例外事件实行的所有相关的确认操作,但不会有其它效果。”
[0010] 条件执行有利于缩小指令码的尺寸,并能通过缩减分支指令的数量来提升效能,但指令错误预测则会伴随效能减损。因此,如何有效率地执行条件指令,尤其在支持高微处理器时钟的情况,是亟待解决的问题。

发明内容

[0011] 本发明的一实施例提供一个执行条件非分支指令的微处理器。其中各该条件非分支指令是指定一条件,各该条件非分支指令在该条件满足时指示该微处理器执行一操作,而在该条件不满足该微处理器的条件旗标时不去执行该操作。该微处理器可以包含:一预测器,用以提供关于一条件非分支指令的预测;一指令转译器,用以:在该预测预测该条件将不会被满足时,将该条件非分支指令转译为具有条件码的一不操作微指令,其中具有条件码的不操作微指令除了使执行单元启动来检查该预测外不会执行其它操作;以及在该预测预测该条件将会被满足时,将该条件非分支指令转译为单个具有条件码的可操作微指令以非条件地执行该操作。其中该指令转译器将x86指令集架构(ISA)程序和进阶精简指令集机器(ARM)ISA程序的指令转译为由该微处理器的微指令集定义的微指令,其中该微指令按照与其中由x86ISA和ARM ISA的指令集定义的指令被编码的方式不同的方式来编码。以及包含一执行管线,包括指令发布单元和多个执行单元,其中指令发布单元操作来发布该单个具有条件码的可操作微指令给多个执行单元的选择的一个,并且所选择的执行单元操作来执行该单个具有条件码的可操作微指令。
[0012] 本发明的另一实施例提供一种利用一微处理器执行条件非分支指令的方法。其中,该微处理器具有指令转译器,其将x86指令集架构(ISA)程序和进阶精简指令集机器(ARM)ISA程序的指令转译为由该微处理器的微指令集定义的微指令,其中该微指令按照与其中由x86ISA和ARM ISA的指令集定义的指令被编码的方式不同的方式来编码,其中各该条件非分支指令是指定一条件,各该条件非分支指令在该条件满足时指示该微处理器执行一操作,而在该条件不满足该微处理器的条件旗标时不去执行该操作。该方法包含:提供关于一条件非分支指令的预测;在该预测预测该条件将不会被满足时,将该条件非分支指令转译为具有条件码的一不操作微指令,其中具有条件码的不操作微指令除了使执行单元启动来检查该预测外不会执行其它操作;在该预测预测该条件将会被满足时,将该条件非分支指令转译为单个具有条件码的可操作微指令以非条件地执行该操作;以及指令发布单元发布该单个具有条件码的可操作微指令给多个执行单元的选择的一个,所选择的执行单元执行该单个具有条件码的可操作微指令。其中指令发布单元和选择的执行单元是该微处理器的一硬件执行管线的一部分。
[0013] 本发明的又一实施例提供一编码于计算机可读取储存媒介的计算机程序产品,其包含计算机可读取程序码,用以指定一微处理器以执行条件非分支指令。其中,各个条件非分支指令是指定一条件。各个条件非分支指令在条件满足时指示微处理器执行一操作,而在条件不满足微处理器的条件旗标时不去执行操作。此计算机可读取程序码包含第一程序码以指定一预测器,提供关于一条件非分支指令的预测。此计算机可读取程序码并包含第二程序码,以指定一指令转译器,用以在前述预测预测条件将不会被满足时,将条件非分支指令转译为一不操作微指令,而在前述预测该预测条件将会被满足时,将条件非分支指令转译为一个或多个微指令构成的一微指令组以非条件地执行此操作。此计算机可读取程序码并包含第三程序码,以指定一执行管线,执行前述不操作微指令或是由指令转译器提供的微指令组。
[0014] 本发明的一实施例提供一种具有一指令集架构的微处理器。该指令集架构是定义有一指令,该指令包含一立即字段,该立即字段内具有一第一部分指定一第一数值与一第二部分指定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的来源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得。该微处理器包含:一指令转译器,将该指令转译为至少一立即ALU微指令,其中该立即ALU微指令是以不同于该指令集架构所定义的指令编码方式进行编码;以及一执行管线,执行由该指令转译器所产生的微指令,以产生由该指令集架构定义的结果。其中该指令转译器,而非该执行管线,依据该第一数值与该第二数值产生该固定数值作为给立即ALU微指令的一来源操作数,供该执行管线执行。
[0015] 本发明的另一实施例提供一种方法,由一具有一指令集架构的微处理器执行。该指令集架构是定义一指令,该指令包含一立即字段,该立即字段内具有一第一部分指定一第一数值与一第二部分指定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的来源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得。该方法包含:将该指令转译为至少一立即ALU微指令,其中该立即ALU微指令是以不同于该指令集架构所定义的指令编码方式进行编码,其中,该转译步骤是由该微处理器的一指令转译器执行;以及执行由该指令转译器所产生的微指令,以产生一由该指令集架构定义的结果,其中该执行步骤是由该微处理器的一执行管线执行。其中由该指令转译器,而非该执行管线,依据该第一数值与该第二数值产生该固定数值作为给立即ALU微指令的一来源操作数,供该执行管线执行。
[0016] 本发明的另一实施例提供一种具有一指令集架构的微处理器。该指令集架构是定义一指令,该指令包含一立即字段,该立即字段内具有一第一部分指定一第一数值与一第二部分指定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的来源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得。该微处理器包含:一指令转译器,将该指令转译为微指令;以及一执行管线,执行由该指令转译器所产生的该微指令,以产生一由该指令集架构定义的结果。其中,当该立即字段的一数值是落于一预定的数值子集内:该指令转译器将该指令转译为至少一立即ALU微指令;该指令转译器而非该执行管线,依据该第一与该第二数值产生该固定数值;以及该执行管线利用该指令转译器产生的该固定数值作为其中之一的来源操作数,执行该立即ALU微指令。
以及其中,当该立即字段的该数值并不落于该预定的数值子集内:该指令转译器将该指令转译为至少第一与第二微指令;该执行管线而非该指令转译器,通过执行该第一微指令,产生该固定数值;以及该执行管线通过利用该第一微指令执行产生的该固定数值作为其中之一的来源操作数,以执行该第二微指令。
[0017] 本发明的另一实施例提供一种方法,由具有一指令集架构的一微处理器执行。该指令集架构是定义一指令,该指令包含一立即字段,该立即字段内具有一第一部分指定一第一数值与一第二部分指定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的来源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该微处理器并包含一指令转译器与一执行管线。该方法包含:利用该指令转译器,确认该立即字段的一数值是否落于一预定的数值子集内;当该立即字段的该数值是落于该预定的数值子集内:利用该指令转译器将该指令转译为至少立即ALU微指令;利用该指令转译器而非该执行管线,依据该第一与该第二数值产生该固定数值;以及利用该执行管线,将该指令转译器产生的该固定数值作为其中之一的来源操作数,来执行该立即ALU微指令。以及其中,当该立即字段的该数值并不落于该预定的数值子集内:利用该指令转译器,将该指令转译为至少第一与第二微指令;利用该执行管线而非该指令转译器,通过执行该第一微指令,以产生该固定数值;以及利用该执行管线,通过利用该第一微指令执行产生的该固定数值作为其中之一的来源操作数,以执行该第二微指令。
[0018] 本发明的又一实施例提供一种计算机程序产品,编码于至少一计算机可读取储存媒介以使用于一运算装置。此计算机程序产品包括编码于此媒介的计算机可读取程序码,用以指定一微处理器。此微处理器具有一指令集架构,指令集架构是定义至少一指令。此指令包含一立即字段,立即字段内具有一第一部分用以指定一第一数值与一第二部分用以指定一第二数值。指令是指示微处理器执行一操作将一固定数值作为其中之一的来源操作数。此固定数值是将第一数值基于第二数值转动/移动一定数量的位而获得。此计算机可读取程序码具有第一程序码,指定一指令转译器,用以将至少一指令转译为一个或多个微指令,其中该指令是以不同于指令集架构所定义的指令编码方式进行编码。此计算机可读取程序码并具有第二程序码,指定一执行管线,用以执行由指令转译器所产生的微指令,以产生一由该指令集架构定义的结果。其中,指令转译器,而非执行管线,是依据第一与第二数值产生的固定数值作为至少一微指令的一来源操作数,供执行管线执行。
[0019] 关于本发明的优点与精神可以通过以下的发明详述及所附图式得到进一步的了解。

附图说明

[0020] 图1是本发明执行x86程序集架构与ARM程序集架构机器语言程序的微处理器一实施例的方块图。
[0021] 图2是一方块图,详细显示图1的硬件指令转译器。
[0022] 图3是一方块图,详细显示图2的指令格式化程序。
[0023] 图4是一方块图,详细显示图1的执行管线。
[0024] 图5是一方块图,详细显示图1的寄存器文件。
[0025] 图6A和图6B是一流程图,显示图1的微处理器的操作步骤。
[0026] 图7是本发明一双核心微处理器的方块图。
[0027] 图8是本发明执行x86ISA与ARM ISA机器语言程序的微处理器另一实施例的方块图。
[0028] 图9是一方块图,详细显示部分图1的微处理器。
[0029] 图10A和图10B是一流程图,显示图1的硬件指令转译器转译条件ALU指令的操作步骤。
[0030] 图11是一流程图,显示图4的执行单元执行一移位微指令的操作步骤。
[0031] 图12A和图12B是一流程图,显示图4的执行单元执行一条件ALU微指令的操作步骤。
[0032] 图13是一流程图,显示图4的执行单元执行一条件移动微指令的操作步骤。
[0033] 图14至20是方块图,显示图1的执行管线112执行依据图10的转译操作所转译的各种形式的条件ALU指令的操作步骤。
[0034] 图21A和图21B是一流程图,显示图1的硬件指令转译器转译条件ALU指令,以指定来源寄存器的其中之一与目的寄存器为同一的操作步骤。
[0035] 图22至28是方块图,显示图1的执行管线112执行依据图21的转译操作所转译的各种形式的条件ALU指令的操作步骤。
[0036] 图29是一方块图,显示本发明对于非条件分支指令进行预测的微处理器100的一实施例。
[0037] 图30是一方块示意图,显示图29的指令转译器对于条件ALU指令的转译的一实施例。
[0038] 图31A和图31B是一流程图显示本发明图29的微处理器执行图30的一条件ALU指令的一实施例。
[0039] 图32是一方块图,显示本发明在转译过程中处理修正后立即常数的微处理器的一实施例。
[0040] 图33是一方块图,显示本发明将一立即操作数指令选择性地转译为一个ROR微指令与一ALU微指令或是转译为一立即ALU微指令的一实施例。
[0041] 图34A和图34B是一流程图,显示本发明图32的微处理器100执行图33的一立即操作数指令的操作的一实施例。
[0042] [主要元件标号说明]
[0043] 微处理器(处理核心) 100        指令快取 102
[0044] 硬件指令转译器 104            寄存器文件 106
[0045] 存储器子系统 108              执行管线 112
[0046] 指令撷取单元与分支预测器 114  ARM程序计数器(PC)寄存器 116
[0047] x86指令指针(IP)寄存器 118
[0048] 配置寄存器(configuration register) 122
[0049] ISA指令 124                   微指令 126
[0050] 结果 128
[0051] 指令模式指针(instruction mode indicator) 132
[0052] 撷取地址 134
[0053] 环境模式指针(environment mode indicator) 136
[0054] 指令格式化程序 202            简单指令转译器(SIT) 204
[0055] 复杂指令转译器(CIT) 206       多工器(mux) 212
[0056] x86简单指令转译器 222         ARM简单指令转译器 224
[0057] 微程序计数器(micro-program counter,micro-PC) 232
[0058] 微码只读存储器 234
[0059] 微程序器(microsequencer) 236
[0060] 指令间接寄存器(instruction indirection register,IIR) 235
[0061] 微转译器(microtranslator) 237
[0062] 格式化ISA指令 242
[0063] 实行微指令(implementing microinstructions) 244
[0064] 实行微指令 246
[0065] 选择输入 248
[0066] 微码地址 252
[0067] 只读存储器地址 254
[0068] ISA指令信息 255
[0069] 预解码器(pre-decoder) 302
[0070] 指令字节队列(IBQ) 304
[0071] 长度解码器(length decoders)与涟波逻辑门(ripple logic) 306
[0072] 多工器队列(mux queue,MQ) 308
[0073] 多工器 312
[0074] 格式化指令队列(formatted instruction queue,FIQ) 314
[0075] ARM指令集状态 322
[0076] 微指令队列 401
[0077] 寄存器配置表(register allocation table,RAT) 402
[0078] 指令调度器(instruction dispatcher) 404
[0079] 保留站(reservation station) 406
[0080] 指令发布单元(instruction issue unit) 408
[0081] 整数/分支(integer/branch)单元 412
[0082] 媒体单元(media unit) 414
[0083] 加载/储存(load/store)单元 416
[0084] 浮点(floating point)单元 418
[0085] 重排缓冲器(reorder buffer,ROB) 422
[0086] 执行单元 424               ARM特定寄存器 502
[0087] x86特定寄存器 504          共享寄存器 506
[0088] 双核心微处理器 700         微指令快取 892
[0089] 条件旗标寄存器 926         多工器 922
[0090] 旗标总线 928               条件旗标数值 928/924
[0091] ISA条件旗标 902            条件满足(SAT)位 904
[0092] 预移位进位(PSC)位 906      使用移位进位(USE)位 908
[0093] 动态预测器 2932            预测器选择器 2934
[0094] 静态预测器 2936            动态预测 2982
[0095] 预测选择 2984              静态预测 2986
[0096] 历史更新 2974              误预测 2976
[0097] ALU微指令 3044             条件移动微指令 3046
[0098] 具条件码的条件ALU微指令 3045
[0099] 具条件码的不操作微指令 3047
[0100] 操作码字段 a202,a212,a222,a252,a272
[0101] 条件码字段 a204,a224,a254,a274
[0102] 来源寄存器1与2的字段 a206,a216,a256
[0103] 目的寄存器字段 a208,a218,a232,a258
[0104] 来源寄存器1的字段 a226     来源寄存器2的字段 a228
[0105] 立即操作数 3266            ROR微指令 3344
[0106] ALU微指令 3346             立即ALU微指令 3348
[0107] 操作码字段 b202,b212,b222,b232
[0108] 来源寄存器1的字段 b204,b214,b234
[0109] 来源寄存器2的字段 b235
[0110] 目的寄存器字段 b206,b216,b226,b236
[0111] 立即字段 b207              immed_8字段 b208,b228
[0112] rotate_imm字段 b209,b229  immediate-32字段 b218

具体实施方式

[0113] 名词定义
[0114] 指令集,是定义二进制制编码值的集合(即机器语言指令)与微处理器所执行的操作间的对应关系。机器语言程序基本上以二进制制进行编码,不过亦可使用其它进位制的系统,如部分早期IBM计算机的机器语言程序,虽然最终亦是以电压高低呈现二进制值的物理信号来表现,不过却是以十进制制进行编码。机器语言指令指示微处理器执行的操作如:将寄存器1内的操作数与寄存器2内的操作数相加并将结果写入寄存器3、将存储器地址
0x12345678的操作数减掉指令所指定的立即操作数并将结果写入寄存器5、依据寄存器7所指定的位数移动寄存器6内的数值、若是零旗标被设定时,在分支到指令后方的36个字节、将存储器地址0xABCD0000的数值加载寄存器8。因此,指令集是定义各个机器语言指令使微处理器执行所欲执行的操作的二进制编码值。需了解的是,指令集定义二进制值与微处理器操作间的对应关系,并不意味着单一个二进制值就会对应至单一个微处理器操作。具体来说,在部分指令集中,多个二进制值可能会对应至同一个微处理器操作。
[0115] 指令集架构(ISA),从微处理器家族的脉络来看包含(1)指令集;(2)指令集的指令所能存取的资源集(例如:存储器寻址所需的寄存器与模式);以及(3)微处理器响应指令集的指令执行所产生的例外事件集(例如:除以零、分页错误、存储器保护违反等)。因为程序撰写者,如组译器与编译器的撰写者,想要作出机器语言程序在一微处理器家族执行时,就需要此微处理器家族的ISA定义,所以微处理器家族的制造者通常会将ISA定义于操作者操作手册中。举例来说,2009年3月公布的Intel 64与IA-32架构软件开发者手册(Intel64and IA-32Architectures Software Developer’s Manual)即定义Intel 64与IA-32处理器架构的ISA。此软件开发者手册包含有五个章节,第一章是基本架构;第二A章是指令集参考A至M;第二B章是指令集参考N至Z;第三A章是系统编程指南;第三B章是系统编程指南第二部分,此手册系列为本案的参考文件。此种处理器架构通常被称为x86架构,本文中则是以x86、x86ISA、x86ISA家族、x86家族或是相似用语来说明。在另一个例子中,2010年公布的ARM架构参考手册,ARM v7-A与ARM v7-R版本Errata markup,定义ARM处理器架构的ISA。此参考手册系列为参考文件。此ARM处理器架构的ISA在此亦被称为ARM、ARM ISA、ARM ISA家族、ARM家族或是相似用语。其它众所周知的ISA家族还有IBM System/360/370/390与z/Architecture、DEC VAX、Motorola 68k、MIPS、SPARC、PowerPC与DEC Alpha等等。ISA的定义会涵盖处理器家族,因为处理器家族的发展中,制造者会通过在指令集中增加新指令、以及/或在寄存器组中增加新的寄存器等方式来改进原始处理器的ISA。举例来说,随着x86程序集架构的发展,其于Intel Pentium III处理器家族导入一组128位的多媒体扩展指令集(MMX)寄存器作为单指令多重数据流扩展(SSE)指令集的一部分,而x86ISA机器语言程序已经开发来利用XMM寄存器以提升效能,虽然现存的x86ISA机器语言程序并不使用单指令多重数据流扩展指令集的XMM寄存器。此外,其它制造商亦设计且制造出可执行x86ISA机器语言程序的微处理器。例如,超微半导体(AMD)与威盛电子(VIA Technologies)即在x86ISA增加新技术特征,如超微半导体的3DNOW!单指令多重数据流(SIMD)向量处理指令,以及威盛电子的Padlock安全引擎随机数产生器(random number generator)与先进解码引擎(advanced cryptography engine)的技术,前述技术都是采用x86ISA的机器语言程序,但却非由现有的Intel微处理器实现。以另一个实例来说明,ARM ISA原本定义ARM指令集状态具有4字节的指令。然而,随着ARM ISA的发展而增加其它指令集状态,如具有2字节指令以提升编码密度的Thumb指令集状态以及用以加速Java字节码程序的Jazelle指令集状态,而ARM ISA机器语言程序已被发展来使用部分或所有其它ARM ISA指令集状态,即使现存的ARM ISA机器语言程序并非采用这些其它ARM ISA指令集状态。
[0116] 指令集架构(ISA)机器语言程序,包含ISA指令序列,即ISA指令集对应至程序撰写者要程序执行的操作序列的二进制编码值序列。因此,x86ISA机器语言程序包含x86ISA指令序列,ARM ISA机器语言程序则包含ARM ISA指令序列。机器语言程序指令是存放于存储器内,且由微处理器撷取并执行。
[0117] 硬件指令转译器,包含多个晶体管的配置,用以接收ISA机器语言指令(例如x86ISA或是ARM ISA机器语言指令)作为输入,并对应地输出一个或多个微指令至微处理器的执行管线。执行管线执行微指令的执行结果是由ISA指令所定义。因此,执行管线通过对这些微指令的集体执行来“实现”ISA指令。也就是说,执行管线通过对于硬件指令转译器输出的实行微指令的集体执行,实现所输入ISA指令所指定的操作,以产生此ISA指令定义的结果。因此,硬件指令转译器可视为是将ISA指令“转译(translate)”为一个或多个实行微指令。本实施例所描述的微处理器具有硬件指令转译器以将x86ISA指令与ARM ISA指令转译为微指令。不过,需理解的是,硬件指令转译器并非必然可对x86使用者操作手册或是ARM使用者操作手册所定义的整个指令集进行转译,而往往只能转译这些指令中一个子集合,如同绝大多数x86ISA与ARM ISA处理器只支持其对应的使用者操作手册所定义的一个指令子集合。具体来说,x86使用者操作手册定义由硬件指令转译器转译的指令子集合,不必然就对应至所有现存的x86ISA处理器,ARM使用者操作手册定义由硬件指令转译器转译的指令子集合,不必然就对应至所有现存的ARM ISA处理器。
[0118] 执行管线,是一多层级序列(sequence of stages)。此多层级序列的各个层级分别具有硬件逻辑与一硬件寄存器。硬件寄存器保持硬件逻辑的输出信号,并依据微处理器的时脉信号,将此输出信号提供至多层级序列的下一层级。执行管线可以具有多个多层级序列,例多重执行管线。执行管线接收微指令作为输入信号,并相应地执行微指令所指定的操作以输出执行结果。微指令所指定,且由执行管线的硬件逻辑所执行的操作包括但不限于算术、逻辑、存储器加载/储存、比较、测试、与分支解析,对进行操作的数据格式包括但不限于整数、浮点数、字、二进编码十进数(BCD)、与压缩格式(packed format)。执行管线执行微指令以实现ISA指令(如x86与ARM),藉以产生ISA指令所定义的结果。执行管线不同于硬件指令转译器。具体来说,硬件指令转译器产生实行微指令,执行管线则是执行这些指令,但不产生这些实行微指令。
[0119] 指令快取,是微处理器内的一个随机存取存储装置,微处理器将ISA机器语言程序的指令(例如x86ISA与ARM ISA的机器语言指令)放置其中,这些指令是撷取自系统存储器并由微处理器依据ISA机器语言程序的执行流程来执行。具体来说,ISA定义一指令地址寄存器以持有下一个待执行ISA指令的存储器地址(举例来说,在x86ISA是定义为指令指针(IP)而在ARM ISA是定义为程序计数器(PC),而在微处理器执行机器语言程序以控制程序流程时,微处理器会更新指令地址寄存器的内容。ISA指令被快取来供后续撷取之用。当该寄存器所包含的下一个机器语言程序的ISA指令地址是位于目前的指令快取中,可依据指令寄存器的内容快速地从指令快取撷取ISA指令由系统存储器中取出该ISA指令。尤其是,此程序是基于指令地址寄存器(如指令指针(IP)或是程序计数器(PC))的存储器地址向指令快取取得数据,而非特地运用一加载或储存指令所指定的存储器地址来进行数据撷取。因此,将指令集架构的指令视为数据(例如采用软件转译的系统的硬件部分所呈现的数据)的专用数据快取,特地运用一加载/储存地址来存取,而非基于指令地址寄存器的数值做存取的,就不是此处所称的指令快取。此外,可取得指令与数据的混合式快取,是基于指令地址寄存器的数值以及基于加载/储存地址,而非仅仅基于加载/储存地址,亦被涵盖在本说明对指令快取的定义内。在本说明内容中,加载指令是指将数据由存储器读取至微处理器的指令,储存指令是指将数据由微处理器写入存储器的指令。
[0120] 微指令集,是微处理器的执行管线能够执行的指令(微指令)的集合。
[0121] 实施例说明
[0122] 本发明实施例揭露的微处理器可通过硬件将其对应的x86ISA与ARM ISA指令转译为由微处理器执行管线直接执行的微指令,以达到可执行x86ISA与ARM ISA机器语言程序的目的。此微指令是由不同于x86ISA与ARM ISA的微处理器微架构(microarchitecture)的微指令集所定义。由于本文所述的微处理器需要执行x86与ARM机器语言程序,微处理器的硬件指令转译器会将x86与ARM指令转译为微指令,并将这些微指令提供至微处理器的执行管线,由微处理器执行这些微指令以实现前述x86与ARM指令。由于这些实行微指令是直接由硬件指令转译器提供至执行管线来执行,而不同于采用软件转译器的系统需于执行管线执行指令前,将预先储存本机(host)指令至存储器,因此,前揭微处理器具有潜力能够以较快的执行速度执行x86与ARM机器语言程序。
[0123] 图1是一方块图显示本发明执行x86ISA与ARM ISA的机器语言程序的微处理器100的实施例。此微处理器100具有一指令快取102;一硬件指令转译器104,用以由指令快取102接收x86ISA指令与ARM ISA指令124并将其转译为微指令126;一执行管线112,执行由硬件指令转译器104接收的微指令126以产生微指令结果128,该结果是以操作数的型式回传至执行管线112;一寄存器文件106与一存储器子系统108,分别提供操作数至执行管线112并由执行管线112接收微指令结果128;一指令撷取单元与分支预测器114,提供一撷取地址134至指令快取102;一ARM ISA定义的程序计数器寄存器116与一x86ISA定义的指令指针寄存器118,其依据微指令结果128进行更新,且提供其内容至指令撷取单元与分支预测器
114;以及多个配置寄存器122,提供一指令模式指针132与一环境模式指针136至硬件指令转译器104与指令撷取单元与分支预测器114,并且是基于微指令结果128进行更新。
[0124] 由于微处理器100可执行x86ISA与ARM ISA机器语言指令,微处理器100依据程序流程由系统存储器(未图标)撷取指令至微处理器100。微处理器100存取最近撷取的x86ISA与ARM ISA的机器语言指令至指令快取102。指令撷取单元114将依据由系统存储器撷取的x86或ARM指令字节区段,产生一撷取地址134。若是命中指令快取102,指令快取102将位于撷取地址134的x86或ARM指令字节区段提供至硬件指令转译器104,否则由系统存储器中撷取指令集架构的指令124。指令撷取单元114基于ARM程序计数器116与x86指令指针118的值产生撷取地址134。具体来说,指令撷取单元114会在一撷取地址寄存器中维持一撷取地址。任何时候指令撷取单元114撷取到新的ISA指令字节区段,它就会依据此区段的大小更新撷取地址,并依据既有方式依序进行,直到出现一控制流程事件。控制流程事件包含例外事件的产生、分支预测器114的预测显示撷取区段内有一将发生的分支(taken branch)、以及由执行管线112响应一非由分支预测器114所预测的将发生分支指令的执行结果,而对ARM程序计数器116与x86指令指针118进行的更新。指令撷取单元114将撷取地址相应地更新为例外处理程序地址、预测目标地址或是执行目标地址以响应一控制流程事件。在一实施例中,指令快取102是一混合快取,以存取ISA指令124与数据。值得注意的是,在此混合快取的实施例中,虽然混合快取可基于一加载/储存地址将数据写入快取或由快取读取数据,在微处理器100是由混合快取撷取指令集架构的指令124的情况下,混合快取是基于ARM程序计数器116与x86指令指针118的数值来存取,而非基于加载/储存地址。指令快取102可以是一随机存取存储器装置。
[0125] 指令模式指针132是一状态指示微处理器100当前是否正在撷取、格式化(formatting)/解码、以及将x86ISA或ARM ISA指令124转译为微指令126。此外,执行管线
112与存储器子系统108接收此指令模式指针132,此指令模式指针132会影响微指令126的执行方式,尽管只是微指令集内的一个小集合受影响而已。x86指令指针寄存器118持有下一个待执行的x86ISA指令124的存储器地址,ARM程序计数器寄存器116持有下一个待执行的ARM ISA指令124的存储器地址。为了控制程序流程,微处理器100在其执行x86与ARM机器语言程序时,分别更新x86指令指针寄存器118与ARM程序计数器寄存器116,至下一个指令、分支指令的目标地址或是例外处理程序地址。在微处理器100执行x86与ARM ISA的机器语言程序的指令时,微处理器100由系统存储器撷取机器语言程序的指令集架构的指令,并将其置入指令快取102以取代最近较不被撷取与执行的指令。此指令撷取单元114基于x86指令指针寄存器118或是ARM程序计数器寄存器116的数值,并依据指令模式指针132指示微处理器100正在撷取的ISA指令124是x86或是ARM模式来产生撷取地址134。在一实施例中,x86指令指针寄存器118与ARM程序计数器寄存器116可实施为一共享的硬件指令地址寄存器,用以提供其内容至指令撷取单元与分支预测器114并由执行管线112依据指令模式指针132指示的模式是x86或ARM与x86或ARM的语意(semantics)来进行更新。
[0126] 环境模式指针136一状态指示微处理器100是使用x86或ARM ISA的语意于此微处理器100所操作的多种执行环境,例如虚拟存储器、例外事件、快取控制、与全域执行时间保护。因此,指令模式指针132与环境模式指针136共同产生多个执行模式。在第一种模式中,指令模式指针132与环境模式指针136都指向x86ISA,微处理器100是作为一般的x86ISA处理器。在第二种模式中,指令模式指针132与环境模式指针136都指向ARM ISA,微处理器100是作为一般的ARM ISA处理器。在第三种模式中,指令模式指针132指向x86ISA,不过环境模式指针136则是指向ARM ISA,此模式有利于在ARM操作系统或是超管理器的控制下执行使用者模式x86机器语言程序;相反地,在第四种模式中,指令模式指针132是指向ARM ISA,不过环境模式指针136则是指向x86ISA,此模式有利于在x86操作系统或超管理器的控制下执行使用者模式ARM机器语言程序。指令模式指针132与环境模式指针136的数值在重置(reset)之初就已确定。在一实施例中,此初始值是被视为微码常数进行编码,不过可通过熔断配置熔丝与/或使用微码修补进行修改。在另一实施例中,此初始值则是由一外部输入提供至微处理器100。在一实施例中,环境模式指针136只在由一重置至ARM(reset-to-ARM)指令124或是一重置至x86(reset-to-x86)指令124执行重置后才会改变(请参照下述图6A及图6B);亦即,在微处理器100正常运作而未由一般重置、重置至x86或重置至ARM指令124执行重置时,环境模式指针136并不会改变。
[0127] 硬件指令转译器104接收x86与ARM ISA的机器语言指令124作为输入,相应地提供一个或多个微指令126作为输出信号以实现x86或ARM ISA指令124。执行管线112执行前揭一个或多个微指令126,其集体执行的结果实现x86或ARM ISA指令124。也就是说,这些微指令126的集体执行可依据输入端所指定的x86或ARM ISA指令124,来执行x86或是ARM ISA指令124所指定的操作,以产生x86或ARM ISA指令124所定义的结果。因此,硬件指令转译器104将x86或ARM ISA指令124转译为一个或多个微指令126。硬件指令转译器104包含一组晶体管,以一预设方式进行配置来将x86ISA与ARM ISA的机器语言指令124转译为实行微指令
126。硬件指令转译器104并具有布尔逻辑门以产生实行微指令126(如图2所示的简单指令转译器204)。在一实施例中,硬件指令转译器104并具有一微码只读存储器(如图2中复杂指令转译器206的元件234),硬件指令转译器104利用此微码只读存储器,并依据复杂ISA指令
124产生实行微指令126,这部分将在图2的说明内容会有进一步的说明。就一较佳实施例而言,硬件指令转译器104不必然要能转译x86使用者操作手册或是ARM使用者操作手册所定义的整个ISA指令124集,而只要能够转译这些指令的一个子集合即可。具体来说,由x86使用者操作手册定义且由硬件指令转译器104转译的ISA指令124的子集合,并不必然对应至任何Intel开发的既有x86ISA处理器,而由ARM使用者操作手册定义且由硬件指令转译器
104转译的ISA指令124的子集合并不必然对应至任何由ARM Ltd.开发的既有的ISA处理器。
前揭一个或多个用以实现x86或ARM ISA指令124的实行微指令126,可由硬件指令转译器
104一次全部提供至执行管线112或是依序提供。本实施例的优点在于,硬件指令转译器104可将实行微指令126直接提供至执行管线112执行,而不需要将这些微指令126储存于设置两者间的存储器。在图1的微处理器100的实施例中,当微处理器100执行x86或是ARM机器语言程序时,微处理器100每一次执行x86或是ARM指令124时,硬件指令转译器104就会将x86或ARM机器语言指令124转译为一个或多个微指令126。不过,图8的实施例则是利用一微指令快取以避免微处理器100每次执行x86或ARM ISA指令124所会遭遇到的重复转译的问题。
硬件指令转译器104的实施例在图2会有更详细的说明。
[0128] 执行管线112执行由硬件指令转译器104提供的实行微指令126。基本上,执行管线112是一通用高速微指令处理器。虽然本文所描述的功能是由具有x86/ARM特定特征的执行管线112执行,但大多数x86/ARM特定功能其实是由此微处理器100的其它部分,如硬件指令转译器104,来执行。在一实施例中,执行管线112执行由硬件指令转译器104接收到的实行微指令126的寄存器重命名、超纯量发布、与非循序执行。执行管线112在图4会有更详细的说明。
[0129] 微处理器100的微架构包含:(1)微指令集;(2)微指令集的微指令126所能取用的资源集,此资源集是x86与ARM ISA的资源的超集(superset);以及(3)微处理器100相应于微指令126的执行所定义的微例外事件(micro-exception)集,此微例外事件集x86ISA与ARM ISA的例外事件的超集。此微架构不同于x86ISA与ARM ISA。具体来说,此微指令集在许多面向是不同于x86ISA与ARM ISA的指令集。首先,微指令集的微指令指示执行管线112执行的操作与x86ISA与ARM ISA的指令集的指令指示微处理器执行的操作并非一对一对应。虽然其中许多操作相同,不过,仍有一些微指令集指定的操作并非x86ISA及/或ARM ISA指令集所指定。相反地,有一些x86ISA及/或ARM ISA指令集指定的操作并非微指令集所指定。
其次,微指令集的微指令是以不同于x86ISA与ARM ISA指令集的指令的编码方式进行编码。
亦即,虽然有许多相同的操作(如:相加、偏移、加载、返回)在微指令集以及x86与ARM ISA指令集中都有指定,微指令集与x86或ARM ISA指令集的二进制操作码值对应表并没有一对一对应。微指令集与x86或ARM ISA指令集的二进制操作码值对应表相同通常是巧合,其间仍不具有一对一的对应关系。第三,微指令集的微指令位字段与x86或是ARM ISA指令集的指令位字段也不是一对一对应。
[0130] 整体而言,微处理器100可执行x86ISA与ARM ISA机器语言程序指令。然而,执行管线112本身无法执行x86或ARM ISA机器语言指令;而是执行由x86ISA与ARM ISA指令转译成的微处理器100微架构的微指令集的实行微指令126。然而,虽然此微架构与x86ISA以及ARM ISA不同,本发明亦提出其它实施例将微指令集与其它微架构指定的资源开放给使用者。在这些实施例中,此微架构可有效地作为在x86ISA与ARM ISA外的一个具有微处理器所能执行的机器语言程序的第三ISA。
[0131] 下表(表1)描述本发明微处理器100的一实施例的微指令集的微指令126的一些位字段。
[0132]
[0133] 下表(表2)描述本发明微处理器100的一实施例的微指令集的一些微指令。
[0134]
[0135]
[0136]
[0137] 微处理器100也包含一些微架构特定的资源,如微架构特定的通用寄存器、媒体寄存器与区段寄存器(如用于重命名的寄存器或由微码所使用的寄存器)以及未见于x86或ARM ISA的控制寄存器,以及一私人随机存取存储器(PRAM)。此外,此微架构可产生例外事件,亦即前述的微例外事件。这些例外事件未见于x86或ARM ISA或是由它们所指定,而通常是微指令126与相关微指令126的重新执行(replay)。举例来说,这些情形包含:加载错过(load miss)的情况,其是执行管线112假设加载操作并于错过时重新执行此加载微指令126;错过转译后备缓冲区(TLB),在查表(page table walk)与转译后备缓冲区填满后,重新执行此微指令126;浮点微指令126接收一异常操作数(denormal operand)但此操作数被评估为正常情况,需在执行管线112正常化此操作数后重新执行此微指令126;一加载微指令126执行后检测到一个更早的储存(store)微指令126与其地址冲突(address-
colliding)需要重新执行此加载微指令126。需理解的是,本文表1所列的位字段,表2所列的微指令,以及微架构指定的资源与微架构指定的例外事件,只是作为例示说明本发明的微架构,而非穷尽本发明的所有可能实施例。
[0138] 寄存器文件106包含微指令126所使用的硬件寄存器,以持有资源与/或目的操作数。执行管线112将其结果128写入寄存器文件106,并由寄存器文件106为微指令126接收操作数。硬件寄存器是引用(instantiate)x86ISA定义与ARM ISA定义的通用寄存器是共享寄存器文件106中的一些寄存器。举例来说,在一实施例中,寄存器文件106是引用十五个32位的寄存器,由ARM ISA寄存器R0至R14以及x86ISA累积寄存器(EAX register)至R14D寄存器所共享。因此,若是一第一微指令126将一数值写入ARM R2寄存器,随后一后续的第二微指令126读取x86累积寄存器将会接收到与第一微指令126写入相同的数值,反之亦然。此技术特征有利于使x86ISA与ARM ISA的机器语言程序得以快速通过寄存器进行沟通。举例来说,假设在ARM机器语言操作系统执行的ARM机器语言程序能使指令模式132改变为x86ISA,并将控制权转换至一x86机器语言程序以执行特定功能,因为x86ISA可支持一些指令,其执行操作的速度快于ARM ISA,在这种情形下将有利于执行速度的提升。ARM程序透过寄存器文件106的共享寄存器提供需要的数据给x86执行程序。反之,x86执行程序可将执行结果提供至寄存器文件106的共享寄存器内,以使ARM程序在x86执行程序回复后可见到此执行结果。相似地,在x86机器语言操作系统执行的x86机器语言程序可使指令模式132改变为ARM ISA并将控制权转换至ARM机器语言程序;此x86程序可通过寄存器文件106的共享寄存器提供所需的数据给ARM执行程序,而此ARM执行程序可通过寄存器文件106的共享寄存器提供执行结果,以使x86程序在ARM执行程序回复后可见到此执行结果。因为ARM R15寄存器是一独立引用的ARM程序计数器寄存器116,因此,引用x86R15D寄存器的第十六个32位寄存器并不分享给ARM R15寄存器。此外,在一实施例中,x86的十六个128位XMM0至XMM15寄存器与十六个128位进阶单指令多重数据扩展(Advanced SIMD(“Neon”))寄存器的32位区段是分享给三十二个32位ARM VFPv3浮点寄存器。寄存器文件106亦引用旗标寄存器(即x86EFLAGS寄存器与ARM条件旗标寄存器),以及x86ISA与ARM ISA所定义的多种控制权与状态寄存器,这些架构控制与状态寄存器包括x86架构的特定模型寄存器(model specific registers,
MSRs)与保留给ARM架构的协同处理器(8-15)寄存器。此寄存器文件106亦引用非架构寄存器,如用于寄存器重命名或是由微码234所使用的非架构通用寄存器,以及非架构x86特定模型寄存器与实作定义的或是由制造商指定的ARM协同处理器寄存器。寄存器文件106在图
5会有更进一步的说明。
[0139] 存储器子系统108包含一由高速缓存构成的高速缓存阶层架构(在一实施例中包含第1层(level-1)指令快取102、第1层(level-1)数据快取与第2层混合快取)。此存储器子系统108包含多种存储器请求队列,如加载、储存、填入、窥探、合并写入归并缓冲区。存储器子系统亦包含一存储器管理单元(MMU)。存储器管理单元具有转译后备缓冲区(TLBs),尤以独立的指令与数据转译后备缓冲区为佳。存储器子系统还包含一查表引擎(table walk engine)以获得虚拟与实体地址间的转译,来回应转译后备缓冲区的错失。虽然在图1中指令快取102与存储器子系统108是显示为各自独立,不过,在逻辑上,指令快取102亦是存储器子系统108的一部分。存储器子系统108是设定使x86与ARM机器语言程序分享一共同的存储空间,以使x86与ARM机器语言程序容易通过存储器互相沟通。
[0140] 存储器子系统108得知指令模式132与环境模式136,使其能够在适当ISA内容中执行多种操作。举例来说,存储器子系统108依据指令模式指针132指示为x86或ARM ISA,来执行特定存储器存取违规的检验(例如过限检验(limit violation check))。在另一实施例中,响应环境模式指针136的改变,存储器子系统108会更新(flush)转译后备缓冲区;不过在指令模式指针132改变时,存储器子系统108并不相应地更新转译后备缓冲区,以在前述指令模式指针132与环境模式指针136分指x86与ARM的第三与第四模式中提供较佳的效能。在另一实施例中,回应一转译后备缓冲区错失(TKB miss),查表引擎依据环境模式指针136指示为x86或ARM ISA,从而决定利用x86分页表或ARM分页表来执行一分页查表动作以取出转译后备缓冲区。在另一实施例中,若是环境状态指标136指示为x86ISA,存储器子系统108检查会影响快取策略的x86ISA控制寄存器(如CR0CD与NW位)的架构状态;若是环境模式指针136指示为ARM ISA,则检查相关的ARM ISA控制寄存器(如SCTLR I与C位)的架构模式。在另一实施例中,若是状态指标136指示为x86ISA,存储器子系统108检查会影响存储器管理的x86ISA控制寄存器(如CR0PG位)的架构状态;若是环境模式指针136指示为ARM ISA,则检查相关的ARM ISA控制寄存器(如SCTLR M位)的架构模式。在另一实施例中,若是状态指标
136指示为x86ISA,存储器子系统108检查会影响对准检测的x86ISA控制寄存器(如CR0AM位)的架构状态,若是环境模式指针136指示为ARM ISA,则检查相关的ARM ISA控制寄存器(如SCTLR A位)的架构模式。在另一实施例中,若是状态指标136指示为x86ISA,存储器子系统108(以及用于特权指令的硬件指令转译器104)检查当前所指定特权级(CPL)的x86ISA控制寄存器的架构状态;若是环境模式指针136指示为ARM ISA,则检查指示使用者或特权模式的相关ARM ISA控制寄存器的架构模式。不过,在一实施例中,x86ISA与ARM ISA分享微处理器100中具有相似功能的控制字节/寄存器,微处理器100并不对各个指令集架构引用独立的控制字节/寄存器。
[0141] 虽然配置寄存器122与寄存器文件106在图标中是各自独立,不过配置寄存器122可被理解为寄存器文件106的一部分。配置寄存器122具有一全域配置寄存器,用以控制微处理器100在x86ISA与ARM ISA各种不同面向的操作,例如使多种特征生效或失效的功能。全域配置寄存器可使微处理器100执行ARM ISA机器语言程序的能力失效,即让微处理器
100成为一个仅能执行x86指令的微处理器100,并可使其它相关且专属于ARM的能力(如启动x86(launch-x86)与重置至x86的指令124与本文所称的实作定义(implementation-
defined)协同处理器寄存器)失效。全域配置寄存器亦可使微处理器100执行x86ISA机器语言程序的能力失效,亦即让微处理器100成为一个仅能执行ARM指令的微处理器100,并可使其它相关的能力(如启动ARM与重置至ARM的指令124与本文所称的新的非架构特定模型寄存器)失效。在一实施例中,微处理器100在制造时具有预设的配置设定,如微码234中的硬式编码值,此微码234在启动时利用此硬式编码值来设定微处理器100的配置,例如写入编码寄存器122。不过,部分编码寄存器122是以硬件而非以微码234进行设定。此外,微处理器
100具有多个熔丝,可由微码234进行读取。这些熔丝可被熔断以修改预设配置值。在一实施例中,微码234读取熔丝值,对预设值与熔丝值执行一非互斥或(exclusive-OR)操作,并将操作结果写入配置寄存器122。此外,对于熔丝值修改的效果可利用一微码234修补而回复。
在微处理器100能够执行x86与ARM程序的情况下,全域配置寄存器可用于确认微处理器100(或如图7所示处理器的多核心部分的一特定核心100)在重置或如图6A及图6B所示在响应x86形式的INIT指令时,会以x86微处理器的形态还是以ARM微处理器的形态进行开机。全域配置寄存器并具有一些位提供起始预设值给特定的架构控制寄存器,如ARM ISA SCTLT与CPACR寄存器。图7所示的多核心的实施例中仅具有一个全域配置寄存器,即使各核心的配置可分别设定,如在指令模式指针132与环境模式指针136都设定为x86或ARM时,选择以x86核心或是ARM核心开机。此外,启动ARM指令126与启动x86指令126可用以在x86与ARM指令模式132间动态切换。在一实施例中,全域配置寄存器可通过一x86RDMSR指令对一新的非架构特定模型寄存器进行读取,并且其中部分的控制位可通过x86WRMSR指令对前揭新的非架构特定模型寄存器的写入来进行写入操作。全域配置寄存器还可通过ARM MCR/MCRR指令对一对应至前揭新的非架构特定模型寄存器的ARM协同处理器寄存器进行读取,而其中部分的控制位可通过ARM MRC/MRRC指令对应至此新的非架构特定模型寄存器的ARM协同处理器寄存器的写入来进行写入操作。
[0142] 配置寄存器122并包含多种不同的控制寄存器从不同面向控制微处理器100的操作。这些非x86(non-x86)/ARM的控制寄存器包括本文所称的全域控制寄存器、非指令集架构控制寄存器、非x86/ARM控制寄存器、通用控制寄存器、以及其它类似的寄存器。在一实施例中,这些控制寄存器可利用x86RDMSR/WRMSR指令至非架构特定模型寄存器(MSRs)进行存取、以及利用ARM MCR/MRC(或MCRR/MRRC)指令至新实作定义的协同处理器寄存器进行存取。举例来说,微处理器100包含非x86/ARM的控制寄存器,以确认微型(fine-grained)快取控制,此微型快取控制是小于x86ISA与ARM ISA控制寄存器所能提供者。
[0143] 在一实施例中,微处理器100提供ARM ISA机器语言程序通过实作定义ARM ISA协同处理器寄存器存取x86ISA特定模型寄存器,这些实作定义ARM ISA协同处理器寄存器是直接对应于相对应的x86特定模型寄存器。此特定模型寄存器的地址是指定于ARM ISA R1寄存器。此数据是由MRC/MRRC/MCR/MCRR指令所指定的ARM ISA寄存器读出或写入。在一实施例中,特定模型寄存器的一子集合是以密码保护,亦即指令在尝试存取特定模型寄存器时必须使用密码。在此实施例中,密码是指定于ARM R7:R6寄存器。若是此存取操作导致x86通用保护错误,微处理器100随即产生一ARM ISA未定义指令中止模式(UND)例外事件。在一实施例中,ARM协同处理器4(地址为:0,7,15,0)存取相对应的x86特定模型寄存器。
[0144] 微处理器100并包含一个耦接至执行管线112的中断控制器(未图示)。在一实施例中,此中断控制器是一x86型式的先进可编程中断控制器(APIC)。中断控制器将x86ISA中断事件对应至ARM ISA中断事件。在一实施例中,x86INTR对应至ARM IRQ中断事件;x86NMI是对应至ARM IRQ中断事件;x86INIT在微处理器100启动时引发起动重置循序过程(INIT-reset sequence),无论那一个指令集架构(x86或ARM)原本是由硬件重置启动的;x86SMI对应至ARM FIQ中断事件;以及x86STPCLK、A20、Thermal、PREQ、与Rebranch则不对应至ARM中断事件。ARM机器语言能通过新的实作定义的ARM协同处理器寄存器存取先进可编程中断控制器的功能。在一实施例中,APIC寄存器地址是指定于ARM R0寄存器,此APIC寄存器的地址与x86的地址相同。在一实施例中,ARM协同处理器6通常用于操作系统执行的特权模式功能,此ARM协同处理器6的地址为:0,7,nn,0;其中nn为15时可存取先进可编程中断控制器;nn是12-14以存取总线接口单元,藉以在处理器总线上执行8位、16位与32位输入/输出循环。微处理器100并包含一总线接口单元(未图示),此总线接口单元耦接至存储器子系统
108与执行管线112,作为微处理器100与处理器总线的接口。在一实施例中,处理器总线符合一个Intel Pentium微处理器家族的微处理器总线的规格。ARM机器语言程序可通过新的实作定义的ARM协同处理器寄存器存取总线接口单元的功能以在处理器总线上产生输入/输出循环,即由输入输出总线传送至输入输出空间的一特定地址,藉以与系统芯片组沟通,举例来说,ARM机器语言程序可产生一SMI认可的特定循环或是关于C状态转换的输入输出循环。在一实施例中,输入输出地址是指定于ARM R0寄存器。在一实施例中,微处理器100具有电力管理能力,如已知的P-state与C-state管理。ARM机器语言程序可通过新的实作定义ARM协同处理器寄存器执行电力管理。在一实施例中,微处理器100包含一加密单元(未图示),此加密单元是位于执行管线112内。在一实施例中,此加密单元实质上类似于具有Padlock安全科技功能的VIA微处理器的加密单元。ARM机器语言程序能通过新的实作定义的ARM协同处理器寄存器取得加密单元的功能,如加密指令。在一实施例中,ARM协同处理器
5用于通常由使用者模式应用程序执行的使用者模式功能,例如那些使用加密单元的技术特征所产生的功能。
[0145] 在微处理器100执行x86ISA与ARM ISA机器语言程序时,每一次微处理器100执行x86或是ARM ISA指令124,硬件指令转译器104就会执行硬件转译。反之,采用软件转译的系统则能在多个事件中重复使用同一个转译,而非对之前已转译过的机器语言指令重复转译,因而有助于改善效能。此外,图8的实施例使用微指令快取以避免微处理器每一次执行x86或ARM ISA指令124时可能发生的重复转译操作。本发明的前述各个实施例所描述的方式是配合不同的程序特征及其执行环境,因此确实有助于改善效能。
[0146] 分支预测器114存取之前执行过的x86与ARM分支指令的历史数据。分支预测器114依据之前的快取历史数据,来分析由指令快取102所取得快取线是否存在x86与ARM分支指令以及其目标地址。在一实施例中,快取历史数据包含分支指令124的存储器地址、分支目标地址、一个方向指针、分支指令的种类、分支指令快取线的起始字节、以及一个显示是否横跨多个快取线的指标。在一实施例中,如2011年4月7日提出的美国第61/473,067号临时申请案“APPARATUS AND METHOD FOR USING BRANCH PREDICTION TO EFFICIENTLY EXECUTE CONDITIONAL NON-BRANCH INSTRUCTIONS”,其提供改善分支预测器114的效能以使其能预测ARM ISA条件非分支指令方向的方法。在一实施例中,硬件指令转译器104并包含一静态分支预测器,可依据执行码、条件码的类型、向后(backward)或向前(forward)等等数据,预测x86与ARM分支指令的方向与分支目标地址。
[0147] 本发明亦考虑多种不同的实施例以实现x86ISA与ARM ISA定义的不同特征的组合。举例来说,在一实施例中,微处理器100实现ARM、Thumb、ThumbEE与Jazelle指令集状态,但对Jazelle扩充指令集则是提供无意义的实现(trivial implementation);微处理器100并实现下述扩充指令集,包含:Thumb-2、VFPv3-D32、进阶单指令多重数据(Advanced SIMD(Neon))、多重处理、与VMSA;但不实现下述扩充指令集,包含:安全性扩充、快速内容切换扩充、ARM除错(ARM程序可通过ARM MCR/MRC指令至新的实作定义协同处理器寄存器取得x86除错功能)、效能检测计数器(ARM程序可通过新的实作定义协同处理器寄存器取得x86效能计数器)。举例来说,在一实施例中,微处理器100将ARM SETEND指令视为一无操作指令(NOP)并且只支持Little-endian数据格式。在另一实施例中,微处理器100并不实现
x86SSE4.2的功能。
[0148] 本发明考虑多个实施例的微处理器100的改良,例如对台湾台北的威盛电子股份有限公司所生产的商用微处理器VIA NanoTM进行改良。此Nano微处理器能够执行x86ISA机器语言程序,但无法执行ARM ISA机器语言程序。Nano微处理器包含高效能寄存器重命名、超纯量指令技术、非循序执行管线与一硬件转译器以将x86ISA指令转译为微指令供执行管线执行。本发明对于Nano硬件指令转译器的改良,使其除了可转译x86机器语言指令外,还可将ARM ISA机器语言指令转译为微指令供执行管线执行。硬件指令转译器的改良包含简单指令转译器的改良与复杂指令转译器的改良(亦包含微码在内)。此外,微指令集可加入新的微指令以支持ARM ISA机器语言指令与微指令间的转译,并可改善执行管线使能执行新的微指令。此外,Nano寄存器文件与存储器子系统亦可经改善使其能支持ARM ISA,亦包含特定寄存器的共享。分支预测单元可通过改善使其在x86分支预测外,亦能适用于ARM分支指令预测。此实施例的优点在于,因为在很大的程度上与ISA无关(largely ISA-agnostic)的限制,因而只需对于Nano微处理器的执行管线进行轻微的修改,即可适用于ARM ISA指令。对于执行管线的改良包含条件码旗标的产生与使用方式、用以更新与回报指令指针寄存器的语意、存取特权保护方法、以及多种存储器管理相关的功能,如存取违规检测、分页与转译后备缓冲区(TLB)的使用、与快取策略等。前述内容仅为例示,而非限定本发明,其中部分特征在后续内容会有进一步的说明。最后,如前述,x86ISA与ARM ISA定义的部分特征可能无法为前揭对Nano微处理器进行改良的实施例所支持,这些特征如x86SSE 4.2与ARM安全性扩充、快速内容切换扩充、除错与效能计数器,其中部分特征在后续内容会有更进一步的说明。此外,前揭通过对于Nano处理器的改良以支持ARM ISA机器语言程序,为一集成使用设计、测试与制造资源以完成能够执行x86与ARM机器语言程序的单集成电路产品的实施例,此单集成电路产品是涵盖市场绝大多数既存的机器语言程序,而符合现今市场潮流。本文所述的微处理器100的实施例实质上可被配置为x86微处理器、ARM微处理器、或是可同时执行x86ISA与ARM ISA机器语言程序微处理器。此微处理器可通过在单一微处理器100(或是图7的核心100)上的x86与ARM指令模式132间的动态切换以取得同时执行
x86ISA与ARM ISA机器语言程序的能力,亦可通过将多核心微处理100(对应于图7所示)的一个或多个核心配置为ARM核心而一或多个核心配置为x86核心,亦即通过在多核心100的每一个核心上进行x86与ARM指令间的动态切换,以取得同时执行x86ISA与ARM ISA机器语言程序的能力。此外,传统上,ARM ISA核心是被设计作为知识产权核心,而被各个第三者协力厂商纳入其应用,如系统芯片与/或嵌入式应用。因此,ARM ISA并不具有一特定的标准处理器总线,作为ARM核心与系统的其它部分(如芯片组或其它接口设备)间的接口。有利的是,Nano处理器已具有一高速x86型式处理器总线作为连接至存储器与接口设备的接口,以及一存储器一致性结构可协同微处理器100在x86计算机系统环境下支持ARM ISA机器语言程序的执行。
[0149] 请参照图2,图中是以方块图详细显示图1的硬件指令转译器104。此硬件指令转译器104包含硬件,更具体来说,就是晶体管的集合。硬件指令转译器104包含一指令格式化程序202,由图1的指令快取102接收指令模式指针132以及x86ISA与ARM ISA指令字节124的区块,并输出格式化的x86ISA与ARM ISA指令242;一简单指令转译器(SIT)204接收指令模式指针132与环境模式指针136,并输出实行微指令244与一微码地址252;一复杂指令转译器(CIT)206(亦称为一微码单元),接收微码地址252与环境模式指针136,并提供实行微指令246;以及一多工器212,其一输入端由简单指令转译器204接收微指令244,另一输入端由复杂指令转译器206接收微指令246,并提供实行微指令126至图1的执行管线112。指令格式化程序202在图3会有更详细的说明。简单指令转译器204包含一x86简单指令转译器222与一ARM简单指令转译器224。复杂指令转译器206包含一接收微码地址252的微程序计数器
(micro-PC)232,一由微程序计数器232接收只读存储器地址254的微码只读存储器234,一用以更新微程序计数器的微序列器236、一指令间接寄存器(instruction indirection register,IIR)235、以及一用以产生复杂指令转译器所输出的实行微指令246的微转译器(microtranslator)237。由简单指令转译器204所产生的实行微指令244与由复杂指令转译器206所产生的实行微指令246都属于微处理器100的微架构的微指令集的微指令126,并且都可直接由执行管线112执行。
[0150] 多工器212是受到一选择输入248所控制。一般的时候,多工器212会选择来自简单指令转译器204的微指令;然而,当简单指令转译器204遭遇一复杂x86或ARM ISA指令242而将控制权转移、或遭遇陷阱(traps)、以转移至复杂指令转译器206时,简单指令转译器204控制选择输入248让多工器212选择来自复杂指令转译器的微指令246。当寄存器配置表(RAT)402(请参照图4)遭遇到一个微指令126具有一特定位指出其为实现复杂ISA指令242序列的最后一个微指令126时,寄存器配置表402随即控制选择输入248使多工器212回复至选择来自简单指令转译器204的微指令244。此外,当重排缓冲器422(请参照图4)准备要使微指令126引退且该指令的状态指出需要选择来自复杂指令器的微指令时,重排缓冲器422控制选择输入248使多工器212选择来自复杂指令转译器206的微指令246。前揭需引退微指令126的情形如:微指令126已经导致一例外条件产生。
[0151] 简单指令转译器204接收ISA指令242,并且在指令模式指针132指示为x86时,将这些指令视为x86ISA指令进行解码,而在指令模式指针132指示为ARM时,将这些指令视为ARM ISA指令进行解码。简单指令转译器204并确认此ISA指令242为简单或是复杂ISA指令。简单指令转译器204能够为简单ISA指令242,输出所有用以实现此ISA指令242的实行微指令126;也就是说,复杂指令转译器206并不提供任何实行微指令126给简单ISA指令124。反之,复杂ISA指令124要求复杂指令转译器206提供至少部分(若非全部)的实行微指令126。在一实施例中,对ARM与x86ISA指令集的指令124的子集合而言,简单指令转译器204输出部分实现x86/ARM ISA指令126的微指令244,随后将控制权转移至复杂指令转译器206,由复杂指令转译器206接续输出剩下的微指令246来实现x86/ARM ISA指令126。多工器212是受到控制,首先提供来自简单指令转译器204的实行微指令244作为提供至执行管线112的微指令
126,随后提供来自复杂指令转译器206的实行微指令246作为提供至执行管线112的微指令
126。简单指令转译器204知道由硬件指令转译器104执行,以针对多个不同复杂ISA指令124产生实行微指令126的多个微码程序中的起始微码只读存储器234的地址,并且当简单指令转译器204对一复杂ISA指令242进行解码时,简单指令转译器204会提供相对应的微码程序地址252至复杂指令转译器206的微程序计数器232。简单指令转译器204输出实现ARM与x86ISA指令集中相当大比例的指令124所需的微指令244,尤其是对于需要由x86ISA与ARM ISA机器语言程序来说是较常执行的ISA指令124,而只有相对少数的指令124需要由复杂指令转译器206提供实行微指令246。依据一实施例,主要由复杂指令转译器206实现的x86指令如RDMSR/WRMSR、CPUID、复杂运算指令(如FSQRT与超越指令(transcendental 
instruction))、以及IRET指令;主要由复杂指令转译器206实现的ARM指令如MCR、MRC、MSR、MRS、SRS、与RFE指令。前揭列出的指令并非限定本发明,仅例示指出本发明复杂指令转译器
206所能实现的ISA指令的种类。
[0152] 当指令模式指针132指示为x86,x86简单指令转译器222对于x86ISA指令242进行解码,并且将其转译为实行微指令244;当指令模式指针132指示为ARM,ARM简单指令转译器224对于ARM ISA指令242进行解码,并将其转译为实行微指令244。在一实施例中,简单指令转译器204是一可由已知合成工具合成的布尔逻辑门方块。在一实施例中,x86简单指令转译器222与ARM简单指令转译器224是独立的布尔逻辑门方块;不过,在另一实施例中,x86简单指令转译器222与ARM简单指令转译器224是位于同一个布尔逻辑门方块。在一实施例中,简单指令转译器204在单一时脉周期中转译最多三个ISA指令242并提供最多六个实行微指令244至执行管线112。在一实施例中,简单指令转译器204包含三个次转译器(未图示),各个次转译器转译单一个格式化的ISA指令242,其中,第一个转译器能够转译需要不多于三个实行微指令126的格式化ISA指令242;第二个转译器能够转译需要不多于两个实行微指令126的格式化ISA指令242;第三个转译器能后转译需要不多于一个实行微指令126的格式化ISA指令242。在一实施例中,简单指令转译器204包含一硬件状态机器使其能够在多个时脉周期输出多个微指令244以实现一个ISA指令242。
[0153] 在一实施例中,简单指令转译器204并依据指令模式指针132与/或环境模式指针136,执行多个不同的例外事件检测。举例来说,若是指令模式指针132指示为x86且x86简单指令转译器222对一个就x86ISA而言是无效的ISA指令124进行解码,简单指令转译器204随即产生一个x86无效操作码例外事件;相似地,若是指令模式指针132指示为ARM且ARM简单指令转译器224对一个就ARM ISA而言是无效的ISA指令124进行解码,简单指令转译器204随即产生一个ARM未定义指令例外事件。在另一实施例中,若是环境模式指针136指示为x86ISA,简单指令转译器204随即检测是否其所遭遇的每个x86ISA指令242需要一特别特权级(particular privilege level),若是,检测当前特权级(CPL)是否满足此x86ISA指令
242所需的特别特权级,并于不满足时产生一例外事件;相似地,若是环境模式指针136指示为ARM ISA,简单指令转译器204随即检测是否每个格式化ARM ISA指令242需要一特权模式指令,若是,检测当前的模式是否为特权模式,并于现在模式为使用者模式时,产生一例外事件。复杂指令转译器206对于特定复杂ISA指令242亦执行类似的功能。
[0154] 复杂指令转译器206输出一系列实行微指令246至多工器212。微码只读存储器234储存微码程序的只读存储器指令247。微码只读存储器234输出只读存储器指令247以响应由微码只读存储器234取得的下一个只读存储器指令247的地址,并由微程序计数器232所持有。一般来说,微程序计数器232由简单指令转译器204接收其起始值252,以响应简单指令转译器204对于一复杂ISA指令242的解码操作。在其它情形,例如响应一重置或例外事件,微程序计数器232分别接收重置微码程序地址或适当的微码例外事件处理地址。微程序器236通常依据只读存储器指令247的大小,将微程序计数器232更新为微码程序的序列以及选择性地更新为执行管线112响应控制型微指令126(如分支指令)执行所产生的目标地址,以使指向微码只读存储器234内的非程序地址的分支生效。微码只读存储器234是制造于微处理器100的半导体芯片内。
[0155] 除了用来实现简单ISA指令124或部分复杂ISA指令124的微指令244外,简单指令转译器204也产生ISA指令信息255以写入指令间接寄存器235。储存于指令间接寄存器235的ISA指令信息255包含关于被转译的ISA指令124的信息,例如,确认由ISA指令所指定的来源与目的寄存器的信息以及ISA指令124的格式,如ISA指令124是在存储器的一操作数上或是在微处理器100的一架构寄存器106内执行。这样可藉此使微码程序能够变为通用,亦即不需对于各个不同的来源与/或目的架构寄存器106使用不同的微码程序。尤其是,简单指令转译器204知道寄存器文件106的内容,包含哪些寄存器是共享寄存器504,而能将x86ISA与ARM ISA指令124内提供的寄存器信息,通过ISA指令信息255的使用,转译至寄存器文件106内的适当的寄存器。ISA指令信息255包含一移位字段、一立即字段、一常数字段、各个来源操作数与微指令126本身的重命名信息、用以实现ISA指令124的一系列微指令126中指示第一个与最后一个微指令126的信息、以及储存由硬件指令转译器104对ISA指令124转译时所搜集到的有用信息的其它位。
[0156] 微转译器237由微码只读存储器234与间接指令寄存器235的内容接收只读存储器指令247,并相应地产生实行微指令246。微转译器237依据由间接指令寄存器235接收的信息,如依据ISA指令124的格式以及由其所指定的来源与/或目的架构寄存器106组合,来将特定只读存储器指令247转译为不同的微指令246系列。在一些实施例中,许多ISA指令信息255是与只读存储器指令247合并以产生实行微指令246。在一实施例中,各个只读存储器指令247大约有40位宽,并且各个微指令246大约有200位宽。在一实施例中,微转译器237最多能够由一个微读存储器指令247产生三个微指令246。微转译器237包含多个布尔逻辑门以产生实行微指令246。
[0157] 使用微转译器237的优点在于,由于简单指令转译器204本身就会产生ISA指令信息255,微码只读存储器234不需要储存间接指令寄存器235提供的ISA指令信息255,因而可以降低减少其大小。此外,因为微码只读存储器234不需要为了各个不同的ISA指令格式、以及各个来源与/或目的架构寄存器106的组合,提供一独立的程序,微码只读存储器234程序可包含较少的条件分支指令。举例来说,若是复杂ISA指令124是存储器格式,简单指令转译器204会产生微指令244的逻辑编程,其包含将来源操作数由存储器加载一暂时寄存器106的微指令244,并且微转译器237会产生微指令246用以将结果由暂时寄存器106储存至存储器;然而,若复杂ISA指令124是寄存器格式,此逻辑编程会将来源操作数由ISA指令124所指定的来源寄存器移动至暂时寄存器,并且微转译器237会产生微指令246用以将结果由暂时寄存器移动至由间接指令寄存器235所指定的架构目的寄存器106。在一实施例中,微转译器237的许多面向是类似于2010年4月23日提出的美国专利第12/766,244号申请案,在此是列为参考数据。不过,本案的微转译器237除了x86ISA指令124外,亦经改良以转译ARM ISA指令124。
[0158] 值得注意的是,微程序计数器232不同于ARM程序计数器116与x86指令指针118,亦即微程序计数器232并不持有ISA指令124的地址,微程序计数器232所持有的地址亦不落于系统存储器地址空间内。此外,更值得注意的是,微指令246是由硬件指令转译器104所产生,并且直接提供给执行管线112执行,而非作为执行管线112的执行结果128。
[0159] 请参照图3,图中是以方块图详述图2的指令格式化器202。指令格式化器202由图1的指令快取102接收x86ISA与ARM ISA指令字节124区块。凭借x86ISA指令长度可变的特性,x86指令124可以由指令字节124区块的任何字节开始。由于x86ISA容许前缀字节的长度会受到当前地址长度与操作数长度预设值的影响,因此确认快取区块内的x86ISA指令的长度与位置的任务会更为复杂。此外,依据当前ARM指令集状态322与ARM ISA指令124的操作码,ARM ISA指令的长度不是2字节就是4字节,因而不是2字节对齐就是4字节对齐。因此,指令格式化器202由指令字节124串(stream)撷取不同的x86ISA与ARM ISA指令,此指令字节124串是由指令快取102接收的区块所构成。也就是说,指令格式化器202格式化x86ISA与ARM ISA指令字节串,因而大幅简化图2的简单指令转译器对ISA指令124进行解码与转译的困难任务。
[0160] 指令格式化器202包含一预解码器302,在指令模式指针132指示为x86时,预解码器302预先将指令字节124视为x86指令字节进行解码以产生预解码信息,在指令模式指针132指示为ARM时,预解码器302预先将指令字节124视为ARM指令字节进行解码以产生预解码信息。指令字节队列(IBQ)304接收ISA指令字节124区块以及由预解码器302产生的相关预解码信息。
[0161] 一个由长度解码器与涟波逻辑门306构成的阵列接收指令字节队列304底部项目(bottom entry)的内容,亦即ISA指令字节124区块与相关的预解码信息。此长度解码器与涟波逻辑门306亦接收指令模式指针132与ARM ISA指令集状态322。在一实施例中,ARM ISA指令集状态322包含ARM ISA CPSR寄存器的J与T位。为了响应其输入信息,此长度解码器与涟波逻辑门306产生解码信息。此解码信息包含ISA指令字节124区块内的x86与ARM指令的长度、x86前缀信息、以及关于各个ISA指令字节124的指针,此指针指出此字节是否为ISA指令124的起始字节、终止字节、以及/或一有效字节。一多工器队列308接收ISA指令字节124区块、由预解码器302产生的相关预解码信息、以及由长度解码器与涟波逻辑门306产生的相关解码信息。
[0162] 控制逻辑(未图标)检验多工器队列(MQ)308底部项目的内容,并控制多工器312撷取不同的、或格式化的ISA指令与相关的预解码与解码信息,所撷取的信息是提供至一格式化指令队列(FIQ)314。格式化指令队列314在格式化ISA指令242与提供至图2的简单指令转译器204的相关信息间作为缓冲。在一实施例中,多工器312在每一个时脉周期内撷取至多三个格式化ISA指令与相关的信息。
[0163] 在一实施例中,指令格式化程序202在许多方面类似于2009年10月1日提出的美国专利第12/571,997号、第12/572,002号、第12/572,045号、第12/572,024号、第12/572,052号与第12/572,058号申请案共同揭露的XIBQ、指令格式化程序、与FIQ,这些申请案在此列为参考数据。然而,前述专利申请案所揭示的XIBQ、指令格式化程序、与FIQ通过修改,使其能在格式化x86ISA指令124外,还能格式化ARM ISA指令124。长度解码器306被修改,使能对ARM ISA指令124进行解码以产生长度以及起点、终点与有效性的字节指针。尤其,若是指令模式指针132指示为ARM ISA,长度解码器306检测当前ARM指令集状态322与ARM ISA指令124的操作码,以确认ARM指令124是一个2位组长度或是4位组长度的指令。在一实施例中,长度解码器306包含多个独立的长度解码器分别用以产生x86ISA指令124的长度数据以及ARM ISA指令124的长度数据,这些独立的长度解码器的输出再以连线或(wire-ORed)耦接在一起,以提供输出至涟波逻辑门306。在一实施例中,此格式化指令队列314包含独立的队列以持有格式化指令242的多个互相分离的部分。在一实施例中,指令格式化程序202在单一时脉周期内,提供简单指令转译器204至多三个格式化ISA指令242。
[0164] 请参照图4,图中是以方块图详细显示图1的执行管线112,此执行管线112耦接至硬件指令转译器104以直接接收来自图2的硬件指令转译器104的实行微指令。执行管线112包含一微指令队列401,以接收微指令126;一寄存器配置表402,由微指令队列401接收微指令;一指令调度器404,耦接至寄存器配置表402;多个保留站406,耦接至指令调度器404;一指令发布单元408,耦接至保留站406;一重排缓冲器422,耦接至寄存器配置表402、指令调度器404与保留站406;以及,执行单元424是耦接至保留站406、指令发布单元408与重排缓冲器422。寄存器配置表402与执行单元424接收指令模式指针132。
[0165] 在硬件指令转译器104产生实行微指令126的速率不同于执行管线112执行微指令126的情况下,微指令队列401是作为一缓冲器。在一实施例中,微指令队列401包含一个M至N可压缩微指令队列。此可压缩微指令队列使执行管线112能够在一给定的时脉周期内,从硬件指令转译器104接收至多M个(在一实施例中,M是六)微指令126,并且随后将接收到的微指令126储存至宽度为N(在一实施例中,N是三)的队列结构,以在每个时脉周期提供至多N个微指令126至寄存器配置表402,此寄存器配置表402能够在每个时脉周期处理最多N个微指令126。微指令队列401是可压缩的,因它不论接收到微指令126的特定时脉周期为何,皆会依序将由硬件指令转译器104所传送的微指令126时填满队列的空项目,因而不会在队列项目中留下空洞。此方法的优点为能够充分利用执行单元424(请参照图4),因为它可比对在一不可压缩宽度M或宽度M的指令队列提供较高的指令储存效能。具体来说,不可压缩宽度N的队列会需要硬件指令转译器104,尤其是简单指令转译器204,在之后的时脉周期内会重复转译一个或多个已经在之前的时脉周期内已经被转译过的ISA指令124。会这样做的原因是,不可压缩宽度N的队列无法在同一个时脉周期接收多于N个微指令126,而重复转译将导致电力耗损。不过,不可压缩宽度M的队列虽然不需要简单指令转译器204重复转译,但却会在队列项目中产生空洞而导致浪费,因而需要更多列项目以及一个较大且更耗能的队列来提供相当的缓冲能力。
[0166] 寄存器配置表402是由微指令队列401接收微指令126并产生与微处理器100内进行中的微指令126的附属信息,寄存器配置表402并执行寄存器重命名操作来增加微指令平行处理的能力,以利于执行管线112的超纯量、非循序执行能力。若是ISA指令124指示为x86,寄存器配置表402会对应于微处理器100的x86ISA寄存器106,产生附属信息且执行相对应的寄存器重命名操作;反之,若是ISA指令124指示为ARM,寄存器配置表402就会对应于微处理器100的ARM ISA寄存器106,产生附属信息且执行相对应的寄存器重命名操作;不过,如前述,部分寄存器106可能是由x86ISA与ARM ISA所共享。寄存器配置表402亦在重排缓冲器422中依据程序顺序配置一项目给各个微指令126,因此重排缓冲器422可使微指令126以及其相关的x86ISA与ARM ISA指令124依据程序顺序进行引退,即使微指令126的执行对应于其所欲实现的x86ISA与ARM ISA指令124而言是以非循序的方式进行的。重排缓冲器
422包含一环形队列,此环形队列的各个项目是用以储存关于进行中的微指令126的信息,此信息除了其它事项,还包含微指令126执行状态、一个确认微指令126是由x86或是ARM ISA指令124所转译的标签、以及用以储存微指令126的结果的储存空间。
[0167] 指令调度器404由寄存器配置表402接收寄存器重命名微指令126与附属信息,并依据指令的种类以及执行单元424的可利用性,将微指令126及其附属信息分派至关联于适当的执行单元424的保留站406。此执行单元424将会执行微指令126。
[0168] 对各个在保留站406中等待的微指令126而言,指令发布单元408测得相关执行单元424可运用且其附属信息被满足(如来源操作数可被运用)时,即发布微指令126至执行单元424供执行。如前述,指令发布单元408所发布的微指令126,可以非循以及以超纯量方式来执行。
[0169] 在一实施例中,执行单元424包含整数/分支单元412、媒体单元414、加载/储存单元416、以及浮点单元418。执行单元424执行微指令126以产生结果128并提供至重排缓冲器422。虽然执行单元424并不大受到其所执行的微指令126是由x86或是ARM ISA指令124转译而来的影响,执行单元424仍会使用指令模式指针132与环境模式指针136以执行相对较小的微指令126子集。举例来说,执行管线112管理旗标的产生,其管理会依据指令模式指针
132指示为x86ISA或是ARM ISA而有些微不同,并且,执行管线112依据指令模式指针132指示为x86ISA或是ARM ISA,对x86EFLAGS寄存器或是程序状态寄存器(PSR)内的ARM条件码旗标进行更新。在另一实例中,执行管线112对指令模式指针132进行取样以决定去更新x86指令指针(IP)118或ARM程序计数器(PC)116,还是更新共通的指令地址寄存器。此外,执行管线122亦藉此来决定使用x86或是ARM语意执行前述操作。一旦微指令126变成微处理器100中最旧的已完成微指令126(亦即,在重排缓冲器422队列的排头且呈现已完成的状态)且其它用以实现相关的ISA指令124的所有微指令126均已完成,重排缓冲器422就会引退ISA指令124并释放与实行微指令126相关的项目。在一实施例中,微处理器100可在一时脉周期内引退至多三个ISA指令124。此处理方法的优点在于,执行管线112是一高效能、通用执行引擎,其可执行支持x86ISA与ARM ISA指令124的微处理器100微架构的微指令126。
[0170] 请参照图5,图中是以方块图详述图1的寄存器文件106。就一较佳实施例而言,寄存器文件106为独立的寄存器区块实体。在一实施例中,通用寄存器是由一具有多个读出端口与写入端口的寄存器文件实体来实现;其它寄存器可在实体上独立于此通用寄存器文件以及其它会存取这些寄存器但具有较少的读取写入端口的邻近功能方块。在一实施例中,部分非通用寄存器,尤其是那些不直接控制微处理器100的硬件而仅储存微码234会使用到的数值的寄存器(如部分x86MSR或是ARM协同处理器寄存器),则是在一个微码234可存取的私有随机存取存储器(PRAM)内实现。不过,x86ISA与ARM ISA程序者无法见到此私有随机存取存储器,亦即此存储器并不在ISA系统存储器地址空间内。
[0171] 总括来说,如图5所示,寄存器文件106在逻辑上是区分为三种,亦即ARM特定的寄存器502、x86特定的寄存器504、以及共享寄存器506。在一实施例中,共享寄存器506包含十五个32位寄存器,由ARM ISA寄存器R0至R14以及x86ISA EAX至R14D寄存器所共享,另外有十六个128位寄存器由x86ISA XMM0至XMM15寄存器以及ARM ISA进阶单指令多重数据扩展(Neon)寄存器所共享,这些寄存器的部分是重迭于三十二个32位ARM VFPv3浮点寄存器。如前文图1所述,通用寄存器的共享意指由x86ISA指令124写入一共享寄存器的数值,会被ARM ISA指令124在随后读取此共享寄存器时见到,反之亦然。此方式的优点在于,能够使x86ISA与ARM ISA程序通过寄存器互相沟通。此外,如前述,x86ISA与ARM ISA的架构控制寄存器的特定位亦可被引用为共享寄存器506。如前述,在一实施例中,x86特定模型寄存器可被ARM ISA指令124通过实作定义协同处理器寄存器存取,因而是由x86ISA与ARM ISA所共享。此共享寄存器506可包含非架构寄存器,例如,条件旗标的非架构同等物,这些非架构寄存器同样由寄存器配置表402重命名。硬件指令转译器104知道哪一个寄存器是由x86ISA与ARM ISA所共享,因而会产生实行微指令126来存取正确的寄存器。
[0172] ARM特定的寄存器502包含ARM ISA所定义但未被包含于共享寄存器506的其它寄存器,而x86特定的寄存器502包含x86ISA所定义但未被包含于共享寄存器506的其它寄存器。举例来说,ARM特定的寄存器502包含ARM程序计数器116、CPSR、SCTRL、FPSCR、CPACR、协同处理器寄存器、多种例外事件模式的备用通用寄存器与程序状态保存寄存器(saved program status registers,SPSRs)等等。前文列出的ARM特定寄存器502并非为限定本案发明,仅为例示以说明本发明。另外,举例来说,x86特定的寄存器504包含x86指令指针(EIP或IP)118、EFLAGS、R15D、64位的R0至R15寄存器的上面32位(亦即未落于共享寄存器506的部分)、区段寄存器(SS,CS,DS,ES,FS,GS)、x87FPU寄存器、MMX寄存器、控制寄存器(如CR0-CR3、CR8)等。前文列出的x86特定寄存器504并非为限定本案发明,仅为例示以说明本发明。
[0173] 在一实施例中,微处理器100包含新的实作定义ARM协同处理器寄存器,在指令模式指针132指示为ARM ISA时,此实作定义协同处理器寄存器可被存取以执行x86ISA相关的操作。这些操作包含但不限于:将微处理器100重置为一x86ISA处理器(重置至x86指令)的能力;将微处理器100初始化为x86特定的状态,将指令模式指针132切换至x86,并开始在一特定x86目标地址撷取x86指令124(启动至x86指令)的能力;存取前述全域配置寄存器的能力;存取x86特定寄存器(如EFLAGS)的能力,此x86寄存器是指定在ARM R0寄存器中,存取电力管理(如P状态与C状态的转换),存取处理器总线功能(如输入/输出循环)、中断控制器的存取、以及加密加速功能的存取。此外,在一实施例中,微处理器100包含新的x86非架构特定模型寄存器,在指令模式指针132指示为x86ISA时,此非架构特定模型寄存器可被存取以执行ARM ISA相关的操作。这些操作包含但不限于:将微处理器100重置为一ARM ISA处理器(重置至ARM指令)的能力;将微处理器100初始化为ARM特定的状态,将指令模式指针132切换至ARM,且开始在一特定ARM目标地址撷取ARM指令124(启动至ARM指令)的能力;存取前述全域配置寄存器的能力;存取ARM特定寄存器(如CPSR)的能力,此ARM寄存器是指定在EAX寄存器内。
[0174] 请参照图6A与6B,图中显示一流程说明图1的微处理器100的操作程序。此流程始于步骤602。
[0175] 如步骤602所示,微处理器100是被重置。可向微处理器100的重置输入端发出信号来进行此重置操作。此外,在一实施例中,此微处理器总线是一x86型式的处理器总线,此重置操作可由x86型式的INIT命令进行。响应此重置操作,微码234的重置程序是被调用来执行。此重置微码的操作包含:(1)将x86特定的状态504初始化为x86ISA所指定的预设数值;(2)将ARM特定的状态502初始化为ARM ISA所指定的预设数值;(3)将微处理器100的非ISA特定的状态初始化为微处理器100制造商所指定的预设数值;(4)将共享ISA状态506,如GPRs,初始化为x86ISA所指定的预设数值;以及(5)将指令模式指针132与环境模式指针136设定为指示x86ISA。在另一实施例中,不同于前揭操作(4)与(5),此重置微码将共享ISA状态506初始化为ARM ISA特定的预设数值,并将指令模式指针132与环境模式指针136设定为指示ARM ISA。在此实施例中,步骤638与642的操作不需要被执行,并且,在步骤614之前,此重置微码会将共享ISA状态506初始化为x86ISA所指定的预设数值,并将指令模式指针132与环境模式指针136设定为指示x86ISA。接下来进入步骤604。
[0176] 在步骤604,重置微码确认微处理器100是配置为一个x86处理器或是一个ARM处理器来进行开机。在一实施例中,如前述,预设ISA开机模式是硬式编码于微码,不过可通过熔断配置熔丝的方式,或利用一微码修补来修改。在一实施例中,此预设ISA开机模式作为一外部输入提供至微处理器100,例如一外部输入接脚。接下来进入步骤606。在步骤606中,若是预设ISA开机模式为x86,就会进入步骤614;反之,若是预设开机模式为ARM,就会进入步骤638。
[0177] 在步骤614中,重置微码使微处理器100开始由x86ISA指定的重置向量地址撷取x86指令124。接下来进入步骤616。
[0178] 在步骤616中,x86系统软件(如BIOS)是配置微处理器100来使用如x86ISA RDMSR与WRMSR指令124。接下来进入步骤618。
[0179] 在步骤618中,x86系统软件执行一重置至ARM的指令124。此重置至ARM的指令使微处理器100重置并以一ARM处理器的状态离开重置程序。然而,因为x86特定状态504以及非ISA特定配置状态不会因为重置至ARM的指令126而改变,此方式有利于使x86系统固件执行微处理器100的初步设定并使微处理器100随后以ARM处理器的状态重开机,而同时还能使x86系统软件执行的微处理器100的非ARM配置配置维持完好。藉此,此方法能够使用“小型的”微开机码来执行ARM操作系统的开机程序,而不需要使用微开机码来解决如何配置微处理器100的复杂问题。在一实施例中,此重置至ARM指令系一x86WRMSR指令至一新的非架构特定模型寄存器。接下来进入步骤622。
[0180] 在步骤622,简单指令转译器204进入陷阱至重置微码,以响应复杂重置至ARM(complex reset-to-ARM)指令124。此重置微码使ARM特定状态502初始化至由ARM ISA指定的预设数值。不过,重置微码并不修改微处理器100的非ISA特定状态,因而有利于保存步骤
616执行所需的配置设定。此外,重置微码使共享ISA状态506初始化至ARM ISA指定的预设数值。最后,重置微码设定指令模式指针132与环境模式指针136以指示ARM ISA。接下来进入步骤624。
[0181] 在步骤624中,重置微码使微处理器100开始在x86ISA EDX:EAX寄存器指定的地址撷取ARM指令124。此流程结束于步骤624。
[0182] 在步骤638中,重置微码将共享ISA状态506,如GPRs,初始化至ARM ISA指定的预设数值。接下来进入步骤642。
[0183] 在步骤642中,重置微码设定指令模式指针132与环境模式指针136以指示ARM ISA。接下来进入步骤644。
[0184] 在步骤644中,重置微码使微处理器100开始在ARM ISA指定的重置向量地址撷取ARM指令124。此ARM ISA定义两个重置向量地址,并可由一输入来选择。在一实施例中,微处理器100包含一外部输入,以在两个ARM ISA定义的重置向量地址间进行选择。在另一实施例中,微码234包含在两个ARM ISA定义的重置向量地址间的一预设选择,此预设选则可通过熔断熔丝以及/或是微码修补来修改。接下来进入步骤646。
[0185] 在步骤646中,ARM系统软件设定微处理器100来使用特定指令,如ARM ISA MCR与MRC指令124。接下来进入步骤648。
[0186] 在步骤648中,ARM系统软件执行一重置至x86的指令124,来使微处理器100重置并以一x86处理器的状态离开重置程序。然而,因为ARM特定状态502以及非ISA特定配置状态不会因为重置至x86的指令126而改变,此方式有利于使ARM系统固件执行微处理器100的初步设定并使微处理器100随后以x86处理器的状态重开机,而同时还能使由ARM系统软件执行的微处理器100的非x86配置配置维持完好。藉此,此方法能够使用“小型的”微开机码来执行x86操作系统的开机程序,而不需要使用微开机码来解决如何配置微处理器100的复杂问题。在一实施例中,此重置至x86指令系一ARM MRC/MRCC指令至一新的实作定义协同处理器寄存器。接下来进入步骤652。
[0187] 在步骤652中,简单指令转译器204进入陷阱至重置微码,以响应复杂重置至x86指令124。重置微码使x86特定状态504初始化至x86ISA所指定的预设数值。不过,重置微码并不修改微处理器100的非ISA特定状态,此处理有利于保存步骤646所执行的配置设定。此外,重置微码使共享ISA状态506初始化至x86ISA所指定的预设数值。最后,重置微码设定指令模式指针132与环境模式指针136以指示x86ISA。接下来进入步骤654。
[0188] 在步骤654中,重置微码使微处理器100开始在ARM ISA R1:R0寄存器所指定的地址撷取ARM指令124。此流程终止于步骤654。
[0189] 请参照图7,图中是以一方块图说明本发明的一双核心微处理器700。此双核心微处理器700包含两个处理核心100,各个核心100包含图1的微处理器100所具有的元件,藉此,各个核心均可执行x86ISA与ARM ISA机器语言程序。这些核心100可被设定为两个核心100都执行x86ISA程序、两个核心100都执行ARM ISA程序、或是一个核心100执行x86ISA程序而另一个核心100则是执行ARM ISA程序。在微处理器700的操作过程中,前述三种设定方式可混合且动态改变。如图6A及图6B的说明内容所述,各个核心100对于其指令模式指针
132与环境模式指针136均具有一预设数值,此预设数值可利用熔丝或微码修补做修改,藉此,各个核心100可以独立地通过重置改变为x86或是ARM处理器。虽然图7的实施例仅具有二个核心100,在其它实施例中,微处理器700可具有多于二个核心100,而各个核心均可执行x86ISA与ARM ISA机器语言程序。
[0190] 请参照图8,图中是以一方块图说明本发明另一实施例的可执行x86ISA与ARM ISA机器语言程序的微处理器100。图8的微处理器100系类似于图1的微处理器100,其中的元件编号亦相似。然而,图8的微处理器100亦包含一微指令快取892,此微指令快取892存取由硬件指令转译器104产生且直接提供给执行管线112的微指令126。微指令快取892是由指令撷取单元114所产生的撷取地址做索引。若是撷取地址134命中微指令快取892,执行管线112内的多工器(未图示)就选择来自微指令快取892的微指令126,而非来自硬件指令转译器104的微指令126;反之,多工器则是选择直接由硬件指令转译器104提供的微指令126。微指令快取的操作,通常亦称为追踪快取,是微处理器设计的技术领域所已知的技术。微指令快取892所带来的优点在于,由微指令快取892撷取微指令126所需的时间通常会少于由指令快取102撷取指令124并且利用硬件指令转译器将其转译为微指令126的时间。在图8的实施例中,微处理器100在执行x86或是ARM ISA机器语言程序时,硬件指令转译器104不需要在每次执行x86或ARM ISA指令124时都执行硬件转译,亦即当实行微指令126已经存在于微指令快取892,就不需要执行硬件转译。
[0191] 在此所述的微处理器的实施例的优点在于,其通过内建的硬件指令转译器来将x86ISA与ARM ISA指令转译为微指令集的微指令,而能执行x86ISA与ARM ISA机器语言程序,此微指令集不同于x86ISA与ARM ISA指令集,且微指令可利用微处理器的共享的执行管线来执行以提供实行微指令。在此所述的微处理器的实施例的优点在于,通过协同利用大量与ISA无关的执行管线来执行由x86ISA与ARM ISA指令硬件转译来的微指令,微处理器的设计与制造所需的资源会少于两个独立设计制造的微处理器(亦即一个能够执行x86ISA机器语言程序,一个能够执行ARM ISA机器语言程序)所需的资源。此外,这些微处理器的实施例中,尤其是那些使用超纯量非循序执行管线的微处理器,具有潜力能提供相较于既有ARM ISA处理器更高的效能。此外,这些微处理器的实施例,相较于采用软件转译器的系统,亦在x86与ARM的执行上可更具潜力地提供更高的效能。最后,由于微处理器可执行x86ISA与ARM ISA机器语言程序,此微处理器有利于建构一个能够高效地同时执行x86与ARM机器语言程序的系统。
[0192] 条件算术与逻辑单元(CONDITIONAL ALU)指令
[0193] 对微处理器而言,在指令集中内含让指令被条件执行的功能是令人想要的。条件执行指令的意思就是,指令会指定一条件(如零、或负、或大于),如果满足条件旗标,此条件就会由微处理器执行,如果不满足条件旗标,条件就不会执行。如前述,ARM ISA不仅只提供此功能至分支指令,还提供至其指令集中的大部分的指令中。被条件执行的指令会指定来自通用寄存器的来源操作数,以产生一结果写入通用目地寄存器。专利权人为ARM Limited,of Cambridge,Great Britain的美国第7,647,480号专利案即描述一处理条件指令的数据处理装置。一般而言,一管线处理单元执行一条件指令以产生一结果数据数值。此结果数据数值在条件满足时显示条件指令指定的计算的结果,而在条件不满足时显示储存于目的寄存器的现今数据数值。两个可能的解决方案系描述于下列段落。
[0194] 在第一个解决方案中,指令集内的各个条件指令被限制为,该指令条件所指定的寄存器是同时为来源寄存器以及目的寄存器。使用此方式,条件指令只会占据寄存器文件的两个读出埠,即提供现今目的寄存器数值作为一来源操作数,以及提供其它来源操作数。因此,此第一个解决方案可进一步降低支持管线处理单元执行条件指令所需的最低限度的寄存器文件读出端口数量。
[0195] 第二个解决方案移除第一个解决方案中对于条件指令的限制,藉此,条件指令可以指定独立的目的寄存器与来源寄存器。第二个解决方案需要使用寄存器文件一个额外的读出埠,以在单一周期内能读取条件指令所需的操作数数据数值(即来自寄存器文件的来源操作数与目的操作数)。因为第二个解决方案不仅需要为额外的读出端口付出成本,还需要较大数量的位来指定条件指令与更为复杂的数据路径,美国专利第7,647,480号专利案系选择第一个解决方案为其标的。具体来说,此数据路径需要为来自寄存器文件的三个输入路径提供逻辑处理,并且还可能需要导向逻辑以耦接至此三个路径中的任何一个。
[0196] 在此提出的实施例的优点在于,其能使条件指令指定不同于目的寄存器的来源操作数寄存器,并且不需要在寄存器文件使用一个额外的读出端口。一般而言,依据本发明的实施例,图1的微处理器100的硬件指令转译器104将一条件执行ISA指令124转译为由一个或多个微指令126构成的序列以供执行管线112执行。执行此序列的最后一个微指令126的执行单元424接收到由条件指令124指定的目的寄存器的原本数值,以确认条件是否满足。前一个微指令126,或是最后一个微指令126本身,会对来源操作数执行一操作以产生一结果。若是条件不满足,执行此序列的最后一个微指令126的执行单元424会将此原本数值写回目的寄存器,而非将结果数值写入目的寄存器。
[0197] 在本发明的实施例中,条件ALU指令系一ISA指令124指示微处理器100对一个以上的来源操作数去执行一算术或逻辑操作,以产生一结果并将此结果写入一目的寄存器。其它种类的条件指令124亦可能被微处理器100的ISA指令集所支持,例如条件分支指令124或是条件加载/储存指令124,这些指令有别于条件ALU指令124。
[0198] 由硬件指令转译器104响应遭遇到的条件ALU指令124所送出序列中的微指令126的数量与类型,是由两个特点所定性。第一个特点是,条件ALU指令124是否指定来源操作数之一是被施以预移位操作。在一实施例中,预移位操作举例来说系包含ARM架构参考手册第A8-10页至A8-12页描述的操作。若是条件ALU指令124指定一预移位操作,硬件指令转译器104产生一移位微指令126(在图10起标示为SHF)作为序列中的第一个微指令126。此移位微指令126执行此预移位操作以产生一移位结果写入一暂时寄存器(temporary register),以提供予序列中后续微指令126之使用。第二个特点是,是否由条件ALU指令124指定的目的寄存器亦是这些来源操作数寄存器的其中之一。若是,硬件指令转译器104进行一优化程序来将条件ALU指令124转译为一个相较于未指定目的寄存器为来源操作数寄存器其中之一的条件ALU指令124所产生者少一个微指令126的数量。此程序主要系描述于第21至28图。
[0199] 此外,条件ALU指令124指定一个架构条件旗标必须满足的条件,使微处理器100能执行此条件ALU指令124。此条件ALU指令124会指定架构条件旗标需以ALU操作的结果以及/或一预移位产生的进位旗标(carry flag)进行更新。然而,若是条件不被满足,架构条件旗标就不会被更新。达成此操作相当复杂,因为硬件指令转译器104需将条件ALU指令124转译为由多个微指令126构成的序列。具体来说,若是条件被满足,至少一个微指令126必须写入此新的条件旗标数值;然而,条件旗标的旧数值可能被位于序列的微指令126用来确认是否条件ALU指令124所指定的条件被满足,以及/或去执行ALU操作。这些实施例的优点在于,微处理器100运用技巧以确保在条件不被满足时就不更新条件旗标,且在条件被满足时才以正确的数值来更新旗标,这包含利用预移位进位旗标值进行更新。
[0200] 在本发明的微处理器100的实施例中,如图1所示,用以保持通用寄存器的寄存器文件106,所具有的读出端口仅足够供寄存器文件106提供至多二个来源操作数至执行微指令的执行单元424以实现条件ALU指令124。如前揭对应于图1的说明内容,本发明的微处理器100的实施例系针对一商用微处理器进行改良。用以保持此商用微处理器的通用寄存器的寄存器文件具有的读出端口仅足够供寄存器文件提供至多二个来源操作数至执行单元,执行单元执行此处所称的微指令126以实现条件ALU指令124。因此,本文所述的实施例特别有利于运用在此商用微处理器的微架构中。如前揭对应于图1的说明内容,此商用微处理器原本系设计为x86ISA,关于指令的条件执行并不是其中的关键特征,因为此处理器系基于累加器,而通常需要一个来源操作数作为目的操作数,因此,此处理器看来并不需要此额外的读出埠。
[0201] 在此所述的实施例的一个优点在于,虽然在一些例子中,关联于由条件ALU指令124所转译的两个微指令的执行会有两个时脉周期的执行延迟,而在一些事例中,关联于由条件ALU指令124所转译的两个微指令的执行会有三个时脉周期的执行延迟,但各个微指令所执行的操作系相对简单的,而使管线化架构的实作能够支持相对较高的核心时钟频率。
[0202] 虽然在此所述的实施例中,微处理器100能够执行ARM ISA与x86ISA指令,不过本发明并不限于此。本发明的实施例亦可适用于微处理器仅执行单一个ISA指令的情形。此外,虽然在此所述的实施例中,微处理器100系将ARM ISA条件ALU指令转译为微指令126,不过此实施例亦可适用于,微处理器执行一个不同于ARM的ISA指令,而同样在其指令集中包含条件ALU指令的情形。
[0203] 请参照图9,图中是以一方块图进一步详述图1的微处理器100。此微处理器100在图1的寄存器文件106内包含一架构条件旗标寄存器926,此微处理器100并包含图4的执行单元424与重排缓冲器422。条件旗标寄存器926储存架构条件旗标。在一实施例中,当指令模式指针132指示为ARM ISA,条件旗标寄存器926依据ARM ISA条件旗标的语意储存数值,而当指令模式指针132指示为x86ISA,条件旗标寄存器926则是依据x86ISA条件旗标,即x86EFLAGS,的语意储存数值。如前文对应于图5的说明内容所述,寄存器文件106以由寄存器构成的独立的实体区块来实现效果较佳;特别是,举例来说,条件旗标寄存器926可以是一个不同于通用寄存器的寄存器文件的实体寄存器文件。因此,即使如下述,条件旗标系提供至执行单元424以执行微指令126,条件旗标寄存器文件的读出端口可以是不同于通用寄存器文件的读出端口。
[0204] 条件旗标寄存器926输出其条件旗标数值至一个三输入端多工器922的一数据输入端。此多工器922的一第二数据输入端亦由重排缓冲器422的适当项目(entry)接收条件旗标结果。此多工器922的一第三数据输入端亦由一旗标总线928接收条件旗标结果。此多工器922选择适当的数据输入端的输入,作为其输出924提供至执行单元424以执行微指令126读取条件旗标。此过程在后续段落会有更清楚的描述。虽然本实施例仅描述单一个旗标总线928,不过,依据本发明的一实施例,各个能够产生条件旗标的执行单元424都具有其自己的旗标总线928,而各个能够读取条件旗标的执行单元424都具有其自己的条件旗标输入端924。因此,各个不同的执行单元424能够同时执行不同的微指令126来读取与/或写入条件旗标。
[0205] 旗标总线928是图1的结果总线128的一部分,用以传送由执行单元424输出的条件旗标结果。条件旗标结果系写入重排缓冲器422,更精确来说,是写入重排缓冲器422内配置给由执行单元424执行的微指令126的项目,而执行单元424执行的结果是被传送至旗标总线928。条件旗标结果同时被旗标总线928传送至多工器922的第三数据输入端。
[0206] 图9亦以方块图显示由执行单元424输出于条件总线928上的条件旗标数值,以及执行单元424由多工器922接收的条件旗标数值924。条件旗标数值928/924包含ISA条件旗标902、一条件满足(SAT)位904、一预移位进位(PSC)位906、以及一使用移位进位(USE)位908。当指令模式指针132指示为ARM ISA,ISA条件旗标902包含ARM进位旗标(C)、零旗标(Z)、溢位旗标(V)、与负旗标(N)。当指令模式指针132指示为x86ISA,ISA条件旗标902包含x86EFLAGS进位旗标(CF)、零旗标(ZF)、溢位旗标(OF)、符号旗标(SF)、同位旗标(PF)与辅助旗标(AF)。条件旗标寄存器926包含储存空间提供给ISA条件旗标902、SAT位904、PSC位906、与USE位908。在一实施例中,条件旗标寄存器926分享储存空间给x86ISA以及ARM ISA进位旗标、零旗标、溢位旗标、与负旗标/符号旗标。
[0207] 各个微指令126除了其基本操作(如加、载入/储存、移位、布尔运算的及、分支)外,还指示微指令126是否执行下述三个额外操作中的一个或更多,这些操作即(1)读取条件旗标926(在图10以下的图示中标示为RDFLAGS),(2)写入条件旗标926(在图10以下的图示中标示为WRFLAGS),以及(3)产生一进位旗标数值并将其写入至条件旗标926(在图10以下的图示中标示为WRCARRY)的PSC位906。在一实施例中,微指令126包含相对应的位以指示此三个额外的操作。在另一实施例中,微指令126通过微指令126的操作码指示此三个额外的操作;亦即,依据不同微指令126类型所具有的不同的操作码,搭配这些微指令类型能够执行的操作,来指示此三个额外的操作。
[0208] 若是一执行单元424执行一条件ALU微指令126(在图10以下的图示中,标示为ALUOP CC,CUALUOP CC,NCUALUOP CC)指示其写入条件旗标926(标示为WRFLAGS)而由执行单元424读取的条件旗标924满足微指令126所指定的条件,此执行单元424随后就会将SAT位904设定位一;否则,执行单元424就会将SAT位904清除为零。进一步说明,若是执行单元
424执行的任何微指令126指示其去写入条件旗标926并且此微指令126并非一条件ALU微指令126,执行单元424随后就会将SAT位904清除为零。部分条件微指令126系依据ISA条件旗标902(在图10以下的图示中标示为XMOV CC)来指定条件,而部分条件微指令126是依据SAT位904(在图10以下的图示中标示为CMOV)来指定条件,这在下列段落会有进一步的说明。
[0209] 若是一执行单元424执行一移位微指令126指示其去写入进位旗标(标示为WRCARRY),执行单元424随后就会将USE位908设定为1,并将移位微指令126产生的进位数值写入PSC位906;否则,执行单元424会将USE位908清除为零。进一步说明,若是一执行单元
424执行任何指示其去写入条件旗标926并且并非移位微指令126的微指令126,执行单元
424随后会将USE位908清除为零。此USE位908系被一后续的条件ALU微指令126使用,以确认是否以PSC位数值906的数值更新架构进位旗标902,还是以基于条件ALU微指令126所执行的ALU操作产生的进位旗标的数值来进行更新。此操作在下列段落会有进一步的说明。在另一个实施例中,USE位908并不存在,但使用硬件指令转译器104直接产生USE位908的功能同等物来做为条件ALU微指令126内的一个指标。
[0210] 请参照图10(包括图10A和图10B),图中是以流程图说明本发明图1的硬件指令转译器104转译条件ALU指令124的操作的实施例。基本上,图10A和图10B系描述硬件指令转译器104对条件ALU指令124解码以确认其类型,以将其转译至适当的微指令126序列供执行管线112执行的方式。具体来说,硬件指令转译器104确认条件ALU指令124是否更新架构条件旗标902、是否对一来源操作数执行一预移位操作、是否使用进位旗标作为ALU操作的一输入、以及ALU操作是一进位更新或是非进位更新的操作。此操作在下述进一步说明时,将标示该ALU操作仅更新架构条件旗标902的一子集或是更新全部的架构条件旗标902。此流程始于步骤1002。
[0211] 在步骤1002,硬件指令转译器104遇到一条件ALU指令124,对其解码,并将其转译为适当的微指令126序列,如步骤1024、1026、1034、1036、1044、1054与1056所述。条件ALU指令124指示微处理器100在一个或多个来源操作数执行一算术或逻辑操作以产生一结果,并将此结果写入目的寄存器。由条件ALU指令124所指定的ALU操作的部分类型使用架构进位旗标902作为输入(如加入进位(add with carry)),虽然大多数的类型并不这样做。条件ALU指令124亦指定一条件对应于ISA的架构条件旗标902。若是架构条件旗标902满足此指定条件,微处理器100就会执行条件ALU指令124,亦即执行ALU操作并将结果写入目的寄存器。否则,微处理器100就会将条件ALU指令124视为一不操作(no-op)指令;具体来说,微处理器100就不会改变目的寄存器内的数值。此外,条件ALU指令124可将架构条件旗标902指定为系依据ALU操作的结果来更新,或是不会被更新。不过,即使条件ALU指令124将架构条件旗标902指定为会被更新,若是架构条件旗标902不满足指定条件,微处理器100就不会变更架构条件旗标902内的数值。最后,条件ALU指令124可额外将ALU操作的来源操作数其中之一指定为要被预移位,请一并参照步骤1012的叙述。在一实施例中,被硬件指令转译器104转译的条件ALU指令124系ARM ISA指令。具体来说,在一实施例中,如图10所示,ARM ISA数据处理指令与乘法指令系由硬件指令转译器104进行转译。在一实施例中,这些指令包含但不限于:AND、EOR、SUB、RSB、ADD、ADC、SBC、RSC、TST、TEQ、CMP、CMN、ORR、ORN、MOV、LSL、LSR、ASR、RRX、ROR、BIC、MVN、MUL、MLA、以及MLS指令。在步骤1024、1026、1034、1036、1044、1054与
1056中,为说明起见,相关类型的ARM ISA条件ALU指令124是显示于第一行,硬件指令转译器104转译条件ALU指令124所产生的微指令126是显示于后续行。下标“CC”显示此指令124为一条件指令。此外,ALU操作的类型是以所指定的来源与目的操作数为例。程序设计者可将一目的寄存器指定为提供一来源操作数的寄存器为同一者;在此情况下,硬件指令转译器104系配置来利用此情况且优化微指令126序列以利于条件ALU指令124的转译。此特征系描述于图21。接下来进入步骤1004。
[0212] 在步骤1004中,硬件指令转译器104确认条件ALU指令124是否将架构条件旗标902指定为需要由条件ALU指令124进行更新。也就是说,在一些情况下,程序设计者可选择依据ALU操作的结果来更新架构条件旗标902的条件ALU指令124的方式,而在其它情况下,程序者可选择无论ALU操作的结果为何,都不更新架构条件旗标902的条件ALU指令124的方式。在ARM ISA汇编语言中,指令下标“S”系指示架构条件旗标902是要被更新的,在图10以下的图示系采用此习惯用法。举例来说,步骤1044将ARM ISA条件ALU指令124标示为“ALUOP S”以表示架构条件旗标902是要被更新的,而步骤1024将ARM ISA条件ALU指令124标示为
“ALUOP”(亦即,差异在于“S”)则表示架构条件旗标902不要被更新。若条件ALU指令124将架构条件旗标902指定为要更新,流程就会前进至步骤1042;否则就会前进至步骤1012。
[0213] 在步骤1012中,硬件指令转译器104确认条件ALU指令124的种类是否会对于ALU操作操作数的其中一者指定一预移位操作。此预移位操作可以由一立即字段进行以产生一常数来源操作数,或是此预移位操作可以由来自由寄存器提供的一来源操作数而进行。此预移位操作的数量可以指定为条件ALU指令124内的一常数。此外,在使用寄存器移位操作数的情况下,预移位操作数量可以由寄存器内的数值所指定。在ARM ISA的情况下,将一立即数值依据一立即移位量所进行一预移位操作而产生一常数来源操作数将视为一修改后的立即常数。预移位操作产生一进位旗标数值。对于某些类型的ALU操作而言,架构进位旗标902是以由移位操作所产生的进位旗标数值进行更新,不过对于一些类型的ALU操作而言,架构进位旗标902系以由ALU操作产生的进位旗标数值来进行更新。然而,由预移位操作产生的进位旗标数值并不被用来确认条件ALU指令124所指定的条件是否被满足,更明确地说,所使用的是当前的架构进位旗标902。值得注意的是,ARM ISA MUL、ASR、LSL、LSR、ROR、与RRX指令并不能指定一预移位操作,其处理过程会在步骤1024、1026或1044进行描述。此外,在MOV与MVN指令指定一修正后的立即常数操作数的情形可指定一预移位操作,不过在MOV与MVN指令并不指定一修正后的立即常数操作数(即指定一寄存器操作数)的情形下,就不会指定一预移位操作,其处理过程会在步骤1024、1026或1044进行描述。如前述,此预移位操作可由一立即字段进行以产生一常数来源操作数,或者此预移位操作可由寄存器提供的一来源操作数而进行。若是条件ALU指令124指定一预移位操作,流程会前进至步骤1032;
否则流程就会前进至步骤1022。
[0214] 在步骤1022中,硬件指令转译器104确认条件ALU指令124是否指定一使用进位旗标的ALU操作。使用进位旗标的ARM ISA指令124,举例来说,包括带进位加法(add with carry,ADC)、反向带进位减法(reverse subtract with carry,RSC)、以及带进位减法(subtract with carry,SBC)指令,以及指定一移位寄存器操作数且使用进位旗标以进行移位操作的指令,也就是RRX移位类型的指令。若是条件ALU指令124指定使用进位旗标的ALU操作,则流程前进至步骤1026;反之则前进至步骤1024。
[0215] 在步骤1024,硬件指令转译器104将非旗标更新、非预移位、非使用进位的条件ALU指令124转译为第一与第二微指令126,也就是(1)一ALU操作微指令126(标示为ALUOP);以及(2)一条件移动微指令126(标示为XMOV)。在步骤1024的一实例中,条件ALU指令124指定一第一来源寄存器(R1)与一第二来源寄存器(R2),并在第一来源寄存器与第二来源寄存器上执行一ALU操作(标示为ALUOP)以产生一结果,以及一用以条件写入此结果的目的寄存器(RD)。ALUOP微指令126与条件ALU指令124指定相同的ALU与来源操作数。ALUOP微指令126在两个来源操作数上执行ALU操作并将结果写入一暂时寄存器(标示为T2)。条件移动微指令126与条件ALU指令124指定相同的状态。条件移动微指令126接收暂时寄存器中由ALUOP微指令126写入的数值,并接收旧的、或当前的目的寄存器(RD)的数值。条件移动微指令126接收条件旗标924并确认这些旗标是否满足条件。若是满足条件,条件移动微指令126将暂时寄存器的数值写入目的寄存器(RD),否则就将旧的目的寄存器的数值写回目的寄存器。值得注意的是,虽然本实施例指定两个来源寄存器操作数,不过本发明并不限于此,这些来源操作数中的一个可以是指定于一条件ALU指令124的立即字段中的常数操作数,而非由寄存器所提供。微指令126的执行在图20会有更进一步的说明。在图10A及10B及后续图示中使用的“旧的”用语,系指此旗标或目的寄存器数值,除非另外特别指明,否则是指执行单元424在执行微指令126时所接收的数值。前述说明也可以表示至当前数值。对目的寄存器而言,旧的或是当前的数值系由图1的导向结果总线(forwarding result bus)、重排缓冲器422、或是架构寄存器文件106接收。对旗标而言,如关于图9的叙述,旧的或是当前的数值系由导向总线(forwarding flag bus)928、重排缓冲器422、或是架构条件旗标寄存器926所接收。
此流程终止于步骤1024。
[0216] 在步骤1026中,硬件指令转译器104将非旗标更新、非预移位、使用进位的条件ALU指令124转译为第一与第二微指令126,即(1)一使用进位ALU操作微指令126(标示为ALUOPUC);以及(2)一条件移动微指令126(标示为XMOV)。在步骤1026的一实例中,条件ALU指令124系类似于步骤1024所描述者,除了所指定的ALU操作系使用进位旗标。这两个微指令126亦类似于步骤1024所描述者;不过,ALUOPUC微指令126亦接收条件旗标924以获得进位旗标的当前数值,并应用于使用进位ALU操作中。微指令126的执行系详述于图19。此流程终止于步骤1026。
[0217] 在步骤1032中,硬件指令转译器104确认条件ALU指令124是否指定一ALU操作以使用进位旗标。若是ALU操作使用进位旗标,流程会进行至步骤1036;反之则前进至步骤1034。
[0218] 在步骤1034中,硬件指令转译器104将非旗标更新、预移位、非进位使用的条件ALU指令124转译为第一、第二与第三微指令126,亦即(1)一移位微指令126(标示为SHF);(2)一ALU操作微指令126;以及(3)一条件移动微指令126。在步骤134的一实例中,条件ALU指令124系类似于步骤1024所描述者;不过,此条件ALU指令124亦指定一具有一移位量的预移位操作于第二来源操作数(R2),在步骤1034的实施例中,此移位量是储存于由条件ALU指令
124所指定的一第三来源寄存器(R3)。不过,若是条件ALU指令124的类型是将移位量指定为指令124内的一常数,第三来源寄存器就不会被使用。此可能产生的预移位操作与条件ALU指令124的列表可指定为,包含但不限于,逻辑左移(logical shift left,LSL)、逻辑右移(logical shift right,LSR)、算术左移(arithmetic shift right,ASR)、右转(rotate right,ROR)、以及扩展右转(rotate right with extend,RRX)。在一实施例中,硬件指令转译器104输出一移位微指令126以确保移位数值系依据ARM ISA的语意所产生,举例来说,尤其是指ARM架构参考手册中对应于个别ARM指令的描述,以及例如是第A8-10至A8-12、与第A5-10至A5-11页的内容。此移位微指令126与条件ALU指令124是指定相同的预移位操作,此移位微指令126亦与条件ALU指令124指定相同的第二来源操作数R2与第三来源操作数R3。
此移位微指令126对第二来源操作数R2执行具有一移位量的移位操作,并将结果写入一暂时寄存器(标示为T3)。虽然在步骤1034中,由于条件ALU指令124将架构条件旗标902指定为不更新,移位微指令126产生的条件旗标数值不会被使用,不过,举例来说,在步骤1056中,移位微指令126产生的移位旗标数值则会被使用这会在下列段落有进一步的说明。此外,预移位操作会需要将旧的移位旗标旋转至移位后的结果数值;举例来说,扩展右转(RRX)预移位操作将进位指标移位至结果中的最高有效位。在此情况下,虽未见于图10A及图10B(除了步骤1056),移位微指令126也会读取条件旗标924以取得当前的进位旗标数值。ALUOP微指令126系类似于步骤1024所描述者;然而,此ALUOP微指令126系接收暂时寄存器T3的数值,而非第二来源操作数R2,并且执行ALU操作于第一来源操作数R1与暂时寄存器T3以产生结果写入暂时寄存器T2。XMOV微指令126系类似于步骤1024所描述者。微指令126的执行在图
18会有更详细的说明。此流程终止于步骤1034。
[0219] 在步骤1036中,硬件指令转译器104将非旗标更新、预移位、使用进位的条件ALU指令124转译为第一、第二与第三微指令126,亦即(1)一移位微指令126;(2)一使用进位ALU操作微指令126;以及(3)一条件移动微指令126。在步骤1036的实例中,条件ALU指令124是类似于步骤1034所述者,除了此指令124所指定的ALU操作使用系使用进位旗标。此三个微指令126系类似于步骤1034所描述者;不过,ALUOPUC微指令126亦接收条件旗标924以取得进位旗标的当前数值以使用于进位使用ALU操作。微指令126的执行在图17中会有更详细的描述。此流程终止于步骤1036。
[0220] 在步骤1042,硬件指令转译器104确认条件ALU指令124的类型是否对ALU操作操作数其中之一指定一预移位。若是条件ALU指令124指定一预移位,流程会前进到步骤1052;否则,流程会前进到步骤1044。
[0221] 在步骤1044中,硬件指令转译器104将旗标更新、非预移位的条件ALU指令124转译为第一与第二微指令126,亦即:(1)一条件ALU操作微指令126(标示为ALUOP CC);以及(2)一条件移动微指令126(标示为CMOV)。在步骤1044的实例中,条件ALU指令124系类似于步骤1024的条件ALU指令124,除了本实施例系更新架构条件旗标902。条件ALU微指令126与条件ALU指令124系指定相同的条件与来源操作数。条件ALU操作微指令126对两个来源操作数执行ALU操作,并且将结果写入一暂时寄存器(标示为T2)。此外,条件ALU操作微指令126接收架构条件旗标902并确认其是否满足条件。此外,条件ALU操作微指令126写入条件旗标寄存器926。具体来说,条件ALU操作微指令126写入SAT位904以指示架构条件旗标902是否满足条件。此外,若是条件不满足,条件ALU操作微指令126将旧的条件旗标数值写入架构条件旗标902;反之,若是条件满足,条件ALU操作微指令126就依据ALU操作的结果更新架构条件旗标902。此架构条件旗标902的更新数值系相关于ALU操作的类型。也就是说,对于部分种类的ALU操作,所有的架构条件旗标902都会依据ALU操作的结果以新数值更新;反之,对于部分种类的ALU操作,一些架构条件旗标902(在一实施例中,为Z与N旗标)系依据ALU操作的结果以新数值更新,不过旧的数值会保留给其它的架构条件旗标902(在一实施例中,为V与C旗标)。架构条件旗标902的更新在图14中会更详细地说明。条件移动(CMOV)微指令126接收由ALUOP微指令126写入暂时寄存器(T2)的数值,并接收目的寄存器(RD)的旧的或是当前的数值。条件移动(CMOV)微指令126接收条件旗标924,并且检验SAT位904以确认条件ALU操作微指令126是否指示架构条件旗标902满足条件。若是条件满足,条件移动(CMOV)微指令126将暂时寄存器的值写入目的寄存器,否则就将旧的目的寄存器的值写回目的寄存器。微指令126的执行在图14中会有更详细的说明。值得注意的是,步骤1044(以及步骤1054与1056)所产生的条件ALU操作微指令126所执行的ALU操作,可以是一个使用条件旗标(类似于步骤
1026与1036所描述者)的ALU操作,而由于微指令126读取旗标(如RDFLAGS指针),执行单元
424具有进位旗标以执行此使用进位ALU操作。此流程终止于步骤1044。
[0222] 在步骤1052中,硬件指令转译器104确认条件ALU指令124是否指定一属于会更新架构进位旗标902的类型的ALU操作。对于硬件指令转译器104而言,区分是否会更新架构进位旗标902是必要的,因为若是ALU操作不更新架构进位旗标902,预移位操作所产生的进位旗标数值,而非基于ALU操作所产生的条件旗标数值,就必须被用于更新架构进位旗标902。在一实施例中,指定一不更新架构进位旗标902的ALU操作,但指定一预移位操作的ARM ISA指令124,系包含但不限于AND、BIC、EOR、ORN、ORR、TEQ与TST,以及MOV/MVN指令124,这些指另通过一非零旋转数值(non-zero rotation value)指定一调整过的立即常数。若是ALU操作更新此架构进位旗标902,此流程会前进至步骤1054;反之则前进至步骤1056。
[0223] 在步骤1054中,硬件指令转译器104将旗标更新、预移位、进位使用的条件ALU指令124转译为第一、第二与第三微指令126,亦即:(1)一移位微指令126;(2)一条件进位更新ALU操作微指令126(标示为CU ALUOP CC);以及(3)一条件移动微指令126。在步骤1054的一实例中,条件ALU指令124系类似于步骤1034所描述者;然而,此条件ALU指令124亦将架构条件旗标902指定为要被更新。移位微指令126系类似于步骤1034所描述者。条件进位更新ALU操作微指令126与条件ALU指令124系指定相同的条件。条件进位更新ALU操作微指令126在第一来源操作数R1与暂时寄存器T3执行ALU操作,并将结果写入一暂时寄存器(标示为T2)。
此外,条件进位更新ALU操作微指令126接收架构条件旗标902并确认其是否满足条件。此外,条件进位更新ALU操作微指令126写入条件旗标寄存器926。具体来说,条件进位更新ALU操作微指令126写入SAT位904以指示是否架构条件旗标902满足条件。此外,若是条件不被满足,条件进位更新ALU操作微指令126将旧的条件旗标数值写入架构条件旗标902;反之,若是条件满足,条件进位更新ALU操作微指令126依据ALU操作的结果来更新架构条件旗标
902。架构条件旗标902的更新在图16会有更详细的说明。条件移动(CMOV)微指令126系类似于步骤1044所描述者。此流程终止于步骤1054。
[0224] 在步骤1056中,硬件指令转译器104将旗标更新、预移位、非进位更新的条件ALU指令124转译为第一、第二与第三微指令126,亦即(1)一移位微指令126;(2)一条件非进位更新ALU操作微指令126(标示为NCUALUOP CC);以及(3)一条件移动微指令126。在步骤1056的实例中,条件ALU指令124系类似于步骤1054所描述者;不过,此条件ALU指令124是指定一非进位更新ALU操作。因此,当条件满足时,架构进位旗标902系以预移位旗标数值进行更新。移位微指令126系类似于步骤1034所描述者;不过,此微指令126会读取与写入条件旗标寄存器926。具体来说,此移位微指令126会:(1)将预移位操作所产生的条件旗标数值写入PSC位906;(2)设定USE位908以指示条件非进位更新ALU操作微指令126使用PSC906来更新架构进位旗标902;以及(3)将旧的架构条件旗标902写回条件旗标寄存器926,藉此,条件非进位更新ALU操作微指令126可评估架构条件旗标902的旧数值,来确认其是否满足条件。条件非进位更新ALU操作微指令126与条件ALU指令124系指定相同的条件。此条件非进位更新ALU操作微指令126在来源操作数R1与暂时寄存器T3执行ALU操作并将结果写入一暂时寄存器(标示为T2)。再者,条件非进位更新ALU操作微指令126接收架构条件旗标902并且确认其是否满足条件。此外,条件非进位更新ALU操作微指令126系写入条件旗标寄存器926。具体来说,条件非进位更新ALU操作微指令126系写入SAT位904以指示架构条件旗标902是否满足条件。此外,若是条件不满足,条件非进位更新ALU操作微指令126将旧的条件旗标数值写入架构条件旗标902;反之,若是条件被满足,条件非进位更新ALU操作微指令126则是基于ALU操作的结果更新架构条件旗标902。具体来说,架构溢位(V)旗标902系以旧的溢位旗标数值写入。此外,在USE位908的指示下,架构进位旗标902系以位于PSC位906的预移位进位旗标数值进行更新,否则就以旧的进位旗标数值924进行更新。架构条件旗标902的更新在图15会有更详细的说明。CMOV微指令126系类似于步骤1044所描述者。在另一实施例中,USE位
908并不存在,并且硬件指令转译器104系直接产生USE位908的功能同等物作为条件非进位更新ALU操作微指令126的一指针。执行单元424检测此指针以确认是利用位于PSC位906的预移位进位旗标数值还是利用旧的进位旗标数值924来更新架构进位旗标902。此流程终止于步骤1056。
[0225] 在一实施例中,硬件指令转译器104系配置来产生且提供一调整过的立即常数而非输出一移位微指令126来进行此操作。在此实施例中,处理程序系类似于步骤1024、1026与1044所描述者,而非步骤1034、1036与1054/1056。此外,在此实施例中,硬件指令转译器104亦产生且由预移位操作提供进位旗标数值供条件ALU操作微指令126用于更新架构进位旗标902。
[0226] 请参照图11,图中是以一流程图显示本发明图4的执行单元424执行一移位微指令126的操作。此流程始于步骤1102。
[0227] 在步骤1102中,图4的执行单元424中的一者接收到一移位微指令126,例如在图10所描述且由硬件指令转译器104响应所遭遇到的条件ALU指令124而产生的微指令。此执行单元424亦接收由微指令126所指定的来源操作数,包含条件旗标数值924,这些条件旗标数值924可能被或不被微指令126所使用。接下来进行至步骤1104。
[0228] 在步骤1104中,执行单元424执行由移位微指令126所指定的移位操作,此移位操作系执行于由移位微指令126所指定的操作数上以产生一结果,并将此结果输出至结果总线128。在一实施例中,此移位操作可包括但不限于一逻辑向左(LSL)、逻辑向右(LSR)、算术向右(ASR)、右转(ROR)、以及扩展右转(RRX)。此外,此执行单元424系基于移位操作的结果产生新的条件旗标数值。具体来说,执行单元424系基于移位操作的结果产生一进位旗标数值。在一实施例中,在逻辑向左(LSL)移位操作的情况下,进位旗标数值为一扩展数值(extended value)的第N个位,此扩展数值为M个最低有效位零串连左移后的操作数(M least significant bit zeroes concatenated with the operand being left-shifted),其中N是原始操作数的位数量,M是所指定的正移位量;在逻辑向右(LSR)移位操作的情况下,进位旗标数值系一扩展数值的第(M-1)个位,而此扩展数值系原始操作数零扩展(M+N)个位,其中M是指定正移位量,N是原始操作数的位数;在算术向右(ASR)移位操作的情况下,进位旗标数值系一扩展数值的第(M-1)个位,此扩展数值系原始操作数符号扩展(sign-extended)(M+N)个位,其中M是特定正移位量,N是原始操作数的位数;在右转(ROR)移位操作的情况下,进位旗标数值系操作数右转后的结果的第(N-1)个位,此操作数系依据特定非零移位量(specified non-zero shift amount)模(mod)N进行右转,其中N是原始操作数的位数;在扩展向右(RRX)移位操作的情况下,进位旗标数值系原始操作数的位零。接下来进行至步骤1106。
[0229] 在步骤1106中,执行单元424确认由硬件指令转译器104输出的移位微指令126是否指示执行单元424应写入进位旗标,如同图10B的步骤1056中的指令WRCARRY。具体来说,此移位微指令126指示位于旗标总线输出928的PSC位906应写入由移位操作产生的进位旗标数值写入,而USE位908应被设定,以使随后的条件非进位更新ALU操作微指令126生效以有条件地将PSC位906数值写入架构进位旗标902。若是执行单元424应该写入进位旗标,流程会前进至步骤1114;否则,流程就会前进至步骤1108。
[0230] 在步骤1108中,执行单元424确认由硬件指令转译器104输出的移位微指令126是否指示执行单元424应写入条件旗标(标示为WRFLAGS)。虽然在移位微指令126未指示应写入PSC位906(标示为WRCARRY)的情况下,图10中没有任何一个移位微指令指示执行单元424应写入条件旗标,但硬件指令转译器104在转译其它ISA指令124时还是会产生此一移位微指令126。若是执行单元424应写入条件旗标,流程会前进到步骤1112;否则就会终止。
[0231] 在步骤1112,执行单元424输出数值到旗标总线928上来将PSC位906、USE位908、与SAT位904清除为零,并且将步骤1104所产生的新的架构条件旗标902数值写入架构条件旗标902。此流程终止于步骤1114。
[0232] 在步骤1114,执行单元424输出数值到旗标总线928上以将步骤1112所产生的进位旗标数值写入PSC位906、设定USE位908为一、将SAT位904清除为零、并且以步骤1102所接收到的旧的架构条件旗标902写入数值架构条件旗标902。此流程终止于步骤1114。
[0233] 请参照图12(包括图12A和图12B),图中显示一流程图描述本发明图4的执行单元424执行一条件ALU微指令126的操作。此流程始于步骤1202。
[0234] 在步骤1202中,图4的执行单元424的其中一者接收到一条件ALU微指令126,如图10所述由硬件指令转译器104响应遇到的一条件ALU指令124所产生微指令的情形。此执行单元424亦接收由微指令指定的来源操作数,包含条件旗标数值924,而不论其是否会被微指令126使用到。需了解的是,执行单元424也会依据类似于图12描述的处理程序,而排除其中步骤1209、1212、1214与1216的执移操作,来执行非条件ALU微指令126,此微指令可以是图10所述由硬件指令转译器104响应遇到一条件ALU指令124所产生的条件微指令。此外,执行条件ALU微指令126的执行单元424与执行相关移位微指令126以及/或XMOV/CMOV微指令
126的执行单元424可以相同或是不同。接下来流程前进至步骤1204。
[0235] 在步骤1204,执行单元424对由条件ALU微指令126所指定的操作数,执行由条件ALU微指令126所指定的ALU操作,以产生一结果并将此结果输出至结果总线128。此外,执行单元424亦基于ALU操作的结果产生新的架构条件旗标902数值。若ALU操作使用进位旗标,执行单元424就使用所接收的架构进位旗标924的旧的数值,而非由ALU操作所产生的新的进位旗标数值。接下来流程前进至步骤1206。
[0236] 在步骤1206中,执行单元424确认由步骤1202接收的架构条件旗标924是否满足此指定条件。此确认结果在后续步骤1212与1214中会被使用。接下来流程前进至步骤1208。
[0237] 在步骤1208中,执行单元424确认条件ALU微指令126是否指示执行单元424写入条件旗标寄存器926,如同图10A及10B的许多步骤中的指令WRFLAGS。若是,流程前进至步骤1214;否则,流程前进至步骤1209。
[0238] 在步骤1209中,若是步骤1206确认结果为条件满足,流程前进至步骤1211;否则,流程前进至步骤1212。
[0239] 在步骤1211中,由于条件满足,执行单元424输出步骤1204产生的结果至结果总线128。不过,条件ALU微指令126并不更新条件旗标寄存器926,因为条件ALU微指令126系指定为不去更新架构条件旗标902。如前述,由执行单元424输出至结果总线128/928的结果与条件旗标数值系传送至执行管线112的其它执行单元424,并且被写入重排缓冲器422相关于条件ALU微指令126的项目。需要了解的是,即使微指令126系指定为不去更新架构条件旗标
902,执行单元424仍然输出一些数值至旗标结果总线928以写入重排缓冲器422相关于条件ALU微指令126的项目,不过这些数值将不会由重排缓冲器422引退至目的寄存器106与/或条件旗标寄存器926。这也就是说,是否写入重排寄存器422的项目的数值最终会被引退的确认操作,是由执行管线112的引退单元基于微指令126的类型、例外事件出现、分支误预测、或是其它无效事件来进行,而非由执行单元424本身来进行。此流程终止于步骤1211。
[0240] 在步骤1212中,执行单元424输出第一来源操作数至结果总线128。值得注意的是,在条件不被满足时,图10A及10B所描述的多种条件ALU微指令126并不使用此输出第一来源操作数。具体来说,图10A及10B的XMOV与CMOV微指令126会写回旧的目的寄存器数值而非暂时寄存器T2的数值。然而,在图21A及21B及其后续图示的说明中,对于其它格式的条件ALU指令124的转译而言,即相同来源目的条件ALU指令124(或是其它ISA指令124),硬件指令转译器104于产生条件ALU微指令126时,其中第一来源操作数也是ISA指令124指定的目的寄存器,藉以在条件不被满足时写回原本的目的寄存器的数值。如步骤1211所述,条件ALU微指令126并不更新条件旗标寄存器926因为条件ALU微指令126系指定为不去更新架构条件旗标902。此流程终止于步骤1212。
[0241] 在步骤1214中,若是步骤1206确认条件被满足,流程会前进至步骤1218;否则,流程会前进至步骤1216。
[0242] 在步骤1216中,执行单元424输出第一来源操作数,清除USE位908、PSC位906、与SAT位904为零,以及输出由步骤1202接收的旧的架构条件旗标924数值至旗标总线928,以能够在不调整架构条件旗标902的数值的情况下,将条件ALU指令124整体视为一不操作指令来执行(亦即不去执行条件ALU指令124)。此流程终止于步骤1216。
[0243] 在步骤1218中,执行单元424确认条件ALU微指令126是否指定一进位更新ALU操作。在一实施例中,执行单元424对条件ALU微指令126的操作码进行解码,以做出确认结果。在另一实施例中,硬件指令转译器104确认ALU操作是否是图10A的步骤1052的进位更新操作,并据此提供一指针至执行单元424。在一实施例中,非进位更新ALU操作包含但不限于由AND、BIC、EOR、ORN、ORR、TEQ、TST、MUL、MOV、MVN、ASR、LSL、LSR、ROR、与RRX ARM ISA指令124所指定的操作。若是ALU操作系进位更新操作,流程前进至步骤1222;否则流程前进至步骤
1224。
[0244] 在步骤1222,执行单元424输出步骤1204产生的结果,清除USE位908与PSC位906为零,设定SAT位904为一,以及输出步骤1204产生的新的架构条件旗标数值至旗标总线928。值得注意的是,不更新溢位旗标但指定一进位更新ALU操作(如ASR、LSL、LSR、ROR、与RRX操作)的条件ALU微指令126的处理过程与步骤1222所描述者有些许不同。尤其是,执行单元
424输出旧的V旗标数值而非新的V旗标数值。此流程终止于步骤1222。
[0245] 在步骤1224,执行单元424检验USE位908。若USE位908被设定为一,流程会前进至步骤1228;否则,流程就会前进至步骤1226。在另一实施例中,如上文/下文所述,USE位908并不存在,而执行单元424则是检测条件ALU微指令126内的指针,以确认是否以PSC位906内的预移位进位旗标数值来更新架构进位旗标902,还是使用旧的进位旗标数值924。
[0246] 在步骤1226中,执行单元424输出步骤1204产生的结果、清除USE位908与PSC位906为零、设定SAT位904为一,以及以下列方式输出架构条件旗标至旗标总线928:C旗标与V旗标系写入由步骤1202所接收的旧的C旗标与V旗标数值;N旗标与Z旗标系分别以步骤1204所产生的新的N旗标与Z旗标数值做写入。此流程终止于步骤1226。
[0247] 在步骤1228中,执行单元424输出步骤1204产生的结果,清除USE位908与PSC位906为零,设定SAT位904为一,以及以下列方式输出架构条件旗标至旗标总线928:C旗标写入由步骤1202所接收的PSC位906的数值;V旗标写入由步骤1202所接收的旧的V旗标数值;N旗标与Z旗标分别写入步骤1204所接收的新的N旗标与Z旗标数值。此流程终止于步骤1228。
[0248] 在一实施例中,输出于旗标总线928的数值会因为依据指令模式指针132指示为x86或ARM而有不同,因此,执行单元424会以不同方式执行条件ALU微指令126。具体来说,若是指令模式指针132指示为x86,执行单元424就不去区分ALU操作模式是进位更新或是非进位更新、不考虑USE位908、以及利用x86语意来更新条件码旗标。
[0249] 请参照图13,图中显示本发明图4的执行单元424执行一条件移动微指令126的操作。此流程起始于步骤1302。
[0250] 在步骤1302,图4的执行单元424的其中一者接收到一条件移动微指令126,如图10所述由硬件指令转译器104响应遇到一条件ALU指令124所产生微指令(标示为CMOV或XMOV)的情形。此执行单元424亦接收微指令126所指定的来源操作数,包含条件旗标数值924,无论其是否会被微指令126所使用。接下来前进至步骤1304。
[0251] 在步骤1304,执行单元424对微指令126进行解码以确认其是否为一个XMOV微指令126或是一个微指令126。如果是CMOV微指令126,流程前进至步骤1308;否则流程前进至步骤1306。
[0252] 在步骤1306,执行单元424确认步骤1302接收到的架构条件旗标902并确认是否满足条件。接下来前进至步骤1312。
[0253] 在步骤1308,执行单元424检验由步骤1302接收到的SAT位904并由其确认条件是否满足,如同一写入SAT位904的相对应条件ALU微指令126在之前所做的确认,如图10的步骤1044、1054、与1056所述。接下来流程前进至步骤1312。
[0254] 在步骤1312,若是步骤1306或1308确认条件满足,流程就会前进至步骤1316;否则就会前进至步骤1314。
[0255] 在步骤1314,执行单元424输出第一来源操作数的数值至结果总线128。在图10中,第一来源操作数的数值系旧的目的寄存器数值,以能够在条件不被满足且不变更目的寄存器的数值的情况下,有利于将条件ALU指令124整体视为一不操作指令(即不去执行条件ALU指令124)来执行。此流程终止于步骤1314。
[0256] 在步骤1316中,执行单元424输出第二来源操作数的数值至结果总线128。如图10所示,此第二来源操作数的数值系由相关的条件ALU微指令126写入暂时寄存器的数值,以利于在预设条件满足的情况下,通过将结果写入目的寄存器,以协助条件ALU指令124的执行。此流程终止于步骤1316。
[0257] 请参照图14,图中是以一方块图显示本发明图1的执行管线112执行一条件ALU指令124的操作。具体来说,此条件ALU指令124系一旗标更新、非预移位、条件ALU的操作ISA指令124。硬件指令转译器104系将此指令124转译为图10的步骤1044的微指令126。图4的寄存器配置表402产生附属信息给位于暂时寄存器T2的CMOV微指令126以及由条件ALUOP微指令126写入的条件旗标寄存器926的数值等等。指令调度器404将微指令126分派至图4中适当的保留站406。当微指令126可取得所有来源操作数的数值时(无论是从导向总线
(forwarding bus)128、重排缓冲器(ROB)422、或是寄存器文件106),指令发布单元408确认一微指令126已完成由其保留站406发送至相对应执行单元以供执行的准备。此微指令126系依据图12(包括图12A和图12B)与图13的描述内容来执行。
[0258] 执行单元424从保留站406接收步骤1044所产生的条件ALUOP微指令126、从图1的寄存器文件106的寄存器R1与R2接收来源操作数的数值、以及依据图12A的步骤1202从图9的条件旗标寄存器926(或是从导向总线128与/或ROB422)接收条件旗标924。执行单元424对寄存器R1与R2执行ALU操作(若是此ALU操作是使用进位操作,则对所接收的C旗标902执行此操作)以产生一结果,此结果系依据步骤1204写入暂时寄存器T2。此外,(1)若是架构条件旗标902并不满足指定的条件(在图14中标示为NOT SATISFIED),执行单元424依据图12B的步骤1216产生新的条件旗标928数值以写入条件旗标寄存器926;(2)若是架构条件旗标902满足指定的条件而ALU操作系非进位更新的操作(在图14中标示为NCUALUOP SAT),执行单元424依据图12的步骤1226产生新的条件旗标928数值以写入条件旗标寄存器926;并且(3)若是架构条件旗标902满足指定的条件并且ALU操作系进位更新的操作(在图14中标示为CU ALUOP SAT),执行单元424依据图12的步骤1222产生新的条件旗标928数值以写入条件旗标寄存器926。暂时寄存器T2的数值与条件旗标928系提供于导向总线128供CMOV微指令126利用,在并非来自导向总线128的情况下写入重排缓冲器422的项目供CMOV微指令126利用,并且在并非来自导向总线128或重排缓冲器422的情况下,除了在例外事件出现、分支误预测、或是其它无效事件的情形下是最终引退至适当的架构状态而被CMOV微指令126所利用。尤其是,图9的多工器922将操作而选择适当的条件旗标924提供给执行单元424。
[0259] 执行单元424接收步骤1044的CMOV微指令126,暂时寄存器T2与目的寄存器(RD)的来源操作数数值,以及依据图13的步骤1302所产生的条件旗标924。依据图13的步骤1316与1314,当SAT位904被设定时,执行单元424输出暂时寄存器T2的来源操作数的数值,当SAT位
904被清除时,执行单元424输出目的寄存器RD的来源操作数的数值。此结果数值系提供于导向总线128供后续微指令126所利用,并写入重排寄存器422的项目,最后在除了例外事件出现、分支误预测、或是其它无效事件之外,被引退至其适当的架构状态而被微指令126所利用。
[0260] 如步骤1222所述,旗标更新条件ALU指令124指定一进位更新ALU操作,但不更新溢位旗标,如ARM ISA ASR、LSL、LSR、ROR、与RRX指令124,这些指令124的处理程序与图14所示有些不同。尤其是,执行单元424输出旧的V旗标数值而非新的V旗标数值。最后,如前述,旗标更新ARM ISA MUL以及MOV/MVN(寄存器)指令124均属非进位更新指令并且无法指定一预移位操作,因而系以步骤1044的程序处理。在图12B的步骤1226有更明确的说明。
[0261] 在前文中可发现,ALU操作微指令126系通过SAT位904指示CMOV微指令126是否旧的条件旗标902满足指定条件,藉以使ALU操作微指令126替代条件旗标902的旧的数值,并在条件满足时,依据ALU操作结果所产生的适当数值来进行处理。
[0262] 请参照图15(包括图15A和图15B),图中是以一方块图说明本发明图1的执行管线112执行一条件ALU指令124。具体来说,此条件ALU指令124系一旗标更新、预移位、非进位更新条件ALU的操作ISA指令124,硬件指令转译器104系将此指令124转译为图10B步骤1056所示的微指令126。图15(包括图15A和图15B)的操作在许多面向系类似于图14的操作,相似的操作在此不再赘述,以下仅列出相异处。图4的寄存器配置表402产生附属信息给位于暂时寄存器T3的NCUALUOP微指令126以及由移位微指令126写入的条件旗标寄存器926的数值等等。微指令126系依据第11、12与13图的描述来执行。
[0263] 执行单元424由保留站406接收步骤1056所产生的移位微指令126、由寄存器文件106的寄存器R2与R3接收来源操作数数值、以及依据图11的步骤1102由条件旗标寄存器926接收条件旗标924(或是由导向总线128与/或重排缓冲器422)。执行单元424在寄存器R2与R3执行移位操作(若是ALU操作系进位使用操作,则对所接收到的C旗标902进行此操作)以产生一结果并依据步骤1104写入暂时寄存器T3。此外,执行单元424依据步骤1104产生新的架构条件旗标902数值,并依据图11的写入条件旗标寄存器926的步骤1114来写入新的条件旗标928。暂时寄存器T3的数值与条件旗标928系提供至导向总线128供NCUALUOP微指令126利用,若非来自导向总线128则是写入重排缓冲器422的项目供NCUALUOP微指令126利用,并且若非来自导向总线128或重排缓冲器422时,最后在除了例外事件出现、分支误预测、或是其它无效事件之外被退出至其适当的状态而被NCUALUOP微指令126利用。尤其是,图9的多工器922的操作系选择适当的条件旗标924提供给执行单元424。
[0264] 执行单元424由保留站406接收步骤1056所产生的NCUALUOP微指令126、由寄存器文件106的寄存器R1与暂时寄存器T3接收来源操作数数值、以及依据步骤1202由条件旗标寄存器926接收条件旗标924。执行单元424在寄存器R1与暂时寄存器T3执行ALU操作(在ALU操作系一使用进位操作时,亦在接收到的C旗标902执行)以产生一结果,并依据步骤1204写入暂时寄存器T2。此外:(1)若是架构条件旗标902不满足指定条件(图15中标示为NOT SATISFIED),执行单元424依据步骤1216产生新的条件旗标928数值以写入条件旗标寄存器926;(2)若是架构条件旗标902满足指定条件且USE位908系被清除(在图15中标示为SAT.,USE==0),执行单元424依据图12B的步骤1226产生新的条件旗标928数值以写入条件旗标寄存器926;以及(3)若是架构条件旗标902满足指定条件且USE位908被设定(图15中标示为SAT.,USE==1),执行单元424依据图12的步骤1228产生新的条件旗标928数值以写入条件旗标寄存器926。图15的CMOV微指令126的执行系类似于图14所描述者。在另一实施例中,如前述,USE位908并不存在,而执行单元424改以检验条件ALU微指令126内的指针来确认是以PSC位906内的预移位进位旗标数值更新架构进位旗标902,还是以旧的进位旗标数值924做更新。
[0265] 在前文中可发现,移位微指令126并不替代条件旗标902的旧的数值,而是将条件旗标902的旧的数值写回条件旗标寄存器926,因此,由移位微指令126接收条件旗标寄存器926的结果的条件ALU操作微指令126,可确认旧的条件旗标902是否满足由ISA条件ALU指令
124所指定的条件。另一方面,若是移位微指令126系以新产生的进位旗标数值代替旧的进位旗标902,条件ALU操作微指令126将不会确认旧的条件旗标902是否满足指定条件。
[0266] 请参照图16(包括图16A和图16B),图中是以一方块图说明本发明图1的执行管线112执行一条件ALU指令124的情形。具体来说,此条件ALU指令124系一旗标更新、预移位、进位更新条件ALU操作ISA指令124,硬件指令转译器104则是依据图10的步骤1054将此指令
124转译为微指令126。图16的操作在许多面向系类似于图15的操作,相似部分在此不与赘述,而仅说明相异之处。图4的寄存器配置表402产生附属信息给移位微指令126写入暂时寄存器T3的数值的CU ALUOP微指令126,不过,由于移位微指令126并不写入条件旗标寄存器,此寄存器配置表并不产生其相关信息。
[0267] 执行单元424由保留站406接收步骤1054所产生移位微指令126并依据步骤1102由寄存器文件106的寄存器R2与R3接收来源操作数数值,但不接收条件旗标924(除非ALU操作系一使用进位操作)。此执行单元424在寄存器R2与R3上进行移位操作(若是ALU操作系一使用进位操作,则在所接收到的C旗标902上进行)以产生一结果依据步骤1104写入暂时寄存器T3。暂时寄存器T3的数值系提供至导向总线128供CU ALUOP微指令126利用、若非来自导向总线128,则是写入重排缓冲器422的项目供CU ALUOP微指令126利用、以及若非来自导向总线128或重排缓冲器422,则是除了例外事件出现、分支误预测、或其它无效事件之外被引退至其适当的状态供CU ALUOP微指令126利用。
[0268] 执行单元424由保留站406接收步骤1054所产生的CUALUOP微指令126,由寄存器文件106的寄存器R1与缓冲寄存器T3接收来源操作数数值,以及由条件旗标寄存器926并依据步骤1202接收条件旗标924。执行单元424在寄存器R1与暂时寄存器T3执行ALU操作(若是ALU操作系一使用进位操作,则在所接收到的C旗标902执行)以产生一结果并依据步骤1204写入暂时寄存器T2。此外:(1)若是架构条件旗标902并不满足指定条件(在图16中标示为NOT SATISFIED),执行单元424依据步骤1216产生新的条件旗标928数值以写入条件旗标寄存器926;以及(2)若是架构条件旗标902满足指定条件(在图16中标示为SATISFIED),执行单元424依据图12的步骤1222产生新的条件旗标928数值以写入条件旗标寄存器926。图16的CMOV微指令126的执行系类似于图14所描述者。
[0269] 请参照图17,图中是以一方块图显示本发明图1的执行管线112执行一条件ALU指令124的操作。具体来说,此条件ALU指令124系一非旗标更新、预移位、使用进位条件ALU操作的ISA指令124,硬件指令转译器104将此指令转译为图10的步骤1036所述的微指令126。依据图17的操作在许多面向是相似于图16的操作,相似的操作在此不再赘述,以下仅列出相异处。图17的移位微指令126的执行系类似于图16所描述者。
[0270] 执行单元424由保留站406接收步骤1036所产生的ALUOPUC微指令126、由寄存器文件106的寄存器R1与暂时寄存器T3接收来源操作数数值、以及依据步骤1202由条件旗标寄存器926接收条件旗标924。因为ALU操作系一使用进位操作,执行单元424在寄存器R1、暂时寄存器T3与接收到的C旗标902执行ALU操作,以产生一结果并依据步骤1204写入暂时寄存器T2。执行单元424并不写入条件旗标寄存器926。
[0271] 执行单元424接收步骤1036所产生的XMOV微指令126、暂时寄存器T2与目的寄存器RD的来源操作数数值、以及依据图13的步骤1302所产生的条件旗标924。依据图13的步骤1316与1314,在条件旗标924满足预设条件时,执行单元424将暂时寄存器T2的来源操作数的数值作为其结果输出,而在条件旗标924不满足预设条件时,执行单元424将目的寄存器RD的来源操作数的数值作为其结果输出。此结果数值系提供至导向总线128供后续微指令
126利用、此结果数值系写入重排缓冲器422的项目、并且除了例外事件出现、分支误预测、或是其它无效事件之外,此结果数值会引退至其适当的架构状态。
[0272] 请参照图18,图中是以一方块图说明本发明图1的执行管线112执行一条件ALU指令124的情形。具体来说,此条件ALU指令124是一非旗标更新、预移位、非使用进位条件ALU操作的ISA指令124,而硬件指令转译器104系将此指令124转译为图10的步骤1034的微指令126。依据图18所进行的操作在许多面向系类似于依据图17所进行者,其中相似处系不再赘述,而仅说明相异处。图18的移位微指令126的执行系类似于图16所描述者。图18的ALUOP微指令126的执行系类似于图17的ALUOPUC微指令126的执行,除了图18的ALUOP微指令126并不使用C旗标902来产生其结果。图18的XMOV微指令126的执行系类似于图17的XMOV微指令
126的执行。
[0273] 请参照图19,图中是以一方块图说明本发明图1的执行管线112执行一条件ALU指令124。具体来说,此条件ALU指令124系一非旗标更新、非预移位、使用进位条件ALU操作的ISA指令124,而硬件指令转译器104系将此指令124转译为图10的步骤1026所述的微指令126。依据图19的操作在许多面向系类似于图17所述者,相似处在此不再赘述,而仅说明相异处。条件ALU指令124的转译系一非旗标更新、非预移位、使用进位条件ALU操作的ISA指令
124,而不包含一移位微指令126。
[0274] 执行单元424从保留站406接收步骤1026所述的ALUOPUC微指令126、从寄存器文件106的寄存器R1与R2接收来源操作数数值、以及依据步骤1202从条件旗标寄存器926接收条件旗标924。因为ALU操作系一使用进位操作,执行单元424在寄存器R1与R2以及所接收到的C旗标902执行ALU操作,以产生一结果且依据步骤1204写入暂时寄存器T2。执行单元424并不写入条件旗标寄存器926。图19的XMOV微指令126的执行系类似于图17的XMOV微指令126的执行。
[0275] 请参照图20,图中是以一方块图说明本发明图1的执行管线112执行一条件ALU指令124。具体来说,此条件ALU指令124系一非旗标更新、非预移位、非使用进位条件ALU操作的ISA指令124,硬件指令转译器104系将此指令转译为图10的步骤1024所述的微指令126。依据图20的操作在许多面向系类似于图19所描述的操作,其中相同处不再赘述,而仅说明相异处。图20的ALUOP微指令126的执行系类似于图19的ALUOPUC微指令126的执行,除了图
20的ALUOP微指令126并不使用C旗标902来产生其结果。图20的XMOV微指令126的执行系类似于图17的XMOV微指令126的执行。
[0276] 在前文中可以发现,本发明所述的实施例可避免允许微指令126来指定一额外来源操作数所衍生出来的缺点。这些缺点包括,第一,对各个将利用额外来源操作数执行微指令126的执行单元424,在通用寄存器文件需设置一额外的读出端口。第二,对各个将利用额外来源操作数执行微指令126的执行单元424,在重排缓冲器422需设置一个额外的读出端口。第三,对各个将利用额外来源操作数执行微指令126的执行单元424,在导向总线128上需使用更多的线路。第四,对各个将利用额外来源操作数执行微指令126的执行单元424,需要一个额外相对较大的多工器。第五,需要使用Q个额外的标签比较器,其中:
[0277] Q=∑i=1to n,(R[i]*P[i]*J[i])
[0278] 其中,n是执行单元424的数量,R[i]是保留站406提供给第[i]个执行单元424的项目的数量406,P[i]是可由第[i]个执行单元424所执行微指令所能指定的来源操作数的最大数量,以及J[i]是能够导向至第[i]个执行单元424的执行单元424的数量。第六,对额外的来源操作数,在寄存器配置表402中需要额外的重命名查询操作。第七,需要扩展保留站406以处理额外的来源操作数。这些在速度、电力与空间付出的额外成本是不受欢迎的。
[0279] 相同来源目的(SAME-SOURCE-DESTINATION)优化实施例
[0280] 请参照图21,图中是以流程图说明本发明图1的硬件指令转译器104转译条件ALU指令124的操作。基本上,硬件指令转译器104依据图21所述的操作在许多面向系类似于依据图10所述的操作,尤其是对应于各种需要做出决定的步骤,因而在此对于这些步骤给予相同的编号。
[0281] 请参照图21,图10的步骤1002系以步骤2102予以取代。在步骤2102中,硬件指令转译器104遇到的条件ALU指令124系不同于步骤1002所遇到的,因为在步骤2102所遭遇到的条件ALU指令124系在多个来源寄存器中指定一个寄存器作为目的寄存器。硬件指令转译器104系配置来识别此条件并且优化其输出的微指令126。尤其是,硬件指令转译器104系将相同来源目的的条件ALU指令124解码并将其转译为与图10的步骤1024、1026、1034、1036、
1044、1054与1055(步骤10XX)所描述者不同的微指令126序列。此不同的微指令126序列系描述于图21的步骤2124、2126、2134、2136、2144、2154与2156(步骤21XX)以取代其相对应的步骤10XX。尤其是,步骤21XX中的各个步骤的微指令126序列所具有的微指令126,较步骤
10XX内的相对应微指令126序列少一个指令。具体来说,步骤21XX的序列并不包含CMOV或XMOV微指令126,选择性写入原始目的寄存器数值或是结果数值的操作,系由条件ALU微指令126在序列的末端执行。此操作在下列段落会有更清楚的说明。
[0282] 在步骤2124中,硬件指令转译器104将相同来源目的非旗标更新、非预移位、非进位使用的条件ALU指令124转译为单一个微指令126,即一条件ALU操作微指令126(标示为ALUOP CC)。在步骤2124的实例中,条件ALU指令124系类似于步骤1024所描述者,除了第一来源操作数系目的寄存器(RD)。因此,条件ALU指令124指定一第一来源寄存器(RD)与一第二来源寄存器(R2),一ALU操作(标示为ALUOP)用以执行于第一来源寄存器RD与第二来源寄存器R2以产生一结果,而目的寄存器(RD)则与第一来源寄存器相同,执行结果系有条件地写入此目的寄存器中。条件ALUOP微指令126与条件ALU指令124指定相同的ALU操作与条件。执行条件ALUOP微指令126的执行单元424接收旧的或是当前的目的寄存器(RD)的数值,同时依据步骤1202接收第二来源操作数R2的数值,并依据步骤1204执行ALU操作于此两个来源操作数以产生一结果。执行单元424亦接收条件旗标924并依据步骤1204检验条件旗标
924以确认其是否满足指定条件。若是,执行单元424依据步骤1211输出结果,否则就依据步骤1212输出旧的目的寄存器数值。条件ALUOP微指令126的执行是以方块图呈现于第28图。
此流程终止于步骤2124。
[0283] 在步骤2126中,硬件指令转译器104将相同来源目的非旗标更新、非预移位、使用进位的条件ALU指令124转译为单一个微指令126,即一使用进位条件ALU操作微指令126(标示为ALUOPUC CC)。在步骤2126的实例中,此条件ALU指令124是类似于步骤2124所描述者,除了其所指定的ALU操作系使用进位旗标,并且此指令亦类似于步骤1026所描述者,除了第一来源操作数系目的寄存器(RD)。条件ALUOPUC微指令126是类似于步骤2124所描述者;不过,其所指定的ALU操作系使用进位旗标。如图27的方块图所示的条件ALUOPUC微指令126的执行系类似于步骤2124的条件ALUOP微指令126的执行,除了执行单元424系使用进位旗标来执行ALU操作。此流程终止于步骤2126。
[0284] 在步骤2134中,硬件指令转译器104系将相同来源目的非旗标更新、预移位、非使用进位的条件ALU指令124转译为第一与第二微指令126,即:(1)一移位微指令126;以及(2)一ALUOP微指令126。在步骤2134的实例中,条件ALU指令124系类似于步骤1034所描述者,除了第一来源操作数系目的寄存器(RD)外,并且,此指令系类似于步骤2124所描述者,除了条件ALU指令124亦指定一具有一移位量的预移位操作于第二来源操作数(R2),在步骤2134的实例中,此移位量系储存于由条件ALU指令124所指定的第三来源寄存器(R3)。不过,若是条件ALU指令124属于会将移位量指定为指令124内的常数的种类,第三来源寄存器就不会被使用。移位微指令126系类似于步骤1034所描述者,而执行单元424执行此移位微指令126的方式系类似于步骤1034与图18所描述者。虽然在步骤2134中,因为条件ALU指令124指示架构条件旗标902不会被更新,因此,由移位微指令126产生的进位旗标数值并不会被使用,不过,如在步骤2156,由移位微指令126所产生的进位旗标数值则是会被使用到。此外,此预移位操作会需要旧的进位旗标旋转至移位后的结果数值;举例来说,RRX预移位操作系将进位旗标移位至结果的最高有效位。在此情况下,虽未见于图21(除了步骤2156之外),当执行单元424执行移位微指令126时,它亦会读取条件旗标924以取得当前的进位旗标数值。条件ALUOP微指令126及其执行系类似于步骤2124所描述者;不过,此微指令系接收暂时寄存器T3的数值而非寄存器R2的数值,并且执行ALU操作于寄存器R1与暂时寄存器T3以产生结果写入目的寄存器。移位微指令126的执行与条件ALUOP微指令126是呈现于第26图中。此流程终止于步骤2134。
[0285] 在步骤2136中,硬件指令转译器104将相同来源目的非旗标更新、预移位、使用进位的条件ALU指令124更新为第一与第二微指令126,即:(1)一移位微指令126;以及(2)一使用进位条件算术与逻辑单元ALUOP微指令126(标示为ALUOPUC CC)。在步骤2136的实例中,条件ALU指令124系类似于步骤2134所描述者,除了所指定的ALU操作系使用进位旗标,并且,此指令系类似于步骤1036所描述者,除了第一来源操作数系目的寄存器(RD)。这两个微指令126以及其执行系类似于步骤2134所描述者;不过,ALUOPUC微指令126亦接收条件旗标924以取得进位旗标当前的数值以使用于进位使用ALU操作。移位微指令126与条件ALUOPUC微指令126的执行,如图25所示,系类似于步骤2134中的移位微指令126与条件ALUOP微指令
126的执行,除了执行单元424系使用进位旗标来执行ALU操作。此流程终止于步骤2136。
[0286] 在步骤2144中,硬件指令转译器104将相同来源目的旗标更新、非预移位的条件ALU指令124转译为单一个微指令126,即一条件ALU操作微指令126(标示为ALUOP CC)。在步骤2144的实例中,条件ALU指令124系类似于步骤2124的条件ALU指令124,除了会更新架构条件旗标902之外,并且系类似于步骤1044所描述者,除了第一来源操作数系目的寄存器。步骤2144的条件ALU操作微指令126及其操作系类似于步骤2124所描述者,除了步骤2144的ALU操作微指令126亦更新架构条件旗标902,并且系类似于步骤1044的条件ALU微指令126,除了其第一操作数系目的寄存器而非寄存器R1并且其目的寄存器系目的寄存器而非暂时寄存器T2。执行单元424执行条件ALU微指令126的执行单元424系依据步骤1202接收目的寄存器RD与寄存器R2作为来源操作数,并且依据步骤1204执行此指定的ALU操作于此二个来源操作数以产生一结果。执行单元424亦接收架构条件旗标902并依据步骤1206确认其是否满足指定条件。若是,执行单元424依据ALU操作是否为进位更新操作,来选择依据步骤1222或1226输出ALU操作的结果以写入目的寄存器RD,否则就依据步骤1216输出目的寄存器RD的旧的数值。此外,执行单元424依据条件是否满足以及ALU操作是否为进位更新操作,来选择依据步骤1216、1222或是1226写入条件旗标寄存器926。若是条件不满足,执行单元424依据步骤1216将旧的条件旗标数值写入架构条件旗标902;反之,若是条件满足,执行单元424在采取条件进位ALU操作的情况下,系依据步骤1222,基于ALU操作的结果来更新架构条件旗标902,而在采取非条件进位ALU操作的情况下,则是依据步骤1226。条件算术与逻辑单元ALUOP微指令126的执行系呈现于图22。值得注意的是,在步骤2144(以及步骤1054与1056)产生的条件ALU操作微指令126所执行的ALU操作,可以是一使用进位旗标的ALU操作(类似于步骤1026与1036所描述者),而由于微指令126会读取旗标(由RDFLAGS标示),执行单元
424具有此进位旗标来执行进位使用ALU操作。此流程终止于步骤2144。
[0287] 在步骤2154,硬件指令转译器104将相同来源目的旗标更新、预移位、进位使用的条件ALU指令124转译为第一与第二微指令126,即(1)一移位微指令126;以及(2)一条件进位更新ALU操作微指令126(标示为CU ALUOP CC)。在步骤2154的实例中,条件ALU指令124系类似于步骤2134所描述者,除了条件ALU指令124亦指定架构条件旗标902是要被更新的,并且系类似于步骤1054所描述者,除了第一来源操作数系目的寄存器。移位微指令126系类似于步骤1034所描述者,并且,执行单元424执行移位微指令126的方式系类似于图18的步骤1034所描述者。CU ALUOP微指令126及其执行系类似于步骤2124的条件ALU微指令126,除了步骤2144的CU ALUOP微指令126亦会更新架构条件旗标902,并且系类似于步骤1054的条件ALU微指令126,除了其第一操作数系目的寄存器而非寄存器R1,且其目的寄存器系目的寄存器而非暂时寄存器T2。执行CU ALUOP微指令126的执行单元424系依据步骤2102接收目的寄存器RD与暂时寄存器T3作为来源操作数,并依据步骤1204执行此指定的ALU操作于目的寄存器与暂时寄存器T3以产生一结果。此外,执行单元424依据步骤1202接收架构条件旗标
902,并且依据步骤1206确认其是否满足指定条件。此外,依据条件是否满足,执行单元424系依据步骤1216或1222以更新条件旗标寄存器926。若是条件不被满足,执行单元424将旧的条件旗标数值写入架构条件旗标902;反之,若是条件满足,执行单元424则基于ALU操作的结果来更新架构条件旗标902。移位微指令126与条件ALUOP微指令126的执行系呈现于第
24图。此流程终止于步骤2154。
[0288] 在步骤2156中,硬件指令转译器104系将相同来源目的旗标更新、欲移位、非进位更新的条件ALU指令124转译为第一与第二微指令126,即:(1)一移位微指令126;以及(2)一条件非进位更新ALU操作微指令126(标示为NCU ALUOP CC)。在步骤2156的实例中,条件ALU指令124系类似于步骤2154所描述者,除了条件ALU指令124系指定一非进位更新ALU操作,并且系类似于步骤1056所描述者,除了第一来源操作数系目的寄存器。因此,在条件满足时,架构进位旗标902系以此预移位进位旗标数值进行更新。移位微指令126系类似于步骤2134所描述者;不过,移位微指令126会读取以及写入条件旗标寄存器926。具体来说,执行移位微指令126的执行单元424系:(1)将预移位操作所产生的进位旗标数值写入PSC位906;
(2)设定USE位908来指示条件NCUALUOP微指令126去利用PSC位906来更新架构进位旗标
902;以及(3)依据步骤1114将旧的架构条件旗标902写回条件旗标寄存器926,藉此
NCUALUOP微指令126可以评估架构条件旗标902的旧的数值来确认其是否满足指定条件。
NCUALUOP微指令126与条件ALU指令124系指定相同的条件。执行NCUALUOP微指令126的执行单元424系依据步骤1204执行ALU操作于目的寄存器与暂时寄存器T3以产生一结果。此外,执行单元424接收架构条件旗标902并且依据步骤1206确认其是否满足条件。此外,执行单元424依据条件是否满足以及USE位908是否被设定,选择依据步骤1216、1226或1228来写入条件旗标寄存器926。具体来说,若是条件不被满足,执行单元424会依据步骤1216将旧的条件旗标数值写入架构条件旗标902;而在条件满足时,执行单元424会视USE位908是否被设定,选择依据步骤1226或是1228,且基于ALU操作的结果来更新架构条件旗标902。具体来说,架构溢位(V)旗标902系以旧的溢位旗标数值924写入,N旗标与Z旗标则是以基于结果所产生的新的数值写入。此外,若是USE位908如此指示,架构进位旗标902系依据步骤1228以位于PSC位906的预移位进位旗标数值进行更新,否则就依据步骤1226以旧的进位旗标数值
924进行更新。移位微指令126与NCUALUOP微指令126的执行系呈现于第23图。此流程终止于步骤2156。
[0289] 此处理方式的优点在于,在条件ALU指令124指定目的寄存器与来源寄存器其中之一为同一者时,硬件指令转译器104可以进行优化且使所产生的微指令126序列减少一个微指令126。第一,其可增加微处理器100的前瞻(lookahead)功能以利用所欲执行的程序的指令层的平行处理来增加执行单元424的使用。因为微指令126数量减少意味着重排缓冲器422中供额外微指令126所用的自由槽(slot)将增加,于是能产生一较大的微指令126池(pool)以完成发布准备供后续执行之用,因而可以提升此前瞻功能。第二,因为每一个时脉周期中,硬件指令转译器104只能输出微指令126至一预设数量的槽(slot),而至少在一实施例中,硬件指令转译器104必须在同一时脉周期内输出实施一给定ISA指令124所需的所有微指令126,因此,减少一条件ALU指令124转译产生的微指令126数量,亦可减少每个周期内空的微指令126槽的平均数量,同时有助于增加微处理器100的前瞻功能与执行单元424的使用。
[0290] 条件非分支指令预测
[0291] 以上实施例所描述的是在限定读出端口(read port-limited)的管线式微处理器中,将一条件非分支指令,亦即此处所称的条件ALU指令,转译为微指令的技术。第一微指令执行一ALU操作并将结果写入一暂时寄存器。第二微指令接收来自暂时寄存器的结果与目的寄存器的当前数值,并且在条件满足时,将结果写入目的寄存器,而在条件不满足时,将当前数值写回目的寄存器。相类似地,美国临时申请案61/473,062所描述的实施例系在一限定读出端口的管线式微处理器中,将一条件非分支指令,即文中所称的条件载入指令转译为微指令。此指令转译器系将条件载入指令转译为二个微指令:(1)一个同时取得条件码与旗标的载入微指令,在条件不满足时,就不更新其架构状态(例如:页表查询产生的存储器写入的副作用或是产生例外事件)并且加载一虚设数值至暂时寄存器,不过,若是条件满足,就将来自存储器的真实数值加载暂时寄存器;以及(2)一个条件移动微指令,接收目的寄存器的当前数值,并且在条件非为真时,将此当前数值移回目的寄存器,而在条件为真时,将来自暂时寄存器的数值移至目的寄存器。
[0292] 虽然此解决方法相较于传统技术有所改善,不过,此方法会产生额外的成本,亦即第二微指令以及第二微指令与第一微指令的关联性有关的延迟。其次,在微处理器的其它结构的指令槽,例如微指令队列、重排缓冲器、保留站、以及执行单元也会被第二微指令利用。此外,第二微指令的出现会降低每个时脉周期中,指令转译器所发出、指令发布单元所发布、以及指令引退单元所引退的平均指令数量,因而限制了微处理器的处理能力。
[0293] 本发明在此提供一种具有更高效能的解决方法,纳入一预测机制,类似于分支预测方法,来预测条件非分支指令的走向,亦即预测条件是否被满足,而决定是否需要执行条件非分支指令。此解决方法让条件转译器可基于预测信息发出单一的微指令,而非多个微指令。微处理器并具有一个由误预测状态恢复的机制。
[0294] 以下同时描述有静态与动态预测机制的实施例。静态预测机制系类似于静态分支预测。动态(或基于历史信息)的预测机制系在由指令快取撷取条件非分支指令时,检视此条件非分支指令的程序计数器/指令指针的数值,此运作方式类似于分支目标存储器地址快取(branch target address cache,BTAC)。
[0295] 在静态预测机制中,静态预测器检视此操作与/或由条件非分支指令指定的条件码(例如:ALU操作是加,条件码是EQUAL),并预测是否基于现有数据(profiling data)执行此操作。举例来说,基于操作与条件码的结合与经验数据显示相当大比例的时间里会执行条件非分支指令时,于是静态预测器预测此指令将会被执行,而指令转译器将发出单一个非条件微指令,例如:
[0296] addcc dst,src1,src2
[0297] 此条件码与旗标系提供给微指令(也就是addcc),因此,此执行单元可以确认此预测是否正确,并在预测错误时产生一误预测指标。
[0298] 相反地,操作与条件码的结合与经验数据显示相当大比例的时间条件非分支指令不会被执行的情况下,此静态预测器预测此指令不会被执行,此指令转译器发出单一个不操作(nop)微指令,例如:
[0299] Nopcc
[0300] 同样地,此条件码与旗标系提供给微指令(也就是nopcc),因此,执行单元在必要时可以产生一误预测指标。
[0301] 在执行/不执行的比例尚未大到足以证明静态预测的结果是正确的情况下,指令转译器会恢复至前述较低效能的多微指令解决方案,例如:转译器放出两个微指令:
[0302] add tmp,src1,src2
[0303] movcc dst,src-dst,tmp//src-dst是当前的dst reg数值
[0304] 在动态预测机制中,一个类似BTAC的架构,也就是这里所称的条件ALU走向快取(conditional ALU direction cache,CADC)撷取以前执行的条件非分支指令的走向历史信息以及其程序计数器/指令指针数值,并基于CADC入口的历史信息中撷取地址数值命中情形,来预测后续撷取的条件非分支指令的走向。此CADC提供其预测至指令转译器。指令转译器依据前述静态预测器所作的预测发出微指令。
[0305] 回复机制会清除条件非分支指令所在的管线与所有其后的指令(更精确的来说,就是由其转译而来的微指令)、或是所有至少直接或间接与此条件非分支指令相关的指令,然后再重复执行(replay)所有被清除的指令。在条件非分支指令的重复执行中,转译器会倾向于采取发出多个微指令的方式。
[0306] 本发明的一实施例是同时使用静态与动态预测器,并记录对各个程序计数器/指令指针数值而言,哪一个预测器较为准确的历史数据。依据已知的两阶层混合式分支预测的方法,可利用此历史数据以在这两个预测器中动态选择其一提供最终预测。
[0307] 值得注意的是,对于条件非分支指令的误预测会造成损失(即清除管线与重复执行条件非分支指令及其后指令或至少直接间接的相关指令),此损失会变动,并且是应用程序码以及/或数据集的函数。所以,预测条件非分支指令的解决方案对某些应用程序码以及/或数据集的混合状态而言,可能是效能较低的解决方式。
[0308] 此处定义一种非分支指令(non-branch instruction),此指令并不写入微处理器的程序计数器,因此微处理器会撷取与执行此非分支指令的后续指令。程序计数器系应用于ARM架构,其它架构则会使用不同的元件来取代程序计数器。举例来说,x86ISA使用指令指针,而其它ISA使用指令地址寄存器。非分支指令与写入地址至程序计数器/指令指针以使微处理器指向此地址的分支指令有明显的差别。微处理器将开始由分支指令写入程序计数器/指令指针的地址来撷取指令,然后再执行所撷取的指令。此操作与撷取并执行分支指令的后续指令有明显差异,因撷取并执行分支指令的后续指令是微处理器的预设操作,并且也是在遭遇到非分支指令时的操作。条件非分支指令的例子包含条件ALU指令与条件加载/储存指令。
[0309] 请参照图29,图中显示本发明对于非条件分支指令进行预测的微处理器100的方块图。图29的微处理器100系类似于图1的微处理器100,并包含与图1以及图4相类似的元件,即指令快取102、指令转译器104、配置寄存器122、寄存器配置表402、指令发布单元408、执行单元424与重排缓冲器422。执行单元424包含一个或多个单元来执行这里所称的微指令126。此外,执行单元424会执行不操作微指令126。不操作微指令126系指示执行单元424不执行操作。进一步来说,在此所称的不操作微指令126包含一由转译出此不操作微指令126的条件ALU指令124所指定的条件、或条件码。关于不操作微指令126在以下篇幅会有更进一步的说明。微处理器100亦包含架构寄存器、暂时暂存器126与图9的旗标926。
[0310] 图29的微处理器100并包含一动态预测器2932、一静态预测器2936、与一预测器选择器2934。这些元件系耦接至指令转译器104,并用来预测(图2的)一条件ALU指令124的走向(被执行或不被执行)。图1的撷取地址134亦提供给动态预测器2932与预测器选择器2934。
[0311] 动态预测器2932与预测器选择器2934各自包含一具有多个入口的高速缓存。各个入口快取一之前执行的ARM条件ALU指令124的存储器地址。也就是说,当微处理器100引退一条件ALU指令124时,动态预测器2932与预测器选择器2934会被检视,来判断其是否包含一入口具有此条件ALU指令124的地址。若是,此入口就会依据一历史数据更新指针2974所指示的条件ALU指令124的正确走向做更新;若否,就会在动态预测器2932与预测器选择器2934中各配置一个入口给条件ALU指令124。虽然图1的动态预测器2932与预测器选择器
2934系各自独立,不过在一实施例中,此二个元件系整合至单一高速缓存阵列。也就是说,此单一阵列的各个入口包含动态预测器2932的走向预测与预测器选择器2934的选择字段,这在以下篇幅会有进一步说明。
[0312] 动态预测器2932的各个入口储存有一条件ALU指令124的地址,各个入口并具有一字段以储存条件ALU指令124的走向预测。此走向预测系因应此条件ALU指令124在地址上引退的正确走向来进行更新。走向预测可包含各种不同格式。举例来说,走向预测可包含单一位来表示被执行或不被执行。若是预测走向是被执行,此位就设定为一特定数值,若是不执行,就设定为另一个数值。再举另一个例子,走向预测可包含一多位计数器,在预测走向是被执行时,此多位计数器会尽量递增,若是不执行,就会尽量递减。计数器数值大于中央值系预测被执行,小于中央值则是预测不被执行。
[0313] 每次只要从指令快取102撷取指令区块时,撷取地址134会提供至动态预测器2932。动态预测器2932检视此撷取地址134以确认是否吻合其高速缓存阵列的有效标签,亦即命中有效标签与否。若是撷取地址134未命中,动态预测器2932的动态预测输出端2982输出一数值表示无预测(no prediction,NP)。若是撷取地址134命中,动态预测器2932在其动态预测输出端2982输出一数值,表示执行(executed,E)走向或是一不执行(not executed,NE)走向是依据储存于相吻合入口的走向预测字段数值而定。在一实施例中,即使撷取地址
134命中,动态预测器2932的动态预测输出端2982仍可能输出表示无预测(NP)的数值。例如在历史数据显示条件ALU指令124将被执行或不被执行的机率几乎相等,也就是条件将被满足或不被满足的机率几乎相等的情况下。此走向预测2982系提供给指令转译器104。
[0314] 预测器选择器2934的各个入口亦包含一字段,以储存每个地址储存在此入口的条件ALU指令124的选择子(selector),选择子指出动态预测器2932或是静态预测器2936较可能正确预测条件ALU指令124的走向。选择子系因应此条件ALU指令124在地址上的引退进行更新,特别是历史数据更新指针(history update indicator)2974(指示此预测是由动态预测器2932或静态预测器2936所做的)所指示的正确走向与信息来进行更新。选择子可包含各种不同格式。举例来说,此选择子可包含单一位,来表示动态预测器2932或静态预测器2936。在动态预测器2932会正确预测走向时,此位系设定为一特定数值,而在静态预测器
2936会正确预测走向时,设定为另一数值,若是二者都正确预测走向,就维持之前选择的预测器。再举另一个例子,选择子可包含一多位计数器,在动态预测器2932正确预测走向时,此多位计数器会尽量递增,若是静态预测器2936正确预测走向,就会尽量递减,若是二者都正确预测走向,就不更新计数器的数值。计数器数值大于中央值系预测动态预测器2932将会正确预测走向,小于中央值则是预测静态预测2936器将会正确预测走向。
[0315] 每次由指令快取102撷取一指令区块,指令地址134就会提供给预测器选择器2934来检视撷取地址134以确认是否吻合其高速缓存阵列的一有效标签,亦即命中有效标签或是未命中。若是撷取地址134未命中,预测器选择器2934的预测选择输出端2984输出一数值表示无预测(no prediction,NP)。若是撷取地址134命中,预测器选择器2934依据储存于相吻合的入口的选择区数值,在其预测选择输出端2984输出一数值以表示动态预测器2932(D)或是静态预测器2936。在一实施例中,即使撷取地址134命中,预测器选择器2934的选择预测输出端2984可能还是输出数值表示无预测。例如在历史数据显示动态预测器2932或静态预测器2936都不大可能正确预测的情况。此预测选择2984系提供给指令转译器104。
[0316] 静态预测器2936接收撷取自指令快取102的指令124,并分析此指令124的条件码与/或其指定的特殊ALU功能,以预测此条件ALU指令124的走向。静态预测器2936基本上包含一检视表(lookup table),此检视表包含E、NE、或NP指标关联至各个可能的条件码/ALU功能组合。就一实施例而言,这些E、NE、或NP指标系依据写给ARM指令集架构的程序执行的经验数据而配置在静态预测器2936内。静态预测2986系提供给指令转译器104。在一实施例中,此静态预测器2936系整合在指令转译器104内。
[0317] 指令转译器104利用前述预测2982/2984/2986,来将条件ALU指令转译为微指令126,在以下对应于第30与31图的篇幅会有更进一步的说明。这些预测2982/2984/2986系伴随着条件ALU指令124,沿着微处理器100的管线向下传送,供执行单元424利用以确认各个预测器2932/2934/2936是否正确预测条件ALU指令124的走向。在一实施例中,在判断每个时脉周期撷取自指令快取102的指令区块会包含多个条件ALU指令124的情况下,动态预测器2932、预测器选择器2934与静态预测器2936在每个时脉周期都会产生多个预测2982/
2984/2986。
[0318] 在一实施例中,此微处理器100的微架构在许多面向系类似于台湾威盛电子所生产的VIA NanoTM处理器的微架构,不过,本实施例的微处理器100是经修改以支持ARM指令集架构。此VIA NanoTM处理器的微架构系一高效能非循序执行超纯量微架构以支持x86指令集架构。此处理器经如本文所述的修改,即能额外支持ARM微架构,特别是详述于下列篇幅,对应于图2的ARM条件ALU指令124。
[0319] 寄存器配置表402表示一条件移动微指令3046(其详细说明请参照图30)系关联于一ALU微指令3044(其详细说明请参照图30)的结果,二者都是由指令转译器104在特定条件下将条件ALU指令124转译时发出。这些特定条件如下所述,在一条件ALU指令124没有可获得的预测、或是一条件ALU指令被误预测而重复执行时。
[0320] 暂时寄存器106储存微处理器100的非架构状态。暂时寄存器106可由微架构所利用来暂时性地储存执行指令集架构的指令所需的中间值。进一步来说,由指令转译器104放出的微指令可能将暂时寄存器106指定为来源以及/或目的操作数位置。特别是,图30的ALU微指令3044可能将一暂时寄存器106指定为其目的寄存器,相关的条件移动微指令3046则是将同一个暂时寄存器106指定为其中一个来源寄存器。这在以下篇幅会有更进一步的说明。
[0321] 至少一个执行单元424具有一算术逻辑单元(ALU)(未图标)用以执行各种不同的微指令,包含图30所示的ALU微指令3044与具有条件码(CC)的非条件ALU微指令3045。此外,至少一个执行单元424系用以执行图30所示的条件移动微指令3046与具有条件码(CC)的不操作微指令3047。就图30的条件移动微指令3046、具有条件码的非条件ALU微指令3045、或是具有条件码的不操作微指令3047而言,执行单元424系接收条件码数值a224、a254或a274(请参照图30)作为输入值以及旗标926的当前数值。执行单元424确认旗标926的数值是否满足条件码a224、a254或a274指定的条件。因此,执行单元424可确认条件ALU指令124的正确走向,并判断动态预测器2932以及/或静态预测器2936是否对于条件ALU指令124的走向做出误预测,此判断结果系表示于一误预测指标(misprediction indication)2976以提供给重排缓冲器(ROB)422。此外,执行单元424判断预测器选择器2934选择的预测器2932,2936是否正确预测走向,此判断结果系用来更新动态预测器2932与预测器选择器2934。就图30的条件移动微指令3046而言,若是条件被满足,执行单元424系将来源寄存器1的字段a226所指定的暂时寄存器106的数值,移动至图30的目的寄存器字段a232所指定的架构寄存器106。若是条件不被满足,就将来源寄存器2的字段a228所指定的架构寄存器106的数值,也就是原本目的寄存器的数值,移动至目的寄存器字段a232所指定的架构寄存器106。
[0322] 重排缓冲器422接收来自执行单元424的结果,其包含条件ALU指令124的走向是否被误预测的指标。若是此走向并未被误预测,重排缓冲器422系以执行在来源寄存器1与来源寄存器2的字段a206所指定的来源操作数上的条件ALU指令124的操作码a202所指定的ALU操作产生的结果,来更新微处理器100的架构状态,这也就是利用这个结果来更新旗标926与条件ALU指令的目的寄存器字段a208所指定的架构寄存器106,这反映在图30的条件移动微指令3046的目的寄存器字段a232与具有操作码的非条件ALU微指令的目的寄存器字段a258。不过,若是走向系被误预测,重排缓冲器422会产生一真值于一误预测指标2976。此误预测指针2976系提供给指令转译器104,藉此,通过重复执行此被误预测的条件ALU指令
124,指令转译器104知道需要依据一不预测原则(NP regime)回复实行多微指令(multiple microinstruction)技术。此误预测指标2976同时提供给其它相关的管线单元,如寄存器配置表402与指令发布单元408,使其在必要时能清除微指令。此重排缓冲器422同时依据条件ALU指令124的结果,也就是走向预测结果,产生历史数据更新数值2974来更新动态预测器
2932与预测器选择器2934。
[0323] 请参照图30,图中显示图29的指令转译器104对于条件ALU指令124的转译的方块示意图。如本文所述,图29的指令转译器104可能将条件ALU指令124转译为三个不同的微指令集,端视指定转译器104转译条件ALU指令124的环境为何,亦即如图30所示,条件ALU指令124是预测会被执行(E)、预测不会被执行(NE)、或是无预测(NP)。在一实施例中,条件ALU指令124系一ARM指令集架构定义的条件ALU指令。
[0324] 条件ALU指令124包含一操作码字段a202、一条件码字段a204、来源寄存器1与来源寄存器2的字段a206,与一目的寄存器字段a208。操作码字段a202包含一数值以区分此条件ALU指令与指令集架构内的其它指令。
[0325] 条件码字段a204系指定一条件,在此条件下,依据旗标926当前的数值是否满足条件,目的寄存器将会被选择性地以下述ALU微指令3044的结果进行更新。依据一兼容于ARM指令集架构的实施例,此条件码字段a204系指定于条件ALU指令124的上四个位(亦即位[31:28]),使能依据下表3对于十六个不同的可能数值进行编码。对架构版本相关数值(0b1111)而言,此指令无法由架构版本预测,而是用来指出其它架构版本的非条件指令延伸空间(unconditional instruction extension space)。
[0326]
[0327]
[0328] 表3.
[0329] 来源寄存器1与来源寄存器2的字段a206系指定立即值与持有输入操作数的架构寄存器106,而操作码a202指定的ALU操作(例如:加、减、乘、除、及、或等)将会依据对其执行以产生一结果。在条件满足时,此结果将会被条件性地加载由目的寄存器字段a208所指定的架构寄存器106。
[0330] 在无预测(NP)的情况下,指令转译器104系将条件ALU指令124转译为一ALU微指令3044与一条件移动微指令3046供执行单元424执行。
[0331] ALU微指令3044包含一操作码字段a212、来源寄存器1与来源寄存器2的字段a216、与一目的寄存器字段a218。操作码字段a212包含一数值来区别ALU微指令3044与微处理器100的微指令集架构的其它微指令。由条件ALU指令124的操作码a202所指定的ALU功能系传达至ALU微指令3044的操作码字段a212。来源寄存器1与来源寄存器2的字段a216系指定立即值与持有操作数的架构寄存器106。由操作码a212指定的ALU操作将会依据操作数执行以产生一结果,而此结果将会被加载由目的寄存器字段a218所指定的架构或暂时寄存器106。
在无预测的情况下,当指令转译器104转译条件ALU指令124时,指令转译器104系以相同于条件ALU指令124的来源寄存器1与来源寄存器2的字段a206的数值,填入ALU微指令3044的来源寄存器1与来源寄存器2的字段a216。当指令转译器104转译条件ALU指令124时,指令转译器104系填写目的寄存器字段a218以指定一暂时寄存器106接收ALU操作的结果。
[0332] 条件移动微指令3046包含一操作码字段a222、一条件码字段a224、一来源寄存器1的字段a226、一来源寄存器2的字段a228、与一目的寄存器字段a232。操作码字段a222包含一数值来区别此条件移动微指令3046与微处理器100的微指令集架构的其它微指令。条件码字段a224指定一条件,以依据旗标926的当前数值是否满足条件ALU指令124的条件码字段a204的条件,而选择性地执行移动操作。事实上,在转译条件ALU指令124时,指令转译器104系以相同于条件ALU指令124的条件码字段a204的数值,填入条件移动微指令3046的条件码字段a224。来源寄存器1的字段a226指定一架构或是暂时寄存器106,来指出此寄存器的第一来源操作数将会被提供至条件移动微指令3046;而来源寄存器2的字段a228指定一架构或是暂时寄存器106,来指出此寄存器的第二来源操作数将会被提供至条件移动微指令3046。当指令转译器104转译条件ALU指令124时,指令转译器104系以相同于其填入ALU微指令3044的目的寄存器字段a218的数值,填入来源寄存器1的字段a226。指令转译器104亦以相同于其填入条件ALU指令124的目的寄存器字段a208的数值,填入来源寄存器2的字段a228。也就是说,来源寄存器2的字段a228会使条件移动微指令3046接收目的寄存器的当前数值,藉以在条件不被满足时,能够将当前数值写回目的寄存器。此指令转译器104系以相同于条件ALU指令的目的寄存器字段a208的数值,填入目的寄存器字段a232,藉此,不是在条件不满足时,将条件ALU指令124所指定的目的寄存器字段的当前数值加载目的寄存器,就是在条件满足时,将持有ALU微指令3044结果的暂时寄存器的数值加载目的寄存器。
[0333] 在一实施例中,在无预测(NP)的情况下,指令转译器104系将条件ALU指令124转译为第10至28图所述的微指令126。如前述,微指令组126会随着条件ALU指令124而改变,例如:来源寄存器的其中之一是否为目的寄存器、是否为一旗标更新指令、是否指定一预移位、是否使用当前的进位旗标数值、以及在旗标更新预移位的情况下,此ALU操作是否更新进位旗标。特别是,在部分预移位条件ALU指令124的情况下,微指令组会包含如图10所示的三个微指令126,而非如图30所示的两个微指令126。其次,在条件ALU指令124将来源寄存器其中之一指定为目的寄存器的情况下,微指令组所包含的微指令126的数量会减少一个,如图21与图10所比较者。更进一步说,这个微指令组不包含条件移动微指令126,而是由条件ALU微指令126提供条件移动的功能。结果是,在一些实例中,微指令组仅包含如图21所示的单一个微指令126,而非如图30所示的两个微指令126。此外,在旗标更新条件ALU指令124的情况下,微指令组所包含的条件移动微指令126略为不同于图30所示的条件移动微指令126。特别是,为了确认条件是否满足,图10步骤1044、1054与1056所述的条件移动微指令(CMOV)126系检验一非架构旗标,此非架构旗标系由微指令集内前一个微指令126基于架构旗标是否满足条件来进行更新,相较之下,图30的条件移动微指令126则是检验架构旗标来确认条件是否满足。最后,虽然图30的ALU微指令126系一非条件ALU微指令126,第10与21图的ALU微指令126在一些情况下可能是条件ALU微指令126。
[0334] 在被执行(E)的情况下,指令转译器104系将条件ALU指令124转译为一具有条件码的非条件ALU微指令3045供执行单元424执行。此具有条件码的非条件ALU微指令3045包含一操作码字段a252、一条件码字段a254、来源寄存器1与来源寄存器2的字段a256、与一目的寄存器字段a258。此操作码字段a252包含一数值来区别此具有条件码的非条件ALU微指令3045与微处理器100的微指令集架构内的其它微指令。由条件ALU指令124的操作码a252指定的ALU功能系传达至具有条件码的非条件ALU微指令3045的操作码字段a252。来源寄存器
1与来源寄存器2的字段a256指定立即值且架构寄存器106来持有操作数,由操作码a252指定的ALU操作将以它们为操作数来执行并产生一结果。此结果将会被加载至由目的寄存器字段a258所指定的架构或暂时寄存器106。在执行的情况下,指令转译器104系以相同于条件ALU指令124的来源寄存器1与来源寄存器2的字段a206的数值,填入具有条件码的非条件ALU微指令3045的来源寄存器1与来源寄存器2的字段a256。在转译条件ALU指令124时,指令转译器104系以相同于条件ALU指令124的条件码字段a204的数值,填入具有条件码的非条件ALU微指令3045的条件码字段a254。此条件码a254系由执行单元424来确认相关条件ALU指令124的走向是否被误预测。在转译条件ALU指令124时,指令转译器104系以相同于条件ALU指令124的目的寄存器字段a208的数值,填入目的寄存器字段a258。因此,由于相关的条件ALU指令124被预测执行,此具有条件码的非条件ALU微指令3045系一非条件微指令,它不论条件是否满足都会被执行。然而,此具有条件码的非条件ALU微指令3045的预测是类似于一预测分支指令,由于其执行预测仍须经审查,而在发现误预测的情况下,将不会以ALU结果更新目的寄存器字段a258所指定的架构寄存器106,而是清除架构寄存器106,并重复执行相关的条件ALU指令124,而这次执行就不具有预测。相反地,若是执行预测是正确的,就会利用ALU结果来更新目的寄存器字段a258所指定的架构寄存器106。在一实施例中,除了图30的具有条件码的非条件ALU微指令126之外,当条件ALU指令124指定一如第10至28图所述的预移位操作时,指令转译器104会另外为条件ALU指令124转译一移位微指令126,此移位微指令126系位于具有条件码的非条件ALU微指令126之前。举例来说,此移位微指令126系类似于图10的步骤1034所述的移位微指令,而图30的具有条件码的非条件ALU微指令126系经修正来将暂时寄存器指定为其来源操作数寄存器,此暂时寄存器系移位微指令126的目的寄存器。在存在误预测的情况下,除了具有条件码的非条件ALU微指令126之外,此移位微指令126将在图31的步骤3134中被清除(如下所述)。
[0335] 在不执行(NE)的情况下,指令转译器104系将条件ALU指令124转译为一具有条件码的不操作微指令3047供执行单元424执行。此具有条件码的不操作微指令3047包含一操作码字段a272与一条件码字段a274。此操作码字段a272包含一数值以区别此具有条件码的不操作微指令3047与微处理器100的微指令集架构内的其它微指令。在转译条件ALU指令124时,此指令转译器104系将相同于条件ALU指令124的条件码字段a204的数值填入此具有条件码的不操作微指令3047的条件码字段a274。此条件码a274系供执行单元424利用来确认相关的条件ALU指令124的走向是否被误预测。此具有条件码的不操作微指令3047除了使执行单元424启动来检查条件ALU指令的走向预测外,并不会执行其它操作。
[0336] 请参照图31(包括图31A和图31B),图中是一流程图显示本发明图29的微处理器100执行图30的一条件ALU指令124的一实施例。此流程同时始于步骤3102、3104与3106。
[0337] 在步骤3102中,一个包含有图30的条件ALU指令124的指令区块依据如图29所示的指令快取102的撷取地址134进行撷取。接下来进入步骤3108。
[0338] 在步骤3104中,动态预测器2932检视撷取地址134,并提供动态预测2982至图29的指令转译器104。接下来进入步骤3108。
[0339] 在步骤3106,预测器选择器2934检视撷取地址134并提供一预测器选择2984至图29的指令转译器。接下来进入步骤3108。
[0340] 在步骤3108,静态预测器2936接收条件ALU指令124,经评估后,提供静态预测2984至图29的指令转译器104。接下来进入步骤3112。
[0341] 在步骤3112,指令转译器104遇到条件ALU指令124,并接收到来自动态预测器2932、预测器选择器2934与静态预测器2936的预测2982/2984/2986,基于此,指令转译器
104产生此条件ALU指令124的走向预测。接下来进入步骤3114。
[0342] 在步骤3114中,指令转译器104确认其在步骤3112所预测的条件ALU指令124是否被执行。若是,此流程进入步骤3116;否则就进入步骤3118进行判断。
[0343] 在步骤3116,指令转译器104系依据执行预测,发出如图30所示的具有条件码的非条件ALU微指令3045。接下来进入步骤3126。
[0344] 在步骤3118,指令转译器104确认其在步骤3112所预测的条件ALU指令124是否不会被执行。若是,此流程进入步骤3122;否则就进入步骤3124。
[0345] 在步骤3122,指令转译器104系依据不执行预测,发出如图30所示的具有条件码的不操作微指令3047。接下来进入步骤3126。
[0346] 在步骤3124,在无预测的情况下,指令转译器104系放出如图30所示的ALU微指令3044与条件移动微指令3046。接下来进入步骤3126。
[0347] 在步骤3126,执行单元424执行指令转译器104于步骤3116,3122或3124发出的微指令126。在无预测的情况下,执行单元424通过执行由操作码字段a212所指定的ALU功能于指定于字段a216的来源操作数,来执行ALU微指令3044以产生一结果,此结果系输出至结果总线128并被写入重排缓冲器配置给ALU微指令3044的入口,期待之后能写入由字段a218所指定的暂时寄存器106。一旦ALU微指令3044的结果是可获得的,条件移动微指令3046就能够被发送至执行单元424以确认旗标926是否满足由条件码244所指定的条件。若是,ALU微指令3044(不是来自导向总线就是来自暂时寄存器106)的结果就会输出至结果总线128,并被写入重排缓冲器配置给条件移动微指令3046的入口,期待之后能被写入由字段a232所指定的架构寄存器106。不过,若是条件不满足,由来源寄存器2的字段a228所指定的架构寄存器106的原本数值,即由条件ALU指令124的目的寄存器字段a208所指定的架构寄存器,就会被输出至结果总线并被写入重排缓冲器配置给条件移动微指令3046的入口,期待之后能被写入字段a232所指定的架构寄存器106。此执行单元242同时指定一正确预测至重排缓冲器(因为指令转译器104是因应于无预测的情况下产生ALU微指令3044与条件移动微指令3046)。也就是说,在无预测的情况下,既然没有预测,就决不会产生误预测。在预测执行的情况下,执行单元424系通过执行由操作码字段a252所指定的ALU功能于字段a256所指定的来源操作数,来执行具有条件码的非条件ALU微指令3045以产生一结果,此结果系输出至结果总线128并被写入重排缓冲器配置给具有条件码的非条件ALU微指令的入口,期待之后能被写入字段a258所指定的架构寄存器106。执行单元424同时确认旗标926是否满足由条件码a254指定的条件,并据以提供一指标至重排缓冲器422。进一步来说,执行单元424只在旗标926不满足由条件码a254指定的条件时,会指示误预测至重排缓冲器422,这是因为指令转译器104在执行预测的情况下会产生具有条件码的非条件ALU微指令3045,否则就指示正确预测。在不执行的情况下,执行单元424不会执行任何操作,来因应具有条件码的不操作微指令3047的执行。此外,执行单元424确认旗标926是否满足由条件码a274所指定的条件并据以提供一指标给重排缓冲器422。进一步来说,执行单元424只在旗标满足条件码a254所指定的条件时,会指示误预测给重排缓冲器422,这是因为指令转译器104在预测不执行的情况下,会产生具有条件码的不操作微指令3047,否则就指示正确预测。接下来进入决策步骤3128。
[0348] 在决策步骤3128,重排缓冲器422基于接收自执行单元242的误预测指针2976,判断条件ALU指令124的走向是否被误预测。若是,此流程进入步骤3134;若否,就进入步骤3132。
[0349] 在步骤3132,重排缓冲器422系以条件ALU指令124的结果更新微处理器100的架构状态,亦即更新架构寄存器106与旗标926。进一步来说,由于重排缓冲器422必须依照程序顺序引退指令,重排缓冲器422会在条件移动微指令3046(在无预测的情况下)、具有条件码的非条件ALU微指令3045(在预测执行的情况下)、或是具有条件码的不操作微指令3047(在预测不执行的情况下)变成微处理器100中最旧的微指令时,更新架构状态。接下来进入步骤3136。
[0350] 在步骤3134中,重排缓冲器422产生一真值(true value)于误预测指标2976,以使条件ALU指令124转译产生的微指令与所有与其相关的微指令都被清除。此外,在误预测指标2976产生一真值也会使条件ALU指令124重复执行。也就是说,指令转译器104会再次转译条件ALU指令124,只是这次是依循步骤3124的无预测原则进行。依据另一实施例,在条件ALU指令124重复执行时,指令转译器104会反转正确的预测,并依据此反转后的预测进行转译。也就是说,若是预测执行是误预测,指令转译器104就会依据预测不执行的原则来执行转译,若是预测不执行是误预测,指令转译器就会依据预测执行的原则来执行转译。不过,值得注意的是,这个实施例会容易产生活锁(livelock)的情形。
[0351] 在步骤3136,重排缓冲器422提供适当数值的历史数据更新指针2974至动态预测器2932与预测器选择器2934,并依据执行单元424评估的正确走向与沿着管线流动的预测信息2982/2984/2986来更新动态预测器2932与预测器选择器2934。
[0352] 由前文可以发现,本发明的微处理器100系将一条件ALU指令124转译为单一个微指令而非多个微指令,也就是在能够预测走向的时候将会产生极大的优势。
[0353] 首先,本发明可以减少一个或多个需要占用非循序执行微处理器100的资源中的额外指令槽的微指令。这些资源包括寄存器配置表402、重排缓冲器、保留站(未图标)与执行单元424。因此,本发明可以减少并简化所需使用的资源,这些资源所消耗的能量也可以减少。
[0354] 其次,指令转译器104每个时脉周期所能转译的指令集架构(例如ARM指令)程序指令的平均数量将可增加。假定指令转译器104每个时脉周期能够转译最多三个ARM指令,不过每个时脉周期最多只能发出三个微指令,而且包含此指令转译器104在同一个时脉周期内必须放出关联于此ARM指令的所有微指令的额外限制,也就是说,指令转译器104不能在第一时脉周期发出关联于一ARM指令的微指令,又在下一个时脉周期发出关联于此ARM指令的第二个微指令。假定下列ARM指令序列,其中CAI是一个条件ALU指令124而“Rx”数值系通用寄存器:
[0355] CAI EQ R1,R2,R3
[0356] CAI NE R4,R5,R6
[0357] CAI CS R7,R8,R9
[0358] 在不具有预测器2932/2934/2936(或具有但不进行预测)的处理器中,指令转译器104必须花费三个时脉周期来转译这三个CAI指令。不过,在具有预测器2932/2934/2936进行预测的处理器中,指令转译器可以在同一个时脉周期转译全部的三个CAI指令。再者,此项优点在混合有非CAI的指令,亦即其它ARM指令的情况中依然有效。举例来说,假定CAI指令系接着一个会被转译为二个微指令的ARM指令D,而此CAI指令的走向系经预测器2932/
2934/2936预测,一个会被转译为二个微指令的ARM指令E接着CAI指令,一个会被转译为单一个微指令的ARM指令F接着ARM指令E。在这个情况下,指令转译器可在同一个时脉周期转译ARM指令D与CAI指令,随后在下一个时脉周期转译ARM指令E与F。也就是在两个时脉周期内转译四个ARM指令。相较之下,若没有本实施例所提供的功能,指令转译器104将需要三个时脉周期才能转译这四个指令。相类似的优点也可在指令发布单元408与重排缓冲器422发现。
[0359] 第三,在通过预测器2932,2934,2936预测走向,使指令转译器104只需发出单一个微指令的情况下,条件ALU指令124的延迟可望降低。
[0360] 第四,重排缓冲器与保留站中不具有额外的微指令,可以提升微处理器的前瞻能力,因而提升处理器对于所执行的程序的指令阶层平行处理能力,藉此可以改善对于执行单元424的利用,以提升微处理器100的处理能力(throughput)。进一步来说,省略第二微指令可以在重排缓冲器中保留更多空间给微指令。此特征的优点在于,其可产生一个更大的微指令池供发送微指令给执行单元424执行。微指令在“完成准备”之前还不能发送出去执行,这也就是此微指令中,来自之前微指令的所有来源操作数都处于可取得的状态才能发送出去。因此,微处理器100寻找完成准备的微指令的微指令池越大,找到的机会就越大,所以执行单元424就有较大的机会被利用。这通常被称为微处理器的前瞻能力,也就是充分利用微处理器所要执行的程序的指令阶层平行处理能力。前瞻能力越大,通常就越会提升执行单元424的利用。因此,本发明的微处理器100具有潜力能通过将条件ALU指令124转译为单一微指令,而非多个微指令,以提升其前瞻能力。
[0361] 虽然前述实施例的微架构除了支持ARM指令集架构条件ALU指令,其也支持x86指令集架构,值得注意的是,本发明亦可应用于其它实施例,亦即支持不同于ARM指令集架构的其它指令集架构的条件ALU指令。其次,值得注意的是,本发明亦可应用于没有预先存在的微架构或是此预先存在的微架构所支持的指令集架构并非x86指令集架构的情况。此外,值得注意的是,本发明在此所描述的是一个广泛的处理器概念,通过在指令执行前,预先在管线预测条件ALU指令的走向,来支持一指令集架构的条件ALU指令。就一实施例而言,系类似于分支预测技术,其依据走向预测的有无确认所撷取的指令流,并发送不同的微指令序列。此外,虽然本文所描述的实施例包含动态预测器与静态预测器,本发明亦可应用于只具有静态预测器或是只具有动态预测器的实施例。其次,本发明亦可应用于具有多个动态与/或静态预测器的实施例,而其中的预测器选择器是从多个动态与静态预测器中进行选择。更其次,本发明亦可应用于动态预测器整合于一分支预测阵列中,例如一分支目标地址快取的实施例。这个实施例的缺点在于,在各个入口用来储存一分支指令的目标地址的空间造成浪费,这是由于对条件ALU指令而言并不需要预测其目标地址。基于程序中的指令混合,虽然分支指令与条件ALU指令间可能产生干扰或牵制,不过,这个实施例仍可能具有以下优点:整合后的高速缓存的储存空间会更有效率被利用,整合后的阵列所具有的入口数可能多于个别阵列的入口数的总合。
[0362] 虽然前述实施例系针对属于条件ALU指令的条件非分支指令,本发明亦可应用预测器来预测于其它类型的条件非分支指令。举例来说,条件加载指令就可被预测。若是预测执行,指令转译器产生一具有条件码的非条件加载微指令。此具有条件码的非条件加载微指令包含由条件加载指令所指定的条件,使执行管线能检测是否误预测。若是执行管线检测到误预测,就会避免执行任何架构状态更新的操作,例如在加载造成转译后备缓冲区(TLB)错过时更新存储器的页表查询(page table walk)、或是在加载产生一例外状态时产生一架构例外事件。此外,若是在快取中出现加载错过(load misses)的情形,执行管线会避免在处理器总线产生传输以填入错过的快取线。若是预测结果是无预测,指令转译器会产生微指令集来条件执行加载操作。在一实施例中,若是预测结果是无预测,此微指令集可采取类似于美国专利临时申请案61/473,062所描述的方式。
[0363] 虽然以上实施例系关于ARM ISA条件非分支指令,本发明亦可利用预测器预测应用于其它ISA的条件非分支指令。举例来说,x86ISA的条件非分支指令,如CMOVcc与SETcc即可被预测。
[0364] 修正后的立即值应用于指令转译
[0365] ARM指令集架构定义一数据处理指令集,允许指令指定一立即来源操作数,也就是这里所称的“立即操作数指令(immediate operand instruction)”。此立即来源操作数是一个32位的数值,通过将一个8位的数值向右旋转一个4位数值的两倍所产生。此8位数值系指定于指令中标示immed_8的字段,4位数值系指定于指令中标示为rotate_imm的字段。因此
[0366] 立即操作数数值=immed_8>>(2*rotate_imm)
[0367] 处理一既存微架构内立即操作数指令的方法系让指令转译器来产生两个微指令。第一微指令对immed_8数值执行两倍于rotate_imm的数值的转动操作以产生一结果,第二微指令接收第一微指令的结果,作为一用以执行立即操作数指令所指定ALU功能的来源操作数。此实施例可参照第10与21图。举例来说,图10的步骤1034中,指令转译器产生SHF微指令来执行一移位操作(在本实施例即是转动操作)以产生一移位后的结果写入一暂时寄存器,其后的ALUOP微指令便可使用暂时寄存器中由SHF微指令所产生的移位结果。此移位操作可执行于一指定于立即操作数指令的立即数值(举例来说,即对应于图10的步骤1012与
1024)。不过,相较于利用指令转译器仅产生单一微指令的方法,此方法应用于非循序执行处理器可能产生以下的缺点。
[0368] 首先,此额外的微指令会在非循序执行处理器的各个资源中占据一额外的指令槽,如寄存器配置表、重排缓冲器、保留站与执行单元内的额外指令槽或入口,因而需要较大、较复杂的资源,能量的消耗也会较高。
[0369] 其次,部分功能单元系受限于每个时脉周期内所能执行的最大指令数量。举例来说,依据一实施例,指令转译器每个时脉周期能发出的指令数量有其最大限制(例如每个时脉周期三个微指令),发布单元每个时脉周期能发送给执行单元的指令数量有其最大限制(例如每个时脉周期四个微指令),而引退单元每个时脉周期能引退的指令数量也有其最大限制(例如每个时脉周期三个微指令)。因此,这些功能单元内额外微指令的产生,会减少每个时脉周期内所能发出、发送或引退的平均指令数量,因而限制了处理器的效能表现。
[0370] 第三,立即操作数指令在其构成微指令完成执行前还不会引退,因为第二微指令系关联于第一微指令的结果,因此在第一微指令产生结果前,第二微指令无法发送至执行单元。这些都会对于立即操作数指令的总执行时间造成额外的延迟。
[0371] 第四,在重排缓冲器以及/或保留站内出现额外的微指令,会降低处理器的前瞻能力,因而降低处理器利用指令阶层平行处理来执行程序的能力,因而会减少执行单元的利用率,降低处理器的整体效能。
[0372] 本文所描述的实施例具有潜力能在执行立即操作数指令时有较佳的表现。在此系将immed_8字段与rotate_imm字段合并称为“立即字段”。特别是,指令转译器得知立即字段数值的一预定子集以及由各个相对应的立即字段数值所产生的相关的32位立即操作数数值。在指令转译器遇到一立即操作数指令时,指令转译器会确认所指定的立即字段数值是否落于此预测子集。若是,指令转译器就发出正确的32位立即操作数至立即操作数总线,并伴随着立即操作数指令,一并沿着管线传送以供执行。若是立即字段数值并不落于预定子集,指令转译器采取较低效能的方法,亦即发出两个微指令。可通过执行应用软件与观察产生不同立即字段数值的相对频率,并选择少数最常观察到的立即字段数值作为立即字段数值的预设集合,以维持其尺寸、能量消耗、与指令转译器的复杂度在一定的范围内。
[0373] 请参照图32的方块图,图中显示本发明的微处理器100在指令转译过程中处理修正后的立即常数的情形。图32的微处理器100系类似于图1的微处理器,并包含类似于第1至图4中所示的元件,这些元件包含指令快取102、指令转译器104、配置寄存器122、寄存器配置表402、指令发布单元408与执行单元424。执行单元424包含一个或多个单元用以执行以下所述的微指令126。进一步来说,执行单元424包含一个或多个单元,以执行图33所示的向右转动(ROR)微指令3344(在此亦称为移位微指令)、ALU微指令3346、以及立即ALU微指令3348。微处理器100并包含图33所示的架构寄存器与暂时寄存器106以及旗标926。指令快取
102撷取图33所示的立即操作数指令124。
[0374] 在一实施例中,此微处理器100的微架构在许多面向系类似于台湾威盛电子所生产的VIA NanoTM处理器的微架构,不过本实施例的微处理器100是经修改以支持ARM指令集架构。此VIA NanoTM处理器的微架构系一高效能非循序执行超纯量微架构以支持x86指令集架构,此处理器系经如本文所述的修改,使能额外支持ARM微架构,特别是详述于图33的相关篇幅所述对ARM立即操作数指令124的支持。进一步来说,当指令转译器104在遇到一立即操作数指令124,且其指定的立即字段b207(请参照图33所示)的数值系落于此指令转译器104已知数值所构成的一预定子集时,就会发出一个立即操作数3366于一立即操作数总线作为响应。此立即操作数3366系沿着微处理器100管线的阶段(stage)向下传递,直到抵达执行单元424为止。
[0375] 寄存器配置表402从指令转译器104接收微指令164,并相对应地产生各个微指令164的相关信息。进一步来说,此寄存器配置表402指出,ALU微指令3346(可参照图33)系关联于ROR微指令3344(可参照图33)的结果,而在指令转译器104转译一立即操作数指令,其所指定的立即字段数值b207未落于立即字段b207的数值所构成的一预定子集内时,就会一并发出这两个微指令。此外,如图34(包括图34A和图34B)所示,在指令转译器104额外发出一条件移动微指令126的情况下(例如图10所描述者),寄存器配置表402会指出,此条件移动微指令126系关联于ALU微指令3346的结果。
[0376] 暂时寄存器106储存微处理器100的非架构状态,并且可供微架构用于暂时储存执行指令集架构的指令124所需的中间数值。进一步来说,由指令转译器104所发出的微指令126会将暂时寄存器106指定为来源以及/或目的操作数位置。图33所示的ROR微指令3344即是将一个暂时寄存器106指定为其目的寄存器,而ALU微指令3346则是将同一个暂时寄存器
106指定为其来源寄存器的一者。这在以下篇幅会有更详细的说明。
[0377] 至少一个执行单元424包含一个算术逻辑单元(未图标)用以执行各种微指令。这些微指令包含图33所示的ROR微指令3344、ALU微指令3346、以及立即ALU微指令3348。在立即ALU微指令3348的情况下,执行单元424接收来自指令转译器104的立即操作数3366的数值作为其输入。此执行单元424执行由操作码字段b212所指定的ALU功能,而此功能系相同于由立即操作数指令124所指定的ALU功能,并且此指令执行在立即操作数3366与一个第二来源操作数之上。在ALU微指令3346的情况下,执行单元424执行由操作码字段b212所指定的ALU功能,而此功能系相同于由立即操作数指令124所指定的ALU功能,并且此指令执行于二个来源操作数之上,此二个来源操作数其中之一系来自暂时寄存器106,而相关的ROR微指令3344系将其结果写入此寄存器。在ROR微指令3344的情况下,执行单元424将一个8位数值以两倍于一个4位数值的量向右转动,以产生一个32位的立即数值且写入一暂时寄存器106供后续相关的ALU微指令3344使用。前述8位数值系相同于由立即操作数指令124的
immed_8字段b208所指定的数值,前述4位数值系相同于由立即操作数指令124的rotate_imm字段b209所指定的数值。
[0378] 请参照图33,图中是以一方块图,显示本发明将一个立即操作数指令124选择性地转译为一个ROR微指令3344与一个ALU微指令3346、或是转译为一个立即ALU微指令3348的一实施例。如本文所述,指令转译器104系在立即字段b207所指定的数值落入指令转译器104已知的预定子集内时,将立即操作数指令124转译为一个立即ALU微指令3348供执行单元424执行,而由此,指令转译器104系发出一相对应的评估立即操作数数值3366。如图32所示,在立即字段b207所指定的数值未落入预定子集内时,指令转译器104系将立即操作数指令124转译为一个ROR微指令3344接着一个ALU微指令3044供执行单元424执行。在一实施例中,立即操作数指令124系一个由ARM指令集架构所定义的立即操作数指令,以ARM的用语来说,就是一个具有数据处理立即编码(data processing immediate encoding)功能的指令。
[0379] 立即操作数指令124包含一操作码字段b202、一来源寄存器1的字段b204、目的寄存器字段b206、一个immed_8字段b208、以及一个rotate_imm字段b209。如图33所示,immed_8字段b208与rotate_imm字段b209的合并即构成立即字段b209。此操作码字段b202包含一数值,用以区分立即操作数指令124与此指令集架构的其它指令,并且,此数值系指定一个执行于来源操作数的ALU功能。就一个ARM立即操作数指令124而言,此ALU功能举例来说,可包含加(ADD)、带进位加(add with carry,ADC)、逻辑及(logical AND,AND)、逻辑位清除(logical bit clear,BIC)、比较取负(compare negative,CMN)、比较(compare,CMP)、逻辑异或(logical exclusive-OR,EOR)、移动(move,MOV)、反向移动(move not,MVN)、逻辑或(logic OR,ORR)、反向减(reverse subtract,RSB)、带进位反向减(reverse subtract with carry,RSC)、带进位减(subtract with carry,SBC)、减(subtract,SUB)、相等测试(test equivalence,TEQ)与测试(test,TST)。来源寄存器1的字段b204指定一架构寄存器
106或是一暂时寄存器106,执行单元424所接收的来源操作数系来自这个被指定的寄存器。
目的寄存器字段b206指定一架构寄存器106或是一暂时寄存器106,结果则是写入这个被指定的寄存器。前述immed_8字段b208持有一个8位常数,此常数会以两倍于前述4位的
rotate_imm字段b209的数值向右旋转,以产生一立即来源操作数。如前文第9至28图的实施例所述,立即操作数指令124可包含一条件ALU指令。举例来说,此立即操作数指令124可以是如步骤1056所述的一个ARM NCUALUOP指令124,其系将一修正后的立即常数指定为其来源操作数,而不是寄存器。
[0380] ROR微指令3344包含一个操作码字段b222、一个目的寄存器字段b226、以及两个用以指定来源操作数的来源操作数字段,如图33所示,分别标示为immed_8字段b228以及rotate_imm字段b229,用以实行立即操作数指令124。此操作码字段b222包含一数值,用以区别ROR微指令3344与此微处理器100的微指令集架构的其它微指令。目的寄存器字段b226是指定一架构寄存器106或是一目的寄存器106,ROR微指令3344的结果将会写入其中。在指令转译器104转译立即操作数指令124,而立即字段b207所指定的数值并未落入预定子集时,指令转译器104会以立即操作数指令的immed_8字段b208与rotate_imm字段b209的相对应数值填入immed_8字段b228与rotate_imm字段b229,并且,指令转译器104会填入目的寄存器字段b226以指定一暂时寄存器106来接收ALU功能的结果,此寄存器后续将会被ALU微指令3344利用来作为其来源操作数。除了前文所述,ROR微指令3344还可包含一个移位微指令126(从图10起标示为SHF)来指定一修正后的立即常数,这在图10与图11有更详细的说明。举例来说,若是被转译的立即操作数指令124是步骤1056所述是指定一修正后的立即常数的ARM NCUALUOP指令124,此ROR微指令3344就可能是步骤1056中的SHF微指令126。
[0381] ALU微指令3346包含一操作码字段b232、一来源寄存器1的字段b234、一来源寄存器2的字段b235、一目的寄存器字段b236。此操作码字段b232包含一数值,用以区别ALU微指令3346与此微处理器100的微指令集架构的其它微指令,并且,其所指定用以执行于来源操作数的ALU功能系相同于立即操作数指令124转译产生的ALU功能。来源寄存器1的字段b234指定一架构寄存器106或是一暂时寄存器106,第一来源操作数将会由这个被指定的寄存器提供给ALU微指令3346,来源寄存器2的字段b235指定一架构寄存器106或是一暂时寄存器106,第二来源操作数将会从这个被指定的寄存器提供给ALU微指令3346,目的寄存器字段b236指定一架构寄存器106或是一暂时寄存器106,ALU微指令3346的结果将会写入这个被指定的寄存器。当指令转译器104转译立即操作数指令124且立即字段b207所指定的数值并未落入预定子集,指令转译器104会填入来源寄存器1的字段b234以指定一寄存器,其与立即来源操作数指令124的来源操作数1的字段b204所指定者相同,指令转译器104会填入目的寄存器字段b236以指定一寄存器,其与立即来源操作数124的目的寄存器字段b206所指定者相同,指令转译器104也会填入来源寄存器2的字段b235以指定一暂时寄存器106,其与ROR微指令3344的目的寄存器字段b226所指定者相同。如前述,此ALU微指令3346可包含任何ALU操作微指令126,分别标示为ALUOP、ALUOPUC、CALUOP以及NCALUOP,还包含详述于第10与12图的条件版本的微指令。举例来说,若是被转译的立即操作数指令124是步骤1056所述的ARM NCUALUOP指令124,而此指定所指定的修正后的立即常数并未落入预定子集时,此ALU微指令3346就可能是步骤1056中的NCUALUOP微指令126。
[0382] 立即ALU微指令3348包含一操作码字段b212、一来源寄存器1的字段b214、一目的寄存器字段b216、与一个immediate-32字段b218。就一实施例而言,此immediate-32字段b218就是执行立即ALU微指令3348的执行单元424所接收的立即操作数3366。也就是说,操作数多工器(未图示)运作以选择将立即操作数3366提供给接收立即ALU微指令3348的执行单元424。操作码字段b212包含一数值以区别ALU微指令3348与微处理器100的微指令集架构内的其它微指令,并且,其所指定用以执行于来源操作数的ALU功能系相同于立即操作数指令124转译产生的ALU功能。此来源寄存器1的字段b214系指定一架构寄存器106或是一暂时寄存器106,一个第一来源操作数将会从中提供给ALU微指令3346,目的寄存器字段b216指定一架构寄存器106或是一暂时寄存器106,立即ALU微指令3348的结果将会写入此指定寄存器中。当指令转译器1045转译立即操作数指令124且立即字段b207指定的数值落入预定子集时,指令转译器104会填入来源寄存器1的字段b214以指定一个寄存器,其相同于立即操作数指令124的来源操作数1的字段b204所指定者,指令转译器104会填入目的寄存器字段b216以指定一个寄存器,其相同于立即操作数指令124的目的寄存器字段b206所指定者。如前述,此立即ALU微指令3346可包含任何ALU操作微指令126,分别标示为ALUOP、ALUOPUC、CALUOP以及NCALUOP,包含详述于第10与12图的条件版本的微指令,以指定一立即来源操作数。举例来说,若是被转译的立即操作数指令124是步骤1056所述的ARM NCUALUOP指令124,其指定的修正后的立即常数系落于预定子集内,此立即ALU微指令3348可以是步骤1056内的NCUALUOP微指令126,而指令转译器104将不会发出步骤1056的SHF微指令126,以提供前述有关于利用指令转译器104处理修正后立即常数所产生的优点。
[0383] 请参照图34,图中是以一流程图,显示本发明图32的微处理器100执行图33的一立即操作数指令的操作的一实施例。此流程始于步骤3402。
[0384] 在步骤3402中,指令转译器104遇到图33的一立即操作数指令124,并以由多个数值构成的预定子集检查立即字段b207(就一ARM立即操作数指令124而言,即是位于低位的12个位)。接下来进入一决策步骤3404。
[0385] 在决策步骤3404中,指令转译器104确认立即字段b207的数值是否落于此数值预定子集内。若是,前进至步骤3406;否则就前进至步骤3414。
[0386] 在步骤3406,指令转译器104发出单一个如图33所示的立即ALU微指令3348,以响应立即操作数指令124。在一实施例中,若是立即操作数指令124系一条件ALU指令124指定一来源目的共享的寄存器,此立即ALU微指令3348将包含图21的步骤2134、2136、2154与2156所描述的诸多ALU微指令126其中之一,不过不包含前述SHF微指令。若是此条件ALU指令124并未指定一来源目的共享的寄存器,指令转译器104就会发出立即ALU微指令3348与一个图10的步骤1034、1036、1054、1056所描述的条件移动微指令126(XMOV以及CMOV),不过不包含前述SHF微指令。在这个状况下,寄存器配置表402产生的条件移动微指令126的关联性信息,会指出条件移动微指令126系关联于立即ALU微指令3348的结果。接下来进入步骤
3408。
[0387] 在步骤3408,指令发布单元408将立即ALU微指令3348发布给执行单元424。接下来进入步骤3412。
[0388] 在步骤3412中,执行单元424从立即操作数总线接收通过由管线所传输的32位立即操作数3366的数值,以及由来源寄存器1的字段b214所指定的来源操作数。执行单元424执行立即ALU微指令3348的过程,是将操作码字段b212所指定的ALU功能执行于32位立即操作数3366与其它来源操作数,以产生结果至结果总线128,供目的寄存器字段b216所指定的架构寄存器106进行后续引退操作,此架构寄存器106系相同于由立即操作数指令124的目的寄存器字段b206所指定的架构寄存器106。若是在步骤3406中,指令转译器104发出一个条件移动微指令126,立即ALU微指令3348的结果就注定会是一个暂时寄存器106,而非由立即操作数指令124所指定的目的寄存器106,并且,为了以响应步骤3412中执行单元424完成立即ALU微指令的操作,如前述,尤其是图10至图20,指令发布单元408会发布条件移动微指令126至执行单元424,而执行单元424会执行此条件移动微指令126以产生立即操作数指令124的结果。此流程终止于步骤3412。
[0389] 在步骤3414中,指令转译器104放出两个微指令,即图33中的一个ROR微指令3344与一个ALU微指令3346,以响应此立即操作数指令124。在一实施例中,若是此立即操作数指令124系一个指定一修正后立即常数的条件ALU指令124,ROR微指令3344会包含图10的步骤1034、1034、1054与1056或是在图21的步骤2134、2136、2154与2154所描述的SHF微指令126。
举例来说,若是被转译的立即操作数指令124系步骤1056中的ARM NCUALUOP指令124,其指定的修正后立即常数并未落于预定子集内,此ROR微指令3344可能就会是步骤1056中的SHF微指令126。在一实施例中,若是条件操作数指令124系一个条件ALU指令124,其指定一个来源目的共享的寄存器,ALU微指令3346可能会包含图21的步骤2134、2136、2154与2156中描述的ALU微指令126的其中之一。若是立即操作数条件ALU指令124并未指定一来源目的共同的寄存器,指令转译器104就会发出ALU微指令3346与图10的步骤1034、1036、1054与1056所描述的一个条件移动微指令126(XMOV与CMOV)。接下来进入步骤3416。
[0390] 在步骤3416,寄存器配置表402产生ALU微指令3346的关联性信息,指出ALU微指令3346系关联于ROR微指令3344的结果。若是在步骤3414中,指令转译器104发出一个条件移动微指令126,寄存器配置表402就会产生条件移动微指令126的关联性信息,指出条件移动微指令126系关联于ALU微指令3346的结果。接下来进入步骤3418。
[0391] 在步骤3418中,指令发布单元408发布ROR微指令3344至执行单元424。所以,执行单元424会接收由立即操作数指令124所指定的immed_8字段b208与rotate_imm字段b209的数值。接下来前进至决策步骤3412。
[0392] 在步骤3422中,执行单元424执行ROR微指令3344以产生立即操作数结果,写入由目的寄存器字段b226所指定的暂时寄存器106。接下来进入步骤3424。
[0393] 在步骤3424中,因应步骤3422中执行单元424完成ROR微指令3344的操作,指令发布单元会将ALU微指令3346发布至执行单元424。所以,执行单元424(整数单元124)接收步骤3422所产生的ROR微指令3344的结果以及由ALU微指令3346的来源寄存器1的字段b234所指定的操作数数值,此操作数数值与立即操作数指令124的来源寄存器1的字段b204所指定的架构寄存器106相同。接下来前进至决策步骤3426。
[0394] 在步骤3426中,执行单元424执行ALU微指令3346的过程,系将操作码字段b232所指定的ALU功能执行于两个来源操作数,以产生一结果提供至结果总线128供目的寄存器字段b236所指定的架构寄存器106在后续引退步骤利用,此架构寄存器106系相同于由立即操作数指令124的目的寄存器字段b206所指定的架构寄存器104。若是步骤3414中,指令转译器104发出一个条件移动微指令126,ALU微指令3346的结果就会注定是一个暂时寄存器106,而非由立即操作数指令所指定的目的寄存器106,并且,因应执行单元424在步骤3426中完成ALU微指令3346的操作,指令发布单元408会发布条件移动微指令126至执行单元
424,而如前述,尤其是第10至20图,执行单元424就会执行条件移动微指令126以产生立即操作数指令124的结果。此流程终止于步骤3426。
[0395] 从前文可知,本发明的微处理器100在一定情况下,系将立即操作数指令124转译为单一个立即ALU微指令3346,而非多个微指令。在某些状况下,亦即当立即字段b207系落于一数值预定子集内,而指令转译器104可以直接发出相对应的评估后的立即操作数3366的数值时,可提供相当大的贡献。
[0396] 首先,本发明可减少一个微指令在非循序执行处理器的各个资源中占据一额外的指令槽,如寄存器配置表402、重排缓冲器422、保留站406与执行单元424内的额外指令槽或入口,因而能够缩减、简化资源,能量的消耗也可以降低。
[0397] 其次,每个时脉周期内指令转译器104所能转译的指令集架构(例如ARM指令)的程序的平均指令数量可获得提升。举例来说,假定指令转译器104每个时脉周期能转译最多三个ARM指令,但是每个时脉周期最多只能放出三个微指令,此外,它还必须遵守在同一个时脉周期内发出所有关联于此ARM指令的微指令的限制,也就是说,此指令转译器104不能在一第一时脉周期发出关联于一ARM指令的微指令,同时又在下一个时脉周期发出关联于此ARM指令的第二个微指令。假定ARM指令序列如下,其中,IOI是一个立即操作数指令124,例如一个条件ALU指令,其指定一目的寄存器,此目的寄存器同时也是来源寄存器,而“Rx”数值是通用寄存器:
[0398] IOI R1,R1,立即字段数值A
[0399] IOI R3,R3,立即字段数值B
[0400] IOI R5,R5,立即字段数值C
[0401] 在立即字段数值A、B与C并未落入预定子集的情况下,指令转译器104必须花费三个时脉周期来转译这三个IOI指令。不过,在立即字段数值A、B与C系落入预定子集的情况下,指令转译器104可能只需要一个时脉周期就能转译这三个IOI指令。此外,此优点亦可在其它混合有非IOI指令,亦即其它ARM指令,的实例中获得印证。举例来说,假定一个ARM指令D,会被转译为两个微指令,其后跟随着一个IOI指令,此IOI指令指定的一立即字段数值系落入预定子集内,此IOI指令后跟随着一个ARM指令E,此指令会被转译为两个微指令,其后还跟随着一个ARM指令F,此指令会被转译为单一个微指令。在这个情况下,指令转译器104可在单一个时脉周期转译将ARM指令D与IOI指令,然后在下一个时脉周期转译ARM指令E与F,亦即四个ARM指令在两个时脉周期内完成转译。相较之下,若是没有本实施例所描述的功能,指令转译器104将需要三个时脉周期来转译这四个指令。相类似的优点也存在于指令发布单元408与引退单元422。相类似的优点也出现在四指令宽度(four-wide instruction)的指令转译器以及条件ALU指令并未指定一目的寄存器同时为一来源寄存器的情况,在此情况下,两个指令可在同一个时脉周期内进行转译,若无本实施例所描述的功能,就需使用两个时脉周期。
[0402] 第三,在立即字段b207的数值落入预定子集,而指令转译器104可以发出单一微指令(或两个而非三个微指令)的情况下,因为第二个(或第三个)微指令的消失,可以减少立即操作数指令124的延迟。
[0403] 第四,重排缓冲器以及/或保留站内不存在额外的微指令,可以提高降低处理器的前瞻能力,因而提升微处理器100利用指令阶层平行处理来执行程序的能力,增加执行单元424的利用率,改善微处理器100的整体效能。进一步来说,减少第二微指令可以在重排缓冲器空出更多空间给微指令,这样就可以产生一个较大的微指令池,可发派给执行单元424执行。微指令在“完成准备”之前还不能发送出去执行,这也就是此微指令中,来自之前微指令的所有来源操作数都处于可取得的状态才能发送出去。因此,微处理器100寻找完成准备的微指令的微指令池越大,找到的机会就越大,所以执行单元424就有较大的机会被利用。这通常被称为微处理器的前瞻能力,也就是充分利用微处理器所要执行的程序的指令阶层平行处理能力。前瞻能力越大,通常就越会提升执行单元424的利用效率。因此,本发明的微处理器100可依据立即字段b207的数值,将立即操作数指令124转译为单一个立即ALU微指令
3348,而非多个微指令,因而具有潜力能提升其前瞻能力。
[0404] 虽然前述实施例中的立即操作数指令系一个具有数据处理立即编码功能的ARM指令,此技术亦可应用于转译其它指令集架构的立即操作数指令;其次,值得注意的是,本发明亦可应用于没有预先存在的微架构,或是此预先存在的微架构所支持的指令集架构并非x86指令集架构的情况。此外,值得注意的是,本发明在此所描述的是一个广泛的处理器概念,其依据立即操作数指令指定的立即字段数值是否落入预定子集内,来将操作数指令转译为一个乱序执行微架构的不同微指令序列,以支持一指令集架构的立即操作数指令。
[0405] 在另一实施例中,指令转译器104产生图32的立即操作数3266给图33的立即操作数指令124的立即字段b207的所有数值。也就是说,立即字段b207的数值的预定子集内的所有数值都是立即字段b207的可能数值。以下是此实施例的Verilog硬件描述语言编码。
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416] 惟以上所述者,仅为本发明的较佳实施例而已,当不能以此限定本发明实施的范围,即大凡依本发明权利要求范围及发明说明内容所作的简单的等效变化与修饰,皆仍属本发明权利要求涵盖的范围内。举例来说,软件可以执行本发明所述的装置与方法的功能、制造、形塑、仿真、描述以及/或测试等。这可由一般的程序语言(如C、C++)、硬件描述语言(HDL)包含Verilog HDL,VHDL等,或是其它既有程序来达成。此软件可以设置于任何已知的计算机可利用媒介,如磁带、半导体、磁盘、光盘(如CD-ROM、DVD-ROM等)、网络或是其它通讯媒介。此处描述的装置与方法的实施例可被包含于一半导体智财核心,例如一微处理核心(如以硬件描述语言的实施方式)并且通过集成电路的制作转换为硬件。此外,本文所描述的装置与方法亦可包含硬件与软件的结合。因此,本文所述的任何实施例,并非用以限定本发明的范围。此外,本发明可应用于一般通用计算机的微处理器装置。最后,本领域技术人员利用本发明所揭露的观念与实施例作为基础,来设计并调整出不同的结构已达成相同的目的,亦不超出本发明的范围。
[0417] 惟以上所述者,仅为本发明的较佳实施例而已,当不能以此限定本发明实施的范围,即大凡依本发明权利要求范围及发明说明内容所作的简单的等效变化与修饰,皆仍属本发明权利要求涵盖的范围内。另外本发明的任一实施例或权利要求范围不须达成本发明所揭露的全部目的或优点或特点。此外,摘要部分和标题仅是用来辅助专利文件搜寻之用,并非用来限制本发明的权利要求范围。
[0418] 【相关申请案的参考文献】
[0419] 本申请案是同在申请中美国专利正式申请案的部分连续案,该些案件整体皆纳入本案参考:
[0420]案号 申请日
13/224,310(CNTR.2575) 09/01/2011
13/333,520(CNTR.2569) 12/21/2011
13/333,572(CNTR.2572) 12/21/2011
13/333,631(CNTR.2618) 12/21/2011
[0421] 本申请案是引用于以下美国临时专利申请案作优先权,每一申请案整体皆纳入本案参考:
[0422] 案号 申请日61/473,062(CNTR.2547) 04/07/2011
61/473,067(CNTR.2552) 04/07/2011
61/473,069(CNTR.2556) 04/07/2011
61/537,473(CNTR.2569) 09/21/2011
61/541,307(CNTR.2585) 09/30/2011
61/547,449(CNTR.2573) 10/14/2011
61/555,023(CNTR.2564) 11/03/2011
61/604,561(CNTR.2552) 02/29/2012
[0423] 美国正式专利申请案
[0424] 13/224,310(CNTR.2575) 09/01/2011
[0425] 是引用下列美国临时申请案的优先权:
[0426]61/473,062(CNTR.2547) 04/07/2011
61/473,067(CNTR.2552) 04/07/2011
61/473,069(CNTR.2556) 04/07/2011
[0427] 以下三个本美国正式申请案
[0428] 13/333,520(CNTR.2569) 12/21/201113/333,572(CNTR.2572) 12/21/2011
13/333,631(CNTR.2618) 12/21/2011
[0429] 皆是以下美国正式申请式的延续案:
[0430]13/224,310(CNTR.2575) 09/01/2011
[0431] 并引用下列美国临时申请案的优先权:
[0432] 61/473,062(CNTR.2547) 04/07/201161/473,067(CNTR.2552) 04/07/2011
61/473,069(CNTR.2556) 04/07/2011
61/537,473(CNTR.2569) 09/21/2011
[0433] 本申请案是以下美国正式专利申请案的相关案:
[0434] 13/413,258(CNTR.2552) 03/06/201213/412,888(CNTR.2580) 03/06/2012
13/412,904(CNTR.2583) 03/06/2012
13/412,914(CNTR.2585) 03/06/2012
13/413,346(CNTR.2573) 03/06/2012
13/413,300(CNTR.2564) 03/06/2012
13/413,314(CNTR.2568) 03/06/2012