專利名稱::可執(zhí)行x86指令集及ARM指令集指令的微處理器及其運(yùn)作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種微處理器,特別是涉及一種關(guān)于多重指令集架構(gòu)的支持。
背景技術(shù):
:由美國加州圣克拉拉的intel公司所獨(dú)創(chuàng)地開發(fā)的x86處理器架構(gòu),以及由英國劍橋的ARM公司所獨(dú)創(chuàng)地開發(fā)的進(jìn)階精簡指令集機(jī)器(AdvancedRISCMachines,ARM)架構(gòu),皆是計(jì)算機(jī)
技術(shù)領(lǐng)域:
所熟知。許多計(jì)算機(jī)系統(tǒng)中存在,包括ARM處理器或x86處理器,以及對他們的需求似乎迅速地增加。目前,ARM架構(gòu)處理核心的需求在計(jì)算機(jī)市場中的低功率及低成本部分似乎占有主要的地位,例如手機(jī)、個(gè)人數(shù)字助理(PDA)、平板計(jì)算機(jī)(tabletPCs)、網(wǎng)絡(luò)路由器及集線器以及機(jī)頂盒(例如蘋果公司的iPhone以及iPad的主要處理電源是由ARM架構(gòu)處理器核心所提供)。而x86架構(gòu)處理器的需求在計(jì)算機(jī)市場中的講求高效能及需要高成本的部分似乎占有主要的地位,例如筆記型計(jì)算機(jī)、桌上型計(jì)算機(jī)及伺服器。然而,隨著ARM核心的效能增加以及x86處理器的某種模型的消耗功率及成本減少,不同市場的界線顯然地消失,且兩個(gè)架構(gòu)即將互相對抗,舉例來說,在行動計(jì)算機(jī)市場如智慧型手機(jī),且兩個(gè)架構(gòu)很可能即將在筆記型計(jì)算機(jī)、桌上型計(jì)算機(jī)及伺服器的市場上更頻繁地對抗。這種情況造成計(jì)算機(jī)元件制造商及消費(fèi)者對于兩個(gè)架構(gòu)中何者占有優(yōu)勢而處于兩難,特別是兩個(gè)架構(gòu)軟件開發(fā)者為此將開發(fā)更多的軟件。舉例來說,一些企業(yè)用戶每個(gè)月或每年購買非常大量的計(jì)算機(jī)系統(tǒng)。這些企業(yè)用戶因?yàn)榇罅抠徺I相同系統(tǒng)以及簡化系統(tǒng)維持及維修的成本效益,將非常積極地購買相同組態(tài)的系統(tǒng)。然而,這些大企業(yè)用戶的使用者對單一設(shè)置的計(jì)算機(jī)具有不同的計(jì)算需求。更具體地來說,一些有計(jì)算需求的使用者想要在一ARM架構(gòu)處理器上執(zhí)行軟件,而另一些有計(jì)算需求的使用者想要在x86架構(gòu)處理器上執(zhí)行軟件,甚至還有一些想要在兩者架構(gòu)處理器上執(zhí)行軟件。更進(jìn)一步地來說,新的先前未預(yù)料到對一個(gè)架構(gòu)或另一個(gè)架構(gòu)的計(jì)算需求可能出現(xiàn)。在這些情況下,這些大企業(yè)用戶所做的龐大的投資的一部份可能已經(jīng)浪廢掉。舉另一個(gè)例子來說,一特定的使用者可能有一重要的應(yīng)用程序,該運(yùn)用只能在x86架構(gòu)上執(zhí)行,因此,該使用者購買x86架構(gòu)系統(tǒng),但是應(yīng)用程序的版本是為ARM架構(gòu)而開發(fā),其優(yōu)于x86的版本(反之亦然),因此使用者想要切換版本。不幸地,使用者已經(jīng)對他不偏好的架構(gòu)投入金錢。更進(jìn)一步地來說,一個(gè)特定的使用者已經(jīng)對應(yīng)用軟件投資,該應(yīng)用軟件僅能在ARM架構(gòu)上執(zhí)行,然而使用者欲將應(yīng)用軟件使用于其他已經(jīng)為x86開發(fā)的領(lǐng)域,該領(lǐng)域并未對ARM架構(gòu)所存在,或是優(yōu)于為ARM架構(gòu)所開發(fā)的相當(dāng)?shù)能浖?反之亦然)。值得注意的是,盡管小企業(yè)用戶或個(gè)人使用者對應(yīng)用軟件的投資可能沒有大企業(yè)用戶在數(shù)量級上來得多,然而,浪費(fèi)的投資相對地可能要來得多。許多投資的浪費(fèi)的其他類似的例子,在多變的計(jì)算機(jī)元件市場中切換占有優(yōu)勢時(shí)可能存在或出現(xiàn),例如從x86架構(gòu)切換到ARM架構(gòu),反之亦然。最后,計(jì)算機(jī)元件制造商,例如原始設(shè)備制造商(OriginalEquipmentManufacture,OEM)在新產(chǎn)品上投入大量的資源。制造商亦將陷入兩難,且如果他們開發(fā)并制造了大量的圍繞x86或ARM架構(gòu)的系統(tǒng),將可能浪費(fèi)掉一些他們寶貴的開發(fā)資源,然后使用者的需求突然地相對地改變。對計(jì)算機(jī)元件的制造商及消費(fèi)者來說,可以不在乎兩個(gè)架構(gòu)中的哪一個(gè)盛行而保有他們的投資資源是有益的。因此,一種解決方案是有必要的,其允許系統(tǒng)制造商開發(fā)一種計(jì)算機(jī)元件,該計(jì)算機(jī)元件是可以讓使用者執(zhí)行x86架構(gòu)及ARM架構(gòu)的程序。一種可執(zhí)行一種以上指令集的程序的系統(tǒng)的需求已長久存在,主要是因?yàn)轭櫩涂赡茏鞒鲋匾耐顿Y在一種軟件上,該軟件只能在舊的硬件上執(zhí)行,其指令集不同于新的硬件的指令集。舉例來說,IBMSystem/360Model30包含一個(gè)IBMSystem1401相容性特征可減緩轉(zhuǎn)換至高效能及功能增強(qiáng)的system/360的痛苦。Model30包含System/360以及System/1401只讀存儲器(ReadOnlyStorage,R0S)控制器,如果輔助存儲器(AuxiliaryStorage)預(yù)先載入需要的信息,其可用于1401模式。此外,開發(fā)出高階語言的軟件時(shí),硬件開發(fā)者對該軟件在舊硬件上編譯可能有很少或是無法控制,且軟件開發(fā)者可能沒有動機(jī)為了新的硬件去重新編譯原始碼,特別是如果軟件開發(fā)者與硬件開發(fā)者不是屬于同一個(gè)企業(yè)用戶時(shí)。Silberman以及Ebcioglu提出一種增進(jìn)現(xiàn)行的("基底(base)")復(fù)雜指令集計(jì)算機(jī)(ComplexInstructionSetComputer,CISC)架構(gòu)(例如IBMS/390)的軟件的技術(shù),其藉由將該軟件于一個(gè)精簡指令集計(jì)算機(jī)(ReducedInstructionSetComputer,RISC)上執(zhí)行來實(shí)現(xiàn),超純量,以及超長指令字(VeryLongInstructionWord,VLIff)架構(gòu)("原生(native)")系統(tǒng),其藉由包含一個(gè)原生引擎來執(zhí)行原生碼(nativecode)以及一個(gè)遷移引擎(migrantengine)來執(zhí)行基底目標(biāo)碼(objectcode),可視需要切換于多種編碼之間,其取決于將目標(biāo)碼譯為原始碼的譯碼軟件的有效性??蓞⒖肌?AnArchitecturalFrameworkforSupportHeterogeneousInstruction-SetArchitecture,"SibermanandEbciogluComputer,June1993,No.6.VanDykeetal.」揭示一種具有執(zhí)行管線(executionpipeline)的處理器,其執(zhí)行原生RISC程序指令且亦通過硬件轉(zhuǎn)譯及軟件轉(zhuǎn)譯的結(jié)合將x86程序指令譯為原生RISC指令。參考于2006/5/16核準(zhǔn)的U.S.patentNo.7,047,394,Nakada等人提出一種異質(zhì)同步多執(zhí)行緒處理器(SimultaneousMulti-threadingProcessor,SMT),其具有針對不規(guī)則程序(例如OS)的進(jìn)階RISC機(jī)器(AdvancedRISCMachine,ARM)架構(gòu)前端管線(front-endpipeline),以及針對多媒體應(yīng)用程序的FujitsuFR-VVLIW架構(gòu)前端管線,其提供具有附加VLIW隊(duì)列(queue)的FR-VVLIW后端管線(back-endpipeline),以保持來自前端管線的指令。參考「"0R0CHI:AMultipleInstructionSetSMTProcessor,"ProceedingoftheFirstInternationalWorkshoponNewFrontiersinHigh-performanceandHardware-awareComputing(HipHaC'08),LakeComo,Italy,November2008(InconjunctionwithMICRO-41),Buchtyandffeib,eds,UniversitatsverlagKarlsruhe,ISBN978-3-86644-298-6」。其所提出的方法是為了減少在異質(zhì)系統(tǒng)芯片(SystemonChip,S0C)裝置上的總系統(tǒng)覆蓋區(qū),例如TexasInstrumentsOMAP包括一個(gè)ARM處理器核心加上一個(gè)或一個(gè)以上的協(xié)處理器(co-processor),例如TMS320、各式各樣的數(shù)字訊號處理器或是各式各樣的GPUs,他們并不會共享指令執(zhí)行資源,而是實(shí)質(zhì)上以不同的處理核心整合于一個(gè)單一的芯片上。軟件轉(zhuǎn)譯器(Softwaretranslator),亦或是軟件仿真器(Softwareemulator)>軟件模擬器(Softwaresimulator)、動態(tài)二進(jìn)制碼轉(zhuǎn)譯器及其類似者,亦可用來執(zhí)行位于架構(gòu)上的處理器上的不同架構(gòu)的程序。一個(gè)大眾商業(yè)例子如Motorola68K-to-PowerPC仿真器,其伴隨著AppleMacintosh計(jì)算機(jī)以允許68K程序在具有PowerPC處理器的Macintosh執(zhí)行,且之后開發(fā)的PowerPC-to_x86仿真器可允許PowerPC程序在具有x86處理器的Macintosh執(zhí)行。加州圣克拉拉的Transmeta公司將VLIW核心硬件稱接于一個(gè)以軟件為基底的指令轉(zhuǎn)譯器,參照"CodeMorphingSoftware",其動態(tài)地編譯或仿真x86編碼序列以執(zhí)行x86編碼。亦可參考1998/11/3核準(zhǔn)由Kelly所申請的U.S.PatentNo.5,832,205。來自Yorktown的IBM動態(tài)架構(gòu)指令集(DynamicArchitectedInstructionSet,DAISY)系統(tǒng)包括VLIW機(jī)器及動態(tài)二進(jìn)制碼軟件轉(zhuǎn)譯器,用以提供100%軟件相容仿真給舊的架構(gòu)。DAISY包含一個(gè)虛擬機(jī)器監(jiān)視器(VirtualMachineMonitor)常駐在ROM里,其原始的平行并儲存VLIW至主存儲器的一部份,而非可見的至舊架構(gòu),這是為了避免在相同的舊架構(gòu)編碼片段的序列實(shí)例上發(fā)生再轉(zhuǎn)譯(re-translation)。DAISY包含快速的編譯最佳化演算法,以增加效能。QEMU為一個(gè)機(jī)器仿真器,其包含一軟件動態(tài)轉(zhuǎn)譯器。QEMU模仿不同主機(jī)上的一些CPU(例如x86PowerPC、ARM、SPARC、Alpha以及MIP)。如發(fā)明人所述,動態(tài)轉(zhuǎn)譯執(zhí)行進(jìn)入主機(jī)指令集的目標(biāo)CPU指令的計(jì)算機(jī)運(yùn)作時(shí)間的轉(zhuǎn)換。二進(jìn)制編碼的結(jié)果儲存在一個(gè)轉(zhuǎn)譯快速緩沖存儲器(cache),可減少計(jì)算機(jī)運(yùn)作的時(shí)間。QEMU相較于其他動態(tài)轉(zhuǎn)譯器簡單,因?yàn)镼EMU將GNUC編譯器離線產(chǎn)生的機(jī)器編碼連成一串。FabriceBellard,USENIXAssociation,FREENIXTrack于2005USENIXAnnualTechnicalConference:QEMU是一個(gè)快速且可攜帶的動態(tài)轉(zhuǎn)譯器。亦參考LeeWangHao,UniversityofAdelaide,June19,2009的論文"ARMInstructionSetSimulationonMulti-Corex86Hardware"。然而,盡管以轉(zhuǎn)譯器為基底的軟件的解答可能針對計(jì)算需要的一子集提供足夠的效能,其未必提供許多使用者需要的效能。靜態(tài)的二進(jìn)制轉(zhuǎn)碼為另一個(gè)技術(shù),其具有高效能的淺力。然而,仍有技術(shù)上的考量,例如自我修改程序碼(self-modifyingcode)、直接轉(zhuǎn)移(directbranch)其價(jià)值僅在計(jì)算機(jī)作業(yè)時(shí)間,以及與靜態(tài)二進(jìn)制轉(zhuǎn)譯有關(guān)的商業(yè)/合法障礙,例如硬件開發(fā)者為了新的程序需要開發(fā)通道,以及對于原始程序分配者具有潛在的許可及著作權(quán)的違反問題。
發(fā)明內(nèi)容本發(fā)明的各種實(shí)施例將于以下描述,其藉由提出一單一處理器設(shè)計(jì)來解決前述所指出的需求,該設(shè)計(jì)可執(zhí)行x86指令集架構(gòu)(instructionsetarchitecture,ISA)機(jī)器語言程序以及ARM指令集架構(gòu)機(jī)器語言程序。根據(jù)一實(shí)施例,本發(fā)明提供一微處理器。微處理器包含一硬件指令轉(zhuǎn)譯器,其將多個(gè)指令轉(zhuǎn)譯為多個(gè)微指令,這些指令包含多個(gè)x86指令集架構(gòu)機(jī)器語言程序以及多個(gè)ARM指令集架構(gòu)機(jī)器語言程序,這些微指令由該微處理器的一微指令集定義。這些微指令的編碼方式有別于這些指令的編碼方式,這些指令由這些x86指令集架構(gòu)及ARM指令集架構(gòu)的指令集所定義。微處理器還包含一執(zhí)行管線,耦接于該硬件指令轉(zhuǎn)譯器。該執(zhí)行管線執(zhí)行這些微指令,以產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果。硬件指令轉(zhuǎn)譯器直接提供這些微指令至該執(zhí)行管線以供執(zhí)行,來產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的該結(jié)果。根據(jù)另一實(shí)施例,本發(fā)明提供一運(yùn)作微處理器的方法該微處理器包含一指標(biāo),該指標(biāo)指示x86指令集架構(gòu)或ARM指令集架構(gòu)。該方法包含確定該指標(biāo)是指示該X86指令集架構(gòu)或是ARM指令集架構(gòu)的何者。該方法也包含當(dāng)該指標(biāo)指示為該x86指令集架構(gòu)時(shí),依據(jù)該x86指令集架構(gòu)將多個(gè)機(jī)器語言指令轉(zhuǎn)譯為多個(gè)微指令,當(dāng)該指標(biāo)指示為該ARM指令集架構(gòu)時(shí),依據(jù)該ARM指令集架構(gòu)將多個(gè)機(jī)器語言指令轉(zhuǎn)譯為多個(gè)微指令。這些微指令是由該微處理器的一微指令集所定義,且這些微指令的編碼方式有別于該x86指令集架構(gòu)或是ARM指令集架構(gòu)的這些指令集所定義的這些指令的編碼方式。該轉(zhuǎn)譯步驟是由該微處理器的一硬件指令轉(zhuǎn)譯器實(shí)行。該方法也包含當(dāng)該指標(biāo)指示為該x86指令集架構(gòu)時(shí),執(zhí)行這些微指令,以產(chǎn)生由該x86指令集架構(gòu)所定義的結(jié)果,當(dāng)該指標(biāo)指示為該ARM指令集架構(gòu)時(shí),執(zhí)行這些微指令,以產(chǎn)生由該ARM指令集架構(gòu)所定義的結(jié)果。執(zhí)行步驟是由該微處理器的一執(zhí)行管線實(shí)行,該執(zhí)行管線耦接于該硬件指令轉(zhuǎn)譯器。根據(jù)另一實(shí)施例,本發(fā)明提供一微處理器。該微處理器包含多個(gè)寄存器,其維持該處理器的一架構(gòu)狀態(tài)。該微處理器還包含一指標(biāo),其指示該微處理器的一啟動指令集架構(gòu)為該X86指令集架構(gòu)或該ARM指令集架構(gòu)。該微處理器還包含一硬件指令轉(zhuǎn)譯器,其將多個(gè)x86ISA指令及多個(gè)ARM指令集架構(gòu)指令轉(zhuǎn)譯為多個(gè)微指令。該硬件指令轉(zhuǎn)譯器依據(jù)該啟動指令集架構(gòu)的指示,轉(zhuǎn)譯這些初始指令集架構(gòu)指令,這些初始指令集架構(gòu)指令是該微處理器在接收一重置訊號后,從架構(gòu)型存儲空間讀取出。該微處理器還包含一執(zhí)行管線,其耦接于該硬件指令轉(zhuǎn)譯器。該執(zhí)行管線執(zhí)行這些微處理器,以產(chǎn)生這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果。在該微處理器讀取這些初始指令集架構(gòu)指令前,該微處理器因應(yīng)該重置訊號,初始化位于這些寄存器中且由該啟動ISA定義的架構(gòu)狀態(tài)。根據(jù)另一實(shí)施例,本發(fā)明提供一種運(yùn)作微處理器方法。該方法包含檢測一微處理器的一已發(fā)送的重置訊號,其中該檢測步驟是由該微處理器實(shí)行。該方法還包含因應(yīng)該檢測步驟來決定該微處理器的一已發(fā)送的重置訊號,于該x86指令指令集架構(gòu)以及該ARM指令集架構(gòu)之中,該微處理器的一指標(biāo)所指示的,是該微處理器的一啟動指令集架構(gòu)。該決定步驟是由該微處理器實(shí)行。該方法還包含初始化由該啟動指令集架構(gòu)定義的該微處理器的一架構(gòu)狀態(tài)。該初始化步驟是由該微處理器實(shí)行。該方法還包含轉(zhuǎn)譯成多個(gè)微指令,該微處理器在這些初始ISA指令重置后,從架構(gòu)型存儲空間讀取這些初始ISA指令。該轉(zhuǎn)譯步驟是由該微處理器的一硬件指令轉(zhuǎn)譯器實(shí)行。該方法還包含執(zhí)行這些微指令,以產(chǎn)生該初始指令集架構(gòu)定義的結(jié)果。該執(zhí)行步驟是由該微處理器的一執(zhí)行管線實(shí)行,該執(zhí)行管線耦接于該硬件指令轉(zhuǎn)譯器。根據(jù)另一實(shí)施例,本發(fā)明提供一微處理器。該微處理器包含一指令高速緩存存儲器,其將多個(gè)指令存入高速緩存存儲器,這些指令包含多個(gè)x86指令集架構(gòu)機(jī)器語言程序以及多個(gè)ARM指令集架構(gòu)機(jī)器語言程序。該微處理器還包含一硬件指令轉(zhuǎn)譯器,其耦接于該指令高速緩存存儲器。該硬件指令轉(zhuǎn)譯器從該指令高速緩存存儲器接收這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令,并因應(yīng)地將這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令轉(zhuǎn)譯成多個(gè)微指令,其中這些微指令的編碼方式有別于這些指令的編碼方式,這些指令由這些x86指令集架構(gòu)及ARM指令集架構(gòu)的指令集所定義。該微處理器還包含一執(zhí)行管線,其耦接于該硬件指令轉(zhuǎn)譯器。該執(zhí)行管線執(zhí)行這些微指令,以產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果。根據(jù)另一實(shí)施例,本發(fā)明提供一微處理器。該處理器包含一硬件指令轉(zhuǎn)譯器,其將多個(gè)指令轉(zhuǎn)譯為多個(gè)微指令,這些指令包含多個(gè)x86指令集架構(gòu)機(jī)器語言程序以及多個(gè)ARM指令集架構(gòu)機(jī)器語言程序,這些微指令由該微處理器的一微指令集定義。這些微指令的編碼方式有別于這些指令的編碼方式,這些指令由該x86指令集架構(gòu)及ARM指令集架構(gòu)的指令集所定義。該處理器還包含一執(zhí)行管線,耦接于該硬件指令轉(zhuǎn)譯器。該執(zhí)行管線執(zhí)行這些微指令,以產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果。該微處理器每一次實(shí)行這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令的其中之一時(shí),該硬件指令轉(zhuǎn)譯器將該指令集架構(gòu)指令轉(zhuǎn)譯為這些微指令,以供該執(zhí)行管線執(zhí)行。根據(jù)另一實(shí)施例,本發(fā)明提供一微處理器。該處理器包含一硬件指令轉(zhuǎn)譯器,其將多個(gè)指令轉(zhuǎn)譯為多個(gè)微指令,這些指令包含多個(gè)x86指令集架構(gòu)機(jī)器語言程序以及多個(gè)ARM指令集架構(gòu)機(jī)器語言程序,這些微指令由該微處理器的一微指令集定義。這些微指令的編碼方式有別于這些指令的編碼方式,這些指令由該x86指令集架構(gòu)及ARM指令集架構(gòu)的指令集所定義。該處理器還包含一執(zhí)行管線,耦接于該硬件指令轉(zhuǎn)譯器。該執(zhí)行管線執(zhí)行這些微指令,以產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果。由該硬件指令轉(zhuǎn)譯器提供給該執(zhí)行管線的這些微指令有別于該執(zhí)行管線執(zhí)行這些微指令所產(chǎn)生的結(jié)果。圖I顯不本發(fā)明的微處理器的一實(shí)施例的方塊圖。圖2顯示圖I的硬件指令轉(zhuǎn)譯器的一實(shí)施例的方塊圖。圖3顯示圖2的指令格式器的一實(shí)施例的方塊圖。圖4顯示圖I的執(zhí)行管線的一實(shí)施例的方塊圖。圖5顯示圖I的寄存器文件的一實(shí)施例的方塊圖。圖6A-6B顯示圖I的微處理器的運(yùn)算步驟的一實(shí)施例的流程圖。圖7顯示本發(fā)明的雙核心處理器的一實(shí)施例的方塊圖。圖8顯示本發(fā)明的微處理器的一實(shí)施例的方塊圖。附圖符號說明100微處理器102指令高速緩存存儲器104硬件指令轉(zhuǎn)譯器106寄存器文件108存儲器子系統(tǒng)112執(zhí)行管線114指令讀取單元及轉(zhuǎn)移預(yù)測器116ARMPC118x86IP122組態(tài)寄存器124x86ISA及ARMISA指令126微指令128微指令結(jié)果132指令模式134讀取地址指標(biāo)136環(huán)境模式指標(biāo)202指令格式器204簡單指令轉(zhuǎn)譯器222x86SIT224ARMSIT242格式化的x86ISA及ARMISA指令252微編碼地址206復(fù)雜指令轉(zhuǎn)譯器232微程序計(jì)數(shù)器234微編碼只讀存儲器235指令間接寄存器236微序列器237微轉(zhuǎn)譯器244微指令246微指令247R0M指令212多工器302預(yù)先解碼器304IBQ306長度解碼器及管線邏輯器308MQ312MUXES314FIQ322ARM指令集狀態(tài)401微指令隊(duì)列402寄存器配置表404指令配送器406指令保留器408指令發(fā)出單元412整數(shù)/轉(zhuǎn)移單元414介質(zhì)單元416載入/儲存單元418浮點(diǎn)單元422前序緩沖器424執(zhí)行單元602654微處理器的運(yùn)算步驟流程100核心O100核心I892微指令高速緩存存儲器具體實(shí)施例方式術(shù)語匯編指令集定義為一組二進(jìn)制編碼值對應(yīng)到微處理器執(zhí)行的運(yùn)算的映射(mapping),其中該二進(jìn)制編碼值為機(jī)器語言指令。典型地,機(jī)器語言程序以二進(jìn)制編碼,盡管可能采用其他系統(tǒng),一些較舊的IBM計(jì)算機(jī)的機(jī)器語言程序以十進(jìn)位編碼,雖然他們最終以物理訊號的集合來呈現(xiàn),這些物理訊號包含的檢測電壓為二進(jìn)制的值。舉例來說,操作機(jī)器語言指令可命令微處理器執(zhí)行如下述將第一寄存器的運(yùn)算域加至第二寄存器的運(yùn)算域,并將結(jié)果寫入第三寄存器,將存儲器地址0x12345678中的運(yùn)算域減去指令規(guī)范的最近的運(yùn)算域,并將結(jié)果寫入第五寄存器,以第七寄存器內(nèi)的位個(gè)數(shù)字移第六寄存器內(nèi)的值,如果O標(biāo)志被設(shè)定,在該指令之后,轉(zhuǎn)移為指令36位,從存儲器地址OxAB⑶0000載入該值至寄存器8。如此,指令集定義的二進(jìn)制值是每個(gè)機(jī)器語言指令必定使微處理器去執(zhí)行需要的運(yùn)算。可理解的是,指令集定義的二進(jìn)制值對應(yīng)到微處理器運(yùn)算的映射并非意味著單一二進(jìn)制值映射到單一微處理運(yùn)算。更具體來說,一些指令集中,復(fù)合的二進(jìn)制值可能映射到相同的微處理運(yùn)算。指令集架構(gòu)(Instructionsetarchitecture,ISA),在微處理器的家族的上下文中,包括(I)一個(gè)指令集(2)—個(gè)資源集(例如分配存儲器中的寄存器或模式的地址),該資源集是通過指令集的指令來存取,以及(3)—個(gè)例外集/異常集(setofexceptions),該異常集是由微處理器對應(yīng)于指令集的指令的處理所產(chǎn)生,該指令集例如除以零、頁面故障(pagefault)、違反存儲器保護(hù)。由于程序設(shè)計(jì)師,例如組合程序設(shè)計(jì)師或編譯師,欲產(chǎn)生一機(jī)器語言程序可在微處理器家族上執(zhí)行,如此需要一個(gè)ISA的定義,因此典型地微處理器家族的制造商以程序設(shè)計(jì)者人工的方式定義ISA。舉例來說,在ISA出版的同時(shí),在2009年3月Intel64以及IA-32架構(gòu)軟件開發(fā)者的手冊(包括5種版本,即版本I:基礎(chǔ)架構(gòu),版本2A:指令集參考A-M,版本2B:指令集參考N-Z,版本3A:系統(tǒng)程序?qū)б?,版?B系統(tǒng)程序?qū)б牡?部),藉此為各種目的將全部的內(nèi)容以參考數(shù)據(jù)的方式合并于本文,以定義Intel64以及IA-32處理器架構(gòu),這對于參考x86架構(gòu)以及文中的x86、x86ISA、x86ISA家族、x86家族或相似者是常見的。舉另一個(gè)例子來說,當(dāng)ARM架構(gòu)參考手冊于2010年出版的同時(shí),ARMv7-A以及ARMv7_R版本錯(cuò)誤標(biāo)示,為各種目的將全部的內(nèi)容以參考數(shù)據(jù)的方式合并于本文,以定義ARM處理器架構(gòu)的ISA,在此亦可參考ARM、ARMISA、ARMISA家族、ARM家族或及其類似者。公知的ISA家族的其他例子如IBMSystem/360/370/390,z/Architecture,DECVAX,Motorola68k、MIPS、SPARC、PowerPC以及DECAlpha。ISA定義涵蓋了處理器的一個(gè)家族,因?yàn)樵贗SA處理器家族的使用期限中,制造商可能藉由增加新的指令至指令集和/或增加新的寄存器至架構(gòu)寄存器集,來增強(qiáng)家族中的原始處理器的ISA。舉例詳述,當(dāng)x86ISA發(fā)展至被IntelPentiumIII處理器家族采用時(shí),一組128位XMM寄存器作為SSE延伸的一部份,且x86ISA機(jī)器語言程序已發(fā)展為使用XMM寄存器以增加效能,盡管x86ISA機(jī)器語言程序現(xiàn)令不使用SSE延伸的XMM寄存器。此外,其他制造商已經(jīng)設(shè)計(jì)且制造出可執(zhí)行x86ISA機(jī)器語言程序的微處理器。舉例來說,AMD(AdvancedMicroDevices)以及VIA科技已將新的特征,例如AMD3DN0W!SIMD向量處理指令以及VIA掛鎖安全引擎隨機(jī)數(shù)字產(chǎn)生器(PadlockSecurityEnginerandomnumbergenerator)及進(jìn)階解碼引擎特征,其中的每一個(gè)皆是由一些X86ISA機(jī)器語言程序所使用,但并非在現(xiàn)令的Intel微處理器中所使用。以其他例子更詳盡地說明,ARMISA原本定義ARM指令集狀態(tài),包括4位的指令。然而,ARMISA逐漸發(fā)展為用來以2位指令來增加Thumb指令集狀態(tài),以增加編碼的密度以及Jazelle指令集狀態(tài),并加速Java位編碼程序,且ARMISA機(jī)器語言程序已開發(fā)為使用一些或所有其他ARMISA指令集狀態(tài),盡管ARMISA機(jī)器語言程序現(xiàn)令并非使用其他ARMISA指令集狀態(tài)。ISA機(jī)器語言程序包含該ISA的一序列的指令,也就是,一序列的二進(jìn)制編碼值,其為該ISA指令對于運(yùn)算序列設(shè)定硬射,該運(yùn)算序列為程序設(shè)計(jì)者預(yù)期要執(zhí)行的。因此,一x86ISA機(jī)器語言程序包含一x86ISA指令的序列;且一ARMISA機(jī)器語言程序包含一ARMISA指令的序列。該機(jī)器語言程序指令位于存儲器中,且由微處理器提取及執(zhí)行。硬件指令轉(zhuǎn)譯器包含一晶體管的配置,其接收一ISA機(jī)器語言指令(例如一x86ISA或ARMISA機(jī)器語言指令)來作為輸入,并對應(yīng)地將一個(gè)或多個(gè)微指令直接輸出至該微處理器的一執(zhí)行管線。執(zhí)行管線執(zhí)行該一個(gè)或多個(gè)微指令的結(jié)果,為該ISA指令定義的結(jié)果。因此,該一個(gè)或多個(gè)微指令藉由該執(zhí)行管線的序列執(zhí)行「實(shí)行」該ISA指令;也就是,由硬件指令轉(zhuǎn)譯器輸出的實(shí)行微指令的執(zhí)行管線所執(zhí)行的序列執(zhí)行,在由ISA指令定義的輸入端執(zhí)行了ISA指令規(guī)范的運(yùn)算,以產(chǎn)生由ISA指令定義的一結(jié)果。因此,硬件指令轉(zhuǎn)譯器可說是將ISA指令轉(zhuǎn)譯成一個(gè)或多個(gè)實(shí)行微指令。目前的揭示描述一微處理器的多個(gè)實(shí)施例,該微處理器包含一硬件指令轉(zhuǎn)譯器,其將X86ISA指令及ARMISA指令轉(zhuǎn)譯成微指令。需了解的是,該硬件指令轉(zhuǎn)譯器不是一定要能轉(zhuǎn)譯由x86程序設(shè)計(jì)者的手冊或ARM程序設(shè)計(jì)者的手冊定義的全部指令集,只要能轉(zhuǎn)譯這些指令的一子集(subset),因?yàn)榇蠖鄶?shù)的x86ISA及ARMISA處理器只支持這些指令的一子集,其由為他們各自的程序設(shè)計(jì)者的手冊所定義。較特別的是,由x86程序設(shè)計(jì)者的手冊定義、且由硬件指令轉(zhuǎn)譯器轉(zhuǎn)譯的該指令子集,不一定要對應(yīng)任何正存在的x86ISA處理器;以及,由ARM程序設(shè)計(jì)者的手冊定義、且由硬件指令轉(zhuǎn)譯器轉(zhuǎn)譯的該指令子集,不一定要對應(yīng)任何正存在的ARMISA處理器。執(zhí)行管線為一多個(gè)階段的序列,其中各階段包含硬件邏輯及一硬件寄存器,用以保持該硬件邏輯的輸出,以依據(jù)微處理器的一時(shí)鐘序號,提供至該序列的下一階段。該執(zhí)行管線可包含多個(gè)如此的階段的序列,也就是指,多個(gè)轉(zhuǎn)線。該執(zhí)行管線接收輸入微指令,然后回應(yīng)地執(zhí)行由微指令規(guī)范的運(yùn)算,以輸出結(jié)果。各種的管線的該硬件邏輯執(zhí)行由微指令規(guī)范的運(yùn)算,其可包括,但不局限于,算數(shù)、邏輯、記載存取、比較、測試及分歧分析,并且在格式化上數(shù)據(jù)上執(zhí)行運(yùn)算,其可包括,但不局限于,整數(shù)、浮點(diǎn)數(shù)、字符、二進(jìn)碼十進(jìn)數(shù)(BCD)及壓縮。該執(zhí)行管線執(zhí)行微指令,其實(shí)行一ISA指令(例如x86及ARM),以產(chǎn)生由ISA指令定義的結(jié)果。該執(zhí)行管線區(qū)別于硬件指令轉(zhuǎn)譯器;較特別地是,該硬件指令轉(zhuǎn)譯器產(chǎn)生這些實(shí)行微指令,而執(zhí)行管線執(zhí)行他們;此外,該執(zhí)行管線不產(chǎn)生這些實(shí)行微指令。指令高速緩存存儲器(instructioncache)為一隨機(jī)存取存儲裝置,位于一微處理器中,該微處理器將一ISA機(jī)器語言程序(例如x86ISA及ARMISA機(jī)器語言指令)的指令放置于該隨機(jī)存取存儲裝置中,這些指令最近從系統(tǒng)存儲器取出,并被微處理器于執(zhí)行ISA機(jī)器語言程序中執(zhí)行。較特別地是,ISA定義一指令地址寄存器,其維持下一個(gè)要執(zhí)行的ISA指令的存儲器地址(舉例而言,經(jīng)由x86ISA定義為一指令指標(biāo)(instructionpointer,IP),且經(jīng)由ARMISA定義為一程序計(jì)數(shù)器(programcounter,PC)),且當(dāng)微處理器執(zhí)行機(jī)器語言程序來控制程序的流程時(shí),微處理器更新指令地址寄存器的內(nèi)容?;谥噶畹刂芳拇嫫鞯膬?nèi)容,該ISA指令被存入高速緩存存儲器中,以為了后續(xù)能相較于從系統(tǒng)存儲器中,較快速地從指令高速緩存存儲器中取用ISA指令,下一次該機(jī)器語言程序的流程為,寄存器維持一存在于指令高速緩存存儲器中的ISA指令的存儲地址。特別地是,一指令高速緩存存儲器的存取是基于維持于指令地址寄存器(例如IP或PC)中的存儲器地址,而非僅基于由一獨(dú)取或儲存指令規(guī)范的一存儲器地址。是以,將ISA指令維持為數(shù)據(jù)的一專用數(shù)據(jù)高速緩存存儲器(例如可存在于一裝載一軟件轉(zhuǎn)譯器的系統(tǒng)的硬件部分),其只能基于一讀取/儲存地址來存取,而非基于一指令地址寄存器數(shù)值,并非是一指令高速緩存存儲器。此外,一統(tǒng)一規(guī)格高速緩存存儲器是預(yù)期涵蓋于一指令高速緩存存儲器的定義中,為了本揭示的目的,該統(tǒng)一規(guī)格高速緩存存儲器將指令及數(shù)據(jù)兩者存入高速緩存存儲器,也就是,其基于一指令地址寄存器數(shù)值以及一讀取/儲存地址來存取,而非只是基于一讀取/儲存地址。在本文中,一讀取指令為一指令,其從存儲器讀取數(shù)據(jù)至微處理器,而一儲存指令為一指令,其從微處理器寫入數(shù)據(jù)至存儲器中。微指令集為多個(gè)指令(微指令)的組合,這些指令(微指令)可被微處理器的執(zhí)行管線執(zhí)行。實(shí)施例為進(jìn)一步說明各實(shí)施例,本發(fā)明提供有附圖。這些附圖為本發(fā)明揭示內(nèi)容的一部分,其主要用以說明實(shí)施例,并可配合說明書的相關(guān)描述來解釋實(shí)施例的運(yùn)作原理。結(jié)合參考這些內(nèi)容,本領(lǐng)域的技術(shù)人員應(yīng)能理解其他可能的實(shí)施方式以及本發(fā)明的優(yōu)點(diǎn)。因此,本發(fā)明不限于以下顯示及描述的實(shí)施例,然應(yīng)授予符合下述操作原理及新穎特征的最廣范圍。本說明書揭示一種微處理器的實(shí)施例,可由硬件分別將x86以及ARMISA指令轉(zhuǎn)譯為微指令來執(zhí)行x86以及ARMISA機(jī)器語言程序,其是藉由該微處理器的一個(gè)執(zhí)行管線直接執(zhí)行。該微指令由有別于x86及ARMISA的微處理器的微架構(gòu)的微指令集定義。如本發(fā)明實(shí)施例所述的微處理器執(zhí)行x86以及ARMISA機(jī)器語言程序,微處理器的硬件指令轉(zhuǎn)譯器將x86及ARM指令轉(zhuǎn)譯為微指令,且將微指令提供給微處理器的執(zhí)行管線,該執(zhí)行管線執(zhí)行該微指令,以實(shí)現(xiàn)x86及ARM指令。有利的是,微處理器執(zhí)行x86及ARM機(jī)器指令程序的速度可能相較于使用一軟件轉(zhuǎn)譯器的系統(tǒng)來得快,這是因?yàn)閳?zhí)行的微指令是為了執(zhí)行而由硬件指令轉(zhuǎn)譯器直接提供至執(zhí)行管線,而非如軟件轉(zhuǎn)譯器系統(tǒng)在執(zhí)行管線執(zhí)行之前將主機(jī)指令儲存至存儲器。參考圖1,其繪示本發(fā)明微處理器的一實(shí)施例的方塊圖。如圖I所示,微處理器100可執(zhí)行x86及ARMISA機(jī)器語言程序。微處理器100包括一指令高速緩存存儲器102、一硬件指令轉(zhuǎn)譯器104、一執(zhí)行管線112、一寄存器文件106、一存儲器子系統(tǒng)108、一指令讀取單元及轉(zhuǎn)移預(yù)測單元114、一由ARMISA定義的程序計(jì)數(shù)器(ARMISA-definedprogramcounter,ARMPC)寄存器116(以下稱ARMISA定義程序計(jì)數(shù)器)、一由x86ISA定義的指令指標(biāo)(x86ISA-definedinstructionpointer,x86IP)118(以下稱x86ISA定義指令指標(biāo))以及組態(tài)寄存器122,其中硬件指令轉(zhuǎn)譯器104用以接收來自指令高速緩存存儲器102的x86ISA指令及ARMISA指令124,并將x86ISA指令及ARMISA指令124轉(zhuǎn)譯為微指令126,執(zhí)行管線112用以接收來自硬件指令轉(zhuǎn)譯器104的微指令126,并執(zhí)行微指令126以產(chǎn)生微指令結(jié)果128,微指令結(jié)果128傳送回執(zhí)行管線112,以作為運(yùn)算域,寄存器文件106及存儲器子系統(tǒng)108中的每一個(gè)提供運(yùn)算域至執(zhí)行管線112,且接收微指令結(jié)果128,指令讀取單元及轉(zhuǎn)移預(yù)測單元114提供一讀取地址134至指令高速緩存存儲器,ARMPC116及x86IP118以微指令結(jié)果128來更新,且其內(nèi)容提供至指令讀取單元及轉(zhuǎn)移預(yù)測器114,組態(tài)寄存器122提供一指令模式指標(biāo)132及一環(huán)境模式指標(biāo)136至硬件指令轉(zhuǎn)譯器104及指令讀取單元及轉(zhuǎn)移預(yù)測器114,且其是由微指令結(jié)果128更新。當(dāng)微處理器100執(zhí)行x86ISA及ARMISA機(jī)器語言指令,其根據(jù)程序的流程讀取了來自系統(tǒng)存儲器(圖未示)的指令。微處理器100用以儲存指令高速緩存存儲器102中最新讀取的x86ISA及ARMISA機(jī)器語言指令。指令讀取單元及轉(zhuǎn)移預(yù)測器114用以產(chǎn)生一讀取地址134,由此以讀取來自系統(tǒng)存儲器中的x86ISA或ARMISA指令位124的一數(shù)據(jù)段(block)。指令高速緩存存儲器102用以在該ISA指令位124命中進(jìn)該指令高速緩存存儲器102時(shí)將位于讀取地址134的x86ISA或ARMISA指令位124的數(shù)據(jù)段提供給硬件指令轉(zhuǎn)譯器104,否則由系統(tǒng)存儲器讀取ISA指令位124。指令讀取單元及轉(zhuǎn)移預(yù)測器114用以根據(jù)ARMPC116及x86IP118中的值來產(chǎn)生讀取地址134。更具體體地來說,指令讀取單元及轉(zhuǎn)移預(yù)測器114在讀取地址寄存器中保有一讀取地址。每當(dāng)指令讀取單元及轉(zhuǎn)移預(yù)測器114讀取ISA指令位124中的一個(gè)新的數(shù)據(jù)段,指令讀取單元及轉(zhuǎn)移預(yù)測器114以該數(shù)據(jù)段的大小更新讀取地址,并且持續(xù)以這種方式直到控制流程事件(controlflowevent)發(fā)生??刂屏鞒淌录ㄒ粋€(gè)異常的產(chǎn)生、指令讀取單元及轉(zhuǎn)移預(yù)測器114所產(chǎn)生的一預(yù)測以及執(zhí)行管線112的一更新,其中一個(gè)取得的轉(zhuǎn)移出現(xiàn)在讀取的數(shù)據(jù)段中,該更新是藉由執(zhí)行管線112傳送至ARMPC116及X86IP118,其對應(yīng)至一取得的執(zhí)行轉(zhuǎn)移指令,該執(zhí)行轉(zhuǎn)移指令并非由指令讀取單元及轉(zhuǎn)移預(yù)測器114所預(yù)測取得。對應(yīng)于一控制流程事件,指令讀取單元及轉(zhuǎn)移預(yù)測器114將讀取地址分別更新為異常操作裝置地址、預(yù)測目標(biāo)地址或執(zhí)行目標(biāo)地址。另一種實(shí)施例為,指令高速緩存存儲器102是一個(gè)聯(lián)合高速緩存存儲器,其儲存ISA指令124及數(shù)據(jù)。值得注意的是,在聯(lián)合高速緩存存儲器的實(shí)施例中,盡管聯(lián)合高速緩存存儲器的存取可能根據(jù)一個(gè)載入/儲存地址來讀取/寫入數(shù)據(jù),當(dāng)微處理器讀取來自聯(lián)合高速緩存存儲器的ISA指令124,聯(lián)合高速緩存存儲器的存取是依據(jù)ARMPC116以及x86IP118的值,而非一載入/儲存地址。指令高速緩存存儲器102可為一個(gè)隨機(jī)存取存儲器(randomaccessmemory,RAM)裝置。指令模式指標(biāo)132描述的是關(guān)于微處理器100是否正在讀取、格式化/解碼以及轉(zhuǎn)譯x86ISA或ARMISA指令124為微指令126的指標(biāo)。此外,執(zhí)行管線112及存儲器子系統(tǒng)108接收指令模式指標(biāo)132,盡管為了微指令集中的相對小的子集,其影響執(zhí)行該微指令126。x86IP118維持執(zhí)行下一個(gè)x86ISA指令124的存儲器地址,且ARMPC116維持執(zhí)行下一個(gè)ARMISA指令124的存儲器體地址。為了控制程序的流程,當(dāng)微處理器100分別執(zhí)行x86及ARM機(jī)器語言程序時(shí),微處理器100更新x86IP118以及ARMPC116,更新至下一序列指令、轉(zhuǎn)移地址指令的目標(biāo)地址或異常處理器地址。當(dāng)微處理器100執(zhí)行x86及ARMISA機(jī)器語言程序的指令時(shí),其讀取來自系統(tǒng)存儲器的機(jī)器語言程序的ISA指令,以ISA指令取代指令高速緩存存儲器102中最近讀取的指令,并執(zhí)行該ISA指令。指令讀取單元及轉(zhuǎn)移預(yù)測器114依據(jù)指令模式指標(biāo)132指示的處理器100是否正在讀取x86或ARM模式中的ISA指令124,而根據(jù)x86IP118或ARMPC116的值產(chǎn)生讀取地址134。根據(jù)一實(shí)施例,x86IP118及ARMPC116可如同一共享硬件指令地址寄存器,其提供其內(nèi)容至指令讀取單元及轉(zhuǎn)移預(yù)測器114,且由執(zhí)行管線112根據(jù)x86或ARM的語義(semantics)來更新其內(nèi)容,該語意是基于指令模式指標(biāo)132是否分別地指示x86或ARM。環(huán)境模式指標(biāo)136描述的是關(guān)于微處理器100是否將x86ISA或ARMISA語意運(yùn)用于微處理器100運(yùn)算的不同執(zhí)行環(huán)境方面,例如虛擬存儲器、異常、高速緩存器存儲器控制以及全球執(zhí)行時(shí)間保護(hù)(globalexecution-timeprotection)。如此,指令模式指標(biāo)132及環(huán)境模式指標(biāo)136—同產(chǎn)生執(zhí)行的多個(gè)模式。在第一模式中,指令模式指標(biāo)132及環(huán)境模式指標(biāo)136皆指示x86ISA,微處理器100如同標(biāo)準(zhǔn)的x86ISA處理器般的運(yùn)作。在第二模式中,指令模式指標(biāo)132及環(huán)境模式指標(biāo)136皆指示ARMISA,微處理器100如同標(biāo)準(zhǔn)的ARMISA處理器般運(yùn)作。在第三模式中,指令模式指標(biāo)132指示x86ISA,然而環(huán)境模式指標(biāo)136指示ARMISA,可能有利于在ARM運(yùn)算系統(tǒng)或超管理器(hypervisor)的控制下執(zhí)行使用者模式x86機(jī)器語言程序。相反地,在第四模式中,指令模式指標(biāo)132指示ARMISA,然而環(huán)境模式指標(biāo)136指示x86ISA,可能有利于在x86運(yùn)算系統(tǒng)或超管理器(hypervisor)的控制下執(zhí)行使用者模式ARM機(jī)器語言程序。指令模式指標(biāo)132及環(huán)境模式指標(biāo)136值在重置時(shí)被初始化地決定。在一實(shí)施例中,初始的值編碼為微編碼常數(shù),但可能由布林組態(tài)引信和/或微編碼路徑修正。另一實(shí)施例中,初始值由一外部輸入(externalinput)提供至微處理器100。在一實(shí)施例中,環(huán)境模式指標(biāo)136可能僅在由一個(gè)重置至ARM(reset-to-ARM)124或重置至x86(reset-to-x86)指令124(詳述如圖6)重置后改變,也就是說,環(huán)境模式指標(biāo)136可能在微處理器100的標(biāo)準(zhǔn)運(yùn)算期間改變,而不需要重置微處理器100,或是藉由一標(biāo)準(zhǔn)重置或由reset-to_x86或reset-to-ARM指令124。硬件指令轉(zhuǎn)譯器104接收x86ISA及ARMISA機(jī)器語言指令124以作為輸入,且對應(yīng)地提供一個(gè)或多個(gè)微指令126以作為輸出,其實(shí)現(xiàn)了x86ISA或ARMISA指令124。一個(gè)或多個(gè)來自執(zhí)行管線112的微指令126的聚集執(zhí)行(collectiveexecution)實(shí)現(xiàn)了x86ISA或ARMISA指令124。聚集執(zhí)行在由x86ISA或ARMISA指令124規(guī)范的輸入實(shí)現(xiàn)了由x86ISA或ARMISA指令124規(guī)范的運(yùn)算,以產(chǎn)生由x86ISA或ARMISA指令124定義的結(jié)果。如此,硬件指令轉(zhuǎn)譯器104將x86ISA或ARMISA指令124轉(zhuǎn)譯為一個(gè)或多個(gè)微指令126。硬件指令轉(zhuǎn)譯器104包含一個(gè)預(yù)定安排的晶體管的集合,用以將x86ISA及ARMISA機(jī)器語言指令124轉(zhuǎn)譯為微指令126。硬件指令轉(zhuǎn)譯器104亦可包括布林邏輯門(即圖2中的簡單指令轉(zhuǎn)譯器204),其用以產(chǎn)生微指令126。根據(jù)一實(shí)施例,硬件指令轉(zhuǎn)譯器104亦可包括一微編碼只讀存儲器(miCTocodeROM)(即圖2中的復(fù)雜指令轉(zhuǎn)譯器206中的元件234),硬件指令轉(zhuǎn)譯器104利用微編碼只讀存儲器234因ISA指令124產(chǎn)生微指令126,其詳述對應(yīng)圖2所述。較佳地,硬件指令轉(zhuǎn)譯器104不需要轉(zhuǎn)譯由x86程序設(shè)計(jì)者手冊及ARM程序設(shè)計(jì)者手冊定義的ISA指令124的所有指令集,而是將ISA指令124的一子集轉(zhuǎn)譯。更具體地來說,硬件指令轉(zhuǎn)譯器104轉(zhuǎn)譯的x86程序設(shè)計(jì)者手冊定義的ISA指令124的子集并不需要對應(yīng)至Intel開發(fā)的x86ISA處理器,且硬件指令轉(zhuǎn)譯器104轉(zhuǎn)譯的ARM程序設(shè)計(jì)者手冊定義的ISA指令124并不需要對應(yīng)至ARM公司開發(fā)的ISA處理器。有關(guān)執(zhí)行x86ISA或ARMISA指令124的一個(gè)或多個(gè)微指令126可由硬件指令轉(zhuǎn)譯器104—次或依序地提供至執(zhí)行管線112。有利的是,硬件指令轉(zhuǎn)譯器104直接地將微指令126提供至執(zhí)行管線112,而不需要將他們儲存至存儲器。根據(jù)一實(shí)施例,圖I的微處理器100,當(dāng)微處理器100執(zhí)行x86ISA或ARMISA指令124時(shí),微處理器100每一次執(zhí)行x86ISA或ARMISA指令124時(shí),硬件指令轉(zhuǎn)譯器104將x86或ARM機(jī)器語言指令124轉(zhuǎn)譯為一個(gè)或多個(gè)微指令126。然而另一個(gè)實(shí)施例,如圖8所示,微處理器100采用一微指令高速緩存存儲器,以避免微處理器100每一次執(zhí)行x86ISA或ARMISA指令124時(shí),發(fā)生再轉(zhuǎn)譯(re-translation)。硬件指令轉(zhuǎn)譯器104的實(shí)施例將詳述于圖2。執(zhí)行管線112用已執(zhí)行由硬件指令轉(zhuǎn)譯器104所提供的微指令126。廣義地來說,執(zhí)行管線112為一個(gè)一般用途高速微指令處理器,而微處理器100的其他部分,例如硬件指令轉(zhuǎn)譯器104用以執(zhí)行大量X86/ARM規(guī)范的功能,盡管該功能如本文所述,理論上是由執(zhí)行管線112所執(zhí)行。根據(jù)一實(shí)施例,執(zhí)行管線112用以執(zhí)行來自硬件指令轉(zhuǎn)譯器104的寄存器重新命名、超標(biāo)問題(superscalarissue)以及微指令126的故障執(zhí)行。執(zhí)行管線112將對照圖4詳述。微處理器100的微架構(gòu)包括(I)微指令集;(2)以微指令集的微指令126存取的資源集,其為x86ISA及ARMISA資源的超集合(superset);以及(3)異常集,該異常集是由微處理器100定義,并對應(yīng)微指令126的異常所產(chǎn)生,其為x86ISA及ARMISA異常的一超集合。微架構(gòu)有別于x86ISA及ARMISA。更具體地來說,微指令集在許多方面有別于x86ISA及ARMISA指令集。第一,微指令集的微指令指示執(zhí)行管線112執(zhí)行的運(yùn)算集與x86ISA及ARMISA指令集的指令指示微處理器執(zhí)行的運(yùn)算集之間沒有一對一的對應(yīng)。盡管許多運(yùn)算可能一樣,由微指令規(guī)范的一些運(yùn)算并非由x86ISA和/或ARMISA指令集所規(guī)范。相反地,由x86ISA和/或ARMISA指令集所規(guī)范的一些運(yùn)算并非由微指令集所規(guī)范。第二微指令集的微指令的編碼有別于x86ISA及ARMISA指令集的編碼。也就是說,盡管微指令集以及x86ISA及ARMISA指令集規(guī)范的運(yùn)算有許多相同,例如加、位移、載入、回傳,微指令集與x86ISA或ARMISA指令集之間的二進(jìn)制運(yùn)算碼值至運(yùn)算(value-to-operation)的映射(mapping)不具有一對一的對應(yīng)。如果二進(jìn)制運(yùn)算碼值到運(yùn)算映射在微指令集及x86ISA或ARMISA指令集中恰巧是相同的,一般來說,它們之間仍不具有一對一的對應(yīng)。微指令集的微指令的字段與x86ISA或ARMISA指令集的指令的字段不具有一對一的對應(yīng)。整體來說,微處理器100可執(zhí)行x86ISA及ARMISA機(jī)器語言程序指令。然而,執(zhí)行管線112不能執(zhí)行x86ISA及ARMISA機(jī)器語言程序指令本身,而能執(zhí)行微處理器100的微架構(gòu)的微指令集的微指令126,也就是將x86ISA及ARMISA指令轉(zhuǎn)譯。然而,盡管為架構(gòu)有別于x86ISA及ARMISA,另一實(shí)施例中,使用者可接觸到微指令集以及其他微架構(gòu)規(guī)范的資源,也就是說,在另一個(gè)實(shí)施例中,微架構(gòu)可有效地作為第三ISA,此外,微處理器100可執(zhí)行x86ISA及ARMISA機(jī)器語言程序。下列表I描述根據(jù)本發(fā)明的微處理器100的一實(shí)施例的微指令集的微指令126的一些字段。權(quán)利要求1.ー種微處理器,包含一硬件指令轉(zhuǎn)譯器,用以將多個(gè)指令轉(zhuǎn)譯為多個(gè)微指令,這些指令包含多個(gè)X86指令集架構(gòu)機(jī)器語言程序以及多個(gè)ARM指令集架構(gòu)機(jī)器語言程序,這些微指令由該微處理器的ー微指令集定義,其中這些微指令的編碼方式有別于這些指令的編碼方式,這些指令由這些x86指令集架構(gòu)及ARM指令集架構(gòu)的指令集所定義;以及ー執(zhí)行管線,耦接該硬件指令轉(zhuǎn)譯器,其中該執(zhí)行管線執(zhí)行這些微指令,以產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果;其中,該硬件指令轉(zhuǎn)譯器直接提供這些微指令至該執(zhí)行管線以供執(zhí)行,來產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的該結(jié)果。2.如權(quán)利要求I所述的微處理器,其中由該硬件指令轉(zhuǎn)譯器提供給該執(zhí)行管線的這些微指令有別于該執(zhí)行管線執(zhí)行這些微指令所產(chǎn)生的結(jié)果。3.如權(quán)利要求I所述的微處理器,其中這些微指令是由該硬件指令轉(zhuǎn)譯器提供給該執(zhí)行管線來執(zhí)行,而不是該執(zhí)行管線的結(jié)果。4.如權(quán)利要求I所述的微處理器,其中該微處理器每一次執(zhí)行這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令的其中之ー時(shí),該硬件指令轉(zhuǎn)譯器將該指令集架構(gòu)指令轉(zhuǎn)譯為這些微指令,以供該執(zhí)行管線執(zhí)行。5.如權(quán)利要求I所述的微處理器,其中該硬件指令轉(zhuǎn)譯器還包含ー微指令高速緩存存儲器,用以儲存這些微指令至高速緩存存儲器;其中當(dāng)這些微指令存在于該微指令高速緩存存儲器時(shí),該執(zhí)行管線從該微指令高速緩存存儲器接收這些微指令,而非從該硬件指令轉(zhuǎn)譯器接收。6.如權(quán)利要求I所述的微處理器,其中該執(zhí)行管線不能直接執(zhí)行這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令。7.如權(quán)利要求I所述的微處理器,還包含一指令模式指標(biāo),用以指示該微處理是否正在讀取及轉(zhuǎn)譯這些x86指令集架構(gòu)或ARM指令集架構(gòu)指令并執(zhí)行從該微處理轉(zhuǎn)譯來的這些微指令。8.如權(quán)利要求I所述的微處理器,其中該硬件指令轉(zhuǎn)譯器包含一布林門的第一合成邏輯區(qū)塊,用以將這些x86指令集架構(gòu)指令轉(zhuǎn)譯為這些微指令;及一布林門的第二合成邏輯區(qū)塊,用以將這些ARM指令集架構(gòu)指令轉(zhuǎn)譯為這些微指令。9.如權(quán)利要求I所述的微處理器,其中該硬件指令轉(zhuǎn)譯器接收一指令模式輸入,藉由該指令模式輸入確認(rèn)這些指令集架構(gòu)指令為x86指令集架構(gòu)或ARM指令集架構(gòu)指令。10.如權(quán)利要求9所述的微處理器,其中該硬件指令轉(zhuǎn)譯器包含多個(gè)布林邏輯門,包含多個(gè)晶體管,這些布林邏輯門用以依據(jù)該指令模式輸入,將作為這些x86指令集架構(gòu)指令或ARM指令集架構(gòu)指令的這些指令集架構(gòu)指令轉(zhuǎn)譯成這些微指令。11.如權(quán)利要求10所述的微處理器,其中這些布林邏輯門提供因應(yīng)這些x86指令集架構(gòu)或ARM指令集架構(gòu)指令中的一第一子集這些微指令,其中該硬件指令轉(zhuǎn)譯器包含一只讀存儲器,制造于一半導(dǎo)體芯片中,該半導(dǎo)體芯片包含該微處理器,其中該只讀存儲器用以提供多個(gè)只讀存儲器指令,這些只讀存儲器指令用以產(chǎn)生因應(yīng)這些x86指令集架構(gòu)或ARM指令集架構(gòu)指令中的一第二子集的這些微指令。12.如權(quán)利要求I所述的微處理器,其中該微處理器包含至少第一及第ニ處理核心,每ー個(gè)處理核心包含該硬件指令轉(zhuǎn)換器及該執(zhí)行管線的ー個(gè)。13.—種運(yùn)作微處理器的方法,該微處理器包含一指標(biāo),該指標(biāo)指示x86指令集架構(gòu)或ARM指令集架構(gòu),該方法包含確定該指標(biāo)是指示該x86指令集架構(gòu)或是ARM指令集架構(gòu)的何者;當(dāng)該指標(biāo)指示為該x86指令集架構(gòu)時(shí),依據(jù)該x86指令集架構(gòu)將多個(gè)機(jī)器語言指令轉(zhuǎn)譯為多個(gè)微指令,當(dāng)該指標(biāo)指示為該ARM指令集架構(gòu)時(shí),依據(jù)該ARM指令集架構(gòu)將多個(gè)機(jī)器語言指令轉(zhuǎn)譯為多個(gè)微指令,其中這些微指令是由該微處理器的ー微指令集所定義,且這些微指令的編碼方式有別于該x86指令集架構(gòu)或是ARM指令集架構(gòu)的這些指令集所定義的這些指令的編碼方式,其中該轉(zhuǎn)譯步驟是由該微處理器的一硬件指令轉(zhuǎn)譯器實(shí)行;以及當(dāng)該指標(biāo)指示為該x86指令集架構(gòu)時(shí),執(zhí)行這些微指令,以產(chǎn)生由該x86指令集架構(gòu)所定義的結(jié)果,當(dāng)該指標(biāo)指示為該ARM指令集架構(gòu)時(shí),執(zhí)行這些微指令,以產(chǎn)生由該ARM指令集架構(gòu)所定義的結(jié)果,其中該執(zhí)行步驟是由該微處理器的ー執(zhí)行管線實(shí)行,該執(zhí)行管線耦接于該硬件指令轉(zhuǎn)譯器。14.如權(quán)利要求13所述的運(yùn)作微處理器的方法,還包括直接從該硬件指令轉(zhuǎn)譯器提供這些微指令至該執(zhí)行管線以供執(zhí)行。15.如權(quán)利要求13所述的運(yùn)作微處理器的方法,其中由該硬件指令轉(zhuǎn)譯器所轉(zhuǎn)譯的這些微指令有別于該執(zhí)行管線執(zhí)行這些微指令所產(chǎn)生的結(jié)果。16.如權(quán)利要求13所述的運(yùn)作微處理器的方法,其中該執(zhí)行步驟所產(chǎn)生的這些結(jié)果,并非該硬件指令轉(zhuǎn)譯器所轉(zhuǎn)譯的這些微指令。17.如權(quán)利要求13所述的運(yùn)作微處理器的方法,其中該微處理器每一次實(shí)行這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令的其中之一個(gè)時(shí),該硬件指令轉(zhuǎn)譯器實(shí)行該轉(zhuǎn)譯步驟,而該執(zhí)行管線實(shí)行該執(zhí)行步驟。18.ー種微處理器,包含多個(gè)寄存器,用以維持該處理器的一架構(gòu)狀態(tài);一指標(biāo),用以指示該微處理器的ー啟動指令集架構(gòu)為該x86指令集架構(gòu)或該ARM指令集架構(gòu);一硬件指令轉(zhuǎn)譯器,用以將多個(gè)x86指令集架構(gòu)指令及多個(gè)ARM指令集架構(gòu)指令轉(zhuǎn)譯為多個(gè)微指令,其中該硬件指令轉(zhuǎn)譯器依據(jù)該啟動指令集架構(gòu)的指示,轉(zhuǎn)譯這些初始指令集架構(gòu)指令,這些初始指令集架構(gòu)指令是該微處理器在接收一重置訊號后,從架構(gòu)型存儲空間讀取出;ー執(zhí)行管線,耦接該硬件指令轉(zhuǎn)譯器,該執(zhí)行管線用以執(zhí)行這些微處理器,以產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果;以及其中,在該微處理器讀取這些初始指令集架構(gòu)指令前,該微處理器因應(yīng)該重置訊號,初始化位于這些寄存器中且由該啟動指令集架構(gòu)定義的架構(gòu)狀態(tài)。19.如權(quán)利要求18所述的微處理器,其中該指標(biāo)包含位于該微處理器的微編碼中的一預(yù)設(shè)值。20.如權(quán)利要求19所述的微處理器,還包含一引信,可被燒斷以反轉(zhuǎn)該微編碼中的預(yù)設(shè)值。21.如權(quán)利要求19所述的微處理器,其中在該處理器被重置后,且在該微處理器讀取架構(gòu)型存儲空間中的其初始指令集架構(gòu)指令前,該微編碼中的該預(yù)設(shè)值可由ー微編碼插線修改。22.如權(quán)利要求18所述的微處理器,其中該指標(biāo)包含位于該微處理器的一暫存中的一位,該位具有因應(yīng)該重置訊號的ー預(yù)設(shè)值。23.如權(quán)利要求18所述的微處理器,其中該指標(biāo)包含傳送至該微處理器的一外部輸入。24.如權(quán)利要求18所述的微處理器,其中該微處理器因應(yīng)該重置訊號,于該啟動指令集架構(gòu)定義的一地址上,從架構(gòu)型存儲空間讀取該初始指令集架構(gòu)指令。25.一種運(yùn)作微處理器的方法,包含檢測ー微處理器的一被發(fā)送的重置訊號,其中該檢測步驟是由該微處理器實(shí)行;因應(yīng)該檢測步驟來決定該微處理器的一被發(fā)送的重置訊號,于該x86指令指令集架構(gòu)以及該ARM指令集架構(gòu)之中,該微處理器的一指標(biāo)所指示的是該微處理器的ー啟動指令集架構(gòu),其中該決定步驟是由該微處理器實(shí)行;初始化由該啟動指令集架構(gòu)定義的該微處理器的一架構(gòu)狀態(tài),其中該初始化步驟是由該微處理器實(shí)行;轉(zhuǎn)譯成多個(gè)微指令,該微處理器在這些初始指令集架構(gòu)指令重置后,從架構(gòu)型存儲空間讀取這些初始指令集架構(gòu)指令,其中該轉(zhuǎn)譯步驟是由該微處理器的一硬件指令轉(zhuǎn)譯器實(shí)行;以及執(zhí)行這些微指令,以產(chǎn)生由該初始指令集架構(gòu)定義的結(jié)果,其中該執(zhí)行步驟是由該微處理器的ー執(zhí)行管線實(shí)行,該執(zhí)行管線耦接于該硬件指令轉(zhuǎn)譯器。26.如權(quán)利要求25所述的運(yùn)作微處理器的方法,還包含在位于該啟動指令集架構(gòu)定義的一地址上重置后,讀取這些初始指令集架構(gòu)指令。27.ー種微處理器,包含一指令高速緩存存儲器,用以將多個(gè)指令儲存至高速緩存存儲器,這些指令包含多個(gè)x86指令集架構(gòu)機(jī)器語言程序以及多個(gè)ARM指令集架構(gòu)機(jī)器語言程序;一硬件指令轉(zhuǎn)譯器,耦接該指令高速緩存存儲器,其中該硬件指令轉(zhuǎn)譯器用以從該指令高速緩存存儲器接收這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令,并因應(yīng)地將這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令轉(zhuǎn)譯成多個(gè)微指令,其中這些微指令的編碼方式有別于這些指令的編碼方式,這些指令由這些x86指令集架構(gòu)及ARM指令集架構(gòu)的指令集所定義;以及ー執(zhí)行管線,耦接于該硬件指令轉(zhuǎn)譯器,其中該執(zhí)行管線執(zhí)行這些微指令,以產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果。28.如權(quán)利要求27所述的微處理器,還包含一指令模式指標(biāo),用以指示出該x86指令集架構(gòu)或ARM指令集架構(gòu);以及一指令地址寄存器,用以維持一存儲器地址,該存儲器地址與下一個(gè)要實(shí)行的指令集架構(gòu)機(jī)器語言程序指令相關(guān);其中該微處理器依據(jù)由該指令模式指標(biāo)指示出的該指令集架構(gòu)的語意來更新該指令地址寄存器;其中該微處理器依據(jù)維持于該指令模式指標(biāo)中的該存儲器地址,從該指令高速緩存存儲器中讀取這些指令集架構(gòu)指令。29.如權(quán)利要求28所述的微處理器,其中該硬件指令轉(zhuǎn)譯器包含一只讀存儲器,用以維持多個(gè)只讀存儲器指令,這些只讀存儲器指令用以產(chǎn)生這些微指令的至少一部份,以提供至該執(zhí)行管線;以及ー微指令地址寄存器,用以維持一地址,該地址指標(biāo)至該只讀存儲器中的下一個(gè)該只讀存儲器指令,其中該微指令地址寄存器有別于該架構(gòu)型指令地址寄存器。30.ー種微處理器,包含一硬件指令轉(zhuǎn)譯器,用以將多個(gè)指令轉(zhuǎn)譯為多個(gè)微指令,這些指令包含多個(gè)x86指令集架構(gòu)機(jī)器語言程序以及多個(gè)ARM指令集架構(gòu)機(jī)器語言程序,這些微指令由該微處理器的ー微指令集定義,其中這些微指令的編碼方式有別于這些指令的編碼方式,這些指令由該x86指令集架構(gòu)及ARM指令集架構(gòu)的指令集所定義;以及ー執(zhí)行管線,耦接于該硬件指令轉(zhuǎn)譯器,其中該執(zhí)行管線執(zhí)行這些微指令,以產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果;其中該微處理器每一次實(shí)行這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令的其中之一吋,該硬件指令轉(zhuǎn)譯器將該指令集架構(gòu)指令轉(zhuǎn)譯為這些微指令,以提供該執(zhí)行管線執(zhí)行。31.ー種微處理器,包含一硬件指令轉(zhuǎn)譯器,用以將多個(gè)指令轉(zhuǎn)譯為多個(gè)微指令,這些指令包含多個(gè)x86指令集架構(gòu)機(jī)器語言程序以及多個(gè)ARM指令集架構(gòu)機(jī)器語言程序,這些微指令由該微處理器的ー微指令集定義,其中這些微指令的編碼方式有別于這些指令的編碼方式,這些指令由該x86指令集架構(gòu)及ARM指令集架構(gòu)的指令集所定義;以及ー執(zhí)行管線,耦接該硬件指令轉(zhuǎn)譯器,其中該執(zhí)行管線執(zhí)行該微些指令,以產(chǎn)生由這些x86指令集架構(gòu)及ARM指令集架構(gòu)指令所定義的結(jié)果;其中由該硬件指令轉(zhuǎn)譯器提供給該執(zhí)行管線的這些微指令有別于該執(zhí)行管線執(zhí)行這些微指令所產(chǎn)生的結(jié)果。全文摘要可執(zhí)行x86指令集及ARM指令集指令的微處理器及其運(yùn)作方法。微處理器包含硬件指令轉(zhuǎn)譯器,將x86指令集架構(gòu)及ARM指令集架構(gòu)機(jī)器語言程序指令轉(zhuǎn)譯成微指令,其編碼方式有別于x86指令集架構(gòu)及ARM指令。執(zhí)行管線執(zhí)行微指令,產(chǎn)生由x86指令集架構(gòu)/ARM定義的結(jié)果。微指令有別于執(zhí)行管線執(zhí)行微指令所產(chǎn)生的結(jié)果。轉(zhuǎn)譯器直接提供微指令至執(zhí)行管線。微處理器每一次執(zhí)行x86指令集架構(gòu)及ARM指令集架構(gòu)指令的其中之一時(shí),轉(zhuǎn)譯器將它轉(zhuǎn)譯為微指令。指標(biāo)指示x86或ARM何者為一啟動指令集架構(gòu)。重置后,微處理器初始化其架構(gòu)狀態(tài),從重置地址讀取其第一指令,依據(jù)啟動指令集架構(gòu)的定義,將第一指令全部轉(zhuǎn)譯。指令高速緩存存儲器將x86及ARM指令存入高速緩存存儲器,且提供給轉(zhuǎn)譯器。文檔編號G06F9/30GK102707926SQ20121010428公開日2012年10月3日申請日期2012年4月9日優(yōu)先權(quán)日2011年4月7日發(fā)明者G·葛蘭·亨利,泰瑞·派克斯,羅德尼·E·虎克申請人:威盛電子股份有限公司