计算机系统的制作方法

文档序号:6415903阅读:230来源:国知局
专利名称:计算机系统的制作方法
技术领域
本发明涉及将用堆栈机器的机器语言描述的程序以高速进行处理的新结构的计算机系统。
背景技术
在现有的堆栈机器中,指令的执行基本上是按程序上的顺序来进行的。即,堆栈机器的运算指令指示进行下列动作将源数据从操作数堆栈(operand stack)弹出,进行运算,将该运算结果推入操作数堆栈。作为这样的指令的链而编写的程序被顺序地执行。
在这种现有的堆栈机器中,由于按程序的顺序(in order)执行指令,因此虽然有控制结构简单的优点,但存在处理速度受到限制的问题。
因而人们考虑用无顺序(out-of-order)的方式处理用堆栈机器的机器语言描述的程序。例如有日本特公平2-260082号、美国专利第5522051号、美国专利第5333320号及美国专利第5765014号的处理机单元。在这些说明书中所示的处理机在提高处理性能上不够充分,而且在保证正确进行例外处理上存在问题。
本发明的目的是为了解决上述的问题,提供一种计算机系统,能保证正确进行例外处理,且能有效地用无顺序(out-of-order)的方式处理用堆栈机器的机器语言描述的程序。
发明的公开本发明的计算机系统,包括数据高速缓冲存储器;综合寄存器文件,在各个项目(ェン ト リ)中写入数据;
前进指针堆栈和完成指针堆栈,其是将综合寄存器文件的入口地址(ェントリのアドしス)写入各个项目中的堆栈结构;指令队列,其是一种将各个指令的内容写入各个项目所构成的FIFO队列的结构;运算单元,用于进行运算;装入/存储单元,能够对数据高速缓冲存储器和综合寄存器文件进行存取。
在现有的堆栈机器中,堆栈为…,word1,word2,word3,word4(右端为栈顶)的状态,对应于本发明的计算机系统中,在指针堆栈为…,(a),(b),(c),(d)(右端为栈顶),而入口地址为(a),(b),(c)及(d)的综合寄存器文件的各项目中,分别保存了word1,word2,word3及word4的状态。
在本发明的计算机系统中,在每次指令被译码时,根据该指令的内容操作前进指针堆栈和综合寄存器文件,并将该指令的内容写入指令队列中。此时,指令中所包含的对操作数堆栈的堆栈操作也同样适用于前进指针堆栈。在这里,为了在本发明的计算机系统中,对将单字数据推入操作数堆栈的推入操作进行仿真,可以对未被分配的综合寄存器文件的一个项目进行分配,以便保存该数据,并将该入口地址推入前进指针堆栈中。
即,当包含对操作数堆栈的弹出操作的指令被译码时,将与将要弹出的字数正好相同数量的综合寄存器文件的入口地址从前进指针堆栈弹出。当包含对操作数堆栈的推入操作的指令被译码时,将与将要推入的字的数量正好相同数量的综合寄存器文件的入口地址推入前进指针堆栈。进而,将被译码的指令的内容与伴随着弹出/推入操作的指令而被弹出/推入的综合寄存器文件的入口地址一起写入指令队列。
保存在指令队列中的未执行的指令,根据数据驱动的原理(指各个动作在所有必需的源数据能够一起执行的时刻来进行),被无顺序地进行处理。
例如,在指令队列中,将运算指令作为写入的内容,如果有所有的源数据都已写入综合寄存器文件的项目,并且是运算单元可以利用的状态,则开始执行该运算。如果执行运算正常结束,将运算结果写入作为目标的综合寄存器文件的项目中。
当在指令队列的前头的项目中被保存的指令可能完了时,或已经完了时,根据指令队列的前头的项目内容,操作完成指针堆栈,以便再现当保存的指令被译码时前进指针堆栈的动作,从指令队列将上述前头的项目排出。通过弹出操作,解除对完成指针堆栈的地址失去保存的综合寄存器文件的项目的分配。
根据数据驱动的原理,处理在上述指令队列(5)中保存的未执行的指令,执行用堆栈机器的机器语言描述的程序。
附图的简要说明

图1是本发明的较佳的计算机系统的基本结构的框图;图2是前进指针堆栈和完成指针堆栈的结构的示意图;图3是具体说明本发明的第1实施例的一个动作例的每个循环的前进指针堆栈、完成指针堆栈、指令队列和综合寄存器文件的内容的图;图4是表示指令队列的结构的图;图5是指令队列的各个项目的具体结构的示意图;图6~图12是具体说明本发明的第1实施例的一个动作例的每个循环的前进指针堆栈、完成指针堆栈、指令队列、及综合寄存器文件的内容的示意图;图13是表示在本发明的第1实施例中,当在一个循环中能够译码3个或3个以下的指令时,将程序变换的示意图表;图14是本发明的第2实施例的综合寄存器文件的各个项目的具体结构的示意图;图15~图21具体说明是本发明第2实施例一个动作例的、每个循环的前进指针堆栈、完成指针堆栈、指令队列、和综合寄存器文件的内容的示意图。
本发明的最佳实施例以下参照附图对本发明的较佳的计算机系统进行说明。以下所述的本发明的计算机系统的实施例,用硬件执行用Java虚拟机(JavaVirtual Machine Java VM)所规定的堆栈机器的基本指令。即,使数据字长为32比特,以此为单位进行装入/存储及算术逻辑运算等运算。因此,例如在双倍字间进行的算术运算,是分别合并2字,以4字的源数据为基础而产生2字的运算结果。
现有的堆栈机器中的、以字为单位将数据推入/弹出的堆栈,为了将其与后述的指针(pointer)堆栈加以区别,以后称其为字堆栈。
Java VM中本来包含有硬件执行中未设想的复杂的指令。以下所述本发明的计算机系统的实施例,是用硬件执行下面这样的基本指令。(a)将直接数据向操作数堆栈推入的指令bipush,sipush,aconst_null,iconst_ml,iconst_<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,dalod,aaload,baload,caload,saload(c)在操作数堆栈上存储数据的变量的指令istore,istore_<n>,fstore,fstore_<n>,astore,astore_<n>,lstore,lstore_<n>,dstore,dstore_<n>,iastore,iastore,fastore,dastore,aastore,bastore,castore,sastore(d)运算指令
(d-1)算术运算指令iadd,ladd,fadd,dadd,isub,1sub,fsub,dsub,imul,lmul,fmul,dmul,idiv,ldiv,fdiv,ddiv,irem,lrem,frem,drem,ineg,lneg,fneg,dneg(d-2)逻辑运算指令ishl,ishr,iushr,lshl,1shr,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和第2实施例。
首先说明本发明的第1实施例的计算机系统。
图1是计算机系统的框图,10是指令高速缓冲存储器(cache),11是数据高速缓冲存储器,20是取指令装置、21是译码设定单元,3是前进指针堆栈、3a是前进指针堆栈历史记录文件、4是完成指针堆栈、5是指令队列、6是综合寄存器文件、7是自由表(フリ一リスト)、80和81分别是运算单元O和1、82是转移单元、83是装入/存储单元。
接着,说明本发明的第1实施例的计算机系统的各结构单元的详细结构。(A)取指令单元取指令单元具有未图示的程序计数器(微型机寄存器),从指令高速缓冲存储器中取出指令,送给指令译码设定单元。还担任转移的预测和转移的执行。(B)指令译码设定单元指令译码设定单元对从取指令单元送来的指令进行译码,产生用于设定后述的前进指针堆栈、指令队列及综合寄存器文件等的各种信号,以便通过数据驱动执行指令所包含的运算。(C)指针堆栈指针堆栈的结构是在各个项目(entry)写入综合寄存器文件的入口地址的堆栈结构。
在现有的堆栈机器中,字堆栈(word stack)为…,word1,word2,word3,word4(右端为栈顶)的状态,对应于本发明的计算机系统中,在指针堆栈为…,(a),(b),(c),(d)(右端为栈顶),而入口地址为(a),(b),(c)及(d)的综合寄存器文件的各项目中,分别保存了word1,word2,word3及word4的状态。
本发明的计算机系统具有前进指针堆栈(APSadvanced pointerStack)和完成指针堆栈(CPS Completed Pointer Stack)两种指针堆栈。
在本发明的计算机系统中,通过在每次对各个指令译码时,操作前进指针堆栈(以下用APS表示)和综合寄存器文件,并将指令的内容写入指令队列,从而设定数据驱动下应执行的指令所包含的运算。即,前进指针堆栈反映了已完成译码设定的所有指令的堆栈操作。
另一方面,完成指针堆栈(以下称为CPS)反映了按程序的顺序的己完成的所有的指令的堆栈操作。本发明的计算机系统根据数据驱动的原理,使无顺序进行变得可能,完成指针堆栈的作用是为了保证正确地进行例外处理,构成程序被有顺序执行时的状态。
由于指针堆栈和综合寄存器文件的项目数有限,当字堆栈增加时,使用指针堆栈和综合寄存器文件只能保存栈顶附近的部分。在本实施例的计算机系统中,字堆栈的剩余部分存储在数据高速缓冲存储器中。因此,各指针堆栈为循环型的缓冲器的结构,被称为推入指针和底指针的二个寄存器分别存在。推入指针表示保存综合寄存器文件的入口地址的最上位的项目的上面一个项目。底指针表示保存综合寄存器文件的入口地址的最下位的项目。通过用底指针的值减去推入指针的值,可以知道指针堆栈中有多少项目是空的。在初始状态中,推入指针和底指针的各个值都为0。
图2是说明本实施例的计算机系统的各指针堆栈与各推入指针及底指针的关系的图。二个指针堆栈APS3和CPS4具有相同数量的项目,在各指针堆栈,各个项目从下开始按照顺序被赋予0、1、2…的地址。加有竖线的项目用于保存综合寄存器文件的入口地址。如图2所示,对各个APS和CPS设置推入指针,并被分别赋予名称PP_OF_APS和PP_OF_CPS。另一方面,底指针只有一个,由APS和CPS公用。它被赋予名称BP_OF_PS。
在APS和CPS之间,设有正好与项目数相同数量的比较电路,在APS和CPS的相同的入口地址(在图2中水平排列)的项目间比较其内容。
与指令中所包含的操作数堆栈的单字的推入操作相对应而被分配的综合寄存器文件的一个入口地址,被写入APS的PP_OF_APS所示的项目,将PP_OF_APS的值加1。反之,与指令中所包含的操作数堆栈的单字的弹出操作相对应,将PP_OF_APS的值减去1。对于CPS和PP_OF_CPS也同样。
当BP_OF_PS所示的项目的内容在APS及CPS一致时,可以将在综合寄存器文件的项目中写入的单字的数据,存储(spill)在数据高速缓存器中,其中,该综合寄存器文件的项目是由在该二个指针堆栈中一致的内容所表示的。此时,在BP_OF_PS值上加1。反之,将在数据高速缓冲存储器中存储的数据装入(Fill)综合寄存器文件时,对最后存储的单字的数据,分配在自由表中注册的综合寄存器文件的一个项目,写入该数据,将该综合寄存器文件的入口地址分别写入APS和CPS的BP_OF_PS所示项目的下面一个项目中,对BP_OF_PS值减去1。
本实施例的计算机系统,为了能进行根据转移预测的投机性执行,其具有前进指针堆栈历史记录文件(以下称为“APS历史记录文件”)。APS的所有的项目及PP_OF_APS的内容被写入APS历史记录文件的各个项目中。
(D)综合寄存器文件(CRF,Consolidated Resister File)综合寄存器文件(以下用CRF表示)将现有的堆栈机器的字堆栈的内容按不同顺序保存。
图3是第1实施例的CRF6的各个项目6(i)的具体结构的说明图。在这里,i是入口地址。CRF的各个项目6(i)由数据区域61(i)、写入完了标记(WCF,Write Completion Flag)区域62(i)、颜色(C,Colour)区域63(i)及执行位(BB)区域64(i)构成。
实际的CRF的硬件结构是设置在上述各个区域的寄存器文件的集合体。
CRF的各个项目的数据区域中写入的是单字的数据。
在CRF的各个项目中,如果在数据区域中写入数据完了,WCF区域被写入1,如果未完了,则被写入O。
在CRF的各个项目中,C区域为了区别该CRF的项目是对应于指令所包含的推入操作而被分配的项目,还是为避免下溢在从数据高速存储器装入时被分配的项目,在前者的情况下,写入转移标记(Tag)。在本实施例中,如后所述,转移标记与APS历史记录文件的入口地址有一定的关系。
在CRF的各个项目中,当该CRF的项目为保存数据而被分配的状态,则在BB区域中写入1,如果为未被分配的状态,则写入0。
(E)自由表(FL)自由表(以下称为FL)是用于保存自由的即未被分配的(BB区域为0)CRF的入口地址的存储器,在本实施例中,为循环型的FIFO队列结构。
在初始状态中,CRF的所有的入口地址被注册在FL中。在需要将CRF的自由的项目分配时,从FL中取出CRF的入口地址。反之,如果CRF的某个项目的分配被解除,该入口地址被注册在FL中。
(F)指令队列(IQ,Instruction Queue)指令队列(以下用IQ表示)是用于保存等待执行或完了的译码设定己完成的指令的存储器,为循环型FIFO的结构。
图4是表示IQ的结构的说明图。在图4中,IQ5的各个项目从下开始按照顺序被赋予地址0、1、2…,加有竖线的IQ5的项目用于保存等待执行或等待完了的指令。IQ具有被赋予设定指针/完成指针的名称的二种寄存器。设定指针表示将要写入下一个被译码设定的指令内容的项目。完成指针表示下一个将要完成的指令的项目。通过从完成指针的值减去设定指针的值,可以知道在IQ中有多少项目为空。在初始状态下,设定指针和完成指针的值都为0。
图5是IQ5的各个项目5(i)的具体结构的说明图。在这里,i是入口地址。IQ5的各个项目5(i)由下列部分构成,即,操作区域500(i)、操作数区域501(i)、第1源区域510(i)、第1写入完了标记(WCF1)511(i)、第2源区域520(i)、第2写入完了标记(WCF2)521(i)、第3源区域530(i)、第3写入完了标记(WCF3)531(i)、第4源区域540(i)、第4写入完了标记(WCF4)541(i)、第1目标区域55(i)、第2目标区域56(i)、转移标记(BT)区域57(i)、及执行状态(S,State)区域58(i)。
操作码被写入IQ的各个项目的操作区域。
在操作码之后的操作数所示指令的情况下,该操作数被写入IQ的各个项目的操作数区域。
在IQ的各个项目的第1~第4源区域的各个区域中,写入为保存源数据而被分配的CRF的入口地址。在包含对操作数堆栈进行弹出操作的指令的情况下,为保存根据指令将被弹出的数据而被分配的CRF的入口地址,按照被弹出的顺序写入。
在IQ的各个项目的第1~第2目标区域的各个区域,将伴随着指令的译码设定而重新被分配的CRF的入口地址写入。在包含对操作数堆栈进行推入操作的指令的情况下,为保存根据指令将被推入的数据而被分配的CRF的入口地址,按照被推入的顺序写入。
在IQ的各个项目中,第1~第4的各WCF区域与第1~第4源区域的各个区域对应而设置,如果在第1源区域所示的CRF的项目中数据的写入已完了,则WCF第1区域被写入1,如果在第1源区域所示的CRF的项目中数据的写入未完,则WCF第1区域被写入O。这对于第2~第4的WCF区域、源区域也是同样。
IQ在每个项目的源区域具有比较电路,具有将进行数据写入的CRF的入口地址与各源区域的内容予以比较、向对应于一致的源区域的WCF区域赋予1的功能。
由于IQ的各个项目的BT区域是根据转移预测的投机性执行的,在本实施例中,如后所述,被写入BT区域的转移标记与APS历史记录文件的入口地址有一定的关系。
在IQ的各个项目中,根据写入该项目的指令的执行状态,将未执行、执行完了、正常完了、发生例外情况等的信息写入S区域。
(G)运算单元本实施例的计算机系统具有运算单元0及运算单元1,它们分别具有执行从IQ送来的算术逻辑运算、数量类型的变换运算、比较运算等的运算指令的功能,可以相互独立地并行动作。
在本发明的计算机系统中,可以将各个运算单元流水线化、具有更多的运算单元,能指定每个运算单元所执行的运算的种类。
(H)转移单元转移单元具有处理从IQ送来的条件转移指令、确定有无转移、并向取指令单元通知的功能。
(I)装入/存储单元(LSU,load/store unit)装入/存储单元(以下用LSU来表示)具有进行地址计算的功能,能够对数据高速缓冲存储器及CRF进行存取。
LSU具有保存指向最初的局部变量的指针的未图示的寄存器(vars寄存器)。在本实施例的计算机系统中,最初的局部变量的存储区域是数据高速缓冲存储器或CRF,在vars寄存器中写入的是数据高速缓冲存储器相当的地址值。即,即使所有或一部分局部变量的实际的存储区域为CRF,由于假定所有的局部变量存储在数据高速缓冲存储器时的数据高速缓冲存储器的地址值,可以与各个局部变量对应,所以在局部变量/存储指令的处理中,LSU利用vars寄存器的值进行地址计算,判断作为对象的局部变量的存储区域是数据高速缓冲存储器还是CRF,对该存储区域进行存取。当判断存储区域是CRF时,将需要存取的CRF的入口地址从APS读出。
当装入/存储指令通过指令译码设定单元被译码时,该内容被写入指令队列的同时,也向LSU传送。
LSU具有按照程序的顺序、将装入/存储指令与指令队列的入口地址、作为对象的变量名及数据一起保存的未图示的队列。该队列具有联想功能,通过参照变量名进行数据存取的依赖性的检验,可以无顺序地执行装入指令。在本实施例的计算机系统中,局部变量的存储区域为数据高速缓冲存储器或CRF,但在上述队列中已有相同的变量名写入的局部变量的装入指令的情况下,变量数据被从上述队列中读出。存储指令的执行为了保证进行正确的例外处理,如后所述,在完成阶段以有顺序的方式进行。
LSU执行程序中所示的装入/存储指令,并为了避免溢出(overflow)和下溢(under flow),根据APS、CPS及CRF的空的状况,将保存在CRF中的堆栈的最下位中的数据在数据高速缓冲存储器中自动存储/装入。
在本发明第1实施例的计算机系统中,APS、CPS及CRF的溢出/下溢可以通过下述的方式(mechanism)来避免。
当APS、CPS或CRF的空的程度在一定量以下时,为了避免溢出,可以随时进行以下的控制动作。
即,当APS没有保存一定量以上的CRF的入口地址时,或BP_OF_PS所示项目的内容在APS和CPS不一致时,在上述条件解除之前,向取指令单元发送信号,以停止指令时序的流动。
反之,当APS保存一定量以上的CRF的入口地址时,且BP_OF_PS所示项目的内容在APS及CPS一致时,将写入CRF的项目中的单字的数据存储(spill)在数据高速存储器中,在BP_OF_PS的值上加1。其中,该CRF的项目是由在上述二个指针堆栈一致的BP_OF_PS所示项目的内容所表示。进而,将上述CRF的项目的BB区域变更为O,将该入口地址在FL中注册。
当APS、CPS或CRF的空的程度都在一定量以上时,为了避免下溢,将最后存储的单字的数据从数据高速缓冲存储器中取出,分配给在FL注册的自由的CRF的1个项目,写入该数据区域中。使WCF、BB的各区域为1。进而,将被分配的CRF的入口地址分别写入APS及CPS的BP_OF_PS所示项目的下面的一个项目,并将BP_OF_PS的值减去1。
为了有效地进行CRF和数据高速缓冲存储器间的存储/装入的动作,LSU具有暂时保存数据的缓冲器,可以在其中存储适当字数的数据。
接着说明本发明第1实施例的计算机系统的动作。
本实施例的计算机系统将指令以(1)取指令、(2)指令译码设定、(3)执行、(4)完了的4个阶段处理。现在为了使说明简单,在一个循环将一个指令作为能够译码设定/完了的指令,在以下各个阶段说明动作内容。
(1)取指令阶段在本阶段,取指令单元从指令高速缓冲存储器中取出指令,并决定下一个取出指令的地址。下一个取出的指令通常是从下一个地址值开始,但是下列情况下,即在预测出取出的指令是无条件转移指令、或在条件转移指令下进行转移的情况下;或转移预测错误的情况下;或发生了例外的情况下,变更取出地址。
(2)指令译码设定阶段在该阶段,通过对指令译码,根据指令的内容操作前进指针堆栈(APS)和综合寄存器文件(CRF),并将指令的内容写入指令队列(IQ),从而设定通过数据驱动将要执行的指令所包含的运算。以下详细说明设定动作。
在本发明的计算机系统中,现有的堆栈机器的字堆栈的栈顶附近通过指针堆栈和CRF而再现,对于指令所包含的对操作数堆栈的堆栈操作,也同样适用于APS。
为了对向操作数堆栈的单字的数据的推入操作进行仿真(emulator),也可以将在FL中注册的自由的CRF的一个项目为保存该数据而分配,将该入口地址推入APS。
在操作数堆栈的操作指令(Java VM的pop,pop2,dup,dup2,dup_x1,dup2_x1,dup_x2,dup_x2,swap)的情况下,对操作数堆栈进行的操作基本上可对APS同样进行。在第1实施例中,在堆栈上制作复制这样的操作数堆栈的操作指令(Java VM的dup,dup2,dup-x1,dup2-x1,dup-x2,dup2-x2)的情况下,对将要保存复制数据、在FL中注册的自由的CRF的项目分配,将该入口地址写入APS的适当的项目。
在随着指令的译码设定被重新分配的CRF的项目中,向BB区域赋予1,在C区域中写入从指令译码设定单元送来的转移标记。在直接数据的推入指令的情况下,由于已经得到数据,在数据区域写入该数据,向WCF区域赋予1。在这之外的情况下,由于在译码设定时未得到数据,使WCF区域为0。
为了将被译码的指令的内容按程序顺序保存在IQ中,将该指令的内容写入IQ的设定指针所示的项目中,对设定指针的值加1。即,在操作区域中写入操作码,在操作码的后面所示的是操作数的情况下,将该操作数写入操作数区域。将从指令译码设定单元送来的转移标记写入BT区域。对于S区域,将无条件转移指令、直接数据推入操作数堆栈的指令,或在堆栈上未制作复制的操作数堆栈的操作指令(Java VM的pop,pop2,swap)的情况作为执行完毕,其它的指令的情况作为未执行。
在包含对操作数堆栈进行弹出操作的指令的情况下,将从APS弹出的与将要弹出的字数正好相同数量的CRF的入口地址,按照该顺序写入第1~第4源区域。此时,从入口地址被弹出的CRF的各个项目中读出WCF区域,送给IQ的对应的WCF区域。
在包含对操作数堆栈进行推入操作的指令的情况下,将向APS推入的与将要推入的字数正好相同数量的CRF的入口地址,按照该顺序写入第1~第2目标区域。
在第1实施例中,在堆栈上制作复制这样的操作数堆栈的操作指令的情况下,按照一定的对应关系,将为了保存作为复制源的数据而被分配的CRF的入口地址写入源区域,将为了保存复制数据而重新被分配的CRF的入口地址写入目标区域。
由于将要向操作数堆栈弹出/推入的字数(在操作数堆栈的操作指令的情况下,为制作的复制的字数)根据指令的种类而决定,所以根据目标区域的内容,可以知道第1~第4源区域、第1~第4WCF区域及第1~第2目标区域中哪一个有效。
在装入/存储指令的情况下,将该内容写入IQ的同时,并与进行该写入的IQ的入口地址一起向LSU传送。(3)执行阶段保存在IQ中的未执行的指令通过数据驱动进行处理。因此,指令执行顺序为无顺序。以下说明每一种指令种类的执行阶段。(a)向操作数堆栈推入直接数据的指令在执行阶段不进行任何动作。(b)向操作数堆栈装入变量数据的指令关于IQ的作为将装入指令写入的内容的项目,相同的内容在指令译码设定阶段被送给LSU。在LSU中,将送来的装入指令按无顺序进行处理。
在IQ中,将操作数堆栈上的数据弹出进行地址计算这样的装入指令(Java VM的iaload,laload,faload,daload,aaload,baload,caload,saload)作为写入的内容,如果有与有效的源区域对应的WCF区域全部为1(源数据已经全部写入CRF中)的项目,将存取CRF得到的源数据与该入口地址一起送给LSU。LSU根据送来的源数据进行地址计算,试着进行装入。
当LSU得到变量数据时,将变量数据写入作为目标的CRF的项目的数据区域,将WCF区域变更为1。然后,在IQ,在各源区对照作为上述目标的CRF的入口地址,使与一致的源区域对应的WCF区域为1。此时,在同一时刻写入指令的IQ的项目中与该写入的内容进行比较。如果以上的动作正常地结束,将保存该装入指令的IQ的项目的S区域变更为正常结束。(c)在操作数堆栈上存储数据的变量的指令在IQ中,将存储指令作为写入的指令,如果有与有效的源区域对应的WCF区域全部为l(源数据已经全部写入CRF中)的项目,将存取CRF得到的源数据与该入口地址一起送给LSU。
在将操作数堆栈上的数据弹出进行地址计算这样的存储指令(Java VM的iastore,lastore,fastore,dastore,aastore,bastore,castore,sastore)的情况下,LSU根据送来的源数据进行地址计算。
如果以上的动作正常地结束,将保存该存储指令的IQ的项目的S区域变更为可以进行存储。
为了保证正确地进行例外处理,实际的存储在完成阶段进行。(d)运算指令在IQ中,将运算指令作为写入的内容,如果有与有效的源区域对应的WCF区域全部为1(源数据已经全部写入CRF中)的项目,且如果有可以利用状态的运算单元,将该项目的内容与该入口地址及通过存取CRF得到的源数据一起送给可以利用的运算单元。
如果运算的执行正常结束,将运算结果写入作为目标的CRF的项目的数据区域中,将WCF区域变更为1。然后,将IQ的CRF的入口地址的对照和WCF区域的变更,与上述装入指令的情况相同地进行。如果以上的动作正常地结束,将保存运算指令的IQ的项目的S区域变更为正常结束。(e)操作数堆栈的操作指令对于未在堆栈上制作复制的操作数堆栈的操作指令,在执行阶段不进行任何动作。
在第1实施例中,在IQ中,将在堆栈上制作复制这样的操作数堆栈的操作指令作为写入的内容,如果有与有效的源区域对应的WCF区域全部为1(源数据已经全部写入CRF中)的项目,从该有效的源区域所示的CRF的项目中读出数据,将该数据写入对应的目标区域所示CRF的项目的数据区域中,将WCF区域变更为1。然后,将IQ的CRF的入口地址的对照和WCF区域的变更,与上述装入指令的情况相同地进行。如果以上的动作正常地结束,将保存该操作数堆栈的操作指令的IQ的项目的S区域变更为正常结束。(f)转移指令关于无条件转移指令,在执行阶段不进行任何动作。
在IQ中,将条件转移指令作为写入的内容,如果有与有效的源区域对应的WCF区域全部为1(源数据已经全部写入CRF中)的项目,将该项目的内容与该入口地址及通过存取CRF所得到的源数据一起送给转移单元,并执行该内容。
如果转移单元对条件式的计算正常地结束,将该结果与转移目标的地址一起向取指令单元通知。如果以上的动作正常结束,将保存该条件转移指令的IQ的项目的S区域变更为正常结束。
如上所述,保存在IQ中的未执行的指令,由于从可以执行的指令开始进行处理,执行指令的顺序成为无顺序。另外,运算单元0,1、转移单元及装入/存储单元的各执行单元相互独立地并行工作。
当在指令的处理中发生例外事情时,将该信息写入保存该信息的IQ的项目的S区域,并向取指令单元通知例外向量(vevtor)。(4)完成阶段为了使某个指令能够结束,必须使按照程序顺序在该指令之前的指令全部结束。
在IQ完成指针所示区域中,当S区域为执行完毕/正常结束时,或已经结束时,根据写入该项目的指令的内容来操作CPS及CRF,在完成指针的值上加1。
CPS是使指令被译码设定时的APS的动作再现的操作。即,在包含弹出/推入操作的指令的情况下,按照顺序从CPS弹出与有效的源区域的内容相同的内容,按照顺序向CPS推入有效的目标区域的内容。在堆栈上未制作复制的操作数堆栈的操作指令的情况下,对操作数堆栈进行的操作能够完全相同地对CPS进行。在第1实施例中,在堆栈上制作复制这样的操作数堆栈的操作指令的情况下,参照有效的源区域和有效的目标区域,在CPS中再现该指令在译码设定时对APS进行的操作。
在第1实施例中,在伴随着对上述CPS的操作、入口地址从CPS弹出的CRF的项目中,将BB区域变更为0,将该入口地址在FL中注册。
在IQ的完成指针所示项目中,当存储指令被写入时,S区域可以进行存储,或己进行了存储时,在LSU中表示出保存上述存储指令的IQ的入口地址,请求进行实际的存储。这样,可以保证数据被有顺序地存储。进而,对CPS和CRF的操作与上述同样地进行,在完成指针的值上加1。
如上所述,通过在完成指针的值上加1,从队列排除的、在IQ的项目中保存的指令变为结束。由于在该指令之前被译码设定的指令已全部结束,指令的完了通过有顺序来进行。
在IQ的完成指针所示的项目中,当S区域为发生例外事情,或己发生了例外事情时,此时通过CPS和CRF,构成程序被有顺序执行的情况下发生例外时的状态,因此能够正确地进行例外处理。为了将发生了例外事情的指令以后被译码设定的指令全部取消,对于写入了将要取消的指令的IQ的项目的有效目标区域中所示的CRF的各个项目,将该BB区域回复为0,通过将该入口地址在FL中注册,并解除分配,将在完成指针的值上加1的内容写入设定指针,从而将保存将要被取消的指令的IQ的项目全部从队列中排除。
以上对本发明的第1实施例的计算机系统的动作进行了整体的说明,接着说明具体的动作例。
现在考虑第1实施例的计算机系统中,执行以下的程序。
dload[A](装入与变量数[A]对应的双倍精度浮点数据)dload[B](装入与变量数[B]对应的双倍精度浮点数据)dadd(双倍精度浮点数据间的加法运算)d2f(双倍精度浮点数据向单精度浮点数据的变换)fload[T](装入与变量数[T]对应的单精度浮点数据)dup-x1(制作栈顶的字的复制,并插入从前头开始第3个字处)fdiv(单精度浮点数据间的除法运算)fsub(单精度浮点数据间的减法运算)fstore[X](将栈顶的单精度浮点数据向与变量名[X]对应的存储区域存储)以上的程序是进行X=T-(A+B)/T的计算,A和B的数据被赋予双倍精度,其间的加法以双倍精度进行运算,将进行加法后的数据变换为单精度,以后以单精度计算。
图6~图12是第1实施例的计算机系统中,用于说明在每个循环处理上述程序时的动作的图,以下根据该图说明具体的动作。在图6~图12中,CRF6和IQ5的各项目的结构分别与图3、图5所示相同。在图6~图12的空白的位置表示不需要注意该区域的内容。为了用时序表示各结构要素的内容,在各部的末尾附上连字符号(hyphen)和与各循环对应的数字。在图6~图12中,APS、CPS、IQ及CRF的各项目从下面开始按照顺序被赋予0、1、2、~的地址。
在本动作例中,为了使说明简单,全部变量数据存储在数据高速缓冲存储器中,不进行CRF和数据高速缓冲存储器间的存储/推入动作(spill/Fill)。因此,BP_OF_PS的值始终为O。
在本动作例中,最初,APS、CPS、IQ及CRF被初始化,CRF的全部入口地址按照顺序(0)、(1)、(2)、(3)…被写入FL中,并按照这个顺序被取出。
以下将各循环的动作分成(A)指令译码设定、(B)执行、(C)完了的各阶段进行详细说明。
(1-A)第1循环的指令译码设定阶段进行指令dload[A]的译码设定。由于是向操作数堆栈推入双倍长字的变量数据的指令,将在FL注册的自由的CRF的2个项目6(0)、6(1)分配,以保存该数据,将该入口地址(0)、(1)推入APS中,APS成为3-1。
在CRF的6(0)、6(1)的各项目中,向BB区域赋予1,在WCF及C的各区域写入0,CRF变为6-1。在这里,在本动作例中,使得从指令译码设定单元送来0,作为始终的转移标记。
由于设定指针的值为0,在IQ的项目5(0)中写入上述指令的内容,IQ的值变为5-1。此时,将推入APS的CRF的入口地址(0)、(1)分别写入第1、第2目标区域。并在设定指针的值上加1。在这里,在本动作例中,如果指令未执行则在IQ的S区域中写入0;如果执行完了/正常结束或可以进行存储指令的存储,则在IQ的S区域中写入1。
将与写入IQ的项目5(0)中的内容相同的上述指令的内容与IQ的入口地址0一起送给LSU。(1-B)第1循环的执行阶段在最初的IQ中,由于不存在写入了可以执行的指令的项目,在执行阶段不进行任何的动作。(1-C)第1循环的完成阶段在最初的IQ的完成指针所示的项目5(O)中,由于指令还未写入,在执行阶段不进行任何的动作。(2-A)第2循环的指令译码设定阶段进行指令dload[B]的译码设定。由于是向操作数堆栈推入双倍字的变量数据的指令,将在FL注册的自由的CRF的2个项目6(2)、6(3)分配,以便保存该数据,将该入口地址(2)、(3)推入APS中,APS成为3-2。
在CRF的6(2)、6(3)的各项目中,向BB区域赋予1,在WCF及C的各区域写入0,CRF变为6-2。
由于设定指针的值为1,在IQ的项目5(1)中写入上述指令的内容,IQ的值成为5-2。此时,将推入APS的CRF的入口地址(2)、(3)分别写入第1、第2目标区域。并在设定指针的值上加1,成为2。
将与写入IQ的项目5(1)的内容相同的上述指令的内容,与IQ的入口地址1一起送给LSU。(2-B)第2循环的执行阶段LSU开始对变量A进行存取。使执行时间(latency)为2循环。
(2-C)第2循环的完成阶段在为5-1的状态的IQ的完成指针所示项目5(0)中,由于S区域为0,作为完成阶段的动作,什么都不进行。(3-A)第3循环的指令译码设定阶段进行指令dadd的译码设定。由于是从操作数堆栈弹出4字的源数据进行运算,并将双倍字运算结果推入的运算指令,从APS弹出(O)、(1)、(2)、(3),将在FL中注册的自由的CRF的2个项目6(2)、6(3)分配,以便保存该数据,将该入口地址(4)、(5)推入APS中,APS成为3-3。
在CRF的6(4)、6(5)的各项目中,向BB区域赋予1,在WCF及C的各区域写入0。
由于设定指针的值为1,在IQ的项目5(2)中写入上述指令的内容。此时,将从APS弹出的CRF的入口地址(0)、(1)、(2)、(3)分别写入第1~第4源区域,将推入APS的(4)、(5)分别写入第1、第2目标区域。从为6-2的状态的CRF的6(0)、6(1)、6(2)、6(3)的各项目中读出WCF区域,分别送给IQ的WCF1~4的各区域。并在设定指针的值上加1,成为3。(3-B)第3循环的执行阶段LSU开始存取变量B。使执行时间(1atency)为2循环。
由于从LSU送来构成变量A的数据的2字A_1、A_2,所以将其分别写入CRF的项目6(0)、6(1)的数据区域,将WCF区域变更为1。然后,在IQ中在各源区域对照CRF的入口地址(0)、(1),此时,由于在同一时刻写入指令的IQ的项目5(2)的第1、第2源区域一致,使相同项目的WCF1、2的各区域为1。(对于WCF3、4的各项目,如(3-A)所述的那样,因为与为6-2状态的CRF对应的项目的WCF区域被读出并被送来,将其写入。)如上所述,因为写入IQ的项目5(0)的指令的执行正常结束,将5(0)的S区域变更为表示正常结束的1。(3-C)第3循环的完成阶段在为5-2的状态的IQ的完成指针所示项目5(0)中,因为S区域为0,作为完成阶段的动作,不进行任何的动作。(4-A)第4循环的指令译码设定阶段进行指令d2f的译码设定。由于是从操作数堆栈弹出2字的源数据进行运算、并将单字的运算结果推入的运算指令,从APS弹出(4)、(5),将在FL注册的自由的CRF的项目6(6)分配,以保存运算结果,将该入口地址(6)推入APS中,APS成为3-4。
在CRF的项目6(6)中,向BB区域赋予1,在WCF及C的各区域中写入0。
由于设定指针的值为3,在IQ的项目5(3)中写入上述指令的内容。此时,将从APS弹出的CRF的入口地址(4)、(5)分别写入第1~第2源区域,将推入APS的(6)写入第1目标区域。在为6-3状态的CRF的6(4)、6(5)的各项目中读出WCF区域,分别送给IQ的WCF1、2的各区域。并在设定指针的值上加1,成为4。(4-B)第4循环的执行阶段由于从LSU送来构成变量B的数据的2字B_1、B_2,将其分别写入CRF的项目6(2)、6(3)的数据区域,将WCF区域变更为1。然后,在IQ中在各源区域对照CRF的入口地址(2)、(3),此时,由于在IQ的项目5(2)的第3、第4源区域一致,使相同项目的WCF3、4的各区域为1。
如上所述,因为写入IQ的项目5(1)中的指令的执行正常结束,将5(1)的S区域变更为表示正常结束的1。(4-C)第4循环的完成阶段在为5-3的状态的IQ的完成指针所示项目5(0)中,因为S区域为1,根据5(0)的内容操作CPS(及CRF)。即,将写入IQ的项目5(0)目标区域的(0)、(1)推入CPS,CPS成为4-4。并在完成指针的值1上加1,由此结束5(0)的指令。(5-A)第5循环的指令译码设定阶段进行指令fload[T]的译码设定。由于是将单字的变量数据装入操作数堆栈的指令,将在FL中注册的自由的CRF的项目6(7)分配,以便保存该数据,将该入口地址(7)推入APS中,APS成为3-5。
在CRF的项目6(7)中,向BB区域赋予1,在WCF及C的各区域写入0。
由于设定指针的值为4,在IQ的项目5(4)中写入上述指令的内容。此时,将推入APS的、CRF的入口地址(7)写入第1目标区域。并在设定指针的值上加1,成为5。
将与写入IQ的项目5(4)的内容相同的上述指令内容,和IQ的入口地址4一起送给LSU。(5-B)第5循环的执行阶段在为5-4的状态的IQ中,由于WCF区域全部为1,将写入运算指令的项目5(2)的内容与该入口地址2及写入CRF6(0)、6(1)、6(2)、6(3)的各项目中的源数据一起送给运算单元0,开始运算。该运算的执行时间(latency)被设为2个循环。(5-C)第5循环的完成阶段在为5-4的状态的IQ的完成指针所示项目5(1)中,因为S区域为1,根据5(1)的内容操作CPS(及CRF)。即,将写入IQ的项目5(1)的目标区域中的(2)、(3)推入CPS,CPS成为4-5。并在完成指针的值1上加1,成为2,由此结束5(1)的指令。(6-A)第6循环的指令译码设定阶段进行指令dup_x1的译码设定。由于指令dup_x1是这样一种操作指令,即当字堆栈(作为向右方向增长的字堆栈)为…,word1,word2的状态时,将其变为…,word2,word1,word2的、在堆栈上制作单字的复制的操作数堆栈的操作指令,所以将在FL中注册的自由的CRF的项目6(8)分配,以便保存复制数据,将像3-5那样从下方开始为(6)、(7)的状态的ABS像3-6那样变为(8)、(6)、(7)。
在CRF的6(8)的各项目中,向BB区域赋予1,在WCF及C的各区域写入0。
由于设定指针的值为5,在IQ的项目5(5)中写入上述指令的内容。此时,将为保存作为复制源的数据而被分配的、CRF的入口地址(7)写入第1源区域,将保存复制数据而被重新分配的、CRF的入口地址(8)写入第1目标区域。在为6-5的状态的CRF的项目6(7)中读出WCF区域,送给IQ的WCF1。并在设定指针的值上加1,成为6。(6-B)第6循环的执行阶段LSU开始对变量T进行存取。使执行时间为2循环。
如果运算单元0执行5(2)的运算指令正常结束,由于构成运算结果的2字(A+B)_1、(A+B)_2被送来,并分别写入CRF的项目6(4)、6(5)的数据区域,将WCF区域变更为1。然后,在IQ中在各源区域对照CRF的入口地址(4)、(5),此时,由于IQ的项目5(3)在第1、第2源区域一致,使相同项目的WCF1、2的各区域为1。
如上所述,因为写入IQ的项目5(2)的指令的执行正常结束,将5(2)的S区域变更为表示正常结束的1。(6-C)第6循环的完成阶段在为5-5的状态的IQ的完成指针所示项目5(2)中,因为S区域为0,在完成阶段不进行任何动作。(7-A)第7循环的指令译码设定阶段进行指令fdiv的译码设定。由于是从操作数堆栈弹出2字的源数据进行运算、并将单字的运算结果推入的运算指令,从APS弹出(6)、(7),将在FL注册的自由的CRF的项目6(9)分配,以保存该数据,将该入口地址(9)推入APS中,APS成为3-7。
在CRF的项目6(9)中,向BB区域赋予1,在WCF及C的各区域写入0。
由于设定指针的值为6,在IQ的项目5(6)中写入上述指令的内容。此时,将从APS弹出的CRF的入口地址(6)、(7)分别写入第1、第2源区域,将推入APS的(9)写入第1目标区域。在为6-6的状态的CRF的6(6)、6(7)的各项目中读出WCF区域,分别送给IQ的WCF1、2的各区域。并在设定指针的值上加1,成为7。(7-B)第7循环的执行阶段在为5-6的状态的IQ中,由于有效的WCF区域全部为1,将写入运算指令的项目5(3)的内容与该入口地址3及写入CRF6(4)、6(5)的各项目中的源数据一起送给运算单元0,开始运算。该运算的执行时间(latency)被设为2循环。
由于从LSU送来构成变量T的数据,将其写入CRF的项目6(7)的数据区域,将WCF区域变更为1。然后,在IQ在各源区域对照CRF的入口地址(7),此时,由于IQ的项目5(5)的第1源区域及在同一时刻写入指令的5(6)的第2源区域一致,使5(5)的WCF1区域和5(6)的WCF2区域为1。(对于5(6)的WCF1区域,如(7-A)所述的那样,由于为6-6状态的CRF的项目6(6)的WCF区域被读出并被送来,将其写入)。
如上所述,因为写入IQ的项目5(4)的指令的执行正常结束,将5(4)的S区域变更为表示正常结束的1。(7-C)第7循环的完成阶段在为5-4的状态的IQ的完成指针所示项目5(1)中,因为S区域为1,根据5(2)的内容操作CPS及CRF。即,将写入IQ的项目5(2)的目标区域中的(0)、(1)、(2)、(3)从CPS弹出,将写入目标区域中的(4)、(5)推入CPS,CPS成为4-7。在入口地址从CPS弹出的CRF的6(0)、6(1)、6(2)、6(3)的各项目中,将BB区域变更为0。将CRF的入口地址(0)、(1)、(2)、(3)在FL中注册。并在完成指针的值1上加1,成为3,由此结束5(2)的指令。(8-A)第8循环的指令译码设定阶段进行指令fsub的译码设定。由于是从操作数堆栈弹出2字的源数据进行运算,并将单字的运算结果推入的运算指令,从APS弹出(8)、(9),将在FL注册的自由的CRF的项目6(10)分配,以便保存该运算结果,将该入口地址(10)推入APS中,APS成为3—8。
在CRF的项目6(10)中,向BB区域赋予1,在WCF及C的各区域写入0。
由于设定指针的值为7,在IQ的项目5(7)中写入上述指令的内容。此时,将从APS弹出的CRF的入口地址(8)、(9)分别写入第1~第2源区域,将推入APS的(10)写入第1目标区域。在为6-7的状态的CRF的6(8)、6(9)的各项目中读出WCF区域,分别送给IQ的WCF1、2的各区域。并在设定指针的值上加1,成为8。(8-B)第8循环的执行阶段如果运算单元0执行5(3)的变换运算指令正常结束,由于单字的运算结果(A+B)被送来,所以将其写入CRF的项目6(6)的数据区域,将WCF区域变更为1。然后,在IQ中在各源区域对照CRF的入口地址(6),此时,由于在IQ的项目5(6)的第1源区域一致,使相同项目的WCF1区域为1。
如上所述,因为写入IQ的项目5(3)的指令的执行正常结束,将5(3)的S区域变更为表示正常结束的1。
在为5-7的状态的IQ中,由于有效的WCF区域为1,写入了在堆栈上制作复制这样的操作数堆栈的操作指令的项目5(5),执行数据的复制。即,从CRF的项目6(7)读出数据,将其写入CRF的项目6(8)的数据区域,将WCF区域变更为1。然后,在IQ在各源区域对照CRF的入口地址(8),此时,由于在同一时刻写入指令的IQ的项目5(7)的第1源区域一致,使相同项目的WCF1区域为1。(对于WCF2区域,如(8-A)所述的那样,由于为6-7状态的CRF的项目6(9)的WCF区域被读出并被送来,将其写入)。将IQ的项目5(5)的S区域变更为表示正常结束的1。(8-C)第8循环的完成阶段在为5-7的状态的IQ的完成指针所示项目5(3)中,因为S区域为0,在完成阶段不进行任何动作。(9-A)第9循环的指令译码设定阶段进行指令fstore[X]的译码设定。由于该指令是位于栈顶的单字数据的存储指令,从APS弹出(10),APS成为3-9。
由于设定指针的值为8,在IQ的项目5(8)中写入上述指令的内容。此时,将从APS弹出的、CRF的入口地址(10)写入第1源区域。在为6-8的状态的CRF的项目6(10)中读出WCF区域,送给IQ的WCF1区域。并在设定指针的值上加1,成为9。
将与写入IQ的项目5(8)的内容相同的上述指令的内容,和IQ的入口地址8一起送给LSU。(9-B)第9循环的执行阶段在为5-8的状态的IQ中,由于有效的WCF区域全部为1,写入运算指令的项目5(6)的内容与该入口地址6及写入CRF6(6)、6(7)的各项目中的源数据一起送给运算单元1,开始运算。该运算的执行时间被设为10循环。(9-C)第9循环的完成阶段在为5—8的状态的IQ的完成指针所示项目5(3)中,因为S区域为1,根据5(3)的内容操作CPS及CRF。即,将写入IQ的项目5(3)目标区域中的(4)、(5)从CPS弹出,将写入目标项目中的(6)从CPS弹出,CPS成为4-9。在入口地址被从CPS弹出的CRF的6(4)、6(5)的各项目中,将BB区域变更为0。将CRF的入口地址(4)、(5)在FL中注册。并在完成指针的值1上加1,成为4,由此结束5(3)的指令。(10-C)第10循环的完成阶段在为5-9的状态的IQ的完成指针所示项目5(4)中,因为S区域为1,根据5(4)的内容操作CPS(及CRF)。即,将写入IQ的项目5(4)目标区域中的(7)从CPS弹出,CPS成为4-10。并在完成指针的值1上加1,成为5,由此结束5(4)的指令。(11-C)第11循环的完成阶段在为5-10的状态的IQ的完成指针所示项目5(5)中,因为S区域为1,根据5(5)的内容操作CPS(及CRF)。即,将(6-A)的APS的动作再现,CPS成为4-11。并在完成指针的值1上加1,成为6,由此结束5(5)的指令。(18-B)第18循环的执行阶段如果运算单元1执行5(6)的运算指令正常结束,由于单字的运算结果(A+B)/T被送来,所以将其写入CRF的项目6(9)的数据区域,将WCF区域变更为1。然后,在IQ中在各源区域对照CRF的入口地址(9),此时,由于在IQ的项目5(7)的第2源区域一致,使相同项目的WCF2区域为1。
如上所述,因为写入IQ的项目5(6)中的指令的执行正常结束,将5(6)的S区域变更为表示正常结束的1。(19-B)第19循环的执行阶段在为5-18的状态的IQ中,由于有效的WCF区域全部为1,写入运算指令的项目5(7)的内容与该入口地址7及写入CRF6(8)、6(9)的各项目中的源数据一起送给运算单元0,开始运算。该运算的执行时间被设为2循环。(19-C)第19循环的完成阶段在为5-18的状态的IQ的完成指针所示项目5(6)中,因为S区域为1,根据5(6)的内容操作CPS及CRF。即,将写入IQ的项目5(6)的目标区域中的(6)、(7)从CPS弹出,将写入目标项目的(9)推入CPS,CPS成为4-19。在入口地址被从CPS弹出的CRF的6(6)、6(7)的各项目中,将BB区域变更为0。将CRF的入口地址(6)、(7)在FL中注册。并在完成指针的值上加1,成为7,由此结束5(6)的指令。(20-B)第20循环的执行阶段如果运算单元0执行5(7)的运算指令正常结束,由于单字的运算结果T-(A+B)/T被送来,所以将其写入CRF的项目6(10)的数据区域,将WCF区域变更为1。然后,在IQ中在各源区域对照CRF的入口地址(10),此时,由于在IQ的项目5(8)的第1源区域一致,使相同项目的WCF1区域为1。
如上所述,因为写入IQ的项目5(7)中的指令的执行正常结束,将5(7)的S区域变更为表示正常结束的1。(21-B)第21循环的执行阶段在为5-20的状态的IQ中,由于有效的WCF区域全部为1,写入了存储指令的项目5(8)的内容与IQ的入口地址8及写入CRF的项目6(10)中的源数据一起送给LSU。将5(8)的S区域变更为表示正常结束的1。(21-C)第21循环的完成阶段在为5—20的状态的IQ的完成指针所示项目5(7)中,因为S区域为1,根据5(7)的内容操作CPS及CRF。即,将写入了IQ的项目5(7)中的目标区域(8)、(9)从CPS弹出,将写入目标项目中的(10)推入CPS,CPS成为4-21。在入口地址被从CPS弹出的CRF的6(8)、6(9)的各项目中,将BB区域变更为0。将CRF的入口地址(8)、(9)在FL中注册。并在完成指针的值上加1,成为8,由此结束5(7)的指令。(22-C)第22循环的完成阶段在为5-21的状态的IQ的完成指针所示项目5(8)中,因为存储指令被写入,S区域为1,所以在LSU中显示IQ的入口地址8,请求执行向数据高速缓冲存储器存储。进而根据5(8)的内容操作CPS及CRF。即,将写入IQ的项目5(8)的源区域中的(10)从CPS弹出,CPS成为4-22。在入口地址被从CPS弹出的CRF的项目6(10)中,将BB区域变更为0。将CRF的入口地址(10)在FL中注册。并在完成指针的值上加1,成为9,由此结束5(8)的指令。
通过以上过程,在第1实施例的计算机系统中对X=T-(A+B)/T的计算结束。
在本发明的计算机系统中,可以实现根据转移预测的投机性执行的。具备APS历史记录文件是为了能够进行投机性执行的。在条件转移指令每次被译码时,将APS的全部项目和PP_OF_APS的内容写入APS历史记录文件的1个项目中。以下,说明在计算机系统中,怎样进行根据转移预测的投机性执行的。
如上所述,在本实施例的计算机系统中,在指令译码设定阶段,对指令译码,根据指令的内容操作APS和CRF,并将指令的内容写入IQ。从初始状态开始到指令流动开始、最初的条件转移指令被译码之间,向被译码的指令赋予作为转移标记的0,将该转移标记0写入指令的内容被写入了的IQ的项目的BT区域、及被分配的CRF的项目的C区域。
在最初的条件转移指令被译码、进行转移预测时,为了保存转移时的状态,将APS的全部项目和PP_OF_APS的内容写入APS历史记录文件的地址0的项目。在根据上述转移预测的指令流中,赋予作为转移标记的1,对IQ和CRF进行设定。
当第2个条件转移指令被译码时,在最初的条件转移指令未确定的情况下,或已确定预测正确时,将APS的全部项目和PP_OF_APS的内容写入APS历史记录文件的地址1的项目。在根据第2个转移预测的指令流中,赋予作为转移标记的2,对IQ和CRF进行设定。
如果转移预测继续准确,以后进行同样的处理,向APS历史记录文件的写入按照地址的顺序进行。而且,从开始向APS历史记录文件的地址n的项目写入到进行下一次写入为止,向被译码的指令赋予作为转移标记的n+1。
当转移预测错误时,根据向该条件转移指令以后被译码的指令赋予的转移标记,取消送给运算单元、转移单元和LSU的各执行单元的指令,在CRF中,在C区域对照转移标记,对该一致的各个项目,将该BB区域变更为0,将该入口地址在FL注册,在写有该条件转移指令的项目的下一个地址中,变成写为IQ的设定指针的值,使该条件转移指令以后被译码设定的指令无效。进而,在位于相同入口地址的CPS的项目及与该内容不一致的APS的各项目及PP_0F_APS中,在该条件转移指令被译码时,将写入APS历史记录文件中的内容复制,根据正确的指令重新开始处理。
如上所述,在本发明的计算机系统中,通过利用APS历史记录文件,可以再构成条件转移指令被译码、进行转移预测的各个时刻的状态,所以能够进行根据转移预测的投机性执行的。
在上述中,为了使说明简单,对在一个循环可以同时译码设定/完了的指令一个个分别进行了说明。在本发明的计算机系统中,可以同时对多个指令进行译码设定/完了。即,如果FL为FIFO队列的结构,则为了分配而从FL中取出自由的CRF的入口地址的顺序被确定,从而可以把握各指令的弹出多少字、推入多少字这样的堆栈操作的内容,并可以同时对多个指令进行译码设定。在指令的完了动作中,由于预先严格地决定各指令对CPS的堆栈操作,能够容易地实现多个指令的同时结束。
当能够同时译码设定/完了的指令的数量越多,则指令译码设定单元及其它控制电路变得复杂,构成IQ和CRF的各寄存器文件的入口(port)的数量和在IQ的各项目的每个源区域设有的比较电路的数量、运算单元的数量、及结合结构单元间的总线的数量等硬件的数量需要的更多。
在本发明的计算机系统中,将译码设定分为2个阶段进行,在前半阶段,可以同时将译码设定的多个指令的内容以统一的形式变换。
例如,在一个循环中能够对3个指令译码设定的情况下,计算上述X=T-(A+B)/T的程序被变换为图13的图表所示的内容。在图13的图表的各段中,表示了根据同时译码设定的3个指令,PP_OF_APS的增加部分、APS的操作内容、及将要在IQ的3个项目中写入的设定内容。在这里,将设定前的APS的内容记述为…s1,s2,s0(右端为栈顶),将作为FIFO队列的构成的自由表的内容(按照取出的顺序)记述为f1,f2,f3…,在译码设定的后半的阶段中,将各个对应的CRF的入口地址写入APS/IQ中。如PP_OF_APS的增加部分栏中所示,APS的栈顶的位置产生移动,但在APS的操作内容的栏中,该移动后的栈项的位置与右端对应。另外,‘NC’表示“没有变化(NoChang)”。
接着说明本发明的第2实施例的计算机系统。
第2实施例的操作数堆栈的操作指令的处理方法与第1实施例不同。
第2实施例的计算机系统与1第实施例在关于综合寄存器文件(CRF)6的项目的结构上不同,但在计算机系统的基本结构、前进指针堆栈(APS)3、完成指针堆栈(CPS)4、指令队列(IQ)5的结构上则相同。
图14是第2实施例的CRF6的各个项目6(i)的具体结构的说明图。在这里,i是入口地址。CRF的各个项目6(i)由数据区域61(i)、写入完了标记(WCF,Write Completion Flag)区域62(i)、颜色(C,Colour)区域63(i)、执行位(BB)区域64(i)及参照数(NR,Number of reference)区域65构成。
CRF的各个项目的数据区域及WCF、C、BB的各区域与第1实施例相同。
在CRF的各个项目中,在NR区域写入保存该CRF的入口地址的CPS的项目数量。
即,随着根据CRF和数据高速缓冲存储器间的存储/装入的动作及指令的完了对CPS进行的操作,在CRF的相关的项目中,进行保存该入口地址的CPS的项目的数量的更新。
在第2实施例中,从CRF向数据高速缓冲存储器存储单字的数据按照以下进行。此时,BP_OF_PS所示的项目内容必须在APS和CPS一致,将写入CRF的项目中的单字的数据存储在数据高速缓冲存储器中,将BP_OF_PS的值加1,其中,该CRF的项目是由在上述二个指针堆栈一致的BP_OF_PS所示的项目的内容所表示。进而,在上述CRF的项目中,从NR区域的值减去1。其结果,如果该值为0,将该CRF的项目的BB区域变更为0,将该入口地址在FL中注册。
反之,从数据高速缓冲存储器向CRF装入单字的数据如下进行。即,将最后存储的单字的数据从数据高速缓冲存储器取出,将在FL注册的自由的CRF的一个项目分配,写入该数据区域。使WCF、NR、BB的各区域为1。进而,将该被分配的CRF的入口地址分别写入APS及CPS的BP_OF_PS所示项目的下一个项目,将BP_OF_PS的值减去1。
在指令的处理中,第2实施例的计算机系统和第1实施例大致相同,以下为了明确在各阶段与第1实施例的不同点,说明第2实施例的计算机系统的动作。(1)、取指令阶段与第1实施例相同。(2)、指令译码设定阶段除了以下几点,与第1实施例相同。
在随着指令的译码设定被重新分配的CRF的项目中,在NR区域中写入0。
在操作数堆栈的操作指令的情况下,对APS的操作与对操作数堆栈进行的操作完全相同。在将该指令的内容写入IQ时,使S区域为执行完毕。另外,在堆栈上制作复制这样的操作数堆栈的操作指令(Java VM的dup,dup2,dup_x1,dup2_x1,dup_x2,及dup2_x2)的情况下,不将注册在FL中的自由的CRF的项目重新分配,所以,不需要向源区域和目标区域进行写入。(3)、执行阶段除了以下几点,与第1实施例相同。
关于操作数堆栈的操作指令,与在堆栈上制作复制这样的指令的情况相同,在执行阶段不进行任何动作。(4)、完成阶段除了以下各点,与第1实施例相同。
对于操作数堆栈的操作指令的完了,在堆栈上制作复制这样的指令的情况时,对操作数堆栈进行的操作与对CPS的操作完全相同(为了将指令被译码设定时的APS的动作再现而对CPS操作,从这个观点看与第1实施例相同)。
随着指令的完了对CPS的操作,使相关的CRF的项目的NR区域的值增减。即,在入口地址被推入CPS中的CRF的项目中,将NR区域的值从0变更为1,当伴随着在堆栈上制作复制这样的操作数堆栈的操作指令的完了,在入口地址被复制在CPS上的CRF的项目中,在NR区域的值上加1,在入口地址被从CPS弹出的CRS的项目中,从NR区域的值中减去1。
随着根据指令的完了对CPS的操作,在入口地址被从CPS弹出的CPS的项目中,只有在NR区域的值为0时,将BB区域变更为0,将该入口地址在FL中注册。
以上是对第2实施例的计算机系统的动作进行的整体的说明。
图15~图21是在第2实施例的计算机系统中,在每个循环中对上述X=T-(A+B)/T计算的程序进行处理时的动作的说明图。图中CRF6和IQ5的各项目的结构分别与图14、图5的结构相同。图15~图21中空白的位置,表示不需要对该区域的内容予以注意。为了用时序表示各结构单元的内容,在各个部分的符号的末尾增添连字符和与各循环对应的数字,而为了与第1实施例中表示动作例的图6~图12的符号加以区别,增添字符“a”。
本发明的计算机系统不限于上述的实施例,存在有局部结构不同的各种实施例。例如可以有下述的结构。
(1)、IQ在各个项目中也写入源数据,在IQ中,与在对应的WCF区域赋予1相同的时刻写入源数据。
(2)、在各执行单元的输入部分设置保存区(reservationstation),在指令译码设定阶段,将各个指令的内容写入IQ,并分别送给适当的保存区(关于LSU,可以同时具有保存区和存储缓冲器)。
(3)、具有不同数据类型的CRF和自由表,如整数数据用/浮点数数据用、或32比特用/64比特数据用的数据类型。而且设有与之对应的一组执行单元。
这些实施例大多在寄存器基本(しジスタ·ベ一ス)的超标量体系结构(superscalar architecture)中可以找到相同的主要部分。
根据本发明,可以实现指令系统包括堆栈类型的指令和寄存器类型的指令的计算机系统。即,除了具有前进指针堆栈和完成指针堆栈,还具有前进寄存器图表和完了寄存器图表,其中,该寄存器图表是在与寄存器编号对应而设置的各项目中写入综合寄存器文件的入口地址。对于堆栈类型的指令,操作前进/完成指针堆栈,对于寄存器类型的指令,存取前进/完了寄存器图表。此时,需要在各个项目中写入前进指针堆栈和前进寄存器图表两种内容的前进历史记录文件,来取代前进指针堆栈历史记录文件。
产业上的可利用性如上所述,本发明的计算机系统可以保证正确地进行例外处理,将用堆栈机器的机器语言描述的程序以无顺序的方式来处理,还具有通过多个运算单元的并行处理和其流水线化进行有效的处理的优点。
通过根据转移预测进行投机性执行和在一个循环进行多个指令的译码设定,可以进行高速化处理。
权利要求
1.一种计算机系统,包括数据高速缓冲存储器(11);综合寄存器文件(6),在各个项目中写入数据;前进指针堆栈(3),其是将上述综合寄存器文件(6)的入口地址写入各个项目中的堆栈结构;指令队列(5),其是一种将各个指令的内容写入各个项目所构成的FIFO(先进先出)队列的结构;运算单元(80、81),用于进行运算;装入/存储单元(83),能够对上述数据高速缓冲存储器(11)和上述综合寄存器文件(6)进行存取,当包含对操作数堆栈的弹出操作的指令被译码时,将与要弹出的字数正好相同数量的上述综合寄存器文件(6)的入口地址从上述前进指针堆栈(3)弹出,当包含对操作数堆栈的推入操作的指令被译码时,对与要推入的字数正好相同数量的未分配的上述综合寄存器文件(6)的项目进行分配,将上述已分配的上述综合寄存器文件(6)的入口地址推入上述前进指针堆栈(3),将被译码的指令的内容与伴随着弹出/推入操作的指令而被弹出/推入的上述综合寄存器文件(6)的入口地址一起写入上述指令队列(5),根据数据驱动的原理,处理在上述指令队列(5)中保存的未执行的指令,执行用堆栈机器的机器语言描述的程序。
2.根据权利要求1所述的计算机系统,其具有完成指针堆栈(4),该完成指针堆栈(4)是一种将上述综合寄存器文件(6)的入口地址写入各个项目中的堆栈的结构,当在上述指令队列(5)的前头的项目中被保存的指令可能完了时,或已经完了时,根据上述指令队列(5)的上述前头的项目内容,操作上述完成指针堆栈(4),以便再现当上述保存的指令被译码时上述前进指针堆栈(3)的动作,从上述指令队列(5)将上述前头的项目排出,解除由于弹出操作使上述完成指针堆栈(4)的地址失去保存的上述综合寄存器文件(6)的项目的分配。
3.根据权利要求2所述的计算机系统,其还具有保存未被分配的上述综合寄存器文件(6)的入口地址的自由表,在初始状态下,将上述综合寄存器文件(6)的所有的入口地址在上述自由表上注册,当需要将上述综合寄存器文件(6)的项目分配时,从上述自由表中取出未被分配的上述综合寄存器文件(6)的入口地址,将解除分配的上述综合寄存器文件(6)的入口地址在上述自由表中注册。
4.根据权利要求2所述的计算机系统,上述前进指针堆栈(3)和上述完成指针堆栈(4)为循环型的缓冲器的结构,当在上述前进指针堆栈(3)和上述完成指针堆栈(4)中,保存上述综合寄存器文件(6)的入口地址的最下位的项目内容一致时,在上述前进指针堆栈(3)和上述完成指针堆栈(4)中解除对上述最下位的项目的上述综合寄存器文件(6)的入口地址的保存,使得在上述一致的内容所示的上述综合寄存器文件(6)的项目中写入的数据能够在上述数据高速缓冲存储器(11)中存储(spill),将未被分配的上述综合寄存器文件(6)的1个项目分配给上述数据高速缓冲存储器(11)中最后存储的数据,将上述数据写入,在上述前进指针堆栈(3)和上述完成指针堆栈(4)中,通过在保存上述综合寄存器文件(6)的入口地址的最下位的项目的下面一个项目中,将写入上述数据的上述综合寄存器文件(6)的入口地址保存,从而能够将上述最后存储(spill)的数据装入上述综合寄存器文件(6)。
5.根据权利要求2所述的计算机系统,其还具有将上述前进指针堆栈(3)的内容写入各个项目中的前进指针堆栈历史记录文件(3a),上述综合寄存器文件(6)将转移标记也写入各个项目,在进行指令的译码时,将转移标记写入被分配的上述综合寄存器文件(6)的项目,在每次条件转移指令被译码时,将上述前进指针堆栈(3)的内容写入上述前进指针堆栈历史记录文件(3a)的一个项目中,变更转移标记,进行根据转移预测的投机性执行,当转移预测错误时,使该条件转移指令以后被译码的指令无效,解除上述综合寄存器文件(6)的项目的分配,其中,在上述条件转移指令以后被译码的指令上附加的转移标记被写入上述综合寄存器文件(6);将在上述条件转移指令被译码时进行写入的上述前进指针堆栈历史记录文件(3a)的项目内容,在上述前进指针堆栈(3)复制,根据正确的位置的指令重新开始处理,由此,进行根据转移预测的投机性执行。
6.根据权利要求3所述的计算机系统,上述自由表为FIFO队列的结构,其还具有下列功能同时对多个指令译码,进行上述前进指针堆栈(3)的操作、对上述综合寄存器文件(6)的项目进行分配、和将指令的内容写入上述指令队列(5)的连续的多个项目的功能;根据同时写入上述指令队列(5)的连续的多个项目中的内容,进行上述完成指针堆栈(4)的操作和解除对上述综合寄存器文件(6)的项目进行分配的功能。
全文摘要
本发明的计算机系统,执行用堆栈机器的机器语言描述的程序。包括:数据高速缓冲存储器11;综合寄存器文件6;前进指针堆栈3;指令队列5;进行运算的运算单元80、81;装入/存储单元83,当在上述指令队列5的前头的项目中被保存的指令可能完了时,或已经完了时,根据指令队列的前头的项目内容,操作完成指针堆栈,以便再现当保存的指令被译码时前进指针堆栈的动作,从指令队列将前头的项目排出。
文档编号G06F9/318GK1279782SQ98811324
公开日2001年1月10日 申请日期1998年11月19日 优先权日1997年11月20日
发明者关一 申请人:关一
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1