專利名稱::用于模擬顯式子例行程序調(diào)用的分支預(yù)測行為的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明大體上涉及管線式處理器的領(lǐng)域,且明確地說,涉及一種模擬顯式子例行程序調(diào)用對隱式子例行程序調(diào)用的分支預(yù)測行為以便減少電力且增加管線式處理器的利用率的方法。
背景技術(shù):
:微處理器在許多種應(yīng)用中執(zhí)行計(jì)算任務(wù)。為了允許更快的操作和/或通過軟件改變而增加的性能,經(jīng)改進(jìn)的處理器性能幾乎總是所需的。在許多內(nèi)嵌式應(yīng)用(例如,便攜式電子裝置)中,省電也是處理器設(shè)計(jì)和實(shí)施中的重要目標(biāo)。許多現(xiàn)代處理器使用管線式結(jié)構(gòu),其中循序指令在執(zhí)行中重疊以增加總體處理器通過量。為了實(shí)現(xiàn)高性能,維持經(jīng)過管線的平滑執(zhí)行是關(guān)鍵的。大部分現(xiàn)代處理器還利用分層存儲器,其中快速的芯片上高速緩沖存儲器存儲新近存取的數(shù)據(jù)和指令的本地拷貝。真實(shí)世界的程序包含間接分支指令,其實(shí)際分支行為直到所述指令在執(zhí)行管線深處被實(shí)際地評估時才被知曉。大部分現(xiàn)代處理器使用某種形式的分支預(yù)測,借此間接分支指令的分支行為在管線中早期被預(yù)測(例如,在提取或解碼管式級(pipestage)期間)。通過利用分支預(yù)測技術(shù),處理器推測性地提取間接分支指令的R標(biāo),且重新導(dǎo)向所述管線以開始處理經(jīng)推測性提取的指令。當(dāng)實(shí)際分支目標(biāo)在稍后管式級(例如,執(zhí)行管式級)中被確定時,如果分支被誤預(yù)測,那么必須從管線中沖洗經(jīng)推測性提取的指令,且從正確的目標(biāo)地址提取新的指令。響應(yīng)于錯誤分支目標(biāo)預(yù)測而預(yù)提取指令會不利地影響處理器性能和功率消耗。間接分支指令的一個實(shí)例包含用于從子例行程序返回的分支指令。舉例來說,來自子例行程序的返回調(diào)用可包含返回地址由寄存器的內(nèi)容界定的分支指令。返回地址界定將在子例行程序完成之后提取的下一指令,且通常是在子例行程序最初從中調(diào)用的分支指令之后的指令。許多高性能結(jié)構(gòu)指定供子例行程序返回中使用的特定通用寄存器,通常被稱為鏈接寄存器。為了方便起見,返回調(diào)用還可被稱為分支返回指令。為了使處理器管線將分支預(yù)測用于分支返回指令,常規(guī)軟件包含例如分支和鏈接指令的顯式子例行程序調(diào)用以將返回地址記錄到鏈接寄存器中。許多高性能實(shí)施例在處理分支和鏈接指令的解碼級包含鏈接堆疊結(jié)構(gòu)。將鏈接返回值推到此堆疊上,以便在對應(yīng)的子例行程序返回時允許準(zhǔn)確的分支預(yù)測。常規(guī)鏈接堆疊結(jié)構(gòu)含有返回地址列表,以便支持流經(jīng)管線的多個子例行程序調(diào)用,且支持多個等級的子例行程序調(diào)用的嵌套。隨后,當(dāng)子例行程序內(nèi)的分支返回指令正被解碼時,如果其它分支預(yù)測硬件命令處理器應(yīng)重新導(dǎo)向管線,那么從鏈接堆疊結(jié)構(gòu)讀取返回地址,以在分支預(yù)測中用以預(yù)測目標(biāo)地址。如果所述預(yù)測指示重新導(dǎo)向管線,那么管線開始從已從鏈接堆疊讀取的返回地址中提取指令。然而,存在舊版軟件,其在調(diào)用子例行程序時未并入有常規(guī)分支和鏈接指令,且因此,其不能夠利用鏈接堆疊結(jié)構(gòu)。作為實(shí)例,參看含有可在ARM有限公司(ARMLtd.)的兼容處理器上執(zhí)行的碼段的下表<table>tableseeoriginaldocumentpage6</column></row><table>表l舊版碼段。MOVLR、PC與BR指令的組合為到達(dá)子例行程序的后續(xù)分支準(zhǔn)備處理器。在此實(shí)例中,進(jìn)行調(diào)用所針對的實(shí)際子例行程序開始于地址0x009卯000處。MOVLR、PC指令指示應(yīng)將程序計(jì)數(shù)器(PC)的內(nèi)容復(fù)制到鏈接寄存器(LR)中。在例如ARM的一些指令結(jié)構(gòu)中,程序計(jì)數(shù)器實(shí)際上被界定為當(dāng)前指令地址加8個字節(jié)。在此界定的情況下,將PC的內(nèi)容移動到LR會導(dǎo)致將返回地址(地址0x00899卯8)存儲到鏈接寄存器中。在子例行程序結(jié)束時,從鏈接寄存器檢索所述返回地址。更具體地說,在執(zhí)行BXLR(分支返回指令)時檢索所述返回地址。在包含深管線且利用分支預(yù)測技術(shù)的現(xiàn)代處理器中,在不使用鏈接堆疊的情況下對分支返回指令進(jìn)行解碼時預(yù)測返回地址會由于各種原因而出問題。一個原因涉及微結(jié)構(gòu)慣例,其不允許在管線的解碼級期間存取例如鏈接寄存器的通用寄存器,因此排除了在分支預(yù)測時間使用鏈接寄存器的"當(dāng)前"值對返回地址進(jìn)行分支預(yù)測。即使可對此微結(jié)構(gòu)慣例做出變化,現(xiàn)今的深管線也可能致使鏈接寄存器中所含有的數(shù)據(jù)對于預(yù)測目的來說是不可靠的。舉例來說,在分支指令從針對返回地址做出預(yù)測的解碼管式級流動到得出返回地址的實(shí)際分解的執(zhí)行管式級所花費(fèi)的時間中,后續(xù)分支指令可進(jìn)入管線并重寫鏈接寄存器,從而致使初始分支返回指令的返回地址的實(shí)際分解不同于所預(yù)測的返回地址。預(yù)測值與實(shí)際分解之間的此失配被稱為分支目標(biāo)誤預(yù)測。分支誤預(yù)測導(dǎo)致時間損失和功率損失,其兩者均為沿不正確地預(yù)測的路徑推測性地執(zhí)行的結(jié)果。在給定此舊版軟件的滲透性(pervasiveness)和重寫舊版軟件以在調(diào)用子例行程序時利用常規(guī)分支和鏈接指令中所涉及的成本的情況下,存在對現(xiàn)今所開發(fā)的微處理器的需要,所述微處理器支持舊版軟件且使所述舊版軟件利用鏈接堆疊結(jié)構(gòu),以便在分支返回指令處于解碼管式級時有效地預(yù)測返回地址。.
發(fā)明內(nèi)容本發(fā)明辨識界定對子例行程序的隱式子例行程序調(diào)用的指令樣式,且利用此辨識來設(shè)計(jì)用于利用顯式子例行程序調(diào)用資源來允許分支預(yù)測對子例行程序的返回地址進(jìn)行預(yù)測的方法和設(shè)備。根據(jù)一個方面,揭示一種模擬顯式子例行程序的分支預(yù)測行為的方法。所述方法包含辨識指示對子例行程序的隱式子例行程序調(diào)用的指令地址;從所述指令地址計(jì)算返回地址;以及將所述返回地址存儲到顯式子例行程序資源。另一方面涉及一種設(shè)備。所述設(shè)備包含第一輸入,其經(jīng)配置以接收指令地址;以及第二輸入。第二輸入經(jīng)配置以接收將所述指令地址描述為與對子例行程序的隱式子例行程序調(diào)用相關(guān)聯(lián)的預(yù)解碼信息。響應(yīng)于所述預(yù)解碼信息,所述設(shè)備還包含加法器,其經(jīng)配置以將偏移加到指令地址,從而界定返回地址。所述加法器還經(jīng)配置以將返回地址存儲到顯式子例行程序資源,從而促進(jìn)返回調(diào)用指令的后續(xù)分支預(yù)測。根據(jù)又一方面,揭示另一種設(shè)備。所述設(shè)備包括經(jīng)配置以同時接收第一和第二指令地址以及相關(guān)聯(lián)的預(yù)解碼信息的第一和第二輸入。所述設(shè)備進(jìn)一步包括第一組加法器,其經(jīng)配置以響應(yīng)于指示第一或第二指令地址與對子例行程序的隱式子例行程序調(diào)用相關(guān)聯(lián)的預(yù)解碼信息而將偏移加到第一和第二指令地址以界定第一和第二結(jié)果。所述設(shè)備進(jìn)一步包括用于從第一或第二結(jié)果中的一者選擇返回地址的裝置。應(yīng)了解,所屬領(lǐng)域的技術(shù)人員從以下具體實(shí)施方式將容易明白本發(fā)明的其它實(shí)施例,其中本發(fā)明的各種實(shí)施例是作為說明而展示并描述的。如將認(rèn)識到,本發(fā)明能夠具有其它且不同的實(shí)施例,且本發(fā)明的若干細(xì)節(jié)能夠在各種其它方面進(jìn)行修改,而均不脫離本發(fā)明。因此,圖式和具體實(shí)施方式應(yīng)被視為本質(zhì)上是說明性的,而非限制性的。圖l是處理器的功能框圖。圖2是遵循穿過圖1中所說明的管線的指令流的時序圖。圖3是單指令解碼管式級的示范性部分。圖4是雙指令解碼管式級的一部分的示范性第一方面。圖5是圖1的雙指令解碼管式級的一部分的示范性第二方面。圖6是說明在辨識隱式子例行程序調(diào)用時模擬顯式子例行程序的分支預(yù)測行為的方法的流程圖。圖7是展示圖6中的區(qū)塊610、620和630的進(jìn)一步細(xì)節(jié)的流程圖。具體實(shí)施例方式圖1描繪其中可使用本發(fā)明的方面的處理器100的功能框圖。處理器ioo包含用于高速緩存新近處理的指令的指令高速緩沖存儲器(i-高速緩沖存儲器)uo、用于在I-高速緩沖存儲器110中未發(fā)現(xiàn)指令時存取存儲器138的存儲器接口136、用于執(zhí)行從存儲器138檢索到的指令的有限解碼的預(yù)解碼邏輯電路128,以及用于響應(yīng)于I-高速緩沖存儲器110中的未中(miss)而將包含預(yù)解碼位的指令數(shù)據(jù)寫入到I-高速緩沖存儲器110中的填充緩沖器邏輯電路130。預(yù)解碼位與從存儲器檢索到的指令相關(guān)聯(lián),且含有描述所述指令的屬性,例如,指令類型的指示。存儲器138可位于處理器IOO上或處理器100外,且可包括層2(L2)存儲器組件。處理器100還包含指令管線105,其用于處理指令的;以及分支預(yù)測電路132,其用于預(yù)測間接分支指令的目標(biāo)地址且預(yù)測是否重新導(dǎo)向指令管線105以處理所述目標(biāo)地址。如果分支預(yù)測電路132預(yù)測重新導(dǎo)向指令管線105,那么所述間接分支指令被稱為已"預(yù)測為被采用(predictedtaken)"。如果間接分支指令已"預(yù)測為被采用",那么分支預(yù)測電路132預(yù)測間接分支指令的目標(biāo)地址,且重新導(dǎo)向指令管線105以開始提取開始于所述目標(biāo)地址的指令。處理器IOO根據(jù)控制邏輯電路122而在指令管線105中處理指令。在一些實(shí)施例中,管線105可以是具有兩個或兩個以上平行管線的超標(biāo)量設(shè)計(jì)。管線105包含各種管式級指令高速緩沖存儲器查找(IC)級102、指令數(shù)據(jù)對準(zhǔn)(IDA)級104、解碼(DCD)級106、指令列隊(duì)UQ)級108、第一寄存器存取(RACC1)級112、第二寄存器存取(RACC2)級114、保留站(RSV)級116,以及四個執(zhí)行級(XI到X4)120A到120D。在一些實(shí)施例中,管式級一次可處理單個指令。在另一實(shí)施例中,管式級可同時處理兩個或兩個以上指令。應(yīng)注意,在不限制本發(fā)明的范圍的情況下,可將管式級加到管線105或從管線105減去。處理器IOO還包含通用寄存器(GPR)堆118,其包含(通過微結(jié)構(gòu)慣例)可由管式級112、114和120A到120D存取的寄存器。指令高速緩沖存儲器查找(IC)級102嘗試從I-高速緩沖存儲器IIO檢索指令。指令數(shù)據(jù)對準(zhǔn)級104分析出多個指令以及與多個指令相關(guān)聯(lián)的預(yù)解碼信息。如果在I-高速緩沖存儲器110中未發(fā)現(xiàn)指令地址,那么指令數(shù)據(jù)對準(zhǔn)級104起始請求以從存儲器138檢索對應(yīng)的指令。解碼級106對指令進(jìn)行完全解碼。此外,除了常規(guī)功能之外,解碼級106辨識顯式子例行程序調(diào)用指令,且將返回地址寫入到鏈接堆疊結(jié)構(gòu)134中。此外,解碼級106還辨識來自舊版軟件的隱式子例行程序調(diào)用,且將返回地址存儲到鏈接堆疊結(jié)構(gòu)134中。鏈接堆疊結(jié)構(gòu)134可以是被作為循環(huán)緩沖器管理的一組寄存器。返回地址是指令的在隱式子例行程序完成時管線105將重新導(dǎo)向的地址。將結(jié)合圖3到圖5的論述而更充分地描述解碼級106的相干方面的結(jié)構(gòu)和操作。指令列隊(duì)級108緩沖一個或一個以上指令,以便允許推測性提取在執(zhí)行管線的中止期間繼續(xù)。第一寄存器存取級112和第二寄存器存取級114從通用寄存器118檢索一個或一個以上操作數(shù)(如可能為指令所需)。保留站級116允許指令等待寫后讀(read-after-write)冒險及其類似物被解決。執(zhí)行級包含例如算術(shù)邏輯單元及其類似物的已知組件。執(zhí)行級120A到120D執(zhí)行指令。從執(zhí)行級產(chǎn)生的結(jié)果被寫入到GPR堆118。在執(zhí)行級120A到120D期間,實(shí)際分支分解發(fā)生以確定在解碼級106期間所做出的分支預(yù)測是否正確。如果實(shí)際分支分解不同于所預(yù)測的目的地,那么分支被稱為已被誤預(yù)所屬領(lǐng)域的技術(shù)人員將認(rèn)識到,處理器IOO的大量變化是可能的。舉例來說,處理器100可包含I-高速緩沖存儲器110的第二等級(L2)高速緩沖存儲器。另外,處理器100中所描繪的功能區(qū)塊中的一者或一者以上可從特定實(shí)施例中省略。可駐存在處理器100中的其它功能區(qū)塊(例如,翻譯后備緩沖器、數(shù)據(jù)高速緩沖存儲器及其類似物)與本發(fā)明的描述內(nèi)容關(guān)系不大,且為了清楚起見而被省略。圖2是遵循穿過圖1中所說明的管線105的指令流的時序圖200。顯式地說,時序圖200中所追蹤的指令流是如表1中所說明的舊版碼段。出于本發(fā)明的目的,術(shù)語"隱式子例行程序調(diào)用"指代兩個或兩個以上指令的組合,所述指令的組合功能是設(shè)置為子例行程序調(diào)用作準(zhǔn)備的寄存器且調(diào)用子例行程序。舉例來說,參看表1,M0VLR、PC/BR組合中的兩個指令界定隱式子例行程序調(diào)用。在此情況下,MOVLR、PC指令界定隱式子例行程序調(diào)用的開頭,且BR指令界定隱式子例行程序調(diào)用的結(jié)尾。吋序圖200的最初H^—個行對應(yīng)于管線105的級。列210A到210W對應(yīng)于循序時序循環(huán)。出于闡釋的目的,每一管式級每循環(huán)處理一個指令。然而,所屬領(lǐng)域的技術(shù)人員應(yīng)認(rèn)識到,本發(fā)明的教示適用于多個循環(huán)管式級且適用于每循環(huán)能夠處理多個指令的管式級。由于圖3和圖4中所說明的解碼管式級的方面,時序圖200的行211對應(yīng)于例如鏈接堆疊結(jié)構(gòu)134的鏈接堆疊結(jié)構(gòu)的內(nèi)容。由于圖5中所說明的解碼管式級的方面,時序圖200的行213對應(yīng)于所述鏈接堆疊結(jié)構(gòu)的內(nèi)容。將結(jié)合圖5的論述來論述行213。時序圖200的行212對應(yīng)于鏈接寄存器的內(nèi)容。一般來說,指令進(jìn)入IC級102且傳播到下一循環(huán)中的下一級。在215處,MOVLR、PC指令處于解碼級106中。在所述時間點(diǎn),解碼級106辨識MOVLR、PC,且將返回地址MOV+8存儲到鏈接堆疊結(jié)構(gòu)中。出于命名的冃的,MOV+8指代將偏移8加到MOV指令的地址。值8包含MOV指令的四個字節(jié)以及后續(xù)BR指令的四個字節(jié),使得鏈接堆疊結(jié)構(gòu)含有BR指令之后的循序指令的地址。如將結(jié)合圖3到圖4的論述而進(jìn)一步論述,根據(jù)本發(fā)明的本教示的解碼級將偏移8加到MOV指令的地址。如將結(jié)合圖5的論述而進(jìn)一步論述,根據(jù)本發(fā)明的本教示的替代性解碼級將偏移4加到BR指令的地址。應(yīng)注意,記號MOV+8和BR+4兩者均指代地0x00899908(返回地址)。在參考符號220處,鏈接堆疊結(jié)構(gòu)將其內(nèi)容展示為MOV+8。當(dāng)BR指令由解碼級106處理時,分支指令的目標(biāo)(子例行程序的開頭)被預(yù)測且在下一循環(huán)中由管線提取。在參考符號219處,LDA指令(子例行程序的開頭)由IC級102處理。由于管線105由于分支指令的預(yù)測的緣故而已被重新導(dǎo)向以提取LDA指令,所以地址BR+4和BR+8處的指令被從管線沖洗。循序地在LDA指令之后的指令接著被提取到管線105中。在參考符號225處,分支返回指令BX由解碼級106處理。解碼級106以鏈接堆疊結(jié)構(gòu)的內(nèi)容來調(diào)用分支預(yù)測電路132以預(yù)測返回地址。在另一實(shí)施例中,分支預(yù)測電路132對鏈接堆疊結(jié)構(gòu)進(jìn)行讀取。在任一情況下,分支預(yù)測電路132利用鏈接堆疊結(jié)構(gòu)來預(yù)測返回地址,且在參考符號230處,管線被重新導(dǎo)向以提取返回地址0x00899908處的指令。一旦被利用,行211列210J處的MOV+8條目就從鏈接堆疊結(jié)構(gòu)移除。在針對隱式子例行程序調(diào)用不使用鏈接堆疊的常規(guī)處理器中,當(dāng)子例行程序返回指令處于DCD級中且嘗試預(yù)測時,鏈接寄存器(LR)的值本身可能尚未被及時地更新以用于循環(huán)210I中。如圖中所示,LR直到循環(huán)210M時才被更新,循環(huán)210M比將被要求在DCD級中使用此值的循環(huán)遲四個循環(huán)。參考符號235處的循環(huán)210M在進(jìn)行分支返回地址的預(yù)測和提取的循環(huán)210I之后。因此,在常規(guī)處理器中,對存儲在鏈接寄存器中的分支返回指令的分支預(yù)測可能是不可靠的。圖3到圖5說明本發(fā)明的與例如解碼管式級106的解碼管式級有關(guān)的替代性方面。這些替代性方面為隱式子例行程序調(diào)用以及常規(guī)分支和鏈接指令尋址用于寫入到鏈接狀態(tài)結(jié)構(gòu)的路徑。應(yīng)注意,其它路徑包含于解碼管式級中,例如,指令集中的其它指令的路徑,但所述路徑與本發(fā)明的此方面無關(guān)且因此未在圖式中描繪。圖3是單指令解碼管式級的示范性部分300。單指令解碼管式級的部分300可合適地安置在解碼級106中。單指令解碼管式級的部分300包含指令地址310和與指令地址310相關(guān)聯(lián)的預(yù)解碼位315。指令地址310的大小為32個位長,且預(yù)解碼位315的大小為8個位長。應(yīng)注意,本發(fā)明的方面預(yù)期指令地址或預(yù)解碼位的各種大小及其相應(yīng)的位位置。指令地址310和預(yù)解碼位315輸入到解碼管式級的部分300,且可駐存在相同或不同的數(shù)據(jù)寄存器中。預(yù)解碼位315包含與對應(yīng)于指令地址310的指令有關(guān)的信息,且由預(yù)解碼邏輯電路128確定。預(yù)解碼位315指示對應(yīng)指令是否為例如表1中所列出的MOV/BR組合中的MOVLR、PC指令的隱式子例行程序調(diào)用的開頭。可以各種方式對預(yù)解碼位315進(jìn)行編碼,所述方式包含對特定位或預(yù)解碼位315的組合進(jìn)行編碼,以指示指令地址310指代隱式子例行程序調(diào)用的開頭或常規(guī)分支和鏈接指令。在另一實(shí)施例中,指令的操作碼(opcode)可用于將隱式子例行程序調(diào)用以及常規(guī)分支和鏈接指令與指令集中的其它指令區(qū)分開。解碼管式級的部分300進(jìn)一步包含加法器/多路復(fù)用器組合330。加法器/多路復(fù)用器組合330包含加法器325A到325B、多路復(fù)用器320和鏈接堆疊結(jié)構(gòu)134。在指令地址310指代常規(guī)分支和鏈接指令的情況下,加法器325A將常數(shù)4加到指令地址。在指令地址310指代隱式子例行程序調(diào)用的開頭的情況下,加法器325B將常數(shù)8加到指令地址。通過多路復(fù)用器320,預(yù)解碼位315選擇將哪一經(jīng)遞增地址或返回地址寫入到鏈接堆疊結(jié)構(gòu)134(如果存在的話)。參看表1,其說明偏移8以反映返回地址的位置在MOV指令之后八個字節(jié)。在常規(guī)分支和鏈接指令中,返回地址在分支和鏈接指令之后四個字節(jié)。盡管未圖示,但可視組成隱式子例行程序調(diào)用的指令的數(shù)目和組成隱式子例行程序調(diào)用的指令中的每一者的大小而添加其它加法器或可更換圖3到圖5中所說明的加法11器°圖4是雙指令解碼管式級的一部分400的示范性第一方面。雙指令解碼管式級的部分400可合適地安置在解碼級106中。雙指令解碼管式級的部分400包含兩個指令地址410A到410B(與其相應(yīng)的預(yù)解碼位407A到407B同時被接收到),以及兩組加法器/多路復(fù)用器組合425A到425B。指令地址410A到410B和預(yù)解碼位407A到407B被輸入到解碼管式級的部分400,且可駐存在相同或不同的數(shù)據(jù)寄存器中。例如MOVLR、PC指令的地址等隱式子例行程序調(diào)用的開頭可在任一指令地址410A或410B中發(fā)現(xiàn)。按照慣例,指令地址410A或DCDo在程序次序上為第一,且指令地址410B或DCD,在程序次序上為第二。當(dāng)界定例如MOVLR、PC指令的地址等隱式子例行程序的開頭的指令的地址位于指令地址410A中時,加法器/多路復(fù)用器425A的輸出是有效的,且此經(jīng)遞增地址被寫入到鏈接堆疊結(jié)構(gòu)134。如果隱式子例行程序的開頭的地址是指令地址410B,那么加法器/多路復(fù)用器425B的輸出是有效的,且此經(jīng)遞增地址或返回地址被寫入到鏈接堆疊結(jié)構(gòu)134。當(dāng)隱式子例行程序被辨識出時,圖3和圖4中所說明的解碼管式級的方面在界定隱式子例行程序的指令開始時寫入到鏈接堆疊結(jié)構(gòu)134。圖5是雙指令解碼管式級的一部分500的示范性第二方面。雙指令解碼管式級的部分500可合適地安置在解碼級106中。雙指令解碼管式級的部分500響應(yīng)于接收到界定隱式子例行程序調(diào)用的最后一個指令地址而將返回地址寫入到鏈接堆疊結(jié)構(gòu)134。返回參看圖2,例如,在對MOV/BR組合的分支指令進(jìn)行解碼之后一個循環(huán),鏈接狀態(tài)結(jié)構(gòu)213在參考符號221處由雙指令解碼管式級的部分500寫入。因此,如所說明,在參考符號221處,BR+4的值被寫入到鏈接狀態(tài)結(jié)構(gòu)213。雙指令解碼管式級的部分500包含兩個指令地址510A到510B(與其相應(yīng)的預(yù)解碼位507A到507B同時被接收)。指令地址510A到510B(DCDq和DCD,)及其相應(yīng)的預(yù)解碼位507A到507B(PDCDq和PDCD,)輸入到解碼管式級的部分500,且可駐存在相同或不同的數(shù)據(jù)寄存器中。解碼管式級的部分500進(jìn)一步包含選擇/啟用邏輯電路510、旗標(biāo)設(shè)置邏輯電路515、加法器525A和525B以及多路復(fù)用器520。旗標(biāo)設(shè)置邏輯電路515設(shè)置旗標(biāo)530且使旗標(biāo)530復(fù)位。旗標(biāo)530追蹤隱式子例行程序調(diào)用的開頭是否已在地址510A或地址510B中被辨識出。如果同時接收到指示隱式子例行程序調(diào)用的開頭和結(jié)尾的兩個地址,那么不利用旗標(biāo)530。在隱式子例行程序由MOVLR、PC/BR組合界定的情況下,當(dāng)指令MOVLR、PC的地址駐存在可為DCDo(當(dāng)DCDi無效時)或DCD!的最后有效解碼時隙中時,利用PDCDo和PDCD,位的旗標(biāo)設(shè)置邏輯電路515設(shè)置旗標(biāo)530。選擇/啟用邏輯電路510確定DCDo或DCD!是否含有隱式子例行程序調(diào)用的結(jié)尾的地址。如果隱式子例行程序調(diào)用的結(jié)尾處于DCDo中,那么加法器525A將4加到DCDo中的地址,以便計(jì)算隱式子例行程序調(diào)用的返回地址。如果隱式子例行程序調(diào)用的結(jié)尾處于DCD,中,那么加法器525B將4加到DCD,中的地址,以便計(jì)算返回地址。如果隱式子例行程序調(diào)用的結(jié)尾存在于DCDo或DCD,中,那么選擇/啟用邏輯電路510產(chǎn)生選擇信號540,且如果這樣的話,那么選擇將哪一經(jīng)遞增指令地址535A或535B寫入鏈接堆疊結(jié)構(gòu)134中。為了確保鏈接堆疊結(jié)構(gòu)134不會被不必要地寫入,選擇/啟用邏輯電路510從分支預(yù)測電路132接收分別對應(yīng)于指令地址DCDo和DCD,的預(yù)測為被采用的信號550A和550B作為輸入。如果隱式子例行程序調(diào)用在數(shù)據(jù)寄存器505中被辨識出,且隱式子例行程序已由分支預(yù)測電路132預(yù)測為被采用,那么選擇/啟用邏輯電路510向鏈接堆疊結(jié)構(gòu)134產(chǎn)生寫入啟用信號545,以啟用鏈接堆疊結(jié)構(gòu)134以被寫入。如果隱式子例行程序調(diào)用被辨識出但被預(yù)測為未被采用,那么選擇/啟用邏輯電路510不向鏈接堆疊結(jié)構(gòu)134產(chǎn)生寫入啟用。以此方式,預(yù)測為未被采用的隱式子例行程序調(diào)用不會導(dǎo)致寫入到鏈接堆疊結(jié)構(gòu)134。應(yīng)注意,盡管本發(fā)明在解碼級管線中描述隱式子例行程序調(diào)用的辨識和對的鏈接堆疊結(jié)構(gòu)的寫入,但所屬領(lǐng)域的技術(shù)人員將認(rèn)識到,本發(fā)明的這些方面可在處理器管線的已確定了預(yù)解碼位且已進(jìn)行了分支預(yù)測的任何級中實(shí)踐。圖6是說明在辨識隱式子例行程序調(diào)用時模擬顯式子例行程序的分支預(yù)測行為的方法600的流程圖。在區(qū)塊610處,在處理器管線中辨識指示對子例行程序的隱式子例行程序調(diào)用的指令地址。在區(qū)塊620處,從所述指令地址計(jì)算返回地址。如果隱式子例行程序調(diào)用包括兩個或兩個以上指令,那么加到所述指令地址的偏移量取決于各種因素,包含辨識是在隱式子例行程序調(diào)用的開頭還是結(jié)尾進(jìn)行以及組成隱式子例行程序調(diào)用的指令的大小。在區(qū)塊630處,將返回地址存儲到例如鏈接堆疊結(jié)構(gòu)134的顯式子例行程序資源。如圖3到圖5中所描述,區(qū)塊610、620和630可在解碼級106期間進(jìn)行。在區(qū)塊640處,處理器管線處理與被調(diào)用的子例行程序相關(guān)聯(lián)的指令。舉例來說,參看表l,在區(qū)塊640處,將處理指令地址0x00990000到0x009卯008。在區(qū)塊650處,響應(yīng)于指示來自例如表1中的0x00990008BX的子例行程序的返回調(diào)用的分支指令,從顯式子例行程序資源讀取返回地址。另外,在區(qū)塊650處,將處理器管線重新導(dǎo)向到從顯式子例行程序資源讀取的返回地址。當(dāng)返回調(diào)用指令處于解碼級106中時,以與響應(yīng)于對由常規(guī)分支和鏈接指令調(diào)用的子例行程序的返回調(diào)用而檢索返回地址時相同的方式,從鏈接堆疊結(jié)構(gòu)134檢索返回地址。一旦檢索到返回地址且返回調(diào)用指令被預(yù)測為被采用,那么處理器管線提取所述返回地址,從而有利地允許如圖2中所說明的返回地址的早期提取。圖7是展示圖6中的區(qū)塊610、620和630的進(jìn)一步細(xì)節(jié)的流程圖700。在區(qū)塊710處,讀取與指令地址相關(guān)聯(lián)的預(yù)解碼位。在區(qū)塊720處,流程圖700確定預(yù)解碼位是否指示隱式子例行程序調(diào)用。如果預(yù)解碼位指示隱式子例行程序調(diào)用,那么區(qū)塊730將偏移加到指令地址。在區(qū)塊740處,將經(jīng)遞增地址存儲到鏈接堆疊結(jié)構(gòu)中。在區(qū)塊750處,管線過程繼續(xù)以常規(guī)方式來處理指令。如果預(yù)解碼位不指示隱式子例行程序調(diào)用,那么區(qū)塊720進(jìn)行到其中處理器管線繼續(xù)以常規(guī)方式來處理指令的區(qū)塊750。結(jié)合本文所揭示的實(shí)施例而描述的各種說明性邏輯區(qū)塊、模塊、電路、元件和/或組件可用通用處理器、數(shù)字信號處理器(DSP)、專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)或其它可編程邏輯組件、離散門或晶體管邏輯、離散硬件組件或其經(jīng)設(shè)計(jì)以執(zhí)行本文所描述的功能的任何組合來實(shí)施或執(zhí)行。通用處理器可以是微處理器,但在替代方案中,處理器可以是任何常規(guī)處理器、控制器、微控制器或狀態(tài)機(jī)。處理器還可實(shí)施為計(jì)算組件的組合,例如,DSP與微處理器的組合、多個微處理器、結(jié)合DSP核心的一個或一個以上微處理器,或任何其它此類配置。結(jié)合本文所揭示的實(shí)施例而描述的方法可直接體現(xiàn)于硬件中、由處理器執(zhí)行的軟件模塊中或二者的組合中。軟件模塊可駐存在RAM存儲器、快閃存儲器、ROM存儲器、EPROM存儲器、EEPROM存儲器、寄存器、硬盤、可移除盤、CD-ROM或此項(xiàng)技術(shù)中已知的任何其它形式的存儲媒體中。存儲媒體可耦合到處理器,使得處理器可從存儲媒體讀取信息并將信息寫入到存儲媒體。在替代方案中,存儲媒體可與處理器成一體式。雖然在實(shí)施例的情況下揭示了本發(fā)明,但將認(rèn)識到,所屬領(lǐng)域的技術(shù)人員可使用與以上論述內(nèi)容以及所附權(quán)利要求書一致的許多種實(shí)施方案。權(quán)利要求1.一種模擬顯式子例行程序調(diào)用的分支預(yù)測行為的方法,其包括辨識指示對子例行程序的隱式子例行程序調(diào)用的指令地址;從所述指令地址計(jì)算返回地址;以及將所述返回地址存儲到顯式子例行程序資源。2.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括響應(yīng)于指示來自所述子例行程序的返回調(diào)用的分支指令,從所述顯式子例行程序資源讀取所述返回地址。3.根據(jù)權(quán)利要求2所述的方法,其進(jìn)一步包括將處理器管線重新導(dǎo)向到所述返回地址。4.根據(jù)權(quán)利要求1所述的方法,其中辨識所述指令地址進(jìn)一步包括對與所述指令地址相關(guān)聯(lián)的指令進(jìn)行預(yù)解碼,以界定預(yù)解碼信息;以及確定預(yù)解碼信息是否將所述指令地址指示為所述隱式子例行程序調(diào)用的開頭。5.根據(jù)權(quán)利要求1所述的方法,其中從所述指令地址計(jì)算所述返回地址包括將常數(shù)偏移加到所述指令地址。6.根據(jù)權(quán)利要求1所述的方法,其中所述顯式子例行程序資源為鏈接堆疊結(jié)構(gòu)。7.-—種設(shè)備,其包括—第一輸入,其經(jīng)配置以接收指令地址;第二輸入,其經(jīng)配置以接收預(yù)解碼信息,所述預(yù)解碼信息將所述指令地址描述為與對子例行程序的隱式子例行程序調(diào)用相關(guān)聯(lián);以及加法器,其經(jīng)配置以響應(yīng)于所述預(yù)解碼信息而將偏移加到所述指令地址以界定返回地址,從而致使所述返回地址被存儲到顯式子例行程序資源。8.根據(jù)權(quán)利要求7所述的設(shè)備,其中響應(yīng)于指示來自所述子例行程序的返回調(diào)用的分支指令而對所述顯式子例行程序資源進(jìn)行讀取。9.根據(jù)權(quán)利要求7所述的設(shè)備,其中所述預(yù)解碼信息進(jìn)一步將所述指令地址描述為所述隱式子例行程序調(diào)用的開頭。10.根據(jù)權(quán)利要求7所述的設(shè)備,其中所述預(yù)解碼信息進(jìn)一步將所述指令地址描述為所述隱式子例行程序調(diào)用的結(jié)尾。11.根據(jù)權(quán)利要求7所述的設(shè)備,其中所述顯式子例行程序資源為鏈接堆疊結(jié)構(gòu)。12.根據(jù)權(quán)利要求7所述的設(shè)備,其進(jìn)一步包括第三輸入,其用于同時接收第二指令地址與所述指令地址;以及經(jīng)配置以確定是否將所述指令地址或所述第二指令地址路由到所述顯式子例行程序資源的邏輯。13.根據(jù)權(quán)利要求7所述的設(shè)備,其進(jìn)一步包括第二加法器,其經(jīng)配置以響應(yīng)于顯式子例行程序調(diào)用而將第二常數(shù)偏移加到所述指令地址。14.一種設(shè)備,其包括第一和第二輸入,其經(jīng)配置以同時接收第一和第二指令地址以及相關(guān)聯(lián)的預(yù)解碼信息;第一組加法器,其經(jīng)配置以響應(yīng)于指示所述第一或第二指令地址被關(guān)聯(lián)至對子例行程序的隱式子例行程序調(diào)用的所述預(yù)解碼信息而將偏移加到所述第一和第二指令地址,以界定第一和第二結(jié)果;以及用于從所述第一或第二結(jié)果中的一者選擇返回地址的裝置。15.根據(jù)權(quán)利要求14所述的設(shè)備,其進(jìn)一步包括用于將所述返回地址寫入到顯式子例行程序資源的裝置。16.根據(jù)權(quán)利要求14所述的設(shè)備,其進(jìn)一步包括旗標(biāo)設(shè)置邏輯電路,其經(jīng)配置以追蹤所述第一或第二指令地址是否與所述隱式子例行程序調(diào)用相關(guān)聯(lián)。17.根據(jù)權(quán)利要求14所述的設(shè)備,其進(jìn)一步包括第二組加法器,其用以響應(yīng)于指示所述第一或第二指令地址被關(guān)聯(lián)至對子例行程序的顯式子例行程序調(diào)用的所述預(yù)解碼信息而將第二偏移加到所述第一和第二指令地址。18.根據(jù)權(quán)利要求17所述的設(shè)備,其中所述常數(shù)為8,且所述第二常數(shù)為4。19.根據(jù)權(quán)利要求14所述的設(shè)備,其中所述預(yù)解碼信息被編碼為位的組合,以指示所述第一或第二指令地址是否與對子例行程序的隱式子例行程序調(diào)用有關(guān)。20.根據(jù)權(quán)利要求16所述的設(shè)備,其中所述用于從所述第一或第二結(jié)果中的一者選擇所述返回地址的裝置進(jìn)一步包括選擇/啟用邏輯電路,其經(jīng)配置以啟用所述顯式子例行程序資源以用于寫入。全文摘要本發(fā)明揭示一種用于模擬顯式子例行程序調(diào)用的分支預(yù)測行為的設(shè)備。所述設(shè)備包含第一輸入,其經(jīng)配置以接收指令地址;以及第二輸入。所述第二輸入經(jīng)配置以接收將所述指令地址描述為與對子例行程序的隱式子例行程序調(diào)用有關(guān)的預(yù)解碼信息。響應(yīng)于所述預(yù)解碼信息,所述設(shè)備還包含加法器,所述加法器經(jīng)配置以將常數(shù)加到所述指令地址以界定返回地址,從而致使所述返回地址存儲到顯式子例行程序資源,因此,促進(jìn)了返回調(diào)用指令的后續(xù)分支預(yù)測。文檔編號G06F9/32GK101506773SQ200780031770公開日2009年8月12日申請日期2007年8月31日優(yōu)先權(quán)日2006年8月31日發(fā)明者布萊恩·斯坦普爾,托馬斯·安德魯·薩托里烏斯,羅德尼·韋恩·史密斯,詹姆斯·諾里斯·迪芬德費(fèi)爾申請人:高通股份有限公司