專利名稱:預解碼可變長度指令的制作方法
技術領域:
本發(fā)明大體上涉及處理器領域,且確切地說,涉及一種預解碼可變長度指令以便識別未定義指令的方法。
背景技術:
可變長度指令集架構在此項技術中是已知的。舉例來說,當將Thumb (16位)擴展添加到ARM(32位)指令集時,所得的混合可視為可變長度指令集。作為另一實例,可執(zhí)行 Java代碼包括一系列字節(jié)碼,其中每個指令的長度的范圍在2與256字節(jié)之間。一般來說, 可變長度指令集包括具有基礎尺寸的指令以及整數倍的基礎尺寸的較長指令。處理器架構及指令集隨著時間而進化。確切地說,隨著半導體技術的進步,可在硬件中呈現原來需要擴展性軟件例行程序來實現的功能性。為了有效地利用高級硬件結構, 將新指令添加到指令集。然而,穩(wěn)定的處理器架構的一個特征是向后兼容性。也就是說,針對一個處理器架構編寫的軟件應當可在符合所述架構的較老式的處理器上執(zhí)行,即使所述較老式的處理器并未實施最近的功能性或直接執(zhí)行最近的指令。因此,常見的處理器架構包含產生異常的“未定義”指令,且在軟件中執(zhí)行與未定義的指令相關聯的功能。用來優(yōu)化指令解碼的常規(guī)高性能處理器的一種常見方法是預解碼。預解碼器是在于指令高速緩沖存儲器(I-cache)中存儲指令之前檢查并部分地解碼從存儲器獲取的指令的邏輯電路。預解碼器產生少數預解碼位,所述預解碼位與每個指令一起存儲在I-cache 中。一旦從高速緩沖存儲器獲取指令,管線解碼器便可利用預解碼位來簡化指令解碼任務。 預解碼位可例如識別分支指令、識別可變長度指令架構中的指令的長度等。預解碼位也可用來識別未定義的指令。在實施預解碼的可變長度指令集處理器中,少數預解碼器位可與最短或基礎指令長度相關聯。已知的指令高速緩沖存儲器實施方案是使此數目的預解碼位與每個I-cache 存儲位置(其每一者對應于基礎指令長度)相關聯。占據整數倍的I-cache存儲位置的較長指令與較大數目的預解碼位對應地相關聯。因此,可編碼成與指令相關聯的預解碼位的離散性質的數目是基礎指令長度的最小值。如果以其它方式定義對基礎指令長度的可用預解碼位編碼,則利用預解碼位來識別未定義的基礎長度指令將需要增加與基礎指令長度相關聯的預解碼位的數目。此技術又將增加與每個存儲位置一起存儲在I-cache中的預解碼位的數目。由于很少遇到未定義的指令,且比基礎長度長的指令具有充裕的預解碼位編碼空間,所以添加預解碼位以識別未定義的基礎長度指令可浪費昂貴的I-cache存儲空間。
發(fā)明內容
根據本文所描述的一個或一個以上實施例,預解碼器可在與指令長度相關聯的預解碼位編碼空間完全定義時指示指令的性質。通過更改指令以模擬不同長度的指令,預解碼器可利用與不同長度指令相關聯的預解碼位的可用編碼來指示性質。一個實施例涉及一種在處理器中預解碼指令的方法。識別第一指令的性質。更改第一指令以模擬第二指令。產生用于第二指令的識別第一指令的性質的預解碼位。另一實施例涉及一種經操作以從存儲器中讀取指令的處理器。所述處理器包含存儲從存儲器中讀取的指令以及與每個指令相關聯的預解碼位的指令高速緩沖存儲器。處理器也包含介于存儲器與指令高速緩沖存儲器之間的預解碼器,所述預解碼器經操作以識別第一指令的性質;更改第一指令以模擬第二指令;產生用于第二指令的識別第一指令的性質的預解碼位;并將用于第二指令的預解碼位寫入到指令高速緩沖存儲器。
圖I是處理器的功能方框圖。圖2是描繪將可變長度指令從存儲器映射到指令高速緩沖存儲器的功能方框圖。圖3是描繪將未定義指令從存儲器映射到指令高速緩沖存儲器的功能方框圖。圖4描繪根據一個實施例的預解碼指令的方法。
具體實施例方式圖I是處理器10的功能方框圖。處理器10根據控制邏輯14在指令執(zhí)行管線12中執(zhí)行指令。管線12可以是超標量設計,具有多個并行管線,如12a和12b。每個管線12a、12b 包含組織成管級的各種寄存器或鎖存器16,以及一個或一個以上算術邏輯單元(ALU) 18。 管級寄存器或鎖存器16及ALU 18可從通用寄存器堆28中的寄存器讀取運算數,且/或將結果寫入到所述寄存器。管線12a、12b從指令高速緩沖存儲器(Ι-Ccache或1$)20獲取指令,其中由指令側翻譯旁視緩沖器(ITLB) 22管理存儲器尋址和準許。從數據高速緩沖存儲器(D-Cache或 D$) 24存取數據,其中由主翻譯旁視緩沖器(TLB) 26管理存儲器尋址和準許。在各種實施例中,ITLB 22可包括TLB 26的一部分的副本?;蛘撸琁TLB 22和TLB 26可經整合。類似地, 在處理器10的各種實施例中,I-cache 20和D_cache 24可經整合或合并。I-cache 20和 /或D-cache 24中的未命中導致在存儲器接口 34的控制下存取主(芯片外)存儲器36。從存儲器獲取的指令在存儲在I-Cache 20中之前在預解碼器電路37中經處理。預解碼器37部分地解碼指令,并附加預解碼位,所述預解碼位與指令一起存儲在 I-Cache20中。當從I-Cache 20獲取指令時,預解碼位提供關于每個指令的信息,管線12a 和12b內的解碼管級可使用所述信息來更快速且/或更有效地解碼指令。舉例來說,預解碼位可識別可變長度指令集架構中的指令的長度、識別分支指令等。處理器10可包含輸入/輸出(I/O)接口 38,其控制對各種外圍裝置40、42的存取。所屬領域的技術人員將認識到,處理器10的多種變化形式是可能的。舉例來說,處理器10可包含用于I高速緩沖存儲器和D高速緩沖存儲器中的任一者或兩者的二級(L2)高速緩沖存儲器。此外,可從特定實施例中省略在處理器10中描繪的功能塊中的一者或一者以上。圖2是描繪用于一個說明性的且非限制性的實施方案的通過預解碼器37將指令從存儲器36映射到I-cache 20中的線的功能方框圖。指令A是16位指令(對于此實例是基礎指令長度)。一旦從存儲器獲取指令A,預解碼器37便附加兩個預解碼位PA,將所述預解碼位與指令A —起存儲在I-cache 20中。指令B是32位指令,其在存儲器36中存儲為B。和B”預解碼器37附加四個預解碼位,其在I-cache 20中存儲為Pbq和PB1。指令C 是16位指令,且與兩個預解碼位P。一起存儲在I-cache 20中。如圖2的表所指不,每一者具有兩個預解碼位的指令A和C具有四的預解碼位編碼空間。也就是說,可將四個離散性質-例如指令長度、指令是否為分支等-編碼成用于指令A和C的預解碼位。具有四個預解碼位的指令B具有16的預解碼位編碼空間。如果架構支持,則48位指令將具有六個預解碼位以用于64的編碼空間,依此類推。假設在給定實施方案中定義了用于如A和C的16位指令的全部四個預解碼位編碼,則可將額外的預解碼位添加到I-cache 20中的每個16位存儲位置,以利用預解碼位來指示未定義的16位指令。這將導致I-cache 20中的每個存儲位置具有三個相關聯的預解碼位。16位指令接著將具有八的預解碼編碼空間-只將利用其中的五個。另外,32位指令將具有64的預解碼編碼空間;48位指令將具有512的預解碼編碼空間。由于這遠遠超過了關于預解碼器可指示的指令的離散性質的數目,從而增加用于16位指令長度的預解碼位的數目導致大量浪費昂貴的I-cache 20存儲空間。根據一個實施例,可更改此實例中的未定義的16位指令以模擬32位指令。將所述指令實際上是16位的未定義指令的性質編碼成與32位指令相關聯的16預解碼編碼中的一者。在圖3中,指令D是16位未定義指令。一旦將指令D寫入到I-cache 20,便將其更改以模擬32位指令,包括Dtl和D115寫入預解碼位Pdci和PD1,從而指示指令D實際上是16 位的未定義指令。在一個實施例中,其中管線12只需要16位未定義指令的事實,預解碼器37可只將預解碼位Pdci和Pdi寫入到I-cache 20,放棄指令D。在另一實施例中,例如其中指令的位字段內的數據對于引導軟件陷阱是常見或有幫助的,可將指令D寫入到Dtl或D1或這兩者, 以及將預解碼位Pm和Pdi寫入到I-cache 20。在又一實施例中,預解碼器37可將指令D寫入到Dtl或D1中的一者,且可將額外的信息寫入到另一 16位I-cache 20存儲位置,以及寫入預解碼位Pdci和Pdi。在任何情況下,正是預解碼位Pdci和Pdi兩者在模擬32位指令(使得讀取所有預解碼位)并指示指令實際上是16位未定義指令。以此方式,預解碼器37可指示基礎尺寸的未定義指令,而不擴展與基礎尺寸指令相關聯的預解碼位,因此避免了低效的存儲器利用。在圖3描繪的實施例中,指令E及F均未經預解碼或加載到I-cache 20中。由于線中的指令的有效長度已在存儲器36與I-cache 20之間更改,所以高速緩沖存儲器線的其余部分無法含有對應存儲器空間中的所有剩余指令(例如,E與F兩者)。預解碼器37 可將高速緩沖存儲器線的其余部分標記成未使用或無效,或者可簡單地在適當的位位置中插入無效或未定義的預解碼位。在正常執(zhí)行中,處理器將在執(zhí)行未定義指令后便陷入到軟件,且將很可能更換高速緩沖存儲器線。利用軟件異常處置程序來處置未定義指令所引起的陷阱允許軟件模擬在處理器(例如處理器10)固定在硅或其它半導體材料中時未曾預期
5的指令。如果其它代碼恰好分支到高速緩沖存儲器線中,則其將遇到不正確的預解碼且/ 或不認識既定指令,從而引起高速緩沖存儲器線重新加載或可能引起異常。由于假設很少遇到未定義指令,所以因更改的未定義指令模擬不同長度的指令而對受破壞的I-cache線引起的性能影響不是太大的問題。本文所揭示的方法不限于上述具有基礎指令長度的未定義指令。一般來說,對于一般可經由預解碼位來指示但其中完全定義了用于相關聯的指令長度的預解碼位編碼空間的任何指令性質,可通過更改指令以模擬不同長度的指令并利用對不同長度指令的可用預解碼位編碼來指示所述性質。舉例來說,假設先前實例中與32位指令相關聯的四個預解碼位的全部16個編碼均被定義,但只定義了與16位指令相關聯的兩個預解碼位的四個編碼中的三個或更少的編碼。在此情況下,可通過以下方式來指示在32位指令預解碼位中未定義的32位指令的特定性質更改32位指令以模擬16位指令,并在與16位指令相關聯的兩個預解碼位的可用預解碼位編碼中編碼相關性質。在此情況下,丟掉32位指令位字段中的一半,因此正被編碼的性質優(yōu)選是與指令位字段無關的性質(例如指令未被定義的事實,但這并不是可如此指示的唯一性質)。圖4描繪根據一個實施例對指令進行預解碼的方法。一旦在I-cache 20中未命中,存儲器接口 34便從存儲器36獲取至少第一指令(方框50)。預解碼器37檢查第一指令,并識別第一指令的性質(方框52),例如第一指令未經定義。預解碼器37更改第一指令以模擬第二指令(方框54),例如不同長度的第二指令。預解碼器37另外產生用于第二指令的識別第一指令的性質的預解碼位(方框56)。也就是說,將與第二指令長度相關聯的預解碼位的可用編碼中的一者分配給第一指令的相關性質。預解碼器37將第二指令及相關聯的預解碼位寫入到I-cache 20 (方框58)。當管線12從I-cache 20獲取第二指令及其預解碼位時,解碼管級中的邏輯檢查預解碼位以識別第一指令的性質(方框60),例如第一指令未經定義的事實。管線12接著采取適當行動,例如引起異常以在軟件中處置未定義指令。根據本文所描述的一個或一個以上實施例,預解碼器37可在與指令長度相關聯的預解碼位編碼空間被完全定義時指示所述指令的性質。通過更改指令以模擬不同長度的指令,預解碼器37可利用與不同長度指令相關聯的預解碼位的可用編碼來指示性質。當在較長指令的預解碼位編碼中指示較短指令的性質時,將從I-cache線中轉移一個或一個以上指令或一指令的多個部分。當在較短指令的預解碼位編碼中指示較長指令的性質時,丟掉一些指令位字段。因此,一般采用本文所揭示的指令性質指示技術來指示引起異常的指令性質,例如指令未經定義的事實,但并不限于此些情況。雖然已在本文中相對于本發(fā)明的特定特征、方面和實施例描述了本發(fā)明,但將明白,在本發(fā)明的廣泛范圍內可能有許多更改、修改和其它實施例,且因此將所有更改、修改和實施例視為屬于本發(fā)明的范圍。因此,應在所有方面將當前實施例理解為說明性而非限制性,且希望其中包含屬于所附權利要求書的意義和等效范圍內的所有變化。
權利要求
1.一種在處理器中執(zhí)行指令的方法,其包括從高速緩沖存儲器獲取具有第一格式的第一指令,所述第一格式包括第一指令部分和第一組預解碼位;將所述獲取的第一指令識別為具有第二指令的性質,所述第二指令的格式的長度不同于所述第一格式的長度,所述第二指令的性質由所述第一組預解碼位識別;以及基于所述第二指令的性質執(zhí)行所述獲取的第一指令,其中所述第一指令是所述第二指令的編碼;其中,具有所述第一格式的所述第一指令在獲取后進行執(zhí)行時將產生異常;以及其中,所述第二指令是未定義指令。
全文摘要
本發(fā)明涉及預解碼可變長度指令。可變指令長度處理器中的預解碼器指示與指令一起存儲在指令高速緩沖存儲器中的預解碼位中的指令的性質。當定義了與一個長度指令相關聯的預解碼位的所有編碼時,可通過以下方式來指示所述長度的指令的性質更改所述指令以模擬不同長度的指令;以及在與所述不同長度的指令相關聯的所述預解碼位中編碼所述性質??扇绱酥甘镜男再|的一個實例是未定義指令。
文檔編號G06F9/318GK102591620SQ201110378670
公開日2012年7月18日 申請日期2007年4月20日 優(yōu)先權日2006年5月4日
發(fā)明者布賴恩·邁克爾·斯坦普爾, 羅德尼·韋恩·史密斯 申請人:高通股份有限公司