專利名稱:計算機系統(tǒng)的制作方法
技術領域:
本發(fā)明是關于高速處理用堆棧機器的機器語言描述的程序的新結構的計算機系統(tǒng)。
在這種現(xiàn)有堆棧機器中,由于按照程序上的順序(in-order)執(zhí)行,所以具有控制結構簡單的優(yōu)點,但是問題是處理速度受到制約。
為此,曾提出了用out-of-order(不按順序)處理由堆棧機器的機器語言描述的程序的計算機方式。例如,在日本特公平2-260082號,美國專利第5522051號、美國專利第5333320號及美國專利第5765014號中的處理器單元。在這些說明書中所示的處理器在提高處理性能方面是不充分的,同時在保證正確的例外處理方面存在問題。
本發(fā)明為了解決上述問題,其目的在于提供一種計算機系統(tǒng),可保證正確的例外處理,可以不按順序(out-of-order)對由堆棧機器的機器語言描述的程序進行更有效地處理。
發(fā)明的公開本發(fā)明所述的計算機系統(tǒng),具有數據高速緩沖存儲器;數據緩沖器;在各個入口寫入數據的綜合寄存器文件;在各個入口寫入綜合寄存器文件的入口地址的前進指針堆棧和結束指針堆棧;在各個入口寫入各個指令內容的構成FIFO(先進先出)隊列的指令緩沖器;包含進行運算的運算單元和存取和數據緩沖器以及數據高速緩沖器的裝入/存儲單元的功能單元群;在綜合寄存器文件和功能單元群之間,將數據連同綜合寄存器文件的入口地址進行分配的共用數據總線。上述各種功能單元,都具有適當數量的保留站。
在過去的堆棧中,堆棧為......、字1、字2、字3、字4(右端是棧頂)的狀態(tài),在本發(fā)明所述的計算機系統(tǒng)中所對應的狀態(tài)為,指針堆棧是......、[a]、[b]、[c]、[d](右端是棧頂),入口地址是[a]、[b]、[c]、[d]的綜合寄存器文件的各個入口分別保持字1、字2、字3及字4。
本發(fā)明所述的計算機系統(tǒng)中,每當指令被譯碼時,對應指令的內容,操作前進指針堆棧以及綜合寄存器文件,同時將指令的內容寫入指令緩沖器,在需要的時候,寫入適當功能單元空置的保留站上。此時,對指令所規(guī)定的操作數堆棧的堆棧操作,同樣也適用于前進指針堆棧。這里,對1字數據的操作數堆棧的壓入操作,在本發(fā)明所述的計算機系統(tǒng)仿真時,只要對需要保持該數據的綜合寄存器文件空著的1個入口進行分配,將這個入口的地址壓入前進指針堆棧就可以。
也就是說,在譯碼的指令中,對操作數堆棧規(guī)定彈出操作時,從前進指針堆棧只彈出與應彈出語句數相同數量的綜合寄存器文件的入口地址。在譯碼的指令中,對操作數堆棧規(guī)定壓棧操作時,只分配和應壓入語句數相同數量的綜合寄存器文件空著的入口地址,將上述分配的綜合寄存器文件入口地址,壓入前進指針堆棧。而且,如果是伴有彈出/壓棧操作的指令,則將譯碼的指令內容連同被彈出/壓入的綜合寄存器文件的入口地址,寫入指令緩沖器。功能單元的指令需要運行時,將寫入指令緩沖器的指令內容,也寫入適當功能單元空著的保留站上。
當讀出從前進指針堆棧彈出入口地址的綜合寄存器文件入口的各個內容,數據已經寫入時,過后,將入口地址和數據送往共用數據總線。
對于寫入保留站的指令,原則上,按照以下順序進行工作。在各個保留站,比較應保持寫在保留站里的源數據的綜合寄存器文件的入口地址和通過共用數據總線送進來的數據,如果一致,就取出數據。需要的源數據齊全以后,開始運行指令。譯碼時,如果是向前進指針堆棧壓入綜合寄存器文件入口地址的指令,將功能單元上運行結果得到的數據,連同這個被壓入的綜合寄存器文件入口地址,放置在共用數據總線上。在綜合寄存器文件中,依據通過共用數據總線送來的內容,進行數據寫入。
當該指令緩沖器中隊列的起始入口所保持的指令可以結束,或者已經結束時,根據該隊列的起始入口的內容,操作該結束指針堆棧,使該保持的指令譯碼時該前進指針堆棧的動作再現(xiàn),從該隊列解除起始的入口,依據彈出操作,解除在該結束指針堆棧中結束了地址保持的該綜合寄存器文件入口的分配。
第2圖表示前進指針堆棧及結束指針堆棧的構成圖。
第3圖表示綜合寄存期文件的各個入口的詳細構成圖。
第4圖表示指令緩沖器的構成圖。
第5圖表示指令緩沖器的各個入口的詳細構成圖。
第6圖~第14圖是具體表示本發(fā)明的一實施例的一操作例的每個循環(huán)的前進指針堆棧、結束指針對棧、指令緩沖器及綜合寄存器文件內容的說明圖。
第15圖是當本發(fā)明的計算機系統(tǒng)采用每1循環(huán)2個指令就可解碼的構成時,具體表示程序如何變換的圖表。
發(fā)明的最佳實施例下面參照附圖對本發(fā)明所涉及的最佳計算機系統(tǒng)進行說明。下面所述的本發(fā)明的計算機系統(tǒng)的實施例用硬件執(zhí)行由Java VirtualMachine(Java VM)所規(guī)定的堆棧機器的基本指令。即,數據字長為32位,以此為單位執(zhí)行裝入/存儲及算術邏輯運算等的運算。從而,例如在二倍字長間的算術運算是將每2字合在一起,以4字的源數據為基礎產生2字的運算結果。
在現(xiàn)有的堆棧機器上,以字為單位對數據進行壓入/彈出的堆棧為了與下述的指針堆棧相區(qū)別,以后稱為字堆棧。
在Java VM中,每當方法被調出時,幀在字堆棧中進行積累。在各幀中,下部為局部變量及參數的放置區(qū)域,而上部為操作數堆棧。
在Java VM中,包括有原來由硬件不能執(zhí)行的復雜指令,但是以下所述的本發(fā)明的計算系統(tǒng)的實施例,由硬件執(zhí)行下面的基本指令。
(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圖是計算機系統(tǒng)的方框圖,10是指令高速緩沖存儲器、11是數據高速緩沖存儲器、12是數據緩沖器、20是指令取出單元、21是指令解碼發(fā)行單元、3是前進指針堆棧、3a是前進指針堆棧歷史文件、4是結束指針堆棧、5是指令緩沖器、6是綜合寄存器文件、7是獨立表、8是公用數據總線、80及81是各運算單元0及1、82是分支單元、83是裝入/存儲單元、801、802、811、812、821、822、831及832是保留站。
下面按本發(fā)明實施例的計算機系統(tǒng)的各構成單元說明其詳細構成。
(A)指令取出單元指令取出單元具有圖中未畫出的程序計數器(PC寄存器),從指令高速緩沖存儲器取出指令,轉給指令解碼發(fā)行單元。也擔當分支的預測及分支的執(zhí)行。
(B)指令解碼發(fā)行單元指令解碼發(fā)行單元對指令取出單元轉來的指令進行解碼,程序中包括的指令為了由out-of-order執(zhí)行,而產生用于設定下述的前進指針堆棧、指令緩沖及綜合寄存器文件等的各種信號。
(C)指針堆棧指針堆棧由在各個入口中寫入綜合寄存器文件的入口地址的寄存器文件構成。
在現(xiàn)有的堆棧機器中,字堆棧為……、word1、word2、word3、word4(右端為堆棧頭)的狀態(tài)在本發(fā)明的計算機系統(tǒng)中,指針堆棧為……、<a>、<b>、<c>、<d>(右端為堆棧頭),在入口地址為<a>、<b>、<c>及<d>的綜合寄存器文件的各入口上,分別對應于保持word1、word2、word3、word4的狀態(tài)。
本發(fā)明的計算機系統(tǒng)中包括前進指針堆棧(APSAdvancedPointer Stack)及結束指針堆棧(CPSCompleted PointerStack)2個指針堆棧。
在本發(fā)明的計算機系統(tǒng)中,每當對指令解碼時,根據指令的內容,操作前進指針堆棧(以下稱為APS)及綜合寄存器文件,同時通過將指令的內容寫入指令緩沖器及需要時寫入適當功能單元空著的預約站中,設定應由out-of-order執(zhí)行程序中包括的指令。即前進指針堆棧反映了解碼發(fā)行結束的全部指令進行的堆棧操作。
另一方面,結束指針堆棧(以下稱CPS)反映按程序上的順序結束的所有指令進行的堆棧操作。本發(fā)明的計算機系統(tǒng)根據數據驅動的原理,可以執(zhí)行out-of-order,但是結束指針堆棧是為了保證正確的例外處理,為了構成根據由in-order結束后全部指令的狀態(tài)而存在的。
在本發(fā)明實施例的計算機系統(tǒng)中,通過指針堆棧及綜合寄存器文件,只保持字堆棧最上部累積的幀上部的操作數堆棧的內容。字堆棧的剩余部分存放在數據緩沖器及數據高速緩沖存儲器中。當操作數堆棧增大,用指針堆棧及綜合寄存器文件保持不下其全部內容時,如下所述,操作數堆棧下部的內容溢出(Spill)。到數據緩沖器中。
各指針堆棧構成為循環(huán)型的緩沖器,分別存在稱為壓入指針和底部指針兩個寄存器。壓入指針表示保持綜合寄存器文件入口地址最高位入口的上面1個。底部指針表示保持綜合寄存器文件入口地址最低位的入口。從底部指針的值減去壓入指針的值,就可知道在指針堆棧中有幾個入口是空的。在初始狀態(tài),壓入指針及底部指針的各值均為0。
第2圖是表示本實施例的計算機系統(tǒng)中各指針堆棧和各壓入指針及底部指針關系的說明圖。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圖中水平排列)的入口之間對其內容進行比較。
在指令的解碼發(fā)行時,對應于指令所規(guī)定的操作數堆棧的1字量壓入操作,將所分配的綜合寄存器文件1個入口的地址,寫入到由APS的PP_OF_APS所表示的入口中,在PP_OF_APS的值上加1。反之,對應于指令所規(guī)定的操作數堆棧的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。
本實施例的計算機系統(tǒng)為了可以根據分支預測進行隨機性執(zhí)行,而具有前進指針堆棧歷史文件(以下稱“APS歷史文件”)。在APS歷史文件的各個入口上,可寫入APS的全部入口及PP_OF_APS的內容。
(D)綜合寄存器文件(CRFConsolidatedResisterFile)綜合寄存器文件(以下稱CRF)對現(xiàn)有的堆棧機器上的操作數堆棧的內容按不同順序進行保持。
第3圖是表示本實施例的計算機系統(tǒng)中CRF6的各個入口6(i)詳細構成的說明圖。此處i是入口地址。CRF6的各入口6(i)由數據字段62(i)、寫入結束標志(WCF,WriteCompletionFlag)字段62(i)、顏色(C、Colour)字段63(i)及正在執(zhí)行位(BB)字段64(i)構成。
實際的CRF在硬件上的構成是按上述各字段不同而設置的寄存器文件集合體。
CRF各入口的數據字段由寫入1字量的數據構成。
在CRF各入口中,WFC字段在數據字段中如數據寫入結束則寫入1,如果未結束則寫入0。
在CRF的各入口中,C字段用于區(qū)別CRF的入口是對應于指令中所包含的壓入操作而分配的,還是從數據緩沖器裝填時而分配的,當是前者時還要寫入分支標記。在本實施例中如下所述,分支標記與APS歷史文件的入口地址具有一定關系。
在CRF各入口中,BB字段當該CRF各入口是應保持數據所分配的狀態(tài)時則寫入1。而當是未分配(空著)的狀態(tài)時,則寫入0。
(E)獨立表(FL)獨立表(以下稱FL)是獨立的,即保持空著/未分配的(BB字段為0)CRF的入口地址,在本實施例中由循環(huán)型的FIFO排列構成。
在初始狀態(tài),在FL中登錄CPF的全部入口地址。當需要分配空著的CRF入口時,從FL取出獨立的CRF入口地址。反之,如果解除CRF的某入口的分配,則該入口地址登錄在FL中。
(F)指令緩沖器(IBInstuctionBuffer)指令緩沖器(以下稱IB)是保持未結束的發(fā)行過的指令的緩沖器,由循環(huán)型的FIFO排列構成。
第4圖是表示IB構成的說明圖。在第4圖中,IB5的各入口自下而上順序加有0、1、2……地址,豎線施行的IB5入口保持有未結束的發(fā)行過的指令。IB具有名稱為頭指針和尾指針兩個寄存器。頭指針表示排列的頭部入口,尾指針表示排列末尾入口的后面1個。如果1個循環(huán)只用1個指令進行發(fā)行/結束,則尾指針表示應寫入下次所發(fā)行的指令內容的入口,頭指針表示寫入下次應結束的指令內容的入口。通過從頭指針的值減去尾指針的值,就可知道在IB中有幾個入口空著。在初試狀態(tài),頭指針及尾指針的值均為0。
第5圖是表示本實施例的計算機系統(tǒng)中的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)、及執(zhí)行狀態(tài)(SState)字段59(i)構成。
IB的各個入口的操作字段由寫入操作碼構成。
當在操作碼之后是表示操作數的指令時,IB的各入口的操作數字段、寫入該操作數。
IB的各入口的第1~第4源字段中,寫入應保持源數據所分配的CRF入口地址。在包括彈出操作的指令被解碼時,從APS中所彈出的與應彈出字數相同數量的CRF入口地址,按其順序寫入第1~第4源字段中。
IB的各入口的第1~第2目標字段,隨著指令的解碼發(fā)行,寫入新分配的CRF入口地址。在包括壓入操作的指令被解碼時,在APS中所壓入的與壓入字數相同數量的CRF入口地址,按其順序寫入第1~第2目標字段中。
IB的各入口的BT字段涉及到根據分支預測的隨機性執(zhí)行,在本實施例中,如下所述,寫入BT字段中的分支標記與APS歷史文件的入口地址有一定關系。
在IB的各入口上,S字段根據該入口中寫入的指令執(zhí)行狀態(tài),寫入未執(zhí)行、執(zhí)行完、正常結束、例外事件發(fā)生等信息。
(G)共用數據總線(CDBCommon Data Bus)共用數據總線(以下簡稱CDB)是在下述的功能單元群及CRF之間使數據與CRF的入口地址一起分配的通信通道。CDB為了能夠確保足夠的數據通信頻帶寬度而進行了多路化。
(H)功能單元本實施例的計算機系統(tǒng)具有運算單元0及1、分支單元及裝入/存儲單元4個功能單元。在本實施例中,各功能單元基本上由2個保留站和對所分配的指令進行處理的執(zhí)行部構成。保留站(以下稱RS)是暫時保持指令內容的緩沖器,在本實施例的計算機系統(tǒng)中,在指令解碼時也寫入有相同指令內容的IB入口地址。
在指令解碼時,根據指令種類不同,必要時在適當的功能單元空著的RS中可進行寫入。
在各功能單元的各個RS中,將應保持此處所寫入的源數據的CRF入口地址與由CDB送來的地址進行比較,如果一致則取入數據。
在保持指令內容的RS中,如果必要的源數據齊備,功能單元的執(zhí)行部可以利用,則該RS的內容轉到執(zhí)行部,開始該執(zhí)行。
(H-1)運算單元本實施例的計算機系統(tǒng)具有運算單元0及1、該各執(zhí)行部具有執(zhí)行算術邏輯運算、數據類型的變換運算、比較運算等運算指令的功能,可以相互獨立并行動作。
在本發(fā)明的計算機系統(tǒng)中,也可以構成為使各個運算單元執(zhí)行部管道化,或具有更多的運算單元,確定每個運算單元執(zhí)行的運算種類。
(H-2)分支單元分支單元執(zhí)行部具有對條件分支指令進行處理,確定有無分支,與分支目的地址一起通知給指令取出單元的功能。
(H-3)裝入/存儲單元(LSULoad/Store Unit)及數據緩沖器裝入/存儲單元(以下簡稱LSU)的執(zhí)行部具有進行地址計算的功能,可以對數據緩沖器及數據高速緩沖存儲器進行存取。
數據緩沖器是在各個入口中寫入1字數據的循環(huán)型緩沖器。在本發(fā)明的計算機系統(tǒng)中,通過指針堆棧和CRF保持字堆棧最高位部分的內容,其下面的部分存放在數據緩沖器中,再下面的部分存放在數據高速緩沖存儲器中。由于LSU可以對數據緩沖器進行高速存取,所以將應存取的變量數據保持在數據緩沖器中的比例越大,越可以更有效計算。另外,通過在數據緩沖器中積累適當字數的數據,可以有效進行下述的CRF—數據緩沖器—數據高速緩沖存儲器間的Spill/Fill(溢出/填入)操作。
LSU具有保持向最初局部變量的指針的圖中未畫出的寄存器(vars寄存器)。在本實施例的計算機系統(tǒng)中,最初的局部變量的存放區(qū)域在數據緩沖器或數據高速緩沖存儲器中,但是在vars寄存器中寫入相當于數據高速緩沖存儲器中的地址值。即全部或一部分的局部變量數據實際上即使保持在數據緩沖器中,也可以在各個局部變量上,對應即使假定所有局部變量都溢出到數據高速緩沖存儲器中時的數據高速緩沖存儲器上的地址值,所以在裝入/存儲指令的處理中。LSU利用vars寄存器的值進行地址計算,判斷對象局部變量的存放區(qū)域是數據緩沖器,還是數據高速緩沖存儲器,對該存放區(qū)域進行存取。
LSU具有在先行指令全部結束之前,按程序上的順序保持存儲指令的圖中未畫出的存儲緩沖器。即,存儲指令在全部先行指令結束之后執(zhí)行。存儲緩沖器具有聯(lián)想功能,LSU可以對先行存儲指令進行依賴性驗證,由out_of_order執(zhí)行裝入命令。
即,當裝入地址與先行地址指令的存儲地址一致、或者先行存儲指令的存儲地址未計算時(這時由于不能驗證依賴關系,所以看成存在依賴關系),該裝入指令對先行存儲指令具有依賴關系。當完全不存在依賴關系時,從數據緩沖器/數據高速緩沖存儲器立即裝入數據。當裝入指令對先行指令有依賴關系時,由于數據緩沖器/數據高速緩沖存儲器不具有正確的值,所以從數據緩沖器/數據高速緩沖存儲器不能裝入數據。如果裝入地址和先行存儲指令的存儲地址一致、且存儲數據有效時,則不等該裝入指令結束,就從存儲緩沖器直接裝入數據。
LSU在執(zhí)行程序中所表示的裝入/存儲指令的同時,為了避免上溢出/下溢出、或者隨著方法的調出/從方法的恢復,在字堆棧的最高位對應于幀生成/廢棄,在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上需要交叉分割數量的讀/寫口。
下面說明本發(fā)明的實施例的計算機系統(tǒng)的操作。
本實施例的計算機系統(tǒng)按①指令取出、②指令解碼發(fā)行、③執(zhí)行、④結束4個步驟對指令進行處理。在此為了說明簡單,下面以1個循環(huán)中可使1個指令進行解碼·發(fā)行/結束為例,說明各步驟的操作內容。
①指令取出步驟在該步驟上,指令取出單元從指令高速緩沖存儲器取出指令,并且決定下次取出的指令地址。下個取出指令通常是從下個地址值中得到,但是當判斷取出的指令是無條件分支指令、或由條件分支指令進行分支時、分支預測偏離時、或者發(fā)生例外時,變更取出的地址值。
②指令解碼·發(fā)行步驟在該步驟對指令進行解碼,根據指令的內容操作前進指針堆棧(APS)及綜合寄存器文件(CRF),并且通過將指令的內容寫入指令緩沖器(IB)、及必要時寫入適當功能單元空著的RS中,設定應由out_of_order執(zhí)行程序中所包含的指令。下面詳細說明設定操作。
在本發(fā)明的計算機系統(tǒng)中,現(xiàn)有的堆棧機器的字堆棧的堆棧頭附近的內容可通過指針堆棧和CRF再現(xiàn),但是對于指令所規(guī)定的操作數堆棧的堆棧操作,對APS也同樣適用。此處,對1字數據向操作數堆棧的壓入操作進行仿真時,只要分配保持該數據的空著的CRF 1個入口,將該入口地址壓入APS即可。
即,在解碼的指令中,當規(guī)定了對操作數堆棧的彈出操作時,從APS彈出與應彈出字數相同數量的CRF入口地址。在被解碼的指令中,當規(guī)定了對操作數堆棧的壓入操作時,分配與應壓入字數相同數量的空著的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的適當入口中。
在隨著指令的解碼·發(fā)行而新分配的CRF入口中,BB字段上置1,在C字段上寫入從指令解碼·發(fā)行單元傳來的分支標記。當是立即數的壓入指令時,由于數據已經得到,所以在數據字段中寫入該數據,在WCF字段上置1。除此之外的情況,由于數據在解碼·發(fā)行的時刻沒有得到,所以WCF字段為0。
由于按程序上的順序將被解碼的指令內容保持在IB中,所以將該指令的內容寫入由IB的尾指針所示的入口中,在尾指針的值上加1。即在操作字段中寫入操作碼,當在操作碼之后是由操作數所示的指令時,在操作數字段上寫入該操作數。在BT字段上寫入從指令解碼·發(fā)行單元傳來的分支標記。關于S字段,當是無條件分支指令、發(fā)向立即數據的操作數堆棧的壓入指令、或在堆棧上未作成拷貝的操作數堆棧的操作指令(Java Vm中pop、pop2、swap)時,則為已執(zhí)行完,而其他指令時,則為未執(zhí)行。
在包含彈出操作的指令時,將從APS中彈出與應彈出的字數相同的數量的CRF入口地址,按其順序寫入第1~第4源字段中。在包含壓入操作的指令時,將在APS中壓入與應壓入的字數相同的數量的CPF入口地址按其順序寫入第1~第2目標字段中。
在本實施例中,在堆棧上作成拷貝的操作數堆棧的操作指令時,在一定對應關系的基礎上,將應保持拷貝源的數據所分配的CRF入口地址寫入源字段,而將應保持拷貝數據而新分配的CRF入口地址寫入目標字段。
由于根據指令種類不同,對操作數堆棧應彈出/壓入的字數(在操作數堆棧的操作指令時,作成的拷貝字數)是確定的,所以根據操作字段的內容不同,可以知道第1~第4源字段及第1~第2目標字段中的哪一個是有效的。
在將指令的內容寫入IB的同時,根據指令種類不同,必要時在適當功能單元空著的RS中,也一起寫入進行寫入的IB入口地址(此處,由于每一循環(huán)只發(fā)行1個指令,所以與尾指針的值一致)。此處沒必要向RS寫入的是立即數據向操作數堆棧的壓入指令、在堆棧上不作成拷貝的操作數堆棧的操作指令及無條件分支指令的情況。在本實施例中,在堆棧上作成拷貝的操作數堆棧的操作指令時,將其內容寫入運算單元空著的RS中。
讀出在IB的源字段中寫入入口地址(從APS彈出的)的CRF入口的各個WCT字段及數據字段,當WCF為1時,在下一循環(huán)以后,入口地址和數據裝入CDB中。
③執(zhí)行步驟關于寫入到指令解碼·發(fā)行步驟上的RS中的指令,原則上依次進行以下的操作。
在各RS上,對于應保持寫入此處的源數據的CRF入口地址,與通過CDB傳送來的地址進行比較,如果一致則取入數據,在本實施例中,按與RS中寫入指令內容相同的時刻通過CDB傳送來的數據也取入該RS中。
如果需要的源數據齊全、可以利用功能單元的執(zhí)行部,則該RS的內容轉到執(zhí)行部,開始執(zhí)行。在該時刻,解除保持該RS上的該指令。
當解碼時在IB的目標字段上只進行寫入(在APS上壓入CRF的入口地址)的指令時,將指令執(zhí)行結果所得到的數據與目標的CRF入口地址一起裝入CDB中。在CRF中,根據通過CDB傳送來的內容,進行數據的寫入,將WCF字段變更為1。
如果以上的操作全部正常結束,則使該RS中寫入的入口地址上的(保持該指令)IB入口的S字段變更為正常結束。
以上是對大部分指令的原則性的操作,但是在本實施例的計算機系統(tǒng)中,根據指令的種類不同可進行以下的例外操作。
在LSU的RS中,將操作數堆棧上的數據彈出,寫入進行地址計算的存儲指令(Java Vm中的iastore、lastore、fastore、dastore、aastore、bastore、castore、sastore)時,即使源數據并不齊全,也可在地址計算中所需要的源數據齊備的時刻,計算存儲地址,寫入存儲緩沖器中。
在LSU的RS中,已寫入存儲指令時,如果存儲地址和存儲數據向存儲緩沖器寫入都結束。則在該RS中寫入的入口地址上的(保持該存儲指令)IB入口的S字段變更為可執(zhí)行存儲。如上所述,實際存儲的執(zhí)行在結束步驟上進行。
在運算單元1的RS中,在堆棧上寫入作成拷貝的操作數堆棧的操作指令時,當寫入源數據時,使該數據作為目標,與在一定對應關系的基礎寫入的CRF入口地址一起裝入CDB中。如果與各目標相關的數據傳輸全部正常結束,則使在該RS中已寫入的入口地址上的(保持該指令)IB的入口的S字段變更為正常結束。
如上所述,由于IB中所保持的未執(zhí)行的指令,是根據數據驅動原理,從可以執(zhí)行的開始處理,所以指令執(zhí)行順序變?yōu)閛ut_of_order。另外,運算單元0/1、分支單元及裝入/存儲單元的各功能單元相互獨立并行進行操作。
在某指令的處理中,在發(fā)生例外事件時,與在保持該指令的IB的入口的S字段中寫入該信息的同時,通知給指令取出單元。
④結束步驟某個指令為了能夠結束,必須按程序上的順序,該指令前的指令全部結束。
在由IB的頭指針所示的入口上,當S字段是或將是執(zhí)行完/正常結束時,根據在該入口中寫入的指令內容,操作CPS及CRF,在頭指針的值上加1。
CPS應再現(xiàn)操作對指令解碼·發(fā)行時的APS動作。即,在包含彈出/壓入操作的指令時,從CPS彈出與有效的源字段內容相同的內容,將有效的目標字段的內容順序壓入CPS中。當是在堆棧上未作成拷貝的操作數堆棧的操作指令時,只要使對操作數堆棧應進行的操作,也對CPS完全同樣地進行即可。本實施例中,當是在堆棧上作成拷貝的操作數堆棧的操作指令時,參照有效的源字段及有效的目標字段,在CPS上再現(xiàn)在該指令解碼·發(fā)行時對APS進行的操作。
在本實施例中,伴隨對上述的CPS的操作,入口地址從CPS彈出的CRF的入口上,使BB字段變更為0,在FL上登錄該入口地址。
在由IB的頭指針所示的入口上,寫入存儲指令時,當S字段可以或已經存儲時,請求LSU進行實際的存儲。這樣,可以保證數據按程序上的順序進行存儲。與上述同樣進行對CPS及CRF的操作,在頭指針的值上加1。
如上所述,通過在頭指針的值上加1,在從排列中除掉的IB入口上所保持的指令變?yōu)榻Y束。由于在該指令前面發(fā)行的指令已全部結束,所以指令結束按順序(in_order)執(zhí)行。
在由IB的頭指針所示的入口上,S字段發(fā)生或已經發(fā)生例外事件時,由于通過該時刻的CPS及CRF,構成由in_order執(zhí)行程序時的例外事件時刻的狀態(tài),所以可以進行正確的例外處理。當使例外事件發(fā)生的指令以后所發(fā)行的指令全部刪除時,對于寫入應被刪除指令的IB入口的有效目標字段上所示的CRF的各入口,使該BB字段返回0,通過在FL上登錄該入口地址,解除分配,通過將頭指針的值加1的內容寫入尾指針,只要全部從排列中除去保持應刪除的指令的IB入口即可。
以上是本發(fā)明實施例的計算機系統(tǒng)的全體操作。
下面對具體的操作例進行說明。在本實施例的計算機系統(tǒng)中考慮執(zhí)行以下的程序。
Dload[A](對應于變量名[A]的雙倍精度浮動小數點數據的裝入)Dload[B](對應于變量名[B]的雙倍精度浮動小數點數據的裝入)Dadd(雙倍精度浮動小數點數據間相加)d2f(雙倍精度浮動小數點數據向單精度小數點數據的變換)fload[T](對應于變量名[T]的單精度浮動小數點數據的裝入)swap(變更堆棧上最高位的2字)dup_x1(作成堆棧頭部的字拷貝,填入從前頭數的第3字上)fsub(單精度浮動小數點數據間相減)fdiv(單精度浮動小數點數據間相除)fstore[T](向對應于堆棧頭部的單精度小數點數據的變量名[x]的存放區(qū)域進行存儲)以上的程序進行X=(A+B)/(T-(A+B))的計算,A和B數據由雙倍精度給出,按雙倍精度直接執(zhí)行二者間的相加,將所得到的相加數據變換為單精度,以后按單精度進行計算。
第6圖~第14圖是在本實施例的計算機系統(tǒng)中,按每個循環(huán)表示處理上述程序時動作的說明圖,下面以該圖為基礎說明其詳細操作。在第6圖~第14圖中,CRF6及IB5的各入口構成分別與第3圖、第5圖相同。在第6圖~第14圖中空白的地方表示不必留意該字段的內容。為了用時間順序表示各構成單元的內容,在各部分標號的末尾加有連字符及對應于各循環(huán)的數字。另外,在第6圖~第14圖中APS、CPS、IB及CRF的各入口自下而上順序加有0、1、2、~的地址。
CDB由3條總線構成。等待時間在2個循環(huán)以下的運算指令由運算單元0執(zhí)行,而除此之外的運算指令由運算單元1執(zhí)行。
在本操作例中,為了說明簡單起見,變量數據全部保持在數據緩沖器中,在CRF和數據緩沖器之間不進行Spill/Fill操作。從而BP_OF_PS的值始終為0。
另外,在本操作例中,當初,APS、CPS、IB及CRF被初試化,在FL中CRF的全部入口地址順序寫入<0>、<1>、<2>、<3>……,按該順序取出。
(1-A)第1周期的指令譯碼/發(fā)行階段進行指令dload[A]的譯碼/發(fā)行。由于是對雙倍字變量數據的操作數堆棧的裝載指令,因此,對記錄在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。在這里,在本動作例中,作為分支標記,始終從指令譯碼/發(fā)行單元傳送來的是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周期的指令譯碼/發(fā)行階段進行指令dload[B]的譯碼/發(fā)行。由于是對雙倍字變量數據的操作數堆棧的裝載指令,因此,對記錄在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狀態(tài)的IB頭指針所示的入口5(0)中,S字段是0,因此作為完成階段的動作,什么也不進行。
(3-A)第3周期的指令譯碼/發(fā)行階段進行指令dadd的譯碼發(fā)行。由于是從操作數堆棧彈出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狀態(tài)的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狀態(tài)的IB頭指針所示的入口5(0)中,S字段是0,因此,作為完成階段的動作,什么也不進行。
(4-A)第4周期的指令譯碼/發(fā)行階段進行指令d2f的譯碼發(fā)行。由于是從操作數堆棧彈出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狀態(tài)的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狀態(tài)的IB頭指針所示的入口5(0)中,S字段是0,因此作為完成階段的動作,什么也不進行。
(5-A)第5周期的指令譯碼/發(fā)行階段進行指令fload[T]的譯碼發(fā)行。是對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狀態(tài)的IB頭指針所示的入口5(0)中,S字段成為1,因此,根據5(0)的內容操作CPS(以及CRF)。也就是說,將寫在IB入口5(0)目標字段的
、[1],壓入CPS,CPS成為4-5。而且,給頭指針加上1,使其成為1,到此,5(0)的指令完成。
(6-A)第6周期的指令譯碼/發(fā)行階段進行指令swap的譯碼發(fā)行。是替換操作數堆棧上最高位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狀態(tài)的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周期的指令譯碼/發(fā)行階段進行指令dup_x1的譯碼發(fā)行。指令dup_x1是,當字堆棧(作為向右方向的伸展)是…,字1,字2等狀態(tài)時,在將這些轉換為…字2,字1,字2的堆棧上,完成1條拷貝的操作數堆棧的操作指令,因此,分配記錄在FL的自由的CRF入口6(8)時,應使其保持拷貝數據,如3-6,從下方,將處于[7]、[6]狀態(tài)的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狀態(tài)的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狀態(tài)的IB頭指針所示的入口5(2)中,S字段是0,因此,作為完成階段的動作,什么也不進行。
(8-A)第8周期的指令譯碼/發(fā)行階段進行指令fsub的譯碼發(fā)行。由于是從操作數堆棧彈出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狀態(tài)的CRF入口6(7)、6(6)的各個入口WCF字段及數據字段被讀出,此時,6(7)的WCF是1,因此在下一個周期中,入口地址[7]和數據T將被放到CDB上。
(8-B)第8周期的運行階段在寫著d2f內容的RS802中,由于需要的源數據全部齊全,因此,其內容傳遞給運算單元0的運行部,開始運算。
(8-C)第8周期的完成階段處于5-7狀態(tài)的IB頭指針所示的入口5(2)中,S字段是0,因此,作為完成階段的動作,什么也不進行。
(9-A)第9周期的指令譯碼/發(fā)行階段進行指令fdiv的譯碼發(fā)行。由于是從操作數堆棧彈出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狀態(tài)的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狀態(tài)的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個周期的指令譯碼/發(fā)行階段進行指令fstore[X]的譯碼/發(fā)行。是處于棧頂的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狀態(tài)的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狀態(tài)的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狀態(tài)的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狀態(tài)的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狀態(tài)的IB頭指針所示的入口5(5)中,S字段是1,因此,根據5(5)的內容,操作CPS及CRF。也就是說,會再現(xiàn)(6-A)中有關APS的動作,CPS如4-14所示。而且,給頭指針的值加上1成為6,到此,完成5(4)指令。
(15-C)第15周期的完成階段處于5-14狀態(tài)的IB頭指針所示的入口5(6)中,S字段是1,因此,根據5(6)的內容,操作CPS及CRF。也就是說,會再現(xiàn)(7-A)有關的APS的動作,CPS就成為4-15。而且,給頭指針的值加上1成為7,到此,5(6)指令完成。
(16-C)第16周期的完成階段處于5-15狀態(tài)的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狀態(tài)的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狀態(tài)的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)指令完成。
以上,在本運行例所述的計算機系統(tǒng)中,完成X=(A+B)/{T-(A+B)}的計算。
在本發(fā)明所述的計算機系統(tǒng)中,可以實現(xiàn)依據分支預測的推測運行。APS的歷史文件是為了使推測運行可能而準備的。每當條件分支指令被譯碼時,APS歷史文件的1個入口就寫入APS所有入口及PP_OF_APS的內容。以下,說明對于本運行例的計算機系統(tǒng)中,基于分支預測的推測運行是如何進行的。
如上所述,在本運行例的計算機系統(tǒng)中,在指令譯碼/發(fā)行階段里,將指令譯碼,根據指令內容操作APS及CRF的同時,把指令內容寫入IB,在需要的情況下,把指令內容寫入適當的功能單元空著的RS里。從初始狀態(tài)開始,指令就流動,一直到最初的條件分支指令被譯碼之前,給發(fā)行指令標上作為分支標記的0,把這個分支標記0,寫入寫有指令內容的IB入口(和功能單元的RS)BT字段里,以及寫入分配好的CRF入口的C字段里。
當最初的條件分支指令被譯碼,進行分支預測時,為了保存分支時的狀態(tài),將APS的所有入口及PP_OF_APS的內容,寫入APS歷史文件地址0的入口里。在基于上述分支預測的指令流向里,作為分支標記標上1,進行IB(、功能單元的RS)及CRF的設置。
當第2個條件分支指令被譯碼時,如果最初的條件分支指令沒有確定,或者已經確定并預測應驗情況下,把APS的所有入口及PP_OF_APS的內容寫入APS歷史文件地址1的入口里。在基于上述第2段分支預測的指令流向中,作為分支標記標上2,進行IB(功能單元的RS)及CRF的設置。
如果分支預測繼續(xù)應驗,后面繼續(xù)同樣的處理,向APS歷史文件里的寫入工作,則按照地址順序進行。而且,從向APS歷史文件地址n的入口里的寫入開始,到下次寫入開始之間發(fā)行的指令,附上分支標記n+1。
分支預測沒有應驗時,把在這個條件分支指令以后發(fā)行的指令上標注的分支標記為依據,取消各個功能單元中正在運行的指令或者保持在RS的指令,在CRF中,在C字段里對比分支標記,解除其所有一致的入口分配(把BB字段變更為0,入口地址記錄在FL上),在IB中,解除在其條件分支指令以后加入到隊列的入口(把尾指針的值,寫在寫有其條件分支指令入口的下一個地址里)。而且,在處于相同入口/地址的CPS入口和其內容不一致的APS各個入口及PP_OF_APS里,拷貝其條件分支指令被譯碼時寫在APS歷史文件里的內容,從正確位置的指令,重新開始譯碼發(fā)行。
如上所述,在本發(fā)明所述的計算機系統(tǒng)中,隨著使用APS歷史文件,可以重構條件分支指令被譯碼、分支預測進行時的各種時點的狀態(tài),因此,依據分支預測的投機運行是可能的。
以上,為了簡化說明,對在1個周期里可以同時譯碼、發(fā)行/完成的指令,至多為1個的情況進行了說明。本發(fā)明所述的計算機系統(tǒng)中,可以做成同時給多條指令譯碼、發(fā)行/完成的結構。也就是說,如果FL是FIFO隊列的結構,為了分配,將自由的(空閑)CRF入口地址從FL取出的順序是既定的,可以掌握各指令中彈出幾條壓入幾條等堆棧操作的內容,同時進行多條指令的譯碼/發(fā)行。而且,指令的完成,基本上,以IB寫入的內容為基礎,操作CPS時應再現(xiàn)指令譯碼/發(fā)行時的APS動作,而且可以解除入口地址從CPS彈出的CRF入口的分配,因此,做成同時完成多條指令的結構也是可能的。
越是增多可以同時譯碼、發(fā)行/完成的指令數,指令譯碼/發(fā)行單元外的控制電路越是復雜,另外,組成APS、CPS、IB、CRF和數據緩沖器的各個寄存器/文件的端口數量和運算單元的數量、還有組成CDB總線的數量等方面,需要數量更多的硬件。
本發(fā)明所述的計算機系統(tǒng)中,在指令譯碼/發(fā)行階段的前階段里,可以做成以下的結構,即變換為綜合了同時譯碼發(fā)行的多條指令內容的形式。或者將變換結束的碼存在超高速指令緩沖器里的結構也可以。
例如,采用相當于1個周期譯碼發(fā)行2字指令的結構時,計算上述X=(A+B)/{T-(A+B)}的程序,變換為
圖15圖表所示的內容。圖15圖表的各個階段里,展示著以同時譯碼/發(fā)行的2字指令為依據的PP_OF_APS的增量、APS的操作內容和應寫入IB2個入口的指令內容。這里,把指令發(fā)行前的APS內容記錄為…s2、s1、s0(右端是棧頂),作為FIFO隊列組成的獨立表內容(按取出的順序)記述為…f1、f2、f3,指令發(fā)行時,可以替換為分別對應的CRF入口地址。如PP_OF_APS的增量欄所示,APS棧頂位置移動,在APS操作內容欄里,這個移動后的棧頂位置對應右端。而且,“NC”意味著[無變化]。
本發(fā)明所述的計算機系統(tǒng),不限于上述運行例,可以存在細節(jié)組成不同的各種運行例。例如,可以舉如下的例子。
①如另行具備CRF及獨立表,其用于整數數據/浮點數據或者32字節(jié)數據/64字節(jié)數據,而且對應他們設置了極為齊全的運行單元。
②作為設置了多組前進指針堆棧和結束指針堆棧的結構,順序呼出/順序恢復時,變更所使用的前進指針堆棧和結束指針堆棧組的結構。
③設置了多數組的前進指針堆棧、結束指針堆棧、指令緩沖器及數據緩沖器,可以并行多條線進行處理的結構。
另外,基于寄存器基礎的超級體系結構考慮的各種變形,也適用于本發(fā)明為基礎的計算機系統(tǒng)。
共同含有堆棧型的指令及寄存器型的指令組,也適用于本發(fā)明所述的計算機系統(tǒng)。也就是說,作為具備累進寄存器映射表格和完成寄存器映射表格的結構,對于堆棧型的指令,操作累進/結束指針堆棧,對于寄存器型的指令,存取累進/完成寄存器映射表格,而累進寄存器映射表格和完成寄存器映射表格,加入前進指針堆棧及結束指針堆棧,分別對應各種邏輯寄存器而設置的各個入口,寫有綜合寄存器文件的入口地址。此時,代替前進指針堆棧歷史文件,需要具備在各個入口寫入前進指針堆棧及累進寄存器映射表格雙方內容的累進歷史文件。
產業(yè)上的利用可能性如上所述,本發(fā)明所述的計算機系統(tǒng),一邊保證正確的例外處理,一邊以反常規(guī)的方式,處理用堆棧機器語言設計的程序,具有以下優(yōu)點,即多個功能單元的并列處理是可能的,進行管線化帶來的有效處理也是可能的。
而且,由于分支預測的投機運行,或1個周期同時運行多條指令的譯碼、發(fā)行/完成這種結構是可能的,因此更高的高速化是可能的。
權利要求
1.一種計算機系統(tǒng),具有數據高速緩沖存儲器(11);可以保持變量數據的數據緩沖器(12);在各個入口寫入數據的綜合寄存器文件(6);在各個入口寫入該綜合寄存器文件(6)的入口地址的前進指針堆棧(3);在各個入口寫入各個指令內容的構成FIFO(先進先出)隊列結構的指令緩沖器(5);運行運算的運算單元(80,81);可以讀取該數據高速緩沖存儲器(11)及該數據緩沖器(12)的裝載/存儲單元(83);當含有對操作數堆棧彈出操作的指令被譯碼時,只將和應彈出的字數相同數量的該綜合寄存器文件(6)的入口地址,從該前進指針堆棧(3)彈出,當含有對操作數堆棧壓入操作的指令被譯碼時,對只和應壓入字數相同數量的未分配的該綜合寄存器文件(6)的入口進行分配,將分配的該綜合寄存器文件(6)的入口地址壓入該前進指針堆棧(3),被譯碼的指令內容,如果伴隨彈出/壓入操作指令時,連同彈出/壓入的該綜合寄存器文件(6)的入口地址,寫入該指令緩沖器(5),依據數據驅動原理處理該指令緩沖器里保持的未運行的指令,運行用堆棧機器語言記錄的程序。
2.根據權利要求1所述的計算機系統(tǒng),具備向各個入口寫入該綜合寄存器文件(6)入口地址的結束指針堆棧(4);當該指令緩沖器5的起始入口保持的指令可以結束,或者已經結束時,根據該指令緩沖器(5)的起始入口的內容,操作該結束指針堆棧(4),使所保持的指令內容被譯碼時再現(xiàn)該前進指針堆棧(3)的動作,從指令緩沖器(5)除去這個起始入口,依據彈出操作,解除該結束指針堆棧(4)中地址保持結束的該綜合寄存器文件(6)的入口分配。
3.根據權利要求2所述的計算機系統(tǒng),具有保持沒有分配的該綜合寄存器文件(6)入口地址的獨立表;在初始狀態(tài)中,該綜合寄存器文件(6)的所有入口地址登錄在該獨立表里,當需要分配該綜合寄存器文件(6)的入口時,從獨立表取出沒有分配的該綜合寄存器文件(6)的入口地址,把解除了分配的該綜合寄存器文件(6)的入口地址,登錄在該獨立表里。
4.根據權利要求2所述的計算機系統(tǒng),具有向各個入口寫入該前進指針堆棧(3)的內容的前進指針堆棧歷史文件(3a);該綜合寄存器文件(6)在各個入口寫入分支標記,當指令被譯碼時,將分支標記寫入被分配的該綜合寄存器文件(6)的入口,每當條件分支指令被譯碼時,向該前進指針堆棧歷史文件(3a)的1個入口,寫入該前進指針堆棧(3)的內容,改變標記,進行基于分支預測的推測運行,當分支預測沒有應驗時,將條件分支指令以后譯碼的指令視為無效,解除寫有在該條件分支指令以后譯碼的指令所添加的分支標記的該綜合寄存器文件(6)的入口的分配,把該條件分支指令被譯碼時寫入的該前進指針堆棧(3a)的入口的內容,拷貝在前進指針堆棧(3)里,從正確位置的指令開始,重新進行處理。
5.根據權利要求2所述的計算機系統(tǒng),前進指針堆棧(3)和該結束指針堆棧(4)組成循環(huán)型的緩沖器,在該前進指針堆棧(3)和該結束指針堆棧(4)里,如果保持該綜合寄存器文件(6)入口地址的最低位入口的內容一致,則在該前進指針堆棧(3)和該結束指針堆棧(4)中,解除最低位入口中的該綜合寄存器文件(6)的入口地址的保持,把該一致內容所表示的該綜合寄存器文件(6)入口里寫入的數據,存在該數據緩沖器(12),對于需要從該數據緩沖器(12)裝載到該綜合寄存器文件(6)的數據,分配沒有分配過的該綜合寄存器文件(6)的1個入口,寫入該數據,并且在該前進指針堆棧(3)及該結束指針堆棧(4)中,通過在保持該綜合寄存器文件(6)入口地址的最低位入口的再下1個入口中,保持寫入該數據的該綜合寄存器文件(6)的入口地址,可以進行從該數據緩沖器(12)向該綜合寄存器文件(6)的數據裝載。
6.根據權利要求3所述的計算機系統(tǒng)中,該獨立表是FIFO(先進先出)隊列的結構,具有同時進行多條指令的譯碼,對該前進指針堆棧(3)的操作、該綜合寄存器文件(6)的入口分配及向該指令緩沖器(5)的連續(xù)的多個入口寫入指令內容的功能;根據同時寫入該指令緩沖器(5)的連續(xù)的多個入口的內容,解除該結束指針堆棧(4)的操作及該綜合寄存器文件(6)入口分配的功能。
7.一種計算機系統(tǒng),具有在各個入口寫入數據的綜合寄存器文件(6);在各個入口寫入該綜合寄存器文件(6)的入口地址的前進指針堆棧(3);在各個入口寫入各個指令內容的構成FIFO隊列結構的指令緩沖器(5);具備各個適當數量的保留站的功能單元群;在該綜合寄存器文件(6)及該功能單元群之間,將數據連同該綜合寄存器文件(6)的入口地址共同分配的共用數據總線(8);對于譯碼的指令,當規(guī)定了對操作數堆棧的彈出操作時,只將和應彈出字數相同數量的該綜合寄存器文件(6)的入口地址,從該前進指針堆棧(3)彈出,對于譯碼的指令,當規(guī)定了對操作數堆棧的壓入操作時,只分配和應壓入語句數相同數量的該綜合寄存器文件(6)的入口,將該分配的該綜合寄存器文件(6)的入口地址壓入前進指針堆棧(3),被譯碼的指令內容,如果伴有彈出/壓入操作的指令,則連同被彈出/壓入的該綜合寄存器文件(6)的入口地址,共同寫入該指令緩沖器(5),根據指令類型,在必要時,將寫入該指令緩沖器(5)的指令內容,也寫入沒有保持運行該指令的功能單元的指令內容的保留站,從該前進指針堆棧(3)彈出入口地址的該綜合寄存器文件(6)入口的各個內容被讀出,當已經寫有數據時,入口地址和數據放在共同的數據總線(8)上,在各個保留站中,保持指令內容時,比較應保持寫在其中的源數據的該綜合寄存器文件(6)入口地址、和通過該共用數據總線(8)送來的該綜合寄存器文件(6)的入口地址,如果一致,就取進數據,在需要的源數據齊全后,開始運行該指令,在各個該功能單元群中,指令被譯碼時,將該前進指針堆棧(3)壓入的該綜合寄存器文件(6)的入口地址等這樣的指令運行的結果所得到的數據,連同這個被壓入的綜合寄存器文件(6)的該入口地址,一塊放在該共用數據總線(8)上,在該綜合寄存器文件(6)中,通過根據該共用數據總線(8)送來的內容進行數據寫入,來運行用堆棧機器語言記錄的程序。
8.根據權利要求7所述的計算機系統(tǒng),具備向各個入口寫入該綜合寄存器文件(6)入口地址的結束指針堆棧(4),當該指令緩沖器(5)中隊列的起始入口所保持的指令可以結束,或者已經結束時,根據該隊列的起始入口的內容,操作該結束指針堆棧(4),使該保持的指令譯碼時該前進指針堆棧(3)的動作再現(xiàn),從該隊列解除起始的入口,依據彈出操作,解除在該結束指針堆棧(4)中結束了地址保持的該綜合寄存器文件(6)入口的分配。
全文摘要
本發(fā)明公開一種計算機系統(tǒng),高速處理由堆棧機器的機器語言描述的程序,每當指令被解碼時,根據其指令的內容,操作前進指針堆棧及綜合寄存器文件,同時將該指令內容寫入指令緩沖器,必要時寫入適當功能單元的空著的保留站中。在指令緩沖器中保持的未執(zhí)行的指令由out-of-order進行處理。當在指令緩沖器前部的入口中所保持的指令可以或實際結束時,根據該指令緩沖器前部的入口內容,應操作再現(xiàn)所保持的指令被解碼時的前進指針堆棧動作的結束指針堆棧,并從指令緩沖器除去其前部的入口。
文檔編號G06F9/38GK1348561SQ00806553
公開日2002年5月8日 申請日期2000年4月17日 優(yōu)先權日1999年4月22日
發(fā)明者關一 申請人:關一