專利名稱:具有緊湊指令集架構(gòu)的微處理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實施例通常涉及微處理器。更具體地,本發(fā)明的實施例涉及微處理器的 指令集架構(gòu)。
背景技術(shù):
存在對經(jīng)濟的、高性能的微處理器的擴大的需要,特別是對于諸如微控制器應(yīng)用 的深嵌入式應(yīng)用。結(jié)果,微處理器的客戶需要能夠快速地和有效地集成到產(chǎn)品中的高效的 解決方案。此外,設(shè)計人員和微處理器的客戶持續(xù)要求更低的功耗,并且近來關(guān)注于環(huán)境友 好的微處理器支持的裝置。一種用于實現(xiàn)這些要求的方法是將現(xiàn)有的指令集(在這里也稱為指令集架構(gòu) (ISA))修改為具有較小的“代碼足印”(code footprint)的新指令集。較小的代碼足印通 常轉(zhuǎn)換為每個執(zhí)行的任務(wù)的較低的功耗。較小的指令大小還可以導(dǎo)致更高的性能。關(guān)于該 提高的效率的一個原因在于用于取出較小的指令的需要較低數(shù)量的存儲器訪問。通過使新 ISA基于從具有較大位寬的ISA得到的較小位寬的指令和較大位寬的指令的組合,可以得 到另外的益處。
發(fā)明內(nèi)容
本發(fā)明的實施例涉及對將與微處理器一同使用的指令集架構(gòu)重新編碼,以及由此 得到的新指令。根據(jù)一實施例,較大位寬的指令集被重新編碼為較小位寬的指令集或者具 有較小位寬的指令和較大位寬的指令的組合的指令集。在實施例中,較小位寬的指令集保 持與從中得到該較小位寬的指令集的較大位寬的指令集的匯編級兼容性,并且添加具有不 同類型的指令。此外,新的較小位寬的指令集或者組合的較小和較大位寬的指令集較之從 其重新編碼得到該較小位寬的指令集的較大位寬的指令集,可以是更高效的并且具有更高 的性能。在一實施例中,若干個新的較小位寬的指令被添加到該新指令集,包括緊湊的等 于零情況下的分支(Compact Branch on Equal to Zero,BEQZC)、緊湊的不等于零情況下的 分支(Compact Branch on not Equal to Zero, BNEZC)、6 兆轉(zhuǎn)禾口鏈接交換(Jump and Link Exchange,JALX)、緊湊的跳轉(zhuǎn)寄存器(Compact Jump Register,JRC)、加載寄存器對(Load Register Pair, LRP)、加載多個字(Load Word Multiple, LWM)、存儲寄存器對(Store Register Pair, SRP)和存儲多個字(Store Word Multiple, SWM)。
參照附圖描述本發(fā)明的實施例。在附圖中,相同的附圖標記可以表示相同的或者 功能相似的元件。其中元件首次出現(xiàn)的附圖通常由相應(yīng)的附圖標記中的最左側(cè)的數(shù)位表示。圖1是根據(jù)本發(fā)明的實施例的ISA的32位指令的格式的示意圖。圖2是根據(jù)本發(fā)明的實施例的ISA的16位指令的格式的示意圖。圖3A是圖示根據(jù)本發(fā)明的實施例的緊湊的等于零情況下的分支(BEQZC)指令的 格式的示意圖。圖;3B是圖示根據(jù)本發(fā)明的實施例的微處理器中的BEQZC指令的操作的流程圖。圖3C是圖示根據(jù)本發(fā)明的實施例的緊湊的不等于零情況下的分支(BNEZC)指令 的格式的示意圖。圖3D是圖示根據(jù)本發(fā)明的實施例的微處理器中的BNEZC指令的操作的流程圖。圖3E是示出根據(jù)本發(fā)明的實施例的跳轉(zhuǎn)和鏈接交換(JALX)指令的格式的示意 圖。圖3F是圖示根據(jù)本發(fā)明的實施例的微處理器中的JALX指令的操作的流程圖。圖3G是示出JALX指令的第二實施例的格式的示意圖。圖;3H是圖示根據(jù)第二實施例的JALX指令的操作的流程圖。圖31是示出根據(jù)本發(fā)明的實施例的緊湊的跳轉(zhuǎn)寄存器(JRC)指令的格式的示意 圖。圖3J是圖示根據(jù)一實施例的微處理器中的JRC指令的操作的流程圖。圖3K是示出根據(jù)本發(fā)明的實施例的加載寄存器對(LRP)指令的格式的示意圖。圖3L是圖示根據(jù)實施例的LRP指令的操作的流程圖。在步驟430中,獲得了寄存 器(rt)、寄存器(base)和偏移(offset)。圖3M是示出根據(jù)本發(fā)明的實施例的加載多個字(LWM)指令的格式的示意圖。圖3N是圖示根據(jù)實施例的微處理器中的LWM指令的操作的流程圖。圖30是示出根據(jù)本發(fā)明的實施例的存儲寄存器對(SRP)指令的格式的示意圖。圖3P是圖示根據(jù)一實施例的SRP指令的操作的流程圖。圖3Q是示出根據(jù)本發(fā)明的實施例的存儲多個字(SWM)指令的格式的示意圖。圖3R是圖示根據(jù)一實施例的SWM指令的操作的流程圖。圖4是根據(jù)本發(fā)明的實施例的處理器核的示意圖。
具體實施例方式盡管這里參照關(guān)于特定應(yīng)用的說明性實施例描述了本發(fā)明,但是應(yīng)當理解,本發(fā) 明不限于此。本領(lǐng)域技術(shù)人員根據(jù)這里提供的教導(dǎo)將認識到本發(fā)明的范圍中的另外的修 改、應(yīng)用和實施例以及其中本發(fā)明將具有顯著效用的另外的領(lǐng)域。以下章節(jié)描述了根據(jù)本 發(fā)明的實施例的指令集架構(gòu)。I.概述II.重新編碼的架構(gòu)a.匯編級兼容性
b.特殊事件ISA模式選擇III.新類型的指令a.重新編碼的分支和跳轉(zhuǎn)指令b.基于統(tǒng)計分析的編碼的字段c.延遲時隙(Delay Slots)IV.指令格式a.原理(principle)操作碼組織b.主操作碼V.重新編碼的指令a.從32位指令重新編碼的新的16位指令b.從傳統(tǒng)(legacy) 32位指令重新編碼的新的32位指令c. 16位用戶定義指令(UDI)d. ASE 的統(tǒng)一e.新的ISA指令VI.示例性處理器核VII.結(jié)論I.概述這里描述的實施例涉及包括將在微處理器上執(zhí)行的指令的ISA和能夠在其上執(zhí) 行ISA的指令的微處理器。這里描述的一些實施例涉及從將較大位寬的ISA重新編碼為 組合的較小和較大位寬的ISA得到的ISA。在一個實施例中,較大位寬的ISA是可獲得自 Mountain View, California的MIPS,INC.的MIPS32,重新編碼的較小位寬的ISA是也可獲 得自MIPS,INC.的MicroMIPS 16位指令集,并且重新編碼的較大位寬的ISA是也可獲得自 MIPS, INC.的 MicroMIPS 32 位指令集。在另一實施例中,較大位寬的架構(gòu)可以被重新編碼為具有相同位寬的改進的架構(gòu) 或者相同位寬的指令和較小位寬的指令的組合。在一個實施例中,重新編碼的較大位寬的 指令集按如下方式被編碼為相同大小位寬的ISA 與具有這里討論的類型的重新編碼的較 小位寬的指令集兼容和互補。重新編碼的較大位寬的指令集的實施例可以被稱為“增強 的”,并且可以包含下文所討論的允許新指令集以并行模式實現(xiàn)的各種特征,其中在處理器 上均可以利用這兩個指令集。這里描述的重新編碼的指令集還以獨立模式工作,其中每次 僅有一個指令集是有效的。II.重新編碼的架構(gòu)a.匯編級兼容性這里描述的實施例在從較大位寬的ISA重新編碼到較小位寬的ISA或者組合位寬 的ISA之后保持匯編級兼容性。為了實現(xiàn)此,在一個實施例中,重新編碼后的匯編語言指令 集易記碼(mnemonics)與其所得自的指令相同。維持匯編級兼容性允許通過使用較小位寬 的ISA的匯編源代碼對使用較大位寬的ISA的指令集匯編源代碼進行編譯。換言之,以本 發(fā)明的新ISA實施例為目標的匯編器也能夠?qū)钠涞玫奖景l(fā)明的實施例的傳統(tǒng)ISA進行匯 在一實施例中,匯編器確定使用哪個ISA處理特定的指令。例如,為了區(qū)分不同位寬的ISA的指令,在一實施例中,利用對應(yīng)于不同大小的后綴對操作碼易記碼進行擴展。例 如,在一個實施例中,將后綴“16”或“32”置于指令的末端處在第一個“.”(如果存在一個 的話)之前,以區(qū)別16位和32位的編碼的指令。例如,在一個實施例中,“ADD16”指的是 ADD指令的16位版本,而“ADD32”指的是ADD指令的32位版本。如本領(lǐng)域的技術(shù)人員將知 曉的,可以使用其他后綴。其他實施例不使用指令大小的后綴指定。在這些實施例中,可以省略位寬后綴。在 一實施例中,匯編器將查看命令的寄存器和立即數(shù)字段中的值,并且判定較大還是較小位 寬的命令是適當?shù)摹HQ于匯編器的設(shè)置,在處理特定指令時匯編器可以自動地選擇最小 的可用指令大小。b.特殊事件ISA模式選擇在另一實施例中,在如下環(huán)境之一中發(fā)生ISA選擇異常、中斷和通電事件。在 該實施例中,正在處置特殊事件的處置器指定ISA。例如,對于通電,通電處置器可以指定 ISA。同樣地,中斷或異常處置器可以指定ISA。III.新類型的指令下面描述具有新ISA指令的實施例,以及具有重新編碼的指令的實施例。使用了 若干個一般原理來開發(fā)這些指令,并且下面對這些進行了解釋。a.重新編碼的分支和跳轉(zhuǎn)指令在一個實施例中,重新編碼的較小位寬的ISA支持較小的分支目標地址,提供了 增強的靈活性。例如,在一個實施例中,被重新編碼為16位分支指令的32位分支指令支持 16位對齊的分支目標地址。在另一示例中,由于32位的重新編碼的分支指令的偏移字段大小保持與傳統(tǒng)的 32位的重新編碼的指令相同,因此分支范圍可以較小。在另外的實施例中,跳轉(zhuǎn)指令J、JAL 和JALX通過支持32位對齊的目標地址來支持整個跳轉(zhuǎn)范圍。b.基于統(tǒng)計分析的編碼的字段如這里使用的術(shù)語“立即數(shù)字段”在本領(lǐng)域中是公知的。在實施例中,立即數(shù)字段 可以包括分支的地址偏移字段、加載/存儲指令、和目標字段。在實施例中,指令編碼中的 立即數(shù)字段寬度和位置取決于指令。在一實施例中,指令的立即數(shù)字段被分為若干個字段, 其不需要是相鄰的。在一實施例中,針對ISA指令和宏使用特定的寄存器和立即數(shù)值可以傳達比其他 值更高級別的性能。這里描述的多個實施例使用該原理來增強指令的性能。例如,為了實 現(xiàn)該性能,在一個實施例中,執(zhí)行ISA的使用時段上的寄存器和立即數(shù)字段中使用的值的 統(tǒng)計頻率的分析?;谠摲治?,實施例對值進行編碼以將最高性能的寄存器和立即數(shù)值鏈 接到如通過上文的統(tǒng)計分析確定的最常使用的值,而不是使用未修改的寄存器或者立即數(shù) 值。為了協(xié)助如這里描述的ISA的重新編碼,由于可以從編碼中省略某些較不常見的 值,因此上文的編碼方法還可以允許減少寄存器和立即數(shù)字段的所需要的大小。例如,編 碼的寄存器和立即數(shù)值可以被編碼為比原始值短的位寬,例如“ 1001 ”可以被編碼為“ 10”。 在將較大位寬的指令集重新編碼為較小位寬的ISA時,可以從新表中省略較不頻繁使用的值。
c.延遲時隙在流水線架構(gòu)中,延遲時隙由在不影響前一指令的情況下執(zhí)行的指令填充,例如 位置緊接分支指令之后的單個指令。即使前一分支被采用,延遲時隙指令仍將執(zhí)行。延遲 時隙可以提高效率,但是并非對所有應(yīng)用都是高效的。例如,對于某些應(yīng)用(例如,高性能 應(yīng)用),不使用延遲時隙對使得到的代碼較小的影響很小(如果存在的話)。有時,嘗試填 充延遲時隙的編譯器不能找到有用的指令。在這些情況中,無操作(NOP)指令被置于延遲 時隙中,其可以添加到程序的足印并且降低性能效率。這里描述的實施例為開發(fā)人員提供了何時使用延遲時隙的選擇。通過該選擇,開 發(fā)人員可以選擇如何最佳地使用延遲時隙以便使所期望的結(jié)果最大化,例如代碼大小、性 能效率和開發(fā)的容易度。在一實施例中,這里描述的某些指令具有兩種版本,示例性指令是 分支的跳轉(zhuǎn)指令。這些指令具有帶延遲時隙的一個版本和不帶延遲時隙的一個版本。在一 實施例中,在對指令編碼時,由軟件來選擇使用哪個版本。在另一實施例中,由開發(fā)人員來 選擇使用哪個版本(如關(guān)于上文描述的ADD16或ADD32的選擇)。在又一實施例中,由匯編 器自動地選擇使用哪個版本(如上文所述)。這些實施例中的該特征也可以有助于維持與 傳統(tǒng)硬件處理器的兼容性。在另一實施例中,延遲時隙的大小是固定的。這里的實施例牽涉具有兩種指令大 小(例如,16位和32位)的指令集。固定寬度的延遲時隙允許設(shè)計人員定義延遲時隙指 令,使得該大小將總是為某一大小,例如較大位寬的時隙或者較短位寬的時隙。該延遲時隙 選擇允許設(shè)計人員廣泛地追求不同的開發(fā)目標。為了使代碼足印最小,可以選擇均勻地較 小位寬的延遲時隙。然而,這可能導(dǎo)致較高的不能填充較小的時隙的可能性。相反,為了使 延遲時隙的潛在的性能益處最大化,可以選擇較大位寬的時隙。然而,該選擇可能增加代碼 足印。在一實施例中,在對指令編碼時,設(shè)計人員可以將延遲時隙寬度選擇為較大位寬 或較小位寬。這與這里描述的允許手動選擇指令位寬(ADD16或ADD32)的實施例相似。如 關(guān)于上文所述的固定位寬的選擇,該延遲時隙選擇允許設(shè)計人員追求不同的開發(fā)目標。然 而,通過該方法,可以針對每個命令而非系統(tǒng)整體進行位寬選擇。如本領(lǐng)域的技術(shù)人員將意識到的,上文所述的關(guān)于延遲時隙的方法可以應(yīng)用于能 夠使用延遲時隙的任何指令。IV.指令格式在一實施例中,新ISA包括具有至少兩種不同位寬的指令。例如,根據(jù)一實施例的 ISA包括具有16位和32位寬度的指令。盡管這里描述的新ISA的實施例描述了按互補方 式操作的兩個指令集,但是這里的教導(dǎo)將應(yīng)用于任何數(shù)目的ISA指令集。在一實施例中,指令具有操作碼,其包括主操作碼并且在一些情況下包括次操作 碼。主操作碼具有固定寬度,而次操作碼具有取決于指令的寬度,包括足夠大到訪問整個寄 存器組的寬度。例如,在一個實施例中,MOVE指令具有5位的次操作碼,并且可以到達整個 寄存器組。例如,在一個實施例中,編碼包括16位和32位寬的指令,它們均具有在指令編 碼中右對齊的6位主操作碼,在其之后是可變寬度的次操作碼。對于較大位寬和較小位寬的指令集,主操作碼是相同的。例如,在一個實施例中, 編碼包括16位和32位寬的指令,它們均具有在指令編碼中右對齊的6位主操作碼,在其之后是可變寬度的次操作碼。a.原理操作碼組織圖1是根據(jù)一實施例的32位的重新編碼的指令的格式110的示意圖。指令格式 110的實施例可以具有零、一個、或更多個左對齊寄存器字段120,在其之后是可選的立即 數(shù)字段130。在一個實施例中,32位的重新編碼的指令具有5位寬的寄存器字段120。其 他可選的指令專用字段140可以位于立即數(shù)字段130和操作碼字段之間。在示例性實施例 中,指令可以具有0至4個左對齊的寄存器字段120,在其之后是可選的立即數(shù)字段130。其 他可選的指令專用字段140位于立即數(shù)字段130和操作碼字段150或160之間。如上文所 述,操作碼字段包括主操作碼160并且在一些情況下包括次操作碼150。圖2是根據(jù)一實施例的16位指令200的格式210的示意圖。指令格式210的實 施例可以具有零、一個、或更多個寄存器字段220。在一個實施例中,16位指令使用3位寄 存器220,并且使用指令專用的寄存器編碼。指令專用的寄存器編碼涉及關(guān)于特定指令的從 寄存器空間的特定部分到16位指令中的3位寄存器的映射。在一實施例中,16位指令可以使用較大位寬的寄存器220,包括足夠大到訪問整 個寄存器組的寬度。例如,在一個實施例中,16位MOVE指令具有若干5位寄存器字段。使 用5位寄存器字段允許16位MOVE指令訪問具有32個寄存器的寄存器組中的任何寄存器。 在一實施例中,16位指令可以進一步包括一個或更多個立即數(shù)字段230。其他可選的指令 專用字段240可以位于操作碼260或250的左側(cè)。在示例性實施例中,16位指令可以具有 0至1個左對齊的寄存器字段220。操作碼字段包括主操作碼沈0,并且在一些情況中次操 作碼250呈現(xiàn)在任何其他字段240右側(cè)。b.主操作碼表1提供了根據(jù)一實施例的用于ISA的指令格式的列表。如從表1可見,示例性 ISA中的指令具有16或32位。表1中呈現(xiàn)的指令格式的命名法基于用于該指令格式的寄 存器字段的數(shù)目和立即數(shù)字段的大小。就是說,指令名稱具有格式R<x>I<y>。其中<x>是 指令格式中的寄存器的數(shù)目,而<y>是立即數(shù)字段的大小。例如,基于格式R2I16的指令具 有兩個寄存器字段和16位立即數(shù)字段。32位 指令格式 (現(xiàn)有指令 )32位指令格式 (用于新指令 的另外的格式 )16位 指令格式ROIOR2M2S3R0I0RQI8S3R0I1QRO116SSRIIORQ126S3R1I7RIWS3R2I0R112S3R2I3R1I7S3R2I4RmS3R3I0R.1I10S5R1IOR1I16S5R2I0R2I0R2I2R2I3R2I4R2I5R2I10R2I16R3IOR3I3R4I0表1 指令集格式V.重新編碼的指令在一實施例中,根據(jù)實施例,新指令作為ISA的一部分被添加到重新編碼的傳統(tǒng) 指令。這些新指令被設(shè)計用于減小代碼大小。表2至5說明了根據(jù)一實施例的ISA的重新 編碼的指令的格式。表2和3提供了根據(jù)一實施例被重新編碼為ISA中的16位指令的傳 統(tǒng)ISA的32位指令的指令格式。在一實施例中,將哪些傳統(tǒng)32位ISA指令重新編碼為16 位新ISA指令的選擇是基于用于確定較頻繁使用的指令的傳統(tǒng)代碼的統(tǒng)計分析的。表2和 3中提供了這些指令的示例性集合。表3提供了上文所述的指令專用的寄存器編碼或者立 即數(shù)字段大小編碼的示例。表4提供了根據(jù)一實施例的從傳統(tǒng)ISA中的32位指令重新編 碼的新ISA中的32位指令的指令格式。表5提供了根據(jù)一實施例的32位用戶定義指令 (UDI)的指令格式。表2至5按照從最高有效位開始的順序提供了根據(jù)一實施例的示例性ISA重新編 碼的格式,其定義了寄存器字段、立即數(shù)字段、其他字段、空字段、次操作碼字段直到主操作 碼字段。如上文所述,大部分32位的重新編碼的指令具有5比特寬的寄存器字段。在一實 施例中,5比特寬的寄存器字段使用線性編碼(r0 =,00000', rl =,00001,等)。16位寬 度的指令可以具有不同大小的寄存器字段,例如3比特和5比特寬的寄存器字段。表2至 5中提供了根據(jù)一實施例的16位指令的寄存器字段寬度?!捌渌侄巍庇筛鱾€列定義,并且 這些字段在指令編碼中的順序由表格中的順序定義。a.從32位指令的重新編碼的新的16位指令如上文所討論的,在這里描述的實施例中,較大位寬的ISA可以被重新編碼為較 小位寬的ISA或者組合的較小和較大位寬的ISA。在一個實施例中,為了使得較大的ISA能 夠被重新編碼為較小的ISA,較小位寬的ISA指令具有較小的寄存器字段和立即數(shù)字段。在一個實施例中,如上文所述,該減小可以通過對頻繁使用的寄存器和立即數(shù)值進行編碼來 實現(xiàn)。在一個實施例中,ISA使用增強的32位指令集和較窄的重新編碼的16位指令集。 重新編碼的16位指令具有較小的寄存器字段和立即數(shù)字段,并且大小的減小是通過對頻 繁使用的寄存器和立即數(shù)值進行編碼來實現(xiàn)的。例如,在下表2中列出的針對頻繁使用的傳統(tǒng)指令的重新編碼被示出為具有與頻 繁使用的寄存器和立即數(shù)值對應(yīng)的較小的寄存器字段和立即數(shù)字段。
權(quán)利要求
1.一種處理器,包括 執(zhí)行單元多個通用寄存器,耦合到所述執(zhí)行單元;其中,如果一通用寄存器等于零,則將信號提供給所述執(zhí)行單元以將分支指令解析到 目標地址,所述目標地址與等于加到偏移的所述分支指令的存儲器地址的值對應(yīng),該偏移 已經(jīng)被移位預(yù)定的位數(shù)并且被符號擴展。
2.根據(jù)權(quán)利要求1所述的處理器,其中所述分支指令不具有延遲時隙指令。
3.一種用于在處理器上執(zhí)行緊湊的等于零情況下的分支指令的方法,所述方法包括 向所述處理器提供指示緊湊的等于零情況下的分支指令的操作碼;接收rs值和偏移值; 使所述偏移值移位預(yù)定的位數(shù); 擴展所述偏移值的符號;通過將所述偏移值加到所述指令的存儲器地址來形成目標地址; 檢查GPR地址的內(nèi)容,所述GPR地址對應(yīng)于所述rs值;以及 如果所檢查的GPR內(nèi)容等于零, 則分支到所述目標地址,而沒有延遲時隙指令。
全文摘要
一種重新編碼的指令集架構(gòu)(ISA)提供了較小位寬的指令或者較小和較大位寬的指令的組合,以提高指令執(zhí)行效率和減小代碼足印。該ISA可以從具有較大位寬的指令的傳統(tǒng)ISA重新編碼而得到,并且可以用于統(tǒng)一一個或更多個ISA擴展(諸如,應(yīng)用專用ASE)。重新編碼的ISA維持與從其得到該重新編碼的ISA的ISA的匯編級兼容性。此外,重新編碼的ISA可以具有新的和不同類型的另外的指令。
文檔編號G06F15/76GK102077195SQ200980124104
公開日2011年5月25日 申請日期2009年5月8日 優(yōu)先權(quán)日2008年5月8日
發(fā)明者E·K·諾登 申請人:Mips技術(shù)公司