指令执行方法及指令执行装置与流程

文档序号:18642055发布日期:2019-09-11 23:33阅读:166来源:国知局
本发明涉及一种指令执行的机制,特别涉及一种针对具有原子性(atomicity)的微指令的指令执行方法及一种指令执行装置。
背景技术
::一般而言,处理器的执行单元(executionunit)的数据总线(databus)位宽(bitwidth)为固定的位数,例如为128位,即,仅能运算数据宽(datawidth)最多为128位的数据。然而,随着科技的发展,尤其是在需要大量处理浮点(floatingpoint)指令或向量(vector)指令的领域,处理器需要处理的数据的位宽越来越大,且指令也越来越复杂,可能需要能够支持更多位数数据的处理,例如处理位宽为256位甚至512位的数据。因此,如何基于目前处理器的架构,有效的扩展能够处理的指令类型,并可支持需要以较多位呈现的输出结果,已成为本领域需解决的问题之一。技术实现要素:根据本揭示文件的一实施方式提出一种指令执行方法,用于一处理器中,该处理器包括一指令翻译器(instructiontranslator)、一执行单元、一架构寄存器(architectureregister)及一重排缓冲器(reorderbuffer),该指令执行方法包含:藉由指令翻译器接收一宏指令(macro-instruction),并将宏指令翻译成为一第一微指令、一第二微指令及一第三微指令;其中,指令翻译器为第一微指令及第二微指令标识相同的一原子操作标志;藉由执行单元执行第一微指令,以产生一第一执行结果,并将第一执行结果存储至一临时寄存器;藉由执行单元执行第二微指令,以产生一第二执行结果,并将第二执行结果存储至架构寄存器;以及藉由执行单元执行第三微指令,以从临时寄存器读取第一执行结果并将第一执行结果存入架构寄存器。根据本揭示文件的另一实施方式提出一种指令执行装置,包含:一处理器。处理器包括:一指令翻译器(instructiontranslator)、一重排缓冲器(reorderbuffer)、一架构寄存器(architectureregister)以及一执行单元。指令翻译器用以接收一宏指令,并将宏指令翻译成为一第一微指令、一第二微指令及一第三微指令;其中,指令翻译器为第一微指令及第二微指令标识相同的一原子操作标志;执行单元用以执行第一微指令,以产生一第一执行结果,将第一执行结果存储至一临时寄存器,并执行第二微指令,以产生一第二执行结果,将第二执行结果存储至架构寄存器,并执行第三微指令,以从临时寄存器读取第一执行结果并将第一执行结果存入架构寄存器。本发明所示的指令执行方法及指令执行装置可以应用指令翻译器将宏指令翻译成为多个微指令,并为此些微指令中实现该宏指令操作的微指令(例如前述的第一及第二微指令)标识相同的原子操作标志,藉此可将宏指令分成多个原子性(atomicity)的微指令以进行处理,再藉由此些微指令中的第三位微指令整合第一及第二微指令运算结果,本发明在扩展指令执行装置的所能处理的输出位数的同时,更可以藉由该原子操作标志将处理过程所发生的第一微指令的某些例外标识到与其具有原子性的第二微指令身上,而第一微指令的执行结果由于并不更新其所对应的架构寄存器而可以灵活地先退出(retire)而并不会造成该架构寄存器的错误状态,藉此可增加将宏指令分成多个微指令以进行运算时的灵活性与正确性。附图说明图1是依照本发明一实施例绘示指令执行装置的方块图。图2a~2b是依照本发明一实施例绘示一指令执行方法的示意图。图3是依照本发明一实施例绘示一指令执行方法的示意图。图4是依照本发明一实施例绘示一指令执行方法的流程图。图5是依照本发明一实施例绘示一指令执行方法的示意图。【符号说明】100:指令执行装置102:指令高速缓冲存储器104:指令翻译器106:寄存器别名表107:指令路径108:保留站robentry1:第一重排序缓冲器条目robentry2:第二重排序缓冲器条目126:架构寄存器124:临时寄存器112:执行单元114:整数执行单元116:浮点执行单元117:载入执行指令流水线118:存储次序缓冲器119:存储指令执行流水线120:系统存储器110:重排缓冲器160:架构寄存器文件140:临时寄存器文件400:指令执行方法410~440:步骤ao:aomop:宏指令μop1:第一微指令μop2:第二微指令μop3:第三微指令具体实施方式以下说明为完成发明的优选实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的
发明内容必须参考之后的权利要求范围。必须了解的是,使用于本说明书中的“包含”、“包括”等词,是用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。在权利要求中使用如”第一”、"第二"、"第三"等词是用来修饰权利要求中的元件,并非用来表示之间具有优先权顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。在一实施例中,请参照图1,图1是依照本发明一实施例绘示指令执行装置100的方块图。在一实施例中,指令执行装置100包含一指令翻译器(instructiontranslator)104以及一执行单元112,指令翻译器104用以接收一宏指令(macro-instruction),并将宏指令翻译成为一第一微指令(micro-instruction)、一第二微指令及一第三微指令;其中,指令翻译器104为第一微指令及第二微指令标识相同的一原子操作(atomicoperation)标志(flag),执行单元112用以执行第一微指令,以产生一第一执行结果,并将第一执行结果存储至一临时寄存器124(例如临时寄存器文件140中的多个临时寄存器之一的临时寄存器124);藉由执行单元112执行第二微指令,以产生一第二执行结果,并将第二执行结果存储至一架构寄存器(architectureregister)126(例如架构寄存器文件160中的多个架构寄存器之一的架构寄存器126);以及藉由执行单元执行第三微指令,以从临时寄存器124读取第一执行结果并将第一执行结果存入架构寄存器126。在一实施例中,指令执行装置100可以是一处理器。此外,处理器也可以由体积电路如微控制单元(microcontroller)、微处理器(microprocessor)、数字信号处理器(digitalsignalprocessor)、特殊应用集成电路(applicationspecificintegratedcircuit,asic)或一逻辑电路来实施。在一实施例中,如图1所示,指令执行装置100(例如以微处理器实现的)包括已下指令高速缓冲存储器(instructioncache)102,用以存储诸如x86指令集架构等的指令集架构的宏指令。此外,指令翻译器104,其接收宏指令并将其翻译成微指令(micro-instruction或μop)。然后,微指令被提供到寄存器别名表(registeraliastable,rat)106,寄存器别名表106会把微指令的依赖性用重排序缓存的索引(robindex)或者物理寄存器堆的索引(prfindex)等形式做标记,依赖性是指一个指令的源操作数(sourceoperand)依赖于哪个指令的目标操作数(destinationoperand),例如在后的运算逻辑单元(arithmeticlogicunit,alu)指令的源操作数可能依赖于在前的载入(load)指令的目标操作数,依赖性是由程序(或者是说指令序列本身)所决定的。然后寄存器别名表106按照程序次序向保留站(reservationstation,rs)108发射微指令,并经由指令路径107向重排缓冲器(reorderbuffer,rob)110发射微指令。从寄存器别名表106发射的微指令(issueinst)通常可以被称为微指令。重排缓冲器110存储关于从寄存器别名表106发射的每个指令的条目。保留站108将操作数准备好(ready)的指令派遣到多个执行单元112中合适的一个执行。其中操作数是否准备好可藉由前述依赖性标记是否解除来判断。执行单元112可以包括:一个或多个整数执行单元,诸如整数算法逻辑单元114、一个或多个浮点执行单元116、存储次序缓冲器(memoryorderbuffer,mob)118等。存储次序缓冲器118通常处理访问系统存储器120的存储器类型指令,存储次序缓冲器118包括载入指令执行流水线(loadinstructionexecutionpipe)117和存储指令执行流水线(storeinstructionexecutionpipe)119。系统存储器120可以经由数据高速缓冲存储器(例如,l2数据高速缓冲存储器,未绘示)和总线接口单元(biu,未绘示)与存储次序缓冲器118对接。执行单元112将它们的结果提供到重排缓冲器110,这确保指令的按次序退出(retire)。保留站108包括至少一个寄存器队列(rsqueue或rsmatrix),其中,当指令准备好被执行(该指令所有的操作数准备好且所有的依赖性都解除)时,由寄存器队列向对应的执行单元112调度并派遣(dispatch)对应的指令。值得注意的是,寄存器别名表106及其之前的微指令循序执行(指令依照程序顺序在执行)的最后一级,后面保留站108和执行单元112都属于乱序执行:保留站108中操作数先准备好(ready)的微指令就先派遣到执行单元112执行(同时有多个准备好的微指令,则选择存在保留站108中时间最久的,亦即“最老的”微指令),因此,在此些阶段打破了程序顺序,而由重排缓冲器110来保证执行完以后的微指令按程序顺序退出。请参阅图2a~2b,图2a~2b是依照本发明一实施例绘示一指令执行方法的示意图。在一实施例中,执行单元112运算一次可以得到128位(bit)的执行结果输出,当执行单元112想支持256位的宏指令mop时须要运算两次,才能得到256位的执行结果输出,例如,当指令翻译器104接收到宏指令mop后,指令翻译器104将宏指令mop翻译成一第一微指令μop1及一第二微指令μop2(如图2b所示)。其中,第一微指令μop及第二微指令μop2皆为128bit的微指令。因此,通过将256位的宏指令mop翻译成两个128位的微指令(第一微指令μop1及第二微指令μop2)后,执行单元112两个128位的微指令(第一微指令μop1及第二微指令μop2),可得到256位的输出,藉此扩展执行单元112可处理指令的位数。在一实施例中,指令翻译器104接收宏指令mop后,可将宏指令mop翻译为更多个微指令(例如为5个)。指令执行装置100在越来越多的场合需要能够支持更多位数的数据处理,以avx256指令集为例,指令执行装置100的单指令多数据(singleinstructionmultipledata,simd)寄存器文件(registerfile)所支持的位宽增加至256位,但如果执行单元112的数据总线位宽仍为128位,在这种状况下就需要由多个(例如2个)微指令(μop)来实现1个单一的avx256宏指令的运算。但是,实现该avx256操作的这2个微指令(后续称为“操作微指令”)由于要更新simd寄存器文件中的同一个256位的架构寄存器126,如果这2个操作微指令之一在执行过程中发生重演(replay)或者例外(exception),而另一正确执行的操作微指令可能退出(retire)并提交结果以更新该256位的架构寄存器126自己对应的部分,则在这种情况下,该256位的架构寄存器126就会存在一半正确而一半错误的状态,这是处理器规范/手册所不允许的,其允许架构寄存器126所有位全部正确亦或全部错误,但不允许这种不确定的中间状态。因此本发明提出了将同一宏指令对应的“操作微指令”(例如前述的第一及第二微指令)标识相同的原子操作标志,以表征第一微指令的第一目的操作数(destination)及第二微指令的第二目的操作数均指向相同的架构寄存器126,以供后续当有微指令出现执行例外状况时进行处理(后会详述)。请一并参阅图2a~2b、3,图3是依照本发明一实施例绘示一指令执行方法的示意图。指令翻译器104将第一微指令μop及第二微指令μop2标识相同的一原子操作标志,图3用以表示原子操作(atomicoperation)ao,原子操作ao可以理解为一个宏指令,例如为宏指令mop,其可被拆解为第一微指令μop1及第二微指令μop2,换句话说,相同的原子操作标志代表第一微指令的第一目的操作数(destinationoperand)及第二微指令的第二目的操作数均指向相同的架构寄存器126。在一实施例中,该原子操作标志标识于第一微指令μop1及该第二微指令μop2在该重排序缓冲器110中分别对应的第一重排序缓冲器条目robentry1及第二重排序缓冲器条目robentry2中。在一实施例中,定义两个以上的微指令(例如,第一微指令μop1及第二微指令μop2)视为一组原子操作ao。由于执行单元112需要执行两个128位的微指令(第一微指令μop1及第二微指令μop2)才可得到256位的输出,故第一微指令μop1及第二微指令μop2之间的相关性很强,有时执行单元112会乱序执行指令,例如,执行单元112执行第一微指令μop1后,又执行了许多其他的微指令,才执行第二微指令μop2,在这种状况下,很容易造成输入第二微指令μop2的参数不正确,而执行结果也随之错误的情形。因此,属于同一组原子操作ao的微指令(例如,第一微指令μop1及第二微指令μop2)在执行过程有发生重放(replay)、退出(retire)、例外(exception)时,需要藉由该原子操作标志进行特别的处理,以下以图3为例,说明一实施例的指令执行方法关于依据前述原子操作标志进行重放、退出及例外处理的细部技术特征。值得注意的是,在本实例中,第一微指令μop1及第二微指令μop2的执行结果分别在第一微指令μop1和第二微指令μop2退出后会直接更新至架构寄存器126。在一实施例中,当第一微指令μop1的执行发生例外(包括格式例外、无效例外、除数为零、精度例外、下溢例外及上溢例外等)时,则将例外状况标示到第一微指令μop1的第一重排序缓冲器条目robentry1中且不退出第一微指令μop1,直到与第一微指令μop1具有相同的原子操作标志的第二微指令μop2执行结束且当第一微指令μop1为重排缓冲器110中最老(oldest,即此时重排缓冲器110按序应执行第一微指令μop1的退出程序)时,进行第一微指令μop1发生的例外对应的例外处理程序。值得注意的是,必须等到第二微指令μop2执行结束的原因是因为:第二微指令μop2执行结束会更新一执行状态字(executionstatusword),指令翻译器104需要根据该执行状态字的值决定执行哪个例外处理程序,当第一微指令μop1发生的例外对应的例外处理程序执行完毕,可再次经由指令翻译器104重新译码,以产生第一微指令μop1及第二微指令μop2,且第一微指令μop1及第二微指令μop2执行完毕没有任何错误后,第一微指令μop1和第二微指令μop2才能在最老的时候退出。在本实施例中,重排缓冲器110根据相同的原子操作标志来判断需要与第一微指令μop1绑定进行前述例外处理的第二微指令μop2。在一实施例中,当第一微指令μop1的执行正常,暂时也不能退出第一微指令μop1,且第二微指令μop2发生例外时,由于第一微指令μop1具有与第二微指令μop2相同的原子操作标志,则将此例外状况标示到第一微指令μop1的第一重排序缓冲器条目robentry1中,当第一微指令μop1为重排缓冲器110中最老时,进行第二微指令μop2发生的例外对应的例外处理程序,当第二微指令μop2发生的例外对应的例外处理程序执行完毕,再次经由指令翻译器104重新译码产生第一微指令μop1及第二微指令μop2且执行完毕没有任何错误后,第一微指令μop1和第二微指令μop2才能在最老的时候退出。在一实施例中,有些执行结果错误并不需要从指令翻译器104重新译码执行,可通过执行单元112重新执行一次微指令,即可能得到正确的执行结果,这种操作称之为“重放(replay)”。在一实施例中,当第一微指令μop1的执行结果错误时,执行单元112从第一微指令μop1开始重放,即重新执行第一微指令μop1及其往后的微指令(包含重新执行第二微指令μop2)。在一实施例中,当第一微指令μop1的执行结果正确而第二微指令μop2的执行结果错误时,由于第二微指令μop2与第一微指令μop1具有相同的原子操作标志,重排缓冲器110在第一微指令μop1最老时不执行第一微指令μop1的退出操作而是执行第二微指令μop2的重放,当执行单元112重新执行第二微指令μop2及其往后的微指令后,重排缓冲器110方能执行第一微指令μop1的退出。值得注意的是,在图3所述的实施例中,第一微指令μop1尽管执行结果正确也因为与其具有原子性的第一微指令μop2发生错误而不能执行退出程序,因此本发明更提出图4和图5的实施例,其中将一宏指令翻译成为至少3个微指令,其中包括至少2个操作微指令(如第一微指令及第二微指令),其中第一微指令执行正确时可退出但并不更新架构寄存器126,而是将结果存储至临时寄存器124,当第一和第二微指令都正确执行后,再藉由第三位微指令将其第一执行结果由临时寄存器124整合至架构寄存器126,如此当第一微指令执行正确就可以退出(retire)也不会造成该架构寄存器126的错误状态,同时也不会造成硬件资源上的浪费。请一并参阅图4~5,图4是依照本发明一实施例绘示一指令执行方法400的流程图。图5是依照本发明一实施例绘示一指令执行方法的示意图。指令执行方法400适用于一处理器中,处理器包括指令翻译器104、执行单元112、架构寄存器126及重排缓冲器110。在一实施例中,可采用图1的指令执行装置100以执行图4的指令执行方法400。在步骤410中,指令翻译器104接收宏指令,并将宏指令翻译成为第一微指令μop1、第二微指令μop2及一第三微指令μop3(如图3所示)。在步骤415中,指令翻译器104将第一微指令μop1及第二微指令μop2标识相同的原子操作标志,相同的原子操作标志代表第一微指令μop1及第二微指令μop2是同一宏指令的操作微指令且它们之间具备原子性(atomicity),在一实施例中,原子性表现为第一微指令μop1的第一目的操作数(destination)与第二微指令μop2的第二目的操作数均指向相同的架构寄存器(例如图1的架构寄存器126)。在一实施例中,指令翻译器104在解码(decode)时,将该相同的原子操作标志分别标识在第一微指令μop1及第二微指令μop2在重排序缓冲器110中分别对应的第一重排序缓冲器条目robentry1及第二重排序缓冲器条目robentry2中,代表此些微指令(第一微指令μop1及第二微指令μop2)为原子操作oa的一部分。在一实施例中,指令翻译器104将第一微指令μop1标上原子操作oa的起始标识,将及第二微指令μop2标上原子操作oa的结束标识,指令执行装置100中的其他元件可以得知起始标识至结束标识之间的微指令(当宏指令需要3个及以上的操作微指令时,例如,其译码后的程序顺序依序为:第一微指令μop1、第四微指令μop4及第二微指令μop2等来实现其运算,则第一微指令μop1及第二微指令μop2之间的第四微指令μop4可不需要标记μ)皆属于原子操作oa的一部分。在一实施例中,当执行单元112执行一浮点指令时,若此浮点指令所需带宽(bandwith)为128位,则执行单元112在执行完毕后会输出128位的执行结果及一些标识字段至重排序缓冲器110中该浮点指令对应的重排序缓冲器条目中,标识字段例如包括前述的原子操作标志、重放(replay)标志、例外(exception)标志及其相关信息(例如包括指令翻译器104执行例外处理程序需要的一标识位置及一错误代码等)。在一实施例中,指令翻译器104译码时会将原子操作标志标识在第一微指令μop1及第二微指令μop2各自的重排序缓冲器条目中,在后续的各个使用到的元件(例如,重排缓冲器110、执行单元112)亦会在第一微指令μop1和/或第二微指令μop2各自的重排序缓冲器条目中标识各种错误状况。在一实施例中,指令高速缓冲存储器102、保留站108和/或浮点执行单元116若检测到第一微指令μop1和/或第二微指令μop2在它们对应的处理阶段(分别为译码阶段、发射阶段及执行阶段)发生例外,则会向重排缓冲器110中所存的对应微指令的条目标上例外(exception)标志及其相关信息。在一实施例中,若第一微指令μop1和/或第二微指令μop2在被执行单元112执行前或执行过程中被检测到有重放(replay)的状况、有例外(exception)状况(标上例外状况代码)或其他错误状况,重排缓冲器110可以依据前述标识对具备相同的原子操作标志的微指令进行处理(例如处理例外状况),例如,在浮点执行单元116执行第一微指令μop1之后,第一微指令μop1被检测到其第一执行结果发生一第一例外时,根据其原子操作标志将该第一例外标识在与其具有原子性的第二微指令μop2处,例如标识在第二微指令μop2的重排序缓冲器条目中。值得注意的是,前述实施例中的第一例外可以是在第一微指令μop1被执行单元112执行之后发生的,此种例外可被称之为在后例外(postexception),在后例外例如为一精度例外(precisionexception)、一下溢例外(underflowexception)或一上溢例外(overflowexception),而常见的例外状况还包括在被执行单元112执行之前发生的、与源操作数(sourceoperand)相关联的例外,此种例外可被称之为在前例外(preexception),在前例外例如为一格式例外(de-normalexception)、一无效例外(invalidexception)或一除数为零例外(zerodivideexception)。关于不同微指令的不同例外状况的标识方式,以及不同微指令的重放(replay)状况的标识方式,将在后续段落说明。在图4对应的实施例中,重排缓冲器110根据该原子操作标志判断一个发生例外状况的微指令是否具备原子性指令,如有,则可将较老微指令(例如前述的第一微指令μop1)的例外状况标识于较年轻的原子性指令(例如前述的第二微指令μop2)处,由于第一微指令μop1退出后其错误的结果仅更新于临时寄存器124,其并不会造成架构寄存器126的状态不确定,因此较老微指令(例如前述的第一微指令μop1)可先退出,而在该较年轻的原子性指令为最老(即执行退出程序)时,一并处理两个微指令的例外状况。其中,处理例外状况的方式例如,但不限于,重排缓冲器110传送应该至少一例外结果的一标识位置与一错误代码到指令翻译器104中的一微码(ucode,图未绘示),该微码依据标识位置与错误代码选择执行其所存储的多个例外处理程序(exceptionhandler)之一。在步骤420中,执行单元112执行第一微指令μop1,以产生一第一执行结果,并将第一执行结果存储至临时寄存器124。藉此,即使第一执行结果错误,也不会影响到架构寄存器126。在步骤430中,执行单元112执行第二微指令μop2,以产生一第二执行结果,并将第二执行结果存储至架构寄存器126。在步骤440中,执行单元112执行第三微指令μop3,以从临时寄存器124读取第一执行结果并将第一执行结果存入架构寄存器126对应的位置。藉此,请一并参照图1及图5,第一微指令μop1/第二微指令μop2只有成功退出(retire)才能去更新临时寄存器124/架构寄存器126,所以当第一微指令μop1发生例外时,第一微指令μop1可退出并将其例外标识在第二微指令μop2身上,由于第一微指令μop1退出不会更新架构寄存器126,而第二微指令μop2在退出之前会执行例外处理程序,故错误结果不会更新至架构寄存器126,从而避免造成架构寄存器126状态不确定的问题。为了再进一步论证无论出现哪种异常情况,本实施例描述的指令执行方法都可以解决,下面再具体描述(1)当第一微指令μop1发生在前例外(preexception)的情形;(2)当第一微指令μop1发生在后例外(postexception)的情形;(3)当第一微指令μop1正确执行且成功退出,第二微指令μop2发生例外(无论是在前例外还是在后例外)的情形;(4)当第一微指令μop1或第二微指令μop2需要重放(replay)时。(1)当第一微指令μop1发生在前例外(preexception)的情形:在一实施例中,当第一微指令μop1在被执行单元112执行之前,被检测到对应到第一微指令μop1的至少一源操作数(sourceoperand)发生一格式例外(de-normalexception)、一无效例外(invalidexception)或一除数为零(zerodivideexception)时,执行单元112不退出第一微指令μop1(甚至可以根本不执行第一微指令μop1),如此避免造成架构寄存器126状态不确定的问题。其中,格式例外例如为源操作数的格式不正确,无效例外例如为源操作数的操作数无效或存在无法执行的错误,除数为零的例外均为在前例外。此些在前例外都可以在执行前被检测出来。(2)当第一微指令μop1发生在后例外(postexception)的情形:如前所述,有一些例外的状况是在执行单元112执行微指令后,由执行结果而得知。例如,当第一执行结果包含一精度例外(precisionexception)、一下溢例外(underflowexception)或一上溢例外(overflowexception)之中至少一例外结果时,这种例外称之为在后例外(postexception)。执行单元112根据该原子操作标志将第一微指令μop1的至少一在后例外(后续称之为第一例外)标识在第二微指令μop2身上,在一实施例中执行单元112将该第一例外标识在第二微指令μop2在重排缓冲器110中对应的第二重排缓冲器条目robentry2中,在重排缓冲器110可当第一微指令μop1在重排缓冲器110中的条目索引为最老时退出第一微指令μop1。当第二微指令μop2在重排缓冲器110中的条目索引为最老时(即按序应执行第二微指令μop2的退出程序时),重排缓冲器110暂不退出第二微指令μop2,而是传送对应前述第一例外的一标识位置与一错误代码到指令翻译器104,指令翻译器104依据标识位置与错误代码执行对应的一例外处理程序(exceptionhandler)。值得注意的是,当第一微指令μop1发生第一例外,而第二微指令亦发生一例外(无论是在前例外或在后例外,后续称之为第二例外)的状况下,执行单元112在检测到第一例外时仍可将该第一例外标识在第二微指令μop2身上,而第二例外被检测到时,同样标识在第二微指令μop2。重排缓冲器110可先退出第一微指令μop1,当重排缓冲器110按序应执行第二微指令μop2的退出程序时,可综合第一和第二例外谁的引起者更老,便将谁的标识位置与错误代码传送到该指令翻译器104以执行对应的例外处理程序。在这里第一微指令μop1较第二微指令μop2更老,因此仍然是将前述第一例外的标识位置与错误代码到指令翻译器104。(3)当第一微指令μop1正确执行且成功退出,第二微指令μop2发生例外(无论是在前例外还是在后例外)的情形:当第一微指令μop1在被执行单元112执行之后第一执行结果被检测为一正常结果,且第二微指令μop2被检测到发生一第二例外时,重排缓冲器110退出第一微指令μop1(当第一微指令μop1在重排缓冲器110中的条目索引为最老时),但不更新架构寄存器126。在此例中,第二例外可以是在前例外,例如为包含一格式例外、一无效例外、一除数为零,也可以是在后例外,例如为包含一精度例外、一下溢例外或一上溢例外。在一实施例中,重排缓冲器110暂不退出第二微指令μop2(当第二微指令μop2在重排缓冲器110中的条目索引为最老时),重排缓冲器110传送对应该第二例外的一标识位置与一错误代码到指令翻译器104,指令翻译器104依据标识位置与错误代码执行对应的一例外处理程序(exceptionhandler)。综上所述,在图4及图5对应的实施例中,重排缓冲器110只有在第一微指令μop1发生在前例外(如前状况(1))时,不能退出第一微指令μop1,其他状况下重排缓冲器110均可得以先退出第一微指令μop1;更具体而言,在第一执行结果发生在后例外(如精度例外、下溢例外或上溢例外)或第二执行结果发生所有类型的例外(如格式例外、无效例外、除数为零、精度例外、下溢例外或上溢例外)时,执行单元112都可退出第一微指令μop1且不更新架构寄存器126,并将这些例外状况标识在第二微指令μop2,当重排缓冲器110执行第二微指令μop2的退出时(当第二微指令μop2在重排缓冲器110中最老时),暂不退出第二微指令μop2,而是依据第二微指令μop2所携带的标识进行例外处理,例如,重排缓冲器110依据第二微指令μop2所携带的标识,传送标识位置与错误代码到指令翻译器104,指令翻译器104依据标识位置与错误代码执行对应的一例外处理器程序。(4)当第一微指令μop1或第二微指令μop2需要重放(replay)时:下面讨论执行错误为需要重放(replay)的情形,当第一执行结果错误需要重放时,执行单元112重新执行第一微指令μop1及其之后的所有微指令。当第一执行结果正确但第二执行结果错误需要重放时,执行单元112重新执行第二微指令μop2及其之后的所有微指令。不同于图3的实施方式之处在于,本实例中第一微指令μop1此时可先退出而不用等待与其具有原子性的第二微指令μop2的重放(replay)执行,在图3的实施方式中,重排缓冲器110在第一微指令μop1最老时不能执行第一微指令μop1的退出操作而是执行第二微指令μop2的重放。值得注意的是,本发明并不限制指令翻译器104在译码宏指令时,将实现该宏指令操作的“操作微指令”的个数限制为2个,在其它实施例中,可以根据需要将该宏指令翻译成为n个(n≥2)操作微指令,其中前(n-1)个操作微指令的执行结果分别存储至(n-1)个对应的临时寄存器124,当n个操作微指令都正确执行并退出后,再藉由第n+1个微指令将(n-1)个临时寄存器124的执行结果存入架构寄存器126。综上,本发明图4及图5所示的指令执行方法及指令执行装置可以应用指令翻译器将宏指令并将宏指令翻译成为多个微指令,并为此些微指令中实现该宏指令操作的操作微指令(例如前述的第一及第二微指令)标识相同的原子操作标志,藉此可将宏指令分成多个原子性(atomicity)的微指令以进行处理,再藉由此些微指令中的第三位微指令整合第一及第二微指令运算结果,本发明的该实施例在扩展指令执行装置的所能处理的输出位数的同时,更可藉由该原子操作标志将处理过程所发生的第一微指令的某些例外标识到与其具有原子性的第二微指令处,而第一微指令的执行结果由于并不更新其所对应的架构寄存器而可以灵活地先退出(retire)而并不会造成架构寄存器的错误状态,藉此可增加将宏指令分成多个微指令以进行运算时的灵活性与正确性。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1