亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種risc處理器裝置及其多模式下數(shù)據(jù)處理方法

文檔序號(hào):6613957閱讀:269來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):一種risc處理器裝置及其多模式下數(shù)據(jù)處理方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)微處理器技術(shù)領(lǐng)域,特別是涉及復(fù)雜指令集計(jì)算機(jī) (RISC)處理器裝置以及其在多種虛擬機(jī)運(yùn)行模式下數(shù)據(jù)處理方法。
背景技術(shù)
復(fù)雜指令集計(jì)算機(jī)(Complex Instruction Set Computing, CISC)和精簡(jiǎn)指 令計(jì)算機(jī)(Reduced Instruction Set Computing, RISC)是當(dāng)前CPU的兩種架構(gòu)。 不同架構(gòu)的處理器只能執(zhí)行自己的指令集,如Intel的機(jī)器只能執(zhí)行80X86的 指令集(一種CISC指令集),不能執(zhí)行RISC的指令集;而RISC架構(gòu)的計(jì) 算不能執(zhí)行80X86的指令集。而由于這種硬件體系結(jié)構(gòu)的不同,操作系統(tǒng)和 各種應(yīng)用軟件通常只能在特定架構(gòu)的計(jì)算機(jī)上執(zhí)行,如RISC架構(gòu)的微處理器 不能充分利用X86系列機(jī)器已有的廣泛的應(yīng)用軟件。
為了克服上述缺陷,更充分地使用有限的計(jì)算機(jī)軟硬件資源,出現(xiàn)了虛擬 機(jī)技術(shù)。
虛擬機(jī)是處于計(jì)算機(jī)軟件和硬件中的一個(gè)虛擬的中間層,用來(lái)給上層的應(yīng) 用軟件程序或者操作系統(tǒng)提供一個(gè)所需要的虛擬軟件/硬件平臺(tái)。上層的應(yīng)用 軟件程序或者操作系統(tǒng)是通過(guò)這處虛擬的中間層,如虛擬機(jī)監(jiān)視器(Virtual Machine Monitor, VMM)來(lái)與硬件進(jìn)行通信,由VMM來(lái)決定其對(duì)系統(tǒng)上所 有虛擬硬件設(shè)備的訪(fǎng)問(wèn)。在具有多種模式的多個(gè)虛擬機(jī)在處理器中運(yùn)行時(shí),處 理器執(zhí)行指令過(guò)程中,將不同模式下的虛擬機(jī)指令翻譯成本處理器可以執(zhí)行的 指令,并在指令執(zhí)行完畢后將執(zhí)行結(jié)果翻譯成虛擬機(jī)指令執(zhí)行結(jié)果,傳輸給虛 擬機(jī)。
但是,現(xiàn)有技術(shù)中,由于虛擬機(jī)在運(yùn)行過(guò)程中,需要執(zhí)行大量的代碼,而 在不同的虛擬機(jī)上執(zhí)行時(shí),其語(yǔ)義是有區(qū)別的,即同一條指令在RISC處理器 和X86處理器上的語(yǔ)義是有區(qū)別的,如加法指令x86上除了計(jì)算結(jié)果外還要 根據(jù)結(jié)果計(jì)算EFLAG標(biāo)志位等,這樣在處理器翻譯過(guò)程中,更需要大量的翻
譯工作,從而從整體上降低的處理器的性能。因此,如何解決處理器在虛擬機(jī) 指令翻譯中區(qū)分指令所處模式的問(wèn)題,成為了業(yè)界迫切需要解決的問(wèn)題。

發(fā)明內(nèi)容
本發(fā)明所要解決的問(wèn)題是提供一種RISC處理器裝置及其多模式下數(shù)據(jù)處 理方法,其大大提高計(jì)算機(jī)性能。
為實(shí)現(xiàn)本發(fā)明目的而提供的一種RISC處理器裝置,包括判斷模塊,指令 譯碼器和運(yùn)算部件,其中
所述判斷模塊,用于區(qū)分指令的虛擬機(jī)指令集模式;
所述指令譯碼器,用于在指令譯碼過(guò)程中,根據(jù)判斷模塊區(qū)分出指令的虛 擬機(jī)指令集模式,將指令按照所區(qū)分的虛擬機(jī)指令集模式,進(jìn)行譯碼后輸出給 運(yùn)算部件;
所述運(yùn)算部件,用于根據(jù)指令譯碼器的輸出,進(jìn)行處理,輸出執(zhí)行的結(jié)果。 所述判斷模塊可以為一第一控制寄存器;
所述第一控制寄存器,包括控制位標(biāo)志,當(dāng)該控制位標(biāo)志為1時(shí)表示此時(shí)
相應(yīng)的指令運(yùn)行在X86虛擬機(jī)指令集模式下;當(dāng)該控制位標(biāo)志為0時(shí)表示指
令運(yùn)行在非X86虛擬機(jī)指令集模式下。
所述判斷模塊也可以為一包含在指令譯碼器中的前綴指令模塊; 所述前綴指令模塊,所述前綴指令模塊包括一前綴指令,用于表示該指令
后的多條指令處于X86虛擬機(jī)指令集模式下。
所述前綴指令包括一范圍參數(shù),用于表示前綴指令的影響范圍。 所述范圍參數(shù)是l,表示該前綴指令只影響其后的一條指令;或者是不為
1的整數(shù)n,表示該前綴指令影響其后的n條指令。
當(dāng)所述判斷模塊為一包含在指令譯碼器中的前綴指令模塊時(shí),所述指令譯
碼器還包括一計(jì)數(shù)器,用于記錄受前綴指令影響且不出現(xiàn)轉(zhuǎn)換指令的指令序列
的指令數(shù)n;
當(dāng)受影響的當(dāng)前指令進(jìn)入運(yùn)算部件,即下一條指令進(jìn)入指令譯碼器時(shí)n減1。
所述判斷模塊也可以為一包含在指令譯碼器中的指令模式模塊,用于在 RISC處理器的指令中標(biāo)志該指令的虛擬機(jī)指令集模式。
所述RISC處理器的指令為在X86指令集中與EFLAG標(biāo)志相關(guān)的指令對(duì) 應(yīng)的虛擬機(jī)指令;或者在X86指令集中,對(duì)特殊結(jié)構(gòu)進(jìn)行操作的指令對(duì)應(yīng)的 虛擬機(jī)指令。
所述運(yùn)算部件還包括一例外處理模塊,用于在前綴指令只影響緊接其后的 一條指令時(shí),如果出現(xiàn)執(zhí)行例外,則采用與延遲槽例外相同的方法,將Cause 寄存器的bd位置l,同時(shí)將EPC指向前綴指令,例外服務(wù)程序完成后重新執(zhí) 行前綴指令。
所述運(yùn)算部件還包括一第二控制寄存器,用于記錄發(fā)生例外的指令是否受 所述前綴指令影響;在出現(xiàn)異常而中斷進(jìn)程的時(shí)候向第二控制寄存器中存入當(dāng) 前指令的計(jì)數(shù),在異常結(jié)束返回被中斷進(jìn)程時(shí),根據(jù)所述計(jì)數(shù)恢復(fù)所述被中斷 進(jìn)程。
所述運(yùn)算部件還包括一 EFLAG計(jì)算模塊,用于對(duì)于處于虛擬機(jī)指令集模 式的指令,根據(jù)運(yùn)算結(jié)果計(jì)算相應(yīng)的EFLAG標(biāo)志位。
為實(shí)現(xiàn)本發(fā)明目的還提供一種RISC處理器裝置多模式下數(shù)據(jù)處理方法, 包括下列步驟
步驟A,讀取指令,區(qū)分指令的虛擬機(jī)指令集模式;
步驟B,在指令譯碼過(guò)程中,根據(jù)區(qū)分出的指令的虛擬機(jī)指令集模式,將 指令按照所區(qū)分的虛擬機(jī)指令集模式,進(jìn)行譯碼后輸出;
步驟C,根據(jù)所述輸出,進(jìn)行處理,輸出執(zhí)行的結(jié)果。
所述步驟A包括下列步驟
步驟A1,指令譯碼器讀取一條前綴指令,表示該指令后的多條指令處于 X86虛擬機(jī)指令集模式下。
所述前綴指令還包括一范圍參數(shù),表示前綴指令的影響范圍。
所述范圍參數(shù)是l,表示該前綴指令只影響其后的一條指令;或者是不為 1的整數(shù)n,表示該前綴指令影響其后的n條指令。
所述步驟B包括下列步驟
對(duì)該前綴指令譯碼時(shí)設(shè)置標(biāo)志,這條指令后面的指令被譯為X86虛擬機(jī) 指令集模式,然后該前綴指令譯為空操作NOP。 所述步驟B還包括下列步驟
指令譯碼器中的計(jì)數(shù)器記錄受前綴指令影響且不出現(xiàn)轉(zhuǎn)換指令的指令序
列的指令數(shù)n;
當(dāng)受影響的當(dāng)前指令進(jìn)入運(yùn)算部件,即下一條指令進(jìn)入指令譯碼器時(shí)n減1。
所述步驟C包括下列步驟
運(yùn)算部件在前綴指令只影響緊接其后的一條指令時(shí),如果出現(xiàn)執(zhí)行例外,
則采用與延遲槽例外相同的方法,將Cause寄存器的bd位置1,同時(shí)將EPC 指向前綴指令,例外服務(wù)程序完成后重新執(zhí)行前綴指令。
所述步驟C還包括下列步驟
運(yùn)算部件中的第二控制寄存器,用于記錄發(fā)生例外的指令是否受所述前綴 指令影響。在出現(xiàn)異常而中斷進(jìn)程的時(shí)候向第二控制寄存器中存入當(dāng)前指令的
計(jì)數(shù);在異常結(jié)束返回被中斷進(jìn)程時(shí),根據(jù)所述計(jì)數(shù)恢復(fù)所述被中斷進(jìn)程。 所述步驟C還包括下列步驟
運(yùn)算部件中的EFLAG計(jì)算模塊對(duì)處于虛擬機(jī)指令集模式的指令,根據(jù)輸 入指令進(jìn)行運(yùn)算,然后根據(jù)運(yùn)算結(jié)果計(jì)算相應(yīng)的EFLAG標(biāo)志位。 所述步驟A也可以包括下列步驟 步驟A1',判斷第一控制寄存器的控制位標(biāo)志;
步驟A2',當(dāng)該標(biāo)志位為1時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在X86虛擬機(jī)指令 集模式下;
步驟A3',當(dāng)該標(biāo)志位為0時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在非X86虛擬機(jī)指 令集模式下。
所述步驟A更可以包括下列步驟
在RISC處理器的指令中標(biāo)志該指令的虛擬機(jī)指令集模式。
所述RISC處理器的指令,為在X86指令集中與EFLAG標(biāo)志相關(guān)的指令
對(duì)應(yīng)的虛擬機(jī)指令;或者為在X86指令集中,對(duì)特殊結(jié)構(gòu)進(jìn)行操作的指令對(duì)
應(yīng)的虛擬機(jī)指令。
本發(fā)明的有益效果是本發(fā)明的RISC處理器裝置及其多模式下數(shù)據(jù)處理 方法,在RISC處理器中,當(dāng)將不同模式下的虛擬機(jī)指令翻譯成RISC處理器 可以執(zhí)行的指令時(shí),直接譯碼并執(zhí)行,節(jié)約了大量的翻譯時(shí)間,處理器的運(yùn)算 速度得到指數(shù)級(jí)提高,從整體上提高處理器的性能。


圖1為本發(fā)明RISC處理器裝置結(jié)構(gòu)示意圖2為本發(fā)明實(shí)施例利用MIPS指令集實(shí)現(xiàn)前綴指令格式編碼示意圖; 圖3為本發(fā)明實(shí)施例利用MIPS指令集實(shí)現(xiàn)本發(fā)明多模式下虛擬機(jī)加法指 令實(shí)現(xiàn)編碼格式示意圖4為本發(fā)明RISC處理器裝置多模式下數(shù)據(jù)處理方法流程圖。
具體實(shí)施例方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí) 施例,對(duì)本發(fā)明的一種RISC處理器裝置及其多模式下數(shù)據(jù)處理方法進(jìn)行進(jìn)一 步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不 用于限定本發(fā)明。
下面詳細(xì)說(shuō)明本發(fā)明的RISC處理器裝置。
本發(fā)明實(shí)施例以MIPS64指令集的RISC處理器裝置為例,而對(duì)本發(fā)明的 RISC處理器裝置及其多模式下數(shù)據(jù)處理方法而進(jìn)行說(shuō)明,但是,應(yīng)當(dāng)指明的 是,其不是對(duì)本發(fā)明權(quán)利要求的限定。
在RISC處理器架構(gòu)的計(jì)算機(jī)上支持CISC架構(gòu)的虛擬機(jī),如X86虛擬機(jī), 需要區(qū)別指令是處于RISC處理器的指令集模式下,還是處于X86指令集模式 下,如以MIPS指令集的RISC處理器,在運(yùn)行虛擬機(jī)的過(guò)程中,對(duì)于一條加 法指令而言,MIPS指令集中對(duì)加法的處理是進(jìn)行兩個(gè)數(shù)的相加操作,但是對(duì) 于X86指令集而言,加法指令不僅要計(jì)算兩個(gè)操作數(shù)相加,還要進(jìn)行其他的 操作,如依據(jù)加法的結(jié)果修改相應(yīng)的EFLAG標(biāo)志寄存器的標(biāo)志位,兩者執(zhí)行 過(guò)程并不一樣,因此,在RISC處理器中,需要區(qū)分RISC處理器不同虛擬機(jī) 指令集模式下的操作。
本發(fā)明的RISC處理器裝置,如圖1所示,包括判斷模塊,指令譯碼器2 和運(yùn)算部件3,其中
所述判斷模塊,用于區(qū)分指令的虛擬機(jī)指令集模式。
所述指令譯碼器2,用于在指令譯碼過(guò)程中,根據(jù)判斷模塊區(qū)分出的指令 的虛擬機(jī)指令集模式,并將指令按照所區(qū)分的虛擬機(jī)指令集模式,進(jìn)行譯碼后 輸出給運(yùn)算部件3。
所述運(yùn)算部件3,用于根據(jù)指令譯碼器2的輸出,進(jìn)行處理,輸出執(zhí)行的 結(jié)果。
本發(fā)明的RISC處理器裝置中,指令譯碼器2除了具有現(xiàn)有技術(shù)的數(shù)據(jù)通 路,包括了譯碼的輸入輸出,指令譯碼功能以外,還可以根據(jù)判斷模塊區(qū)分指 令的虛擬機(jī)指令集模式,然后該指令譯碼器2將指令按照所區(qū)分的虛擬機(jī)指令 集模式進(jìn)行譯碼后輸出給運(yùn)算部件3,其增強(qiáng)了現(xiàn)有指令譯碼器2的功能,直 接譯碼,提高了處理器運(yùn)算速度。
運(yùn)算部件3接收到譯碼指令后,進(jìn)行處理,輸出執(zhí)行的結(jié)果。 運(yùn)算部件3除具有現(xiàn)有技術(shù)的數(shù)據(jù)通路,包括指令輸入輸出,指令執(zhí)行外, 還可以由指令譯碼器2對(duì)指令區(qū)分其指令集模式后,由運(yùn)算部件3根據(jù)不同的 指令模式執(zhí)行相應(yīng)的計(jì)算,輸出執(zhí)行的結(jié)果。
作為一種可實(shí)施的方式,本發(fā)明的RISC處理器裝置的判斷模塊,為一第 一控制寄存器l,所述第一控制寄存器l,包括控制位標(biāo)志X86MODEl,當(dāng)該 位為1時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在X86虛擬機(jī)指令集模式下;當(dāng)該標(biāo)志為0 時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在非X86虛擬機(jī)指令集模式下。
在RISC處理器的MIPS64指令集中,有一些CoprocessorO (CP0)控制寄 存器是預(yù)留給用戶(hù)自定義的,如22號(hào)寄存器在所有Sel位的情況下都是預(yù)留 給用戶(hù)自定義的。
本發(fā)明實(shí)施例利用這些控制寄存器(CP0)中的一位來(lái)做X86模式控制標(biāo) 志位X86MODEl,在需要區(qū)分指令所處模式的時(shí)候,可以通過(guò)讀取這個(gè)控制 寄存器的相應(yīng)位來(lái)進(jìn)行判斷。當(dāng)該標(biāo)志位為1時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在 X86虛擬機(jī)指令集模式下;當(dāng)該標(biāo)志位為0時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在非 X86虛擬機(jī)指令集模式下。
當(dāng)RISC處理器取指令,由指令譯碼器2進(jìn)行譯碼并執(zhí)行時(shí),指令譯碼器 2首先讀取第一控制寄存器1的控制位標(biāo)志X86MODEl,根據(jù)標(biāo)志位的值為0 或1區(qū)分的虛擬機(jī)指令集模式,并按其虛擬機(jī)指令集模式譯碼,直到第一控制 寄存器1的控制位標(biāo)志X86MODE1被改寫(xiě)。
如一條加法指令進(jìn)入指令譯碼器2時(shí),RISC處理器對(duì)相應(yīng)的控制寄存器 進(jìn)行判斷,區(qū)分其為X86虛擬機(jī)指令集模式或者非X86虛擬機(jī)指令集模式。
所述運(yùn)算部件3包括一 EFLAG計(jì)算模塊33 ,用于根據(jù)輸入指令進(jìn)行運(yùn)算, 然后根據(jù)運(yùn)算結(jié)果計(jì)算相應(yīng)的EFLAG標(biāo)志位。 實(shí)施例二
作為一種可實(shí)施的方式,本發(fā)明的RISC處理器裝置,所述判斷模塊為一 包含在指令譯碼器2中的前綴指令模塊21,所述前綴指令模塊21包括一前綴 指令X86MODE2,用于表示該指令后的多條指令處于X86虛擬機(jī)指令集模式 下。
本發(fā)明實(shí)施例的前綴指令模塊21中的前綴指令,在RISC處理器的 MIPS64指令集中的格式如圖2所示,其利用MIPS指令集中的SPECIAL2的 空槽的保留值實(shí)現(xiàn)。
指令譯碼器2的前綴指令模塊21,在對(duì)該前綴指令譯碼時(shí)設(shè)置標(biāo)志,這 條指令后面的指令被譯為X86虛擬機(jī)指令集模式,然后該前綴指令譯為空操 作NOP。
較佳地,所述前綴指令X86MODE2包括一范圍參數(shù),用于表示前綴指令 X86MODE2的影響范圍,其可以是1,表示該前綴指令只影響其后的一條指 令;也可以是n,表示該前綴指令影響其后的n條指令。
較佳地,所述指令譯碼器2還包括一個(gè)計(jì)數(shù)器22,用于記錄受前綴指令 影響且不出現(xiàn)轉(zhuǎn)換指令的指令序列的指令數(shù)n;
當(dāng)受影響的當(dāng)前指令進(jìn)入運(yùn)算部件3,即下一條指令進(jìn)入指令譯碼器2時(shí) n減l。所述指令序列中不允許出現(xiàn)轉(zhuǎn)移指令,即一旦出現(xiàn)轉(zhuǎn)移指令則從轉(zhuǎn)移 指令開(kāi)始的指令序列不受前綴指令的影響。
較佳地,作為一種可實(shí)施方式,所述運(yùn)算部件3包括一例外處理模塊31, 用于在前綴指令只影響緊接其后的一條指令時(shí),如果出現(xiàn)執(zhí)行例外,則采用與 延遲槽例外相同的方法,將Cause寄存器的bd位置1,同時(shí)將EPC指向前綴 指令,例外服務(wù)程序完成后重新執(zhí)行前綴指令。
較佳地,作為另一種可實(shí)施方式,所述運(yùn)算部件3還包括一第二控制寄存 器32,用于記錄發(fā)生例外的指令是否受所述前綴指令影響。在出現(xiàn)異常而中 斷進(jìn)程的時(shí)候向第二控制寄存器32中存入當(dāng)前指令的計(jì)數(shù);在異常結(jié)束返回 被中斷進(jìn)程時(shí),根據(jù)所述計(jì)數(shù),即根據(jù)之前第二控制寄存器32保存的計(jì)數(shù)恢 復(fù)被中斷進(jìn)程這個(gè)狀態(tài)。 所述運(yùn)算部件3還包括一 EFLAG計(jì)算模塊33,用于對(duì)于處于虛擬機(jī)指令 集模式的指令,根據(jù)輸入指令進(jìn)行運(yùn)算,然后根據(jù)運(yùn)算結(jié)果計(jì)算相應(yīng)的EFLAG 標(biāo)志位。
:為另一種可實(shí)施的方式,所述判斷模塊為一指令模式模塊23,用于在 RISC處理器的MIPS指令中標(biāo)志該指令的虛擬機(jī)指令集模式。
對(duì)于使用頻度特別高的X86虛擬機(jī)指令,則需要地在RISC處理器的MIPS 指令集中,通過(guò)指令模式模塊23,設(shè)置一標(biāo)志,標(biāo)志該MIPS指令為在X86 虛擬機(jī)指令集模式下執(zhí)行的指令。這樣,對(duì)使用頻度高的X86虛擬機(jī)指令, 標(biāo)志該指令為X86虛擬機(jī)指令集模式,直接由RISC處理器的MIPS指令集執(zhí) 行,以減少相應(yīng)的開(kāi)銷(xiāo)。
受指令模式模塊23影響的指令,只能影響該條指令的譯碼執(zhí)行,對(duì)其它 指令則不影響,其它指令按其原有的虛擬指令集模式執(zhí)行。
較佳地,所述RISC處理器的MIPS指令,包括在X86指令集中與EFLAG 標(biāo)志相關(guān)的指令對(duì)應(yīng)的虛擬機(jī)指令,以及在X86指令集中,對(duì)特殊結(jié)構(gòu),如 浮點(diǎn)棧進(jìn)行操作的指令對(duì)應(yīng)的虛擬機(jī)指令。
如指令模式模塊23對(duì)RISC處理器的加法指令(Add),標(biāo)志該指令的虛 擬機(jī)指令集模式為X86虛擬機(jī)指令集模式X86Add,其格式如圖3所示,其可 以利用RISC處理器MIPS指令集中SPECIAL2的空槽的保留值實(shí)現(xiàn)。這條指 令并不是和原有的加法指令(Add)指令一樣,而只是對(duì)原有的指令提供部分 的支持,其對(duì)寄存器中的值進(jìn)行相加操作,并且也根據(jù)結(jié)果修改相應(yīng)的 EFLAGS標(biāo)志位,但是計(jì)算的結(jié)果并不存儲(chǔ)到寄存器中,即寄存器的值并不會(huì) 發(fā)生改變。
本發(fā)明的RISC處理器裝置,利用現(xiàn)有的MIPS指令集中的保留值,進(jìn)行 編碼,數(shù)據(jù)通路和各種隊(duì)列如訪(fǎng)存隊(duì)列等也沒(méi)有變化,通過(guò)增強(qiáng)指令譯碼器2 和運(yùn)算部件3的處理能力,使其可以判斷指令類(lèi)型,以便執(zhí)行不同虛擬機(jī)指令 集模式下的指令,提高虛擬機(jī)的指令執(zhí)行速度。
相應(yīng)地,本發(fā)明還包括一種RISC處理器裝置多模式下數(shù)據(jù)處理方法,如
圖4所示,其包括如下步驟
步驟S100,讀取指令時(shí),區(qū)分指令的虛擬機(jī)指令集模式。 作為一種可實(shí)施的方式,所述步驟S100包括下列步驟
步驟S110,指令譯碼器2讀取一條前綴指令X86MODE2,表示該指令后 的多條指令處于X86虛擬機(jī)指令集模式下,區(qū)分出指令的虛擬機(jī)指令集模式;
前綴指令X86MODE2還包括一范圍參數(shù),表示前綴指令X86MODE2的 影響范圍,其可以是l,表示該前綴指令只影響其后的一條指令;也可以是n (n^1),表示該前綴指令影響其后的n條指令。
對(duì)該前綴指令譯碼時(shí)設(shè)置標(biāo)志,這條指令后面的指令被譯為X86虛擬機(jī) 指令集模式,然后該前綴指令譯為空操作NOP。
作為另一種可實(shí)施方式,所述步驟S100包括下列步驟
步驟S120,當(dāng)指令進(jìn)入指令譯碼器2時(shí),第一控制寄存器1的控制位標(biāo) 志X86M0DE1區(qū)分指令的虛擬機(jī)指令集模式。
所述步驟S120包括下列步驟
步驟S121 ,判斷第一控制寄存的控制位標(biāo)志X86MODE; 步驟S122,當(dāng)該標(biāo)志位為1時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在X86虛擬機(jī)指 令集模式下;
步驟S123,當(dāng)該標(biāo)志位為0時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在非X86虛擬機(jī) 指令集模式下。
作為另一種可實(shí)施方式,所述步驟S100包括下列步驟
步驟S130,指令譯碼器2讀取指令,按該指令中的標(biāo)志的虛擬機(jī)指令集 模式,區(qū)分指令的虛擬機(jī)指令集模式。
步驟S200,指令譯碼器2在指令譯碼過(guò)程中,根據(jù)區(qū)分出的指令的虛擬 機(jī)指令集模式,將指令按照所區(qū)分的虛擬機(jī)指令集模式,進(jìn)行譯碼后輸出給 RISC處理器的運(yùn)算部件3;
當(dāng)以前綴指令區(qū)分出指令的虛擬機(jī)指令集模式時(shí),包括下列步驟
步驟S210,指令譯碼器2通過(guò)譯碼識(shí)別前綴指令,在指令譯碼器2置一 個(gè)標(biāo)志位X86mode2=l ,
所述步驟S200還包括下列步驟
步驟S220,指令譯碼器2中的計(jì)數(shù)器22,記錄受前綴指令影響且不出現(xiàn)
轉(zhuǎn)換指令的指令序列的指令數(shù)n;
當(dāng)受影響的當(dāng)前指令進(jìn)入運(yùn)算部件3,即下一條指令進(jìn)入指令譯碼器2時(shí) n減1。
所述指令序列中不允許出現(xiàn)轉(zhuǎn)移指令,即一旦出現(xiàn)轉(zhuǎn)移指令則從轉(zhuǎn)移指令 開(kāi)始的指令序列不受前綴指令的影響。
當(dāng)以第一控制寄存器1控制位標(biāo)志X86MODE1區(qū)分出指令的虛擬機(jī)指令 集模式時(shí),所述步驟S200指令譯碼器2進(jìn)行譯碼,包括下列步驟
步驟S210',當(dāng)RISC處理器取指令,由指令譯碼器2進(jìn)行譯碼并執(zhí)行時(shí), 指令譯碼器2首先讀取第一控制寄存器1的控制位標(biāo)志X86MODEl,根據(jù)標(biāo) 志位的值為0或1區(qū)分的虛擬機(jī)指令集模式,并按其虛擬機(jī)指令集模式譯碼, 直到第一控制寄存器1的控制位標(biāo)志X86MODEl被改寫(xiě)。
步驟S300, RISC處理器的運(yùn)算部件3根據(jù)指令譯碼器2的輸出,進(jìn)行處 理,輸出執(zhí)行的結(jié)果。
當(dāng)以前綴指令區(qū)分出指令的虛擬機(jī)指令集模式時(shí),包括下列步驟
步驟S310,由于譯碼器將前綴指令譯碼為內(nèi)部的空操作NOP,所以運(yùn)算 部件3執(zhí)行NOP指令;
為了避免在多模式指令集指令執(zhí)行過(guò)程中,出現(xiàn)中斷例外,較佳地,所述 步驟S300包括下列步驟
步驟S320,運(yùn)算部件3在前綴指令只影響緊接其后的一條指令時(shí),如果 出現(xiàn)執(zhí)行例外,則采用與延遲槽例外相同的方法,將Cause寄存器的bd(Branch delay)位置1 ,同時(shí)將EPC (The Exception Program Counter)指向前綴指令,例 外服務(wù)程序完成后重新執(zhí)行前綴指令。
一般地,EPC寄存器存放的是當(dāng)例外服務(wù)程序執(zhí)行完成后處理器繼續(xù)原有 操作的入口地址。
步驟S330,運(yùn)算部件3在前綴指令影響n(yōu)條指令時(shí),用第二控制寄存器 32記錄發(fā)生例外的指令是否受所述前綴指令影響。在出現(xiàn)異常而中斷進(jìn)程的 時(shí)候向第二控制寄存器32中存入當(dāng)前指令的計(jì)數(shù)。在異常結(jié)束返回被中斷進(jìn) 程時(shí),根據(jù)所述計(jì)數(shù),即根據(jù)之前第二控制寄存器32保存的計(jì)數(shù)恢復(fù)被中斷 進(jìn)程這個(gè)狀態(tài)。
步驟S340,運(yùn)算部件3根據(jù)輸入指令進(jìn)行運(yùn)算,然后根據(jù)運(yùn)算結(jié)果計(jì)算
相應(yīng)的EFLAG標(biāo)志位輸出。
下面以加法指令為例,以前綴指令的方式來(lái)具體本發(fā)明的RISC處理器裝 置多模式下數(shù)據(jù)處理方法
首先, 一條前綴指令進(jìn)入指令譯碼器2;
然后,指令譯碼器2通過(guò)譯碼識(shí)別前綴指令,在指令譯碼器2置一個(gè)標(biāo)志 位X86mode2=l ,然后將前綴指令譯碼為內(nèi)部的空操作NOP,執(zhí)行后繼的指令;
其后,當(dāng)前綴指令的下一條指令即加法指令進(jìn)入指令譯碼器2時(shí),判斷前 綴標(biāo)志位是否存在,如果加法指令不在前綴指令的參數(shù)范圍內(nèi),指令譯碼器2 正常譯碼出指令本身帶有的源寄存器和目標(biāo)寄存器以及內(nèi)部操作的操作碼 (op);如果這條加法指令處于前綴指令參數(shù)范圍內(nèi),即處于X86模式下的 加法指令,則按照X86虛擬機(jī)指令集模式,根據(jù)計(jì)算結(jié)果修改EFLAGS標(biāo)志 位,因此指令譯碼器2會(huì)將EFLAGS標(biāo)志位譯碼為源寄存器中的一個(gè),同時(shí) 將EFLAGS標(biāo)志位譯碼為目標(biāo)寄存器,然后同時(shí)將加法指令本身所帶有的源 寄存器和目標(biāo)寄存器以及內(nèi)部操作的操作碼(op)譯碼出來(lái);
最后,運(yùn)算部件3將譯碼器的輸出作為輸入,如果是正常的MIPS指令集 中的指令,進(jìn)行加法計(jì)算;如果是受前綴指令影響的加法指令,運(yùn)算部件3 會(huì)先進(jìn)行加法計(jì)算,然后根據(jù)加法運(yùn)算的結(jié)果運(yùn)算出新的EFLAGS標(biāo)志位的 值。
本發(fā)明的RISC處理器裝置及其多模式下數(shù)據(jù)處理方法,在RISC處理器 裝置中,當(dāng)將不同模式下的虛擬機(jī)指令翻譯成RISC處理器裝置可以執(zhí)行的指 令時(shí),直接譯碼并執(zhí)行,節(jié)約了大量的翻譯時(shí)間,處理器裝置的運(yùn)算速度得到 指數(shù)級(jí)提高,從整體上提高處理器裝置的性能。
通過(guò)結(jié)合附圖對(duì)本發(fā)明具體實(shí)施例的描述,本發(fā)明的其它方面及特征對(duì)本 領(lǐng)域的技術(shù)人員而言是顯而易見(jiàn)的。
以上對(duì)本發(fā)明的具體實(shí)施例進(jìn)行了描述和說(shuō)明,這些實(shí)施例應(yīng)被認(rèn)為其只 是示例性的,并不用于對(duì)本發(fā)明進(jìn)行限制,本發(fā)明應(yīng)根據(jù)所附的權(quán)利要求進(jìn)行 解釋。
權(quán)利要求
1、一種RISC處理器裝置,其特征在于,包括判斷模塊,指令譯碼器和運(yùn)算部件,其中所述判斷模塊,用于區(qū)分指令的虛擬機(jī)指令集模式;所述指令譯碼器,用于在指令譯碼過(guò)程中,根據(jù)判斷模塊區(qū)分出指令的虛擬機(jī)指令集模式,將指令按照所區(qū)分的虛擬機(jī)指令集模式,進(jìn)行譯碼后輸出給運(yùn)算部件;所述運(yùn)算部件,用于根據(jù)指令譯碼器的輸出,進(jìn)行處理,輸出執(zhí)行的結(jié)果。
2、 根據(jù)權(quán)利要求1所述的RISC處理器裝置,其特征在于,所述判斷模 塊為一第一控制寄存器;所述第一控制寄存器,包括控制位標(biāo)志,當(dāng)該控制位標(biāo)志為1時(shí)表示此時(shí) 相應(yīng)的指令運(yùn)行在X86虛擬機(jī)指令集模式下;當(dāng)該控制位標(biāo)志為0時(shí)表示指 令運(yùn)行在非X86虛擬機(jī)指令集模式下。
3、 根據(jù)權(quán)利要求1所述的RISC處理器裝置,其特征在于,所述判斷模 塊為一包含在指令譯碼器中的前綴指令模塊;所述前綴指令模塊包括一前綴指令,用于表示該指令后的多條指令處于 X86虛擬機(jī)指令集模式下。
4、 根據(jù)權(quán)利要求3所述的RISC處理器裝置,其特征在于,所述前綴指 令包括一范圍參數(shù),用于表示前綴指令的影響范圍。
5、 根據(jù)權(quán)利要求4所述的RISC處理器裝置,其特征在于,所述范圍參 數(shù)是l,表示該前綴指令只影響其后的一條指令;或者是不為l的整數(shù)n,表 示該前綴指令影響其后的n條指令。
6、 根據(jù)權(quán)利要求3所述的RISC處理器裝置,其特征在于,所述指令譯 碼器還包括一計(jì)數(shù)器,用于記錄受前綴指令影響且不出現(xiàn)轉(zhuǎn)換指令的指令序列 的指令數(shù)n;當(dāng)受影響的當(dāng)前指令進(jìn)入運(yùn)算部件,即下一條指令進(jìn)入指令譯碼器時(shí)n減1。
7、 根據(jù)權(quán)利要求1所述的RISC處理器裝置,其特征在于,所述判斷模 塊為一包含在指令譯碼器中的指令模式模塊,用于在RISC處理器的指令中標(biāo)志該指令的虛擬機(jī)指令集模式。
8、 根據(jù)權(quán)利要求7所述的RISC處理器裝置,其特征在于,所述RISC處 理器的指令為在X86指令集中與EFLAG標(biāo)志相關(guān)的指令對(duì)應(yīng)的虛擬機(jī)指令; 或者在X86指令集中,對(duì)特殊結(jié)構(gòu)進(jìn)行操作的指令對(duì)應(yīng)的虛擬機(jī)指令。
9、 根據(jù)權(quán)利要求5所述的RISC處理器裝置,其特征在于,所述運(yùn)算部 件還包括一例外處理模塊,用于在前綴指令只影響緊接其后的一條指令時(shí),如 果出現(xiàn)執(zhí)行例外,則采用與延遲槽例外相同的方法,將Cause寄存器的bd位 置l,同時(shí)將EPC指向前綴指令,例外服務(wù)程序完成后重新執(zhí)行前綴指令。
10、 根據(jù)權(quán)利要求5所述的RISC處理器裝置,其特征在于,所述運(yùn)算部 件還包括一第二控制寄存器,用于記錄發(fā)生例外的指令是否受所述前綴指令影 響;在出現(xiàn)異常而中斷進(jìn)程的時(shí)候向第二控制寄存器中存入當(dāng)前指令的計(jì)數(shù), 在異常結(jié)束返回被中斷進(jìn)程時(shí),根據(jù)所述計(jì)數(shù)恢復(fù)所述被中斷進(jìn)程。
11、 根據(jù)權(quán)利要求1所述的RISC處理器裝置,其特征在于,所述運(yùn)算部 件還包括一EFLAG計(jì)算模塊,用于對(duì)于處于虛擬機(jī)指令集模式的指令,根據(jù) 運(yùn)算結(jié)果計(jì)算相應(yīng)的EFLAG標(biāo)志位。
12、 一種RISC處理器裝置多模式下數(shù)據(jù)處理方法,其特征在于,包括下 列步驟步驟A,讀取指令,區(qū)分指令的虛擬機(jī)指令集模式;步驟B,在指令譯碼過(guò)程中,根據(jù)區(qū)分出的指令的虛擬機(jī)指令集模式,將 指令按照所區(qū)分的虛擬機(jī)指令集模式,進(jìn)行譯碼后輸出; 步驟C,根據(jù)所述輸出,進(jìn)行處理,輸出執(zhí)行的結(jié)果。
13、 根據(jù)權(quán)利要求12所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 其特征在于,所述步驟A包括下列步驟步驟A1,指令譯碼器讀取一條前綴指令,表示該指令后的多條指令處于 X86虛擬機(jī)指令集模式下。
14、 根據(jù)權(quán)利要求13所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 其特征在于,所述前綴指令還包括一范圍參數(shù),表示前綴指令的影響范圍。
15、 根據(jù)權(quán)利要求14所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 其特征在于,所述范圍參數(shù)是l,表示該前綴指令只影響其后的一條指令;或 者是不為1的整數(shù)n,表示該前綴指令影響其后的n條指令。
16、 根據(jù)權(quán)利要求13至15中任一項(xiàng)所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法,其特征在于,所述步驟B包括下列步驟對(duì)該前綴指令譯碼時(shí)設(shè)置標(biāo)志,這條指令后面的指令被譯為X86虛擬機(jī) 指令集模式,然后該前綴指令譯為空操作NOP。
17、 根據(jù)權(quán)利要求16所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 其特征在于,所述步驟B還包括下列步驟指令譯碼器中的計(jì)數(shù)器記錄受前綴指令影響且不出現(xiàn)轉(zhuǎn)換指令的指令序 列的指令數(shù)n;當(dāng)受影響的當(dāng)前指令進(jìn)入運(yùn)算部件,即下一條指令進(jìn)入指令譯碼器時(shí)n減1。
18、 根據(jù)權(quán)利要求16所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 其特征在于,所述歩驟C還包括下列步驟運(yùn)算部件在前綴指令只影響緊接其后的一條指令時(shí),如果出現(xiàn)執(zhí)行例外, 則采用與延遲槽例外相同的方法,將Cause寄存器的bd位置l,同時(shí)將EPC 指向前綴指令,例外服務(wù)程序完成后重新執(zhí)行前綴指令。
19、 根據(jù)權(quán)利要求16所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 其特征在于,所述步驟C還包括下列步驟運(yùn)算部件中的第二控制寄存器記錄發(fā)生例外的指令是否受所述前綴指令 影響;在出現(xiàn)異常而中斷進(jìn)程的時(shí)候向第二控制寄存器中存入當(dāng)前指令的計(jì) 數(shù);在異常結(jié)束返回被中斷進(jìn)程時(shí),根據(jù)所述計(jì)數(shù)恢復(fù)所述被中斷進(jìn)程。
20、 根據(jù)權(quán)利要求12所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 其特征在于,所述步驟C還包括下列步驟運(yùn)算部件中的EFLAG計(jì)算模塊對(duì)處于虛擬機(jī)指令集模式的指令,根據(jù)輸 入指令進(jìn)行運(yùn)算,然后根據(jù)運(yùn)算結(jié)果計(jì)算相應(yīng)的EFLAG標(biāo)志位。
21、 根據(jù)權(quán)利要求12所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 所述步驟A包括下列步驟步驟A1',判斷第一控制寄存器的控制位標(biāo)志;步驟A2',當(dāng)該標(biāo)志位為1時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在X86虛擬機(jī)指令 集模式下;步驟A3',當(dāng)該標(biāo)志位為0時(shí)表示此時(shí)相應(yīng)的指令運(yùn)行在非X86虛擬機(jī)指令集模式下。
22、 根據(jù)權(quán)利要求12所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 其特征在于,所述步驟A包括下列步驟在RISC處理器的指令中標(biāo)志該指令的虛擬機(jī)指令集模式。
23、 根據(jù)權(quán)利要求22所述的RISC處理器裝置多模式下數(shù)據(jù)處理方法, 其特征在于,所述RISC處理器的指令,為在X86指令集中與EFLAG標(biāo)志相 關(guān)的指令對(duì)應(yīng)的虛擬機(jī)指令;或者為在X86指令集中,對(duì)特殊結(jié)構(gòu)進(jìn)行操作 的指令對(duì)應(yīng)的虛擬機(jī)指令。
全文摘要
本發(fā)明公開(kāi)了一種PISC處理器裝置及其多模式下數(shù)據(jù)處理方法。該處理器裝置包括判斷模塊,指令譯碼器和運(yùn)算部件,其中所述判斷模塊,用于區(qū)分指令的虛擬機(jī)指令集模式;所述指令譯碼器,用于在指令譯碼過(guò)程中,根據(jù)判斷模塊區(qū)分出的指令的虛擬機(jī)指令集模式,并將指令按照所區(qū)分的虛擬機(jī)指令集模式,進(jìn)行譯碼后輸出給運(yùn)算部件;所述運(yùn)算部件,用于根據(jù)指令譯碼器的輸出,進(jìn)行處理,輸出執(zhí)行的結(jié)果。其大大提高計(jì)算機(jī)性能。
文檔編號(hào)G06F9/30GK101187858SQ20071017883
公開(kāi)日2008年5月28日 申請(qǐng)日期2007年12月5日 優(yōu)先權(quán)日2007年12月5日
發(fā)明者李曉鈺, 蘇孟豪 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1