计算机系统的制作方法

文档序号:6490637阅读:232来源:国知局
专利名称:计算机系统的制作方法
技术领域
本发明是关于高速处理用堆栈机器的机器语言描述的程序的新结构的计算机系统。
在这种现有堆栈机器中,由于按照程序上的顺序(in-order)执行,所以具有控制结构简单的优点,但是问题是处理速度受到制约。
为此,曾提出了用out-of-order(不按顺序)处理由堆栈机器的机器语言描述的程序的计算机方式。例如,在日本特公平2-260082号,美国专利第5522051号、美国专利第5333320号及美国专利第5765014号中的处理器单元。在这些说明书中所示的处理器在提高处理性能方面是不充分的,同时在保证正确的例外处理方面存在问题。
本发明为了解决上述问题,其目的在于提供一种计算机系统,可保证正确的例外处理,可以不按顺序(out-of-order)对由堆栈机器的机器语言描述的程序进行更有效地处理。
发明的公开本发明所述的计算机系统,具有数据高速缓冲存储器;数据缓冲器;在各个入口写入数据的综合寄存器文件;在各个入口写入综合寄存器文件的入口地址的前进指针堆栈和结束指针堆栈;在各个入口写入各个指令内容的构成FIFO(先进先出)队列的指令缓冲器;包含进行运算的运算单元和存取和数据缓冲器以及数据高速缓冲器的装入/存储单元的功能单元群;在综合寄存器文件和功能单元群之间,将数据连同综合寄存器文件的入口地址进行分配的共用数据总线。上述各种功能单元,都具有适当数量的保留站。
在过去的堆栈中,堆栈为......、字1、字2、字3、字4(右端是栈顶)的状态,在本发明所述的计算机系统中所对应的状态为,指针堆栈是......、[a]、[b]、[c]、[d](右端是栈顶),入口地址是[a]、[b]、[c]、[d]的综合寄存器文件的各个入口分别保持字1、字2、字3及字4。
本发明所述的计算机系统中,每当指令被译码时,对应指令的内容,操作前进指针堆栈以及综合寄存器文件,同时将指令的内容写入指令缓冲器,在需要的时候,写入适当功能单元空置的保留站上。此时,对指令所规定的操作数堆栈的堆栈操作,同样也适用于前进指针堆栈。这里,对1字数据的操作数堆栈的压入操作,在本发明所述的计算机系统仿真时,只要对需要保持该数据的综合寄存器文件空着的1个入口进行分配,将这个入口的地址压入前进指针堆栈就可以。
也就是说,在译码的指令中,对操作数堆栈规定弹出操作时,从前进指针堆栈只弹出与应弹出语句数相同数量的综合寄存器文件的入口地址。在译码的指令中,对操作数堆栈规定压栈操作时,只分配和应压入语句数相同数量的综合寄存器文件空着的入口地址,将上述分配的综合寄存器文件入口地址,压入前进指针堆栈。而且,如果是伴有弹出/压栈操作的指令,则将译码的指令内容连同被弹出/压入的综合寄存器文件的入口地址,写入指令缓冲器。功能单元的指令需要运行时,将写入指令缓冲器的指令内容,也写入适当功能单元空着的保留站上。
当读出从前进指针堆栈弹出入口地址的综合寄存器文件入口的各个内容,数据已经写入时,过后,将入口地址和数据送往共用数据总线。
对于写入保留站的指令,原则上,按照以下顺序进行工作。在各个保留站,比较应保持写在保留站里的源数据的综合寄存器文件的入口地址和通过共用数据总线送进来的数据,如果一致,就取出数据。需要的源数据齐全以后,开始运行指令。译码时,如果是向前进指针堆栈压入综合寄存器文件入口地址的指令,将功能单元上运行结果得到的数据,连同这个被压入的综合寄存器文件入口地址,放置在共用数据总线上。在综合寄存器文件中,依据通过共用数据总线送来的内容,进行数据写入。
当该指令缓冲器中队列的起始入口所保持的指令可以结束,或者已经结束时,根据该队列的起始入口的内容,操作该结束指针堆栈,使该保持的指令译码时该前进指针堆栈的动作再现,从该队列解除起始的入口,依据弹出操作,解除在该结束指针堆栈中结束了地址保持的该综合寄存器文件入口的分配。
第2图表示前进指针堆栈及结束指针堆栈的构成图。
第3图表示综合寄存期文件的各个入口的详细构成图。
第4图表示指令缓冲器的构成图。
第5图表示指令缓冲器的各个入口的详细构成图。
第6图~第14图是具体表示本发明的一实施例的一操作例的每个循环的前进指针堆栈、结束指针对栈、指令缓冲器及综合寄存器文件内容的说明图。
第15图是当本发明的计算机系统采用每1循环2个指令就可解码的构成时,具体表示程序如何变换的图表。
发明的最佳实施例下面参照附图对本发明所涉及的最佳计算机系统进行说明。下面所述的本发明的计算机系统的实施例用硬件执行由Java VirtualMachine(Java VM)所规定的堆栈机器的基本指令。即,数据字长为32位,以此为单位执行装入/存储及算术逻辑运算等的运算。从而,例如在二倍字长间的算术运算是将每2字合在一起,以4字的源数据为基础产生2字的运算结果。
在现有的堆栈机器上,以字为单位对数据进行压入/弹出的堆栈为了与下述的指针堆栈相区别,以后称为字堆栈。
在Java VM中,每当方法被调出时,帧在字堆栈中进行积累。在各帧中,下部为局部变量及参数的放置区域,而上部为操作数堆栈。
在Java VM中,包括有原来由硬件不能执行的复杂指令,但是以下所述的本发明的计算系统的实施例,由硬件执行下面的基本指令。
(a)向立即数据的操作数堆栈的压入指令bipush、sipush、aconst_null、iconst_ml、inconst_<i>、fconst_<f>、lconst_<l>>、dconst_<d>>
(b)向变量数据的操作数堆栈的装入指令ldc1、ldc2、iload、iload_<n>、fload、fload_<n>、aload、aload_<n>、ldc2w、lload、lload_<n>、dload、dload_<n>、iaload、laload、faload、daload、aaload、baload、caload、saload(c)向操作数堆栈上的数据变量存储的指令istore、istore_<n>、fstore、fstore_<n>、astore、astore_<n>、lstore、lstore_<n>、dstore、dstore_<n>、iastore、lastore、fastore、dastore、aastore、bastore、castore、sastore(d)运算指令(d-1)算术运算指令iadd、ladd、fadd、dadd、isub、lsub、fsub、dsub、imul、lmul、fmul、dmul、idiv、ldiv、fdiv、ddiv、irem、lrem、frem、drem、ineg、lneg、fneg、dneg(d-2)逻辑运算指令ishl、ishr、iushr、lshl、lshr、lushr、iand、land、ior、lor、ixor、lxor(d-3)变换运算指令i2l、i2f、i2d、l2i、l2f、l2d、f2i、f2l、f2d、d2i、d2l、d2f、int2byte、int2char、int2short(d-4)比较运算指令lcmp、fcmpl、fcmpg、dcmpl、dcmpg(e)操作数堆栈的操作指令pop、pop2、dup、dup2、dup_x1、dup2_x1、dup_x2、dup2_x2、swap(f)分支指令ifeq、ifnull、iflt、ifle、ifne、ifnonnull、ifgt、ifge、if_icmpeq、if_icmpne、if_icmplt、if_icmpgt、 if_icmple、if_icmpge、goto、goto_w以后只要不特别预先说明,“指令”就意味着是上述列举的指令一个。
第1图是计算机系统的方框图,10是指令高速缓冲存储器、11是数据高速缓冲存储器、12是数据缓冲器、20是指令取出单元、21是指令解码发行单元、3是前进指针堆栈、3a是前进指针堆栈历史文件、4是结束指针堆栈、5是指令缓冲器、6是综合寄存器文件、7是独立表、8是公用数据总线、80及81是各运算单元0及1、82是分支单元、83是装入/存储单元、801、802、811、812、821、822、831及832是保留站。
下面按本发明实施例的计算机系统的各构成单元说明其详细构成。
(A)指令取出单元指令取出单元具有图中未画出的程序计数器(PC寄存器),从指令高速缓冲存储器取出指令,转给指令解码发行单元。也担当分支的预测及分支的执行。
(B)指令解码发行单元指令解码发行单元对指令取出单元转来的指令进行解码,程序中包括的指令为了由out-of-order执行,而产生用于设定下述的前进指针堆栈、指令缓冲及综合寄存器文件等的各种信号。
(C)指针堆栈指针堆栈由在各个入口中写入综合寄存器文件的入口地址的寄存器文件构成。
在现有的堆栈机器中,字堆栈为……、word1、word2、word3、word4(右端为堆栈头)的状态在本发明的计算机系统中,指针堆栈为……、<a>、<b>、<c>、<d>(右端为堆栈头),在入口地址为<a>、<b>、<c>及<d>的综合寄存器文件的各入口上,分别对应于保持word1、word2、word3、word4的状态。
本发明的计算机系统中包括前进指针堆栈(APSAdvancedPointer Stack)及结束指针堆栈(CPSCompleted PointerStack)2个指针堆栈。
在本发明的计算机系统中,每当对指令解码时,根据指令的内容,操作前进指针堆栈(以下称为APS)及综合寄存器文件,同时通过将指令的内容写入指令缓冲器及需要时写入适当功能单元空着的预约站中,设定应由out-of-order执行程序中包括的指令。即前进指针堆栈反映了解码发行结束的全部指令进行的堆栈操作。
另一方面,结束指针堆栈(以下称CPS)反映按程序上的顺序结束的所有指令进行的堆栈操作。本发明的计算机系统根据数据驱动的原理,可以执行out-of-order,但是结束指针堆栈是为了保证正确的例外处理,为了构成根据由in-order结束后全部指令的状态而存在的。
在本发明实施例的计算机系统中,通过指针堆栈及综合寄存器文件,只保持字堆栈最上部累积的帧上部的操作数堆栈的内容。字堆栈的剩余部分存放在数据缓冲器及数据高速缓冲存储器中。当操作数堆栈增大,用指针堆栈及综合寄存器文件保持不下其全部内容时,如下所述,操作数堆栈下部的内容溢出(Spill)。到数据缓冲器中。
各指针堆栈构成为循环型的缓冲器,分别存在称为压入指针和底部指针两个寄存器。压入指针表示保持综合寄存器文件入口地址最高位入口的上面1个。底部指针表示保持综合寄存器文件入口地址最低位的入口。从底部指针的值减去压入指针的值,就可知道在指针堆栈中有几个入口是空的。在初始状态,压入指针及底部指针的各值均为0。
第2图是表示本实施例的计算机系统中各指针堆栈和各压入指针及底部指针关系的说明图。2个指针堆栈APS3及CPS4具有相同数量的入口,由各指针堆栈在各个入口上,自下而上顺序加0、1、2、……地址。竖线所表示的入口保持着综合寄存器文件入口地址。如图2所示,压入指针对APS及CPS分别设置,分别加有PP_OF_APS及PP_OF_CPS的名称。另一方面。底部指针只有1个,在APS及CPS上共用。对其加有BP_OF_PS的名称。
在APS及CPS之间设置有入口数比较电路,在APS及CPS的相同入口地址(在第2图中水平排列)的入口之间对其内容进行比较。
在指令的解码发行时,对应于指令所规定的操作数堆栈的1字量压入操作,将所分配的综合寄存器文件1个入口的地址,写入到由APS的PP_OF_APS所表示的入口中,在PP_OF_APS的值上加1。反之,对应于指令所规定的操作数堆栈的1字量的弹出操作,从PP_OF_APS的值中减1。对于指令结束时的CPS和PP_OF_CPS的操作也同样。
由BP_OF_PS所表示的入口内容当在APS和CPS中一致时,可以将由该一致的内容所表示的综合寄存器文件的入口上所写入的1字量的数据,溢出到数据缓冲器中。这时,在BP_OF_PS的值上加1。反之,从数据缓冲器向综合寄存器文件装填1字量的数据时,从数据缓冲器取出应装填的1字量的数据,对其分配空着的综合寄存器文件的1个入口,写入该数据,将该综合寄存器文件的入口地址分别写入由APS及CPS的BP_OF_PS所表示的入口下面1个中,从BP_OF_PS的值中减1。
本实施例的计算机系统为了可以根据分支预测进行随机性执行,而具有前进指针堆栈历史文件(以下称“APS历史文件”)。在APS历史文件的各个入口上,可写入APS的全部入口及PP_OF_APS的内容。
(D)综合寄存器文件(CRFConsolidatedResisterFile)综合寄存器文件(以下称CRF)对现有的堆栈机器上的操作数堆栈的内容按不同顺序进行保持。
第3图是表示本实施例的计算机系统中CRF6的各个入口6(i)详细构成的说明图。此处i是入口地址。CRF6的各入口6(i)由数据字段62(i)、写入结束标志(WCF,WriteCompletionFlag)字段62(i)、颜色(C、Colour)字段63(i)及正在执行位(BB)字段64(i)构成。
实际的CRF在硬件上的构成是按上述各字段不同而设置的寄存器文件集合体。
CRF各入口的数据字段由写入1字量的数据构成。
在CRF各入口中,WFC字段在数据字段中如数据写入结束则写入1,如果未结束则写入0。
在CRF的各入口中,C字段用于区别CRF的入口是对应于指令中所包含的压入操作而分配的,还是从数据缓冲器装填时而分配的,当是前者时还要写入分支标记。在本实施例中如下所述,分支标记与APS历史文件的入口地址具有一定关系。
在CRF各入口中,BB字段当该CRF各入口是应保持数据所分配的状态时则写入1。而当是未分配(空着)的状态时,则写入0。
(E)独立表(FL)独立表(以下称FL)是独立的,即保持空着/未分配的(BB字段为0)CRF的入口地址,在本实施例中由循环型的FIFO排列构成。
在初始状态,在FL中登录CPF的全部入口地址。当需要分配空着的CRF入口时,从FL取出独立的CRF入口地址。反之,如果解除CRF的某入口的分配,则该入口地址登录在FL中。
(F)指令缓冲器(IBInstuctionBuffer)指令缓冲器(以下称IB)是保持未结束的发行过的指令的缓冲器,由循环型的FIFO排列构成。
第4图是表示IB构成的说明图。在第4图中,IB5的各入口自下而上顺序加有0、1、2……地址,竖线施行的IB5入口保持有未结束的发行过的指令。IB具有名称为头指针和尾指针两个寄存器。头指针表示排列的头部入口,尾指针表示排列末尾入口的后面1个。如果1个循环只用1个指令进行发行/结束,则尾指针表示应写入下次所发行的指令内容的入口,头指针表示写入下次应结束的指令内容的入口。通过从头指针的值减去尾指针的值,就可知道在IB中有几个入口空着。在初试状态,头指针及尾指针的值均为0。
第5图是表示本实施例的计算机系统中的IB5的各入口5(i)的详细构成的说明图。此处i是入口地址。IB5的各入口5(i)由操作数字段50(i)、操作数字段51(i)、第1源字段52(i)、第2源字段53(i)、第3源字段54(i)、第4源字段55(i)、第1目标字段56(i)、第2目标字段57(i)、分支标记(BT)字段58(i)、及执行状态(SState)字段59(i)构成。
IB的各个入口的操作字段由写入操作码构成。
当在操作码之后是表示操作数的指令时,IB的各入口的操作数字段、写入该操作数。
IB的各入口的第1~第4源字段中,写入应保持源数据所分配的CRF入口地址。在包括弹出操作的指令被解码时,从APS中所弹出的与应弹出字数相同数量的CRF入口地址,按其顺序写入第1~第4源字段中。
IB的各入口的第1~第2目标字段,随着指令的解码发行,写入新分配的CRF入口地址。在包括压入操作的指令被解码时,在APS中所压入的与压入字数相同数量的CRF入口地址,按其顺序写入第1~第2目标字段中。
IB的各入口的BT字段涉及到根据分支预测的随机性执行,在本实施例中,如下所述,写入BT字段中的分支标记与APS历史文件的入口地址有一定关系。
在IB的各入口上,S字段根据该入口中写入的指令执行状态,写入未执行、执行完、正常结束、例外事件发生等信息。
(G)共用数据总线(CDBCommon Data Bus)共用数据总线(以下简称CDB)是在下述的功能单元群及CRF之间使数据与CRF的入口地址一起分配的通信通道。CDB为了能够确保足够的数据通信频带宽度而进行了多路化。
(H)功能单元本实施例的计算机系统具有运算单元0及1、分支单元及装入/存储单元4个功能单元。在本实施例中,各功能单元基本上由2个保留站和对所分配的指令进行处理的执行部构成。保留站(以下称RS)是暂时保持指令内容的缓冲器,在本实施例的计算机系统中,在指令解码时也写入有相同指令内容的IB入口地址。
在指令解码时,根据指令种类不同,必要时在适当的功能单元空着的RS中可进行写入。
在各功能单元的各个RS中,将应保持此处所写入的源数据的CRF入口地址与由CDB送来的地址进行比较,如果一致则取入数据。
在保持指令内容的RS中,如果必要的源数据齐备,功能单元的执行部可以利用,则该RS的内容转到执行部,开始该执行。
(H-1)运算单元本实施例的计算机系统具有运算单元0及1、该各执行部具有执行算术逻辑运算、数据类型的变换运算、比较运算等运算指令的功能,可以相互独立并行动作。
在本发明的计算机系统中,也可以构成为使各个运算单元执行部管道化,或具有更多的运算单元,确定每个运算单元执行的运算种类。
(H-2)分支单元分支单元执行部具有对条件分支指令进行处理,确定有无分支,与分支目的地址一起通知给指令取出单元的功能。
(H-3)装入/存储单元(LSULoad/Store Unit)及数据缓冲器装入/存储单元(以下简称LSU)的执行部具有进行地址计算的功能,可以对数据缓冲器及数据高速缓冲存储器进行存取。
数据缓冲器是在各个入口中写入1字数据的循环型缓冲器。在本发明的计算机系统中,通过指针堆栈和CRF保持字堆栈最高位部分的内容,其下面的部分存放在数据缓冲器中,再下面的部分存放在数据高速缓冲存储器中。由于LSU可以对数据缓冲器进行高速存取,所以将应存取的变量数据保持在数据缓冲器中的比例越大,越可以更有效计算。另外,通过在数据缓冲器中积累适当字数的数据,可以有效进行下述的CRF—数据缓冲器—数据高速缓冲存储器间的Spill/Fill(溢出/填入)操作。
LSU具有保持向最初局部变量的指针的图中未画出的寄存器(vars寄存器)。在本实施例的计算机系统中,最初的局部变量的存放区域在数据缓冲器或数据高速缓冲存储器中,但是在vars寄存器中写入相当于数据高速缓冲存储器中的地址值。即全部或一部分的局部变量数据实际上即使保持在数据缓冲器中,也可以在各个局部变量上,对应即使假定所有局部变量都溢出到数据高速缓冲存储器中时的数据高速缓冲存储器上的地址值,所以在装入/存储指令的处理中。LSU利用vars寄存器的值进行地址计算,判断对象局部变量的存放区域是数据缓冲器,还是数据高速缓冲存储器,对该存放区域进行存取。
LSU具有在先行指令全部结束之前,按程序上的顺序保持存储指令的图中未画出的存储缓冲器。即,存储指令在全部先行指令结束之后执行。存储缓冲器具有联想功能,LSU可以对先行存储指令进行依赖性验证,由out_of_order执行装入命令。
即,当装入地址与先行地址指令的存储地址一致、或者先行存储指令的存储地址未计算时(这时由于不能验证依赖关系,所以看成存在依赖关系),该装入指令对先行存储指令具有依赖关系。当完全不存在依赖关系时,从数据缓冲器/数据高速缓冲存储器立即装入数据。当装入指令对先行指令有依赖关系时,由于数据缓冲器/数据高速缓冲存储器不具有正确的值,所以从数据缓冲器/数据高速缓冲存储器不能装入数据。如果装入地址和先行存储指令的存储地址一致、且存储数据有效时,则不等该装入指令结束,就从存储缓冲器直接装入数据。
LSU在执行程序中所表示的装入/存储指令的同时,为了避免上溢出/下溢出、或者随着方法的调出/从方法的恢复,在字堆栈的最高位对应于帧生成/废弃,在CRF和数据缓冲器之间对数据自动进行Spill/Fill(溢出/装填)。(顺便说明的是在方法的调出时,在变更vars寄存器值的同时,最好也并用从堆栈头得到的存储指令。)在使1字量的数据从CRF溢出到数据缓冲器时,由APS和CPS保持(用BP_OF_PS表示)CRF入口地址的最低位入口内容必须一致(否则要等待到一致)。这时,可以将由该一致的内容所表示的CRF入口中所写入的1字量数据溢出到数据缓冲器中。此时在BP_OF_PS的值上加1,将上述的CRF入口的BB字段变更为0,在FL上登录该入口的地址。
反之,从数据缓冲器向CRF装填(Fill)1字量的数据时,从数据缓冲器取出应装填的1字量的数据,对其分配空着的CRF的1个入口,写入该数据字段中。WCF、BB的各字段为1。还将其所分配的CRF入口地址写入保持APS及CPS的(用BP_OF_PS表示)CRF入口地址的最低位入口下面1个中,从BP_OF_PS的值中减1。
在数据缓冲器和数据高速缓冲存储器之间也可根据数据缓冲器的空闲情况进行适当的Spill/Fill操作。
在CRF—数据缓冲器——数据高速缓冲存储器之间为了一次可以对多数字的数据进行Spill/Fill,只要对APS和CPS2个指针堆栈、数据缓冲器及数据高速缓冲存储器进行交叉分割,在对应的分割部分之间进行上述同样的操作即可。这时,为了进行溢出/装填,在APS和CPS 2个的指针堆栈、数据缓冲器及数据高速缓冲存储器中,每个存储单元需要一个读/写(read/write)口。在CRF上需要交叉分割数量的读/写口。
下面说明本发明的实施例的计算机系统的操作。
本实施例的计算机系统按①指令取出、②指令解码发行、③执行、④结束4个步骤对指令进行处理。在此为了说明简单,下面以1个循环中可使1个指令进行解码·发行/结束为例,说明各步骤的操作内容。
①指令取出步骤在该步骤上,指令取出单元从指令高速缓冲存储器取出指令,并且决定下次取出的指令地址。下个取出指令通常是从下个地址值中得到,但是当判断取出的指令是无条件分支指令、或由条件分支指令进行分支时、分支预测偏离时、或者发生例外时,变更取出的地址值。
②指令解码·发行步骤在该步骤对指令进行解码,根据指令的内容操作前进指针堆栈(APS)及综合寄存器文件(CRF),并且通过将指令的内容写入指令缓冲器(IB)、及必要时写入适当功能单元空着的RS中,设定应由out_of_order执行程序中所包含的指令。下面详细说明设定操作。
在本发明的计算机系统中,现有的堆栈机器的字堆栈的堆栈头附近的内容可通过指针堆栈和CRF再现,但是对于指令所规定的操作数堆栈的堆栈操作,对APS也同样适用。此处,对1字数据向操作数堆栈的压入操作进行仿真时,只要分配保持该数据的空着的CRF 1个入口,将该入口地址压入APS即可。
即,在解码的指令中,当规定了对操作数堆栈的弹出操作时,从APS弹出与应弹出字数相同数量的CRF入口地址。在被解码的指令中,当规定了对操作数堆栈的压入操作时,分配与应压入字数相同数量的空着的CRF入口,将上述分配的CRF入口地址压入APS中。
操作数堆栈的操作指令(Java VM中的pop、pop2、dup、dup2、dup_x1、dup2_x1、dup_x2、dup2_x2、swap)时,基本上与对操作数堆栈应进行的操作同样对APS操作即可。在本实施例中,当在堆栈上作成拷贝的操作数堆栈的操作指令(Java VM中的dup、dup2、dup_x1、dup2_x1、dup_x2、dup2_x2)时,分配应保持拷贝数据的空着的CRF入口,将该入口地址写入APS的适当入口中。
在随着指令的解码·发行而新分配的CRF入口中,BB字段上置1,在C字段上写入从指令解码·发行单元传来的分支标记。当是立即数的压入指令时,由于数据已经得到,所以在数据字段中写入该数据,在WCF字段上置1。除此之外的情况,由于数据在解码·发行的时刻没有得到,所以WCF字段为0。
由于按程序上的顺序将被解码的指令内容保持在IB中,所以将该指令的内容写入由IB的尾指针所示的入口中,在尾指针的值上加1。即在操作字段中写入操作码,当在操作码之后是由操作数所示的指令时,在操作数字段上写入该操作数。在BT字段上写入从指令解码·发行单元传来的分支标记。关于S字段,当是无条件分支指令、发向立即数据的操作数堆栈的压入指令、或在堆栈上未作成拷贝的操作数堆栈的操作指令(Java Vm中pop、pop2、swap)时,则为已执行完,而其他指令时,则为未执行。
在包含弹出操作的指令时,将从APS中弹出与应弹出的字数相同的数量的CRF入口地址,按其顺序写入第1~第4源字段中。在包含压入操作的指令时,将在APS中压入与应压入的字数相同的数量的CPF入口地址按其顺序写入第1~第2目标字段中。
在本实施例中,在堆栈上作成拷贝的操作数堆栈的操作指令时,在一定对应关系的基础上,将应保持拷贝源的数据所分配的CRF入口地址写入源字段,而将应保持拷贝数据而新分配的CRF入口地址写入目标字段。
由于根据指令种类不同,对操作数堆栈应弹出/压入的字数(在操作数堆栈的操作指令时,作成的拷贝字数)是确定的,所以根据操作字段的内容不同,可以知道第1~第4源字段及第1~第2目标字段中的哪一个是有效的。
在将指令的内容写入IB的同时,根据指令种类不同,必要时在适当功能单元空着的RS中,也一起写入进行写入的IB入口地址(此处,由于每一循环只发行1个指令,所以与尾指针的值一致)。此处没必要向RS写入的是立即数据向操作数堆栈的压入指令、在堆栈上不作成拷贝的操作数堆栈的操作指令及无条件分支指令的情况。在本实施例中,在堆栈上作成拷贝的操作数堆栈的操作指令时,将其内容写入运算单元空着的RS中。
读出在IB的源字段中写入入口地址(从APS弹出的)的CRF入口的各个WCT字段及数据字段,当WCF为1时,在下一循环以后,入口地址和数据装入CDB中。
③执行步骤关于写入到指令解码·发行步骤上的RS中的指令,原则上依次进行以下的操作。
在各RS上,对于应保持写入此处的源数据的CRF入口地址,与通过CDB传送来的地址进行比较,如果一致则取入数据,在本实施例中,按与RS中写入指令内容相同的时刻通过CDB传送来的数据也取入该RS中。
如果需要的源数据齐全、可以利用功能单元的执行部,则该RS的内容转到执行部,开始执行。在该时刻,解除保持该RS上的该指令。
当解码时在IB的目标字段上只进行写入(在APS上压入CRF的入口地址)的指令时,将指令执行结果所得到的数据与目标的CRF入口地址一起装入CDB中。在CRF中,根据通过CDB传送来的内容,进行数据的写入,将WCF字段变更为1。
如果以上的操作全部正常结束,则使该RS中写入的入口地址上的(保持该指令)IB入口的S字段变更为正常结束。
以上是对大部分指令的原则性的操作,但是在本实施例的计算机系统中,根据指令的种类不同可进行以下的例外操作。
在LSU的RS中,将操作数堆栈上的数据弹出,写入进行地址计算的存储指令(Java Vm中的iastore、lastore、fastore、dastore、aastore、bastore、castore、sastore)时,即使源数据并不齐全,也可在地址计算中所需要的源数据齐备的时刻,计算存储地址,写入存储缓冲器中。
在LSU的RS中,已写入存储指令时,如果存储地址和存储数据向存储缓冲器写入都结束。则在该RS中写入的入口地址上的(保持该存储指令)IB入口的S字段变更为可执行存储。如上所述,实际存储的执行在结束步骤上进行。
在运算单元1的RS中,在堆栈上写入作成拷贝的操作数堆栈的操作指令时,当写入源数据时,使该数据作为目标,与在一定对应关系的基础写入的CRF入口地址一起装入CDB中。如果与各目标相关的数据传输全部正常结束,则使在该RS中已写入的入口地址上的(保持该指令)IB的入口的S字段变更为正常结束。
如上所述,由于IB中所保持的未执行的指令,是根据数据驱动原理,从可以执行的开始处理,所以指令执行顺序变为out_of_order。另外,运算单元0/1、分支单元及装入/存储单元的各功能单元相互独立并行进行操作。
在某指令的处理中,在发生例外事件时,与在保持该指令的IB的入口的S字段中写入该信息的同时,通知给指令取出单元。
④结束步骤某个指令为了能够结束,必须按程序上的顺序,该指令前的指令全部结束。
在由IB的头指针所示的入口上,当S字段是或将是执行完/正常结束时,根据在该入口中写入的指令内容,操作CPS及CRF,在头指针的值上加1。
CPS应再现操作对指令解码·发行时的APS动作。即,在包含弹出/压入操作的指令时,从CPS弹出与有效的源字段内容相同的内容,将有效的目标字段的内容顺序压入CPS中。当是在堆栈上未作成拷贝的操作数堆栈的操作指令时,只要使对操作数堆栈应进行的操作,也对CPS完全同样地进行即可。本实施例中,当是在堆栈上作成拷贝的操作数堆栈的操作指令时,参照有效的源字段及有效的目标字段,在CPS上再现在该指令解码·发行时对APS进行的操作。
在本实施例中,伴随对上述的CPS的操作,入口地址从CPS弹出的CRF的入口上,使BB字段变更为0,在FL上登录该入口地址。
在由IB的头指针所示的入口上,写入存储指令时,当S字段可以或已经存储时,请求LSU进行实际的存储。这样,可以保证数据按程序上的顺序进行存储。与上述同样进行对CPS及CRF的操作,在头指针的值上加1。
如上所述,通过在头指针的值上加1,在从排列中除掉的IB入口上所保持的指令变为结束。由于在该指令前面发行的指令已全部结束,所以指令结束按顺序(in_order)执行。
在由IB的头指针所示的入口上,S字段发生或已经发生例外事件时,由于通过该时刻的CPS及CRF,构成由in_order执行程序时的例外事件时刻的状态,所以可以进行正确的例外处理。当使例外事件发生的指令以后所发行的指令全部删除时,对于写入应被删除指令的IB入口的有效目标字段上所示的CRF的各入口,使该BB字段返回0,通过在FL上登录该入口地址,解除分配,通过将头指针的值加1的内容写入尾指针,只要全部从排列中除去保持应删除的指令的IB入口即可。
以上是本发明实施例的计算机系统的全体操作。
下面对具体的操作例进行说明。在本实施例的计算机系统中考虑执行以下的程序。
Dload[A](对应于变量名[A]的双倍精度浮动小数点数据的装入)Dload[B](对应于变量名[B]的双倍精度浮动小数点数据的装入)Dadd(双倍精度浮动小数点数据间相加)d2f(双倍精度浮动小数点数据向单精度小数点数据的变换)fload[T](对应于变量名[T]的单精度浮动小数点数据的装入)swap(变更堆栈上最高位的2字)dup_x1(作成堆栈头部的字拷贝,填入从前头数的第3字上)fsub(单精度浮动小数点数据间相减)fdiv(单精度浮动小数点数据间相除)fstore[T](向对应于堆栈头部的单精度小数点数据的变量名[x]的存放区域进行存储)以上的程序进行X=(A+B)/(T-(A+B))的计算,A和B数据由双倍精度给出,按双倍精度直接执行二者间的相加,将所得到的相加数据变换为单精度,以后按单精度进行计算。
第6图~第14图是在本实施例的计算机系统中,按每个循环表示处理上述程序时动作的说明图,下面以该图为基础说明其详细操作。在第6图~第14图中,CRF6及IB5的各入口构成分别与第3图、第5图相同。在第6图~第14图中空白的地方表示不必留意该字段的内容。为了用时间顺序表示各构成单元的内容,在各部分标号的末尾加有连字符及对应于各循环的数字。另外,在第6图~第14图中APS、CPS、IB及CRF的各入口自下而上顺序加有0、1、2、~的地址。
CDB由3条总线构成。等待时间在2个循环以下的运算指令由运算单元0执行,而除此之外的运算指令由运算单元1执行。
在本操作例中,为了说明简单起见,变量数据全部保持在数据缓冲器中,在CRF和数据缓冲器之间不进行Spill/Fill操作。从而BP_OF_PS的值始终为0。
另外,在本操作例中,当初,APS、CPS、IB及CRF被初试化,在FL中CRF的全部入口地址顺序写入<0>、<1>、<2>、<3>……,按该顺序取出。
(1-A)第1周期的指令译码/发行阶段进行指令dload[A]的译码/发行。由于是对双倍字变量数据的操作数堆栈的装载指令,因此,对记录在FL的自由的CRF的2个入口6(0)、6(1)进行分配,使得其保持数据,其入口地址
、[1]压入APS,使APS就成为3-1。
在CRF的6(0),6(1)各个入口中,给BB字段设置1,WCF及C的各个字段则写入0,CRF就成为6-1。在这里,在本动作例中,作为分支标记,始终从指令译码/发行单元传送来的是0。
尾指针的值是1,因此,在IB的入口5(0)上写入上述指令内容,IB就成为5-1。此时,将压入APS的CRF入口地址
,[1]分别写入第1、第2目标字段里。而且,尾指针的值加上1。在这里,在本动作例中,在IB的S字段中,如果指令未运行,就写入0,如果运行结束/正常终了或者存储指令的存储运行是可能的,就写入1。
将与写入IB入口5(0)的内容相同的上述指令内容,连同IB的入口地址0,写入LSU空着的RS831里。
(1-B)第1周期的运行阶段作为运行阶段的动作,什么也不进行。
(1-C)第1周期的完成阶段在当初IB头指针所示的入口5(0)中,由于指令还没有被写入,因此,作为完成阶段的动作,什么也不进行。
(2-A)第2周期的指令译码/发行阶段进行指令dload[B]的译码/发行。由于是对双倍字变量数据的操作数堆栈的装载指令,因此,对记录在FL的自由的CRF2个入口6(2)、6(3)进行分配,使其保持数据,将其入口地址[2],[3]压入APS,使APS成为3-2。
在CRF的6(2),6(3)各个入口中,给BB字段设置1,WCF及C的各个字段则写入0,CRF就成为6-2。
尾指针的值是1,因此,在IB的入口5(1)上写入上述指令内容,IB就成为5-2。此时,将压入APS的CRF入口地址[2],[3]写入第1、第2目标字段里。而且,尾指针的值加上1,成为2。
将与写入IB入口5(1)的内容相同的上述指令内容,连同IB的入口地址1,写入LSU空着的RS832里。
(2-B)第2周期的运行阶段LSU的运行部,运行从RS831传递过来的装载指令。也就是说,存取数据缓冲器,读出变量A的双字数据。
(2-C)第2周期的完成阶段处于5-1状态的IB头指针所示的入口5(0)中,S字段是0,因此作为完成阶段的动作,什么也不进行。
(3-A)第3周期的指令译码/发行阶段进行指令dadd的译码发行。由于是从操作数堆栈弹出4字源数据进行运算,压入双倍字运算结果的运算指令,因此,从APS弹出
,[1],[2],[3],对记录在FL的自由的CRF2个入口6(4)、6(5)进行分配,使其保持运算结果,将入口地址[4],[5]压入APS,使APS成为3-3。
在CRF的6(4)、6(5)的各个入口中,给BB字段设置1,WCF及C的各个字段则写入0。
尾指针的值是2,因此向IB入口5(2)写入上述指令内容。此时,将从APS弹出的CRF入口地址
,[1],[2],[3]分别写入第1~第4源字段里,而将压入APS的[4]、[5]分别写入第1、第2目标字段里。而且给尾指针的值加上1,成为3。
将与写入IB入口5(2)的内容相同的上述指令内容,连同IB的入口地址2,写入运算单元0空着的RS801里。(设dadd的运算反应时间是2个周期)。
而且处于6-2状态的CRF6(0)、6(1)、6(2)、6(3)的各个入口WCF字段及数据字段被读出,这种情况下,任何入口WCF都是0,不需要传送数据。
(3-B)第3周期的运行阶段LSU将从数据缓冲器读出的、构成变量A数据的双字A_1、A_2,连同他们的各自目标CRF入口地址
、[1]一块放在CDB上。根据这些,在CRF中,对入口6(0)、6(1)进行数据写入,将WCF字段变更为1。而且,在相同时段里,写有与IB入口5(2)写入内容相同的运算单元0的RS801中,也进行对应CRF入口地址
、[1]的数据写入。
以上,写在IB入口5(0)的指令的运行正常结束,因此,在下一个周期中,5(0)的S字段变更为意味着正常结束的1。
与上述动作并行,LSU的运行部运行从RS832传递过来的装载指令。也就是说,存取数据缓冲器,读出变量B的双字数据。
(3-C)第3周期的完成阶段处于5-2状态的IB头指针所示的入口5(0)中,S字段是0,因此,作为完成阶段的动作,什么也不进行。
(4-A)第4周期的指令译码/发行阶段进行指令d2f的译码发行。由于是从操作数堆栈弹出2字源数据,进行变换运算,压入1条运算结果的运算指令,因此,从APS弹出[4]、[5],分配记录在FL的自由的CRF入口6(6)时,应使其保持运算结果,将入口地址[6]压入APS,APS就成为3-4。
在CRF入口6(6)中,给BB字段设置1,WCF及C的各个字段则写入0。
尾指针的值是3,因此给上述IB出入口5(3)写入上述指令内容。此时,将从APS弹出的CRF入口地址[4]、[5]分别写入第1、第2源字段里,将压入APS的[6]写入第1目标字段里。而且给尾指针的值加上1成为4。
将与IB入口5(3)写入的内容相同的上述指令内容,连同IB的入口地址3,写入运算单元0空着的RS802里(d2f的运算反应时间是2个周期)。
而且,读出处于6-3状态的CRF6(4)、6(5)的各个入口WCF字段以及数据字段,此时任何入口,WCF都是0,不需要传送数据。
(4-B)第4周期的运行阶段LSU,将从数据缓冲器读出的,构成变量B数据的2字B_1、B_2,连同他们的各自目标CRF入口地址[2]、[3]一块放在CDB上。根据这些,在CRF中,对入口6(2)、6(3)进行数据写入,将WCF字段变更为1。又,写有与IB入口5(2)写入内容相同的运算单元0的RS801中,也进行对应CRF入口地址
、[1]的数据写入,而且,在运算单元0的RS801中,也进行对应CRF入口地址[2]、[3]的数据写入。
以上,写在IB入口5(1)的指令的运行正常结束,因此在下一个周期中,5(1)的S字段变更为意味着正常结束的1。
(4-C)第4周期的完成阶段处于5-3状态的IB头指针所示的入口5(0)中,S字段是0,因此作为完成阶段的动作,什么也不进行。
(5-A)第5周期的指令译码/发行阶段进行指令fload[T]的译码发行。是对1字变量数据的操作数堆的装载指令,因此,分配记录在FL的自由的CRF入口6(7)时,应使其保持数据,将入口地址[7]压入APS,APS就成为3-5。
在CRF入口6(7)中,给BB字段设置1,WCF及C的各个字段则写入0。
尾指针的值是4,给上述IB入口5(4)写入上述指令内容。此时,将压入APS的CRF入口地址[7]写入第1目标字段里。而且给尾指针的值加上1成为5。
将与IB入口5(4)写入的内容相同的上述指令内容,连同IB的入口地址4,写入LSU空着的RS831里。
(5-B)第5周期的运行阶段在写着运算指令dadd内容的RS801中,由于需要的源数据全部齐全,因此,其内容传递给运算单元0的运行部,开始运算。
(5-C)第5周期的完成阶段处于5-4状态的IB头指针所示的入口5(0)中,S字段成为1,因此,根据5(0)的内容操作CPS(以及CRF)。也就是说,将写在IB入口5(0)目标字段的
、[1],压入CPS,CPS成为4-5。而且,给头指针加上1,使其成为1,到此,5(0)的指令完成。
(6-A)第6周期的指令译码/发行阶段进行指令swap的译码发行。是替换操作数堆栈上最高位2字的指令,因此,对APS进行同样的操作,APS就成为3-6。
尾指针的值是5,给IB入口5(5)写入上述指令的内容。此时,指令swap是在堆栈上不必进行拷贝的操作数堆栈的操作指令,因此,S字段成为意味着运行结束的1。而且给尾指针的值加上1成为6。
(6-B)第6周期的运行阶段LSU的运行部,运行从RS831传递过来的装载指令。也就是说,存取数据缓冲器,读出变量T的数据。
(6-C)第6周期的完成阶段处于5-5状态的IB头指针所示的入口5(1)中,S字段成为1,因此,根据5(1)的内容,操作CPS(及CRF)。也就是说,将写在IB入口5(1)的目标字段里的[2]、[3],压入CPS,CPS就成为4-6。而且,给头指针的值加上1,成为2,到此,5(1)的指令完成。
(7-A)第7周期的指令译码/发行阶段进行指令dup_x1的译码发行。指令dup_x1是,当字堆栈(作为向右方向的伸展)是…,字1,字2等状态时,在将这些转换为…字2,字1,字2的堆栈上,完成1条拷贝的操作数堆栈的操作指令,因此,分配记录在FL的自由的CRF入口6(8)时,应使其保持拷贝数据,如3-6,从下方,将处于[7]、[6]状态的APS改为如3-7所示的[8]、[7]、[6]。
在CRF入口6(8)中,给BB字段设置1,WCF及C的各个字段则写入0。
尾指针的值是6,给IB入口5(6)写入上述指令的内容。此时,将分配的应保持拷贝原件数据的CRF入口地址[6],写入第1源字段,将重新分配的应保持拷贝数据的CRF入口地址[8]写入第1目标字段。而且给尾指针的值加上1成为7。
将与IB入口5(6)写入内容相同的上述指令内容,连同IB的入口地址6,写入运算单元空着的RS811里。
而且,读出处于6-6状态的CRF入口6(6)的WCF字段及数据字段,此时,WCF是0,不需要传送数据。
(7-B)第7周期的运行阶段运算单元0则终止5(2)运算指令的运行,将构成运算结果的2字(A+B)1、(A+B)2,连同他们的各自目标CRF入口地址[4]、[5],一块放在CDB上。据此,在CRF中,对入口6(4)、6(5)进行数据写入,将WCF字段改为1。而且写有和IB入口5(3)写入的内容相同的运算单元0的RS802中,也进行对应CRF入口地址[4]、[5]的数据写入。
LSU,将从数据缓冲器读出的变量T的数据,连同目标CRF的入口地址[7],一块放在CDB上。据此,在CRF中,对入口6(7)进行数据写入,将WCF字段变更为1。
以上,写在IB5(2)、5(4)各个入口的指令的运行正常结束,因此在下一个周期中,5(2)、5(4)的S字段变更为意味着正常结束的1。
(7-C)第7周期的完成阶段处于5-6状态的IB头指针所示的入口5(2)中,S字段是0,因此,作为完成阶段的动作,什么也不进行。
(8-A)第8周期的指令译码/发行阶段进行指令fsub的译码发行。由于是从操作数堆栈弹出2字源数据,进行运算,压入1条运算结果的运算指令,因此,从APS弹出[7]、[6],分配记录在FL的自由的CRF入口6(9)时,应使其保持运算结果,将其入口地址[9]压入APS,APS如3-8所示。
在CRF入口6(9)中,给BB字段设置1,WCF及C的各个字段则写入0。
尾指针的值是7,给IB入口5(7)写入上述指令的内容。此时,APS弹出的CRF入口地址[7]、[6]分别写入第1、第2源字段,压入APS的[9]则写入第1目标字段。
把与IB入口5(7)写入内容相同的上述指令内容,连同IB入口地址7,写入运算单元空着的RS801里(fsub的运算反应时间是2个周期)。
而且,处于6-7状态的CRF入口6(7)、6(6)的各个入口WCF字段及数据字段被读出,此时,6(7)的WCF是1,因此在下一个周期中,入口地址[7]和数据T将被放到CDB上。
(8-B)第8周期的运行阶段在写着d2f内容的RS802中,由于需要的源数据全部齐全,因此,其内容传递给运算单元0的运行部,开始运算。
(8-C)第8周期的完成阶段处于5-7状态的IB头指针所示的入口5(2)中,S字段是0,因此,作为完成阶段的动作,什么也不进行。
(9-A)第9周期的指令译码/发行阶段进行指令fdiv的译码发行。由于是从操作数堆栈弹出2字源数据,进行运算,压入1条运算结果的运算指令,因此,从APS弹出[8]、[9],分配记录在FL的自由的CRF入口6(10)时,应使其保持运算结果,将其入口地址[9]压入APS,APS就成为3-9。
在CRF入口6(10)中,给BB字段设置1,WCF及C的各个字段则写入0。
尾指针的值是8,给IB入口5(8)写入上述指令的内容。此时,把从APS弹出的CRF入口地址[8]、[9]分别写入第1、第2源字段,把压入APS的[10]写入第1目标字段里。而且给尾指针的值加上1成为9。
把与IB入口5(8)写入内容相同的上述指令内容,连同IB的入口地址8,写入运算单元空着的RS812里(fdiv的运算反应时间是10个周期)。
而且,处于6-8状态的CRF6(8)、6(9)的各个入口的WCF字段及数据字段被读出,此时,任何入口WCF都是1,因此不需要传送数据。
(9-B)第9周期的运行阶段如(8-A)所述,入口地址[7]和数据T放在CDB上,据此,在写着和IB入口5(7)写入内容相同的运算单元0的RS801中,也进行对应CRF入口地址[7]的数据写入。
(9-C)第9周期的完成阶段处于5-8状态的IB头指针所示的入口5(2)中,S字段成为1,因此,根据5(2)的内容,操作CPS及CRF。也就是说,从CPS弹出,写入IB入口5(2)源字段里的
、[1]、[2]、[3],把写入目标字段里的[4]、[5]压入CPS,CPS就成为4-9。在入口地址CPS弹出的CRF6(0)、6(1)、6(2)、6(3)的各个入口里,把BB字段变更为0。把CRF入口地址
、[1]、[2]、[3]记录在FL上。而且,给头指针的值加上1成为3,到此,5(2)指令完成。
(10-A)第10个周期的指令译码/发行阶段进行指令fstore[X]的译码/发行。是处于栈顶的1条数据存储指令,从APS弹出[10],APS就成为3-10。
尾指针的值是9,给IB入口5(9)写入上述指令的内容。此时,把APS弹出的CRF入口地址[10]写在第1源字段里。而且给尾指针的值加上1成为10。
把与IB入口5(9)写入内容相同的上述指令内容,连同IB的入口地址9,写入LSU空着的RS831里。在下一个周期中,对存储缓冲器写入对应变量[X]的存储地址。
而且,处于6-9状态的CRF入口6(10)的WCF字段及数据字段被读出,此时,WCF是0,不需要传送数据。
(10-B)第10周期的运行阶段运算单元0,结束5(3)的变换运算指令的运行,将1条运算结果(A+B),连同目标CRF入口地址[6],放在CDB上。据此,在CRF中,对入口6(6)进行数据写入,把WCF字段变更为1。而且,写入内容和IB入口5(6)、5(7)写入内容分别相同的运算单元1的RS831及运算单元0的RS801上,进行对应CRF入口地址[6]的数据写入。
以上,写在IB入口5(3)的指令的运行正常结束,因此,在下一个周期中,5(3)的S字段变更为意味着正常结束的1。
(10-C)第10周期的完成阶段处于5-9状态的IB头指针所示的入口5(3)中,S字段是0,作为完成阶段的动作,什么也不进行。
下面,如果没有应特别记述的动作内容,省去运行阶段和完成阶段项目。
(11-B)第11周期的运行阶段在写着运算指令fsub内容的RS801中,由于需要的源数据全部齐全,因此,其内容传递给运算单元0的运行部,开始运算。
写着在堆栈上完成拷贝等操作数堆栈的操作指令dup_x1内容的RS811中,由于写有源数据,因此将其数据(A+B),连同处于对应关系的目标CRF入口地址[8],一块放在CDB上。据此,在CRF中,对入口6(8)进行数据写入,把WCF字段变更为1。而且写有和IB入口5(8)写入内容相同的运算单元1的RS812中,也进行对应CRF入口地址[8]的数据写入。
以上,写在IB入口5(6)的指令的运行正常结束,因此,在下一个周期中,5(6)的S字段变更为意味着正常结束的1。
(12-C)第12周期的完成阶段处于5-11状态的IB头指针所示的入口5(3)中,S字段成为1,因此,根据5(3)的内容,操作CPS及CRF。也就是说,从CPS弹出写入IB入口5(3)源字段里的[4]、[5],把写在目标字段里的[6]压入CPS,CPS就成为4-12。在入口地址从CPS弹出的CRF6(4)、6(5)的各个入口里,把BB字段变更为0。把CRF入口地址[4]、[5]记录在FL上。而且,给头指针的值加上1成为4,到此,5(3)指令完成。
(13-B)第13周期的运行阶段运算单元0,结束5(7)运算指令的运行,把1条运算结果T-(A+B),连同目标CRF入口地址[9],放在CDB上。据此,在CRF中,对入口6(9)进行数据写入,把WCF字段变更为1。而且,写入内容和IB入口5(8)写入内容相同的运算单元1的RS812中,也进行对应CRF入口地址[9]的数据写入。
以上,写在IB入口5(7)的指令的运行正常结束,因此,在下一个周期中,5(7)的S字段变更为意味着正常结束的1。
(13-C)第13周期的完成阶段处于5-12状态的IB头指针所示的入口5(4)中,S字段是1,因此,根据5(4)的内容,操作CPS及CRF。也就是说,把写在IB入口5(4)目标字段里的[7]压入CPS,CPS就成为4-13。而且,给头指针的值加上1成为5,到此,5(4)指令完成。
(14-B)第14周期的运行阶段在写有运算指令fdiv内容的RS812中,由于需要的数据全部齐全,因此,其内容传递给运算单元1的运行部,开始运算。
(14-C)第14周期的完成阶段处于5-13状态的IB头指针所示的入口5(5)中,S字段是1,因此,根据5(5)的内容,操作CPS及CRF。也就是说,会再现(6-A)中有关APS的动作,CPS如4-14所示。而且,给头指针的值加上1成为6,到此,完成5(4)指令。
(15-C)第15周期的完成阶段处于5-14状态的IB头指针所示的入口5(6)中,S字段是1,因此,根据5(6)的内容,操作CPS及CRF。也就是说,会再现(7-A)有关的APS的动作,CPS就成为4-15。而且,给头指针的值加上1成为7,到此,5(6)指令完成。
(16-C)第16周期的完成阶段处于5-15状态的IB头指针所示的入口5(7)中,S字段是1,因此,根据5(7)的内容,操作CPS及CRF。也就是说,从CPS弹出,写在IB入口5(7)源字段里的[7]、[6],把写在目标字段里的[9]压入CPS,CPS就成为4-16。在入口地址从CPS弹出的CRF6(7)、6(6)的各个入口里,把BB字段变更为0。把CRF入口地址[7]、[6]记录在FL上。而且,给头指针的值加上1成为8,到此,5(7)指令完成。
(24-B)第24周期的运行阶段运算单元1,结束5(8)运算指令的运行,将1条运算结果(A+B)/{T-(A+B)},连同目标CRF入口地址[10],一块放在CDB上。据此,在CRF中,对入口6(10)进行数据写入,把WCF字段变更为1。而且,写入内容和IB入口5(9)写入的内容相同的LSU的RS831中,也进行对应CRF入口地址[10]的数据写入。
以上,写在IB入口5(8)的指令的运行正常结束,因此,在下一个周期中,5(8)的S字段变更为意味着正常结束的1。
(25-B)第25周期的运行阶段在写有存储指令fstore内容的RS831中,由于写入了存储数据,因此将其数据写入存储缓冲器里。
以上,对于写在IB入口5(9)的存储指令,由于向存储缓冲器写入存储地址和存储数据的动作同时结束,因此,在下一个周期中,5(9)的S字段变更为意味着存储运行可能的1。
(26-C)第26周期的完成阶段处于5-25状态的IB头指针所示的入口5(8)中,S字段成为1,因此,根据5(8)的内容,操作CPS及CRF。也就是说,从CPS弹出,写在IB入口5(8)源字段里的[8]、[9],把写在目标字段里的[10]压入CPS,CPS就成为4-26。在入口地址从CPS弹出的CRF6(8)、6(9)的各个入口里,把BB字段变更为0。把CRF入口地址[8]、[9]记录在FL上。而且,给头指针的值加上1成为9,到此,5(8)指令完成。
(27-C)第27周期的完成阶段处于5-26状态的IB头指针所示的入口5(9)中,写有存储指令,S字段成为1,因此,就对数据缓冲器的存储运行依赖LSU。而且根据5(9)的内容,操作CPS及CRF。也就是说,从CPS弹出,写在IB入口5(9)源字段里的[10],CPS就成为4-27。在入口地址从CPS弹出的CRF6(10)中,把BB字段变更为0。把CRF入口地址[10]记录在FL上。而且,给头指针的值加上1成为10,到此,5(9)指令完成。
以上,在本运行例所述的计算机系统中,完成X=(A+B)/{T-(A+B)}的计算。
在本发明所述的计算机系统中,可以实现依据分支预测的推测运行。APS的历史文件是为了使推测运行可能而准备的。每当条件分支指令被译码时,APS历史文件的1个入口就写入APS所有入口及PP_OF_APS的内容。以下,说明对于本运行例的计算机系统中,基于分支预测的推测运行是如何进行的。
如上所述,在本运行例的计算机系统中,在指令译码/发行阶段里,将指令译码,根据指令内容操作APS及CRF的同时,把指令内容写入IB,在需要的情况下,把指令内容写入适当的功能单元空着的RS里。从初始状态开始,指令就流动,一直到最初的条件分支指令被译码之前,给发行指令标上作为分支标记的0,把这个分支标记0,写入写有指令内容的IB入口(和功能单元的RS)BT字段里,以及写入分配好的CRF入口的C字段里。
当最初的条件分支指令被译码,进行分支预测时,为了保存分支时的状态,将APS的所有入口及PP_OF_APS的内容,写入APS历史文件地址0的入口里。在基于上述分支预测的指令流向里,作为分支标记标上1,进行IB(、功能单元的RS)及CRF的设置。
当第2个条件分支指令被译码时,如果最初的条件分支指令没有确定,或者已经确定并预测应验情况下,把APS的所有入口及PP_OF_APS的内容写入APS历史文件地址1的入口里。在基于上述第2段分支预测的指令流向中,作为分支标记标上2,进行IB(功能单元的RS)及CRF的设置。
如果分支预测继续应验,后面继续同样的处理,向APS历史文件里的写入工作,则按照地址顺序进行。而且,从向APS历史文件地址n的入口里的写入开始,到下次写入开始之间发行的指令,附上分支标记n+1。
分支预测没有应验时,把在这个条件分支指令以后发行的指令上标注的分支标记为依据,取消各个功能单元中正在运行的指令或者保持在RS的指令,在CRF中,在C字段里对比分支标记,解除其所有一致的入口分配(把BB字段变更为0,入口地址记录在FL上),在IB中,解除在其条件分支指令以后加入到队列的入口(把尾指针的值,写在写有其条件分支指令入口的下一个地址里)。而且,在处于相同入口/地址的CPS入口和其内容不一致的APS各个入口及PP_OF_APS里,拷贝其条件分支指令被译码时写在APS历史文件里的内容,从正确位置的指令,重新开始译码发行。
如上所述,在本发明所述的计算机系统中,随着使用APS历史文件,可以重构条件分支指令被译码、分支预测进行时的各种时点的状态,因此,依据分支预测的投机运行是可能的。
以上,为了简化说明,对在1个周期里可以同时译码、发行/完成的指令,至多为1个的情况进行了说明。本发明所述的计算机系统中,可以做成同时给多条指令译码、发行/完成的结构。也就是说,如果FL是FIFO队列的结构,为了分配,将自由的(空闲)CRF入口地址从FL取出的顺序是既定的,可以掌握各指令中弹出几条压入几条等堆栈操作的内容,同时进行多条指令的译码/发行。而且,指令的完成,基本上,以IB写入的内容为基础,操作CPS时应再现指令译码/发行时的APS动作,而且可以解除入口地址从CPS弹出的CRF入口的分配,因此,做成同时完成多条指令的结构也是可能的。
越是增多可以同时译码、发行/完成的指令数,指令译码/发行单元外的控制电路越是复杂,另外,组成APS、CPS、IB、CRF和数据缓冲器的各个寄存器/文件的端口数量和运算单元的数量、还有组成CDB总线的数量等方面,需要数量更多的硬件。
本发明所述的计算机系统中,在指令译码/发行阶段的前阶段里,可以做成以下的结构,即变换为综合了同时译码发行的多条指令内容的形式。或者将变换结束的码存在超高速指令缓冲器里的结构也可以。
例如,采用相当于1个周期译码发行2字指令的结构时,计算上述X=(A+B)/{T-(A+B)}的程序,变换为

图15图表所示的内容。图15图表的各个阶段里,展示着以同时译码/发行的2字指令为依据的PP_OF_APS的增量、APS的操作内容和应写入IB2个入口的指令内容。这里,把指令发行前的APS内容记录为…s2、s1、s0(右端是栈顶),作为FIFO队列组成的独立表内容(按取出的顺序)记述为…f1、f2、f3,指令发行时,可以替换为分别对应的CRF入口地址。如PP_OF_APS的增量栏所示,APS栈顶位置移动,在APS操作内容栏里,这个移动后的栈顶位置对应右端。而且,“NC”意味着[无变化]。
本发明所述的计算机系统,不限于上述运行例,可以存在细节组成不同的各种运行例。例如,可以举如下的例子。
①如另行具备CRF及独立表,其用于整数数据/浮点数据或者32字节数据/64字节数据,而且对应他们设置了极为齐全的运行单元。
②作为设置了多组前进指针堆栈和结束指针堆栈的结构,顺序呼出/顺序恢复时,变更所使用的前进指针堆栈和结束指针堆栈组的结构。
③设置了多数组的前进指针堆栈、结束指针堆栈、指令缓冲器及数据缓冲器,可以并行多条线进行处理的结构。
另外,基于寄存器基础的超级体系结构考虑的各种变形,也适用于本发明为基础的计算机系统。
共同含有堆栈型的指令及寄存器型的指令组,也适用于本发明所述的计算机系统。也就是说,作为具备累进寄存器映射表格和完成寄存器映射表格的结构,对于堆栈型的指令,操作累进/结束指针堆栈,对于寄存器型的指令,存取累进/完成寄存器映射表格,而累进寄存器映射表格和完成寄存器映射表格,加入前进指针堆栈及结束指针堆栈,分别对应各种逻辑寄存器而设置的各个入口,写有综合寄存器文件的入口地址。此时,代替前进指针堆栈历史文件,需要具备在各个入口写入前进指针堆栈及累进寄存器映射表格双方内容的累进历史文件。
产业上的利用可能性如上所述,本发明所述的计算机系统,一边保证正确的例外处理,一边以反常规的方式,处理用堆栈机器语言设计的程序,具有以下优点,即多个功能单元的并列处理是可能的,进行管线化带来的有效处理也是可能的。
而且,由于分支预测的投机运行,或1个周期同时运行多条指令的译码、发行/完成这种结构是可能的,因此更高的高速化是可能的。
权利要求
1.一种计算机系统,具有数据高速缓冲存储器(11);可以保持变量数据的数据缓冲器(12);在各个入口写入数据的综合寄存器文件(6);在各个入口写入该综合寄存器文件(6)的入口地址的前进指针堆栈(3);在各个入口写入各个指令内容的构成FIFO(先进先出)队列结构的指令缓冲器(5);运行运算的运算单元(80,81);可以读取该数据高速缓冲存储器(11)及该数据缓冲器(12)的装载/存储单元(83);当含有对操作数堆栈弹出操作的指令被译码时,只将和应弹出的字数相同数量的该综合寄存器文件(6)的入口地址,从该前进指针堆栈(3)弹出,当含有对操作数堆栈压入操作的指令被译码时,对只和应压入字数相同数量的未分配的该综合寄存器文件(6)的入口进行分配,将分配的该综合寄存器文件(6)的入口地址压入该前进指针堆栈(3),被译码的指令内容,如果伴随弹出/压入操作指令时,连同弹出/压入的该综合寄存器文件(6)的入口地址,写入该指令缓冲器(5),依据数据驱动原理处理该指令缓冲器里保持的未运行的指令,运行用堆栈机器语言记录的程序。
2.根据权利要求1所述的计算机系统,具备向各个入口写入该综合寄存器文件(6)入口地址的结束指针堆栈(4);当该指令缓冲器5的起始入口保持的指令可以结束,或者已经结束时,根据该指令缓冲器(5)的起始入口的内容,操作该结束指针堆栈(4),使所保持的指令内容被译码时再现该前进指针堆栈(3)的动作,从指令缓冲器(5)除去这个起始入口,依据弹出操作,解除该结束指针堆栈(4)中地址保持结束的该综合寄存器文件(6)的入口分配。
3.根据权利要求2所述的计算机系统,具有保持没有分配的该综合寄存器文件(6)入口地址的独立表;在初始状态中,该综合寄存器文件(6)的所有入口地址登录在该独立表里,当需要分配该综合寄存器文件(6)的入口时,从独立表取出没有分配的该综合寄存器文件(6)的入口地址,把解除了分配的该综合寄存器文件(6)的入口地址,登录在该独立表里。
4.根据权利要求2所述的计算机系统,具有向各个入口写入该前进指针堆栈(3)的内容的前进指针堆栈历史文件(3a);该综合寄存器文件(6)在各个入口写入分支标记,当指令被译码时,将分支标记写入被分配的该综合寄存器文件(6)的入口,每当条件分支指令被译码时,向该前进指针堆栈历史文件(3a)的1个入口,写入该前进指针堆栈(3)的内容,改变标记,进行基于分支预测的推测运行,当分支预测没有应验时,将条件分支指令以后译码的指令视为无效,解除写有在该条件分支指令以后译码的指令所添加的分支标记的该综合寄存器文件(6)的入口的分配,把该条件分支指令被译码时写入的该前进指针堆栈(3a)的入口的内容,拷贝在前进指针堆栈(3)里,从正确位置的指令开始,重新进行处理。
5.根据权利要求2所述的计算机系统,前进指针堆栈(3)和该结束指针堆栈(4)组成循环型的缓冲器,在该前进指针堆栈(3)和该结束指针堆栈(4)里,如果保持该综合寄存器文件(6)入口地址的最低位入口的内容一致,则在该前进指针堆栈(3)和该结束指针堆栈(4)中,解除最低位入口中的该综合寄存器文件(6)的入口地址的保持,把该一致内容所表示的该综合寄存器文件(6)入口里写入的数据,存在该数据缓冲器(12),对于需要从该数据缓冲器(12)装载到该综合寄存器文件(6)的数据,分配没有分配过的该综合寄存器文件(6)的1个入口,写入该数据,并且在该前进指针堆栈(3)及该结束指针堆栈(4)中,通过在保持该综合寄存器文件(6)入口地址的最低位入口的再下1个入口中,保持写入该数据的该综合寄存器文件(6)的入口地址,可以进行从该数据缓冲器(12)向该综合寄存器文件(6)的数据装载。
6.根据权利要求3所述的计算机系统中,该独立表是FIFO(先进先出)队列的结构,具有同时进行多条指令的译码,对该前进指针堆栈(3)的操作、该综合寄存器文件(6)的入口分配及向该指令缓冲器(5)的连续的多个入口写入指令内容的功能;根据同时写入该指令缓冲器(5)的连续的多个入口的内容,解除该结束指针堆栈(4)的操作及该综合寄存器文件(6)入口分配的功能。
7.一种计算机系统,具有在各个入口写入数据的综合寄存器文件(6);在各个入口写入该综合寄存器文件(6)的入口地址的前进指针堆栈(3);在各个入口写入各个指令内容的构成FIFO队列结构的指令缓冲器(5);具备各个适当数量的保留站的功能单元群;在该综合寄存器文件(6)及该功能单元群之间,将数据连同该综合寄存器文件(6)的入口地址共同分配的共用数据总线(8);对于译码的指令,当规定了对操作数堆栈的弹出操作时,只将和应弹出字数相同数量的该综合寄存器文件(6)的入口地址,从该前进指针堆栈(3)弹出,对于译码的指令,当规定了对操作数堆栈的压入操作时,只分配和应压入语句数相同数量的该综合寄存器文件(6)的入口,将该分配的该综合寄存器文件(6)的入口地址压入前进指针堆栈(3),被译码的指令内容,如果伴有弹出/压入操作的指令,则连同被弹出/压入的该综合寄存器文件(6)的入口地址,共同写入该指令缓冲器(5),根据指令类型,在必要时,将写入该指令缓冲器(5)的指令内容,也写入没有保持运行该指令的功能单元的指令内容的保留站,从该前进指针堆栈(3)弹出入口地址的该综合寄存器文件(6)入口的各个内容被读出,当已经写有数据时,入口地址和数据放在共同的数据总线(8)上,在各个保留站中,保持指令内容时,比较应保持写在其中的源数据的该综合寄存器文件(6)入口地址、和通过该共用数据总线(8)送来的该综合寄存器文件(6)的入口地址,如果一致,就取进数据,在需要的源数据齐全后,开始运行该指令,在各个该功能单元群中,指令被译码时,将该前进指针堆栈(3)压入的该综合寄存器文件(6)的入口地址等这样的指令运行的结果所得到的数据,连同这个被压入的综合寄存器文件(6)的该入口地址,一块放在该共用数据总线(8)上,在该综合寄存器文件(6)中,通过根据该共用数据总线(8)送来的内容进行数据写入,来运行用堆栈机器语言记录的程序。
8.根据权利要求7所述的计算机系统,具备向各个入口写入该综合寄存器文件(6)入口地址的结束指针堆栈(4),当该指令缓冲器(5)中队列的起始入口所保持的指令可以结束,或者已经结束时,根据该队列的起始入口的内容,操作该结束指针堆栈(4),使该保持的指令译码时该前进指针堆栈(3)的动作再现,从该队列解除起始的入口,依据弹出操作,解除在该结束指针堆栈(4)中结束了地址保持的该综合寄存器文件(6)入口的分配。
全文摘要
本发明公开一种计算机系统,高速处理由堆栈机器的机器语言描述的程序,每当指令被解码时,根据其指令的内容,操作前进指针堆栈及综合寄存器文件,同时将该指令内容写入指令缓冲器,必要时写入适当功能单元的空着的保留站中。在指令缓冲器中保持的未执行的指令由out-of-order进行处理。当在指令缓冲器前部的入口中所保持的指令可以或实际结束时,根据该指令缓冲器前部的入口内容,应操作再现所保持的指令被解码时的前进指针堆栈动作的结束指针堆栈,并从指令缓冲器除去其前部的入口。
文档编号G06F9/38GK1348561SQ00806553
公开日2002年5月8日 申请日期2000年4月17日 优先权日1999年4月22日
发明者关一 申请人:关一
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1