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