專利名稱:對來自多個(gè)指令集的指令進(jìn)行譯碼的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及對來自不同指令集的指令進(jìn)行譯碼。
背景技術(shù):
可使用來自不同指令集的指令的處理器是已知的。例如,英國劍橋的ARM 具有使用ARM指令集和Thumb指令集的處理器,其中Thumb指令為16位寬,而ARM指令為32位寬。為了使譯碼器知道正在使用哪個(gè)指令集,在對指令進(jìn)行編碼時(shí)使用自由位來指示該指令為ARM指令還是Thumb指令。
在某些處理器架構(gòu)中,存在明確定義該架構(gòu)所支持的指令的編碼集合,并且存在允許該架構(gòu)的用戶定義它們自身的指令的自由編碼集合。在提供允許用戶定義它們自身的指令的編碼空間的處理器架構(gòu)中,使用指令編碼的位指示特定指令集會(huì)產(chǎn)生一些自身的問題。
因此,希望能夠在不過分增加編碼空間的同時(shí)允許用戶定義它們自己的指令的條件下,提供多個(gè)指令集。發(fā)明內(nèi)容
從第一方面看,本發(fā)明提供了一種數(shù)據(jù)處理設(shè)備,包括:用于對指令進(jìn)行譯碼的指令譯碼器;以及用于響應(yīng)于由所述指令譯碼器譯碼的指令而處理數(shù)據(jù)的處理器;所述指令譯碼器被配置為對來自多個(gè)不同指令集的指令進(jìn)行譯碼,所述指令集包括基本指令集以及至少一個(gè)進(jìn)階指令集;所述基本指令集包括多個(gè)指令,其中每個(gè)指令包括用于唯一地標(biāo)識(shí)所述指令的預(yù)定操作碼,并且所述至少一個(gè)進(jìn)階指令集包括多個(gè)指令,其中每個(gè)指令包括用于標(biāo)識(shí)所述至少一個(gè)進(jìn)階指令集中的所述指令的操作碼;所述指令譯碼器被配置為根據(jù)基本譯碼規(guī)則集合對具有所述多個(gè)預(yù)定操作碼中的一個(gè)預(yù)定操作碼的指令進(jìn)行譯碼,以及根據(jù)由指示符值判定的譯碼規(guī)則集合對具有所述至少一個(gè)進(jìn)階指令集的所述操作碼中的一個(gè)操作碼的指令進(jìn)行譯碼,其中所述指示符值指示所述至少一個(gè)進(jìn)階指令集中的哪個(gè)進(jìn)階指令集當(dāng)前將被譯碼。
本發(fā)明認(rèn)識(shí)到提供用戶可定義它們自身的指令的編碼空間是有利的,然而本發(fā)明也認(rèn)識(shí)到如果存在總是可被譯碼的基本指令集也是有利的。
本發(fā)明通過提供基本指令集和至少一個(gè)進(jìn)階指令集(further instruction set)來解決這些相互矛盾的需求,其中指令譯碼器根據(jù)基本規(guī)則集合來對基本指令集進(jìn)行譯碼,譯碼器根據(jù)指示符值所判定的規(guī)則集合來對進(jìn)階指令集進(jìn)行譯碼。
這樣,通過簡單地使用指示符值,可提供數(shù)種由不同規(guī)則譯碼的不同指令集。這意味著,相同的編碼可被用來根據(jù)指示符值所指定的以及所選擇的指令集定義不同的指令。這樣,系統(tǒng)的用戶可定義它們自身的指令,并且這些指令可具有指示符值將觸發(fā)其使用的譯碼規(guī)則。
通過提供基本指令集從而使得它們可總是被譯碼,并且提供在指示符位被適當(dāng)設(shè)置的情況下可被譯碼的進(jìn)階指令,在不過度增大編碼空間的條件下提供了具有總是被定義的指令以及具有非常大量的進(jìn)階指令的優(yōu)點(diǎn)。
在某些實(shí)施例中,所述指令譯碼器被配置為對至少兩個(gè)進(jìn)階指令集進(jìn)行譯碼,所述至少兩個(gè)進(jìn)階指令集至少具有一些共同的操作碼。
如果用于進(jìn)階指令集的編碼空間被共享從而使得用于不同指令集中的指令的操作碼相同但映像至不同指令也是有利的。這是編碼空間的有效使用,并且意味著通過使用指示符值可定義大量的不同指令。
在某些實(shí)施例中,所述數(shù)據(jù)處理設(shè)備包括用于存儲(chǔ)所述指示符值的狀態(tài)寄存器。
雖然指示符值可被存儲(chǔ)于許多地方,但在某些實(shí)施例中該指示符值被存儲(chǔ)于狀態(tài)寄存器中。這是存儲(chǔ)指示符值的方便的地方且允許指示符值被簡單地設(shè)置與讀取。
在某些實(shí)施例中,所述指令譯碼器響應(yīng)于指令集更新指令,將存儲(chǔ)于所述狀態(tài)寄存器中的所述指示符值設(shè)置為所述指令中指定的值,所述指令集更新指令為來自所述基本指令集的指令。
指示符值可由指令集更新指令更新。這樣,希望使用特定指令集的程序設(shè)計(jì)者可簡單地更新指示符值來指示此指令集,隨后譯碼器將根據(jù)指示符值所指示的譯碼規(guī)則在進(jìn)階指令集的譯碼空間中對指令進(jìn)行譯碼。當(dāng)需要新的指令集時(shí),指令集更新指令被簡單地再次用以改變指示符值,以指示該新需要的指令集。
在某些實(shí)施例中,所述處理器被配置為響應(yīng)于指示所述程序流將分支的分支指令而存儲(chǔ)返回地址和所述指示符值,從而使得在從所述分支返回時(shí),所述返回地址和指示符值能夠被恢復(fù)。
當(dāng)程序分支到子例程時(shí),由于此子例程可使用不同的進(jìn)階指令集,所以可能會(huì)出現(xiàn)潛在問題。為了解決此問題,除了存儲(chǔ)指示在該分支完成后程序應(yīng)返回的下一指令的地址的返回地址之外,當(dāng)前指示符值也被存儲(chǔ),從而使得在指示符值于子例程期間中被改變的情況下,指示符值可于該程序從該子例程返回時(shí)被重置為其初始值。
在某些實(shí)施例中,所述數(shù)據(jù)處理設(shè)備被配置為在所述分支之前重置所述指示符值。
雖然指示符值可在分支處保持不變,但在某些實(shí)施例中數(shù)據(jù)處理設(shè)備被配置為在分支之前重置指示符值。子例程可能無法順利使用程序分支時(shí)使用的進(jìn)階指令集,并且在分支之前重置指示符值可能更為方便。然而,使指示符值保持原樣也可能是方便的,因?yàn)榛局噶罴匀豢杀蛔g碼,并且如果需要不同的進(jìn)階指令集,則無論如何都將需要重置指示符值。
在某些實(shí)施例中,所述返回地址和指示符值被存儲(chǔ)于相同的鏈接寄存器中。
存儲(chǔ)返回地址和指示符值的一種方式為將返回地址和指示符值存儲(chǔ)于鏈接寄存器中。在本發(fā)明的實(shí)施例中,鏈接寄存器足夠?qū)捯源鎯?chǔ)指示符值和返回地址兩者,因而將這兩個(gè)值存儲(chǔ)于容易存取的位置是有效且高效的方式。
在某些實(shí)施例中,所述鏈接寄存器的較高有效位(more significant bits)存儲(chǔ)所述指示符值,并且所述鏈接寄存器的較低有效位(lower significant bits)存儲(chǔ)所述返回地址。
鏈接寄存器的最高有效位可能不需要存儲(chǔ)返回地址,因而可方便地被用于存儲(chǔ)指示符值。
在其他實(shí)施例中,所述返回地址和指示符值響應(yīng)于所述分支而被存儲(chǔ)于堆棧中,并且在從所述分支返回時(shí)被從所述堆棧中讀取。
如果本實(shí)施例不使用鏈接寄存器,則返回地址和指示符值可響應(yīng)于分支而被推出堆棧。在此情形中,一旦從分支返回,它們將被從堆棧讀回。
在某些實(shí)施例中,所述指令譯碼器響應(yīng)于指示所述至少一個(gè)進(jìn)階指令集中的一個(gè)進(jìn)階指令集的所述指示符以及對所述至少一個(gè)進(jìn)階指令集中的具有以下操作碼的指令的接收而生成例外,其中不存在用于該操作碼的譯碼規(guī)則。
可設(shè)置數(shù)據(jù)處理設(shè)備以截獲這樣的指示符值,其中所述指示符值指定其中存在不具有譯碼規(guī)則的操作碼的指令集。在此情形中,例外被生成,并且處理設(shè)備隨后判定存在由不具有譯碼規(guī)則的指令所指定的操作碼的原因。
在某些實(shí)施例中,所述指令譯碼器響應(yīng)于檢測到所述指示符值轉(zhuǎn)變?yōu)橹甘疽韵碌倪M(jìn)階指令集的值而生成例外,其中所述指令譯碼器不具有用于該指令集的譯碼規(guī)則。
替代地和/或另外地,可設(shè)置數(shù)據(jù)處理設(shè)備,以判定指示符值何時(shí)轉(zhuǎn)變?yōu)橹噶钭g碼器不具有譯碼規(guī)則的值。在此情形中,例外被生成,并且處理器再次判定此錯(cuò)誤發(fā)生的原因。
在某些實(shí)施例中,用于所述基本指令集中的指令的所述預(yù)定操作碼位于預(yù)定基本編碼空間中,并且所述至少一個(gè)進(jìn)階指令集的所述操作碼位于預(yù)定延伸編碼空間中。
通過使用用于基本指令集的基本編碼空間、和用于對多個(gè)進(jìn)階指令集進(jìn)階編碼的進(jìn)階編碼空間,可以方便地對基本指令集及進(jìn)階指令集兩者的使用進(jìn)行編碼。這樣,來自進(jìn)階指令空間的任何操作碼都可被用于根據(jù)特定指令所在的指令集來指定該特定指令。該特定指令所在的指令集是由指示符值指示的,并且該指示符值將觸發(fā)譯碼器使用適當(dāng)?shù)淖g碼規(guī)則集合。
在某些實(shí)施例中,多個(gè)不同的指示符值標(biāo)識(shí)所述至少一個(gè)進(jìn)階指令集中的一個(gè)進(jìn)階指令集。
雖然在某些實(shí)施例中存在單個(gè)指示符值標(biāo)識(shí)指令集,但在其他實(shí)施例中可存在數(shù)個(gè)不同的指示符值。例如,如果處理器支持負(fù)地址(negative address),則由2所指示的指令集可方便地被2或-2所指示(取決于當(dāng)前支持該負(fù)地址還是正地址)。
本發(fā)明的第二方面提供了一種對來自不同指令集的指令進(jìn)行譯碼的方法,包括:接收指令;如果所述指令的操作碼為來自基本指令集的指令的操作碼,則根據(jù)用于所述基本指令集的譯碼規(guī)則對所述指令進(jìn)行譯碼;以及如果所述指令的所述操作碼為來自至少一個(gè)進(jìn)階指令集的指令的操作碼,則根據(jù)指示符值所判定的譯碼規(guī)則集合對所述指令進(jìn)行譯碼,其中所述指示符值指示所述至少一個(gè)進(jìn)階指令集中的哪個(gè)進(jìn)階指令集當(dāng)前將被譯碼。
本發(fā)明的第三方面提供了一種虛擬機(jī),該虛擬機(jī)由數(shù)據(jù)處理設(shè)備上執(zhí)行的計(jì)算機(jī)程序提供,所述虛擬機(jī)根據(jù)本發(fā)明的第一方面的數(shù)據(jù)處理設(shè)備提供指令執(zhí)行環(huán)境。
本發(fā)明的第四方面提供了 一種計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括指令集更新指令,所述指令集更新指令在數(shù)據(jù)處理器上運(yùn)行時(shí)控制所述數(shù)據(jù)處理器將狀態(tài)寄存器中的指示符值設(shè)置為所述指令集更新指令所指示的值;所述數(shù)據(jù)處理器的譯碼器根據(jù)基本譯碼規(guī)則集合對具有指示來自基本指令集的指令的操作碼的指令進(jìn)行譯碼,且根據(jù)所述指示符值所判定的譯碼規(guī)則集合對具有指示來自進(jìn)階指令集的指令的操作碼的指令進(jìn)行譯碼。
本發(fā)明的第五方面提供一種用于處理數(shù)據(jù)的裝置,該裝置包括:指令譯碼裝置,用于對指令進(jìn)行譯碼;以及處理裝置,用于響應(yīng)于指令譯碼裝置所譯碼的指令而處理數(shù)據(jù);所述指令譯碼裝置用于對來自多個(gè)不同指令集的指令進(jìn)行譯碼;所述指令集包括基本指令集以及至少一個(gè)進(jìn)階指令集;所述基本指令集包括多個(gè)指令,其中每個(gè)指令包含用于唯一地標(biāo)識(shí)所述指令的預(yù)定操作碼,而所述至少一個(gè)進(jìn)階指令集包括多個(gè)指令,其中每個(gè)指令包含用于標(biāo)識(shí)所述至少一個(gè)進(jìn)階指令集中的所述指令的操作碼;所述指令譯碼裝置用于根據(jù)基本譯碼規(guī)則集合對具有所述多個(gè)預(yù)定操作碼之一的指令進(jìn)行譯碼;并且用于根據(jù)指示符值所判定的譯碼規(guī)則集合對具有所述至少一個(gè)進(jìn)階指令集的所述操作碼之一的指令進(jìn)行譯碼,其中該指示符值指示所述至少一個(gè)進(jìn)階指令集中的哪一個(gè)進(jìn)階指令集當(dāng)前將被譯碼。
參考附圖中所示的實(shí)施例,僅通過示例進(jìn)一步描述本發(fā)明,其中:
圖1示出了根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理設(shè)備;
圖2示意性地示出了根據(jù)本發(fā)明實(shí)施例的指令譯碼器以及使用該指令譯碼器進(jìn)行譯碼;
圖3示意性地示出了根據(jù)本發(fā)明實(shí)施例的處理器譯碼器及寄存器;
圖4示意性地示出了如何響應(yīng)于無效的指令集指示符值而生成例外;
圖5示意性地示出了包括分支指令的指令流;
圖6示意性地示出了包括分支的指令流的執(zhí)行,其中返回地址及值被推送至堆棧;
圖7示出了說明根據(jù)本發(fā)明實(shí)施例的用于對指令進(jìn)行譯碼的方法中的步驟的流程圖8示意性地示出了根據(jù)本發(fā)明實(shí)施例的包括分支指令的指令流的譯碼及執(zhí)行;以及
圖9示出了本發(fā)明實(shí)施例的虛擬機(jī)實(shí)現(xiàn)。
具體實(shí)施方式
圖1示出了具有處理器12的數(shù)據(jù)處理設(shè)備10。具有指令的程序被存儲(chǔ)于數(shù)據(jù)儲(chǔ)存裝置20中,并且這些指令被提取單元(fetch unit) 16提取并被發(fā)送至譯碼器14。譯碼器14對這些指令進(jìn)行譯碼,并且將譯碼后的指令發(fā)送至處理器12以供執(zhí)行。
在此實(shí)施例中,譯碼器14被配置為根據(jù)基本譯碼規(guī)則集合對來自基本指令集的指令進(jìn)行譯碼,并且根據(jù)專用于多個(gè)進(jìn)階指令集的譯碼規(guī)則對來自這些特定指令集之一的指令進(jìn)行譯碼。因此,譯碼器14能夠存取儲(chǔ)存于寄存器庫30中的狀態(tài)寄存器32中的指令集指示符值ISASEL,并且能夠存取與不同的指示符值相關(guān)的多個(gè)譯碼規(guī)則。指示符值指示哪個(gè)進(jìn)階指令集當(dāng)前將被譯碼器14譯碼,并且響應(yīng)于該值,譯碼器選擇用于該進(jìn)階指令集編碼空間中的指令的適當(dāng)譯碼規(guī)則并相應(yīng)地對它們進(jìn)行譯碼。
數(shù)據(jù)處理發(fā)備10還包括堆棧40,其中處理器使用該堆棧來存儲(chǔ)分支時(shí)的返回地址和指示符值(如將參照后面的附圖在下文中描述)。
圖2示意性地示出了根據(jù)本發(fā)明實(shí)施例的譯碼器14。用于指令編碼的編碼空間示意性地由塊50示出。這示出了存在用于基本指令集的操作碼的基本編碼空間,并且存在用于進(jìn)階指令集的操作碼的延伸編碼空間(extension encoding space)。因此,每個(gè)進(jìn)階指令集可將整個(gè)延伸編碼空間用于其操作碼。
在當(dāng)前正被譯碼的指令集的指示被提供給譯碼器,從而使得位于延伸編碼空間中的任意指令能夠根據(jù)正確規(guī)則被譯碼的情況下,上述情況是可能的。
這在圖2中由譯碼器14中存儲(chǔ)的基本譯碼規(guī)則60示出。這些譯碼規(guī)則對基本編碼空間中的編碼進(jìn)行譯碼,并且譯碼器一直能夠存取這些譯碼規(guī)則。
關(guān)于延伸編碼空間中的編碼的其他譯碼規(guī)則在圖中被示意性地示出為62、64及66。譯碼器14可經(jīng)由多路復(fù)用器72存取這些譯碼規(guī)則。多路復(fù)用器72響應(yīng)于圖1的狀態(tài)寄存器32中存儲(chǔ)的指令集標(biāo)識(shí)符或指示符值70來選擇供譯碼器14使用的譯碼規(guī)則集合。此標(biāo)識(shí)符指示哪個(gè)特定指令集當(dāng)前正被使用、以及哪些譯碼規(guī)則應(yīng)該被用于落入延伸編碼空間中的任意指令。因此,大量的不同指令可在相對較小的延伸編碼空間中被編碼,并且如果指示符值被適當(dāng)設(shè)置,則該些指令可被譯碼器14譯碼。再者,譯碼器14可以一直對源自基本指令集的任意指令進(jìn)行譯碼。
圖3示意地示出了根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理設(shè)備10的一部分。在此示圖中,可看出如何在狀態(tài)寄存器74中定位指令集指示符值ISASEL70、以及處理器12如何響應(yīng)于指令集更新指令而設(shè)置此值。因此,響應(yīng)于指令集更新指令,此指令所指示的值被寫入狀態(tài)寄存器74中。此值隨后被譯碼器14用來選擇用于位于延伸編碼空間中的指令的譯碼規(guī)則,此值指示指令從屬的進(jìn)階指令集。
寄存器庫30還包括分支鏈接寄存器76,該分支鏈接寄存器76被用于在程序流分支時(shí)存儲(chǔ)當(dāng)前指令集指示符值和返回地址。當(dāng)程序分支時(shí),該程序需要能夠返回到原始的程序流,因此返回地址總是被存儲(chǔ)。然而,由于在本發(fā)明的實(shí)施例中存在可被譯碼的不同的指令集,所以在程序分支時(shí)存儲(chǔ)當(dāng)前指令集指示符值從而使得當(dāng)程序返回到原始的程序流時(shí),該譯碼器可使用正確的譯碼規(guī)則是非常重要的。因此,除了存儲(chǔ)返回地址外,也存儲(chǔ)指令集指示符值。由于分支鏈接寄存器的尺寸以及該些地址的尺寸,分支鏈接寄存器中有足夠的空間來方便地同時(shí)存儲(chǔ)返回地址和指示符值。
應(yīng)注意到,在本實(shí)施例中僅有單個(gè)分支鏈接寄存器72,因而如果程序再次分支,則該寄存器中的數(shù)據(jù)被寫入至堆棧40中,并且分支鏈接寄存器隨后被分支時(shí)的下一返回地址和指令集指示符值覆寫。
圖4示出了數(shù)據(jù)處理設(shè)備10的一部分,并且示出了不被處理器支持的指令集指示符值ISASEL如何被檢測到以及如何生成陷阱(trap)。因此,在此實(shí)施例中,響應(yīng)于指令集更新指令,處理器12發(fā)送新的ISASEL值至寄存器72以更新所存儲(chǔ)的值。此新值傳送通過比較器90且被與存儲(chǔ)于儲(chǔ)存裝置80中的ISASEL值的集合相比較。儲(chǔ)存裝置80存儲(chǔ)所有可能的指令集值,因而如果不存在匹配,則不匹配信號(hào)被比較器90發(fā)送并且生成了例外。如果存在匹配,則比較器90發(fā)送指示符值至寄存器72,且ISASEL的新值被設(shè)置。
圖5示意性地示出了正被執(zhí)行中的指令流,所述指令流包括分支指令。因此,在此實(shí)施例中,在功能2存在分支,并且鏈接寄存器存儲(chǔ)返回地址和當(dāng)前指令集指示符,且該當(dāng)前指令集指示符在此情形中為O,指示當(dāng)前不支持進(jìn)階指令集。該分支跳至的子例程隨后被執(zhí)行,且此子例程將指令集指示符值設(shè)置為3,指示其希望使用源自指示符值3所指定的進(jìn)階指令集的指令。該指令集隨后再次分支,并且鏈接寄存器于此時(shí)被更新以存儲(chǔ)用于此分支的返回地址以及指示符3(該指示符指示指令集指示符值于該程序返回該指令流的此部份時(shí)應(yīng)被重置為3)。應(yīng)注意,在此實(shí)施例中僅有單個(gè)鏈接寄存器,因此先前被存儲(chǔ)于該鏈接寄存器中的值在此鏈接寄存器被覆寫這些新值之前會(huì)被推送至堆棧。
已經(jīng)跳至的子例程隨后被執(zhí)行,并且此子例程包括指令集更新指令,該指令集更新指令指示被指定為4的進(jìn)階指令集將被使用。因此,指令集指示符值被設(shè)置為4。響應(yīng)于此子例程末尾的返回指令,來自鏈接寄存器的值被加載至關(guān)于返回地址的程序計(jì)數(shù)器以及關(guān)于指示符值的狀態(tài)寄存器中(該指示符值在此情形中為3)。
圖6示意性地示出了不具有分支鏈接寄存器的處理設(shè)備中的分支子例程。在此情形中,原始的指令流已將指令集指示符值設(shè)置為3,因而響應(yīng)于分支指令,此指示符值與返回地址一起被推送至堆棧。在從子例程返回時(shí),指示符值被從堆棧中彈出并被存儲(chǔ)于狀態(tài)寄存器74中,并且返回地址被存儲(chǔ)于程序計(jì)數(shù)器中。
圖7示出了說明根據(jù)本發(fā)明實(shí)施例的用于對指令進(jìn)行譯碼的方法。指令在譯碼器處被接收,且該譯碼器根據(jù)指令的操作碼來判斷該指令是否源自于基本指令集。如果指令源自于基本指令集,則譯碼器根據(jù)基本指令集譯碼規(guī)則對指令進(jìn)行譯碼。如果指令并非源自于基本指令集,則該指令必定源自于進(jìn)階指令集,所以譯碼器讀取狀態(tài)寄存器中的指示符值以判定此指令源自于哪個(gè)進(jìn)階指令集。隨后,譯碼器根據(jù)此指示符值所指示的譯碼規(guī)則對該指令進(jìn)行譯碼。
圖8指示出了根據(jù)本發(fā)明實(shí)施例的在處理指令時(shí)執(zhí)行的方法的步驟。最初,指令集更新指令被接收,且指示符值被響應(yīng)于此指令而設(shè)置。響應(yīng)此指示符值,源自進(jìn)階指令集編碼空間的指令被根據(jù)該指示符所標(biāo)識(shí)的譯碼規(guī)則而譯碼。
分支指令隨后被接收,并且當(dāng)前指示符值以及返回地址被存儲(chǔ)。隨后跳至該分支所指示的指令并執(zhí)行后續(xù)指令。這些指令包括更新該指示符值的指令,因而該指示符值被更新。當(dāng)指示從該分支返回時(shí),指示符值從所存儲(chǔ)的值恢復(fù)為該分支之前的值,而返回地址也被從儲(chǔ)存裝置中擷取并被用以重置程序計(jì)數(shù)器。
圖9示出了可被使用的虛擬機(jī)實(shí)現(xiàn)。雖然前述實(shí)施例通過支持相關(guān)技術(shù)的用于操作特定處理硬件的設(shè)備和方法來實(shí)現(xiàn)本發(fā)明,但是也可提供硬件裝置的所謂虛擬機(jī)實(shí)現(xiàn)。這些虛擬機(jī)實(shí)現(xiàn)在主機(jī)處理器530上運(yùn)行,所述主機(jī)處理器530運(yùn)行支持虛擬機(jī)程序510的主機(jī)操作系統(tǒng)520。一般,需要大型高速處理器來提供以合理速度執(zhí)行的虛擬機(jī)實(shí)現(xiàn),但此方式在某些情形中可被證明是合理的,例如當(dāng)出于兼容性或重復(fù)使用的原因而希望運(yùn)行另一處理器處的程序代碼時(shí)。虛擬機(jī)程序510提供至應(yīng)用程序500的應(yīng)用程序接口,其中該應(yīng)用程序接口與真實(shí)硬件所提供的應(yīng)用程序接口相同,該真實(shí)硬件是虛擬機(jī)程序510所模擬的裝置。因此,包括對于前述存儲(chǔ)器存取的控制在內(nèi)的程序指令可使用虛擬機(jī)程序510于應(yīng)用程序500中加以執(zhí)行,以模擬它們與虛擬機(jī)硬件之間的互動(dòng)。
本發(fā)明的各種進(jìn)一步的方面和特征在所附權(quán)利要求中被限定。在不脫離本發(fā)明的范圍的條件下,可以對前面描述的實(shí)施例做出各種修改。
權(quán)利要求
1.一種數(shù)據(jù)處理設(shè)備,包括: 指令譯碼器,用于對指令進(jìn)行譯碼;以及 處理器,用于響應(yīng)于指令譯碼器所譯碼的指令而處理數(shù)據(jù); 所述指令譯碼器被配置為對來自多個(gè)不同指令集的指令進(jìn)行譯碼,所述指令集包括基本指令集以及至少一個(gè)進(jìn)階指令集; 所述基本指令集包括多個(gè)指令,所述基本指令集中的每個(gè)指令包含用于唯一地標(biāo)識(shí)所述指令的預(yù)定操作碼,并且所述至少一個(gè)進(jìn)階指令集包括多個(gè)指令,所述至少一個(gè)進(jìn)階指令集中的每個(gè)指令包含用于標(biāo)識(shí)所述至少一個(gè)進(jìn)階指令集中的所述指令的操作碼; 所述指令譯碼器被配置為根據(jù)基本譯碼規(guī)則集合對具有所述多個(gè)預(yù)定操作碼中的一個(gè)預(yù)定操作碼的指令進(jìn)行譯碼,以及根據(jù)指示符值所判定的譯碼規(guī)則集合對具有所述至少一個(gè)進(jìn)階指令集的所述操作碼中的一個(gè)操作碼的指令進(jìn)行譯碼,其中所述指示符值指示所述至少一個(gè)進(jìn)階指令集中的哪個(gè)進(jìn)階指令集當(dāng)前將被譯碼。
2.如權(quán)利要求1所述的數(shù)據(jù)處理設(shè)備,其中所述指令譯碼器被配置為對至少二個(gè)進(jìn)階指令集進(jìn)行譯碼,所述至少二個(gè)進(jìn)階指令集至少具有一些共同的操作碼。
3.如任一前述權(quán)利要求所述的數(shù)據(jù)處理發(fā)備,其中所述數(shù)據(jù)處理設(shè)備包括狀態(tài)寄存器,用于存儲(chǔ)所述指示符值。
4.如權(quán)利要求3所述的數(shù)據(jù)處理設(shè)備,其中所述指令譯碼器響應(yīng)于指令集更新指令,將存儲(chǔ)于所述狀態(tài)寄存器中的所述指示符值設(shè)置為所述指令中指定的值,所述指令集更新指令為來自所述基本指令集的指令。
5.如任一前述權(quán)利要求所述的數(shù)據(jù)處理設(shè)備,其中所述處理器被配置為響應(yīng)于指示所述程序流將要分支的分支指令,存儲(chǔ)返回地址和所述指示符值,從而使得在從所述分支返回時(shí)所述返回地址和指示符值能夠被恢復(fù)。
6.如權(quán)利要求5所述的數(shù)據(jù)處理設(shè)備,其中所述數(shù)據(jù)處理設(shè)備被配置為在所述分支之前重置所述指示符值。
7.如權(quán)利要求5所述的數(shù)據(jù)處理設(shè)備,其中所述返回地址和指示符值被存儲(chǔ)于相同的鏈接寄存器中。
8.如權(quán)利要求7所述的數(shù)據(jù)處理設(shè)備,其中所述鏈接寄存器的較高有效位存儲(chǔ)所述指示符值,并且所述鏈接寄存器的較低有效位存儲(chǔ)所述返回地址。
9.如權(quán)利要求7所述的數(shù)據(jù)處理設(shè)備,其中所述返回地址和指示符值響應(yīng)于所述分支而被存儲(chǔ)到堆棧,并且在從 所述分支返回時(shí)被從所述堆棧讀出。
10.如任一前述權(quán)利要求所述的數(shù)據(jù)處理設(shè)備,所述指令譯碼器響應(yīng)于指示所述至少一個(gè)進(jìn)階指令集中的一個(gè)進(jìn)階指令集的所述指示符以及對所述至少一個(gè)進(jìn)階指令集中的具有以下操作碼的指令的接收而生成例外,其中不存在用于該操作碼的譯碼規(guī)則。
11.如任一前述權(quán)利要求所述的數(shù)據(jù)處理設(shè)備,所述指令譯碼器響應(yīng)于檢測到所述指示符值變換為指示以下進(jìn)階指令集的值而生成例外,其中所述指令譯碼器不具有用于該進(jìn)階指令集的譯碼規(guī)則。
12.如任一前述權(quán)利要求所述的數(shù)據(jù)處理設(shè)備,其中用于所述基本指令集中的指令的所述預(yù)定操作碼位于預(yù)定基本編碼空間中,并且所述至少一個(gè)進(jìn)階指令集的所述操作碼位于預(yù)定延伸編碼空間中。
13.如任一前述權(quán)利要求所述的數(shù)據(jù)處理設(shè)備,其中多個(gè)不同的指示符值標(biāo)識(shí)所述至少一個(gè)進(jìn)階指令集中的一個(gè)進(jìn)階指令集。
14.一種對來自不同指令集的指令進(jìn)行譯碼的方法,包括: 接收指令; 如果所述指令的操作碼為來自基本指令集的指令的操作碼,則根據(jù)用于所述基本指令集的譯碼規(guī)則對所述指令進(jìn)行譯碼;以及 如果所述指令的所述操作碼為來自至少一個(gè)進(jìn)階指令集的指令的操作碼,則根據(jù)指示符值所判定的譯碼規(guī)則集合對所述指令進(jìn)行譯碼,其中所述指示符值指示所述至少一個(gè)進(jìn)階指令集中的哪個(gè)進(jìn)階指令集當(dāng)前將被譯碼。
15.一種根據(jù)權(quán)利要求14對來自不同指令集的指令進(jìn)行譯碼并處理譯碼后的指令的方法,包括響應(yīng)于對指令集更新指令的接收而執(zhí)行以下步驟: 根據(jù)用于所述基本指 令集的譯碼規(guī)則對所述指令進(jìn)行譯碼;以及 響應(yīng)于譯碼后的指令集更新指令,將所述狀態(tài)寄存器中的所述指示符值設(shè)置為所述譯碼后的指令所指示的值。
16.如權(quán)利要求14或15所述的方法,其中響應(yīng)于對指示所述程序流將分支的分支指令的接收: 存儲(chǔ)返回地址和所述指示符的當(dāng)前值,從而使得在從所述分支返回時(shí)所述返回地址和指示符值能夠被恢復(fù)。
17.如權(quán)利要求16所述的方法,其中所述存儲(chǔ)所述返回地址和指示符值的步驟包括:將所述值存儲(chǔ)于相同的鏈接寄存器中。
18.如權(quán)利要求16所述的方法,其中所述存儲(chǔ)所述返回地址和指示符值的步驟包括:將所述數(shù)存儲(chǔ)到堆棧,并且響應(yīng)于從分支指令返回而從所述堆棧讀取所述值。
19.如權(quán)利要求14至18中任一項(xiàng)所述的方法,包括響應(yīng)于指示所述至少一個(gè)進(jìn)階指令集中的一個(gè)進(jìn)階指令集的所述指示符以及對所述至少一個(gè)進(jìn)階指令集中的具有以下操作碼的指令的接收而生成例外的步驟,其中不存在用于所述操作碼的譯碼規(guī)則。
20.如權(quán)利要求14至19中任一項(xiàng)所述的方法,包括響應(yīng)于檢測到所述指示符值變換為指示以下進(jìn)階指令集的值而生成例外的步驟,其中所述指令譯碼器不具有用于該進(jìn)階指令集的譯碼規(guī)則。
21.一種虛擬機(jī),所述虛擬機(jī)由在數(shù)據(jù)處理設(shè)備上執(zhí)行的計(jì)算機(jī)程序提供,所述虛擬機(jī)根據(jù)權(quán)利要求1至12中任一項(xiàng)所述的數(shù)據(jù)處理設(shè)備提供指令執(zhí)行環(huán)境。
22.—種計(jì)算機(jī)程序產(chǎn)品,包含指令集更新指令,所述指令集更新指令在數(shù)據(jù)處理器上運(yùn)行時(shí)控制所述數(shù)據(jù)處理器將狀態(tài)寄存器中的指示符值設(shè)置為所述指令集更新指令所指示的值,所述數(shù)據(jù)處理器的譯碼器根據(jù)基本譯碼規(guī)則集合對具有指示來自基本指令集的指令的操作碼的指令進(jìn)行譯碼,并且根據(jù)所述指示符值所判定的譯碼規(guī)則集合對具有指示來自進(jìn)階指令集的指令的操作碼的指令進(jìn)行譯碼。
23.一種處理數(shù)據(jù)的裝置,包括: 指令譯碼裝置,用于對指令進(jìn)行譯碼;以及 處理裝置,用于響應(yīng)于指令譯碼裝置所譯碼的指令而處理數(shù)據(jù); 所述指令譯碼裝置用于對來自多個(gè)不同指令集的指令進(jìn)行譯碼,所述指令集包括基本指令集以及至少一個(gè)進(jìn)階指令集; 所述基本指令集包括多個(gè)指令,所述基本指令集中的每個(gè)指令包含用于唯一地標(biāo)識(shí)所述指令的預(yù)定操作碼,所述至少一個(gè)進(jìn)階指令集包括多個(gè)指令,所述至少一個(gè)進(jìn)階指令集中的每個(gè)指令包含用于標(biāo)識(shí)所述至少一個(gè)進(jìn)階指令集中的所述指令的操作碼; 所述指令譯碼裝置用于根據(jù)基本譯碼規(guī)則集合對具有所述多個(gè)預(yù)定操作碼中的一個(gè)預(yù)定操作碼的指令進(jìn)行譯碼,以及用于根據(jù)指示符值所判定的譯碼規(guī)則集合對具有所述至少一個(gè)進(jìn)階指令集的所述操作碼中的一個(gè)操作碼的指令進(jìn)行譯碼,所述指示符值指示所述至少一個(gè)進(jìn)階指令集中的哪個(gè)進(jìn)階指令集當(dāng)前將被譯碼。
24.一種基本如參考圖1至9描述的數(shù)據(jù)處理設(shè)備。
25.—種基本如參考圖1至9描述的方法。
26.—種基本如參考圖1至9描述的虛擬機(jī)。
27.—種基本如參考圖1至9描述 的計(jì)算機(jī)程序產(chǎn)品。
全文摘要
描述了能夠?qū)碜圆煌噶罴闹噶钸M(jìn)行譯碼的數(shù)據(jù)處理設(shè)備、方法和計(jì)算機(jī)程序。該方法包括接收指令;如果所述指令的操作碼為來自基本指令集的指令的操作碼,則根據(jù)用于所述基本指令集的譯碼規(guī)則對所述指令進(jìn)行譯碼;以及如果所述指令的所述操作碼為來自至少一個(gè)進(jìn)階指令集的指令的操作碼,則根據(jù)指示符值所判定的譯碼規(guī)則集合對所述指令進(jìn)行譯碼,其中該指示符值指示所述至少一個(gè)進(jìn)階指令集中的哪個(gè)進(jìn)階指令集當(dāng)前將被譯碼。
文檔編號(hào)G06F9/30GK103154883SQ201180048887
公開日2013年6月12日 申請日期2011年9月29日 優(yōu)先權(quán)日2010年10月12日
發(fā)明者西蒙·約翰·克拉斯克 申請人:Arm 有限公司