本發明有關于選擇性壓縮以及解壓縮微程序碼指令。
背景技術:現代先進的微處理器通常包括執行復雜及/或微處理器指令集架構的不常執行的指令微程序碼。以微程序碼實現指令集架構一些指令的好處為可降低微處理器其他功能單元(如執行單元)的復雜度。當指令集架構的指令數目以及復雜度增加時也需要微程序碼,基于這項需求,微處理器會額外以非易失性存儲器(如只讀存儲器(ROM))來儲存微程序碼。然而,增加存儲器會消耗微處理器的實體資源,而這個問題將隨著多核微處理器的核數目增加而加劇,因其中每一個核皆具有存儲器用以儲存微程序碼。
技術實現要素:本發明提出一種微處理器。上述微處理器包括一或多個存儲器,每一上述的一或多個存儲器用以持有多個微程序碼指令。至少一第一上述存儲器用以提供多個壓縮微程序碼指令的M位寬微程序碼字組,至少一第二上述存儲器用以提供多個未壓縮微程序碼指令的N位寬微程序碼字組,M以及N為大于零的整數,且N大于M。微處理器也包括一解壓縮單元,在上述壓縮微程序碼指令自至少一上述第一存儲器存取之后以及在上述壓縮微程序碼指令被執行之前,上述解壓縮單元用以解壓縮上述壓縮微程序碼指令。本發明還提出一種選擇性解壓縮微程序碼的方法。上述選擇性解壓縮微程序碼的方法包括接收來自一存儲器的一第一N位寬微程序碼字組。上述選擇性解壓縮微程序碼的方法也包括,判斷上述第一N位寬微程序碼字組的一既定部分是否為一既定數值。上述選擇性解壓縮微程序碼的方法也包括,若上述既定部分并非上述既定數值,解壓縮上述第一N位寬微程序碼字組而產生一M位寬微程序碼字組,其中M及N為大于零的整數,且M大于N。上述選擇性解壓縮微程序碼的方法也包括,若上述既定部分為上述既定數值,接收來自上述存儲器的一第二N位寬微程序碼字組,并組合部分的上述第一N位寬微程序碼字組以及上述第二N位寬微程序碼字組而產生上述M位寬微程序碼字組。本發明還提出一種產生選擇性壓縮微程序碼的方法。上述產生選擇性壓縮微程序碼的方法包括接收一來源碼,上述來源碼包括多個微程序碼組合語言指令,其中部分的上述微程序碼組合語言指令的每一個皆以上述來源碼的一指示所標示。產生選擇性壓縮微程序碼的方法也包括,對于上述微程序碼組合語言指令的每一個,若并非以上述指示所標示,則產生上述微程序碼組合語言指令的一單一字組壓縮二進制表示式,若由上述指示所標示,則產生上述微程序碼組合語言指令的一多字組未壓縮二進制表示式。本發明還提出一種產生描述方法,適用于產生一解壓縮微程序碼裝置的一描述。上述產生描述方法包括,接收一來源碼,其中上述來源碼包括多個微程序碼組合邏輯語言指令。上述產生描述方法也包括,對于上述微程序碼組合邏輯語言指令的每一個,產生一未壓縮二進制表示式。上述產生描述方法也包括,對于上述微程序碼組合語言指令的每一唯一指令,產生上述唯一指令的對應的上述未壓縮二進制表示式的部分對應至一壓縮二進制表示式的一對應關系。本發明還提出一種微處理器。上述微處理器包括多個存儲器,上述存儲器的每一個用以持有多個微程序碼指令。上述存儲器的至少一第一存儲器用以提供多個壓縮微程序碼指令的多個M位寬微程序碼字組,并且上述存儲器的至少一第二存儲器用以提供多個未壓縮微程序碼指令的多個N位寬微程序碼字組,其中M以及N為大于零的整數,且N大于M。上述微處理器也包括一解壓縮單元,在上述壓縮微程序碼指令自至少上述第一存儲器存取之后且于執行上述壓縮微程序碼指令之前,上述解壓縮單元用以解壓縮上述壓縮微程序碼指令。本發明還提出一種選擇性解壓縮微程序碼的方法,上述選擇性解壓縮微程序碼的方法適用于解壓縮具有多個存儲器的一微處理器中的多個微程序碼指令,上述存儲器的每一個用以持有上述微程序碼指令。上述選擇性解壓縮微程序碼的方法包括,自上述存儲器的至少一第一存儲器存取上述壓縮微程序碼指令的多個M位寬微程序碼字組。上述選擇性解壓縮微程序碼的方法也包括,自上述存儲器的至少一第二存儲器存取多個未壓縮微程序碼指令的多個N位寬微程序碼字組,其中M以及N是大于零的整數且N大于M。上述選擇性解壓縮微程序碼的方法也包括,解壓縮自上述第一存儲器所存取的上述壓縮微程序碼指令。上述選擇性解壓縮微程序碼的方法也包括,傳送上述未壓縮微程序指令而不需解壓縮。本發明還提出一種計算機程序產品,編程于至少一非暫態計算機可使用介質并與一計算裝置一并使用。上述計算機程序產品包括,一計算機可用程序碼體現于上述非暫態計算機可使用介質以指定一微處理器。上述計算機可用程序碼包括,一第一程序碼,指定多個存儲器,每一上述存儲器用以持有多個微程序碼指令,其中上述存儲器的至少一第一存儲器用以提供多個壓縮微程序碼指令的多個M位寬微程序碼字組。上述存儲器的至少一第二存儲器用以提供多個未壓縮微程序碼指令的多個N位寬微程序碼字組,其中M以及N為大于零的整數且N大于M。上述計算機可用程序碼也包括,一第二程序碼,指定一解壓縮單元,在上述壓縮微程序碼指令自上述第一存儲器被存取后以及上述壓縮微程序碼指令被執行前,上述解壓縮單元用以解壓縮上述壓縮微程序碼指令。本發明能夠降低微處理器的復雜度、減小微處理器的體積。附圖說明圖1顯示根據本發明一實施例所述的多核微處理器的方塊圖。圖2顯示根據本發明圖1實施例所述的處理核的詳細方塊圖。圖3顯示根據本發明圖2實施例所述的解壓縮單元的詳細方塊圖。圖4顯示根據本發明一實施例所述的由組合程序選擇性壓縮微程序碼指令的流程圖。圖5顯示根據本發明一實施例所述的建立選擇性壓縮微程序碼的流程圖。圖6顯示根據本發明一實施例所述的由組合程序組合微程序碼的流程圖。圖7顯示根據本發明一實施例所述圖2的復雜指令轉譯器(尤其是圖3的解壓縮單元)的動作流程圖。圖8-圖13顯示根據本發明另一實施例所述的具有微程序碼存儲器的微處理器持有不同組合的壓縮與解壓縮的微程序碼指令的方塊圖。其中,附圖中符號的簡單說明如下:100微處理器102處理核104核微程序碼只讀存儲器106仲裁邏輯108非核只讀存儲器114非核微程序碼修補隨機存取存儲器202指令快取204簡單指令轉譯器206暫存器別名表208保留站212執行單元214引退單元216指令存取單元218結構程序計數器222第一多工器224目標地址226微指令232非結構微程序碼程序計數器235指令間接暫存器236微程序237微轉譯器239解壓縮單元242結構指令244第一微指令245選擇控制輸入246第二微指令247第一微程序碼指令248選擇控制輸入251第二微程序碼指令252微程序碼地址253未壓縮微程序碼指令254非結構微程序碼存取地址255微指令信息262存儲器子系統264暫存器292第二多工器294指令轉譯器296復雜指令轉譯器306修補內容可尋址存儲器308修補地址353未壓縮微程序碼指令35538位結果392三端輸入多工器394解壓縮器396控制邏輯398緩沖器402第一微程序碼組合語言指令412第一逃離指針414第二微程序碼組合語言指令432第二逃離指針434下16位436上6位438上22位1299核修補隨機存取存儲器502來源碼504組合語言506選擇性壓縮二進制微程序碼508所有微程序碼指令的列表512壓縮程序514壓縮表516解壓縮描述518邏輯產生程序(ESPRESSO)524解壓縮器暫存器傳遞語言文件602~612、702~714步驟。具體實施方式在此所述的微處理器,大多但非全部的微程序碼指令壓縮且維持于微程序碼存儲器中。微處理器包括一解壓縮單元,用以選擇性地對選擇的壓縮微程序碼指令解壓縮,例如圖2的解壓縮單元239。根據本發明的一實施例,維持于存儲器的微程序碼指令并未壓縮,因而較存儲器所維持的字節寬度更長。在此情況下,微程序碼指令分為兩個部分,并分別儲存于存儲器不同的兩個字組中。在這些狀況下,一既定數值(在此稱為“跳出(escape)指針”)放置(例如,通過微程序碼組合程序)于兩字組序列第一字組的一既定部分。當解壓縮單元偵測跳出指針存在于由存儲器所讀取的第一字組時,解壓縮單元結合兩字組的適當部分而產生未壓縮微程序碼指令。此方式有利于提供大多數維持于存儲器中的微程序碼指令能夠被壓縮,并使其寬度較不包括于選擇性壓縮機制的實現方式為短。再者,許多實施例描述具有多個微程序碼存儲器的微處理器,至少一微程序碼存儲器具有壓縮的微程序碼指令的寬度以提供壓縮微程序碼指令,至少一微程序碼存儲器為具有非壓縮微程序碼指令的寬度以提供非壓縮微程序碼指令。在此詳述壓縮寬度以及非壓縮寬度的核、非核以及修補微程序碼存儲器的各種組合。請參考圖1,圖1顯示根據本發明一實施例所述的多核微處理器100的方塊圖。微處理器100的實體位于一集成電路上,微處理器100包括許多處理核100、由許多處理核102所共用的非核只讀存儲器(ROM)108、由許多處理核102所共用的非核微程序碼修補隨機存取存儲器(RAM)114、以及耦接處理核102至非核只讀存儲器108和非核微程序碼修補隨機存取存儲器114的仲裁邏輯106(也稱為控制邏輯)。每一處理核102包括對應的核微程序碼只讀存儲器104,此對應的核微程序碼只讀存儲器104并不與其他處理核102分享,而是專屬于各自的處理核102。每一處理核102經由對應的總線112耦接至仲裁邏輯106。非核只讀存儲器108、非核微程序碼修補隨機存取存儲器114、以及核微程序碼只讀存儲器104皆為持有微程序碼指令。微處理器100包括稱之為非核的部分。該非核部分為微處理器100的一部分但不屬于任何處理核102的部分。非核只讀存儲器108以及非核微程序碼修補隨機存取存儲器114位于微處理器100的非核部分。在一實施例中,處理核102是單一設計并重復復制。圖1的實施例中顯示四個處理核102,而其他實施例則具有不同數目的處理核102。仲裁邏輯106也安置于微處理器100的非核部分,當多個處理核102要求存取非核只讀存儲器108或非核微程序碼修補隨機存取存儲器114時,由仲裁邏輯106執行仲裁決定。非核只讀存儲器108提供某數量的字組(稱為“J”)來儲存微程序碼指令,并可被所有處理核102所存取。每一核微程序碼只讀存儲器104提供某數量的字組(稱為“K”)來儲存微程序碼指令,并只能被對應的處理核102所存取。非核只讀存儲器108的J個字組與對應的核微程序碼只讀存儲器104的K個字組,位于不同于處理核的微程序碼存儲器地址空間的地址空間上。總括來說,對于每一處理核,其對應的核微程序碼只讀存儲器104與非核只讀存儲器108,提供J+K字組的儲存空間給可被處理核102所存取的微程序碼指令。在一實施例中,非核只讀存儲器108具有J個可定址的存儲器位置,每一個可定址的存儲器位置皆為壓縮微程序碼指令的寬度。在一實施例中,每一非核只讀存儲器108具有K個可定址的存儲器位置,每一個可定址的存儲器位置皆為壓縮微程序碼指令的寬度。在一實施例中,壓縮微程序碼指定的寬度為28位,而非壓縮或解壓縮的微程序碼指令的寬度為38位。根據本發明的一實施例,非核只讀存儲器108包括為所有處理核102共用的單一讀取端口,以及根據仲裁演算法用以授權處理核102使用讀取端口的仲裁邏輯106。根據本發明的一實施例,若在一既定要求周期內僅有一處理核102要求存取非核只讀存儲器108時,則仲裁邏輯106允許此處理核102的要求;若在一既定要求周期內有多個處理核102要求存取非核只讀存儲器108時,則仲裁邏輯106依輪流法(round-robin)的順序準予存取,但其他仲裁演算法亦可運用在本發明中。其他實施例中,可使非核只讀存儲器108對于每一處理核102均包括一讀取端口。然而,應注意的是,當非核只讀存儲器108包括更多的讀取端口時將增加更大的晶粒面積,因此與晶粒面積相關的技術功效就會降低。利用非核只讀存儲器108的優點為,當從非核只讀存儲器108存取微程序碼指令時,其可能以增加延遲時間的方式,作為降低微處理器100面積的代價。延遲時間的增加會造成每一處理核102的微程序碼單元至非核只讀存儲器108之間更大的距離,也就是傳送延遲會因額外的距離而增加,因而需要額外的管線級以及相關的額外時脈周期。此外,延遲時間的增加亦可歸咎于因非核只讀存儲器108共用資源且必須分配給每個處理核102,并當多個處理核102要求存取非核只讀存儲器108時所造成的現象。再者,非核只讀存儲器108的共享本質可能導致變動的存取延遲時間,不像核微程序碼只讀存儲器104具有固定的延遲時間。然而,在一些實施例中,增加及/或變動的延遲時間作為降低晶粒面積的代價。有利的是,非核只讀存儲器108的大小可利用在實施例所述的選擇性微程序碼壓縮而進一步降低。參考圖2,圖2顯示根據本發明圖1實施例所述的處理核102的詳細方塊圖。處理核102包括一管線級,該管線級包括許多功能單元。在一實施例中,處理核102為一超純量(superscalar)、非循序執行(out-of-orderexecution)、管線化數據的處理核。處理核102包括指令存取單元216、其再耦接至指令快取202、其再耦接至指令轉譯器294、其再耦接至暫存器別名表(RAT)206、其再耦接至保留站208、其再耦接至執行單元212、其再耦接至引退單元214。執行單元212自暫存器264(結構的或非結構的)以及存儲器子系統262接收運算元。引退單元214引退微指令結果至暫存器264以及存儲器子系統262。指令轉譯器294經由圖1的總線112,耦接至仲裁邏輯106。存取單元216包括處理核102的結構程序計數器218,當引退單元214引退指令時,引退單元214更新結構程序計數器218。存取單元216提供結構指令存取地址至指令快取202。根據結構程序計數器218,存取單元216產生結構存取地址。此外,執行單元212可執行分支指令,且提供分支目標地址至存取單元216,用以產生結構存取地址。最后,存取單元216的分支預測器(圖中并未顯示)可提供預測分支目標地址,用以產生結構存取地址。結構程序計數器218與由指令轉譯器294所維持的指令非結構微程序碼程序計數器224不同,并且由存取單元216所產生而傳送至指令快取202的結構存取地址,與由存取單元216的微程序236(也稱為控制邏輯)所產生的非結構微程序碼存取地址254亦不同,這些將在以下詳述。指令快取202所快取的結構指令242,也稱為微指令或ISA指令,由微處理器100(例如:x86、ARM、SPARC等等)的指令集架構所定義。指令轉譯器294翻譯結構指令242成為處理核102微架構的微指令226,指令轉譯器294通常具有精簡指令集(RISC)體系相關的特征。指令轉譯器294以程序順序提供微指令至暫存器別名表206。暫存器別名表206在引退單元214的重新排列緩沖器中,以程序順序分配微指令的項目。暫存器別名表206執行暫存器264的重新命名。暫存器別名表206提供微指令至保留站208,當每一微指令的來源運算元可獲得,且執行單元212能夠執行該微指令時,微指令從保留站208被發送至執行單元212且以非循序方式來執行。引退單元214通過將執行單元212所執行微指令的結果,以程序順序引退指令至處理核102的架構狀態。執行單元212可包括載入單元、儲存單元、整數單元、浮點數單元、分支單元、單一指令多重數據流計算機模組(Singleinstruction,multipledata,SIMD)單元等等。載入單元自第一階(level-1,L1)數據快取中讀出數據,儲存單元將數據寫入至第一階數據快取。第二階(level-2,L2)數據快取可作為第一階數據快取以及指令快取202的備用儲存裝置。指令轉譯器294自圖2的指令快取202接收結構指令242的多個區塊。結構指令242也稱為微指令242或ISA指令242。指令轉譯器294轉譯結構指令242為提供至暫存器別名表206的實現微指令226。指令轉譯器294包括簡單指令轉譯器(SIT)204、復雜指令轉譯器(CIT)296以及第二多工器292。簡單指令轉譯器204輸出實現第一微指令244以及微程序碼地址252。復雜指令轉譯器296,也稱為微程序碼單元296,接收微程序碼地址252,并提供實現第二微指令246。第二多工器292以一輸入端自簡單指令轉譯器204接收第一微指令244,并以另一輸入端自復雜指令轉譯器296接收第二微指令246,且根據選擇控制輸入248提供實現微指令226至圖2的執行單元212。復雜指令轉譯器296包括微程序236、圖1的核微程序碼只讀存儲器104、指令間接暫存器(IIR)235、第一多工器222、解壓縮單元239以及微轉譯器237。微程序236接收微程序碼地址252,且維持非結構微程序碼程序計數器(micro-PC)232。核微程序碼只讀存儲器104接收根據非結構微程序碼程序計數器232所存取的地址254。此外,非核只讀存儲器108也經由總線112,接收非結構微程序碼存取地址254。第一多工器222的第一輸入端接收來自非共用的核微程序碼只讀存儲器104的微程序指令251,第二輸入端則接收來自共用的非核只讀存儲器108的微程序碼指令249(經由總線112),并根據由微程序236所產生的選擇控制輸入245而輸出第一微程序碼指令247。解壓縮單元239接收來自第一多工器222的第一微程序碼指令247,并且選擇性地解壓縮第一微程序碼指令247,以產生未壓縮微程序碼指令253。微轉譯器237轉譯由解壓縮單元239接收的未壓縮微程序碼指令253,以產生由復雜指令轉譯器296所輸出的實現第二微指令246。由簡單指令轉譯器204所產生的實現第一微指令244以及由復雜指令轉譯器296所產生的實現第二微指令246,皆為微處理器100微架構的微指令集的微指令226,并可由執行單元212管線執行。第二多工器292由選擇控制輸入248所控制。通常第二多工器292選擇來自簡單指令轉譯器204的第一微指令244;然而,當簡單指令轉譯器204遇到復雜結構指令242并轉移控制權至(或經由設陷(traps)移轉至)復雜指令轉譯器296時,簡單指令轉譯器204控制選擇控制輸入248,而使得第二多工器292選擇來自復雜指令轉譯器296的第二微指令246。當暫存器別名表206遭遇具有特殊位組的微指令226,以指出其是在順序執行復雜結構指令242過程中最后的微指令226時(在此表示為“.T”位),暫存器別名表206控制選擇控制輸入248而使得第二多工器292回到選擇來自簡單指令轉譯器204的第一微指令244。此外,當引退單元214準備好引退微指令226但其狀態指示此微指令226已造成一例外情況時,引退單元214控制選擇控制輸入248而使得第二多工器292選擇來自復雜指令轉譯器296的第二微指令246。簡單指令轉譯器204接收結構指令242且將其解碼,以決定結構指令242為簡單微指令或復雜微指令。簡單結構指令242是簡單指令轉譯器204可為其發出所有實現微指令226以實現結構指令242的指令,亦即復雜指令轉譯器296不為簡單結構指令242提供任何實現微指令。相反的,復雜結構指令242要求復雜指令轉譯器296提供若非全部、也是至少一部分的實現微指令226。在一實施例中,對結構指令242的子集合而言,簡單指令轉譯器204發出實現結構指令242的第一部分微指令244以實現結構指令242,然后轉移控制權至復雜指令轉譯器296,最后發出剩下微指令246來實現結構指令242。受控的第二多工器292首先將來自簡單指令轉譯器204的實現微指令244轉換成微指令226并提供至執行單元212,其次將來自復雜指令轉譯器296的實現微指令246轉換成為微指令226并提供至執行單元212。簡單執行轉譯器204知道由復雜指令轉譯器294所采用的各種微程序碼程序的起始微程序碼地址并用來產生各種復雜結構指令242的實現微指令226,并當簡單指令轉譯器204解碼一復雜結構指令242時,提供相關的微程序碼地址252至復雜指令轉譯器296的非結構微程序碼程序計數器232。簡單指令轉譯器204發出的所有第一微指令244是被相對高比例執行的結構指令242,特別是結構指令242傾向由ISA機器語言程序以頻繁的方式所執行,而僅有相對小比例需要復雜指令轉譯器296提供第二微指令246。在一實施例中,簡單指令轉譯器204是利用眾所周知的合成工具所合成的布林邏輯門方塊。復雜指令轉譯器296輸出實現第二微指令246序列至第二多工器292。核微程序碼只讀存儲器104或非核只讀存儲器108,儲存微程序碼程序的選擇性壓縮第二微程序碼指令251以及選擇性壓縮微程序碼指令249。核微程序碼只讀存儲器104/非核只讀存儲器108輸出選擇性壓縮第二微程序碼指令251/選擇性壓縮微程序碼指令249以響應非結構微程序碼存取地址254,其中非結構微程序碼存取地址254儲存于非結構微程序碼程序計數器232。通常,非結構微程序碼程序計數器232自簡單指令轉譯器204接收微程序碼地址252的初始值,以響應簡單指令轉譯器204所解碼的復雜結構指令242。在其他情況下,比如響應一重置或例外時,非結構微程序碼程序計數器232分別接收重置微程序碼程序地址或適當的微程序碼例外處理地址。一般來說,微程序236通過微程序碼指令的大小(根據本發明的一實施例,微程序碼指令的大小為核微程序碼只讀存儲器104或非核只讀存儲器108中字組的大小)來遞增非結構微程序碼程序計數器232,用以依序通過微程序碼程序。另外,微程序236依據由微轉譯器237所產生的目標地址224來更新非結構微程序碼程序計數器232,以響應解碼控制類型微程序碼指令(例如分支指令);或響應控制類型微指令226的執行而由執行單元212所產生的目標地址來更新非結構微程序碼程序計數器232;或是以位于核微程序碼只讀存儲器104或非核只讀存儲器108的非序列位置來更新非結構微程序碼程序計數器232以啟動分支。核微程序碼只讀存儲器104以及非核只讀存儲器108被制造于與微處理器100相同的半導體晶粒上。除了實現復雜結構指令242的部分的簡單結構指令242的第一微指令244,簡單指令轉譯器204也產生微指令信息255,微指令信息255寫入至指令間接暫存器(IIR)235。儲存于指令間接暫存器235的微指令信息255包括有關結構指令242被轉譯的信息,例如辨別由結構指令242所指定的來源以及目標暫存器以及結構指令242的格式,諸如結構指令242是否操作于存儲器的運算元或于微處理器100的一架構暫存器264。這樣允許微程序碼程序成為通用,也就是每一不同的來源及/或目標架構暫存器264不需要具有不同微程序碼程序。特別的是,簡單指令轉譯器204知道暫存器264,并在轉譯由結構指令242所提供的暫存器信息后,經由微指令信息255提供至暫存器264的適當暫存器中。微指令信息255也包括位移域、即時域、常數域、對于每一來源運算元以及微指令226本身的重新命名信息、指出實現結構指令242的微指令226序列的第一以及最后一個微指令的信息、以及由簡單指令轉譯器204解碼結構指令242時所收集的有用信息的其他位。微轉譯器237接收來自解壓縮單元239的未壓縮微程序碼指令253以及指令間接暫存器235的內容,并產生實現第二微指令246做響應。微轉譯器237根據指令間接暫存器235所接收的信息,例如根據結構指令242的格式以及由其指定的來源及/或目標架構暫存器264的組合,來轉譯某些未壓縮微程序碼指令253至微指令246的不同的序列。在一些狀況下,大部分的微指令信息255與未壓縮微程序碼指令253做合并以產生實現第二微指令246。在一實施例中,每一未壓縮微程序碼指令253為38位寬,且每一第二微指令246大約為200位寬。在一實施例中,微轉譯器237能夠自未壓縮微程序碼指令253,產生最多三個第二微指令246。微轉譯器237包括產生實現第二微指令246的布林邏輯門。由于簡單指令轉譯器204產生微指令信息255,故核微程序碼只讀存儲器104與非核只讀存儲器108不需要儲存由指令間接暫存器235所提供的微指令信息255,因此微轉譯器237所提供的一個優點為可減少核微程序碼只讀存儲器104與非核只讀存儲器108的大小。再者,微程序碼程序可包括較少的條件分支指令,因微程序碼程序不需要包括針對每一不同微指令格式、以及針對每一來源及/或目標架構暫存器264的組合的個別程序。例如,若復雜結構指令242為存儲器型式,簡單指令轉譯器204可產生第一微指令244為開端,其包括第一微指令244以載入來自存儲器的來源運算元而進入暫時暫存器264,而微轉譯器237可產生第二微指令246以從暫時暫存器將結果儲存于存儲器;若復雜結構指令242為暫存器格式,作為開端的第一微指令244可從結構指令242指定的來源暫存器移動來源運算元至暫時暫存器264,而微轉譯器237可產生第二微指令246以移動來自暫時暫存器的結果至由指令間接暫存器235所指定的架構目標暫存器264。在一實施例中,微轉譯器237在許多方面與申請日為2010年4月23日的美國專利案US12/766,244中所述的微轉譯器237相似,該美國專利請求優先權至2009年8月14日的美國臨時申請案號US61/234,008,其在2011年2月17號公開為美國公開號US2011/0040953的專利,每一個在此通過引用將其整體并入本文,并供各方面說明之用。在另一實施例中,指令轉譯器294不包括微轉譯器237,而自核微程序碼只讀存儲器104以及非核只讀存儲器108所存取的第二微程序碼指令251以及微程序碼指令249則在選擇性解壓縮的后,成為可由執行單元212執行的微指令。應注意的是,非結構微程序碼程序計數器232與結構程序計數器218不同;也就是,非結構微程序碼程序計數器232不能維持結構指令242的地址,而維持于非結構微程序碼程序計數器232的地址并不在系統存儲器地址空間之內。如上所述,第一微程序碼指令247為儲存于微處理器100的一或多個的核微程序碼只讀存儲器104以及非核只讀存儲器108的非結構指令,且第一微程序碼指令247是處理核102根據儲存于非結構微程序碼程序計數器232的非結構微程序碼存取地址254所存取與使用,進而實現微處理器100的指令及結構指令242。未壓縮微程序碼指令253由微轉譯器237轉譯成第二微指令246而由執行單元212執行,或在本發明的另一實施例中,未壓縮微程序碼指令253直接由執行單元212執行(在此為第二微指令246)。未壓縮微程序碼指令253為非結構指令的意思為其并非微處理器100的指令集(ISA)結構的指令,而是根據與結構指令集不同的指令集所編碼的。非結構微程序碼程序計數器232并非由微處理器100的指令集結構所定義,且與結構定義程序計數器218有所不同。微程序碼用以實現以下所述微處理器的指令集結構的某些或所有指令。響應于解碼微程序碼實現結構指令242,微處理器100,特別是簡單指令轉譯器294,將轉移控制權至與結構指令242相關的微程序碼程序。微程序碼程序包括微程序碼指令。執行單元212執行未壓縮微程序碼指令253,或根據圖2的實施例,未壓縮微程序碼指令253還轉譯成第二微指令246而被執行單元212所執行。由執行單元212執行未壓縮微程序碼指令253(或由未壓縮微程序碼指令253轉譯的第二微指令246)的結果是由結構指令242所定義的結果。因此,由執行單元212集體執行的關于結構指令242的微程序碼程序(或由執行單元212集體執行的微程序碼程序指令所轉譯的第二微指令246)來執行結構指令242;也就是由執行單元212集體執行的實現未壓縮微程序碼指令253(或由執行單元212集體執行的未壓縮微程序碼指令253轉譯的第二微指令246),執行結構指令242所指定的動作于結構指令242所指定的輸入值,而產生結構指令242所定義的結果。此外,當為了調整微處理器而重置微處理器時,微程序碼指令可被執行(或轉譯成被執行的微指令)。根據本發明的一實施例,圖1的仲裁邏輯106包括要求佇列(圖中并未顯示),其持有接收自處理核102并對非核只讀存儲器108或非核微程序碼修補隨機存取存儲器114進行存取的要求。根據本發明的一實施例,每一介于仲裁邏輯106以及處理核102的總線112包括要求部分以及響應部分。關于要求部分,處理核102指定所要求的微程序指令字組的非結構微程序碼存取地址254。關于響應部分,仲裁邏輯106提供微程序碼指令字組、地址、核編號以及有效指針。微程序碼指令字組、地址以及核編號僅于有效指針指示有效時才為有效。核編號指定仲裁邏輯106提供一響應至先前要求存取非核只讀存儲器108或非核微程序碼修補隨機存取存儲器114的處理核102。地址指定由非核只讀存儲器108或非核微程序碼修補隨機存取存儲器114所存取的微程序碼指令字組的地址。根據本發明的一實施例,仲裁邏輯106于總線112設置延遲(Stall)信號至處理核102,用以指出仲裁邏輯106不能接收更多來自處理核102要求存取非核只讀存儲器108的請求。只要能夠再次接收請求,仲裁邏輯106取消設置延遲信號。根據本發明的一實施例,若暫存器別名表206設置延遲信號至指令轉譯器294以指示無法接收更多的微指令226時,則指令轉譯器294清除任何正在進行的存取非核只讀存儲器108的動作。只要暫存器別名表取消設置延遲信號,微程序236會在傳送至暫存器別名表206的最后微指令226的地址后的下一地址開始存取微程序碼指令。根據本發明的另一實施例,指令轉譯器294儲存正在存取非核只讀存儲器108或非核微程序碼修補隨機存取存儲器114的狀態,以便能避免重新存取相關的正在存取的微程序碼指令。非核只讀存儲器108的存取延遲大于對每一核微程序碼只讀存儲器104的存取延遲。根據本發明的一實施例,核微程序碼只讀存儲器104具有三個周期的存取延遲,并且非核只讀存儲器108的存取延遲在實施例中是可變的,其中其讀取端口與多個處理核102相共用。參考圖3的方塊圖,其更詳細顯示根據本發明圖2實施例所述的解壓縮單元239,同樣顯示于圖3的是修補內容可尋址存儲器(CAM)306。當非結構微程序碼存取地址254符合修補內容可尋址存儲器306中項目之一的內容時,持有修補地址308的可尋址存儲器306會將修補地址308從可尋址存儲器306輸出至微程序236,以響應非結構微程序碼存取地址254。這種情況下,微程序236輸出修補地址308作為非結構微程序碼存取地址254而不是下一序列存取地址(或目標地址224),以響應非核微程序碼修補隨機存取存儲器114在總線112上輸出修補微程序碼指令249。這樣將引發從非核微程序碼修補隨機存取存儲器114擷取修補微程序碼指令249,而不是分別從非核只讀存儲器108或核微程序碼只讀存儲器104擷取不想要的微程序碼指令249或第二微程序碼指令251。另一種做法是將可尋址存儲器306以及非核微程序碼修補隨機存取存儲器114的內容在響應包括系統軟件的結構指令時加以載入,這些軟件可以是基本輸入輸出系統(BIOS)或運作于微處理器100的操作系統。解壓縮單元239包括解壓縮器394、緩沖器398、三端輸入多工器392以及控制邏輯396。解壓縮器394自圖2的第一多工器222接收壓縮的第一微程序碼指令247,并解壓縮此壓縮的第一微程序碼指令247而成未壓縮微程序碼指令353,且提供至三端輸入多工器392的第一輸入端。根據本發明的一實施例,解壓縮器394包括由暫存器傳遞語言(RTL)碼(如硬件描述(Verilog)碼)所合成的可程序邏輯陣列(PLA),并由圖6的可程序邏輯陣列產生器616自動產生。解壓縮器394對壓縮的第一微程序碼指令247解壓縮的方式的實施例,將于下文中詳細敘述。若控制邏輯396要求緩沖器398接收并載入28位的第一微程序碼指令247的位[15:0],則緩沖器398遵循其要求而執行,否則緩沖器398維持其先前的數值。根據本發明的一實施例,在28位第一微程序碼指令247的位[15:0]載入至緩沖器398的時脈周期后的下一個時脈周期中,緩沖器398的內容加上目前28位微程序碼字組247的位[21:0],以產生三端輸入多工器392的第二輸入端的38位結果355。控制邏輯396接收微程序碼字組247的位[27:16],并決定其數值是否為既定的逃離指針數值。根據本發明的一實施例,既定逃離指針數值為0x3FF。若是如此,控制邏輯396控制暫存器398載入28位第一微程序碼指令247的位[15:0]。此外,當第一多工器222提供下一個28位微程序碼字組247時,控制邏輯396控制三端輸入多工器392選擇其第二輸入端以提供未壓縮微程序碼指令253至微轉譯器237,也就是選擇合并緩沖器398的16位內容與28位的微程序碼字組247的位[21:0]的38位結果355。下一個28位微程序碼字組247會是由非核只讀存儲器108/核微程序碼只讀存儲器104所擷取的后續字組的微程序碼指令249/后續字組的第二微程序碼指令251,其跟隨在載入至緩沖器398的字組247后面。根據本發明的另一實施例,解壓縮單元239可于相同時脈周期中接收具有逃離指針的微程序字組,以及兩段未壓縮微程序碼指令。在此實施例中,緩沖器398被省略,且在該時脈周期時該相鄰字組的適當部分被合并,并且提供至三端輸入多工器392的第二輸入端,而控制邏輯396則控制三端輸入多工器392選擇其第二輸入端。三端輸入多工器392在第三輸入端接收38位微程序碼字組112,例如來自非核微程序碼修補隨機存取存儲器114。若目前微程序碼指令的來源是38位寬的存儲器,例如來自非核微程序碼修補隨機存取存儲器114,控制邏輯396控制三端輸入多工器392以選擇其第三輸入端(也就是38位的微程序碼字組112),否則控制邏輯396控制三端輸入多工器392選擇其第一輸入端或第二輸入端。若目前微程序碼指令的來源是28位寬的存儲器時,例如儲存(除了壓縮微程序碼指令外)要求合并的未壓縮微程序碼字組的分離部分的非核只讀存儲器108或核微程序碼只讀存儲器104、以及若先前字組包括逃離指針(即圖4的第二逃離指針432)時,控制邏輯396控制三端輸入多工器392選擇其第二輸入端(也就是38位的結果355)。若目前微程序碼指令的來源為儲存壓縮微程序碼指令(除了未壓縮微程序碼字組的分離部分以及逃離指針外)的28位寬的存儲器,而且目前字組并未包括逃離指針時,控制邏輯控制三端輸入多工器392選擇其第一輸入端(也就是解壓縮器394的38位的未壓縮微程序指令353)。根據本發明的一實施例,由三端輸入多工器392提供至微轉譯器237的38位未壓縮微程序碼指令253包括:根據一些指令格式,且通常為非立即指令的13位操作碼域、5位的第一來源運算元地址域、5位的第二來源運算元地址域、5位的目標運算元地址域、指定運算元大小的4位大小域、指定每一5位運算元暫存器域如何由微轉譯器237進行解碼的4位域、指定微程序碼指令在執行x86指令的連續微程序碼指令中是否為最后指令的一位“.T”域、以及一額外位。通常為立即指令的其他38位未壓縮微程序碼指令253的格式包括:包括16位即時數值的16位即時域,例如一即時運算元或跳躍指令的目標地址、以及上述其他域的子集合,如除了5位第二運算元域以外的域以及較小的操作碼域。請參考圖4,其顯示由組合程序選擇性壓縮微程序碼指令的流程圖。圖4包括兩個流程圖,說明將第一微程序碼組合語言指令402組合進單一字組壓縮二進制指令404的范例,以及將由第一逃離指針412表示的第二微程序碼組合語言指令414與包括逃離指針的多字組未壓縮二進制指令進行組合的范例。第一流程圖說明將第一微程序碼組合語言指令402組合進以單一字組儲存于微程序碼存儲器的壓縮二進制指令404,微程序碼存儲器如核微程序碼只讀存儲器104或非核只讀存儲器108。圖4的實施例中,單一字組為28位寬,也就是如圖所示的核微程序碼只讀存儲器104或非核只讀存儲器108的寬度。當單一字組壓縮二進制指令404由核微程序碼只讀存儲器104或非核只讀存儲器108讀取出來時,如本發明所述,將經由圖3的解壓縮器394來解壓縮為未壓縮微程序碼指令。在圖4的實施例中。第一微程序碼組合語言指令402將第一通用暫存器R2以及第二通用暫存器R3的內容相加,并將結果寫入第三通用暫存器R4。在此實施例中,此為在組合之時存在壓縮表項目的微程序碼指令,其允許組合語言將其壓縮,并在下文終將有詳細描述。第二流程圖說明冠有第一逃離指針412的第二組合語言微程序碼指令414組合至多字組未壓縮二進制指令424的情形,多字組未壓縮二進制指令424分離成兩個28位字組。第一字組包括位于第一字組的既定位的第二逃離指針432。第二逃離指針432為圖2的解壓縮單元239(特別是控制邏輯396)用以響應與辨識,以將包含第二逃離指針432的字組的剩下部分434,與來自核微程序碼只讀存儲器104或非核只讀存儲器108的下個字組的一部分438相結合。在本發明的一實施例中,逃離指針既定數值為0x3FF,第一字組的既定位是位[27:16]。然而既定位以及既定數值并非限定于實施例,而其他的實施例則為具有不同既定數值以及不同既定位。逃離指針為一既定字串(如:圖4所示的“ESCAPE”),程序設計者可在微程序碼來源碼文件中,在微程序碼指令前插入一行,這樣會使得組合語言不會壓縮隨后的微程序碼指令,但會分離該指令為兩個具有壓縮指令的長度的字組,且于二進制字組的開頭包含第二逃離指針432。第一字組的下16位為多字組未壓縮二進制指令424的下16位434,第二字組的上22位為多字組未壓縮二進制指令424的上22位438。當控制邏輯396于第一字組中偵測到第二逃離指針432位于開頭的位置時,下16位434以及上22位438將由解壓縮單元239加以組合。在實際操作上,第二字組的上6位436可全為零。在圖4的實施例中,第二微程序碼組合語言微程序碼指令414將第二通用暫存器R3以及結構暫存器(例如,x86結構暫存器ESI)的內容相加,并將結果寫入第三通用暫存器R4。在此實施例中,該微程序碼指令在組合操作進行時壓縮表項目并不存在,故需要包括第一逃離指針412以避免產生組合錯誤,這部分將于下文中做更詳細的說明。請參考圖5的流程圖,其說明建立選擇性壓縮微程序碼的流程。流程開始于來源碼502,其中來源碼502由微程序碼設計者所開發,而來源微程序碼502可包括第一逃離指針412。組合程序504接收來源碼502以及壓縮表514。在一實施例中,壓縮表514可包含于由以下所述的壓縮程序512所產生的文件中。組合程序504使用壓縮表514來組合來源碼502,以產生選擇性壓縮二進制微程序碼506。選擇性壓縮二進制微程序碼506包括單一字組壓縮二進制指令(如圖4的單一字組壓縮二進制指令404)以及多字組未壓縮二進制指令,多字組未壓縮二進制指令包括第二逃離指針432,如圖4的多字組未壓縮二進制指令424。來源碼502通常包括多來源碼文件,多來源碼文件經由組合程序504的組合而產生選擇性壓縮二進制微程序碼506。組合程序504也產生所有微程序碼指令的列表508,所有微程序碼指令的列表508包含于選擇性壓縮二進制微程序碼506之中。在一實施例中,所有微程序碼指令的列表508是人類可讀的清單,該清單包括在選擇性壓縮二進制微程序碼506中的每一微程序碼指令的項目。對于每一微程序碼指令,該項目指定了:(1)其于核微程序碼只讀存儲器104或非核只讀存儲器108的相關地址;(2)其未壓縮二進制表示式,例如其38位二進制表示式;以及(3)一種與其組合語言表示式相似但經修正以方便壓縮程序512產生壓縮表514。根據微程序碼指令是否由來源碼502的第一逃離指針412所標示的微程序碼指令,38位數值的未壓縮二進制表示式,若非壓縮為單一字組壓縮二進制指定404,就是分離成圖4的多字組未壓縮二進制指令424的下16位434以及上22位438。壓縮程序512接收所有微程序碼指令的列表508,并借此產生壓縮表514。壓縮表514為組合程序504的輸入,隨后組合程序504組合來源碼502而成為選擇性壓縮二進制微程序碼506。通常,隨后的組合為新的或修改后的來源碼502。此外,隨后的組合可與原來用以產生壓縮表514的來源微程序碼502相同,例如當壓縮表一開始是空的時候。壓縮程序512檢查所有微程序碼指令的列表508,并產生唯一指令表。舉例來說,所有微程序碼指令的列表508可包括多個具有一個指令的實例,其將R2減去R1并將結果放置于R3;然而,當產生唯一指令表時,壓縮程序512將這些實例都當作一單一與唯一的微程序碼。一個使得壓縮微程序碼有極高可能性的事實在于,對于許多微程序碼指令而言,多個具有相同指令的實例可存在來源碼502中。使微程序碼指令單一化的的準則可根據不同實施例使用的壓縮方法而改變,以下將通過一實施例做詳細說明。在一實施例中,壓縮程序512是以Python語言所撰寫的程序。在產生唯一指令表之后,壓縮程序512指定每一唯一微程序碼指令一對應的唯一數值。壓縮表514包括一對一對應的唯一微程序碼指令以及唯一壓縮數值。在隨后的組合實例中,組合程序504利用此對應關系來壓縮并未由逃離指針標示的來源碼502組合語言指令而成為壓縮指令404。壓縮數值變成單一字組壓縮二進制指令404(或成為壓縮二進制指令的一部分),解壓縮器394解壓縮該二進制數值而成為未壓縮微程序指令353(或其一部分是未壓縮微程序指令)。在一實施例中,僅對38位未壓縮二進制表示式的一部分進行壓縮,而剩下的位并未壓縮。在一實施例中,將38位未壓縮二進制表示法的22個位,壓縮成28位壓縮二進制指令404中的12個位,38位未壓縮二進制表示式的剩下的16個位跳過未壓縮程序而成為28位壓縮二進制指令404的16位。如下所述,解壓縮器394執行相反的相似流程。在一實施例中,壓縮器512產生三個壓縮表514。壓縮表514之一指定唯一壓縮數值對應至即時跳躍微程序碼指令;壓縮表514之一指定唯一壓縮數值對應至即時非跳躍微程序碼指令;以及壓縮表514之一指定唯一壓縮數值對應至所有其他微程序碼指令,在此稱為“雜項(miscellaneous)”微程序碼指令。在一實施例中,壓縮的即時跳躍指令的28位壓縮二進制指令404具有二進制“1”的數值于首位位(亦即位[27]),然而即時非跳躍微程序碼指令以及雜項微程序碼指令的28位壓縮二進制指令404具有二進制“0”的數值于首位位,即時非跳躍微程序碼指令的28位壓縮二進制指令404在位[26:16]中的數值為0x000至0x2FF之間,而位于雜項微程序碼指令的28位壓縮二進制指令404的位[26:16]中的數值為0x300至0x7FF之間。在一實施例中,即時跳躍以及非即時跳躍的28位壓縮二進制指令404的即時數值位于28位微程序碼字組247的位[15:0]中。壓縮器512也產生解壓縮描述516。解壓縮描述516在概念上可理解為壓縮表514的逆轉,亦即解壓縮描述516包括壓縮表514的唯一壓縮數值與唯一未壓縮微程序碼指令二進制表示式的一對一對應關系(或其一部分)。如上所述,解壓縮器394可跳過壓縮第一微程序碼指令247的部分位(在一實施例為16位),使得解壓縮描述516僅需包括部分的唯一12位壓縮數值與未壓縮微程序碼指令二進制表示式的唯一22位的一對一對應關系。解壓縮器394將唯一22位部分與跳過的16位部分結合以產生最終提供至微轉譯器237的38位未壓縮微程序碼指令253。因此,在一實施例中,解壓縮描述516對應壓縮表514的唯一12位壓縮數值至唯一22位數值,且該對應關系用于制造或模擬輸出唯一22位數值作為未壓縮微程序碼指令353的一部分,以響應接收對應的壓縮第一微程序碼指令247的唯一12位壓縮數值的位[27:16]。邏輯產生程序518(如眾所皆知的ESPRESSOlogicminimizerprogram)將解壓縮描述516轉變成解壓縮器暫存器傳遞語言文件524,解壓縮器暫存器傳遞語言文件524可用以制造或模擬解壓縮器394。在一實施例中,解壓縮器暫存器傳遞語言文件524可合成至形成解壓縮器394的可程序邏輯陣列中。一旦微處理器100的實例,特別是硬件的解壓縮器394,利用解壓縮器暫存器傳遞語言文件524所給定實例而被制造或模擬時,則由微處理器100的實例所執行的隨后選擇性壓縮二進制微程序碼506,必須由組合程序504利用壓縮表514進行組合,其中壓縮表514對應至產生解壓縮器暫存器傳遞語言文件524的解壓縮描述516。否則,解壓縮器394可能不正確地解壓縮選擇性壓縮二進制微程序碼506。舉例來說,由微處理器100的模擬軟件所執行的選擇性壓縮二進制微程序碼506,必須由組合程序504利用壓縮表514進行組合,其中壓縮表514對應于在模擬軟件中使用解壓縮器暫存器傳遞語言文件524而產生的解壓縮器描述516。根據另一實施例,其中載入至非核微程序碼修補隨機存取存儲器114的修補微程序碼被選擇性地壓縮,選擇性壓縮二進制微程序碼506必須由組合程序504利用壓縮表514進行組合,其中壓縮表514對應至解壓縮器暫存器傳遞語言文件524所產生的解壓縮器描述516,并且解壓縮器描述516用以制造微處理器100的實例。根據另一實施例,微處理器具有許多半導體層,而通常核微程序碼只讀存儲器104與非核只讀存儲器108被制造于最后一層,這樣可提供給微程序碼開發者一個繼續發展微程序碼的機會,盡管微處理器100需要先被制造的半導體層(通常包括解壓縮器394)已被制造完成。在此狀況下,必須由組合程序504利用壓縮表514做組合,其中壓縮表514對應至解壓縮描述516,而解壓縮描述516利用解壓縮器暫存器傳遞語言文件524來制造微處理器100的實例。這點特別有利,因為能夠在某些情況提供微程序碼設計者在硬件設計者完成后數周的時間內繼續開發微程序碼。在此狀況下,來源碼502可包括未在所有微程序碼指令的列表508中的新微程序碼指令,其中所有微程序碼指令的列表508用以自微處理器100的實例制造而產生解壓縮器暫存器傳遞語言文件524。在此狀況下,微程序碼設計者需要在新微程序碼指令之前插入第一逃離指針412至來源碼502,如以下對圖6步驟608的描述。圖6所示的流程圖說明利用組合程序組合微程序碼的流程。流程開始于步驟602。在步驟602中,組合程序504接收圖5的來源碼502以及壓縮表514。組合程序504利用壓縮表514組合來源碼502,來源碼可包含逃離指針412。在組合實例開始時,壓縮表514可為空的。要注意的是,微程序碼開發者可能不知是否他已經插入了一新的微程序碼指令至來源碼502,例如在目前壓縮表514并未具有一微程序碼指令的對應關系。在此情況下,當組合程序504組合來源碼502時就會產生相關的錯誤。流程則前進至步驟604。在步驟604中,若組合程序504判斷步驟602在組合中發生錯誤則流程前進至步驟606,否則流程前進至步驟612。特別的是,組合錯誤可能因為壓縮表514不包括來源碼502微程序碼指令的對應關系所造成,其中來源碼502微程序碼指令并未由第一逃離指針412所標示。步驟606中,組合程序504輸出所有微程序碼指令的列表508給來源碼502,流程前進至步驟608。步驟608中,在組合程序504因壓縮表514并未包括對應關系而產生錯誤的該微程序碼指令的前面,插入第一逃離指針412至來源碼502中。在一實施例中,由微程序碼設計者插入第一逃離指針412。在一實施例中,可通過一程序利用由組合程序504所產生的錯誤信息,自動插入第一逃離指針412。在另一組合來源碼502的實例中流程將回到步驟602,直到沒有錯誤產生為止。應注意的是,壓縮表514在來源碼502第一次被組合時是空的,在此狀態下,組合程序504會對來源碼502的所有微程序指令產生錯誤;然而,因為組合程序已產生所有微程序碼指令的列表508,因此壓縮器512可執行用以產生壓縮表514,而相同的來源碼502(沒有插入第一逃離指針412的)可被重新組合而產生可由微處理器100的實例所執行的選擇性壓縮二進制微程序碼506,其中微處理器100的實例包括解壓縮器394的實例,在第二實例中,解壓縮描述516產生解壓縮器暫存器傳遞語言文件524,解壓縮器暫存器傳遞語言文件524產生解壓縮器394的實例,而解壓縮描述516則由壓縮器512所產生。在步驟612中,組合程序504輸出可用以制造微處理器100的所有微程序碼指令的列表508、以及選擇性壓縮二進制微程序碼506。具體而言,選擇性壓縮二進制微程序碼506包括位于非核只讀存儲器108、核微程序碼只讀存儲器104及/或非核微程序碼修補隨機存取存儲器114的單一字組壓縮二進制指令404以及多字組未壓縮二進制指令424。流程結束于步驟612。參考圖7,所示的流程圖說明圖2的復雜指令轉譯器296的動作,尤其是圖3的解壓縮單元239的動作。流程開始于步驟702。在步驟702中,圖3的控制邏輯396接收圖2的28位的壓縮第一微程序碼指令247的位[27:16],并對其解碼。流程繼續至步驟704。在步驟704中,控制邏輯396判斷是否在步驟702解碼的目前28位的壓縮第一微程序碼指令247包括逃離指針。在一實施例中,若28位的壓縮第一微程序碼指令247的既定位等于一既定數值時,控制邏輯判斷目前28位的壓縮第一微程序碼指令247包括逃離指針。在一實施例中,既定位為位[27:16],而既定數值為0x3FF,然而既定位以及既定數值并非做限定實施例之用。若目前28位的壓縮第一微程序碼指令247包括逃離指針,流程進行至步驟706;否則流程進行至步驟712。在步驟706中,控制邏輯396控制緩沖器398載入28位的壓縮第一微程序碼指令247的位[15:0]。流程進行至步驟708。在步驟708中,當下一28位的壓縮第一微程序碼指令247(例如,來自核微程序碼只讀存儲器104或非核只讀存儲器108)到達時,控制邏輯396控制三端輸入多工器392以選擇由緩沖器398所輸出的16位輸出(例如,于步驟702解碼的28位的壓縮第一微程序碼指令247的位[15:0])以及下一28位的壓縮第一微程序碼指令247的位[21:0]兩者所結合的38位結果355,并輸出此38位結果355作為38位未壓縮微程序碼指令253,其中此38位未壓縮微程序碼指令253在此情況下為未壓縮的。在一實施例中,因為管線延遲或與其他處理核102爭奪使用非核只讀存儲器108之故,下一28位的壓縮第一微程序碼指令247并未在一相對較大數量的時脈周期內到達。流程前進至步驟714。在步驟712中,解壓縮器394解壓縮28位的壓縮第一微程序碼指令247成為38位的未壓縮微程序碼指令353。如上所述,在一實施例中,解壓縮器394將28位的壓縮第一微程序碼指令247的12位對應至38位的未壓縮微程序碼指令353的22位,解壓縮器394跳過28位的壓縮第一微程序碼指令247剩下的16位不進行對應,但這16位與對應的22位相結合而產生38位的未壓縮微程序碼指令353。在一實施例中,解壓縮器394也包括多個多工器,其中多個多工器將對應的22位以及跳過的16位的每一位,導向至38位的未壓縮微程序碼指令353的各個位位置,以響應由解碼28位的壓縮第一微程序碼指令247的邏輯所產生的選擇信號。舉例來說,在此實例中,壓縮器512產生三個壓縮表514以對應即時跳躍、即時非跳躍以及雜項微程序碼指令,多工器直接根據三種類型的微程序碼指令中,哪一種微程序碼指令被壓縮,而將對應的22位以及通過的16位導向至38位的未壓縮微程序碼指令353。舉例來說,在一實施例中,在即時類型的微程序碼指令的狀態下,多個多工器將跳過的16位直接指向38位的未壓縮微程序碼指令353的即時域,盡管跳躍以及非跳躍的未壓縮微程序碼指令353的即時域位置不相同;然而在雜項指令的情況下,多個多工器將跳過的16位的子集合指向非即時的未壓縮微程序碼指令353的不同區域及/或子區域;并且多工器根據三種類型的壓縮第一微程序碼指令247的何者被解壓縮,而將對應的22位的子集合指向不同的38位的未壓縮微程序碼指令353的區域及/或子區域。控制邏輯396控制三端輸入多工器392自解壓縮器394選擇38位的未壓縮微程序碼指令353,并且輸出選擇結果353作為選擇性壓縮的38位未壓縮微程序碼指令253,在此情況下為對目前28位的壓縮第一微程序碼指令247解壓縮,其中壓縮第一微程序碼指令247為步驟702所編碼。流程前進制步驟714。在步驟714,微轉譯器237轉譯選擇性解壓縮38位未壓縮微程序碼指令253成為第二微指令246,其中第二微指令246可由微處理器100的執行單元212所執行,流程結束于步驟714。圖8顯示一實施例中非核只讀存儲器108為28位寬并維持壓縮的微程序碼字組,核微程序碼只讀存儲器104為28位寬并維持壓縮微程序碼字組,以及非核微程序碼修補隨機存取存儲器114為38位寬并維持非壓縮微程序碼字組。在另一實施例中,非核只讀存儲器108為38位寬并維持未壓縮的微程序碼字組而非壓縮的微程序碼字組,如圖9、11、13所示,在此情況下三端輸入多工器392可于一輸入端接收來自非核只讀存儲器108的38位微程序碼字組。在另一實施例,核微程序碼只讀存儲器104為38位寬并維持非壓縮微程序碼字組而非壓縮的微程序碼字組,如圖10所示,其中三端輸入多工器392可于一輸入端接收來自核微程序碼只讀存儲器104的38位的微程序碼字組。在另一實施例中,非核微程序碼修補隨機存取存儲器114為28位寬并維持壓縮微程序碼字組而不是非壓縮程序碼字組,如圖9所示,在此情況下來自非核微程序碼修補隨機存取存儲器114的28位微程序碼字組可提供至第一多工器222的一輸入端,并選擇以供應給三端輸入多工器392、解壓縮器394、控制邏輯396以及緩沖器398。再者,根據本發明的另一實施例,每一處理核102包括核修補隨機存取存儲器1299,核修補隨機存取存儲器1299的功能與非核微程序碼修補隨機存取存儲器114,除了核修補隨機存取存儲器1299并非共用于多個處理核102而是各自對應至相對的處理核102,如圖12、13所示。在圖12的實施例中,核修補隨機存取存儲器1299為38位寬并維持未壓縮微程序字組,在此情況下三端輸入多工器392可于一輸入端接收來自核修補隨機存取存儲器1299的38位微程序碼字組。在圖13的實施例中,核修補隨機存取存儲器1299為28位寬并維持壓縮微程序碼字組,在此情況下第一多工器222可在一輸入端接收來自核修補隨機存取存儲器1299的28位微程序碼字組。如上所述,在每一實施例中微程序碼存儲器為28位寬并維持壓縮微程序碼字組,微程序碼存儲器也可包括多字組未壓縮二進制指令424,多字組未壓縮二進制指令424可分為兩個28位的字組。在此所述的選擇性壓縮微程序碼的性能的另一個優點,就是作為儲存微程序碼于微處理器的可程序非易失存儲器越來越成為商業上可行的方式,微程序碼可一直被開發直到微處理器100的零件的微程序碼存儲器的時間可被編程為止。再者,若零件/存儲器可在現場被編程的,例如由使用者或現場技術人員,則使用者或技術人員還可在現場重新編程零件以修復錯誤。在任一情況中,新的來源微程序碼502可能必須包括逃離指針,因為硬件的解壓縮器394于該時間點被修復。盡管所述的多個實施例中微程序碼字組以及存儲器皆被指定寬度,其中以范例敘述的三個實施例,其他實施例中的微程序碼字組以及存儲器可為不同寬度。再者,盡管在此所述的實施例中,壓縮微程序碼指令的寬度為特定寬度,并且未壓縮微程序碼指令的寬度為特定寬度,而這些實施例以范例的方式敘述,而其他實施例中各自的壓縮以及非壓縮微程序碼指令可具有不同寬度。再者,盡管在此所述的多個實施例中使用選擇性壓縮微程序碼指令于多核處理器,其他實施例包括單一微處理器,其中單一微處理器用以選擇性壓縮微程序碼并包括具有壓縮微程序碼指令的微程序碼存儲器,而微程序碼存儲器具有未壓縮微程序碼指令亦可運用本發明而得以實施。最后,盡管在此所述的實施例在未壓縮二進制表示式以及壓縮二進制表示式之間具有特定對應關系,其他具有不同的對應關系的實施例則可能需要不同的微程序碼指令集。特別的是,位的數目則多少與解壓縮硬件可接受的延遲范圍的需求有關。當在此描述本發明的許多實施例,要知道這些實施例僅以范例的方式呈現而非限定于此。計算機相關領域技術人員皆了解,各種型式以及細節上的變形能夠在不背離本發明的范圍的情況下產生。舉例來說,軟件能夠致能功能、制造、模擬、擬真、描述及/或測試在此所述的裝置以及方法。這可經由使用一般的程序語言(例如:C、C++)、包括VerilogHDL、VHDL等等的硬件描述語言(hardwaredescriptionlanguages,HDL)、或其他可得的程序語言。該軟件可放置于任何已知的計算機可讀介質,例如磁帶(magnetictape)、半導體、磁盤(magneticdisk)、或光盤(opticaldisc)(例如:CD-ROM、DVD-ROM等等),或是網絡、有線、無線或其他通訊介質。在此描述的裝置以及方法的實施例可包含于半導體智慧財產權核中,例如微處理器處理核(如體現或指定于硬件描述語言)以及轉換制集成電路產品的硬件。此外,在此所述的裝置以及方法可體現為硬件以及軟件的組合。因此,本發明不應限定于任何在此所述的實施例,而應僅根據權利要求書的范圍及其相似物來定義。特別的是,本發明可實現于微處理器裝置,其中微處理器裝置可用于通用計算機中。最后,該領域技術人員能夠了解,他們能夠使用揭露的概念以及特定的實施例最為基礎而設計或調整其他架構,在不背離本發明于申請專利范圍所定義的范圍的情況下實現并完成本發明的相同目的。