專利名稱:以適當(dāng)?shù)念A(yù)解碼預(yù)載來自可變長度指令集的指令的系統(tǒng)、方法和軟件的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體上涉及處理器的領(lǐng)域,且特定來說涉及用于將來自可變長度指令集的指 令預(yù)載到指令高速緩沖存儲器中且對指令進(jìn)行正確地預(yù)解碼的系統(tǒng)、方法和軟件。
背景技術(shù):
微處理器在廣泛多種應(yīng)!1j屮執(zhí)行計算任務(wù)。幾乎總是期望改善的處理器性能,以允 許通過軟件增強lfrj獲得較快的操作和/或增加的功能性。通過利用這兩種架構(gòu)進(jìn)步(例如 RISC架構(gòu))和半導(dǎo)體技術(shù)中的進(jìn)步,許多現(xiàn)代處理器以比例如DRAM和SDRAM等存 儲器芯片高得多的時鐘速度執(zhí)行。為了最小化相對緩慢的存儲器存取的代價,這些處理 器利用分級存儲器結(jié)構(gòu),其中快速的芯片上高速緩沖存儲器存儲最近已存取和/或處理器 預(yù)期(經(jīng)由軟件)在近期存取的數(shù)據(jù)和指令的本地副本。
預(yù)期對指令高速緩沖存儲器的加載的一個實例是預(yù)載指令(例如,ARM指令PLI)。 預(yù)載指令在指令執(zhí)行之前將指令加載到指令高速緩沖存儲器中。編程人員可在到目標(biāo)的 巳知或預(yù)期分支(例如,子例程調(diào)用)的略前部將預(yù)載指令插入到代碼中。預(yù)載指令將 目標(biāo)處的指令加載到指令高速緩沖存儲器中,使得當(dāng)分支執(zhí)行時,目標(biāo)處的指令在高速 緩沖存儲器中可用以供立即執(zhí)行。
人多數(shù)現(xiàn)代處理器采用管線式架構(gòu),其中循序指令在執(zhí)行時重疊以增加總體處理器 處理量。維持通過管線的平穩(wěn)執(zhí)行對實現(xiàn)高性能是關(guān)鍵的。此項技術(shù)中已知的一種管線 優(yōu)化技術(shù)是對指令進(jìn)行預(yù)解碼。指令在從存儲器檢索時被檢查,經(jīng)部分解碼,且關(guān)于所 述指令的某種信息(稱為預(yù)解碼信息)連同相關(guān)聯(lián)指令一起存儲在指令高速緩沖存儲器 中。當(dāng)稍后將指令從高速緩沖存儲器獲取到管線中時,預(yù)解碼信息也被獲取,且輔助對 指令進(jìn)行完全解碼。預(yù)解碼信息可例如識別分支和浮點指令或其它在管線中執(zhí)行指令時 有用的信息。
某些指令集包含具有不同長度的指令。舉例來說,處理器可具有32位原生指令集, 且另外包含執(zhí)行Java字節(jié)代碼的能力。作為另一實例,ARM處理器架構(gòu)的若干版本執(zhí) 行來fi稱為Thumb-2的指令集的指令。Thumb-2指令可為16或32位長。大體.卜.,編譯 人員選擇Thnmb-2指令以實現(xiàn)最緊湊的代碼,且在一段Thumb-2代碼內(nèi)可以任何次序混合16位和32位指令。此外,大體上,對存儲器中指令的對準(zhǔn)沒有限制。
可變長度指令集處理器中的預(yù)解碼器的一個有用功能是確認(rèn)和指示指令高速緩沖 存儲器線中的每一指令的長度。也就是說,預(yù)解碼信息可識別指令邊界,所述指令邊界 可例如通過檢查指令操作碼來確定。此信息在將指令獲取到管線中以用于執(zhí)行時輔助管 線獲取與解碼級。
預(yù)載來tl可變長度指令集的指令且對指令進(jìn)行預(yù)解碼以指示指令邊界中遇到的一 個問題在于,因為指令不一定在存儲器中對準(zhǔn),所以其可能不沿著指令高速緩沖存儲器 線邊界對準(zhǔn)。因此,從存儲器檢索的高速緩沖存儲器線大小的數(shù)據(jù)塊中的第一數(shù)據(jù)(例 如,半字)可為完整指令(例如,16位指令)或在同一高速緩沖存儲器線中繼續(xù)的指令 的一部分(例如,32位指令的前16位),其中任一者均由預(yù)解碼器檢測。然而,第一數(shù) 據(jù)可為在數(shù)據(jù)塊之前開始的指令的一部分(例如,32位指令的最后16位),或可包括例 如變量、直接數(shù)據(jù)(immediate data)等非指令數(shù)據(jù)。在后兩種情況(部分指令或數(shù)據(jù)) 中的任一者中,第-一數(shù)據(jù)可能被作為完整指令或指令的第一部分而被錯誤地預(yù)解碼。
由于數(shù)據(jù)塊中的其它指令的長度和(因此)邊界是循序確定的,因此對第一數(shù)據(jù)進(jìn) 行不正確地預(yù)解碼可能引起數(shù)據(jù)塊中的所有指令被不正確地預(yù)解碼,且不正確的預(yù)解碼 信息隨指令'起被寫入到指令高速緩沖存儲器。當(dāng)隨后將指令從高速緩沖存儲器獲取到 管線'I'且預(yù)解碼信息被確定為錯誤時,必須丟棄高速緩沖存儲器線且再次從存儲器獲取 指令并對其進(jìn)行預(yù)解碼以確定正確的指令邊界,這對處理器性能和功率消耗兩者均造成 不利影響。
發(fā)明內(nèi)容
根據(jù)本文揭示和主張的一個或一個以上實施例,在執(zhí)行來自可變長度指令集的指令 的處理器中,預(yù)載指令操作以從存儲器檢索對應(yīng)于指令高速緩沖存儲器線的數(shù)據(jù)塊,對 所述數(shù)據(jù)塊中的指令進(jìn)行預(yù)解碼,且將所述指令和預(yù)解碼信息加載到所述指令高速緩沖 存儲器中。指令執(zhí)行單元向預(yù)解碼器指示第一有效指令在所述數(shù)據(jù)塊內(nèi)的位置。所述預(yù) 解碼器連續(xù)確定每--指令的長度且因此確定指令邊界。識別所述第一有效指令的位置的 指令高速緩沖存儲器線偏移量指示符可以多種方式被產(chǎn)生并提供到所述預(yù)解碼器。
個實施例涉及-"種將來自可變長度指令集的指令預(yù)載到指令高速緩沖存儲器中 的方法。設(shè)定指令高速緩沖存儲器線偏移量指示符,所述指示符識別第 -有效指令進(jìn)入 對應(yīng)于指令高速緩沖存儲器線的數(shù)據(jù)塊內(nèi)的偏移量。執(zhí)行預(yù)載指令,其操作以從存儲器 檢索包含至少一個來自可變長度指令集的指令的數(shù)據(jù)塊,且將所述指令加載到所述指令高速緩沖存儲器中。響應(yīng)于所述指令高速緩沖存儲器線偏移量指示符而以第一指令開始 對所述數(shù)據(jù)塊中的指令進(jìn)行連續(xù)預(yù)解碼。
另一實施例涉及一種處理器。所述處理器包含存儲器接口;和指令高速緩沖存儲 器,其操作以存儲來自可變長度指令集的指令及其對應(yīng)的預(yù)解碼信息。所述處理器還包 含指令執(zhí)行單元,其操作以產(chǎn)生指令高速緩沖存儲器線偏移量指示符,所述指令高速緩 沖存儲器線偏移量指示符識別待加載到所述指令高速緩沖存儲器中的數(shù)據(jù)塊中的第一 有效指令。所述處理器進(jìn)一步包含預(yù)解碼器,其插入在所述指令高速緩沖存儲器與所述 存儲器接U之間,且操作以在預(yù)載指令執(zhí)行后響應(yīng)于所述指令高速緩沖存儲器線偏移量 指示符而以第一有效指令開始對所述數(shù)據(jù)塊中的來自可變長度指令集的指令進(jìn)行連續(xù) 預(yù)解碼。
又一實施例涉及一種計算機可讀媒體,其存儲可變長度指令集中的至少一預(yù)載指 令,所述指令操作以致使處理器將指令預(yù)載到指令高速緩沖存儲器中,其中所述經(jīng)預(yù)載 的指令是以第一有效指令開始而被預(yù)解碼的。
圖1是對從可變長度指令集預(yù)載的指令進(jìn)行正確預(yù)解碼的處理器的功能框圖。
圖2是描繪來可變長度指令集的指令在三個代表性數(shù)據(jù)塊中的對準(zhǔn)的框圖。
圖3是預(yù)載來tl可變長度指令集的指令的方法的流程圖。
具體實施例方式
圖1描繪執(zhí)行來自至少一個可變長度指令集的指令的處理器iio的功能框圖。特定 來說,處理器iio對從可變長度指令集預(yù)載的指令進(jìn)行正確地預(yù)解碼。處理器iio在包
含管線114的執(zhí)行單元U2中執(zhí)行指令,管線114包括以管級組織的多個寄存器或鎖存 器116以及例如算術(shù)邏輯單元(ALU)(未圖示)等邏輯與計算電路。管線根據(jù)控制邏 輯118執(zhí)行指令。如圖所示,管線114可為超標(biāo)量設(shè)計。
通用寄存器(GPR)堆120提供構(gòu)成存儲器層級的頂部的寄存器。在一個實施例中, 指令執(zhí)行單元還包含狀態(tài)寄存器122,其可指示進(jìn)入第一指令所位于的指令高速緩沖存 儲器線中的偏移量,如本文進(jìn)一步解釋。指令執(zhí)行單元112還包含L2處理邏輯124,其 跟蹤從L2高速緩沖存儲器136或主存儲器138獲取的指令和數(shù)據(jù)的性質(zhì)。
管線114從指令高速緩沖存儲器126獲取指令,其中存儲器尋址和許可由指令側(cè)翻 譯旁視緩沖器(ITLB) 128管理。預(yù)解碼器130對從L2高速緩沖存儲器136 (或主存儲 器138)獲取的指令進(jìn)行預(yù)解碼,且將指令和預(yù)解碼信息放置于指令高速緩沖存儲器126
7中。在一個或一個以上實施例中,預(yù)解碼信息包含指令高速緩沖存儲器線中的指令的長度。如本文更詳細(xì)論述,預(yù)解碼器130響應(yīng)于來自指令執(zhí)行單元112的識別第一指令在高速緩沖存儲器線內(nèi)的位置的指令高速緩沖存儲器線偏移量指示符(ICOI)而正確地確定指令的長度。
從數(shù)據(jù)高速緩沖存儲器132存取數(shù)據(jù),其中存儲器尋址和許可由主翻譯旁視緩沖器(TLB) 134管理。在各種實施例中,ITLB 128可包括TLB 134的一部分的副木?;蛘撸琁TLB 128和TLB 134可集成。類似地,在處理器110的各種實施例中,指令高速緩沖存儲器126和數(shù)據(jù)高速緩沖存儲器132可合成一體。
指令高速緩沖存儲器126和數(shù)據(jù)高速緩沖存儲器132中的未中致使對2級(L2)高速緩存存儲器136的存取,所述L2高速緩存存儲器136在圖1描繪的實施例中是集成的。L2高速緩沖存儲器136中的未中致使在存儲器接口 142的控制下經(jīng)由系統(tǒng)總線140對主(芯片外)存儲器138的存取。處理器110可包含輸入/輸出(I/O)接口 144,其控制在外圍總線150上對各種外圍裝置146、 148的存取。在此項技術(shù)中眾所周知,處理器110執(zhí)行從例如存儲器136等計算機可讀媒體或由外圍裝置146、 148讀取的磁性或光學(xué)媒體檢索的指令。
所屬領(lǐng)域的技術(shù)人員將認(rèn)識到,處理器110的許多變化是可能的。舉例來說,處理器110可包含3級(L3)或額外的高速緩沖存儲器,且/或單獨的L2高速緩沖存儲器136可專用于指令高速緩沖存儲器126和數(shù)據(jù)高速緩沖存儲器132中的每一者。另外,可從特定實施例中省略處理器110中描繪的功能塊中的一者或一者以上。
處現(xiàn)器HO執(zhí)行米自至少一個可變長度指令集的指令。在各種實施例中,處理器110可執(zhí)行來自l古l定長度指令集(例如,32位ARM指令集)和一個或一個以上可變長度指令集(例如,32位和16位Thumb-2指令集)的指令,或來自兩個或兩個以上可變長度指令集的指令。在這些實施例中,當(dāng)前處理器指令集模式可由例如狀態(tài)寄存器122等寄存器中的一個或一個以上位指示。在另一實施例中,處理器iio執(zhí)行僅來自單個可變長度指令集的指令。
由處理器IIO執(zhí)行的可變長度指令集包含至少一個預(yù)載指令,其操作以在指令執(zhí)行之前將指令加載到指令高速緩沖存儲器126中。預(yù)載指令從L2高速緩沖存儲器136或存儲器138檢索含有一個或一個以上指令的指令高速緩沖存儲器線大小的數(shù)據(jù)塊。所述數(shù)據(jù)塊由預(yù)解碼器130預(yù)解碼以確定指令長度和其它預(yù)解碼信息。隨后將指令和預(yù)解碼信息'與'入到指令高速緩沖存儲器126 。
圖2描繪通過可變長度指令集中的預(yù)載指令預(yù)載到高速緩沖存儲器線中的數(shù)據(jù)塊中的數(shù)據(jù)和指令的若干可能分布。在圖2描繪的實施例中,高速緩沖存儲器線是十六個半
字。為了清楚起見,僅詳細(xì)展示數(shù)據(jù)塊的下半部。在圖2中描繪的實施例中處理器no
執(zhí)行來自具有16位和32位指令兩者的指令集(例如,Thumb-2)的指令。將預(yù)載到高速緩沖存儲器線中的第一假設(shè)數(shù)據(jù)塊202以指令A(yù) (32位指令)丌始,繼之以16位指令B和C、 32位指令D以及16位指令E和F。預(yù)解碼器130檢査與指令A(yù)相關(guān)聯(lián)的指令長度指示符,且確定其為32位指令。在一個實施例中,指令長度指示符是指令操作碼的位字段。舉例來說,在Thumb-2指令集中,如果位[15:ll]具有值'b11101、 'bl1110或'blllll,那么指令是32位長,任何其它編碼指示16位指令。
在已確定占據(jù)半字0的指令是32位指令(占據(jù)半字O和1)之后,預(yù)解碼器130檢查半字2處的位模式,且確定指令B是16位長。以此方式,預(yù)解碼器130沿著預(yù)載的數(shù)據(jù)塊連續(xù)工作,確定每一指令的長度且因此確定下一指令的開始位置。將指令長度連同其它預(yù)解碼信息一起寫入到指令高速緩沖存儲器126中。數(shù)據(jù)塊202經(jīng)適當(dāng)?shù)仡A(yù)解碼,因為指令A(yù)在數(shù)據(jù)塊202的開始處對準(zhǔn)。
預(yù)載指令從L2高速緩沖存儲器136或存儲器138檢索固定大小的數(shù)據(jù)塊202、204、206 (等于指令高速緩沖存儲器線的大小)。在多數(shù)實施方案中,通過掩蔽最低有效n個地址位而在存儲器屮對準(zhǔn)數(shù)據(jù)塊202、 204、 206,其中高速緩沖存儲器線是2n個字節(jié)。具有特定個別指令的0標(biāo)地址的預(yù)載指令從存儲器檢索包含目標(biāo)指令的經(jīng)對準(zhǔn)數(shù)據(jù)塊202、 204、 206,向'不是以目標(biāo)指令開始的存儲器塊(除非目標(biāo)指令恰好是數(shù)據(jù)塊202、204、 206中的第一指令,例如圖2中的指令A(yù))。因此,通過預(yù)載指令從存儲器檢索的數(shù)據(jù)塊202、 204、 206的第一數(shù)據(jù)(例如,半字)不一定是指令或指令的開頭。
舉例來說,數(shù)據(jù)塊204包含處于對應(yīng)于半字0-3的位置中的非指令數(shù)據(jù)。由于此數(shù)據(jù)可包含ff:何位模式,因此其可能被作為指令而錯誤地預(yù)解碼。舉例來說,常規(guī)的預(yù)解碼器可將數(shù)據(jù)解釋為半字O處的16位指令、半字1-2處的32位指令以及半字3-4處的另一32位指令。在此情況下,關(guān)于含有指令G的半字位置的預(yù)解碼信息是錯誤的。
作為另--實例,數(shù)據(jù)塊206以指令J的第二半開始,其前16位在另一數(shù)據(jù)塊中。然而,常規(guī)預(yù)解碼器可將指令J解釋為占據(jù)半字0-1的32位指令,且因此跳過指令K。如果在稍后將相關(guān)指令從指令高速緩沖存儲器獲取到管線中時將數(shù)據(jù)塊204、 206及其對應(yīng)的錯誤的預(yù)解碼信息寫入到指令高速緩沖存儲器,那么必須丟棄所述指令且重新獲取所述指令以獲得正確的預(yù)解碼信息。這對處理器性能造成不利影響,因為管線必須暫停以等待L2高速緩沖存儲器136或存儲器138存取 功率消耗也增加,因為必須檢索和預(yù)解碼相同的數(shù)據(jù)塊204、 206兩次。為了允許以正確的預(yù)解碼預(yù)載來自可變長度指令集的指令,指令執(zhí)行單元112產(chǎn)生指令高速緩沖存儲器線偏移量指示符(ICOI),其識別第一有效指令在數(shù)據(jù)塊202、 204、206內(nèi)的位置或第一有效指令的開頭。指令執(zhí)行單元112在執(zhí)行預(yù)載指令后將ICOI提供到預(yù)解碼器130。 ICOI的位大小取決于指令高速緩沖存儲器線和指令集中的最短指令的大小。例如在圖2中描繪的實施例中,最短指令是16位或半字,且指令高速緩沖存儲器線包含16個半字。因此,在此實施例中ICOI需要四個位。大體上,ICOI包括m個位,其中指令高速緩沖存儲器126的線大小是最短指令的2m倍??梢远喾N方式產(chǎn)生IC01并將其傳送到預(yù)解碼器130。
在 一 個實施例中,將預(yù)載指令目標(biāo)地址的 一 個或 一 個以上未使用地址位編碼為ICOI。預(yù)載指令(例如,PLI)將目標(biāo)指令的地址視為操作數(shù)。可將目標(biāo)指令地址分解為例如標(biāo)簽、組號和高速緩沖存儲器線索引。舉例來說,對于32位指令虛擬地址VA[31:0],與指令高速緩沖存儲器126的CAM結(jié)構(gòu)中存儲的標(biāo)簽相比較的標(biāo)簽可包括VA[3I:I1]。在p路組關(guān)聯(lián)高速緩沖存儲器中,如果標(biāo)簽匹配,那么組號從返回的p個結(jié)果中選擇。組號可包括VA[10:5]。索引VA[4:0]尋址高速緩沖存儲器線的個別字節(jié),即,存儲在指令高速緩沖存儲器126的RAM結(jié)構(gòu)中的數(shù)據(jù)。所述數(shù)據(jù)包括指令和預(yù)解碼信息。
報據(jù).個實施例,高速緩沖存儲器線索引(例如,VA[4:0])的'部分或全部用于對指令高速緩沖存儲器線偏移量指示符(ICOI)進(jìn)行編碼。在圖2中描繪的實施例屮,對于ICOI僅需要五個索引位VA[4:0]中的四個。在一個實施例中,預(yù)載目標(biāo)指令地址位VA[4:1]可保持ICOI,從而使VA[O]保持自由以用作另一旗標(biāo)(例如,用以在兩個不同的指令集編碼之問迸行選擇以用于執(zhí)行預(yù)解碼操作)。如果指令集包含8位指令,那么將需要整個高速緩沖存儲器線索引VA[4:0]來存儲ICOI。
當(dāng)?shù)刂方?jīng)確定且寫入到編譯人員指定的GPR以準(zhǔn)備相關(guān)聯(lián)預(yù)載指令的執(zhí)行時,將ICOI編碼到預(yù)載目標(biāo)地址的高速緩沖存儲器線索引部分中。當(dāng)預(yù)載指令執(zhí)行時,其從指定的GPR寄存器讀取目標(biāo)指令地址。如果目標(biāo)地址在指令高速緩沖存儲器126中命中,那么預(yù)載指令執(zhí)行完成。如果目標(biāo)地址在指令高速緩沖存儲器126中未中,那么指令執(zhí)行單元112內(nèi)的邏輯(例如L2處理邏輯124)執(zhí)行未中處理,存取L2高速緩沖存儲器136和(如果必要)i存儲器138以檢索包含目標(biāo)指令的數(shù)據(jù)塊,例如數(shù)據(jù)塊202、 204、206。對數(shù)據(jù)塊202、 204、 206進(jìn)行預(yù)解碼以確定塊202、 204、 206中的每一有效指令的長度及其它信息。
當(dāng)將含有指令的數(shù)據(jù)塊202、 204、 206加載到預(yù)解碼器130中時,L2處理邏輯124將ICOI呈現(xiàn)給預(yù)解碼器130。響應(yīng)于ICOI,預(yù)解碼器130對在ICOI指定的偏移量處開始的指令進(jìn)行預(yù)解碼,所述偏移量對應(yīng)于第一有效指令的位置或第一有效指令的開始。在圖2的實施例中,ICOI對于數(shù)據(jù)塊202將為'b0000,對于數(shù)據(jù)塊204將為'b0100且對于數(shù)據(jù)塊206將為'b0001。
預(yù)解碼器130例如通過檢查指令操作碼確定第一指令的長度(和其它預(yù)解碼信息),且從第一指令的長度確定第二指令的開始處。預(yù)解碼器130隨后確定第二指令的長度,且依此類推,直到已確定數(shù)據(jù)塊202、 204、 206中每個指令的長度(和其它預(yù)解碼信息)為止。預(yù)解碼器130隨后將指令連同正確的預(yù)解碼信息一起寫入到指令高速緩沖存儲器126。在一個實施例中,預(yù)解碼器130另外推測性地對如ICOI所指示的第一有效指令之前的數(shù)據(jù)進(jìn)行預(yù)解碼,因為也許所述數(shù)據(jù)可能包含一個或一個以上指令。
在一個實施例中,指令高速緩沖存儲器線偏移量指示符(ICOI)包括例如狀態(tài)寄存器122等寄存器中的字段。在此實施例中,ICOI位在預(yù)載指令執(zhí)行之前經(jīng)顯式地設(shè)定。在預(yù)載指令執(zhí)行后,預(yù)解碼器130檢查狀態(tài)寄存器122或其它寄存器中的ICOI位,且對以所指示的第-冇效指令開始的數(shù)據(jù)塊202、 204、 206進(jìn)行正確地預(yù)解碼。隨后將指令和預(yù)解碼信息寫入到指令高速緩沖存儲器126 。
在 -個實施例'l',指令高速緩沖存儲器線偏移量指示符(ICOI)包括預(yù)載指令的操作碼中的個或一個以上位??舍槍COI界定預(yù)載指令操作碼的位字段,且編譯人員可根據(jù)編程人員的指令或在代碼中的指示來設(shè)定ICOI位字段。在預(yù)載指令執(zhí)行后,例如由L2處現(xiàn)邏輯124將ICOI位字段呈現(xiàn)給預(yù)解碼器130,且預(yù)解碼器130對以指示的第一有效指令開始的數(shù)據(jù)塊202、 204、 206進(jìn)行預(yù)解碼。隨后將指令和預(yù)解碼信息寫入到指令高速緩沖存儲器126。
在一個實施例中,可變長度指令集包含多個預(yù)載指令,其各自指定一不同的指令高速緩沖存儲器線偏移量指示符(ICOI)。舉例來說,在圖2中描繪的實施例中,16個不同的預(yù)載指令各自指定一不同的ICOI以用于對數(shù)據(jù)塊202、 204、 206中的指令進(jìn)行預(yù)解碼。編程人員或編譯人員可基于已知的存儲器對準(zhǔn)和待預(yù)解碼的第一指令的地址來指定適當(dāng)?shù)念A(yù)載指令以用于進(jìn)入經(jīng)預(yù)載數(shù)據(jù)塊202、 204、 206中的已知偏移量。
所屬領(lǐng)域的技術(shù)人員將認(rèn)識到上文描述的實施例并不相互排斥。舉例來說,在操作碼中具有IC O I位字段的預(yù)載指令在特定實施方案中可通過將IC OI鎖存到例如狀態(tài)寄存
器122等寄存器中,或通過將ICOI置換到預(yù)載目標(biāo)地址中的一個或一個以上未使用的地址位中,來將ICOl呈現(xiàn)給預(yù)解碼器130。大體上,鑒于本發(fā)明的教示,所屬領(lǐng)域的技術(shù)人員可確認(rèn)用于將進(jìn)入第一有效指令所在的數(shù)據(jù)塊202、 204、 206中的偏移量傳送到預(yù)解碼器130的最佳解決方案。
圖3描繪預(yù)載指令的方法300。所述方法通過設(shè)定指令高速緩沖存儲器線偏移量指 示符(ICOI)(框302)而開始。ICOI識別第一有效指令在高速緩沖存儲器線或數(shù)據(jù)塊 202、 204、 206內(nèi)的位置。在各種實施例中,可通過更改預(yù)載指令目標(biāo)地址、在例如狀 態(tài)寄存器122等寄存器中設(shè)定ICOI位或在預(yù)載指令操作碼中設(shè)定ICOI位字段來設(shè)定 ICOI。
執(zhí)行預(yù)載指令(框304〉。預(yù)載指令操作以從L2高速緩沖存儲器136或存儲器138 檢索含有至少一目標(biāo)指令的數(shù)據(jù)塊202、 204、 206,且將數(shù)據(jù)塊202、 204、 206提供到 預(yù)解碼器130。響應(yīng)于ICOI,預(yù)解碼器130在數(shù)據(jù)塊202、 204、 206中定位第一有效指 令(框306), Ll確^第一指令的長度(框308)。如果其未達(dá)到數(shù)據(jù)塊202、 204、 206 的末尾(框310),那么預(yù)解碼器130使用在框308中確定的指令長度來確定另一指令的 開始(框312),且檢查所述指令以確定其長度(框308)。此過程繼續(xù),直到達(dá)到數(shù)據(jù) 塊202、 204、 206的末尾為止(框310)。
在一個實施例中,預(yù)解碼器130可對第一指令之前的數(shù)據(jù)進(jìn)行預(yù)解碼(框314)。如 果所述數(shù)據(jù)是隨機數(shù)據(jù)(如數(shù)據(jù)塊204中描繪)或指令的繼續(xù)(如數(shù)據(jù)塊206中描繪), 那么所產(chǎn)生的預(yù)解碼信息將很可能是錯誤的。然而,如果第一指令之前的數(shù)據(jù)包括與數(shù) 據(jù)塊202、 204、 206的開始對準(zhǔn)的有效指令,那么預(yù)解碼信息將是正確的,且可輔助管 線114。在其它實施例'l',不對第一指令之前的數(shù)據(jù)進(jìn)行預(yù)解碼。
預(yù)解碼器130將指令和預(yù)解碼信息寫入到指令高速緩沖存儲器126 (框316)。所屬 領(lǐng)域的技術(shù)人員將容易認(rèn)識到某些方法步驟可以與圖3中描繪的次序不同的次序執(zhí)行。 舉例來說,可在對有效指令進(jìn)行預(yù)解碼之前對第 一 指令之前的數(shù)據(jù)進(jìn)行預(yù)解碼(框314)。
另外,預(yù)解碼器130可漸進(jìn)地將指令和預(yù)解碼信息寫入到指令高速緩沖存儲器126 (框 316),因為數(shù)據(jù)塊202、 204、 206中的每一指令均經(jīng)預(yù)解碼。
根據(jù)本文描述和主張的一個或一個以上實施例,處理器110可將來自可變長度指令 集的指令預(yù)載到指令"速緩沖存儲器126中,且在指令或指令的開始處未與指令高速緩 沖存儲器線的開頭對準(zhǔn)時對指令進(jìn)行正確地預(yù)解碼。這可避免當(dāng)從指令高速緩沖存儲器 126獲取到經(jīng)不正確預(yù)解碼的指令且必須丟棄、重新獲取且重新預(yù)解碼所述指令時經(jīng)受 的性能和功率消耗降級??梢远喾N方式實施向預(yù)解碼器13 0傳送識別第 一 有效指令的指 令高速緩沖存儲器線偏移量指示符(ICOI)。
雖然已相對于本發(fā)明的特定特征、方面和實施例描述了本發(fā)明,但將明白,在本發(fā) 明的寬廣范圍內(nèi),許多變化、修改和其它實施例是可能的,且因此,所有變化、修改和實施例均應(yīng)視為在本發(fā)明的范圍內(nèi)。因此本發(fā)明的實施例應(yīng)在所有方面中解釋為說明性 而不是限制性的,且希望屬于隨附權(quán)利要求書的意義和等效范圍內(nèi)的所有改變都包含于 其中。
權(quán)利要求
1.一種將來自可變長度指令集的指令預(yù)載到指令高速緩沖存儲器中的方法,其包括設(shè)定指令高速緩沖存儲器線偏移量指示符,其識別第一有效指令進(jìn)入對應(yīng)于指令高速緩沖存儲器線的數(shù)據(jù)塊內(nèi)的偏移量;執(zhí)行預(yù)載指令,其操作以從存儲器檢索包含至少一個來自可變長度指令集的指令的數(shù)據(jù)塊,且將所述指令加載到所述指令高速緩沖存儲器中;以及響應(yīng)于所述指令高速緩沖存儲器線偏移量指示符而以第一指令開始對所述數(shù)據(jù)塊中的所述指令進(jìn)行連續(xù)預(yù)解碼。
2. 根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括基于指令長度指示符確定所述數(shù)據(jù)塊中 的后續(xù)指令的指令邊界。
3. 根據(jù)權(quán)利要求2所述的方法,其中指令長度指示符包括指令操作碼的位字段。
4. 根據(jù)權(quán)利要求1所述的方法,其中所述指令高速緩沖存儲器線偏移量指示符包括所 述預(yù)載指令的H標(biāo)地址的多個位。
5. 根據(jù)權(quán)利要求4所述的方法,其中所述指令高速緩沖存儲器線偏移量指示符包括目 標(biāo)地址位[4:1]。
6. 根據(jù)權(quán)利耍求1所述的方法,其中所述指令高速緩沖存儲器線偏移量指示符包括所 述預(yù)載指令的所述操作碼中的 一 個或 一 個以上位。
7. 根據(jù)權(quán)利耍求1所述的方法,其中設(shè)定指令高速緩沖存儲器線偏移量指示符月.執(zhí)行 預(yù)載指令包括執(zhí)行多個預(yù)載指令中的一者,每一預(yù)載指令包含不同的指令高速緩沖 存儲器線偏移量指示符。
8. 根據(jù)權(quán)利要求7所述的方法,其中所述多個預(yù)載指令包含對應(yīng)于進(jìn)入所述數(shù)據(jù)塊中 的每- 可能指令偏移量的預(yù)載指令。
9. 根據(jù)權(quán)利要求1所述的方法,其中設(shè)定指令高速緩沖存儲器線偏移量指示符包括在 執(zhí)行所述預(yù)載指令之前在寄存器中設(shè)定一個或一個以上位。
10. 根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括對所述數(shù)據(jù)塊中在如所述指令高速緩沖 存儲器線偏移量指示符指示的所述第一有效指令之前的任何數(shù)據(jù)進(jìn)行預(yù)解碼。
11. 根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括將所述指令和至少指示指令長度的預(yù)解 碼信息寫入到所述指令高速緩沖存儲器。
12. —種處理器,其包括存儲器接口;指令高速緩沖存儲器,其操作以存儲來自可變長度指令集的指令和預(yù)解碼信息; 指令執(zhí)行單元,其操作以產(chǎn)生指令高速緩沖存儲器線偏移量指示符,所述指令高 速緩沖存儲器線偏移量指示符識別第一有效指令在待加載到所述指令高速緩沖存儲器中的數(shù)據(jù)塊中的位置;以及預(yù)解碼器,其插入在所述指令高速緩沖存儲器與所述存儲器接口之間,且操作以 在預(yù)載指令執(zhí)行后響應(yīng)于所述指令高速緩沖存儲器線偏移量指示符而以第一有效 指令開始對所述數(shù)據(jù)塊中的指令進(jìn)行連續(xù)預(yù)解碼。
13. 根據(jù)權(quán)利要求12所述的處理器,其中所述指令執(zhí)行單元通過設(shè)定所述預(yù)載指令的 目標(biāo)地址的一-個或一個以上位而產(chǎn)生所述指令高速緩沖存儲器線偏移量指示符。
14. 根據(jù)權(quán)利要求13所述的處理器,其中所述目標(biāo)地址被寫入到由所述預(yù)載指令讀取 的通用寄存器。
15. 根據(jù)權(quán)利要求12所述的處理器,其中所述指令執(zhí)行單元響應(yīng)于所述預(yù)載指令的所 述操作碼中的一個或一個以上位而產(chǎn)生所述指令高速緩沖存儲器線偏移量指示符。
16. 根據(jù)權(quán)利要求12所述的處理器,其中所述指令執(zhí)行單元執(zhí)行多個預(yù)載指令中的一 者,每一預(yù)載指令指定不同的指令高速緩沖存儲器線偏移量指示符。
17. 根據(jù)權(quán)利要求16所述的處理器,其中所述多個預(yù)載指令包含對應(yīng)于進(jìn)入所述數(shù)據(jù) 塊中的每-'可能指令偏移量的預(yù)載指令。
18. 根據(jù)權(quán)利要求12所述的處理器,其進(jìn)一步包括寄存器,且其中所述指令執(zhí)行單元 通過在所述寄存器中設(shè)定一個或一個以上預(yù)定位而產(chǎn)生所述指令高速緩沖存儲器 線偏移量指示符。
19. 根據(jù)權(quán)利要求12所述的處理器,其進(jìn)一步包括插入在所述指令高速緩沖存儲器與 所述存儲器接口之問的第二高速緩存存儲器,且其中所述預(yù)解碼器插入在所述指令 高速緩沖存儲器與所述第二高速緩存存儲器之間。
20. 根據(jù)權(quán)利要求12所述的處理器,其中所述預(yù)解碼器進(jìn)一步操作以對所述數(shù)據(jù)塊中 在由所述指令高速緩沖存儲器線偏移量指示符指示的所述第一有效指令之前的任 何數(shù)據(jù)進(jìn)行預(yù)解碼。
21. —種計算機可讀媒體,其存儲可變長度指令集中的至少一預(yù)載指令,所述指令操作 以致使處理器將指令預(yù)載到指令高速緩沖存儲器中,其中所述指令以由指令高速緩 沖存儲器線偏移量指示符指定的第一有效指令開始而被預(yù)解碼。
22. 根據(jù)權(quán)利耍求21所述的計算機可讀媒體,其中所述指令高速緩沖存儲器線偏移量 指示符包括所述預(yù)載指令的目標(biāo)地址的 一 個或 一 個以上位。
23. 根據(jù)權(quán)利要求21所述的計算機可讀媒體,其中所述預(yù)載指令操作碼包含指令高速 緩沖存儲器線偏移量指示符位字段。
24. 根據(jù)權(quán)利要求21所述的計算機可讀媒體,其中所述指令高速緩沖存儲器線偏移量 指示符在所述預(yù)載指令執(zhí)行之前被存儲到寄存器。
全文摘要
在執(zhí)行來自可變長度指令集的指令的處理器中,預(yù)載指令操作以從存儲器檢索對應(yīng)于指令高速緩沖存儲器線的數(shù)據(jù)塊,對所述數(shù)據(jù)塊中的來自可變長度指令集的指令進(jìn)行預(yù)解碼,且將所述指令和預(yù)解碼信息加載到指令高速緩沖存儲器中。指令執(zhí)行單元向預(yù)解碼器指示第一有效指令在所述數(shù)據(jù)塊內(nèi)的位置。所述預(yù)解碼器連續(xù)確定每一指令的長度且因此確定指令邊界。識別所述第一有效指令的所述位置的指令高速緩沖存儲器線偏移量指示符可以多種方式產(chǎn)生并提供到所述預(yù)解碼器。
文檔編號G06F9/30GK101646999SQ200880010560
公開日2010年2月10日 申請日期2008年4月3日 優(yōu)先權(quán)日2007年4月4日
發(fā)明者布萊恩·邁克爾·斯坦普爾, 托馬斯·安德魯·薩托里烏斯, 羅德尼·韋恩·史密斯 申請人:高通股份有限公司