欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

具有條件指令的微處理器及其處理方法與流程

文檔序號(hào):12891283閱讀:337來(lái)源:國(guó)知局
具有條件指令的微處理器及其處理方法本申請(qǐng)為申請(qǐng)日為2012年4月9日、申請(qǐng)?zhí)枮?01210102141.5的發(fā)明名稱為“具有條件指令的微處理器及其處理方法”的申請(qǐng)案的分案申請(qǐng)。
技術(shù)領(lǐng)域
本發(fā)明是關(guān)于微處理器的
技術(shù)領(lǐng)域
,特別是關(guān)于在指令集中具有條件指令的微處理器。
背景技術(shù)
:由IntelCorporationofSantaClara,California開(kāi)發(fā)出來(lái)的x86處理器架構(gòu)以及由ARMLtd.ofCambridge,UK開(kāi)發(fā)出來(lái)的進(jìn)階精簡(jiǎn)指令集機(jī)器(advancedriscmachines,ARM)架構(gòu)是計(jì)算機(jī)領(lǐng)域中兩種廣為人知的處理器架構(gòu)。許多使用ARM或x86處理器的計(jì)算機(jī)系統(tǒng)已經(jīng)出現(xiàn),并且,對(duì)于此計(jì)算機(jī)系統(tǒng)的需求正在快速成長(zhǎng)?,F(xiàn)今,ARM架構(gòu)處理核心是主宰低功耗、低價(jià)位的計(jì)算機(jī)市場(chǎng),例如手機(jī)、手持式電子產(chǎn)品、平板計(jì)算機(jī)、網(wǎng)絡(luò)路由器與集線器、機(jī)上盒等。舉例來(lái)說(shuō),蘋(píng)果iPhone與iPad主要的處理能力即是由ARM架構(gòu)的處理核心提供。另一方面,x86架構(gòu)處理器則是主宰需要高效能的高價(jià)位市場(chǎng),例如膝上計(jì)算機(jī)、桌上型計(jì)算機(jī)與服務(wù)器等。然而,隨著ARM核心效能的提升,以及某些x86處理器在功耗與成本的改善,前述低價(jià)位與高價(jià)位市場(chǎng)的界線逐漸模糊。在移動(dòng)運(yùn)算市場(chǎng),如智能型手機(jī),這兩種架構(gòu)已經(jīng)開(kāi)始激烈競(jìng)爭(zhēng)。在膝上計(jì)算機(jī)、桌上型計(jì)算機(jī)與服務(wù)器市場(chǎng),可以預(yù)期這兩種架構(gòu)將會(huì)有更頻繁的競(jìng)爭(zhēng)。前述競(jìng)爭(zhēng)態(tài)勢(shì)使得計(jì)算機(jī)裝置制造業(yè)者與消費(fèi)者陷入兩難,因無(wú)從判斷哪一個(gè)架構(gòu)將會(huì)主宰市場(chǎng),更精確來(lái)說(shuō),無(wú)法判定哪一種架構(gòu)的軟件開(kāi)發(fā)商將會(huì)開(kāi)發(fā)更多軟件。舉例來(lái)說(shuō),一些每月或每年會(huì)定期購(gòu)買(mǎi)大量計(jì)算機(jī)系統(tǒng)的消費(fèi)個(gè)體,基于成本效率的考慮,例如大量采購(gòu)的價(jià)格優(yōu)惠與系統(tǒng)維修的簡(jiǎn)化等,會(huì)傾向于購(gòu)買(mǎi)具有相同系統(tǒng)配置設(shè)定的計(jì)算機(jī)系統(tǒng)。然而,這些大型消費(fèi)個(gè)體中的使用者群體,對(duì)于這些具有相同系統(tǒng)配置設(shè)定的計(jì)算機(jī)系統(tǒng),往往有各種各樣的運(yùn)算需求。具體來(lái)說(shuō),部分使用者的需求是希望能夠在ARM架構(gòu)處理器上執(zhí)行程序,其它部分使用者的需求是希望能夠在x86架構(gòu)處理器上執(zhí)行程序,甚至有部分使用者希望能夠同時(shí)在兩種架構(gòu)上執(zhí)行程序。此外,新的、預(yù)期外的運(yùn)算需求也可能出現(xiàn)而需要使用另一種架構(gòu)。在這些情況下,這些大型個(gè)體所投入的部分資金就變成浪費(fèi)。在另一個(gè)例子中,使用者具有一個(gè)重要的應(yīng)用程序只能在x86架構(gòu)上執(zhí)行,因而他購(gòu)買(mǎi)了x86架構(gòu)的計(jì)算機(jī)系統(tǒng)(反之亦然)。不過(guò),這個(gè)應(yīng)用程序的后續(xù)版本改為針對(duì)ARM架構(gòu)開(kāi)發(fā),并且優(yōu)于原本的x86版本。使用者會(huì)希望轉(zhuǎn)換架構(gòu)來(lái)執(zhí)行新版本的應(yīng)用程序,但不幸地,他已經(jīng)對(duì)于不傾向使用的架構(gòu)投入相當(dāng)成本。同樣地,使用者原本投資于只能在ARM架構(gòu)上執(zhí)行的應(yīng)用程序,但是后來(lái)也希望能夠使用針對(duì)x86架構(gòu)開(kāi)發(fā)而未見(jiàn)于ARM架構(gòu)的應(yīng)用程序或是優(yōu)于以ARM架構(gòu)開(kāi)發(fā)的應(yīng)用程序,亦會(huì)遭遇這樣的問(wèn)題,反之亦然。值得注意的是,雖然小實(shí)體或是個(gè)人投入的金額較大實(shí)體為小,然而投資損失比例可能更高。其它類似的投資損失的例子可能出現(xiàn)在各種不同的運(yùn)算市場(chǎng)中,例如由x86架構(gòu)轉(zhuǎn)換至ARM架構(gòu)或是由ARM架構(gòu)轉(zhuǎn)換至x86架構(gòu)的情況。最后,投資大量資源來(lái)開(kāi)發(fā)新產(chǎn)品的運(yùn)算裝置制造業(yè)者,例如OEM廠商,也會(huì)陷入此架構(gòu)選擇的困境。若是制造業(yè)者基于x86或ARM架構(gòu)研發(fā)制造大量產(chǎn)品,而使用者的需求突然改變,則會(huì)導(dǎo)致許多有價(jià)值的研發(fā)資源的浪費(fèi)。對(duì)于運(yùn)算裝置的制造業(yè)者與消費(fèi)者,能夠保有其投資免于受到二種架構(gòu)中何者勝出的影響是有幫助的,因而有必要提出一種解決方法讓系統(tǒng)制造業(yè)者發(fā)展出可讓使用者同時(shí)執(zhí)行x86架構(gòu)與ARM架構(gòu)的程序的運(yùn)算裝置。使系統(tǒng)能夠執(zhí)行多個(gè)指令集程序的需求由來(lái)已久,這些需求主要是因?yàn)橄M(fèi)者會(huì)投入相當(dāng)成本在舊硬件上執(zhí)行的軟件程序,而其指令集往往不兼容于新硬件。舉例來(lái)說(shuō),IBM360系統(tǒng)Model30即具有兼容于IBM1401系統(tǒng)的特征來(lái)緩和使用者由1401系統(tǒng)轉(zhuǎn)換至較高效能與改良特征的360系統(tǒng)的痛苦。Model30具有360系統(tǒng)與1401系統(tǒng)的只讀儲(chǔ)存控制(ReadOnlyStorage,ROS)),使其在輔助儲(chǔ)存空間預(yù)先存入所需信息的情況下能夠使用于1401系統(tǒng)。此外,在軟件程序以高級(jí)語(yǔ)言開(kāi)發(fā)的情況下,新的硬件開(kāi)發(fā)商幾乎沒(méi)有辦法控制為舊硬件所編譯的軟件程序,而軟件開(kāi)發(fā)商也欠缺動(dòng)力為新硬件重新編譯(re-compile)源碼,此情形尤其發(fā)生在軟件開(kāi)發(fā)商與硬件開(kāi)發(fā)商是不同個(gè)體的情況。Siberman與Ebcioglu于Computer,June1993,No.6提出的文章“AnArchitecturalFrameworkforSupportingHeterogeneousInstruction-SetArchitectures”中揭露一種利用執(zhí)行于精簡(jiǎn)指令集(RISC)、超純量架構(gòu)(superscalar)與超長(zhǎng)指令字(VLIW)架構(gòu)(下稱原生架構(gòu))的系統(tǒng)來(lái)改善既存復(fù)雜指令集(CISC)架構(gòu)(例如IBMS/390)執(zhí)行效率的技術(shù),其所揭露的系統(tǒng)包含執(zhí)行原生碼的原生引擎(nativeengine)與執(zhí)行目的碼的遷移引擎(migrantengine),并可依據(jù)轉(zhuǎn)譯軟件將目的碼(objectbode)轉(zhuǎn)譯為原生碼(nativecode)的轉(zhuǎn)譯效果,在這兩種編碼間視需要進(jìn)行轉(zhuǎn)換。請(qǐng)參照2006年5月16日公告的美國(guó)專利第7,047,394號(hào)專利案,VanDykeetal.揭露一處理器,具有用以執(zhí)行原生精簡(jiǎn)指令集(Tapestry)的程序指令的執(zhí)行管線,并利用硬件轉(zhuǎn)譯與軟件轉(zhuǎn)譯的結(jié)合,將x86程序指令轉(zhuǎn)譯為原生精簡(jiǎn)指令集的指令。Nakadaetal.提出具有ARM架構(gòu)的前端管線與FujitsuFR-V(超長(zhǎng)指令字)架構(gòu)的前端管線的異質(zhì)多線程處理器(heterogeneousSMTprocessor),ARM架構(gòu)前端管線用于非規(guī)則(irregular)軟件程序(如操作系統(tǒng)),而FujitsuFR-V(超長(zhǎng)指令字)架構(gòu)的前端管線用于多媒體應(yīng)用程序,其將一增加的超長(zhǎng)指令字隊(duì)列提供予FR-V超長(zhǎng)指令字的后端管線以維持來(lái)自前端管線的指令。請(qǐng)參照Buchty與Weib,eds,UniversitatsverlagKarlsruhe于2008年11月在FirstInternationalWorkshoponNewFrontiersinHigh-performanceandHardware-awareComputing(HipHaC’08),LakeComo,Italy,(配合MICRO-41)發(fā)表的論文集(ISBN978-3-86644-298-6)的文章“OROCHI:AMultipleInstructionSetSMTProcessor”。文中提出的方法用以降低整個(gè)系統(tǒng)在異質(zhì)系統(tǒng)單芯片(SOC)裝置(如德州儀器OMAP應(yīng)用處理器)內(nèi)所占據(jù)的空間,此異質(zhì)系統(tǒng)單芯片裝置具有一個(gè)ARM處理器核心加上一個(gè)或多個(gè)協(xié)同處理器(co-processors)(例如TMS320、多種數(shù)字信號(hào)處理器、或是多種圖形處理單元(GPUs))。這些協(xié)同處理器并不分享指令執(zhí)行資源,只是集成于同一芯片上的不同處理核心。軟件轉(zhuǎn)譯器(softwaretranslator)、或稱軟件仿真器(softwareemulator,softwaresimulator)、動(dòng)態(tài)二進(jìn)制碼轉(zhuǎn)譯器等,亦被用于支持將軟件程序在與此軟件程序架構(gòu)不同的處理器上執(zhí)行的能力。其中受歡迎的商用實(shí)例如搭配蘋(píng)果麥金塔(Macintosh)計(jì)算機(jī)的Motorola68K-to-PowerPC仿真器,其可在具有PowerPC處理器的麥金塔計(jì)算機(jī)上執(zhí)行68K程序,以及后續(xù)研發(fā)出來(lái)的PowerPC-to-x86仿真器,其可在具有x86處理器的麥金塔計(jì)算機(jī)上執(zhí)行68K程序。位于加州圣塔克拉拉(SantaClara,California)的全美達(dá)公司,結(jié)合超長(zhǎng)指令字(VLIW)的核心硬件與“純粹軟件指令的轉(zhuǎn)譯器(亦即程序碼轉(zhuǎn)譯軟件(CodeMorphingSoftware))以動(dòng)態(tài)地編譯或仿真(emulate)x86程序碼序列”以執(zhí)行x86程序碼,請(qǐng)參照2011年維基百科針對(duì)全美達(dá)(Transmeta)的說(shuō)明<http://en.wikipedia.org/wiki/Transmeta>。另外,參照1998年11月3日由Kellyetal.提出的美國(guó)專利第5,832,205號(hào)公告案。IBM的DAISY(DynamicArchitectureInstructionSetfromYorktown)系統(tǒng)具有超長(zhǎng)指令字(VLIW)機(jī)器與動(dòng)態(tài)二進(jìn)制軟件轉(zhuǎn)譯,可提供100%的舊架構(gòu)軟件相容仿真。DAISY具有位于只讀存儲(chǔ)器內(nèi)的虛擬機(jī)器觀測(cè)器(VirtualMachineMonitor),以平行處理(parallelize)與儲(chǔ)存超長(zhǎng)指令字原始碼(VLIWprimitives)至未見(jiàn)于舊有系統(tǒng)架構(gòu)的部分主要存儲(chǔ)器內(nèi),其能避免這些舊有體系架構(gòu)的程序碼片段在后續(xù)程序被重新編譯(re-translation)。DAISY具有高速編譯器優(yōu)化算法(fastcompileroptimizationalgorithms)以提升效能。QEMU是一具有軟件動(dòng)態(tài)轉(zhuǎn)譯器的機(jī)器仿真器(machineemulator)。QEMU可在多種主系統(tǒng)(host),如x86、PowerPC、ARM、SPARC、Alpha與MIPS,模擬多種中央處理器,如x86、PowerPC、ARM與SPARC。請(qǐng)參照QEMU,aFastandPortableDynamicTranslator,FabriceBellard,USENIXAssociation,FREENIXTrack:2005USENIXAnnualTechnicalConference,如同其開(kāi)發(fā)者所稱“動(dòng)態(tài)轉(zhuǎn)譯器對(duì)于目標(biāo)處理器指令執(zhí)行時(shí)的轉(zhuǎn)換(runtimeconversion),將其轉(zhuǎn)換至主系統(tǒng)指令集,所產(chǎn)生的二進(jìn)制碼是儲(chǔ)存于一轉(zhuǎn)譯快取以利于重復(fù)取用?!璔EMU[較之其它動(dòng)態(tài)轉(zhuǎn)譯器]遠(yuǎn)為簡(jiǎn)單,因?yàn)樗贿B接GNCC編譯器于離線(offline)時(shí)所產(chǎn)生的機(jī)器碼片段”。同時(shí)可參照2009年6月19日Adelaide大學(xué)LeeWangHao的學(xué)位論文“ARMInstructionSetSimulationonMulti-corex86Hardware”。雖然以軟件轉(zhuǎn)譯為基礎(chǔ)的解決方案所提供的處理效能可以滿足多個(gè)運(yùn)算需求的一部分,但是不大能夠滿足多個(gè)使用者的情況。靜態(tài)(static)二進(jìn)制轉(zhuǎn)譯是另一種具有高效能潛力的技術(shù)。不過(guò),二進(jìn)制轉(zhuǎn)譯技術(shù)的使用存在技術(shù)上的問(wèn)題(例如自我修改程序碼(self-modifyingcode)、只在執(zhí)行時(shí)(run-time)可知的間接分支(indirectbranches)數(shù)值)以及商業(yè)與法律上的障礙(例如:此技術(shù)可能需要硬件開(kāi)發(fā)商配合開(kāi)發(fā)散布新程序所需的管道;對(duì)原程序散布者存在潛在的授權(quán)或是著作權(quán)侵害的風(fēng)險(xiǎn))。ARM指令集架構(gòu)(ISA)具有條件指令執(zhí)行的特色。如ARM架構(gòu)參考手冊(cè)(ARMArchitectureReferenceManual)第A4-3頁(yè)所述:“大部分ARM指令可被有條件地執(zhí)行,意謂若是APSR中的N、Z、C與V旗標(biāo)滿足指令所指定的條件,他們才會(huì)在程序者的模式操作、存儲(chǔ)器與協(xié)同處理器發(fā)揮正常的效果。若是這些旗標(biāo)不滿足條件,指令就會(huì)如同一個(gè)不操作(NOP)機(jī)器指令,此指令執(zhí)行至下一個(gè)正常指令,包括對(duì)于例外事件實(shí)行的所有相關(guān)的確認(rèn)操作,但不會(huì)有其它效果?!睏l件執(zhí)行有利于縮小指令碼的尺寸,并能通過(guò)縮減分支指令的數(shù)量來(lái)提升效能,但指令錯(cuò)誤預(yù)測(cè)則會(huì)伴隨效能減損。因此,如何有效率地執(zhí)行條件指令,尤其在支持高微處理器時(shí)鐘的情況,是亟待解決的問(wèn)題。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的一實(shí)施例提供一個(gè)執(zhí)行條件非分支指令的微處理器。其中各個(gè)條件非分支指令是指定一條件。在條件滿足時(shí)各個(gè)條件非分支指令指示微處理器執(zhí)行一操作,而在條件不滿足微處理器的條件旗標(biāo)時(shí)就不去執(zhí)行此操作。此微處理器具有一預(yù)測(cè)器,以提供關(guān)于此條件非分支指令的預(yù)測(cè)。此微處理器并具有一指令轉(zhuǎn)譯器,此指令轉(zhuǎn)譯器在前述預(yù)測(cè)該預(yù)測(cè)條件將不會(huì)被滿足時(shí),將條件非分支指令轉(zhuǎn)譯為一不操作微指令,而在前述預(yù)測(cè)該預(yù)測(cè)條件將會(huì)被滿足時(shí),將條件非分支指令轉(zhuǎn)譯為一個(gè)或多個(gè)微指令并構(gòu)成的一微指令組以非條件地執(zhí)行此操作。此微處理器亦具有一執(zhí)行管線,以執(zhí)行不操作微指令或是由指令轉(zhuǎn)譯器提供的微指令組。本發(fā)明的另一實(shí)施例提供一種利用一微處理器執(zhí)行條件非分支指令的方法。其中,各個(gè)條件非分支指令是指定一條件。各個(gè)條件非分支指令在條件滿足時(shí)指示微處理器執(zhí)行一操作,而在條件不滿足微處理器的條件旗標(biāo)時(shí)不去執(zhí)行此操作。此方法包含的步驟如下:提供關(guān)于一條件非分支指令的預(yù)測(cè);在前述預(yù)測(cè)該預(yù)測(cè)條件將不會(huì)被滿足時(shí),將條件非分支指令轉(zhuǎn)譯為一不操作微指令;在前述預(yù)測(cè)該預(yù)測(cè)條件將會(huì)被滿足時(shí),將條件非分支指令轉(zhuǎn)譯為一個(gè)或多個(gè)微指令構(gòu)成的一微指令組以非條件地執(zhí)行操作;以及執(zhí)行前述不操作微指令或是由指令轉(zhuǎn)譯器提供的微指令組,其中此執(zhí)行是由微處理器的一硬件執(zhí)行管線所執(zhí)行。本發(fā)明的又一實(shí)施例提供一編碼于計(jì)算機(jī)可讀取儲(chǔ)存媒介的計(jì)算機(jī)程序產(chǎn)品,其包含計(jì)算機(jī)可讀取程序碼,用以指定一微處理器以執(zhí)行條件非分支指令。其中,各個(gè)條件非分支指令是指定一條件。各個(gè)條件非分支指令在條件滿足時(shí)指示微處理器執(zhí)行一操作,而在條件不滿足微處理器的條件旗標(biāo)時(shí)不去執(zhí)行操作。此計(jì)算機(jī)可讀取程序碼包含第一程序碼以指定一預(yù)測(cè)器,提供關(guān)于一條件非分支指令的預(yù)測(cè)。此計(jì)算機(jī)可讀取程序碼并包含第二程序碼,以指定一指令轉(zhuǎn)譯器,用以在前述預(yù)測(cè)預(yù)測(cè)條件將不會(huì)被滿足時(shí),將條件非分支指令轉(zhuǎn)譯為一不操作微指令,而在前述預(yù)測(cè)該預(yù)測(cè)條件將會(huì)被滿足時(shí),將條件非分支指令轉(zhuǎn)譯為一個(gè)或多個(gè)微指令構(gòu)成的一微指令組以非條件地執(zhí)行此操作。此計(jì)算機(jī)可讀取程序碼并包含第三程序碼,以指定一執(zhí)行管線,執(zhí)行前述不操作微指令或是由指令轉(zhuǎn)譯器提供的微指令組。本發(fā)明的一實(shí)施例提供一種具有一指令集架構(gòu)的微處理器。此指令集架構(gòu)是定義至少一指令,此指令包含一立即字段,立即字段內(nèi)具有一第一部分用以指定一第一數(shù)值與一第二部分用以指定一第二數(shù)值。此指令指示微處理器執(zhí)行一操作將一固定數(shù)值作為其中之一的來(lái)源操作數(shù),固定數(shù)值是將第一數(shù)值基于第二數(shù)值轉(zhuǎn)動(dòng)/移動(dòng)一定數(shù)量的位而獲得。微處理器具有一指令轉(zhuǎn)譯器,用以將至少一指令轉(zhuǎn)譯為一個(gè)或多個(gè)微指令。此微指令是以不同于指令集架構(gòu)所定義的指令編碼方式進(jìn)行編碼。此微處理器并具有一執(zhí)行管線,用以執(zhí)行由指令轉(zhuǎn)譯器所產(chǎn)生的微指令,以產(chǎn)生一由指令集架構(gòu)定義的結(jié)果。其中,指令轉(zhuǎn)譯器,而非執(zhí)行管線,是依據(jù)第一與第二數(shù)值產(chǎn)生的固定數(shù)值作為至少一微指令的一來(lái)源操作數(shù),以供執(zhí)行管線執(zhí)行。本發(fā)明的另一實(shí)施例提供一種方法,由一具有一指令集架構(gòu)的微處理器執(zhí)行。此指令集架構(gòu)是定義有至少一指令,此指令包含一立即字段,立即字段內(nèi)具有一第一部分用以指定一第一數(shù)值與一第二部分用以指定一第二數(shù)值。指令是指示微處理器執(zhí)行一操作將一固定數(shù)值作為其中之一的來(lái)源操作數(shù),此固定數(shù)值是將第一數(shù)值基于第二數(shù)值轉(zhuǎn)動(dòng)/移動(dòng)一定數(shù)量的位而獲得。此方法包含的步驟如下:將至少一指令轉(zhuǎn)譯為一個(gè)或多個(gè)微指令,此微指令是以不同于指令集架構(gòu)所定義的指令編碼方式進(jìn)行編碼,并且此轉(zhuǎn)譯步驟是由微處理器的一指令轉(zhuǎn)譯器執(zhí)行;執(zhí)行由指令轉(zhuǎn)譯器所產(chǎn)生的微指令,以產(chǎn)生一由指令集架構(gòu)定義的結(jié)果,此執(zhí)行步驟是由微處理器的一執(zhí)行管線執(zhí)行;以及由指令轉(zhuǎn)譯器,而非執(zhí)行管線,依據(jù)第一與第二數(shù)值產(chǎn)生固定數(shù)值作為至少一微指令的一來(lái)源操作數(shù),供執(zhí)行管線執(zhí)行。本發(fā)明的另一實(shí)施例提供一種具有一指令集架構(gòu)的微處理器。此指令集架構(gòu)是定義有至少一指令,此指令包含一立即字段,立即字段內(nèi)具有一第一部分用以指定一第一數(shù)值與一第二部分用以指定一第二數(shù)值。指令是指示微處理器執(zhí)行一操作將一固定數(shù)值作為其中之一的來(lái)源操作數(shù),此固定數(shù)值是將第一數(shù)值基于第二數(shù)值轉(zhuǎn)動(dòng)/移動(dòng)一定數(shù)量的位而獲得。此微處理器具有一指令轉(zhuǎn)譯器,用以將至少一指令轉(zhuǎn)譯為一個(gè)或多個(gè)微指令。此微處理器并具有一執(zhí)行管線,執(zhí)行由指令轉(zhuǎn)譯器所產(chǎn)生的微指令,以產(chǎn)生一由指令集架構(gòu)定義的結(jié)果。當(dāng)立即字段的一數(shù)值落于一預(yù)定的數(shù)值子集內(nèi):指令轉(zhuǎn)譯器將指令轉(zhuǎn)譯為至少一個(gè)微指令;指令轉(zhuǎn)譯器,而非執(zhí)行管線,是依據(jù)第一與第二數(shù)值產(chǎn)生固定數(shù)值;以及執(zhí)行管線利用指令轉(zhuǎn)譯器產(chǎn)生的固定數(shù)值作為其中之一的來(lái)源操作數(shù),執(zhí)行至少一微指令。當(dāng)立即字段的數(shù)值并不落于該預(yù)定的數(shù)值子集內(nèi):指令轉(zhuǎn)譯器將指令轉(zhuǎn)譯為至少第一與第二微指令;執(zhí)行管線,而非指令轉(zhuǎn)譯器,通過(guò)執(zhí)行第一微指令,產(chǎn)生固定數(shù)值;以及執(zhí)行管線通過(guò)利用第一微指令執(zhí)行產(chǎn)生的固定數(shù)值作為其中之一的來(lái)源操作數(shù),以執(zhí)行第二微指令。本發(fā)明的另一實(shí)施例提供一種方法,由具有一指令集架構(gòu)的一微處理器執(zhí)行。此指令集架構(gòu)是定義至少一指令。此指令包含一立即字段,立即字段內(nèi)具有一第一部分用以指定一第一數(shù)值與一第二部分用以指定一第二數(shù)值。指令是指示微處理器執(zhí)行一操作將一固定數(shù)值作為其中之一的來(lái)源操作數(shù),此固定數(shù)值是將第一數(shù)值基于第二數(shù)值轉(zhuǎn)動(dòng)/移動(dòng)一定數(shù)量的位而獲得。此微處理器并包含一指令轉(zhuǎn)譯器與一執(zhí)行管線。此方法包含下列步驟:利用指令轉(zhuǎn)譯器,確認(rèn)立即字段的一數(shù)值是否落于一預(yù)定的數(shù)值子集內(nèi)。此方法并包含下列步驟:當(dāng)立即字段的數(shù)值落于預(yù)定的數(shù)值子集內(nèi),利用指令轉(zhuǎn)譯器將指令轉(zhuǎn)譯為至少一個(gè)微指令;利用指令轉(zhuǎn)譯器,而非執(zhí)行管線,依據(jù)第一與第二數(shù)值產(chǎn)生固定數(shù)值;以及利用執(zhí)行管線,將指令轉(zhuǎn)譯器產(chǎn)生的固定數(shù)值作為其中之一的來(lái)源操作數(shù),來(lái)執(zhí)行前述至少一微指令。此方法并包含下列步驟:當(dāng)立即字段的數(shù)值并不落于預(yù)定的數(shù)值子集內(nèi):利用指令轉(zhuǎn)譯器將指令轉(zhuǎn)譯為至少第一與第二微指令;利用執(zhí)行管線,而非指令轉(zhuǎn)譯器,通過(guò)執(zhí)行第一微指令以產(chǎn)生固定數(shù)值;以及利用執(zhí)行管線,通過(guò)利用第一微指令執(zhí)行產(chǎn)生的固定數(shù)值作為其中之一的來(lái)源操作數(shù),以執(zhí)行第二微指令。本發(fā)明的又一實(shí)施例提供一種計(jì)算機(jī)程序產(chǎn)品,編碼于至少一計(jì)算機(jī)可讀取儲(chǔ)存媒介以使用于一運(yùn)算裝置。此計(jì)算機(jī)程序產(chǎn)品包括編碼于此媒介的計(jì)算機(jī)可讀取程序碼,用以指定一微處理器。此微處理器具有一指令集架構(gòu),指令集架構(gòu)是定義至少一指令。此指令包含一立即字段,立即字段內(nèi)具有一第一部分用以指定一第一數(shù)值與一第二部分用以指定一第二數(shù)值。指令是指示微處理器執(zhí)行一操作將一固定數(shù)值作為其中之一的來(lái)源操作數(shù)。此固定數(shù)值是將第一數(shù)值基于第二數(shù)值轉(zhuǎn)動(dòng)/移動(dòng)一定數(shù)量的位而獲得。此計(jì)算機(jī)可讀取程序碼具有第一程序碼,指定一指令轉(zhuǎn)譯器,用以將至少一指令轉(zhuǎn)譯為一個(gè)或多個(gè)微指令,其中該指令是以不同于指令集架構(gòu)所定義的指令編碼方式進(jìn)行編碼。此計(jì)算機(jī)可讀取程序碼并具有第二程序碼,指定一執(zhí)行管線,用以執(zhí)行由指令轉(zhuǎn)譯器所產(chǎn)生的微指令,以產(chǎn)生一由該指令集架構(gòu)定義的結(jié)果。其中,指令轉(zhuǎn)譯器,而非執(zhí)行管線,是依據(jù)第一與第二數(shù)值產(chǎn)生的固定數(shù)值作為至少一微指令的一來(lái)源操作數(shù),供執(zhí)行管線執(zhí)行。關(guān)于本發(fā)明的優(yōu)點(diǎn)與精神可以通過(guò)以下的發(fā)明詳述及所附圖式得到進(jìn)一步的了解。附圖說(shuō)明圖1是本發(fā)明執(zhí)行x86程序集架構(gòu)與ARM程序集架構(gòu)機(jī)器語(yǔ)言程序的微處理器一實(shí)施例的方塊圖。圖2是一方塊圖,詳細(xì)顯示圖1的硬件指令轉(zhuǎn)譯器。圖3是一方塊圖,詳細(xì)顯示圖2的指令格式化程序。圖4是一方塊圖,詳細(xì)顯示圖1的執(zhí)行管線。圖5是一方塊圖,詳細(xì)顯示圖1的寄存器文件。圖6A和圖6B是一流程圖,顯示圖1的微處理器的操作步驟。圖7是本發(fā)明一雙核心微處理器的方塊圖。圖8是本發(fā)明執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序的微處理器另一實(shí)施例的方塊圖。圖9是一方塊圖,詳細(xì)顯示部分圖1的微處理器。圖10A和圖10B是一流程圖,顯示圖1的硬件指令轉(zhuǎn)譯器轉(zhuǎn)譯條件ALU指令的操作步驟。圖11是一流程圖,顯示圖4的執(zhí)行單元執(zhí)行一移位微指令的操作步驟。圖12A和圖12B是一流程圖,顯示圖4的執(zhí)行單元執(zhí)行一條件ALU微指令的操作步驟。圖13是一流程圖,顯示圖4的執(zhí)行單元執(zhí)行一條件移動(dòng)微指令的操作步驟。圖14至20是方塊圖,顯示圖1的執(zhí)行管線112執(zhí)行依據(jù)圖10的轉(zhuǎn)譯操作所轉(zhuǎn)譯的各種形式的條件ALU指令的操作步驟。圖21A和圖21B是一流程圖,顯示圖1的硬件指令轉(zhuǎn)譯器轉(zhuǎn)譯條件ALU指令,以指定來(lái)源寄存器的其中之一與目的寄存器為同一的操作步驟。圖22至28是方塊圖,顯示圖1的執(zhí)行管線112執(zhí)行依據(jù)圖21的轉(zhuǎn)譯操作所轉(zhuǎn)譯的各種形式的條件ALU指令的操作步驟。圖29是一方塊圖,顯示本發(fā)明對(duì)于非條件分支指令進(jìn)行預(yù)測(cè)的微處理器100的一實(shí)施例。圖30是一方塊示意圖,顯示圖29的指令轉(zhuǎn)譯器對(duì)于條件ALU指令的轉(zhuǎn)譯的一實(shí)施例。圖31A和圖31B是一流程圖顯示本發(fā)明圖29的微處理器執(zhí)行圖30的一條件ALU指令的一實(shí)施例。圖32是一方塊圖,顯示本發(fā)明在轉(zhuǎn)譯過(guò)程中處理修正后立即常數(shù)的微處理器的一實(shí)施例。圖33是一方塊圖,顯示本發(fā)明將一立即操作數(shù)指令選擇性地轉(zhuǎn)譯為一個(gè)ROR微指令與一ALU微指令或是轉(zhuǎn)譯為一立即ALU微指令的一實(shí)施例。圖34A和圖34B是一流程圖,顯示本發(fā)明圖32的微處理器100執(zhí)行圖33的一立即操作數(shù)指令的操作的一實(shí)施例。[主要元件標(biāo)號(hào)說(shuō)明]微處理器(處理核心)100指令快取102硬件指令轉(zhuǎn)譯器104寄存器文件106存儲(chǔ)器子系統(tǒng)108執(zhí)行管線112指令擷取單元與分支預(yù)測(cè)器114ARM程序計(jì)數(shù)器(PC)寄存器116x86指令指針(IP)寄存器118配置寄存器(configurationregister)122ISA指令124微指令126結(jié)果128指令模式指針(instructionmodeindicator)132擷取地址134環(huán)境模式指針(environmentmodeindicator)136指令格式化程序202簡(jiǎn)單指令轉(zhuǎn)譯器(SIT)204復(fù)雜指令轉(zhuǎn)譯器(CIT)206多工器(mux)212x86簡(jiǎn)單指令轉(zhuǎn)譯器222ARM簡(jiǎn)單指令轉(zhuǎn)譯器224微程序計(jì)數(shù)器(micro-programcounter,micro-PC)232微碼只讀存儲(chǔ)器234微程序器(microsequencer)236指令間接寄存器(instructionindirectionregister,IIR)235微轉(zhuǎn)譯器(microtranslator)237格式化ISA指令242實(shí)行微指令(implementingmicroinstructions)244實(shí)行微指令246選擇輸入248微碼地址252只讀存儲(chǔ)器地址254ISA指令信息255預(yù)解碼器(pre-decoder)302指令字節(jié)隊(duì)列(IBQ)304長(zhǎng)度解碼器(lengthdecoders)與漣波邏輯門(mén)(ripplelogic)306多工器隊(duì)列(muxqueue,MQ)308多工器312格式化指令隊(duì)列(formattedinstructionqueue,FIQ)314ARM指令集狀態(tài)322微指令隊(duì)列401寄存器配置表(registerallocationtable,RAT)402指令調(diào)度器(instructiondispatcher)404保留站(reservationstation)406指令發(fā)送單元(instructionissueunit)408整數(shù)/分支(integer/branch)單元412媒體單元(mediaunit)414加載/儲(chǔ)存(load/store)單元416浮點(diǎn)(floatingpoint)單元418重排緩沖器(reorderbuffer,ROB)422執(zhí)行單元424ARM特定寄存器502x86特定寄存器504共享寄存器506雙核心微處理器700微指令快取892條件旗標(biāo)寄存器926多工器922旗標(biāo)總線928條件旗標(biāo)數(shù)值928/924ISA條件旗標(biāo)902條件滿足(SAT)位904預(yù)移位進(jìn)位(PSC)位906使用移位進(jìn)位(USE)位908動(dòng)態(tài)預(yù)測(cè)器2932預(yù)測(cè)器選擇器2934靜態(tài)預(yù)測(cè)器2936動(dòng)態(tài)預(yù)測(cè)2982預(yù)測(cè)選擇2984靜態(tài)預(yù)測(cè)2986歷史更新2974誤預(yù)測(cè)2976ALU微指令3044條件移動(dòng)微指令3046具條件碼的條件ALU微指令3045具條件碼的不操作微指令3047操作碼字段a202,a212,a222,a252,a272條件碼字段a204,a224,a254,a274來(lái)源寄存器1與2的字段a206,a216,a256目的寄存器字段a208,a218,a232,a258來(lái)源寄存器1的字段a226來(lái)源寄存器2的字段a228立即操作數(shù)3266ROR微指令3344ALU微指令3346立即ALU微指令3348操作碼字段b202,b212,b222,b232來(lái)源寄存器1的字段b204,b214,b234來(lái)源寄存器2的字段b235目的寄存器字段b206,b216,b226,b236立即字段b207immed_8字段b208,b228rotate_imm字段b209,b229immediate-32字段b218具體實(shí)施方式名詞定義指令集,是定義二進(jìn)制制編碼值的集合(即機(jī)器語(yǔ)言指令)與微處理器所執(zhí)行的操作間的對(duì)應(yīng)關(guān)系。機(jī)器語(yǔ)言程序基本上以二進(jìn)制制進(jìn)行編碼,不過(guò)亦可使用其它進(jìn)位制的系統(tǒng),如部分早期IBM計(jì)算機(jī)的機(jī)器語(yǔ)言程序,雖然最終亦是以電壓高低呈現(xiàn)二進(jìn)制值的物理信號(hào)來(lái)表現(xiàn),不過(guò)卻是以十進(jìn)制制進(jìn)行編碼。機(jī)器語(yǔ)言指令指示微處理器執(zhí)行的操作如:將寄存器1內(nèi)的操作數(shù)與寄存器2內(nèi)的操作數(shù)相加并將結(jié)果寫(xiě)入寄存器3、將存儲(chǔ)器地址0x12345678的操作數(shù)減掉指令所指定的立即操作數(shù)并將結(jié)果寫(xiě)入寄存器5、依據(jù)寄存器7所指定的位數(shù)移動(dòng)寄存器6內(nèi)的數(shù)值、若是零旗標(biāo)被設(shè)定時(shí),在分支到指令后方的36個(gè)字節(jié)、將存儲(chǔ)器地址0xABCD0000的數(shù)值加載寄存器8。因此,指令集是定義各個(gè)機(jī)器語(yǔ)言指令使微處理器執(zhí)行所欲執(zhí)行的操作的二進(jìn)制編碼值。需了解的是,指令集定義二進(jìn)制值與微處理器操作間的對(duì)應(yīng)關(guān)系,并不意味著單一個(gè)二進(jìn)制值就會(huì)對(duì)應(yīng)至單一個(gè)微處理器操作。具體來(lái)說(shuō),在部分指令集中,多個(gè)二進(jìn)制值可能會(huì)對(duì)應(yīng)至同一個(gè)微處理器操作。指令集架構(gòu)(ISA),從微處理器家族的脈絡(luò)來(lái)看包含(1)指令集;(2)指令集的指令所能存取的資源集(例如:存儲(chǔ)器尋址所需的寄存器與模式);以及(3)微處理器響應(yīng)指令集的指令執(zhí)行所產(chǎn)生的例外事件集(例如:除以零、分頁(yè)錯(cuò)誤、存儲(chǔ)器保護(hù)違反等)。因?yàn)槌绦蜃珜?xiě)者,如組譯器與編譯器的撰寫(xiě)者,想要作出機(jī)器語(yǔ)言程序在一微處理器家族執(zhí)行時(shí),就需要此微處理器家族的ISA定義,所以微處理器家族的制造者通常會(huì)將ISA定義于操作者操作手冊(cè)中。舉例來(lái)說(shuō),2009年3月公布的Intel64與IA-32架構(gòu)軟件開(kāi)發(fā)者手冊(cè)(Intel64andIA-32ArchitecturesSoftwareDeveloper’sManual)即定義Intel64與IA-32處理器架構(gòu)的ISA。此軟件開(kāi)發(fā)者手冊(cè)包含有五個(gè)章節(jié),第一章是基本架構(gòu);第二A章是指令集參考A至M;第二B章是指令集參考N至Z;第三A章是系統(tǒng)編程指南;第三B章是系統(tǒng)編程指南第二部分,此手冊(cè)系列為本案的參考文件。此種處理器架構(gòu)通常被稱為x86架構(gòu),本文中則是以x86、x86ISA、x86ISA家族、x86家族或是相似用語(yǔ)來(lái)說(shuō)明。在另一個(gè)例子中,2010年公布的ARM架構(gòu)參考手冊(cè),ARMv7-A與ARMv7-R版本Erratamarkup,定義ARM處理器架構(gòu)的ISA。此參考手冊(cè)系列為參考文件。此ARM處理器架構(gòu)的ISA在此亦被稱為ARM、ARMISA、ARMISA家族、ARM家族或是相似用語(yǔ)。其它眾所周知的ISA家族還有IBMSystem/360/370/390與z/Architecture、DECVAX、Motorola68k、MIPS、SPARC、PowerPC與DECAlpha等等。ISA的定義會(huì)涵蓋處理器家族,因?yàn)樘幚砥骷易宓陌l(fā)展中,制造者會(huì)通過(guò)在指令集中增加新指令、以及/或在寄存器組中增加新的寄存器等方式來(lái)改進(jìn)原始處理器的ISA。舉例來(lái)說(shuō),隨著x86程序集架構(gòu)的發(fā)展,其于IntelPentiumIII處理器家族導(dǎo)入一組128位的多媒體擴(kuò)展指令集(MMX)寄存器作為單指令多重?cái)?shù)據(jù)流擴(kuò)展(SSE)指令集的一部分,而x86ISA機(jī)器語(yǔ)言程序已經(jīng)開(kāi)發(fā)來(lái)利用XMM寄存器以提升效能,雖然現(xiàn)存的x86ISA機(jī)器語(yǔ)言程序并不使用單指令多重?cái)?shù)據(jù)流擴(kuò)展指令集的XMM寄存器。此外,其它制造商亦設(shè)計(jì)且制造出可執(zhí)行x86ISA機(jī)器語(yǔ)言程序的微處理器。例如,超微半導(dǎo)體(AMD)與威盛電子(VIATechnologies)即在x86ISA增加新技術(shù)特征,如超微半導(dǎo)體的3DNOW!單指令多重?cái)?shù)據(jù)流(SIMD)向量處理指令,以及威盛電子的Padlock安全引擎隨機(jī)數(shù)產(chǎn)生器(randomnumbergenerator)與先進(jìn)解碼引擎(advancedcryptographyengine)的技術(shù),前述技術(shù)都是采用x86ISA的機(jī)器語(yǔ)言程序,但卻非由現(xiàn)有的Intel微處理器實(shí)現(xiàn)。以另一個(gè)實(shí)例來(lái)說(shuō)明,ARMISA原本定義ARM指令集狀態(tài)具有4字節(jié)的指令。然而,隨著ARMISA的發(fā)展而增加其它指令集狀態(tài),如具有2字節(jié)指令以提升編碼密度的Thumb指令集狀態(tài)以及用以加速Java字節(jié)碼程序的Jazelle指令集狀態(tài),而ARMISA機(jī)器語(yǔ)言程序已被發(fā)展來(lái)使用部分或所有其它ARMISA指令集狀態(tài),即使現(xiàn)存的ARMISA機(jī)器語(yǔ)言程序并非采用這些其它ARMISA指令集狀態(tài)。指令集架構(gòu)(ISA)機(jī)器語(yǔ)言程序,包含ISA指令序列,即ISA指令集對(duì)應(yīng)至程序撰寫(xiě)者要程序執(zhí)行的操作序列的二進(jìn)制編碼值序列。因此,x86ISA機(jī)器語(yǔ)言程序包含x86ISA指令序列,ARMISA機(jī)器語(yǔ)言程序則包含ARMISA指令序列。機(jī)器語(yǔ)言程序指令是存放于存儲(chǔ)器內(nèi),且由微處理器擷取并執(zhí)行。硬件指令轉(zhuǎn)譯器,包含多個(gè)晶體管的配置,用以接收ISA機(jī)器語(yǔ)言指令(例如x86ISA或是ARMISA機(jī)器語(yǔ)言指令)作為輸入,并對(duì)應(yīng)地輸出一個(gè)或多個(gè)微指令至微處理器的執(zhí)行管線。執(zhí)行管線執(zhí)行微指令的執(zhí)行結(jié)果是由ISA指令所定義。因此,執(zhí)行管線通過(guò)對(duì)這些微指令的集體執(zhí)行來(lái)“實(shí)現(xiàn)”ISA指令。也就是說(shuō),執(zhí)行管線通過(guò)對(duì)于硬件指令轉(zhuǎn)譯器輸出的實(shí)行微指令的集體執(zhí)行,實(shí)現(xiàn)所輸入ISA指令所指定的操作,以產(chǎn)生此ISA指令定義的結(jié)果。因此,硬件指令轉(zhuǎn)譯器可視為是將ISA指令“轉(zhuǎn)譯(translate)”為一個(gè)或多個(gè)實(shí)行微指令。本實(shí)施例所描述的微處理器具有硬件指令轉(zhuǎn)譯器以將x86ISA指令與ARMISA指令轉(zhuǎn)譯為微指令。不過(guò),需理解的是,硬件指令轉(zhuǎn)譯器并非必然可對(duì)x86使用者操作手冊(cè)或是ARM使用者操作手冊(cè)所定義的整個(gè)指令集進(jìn)行轉(zhuǎn)譯,而往往只能轉(zhuǎn)譯這些指令中一個(gè)子集合,如同絕大多數(shù)x86ISA與ARMISA處理器只支持其對(duì)應(yīng)的使用者操作手冊(cè)所定義的一個(gè)指令子集合。具體來(lái)說(shuō),x86使用者操作手冊(cè)定義由硬件指令轉(zhuǎn)譯器轉(zhuǎn)譯的指令子集合,不必然就對(duì)應(yīng)至所有現(xiàn)存的x86ISA處理器,ARM使用者操作手冊(cè)定義由硬件指令轉(zhuǎn)譯器轉(zhuǎn)譯的指令子集合,不必然就對(duì)應(yīng)至所有現(xiàn)存的ARMISA處理器。執(zhí)行管線,是一多層級(jí)序列(sequenceofstages)。此多層級(jí)序列的各個(gè)層級(jí)分別具有硬件邏輯與一硬件寄存器。硬件寄存器保持硬件邏輯的輸出信號(hào),并依據(jù)微處理器的時(shí)脈信號(hào),將此輸出信號(hào)提供至多層級(jí)序列的下一層級(jí)。執(zhí)行管線可以具有多個(gè)多層級(jí)序列,例多重執(zhí)行管線。執(zhí)行管線接收微指令作為輸入信號(hào),并相應(yīng)地執(zhí)行微指令所指定的操作以輸出執(zhí)行結(jié)果。微指令所指定,且由執(zhí)行管線的硬件邏輯所執(zhí)行的操作包括但不限于算術(shù)、邏輯、存儲(chǔ)器加載/儲(chǔ)存、比較、測(cè)試、與分支解析,對(duì)進(jìn)行操作的數(shù)據(jù)格式包括但不限于整數(shù)、浮點(diǎn)數(shù)、字、二進(jìn)編碼十進(jìn)數(shù)(BCD)、與壓縮格式(packedformat)。執(zhí)行管線執(zhí)行微指令以實(shí)現(xiàn)ISA指令(如x86與ARM),藉以產(chǎn)生ISA指令所定義的結(jié)果。執(zhí)行管線不同于硬件指令轉(zhuǎn)譯器。具體來(lái)說(shuō),硬件指令轉(zhuǎn)譯器產(chǎn)生實(shí)行微指令,執(zhí)行管線則是執(zhí)行這些指令,但不產(chǎn)生這些實(shí)行微指令。指令快取,是微處理器內(nèi)的一個(gè)隨機(jī)存取存儲(chǔ)裝置,微處理器將ISA機(jī)器語(yǔ)言程序的指令(例如x86ISA與ARMISA的機(jī)器語(yǔ)言指令)放置其中,這些指令是擷取自系統(tǒng)存儲(chǔ)器并由微處理器依據(jù)ISA機(jī)器語(yǔ)言程序的執(zhí)行流程來(lái)執(zhí)行。具體來(lái)說(shuō),ISA定義一指令地址寄存器以持有下一個(gè)待執(zhí)行ISA指令的存儲(chǔ)器地址(舉例來(lái)說(shuō),在x86ISA是定義為指令指針(IP)而在ARMISA是定義為程序計(jì)數(shù)器(PC),而在微處理器執(zhí)行機(jī)器語(yǔ)言程序以控制程序流程時(shí),微處理器會(huì)更新指令地址寄存器的內(nèi)容。ISA指令被快取來(lái)供后續(xù)擷取之用。當(dāng)該寄存器所包含的下一個(gè)機(jī)器語(yǔ)言程序的ISA指令地址是位于目前的指令快取中,可依據(jù)指令寄存器的內(nèi)容快速地從指令快取擷取ISA指令由系統(tǒng)存儲(chǔ)器中取出該ISA指令。尤其是,此程序是基于指令地址寄存器(如指令指針(IP)或是程序計(jì)數(shù)器(PC))的存儲(chǔ)器地址向指令快取取得數(shù)據(jù),而非特地運(yùn)用一加載或儲(chǔ)存指令所指定的存儲(chǔ)器地址來(lái)進(jìn)行數(shù)據(jù)擷取。因此,將指令集架構(gòu)的指令視為數(shù)據(jù)(例如采用軟件轉(zhuǎn)譯的系統(tǒng)的硬件部分所呈現(xiàn)的數(shù)據(jù))的專用數(shù)據(jù)快取,特地運(yùn)用一加載/儲(chǔ)存地址來(lái)存取,而非基于指令地址寄存器的數(shù)值做存取的,就不是此處所稱的指令快取。此外,可取得指令與數(shù)據(jù)的混合式快取,是基于指令地址寄存器的數(shù)值以及基于加載/儲(chǔ)存地址,而非僅僅基于加載/儲(chǔ)存地址,亦被涵蓋在本說(shuō)明對(duì)指令快取的定義內(nèi)。在本說(shuō)明內(nèi)容中,加載指令是指將數(shù)據(jù)由存儲(chǔ)器讀取至微處理器的指令,儲(chǔ)存指令是指將數(shù)據(jù)由微處理器寫(xiě)入存儲(chǔ)器的指令。微指令集,是微處理器的執(zhí)行管線能夠執(zhí)行的指令(微指令)的集合。實(shí)施例說(shuō)明本發(fā)明實(shí)施例揭露的微處理器可通過(guò)硬件將其對(duì)應(yīng)的x86ISA與ARMISA指令轉(zhuǎn)譯為由微處理器執(zhí)行管線直接執(zhí)行的微指令,以達(dá)到可執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序的目的。此微指令是由不同于x86ISA與ARMISA的微處理器微架構(gòu)(microarchitecture)的微指令集所定義。由于本文所述的微處理器需要執(zhí)行x86與ARM機(jī)器語(yǔ)言程序,微處理器的硬件指令轉(zhuǎn)譯器會(huì)將x86與ARM指令轉(zhuǎn)譯為微指令,并將這些微指令提供至微處理器的執(zhí)行管線,由微處理器執(zhí)行這些微指令以實(shí)現(xiàn)前述x86與ARM指令。由于這些實(shí)行微指令是直接由硬件指令轉(zhuǎn)譯器提供至執(zhí)行管線來(lái)執(zhí)行,而不同于采用軟件轉(zhuǎn)譯器的系統(tǒng)需于執(zhí)行管線執(zhí)行指令前,將預(yù)先儲(chǔ)存本機(jī)(host)指令至存儲(chǔ)器,因此,前揭微處理器具有潛力能夠以較快的執(zhí)行速度執(zhí)行x86與ARM機(jī)器語(yǔ)言程序。圖1是一方塊圖顯示本發(fā)明執(zhí)行x86ISA與ARMISA的機(jī)器語(yǔ)言程序的微處理器100的實(shí)施例。此微處理器100具有一指令快取102;一硬件指令轉(zhuǎn)譯器104,用以由指令快取102接收x86ISA指令與ARMISA指令124并將其轉(zhuǎn)譯為微指令126;一執(zhí)行管線112,執(zhí)行由硬件指令轉(zhuǎn)譯器104接收的微指令126以產(chǎn)生微指令結(jié)果128,該結(jié)果是以操作數(shù)的型式回傳至執(zhí)行管線112;一寄存器文件106與一存儲(chǔ)器子系統(tǒng)108,分別提供操作數(shù)至執(zhí)行管線112并由執(zhí)行管線112接收微指令結(jié)果128;一指令擷取單元與分支預(yù)測(cè)器114,提供一擷取地址134至指令快取102;一ARMISA定義的程序計(jì)數(shù)器寄存器116與一x86ISA定義的指令指針寄存器118,其依據(jù)微指令結(jié)果128進(jìn)行更新,且提供其內(nèi)容至指令擷取單元與分支預(yù)測(cè)器114;以及多個(gè)配置寄存器122,提供一指令模式指針132與一環(huán)境模式指針136至硬件指令轉(zhuǎn)譯器104與指令擷取單元與分支預(yù)測(cè)器114,并且是基于微指令結(jié)果128進(jìn)行更新。由于微處理器100可執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言指令,微處理器100依據(jù)程序流程由系統(tǒng)存儲(chǔ)器(未圖標(biāo))擷取指令至微處理器100。微處理器100存取最近擷取的x86ISA與ARMISA的機(jī)器語(yǔ)言指令至指令快取102。指令擷取單元114將依據(jù)由系統(tǒng)存儲(chǔ)器擷取的x86或ARM指令字節(jié)區(qū)段,產(chǎn)生一擷取地址134。若是命中指令快取102,指令快取102將位于擷取地址134的x86或ARM指令字節(jié)區(qū)段提供至硬件指令轉(zhuǎn)譯器104,否則由系統(tǒng)存儲(chǔ)器中擷取指令集架構(gòu)的指令124。指令擷取單元114基于ARM程序計(jì)數(shù)器116與x86指令指針118的值產(chǎn)生擷取地址134。具體來(lái)說(shuō),指令擷取單元114會(huì)在一擷取地址寄存器中維持一擷取地址。任何時(shí)候指令擷取單元114擷取到新的ISA指令字節(jié)區(qū)段,它就會(huì)依據(jù)此區(qū)段的大小更新擷取地址,并依據(jù)既有方式依序進(jìn)行,直到出現(xiàn)一控制流程事件??刂屏鞒淌录馐录漠a(chǎn)生、分支預(yù)測(cè)器114的預(yù)測(cè)顯示擷取區(qū)段內(nèi)有一將發(fā)生的分支(takenbranch)、以及由執(zhí)行管線112響應(yīng)一非由分支預(yù)測(cè)器114所預(yù)測(cè)的將發(fā)生分支指令的執(zhí)行結(jié)果,而對(duì)ARM程序計(jì)數(shù)器116與x86指令指針118進(jìn)行的更新。指令擷取單元114將擷取地址相應(yīng)地更新為例外處理程序地址、預(yù)測(cè)目標(biāo)地址或是執(zhí)行目標(biāo)地址以響應(yīng)一控制流程事件。在一實(shí)施例中,指令快取102是一混合快取,以存取ISA指令124與數(shù)據(jù)。值得注意的是,在此混合快取的實(shí)施例中,雖然混合快取可基于一加載/儲(chǔ)存地址將數(shù)據(jù)寫(xiě)入快取或由快取讀取數(shù)據(jù),在微處理器100是由混合快取擷取指令集架構(gòu)的指令124的情況下,混合快取是基于ARM程序計(jì)數(shù)器116與x86指令指針118的數(shù)值來(lái)存取,而非基于加載/儲(chǔ)存地址。指令快取102可以是一隨機(jī)存取存儲(chǔ)器裝置。指令模式指針132是一狀態(tài)指示微處理器100當(dāng)前是否正在擷取、格式化(formatting)/解碼、以及將x86ISA或ARMISA指令124轉(zhuǎn)譯為微指令126。此外,執(zhí)行管線112與存儲(chǔ)器子系統(tǒng)108接收此指令模式指針132,此指令模式指針132會(huì)影響微指令126的執(zhí)行方式,盡管只是微指令集內(nèi)的一個(gè)小集合受影響而已。x86指令指針寄存器118持有下一個(gè)待執(zhí)行的x86ISA指令124的存儲(chǔ)器地址,ARM程序計(jì)數(shù)器寄存器116持有下一個(gè)待執(zhí)行的ARMISA指令124的存儲(chǔ)器地址。為了控制程序流程,微處理器100在其執(zhí)行x86與ARM機(jī)器語(yǔ)言程序時(shí),分別更新x86指令指針寄存器118與ARM程序計(jì)數(shù)器寄存器116,至下一個(gè)指令、分支指令的目標(biāo)地址或是例外處理程序地址。在微處理器100執(zhí)行x86與ARMISA的機(jī)器語(yǔ)言程序的指令時(shí),微處理器100由系統(tǒng)存儲(chǔ)器擷取機(jī)器語(yǔ)言程序的指令集架構(gòu)的指令,并將其置入指令快取102以取代最近較不被擷取與執(zhí)行的指令。此指令擷取單元114基于x86指令指針寄存器118或是ARM程序計(jì)數(shù)器寄存器116的數(shù)值,并依據(jù)指令模式指針132指示微處理器100正在擷取的ISA指令124是x86或是ARM模式來(lái)產(chǎn)生擷取地址134。在一實(shí)施例中,x86指令指針寄存器118與ARM程序計(jì)數(shù)器寄存器116可實(shí)施為一共享的硬件指令地址寄存器,用以提供其內(nèi)容至指令擷取單元與分支預(yù)測(cè)器114并由執(zhí)行管線112依據(jù)指令模式指針132指示的模式是x86或ARM與x86或ARM的語(yǔ)意(semantics)來(lái)進(jìn)行更新。環(huán)境模式指針136一狀態(tài)指示微處理器100是使用x86或ARMISA的語(yǔ)意于此微處理器100所操作的多種執(zhí)行環(huán)境,例如虛擬存儲(chǔ)器、例外事件、快取控制、與全域執(zhí)行時(shí)間保護(hù)。因此,指令模式指針132與環(huán)境模式指針136共同產(chǎn)生多個(gè)執(zhí)行模式。在第一種模式中,指令模式指針132與環(huán)境模式指針136都指向x86ISA,微處理器100是作為一般的x86ISA處理器。在第二種模式中,指令模式指針132與環(huán)境模式指針136都指向ARMISA,微處理器100是作為一般的ARMISA處理器。在第三種模式中,指令模式指針132指向x86ISA,不過(guò)環(huán)境模式指針136則是指向ARMISA,此模式有利于在ARM操作系統(tǒng)或是超管理器的控制下執(zhí)行使用者模式x86機(jī)器語(yǔ)言程序;相反地,在第四種模式中,指令模式指針132是指向ARMISA,不過(guò)環(huán)境模式指針136則是指向x86ISA,此模式有利于在x86操作系統(tǒng)或超管理器的控制下執(zhí)行使用者模式ARM機(jī)器語(yǔ)言程序。指令模式指針132與環(huán)境模式指針136的數(shù)值在重置(reset)之初就已確定。在一實(shí)施例中,此初始值是被視為微碼常數(shù)進(jìn)行編碼,不過(guò)可通過(guò)熔斷配置熔絲與/或使用微碼修補(bǔ)進(jìn)行修改。在另一實(shí)施例中,此初始值則是由一外部輸入提供至微處理器100。在一實(shí)施例中,環(huán)境模式指針136只在由一重置至ARM(reset-to-ARM)指令124或是一重置至x86(reset-to-x86)指令124執(zhí)行重置后才會(huì)改變(請(qǐng)參照下述圖6A及圖6B);亦即,在微處理器100正常運(yùn)作而未由一般重置、重置至x86或重置至ARM指令124執(zhí)行重置時(shí),環(huán)境模式指針136并不會(huì)改變。硬件指令轉(zhuǎn)譯器104接收x86與ARMISA的機(jī)器語(yǔ)言指令124作為輸入,相應(yīng)地提供一個(gè)或多個(gè)微指令126作為輸出信號(hào)以實(shí)現(xiàn)x86或ARMISA指令124。執(zhí)行管線112執(zhí)行前揭一個(gè)或多個(gè)微指令126,其集體執(zhí)行的結(jié)果實(shí)現(xiàn)x86或ARMISA指令124。也就是說(shuō),這些微指令126的集體執(zhí)行可依據(jù)輸入端所指定的x86或ARMISA指令124,來(lái)執(zhí)行x86或是ARMISA指令124所指定的操作,以產(chǎn)生x86或ARMISA指令124所定義的結(jié)果。因此,硬件指令轉(zhuǎn)譯器104將x86或ARMISA指令124轉(zhuǎn)譯為一個(gè)或多個(gè)微指令126。硬件指令轉(zhuǎn)譯器104包含一組晶體管,以一預(yù)設(shè)方式進(jìn)行配置來(lái)將x86ISA與ARMISA的機(jī)器語(yǔ)言指令124轉(zhuǎn)譯為實(shí)行微指令126。硬件指令轉(zhuǎn)譯器104并具有布爾邏輯門(mén)以產(chǎn)生實(shí)行微指令126(如圖2所示的簡(jiǎn)單指令轉(zhuǎn)譯器204)。在一實(shí)施例中,硬件指令轉(zhuǎn)譯器104并具有一微碼只讀存儲(chǔ)器(如圖2中復(fù)雜指令轉(zhuǎn)譯器206的元件234),硬件指令轉(zhuǎn)譯器104利用此微碼只讀存儲(chǔ)器,并依據(jù)復(fù)雜ISA指令124產(chǎn)生實(shí)行微指令126,這部分將在圖2的說(shuō)明內(nèi)容會(huì)有進(jìn)一步的說(shuō)明。就一較佳實(shí)施例而言,硬件指令轉(zhuǎn)譯器104不必然要能轉(zhuǎn)譯x86使用者操作手冊(cè)或是ARM使用者操作手冊(cè)所定義的整個(gè)ISA指令124集,而只要能夠轉(zhuǎn)譯這些指令的一個(gè)子集合即可。具體來(lái)說(shuō),由x86使用者操作手冊(cè)定義且由硬件指令轉(zhuǎn)譯器104轉(zhuǎn)譯的ISA指令124的子集合,并不必然對(duì)應(yīng)至任何Intel開(kāi)發(fā)的既有x86ISA處理器,而由ARM使用者操作手冊(cè)定義且由硬件指令轉(zhuǎn)譯器104轉(zhuǎn)譯的ISA指令124的子集合并不必然對(duì)應(yīng)至任何由ARMLtd.開(kāi)發(fā)的既有的ISA處理器。前揭一個(gè)或多個(gè)用以實(shí)現(xiàn)x86或ARMISA指令124的實(shí)行微指令126,可由硬件指令轉(zhuǎn)譯器104一次全部提供至執(zhí)行管線112或是依序提供。本實(shí)施例的優(yōu)點(diǎn)在于,硬件指令轉(zhuǎn)譯器104可將實(shí)行微指令126直接提供至執(zhí)行管線112執(zhí)行,而不需要將這些微指令126儲(chǔ)存于設(shè)置兩者間的存儲(chǔ)器。在圖1的微處理器100的實(shí)施例中,當(dāng)微處理器100執(zhí)行x86或是ARM機(jī)器語(yǔ)言程序時(shí),微處理器100每一次執(zhí)行x86或是ARM指令124時(shí),硬件指令轉(zhuǎn)譯器104就會(huì)將x86或ARM機(jī)器語(yǔ)言指令124轉(zhuǎn)譯為一個(gè)或多個(gè)微指令126。不過(guò),圖8的實(shí)施例則是利用一微指令快取以避免微處理器100每次執(zhí)行x86或ARMISA指令124所會(huì)遭遇到的重復(fù)轉(zhuǎn)譯的問(wèn)題。硬件指令轉(zhuǎn)譯器104的實(shí)施例在圖2會(huì)有更詳細(xì)的說(shuō)明。執(zhí)行管線112執(zhí)行由硬件指令轉(zhuǎn)譯器104提供的實(shí)行微指令126?;旧希瑘?zhí)行管線112是一通用高速微指令處理器。雖然本文所描述的功能是由具有x86/ARM特定特征的執(zhí)行管線112執(zhí)行,但大多數(shù)x86/ARM特定功能其實(shí)是由此微處理器100的其它部分,如硬件指令轉(zhuǎn)譯器104,來(lái)執(zhí)行。在一實(shí)施例中,執(zhí)行管線112執(zhí)行由硬件指令轉(zhuǎn)譯器104接收到的實(shí)行微指令126的寄存器重命名、超純量發(fā)布、與非循序執(zhí)行。執(zhí)行管線112在圖4會(huì)有更詳細(xì)的說(shuō)明。微處理器100的微架構(gòu)包含:(1)微指令集;(2)微指令集的微指令126所能取用的資源集,此資源集是x86與ARMISA的資源的超集(superset);以及(3)微處理器100相應(yīng)于微指令126的執(zhí)行所定義的微例外事件(micro-exception)集,此微例外事件集x86ISA與ARMISA的例外事件的超集。此微架構(gòu)不同于x86ISA與ARMISA。具體來(lái)說(shuō),此微指令集在許多面向是不同于x86ISA與ARMISA的指令集。首先,微指令集的微指令指示執(zhí)行管線112執(zhí)行的操作與x86ISA與ARMISA的指令集的指令指示微處理器執(zhí)行的操作并非一對(duì)一對(duì)應(yīng)。雖然其中許多操作相同,不過(guò),仍有一些微指令集指定的操作并非x86ISA及/或ARMISA指令集所指定。相反地,有一些x86ISA及/或ARMISA指令集指定的操作并非微指令集所指定。其次,微指令集的微指令是以不同于x86ISA與ARMISA指令集的指令的編碼方式進(jìn)行編碼。亦即,雖然有許多相同的操作(如:相加、偏移、加載、返回)在微指令集以及x86與ARMISA指令集中都有指定,微指令集與x86或ARMISA指令集的二進(jìn)制操作碼值對(duì)應(yīng)表并沒(méi)有一對(duì)一對(duì)應(yīng)。微指令集與x86或ARMISA指令集的二進(jìn)制操作碼值對(duì)應(yīng)表相同通常是巧合,其間仍不具有一對(duì)一的對(duì)應(yīng)關(guān)系。第三,微指令集的微指令位字段與x86或是ARMISA指令集的指令位字段也不是一對(duì)一對(duì)應(yīng)。整體而言,微處理器100可執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序指令。然而,執(zhí)行管線112本身無(wú)法執(zhí)行x86或ARMISA機(jī)器語(yǔ)言指令;而是執(zhí)行由x86ISA與ARMISA指令轉(zhuǎn)譯成的微處理器100微架構(gòu)的微指令集的實(shí)行微指令126。然而,雖然此微架構(gòu)與x86ISA以及ARMISA不同,本發(fā)明亦提出其它實(shí)施例將微指令集與其它微架構(gòu)指定的資源開(kāi)放給使用者。在這些實(shí)施例中,此微架構(gòu)可有效地作為在x86ISA與ARMISA外的一個(gè)具有微處理器所能執(zhí)行的機(jī)器語(yǔ)言程序的第三ISA。下表(表1)描述本發(fā)明微處理器100的一實(shí)施例的微指令集的微指令126的一些位字段。下表(表2)描述本發(fā)明微處理器100的一實(shí)施例的微指令集的一些微指令。微處理器100也包含一些微架構(gòu)特定的資源,如微架構(gòu)特定的通用寄存器、媒體寄存器與區(qū)段寄存器(如用于重命名的寄存器或由微碼所使用的寄存器)以及未見(jiàn)于x86或ARMISA的控制寄存器,以及一私人隨機(jī)存取存儲(chǔ)器(PRAM)。此外,此微架構(gòu)可產(chǎn)生例外事件,亦即前述的微例外事件。這些例外事件未見(jiàn)于x86或ARMISA或是由它們所指定,而通常是微指令126與相關(guān)微指令126的重新執(zhí)行(replay)。舉例來(lái)說(shuō),這些情形包含:加載錯(cuò)過(guò)(loadmiss)的情況,其是執(zhí)行管線112假設(shè)加載操作并于錯(cuò)過(guò)時(shí)重新執(zhí)行此加載微指令126;錯(cuò)過(guò)轉(zhuǎn)譯后備緩沖區(qū)(TLB),在查表(pagetablewalk)與轉(zhuǎn)譯后備緩沖區(qū)填滿后,重新執(zhí)行此微指令126;浮點(diǎn)微指令126接收一異常操作數(shù)(denormaloperand)但此操作數(shù)被評(píng)估為正常情況,需在執(zhí)行管線112正?;瞬僮鲾?shù)后重新執(zhí)行此微指令126;一加載微指令126執(zhí)行后檢測(cè)到一個(gè)更早的儲(chǔ)存(store)微指令126與其地址沖突(address-colliding)需要重新執(zhí)行此加載微指令126。需理解的是,本文表1所列的位字段,表2所列的微指令,以及微架構(gòu)指定的資源與微架構(gòu)指定的例外事件,只是作為例示說(shuō)明本發(fā)明的微架構(gòu),而非窮盡本發(fā)明的所有可能實(shí)施例。寄存器文件106包含微指令126所使用的硬件寄存器,以持有資源與/或目的操作數(shù)。執(zhí)行管線112將其結(jié)果128寫(xiě)入寄存器文件106,并由寄存器文件106為微指令126接收操作數(shù)。硬件寄存器是引用(instantiate)x86ISA定義與ARMISA定義的通用寄存器是共享寄存器文件106中的一些寄存器。舉例來(lái)說(shuō),在一實(shí)施例中,寄存器文件106是引用十五個(gè)32位的寄存器,由ARMISA寄存器R0至R14以及x86ISA累積寄存器(EAXregister)至R14D寄存器所共享。因此,若是一第一微指令126將一數(shù)值寫(xiě)入ARMR2寄存器,隨后一后續(xù)的第二微指令126讀取x86累積寄存器將會(huì)接收到與第一微指令126寫(xiě)入相同的數(shù)值,反之亦然。此技術(shù)特征有利于使x86ISA與ARMISA的機(jī)器語(yǔ)言程序得以快速通過(guò)寄存器進(jìn)行溝通。舉例來(lái)說(shuō),假設(shè)在ARM機(jī)器語(yǔ)言操作系統(tǒng)執(zhí)行的ARM機(jī)器語(yǔ)言程序能使指令模式132改變?yōu)閤86ISA,并將控制權(quán)轉(zhuǎn)換至一x86機(jī)器語(yǔ)言程序以執(zhí)行特定功能,因?yàn)閤86ISA可支持一些指令,其執(zhí)行操作的速度快于ARMISA,在這種情形下將有利于執(zhí)行速度的提升。ARM程序透過(guò)寄存器文件106的共享寄存器提供需要的數(shù)據(jù)給x86執(zhí)行程序。反之,x86執(zhí)行程序可將執(zhí)行結(jié)果提供至寄存器文件106的共享寄存器內(nèi),以使ARM程序在x86執(zhí)行程序回復(fù)后可見(jiàn)到此執(zhí)行結(jié)果。相似地,在x86機(jī)器語(yǔ)言操作系統(tǒng)執(zhí)行的x86機(jī)器語(yǔ)言程序可使指令模式132改變?yōu)锳RMISA并將控制權(quán)轉(zhuǎn)換至ARM機(jī)器語(yǔ)言程序;此x86程序可通過(guò)寄存器文件106的共享寄存器提供所需的數(shù)據(jù)給ARM執(zhí)行程序,而此ARM執(zhí)行程序可通過(guò)寄存器文件106的共享寄存器提供執(zhí)行結(jié)果,以使x86程序在ARM執(zhí)行程序回復(fù)后可見(jiàn)到此執(zhí)行結(jié)果。因?yàn)锳RMR15寄存器是一獨(dú)立引用的ARM程序計(jì)數(shù)器寄存器116,因此,引用x86R15D寄存器的第十六個(gè)32位寄存器并不分享給ARMR15寄存器。此外,在一實(shí)施例中,x86的十六個(gè)128位XMM0至XMM15寄存器與十六個(gè)128位進(jìn)階單指令多重?cái)?shù)據(jù)擴(kuò)展(AdvancedSIMD(“Neon”))寄存器的32位區(qū)段是分享給三十二個(gè)32位ARMVFPv3浮點(diǎn)寄存器。寄存器文件106亦引用旗標(biāo)寄存器(即x86EFLAGS寄存器與ARM條件旗標(biāo)寄存器),以及x86ISA與ARMISA所定義的多種控制權(quán)與狀態(tài)寄存器,這些架構(gòu)控制與狀態(tài)寄存器包括x86架構(gòu)的特定模型寄存器(modelspecificregisters,MSRs)與保留給ARM架構(gòu)的協(xié)同處理器(8-15)寄存器。此寄存器文件106亦引用非架構(gòu)寄存器,如用于寄存器重命名或是由微碼234所使用的非架構(gòu)通用寄存器,以及非架構(gòu)x86特定模型寄存器與實(shí)作定義的或是由制造商指定的ARM協(xié)同處理器寄存器。寄存器文件106在圖5會(huì)有更進(jìn)一步的說(shuō)明。存儲(chǔ)器子系統(tǒng)108包含一由高速緩存構(gòu)成的高速緩存階層架構(gòu)(在一實(shí)施例中包含第1層(level-1)指令快取102、第1層(level-1)數(shù)據(jù)快取與第2層混合快取)。此存儲(chǔ)器子系統(tǒng)108包含多種存儲(chǔ)器請(qǐng)求隊(duì)列,如加載、儲(chǔ)存、填入、窺探、合并寫(xiě)入歸并緩沖區(qū)。存儲(chǔ)器子系統(tǒng)亦包含一存儲(chǔ)器管理單元(MMU)。存儲(chǔ)器管理單元具有轉(zhuǎn)譯后備緩沖區(qū)(TLBs),尤以獨(dú)立的指令與數(shù)據(jù)轉(zhuǎn)譯后備緩沖區(qū)為佳。存儲(chǔ)器子系統(tǒng)還包含一查表引擎(tablewalkengine)以獲得虛擬與實(shí)體地址間的轉(zhuǎn)譯,來(lái)回應(yīng)轉(zhuǎn)譯后備緩沖區(qū)的錯(cuò)失。雖然在圖1中指令快取102與存儲(chǔ)器子系統(tǒng)108是顯示為各自獨(dú)立,不過(guò),在邏輯上,指令快取102亦是存儲(chǔ)器子系統(tǒng)108的一部分。存儲(chǔ)器子系統(tǒng)108是設(shè)定使x86與ARM機(jī)器語(yǔ)言程序分享一共同的存儲(chǔ)空間,以使x86與ARM機(jī)器語(yǔ)言程序容易通過(guò)存儲(chǔ)器互相溝通。存儲(chǔ)器子系統(tǒng)108得知指令模式132與環(huán)境模式136,使其能夠在適當(dāng)ISA內(nèi)容中執(zhí)行多種操作。舉例來(lái)說(shuō),存儲(chǔ)器子系統(tǒng)108依據(jù)指令模式指針132指示為x86或ARMISA,來(lái)執(zhí)行特定存儲(chǔ)器存取違規(guī)的檢驗(yàn)(例如過(guò)限檢驗(yàn)(limitviolationcheck))。在另一實(shí)施例中,響應(yīng)環(huán)境模式指針136的改變,存儲(chǔ)器子系統(tǒng)108會(huì)更新(flush)轉(zhuǎn)譯后備緩沖區(qū);不過(guò)在指令模式指針132改變時(shí),存儲(chǔ)器子系統(tǒng)108并不相應(yīng)地更新轉(zhuǎn)譯后備緩沖區(qū),以在前述指令模式指針132與環(huán)境模式指針136分指x86與ARM的第三與第四模式中提供較佳的效能。在另一實(shí)施例中,回應(yīng)一轉(zhuǎn)譯后備緩沖區(qū)錯(cuò)失(TKBmiss),查表引擎依據(jù)環(huán)境模式指針136指示為x86或ARMISA,從而決定利用x86分頁(yè)表或ARM分頁(yè)表來(lái)執(zhí)行一分頁(yè)查表動(dòng)作以取出轉(zhuǎn)譯后備緩沖區(qū)。在另一實(shí)施例中,若是環(huán)境狀態(tài)指標(biāo)136指示為x86ISA,存儲(chǔ)器子系統(tǒng)108檢查會(huì)影響快取策略的x86ISA控制寄存器(如CR0CD與NW位)的架構(gòu)狀態(tài);若是環(huán)境模式指針136指示為ARMISA,則檢查相關(guān)的ARMISA控制寄存器(如SCTLRI與C位)的架構(gòu)模式。在另一實(shí)施例中,若是狀態(tài)指標(biāo)136指示為x86ISA,存儲(chǔ)器子系統(tǒng)108檢查會(huì)影響存儲(chǔ)器管理的x86ISA控制寄存器(如CR0PG位)的架構(gòu)狀態(tài);若是環(huán)境模式指針136指示為ARMISA,則檢查相關(guān)的ARMISA控制寄存器(如SCTLRM位)的架構(gòu)模式。在另一實(shí)施例中,若是狀態(tài)指標(biāo)136指示為x86ISA,存儲(chǔ)器子系統(tǒng)108檢查會(huì)影響對(duì)準(zhǔn)檢測(cè)的x86ISA控制寄存器(如CR0AM位)的架構(gòu)狀態(tài),若是環(huán)境模式指針136指示為ARMISA,則檢查相關(guān)的ARMISA控制寄存器(如SCTLRA位)的架構(gòu)模式。在另一實(shí)施例中,若是狀態(tài)指標(biāo)136指示為x86ISA,存儲(chǔ)器子系統(tǒng)108(以及用于特權(quán)指令的硬件指令轉(zhuǎn)譯器104)檢查當(dāng)前所指定特權(quán)級(jí)(CPL)的x86ISA控制寄存器的架構(gòu)狀態(tài);若是環(huán)境模式指針136指示為ARMISA,則檢查指示使用者或特權(quán)模式的相關(guān)ARMISA控制寄存器的架構(gòu)模式。不過(guò),在一實(shí)施例中,x86ISA與ARMISA分享微處理器100中具有相似功能的控制字節(jié)/寄存器,微處理器100并不對(duì)各個(gè)指令集架構(gòu)引用獨(dú)立的控制字節(jié)/寄存器。雖然配置寄存器122與寄存器文件106在圖標(biāo)中是各自獨(dú)立,不過(guò)配置寄存器122可被理解為寄存器文件106的一部分。配置寄存器122具有一全域配置寄存器,用以控制微處理器100在x86ISA與ARMISA各種不同面向的操作,例如使多種特征生效或失效的功能。全域配置寄存器可使微處理器100執(zhí)行ARMISA機(jī)器語(yǔ)言程序的能力失效,即讓微處理器100成為一個(gè)僅能執(zhí)行x86指令的微處理器100,并可使其它相關(guān)且專屬于ARM的能力(如啟動(dòng)x86(launch-x86)與重置至x86的指令124與本文所稱的實(shí)作定義(implementation-defined)協(xié)同處理器寄存器)失效。全域配置寄存器亦可使微處理器100執(zhí)行x86ISA機(jī)器語(yǔ)言程序的能力失效,亦即讓微處理器100成為一個(gè)僅能執(zhí)行ARM指令的微處理器100,并可使其它相關(guān)的能力(如啟動(dòng)ARM與重置至ARM的指令124與本文所稱的新的非架構(gòu)特定模型寄存器)失效。在一實(shí)施例中,微處理器100在制造時(shí)具有預(yù)設(shè)的配置設(shè)定,如微碼234中的硬式編碼值,此微碼234在啟動(dòng)時(shí)利用此硬式編碼值來(lái)設(shè)定微處理器100的配置,例如寫(xiě)入編碼寄存器122。不過(guò),部分編碼寄存器122是以硬件而非以微碼234進(jìn)行設(shè)定。此外,微處理器100具有多個(gè)熔絲,可由微碼234進(jìn)行讀取。這些熔絲可被熔斷以修改預(yù)設(shè)配置值。在一實(shí)施例中,微碼234讀取熔絲值,對(duì)預(yù)設(shè)值與熔絲值執(zhí)行一非互斥或(exclusive-OR)操作,并將操作結(jié)果寫(xiě)入配置寄存器122。此外,對(duì)于熔絲值修改的效果可利用一微碼234修補(bǔ)而回復(fù)。在微處理器100能夠執(zhí)行x86與ARM程序的情況下,全域配置寄存器可用于確認(rèn)微處理器100(或如圖7所示處理器的多核心部分的一特定核心100)在重置或如圖6A及圖6B所示在響應(yīng)x86形式的INIT指令時(shí),會(huì)以x86微處理器的形態(tài)還是以ARM微處理器的形態(tài)進(jìn)行開(kāi)機(jī)。全域配置寄存器并具有一些位提供起始預(yù)設(shè)值給特定的架構(gòu)控制寄存器,如ARMISASCTLT與CPACR寄存器。圖7所示的多核心的實(shí)施例中僅具有一個(gè)全域配置寄存器,即使各核心的配置可分別設(shè)定,如在指令模式指針132與環(huán)境模式指針136都設(shè)定為x86或ARM時(shí),選擇以x86核心或是ARM核心開(kāi)機(jī)。此外,啟動(dòng)ARM指令126與啟動(dòng)x86指令126可用以在x86與ARM指令模式132間動(dòng)態(tài)切換。在一實(shí)施例中,全域配置寄存器可通過(guò)一x86RDMSR指令對(duì)一新的非架構(gòu)特定模型寄存器進(jìn)行讀取,并且其中部分的控制位可通過(guò)x86WRMSR指令對(duì)前揭新的非架構(gòu)特定模型寄存器的寫(xiě)入來(lái)進(jìn)行寫(xiě)入操作。全域配置寄存器還可通過(guò)ARMMCR/MCRR指令對(duì)一對(duì)應(yīng)至前揭新的非架構(gòu)特定模型寄存器的ARM協(xié)同處理器寄存器進(jìn)行讀取,而其中部分的控制位可通過(guò)ARMMRC/MRRC指令對(duì)應(yīng)至此新的非架構(gòu)特定模型寄存器的ARM協(xié)同處理器寄存器的寫(xiě)入來(lái)進(jìn)行寫(xiě)入操作。配置寄存器122并包含多種不同的控制寄存器從不同面向控制微處理器100的操作。這些非x86(non-x86)/ARM的控制寄存器包括本文所稱的全域控制寄存器、非指令集架構(gòu)控制寄存器、非x86/ARM控制寄存器、通用控制寄存器、以及其它類似的寄存器。在一實(shí)施例中,這些控制寄存器可利用x86RDMSR/WRMSR指令至非架構(gòu)特定模型寄存器(MSRs)進(jìn)行存取、以及利用ARMMCR/MRC(或MCRR/MRRC)指令至新實(shí)作定義的協(xié)同處理器寄存器進(jìn)行存取。舉例來(lái)說(shuō),微處理器100包含非x86/ARM的控制寄存器,以確認(rèn)微型(fine-grained)快取控制,此微型快取控制是小于x86ISA與ARMISA控制寄存器所能提供者。在一實(shí)施例中,微處理器100提供ARMISA機(jī)器語(yǔ)言程序通過(guò)實(shí)作定義ARMISA協(xié)同處理器寄存器存取x86ISA特定模型寄存器,這些實(shí)作定義ARMISA協(xié)同處理器寄存器是直接對(duì)應(yīng)于相對(duì)應(yīng)的x86特定模型寄存器。此特定模型寄存器的地址是指定于ARMISAR1寄存器。此數(shù)據(jù)是由MRC/MRRC/MCR/MCRR指令所指定的ARMISA寄存器讀出或?qū)懭?。在一?shí)施例中,特定模型寄存器的一子集合是以密碼保護(hù),亦即指令在嘗試存取特定模型寄存器時(shí)必須使用密碼。在此實(shí)施例中,密碼是指定于ARMR7:R6寄存器。若是此存取操作導(dǎo)致x86通用保護(hù)錯(cuò)誤,微處理器100隨即產(chǎn)生一ARMISA未定義指令中止模式(UND)例外事件。在一實(shí)施例中,ARM協(xié)同處理器4(地址為:0,7,15,0)存取相對(duì)應(yīng)的x86特定模型寄存器。微處理器100并包含一個(gè)耦接至執(zhí)行管線112的中斷控制器(未圖示)。在一實(shí)施例中,此中斷控制器是一x86型式的先進(jìn)可編程中斷控制器(APIC)。中斷控制器將x86ISA中斷事件對(duì)應(yīng)至ARMISA中斷事件。在一實(shí)施例中,x86INTR對(duì)應(yīng)至ARMIRQ中斷事件;x86NMI是對(duì)應(yīng)至ARMIRQ中斷事件;x86INIT在微處理器100啟動(dòng)時(shí)引發(fā)起動(dòng)重置循序過(guò)程(INIT-resetsequence),無(wú)論那一個(gè)指令集架構(gòu)(x86或ARM)原本是由硬件重置啟動(dòng)的;x86SMI對(duì)應(yīng)至ARMFIQ中斷事件;以及x86STPCLK、A20、Thermal、PREQ、與Rebranch則不對(duì)應(yīng)至ARM中斷事件。ARM機(jī)器語(yǔ)言能通過(guò)新的實(shí)作定義的ARM協(xié)同處理器寄存器存取先進(jìn)可編程中斷控制器的功能。在一實(shí)施例中,APIC寄存器地址是指定于ARMR0寄存器,此APIC寄存器的地址與x86的地址相同。在一實(shí)施例中,ARM協(xié)同處理器6通常用于操作系統(tǒng)執(zhí)行的特權(quán)模式功能,此ARM協(xié)同處理器6的地址為:0,7,nn,0;其中nn為15時(shí)可存取先進(jìn)可編程中斷控制器;nn是12-14以存取總線接口單元,藉以在處理器總線上執(zhí)行8位、16位與32位輸入/輸出循環(huán)。微處理器100并包含一總線接口單元(未圖示),此總線接口單元耦接至存儲(chǔ)器子系統(tǒng)108與執(zhí)行管線112,作為微處理器100與處理器總線的接口。在一實(shí)施例中,處理器總線符合一個(gè)IntelPentium微處理器家族的微處理器總線的規(guī)格。ARM機(jī)器語(yǔ)言程序可通過(guò)新的實(shí)作定義的ARM協(xié)同處理器寄存器存取總線接口單元的功能以在處理器總線上產(chǎn)生輸入/輸出循環(huán),即由輸入輸出總線傳送至輸入輸出空間的一特定地址,藉以與系統(tǒng)芯片組溝通,舉例來(lái)說(shuō),ARM機(jī)器語(yǔ)言程序可產(chǎn)生一SMI認(rèn)可的特定循環(huán)或是關(guān)于C狀態(tài)轉(zhuǎn)換的輸入輸出循環(huán)。在一實(shí)施例中,輸入輸出地址是指定于ARMR0寄存器。在一實(shí)施例中,微處理器100具有電力管理能力,如已知的P-state與C-state管理。ARM機(jī)器語(yǔ)言程序可通過(guò)新的實(shí)作定義ARM協(xié)同處理器寄存器執(zhí)行電力管理。在一實(shí)施例中,微處理器100包含一加密單元(未圖示),此加密單元是位于執(zhí)行管線112內(nèi)。在一實(shí)施例中,此加密單元實(shí)質(zhì)上類似于具有Padlock安全科技功能的VIA微處理器的加密單元。ARM機(jī)器語(yǔ)言程序能通過(guò)新的實(shí)作定義的ARM協(xié)同處理器寄存器取得加密單元的功能,如加密指令。在一實(shí)施例中,ARM協(xié)同處理器5用于通常由使用者模式應(yīng)用程序執(zhí)行的使用者模式功能,例如那些使用加密單元的技術(shù)特征所產(chǎn)生的功能。在微處理器100執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序時(shí),每一次微處理器100執(zhí)行x86或是ARMISA指令124,硬件指令轉(zhuǎn)譯器104就會(huì)執(zhí)行硬件轉(zhuǎn)譯。反之,采用軟件轉(zhuǎn)譯的系統(tǒng)則能在多個(gè)事件中重復(fù)使用同一個(gè)轉(zhuǎn)譯,而非對(duì)之前已轉(zhuǎn)譯過(guò)的機(jī)器語(yǔ)言指令重復(fù)轉(zhuǎn)譯,因而有助于改善效能。此外,圖8的實(shí)施例使用微指令快取以避免微處理器每一次執(zhí)行x86或ARMISA指令124時(shí)可能發(fā)生的重復(fù)轉(zhuǎn)譯操作。本發(fā)明的前述各個(gè)實(shí)施例所描述的方式是配合不同的程序特征及其執(zhí)行環(huán)境,因此確實(shí)有助于改善效能。分支預(yù)測(cè)器114存取之前執(zhí)行過(guò)的x86與ARM分支指令的歷史數(shù)據(jù)。分支預(yù)測(cè)器114依據(jù)之前的快取歷史數(shù)據(jù),來(lái)分析由指令快取102所取得快取線是否存在x86與ARM分支指令以及其目標(biāo)地址。在一實(shí)施例中,快取歷史數(shù)據(jù)包含分支指令124的存儲(chǔ)器地址、分支目標(biāo)地址、一個(gè)方向指針、分支指令的種類、分支指令快取線的起始字節(jié)、以及一個(gè)顯示是否橫跨多個(gè)快取線的指標(biāo)。在一實(shí)施例中,如2011年4月7日提出的美國(guó)第61/473,067號(hào)臨時(shí)申請(qǐng)案“APPARATUSANDMETHODFORUSINGBRANCHPREDICTIONTOEFFICIENTLYEXECUTECONDITIONALNON-BRANCHINSTRUCTIONS”,其提供改善分支預(yù)測(cè)器114的效能以使其能預(yù)測(cè)ARMISA條件非分支指令方向的方法。在一實(shí)施例中,硬件指令轉(zhuǎn)譯器104并包含一靜態(tài)分支預(yù)測(cè)器,可依據(jù)執(zhí)行碼、條件碼的類型、向后(backward)或向前(forward)等等數(shù)據(jù),預(yù)測(cè)x86與ARM分支指令的方向與分支目標(biāo)地址。本發(fā)明亦考慮多種不同的實(shí)施例以實(shí)現(xiàn)x86ISA與ARMISA定義的不同特征的組合。舉例來(lái)說(shuō),在一實(shí)施例中,微處理器100實(shí)現(xiàn)ARM、Thumb、ThumbEE與Jazelle指令集狀態(tài),但對(duì)Jazelle擴(kuò)充指令集則是提供無(wú)意義的實(shí)現(xiàn)(trivialimplementation);微處理器100并實(shí)現(xiàn)下述擴(kuò)充指令集,包含:Thumb-2、VFPv3-D32、進(jìn)階單指令多重?cái)?shù)據(jù)(AdvancedSIMD(Neon))、多重處理、與VMSA;但不實(shí)現(xiàn)下述擴(kuò)充指令集,包含:安全性擴(kuò)充、快速內(nèi)容切換擴(kuò)充、ARM除錯(cuò)(ARM程序可通過(guò)ARMMCR/MRC指令至新的實(shí)作定義協(xié)同處理器寄存器取得x86除錯(cuò)功能)、效能檢測(cè)計(jì)數(shù)器(ARM程序可通過(guò)新的實(shí)作定義協(xié)同處理器寄存器取得x86效能計(jì)數(shù)器)。舉例來(lái)說(shuō),在一實(shí)施例中,微處理器100將ARMSETEND指令視為一無(wú)操作指令(NOP)并且只支持Little-endian數(shù)據(jù)格式。在另一實(shí)施例中,微處理器100并不實(shí)現(xiàn)x86SSE4.2的功能。本發(fā)明考慮多個(gè)實(shí)施例的微處理器100的改良,例如對(duì)臺(tái)灣臺(tái)北的威盛電子股份有限公司所生產(chǎn)的商用微處理器VIANanoTM進(jìn)行改良。此Nano微處理器能夠執(zhí)行x86ISA機(jī)器語(yǔ)言程序,但無(wú)法執(zhí)行ARMISA機(jī)器語(yǔ)言程序。Nano微處理器包含高效能寄存器重命名、超純量指令技術(shù)、非循序執(zhí)行管線與一硬件轉(zhuǎn)譯器以將x86ISA指令轉(zhuǎn)譯為微指令供執(zhí)行管線執(zhí)行。本發(fā)明對(duì)于Nano硬件指令轉(zhuǎn)譯器的改良,使其除了可轉(zhuǎn)譯x86機(jī)器語(yǔ)言指令外,還可將ARMISA機(jī)器語(yǔ)言指令轉(zhuǎn)譯為微指令供執(zhí)行管線執(zhí)行。硬件指令轉(zhuǎn)譯器的改良包含簡(jiǎn)單指令轉(zhuǎn)譯器的改良與復(fù)雜指令轉(zhuǎn)譯器的改良(亦包含微碼在內(nèi))。此外,微指令集可加入新的微指令以支持ARMISA機(jī)器語(yǔ)言指令與微指令間的轉(zhuǎn)譯,并可改善執(zhí)行管線使能執(zhí)行新的微指令。此外,Nano寄存器文件與存儲(chǔ)器子系統(tǒng)亦可經(jīng)改善使其能支持ARMISA,亦包含特定寄存器的共享。分支預(yù)測(cè)單元可通過(guò)改善使其在x86分支預(yù)測(cè)外,亦能適用于ARM分支指令預(yù)測(cè)。此實(shí)施例的優(yōu)點(diǎn)在于,因?yàn)樵诤艽蟮某潭壬吓cISA無(wú)關(guān)(largelyISA-agnostic)的限制,因而只需對(duì)于Nano微處理器的執(zhí)行管線進(jìn)行輕微的修改,即可適用于ARMISA指令。對(duì)于執(zhí)行管線的改良包含條件碼旗標(biāo)的產(chǎn)生與使用方式、用以更新與回報(bào)指令指針寄存器的語(yǔ)意、存取特權(quán)保護(hù)方法、以及多種存儲(chǔ)器管理相關(guān)的功能,如存取違規(guī)檢測(cè)、分頁(yè)與轉(zhuǎn)譯后備緩沖區(qū)(TLB)的使用、與快取策略等。前述內(nèi)容僅為例示,而非限定本發(fā)明,其中部分特征在后續(xù)內(nèi)容會(huì)有進(jìn)一步的說(shuō)明。最后,如前述,x86ISA與ARMISA定義的部分特征可能無(wú)法為前揭對(duì)Nano微處理器進(jìn)行改良的實(shí)施例所支持,這些特征如x86SSE4.2與ARM安全性擴(kuò)充、快速內(nèi)容切換擴(kuò)充、除錯(cuò)與效能計(jì)數(shù)器,其中部分特征在后續(xù)內(nèi)容會(huì)有更進(jìn)一步的說(shuō)明。此外,前揭通過(guò)對(duì)于Nano處理器的改良以支持ARMISA機(jī)器語(yǔ)言程序,為一集成使用設(shè)計(jì)、測(cè)試與制造資源以完成能夠執(zhí)行x86與ARM機(jī)器語(yǔ)言程序的單集成電路產(chǎn)品的實(shí)施例,此單集成電路產(chǎn)品是涵蓋市場(chǎng)絕大多數(shù)既存的機(jī)器語(yǔ)言程序,而符合現(xiàn)今市場(chǎng)潮流。本文所述的微處理器100的實(shí)施例實(shí)質(zhì)上可被配置為x86微處理器、ARM微處理器、或是可同時(shí)執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序微處理器。此微處理器可通過(guò)在單一微處理器100(或是圖7的核心100)上的x86與ARM指令模式132間的動(dòng)態(tài)切換以取得同時(shí)執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序的能力,亦可通過(guò)將多核心微處理100(對(duì)應(yīng)于圖7所示)的一個(gè)或多個(gè)核心配置為ARM核心而一或多個(gè)核心配置為x86核心,亦即通過(guò)在多核心100的每一個(gè)核心上進(jìn)行x86與ARM指令間的動(dòng)態(tài)切換,以取得同時(shí)執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序的能力。此外,傳統(tǒng)上,ARMISA核心是被設(shè)計(jì)作為知識(shí)產(chǎn)權(quán)核心,而被各個(gè)第三者協(xié)力廠商納入其應(yīng)用,如系統(tǒng)芯片與/或嵌入式應(yīng)用。因此,ARMISA并不具有一特定的標(biāo)準(zhǔn)處理器總線,作為ARM核心與系統(tǒng)的其它部分(如芯片組或其它接口設(shè)備)間的接口。有利的是,Nano處理器已具有一高速x86型式處理器總線作為連接至存儲(chǔ)器與接口設(shè)備的接口,以及一存儲(chǔ)器一致性結(jié)構(gòu)可協(xié)同微處理器100在x86計(jì)算機(jī)系統(tǒng)環(huán)境下支持ARMISA機(jī)器語(yǔ)言程序的執(zhí)行。請(qǐng)參照?qǐng)D2,圖中是以方塊圖詳細(xì)顯示圖1的硬件指令轉(zhuǎn)譯器104。此硬件指令轉(zhuǎn)譯器104包含硬件,更具體來(lái)說(shuō),就是晶體管的集合。硬件指令轉(zhuǎn)譯器104包含一指令格式化程序202,由圖1的指令快取102接收指令模式指針132以及x86ISA與ARMISA指令字節(jié)124的區(qū)塊,并輸出格式化的x86ISA與ARMISA指令242;一簡(jiǎn)單指令轉(zhuǎn)譯器(SIT)204接收指令模式指針132與環(huán)境模式指針136,并輸出實(shí)行微指令244與一微碼地址252;一復(fù)雜指令轉(zhuǎn)譯器(CIT)206(亦稱為一微碼單元),接收微碼地址252與環(huán)境模式指針136,并提供實(shí)行微指令246;以及一多工器212,其一輸入端由簡(jiǎn)單指令轉(zhuǎn)譯器204接收微指令244,另一輸入端由復(fù)雜指令轉(zhuǎn)譯器206接收微指令246,并提供實(shí)行微指令126至圖1的執(zhí)行管線112。指令格式化程序202在圖3會(huì)有更詳細(xì)的說(shuō)明。簡(jiǎn)單指令轉(zhuǎn)譯器204包含一x86簡(jiǎn)單指令轉(zhuǎn)譯器222與一ARM簡(jiǎn)單指令轉(zhuǎn)譯器224。復(fù)雜指令轉(zhuǎn)譯器206包含一接收微碼地址252的微程序計(jì)數(shù)器(micro-PC)232,一由微程序計(jì)數(shù)器232接收只讀存儲(chǔ)器地址254的微碼只讀存儲(chǔ)器234,一用以更新微程序計(jì)數(shù)器的微序列器236、一指令間接寄存器(instructionindirectionregister,IIR)235、以及一用以產(chǎn)生復(fù)雜指令轉(zhuǎn)譯器所輸出的實(shí)行微指令246的微轉(zhuǎn)譯器(microtranslator)237。由簡(jiǎn)單指令轉(zhuǎn)譯器204所產(chǎn)生的實(shí)行微指令244與由復(fù)雜指令轉(zhuǎn)譯器206所產(chǎn)生的實(shí)行微指令246都屬于微處理器100的微架構(gòu)的微指令集的微指令126,并且都可直接由執(zhí)行管線112執(zhí)行。多工器212是受到一選擇輸入248所控制。一般的時(shí)候,多工器212會(huì)選擇來(lái)自簡(jiǎn)單指令轉(zhuǎn)譯器204的微指令;然而,當(dāng)簡(jiǎn)單指令轉(zhuǎn)譯器204遭遇一復(fù)雜x86或ARMISA指令242而將控制權(quán)轉(zhuǎn)移、或遭遇陷阱(traps)、以轉(zhuǎn)移至復(fù)雜指令轉(zhuǎn)譯器206時(shí),簡(jiǎn)單指令轉(zhuǎn)譯器204控制選擇輸入248讓多工器212選擇來(lái)自復(fù)雜指令轉(zhuǎn)譯器的微指令246。當(dāng)寄存器配置表(RAT)402(請(qǐng)參照?qǐng)D4)遭遇到一個(gè)微指令126具有一特定位指出其為實(shí)現(xiàn)復(fù)雜ISA指令242序列的最后一個(gè)微指令126時(shí),寄存器配置表402隨即控制選擇輸入248使多工器212回復(fù)至選擇來(lái)自簡(jiǎn)單指令轉(zhuǎn)譯器204的微指令244。此外,當(dāng)重排緩沖器422(請(qǐng)參照?qǐng)D4)準(zhǔn)備要使微指令126引退且該指令的狀態(tài)指出需要選擇來(lái)自復(fù)雜指令器的微指令時(shí),重排緩沖器422控制選擇輸入248使多工器212選擇來(lái)自復(fù)雜指令轉(zhuǎn)譯器206的微指令246。前揭需引退微指令126的情形如:微指令126已經(jīng)導(dǎo)致一例外條件產(chǎn)生。簡(jiǎn)單指令轉(zhuǎn)譯器204接收ISA指令242,并且在指令模式指針132指示為x86時(shí),將這些指令視為x86ISA指令進(jìn)行解碼,而在指令模式指針132指示為ARM時(shí),將這些指令視為ARMISA指令進(jìn)行解碼。簡(jiǎn)單指令轉(zhuǎn)譯器204并確認(rèn)此ISA指令242為簡(jiǎn)單或是復(fù)雜ISA指令。簡(jiǎn)單指令轉(zhuǎn)譯器204能夠?yàn)楹?jiǎn)單ISA指令242,輸出所有用以實(shí)現(xiàn)此ISA指令242的實(shí)行微指令126;也就是說(shuō),復(fù)雜指令轉(zhuǎn)譯器206并不提供任何實(shí)行微指令126給簡(jiǎn)單ISA指令124。反之,復(fù)雜ISA指令124要求復(fù)雜指令轉(zhuǎn)譯器206提供至少部分(若非全部)的實(shí)行微指令126。在一實(shí)施例中,對(duì)ARM與x86ISA指令集的指令124的子集合而言,簡(jiǎn)單指令轉(zhuǎn)譯器204輸出部分實(shí)現(xiàn)x86/ARMISA指令126的微指令244,隨后將控制權(quán)轉(zhuǎn)移至復(fù)雜指令轉(zhuǎn)譯器206,由復(fù)雜指令轉(zhuǎn)譯器206接續(xù)輸出剩下的微指令246來(lái)實(shí)現(xiàn)x86/ARMISA指令126。多工器212是受到控制,首先提供來(lái)自簡(jiǎn)單指令轉(zhuǎn)譯器204的實(shí)行微指令244作為提供至執(zhí)行管線112的微指令126,隨后提供來(lái)自復(fù)雜指令轉(zhuǎn)譯器206的實(shí)行微指令246作為提供至執(zhí)行管線112的微指令126。簡(jiǎn)單指令轉(zhuǎn)譯器204知道由硬件指令轉(zhuǎn)譯器104執(zhí)行,以針對(duì)多個(gè)不同復(fù)雜ISA指令124產(chǎn)生實(shí)行微指令126的多個(gè)微碼程序中的起始微碼只讀存儲(chǔ)器234的地址,并且當(dāng)簡(jiǎn)單指令轉(zhuǎn)譯器204對(duì)一復(fù)雜ISA指令242進(jìn)行解碼時(shí),簡(jiǎn)單指令轉(zhuǎn)譯器204會(huì)提供相對(duì)應(yīng)的微碼程序地址252至復(fù)雜指令轉(zhuǎn)譯器206的微程序計(jì)數(shù)器232。簡(jiǎn)單指令轉(zhuǎn)譯器204輸出實(shí)現(xiàn)ARM與x86ISA指令集中相當(dāng)大比例的指令124所需的微指令244,尤其是對(duì)于需要由x86ISA與ARMISA機(jī)器語(yǔ)言程序來(lái)說(shuō)是較常執(zhí)行的ISA指令124,而只有相對(duì)少數(shù)的指令124需要由復(fù)雜指令轉(zhuǎn)譯器206提供實(shí)行微指令246。依據(jù)一實(shí)施例,主要由復(fù)雜指令轉(zhuǎn)譯器206實(shí)現(xiàn)的x86指令如RDMSR/WRMSR、CPUID、復(fù)雜運(yùn)算指令(如FSQRT與超越指令(transcendentalinstruction))、以及IRET指令;主要由復(fù)雜指令轉(zhuǎn)譯器206實(shí)現(xiàn)的ARM指令如MCR、MRC、MSR、MRS、SRS、與RFE指令。前揭列出的指令并非限定本發(fā)明,僅例示指出本發(fā)明復(fù)雜指令轉(zhuǎn)譯器206所能實(shí)現(xiàn)的ISA指令的種類。當(dāng)指令模式指針132指示為x86,x86簡(jiǎn)單指令轉(zhuǎn)譯器222對(duì)于x86ISA指令242進(jìn)行解碼,并且將其轉(zhuǎn)譯為實(shí)行微指令244;當(dāng)指令模式指針132指示為ARM,ARM簡(jiǎn)單指令轉(zhuǎn)譯器224對(duì)于ARMISA指令242進(jìn)行解碼,并將其轉(zhuǎn)譯為實(shí)行微指令244。在一實(shí)施例中,簡(jiǎn)單指令轉(zhuǎn)譯器204是一可由已知合成工具合成的布爾邏輯門(mén)方塊。在一實(shí)施例中,x86簡(jiǎn)單指令轉(zhuǎn)譯器222與ARM簡(jiǎn)單指令轉(zhuǎn)譯器224是獨(dú)立的布爾邏輯門(mén)方塊;不過(guò),在另一實(shí)施例中,x86簡(jiǎn)單指令轉(zhuǎn)譯器222與ARM簡(jiǎn)單指令轉(zhuǎn)譯器224是位于同一個(gè)布爾邏輯門(mén)方塊。在一實(shí)施例中,簡(jiǎn)單指令轉(zhuǎn)譯器204在單一時(shí)脈周期中轉(zhuǎn)譯最多三個(gè)ISA指令242并提供最多六個(gè)實(shí)行微指令244至執(zhí)行管線112。在一實(shí)施例中,簡(jiǎn)單指令轉(zhuǎn)譯器204包含三個(gè)次轉(zhuǎn)譯器(未圖示),各個(gè)次轉(zhuǎn)譯器轉(zhuǎn)譯單一個(gè)格式化的ISA指令242,其中,第一個(gè)轉(zhuǎn)譯器能夠轉(zhuǎn)譯需要不多于三個(gè)實(shí)行微指令126的格式化ISA指令242;第二個(gè)轉(zhuǎn)譯器能夠轉(zhuǎn)譯需要不多于兩個(gè)實(shí)行微指令126的格式化ISA指令242;第三個(gè)轉(zhuǎn)譯器能后轉(zhuǎn)譯需要不多于一個(gè)實(shí)行微指令126的格式化ISA指令242。在一實(shí)施例中,簡(jiǎn)單指令轉(zhuǎn)譯器204包含一硬件狀態(tài)機(jī)器使其能夠在多個(gè)時(shí)脈周期輸出多個(gè)微指令244以實(shí)現(xiàn)一個(gè)ISA指令242。在一實(shí)施例中,簡(jiǎn)單指令轉(zhuǎn)譯器204并依據(jù)指令模式指針132與/或環(huán)境模式指針136,執(zhí)行多個(gè)不同的例外事件檢測(cè)。舉例來(lái)說(shuō),若是指令模式指針132指示為x86且x86簡(jiǎn)單指令轉(zhuǎn)譯器222對(duì)一個(gè)就x86ISA而言是無(wú)效的ISA指令124進(jìn)行解碼,簡(jiǎn)單指令轉(zhuǎn)譯器204隨即產(chǎn)生一個(gè)x86無(wú)效操作碼例外事件;相似地,若是指令模式指針132指示為ARM且ARM簡(jiǎn)單指令轉(zhuǎn)譯器224對(duì)一個(gè)就ARMISA而言是無(wú)效的ISA指令124進(jìn)行解碼,簡(jiǎn)單指令轉(zhuǎn)譯器204隨即產(chǎn)生一個(gè)ARM未定義指令例外事件。在另一實(shí)施例中,若是環(huán)境模式指針136指示為x86ISA,簡(jiǎn)單指令轉(zhuǎn)譯器204隨即檢測(cè)是否其所遭遇的每個(gè)x86ISA指令242需要一特別特權(quán)級(jí)(particularprivilegelevel),若是,檢測(cè)當(dāng)前特權(quán)級(jí)(CPL)是否滿足此x86ISA指令242所需的特別特權(quán)級(jí),并于不滿足時(shí)產(chǎn)生一例外事件;相似地,若是環(huán)境模式指針136指示為ARMISA,簡(jiǎn)單指令轉(zhuǎn)譯器204隨即檢測(cè)是否每個(gè)格式化ARMISA指令242需要一特權(quán)模式指令,若是,檢測(cè)當(dāng)前的模式是否為特權(quán)模式,并于現(xiàn)在模式為使用者模式時(shí),產(chǎn)生一例外事件。復(fù)雜指令轉(zhuǎn)譯器206對(duì)于特定復(fù)雜ISA指令242亦執(zhí)行類似的功能。復(fù)雜指令轉(zhuǎn)譯器206輸出一系列實(shí)行微指令246至多工器212。微碼只讀存儲(chǔ)器234儲(chǔ)存微碼程序的只讀存儲(chǔ)器指令247。微碼只讀存儲(chǔ)器234輸出只讀存儲(chǔ)器指令247以響應(yīng)由微碼只讀存儲(chǔ)器234取得的下一個(gè)只讀存儲(chǔ)器指令247的地址,并由微程序計(jì)數(shù)器232所持有。一般來(lái)說(shuō),微程序計(jì)數(shù)器232由簡(jiǎn)單指令轉(zhuǎn)譯器204接收其起始值252,以響應(yīng)簡(jiǎn)單指令轉(zhuǎn)譯器204對(duì)于一復(fù)雜ISA指令242的解碼操作。在其它情形,例如響應(yīng)一重置或例外事件,微程序計(jì)數(shù)器232分別接收重置微碼程序地址或適當(dāng)?shù)奈⒋a例外事件處理地址。微程序器236通常依據(jù)只讀存儲(chǔ)器指令247的大小,將微程序計(jì)數(shù)器232更新為微碼程序的序列以及選擇性地更新為執(zhí)行管線112響應(yīng)控制型微指令126(如分支指令)執(zhí)行所產(chǎn)生的目標(biāo)地址,以使指向微碼只讀存儲(chǔ)器234內(nèi)的非程序地址的分支生效。微碼只讀存儲(chǔ)器234是制造于微處理器100的半導(dǎo)體芯片內(nèi)。除了用來(lái)實(shí)現(xiàn)簡(jiǎn)單ISA指令124或部分復(fù)雜ISA指令124的微指令244外,簡(jiǎn)單指令轉(zhuǎn)譯器204也產(chǎn)生ISA指令信息255以寫(xiě)入指令間接寄存器235。儲(chǔ)存于指令間接寄存器235的ISA指令信息255包含關(guān)于被轉(zhuǎn)譯的ISA指令124的信息,例如,確認(rèn)由ISA指令所指定的來(lái)源與目的寄存器的信息以及ISA指令124的格式,如ISA指令124是在存儲(chǔ)器的一操作數(shù)上或是在微處理器100的一架構(gòu)寄存器106內(nèi)執(zhí)行。這樣可藉此使微碼程序能夠變?yōu)橥ㄓ?,亦即不需?duì)于各個(gè)不同的來(lái)源與/或目的架構(gòu)寄存器106使用不同的微碼程序。尤其是,簡(jiǎn)單指令轉(zhuǎn)譯器204知道寄存器文件106的內(nèi)容,包含哪些寄存器是共享寄存器504,而能將x86ISA與ARMISA指令124內(nèi)提供的寄存器信息,通過(guò)ISA指令信息255的使用,轉(zhuǎn)譯至寄存器文件106內(nèi)的適當(dāng)?shù)募拇嫫?。ISA指令信息255包含一移位字段、一立即字段、一常數(shù)字段、各個(gè)來(lái)源操作數(shù)與微指令126本身的重命名信息、用以實(shí)現(xiàn)ISA指令124的一系列微指令126中指示第一個(gè)與最后一個(gè)微指令126的信息、以及儲(chǔ)存由硬件指令轉(zhuǎn)譯器104對(duì)ISA指令124轉(zhuǎn)譯時(shí)所搜集到的有用信息的其它位。微轉(zhuǎn)譯器237由微碼只讀存儲(chǔ)器234與間接指令寄存器235的內(nèi)容接收只讀存儲(chǔ)器指令247,并相應(yīng)地產(chǎn)生實(shí)行微指令246。微轉(zhuǎn)譯器237依據(jù)由間接指令寄存器235接收的信息,如依據(jù)ISA指令124的格式以及由其所指定的來(lái)源與/或目的架構(gòu)寄存器106組合,來(lái)將特定只讀存儲(chǔ)器指令247轉(zhuǎn)譯為不同的微指令246系列。在一些實(shí)施例中,許多ISA指令信息255是與只讀存儲(chǔ)器指令247合并以產(chǎn)生實(shí)行微指令246。在一實(shí)施例中,各個(gè)只讀存儲(chǔ)器指令247大約有40位寬,并且各個(gè)微指令246大約有200位寬。在一實(shí)施例中,微轉(zhuǎn)譯器237最多能夠由一個(gè)微讀存儲(chǔ)器指令247產(chǎn)生三個(gè)微指令246。微轉(zhuǎn)譯器237包含多個(gè)布爾邏輯門(mén)以產(chǎn)生實(shí)行微指令246。使用微轉(zhuǎn)譯器237的優(yōu)點(diǎn)在于,由于簡(jiǎn)單指令轉(zhuǎn)譯器204本身就會(huì)產(chǎn)生ISA指令信息255,微碼只讀存儲(chǔ)器234不需要儲(chǔ)存間接指令寄存器235提供的ISA指令信息255,因而可以降低減少其大小。此外,因?yàn)槲⒋a只讀存儲(chǔ)器234不需要為了各個(gè)不同的ISA指令格式、以及各個(gè)來(lái)源與/或目的架構(gòu)寄存器106的組合,提供一獨(dú)立的程序,微碼只讀存儲(chǔ)器234程序可包含較少的條件分支指令。舉例來(lái)說(shuō),若是復(fù)雜ISA指令124是存儲(chǔ)器格式,簡(jiǎn)單指令轉(zhuǎn)譯器204會(huì)產(chǎn)生微指令244的邏輯編程,其包含將來(lái)源操作數(shù)由存儲(chǔ)器加載一暫時(shí)寄存器106的微指令244,并且微轉(zhuǎn)譯器237會(huì)產(chǎn)生微指令246用以將結(jié)果由暫時(shí)寄存器106儲(chǔ)存至存儲(chǔ)器;然而,若復(fù)雜ISA指令124是寄存器格式,此邏輯編程會(huì)將來(lái)源操作數(shù)由ISA指令124所指定的來(lái)源寄存器移動(dòng)至?xí)簳r(shí)寄存器,并且微轉(zhuǎn)譯器237會(huì)產(chǎn)生微指令246用以將結(jié)果由暫時(shí)寄存器移動(dòng)至由間接指令寄存器235所指定的架構(gòu)目的寄存器106。在一實(shí)施例中,微轉(zhuǎn)譯器237的許多面向是類似于2010年4月23日提出的美國(guó)專利第12/766,244號(hào)申請(qǐng)案,在此是列為參考數(shù)據(jù)。不過(guò),本案的微轉(zhuǎn)譯器237除了x86ISA指令124外,亦經(jīng)改良以轉(zhuǎn)譯ARMISA指令124。值得注意的是,微程序計(jì)數(shù)器232不同于ARM程序計(jì)數(shù)器116與x86指令指針118,亦即微程序計(jì)數(shù)器232并不持有ISA指令124的地址,微程序計(jì)數(shù)器232所持有的地址亦不落于系統(tǒng)存儲(chǔ)器地址空間內(nèi)。此外,更值得注意的是,微指令246是由硬件指令轉(zhuǎn)譯器104所產(chǎn)生,并且直接提供給執(zhí)行管線112執(zhí)行,而非作為執(zhí)行管線112的執(zhí)行結(jié)果128。請(qǐng)參照?qǐng)D3,圖中是以方塊圖詳述圖2的指令格式化器202。指令格式化器202由圖1的指令快取102接收x86ISA與ARMISA指令字節(jié)124區(qū)塊。憑借x86ISA指令長(zhǎng)度可變的特性,x86指令124可以由指令字節(jié)124區(qū)塊的任何字節(jié)開(kāi)始。由于x86ISA容許前綴字節(jié)的長(zhǎng)度會(huì)受到當(dāng)前地址長(zhǎng)度與操作數(shù)長(zhǎng)度預(yù)設(shè)值的影響,因此確認(rèn)快取區(qū)塊內(nèi)的x86ISA指令的長(zhǎng)度與位置的任務(wù)會(huì)更為復(fù)雜。此外,依據(jù)當(dāng)前ARM指令集狀態(tài)322與ARMISA指令124的操作碼,ARMISA指令的長(zhǎng)度不是2字節(jié)就是4字節(jié),因而不是2字節(jié)對(duì)齊就是4字節(jié)對(duì)齊。因此,指令格式化器202由指令字節(jié)124串(stream)擷取不同的x86ISA與ARMISA指令,此指令字節(jié)124串是由指令快取102接收的區(qū)塊所構(gòu)成。也就是說(shuō),指令格式化器202格式化x86ISA與ARMISA指令字節(jié)串,因而大幅簡(jiǎn)化圖2的簡(jiǎn)單指令轉(zhuǎn)譯器對(duì)ISA指令124進(jìn)行解碼與轉(zhuǎn)譯的困難任務(wù)。指令格式化器202包含一預(yù)解碼器302,在指令模式指針132指示為x86時(shí),預(yù)解碼器302預(yù)先將指令字節(jié)124視為x86指令字節(jié)進(jìn)行解碼以產(chǎn)生預(yù)解碼信息,在指令模式指針132指示為ARM時(shí),預(yù)解碼器302預(yù)先將指令字節(jié)124視為ARM指令字節(jié)進(jìn)行解碼以產(chǎn)生預(yù)解碼信息。指令字節(jié)隊(duì)列(IBQ)304接收ISA指令字節(jié)124區(qū)塊以及由預(yù)解碼器302產(chǎn)生的相關(guān)預(yù)解碼信息。一個(gè)由長(zhǎng)度解碼器與漣波邏輯門(mén)306構(gòu)成的陣列接收指令字節(jié)隊(duì)列304底部項(xiàng)目(bottomentry)的內(nèi)容,亦即ISA指令字節(jié)124區(qū)塊與相關(guān)的預(yù)解碼信息。此長(zhǎng)度解碼器與漣波邏輯門(mén)306亦接收指令模式指針132與ARMISA指令集狀態(tài)322。在一實(shí)施例中,ARMISA指令集狀態(tài)322包含ARMISACPSR寄存器的J與T位。為了響應(yīng)其輸入信息,此長(zhǎng)度解碼器與漣波邏輯門(mén)306產(chǎn)生解碼信息。此解碼信息包含ISA指令字節(jié)124區(qū)塊內(nèi)的x86與ARM指令的長(zhǎng)度、x86前綴信息、以及關(guān)于各個(gè)ISA指令字節(jié)124的指針,此指針指出此字節(jié)是否為ISA指令124的起始字節(jié)、終止字節(jié)、以及/或一有效字節(jié)。一多工器隊(duì)列308接收ISA指令字節(jié)124區(qū)塊、由預(yù)解碼器302產(chǎn)生的相關(guān)預(yù)解碼信息、以及由長(zhǎng)度解碼器與漣波邏輯門(mén)306產(chǎn)生的相關(guān)解碼信息??刂七壿?未圖標(biāo))檢驗(yàn)多工器隊(duì)列(MQ)308底部項(xiàng)目的內(nèi)容,并控制多工器312擷取不同的、或格式化的ISA指令與相關(guān)的預(yù)解碼與解碼信息,所擷取的信息是提供至一格式化指令隊(duì)列(FIQ)314。格式化指令隊(duì)列314在格式化ISA指令242與提供至圖2的簡(jiǎn)單指令轉(zhuǎn)譯器204的相關(guān)信息間作為緩沖。在一實(shí)施例中,多工器312在每一個(gè)時(shí)脈周期內(nèi)擷取至多三個(gè)格式化ISA指令與相關(guān)的信息。在一實(shí)施例中,指令格式化程序202在許多方面類似于2009年10月1日提出的美國(guó)專利第12/571,997號(hào)、第12/572,002號(hào)、第12/572,045號(hào)、第12/572,024號(hào)、第12/572,052號(hào)與第12/572,058號(hào)申請(qǐng)案共同揭露的XIBQ、指令格式化程序、與FIQ,這些申請(qǐng)案在此列為參考數(shù)據(jù)。然而,前述專利申請(qǐng)案所揭示的XIBQ、指令格式化程序、與FIQ通過(guò)修改,使其能在格式化x86ISA指令124外,還能格式化ARMISA指令124。長(zhǎng)度解碼器306被修改,使能對(duì)ARMISA指令124進(jìn)行解碼以產(chǎn)生長(zhǎng)度以及起點(diǎn)、終點(diǎn)與有效性的字節(jié)指針。尤其,若是指令模式指針132指示為ARMISA,長(zhǎng)度解碼器306檢測(cè)當(dāng)前ARM指令集狀態(tài)322與ARMISA指令124的操作碼,以確認(rèn)ARM指令124是一個(gè)2位組長(zhǎng)度或是4位組長(zhǎng)度的指令。在一實(shí)施例中,長(zhǎng)度解碼器306包含多個(gè)獨(dú)立的長(zhǎng)度解碼器分別用以產(chǎn)生x86ISA指令124的長(zhǎng)度數(shù)據(jù)以及ARMISA指令124的長(zhǎng)度數(shù)據(jù),這些獨(dú)立的長(zhǎng)度解碼器的輸出再以連線或(wire-ORed)耦接在一起,以提供輸出至漣波邏輯門(mén)306。在一實(shí)施例中,此格式化指令隊(duì)列314包含獨(dú)立的隊(duì)列以持有格式化指令242的多個(gè)互相分離的部分。在一實(shí)施例中,指令格式化程序202在單一時(shí)脈周期內(nèi),提供簡(jiǎn)單指令轉(zhuǎn)譯器204至多三個(gè)格式化ISA指令242。請(qǐng)參照?qǐng)D4,圖中是以方塊圖詳細(xì)顯示圖1的執(zhí)行管線112,此執(zhí)行管線112耦接至硬件指令轉(zhuǎn)譯器104以直接接收來(lái)自圖2的硬件指令轉(zhuǎn)譯器104的實(shí)行微指令。執(zhí)行管線112包含一微指令隊(duì)列401,以接收微指令126;一寄存器配置表402,由微指令隊(duì)列401接收微指令;一指令調(diào)度器404,耦接至寄存器配置表402;多個(gè)保留站406,耦接至指令調(diào)度器404;一指令發(fā)送單元408,耦接至保留站406;一重排緩沖器422,耦接至寄存器配置表402、指令調(diào)度器404與保留站406;以及,執(zhí)行單元424是耦接至保留站406、指令發(fā)送單元408與重排緩沖器422。寄存器配置表402與執(zhí)行單元424接收指令模式指針132。在硬件指令轉(zhuǎn)譯器104產(chǎn)生實(shí)行微指令126的速率不同于執(zhí)行管線112執(zhí)行微指令126的情況下,微指令隊(duì)列401是作為一緩沖器。在一實(shí)施例中,微指令隊(duì)列401包含一個(gè)M至N可壓縮微指令隊(duì)列。此可壓縮微指令隊(duì)列使執(zhí)行管線112能夠在一給定的時(shí)脈周期內(nèi),從硬件指令轉(zhuǎn)譯器104接收至多M個(gè)(在一實(shí)施例中,M是六)微指令126,并且隨后將接收到的微指令126儲(chǔ)存至寬度為N(在一實(shí)施例中,N是三)的隊(duì)列結(jié)構(gòu),以在每個(gè)時(shí)脈周期提供至多N個(gè)微指令126至寄存器配置表402,此寄存器配置表402能夠在每個(gè)時(shí)脈周期處理最多N個(gè)微指令126。微指令隊(duì)列401是可壓縮的,因它不論接收到微指令126的特定時(shí)脈周期為何,皆會(huì)依序?qū)⒂捎布噶钷D(zhuǎn)譯器104所傳送的微指令126時(shí)填滿隊(duì)列的空項(xiàng)目,因而不會(huì)在隊(duì)列項(xiàng)目中留下空洞。此方法的優(yōu)點(diǎn)為能夠充分利用執(zhí)行單元424(請(qǐng)參照?qǐng)D4),因?yàn)樗杀葘?duì)在一不可壓縮寬度M或?qū)挾萂的指令隊(duì)列提供較高的指令儲(chǔ)存效能。具體來(lái)說(shuō),不可壓縮寬度N的隊(duì)列會(huì)需要硬件指令轉(zhuǎn)譯器104,尤其是簡(jiǎn)單指令轉(zhuǎn)譯器204,在之后的時(shí)脈周期內(nèi)會(huì)重復(fù)轉(zhuǎn)譯一個(gè)或多個(gè)已經(jīng)在之前的時(shí)脈周期內(nèi)已經(jīng)被轉(zhuǎn)譯過(guò)的ISA指令124。會(huì)這樣做的原因是,不可壓縮寬度N的隊(duì)列無(wú)法在同一個(gè)時(shí)脈周期接收多于N個(gè)微指令126,而重復(fù)轉(zhuǎn)譯將導(dǎo)致電力耗損。不過(guò),不可壓縮寬度M的隊(duì)列雖然不需要簡(jiǎn)單指令轉(zhuǎn)譯器204重復(fù)轉(zhuǎn)譯,但卻會(huì)在隊(duì)列項(xiàng)目中產(chǎn)生空洞而導(dǎo)致浪費(fèi),因而需要更多列項(xiàng)目以及一個(gè)較大且更耗能的隊(duì)列來(lái)提供相當(dāng)?shù)木彌_能力。寄存器配置表402是由微指令隊(duì)列401接收微指令126并產(chǎn)生與微處理器100內(nèi)進(jìn)行中的微指令126的附屬信息,寄存器配置表402并執(zhí)行寄存器重命名操作來(lái)增加微指令平行處理的能力,以利于執(zhí)行管線112的超純量、非循序執(zhí)行能力。若是ISA指令124指示為x86,寄存器配置表402會(huì)對(duì)應(yīng)于微處理器100的x86ISA寄存器106,產(chǎn)生附屬信息且執(zhí)行相對(duì)應(yīng)的寄存器重命名操作;反之,若是ISA指令124指示為ARM,寄存器配置表402就會(huì)對(duì)應(yīng)于微處理器100的ARMISA寄存器106,產(chǎn)生附屬信息且執(zhí)行相對(duì)應(yīng)的寄存器重命名操作;不過(guò),如前述,部分寄存器106可能是由x86ISA與ARMISA所共享。寄存器配置表402亦在重排緩沖器422中依據(jù)程序順序配置一項(xiàng)目給各個(gè)微指令126,因此重排緩沖器422可使微指令126以及其相關(guān)的x86ISA與ARMISA指令124依據(jù)程序順序進(jìn)行引退,即使微指令126的執(zhí)行對(duì)應(yīng)于其所欲實(shí)現(xiàn)的x86ISA與ARMISA指令124而言是以非循序的方式進(jìn)行的。重排緩沖器422包含一環(huán)形隊(duì)列,此環(huán)形隊(duì)列的各個(gè)項(xiàng)目是用以儲(chǔ)存關(guān)于進(jìn)行中的微指令126的信息,此信息除了其它事項(xiàng),還包含微指令126執(zhí)行狀態(tài)、一個(gè)確認(rèn)微指令126是由x86或是ARMISA指令124所轉(zhuǎn)譯的標(biāo)簽、以及用以儲(chǔ)存微指令126的結(jié)果的儲(chǔ)存空間。指令調(diào)度器404由寄存器配置表402接收寄存器重命名微指令126與附屬信息,并依據(jù)指令的種類以及執(zhí)行單元424的可利用性,將微指令126及其附屬信息分派至關(guān)聯(lián)于適當(dāng)?shù)膱?zhí)行單元424的保留站406。此執(zhí)行單元424將會(huì)執(zhí)行微指令126。對(duì)各個(gè)在保留站406中等待的微指令126而言,指令發(fā)布單元408測(cè)得相關(guān)執(zhí)行單元424可運(yùn)用且其附屬信息被滿足(如來(lái)源操作數(shù)可被運(yùn)用)時(shí),即發(fā)布微指令126至執(zhí)行單元424供執(zhí)行。如前述,指令發(fā)布單元408所發(fā)布的微指令126,可以非循以及以超純量方式來(lái)執(zhí)行。在一實(shí)施例中,執(zhí)行單元424包含整數(shù)/分支單元412、媒體單元414、加載/儲(chǔ)存單元416、以及浮點(diǎn)單元418。執(zhí)行單元424執(zhí)行微指令126以產(chǎn)生結(jié)果128并提供至重排緩沖器422。雖然執(zhí)行單元424并不大受到其所執(zhí)行的微指令126是由x86或是ARMISA指令124轉(zhuǎn)譯而來(lái)的影響,執(zhí)行單元424仍會(huì)使用指令模式指針132與環(huán)境模式指針136以執(zhí)行相對(duì)較小的微指令126子集。舉例來(lái)說(shuō),執(zhí)行管線112管理旗標(biāo)的產(chǎn)生,其管理會(huì)依據(jù)指令模式指針132指示為x86ISA或是ARMISA而有些微不同,并且,執(zhí)行管線112依據(jù)指令模式指針132指示為x86ISA或是ARMISA,對(duì)x86EFLAGS寄存器或是程序狀態(tài)寄存器(PSR)內(nèi)的ARM條件碼旗標(biāo)進(jìn)行更新。在另一實(shí)例中,執(zhí)行管線112對(duì)指令模式指針132進(jìn)行取樣以決定去更新x86指令指針(IP)118或ARM程序計(jì)數(shù)器(PC)116,還是更新共通的指令地址寄存器。此外,執(zhí)行管線122亦藉此來(lái)決定使用x86或是ARM語(yǔ)意執(zhí)行前述操作。一旦微指令126變成微處理器100中最舊的已完成微指令126(亦即,在重排緩沖器422隊(duì)列的排頭且呈現(xiàn)已完成的狀態(tài))且其它用以實(shí)現(xiàn)相關(guān)的ISA指令124的所有微指令126均已完成,重排緩沖器422就會(huì)引退ISA指令124并釋放與實(shí)行微指令126相關(guān)的項(xiàng)目。在一實(shí)施例中,微處理器100可在一時(shí)脈周期內(nèi)引退至多三個(gè)ISA指令124。此處理方法的優(yōu)點(diǎn)在于,執(zhí)行管線112是一高效能、通用執(zhí)行引擎,其可執(zhí)行支持x86ISA與ARMISA指令124的微處理器100微架構(gòu)的微指令126。請(qǐng)參照?qǐng)D5,圖中是以方塊圖詳述圖1的寄存器文件106。就一較佳實(shí)施例而言,寄存器文件106為獨(dú)立的寄存器區(qū)塊實(shí)體。在一實(shí)施例中,通用寄存器是由一具有多個(gè)讀出端口與寫(xiě)入端口的寄存器文件實(shí)體來(lái)實(shí)現(xiàn);其它寄存器可在實(shí)體上獨(dú)立于此通用寄存器文件以及其它會(huì)存取這些寄存器但具有較少的讀取寫(xiě)入端口的鄰近功能方塊。在一實(shí)施例中,部分非通用寄存器,尤其是那些不直接控制微處理器100的硬件而僅儲(chǔ)存微碼234會(huì)使用到的數(shù)值的寄存器(如部分x86MSR或是ARM協(xié)同處理器寄存器),則是在一個(gè)微碼234可存取的私有隨機(jī)存取存儲(chǔ)器(PRAM)內(nèi)實(shí)現(xiàn)。不過(guò),x86ISA與ARMISA程序者無(wú)法見(jiàn)到此私有隨機(jī)存取存儲(chǔ)器,亦即此存儲(chǔ)器并不在ISA系統(tǒng)存儲(chǔ)器地址空間內(nèi)。總括來(lái)說(shuō),如圖5所示,寄存器文件106在邏輯上是區(qū)分為三種,亦即ARM特定的寄存器502、x86特定的寄存器504、以及共享寄存器506。在一實(shí)施例中,共享寄存器506包含十五個(gè)32位寄存器,由ARMISA寄存器R0至R14以及x86ISAEAX至R14D寄存器所共享,另外有十六個(gè)128位寄存器由x86ISAXMM0至XMM15寄存器以及ARMISA進(jìn)階單指令多重?cái)?shù)據(jù)擴(kuò)展(Neon)寄存器所共享,這些寄存器的部分是重迭于三十二個(gè)32位ARMVFPv3浮點(diǎn)寄存器。如前文圖1所述,通用寄存器的共享意指由x86ISA指令124寫(xiě)入一共享寄存器的數(shù)值,會(huì)被ARMISA指令124在隨后讀取此共享寄存器時(shí)見(jiàn)到,反之亦然。此方式的優(yōu)點(diǎn)在于,能夠使x86ISA與ARMISA程序通過(guò)寄存器互相溝通。此外,如前述,x86ISA與ARMISA的架構(gòu)控制寄存器的特定位亦可被引用為共享寄存器506。如前述,在一實(shí)施例中,x86特定模型寄存器可被ARMISA指令124通過(guò)實(shí)作定義協(xié)同處理器寄存器存取,因而是由x86ISA與ARMISA所共享。此共享寄存器506可包含非架構(gòu)寄存器,例如,條件旗標(biāo)的非架構(gòu)同等物,這些非架構(gòu)寄存器同樣由寄存器配置表402重命名。硬件指令轉(zhuǎn)譯器104知道哪一個(gè)寄存器是由x86ISA與ARMISA所共享,因而會(huì)產(chǎn)生實(shí)行微指令126來(lái)存取正確的寄存器。ARM特定的寄存器502包含ARMISA所定義但未被包含于共享寄存器506的其它寄存器,而x86特定的寄存器502包含x86ISA所定義但未被包含于共享寄存器506的其它寄存器。舉例來(lái)說(shuō),ARM特定的寄存器502包含ARM程序計(jì)數(shù)器116、CPSR、SCTRL、FPSCR、CPACR、協(xié)同處理器寄存器、多種例外事件模式的備用通用寄存器與程序狀態(tài)保存寄存器(savedprogramstatusregisters,SPSRs)等等。前文列出的ARM特定寄存器502并非為限定本案發(fā)明,僅為例示以說(shuō)明本發(fā)明。另外,舉例來(lái)說(shuō),x86特定的寄存器504包含x86指令指針(EIP或IP)118、EFLAGS、R15D、64位的R0至R15寄存器的上面32位(亦即未落于共享寄存器506的部分)、區(qū)段寄存器(SS,CS,DS,ES,FS,GS)、x87FPU寄存器、MMX寄存器、控制寄存器(如CR0-CR3、CR8)等。前文列出的x86特定寄存器504并非為限定本案發(fā)明,僅為例示以說(shuō)明本發(fā)明。在一實(shí)施例中,微處理器100包含新的實(shí)作定義ARM協(xié)同處理器寄存器,在指令模式指針132指示為ARMISA時(shí),此實(shí)作定義協(xié)同處理器寄存器可被存取以執(zhí)行x86ISA相關(guān)的操作。這些操作包含但不限于:將微處理器100重置為一x86ISA處理器(重置至x86指令)的能力;將微處理器100初始化為x86特定的狀態(tài),將指令模式指針132切換至x86,并開(kāi)始在一特定x86目標(biāo)地址擷取x86指令124(啟動(dòng)至x86指令)的能力;存取前述全域配置寄存器的能力;存取x86特定寄存器(如EFLAGS)的能力,此x86寄存器是指定在ARMR0寄存器中,存取電力管理(如P狀態(tài)與C狀態(tài)的轉(zhuǎn)換),存取處理器總線功能(如輸入/輸出循環(huán))、中斷控制器的存取、以及加密加速功能的存取。此外,在一實(shí)施例中,微處理器100包含新的x86非架構(gòu)特定模型寄存器,在指令模式指針132指示為x86ISA時(shí),此非架構(gòu)特定模型寄存器可被存取以執(zhí)行ARMISA相關(guān)的操作。這些操作包含但不限于:將微處理器100重置為一ARMISA處理器(重置至ARM指令)的能力;將微處理器100初始化為ARM特定的狀態(tài),將指令模式指針132切換至ARM,且開(kāi)始在一特定ARM目標(biāo)地址擷取ARM指令124(啟動(dòng)至ARM指令)的能力;存取前述全域配置寄存器的能力;存取ARM特定寄存器(如CPSR)的能力,此ARM寄存器是指定在EAX寄存器內(nèi)。請(qǐng)參照?qǐng)D6A與6B,圖中顯示一流程說(shuō)明圖1的微處理器100的操作程序。此流程始于步驟602。如步驟602所示,微處理器100是被重置??上蛭⑻幚砥?00的重置輸入端發(fā)出信號(hào)來(lái)進(jìn)行此重置操作。此外,在一實(shí)施例中,此微處理器總線是一x86型式的處理器總線,此重置操作可由x86型式的INIT命令進(jìn)行。響應(yīng)此重置操作,微碼234的重置程序是被調(diào)用來(lái)執(zhí)行。此重置微碼的操作包含:(1)將x86特定的狀態(tài)504初始化為x86ISA所指定的預(yù)設(shè)數(shù)值;(2)將ARM特定的狀態(tài)502初始化為ARMISA所指定的預(yù)設(shè)數(shù)值;(3)將微處理器100的非ISA特定的狀態(tài)初始化為微處理器100制造商所指定的預(yù)設(shè)數(shù)值;(4)將共享ISA狀態(tài)506,如GPRs,初始化為x86ISA所指定的預(yù)設(shè)數(shù)值;以及(5)將指令模式指針132與環(huán)境模式指針136設(shè)定為指示x86ISA。在另一實(shí)施例中,不同于前揭操作(4)與(5),此重置微碼將共享ISA狀態(tài)506初始化為ARMISA特定的預(yù)設(shè)數(shù)值,并將指令模式指針132與環(huán)境模式指針136設(shè)定為指示ARMISA。在此實(shí)施例中,步驟638與642的操作不需要被執(zhí)行,并且,在步驟614之前,此重置微碼會(huì)將共享ISA狀態(tài)506初始化為x86ISA所指定的預(yù)設(shè)數(shù)值,并將指令模式指針132與環(huán)境模式指針136設(shè)定為指示x86ISA。接下來(lái)進(jìn)入步驟604。在步驟604,重置微碼確認(rèn)微處理器100是配置為一個(gè)x86處理器或是一個(gè)ARM處理器來(lái)進(jìn)行開(kāi)機(jī)。在一實(shí)施例中,如前述,預(yù)設(shè)ISA開(kāi)機(jī)模式是硬式編碼于微碼,不過(guò)可通過(guò)熔斷配置熔絲的方式,或利用一微碼修補(bǔ)來(lái)修改。在一實(shí)施例中,此預(yù)設(shè)ISA開(kāi)機(jī)模式作為一外部輸入提供至微處理器100,例如一外部輸入接腳。接下來(lái)進(jìn)入步驟606。在步驟606中,若是預(yù)設(shè)ISA開(kāi)機(jī)模式為x86,就會(huì)進(jìn)入步驟614;反之,若是預(yù)設(shè)開(kāi)機(jī)模式為ARM,就會(huì)進(jìn)入步驟638。在步驟614中,重置微碼使微處理器100開(kāi)始由x86ISA指定的重置向量地址擷取x86指令124。接下來(lái)進(jìn)入步驟616。在步驟616中,x86系統(tǒng)軟件(如BIOS)是配置微處理器100來(lái)使用如x86ISARDMSR與WRMSR指令124。接下來(lái)進(jìn)入步驟618。在步驟618中,x86系統(tǒng)軟件執(zhí)行一重置至ARM的指令124。此重置至ARM的指令使微處理器100重置并以一ARM處理器的狀態(tài)離開(kāi)重置程序。然而,因?yàn)閤86特定狀態(tài)504以及非ISA特定配置狀態(tài)不會(huì)因?yàn)橹刂弥罙RM的指令126而改變,此方式有利于使x86系統(tǒng)固件執(zhí)行微處理器100的初步設(shè)定并使微處理器100隨后以ARM處理器的狀態(tài)重開(kāi)機(jī),而同時(shí)還能使x86系統(tǒng)軟件執(zhí)行的微處理器100的非ARM配置配置維持完好。藉此,此方法能夠使用“小型的”微開(kāi)機(jī)碼來(lái)執(zhí)行ARM操作系統(tǒng)的開(kāi)機(jī)程序,而不需要使用微開(kāi)機(jī)碼來(lái)解決如何配置微處理器100的復(fù)雜問(wèn)題。在一實(shí)施例中,此重置至ARM指令系一x86WRMSR指令至一新的非架構(gòu)特定模型寄存器。接下來(lái)進(jìn)入步驟622。在步驟622,簡(jiǎn)單指令轉(zhuǎn)譯器204進(jìn)入陷阱至重置微碼,以響應(yīng)復(fù)雜重置至ARM(complexreset-to-ARM)指令124。此重置微碼使ARM特定狀態(tài)502初始化至由ARMISA指定的預(yù)設(shè)數(shù)值。不過(guò),重置微碼并不修改微處理器100的非ISA特定狀態(tài),因而有利于保存步驟616執(zhí)行所需的配置設(shè)定。此外,重置微碼使共享ISA狀態(tài)506初始化至ARMISA指定的預(yù)設(shè)數(shù)值。最后,重置微碼設(shè)定指令模式指針132與環(huán)境模式指針136以指示ARMISA。接下來(lái)進(jìn)入步驟624。在步驟624中,重置微碼使微處理器100開(kāi)始在x86ISAEDX:EAX寄存器指定的地址擷取ARM指令124。此流程結(jié)束于步驟624。在步驟638中,重置微碼將共享ISA狀態(tài)506,如GPRs,初始化至ARMISA指定的預(yù)設(shè)數(shù)值。接下來(lái)進(jìn)入步驟642。在步驟642中,重置微碼設(shè)定指令模式指針132與環(huán)境模式指針136以指示ARMISA。接下來(lái)進(jìn)入步驟644。在步驟644中,重置微碼使微處理器100開(kāi)始在ARMISA指定的重置向量地址擷取ARM指令124。此ARMISA定義兩個(gè)重置向量地址,并可由一輸入來(lái)選擇。在一實(shí)施例中,微處理器100包含一外部輸入,以在兩個(gè)ARMISA定義的重置向量地址間進(jìn)行選擇。在另一實(shí)施例中,微碼234包含在兩個(gè)ARMISA定義的重置向量地址間的一預(yù)設(shè)選擇,此預(yù)設(shè)選則可通過(guò)熔斷熔絲以及/或是微碼修補(bǔ)來(lái)修改。接下來(lái)進(jìn)入步驟646。在步驟646中,ARM系統(tǒng)軟件設(shè)定微處理器100來(lái)使用特定指令,如ARMISAMCR與MRC指令124。接下來(lái)進(jìn)入步驟648。在步驟648中,ARM系統(tǒng)軟件執(zhí)行一重置至x86的指令124,來(lái)使微處理器100重置并以一x86處理器的狀態(tài)離開(kāi)重置程序。然而,因?yàn)锳RM特定狀態(tài)502以及非ISA特定配置狀態(tài)不會(huì)因?yàn)橹刂弥義86的指令126而改變,此方式有利于使ARM系統(tǒng)固件執(zhí)行微處理器100的初步設(shè)定并使微處理器100隨后以x86處理器的狀態(tài)重開(kāi)機(jī),而同時(shí)還能使由ARM系統(tǒng)軟件執(zhí)行的微處理器100的非x86配置配置維持完好。藉此,此方法能夠使用“小型的”微開(kāi)機(jī)碼來(lái)執(zhí)行x86操作系統(tǒng)的開(kāi)機(jī)程序,而不需要使用微開(kāi)機(jī)碼來(lái)解決如何配置微處理器100的復(fù)雜問(wèn)題。在一實(shí)施例中,此重置至x86指令系一ARMMRC/MRCC指令至一新的實(shí)作定義協(xié)同處理器寄存器。接下來(lái)進(jìn)入步驟652。在步驟652中,簡(jiǎn)單指令轉(zhuǎn)譯器204進(jìn)入陷阱至重置微碼,以響應(yīng)復(fù)雜重置至x86指令124。重置微碼使x86特定狀態(tài)504初始化至x86ISA所指定的預(yù)設(shè)數(shù)值。不過(guò),重置微碼并不修改微處理器100的非ISA特定狀態(tài),此處理有利于保存步驟646所執(zhí)行的配置設(shè)定。此外,重置微碼使共享ISA狀態(tài)506初始化至x86ISA所指定的預(yù)設(shè)數(shù)值。最后,重置微碼設(shè)定指令模式指針132與環(huán)境模式指針136以指示x86ISA。接下來(lái)進(jìn)入步驟654。在步驟654中,重置微碼使微處理器100開(kāi)始在ARMISAR1:R0寄存器所指定的地址擷取ARM指令124。此流程終止于步驟654。請(qǐng)參照?qǐng)D7,圖中是以一方塊圖說(shuō)明本發(fā)明的一雙核心微處理器700。此雙核心微處理器700包含兩個(gè)處理核心100,各個(gè)核心100包含圖1的微處理器100所具有的元件,藉此,各個(gè)核心均可執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序。這些核心100可被設(shè)定為兩個(gè)核心100都執(zhí)行x86ISA程序、兩個(gè)核心100都執(zhí)行ARMISA程序、或是一個(gè)核心100執(zhí)行x86ISA程序而另一個(gè)核心100則是執(zhí)行ARMISA程序。在微處理器700的操作過(guò)程中,前述三種設(shè)定方式可混合且動(dòng)態(tài)改變。如圖6A及圖6B的說(shuō)明內(nèi)容所述,各個(gè)核心100對(duì)于其指令模式指針132與環(huán)境模式指針136均具有一預(yù)設(shè)數(shù)值,此預(yù)設(shè)數(shù)值可利用熔絲或微碼修補(bǔ)做修改,藉此,各個(gè)核心100可以獨(dú)立地通過(guò)重置改變?yōu)閤86或是ARM處理器。雖然圖7的實(shí)施例僅具有二個(gè)核心100,在其它實(shí)施例中,微處理器700可具有多于二個(gè)核心100,而各個(gè)核心均可執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序。請(qǐng)參照?qǐng)D8,圖中是以一方塊圖說(shuō)明本發(fā)明另一實(shí)施例的可執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序的微處理器100。圖8的微處理器100系類似于圖1的微處理器100,其中的元件編號(hào)亦相似。然而,圖8的微處理器100亦包含一微指令快取892,此微指令快取892存取由硬件指令轉(zhuǎn)譯器104產(chǎn)生且直接提供給執(zhí)行管線112的微指令126。微指令快取892是由指令擷取單元114所產(chǎn)生的擷取地址做索引。若是擷取地址134命中微指令快取892,執(zhí)行管線112內(nèi)的多工器(未圖示)就選擇來(lái)自微指令快取892的微指令126,而非來(lái)自硬件指令轉(zhuǎn)譯器104的微指令126;反之,多工器則是選擇直接由硬件指令轉(zhuǎn)譯器104提供的微指令126。微指令快取的操作,通常亦稱為追蹤快取,是微處理器設(shè)計(jì)的
技術(shù)領(lǐng)域
所已知的技術(shù)。微指令快取892所帶來(lái)的優(yōu)點(diǎn)在于,由微指令快取892擷取微指令126所需的時(shí)間通常會(huì)少于由指令快取102擷取指令124并且利用硬件指令轉(zhuǎn)譯器將其轉(zhuǎn)譯為微指令126的時(shí)間。在圖8的實(shí)施例中,微處理器100在執(zhí)行x86或是ARMISA機(jī)器語(yǔ)言程序時(shí),硬件指令轉(zhuǎn)譯器104不需要在每次執(zhí)行x86或ARMISA指令124時(shí)都執(zhí)行硬件轉(zhuǎn)譯,亦即當(dāng)實(shí)行微指令126已經(jīng)存在于微指令快取892,就不需要執(zhí)行硬件轉(zhuǎn)譯。在此所述的微處理器的實(shí)施例的優(yōu)點(diǎn)在于,其通過(guò)內(nèi)建的硬件指令轉(zhuǎn)譯器來(lái)將x86ISA與ARMISA指令轉(zhuǎn)譯為微指令集的微指令,而能執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序,此微指令集不同于x86ISA與ARMISA指令集,且微指令可利用微處理器的共享的執(zhí)行管線來(lái)執(zhí)行以提供實(shí)行微指令。在此所述的微處理器的實(shí)施例的優(yōu)點(diǎn)在于,通過(guò)協(xié)同利用大量與ISA無(wú)關(guān)的執(zhí)行管線來(lái)執(zhí)行由x86ISA與ARMISA指令硬件轉(zhuǎn)譯來(lái)的微指令,微處理器的設(shè)計(jì)與制造所需的資源會(huì)少于兩個(gè)獨(dú)立設(shè)計(jì)制造的微處理器(亦即一個(gè)能夠執(zhí)行x86ISA機(jī)器語(yǔ)言程序,一個(gè)能夠執(zhí)行ARMISA機(jī)器語(yǔ)言程序)所需的資源。此外,這些微處理器的實(shí)施例中,尤其是那些使用超純量非循序執(zhí)行管線的微處理器,具有潛力能提供相較于既有ARMISA處理器更高的效能。此外,這些微處理器的實(shí)施例,相較于采用軟件轉(zhuǎn)譯器的系統(tǒng),亦在x86與ARM的執(zhí)行上可更具潛力地提供更高的效能。最后,由于微處理器可執(zhí)行x86ISA與ARMISA機(jī)器語(yǔ)言程序,此微處理器有利于建構(gòu)一個(gè)能夠高效地同時(shí)執(zhí)行x86與ARM機(jī)器語(yǔ)言程序的系統(tǒng)。條件算術(shù)與邏輯單元(CONDITIONALALU)指令對(duì)微處理器而言,在指令集中內(nèi)含讓指令被條件執(zhí)行的功能是令人想要的。條件執(zhí)行指令的意思就是,指令會(huì)指定一條件(如零、或負(fù)、或大于),如果滿足條件旗標(biāo),此條件就會(huì)由微處理器執(zhí)行,如果不滿足條件旗標(biāo),條件就不會(huì)執(zhí)行。如前述,ARMISA不僅只提供此功能至分支指令,還提供至其指令集中的大部分的指令中。被條件執(zhí)行的指令會(huì)指定來(lái)自通用寄存器的來(lái)源操作數(shù),以產(chǎn)生一結(jié)果寫(xiě)入通用目地寄存器。專利權(quán)人為ARMLimited,ofCambridge,GreatBritain的美國(guó)第7,647,480號(hào)專利案即描述一處理?xiàng)l件指令的數(shù)據(jù)處理裝置。一般而言,一管線處理單元執(zhí)行一條件指令以產(chǎn)生一結(jié)果數(shù)據(jù)數(shù)值。此結(jié)果數(shù)據(jù)數(shù)值在條件滿足時(shí)顯示條件指令指定的計(jì)算的結(jié)果,而在條件不滿足時(shí)顯示儲(chǔ)存于目的寄存器的現(xiàn)今數(shù)據(jù)數(shù)值。兩個(gè)可能的解決方案系描述于下列段落。在第一個(gè)解決方案中,指令集內(nèi)的各個(gè)條件指令被限制為,該指令條件所指定的寄存器是同時(shí)為來(lái)源寄存器以及目的寄存器。使用此方式,條件指令只會(huì)占據(jù)寄存器文件的兩個(gè)讀出埠,即提供現(xiàn)今目的寄存器數(shù)值作為一來(lái)源操作數(shù),以及提供其它來(lái)源操作數(shù)。因此,此第一個(gè)解決方案可進(jìn)一步降低支持管線處理單元執(zhí)行條件指令所需的最低限度的寄存器文件讀出端口數(shù)量。第二個(gè)解決方案移除第一個(gè)解決方案中對(duì)于條件指令的限制,藉此,條件指令可以指定獨(dú)立的目的寄存器與來(lái)源寄存器。第二個(gè)解決方案需要使用寄存器文件一個(gè)額外的讀出埠,以在單一周期內(nèi)能讀取條件指令所需的操作數(shù)數(shù)據(jù)數(shù)值(即來(lái)自寄存器文件的來(lái)源操作數(shù)與目的操作數(shù))。因?yàn)榈诙€(gè)解決方案不僅需要為額外的讀出端口付出成本,還需要較大數(shù)量的位來(lái)指定條件指令與更為復(fù)雜的數(shù)據(jù)路徑,美國(guó)專利第7,647,480號(hào)專利案系選擇第一個(gè)解決方案為其標(biāo)的。具體來(lái)說(shuō),此數(shù)據(jù)路徑需要為來(lái)自寄存器文件的三個(gè)輸入路徑提供邏輯處理,并且還可能需要導(dǎo)向邏輯以耦接至此三個(gè)路徑中的任何一個(gè)。在此提出的實(shí)施例的優(yōu)點(diǎn)在于,其能使條件指令指定不同于目的寄存器的來(lái)源操作數(shù)寄存器,并且不需要在寄存器文件使用一個(gè)額外的讀出端口。一般而言,依據(jù)本發(fā)明的實(shí)施例,圖1的微處理器100的硬件指令轉(zhuǎn)譯器104將一條件執(zhí)行ISA指令124轉(zhuǎn)譯為由一個(gè)或多個(gè)微指令126構(gòu)成的序列以供執(zhí)行管線112執(zhí)行。執(zhí)行此序列的最后一個(gè)微指令126的執(zhí)行單元424接收到由條件指令124指定的目的寄存器的原本數(shù)值,以確認(rèn)條件是否滿足。前一個(gè)微指令126,或是最后一個(gè)微指令126本身,會(huì)對(duì)來(lái)源操作數(shù)執(zhí)行一操作以產(chǎn)生一結(jié)果。若是條件不滿足,執(zhí)行此序列的最后一個(gè)微指令126的執(zhí)行單元424會(huì)將此原本數(shù)值寫(xiě)回目的寄存器,而非將結(jié)果數(shù)值寫(xiě)入目的寄存器。在本發(fā)明的實(shí)施例中,條件ALU指令系一ISA指令124指示微處理器100對(duì)一個(gè)以上的來(lái)源操作數(shù)去執(zhí)行一算術(shù)或邏輯操作,以產(chǎn)生一結(jié)果并將此結(jié)果寫(xiě)入一目的寄存器。其它種類的條件指令124亦可能被微處理器100的ISA指令集所支持,例如條件分支指令124或是條件加載/儲(chǔ)存指令124,這些指令有別于條件ALU指令124。由硬件指令轉(zhuǎn)譯器104響應(yīng)遭遇到的條件ALU指令124所送出序列中的微指令126的數(shù)量與類型,是由兩個(gè)特點(diǎn)所定性。第一個(gè)特點(diǎn)是,條件ALU指令124是否指定來(lái)源操作數(shù)之一是被施以預(yù)移位操作。在一實(shí)施例中,預(yù)移位操作舉例來(lái)說(shuō)系包含ARM架構(gòu)參考手冊(cè)第A8-10頁(yè)至A8-12頁(yè)描述的操作。若是條件ALU指令124指定一預(yù)移位操作,硬件指令轉(zhuǎn)譯器104產(chǎn)生一移位微指令126(在圖10起標(biāo)示為SHF)作為序列中的第一個(gè)微指令126。此移位微指令126執(zhí)行此預(yù)移位操作以產(chǎn)生一移位結(jié)果寫(xiě)入一暫時(shí)寄存器(temporaryregister),以提供予序列中后續(xù)微指令126之使用。第二個(gè)特點(diǎn)是,是否由條件ALU指令124指定的目的寄存器亦是這些來(lái)源操作數(shù)寄存器的其中之一。若是,硬件指令轉(zhuǎn)譯器104進(jìn)行一優(yōu)化程序來(lái)將條件ALU指令124轉(zhuǎn)譯為一個(gè)相較于未指定目的寄存器為來(lái)源操作數(shù)寄存器其中之一的條件ALU指令124所產(chǎn)生者少一個(gè)微指令126的數(shù)量。此程序主要系描述于第21至28圖。此外,條件ALU指令124指定一個(gè)架構(gòu)條件旗標(biāo)必須滿足的條件,使微處理器100能執(zhí)行此條件ALU指令124。此條件ALU指令124會(huì)指定架構(gòu)條件旗標(biāo)需以ALU操作的結(jié)果以及/或一預(yù)移位產(chǎn)生的進(jìn)位旗標(biāo)(carryflag)進(jìn)行更新。然而,若是條件不被滿足,架構(gòu)條件旗標(biāo)就不會(huì)被更新。達(dá)成此操作相當(dāng)復(fù)雜,因?yàn)橛布噶钷D(zhuǎn)譯器104需將條件ALU指令124轉(zhuǎn)譯為由多個(gè)微指令126構(gòu)成的序列。具體來(lái)說(shuō),若是條件被滿足,至少一個(gè)微指令126必須寫(xiě)入此新的條件旗標(biāo)數(shù)值;然而,條件旗標(biāo)的舊數(shù)值可能被位于序列的微指令126用來(lái)確認(rèn)是否條件ALU指令124所指定的條件被滿足,以及/或去執(zhí)行ALU操作。這些實(shí)施例的優(yōu)點(diǎn)在于,微處理器100運(yùn)用技巧以確保在條件不被滿足時(shí)就不更新條件旗標(biāo),且在條件被滿足時(shí)才以正確的數(shù)值來(lái)更新旗標(biāo),這包含利用預(yù)移位進(jìn)位旗標(biāo)值進(jìn)行更新。在本發(fā)明的微處理器100的實(shí)施例中,如圖1所示,用以保持通用寄存器的寄存器文件106,所具有的讀出端口僅足夠供寄存器文件106提供至多二個(gè)來(lái)源操作數(shù)至執(zhí)行微指令的執(zhí)行單元424以實(shí)現(xiàn)條件ALU指令124。如前揭對(duì)應(yīng)于圖1的說(shuō)明內(nèi)容,本發(fā)明的微處理器100的實(shí)施例系針對(duì)一商用微處理器進(jìn)行改良。用以保持此商用微處理器的通用寄存器的寄存器文件具有的讀出端口僅足夠供寄存器文件提供至多二個(gè)來(lái)源操作數(shù)至執(zhí)行單元,執(zhí)行單元執(zhí)行此處所稱的微指令126以實(shí)現(xiàn)條件ALU指令124。因此,本文所述的實(shí)施例特別有利于運(yùn)用在此商用微處理器的微架構(gòu)中。如前揭對(duì)應(yīng)于圖1的說(shuō)明內(nèi)容,此商用微處理器原本系設(shè)計(jì)為x86ISA,關(guān)于指令的條件執(zhí)行并不是其中的關(guān)鍵特征,因?yàn)榇颂幚砥飨祷诶奂悠?,而通常需要一個(gè)來(lái)源操作數(shù)作為目的操作數(shù),因此,此處理器看來(lái)并不需要此額外的讀出埠。在此所述的實(shí)施例的一個(gè)優(yōu)點(diǎn)在于,雖然在一些例子中,關(guān)聯(lián)于由條件ALU指令124所轉(zhuǎn)譯的兩個(gè)微指令的執(zhí)行會(huì)有兩個(gè)時(shí)脈周期的執(zhí)行延遲,而在一些事例中,關(guān)聯(lián)于由條件ALU指令124所轉(zhuǎn)譯的兩個(gè)微指令的執(zhí)行會(huì)有三個(gè)時(shí)脈周期的執(zhí)行延遲,但各個(gè)微指令所執(zhí)行的操作系相對(duì)簡(jiǎn)單的,而使管線化架構(gòu)的實(shí)作能夠支持相對(duì)較高的核心時(shí)鐘頻率。雖然在此所述的實(shí)施例中,微處理器100能夠執(zhí)行ARMISA與x86ISA指令,不過(guò)本發(fā)明并不限于此。本發(fā)明的實(shí)施例亦可適用于微處理器僅執(zhí)行單一個(gè)ISA指令的情形。此外,雖然在此所述的實(shí)施例中,微處理器100系將ARMISA條件ALU指令轉(zhuǎn)譯為微指令126,不過(guò)此實(shí)施例亦可適用于,微處理器執(zhí)行一個(gè)不同于ARM的ISA指令,而同樣在其指令集中包含條件ALU指令的情形。請(qǐng)參照?qǐng)D9,圖中是以一方塊圖進(jìn)一步詳述圖1的微處理器100。此微處理器100在圖1的寄存器文件106內(nèi)包含一架構(gòu)條件旗標(biāo)寄存器926,此微處理器100并包含圖4的執(zhí)行單元424與重排緩沖器422。條件旗標(biāo)寄存器926儲(chǔ)存架構(gòu)條件旗標(biāo)。在一實(shí)施例中,當(dāng)指令模式指針132指示為ARMISA,條件旗標(biāo)寄存器926依據(jù)ARMISA條件旗標(biāo)的語(yǔ)意儲(chǔ)存數(shù)值,而當(dāng)指令模式指針132指示為x86ISA,條件旗標(biāo)寄存器926則是依據(jù)x86ISA條件旗標(biāo),即x86EFLAGS,的語(yǔ)意儲(chǔ)存數(shù)值。如前文對(duì)應(yīng)于圖5的說(shuō)明內(nèi)容所述,寄存器文件106以由寄存器構(gòu)成的獨(dú)立的實(shí)體區(qū)塊來(lái)實(shí)現(xiàn)效果較佳;特別是,舉例來(lái)說(shuō),條件旗標(biāo)寄存器926可以是一個(gè)不同于通用寄存器的寄存器文件的實(shí)體寄存器文件。因此,即使如下述,條件旗標(biāo)系提供至執(zhí)行單元424以執(zhí)行微指令126,條件旗標(biāo)寄存器文件的讀出端口可以是不同于通用寄存器文件的讀出端口。條件旗標(biāo)寄存器926輸出其條件旗標(biāo)數(shù)值至一個(gè)三輸入端多工器922的一數(shù)據(jù)輸入端。此多工器922的一第二數(shù)據(jù)輸入端亦由重排緩沖器422的適當(dāng)項(xiàng)目(entry)接收條件旗標(biāo)結(jié)果。此多工器922的一第三數(shù)據(jù)輸入端亦由一旗標(biāo)總線928接收條件旗標(biāo)結(jié)果。此多工器922選擇適當(dāng)?shù)臄?shù)據(jù)輸入端的輸入,作為其輸出924提供至執(zhí)行單元424以執(zhí)行微指令126讀取條件旗標(biāo)。此過(guò)程在后續(xù)段落會(huì)有更清楚的描述。雖然本實(shí)施例僅描述單一個(gè)旗標(biāo)總線928,不過(guò),依據(jù)本發(fā)明的一實(shí)施例,各個(gè)能夠產(chǎn)生條件旗標(biāo)的執(zhí)行單元424都具有其自己的旗標(biāo)總線928,而各個(gè)能夠讀取條件旗標(biāo)的執(zhí)行單元424都具有其自己的條件旗標(biāo)輸入端924。因此,各個(gè)不同的執(zhí)行單元424能夠同時(shí)執(zhí)行不同的微指令126來(lái)讀取與/或?qū)懭霔l件旗標(biāo)。旗標(biāo)總線928是圖1的結(jié)果總線128的一部分,用以傳送由執(zhí)行單元424輸出的條件旗標(biāo)結(jié)果。條件旗標(biāo)結(jié)果系寫(xiě)入重排緩沖器422,更精確來(lái)說(shuō),是寫(xiě)入重排緩沖器422內(nèi)配置給由執(zhí)行單元424執(zhí)行的微指令126的項(xiàng)目,而執(zhí)行單元424執(zhí)行的結(jié)果是被傳送至旗標(biāo)總線928。條件旗標(biāo)結(jié)果同時(shí)被旗標(biāo)總線928傳送至多工器922的第三數(shù)據(jù)輸入端。圖9亦以方塊圖顯示由執(zhí)行單元424輸出于條件總線928上的條件旗標(biāo)數(shù)值,以及執(zhí)行單元424由多工器922接收的條件旗標(biāo)數(shù)值924。條件旗標(biāo)數(shù)值928/924包含ISA條件旗標(biāo)902、一條件滿足(SAT)位904、一預(yù)移位進(jìn)位(PSC)位906、以及一使用移位進(jìn)位(USE)位908。當(dāng)指令模式指針132指示為ARMISA,ISA條件旗標(biāo)902包含ARM進(jìn)位旗標(biāo)(C)、零旗標(biāo)(Z)、溢位旗標(biāo)(V)、與負(fù)旗標(biāo)(N)。當(dāng)指令模式指針132指示為x86ISA,ISA條件旗標(biāo)902包含x86EFLAGS進(jìn)位旗標(biāo)(CF)、零旗標(biāo)(ZF)、溢位旗標(biāo)(OF)、符號(hào)旗標(biāo)(SF)、同位旗標(biāo)(PF)與輔助旗標(biāo)(AF)。條件旗標(biāo)寄存器926包含儲(chǔ)存空間提供給ISA條件旗標(biāo)902、SAT位904、PSC位906、與USE位908。在一實(shí)施例中,條件旗標(biāo)寄存器926分享儲(chǔ)存空間給x86ISA以及ARMISA進(jìn)位旗標(biāo)、零旗標(biāo)、溢位旗標(biāo)、與負(fù)旗標(biāo)/符號(hào)旗標(biāo)。各個(gè)微指令126除了其基本操作(如加、載入/儲(chǔ)存、移位、布爾運(yùn)算的及、分支)外,還指示微指令126是否執(zhí)行下述三個(gè)額外操作中的一個(gè)或更多,這些操作即(1)讀取條件旗標(biāo)926(在圖10以下的圖示中標(biāo)示為RDFLAGS),(2)寫(xiě)入條件旗標(biāo)926(在圖10以下的圖示中標(biāo)示為WRFLAGS),以及(3)產(chǎn)生一進(jìn)位旗標(biāo)數(shù)值并將其寫(xiě)入至條件旗標(biāo)926(在圖10以下的圖示中標(biāo)示為WRCARRY)的PSC位906。在一實(shí)施例中,微指令126包含相對(duì)應(yīng)的位以指示此三個(gè)額外的操作。在另一實(shí)施例中,微指令126通過(guò)微指令126的操作碼指示此三個(gè)額外的操作;亦即,依據(jù)不同微指令126類型所具有的不同的操作碼,搭配這些微指令類型能夠執(zhí)行的操作,來(lái)指示此三個(gè)額外的操作。若是一執(zhí)行單元424執(zhí)行一條件ALU微指令126(在圖10以下的圖示中,標(biāo)示為ALUOPCC,CUALUOPCC,NCUALUOPCC)指示其寫(xiě)入條件旗標(biāo)926(標(biāo)示為WRFLAGS)而由執(zhí)行單元424讀取的條件旗標(biāo)924滿足微指令126所指定的條件,此執(zhí)行單元424隨后就會(huì)將SAT位904設(shè)定位一;否則,執(zhí)行單元424就會(huì)將SAT位904清除為零。進(jìn)一步說(shuō)明,若是執(zhí)行單元424執(zhí)行的任何微指令126指示其去寫(xiě)入條件旗標(biāo)926并且此微指令126并非一條件ALU微指令126,執(zhí)行單元424隨后就會(huì)將SAT位904清除為零。部分條件微指令126系依據(jù)ISA條件旗標(biāo)902(在圖10以下的圖示中標(biāo)示為XMOVCC)來(lái)指定條件,而部分條件微指令126是依據(jù)SAT位904(在圖10以下的圖示中標(biāo)示為CMOV)來(lái)指定條件,這在下列段落會(huì)有進(jìn)一步的說(shuō)明。若是一執(zhí)行單元424執(zhí)行一移位微指令126指示其去寫(xiě)入進(jìn)位旗標(biāo)(標(biāo)示為WRCARRY),執(zhí)行單元424隨后就會(huì)將USE位908設(shè)定為1,并將移位微指令126產(chǎn)生的進(jìn)位數(shù)值寫(xiě)入PSC位906;否則,執(zhí)行單元424會(huì)將USE位908清除為零。進(jìn)一步說(shuō)明,若是一執(zhí)行單元424執(zhí)行任何指示其去寫(xiě)入條件旗標(biāo)926并且并非移位微指令126的微指令126,執(zhí)行單元424隨后會(huì)將USE位908清除為零。此USE位908系被一后續(xù)的條件ALU微指令126使用,以確認(rèn)是否以PSC位數(shù)值906的數(shù)值更新架構(gòu)進(jìn)位旗標(biāo)902,還是以基于條件ALU微指令126所執(zhí)行的ALU操作產(chǎn)生的進(jìn)位旗標(biāo)的數(shù)值來(lái)進(jìn)行更新。此操作在下列段落會(huì)有進(jìn)一步的說(shuō)明。在另一個(gè)實(shí)施例中,USE位908并不存在,但使用硬件指令轉(zhuǎn)譯器104直接產(chǎn)生USE位908的功能同等物來(lái)做為條件ALU微指令126內(nèi)的一個(gè)指標(biāo)。請(qǐng)參照?qǐng)D10(包括圖10A和圖10B),圖中是以流程圖說(shuō)明本發(fā)明圖1的硬件指令轉(zhuǎn)譯器104轉(zhuǎn)譯條件ALU指令124的操作的實(shí)施例?;旧?,圖10A和圖10B系描述硬件指令轉(zhuǎn)譯器104對(duì)條件ALU指令124解碼以確認(rèn)其類型,以將其轉(zhuǎn)譯至適當(dāng)?shù)奈⒅噶?26序列供執(zhí)行管線112執(zhí)行的方式。具體來(lái)說(shuō),硬件指令轉(zhuǎn)譯器104確認(rèn)條件ALU指令124是否更新架構(gòu)條件旗標(biāo)902、是否對(duì)一來(lái)源操作數(shù)執(zhí)行一預(yù)移位操作、是否使用進(jìn)位旗標(biāo)作為ALU操作的一輸入、以及ALU操作是一進(jìn)位更新或是非進(jìn)位更新的操作。此操作在下述進(jìn)一步說(shuō)明時(shí),將標(biāo)示該ALU操作僅更新架構(gòu)條件旗標(biāo)902的一子集或是更新全部的架構(gòu)條件旗標(biāo)902。此流程始于步驟1002。在步驟1002,硬件指令轉(zhuǎn)譯器104遇到一條件ALU指令124,對(duì)其解碼,并將其轉(zhuǎn)譯為適當(dāng)?shù)奈⒅噶?26序列,如步驟1024、1026、1034、1036、1044、1054與1056所述。條件ALU指令124指示微處理器100在一個(gè)或多個(gè)來(lái)源操作數(shù)執(zhí)行一算術(shù)或邏輯操作以產(chǎn)生一結(jié)果,并將此結(jié)果寫(xiě)入目的寄存器。由條件ALU指令124所指定的ALU操作的部分類型使用架構(gòu)進(jìn)位旗標(biāo)902作為輸入(如加入進(jìn)位(addwithcarry)),雖然大多數(shù)的類型并不這樣做。條件ALU指令124亦指定一條件對(duì)應(yīng)于ISA的架構(gòu)條件旗標(biāo)902。若是架構(gòu)條件旗標(biāo)902滿足此指定條件,微處理器100就會(huì)執(zhí)行條件ALU指令124,亦即執(zhí)行ALU操作并將結(jié)果寫(xiě)入目的寄存器。否則,微處理器100就會(huì)將條件ALU指令124視為一不操作(no-op)指令;具體來(lái)說(shuō),微處理器100就不會(huì)改變目的寄存器內(nèi)的數(shù)值。此外,條件ALU指令124可將架構(gòu)條件旗標(biāo)902指定為系依據(jù)ALU操作的結(jié)果來(lái)更新,或是不會(huì)被更新。不過(guò),即使條件ALU指令124將架構(gòu)條件旗標(biāo)902指定為會(huì)被更新,若是架構(gòu)條件旗標(biāo)902不滿足指定條件,微處理器100就不會(huì)變更架構(gòu)條件旗標(biāo)902內(nèi)的數(shù)值。最后,條件ALU指令124可額外將ALU操作的來(lái)源操作數(shù)其中之一指定為要被預(yù)移位,請(qǐng)一并參照步驟1012的敘述。在一實(shí)施例中,被硬件指令轉(zhuǎn)譯器104轉(zhuǎn)譯的條件ALU指令124系A(chǔ)RMISA指令。具體來(lái)說(shuō),在一實(shí)施例中,如圖10所示,ARMISA數(shù)據(jù)處理指令與乘法指令系由硬件指令轉(zhuǎn)譯器104進(jìn)行轉(zhuǎn)譯。在一實(shí)施例中,這些指令包含但不限于:AND、EOR、SUB、RSB、ADD、ADC、SBC、RSC、TST、TEQ、CMP、CMN、ORR、ORN、MOV、LSL、LSR、ASR、RRX、ROR、BIC、MVN、MUL、MLA、以及MLS指令。在步驟1024、1026、1034、1036、1044、1054與1056中,為說(shuō)明起見(jiàn),相關(guān)類型的ARMISA條件ALU指令124是顯示于第一行,硬件指令轉(zhuǎn)譯器104轉(zhuǎn)譯條件ALU指令124所產(chǎn)生的微指令126是顯示于后續(xù)行。下標(biāo)“CC”顯示此指令124為一條件指令。此外,ALU操作的類型是以所指定的來(lái)源與目的操作數(shù)為例。程序設(shè)計(jì)者可將一目的寄存器指定為提供一來(lái)源操作數(shù)的寄存器為同一者;在此情況下,硬件指令轉(zhuǎn)譯器104系配置來(lái)利用此情況且優(yōu)化微指令126序列以利于條件ALU指令124的轉(zhuǎn)譯。此特征系描述于圖21。接下來(lái)進(jìn)入步驟1004。在步驟1004中,硬件指令轉(zhuǎn)譯器104確認(rèn)條件ALU指令124是否將架構(gòu)條件旗標(biāo)902指定為需要由條件ALU指令124進(jìn)行更新。也就是說(shuō),在一些情況下,程序設(shè)計(jì)者可選擇依據(jù)ALU操作的結(jié)果來(lái)更新架構(gòu)條件旗標(biāo)902的條件ALU指令124的方式,而在其它情況下,程序者可選擇無(wú)論ALU操作的結(jié)果為何,都不更新架構(gòu)條件旗標(biāo)902的條件ALU指令124的方式。在ARMISA匯編語(yǔ)言中,指令下標(biāo)“S”系指示架構(gòu)條件旗標(biāo)902是要被更新的,在圖10以下的圖示系采用此習(xí)慣用法。舉例來(lái)說(shuō),步驟1044將ARMISA條件ALU指令124標(biāo)示為“ALUOPS”以表示架構(gòu)條件旗標(biāo)902是要被更新的,而步驟1024將ARMISA條件ALU指令124標(biāo)示為“ALUOP”(亦即,差異在于“S”)則表示架構(gòu)條件旗標(biāo)902不要被更新。若條件ALU指令124將架構(gòu)條件旗標(biāo)902指定為要更新,流程就會(huì)前進(jìn)至步驟1042;否則就會(huì)前進(jìn)至步驟1012。在步驟1012中,硬件指令轉(zhuǎn)譯器104確認(rèn)條件ALU指令124的種類是否會(huì)對(duì)于ALU操作操作數(shù)的其中一者指定一預(yù)移位操作。此預(yù)移位操作可以由一立即字段進(jìn)行以產(chǎn)生一常數(shù)來(lái)源操作數(shù),或是此預(yù)移位操作可以由來(lái)自由寄存器提供的一來(lái)源操作數(shù)而進(jìn)行。此預(yù)移位操作的數(shù)量可以指定為條件ALU指令124內(nèi)的一常數(shù)。此外,在使用寄存器移位操作數(shù)的情況下,預(yù)移位操作數(shù)量可以由寄存器內(nèi)的數(shù)值所指定。在ARMISA的情況下,將一立即數(shù)值依據(jù)一立即移位量所進(jìn)行一預(yù)移位操作而產(chǎn)生一常數(shù)來(lái)源操作數(shù)將視為一修改后的立即常數(shù)。預(yù)移位操作產(chǎn)生一進(jìn)位旗標(biāo)數(shù)值。對(duì)于某些類型的ALU操作而言,架構(gòu)進(jìn)位旗標(biāo)902是以由移位操作所產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值進(jìn)行更新,不過(guò)對(duì)于一些類型的ALU操作而言,架構(gòu)進(jìn)位旗標(biāo)902系以由ALU操作產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值來(lái)進(jìn)行更新。然而,由預(yù)移位操作產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值并不被用來(lái)確認(rèn)條件ALU指令124所指定的條件是否被滿足,更明確地說(shuō),所使用的是當(dāng)前的架構(gòu)進(jìn)位旗標(biāo)902。值得注意的是,ARMISAMUL、ASR、LSL、LSR、ROR、與RRX指令并不能指定一預(yù)移位操作,其處理過(guò)程會(huì)在步驟1024、1026或1044進(jìn)行描述。此外,在MOV與MVN指令指定一修正后的立即常數(shù)操作數(shù)的情形可指定一預(yù)移位操作,不過(guò)在MOV與MVN指令并不指定一修正后的立即常數(shù)操作數(shù)(即指定一寄存器操作數(shù))的情形下,就不會(huì)指定一預(yù)移位操作,其處理過(guò)程會(huì)在步驟1024、1026或1044進(jìn)行描述。如前述,此預(yù)移位操作可由一立即字段進(jìn)行以產(chǎn)生一常數(shù)來(lái)源操作數(shù),或者此預(yù)移位操作可由寄存器提供的一來(lái)源操作數(shù)而進(jìn)行。若是條件ALU指令124指定一預(yù)移位操作,流程會(huì)前進(jìn)至步驟1032;否則流程就會(huì)前進(jìn)至步驟1022。在步驟1022中,硬件指令轉(zhuǎn)譯器104確認(rèn)條件ALU指令124是否指定一使用進(jìn)位旗標(biāo)的ALU操作。使用進(jìn)位旗標(biāo)的ARMISA指令124,舉例來(lái)說(shuō),包括帶進(jìn)位加法(addwithcarry,ADC)、反向帶進(jìn)位減法(reversesubtractwithcarry,RSC)、以及帶進(jìn)位減法(subtractwithcarry,SBC)指令,以及指定一移位寄存器操作數(shù)且使用進(jìn)位旗標(biāo)以進(jìn)行移位操作的指令,也就是RRX移位類型的指令。若是條件ALU指令124指定使用進(jìn)位旗標(biāo)的ALU操作,則流程前進(jìn)至步驟1026;反之則前進(jìn)至步驟1024。在步驟1024,硬件指令轉(zhuǎn)譯器104將非旗標(biāo)更新、非預(yù)移位、非使用進(jìn)位的條件ALU指令124轉(zhuǎn)譯為第一與第二微指令126,也就是(1)一ALU操作微指令126(標(biāo)示為ALUOP);以及(2)一條件移動(dòng)微指令126(標(biāo)示為XMOV)。在步驟1024的一實(shí)例中,條件ALU指令124指定一第一來(lái)源寄存器(R1)與一第二來(lái)源寄存器(R2),并在第一來(lái)源寄存器與第二來(lái)源寄存器上執(zhí)行一ALU操作(標(biāo)示為ALUOP)以產(chǎn)生一結(jié)果,以及一用以條件寫(xiě)入此結(jié)果的目的寄存器(RD)。ALUOP微指令126與條件ALU指令124指定相同的ALU與來(lái)源操作數(shù)。ALUOP微指令126在兩個(gè)來(lái)源操作數(shù)上執(zhí)行ALU操作并將結(jié)果寫(xiě)入一暫時(shí)寄存器(標(biāo)示為T(mén)2)。條件移動(dòng)微指令126與條件ALU指令124指定相同的狀態(tài)。條件移動(dòng)微指令126接收暫時(shí)寄存器中由ALUOP微指令126寫(xiě)入的數(shù)值,并接收舊的、或當(dāng)前的目的寄存器(RD)的數(shù)值。條件移動(dòng)微指令126接收條件旗標(biāo)924并確認(rèn)這些旗標(biāo)是否滿足條件。若是滿足條件,條件移動(dòng)微指令126將暫時(shí)寄存器的數(shù)值寫(xiě)入目的寄存器(RD),否則就將舊的目的寄存器的數(shù)值寫(xiě)回目的寄存器。值得注意的是,雖然本實(shí)施例指定兩個(gè)來(lái)源寄存器操作數(shù),不過(guò)本發(fā)明并不限于此,這些來(lái)源操作數(shù)中的一個(gè)可以是指定于一條件ALU指令124的立即字段中的常數(shù)操作數(shù),而非由寄存器所提供。微指令126的執(zhí)行在圖20會(huì)有更進(jìn)一步的說(shuō)明。在圖10A及10B及后續(xù)圖示中使用的“舊的”用語(yǔ),系指此旗標(biāo)或目的寄存器數(shù)值,除非另外特別指明,否則是指執(zhí)行單元424在執(zhí)行微指令126時(shí)所接收的數(shù)值。前述說(shuō)明也可以表示至當(dāng)前數(shù)值。對(duì)目的寄存器而言,舊的或是當(dāng)前的數(shù)值系由圖1的導(dǎo)向結(jié)果總線(forwardingresultbus)、重排緩沖器422、或是架構(gòu)寄存器文件106接收。對(duì)旗標(biāo)而言,如關(guān)于圖9的敘述,舊的或是當(dāng)前的數(shù)值系由導(dǎo)向總線(forwardingflagbus)928、重排緩沖器422、或是架構(gòu)條件旗標(biāo)寄存器926所接收。此流程終止于步驟1024。在步驟1026中,硬件指令轉(zhuǎn)譯器104將非旗標(biāo)更新、非預(yù)移位、使用進(jìn)位的條件ALU指令124轉(zhuǎn)譯為第一與第二微指令126,即(1)一使用進(jìn)位ALU操作微指令126(標(biāo)示為ALUOPUC);以及(2)一條件移動(dòng)微指令126(標(biāo)示為XMOV)。在步驟1026的一實(shí)例中,條件ALU指令124系類似于步驟1024所描述者,除了所指定的ALU操作系使用進(jìn)位旗標(biāo)。這兩個(gè)微指令126亦類似于步驟1024所描述者;不過(guò),ALUOPUC微指令126亦接收條件旗標(biāo)924以獲得進(jìn)位旗標(biāo)的當(dāng)前數(shù)值,并應(yīng)用于使用進(jìn)位ALU操作中。微指令126的執(zhí)行系詳述于圖19。此流程終止于步驟1026。在步驟1032中,硬件指令轉(zhuǎn)譯器104確認(rèn)條件ALU指令124是否指定一ALU操作以使用進(jìn)位旗標(biāo)。若是ALU操作使用進(jìn)位旗標(biāo),流程會(huì)進(jìn)行至步驟1036;反之則前進(jìn)至步驟1034。在步驟1034中,硬件指令轉(zhuǎn)譯器104將非旗標(biāo)更新、預(yù)移位、非進(jìn)位使用的條件ALU指令124轉(zhuǎn)譯為第一、第二與第三微指令126,亦即(1)一移位微指令126(標(biāo)示為SHF);(2)一ALU操作微指令126;以及(3)一條件移動(dòng)微指令126。在步驟134的一實(shí)例中,條件ALU指令124系類似于步驟1024所描述者;不過(guò),此條件ALU指令124亦指定一具有一移位量的預(yù)移位操作于第二來(lái)源操作數(shù)(R2),在步驟1034的實(shí)施例中,此移位量是儲(chǔ)存于由條件ALU指令124所指定的一第三來(lái)源寄存器(R3)。不過(guò),若是條件ALU指令124的類型是將移位量指定為指令124內(nèi)的一常數(shù),第三來(lái)源寄存器就不會(huì)被使用。此可能產(chǎn)生的預(yù)移位操作與條件ALU指令124的列表可指定為,包含但不限于,邏輯左移(logicalshiftleft,LSL)、邏輯右移(logicalshiftright,LSR)、算術(shù)左移(arithmeticshiftright,ASR)、右轉(zhuǎn)(rotateright,ROR)、以及擴(kuò)展右轉(zhuǎn)(rotaterightwithextend,RRX)。在一實(shí)施例中,硬件指令轉(zhuǎn)譯器104輸出一移位微指令126以確保移位數(shù)值系依據(jù)ARMISA的語(yǔ)意所產(chǎn)生,舉例來(lái)說(shuō),尤其是指ARM架構(gòu)參考手冊(cè)中對(duì)應(yīng)于個(gè)別ARM指令的描述,以及例如是第A8-10至A8-12、與第A5-10至A5-11頁(yè)的內(nèi)容。此移位微指令126與條件ALU指令124是指定相同的預(yù)移位操作,此移位微指令126亦與條件ALU指令124指定相同的第二來(lái)源操作數(shù)R2與第三來(lái)源操作數(shù)R3。此移位微指令126對(duì)第二來(lái)源操作數(shù)R2執(zhí)行具有一移位量的移位操作,并將結(jié)果寫(xiě)入一暫時(shí)寄存器(標(biāo)示為T(mén)3)。雖然在步驟1034中,由于條件ALU指令124將架構(gòu)條件旗標(biāo)902指定為不更新,移位微指令126產(chǎn)生的條件旗標(biāo)數(shù)值不會(huì)被使用,不過(guò),舉例來(lái)說(shuō),在步驟1056中,移位微指令126產(chǎn)生的移位旗標(biāo)數(shù)值則會(huì)被使用這會(huì)在下列段落有進(jìn)一步的說(shuō)明。此外,預(yù)移位操作會(huì)需要將舊的移位旗標(biāo)旋轉(zhuǎn)至移位后的結(jié)果數(shù)值;舉例來(lái)說(shuō),擴(kuò)展右轉(zhuǎn)(RRX)預(yù)移位操作將進(jìn)位指標(biāo)移位至結(jié)果中的最高有效位。在此情況下,雖未見(jiàn)于圖10A及圖10B(除了步驟1056),移位微指令126也會(huì)讀取條件旗標(biāo)924以取得當(dāng)前的進(jìn)位旗標(biāo)數(shù)值。ALUOP微指令126系類似于步驟1024所描述者;然而,此ALUOP微指令126系接收暫時(shí)寄存器T3的數(shù)值,而非第二來(lái)源操作數(shù)R2,并且執(zhí)行ALU操作于第一來(lái)源操作數(shù)R1與暫時(shí)寄存器T3以產(chǎn)生結(jié)果寫(xiě)入暫時(shí)寄存器T2。XMOV微指令126系類似于步驟1024所描述者。微指令126的執(zhí)行在圖18會(huì)有更詳細(xì)的說(shuō)明。此流程終止于步驟1034。在步驟1036中,硬件指令轉(zhuǎn)譯器104將非旗標(biāo)更新、預(yù)移位、使用進(jìn)位的條件ALU指令124轉(zhuǎn)譯為第一、第二與第三微指令126,亦即(1)一移位微指令126;(2)一使用進(jìn)位ALU操作微指令126;以及(3)一條件移動(dòng)微指令126。在步驟1036的實(shí)例中,條件ALU指令124是類似于步驟1034所述者,除了此指令124所指定的ALU操作使用系使用進(jìn)位旗標(biāo)。此三個(gè)微指令126系類似于步驟1034所描述者;不過(guò),ALUOPUC微指令126亦接收條件旗標(biāo)924以取得進(jìn)位旗標(biāo)的當(dāng)前數(shù)值以使用于進(jìn)位使用ALU操作。微指令126的執(zhí)行在圖17中會(huì)有更詳細(xì)的描述。此流程終止于步驟1036。在步驟1042,硬件指令轉(zhuǎn)譯器104確認(rèn)條件ALU指令124的類型是否對(duì)ALU操作操作數(shù)其中之一指定一預(yù)移位。若是條件ALU指令124指定一預(yù)移位,流程會(huì)前進(jìn)到步驟1052;否則,流程會(huì)前進(jìn)到步驟1044。在步驟1044中,硬件指令轉(zhuǎn)譯器104將旗標(biāo)更新、非預(yù)移位的條件ALU指令124轉(zhuǎn)譯為第一與第二微指令126,亦即:(1)一條件ALU操作微指令126(標(biāo)示為ALUOPCC);以及(2)一條件移動(dòng)微指令126(標(biāo)示為CMOV)。在步驟1044的實(shí)例中,條件ALU指令124系類似于步驟1024的條件ALU指令124,除了本實(shí)施例系更新架構(gòu)條件旗標(biāo)902。條件ALU微指令126與條件ALU指令124系指定相同的條件與來(lái)源操作數(shù)。條件ALU操作微指令126對(duì)兩個(gè)來(lái)源操作數(shù)執(zhí)行ALU操作,并且將結(jié)果寫(xiě)入一暫時(shí)寄存器(標(biāo)示為T(mén)2)。此外,條件ALU操作微指令126接收架構(gòu)條件旗標(biāo)902并確認(rèn)其是否滿足條件。此外,條件ALU操作微指令126寫(xiě)入條件旗標(biāo)寄存器926。具體來(lái)說(shuō),條件ALU操作微指令126寫(xiě)入SAT位904以指示架構(gòu)條件旗標(biāo)902是否滿足條件。此外,若是條件不滿足,條件ALU操作微指令126將舊的條件旗標(biāo)數(shù)值寫(xiě)入架構(gòu)條件旗標(biāo)902;反之,若是條件滿足,條件ALU操作微指令126就依據(jù)ALU操作的結(jié)果更新架構(gòu)條件旗標(biāo)902。此架構(gòu)條件旗標(biāo)902的更新數(shù)值系相關(guān)于ALU操作的類型。也就是說(shuō),對(duì)于部分種類的ALU操作,所有的架構(gòu)條件旗標(biāo)902都會(huì)依據(jù)ALU操作的結(jié)果以新數(shù)值更新;反之,對(duì)于部分種類的ALU操作,一些架構(gòu)條件旗標(biāo)902(在一實(shí)施例中,為Z與N旗標(biāo))系依據(jù)ALU操作的結(jié)果以新數(shù)值更新,不過(guò)舊的數(shù)值會(huì)保留給其它的架構(gòu)條件旗標(biāo)902(在一實(shí)施例中,為V與C旗標(biāo))。架構(gòu)條件旗標(biāo)902的更新在圖14中會(huì)更詳細(xì)地說(shuō)明。條件移動(dòng)(CMOV)微指令126接收由ALUOP微指令126寫(xiě)入暫時(shí)寄存器(T2)的數(shù)值,并接收目的寄存器(RD)的舊的或是當(dāng)前的數(shù)值。條件移動(dòng)(CMOV)微指令126接收條件旗標(biāo)924,并且檢驗(yàn)SAT位904以確認(rèn)條件ALU操作微指令126是否指示架構(gòu)條件旗標(biāo)902滿足條件。若是條件滿足,條件移動(dòng)(CMOV)微指令126將暫時(shí)寄存器的值寫(xiě)入目的寄存器,否則就將舊的目的寄存器的值寫(xiě)回目的寄存器。微指令126的執(zhí)行在圖14中會(huì)有更詳細(xì)的說(shuō)明。值得注意的是,步驟1044(以及步驟1054與1056)所產(chǎn)生的條件ALU操作微指令126所執(zhí)行的ALU操作,可以是一個(gè)使用條件旗標(biāo)(類似于步驟1026與1036所描述者)的ALU操作,而由于微指令126讀取旗標(biāo)(如RDFLAGS指針),執(zhí)行單元424具有進(jìn)位旗標(biāo)以執(zhí)行此使用進(jìn)位ALU操作。此流程終止于步驟1044。在步驟1052中,硬件指令轉(zhuǎn)譯器104確認(rèn)條件ALU指令124是否指定一屬于會(huì)更新架構(gòu)進(jìn)位旗標(biāo)902的類型的ALU操作。對(duì)于硬件指令轉(zhuǎn)譯器104而言,區(qū)分是否會(huì)更新架構(gòu)進(jìn)位旗標(biāo)902是必要的,因?yàn)槿羰茿LU操作不更新架構(gòu)進(jìn)位旗標(biāo)902,預(yù)移位操作所產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值,而非基于ALU操作所產(chǎn)生的條件旗標(biāo)數(shù)值,就必須被用于更新架構(gòu)進(jìn)位旗標(biāo)902。在一實(shí)施例中,指定一不更新架構(gòu)進(jìn)位旗標(biāo)902的ALU操作,但指定一預(yù)移位操作的ARMISA指令124,系包含但不限于AND、BIC、EOR、ORN、ORR、TEQ與TST,以及MOV/MVN指令124,這些指另通過(guò)一非零旋轉(zhuǎn)數(shù)值(non-zerorotationvalue)指定一調(diào)整過(guò)的立即常數(shù)。若是ALU操作更新此架構(gòu)進(jìn)位旗標(biāo)902,此流程會(huì)前進(jìn)至步驟1054;反之則前進(jìn)至步驟1056。在步驟1054中,硬件指令轉(zhuǎn)譯器104將旗標(biāo)更新、預(yù)移位、進(jìn)位使用的條件ALU指令124轉(zhuǎn)譯為第一、第二與第三微指令126,亦即:(1)一移位微指令126;(2)一條件進(jìn)位更新ALU操作微指令126(標(biāo)示為CUALUOPCC);以及(3)一條件移動(dòng)微指令126。在步驟1054的一實(shí)例中,條件ALU指令124系類似于步驟1034所描述者;然而,此條件ALU指令124亦將架構(gòu)條件旗標(biāo)902指定為要被更新。移位微指令126系類似于步驟1034所描述者。條件進(jìn)位更新ALU操作微指令126與條件ALU指令124系指定相同的條件。條件進(jìn)位更新ALU操作微指令126在第一來(lái)源操作數(shù)R1與暫時(shí)寄存器T3執(zhí)行ALU操作,并將結(jié)果寫(xiě)入一暫時(shí)寄存器(標(biāo)示為T(mén)2)。此外,條件進(jìn)位更新ALU操作微指令126接收架構(gòu)條件旗標(biāo)902并確認(rèn)其是否滿足條件。此外,條件進(jìn)位更新ALU操作微指令126寫(xiě)入條件旗標(biāo)寄存器926。具體來(lái)說(shuō),條件進(jìn)位更新ALU操作微指令126寫(xiě)入SAT位904以指示是否架構(gòu)條件旗標(biāo)902滿足條件。此外,若是條件不被滿足,條件進(jìn)位更新ALU操作微指令126將舊的條件旗標(biāo)數(shù)值寫(xiě)入架構(gòu)條件旗標(biāo)902;反之,若是條件滿足,條件進(jìn)位更新ALU操作微指令126依據(jù)ALU操作的結(jié)果來(lái)更新架構(gòu)條件旗標(biāo)902。架構(gòu)條件旗標(biāo)902的更新在圖16會(huì)有更詳細(xì)的說(shuō)明。條件移動(dòng)(CMOV)微指令126系類似于步驟1044所描述者。此流程終止于步驟1054。在步驟1056中,硬件指令轉(zhuǎn)譯器104將旗標(biāo)更新、預(yù)移位、非進(jìn)位更新的條件ALU指令124轉(zhuǎn)譯為第一、第二與第三微指令126,亦即(1)一移位微指令126;(2)一條件非進(jìn)位更新ALU操作微指令126(標(biāo)示為NCUALUOPCC);以及(3)一條件移動(dòng)微指令126。在步驟1056的實(shí)例中,條件ALU指令124系類似于步驟1054所描述者;不過(guò),此條件ALU指令124是指定一非進(jìn)位更新ALU操作。因此,當(dāng)條件滿足時(shí),架構(gòu)進(jìn)位旗標(biāo)902系以預(yù)移位旗標(biāo)數(shù)值進(jìn)行更新。移位微指令126系類似于步驟1034所描述者;不過(guò),此微指令126會(huì)讀取與寫(xiě)入條件旗標(biāo)寄存器926。具體來(lái)說(shuō),此移位微指令126會(huì):(1)將預(yù)移位操作所產(chǎn)生的條件旗標(biāo)數(shù)值寫(xiě)入PSC位906;(2)設(shè)定USE位908以指示條件非進(jìn)位更新ALU操作微指令126使用PSC906來(lái)更新架構(gòu)進(jìn)位旗標(biāo)902;以及(3)將舊的架構(gòu)條件旗標(biāo)902寫(xiě)回條件旗標(biāo)寄存器926,藉此,條件非進(jìn)位更新ALU操作微指令126可評(píng)估架構(gòu)條件旗標(biāo)902的舊數(shù)值,來(lái)確認(rèn)其是否滿足條件。條件非進(jìn)位更新ALU操作微指令126與條件ALU指令124系指定相同的條件。此條件非進(jìn)位更新ALU操作微指令126在來(lái)源操作數(shù)R1與暫時(shí)寄存器T3執(zhí)行ALU操作并將結(jié)果寫(xiě)入一暫時(shí)寄存器(標(biāo)示為T(mén)2)。再者,條件非進(jìn)位更新ALU操作微指令126接收架構(gòu)條件旗標(biāo)902并且確認(rèn)其是否滿足條件。此外,條件非進(jìn)位更新ALU操作微指令126系寫(xiě)入條件旗標(biāo)寄存器926。具體來(lái)說(shuō),條件非進(jìn)位更新ALU操作微指令126系寫(xiě)入SAT位904以指示架構(gòu)條件旗標(biāo)902是否滿足條件。此外,若是條件不滿足,條件非進(jìn)位更新ALU操作微指令126將舊的條件旗標(biāo)數(shù)值寫(xiě)入架構(gòu)條件旗標(biāo)902;反之,若是條件被滿足,條件非進(jìn)位更新ALU操作微指令126則是基于ALU操作的結(jié)果更新架構(gòu)條件旗標(biāo)902。具體來(lái)說(shuō),架構(gòu)溢位(V)旗標(biāo)902系以舊的溢位旗標(biāo)數(shù)值寫(xiě)入。此外,在USE位908的指示下,架構(gòu)進(jìn)位旗標(biāo)902系以位于PSC位906的預(yù)移位進(jìn)位旗標(biāo)數(shù)值進(jìn)行更新,否則就以舊的進(jìn)位旗標(biāo)數(shù)值924進(jìn)行更新。架構(gòu)條件旗標(biāo)902的更新在圖15會(huì)有更詳細(xì)的說(shuō)明。CMOV微指令126系類似于步驟1044所描述者。在另一實(shí)施例中,USE位908并不存在,并且硬件指令轉(zhuǎn)譯器104系直接產(chǎn)生USE位908的功能同等物作為條件非進(jìn)位更新ALU操作微指令126的一指針。執(zhí)行單元424檢測(cè)此指針以確認(rèn)是利用位于PSC位906的預(yù)移位進(jìn)位旗標(biāo)數(shù)值還是利用舊的進(jìn)位旗標(biāo)數(shù)值924來(lái)更新架構(gòu)進(jìn)位旗標(biāo)902。此流程終止于步驟1056。在一實(shí)施例中,硬件指令轉(zhuǎn)譯器104系配置來(lái)產(chǎn)生且提供一調(diào)整過(guò)的立即常數(shù)而非輸出一移位微指令126來(lái)進(jìn)行此操作。在此實(shí)施例中,處理程序系類似于步驟1024、1026與1044所描述者,而非步驟1034、1036與1054/1056。此外,在此實(shí)施例中,硬件指令轉(zhuǎn)譯器104亦產(chǎn)生且由預(yù)移位操作提供進(jìn)位旗標(biāo)數(shù)值供條件ALU操作微指令126用于更新架構(gòu)進(jìn)位旗標(biāo)902。請(qǐng)參照?qǐng)D11,圖中是以一流程圖顯示本發(fā)明圖4的執(zhí)行單元424執(zhí)行一移位微指令126的操作。此流程始于步驟1102。在步驟1102中,圖4的執(zhí)行單元424中的一者接收到一移位微指令126,例如在圖10所描述且由硬件指令轉(zhuǎn)譯器104響應(yīng)所遭遇到的條件ALU指令124而產(chǎn)生的微指令。此執(zhí)行單元424亦接收由微指令126所指定的來(lái)源操作數(shù),包含條件旗標(biāo)數(shù)值924,這些條件旗標(biāo)數(shù)值924可能被或不被微指令126所使用。接下來(lái)進(jìn)行至步驟1104。在步驟1104中,執(zhí)行單元424執(zhí)行由移位微指令126所指定的移位操作,此移位操作系執(zhí)行于由移位微指令126所指定的操作數(shù)上以產(chǎn)生一結(jié)果,并將此結(jié)果輸出至結(jié)果總線128。在一實(shí)施例中,此移位操作可包括但不限于一邏輯向左(LSL)、邏輯向右(LSR)、算術(shù)向右(ASR)、右轉(zhuǎn)(ROR)、以及擴(kuò)展右轉(zhuǎn)(RRX)。此外,此執(zhí)行單元424系基于移位操作的結(jié)果產(chǎn)生新的條件旗標(biāo)數(shù)值。具體來(lái)說(shuō),執(zhí)行單元424系基于移位操作的結(jié)果產(chǎn)生一進(jìn)位旗標(biāo)數(shù)值。在一實(shí)施例中,在邏輯向左(LSL)移位操作的情況下,進(jìn)位旗標(biāo)數(shù)值為一擴(kuò)展數(shù)值(extendedvalue)的第N個(gè)位,此擴(kuò)展數(shù)值為M個(gè)最低有效位零串連左移后的操作數(shù)(Mleastsignificantbitzeroesconcatenatedwiththeoperandbeingleft-shifted),其中N是原始操作數(shù)的位數(shù)量,M是所指定的正移位量;在邏輯向右(LSR)移位操作的情況下,進(jìn)位旗標(biāo)數(shù)值系一擴(kuò)展數(shù)值的第(M-1)個(gè)位,而此擴(kuò)展數(shù)值系原始操作數(shù)零擴(kuò)展(M+N)個(gè)位,其中M是指定正移位量,N是原始操作數(shù)的位數(shù);在算術(shù)向右(ASR)移位操作的情況下,進(jìn)位旗標(biāo)數(shù)值系一擴(kuò)展數(shù)值的第(M-1)個(gè)位,此擴(kuò)展數(shù)值系原始操作數(shù)符號(hào)擴(kuò)展(sign-extended)(M+N)個(gè)位,其中M是特定正移位量,N是原始操作數(shù)的位數(shù);在右轉(zhuǎn)(ROR)移位操作的情況下,進(jìn)位旗標(biāo)數(shù)值系操作數(shù)右轉(zhuǎn)后的結(jié)果的第(N-1)個(gè)位,此操作數(shù)系依據(jù)特定非零移位量(specifiednon-zeroshiftamount)模(mod)N進(jìn)行右轉(zhuǎn),其中N是原始操作數(shù)的位數(shù);在擴(kuò)展向右(RRX)移位操作的情況下,進(jìn)位旗標(biāo)數(shù)值系原始操作數(shù)的位零。接下來(lái)進(jìn)行至步驟1106。在步驟1106中,執(zhí)行單元424確認(rèn)由硬件指令轉(zhuǎn)譯器104輸出的移位微指令126是否指示執(zhí)行單元424應(yīng)寫(xiě)入進(jìn)位旗標(biāo),如同圖10B的步驟1056中的指令WRCARRY。具體來(lái)說(shuō),此移位微指令126指示位于旗標(biāo)總線輸出928的PSC位906應(yīng)寫(xiě)入由移位操作產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值寫(xiě)入,而USE位908應(yīng)被設(shè)定,以使隨后的條件非進(jìn)位更新ALU操作微指令126生效以有條件地將PSC位906數(shù)值寫(xiě)入架構(gòu)進(jìn)位旗標(biāo)902。若是執(zhí)行單元424應(yīng)該寫(xiě)入進(jìn)位旗標(biāo),流程會(huì)前進(jìn)至步驟1114;否則,流程就會(huì)前進(jìn)至步驟1108。在步驟1108中,執(zhí)行單元424確認(rèn)由硬件指令轉(zhuǎn)譯器104輸出的移位微指令126是否指示執(zhí)行單元424應(yīng)寫(xiě)入條件旗標(biāo)(標(biāo)示為WRFLAGS)。雖然在移位微指令126未指示應(yīng)寫(xiě)入PSC位906(標(biāo)示為WRCARRY)的情況下,圖10中沒(méi)有任何一個(gè)移位微指令指示執(zhí)行單元424應(yīng)寫(xiě)入條件旗標(biāo),但硬件指令轉(zhuǎn)譯器104在轉(zhuǎn)譯其它ISA指令124時(shí)還是會(huì)產(chǎn)生此一移位微指令126。若是執(zhí)行單元424應(yīng)寫(xiě)入條件旗標(biāo),流程會(huì)前進(jìn)到步驟1112;否則就會(huì)終止。在步驟1112,執(zhí)行單元424輸出數(shù)值到旗標(biāo)總線928上來(lái)將PSC位906、USE位908、與SAT位904清除為零,并且將步驟1104所產(chǎn)生的新的架構(gòu)條件旗標(biāo)902數(shù)值寫(xiě)入架構(gòu)條件旗標(biāo)902。此流程終止于步驟1114。在步驟1114,執(zhí)行單元424輸出數(shù)值到旗標(biāo)總線928上以將步驟1112所產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值寫(xiě)入PSC位906、設(shè)定USE位908為一、將SAT位904清除為零、并且以步驟1102所接收到的舊的架構(gòu)條件旗標(biāo)902寫(xiě)入數(shù)值架構(gòu)條件旗標(biāo)902。此流程終止于步驟1114。請(qǐng)參照?qǐng)D12(包括圖12A和圖12B),圖中顯示一流程圖描述本發(fā)明圖4的執(zhí)行單元424執(zhí)行一條件ALU微指令126的操作。此流程始于步驟1202。在步驟1202中,圖4的執(zhí)行單元424的其中一者接收到一條件ALU微指令126,如圖10所述由硬件指令轉(zhuǎn)譯器104響應(yīng)遇到的一條件ALU指令124所產(chǎn)生微指令的情形。此執(zhí)行單元424亦接收由微指令指定的來(lái)源操作數(shù),包含條件旗標(biāo)數(shù)值924,而不論其是否會(huì)被微指令126使用到。需了解的是,執(zhí)行單元424也會(huì)依據(jù)類似于圖12描述的處理程序,而排除其中步驟1209、1212、1214與1216的執(zhí)移操作,來(lái)執(zhí)行非條件ALU微指令126,此微指令可以是圖10所述由硬件指令轉(zhuǎn)譯器104響應(yīng)遇到一條件ALU指令124所產(chǎn)生的條件微指令。此外,執(zhí)行條件ALU微指令126的執(zhí)行單元424與執(zhí)行相關(guān)移位微指令126以及/或XMOV/CMOV微指令126的執(zhí)行單元424可以相同或是不同。接下來(lái)流程前進(jìn)至步驟1204。在步驟1204,執(zhí)行單元424對(duì)由條件ALU微指令126所指定的操作數(shù),執(zhí)行由條件ALU微指令126所指定的ALU操作,以產(chǎn)生一結(jié)果并將此結(jié)果輸出至結(jié)果總線128。此外,執(zhí)行單元424亦基于ALU操作的結(jié)果產(chǎn)生新的架構(gòu)條件旗標(biāo)902數(shù)值。若ALU操作使用進(jìn)位旗標(biāo),執(zhí)行單元424就使用所接收的架構(gòu)進(jìn)位旗標(biāo)924的舊的數(shù)值,而非由ALU操作所產(chǎn)生的新的進(jìn)位旗標(biāo)數(shù)值。接下來(lái)流程前進(jìn)至步驟1206。在步驟1206中,執(zhí)行單元424確認(rèn)由步驟1202接收的架構(gòu)條件旗標(biāo)924是否滿足此指定條件。此確認(rèn)結(jié)果在后續(xù)步驟1212與1214中會(huì)被使用。接下來(lái)流程前進(jìn)至步驟1208。在步驟1208中,執(zhí)行單元424確認(rèn)條件ALU微指令126是否指示執(zhí)行單元424寫(xiě)入條件旗標(biāo)寄存器926,如同圖10A及10B的許多步驟中的指令WRFLAGS。若是,流程前進(jìn)至步驟1214;否則,流程前進(jìn)至步驟1209。在步驟1209中,若是步驟1206確認(rèn)結(jié)果為條件滿足,流程前進(jìn)至步驟1211;否則,流程前進(jìn)至步驟1212。在步驟1211中,由于條件滿足,執(zhí)行單元424輸出步驟1204產(chǎn)生的結(jié)果至結(jié)果總線128。不過(guò),條件ALU微指令126并不更新條件旗標(biāo)寄存器926,因?yàn)闂l件ALU微指令126系指定為不去更新架構(gòu)條件旗標(biāo)902。如前述,由執(zhí)行單元424輸出至結(jié)果總線128/928的結(jié)果與條件旗標(biāo)數(shù)值系傳送至執(zhí)行管線112的其它執(zhí)行單元424,并且被寫(xiě)入重排緩沖器422相關(guān)于條件ALU微指令126的項(xiàng)目。需要了解的是,即使微指令126系指定為不去更新架構(gòu)條件旗標(biāo)902,執(zhí)行單元424仍然輸出一些數(shù)值至旗標(biāo)結(jié)果總線928以寫(xiě)入重排緩沖器422相關(guān)于條件ALU微指令126的項(xiàng)目,不過(guò)這些數(shù)值將不會(huì)由重排緩沖器422引退至目的寄存器106與/或條件旗標(biāo)寄存器926。這也就是說(shuō),是否寫(xiě)入重排寄存器422的項(xiàng)目的數(shù)值最終會(huì)被引退的確認(rèn)操作,是由執(zhí)行管線112的引退單元基于微指令126的類型、例外事件出現(xiàn)、分支誤預(yù)測(cè)、或是其它無(wú)效事件來(lái)進(jìn)行,而非由執(zhí)行單元424本身來(lái)進(jìn)行。此流程終止于步驟1211。在步驟1212中,執(zhí)行單元424輸出第一來(lái)源操作數(shù)至結(jié)果總線128。值得注意的是,在條件不被滿足時(shí),圖10A及10B所描述的多種條件ALU微指令126并不使用此輸出第一來(lái)源操作數(shù)。具體來(lái)說(shuō),圖10A及10B的XMOV與CMOV微指令126會(huì)寫(xiě)回舊的目的寄存器數(shù)值而非暫時(shí)寄存器T2的數(shù)值。然而,在圖21A及21B及其后續(xù)圖示的說(shuō)明中,對(duì)于其它格式的條件ALU指令124的轉(zhuǎn)譯而言,即相同來(lái)源目的條件ALU指令124(或是其它ISA指令124),硬件指令轉(zhuǎn)譯器104于產(chǎn)生條件ALU微指令126時(shí),其中第一來(lái)源操作數(shù)也是ISA指令124指定的目的寄存器,藉以在條件不被滿足時(shí)寫(xiě)回原本的目的寄存器的數(shù)值。如步驟1211所述,條件ALU微指令126并不更新條件旗標(biāo)寄存器926因?yàn)闂l件ALU微指令126系指定為不去更新架構(gòu)條件旗標(biāo)902。此流程終止于步驟1212。在步驟1214中,若是步驟1206確認(rèn)條件被滿足,流程會(huì)前進(jìn)至步驟1218;否則,流程會(huì)前進(jìn)至步驟1216。在步驟1216中,執(zhí)行單元424輸出第一來(lái)源操作數(shù),清除USE位908、PSC位906、與SAT位904為零,以及輸出由步驟1202接收的舊的架構(gòu)條件旗標(biāo)924數(shù)值至旗標(biāo)總線928,以能夠在不調(diào)整架構(gòu)條件旗標(biāo)902的數(shù)值的情況下,將條件ALU指令124整體視為一不操作指令來(lái)執(zhí)行(亦即不去執(zhí)行條件ALU指令124)。此流程終止于步驟1216。在步驟1218中,執(zhí)行單元424確認(rèn)條件ALU微指令126是否指定一進(jìn)位更新ALU操作。在一實(shí)施例中,執(zhí)行單元424對(duì)條件ALU微指令126的操作碼進(jìn)行解碼,以做出確認(rèn)結(jié)果。在另一實(shí)施例中,硬件指令轉(zhuǎn)譯器104確認(rèn)ALU操作是否是圖10A的步驟1052的進(jìn)位更新操作,并據(jù)此提供一指針至執(zhí)行單元424。在一實(shí)施例中,非進(jìn)位更新ALU操作包含但不限于由AND、BIC、EOR、ORN、ORR、TEQ、TST、MUL、MOV、MVN、ASR、LSL、LSR、ROR、與RRXARMISA指令124所指定的操作。若是ALU操作系進(jìn)位更新操作,流程前進(jìn)至步驟1222;否則流程前進(jìn)至步驟1224。在步驟1222,執(zhí)行單元424輸出步驟1204產(chǎn)生的結(jié)果,清除USE位908與PSC位906為零,設(shè)定SAT位904為一,以及輸出步驟1204產(chǎn)生的新的架構(gòu)條件旗標(biāo)數(shù)值至旗標(biāo)總線928。值得注意的是,不更新溢位旗標(biāo)但指定一進(jìn)位更新ALU操作(如ASR、LSL、LSR、ROR、與RRX操作)的條件ALU微指令126的處理過(guò)程與步驟1222所描述者有些許不同。尤其是,執(zhí)行單元424輸出舊的V旗標(biāo)數(shù)值而非新的V旗標(biāo)數(shù)值。此流程終止于步驟1222。在步驟1224,執(zhí)行單元424檢驗(yàn)USE位908。若USE位908被設(shè)定為一,流程會(huì)前進(jìn)至步驟1228;否則,流程就會(huì)前進(jìn)至步驟1226。在另一實(shí)施例中,如上文/下文所述,USE位908并不存在,而執(zhí)行單元424則是檢測(cè)條件ALU微指令126內(nèi)的指針,以確認(rèn)是否以PSC位906內(nèi)的預(yù)移位進(jìn)位旗標(biāo)數(shù)值來(lái)更新架構(gòu)進(jìn)位旗標(biāo)902,還是使用舊的進(jìn)位旗標(biāo)數(shù)值924。在步驟1226中,執(zhí)行單元424輸出步驟1204產(chǎn)生的結(jié)果、清除USE位908與PSC位906為零、設(shè)定SAT位904為一,以及以下列方式輸出架構(gòu)條件旗標(biāo)至旗標(biāo)總線928:C旗標(biāo)與V旗標(biāo)系寫(xiě)入由步驟1202所接收的舊的C旗標(biāo)與V旗標(biāo)數(shù)值;N旗標(biāo)與Z旗標(biāo)系分別以步驟1204所產(chǎn)生的新的N旗標(biāo)與Z旗標(biāo)數(shù)值做寫(xiě)入。此流程終止于步驟1226。在步驟1228中,執(zhí)行單元424輸出步驟1204產(chǎn)生的結(jié)果,清除USE位908與PSC位906為零,設(shè)定SAT位904為一,以及以下列方式輸出架構(gòu)條件旗標(biāo)至旗標(biāo)總線928:C旗標(biāo)寫(xiě)入由步驟1202所接收的PSC位906的數(shù)值;V旗標(biāo)寫(xiě)入由步驟1202所接收的舊的V旗標(biāo)數(shù)值;N旗標(biāo)與Z旗標(biāo)分別寫(xiě)入步驟1204所接收的新的N旗標(biāo)與Z旗標(biāo)數(shù)值。此流程終止于步驟1228。在一實(shí)施例中,輸出于旗標(biāo)總線928的數(shù)值會(huì)因?yàn)橐罁?jù)指令模式指針132指示為x86或ARM而有不同,因此,執(zhí)行單元424會(huì)以不同方式執(zhí)行條件ALU微指令126。具體來(lái)說(shuō),若是指令模式指針132指示為x86,執(zhí)行單元424就不去區(qū)分ALU操作模式是進(jìn)位更新或是非進(jìn)位更新、不考慮USE位908、以及利用x86語(yǔ)意來(lái)更新條件碼旗標(biāo)。請(qǐng)參照?qǐng)D13,圖中顯示本發(fā)明圖4的執(zhí)行單元424執(zhí)行一條件移動(dòng)微指令126的操作。此流程起始于步驟1302。在步驟1302,圖4的執(zhí)行單元424的其中一者接收到一條件移動(dòng)微指令126,如圖10所述由硬件指令轉(zhuǎn)譯器104響應(yīng)遇到一條件ALU指令124所產(chǎn)生微指令(標(biāo)示為CMOV或XMOV)的情形。此執(zhí)行單元424亦接收微指令126所指定的來(lái)源操作數(shù),包含條件旗標(biāo)數(shù)值924,無(wú)論其是否會(huì)被微指令126所使用。接下來(lái)前進(jìn)至步驟1304。在步驟1304,執(zhí)行單元424對(duì)微指令126進(jìn)行解碼以確認(rèn)其是否為一個(gè)XMOV微指令126或是一個(gè)微指令126。如果是CMOV微指令126,流程前進(jìn)至步驟1308;否則流程前進(jìn)至步驟1306。在步驟1306,執(zhí)行單元424確認(rèn)步驟1302接收到的架構(gòu)條件旗標(biāo)902并確認(rèn)是否滿足條件。接下來(lái)前進(jìn)至步驟1312。在步驟1308,執(zhí)行單元424檢驗(yàn)由步驟1302接收到的SAT位904并由其確認(rèn)條件是否滿足,如同一寫(xiě)入SAT位904的相對(duì)應(yīng)條件ALU微指令126在之前所做的確認(rèn),如圖10的步驟1044、1054、與1056所述。接下來(lái)流程前進(jìn)至步驟1312。在步驟1312,若是步驟1306或1308確認(rèn)條件滿足,流程就會(huì)前進(jìn)至步驟1316;否則就會(huì)前進(jìn)至步驟1314。在步驟1314,執(zhí)行單元424輸出第一來(lái)源操作數(shù)的數(shù)值至結(jié)果總線128。在圖10中,第一來(lái)源操作數(shù)的數(shù)值系舊的目的寄存器數(shù)值,以能夠在條件不被滿足且不變更目的寄存器的數(shù)值的情況下,有利于將條件ALU指令124整體視為一不操作指令(即不去執(zhí)行條件ALU指令124)來(lái)執(zhí)行。此流程終止于步驟1314。在步驟1316中,執(zhí)行單元424輸出第二來(lái)源操作數(shù)的數(shù)值至結(jié)果總線128。如圖10所示,此第二來(lái)源操作數(shù)的數(shù)值系由相關(guān)的條件ALU微指令126寫(xiě)入暫時(shí)寄存器的數(shù)值,以利于在預(yù)設(shè)條件滿足的情況下,通過(guò)將結(jié)果寫(xiě)入目的寄存器,以協(xié)助條件ALU指令124的執(zhí)行。此流程終止于步驟1316。請(qǐng)參照?qǐng)D14,圖中是以一方塊圖顯示本發(fā)明圖1的執(zhí)行管線112執(zhí)行一條件ALU指令124的操作。具體來(lái)說(shuō),此條件ALU指令124系一旗標(biāo)更新、非預(yù)移位、條件ALU的操作ISA指令124。硬件指令轉(zhuǎn)譯器104系將此指令124轉(zhuǎn)譯為圖10的步驟1044的微指令126。圖4的寄存器配置表402產(chǎn)生附屬信息給位于暫時(shí)寄存器T2的CMOV微指令126以及由條件ALUOP微指令126寫(xiě)入的條件旗標(biāo)寄存器926的數(shù)值等等。指令調(diào)度器404將微指令126分派至圖4中適當(dāng)?shù)谋A粽?06。當(dāng)微指令126可取得所有來(lái)源操作數(shù)的數(shù)值時(shí)(無(wú)論是從導(dǎo)向總線(forwardingbus)128、重排緩沖器(ROB)422、或是寄存器文件106),指令發(fā)送單元408確認(rèn)一微指令126已完成由其保留站406發(fā)送至相對(duì)應(yīng)執(zhí)行單元以供執(zhí)行的準(zhǔn)備。此微指令126系依據(jù)圖12(包括圖12A和圖12B)與圖13的描述內(nèi)容來(lái)執(zhí)行。執(zhí)行單元424從保留站406接收步驟1044所產(chǎn)生的條件ALUOP微指令126、從圖1的寄存器文件106的寄存器R1與R2接收來(lái)源操作數(shù)的數(shù)值、以及依據(jù)圖12A的步驟1202從圖9的條件旗標(biāo)寄存器926(或是從導(dǎo)向總線128與/或ROB422)接收條件旗標(biāo)924。執(zhí)行單元424對(duì)寄存器R1與R2執(zhí)行ALU操作(若是此ALU操作是使用進(jìn)位操作,則對(duì)所接收的C旗標(biāo)902執(zhí)行此操作)以產(chǎn)生一結(jié)果,此結(jié)果系依據(jù)步驟1204寫(xiě)入暫時(shí)寄存器T2。此外,(1)若是架構(gòu)條件旗標(biāo)902并不滿足指定的條件(在圖14中標(biāo)示為NOTSATISFIED),執(zhí)行單元424依據(jù)圖12B的步驟1216產(chǎn)生新的條件旗標(biāo)928數(shù)值以寫(xiě)入條件旗標(biāo)寄存器926;(2)若是架構(gòu)條件旗標(biāo)902滿足指定的條件而ALU操作系非進(jìn)位更新的操作(在圖14中標(biāo)示為NCUALUOPSAT),執(zhí)行單元424依據(jù)圖12的步驟1226產(chǎn)生新的條件旗標(biāo)928數(shù)值以寫(xiě)入條件旗標(biāo)寄存器926;并且(3)若是架構(gòu)條件旗標(biāo)902滿足指定的條件并且ALU操作系進(jìn)位更新的操作(在圖14中標(biāo)示為CUALUOPSAT),執(zhí)行單元424依據(jù)圖12的步驟1222產(chǎn)生新的條件旗標(biāo)928數(shù)值以寫(xiě)入條件旗標(biāo)寄存器926。暫時(shí)寄存器T2的數(shù)值與條件旗標(biāo)928系提供于導(dǎo)向總線128供CMOV微指令126利用,在并非來(lái)自導(dǎo)向總線128的情況下寫(xiě)入重排緩沖器422的項(xiàng)目供CMOV微指令126利用,并且在并非來(lái)自導(dǎo)向總線128或重排緩沖器422的情況下,除了在例外事件出現(xiàn)、分支誤預(yù)測(cè)、或是其它無(wú)效事件的情形下是最終引退至適當(dāng)?shù)募軜?gòu)狀態(tài)而被CMOV微指令126所利用。尤其是,圖9的多工器922將操作而選擇適當(dāng)?shù)臈l件旗標(biāo)924提供給執(zhí)行單元424。執(zhí)行單元424接收步驟1044的CMOV微指令126,暫時(shí)寄存器T2與目的寄存器(RD)的來(lái)源操作數(shù)數(shù)值,以及依據(jù)圖13的步驟1302所產(chǎn)生的條件旗標(biāo)924。依據(jù)圖13的步驟1316與1314,當(dāng)SAT位904被設(shè)定時(shí),執(zhí)行單元424輸出暫時(shí)寄存器T2的來(lái)源操作數(shù)的數(shù)值,當(dāng)SAT位904被清除時(shí),執(zhí)行單元424輸出目的寄存器RD的來(lái)源操作數(shù)的數(shù)值。此結(jié)果數(shù)值系提供于導(dǎo)向總線128供后續(xù)微指令126所利用,并寫(xiě)入重排寄存器422的項(xiàng)目,最后在除了例外事件出現(xiàn)、分支誤預(yù)測(cè)、或是其它無(wú)效事件之外,被引退至其適當(dāng)?shù)募軜?gòu)狀態(tài)而被微指令126所利用。如步驟1222所述,旗標(biāo)更新條件ALU指令124指定一進(jìn)位更新ALU操作,但不更新溢位旗標(biāo),如ARMISAASR、LSL、LSR、ROR、與RRX指令124,這些指令124的處理程序與圖14所示有些不同。尤其是,執(zhí)行單元424輸出舊的V旗標(biāo)數(shù)值而非新的V旗標(biāo)數(shù)值。最后,如前述,旗標(biāo)更新ARMISAMUL以及MOV/MVN(寄存器)指令124均屬非進(jìn)位更新指令并且無(wú)法指定一預(yù)移位操作,因而系以步驟1044的程序處理。在圖12B的步驟1226有更明確的說(shuō)明。在前文中可發(fā)現(xiàn),ALU操作微指令126系通過(guò)SAT位904指示CMOV微指令126是否舊的條件旗標(biāo)902滿足指定條件,藉以使ALU操作微指令126替代條件旗標(biāo)902的舊的數(shù)值,并在條件滿足時(shí),依據(jù)ALU操作結(jié)果所產(chǎn)生的適當(dāng)數(shù)值來(lái)進(jìn)行處理。請(qǐng)參照?qǐng)D15(包括圖15A和圖15B),圖中是以一方塊圖說(shuō)明本發(fā)明圖1的執(zhí)行管線112執(zhí)行一條件ALU指令124。具體來(lái)說(shuō),此條件ALU指令124系一旗標(biāo)更新、預(yù)移位、非進(jìn)位更新條件ALU的操作ISA指令124,硬件指令轉(zhuǎn)譯器104系將此指令124轉(zhuǎn)譯為圖10B步驟1056所示的微指令126。圖15(包括圖15A和圖15B)的操作在許多面向系類似于圖14的操作,相似的操作在此不再贅述,以下僅列出相異處。圖4的寄存器配置表402產(chǎn)生附屬信息給位于暫時(shí)寄存器T3的NCUALUOP微指令126以及由移位微指令126寫(xiě)入的條件旗標(biāo)寄存器926的數(shù)值等等。微指令126系依據(jù)第11、12與13圖的描述來(lái)執(zhí)行。執(zhí)行單元424由保留站406接收步驟1056所產(chǎn)生的移位微指令126、由寄存器文件106的寄存器R2與R3接收來(lái)源操作數(shù)數(shù)值、以及依據(jù)圖11的步驟1102由條件旗標(biāo)寄存器926接收條件旗標(biāo)924(或是由導(dǎo)向總線128與/或重排緩沖器422)。執(zhí)行單元424在寄存器R2與R3執(zhí)行移位操作(若是ALU操作系進(jìn)位使用操作,則對(duì)所接收到的C旗標(biāo)902進(jìn)行此操作)以產(chǎn)生一結(jié)果并依據(jù)步驟1104寫(xiě)入暫時(shí)寄存器T3。此外,執(zhí)行單元424依據(jù)步驟1104產(chǎn)生新的架構(gòu)條件旗標(biāo)902數(shù)值,并依據(jù)圖11的寫(xiě)入條件旗標(biāo)寄存器926的步驟1114來(lái)寫(xiě)入新的條件旗標(biāo)928。暫時(shí)寄存器T3的數(shù)值與條件旗標(biāo)928系提供至導(dǎo)向總線128供NCUALUOP微指令126利用,若非來(lái)自導(dǎo)向總線128則是寫(xiě)入重排緩沖器422的項(xiàng)目供NCUALUOP微指令126利用,并且若非來(lái)自導(dǎo)向總線128或重排緩沖器422時(shí),最后在除了例外事件出現(xiàn)、分支誤預(yù)測(cè)、或是其它無(wú)效事件之外被退出至其適當(dāng)?shù)臓顟B(tài)而被NCUALUOP微指令126利用。尤其是,圖9的多工器922的操作系選擇適當(dāng)?shù)臈l件旗標(biāo)924提供給執(zhí)行單元424。執(zhí)行單元424由保留站406接收步驟1056所產(chǎn)生的NCUALUOP微指令126、由寄存器文件106的寄存器R1與暫時(shí)寄存器T3接收來(lái)源操作數(shù)數(shù)值、以及依據(jù)步驟1202由條件旗標(biāo)寄存器926接收條件旗標(biāo)924。執(zhí)行單元424在寄存器R1與暫時(shí)寄存器T3執(zhí)行ALU操作(在ALU操作系一使用進(jìn)位操作時(shí),亦在接收到的C旗標(biāo)902執(zhí)行)以產(chǎn)生一結(jié)果,并依據(jù)步驟1204寫(xiě)入暫時(shí)寄存器T2。此外:(1)若是架構(gòu)條件旗標(biāo)902不滿足指定條件(圖15中標(biāo)示為NOTSATISFIED),執(zhí)行單元424依據(jù)步驟1216產(chǎn)生新的條件旗標(biāo)928數(shù)值以寫(xiě)入條件旗標(biāo)寄存器926;(2)若是架構(gòu)條件旗標(biāo)902滿足指定條件且USE位908系被清除(在圖15中標(biāo)示為SAT.,USE==0),執(zhí)行單元424依據(jù)圖12B的步驟1226產(chǎn)生新的條件旗標(biāo)928數(shù)值以寫(xiě)入條件旗標(biāo)寄存器926;以及(3)若是架構(gòu)條件旗標(biāo)902滿足指定條件且USE位908被設(shè)定(圖15中標(biāo)示為SAT.,USE==1),執(zhí)行單元424依據(jù)圖12的步驟1228產(chǎn)生新的條件旗標(biāo)928數(shù)值以寫(xiě)入條件旗標(biāo)寄存器926。圖15的CMOV微指令126的執(zhí)行系類似于圖14所描述者。在另一實(shí)施例中,如前述,USE位908并不存在,而執(zhí)行單元424改以檢驗(yàn)條件ALU微指令126內(nèi)的指針來(lái)確認(rèn)是以PSC位906內(nèi)的預(yù)移位進(jìn)位旗標(biāo)數(shù)值更新架構(gòu)進(jìn)位旗標(biāo)902,還是以舊的進(jìn)位旗標(biāo)數(shù)值924做更新。在前文中可發(fā)現(xiàn),移位微指令126并不替代條件旗標(biāo)902的舊的數(shù)值,而是將條件旗標(biāo)902的舊的數(shù)值寫(xiě)回條件旗標(biāo)寄存器926,因此,由移位微指令126接收條件旗標(biāo)寄存器926的結(jié)果的條件ALU操作微指令126,可確認(rèn)舊的條件旗標(biāo)902是否滿足由ISA條件ALU指令124所指定的條件。另一方面,若是移位微指令126系以新產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值代替舊的進(jìn)位旗標(biāo)902,條件ALU操作微指令126將不會(huì)確認(rèn)舊的條件旗標(biāo)902是否滿足指定條件。請(qǐng)參照?qǐng)D16(包括圖16A和圖16B),圖中是以一方塊圖說(shuō)明本發(fā)明圖1的執(zhí)行管線112執(zhí)行一條件ALU指令124的情形。具體來(lái)說(shuō),此條件ALU指令124系一旗標(biāo)更新、預(yù)移位、進(jìn)位更新條件ALU操作ISA指令124,硬件指令轉(zhuǎn)譯器104則是依據(jù)圖10的步驟1054將此指令124轉(zhuǎn)譯為微指令126。圖16的操作在許多面向系類似于圖15的操作,相似部分在此不與贅述,而僅說(shuō)明相異之處。圖4的寄存器配置表402產(chǎn)生附屬信息給移位微指令126寫(xiě)入暫時(shí)寄存器T3的數(shù)值的CUALUOP微指令126,不過(guò),由于移位微指令126并不寫(xiě)入條件旗標(biāo)寄存器,此寄存器配置表并不產(chǎn)生其相關(guān)信息。執(zhí)行單元424由保留站406接收步驟1054所產(chǎn)生移位微指令126并依據(jù)步驟1102由寄存器文件106的寄存器R2與R3接收來(lái)源操作數(shù)數(shù)值,但不接收條件旗標(biāo)924(除非ALU操作系一使用進(jìn)位操作)。此執(zhí)行單元424在寄存器R2與R3上進(jìn)行移位操作(若是ALU操作系一使用進(jìn)位操作,則在所接收到的C旗標(biāo)902上進(jìn)行)以產(chǎn)生一結(jié)果依據(jù)步驟1104寫(xiě)入暫時(shí)寄存器T3。暫時(shí)寄存器T3的數(shù)值系提供至導(dǎo)向總線128供CUALUOP微指令126利用、若非來(lái)自導(dǎo)向總線128,則是寫(xiě)入重排緩沖器422的項(xiàng)目供CUALUOP微指令126利用、以及若非來(lái)自導(dǎo)向總線128或重排緩沖器422,則是除了例外事件出現(xiàn)、分支誤預(yù)測(cè)、或其它無(wú)效事件之外被引退至其適當(dāng)?shù)臓顟B(tài)供CUALUOP微指令126利用。執(zhí)行單元424由保留站406接收步驟1054所產(chǎn)生的CUALUOP微指令126,由寄存器文件106的寄存器R1與緩沖寄存器T3接收來(lái)源操作數(shù)數(shù)值,以及由條件旗標(biāo)寄存器926并依據(jù)步驟1202接收條件旗標(biāo)924。執(zhí)行單元424在寄存器R1與暫時(shí)寄存器T3執(zhí)行ALU操作(若是ALU操作系一使用進(jìn)位操作,則在所接收到的C旗標(biāo)902執(zhí)行)以產(chǎn)生一結(jié)果并依據(jù)步驟1204寫(xiě)入暫時(shí)寄存器T2。此外:(1)若是架構(gòu)條件旗標(biāo)902并不滿足指定條件(在圖16中標(biāo)示為NOTSATISFIED),執(zhí)行單元424依據(jù)步驟1216產(chǎn)生新的條件旗標(biāo)928數(shù)值以寫(xiě)入條件旗標(biāo)寄存器926;以及(2)若是架構(gòu)條件旗標(biāo)902滿足指定條件(在圖16中標(biāo)示為SATISFIED),執(zhí)行單元424依據(jù)圖12的步驟1222產(chǎn)生新的條件旗標(biāo)928數(shù)值以寫(xiě)入條件旗標(biāo)寄存器926。圖16的CMOV微指令126的執(zhí)行系類似于圖14所描述者。請(qǐng)參照?qǐng)D17,圖中是以一方塊圖顯示本發(fā)明圖1的執(zhí)行管線112執(zhí)行一條件ALU指令124的操作。具體來(lái)說(shuō),此條件ALU指令124系一非旗標(biāo)更新、預(yù)移位、使用進(jìn)位條件ALU操作的ISA指令124,硬件指令轉(zhuǎn)譯器104將此指令轉(zhuǎn)譯為圖10的步驟1036所述的微指令126。依據(jù)圖17的操作在許多面向是相似于圖16的操作,相似的操作在此不再贅述,以下僅列出相異處。圖17的移位微指令126的執(zhí)行系類似于圖16所描述者。執(zhí)行單元424由保留站406接收步驟1036所產(chǎn)生的ALUOPUC微指令126、由寄存器文件106的寄存器R1與暫時(shí)寄存器T3接收來(lái)源操作數(shù)數(shù)值、以及依據(jù)步驟1202由條件旗標(biāo)寄存器926接收條件旗標(biāo)924。因?yàn)锳LU操作系一使用進(jìn)位操作,執(zhí)行單元424在寄存器R1、暫時(shí)寄存器T3與接收到的C旗標(biāo)902執(zhí)行ALU操作,以產(chǎn)生一結(jié)果并依據(jù)步驟1204寫(xiě)入暫時(shí)寄存器T2。執(zhí)行單元424并不寫(xiě)入條件旗標(biāo)寄存器926。執(zhí)行單元424接收步驟1036所產(chǎn)生的XMOV微指令126、暫時(shí)寄存器T2與目的寄存器RD的來(lái)源操作數(shù)數(shù)值、以及依據(jù)圖13的步驟1302所產(chǎn)生的條件旗標(biāo)924。依據(jù)圖13的步驟1316與1314,在條件旗標(biāo)924滿足預(yù)設(shè)條件時(shí),執(zhí)行單元424將暫時(shí)寄存器T2的來(lái)源操作數(shù)的數(shù)值作為其結(jié)果輸出,而在條件旗標(biāo)924不滿足預(yù)設(shè)條件時(shí),執(zhí)行單元424將目的寄存器RD的來(lái)源操作數(shù)的數(shù)值作為其結(jié)果輸出。此結(jié)果數(shù)值系提供至導(dǎo)向總線128供后續(xù)微指令126利用、此結(jié)果數(shù)值系寫(xiě)入重排緩沖器422的項(xiàng)目、并且除了例外事件出現(xiàn)、分支誤預(yù)測(cè)、或是其它無(wú)效事件之外,此結(jié)果數(shù)值會(huì)引退至其適當(dāng)?shù)募軜?gòu)狀態(tài)。請(qǐng)參照?qǐng)D18,圖中是以一方塊圖說(shuō)明本發(fā)明圖1的執(zhí)行管線112執(zhí)行一條件ALU指令124的情形。具體來(lái)說(shuō),此條件ALU指令124是一非旗標(biāo)更新、預(yù)移位、非使用進(jìn)位條件ALU操作的ISA指令124,而硬件指令轉(zhuǎn)譯器104系將此指令124轉(zhuǎn)譯為圖10的步驟1034的微指令126。依據(jù)圖18所進(jìn)行的操作在許多面向系類似于依據(jù)圖17所進(jìn)行者,其中相似處系不再贅述,而僅說(shuō)明相異處。圖18的移位微指令126的執(zhí)行系類似于圖16所描述者。圖18的ALUOP微指令126的執(zhí)行系類似于圖17的ALUOPUC微指令126的執(zhí)行,除了圖18的ALUOP微指令126并不使用C旗標(biāo)902來(lái)產(chǎn)生其結(jié)果。圖18的XMOV微指令126的執(zhí)行系類似于圖17的XMOV微指令126的執(zhí)行。請(qǐng)參照?qǐng)D19,圖中是以一方塊圖說(shuō)明本發(fā)明圖1的執(zhí)行管線112執(zhí)行一條件ALU指令124。具體來(lái)說(shuō),此條件ALU指令124系一非旗標(biāo)更新、非預(yù)移位、使用進(jìn)位條件ALU操作的ISA指令124,而硬件指令轉(zhuǎn)譯器104系將此指令124轉(zhuǎn)譯為圖10的步驟1026所述的微指令126。依據(jù)圖19的操作在許多面向系類似于圖17所述者,相似處在此不再贅述,而僅說(shuō)明相異處。條件ALU指令124的轉(zhuǎn)譯系一非旗標(biāo)更新、非預(yù)移位、使用進(jìn)位條件ALU操作的ISA指令124,而不包含一移位微指令126。執(zhí)行單元424從保留站406接收步驟1026所述的ALUOPUC微指令126、從寄存器文件106的寄存器R1與R2接收來(lái)源操作數(shù)數(shù)值、以及依據(jù)步驟1202從條件旗標(biāo)寄存器926接收條件旗標(biāo)924。因?yàn)锳LU操作系一使用進(jìn)位操作,執(zhí)行單元424在寄存器R1與R2以及所接收到的C旗標(biāo)902執(zhí)行ALU操作,以產(chǎn)生一結(jié)果且依據(jù)步驟1204寫(xiě)入暫時(shí)寄存器T2。執(zhí)行單元424并不寫(xiě)入條件旗標(biāo)寄存器926。圖19的XMOV微指令126的執(zhí)行系類似于圖17的XMOV微指令126的執(zhí)行。請(qǐng)參照?qǐng)D20,圖中是以一方塊圖說(shuō)明本發(fā)明圖1的執(zhí)行管線112執(zhí)行一條件ALU指令124。具體來(lái)說(shuō),此條件ALU指令124系一非旗標(biāo)更新、非預(yù)移位、非使用進(jìn)位條件ALU操作的ISA指令124,硬件指令轉(zhuǎn)譯器104系將此指令轉(zhuǎn)譯為圖10的步驟1024所述的微指令126。依據(jù)圖20的操作在許多面向系類似于圖19所描述的操作,其中相同處不再贅述,而僅說(shuō)明相異處。圖20的ALUOP微指令126的執(zhí)行系類似于圖19的ALUOPUC微指令126的執(zhí)行,除了圖20的ALUOP微指令126并不使用C旗標(biāo)902來(lái)產(chǎn)生其結(jié)果。圖20的XMOV微指令126的執(zhí)行系類似于圖17的XMOV微指令126的執(zhí)行。在前文中可以發(fā)現(xiàn),本發(fā)明所述的實(shí)施例可避免允許微指令126來(lái)指定一額外來(lái)源操作數(shù)所衍生出來(lái)的缺點(diǎn)。這些缺點(diǎn)包括,第一,對(duì)各個(gè)將利用額外來(lái)源操作數(shù)執(zhí)行微指令126的執(zhí)行單元424,在通用寄存器文件需設(shè)置一額外的讀出端口。第二,對(duì)各個(gè)將利用額外來(lái)源操作數(shù)執(zhí)行微指令126的執(zhí)行單元424,在重排緩沖器422需設(shè)置一個(gè)額外的讀出端口。第三,對(duì)各個(gè)將利用額外來(lái)源操作數(shù)執(zhí)行微指令126的執(zhí)行單元424,在導(dǎo)向總線128上需使用更多的線路。第四,對(duì)各個(gè)將利用額外來(lái)源操作數(shù)執(zhí)行微指令126的執(zhí)行單元424,需要一個(gè)額外相對(duì)較大的多工器。第五,需要使用Q個(gè)額外的標(biāo)簽比較器,其中:Q=∑i=1ton,(R[i]*P[i]*J[i])其中,n是執(zhí)行單元424的數(shù)量,R[i]是保留站406提供給第[i]個(gè)執(zhí)行單元424的項(xiàng)目的數(shù)量406,P[i]是可由第[i]個(gè)執(zhí)行單元424所執(zhí)行微指令所能指定的來(lái)源操作數(shù)的最大數(shù)量,以及J[i]是能夠?qū)蛑恋赱i]個(gè)執(zhí)行單元424的執(zhí)行單元424的數(shù)量。第六,對(duì)額外的來(lái)源操作數(shù),在寄存器配置表402中需要額外的重命名查詢操作。第七,需要擴(kuò)展保留站406以處理額外的來(lái)源操作數(shù)。這些在速度、電力與空間付出的額外成本是不受歡迎的。相同來(lái)源目的(SAME-SOURCE-DESTINATION)優(yōu)化實(shí)施例請(qǐng)參照?qǐng)D21,圖中是以流程圖說(shuō)明本發(fā)明圖1的硬件指令轉(zhuǎn)譯器104轉(zhuǎn)譯條件ALU指令124的操作?;旧?,硬件指令轉(zhuǎn)譯器104依據(jù)圖21所述的操作在許多面向系類似于依據(jù)圖10所述的操作,尤其是對(duì)應(yīng)于各種需要做出決定的步驟,因而在此對(duì)于這些步驟給予相同的編號(hào)。請(qǐng)參照?qǐng)D21,圖10的步驟1002系以步驟2102予以取代。在步驟2102中,硬件指令轉(zhuǎn)譯器104遇到的條件ALU指令124系不同于步驟1002所遇到的,因?yàn)樵诓襟E2102所遭遇到的條件ALU指令124系在多個(gè)來(lái)源寄存器中指定一個(gè)寄存器作為目的寄存器。硬件指令轉(zhuǎn)譯器104系配置來(lái)識(shí)別此條件并且優(yōu)化其輸出的微指令126。尤其是,硬件指令轉(zhuǎn)譯器104系將相同來(lái)源目的的條件ALU指令124解碼并將其轉(zhuǎn)譯為與圖10的步驟1024、1026、1034、1036、1044、1054與1055(步驟10XX)所描述者不同的微指令126序列。此不同的微指令126序列系描述于圖21的步驟2124、2126、2134、2136、2144、2154與2156(步驟21XX)以取代其相對(duì)應(yīng)的步驟10XX。尤其是,步驟21XX中的各個(gè)步驟的微指令126序列所具有的微指令126,較步驟10XX內(nèi)的相對(duì)應(yīng)微指令126序列少一個(gè)指令。具體來(lái)說(shuō),步驟21XX的序列并不包含CMOV或XMOV微指令126,選擇性寫(xiě)入原始目的寄存器數(shù)值或是結(jié)果數(shù)值的操作,系由條件ALU微指令126在序列的末端執(zhí)行。此操作在下列段落會(huì)有更清楚的說(shuō)明。在步驟2124中,硬件指令轉(zhuǎn)譯器104將相同來(lái)源目的非旗標(biāo)更新、非預(yù)移位、非進(jìn)位使用的條件ALU指令124轉(zhuǎn)譯為單一個(gè)微指令126,即一條件ALU操作微指令126(標(biāo)示為ALUOPCC)。在步驟2124的實(shí)例中,條件ALU指令124系類似于步驟1024所描述者,除了第一來(lái)源操作數(shù)系目的寄存器(RD)。因此,條件ALU指令124指定一第一來(lái)源寄存器(RD)與一第二來(lái)源寄存器(R2),一ALU操作(標(biāo)示為ALUOP)用以執(zhí)行于第一來(lái)源寄存器RD與第二來(lái)源寄存器R2以產(chǎn)生一結(jié)果,而目的寄存器(RD)則與第一來(lái)源寄存器相同,執(zhí)行結(jié)果系有條件地寫(xiě)入此目的寄存器中。條件ALUOP微指令126與條件ALU指令124指定相同的ALU操作與條件。執(zhí)行條件ALUOP微指令126的執(zhí)行單元424接收舊的或是當(dāng)前的目的寄存器(RD)的數(shù)值,同時(shí)依據(jù)步驟1202接收第二來(lái)源操作數(shù)R2的數(shù)值,并依據(jù)步驟1204執(zhí)行ALU操作于此兩個(gè)來(lái)源操作數(shù)以產(chǎn)生一結(jié)果。執(zhí)行單元424亦接收條件旗標(biāo)924并依據(jù)步驟1204檢驗(yàn)條件旗標(biāo)924以確認(rèn)其是否滿足指定條件。若是,執(zhí)行單元424依據(jù)步驟1211輸出結(jié)果,否則就依據(jù)步驟1212輸出舊的目的寄存器數(shù)值。條件ALUOP微指令126的執(zhí)行是以方塊圖呈現(xiàn)于第28圖。此流程終止于步驟2124。在步驟2126中,硬件指令轉(zhuǎn)譯器104將相同來(lái)源目的非旗標(biāo)更新、非預(yù)移位、使用進(jìn)位的條件ALU指令124轉(zhuǎn)譯為單一個(gè)微指令126,即一使用進(jìn)位條件ALU操作微指令126(標(biāo)示為ALUOPUCCC)。在步驟2126的實(shí)例中,此條件ALU指令124是類似于步驟2124所描述者,除了其所指定的ALU操作系使用進(jìn)位旗標(biāo),并且此指令亦類似于步驟1026所描述者,除了第一來(lái)源操作數(shù)系目的寄存器(RD)。條件ALUOPUC微指令126是類似于步驟2124所描述者;不過(guò),其所指定的ALU操作系使用進(jìn)位旗標(biāo)。如圖27的方塊圖所示的條件ALUOPUC微指令126的執(zhí)行系類似于步驟2124的條件ALUOP微指令126的執(zhí)行,除了執(zhí)行單元424系使用進(jìn)位旗標(biāo)來(lái)執(zhí)行ALU操作。此流程終止于步驟2126。在步驟2134中,硬件指令轉(zhuǎn)譯器104系將相同來(lái)源目的非旗標(biāo)更新、預(yù)移位、非使用進(jìn)位的條件ALU指令124轉(zhuǎn)譯為第一與第二微指令126,即:(1)一移位微指令126;以及(2)一ALUOP微指令126。在步驟2134的實(shí)例中,條件ALU指令124系類似于步驟1034所描述者,除了第一來(lái)源操作數(shù)系目的寄存器(RD)外,并且,此指令系類似于步驟2124所描述者,除了條件ALU指令124亦指定一具有一移位量的預(yù)移位操作于第二來(lái)源操作數(shù)(R2),在步驟2134的實(shí)例中,此移位量系儲(chǔ)存于由條件ALU指令124所指定的第三來(lái)源寄存器(R3)。不過(guò),若是條件ALU指令124屬于會(huì)將移位量指定為指令124內(nèi)的常數(shù)的種類,第三來(lái)源寄存器就不會(huì)被使用。移位微指令126系類似于步驟1034所描述者,而執(zhí)行單元424執(zhí)行此移位微指令126的方式系類似于步驟1034與圖18所描述者。雖然在步驟2134中,因?yàn)闂l件ALU指令124指示架構(gòu)條件旗標(biāo)902不會(huì)被更新,因此,由移位微指令126產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值并不會(huì)被使用,不過(guò),如在步驟2156,由移位微指令126所產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值則是會(huì)被使用到。此外,此預(yù)移位操作會(huì)需要舊的進(jìn)位旗標(biāo)旋轉(zhuǎn)至移位后的結(jié)果數(shù)值;舉例來(lái)說(shuō),RRX預(yù)移位操作系將進(jìn)位旗標(biāo)移位至結(jié)果的最高有效位。在此情況下,雖未見(jiàn)于圖21(除了步驟2156之外),當(dāng)執(zhí)行單元424執(zhí)行移位微指令126時(shí),它亦會(huì)讀取條件旗標(biāo)924以取得當(dāng)前的進(jìn)位旗標(biāo)數(shù)值。條件ALUOP微指令126及其執(zhí)行系類似于步驟2124所描述者;不過(guò),此微指令系接收暫時(shí)寄存器T3的數(shù)值而非寄存器R2的數(shù)值,并且執(zhí)行ALU操作于寄存器R1與暫時(shí)寄存器T3以產(chǎn)生結(jié)果寫(xiě)入目的寄存器。移位微指令126的執(zhí)行與條件ALUOP微指令126是呈現(xiàn)于第26圖中。此流程終止于步驟2134。在步驟2136中,硬件指令轉(zhuǎn)譯器104將相同來(lái)源目的非旗標(biāo)更新、預(yù)移位、使用進(jìn)位的條件ALU指令124更新為第一與第二微指令126,即:(1)一移位微指令126;以及(2)一使用進(jìn)位條件算術(shù)與邏輯單元ALUOP微指令126(標(biāo)示為ALUOPUCCC)。在步驟2136的實(shí)例中,條件ALU指令124系類似于步驟2134所描述者,除了所指定的ALU操作系使用進(jìn)位旗標(biāo),并且,此指令系類似于步驟1036所描述者,除了第一來(lái)源操作數(shù)系目的寄存器(RD)。這兩個(gè)微指令126以及其執(zhí)行系類似于步驟2134所描述者;不過(guò),ALUOPUC微指令126亦接收條件旗標(biāo)924以取得進(jìn)位旗標(biāo)當(dāng)前的數(shù)值以使用于進(jìn)位使用ALU操作。移位微指令126與條件ALUOPUC微指令126的執(zhí)行,如圖25所示,系類似于步驟2134中的移位微指令126與條件ALUOP微指令126的執(zhí)行,除了執(zhí)行單元424系使用進(jìn)位旗標(biāo)來(lái)執(zhí)行ALU操作。此流程終止于步驟2136。在步驟2144中,硬件指令轉(zhuǎn)譯器104將相同來(lái)源目的旗標(biāo)更新、非預(yù)移位的條件ALU指令124轉(zhuǎn)譯為單一個(gè)微指令126,即一條件ALU操作微指令126(標(biāo)示為ALUOPCC)。在步驟2144的實(shí)例中,條件ALU指令124系類似于步驟2124的條件ALU指令124,除了會(huì)更新架構(gòu)條件旗標(biāo)902之外,并且系類似于步驟1044所描述者,除了第一來(lái)源操作數(shù)系目的寄存器。步驟2144的條件ALU操作微指令126及其操作系類似于步驟2124所描述者,除了步驟2144的ALU操作微指令126亦更新架構(gòu)條件旗標(biāo)902,并且系類似于步驟1044的條件ALU微指令126,除了其第一操作數(shù)系目的寄存器而非寄存器R1并且其目的寄存器系目的寄存器而非暫時(shí)寄存器T2。執(zhí)行單元424執(zhí)行條件ALU微指令126的執(zhí)行單元424系依據(jù)步驟1202接收目的寄存器RD與寄存器R2作為來(lái)源操作數(shù),并且依據(jù)步驟1204執(zhí)行此指定的ALU操作于此二個(gè)來(lái)源操作數(shù)以產(chǎn)生一結(jié)果。執(zhí)行單元424亦接收架構(gòu)條件旗標(biāo)902并依據(jù)步驟1206確認(rèn)其是否滿足指定條件。若是,執(zhí)行單元424依據(jù)ALU操作是否為進(jìn)位更新操作,來(lái)選擇依據(jù)步驟1222或1226輸出ALU操作的結(jié)果以寫(xiě)入目的寄存器RD,否則就依據(jù)步驟1216輸出目的寄存器RD的舊的數(shù)值。此外,執(zhí)行單元424依據(jù)條件是否滿足以及ALU操作是否為進(jìn)位更新操作,來(lái)選擇依據(jù)步驟1216、1222或是1226寫(xiě)入條件旗標(biāo)寄存器926。若是條件不滿足,執(zhí)行單元424依據(jù)步驟1216將舊的條件旗標(biāo)數(shù)值寫(xiě)入架構(gòu)條件旗標(biāo)902;反之,若是條件滿足,執(zhí)行單元424在采取條件進(jìn)位ALU操作的情況下,系依據(jù)步驟1222,基于ALU操作的結(jié)果來(lái)更新架構(gòu)條件旗標(biāo)902,而在采取非條件進(jìn)位ALU操作的情況下,則是依據(jù)步驟1226。條件算術(shù)與邏輯單元ALUOP微指令126的執(zhí)行系呈現(xiàn)于圖22。值得注意的是,在步驟2144(以及步驟1054與1056)產(chǎn)生的條件ALU操作微指令126所執(zhí)行的ALU操作,可以是一使用進(jìn)位旗標(biāo)的ALU操作(類似于步驟1026與1036所描述者),而由于微指令126會(huì)讀取旗標(biāo)(由RDFLAGS標(biāo)示),執(zhí)行單元424具有此進(jìn)位旗標(biāo)來(lái)執(zhí)行進(jìn)位使用ALU操作。此流程終止于步驟2144。在步驟2154,硬件指令轉(zhuǎn)譯器104將相同來(lái)源目的旗標(biāo)更新、預(yù)移位、進(jìn)位使用的條件ALU指令124轉(zhuǎn)譯為第一與第二微指令126,即(1)一移位微指令126;以及(2)一條件進(jìn)位更新ALU操作微指令126(標(biāo)示為CUALUOPCC)。在步驟2154的實(shí)例中,條件ALU指令124系類似于步驟2134所描述者,除了條件ALU指令124亦指定架構(gòu)條件旗標(biāo)902是要被更新的,并且系類似于步驟1054所描述者,除了第一來(lái)源操作數(shù)系目的寄存器。移位微指令126系類似于步驟1034所描述者,并且,執(zhí)行單元424執(zhí)行移位微指令126的方式系類似于圖18的步驟1034所描述者。CUALUOP微指令126及其執(zhí)行系類似于步驟2124的條件ALU微指令126,除了步驟2144的CUALUOP微指令126亦會(huì)更新架構(gòu)條件旗標(biāo)902,并且系類似于步驟1054的條件ALU微指令126,除了其第一操作數(shù)系目的寄存器而非寄存器R1,且其目的寄存器系目的寄存器而非暫時(shí)寄存器T2。執(zhí)行CUALUOP微指令126的執(zhí)行單元424系依據(jù)步驟2102接收目的寄存器RD與暫時(shí)寄存器T3作為來(lái)源操作數(shù),并依據(jù)步驟1204執(zhí)行此指定的ALU操作于目的寄存器與暫時(shí)寄存器T3以產(chǎn)生一結(jié)果。此外,執(zhí)行單元424依據(jù)步驟1202接收架構(gòu)條件旗標(biāo)902,并且依據(jù)步驟1206確認(rèn)其是否滿足指定條件。此外,依據(jù)條件是否滿足,執(zhí)行單元424系依據(jù)步驟1216或1222以更新條件旗標(biāo)寄存器926。若是條件不被滿足,執(zhí)行單元424將舊的條件旗標(biāo)數(shù)值寫(xiě)入架構(gòu)條件旗標(biāo)902;反之,若是條件滿足,執(zhí)行單元424則基于ALU操作的結(jié)果來(lái)更新架構(gòu)條件旗標(biāo)902。移位微指令126與條件ALUOP微指令126的執(zhí)行系呈現(xiàn)于第24圖。此流程終止于步驟2154。在步驟2156中,硬件指令轉(zhuǎn)譯器104系將相同來(lái)源目的旗標(biāo)更新、欲移位、非進(jìn)位更新的條件ALU指令124轉(zhuǎn)譯為第一與第二微指令126,即:(1)一移位微指令126;以及(2)一條件非進(jìn)位更新ALU操作微指令126(標(biāo)示為NCUALUOPCC)。在步驟2156的實(shí)例中,條件ALU指令124系類似于步驟2154所描述者,除了條件ALU指令124系指定一非進(jìn)位更新ALU操作,并且系類似于步驟1056所描述者,除了第一來(lái)源操作數(shù)系目的寄存器。因此,在條件滿足時(shí),架構(gòu)進(jìn)位旗標(biāo)902系以此預(yù)移位進(jìn)位旗標(biāo)數(shù)值進(jìn)行更新。移位微指令126系類似于步驟2134所描述者;不過(guò),移位微指令126會(huì)讀取以及寫(xiě)入條件旗標(biāo)寄存器926。具體來(lái)說(shuō),執(zhí)行移位微指令126的執(zhí)行單元424系:(1)將預(yù)移位操作所產(chǎn)生的進(jìn)位旗標(biāo)數(shù)值寫(xiě)入PSC位906;(2)設(shè)定USE位908來(lái)指示條件NCUALUOP微指令126去利用PSC位906來(lái)更新架構(gòu)進(jìn)位旗標(biāo)902;以及(3)依據(jù)步驟1114將舊的架構(gòu)條件旗標(biāo)902寫(xiě)回條件旗標(biāo)寄存器926,藉此NCUALUOP微指令126可以評(píng)估架構(gòu)條件旗標(biāo)902的舊的數(shù)值來(lái)確認(rèn)其是否滿足指定條件。NCUALUOP微指令126與條件ALU指令124系指定相同的條件。執(zhí)行NCUALUOP微指令126的執(zhí)行單元424系依據(jù)步驟1204執(zhí)行ALU操作于目的寄存器與暫時(shí)寄存器T3以產(chǎn)生一結(jié)果。此外,執(zhí)行單元424接收架構(gòu)條件旗標(biāo)902并且依據(jù)步驟1206確認(rèn)其是否滿足條件。此外,執(zhí)行單元424依據(jù)條件是否滿足以及USE位908是否被設(shè)定,選擇依據(jù)步驟1216、1226或1228來(lái)寫(xiě)入條件旗標(biāo)寄存器926。具體來(lái)說(shuō),若是條件不被滿足,執(zhí)行單元424會(huì)依據(jù)步驟1216將舊的條件旗標(biāo)數(shù)值寫(xiě)入架構(gòu)條件旗標(biāo)902;而在條件滿足時(shí),執(zhí)行單元424會(huì)視USE位908是否被設(shè)定,選擇依據(jù)步驟1226或是1228,且基于ALU操作的結(jié)果來(lái)更新架構(gòu)條件旗標(biāo)902。具體來(lái)說(shuō),架構(gòu)溢位(V)旗標(biāo)902系以舊的溢位旗標(biāo)數(shù)值924寫(xiě)入,N旗標(biāo)與Z旗標(biāo)則是以基于結(jié)果所產(chǎn)生的新的數(shù)值寫(xiě)入。此外,若是USE位908如此指示,架構(gòu)進(jìn)位旗標(biāo)902系依據(jù)步驟1228以位于PSC位906的預(yù)移位進(jìn)位旗標(biāo)數(shù)值進(jìn)行更新,否則就依據(jù)步驟1226以舊的進(jìn)位旗標(biāo)數(shù)值924進(jìn)行更新。移位微指令126與NCUALUOP微指令126的執(zhí)行系呈現(xiàn)于第23圖。此流程終止于步驟2156。此處理方式的優(yōu)點(diǎn)在于,在條件ALU指令124指定目的寄存器與來(lái)源寄存器其中之一為同一者時(shí),硬件指令轉(zhuǎn)譯器104可以進(jìn)行優(yōu)化且使所產(chǎn)生的微指令126序列減少一個(gè)微指令126。第一,其可增加微處理器100的前瞻(lookahead)功能以利用所欲執(zhí)行的程序的指令層的平行處理來(lái)增加執(zhí)行單元424的使用。因?yàn)槲⒅噶?26數(shù)量減少意味著重排緩沖器422中供額外微指令126所用的自由槽(slot)將增加,于是能產(chǎn)生一較大的微指令126池(pool)以完成發(fā)布準(zhǔn)備供后續(xù)執(zhí)行之用,因而可以提升此前瞻功能。第二,因?yàn)槊恳粋€(gè)時(shí)脈周期中,硬件指令轉(zhuǎn)譯器104只能輸出微指令126至一預(yù)設(shè)數(shù)量的槽(slot),而至少在一實(shí)施例中,硬件指令轉(zhuǎn)譯器104必須在同一時(shí)脈周期內(nèi)輸出實(shí)施一給定ISA指令124所需的所有微指令126,因此,減少一條件ALU指令124轉(zhuǎn)譯產(chǎn)生的微指令126數(shù)量,亦可減少每個(gè)周期內(nèi)空的微指令126槽的平均數(shù)量,同時(shí)有助于增加微處理器100的前瞻功能與執(zhí)行單元424的使用。條件非分支指令預(yù)測(cè)以上實(shí)施例所描述的是在限定讀出端口(readport-limited)的管線式微處理器中,將一條件非分支指令,亦即此處所稱的條件ALU指令,轉(zhuǎn)譯為微指令的技術(shù)。第一微指令執(zhí)行一ALU操作并將結(jié)果寫(xiě)入一暫時(shí)寄存器。第二微指令接收來(lái)自暫時(shí)寄存器的結(jié)果與目的寄存器的當(dāng)前數(shù)值,并且在條件滿足時(shí),將結(jié)果寫(xiě)入目的寄存器,而在條件不滿足時(shí),將當(dāng)前數(shù)值寫(xiě)回目的寄存器。相類似地,美國(guó)臨時(shí)申請(qǐng)案61/473,062所描述的實(shí)施例系在一限定讀出端口的管線式微處理器中,將一條件非分支指令,即文中所稱的條件載入指令轉(zhuǎn)譯為微指令。此指令轉(zhuǎn)譯器系將條件載入指令轉(zhuǎn)譯為二個(gè)微指令:(1)一個(gè)同時(shí)取得條件碼與旗標(biāo)的載入微指令,在條件不滿足時(shí),就不更新其架構(gòu)狀態(tài)(例如:頁(yè)表查詢產(chǎn)生的存儲(chǔ)器寫(xiě)入的副作用或是產(chǎn)生例外事件)并且加載一虛設(shè)數(shù)值至?xí)簳r(shí)寄存器,不過(guò),若是條件滿足,就將來(lái)自存儲(chǔ)器的真實(shí)數(shù)值加載暫時(shí)寄存器;以及(2)一個(gè)條件移動(dòng)微指令,接收目的寄存器的當(dāng)前數(shù)值,并且在條件非為真時(shí),將此當(dāng)前數(shù)值移回目的寄存器,而在條件為真時(shí),將來(lái)自暫時(shí)寄存器的數(shù)值移至目的寄存器。雖然此解決方法相較于傳統(tǒng)技術(shù)有所改善,不過(guò),此方法會(huì)產(chǎn)生額外的成本,亦即第二微指令以及第二微指令與第一微指令的關(guān)聯(lián)性有關(guān)的延遲。其次,在微處理器的其它結(jié)構(gòu)的指令槽,例如微指令隊(duì)列、重排緩沖器、保留站、以及執(zhí)行單元也會(huì)被第二微指令利用。此外,第二微指令的出現(xiàn)會(huì)降低每個(gè)時(shí)脈周期中,指令轉(zhuǎn)譯器所發(fā)出、指令發(fā)布單元所發(fā)布、以及指令引退單元所引退的平均指令數(shù)量,因而限制了微處理器的處理能力。本發(fā)明在此提供一種具有更高效能的解決方法,納入一預(yù)測(cè)機(jī)制,類似于分支預(yù)測(cè)方法,來(lái)預(yù)測(cè)條件非分支指令的走向,亦即預(yù)測(cè)條件是否被滿足,而決定是否需要執(zhí)行條件非分支指令。此解決方法讓條件轉(zhuǎn)譯器可基于預(yù)測(cè)信息發(fā)出單一的微指令,而非多個(gè)微指令。微處理器并具有一個(gè)由誤預(yù)測(cè)狀態(tài)恢復(fù)的機(jī)制。以下同時(shí)描述有靜態(tài)與動(dòng)態(tài)預(yù)測(cè)機(jī)制的實(shí)施例。靜態(tài)預(yù)測(cè)機(jī)制系類似于靜態(tài)分支預(yù)測(cè)。動(dòng)態(tài)(或基于歷史信息)的預(yù)測(cè)機(jī)制系在由指令快取擷取條件非分支指令時(shí),檢視此條件非分支指令的程序計(jì)數(shù)器/指令指針的數(shù)值,此運(yùn)作方式類似于分支目標(biāo)存儲(chǔ)器地址快取(branchtargetaddresscache,BTAC)。在靜態(tài)預(yù)測(cè)機(jī)制中,靜態(tài)預(yù)測(cè)器檢視此操作與/或由條件非分支指令指定的條件碼(例如:ALU操作是加,條件碼是EQUAL),并預(yù)測(cè)是否基于現(xiàn)有數(shù)據(jù)(profilingdata)執(zhí)行此操作。舉例來(lái)說(shuō),基于操作與條件碼的結(jié)合與經(jīng)驗(yàn)數(shù)據(jù)顯示相當(dāng)大比例的時(shí)間里會(huì)執(zhí)行條件非分支指令時(shí),于是靜態(tài)預(yù)測(cè)器預(yù)測(cè)此指令將會(huì)被執(zhí)行,而指令轉(zhuǎn)譯器將發(fā)出單一個(gè)非條件微指令,例如:addccdst,src1,src2此條件碼與旗標(biāo)系提供給微指令(也就是addcc),因此,此執(zhí)行單元可以確認(rèn)此預(yù)測(cè)是否正確,并在預(yù)測(cè)錯(cuò)誤時(shí)產(chǎn)生一誤預(yù)測(cè)指標(biāo)。相反地,操作與條件碼的結(jié)合與經(jīng)驗(yàn)數(shù)據(jù)顯示相當(dāng)大比例的時(shí)間條件非分支指令不會(huì)被執(zhí)行的情況下,此靜態(tài)預(yù)測(cè)器預(yù)測(cè)此指令不會(huì)被執(zhí)行,此指令轉(zhuǎn)譯器發(fā)出單一個(gè)不操作(nop)微指令,例如:Nopcc同樣地,此條件碼與旗標(biāo)系提供給微指令(也就是nopcc),因此,執(zhí)行單元在必要時(shí)可以產(chǎn)生一誤預(yù)測(cè)指標(biāo)。在執(zhí)行/不執(zhí)行的比例尚未大到足以證明靜態(tài)預(yù)測(cè)的結(jié)果是正確的情況下,指令轉(zhuǎn)譯器會(huì)恢復(fù)至前述較低效能的多微指令解決方案,例如:轉(zhuǎn)譯器放出兩個(gè)微指令:addtmp,src1,src2movccdst,src-dst,tmp//src-dst是當(dāng)前的dstreg數(shù)值在動(dòng)態(tài)預(yù)測(cè)機(jī)制中,一個(gè)類似BTAC的架構(gòu),也就是這里所稱的條件ALU走向快取(conditionalALUdirectioncache,CADC)擷取以前執(zhí)行的條件非分支指令的走向歷史信息以及其程序計(jì)數(shù)器/指令指針數(shù)值,并基于CADC入口的歷史信息中擷取地址數(shù)值命中情形,來(lái)預(yù)測(cè)后續(xù)擷取的條件非分支指令的走向。此CADC提供其預(yù)測(cè)至指令轉(zhuǎn)譯器。指令轉(zhuǎn)譯器依據(jù)前述靜態(tài)預(yù)測(cè)器所作的預(yù)測(cè)發(fā)出微指令?;貜?fù)機(jī)制會(huì)清除條件非分支指令所在的管線與所有其后的指令(更精確的來(lái)說(shuō),就是由其轉(zhuǎn)譯而來(lái)的微指令)、或是所有至少直接或間接與此條件非分支指令相關(guān)的指令,然后再重復(fù)執(zhí)行(replay)所有被清除的指令。在條件非分支指令的重復(fù)執(zhí)行中,轉(zhuǎn)譯器會(huì)傾向于采取發(fā)出多個(gè)微指令的方式。本發(fā)明的一實(shí)施例是同時(shí)使用靜態(tài)與動(dòng)態(tài)預(yù)測(cè)器,并記錄對(duì)各個(gè)程序計(jì)數(shù)器/指令指針數(shù)值而言,哪一個(gè)預(yù)測(cè)器較為準(zhǔn)確的歷史數(shù)據(jù)。依據(jù)已知的兩階層混合式分支預(yù)測(cè)的方法,可利用此歷史數(shù)據(jù)以在這兩個(gè)預(yù)測(cè)器中動(dòng)態(tài)選擇其一提供最終預(yù)測(cè)。值得注意的是,對(duì)于條件非分支指令的誤預(yù)測(cè)會(huì)造成損失(即清除管線與重復(fù)執(zhí)行條件非分支指令及其后指令或至少直接間接的相關(guān)指令),此損失會(huì)變動(dòng),并且是應(yīng)用程序碼以及/或數(shù)據(jù)集的函數(shù)。所以,預(yù)測(cè)條件非分支指令的解決方案對(duì)某些應(yīng)用程序碼以及/或數(shù)據(jù)集的混合狀態(tài)而言,可能是效能較低的解決方式。此處定義一種非分支指令(non-branchinstruction),此指令并不寫(xiě)入微處理器的程序計(jì)數(shù)器,因此微處理器會(huì)擷取與執(zhí)行此非分支指令的后續(xù)指令。程序計(jì)數(shù)器系應(yīng)用于ARM架構(gòu),其它架構(gòu)則會(huì)使用不同的元件來(lái)取代程序計(jì)數(shù)器。舉例來(lái)說(shuō),x86ISA使用指令指針,而其它ISA使用指令地址寄存器。非分支指令與寫(xiě)入地址至程序計(jì)數(shù)器/指令指針以使微處理器指向此地址的分支指令有明顯的差別。微處理器將開(kāi)始由分支指令寫(xiě)入程序計(jì)數(shù)器/指令指針的地址來(lái)擷取指令,然后再執(zhí)行所擷取的指令。此操作與擷取并執(zhí)行分支指令的后續(xù)指令有明顯差異,因擷取并執(zhí)行分支指令的后續(xù)指令是微處理器的預(yù)設(shè)操作,并且也是在遭遇到非分支指令時(shí)的操作。條件非分支指令的例子包含條件ALU指令與條件加載/儲(chǔ)存指令。請(qǐng)參照?qǐng)D29,圖中顯示本發(fā)明對(duì)于非條件分支指令進(jìn)行預(yù)測(cè)的微處理器100的方塊圖。圖29的微處理器100系類似于圖1的微處理器100,并包含與圖1以及圖4相類似的元件,即指令快取102、指令轉(zhuǎn)譯器104、配置寄存器122、寄存器配置表402、指令發(fā)送單元408、執(zhí)行單元424與重排緩沖器422。執(zhí)行單元424包含一個(gè)或多個(gè)單元來(lái)執(zhí)行這里所稱的微指令126。此外,執(zhí)行單元424會(huì)執(zhí)行不操作微指令126。不操作微指令126系指示執(zhí)行單元424不執(zhí)行操作。進(jìn)一步來(lái)說(shuō),在此所稱的不操作微指令126包含一由轉(zhuǎn)譯出此不操作微指令126的條件ALU指令124所指定的條件、或條件碼。關(guān)于不操作微指令126在以下篇幅會(huì)有更進(jìn)一步的說(shuō)明。微處理器100亦包含架構(gòu)寄存器、暫時(shí)暫存器126與圖9的旗標(biāo)926。圖29的微處理器100并包含一動(dòng)態(tài)預(yù)測(cè)器2932、一靜態(tài)預(yù)測(cè)器2936、與一預(yù)測(cè)器選擇器2934。這些元件系耦接至指令轉(zhuǎn)譯器104,并用來(lái)預(yù)測(cè)(圖2的)一條件ALU指令124的走向(被執(zhí)行或不被執(zhí)行)。圖1的擷取地址134亦提供給動(dòng)態(tài)預(yù)測(cè)器2932與預(yù)測(cè)器選擇器2934。動(dòng)態(tài)預(yù)測(cè)器2932與預(yù)測(cè)器選擇器2934各自包含一具有多個(gè)入口的高速緩存。各個(gè)入口快取一之前執(zhí)行的ARM條件ALU指令124的存儲(chǔ)器地址。也就是說(shuō),當(dāng)微處理器100引退一條件ALU指令124時(shí),動(dòng)態(tài)預(yù)測(cè)器2932與預(yù)測(cè)器選擇器2934會(huì)被檢視,來(lái)判斷其是否包含一入口具有此條件ALU指令124的地址。若是,此入口就會(huì)依據(jù)一歷史數(shù)據(jù)更新指針2974所指示的條件ALU指令124的正確走向做更新;若否,就會(huì)在動(dòng)態(tài)預(yù)測(cè)器2932與預(yù)測(cè)器選擇器2934中各配置一個(gè)入口給條件ALU指令124。雖然圖1的動(dòng)態(tài)預(yù)測(cè)器2932與預(yù)測(cè)器選擇器2934系各自獨(dú)立,不過(guò)在一實(shí)施例中,此二個(gè)元件系整合至單一高速緩存陣列。也就是說(shuō),此單一陣列的各個(gè)入口包含動(dòng)態(tài)預(yù)測(cè)器2932的走向預(yù)測(cè)與預(yù)測(cè)器選擇器2934的選擇字段,這在以下篇幅會(huì)有進(jìn)一步說(shuō)明。動(dòng)態(tài)預(yù)測(cè)器2932的各個(gè)入口儲(chǔ)存有一條件ALU指令124的地址,各個(gè)入口并具有一字段以儲(chǔ)存條件ALU指令124的走向預(yù)測(cè)。此走向預(yù)測(cè)系因應(yīng)此條件ALU指令124在地址上引退的正確走向來(lái)進(jìn)行更新。走向預(yù)測(cè)可包含各種不同格式。舉例來(lái)說(shuō),走向預(yù)測(cè)可包含單一位來(lái)表示被執(zhí)行或不被執(zhí)行。若是預(yù)測(cè)走向是被執(zhí)行,此位就設(shè)定為一特定數(shù)值,若是不執(zhí)行,就設(shè)定為另一個(gè)數(shù)值。再舉另一個(gè)例子,走向預(yù)測(cè)可包含一多位計(jì)數(shù)器,在預(yù)測(cè)走向是被執(zhí)行時(shí),此多位計(jì)數(shù)器會(huì)盡量遞增,若是不執(zhí)行,就會(huì)盡量遞減。計(jì)數(shù)器數(shù)值大于中央值系預(yù)測(cè)被執(zhí)行,小于中央值則是預(yù)測(cè)不被執(zhí)行。每次只要從指令快取102擷取指令區(qū)塊時(shí),擷取地址134會(huì)提供至動(dòng)態(tài)預(yù)測(cè)器2932。動(dòng)態(tài)預(yù)測(cè)器2932檢視此擷取地址134以確認(rèn)是否吻合其高速緩存陣列的有效標(biāo)簽,亦即命中有效標(biāo)簽與否。若是擷取地址134未命中,動(dòng)態(tài)預(yù)測(cè)器2932的動(dòng)態(tài)預(yù)測(cè)輸出端2982輸出一數(shù)值表示無(wú)預(yù)測(cè)(noprediction,NP)。若是擷取地址134命中,動(dòng)態(tài)預(yù)測(cè)器2932在其動(dòng)態(tài)預(yù)測(cè)輸出端2982輸出一數(shù)值,表示執(zhí)行(executed,E)走向或是一不執(zhí)行(notexecuted,NE)走向是依據(jù)儲(chǔ)存于相吻合入口的走向預(yù)測(cè)字段數(shù)值而定。在一實(shí)施例中,即使擷取地址134命中,動(dòng)態(tài)預(yù)測(cè)器2932的動(dòng)態(tài)預(yù)測(cè)輸出端2982仍可能輸出表示無(wú)預(yù)測(cè)(NP)的數(shù)值。例如在歷史數(shù)據(jù)顯示條件ALU指令124將被執(zhí)行或不被執(zhí)行的機(jī)率幾乎相等,也就是條件將被滿足或不被滿足的機(jī)率幾乎相等的情況下。此走向預(yù)測(cè)2982系提供給指令轉(zhuǎn)譯器104。預(yù)測(cè)器選擇器2934的各個(gè)入口亦包含一字段,以儲(chǔ)存每個(gè)地址儲(chǔ)存在此入口的條件ALU指令124的選擇子(selector),選擇子指出動(dòng)態(tài)預(yù)測(cè)器2932或是靜態(tài)預(yù)測(cè)器2936較可能正確預(yù)測(cè)條件ALU指令124的走向。選擇子系因應(yīng)此條件ALU指令124在地址上的引退進(jìn)行更新,特別是歷史數(shù)據(jù)更新指針(historyupdateindicator)2974(指示此預(yù)測(cè)是由動(dòng)態(tài)預(yù)測(cè)器2932或靜態(tài)預(yù)測(cè)器2936所做的)所指示的正確走向與信息來(lái)進(jìn)行更新。選擇子可包含各種不同格式。舉例來(lái)說(shuō),此選擇子可包含單一位,來(lái)表示動(dòng)態(tài)預(yù)測(cè)器2932或靜態(tài)預(yù)測(cè)器2936。在動(dòng)態(tài)預(yù)測(cè)器2932會(huì)正確預(yù)測(cè)走向時(shí),此位系設(shè)定為一特定數(shù)值,而在靜態(tài)預(yù)測(cè)器2936會(huì)正確預(yù)測(cè)走向時(shí),設(shè)定為另一數(shù)值,若是二者都正確預(yù)測(cè)走向,就維持之前選擇的預(yù)測(cè)器。再舉另一個(gè)例子,選擇子可包含一多位計(jì)數(shù)器,在動(dòng)態(tài)預(yù)測(cè)器2932正確預(yù)測(cè)走向時(shí),此多位計(jì)數(shù)器會(huì)盡量遞增,若是靜態(tài)預(yù)測(cè)器2936正確預(yù)測(cè)走向,就會(huì)盡量遞減,若是二者都正確預(yù)測(cè)走向,就不更新計(jì)數(shù)器的數(shù)值。計(jì)數(shù)器數(shù)值大于中央值系預(yù)測(cè)動(dòng)態(tài)預(yù)測(cè)器2932將會(huì)正確預(yù)測(cè)走向,小于中央值則是預(yù)測(cè)靜態(tài)預(yù)測(cè)2936器將會(huì)正確預(yù)測(cè)走向。每次由指令快取102擷取一指令區(qū)塊,指令地址134就會(huì)提供給預(yù)測(cè)器選擇器2934來(lái)檢視擷取地址134以確認(rèn)是否吻合其高速緩存陣列的一有效標(biāo)簽,亦即命中有效標(biāo)簽或是未命中。若是擷取地址134未命中,預(yù)測(cè)器選擇器2934的預(yù)測(cè)選擇輸出端2984輸出一數(shù)值表示無(wú)預(yù)測(cè)(noprediction,NP)。若是擷取地址134命中,預(yù)測(cè)器選擇器2934依據(jù)儲(chǔ)存于相吻合的入口的選擇區(qū)數(shù)值,在其預(yù)測(cè)選擇輸出端2984輸出一數(shù)值以表示動(dòng)態(tài)預(yù)測(cè)器2932(D)或是靜態(tài)預(yù)測(cè)器2936。在一實(shí)施例中,即使擷取地址134命中,預(yù)測(cè)器選擇器2934的選擇預(yù)測(cè)輸出端2984可能還是輸出數(shù)值表示無(wú)預(yù)測(cè)。例如在歷史數(shù)據(jù)顯示動(dòng)態(tài)預(yù)測(cè)器2932或靜態(tài)預(yù)測(cè)器2936都不大可能正確預(yù)測(cè)的情況。此預(yù)測(cè)選擇2984系提供給指令轉(zhuǎn)譯器104。靜態(tài)預(yù)測(cè)器2936接收擷取自指令快取102的指令124,并分析此指令124的條件碼與/或其指定的特殊ALU功能,以預(yù)測(cè)此條件ALU指令124的走向。靜態(tài)預(yù)測(cè)器2936基本上包含一檢視表(lookuptable),此檢視表包含E、NE、或NP指標(biāo)關(guān)聯(lián)至各個(gè)可能的條件碼/ALU功能組合。就一實(shí)施例而言,這些E、NE、或NP指標(biāo)系依據(jù)寫(xiě)給ARM指令集架構(gòu)的程序執(zhí)行的經(jīng)驗(yàn)數(shù)據(jù)而配置在靜態(tài)預(yù)測(cè)器2936內(nèi)。靜態(tài)預(yù)測(cè)2986系提供給指令轉(zhuǎn)譯器104。在一實(shí)施例中,此靜態(tài)預(yù)測(cè)器2936系整合在指令轉(zhuǎn)譯器104內(nèi)。指令轉(zhuǎn)譯器104利用前述預(yù)測(cè)2982/2984/2986,來(lái)將條件ALU指令轉(zhuǎn)譯為微指令126,在以下對(duì)應(yīng)于第30與31圖的篇幅會(huì)有更進(jìn)一步的說(shuō)明。這些預(yù)測(cè)2982/2984/2986系伴隨著條件ALU指令124,沿著微處理器100的管線向下傳送,供執(zhí)行單元424利用以確認(rèn)各個(gè)預(yù)測(cè)器2932/2934/2936是否正確預(yù)測(cè)條件ALU指令124的走向。在一實(shí)施例中,在判斷每個(gè)時(shí)脈周期擷取自指令快取102的指令區(qū)塊會(huì)包含多個(gè)條件ALU指令124的情況下,動(dòng)態(tài)預(yù)測(cè)器2932、預(yù)測(cè)器選擇器2934與靜態(tài)預(yù)測(cè)器2936在每個(gè)時(shí)脈周期都會(huì)產(chǎn)生多個(gè)預(yù)測(cè)2982/2984/2986。在一實(shí)施例中,此微處理器100的微架構(gòu)在許多面向系類似于臺(tái)灣威盛電子所生產(chǎn)的VIANanoTM處理器的微架構(gòu),不過(guò),本實(shí)施例的微處理器100是經(jīng)修改以支持ARM指令集架構(gòu)。此VIANanoTM處理器的微架構(gòu)系一高效能非循序執(zhí)行超純量微架構(gòu)以支持x86指令集架構(gòu)。此處理器經(jīng)如本文所述的修改,即能額外支持ARM微架構(gòu),特別是詳述于下列篇幅,對(duì)應(yīng)于圖2的ARM條件ALU指令124。寄存器配置表402表示一條件移動(dòng)微指令3046(其詳細(xì)說(shuō)明請(qǐng)參照?qǐng)D30)系關(guān)聯(lián)于一ALU微指令3044(其詳細(xì)說(shuō)明請(qǐng)參照?qǐng)D30)的結(jié)果,二者都是由指令轉(zhuǎn)譯器104在特定條件下將條件ALU指令124轉(zhuǎn)譯時(shí)發(fā)出。這些特定條件如下所述,在一條件ALU指令124沒(méi)有可獲得的預(yù)測(cè)、或是一條件ALU指令被誤預(yù)測(cè)而重復(fù)執(zhí)行時(shí)。暫時(shí)寄存器106儲(chǔ)存微處理器100的非架構(gòu)狀態(tài)。暫時(shí)寄存器106可由微架構(gòu)所利用來(lái)暫時(shí)性地儲(chǔ)存執(zhí)行指令集架構(gòu)的指令所需的中間值。進(jìn)一步來(lái)說(shuō),由指令轉(zhuǎn)譯器104放出的微指令可能將暫時(shí)寄存器106指定為來(lái)源以及/或目的操作數(shù)位置。特別是,圖30的ALU微指令3044可能將一暫時(shí)寄存器106指定為其目的寄存器,相關(guān)的條件移動(dòng)微指令3046則是將同一個(gè)暫時(shí)寄存器106指定為其中一個(gè)來(lái)源寄存器。這在以下篇幅會(huì)有更進(jìn)一步的說(shuō)明。至少一個(gè)執(zhí)行單元424具有一算術(shù)邏輯單元(ALU)(未圖標(biāo))用以執(zhí)行各種不同的微指令,包含圖30所示的ALU微指令3044與具有條件碼(CC)的非條件ALU微指令3045。此外,至少一個(gè)執(zhí)行單元424系用以執(zhí)行圖30所示的條件移動(dòng)微指令3046與具有條件碼(CC)的不操作微指令3047。就圖30的條件移動(dòng)微指令3046、具有條件碼的非條件ALU微指令3045、或是具有條件碼的不操作微指令3047而言,執(zhí)行單元424系接收條件碼數(shù)值a224、a254或a274(請(qǐng)參照?qǐng)D30)作為輸入值以及旗標(biāo)926的當(dāng)前數(shù)值。執(zhí)行單元424確認(rèn)旗標(biāo)926的數(shù)值是否滿足條件碼a224、a254或a274指定的條件。因此,執(zhí)行單元424可確認(rèn)條件ALU指令124的正確走向,并判斷動(dòng)態(tài)預(yù)測(cè)器2932以及/或靜態(tài)預(yù)測(cè)器2936是否對(duì)于條件ALU指令124的走向做出誤預(yù)測(cè),此判斷結(jié)果系表示于一誤預(yù)測(cè)指標(biāo)(mispredictionindication)2976以提供給重排緩沖器(ROB)422。此外,執(zhí)行單元424判斷預(yù)測(cè)器選擇器2934選擇的預(yù)測(cè)器2932,2936是否正確預(yù)測(cè)走向,此判斷結(jié)果系用來(lái)更新動(dòng)態(tài)預(yù)測(cè)器2932與預(yù)測(cè)器選擇器2934。就圖30的條件移動(dòng)微指令3046而言,若是條件被滿足,執(zhí)行單元424系將來(lái)源寄存器1的字段a226所指定的暫時(shí)寄存器106的數(shù)值,移動(dòng)至圖30的目的寄存器字段a232所指定的架構(gòu)寄存器106。若是條件不被滿足,就將來(lái)源寄存器2的字段a228所指定的架構(gòu)寄存器106的數(shù)值,也就是原本目的寄存器的數(shù)值,移動(dòng)至目的寄存器字段a232所指定的架構(gòu)寄存器106。重排緩沖器422接收來(lái)自執(zhí)行單元424的結(jié)果,其包含條件ALU指令124的走向是否被誤預(yù)測(cè)的指標(biāo)。若是此走向并未被誤預(yù)測(cè),重排緩沖器422系以執(zhí)行在來(lái)源寄存器1與來(lái)源寄存器2的字段a206所指定的來(lái)源操作數(shù)上的條件ALU指令124的操作碼a202所指定的ALU操作產(chǎn)生的結(jié)果,來(lái)更新微處理器100的架構(gòu)狀態(tài),這也就是利用這個(gè)結(jié)果來(lái)更新旗標(biāo)926與條件ALU指令的目的寄存器字段a208所指定的架構(gòu)寄存器106,這反映在圖30的條件移動(dòng)微指令3046的目的寄存器字段a232與具有操作碼的非條件ALU微指令的目的寄存器字段a258。不過(guò),若是走向系被誤預(yù)測(cè),重排緩沖器422會(huì)產(chǎn)生一真值于一誤預(yù)測(cè)指標(biāo)2976。此誤預(yù)測(cè)指針2976系提供給指令轉(zhuǎn)譯器104,藉此,通過(guò)重復(fù)執(zhí)行此被誤預(yù)測(cè)的條件ALU指令124,指令轉(zhuǎn)譯器104知道需要依據(jù)一不預(yù)測(cè)原則(NPregime)回復(fù)實(shí)行多微指令(multiplemicroinstruction)技術(shù)。此誤預(yù)測(cè)指標(biāo)2976同時(shí)提供給其它相關(guān)的管線單元,如寄存器配置表402與指令發(fā)送單元408,使其在必要時(shí)能清除微指令。此重排緩沖器422同時(shí)依據(jù)條件ALU指令124的結(jié)果,也就是走向預(yù)測(cè)結(jié)果,產(chǎn)生歷史數(shù)據(jù)更新數(shù)值2974來(lái)更新動(dòng)態(tài)預(yù)測(cè)器2932與預(yù)測(cè)器選擇器2934。請(qǐng)參照?qǐng)D30,圖中顯示圖29的指令轉(zhuǎn)譯器104對(duì)于條件ALU指令124的轉(zhuǎn)譯的方塊示意圖。如本文所述,圖29的指令轉(zhuǎn)譯器104可能將條件ALU指令124轉(zhuǎn)譯為三個(gè)不同的微指令集,端視指定轉(zhuǎn)譯器104轉(zhuǎn)譯條件ALU指令124的環(huán)境為何,亦即如圖30所示,條件ALU指令124是預(yù)測(cè)會(huì)被執(zhí)行(E)、預(yù)測(cè)不會(huì)被執(zhí)行(NE)、或是無(wú)預(yù)測(cè)(NP)。在一實(shí)施例中,條件ALU指令124系一ARM指令集架構(gòu)定義的條件ALU指令。條件ALU指令124包含一操作碼字段a202、一條件碼字段a204、來(lái)源寄存器1與來(lái)源寄存器2的字段a206,與一目的寄存器字段a208。操作碼字段a202包含一數(shù)值以區(qū)分此條件ALU指令與指令集架構(gòu)內(nèi)的其它指令。條件碼字段a204系指定一條件,在此條件下,依據(jù)旗標(biāo)926當(dāng)前的數(shù)值是否滿足條件,目的寄存器將會(huì)被選擇性地以下述ALU微指令3044的結(jié)果進(jìn)行更新。依據(jù)一兼容于ARM指令集架構(gòu)的實(shí)施例,此條件碼字段a204系指定于條件ALU指令124的上四個(gè)位(亦即位[31:28]),使能依據(jù)下表3對(duì)于十六個(gè)不同的可能數(shù)值進(jìn)行編碼。對(duì)架構(gòu)版本相關(guān)數(shù)值(0b1111)而言,此指令無(wú)法由架構(gòu)版本預(yù)測(cè),而是用來(lái)指出其它架構(gòu)版本的非條件指令延伸空間(unconditionalinstructionextensionspace)。表3.來(lái)源寄存器1與來(lái)源寄存器2的字段a206系指定立即值與持有輸入操作數(shù)的架構(gòu)寄存器106,而操作碼a202指定的ALU操作(例如:加、減、乘、除、及、或等)將會(huì)依據(jù)對(duì)其執(zhí)行以產(chǎn)生一結(jié)果。在條件滿足時(shí),此結(jié)果將會(huì)被條件性地加載由目的寄存器字段a208所指定的架構(gòu)寄存器106。在無(wú)預(yù)測(cè)(NP)的情況下,指令轉(zhuǎn)譯器104系將條件ALU指令124轉(zhuǎn)譯為一ALU微指令3044與一條件移動(dòng)微指令3046供執(zhí)行單元424執(zhí)行。ALU微指令3044包含一操作碼字段a212、來(lái)源寄存器1與來(lái)源寄存器2的字段a216、與一目的寄存器字段a218。操作碼字段a212包含一數(shù)值來(lái)區(qū)別ALU微指令3044與微處理器100的微指令集架構(gòu)的其它微指令。由條件ALU指令124的操作碼a202所指定的ALU功能系傳達(dá)至ALU微指令3044的操作碼字段a212。來(lái)源寄存器1與來(lái)源寄存器2的字段a216系指定立即值與持有操作數(shù)的架構(gòu)寄存器106。由操作碼a212指定的ALU操作將會(huì)依據(jù)操作數(shù)執(zhí)行以產(chǎn)生一結(jié)果,而此結(jié)果將會(huì)被加載由目的寄存器字段a218所指定的架構(gòu)或暫時(shí)寄存器106。在無(wú)預(yù)測(cè)的情況下,當(dāng)指令轉(zhuǎn)譯器104轉(zhuǎn)譯條件ALU指令124時(shí),指令轉(zhuǎn)譯器104系以相同于條件ALU指令124的來(lái)源寄存器1與來(lái)源寄存器2的字段a206的數(shù)值,填入ALU微指令3044的來(lái)源寄存器1與來(lái)源寄存器2的字段a216。當(dāng)指令轉(zhuǎn)譯器104轉(zhuǎn)譯條件ALU指令124時(shí),指令轉(zhuǎn)譯器104系填寫(xiě)目的寄存器字段a218以指定一暫時(shí)寄存器106接收ALU操作的結(jié)果。條件移動(dòng)微指令3046包含一操作碼字段a222、一條件碼字段a224、一來(lái)源寄存器1的字段a226、一來(lái)源寄存器2的字段a228、與一目的寄存器字段a232。操作碼字段a222包含一數(shù)值來(lái)區(qū)別此條件移動(dòng)微指令3046與微處理器100的微指令集架構(gòu)的其它微指令。條件碼字段a224指定一條件,以依據(jù)旗標(biāo)926的當(dāng)前數(shù)值是否滿足條件ALU指令124的條件碼字段a204的條件,而選擇性地執(zhí)行移動(dòng)操作。事實(shí)上,在轉(zhuǎn)譯條件ALU指令124時(shí),指令轉(zhuǎn)譯器104系以相同于條件ALU指令124的條件碼字段a204的數(shù)值,填入條件移動(dòng)微指令3046的條件碼字段a224。來(lái)源寄存器1的字段a226指定一架構(gòu)或是暫時(shí)寄存器106,來(lái)指出此寄存器的第一來(lái)源操作數(shù)將會(huì)被提供至條件移動(dòng)微指令3046;而來(lái)源寄存器2的字段a228指定一架構(gòu)或是暫時(shí)寄存器106,來(lái)指出此寄存器的第二來(lái)源操作數(shù)將會(huì)被提供至條件移動(dòng)微指令3046。當(dāng)指令轉(zhuǎn)譯器104轉(zhuǎn)譯條件ALU指令124時(shí),指令轉(zhuǎn)譯器104系以相同于其填入ALU微指令3044的目的寄存器字段a218的數(shù)值,填入來(lái)源寄存器1的字段a226。指令轉(zhuǎn)譯器104亦以相同于其填入條件ALU指令124的目的寄存器字段a208的數(shù)值,填入來(lái)源寄存器2的字段a228。也就是說(shuō),來(lái)源寄存器2的字段a228會(huì)使條件移動(dòng)微指令3046接收目的寄存器的當(dāng)前數(shù)值,藉以在條件不被滿足時(shí),能夠?qū)?dāng)前數(shù)值寫(xiě)回目的寄存器。此指令轉(zhuǎn)譯器104系以相同于條件ALU指令的目的寄存器字段a208的數(shù)值,填入目的寄存器字段a232,藉此,不是在條件不滿足時(shí),將條件ALU指令124所指定的目的寄存器字段的當(dāng)前數(shù)值加載目的寄存器,就是在條件滿足時(shí),將持有ALU微指令3044結(jié)果的暫時(shí)寄存器的數(shù)值加載目的寄存器。在一實(shí)施例中,在無(wú)預(yù)測(cè)(NP)的情況下,指令轉(zhuǎn)譯器104系將條件ALU指令124轉(zhuǎn)譯為第10至28圖所述的微指令126。如前述,微指令組126會(huì)隨著條件ALU指令124而改變,例如:來(lái)源寄存器的其中之一是否為目的寄存器、是否為一旗標(biāo)更新指令、是否指定一預(yù)移位、是否使用當(dāng)前的進(jìn)位旗標(biāo)數(shù)值、以及在旗標(biāo)更新預(yù)移位的情況下,此ALU操作是否更新進(jìn)位旗標(biāo)。特別是,在部分預(yù)移位條件ALU指令124的情況下,微指令組會(huì)包含如圖10所示的三個(gè)微指令126,而非如圖30所示的兩個(gè)微指令126。其次,在條件ALU指令124將來(lái)源寄存器其中之一指定為目的寄存器的情況下,微指令組所包含的微指令126的數(shù)量會(huì)減少一個(gè),如圖21與圖10所比較者。更進(jìn)一步說(shuō),這個(gè)微指令組不包含條件移動(dòng)微指令126,而是由條件ALU微指令126提供條件移動(dòng)的功能。結(jié)果是,在一些實(shí)例中,微指令組僅包含如圖21所示的單一個(gè)微指令126,而非如圖30所示的兩個(gè)微指令126。此外,在旗標(biāo)更新條件ALU指令124的情況下,微指令組所包含的條件移動(dòng)微指令126略為不同于圖30所示的條件移動(dòng)微指令126。特別是,為了確認(rèn)條件是否滿足,圖10步驟1044、1054與1056所述的條件移動(dòng)微指令(CMOV)126系檢驗(yàn)一非架構(gòu)旗標(biāo),此非架構(gòu)旗標(biāo)系由微指令集內(nèi)前一個(gè)微指令126基于架構(gòu)旗標(biāo)是否滿足條件來(lái)進(jìn)行更新,相較之下,圖30的條件移動(dòng)微指令126則是檢驗(yàn)架構(gòu)旗標(biāo)來(lái)確認(rèn)條件是否滿足。最后,雖然圖30的ALU微指令126系一非條件ALU微指令126,第10與21圖的ALU微指令126在一些情況下可能是條件ALU微指令126。在被執(zhí)行(E)的情況下,指令轉(zhuǎn)譯器104系將條件ALU指令124轉(zhuǎn)譯為一具有條件碼的非條件ALU微指令3045供執(zhí)行單元424執(zhí)行。此具有條件碼的非條件ALU微指令3045包含一操作碼字段a252、一條件碼字段a254、來(lái)源寄存器1與來(lái)源寄存器2的字段a256、與一目的寄存器字段a258。此操作碼字段a252包含一數(shù)值來(lái)區(qū)別此具有條件碼的非條件ALU微指令3045與微處理器100的微指令集架構(gòu)內(nèi)的其它微指令。由條件ALU指令124的操作碼a252指定的ALU功能系傳達(dá)至具有條件碼的非條件ALU微指令3045的操作碼字段a252。來(lái)源寄存器1與來(lái)源寄存器2的字段a256指定立即值且架構(gòu)寄存器106來(lái)持有操作數(shù),由操作碼a252指定的ALU操作將以它們?yōu)椴僮鲾?shù)來(lái)執(zhí)行并產(chǎn)生一結(jié)果。此結(jié)果將會(huì)被加載至由目的寄存器字段a258所指定的架構(gòu)或暫時(shí)寄存器106。在執(zhí)行的情況下,指令轉(zhuǎn)譯器104系以相同于條件ALU指令124的來(lái)源寄存器1與來(lái)源寄存器2的字段a206的數(shù)值,填入具有條件碼的非條件ALU微指令3045的來(lái)源寄存器1與來(lái)源寄存器2的字段a256。在轉(zhuǎn)譯條件ALU指令124時(shí),指令轉(zhuǎn)譯器104系以相同于條件ALU指令124的條件碼字段a204的數(shù)值,填入具有條件碼的非條件ALU微指令3045的條件碼字段a254。此條件碼a254系由執(zhí)行單元424來(lái)確認(rèn)相關(guān)條件ALU指令124的走向是否被誤預(yù)測(cè)。在轉(zhuǎn)譯條件ALU指令124時(shí),指令轉(zhuǎn)譯器104系以相同于條件ALU指令124的目的寄存器字段a208的數(shù)值,填入目的寄存器字段a258。因此,由于相關(guān)的條件ALU指令124被預(yù)測(cè)執(zhí)行,此具有條件碼的非條件ALU微指令3045系一非條件微指令,它不論條件是否滿足都會(huì)被執(zhí)行。然而,此具有條件碼的非條件ALU微指令3045的預(yù)測(cè)是類似于一預(yù)測(cè)分支指令,由于其執(zhí)行預(yù)測(cè)仍須經(jīng)審查,而在發(fā)現(xiàn)誤預(yù)測(cè)的情況下,將不會(huì)以ALU結(jié)果更新目的寄存器字段a258所指定的架構(gòu)寄存器106,而是清除架構(gòu)寄存器106,并重復(fù)執(zhí)行相關(guān)的條件ALU指令124,而這次執(zhí)行就不具有預(yù)測(cè)。相反地,若是執(zhí)行預(yù)測(cè)是正確的,就會(huì)利用ALU結(jié)果來(lái)更新目的寄存器字段a258所指定的架構(gòu)寄存器106。在一實(shí)施例中,除了圖30的具有條件碼的非條件ALU微指令126之外,當(dāng)條件ALU指令124指定一如第10至28圖所述的預(yù)移位操作時(shí),指令轉(zhuǎn)譯器104會(huì)另外為條件ALU指令124轉(zhuǎn)譯一移位微指令126,此移位微指令126系位于具有條件碼的非條件ALU微指令126之前。舉例來(lái)說(shuō),此移位微指令126系類似于圖10的步驟1034所述的移位微指令,而圖30的具有條件碼的非條件ALU微指令126系經(jīng)修正來(lái)將暫時(shí)寄存器指定為其來(lái)源操作數(shù)寄存器,此暫時(shí)寄存器系移位微指令126的目的寄存器。在存在誤預(yù)測(cè)的情況下,除了具有條件碼的非條件ALU微指令126之外,此移位微指令126將在圖31的步驟3134中被清除(如下所述)。在不執(zhí)行(NE)的情況下,指令轉(zhuǎn)譯器104系將條件ALU指令124轉(zhuǎn)譯為一具有條件碼的不操作微指令3047供執(zhí)行單元424執(zhí)行。此具有條件碼的不操作微指令3047包含一操作碼字段a272與一條件碼字段a274。此操作碼字段a272包含一數(shù)值以區(qū)別此具有條件碼的不操作微指令3047與微處理器100的微指令集架構(gòu)內(nèi)的其它微指令。在轉(zhuǎn)譯條件ALU指令124時(shí),此指令轉(zhuǎn)譯器104系將相同于條件ALU指令124的條件碼字段a204的數(shù)值填入此具有條件碼的不操作微指令3047的條件碼字段a274。此條件碼a274系供執(zhí)行單元424利用來(lái)確認(rèn)相關(guān)的條件ALU指令124的走向是否被誤預(yù)測(cè)。此具有條件碼的不操作微指令3047除了使執(zhí)行單元424啟動(dòng)來(lái)檢查條件ALU指令的走向預(yù)測(cè)外,并不會(huì)執(zhí)行其它操作。請(qǐng)參照?qǐng)D31(包括圖31A和圖31B),圖中是一流程圖顯示本發(fā)明圖29的微處理器100執(zhí)行圖30的一條件ALU指令124的一實(shí)施例。此流程同時(shí)始于步驟3102、3104與3106。在步驟3102中,一個(gè)包含有圖30的條件ALU指令124的指令區(qū)塊依據(jù)如圖29所示的指令快取102的擷取地址134進(jìn)行擷取。接下來(lái)進(jìn)入步驟3108。在步驟3104中,動(dòng)態(tài)預(yù)測(cè)器2932檢視擷取地址134,并提供動(dòng)態(tài)預(yù)測(cè)2982至圖29的指令轉(zhuǎn)譯器104。接下來(lái)進(jìn)入步驟3108。在步驟3106,預(yù)測(cè)器選擇器2934檢視擷取地址134并提供一預(yù)測(cè)器選擇2984至圖29的指令轉(zhuǎn)譯器。接下來(lái)進(jìn)入步驟3108。在步驟3108,靜態(tài)預(yù)測(cè)器2936接收條件ALU指令124,經(jīng)評(píng)估后,提供靜態(tài)預(yù)測(cè)2984至圖29的指令轉(zhuǎn)譯器104。接下來(lái)進(jìn)入步驟3112。在步驟3112,指令轉(zhuǎn)譯器104遇到條件ALU指令124,并接收到來(lái)自動(dòng)態(tài)預(yù)測(cè)器2932、預(yù)測(cè)器選擇器2934與靜態(tài)預(yù)測(cè)器2936的預(yù)測(cè)2982/2984/2986,基于此,指令轉(zhuǎn)譯器104產(chǎn)生此條件ALU指令124的走向預(yù)測(cè)。接下來(lái)進(jìn)入步驟3114。在步驟3114中,指令轉(zhuǎn)譯器104確認(rèn)其在步驟3112所預(yù)測(cè)的條件ALU指令124是否被執(zhí)行。若是,此流程進(jìn)入步驟3116;否則就進(jìn)入步驟3118進(jìn)行判斷。在步驟3116,指令轉(zhuǎn)譯器104系依據(jù)執(zhí)行預(yù)測(cè),發(fā)出如圖30所示的具有條件碼的非條件ALU微指令3045。接下來(lái)進(jìn)入步驟3126。在步驟3118,指令轉(zhuǎn)譯器104確認(rèn)其在步驟3112所預(yù)測(cè)的條件ALU指令124是否不會(huì)被執(zhí)行。若是,此流程進(jìn)入步驟3122;否則就進(jìn)入步驟3124。在步驟3122,指令轉(zhuǎn)譯器104系依據(jù)不執(zhí)行預(yù)測(cè),發(fā)出如圖30所示的具有條件碼的不操作微指令3047。接下來(lái)進(jìn)入步驟3126。在步驟3124,在無(wú)預(yù)測(cè)的情況下,指令轉(zhuǎn)譯器104系放出如圖30所示的ALU微指令3044與條件移動(dòng)微指令3046。接下來(lái)進(jìn)入步驟3126。在步驟3126,執(zhí)行單元424執(zhí)行指令轉(zhuǎn)譯器104于步驟3116,3122或3124發(fā)出的微指令126。在無(wú)預(yù)測(cè)的情況下,執(zhí)行單元424通過(guò)執(zhí)行由操作碼字段a212所指定的ALU功能于指定于字段a216的來(lái)源操作數(shù),來(lái)執(zhí)行ALU微指令3044以產(chǎn)生一結(jié)果,此結(jié)果系輸出至結(jié)果總線128并被寫(xiě)入重排緩沖器配置給ALU微指令3044的入口,期待之后能寫(xiě)入由字段a218所指定的暫時(shí)寄存器106。一旦ALU微指令3044的結(jié)果是可獲得的,條件移動(dòng)微指令3046就能夠被發(fā)送至執(zhí)行單元424以確認(rèn)旗標(biāo)926是否滿足由條件碼244所指定的條件。若是,ALU微指令3044(不是來(lái)自導(dǎo)向總線就是來(lái)自暫時(shí)寄存器106)的結(jié)果就會(huì)輸出至結(jié)果總線128,并被寫(xiě)入重排緩沖器配置給條件移動(dòng)微指令3046的入口,期待之后能被寫(xiě)入由字段a232所指定的架構(gòu)寄存器106。不過(guò),若是條件不滿足,由來(lái)源寄存器2的字段a228所指定的架構(gòu)寄存器106的原本數(shù)值,即由條件ALU指令124的目的寄存器字段a208所指定的架構(gòu)寄存器,就會(huì)被輸出至結(jié)果總線并被寫(xiě)入重排緩沖器配置給條件移動(dòng)微指令3046的入口,期待之后能被寫(xiě)入字段a232所指定的架構(gòu)寄存器106。此執(zhí)行單元242同時(shí)指定一正確預(yù)測(cè)至重排緩沖器(因?yàn)橹噶钷D(zhuǎn)譯器104是因應(yīng)于無(wú)預(yù)測(cè)的情況下產(chǎn)生ALU微指令3044與條件移動(dòng)微指令3046)。也就是說(shuō),在無(wú)預(yù)測(cè)的情況下,既然沒(méi)有預(yù)測(cè),就決不會(huì)產(chǎn)生誤預(yù)測(cè)。在預(yù)測(cè)執(zhí)行的情況下,執(zhí)行單元424系通過(guò)執(zhí)行由操作碼字段a252所指定的ALU功能于字段a256所指定的來(lái)源操作數(shù),來(lái)執(zhí)行具有條件碼的非條件ALU微指令3045以產(chǎn)生一結(jié)果,此結(jié)果系輸出至結(jié)果總線128并被寫(xiě)入重排緩沖器配置給具有條件碼的非條件ALU微指令的入口,期待之后能被寫(xiě)入字段a258所指定的架構(gòu)寄存器106。執(zhí)行單元424同時(shí)確認(rèn)旗標(biāo)926是否滿足由條件碼a254指定的條件,并據(jù)以提供一指標(biāo)至重排緩沖器422。進(jìn)一步來(lái)說(shuō),執(zhí)行單元424只在旗標(biāo)926不滿足由條件碼a254指定的條件時(shí),會(huì)指示誤預(yù)測(cè)至重排緩沖器422,這是因?yàn)橹噶钷D(zhuǎn)譯器104在執(zhí)行預(yù)測(cè)的情況下會(huì)產(chǎn)生具有條件碼的非條件ALU微指令3045,否則就指示正確預(yù)測(cè)。在不執(zhí)行的情況下,執(zhí)行單元424不會(huì)執(zhí)行任何操作,來(lái)因應(yīng)具有條件碼的不操作微指令3047的執(zhí)行。此外,執(zhí)行單元424確認(rèn)旗標(biāo)926是否滿足由條件碼a274所指定的條件并據(jù)以提供一指標(biāo)給重排緩沖器422。進(jìn)一步來(lái)說(shuō),執(zhí)行單元424只在旗標(biāo)滿足條件碼a254所指定的條件時(shí),會(huì)指示誤預(yù)測(cè)給重排緩沖器422,這是因?yàn)橹噶钷D(zhuǎn)譯器104在預(yù)測(cè)不執(zhí)行的情況下,會(huì)產(chǎn)生具有條件碼的不操作微指令3047,否則就指示正確預(yù)測(cè)。接下來(lái)進(jìn)入決策步驟3128。在決策步驟3128,重排緩沖器422基于接收自執(zhí)行單元242的誤預(yù)測(cè)指針2976,判斷條件ALU指令124的走向是否被誤預(yù)測(cè)。若是,此流程進(jìn)入步驟3134;若否,就進(jìn)入步驟3132。在步驟3132,重排緩沖器422系以條件ALU指令124的結(jié)果更新微處理器100的架構(gòu)狀態(tài),亦即更新架構(gòu)寄存器106與旗標(biāo)926。進(jìn)一步來(lái)說(shuō),由于重排緩沖器422必須依照程序順序引退指令,重排緩沖器422會(huì)在條件移動(dòng)微指令3046(在無(wú)預(yù)測(cè)的情況下)、具有條件碼的非條件ALU微指令3045(在預(yù)測(cè)執(zhí)行的情況下)、或是具有條件碼的不操作微指令3047(在預(yù)測(cè)不執(zhí)行的情況下)變成微處理器100中最舊的微指令時(shí),更新架構(gòu)狀態(tài)。接下來(lái)進(jìn)入步驟3136。在步驟3134中,重排緩沖器422產(chǎn)生一真值(truevalue)于誤預(yù)測(cè)指標(biāo)2976,以使條件ALU指令124轉(zhuǎn)譯產(chǎn)生的微指令與所有與其相關(guān)的微指令都被清除。此外,在誤預(yù)測(cè)指標(biāo)2976產(chǎn)生一真值也會(huì)使條件ALU指令124重復(fù)執(zhí)行。也就是說(shuō),指令轉(zhuǎn)譯器104會(huì)再次轉(zhuǎn)譯條件ALU指令124,只是這次是依循步驟3124的無(wú)預(yù)測(cè)原則進(jìn)行。依據(jù)另一實(shí)施例,在條件ALU指令124重復(fù)執(zhí)行時(shí),指令轉(zhuǎn)譯器104會(huì)反轉(zhuǎn)正確的預(yù)測(cè),并依據(jù)此反轉(zhuǎn)后的預(yù)測(cè)進(jìn)行轉(zhuǎn)譯。也就是說(shuō),若是預(yù)測(cè)執(zhí)行是誤預(yù)測(cè),指令轉(zhuǎn)譯器104就會(huì)依據(jù)預(yù)測(cè)不執(zhí)行的原則來(lái)執(zhí)行轉(zhuǎn)譯,若是預(yù)測(cè)不執(zhí)行是誤預(yù)測(cè),指令轉(zhuǎn)譯器就會(huì)依據(jù)預(yù)測(cè)執(zhí)行的原則來(lái)執(zhí)行轉(zhuǎn)譯。不過(guò),值得注意的是,這個(gè)實(shí)施例會(huì)容易產(chǎn)生活鎖(livelock)的情形。在步驟3136,重排緩沖器422提供適當(dāng)數(shù)值的歷史數(shù)據(jù)更新指針2974至動(dòng)態(tài)預(yù)測(cè)器2932與預(yù)測(cè)器選擇器2934,并依據(jù)執(zhí)行單元424評(píng)估的正確走向與沿著管線流動(dòng)的預(yù)測(cè)信息2982/2984/2986來(lái)更新動(dòng)態(tài)預(yù)測(cè)器2932與預(yù)測(cè)器選擇器2934。由前文可以發(fā)現(xiàn),本發(fā)明的微處理器100系將一條件ALU指令124轉(zhuǎn)譯為單一個(gè)微指令而非多個(gè)微指令,也就是在能夠預(yù)測(cè)走向的時(shí)候?qū)?huì)產(chǎn)生極大的優(yōu)勢(shì)。首先,本發(fā)明可以減少一個(gè)或多個(gè)需要占用非循序執(zhí)行微處理器100的資源中的額外指令槽的微指令。這些資源包括寄存器配置表402、重排緩沖器、保留站(未圖標(biāo))與執(zhí)行單元424。因此,本發(fā)明可以減少并簡(jiǎn)化所需使用的資源,這些資源所消耗的能量也可以減少。其次,指令轉(zhuǎn)譯器104每個(gè)時(shí)脈周期所能轉(zhuǎn)譯的指令集架構(gòu)(例如ARM指令)程序指令的平均數(shù)量將可增加。假定指令轉(zhuǎn)譯器104每個(gè)時(shí)脈周期能夠轉(zhuǎn)譯最多三個(gè)ARM指令,不過(guò)每個(gè)時(shí)脈周期最多只能發(fā)出三個(gè)微指令,而且包含此指令轉(zhuǎn)譯器104在同一個(gè)時(shí)脈周期內(nèi)必須放出關(guān)聯(lián)于此ARM指令的所有微指令的額外限制,也就是說(shuō),指令轉(zhuǎn)譯器104不能在第一時(shí)脈周期發(fā)出關(guān)聯(lián)于一ARM指令的微指令,又在下一個(gè)時(shí)脈周期發(fā)出關(guān)聯(lián)于此ARM指令的第二個(gè)微指令。假定下列ARM指令序列,其中CAI是一個(gè)條件ALU指令124而“Rx”數(shù)值系通用寄存器:CAIEQR1,R2,R3CAINER4,R5,R6CAICSR7,R8,R9在不具有預(yù)測(cè)器2932/2934/2936(或具有但不進(jìn)行預(yù)測(cè))的處理器中,指令轉(zhuǎn)譯器104必須花費(fèi)三個(gè)時(shí)脈周期來(lái)轉(zhuǎn)譯這三個(gè)CAI指令。不過(guò),在具有預(yù)測(cè)器2932/2934/2936進(jìn)行預(yù)測(cè)的處理器中,指令轉(zhuǎn)譯器可以在同一個(gè)時(shí)脈周期轉(zhuǎn)譯全部的三個(gè)CAI指令。再者,此項(xiàng)優(yōu)點(diǎn)在混合有非CAI的指令,亦即其它ARM指令的情況中依然有效。舉例來(lái)說(shuō),假定CAI指令系接著一個(gè)會(huì)被轉(zhuǎn)譯為二個(gè)微指令的ARM指令D,而此CAI指令的走向系經(jīng)預(yù)測(cè)器2932/2934/2936預(yù)測(cè),一個(gè)會(huì)被轉(zhuǎn)譯為二個(gè)微指令的ARM指令E接著CAI指令,一個(gè)會(huì)被轉(zhuǎn)譯為單一個(gè)微指令的ARM指令F接著ARM指令E。在這個(gè)情況下,指令轉(zhuǎn)譯器可在同一個(gè)時(shí)脈周期轉(zhuǎn)譯ARM指令D與CAI指令,隨后在下一個(gè)時(shí)脈周期轉(zhuǎn)譯ARM指令E與F。也就是在兩個(gè)時(shí)脈周期內(nèi)轉(zhuǎn)譯四個(gè)ARM指令。相較之下,若沒(méi)有本實(shí)施例所提供的功能,指令轉(zhuǎn)譯器104將需要三個(gè)時(shí)脈周期才能轉(zhuǎn)譯這四個(gè)指令。相類似的優(yōu)點(diǎn)也可在指令發(fā)送單元408與重排緩沖器422發(fā)現(xiàn)。第三,在通過(guò)預(yù)測(cè)器2932,2934,2936預(yù)測(cè)走向,使指令轉(zhuǎn)譯器104只需發(fā)出單一個(gè)微指令的情況下,條件ALU指令124的延遲可望降低。第四,重排緩沖器與保留站中不具有額外的微指令,可以提升微處理器的前瞻能力,因而提升處理器對(duì)于所執(zhí)行的程序的指令階層平行處理能力,藉此可以改善對(duì)于執(zhí)行單元424的利用,以提升微處理器100的處理能力(throughput)。進(jìn)一步來(lái)說(shuō),省略第二微指令可以在重排緩沖器中保留更多空間給微指令。此特征的優(yōu)點(diǎn)在于,其可產(chǎn)生一個(gè)更大的微指令池供發(fā)送微指令給執(zhí)行單元424執(zhí)行。微指令在“完成準(zhǔn)備”之前還不能發(fā)送出去執(zhí)行,這也就是此微指令中,來(lái)自之前微指令的所有來(lái)源操作數(shù)都處于可取得的狀態(tài)才能發(fā)送出去。因此,微處理器100尋找完成準(zhǔn)備的微指令的微指令池越大,找到的機(jī)會(huì)就越大,所以執(zhí)行單元424就有較大的機(jī)會(huì)被利用。這通常被稱為微處理器的前瞻能力,也就是充分利用微處理器所要執(zhí)行的程序的指令階層平行處理能力。前瞻能力越大,通常就越會(huì)提升執(zhí)行單元424的利用。因此,本發(fā)明的微處理器100具有潛力能通過(guò)將條件ALU指令124轉(zhuǎn)譯為單一微指令,而非多個(gè)微指令,以提升其前瞻能力。雖然前述實(shí)施例的微架構(gòu)除了支持ARM指令集架構(gòu)條件ALU指令,其也支持x86指令集架構(gòu),值得注意的是,本發(fā)明亦可應(yīng)用于其它實(shí)施例,亦即支持不同于ARM指令集架構(gòu)的其它指令集架構(gòu)的條件ALU指令。其次,值得注意的是,本發(fā)明亦可應(yīng)用于沒(méi)有預(yù)先存在的微架構(gòu)或是此預(yù)先存在的微架構(gòu)所支持的指令集架構(gòu)并非x86指令集架構(gòu)的情況。此外,值得注意的是,本發(fā)明在此所描述的是一個(gè)廣泛的處理器概念,通過(guò)在指令執(zhí)行前,預(yù)先在管線預(yù)測(cè)條件ALU指令的走向,來(lái)支持一指令集架構(gòu)的條件ALU指令。就一實(shí)施例而言,系類似于分支預(yù)測(cè)技術(shù),其依據(jù)走向預(yù)測(cè)的有無(wú)確認(rèn)所擷取的指令流,并發(fā)送不同的微指令序列。此外,雖然本文所描述的實(shí)施例包含動(dòng)態(tài)預(yù)測(cè)器與靜態(tài)預(yù)測(cè)器,本發(fā)明亦可應(yīng)用于只具有靜態(tài)預(yù)測(cè)器或是只具有動(dòng)態(tài)預(yù)測(cè)器的實(shí)施例。其次,本發(fā)明亦可應(yīng)用于具有多個(gè)動(dòng)態(tài)與/或靜態(tài)預(yù)測(cè)器的實(shí)施例,而其中的預(yù)測(cè)器選擇器是從多個(gè)動(dòng)態(tài)與靜態(tài)預(yù)測(cè)器中進(jìn)行選擇。更其次,本發(fā)明亦可應(yīng)用于動(dòng)態(tài)預(yù)測(cè)器整合于一分支預(yù)測(cè)陣列中,例如一分支目標(biāo)地址快取的實(shí)施例。這個(gè)實(shí)施例的缺點(diǎn)在于,在各個(gè)入口用來(lái)儲(chǔ)存一分支指令的目標(biāo)地址的空間造成浪費(fèi),這是由于對(duì)條件ALU指令而言并不需要預(yù)測(cè)其目標(biāo)地址?;诔绦蛑械闹噶罨旌?,雖然分支指令與條件ALU指令間可能產(chǎn)生干擾或牽制,不過(guò),這個(gè)實(shí)施例仍可能具有以下優(yōu)點(diǎn):整合后的高速緩存的儲(chǔ)存空間會(huì)更有效率被利用,整合后的陣列所具有的入口數(shù)可能多于個(gè)別陣列的入口數(shù)的總合。雖然前述實(shí)施例系針對(duì)屬于條件ALU指令的條件非分支指令,本發(fā)明亦可應(yīng)用預(yù)測(cè)器來(lái)預(yù)測(cè)于其它類型的條件非分支指令。舉例來(lái)說(shuō),條件加載指令就可被預(yù)測(cè)。若是預(yù)測(cè)執(zhí)行,指令轉(zhuǎn)譯器產(chǎn)生一具有條件碼的非條件加載微指令。此具有條件碼的非條件加載微指令包含由條件加載指令所指定的條件,使執(zhí)行管線能檢測(cè)是否誤預(yù)測(cè)。若是執(zhí)行管線檢測(cè)到誤預(yù)測(cè),就會(huì)避免執(zhí)行任何架構(gòu)狀態(tài)更新的操作,例如在加載造成轉(zhuǎn)譯后備緩沖區(qū)(TLB)錯(cuò)過(guò)時(shí)更新存儲(chǔ)器的頁(yè)表查詢(pagetablewalk)、或是在加載產(chǎn)生一例外狀態(tài)時(shí)產(chǎn)生一架構(gòu)例外事件。此外,若是在快取中出現(xiàn)加載錯(cuò)過(guò)(loadmisses)的情形,執(zhí)行管線會(huì)避免在處理器總線產(chǎn)生傳輸以填入錯(cuò)過(guò)的快取線。若是預(yù)測(cè)結(jié)果是無(wú)預(yù)測(cè),指令轉(zhuǎn)譯器會(huì)產(chǎn)生微指令集來(lái)?xiàng)l件執(zhí)行加載操作。在一實(shí)施例中,若是預(yù)測(cè)結(jié)果是無(wú)預(yù)測(cè),此微指令集可采取類似于美國(guó)專利臨時(shí)申請(qǐng)案61/473,062所描述的方式。雖然以上實(shí)施例系關(guān)于ARMISA條件非分支指令,本發(fā)明亦可利用預(yù)測(cè)器預(yù)測(cè)應(yīng)用于其它ISA的條件非分支指令。舉例來(lái)說(shuō),x86ISA的條件非分支指令,如CMOVcc與SETcc即可被預(yù)測(cè)。修正后的立即值應(yīng)用于指令轉(zhuǎn)譯ARM指令集架構(gòu)定義一數(shù)據(jù)處理指令集,允許指令指定一立即來(lái)源操作數(shù),也就是這里所稱的“立即操作數(shù)指令(immediateoperandinstruction)”。此立即來(lái)源操作數(shù)是一個(gè)32位的數(shù)值,通過(guò)將一個(gè)8位的數(shù)值向右旋轉(zhuǎn)一個(gè)4位數(shù)值的兩倍所產(chǎn)生。此8位數(shù)值系指定于指令中標(biāo)示immed_8的字段,4位數(shù)值系指定于指令中標(biāo)示為rotate_imm的字段。因此立即操作數(shù)數(shù)值=immed_8>>(2*rotate_imm)處理一既存微架構(gòu)內(nèi)立即操作數(shù)指令的方法系讓指令轉(zhuǎn)譯器來(lái)產(chǎn)生兩個(gè)微指令。第一微指令對(duì)immed_8數(shù)值執(zhí)行兩倍于rotate_imm的數(shù)值的轉(zhuǎn)動(dòng)操作以產(chǎn)生一結(jié)果,第二微指令接收第一微指令的結(jié)果,作為一用以執(zhí)行立即操作數(shù)指令所指定ALU功能的來(lái)源操作數(shù)。此實(shí)施例可參照第10與21圖。舉例來(lái)說(shuō),圖10的步驟1034中,指令轉(zhuǎn)譯器產(chǎn)生SHF微指令來(lái)執(zhí)行一移位操作(在本實(shí)施例即是轉(zhuǎn)動(dòng)操作)以產(chǎn)生一移位后的結(jié)果寫(xiě)入一暫時(shí)寄存器,其后的ALUOP微指令便可使用暫時(shí)寄存器中由SHF微指令所產(chǎn)生的移位結(jié)果。此移位操作可執(zhí)行于一指定于立即操作數(shù)指令的立即數(shù)值(舉例來(lái)說(shuō),即對(duì)應(yīng)于圖10的步驟1012與1024)。不過(guò),相較于利用指令轉(zhuǎn)譯器僅產(chǎn)生單一微指令的方法,此方法應(yīng)用于非循序執(zhí)行處理器可能產(chǎn)生以下的缺點(diǎn)。首先,此額外的微指令會(huì)在非循序執(zhí)行處理器的各個(gè)資源中占據(jù)一額外的指令槽,如寄存器配置表、重排緩沖器、保留站與執(zhí)行單元內(nèi)的額外指令槽或入口,因而需要較大、較復(fù)雜的資源,能量的消耗也會(huì)較高。其次,部分功能單元系受限于每個(gè)時(shí)脈周期內(nèi)所能執(zhí)行的最大指令數(shù)量。舉例來(lái)說(shuō),依據(jù)一實(shí)施例,指令轉(zhuǎn)譯器每個(gè)時(shí)脈周期能發(fā)出的指令數(shù)量有其最大限制(例如每個(gè)時(shí)脈周期三個(gè)微指令),發(fā)送單元每個(gè)時(shí)脈周期能發(fā)送給執(zhí)行單元的指令數(shù)量有其最大限制(例如每個(gè)時(shí)脈周期四個(gè)微指令),而引退單元每個(gè)時(shí)脈周期能引退的指令數(shù)量也有其最大限制(例如每個(gè)時(shí)脈周期三個(gè)微指令)。因此,這些功能單元內(nèi)額外微指令的產(chǎn)生,會(huì)減少每個(gè)時(shí)脈周期內(nèi)所能發(fā)出、發(fā)送或引退的平均指令數(shù)量,因而限制了處理器的效能表現(xiàn)。第三,立即操作數(shù)指令在其構(gòu)成微指令完成執(zhí)行前還不會(huì)引退,因?yàn)榈诙⒅噶钕店P(guān)聯(lián)于第一微指令的結(jié)果,因此在第一微指令產(chǎn)生結(jié)果前,第二微指令無(wú)法發(fā)送至執(zhí)行單元。這些都會(huì)對(duì)于立即操作數(shù)指令的總執(zhí)行時(shí)間造成額外的延遲。第四,在重排緩沖器以及/或保留站內(nèi)出現(xiàn)額外的微指令,會(huì)降低處理器的前瞻能力,因而降低處理器利用指令階層平行處理來(lái)執(zhí)行程序的能力,因而會(huì)減少執(zhí)行單元的利用率,降低處理器的整體效能。本文所描述的實(shí)施例具有潛力能在執(zhí)行立即操作數(shù)指令時(shí)有較佳的表現(xiàn)。在此系將immed_8字段與rotate_imm字段合并稱為“立即字段”。特別是,指令轉(zhuǎn)譯器得知立即字段數(shù)值的一預(yù)定子集以及由各個(gè)相對(duì)應(yīng)的立即字段數(shù)值所產(chǎn)生的相關(guān)的32位立即操作數(shù)數(shù)值。在指令轉(zhuǎn)譯器遇到一立即操作數(shù)指令時(shí),指令轉(zhuǎn)譯器會(huì)確認(rèn)所指定的立即字段數(shù)值是否落于此預(yù)測(cè)子集。若是,指令轉(zhuǎn)譯器就發(fā)出正確的32位立即操作數(shù)至立即操作數(shù)總線,并伴隨著立即操作數(shù)指令,一并沿著管線傳送以供執(zhí)行。若是立即字段數(shù)值并不落于預(yù)定子集,指令轉(zhuǎn)譯器采取較低效能的方法,亦即發(fā)出兩個(gè)微指令??赏ㄟ^(guò)執(zhí)行應(yīng)用軟件與觀察產(chǎn)生不同立即字段數(shù)值的相對(duì)頻率,并選擇少數(shù)最常觀察到的立即字段數(shù)值作為立即字段數(shù)值的預(yù)設(shè)集合,以維持其尺寸、能量消耗、與指令轉(zhuǎn)譯器的復(fù)雜度在一定的范圍內(nèi)。請(qǐng)參照?qǐng)D32的方塊圖,圖中顯示本發(fā)明的微處理器100在指令轉(zhuǎn)譯過(guò)程中處理修正后的立即常數(shù)的情形。圖32的微處理器100系類似于圖1的微處理器,并包含類似于第1至圖4中所示的元件,這些元件包含指令快取102、指令轉(zhuǎn)譯器104、配置寄存器122、寄存器配置表402、指令發(fā)送單元408與執(zhí)行單元424。執(zhí)行單元424包含一個(gè)或多個(gè)單元用以執(zhí)行以下所述的微指令126。進(jìn)一步來(lái)說(shuō),執(zhí)行單元424包含一個(gè)或多個(gè)單元,以執(zhí)行圖33所示的向右轉(zhuǎn)動(dòng)(ROR)微指令3344(在此亦稱為移位微指令)、ALU微指令3346、以及立即ALU微指令3348。微處理器100并包含圖33所示的架構(gòu)寄存器與暫時(shí)寄存器106以及旗標(biāo)926。指令快取102擷取圖33所示的立即操作數(shù)指令124。在一實(shí)施例中,此微處理器100的微架構(gòu)在許多面向系類似于臺(tái)灣威盛電子所生產(chǎn)的VIANanoTM處理器的微架構(gòu),不過(guò)本實(shí)施例的微處理器100是經(jīng)修改以支持ARM指令集架構(gòu)。此VIANanoTM處理器的微架構(gòu)系一高效能非循序執(zhí)行超純量微架構(gòu)以支持x86指令集架構(gòu),此處理器系經(jīng)如本文所述的修改,使能額外支持ARM微架構(gòu),特別是詳述于圖33的相關(guān)篇幅所述對(duì)ARM立即操作數(shù)指令124的支持。進(jìn)一步來(lái)說(shuō),當(dāng)指令轉(zhuǎn)譯器104在遇到一立即操作數(shù)指令124,且其指定的立即字段b207(請(qǐng)參照?qǐng)D33所示)的數(shù)值系落于此指令轉(zhuǎn)譯器104已知數(shù)值所構(gòu)成的一預(yù)定子集時(shí),就會(huì)發(fā)出一個(gè)立即操作數(shù)3366于一立即操作數(shù)總線作為響應(yīng)。此立即操作數(shù)3366系沿著微處理器100管線的階段(stage)向下傳遞,直到抵達(dá)執(zhí)行單元424為止。寄存器配置表402從指令轉(zhuǎn)譯器104接收微指令164,并相對(duì)應(yīng)地產(chǎn)生各個(gè)微指令164的相關(guān)信息。進(jìn)一步來(lái)說(shuō),此寄存器配置表402指出,ALU微指令3346(可參照?qǐng)D33)系關(guān)聯(lián)于ROR微指令3344(可參照?qǐng)D33)的結(jié)果,而在指令轉(zhuǎn)譯器104轉(zhuǎn)譯一立即操作數(shù)指令,其所指定的立即字段數(shù)值b207未落于立即字段b207的數(shù)值所構(gòu)成的一預(yù)定子集內(nèi)時(shí),就會(huì)一并發(fā)出這兩個(gè)微指令。此外,如圖34(包括圖34A和圖34B)所示,在指令轉(zhuǎn)譯器104額外發(fā)出一條件移動(dòng)微指令126的情況下(例如圖10所描述者),寄存器配置表402會(huì)指出,此條件移動(dòng)微指令126系關(guān)聯(lián)于ALU微指令3346的結(jié)果。暫時(shí)寄存器106儲(chǔ)存微處理器100的非架構(gòu)狀態(tài),并且可供微架構(gòu)用于暫時(shí)儲(chǔ)存執(zhí)行指令集架構(gòu)的指令124所需的中間數(shù)值。進(jìn)一步來(lái)說(shuō),由指令轉(zhuǎn)譯器104所發(fā)出的微指令126會(huì)將暫時(shí)寄存器106指定為來(lái)源以及/或目的操作數(shù)位置。圖33所示的ROR微指令3344即是將一個(gè)暫時(shí)寄存器106指定為其目的寄存器,而ALU微指令3346則是將同一個(gè)暫時(shí)寄存器106指定為其來(lái)源寄存器的一者。這在以下篇幅會(huì)有更詳細(xì)的說(shuō)明。至少一個(gè)執(zhí)行單元424包含一個(gè)算術(shù)邏輯單元(未圖標(biāo))用以執(zhí)行各種微指令。這些微指令包含圖33所示的ROR微指令3344、ALU微指令3346、以及立即ALU微指令3348。在立即ALU微指令3348的情況下,執(zhí)行單元424接收來(lái)自指令轉(zhuǎn)譯器104的立即操作數(shù)3366的數(shù)值作為其輸入。此執(zhí)行單元424執(zhí)行由操作碼字段b212所指定的ALU功能,而此功能系相同于由立即操作數(shù)指令124所指定的ALU功能,并且此指令執(zhí)行在立即操作數(shù)3366與一個(gè)第二來(lái)源操作數(shù)之上。在ALU微指令3346的情況下,執(zhí)行單元424執(zhí)行由操作碼字段b212所指定的ALU功能,而此功能系相同于由立即操作數(shù)指令124所指定的ALU功能,并且此指令執(zhí)行于二個(gè)來(lái)源操作數(shù)之上,此二個(gè)來(lái)源操作數(shù)其中之一系來(lái)自暫時(shí)寄存器106,而相關(guān)的ROR微指令3344系將其結(jié)果寫(xiě)入此寄存器。在ROR微指令3344的情況下,執(zhí)行單元424將一個(gè)8位數(shù)值以兩倍于一個(gè)4位數(shù)值的量向右轉(zhuǎn)動(dòng),以產(chǎn)生一個(gè)32位的立即數(shù)值且寫(xiě)入一暫時(shí)寄存器106供后續(xù)相關(guān)的ALU微指令3344使用。前述8位數(shù)值系相同于由立即操作數(shù)指令124的immed_8字段b208所指定的數(shù)值,前述4位數(shù)值系相同于由立即操作數(shù)指令124的rotate_imm字段b209所指定的數(shù)值。請(qǐng)參照?qǐng)D33,圖中是以一方塊圖,顯示本發(fā)明將一個(gè)立即操作數(shù)指令124選擇性地轉(zhuǎn)譯為一個(gè)ROR微指令3344與一個(gè)ALU微指令3346、或是轉(zhuǎn)譯為一個(gè)立即ALU微指令3348的一實(shí)施例。如本文所述,指令轉(zhuǎn)譯器104系在立即字段b207所指定的數(shù)值落入指令轉(zhuǎn)譯器104已知的預(yù)定子集內(nèi)時(shí),將立即操作數(shù)指令124轉(zhuǎn)譯為一個(gè)立即ALU微指令3348供執(zhí)行單元424執(zhí)行,而由此,指令轉(zhuǎn)譯器104系發(fā)出一相對(duì)應(yīng)的評(píng)估立即操作數(shù)數(shù)值3366。如圖32所示,在立即字段b207所指定的數(shù)值未落入預(yù)定子集內(nèi)時(shí),指令轉(zhuǎn)譯器104系將立即操作數(shù)指令124轉(zhuǎn)譯為一個(gè)ROR微指令3344接著一個(gè)ALU微指令3044供執(zhí)行單元424執(zhí)行。在一實(shí)施例中,立即操作數(shù)指令124系一個(gè)由ARM指令集架構(gòu)所定義的立即操作數(shù)指令,以ARM的用語(yǔ)來(lái)說(shuō),就是一個(gè)具有數(shù)據(jù)處理立即編碼(dataprocessingimmediateencoding)功能的指令。立即操作數(shù)指令124包含一操作碼字段b202、一來(lái)源寄存器1的字段b204、目的寄存器字段b206、一個(gè)immed_8字段b208、以及一個(gè)rotate_imm字段b209。如圖33所示,immed_8字段b208與rotate_imm字段b209的合并即構(gòu)成立即字段b209。此操作碼字段b202包含一數(shù)值,用以區(qū)分立即操作數(shù)指令124與此指令集架構(gòu)的其它指令,并且,此數(shù)值系指定一個(gè)執(zhí)行于來(lái)源操作數(shù)的ALU功能。就一個(gè)ARM立即操作數(shù)指令124而言,此ALU功能舉例來(lái)說(shuō),可包含加(ADD)、帶進(jìn)位加(addwithcarry,ADC)、邏輯及(logicalAND,AND)、邏輯位清除(logicalbitclear,BIC)、比較取負(fù)(comparenegative,CMN)、比較(compare,CMP)、邏輯異或(logicalexclusive-OR,EOR)、移動(dòng)(move,MOV)、反向移動(dòng)(movenot,MVN)、邏輯或(logicOR,ORR)、反向減(reversesubtract,RSB)、帶進(jìn)位反向減(reversesubtractwithcarry,RSC)、帶進(jìn)位減(subtractwithcarry,SBC)、減(subtract,SUB)、相等測(cè)試(testequivalence,TEQ)與測(cè)試(test,TST)。來(lái)源寄存器1的字段b204指定一架構(gòu)寄存器106或是一暫時(shí)寄存器106,執(zhí)行單元424所接收的來(lái)源操作數(shù)系來(lái)自這個(gè)被指定的寄存器。目的寄存器字段b206指定一架構(gòu)寄存器106或是一暫時(shí)寄存器106,結(jié)果則是寫(xiě)入這個(gè)被指定的寄存器。前述immed_8字段b208持有一個(gè)8位常數(shù),此常數(shù)會(huì)以兩倍于前述4位的rotate_imm字段b209的數(shù)值向右旋轉(zhuǎn),以產(chǎn)生一立即來(lái)源操作數(shù)。如前文第9至28圖的實(shí)施例所述,立即操作數(shù)指令124可包含一條件ALU指令。舉例來(lái)說(shuō),此立即操作數(shù)指令124可以是如步驟1056所述的一個(gè)ARMNCUALUOP指令124,其系將一修正后的立即常數(shù)指定為其來(lái)源操作數(shù),而不是寄存器。ROR微指令3344包含一個(gè)操作碼字段b222、一個(gè)目的寄存器字段b226、以及兩個(gè)用以指定來(lái)源操作數(shù)的來(lái)源操作數(shù)字段,如圖33所示,分別標(biāo)示為immed_8字段b228以及rotate_imm字段b229,用以實(shí)行立即操作數(shù)指令124。此操作碼字段b222包含一數(shù)值,用以區(qū)別ROR微指令3344與此微處理器100的微指令集架構(gòu)的其它微指令。目的寄存器字段b226是指定一架構(gòu)寄存器106或是一目的寄存器106,ROR微指令3344的結(jié)果將會(huì)寫(xiě)入其中。在指令轉(zhuǎn)譯器104轉(zhuǎn)譯立即操作數(shù)指令124,而立即字段b207所指定的數(shù)值并未落入預(yù)定子集時(shí),指令轉(zhuǎn)譯器104會(huì)以立即操作數(shù)指令的immed_8字段b208與rotate_imm字段b209的相對(duì)應(yīng)數(shù)值填入immed_8字段b228與rotate_imm字段b229,并且,指令轉(zhuǎn)譯器104會(huì)填入目的寄存器字段b226以指定一暫時(shí)寄存器106來(lái)接收ALU功能的結(jié)果,此寄存器后續(xù)將會(huì)被ALU微指令3344利用來(lái)作為其來(lái)源操作數(shù)。除了前文所述,ROR微指令3344還可包含一個(gè)移位微指令126(從圖10起標(biāo)示為SHF)來(lái)指定一修正后的立即常數(shù),這在圖10與圖11有更詳細(xì)的說(shuō)明。舉例來(lái)說(shuō),若是被轉(zhuǎn)譯的立即操作數(shù)指令124是步驟1056所述是指定一修正后的立即常數(shù)的ARMNCUALUOP指令124,此ROR微指令3344就可能是步驟1056中的SHF微指令126。ALU微指令3346包含一操作碼字段b232、一來(lái)源寄存器1的字段b234、一來(lái)源寄存器2的字段b235、一目的寄存器字段b236。此操作碼字段b232包含一數(shù)值,用以區(qū)別ALU微指令3346與此微處理器100的微指令集架構(gòu)的其它微指令,并且,其所指定用以執(zhí)行于來(lái)源操作數(shù)的ALU功能系相同于立即操作數(shù)指令124轉(zhuǎn)譯產(chǎn)生的ALU功能。來(lái)源寄存器1的字段b234指定一架構(gòu)寄存器106或是一暫時(shí)寄存器106,第一來(lái)源操作數(shù)將會(huì)由這個(gè)被指定的寄存器提供給ALU微指令3346,來(lái)源寄存器2的字段b235指定一架構(gòu)寄存器106或是一暫時(shí)寄存器106,第二來(lái)源操作數(shù)將會(huì)從這個(gè)被指定的寄存器提供給ALU微指令3346,目的寄存器字段b236指定一架構(gòu)寄存器106或是一暫時(shí)寄存器106,ALU微指令3346的結(jié)果將會(huì)寫(xiě)入這個(gè)被指定的寄存器。當(dāng)指令轉(zhuǎn)譯器104轉(zhuǎn)譯立即操作數(shù)指令124且立即字段b207所指定的數(shù)值并未落入預(yù)定子集,指令轉(zhuǎn)譯器104會(huì)填入來(lái)源寄存器1的字段b234以指定一寄存器,其與立即來(lái)源操作數(shù)指令124的來(lái)源操作數(shù)1的字段b204所指定者相同,指令轉(zhuǎn)譯器104會(huì)填入目的寄存器字段b236以指定一寄存器,其與立即來(lái)源操作數(shù)124的目的寄存器字段b206所指定者相同,指令轉(zhuǎn)譯器104也會(huì)填入來(lái)源寄存器2的字段b235以指定一暫時(shí)寄存器106,其與ROR微指令3344的目的寄存器字段b226所指定者相同。如前述,此ALU微指令3346可包含任何ALU操作微指令126,分別標(biāo)示為ALUOP、ALUOPUC、CALUOP以及NCALUOP,還包含詳述于第10與12圖的條件版本的微指令。舉例來(lái)說(shuō),若是被轉(zhuǎn)譯的立即操作數(shù)指令124是步驟1056所述的ARMNCUALUOP指令124,而此指定所指定的修正后的立即常數(shù)并未落入預(yù)定子集時(shí),此ALU微指令3346就可能是步驟1056中的NCUALUOP微指令126。立即ALU微指令3348包含一操作碼字段b212、一來(lái)源寄存器1的字段b214、一目的寄存器字段b216、與一個(gè)immediate-32字段b218。就一實(shí)施例而言,此immediate-32字段b218就是執(zhí)行立即ALU微指令3348的執(zhí)行單元424所接收的立即操作數(shù)3366。也就是說(shuō),操作數(shù)多工器(未圖示)運(yùn)作以選擇將立即操作數(shù)3366提供給接收立即ALU微指令3348的執(zhí)行單元424。操作碼字段b212包含一數(shù)值以區(qū)別ALU微指令3348與微處理器100的微指令集架構(gòu)內(nèi)的其它微指令,并且,其所指定用以執(zhí)行于來(lái)源操作數(shù)的ALU功能系相同于立即操作數(shù)指令124轉(zhuǎn)譯產(chǎn)生的ALU功能。此來(lái)源寄存器1的字段b214系指定一架構(gòu)寄存器106或是一暫時(shí)寄存器106,一個(gè)第一來(lái)源操作數(shù)將會(huì)從中提供給ALU微指令3346,目的寄存器字段b216指定一架構(gòu)寄存器106或是一暫時(shí)寄存器106,立即ALU微指令3348的結(jié)果將會(huì)寫(xiě)入此指定寄存器中。當(dāng)指令轉(zhuǎn)譯器1045轉(zhuǎn)譯立即操作數(shù)指令124且立即字段b207指定的數(shù)值落入預(yù)定子集時(shí),指令轉(zhuǎn)譯器104會(huì)填入來(lái)源寄存器1的字段b214以指定一個(gè)寄存器,其相同于立即操作數(shù)指令124的來(lái)源操作數(shù)1的字段b204所指定者,指令轉(zhuǎn)譯器104會(huì)填入目的寄存器字段b216以指定一個(gè)寄存器,其相同于立即操作數(shù)指令124的目的寄存器字段b206所指定者。如前述,此立即ALU微指令3346可包含任何ALU操作微指令126,分別標(biāo)示為ALUOP、ALUOPUC、CALUOP以及NCALUOP,包含詳述于第10與12圖的條件版本的微指令,以指定一立即來(lái)源操作數(shù)。舉例來(lái)說(shuō),若是被轉(zhuǎn)譯的立即操作數(shù)指令124是步驟1056所述的ARMNCUALUOP指令124,其指定的修正后的立即常數(shù)系落于預(yù)定子集內(nèi),此立即ALU微指令3348可以是步驟1056內(nèi)的NCUALUOP微指令126,而指令轉(zhuǎn)譯器104將不會(huì)發(fā)出步驟1056的SHF微指令126,以提供前述有關(guān)于利用指令轉(zhuǎn)譯器104處理修正后立即常數(shù)所產(chǎn)生的優(yōu)點(diǎn)。請(qǐng)參照?qǐng)D34,圖中是以一流程圖,顯示本發(fā)明圖32的微處理器100執(zhí)行圖33的一立即操作數(shù)指令的操作的一實(shí)施例。此流程始于步驟3402。在步驟3402中,指令轉(zhuǎn)譯器104遇到圖33的一立即操作數(shù)指令124,并以由多個(gè)數(shù)值構(gòu)成的預(yù)定子集檢查立即字段b207(就一ARM立即操作數(shù)指令124而言,即是位于低位的12個(gè)位)。接下來(lái)進(jìn)入一決策步驟3404。在決策步驟3404中,指令轉(zhuǎn)譯器104確認(rèn)立即字段b207的數(shù)值是否落于此數(shù)值預(yù)定子集內(nèi)。若是,前進(jìn)至步驟3406;否則就前進(jìn)至步驟3414。在步驟3406,指令轉(zhuǎn)譯器104發(fā)出單一個(gè)如圖33所示的立即ALU微指令3348,以響應(yīng)立即操作數(shù)指令124。在一實(shí)施例中,若是立即操作數(shù)指令124系一條件ALU指令124指定一來(lái)源目的共享的寄存器,此立即ALU微指令3348將包含圖21的步驟2134、2136、2154與2156所描述的諸多ALU微指令126其中之一,不過(guò)不包含前述SHF微指令。若是此條件ALU指令124并未指定一來(lái)源目的共享的寄存器,指令轉(zhuǎn)譯器104就會(huì)發(fā)出立即ALU微指令3348與一個(gè)圖10的步驟1034、1036、1054、1056所描述的條件移動(dòng)微指令126(XMOV以及CMOV),不過(guò)不包含前述SHF微指令。在這個(gè)狀況下,寄存器配置表402產(chǎn)生的條件移動(dòng)微指令126的關(guān)聯(lián)性信息,會(huì)指出條件移動(dòng)微指令126系關(guān)聯(lián)于立即ALU微指令3348的結(jié)果。接下來(lái)進(jìn)入步驟3408。在步驟3408,指令發(fā)布單元408將立即ALU微指令3348發(fā)布給執(zhí)行單元424。接下來(lái)進(jìn)入步驟3412。在步驟3412中,執(zhí)行單元424從立即操作數(shù)總線接收通過(guò)由管線所傳輸?shù)?2位立即操作數(shù)3366的數(shù)值,以及由來(lái)源寄存器1的字段b214所指定的來(lái)源操作數(shù)。執(zhí)行單元424執(zhí)行立即ALU微指令3348的過(guò)程,是將操作碼字段b212所指定的ALU功能執(zhí)行于32位立即操作數(shù)3366與其它來(lái)源操作數(shù),以產(chǎn)生結(jié)果至結(jié)果總線128,供目的寄存器字段b216所指定的架構(gòu)寄存器106進(jìn)行后續(xù)引退操作,此架構(gòu)寄存器106系相同于由立即操作數(shù)指令124的目的寄存器字段b206所指定的架構(gòu)寄存器106。若是在步驟3406中,指令轉(zhuǎn)譯器104發(fā)出一個(gè)條件移動(dòng)微指令126,立即ALU微指令3348的結(jié)果就注定會(huì)是一個(gè)暫時(shí)寄存器106,而非由立即操作數(shù)指令124所指定的目的寄存器106,并且,為了以響應(yīng)步驟3412中執(zhí)行單元424完成立即ALU微指令的操作,如前述,尤其是圖10至圖20,指令發(fā)布單元408會(huì)發(fā)布條件移動(dòng)微指令126至執(zhí)行單元424,而執(zhí)行單元424會(huì)執(zhí)行此條件移動(dòng)微指令126以產(chǎn)生立即操作數(shù)指令124的結(jié)果。此流程終止于步驟3412。在步驟3414中,指令轉(zhuǎn)譯器104放出兩個(gè)微指令,即圖33中的一個(gè)ROR微指令3344與一個(gè)ALU微指令3346,以響應(yīng)此立即操作數(shù)指令124。在一實(shí)施例中,若是此立即操作數(shù)指令124系一個(gè)指定一修正后立即常數(shù)的條件ALU指令124,ROR微指令3344會(huì)包含圖10的步驟1034、1034、1054與1056或是在圖21的步驟2134、2136、2154與2154所描述的SHF微指令126。舉例來(lái)說(shuō),若是被轉(zhuǎn)譯的立即操作數(shù)指令124系步驟1056中的ARMNCUALUOP指令124,其指定的修正后立即常數(shù)并未落于預(yù)定子集內(nèi),此ROR微指令3344可能就會(huì)是步驟1056中的SHF微指令126。在一實(shí)施例中,若是條件操作數(shù)指令124系一個(gè)條件ALU指令124,其指定一個(gè)來(lái)源目的共享的寄存器,ALU微指令3346可能會(huì)包含圖21的步驟2134、2136、2154與2156中描述的ALU微指令126的其中之一。若是立即操作數(shù)條件ALU指令124并未指定一來(lái)源目的共同的寄存器,指令轉(zhuǎn)譯器104就會(huì)發(fā)出ALU微指令3346與圖10的步驟1034、1036、1054與1056所描述的一個(gè)條件移動(dòng)微指令126(XMOV與CMOV)。接下來(lái)進(jìn)入步驟3416。在步驟3416,寄存器配置表402產(chǎn)生ALU微指令3346的關(guān)聯(lián)性信息,指出ALU微指令3346系關(guān)聯(lián)于ROR微指令3344的結(jié)果。若是在步驟3414中,指令轉(zhuǎn)譯器104發(fā)出一個(gè)條件移動(dòng)微指令126,寄存器配置表402就會(huì)產(chǎn)生條件移動(dòng)微指令126的關(guān)聯(lián)性信息,指出條件移動(dòng)微指令126系關(guān)聯(lián)于ALU微指令3346的結(jié)果。接下來(lái)進(jìn)入步驟3418。在步驟3418中,指令發(fā)布單元408發(fā)布ROR微指令3344至執(zhí)行單元424。所以,執(zhí)行單元424會(huì)接收由立即操作數(shù)指令124所指定的immed_8字段b208與rotate_imm字段b209的數(shù)值。接下來(lái)前進(jìn)至決策步驟3412。在步驟3422中,執(zhí)行單元424執(zhí)行ROR微指令3344以產(chǎn)生立即操作數(shù)結(jié)果,寫(xiě)入由目的寄存器字段b226所指定的暫時(shí)寄存器106。接下來(lái)進(jìn)入步驟3424。在步驟3424中,因應(yīng)步驟3422中執(zhí)行單元424完成ROR微指令3344的操作,指令發(fā)布單元會(huì)將ALU微指令3346發(fā)布至執(zhí)行單元424。所以,執(zhí)行單元424(整數(shù)單元124)接收步驟3422所產(chǎn)生的ROR微指令3344的結(jié)果以及由ALU微指令3346的來(lái)源寄存器1的字段b234所指定的操作數(shù)數(shù)值,此操作數(shù)數(shù)值與立即操作數(shù)指令124的來(lái)源寄存器1的字段b204所指定的架構(gòu)寄存器106相同。接下來(lái)前進(jìn)至決策步驟3426。在步驟3426中,執(zhí)行單元424執(zhí)行ALU微指令3346的過(guò)程,系將操作碼字段b232所指定的ALU功能執(zhí)行于兩個(gè)來(lái)源操作數(shù),以產(chǎn)生一結(jié)果提供至結(jié)果總線128供目的寄存器字段b236所指定的架構(gòu)寄存器106在后續(xù)引退步驟利用,此架構(gòu)寄存器106系相同于由立即操作數(shù)指令124的目的寄存器字段b206所指定的架構(gòu)寄存器104。若是步驟3414中,指令轉(zhuǎn)譯器104發(fā)出一個(gè)條件移動(dòng)微指令126,ALU微指令3346的結(jié)果就會(huì)注定是一個(gè)暫時(shí)寄存器106,而非由立即操作數(shù)指令所指定的目的寄存器106,并且,因應(yīng)執(zhí)行單元424在步驟3426中完成ALU微指令3346的操作,指令發(fā)布單元408會(huì)發(fā)布條件移動(dòng)微指令126至執(zhí)行單元424,而如前述,尤其是第10至20圖,執(zhí)行單元424就會(huì)執(zhí)行條件移動(dòng)微指令126以產(chǎn)生立即操作數(shù)指令124的結(jié)果。此流程終止于步驟3426。從前文可知,本發(fā)明的微處理器100在一定情況下,系將立即操作數(shù)指令124轉(zhuǎn)譯為單一個(gè)立即ALU微指令3346,而非多個(gè)微指令。在某些狀況下,亦即當(dāng)立即字段b207系落于一數(shù)值預(yù)定子集內(nèi),而指令轉(zhuǎn)譯器104可以直接發(fā)出相對(duì)應(yīng)的評(píng)估后的立即操作數(shù)3366的數(shù)值時(shí),可提供相當(dāng)大的貢獻(xiàn)。首先,本發(fā)明可減少一個(gè)微指令在非循序執(zhí)行處理器的各個(gè)資源中占據(jù)一額外的指令槽,如寄存器配置表402、重排緩沖器422、保留站406與執(zhí)行單元424內(nèi)的額外指令槽或入口,因而能夠縮減、簡(jiǎn)化資源,能量的消耗也可以降低。其次,每個(gè)時(shí)脈周期內(nèi)指令轉(zhuǎn)譯器104所能轉(zhuǎn)譯的指令集架構(gòu)(例如ARM指令)的程序的平均指令數(shù)量可獲得提升。舉例來(lái)說(shuō),假定指令轉(zhuǎn)譯器104每個(gè)時(shí)脈周期能轉(zhuǎn)譯最多三個(gè)ARM指令,但是每個(gè)時(shí)脈周期最多只能放出三個(gè)微指令,此外,它還必須遵守在同一個(gè)時(shí)脈周期內(nèi)發(fā)出所有關(guān)聯(lián)于此ARM指令的微指令的限制,也就是說(shuō),此指令轉(zhuǎn)譯器104不能在一第一時(shí)脈周期發(fā)出關(guān)聯(lián)于一ARM指令的微指令,同時(shí)又在下一個(gè)時(shí)脈周期發(fā)出關(guān)聯(lián)于此ARM指令的第二個(gè)微指令。假定ARM指令序列如下,其中,IOI是一個(gè)立即操作數(shù)指令124,例如一個(gè)條件ALU指令,其指定一目的寄存器,此目的寄存器同時(shí)也是來(lái)源寄存器,而“Rx”數(shù)值是通用寄存器:IOIR1,R1,立即字段數(shù)值A(chǔ)IOIR3,R3,立即字段數(shù)值BIOIR5,R5,立即字段數(shù)值C在立即字段數(shù)值A(chǔ)、B與C并未落入預(yù)定子集的情況下,指令轉(zhuǎn)譯器104必須花費(fèi)三個(gè)時(shí)脈周期來(lái)轉(zhuǎn)譯這三個(gè)IOI指令。不過(guò),在立即字段數(shù)值A(chǔ)、B與C系落入預(yù)定子集的情況下,指令轉(zhuǎn)譯器104可能只需要一個(gè)時(shí)脈周期就能轉(zhuǎn)譯這三個(gè)IOI指令。此外,此優(yōu)點(diǎn)亦可在其它混合有非IOI指令,亦即其它ARM指令,的實(shí)例中獲得印證。舉例來(lái)說(shuō),假定一個(gè)ARM指令D,會(huì)被轉(zhuǎn)譯為兩個(gè)微指令,其后跟隨著一個(gè)IOI指令,此IOI指令指定的一立即字段數(shù)值系落入預(yù)定子集內(nèi),此IOI指令后跟隨著一個(gè)ARM指令E,此指令會(huì)被轉(zhuǎn)譯為兩個(gè)微指令,其后還跟隨著一個(gè)ARM指令F,此指令會(huì)被轉(zhuǎn)譯為單一個(gè)微指令。在這個(gè)情況下,指令轉(zhuǎn)譯器104可在單一個(gè)時(shí)脈周期轉(zhuǎn)譯將ARM指令D與IOI指令,然后在下一個(gè)時(shí)脈周期轉(zhuǎn)譯ARM指令E與F,亦即四個(gè)ARM指令在兩個(gè)時(shí)脈周期內(nèi)完成轉(zhuǎn)譯。相較之下,若是沒(méi)有本實(shí)施例所描述的功能,指令轉(zhuǎn)譯器104將需要三個(gè)時(shí)脈周期來(lái)轉(zhuǎn)譯這四個(gè)指令。相類似的優(yōu)點(diǎn)也存在于指令發(fā)布單元408與引退單元422。相類似的優(yōu)點(diǎn)也出現(xiàn)在四指令寬度(four-wideinstruction)的指令轉(zhuǎn)譯器以及條件ALU指令并未指定一目的寄存器同時(shí)為一來(lái)源寄存器的情況,在此情況下,兩個(gè)指令可在同一個(gè)時(shí)脈周期內(nèi)進(jìn)行轉(zhuǎn)譯,若無(wú)本實(shí)施例所描述的功能,就需使用兩個(gè)時(shí)脈周期。第三,在立即字段b207的數(shù)值落入預(yù)定子集,而指令轉(zhuǎn)譯器104可以發(fā)出單一微指令(或兩個(gè)而非三個(gè)微指令)的情況下,因?yàn)榈诙€(gè)(或第三個(gè))微指令的消失,可以減少立即操作數(shù)指令124的延遲。第四,重排緩沖器以及/或保留站內(nèi)不存在額外的微指令,可以提高降低處理器的前瞻能力,因而提升微處理器100利用指令階層平行處理來(lái)執(zhí)行程序的能力,增加執(zhí)行單元424的利用率,改善微處理器100的整體效能。進(jìn)一步來(lái)說(shuō),減少第二微指令可以在重排緩沖器空出更多空間給微指令,這樣就可以產(chǎn)生一個(gè)較大的微指令池,可發(fā)派給執(zhí)行單元424執(zhí)行。微指令在“完成準(zhǔn)備”之前還不能發(fā)送出去執(zhí)行,這也就是此微指令中,來(lái)自之前微指令的所有來(lái)源操作數(shù)都處于可取得的狀態(tài)才能發(fā)送出去。因此,微處理器100尋找完成準(zhǔn)備的微指令的微指令池越大,找到的機(jī)會(huì)就越大,所以執(zhí)行單元424就有較大的機(jī)會(huì)被利用。這通常被稱為微處理器的前瞻能力,也就是充分利用微處理器所要執(zhí)行的程序的指令階層平行處理能力。前瞻能力越大,通常就越會(huì)提升執(zhí)行單元424的利用效率。因此,本發(fā)明的微處理器100可依據(jù)立即字段b207的數(shù)值,將立即操作數(shù)指令124轉(zhuǎn)譯為單一個(gè)立即ALU微指令3348,而非多個(gè)微指令,因而具有潛力能提升其前瞻能力。雖然前述實(shí)施例中的立即操作數(shù)指令系一個(gè)具有數(shù)據(jù)處理立即編碼功能的ARM指令,此技術(shù)亦可應(yīng)用于轉(zhuǎn)譯其它指令集架構(gòu)的立即操作數(shù)指令;其次,值得注意的是,本發(fā)明亦可應(yīng)用于沒(méi)有預(yù)先存在的微架構(gòu),或是此預(yù)先存在的微架構(gòu)所支持的指令集架構(gòu)并非x86指令集架構(gòu)的情況。此外,值得注意的是,本發(fā)明在此所描述的是一個(gè)廣泛的處理器概念,其依據(jù)立即操作數(shù)指令指定的立即字段數(shù)值是否落入預(yù)定子集內(nèi),來(lái)將操作數(shù)指令轉(zhuǎn)譯為一個(gè)亂序執(zhí)行微架構(gòu)的不同微指令序列,以支持一指令集架構(gòu)的立即操作數(shù)指令。在另一實(shí)施例中,指令轉(zhuǎn)譯器104產(chǎn)生圖32的立即操作數(shù)3266給圖33的立即操作數(shù)指令124的立即字段b207的所有數(shù)值。也就是說(shuō),立即字段b207的數(shù)值的預(yù)定子集內(nèi)的所有數(shù)值都是立即字段b207的可能數(shù)值。以下是此實(shí)施例的Verilog硬件描述語(yǔ)言編碼。惟以上所述者,僅為本發(fā)明的較佳實(shí)施例而已,當(dāng)不能以此限定本發(fā)明實(shí)施的范圍,即大凡依本發(fā)明權(quán)利要求范圍及發(fā)明說(shuō)明內(nèi)容所作的簡(jiǎn)單的等效變化與修飾,皆仍屬本發(fā)明權(quán)利要求涵蓋的范圍內(nèi)。舉例來(lái)說(shuō),軟件可以執(zhí)行本發(fā)明所述的裝置與方法的功能、制造、形塑、仿真、描述以及/或測(cè)試等。這可由一般的程序語(yǔ)言(如C、C++)、硬件描述語(yǔ)言(HDL)包含VerilogHDL,VHDL等,或是其它既有程序來(lái)達(dá)成。此軟件可以設(shè)置于任何已知的計(jì)算機(jī)可利用媒介,如磁帶、半導(dǎo)體、磁盤(pán)、光盤(pán)(如CD-ROM、DVD-ROM等)、網(wǎng)絡(luò)或是其它通訊媒介。此處描述的裝置與方法的實(shí)施例可被包含于一半導(dǎo)體智財(cái)核心,例如一微處理核心(如以硬件描述語(yǔ)言的實(shí)施方式)并且通過(guò)集成電路的制作轉(zhuǎn)換為硬件。此外,本文所描述的裝置與方法亦可包含硬件與軟件的結(jié)合。因此,本文所述的任何實(shí)施例,并非用以限定本發(fā)明的范圍。此外,本發(fā)明可應(yīng)用于一般通用計(jì)算機(jī)的微處理器裝置。最后,本領(lǐng)域技術(shù)人員利用本發(fā)明所揭露的觀念與實(shí)施例作為基礎(chǔ),來(lái)設(shè)計(jì)并調(diào)整出不同的結(jié)構(gòu)已達(dá)成相同的目的,亦不超出本發(fā)明的范圍。惟以上所述者,僅為本發(fā)明的較佳實(shí)施例而已,當(dāng)不能以此限定本發(fā)明實(shí)施的范圍,即大凡依本發(fā)明權(quán)利要求范圍及發(fā)明說(shuō)明內(nèi)容所作的簡(jiǎn)單的等效變化與修飾,皆仍屬本發(fā)明權(quán)利要求涵蓋的范圍內(nèi)。另外本發(fā)明的任一實(shí)施例或權(quán)利要求范圍不須達(dá)成本發(fā)明所揭露的全部目的或優(yōu)點(diǎn)或特點(diǎn)。此外,摘要部分和標(biāo)題僅是用來(lái)輔助專利文件搜尋之用,并非用來(lái)限制本發(fā)明的權(quán)利要求范圍?!鞠嚓P(guān)申請(qǐng)案的參考文獻(xiàn)】本申請(qǐng)案是同在申請(qǐng)中美國(guó)專利正式申請(qǐng)案的部分連續(xù)案,該些案件整體皆納入本案參考:案號(hào)申請(qǐng)日13/224,310(CNTR.2575)09/01/201113/333,520(CNTR.2569)12/21/201113/333,572(CNTR.2572)12/21/201113/333,631(CNTR.2618)12/21/2011本申請(qǐng)案是引用于以下美國(guó)臨時(shí)專利申請(qǐng)案作優(yōu)先權(quán),每一申請(qǐng)案整體皆納入本案參考:案號(hào)申請(qǐng)日61/473,062(CNTR.2547)04/07/201161/473,067(CNTR.2552)04/07/201161/473,069(CNTR.2556)04/07/201161/537,473(CNTR.2569)09/21/201161/541,307(CNTR.2585)09/30/201161/547,449(CNTR.2573)10/14/201161/555,023(CNTR.2564)11/03/201161/604,561(CNTR.2552)02/29/2012美國(guó)正式專利申請(qǐng)案13/224,310(CNTR.2575)09/01/2011是引用下列美國(guó)臨時(shí)申請(qǐng)案的優(yōu)先權(quán):61/473,062(CNTR.2547)04/07/201161/473,067(CNTR.2552)04/07/201161/473,069(CNTR.2556)04/07/2011以下三個(gè)本美國(guó)正式申請(qǐng)案13/333,520(CNTR.2569)12/21/201113/333,572(CNTR.2572)12/21/201113/333,631(CNTR.2618)12/21/2011皆是以下美國(guó)正式申請(qǐng)式的延續(xù)案:13/224,310(CNTR.2575)09/01/2011并引用下列美國(guó)臨時(shí)申請(qǐng)案的優(yōu)先權(quán):61/473,062(CNTR.2547)04/07/201161/473,067(CNTR.2552)04/07/201161/473,069(CNTR.2556)04/07/201161/537,473(CNTR.2569)09/21/2011本申請(qǐng)案是以下美國(guó)正式專利申請(qǐng)案的相關(guān)案:13/413,258(CNTR.2552)03/06/201213/412,888(CNTR.2580)03/06/201213/412,904(CNTR.2583)03/06/201213/412,914(CNTR.2585)03/06/201213/413,346(CNTR.2573)03/06/201213/413,300(CNTR.2564)03/06/201213/413,314(CNTR.2568)03/06/2012當(dāng)前第1頁(yè)1 2 3 
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
大同市| 大兴区| 玛纳斯县| 平山县| 周至县| 内江市| 宁河县| 新竹县| 洛宁县| 鲜城| 藁城市| 鄂伦春自治旗| 泾阳县| 车致| 中卫市| 锡林郭勒盟| 塔城市| 乐山市| 彰化县| 清水河县| 锡林郭勒盟| 嘉义市| 营口市| 抚远县| 池州市| 曲沃县| 周宁县| 辽宁省| 沁水县| 天津市| 当雄县| 江永县| 栾川县| 蕲春县| 冀州市| 闵行区| 巩留县| 合山市| 麟游县| 阜宁县| 日喀则市|