專利名稱::一種雙寬度指令系統(tǒng)的性能無損切換方法及其應(yīng)用系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于雙寬度指令系統(tǒng)設(shè)計(jì)領(lǐng)域,特別涉及一種雙寬度指令系統(tǒng)的性能無損切換方法及其應(yīng)用系統(tǒng)。
背景技術(shù):
:為了提高代碼密度,人們提出了雙寬度指令系統(tǒng)的概念,并成功應(yīng)用于現(xiàn)代處理器設(shè)計(jì)中。具有雙寬度指令系統(tǒng)的處理器,如ARM和MIPS,—般同時(shí)支持兩套不同長度的定長指令系統(tǒng),一個(gè)普通長度(一般為32位),一個(gè)較窄(一般為16位)。盡管較窄的指令系統(tǒng)可以減小代碼大小,從而帶來存儲體系性能和能耗等方面的好處,但是由于它可以提供的編碼空間更有限,因而限制了操作碼、寄存器操作數(shù)及立即數(shù)域的長度,從而在很多情況下,可以用一條普通長度指令表達(dá)的操作,需要用兩條甚至更多條較窄的指令表示,因而引起了性能方面的額外開銷。在這種情況下,提出了混合編碼的思想,以充分利用兩套指令系統(tǒng)的特點(diǎn)。雙寬度指令系統(tǒng)及混合編碼技術(shù)已經(jīng)成功應(yīng)用于現(xiàn)代處理器設(shè)計(jì)中。目前雙寬度指令系統(tǒng)的狀態(tài)切換機(jī)制有三大類1)使用跳轉(zhuǎn)切換指令進(jìn)行狀態(tài)切換。請參考L.Goudge,S.Segars.Thumb:ReducingtheCostof32-bitRISCPerformanceinPortableandConsumerApplications.Proceedingsofthe41stIEEEInternationalComputerConference,pp.l76,1996,該文獻(xiàn)公開了一種使用跳轉(zhuǎn)切換指令進(jìn)行狀態(tài)切換的機(jī)制,這種方法被采用在MIPS與MlPS16e、Arm和Thumb中。例如在ARM處理器中,處理器根據(jù)CPSR中的T位來確定指令類型當(dāng)T-O時(shí)為ARM指令;當(dāng)丁=1時(shí)為Thumb指令。處理器復(fù)位后,ARM啟動(dòng)并執(zhí)行ARM指令;通過執(zhí)行一條交換轉(zhuǎn)移指令BX可以轉(zhuǎn)換到Thumb指令;在Thumb狀態(tài)時(shí),執(zhí)行ThumbBX指令則可以轉(zhuǎn)換到ARM狀態(tài)。進(jìn)入異常中斷總是進(jìn)入ARM狀態(tài),且異常中斷總是返回到異常發(fā)生前的狀態(tài)。效果:在流水線計(jì)算機(jī)中,跳轉(zhuǎn)指令往往會(huì)帶來較大的開銷,因此帶來較大的使用跳轉(zhuǎn)指令進(jìn)行狀態(tài)切換的開銷。因此該方法比較適用于粗粒度的狀態(tài)切換,如函數(shù)級別的狀態(tài)切換。但粗粒度混合編碼的缺點(diǎn)在于,對于一個(gè)函數(shù),它只能全部編譯為16位,或全部編譯為32位。但一個(gè)函數(shù)內(nèi)部,從使用的指令功能上看,存在適合編譯為16位或不適合編譯為16位的區(qū)域;從代碼執(zhí)行頻率上看,也通常存在冷、熱代碼的區(qū)別。粗粒度混合編碼限制了編譯工具鏈進(jìn)一步根據(jù)不同性質(zhì)代碼選擇編碼方案的程度。2)使用特定的狀態(tài)切換指令進(jìn)行狀態(tài)切換。請參考S.Lee,J.Lee,S.Min,J.Hiserand丄W.Davidson,CodeGenerationforaDualInstructionSetProcessorbasedonSelectiveCodeTransformation.Proceedingsofthe7thInternationalWorkshoponSoftwareandCompilersforEmbeddedSystems,pp.33-48,Sep.2003,該文獻(xiàn)中公開了一禾中4吏用特定的狀態(tài)切換指令進(jìn)行狀態(tài)切換的機(jī)制。這類方法添加額外的顯式狀態(tài)切換指令,該指令的作用是將CPU狀態(tài)在32位和16位之間切換。盡管這條指令只需要1個(gè)額外的周期,與類似BX的狀態(tài)切換指令相比大大減少了對性能的損失,但由于細(xì)粒度混合編碼中,狀態(tài)切換頻繁發(fā)生,還是會(huì)帶來較大的性能開銷。3)將兩種寬度的指令系統(tǒng)在同一編碼空間中編碼。請參考A.Halambi,A.Shrivastava,P,Biswas,N.Dutt,A.Nicolau.AnEfficientCompilerTechniqueforCodeSizeReductionusingReducedBit-wid也ISAs.DesignAutomationandTestinEurope,March2002,該文獻(xiàn)提供了一種將兩種寬度的指令系統(tǒng)在同一編碼空間中編碼的方法,這種方法不需要顯式的狀態(tài)切換,相當(dāng)于重新設(shè)計(jì)新的指令系統(tǒng)。例如Halambi等人提出的方法,指令系統(tǒng)最高位為l,則表示32位,最高位為0,則表示16位。這種方法的缺點(diǎn)是將32位指令空間分了一半給16位,限制了32位指令系統(tǒng)的表達(dá)能力,同時(shí)不能與原指令系統(tǒng)兼容。Thumb2的方法也屬于這一類。綜上所述,已有的雙寬度指令系統(tǒng)切換存在著不能與原指令系統(tǒng)兼容或降低程序運(yùn)行性能的問題。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題在于,提供一種雙寬度指令系統(tǒng)的性能無損切換方法及其應(yīng)用系統(tǒng),使其可以在減小代碼大小的同時(shí)不會(huì)降低代碼性能。為達(dá)到上述目的,本發(fā)明提供的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,該方法是在雙寬度指令系統(tǒng)中引入兩個(gè)狀態(tài)切換指令集合,該兩個(gè)狀態(tài)切換指令集合分別"寬-窄"狀態(tài)切換指令集合和"窄-寬"狀態(tài)切換指令集合,所述狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器運(yùn)行狀態(tài)的功能。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述"寬-窄"狀態(tài)切換指令集合中的指令是在32位指令的程序中頻繁出現(xiàn),該指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;所述"窄-寬"狀態(tài)切換指令集合是在可用16位指令表示的程序片段最后頻繁出現(xiàn),在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,進(jìn)一步包括以下步驟狀態(tài)切換指令的選取步驟,用于由代碼分析工具依據(jù)設(shè)定的算法選擇符合設(shè)定條件的指令加入到狀態(tài)切換指令集中,微體系結(jié)構(gòu)的設(shè)計(jì)步驟,用于在體系結(jié)構(gòu)中引入狀態(tài)切換指令集合以及雙寬度指令系統(tǒng)混合編碼的結(jié)構(gòu)設(shè)計(jì);混合編碼生成步驟,用在不破壞原有指令語義序列的基礎(chǔ)上,將所有可以轉(zhuǎn)換的指令序列用狀態(tài)切換指令和窄指令表示,生成最終的可執(zhí)行目f示文件。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述狀態(tài)切換指令的選取步驟進(jìn)一步包括步驟S101,分析工具維護(hù)兩塊存儲空間來記錄每個(gè)指令的權(quán)重;步驟S102,選擇出現(xiàn)頻率最高的候選指令加入到相應(yīng)狀態(tài)切換指令集合中;步驟S103,對于程序中的每條候選指令,如果該候選指令與目前狀態(tài)切換集合中的一條指令有"可轉(zhuǎn)換"關(guān)系,則存儲空間中的相應(yīng)項(xiàng)的值加一;步驟S104,選擇數(shù)組中值最大的項(xiàng),并將它加入狀態(tài)切換指令集合中,如果狀態(tài)切換指令集合中指令數(shù)少于給定總指令數(shù),則轉(zhuǎn)到步驟S103;否則,結(jié)束。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述微體系結(jié)構(gòu)的設(shè)計(jì)主要是對譯碼結(jié)構(gòu)的設(shè)計(jì),該譯碼結(jié)構(gòu)的設(shè)計(jì)包括統(tǒng)一譯碼和分離譯碼兩種方式。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述統(tǒng)一譯碼方式是將從內(nèi)存取到的32位指令首先通過16位解碼器和狀態(tài)切換指令預(yù)解碼器轉(zhuǎn)換為相應(yīng)的32位指令和狀態(tài)設(shè)置信號,之后和原32位指令一起通過多路選擇器選擇出當(dāng)前指令,最后統(tǒng)一由32位譯碼器進(jìn)行最終的譯碼;所述分離譯碼方式,是將指令首先由16位、狀態(tài)切換指令和32位指令譯碼器分別譯碼,最后由多選器選擇最終的譯碼結(jié)果。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述微體系結(jié)構(gòu)的設(shè)計(jì)步驟中,混合編碼指令序列是一條"寬-窄"狀態(tài)切換指令開始,中間有若干條16位指令,最后以一條"窄-寬"狀態(tài)切換指令作為結(jié)束。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述混合編碼生成步驟進(jìn)一步包括步驟S301,標(biāo)記可以轉(zhuǎn)換的指令;步驟S302,將所述可以被轉(zhuǎn)換的指令相鄰排列,標(biāo)記確定要被轉(zhuǎn)換的指令;步驟S303,重新計(jì)算裝載或跳轉(zhuǎn)目標(biāo)地址,輸出最終的可執(zhí)行目^^文件。上述雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述步驟S103中,所述"可轉(zhuǎn)換"關(guān)系的定義如下當(dāng)A是"寬-窄"狀態(tài)切換"候選指令"且B是"窄-寬"狀態(tài)切換"候選指令",且在程序二進(jìn)制代碼中二者之間的所有指令都是"可被窄指令(例如16位指令)表示的",則指令A(yù)與指令B構(gòu)成所述"可轉(zhuǎn)換"關(guān)系。進(jìn)一步的,本發(fā)明還提供了一種實(shí)現(xiàn)上述方法的應(yīng)用系統(tǒng),其特征在于,包括一狀態(tài)切換裝置,該狀態(tài)切換裝置進(jìn)一步包括一"寬-窄"狀態(tài)切換模塊,用于控制一"寬-窄"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;及一"窄-寬"狀態(tài)切換模塊,用于控制一"窄-寬"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。與現(xiàn)有技術(shù)相比,本發(fā)明提供的雙寬度指令系統(tǒng)的性能無損切換^l制,通過在原指令系統(tǒng)中引入兩個(gè)精簡的狀態(tài)切換指令集合,分別為"寬-窄"狀態(tài)切換指令集合和"窄-寬"狀態(tài)切換指令集合。"寬-窄"狀態(tài)切換指令集合中的指令在寬指令(如32位指令)的程序中頻繁出現(xiàn),在執(zhí)行如加法、瑕^轉(zhuǎn)等普通操作的同時(shí),還能起到將處理器狀態(tài)切換至窄指令狀態(tài)的作用;"窄-寬"狀態(tài)切換指令集合則在可用窄指令(如16位指令)表示的程序片段最后頻繁出現(xiàn),同樣在執(zhí)行加法等普通操作的同時(shí),可將處理器狀態(tài)切換至寬指令狀態(tài)。該機(jī)制可以很好的支持細(xì)粒度混合編碼,能夠在不降低程序運(yùn)行性能的同時(shí),有效減小代碼的大小。圖1為本發(fā)明雙寬度指令系統(tǒng)的性能無損切換機(jī)制的主要實(shí)施流程;圖2為本發(fā)明中狀態(tài)切換指令的選取流程;圖3為本發(fā)明中混合編碼的生成流程;圖4為本發(fā)明中微體系結(jié)構(gòu)設(shè)計(jì)中統(tǒng)一譯碼結(jié)構(gòu)示意圖5為本發(fā)明中微體系結(jié)構(gòu)設(shè)計(jì)中分離譯碼結(jié)構(gòu)示意圖。具體實(shí)施例方式下面結(jié)合實(shí)施例對本發(fā)明做詳細(xì)的描述,以進(jìn)一步說明本發(fā)明的目的、方案及功效。本發(fā)明基于不降低程序運(yùn)行性能的考慮,提出了一種新的細(xì)粒度混合編碼的方法。以5級流水的32位單發(fā)射處理器為例,給定32位和16位指令系統(tǒng),不增加程序執(zhí)行周期,最好的保證就是不要增加動(dòng)態(tài)執(zhí)行的指令數(shù)。在不增加動(dòng)態(tài)執(zhí)行的指令數(shù)的前提下,混合編碼能夠達(dá)到的最佳效果是,在最終的目標(biāo)程序中,一條指令所表示的操作如果在16位中也可以由一條指令來表示,則該指令使用16位編碼;否則,仍然使用32位編碼。因此,需要提供一種不需要耗費(fèi)處理器周期的方法,在需要狀態(tài)切換的時(shí)候通知CPU。本發(fā)明提出一種無損切換機(jī)制,在寬指令系統(tǒng)(原指令系統(tǒng))中引入兩個(gè)精簡的狀態(tài)切換指令集合,分別為"寬-窄"狀態(tài)切換指令集合和"窄-寬"狀態(tài)切換指令集合。該狀態(tài)切換指令集合里的指令在程序中頻繁出現(xiàn),其在執(zhí)行普通操作(例如加法、跳轉(zhuǎn)等)的同時(shí),還能起到切換處理器狀態(tài)的作用。其中,"寬-窄"狀態(tài)切換指令集合中的指令在32位指令的程序中頻繁出現(xiàn),在執(zhí)行如加:^去、跳轉(zhuǎn)等普通操作的同時(shí),還能起到將處理器狀態(tài)切換至窄指令狀態(tài)的作用;"窄-寬"狀態(tài)切換指令集合則在可用16位指令表示的程序片段最后頻繁出現(xiàn),同樣在執(zhí)行加法等普通操作的同時(shí),可將處理器狀態(tài)切換至寬指令狀態(tài)。"寬-窄"狀態(tài)切換指令集合和"窄-寬"狀態(tài)切換指令集合中包含的指令的普通操作功能可以有交集,甚至完全一致。本發(fā)明以UniCore體系結(jié)構(gòu)為例設(shè)計(jì)并實(shí)現(xiàn)了這樣一個(gè)平臺,取得了不錯(cuò)的效果,但本發(fā)明的機(jī)制并不限于UniCore體系結(jié)構(gòu),其同樣適用于其它體系結(jié)構(gòu)。參考圖1圖3,具體方法如下。步驟S10:狀態(tài)切換指令的選取狀態(tài)切換指令可以由代碼分析工具來選擇。由于狀態(tài)切換指令的選擇依賴于產(chǎn)生代碼的編譯器,尤其需要考慮在用來表示寄存器號的位域不足以表示全部寄存器時(shí),一條指令要表示哪組寄存器,因此所分析的二進(jìn)制代碼和最終在系統(tǒng)上運(yùn)行的代碼最好是使用相同的編譯器和編譯優(yōu)化選項(xiàng)。可以選擇的狀態(tài)切換指令總數(shù)確定下之后,及確定下了狀態(tài)切換指令需要多少位表示操作碼和操作數(shù)。設(shè)狀態(tài)切換指令可用的操作數(shù)類型編碼空間為m位。參考圖2,描述了狀態(tài)切換指令的選取流程圖,本發(fā)明使用如下的方法選擇狀態(tài)切換指令。步驟S10h代碼分析工具維護(hù)兩塊存儲空間WNINST[OP][ARGTYPE]和NWINST[OP][ARGTYPE]來分別記錄"寬-窄"狀態(tài)切換的候選指令和"窄-寬"狀態(tài)切換的候選指令的權(quán)重。指令被根據(jù)操作碼和操作數(shù)類型進(jìn)行分類。對于每個(gè)操作碼,本發(fā)明根據(jù)它可以帶有的操作數(shù)組合的不同進(jìn)一步分為若干類,如下表1所示為常見精簡指令系統(tǒng)計(jì)算機(jī)(RISC)指令格式分類<table>tableseeoriginaldocumentpage9</column></row><table>表1指令格式分類該表以常見RISC體系結(jié)構(gòu)為例,列出了可以被m位編碼的操作數(shù)類型(ARGTYPEs)。如果一條指令的操作數(shù)屬于某一個(gè)類型,稱之為一個(gè)"候選指令",WNINST[OP][ARGTYPE]數(shù)組和NWINST[OP][ARGTYPE]數(shù)組中會(huì)分別存在對應(yīng)的一項(xiàng)。如果一條指令的操作數(shù)不屬于表中所列任何類型,則忽略該條指令。如果一條指令可以被一條16位指令表示,則稱之為"可被16位表示的"。步驟S102:在指令選擇階段的開始,狀態(tài)切換指令集合為空。通過將所有可以用m位表示的"候選指令"出現(xiàn)次數(shù)排序,選擇出現(xiàn)次數(shù)最多的"候選指令"將其加入到"寬-窄"狀態(tài)切換指令集合中。其中候選指令為可用狀態(tài)切換指令所有比特位數(shù)編碼表示的指令。步驟S103:對于程序中的每條候選指令,如果它與目前狀態(tài)切換集合中的一條指令有"可轉(zhuǎn)換"關(guān)系,則WNINST[OP][ARGTYPE]或NWINST[OP][ARGTYPE]數(shù)組中的相應(yīng)項(xiàng)的值加一。"可轉(zhuǎn)換"關(guān)系定義如下如果指令A(yù)與指令B構(gòu)成"可轉(zhuǎn)換"關(guān)系,當(dāng)且僅當(dāng)A是"寬-窄"狀態(tài)切換"候選指令"且B是"窄-寬"狀態(tài)切換"候選指令",且在程序二進(jìn)制代碼中二者之間的所有指令都是"可被16位表示的"。S卩,如果指令A(yù)和指令B之間存在任何指令,則從A到B的指令序列可以完全一一由16位指令表示。一些指令可能屬于多于一種指令格式類型。如果這樣,所有相關(guān)項(xiàng)的值均被加步驟S104:算法選擇WNINST[OP][ARGTYPE]數(shù)組和NWINST[OP][ARGTYPE]數(shù)組中具有最大值的項(xiàng),并將它加入相應(yīng)的狀態(tài)切換指令集合中,即WNINST[OP][ARGTYPE]數(shù)組中選出的項(xiàng)加入"寬-窄"狀態(tài)切換指令集合中,NWINST[OP][ARGTYPE]數(shù)組中選出的項(xiàng)加入"窄-寬"狀態(tài)切換指令集合中。如果狀態(tài)切換指令集合中指令數(shù)少于總狀態(tài)切換指令數(shù),則轉(zhuǎn)到步驟S103;否則,算法結(jié)束。步驟S20:微體系結(jié)構(gòu)的設(shè)計(jì)在描述處理器的微體系結(jié)構(gòu)的設(shè)計(jì)之前,首先對處理器流水線各階段的簡要稱謂進(jìn)行概要介紹。以常見的五級流水按序執(zhí)行的處理器為例,其流水線可以分為五個(gè)階段IF(取指)、DEC(譯碼及讀寄存器堆)、EXE(執(zhí)行或抵制運(yùn)算)、MEM(訪問數(shù)據(jù)存儲)和WB(寫回)。本發(fā)明只需要修改其中的譯碼階段和相應(yīng)的信號。當(dāng)譯碼器遇到"寬-窄"狀態(tài)切換指令時(shí),將指10令編碼中第16-31位譯碼為狀態(tài)切換指令,同時(shí)在這一周期的末尾將CPU狀態(tài)置為"16位-準(zhǔn)備"狀態(tài)。下一周期開始,CPU不會(huì)取新的指令,而將已經(jīng)取到的這條指令的第0-15位作為一條16位指令來進(jìn)行譯碼。如果這條16位的指令是"窄-寬"狀態(tài)切換指令,CPU狀態(tài)在這一周期末被設(shè)置為"32位"狀態(tài);否則,CPU狀態(tài)被設(shè)置為"16位"狀態(tài),流水線像普通流水線中執(zhí)行16位指令一樣執(zhí)行下去,直到遇到一條"窄-寬"狀態(tài)切換指令,將CPU狀態(tài)切換回"32位"狀態(tài)。由于代碼變換在每個(gè)基本塊之內(nèi)進(jìn)行,編譯工具鏈可以確定在兩條狀態(tài)切換指令之間的16位指令中沒有跳轉(zhuǎn)指令或者其它修改PC的指令。譯碼部分結(jié)構(gòu)設(shè)計(jì)可以有兩種,一種為統(tǒng)一譯碼,參考圖4,描述了統(tǒng)一譯碼的具體方式,將從內(nèi)存取到的32位指令首先通過16位解碼器和狀態(tài)切換指令預(yù)解碼器轉(zhuǎn)換為相應(yīng)的32位指令和狀態(tài)設(shè)置信號,之后和原32位指令一起通過多路選擇器選擇出當(dāng)前指令,最后統(tǒng)一由32位譯碼器進(jìn)行最終的譯碼;另一種為分離譯碼,參考圖5,描述了分離譯碼的具體方式,即指令首先由16位、狀態(tài)切換指令和32位指令譯碼器分別譯碼,最后由多選器選擇最終的譯碼結(jié)果。一個(gè)典型的混合編碼指令序列以一條"寬-窄"狀態(tài)切換指令開始(這條指令在執(zhí)行自己的計(jì)算功能的同時(shí),通知處理器將狀態(tài)切換到16位),中間有若干條"16位"指令,最后以一條"窄-寬"狀態(tài)切換指令作為結(jié)束(這條指令在執(zhí)行自己的計(jì)算功能的同時(shí),通知處理器將狀態(tài)切換到32位)。代碼在存儲空間中的布局情況如表2所示。<table>tableseeoriginaldocumentpage11</column></row><table>32位指令表2混合編碼在存儲中的布局混合編碼指令序列在流水線中的情況如下表3所示。<table>tableseeoriginaldocumentpage12</column></row><table>表3改進(jìn)的混合編碼序列在5級流水線中的執(zhí)行情況步驟S30:混合編碼生成機(jī)制在以上的處理器設(shè)計(jì)的基礎(chǔ)上,本發(fā)明給出在鏈接時(shí)刻進(jìn)行細(xì)粒度混合編碼的方法。在鏈接時(shí)刻,指令和數(shù)據(jù)的地址己經(jīng)確定,因此一條帶有相對偏移做操作數(shù)的32位指令(例如條件跳轉(zhuǎn)或load/store)是否可以被16位指令表示已經(jīng)可以知道(由于代碼密度增大,經(jīng)過混合編碼后還可能出現(xiàn)新的可以被16位表示的指令,這里本發(fā)明忽略這些指令)。同時(shí),在編譯工具鏈基于32位指令系統(tǒng)體系結(jié)構(gòu)產(chǎn)生匯編代碼之后進(jìn)行指令編碼的選擇,可以保證靜態(tài)代碼和動(dòng)態(tài)代碼指令數(shù)語與單純用32位指令的代碼相同,這樣可以保證在提高代碼密度的同時(shí),不會(huì)降低性能。本發(fā)明中混合編碼生成算法的基本思想是在代碼中識別可以轉(zhuǎn)換的指令,重新調(diào)度代碼,在保證不破壞原依賴關(guān)系的基礎(chǔ)上使得這些可以轉(zhuǎn)換的指令被連續(xù)放置,以增加可以轉(zhuǎn)換的指令,最后將所有可以轉(zhuǎn)換的指令序列用狀態(tài)轉(zhuǎn)換指令和"16位"指令表示。它包括在基本塊內(nèi)進(jìn)行的兩個(gè)主要部分。參考圖3示出了混合編碼生成步驟的具體流程步驟S30h標(biāo)記可以轉(zhuǎn)換的指令。優(yōu)化器依次掃描每條指令,將所有可以轉(zhuǎn)換為狀態(tài)轉(zhuǎn)換指令或"16位"指令的指令進(jìn)行標(biāo)記。如果是跳轉(zhuǎn)指令或load/store指令,則計(jì)算當(dāng)前的相對偏移,以判斷該指令是否可以被狀態(tài)轉(zhuǎn)換指令或"16位"指令表示。在許多指令被轉(zhuǎn)換為16位指令后,實(shí)際的相對偏移可能會(huì)變小,但不會(huì)增大。因此如果當(dāng)前可以用16位表示,在轉(zhuǎn)換以后也必然可以被表示。步驟S302:將可以被轉(zhuǎn)換的指令盡可能相鄰排列,標(biāo)記確定要被轉(zhuǎn)換的指令。這一過程步驟如下i分析基本塊內(nèi)指令間的數(shù)據(jù)相關(guān)。如果兩條指令間存在讀后寫、寫后讀或?qū)懞髮懴嚓P(guān),后者必須在前者后執(zhí)行。ii初始的CSR(代碼大小減小:CodeSizeReduction)被設(shè)置為0。對于任意符合依賴關(guān)系的線性指令順序,即對于任意符合拓?fù)渑判蝽樞虻闹噶铐樞?,?yōu)化器通過計(jì)算可以被轉(zhuǎn)換為16位指令序列的指令數(shù),計(jì)算可以減少的代碼大小。如果減少量比當(dāng)前CSR大,CSR被設(shè)置為該減少量,并記錄當(dāng)前的指令排列順序??赊D(zhuǎn)換的指令數(shù)計(jì)算方法如下優(yōu)化器從基本塊第一條指令開始逐條掃描指令。遇到一條可以被轉(zhuǎn)換為"寬-窄"狀態(tài)切換指令的指令時(shí),標(biāo)記16位指令序列開始。優(yōu)化器掃描最長的可轉(zhuǎn)換的指令序列,標(biāo)記其中的每條指令為"窄-寬"狀態(tài)切換指令或"16位"指令。然后繼續(xù)掃描,尋找新的可轉(zhuǎn)換指令序列,直到基本塊末尾。由于一個(gè)典型基本塊中指令數(shù)一般不超過10,同時(shí)滿足依賴關(guān)系的可能的拓?fù)渑判驍?shù)有限,因此這一過程可以看做O(N)量級,N為指令數(shù),不會(huì)導(dǎo)致巨大時(shí)間浪費(fèi)。步驟S303:重新計(jì)算程序中l(wèi)oad/store指令涉及的地址或跳轉(zhuǎn)指令的目標(biāo)地址,輸出最終的可執(zhí)行目標(biāo)文件。下面以UniCore處理器為例,在UniCore平臺上實(shí)踐本發(fā)明所述的雙寬度指令系統(tǒng)狀態(tài)切換方法。運(yùn)用本發(fā)明方法中狀態(tài)切換指令選取方法,為UniCore平臺選取的切換指令集合如下表4所示<table>tableseeoriginaldocumentpage13</column></row><table>表4:"寬-窄"狀態(tài)切換指令集合<table>tableseeoriginaldocumentpage14</column></row><table>表5:"窄-寬"狀態(tài)切換指令集合其中signedimme表示有符號立即數(shù),rd,rm,m,rs表示寄存器,其中rd為目標(biāo)寄存器。這些狀態(tài)切換指令除執(zhí)行數(shù)據(jù)移動(dòng)、比較、裝載和跳轉(zhuǎn)等功能外,還會(huì)切換處理器的運(yùn)行狀態(tài)。在選定狀態(tài)切換指令后,根據(jù)該指令集合,修改了編譯工具鏈,生成混合編碼的程序。本發(fā)明還提供了一種實(shí)現(xiàn)上述方法的應(yīng)用系統(tǒng),包括一狀態(tài)切換裝置,該狀態(tài)切換裝置進(jìn)一步包括一"寬-窄"狀態(tài)切換模塊,用于控制一"寬-窄"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;及一"窄-寬"狀態(tài)切換模塊,用于控制一"窄-寬"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。對于其他體系結(jié)構(gòu)和其它應(yīng)用,同樣可以采用本發(fā)明中所述狀態(tài)切換機(jī)制,通過在本發(fā)明中所述的狀態(tài)切換指令選取方法、微體系結(jié)構(gòu)的設(shè)計(jì)和混合編碼生成方法,完成從硬件到軟件的整體設(shè)計(jì)和實(shí)現(xiàn)。下面給出對本發(fā)明進(jìn)行測評的效果1)實(shí)驗(yàn)環(huán)境使用GNU工具鏈(gcc3.2.1)和newlibC庫。Newlib是一個(gè)輕量級的C庫,主要應(yīng)用于嵌入式平臺。本發(fā)明在mediabench中選擇了一些程序作為評測程序。GCC編譯優(yōu)化選項(xiàng)為"-02"。所有的程序都被編譯為三個(gè)可執(zhí)行文件UniCore32、UniCore16和本發(fā)明32/16位混合編碼。本發(fā)明對每種可執(zhí)行文件的代碼大小進(jìn)行了統(tǒng)計(jì),并用sim-pipeline進(jìn)行了模擬評測。Sim-pipeline是一個(gè)周期級模擬器,由simplescalar中的sim-outorder模擬器修改而成,模擬UniCore的五級流水。主要的模擬配置參數(shù)見表6。評測程序見表7。轉(zhuǎn)移預(yù)測策略預(yù)測不發(fā)生一級指令Cache容量8K相連度…塊大小32Bytes替換策略先進(jìn)先出一級數(shù)據(jù)Cache容量8K相連度4塊大小32Bytes策略先進(jìn)先出,寫回,寫分配表6模擬配置參數(shù)評測程序描述adpcm自適應(yīng)差分脈沖編碼調(diào)制的編碼與解碼epic一種有損圖像壓縮算法的壓縮與解壓縮pegwit一種公鑰加密認(rèn)證方法的加密和解密jpeg一種標(biāo)準(zhǔn)圖像壓縮格式的編碼與解碼mesaOpenGL的一個(gè)3D圖形庫核心(mipmap/osdemo/texgen)mpeg2一種高質(zhì)量數(shù)字視頻標(biāo)準(zhǔn)的編解碼表7評測程序2)實(shí)驗(yàn)結(jié)果本實(shí)驗(yàn)從代碼大小、動(dòng)態(tài)執(zhí)行的指令數(shù)、程序運(yùn)行的周期數(shù)三個(gè)方面對本發(fā)明所述的方法進(jìn)行了評估。對于每一項(xiàng)指標(biāo),都對比了UniCore32和采用本文提出的切換機(jī)制的混合編碼方法。對于代碼大小,本文的方法可以降低11%到41%。對于所有的動(dòng)態(tài)執(zhí)行指令數(shù),本文的方法與UniCore32相同。對于程序運(yùn)行的周期數(shù),本文的方法均不會(huì)低于UniCore32,范圍從99%到100%。這是由于本發(fā)明的方法可以保證運(yùn)行的指令數(shù)與UniCore32相同,而由于降低了代碼大小,在一些情況下會(huì)減緩Cache的壓力,因而取得比UniCore32略好的性能。實(shí)驗(yàn)結(jié)果表明,本文提出的雙寬度指令系統(tǒng)狀態(tài)切換機(jī)制可以很好地支持細(xì)粒度混合編碼,能夠在不降低程序運(yùn)行性能的同時(shí),有效降低代碼的大小。雖然本發(fā)明己以較佳實(shí)施例揭露如上,然其并非用以限定本發(fā)明,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。權(quán)利要求1、一種雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,該方法是在雙寬度指令系統(tǒng)中引入兩個(gè)狀態(tài)切換指令集合,該兩個(gè)狀態(tài)切換指令集合分別“寬-窄”狀態(tài)切換指令集合和“窄-寬”狀態(tài)切換指令集合,所述狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器運(yùn)行狀態(tài)的功能。2、根據(jù)權(quán)利要求1所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述"寬-窄"狀態(tài)切換指令集合中的指令是在32位指令的程序中頻繁出現(xiàn),該指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;所述"窄-寬"狀態(tài)切換指令集合是在可用16位指令表示的程序片段最后頻繁出現(xiàn),在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。3、根據(jù)權(quán)利要求1或2所述的雙寬度指令系統(tǒng)的性能無損切換方纟去,其特征在于,進(jìn)一步包括以下步驟.-狀態(tài)切換指令的選取步驟,用于由代碼分析工具依據(jù)設(shè)定的算法選擇符合設(shè)定條件的指令加入到狀態(tài)切換指令集中;微體系結(jié)構(gòu)的設(shè)計(jì)步驟,用于在體系結(jié)構(gòu)中引入狀態(tài)切換指令集合以及雙寬度指令系統(tǒng)混合編碼的結(jié)構(gòu)設(shè)計(jì);混合編碼生成步驟,用在不破壞原有指令語義序列的基礎(chǔ)上,將所有可以轉(zhuǎn)換的指令序列用狀態(tài)切換指令和窄指令表示,生成最終的可執(zhí)行目標(biāo)文件。4、根據(jù)權(quán)利要求3所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述狀態(tài)切換指令的選取步驟進(jìn)一步包括步驟S101,分析工具維護(hù)兩塊存儲空間來記錄每個(gè)指令的權(quán)重;歩驟S102,選擇出現(xiàn)頻率最高的候選指令加入到相應(yīng)狀態(tài)切換指令集合中;步驟S103,對于程序中的每條候選指令,如果該候選指令與目前狀態(tài)切換集合中的一條指令有"可轉(zhuǎn)換"關(guān)系,則存儲空間中的相應(yīng)項(xiàng)的值加一;步驟S104,選擇數(shù)組中值最大的項(xiàng),并將它加入狀態(tài)切換指令集合中,如果狀態(tài)切換指令集合中指令數(shù)少于給定總指令數(shù),則轉(zhuǎn)到步驟S103;否則,結(jié)束。5、根據(jù)權(quán)利要求3所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述微體系結(jié)構(gòu)的設(shè)計(jì)主要是對譯碼結(jié)構(gòu)的設(shè)計(jì),該譯碼結(jié)構(gòu)的設(shè)計(jì)方式包括統(tǒng)一譯碼和分離譯碼兩種方式。6、根據(jù)權(quán)利要求5所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述統(tǒng)一譯碼方式是將從內(nèi)存取到的32位指令首先通過16位解5馬器和狀態(tài)切換指令預(yù)解碼器轉(zhuǎn)換為相應(yīng)的32位指令和狀態(tài)設(shè)置信號,之后和原32位指令一起通過多路選擇器選擇出當(dāng)前指令,最后統(tǒng)一由32位譯碼器進(jìn)行最終的譯碼;所述分離譯碼方式,是將指令首先由16位、狀態(tài)切換指令和32位指令譯碼器分別譯碼,最后由多選器選擇最終的譯碼結(jié)果。7、根據(jù)權(quán)利要求3所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述微體系結(jié)構(gòu)的設(shè)計(jì)步驟中,混合編碼指令序列是一條"寬-窄"狀態(tài)切換指令開始,中間有若干條16位指令,最后以一條"窄-寬"狀態(tài)切換指令作為結(jié)束。8、根據(jù)權(quán)利要求3所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述混合編碼生成步驟進(jìn)一步包括步驟S301,標(biāo)記可以轉(zhuǎn)換的指令;步驟S302,將所述可以被轉(zhuǎn)換的指令相鄰排列,標(biāo)記確定要被轉(zhuǎn)換的指令;步驟S303,重新計(jì)算裝載或跳轉(zhuǎn)目標(biāo)地址,輸出最終的可執(zhí)行目標(biāo)文件。9、根據(jù)權(quán)利要求4所述的雙寬度指令系統(tǒng)的性能無損切換方法,其特征在于,所述步驟S103中,所述"可轉(zhuǎn)換"關(guān)系的定義如下當(dāng)A是"寬-窄"狀態(tài)切換"候選指令"且B是"窄-寬"狀態(tài)切換"候選指令",且在程序二進(jìn)制代碼中二者之間的所有指令都是"可被16位表示的",則指令A(yù)與指令B構(gòu)成所述"可轉(zhuǎn)換"關(guān)系。10、一種實(shí)現(xiàn)上述權(quán)利要求19中任一項(xiàng)所述方法的應(yīng)用系統(tǒng),其特征在于,包括一狀態(tài)切換裝置,該狀態(tài)切換裝置進(jìn)一步包括-一"寬-窄"狀態(tài)切換模塊,用于控制一"寬-窄"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至窄指令狀態(tài)的功能;及一"窄-寬"狀態(tài)切換模塊,用于控制一"窄-寬"狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器狀態(tài)至寬指令狀態(tài)的功能。全文摘要本發(fā)明公開了一種雙寬度指令系統(tǒng)的性能無損切換方法及其應(yīng)用系統(tǒng),該方法是在雙寬度指令系統(tǒng)中引入兩個(gè)狀態(tài)切換指令集合,該兩個(gè)狀態(tài)切換指令集合分別“寬-窄”狀態(tài)切換指令集合和“窄-寬”狀態(tài)切換指令集合,所述狀態(tài)切換指令集合中的指令在執(zhí)行普通操作的同時(shí),還執(zhí)行切換處理器運(yùn)行狀態(tài)的功能。文檔編號G06F9/38GK101676863SQ20091016370公開日2010年3月24日申請日期2009年8月14日優(yōu)先權(quán)日2008年8月15日發(fā)明者劉先華,張吉豫,旭程申請人:北京北大眾志微系統(tǒng)科技有限責(zé)任公司