專利名稱:一種risc處理器裝置及其有界訪存方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)處理器技術(shù)領(lǐng)域,特別是涉及一種精簡指令集計算機(jī) (RISC)處理器裝置及其有界訪存方法。
背景技術(shù):
虛擬機(jī)是20世紀(jì)60年代IBM公司提出的概念,并且付諸實(shí)現(xiàn)。當(dāng)時主 流計算機(jī)是大型機(jī),通過把大型機(jī)分割成多個虛擬機(jī),利用虛擬機(jī)監(jiān)視器 (Virtual Machine Monitor, VMM)的分隔,多種不同應(yīng)用或者多個用戶可以 共享這一稀缺資源。但是,隨著硬件成本降低和計算能力的增強(qiáng),以及多任務(wù)操作系統(tǒng)(OS) 的出現(xiàn),虛擬機(jī)監(jiān)視器慢慢退出歷史舞臺,微型計算機(jī)和個人計算機(jī)(PC) 大行其道。然而,由于虛擬機(jī)的強(qiáng)大和成功在于用戶可以訪問和利用僅僅通過指令集 的組合就可以形成的功能和設(shè)備,最近幾年,虛擬機(jī)監(jiān)視器重新成為學(xué)術(shù)界和 工業(yè)界的焦點(diǎn)。虛擬機(jī)監(jiān)視器為現(xiàn)代計算機(jī)系統(tǒng)體系機(jī)構(gòu)的限制提供一種虛擬 解決方案,使其變成一個強(qiáng)大的工具,這一工具會大大擴(kuò)展現(xiàn)代計算機(jī)系統(tǒng)的 能力。當(dāng)今X86架構(gòu)在很多的應(yīng)用中占據(jù)了主導(dǎo)的地位,很多大型的服務(wù)器類 的應(yīng)用都是X86架構(gòu)。精簡指令集計算機(jī)(Reduced Instruction Set Computing, RISC)架構(gòu)的微處理器為了能夠廣泛地運(yùn)行服務(wù)類的應(yīng)用,實(shí)現(xiàn)與X86架構(gòu) 的兼容就成為了必要的任務(wù)。另外,現(xiàn)有X86架構(gòu)的計算機(jī)中,應(yīng)用程序更 加多樣化,很多商業(yè)軟件都是基于X86架構(gòu)的,所以RISC微處理器要想更為 廣泛地運(yùn)行多樣化的應(yīng)用,也非常需要實(shí)現(xiàn)對X86的兼容。MIPS作為RISC很大的一個分支,目前有很多開源的虛擬機(jī)平臺,可以 實(shí)現(xiàn)MIPS到X86平臺的異構(gòu)支持。X86是段式存儲方式,有專門的段界限寄存器,訪存時要檢查內(nèi)存地址是否超過段界限,如果超過段界限就要報地址越界例外。而RISC處理器,如MIPS中并沒有這一機(jī)制。RISC處理器要支持X86虛擬機(jī)指令的處理,把X86虛擬機(jī)指令代碼翻譯 成MIPS指令代碼,需要在RISC處理器中實(shí)現(xiàn)段式存儲方式。而現(xiàn)有技術(shù)中, 由于X86的訪存操作本身就是比較頻繁的操作,因此,RISC處理器支持的虛 擬機(jī)中,從X86虛擬機(jī)指令到MIPS指令的翻譯,大大影響了虛擬機(jī)運(yùn)行的速 度,使得虛擬機(jī)的運(yùn)行效率很低,難以滿足人們對性能的需求。發(fā)明內(nèi)容本發(fā)明所要解決的問題在于提供一種RISC處理器裝置及其有界訪存方 法。其在RISC處理器支持的X86虛擬機(jī)中,提高X86虛擬機(jī)的速度。為實(shí)現(xiàn)本發(fā)明而提供的一種RISC處理器裝置,包括物理寄存器堆,譯碼 器和運(yùn)算部件,所述物理寄存器堆包括上界地址寄存器,用于存儲作為上界的 有效地址;以及下界地址寄存器,用于存儲作為下界的有效地址;所述運(yùn)算部件,包括第一判斷模塊,用于在訪存指令中,根據(jù)上界地址寄 存器中存儲的上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令操 作數(shù)地址的有效性。所述運(yùn)算部件,還包括第二判斷模塊,用于在訪存指令中,根據(jù)上界地址 寄存器中存儲的上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令 地址的有效性。所述上界地址寄存器、下界地址寄存器可以是物理寄存器中任一通用寄存器°所述訪存指令包括取操作數(shù)指令和/或存操作數(shù)指令。所述讀操作數(shù)指令,為帶上邊界條件的取字節(jié)、帶下邊界條件的取字節(jié)、 帶上邊界條件的取半字、帶下邊界條件的取半字、帶上邊界條件的取字、帶下 邊界條件的取字、帶上邊界條件的取雙字、帶下邊界條件的取雙字、帶上邊界 條件的取單精度浮點(diǎn)數(shù)、帶下邊界條件的取單精度浮點(diǎn)數(shù)、帶上邊界條件的取 雙精度浮點(diǎn)數(shù)、帶下邊界條件的取雙精度浮點(diǎn)數(shù)指令中的一種或者一種以上的 組合。所述存操作數(shù)指令,為帶上邊界條件的存字節(jié)、帶下邊界條件的存字節(jié)、 帶上邊界條件的存半字、帶下邊界條件的存半字、帶上邊界條件的存字、帶下 邊界條件的存字、帶上邊界條件的存雙字、帶下邊界條件的存雙字、帶上邊界 條件的存單精度浮點(diǎn)數(shù)、帶下邊界條件的存單精度浮點(diǎn)數(shù)、帶上邊界條件的存 雙精度浮點(diǎn)數(shù)、帶下邊界條件的存雙精度浮點(diǎn)數(shù)指令中的一種或者一種以上組 合。所述RISC處理器為MIPS64指令集的RISC處理器。 為實(shí)現(xiàn)本發(fā)明目的還提供一種RISC處理器裝置的有界訪存方法,包括下 列步驟步驟A,在RISC處理器的X86虛擬機(jī)中,設(shè)置物理寄存器堆中兩個通用 寄存器分別為上界地址寄存器和下界地址寄存器;步驟B,在進(jìn)行X86虛擬機(jī)指令集到MIPS指令集翻譯時,譯碼器將指令 進(jìn)行譯碼,得到可被RISC處理器處理的二進(jìn)制代碼;步驟C,運(yùn)算部件在譯碼后的訪存指令中,根據(jù)上界地址寄存器中存儲的 上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令操作數(shù)地址的有 效性。步驟D,在訪存指令中,根據(jù)上界地址寄存器中存儲的上界地址和/或下 界地址寄存器中存儲的下界地址,判斷指令地址的有效性。 所述步驟C包括下列步驟步驟C1,指令譯碼后,寄存器中的地址界限作為指令的一個寄存操作數(shù), 操作內(nèi)容數(shù)據(jù)根據(jù)base方式形成有效地址;步驟C2,該有效地址首先跟寄存器中的地址界限比較;步驟C3,如果符合指令的語義條件,即如果寄存器為上界地址寄存器, 該有效地址小于或者等于寄存器中的地址界限;或者如果寄存器為下界地址寄 存器,該有效地址大于或者等于寄存器中的地址界限,那么完成正常的該存操 作;否則引發(fā)地址錯例外。所述步驟C還包括下列步驟步驟C4,在同時判斷上下界的指令中,地址要同時滿足上界條件和下界 條件, 一旦有一個邊界不滿足就發(fā)出越界例外。所述步驟C中,包括下列步驟之一或者其組合步驟T ,如果為帶上邊界條件的取字節(jié)指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地 址錯例外;否則根據(jù)這個有效地址從內(nèi)存中取出8位字節(jié)數(shù)據(jù),將這個數(shù)據(jù)進(jìn) 行符號位擴(kuò)展后存到GPR[rt];步驟2',如果為帶下邊界條件的取字節(jié)指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯 例外;否則根據(jù)這個有效地址從內(nèi)存中取出8位字節(jié)數(shù)據(jù),將這個數(shù)據(jù)進(jìn)行符 號位擴(kuò)展后存到GPR[rt];步驟3',如果為帶上邊界條件的取半字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地 址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出16位半字?jǐn)?shù)據(jù),將這 個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt];步驟4',如果為帶下邊界條件的取半字,則先從GPR[base]的內(nèi)容中得 到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外; 否則根據(jù)這個有效地址從內(nèi)存中取出16位半字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位 擴(kuò)展后存到GPR[rt];步驟5',如果為帶上邊界條件的取字指令,則先從GPR[base]的內(nèi)容中 得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地址 錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位字?jǐn)?shù)據(jù),將這個數(shù) 據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt];步驟6',如果為帶下邊界條件的取字指令,則先從GPR[base]的內(nèi)容中 得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例 外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn) 行符號位擴(kuò)展后存到GPR[rt];步驟7',如果為帶上邊界條件的取雙字指令,則先從GPR[base]的內(nèi)容 得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地址 錯例外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位雙字到GPR[rt];步驟8',如果為帶下邊界條件的取雙字指令,則先從GPR[base]的內(nèi)容 得到有效地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例 外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位雙字到GPR[rt];步驟9',如果為帶上邊界條件的取單精度浮點(diǎn)數(shù),.則先從GPR[base]的' 內(nèi)容中得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā) 出地址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位數(shù)據(jù)存到 FPR[ft]的低32位;步驟10',如果為帶下邊界條件的取單精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容中得到有效地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出 地址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位數(shù)據(jù)存到FPR間 的低32位;步驟11',如果為帶上邊界條件的取雙精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā) 出地址錯例外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位數(shù)據(jù)存到FP卿;步驟12',如果為帶下邊界條件的取雙精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容得到有效地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地 址錯例外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位數(shù)據(jù)存到FPR[ft]。所述步驟3'和/或4'中,所述有效地址是對齊的,如果低l位地址中任 何一位非零,則發(fā)生地址錯例外;所述步驟5'和/或6'和/或9'和/或10'中,所述有效地址是對齊的, 如果低2位地址中任何一位非零,則發(fā)生地址錯例外;所述步驟7'和/或8'禾B/或1T和/或12'中,所述有效地址是對齊的, 如果低3位地址中任何一位非零,則發(fā)生地址錯例外。所述步驟C中,包括下列步驟之一或者其組合步驟1〃 ,如果為帶上邊界條件的存字節(jié)指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地 址錯例外;否則將GPR[rt]中的8位字節(jié)數(shù)據(jù)內(nèi)容保存到內(nèi)存中這個有效地址;步驟2〃 ,如果為帶下邊界條件的存字節(jié)指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯 例外;否則將GPR[rt]中的8位字節(jié)數(shù)據(jù)內(nèi)容保存到內(nèi)存中這個有效地址;步驟3〃 ,如果為帶上邊界條件的存半字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地吃錯例外;否則將GPR[rt]中的16位半字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有 效地址;歩驟4〃 ,如果為帶下邊界條件的存半字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯 侈'J外;否則將GPR[rt]中的16位半字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地 址;步驟5〃 ,如果為帶上邊界條件的存字指令,則先從GPR[base]的內(nèi)容中 得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地址 錯例外;否則將GPR[rt]中的32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地 址;歩驟6〃 ,如果為帶下邊界條件的存字指令,則先從GPR[baseI的內(nèi)容中 得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例 外;否則將GPR[rt]中的32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地址;步驟7",如果為帶上邊界條件的存雙字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地 址錯例外;否則將GPR[rt]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效地 址;步驟8",如果為帶下邊界條件的存雙字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯 例外;否則將GPR[rt]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效地址;步驟9",如果為帶上邊界條件的存單精度浮點(diǎn)數(shù),則先從GPR[base]的 內(nèi)容中得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā) 出地址錯例外;否則將FPR[ft]中的低32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊 的有效地址;步驟10〃 ,如果為帶下邊界條件的存單精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出 地址錯例外;否則將FPR[ft]中的低32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的 有效地址;步驟11〃 ,如果為帶上邊界條件的存雙精度浮點(diǎn)數(shù),則先從GPR[base〗 的內(nèi)容中得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,貝U發(fā)出地址錯例外;否則將FPR[ft]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的 有效地址;步驟12〃 ,如果為帶下邊界條件的存雙精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出 地址錯例外;否則將FPR[ft]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效 地址。所述步驟3〃和/或4〃中,所述有效地址是對齊的,如果低l位地址中任 何一位非零,則發(fā)生地址錯例外;所述歩驟5〃和/或6〃和/或9〃和/或10〃中,所述有效地址是對齊的, 如果低2位地址中任何一位非零,則發(fā)生地址錯例外;所述步驟7"和/或8〃和/或11〃和/或12〃中,所述有效地址是對齊的, 如果低3位地址中任何一位非零,則發(fā)生地址錯例外。所述步驟D包括下列步驟步驟D1,在取操作數(shù)指令中,比較上界地址寄存器,即第一通用寄存器 和下界地址寄存器,即第二通用寄存器中的值,如果上界地址寄存器中的值小 于等于下界地址寄存器中的值,則順序執(zhí)行下一條指令;否則引發(fā)例外。所述步驟D包括下列步驟步驟D2,在讀操作數(shù)指令中,比較上界地址寄存器,即第三通用寄存器 和下界地址寄存器,即第四通用寄存器中的值,如果上界地址寄存器中的值小 于等于下界地址寄存器中的值,則順序執(zhí)行下一條指令;否則引發(fā)例外。本發(fā)明的有益效果是本發(fā)明的RISC處理器裝置及其有界訪存方法,在 RISC處理器支持的虛擬機(jī)中,在從X86虛擬機(jī)指令到MIPS指令集的翻譯成 二進(jìn)制代碼,在RISC處理器上運(yùn)行時,提高翻譯的速度,而將對虛擬機(jī)運(yùn)行 的速度影響降低,提高虛擬機(jī)的運(yùn)行效率。
圖1是本發(fā)明RISC處理器裝置結(jié)構(gòu)示意圖;圖2是本發(fā)明實(shí)施例gsLBLE指令實(shí)現(xiàn)的詳細(xì)格式示意圖; 圖3是本發(fā)明實(shí)施例gsSBLE指令實(shí)現(xiàn)的詳細(xì)格式示意圖; 圖4是本發(fā)明RISC處理器裝置有界訪存方法流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明的一種RISC處理器裝置及其有界訪存方法進(jìn)行進(jìn)一步詳細(xì)說 明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定 本發(fā)明。本發(fā)明的RISC處理器裝置及其有界訪存方法,用于在RISC處理器上支 持虛擬機(jī),當(dāng)進(jìn)行從X86指令集到RISC處理器MIPS指令集的翻譯過程中出 現(xiàn)訪存操作時,增加了對訪存地址的判斷,判斷訪存地址是否越界,進(jìn)而對 X86訪存操作的翻譯提高速度。本發(fā)明實(shí)施例中,以MIPS64指令集的RISC處理器為例,對本發(fā)明的RISC 處理器裝置及其有界訪存方法進(jìn)行詳細(xì)說明,但應(yīng)當(dāng)說明的是,其并不是對本 發(fā)明的限制,本發(fā)明請求保護(hù)的范圍,以權(quán)利要求書為準(zhǔn)。X86的段式存儲方式中,地址界限分為上界和下界,訪存的有效地址要保 證不能大于或者不能小于下界。如圖1所示,本發(fā)明實(shí)施例的MIPS指令集的RISC處理器裝置,包括物 理寄存器堆l,譯碼器2和運(yùn)算部件3。所述物理寄存器堆1包括上界地址寄存器11,用于存儲作為上界的有效 地址;以及下界地址寄存器12,用于存儲作為下界的有效地址。所述上界地址寄存器11、下界地址寄存器12可以是物理寄存器中任一通 用寄存器。所述譯碼器2,用于將指令進(jìn)行譯碼,得到可被RISC處理器處理的二進(jìn) 制代碼。所述運(yùn)算部件3,包括第一判斷模塊31,用于在訪存指令中,根據(jù)上界地 址寄存器中存儲的上界地址和/或下界地址寄存器中存儲的下界地址,判斷指 令操作數(shù)地址的有效性。在MIPS指令集中的每條訪存指令,如load指令或者store指令中,增加 界限的判斷,這些指令如果訪存地址滿足條件則正常訪存,否則引發(fā)MIPS中 的地址錯例外。在MIPS指令集的base尋址方式的訪存指令中,增加上界地址寄存器和/或下界地址寄存器,分別存儲地址上界界限和/或下界界限。指令譯碼后,寄存器中的地址界限作為指令的一個寄存操作數(shù),當(dāng)操作內(nèi)容數(shù)據(jù)根據(jù)base方式形成有效地址后,該有效地址首先跟寄存器中的地址界 限比較,如果符合指令的語義條件,即如果寄存器為上界地址寄存器,該有效 地址小于或者等于寄存器中的地址界限,或者如果寄存器為下界地址寄存器, 該有效地址大于或者等于寄存器中的地址界限,那么完成正常的該存操作;否 則引發(fā)地址錯例外。本發(fā)明實(shí)施例中,作為一種可實(shí)施方式,對MIPS指令集中的共24條訪 存指令,包括load指令和store指令,增加界限判斷。其中12條load指令,包含8條定點(diǎn)指令,4條浮點(diǎn)指令,尋址方式都是base方式。這些指令分別為帶上邊界條件的取字節(jié)、帶下邊界條件的取字節(jié)、帶上邊 界條件的取半字、帶下邊界條件的取半字、帶上邊界條件的取字、帶下邊界條 件的取字、帶上邊界條件的取雙字、帶下邊界條件的取雙字、帶上邊界條件的 取單精度浮點(diǎn)數(shù)、帶下邊界條件的取單精度浮點(diǎn)數(shù)、帶上邊界條件的取雙精度 浮點(diǎn)數(shù)、帶下邊界條件的取雙精度浮點(diǎn)數(shù)指令中的一種或者一種以上組合。指令的詳細(xì)描述如下gsLBLE rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這個有效地址從內(nèi)存中取 出8位字節(jié)數(shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt]。gsLBGT rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這個有效地址從內(nèi)存中取出8位字節(jié) 數(shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt]。gs3LHLE rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi) 存中取出16位半字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt]。較佳地,所述有效地址是對齊的,如果低1位地址中任何一位非零,則發(fā) 生地址錯例外。gsLHGT rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這個有效地址從內(nèi)存中取出16位半 字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt]。較佳地,所述有效地址是對齊的,如果低1位地址中任何一位非零,則發(fā) 生地址錯例外。gsLWLE rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi) 存中取出32位字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt]。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。gsLWGT rt, base, bound先從GPH[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出 32位字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt]。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。gsLDLE rt, base, bound先從GPR[basel的內(nèi)容得到有效地址,如果有效地址不小于等于 GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外否則根據(jù)這個對齊的有效地址從內(nèi) 存中取出64位雙字到GPR[rt]。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。gsLDGT rt, base, bound先從GPR[base]的內(nèi)容得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出 64位雙字到GPR[rt]。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。gsLWLECl ft, base, bound先從'GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi) 存中取出32位數(shù)據(jù)存到FPR[ft]的低32位。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。gsLWGTCl ft, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出 32位數(shù)據(jù)存到FPR[ft]的低32位。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。gsLDLEC 1 ft, base, bound先從GPR[base]的內(nèi)容得到有效地址,如果有效地址不小于等于 GPR[boimd;i中的內(nèi)容,則發(fā)出地址錯例外否則根據(jù)這個對齊的有效地址從內(nèi) 存中取出64位數(shù)據(jù)存到FPR[ft]。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。gsLDGTC 1 ft, base, bound先從GPR[base]的內(nèi)容得到有效地址,如果有效地址不大于GPR[bound〗 中的內(nèi)容,則發(fā)出地址錯例外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出 64位數(shù)據(jù)存到FPR[ft]。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。本發(fā)明實(shí)施例利用現(xiàn)有MIPS64指令集中保留的LWC2和SWC2空槽的 值來定義。以gsLBLE為例,其指令實(shí)現(xiàn)的詳細(xì)格式如圖2所示。由于MIPS64 指令集的32位指令碼的高6位(31bit: 26bit)為opcode域。LWC2 (opcode 為110010)和SWC2 (opcode為111010)指令槽按MIPS的規(guī)定是可以由用 戶自主定義的。其他指令類似,本領(lǐng)域技術(shù)人員根據(jù)該指令格式示意圖,可以實(shí)現(xiàn)本發(fā)明 的其他指令,因此,在本發(fā)明實(shí)施例中不再一一詳細(xì)描述。12條store指令,包含8條定點(diǎn)指令,4條浮點(diǎn)指令,尋址方式都是base 方式。這些指令分別為帶上邊界條件的存字節(jié)、帶下邊界條件的存字節(jié)、帶上邊 界條件的存半字、帶下邊界條件的存半字、帶上邊界條件的存字、帶下邊界條 件的存字、帶上邊界條件的存雙字、帶下邊界條件的存雙字、帶上邊界條件的 存單精度浮點(diǎn)數(shù)、帶下邊界條件的存單精度浮點(diǎn)數(shù)、帶上邊界條件的存雙精度 浮點(diǎn)數(shù)、帶下邊界條件的存雙精度浮點(diǎn)數(shù)指令中的一種或者一種以上組合。指令的詳細(xì)描述如下gsSBLE rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則將GPR[rt]中的8位字節(jié)數(shù)據(jù) 內(nèi)容保存到內(nèi)存中這個有效地址。gsSBGT rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則將GPR[rt]中的8位字節(jié)數(shù)據(jù)內(nèi)容保存到 內(nèi)存中這個有效地址。gsSHLE rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則將GPR[rt]中的16位半字?jǐn)?shù)據(jù) 內(nèi)容保存到內(nèi)存中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低1位地址中任何一位非零,則發(fā) 生地址錯例外。gsSHGT rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則將GPR[rt]中的16位半字?jǐn)?shù)據(jù)內(nèi)容保存到 內(nèi)存中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低1位地址中任何一位非零,則發(fā) 生地址錯例外。gsSWLE rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則將GPR[rt]中的32位字?jǐn)?shù)據(jù)內(nèi) 容保存到內(nèi)存中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。gsSWGT rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則將GPR[rt]中的32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi) 存中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。gsSDLE rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則將GPR[rt]中的64位雙字內(nèi)容 保存到內(nèi)存中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。gsSDGT rt, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則將GPR[rt]中的64位雙字內(nèi)容保存到內(nèi)存 中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。gsSWLECl ft, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則將FPR[ft]中的低32位字?jǐn)?shù)據(jù) 內(nèi)容保存到內(nèi)存中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。gsSWGTCl ft, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則將FPR[ft]中的低32位字?jǐn)?shù)據(jù)內(nèi)容保存到 內(nèi)存中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。gsSDLJECl ft, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于 GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則將FPR[ft]中的64位雙字內(nèi)容 保存到內(nèi)存中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。gsSDGTCl ft, base, bound先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound] 中的內(nèi)容,則發(fā)出地址錯例外;否則將FPR[ft]中的64位雙字內(nèi)容保存到內(nèi)存 中這個對齊的有效地址。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。以gsSBLE指令為例,其實(shí)現(xiàn)的詳細(xì)格式如圖3所示。其他指令類似,本 領(lǐng)域技術(shù)人員根據(jù)該指令格式示意圖,可以實(shí)現(xiàn)本發(fā)明的其他指令,因此,在 本發(fā)明實(shí)施例中不再一一詳細(xì)描述。在同時判斷上下界的指令中,地址要同時滿足上界條件和下界條件, 一旦 有一個邊界不滿足就會發(fā)出越界例外。較佳地,所述運(yùn)算部件3還包括第二判斷模塊32,用于在訪存指令中, 根據(jù)上界地址寄存器中存儲的上界地址和/或下界地址寄存器中存儲的下界地 址,判斷指令地址的有效性。作為一種可實(shí)施方式,在RISC處理器MIPS指令集中增加兩條指令,用 于進(jìn)行寄存器值的比較,這兩條指令用于地址是否越界的判斷,如果地址滿足條件則空操作,否則引發(fā)RISC處理器中的地址錯例外。 另外,實(shí)現(xiàn)兩條指令gsLErs, rt禾卩gsGTrs, rt。指令的詳細(xì)描述如下gsLE rs, rt比較寄存器中的值,置條件地址錯例外。比較通用寄存器GPR [rs]和通用寄存器GPR [rt]中的值,如果GPR [rs]中 的值小于等于GPR[rt]中的值,則順序執(zhí)行下一條指令;否則引發(fā)adel例外。gsGT rs, rt比較寄存器中的值,置條件地址錯例外。比較通用寄存器GPR [rs]和通用寄存器GPR [rt]中的^t,如果GPR [rs]中 的值大于GPR[rt]中的值,則順序執(zhí)行下一條指令;否則引發(fā)add例外。這兩條指令用于地址比較,rs寄存器中存放地址界限值,rt寄存器存放待 比較的有效地址,如果滿足條件則順序執(zhí)行下一條指令,否則引發(fā)地址錯例外。這兩條指令分別比較通用寄存器GPR[rs]和通用寄存器GPR[rt]中的值,如 果GPR[rs]中的值小于等于或者大于GPR[rt]中的值,其中,小于等于是對于 gsLErs, rt而言的;大于是對于gsGTrs, rt而言的,則順序執(zhí)行下一條指令; 否則引發(fā)地址錯例外。相應(yīng)地,本發(fā)明還提供一種RIRSC處理器裝置的有界訪存方法,如圖4 所示,其包括如下歩驟步驟S100,在RISC處理器的X86虛擬機(jī)中,設(shè)置物理寄存器堆1中兩 個通用寄存器分別為上界地址寄存器和下界地址寄存器。其中,上界地址寄存器存儲作為上界的有效地址;下界地址寄存器存儲作 為下界的有效地址。步驟S200,在進(jìn)行X86虛擬機(jī)指令集到MIPS指令集翻譯時,譯碼器2 將指令進(jìn)行譯碼,得到可被RISC處理器處理的二進(jìn)制代碼。步驟S300,運(yùn)算部件3在譯碼后的訪存指令中,根據(jù)上界地址寄存器中 存儲的上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令操作數(shù)地 址的有效性。在MIPS指令集中的每條訪存指令,如load指令或者store指令中,增加 界限的判斷,這些指令如果訪存地址滿足條件則正常訪存,否則引發(fā)MIPS中 的地址錯例外。所述步驟S300包括下列步驟步驟S310,指令譯碼后,寄存器中的地址界限作為指令的一個寄存操作數(shù),操作內(nèi)容數(shù)據(jù)根據(jù)base方式形成有效地址;步驟S320,該有效地址首先跟寄存器中的地址界限比較;步驟S330,如果符合指令的語義條件,即如果寄存器為上界地址寄存器,該有效地址小于或者等于寄存器中的地址界限;或者如果寄存器為下界地址寄存器,該有效地址大于或者等于寄存器中的地址界限,那么完成正常的該存操作;否則引發(fā)地址錯例外。具體地,所述歩驟S330,對于取操作數(shù)(load)指令操作,貝IJ: 如果為帶上邊界條件的取字節(jié)指令,則先從GPR[base]的內(nèi)容中得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這個有效地址從內(nèi)存中取出8位字節(jié)數(shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt],艮卩gsLBLE rt, base, bound。如果為帶下邊界條件的取字節(jié)指令,則先從GPR[base]的內(nèi)容中得到有效 地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則 根據(jù)這個有效地址從內(nèi)存中取出8位字節(jié)數(shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后 存到GPR[rt],艮卩gsLBGT rt, base, bound 。如果為帶上邊界條件的取半字指令,則先從GPR[base]的內(nèi)容中得到有效 地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外; 否則根據(jù)這個對齊的有效地址從內(nèi)存中取出16位半字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行 符號位擴(kuò)展后存到GPR[rt],即gsLHLE rt, base, bound。較佳地,所述有效地址是對齊的,如果低l位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的取半字,則先從GPR[base]的內(nèi)容中得到有效地址, 如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則根據(jù)這 個有效地址從內(nèi)存中取出16位半字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到 GPR[rt],即gsLHGT rt, base, bound 。較佳地,所述有效地址是對齊的,如果低1位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶上邊界條件的取字指令,則先從GPR[base]的內(nèi)容中得到有效地 址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外;否 則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號 位擴(kuò)展后存到GPR[rt],即gsLWLE rt, base, bound。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的取字指令,則先從GPR[base]的內(nèi)容中得到有效地 址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外;否則根 據(jù)這個對齊的有效地址從內(nèi)存中取出32位字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位擴(kuò) 展后存到GPR[rt〗,艮卩gsLWGT rt, base, bound。較佳地,有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā)生地 址錯例外。如果為帶上邊界條件的取雙字指令,則先從GPR[base]的內(nèi)容得到有效地 址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外否 則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位雙字到GPR[rt],即gsLDLE rt, base, bound 。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的取雙字指令,則先從GPR[base]的內(nèi)容得到有效地 址,如果有效地址不大于GPR[boimdl中的內(nèi)容,則發(fā)出地址錯例外否則根 據(jù)這個對齊的有效地址從內(nèi)存中取出64位雙字到GPR[rt],即gsLDGT rt, base, bound 。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶上邊界條件的取單精度浮點(diǎn)數(shù),則先從GPR[base]的內(nèi)容中得到 有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例 外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位數(shù)據(jù)存到FPR[ft]的低32 位,艮卩gsLWLECl ft, base, bound 。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的取單精度浮點(diǎn)數(shù),則先從GPR[base]的內(nèi)容中得到 有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外; 否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位數(shù)據(jù)存到FPR[ft]的低32位, 即gsLWGTCl ft, base, bound 。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶上邊界條件的取雙精度浮點(diǎn)數(shù),則先從GPR[base]的內(nèi)容得到有 效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外 否則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位數(shù)據(jù)存到FPR[ft],即 gsLDLECl ft, base, bound 。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的取雙精度浮點(diǎn)數(shù),則先從GPR[base]的內(nèi)容得到有 效地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外否 則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位數(shù)據(jù)存到FPR[ft],即 gsLDGTC 1 ft, base, bound 。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。所述步驟S330,對于存操作數(shù)(store)指令操作,貝廿 如果為帶上邊界條件的存字節(jié)指令,則先從GPR[base]的內(nèi)容中得到有效 地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外; 否則將GPR[rt]中的8位字節(jié)數(shù)據(jù)內(nèi)容保存到內(nèi)存中這個有效地址,即gsSBLE rt, base, bound 。如果為帶下邊界條件的存字節(jié)指令,則先從GPR[base]的內(nèi)容中得到有效 地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外;否則 將GPR[rt]中的8位字節(jié)數(shù)據(jù)內(nèi)容保存到內(nèi)存中這個有效地址,即gsSBGT rt, base, bound 。如果為帶上邊界條件的存半字指令,則先從GPR[base]的內(nèi)容中得到有效 地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地吃錯例外; 否則將GPR[rt]中的16位半字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地址,即 gsSHLE rt, base, bound 。較佳地,所述有效地址是對齊的,如果低l位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的存半字指令,則先從GPR[base]的內(nèi)容中得到有效 地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外;否則 將GPR[rt]中的16位半字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地址,即 gsSHGT rt, base, bound 。較佳地,所述有效地址是對齊的,如果低1位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶上邊界條件的存字指令,則先從GPR[base]的內(nèi)容中得到有效地 址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否 則將GPR[rt]中的32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地址,即 gsSWLE rt, base, bound 。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的存字指令,則先從GPR[base]的內(nèi)容中得到有效地 址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例外;否則將 GPR[rt]中的32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地址,即gsSWGT rt, base, bound 。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶上邊界條件的存雙字指令,則先從GPR[base]的內(nèi)容中得到有效 地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外; 否則將GPR[rt]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效地址,即 gsSDLE rt, base, bound 。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的存雙字指令,則先從GPR[base]的內(nèi)容中得到有效 地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外;否則 將GPR[rt]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效地址。即gsSDGT rt, base, bound 。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶上邊界條件的存單精度浮點(diǎn)數(shù),則先從GPR[base]的內(nèi)容中得到 有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例 夕卜;否則將FPR[ft]中的低32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地址, 即gsSWLECl ft, base, bound 。較佳±也,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的存單精度浮點(diǎn)數(shù),則先從GPR[base]的內(nèi)容中得到 有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外; 否則將FPR[ft]中的低32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地址,即 gsSWGTCl ft, base, bound。較佳地,所述有效地址是對齊的,如果低2位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶上邊界條件的存雙精度浮點(diǎn)數(shù),則先從GPR[base]的內(nèi)容中得到 有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例 外;否則將FPR[ft]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效地址,即 gsSDLECl ft, base, bound 。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。如果為帶下邊界條件的存雙精度浮點(diǎn)數(shù),則先從GPR[base]的內(nèi)容中得到 有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外; 否則將FPR[ft]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效地址,即 gsSDGTCl ft, base, bound 。較佳地,所述有效地址是對齊的,如果低3位地址中任何一位非零,則發(fā) 生地址錯例外。所述步驟S300還包括下列步驟步驟S340,在同時判斷上下界的指令中,地址要同時滿足上界條件和下 界條件, 一旦有一個邊界不滿足就發(fā)出越界例外。更佳地,所述步驟S300之后還包括下列步驟步驟S400,在訪存指令中,根據(jù)上界地址寄存器ll中存儲的上界地址和 /或下界地址寄存器12中存儲的下界地址,判斷指令地址的有效性。 所述步驟S400包括下列步驟步驟S410,在取操作數(shù)(load)指令中,比較通用寄存器GPR[rs],即上 界地址寄存器11和通用寄存器GPR[rt],即下界地址寄存器12中的值,如果 GPR [rs]中的值小于等于GPR [rt]中的值,則順序執(zhí)行下一條指令;否則引發(fā) adel例夕卜,艮卩gsLE rs, rt。步驟S420,在寫操作數(shù)(store)指令中,比較通用寄存器GPR [rsj,即上 界地址寄存器11和通用寄存器GPR[rt],即下界地址寄存器12中的值,如果 GPR [rs]中的值大于GPR [rt]中的值,則順序執(zhí)行下一條指令;否則引發(fā)adel 例外,即gsGT rs,rt。本發(fā)明的RISC處理器裝置及其有界訪存方法,在RISC處理器支持的虛 擬機(jī)中,在從X86虛擬機(jī)指令到MIPS指令集的翻譯成二進(jìn)制代碼,在RISC 處理器上運(yùn)行時,提高翻譯的速度,而將對虛擬機(jī)運(yùn)行的速度影響降低,提高 虛擬機(jī)的運(yùn)行效率。以上通過結(jié)合附圖對本發(fā)明具體實(shí)施例的描述,本發(fā)明的其它方面及特征 對本領(lǐng)域的技術(shù)人員而言是顯而易見的。應(yīng)當(dāng)說明的是這些實(shí)施例應(yīng)被認(rèn)為其 只是示例性的,并不用于對本發(fā)明進(jìn)行限制,本發(fā)明應(yīng)根據(jù)所附的權(quán)利要求進(jìn) 行解釋。
權(quán)利要求
1、一種RISC處理器裝置,包括物理寄存器堆,譯碼器和運(yùn)算部件,其特征在于所述物理寄存器堆包括上界地址寄存器,用于存儲作為上界的有效地址;以及下界地址寄存器,用于存儲作為下界的有效地址;所述運(yùn)算部件,包括第一判斷模塊,用于在訪存指令中,根據(jù)上界地址寄存器中存儲的上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令操作數(shù)地址的有效性。
2、 根據(jù)權(quán)利要求1所述的RISC處理器裝置,其特征在于,所述運(yùn)算部 件,還包括第二判斷模塊,用于在訪存指令中,根據(jù)上界地址寄存器中存儲的 上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令地址的有效性。
3、 根據(jù)權(quán)利要求1或2所述的RISC處理器裝置,其特征在于,所述上界地址寄存器、下界地址寄存器可以是物理寄存器中任一通用寄存器。
4、 根據(jù)權(quán)利要求1或2所述的RISC處理器裝置,其特征在于,所述訪 存指令包括取操作數(shù)指令和/或存操作數(shù)指令。
5、 根據(jù)權(quán)利要求4所述的RISC處理器裝置,其特征在于,所述讀操作 數(shù)指令,為帶上邊界條件的取字節(jié)、帶下邊界條件的取字節(jié)、帶上邊界條件的 取半字、帶下邊界條件的取半字、帶上邊界條件的取字、帶下邊界條件的取字、 帶上邊界條件的取雙字、帶下邊界條件的取雙字、帶上邊界條件的取單精度浮 點(diǎn)數(shù)、帶下邊界條件的取單精度浮點(diǎn)數(shù)、帶上邊界條件的取雙精度浮點(diǎn)數(shù)、帶 下邊界條件的取雙精度浮點(diǎn)數(shù)指令中的一種或者一種以上的組合。
6、 根據(jù)權(quán)利要求4所述的RISC處理器裝置,其特征在于,所述存操作 數(shù)指令,為帶上邊界條件的存字節(jié)、帶下邊界條件的存字節(jié)、帶上邊界條件的 存半字、帶下邊界條件的存半字、帶上邊界條件的存字、帶下邊界條件的存字、 帶上邊界條件的存雙字、帶下邊界條件的存雙字、帶上邊界條件的存單精度浮 點(diǎn)數(shù)、帶下邊界條件的存單精度浮點(diǎn)數(shù)、帶上邊界條件的存雙精度浮點(diǎn)數(shù)、帶 下邊界條件的存雙精度浮點(diǎn)數(shù)指令中的一種或者一種以上組合。
7、 根據(jù)權(quán)利要求1或2所述的RISC處理器裝置,其特征在于,所述RISC 處理器為MIPS64指令集的RISC處理器。
8、 一種RISC處理器裝置的有界訪存方法,其特征在于,包括下列步驟步驟A,在RISC處理器的X86虛擬機(jī)中,設(shè)置物理寄存器堆中兩個通用 寄存器分別為上界地址寄存器和下界地址寄存器;步驟B,在進(jìn)行X86虛擬機(jī)指令集到MIPS指令集翻譯時,譯碼器將指令 進(jìn)行譯碼,得到可被RISC處理器處理的二進(jìn)制代碼;步驟C,運(yùn)算部件在譯碼后的訪存指令中,根據(jù)上界地址寄存器中存儲的 上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令操作數(shù)地址的有 效性。
9、 根據(jù)權(quán)利要求8所述的有界訪存方法,其特征在于,還包括下列步驟 步驟D,在訪存指令中,根據(jù)上界地址寄存器中存儲的上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令地址的有效性。
10、 根據(jù)權(quán)利要求8或9所述的有界訪存方法,其特征在于,所述步驟C 包括下列步驟步驟C1,指令譯碼后,寄存器中的地址界限作為指令的一個寄存操作數(shù),操作內(nèi)容數(shù)據(jù)根據(jù)base方式形成有效地址;步驟C2,該有效地址首先跟寄存器中的地址界限比較;步驟C3,如果符合指令的語義條件,即如果寄存器為上界地址寄存器,該有效地址小于或者等于寄存器中的地址界限;或者如果寄存器為下界地址寄存器,該有效地址大于或者等于寄存器中的地址界限,那么完成正常的該存操作;否則引發(fā)地址錯例外。
11、 根據(jù)權(quán)利要求10所述的有界訪存方法,其特征在于,所述步驟C還 包括下列步驟步驟C4,在同時判斷上下界的指令中,地址要同時滿足上界條件和下界 條件, 一旦有一個邊界不滿足就發(fā)出越界例外。
12、 根據(jù)權(quán)利要求8或9所述的有界訪存方法,其特征在于,所述步驟C 中,包括下列步驟之一或者其組合步驟l',如果為帶上邊界條件的取字節(jié)指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[bmmd]中的內(nèi)容,則發(fā)出地 址錯例外;否則根據(jù)這個有效地址從內(nèi)存中取出8位字節(jié)數(shù)據(jù),將這個數(shù)據(jù)進(jìn) 行符號位擴(kuò)展后存到GPR[rt];步驟2',如果為帶下邊界條件的取字節(jié)指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯 例外;否則根據(jù)這個有效地址從內(nèi)存中取出8位字節(jié)數(shù)據(jù),將這個數(shù)據(jù)進(jìn)行符 號位擴(kuò)展后存到GPR[rt];步驟3',如果為帶上邊界條件的取半字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地 址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出16位半字?jǐn)?shù)據(jù),將這 個數(shù)據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt];步驟4',如果為帶下邊界條件的取半字,則先從GPR[base]的內(nèi)容中得 到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例外; 否則根據(jù)這個有效地址從內(nèi)存中取出16位半字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn)行符號位 擴(kuò)展后存到GPR[rt];步驟5',如果為帶上邊界條件的取字指令,則先從GPR[base]的內(nèi)容中 得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地址 錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位字?jǐn)?shù)據(jù),將這個數(shù) 據(jù)進(jìn)行符號位擴(kuò)展后存到GPR[rt];步驟6',如果為帶下邊界條件的取字指令,則先從GPR[base]的內(nèi)容中 得到有效地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出地址錯例 外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位字?jǐn)?shù)據(jù),將這個數(shù)據(jù)進(jìn) 行符號位擴(kuò)展后存到GPR[rt];步驟7',如果為帶上邊界條件的取雙字指令,則先從GPR[base]的內(nèi)容 得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地址 錯例外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位雙字到GPR[rt];步驟8',如果為帶下邊界條件的取雙字指令,則先從GPR[base]的內(nèi)容 得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例 外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位雙字到GPR[rt];步驟9',如果為帶上邊界條件的取單精度浮點(diǎn)數(shù),則先從GPR[base]的 內(nèi)容中得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā) 出地址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位數(shù)據(jù)存到 FPR[ft]的低32位;步驟10',如果為帶下邊界條件的取單精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出 地址錯例外;否則根據(jù)這個對齊的有效地址從內(nèi)存中取出32位數(shù)據(jù)存到FPR[ft] 的低32位;步驟ir ,如果為帶上邊界條件的取雙精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā) 出地址錯例外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位數(shù)據(jù)存到 FPR[ft];步驟12',如果為帶下邊界條件的取雙精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地 址錯例外否則根據(jù)這個對齊的有效地址從內(nèi)存中取出64位數(shù)據(jù)存到FPR[ft]。
13、 根據(jù)權(quán)利要求12所述的有界訪存方法,其特征在于 所述步驟3'和/或4'中,所述有效地址是對齊的,如果低l位地址中任何一位非零,則發(fā)生地址錯例外;所述步驟5'和/或6'和/或9'和/或10'中,所述有效地址是對齊的, 如果低2位地址中任何一位非零,則發(fā)生地址錯例外;所述步驟7'和/或8'和/或ll'和/或12'中,所述有效地址是對齊的, 如果低3位地址中任何一位非零,則發(fā)生地址錯例外。
14、 根據(jù)權(quán)利要求8或9所述的有界訪存方法,其特征在于,所述步驟C 中,包括下列步驟之一或者其組合步驟1〃 ,如果為帶上邊界條件的存字節(jié)指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā)出地 址錯例外;否則將GPR[rt]中的8位字節(jié)數(shù)據(jù)內(nèi)容保存到內(nèi)存中這個有效地址;步驟2",如果為帶下邊界條件的存字節(jié)指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯 例外;否則將GPR[rt]中的8位字節(jié)數(shù)據(jù)內(nèi)容保存到內(nèi)存中這個有效地址;步驟3〃 ,如果為帶上邊界條件的存半字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地 吃錯例外;否則將GPR[rt]中的16位半字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有 效地址;步驟4",如果為帶下邊界條件的存半字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不大于GPR[bmmd]中的內(nèi)容,則發(fā)出地址錯 例外;否則將GPR[rt]中的16位半字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地 址;步驟5〃 ,如果為帶上邊界條件的存字指令,則先從GPR[base]的內(nèi)容中 得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地址 錯例外;否則將GPR[rt]中的32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地 址;步驟6〃,如果為帶下邊界條件的存字指令,則先從GPR[base]的內(nèi)容中 得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯例 外;否則將GPR[rt]中的32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的有效地址;步驟7〃 ,如果為帶上邊界條件的存雙字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不小于等于GPR[bound]中的內(nèi)容,則發(fā)出地 址錯例外;否則將GPR[rt]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效地 址;步驟8〃 ,如果為帶下邊界條件的存雙字指令,則先從GPR[base]的內(nèi)容 中得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出地址錯 例外;否則將GPR[rt]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效地址;步驟9〃 ,如果為帶上邊界條件的存單精度浮點(diǎn)數(shù),則先從GPR[base]的 內(nèi)容中得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則發(fā) 出地址錯例外;否則將FPR[ft]中的低32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊 的有效地址;步驟10〃 ,如果為帶下邊界條件的存單精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容中得到有效地址,如果有效地址不大于GPR[bound]中的內(nèi)容,則發(fā)出 地址錯例外;否則將FPR[ft]中的低32位字?jǐn)?shù)據(jù)內(nèi)容保存到內(nèi)存中這個對齊的 有效地址;步驟11〃 ,如果為帶上邊界條件的存雙精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容中得到有效地址,如果有效地址不小于等于GPR[boimd]中的內(nèi)容,則 發(fā)出地址錯例外;否則將FPR[ft]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的 有效地址;步驟12〃 ,如果為帶下邊界條件的存雙精度浮點(diǎn)數(shù),則先從GPR[base] 的內(nèi)容中得到有效地址,如果有效地址不大于GPR[boimd]中的內(nèi)容,則發(fā)出 地址錯例外;否則將FPR[ft]中的64位雙字內(nèi)容保存到內(nèi)存中這個對齊的有效 地址。
15、 根據(jù)權(quán)利要求14所述的有界訪存方法,其特征在于 所述步驟3〃和/或4"中,所述有效地址是對齊的,如果低l位地址中任何一位非零,則發(fā)生地址錯例外;所述步驟5〃和/或6〃和/或9"和/或10"中,所述有效地址是對齊的, 如果低2位地址中任何一位非零,則發(fā)生地址錯例外;所述步驟7〃和/或8〃和/或ll"和/或12"中,所述有效地址是對齊的, 如果低3位地址中任何一位非零,則發(fā)生地址錯例外。
16、 根據(jù)權(quán)利要求9所述的有界訪存方法,其特征在于,所述步驟D包 括下列步驟步驟D1,在取操作數(shù)指令中,比較上界地址寄存器,即第一通用寄存器 和下界地址寄存器,即第二通用寄存器中的值,如果上界地址寄存器中的值小 于等于下界地址寄存器中的值,則順序執(zhí)行下一條指令;否則引發(fā)例外。
17、 根據(jù)權(quán)利要求9所述的有界訪存方法,其特征在于,所述步驟D包 括下列步驟步驟D2,在讀操作數(shù)指令中,比較上界地址寄存器,即第三通用寄存器 和下界地址寄存器,即第四通用寄存器中的值,如果上界地址寄存器中的值小 于等于下界地址寄存器中的值,則順序執(zhí)行下一條指令;否則引發(fā)例外。
全文摘要
本發(fā)明公開了一種RISC處理器裝置及其有界訪存方法。該裝置包括物理寄存器堆,譯碼器和運(yùn)算部件,所述物理寄存器堆包括上界地址寄存器,用于存儲作為上界的有效地址;以及下界地址寄存器,用于存儲作為下界的有效地址;所述運(yùn)算部件,包括第一判斷模塊,用于在訪存指令中,根據(jù)上界地址寄存器中存儲的上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令操作數(shù)地址的有效性;還包括第二判斷模塊,用于在訪存指令中,根據(jù)上界地址寄存器中存儲的上界地址和/或下界地址寄存器中存儲的下界地址,判斷指令地址的有效性。其在RISC處理器支持的X86虛擬機(jī)中,提高X86虛擬機(jī)的速度。
文檔編號G06F9/38GK101226468SQ20081005721
公開日2008年7月23日 申請日期2008年1月30日 優(yōu)先權(quán)日2008年1月30日
發(fā)明者李國杰, 胡偉武, 蔡嵩松 申請人:中國科學(xué)院計算技術(shù)研究所