CN105468333A - 具有条件指令的微处理器及其处理方法 - Google Patents
具有条件指令的微处理器及其处理方法 Download PDFInfo
- Publication number
- CN105468333A CN105468333A CN201610008424.1A CN201610008424A CN105468333A CN 105468333 A CN105468333 A CN 105468333A CN 201610008424 A CN201610008424 A CN 201610008424A CN 105468333 A CN105468333 A CN 105468333A
- Authority
- CN
- China
- Prior art keywords
- instruction
- micro
- order
- condition
- framework
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title 1
- 238000012546 transfer Methods 0.000 claims description 256
- 238000000034 method Methods 0.000 claims description 117
- 238000006073 displacement reaction Methods 0.000 claims description 88
- 238000003860 storage Methods 0.000 claims description 37
- 230000004044 response Effects 0.000 claims description 19
- 230000006870 function Effects 0.000 description 81
- 230000008569 process Effects 0.000 description 67
- 230000000875 corresponding effect Effects 0.000 description 43
- 230000007613 environmental effect Effects 0.000 description 32
- 238000010586 diagram Methods 0.000 description 17
- 230000008901 benefit Effects 0.000 description 15
- 238000013519 translation Methods 0.000 description 15
- 230000008859 change Effects 0.000 description 13
- 238000012545 processing Methods 0.000 description 13
- 238000004590 computer program Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 9
- 230000006872 improvement Effects 0.000 description 9
- 238000012790 confirmation Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 5
- 238000007689 inspection Methods 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 5
- 238000002156 mixing Methods 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 230000009977 dual effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000001143 conditioned effect Effects 0.000 description 3
- JIGDOBKZMULDHS-UHFFFAOYSA-N cyanogenosin-RR Natural products N1C(=O)C(CCCN=C(N)N)NC(=O)C(C)C(C(O)=O)NC(=O)C(CCCN=C(N)N)NC(=O)C(C)NC(=O)C(=C)N(C)C(=O)CCC(C(O)=O)NC(=O)C(C)C1C=CC(C)=CC(C)C(OC)CC1=CC=CC=C1 JIGDOBKZMULDHS-UHFFFAOYSA-N 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- JIGDOBKZMULDHS-UUHBQKJESA-N microcystin RR Chemical compound C([C@H](OC)[C@@H](C)\C=C(/C)\C=C\[C@H]1[C@@H](C(=O)N[C@H](CCC(=O)N(C)C(=C)C(=O)N[C@H](C)C(=O)N[C@@H](CCCN=C(N)N)C(=O)N[C@H]([C@H](C)C(=O)N[C@@H](CCCN=C(N)N)C(=O)N1)C(O)=O)C(O)=O)C)C1=CC=CC=C1 JIGDOBKZMULDHS-UUHBQKJESA-N 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 229910052754 neon Inorganic materials 0.000 description 3
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 102220510525 Retinoic acid receptor alpha_R14D_mutation Human genes 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 230000001788 irregular Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 241000894007 species Species 0.000 description 2
- 210000003813 thumb Anatomy 0.000 description 2
- CVOFKRWYWCSDMA-UHFFFAOYSA-N 2-chloro-n-(2,6-diethylphenyl)-n-(methoxymethyl)acetamide;2,6-dinitro-n,n-dipropyl-4-(trifluoromethyl)aniline Chemical compound CCC1=CC=CC(CC)=C1N(COC)C(=O)CCl.CCCN(CCC)C1=C([N+]([O-])=O)C=C(C(F)(F)F)C=C1[N+]([O-])=O CVOFKRWYWCSDMA-UHFFFAOYSA-N 0.000 description 1
- 241001044684 Amadina fasciata Species 0.000 description 1
- 101100270014 Arabidopsis thaliana APR2 gene Proteins 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 235000012364 Peperomia pellucida Nutrition 0.000 description 1
- 240000007711 Peperomia pellucida Species 0.000 description 1
- 101100494729 Syncephalastrum racemosum SPSR gene Proteins 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 230000006735 deficit Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 210000003811 finger Anatomy 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
- 238000004804 winding Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30094—Condition code generation, e.g. Carry, Zero flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
微处理器执行一架构指令指示其去执行一操作于第一与第二来源操作数以产生一结果,并在其架构条件旗标满足架构指令所预设的条件时,将此结果写入一目的寄存器。硬件指令转译器将此指令转译为第一与第二微指令。就第一微指令而言,执行管线执行操作于来源操作数以产生此结果。就第二微指令而言,执行管线在架构条件旗标满足条件,将第一微指令所产生的结果写入目的寄存器,而在架构条件旗标不满足条件时,将目的寄存器当前的数值写入目的寄存器。
Description
本申请为申请日为2012年4月9日、申请号为201210104311.3的发明名称为“具有条件指令的微处理器及其处理方法”的申请案的分案申请。
技术领域
本发明是关于微处理器的技术领域,特别是关于在指令集中具有条件指令的微处理器。
背景技术
由IntelCorporationofSantaClara,California开发出来的x86处理器架构以及由ARMLtd.ofCambridge,UK开发出来的进阶精简指令集机器(advancedriscmachines,ARM)架构是计算机领域中两种广为人知的处理器架构。许多使用ARM或x86处理器的计算机系统已经出现,并且,对于此计算机系统的需求正在快速成长。现今,ARM架构处理核心是主宰低功耗、低价位的计算机市场,例如手机、手持式电子产品、平板计算机、网络路由器与集线器、机上盒等。举例来说,苹果iPhone与iPad主要的处理能力即是由ARM架构的处理核心提供。另一方面,x86架构处理器则是主宰需要高效能的高价位市场,例如膝上计算机、桌上型计算机与服务器等。然而,随着ARM核心效能的提升,以及某些x86处理器在功耗与成本的改善,前述低价位与高价位市场的界线逐渐模糊。在移动运算市场,如智能型手机,这两种架构已经开始激烈竞争。在膝上计算机、桌上型计算机与服务器市场,可以预期这两种架构将会有更频繁的竞争。
前述竞争态势使得计算机装置制造业者与消费者陷入两难,而无从判断哪一个架构将会主宰市场,更精确来说,无法判定哪一种架构的软件开发商将会开发更多软件。举例来说,一些每月或每年会定期购买大量计算机系统的消费个体,基于成本效率的考虑,例如大量采购的价格优惠与系统维修的简化等,会倾向于购买具有相同系统配置设定的计算机系统。然而,这些大型消费个体中的使用者群体,对于这些具有相同系统配置设定的计算机系统,往往有各种各样的运算需求。具体来说,部分使用者的需求是希望能够在ARM架构处理器上执行程序,其它部分使用者的需求是希望能够在x86架构处理器上执行程序,甚至有部分使用者希望能够同时在两种架构上执行程序。此外,新的、预期外的运算需求也可能出现而需要使用另一种架构。在这些情况下,这些大型个体所投入的部分资金就变成浪费。在另一个例子中,使用者具有一个重要的应用程序,只能在x86架构上执行,因而他购买了x86架构的计算机系统(反之亦然)。不过,这个应用程序的后续版本改为针对ARM架构开发,并且优于原本的x86版本,使用者会希望转换架构来执行新版本的应用程序,但不幸地,他已经对不倾向使用的架构投入相当成本。同样地,使用者原本投资于只能在ARM架构上执行的应用程序,但是后来也希望能够使用针对x86架构开发而未见于ARM架构的应用程序或是优于以ARM架构开发的应用程序,亦会遭遇这样的问题,反之亦然。值得注意的是,虽然小实体或是个人投入的金额较大实体为小,然而投资损失比例可能更高。其它类似的投资损失的例子可能出现在各种不同的运算市场中,例如由x86架构转换至ARM架构或是由ARM架构转换至x86架构的情况。最后,投资大量资源来开发新产品的运算装置制造业者,例如OEM厂商,也会陷入此架构选择的困境。若是制造业者基于x86或ARM架构研发制造大量产品,而使用者的需求突然改变,则会导致许多有价值的研发资源的浪费。
对于运算装置的制造业者与消费者,能够保有其投资免于受到二种架构中何者胜出的影响是有帮助的,因而有必要提出一种解决方法让系统制造业者发展出可让使用者同时执行x86架构与ARM架构的程序的运算装置。
使系统能够执行多个指令集程序的需求由来已久,这些需求主要是因为消费者会投入相当成本在旧硬件上执行的软件程序,而其指令集往往不兼容于新硬件。举例来说,IBM360系统Model30即具有兼容于IBM1401系统的特征,来缓和使用者由1401系统转换至较高效能与改良特征的360系统的痛苦。Model30具有360系统与1401系统的只读储存控制(ReadOnlyStorage,ROS),使其在辅助储存空间预先存入所需信息的情况下能够使用于1401系统。此外,在软件程序以高级语言开发的情况下,新的硬件开发商几乎没有办法控制为旧硬件所编译的软件程序,而软件开发商也欠缺动力为新硬件重新编译(re-compile)源码,此情形尤其发生在软件开发商与硬件开发商是不同个体的情况。Siberman与Ebcioglu于Computer,June1993,No.6提出的文章“AnArchitecturalFrameworkforSupportingHeterogeneousInstruction-SetArchitectures”中揭露一种利用执行于精简指令集(RISC)、超纯量架构(superscalar)与超长指令字(VLIW)架构(下称原生架构)的系统来改善既存复杂指令集(CISC)架构(例如IBMS/390)执行效率的技术,其所揭露的系统包含执行原生码的原生引擎(nativeengine)与执行目的码的迁移引擎(migrantengine),并可依据转译软件将目的码(objectbode)转译为原生码(nativecode)的转译效果,在这两种编码间视需要进行转换。请参照2006年5月16日公告的美国专利第7,047,394号专利案,VanDykeetal.揭露一处理器,具有用以执行原生精简指令集(Tapestry)的程序指令的执行管线,并利用硬件转译与软件转译的结合,将x86程序指令转译为原生精简指令集的指令。Nakadaetal.提出具有ARM架构的前端管线与FujitsuFR-V(超长指令字)架构的前端管线的异质多线程处理器(heterogeneousSMTprocessor),ARM架构前端管线用于(irregular)非规则软件程序(如操作系统),而FujitsuFR-V(超长指令字)架构的前端管线用于多媒体应用程序,其将一增加的超长指令字队列提供予FR-V超长指令字的后端管线以维持来自前端管线的指令。请参照Buchty与Weib,eds,UniversitatsverlagKarlsruhe于2008年11月在FirstInternationalWorkshoponNewFrontiersinHigh-performanceandHardware-awareComputing(HipHaC’08),LakeComo,Italy,(配合MICRO-41)发表的论文集(ISBN978-3-86644-298-6)的文章“OROCHI:AMultipleInstructionSetSMTProcessor”。文中提出的方法用以降低整个系统在异质系统单芯片(SOC)装置(如德州仪器OMAP应用处理器)内所占据的空间,此异质系统单芯片装置具有一个ARM处理器核心加上一个或多个协处理器(co-processors)(例如TMS320、多种数字信号处理器、或是多种图形处理单元(GPUs))。这些协处理器并不分享指令执行资源,只是集成于同一芯片上的不同处理核心。
软件转译器(softwaretranslator)、或称软件仿真器(softwareemulator,softwaresimulator)、动态二进制码转译器等,亦被用于支持将软件程序在与此软件程序架构不同的处理器上执行的能力。其中受欢迎的商用实例如搭配苹果麦金塔(Macintosh)计算机的Motorola68K-to-PowerPC仿真器,其可在具有PowerPC处理器的麦金塔计算机上执行68K程序,其可在具有x86处理器的麦金塔计算机上执行68K程序。位于加州圣塔克拉拉(SantaClara,California)的全美达公司,结合超长指令字(VLIW)的核心硬件与“纯粹软件指令的转译器(亦即程序码转译软件(CodeMorphingSoftware))以动态地编译或仿真(emulate)x86程序码序列”以执行x86程序码,请参照2011年维基百科针对全美达(Transmeta)的说明<http://en.wikipedia.org/wiki/Transmeta>。另外,参照1998年11月3日由Kellyetal.提出的美国专利第5,832,205号公告案。IBM的DAISY(DynamicArchitectureInstructionSetfromYorktown)系统具有超长指令字(VLIW)机器与动态二进制软件转译,可提供100%的旧架构软件相容仿真。DAISY具有位于只读存储器内的虚拟机器观测器(VirtualMachineMonitor),以平行处理(parallelize)与储存超长指令字原始码(VLIWprimitives)至未见于旧有系统架构的部分主要存储器内,期能避免这些旧有体系架构的程序码片段在后续程序被重新编译(re-translation)。DAISY具有高速编译器优化算法(fastcompileroptimizationalgorithms)以提升效能。QEMU是一具有软件动态转译器的机器仿真器(machineemulator)。QEMU可在多种主系统(host),如x86、PowerPC、ARM、SPARC、Alpha与MIPS,模拟多种中央处理器,如x86、PowerPC、ARM与SPARC。请参照QEMU,aFastandPortableDynamicTranslator,FabriceBellard,USENIXAssociation,FREENIXTrack:2005USENIXAnnualTechnicalConference,如同其开发者所称“动态转译器对目标处理器指令执行时的转换(runtimeconversion),将其转换至主系统指令集,所产生的二进制码是储存于一转译快取以利重复取用。…QEMU[较之其它动态转译器]远为简单,因为它只连接GNCC编译器于离线(offline)时所产生的机器码片段”。同时可参照2009年6月19日Adelaide大学LeeWangHao的学位论文“ARMInstructionSetSimulationonMulti-corex86Hardware”。虽然以软件转译为基础的解决方案所提供的处理效能可以满足多个运算需求的一部分,但是不大能够满足多个使用者的情况。
静态(static)二进制制转译是另一种具有高效能潜力的技术。不过,二进制制转译技术的使用存在技术上的问题(例如自我修改程序码(self-modifyingcode)、只在执行时(run-time)可知的间接分支(indirectbranches)数值)以及商业与法律上的障碍(例如:此技术可能需要硬件开发商配合开发散布新程序所需的管道;对原程序散布者存在潜在的授权或是著作权侵害的风险)。
ARM指令集架构(ISA)具有条件指令执行的特色。如ARM架构参考手册(ARMArchitectureReferenceManual)第A4-3页所述:“大部分ARM指令可被有条件地执行,意谓若是APSR中的N、Z、C与V旗标满足指令所指定的条件,他们才会在程序者的模式操作、存储器与协处理器发挥正常的效果。若是这些旗标不满足条件,指令就会如同一个不操作(NOP)机器指令,此指令执行至下一个正常指令,包括对于例外事件实行的所有相关的确认操作,但不会有其它效果。”
条件执行有利于缩小指令码的尺寸,并能通过缩减分支指令的数量来提升效能,但指令错误预测则会伴随效能减损。因此,如何有效率地执行条件指令,尤其在支持高微处理器频率的情况,是亟待解决的问题。
发明内容
本发明的一实施例提供一微处理器,具有多个架构条件旗标且执行一架构指令,只有在该架构条件旗标满足该架构指令所指定的一条件,该架构指令指示该微处理器对第一与第二来源操作数执行一操作以产生一结果并将该结果写入一目的寄存器。该微处理器可以包括:一硬件指令转译器,接收该架构指令并相对应地转译该架构指令为第一与第二微指令;其中如果该架构指令指定架构条件旗标将要更新,则该第一微指令指示写入架构条件旗标并且该第二微指令具有第一类型;以及其中如果该架构指令指定架构条件旗标不要更新,则该第一微指令指示不写入架构条件旗标并且该第二微指令具有第二类型;以及一执行管线,执行从该硬件指令转译器所接收到的该些微指令。其中,响应于该第一微指令,该执行管线:对该些来源操作数执行该操作以产生该结果和非架构指针以及基于该结果的架构条件旗标的新的值,其中如果该第一微指令指示写入架构条件旗标并且由该执行管线读取的架构条件旗标满足该条件,则该执行管线产生该非架构指针的真值,否则产生该非架构指针的假值;其中,响应于该第二微指令,该执行管线:在该第二微指令具有第一类型时基于该非架构指针确定是否满足该条件,并且在该第二微指令具有第二类型时基于架构条件旗标的新的值确定是否满足该条件;在满足该条件的情况下,将由该第一微指令所产生的该结果写入该目的寄存器;以及在不满足该条件的情况下,将该目的寄存器当前的值写入该目的寄存器。
本发明的另一实施例提供一微处理器,具有多个架构条件旗标,其中该微处理器执行一架构指令,该架构指令指示该微处理器对一第一来源操作数执行一移位操作以产生一第一结果,对该第一结果与一第二来源操作数执行一第二操作以产生一第二结果,并且只在该些架构条件旗标满足该架构指令指定的一条件下,将该第二结果写入一目的寄存器。该微处理器可以包括:一硬件指令转译器,接收该架构指令并对应地转译该架构指令为至少第一与第二微指令;以及一执行管线,执行从该硬件指令转译器接收的该些微指令。其中,响应于该第一微指令,该执行管线:对该第一来源操作数执行该移位操作以产生该第一结果;其中,响应于该第二微指令,该执行管线:在该些架构条件旗标满足该条件的情况下,将该第二结果写入该目的寄存器;以及在该些架构条件旗标不满足该条件的情况下,将该目的寄存器当前的值写入该目的寄存器。
本发明的另一实施例提供一种微处理器的处理方法。该微处理器具有多个架构条件旗标以执行一架构指令,该架构指令指示该微处理器执行对第一与第二来源操作数执行一操作以产生一结果,并且只在该些架构条件旗标满足该架构指令指定的一条件的情况下,将该结果写入一目的寄存器,该方法包括:将该架构指令转译为第一与第二微指令,其中是由该微处理器的一硬件指令转译器进行转译;其中如果该架构指令指定架构条件旗标将要更新,则该第一微指令指示写入架构条件旗标并且该第二微指令具有第一类型;以及其中如果该架构指令指定架构条件旗标不要更新,则该第一微指令指示不写入架构条件旗标并且该第二微指令具有第二类型;以及由该微处理器的一执行管线执行从该硬件指令转译器接收的该些微指令;其中,执行该第一微指令的步骤包括:对该些来源操作数执行该操作以产生该结果和非架构指针以及基于该结果的架构条件旗标的新的值,其中如果该第一微指令指示写入架构条件旗标并且由该执行管线读取的架构条件旗标满足该条件,则产生该非架构指针的真值,否则产生该非架构指针的假值;其中,执行该第二微指令的步骤包括:在该第二微指令具有第一类型时基于该非架构指针确定是否满足该条件,并且在该第二微指令具有第二类型时基于架构条件旗标的新的值确定是否满足该条件;在满足该条件的情况下,将由该第一微指令产生的该结果写入该目的寄存器;以及在不满足该条件的情况下,将该目的寄存器当前的值写入该目的寄存器。
本发明的另一实施例提供一微处理器。此微处理器具有多个架构条件旗标并执行一架构指令。此架构指令指示微处理器对于第一与第二来源操作数执行一操作以产生一结果,并只在这些架构条件旗标满足架构指令所指定的一条件的情况下,将此结果写入一目的寄存器。此微处理器具有一硬件指令转译器,接收架构指令并对应地将此架构指令转译为第一与第二微指令。微处理器具有一执行管线执行由硬件指令转译器接收的微指令。相应于第一微指令,执行管线对于这些来源操作数执行前述操作以产生前述结果。相应于第二微指令,执行管线在这些架构条件旗标满足条件的情况下,将第一微指令所产生的前述结果写入目的寄存器,并在这些架构条件旗标不满足条件的情况下,将目的寄存器当前的值写入目的寄存器。
本发明的另一实施例提供一具有多个架构条件旗标的微处理器。此微处理器执行一架构指令。此架构指令指示微处理器对于一第一来源操作数执行一移位操作以产生一第一结果,对于第一结果与一第二来源操作数执行一第二操作以产生一第二结果,并只在这些架构条件旗标满足架构指令所指定的一条件下,将前述第二结果写入目的寄存器。微处理器具有一硬件指令转译器接收架构指令并对应地将架构指令转译为至少第一与第二微指令。微处理器并具有一执行管线执行由硬件指令转译器所接收的微指令。相应于第一微指令,执行管线对第一来源操作数执行前述移位操作以产生前述第一结果。相应于第二微指令,执行管线在这些架构条件旗标满足条件的情况下,将第二结果写入目的寄存器,而在这些架构条件旗标不满足条件的情况下,将将目的寄存器当前的值写入目的寄存器。
本发明的又一实施例提供用于一微处理器的处理方法。此微处理器具有多个架构条件旗标并执行一架构指令。此架构指令指示微处理器对于第一与第二来源操作数执行一操作以产生一结果,并且只在这些架构条件旗标满足架构指令所指定的一条件的情况下,将此结果写入一目的寄存器。此方法包括将架构指令转译为第一与第二微指令,其中,此转译步骤是由微处理器的一硬件指令转译器进行。此方法并包括执行由硬件指令转译器所接收的微指令,此执行步骤是由微处理器的一执行管线进行。执行第一微指令的步骤包括对来源操作数执行前述操作以产生前述结果。执行第二微指令的步骤包括,在架构条件旗标满足条件的情况下,将第一微指令产生的结果写入目的寄存器,以及在架构条件旗标不满足条件的情况下,将目的寄存器当前的值写入目的寄存器。
本发明的又一实施例提供用于一微处理器的处理方法。此微处理器具有多个架构条件旗标并执行一架构指令。此架构指令指示微处理器对第一来源操作数执行一移位操作以产生一第一结果,对第一结果与第二来源操作数执行一第二操作以产生一第二结果,并且只在架构条件旗标满足架构指令所指的条件的情况下,将第二结果写入一目的寄存器。此方法包括将架构指令转译为至少第一与第二微指令,其中,此转译步骤是由微处理器的一硬件指令转译器进行。此方法包括执行此由硬件指令转译器接收的微指令,其中,此执行步骤是由微处理器的一执行管线进行。执行第一微指令的步骤包括对第一来源操作数执行前述移位操作以产生前述第一结果。执行第二微指令的步骤包括,在架构条件旗标满足条件的情况下,将第二结果写入目的寄存器,而在架构条件旗标不满足条件的情况下,将目的寄存器当前的值写入目的寄存器。
本发明的又一实施例提供一计算机程序产品。此计算机程序产品编码于至少一计算机可读取储存媒介以使用于一运算装置。此计算机程序产品具有适用于前述媒介的计算机可读取程序码,以指定一微处理器。此微处理器具有多个架构条件旗标并执行一架构指令。此架构指令指示微处理器对第一与第二来源操作数执行一操作以产生一结果,并于架构条件旗标满足架构指令所指定的条件的情况下,将此结果写入一目的寄存器。此计算机可读取程序码具有第一程序码以指定一硬件指令转译器。此硬件指令转译器接收架构指令并对应地将架构指令转译为第一与第二微指令。此计算机可读取程序码并具有第二程序码以指定一执行管线。此执行管线执行由硬件指令转译器接收的微指令。相应于第一微指令,执行管线对来源操作数执行前述操作以产生前述结果。相应于第二微指令,执行管线在架构条件旗标满足条件的情况下,将第一微指令所产生的结果写入目的寄存器,而在架构条件旗标不满足条件的情况下,将目的寄存器当前的值写入目的寄存器。
再者,本发明的又一实施例提供一微处理器。此微处理器具有多个架构条件旗标并且执行一架构指令。此架构指令指示微处理器对于第一与第二来源操作数执行一操作以产生一结果,并且只在这些架构条件旗标满足架构指令所指定的一条件的情况下,将此结果写入一目的寄存器。此微处理器具有一寄存器,其具有储存空间以储存该些架构条件旗标以及储存一非架构指针,该微处理器还包括一硬件指令转译器,接收架构指令并相对应地将此架构指令转译为第一与第二微指令。微处理器并具有一执行管线执行由硬件指令转译器接收的微指令。相应于第一微指令,执行管线对于这些来源操作数执行前述操作以产生前述结果,决定是否该些架构条件旗标满足该条件;以及更新该非架构指针以标示该些架构条件旗标是否满足该条件。相应于第二微指令,执行管线在这些架构条件旗标满足条件的情况下,如果该非架构指针被该第一微指令更新后,则将第一微指令所产生的前述结果更新至目的寄存器,并且标示这些架构条件旗标满足架构指令该条件。又,相应于第二微指令,如果经过该第一微指令更新后的非架构指针指示这些架构条件旗标是不满足该条件的情况下,则将目的寄存器当前的值更新至目的寄存器。
本发明的又一实施例提供用于一微处理器的处理方法。此微处理器具有多个架构条件旗标并执行一架构指令。此架构指令指示微处理器对于第一与第二来源操作数执行一操作以产生一结果,并且只在这些架构条件旗标满足架构指令所指定的一条件的情况下,将此结果写入一目的寄存器。此方法包括将架构指令转译为第一与第二微指令,其中,此转译步骤是由微处理器的一硬件指令转译器进行。此方法并包括执行由硬件指令转译器所接收的微指令,此执行步骤是由微处理器的一执行管线进行。执行第一微指令的步骤包括对来源操作数执行前述操作以产生前述结果,决定是否该些架构条件旗标满足该条件;以及更新一非架构指针以标示该些架构条件旗标是否满足该条件;执行第二微指令的步骤包括:如果该非架构指针经过该第一微指令的更新之后,其所标示的该些架构条件旗标满足该条件的情况下,则将更新的结果写入该目的寄存器;以及,如果该非架构指针经过该第一微指令的更新之后,其所标示的该些架构条件旗标不满足该条件的情况下,将该目的寄存器当前的值写入该目的寄存器。
本发明的又一实施例提供一计算机程序产品。此计算机程序产品编码于至少一计算机可读取储存媒介以使用于一运算装置。此计算机程序产品具有适用于前述媒介的计算机可读取程序码,以指定一微处理器。此微处理器具有多个架构条件旗标并执行一架构指令。此架构指令指示微处理器对第一与第二来源操作数执行一操作以产生一结果,并于架构条件旗标满足架构指令所指定的条件的情况下,将此结果写入一目的寄存器。此计算机可读取程序码具有第一程序码以指定一寄存器,该寄存器具有储存空间以储存该些架构条件旗标以及储存一非架构指针,此计算机可读取程序码并具有第二程序码以指定一硬件指令转译器。此硬件指令转译器接收架构指令并相对应地将架构指令转译为第一与第二微指令。此计算机可读取程序码并具有第三程序码以指定一执行管线。此执行管线执行由硬件指令转译器接收的微指令。
相应于第一微指令,执行管线对来源操作数执行前述操作以产生前述结果。决定是否该些架构条件旗标满足该条件;以及更新该非架构指针以标示该些架构条件旗标是否满足该条件;相应于第二微指令,如果该非架构指针经过该第一微指令的更新之后,其所标示的在该些架构条件旗标满足该条件的情况下,执行管线将把该第一微指令产生的该结果更新至该目的寄存器;又,相应于第二微指令,如果该非架构指针经过该第一微指令的更新之后,其所标示的在该些架构条件旗标不满足该条件的情况下,执行管线将把该目的寄存器当前的值写入该目的寄存器。
又再者,本发明的一实施例提供一微处理器。此微处理器具有多个架构条件旗标并包括一架构进位旗标和其它架构条件旗标,其中该微处理器执行一架构指令。此架构指令指示微处理器对于一第一来源操作数执行一移位操作以产生一第一结果,对于第一结果与一第二来源操作数执行一第二操作以产生一第二结果,并且只在这些架构条件旗标满足架构指令所指定的一条件下,将前述第二结果写入目的寄存器并更新该条件旗标。微处理器包括一寄存器具有储存空间以储存该些架构条件旗标以及储存一非架构旗标,并且包括一硬件指令转译器接收架构指令并对应地将架构指令转译为至少第一与第二微指令。微处理器并具有一执行管线执行由硬件指令转译器所接收的微指令。相应于第一微指令,执行管线对第一来源操作数执行前述移位操作以产生前述第一结果和一进位旗标值,并且利用该进位旗标值更新该非架构进位旗标。相应于该第二微指令,执行管线对该第一结果和第二来源操作数执行该第二操作以产生该第二结果,并依据该第二结果产生新的条件旗标值,再者,在该些架构条件旗标满足该条件的情况下,执行管线还利用该非架构进位旗标值更新该架构进位旗标,并且利用所产生的新的条件旗标值更新至少一个相对应的其它架构条件旗标;以及在该些架构条件旗标不满足该条件的情况下,执行管线则是利用该架构条件旗标当前的值更新该架构条件旗标。
本发明的又一实施例提供用于一微处理器的处理方法。此微处理器具有多个架构条件旗标并包括一架构进位旗标和一其它架构条件旗标并执行一架构指令。此架构指令指示微处理器对第一来源操作数执行一移位操作以产生一第一结果,对第一结果与第二来源操作数执行一第二操作以产生一第二结果,并且只在架构条件旗标满足架构指令所指定的条件的情况下,将第二结果写入一目的寄存器和更新该些条件旗标。
此方法包括将架构指令转译为第一与第二微指令,其中,此转译步骤是由微处理器的一硬件指令转译器进行。此方法包括执行此由硬件指令转译器接收的第一和第二微指令,其中,此执行步骤是由微处理器的一执行管线进行。执行第一微指令的步骤包括对第一来源操作数执行前述移位操作以产生前述第一结果和一进位旗标值,并且利用该进位旗标值更新该非架构进位旗标。执行第二微指令的步骤包括对该第一结果和第二来源操作数执行该第二操作以产生该第二结果,并依据该第二结果产生新的条件旗标值;此外,在该些架构条件旗标满足该条件的情况下,利用该非架构进位旗标值更新该架构进位旗标,并且利用所产生的新的条件旗标值更新至少一个相对应的其它架构条件旗标;以及在该些架构条件旗标不满足该条件的情况下,利用该架构条件旗标当前的值更新该架构条件旗标。
本发明的又一实施例提供一计算机程序产品。此计算机程序产品编码于至少一计算机可读取储存媒介以使用于一运算装置。此计算机程序产品具有适用于前述媒介的计算机可读取程序码,以指定一微处理器。此微处理器具有多个架构条件旗标并且包括一架构进位旗标以及其它架构条件旗标,其中微处理器执行一架构指令。此架构指令指示微处理器对第一来源操作数执行一移位操作以产生一第一结果,对第一结果与第二来源操作数执行一第二操作以产生一第二结果,并且只在架构条件旗标满足架构指令所指定的条件的情况下,将第二结果写入一目的寄存器和更新该些条件旗标。
此计算机可读取程序码具有第一程序码以指定一寄存器,该寄存器具有储存空间以储存该些架构条件旗标以及储存一非架构指针,此计算机可读取程序码并具有第二程序码以指定一硬件指令转译器。此硬件指令转译器接收架构指令并相对应地将架构指令转译为第一与第二微指令。此计算机可读取程序码并具有第三程序码以指定一执行管线。此执行管线执行由硬件指令转译器接收的微指令。相应于第一微指令,执行管线对第一来源操作数执行移位操作,以产生第一结果和一进位旗标值,并利用该进位旗标值更新该非架构进位旗标。相应于第二微指令,执行管线对第一结果和第二来源操作数执行该第二操作以产生第二结果,并依据该第二结果产生新的条件旗标值。此外,相应于第二微指令,在该些架构条件旗标满足该条件的情况下,执行管线还利用该非架构进位旗标值更新该架构进位旗标,并且利用所产生的新的条件旗标值更新至少一个相对应的其它架构条件旗标;然而在该些架构条件旗标不满足该条件的情况下,执行管线则是利用该架构条件旗标当前的值更新该架构条件旗标。
关于本发明的优点与精神可以通过以下的发明详述及所附图式得到进一步的了解。
附图说明
图1是本发明执行x86程序集架构与ARM程序集架构机器语言程序的微处理器一实施例的方块图。
图2是一方块图,详细显示图1的硬件指令转译器。
图3是一方块图,详细显示图2的指令格式化程序(instructionformatter)。
图4是一方块图,详细显示图1的执行管线。
图5是一方块图,详细显示图1的寄存器文件。
图6A和图6B是一流程图,显示图1的微处理器的操作步骤。
图7是本发明一双核心微处理器的方块图。
图8是本发明执行x86ISA与ARMISA机器语言程序的微处理器另一实施例的方块图。
图9是一方块图,详细显示部分图1的微处理器。
图10A和图10B是一流程图,显示图1的硬件指令转译器转译条件ALU指令的操作步骤。
图11是一流程图,显示图4的执行单元执行一移位微指令的操作步骤。
图12A和图12B是一流程图,显示图4的执行单元执行一条件ALU微指令的操作步骤。
图13是一流程图,显示图4的执行单元执行一条件移动微指令(conditionalmovemicroinstruction)的操作步骤。
图14至20是方块图,显示图1的执行管线112执行依据图10A和图10B的转译操作所转译的各种形式的条件ALU指令的操作步骤。
图21A和图21B是一流程图,显示图1的硬件指令转译器转译条件ALU指令,以指出(specify)来源寄存器(sourceregister)的其中之一与目的寄存器为同一的操作步骤。
图22至28是方块图,显示图1的执行管线112执行依据图21的转译操作所转译的各种形式的条件ALU指令的操作步骤。
[主要元件标号说明]
微处理器(处理核心)100指令快取102
硬件指令转译器104寄存器文件106
存储器子系统108执行管线112
指令撷取单元与分支预测器114ARM程序计数器(PC)寄存器116
x86指令指针(IP)寄存器118
配置寄存器(configurationregister)122
ISA指令124微指令126
结果128
指令模式指针(instructionmodeindicator)132
撷取地址134
环境模式指针(environmentmodeindicator)136
指令格式化程序202简单指令转译器(SIT)204
复杂指令转译器(CIT)206多工器(mux)212
x86简单指令转译器222ARM简单指令转译器224
微程序计数器(micro-programcounter,micro-PC)232
微码只读存储器234微程序器(microsequencer)236
指令间接寄存器(instructionindirectionregister,IIR)235
微转译器(microtranslator)237格式化ISA指令242
实行微指令(implementingmicroinstructions)244
实行微指令246只读存储器指令247
选择输入248微码地址252
只读存储器地址254ISA指令信息255
预解码器(pre-decoder)302指令字节队列(IBQ)304
长度解码器(lengthdecoders)与涟波逻辑门(ripplelogic)306
多工器队列(muxqueue,MQ)308多工器312
格式化指令队列(formattedinstructionqueue,FIQ)314
ARM指令集状态322微指令队列401
寄存器配置表(registerallocationtable,RAT)402
指令调度器(instructiondispatcher)404
保留站(reservationstation)406
指令发送单元(instructionissueunit)408
整数/分支(integer/branch)单元412
媒体单元(mediaunit)414
加载/储存(load/store)单元416
浮点(floatingpoint)单元418
重排缓冲器(reorderbuffer,ROB)422
执行单元424ARM特定寄存器502
x86特定寄存器504共享寄存器506
双核心微处理器700微指令快取892
条件旗标寄存器926多工器922
旗标总线928条件旗标数值928/924
ISA条件旗标902条件满足(SAT)位904
预移位进位(PSC)位906使用移位进位(USE)位908
具体实施方式
名词定义
指令集,是定义二进制制编码值的集合(即机器语言指令)与微处理器所执行操作间的对应关系。机器语言程序基本上以二进制制进行编码,不过亦可使用其它进位制的系统,如部分早期IBM计算机的机器语言程序,虽然最终亦是以电压高低呈现二进制值的物理信号来表现,不过却是以十进制制进行编码。机器语言指令指示微处理器执行的操作如:将寄存器1内的操作数与寄存器2内的操作数相加并将结果写入寄存器3、将存储器地址0x12345678的操作数减掉指令所指定的立即操作数并将结果写入寄存器5、依据寄存器7所指定的位数移动寄存器6内的数值、若是零旗标被设定时,在分支到指令后方的36个字节、将存储器地址0xABCD0000的数值加载寄存器8。因此,指令集是定义各个机器语言指令使微处理器执行所欲执行的操作的二进制编码值。须了解的是,指令集定义二进制值与微处理器操作间的对应关系,并不意味着单一个二进制值就会对应至单一个微处理器操作。具体来说,在部分指令集中,多个二进制值可能会对应至同一个微处理器操作。
指令集架构(ISA),从微处理器家族的脉络来看,包含:(1)指令集;(2)指令集的指令所能存取的资源集(例如:存储器寻址所需的寄存器与模式);以及(3)微处理器响应指令集的指令执行所产生的例外事件集(例如:除以零、分页错误、存储器保护违反等)。因为程序撰写者,如组译器与编译器的撰写者,想要作出机器语言程序在一微处理器家族执行时,就需要此微处理器家族的ISA定义,所以微处理器家族的制造者通常会将ISA定义于操作者操作手册中。举例来说,2009年3月公布的Intel64与IA-32架构软件开发者手册(Intel64andIA-32ArchitecturesSoftwareDeveloper’sManual)即定义Intel64与IA-32处理器架构的ISA。此软件开发者手册包含有五个章节,第一章是基本架构;第二A章是指令集参考A至M;第二B章是指令集参考N至Z;第三A章是系统编程指南;第三B章是系统编程指南第二部分,此手册系列为本发明的参考文件。此种处理器架构通常被称为x86架构,本文中则是以x86、x86ISA、x86ISA家族、x86家族或是相似用语来说明。在另一个例子中,2010年公布的ARM架构参考手册,ARMv7-A与ARMv7-R版本Erratamarkup,定义ARM处理器架构的ISA。此参考手册系列为参考文件。此ARM处理器架构的ISA在此亦被称为ARM、ARMISA、ARMISA家族、ARM家族或是相似用语。其它众所周知的ISA家族还有IBMSystem/360/370/390与z/Architecture、DECVAX、Motorola68k、MIPS、SPARC、PowerPC与DECAlpha等等。ISA的定义会涵盖处理器家族,因为处理器家族的发展中,制造者会通过在指令集中增加新指令、以及/或在寄存器组中增加新的寄存器等方式来改进原始处理器的ISA。举例来说,随着x86程序集架构的发展,其于IntelPentiumIII处理器家族导入一组128位的多媒体扩展指令集(MMX)寄存器作为单指令多重数据流扩展(SSE)指令集的一部分,而x86ISA机器语言程序已经开发来利用XMM寄存器以提升效能,虽然现存的x86ISA机器语言程序并不使用单指令多重数据流扩展指令集的XMM寄存器。此外,其它制造商亦设计且制造出可执行x86ISA机器语言程序的微处理器。例如,超微半导体(AMD)与威盛电子(VIATechnologies)即在x86ISA增加新技术特征,如超微半导体的3DNOW!单指令多重数据流(SIMD)向量处理指令,以及威盛电子的Padlock安全引擎随机数产生器(randomnumbergenerator)与先进解码引擎(advancedcryptographyengine)的技术,前述技术都是采用x86ISA的机器语言程序,但却非由现有的Intel微处理器实现。以另一个实例来说明,ARMISA原本定义ARM指令集状态具有4字节的指令。然而,随着ARMISA的发展而增加其它指令集状态,如具有2字节指令以提升编码密度的Thumb指令集状态以及用以加速Java字节码程序的Jazelle指令集状态,ARMISA机器语言程序已被发展来使用部分或所有其它ARMISA指令集状态,即使现存的ARMISA机器语言程序产生之初并非采用这些其它ARMISA指令集状态。
指令集架构(ISA)机器语言程序,包含ISA指令序列,即ISA指令集对应至程序撰写者要程序执行的操作序列的二进制编码值序列。因此,x86ISA机器语言程序包含x86ISA指令序列,ARMISA机器语言程序则包含ARMISA指令序列。机器语言程序指令是存放于存储器内,且由微处理器撷取并执行。
硬件指令转译器,包含多个晶体管的配置,用以接收ISA机器语言指令(例如x86ISA或是ARMISA机器语言指令)作为输入,并对应地输出一个或多个微指令至微处理器的执行管线。执行管线执行微指令的执行结果是由ISA指令所定义。因此,执行管线通过对这些微指令的集体执行来“实现”ISA指令。也就是说,执行管线通过对于硬件指令转译器输出的实行微指令的集体执行,实现所输入ISA指令所指定的操作,以产生此ISA指令定义的结果。因此,硬件指令转译器可视为是将ISA指令“转译(translate)”为一个或多个实行微指令。本实施例所描述的微处理器具有硬件指令转译器以将x86ISA指令与ARMISA指令转译为微指令。不过,需要理解的是,硬件指令转译器并非必然可对x86使用者操作手册或是ARM使用者操作手册所定义的整个指令集进行转译,而往往只能转译这些指令中一个子集合,如同绝大多数x86ISA与ARMISA处理器只支持其对应的使用者操作手册所定义的一个指令子集合。具体来说,x86使用者操作手册定义由硬件指令转译器转译的指令子集合,不必然就对应至所有现存的x86ISA处理器,ARM使用者操作手册定义而由硬件指令转译器转译的指令子集合,不必然就对应至所有既有的ARMISA处理器。
执行管线(pipeline),是一多层级序列(sequenceofstages)。此多层级序列的各层级分别具有硬件逻辑与一硬件寄存器。硬件寄存器保持硬件逻辑的输出信号,并依据微处理器的时钟信号,将此输出信号提供至多层级序列的下一层级。执行管线可以具有多个多层级序列,例多重执行管线。执行管线接收微指令作为输入信号,并相应地执行微指令所指定的操作以输出执行结果。微指令所指定,且由执行管线的硬件逻辑所执行的操作包括但不限于算数、逻辑、存储器加载/储存、比较、测试、与分支解析,对进行操作的数据格式包括但不限于整数、浮点数、字、二进编码十进数(BCD)、与压缩格式(packedformat)。执行管线执行微指令以实现ISA指令(如x86与ARM),藉以产生ISA指令所定义的结果。执行管线不同于硬件指令转译器。具体来说,硬件指令转译器产生实行微指令,执行管线则是执行这些指令,但不产生这些实行微指令。
指令快取,是微处理器内的一个随机存取存储装置,微处理器将ISA机器语言程序的指令(例如x86ISA与ARMISA的机器语言指令)放置其中,这些指令是撷取自系统存储器并由微处理器依据ISA机器语言程序的执行流程来执行。具体来说,ISA定义一指令地址寄存器以持有下一个待执行ISA指令的存储器地址(举例来说,在x86ISA被定义为指令指针(IP)而在ARMISA被定义为程序计数器(PC)),而在微处理器执行机器语言程序以控制程序流程时,微处理器会更新指令地址寄存器的内容。ISA指令被快取来供后续撷取之用。当该寄存器所包含的下一个机器语言程序的ISA指令地址是位于目前的指令快取中,可依据指令寄存器的内容快速地从指令快取撷取ISA指令由系统存储器中取出该ISA指令。尤其是,此程序是基于指令地址寄存器(如指令指针(IP)或是程序计数器(PC))的存储器地址向指令快取取得数据,而非特地运用一加载或储存指令所指定的存储器地址来进行数据撷取。因此,将指令集架构的指令视为数据(例如采用软件转译的系统的硬件部分所呈现的数据)的专用数据快取,特地运用一加载/储存地址来存取,而非基于指令地址寄存器的数值来存取的,就不是此处所称的指令快取。此外,可取得指令与数据的混合式快取,是基于指令地址寄存器的数值以及基于加载/储存地址,而非仅仅基于加载/储存地址,亦被涵盖在本说明对指令快取的定义内。在本说明内容中,加载指令是指将数据由存储器读取至微处理器的指令,储存指令是指将数据由微处理器写入存储器的指令。
微指令集,是微处理器的执行管线能够执行的指令(微指令)的集合。
实施例说明
本发明的实施例揭露的微处理器可通过硬件将其对应的x86ISA与ARMISA指令转译为由微处理器执行管线直接执行的微指令,以达到可执行x86ISA与ARMISA机器语言程序的目的。此微指令是由不同于x86ISA与ARMISA的微处理器微架构(microarchitecture)的微指令集所定义。由于本文所述的微处理器需要执行x86与ARM机器语言程序,微处理器的硬件指令转译器会将x86与ARM指令转译为微指令,并将这些微指令提供至微处理器的执行管线,由微处理器执行这些微指令以实现前述x86与ARM指令。由于这些实行微指令是直接由硬件指令转译器提供至执行管线来执行,而不同于采用软件转译器的系统需于执行管线执行指令前,将预先储存本机(host)指令至存储器,因此,前揭微处理器具有潜力能够以较快的执行速度执行x86与ARM机器语言程序。
图1是一方块图显示本发明执行x86ISA与ARMISA机器语言程序的微处理器100一实施例。此微处理器100具有一指令快取102;一硬件指令转译器104,用以由指令快取102接收x86ISA指令与ARMISA指令124并将其转译为微指令126;一执行管线112,执行由硬件指令转译器104接收的微指令126以产生微指令结果128,该结果是以操作数的型式回传至执行管线112;一寄存器文件106与一存储器子系统108,分别提供操作数至执行管线112并由执行管线112接收微指令结果128;一指令撷取单元与分支预测器114,提供一撷取地址134至指令快取102;一ARMISA定义的程序计数器寄存器116与一x86ISA定义的指令指针寄存器118,其依据微指令结果128进行更新,且提供其内容至指令撷取单元与分支预测器114;以及多个配置寄存器122,提供一指令模式指针132与一环境模式指针136至硬件指令转译器104与指令撷取单元与分支预测器114,并基于微指令结果128进行更新。
由于微处理器100可执行x86ISA与ARMISA机器语言指令,微处理器100依据程序流程由系统存储器(未图标)撷取指令至微处理器100。微处理器100存取最近撷取的x86ISA与ARMISA的机器语言指令至指令快取102。指令撷取单元114将依据由系统存储器撷取的x86或ARM指令字节区段,产生一撷取地址134。若是命中指令快取102,指令快取102将位于撷取地址134的x86或ARM指令字节区段提供至硬件指令转译器104,否则由系统存储器中撷取指令集架构的指令124。指令撷取单元114基于ARM程序计数器116与x86指令指针118的值产生撷取地址134。具体来说,指令撷取单元114会在一撷取地址寄存器中维持一撷取地址。任何时候指令撷取单元114撷取到新的ISA指令字节区段,它就会依据此区段的大小更新撷取地址,并依据既有方式依序进行,直到出现一控制流程事件。控制流程事件包含例外事件的产生、分支预测器114的预测显示撷取区段内有一将发生的分支(takenbranch)、以及执行管线112响应一非由分支预测器114所预测的将发生分支指令的执行结果,而对ARM程序计数器116与x86指令指针118进行的更新。指令撷取单元114将撷取地址相应地更新为例外处理程序地址、预测目标地址或是执行目标地址以响应一控制流程事件。在一实施例中,指令快取102是一混合快取,以存取ISA指令124与数据。值得注意的是,在此混合快取的实施例中,虽然混合快取可基于一加载/储存地址将数据写入快取或由快取读取数据,在微处理器100是由混合快取撷取指令集架构的指令124的情况下,混合快取是基于ARM程序计数器116与x86指令指针118的数值来存取,而非基于加载/储存地址。指令快取102可以为一随机存取存储器装置。
指令模式指针132是一状态指示微处理器100当前是否正在撷取、格式化(formatting)/解码、以及将x86ISA或ARMISA指令124转译为微指令126。此外,执行管线112与存储器子系统108接收此指令模式指针132,此指令模式指针132会影响微指令126的执行方式,尽管只是微指令集内的一个小集合受影响而已。x86指令指针寄存器118持有下一个待执行的x86ISA指令124的存储器地址,ARM程序计数器寄存器116持有下一个待执行的ARMISA指令124的存储器地址。为了控制程序流程,微处理器100在其执行x86与ARM机器语言程序时,分别更新x86指令指针寄存器118与ARM程序计数器寄存器116,至下一个指令、分支指令的目标地址或是例外处理程序地址。在微处理器100执行x86与ARMISA的机器语言程序的指令时,微处理器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)来进行更新。
环境模式指针136是一状态指示微处理器100是使用x86或ARMISA的语意于此微处理器100操作的多种执行环境,例如虚拟存储器、例外事件、快取控制、与全域执行时间保护。因此,指令模式指针132与环境模式指针136共同产生多个执行模式。在第一种模式中,指令模式指针132与环境模式指针136都指向x86ISA,微处理器100是作为一般的x86ISA处理器。在第二种模式中,指令模式指针132与环境模式指针136都指向ARMISA,微处理器100是作为一般的ARMISA处理器。在第三种模式中,指令模式指针132指向x86ISA,不过环境模式指针136则是指向ARMISA,此模式有利于在ARM操作系统或是超管理器的控制下执行使用者模式x86机器语言程序;相反地,在第四种模式中,指令模式指针132是指向ARMISA,不过环境模式指针136则是指向x86ISA,此模式有利于在x86操作系统或超管理器的控制下执行使用者模式ARM机器语言程序。指令模式指针132与环境模式指针136的数值在重置(reset)之初就已确定。在一实施例中,此初始值被视为微码常数进行编码,不过可通过熔断配置熔丝与/或使用微码修补进行修改。在另一实施例中,此初始值则是由一外部输入提供至微处理器100。在一实施例中,环境模式指针136只在由一重置至ARM(reset-to-ARM)指令124或是一重置至x86(reset-to-x86)指令124执行重置后才会改变(请参照下述图6);亦即,在微处理器100正常运作而未由一般重置、重置至x86或重置至ARM指令124执行重置时,环境模式指针136并不会改变。
硬件指令转译器104接收x86与ARMISA的机器语言指令124作为输入,相应地提供一个或多个微指令126作为输出信号以实现x86或ARMISA指令124。执行管线112执行前揭一个或多个微指令126,其集体执行的结果实现x86或ARMISA指令124。也就是说,这些微指令126的集体执行可依据输入端所指定的x86或ARMISA指令124,来执行x86或是ARMISA指令124所指定的操作,以产生x86或ARMISA指令124所定义的结果。因此,硬件指令转译器104将x86或ARMISA指令124转译为一个或多个微指令126。硬件指令转译器104包含一组晶体管,以一预设方式进行配置来将x86ISA与ARMISA的机器语言指令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的子集合并不必然对应至任何由ARMLtd.开发的既有的ISA处理器。前揭一个或多个用以实现x86或ARMISA指令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或ARMISA指令124所会遭遇到的重复转译的问题。硬件指令转译器104的实施例在图2会有更详细的说明。
执行管线112执行由硬件指令转译器104提供的实行微指令126。基本上,执行管线112是一通用高速微指令处理器。虽然本文所描述的功能是由具有x86/ARM特定特征的执行管线112执行,不过,但大多数x86/ARM特定功能其实是由此微处理器100的其它部分,如硬件指令转译器104,来执行。在一实施例中,执行管线112执行由硬件指令转译器104接收到的实行微指令126的寄存器重命名、超纯量发布、与非循序执行。执行管线112在图4会有更详细的说明。
微处理器100的微架构包含:(1)微指令集;(2)微指令集的微指令126所能取用的资源集,此资源集是x86与ARMISA的资源的超集(superset);以及(3)微处理器100相应于微指令126的执行所定义的微例外事件(micro-exception)集,此微例外事件集是x86ISA与ARMISA的例外事件的超集。此微架构不同于x86ISA与ARMISA。具体来说,此微指令集在许多面向不同于x86ISA与ARMISA的指令集。首先,微指令集的微指令指示执行管线112执行的操作与x86ISA与ARMISA的指令集的指令指示微处理器执行的操作并非一对一对应。虽然其中许多操作相同,不过,仍有一些微指令集指定的操作并非x86ISA及/或ARMISA指令集所指定。相反地,有一些x86ISA及/或ARMISA指令集指定的操作并非微指令集所指定。其次,微指令集的微指令是以不同于x86ISA与ARMISA指令集的指令的编码方式进行编码。亦即,虽然有许多相同的操作(如:相加、偏移、加载、返回)在微指令集以及x86与ARMISA指令集中都有指定,微指令集与x86或ARMISA指令集的二进制操作码值对应表并没有一对一对应。微指令集与x86或ARMISA指令集的二进制操作码值对应表相同通常是巧合,其间仍不具有一对一的对应关系。第三,微指令集的微指令字段与x86或是ARMISA指令集的指令的字段也不是一对一对应。
整体而言,微处理器100可执行x86ISA与ARMISA机器语言程序指令。然而,执行管线112本身无法执行x86或ARMISA机器语言指令;而是执行由x86ISA与ARMISA指令转译成的微处理器100微架构的微指令集的实行微指令126。然而,虽然此微架构与x86ISA以及ARMISA不同,本发明亦提出其它实施例将微指令集与其它微架构特定的资源开放给使用者。在这些实施例中,此微架构可有效地作为在x86ISA与ARMISA外的一个具有微处理器所能执行的机器语言程序的第三ISA。
下表(表1)描述本发明微处理器100的一实施例的微指令集的微指令126的一些字段。
表1
下表(表2)描述本发明微处理器100的一实施例的微指令集的一些微指令。
微处理器100也包含一些微架构特定的资源,如微架构特定的通用寄存器、媒体寄存器与区段寄存器(如用于重命名的寄存器或由微码所使用的寄存器)以及未见于x86或ARMISA的控制寄存器,以及一私有随机存取存储器(PRAM)。此外,此微架构可产生例外事件,亦即前述的微例外事件。这些例外事件未见于x86或ARMISA或是由它们所指定,通常是微指令126与相关微指令126的重新执行(replay)。举例来说,这些情形包含:加载错过(loadmiss)的情况,其是执行管线112假设载入操作并于错过时重新执行此加载微指令126;错过转译后备缓冲区(TLB),在查表(pagetablewalk)与转译后备缓冲区填满后,重新执行此微指令126;浮点微指令126接收一异常操作数(denormaloperand),但此操作数被评估为正常情况,需在执行管线112正常化此操作数后重新执行此微指令126;一加载微指令126执行后检测到一个更早的储存微指令126与其地址冲突(address-colliding)需要重新执行此加载微指令126。需理解的是,本文表1所列的字段,表2所列的微指令,以及微架构特定的资源与微架构特定的例外事件,只是作为例示说明本发明的微架构,而非穷尽本发明的所有可能实施例。
寄存器文件106包含微指令126所使用的硬件寄存器,以持有资源与/或目的操作数。执行管线112将其结果128写入寄存器文件106,并由寄存器文件106为微指令126接收操作数。硬件寄存器是引用(instantiate)x86ISA定义与ARMISA定义的通用寄存器是共享寄存器文件106中的一些寄存器。举例来说,在一实施例中,寄存器文件106是引用十五个32位的寄存器,由ARMISA寄存器R0至R14以及x86ISA累积寄存器(EAXregister)至R14D寄存器所共享。因此,若是一第一微指令126将一数值写入ARMR2寄存器,随后一后续的第二微指令126读取x86累积寄存器将会接收到与第一微指令126写入相同的数值,反之亦然。此技术特征有利于使x86ISA与ARMISA的机器语言程序得以快速通过寄存器进行沟通。举例来说,假设在ARM机器语言操作系统执行的ARM机器语言程序能使指令模式132改变为x86ISA,并将控制权转换至一x86机器语言程序以执行特定功能,因为x86ISA可支持一些指令,其执行操作的速度快于ARMISA,在这种情形下将有利于执行速度的提升。ARM程序可通过寄存器文件106的共享寄存器提供需要的数据给x86执行程序。反之,x86执行程序可将执行结果提供至寄存器文件106的共享寄存器内,以使ARM程序在x86执行程序回复后可见到此执行结果。相似地,在x86机器语言操作系统执行的x86机器语言程序可使指令模式132改变为ARMISA并将控制权转换至ARM机器语言程序;此x86程序可通过寄存器文件106的共享寄存器提供所需的数据给ARM执行程序,而此ARM执行程序可通过寄存器文件106的共享寄存器提供执行结果,以使x86程序在ARM执行程序回复后可见到此执行结果。因为ARMR15寄存器是一独立引用的ARM程序计数器寄存器116,因此,引用x86R15D寄存器的第十六32位寄存器并不分享给ARMR15寄存器。此外,在一实施例中,x86的十六个128位XMM0至XMM15寄存器与十六个128位进阶单指令多重数据扩展(AdvancedSIMD(“Neon”))寄存器的32位区段是分享给三十二个32位ARMVFPv3浮点寄存器。寄存器文件106亦引用旗标寄存器(即x86EFLAGS寄存器与ARM条件旗标寄存器),以及x86ISA与ARMISA所定义的多种控制权与状态寄存器,这些架构控制与状态寄存器包括x86架构的特定模型寄存器(modelspecificregisters,MSRs)与保留给ARM架构的协同处理器(8-15)寄存器。此寄存器文件106亦引用非架构寄存器,如用于寄存器重命名或是由微码234所使用的非架构通用寄存器,以及非架构x86特定模型寄存器与实作定义的或是由制造商指定的ARM协同处理器寄存器。寄存器文件106在图5会有更进一步的说明。
存储器子系统108包含一由高速缓存构成的高速缓存阶层架构(在一实施例中包含第1层(level-1)指令快取102、第1层(level-1)数据快取与第2层混合快取)。此存储器子系统108包含多种存储器请求队列,如加载、储存、填入、检测、合并写入归并缓冲区。存储器子系统亦包含一存储器管理单元(MMU)。存储器管理单元具有转译后备缓冲区(TLBs),尤以独立的指令与数据转译后备缓冲区为佳。存储器子系统还包含一查表引擎(tablewalkengine)以获得虚拟与物理地址间的转译,来回应转译后备缓冲区的错失。虽然在图1中指令快取102与存储器子系统108是显示为各自独立,不过,在逻辑上,指令快取102亦是存储器子系统108的一部分。存储器子系统108设定使x86与ARM机器语言程序分享一共同的存储空间,以使x86与ARM机器语言程序容易通过存储器互相沟通。
存储器子系统108得知指令模式132与环境模式136,使其能够在适当ISA内容中执行多种操作。举例来说,存储器子系统108依据指令模式指针132指示为x86或ARMISA,来执行特定存储器存取违规的检验(例如过限检验(limitviolationcheck))。在另一实施例中,响应环境模式指针136的改变,存储器子系统108会更新(flush)转译后备缓冲区;不过在指令模式指针132改变时,存储器子系统108并不相应地更新转译后备缓冲区,以在前述指令模式指针132与环境模式指针136分指x86与ARM的第三与第四模式中提供较佳的效能。在另一实施例中,回应一转译后备缓冲区错失(TKBmiss),查表引擎依据环境模式指针136指示为x86或ARMISA,,从而决定利用x86分页表或ARM分页表来执行一分页查表动作以取出转译后备缓冲区。在另一实施例中,若是环境状态指针136指示为x86ISA,存储器子系统108检查会影响快取策略的x86ISA控制寄存器(如CR0CD与NW位)的架构状态;若是环境模式指针136指示为ARMISA,则检查相关的ARMISA控制寄存器(如SCTLRI与C位)的架构模式。在另一实施例中,若是状态指针136指示为x86ISA,存储器子系统108检查会影响存储器管理的x86ISA控制寄存器(如CR0PG位)的架构状态;若是环境模式指针136指示为ARMISA,则检查相关的ARMISA控制寄存器(如SCTLRM位)的架构模式。在另一实施例中,若是状态指针136指示为x86ISA,存储器子系统108检查会影响对准检测的x86ISA控制寄存器(如CR0AM位)的架构状态,若是环境模式指针136指示为ARMISA,则检查相关的ARMISA控制寄存器(如SCTLRA位)的架构模式。在另一实施例中,若是状态指针136指示为x86ISA,存储器子系统108(以及用于特权指令的硬件指令转译器104)检查当前所指定特权级(CPL)的x86ISA控制寄存器的架构状态;若是环境模式指针136指示为ARMISA,则检查指示使用者或特权模式的相关ARMISA控制寄存器的架构模式。不过,在一实施例中,x86ISA与ARMISA分享微处理器100中具有相似功能的控制字节/寄存器,微处理器100并不对各个指令集架构引用独立的控制字节/寄存器。
虽然配置寄存器122与寄存器文件106在图标中是各自独立,不过配置寄存器122可被理解为寄存器文件106的一部分。配置寄存器122具有一全域配置寄存器,用以控制微处理器100在x86ISA与ARMISA各种不同面向的操作,例如使多种特征生效或失效功能。全域配置寄存器可使微处理器100执行ARMISA机器语言程序的能力失效,即让微处理器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读取熔丝值,对预设值与熔丝值执行一异或操作,并将操作结果写入配置寄存器122。此外,对于熔丝值修改的效果可利用一微码234修补而回复。在微处理器100能够执行x86与ARM程序的情况下,全域配置寄存器可用于确认微处理器100(或如图7所示处理器的多核心部分的一特定核心100)在重置或如图6A及图6B所示在响应x86形式的INIT指令时,会以x86微处理器的形态还是以ARM微处理器的形态进行开机。全域配置寄存器并具有一些位提供起始预设值给特定的架构控制寄存器,如ARMISASCTLT与CPACR寄存器。图7所示的多核心的实施例中仅具有一个全域配置寄存器,即使各核心的配置可分别设定,如在指令模式指针132与环境模式指针136都设定为x86或ARM时,选择以x86核心或是ARM核心开机)。此外,启动ARM指令126与退出启动x86指令126可用以在x86与ARM指令模式132间动态切换。在一实施例中,全域配置寄存器可通过一x86RDMSR指令对一新的非架构特定模型寄存器进行读取,并且其中部分的控制位可通过x86WRMSR指令对前揭新的非架构特定模型寄存器的写入来进行写入。全域配置寄存器还可通过ARMMRC/MRRC指令对一对应至前揭新的非架构特定模型寄存器的ARM协处理器寄存器进行读取,而其中部分的控制位可通过ARMMCR/MCRR指令对应至此新的非架构特定模型寄存器的ARM协处理器寄存器的写入来进行写入。
配置寄存器122并包含多种不同的控制寄存器从不同面向控制微处理器100的操作。这些非x86(non-x86)/ARM的控制寄存器包括本文所称的全域控制寄存器、非指令集架构控制寄存器、非x86/ARM控制寄存器、通用控制寄存器、以及其它类似的寄存器。在一实施例中,这些控制寄存器可利用x86RDMSR/WRMSR指令至非架构特定模型寄存器(MSRs)进行存取、以及利用ARMMCR/MRC(或MCRR/MRRC)指令至新实作定义的协同处理器寄存器进行存取。举例来说,微处理器100包含非x86/ARM的控制寄存器,以确认微型(fine-grained)快取控制,此微型快取控制是小于x86ISA与ARMISA控制寄存器所能提供者。
在一实施例中,微处理器100提供ARMISA机器语言程序通过实作定义ARMISA协同处理器寄存器存取x86ISA特定模型寄存器,这些实作定义ARMISA协处理器寄存器是直接对应于相对应的x86特定模型寄存器。此特定模型寄存器的地址是指定于ARMISAR1寄存器。此数据是由MRC/MRRC/MCR/MCRR指令所指定的ARMISA寄存器读出或写入。在一实施例中,特定模型寄存器的一子集合是以密码保护,亦即指令在尝试存取特定模型寄存器时必须使用密码。在此实施例中,密码是指定于ARMR7:R6寄存器。若是此存取操作导致x86通用保护错误,微处理器100随即产生一ARMISA未定义指令中止模式(UND)例外事件。在一实施例中,ARM协同处理器4(地址为:0,7,15,0)存取相对应的x86特定模型寄存器。
微处理器100并包含一个耦接至执行管线112的中断控制器(未图示)。在一实施例中,此中断控制器是一x86型式的先进可编程中断控制器(APIC)。中断控制器将x86ISA中断事件对应至ARMISA中断事件。在一实施例中,x86INTR对应至ARMIRQ中断事件;x86NMI是对应至ARMIRQ中断事件;x86INIT在微处理器100启动时引发起动重置循序过程(INIT-resetsequence),无论那一个指令集架构(x86或ARM)原本是由硬件重置启动的;x86SMI对应至ARMFIQ中断事件;以及x86STPCLK、A20、Thermal、PREQ、与Rebranch则不对应至ARM中断事件。ARM机器语言能通过新的实作定义的ARM协同处理器寄存器存取先进可编程中断控制器的功能。在一实施例中,APIC寄存器地址是指定于ARMR0寄存器,此APIC寄存器的地址与x86的地址相同。在一实施例中,ARM协同处理器6通常用于操作系统执行的特权模式功能。此ARM协同处理器6的地址为:0,7,nn,0;其中nn是15时可存取先进可编程中断控制器;nn是12-14以存取总线接口单元,藉以在处理器总线上执行8位、16位与32位输入/输出循环。微处理器100并包含一总线接口单元(未图标),此总线接口单元耦接至存储器子系统108与执行管线112,作为微处理器100与处理器总线的接口。在一实施例中,处理器总线符合一个IntelPentium微处理器家族的微处理器总线的规格。ARM机器语言程序可够通过新的实作定义的ARM协同处理器寄存器存取总线接口单元的功能以在处理器总线上产生输入/输出循环,即由输入输出总线传送至输入输出空间的一特定地址,藉以与系统芯片组沟通,举例来说,ARM机器语言程序可产生一SMI认可的特定循环或是关于C状态转换的输入输出循环。在一实施例中,输入输出地址是指定于ARMR0寄存器。在一实施例中,微处理器100具有电力管理能力,如已知的P-state与C-state管理。ARM机器语言程序可通过新的实作定义ARM协同处理器寄存器执行电力管理。在一实施例中,微处理器100包含一加密单元(未图示),此加密单元是位于执行管线112内。在一实施例中,此加密单元实质上类似于具有Padlock安全科技功能的VIA微处理器的加密单元。ARM机器语言程序能通过新的实作定义的ARM协同处理器寄存器取得加密单元的功能,如加密指令。在一实施例中,ARM协同处理器用于通常由使用者模式应用程序执行的使用者模式功能,例如那些使用加密单元的技术特征所产生的功能。
在微处理器100执行x86ISA与ARMISA机器语言程序时,每一次微处理器100执行x86或是ARMISA指令124,硬件指令转译器104就会执行硬件转译。反之,采用软件转译的系统则能在多个事件中重复使用同一个转译,而非对之前已转译过的机器语言指令重复转译,因而有助于改善效能。此外,图8的实施例使用微指令快取以避免微处理器每一次执行x86或ARMISA指令124时可能发生的重复转译操作。本发明的前述各个实施例所描述的方式是配合不同的程序特征及其执行环境,因此确实有助于改善效能。
分支预测器114存取之前执行过的x86与ARM分支指令的历史数据。分支预测器114依据之前的快取历史数据,来分析由指令快取102所取得快取线是否存在x86与ARM分支指令以及其目标地址。在一实施例中,快取历史数据包含分支指令124的存储器地址、分支目标地址、一个方向指针、分支指令的种类、分支指令在快取线的起始字节、以及一个显示是否横跨多个快取线的指针。在一实施例中,如2011年4月7日提出的美国第61/473,067号临时申请案“APPARATUSANDMETHODFORUSINGBRANCHPREDICTIONTOEFFICIENTLYEXECUTECONDITIONALNON-BRANCHINSTRUCTIONS”,其提供改善分支预测器114的效能以使其能预测ARMISA条件非分支指令方向的方法。在一实施例中,硬件指令转译器104并包含一静态分支预测器,可依据执行码、条件码的类型、向后(backward)或向前(forward)等等数据,预测x86与ARM分支指令的方向与分支目标地址。
本发明亦考虑多种不同的实施例以实现x86ISA与ARMISA定义的不同特征的组合。举例来说,在一实施例中,微处理器100实现ARM、Thumb、ThumbEE与Jazelle指令集状态,但对Jazelle扩充指令集则是提供无意义的实现(trivialimplementation);微处理器100并实现下述扩充指令集,包含:Thumb-2、VFPv3-D32、进阶单指令多重数据(AdvancedSIMD(Neon))、多重处理、与VMSA;但不实现下述扩充指令集,包含:安全性扩充、快速内容切换扩充、ARM除错(ARM程序可通过ARMMCR/MRC指令至新的实作定义协同处理器寄存器取得x86除错功能)、效能检测计数器(ARM程序可通过新的实作定义协同处理器寄存器取得x86效能计数器)。举例来说,在一实施例中,微处理器100将ARMSETEND指令视为一无操作指令(NOP)并且只支持Little-endian数据格式。在另一实施例中,微处理器100并不实现x86SSE4.2的功能。
本发明考虑多个实施例的微处理器100的改良,例如对台湾台北的威盛电子股份有限公司所生产的商用微处理器VIANanoTM进行改良。此Nano微处理器能够执行x86ISA机器语言程序,但无法执行ARMISA机器语言程序。Nano微处理器包含高效能寄存器重命名、超纯量指令技术、非循序执行管线与一硬件转译器以将x86ISA指令转译为微指令供执行管线执行。本发明对于Nano硬件指令转译器的改良,使其除了可转译x86机器语言指令外,还可将ARMISA机器语言指令转译为微指令供执行管线执行。硬件指令转译器的改良包含简单指令转译器的改良与复杂指令转译器的改良(亦包含微码在内)。此外,微指令集可加入新的微指令以支持ARMISA机器语言指令与微指令间的转译,并可改善执行管线使能执行新的微指令。此外,Nano寄存器文件与存储器子系统亦可经改善使其能支持ARMISA,亦包含特定寄存器的共享。分支预测单元可通过改善使其在x86分支预测外,亦能适用于ARM分支指令预测。此实施例的优点在于,因为在很大的程度上与ISA无关(largelyISA-agnostic)的限制,因而只需对于Nano微处理器的执行管线进行轻微的修改,即可适用于ARMISA指令。对于执行管线的改良包含条件码旗标的产生与使用方式、用以更新与回报指令指针寄存器的语意、存取特权保护方法、以及多种存储器管理相关的功能,如存取违规检测、分页与转译后备缓冲区(TLB)的使用、与快取策略等。前述内容仅为例示,而非限定本案发明,其中部分特征在后续内容会有进一步的说明。最后,如前述,x86ISA与ARMISA定义的部分特征可能无法为前揭对Nano微处理器进行改良的实施例所支持,这些特征如x86SSE4.2与ARM安全性扩充、快速内容切换扩充、除错与效能计数器,其中部分特征在后续内容会有更进一步的说明。此外,前揭通过对于Nano处理器的改良以支持ARMISA机器语言程序,为一整合使用设计、测试与制造资源以完成能够执行x86与ARM机器语言程序的单集成电路产品的实施例,此单集成电路产品是涵盖市场绝大多数既存的机器语言程序,而符合现今市场潮流。本文所述的微处理器100的实施例实质上可被配置为x86微处理器、ARM微处理器、或是可同时执行x86ISA与ARMISA机器语言程序微处理器。此微处理器可通过在单一微处理器100(或是图7的核心100)上的x86与ARM指令模式132间的动态切换以取得同时执行x86ISA与ARMISA机器语言程序的能力,亦可通过将多核心微处理100(对应于图7所示)的一个或多个核心配置为ARM核心而一个或多个配置为x86核心,亦即通过在多核心100的每一个核心上进行x86与ARM指令间的动态切换,以取得同时执行x86ISA与ARMISA机器语言程序的能力。此外,传统上,ARMISA核心系被设计作为知识产权核心,而被各个第三者协力厂商纳入其应用,如系统芯片与/或嵌入式应用。因此,ARMISA并不具有一特定的标准处理器总线,作为ARM核心与系统的其它部分(如芯片组或其它接口设备)间的接口。有利的是,Nano处理器已具有一高速x86型式处理器总线作为连接至存储器与接口设备的接口,以及一存储器一致性结构可协同微处理器100在x86计算机系统环境下支持ARMISA机器语言程序的执行。
请参照图2,图中是以方块图详细显示图1的硬件指令转译器104。此硬件指令转译器104包含硬件,更具体来说,就是晶体管的集合。硬件指令转译器104包含一指令格式化程序202,由图1的指令快取102接收指令模式指针132以及x86ISA与ARMISA指令字节124的区块,并输出格式化的x86ISA与ARMISA指令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、一指令间接寄存器(instructionindirectionregister,IIR)235、以及一用以产生复杂指令转译器所输出的实行微指令246的微转译器(microtranslator)237。由简单指令转译器204所产生的实行微指令244与由复杂指令转译器206所产生的实行微指令246都属于微处理器100的微架构的微指令集的微指令126,并且都可直接由执行管线112执行。
多工器212是受到一选择输入248所控制。一般的时候,多工器212会选择来自简单指令转译器204的微指令;然而,当简单指令转译器204遭遇一复杂x86或ARMISA指令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已经导致一例外条件产生。
简单指令转译器204接收ISA指令242,并且在指令模式指针132指示为x86时,将这些指令视为x86ISA指令进行解码,而在指令模式指针132指示为ARM时,将这些指令视为ARMISA指令进行解码。简单指令转译器204并确认此ISA指令242为简单或是复杂ISA指令。简单指令转译器204能够为简单ISA指令242,输出所有用以实现此ISA指令242的实行微指令126;也就是说,复杂指令转译器206并不提供任何实行微指令126给简单ISA指令124。反之,复杂ISA指令124要求复杂指令转译器206提供至少部分(若非全部)的实行微指令126。在一实施例中,对ARM与x86ISA指令集的指令124的子集合而言,简单指令转译器204输出部分实现x86/ARMISA指令126的微指令244,随后将控制权转移至复杂指令转译器206,由复杂指令转译器206接续输出剩下的微指令246来实现x86/ARMISA指令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与ARMISA机器语言程序来说是较常执行的ISA指令124,而只有相对少数的指令124需要由复杂指令转译器206提供实行微指令246。依据一实施例,主要由复杂指令转译器206实现的x86指令如RDMSR/WRMSR、CPUID、复杂运算指令(如FSQRT与超越指令(transcendentalinstruction))、以及IRET指令;主要由复杂指令转译器206实现的ARM指令如MCR、MRC、MSR、MRS、SRS、与RFE指令。前揭列出的指令并非限定本发明,仅列示指出本发明复杂指令转译器206所能实现的ISA指令的种类。
当指令模式指针132指示为x86,x86简单指令转译器222对于x86ISA指令242进行解码,并且将其转译为实行微指令244;当指令模式指针132指示为ARM,ARM简单指令转译器224对于ARMISA指令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包含一硬件状态机器(hardwarestatemachine)使其能够在多个时钟周期输出多个微指令244以实现一个ISA指令242。
在一实施例中,简单指令转译器204并依据指令模式指针132与/或环境模式指针136,执行多个不同的例外事件检测。举例来说,若是指令模式指针132指示为x86且x86简单指令转译器222对一个就x86ISA而言是无效的ISA指令124进行解码,简单指令转译器204随即产生一个x86无效操作码例外事件;相似地,若是指令模式指针132指示为ARM且ARM简单指令转译器224对一个就ARMISA而言是无效的ISA指令124进行解码,简单指令转译器204随即产生一个ARM未定义指令例外事件。在另一实施例中,若是环境模式指针136指示为x86ISA,简单指令转译器204随即检测是否其所遭遇的每个x86ISA指令242需要一特别特权级(particularprivilegelevel),若是,检测当前特权级(CPL)是否满足此x86ISA指令242所需的特别特权级,并于不满足时产生一例外事件;相似地,若是环境模式指针136指示为ARMISA,简单指令转译器204随即检测是否每个格式化ARMISA指令242需要一特权模式指令(privilegedmodeinstruction),若是,检测当前的模式是否为特权模式,并于现在模式为使用者模式时,产生一例外事件。复杂指令转译器206对于特定复杂ISA指令242亦执行类似的功能。
复杂指令转译器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的半导体芯片内。
除了用来实现简单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与ARMISA指令124内提供的寄存器信息,通过ISA指令信息255的使用,转译至寄存器文件106内的适当的寄存器。ISA指令信息255包含一移位字段、一立即字段、一常数字段、各个来源操作数与微指令126本身的重命名信息、用以实现ISA指令124的一系列微指令126中指示第一个与最后一个微指令126的信息、以及储存由硬件指令转译器104对ISA指令124转译时所搜集到的有用信息的其它位。
微转译器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。
使用微转译器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外,亦经改良以转译ARMISA指令124。
值得注意的是,微程序计数器232不同于ARM程序计数器116与x86指令指针118,亦即微程序计数器232并不持有ISA指令124的地址,微程序计数器232所持有的地址亦不落于系统存储器地址空间内。此外,更值得注意的是,微指令246是由硬件指令转译器104所产生,并且直接提供给执行管线112执行,而非作为执行管线112的执行结果128。
请参照图3,图中是以方块图详述图2的指令格式化器202。指令格式化器202由图1的指令快取102接收x86ISA与ARMISA指令字节124区块。凭借x86ISA指令长度可变的特性,x86指令124可以由指令字节124区块的任何字节开始。由于x86ISA容许前缀字节的长度会受到当前地址长度与操作数长度预设值的影响,因此确认快取区块内的x86ISA指令的长度与位置的任务会更为复杂。此外,依据当前ARM指令集状态322与ARMISA指令124的操作码,ARMISA指令的长度不是2字节就是4字节,因而不是2字节对齐就是4字节对齐。因此,指令格式化器202由指令字节124串(stream)撷取不同的x86ISA与ARMISA指令,此指令字节124串是由指令快取102接收的区块所构成。也就是说,指令格式化程序202格式化x86ISA与ARMISA指令字节串,因而大幅简化图2的简单指令转译器204对ISA指令124进行解码与转译的困难任务。
指令格式化器202包含一预解码器302,在指令模式指针132指示为x86时,预解码器302预先将指令字节124视为x86指令字节进行解码以产生预解码信息,在指令模式指针132指示为ARM时,预解码器302预先将指令字节124视为ARM指令字节进行解码以产生预解码信息。指令字节队列(IBQ)304接收ISA指令字节124区块以及由预解码器302产生的相关预解码信息。
一个由长度解码器与涟波逻辑门306构成的阵列接收指令字节队列304底部项目(bottomentry)的内容,亦即ISA指令字节124区块与相关的预解码信息。此长度解码器与涟波逻辑门306亦接收指令模式指针132与ARMISA指令集状态322。在一实施例中,ARMISA指令集状态322包含ARMISACPSR寄存器的J与T位。为了响应其输入信息,此长度解码器与涟波逻辑门306产生解码信息,此解码信息包含ISA指令字节124区块内的x86与ARM指令的长度、x86前缀信息、以及关于各个ISA指令字节124的指针,此指针指出此字节是否为ISA指令124的起始字节、终止字节、以及/或一有效字节。一多工器队列308接收ISA指令字节126区块、由预解码器302产生的相关预解码信息、以及由长度解码器与涟波逻辑门306产生的相关解码信息。
控制逻辑(未图标)检验多工器队列(MQ)308底部项目的内容,并控制多工器312撷取不同的、或格式化的ISA指令与相关的预解码与解码信息,所撷取的信息提供至一格式化指令队列(FIQ)314。格式化指令队列314在格式化ISA指令242与提供至图2的简单指令转译器204的相关信息间作为缓冲。在一实施例中,多工器312在每一个时钟周期内撷取至多三个格式化ISA指令与相关的信息。
在一实施例中,指令格式化程序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外,还能格式化ARMISA指令124。长度解码器306被修改,使能对ARMISA指令124进行解码以产生长度以及起点、终点与有效性的字节指针。尤其,若是指令模式指针132指示为ARMISA,长度解码器306检测当前ARM指令集状态322与ARMISA指令124的操作码,以确认ARM指令124是一个2位组长度或是4位组长度的指令。在一实施例中,长度解码器306包含多个独立的长度解码器分别用以产生x86ISA指令124的长度数据以及ARMISA指令124的长度数据,这些独立的长度解码器的输出再以连线或(wire-ORed)耦接在一起,以提供输出至涟波逻辑门306。在一实施例中,此格式化指令队列314包含独立的队列以持有格式化指令242的多个互相分离的部分。在一实施例中,指令格式化程序202在单一时钟周期内,提供简单指令转译器204至多三个格式化ISA指令242。
请参照图4,图中是以方块图详细显示图1的执行管线112,此执行管线112耦接至硬件指令转译器104以直接接收来自图2的硬件指令转译器104的实行微指令。执行管线112包含一微指令队列401,以接收微指令126;一寄存器配置表402,由微指令队列401接收微指令;一指令调度器404,耦接至寄存器配置表402;多个保留站406,耦接至指令调度器404;一指令发送单元408,耦接至保留站406;一重排缓冲器(reorderbuffer,ROB)422,耦接至寄存器配置表402、指令调度器404与保留站406;以及,执行单元424耦接至保留站406、指令发送单元408与重排缓冲器422。寄存器配置表402与执行单元424接收指令模式指针132。
在硬件指令转译器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重复转译,但却会在队列项目中产生空洞而导致浪费,因而需要更多列项目以及一个较大且更耗能的队列来提供相当的缓冲能力。
寄存器配置表402是由微指令队列401接收微指令126并产生与微处理器100内进行中的微指令126的附属信息,寄存器配置表402并执行寄存器重命名操作来增加微指令平行处理的能力,以利于执行管线112的超纯量、非循序执行能力。若是ISA指令124指示为x86,寄存器配置表402会对应于微处理器100的x86ISA寄存器106,产生附属信息且执行相对应的寄存器重命名操作;反之,若是ISA指令124指示为ARM,寄存器配置表402就会对应于微处理器100的ARMISA寄存器106,产生附属信息且执行相对应的寄存器重命名操作;不过,如前述,部分寄存器106可能是由x86ISA与ARMISA所共享。寄存器配置表402亦在重排缓冲器422中依据程序顺序配置一项目给各个微指令126,因此重排缓冲器422可使微指令126以及其相关的x86ISA与ARMISA指令124依据程序顺序进行引退,即使微指令126的执行对应于其所欲实现的x86ISA与ARMISA指令124而言是以非循序的方式进行的。重排缓冲器422包含一环形队列,此环形队列的各个项目是用以储存关于进行中的微指令126的信息,此信息除了其它事项,还包含微指令126执行状态、一个确认微指令126是由x86或是ARMISA指令124所转译的标签、以及用以储存微指令126的结果的储存空间。
指令调度器404由寄存器配置表402接收寄存器重命名微指令126与附属信息,并依据指令的种类以及执行单元424的可利用性,将微指令126及其附属信息分派至关联于适当的执行单元424的保留站406。此执行单元424将会执行微指令126。
对各个在保留站406中等待的微指令126而言,指令发送单元408测得相关执行单元424可被运用且其附属信息被满足(如来源操作数可被运用)时,即发布微指令126至执行单元424供执行。如前述,指令发送单元408所发布的微指令126,可以非循序以及以超纯量方式来执行。
在一实施例中,执行单元424包含整数/分支单元412、媒体单元414、加载/储存单元416、以及浮点单元418。执行单元424执行微指令126以产生结果128并提供至重排缓冲器422。虽然执行单元424并不大受到其所执行的微指令126是由x86或是ARMISA指令124转译而来的影响,执行单元424仍会使用指令模式指针132与环境模式指针136以执行相对较小的微指令126子集。举例来说,执行管线112管理旗标的产生,其管理会依据指令模式指针132指示为x86ISA或是ARMISA而有些微不同,并且,执行管线112依据指令模式指针132指示为x86ISA或是ARMISA,对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与ARMISA指令124的微处理器100微架构的微指令126。
请参照图5,图中是以方块图详述图1的寄存器文件106。就一较佳实施例而言,寄存器文件106为独立的寄存器区块实体。在一实施例中,通用寄存器是由一具有多个读出端口与写入端口的寄存器文件实体来实现;其它寄存器可在实体上独立于此通用寄存器文件以及其它会存取这些寄存器但具有较少的读取写入端口的邻近功能方块。在一实施例中,部分非通用寄存器,尤其是那些不直接控制微处理器100的硬件而仅储存微码234会使用到的数值的寄存器(如部分x86MSR或是ARM协同处理器寄存器),则是在一个微码234可存取的私有随机存取存储器(PRAM)内实现。不过,x86ISA与ARMISA程序者无法见到此私有随机存取存储器,亦即此存储器并不在ISA系统存储器地址空间内。
总括来说,如图5所示,寄存器文件106在逻辑上是区分为三种,亦即ARM特定的寄存器502、x86特定的寄存器504、以及共享寄存器506。在一实施例中,共享寄存器506包含十五个32位寄存器,由ARMISA寄存器R0至R14以及x86ISAEAX至R14D寄存器所共享,另外有十六个128位寄存器由x86ISAXMM0至XMM15寄存器以及ARMISA进阶单指令多重数据扩展(Neon)寄存器所共享,这些寄存器的部分是重迭于三十二个32位ARMVFPv3浮点寄存器。如前文图1所述,通用寄存器的共享意指由x86ISA指令124写入一共享寄存器的数值,会被ARMISA指令124在随后读取此共享寄存器时见到,反之亦然。此方式的优点在于,能够使x86ISA与ARMISA程序通过寄存器互相沟通。此外,如前述,x86ISA与ARMISA的架构控制寄存器的特定位亦可被引用为共享寄存器506。如前述,在一实施例中,x86特定模型寄存器可被ARMISA指令124通过实作定义协同处理器寄存器存取,因而是由x86ISA与ARMISA所共享。此共享寄存器506可包含非架构寄存器,例如条件旗标的非架构同等物,这些非架构寄存器同样由寄存器配置表402重命名。硬件指令转译器104知道哪一个寄存器是由x86ISA与ARMISA所共享,因而会产生实行微指令126来存取正确的寄存器。
ARM特定的寄存器502包含ARMISA所定义但未被包含于共享寄存器506的其它寄存器,而x86特定的寄存器504包含x86ISA所定义但未被包含于共享寄存器506的其它寄存器。举例来说,ARM特定的寄存器502包含ARM程序计数器116、CPSR、SCTRL、FPSCR、CPACR、协同处理器寄存器、多种例外事件模式的备用通用寄存器与程序状态保存寄存器(savedprogramstatusregisters,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并非为限定本发明,仅为例示以说明本发明。
在一实施例中,微处理器100包含新的实作定义ARM协同处理器寄存器,在指令模式指针132指示为ARMISA时,此实作定义协同处理器寄存器可被存取以执行x86ISA相关的操作。这些操作包含但不限于:将微处理器100重置为一x86ISA处理器(重置至x86指令)的能力;将微处理器100初始化为x86特定的状态,将指令模式指针132切换至x86,并开始在一特定x86目标地址撷取x86指令124(启动至x86指令)的能力;存取前述全域配置寄存器的能力;存取x86特定寄存器(如EFLAGS)的能力,此x86寄存器是指定在ARMR0寄存器中,存取电力管理(如P状态与C状态的转换),存取处理器总线功能(如输入/输出循环)、中断控制器的存取、以及加密加速功能的存取。此外,在一实施例中,微处理器100包含新的x86非架构特定模型寄存器,在指令模式指针132指示为x86ISA时,此非架构特定模型寄存器可被存取以执行ARMISA相关的操作。这些操作包含但不限于:将微处理器100重置为一ARMISA处理器(重置至ARM指令)的能力;将微处理器100初始化为ARM特定的状态,将指令模式指针132切换至ARM,且开始在一特定ARM目标地址撷取ARM指令124(启动至ARM指令)的能力;存取前述全域配置寄存器的能力;存取ARM特定寄存器(如CPSR)的能力,此ARM寄存器是指定在EAX寄存器内。
请参照图6A与图6B,图中显示一流程说明图1的微处理器100的操作程序。此流程始于步骤602。
如步骤602所示,微处理器100被重置。可向微处理器100的重置输入端发出信号来进行此重置操作。此外,在一实施例中,此微处理器总线是一x86型式的处理器总线,此重置操作可由x86型式的INIT命令进行。响应此重置操作,微码234的重置程序被调用来执行。此重置微码的操作包含:(1)将x86特定的状态504初始化为x86ISA所指定的预设数值;(2)将ARM特定的状态502初始化为ARMISA所指定的预设数值;(3)将微处理器100的非ISA特定的状态初始化为微处理器100制造商所指定的预设数值;(4)将共享ISA状态506,如GPRs,初始化为x86ISA所指定的预设数值;以及(5)将指令模式指针132与环境模式指针136设定为指示x86ISA。在另一实施例中,不同于前揭操作(4)与(5),此重置微码将共享ISA状态506初始化为ARMISA特定的预设数值,并将指令模式指针132与环境模式指针136设定为指示ARMISA。在此实施例中,步骤638与642的操作不需要被执行,并且,在步骤614之前,此重置微码会将共享ISA状态506初始化为x86ISA所指定的预设数值,并将指令模式指针132与环境模式指针136设定为指示x86ISA。接下来进入步骤604。
在步骤604,重置微码确认微处理器100被配置为一个x86处理器或是一个ARM处理器来进行开机。在一实施例中,如前述,预设ISA开机模式是硬式编码于微码,不过可通过熔断配置熔丝的方式,或利用一微码修补来修改。在一实施例中,此预设ISA开机模式作为一外部输入提供至微处理器100,例如一外部输入接脚。接下来进入步骤606。在步骤606中,若是预设ISA开机模式为x86,就会进入步骤614;反之,若是预设开机模式为ARM,就会进入步骤638。
在步骤614中,重置微码使微处理器100开始由x86ISA指定的重置向量地址撷取x86指令124。接下来进入步骤616。
在步骤616中,x86系统软件(如BIOS)是配置微处理器100来使用如x86ISARDMSR与WRMSR指令124。接下来进入步骤618。
在步骤618中,x86系统软件执行一重置至ARM的指令124。此重置至ARM的指令使微处理器100重置并以一ARM处理器的状态离开重置程序。然而,因为x86特定状态504以及非ISA特定配置状态不会因为重置至ARM的指令126而改变,此方式有利于使x86系统固件执行微处理器100的初步设定并使微处理器100随后以ARM处理器的状态重开机,而同时还能使x86系统软件执行的微处理器100的非ARM配置配置维持完好。藉此,此方法能够使用“小型的”微开机码来执行ARM操作系统的开机程序,而不需要使用微开机码来解决如何配置微处理器100的复杂问题。在一实施例中,此重置至ARM指令是一x86WRMSR指令至一新的非架构特定模型寄存器。接下来进入步骤622。
在步骤622,简单指令转译器204进入陷阱至重置微码,以响应复杂重置至ARM(complexreset-to-ARM)指令124。此重置微码使ARM指定状态502初始化至由ARMISA特定的预设数值。不过,重置微码并不修改微处理器100的非ISA特定状态,因有利于保存步骤616执行所需的配置设定。此外,重置微码使共享ISA状态506初始化至ARMISA指定的预设数值。最后,重置微码设定指令模式指针132与环境模式指针136以指示ARMISA。接下来进入步骤624。
在步骤624中,重置微码使微处理器100开始在x86ISAEDX:EAX寄存器指定的地址撷取ARM指令124。此流程结束于步骤624。
在步骤638中,重置微码将共享ISA状态506,如GPRs,初始化至ARMISA指定的预设数值。接下来进入步骤642。
在步骤642中,重置微码设定指令模式指针132与环境模式指针136以指示ARMISA。接下来进入步骤644。
在步骤644中,重置微码使微处理器100开始在ARMISA指定的重置向量地址撷取ARM指令124。此ARMISA定义两个重置向量地址,并可由一输入来选择。在一实施例中,微处理器100包含一外部输入,以在两个ARMISA定义的重置向量地址间进行选择。在另一实施例中,微码234包含在两个ARMISA定义的重置向量地址间的一预设选择,此预设选则可通过熔断熔丝以及/或是微码修补来修改。接下来进入步骤646。
在步骤646中,ARM系统软件设定微处理器100来使用特定指令,如ARMISAMCR与MRC指令124。接下来进入步骤648。
在步骤648中,ARM系统软件执行一重置至x86的指令124,来使微处理器100重置并以一x86处理器的状态离开重置程序。然而,因为ARM特定状态502以及非ISA特定配置状态不会因为重置至x86的指令126而改变,此方式有利于使ARM系统固件执行微处理器100的初步设定并使微处理器100随后以x86处理器的状态重开机,而同时还能使由ARM系统软件执行的微处理器100的非x86配置配置维持完好。藉此,此方法能够使用“小型的”微开机码来执行x86操作系统的开机程序,而不需要使用微开机码来解决如何配置微处理器100的复杂问题。在一实施例中,此重置至x86指令是一ARMMRC/MRCC指令至一新的实作定义协同处理器寄存器。接下来进入步骤652。
在步骤652中,简单指令转译器204进入陷阱至重置微码,以响应复杂重置至x86指令124。重置微码使x86特定状态504初始化至x86ISA所指定的预设数值。不过,重置微码并不修改微处理器100的非ISA特定状态,此处理有利于保存步骤646所执行的配置设定。此外,重置微码使共享ISA状态506初始化至x86ISA所指定的预设数值。最后,重置微码设定指令模式指针132与环境模式指针136以指示x86ISA。接下来进入步骤654。
在步骤654中,重置微码使微处理器100开始在ARMISAR1:R0寄存器所指定的地址撷取x86指令124。此流程终止于步骤654。
请参照图7,图中是以一方块图说明本发明的一双核心微处理器700。此双核心微处理器700包含两个处理核心100,各个核心100包含图1微处理器100所具有的元件,藉此,各个核心均可执行x86ISA与ARMISA机器语言程序。这些核心100可被设定为两个核心100都执行x86ISA程序、两个核心100都执行ARMISA程序、或是一个核心100执行x86ISA程序而另一个核心100则是执行ARMISA程序。在微处理器700的操作过程中,前述三种设定方式可混合且动态改变。如图6A及图6B的说明内容所述,各个核心100对于其指令模式指针132与环境模式指针136均具有一预设数值,此预设数值可利用熔丝或微码修补修改,藉此,各个核心100可以独立地通过重置改变为x86或是ARM处理器。虽然图7的实施例仅具有二个核心100,在其它实施例中,微处理器700可具有多于二个核心100,而各个核心均可执行x86ISA与ARMISA机器语言程序。
请参照图8,图中是以一方块图说明本发明另一实施例的可执行x86ISA与ARMISA机器语言程序的微处理器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或是ARMISA机器语言程序时,硬件指令转译器104不需要在每次执行x86或ARMISA指令124时都执行硬件转译,亦即当实行微指令126已经存在于微指令快取892,就不需要执行硬件转译。
在此所述的微处理器的实施例的优点在于,其通过内建的硬件指令转译器来将x86ISA与ARMISA指令转译为微指令集的微指令,而能执行x86ISA与ARMISA机器语言程序,此微指令集不同于x86ISA与ARMISA指令集,且微指令可利用微处理器的共享的执行管线来执行以提供实行微指令。在此所述的微处理器的实施例的优点在于,通过协同利用大量与ISA无关的执行管线来执行由x86ISA与ARMISA指令硬件转译来的微指令,微处理器的设计与制造所需的资源会少于两个独立设计制造的微处理器(亦即一个能够执行x86ISA机器语言程序,一个能够执行ARMISA机器语言程序)所需的资源。此外,这些微处理器的实施例中,尤其是那些使用超纯量非循序执行管线的微处理器,具有潜力能提供相较于既有ARMISA处理器更高的效能。此外,这些微处理器的实施例,相较于采用软件转译器的系统,亦在x86与ARM的执行上可更具潜力地提供更高的效能。最后,由于微处理器可执行x86ISA与ARMISA机器语言程序,此微处理器有利于建构一个能够高效能地同时执行x86与ARM机器语言程序的系统。
条件算数与逻辑单元(CONDITIONALALU)指令
对微处理器而言,在指令集中内含让指令被条件执行的功能是令人想要的。条件执行指令的意思就是,指令会指定一条件(如零、或负、或大于),如果满足条件旗标,此条件就会由微处理器执行,如果不满足条件旗标,条件就不会执行。如前述,ARMISA不仅只提供此功能至分支指令,还提供至其指令集中的大部分的指令中。被条件执行的指令会指定来自通用寄存器的来源操作数,以产生一结果写入通用目地寄存器。专利权人为ARMLimited,ofCambridge,GreatBritain的美国第7,647,480号专利案即描述一处理条件指令的数据处理装置。一般而言,一管线处理单元执行一条件指令以产生一结果数据数值。此结果数据数值在条件满足时显示条件指令指定的计算的结果,而在条件不满足时显示储存于目的寄存器的现今数据数值。两个可能的解决方案是描述于下列段落。
在第一个解决方案中,指令集内的各个条件指令被限制为,该指令条件所指定的寄存器是同时为来源寄存器以及目的寄存器。使用此方式,条件指令只会占据寄存器文件的两个读出端口,即提供现今目的寄存器数值作为一来源操作数,以及提供其它来源操作数。因此,此第一个解决方案可进一步降低支持管线处理单元执行条件指令所需的最低限度的寄存器文件读出端口数量。
第二个解决方案移除第一个解决方案中对于条件指令的限制,藉此,条件指令可以指定独立的目的寄存器与来源寄存器。第二个解决方案需要使用寄存器文件一个额外的读出端口,以在单一周期内能读取条件指令所需的操作数数据数值(即来自寄存器文件的来源操作数与目的操作数)。因为第二个解决方案不仅需要为额外的读出端口付出成本,还需要较大数量的位来指定条件指令与更为复杂的数据路径,美国专利第7,647,480号专利案是选择第一个解决方案为其标的。具体来说,此数据路径需要为来自寄存器文件的三个输入路径提供逻辑处理,并且还可能需要导向逻辑以耦接至此三个路径中的任何一个。
在此提出的实施例的优点在于,其能使条件指令指定不同于目的寄存器的来源操作数寄存器,并且不需要在寄存器文件使用一个额外的读出端口。一般而言,依据本发明的实施例,图1微处理器100的硬件指令转译器104将一条件执行ISA指令124转译为由一个或多个微指令126构成的序列,以供执行管线112执行。执行此序列的最后一个微指令126的执行单元424接收到由条件指令124指定的目的寄存器的原本数值,以确认条件是否满足。前一个微指令126,或是最后一个微指令126本身,会对来源操作数执行一操作以产生一结果。若是条件不满足,执行此序列的最后一个微指令126的执行单元424会将此原本数值写回目的寄存器,而非将结果数值写入目的寄存器。
在本发明的实施例中,条件ALU指令是一ISA指令124指示微处理器100对一个以上的来源操作数去执行一算数或逻辑操作,以产生一结果并将此结果写入一目的寄存器。其它种类的条件指令124亦可能被微处理器100的ISA指令集所支持,例如条件分支指令124或是条件加载/储存指令124,这些指令有别于条件ALU指令124。
由硬件指令转译器104响应遭遇到的条件ALU指令124所送出序列中的微指令126的数量与类型,是由两个特点所定性。第一个特点是,条件ALU指令124是否指定来源操作数之一是被施以预移位操作。在一实施例中,预移位操作举例来说是包含ARM架构参考手册第A8-10页至A8-12页描述的操作。若是条件ALU指令124指定一预移位操作,硬件指令转译器104产生一移位微指令126(在图10起标示为SHF)作为序列中的第一个微指令126。此移位微指令126执行此预移位操作以产生一移位结果写入一暂时寄存器(temporaryregister),以提供予序列中后续微指令126之使用。第二个特点是,是否由条件ALU指令124指定的目的寄存器亦是这些来源操作数寄存器的其中之一。若是,硬件指令转译器104进行一优化程序来将条件ALU指令124转译为一个相较于未指定目的寄存器为来源操作数寄存器其中之一的条件ALU指令124所产生者,少一个的微指令126的数量。此程序主要是描述于图21至28。
此外,条件ALU指令124指定一个架构条件旗标必须满足的条件,使微处理器100能执行此条件ALU指令124。此条件ALU指令124会指定架构条件旗标需以ALU操作的结果以及/或一预移位产生的进位旗标(carryflag)进行更新。然而,若是条件不被满足,架构条件旗标就不会被更新。达成此操作相当复杂,因为硬件指令转译器104需将条件ALU指令124转译为由多个微指令126构成的序列。具体来说,若是条件被满足,至少一个微指令126必须写入此新的条件旗标数值;然而,条件旗标的旧数值可能被位于序列的微指令126用来确认是否条件ALU指令124所指定的条件被满足,以及/或去执行ALU操作。这些实施例的优点在于,微处理器100运用技巧以确保在条件不被满足时就不更新条件旗标,且在条件被满足时才以正确的数值来更新旗标,这包含利用预移位进位旗标值进行更新。
在本发明的微处理器100的实施例中,如图1所示,用以保持通用寄存器的寄存器文件106,所具有的读出端口仅足够供寄存器文件106提供至多二个来源操作数至执行微指令的执行单元424以实现条件ALU指令124。如前揭对应于图1的说明内容,本发明的微处理器100的实施例是针对一商用微处理器进行改良。用以保持此商用微处理器的通用寄存器的寄存器文件具有的读出端口仅足够供寄存器文件提供至多二个来源操作数至执行单元,执行单元执行此处所称的微指令126以实现条件ALU指令124。因此,本文所述的实施例特别有利于搭配运用在此商用微处理器的微架构中。如前揭对应于图1的说明内容,此商用微处理器原本是设计为x86ISA,关于指令的条件执行并不是其中的关键特征,因为此处理器是基于累加器,而通常需要一个来源操作数作为目的操作数,因此,此处理器看来并不需要此额外的读出端口。
在此所述的实施例的一个优点在于,虽然在一些例子中,关联于由条件ALU指令124所转译的两个微指令的执行会有两时钟周期的执行延迟,而在一些事例中,关联于由条件ALU指令124所转译的两个微指令的执行会有三个时钟周期的执行延迟,但各个微指令所执行的操作是相对简单的,而使管线化架构的实作能够支持相对较高的核心时钟频率。
虽然在此所述的实施例中,微处理器100能够执行ARMISA与x86ISA指令,不过本发明并不限于此。本发明的实施例亦可适用于微处理器仅执行单一个ISA指令的情形。此外,虽然在此所述的实施例中,微处理器100将ARMISA条件ALU指令转译为微指令126,不过此实施例亦可适用于,微处理器执行一个不同于ARM的ISA指令,而同样在其指令集中包含条件ALU指令的情形。
请参照图9,图中是以一方块图进一步详述图1的微处理器100。此微处理器100在图1的寄存器文件106内包含一架构条件旗标寄存器926,此微处理器100并包含图4的执行单元424与重排缓冲器422。条件旗标寄存器926储存架构条件旗标。在一实施例中,当指令模式指针132指示为ARMISA,条件旗标寄存器926依据ARMISA条件旗标的语意储存数值,而当指令模式指针132指示为x86ISA,条件旗标寄存器926则是依据x86ISA条件旗标,即x86EFLAGS,的语意储存数值。如前文对应于图5的说明内容所述,寄存器文件106以由寄存器构成的独立的物理区块来实现效果较佳;特别是,举例来说,条件旗标寄存器926可以是一个不同于通用寄存器的寄存器文件的实体寄存器文件。因此,即使如下述,条件旗标被提供至执行单元424以执行微指令126,条件旗标寄存器文件的读出端口可以是不同于通用寄存器文件的读出端口。
条件旗标寄存器926输出其条件旗标数值至一个三输入端多工器922的一数据输入端。此多工器922的一第二数据输入端亦由重排缓冲器422的适当项目(entry)接收条件旗标结果。此多工器922的一第三数据输入端亦由一旗标总线928接收条件旗标结果。此多工器922选择适当的数据输入端的输入,作为其输出924提供至执行单元424以执行微指令126读取条件旗标。此过程在后续段落会有更清楚的描述。虽然本实施例仅描述单一个旗标总线928,不过,依据本发明的一实施例,各个能够产生条件旗标的执行单元424都具有其自己的旗标总线928,而各个能够读取条件旗标的执行单元424都具有其自己的条件旗标输入端924。因此,各个不同的执行单元424能够同时执行不同的微指令126来读取与/或写入条件旗标。
旗标总线928是图1的结果总线128的一部分,用以传送由执行单元424输出的条件旗标结果。条件旗标结果是写入重排缓冲器422,更精确来说,是写入重排缓冲器422内配置给由执行单元424执行的微指令126的项目,而执行单元424执行的结果被传送至旗标总线928。条件旗标结果同时被旗标总线928传送至多工器922的第三数据输入端。
图9亦以方块图显示由执行单元424输出于条件总线928上的条件旗标数值,以及执行单元424由多工器922接收的条件旗标数值924。条件旗标数值928/924包含ISA条件旗标902、一条件满足(SAT)位904、一预移位进位(PSC)位906、以及一使用移位进位(USE)位908。当指令模式指针132指示为ARMISA,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以及ARMISA进位旗标、零旗标、溢位旗标、与负旗标/符号旗标。
各个微指令126除了其基本操作(如加、载入/储存、移位、布尔运算的及、分支)外,还指示微指令126是否执行下述三个额外操作中的一个或更多,这些操作即(1)读取条件旗标926(在图10以下的图示中标示为RDFLAGS),(2)写入条件旗标926(在图10以下的图示中标示为WRFLAGS),以及(3)产生一进位旗标数值并将其写入至条件旗标926(在图10以下的图示中标示为WRCARRY)的PSC位906。在一实施例中,微指令126包含相对应的位以指示此三个额外的操作。在另一实施例中,微指令126通过微指令126的操作码指示此三个额外的操作;亦即,依据不同微指令126类型所具有的不同的操作码,搭配这些微指令类型能够执行的操作,来指示此三个额外的操作。
若是一执行单元424执行一条件ALU微指令126(在图10以下的图示中,标示为ALUOPCC,CUALUOPCC,NCUALUOPCC)指示其写入条件旗标926(标示为WRFLAGS)而由执行单元424读取的条件旗标924满足微指令126所指定的条件,此执行单元424随后就会将SAT位904设定位一;否则,执行单元424就会将SAT位904清除为零。进一步说明,若是执行单元424执行的任何微指令126指示其去写入条件旗标926并且此微指令126并非一条件ALU微指令126,执行单元424随后就会将SAT位904清除为零。部分条件微指令126是依据ISA条件旗标902(在图10以下的图示中标示为XMOVCC)来指定条件,而部分条件微指令126是依据SAT位904(在图10以下的图示中标示为CMOV)来指定条件,这在下列段落会有进一步的说明。
若是一执行单元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内的一个指针。
请参照图10(包括图10A和图10B),图中是以流程图说明本发明图1的硬件指令转译器104转译条件ALU指令124的操作的实施例。基本上,图10A和图10B是描述硬件指令转译器104对条件ALU指令124解码以确认其类型,以将其转译至适当的微指令126序列供执行管线112执行的方式。具体来说,硬件指令转译器104确认条件ALU指令124是否更新架构条件旗标902、是否对一来源操作数执行一预移位操作、是否使用进位旗标作为ALU操作的一输入、以及ALU操作是一进位更新或是非进位更新的操作。此操作在下述进一步说明时,将标示该ALU操作仅更新架构条件旗标902的一子集或是更新全部的架构条件旗标902。此流程始于步骤1002。
在步骤1002,硬件指令转译器104遇到一条件ALU指令124,对其解码,并将其转译为适当的微指令126序列,如步骤1024、1026、1034、1036、1044、1054与1056所述。条件ALU指令124指示微处理器100在一个或多个来源操作数执行一算术或逻辑操作以产生一结果,并将此结果写入目的寄存器。由条件ALU指令124所指定的ALU操作的部分类型是使用架构进位旗标902作为输入(如加入进位(addwithcarry)),虽然大多数的类型并不这样做。条件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是ARMISA指令。具体来说,在一实施例中,如图10所示,ARMISA数据处理指令与乘法指令是由硬件指令转译器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中,为说明起见,相关类型的ARMISA条件ALU指令124是显示于第一行,硬件指令转译器104转译条件ALU指令124所产生的微指令126是显示于后续行。下标“CC”显示此指令124是一条件指令。此外,ALU操作的类型是以所指定的来源与目的操作数为例。程序设计者可将一目的寄存器指定为提供一来源操作数的寄存器为同一者;在此情况下,硬件指令转译器104被配置来利用此情况且优化微指令126序列以利于条件ALU指令124的转译。此特征是描述于图21。接下来进入步骤1004。
在步骤1004中,硬件指令转译器104确认条件ALU指令124是否将架构条件旗标902指定为需要由条件ALU指令124进行更新。也就是说,在一些情况下,程序设计者可选择依据ALU操作的结果来更新架构条件旗标902的条件ALU指令124的版本,而在其它情况下,程序设计者可选择无论ALU操作的结果为何,都不更新架构条件旗标902的条件ALU指令124的方式。在ARMISA汇编语言中,指令下标“S”是指示架构条件旗标902是要被更新的,在图10以下的图示是采用此习惯用法。举例来说,步骤1044将ARMISA条件ALU指令124标示为“ALUOPS”以表示架构条件旗标902是要被更新的,而步骤1024将ARMISA条件ALU指令124标示为“ALUOP”(亦即,差异在于“S”)则表示架构条件旗标902不要被更新。若条件ALU指令124将架构条件旗标902指定为要更新,流程就会前进至步骤1042;否则就会前进至步骤1012。
在步骤1012中,硬件指令转译器104确认条件ALU指令124的种类是否会对于ALU操作操作数的其中一者指定一预移位操作。此预移位操作可以由一立即字段进行以产生一常数来源操作数,或是此预移位操作可以由来自由寄存器提供的一来源操作数而进行。此预移位操作的数量可以指定为条件ALU指令124内的一常数。此外,在使用寄存器移位操作数的情况下,预移位操作数量可以由寄存器内的数值所指定。在ARMISA的情况下,将一立即数值依据一立即移位量所进行一预移位操作而产生一常数来源操作数将视为一修改后的立即常数。预移位操作产生一进位旗标数值。对于某些类型的ALU操作而言,架构进位旗标902是以由移位操作所产生的进位旗标数值进行更新,不过对于一些类型的ALU操作而言,架构进位旗标902是以由ALU操作产生的进位旗标数值来进行更新。然而,由预移位操作产生的进位旗标数值并不被用来确认条件ALU指令124所指定的条件是否被满足,更明确地说,所使用的昃当前的架构进位旗标902。值得注意的是,ARMISAMUL、ASR、LSL、LSR、ROR、与RRX指令并不能指定一预移位操作,其处理过程会在步骤1024、1026或1044进行描述。此外,在MOV与MVN指令指定一修改后的立即常数(modifiedimmediateconstant)操作数的情形可指定一预移位操作,不过在MOV与MVN指令并不指定一修改后的立即常数操作数(即指定一寄存器操作数)的情形下,就不会指定一预移位操作,其处理过程会在步骤1024、1026或1044进行描述。如前述,此预移位操作可由一立即字段进行以产生一常数来源操作数,或者此预移位操作可由寄存器提供的一来源操作数而进行。若是条件ALU指令124指定一预移位操作,流程会前进至步骤1032;否则流程就会前进至步骤1022。
在步骤1022中,硬件指令转译器104确认条件ALU指令124是否指定一使用进位旗标的ALU操作。使用进位旗标的ARMISA指令124,举例来说,包括带进位加法(addwithcarry,ADC)、反向带进位减法(reversesubtractwithcarry,RSC)、以及带进位减法(subtractwithcarry,SBC)指令,以及指定一移位寄存器操作数且使用进位旗标以进行移位操作的指令,也就是RRX移位类型的指令。若是条件ALU指令124指定使用进位旗标的ALU操作,则流程前进至步骤1026;反之则前进至步骤1024。
在步骤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的导向结果总线(forwardingresultbus)、重排缓冲器422、或是架构寄存器文件106接收。对旗标而言,如关于图9的叙述,旧的或是当前的数值是由导向总线(forwardingflagbus)928、重排缓冲器422、或是架构条件旗标寄存器926所接收。此流程终止于步骤1024。
在步骤1026中,硬件指令转译器104将非旗标更新、非预移位(non-pre-shifting)、使用进位的条件ALU指令124转译为第一与第二微指令126,即(1)一使用进位ALU操作微指令126(标示为ALUOPUC);以及(2)一条件移动微指令126(标示为XMOV)。在步骤1026的一实例中,条件ALU指令124是类似于步骤1024所描述者,除了所指定的ALU操作是使用进位旗标。这两个微指令126亦类似于步骤1024所描述者;不过,ALUOPUC微指令126亦接收条件旗标924以获得进位旗标的当前数值,并应用于使用进位ALU操作中。微指令126的执行是详述于图19。此流程终止于步骤1026。
在步骤1032中,硬件指令转译器104确认条件ALU指令124是否指定一ALU操作以使用进位旗标。若是ALU操作使用进位旗标,流程会进行至步骤1036;反之则前进至步骤1034。
在步骤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的列表可特定为,包含但不限于,逻辑左移(logicalshiftleft,LSL)、逻辑右移(logicalshiftright,LSR)、算术左移(arithmeticshiftright,ASR)、右转(rotateright,ROR)、以及扩展右转(rotaterightwithextend,RRX)。在一实施例中,硬件指令转译器104输出一移位微指令126以确保移位数值是依据ARMISA的语意所产生,举例来说,尤其是指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。
在步骤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。
在步骤1042,硬件指令转译器104确认条件ALU指令124的类型是否对ALU操作操作数其中之一指定一预移位。若是条件ALU指令124指定一预移位,流程会前进到步骤1052;否则,流程会前进到步骤1044。
在步骤1044中,硬件指令转译器104将旗标更新、非预移位的条件ALU指令124转译为第一与第二微指令126,亦即:(1)一条件ALU操作微指令126(标示为ALUOPCC);以及(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。
在步骤1052中,硬件指令转译器104确认条件ALU指令124是否指定一属于会更新架构进位旗标902的类型的ALU操作。对于硬件指令转译器104而言,区分是否会更新架构进位旗标902是必要的,因为若是ALU操作不更新架构进位旗标902,预移位操作所产生的进位旗标数值,而非基于ALU操作所产生的条件旗标数值,就必须被用于更新架构进位旗标902。在一实施例中,指定一不更新架构进位旗标902的ALU操作,但指定一预移位操作的ARMISA指令124,包含但不限于AND、BIC、EOR、ORN、ORR、TEQ与TST,以及MOV/MVN指令124,这些指还通过一非零旋转数值(non-zerorotationvalue)指定一调整过的立即常数。若是ALU操作更新此架构进位旗标902,此流程会前进至步骤1054;反之则前进至步骤1056。
在步骤1054中,硬件指令转译器104将旗标更新、预移位、进位使用的条件ALU指令124转译为第一、第二与第三微指令126,亦即:(1)一移位微指令126;(2)一条件进位更新ALU操作微指令126(标示为CUALUOPCC);以及(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。
在步骤1056中,硬件指令转译器104将旗标更新、预移位、非进位更新的条件ALU指令124转译为第一、第二与第三微指令126,亦即(1)一移位微指令126;(2)一条件非进位更新ALU操作微指令126(标示为NCUALUOPCC);以及(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。
在一实施例中,硬件指令转译器104被配置来产生且提供一调整过的立即常数而非输出一移位微指令126来进行此操作。在此实施例中,处理程序是类似于步骤1024、1026与1044所描述者,而非步骤1034、1036与1054/1056。此外,在此实施例中,硬件指令转译器104亦产生且由预移位操作提供进位旗标数值供条件ALU操作微指令126用于更新架构进位旗标902。
请参照图11,图中是以一流程图显示本发明图4执行单元424执行一移位微指令126的操作。此流程始于步骤1102。
在步骤1102中,图4的执行单元424中的一者接收到一移位微指令126,例如在图10所描述且由硬件指令转译器104响应遭遇到条件ALU指令124而产生的微指令。此执行单元424亦接收由微指令126所指定的来源操作数,包含条件旗标数值924,这些条件旗标数值924可能被或不被微指令126所使用。接下来进行至步骤1104。
在步骤1104中,执行单元424执行由移位微指令126所指定的移位操作,此移位操作是执行于由移位微指令126所指定的操作数上以产生一结果,并将此结果输出至结果总线128。在一实施例中,此移位操作可包括但不限于一逻辑向左(LSL)、逻辑向右(LSR)、算术向右(ASR)、右转(ROR)、以及扩展右转(RRX)。此外,此执行单元424基于移位操作的结果产生新的条件旗标数值。具体来说,执行单元424基于移位操作的结果产生一进位旗标数值。在一实施例中,在逻辑向左(LSL)移位操作的情况下,进位旗标数值为一扩展数值(extendedvalue)的第N个位,此扩展数值为M个最低有效位零串连左移后的操作数(Mleastsignificantbitzeroesconcatenatedwiththeoperandbeingleft-shifted),其中N是原始操作数的位数量,M是所指定的正移位量;在逻辑向右(LSR)移位操作的情况下,进位旗标数值是一扩展数值的第(M-1)个位,而此扩展数值是原始操作数零扩展(M+N)个位,其中M是特定正移位量,N是原始操作数的位数;在算数向右(ASR)移位操作的情况下,进位旗标数值是一扩展数值的第(M-1)个位,此扩展数值是原始操作数符号扩展(sign-extended)(M+N)个位,其中M是特定正移位量,N是原始操作数的位数;在右转(ROR)移位操作的情况下,进位旗标数值是操作数右转后的结果的第(N-1)个位,此操作数是依据特定非零移位量(specifiednon-zeroshiftamount)模(mod)N进行右转,其中N是原始操作数的位数;在扩展向右(RRX)移位操作的情况下,进位旗标数值是原始操作数的位零。接下来进行至步骤1106。
在步骤1106中,执行单元424确认由硬件指令转译器104输出的移位微指令126是否指示执行单元424应写入进位旗标,如同图10B的步骤1056中的指令WRCARRY。具体来说,此移位微指令126指示位于旗标总线928输出的PSC位906应写入由移位操作产生的进位旗标数值写入,而USE位908应被设定,以使随后的条件非进位更新ALU操作微指令126生效以有条件地将PSC位906数值写入架构进位旗标902。若是执行单元424应该写入进位旗标,流程会前进至步骤1114;否则,流程就会前进至步骤1108。
在步骤1108中,执行单元424确认由硬件指令转译器104输出的移位微指令126是否指示执行单元424应写入条件旗标(标示为WRFLAGS)。虽然在移位微指令126未指示应写入PSC位906(标示为WRCARRY)的情况下,图10中没有任何一个移位微指令指示执行单元424应写入条件旗标,但硬件指令转译器104在转译其它ISA指令124时还是会产生此一移位微指令126。若是执行单元424应写入条件旗标,流程会前进到步骤1112;否则就会终止。
在步骤1112,执行单元424输出数值到旗标总线928上来将PSC位906、USE位908、与SAT位904清除为零,并且将步骤1104所产生的新的架构条件旗标902数值写入架构条件旗标902。此流程终止于步骤1114。
在步骤1114,执行单元424输出数值到旗标总线928上以将步骤1112所产生的进位旗标数值写入PSC位906、设定USE位908为一,将SAT位904清除为零、并且以步骤1102所接收到的旧的架构条件旗标902写入数值架构条件旗标902。此流程终止于步骤1114。
请参照图12(包括图12A和图12B),图中显示一流程图描述本发明图4执行单元424执行一条件ALU微指令126的操作。此流程始于步骤1202。
在步骤1202中,图4执行单元424的其中一者接收到一条件ALU微指令126,如图10所述由硬件指令转译器104响应遇到的一条件ALU指令124所产生微指令126的情形。此执行单元424亦接收由微指令指定的来源操作数,包含条件旗标数值924,而不论其是否会被微指令126使用到。需了解的是,执行单元424也会依据类似于图12描述的处理程序,而排除其中步骤1209、1212、1214与1216的执行操作,来执行非条件ALU微指令126,此微指令可以是图10所述由硬件指令转译器104响应遇到一条件ALU指令124所产生的条件微指令。此外,执行条件ALU微指令126的执行单元424与执行相关移位微指令126以及/或XMOV/CMOV微指令126的执行单元424可以相同或是不同。接下来流程前进至步骤1204。
在步骤1204,执行单元424在对条件ALU微指令126所指定的操作数,执行由条件ALU微指令126指定的ALU操作,以产生一结果并将此结果输出至结果总线128。此外,执行单元424亦基于ALU操作的结果产生新的架构条件旗标902数值。若ALU操作使用进位旗标,执行单元424就使用所接收的架构进位旗标924的旧的数值,而非由ALU操作所产生的新的进位旗标数值。接下来流程前进至步骤1206。
在步骤1206中,执行单元424确认由步骤1202接收的架构条件旗标924是否满足此指定条件。此确认结果在后续步骤1212与1214中会被使用。接下来流程前进至步骤1208。
在步骤1208中,执行单元424确认条件ALU微指令126是否指示执行单元424写入条件旗标寄存器926,如同图10A及图10B许多步骤中的指令WRFLAGS。若是,流程前进至步骤1214;否则,流程前进至步骤1209。
在步骤1209中,若是步骤1206确认结果为条件满足,流程前进至步骤1211;否则,流程前进至步骤1212。
在步骤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。
在步骤1212中,执行单元424输出第一来源操作数至结果总线128。值得注意的是,在条件不被满足时,图10A及图10B所描述的多种条件ALU微指令126并不使用此输出第一来源操作数的操作。具体来说,图10A及图10B的XMOV与CMOV微指令126会写回旧的目的寄存器数值而非暂时寄存器T2的数值。然而,在图21A及图21B及其后续图示的说明中,对于其它格式的条件ALU指令124的转译而言,即相同来源目的(same-source-destination)条件ALU指令124(或是其它ISA指令124),硬件指令转译器104于产生条件ALU微指令126时,其中第一来源操作数也是ISA指令124指定的目的寄存器,藉以在条件不被满足时写回原本的目的寄存器的数值。如步骤1211所述,条件ALU微指令126并不更新条件旗标寄存器926因为条件ALU微指令126是指定为不去更新架构条件旗标902。此流程终止于步骤1212。
在步骤1214中,若是步骤1206确认条件被满足,流程会前进至步骤1218;否则,流程会前进至步骤1216。
在步骤1216中,执行单元424输出第一来源操作数,清除USE位908、PSC位906、与SAT位904为零,以及输出由步骤1202接收的旧的架构条件旗标924数值至旗标总线928,以能够在不调整架构条件旗标902的数值的情况下,将条件ALU指令124整体视为一不操作指令来执行(亦即不去执行条件ALU指令124)。此流程终止于步骤1216。
在步骤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、与RRXARMISA指令124所指定的操作。若是ALU操作是进位更新操作,流程前进至步骤1222;否则流程前进至步骤1224。
在步骤1222,执行单元424输出步骤1204产生的结果,清除USE位908与PSC位906为零,设定SAT位904为一,以及输出步骤1204产生的新的架构条件旗标数值至旗标总线928。值得注意的是,不更新溢位旗标但指定一进位更新ALU操作(如ASR、LSL、LSR、ROR、与RRX操作)的条件ALU微指令126的处理过程与步骤1222所描述者有些许不同。尤其是,执行单元424输出旧的V旗标数值而非新的V旗标数值。此流程终止于步骤1222。
在步骤1224,执行单元424检验USE位908。若USE位908被设定为一,流程会前进至步骤1228;否则,流程就会前进至步骤1226。在另一实施例中,如上文/下文所述,USE位908并不存在,而执行单元424则是检测条件ALU微指令126内的指针,以确认是否以PSC位906内的预移位进位旗标数值来更新架构进位旗标902,还是使用旧的进位旗标数值924。
在步骤1226中,执行单元424输出步骤1205产生的结果、清除USE位908与PSC位906为零、设定SAT位904为一,以及以下列方式输出架构条件旗标至旗标总线928:C旗标与V旗标是写入以步骤1202所接收的旧的C旗标与V旗标数值;N旗标与Z旗标是分别以步骤1204所产生的新的N旗标与Z旗标数值做写入。此流程终止于步骤1226。
在步骤1228中,执行单元424输出步骤1204产生的结果,清除USE位908与PSC位906为零,设定SAT位904为一,以及以下列方式输出架构条件旗标至旗标总线928:C旗标是以写入由步骤1202所接收的PSC位906的数值;V旗标写入由步骤1202所接收的旧的V旗标数值;N旗标与Z旗标分别写入步骤1204所接收的新的N旗标与Z旗标数值。此流程终止于步骤1228。
在一实施例中,输出于旗标总线928的数值会因为依据指令模式指针132指示为x86或ARM而有不同,因此,执行单元424会以不同方式执行条件ALU微指令126。具体来说,若是指令模式指针132指示为x86,执行单元424就不去区分ALU操作模式是进位更新或是非进位更新、不去考虑USE位908、以及利用x86语意来更新条件码旗标。
请参照图13,图中显示本发明图4执行单元424执行一条件移动微指令126的操作。此流程起始于步骤1302。
在步骤1302,图4执行单元424的其中一者接收到一条件移动微指令126,如图10所述由硬件指令转译器104响应遇到一条件ALU指令124所产生微指令(标示为CMOV或XMOV)的情形。此执行单元424亦接收微指令126所指定的来源操作数,包含条件旗标数值924,无论其是否会被微指令126所使用。接下来前进至步骤1304。
在步骤1304,执行单元424对微指令126进行解码以确认其是否为一个XMOV微指令126或是一个微指令126。如果是CMOV微指令126,流程前进至步骤1308;否则流程前进至步骤1306。
在步骤1306,执行单元424确认步骤1302接收到的架构条件旗标902并确认是否满足条件。接下来前进至步骤1312。
在步骤1308,执行单元424检验由步骤1302接收到的SAT位904并由其确认条件是否满足,如同一写入SAT位904的相对应条件ALU微指令126在之前所做的确认,如图10的步骤1044、1054、与1056所述。接下来流程前进至步骤1312。
在步骤1312,若是步骤1306或1308确认条件满足,流程就会前进至步骤1316;否则就会前进至步骤1314。
在步骤1314,执行单元424输出第一来源操作数的数值至结果总线128。在图10中,第一来源操作数的数值是旧的目的寄存器数值,以能够在条件不被满足且不变更目的寄存器的数值的情况下,有利于将条件ALU指令124整体视为一不操作指令(即不去执行条件ALU指令124)来执行。此流程终止于步骤1314。
在步骤1316中,执行单元424输出第二来源操作数的数值至结果总线128。如图10所示,此第二来源操作数的数值是由相关的条件ALU微指令126写入暂时寄存器的数值,以利于在预设条件满足的情况下,通过将结果写入目的寄存器,以协助条件ALU指令124的执行。此流程终止于步骤1316。
请参照图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可取得所有来源操作数的数值时(无论是从导向总线(forwardingbus)128、重排缓冲器(ROB)422、或是寄存器文件106),指令发送单元408确认一微指令126已完成由其保留站406发送至相对应执行单元以供执行的准备。此微指令126是依据图12(包括图12A及图12B)与图13的描述内容来执行。
执行单元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中标示为NOTSATISFIED),执行单元424依据图12B的步骤1216产生新的条件旗标928数值以写入条件旗标寄存器926;(2)若是架构条件旗标902满足指定的条件而ALU操作是非进位更新的操作(在图14中标示为NCUALUOPSAT),执行单元424依据图12的步骤1226产生新的条件旗标928数值以写入条件旗标寄存器926;并且(3)若是架构条件旗标902满足指定的条件并且ALU操作是进位更新的操作(在图14中标示为CUALUOPSAT),执行单元424依据图12的步骤1222产生新的条件旗标928数值以写入条件旗标寄存器926。暂时寄存器T2的数值与条件旗标928是提供于导向总线128供CMOV微指令126利用,在并非来自导向总线128的情况下写入重排缓冲器422的项目供CMOV微指令126利用,并且在并非来自导向总线128或重排缓冲器422的情况下,除了在例外事件出现、分支误预测、或是其它无效事件被CMOV的情形下是最终引退至适当的架构状态而被微指令126所利用。尤其是,图9的多工器922将操作而选择适当的条件旗标924提供给执行单元424。
执行单元424接收步骤1044的CMOV微指令126,暂时寄存器T2与目的寄存器(RD)的来源操作数数值,以及依据图13的步骤1302所产生的条件旗标924。依据图13的步骤1316与1314,当SAT位904被设定时,执行单元424输出暂时寄存器T2的来源操作数的数值,当SAT位904被清除时,执行单元424输出目的寄存器RD的来源操作数的数值。此结果数值是提供于导向总线128供后续微指令126所利用,并写入重排寄存器(ROB)422的项目,最后在除了例外事件出现、分支误预测、或是其它无效事件之外,被引退至其适当的架构状态而被微指令126所利用。
如步骤1222所述,旗标更新条件ALU指令124指定一进位更新ALU操作,但不更新溢位旗标,如ARMISAASR、LSL、LSR、ROR、与RRX指令124,这些指令124的处理程序与图14所示有些不同。尤其是,执行单元424输出旧的V旗标数值而非新的V旗标数值。最后,如前述,旗标更新ARMISAMUL以及MOV/MVN(寄存器)指令124均属非进位更新指令并且无法指定一预移位操作,因而是以步骤1044的程序处理。在图12B的步骤1226有更明确的说明。
在前文中可发现,ALU操作微指令126是通过SAT位904指示CMOV微指令126是否旧的条件旗标902满足指定条件,藉以使ALU操作微指令126替代条件旗标902的旧的数值,并在条件满足时,依据ALU操作的结果所产生的适当数值来进行处理。
请参照图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的描述来执行。
执行单元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。
执行单元424由保留站406接收步骤1056所产生的NCUALUOP微指令126、由寄存器文件106的寄存器R1与暂时寄存器T3接收来源操作数数值、以及依据步骤1202由条件旗标寄存器926接收条件旗标924。执行单元424在寄存器R1与暂时寄存器T3执行ALU操作(在ALU操作是一使用进位操作时,亦在接收到的C旗标902执行)以产生一结果,并依据步骤1204写入暂时寄存器T2。此外:(1)若是架构条件旗标902不满足指定条件(图15中标示为NOTSATISFIED),执行单元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做更新。
在前文中可发现,移位微指令126并不替代条件旗标902的旧的数值,而是将条件旗标902的旧的数值写回条件旗标寄存器926,因此,由移位微指令126接收条件旗标寄存器926的结果的条件ALU操作微指令126,可确认旧的条件旗标902是否满足由ISA条件ALU指令124所指定的条件。另一方面,若是移位微指令126是以新产生的进位旗标数值代替旧的进位旗标902,条件ALU操作微指令126将不会确认旧的条件旗标902是否满足指定条件。
请参照图16(包括图16A和图16B),图中是以一方块图说明本发明图1的执行管线112执行一条件ALU指令124的情形。具体来说,此条件ALU指令124是一旗标更新、预移位、进位更新条件ALU操作ISA指令124,硬件指令转译器104则是依据图10的步骤1054将此指令124转译为微指令126。图16的操作在许多面向是类似于图15的操作,相似部分在此不与赘述,而仅说明相异之处。图4的寄存器配置表402产生附属信息给移位微指令126写入的暂时寄存器T3的数值的CUALUOP微指令126,不过,由于移位微指令126并不写入条件旗标寄存器,此寄存器配置表并不产生其相关信息。
执行单元424由保留站406接收步骤1054所产生移位微指令126并依据步骤1102由寄存器文件106的寄存器R2与R3接收来源操作数数值,但不接收条件旗标924(除非ALU操作是一使用进位操作)。此执行单元424在寄存器R2与R3上进行移位操作(若是ALU操作是一使用进位操作,则在所接收到的C旗标902上进行)以产生一结果依据步骤1104写入暂时寄存器T3。暂时寄存器T3的数值被提供至导向总线128供CUALUOP微指令126利用、若非来自导向总线128,则是写入重排缓冲器422的项目供CUALUOP微指令126利用、以及若非来自导向总线128或重排缓冲器422,则是除了例外事件出现、分支误预测、或其它无效事件之外被引退至其适当的状态供CUALUOP微指令126利用。
执行单元424由保留站406接收步骤1054所产生的CUALUOP微指令126,由寄存器文件106的寄存器R1与缓冲寄存器T3接收来源操作数数值,以及由条件旗标寄存器926并依据步骤1202接收条件旗标924。执行单元424在寄存器R1与暂时寄存器T3执行ALU操作(若是ALU操作是一使用进位操作,则在所接收到的C旗标902执行)以产生一结果并依据步骤1204写入暂时寄存器T2。此外:(1)若是架构条件旗标902并不满足指定条件(在图16中标示为NOTSATISFIED),执行单元424依据步骤1216产生新的条件旗标928数值以写入条件旗标寄存器926;以及(2)若是架构条件旗标902满足指定条件(在图16中标示为SATISFIED),执行单元424依据图12的步骤1222产生新的条件旗标928数值以写入条件旗标寄存器926。图16的CMOV微指令126的执行是类似于图14所描述者。
请参照图17,图中是以一方块图显示本发明图1执行管线112执行一条件ALU指令124的操作。具体来说,此条件ALU指令124是一非旗标更新、预移位、使用进位条件ALU操作的ISA指令124,硬件指令转译器104将此指令转译为图10的步骤1036所述的微指令126。依据图17的操作在许多面向是相似于图16的操作,相似的操作在此不再赘述,以下仅列出相异处。图17的移位微指令126的执行是类似于图16所描述者。
执行单元424由保留站406接收步骤1036所产生的ALUOPUC微指令126、由寄存器文件106的寄存器R1与暂时寄存器T3接收来源操作数数值、以及依据步骤1202由条件旗标寄存器926接收条件旗标924。因为ALU操作是一使用进位操作,执行单元424在寄存器R1、暂时寄存器T3与接收到的C旗标902执行ALU操作,以产生一结果并依据步骤1204写入暂时寄存器T2。执行单元424并不写入条件旗标寄存器926。
执行单元424接收步骤1036所产生的XMOV微指令126、暂时寄存器T2与目的寄存器RD的来源操作数数值、以及依据图13的步骤1302所产生的条件旗标924。依据图13的步骤1316与1314,在条件旗标924满足预设条件时,执行单元424将暂时寄存器T2的来源操作数的数值作为其结果输出,而在条件旗标924不满足预设条件时,执行单元424将目的寄存器RD的来源操作数的数值作为其结果输出。此结果数值是提供至导向总线128供后续微指令126利用、此结果数值是写入重排缓冲器422的项目、并且除了例外事件出现、分支误预测、或是其它无效事件之外,此结果数值会引退至其适当的架构状态。
请参照图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的执行是类似于图17XMOV微指令126的执行。
请参照图19,图中是以一方块图说明本发明图1的执行管线112执行一条件ALU指令124。具体来说,此条件ALU指令124是一非旗标更新、非预移位、使用进位条件ALU操作的ISA指令124,而硬件指令转译器104将此指令124转译为图10步骤1026所述的微指令126。依据图19的操作在许多面向是类似于图17所述者,相似处在此不再赘述,而仅说明相异处。条件ALU指令124的转译是一非旗标更新、非预移位、使用进位条件ALU操作的ISA指令124,而不包含一移位微指令126。
执行单元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的执行。
请参照图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的执行。
在前文中可以发现,本发明所述的实施例可避免允许微指令126来指定一额外来源操作数所衍生出来的缺点。这些缺点包括,第一,对各个将利用额外的来源操作数执行微指令126的执行单元424,在通用寄存器文件需设置一额外的读出端口。第二,对各个将利用额外的来源操作数执行微指令126的执行单元424,在重排缓冲器422需设置一个额外的读出端口。第三,对各个将利用额外的来源操作数执行微指令126的执行单元424,在导向总线128上需使用更多的线路。第四,对各个将利用额外的来源操作数执行微指令126的执行单元424,需要一个额外相对较大的多工器。第五,需要使用Q个额外的标签(tag)比较器,其中:
Q=∑i=1ton,(R[i]*P[i]*J[i])
其中,n是执行单元424的数量,R[i]是保留站406提供给第[i]个执行单元424的项目的数量,P[i]是可由第[i]个执行单元424所执行微指令所能指定的来源操作数的最大数量,以及J[i]是能够前传至第[i]个执行单元424的执行单元424的数量。第六,对额外的来源操作数,在寄存器配置表402中需要额外的重命名查询操作。第七,需要扩展保留站406以处理额外的来源操作数。这些在速度、电力与空间付出的额外成本是不受欢迎的。
相同来源目的(SAME-SOURCE-DESTINATION)优化实施例
请参照图21(包括图21A和图21B),图中是以流程图说明本发明图1的硬件指令转译器104转译条件ALU指令124的操作。基本上,硬件指令转译器104依据图21所述的操作在许多面向是类似于依据图10所述的操作,尤其是对应于各种需要做出决定的步骤,因而在此对于这些步骤给予相同的编号。
请参照图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在序列的末端执行。此操作在下列段落会有更清楚的说明。
在步骤2124中,硬件指令转译器104将相同来源目的非旗标更新、非预移位、非进位使用的条件ALU指令124转译为单一个微指令126,即一条件ALU操作微指令126(标示为ALUOPCC)。在步骤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。
在步骤2126中,硬件指令转译器104将相同来源目的非旗标更新、非预移位、使用进位的条件ALU指令124转译为单一个微指令126,即一使用进位条件ALU操作微指令126(标示为ALUOPUCCC)。在步骤2126的实例中,此条件ALU指令124是类似于步骤2124所描述者,除了其所指定的ALU操作是使用进位旗标,并且此指令亦类似于步骤1026所描述者,除了第一源操作数是目的寄存器(RD)。条件ALUOPUC微指令126是类似于步骤2124所描述者;不过,其所指定的ALU操作是使用进位旗标。如图27的方块图所示的条件ALUOPUC微指令126的执行是类似于步骤2124的条件ALUOP微指令126的执行,除了执行单元424使用进位旗标来执行ALU操作。此流程终止于步骤2126。
在步骤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。
在步骤2136中,硬件指令转译器104将相同来源目的非旗标更新、预移位(pre-shifting)、使用进位的条件ALU指令124更新为第一与第二微指令126,即:(1)一移位微指令126;以及(2)一使用进位条件算数与逻辑单元ALUOP微指令126(标示为ALUOPUCCC)。在步骤2136的实例中,条件ALU指令124是类似于步骤2134所描述者,除了所指定的ALU操作是使用进位旗标,并且,此指令是类似于步骤1036所描述者,除了第一来源操作数是目的寄存器(RD)。这两个微指令126以及其执行是类似于步骤2134所描述者;不过,ALUOPUC微指令126亦接收条件旗标924以取得进位旗标当前的数值,以使用于进位使用ALU操作。移位微指令126与条件ALUOPUC微指令126的执行,如图25所示,是类似于步骤2134中的移位微指令126与条件ALUOP微指令126的执行,除了执行单元424使用进位旗标来执行ALU操作。此流程终止于步骤2136。
在步骤2144中,硬件指令转译器104将相同来源目的旗标更新、非预移位的条件ALU指令124转译为单一个微指令126,即一条件ALU操作微指令126(标示为ALUOPCC)。在步骤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。
在步骤2154,硬件指令转译器104将相同来源目的旗标更新、预移位、进位使用的条件ALU指令124转译为第一与第二微指令126,即(1)一移位微指令126;以及(2)一条件进位更新ALU操作微指令126(标示为CUALUOPCC)。在步骤2154的实例中,条件ALU指令124是类似于步骤2134所描述者,除了条件ALU指令124亦指定架构条件旗标902是要被更新的,并且是类似于步骤1054所描述者,除了第一来源操作数是目的寄存器。移位微指令126是类似于步骤1034所描述者,并且,执行单元424执行移位微指令126的方式是类似于图18的步骤1034所描述者。CUALUOP微指令126及其执行是类似于步骤2124的条件ALU微指令126,除了步骤2144的CUALUOP微指令126亦会更新架构条件旗标902,并且是类似于步骤1054的条件ALU微指令126,除了其第一操作数是目的寄存器而非寄存器R1,且其目的寄存器是目的寄存器而非暂时寄存器T2。执行CUALUOP微指令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。
在步骤2156中,硬件指令转译器104将相同来源目的旗标更新、预移位、非进位更新的条件ALU指令124转译为第一与第二微指令126,即:(1)一移位微指令126;以及(2)一条件非进位更新ALU操作微指令126(标示为NCUALUOPCC)。在步骤2156的实例中,条件ALU指令124是类似于步骤2154所描述者,除了条件ALU指令124是指定一非进位更新ALU操作,并且是类似于步骤1056所描述者,除了第一来源操作数是目的寄存器。因此,在条件满足时,架构进位旗标902是以此预移位进位旗标数值进行更新。移位微指令126是类似于步骤2134所描述者;不过,移位微指令126会读取以及写入条件旗标寄存器926。具体来说,执行移位微指令126的执行单元424是:(1)将预移位操作所产生的进位旗标数值写入PSC位906;(2)设定USE位908来指示条件NCU-ALUOP微指令126去利用PSC位906来更新架构进位旗标902;以及(3)依据步骤1114将旧的架构条件旗标902写回条件旗标寄存器926,藉此NCU-ALUOP微指令126可以评估架构条件旗标902的旧的数值来确认其是否满足指定条件。NCUALUOP微指令126与条件ALU指令124是指定相同的条件。执行NCU-ALUOP微指令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与NCU-ALUOP微指令126的执行是呈现于图23(包括第23A图和第23B图)。此流程终止于步骤2156。
此处理方式的优点在于,在条件ALU指令124指定目的寄存器与来源寄存器其中之一为同一者时,硬件指令转译器104可以进行优化且使所产生的微指令126序列减少一个微指令126。第一,其可增加微处理器100的前瞻(lookahead)功能以利用所欲执行的程序的指令层的平行处理来增加执行单元424的使用。因为微指令126数量减少意味着重排缓冲器422中供额外微指令126所用的自由槽(freeslot)将增加,于是能产生一较大的微指令126池(pool)以完成发布准备以供后续执行之用,因而可以提升此前瞻功能。第二,因为每一个时钟周期中,硬件指令转译器104只能输出微指令126至一预设数量的槽(slot),而至少在一实施例中,硬件指令转译器104必须在同一时钟周期内输出实施一给定ISA指令124所需的所有微指令126,因此减少一条件ALU指令124转译产生的微指令126数量,亦可减少每个周期内空的微指令126槽的平均数量,同时有助于增加微处理器100的前瞻功能与执行单元424的使用。
惟以上所述者,仅为本发明的较佳实施例而已,当不能以此限定本发明实施的范围,即大凡依本发明权利要求范围及发明说明内容所作的简单的等效变化与修饰,皆仍属本发明权利要求涵盖的范围内。另外本发明的任一实施例或权利要求范围不须达成本发明所揭露的全部目的或优点或特点。此外,摘要部分和标题仅是用来辅助专利文件搜寻之用,并非用来限制本发明的权利要求范围。
【相关申请案的参考文献】
本申请案是同在申请中美国专利正式申请案13/224,310(申请日为09/01/2011)的部分连续案,该案件整体皆纳入本案参考,且本案引用下列美国临时申请案的优先权,该些案件整体皆纳入本案参考:
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(申请日为09/21/2011)的优先权,该些案件整体皆纳入本案参考。
本申请案是以下美国正式专利申请案的相关案:
Claims (23)
1.一种微处理器,具有多个架构条件旗标且执行一架构指令,只有在该架构条件旗标满足该架构指令所指定的一条件,该架构指令指示该微处理器对第一与第二来源操作数执行一操作以产生一结果并将该结果写入一目的寄存器,该微处理器包括:
一硬件指令转译器,接收该架构指令并相对应地转译该架构指令为第一与第二微指令;
其中如果该架构指令指定架构条件旗标将要更新,则该第一微指令指示写入架构条件旗标并且该第二微指令具有第一类型;以及
其中如果该架构指令指定架构条件旗标不要更新,则该第一微指令指示不写入架构条件旗标并且该第二微指令具有第二类型;以及
一执行管线,执行从该硬件指令转译器所接收到的该些微指令;
其中,响应于该第一微指令,该执行管线:
对该些来源操作数执行该操作以产生该结果和非架构指针以及基于该结果的架构条件旗标的新的值,其中如果该第一微指令指示写入架构条件旗标并且由该执行管线读取的架构条件旗标满足该条件,则该执行管线产生该非架构指针的真值,否则产生该非架构指针的假值;
其中,响应于该第二微指令,该执行管线:
在该第二微指令具有第一类型时基于该非架构指针确定是否满足该条件,并且在该第二微指令具有第二类型时基于架构条件旗标的新的值确定是否满足该条件;
在满足该条件的情况下,将由该第一微指令所产生的该结果写入该目的寄存器;以及
在不满足该条件的情况下,将该目的寄存器当前的值写入该目的寄存器。
2.根据权利要求1所述的微处理器,还包括:
一寄存器文件,将该些来源操作数提供给该执行管线以执行该些微指令,其中该寄存器文件被设定为,可同时为该些微指令提供至多二个来源操作数;
其中,该架构指令指定该目的寄存器与该寄存器文件中提供该第一与第二来源操作数的寄存器,是该寄存器文件中的不同的寄存器。
3.根据权利要求1所述的微处理器,还包括:
一寄存器,其包括用于架构条件旗标的储存空间;并且,其中,响应于该第一微指令,如果该第一微指令指示写入架构条件旗标,则该执行管线进一步:
在满足该条件时,将由该第一微指令所产生的该架构条件旗标结果的新的值写入该寄存器;以及
在不满足该条件的情况下,将该寄存器的当前值写入该寄存器。
4.根据权利要求1所述的微处理器,还包括:
其中,响应于该第一微指令,该执行管线进一步产生第二指针,其指示该第二微指令是否将利用基于该结果产生的进位旗标值或利用通过之前的移位微指令产生的进位旗标值来更新架构条件旗标的进位旗标。
5.根据权利要求1所述的微处理器,还包括:
一寄存器,具有储存空间以储存该些架构条件旗标以及该非架构指针。
6.根据权利要求5所述的微处理器,其中该寄存器是被该微处理器的一重命名单元重命名。
7.根据权利要求1所述的微处理器,其中该架构指令是一ARMISA指令集架构条件执行指令。
8.一种微处理器,具有多个架构条件旗标,其中该微处理器执行一架构指令,该架构指令指示该微处理器对一第一来源操作数执行一移位操作以产生一第一结果,对该第一结果与一第二来源操作数执行一第二操作以产生一第二结果,并且只在该些架构条件旗标满足该架构指令指定的一条件下,将该第二结果写入一目的寄存器,该微处理器包括:
一硬件指令转译器,接收该架构指令并对应地转译该架构指令为至少第一与第二微指令;以及
一执行管线,执行从该硬件指令转译器接收的该些微指令;
其中,响应于该第一微指令,该执行管线:
对该第一来源操作数执行该移位操作以产生该第一结果;
其中,响应于该第二微指令,该执行管线:
在该些架构条件旗标满足该条件的情况下,将该第二结果写入该目的寄存器;以及
在该些架构条件旗标不满足该条件的情况下,将该目的寄存器当前的值写入该目的寄存器。
9.根据权利要求8所述的微处理器,还包括:
一寄存器文件,将该些来源操作数提供给该执行管线以执行该些微指令,其中该寄存器文件被设定为,可同时为该些微指令提供至多二个来源操作数;
其中,该架构指令指定该目的寄存器与该寄存器文件中提供该第一来源操作数的寄存器为该寄存器文件的同一个寄存器;
其中,响应于该第二微指令,该执行管线:
对该第一结果与该第二来源操作数执行该第二操作以产生该第二结果。
10.根据权利要求8所述的微处理器,还包括:
其中,响应于该第二微指令,该执行管线:
确认该些架构条件旗标是否满足该条件。
11.根据权利要求8所述的微处理器,还包括:
其中,该架构指令指示该微处理器只在该些架构条件旗标满足该条件的情况下,更新该些架构条件旗标;
其中,响应于该第二微指令,该执行管线:
若是该些架构条件旗标不满足该条件:
以当前的该些架构条件旗标的值,更新该些架构条件旗标;以及
若是该些架构条件旗标满足该条件:
依据该第二结果更新该些架构条件旗标的至少一部分。
12.根据权利要求11所述的微处理器,还包括:
其中,响应于该第二微指令,该执行管线:
若是该些架构条件旗标满足该条件:
若是该第二操作是一进位旗标更新操作:
依据该第二结果更新一架构进位旗标;以及
若是该第二操作是一非进位旗标更新操作:
依据该第一结果更新该架构进位旗标。
13.根据权利要求8所述的微处理器,还包括:
一寄存器文件,将该些来源操作数提供给该执行管线以执行该些微指令,其中该寄存器文件被设定为,可同时为该些微指令提供至多二个来源操作数;
其中,该架构指令指定该目的寄存器与该寄存器文件中提供该第一与第二来源操作数的寄存器,是该寄存器文件中的不同的寄存器;
其中,该硬件指令转译器还将该架构指令转译为一第三微指令插入该第一与第二微指令间;
其中,响应于该第三微指令,该执行管线:
对该第一结果与该第二来源操作数执行该第二操作,以产生该第二结果。
14.根据权利要求13所述的微处理器,还包括:
其中,该架构指令指示该微处理器只在该些架构条件旗标满足该条件的情况下,更新该些架构条件旗标;
其中,响应于该第三微指令,该执行管线:
若是该些架构条件旗标不满足该条件:
以当前的该些架构条件旗标的值,更新该些架构条件旗标;以及
若是该些架构条件旗标满足该条件:
依据该第二结果更新该些架构条件旗标的至少一部分。
15.根据权利要求14所述的微处理器,还包括:
其中,响应于该第三微指令,该执行管线:
若是该些架构条件旗标满足该条件:
若是该第二操作是一进位旗标更新操作:
依据该第二结果更新一架构进位旗标;以及
若是该第二操作是一非进位旗标更新操作:
依据该第一结果更新该架构进位旗标。
16.根据权利要求8所述的微处理器,其中该架构指令是一ARMISA指令集架构条件执行指令。
17.一种微处理器的处理方法,该微处理器具有多个架构条件旗标以执行一架构指令,该架构指令指示该微处理器执行对第一与第二来源操作数执行一操作以产生一结果,并且只在该些架构条件旗标满足该架构指令指定的一条件的情况下,将该结果写入一目的寄存器,该方法包括:
将该架构指令转译为第一与第二微指令,其中是由该微处理器的一硬件指令转译器进行转译;
其中如果该架构指令指定架构条件旗标将要更新,则该第一微指令指示写入架构条件旗标并且该第二微指令具有第一类型;以及
其中如果该架构指令指定架构条件旗标不要更新,则该第一微指令指示不写入架构条件旗标并且该第二微指令具有第二类型;以及
由该微处理器的一执行管线执行从该硬件指令转译器接收的该些微指令;
其中,执行该第一微指令的步骤包括:
对该些来源操作数执行该操作以产生该结果和非架构指针以及基于该结果的架构条件旗标的新的值,其中如果该第一微指令指示写入架构条件旗标并且由该执行管线读取的架构条件旗标满足该条件,则产生该非架构指针的真值,否则产生该非架构指针的假值;
其中,执行该第二微指令的步骤包括:
在该第二微指令具有第一类型时基于该非架构指针确定是否满足该条件,并且在该第二微指令具有第二类型时基于架构条件旗标的新的值确定是否满足该条件;
在满足该条件的情况下,将由该第一微指令产生的该结果写入该目的寄存器;以及
在不满足该条件的情况下,将该目的寄存器当前的值写入该目的寄存器。
18.根据权利要求17所述的方法,其中该微处理器具有一寄存器文件,该寄存器文件将该些来源操作数提供给该执行管线以执行该些微指令,其中该寄存器文件被设定为可同时为该些微指令提供至多二个来源操作数;
其中,该架构指令指定该目的寄存器与该寄存器文件中提供该第一与第二来源操作数的寄存器,是该寄存器文件中的不同的寄存器。
19.根据权利要求17所述的方法,还包括:
其中该微处理器包括一寄存器,其包括用于架构条件旗标的储存空间;并且,
其中,如果该第一微指令指示写入架构条件旗标,则执行第一微指令包括:
在满足该条件时,将由该第一微指令所产生的该架构条件旗标结果的新的值写入该寄存器;以及
在不满足该条件的情况下,将该寄存器的当前值写入该寄存器。
20.根据权利要求17所述的方法,其中执行第一微指令还包括:
产生第二指针,其指示该第二微指令是否将利用基于该结果产生的进位旗标值或利用通过之前的移位微指令产生的进位旗标值来更新架构条件旗标的进位旗标。
21.根据权利要求17所述的方法,其中该微处理器具有一寄存器,该寄存器具有储存空间以储存该些架构条件旗标以及该非架构指针。
22.根据权利要求21所述的方法,还包括:
由该微处理器的一重命名单元对该寄存器进行重命名。
23.根据权利要求17所述的方法,其中该架构指令是一ARMISA指令集架构条件执行指令。
Applications Claiming Priority (17)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161473062P | 2011-04-07 | 2011-04-07 | |
US201161473069P | 2011-04-07 | 2011-04-07 | |
US201161473067P | 2011-04-07 | 2011-04-07 | |
US61/473,069 | 2011-04-07 | ||
US61/473,067 | 2011-04-07 | ||
US61/473,062 | 2011-04-07 | ||
US13/224,310 | 2011-09-01 | ||
US13/224,310 US8880851B2 (en) | 2011-04-07 | 2011-09-01 | Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US201161537473P | 2011-09-21 | 2011-09-21 | |
US61/537,473 | 2011-09-21 | ||
US13/333,572 US8880857B2 (en) | 2011-04-07 | 2011-12-21 | Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor |
US13/333,572 | 2011-12-21 | ||
US13/333,520 | 2011-12-21 | ||
US13/333,520 US9032189B2 (en) | 2011-04-07 | 2011-12-21 | Efficient conditional ALU instruction in read-port limited register file microprocessor |
US13/333,631 | 2011-12-21 | ||
US13/333,631 US8924695B2 (en) | 2011-04-07 | 2011-12-21 | Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor |
CN201210104311.3A CN102707927B (zh) | 2011-04-07 | 2012-04-09 | 具有条件指令的微处理器及其处理方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210104311.3A Division CN102707927B (zh) | 2011-04-07 | 2012-04-09 | 具有条件指令的微处理器及其处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105468333A true CN105468333A (zh) | 2016-04-06 |
CN105468333B CN105468333B (zh) | 2018-04-06 |
Family
ID=45878018
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610008424.1A Active CN105468333B (zh) | 2011-04-07 | 2012-04-09 | 具有条件指令的微处理器及其处理方法 |
CN201210104311.3A Active CN102707927B (zh) | 2011-04-07 | 2012-04-09 | 具有条件指令的微处理器及其处理方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210104311.3A Active CN102707927B (zh) | 2011-04-07 | 2012-04-09 | 具有条件指令的微处理器及其处理方法 |
Country Status (3)
Country | Link |
---|---|
EP (4) | EP2624126B1 (zh) |
CN (2) | CN105468333B (zh) |
TW (1) | TWI450188B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI488246B (zh) * | 2012-10-19 | 2015-06-11 | Star Techn Inc | 資源整合及晶片測試方法 |
US9639371B2 (en) * | 2013-01-29 | 2017-05-02 | Advanced Micro Devices, Inc. | Solution to divergent branches in a SIMD core using hardware pointers |
WO2015061687A1 (en) * | 2013-10-25 | 2015-04-30 | Advanced Micro Devices, Inc. | Processor and methods for immediate handling and flag handling |
KR102332478B1 (ko) * | 2013-10-27 | 2021-11-30 | 어드밴스드 마이크로 디바이시즈, 인코포레이티드 | 부동 소수점 레지스터 앨리어싱을 위한 프로세서 및 방법들 |
US10203960B2 (en) | 2014-02-20 | 2019-02-12 | Tsinghua University | Reconfigurable processor and conditional execution method for the same |
CN103853526B (zh) * | 2014-02-20 | 2017-02-15 | 清华大学 | 可重构处理器及可重构处理器的条件执行方法 |
CN103885814B (zh) * | 2014-03-20 | 2017-05-17 | 百度在线网络技术(北京)有限公司 | 在x86架构上运行ARM APK的模拟器装置和方法 |
TWI553484B (zh) * | 2014-04-01 | 2016-10-11 | Nat Univ Chung Cheng | 前瞻臆測處理裝置及其處理方法 |
US9772849B2 (en) | 2014-11-14 | 2017-09-26 | Intel Corporation | Four-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US9772850B2 (en) | 2014-11-14 | 2017-09-26 | Intel Corporation | Morton coordinate adjustment processors, methods, systems, and instructions |
US9772848B2 (en) | 2014-11-14 | 2017-09-26 | Intel Corporation | Three-dimensional morton coordinate conversion processors, methods, systems, and instructions |
US10514911B2 (en) | 2014-11-26 | 2019-12-24 | International Business Machines Corporation | Structure for microprocessor including arithmetic logic units and an efficiency logic unit |
CN106650923B (zh) * | 2015-10-08 | 2019-04-09 | 上海兆芯集成电路有限公司 | 具有神经存储器与神经处理单元与定序器的神经网络单元 |
GB2543304B (en) * | 2015-10-14 | 2020-10-28 | Advanced Risc Mach Ltd | Move prefix instruction |
CN106406814B (zh) * | 2016-09-30 | 2019-06-14 | 上海兆芯集成电路有限公司 | 处理器和将架构指令转译成微指令的方法 |
US11029954B2 (en) * | 2019-04-22 | 2021-06-08 | Samsung Electronics Co., Ltd. | Per-lane dynamic indexing in temporary registers |
CN110209426B (zh) * | 2019-06-19 | 2021-05-28 | 上海兆芯集成电路有限公司 | 指令执行方法及指令执行装置 |
CN111142940B (zh) * | 2019-12-23 | 2023-06-30 | 成都海光微电子技术有限公司 | 处理器与软件的适配方法、装置、处理器、芯片和设备 |
CN111679856B (zh) * | 2020-06-15 | 2023-09-08 | 上海兆芯集成电路股份有限公司 | 高效能复杂指令译码的微处理器 |
CN112184536B (zh) * | 2020-09-24 | 2022-09-30 | 成都海光集成电路设计有限公司 | 基于gemm处理图像数据的方法、装置、设备和介质 |
CN112579170B (zh) * | 2020-12-10 | 2022-11-08 | 海光信息技术股份有限公司 | 一种用于减少虚拟地址计算的处理器及其方法 |
CN114265593B (zh) * | 2021-12-09 | 2022-11-22 | 北京奕斯伟计算技术股份有限公司 | 指令调度方法、装置、设备及计算机可读存储介质 |
CN114661355B (zh) * | 2022-05-24 | 2022-12-02 | 深圳市智想科技有限公司 | Risc架构处理器的寄存器架构、寄存器组及risc架构处理器 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001006354A1 (en) * | 1999-07-21 | 2001-01-25 | Broadcom Corporation | Setting condition values in a computer |
US20040148496A1 (en) * | 2003-01-27 | 2004-07-29 | Thimmannagari Chandra Mohan Reddy | Method for handling a conditional move instruction in an out of order multi-issue processor |
US20050081017A1 (en) * | 2003-10-14 | 2005-04-14 | Jeffrey Rupley | Method and apparatus for predication using micro-operations |
CN1627253A (zh) * | 2003-12-12 | 2005-06-15 | 上海奇码数字信息有限公司 | 条件控制管理装置及方法 |
CN101151591A (zh) * | 2005-02-10 | 2008-03-26 | 高通股份有限公司 | 经由用于条件评估的使者指令的条件指令执行 |
CN101681259A (zh) * | 2007-05-03 | 2010-03-24 | 高通股份有限公司 | 用于使用局部条件码寄存器以加速管线处理器中的条件指令执行的系统和方法 |
CN101689107A (zh) * | 2007-06-27 | 2010-03-31 | 高通股份有限公司 | 用于将条件指令扩展为无条件指令与选择指令的方法和系统 |
CN101847092A (zh) * | 2009-05-20 | 2010-09-29 | 威盛电子股份有限公司 | 微处理器以及指令执行方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5638525A (en) * | 1995-02-10 | 1997-06-10 | Intel Corporation | Processor capable of executing programs that contain RISC and CISC instructions |
US5832205A (en) | 1996-08-20 | 1998-11-03 | Transmeta Corporation | Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed |
SE520511C2 (sv) * | 1997-12-02 | 2003-07-22 | Ericsson Telefon Ab L M | Processor och förfarande för instruktionsavkodning |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US7107438B2 (en) * | 2003-02-04 | 2006-09-12 | Via Technologies, Inc. | Pipelined microprocessor, apparatus, and method for performing early correction of conditional branch instruction mispredictions |
TW594570B (en) * | 2003-04-15 | 2004-06-21 | Sunplus Technology Co Ltd | Processor for executing conditional instruction and the method thereof |
US20040255103A1 (en) * | 2003-06-11 | 2004-12-16 | Via-Cyrix, Inc. | Method and system for terminating unnecessary processing of a conditional instruction in a processor |
US7237098B2 (en) * | 2003-09-08 | 2007-06-26 | Ip-First, Llc | Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence |
WO2006010872A1 (en) | 2004-07-27 | 2006-02-02 | Arm Limited | Handling of conditional instructions in a data processing apparatus |
-
2012
- 2012-03-29 EP EP13165942.7A patent/EP2624126B1/en active Active
- 2012-03-29 EP EP12162292.2A patent/EP2508979B1/en active Active
- 2012-03-29 EP EP12162296.3A patent/EP2508980B1/en active Active
- 2012-04-02 EP EP12162883.8A patent/EP2508981B1/en active Active
- 2012-04-06 TW TW101112249A patent/TWI450188B/zh active
- 2012-04-09 CN CN201610008424.1A patent/CN105468333B/zh active Active
- 2012-04-09 CN CN201210104311.3A patent/CN102707927B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001006354A1 (en) * | 1999-07-21 | 2001-01-25 | Broadcom Corporation | Setting condition values in a computer |
US20040148496A1 (en) * | 2003-01-27 | 2004-07-29 | Thimmannagari Chandra Mohan Reddy | Method for handling a conditional move instruction in an out of order multi-issue processor |
US20050081017A1 (en) * | 2003-10-14 | 2005-04-14 | Jeffrey Rupley | Method and apparatus for predication using micro-operations |
CN1627253A (zh) * | 2003-12-12 | 2005-06-15 | 上海奇码数字信息有限公司 | 条件控制管理装置及方法 |
CN101151591A (zh) * | 2005-02-10 | 2008-03-26 | 高通股份有限公司 | 经由用于条件评估的使者指令的条件指令执行 |
CN101681259A (zh) * | 2007-05-03 | 2010-03-24 | 高通股份有限公司 | 用于使用局部条件码寄存器以加速管线处理器中的条件指令执行的系统和方法 |
CN101689107A (zh) * | 2007-06-27 | 2010-03-31 | 高通股份有限公司 | 用于将条件指令扩展为无条件指令与选择指令的方法和系统 |
CN101847092A (zh) * | 2009-05-20 | 2010-09-29 | 威盛电子股份有限公司 | 微处理器以及指令执行方法 |
Also Published As
Publication number | Publication date |
---|---|
EP2624126A1 (en) | 2013-08-07 |
EP2508979B1 (en) | 2018-10-10 |
EP2508981A1 (en) | 2012-10-10 |
EP2508980A1 (en) | 2012-10-10 |
EP2508981B1 (en) | 2018-10-10 |
CN105468333B (zh) | 2018-04-06 |
EP2508979A2 (en) | 2012-10-10 |
TWI450188B (zh) | 2014-08-21 |
CN102707927B (zh) | 2016-02-03 |
EP2508980B1 (en) | 2018-02-28 |
TW201241741A (en) | 2012-10-16 |
EP2624126B1 (en) | 2016-11-02 |
EP2508979A3 (en) | 2013-01-02 |
CN102707927A (zh) | 2012-10-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102707927B (zh) | 具有条件指令的微处理器及其处理方法 | |
CN103218203B (zh) | 具有条件指令的微处理器及其处理方法 | |
CN102937889B (zh) | 控制寄存器对应于异质指令集架构处理器 | |
TWI613591B (zh) | 非循序執行微處理器之條件載入指令 | |
CN102707926B (zh) | 可执行x86指令集及ARM指令集指令的微处理器及其运作方法 | |
CN111124498A (zh) | 用于推测执行侧信道缓解的装置和方法 | |
CN108304217B (zh) | 将长位宽操作数指令转换为短位宽操作数指令的方法 | |
US9378019B2 (en) | Conditional load instructions in an out-of-order execution microprocessor | |
CN103530089A (zh) | 微处理器及其操作方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |