执行条件指令的装置及方法

文档序号:6599707阅读:285来源:国知局
专利名称:执行条件指令的装置及方法
技术领域
本发明涉及微电子的领域,尤指一种能将条件执行的能力纳入一既有的微处理器指令集结构的技术。
随着过去三十年来使用上的爆炸性成长,在技术上也历经一相对应的提升,其特征在于对下列项目有着日益升高的要求更快的速度、更强的寻址能力、更快的内存存取、更大的操作数、更多种运算(如浮点运算、单一指令多重数据(SIMD)、条件移动等)以及附加的特殊运算(如多媒体运算)。如此造就了该领域中惊人的技术进展,且都已应用于微处理器的设计,像扩充管线化(extensive pipelining)、超规模结构(super-scalararchitecture)、快取结构、乱序处理(out-of-order processing)、爆发式存取(burst access)、分支预测(branch predication)以及假想执行(speculative execution)。总之,比起30年前刚出现时,现在的微处理器呈现出惊人的复杂度,且具备了强大的能力。
但与许多其它产品不同的是,有另一非常重要的因素已限制了、并持续限制着微处理器结构的演进。现今微处理器会如此复杂,一大部分得归因于这项因素,即旧有软件的兼容性。在市场考虑下,所多制造商选择将新的结构特征纳入最新的微处理器设计中,但同时在这些最新的产品中,又保留了所有为确保兼容于较旧的,即所谓“旧有”(legacy)应用程序所必需的能力。
这种旧有软件兼容性的负担,没有其它地方会比在x86-兼容的微处理器的发展史中更加显而易见。大家都知道,现在的32/16位的虚拟模式(virtual-mode)x86微处理器,仍可执行80年代所编写的8位真实模式(real-mode)的应用程序。而熟悉此领域技术人员也承认,有不少相关的结构“包袱”堆在x86结构中,只是为了支持与旧有应用程序及运作模式的兼容性。虽然在过去,研发者可将新开发的结构特征加入既有的指令集结构,但如今使用这些特征所凭借的工具,即可编程指令,却变得相当稀少。更简单地说,在某些重要的指令集中,已没有「多余」的指令,让设计者可借以将更新的特征纳入一既有的结构中。
例如,在x86指令集结构中,已经没有任何一未定义的一字节大小的操作码状态,是尚未被使用的。在主要的一字节大小的x86操作码图中,全部256个操作码状态都已被既有的指令占用了。结果是,x86微处理器的设计者现在必须在提供新特征与放弃旧有软件兼容性两者间作抉择。若要提供新的可编程特征,则必须分派操作码状态给这些特征。若既有的指令集结构没有多余的操作码状态,则某些既存的操作码状态必须重新定义,以提供给新的特征。因此,为了提供新的特征,就得牺牲旧有软件兼容性了。
一个持续发展但在许多指令集结构中仍未解决的领域,即是条件执行(conditional execution)。可编程条件执行特征允许程序员指定测试条件(如大于、小于等等),以作为一运算指令(如加、减、将操作数从内存移至缓存器等)的部分。经过如此编程后,条件指令便通过微处理器的管线,并在条件指令所指定的运算执行前,评估其测试条件。若条件评估为真(也即已满足),则运算就被执行,并产生结果。若条件评估为假(也即未满足),则运算就不被执行,条件指令也被撤回。在现代的微处理器管线结构中,条件执行的能力是非常有用的,因为它可以避免一深的管线被清空的现象。对于目前应用程序中用来改变条件流程的常用的条件分支指令而言,此现象即是其分支预测错误的结果。
因此,我们所需要的是,一种允许将条件执行特征纳入既有微处理器指令集结构的技术,其中该指令集结构具有已完全占用的操作码结构,而该技术则仍保留旧有应用软件的兼容性。
本发明的一个目的,为提出一种为既有微处理器指令集增添条件执行特征的延伸机制。该延伸机制包括一延伸指令、一转译器及一条件执行控制逻辑。该延伸指令指定一数个条件码的子集合,作为一指定运算是否执行的判断依据,而该延伸指令包括该既有微处理器指令集的其中一指令,其后则接着一n位的延伸特征前置码。该指令指出该延伸指令,而该n位延伸特征前置码则指出该子集合。该转译器接收该延伸指令,并产生一微指令序列,以依据该子集合指导该指定运算的条件执行。该条件执行控制逻辑耦接至转译器,用以评估对应该子集合的条件码,并于该子集合满足时,执行该指定运算。
本发明的另一目的,在于提出一种为既有微处理器指令集补充条件执行的能力的指令集延伸模块。该指令集延伸模块具一逸出标志(escape tag)与一条件指定元(condition specifier)。该逸出标志由一转译逻辑接收,并指出一对应指令的附随部分是指定了一微处理器所要条件执行的一延伸运算,其中该逸出标志为该既有微处理器指令集内的一第一操作码项目。该条件指定元耦接至该逸出标志,且为该附随部分其中之一。该条件指定元指定一条件码状态,其为该延伸运算是否执行的判断依据。该条件码状态被送至一条件执行控制逻辑,其中该条件执行控制逻辑致能/禁止(enable/diable)该延伸运算的执行。
本发明的再一目的,在于提供一种扩充微处理器指令集的方法,以提供可编程条件执行能力。该方法包括提供一延伸指令,该延伸指令包括一延伸标志及一条件指定元前置码,其中该延伸标志为该微处理器指令集的其中一操作码;通过该条件指定元前置码与该延伸指令的其余部分指定所要执行的一运算,其中该运算是否执行决定于该条件指定元前置码所指定的条件是否满足;以及评估条件码以判断该条件是否满足,且若该条件满足,即执行该运算,若不满足,便排除该执行操作。
图6为本发明用于条件执行的延伸前置码的一具体实施例的方块图;图7为显示由表六延伸前置码的值所指定条件的表格;图8为图5的微处理器内转译阶段逻辑详细的方块图;图9为图5的微处理器内延伸执行逻辑的方块图;

图10为一表格,其对于常用的IF-THEN-ELSE叙述,比较条件执行的流程与常用执行的流程;以及图11为描述本发明用以转译与执行条件指令的方法的运作流程图。
图号说明100 指令格式 101 前置码101 操作码 103 地址指定元200 8位操作码图201 操作码值 202 操作码F1H300 延伸指令格式301 前置码 302 操作码 303 地址指定元304 延伸指令标志 305 延伸前置码400 8位前置码图401 结构特征500 管线化微处理器501 提取逻辑 502 指令高速缓存/外部内存503 指令队列 504 转译逻辑505 伸转译逻辑 506 微指令队列507 执行逻辑 508 延伸执行逻辑600 延伸前置码601 剩余字段 602 条件字段700 条件字段的逻辑状态800 转译阶段逻辑801 激活状态信号 802 机器特定缓存器803 延伸特征字段804 指令缓冲器 805 转译逻辑806 转译控制器 807 禁止信号808 逸出指令检测器 809 延伸前置码译码器
810 指令译码器 811 控制只读存储器812 微指令缓冲器813 操作码延伸项字段814 微操作码字段815 目的字段816 来源字段817 位移字段900 延伸执行逻辑901 操作数缓存器902 微指令缓存器903 操作码延伸项字段904 其余字段905 操作数缓存器906 条件标志缓存器 907 条件执行控制逻辑908 致能信号GO 909 算术逻辑单元910 结果缓存器1000 比较IF-THEN-ELSE叙述的条件执行流程与常用执行流程的表格1100--1126 用以转译与执行条件指令的方法的运作流程前文已针对今日的微处理器内,如何扩充其结构特征,以超越相关指令集能力的技术,作了背景的讨论。有鉴于此,在图1与图2,将讨论一相关技术的例子。此处的讨论强调了微处理器设计者所一直面对的两难,即一方面,他们想将最新开发的结构特征纳入微处理器的设计中,但另一方面,他们又要保留执行旧有应用程序的能力。在图1至图2的例子中,一完全占用的操作码图,已把增加新操作码至该范例结构的可能性排除,因而迫使设计者要不就选择将新特征纳入,而牺牲某种程度的旧有软件兼容性,要不就将结构上的最新进展一并放弃,以便维持微处理器与旧有应用程序的兼容性。在相关技术的讨论后,于图3至图11,将提供对本发明的讨论。通过确认与利用一既有但未使用的操作码作为一延伸指令的前置码标志,本发明可让微处理器设计者克服已完全使用的指令集结构的限制,在允许他们提供条件执行能力的同时,也能保留与旧有应用程序的兼容性。
请参阅图1,其为一相关技术的微处理器指令格式100的方块图。该相关技术的指令100具有数量可变的数据项101-103,每一项目都设定成一特定值,合在一起便组成微处理器的一特定指令100。该特定指令100指示微处理器执行一特定运算,例如将两操作数相加,或是将一操作数从内存搬移至微处理器内的缓存器。一般而言,指令100内的操作码项目102指定了所要执行的特定运算,而选用(optional)的地址指定元项目103位于操作码102之后,以指定关于该特定运算的附加信息,像是如何执行该运算,操作数位于何处等等。指令格式100并允许程序员在一操作码102前加上前置码项目101。在操作码102所指定的特定运算执行时,前置码101用以指示是否使用特定的结构特征。一般而言,这些结构特征的应用范围涵盖指令集中任何操作码102所指定的运算。例如,现今前置码101存在于一些能使用不同大小操作数(如8位、16位、32位)执行运算的微处理器中。而当许多此类处理器被编程为一预设的操作数大小时(比如32位),在其个别指令集中所提供的前置码101,仍能使程序员依据各个指令,选择性地取代(override)该预设的操作数大小(如为了执行16位运算)。可选择的操作数大小仅是结构特征的一例,在许多现代的微处理器中,这些结构特征能应用于众多可由操作码102加以指定的运算(如加、减、乘、布尔逻辑等)。
图1所示的指令格式100,有一为业界所熟知的范例,此即x86指令格式100,其为所有现代的x86-兼容微处理器所采用。更具体地说,x86指令格式100(也称为x86指令集结构100)使用了8位前置码101、8位操作码102以及8位地址指定元103。x86结构100也具有数个前置码101,其中两个取代了x86微处理器所预设的地址/数据大小(即操作码状态66H与67H),另一个则指示微处理器依据不同的转译规则来解译其后的操作码字节102(即前置码值0FH,其使得转译操作是依据所谓的二字节操作码规则来进行),其它的前置码101则使特殊运算重复执行,直至某条件满足为止(即REP操作码F0H、F2H及F3H)。
现请参阅图2,其显示一表格200,用以描述一指令集结构的指令201如何对应至图1指令格式内一操作码字节102的位逻辑状态。表格200呈现了一示范性的8位操作码图200,其将一8位操作码项目102所具有的最多256个值,关联到对应的微处理器操作码指令201。表格200将操作码项目102的一特定值,譬如02H,映像至一对应的操作码指令201(即指令I02)。在x86操作码图的例子中,为此领域中人所熟知的是,操作码值14H为映像至x86的进位累加(Add With Carry,ADC)指令,此指令将一8位的直接(immediate)操作数加至结构缓存器AL的内含值。熟悉此领域技术人员也将发觉,上文提及的x86前置码101(也即66H、67H、0FH、F0H、F2H及F3H)为实际的操作码值201,其在不同思路下,指定要将特定的结构延伸项应用于随后的操作码项目102所指定的运算。例如,在操作码14H(正常情况下,为前述的ADC操作码)前加上前置码0FH,会使得x86处理器执行一「解压缩与插入低压缩的单精度浮点值」(Unpack and Interleave Low PackedSingle-Precision Floating-Point Values)运算,而非原本的ADC运算。诸如此x86例子所述的特征,在现代的微处理器中是部分地致能,此因微处理器内的指令转译/译码逻辑是依序解译一指令100的项目101-103。所以在过去,于指令集结构中使用特定操作码值作为前置码101,可允许微处理器设计者将不少先进的结构特征纳入兼容旧有软件的微处理器的设计中,而不会对未使用那些特定操作码状态的旧有程序,带来执行上的负面冲击。例如,一未曾使用x86操作码0FH的旧有程序,仍可在今日的x86微处理器上执行。而一较新的应用程序,借着运用x86操作码0FH作为前置码101,就能使用许多x86结构特征,如单一指令多重数据(SIMD)运算,条件移动运算等等。
尽管过去已通过指定可用/多余的操作码值201作为前置码101(也称为结构特征标志/指针101或逸出指令101),来提供结构特征,但许多指令集结构100在提供功能上的强化时,仍会因为一非常直接的理由,而碰到阻碍所有可用/多余的操作码值已被用完,也就是,操作码图200中的全部操作码值已被结构化地指定。当所有可用的值被分派为操作码项目102或前置码项目101时,就没有剩余的操作码值可作为纳入新特征之用。这个严重的问题存在于现在的许多微处理器结构中,因而迫使设计者得在增添结构特征与保留旧有程序的兼容性两者间作抉择。
值得注意的是,图2所示的指令201以一般性的方式表示(也即I24、I86),而非具体指涉实际的运算(如进位累加、减、异或)。这是因为,在一些不同的微处理器结构中,完全占用的操作码图200在结构上,已将纳入较新进展的可能性排除。虽然图2例子所提到的,是8位的操作码项目102,熟悉此领域技术人员仍将发觉,操作码102的特定大小,除了作为一特殊情况来讨论完全占用的操作码结构200所造成的问题外,其它方面与问题本身并不相干。因此,一完全占用的6位操作码图将有64个可结构化地指定的操作码/前置码201,并将无法提供可用/多余的操作码值作为扩充之用。
另一种做法,则并非将原有指令集废弃,以一新的格式100与操作码图200取代,而是只针对一部份既有的操作码201,以新的指令方法(newinstruction meanings)取代,如图2的操作码40H至4FH。以这种混合的技术,符合旧有规则的微处理器就可以兼容旧有软件模式运作,其中操作码40H-4FH依旧有规则来解译,或者以加强模式(enhanced mode)运作,其中操作码40H-4FH依加强的结构规则来解译。此项技术确能允许设计者将新特征纳入设计,然而,当符合旧有规则的微处理器于加强模式运作时,缺点仍旧存在,因为微处理器不能执行任何使用操作码40H-4FH的应用程序。因此,站在保留旧有软件兼容性的立场,兼容旧有软件/加强模式的技术,还是无法接受的。
然而,对于操作码空间已完全占用的指令集200,且该空间涵盖所有于符合旧有规则的微处理器上执行的应用程序的情形,本发明发明人已注意到其中操作码201的使用状况,且他们也观察出,虽然有些指令202是结构化地指定,但未用于能被微处理器执行的应用程序中。图2所述的指令IF1 202即为此现象的一例。事实上,相同的操作码值202(也即F1H)为映像至未用于x86指令集结构的一有效指令202。虽然该未使用的x86指令202是有效的x86指令202,其指示要在x86微处理器上执行一结构化地指定的运算,但它却未使用于任何能在现代x86微处理器上执行的应用程序。这个特殊的x86指令202被称为电路内仿真断点(In Circuit Emulation Breakpoint)(也即ICE BKPT,操作码值为F1H),之前都是专门使用于一种现在已不存在的微处理器仿真设备中。ICE BKPT 202从未用于电路内仿真器的外的应用程序中,并且先前使用ICE BKPT 202的电路内仿真设备已不复存在。因此,在x86的情形下,本发明人已在一完全占用的指令集结构200内发现一样工具,借着利用一有效但未使用的操作码202,以允许在微处理器的设计中纳入先进的结构特征,而不需牺牲旧有软件的兼容性。在一完全占用的指令集结构200中,本发明利用一结构化地指定但未使用的操作码202,作为一指针标志,以指出其后的一n位前置码,因此允许微处理器设计者可将最多2n个最新发展的结构特征,纳入微处理器的设计中,同时保留与所有旧有软件完全的兼容性。
本发明藉提供一n位的条件码指定元前置码,以使用前置码标志/延伸前置码的概念,因而可允许程序员将一常用运算编程,供微处理器执行(如加、减、布尔运算、操作数操作等),并在相同指令内,指定一该运算赖以执行的条件。在一具体实施例中,微处理器的条件码状态,存于一条件码缓存器中,且于该指定运算执行前被加以评估。若评估结果确定该条件满足,则执行该指定运算。若该条件未满足,则不执行该指定运算。本发明现将参照图3至图11进行讨论。
现请参阅图3,其为本发明的延伸指令格式300的方块图。与图1所讨论的格式100非常近似,该延伸指令格式300具有数量可变的数据项301-305,每一项目设定为一特定值,集合起来便组成微处理器的一特定指令300。该特定指令300指示微处理器执行一特定运算,像是将两操作数相加,或是将一操作数从内存搬移至微处理器的缓存器内。一般而言,指令300的操作码项目302指定了所要执行的特定运算,而选用的地址指定元项目303则位于操作码302后,以指定该特定运算的相关附加信息,像是如何执行该运算,操作数位于何处等等。指令格式300也允许程序员在一操作码302前加上前置码项目301。在操作码302所指定的特定运算执行时,前置码项目301用来指示是否要使用既有的结构特征。
然而,本发明的延伸指令300为前述图1指令格式100的一超集(superset),其具有两个附加项目304与305,可被选择性作为指令延伸项,并置于一格式化延伸指令300中所有其余项目301-303之前。这两个附加项目304与305用以致能/禁止数个条件执行特征,其中该些特征并无法在一完全占用的指令集结构内加以指定。选用项目304与305为一延伸指令标志304与一条件执行前置码305。该延伸指令标志304为一微处理器指令集内另一结构化地指定的操作码。在一x86的实施例中,该延伸指令标志304,或称逸出标志304,为操作码状态F1H,其为早先使用的ICE BKPT指令。逸出标志304向微处理器逻辑指出,该条件执行前置码305或称延伸特征指定元305跟随其后,其中延伸特征指定元305用以指定延伸指令300的指定运算所赖以执行的一条件。在一具体实施例中,延伸指令标志304指出,一对应延伸指令300的附随部分301-303及305指定了微处理器所要条件执行的延伸运算。延伸前置码305,或称条件指定元,则指定了一条件码状态,以送至一组态为致能/禁止该延伸运算的执行的条件执行控制逻辑。
此处将本发明的条件执行延伸技术作个概述。一指令延伸项以一既有指令集结构其中一操作码/指令304与一n位延伸特征前置码进行组态。所选取的操作码指令作为一指针304,以指出指令300是一条件执行指令300(也即,其指定了微处理器结构的条件执行延伸项),而该n位特征前置码305则指定数个条件码的一子集合,作为该延伸指令300的其余项目所指定的一运算是否执行的判断依据。在一具体实施例中,延伸前置码305具八位的大小,最多可指定256个不同的该数个条件码的子集合,以作为一既有指令集中处理现行指令的判断依据。n位前置码的实施例,则最多可指定2n种不同的条件码组合,以用于一特定运算的条件执行期间。
现请参阅图4,一表格400显示依据本发明,条件执行延伸项如何映像至一8位延伸前置码实施例的位逻辑状态。类似于图2所讨论的操作码图200,图4的表格400呈现一示范性的8位条件码的前置码图400,其将一8位延伸前置码项目305的最多256个值,关联到一符合旧有规则微处理器的对应条件码状态401(如E34、E4D等)。在一x86的具体实施例中,本发明的8位延伸特征前置码305为提供给延伸条件执行指定元401(也即EOO-EFF)使用,该些指定元401乃现行x86指令集结构所未能提供。
图4所示的延伸特征401以一般性的方式表示,而非具体指涉实际的特征,此因本发明的技术可应用于各种不同的结构延伸项401与特定的指令集结构。熟悉此领域技术人员将发觉,许多不同的结构特征401,其中一些已于上文提及,可依此处所述的逸出标志304/延伸前置码305技术将其纳入一既有的指令集。图4的8位前置码实施例提供了最多256个不同的特征401,而一n位前置码实施例则具有最多2n个不同特征401的编程选择。
在对应不同类型的条件码储存与表示方式的实施例中,这些类型对许多现代的微处理器而言是很常见的,条件可被指定为等于零、不等于零、偶校验(even parity)、奇校验(odd parity)、带负号(sign)、不带负号、溢位(overflow)、未溢位、进位(carry)、未进位,也可指定前述条件的组合,包括高于(above)(即未进位且不等于零)、低于(below)或等于(即进位或等于零)、大于(即不等于零且符号位等于进位位)等等。在许多此种微处理器中,一条件码状态项目(也即缓存器)以数个条件码位(或标志)加以组态,其中每一位代表一最近产生的结果是否已超过某一结果边界条件,像是产生一进位位,或有一符号位显示该结果为一负数。然而,前述条件的状态并非将本发明的范围限制于一特定的微处理器条件码集合。前述实施例可作为范例,用来解说依本发明,一条件前置码305如何被编码,以提供条件子集合,作为一符合旧有规则的微处理器执行运算的判断依据。熟悉此领域技术人员将可发觉,一特殊的延伸条件前置码305的组态,依照一对应微处理器中条件码如何表示与储存而定。
现请参阅图5,其为解说本发明用以执行延伸条件执行指令300的管线化微处理器500的方块图。微处理器500具有三个明显的阶段类型提取、转译及执行。提取阶段具有提取逻辑501,可从指令高速缓存502或外部内存502提取指令。所提取的指令经由指令队列503送至转译阶段。转译阶段具有转译逻辑504,耦接至一微指令队列506。转译逻辑504包括延伸转译逻辑505。执行阶段则有执行逻辑507,其内具有延伸执行逻辑508。
依据本发明,于运作时,提取逻辑501从指令高速缓存/外部内存502提取格式化指令,并将这些指令依其执行顺序放入指令队列503中。接着从指令队列503提取这些指令,送至转译逻辑504。转译逻辑504将每一送入的指令转译/译码为一对应的微指令序列,以指示微处理器500依据所指定的条件是否满足,来执行这些指令所指定的运算。依本发明,延伸转译逻辑505检测那些具有延伸前置码标志的指令,并提供作为对应条件指定元前置码的转译/译码之用。在一x86的实施例中,延伸转译逻辑505组态为检测其值为F1H的延伸前置码标志,其为x86的ICE BKPT操作码。微指令字段则提供于微指令队列506中,以指定延伸指令中所指定的条件码状态。
微指令从微指令队列506被送至执行逻辑507,由延伸执行逻辑508检测其中是否有条件执行的微指令,此处的条件执行依微指令字段指示而致能,延伸执行逻辑508并于所指定的运算执行前,评估条件码储存项目。若评估结果确定条件码状态为真,则延伸执行逻辑508执行该指定运算。若条件码状态为假,则排除该指定运算的执行。
熟悉此领域技术人员将发现,图5所示的微处理器500为现代的管线化微处理器500经过简化的结果。事实上,现代的管线化微处理器500最多可包括有20至30个不同的管线阶段。然而,这些阶段可概括地归类为方块图所示的三个阶段,因此,图5的方块图500可用以点明前述本发明实施例所需的必要组件。为了简明起见,微处理器500中无关的组件并未显示出来。
现请参阅图6,其为本发明用于条件执行的延伸前置码600的一具体实施例的方块图。该延伸条件指定元前置码600为一8位延伸前置码600,且具有一包括位[30]的条件字段602与一包括位[74]的剩余字段601。
图7为显示由图6延伸前置码的值所指定的条件范例的表格700。其中某些条件,像是偶校验与不带负号,代表许多现代的微处理器结构中,个别条件码标志的状态,而其它条件,像是不高于与大于或等于,则代表个别条件码标志的组合。
图6与图7所讨论的示范实施例用来解说本发明在应用上的弹性,可配合一考虑采行的指令集结构中表示条件码的特定方式。然而,熟悉此领域技术人员将会察觉,图6与图7的范例并未使本发明的范围限于4位的条件指定元。
现请参阅图8,其为图5的微处理器内转译阶段逻辑800的详细的方块图。转译阶段逻辑800具有一指令缓冲器804,依本发明,其提供延伸条件执行指令至转译逻辑805。转译逻辑805耦接至一具有一延伸特征字段803的机器特定缓存器(machine specific register)802。转译逻辑805具一转译控制器806,其提供一禁止信号807至一逸出指令检测器808及一延伸前置码译码器809。逸出指令检测器808耦接至延伸前置码译码器809及一指令译码器810。延伸前置码译码器809与指令译码逻辑810存取一控制只读存储器(ROM)811,其中储存了对应至某些延伸指令的样板(template)微指令序列。转译逻辑805也包括一微指令缓冲器812,其具有一操作码延伸项字段813、一微操作码字段814、一目的字段815、一来源字段816以及一位移字段817。
运作上,在微处理器通电激活期间,机器特定缓存器802内的延伸字段803的状态通过信号激活状态(signal power-up state)801决定,以指出该特定微处理器是否能转译与执行本发明的延伸条件执行指令。在一具体实施例中,信号801从一特征控制缓存器(图上未显示)导出,该特征控制缓存器则读取一于制造时即已组态的熔合数组(fuse array)(未显示)。机器特定缓存器802将延伸特征字段803的状态送至转译控制器806。转译控制逻辑806则控制从指令缓冲器804所提取的指令,要依照延伸条件执行转译规则或既有转译规则进行解译。提供这样的控制特征,可允许监督应用程序(如BIOS)致能/禁止微处理器的延伸执行特征。若延伸执行被禁止,则具有被选为延伸特征标志的操作码状态的指令,将依既有转译规则进行转译。在一x86的具体实施例中,选取操作码状态F1H作为标志,则在常用的转译规则下,遇到F1H将造成不合法的指令异常(exception)。然而,在延伸转译规则下,若遇到标志,则会被逸出指令检测器808检测出来。逸出指令检测器808因而于延伸前置码译码器809转译/译码标志之后的延伸条件指定元前置码时,禁止指令译码器810的运作,并于转译/译码该延伸指令的剩余部分时,致能指令译码器810。某些特定指令将导致对控制ROM 811的存取,以获取对应的微指令序列样板。微指令缓冲器812的操作码延伸项字段813由前置码译码器809进行组态,以指定用以判断一指定运算是否执行的条件。其它缓冲器字段814-817则由指令译码器810来进行组态。经过组态的微指令812被送至一微指令队列(未显示于图中),由处理器进行后续执行。
现请参阅图9,其为图5微处理器内的延伸执行逻辑900的方块图。该延伸执行逻辑900具一算术逻辑单元(arithematic logic unit,ALU)909,其经由一致能信号GO 908耦接至条件执行控制逻辑907。条件执行控制器907则存取一条件标志储存机制906,或称条件标志缓存器906。两操作数OPERAND 1与OPERAND 2,由ALU 909从操作数缓存器901与905提取出来。一微指令缓存器902则提供一微指令给ALU 909与条件执行控制器907。该微指令缓存器902具有一操作码延伸项字段903与一其余字段904。ALU 909并另外耦接至一结果缓存器910。
运作上,当一延伸条件执行指令依本发明被转译成一微指令序列时,延伸微指令以及缓存器901与905内的可用操作数都经由微指令缓存器902,被送至延伸执行逻辑900。若操作码延伸项字段903指出了用来判断其余字段904所指定运算是否执行的条件,则条件执行控制逻辑907会在该运算执行前,存取该条件标志储存机制906,以判断该条件是否为真。若该条件为真,则执行控制器907通过信号GO 908指示ALU 909执行该指定运算,并提供一结果至结果缓存器910。若条件为假,则信号GO 908设定为假,以指示ALU 909排除该运算的执行,因此,就没有结果送至结果缓存器910。
现请参阅图10,其显示一表格1000,对于常用的IF-THEN-ELSE叙述,比较其条件执行流程与常用的执行流程。在左边的字段中,表格1000显示一常用的C语言程序码表示式,用于比较两个操作数A与B。若A大于B,则操作数C设定为3。若A不大于B,则操作数C设定为1。这种表示式常见于许多应用程序中。再者,此种比较形式的结果并非总是可预测的。
表格1000的中间字段显示一常用的x86执行流程,以实作前述的C语言表示式。首先,指令MOV EAX,[A]从内存提取操作数A至缓存器EAX。接着,指令CMP EAX,[B]将缓存器EAX的内容与内存中的操作数B做比较。条件跳跃指令JLE ELSE检查前面比较指令所产生的条件码状态。若条件码显示比较的结果是小于或等于的情形,则程序流程分支至卷标ELSE,将操作数C设定为1。否则,操作数C设定为3,且程序流程靠一随后的无条件跳跃指令JMP COMMON所指引,而跳至卷标COMMON,再继续进行。
在现代的深度管线化微处理器中,若分支预测逻辑对条件跳跃指令JLEELSE的结果预测错误,则许多指令将从指令管线中被清空,以依据正确的程序流程开始执行指令。
同样的C语言表示式的条件执行流程,则显示于表格1000的右边字段,以解说本发明如何使用延伸指令,以避免管线因错误的分支预测结果而被清空。对比于需执行条件跳跃指令(即JLE ELSE)及后续的无条件跳跃指令(即JMP COMMON),此处执行的是两个延伸条件搬移指令(GT.MOV[C],3与之后的LE.MOV[C],1)。第一个搬移指令的执行依比较指令的结果而定(即CMPEAX,[B])。若比较的结果是大于,则执行第一个搬移指令,将操作数C设为3。若比较结果是小于或等于,则第一个搬移指令被排除,并执行第二个搬移指令,设定操作数C为1。因此,本发明的指令流程避免了由于错误的分支预测结果,导致管线被清空的现象。
现请参阅图11,其为描述本发明用以转译与执行条件指令的方法的运作流程图1100。流程开始于方块1102,其中一个以条件执行指令进行组态后的程序被送至微处理器。流程接着进行至方块1104。
于方块1104中,下一个指令从高速缓存/外部内存提取。流程接着进行至判断方块1106。
于判断方块1106中,对在方块1104中所提取的下个指令进行检查,以判断是否包括一延伸逸出标志/码。若否,则流程进行至方块1112。若检测到该延伸逸出码,则流程进行至方块1108。
于方块1108中,由于在方块1106中已检测到一延伸逸出标志,转译/译码在一延伸前置码上执行,以判断一对应运算所赖以执行的指定条件是否满足。流程接着进行到方块1110。
于方块1110中,一微指令序列的对应字段被组态为指出该延伸前置码所指定的指定条件。流程接着进行至方块1112。
于方块1112中,该指令的其余部分(如前置码项目、操作码、地址指定元)被转译/译码,以判断所要执行的运算及关联操作数的属性。流程接着进行至方块714。
于方块1114中,一微指令序列的其余字段被组态为指定该指定运算及其操作数格式。流程接着进行至方块1116。
于方块1116中,该微指令序列,其包括方块1110所组态的操作码延伸项字段以及方块1114所组态的其余字段,被送至一微指令队列,由微处理器执行。流程接着进行至方块1118。
于方块1118中,依照本发明,该微指令序列由延伸条件执行逻辑进行提取。流程接着进行至方块1120。
于方块1120中,延伸条件执行逻辑存取一条件码储存结构,以读取对应于操作码延伸项字段中所指定条件的程序代码状态。流程接着进行至判断方块1122。
于判断方块1122中,评估程序代码状态,以判断所指定的条件是否满足。若满足,则流程进行至方块1124。若未满足,则流程进行至方块1126,因而排除了指定运算的执行。
于方块1124中,由于指定条件为真,便执行指定运算。流程接着进行至方块1126。
于方块1126中,本方法完成。
虽然本发明及其目的、特征与优点已详细叙述,其它实施例也可包括在本发明的范围内。例如,本发明已就如下的技术加以叙述利用已完全占用的指令集结构内单一、未使用的操作码状态作为标志,以指出其后的延伸特征前置码。但本发明的范围就任一方面来看,并不限于已完全占用的指令集结构,或未使用的指令,或是单一标志。相反地,本发明涵盖了未完全映像的指令集、具已使用操作码的实施例以及使用一个以上的指令标志的实施例。例如,考虑一没有未使用操作码状态的指令集结构。本发明的一具体实施例包括了选取一作为逸出标志的操作码状态,其中选取标准依市场因素而决定。另一具体实施例则包括使用操作码的一特殊组合作为标志,如操作码状态7FH的连续出现。因此,本发明的本质在于使用一标志序列,其后则为-n位的延伸前置码,可使一延伸指令所指定运算的执行,依据该n位延伸前置码所指定数个条件的一子集合是否满足而定。
此外,本发明已通过一具有一组条件码或标志的微处理器来作为范例,该组条件码指出一先前所产生结果的边界条件,包括校验、溢位、正负号及零。虽然这些类型的条件指针在今日仍广为使用,但本发明并不仅限于应用在这些类型的条件。例如,本发明另外的实施例即包括其它的指定条件,像是一特殊缓存器内容的状态、一通讯端口或其它I/O装置是否使用中、是否有可用的内存或高速缓存空间等等。
再者,虽然上文利用微处理器为例来解说本发明及其特征和优点,熟悉此领域技术人员仍可察觉,本发明的范围并不限于微处理器的结构,而可涵盖所有形式的可编程装置,如信号处理器、工业用控制器(industrialcontroller)、阵列处理机及其它同类装置。
总之,以上所述仅为本发明的较佳实施例而已,不能限定本发明所实施的范围。凡依本发明权利要求所作的等效变化与修饰,都应仍属于本发明专利涵盖的范围内。
权利要求
1.一种用于一微处理器中的条件执行装置,包括一转译逻辑,用以将一延伸指令转译成对应的微指令,其中该延伸指令包括一延伸前置码,用以指定一条件,而该延伸指令所指定的运算是否执行,依该条件有否满足而定;以及一延伸前置码标志,用以指出该延伸前置码,其中该延伸前置码标志为该微处理器的一指令集内另一结构化地指定的操作码;以及一延伸执行逻辑,耦接至该转译逻辑,用以接收该对应的微指令,并评估该条件,其中若该条件未满足,则该延伸执行逻辑便排除该运算的执行。
2.如权利要求1所述的条件执行装置,其中该延伸指令还包括依据该指令集所结构化地指定的数个项目。
3.如权利要求2所述的条件执行装置,其中该些结构化地指定的项目包括一操作码项目,用以指定该运算。
4.如权利要求1所述的条件执行装置,其中该延伸前置码包括数个位,且其中该些位的每一逻辑状态为对应到数个结果条件的一子集合。
5.如权利要求1所述的条件执行装置,其中该对应的微指令包括一微操作码字段与一微操作码延伸项字段。
6.如权利要求5所述的条件执行装置,其中该延伸执行逻辑使用该微操作码延伸项字段,以决定该条件,且其中该延伸执行逻辑使用该微操作码字段以决定该运算。
7.如权利要求6所述的条件执行装置,其中该延伸执行逻辑包括一条件执行控制器,组态为评估该条件,并依据该条件致能/禁止该运算的执行。
8.如权利要求1所述的条件执行装置,其中该转译逻辑包括一逸出指令检测逻辑,用于检测该延伸前置码标志;以及一延伸前置码译码逻辑,耦接至该逸出指令检测逻辑,用以转译该延伸前置码,并对该对应微指令内的一微操作码延伸项字段进行组态,该微操作码延伸项字段则指定该条件。
9.如权利要求8所述的条件执行装置,其中该转译逻辑还包括一指令译码逻辑,用以组态该对应微指令内的其它字段,该其它字段依据该指令集指定该运算。
10.一种为一既有微处理器指令集增添条件执行特征的延伸机制,包括一延伸指令,组态为指定一数个条件码的子集合,以作为一指定运算是否执行的判断依据,其中该延伸指令包括该既有微处理器指令集的其中一指令,其后则为一n位延伸特征前置码,该指令指出该延伸指令,而该n位延伸特征前置码则指出该子集合;一转译器,组态为接收该延伸指令,并产生一微指令序列,以依据该子集合指导该指定运算的条件执行;以及一条件执行控制逻辑,耦接至该转译器,组态为评估对应该子集合的条件码,并于该子集合满足时,执行该指定运算。
11.如权利要求10所述的延伸机制,其中该延伸指令还包括数个指令部分,组态为指定该指定运算。
12.如权利要求11所述的延伸机制,其中该些指令部分依照该既有微处理器指令集加以格式化。
13.如权利要求10所述的延伸机制,其中该转译器包括一逸出指令检测器,用以检测该指令;以及一延伸前置码译码器,耦接至该逸出指令检测器,用以转译该n位的延伸特征前置码,并产生指定该子集合的该微指令序列内的一微操作码延伸项字段。
14.一种为一既有微处理器指令集补充条件执行的能力的指令集延伸模块,包括一逸出标志,由一转译逻辑接收,用以指出一对应指令的附随部分指定了一微处理器所要条件执行的一延伸运算,其中该逸出标志为该既有微处理器指令集内的一第一操作码项目;以及一条件指定元,耦接至该逸出标志,且为该伴随部分其中之一,用以指定一条件码状态,该条件码状态为该延伸运算是否执行的判断依据,且被送至一条件执行控制逻辑,其中该条件执行控制逻辑组态为致能/禁止该延伸运算的执行。
15.如权利要求14所述的指令集延伸模块,其中该转译逻辑将该逸出标志与该附随部分转译成对应的微指令,该对应的微指令指示一延伸执行逻辑去执行该延伸运算。
16.如权利要求15所述的指令集延伸模块,其中该条件执行控制逻辑评估一条件码项目,以判断该条件码状态是否为真,且若该条件码状态为假,则该条件执行控制逻辑指示该延伸执行逻辑排除该延伸运算的执行。
17.如权利要求14所述的指令集延伸模块,其中该转译逻辑包括一逸出标志检测逻辑,用以检测该逸出标志,并指示该附随部分的转译操作需依据延伸转译规则(conventions);以及一译码逻辑,耦接至该逸出标志检测逻辑,用以依据该既有微处理器指令集的规则,执行微处理器指令的转译操作,并依据该延伸转译规则执行该对应指令的转译,以致能该延伸运算。
18.一种扩充一微处理器指令集的方法,以提供可编程条件执行能力,该方法包括提供一延伸指令,该延伸指令包括一延伸标志及一条件指定元前置码,其中该延伸标志为该微处理器指令集的其中一操作码;通过该条件指定元前置码与该延伸指令的其余部分指定所要执行的一运算,其中该运算是否执行决定于该条件指定元前置码所指定的一条件是否满足;以及评估条件码项目以判断该条件是否满足,若该条件满足,即执行该运算,若不满足,便排除该执行操作。
19.如权利要求18所述的方法,其中该指定所要执行的运算的操作包括首先指定该运算,该首先指定的操作使用了该微处理器指令集中另一不同的操作码。
20.如权利要求18所述的方法,还包括将该延伸指令转译成微指令,其中该微指令在执行该延伸运算前,指示一延伸执行逻辑去判断该条件是否满足。
21.如权利要求20所述的方法,其中该转译延伸指令的操作包括于一转译逻辑内,检测该延伸标志;以及依照条件执行转译规则译码该条件指定元前置码与该延伸指令的其余部分。
全文摘要
本发明提供一种用于微处理器的条件执行装置。该条件执行装置包括一转译逻辑与一延伸执行逻辑。该转译逻辑将一延伸指令转译为对应的微指令。该延伸指令具有一延伸前置码与一延伸前置码标志。该延伸前置码指定一条件,而该延伸指令所指定的运算是否执行,决定于该条件是否满足。该延伸前置码标志指出该延伸前置码,且为微处理器指令集内另一结构化地指定的操作码。该延伸执行逻辑耦接至转译逻辑,用以接收该对应的微指令,并评估该条件。若条件未满足,则延伸执行逻辑即排除该运算的执行。
文档编号G06F9/22GK1414466SQ0215056
公开日2003年4月30日 申请日期2002年11月13日 优先权日2002年5月9日
发明者G·葛兰·亨利, 罗德·E·胡克, 泰瑞·派克斯 申请人:智慧第一公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1