專利名稱:在非cisc處理器上進行浮點棧溢出檢查的裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器技術(shù)領(lǐng)域,特別是涉及一種在非復(fù)雜指令集計算機處
理器上支持復(fù)雜指令集計算機(CISC)中的浮點棧,進行浮點棧溢出檢査,
防止浮點棧溢出的裝置和方法。
背景技術(shù):
中央處理器(CPU)簡稱微處理器,是計算機的核心單元。微處理器采用
的指令集、設(shè)計規(guī)范(體系結(jié)構(gòu))是計算機的首要特征,它決定了計算機需要 采用的外圍設(shè)備和應(yīng)用軟件的類型。
當(dāng)今世界比較流行的兩大體系結(jié)構(gòu)分別為以MIPS公司的MIPS32/64為 代表的精簡指令集計算機(Reduced Instruction Set Computing, RISC)體系結(jié) 構(gòu)和以Intel公司的X86為代表的復(fù)雜指令集計算機(Complex Instruction Set Computing, CISC)體系結(jié)構(gòu)。CISC處理器指令數(shù)量繁多, 一些指令可執(zhí)行 相當(dāng)復(fù)雜的功能, 一般需要許多時鐘周期來執(zhí)行;RISC處理器使用較少數(shù)量 的可用指令,以更高的速率執(zhí)行一組更簡單的功能。而采用不同的體系結(jié)構(gòu)的 處理器上運行的程序軟件需要針對處理器的體系結(jié)構(gòu)專門編寫,X86上的應(yīng)用 軟件通常不能在MIPS體系結(jié)構(gòu)的計算機上運行,即常說的不兼容。
然而計算機制造商希望通過在自己制造的一種體系結(jié)構(gòu)的微處理器上運 行更多的現(xiàn)有軟件來節(jié)省軟件開發(fā)的開銷,同時達到市場占有率最大化的目 的。
為了解決這一問題,虛擬機應(yīng)運而生。 一般地,將具有一種類型體系結(jié)構(gòu) 的CPU的計算機稱為主機;同時將需要主機仿真的,不相關(guān)體系結(jié)構(gòu)類型的 CPU環(huán)境稱為目標機,需要一種應(yīng)用程序,這種程序能夠促使主機執(zhí)行一個 或多個主機指令,響應(yīng)于給定的目標機指令,運行為目標機編寫的軟件,這種 程序就叫虛擬機。
目前現(xiàn)有的虛擬機有SimOS, QEMU, Transmeta等,但是現(xiàn)有的虛擬
機由于各種體系結(jié)構(gòu)的巨大差異造成虛擬機運行開銷過大,執(zhí)行效率過低,很 難應(yīng)用到實際工作中。
由于X86體系結(jié)構(gòu)是目前個人計算機(PC)上較流行的一類結(jié)構(gòu),所以
多數(shù)虛擬機都以X86體系結(jié)構(gòu)為目標機,都需要解決向X86兼容的問題,而 眾所周知的棘手問題是對X86所具有的獨特的浮點棧防止溢出機制的模擬。 一般地,CISC類處理器,如X86,中都設(shè)置一個浮點寄存器棧,大部分浮點 運算都是在寄存器棧參與下進行的,而為了保證浮點棧的正常正確工作,X86 有一個復(fù)雜的防止溢出機制方法。而除了X86外,其他處理器,特別是RISC 處理器沒有類似的浮點棧以及防止溢出機制方法,由此帶來的如何在虛擬機上 進行浮點翻譯是眾多虛擬機研發(fā)部門迫切需要解決的熱點問題。
一般而言,在非CISC處理器中,其內(nèi)部設(shè)置若干個通用的浮點寄存器, 這些浮點寄存器統(tǒng)一編號,指令通過這些編號直接訪問固定的浮點寄存器而完 成工作。
如果在多個虛擬機程序運行過程中,浮點棧溢出例外沒有被發(fā)現(xiàn),程序就 可能會執(zhí)行錯誤操作,并且沿著錯誤的道路一直進行下去,而且錯誤比較難于 發(fā)現(xiàn),直到造成比較大的損失。所以,在虛擬機對X86進行仿真時,往往需 要維護一個溢出檢査機制,實時監(jiān)控浮點棧的狀態(tài),但是這種檢査機制對虛擬 機存在一定的性能影響,而且不便于程序?qū)V袛?shù)據(jù)狀態(tài)的了解。
發(fā)明內(nèi)容
本發(fā)明所要解決的問題是提供一種在非復(fù)雜指令集計算機處理器上進行 浮點棧溢出檢査的裝置和方法,其在非CISC體系結(jié)構(gòu)的處理器上能夠支持 CISC中的浮點棧運算,防止浮點棧溢出,具有各種類型的對棧中寄存器所進
行的操作,能大大減少虛擬機的工作量,提高效率。
為實現(xiàn)本發(fā)明而提供的一種在非復(fù)雜指令集計算機處理器上進行浮點棧 溢出檢查的裝置,包括一浮點寄存器棧,所述浮點寄存器棧由多個可進行浮點
運算的桟寄存器組成;
一溢出檢査寄存器,用于在對所述棧寄存器進行浮點訪問時棧溢出例外檢 查,其包括有與所述棧寄存器相應(yīng)的多個位,每個位分別表示相應(yīng)的棧寄存器 的狀態(tài);
一棧溢出判斷模塊,用于檢査指定的浮點寄存器棧中的棧寄存器,并根據(jù) 棧寄存器的值對溢出檢查寄存器進行操作,進行浮點棧溢出檢查。
所述浮點寄存器棧包括8個棧寄存器;所述溢出檢査寄存器為一至少8 位的多位通用寄存器,分別表示所述8個棧寄存器的0 7位的狀態(tài)。
所述裝置為精簡指令集計算機處理器。
所述棧溢出判斷模塊包括第一判斷子模塊,用于判斷浮點寄存器棧中被指
定的棧寄存器是否為空,如果為空,則將指定的溢出檢查寄存器的TAG位的
相應(yīng)位置l,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
所述棧溢出判斷模塊還包括第二判斷子模塊,用于判斷浮點寄存器棧中被
指定的棧寄存器是否有效,如果有效,則將指定的溢出檢查寄存器的TAG位
的相應(yīng)位置O,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
所述棧溢出判斷模塊還包括第三判斷子模塊,用于判斷浮點寄存器棧中被 指定的兩個棧寄存器是否都有效,如果都有效,并且棧寄存器中的數(shù)據(jù)不需要
出棧,則將指定的溢出檢査寄存器的TAG位的值保持,并繼續(xù)執(zhí)行;否則,
引發(fā)浮點棧溢出例外。
所述棧溢出判斷模塊還包括第四判斷子模塊,用于判斷浮點寄存器棧中被 指定的兩個棧寄存器是否有效,如果都有效,并且有一個棧寄存器中的數(shù)據(jù)需
要出棧,則將數(shù)據(jù)出棧的棧寄存器對應(yīng)的溢出檢查寄存器的TAG位所對應(yīng)的
位置O,然后繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
所述棧溢出判斷模塊還包括第五判斷子模塊,用于判斷浮點寄存器棧中被 指定的兩個棧寄存器是否有效,如果都有效,并且棧寄存器中的數(shù)據(jù)都需要出
棧,則將對應(yīng)的溢出檢査寄存器的TAG位所對應(yīng)的兩位都置0,然后繼續(xù)執(zhí) 行;否則,引發(fā)浮點棧溢出例外。
為實現(xiàn)本發(fā)明還提供一種在非復(fù)雜指令集計算機處理器上進行浮點棧溢
出檢査的方法,以非復(fù)雜指令集處理器的多個棧寄存器組成浮點寄存器棧;一 溢出檢查寄存器,包括有與所述棧寄存器相應(yīng)的多個位,每個位分別表示相應(yīng) 的棧寄存器的狀態(tài),包括下列步驟
步驟A,檢査指定的浮點寄存器棧中的棧寄存器,并根據(jù)棧寄存器的值對 溢出檢查寄存器進行操作,進行浮點棧溢出檢査。
所述浮點寄存器棧包括8個棧寄存器;所述溢出檢査寄存器為一至少8
位的多位通用寄存器,分別表示所述8個棧寄存器的0~7位的狀態(tài)。
所述裝置為精簡指令集計算機處理器。
所述步驟A包括下列步驟
判斷浮點寄存器棧中被指定的桟寄存器是否為空,如果為空,則將指定的
溢出檢査寄存器的TAG位的相應(yīng)位置1,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢
出例外。
判斷浮點寄存器棧中被指定的棧寄存器是否有效,如果有效,則將指定的
溢出檢査寄存器的TAG位的相應(yīng)位置0,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢
出例外。
判斷浮點寄存器棧中被指定的兩個棧寄存器是否都有效,如果都有效,并
且棧寄存器中的數(shù)據(jù)不需要出棧,則將指定的溢出檢査寄存器的TAG位的值 保持,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
判斷浮點寄存器棧中被指定的兩個棧寄存器是否有效,如果都有效,并且 有一個棧寄存器中的數(shù)據(jù)需要出棧,則將數(shù)據(jù)出棧的棧寄存器對應(yīng)的溢出檢查 寄存器的TAG位所對應(yīng)的位置0,然后繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例 外。
判斷浮點寄存器棧中被指定的兩個棧寄存器是否有效,如果都有效,并且 棧寄存器中的數(shù)據(jù)都需要出棧,則將對應(yīng)的溢出檢查寄存器的TAG位所對應(yīng) 的兩位都置0,然后繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
本發(fā)明的有益效果是本發(fā)明的在非復(fù)雜指令集計算機處理器上進行浮點 棧溢出檢査的裝置和方法,使得非CISC體系結(jié)構(gòu),如X86的處理器能夠支持 X86中的特殊浮點棧的溢出檢査機制,從而方便虛擬機進行二進制翻譯工作, 提高虛擬機效率,增強處理器兼容性,能大大減少虛擬機的工作量,提高效率。
圖1為本發(fā)明在非CISC處理器上進行浮點棧溢出檢査的裝置結(jié)構(gòu)示意
圖2為本發(fā)明棧寄存器與溢出檢査寄存器的位對應(yīng)示意圖; 圖3為本發(fā)明實施例在非CISC處理器上入棧過程中進行浮點棧溢出檢査 過程流程圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實 施例,對本發(fā)明的一種在非復(fù)雜指令集計算機處理器上進行浮點棧溢出檢査的 裝置和方法進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用 以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明實施例中,以提供一種在非復(fù)雜指令集計算機處理器上進行浮點棧溢出檢査的裝置和方法,其應(yīng)用在協(xié)同設(shè)計虛擬機中,在RISC處理器上支持 CISC體系結(jié)構(gòu),如X86中的特殊浮點棧,防止浮點棧溢出的方法和系統(tǒng)為例 為進行說明,但應(yīng)當(dāng)理解的是,其并不是對本發(fā)明的限制。為了更深入理解本發(fā)明,本發(fā)明實施例先說明CISC體系結(jié)構(gòu),如X86的 浮點棧的防溢出機制方法。X86的浮點部件中包括一個浮點寄存器棧,該棧由8個可直接進行浮點運 算的棧寄存器組成,按照順序進行編號,分別是0 7。 X86還包括一個16位 的浮點標志寄存器,其中每兩位組成一個TAG,每個TAG用于檢測浮點訪問 時會不會發(fā)生棧溢出例外,每個TAG對應(yīng)一個浮點寄存器的狀態(tài)00表示 valid,表示該棧寄存器中含有一個可用的數(shù)據(jù);01表示zero,表示該棧寄存 器中的數(shù)據(jù)為0; 10表示special,表示該棧寄存器含有非數(shù)、無窮數(shù)、或者錯 誤格式的數(shù)據(jù);11表示empty,表示該棧寄存器為空,可以對棧進行操作,不 會發(fā)生溢出。舉例而言,如果用戶進行向棧中存儲數(shù)據(jù)的操作(push),那么硬件會自 動檢查相應(yīng)棧寄存器所對應(yīng)的浮點標志寄存器的TAG,以確定棧是否可用。 在這種情況下,如果TAG為OO、 01、 IO當(dāng)中的任何一個,都代表相應(yīng)的棧寄 存器己經(jīng)被使用了,不能向里面裝入數(shù)據(jù),也就是不能再進行存儲(push)操 作,表示棧已滿,如果再進行存儲(push)操作,就會發(fā)生浮點棧溢出例外。 相同,對于讀取數(shù)據(jù)的操作(pop),其也是一樣的。本發(fā)明實施例中,所述在非復(fù)雜指令集計算機處理器上進行浮點桟溢出檢 查的裝置,是一精簡指令集計算機(RISC)處理器10,包括浮點寄存器棧11, 該棧由8個可直接進行浮點運算的棧寄存器111組成,按照順序進行編號,分 別為0~7;
本發(fā)明實施例的RISC處理器10,還包括一個溢出檢查寄存器12,用于實現(xiàn)與X86的浮點標志寄存器中的TAG的功能,檢測對浮點寄存器棧11中 的棧寄存器111進行浮點訪問時會不會發(fā)生棧溢出例外,其為一至少8位的多 位寄存器,表示TAG位,即溢出檢查功能位,分別表示浮點寄存器棧11的棧 寄存器0 7號的狀態(tài)。在本發(fā)明實施例中,在RISC處理器10中,選擇一個通用寄存器r(i),其 低8位由低到高分別表示浮點寄存器棧的棧寄存器0 7號的狀態(tài)。通用寄存器r(i)的低8位中,每位對應(yīng)一個浮點寄存器棧U中的棧寄存器 111,每位的值代表不同狀態(tài),其中,0表示空,可壓棧,不可出棧,否則會 溢出;l表示有效,不可再壓棧,否則會溢出。作為-一種可實施方式,如圖1所示,本發(fā)明的RISC處理器10中,包括 一個由0~31,共32個的多位浮點寄存器組成的浮點寄存器棧11,其中0~7 號,共8個棧寄存器111,模擬X86的浮點寄存器棧的8個棧寄存器;在RISC 處理器10中,還包括一個32位的通用寄存器(定點)r(i),其低8位由低到 高分別表示浮點寄存器棧的棧寄存器0~7號的狀態(tài),完成X86浮點棧機制中 的TAG功能,圖1中的箭頭表示了棧寄存器和通用寄存器(溢出檢査寄存器 12)的TAG位之間的對應(yīng)關(guān)系。所述RISC處理器10中,還包括棧溢出判斷模塊13,用于檢査指定的浮 點寄存器棧11中的棧寄存器111,并根據(jù)棧寄存器111的值對溢出檢査寄存 器12進行操作,進行浮點棧溢出檢查。較佳地,所述棧溢出判斷模塊13,包括第一判斷子模塊131,第二判斷子 模塊132,第三判斷子模塊133,第四判斷子模塊134,第五判斷子模塊135, 其中第一判斷子模塊131,用于判斷浮點寄存器棧11中被指定的棧寄存器111 是否為空,如果為空,則將指定的溢出檢査寄存器12的TAG位的相應(yīng)位置1, 并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外;第二判斷子模塊132,用于判斷浮點寄存器棧11中被指定的棧寄存器111 是否有效,如果有效,則將指定的溢出檢查寄存器12的TAG位的相應(yīng)位置0, 并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外;
第三判斷子模塊133,用于判斷浮點寄存器棧11中被指定的兩個棧寄存 器lll是否都有效,如果都有效,并且棧寄存器lll中的數(shù)據(jù)不需要出棧,則將指定的溢出檢査寄存器12的TAG位的值保持,并繼續(xù)執(zhí)行;否則,引發(fā)浮 點棧溢出例外;第四判斷子模塊134,用于判斷浮點寄存器棧11中被指定的兩個棧寄存 器U1是否有效,如果都有效,并且有一個桟寄存器lll中的數(shù)據(jù)需要出棧, 則將數(shù)據(jù)出棧的棧寄存器111對應(yīng)的溢出檢查寄存器12的TAG位所對應(yīng)的位 置0,然后繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外;第五判斷子模塊135,用于判斷浮點寄存器棧11中被指定的兩個棧寄存 器lll是否有效,如果都有效,并且棧寄存器11中的數(shù)據(jù)都需要出棧,則將 對應(yīng)的溢出檢査寄存器12的TAG位所對應(yīng)的兩位都置0,然后繼續(xù)執(zhí)行;否 則,引發(fā)浮點棧溢出例外。下面進一步詳細說明本發(fā)明在非復(fù)雜指令集計算機處理器上進行浮點棧 溢出檢查的方法,其以RISC處理器10的8個棧寄存器111組成浮點寄存器 棧ll;以一通用寄存器為溢出檢査寄存器12,其低8位模擬X86的TAG功 能,每位對應(yīng)一個棧寄存器111的不同狀態(tài)。本發(fā)明的在非復(fù)雜指令集計算機處理器上進行浮點棧溢出檢査的方法,包 括如下步驟步驟SIOO,檢查指定的浮點寄存器棧ll中的桟寄存器lll,并根據(jù)棧寄 存器111的值對溢出檢査寄存器12進行操作,進行浮點棧溢出檢查; 所述步驟S100包括下列步驟步驟S110,判斷浮點寄存器棧11中被指定的棧寄存器111是否為空,如 果為空,則將指定的溢出檢査寄存器12的TAG位的相應(yīng)位置1,并繼續(xù)執(zhí)行; 否則,引發(fā)浮點棧溢出例外;步驟S120,判斷浮點寄存器桟11中被指定的棧寄存器111是否有效,如 果有效,則將指定的溢出檢査寄存器12的TAG位的相應(yīng)位置0,并繼續(xù)執(zhí)行; 否則,引發(fā)浮點棧溢出例外;步驟SHO,判斷浮點寄存器棧11中被指定的兩個棧寄存器111是否都有 效,如果都有效,并且棧寄存器中的數(shù)據(jù)不需要出棧,則將指定的溢出檢査寄 存器12的TAG位的值保持,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外;
步驟S140,判斷浮點寄存器桟11中被指定的兩個棧寄存器111是否有效, 如果都有效,并且有一個棧寄存器中的數(shù)據(jù)需要出棧,則將數(shù)據(jù)出棧的棧寄存器對應(yīng)的溢出檢査寄存器12的TAG位所對應(yīng)的位置O,然后繼續(xù)執(zhí)行;否則, 引發(fā)浮點棧溢出例外;歩驟S150,判斷浮點寄存器棧11中被指定的兩個棧寄存器lll是否有效, 如果都有效,并且棧寄存器中的數(shù)據(jù)都需要出棧,則將對應(yīng)的溢出檢査寄存器 12的TAG位所對應(yīng)的兩位都置0,然后繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例 外。下面以對浮點寄存器棧的操作為例,進一步詳細說明本發(fā)明的在非復(fù)雜指 令集計算機處理器上進行浮點棧溢出檢查的方法。對浮點寄存器棧11的操作有很多種情況,如圖2所示,為浮點寄存器棧 11的入棧操作流程圖,進行入棧操作時。首先RISC處理器10確定浮點寄存器棧的棧頂,并讀取該棧頂?shù)臈<拇?器Ul對應(yīng)的溢出檢査寄存器12的TAG位;RISC處理器10根據(jù)本發(fā)明的浮點寄存器棧11,判斷確定浮點寄存器棧 11的棧頂,并確定對應(yīng)的本發(fā)明的棧頂?shù)臈<拇嫫?11對應(yīng)的溢出檢査寄存 器的TAG位,是一種現(xiàn)有技術(shù),其不是本發(fā)明的發(fā)明創(chuàng)造,本領(lǐng)域技術(shù)人員 根據(jù)本發(fā)明實施例的描述,可以實現(xiàn)上述操作,因此,在本發(fā)明中不再一一詳 細描述說明。判斷棧頂?shù)臈<拇嫫?11對應(yīng)的溢出檢査寄存器的相應(yīng)TAG位是否為0; 如果是,則將棧頂?shù)臈<拇嫫?11對應(yīng)的溢出檢査寄存器12的相應(yīng)TAG 位置l,并將數(shù)據(jù)寫入該棧寄存器lll,并結(jié)束返回; 如果否,則引發(fā)棧溢出例外。作為一種可實施的方式,本發(fā)明實施例中,選擇通用寄存器r(3)作為溢出 檢查寄存器,r(3)的低8位,也就是bit r(3)一0 bit r(3)—7分別對應(yīng)浮點寄存器 棧中的棧寄存器f(0) f(7)的狀態(tài)。1)如果遇到入棧操作,并且棧頂在棧寄存器f(5);則判斷溢出檢査寄存器r(3)的第5位,也就是bitr(3L4是否為0;如果為O,則先將溢出檢査寄存器的bitr(3)—4置1,然后將數(shù)據(jù)入棧,存 入棧寄存器f(5);
如果為l,則引發(fā)棧溢出例外。2) 如果出棧操作,并且棧頂在棧寄存器f(5),則判斷溢出檢査寄存器r(3)的第5位,也就是bit r(3)一4是否為1; 如果為l,則先將溢出檢査寄存器的bitf(3)一4清零,然后將數(shù)據(jù)出棧,存 入指定的浮點寄存器;如果為0,則引發(fā)桟溢出例外。3) 如果是運算操作,并且兩個源操作數(shù)分別在棧寄存器f(4)和f(5)中, 則判斷溢出檢査寄存器r(3)的第4位,也就是bit r(3)—3是否為1; 如果為0,則引發(fā)棧溢出例外;如果為1,則繼續(xù)下面的步驟則判斷溢出檢査寄存器r(3)的第5位,也就是bit r(3)—4是否為1; 如果為1,則繼續(xù)運算操作; 如果為0,則引發(fā)棧溢出例外。4) 如果是運算并出棧操作,并且兩個源操作數(shù)分別在棧寄存器f(4)和f(5)中;如果棧頂在棧寄存器f(5),則判斷溢出檢査寄存器r(3)的第5位,也就是 bitr(3)—4是否為1;如果為0,則引發(fā)棧溢出例外; 如果為l,則繼續(xù)下面的步驟判斷溢出檢查寄存器r(3)的第4位,也就是bitr(3)—3是否為1; 如果為0,則引發(fā)棧溢出例外; 如果為1,則繼續(xù)下面的步驟先將溢出檢查寄存器的第5位,也就是bit r(3)一4清零,然后繼續(xù)運算操作;5) 如果是運算并連續(xù)出棧操作,并且兩個源操作數(shù)分別在棧寄存器f(4) 和f(5)中;則判斷溢出檢査寄存器r(3)的第4位,也就是bit r(3)—3是否為1; 如果為0,則引發(fā)桟溢出例外;如果為l,則將溢出檢査寄存器的第4位,也就是bitr(3)一3清零,然后繼 續(xù)下面的步驟 判斷溢出檢查寄存器r(3)的第5位,也就是bitr(3)—4是否為1; 如果為l,則將溢出檢査寄存器的第5位,也就是bitr(3)一4清零,然后繼 續(xù)運算操作;如果為0,則引發(fā)棧溢出例外。本發(fā)明的在非復(fù)雜指令集計算機處理器上進行浮點棧溢出檢查的裝置和 方法,本發(fā)明的裝置設(shè)計精巧簡單,硬件開銷很少;能夠提供了很強的仿真支 持,可以省去對浮點棧的模擬維護,大大減少了在讀取內(nèi)存上的時間和空間損 失,提高了工作效率。其縮小了不同體系結(jié)構(gòu)間的差異,為協(xié)同設(shè)計虛擬機以 及RISC和x86之間的兼容做出了開拓性的貢獻。通過以上結(jié)合附圖對本發(fā)明具體實施例的描述,本發(fā)明的其它方面及特征 對本領(lǐng)域的技術(shù)人員而言是顯而易見的。以上對本發(fā)明的具體實施例進行了描述和說明,這些實施例應(yīng)被認為其只 是示例性的,并不用于對本發(fā)明進行限制,本發(fā)明應(yīng)根據(jù)所附的權(quán)利要求進行 解釋。
權(quán)利要求
1、一種在非復(fù)雜指令集計算機處理器上進行浮點棧溢出檢查的裝置,其特征在于,包括一浮點寄存器棧,所述浮點寄存器棧由多個可進行浮點運算的棧寄存器組成;一溢出檢查寄存器,用于在對所述棧寄存器進行浮點訪問時棧溢出例外檢查,其包括有與所述棧寄存器相應(yīng)的多個位,每個位分別表示相應(yīng)的棧寄存器的狀態(tài);一棧溢出判斷模塊,用于檢查指定的浮點寄存器棧中的棧寄存器,并根據(jù)棧寄存器的值對溢出檢查寄存器進行操作,進行浮點棧溢出檢查。
2、 根據(jù)權(quán)利要求1所述的浮點棧溢出檢査的裝置,其特征在于,所述浮 點寄存器棧包括8個棧寄存器;所述溢出檢査寄存器為一至少8位的多位通用 寄存器,分別表示所述8個棧寄存器的0 7位的狀態(tài)。
3、 根據(jù)權(quán)利要求2所述的浮點棧溢出檢査的裝置,其特征在于,所述裝 置為精簡指令集計算機處理器。
4、 根據(jù)權(quán)利要求1至3任一項所述的浮點棧溢出檢査的裝置,其特征在 于,所述棧溢出判斷模塊包括第一判斷子模塊,用于判斷浮點寄存器棧中被指 定的棧寄存器是否為空,如果為空,則將指定的溢出檢査寄存器的TAG位的 相應(yīng)位置l,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
5、 根據(jù)權(quán)利要求1至3任一項所述的浮點棧溢出檢査的裝置,其特征在 于,所述棧溢出判斷模塊包括第二判斷子模塊,用于判斷浮點寄存器棧中被指 定的棧寄存器是否有效,如果有效,則將指定的溢出檢査寄存器的TAG位的 相應(yīng)位置0,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
6、 根據(jù)權(quán)利要求1至3任一項所述的浮點棧溢出檢查的裝置,其特征在 于,所述棧溢出判斷模塊包括第三判斷子模塊,用于判斷浮點寄存器棧中被指 定的兩個棧寄存器是否都有效,如果都有效,并且棧寄存器中的數(shù)據(jù)不需要出 棧,則將指定的溢出檢査寄存器的TAG位的值保持,并繼續(xù)執(zhí)行;否則,引 發(fā)浮點棧溢出例外。
7、 根據(jù)權(quán)利要求1至3任一項所述的浮點棧溢出檢査的裝置,其特征在 于,所述棧溢出判斷模塊包括第四判斷子模塊,用于判斷浮點寄存器棧中被指定的兩個棧寄存器是否有效,如果都有效,并且有一個棧寄存器中的數(shù)據(jù)需要 出棧,則將數(shù)據(jù)出棧的棧寄存器對應(yīng)的溢出檢查寄存器的TAG位所對應(yīng)的位 置0,然后繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
8、 根據(jù)權(quán)利要求1至3任一項所述的浮點棧溢出檢查的裝置,其特征在 于,所述棧溢出判斷模塊包括第五判斷子模塊,用于判斷浮點寄存器棧中被指 定的兩個棧寄存器是否有效,如果都有效,并且棧寄存器中的數(shù)據(jù)都需要出棧,則將對應(yīng)的溢出檢査寄存器的TAG位所對應(yīng)的兩位都置0,然后繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
9、 一種在非復(fù)雜指令集計算機處理器上進行浮點棧溢出檢查的方法,其 特征在于,以非復(fù)雜指令集處理器的多個棧寄存器組成浮點寄存器棧; 一溢出檢査寄存器,包括有與所述棧寄存器相應(yīng)的多個位,每個位分別表示相應(yīng)的棧寄存器的狀態(tài),包括下列步驟步驟A,檢査指定的浮點寄存器棧中的棧寄存器,并根據(jù)棧寄存器的值對溢出檢査寄存器進行操作,進行浮點棧溢出檢查。
10、 根據(jù)權(quán)利要求9所述的浮點棧溢出檢査的方法,其特征在于,所述浮點寄存器棧包括8個棧寄存器;所述溢出檢査寄存器為一至少8位的多位通用寄存器,分別表示所述8個棧寄存器的0 7位的狀態(tài)。
11、 根據(jù)權(quán)利要求IO所述的浮點棧溢出檢査的方法,其特征在于,所述 裝置為精簡指令集計算機處理器。
12、 根據(jù)權(quán)利要求9至11任一項所述的浮點棧溢出檢査的方法,其特征 在于,所述步驟A包括下列步驟判斷浮點寄存器棧中被指定的棧寄存器是否為空,如果為空,則將指定的 溢出檢查寄存器的TAG位的相應(yīng)位置1,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢 出例外。
13、 根據(jù)權(quán)利要求9至11任一項所述的浮點棧溢出檢査的方法,其特征在于,所述步驟A包括下列步驟判斷浮點寄存器棧中被指定的棧寄存器是否有效,如果有效,則將指定的溢出檢査寄存器的TAG位的相應(yīng)位置0,并繼續(xù)執(zhí)行;否則,引發(fā)浮點桟溢 出例外。
14、 根據(jù)權(quán)利要求9至11任一項所述的浮點棧溢出檢查的方法,其特征在于,所述步驟A包括下列步驟判斷浮點寄存器棧中被指定的兩個棧寄存器是否都有效,如果都有效,并 且棧寄存器中的數(shù)據(jù)不需要出棧,則將指定的溢出檢查寄存器的TAG位的值 保持,并繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
15、 根據(jù)權(quán)利要求9至11任-一項所述的浮點棧溢出檢査的方法,其特征在于,所述步驟A包括下列歩驟判斷浮點寄存器棧中被指定的兩個棧寄存器是否有效,如果都有效,并且 有一個棧寄存器中的數(shù)據(jù)需要出棧,則將數(shù)據(jù)出棧的棧寄存器對應(yīng)的溢出檢查寄存器的TAG位所對應(yīng)的位置0,然后繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
16、 根據(jù)權(quán)利要求9至11任一項所述的浮點棧溢出檢査的方法,其特征在于,所述步驟A包括下列步驟判斷浮點寄存器棧中被指定的兩個棧寄存器是否有效,如果都有效,并且棧寄存器中的數(shù)據(jù)都需要出棧,則將對應(yīng)的溢出檢查寄存器的TAG位所對應(yīng) 的兩位都置0,然后繼續(xù)執(zhí)行;否則,引發(fā)浮點棧溢出例外。
全文摘要
本發(fā)明公開了一種在非復(fù)雜指令集計算機處理器上進行浮點棧溢出檢查的裝置和方法。該裝置包括一浮點寄存器棧,所述浮點寄存器棧由多個可進行浮點運算的棧寄存器組成;一溢出檢查寄存器,用于在對所述棧寄存器進行浮點訪問時棧溢出例外檢查,其包括有與所述棧寄存器相應(yīng)的多個位,每個位分別表示相應(yīng)的棧寄存器的狀態(tài);一棧溢出判斷模塊,用于檢查指定的浮點寄存器棧中的棧寄存器,并根據(jù)棧寄存器的值對溢出檢查寄存器進行操作,進行浮點棧溢出檢查。其能大大減少虛擬機的工作量,提高效率。
文檔編號G06F7/48GK101158891SQ20071017765
公開日2008年4月9日 申請日期2007年11月19日 優(yōu)先權(quán)日2007年11月19日
發(fā)明者劉哲源, 蘇孟豪 申請人:中國科學(xué)院計算技術(shù)研究所