CN103218203A - 具有条件指令的微处理器及其处理方法 - Google Patents

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

Info

Publication number
CN103218203A
CN103218203A CN2012101021415A CN201210102141A CN103218203A CN 103218203 A CN103218203 A CN 103218203A CN 2012101021415 A CN2012101021415 A CN 2012101021415A CN 201210102141 A CN201210102141 A CN 201210102141A CN 103218203 A CN103218203 A CN 103218203A
Authority
CN
China
Prior art keywords
instruction
micro
condition
order
microprocessor
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
Application number
CN2012101021415A
Other languages
English (en)
Other versions
CN103218203B (zh
Inventor
G.葛兰.亨利
泰瑞.派克斯
罗德尼.E.虎克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Via Technologies Inc
Original Assignee
Via Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from US13/224,310 external-priority patent/US8880851B2/en
Priority claimed from US13/333,631 external-priority patent/US8924695B2/en
Priority claimed from US13/333,572 external-priority patent/US8880857B2/en
Priority claimed from US13/333,520 external-priority patent/US9032189B2/en
Priority claimed from US13/413,314 external-priority patent/US9176733B2/en
Priority claimed from US13/413,346 external-priority patent/US9043580B2/en
Priority claimed from US13/412,904 external-priority patent/US9317288B2/en
Priority claimed from US13/412,914 external-priority patent/US9146742B2/en
Priority claimed from US13/412,888 external-priority patent/US9141389B2/en
Priority claimed from US13/413,300 external-priority patent/US20120260073A1/en
Priority claimed from US13/413,258 external-priority patent/US9274795B2/en
Priority claimed from US13/416,879 external-priority patent/US9128701B2/en
Priority to CN201711069237.5A priority Critical patent/CN107832083B/zh
Priority to CN201610126292.2A priority patent/CN105808208B/zh
Priority to CN201510303866.4A priority patent/CN104881270B/zh
Application filed by Via Technologies Inc filed Critical Via Technologies Inc
Publication of CN103218203A publication Critical patent/CN103218203A/zh
Application granted granted Critical
Publication of CN103218203B publication Critical patent/CN103218203B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders

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

具有条件指令的微处理器及其处理方法
技术领域
本发明是关于微处理器的技术领域,特别是关于在指令集中具有条件指令的微处理器。
背景技术
由Intel Corporation of Santa Clara,California开发出来的x86处理器架构以及由ARM Ltd.of Cambridge,UK开发出来的进阶精简指令集机器(advanced risc machines,ARM)架构是计算机领域中两种广为人知的处理器架构。许多使用ARM或x86处理器的计算机系统已经出现,并且,对于此计算机系统的需求正在快速成长。现今,ARM架构处理核心是主宰低功耗、低价段的计算机市场的需求,例如手机、手持式电子产品、平板计算机、网络路由器与集线器、机上盒等。举例来说,苹果iPhone与iPad主要的处理能力即是由ARM架构的处理核心提供。另一方面,x86架构处理器则是主宰需要高效能的高价段市场的需求,例如膝上计算机、桌上型计算机与服务器等。然而,随着ARM核心效能的提升,以及某些x86处理器在功耗与成本的改善,前述低价段与高价段市场的界线逐渐模糊。在移动运算市场,如智能型手机,这两种架构已经开始激烈竞争。在膝上计算机、桌上型计算机与服务器市场,可以预期这两种架构将会有更频繁的竞争。
前述竞争态势使得计算机装置制造业者与消费者陷如两难,而无从判断哪一个架构将会主宰市场。更精确来说,哪一种架构的软件开发商将会开发更多软件。举例来说,一些每月或每年会定期购买大量计算机系统的消费个体,基于成本效率的考虑,例如大量采购的价格优惠与系统维修的简化等,会倾向于购买具有相同系统配置设定的计算机系统。然而,这些大型消费个体中的使用者群体,对于这些具有相同系统配置设定的计算机系统,往往有各种各样的运算需求。具体来说,部分使用者的需求是希望能够在ARM架构的处理器上执行程序,其它部分使用者的需求是希望能够在x86架构的处理器上执行程序,甚至有部分使用者希望能够同时在两种架构上执行程序。此外,新的、预期外的运算需求也可能出现而需要使用另一种架构。在这些情况下,这些大型个体所投入的部分资金就变成浪费。在另一个例子中,使用者具有一个重要的应用程序,只能在x86架构上执行,因而他购买了x86架构的计算机系统。不过,这个应用程序的后续版本改为针对ARM架构开发,并且优于原本的x86版本。使用者会希望转换架构来执行新版本的应用程序,但不幸地,他已经对于不倾向使用的架构投入相当成本,反之亦然。同样地,使用者原本投资于只能在ARM架构上执行的应用程序,但是后来也希望能够使用针对x86架构开发而未见于ARM架构的应用程序或是优于以ARM架构开发的应用程序,亦会遭遇这样的问题,反之亦然。值得注意的是,虽然小实体或是个人投入的金额较小,然而投资损失比例可能更高。其它类似的投资损失的例子可能出现在各种不同的运算市场中,例如由x86架构转换至ARM架构或是由ARM架构转换至x86架构的情况。最后,投资大量资源来开发新产品的运算装置制造业者,例如OEM厂商,也会陷入此架构选择的困境。若是制造业者基于x86或ARM架构研发制造大量产品,而使用者的需求突然改变,则会导致许多有价值的研发资源的浪费。
对于运算装置的制造业者与消费者,能够保有其投资免于受到二种架构中何者胜出的影响是有帮助的,因而有必要提出一种解决方法让系统制造业者发展出可让使用者同时执行x86架构与ARM架构的程序的运算装置。
使系统能够执行多个指令集程序的需求由来已久,这些需求主要是因为消费者会投入相当成本在旧硬件上执行的软件程序,而其指令集往往不兼容于新硬件。举例来说,IBM 360系统Model 30即具有兼容于IBM 1401系统的特征来缓和使用者由1401系统转换至较高效能与改良特征的360系统的痛苦。Model 30具有360系统与1401系统的只读储存控制(Read Only Storage,ROS)),使其在辅助储存空间预先存入所需信息的情况下能够使用于1401系统。此外,在软件程序以高级语言开发的情况下,新的硬件开发商几乎没有办法控制为旧硬件所编译的软件程序,软件开发商也欠缺动力为新硬件重新编译(re-compile)源码,此情形尤其发生在软件开发商与硬件开发商是不同个体的情况。请参照Siberman与Ebcioglu于Computer,June 1993,No.6提出的文章“An Architectural Framework for Supporting Heterogeneous Instruction-SetArchitectures”。Silberman与Ebcioglu提出的系统内含有执行原生码的原生引擎(native engine)与执行目的码的迁移引擎(migrant engine),可依据转译软件将目的码(object bode)转译为原生码(native code)的转译效果,在这两种编码间视需要进行转换,以使既存复杂指令集(CISC)架构(下称基础架构,例如IBMS/390)的软件程序执行于精简指令集(RISC)、超纯量架构(superscalar)与超长指令字(VLIW)架构(下称原生架构)系统,藉以改善软件程序的效能。请参照2006年5月16日公告的美国专利第7,047,394号专利案,Van Dyke et al.揭露一处理器,具有用以执行原生精简指令集(Tapestry)的程序指令的执行管线,并利用硬件转译与软件转译的结合,将x86程序指令转译为原生精简指令集的指令。Nakada et al.提出具有ARM架构的前端管线与Fujitsu FR-V(超长指令字)架构的前端管线的异质多线程处理器(heterogeneous SMT processor)。ARM架构前端管线用于非规则软件程序(如操作系统),Fujitsu FR-V(超长指令字)架构的前端管线用于多媒体应用程序以将一增加的超长指令字队列汇入FR-V超长指令字的后端管线以维持来自前端管线的指令。请参照Buchty与Weib,eds,Universitatsverlag Karlsruhe于2008年11月在First InternationalWorkshop on New Frontiers in High-performance and Hardware-awareComputing(HipHaC’08),Lake Como,Italy,(配合MICRO-41)发表的论文集(ISBN 978-3-86644-298-6)的文章“OROCHI:A Multiple Instruction Set SMTProcessor”。文中提出的方法用以降低整个系统在异质系统单芯片(SOC)装置,如德州仪器OMAP应用处理器,内所占据的空间。此异质系统单芯片装置具有一个ARM处理器核心加上一个或多个协处理器(co-processors)(例如TMS320、多种数字信号处理器、或是多种图形处理单元(GPUs))。这些协处理器并不分享指令执行资源,而只是集成于同一芯片上的不同处理核心。
软件转译器(software translator)、或称软件仿真器(software emulator,software simulator)、动态二进制码转译器等,亦被用于支持将软件程序在与此软件程序架构不同的处理器上执行的能力。其中受欢迎的产品如搭配苹果麦金塔(Macintosh)计算机的Motorola 68K-to-PowerPC仿真器,以及后续研发出来的PowerPC-to-x86仿真器,Motorola 68K-to-PowerPC仿真器可在具有PowerPC处理器的麦金塔计算机上执行68K程序,PowerPC-to-x86仿真器可在具有x86处理器的麦金塔计算机上执行68K程序。位于加州圣塔克拉拉(Santa Clara,California)的全美达公司,结合超长指令字(VLIW)的核心硬件与“纯粹软件指令的转译器(亦即程序码转译软件(Code Morphing Software))以动态地编译或仿真(emulate)x86程序码序列”以执行x86程序码,请参照2011年维基百科针对全美达(Transmeta)的说明<http://en.wikipedia.org/wiki/Transmeta>。另外,参照1998年11月3日由Kellyet al.提出的美国专利第5,832,205号公告案。IBM的DAISY(来自Yorktown的动态体系结构指令集)系统具有超长指令字(VLIW)机器与动态二进制软件转译,可完全通过软件方式仿真旧有体系结构。DAISY具有位于只读存储器内的虚拟机器观测器(Virtual Machine Monitor),以并行处理(parallelize)与储存超长指令字原始码(VLIW primitives)至未见于旧有系统架构的部分主要存储器内,期能避免这些旧有体系架构的程序码碎片在后续程序被重新编译(re-translation)。DAISY具有高速编译器优化算法(fast compiler optimizationalgorithms)以提升效能。QEMU是一具有软件动态转译器的机器仿真器(machine emulator)。QEMU可在多种主系统(host),如x86、PowerPC、ARM、SPARC、Alpha与MIPS,模拟多种中央处理器,如x86、PowerPC、ARM与SPARC。请参照QEMU,a Fast and Portable Dynamic Translator,Fabrice Bellard,USENIX Association,FREENIX Track:2005USENIX Annual TechnicalConference,如同其开发者所称“动态转译器对于目标处理器指令执行规律转换,将其转换至主系统指令集。产生的二进制码是储存于一转译快取以利重复取用。...QEMU[较之其它动态转译器]远为简单,因为它只串接至GNCC编译器于离线(off line)时产生的机器码片段”。同时可参照2009年6月19日Adelaide大学Lee Wang Hao的学位论文“ARM Instruction Set Simulation onMulti-core x86Hardware”。虽然软件转译的解决方案所提供的处理效能可以满足多个运算需求的子集合的情况,但是不大能够满足多个使用者的情况。
静态(static)二进制制转译是另一种具有高效能潜力的技术。不过,二进制制转译技术的使用存在技术上的问题(例如:自修改程序码(self-modifyingcode)、只在执行时(run-time)可知的间接分支(indirect branches)数值)以及商业与法律上的障碍(例如:此技术可能需要硬件开发商配合开发散布新程序所需的管道;对原程序散布者存在潜在的授权或是著作权侵害的风险)。
ARM指令集架构(ISA)具有条件指令执行的特色。如ARM架构参考手册(ARM Architecture Reference Manual)第A4-3页所述:“大部分ARM指令可被有条件地执行(conditionally executed)。意谓若是APSR中的N、Z、C与V旗标满足指令所特定的条件,他们才会在程序者的模式操作、存储器与协处理器发挥正常的效果。若是这些旗标不满足条件,指令就会如同一个不操作(NOP)机器指令,此指令执行至下一个正常指令,包括对于例外事件(exception)实行的所有相关的确认操作,但不会有其它效果。”
条件执行有利于缩小指令码的尺寸,并能通过缩减分支指令的数量以及减少指令错误预测伴随而来的效能减损,来提升效能。因此,如何有效率地执行条件指令,尤其在支持高微处理器时钟的情况,是亟待解决的问题。
发明内容
本发明的一实施例提供一个执行条件非分支指令的微处理器。其中,各个条件非分支指令是特定一条件。在条件满足时,各个条件非分支指令指示微处理器执行一操作,而在条件不满足微处理器的条件旗标时,就不去执行此操作。此微处理器具有一预测器,以提供关于此条件非分支指令的预测。此微处理器并具有一指令转译器。此指令转译器,在前述预测预测条件将不会被满足时,将条件非分支指令转译为一不操作微指令,而在前述预测预测条件将会被满足时,将条件非分支指令转译为一个或多个微指令构成的一微指令组以非条件地执行此操作。此微处理器亦具有一执行管线,以执行不操作微指令或是由指令转译器提供的微指令组。
本发明的另一实施例提供一种利用一微处理器执行条件非分支指令的方法。其中,各个条件非分支指令是特定一条件。各个条件非分支指令在条件满足时,指示微处理器执行一操作,而在条件不满足微处理器的条件旗标时,不去执行此操作。此方法包含的步骤如下:提供关于一条件非分支指令(conditional non-branch instruction)的预测;在前述预测预测条件将不会被满足时,将条件非分支指令转译为一不操作(no-operation)微指令;在前述预测预测条件将会被满足时,将条件非分支指令转译为一个或多个微指令构成的一微指令组以非条件地(unconditionally)执行操作;以及执行前述不操作微指令或是由指令转译器提供的微指令组,其中,此执行是由微处理器的一硬件执行管线所执行。
本发明的又一实施例提供一适用于该媒介的计算机可读取程序码,用以特定(specifying)一微处理器以执行条件非分支指令。其中,各个条件非分支指令是特定一条件。各个条件非分支指令在条件满足时,指示微处理器执行一操作,而在条件不满足微处理器的条件旗标时,不去执行操作。此计算机可读取程序码包含第一程序码以特定一预测器(predictor),提供关于一条件非分支指令(conditional non-branch instruction)的预测。此计算机可读取程序码并包含第二程序码,以特定一指令转译器,用以在前述预测预测条件将不会被满足时,将条件非分支指令转译为一不操作(no-operation)微指令,而在前述预测预测条件将会被满足时,将条件非分支指令转译为一个或多个微指令构成的一微指令组以非条件地(unconditionally)执行此操作。此计算机可读取程序码并包含第三程序码,以特定一执行管线,执行前述不操作微指令或是由指令转译器提供的微指令组。
本发明的一实施例提供一种具有一指令集架构的微处理器。此指令集架构是定义有至少一指令。此指令包含一立即字段(immediate field),立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值。此指令指示微处理器执行一操作将一固定数值作为其中之一的源操作数,固定数值是将第一数值基于第二数值转动/移动一定数量的位而获得。微处理器具有一指令转译器,用以将至少一指令转译为一个或多个微指令。此微指令是以不同于指令集架构所定义的指令的编码方式进行编码。此微处理器并具有一执行管线,用以执行由指令转译器所产生的微指令,以产生一由指令集架构定义的结果。其中,指令转译器,而非执行管线,是依据第一与第二数值产生的固定数值作为至少一微指令的一源操作数,供执行管线执行。
本发明的另一实施例提供一种方法,由一具有一指令集架构的微处理器执行。此指令集架构是定义有至少一指令,此指令包含一立即字段(immediatefield),立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值。指令是指示微处理器执行一操作将一固定数值作为其中之一的源操作数,此固定数值是将第一数值基于第二数值转动/移动一定数量的位而获得。此方法包含的步骤如下:将至少一指令转译为一个或多个微指令,此微指令是以不同于指令集架构所定义的指令的编码方式进行编码,并且,此转译步骤是由微处理器的一指令转译器执行;执行由指令转译器所产生的微指令,以产生一由指令集架构定义的结果,此执行步骤是由微处理器的一执行管线执行;以及由指令转译器,而非执行管线,依据第一与第二数值产生固定数值作为至少一微指令的一源操作数,供执行管线执行。
本发明的另一实施例提供一种具有一指令集架构的微处理器。此指令集架构是定义有至少一指令,此指令包含一立即字段(immediate field),立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值。指令是指示微处理器执行一操作将一固定数值作为其中之一的源操作数,此固定数值是将第一数值基于第二数值转动/移动一定数量的位而获得。此微处理器具有一指令转译器,用以将至少一指令转译为一个或多个微指令。此微处理器并具有一执行管线,执行由指令转译器所产生的微指令,以产生一由指令集架构定义的结果。当立即字段的一数值是落于一预定的数值子集内:指令转译器将指令转译为至少一个微指令;指令转译器,而非执行管线,是依据第一与第二数值产生固定数值;以及执行管线利用指令转译器产生的固定数值作为其中之一的源操作数,执行至少一微指令。当立即字段的数值并不落于该预定的数值子集内:指令转译器将指令转译为至少第一与第二微指令;执行管线,而非指令转译器,通过执行第一微指令,产生固定数值;以及执行管线通过利用第一微指令执行产生的固定数值作为其中之一的源操作数,以执行第二微指令。
本发明的另一实施例提供一种方法,由具有一指令集架构的一微处理器执行。此指令集架构是定义有至少一指令。此指令包含一立即字段(immediatefield),立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值。指令是指示微处理器执行一操作将一固定数值作为其中之一的源操作数,此固定数值是将第一数值基于第二数值转动/移动一定数量的位而获得。此微处理器并包含一指令转译器与一执行管线。此方法包含下列步骤:利用指令转译器,确认立即字段的一数值是否落于一预定的数值子集内。此方法并包含下列步骤:当立即字段的数值是落于预定的数值子集内,利用指令转译器将指令转译为至少一个微指令;利用指令转译器,而非执行管线,依据第一与第二数值产生固定数值;以及利用执行管线,将指令转译器产生的固定数值作为其中之一的源操作数,来执行前述至少一微指令。此方法并包含下列步骤:当立即字段的数值并不落于预定的数值子集内:利用指令转译器,将指令转译为至少第一与第二微指令;利用执行管线,而非指令转译器,通过执行第一微指令,以产生固定数值;以及利用执行管线,通过利用第一微指令执行产生的固定数值作为其中之一的源操作数,以执行第二微指令。
本发明的又一实施例提供一种计算机程序产品,编码于至少一计算机可读取储存媒介,以使用于一运算装置。此计算机程序产品包括适用于此媒介的计算机可读取程序码,用以特定一微处理器。此微处理器具有一指令集架构,指令集架构是定义有至少一指令。此指令包含一立即字段(immediatefield),立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值。指令是指示微处理器执行一操作将一固定数值作为其中之一的源操作数。此固定数值是将第一数值基于第二数值转动/移动一定数量的位而获得。此计算机可读取程序码具有第一程序码,特定一指令转译器,用以将至少一指令转译为一个或多个微指令,其中,该指令是以不同于指令集架构所定义的指令的编码方式进行编码。此计算机可读取程序码并具有第二程序码,特定一执行管线,用以执行由指令转译器所产生的微指令,以产生一由该指令集架构定义的结果。其中,指令转译器,而非执行管线,是依据第一与第二数值产生的固定数值作为至少一微指令的一源操作数,供执行管线执行。
关于本发明的优点与精神可以通过以下的发明详述及所附图式得到进一步的了解。
附图说明
图1是本发明执行x86程序集架构与ARM程序集架构机器语言程序的微处理器一实施例的方块图。
图2是一方块图,详细显示图1的硬件指令转译器。
图3是一方块图,详细显示图2的指令格式化程序(instruction formatter)。
图4是一方块图,详细显示图1的执行管线。
图5是一方块图,详细显示图1的寄存器文件。
图6A和图6B是一流程图,显示图1的微处理器的操作步骤。
图7是本发明一双核心微处理器的方块图。
图8是本发明执行x86ISA与ARM ISA机器语言程序的微处理器另一实施例的方块图。
图9是一方块图,详细显示部分图1的微处理器。
图10A和图10B是一流程图,显示图1的硬件指令转译器转译条件ALU指令的操作步骤。
图11是一流程图,显示图4的执行单元执行一移位微指令的操作步骤。
图12A和图12B是一流程图,显示图4的执行单元执行一条件ALU微指令的操作步骤。
图13是一流程图,显示图4的执行单元执行一条件移动微指令(conditional move microinstruction)的操作步骤。
图14至20是方块图,显示图1的执行管线112执行依据图10的转译操作所转译的各种形式的条件ALU指令的操作步骤。
图21A和图21B是一流程图,显示图1的硬件指令转译器转译条件ALU指令,以指出(specify)来源寄存器(source register)的其中之一与目的寄存器为同一的操作步骤。
图22至28是方块图,显示图1的执行管线112执行依据图21的转译操作所转译的各种形式的条件ALU指令的操作步骤。
图29是一方块图,显示本发明对于非条件分支指令进行预测的微处理器100的一实施例。
图30是一方块示意图,显示图29的指令转译器对于条件ALU指令的转译的一实施例。
图31A和图31B是一流程图显示本发明图29的微处理器执行图30的一条件ALU指令的一实施例。
图32是一方块图,显示本发明在转译过程中处理修正后立即常数的微处理器的一实施例。
图33是一方块图,显示本发明将一立即操作数指令选择性地转译为一个ROR微指令与一ALU微指令或是转译为一立即ALU微指令的一实施例。
图34A和图34B是一流程图,显示本发明图32的微处理器100执行图33的一立即操作数指令的操作的一实施例。
[主要元件标号说明]
微处理器(处理核心)100        指令快取102
硬件指令转译器104            寄存器文件106
存储器子系统108              执行管线112
指令撷取单元与分支预测器114  ARM程序计数器(PC)寄存器116
x86指令指针(IP)寄存器118
配置寄存器(configuration register)122
ISA指令124                   微指令126
结果128
指令模式指针(instruction mode indicator)132
撷取地址134
环境模式指针(environment mode indicator)136
指令格式化程序202           简单指令转译器(SIT)204
复杂指令转译器(CIT)206      多工器(mux)212
x86简单指令转译器222        ARM简单指令转译器224
微程序计数器(micro-program counter,micro-PC)232
微码只读存储器234
微程序器(microsequencer)236
指令间接寄存器(instruction indirection register,IIR)235
微转译器(microtranslator)237
格式化ISA指令242
实行微指令(implementing microinstructions)244
实行微指令246
选择输入248
微码地址252
只读存储器地址254
ISA指令信息255
预解码器(pre-decoder)302
指令字节队列(IBQ)304
长度解码器(length decoders)与涟波逻辑门(ripple logic)306
多工器队列(mux queue,MQ)308
多工器312
格式化指令队列(formatted instruction queue,FIQ)314
ARM指令集状态322
微指令队列401
寄存器配置表(register allocation table,RAT)402
指令调度器(instruction dispatcher)404
保留站(reservation station)406
指令发送单元(instruction issue unit)408
整数/分支(integer/branch)单元412
媒体单元(media unit)414
加载/储存(load/store)单元416
浮点(floating point)单元418
重排缓冲器(reorder buffer,ROB)422
执行单元424            ARM特定寄存器502
x86特定寄存器504       共享寄存器506
双核心微处理器700      微指令快取892
条件旗标寄存器926      多工器922
旗标总线928            条件旗标数值928/924
ISA条件旗标902         条件满足(SAT)位904
预移位进位(PSC)位906   使用移位进位(USE)位908
动态预测器2932         预测器选择器2934
静态预测器2936         动态预测2982
预测选择2984           静态预测2986
历史更新2974           误预测2976
ALU微指令3044          条件移动微指令3046
具条件码的条件ALU微指令3045
具条件码的不操作微指令3047
操作码字段a202,a212,a222,a252,a272
条件码字段a204,a224,a254,a274
来源寄存器1与2的字段a206,a216,a256
目的寄存器字段a208,a218,a232,a258
来源寄存器1的字段a226  来源寄存器2的字段a228
立即操作数3266         ROR微指令3344
ALU微指令3346          立即ALU微指令3348
操作码字段b202,b212,b222,b232
来源寄存器1的字段b204,b214,b234
来源寄存器2的字段b235
目的寄存器字段b206,b216,b226,b236
立即字段b207              immed_8字段b208,b228
rotate_imm字段b209,b229  immediate-32字段b218
具体实施方式
名词定义
指令集,是定义二进制制编码值(binary encoded value)的集合(即机器语言指令)与微处理器所执行的操作间的对应关系(mapping)。机器语言程序基本上是以二进制制进行编码,不过亦可使用其它进位制的系统,如部分早期IBM计算机的机器语言程序,虽然最终亦是以电压高低呈现二进制值的物理信号来表现,不过却是以十进制制进行编码。机器语言指令指示微处理器执行的操作如:将寄存器1内的操作数与寄存器2内的操作数相加并将结果写入寄存器3、将存储器地址0x12345678的操作数减掉指令所特定的立即操作数(immediate operand)并将结果写入寄存器5、依据寄存器7所特定的位数移动寄存器6内的数值、若是零旗标被设定,在指令后方分割出36个字节给这个指令、将存储器地址0xABCD0000的数值加载寄存器8。因此,指令集是定义各个机器语言指令使微处理器执行所欲执行的操作的二进制编码值。须要了解的是,指令集定义二进制值与微处理器操作间的对应关系,并不意味着单一个二进制值就会对应至单一个微处理器操作。具体来说,在部分指令集中,多个二进制值可能会对应至同一个微处理器操作。
指令集架构(ISA),从微处理器家族的脉络来看是包含(1)指令集;(2)指令集的指令所能存取的资源集(例如:存储器寻址所需的寄存器与模式);以及(3)微处理器响应指令集的指令执行所产生的例外事件集(set of exceptions)(例如:除以零、分页错误(page fault)、存储器保护违反等)。程序者,如组译器(assembler)与编译器(compiler)的撰写者,想要作出机器语言程序在一微处理器家族执行,就需要此微处理器家族的ISA定义。微处理器家族的制造者通常会将ISA定义于程序员操作手册。举例来说,2009年3月公布的Intel 64与IA-32架构软件开发者手册(Intel 64and IA-32Architectures SoftwareDeveloper’s Manual)即定义Intel 64与IA-32处理器架构的ISA。此软件开发者手册包含有五个章节,第一章是基本架构;第二A章是指令集参考A至M;第二B章是指令集参考N至Z;第三A章是系统编程指南;第三B章是系统编程指南第二部分。此手册系列为参考文件。此种处理器架构通常被称为x86架构,本文中则是以x86、x86ISA、x86ISA家族、x86家族或是相似用语来说明。在另一个例子中,2010年公布的ARM架构参考手册,ARM v7-A与ARM v7-R版本Errata markup,定义ARM处理器架构的ISA。此参考手册系列为参考文件。此ARM处理器架构的ISA在此亦被称为ARM、ARM ISA、ARM ISA家族、ARM家族或是相似用语。其它众所周知的ISA家族还有IBMSystem/360/370/390与z/Architecture、DEC VAX、Motorola 68k、MIPS、SPARC、PowerPC与DEC Alpha等等。ISA的定义会涵盖处理器家族,因为处理器家族的发展中,制造者会通过在指令集中增加新指令、在寄存器组中增加新的寄存器等方式来改进原始处理器的ISA。举例来说,随着x86程序集架构的发展,其于Intel Pentium III处理器家族导入一组128位的多媒体扩展指令集(MultiMedia eXtension,MMX)寄存器作为单指令多重数据流扩展(SSE)指令集的一部分,而虽然x86ISA机器语言程序并不使用单指令多重数据流扩展指令集的XMM寄存器,x86ISA机器语言程序已经开发来利用XMM寄存器以提升效能。此外,其它制造商亦设计且制造出可执行x86ISA机器语言程序的微处理器。例如,超微半导体(Advanced Micro Devices,AMD)与威盛电子(VIA Technologies)即在x86ISA增加新技术特征,如超微半导体的3DNOW!单指令多重数据流(SIMD)向量(vector)处理指令以及威盛电子的Padlock安全引擎随机数产生器(random number generator)与先进解码引擎(advancedcryptography engine)的技术,前述技术都是采用x86ISA的机器语言程序,但却非由现有的Intel微处理器实现。以另一个实例来说明,ARM ISA原本定义ARM指令集状态(state)具有4字节的指令。然而,随着ARM ISA的发展而增加其它指令集状态,如具有2字节指令以提升编码密度的Thumb指令集状态以及用以加速Java字节码(bytecode)程序的Jazelle指令集状态。ARM ISA机器语言程序已被发展来使用部分或所有其它ARM ISA指令集状态,即使ARM ISA机器语言程序产生之初并非采用其它ARM ISA指令集状态。
指令集架构(ISA)机器语言程序,包含ISA指令序列,即ISA指令集对应至程序者要程序执行的操作序列的二进制编码值序列。因此,x86ISA机器语言程序包含x86ISA指令序列,ARM ISA机器语言程序则包含ARM ISA指令序列。机器语言程序指令是存放于存储器内,且由微处理器撷取并执行。
硬件指令转译器,包含多个晶体管的配置,用以接收ISA机器语言指令(例如x86ISA或是ARM ISA机器语言指令)作为输入,并相对应地输出一个或多个微指令至微处理器的执行管线(pipeline)。执行管线执行微指令的执行结果是由ISA指令所定义。因此,执行管线是通过对这些微指令的集体执行(collective execution)来“实现(implement)”ISA指令。也就是说,执行管线通过对于硬件指令转译器输出的实行微指令(implementing micro instruction)的集体执行,实现ISA指令所特定的操作于ISA指令所特定的输入,以产生此ISA指令定义的结果。因此,硬件指令转译器可视为是将ISA指令“转译(translate)”为一个或多个微指令。本实施例所描述的微处理器具有硬件指令转译器以将x86ISA指令与ARM ISA指令转译为微指令。不过,需要理解的是,硬件指令转译器并非必然可对x86程序员操作手册或是ARM程序员操作手册所定义的整个指令集进行转译,而往往只能转译这些指令中一个子集合(subset),如同绝大多数x86ISA与ARM ISA处理器只支持其相对应的程序员操作手册所定义的一个指令子集合。具体来说,x86程序员操作手册定义而由硬件指令转译器转译的指令子集合,不必然就对应至所有既有的x86ISA处理器,ARM程序员操作手册定义而由硬件指令转译器转译的指令子集合,不必然就对应至所有既有的ARM ISA处理器。
执行管线(pipeline),是一多层序列(sequence of stages)。此多层序列的各个层分别具有硬件逻辑与一硬件寄存器。硬件寄存器抓取硬件逻辑的输出信号,并依据微处理器的时钟信号,将此输出信号提供至多层序列的下一层。执行管线可以具有多个多层序列,例多重执行管线(multiple pipelines)。执行管线接收微指令作为输入信号,并相应地执行微指令所特定的操作以输出执行结果。微指令所特定,而由执行管线的硬件逻辑所执行的操作包括但不限于算术(arithmetic)、逻辑(logical)、存储器加载/储存(memory load/store)、比较(compare)、测试(test)、与分支解析(branch resolution),对进行操作的数据格式包括但不限于整数、浮点数、字母、二进编码十进数(BCD)、与紧缩格式(packed format)。执行管线执行微指令以实现ISA指令(如x86与ARM),藉以产生ISA指令所定义的结果。执行管线不同于硬件指令转译器。具体来说,硬件指令转译器产生微指令,执行管线则是执行这些指令,但不产生这些微指令。
指令快取,是微处理器内的一个随机存取存储装置,微处理器将ISA机器语言程序的指令(例如x86ISA与ARM ISA的机器语言指令)放置其中。这些指令是撷取自系统存储器并由微处理器依据ISA机器语言程序的执行流程(course)来执行。具体来说,ISA定义一指令地址寄存器以抓取下一个待执行的ISA指令的存储器地址(举例来说,在x86ISA是定义为指令指针(instructionpointer,IP)而在ARM ISA是定义为程序计数器(program counter,PC)),而在微处理器执行机器语言程序以控制程序流程时,微处理器会更新指令地址寄存器的内容。ISA指令是被快取来供后续撷取之用。依据指令寄存器的内容抓取指令快取所呈现的ISA指令的存储器地址,即可更快速地取得ISA指令,而非在机器语言程序的下一次流程中由系统存储器存取。尤其是,此程序是基于指令地址寄存器(如指令指针(IP)或是程序计数器(PC))的存储器地址向指令快取取得数据,而非仅仅基于一加载或储存指令所特定的存储器地址。因此,将指令集架构的指令视为数据(例如采用软件转译的系统的硬件部分所呈现的数据)来抓取的专用数据快取,仅是基于一加载/储存地址来存取,而非基于指令地址寄存器的数值,就不是此处所称的指令快取。此外,会取得指令与数据的混合式快取,是基于指令地址寄存器的数值以及基于加载/储存地址,而非仅仅基于加载/储存地址,在本说明内容则被涵盖在指令快取的定义内。在本说明内容中,加载(load)指令是指将数据由存储器读取至微处理器的指令,储存(store)指令是指将数据由微处理器写入存储器的指令。
微指令集,是微处理器的执行管线能够执行的指令(微指令)的集合。
实施例说明
本发明的实施例揭露的微处理器可通过硬件将其相对应的x86ISA与ARM ISA指令转译为由微处理器的执行管线直接执行的微指令,以达到可在x86ISA与ARM ISA机器语言程序执行的目的。此微指令是由微处理器的微架构的微指令集所定义,并且会因采用x86ISA与ARM ISA而有不同。由于本文所述的微处理器需要执行x86与ARM机器语言程序,微处理器的硬件指令转译器会将x86与ARM指令转译为微指令,并将这些微指令提供至微处理器的执行管线。微处理器执行这些微指令以实现前述x86与ARM指令。由于这些实行微指令(implementing micro instruction)是直接由硬件指令转译器提供至执行管线来执行,而不同于采用软件转译器的系统需于执行管线执行指令前,预先储存本机(host)指令至存储器,因此,前揭微处理器具有潜力能够以较快的执行速度执行x86与ARM机器语言程序。
图1是一方块图显示本发明能够执行x86ISA与ARM ISA的机器语言程序的微处理器100的一实施例。此微处理器100具有一指令快取102;一硬件指令转译器104,用以由指令快取102接收x86ISA指令与ARM ISA指令124并将其转译为微指令126;一执行管线112,执行由硬件指令转译器104接收的微指令126以产生微指令结果128,该结果是以操作数的型式回传至执行管线112;一寄存器文件106与一存储器子系统108,分别提供操作数至执行管线112并由执行管线112接收微指令结果128;一指令撷取单元与分支预测器114,提供一撷取地址134至指令快取102;一ARM ISA定义的程序计数器(PC)寄存器116与一x86ISA定义的指令指针(IP)寄存器118,依据微指令结果128进行更新,并且,其内容是提供至指令撷取单元与分支预测器114;以及多个配置寄存器(configuration register)122,提供一指令模式指针(instruction mode indicator)132与一环境模式指针(environment modeindicator)136至硬件指令转译器104与指令撷取单元与分支预测器114,并且是基于微指令结果128进行更新。
由于微处理器100可执行x86ISA与ARM ISA机器语言指令,微处理器100依据程序流程由系统存储器(未图标)撷取指令至微处理器100。微处理器100存取最近撷取的x86ISA与ARM ISA的机器语言指令至指令快取102。指令撷取单元114依据由系统存储器撷取的x86或ARM指令字节区段,产生一撷取地址134。若是命中指令快取102,指令快取102将位于撷取地址134的x86或ARM指令字节区段提供至硬件指令转译器104,否则就是由系统存储器中撷取指令集架构的指令124。指令撷取单元114基于ARM程序计数器(PC)116与x86指令指针(IP)118的值产生撷取地址134。具体来说,指令撷取单元114会在一撷取地址寄存器中维持一撷取地址。任何时候指令撷取单元114撷取到新的ISA指令字节区段,它就会依据此区段的尺寸更新撷取地址,并依据既有方式依序进行,直到出现一控制流程事件(control flowevent)。控制流程事件包含例外事件(exception)的产生、分支预测器114的预测显示撷取区段内有一被占用的分支、以及执行管线112响应一非分支预测器114所预测的被占用执行分支指令而对ARM程序计数器116与x86指令指针118的更新。指令撷取单元114将撷取地址相应地更新为例外处理程序地址(exception handler address)、预测目标地址(predicted target address)或是执行目标地址(executed target address)以响应一控制流程事件。在一实施例中,指令快取102是一混合快取,以存取ISA指令124与数据。值得注意的是,在此混合快取的实施例中,虽然混合快取可基于一加载/储存地址将数据写入快取或由快取读取数据,在微处理器100是由混合快取撷取指令集架构的指令124的情况下,混合快取是基于ARM程序计数器116与x86指令指针118的数值来存取,而非基于加载/储存地址。指令快取102可以是一随机存取存储器(RAM)装置。
指令模式指针132是一状态指示微处理器100当前是否正在撷取(fetching)、格式化(formatting)/解码(decoding)、以及将x86ISA或ARM ISA指令124转译为微指令126。此外,执行管线112与存储器子系统108接收此指令模式指针132,此指令模式指针132会影响微指令126的执行方式,尽管只是微指令集内的一个小集合。x86指令指针寄存器118抓取下一个待执行的x86ISA指令124的存储器地址,ARM程序计数器寄存器116抓取下一个待执行的ARM ISA指令124的存储器地址。为了控制程序流程,微处理器100在其执行x86与ARM机器语言程序时,分别更新x86指令指针寄存器118与ARM程序计数器寄存器116,至下一个指令、分支指令的目标地址或是例外处理程序地址。在微处理器100执行x86与ARM ISA的机器语言程序的指令时,微处理器100由系统存储器撷取机器语言程序的指令集架构的指令,并将其置入指令快取102以取代最近较不被撷取与执行的指令。此指令撷取单元114基于x86指令指针寄存器118或是ARM程序计数器寄存器116的数值,并依据指令模式指针132指示微处理器100正在撷取的ISA指令124是x86或是ARM模式来产生撷取地址134。在一实施例中,x86指令指针寄存器118与ARM程序计数器寄存器116是一共享的硬件指令地址寄存器,提供其内容至指令撷取单元与分支预测器114并由执行管线112依据x86或ARM的语意(semantics),并基于指令模式指针132指示的模式是x86或ARM,来进行更新。
环境模式指针136是一状态指示微处理器100是使用x86或ARM ISA的语意于此微处理器100操作的多种执行环境,例如虚拟存储器(virtualmemory)、例外事件(exception)、快取控制(cache control)、与全域执行时间保护(global execution-time protection)。因此,指令模式指针132与环境模式指针136共同产生多个执行模式。在第一种模式中,指令模式指针132与环境模式指针136都指向x86ISA,微处理器100是作为一般的x86ISA处理器。在第二种模式中,指令模式指针132与环境模式指针136都指向ARM ISA,微处理器100是作为一般的ARM ISA处理器。在第三种模式中,指令模式指针132指向x86ISA,不过环境模式指针136则是指向ARM ISA,此模式有利于在ARM操作系统或是超管理器(hypervisor)的控制下执行使用者模式x86机器语言程序;相反地,在第四种模式中,指令模式指针132是指向ARM ISA,不过环境模式指针136则是指向x86ISA,此模式有利于在x86操作系统或超管理器的控制下执行使用者模式ARM机器语言程序。指令模式指针132与环境模式指针136的数值在重置(reset)之初就已确定。在一实施例中,此初始值是被视为微码常数(microcode constants)进行编码,不过可通过熔断配置熔丝(configuration fuse)与/或使用微码补丁(microcode patch)进行修改。在另一实施例中,此初始值则是由一外部输入提供至微处理器100。在一实施例中,环境模式指针136只在由一重置至ARM(reset-to-ARM)指令124或是一重置至x86(reset-to-x86)指令124执行重置后才会改变(请参照下述图6);亦即,在微处理器100正常运作而未由一般重置、重置至x86或重置至ARM指令124执行重置时,环境模式指针136并不会改变。
硬件指令转译器104接收x86与ARM ISA的机器语言指令124作为输入信号,相应地提供一个或多个微指令126作为输出信号以实现x86或ARMISA指令124。执行管线112执行前揭一个或多个微指令126,其集体执行的结果实现x86或ARM ISA指令124。也就是说,这些微指令126的集体执行可在x86或ARM ISA指令124所特定的输入端执行x86或是ARM ISA指令124所特定的操作,以产生x86或ARM ISA指令124所定义的结果。因此,硬件指令转译器104将x86或ARM ISA指令124转译为一个或多个微指令126。硬件指令转译器104包含一组晶体管,以一预设方式进行配置来将x86ISA与ARM ISA的机器语言指令124转译为微指令126。硬件指令转译器104并具有布尔逻辑(Boolean logic)门以产生微指令126(如图2所示的简单指令转译器204)。在一实施例中,硬件指令转译器104并具有一微码只读存储器(如图2中复杂指令转译器206的元件234)。硬件指令转译器104利用此微码只读存储器,并依据复杂ISA指令124产生微指令126。这在图2的说明内容会有进一步的说明。就一较佳实施例而言,硬件指令转译器104不必然要能转译x86程序员操作手册或是ARM程序员操作手册所定义的整个ISA指令124集,而只要能够转译这些指令的一个子集合(subset)即可。具体来说,由x86程序员操作手册定义且由硬件指令转译器104转译的ISA指令124的子集合,并不必然对应至任何Intel开发的既有x86ISA处理器,而由ARM程序员操作手册定义且由硬件指令转译器104转译的ISA指令124的子集合并不必然对应至任何由ARM Ltd.开发的既有的ISA处理器。前揭一个或多个用以实现x86或ARM ISA指令124的微指令126,可由硬件指令转译器104一次全部提供至执行管线112或是依序提供。本实施例的优点在于,硬件指令转译器104可将实行微指令126直接提供至执行管线112执行,而不需要将这些微指令126储存于设置其间的存储器。在图1的微处理器100的实施例中,当微处理器100执行x86或是ARM机器语言程序时,微处理器100每一次执行x86或是ARM指令124,硬件指令转译器104就会将x86或ARM机器语言指令124转译为一个或多个微指令126。不过,图8的实施例则是利用一微指令快取以避免微处理器100每次执行x86或ARM ISA指令124所会遭遇到的重复转译的问题。硬件指令转译器104的实施例在图2会有更详细的说明。
执行管线112执行由硬件指令转译器104提供的微指令126。基本上,执行管线112是一通用高速微指令处理器。虽然本文所描述的功能是由具有x86/ARM特定特征的执行管线112执行,不过,大多数x86/ARM特定功能其实是由此微处理器100的其它部分,如硬件指令转译器104,来执行。在一实施例中,执行管线112执行由硬件指令转译器104接收到的微指令126的寄存器重命名(register renaming)、超纯量技术(superscalar issue)、与脱序执行(out-of-order execution)。执行管线112在图4会有更详细的说明。
微处理器100的微架构包含:(1)微指令集;(2)微指令集的微指令126所能取用的资源集,此资源集是x86与ARM ISA的资源的超集(superset);以及(3)微处理器100相应于微指令126的执行所定义的微例外事件(micro-exception)集,此微例外事件集是x86ISA与ARM ISA的例外事件的超集。此微架构不同于x86ISA与ARM ISA。具体来说,此微指令集在许多面向是不同于x86ISA与ARM ISA的指令集。第一点,微指令集的微指令指示执行管线112执行的操作与x86ISA与ARM ISA的指令集的指令指示微处理器执行的操作并非一对一对应。虽然其中许多操作相同,不过,仍有一些微指令集特定的操作并非x86ISA与/或ARM ISA指令集所特定。相反地,有一些x86ISA与/或ARM ISA指令集特定的操作并非微指令集所特定。第二点,微指令集的微指令是以不同于x86ISA与ARM ISA指令集的指令的编码方式进行编码。也就是说,虽然有许多相同的操作(如:相加(add)、偏移(shift)、加载(load)、返回(return))在微指令集以及x86与ARM ISA指令集中都有特定,微指令集与x86或ARM ISA指令集的二进制操作码值对应表(binary opcode value-to-operation mapping)并没有一对一对应。微指令集与x86或ARM ISA指令集的二进制操作码值对应表相同通常是巧合,其间仍不具有一对一的对应关系。第三点,微指令集的微指令的位字段(field)与x86或是ARM ISA指令集的指令的位字段也不是一对一对应。
整体而言,微处理器100可执行x86ISA与ARM ISA机器语言程序指令。然而,执行管线112本身无法执行x86或ARM ISA机器语言指令;而是执行由x86ISA与ARM ISA指令转译成的微处理器100微架构的微指令集的微指令126。然而,虽然此微架构与x86ISA以及ARM ISA不同,本发明亦提出其它实施例将微指令集与其它微架构特定的资源是开放给使用者。在这些实施例中,此微架构可有效地作为在x86ISA与ARM ISA外的一个具有微处理器所能执行的机器语言程序的第三ISA。
下表(表1)描述本发明微处理器100的一实施例的微指令集的微指令126的一些位字段。
Figure BDA0000151558660000201
下表(表2)描述本发明微处理器100的一实施例的微指令集的一些微指令。
Figure BDA0000151558660000211
Figure BDA0000151558660000221
微处理器100也包含一些微架构特定的资源,如微架构特定的通用寄存器(general purpose register)、媒体寄存器(media register)与区段寄存器(segmentregister)(如用于重命名的寄存器或由微码所使用的寄存器)以及未见于x86或ARM ISA的控制寄存器(control register),以及一私人随机存取存储器(PRAM)。此外,此微架构可产生例外事件,亦即前述的微例外事件(micro-exception)。这些例外事件未见于x86或ARM ISA或是由其所特定,而通常是微指令126与相关微指令126的回放(replay)。举例来说,在加载错过(load miss)的情况,执行管线112承担加载操作并于错过时回放此加载微指令126;在错过转译后备缓冲区(TLB)的情况,在页表游荡(page table walk)与转译后备缓冲区填满后,回放此微指令126;在浮点微指令126接收一异常操作数(denormal operand)但此操作数被评估为正常的情况,需在执行管线112正常化此操作数后回放此微指令126;在一加载微指令126执行后检测到一个更早的储存(store)微指令126与其地址冲突(address-colliding)的情况下,在删除储存微指令后需要回放此加载微指令126。需理解的是,本文表1所列的位字段,表2所列的微指令,以及微架构特定的资源与微架构特定的例外事件,只是作为例示说明本发明的微架构,而非穷尽本发明的所有可能实施例。
寄存器文件106包含微指令126所使用的硬件寄存器,以抓取资源与/或目的操作数。执行管线112将其结果128写入寄存器文件106,并为微指令126由寄存器文件106接收操作数。硬件寄存器是引用(instantiate)x86ISA定义与ARM ISA定义的寄存器。在一实施例中,x86ISA与ARM ISA定义的许多通用寄存器是共享寄存器文件106中的一些寄存器。举例来说,在一实施例中,寄存器文件106是引用十五个32位的寄存器,由ARM ISA寄存器R0至R14以及x86ISA累积寄存器(EAX register)至R14D寄存器共享。因此,若是一第一微指令126将一数值写入ARM R2寄存器,随后一后续的第二微指令126读取x86累积寄存器将会接收到与第一微指令126写入相同的数值,反之亦然。此技术特征有利于使x86ISA与ARM ISA的机器语言程序得以快速通过寄存器进行沟通。举例来说,因为x86ISA可支持一些指令,其执行操作的速度快于ARM ISA,确保在ARM机器语言操作系统执行的ARM机器语言程序能够使指令模式132改变至x86ISA,并控制转换至一x86机器语言程序以执行特定功能,将有利的提升执行速度。ARM程序可提供需要的数据给寄存器文件106的共享寄存器的x86执行程序(routine)。反之,x86执行程序可提供寄存器文件106的共享寄存器内的结果,使ARM程序得以通过x86执行程序见到此结果。相似地,在x86机器语言操作系统执行的x86机器语言程序可使指令模式132改变至ARM ISA并控制转换至ARM机器语言程序。此x86程序可提供所需的数据给寄存器文件106的共享寄存器内的ARM执行程序,并且此ARM执行程序可提供寄存器文件106的共享寄存器内的结果,使x86程序得以通过ARM执行程序见到此结果。因为ARM R15寄存器是一独立引用的ARM程序计数器(PC)寄存器116,因此,引用x86R15D寄存器的第十六32位寄存器并不分享给ARM R15寄存器。此外,在一实施例中,x86的十六个128位XMM0至XMM15寄存器与十六个128位进阶单指令多重数据扩展(Advanced SIMD(“Neon”))寄存器的32位区段是分享给三十二个32位ARM VFPv3浮点寄存器。寄存器文件106亦引用旗标寄存器(flag register)(即x86EFLAGS寄存器与ARM条件旗标寄存器(conditionflags register)),以及x86ISA与ARM ISA定义的多种控制与状态(status)寄存器。这些架构控制与状态寄存器包括x86架构的特定模型寄存器(modelspecific registers,MSRs)与保留给ARM架构的协处理器(8-15)寄存器。此寄存器文件106亦引用非架构寄存器,如用于寄存器重命名或是由微码所用的非架构通用寄存器,以及非架构x86特定模型寄存器与实作定义(implementation-defined)或是制造商特定(vendor-specific)的ARM协处理器寄存器。寄存器文件106在图5会有更进一步的说明。
存储器子系统(subsystem)108包含一由高速缓存构成的高速缓存阶层架构(在一实施例中包含第1层(level-1)指令快取102、第1层(level-1)数据快取与第2层混合快取)。此存储器子系统108并包含多种存储器请求队列(memoryrequest queue),如加载(load)、储存(store)、填入(fill)、检测(snoop)、写入(write)归并缓冲区(combine buffer)。存储器子系统亦包含一存储器管理单元(memorymanagement unit,MMU)。存储器管理单元具有转译后备缓冲区(translationlookaside buffers,TLBs),尤以独立的指令与数据转译后备缓冲区为佳。存储器子系统还包含一查表引擎(table walk engine),以获得虚拟与实体地址间的转译,来回应转译后备缓冲区的错失。虽然在图1中指令快取102与存储器子系统108是显示为各自独立,不过,在逻辑上,指令快取102亦是存储器子系统108的一部分。存储器子系统108是设定来使x86与ARM机器语言程序分享一共同的存储空间,使x86与ARM机器语言程序容易通过存储器互相沟通。
存储器子系统108意识到指令模式132与环境模式136,而使其能够在适当ISA内容中执行多种操作。举例来说,存储器子系统108依据指令模式指针132指示为x86或ARM ISA,来执行特定存储器存取违规(memory accessviolation)的检验(例如过限检验(limit violation check))。在另一实施例中,响应环境模式指针136的改变,存储器子系统108会更新(flush)转译后备缓冲区;不过在指令模式指针132改变时,存储器子系统108并不相应地更新转译后备缓冲区,以在前述指令模式指针132与环境模式指针136分指x86与ARM的第三与第四模式中提供较佳的效能。在另一实施例中,回应一转译后备缓冲区错失(TKB miss),查表引擎依据环境模式指针136指示为x86或ARMISA,执行一分页查表操作(page table walk),利用x86分页表或ARM分页表构成转译后备缓冲区。在另一实施例中,若是环境状态指标136指示为x86ISA,存储器子系统108检查会影响快取策略的x86ISA控制寄存器(如CR0CD与NW位)的架构状态,若是环境模式指针136指示为ARM ISA,则检查相关的ARM ISA控制寄存器(如SCTLR I与C位)的架构模式。在另一实施例中,若是状态指标136指示为x86ISA,存储器子系统108检查会影响存储器管理的x86ISA控制寄存器(如CR0PG位)的架构状态,若是环境模式指针136指示为ARM ISA,则检查相关的ARM ISA控制寄存器(如SCTLR M位)的架构模式。在另一实施例中,若是状态指标136指示为x86ISA,存储器子系统108检查会影响对准检测(alignment checking)的x86ISA控制寄存器(如CR0AM位)的架构状态,若是环境模式指针136指示为ARM ISA,则检查相关的ARM ISA控制寄存器(如SCTLR A位)的架构模式。在另一实施例中,若是状态指标136指示为x86ISA,存储器子系统108(以及用于特权指令(privilege instruction)的硬件指令转译器104)检查特定当前特权级(currentprivilege level,CPL)的x86ISA控制寄存器的架构状态,若是环境模式指针136指示为ARM ISA,则检查指示使用者或特权模式的相关ARM ISA控制寄存器的架构模式。不过,在一实施例中,x86ISA与ARM ISA分享微处理器100中具有相似功能的控制字节/寄存器,微处理器100并不对各个指令集架构引用独立的控制字节/寄存器。
虽然配置寄存器122与寄存器文件106在图标中是各自独立,不过配置寄存器122可被理解为寄存器文件106的一部分。配置寄存器122具有一全域配置寄存器,用以控制微处理器100在x86ISA与ARM ISA各种不同面向的操作,例如使多种特征生效(enable)或失效(disable)的功能。全域配置寄存器可使微处理器100执行ARM ISA机器语言程序的能力失效,即让微处理器100成为一个仅能执行x86指令的微处理器100,并可使其它相关且专属于ARM的能力(如退出x86(launch-x86)与重置至x86(reset-to-x86)的指令124与本文所称的实作定义(implementation-defined)协处理器寄存器)失效。全域配置寄存器亦可使微处理器100执行x86ISA机器语言程序的能力失效,亦即让微处理器100成为一个仅能执行ARM指令的微处理器100,并可使其它相关的能力(如退出ARM(launch-ARM)与重置至ARM(reset-to-ARM)的指令124与本文所称的新的非架构特定模型寄存器(MSRs))失效。在一实施例中,微处理器100制造时具有预设的配置设定,如微码234中的硬式编码值(hardcodedvalue),此微码234在启动时利用此硬式编码值来设定微处理器100的配置,例如写入编码寄存器122。不过,部分编码寄存器122是以硬件而非以微码234进行设定。此外,微处理器100具有多个熔丝,可由微码234进行读取。这些熔丝可被熔断以修改预设配置值。在一实施例中,微码234读取熔丝值,对预设值与熔丝值执行一或非(exclusive-OR)操作,并将操作结果写入配置寄存器122。此外,对于熔丝值修改的效果可利用一微码234补丁(patch)回复。在微处理器100能够执行x86与ARM程序的情况下,全域配置寄存器可用于确认微处理器100(如图7所示处理器的一多核心部分的一特定核心100)在重置或如图6所示在响应x86形式的INIT指令时,会以x86微处理器的形态还是以ARM微处理器的形态进行开机。全域配置寄存器并具有一些位提供起始预设值给特定的架构控制寄存器,如ARM ISA SCTLT与CPACR寄存器。图7所示的多核心的实施例中仅具有一个全域配置寄存器,即使各核心的配置可分别设定(如在指令模式指针132与环境模式指针136都设定为x86或ARM时,选择以x86核心或是ARM核心开机)。此外,退出ARM(launch-ARM)指令126与退出x86(launch-x86)指令126可用以在x86与ARM指令模式132间动态切换。在一实施例中,全域配置寄存器可通过一x86RDMSR指令对一新的非架构特定模型寄存器进行读取,并且,其中部分的控制位是可通过x86WRMSR指令写入前揭新的非架构特定模型寄存器。全域配置寄存器还可通过ARM MCR/MCRR指令对一对应至前揭新的非架构特定模型寄存器的ARM协处理器寄存器进行读取,而其中部分的控制位可通过ARMMRC/MRRC指令写入对应至此新的非架构特定模型寄存器的ARM协处理器寄存器。
配置寄存器122并包含多种不同的控制寄存器从不同面向控制微处理器100的操作。这些非专属于x86/ARM的控制寄存器包括本文所称的全域控制寄存器、非指令集架构控制寄存器、非x86/ARM控制寄存器、通用控制寄存器(generic control registers)、以及其它类似的寄存器。在一实施例中,这些控制寄存器可利用x86RDMSR/WRMSR指令至非架构特定模型寄存器(MSRs)进行存取,以及利用ARM MCR/MRC(或MCRR/MRRC)指令至非实作定义的协处理器寄存器进行存取。举例来说,微处理器100包含非专属于x86/ARM的控制寄存器,以确认微型快取控制(fine-grained cache control),此微型快取控制是小于x86ISA与ARM ISA控制寄存器所能提供者。
在一实施例中,微处理器100提供ARM ISA机器语言程序通过实作定义ARM ISA协处理器寄存器存取x86ISA特定模型寄存器的机会。这些实作定义ARM ISA协处理器寄存器是直接对应于相对应的x86特定模型寄存器。此特定模型寄存器的地址是特定于ARM ISA R1寄存器。此数据是由MRC/MRRC/MCR/MCRR指令所特定的ARM ISA寄存器读出或写入。在一实施例中,特定模型寄存器的一子集合是以密码保护,亦即指令在尝试存取特定模型寄存器时必须使用密码。在此实施例中,密码是特定于ARM R7:R6寄存器。若是此存取操作导致x86通用保护(general protection)产生错误,微处理器100随即产生一ARM ISA未定义指令中止模式(UND)例外事件。在一实施例中,ARM协处理器4(地址为:0,7,15,0)用以存取相对应的x86特定模型寄存器。
微处理器100并包含一个耦接至执行管线112的中断控制器(interruptcontroller)(未图示)。在一实施例中,此中断控制器是一x86型式的先进可编程中断控制器(advanced programmable interrupt controller,APIC)。中断控制器将x86ISA中断事件(interrupts)对应(map)至ARM ISA中断事件。在一实施例中,x86INTR是对应至ARM IRQ中断事件;x86NMI是对应至ARM IRQ中断事件;x86INIT会引发一个微处理器100依循的起动重置循序过程(INIT-reset sequence)而无论那一个指令集架构(x86或ARM)原本是由硬件重置启动的;x86SMI是对应至ARM FIQ中断事件;以及x86STPCLK、A20、Thermal、PREQ、与Rebranch是对应至ARM中断事件。ARM机器语言程序生效后,能够通过新的实作定义的ARM协处理器寄存器存取先进可编程中断控制器(APIC)的功能。在一实施例中,APIC寄存器地址是特定于ARM R0寄存器,此APIC寄存器的地址与x86的地址相同。在一实施例中,ARM协处理器6用于操作系统通常需执行的特权模式功能(privileged modefunctions)。此ARM协处理器6的地址为:0,7,nn,0;其中nn是15以存取先进可编程中断控制器(APIC);nn是12-14以存取总线接口单元(bus interfaceunit,BIU)藉以在处理器总线上执行8位、16位与32位输入/输出循环(cycles)。微处理器100并包含一总线接口单元(未图标)。此总线接口单元耦接至存储器子系统108与执行管线112,作为微处理器100与处理器总线的接口。在一实施例中,处理器总线符合一个Intel Pentium微处理器家族的微处理器的总线的规格。ARM机器语言程序生效后,能够通过新的实作定义的ARM协处理器寄存器存取总线接口单元的功能以在处理器总线上产生输入/输出循环,即由输入输出总线传送至输入输出空间(I/O space)的一特定地址,藉以与系统芯片组沟通。举例来说,ARM机器语言承式可产生一SMI认可(acknowledgement)的特定循环或是关于C状态转换(C-state transitions)的输入输出循环。在一实施例中,输入输出地址是特定于ARM R0寄存器。在一实施例中,微处理器100并具有电力管理能力,如已知的P-state与C-state管理。ARM机器语言程序生效后是通过新的实作定义ARM协处理器寄存器执行电力管理。在一实施例中,微处理器100并包含一加密单元(encryption unit)(未图标)。此加密单元是位于执行管线112内。在一实施例中,此加密单元实质上是类似于具有Padlock安全科技功能的VIA微处理器的加密单元。ARM机器语言程序能够通过新的实作定义的ARM协处理器寄存器取得加密单元的功能,如加密指令。在一实施例中,ARM协处理器5用于通常由使用者模式应用程序执行的使用者模式功能,例如那些使用加密单元的技术特征所产生的功能。
在微处理器100执行x86ISA与ARM ISA机器语言程序时,每一次微处理器100执行x86或是ARM ISA指令124,硬件指令转译器104就会执行硬件转译。反之,采用软件转译的系统则能在多个事件中重复使用同一个转译,而非对之前已转译过的机器语言指令重复转译,因而有助于改善效能。此外,图8的实施例使用微指令快取以避免微处理器每一次执行x86或ARM ISA指令124时可能发生的重复转译操作。本发明的前述各个实施例所描述的方式,配合不同的程序的特征及其执行环境,确实有助于改善效能。
分支预测器(branch predictor)114存取之前执行过的x86与ARM分支指令的历史数据。在依据之前的快取历史数据由指令快取102取得x86与ARM分支指令124时,分支预测器114预测快取管线(cache line)内的x86与ARM分支指令124的出现与目标地址。在一实施例中,快取历史数据包含分支指令124的存储器地址、分支目标地址、一个方向指针(taken/not taken)、分支指令的种类、分支指令的快取管线的起始字节、以及一个显示是否横跨多个快取管线的指令。在一实施例中,如2011年4月7日提出的美国第61/473,067号临时申请案“APPARATUS AND METHOD FOR USING BRANCHPREDICTION TO EFFICIENTLY EXECUTE CONDITIONAL NON-BRANCHINSTRUCTIONS”,其提供改善分支预测器114的效能以使其能预测ARM ISA条件非分支指令方向的方法。在一实施例中,硬件指令转译器104并包含一静态分支预测器(static branch predictor),可依据执行码(opcode)、条件码的类型、向后(backward)或向前(forward)等等数据,预测x86与ARM分支指令的方向与分支目标地址。
本发明思及多种不同的实施例以实现x86ISA与ARM ISA定义的不同特征的组合。举例来说,在一实施例中,微处理器100实现ARM、Thumb、ThumbEE与Jazelle指令集状态,但对Jazelle扩充指令集则是提供无意义的实现(trivial implementation);微处理器100并实现下述扩充指令集,包含:Thumb-2、VFPv3-D32、进阶单指令多重数据(Advanced SIMD(Neon))、多重处理(multiprocessing)、与VMSA;但不实现下述扩充指令集,包含:安全性扩充、快速内容切换扩充(fast context switch extension)、ARM除错(ARM程序可通过ARM MCR/MRC指令至新的实作定义协处理器寄存器取得x86除错功能)、效能检测计数器(performance monitoring counters)(ARM程序可通过新的实作定义协处理器寄存器取得x86效能计数器)。举例来说,在一实施例中,微处理器100将ARM SETEND指令视为一无操作指令(NOP)并且只支持Little-endian数据格式。在另一实施例中,微处理器100并不实现x86SSE 4.2的功能。
本发明思及多个实施例的微处理器100,是依据台湾台北的威盛电子股份有限公司(VIA Technologies,Inc.)所生产的商业化微处理器VIANanoTM进行改良。此Nano微处理器能够执行x86ISA机器语言程序,但无法执行ARMISA机器语言程序。Nano微处理器包含高效能寄存器重命名(high performanceregister-renaming)、超纯量指令技术(superscalar instruction issue)、乱序(out-of-order)执行管线与一硬件转译器以将x86ISA指令转译为微指令供执行管线执行。本发明对于Nano硬件指令转译器的改良,使其除了可转译x86机器语言指令外,还可将ARM ISA机器语言指令转译为微指令供执行管线执行。硬件指令转译器的改良包含简单指令转译器的改良与复杂指令转译器的改良,亦包含微码在内。此外,微指令集可加入新的微指令以支持ARM ISA机器语言指令与微指令间的转译过程,并可改善执行管线使能执行新的微指令。此外,Nano寄存器文件与存储器子系统亦可经改善使其能支持ARM ISA,亦包含特定寄存器的共享。分支预测单元可通过改善使其在x86分支预测外,亦能适用于ARM分支指令预测。此实施例的优点在于,因为在很大的程度上可以排除ISA的限制,因而只需对于Nano微处理器的执行管线进行轻微的修改,即可适用于ARM ISA指令。对于执行管线的改良包含条件码旗标的产生与使用方式、用以更新与回报指令指针寄存器的语意(semantics)、存取特权保护方法(access privilege protection method)、以及多种存储器管理相关的功能,如存取违规检测(access violation checks)、分页与转译后备缓冲区(TLB)的使用、与快取策略等。前述内容仅为例示,而非限定本发明。其中部分特征在后续内容会有进一步的说明。最后,如前述,x86ISA与ARM ISA定义的部分特征可能无法为前揭对Nano微处理器进行改良的实施例所支持,这些特征如x86SSE 4.2与ARM安全性扩充、快速内容切换扩充、除错与效能计数器。其中部分特征在后续内容会有更进一步的说明。此外,前揭通过对于Nano处理器的改良以支持ARM ISA机器语言程序,为一集成使用设计、测试与制造的资源以完成能够执行x86与ARM机器语言程序的单集成电路产品的实施例。此单集成电路产品是涵盖市场绝大多数既存的机器语言程序,而符合现今市场潮流。本文所述的微处理器100的实施例实质上可被配置为x86微处理器、ARM微处理器、或是可同时执行x86ISA与ARM ISA机器语言程序微处理器。此微处理器可通过在单一微处理器100(或是图7的核心100)上的x86与ARM指令模式132间的动态切换,取得同时执行x86ISA与ARM ISA机器语言程序的能力,亦可通过将多核心微处理100(对应于图7所示)的一个或多个核心配置为ARM核心、配置为x86核心、或配置至二者,即通过在多核心100的每一个核心上进行x86与ARM指令间的动态切换,以取得同时执行x86ISA与ARM ISA机器语言程序的能力。此外,传统上,ARM ISA核心是被设计作为知识产权(intellectual property)核心,而被各个第三者协力厂商纳入其应用,如系统芯片(SOC)与/或嵌入式应用。因此,ARMISA并不具有一特定的标准处理器总线,作为ARM核心与系统的其它部分(如芯片组或其它接口设备)间的接口。有利的是,Nano处理器已具有一高速x86型式处理器总线作为连接至存储器与接口设备的接口,以及一存储器一致性结构(memory coherency structure)可协同微处理器100在x86计算机系统环境下支持ARM ISA机器语言程序的执行。
请参照图2,图中是以方块图详细显示图1的硬件指令转译器104。此硬件指令转译器104包含硬件,更具体来说,就是晶体管的集合。硬件指令转译器104包含一指令格式化程序202,由图1的指令快取102接收指令模式指针132以及x86ISA与ARM ISA指令字节124的区块(blocks),并输出格式化的(formatted)x86ISA与ARM ISA指令242;一简单指令转译器(SIT)204接收指令模式指针132与环境模式指针136,并输出实行微指令(implementingmicroinstructions)244与一微码地址252;一复杂指令转译器(CIT)206(亦称为一微码单元),接收微码地址252与环境模式指针136,并提供实行微指令246;以及一多工器(mux)212,其一输入端由简单指令转译器204接收微指令244,另一输入端由复杂指令转译器206接收微指令246,并提供实行微指令126至图1的执行管线112。指令格式化程序202在图3会有更详细的说明。简单指令转译器204包含一x86简单指令转译器222与一ARM简单指令转译器224。复杂指令转译器206包含一接收微码地址252的微程序计数器(micro-program counter,micro-PC)232,一由微程序计数器232接收只读存储器地址254的微码只读存储器234,一用以更新微程序计数器的微程序器(microsequencer)236、一指令间接寄存器(instruction indirection register,IIR)235、以及一用以产生复杂指令转译器所输出的实行微指令246的微转译器(microtranslator)237。由简单指令转译器204所产生的实行微指令244与由复杂指令转译器206所产生的实行微指令246都属于微处理器100的微架构的微指令集的微指令126,并且都可间接由执行管线112执行。
多工器212是受到一选择输入248所控制。一般的时候,多工器212会选择来自简单指令转译器204的微指令;然而,当简单指令转译器204遭遇一复杂x86或ARM ISA指令242,而将控制或陷阱(traps)转移至复杂指令转译器206时,简单指令转译器204控制选择输入248让多工器212选择来自复杂指令转译器的微指令246。当寄存器配置表(RAT)402(请参照图4)遭遇到一个微指令126具有一特定字节指出其为实现复杂ISA指令242循序过程的最后一个微指令126,寄存器配置表402随即控制选择输入248使多工器212回复至选择来自简单指令转译器204的微指令244。此外,当重排缓冲器422(请参照图4)准备要使微指令126引退时,重排缓冲器(reorder buffer)422控制选择输入248使多工器212选择来自复杂指令转译器206的微指令246。前揭需引退微指令126的情形如:微指令126已经导致一例外条件(exceptioncondition)产生。
简单指令转译器204接收ISA指令242,并且在指令模式指针132指示为x86时,将这些指令视为x86ISA指令进行解码,而在指令模式指针132指示为ARM时,将这些指令视为ARM ISA指令进行解码。简单指令转译器204并确认此ISA指令242为简单或是复杂ISA指令。简单指令转译器204能够为简单ISA指令242,输出所有用以实现此ISA指令242的实行微指令126;也就是说,复杂指令转译器206并不提供任何实行微指令126给简单ISA指令124。反之,复杂ISA指令124要求复杂指令转译器206提供至少部分的实行微指令126。在一实施例中,对ARM与x86ISA指令集的指令124的子集合而言,简单指令转译器204输出部分实现x86/ARM ISA指令126的微指令244,并且随后将控制权转移至复杂指令转译器206,由复杂指令转译器206接续输出剩下的微指令246来实现x86/ARM ISA指令126。多工器212是受到控制,首先提供来自简单指令转译器204的实行微指令244作为提供至执行管线112的微指令126,随后提供来自复杂指令转译器206的实行微指246作为提供至执行管线112的微指令126。简单指令转译器204知道由硬件指令转译器104执行,以针对多个不同复杂ISA指令124产生实行微指令126的多个微码程序(rountines)中的起始微码只读存储器234的地址,并且,当简单指令转译器204对一复杂ISA指令242进行解码时,简单指令转译器204会提供相对应的微码程序地址252至复杂指令转译器206的微程序计数器232。简单指令转译器204输出实现ARM与x86ISA指令集中相当大比例的指令124所需的微指令244,尤其是对于需要由x86ISA与ARM ISA机器语言程序以高时钟执行的ISA指令124,而只有相对少数的指令124需要由复杂指令转译器206提供实行微指令246。依据一实施例,主要由复杂指令转译器206实现的x86指令如RDMSR/WRMSR、CPUID、复杂运算(complexmathematical)指令(如FSQRT与超越指令(transcendental instruction))、以及IRET指令;主要由复杂指令转译器206实现的ARM指令如MCR、MRC、MSR、MRS、SRS、与RFE指令。前揭列出的指令并非限定本发明,而仅例示指出本发明复杂指令转译器206所能实现的ISA指令的种类。
当指令模式指针132指示为x86,x86简单指令转译器222对于x86ISA指令242进行解码,并且将其转译为实行微指令244;当指令模式指针132指示为ARM,ARM简单指令转译器224对于ARM ISA指令242进行解码,并将其转译为实行微指令244。在一实施例中,简单指令转译器204是一可由已知合成工具(synthesis tool)合成的布尔逻辑门(Boolean logic gates)方块。在一实施例中,x86简单指令转译器222与ARM简单指令转译器224是独立的布尔逻辑门方块;不过,在另一实施例中,x86简单指令转译器222与ARM简单指令转译器224是位于同一个布尔逻辑门方块。在一实施例中,简单指令转译器204在单一时钟周期(clock cycle)中转译最多三个ISA指令242并提供最多六个实行微指令244至执行管线112。在一实施例中,简单指令转译器204包含三个次转译器(未图示),各个次转译器转译单一个格式化的ISA指令242,其中,第一次转译器能够转译需要不多于三个实行微指令126的格式化ISA指令242;第二次转译器能够转译需要不多于两个实行微指令126的格式化ISA指令242;第三次转译器能后转译需要不多于一个实行微指令126的格式化ISA指令242。在一实施例中,简单指令转译器204包含一硬件状态机器(hardware state machine)使其能够在多个时钟周期输出多个微指令244以实现一个ISA指令242。
在一实施例中,简单指令转译器204并依据指令模式指针132与/或环境模式指针136,执行多个不同的例外事件检测操作(exception check)。举例来说,若是指令模式指针132指示为x86且x86简单指令转译器222对一个就x86ISA而言是无效的ISA指令124进行解码,简单指令转译器204随即产生一个x86无效操作码例外事件(invalid opcode exception);相似地,若是指令模式指针132指示为ARM且ARM简单指令转译器224对一个就ARM ISA而言是无效的ISA指令124进行解码,简单指令转译器204随即产生一个ARM未定义指令例外事件。在另一实施例中,若是环境模式指针136指示为x86ISA,简单指令转译器204随即检测是否其所遭遇的各个x86ISA指令242需要一特别特权级(particular privilege level),若是,检测当前特权级(CPL)是否满足此x86ISA指令242所需的特别特权级,并于不满足时产生一例外事件(exception);相似地,若是环境模式指针136指示为ARM ISA,简单指令转译器204随即检测是否各个格式化ARM ISA指令242需要一特权模式指令(privileged mode instruction),若是,检测当前的模式是否为特权模式,并于现在模式为使用者模式时,产生一例外事件。复杂指令转译器206对于特定复杂ISA指令242亦执行类似的功能。
复杂指令转译器206输出一系列实行微指令246至多工器212。微码只读存储器234储存微码程序的只读存储器指令247。微码只读存储器234输出只读存储器指令247以响应由微码只读存储器234取得的下一个只读存储器指令247的地址,并由微程序计数器232所抓取。一般来说,微程序计数器232由简单指令转译器204接收其起始值252,以响应简单指令转译器204对于一复杂ISA指令242的解码操作。在其它情形,例如响应一重置或例外事件,微程序计数器232分别接收重置微码程序地址(reset microcode routineaddress)或适当的微码例外事件处理地址(microcode exception handleraddress)。微程序器236通常依据只读存储器指令247的尺寸,将微程序计数器232更新为微码程序的序列(sequence)以及选择性地更新为执行管线112响应控制型微指令126(如分支指令)执行所产生的目标地址,以使指向微码只读存储器234内的非程序地址的分支(branch)生效。微码只读存储器234是制造于微处理器100的半导体芯片内。
除了实现简单ISA指令124或部分复杂ISA指令124的微指令244外,简单指令转译器204也产生ISA指令信息255写入指令间接寄存器(IIR)235。储存于指令间接寄存器(IIR)235的ISA指令信息255包含关于被转译的ISA指令124的信息,例如,确认由ISA指令所特定的来源与目的寄存器的信息以及ISA指令124的格式,如ISA指令124是在存储器的一操作数上或是在微处理器100的一架构寄存器106内执行。藉此使微码程序能够变为通用,亦即不需对于各个不同的来源与/或目的架构寄存器106使用不同的微码程序。尤其是,简单指令转译器204很清楚寄存器文件106的内容,包含哪些寄存器是共享寄存器504,而能将x86ISA与ARM ISA指令124内提供的寄存器信息,通过ISA指令信息255的使用,转译至寄存器文件106内的适当的寄存器。ISA指令信息255包含一移位字段(displacement field)、一立即字段(immediate field)、一常数字段(constant field)、各个源操作数与微指令126本身的重命名信息(rename information)、用以实现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是存储器格式(memory form),简单指令转译器204会产生微指令244的逻辑编程(prolog),包含将源操作数由存储器加载一暂时寄存器(temporary register)106的微指令244,并且微转译器237会产生微指令246将结果由暂时寄存器106储存至存储器。然而,若是复杂ISA指令124是寄存器格式(register form),此逻辑编程会将源操作数由ISA指令124所特定的来源寄存器移动至暂时寄存器,并且微转译器237会产生微指令246将结果由暂时寄存器移动至由间接指令寄存器235所特定的架构目的寄存器106。在一实施例中,微转译器237的许多面向是类似于2010年4月23日提出的美国专利第12/766,244号申请案,在此是列为参考数据。不过,本案的微转译器237除了x86ISA指令124外,亦经改良以转译ARMISA指令124。
值得注意的是,微程序计数器232不同于ARM程序计数器(PC)116与x86指令指针(IP)118,亦即,微程序计数器232并不抓取ISA指令124的地址,为程序计数器232所抓取的地址并不落于系统存储器地址空间内。此外,更值得注意的是,微指令246是由硬件指令转译器104所产生,并且直接提供给执行管线112执行,而非作为执行管线112的执行结果128。
请参照图3,图中是以方块图详述图2的指令格式化程序202。指令格式化程序202由图1的指令快取102接收x86ISA与ARM ISA指令字节124区块(block)。凭借x86ISA指令长度可变的特性,x86指令124可以由指令字节124区块的任何字节开始。在x86ISA容许前缀字节(prefix byte)而其长度会受到当前地址长度与操作数长度预设值的影响的事实情况下,确认快取区块内的x86ISA指令的长度与位置的任务会更为复杂。此外,依据当前ARM指令集状态322与ARM ISA指令124的操作码,ARM ISA指令的长度不是2字节就是4字节,并且不是2字节对齐就是4字节对齐。因此,指令格式化程序202由指令字节124串(stream)撷取不同的x86ISA与ARM ISA指令,此指令字节124串是由指令快取102接收的区块所构成。也就是说,指令格式化程序202格式化x86ISA与ARM ISA指令字节串,因而大幅简化图2的简单指令转译器对ISA指令124进行解码与转译的困难任务。
指令格式化程序202包含一预解码器(pre-decoder)302,在指令模式指针132指示为x86时,预解码器302预先将指令字节124视为x86指令字节进行解码以产生预解码信息(pre-decode imformation),在指令模式指针132指示为ARM时,预解码器302预先将指令字节124视为ARM指令字节进行解码。指令字节队列(IBQ)304接收ISA指令字节124区块以及由预解码器302产生的相关预解码信息。
一个由长度解码器(length decoders)与涟波逻辑门(ripple logic)306构成的阵列接收指令字节队列(IBQ)304的底部项目(bottom entry)的内容,亦即ISA指令字节124区块与相关于预解码信息。此长度解码器与涟波逻辑门306亦接收指令模式指针132与ARM ISA指令集状态322。在一实施例中,ARM ISA指令集状态322包含ARM ISA CPSR寄存器的J与T位。响应其输入信息,此长度解码器与涟波逻辑门306产生解码信息。此解码信息包含ISA指令字节124区块内的x86与ARM指令的长度、x86前缀信息(prefix information)、以及关于各个ISA指令字节124的指针。此指针指出此字节是否为ISA指令124的起始字节(start byte)、终止字节(end byte)、以及/或一有效字节。一多工器队列(mux queue,MQ)308接收ISA指令字节126区块、由预解码器302产生的相关预解码信息、以及由长度解码器与涟波逻辑门306产生的相关解码信息。
控制逻辑(未图标)检验多工器队列(MQ)308的底部项目的内容,并控制多工器312撷取不同的或格式化的ISA指令与相关的预解码与解码信息,这些撷取的信息是提供至一格式化指令队列(formatted instruction queue,FIQ)314。格式化指令队列(FIQ)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外,还能格式化ARM ISA指令124。长度解码器306被修改,使能对ARM ISA指令124进行解码以产生其长度以及起点、终点与有效性的字节指针。尤其,若是指令模式指针132指示为ARM ISA,长度解码器306检测当前ARM指令集状态322与ARM ISA指令124的操作码,以确认ARM指令124是一个2位组长度或是4位组长度的指令。在一实施例中,长度解码器306包含多个独立的长度解码器分别用以产生x86ISA指令124的长度数据以及ARM ISA指令124的长度数据。这些独立的长度解码器的三状态输出(tri-state)是线或(wire-ORed)连接在一起,以提供输出至涟波逻辑门306。在一实施例中,此格式化指令队列(FIQ)314包含独立的队列以抓取格式化指令242的多个互相分离的部分。在一实施例中,指令格式化程序202在单一时钟周期内,提供简单指令转译器204至多三个格式化ISA指令242。
请参照图4,图中是以方块图详细显示图1的执行管线112。此执行管线112是耦接至硬件指令转译器104以直接接收来自图2的硬件指令转译器104的实行微指令。执行管线112包含一微指令队列401,以接收微指令126;一寄存器配置表(register allocation table,RAT)402,由微指令队列401接收微指令;一指令调度器(instruction dispatcher)404,耦接至寄存器配置表402;多个保留站(reservation station)406,耦接至指令调度器404;一指令发送单元(instruction issue unit)408,耦接至保留站406;一重排缓冲器(reorder buffer,ROB)422,耦接至寄存器配置表402、指令调度器404与保留站406,并且,执行单元424是耦接至保留站406、指令发送单元408与重排缓冲器422。寄存器配置表402与执行单元424接收指令模式指针132。
在硬件指令转译器104产生实行微指令126的速率(rate)不同于执行管线112执行微指令126的情况下,微指令队列401是作为一缓冲器。在一实施例中,微指令队列401包含一个M至N可压缩微指令队列。此可压缩微指令队列使执行管线112能够在一给定的时钟周期内,从硬件指令转译器104接收至多到M个(在一实施例中,M是六)微指令126,并且随后将接收到的微指令126储存至宽度为N(在一实施例中,N是三)的队列结构,以在每个时钟周期提供至多N个微指令126至寄存器配置表402。此寄存器配置表402能够在每个时钟周期处理最多N个微指令126。微指令队列401可通过压缩使其中的项目(entry)不留下空洞(hole),而非在硬件指令转译器104接收到微指令126时依序利用微指令126填满队列的空项目,而不论接收到微指令126的特定时钟周期为何。此方法能够充分利用执行单元424(请参照图4),对在一不可压缩宽度M或宽度M的指令队列,提供高指令吞吐量(throughput)的优点。具体来说,不可压缩宽度N的队列会需要硬件指令转译器104,尤其是简单指令转译器204,在之后的时钟周期内会重复转译一个或多个已经在之前的时钟周期内已经被转译过的ISA指令124。会这样做的原因是,不可压缩宽度N的队列无法在同一个时钟周期接收多于N个微指令126。重复转译将导致电力耗损。不过,不可压缩宽度M的队列虽然不需要简单指令转译器204重复转译,但却会在队列项目中产生空洞而导致浪费,因而需要更多列项目以及一个较大且更耗能的队列来提供相当的缓冲能力(bufferingcapability)。
寄存器配置表402是由微指令队列401接收微指令126并产生与微处理器100内进行中(pending)的微指令126的附属信息,寄存器配置表402并执行寄存器重命名操作增加微指令平行处理(microinstruciton parallelism),以利于执行管线112的超纯量(superscalar)、乱序执行能力(out-of-order executionability)。若是ISA指令124指示为x86,寄存器配置表402随后就会对应于微处理器100的x86ISA寄存器106,产生附属信息且执行相对应的寄存器重命名操作;反之,若是ISA指令124指示为ARM,寄存器配置表402随后就会对应于微处理器100的ARM ISA寄存器106,产生附属信息且执行相对应的寄存器重命名操作;不过,如前述,部分寄存器106可能是由x86ISA与ARM ISA所共享。寄存器配置表402亦在重排缓冲器422配置一项目给程序次序内的各个微指令126,藉此,即使微指令126可在相对应于其所欲实现的x86ISA与ARM ISA指令124的程序次序(program order)外执行,重排缓冲器422可使微指令126以及其相关的x86ISA与ARM ISA指令124退出程序次序。重排缓冲器422包含一环形队列(circular queue),此环形队列的各个项目是用以储存关于进行中的微指令126的信息。此信息除了其它事项,还包含微指令126执行状态(execution status)、一个确认微指令126所由转译的指令是x86或是ARM ISA指令124的标签(tag)、以及用以储存微指令126的结果的储存空间。
指令调度器404是由寄存器配置表402接收寄存器重命名微指令126与附属信息,并依据指令的种类以及执行单元424的可利用性,将微指令126及其附属信息调度(dispatch)至关联于适当的执行单元424的保留站406。此执行单元424将会执行微指令126。
对各个在保留站406中等待的微指令126而言,指令发布单元408检测到相关执行单元424可被利用且其附属信息被满足(如源操作数可被利用)并发布微指令126至执行单元424供执行。如前述,指令发布单元408所发布的微指令126,可执行于程序次序外以及以超纯量方式执行。
在一实施例中,执行单元424包含整数/分支(integer/branch)单元412、媒体单元(media unit)414、加载/储存(load/store)单元416、以及浮点(floating point)单元418。执行单元424执行微指令126以产生结果128提供至重排缓冲器422。虽然执行单元424并不大受到其所执行的微指令126是由x86或是ARMISA指令124转译而来的影响,执行单元424仍会使用指令模式指针132与环境模式指针136以执行相对较小的微指令126子集。举例来说,执行管线112管理旗标(flag)的产生,其管理会依据指令模式指针132指示为x86ISA或是ARM ISA而有些微不同,并且,执行管线112依据指令模式指针132指示为x86ISA或是ARM ISA,对x86EFLAGS寄存器或是程序状态寄存器(PSR)内的ARM条件码旗标(condition code flag)进行更新。在另一实例中,执行管线112对指令模式指针132进行取样(sample)以决定去更新x86指令指针(IP)118或ARM程序计数器(PC)116,还是更新共通的指令地址寄存器,此外,执行管线122亦藉此来决定使用x86或是ARM语意(semantics)执行前述操作。一旦微指令126变成微处理器100中最旧的已完成微指令126(亦即,在重排缓冲器422队列的排头且呈现已完成的状态)且其它用以实现相关的ISA指令124的所有微指令126均已完成,重排缓冲器422就会退出ISA指令124并释放与实行微指令126相关的项目。在一实施例中,微处理器100可在一时钟周期内退出至多三个ISA指令124。此处理方法的优点在于,执行管线112是一高效能、通用执行引擎,可执行支持x86ISA与ARM ISA指令124的微处理器100微架构的微指令126。
请参照图5,图中是以方块图详述图1的寄存器文件106。就一较佳实施例而言,寄存器文件106为独立的寄存器区块实体。在一实施例中,通用寄存器是由一具有多个读出埠与写入端口的寄存器文件实体来实现;其它寄存器可在实体上独立于此通用寄存器文件以及其它会存取这些寄存器但具有较少的读取写入端口的邻近功能方块。在一实施例中,部分非通用寄存器,尤其是那些不直接控制微处理器100的硬件而仅储存微码234会使用到的数值的寄存器(如部分x86MSR或是ARM协处理器寄存器),则是在一个微码234可存取的私有随机存取存储器(private random access memory,PRAM)内实现。不过,x86ISA与ARM ISA程序者无法见到此私有随机存取存储器,亦即此存储器并不在ISA系统存储器地址空间内。
总的来说,如图5所示,寄存器文件106在逻辑上是区分为三种,亦即ARM特定的寄存器502、x86特定的寄存器504、以及共享的寄存器506。在一实施例中,共享寄存器506包含十五个32位寄存器,由ARM ISA寄存器R0至R14以及x86ISA EAX至R14D寄存器所共享,另外有十六个128位寄存器由x86ISAXMM0至XMM15寄存器以及ARM ISA进阶单指令多重数据扩展(Neon)寄存器所共享,这些寄存器的部分是重迭于三十二个32位ARMVFPv3浮点寄存器。如前文图1所述,通用寄存器的共享意指由x86ISA指令124写入一共享寄存器的数值会被ARM ISA指令124在随后读取此共享寄存器时见到,反之亦然。此方式的优点在于,能够使x86ISA与ARM ISA程序通过寄存器互相沟通。此外,如前述,x86ISA与ARM ISA的架构控制寄存器的特定位亦可被引用为共享寄存器506。如前述,在一实施例中,x86特定模型寄存器可被ARM ISA指令124通过实作定义协处理器寄存器存取,因而是由x86ISA与ARM ISA所共享。此共享寄存器506可包含非架构寄存器,例如,条件旗标(condiction flags)的非架构同等物(non-architecturalequivalents),这些非架构寄存器同样由寄存器配置表402重命名。硬件指令转译器104会意识到哪一个寄存器是由x86ISA与ARM ISA所共享,因而会产生实行微指令126来存取正确的寄存器。
ARM特定的寄存器502包含ARM ISA所定义但未被包含于共享寄存器506的其它寄存器。x86特定的寄存器502包含x86ISA所定义但未被包含于共享寄存器506的其它寄存器。举例来说,ARM特定的寄存器502包含ARM程序计数器(PC)116、CPSR、SCTRL、FPSCR、CPACR、协处理器寄存器、多种意外事件模式的备用(banked)通用寄存器与程序状态保存寄存器(savedprogram status registers,SPSRs)等等。前文列出的ARM特定寄存器502并非为限定本案发明,而仅为例示以说明本发明。另外,举例来说,x86特定的寄存器504包含x86指令指针(EIP或IP)118、EFLAGS、R15D、64位的R0至R15寄存器的上面32位(亦即未落于共享寄存器506的部分)、区段寄存器(segment registers)(SS,CS,DS,ES,FS,GS)、x87FPU寄存器、MMX寄存器、控制寄存器(如CR0-CR3、CR8)等等。前文列出的x86特定寄存器504并非为限定本案发明,而仅为例示以说明本发明。
在一实施例中,微处理器100包含新的实作定义ARM协处理器寄存器,在指令模式指针132指示为ARM ISA时,此实作定义协处理器寄存器可被存取以执行x86ISA相关的操作。这些操作包含但不限于:将微处理器100重置为一x86ISA处理器(重置至x86(reset-to-x86)指令)的能力;将微处理器100初始化为x86特定的状态,将指令模式指针132切换至x86,并开始在一特定x86目标地址撷取x86指令124(退出至(launch-x86)指令)的能力;存取前述全域配置寄存器(global configuration register)的能力;存取x86特定寄存器(如EFLAGS)的能力,此x86寄存器是在ARM R0寄存器被识别出来,存取电力管理(如P状态与C状态的转换),存取处理器总线功能(如输入/输出循环)、中断控制器的存取、以及加密增压功能(encryption acceleration functionality)的存取。此外,在一实施例中,微处理器100包含新的x86非架构特定模型寄存器,在指令模式指针132指示为x86ISA时,此非架构特定模型寄存器可被存取以执行ARM ISA相关的操作。这些操作包含但不限于:将微处理器100重置为一ARM ISA处理器(重置至ARM(reset-to-ARM)指令)的能力;将微处理器100初始化为ARM特定的状态,将指令模式指针132切换至ARM,且开始在一特定ARM目标地址撷取ARM指令124(退出至ARM(launch-ARM)指令)的能力;存取前述全域配置寄存器的能力;存取ARM特定寄存器(如CPSR)的能力,此ARM寄存器是在EAX寄存器内被识别出来。
请参照图6A与6B,图中显示一流程说明图1的微处理器100的操作程序。此流程始于步骤602。
如步骤602所示,微处理器100是被重置。可向微处理器100的重置输入端发出信号来进行此重置操作。此外,在一实施例中,此微处理器总线是一x86型式的处理器总线,此重置操作可由x86型式的INIT命令进行。响应此重置操作,微码234的重置程序(reset routines)是被调用(invoke)来执行。此重置微码的操作包含:(1)将x86特定的状态504初始化为x86ISA所特定的预设数值;(2)将ARM特定的状态502初始化为ARM ISA所特定的预设数值;(3)将微处理器100的非ISA特定的状态初始化为微处理器100制造商所特定的预设数值;(4)将共享ISA状态506,如GPRs,初始化为x86ISA所特定的预设数值;以及(5)将指令模式指针132与环境模式指针136设定为指示x86ISA。在另一实施例中,不同于前揭操作(4)与(5),此重置微码将共享ISA状态506初始化为ARM ISA特定的预设数值,并将指令模式指针132与环境模式指针136设定为指示ARM ISA。在此实施例中,步骤638与642的操作并不需要被执行,并且,在步骤614之前,此重置微码会将共享ISA状态506初始化为x86ISA所特定的预设数值,并将指令模式指针132与环境模式指针136设定为指示x86ISA。接下来进入步骤604。
在步骤604,重置微码确认微处理器100是配置为一个x86处理器或是一个ARM处理器来进行开机(boot)。在一实施例中,如前述,预设ISA开机模式(boot mode)是硬式编码于微码,不过可通过熔断配置熔丝的方式,或利用一微码补丁(patch)来修改。在一实施例中,此预设ISA开机模式作为一外部输入提供至微处理器100,例如一外部输入接脚。接下来进入步骤606。在步骤606中,若是预设ISA开机模式为x86,就会进入步骤614;反之,若是预设开机模式为ARM,就会进入步骤638。
在步骤614中,重置微码使微处理器100开始由x86ISA特定的重置向量地址(reset vector address)撷取x86指令124。接下来进入步骤616。
在步骤616中,x86系统软件(如BIOS)是配置微处理器100来使用如x86ISARDMSR与WRMSR指令124。接下来进入步骤618。
在步骤618中,x86系统软件执行一重置至ARM(reset-to-ARM)的指令124。此重置至ARM的指令使微处理器100重置并以一ARM处理器的状态离开重置程序。然而,因为x86特定状态504以及非ISA特定配置状态不会因为重置至ARM的指令126而改变,此方式有利于使x86系统固件执行微处理器100的初步设定(initial configuration)并使微处理器100随后以ARM处理器的状态重开机(reboot),而同时还能使x86系统软件执行的微处理器100的非ARM配置配置维持完好。藉此,此方法能够使用“小型的”微开机码(micro-boot code)来执行ARM操作系统的开机程序,而不需要使用微开机码来解决如何配置微处理器100的复杂间题。在一实施例中,此重置至ARM指令系一x86WRMSR指令至一新的非架构特定模型寄存器。接下来进入步骤622。
在步骤622,简单指令转译器204对重置微码设陷,以响应复杂重置至ARM(conplex reset-to-ARM)指令124。此重置微码使ARM特定状态502初始化至由ARM ISA特定的预设数值。不过,重置微码并不修改微处理器100的非ISA特定的状态,而有利于保存步骤616执行所需的配置设定。此外,重置微码使共享ISA状态506初始化至ARM ISA特定的预设数值。最后,重置微码设定指令模式指针132与环境模式指针136以指示ARM ISA。接下来进入步骤624。
在步骤624中,重置微码使微处理器100开始在x86ISA EDX:EAX寄存器特定的地址撷取ARM指令124。此流程结束于步骤624。
在步骤638中,重置微码将共享ISA状态506,如GPRs,初始化至ARMISA特定的预设数值。接下来进入步骤642。
在步骤642中,重置微码设定指令模式指针132与环境模式指针136以指示ARM ISA。接下来进入步骤644。
在步骤644中,重置微码使微处理器100开始在ARM ISA特定的重置向量地址撷取ARM指令124。此ARM ISA定义两个重置向量地址,可由一输入来选择。在一实施例中,微处理器100包含一外部输入,以在两个ARM ISA定义的重置向量地址间进行选择。在另一实施例中,微码234包含在两个ARMISA定义的重置向量地址间的一预设选择,此预设选则可通过熔断熔丝以及/或是微码补丁来修改。接下来进入步骤646。
在步骤646中,ARM系统软件设定微处理器100来使用特定指令,如ARM ISAMCR与MRC指令124。接下来进入步骤648。
在步骤648中,ARM系统软件执行一重置至x86的指令124,来使微处理器100重置并以一x86处理器的状态离开重置程序。然而,因为ARM特定状态502以及非ISA特定配置状态不会因为重置至x86的指令126而改变,此方式有利于使ARM系统固件执行微处理器100的初步设定(initialconfiguration)并使微处理器100随后以x86处理器的状态重开机(reboot),而同时还能使由ARM系统软件执行的微处理器100的非x86配置配置维持完好。藉此,此方法能够使用“小型的”微开机码(micro-boot code)来执行x86操作系统的开机程序,而不需要使用微开机码来解决如何配置微处理器100的复杂问题。在一实施例中,此重置至x86指令系一ARM MRC/MRCC指令至一新的实作定义协处理器寄存器。接下来进入步骤652。
在步骤652中,简单指令转译器204对重置微码设陷,以响应复杂重置至x86指令124。重置微码使x86特定状态504初始化至x86ISA所特定的预设数值。不过,重置微码并不修改微处理器100的非ISA特定状态。此处理有利于保存步骤646所执行的配置设定。此外,重置微码使共享ISA状态506初始化至x86ISA所特定的预设数值。最后,重置微码设定指令模式指针132与环境模式指针136以指示x86ISA。接下来进入步骤654。
在步骤654中,重置微码使微处理器100开始在ARM ISA R1:R0寄存器所特定的地址撷取ARM指令124。此流程终止于步骤654。
请参照图7,图中是以一方块图说明本发明的一双核心微处理器700。此双核心微处理器700包含两个处理核心100,各个核心100包含有图1的微处理器100所具有的元件,藉此,各个核心均可执行x86ISA与ARM ISA机器语言程序。这些核心100可被设定为两个核心100都执行x86ISA程序、两个核心100都执行ARM ISA程序、或是一个核心100执行x86ISA程序而另一个核心100则是执行ARM ISA程序。在微处理器700的操作过程中,前述三种设定方式可动态改变。如图6的说明内容所述,各个核心100对于其指令模式指针132与环境模式指针136均具有一预设数值,此预设数值可利用熔丝或微码补丁修改。藉此,各个核心100可以独立地通过重置改变为x86或是ARM处理器。虽然图7的实施例仅具有二个核心100,在其它实施例中,微处理器700可具有多于二个核心100,而各个核心均可执行x86ISA与ARMISA机器语言程序。
请参照图8,图中是以一方块图说明本发明另一实施例的可执行x86ISA与ARM ISA机器语言程序的微处理器100。图8的微处理器100系类似于图1的微处理器100,其中的元件亦相似。然而,图8的微处理器100亦包含一微指令快取892。此微指令快取892存取由硬件指令转译器104产生且直接提供给执行管线112的微指令126。微指令快取892系由指令撷取单元114所产生的撷取地址提供索引。若是撷取地址134命中微指令快取892,执行管线112内的多工器(未图示)就选择来自微指令快取892的微指令126,而非来自硬件指令转译器104的微指令126。反之,多工器则是选择直接由硬件指令转译器104提供的微指令126。微指令快取的操作,通常亦称为追踪快取(trace cache),系微处理器设计的技术领域所已知的技术。微指令快取892所带来的优点在于,由微指令快取892撷取微指令126所需的时间通常会少于由指令快取102撷取指令124并且利用硬件指令转译器将其转译为微指令126的时间。在图8的实施例中,微处理器100在执行x86或是ARM ISA机器语言程序时,硬件指令转译器104不需要在每次执行x86或ARM ISA指令124时都执行硬件转译。亦即当实行微指令126已经存在于微指令快取892,就不需要执行硬件转译。
在此所述的微处理器的实施例的优点在于,其通过内建的硬件指令转译器来将x86ISA与ARM ISA指令转译为微指令集的微指令,而能执行x86ISA与ARM ISA机器语言程序。此微指令集系不同于x86ISA与ARM ISA指令集。微指令可利用微处理器的共享的执行管线来执行以提供实行微指令。在此所述的微处理器的实施例的优点在于,通过协同利用大量的ISA不可知(ISA-agnostic)的执行管线来执行由x86ISA与ARM ISA指令硬件转译来的微指令,微处理器的设计与制造所需的资源会少于两个独立设计制造的微处理器(亦即一个能够执行x86ISA机器语言程序,一个能够执行ARM ISA机器语言程序)所需的资源。此外,这些微处理器的实施例中,尤其是那些使用超纯量乱序(superscalar out-of-order)执行管线的微处理器,具有潜力能提供相较于既有ARM ISA处理器更高的效能。此外,这些微处理器的实施例亦具有潜力,相较于采用软件转译器的系统,在x86与ARM的执行上能提供更高的效能。最后,由于微处理器可执行x86ISA与ARM ISA机器语言程序,此微处理器有利于建构一个能够高效能同时执行x86与ARM机器语言程序的系统。
条件算术与逻辑单元(CONDITIONAL ALU)指令
对微处理器而言,在指令集中内含让指定被条件执行的功能是令人想要的。条件执行指令的意思就是,指令会特定一条件(如零、或负、或大于),如果满足条件旗标(condition flag),此条件就会由微处理器执行,如果不满足条件旗标,条件就不会执行。如前述,ARM ISA不仅只提供此功能至分支指令,还提供至其指令集中的大部分的指令。被条件执行的指令会特定来自通用寄存器的源操作数,以产生一结果写入通用目地寄存器。专利权人为ARMLimited,of Cambridge,Great Britain的美国第7,647,480号专利案即描述一处理条件指令的数据处理装置。一般而言,一管线处理单元执行一条件指令以产生一结果数据数值。此结果数据数值在条件满足时,显示条件指令特定的计算的结果,而在条件不满足时,显示储存于目的寄存器的现今数据数值(current data value)。两个可能的解决方案系描述于下列段落。
在第一个解决方案中,指令集内的各个条件指令系被限制为,该指令条件所特定的寄存器系同时为来源寄存器以及目的寄存器。使用此方式,条件指令只会占据寄存器文件的两个读出埠,即提供现今目的寄存器数值作为一源操作数,以及提供其它源操作数。因此,此第一个解决方案可进一步降低支持管线处理单元执行条件指令所需的最低限度的寄存器文件读出端口的数量。
第二个解决方案移除第一个解决方案中对于条件指令的限制,藉此,条件指令可以特定独立的目的寄存器与来源寄存器。第二个解决方案需要使用寄存器文件一个额外的读出埠,以使能在单一周期内读取条件指令所需的操作数数据数值(即来自寄存器文件的源操作数与目的操作数)。因为第二个解决方案不仅需要为额外的读出埠付出成本,还需要较大数量的位来特定条件指令与更为复杂的数据路径,美国专利第7,647,480号专利案系选择第一个解决方案为其标的。具体来说,此数据路径需要为来自寄存器文件的三个输入路径提供逻辑处理,并且还可能需要导向逻辑(forwarding logic)以耦接至此三个路径中的任何一个。
在此提出的实施例的优点在于,其能使条件指令特定不同于目的寄存器的源操作数寄存器,并且不需要在寄存器文件使用一个额外的读出埠。一般而言,依据本发明的实施例,图1的微处理器100的硬件指令转译器104将一条件执行ISA指令124转译为由一个或多个微指令126构成的序列(sequence),供执行管线112执行。执行此序列的最后一个微指令126的执行单元424除了确认条件是否满足,亦接收到由条件指令124特定的目的寄存器的原本数值。前一个微指令126,或是最后一个微指令126本身,会对源操作数执行一操作以产生一结果。若是条件不满足,执行此序列的最后一个微指令126的执行单元424会将此原本数值写回目的寄存器,而非将结果数值写入目的寄存器。
在本发明的实施例中,条件ALU指令系一ISA指令124指示微处理器100对一个以上的源操作数去执行一算术(arithmetic)或逻辑(logoc)操作,以产生一结果并将此结果写入一目的寄存器。其它种类的条件指令124亦可能被微处理器100的ISA指令集所支持,例如条件分支指令124或是条件加载/储存指令124,这些指令有别于条件ALU指令124。
由硬件指令转译器104响应遭遇到的条件ALU指令124所送出的序列中的微指令126的数量与类型,系由两个特点所定性。第一个特点是,条件ALU指令124是否特定(specify)源操作数的一系被施以预移位操作(pre-shiftoperation)。在一实施例中,预移位操作举例来说系包含ARM架构参考手册第A8-10页至A8-12页描述的操作。若是条件ALU指令124特定一预移位操作,硬件指令转译器104产生一移位(shift)微指令126(在图10起标示为SHF)作为序列中的第一个微指令126。此移位微指令126执行此预移位操作以产生一移位结果写入一暂时寄存器(temporary register),准备供序列中的后续微指令126利用。第二个特点是,是否由条件ALU指令124特定的目的寄存器亦是这些源操作数寄存器的其中之一。若是,硬件指令转译器104进行一优化程序来将条件ALU指令124转译为一个相较于未特定目的寄存器为源操作数寄存器其中之一的条件ALU指令124所产生者,较小的微指令126。此程序主要系描述于第21至28图。
此外,条件ALU指令124特定一个架构条件旗标必须满足的条件,使微处理器100能执行此条件ALU指令124。此条件ALU指令124会特定架构条件旗标需以ALU操作的结果以及/或一预移位产生的进位旗标(carry flag)进行更新。然而,若是条件不被满足,架构条件旗标就不会被更新。达成此操作相当复杂,因为硬件指令转译器104需将条件ALU指令124转译为由多个微指令126构成的序列。具体来说,若是条件被满足,至少一个微指令126必须写入此新的条件旗标数值;然而,条件旗标的旧的数值也需要位于序列的微指令126来确认是否条件ALU指令124特定的条件被满足,以及/或去执行ALU操作。这些实施例的优点在于,微处理器100利用技术来确保在条件不被满足时,就不更新条件旗标,且在条件被满足时,才以正确的数值来更新旗标,这包含利用预移位进位旗标值进行更新。
在本发明的微处理器100的实施例中,如图1所示,用以抓取通用寄存器的寄存器文件106,所具有的读出端口仅足够供寄存器文件106提供至多二个源操作数至执行微指令的执行单元424以实现条件ALU指令124。如前揭对应于图1的说明内容,本发明的微处理器100的实施例系针对一可在市场取得的微处理器进行改良。用以抓取此可在市场取得的微处理器的通用寄存器的寄存器文件具有的读出端口仅足够供寄存器文件提供至多二个源操作数至执行单元,执行单元执行此处所称的微指令126以实现条件ALU指令124。因此,本文所述的实施例特别有利于搭配适用此可在市场取得的微处理器的微架构。如前揭对应于图1的说明内容,此可在市场取得的微处理器原本系设计为x86ISA,关于指令的条件执行并不是其中的关键特征,因为此处理器系基于累加器,而通常需要一个源操作数作为目的操作数,因此,此处理器看来并不能证明(justify)此额外的读出埠。
在此所述的实施例的一个优点在于,虽然在一些事例中,有一个双时钟周期的执行延迟,关联于由条件ALU指令124转译成的两个微指令的执行,而在一些事例中,有一个三时钟周期的执行延迟,关联于由条件ALU指令124转译成的三个微指令的执行,各个微指令所执行的操作系相对简单的,而使管线化架构的实作(pipelined implementation)能够支持相对较高的核心时钟频率(clock rate)。
虽然在此所述的实施例中,微处理器100能够执行ARM ISA与x86ISA指令,不过,本发明并不限于此。本发明的实施例亦可适用于微处理器仅执行单一个ISA指令的情形。此外,虽然在此所述的实施例中,微处理器100系将ARM ISA条件ALU指令转译为微指令126,不过,此实施例亦可适用于,微处理器执行一个不同于ARM的ISA指令,而同样在其指令集中包含条件ALU指令的情形。
请参照图9,图中是以一方块图进一步详述图1的微处理器100。此微处理器100在图1的寄存器文件106内包含一架构条件旗标寄存器926,此微处理器100并包含图4的执行单元424与重排缓冲器422。条件旗标寄存器926储存架构条件旗标。在一实施例中,当指令模式指针132指示为ARM ISA,条件旗标寄存器926依据ARM ISA条件旗标的语意储存数值,而当指令模式指针132指示为x86ISA,条件旗标寄存器926则是依据x86ISA条件旗标,即x86EFLAGS,的语意储存数值。如前文对应于图5的说明内容所述,就一较佳实施例而言,寄存器文件106系以由寄存器构成的独立的实体区块来实现;特别是,举例来说,条件旗标寄存器926可以是一个独立于通用寄存器的寄存器文件的实体寄存器文件。因此,即使如下述,条件旗标系提供至执行单元424以执行微指令126,条件旗标寄存器文件的读出端口可能还是不同于通用寄存器文件的读出端口。
条件旗标寄存器926输出其条件旗标数值至一个三输入端多工器922的一数据输入端。此多工器922的一第二数据输入端亦由重排缓冲器422的适当项目(entry)接收条件旗标结果。此多工器922的一第三数据输入端亦由一旗标总线928接收条件旗标结果。此多工器922选择适当的数据输入端的输入,作为其输出924提供至执行单元424以执行微指令126读取条件旗标。此过程在后续段落会有更清楚的描述。虽然本实施例仅描述单一个旗标总线928,不过,依据本发明的一实施例,各个能够产生条件旗标的执行单元424都具有其自己的旗标总线928,而各个能够读取条件旗标的执行单元424都具有其自己的条件旗标输入端924。因此,各个不同的执行单元424能够同时执行不同的微指令126来读取与/或写入条件旗标。
旗标总线928是图1的结果总线(result bus)128的一部分。旗标总线928系用以传送由执行单元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以及ARM ISA进位旗标、零旗标、溢位旗标、与负旗标/符号旗标。
各个微指令126除了其基本操作(如加、载入/储存、移位、布尔运算的及、分支)外,还指示微指令126是否执行下述三个额外操作中的一个或更多,这些操作即(1)读取条件旗标926(在图10以下的图示中标示为RDFLAGS),(2)写入条件旗标926(在图10以下的图示中标示为WRFLAGS),以及(3)产生一进位旗标数值并将其写入至条件旗标926(在图10以下的图示中标示为WRCARRY)的预移位进位位906。在一实施例中,微指令126包含相对应的位以指示此三个额外的操作。在另一实施例中,微指令126通过微指令126的操作码指示此三个额外的操作;亦即,依据不同微指令126类型所具有的不同的操作码,搭配这些微指令类型能够执行的操作,来指示此三个额外的操作。
若是一执行单元424执行一条件ALU微指令126(在图10以下的图示中,标示为ALUOP CC,CUALUOP CC,NCUALUOP CC)指示其写入条件旗标926(标示为WRFLAGS)以及由执行单元424读取的条件旗标924满足微指令126特定的条件,此执行单元424随后就会将SAT位904设定位一;否则,执行单元424就会将SAT位904清除为零。进一步说明,若是执行单元424执行的任何微指令126指示其去写入条件旗标926并且此微指令126并非一条件ALU微指令126,执行单元424随后就会将SAT位904清除为零。部分条件微指令126系依据ISA条件旗标902(在图10以下的图示中系标示为XMOV CC)来特定条件,而部分条件微指令126系依据SAT位904(在图10以下的图示中系标示为CMOV)来特定条件,这在下列段落会有进一步的说明。
若是一执行单元424执行一移位微指令126指示其去写入进位旗标(标示为WRCARRY),执行单元424随后就会将USE位908设定为一并将移位微指令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,图中是以流程图说明本发明图1的硬件指令转译器104转译条件ALU指令124的操作的实施例。基本上,图10系描述硬件指令转译器104对条件ALU指令124解码以确认其类型以将其转译至适当的微指令126序列,供执行管线112执行的方式。具体来说,硬件指令转译器104确认条件ALU指令124是否更新架构条件旗标902、是否对一源操作数执行一预移位操作、是否使用进位旗标作为ALU操作的一输入、以及ALU操作是一进位更新(carry-updating)或是非进位更新(non-carry-updating)的操作。此操作在下述标示为,ALU操作仅更新架构条件旗标902的一子集或是更新全部的架构条件旗标902的段落内容,会有进一步的说明。此流程始于步骤1002。
在步骤1002,硬件指令转译器104遭遇一条件ALU指令124,对其解码,并将其转译为适当的微指令126序列,如步骤1024、1026、1034、1036、1044、1054与1056所述。条件ALU指令124系指示微处理器100在一个或多个源操作数执行一算术或逻辑操作以产生一结果并将此结果写入目的寄存器的一ISA指令124。由条件ALU指令124所特定的ALU操作的部分类型系使用架构进位旗标902作为输入(如加入进位(add with carry)),不过,大多数的类型并不使用。条件ALU指令124亦特定一条件对应于ISA的架构条件旗标902。若是架构条件旗标902满足此特定条件,微处理器100就会执行条件ALU指令124,亦即执行ALU操作并将结果写入目的寄存器。否则,微处理器100就会将条件ALU指令124视为一不操作(no-op)指令;具体来说,微处理器100就不回改变目的寄存器内的数值。此外,条件ALU指令124可将架构条件旗标902特定为系依据ALU操作的结果来更新,或是不会被更新。不过,即使条件ALU指令124将架构条件旗标902特定为会被更新,若是架构条件旗标902不满足特定条件,微处理器100就不会变更架构条件旗标902内的数值。最后,条件ALU指令124会额外将ALU操作的源操作数中的一个特定为要被预移位,请一并参照步骤1012。在一实施例中,被硬件指令转译器104转译的条件ALU指令124系ARM ISA指令。具体来说,在一实施例中,如图10所示,ARM ISA数据处理(Data-processing)指令与乘法(multiply)指令系由硬件指令转译器104进行转译。在一实施例中,这些指另包含但不限于:AND、EOR、SUB、RSB、ADD、ADC、SBC、RSC、TST、TEQ、CMP、CMN、ORR、ORN、MOV、LSL、LSR、ASR、RRX、ROR、BIC、MVN、MUL、MLA、以及MLS指令。在步骤1024、1026、1034、1036、1044、1054与1056中,为说明起见,相关类型的ARM ISA条件ALU指令124系显示于第一行,硬件指令转译器104转译条件ALU指令124所产生的微指令126系显示于后续行。下标“CC”指示此指令124系一条件指令。此外,ALU操作的类型系以特定的来源与目的操作数为例。程序者可特定一目的寄存器恰巧与提供一个源操作数的寄存器同一;在此情况下,硬件指令转译器104系配置来利用此情况且优化微指令126序列以利于条件ALU指令124的转译。此特征系描述于图21。接下来进入步骤1004。
步骤1004需做出决定。在步骤1004中,硬件指令转译器104确认条件ALU指令124是否将架构条件旗标902特定为需要由条件ALU指令124进行更新。也就是说,在一些情况下,程序者可选择依据ALU操作的结果来更新架构条件旗标902的条件ALU指令124的版本,而在其它情况下,程序者可选择无论ALU操作的结果为何,都不更新架构条件旗标902的条件ALU指令124的版本。在ARM ISA汇编语言(assembly language)中,指令下标“S”系指示架构条件旗标902是要被更新的,在图10以下的图示系采用此习惯用法。举例来说,步骤1044将ARM ISA条件ALU指令124标示为“ALUOP S”以表示架构条件旗标902是要被更新的,另一方面,步骤1024将ARM ISA条件ALU指令124标示为“ALUOP”(亦即,差异在于“S”)则表示架构条件旗标902不要被更新。若是条件ALU指令124将架构条件旗标902特定为要更新,流程就会前进至步骤1042;否则就会前进至步骤1012。
在步骤1012中,硬件指令转译器104确认条件ALU指令124的种类是否会对于ALU操作操作数的一个操作数特定一预移位操作。此预移位操作可以由一立即字段(immediate field)进行以产生一常数源操作数,或是此预移位操作可以由来自由寄存器提供的一源操作数进行。此预移位操作的数量可以特定为条件ALU指令124内的一常数。此外,在使用寄存器移位(register-shifted)操作数的情况下,预移位操作数量可以由寄存器内的数值所特定。在ARM ISA的情况下,将一立即数值(immediate value)依据一立即移位量(immediate shift amount)所进行一预移位操作系产生一常数源操作数且系作为一修改后的立即常数(immediate constant)。预移位操作系产生一进位旗标数值。对于一些类型的ALU操作而言,架构进位旗标902系以由移位操作所产生的进位旗标数值进行更新,不过,对于一些类型的ALU操作而言,架构进位旗标902系以由ALU操作产生的进位旗标数值来进行更新。然而,由预移位操作产生的进位旗标数值并不被用来确认条件ALU指令124所特定的条件是否被满足,而是使用当前的架构进位旗标902。值得注意的是,ARM ISAMUL、ASR、LSL、LSR、ROR、与RRX指令并不能特定一预移位操作,而会在步骤1024、1026或1044进行描述。此外,MOV与MVN指令的版本中,特定一修正后的立即常数(modified immediate constant)操作数的版本可特定一预移位操作,不过,其中并不特定一修正后的立即常数操作数(即特定一寄存器操作数)的版本,就无法特定一预移位操作而会在会在步骤1024、1026或1044进行描述。如前述,此预移位操作可由一立即字段进行以产生一常数源操作数,或者此预移位操作可由寄存器提供的一源操作数进行。若是条件ALU指令124特定一预移位操作,流程会前进至步骤1032;否则流程就会前进置步骤1022。
在步骤1022中,硬件指令转译器104确认条件ALU指令124是否特定一ALU操作以使用进位旗标。使用进位旗标的ARM ISA指令124,举例来说,包括带进位加法(add with carry,ADC)、反向带进位减法(reverse subtractwith carry,RSC)、以及带进位减法(subtract with carry,SBC)指令,以及特定一移位寄存器操作数且使用进位旗标进行移位操作的指令,也就是RRX移位类型的指令。若是条件ALU指令124特定的ALU操作使用进位旗标,流程前进置步骤1026;反之则前进至步骤1024。
在步骤1024,硬件指令转译器104将非旗标更新(non-flag-updating)、非预移位(non-pre-shifting)、非进位使用的条件ALU指令124转译为第一与第二微指令126,也就是(1)一ALU操作微指令126(标示为ALUOP);以及(2)一条件移动(move)微指令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会有更进一步的说明。在图10及后续图示中使用的“旧的”用语,系指此旗标或目的寄存器数值,除非另外特别指明,否则是指执行单元424在执行微指令126时所接收的数值。前述说明也可以表示至当前数值。对目的寄存器而言,旧的或是当前的数值系由图1的导向结果总线(forwarding result bus)、重排缓冲器422、或是架构寄存器文件106接收。对旗标而言,请参照关于图9的叙述,旧的或是当前的数值系由导向总线(forwarding flag bus)928、重排缓冲器422、或是架构条件旗标寄存器926接收。此流程终止于步骤1024。
在步骤1026中,硬件指令转译器104将非旗标更新(non-flag-updating)、非预移位(non-pre-shifting)、进位使用(carry-using)的条件ALU指令124转译为第一与第二微指令126,即(1)一进位使用(carry-using)ALU操作微指令126(标示为ALUOPUC);以及(2)一条件移动微指令126(标示为XMOV)。在步骤1026的一实例中,条件ALU指令124系类似于步骤1024所描述者,除了所特定的ALU操作系使用条件旗标。这两个微指令126亦类似于步骤1024所描述者;不过,算术与逻辑单元(ALUOPUC)微指令126亦接收条件旗标924以获得进位旗标的当前数值,用于进位使用(carry-using)ALU操作。微指令126的执行系详述于图19。此流程终止于步骤1026。
在步骤1032中,硬件指令转译器104确认条件ALU指令124是否特定一ALU操作以使用进位旗标。若是ALU操作使用进位旗标,流程会进行至步骤1036;反之则前进至步骤1034。
在步骤1034中,硬件指令转译器104将非旗标更新(non-flag-updating)、预移位(pre-shifting)、非进位使用(non-carry-using)的条件ALU指令124转译为第一、第二与第三微指令126,亦即(1)一移位微指令126(标示为SHF);(2)一ALU操作微指令126;以及(3)一条件移动微指令126。在步骤134的一实例中,条件ALU指令124系类似于步骤1024所描述者;不过,此条件ALU指令124亦特定一具有一移位量(shift amount)的预移位操作于第二源操作数(R2),在步骤1034的实施例中,此移位量系储存于由条件ALU指令124所特定的一第三来源寄存器(R3)。不过,若是条件ALU指令124的类型系将移位量特定为指令124内的一常数,第三来源寄存器就不会被使用。此可能产生的预移位操作与条件ALU指令124的列表可特定为,包含但不限于,逻辑左移(logical shift left,LSL)、逻辑右移(logical shift right,LSR)、算术左移(arithmetic shift right,ASR)、右转(rotate right,ROR)、以及扩展右转(rotate rightwith extend,RRX)。在一实施例中,硬件指令转译器104输出一移位微指令126以确保移位数值系依据ARM ISA的语意所产生,举例来说,尤其是指ARM架构参考手册中对应于个别ARM指令的描述以及第A8-10至A8-12、与第A5-10至A5-11页的内容。此移位微指令126与条件ALU指令124系特定相同的预移位操作。此移位微指令126亦与条件ALU指令124特定相同的第二源操作数R2与第三源操作数R3。此移位微指令126对第二源操作数R2执行具有一移位量的移位操作,并将结果写入一暂时寄存器(标示为T3)。虽然在步骤1034中,由于条件ALU指令124将架构条件旗标902特定为不更新,移位微指令126产生的条件旗标数值就不会被使用,不过,举例来说,在步骤1056中,移位微指令126产生的移位旗标数值则会被使用。这会在下列段落有进一步的说明。此外,预移位操作会需要将旧的移位旗标旋转至移位后的结果数值(resulting shifted value);举例来说,扩展右转(RRX)预移位操作系将进位指标移位至结果中的最高有效位(most significant bit)。在此情况下,虽未见于图10(除了步骤1056),移位微指令126也将会读取条件旗标924以取得当前的进位旗标数值。算术与逻辑单元(ALUOP)微指令126系类似于步骤1024所描述者;然而,此算术与逻辑单元(ALUOP)微指令126系接收暂时寄存器T3的数值,而非第二源操作数R2,并且执行ALU操作于第一源操作数R1与暂时寄存器T3以产生结果写入暂时寄存器T2。XMOV微指令126系类似于步骤1024所描述者。微指令126的执行在图18会有更详细的说明。此流程终止于步骤1034。
在步骤1036中,硬件指令转译器104将非旗标更新(non-flag-updating)、预移位(pre-shifting)、进位使用(carry-using)的条件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将旗标更新(flag-updating)、非预移位(non-pre-shifting)的条件ALU指令124转译为第一与第二微指令126,亦即:(1)一条件ALU操作微指令126(标示为ALUOP CC);以及(2)一条件移动微指令126(标示为CMOV)。在步骤1044的实例中,条件ALU指令124系类似于步骤1024的条件ALU指令124,除了本实施例系更新架构条件旗标902。条件ALU微指令126与条件ALU指令124系特定相同的条件与源操作数。条件ALU操作微指令126对两个源操作数执行ALU操作,并且将结果写入一暂时寄存器(标示为T2)。此外,条件ALU操作微指令126接收架构条件旗标902并确认其是否满足条件。此外,条件ALU操作微指令126写入条件旗标寄存器926。具体来说,条件ALU操作微指令126写入SAT位904以指示架构条件旗标902是否满足条件。此外,若是条件不满足,条件ALU操作微指令126将旧的条件旗标数值写入架构条件旗标902;反之,若视条件满足,条件ALU操作微指令126就依据ALU操作的结果更新架构条件旗标902。此架构条件旗标902的更新数值系相关于ALU操作的类型。也就是说,对于部分种类的ALU操作,所有的架构条件旗标902都会依据ALU操作的结果以新数值更新;反之,对于部分种类的ALU操作,一些架构条件旗标902(在一实施例中,即为Z与N旗标)系依据ALU操作的结果以新数值更新,不过,旧的数值会保留给其它的架构条件旗标902(在一实施例中,即为V与C旗标)。架构条件旗标902的更新在图14中会更详细的说明。条件移动(CMOV)微指令126接收由算术与逻辑单元(ALUOP)微指令126写入暂时寄存器(T2)的数值,并接收目的寄存器(RD)的旧的或是当前的数值。条件移动(CMOV)微指令126接收条件旗标924,并且检验SAT位904以确认条件ALU操作微指令126是否指示架构条件旗标902满足条件。若是条件满足,条件移动(CMOV)微指令126将暂时寄存器的值写入目的寄存器,否则就将旧的目的寄存器的值写回目的寄存器。微指令126的执行在图14中会有更详细的说明。值得注意的是,步骤1044(以及步骤1054与1056)所产生的条件ALU操作微指令126所执行的ALU操作,可以是一个使用条件旗标(类似于步骤1026与1036所描述者)的ALU操作,而由于微指令126读取旗标(即RDFLAGS指针),执行单元424具有进位旗标以执行此进位使用ALU操作。此流程终止于步骤1044。
在步骤1052中,硬件指令转译器104确认条件ALU指令124是否特定一属于会更新架构进位旗标902的类型的ALU操作。因为若是ALU操作不更新架构进位旗标902,预移位操作所产生的进位旗标数值,而非基于ALU操作所产生的条件旗标数值,就必须被用于更新架构进位旗标902,因此,对于硬件指令转译器104而言,区分是否会更新架构进位旗标902是必要的。在一实施例中,特定一不更新架构进位旗标902的ALU操作,但特定一预移位操作的ARM ISA指令124,系包含但不限于AND、BIC、EOR、ORN、ORR、TEQ与TST,以及MOV/MVN指令124,这些指另通过一非零旋转数值(non-zero rotation value)特定一调整过的立即常数(immediate constant)。若是ALU操作更新此架构进位旗标902,此流程会前进至步骤1054;反之则前进至步骤1056。
在步骤1054中,硬件指令转译器104将旗标更新(flag-updating)、预移位(pre-shifting)、进位使用(carry-updating)的条件ALU指令124转译为第一、第二与第三微指令126,亦即:(1)一移位微指令126;(2)一条件进位更新ALU操作微指令126(标示为CU ALUOP CC);以及(3)一条件移动微指令126。在步骤1054的一实例中,条件ALU指令124系类似于步骤1034所描述者;然而,此条件ALU指令124亦将架构条件旗标902特定为要被更新。移位微指令126系类似于步骤1034所描述者。条件进位更新ALU操作微指令126与条件ALU指令124系特定相同的条件。条件进位更新ALU操作微指令126在第一源操作数R1与暂时寄存器T3执行ALU操作并将结果写入一暂时寄存器(标示为T2)。此外,条件进位更新ALU操作微指令126接收架构条件旗标902并确认其是否满足条件。此外,条件进位更新ALU操作微指令126写入条件旗标寄存器926。具体来说,条件进位更新ALU操作微指令126写入SAT位904以指示是否架构条件旗标902满足条件。此外,若是条件不被满足,条件进位更新ALU操作微指令126将旧的条件旗标数值写入架构条件旗标902;反之,若是条件满足,条件进位更新ALU操作微指令126依据ALU操作的结果来更新架构条件旗标902。架构条件旗标902的更新在图16会有更详细的说明。条件移动(CMOV)微指令126系类似于步骤1044所描述者。此流程终止于步骤1054。
在步骤1056中,硬件指令转译器104将旗标更新(flag-updating)、预移位(pre-shifting)、非进位更新(non-carry-updating)的条件ALU指令124转译为第一、第二与第三微指令126,亦即(1)一移位微指令126;(2)一条件非进位更新ALU操作微指令126(标示为NCUALUOP CC);以及(3)一条件移动微指令126。在步骤1056的实例中,条件ALU指令124系类似于步骤1054所描述者;不过,此条件ALU指令124是特定一非进位更新ALU操作。因此,当条件满足时,架构进位旗标902系以预移位旗标数值进行更新。移位微指令126系类似于步骤1034所描述者;不过,此微指令126会读取语写入条件旗标寄存器926。具体来说,此移位微指令126会:(1)将预移位操作所产生的条件旗标数值写入PSC位906;(2)设定USE位908以指示条件非进位更新ALU操作微指令126使用PSC906来更新架构进位旗标902;以及(3)将旧的架构条件旗标902写回条件旗标寄存器926,藉此,条件非进位更新ALU操作微指令126可评估架构条件旗标902的旧的数值,来确认其是否满足条件。条件非进位更新ALU操作微指令126与条件ALU指令124系特定相同的条件。此条件非进位更新ALU操作微指令126在源操作数R1与暂时寄存器T3执行ALU操作并将结果写入一暂时寄存器(标示为T2)。藉此,条件非进位更新ALU操作微指令126接收架构条件旗标902并且确认其是否满足条件。此外,条件非进位更新ALU操作微指令126系写入条件旗标寄存器926。具体来说,条件非进位更新ALU操作微指令126系写入SAT位904以指示架构条件旗标902是否满足条件。此外,若是条件被满足,条件非进位更新ALU操作微指令126将旧的条件旗标数值写入架构条件旗标902;反之,若是条件不被满足,条件非进位更新ALU操作微指令126则是基于ALU操作的结果更新架构条件旗标902。具体来说,架构溢位(architectural overflow)(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系位于由移位微指令126所特定的操作数以产生一结果。执行单元424系将此结果输出至结果总线128。在一实施例中,此移位操作可包括但不限于一逻辑向左(logical shift left,LSL)、逻辑向右(logical shift right,L SR)、算术向右(arithmetic shift right,ASR)、右转(rotate right,ROR)、以及扩展右转(rotate right with extend,RRX)。此外,此执行单元424系基于移位操作的结果产生新的条件旗标数值。具体来说,执行单元424系基于移位操作的结果产生一进位旗标数值。在一实施例中,在逻辑向左(LSL)移位操作的情况下,进位旗标数值一扩展数值(extended value)的第N个位,此扩展数值为M个最低有效位零串连左移后的操作数,其中N是原始操作数的位数量,M是特定正移位量(specified positive shift amount);在逻辑向右(LSR)移位操作的情况下,进位旗标数值系一扩展数值的第(M-1)个位,而此扩展数值系原始操作数零扩展(M+N)个位,其中M是特定正移位量,N是原始操作数的位数;在算术向右(ASR)移位操作的情况下,进位旗标数值系一扩展数值的第(M-1)个位,此扩展数值系原始操作数符号扩展(M+N)个位,其中M是特定正移位量,N是原始操作数的位数;在右转(ROR)移位操作的情况下,进位旗标数值系操作数右转后的结果的第(N-1)个位,此操作数系依据特定非零移位量(specifiednon-zero shift amount)模(mod)N进行右转,其中N是原始操作数的位数;在扩展向右(RRX)移位操作的情况下,进位旗标数值系原始操作数的位零。接下来进行至步骤1106。
在步骤1106中,执行单元424确认由硬件指令转译器104输出的移位微指令126是否指示执行单元424应写入进位旗标,如同图10的步骤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,图中显示一流程图描述本发明图4的执行单元424执行一条件ALU微指令126的操作。此流程始于步骤1202。
在步骤1202中,图4的执行单元424的其中之一系接收到一条件ALU微指令126,如图10所述由硬件指令转译器104响应所遭遇的一条件ALU指令124所产生的微指令。此执行单元424亦接收由微指令特定的源操作数,包含条件旗标数值924,而不论其是否会被微指令126使用到。需要了解的是,执行单元424也会依据类似于图12描述的处理程序,而排除其中步骤1209、1212、1214与1216的执移操作,来执行非条件(unconditional)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,如同图10的许多步骤中的指令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退出(retired)至目的寄存器106与/或条件旗标寄存器926。这也就是说,是否写入重排寄存器422的项目的数值最终会被退出的确认操作是由执行管线112的退出单元(retire unit)基于微指令126的类型、例外事件出现、分支误预测(branch misprediction)、或是其它无效事件(invalidating event)来进行,而非由执行单元424本身。此流程终止于步骤1211。
在步骤1212中,执行单元424输出第一源操作数至结果总线128。值得注意的是,在条件不被满足时,图10所描述的多种条件ALU微指令126并不使用此输出第一源操作数的操作。具体来说,图10的XMOV与CMOV微指令126会写回旧的目的寄存器数值而非暂时寄存器T2的数值。然而,在图21及其后续图示的说明中,对于其它格式的条件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视为一不操作(no-op)指令来执行(亦即不去执行条件ALU指令124)。此流程终止于步骤1216。
在步骤1218中,执行单元424确认条件ALU微指令126是否特定一进位更新ALU操作。在一实施例中,执行单元424对条件ALU微指令126的操作码进行解码,以做出确认结果。在另一实施例中,硬件指令转译器104确认ALU操作是否是图10的步骤1052的进位更新操作,并据此提供一指针至执行单元424。在一实施例中,非进位更新ALU操作包含但不限于由AND、BIC、EOR、ORN、ORR、TEQ、TST、MUL、MOV、MVN、ASR、LSL、LSR、ROR、与RRXARM ISA指令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视为一不操作(no-op)指令(即不去执行条件ALU指令124)来执行。此流程终止于步骤1314。
在步骤1316中,执行单元424输出第二源操作数的数值至结果总线128。如图10所示,此第二源操作数的数值系由相关的条件ALU微指令126写入暂时寄存器的数值,以利于在预设条件满足的情况下,通过将结果写入目的寄存器,以协助条件ALU指令124的执行。此流程终止于步骤1316。
请参照图14,图中是以一方块图显示本发明图1的执行管线112执行一条件ALU指令124的操作。具体来说,此条件ALU指令124系一旗标更新(flag-updating)、非预移位(non-pre-shifting)、条件ALU的操作ISA指令124。硬件指令转译器104系将此指令124转译为图10的步骤1044的微指令126。图4的寄存器配置表(RAT)402产生附属信息给位于暂时寄存器T2的CMOV微指令126以及由条件ALUOP微指令126写入的条件旗标寄存器926的数值等等。指令调度器(instruction dispatcher)404将微指令126调度至图4中适当的保留站406。当微指令126可取得所有源操作数的数值时(无论是从前传总线(forwarding bus)128、重排缓冲器(ROB)422、或是寄存器文件106),指令发送单元408系确认一微指令126已完成由其保留站406发送至相对应的执行单元以供执行的准备。此微指令126系依据第12与13图的描述内容来执行。
执行单元424从保留站406接收步骤1044所产生的条件算术与逻辑单元(ALUOP)微指令126、从图1的寄存器文件106的寄存器R1与R2接收源操作数的数值、以及依据图12的步骤1202从图9的条件旗标寄存器926(或是从前传总线(forwarding bus)128与/或重排缓冲器(ROB)422)接收条件旗标924。执行单元424对寄存器R1与R2执行ALU操作(若是此ALU操作是进位使用操作,则是对所接收的C旗标902执行此操作)以产生一结果,此结果系依据步骤1204写入暂时寄存器T2。此外,(1)若是架构条件旗标902并不满足特定的条件(在图14中标示为NOT SATISFIED),执行单元424依据图12的步骤1216产生新的条件旗标928数值以写入条件旗标寄存器926;(2)若是架构条件旗标902满足特定的条件而ALU操作系非进位更新的操作(在图14中标示为NCUALUOP SAT),执行单元424依据图12的步骤1226产生新的条件旗标928数值以写入条件旗标寄存器926;并且(3)若是架构条件旗标902满足特定的条件并且ALU操作系进位更新的操作(在图14中标示为CUALUOP SAT),执行单元424依据图12的步骤1222产生新的条件旗标928数值以写入条件旗标寄存器926。暂时寄存器T2的数值与条件旗标928系提供于前传总线(forwarding bus)128供CMOV微指令126利用,在并非来自前传总线128的情况下,系写入重排缓冲器422的项目供CMOV微指令126利用,并且在并非来自前传总线128或重排缓冲器422的情况下,系逐渐退出(retired)至适当的架构状态以阻止例外事件的出现、分支误预测、或是其它无效事件被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的源操作数的数值。此结果数值系提供于前传总线(forwarding bus)128供后续微指令126所利用,系写入重排寄存器(ROB)422的项目,并且系逐渐退出至其适当的架构状态以阻止例外事件的出现、分支误预测、或是其它无效事件。
如步骤1222所述,旗标更新条件ALU指令124特定一进位更新ALU操作,并不更新溢位旗标,如ARM ISAASR、LSL、LSR、ROR、与RRX指令124。此指令124的处理程序系与图14所示有些许不同。尤其是,执行单元424输出旧的V旗标数值而非新的V旗标数值。最后,如前述,旗标更新ARMISAMUL以及MOV/MVN(寄存器)指令124均属非进位更新指令并且无法特定一预移位操作,因而系以步骤1044的程序处理。在图12的步骤1226有更明确的说明。
在前文中可发现,ALU操作微指令126系通过SAT位904指示CMOV微指令126是否旧的条件旗标902满足特定条件,藉以使ALU操作微指令126打击(clobber)条件旗标902的旧的数值,并在条件满足时,依据ALU操作的结果所产生的适当数值来进行处理。
请参照图15,图中是以一方块图说明本发明图1的执行管线112执行一条件ALU指令124。具体来说,此条件ALU指令124系一旗标更新(flag-updating)、预移位(pre-shifting)、非进位更新条件ALU的操作ISA指令124。硬件指令转译器104系将此指令124转译为图10步骤1056所示的微指令126。图15的操作在许多面向系类似于图14的操作,相似的操作在此不再赘述,以下仅列出相异处。图4的寄存器配置表402产生附属信息给位于暂时寄存器T3的NCU ALUOP微指令126以及由移位微指令126写入的条件旗标寄存器926的数值等等。微指令126系依据第11、12与13图的描述来执行。
执行单元424由保留站406接收步骤1056所产生的移位微指令126,由寄存器文件106的寄存器R2与R3接收源操作数数值,以及依据图11的步骤1102由条件旗标寄存器926接收条件旗标924(或是由前传总线(forwardingbus)128与/或重排缓冲器(ROB)422)。执行单元424在寄存器R2与R3执行移位操作(若是ALU操作系进位使用操作,则是对所接收到的C旗标902进行此操作)以产生一结果依据步骤1104写入暂时寄存器T3。此外,执行单元424依据步骤1104产生新的架构条件旗标902数值并依据图11的步骤1114写入新的条件旗标928。以写入条件旗标寄存器926。暂时寄存器T3的数值与条件旗标928系提供至前传总线128供NCU ALUOP微指令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中标示为NOT SATISFIED),执行单元424依据步骤1216产生新的条件旗标928数值以写入条件旗标寄存器926;(2)若是架构条件旗标902满足特定条件且USE位908系被清除(在图15中标示为SAT.,USE==0),执行单元424依据图12的步骤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并不打击(clobber)条件旗标902的旧的数值,而是将条件旗标902的旧的数值写回条件旗标寄存器926,藉此,由移位微指令126接收条件旗标寄存器926的结果的条件ALU操作微指令126可确认是否旧的条件旗标902满足由ISA条件ALU指令124所特定的条件。另一方面,若是移位微指令126系以新产生的进位旗标数值打击旧的进位旗标902,条件ALU操作微指令126将无法确认是否旧的条件旗标902满足特定条件。
请参照图16,图中是以一方块图说明本发明图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的项目供CU ALUOP微指令126利用,以及若非来自前传总线128或重排缓冲器422,则是逐渐退出至其适当的状态,以阻止例外事件的出现、分支误预测、或其它无效事件供CU ALUOP微指令126利用。
执行单元424由保留站406接收步骤1054所产生的CU ALUOP微指令126,由寄存器文件106的寄存器R1与缓冲寄存器T3接收源操作数数值,以及由条件旗标寄存器926依据步骤1202接收条件旗标924。执行单元424在寄存器R1与暂时寄存器T3执行ALU操作(若是ALU操作系一进位使用操作,则在所接收到的C旗标902执行)以产生一结果依据步骤1204写入暂时寄存器T2。此外:(1)若是架构条件旗标902并不满足特定条件(在图16中标示为NOT SATISFIED),执行单元424依据步骤1216产生新的条件旗标928数值以写入条件旗标寄存器926;以及(2)若是架构条件旗标902满足特定条件(在图16中标示为SATISFIED),执行单元424依据图12的步骤1222产生新的条件旗标928数值以写入条件旗标寄存器926。图16的CMOV微指令126的执行系类似于图14所描述者。
请参照图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的执行系类似于图17的XMOV微指令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=1to n,(R[i]*P[i]*J[i])
其中,n是执行单元424的数量,R[i]是保留站406提供给第[i]个执行单元424的项目的数量406,P[i]是可由第[i]个执行单元424所执行的微指令所能特定的源操作数的最大数量,以及J[i]是能够前传至第[i]个执行单元424的执行单元424的数量。第六,对额外的源操作数,在寄存器配置表402中需要额外的重命名查询(lookup)操作。第七,需要扩展保留站406以处理额外的源操作数。这些在速度、电力与空间付出的额外成本是不受欢迎的而可通过本发明的实施例加以解决。
相同来源目的(SAME-SOURCE-DESTINATION)优化的实施例
请参照图21,图中是以流程图说明本发明图1的硬件指令转译器104转译条件ALU指令124的操作。基本上,硬件指令转译器104依据图21所述的操作在许多面向系类似于依据图10所述的操作,尤其是对应于各种需要做出决定的步骤,因而在此对于这些步骤系给予相同的编号。
请参照图21,图10的步骤1002系以步骤2102予以取代。在步骤2102中,硬件指令转译器104遭遇到的条件ALU指令124系不同于步骤1002所遭遇到的,因为在步骤2102所遭遇到的条件ALU指令124系在多个来源寄存器中特定一个寄存器作为目的寄存器。硬件指令转译器104系配置来识别此条件并且优化其输出的微指令126。尤其是,硬件指令转译器104系将相同来源目的(same-source-destination)的条件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将相同来源目的(same-source-destination)非旗标更新(non-flag-updating)、非预移位(non-pre-shifting)、非进位使用(non-carry-using)的条件ALU指令124转译为单一个微指令126,即一条件ALU操作微指令126(标示为ALUOP CC)。在步骤2124的一实例中,条件ALU指令124系类似于步骤1024所描述者,除了第一源操作数系目的寄存器(RD)。因此,条件ALU指令124特定一第一来源寄存器(RD)语一第二来源寄存器(R2),一ALU操作(标示为ALUOP)用以执行于第一来源寄存器RD与第二来源寄存器R2以产生一结果,以及一目的寄存器(RD)。此目的寄存器(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将相同来源目的(same-source-destination)非旗标更新(non-flag-updating)、非预移位(non-pre-shifting)、进位使用(carry-using)的条件ALU指令124转译为单一个微指令126,即一进位使用条件ALU操作微指令126(标示为ALUOPUC CC)。在步骤2126的实例中,此条件ALU指令124系类似于步骤2124所描述者,除了其所特定的ALU操作系使用进位旗标,并且此指令亦类似于步骤1026所描述者,除了第一源操作数系目的寄存器(RD)。条件算术与逻辑单元ALUOPUC微指令126系类似于步骤2124所描述者;不过,其所特定的ALU操作系使用进位旗标。如第27图的方块图所示的条件算术与逻辑单元ALUOPUC微指令126的执行系类似于步骤2124的条件算术与逻辑单元ALUOP微指令126的执行,除了执行单元424系使用进位旗标来执行ALU操作。此流程终止于步骤2126。
在步骤2134中,硬件指令转译器104系将相同来源目的(same-source-destination)非旗标更新(non-flag-updating)、预移位(pre-shifting)、非进位使用(non-carry-using)的条件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产生的进位旗标数值则是会被使用到。此外,此预移位操作会需要旧的进位旗标旋转(rotated)至移位后的结果数值(resulting shiftedvalue);举例来说,RRX预移位操作系将进位旗标移位至结果的最高有效位。在此情况下,虽未见于图21(除了步骤2156之外),当执行单元424执行移位微指令126时,它亦会读取条件旗标924以取得当前的进位旗标数值。条件算术与逻辑单元ALUOP微指令126及其执行系类似于步骤2124所描述者;不过,此微指令系接收暂时寄存器T3的数值而非寄存器R2的数值,并且执行ALU操作于寄存器R1与暂时寄存器T3以产生结果写入目的寄存器(RD)。移位微指令126的执行与条件算术与逻辑单元ALUOP微指令126系呈现于第26图中。此流程终止于步骤2134。
在步骤2136中,硬件指令转译器104将相同来源目的(same-source-destination)非旗标更新(non-flag-updating)、预移位(pre-shifting)、进位使用(carry-using)的条件ALU指令124更新为第一与第二微指令126,即:(1)一移位微指令126;以及(2)一进位使用条件算术与逻辑单元ALUOP微指令126(标示为ALUOPUC CC)。在步骤2136的实例中,条件ALU指令124系类似于步骤2134所描述者,除了所特定的ALU操作系使用进位旗标,并且,此指令系类似于步骤1036所描述者,除了第一源操作数系目的寄存器(RD)。这两个微指令126以及其执行系类似于步骤2134所描述者;不过,算术与逻辑单元ALUOPUC微指令126亦接收条件旗标924以取得进位旗标当前的数值,使用于进位使用ALU操作。移位微指令126与条件算术与逻辑单元ALUOPUC微指令126的执行,如第25图所示,系类似于步骤2134中的移位微指令126与条件算术与逻辑单元ALUOP微指令126的执行,除了执行单元424系使用进位旗标来执行ALU操作。此流程终止于步骤2136。
在步骤2144中,硬件指令转译器104将相同来源目的(same-source-destination)旗标更新(flag-updating)、非预移位(non-pre-shifting)的条件ALU指令124转译为单一个微指令126,即一条件ALU操作微指令126(标示为ALUOP CC)。在步骤2144的实例中,条件ALU指令124系类似于步骤2124的条件ALU指令124,除了会更新架构条件旗标902,并且系类似于步骤1044所描述者,除了第一源操作数系目的寄存器(RD)。步骤2144的条件ALU操作微指令126及其操作系类似于步骤2124所描述者,除了步骤2144的ALU操作微指令126亦更新架构条件旗标902,并且系类似于步骤1044的条件ALU微指令126,除了其第一操作数系目的寄存器(RD)而非寄存器R1并且其目的寄存器系目的寄存器(RD)而非暂时寄存器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将相同来源目的(same-source-destination)旗标更新(flag-updating)、预移位(pre-shifting)、进位使用(carry-updating)的条件ALU指令124转译为第一与第二微指令126,即(1)一移位微指令126;以及(2)一条件进位更新ALU操作微指令126(标示为CUALUOP CC)。在步骤2154的实例中,条件ALU指令124系类似于步骤2134所描述者,除了条件ALU指令124亦特定架构条件旗标902是要被更新的,并且系类似于步骤1054所描述者,除了第一源操作数系目的寄存器(RD)。移位微指令126系类似于步骤1034所描述者,并且,执行单元424执行移位微指令126的方式系类似于图18的步骤1034所描述者。CU ALUOP微指令126及其执行系类似于步骤2124的条件ALU微指令126,除了步骤2144的CUALUOP微指令126亦会更新架构条件旗标902,并且系类似于步骤1054的条件ALU微指令126,除了其第一操作数系目的寄存器(RD)而非寄存器R1,且其目的寄存器系目的寄存器RD而非暂时寄存器T2。执行CUALUOP微指令126的执行单元424系依据步骤2102接收目的寄存器RD与暂时寄存器T3作为源操作数,并依据步骤1204执行此特定的ALU操作于目的寄存器RD与暂时寄存器T3以产生一结果。此外,执行单元424系依据步骤1202接收架构条件旗标902,并且依据步骤1206确认期是否满足特定条件。此外,视之条件是否满足,执行单元424系依据步骤1216或1222更新条件旗标寄存器926。若是条件不被满足,执行单元424将旧的条件旗标数值写入架构条件旗标902;反之,若是条件满足,执行单元424则是基于ALU操作的结果来更新架构条件旗标902。移位微指令126与条件ALUOP微指令126的执行系呈现于第24图。此流程终止于步骤2154。
在步骤2156中,硬件指令转译器104系将相同来源目的(same-source-destination)旗标更新(flag-updating)、欲移位(pre-shifting)、非进位更新的条件ALU指令124转译为第一与第二微指令126,即:(1)一移位微指令126;以及(2)一条件非进位更新ALU操作微指令126(标示为NCUALUOP CC)。在步骤2156的实例中,条件ALU指令124系类似于步骤2154所描述者,除了条件ALU指令124系特定一非进位更新ALU操作,并且系类似于步骤1056所描述者,除了第一源操作数系目的寄存器(RD)。因此,在条件满足时,架构进位旗标902系以此预移位进位旗标数值进行更新。移位微指令126系类似于步骤2134所描述者;不过,移位微指令126会读取以及写入条件旗标寄存器926。具体来说,执行移位微指令126的执行单元424系:(1)将预移位操作所产生的进位旗标数值写入PSC位906;(2)设定USE位908来指示条件NCUALUOP微指令126去利用PSC位906来更新架构进位旗标902;以及(3)依据步骤1114将旧的架构条件旗标902写回条件旗标寄存器926,藉此NCU ALUOP微指令126可以评估架构条件旗标902的旧的数值来确认其是否满足特定条件。NCU ALUOP微指令126与条件ALU指令124系特定相同的条件。执行NCU ALUOP微指令126的执行单元424系依据步骤1204执行ALU操作于目的寄存器RD与暂时寄存器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图。此流程终止于步骤2156。
此处理方式的优点在于,在条件ALU指令124特定目的寄存器与来源寄存器其中之一为同一时,硬件指令转译器104可以进行优化且使所产生的微指令126序列减少一个微指令微指令126。第一,其可增加微处理器100的前瞻(lookahead)功能以利用所欲执行的程序的指令层的平行处理(instructionlevel parallelism)来增加执行单元424的使用。因为微指令126数量的减少意味着重排缓冲器422中供额外微指令126所用的自由槽(slot)的增加,而能产生一较大的微指令126池(pool)完成发布准备以供执行,因而可以提升此前瞻功能。第二,因为每一个时钟周期中,硬件指令转译器104只能输出微指令126至一预设数量的槽(slot),而至少在一实施例中,硬件指令转译器104必须在同一时钟周期内输出实现一给定ISA指令124所需的所有微指令126,因此,减少一条件ALU指令124转译产生的微指令126数量,亦可减少每个周期内空的微指令126槽的平均数量,同时有助于增加微处理器100的前瞻功能与执行单元424的使用。
条件非分支指令预测
以上实施例所描述的是在限于读出埠(read port-limited)的管线式微处理器(pipelined microprocessor)中,将一条件非分支指令,亦即此处所称的条件ALU指令,转译为微指令的技术。第一微指令执行一ALU操作并将结果写入一暂时寄存器。第二微指令接收来自暂时寄存器的结果与目的寄存器(destination register)的当前数值,并且在条件满足时,将结果写入目的寄存器,而在条件不满足时,将当前数值写回目的寄存器。相类似地,美国临时申请案61/473,062所描述的实施例系在一限于读出端口的管线式微处理器中,将一条件非分支指令,即文中所称的条件负载指令(conditional load instruction),转译为微指令。此指令转译器系将条件负载指令转译为二个微指令:(1)一个同时取得条件码与旗标的负载微指令,在条件不满足时,就不更新其架构状态(例如:页表游荡(table walk)产生的存储器写入的副作用或是产生例外事件)并且加载一虚设数值(dummy value)至暂时寄存器,不过,若是条件满足,就将来自存储器的真实数值加载暂时寄存器;以及(2)一个条件移动微指令,接收目的寄存器的当前数值,并且在条件非为真时,将此当前数值移回目的寄存器,而在条件为真时,将来自暂时寄存器的数值移至目的寄存器。
虽然此解决方法相较于传统技术有所改善,不过,此方法会产生额外的成本,亦即第二微指令以及与第二微指令及第一微指令的关联性有关的延迟。其次,在微处理器的其它结构的指令槽(slot),例如微指令队列(queue)、重排缓冲器(reorder buffer)、保留站(reservation stations)、以及执行单元(executionunits)也会被第二微指令利用。此外,第二微指令的出现会降低每个时钟周期中,指令转译器所放出(emit)、指令发布单元所发布(issue)、以及指令退出单元所退出(retire)的平均指令数量,因而限制了微处理器的处理能力。
本发明在此提供一种具有更高效能的解决方法,纳入一预测机制,类似于分支预测方法,来预测条件非分支指令的趋势,亦即预测条件是否被满足,而需要执行条件非分支指令。此解决方法让条件转译器可基于预测信息放出单一的微指令,而非多个微指令。微处理器并具有一个由误预测状态恢复的机制。
以下同时描述有静态与动态预测机制的实施例。静态预测机制系类似于静态分支预测。动态(或基于历史信息)的预测机制系在由指令快取撷取条件非分支指令时,检视此条件非分支指令的程序计数器(program counter)/指令指针(instruction pointer)的数值,此运作方式类似于分支目标存储器地址快取(branch target address cache,BTAC)。
在静态预测机制中,静态预测器检视此操作与/或由条件非分支指令特定的条件码(例如:ALU操作是加,条件码是EQUAL),并预测是否基于现有数据(profiling data)执行此操作。举例来说,基于操作与条件码的经验数据显示相当大比例的时间系在执行条件非分支指令,此静态预测器预测此指令将会被执行,此指令转译器放出单一个非条件微指令,例如:
addcc dst,src1,src2
此条件码与旗标系提供给微指令(也就是addcc),因此,此执行单元可以确认此预测正确与否,并在预测错误时,产生一误预测指标。
相反地,操作与条件码的经验数据显示相当大比例的时间不在执行条件非分支指令的情况下,此静态预测器预测此指令不会被执行,此指令转译器放出单一个不操作(nop)微指令,例如:
Nopcc
同样地,此条件码与旗标系提供给微指令(也就是nopcc),因此,执行单元在必要时可以产生一误预测指标。
在执行/不执行的比例尚未大到足以证明静态预测的结果是正当的情况下,指令转译器会恢复至前述较低效能的多微指令解决方案,例如:转译器放出两个微指令:
add tmp,src1,src2
movcc dst,src-dst,tmp//src-dst是当前的dst reg数值
在动态预测机制中,一个类似BTAC的架构,也就是这里所称的条件ALU走向快取(conditional ALU direction cache,CADC)撷取以前执行的条件非分支指令的走向历史信息以及其程序计数器/指令指针数值,并基于撷取地址数值命中的CADC入口的历史信息,预测后续撷取的条件非分支指令的走向。此CADC提供其预测至指令转译器。指令转译器依据前述静态预测器所作的预测放出微指令。
回复机制会清除条件非分支指令所在的管线、所有其后的指令(更精确的来说,就是由其转译而来的微指令)、或是所有至少直接或间接依赖此条件非分支指令的指令,然后再重复执行(replay)所有被清除的指令。在条件非分支指令的重复执行中,转译器会倾向于采取放出多个微指令的方式。
本发明的一实施例是同时使用静态与动态预测器,并记录对各个程序计数器/指令指针数值而言,哪一个预测器较为准确的历史数据。依据已知的两阶层混合式分支预测的方法,可利用此历史数据,在这两个预测器中动态选择其一提供最终预测。
值得注意的是,对于条件非分支指令的误预测会造成成本支出(即清除管线与重复执行条件非分支指令及其后指令或至少直接间接的相关指令),此成本支出会变动,并且是应用程序码(application code)以及/或数据集(data set)的函数。所以,预测条件非分支指令的解决方案对某些应用程序码以及/或数据集的混合而言,可能会有较低的效能。
此处定义出一种非分支指令,此指令并不写入微处理器的程序计数器。因此,微处理器不会撷取与执行此非分支指令的后续指令。程序计数器系应用于ARM架构。其它架构则会使用不同的元件来取代程序计数器。举例来说,x86ISA使用指令指针,而其它ISA使用指令地址寄存器。非分支指令与写入地址至程序计数器/指令指针来使微处理器指向此地址的分支指令有明显的差别。微处理器一开始是由分支指令写入程序计数器/指令指针的地址来撷取指令,然后再执行所撷取的指令。此操作与撷取并执行分支指令的后续指令有明显差异。撷取并执行分支指令的后续指令是微处理器的预设操作,并且也是在遭遇到非分支指令时的操作。条件非分支指令的例子包含条件ALU指令与条件加载/储存指令。
请参照图29,图中是显示本发明对于非条件分支指令进行预测的微处理器100的一方块图。图29的微处理器100系类似于图1的微处理器100,并包含与图1以及图4相类似的元件,即指令快取102、指令转译器104、配置寄存器122、寄存器配置表(RAT)402、指令发送单元408、执行单元424与重排缓冲器(ROB)422。执行单元424包含一个或多个单元来执行这里所称的微指令126。此外,执行单元424会执行不操作(NOP或no-op)微指令126。不操作微指令126系指示执行单元424不执行操作。进一步来说,在此所称的不操作微指令126系包含一由转译出此不操作微指令126的条件ALU指令124所特定的条件、或条件码。关于不操作微指令126在以下篇幅会有更进一步的说明。微处理器100亦包含架构寄存器、暂时站存器126与图9的旗标926。
图29的微处理器100并包含一动态预测器2932、一静态预测器2936、与一预测器选择器2934。这些元件系耦接至指令转译器104,并用来预测(图2的)一条件ALU指令124的走向(被执行或不被执行)。图1的撷取地址134亦提供给动态预测器2932与预测器选择器2934。
动态预测器2932与预测器选择器2934各自包含一具有多个入口(entry)的高速缓存。各个入口撷取一之前执行的ARM条件ALU指令124的存储器地址。也就是说,当微处理器100退出一条件ALU指令124时,动态预测器2932与预测器选择器2934会被检视,来判断其是否包含一入口具有此条件ALU指令124的地址。若是,就会依据一历史数据更新指针2974所指示的条件ALU指令124的正确走向,来更新此入口;若否,就会将条件ALU指令124配置给动态预测器2932与预测器选择器2934的入口。虽然图1的动态预测器2932与预测器选择器2934系各自独立,不过,在一实施例中,此二个元件系整合至单一高速缓存阵列。也就是说,此单一阵列的各个入口系包含动态预测器2932的走向预测与预测器选择器2934的选择字段(selectorfield)。这在以下篇幅会有进一步说明。
动态预测器2932的各个入口系储存有一条件ALU指令124的地址,各个入口并具有一字段(field)以储存条件ALU指令124的走向预测。此走向预测系因应此地址的条件ALU指令124退出的正确走向来进行更新。走向预测可包含各种不同格式。举例来说,走向预测可包含单一位来表示被执行或不被执行。若是预测走向是被执行,此位就设定为一特定数值,若是不执行,就设定为另一个数值。再举另一个例子,走向预测可包含一多位计数器,在预测走向是被执行时,此多位计数器会尽量递增,若是不执行,就会尽量递减。计数器数值大于中值系预测被执行,小于中值则是预测不被执行。
每次只要从指令快取102撷取指令块(block of instructions),撷取地址134就会提供至动态预测器2932。动态预测器2932检视此撷取地址134来确认是否吻合其高速缓存阵列的有效标签(valid tag),亦即命中有效标签或落空。若是撷取地址134落空,动态预测器2932的动态预测输出端2982输出一数值表示无预测(no prediction,NP)。若是撷取地址134命中,动态预测器2932依据储存于相吻合的入口的走向预测区数值,在其动态预测输出端2982输出一数值表示一执行(executed,E)走向或是一不执行(not executed,NE)走向。在一实施例中,即使撷取地址134命中,动态预测器2932的动态预测输出端2982仍可能输出表示无预测(NP)的数值。例如在历史数据显示条件ALU指令124将被执行或不被执行的机率几乎相等,也就是条件将被满足或不被满足的机率几乎相等的情况下。此走向预测2982系提供给指令转译器104。
预测器选择器2934的各个入口储存有一条件ALU指令124的地址,各个入口并具有一字段以此储存条件ALU指令124的选择子(selector)。选择子指出究竟是动态预测器2932或是静态预测器2936较可能正确预测条件ALU指令124的走向。选择子系因应此地址的条件ALU指令124的退出进行更新,特别是基于标示指示动态预测器2932与静态预测器2936的预测的历史数据更新指针(history update indicator)2974所指示的正确走向与信息来进行更新。选择子可包含各种不同格式。举例来说,此选择子可包含单一位,来表示动态预测器2932或静态预测器2936。在动态预测器2932会正确预测走向时,此位系设定为一特定数值,而在静态预测器2936会正确预测走向时,设定为另一数值。若是二者都正确预测走向,就维持之前选择的预测器。再举另一个例子,选择子可包含一多位计数器,在动态预测器2932正确预测走向时,此多位计数器会尽量递增,若是静态预测器2936正确预测走向,就会尽量递减。若是二者都正确预测走向,就不更新计数器的数值。计数器数值大于中值系预测动态预测器2932将会正确预测走向,小于中值则是预测静态预测2936器将会正确预测走向。
每次由指令快取102撷取一指令块,指令地址134就会提供给预测器选择器2934来检视撷取地址134以确认是否吻合其高速缓存阵列的一有效标签,亦即命中有效标签或是落空。若是撷取地址134落空,预测器选择器2934的预测选择输出端2984输出一数值表示无预测(no prediction,NP)。若是撷取地址134命中,预测器选择器2934依据储存于相吻合的入口的选择区数值,在其预测选择输出端2984输出一数值表示动态预测器2932(D)或是静态预测器2936。在一实施例中,即使撷取地址134命中,预测器选择器2934的选择预测输出端2984可能还是输出数值表示无预测。例如在历史数据显示动态预测器2932或静态预测器2936都不大可能正确预测的情况。此预测选择2984系提供给指令转译器104。
静态预测器2936接收撷取自指令快取102的指令124,并分析此指令124的条件码与/或其特定的特殊ALU功能,以预测此条件ALU指令124的走向。静态预测器2936基本上包含一检视表(lookup table),此检视表包含E、NE、或NP指标关联至各个可能的条件码/ALU功能组合。就一较佳实施例而言,这些E、NE、或NP指标系依据写给ARM指令集架构的程序执行的经验数据(empirical data),配置在静态预测器2936内。静态预测2986系提供给指令转译器104。在一实施例中,此静态预测器2936系整合在指令转译器104内。
指令转译器104利用前述预测2982,2984,2986,来将条件ALU指令转译为微指令126。在以下对应于第30与31图的篇幅会有更进一步的说明。这些预测2982,2984,2986系伴随着条件ALU指令124,沿着微处理器100的管线向下传送,供执行单元424利用以确认各个预测器2932,2934,2936是否正确预测条件ALU指令124的走向。在一实施例中,在判断每个时钟周期撷取自指令快取102的指令块会包含多个条件ALU指令124的情况下,动态预测器2932、预测器选择器2934与静态预测器2936在每个时钟周期都会产生多个预测2982,2984,2986。
在一实施例中,此微处理器100的微架构在许多面向系类似于台湾威盛电子所生产的VIA NanoTM处理器的微架构,不过,本实施例的微处理器100并经修改以支持ARM指令集架构。此VIA NanoTM处理器的微架构系一高效能乱序(out-of-order)执行超纯量微架构,可支持x86指令集架构。此处理器系经如本文所述的修改,使能额外支持ARM微架构,特别是详述于下列篇幅,对应于图2的ARM条件ALU指令124。
寄存器配置表(RAT)402表示一条件移动微指令3046(其详细说明请参照图30)系关联于一ALU微指令3044(其详细说明请参照图30)的结果,二者都是由指令转译器104在特定条件下将条件ALU指令124转译时放出。这些特定条件就是如下所述,在一条件ALU指令124没有可获得的预测或是一条件ALU指令被误预测而重复执行时。
暂时寄存器106储存微处理器100的非架构状态。暂时寄存器106可由微架构所利用来暂时性地储存执行指令集架构的指令所需的中间值(intermediate value)。进一步来说,由指令转译器104放出的微指令可能将暂时寄存器106特定为来源以及/或目的操作数位置。特别是,图30的ALU微指令3044可能将一暂时寄存器106特定为其目的寄存器,相关连的条件移动微指令3046则是将同一个暂时寄存器106特定为其中一个来源寄存器。这在以下篇幅会有更进一步的说明。
其中至少一个执行单元424具有一算术逻辑单元(ALU)(未图标)用以执行各种不同的微指令,包含图30所示的ALU微指令3044与具有条件码(CC)的非条件ALU微指令3045。此外,其中至少一个执行单元424系用以执行图30所示的条件移动微指令3046与具有条件码(CC)的不操作(NOP)微指令3047。就图30的条件移动微指令3046、具有条件码的非条件ALU微指令3045、或是具有条件码的不操作微指令3047而言,执行单元424系接收条件码数值a212(请参照图30)作为输入值以及旗标926的当前数值。执行单元424确认旗标926的数值是否满足条件码a212特定的条件。因此,执行单元424确认条件ALU指令124的正确走向,并判断动态预测器2932以及/或静态预测器2936是否对于条件ALU指令124的走向做出误预测。此判断结果系表示于一误预测指标(misprediction indication)2976提供给重排缓冲器(ROB)422。此外,执行单元424判断预测器选择器2934选择的预测器2932,2936是否正确预测走向。此判断结果系用来更新动态预测器2932与预测器选择器2934。就图30的条件移动微指令3046而言,若是条件被满足,执行单元424系将来源寄存器1的字段a226所特定的暂时寄存器106的数值,移动至图30的目的寄存器字段a232所特定的架构寄存器106。若是条件不被满足,就将来源寄存器2的字段a228特定的架构寄存器106的数值,也就是原本目的寄存器的数值,移动至目的寄存器字段a232所特定的架构寄存器106。
重排缓冲器422接收来自执行单元424的结果,其包含条件ALU指令124的走向是否被误预测的指标。若是此走向并未被误预测,重排缓冲器422系以来源寄存器1与来源寄存器2的字段a206所特定的源操作数上的条件ALU指令124的操作码a202特定出来的ALU操作执行产生的结果,来更新微处理器100的架构状态,这也就是利用这个结果来更新旗标926与条件ALU指令的目的寄存器字段a208所特定的架构寄存器106。这反映在图30的条件移动微指令3046的目的寄存器字段a232与具有操作码的非条件ALU微指令的目的寄存器字段a258。不过,若是走向系被误预测,重排缓冲器422会产生一真值于一误预测指标2976。此误预测指针2976系提供给指令转译器104,藉此,通过重复执行此被误预测的条件ALU指令124,指令转译器104知道需要依据一不预测原则(NP regime)回复实行多微指令(multiplemicroinstruction)技术。此误预测指标2976同时提供给其它相关的管线单元,如寄存器配置表402与指令发送单元408,使其在必要时能清除微指令。此重排缓冲器422同时依据条件ALU指令124的结果,也就是走向预测结果,产生历史数据更新数值2974来更新动态预测器2932与预测器选择器2934。
请参照图30,图中显示图29的指令转译器104对于条件ALU指令124的转译的方块示意图。如本文所述,图29的指令转译器104可能将条件ALU指令124转译为三个不同的微指令集,端视指定转译器104转译条件ALU指令124的环境为何,亦即如图30所示,条件ALU指令124是预测会被执行(E)、预测不会被执行(NE)、或是无预测(NP)。在一实施例中,条件ALU指令124系一ARM指令集架构定义的条件ALU指令。
条件ALU指令124包含一操作码字段a202、一条件码字段a204、来源寄存器1与来源寄存器2的字段a206,与一目的寄存器字段a208。操作码字段a202包含一数值以区分此条件ALU指令与指令集架构内的其它指令。
条件码字段a204系特定一条件,在此条件下,视之旗标926当前的数值是否满足条件,目的寄存器将会被选择性地以下述ALU微指令3044的结果进行更新。依据一兼容于ARM指令集架构的实施例,此条件码字段a204系特定于条件ALU指令124的上四个位(亦即位[31:28]),使能依据下表3对于十六个不同的可能数值进行编码。对架构版本相关数值(0b1111)而言,此指令无法由架构版本预测,而是用来指出其它架构版本的非条件指令延伸空间(unconditional instruction extension space)。
Figure BDA0000151558660000831
Figure BDA0000151558660000841
表3.
来源寄存器1与来源寄存器2的字段a206系特定立即值(immediate value)与抓取输入操作数的架构寄存器106。操作码a202特定的ALU操作(例如:加(add)、减(subtract)、乘(multiply)、除(divide)、及(AND)、或(OR)等)将会依据输入操作数执行以产生一结果。在条件满足时,此结果将会被条件性地加载由目的寄存器字段a208所特定的架构寄存器106。
在无预测(NP)的情况下,指令转译器104系将条件ALU指令124转译为一ALU微指令3044与一条件移动微指令3046供执行单元424执行。
ALU微指令3044包含一操作码字段a212、来源寄存器1与来源寄存器2的字段a216、与一目的寄存器字段a218。操作码字段a212包含一数值来区别ALU微指令3044与微处理器100的微指令集架构的其它微指令。由条件ALU指令124的操作码a202所特定的ALU功能系传达至ALU微指令3044的操作码字段a212。来源寄存器1与来源寄存器2的字段a216系特定立即值与抓取操作数的架构寄存器106。由操作码a212特定的ALU操作将会依据操作数执行以产生一结果。在条件满足时,此结果将会被加载由目的寄存器字段a218所特定的架构或暂时寄存器106。在无预测的情况下,当指令转译器104转译条件ALU指令124时,指令转译器104系以相同于条件ALU指令124的来源寄存器1与来源寄存器2的字段a206的数值,填入ALU微指令3044的来源寄存器1与来源寄存器2的字段a216。当指令转译器104转译条件ALU指令124时,指令转译器104系填充目的寄存器字段a218以特定一暂时寄存器106接收ALU操作的结果。
条件移动微指令3046包含一操作码字段a222、一条件码字段a224、一来源寄存器1的字段a226、一来源寄存器2的字段a228、与一目的寄存器字段a232。操作码字段a222包含一数值来区别此条件移动微指令3046与微处理器100的微指令集架构的其它微指令。条件码字段a224特定一条件,在此条件下,将会依据旗标926的当前数值是否与条件ALU指令124的条件码字段a204同样满足条件,选择性地执行移动操作。确实,在转译条件ALU指令124时,指令转译器104系以相同于条件ALU指令124的条件码字段a204的数值,填入条件移动微指令3046的条件码字段a224。来源寄存器1的字段a226特定一架构或是暂时寄存器106,来自此寄存器的第一源操作数将会被提供至条件移动微指令3046。当指令转译器104转译条件ALU指令124,指令转译器104系以相同于其填入ALU微指令3044的目的寄存器字段a218的数值,填入来源寄存器1的字段a226。指令转译器104系以相同于其填入条件ALU指令124的目的寄存器字段a208的数值,填入来源寄存器2的字段a228。也就是说,来源寄存器2的字段a228会使条件移动微指令3046接收目的寄存器的当前数值,藉以在条件不被满足时,能够将当前数值写回目的寄存器。此指令转译器104系以相同于条件ALU指令的目的寄存器字段a208的数值,填入目的寄存器字段a232,藉此,不是在条件不满足时,将条件ALU指令124所特定的目的寄存器字段的当前数值加载目的寄存器,就是在条件满足时,将抓取ALU微指令3044结果的暂时寄存器的数值加载目的寄存器。
在一实施例中,在无预测(NP)的情况下,指令转译器104系将条件ALU指令124转译为第10至28图所述的微指令126。如前述,微指令组126会随着条件ALU指令124而改变,例如:来源寄存器的其中之一是否为目的寄存器、是否为一旗标更新指令、是否特定一欲移位(pre-shift)、是否使用当前的进位旗标(carry flag)数值、以及在旗标更新预移位(flag-updating pre-shift)的情况下,此ALU操作是否更新进位旗标。特别是,在部分欲移位条件ALU指令124的情况下,微指令组会包含如图10所示的三个微指令126,而非如图30所示的两个微指令126。其次,在条件ALU指令124系将来源寄存器其中之一特定为目的寄存器的情况下,微指令组所包含的微指令126的数量会减少一个,请同时比较图21与图10。更进一步说,这个微指令组不包含条件移动微指令126,而是由条件ALU微指令126提供条件移动的功能。结果是,在一些实例中,微指令组仅包含如图21所示的单一个微指令126,而非如图30所示的两个微指令126。此外,在旗标更新条件ALU指令124的情况下,微指令组所包含的条件移动微指令126略为不同于图30所示的条件移动微指令126。特别是,为了确认条件是否满足,图10步骤1044、1054与1056所述的条件移动微指令(CMOV)126系检验一非架构旗标。此非架构旗标系由微指令集内前一个微指令126基于架构旗标是否满足条件来进行更新。相较之下,图30的条件移动微指令126则是检验架构旗标来确认条件是否满足。最后,虽然图30的ALU微指令126系一非条件ALU微指令126,第10与21图的ALU微指令126在一些情况下可能是条件ALU微指令126。
在被执行(E)的情况下,指令转译器104系将条件ALU指令124转译为一具有条件码的非条件ALU微指令3045供执行单元424执行。此具有条件码的非条件ALU微指令3045包含一操作码字段a252、一条件码字段a254、来源寄存器1与来源寄存器2的字段a256、与一目的寄存器字段a258。此操作码字段a252包含一数值来区别此具有条件码的非条件ALU微指令3045与微处理器100的微指令集架构内的其它微指令。由条件ALU指令124的操作码a202特定的ALU功能系传达至具有条件码的非条件ALU微指令3045的操作码字段a252。来源寄存器1与来源寄存器2的字段a256特定立即值与架构寄存器106来抓取操作数。由操作码a252特定的ALU操作将以此操作数来执行以产生一结果。此结果将会被加载至由目的寄存器字段a258所特定的架构或暂时寄存器106。在执行的情况下,指令转译器104系以相同于条件ALU指令124的来源寄存器1与来源寄存器2的字段a206的数值,填入具有条件码的非条件ALU微指令3045的来源寄存器1与来源寄存器2的字段a256。在转译条件ALU指令124时,指令转译器104系以相同于条件ALU指令124的条件码字段a204的数值,填入具有条件码的非条件ALU微指令3045的条件码字段a254。此条件码a254系由执行单元424来确认相关条件ALU指令124的走向是否被误预测。在转译条件ALU指令124时,指令转译器104系以相同于条件ALU指令124的目的寄存器字段a208的数值,填入目的寄存器字段a258。因此,由于相关的条件ALU指令124被预测执行,此具有条件码的非条件ALU微指令3045系一非条件微指令,它不论条件是否满足都会被执行。不过,由于执行预测仍须经审查,而在发现误预测的情况下,将不会以ALU结果更新目的寄存器字段a258所特定的架构寄存器106,而是清除架构寄存器106,并重复执行相关的条件ALU指令124。这此执行就不具有预测。因此,此具有条件码的非条件ALU微指令3045的预测系类似于一预测分支指令(predicted branch instruction)。相反地,若是执行预测是正确的,就会利用ALU结果来更新目的寄存器字段a258所特定的架构寄存器106。在一实施例中,在执行的情况下,除了图30的具有条件码的非条件ALU微指令126之外,当条件ALU指令124系特定一如第10至28图所述的预移位操作,指令转译器104会另外将条件ALU指令124转译为一移位微指令126,此移位微指令126系相似于具有条件码的非条件ALU微指令126。举例来说,此移位微指令126系类似于图10的步骤1034所述的移位微指令,而图30的具有条件码的非条件ALU微指令126系经修正来将暂时寄存器特定为其源操作数寄存器,此暂时寄存器系移位微指令126的目的寄存器。在存在误预测的情况下,除了具有条件码的非条件ALU微指令126之外,此移位微指令126将会被清除,请一并参照图31的步骤3134。
在不执行(NE)的情况下,指令转译器104系将条件ALU指令124转译为一具有条件码的不操作(NOP)微指令3047供执行单元424执行。此具有条件码的不操作(NOP)微指令3047包含一操作码字段a272与一条件码字段a274。此操作码字段a272包含一数值以区别此具有条件码的不操作微指令3047与微处理器100的微指令集架构内的其它微指令。在转译条件ALU指令124时,此指令转译器104系将相同于条件ALU指令124的条件码字段a204的数值填入此具有条件码的不操作微指令3047的条件码字段a274。此条件码a274系供执行单元424利用来确认相关的条件ALU指令124的走向是否被误预测。此具有条件码的不操作微指令3047除了使执行单元424启动来检查条件ALU指令的走向预测外,并不会执行其它操作。
请参照图31(包括图3lA和图31B),图中是一流程图显示本发明图29的微处理器100执行图30的一条件ALU指令124的一实施例。此流程同时始于步骤3102、3104与3106。
在步骤3102中,一个包含有图30的条件ALU指令124的指令块系撷取自如图29所示的指令快取102的撷取地址134。接下来进入步骤3108。
在步骤3104中,动态预测器2932检视撷取地址134,并提供动态预测2982至图29的指令转译器104。接下来进入步骤3108。
在步骤3106,预测器选择器2934检视撷取地址134并提供一预测器选择2984至图29的指令转译器。接下来进入步骤3108。
在步骤3108,静态预测器2936接收条件ALU指令124,经评估后,提供静态预测2986至图29的指令转译器104。接下来进入步骤3112。
在步骤3112,指令转译器104遭遇条件ALU指令124,并接收到来自动态预测器2932、预测器选择器2934与静态预测器2936的预测2982,2984,2986,基于此,指令转译器104产生此条件ALU指令124的走向预测。接下来进入步骤3114。
在步骤3114中,指令转译器104确认其是否在步骤3112系预测条件ALU指令124将被执行(E)。若是,此流程进入步骤3116;否则就进入步骤3118进行判断。
在步骤3116,指令转译器104系依据执行预测,放出如图30所示的具有条件码的非条件ALU微指令3045。接下来进入步骤3126。
在步骤3118,指令转译器104确认其是否在步骤3112系预测条件ALU指令124将不会被执行(NE)。若是,此流程进入步骤3122;否则就进入步骤3124。
在步骤3122,指令转译器104系依据不执行预测,放出如图30所示的具有条件码的不操作微指令3047。接下来进入步骤3126。
在步骤3124,在无预测的情况下,指令转译器104系放出如图30所示的ALU微指令3044与条件移动微指令3046。接下来进入步骤3126。
在步骤3126,执行单元424执行指令转译器104于步骤3116,3122或3124放出的微指令126。在无预测的情况下,执行单元424系通过执行由操作码字段a212所特定的ALU功能于特定于字段a216的源操作数,来执行ALU微指令3044,以产生一结果。此结果系输出至结果总线128并被写入重排缓冲器配置给ALU微指令3044的入口,期待之后能写入由字段a218特定的暂时寄存器106。一旦ALU微指令3044的结果是可获得的,条件移动微指令3046就能够被发送至执行单元424以确认旗标926是否满足由条件码244所特定的条件。若是,ALU微指令3044(不是来自指向总线(forwarding bus)就是来自暂时寄存器106)的结果就会输出至结果总线128,并被写入重排缓冲器配置给条件移动微指令3046的入口,期待之后能被写入由字段a232所特定的架构寄存器106。不过,若是条件不满足,由来源寄存器2的字段a228所特定的架构寄存器106的原本数值,即由条件ALU指令124的目的寄存器字段a208所特定的架构寄存器,就会被输出至结果总线并被写入重排缓冲器配置给条件移动微指令3046的入口,期待之后能被写入字段a232所特定的架构寄存器106。此执行单元242同时指定一正确预测至重排缓冲器(因为指令转译器104是在无预测的情况下产生ALU微指令3044与条件移动微指令3046)。也就是说,在无预测的情况下,既然没有预测,就决不会产生误预测。在预测执行的情况下,执行单元424系通过执行由操作码字段a252所特定的ALU功能于字段a256所特定的源操作数,来执行具有条件码的非条件ALU微指令3045以产生一结果。此结果系输出至结果总线128并被写入重排缓冲器配置给具有条件码的非条件ALU微指令的入口,期待之后能被写入字段a258所特定的架构寄存器106。执行单元424同时确认旗标926是否满足由条件码a254特定的条件,并据以提供一指标至重排缓冲器422。进一步来说,执行单元424只在旗标926不满足由条件码a254特定的条件时,会指示误预测至重排缓冲器422,这是因为指令转译器104在执行预测的情况下会产生具有条件码的非条件ALU微指令3045,否则就指示正确预测。在不执行(NE)的情况下,执行单元424不会执行任何操作,来因应具有条件码的不操作微指令3047的执行。此外,执行单元424确认旗标926是否满足由条件码a274所特定的条件并据以提供一指标给重排缓冲器422。进一步来说,执行单元424只在旗标满足条件码a254所特定的条件时,会指示误预测给重排缓冲器422,这是因为指令转译器104在预测不执行的情况下,会产生具有条件码的不操作微指令3047,否则就指示正确预测。接下来进入决策步骤3128。
在决策步骤3128,重排缓冲器422基于接收自执行单元242的误预测指针2976,判断条件ALU指令124的走向是否被误预测。若是,此流程进入步骤3134;若否,就进入步骤3132。
在步骤3132,重排缓冲器422系以条件ALU指令124的结果更新微处理器100的架构状态,亦即更新架构寄存器106与旗标926。进一步来说,由于重排缓冲器422必须依照程序顺序退出指令,重排缓冲器422会在条件移动微指令3046(在无预测的情况下)、具有条件码的非条件ALU微指令3045(在预测执行的情况下)、或是具有条件码的不操作微指令3047(在预测不执行的情况下)变成微处理器100中最旧的微指令时,更新架构状态。接下来进入步骤3136。
在步骤3134中,重排缓冲器422产生一真值(true value)于误预测指标2976,使条件ALU指令124转译产生的微指令与所有与其相关的微指令都被清除(flush)。此外,在误预测指标2976产生一真值也会使条件ALU指令124重复执行。也就是说,指令转译器104会再次转译条件ALU指令124,只是这次是依循步骤3124的无预测(NP)原则进行。依据另一实施例,在条件ALU指令124重复执行时,指令转译器104会反转正确的预测,并依据此反转后的预测进行转译。也就是说,若是预测执行(E)是误预测,指令转译器104就会依据预测不执行(NE)的原则来执行转译,若是预测不执行(NE)是误预测,指令转译器就会依据预测执行(E)的原则来执行转译。不过,值得注意的是,这个实施例会容易产生活锁(livelock)的情形。
在步骤3136,重排缓冲器422提供适当数值的历史数据更新指针2974至动态预测器2932与预测器选择器2934,并依据执行单元424评估的正确走向与沿着管线流动的预测信息2982,2984,2986,更新动态预测器2932与预测器选择器2934。
由前文可以发现,本发明的微处理器100系将一条件ALU指令124转译为单一个微指令,而非多个微指令。在也就是在能够预测走向的时候,将会有重大的优势。
首先,本发明可以减少一个或多个需要占据乱序执行微处理器100的资源中的额外指令槽(instruction slot)的微指令。这些资源包括寄存器配置表402、重排缓冲器、保留站(未图标)与执行单元424。因此,本发明可以减少并简化所需使用的资源,这些资源所消耗的能量也可以减少。
其次,指令转译器104每个时钟周期所能转译的指令集架构(例如ARM指令)程序指令的平均数量可获得增加。假定指令转译器104每个时钟周期能够转译最多三个ARM指令,不过每个时钟周期最多只能放出三个微指令,这就会产生一额外限制,即此指令转译器104在同一个时钟周期内必须放出关联于此ARM指令的所有微指令,也就是说,指令转译器104在第一时钟周期放出关联于一ARM指令的微指令,又在下一个时钟周期放出关联于此ARM指令的第二个微指令。假定下列ARM指令序列(instruction sequence),其中CAI是一个条件ALU指令124而“Rx”数值系通用寄存器:
CAI EQ R1,R2,R3
CAI NE R4,R5,R6
CAI CS  R7,R8,R9
在不具有预测器2932,2934,2936(或具有但不进行预测)的处理器中,指令转译器104必须花费三个时钟周期来转译这三个CAI指令。不过,在具有预测器2932,2934,2936进行预测的处理器中,指令转译器可以在同一个时钟周期转译全部的三个CAI指令。其次,此优点亦可在混合有非CAI的指令,亦即其它ARM指令的情况中获得印证。举例来说,假定CAI指令系接着一个会被转译为二个微指令的ARM指令D,而此CAI指令的走向系经预测器2932,2934,2936预测,一个会被转译为二个微指令的ARM指令E接着CAI指令,一个会被转译为单一个微指令的ARM指令F接着ARM指令E。在这个情况下,指令转译器可在同一个时钟周期转译ARM指令D与CAI指令,随后在下一个时钟周期转译ARM指令E与F。也就是在两个时钟周期内转译四个ARM指令。相较之下,若没有本实施例所提供的功能,指令转译器104将需要三个时钟周期才能转译这四个指令。相类似的优点也可在指令发送单元408与重排缓冲器422发现。
第三,在通过预测器2932,2934,2936预测走向,使指令转译器104只须放出单一个微指令的情况下,条件ALU指令124的延迟(latency)可降低。
第四,重排缓冲器与保留站中不具有额外的微指令,可以提升微处理器的前瞻能力(lookahead capability),因而提升处理器对于所执行的程序的指令层平行处理(instruction level parallelism)能力,藉此可以改善对于执行单元424的利用,以提升微处理器100的处理能力(throughput)。进一步来说,省略第二微指令可以在重排缓冲器中保留更多空间给微指令。此特征的优点在于,其可产生一个更大的微指令池供发送微指令给执行单元424执行。微指令在“完成准备(ready)”之前还不能发送出去执行,这也就是此微指令中,来自之前微指令的所有源操作数都处于可取得的状态,才能发送出去。因此,微处理器100寻找完成准备的微指令的微指令池越大,找到的机会就越大,所以执行单元424就有较大的机会被利用。这通常被称为微处理器的前瞻能力,也就是充分利用微处理器所要执行的程序的指令层平行处理(instruction levelparallelism)能力。前瞻能力越大,通常就越会提升执行单元424的利用。因此,本发明的微处理器100具有潜力能通过将条件ALU指令124转译为单一微指令,而非多个微指令,以提升其前瞻能力。
虽然前述实施例的微架构除了支持ARM指令集架构条件ALU指令,也支持x86指令集架构,值得注意的是,本发明亦可应用于其它实施例,支持不同于ARM指令集架构的其它指令集架构的条件ALU指令。其次,值得注意的是,本发明亦可应用于没有预先存在的微架构或是此预先存在的微架构所支持的指令集架构并非x86指令集架构的情况。此外,值得注意的是,本发明在此所描述的是一个广泛的处理器概念,通过在指令执行前,预先在管线预测条件ALU指令的走向,来支持一指令集架构的条件ALU指令。就一较佳实施例而言,系类似于分支预测技术,并确认所撷取的指令流,并依据走向预测的有无发送不同的微指令序列。此外,虽然本文所描述的实施例系包含动态预测器与静态预测器,本发明亦可应用于只具有静态预测器或是只具有动态预测器的实施例。其次,本发明亦可应用于具有多个动态与/或静态预测器的实施例,而其中的预测器选择器是从多个动态与静态预测器中进行选择。更其次,本发明亦可应用于动态预测器整合于一分支预测阵列,例如一分支目标地址快取(branch target address cache),的实施例。这个实施例的缺点在于,在各个入口用来储存一分支指令的目标地址的空间造成浪费,这是由于对于条件ALU指令并不需要预测其目标地址。基于程序中的指令混合,虽然分支指令与条件ALU指令间可能产生干扰或颠簇,不过,这个实施例仍可能具有以下优点,整合后的高速缓存的储存空间会更有效率被利用,整合后的阵列所具有的入口数可能多于个别阵列的入口数的总合。
虽然前述实施例系针对属于条件ALU指令的条件非分支指令,本发明亦可应用预测器来预测于其它类型的条件非分支指令。举例来说,条件加载指令就可被预测。若是预测执行,指令转译器产生一具有条件码的非条件加载微指令。此具有条件码的非条件加载微指令包含由条件加载指令所特定的条件,使执行管线能检测是否误预测。若是执行管线检测到误预测,就会避免执行任何架构状态更新的操作,例如在加载造成转译后备缓冲区(TLB)错过时更新存储器的页表游荡(page table walk)、或是在加载产生一例外状态时产生一架构例外事件。此外,若是在快取中出现加载错过的情形,执行管线会避免与处理器总线产生交流填入错过的快取线。若是预测结果是无预测,指令转译器会产生微指令集来条件执行加载操作。在一实施例中,若是预测结果是无预测,此微指令集可采取类似于美国专利临时申请案61/473,062所描述的方式。
虽然以上实施例系关于ARM ISA条件非分支指令,本发明亦可利用预测器预测应用于其它ISA的条件非分支指令。举例来说,x86ISA的条件非分支指令,如CMOVcc与SETcc即可被预测。
修正后的立即值应用于指令转译
ARM指令集架构定义一数据处理指令集,允许指令特定一立即源操作数,也就是这里所称的“立即操作数指令(immediate operand instruction)”。此立即源操作数是一个32位的数值,通过将一个8位的数值向右旋转一个4位数值的两倍所产生。此8位数值系特定于指令中标示immed_8的字段,4位数值系特定于指令中标示为rotate_imm的字段。因此
立即操作数数值=immed_8>>(2*rotate_imm)
处理一既存微架构内的立即操作数指令的方法系提供给指令转译器来产生两个微指令。第一微指令对immed_8数值执行两倍于rotate_imm的数值的转动操作,以产生一结果。第二微指令接收第一微指令的结果作为一用以执行立即操作数指令所特定的ALU功能的源操作数。此实施例可参照第10与21图。举例来说,图10的步骤1034中,指令转译器产生SHF微指令来执行一移位操作(在本实施例即是转动操作)以产生一移位后的结果写入一暂时寄存器。此移位操作可执行于一特定于立即操作数指令的立即数值(immediatevalue)(举例来说,即对应于图10的步骤1012与1024)。不过,相较于利用指令转译器在可能时产生单一微指令的方法,此方法应用于乱序执行处理器会有许多缺点。
首先,此额外的微指令会在乱序执行处理器的各个资源中占据一额外的指令槽,如寄存器配置表、重排缓冲器、保留站与执行单元内的额外指令槽或入口,因而需要较大、较复杂的资源,能量的消耗也会较高。
其次,部分功能单元系受限于每个时钟周期内所能执行的最大指令数量。举例来说,依据一实施例,指令转译器每个时钟周期能放出的指令数量有其最大限制(例如每个时钟周期三个微指令),发送单元每个时钟周期能发送给执行单元的指令数量有其最大限制(例如每个时钟周期四个微指令),而退出单元每个时钟周期能退出的指令数量也有其最大限制(例如每个时钟周期三个微指令)。因此,这些功能单元内的额外微指令的产生,会减少每个时钟周期内所能放出、发送或退出的平均指令数量,因而限制了处理器的效能表现。
第三,立即操作数指令在其构成微指令完成执行前还不会退出,因为第二微指令系关联于第一微指令的结果,因此在第一微指令产生结果前,第二微指令无法发送至执行单元。这些都会对于立即操作数指令的总执行时间造成额外的延迟。
第四,在重排缓冲器以及/或保留站内出现额外的微指令,会降低处理器的前瞻能力(lookahead capability),因而降低处理器利用指令层平行处理来执行程序的能力,因而会减少执行单元的利用率,降低处理器的整体效能。
本文所描述的实施例具有潜力能在执行立即操作数指令时有较佳的表现。在此系将immed_8字段与rotate_imm字段合并称为“立即字段”。特别是,指令转译器系用以了解立即字段数值的一预定子集以及由各个相对应的立即字段数值所产生的相关的32位立即操作数数值。在指令转译器遭遇一立即操作数指令时,指令转译器会确认所特定的立即字段数值是否落于此预测子集。若是,指令转译器就放出正确的32位立即操作数至立即操作数总线,并伴随着立即操作数指令,一并沿着管线传送以供执行。若是立即字段数值并不落于预定子集,指令转译器采取较低效能的方法,放出两个微指令。可通过执行应用软件与观察产生不同立即字段数值的相对时钟,并选择少数的最常观察到的立即字段数值作为立即字段数值的预设集合,以维持其尺寸、能量消耗、与指令转译器的复杂度在一定的范围内。
请参照图32的方块图,图中显示本发明的一微处理器100在指令转译过程中处理修正后的立即常数。图32的微处理器100系类似于图1的微处理器,并包含类似于第1至图4中所示的元件,这些元件包含指令快取102、指令转译器104、配置寄存器122、寄存器配置表402、指令发送单元408与执行单元424。执行单元424包含一个或多个单元用以执行以下所述的微指令126。进一步来说,执行单元424包含一个或多个单元,以执行图33所示的向右转动(ROR)微指令3344(在此亦称为移位微指令)、ALU微指令3346、以及立即ALU微指令3348。微处理器100并包含图33所示的架构寄存器与暂时寄存器106以及旗标926。指令快取102撷取图33所示的立即操作数指令124。
在一实施例中,此微处理器100的微架构在许多面向系类似于台湾威盛电子所生产的VIA NanoTM处理器的微架构,不过,本实施例的微处理器100并经修改以支持ARM指令集架构。此VIA NanoTM处理器的微架构系一高效能乱序(out-of-order)执行超纯量微架构,可支持x86指令集架构。此处理器系经如本文所述的修改,使能额外支持ARM微架构,特别是详述于图33的相关篇幅。进一步来说,指令转译器104在遭遇到一立即操作数指令124,而其特定的立即字段b207(请参照图33所示)的数值系落于此指令转译器104已知数值所构成的一预定子集时,就会放出一个立即操作数3366于一立即操作数总线作为响应。此立即操作数3366系沿着微处理器100管线的阶段(stage)向下传递,直到抵达执行单元424。
寄存器配置表402从指令转译器104接收微指令164,并相对应地产生各个微指令164的相关信息。进一步来说,此寄存器配置表402指出,ALU微指令3346(可参照图33)系关联于ROR微指令3344(可参照图33)的结果,而在指令转译器104转译一立即操作数指令,其所特定的立即字段数值b207系落于立即字段b207的数值所构成的一预定子集内时,就会一并放出这两个微指令。此外,如图34(包括第34A图和第34B图)所示,在指令转译器104额外放出一条件移动微指令126的情况下(例如图10所描述者),寄存器配置表402会指出,此条件移动微指令126系关联于ALU微指令3346的结果。
暂时寄存器106储存微处理器100的非架构状态,并且可供微架构用于暂时储存执行指令集架构的指令124所需的中间数值。进一步来说,由指令转译器104所放出的微指令126会将暂时寄存器106特定为来源以及/或目的操作数位置。图33所示的ROR微指令3344即是将一个暂时寄存器106特定为其目的寄存器,而ALU微指令3346则是将同一个暂时寄存器106特定为其来源寄存器。这在以下篇幅会有更详细的说明。
至少一个执行单元424包含一个算术逻辑单元(ALU)(未图标)用以执行各种微指令。这些微指令包含图33所示的ROR微指令3344、ALU微指令3346、以及立即ALU微指令3348。在立即ALU微指令3348的情况下,执行单元424接收来自指令转译器104的立即操作数3366的数值作为其输入。此执行单元424执行由操作码字段b212所特定的ALU功能,而此功能系相同于由立即操作数指令124所特定的ALU功能,并且此指令系基于立即操作数3366与一个第二源操作数进行转译。在ALU微指令3346的情况下,执行单元424执行由操作码字段b212所特定的ALU功能,而此功能系相同于由立即操作数指令124所特定的ALU功能,并且此指令系基于二个源操作数进行转译。此二个源操作数其中之一系来自暂时寄存器106,而相关的ROR微指令3344系将其结果写入此寄存器。在ROR微指令3344的情况下,执行单元424将一个8位数值以两倍于一个4位数值的量向右转动,以产生一个32位的立即数值写入一暂时寄存器106供后续相关的ALU微指令3344使用。前述8位数值系相同于由立即操作数指令124的immed_8字段b208所特定的数值,前述4位数值系相同于由立即操作数指令124的rotate_imm字段b209所特定的数值。
请参照图33,图中是以一方块图,显示本发明将一个立即操作数指令124选择性地转译为一个ROR微指令3344与一个ALU微指令3346或是转译为一个立即ALU微指令3348的一实施例。如本文所述,指令转译器104系在立即字段b207所特定的数值落入指令转译器104已知的预定子集内时,将立即操作数指令124转译为一个立即ALU微指令3348供执行单元424执行,而由此,指令转译器104系放出一相对应的评估(evaluated)立即操作数数值3366。如图32所示,在立即字段b207所特定的数值未落入预定子集内时,指令转译器104系将立即操作数指令124转译为一个ROR微指令3344接着一个ALU微指令3346供执行单元424执行。在一实施例中,立即操作数指令124系一个由ARM指令集架构所定义的立即操作数指令,以ARM的用语来说,就是一个具有数据处理立即编码(data processing immediate encoding)功能的指令。
立即操作数指令124包含一操作码字段b202、一来源寄存器1的字段b204、目的寄存器字段b206、一个immed_8字段b208、以及一个rotate_imm字段b209。如图33所示,immed_8字段b208与rotate_imm字段b209的合并即构成立即字段b209。此操作码字段b202包含一数值,用以区分立即操作数指令124与此指令集架构的其它指令,并且,此数值系特定一个执行于源操作数的ALU功能。就一个ARM立即操作数指令124而言,此ALU功能举例来说,可包含加(ADD)、带进位加(add with carry,ADC)、逻辑及(logicalAND,AND)、逻辑位清除(logical bit clear,BIC)、比较取负(compare negative,CMN)、比较(compare,CMP)、逻辑异或(logical exclusive-OR,EOR)、移动(move,MOV)、反向移动(move not,MVN)、逻辑或(logic OR,ORR)、反向减(reversesubtract,RSB)、带进位反向减(reverse subtract with carry,RSC)、带进位减(subtract with carry,SBC)、减(subtract,SUB)、相等测试(test equivalence,TEQ)与测试(test,TST)。来源寄存器1的字段b204特定一架构寄存器106或是一暂时寄存器106,执行单元424所接收的源操作数系来自这个被特定的寄存器。目的寄存器字段b206特定一架构寄存器106或是一暂时寄存器106,结果则是写入这个被特定的寄存器。前述immed_8字段b208抓取一个8位常数,此常数会以两倍于前述4位的rotate_imm字段b209的数值向右旋转,以产生一立即源操作数。如前文第9至28图的实施例所述,立即操作数指令124可包含一条件ALU指令。举例来说,此立即操作数指令124可以是如步骤1056所述的一个ARM NCUALUOP指令124,其系将一修正后的立即常数(immediate constant)特定为其源操作数,而不是寄存器。
ROR微指令3344包含一个操作码字段b222、一个目的寄存器字段b226、以及两个用以特定源操作数的源操作数字段,如图33所示,分别标示为immed_8字段b228以及rotate_imm字段b229,用以实行立即操作数指令124。此操作码字段b222包含一数值,用以区别ROR微指令3344与此微处理器100的微指令集架构的其它微指令。目的寄存器字段b226系特定一架构寄存器106或是一目的寄存器106,ROR微指令3344的结果将会写入其中。在指令转译器104转译立即操作数指令124,而立即字段b207所特定的数值并为落入预定子集时,指令转译器104会以立即操作数指令的immed_8字段b208与rotate_imm字段b209的相对应数值填入immed_8字段b228与rotate_imm字段b229,并且,指令转译器104会填满目的寄存器字段b226以特定一暂时寄存器106来接收ALU功能的结果,此寄存器后续将会被ALU微指令3344利用来作为其源操作数。除了前文所述,ROR微指令3344还可包含一个移位微指令126(从图10起标示为SHF)来特定一修正后的立即常数,这在第10与图11有更详细的说明。举例来说,若是被转译的立即操作数指令124是步骤1056所述特定一修正后的立即常数的ARM NCUALUOP指令124,此ROR微指令3344就可能是步骤1056中的SHF微指令126。
ALU微指令3346包含一操作码字段b232、一来源寄存器1的字段b234、一来源寄存器2的字段b235、一目的寄存器字段b236。此操作码字段b232包含一数值,用以区别ALU微指令3346与此微处理器100的微指令集架构的其它微指令,并且,其所特定用以执行于源操作数的ALU功能系相同于立即操作数指令124转译产生的ALU功能。来源寄存器1的字段b234特定一架构寄存器106或是一暂时寄存器106,第一源操作数将会由这个被特定的寄存器提供给ALU微指令3346,来源寄存器2的字段b235特定一架构寄存器106或是一暂时寄存器106,第二源操作数将会从这个被特定的寄存器提供给ALU微指令3346,目的寄存器字段b236特定一架构寄存器106或是一暂时寄存器106,ALU微指令3346的结果将会写入这个被特定的寄存器。当指令转译器104转译立即操作数指令124且立即字段b207所特定的数值并未落入预定子集,指令转译器104会填满来源寄存器1的字段b234以特定一寄存器,其与立即源操作数指令124的源操作数1的字段b204所特定者相同,指令转译器104会填满目的寄存器字段b236以特定一寄存器,其与立即源操作数124的目的寄存器字段b206所特定者相同,指令转译器104也会填满来源寄存器2的字段b235以特定一暂时寄存器106,其与ROR微指令3344的目的寄存器字段b226所特定者相同。如前述,此ALU微指令3346可包含任何ALU操作微指令126,分别标示为ALUOP、ALUOPUC、CALUOP以及NCALUOP,还包含详述于第10与12图的条件版本的微指令。举例来说,若是被转译的立即操作数指令124是步骤1056所述的ARM NCUALUOP指令124,而此指定所特定的修正后的立即常数并未落入预定子集,此ALU微指令3346就可能是步骤1056中的NCUALUOP微指令126。
立即ALU微指令3348包含一操作码字段b212、一来源寄存器1的字段b214、一目的寄存器字段b216、与一个immediate-32字段b218。就一较佳实施例而言,此immediate-32字段b218就是执行立即ALU微指令3348的执行单元424所接收的立即操作数3366。也就是说,操作数多工器(operand mux)(未图示)运作以选择将立即操作数3366提供给接收立即ALU微指令3348的执行单元424。操作码字段b212包含一数值以区别ALU微指令3348与微处理器100的微指令集架构内的其它微指令,并且,其所特定用以执行于源操作数的ALU功能系相同于立即操作数指令124转译产生的ALU功能。此来源寄存器1的字段b214系特定一架构寄存器106或是一暂时寄存器106,一个第一源操作数将会从中提供给ALU微指令3346,目的寄存器字段b216特定一架构寄存器106或是一暂时寄存器106,立即ALU微指令3348的结果将会写入此特定的寄存器。当指令转译器1045转译立即操作数指令124且立即字段b207特定的数值落入预定子集时,指令转译器104会填满来源寄存器1的字段b214以特定一个寄存器,其相同于立即操作数指令124的源操作数1的字段b204所特定者,指令转译器104会填满目的寄存器字段b216以特定一个寄存器,其相同于立即操作数指令124的目的寄存器字段b206所特定者。如前述,此立即ALU微指令3346可包含任何ALU操作微指令126,分别标示为ALUOP、ALUOPUC、CALUOP以及NCALUOP,包含详述于第10与12图的条件版本的微指令,以特定一立即源操作数。举例来说,若是被转译的立即操作数指令124是步骤1056所述的ARM NCUALUOP指令124,其特定的修正后的立即常数系落于预定子集内,此立即ALU微指令3348可以是步骤1056内的NCUALUOP微指令126,而指令转译器104将不会放出步骤1056的SHF微指令126,以提供前述有关于利用指令转译器104处理修正后立即常数所产生的优点。
请参照图34,图中是以一流程图,显示本发明图32的微处理器100执行图33的一立即操作数指令的操作的一实施例。此流程始于步骤3402。
在步骤3402中,指令转译器104遭遇图33的一立即操作数指令124,并以由多个数值构成的预定子集检查立即字段b207(就一ARM立即操作数指令124而言,即是位于下方的12个位)。接下来进入一决策步骤3404。
在决策步骤3404中,指令转译器104确认立即字段b207的数值是否落于此数值预定子集内。若是,前进至步骤3406;否则就前进至步骤3414。
在步骤3406,指令转译器104放出单一个如图33所示的立即ALU微指令3348,以响应立即操作数指令124。在一实施例中,若是立即操作数指令124系一条件ALU指令124特定一来源目的共享的寄存器,此立即ALU微指令3348将包含图21的步骤2134、2136、2154与2156所描述的诸多ALU微指令126其中之一,不过不包含前述SHF微指令。若是此条件ALU指令124并未特定一来源目的共享的寄存器,指令转译器104就会放出立即ALU微指令3348与一个图10的步骤1034、1036、1054、1056所描述的条件移动微指令126(XMOV以及CMOV),不过不包含前述SHF微指令。在这个状况下,寄存器配置表402产生的条件移动微指令126的关联性信息,会指出条件移动微指令126系关联于立即ALU微指令3348的结果。接下来进入步骤3408。
在步骤3408,指令发布单元408将立即ALU微指令3348发布给执行单元424。接下来进入步骤3412。
在步骤3412中,执行单元424从立即操作数总线接收通过管线传输的32位立即操作数3366的数值,以及由来源寄存器1的字段b214所特定的源操作数。执行单元424执行立即ALU微指令3348的过程,是将操作码字段b212所特定的ALU功能执行于32位立即操作数3366与其它源操作数,以产生结果至结果总线128,供目的寄存器字段b216所特定的架构寄存器106进行后续退出操作。此架构寄存器106系相同于由立即操作数指令124的目的寄存器字段b206所特定的架构寄存器106。若是在步骤3406中,指令转译器104放出一个条件移动微指令126,立即ALU微指令3348的结果就注定会是一个暂时寄存器106,而非由立即操作数指令124所特定的目的寄存器106,并且,为了以响应步骤3412中执行单元424完成立即ALU微指令的操作,如前述,尤其是第10至图20,指令发布单元408会发布条件移动微指令126至执行单元424,而执行单元424会执行此条件移动微指令126以产生立即操作数指令124的结果。此流程终止于步骤3412。
在步骤3414中,指令转译器104放出两个微指令,即图33中的一个ROR微指令3344与一个ALU微指令3346,以响应此立即操作数指令124。在一实施例中,若是此立即操作数指令124系一个特定一修正后立即常数的条件ALU指令124,ROR微指令3344会包含在图10的步骤1034、1034、1054与1056或是在图21的步骤2134、2136、2154与2154所描述的SHF微指令126。举例来说,若是被转译的立即操作数指令124系步骤1056中的ARMNCUALUOP指令124,其特定的修正后立即常数并未落于预定子集内,此ROR微指令3344可能就会是步骤1056中的SHF微指令126。在一实施例中,若是条件操作数指令124系一个条件ALU指令124,其特定一个来源目的共享的寄存器,ALU微指令3346可能就会包含图21的步骤2134、2136、2154与2156中描述的ALU微指令126的其中之一。若是立即操作数条件ALU指令124并未特定一来源目的共同的寄存器,指令转译器104就会放出ALU微指令3346与图10的步骤1034、1036、1054与1056所描述的一个条件移动微指令126(XMOV与CMOV)。接下来进入步骤3416。
在步骤3416,寄存器配置表402产生ALU微指令3346的关联性信息,指出ALU微指令3346系关联于ROR微指令3344的结果。若是在步骤3414中,指令转译器104放出一个条件移动微指令126,寄存器配置表402就会产生条件移动微指令126的关联性信息,指出条件移动微指令126系关联于ALU微指令3346的结果。接下来进入步骤3418。
在步骤3418中,指令发布单元408发布ROR微指令3344至执行单元424。所以,执行单元424会接收由立即操作数指令124所特定的immed_8字段b208与rotate_imm字段b209的数值。接下来前进至决策步骤3412。
在步骤3422中,执行单元424执行ROR微指令3344以产生立即操作数结果,写入由目的寄存器字段b226所特定的暂时寄存器106。接下来进入步骤3424。
在步骤3424中,因应步骤3422中执行单元424完成ROR微指令3344的操作,指令发布单元会将ALU微指令3346发布至执行单元424。所以,执行单元424接收步骤3422所产生的ROR微指令3344的结果以及由ALU微指令3346的来源寄存器1的字段b234所特定的操作数数值,此操作数数值与立即操作数指令124的来源寄存器1的字段b204所特定的架构寄存器106相同。接下来前进至决策步骤3426。
在步骤3426中,执行单元424执行ALU微指令3346的过程,系将操作码字段b232所特定的ALU功能执行于两个源操作数,以产生一结果提供至结果总线128供目的寄存器字段b236所特定的架构寄存器106在后续退出步骤利用。此架构寄存器106系相同于由立即操作数指令124的目的寄存器字段b206所特定的架构寄存器104。若是步骤3414中,指令转译器104放出一个条件移动微指令126,ALU微指令3346的结果就会注定是一个暂时寄存器106而非由立即操作数指令所特定的目的寄存器106,并且,因应执行单元424在步骤3426中完成ALU微指令3346的操作,指令发布单元408会发布条件移动微指令126至执行单元424,而如前述,尤其是第10至20图,执行单元424就会执行条件移动微指令126以产生立即操作数指令124的结果。此流程终止于步骤3426。
从前文可知,本发明的微处理器100在一定情况下,系将立即操作数指令124转译为单一个立即ALU微指令3346,而非多个微指令。此特征可提供许多重要的优点。前述一定情况就是,当立即字段b207系落于一数值预定子集内,而指令转译器104可以直接放出相对应的评估后的立即操作数3366的数值。
首先,本发明可减少一个微指令在乱序执行处理器的各个资源中占据一额外的指令槽,如寄存器配置表、重排缓冲器、保留站与执行单元内的额外指令槽或入口,因而能够缩减、简化资源,能量的消耗也可以降低。
其次,每个时钟周期内指令转译器104所能转译的指令集架构(例如ARM指令)的程序的平均指令数量可获得提升。举例来说,假定指令转译器104每个时钟周期能转译最多三个ARM指令,但是每个时钟周期最多只能放出三个微指令,此外,它还必须在同一个时钟周期内,放出所有关联于此ARM指令的微指令,也就是说,此指令转译器104无法在一第一时钟周期放出关联于一ARM指令的微指令,同时又在下一个时钟周期放出关联于此ARM指令的第二个微指令。假定ARM指令序列如下,其中,IOI是一个立即操作数指令124,例如一个条件ALU指令,其特定一目的寄存器,此目的寄存器同时也是来源寄存器,而“Rx”数值是通用寄存器:
IOI R1,R1,立即字段数值A
IOI R3,R3,立即字段数值B
IOI R5,R5,立即字段数值C
在立即字段数值A、B与C并未落入预定子集的情况下,指令转译器104必须花费三个时钟周期来转译这三个IOI指令。不过,在立即字段数值A、B与C系落入预定子集的情况下,指令转译器104可能只需要一个时钟周期就能转译这三个IOI指令。此外,此优点亦可在其它混合有非IOI指令,亦即其它ARM指令,的实例中获得印证。举例来说,假定一个ARM指令D,会被转译为两个微指令,其后跟随着一个IOI指令,此IOI指令特定的一立即字段数值系落入预定子集内,此IOI指令后跟随着一个ARM指令E,此指令会被转译为两个微指令,其后还跟随着一个ARM指令F,此指令会被转译为单一个微指令。在这个情况下,指令转译器104可在单一个时钟周期转译将ARM指令D与IOI指令,然后在下一个时钟周期转译ARM指令E与F,亦即四个ARM指令在两个时钟周期内完成转译。相较之下,若是没有本实施例所描述的功能,指令转译器104将需要三个时钟周期来转译这四个指令。相类似的优点也存在于指令发布单元408与退出单元422。相类似的优点也出现在四指令宽度(four-wide)的指令转译器以及条件ALU指令并未特定一目的寄存器同时为一来源寄存器的情况,在此情况下,两个指令可在同一个时钟周期内进行转译,若无本实施例所描述的功能,就需使用两个时钟周期。
第三,在立即字段b207的数值系落入预定子集,而指令转译器104可以放出单一微指令(或两个而非三个微指令)的情况下,因为第二个(或第三个)微指令的消失,可以减少立即操作数指令124的延迟。
第四,重排缓冲器以及/或保留站内不存在额外的微指令,可以提高降低处理器的前瞻能力(lookahead capability),因而提升微处理器100利用指令层平行处理来执行程序的能力,增加执行单元424的利用率,改善微处理器100的整体效能。进一步来说,减少第二微指令可以在重排缓冲器空出更多空间给微指令。这样就可以产生一个较大的微指令池,可发派给执行单元424执行。微指令在“完成准备(ready)”之前还不能发送出去执行,这也就是此微指令中,来自之前微指令的所有源操作数都处于可取得的状态,才能发送出去。因此,微处理器100寻找完成准备的微指令的微指令池越大,找到的机会就越大,所以执行单元424就有较大的机会被利用。这通常被称为微处理器的前瞻能力,也就是充分利用微处理器所要执行的程序的指令层平行处理(instruction level parallelism)能力。前瞻能力越大,通常就越会提升执行单元424的利用。因此,本发明的微处理器100可依据立即字段b207的数值,将立即操作数指令124转译为单一个立即ALU微指令3348,而非多个微指令,因而具有潜力能提升其前瞻能力。
虽然前述实施例中的立即操作数指令系一个具有数据处理立即编码功能的ARM指令,此技术亦可应用于转译其它指令集架构的立即操作数指令;其次,值得注意的是,本发明亦可应用于没有预先存在的微架构或是此预先存在的微架构所支持的指令集架构并非x86指令集架构的情况。此外,值得注意的是,本发明在此所描述的是一个广泛的处理器概念,其依据立即操作数指令特定的立即字段数值是否落入预定子集内,来将操作数指令转译为一个乱序执行微架构的不同微指令序列,以支持一指令集架构的立即操作数指令。
在另一实施例中,指令转译器104产生图32的立即操作数3266给图33的立即操作数指令124的立即字段b207的所有数值。也就是说,立即字段b207的数值的预定子集内的所有数值都是立即字段b207的可能数值。以下是此实施例的Verilog硬件描述语言编码。
Figure BDA0000151558660001031
Figure BDA0000151558660001041
Figure BDA0000151558660001061
Figure BDA0000151558660001071
Figure BDA0000151558660001081
Figure BDA0000151558660001101
Figure BDA0000151558660001111
惟以上所述者,仅为本发明的较佳实施例而已,当不能以此限定本发明实施的范围,即大凡依本发明权利要求范围及发明说明内容所作的简单的等效变化与修饰,皆仍属本发明权利要求涵盖的范围内。举例来说,软件可以执行本发明所述的装置与方法的功能、制造、形塑、仿真、描述以及/或测试等。这可由一般的程序语言(如C、C++)、硬件描述语言(HDL)包含Verilog HDL,VHDL等,或是其它既有程序来达成。此软件可以设置于任何已知的计算机可利用媒介,如磁带、半导体、磁盘、光盘(如CD-ROM、DVD-ROM等)、网络或是其它通讯媒介。此处描述的装置与方法的实施例可被包含于一半导体智财核心,例如一微处理核心(如以硬件描述语言的实施方式)并且通过集成电路的制作转换为硬件。此外,本文所描述的装置与方法亦可包含硬件与软件的结合。因此,本文所述的任何实施例,并非用以限定本发明的范围。此外,本发明可应用于一般通用计算机的微处理器装置。最后,本领域技术人员利用本发明所揭露的观念与实施例作为基础,来设计并调整出不同的结构已达成相同的目的,亦不超出本发明的范围。
惟以上所述者,仅为本发明的较佳实施例而已,当不能以此限定本发明实施的范围,即大凡依本发明权利要求范围及发明说明内容所作的简单的等效变化与修饰,皆仍属本发明权利要求涵盖的范围内。另外本发明的任一实施例或权利要求范围不须达成本发明所揭露的全部目的或优点或特点。此外,摘要部分和标题仅是用来辅助专利文件搜寻之用,并非用来限制本发明的权利要求范围。

Claims (45)

1.一种微处理器,执行条件非分支指令,其中,各该条件非分支指令是特定一条件,各该条件非分支指令在该条件满足时,指示该微处理器执行一操作,而在该条件不满足该微处理器的条件旗标时,不去执行该操作,该微处理器包含:
一预测器,用以提供关于一条件非分支指令的预测;
一指令转译器,用以:
在该预测预测该条件将不会被满足时,将该条件非分支指令转译为一不操作微指令;以及
在该预测预测该条件将会被满足时,将该条件非分支指令转译为一个或多个微指令构成的一微指令组以非条件地执行该操作;以及
一执行管线,用以执行该不操作微指令或是由该指令转译器提供的该微指令组。
2.根据权利要求1所述的微处理器,其中该预测器包含:
一静态预测器,用以解译该条件非分支指令,并基于对该条件非分支指令的解译,提供该预测至该指令转译器。
3.根据权利要求1所述的微处理器,其中该预测器包含:
一动态预测器,用以维持该条件在该条件非分支指令之前的执行历程是否被满足的一历史数据,并基于该历史数据,提供该预测至该指令转译器。
4.根据权利要求3所述的微处理器,其中,在该条件非分支指令是由位于该微处理器的一撷取地址的一指令快取撷取时,该动态预测器用以提供对应于该撷取地址的该预测,并且不去解译该条件非分支指令。
5.根据权利要求1所述的微处理器,其中该预测器包含:
一静态预测器,用以解译该条件非分支指令,并基于对该条件非分支指令的解译,提供一静态预测至该指令转译器;
一动态预测器,用以维持该条件在该条件非分支指令之前的执行历程是否被满足的一历史数据,并基于该历史数据,提供一动态预测至该指令转译器;以及
一选择器,用以维持该静态与该动态预测器在该条件非分支指令之前的执行历程的一准确度历史数据,并基于该准确度历史数据,提供一选择以选择该静态预测或是该动态预测作为该预测。
6.根据权利要求5所述的微处理器,
其中,在该条件非分支指令是由位于该微处理器的一撷取地址的一指令快取撷取时,该动态预测器用以提供对应于该撷取地址的该预测,并且不去解译该条件非分支指令;
其中,在该条件非分支指令是由位于该撷取地址的该指令快取撷取时,该选择器用以提供对应于该撷取地址的该选择,并且不去解译该条件非分支指令。
7.根据权利要求1所述的微处理器,其中,该指令转译器还用以:
在该预测不预测是否该条件将会被满足时,将该条件非分支指令转译为一个或多个微指令构成的一第二微指令组以条件执行该操作。
8.根据权利要求1所述的微处理器,
其中,该不操作微指令或是由一个或多个微指令构成的该微指令组包含由该条件非分支指令特定的该条件;
其中,该执行管线依据该条件与该条件旗标确认该预测是否是一误预测,以执行该不操作微指令或是由该指令转译器提供的该微指令组,并且在该预测为该误预测时,将该误预测指定给该指令转译器;
其中,对应于该误预测的指定,该指令转译器还用以将该条件非分支指令再转译为一个或多个微指令构成的一第二微指令组以条件执行该操作。
9.根据权利要求1所述的微处理器,
其中,该预测器用以维持该条件在该条件非分支指令之前的执行历程是否被满足的一历史数据,并基于该历史数据,提供该预测至该指令转译器;
其中,该不操作微指令或是一个或多个微指令构成的该微指令组包含由该条件非分支指令特定的该条件;
其中,该执行管线对于该条件旗标是否满足该条件作出一决定,以执行该不操作微指令或是由该指令转译器提供的该微指令组,并且提供该决定至该预测器;
其中,该预测器用以依据来自该执行管线的该决定,更新该历史数据。
10.根据权利要求9所述的微处理器,
其中,该预测器包含:
一静态预测器,提供对应于该条件非分支指令的解译的一静态预测;
一动态预测器,提供基于该历史数据的一动态预测;以及
一选择器,选择该静态预测或是该动态预测;
其中,该选择器用以维持该静态与该动态预测器在该条件非分支指令之前的执行历程的一准确度历史数据;
其中,该选择器用以依据来自该执行管线的该决定,更新该准确度历史数据。
11.根据权利要求1所述的微处理器,其中,该条件非分支指令是由ARM指令集架构定义的指令。
12.根据权利要求1所述的微处理器,其中,该条件非分支指令是由x86指令集架构定义的指令。
13.根据权利要求1所述的微处理器,其中,该指令转译器将x86指令集架构程序的指令与ARM指令集架构的程序转译为由该微处理器的一微指令集定义的微指令,其中,该微指令是以不同于该x86指令集架构与ARM指令集架构的该些指令集所定义的该些指令的编码方式进行编码。
14.一种利用一微处理器执行条件非分支指令的方法,其中,各该条件非分支指令是特定一条件,各该条件非分支指令在该条件满足时,指示该微处理器执行一操作,而在该条件不满足该微处理器的条件旗标时,不去执行该操作,该方法包含:
提供关于一条件非分支指令的预测;
在该预测预测该条件将不会被满足时,将该条件非分支指令转译为一不操作微指令;
在该预测预测该条件将会被满足时,将该条件非分支指令转译为一个或多个微指令构成的一微指令组以非条件地执行该操作;以及
执行该不操作微指令或是由该指令转译器提供的该微指令组,该执行是由该微处理器的一硬件执行管线所执行。
15.根据权利要求14所述的方法,还包含:
解译该条件非分支指令;
其中,提供该预测的步骤包含基于对该条件非分支指令的解译,提供该预测至该指令转译器。
16.根据权利要求14所述的方法,还包含:
维持该条件在该条件非分支指令之前的执行历程是否被满足的一历史数据;
其中,提供该预测的步骤包含基于该历史数据,提供该预测至该指令转译器。
17.根据权利要求14所述的方法,还包含:
维持该条件在该条件非分支指令之前的执行历程是否被满足的一历史数据;以及
维持静态预测与动态预测在该条件非分支指令之前的执行历程的一准确度历史数据;
其中,提供该预测的步骤包含:
基于对该条件非分支指令的解译,提供该静态预测;
基于该条件在该条件非分支指令之前的执行历程是否被满足的该历史数据,提供该动态预测;以及
基于该准确度历史数据,选择该静态预测或是该动态预测作为该预测。
18.根据权利要求14所述的方法,还包含:
在该预测不去预测该条件是否将被满足时,将该条件非分支指令转译为一个或多个微指令构成的一第二微指令组以条件执行该操作。
19.根据权利要求14所述的方法,
其中,该不操作微指令或是该一个或多个微指令构成的该微指令组包含该条件非分支指令特定的该条件;
其中,执行该不操作微指令或是由该指令转译器提供的该微指令组的步骤包含,依据该条件与该条件旗标确认该预测是否是一误预测,并且,在该预测是该误预测时,指定该误预测;
该方法还包含:
对应于指定该误预测的步骤,将该条件非分支指令再转译为一个或多个微指令构成的一第二微指令组以条件执行该操作。
20.根据权利要求14所述的方法,还包含:
维持该条件在该条件非分支指令之前的执行历程是否被满足的一历史数据;
其中,提供关于该条件非分支指令的该预测的步骤包含提供基于该历史数据的该预测;
其中,该不操作微指令或是一个或多个微指令构成的该微指令集包含该条件非分支指令特定的该条件;
其中,执行该不操作微指令或是由该指令转译器提供的该微指令组的步骤包含,作出该条件旗标是否满足该条件的一决定,并提供该决定;
该方法还包含:
对应于作出该决定的步骤,更新该历史数据。
21.根据权利要求20所述的方法,
其中,提供关于该条件非分支指令的该预测的步骤包含:
提供对应于解译该条件非分支指令的一静态预测;
提供基于该历史数据的一动态预测;以及
选择该静态预测或是该动态预测;
其中,该方法还包含:
维持该静态与该动态预测在该条件非分支指令之前的执行历程的一准确度历史数据;以及
对应于该决定,更新该准确度历史数据。
22.一种计算机程序产品,编码于至少一计算机可读取储存媒介,以使用于一运算装置,该计算机程序产品包括:
用于该媒介的计算机可读取程序码,用以特定一微处理器以执行条件非分支指令,其中,各该条件非分支指令是特定一条件,各该条件非分支指令在该条件满足时,指示该微处理器执行一操作,而在该条件不满足该微处理器的条件旗标时,不去执行该操作,该计算机可读取程序码包含:
第一程序码,特定一预测器,用以提供关于一条件非分支指令的预测;
第二程序码,特定一指令转译器,用以:
在该预测预测该条件将不会被满足时,将该条件非分支指令转译为一不操作微指令;以及
在该预测预测该条件将会被满足时,将该条件非分支指令转译为一个或多个微指令构成的一微指令组以非条件地执行该操作;以及
第三程序码,特定一执行管线,用以执行该不操作微指令或是由该指令转译器提供的该微指令组。
23.根据权利要求22所述的计算机程序产品,其中,该至少一计算机可读取储存媒介是选自由盘片、磁带、或是其它磁性、光学或电子的储存媒介以及网络、缆线、无线或其它通讯媒介所构成的一群组。
24.一种具有一指令集架构的微处理器,该指令集架构是定义有至少一指令,该指令包含一立即字段,该立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该微处理器包含:
一指令转译器,将该至少一指令转译为一个或多个微指令,其中,该微指令是以不同于该指令集架构所定义的指令的编码方式进行编码;以及
一执行管线,执行由该指令转译器所产生的该微指令,以产生一由该指令集架构定义的结果;
其中,该指令转译器,而非该执行管线,依据该第一与该第二数值产生该固定数值作为至少一该微指令的一源操作数,供该执行管线执行。
25.根据权利要求24所述的微处理器,其中,该指令转译器依据该立即字段的一数值是否落于一预定的数值子集内,以将该指令转译为不同的微指令。
26.根据权利要求24所述的微处理器,其中,该执行管线包含:
多个执行单元,执行该微指令以产生该结果;以及
一发送单元,将该指令转译器产生的该固定数值发送给至少一个该执行单元,该固定数值是作为由该至少一该执行管线执行的该至少一该微指令的该源操作数。
27.根据权利要求24所述的微处理器,其中,该执行管线包含:
多个执行单元,执行该微指令以产生该结果;
其中,该微处理器还包含:
一个或多个第一总线,将来自该执行单元的该微指令的执行结果传送回该执行单元,作为其它微指令的源操作数;以及
一第二总线,提供由该指令转译器产生的该固定数值给该执行管线,其中该第二总线不同于该一个或多个第一总线。
28.根据权利要求27所述的微处理器,还包含:
多个寄存器,接收来自该执行单元的该微指令的执行结果,由该指令转译器产生的该固定数值不会被该微处理器写入该寄存器。
29.根据权利要求24所述的微处理器,其中,该固定数值是将该第一数值转动/移动两倍于该第二数值的数量的位而获得。
30.根据权利要求24所述的该微处理器,其中,该至少一指令包含ARM指令集架构的数据处理指令,该数据处理指令特定一修正后立即常数。
31.根据权利要求30所述的微处理器,其中,该ARM指令集架构的特定一修正后立即常数的该数据处理指令包含特定一修正后立即常数的条件ALU指令。
32.一种方法,由一具有一指令集架构的微处理器执行,该指令集架构是定义有至少一指令,该指令包含一立即字段,该立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该方法包含:
将该至少一指令转译为一个或多个微指令,其中,该微指令是以不同于该指令集架构所定义的指令的编码方式进行编码,其中,该转译步骤是由该微处理器的一指令转译器执行;以及
执行由该指令转译器所产生的该微指令,以产生一由该指令集架构定义的结果,其中,该执行步骤是由该微处理器的一执行管线执行;
其中,由该指令转译器,而非该执行管线,依据该第一与该第二数值产生该固定数值作为至少一该微指令的一源操作数,供该执行管线执行。
33.根据权利要求32所述的方法,其中该转译步骤包含依据该立即字段的一数值是否落于一预定的数值子集内,将该指令转译为不同的微指令。
34.根据权利要求32所述的方法,其中,该固定数值是将该第一数值转动/移动两倍于该第二数值的数量的位而获得。
35.根据权利要求32所述的方法,其中,该至少一指令包含ARM指令集架构的数据处理指令,该数据处理指令特定一修正后立即常数。
36.根据权利要求35所述的方法,其中,该至少一指令包含ARM指令集架构的数据处理指令,该数据处理指令特定一修正后立即常数。
37.一种具有一指令集架构的微处理器,该指令集架构是定义有至少一指令,该指令包含一立即字段,该立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该微处理器包含:
一指令转译器,将该至少一指令转译为一个或多个微指令;以及
一执行管线,执行由该指令转译器所产生的该微指令,以产生一由该指令集架构定义的结果;
其中,当该立即字段的一数值是落于一预定的数值子集内:
该指令转译器将该指令转译为至少一个微指令;
该指令转译器,而非该执行管线,依据该第一与该第二数值产生该固定数值;以及
该执行管线利用该指令转译器产生的该固定数值作为其中之一的源操作数,执行该至少一微指令;以及
其中,当该立即字段的该数值并不落于该预定的数值子集内:
该指令转译器将该指令转译为至少第一与第二微指令;
该执行管线,而非该指令转译器,通过执行该第一微指令,产生该固定数值;以及
该执行管线通过利用该第一微指令执行产生的该固定数值作为其中之一的源操作数,以执行该第二微指令。
38.根据权利要求37所述的微处理器,其中该执行管线包含:
一寄存器配置表,产生该第二微指令与该第一微指令执行产生的该固定数值的关联性。
39.根据权利要求37所述的微处理器,其中,该微指令是由该微处理器的一微架构所定义,并且是以不同于该指令集架构定义的指令的编码方式进行编码。
40.根据权利要求37所述的微处理器,其中该第一微指令是一移位/转动微指令。
41.一种方法,由具有一指令集架构的一微处理器执行,该指令集架构是定义有至少一指令,该指令包含一立即字段,该立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该微处理器并包含一指令转译器与一执行管线,该方法包含:
利用该指令转译器,确认该立即字段的一数值是否落于一预定的数值子集内;
当该立即字段的该数值是落于该预定的数值子集内:
利用该指令转译器将该指令转译为至少一个微指令;
利用该指令转译器,而非该执行管线,依据该第一与该第二数值产生该固定数值;以及
利用该执行管线,将该指令转译器产生的该固定数值作为其中之一的源操作数,来执行该至少一微指令;以及
其中,当该立即字段的该数值并不落于该预定的数值子集内:
利用该指令转译器,将该指令转译为至少第一与第二微指令;
利用该执行管线,而非该指令转译器,通过执行该第一微指令,以产生该固定数值;以及
利用该执行管线,通过利用该第一微指令执行产生的该固定数值作为其中之一的源操作数,以执行该第二微指令。
42.根据权利要求41所述的方法,还包含:
产生该第二微指令与该第一微指令执行产生的该固定数值的关联性,其中,产生该关联性的步骤是由该微处理器的一寄存器配置表实现。
43.根据权利要求41所述的方法,其中,该微指令是由该微处理器的一微架构所定义,并且是以不同于该指令集架构定义的指令的编码方式进行编码。
44.一种计算机程序产品,编码于至少一计算机可读取储存媒介,以使用于一运算装置,该计算机程序产品包括:
适用于该媒介的计算机可读取程序码,用以特定一微处理器,该微处理器具有一指令集架构,该指令集架构是定义有至少一指令,该指令包含一立即字段,该立即字段内具有一第一部分特定一第一数值与一第二部分特定一第二数值,该指令指示该微处理器执行一操作将一固定数值作为其中之一的源操作数,该固定数值是将该第一数值基于该第二数值转动/移动一定数量的位而获得,该计算机可读取程序码包含:
第一程序码,特定一指令转译器,用以将该至少一指令转译为一个或多个微指令,其中,该微指令是以不同于该指令集架构所定义的指令的编码方式进行编码;以及
第二程序码,特定一执行管线,用以执行由该指令转译器所产生的该微指令,以产生一由该指令集架构定义的结果;
其中,该指令转译器,而非该执行管线,依据该第一与该第二数值产生该固定数值作为至少一该微指令的一源操作数,供该执行管线执行。
45.根据权利要求44所述的计算机程序产品,其中,该至少一计算机可读取储存媒介是选自由盘片、磁带、或是其它磁性、光学或电子的储存媒介以及网络、缆线、无线或其它通讯媒介所构成的一群组。
CN201210102141.5A 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法 Active CN103218203B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201711069237.5A CN107832083B (zh) 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法
CN201610126292.2A CN105808208B (zh) 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法
CN201510303866.4A CN104881270B (zh) 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法

Applications Claiming Priority (40)

Application Number Priority Date Filing Date Title
US201161473069P 2011-04-07 2011-04-07
US201161473062P 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 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
US13/224,310 2011-09-01
US201161537473P 2011-09-21 2011-09-21
US61/537,473 2011-09-21
US201161541307P 2011-09-30 2011-09-30
US61/541,307 2011-09-30
US201161547449P 2011-10-14 2011-10-14
US61/547,449 2011-10-14
US201161555023P 2011-11-03 2011-11-03
US61/555,023 2011-11-03
US13/333,520 US9032189B2 (en) 2011-04-07 2011-12-21 Efficient conditional ALU instruction in read-port limited register file microprocessor
US13/333,572 2011-12-21
US13/333,520 2011-12-21
US13/333,631 2011-12-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,631 US8924695B2 (en) 2011-04-07 2011-12-21 Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
US201261604561P 2012-02-29 2012-02-29
US61/604,561 2012-02-29
US13/413,258 US9274795B2 (en) 2011-04-07 2012-03-06 Conditional non-branch instruction prediction
US13/412,888 2012-03-06
US13/412,904 2012-03-06
US13/413,300 US20120260073A1 (en) 2011-04-07 2012-03-06 Emulation of execution mode banked registers
US13/412,888 US9141389B2 (en) 2011-04-07 2012-03-06 Heterogeneous ISA microprocessor with shared hardware ISA registers
US13/412,914 US9146742B2 (en) 2011-04-07 2012-03-06 Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US13/412,914 2012-03-06
US13/413,314 US9176733B2 (en) 2011-04-07 2012-03-06 Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US13/413,300 2012-03-06
US13/413,258 2012-03-06
US13/412,904 US9317288B2 (en) 2011-04-07 2012-03-06 Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US13/413,346 2012-03-06
US13/413,314 2012-03-06
US13/413,346 US9043580B2 (en) 2011-04-07 2012-03-06 Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US13/416,879 2012-03-09
US13/416,879 US9128701B2 (en) 2011-04-07 2012-03-09 Generating constant for microinstructions from modified immediate field during instruction translation

Related Child Applications (3)

Application Number Title Priority Date Filing Date
CN201711069237.5A Division CN107832083B (zh) 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法
CN201610126292.2A Division CN105808208B (zh) 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法
CN201510303866.4A Division CN104881270B (zh) 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法

Publications (2)

Publication Number Publication Date
CN103218203A true CN103218203A (zh) 2013-07-24
CN103218203B CN103218203B (zh) 2016-03-16

Family

ID=46900805

Family Applications (3)

Application Number Title Priority Date Filing Date
CN201210103608.8A Active CN102707988B (zh) 2011-04-07 2012-04-09 微处理器及其操作方法
CN201711069237.5A Active CN107832083B (zh) 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法
CN201210102141.5A Active CN103218203B (zh) 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法

Family Applications Before (2)

Application Number Title Priority Date Filing Date
CN201210103608.8A Active CN102707988B (zh) 2011-04-07 2012-04-09 微处理器及其操作方法
CN201711069237.5A Active CN107832083B (zh) 2011-04-07 2012-04-09 具有条件指令的微处理器及其处理方法

Country Status (1)

Country Link
CN (3) CN102707988B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106406814A (zh) * 2016-09-30 2017-02-15 上海兆芯集成电路有限公司 处理器和将架构指令转译成微指令的方法
CN108027769A (zh) * 2015-09-19 2018-05-11 微软技术许可有限责任公司 使用寄存器访问指令发起指令块执行
CN109313553A (zh) * 2016-07-02 2019-02-05 英特尔公司 用于跨步加载的系统、装置和方法
CN113868899A (zh) * 2021-12-03 2021-12-31 苏州浪潮智能科技有限公司 一种分支指令处理方法、系统、设备及计算机存储介质
CN114090077A (zh) * 2021-11-24 2022-02-25 海光信息技术股份有限公司 调取指令的方法及装置、处理装置及存储介质
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
CN116414463A (zh) * 2023-04-13 2023-07-11 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9483263B2 (en) * 2013-03-26 2016-11-01 Via Technologies, Inc. Uncore microcode ROM
CN103984530B (zh) * 2014-05-15 2016-08-17 中国航天科技集团公司第九研究院第七七一研究所 一种提高store指令执行效率的流水线结构及方法
CN104765590B (zh) * 2015-04-29 2017-06-13 清华大学 一种支持超标量与超长指令字混合架构处理器的分支预测方法
CN114205415A (zh) * 2020-09-17 2022-03-18 深圳市中兴微电子技术有限公司 报文修改方法、装置、计算机设备、介质
CN113553104A (zh) * 2021-07-22 2021-10-26 江南大学 一种提升分支方向预测器预测准确度的方法
TWI806581B (zh) * 2022-04-29 2023-06-21 瑞昱半導體股份有限公司 用來在管線化架構中檢查並更新程式計數器數值的邏輯電路以及方法
CN116700795B (zh) * 2023-08-01 2023-12-01 广州中基国威电子科技有限公司 一种位操作控制系统及控制方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6442678B1 (en) * 1998-12-31 2002-08-27 Intel Corporation Method and apparatus for providing data to a processor pipeline
CN1440528A (zh) * 2000-10-05 2003-09-03 Arm有限公司 寄存器中堆栈操作数的存储
US20050188185A1 (en) * 2004-02-20 2005-08-25 Grochowski Edward T. Method and apparatus for predicate implementation using selective conversion to micro-operations
US20080276069A1 (en) * 2007-05-03 2008-11-06 Bartholomew Blaner Method and apparatus for predictive decoding
US20110047357A1 (en) * 2009-08-19 2011-02-24 Qualcomm Incorporated Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3451595B2 (ja) * 1995-06-07 2003-09-29 インターナショナル・ビジネス・マシーンズ・コーポレーション 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
US6643765B1 (en) * 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6654875B1 (en) * 2000-05-17 2003-11-25 Unisys Corporation Dual microcode RAM address mode instruction execution using operation code RAM storing control words with alternate address indicator
US7149878B1 (en) * 2000-10-30 2006-12-12 Mips Technologies, Inc. Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values
EP1447742A1 (en) * 2003-02-11 2004-08-18 STMicroelectronics S.r.l. Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor
US20060179273A1 (en) * 2005-02-09 2006-08-10 Advanced Micro Devices, Inc. Data processor adapted for efficient digital signal processing and method therefor
US7437537B2 (en) * 2005-02-17 2008-10-14 Qualcomm Incorporated Methods and apparatus for predicting unaligned memory access
US7421566B2 (en) * 2005-08-12 2008-09-02 International Business Machines Corporation Implementing instruction set architectures with non-contiguous register file specifiers
US7793079B2 (en) * 2007-06-27 2010-09-07 Qualcomm Incorporated Method and system for expanding a conditional instruction into a unconditional instruction and a select instruction

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6442678B1 (en) * 1998-12-31 2002-08-27 Intel Corporation Method and apparatus for providing data to a processor pipeline
CN1440528A (zh) * 2000-10-05 2003-09-03 Arm有限公司 寄存器中堆栈操作数的存储
US20050188185A1 (en) * 2004-02-20 2005-08-25 Grochowski Edward T. Method and apparatus for predicate implementation using selective conversion to micro-operations
US20080276069A1 (en) * 2007-05-03 2008-11-06 Bartholomew Blaner Method and apparatus for predictive decoding
US20110047357A1 (en) * 2009-08-19 2011-02-24 Qualcomm Incorporated Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108027769A (zh) * 2015-09-19 2018-05-11 微软技术许可有限责任公司 使用寄存器访问指令发起指令块执行
CN108027769B (zh) * 2015-09-19 2022-05-27 微软技术许可有限责任公司 使用寄存器访问指令发起指令块执行
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
CN109313553A (zh) * 2016-07-02 2019-02-05 英特尔公司 用于跨步加载的系统、装置和方法
CN109313553B (zh) * 2016-07-02 2024-01-23 英特尔公司 用于跨步加载的系统、装置和方法
CN106406814A (zh) * 2016-09-30 2017-02-15 上海兆芯集成电路有限公司 处理器和将架构指令转译成微指令的方法
CN106406814B (zh) * 2016-09-30 2019-06-14 上海兆芯集成电路有限公司 处理器和将架构指令转译成微指令的方法
CN114090077A (zh) * 2021-11-24 2022-02-25 海光信息技术股份有限公司 调取指令的方法及装置、处理装置及存储介质
CN113868899A (zh) * 2021-12-03 2021-12-31 苏州浪潮智能科技有限公司 一种分支指令处理方法、系统、设备及计算机存储介质
CN116414463A (zh) * 2023-04-13 2023-07-11 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质
CN116414463B (zh) * 2023-04-13 2024-04-12 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质

Also Published As

Publication number Publication date
CN107832083A (zh) 2018-03-23
CN107832083B (zh) 2020-06-12
CN103218203B (zh) 2016-03-16
CN102707988A (zh) 2012-10-03
CN102707988B (zh) 2015-09-09

Similar Documents

Publication Publication Date Title
CN105808208B (zh) 具有条件指令的微处理器及其处理方法
CN105468333B (zh) 具有条件指令的微处理器及其处理方法
CN103218203B (zh) 具有条件指令的微处理器及其处理方法
TWI514265B (zh) 將條件載入/儲存指令轉譯為數量可變的微指令之微處理器
CN102707926B (zh) 可执行x86指令集及ARM指令集指令的微处理器及其运作方法
TWI691897B (zh) 用以執行融合單一週期遞增-比較-跳越之指令與邏輯
CN103530089B (zh) 微处理器及其操作方法
TWI478065B (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
C14 Grant of patent or utility model
GR01 Patent grant