亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于使用預(yù)先通知技術(shù)改變程序的順序流程的方法和設(shè)備的制作方法

文檔序號(hào):6360817閱讀:183來源:國(guó)知局
專利名稱:用于使用預(yù)先通知技術(shù)改變程序的順序流程的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明大體上涉及用于在處理器管線中處理指令的技術(shù),且更具體來說涉及用于產(chǎn)生間接分支指令的目標(biāo)地址的早期指示的技術(shù)。
背景技術(shù)
許多便攜式產(chǎn)品,例如手機(jī)、膝上型計(jì)算機(jī)、個(gè)人數(shù)據(jù)助理(PDA)或類似物,需要使用執(zhí)行支持通信和多媒體應(yīng)用的程序的處理器。用于這些產(chǎn)品的處理系統(tǒng)包含處理器、指令源、輸入操作數(shù)源以及用于存儲(chǔ)執(zhí)行結(jié)果的存儲(chǔ)空間。舉例來說,指令和輸入操作數(shù)可存儲(chǔ)在由通用寄存器和多級(jí)高速緩沖存儲(chǔ)器組成的階層式存儲(chǔ)器配置中,其包含例如指令高速緩沖存儲(chǔ)器、數(shù)據(jù)高速緩沖存儲(chǔ)器和系統(tǒng)存儲(chǔ)器。為了在程序的執(zhí)行中提供高性能,處理器通常在管線中執(zhí)行指令。處理器還可使 用推測(cè)性執(zhí)行來獲取和執(zhí)行在預(yù)測(cè)分支目標(biāo)地址處開始的指令。如果分支被誤預(yù)測(cè),那么必須從管線清空推測(cè)性執(zhí)行的指令,并且在正確的路徑地址處重新開始管線。在許多處理器指令集中,經(jīng)常有分支到從寄存器的內(nèi)容導(dǎo)出的程序目的地地址的指令。此指令通常稱為間接分支指令。由于間接分支對(duì)寄存器的內(nèi)容的依賴性,通常難以預(yù)測(cè)分支目標(biāo)地址,因?yàn)樵诿看螆?zhí)行間接分支指令時(shí)寄存器可能具有不同的值。由于校正誤預(yù)測(cè)的間接分支通常需要對(duì)間接分支指令的反向跟蹤以便在正確的分支路徑上獲取和執(zhí)行指令,因此處理器的性能可能降低。而且,誤預(yù)測(cè)指示處理器不正確地推測(cè)性獲取和開始在錯(cuò)誤分支路徑上的指令處理,從而造成用于處理并不使用的指令以及用于從管線中清空所述指令的功率增加。

發(fā)明內(nèi)容
在本發(fā)明的若干方面中,本發(fā)明認(rèn)識(shí)到有利的是使在執(zhí)行指令時(shí)可能發(fā)生的誤預(yù)測(cè)的數(shù)目最少以在處理器系統(tǒng)中改善性能且減少功率要求。為此,本發(fā)明的實(shí)施例適用于一種用于改變程序的順序流程的方法。所述方法從由第一指令識(shí)別的寄存器檢索程序指定的目標(biāo)地址,其中所述寄存器是在指令集架構(gòu)中界定。在遇到第二指令之后將推測(cè)性執(zhí)行流程改變到所述程序指定的目標(biāo)地址,其中所述第二指令經(jīng)動(dòng)態(tài)地確定為間接分支指令。本發(fā)明的另一實(shí)施例針對(duì)一種用于提供間接分支地址的預(yù)先通知的方法。分析指令序列以識(shí)別由所述指令序列的目標(biāo)地址改變指令產(chǎn)生的最當(dāng)前目標(biāo)地址。在推測(cè)性執(zhí)行利用所述最當(dāng)前目標(biāo)地址的間接分支指令之前基于所述最當(dāng)前目標(biāo)地址來準(zhǔn)備下一程序地址。本發(fā)明的另一方面針對(duì)一種用于提供間接分支目標(biāo)地址的預(yù)先通知的設(shè)備。所述設(shè)備采用寄存器,其用于保持由程序指定為間接分支指令的預(yù)先通知(ADVN)間接地址的指令存儲(chǔ)器地址。所述設(shè)備還采用下一程序地址選擇器電路,其監(jiān)視以所述寄存器為目標(biāo)的指令,且基于所述監(jiān)視的指令而從所述寄存器將在遇到所述間接分支指令之前的最當(dāng)前目標(biāo)地址選擇為所述ADVN間接地址,以用于在推測(cè)性執(zhí)行所述間接分支指令時(shí)用作下一程序地址。從以下具體實(shí)施方式
和附圖將明了本發(fā)明的更完整理解以及本發(fā)明的另外特征和優(yōu)點(diǎn)。


圖I是其中可有利地采用本發(fā)明的實(shí)施例的示范性無線通信系統(tǒng)的框圖;圖2是根據(jù)本發(fā)明的支持間接分支指令的分支目標(biāo)地址的處理器復(fù)合體的功能框圖;圖3A是根據(jù)本發(fā)明的32位預(yù)先通知(ADVN)指令的一般格式,其指定具有間接分支目標(biāo)地址值的寄存器;圖3B是根據(jù)本發(fā)明的16位ADVN指令的一般格式,其指定具有間接分支目標(biāo)地址值的寄存器;圖4A是根據(jù)本發(fā)明的用于使用先前間接分支執(zhí)行的歷史的間接分支預(yù)測(cè)的方法的代碼實(shí)例;圖4B是根據(jù)本發(fā)明的用于間接分支預(yù)先通知的方法的代碼實(shí)例,所述方法使用圖3A的ADVN指令以用于提供間接分支目標(biāo)地址的預(yù)先通知;圖5說明根據(jù)本發(fā)明的示范性第一間接分支目標(biāo)地址(BTA)預(yù)先通知電路;·圖6是根據(jù)本發(fā)明的使用自動(dòng)間接目標(biāo)推斷方法來提供間接分支目標(biāo)地址的預(yù)先通知的方法的代碼實(shí)例;圖7是根據(jù)本發(fā)明的第一間接分支預(yù)先通知(ADVN)過程,其合適地用于間接分支指令的分支目標(biāo)地址;圖8A說明示范性目標(biāo)跟蹤表(TTT);圖SB是根據(jù)本發(fā)明的第二間接分支預(yù)先通知(ADVN)過程,其合適地用于提供間接分支指令的分支目標(biāo)地址的預(yù)先通知;圖9A說明根據(jù)本發(fā)明的示范性第二間接分支目標(biāo)地址(BTA)預(yù)先通知(ADVN)電路;圖9B說明根據(jù)本發(fā)明的示范性第三間接分支目標(biāo)地址(BTA)預(yù)先通知(ADVN)電路;以及圖IOA和IOB是根據(jù)本發(fā)明的使用軟件代碼仿形方法來確定間接分支目標(biāo)地址的預(yù)先通知的方法的代碼實(shí)例。
具體實(shí)施例方式現(xiàn)在將參考附圖更完整地描述本發(fā)明,其中展示本發(fā)明的若干實(shí)施例。然而,本發(fā)明可以各種形式體現(xiàn),且不應(yīng)解釋為限于本文陳述的實(shí)施例。事實(shí)上,提供這些實(shí)施例以使得本發(fā)明將為詳盡且完整的,且將本發(fā)明的范圍完整地傳達(dá)給所屬領(lǐng)域的技術(shù)人員。根據(jù)本發(fā)明教示的用于被操作或用于實(shí)行操作的計(jì)算機(jī)程序代碼或“程序代碼”可初始以聞級(jí)編程語言來編寫,例如C、C++、I \\ \ φ、Smalltalk、JavaScript 、Visual Basic 、TSQL、Perl或各種其它編程語言。通過將高級(jí)程序代碼轉(zhuǎn)換為原生匯編程序來將以這些語言中的一者編寫的程序編譯為目標(biāo)處理器架構(gòu)。用于目標(biāo)處理器架構(gòu)的程序也可以原生匯編語言直接編寫。原生匯編程序使用機(jī)器級(jí)二進(jìn)制指令的指令助記表示。如本文使用的程序代碼或計(jì)算機(jī)可讀媒體稱為機(jī)器語言代碼,例如格式可被處理器理解的目標(biāo)代碼。圖I說明其中可有利地采用本發(fā)明的實(shí)施例的示范性無線通信系統(tǒng)100。出于說明的目的,圖I展示三個(gè)遠(yuǎn)程單元120、130和150以及兩個(gè)基站140。將認(rèn)識(shí)到,常見的無線通信系統(tǒng)可具有多得多的遠(yuǎn)程單元和基站。分別包含由組件125A、125C、125B和12 表示的硬件組件、軟件組件或兩者的遠(yuǎn)程單元120、130、150和基站140已經(jīng)調(diào)適以體現(xiàn)如下文進(jìn)一步論述的本發(fā)明。圖I展示從基站140到遠(yuǎn)程單元120、130和150的前向鏈路信號(hào)180以及從遠(yuǎn)程單元120、130和150到基站140的反向鏈路信號(hào)190。在圖I中,將遠(yuǎn)程單元120展示為移動(dòng)電話,將遠(yuǎn)程單元130展示為便攜式計(jì)算機(jī),且將遠(yuǎn)程單元150展示為無線本地回路系統(tǒng)中的固定位置遠(yuǎn)程單元。舉例來說,遠(yuǎn)程單元可替代地為手機(jī)、尋呼機(jī)、對(duì)講機(jī)、手持式個(gè)人通信系統(tǒng)(PCS)單元、例如個(gè)人數(shù)據(jù)助理等便攜式數(shù)據(jù)單元,或例如儀表讀取裝備等固定位置數(shù)據(jù)單元。盡管圖I說明根據(jù)本發(fā)明 的教示的遠(yuǎn)程單元,但本發(fā)明不限于這些示范性所說明單元。本發(fā)明的實(shí)施例可合適地用于具有間接分支指令的任何處理器系統(tǒng)中。圖2是根據(jù)本發(fā)明的處理器復(fù)合體200的功能框圖,其支持準(zhǔn)備間接分支指令的分支目標(biāo)地址的預(yù)先通知。處理器復(fù)合體200包含處理器管線202、通用寄存器堆(GPRF) 204、控制電路206、L1指令高速緩沖存儲(chǔ)器208、L1數(shù)據(jù)高速緩沖存儲(chǔ)器210以及存儲(chǔ)器階層212。控制電路206包含程序計(jì)數(shù)器(PC) 215和分支目標(biāo)地址寄存器(BTAR) 219,其如下文更詳細(xì)描述般相互作用以用于控制包含指令獲取級(jí)214的處理器管線202的目的。為了論述的清楚而未展示外圍裝置(其可連接到處理器復(fù)合體)。處理器復(fù)合體200可合適地用于圖I的硬件組件125A到12 中以用于執(zhí)行存儲(chǔ)在LI指令高速緩沖存儲(chǔ)器208中的程序代碼,利用存儲(chǔ)在LI數(shù)據(jù)高速緩沖存儲(chǔ)器210中且與存儲(chǔ)器階層212相關(guān)聯(lián)的數(shù)據(jù)。處理器管線202可在通用處理器、數(shù)字信號(hào)處理器(DSP)、專用處理器(ASP)或類似物中操作。處理器復(fù)合體200的各種組件可使用專用集成電路(ASIC)技術(shù)、現(xiàn)場(chǎng)可編程門陣列(FPGA)技術(shù)或其它可編程邏輯、離散門或晶體管邏輯或適合于既定應(yīng)用的任何其它可用技術(shù)來實(shí)施。處理器管線202包含六個(gè)主要級(jí)指令獲取級(jí)214、解碼與預(yù)先通知(ADVN)級(jí)216、分派級(jí)218、讀取寄存器級(jí)220、執(zhí)行級(jí)222以及回寫級(jí)224。雖然展示單個(gè)處理器管線202,但本發(fā)明的具有間接分支目標(biāo)地址預(yù)先通知的指令處理適用于超標(biāo)量設(shè)計(jì)和實(shí)施并行管線的其它架構(gòu)。舉例來說,為高時(shí)鐘速率設(shè)計(jì)的超標(biāo)量處理器可具有兩個(gè)或兩個(gè)以上并行管線且每一管線可將指令獲取級(jí)214、具有ADVN邏輯電路217的解碼與ADVN級(jí)216、分派級(jí)218、讀取寄存器級(jí)220、執(zhí)行級(jí)222以及回寫級(jí)224劃分為兩個(gè)或兩個(gè)以上管線式級(jí),從而增加總體處理器管線深度以便支持高時(shí)鐘速率。以處理器管線202的第一級(jí)開始,與程序計(jì)數(shù)器(PC) 215相關(guān)聯(lián)的指令獲取級(jí)214從LI指令高速緩沖存儲(chǔ)器208獲取指令以供稍后的級(jí)處理。如果指令獲取在LI指令高速緩沖存儲(chǔ)器208中未命中,意味著待獲取的指令不在LI指令高速緩沖存儲(chǔ)器208中,那么從存儲(chǔ)器階層212獲取所述指令,存儲(chǔ)器階層212可包含多級(jí)高速緩沖存儲(chǔ)器,例如第2級(jí)(L2)高速緩沖存儲(chǔ)器,以及主存儲(chǔ)器。指令可從其它源加載到存儲(chǔ)器階層212,例如引導(dǎo)只讀存儲(chǔ)器(ROM)、硬驅(qū)動(dòng)器、光盤,或從例如因特網(wǎng)等外部接口加載到存儲(chǔ)器階層212。隨后在具有ADVN邏輯電路217的解碼與ADVN級(jí)216中解碼所獲取的指令,從而提供如下文更詳細(xì)描述的用于間接分支目標(biāo)地址值的預(yù)先通知的額外能力。與ADVN邏輯電路217相關(guān)聯(lián)的是分支目標(biāo)地址寄存器(BTAR)219,其可如圖2所示位于控制電路206中,但不限于這種放置。舉例來說,BTAR 219可合適地位于解碼與ADVN級(jí)216內(nèi)。分派級(jí)218取得一個(gè)或一個(gè)以上經(jīng)解碼指令且將其分派到例如在超標(biāo)量或多線程處理器中利用的一個(gè)或一個(gè)以上指令管線。讀取寄存器級(jí)220從GPRF 204獲取數(shù)據(jù)操作數(shù)或從轉(zhuǎn)發(fā)網(wǎng)絡(luò)226接收數(shù)據(jù)操作數(shù)。轉(zhuǎn)發(fā)網(wǎng)絡(luò)226在GPRF 204周圍提供快速路徑以在每當(dāng)結(jié)果操作數(shù)從執(zhí)行級(jí)可用時(shí)供應(yīng)所述結(jié)果操作數(shù)。即使具有轉(zhuǎn)發(fā)網(wǎng)絡(luò),來自深執(zhí)行管線的結(jié)果操作數(shù)也可能花費(fèi)三個(gè)或三個(gè)以上執(zhí)行循環(huán)。在這些循環(huán)期間,讀取寄存器級(jí)220中的需要來自執(zhí)行管線的結(jié)果操作數(shù)數(shù)據(jù)的指令必須等待直到結(jié)果操作數(shù)可用為止。執(zhí)行級(jí)222執(zhí)行所分派的指令,且回寫級(jí)224將結(jié)果寫入到GPRF 204且也可在結(jié)果將用于隨后指令中的情況下通過轉(zhuǎn)發(fā)網(wǎng)絡(luò)226將結(jié)果發(fā)送回到讀取寄存器級(jí)220。由于結(jié)果可能在回寫級(jí)224中是以與編程次序相比不同的次序接收的,因此在將結(jié)果寫入到GPRF 204時(shí)回寫級(jí)224使用處理器工具來保留編程次序。下文關(guān)于詳細(xì)代碼實(shí)例來提供用于提供間接分支指令的目標(biāo)地址的預(yù)先通知的處理器管線202的更詳細(xì)描述。處理器復(fù)合體200可經(jīng)配置以在存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)媒體上的程序的控制下執(zhí)行指令。舉例來說,計(jì)算機(jī)可讀存儲(chǔ)媒體可直接在本地與處理器復(fù)合體200相關(guān)聯(lián),例如可從LI指令高速緩沖存儲(chǔ)器208 (用于對(duì)從LI數(shù)據(jù)高速緩沖存儲(chǔ)器210獲得的數(shù)據(jù)進(jìn)行操作)和存儲(chǔ)器階層212可用,或者通過例如輸入/輸出接口(未圖示)而關(guān)聯(lián)。處理器復(fù)合體200還在程序的執(zhí)行中從LI數(shù)據(jù)高速緩沖存儲(chǔ)器210和存儲(chǔ)器階層212存取數(shù)據(jù)。計(jì)算機(jī)可讀存儲(chǔ)媒體可包含隨機(jī)存取存儲(chǔ)器(RAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM)、快閃存儲(chǔ)器、只讀存儲(chǔ)器(ROM)、可編程只讀存儲(chǔ)器(PROM)、可擦除可編程只讀存儲(chǔ)器(EPROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、壓縮光盤(CD)、數(shù)字視頻光盤(DVD)、其它類型的可裝卸式盤或任何其它合適的存儲(chǔ)媒體。圖3A是根據(jù)本發(fā)明的32位ADVN指令300的一般格式,其將由編程人員或軟件工具識(shí)別的寄存器指定為保持間接分支目標(biāo)地址值。ADVN指令300在指定所識(shí)別寄存器的傳 入的間接分支指令之前向處理器復(fù)合體200通知存儲(chǔ)在所識(shí)別寄存器中的實(shí)際分支目標(biāo)地址。通過如下文更詳細(xì)描述提供預(yù)先通知,可改善處理器性能。ADVN指令300經(jīng)說明為具有條件代碼字段304,其由若干指令集架構(gòu)(ISA)利用以基于指定的一或多個(gè)旗標(biāo)而指定指令將無條件地還是有條件地執(zhí)行。操作碼305將指令識(shí)別為具有至少一個(gè)分支目標(biāo)地址寄存器字段Rm 307的分支ADVN指令。指令特定字段306允許操作碼擴(kuò)展和其它指令特定的編碼。在具有含根據(jù)指令中的指定條件代碼字段有條件地執(zhí)行的指令的此ISA的處理器中,影響分支目標(biāo)地址寄存器的最后指令的條件字段Rm將通常用作ADVN指令的條件字段,但不限于此指定。本發(fā)明的教示適用于多種指令格式和架構(gòu)規(guī)范。舉例來說,圖3B是根據(jù)本發(fā)明的16位ADVN指令350的一般格式,其指定具有間接分支目標(biāo)地址值的寄存器。16位ADVN指令350類似于32位ADVN指令300,具有操作碼355、分支目標(biāo)地址寄存器字段Rm 357以及指令特定位356。還注意到,可利用其它位格式和指令寬度來編碼ADVN指令。
間接分支型指令的一般形式可在處理器管線202中有利地使用和執(zhí)行,例如依寄存器分支Rx(BX)、相加PC、移動(dòng)Rx PC和類似物。為了描述本發(fā)明,在如下文進(jìn)一步描述的代碼序列實(shí)例中使用間接分支指令的BX Rx形式。應(yīng)注意,其它形式的分支指令通常在ISA中提供,例如具有指令指定的分支目標(biāo)地址(BTA)的分支指令、具有經(jīng)計(jì)算為指令指定的偏移地址與基地址寄存器的和的BTA的分支指令和類似指令。為了支持這些分支指令,處理器管線202可利用分支歷史預(yù)測(cè)技術(shù),其基于跟蹤例如先前分支指令執(zhí)行的條件執(zhí)行狀態(tài)且存儲(chǔ)此執(zhí)行狀態(tài)以用于預(yù)測(cè)這些指令的未來執(zhí)行。處理器管線202可支持此分支歷史預(yù)測(cè)技術(shù)且另外支持使用ADVN指令來提供間接分支目標(biāo)地址的預(yù)先通知。舉例來說,處理器管線202可使用分支歷史預(yù)測(cè)技術(shù)直到遇到ADVN指令為止,所述ADVN指令隨后使用如本文描述的ADVN工具來超馳分支目標(biāo)歷史預(yù)測(cè)技術(shù)。在本發(fā)明的其它實(shí)施例中,處理器管線202還可經(jīng)設(shè)置以監(jiān)視使用ADVN指令的準(zhǔn)確性,且當(dāng)ADVN識(shí)別的目標(biāo)地址不正確一次或一次以上時(shí)對(duì)于后續(xù)遇到同一間接分支忽 略ADVN指令。還應(yīng)注意,對(duì)于支持具有ADVN指令的ISA的處理器的特定實(shí)施方案,處理器 可將遇到的ADVN指令處理為無操作(NOP)指令或?qū)z測(cè)到的ADVN指令標(biāo)記為未定義。此夕卜,ADVN指令可在具有動(dòng)態(tài)分支歷史預(yù)測(cè)電路的處理器管線中被處理為Ν0Ρ,所述動(dòng)態(tài)分支歷史預(yù)測(cè)電路具有足夠的硬件資源來跟蹤在代碼區(qū)段的執(zhí)行期間遇到的分支且如下文描述針對(duì)超過所述動(dòng)態(tài)分支歷史預(yù)測(cè)電路可用的硬件資源的代碼區(qū)段啟用ADVN指令。而且,在動(dòng)態(tài)分支歷史預(yù)測(cè)電路具有用于預(yù)測(cè)間接分支目標(biāo)地址的不良結(jié)果的情況下,ADVN指令可結(jié)合動(dòng)態(tài)分支歷史預(yù)測(cè)電路來使用以用于提供間接分支目標(biāo)地址的預(yù)先通知。舉例來說,從動(dòng)態(tài)分支歷史預(yù)測(cè)電路產(chǎn)生的經(jīng)預(yù)測(cè)分支目標(biāo)地址可由通過使用ADVN指令提供的目標(biāo)地址超馳。另外,呈現(xiàn)有利的自動(dòng)間接目標(biāo)推斷方法以用于提供如下文描述的間接分支目標(biāo)地址的預(yù)先通知。圖4A是根據(jù)本發(fā)明的用于間接分支預(yù)測(cè)的方法的代碼實(shí)例400,所述方法在未遇到ADVN指令的情況下使用一般歷史方法來預(yù)測(cè)間接分支執(zhí)行。代碼實(shí)例400的執(zhí)行是參考處理器復(fù)合體200來描述。為了此實(shí)例的目的,指令A(yù)到D401到404可為循序算術(shù)指令集,其基于指令A(yù)到D401到404的分析并不影響GPRF 204中的寄存器R0。寄存器RO由加載RO指令405用用于間接分支指令BX RO 406的目標(biāo)地址加載。為了此實(shí)例的目的,指令401到406中的每一者經(jīng)指定為無條件地執(zhí)行。還假定,加載RO指令405在LI指令高速緩沖存儲(chǔ)器208中可用,使得當(dāng)指令A(yù)401在執(zhí)行級(jí)222中完成執(zhí)行時(shí),已在獲取級(jí)214中獲取加載RO指令405。隨后獲取間接分支BX RO指令406,同時(shí)在解碼與ADVN級(jí)216中解碼加載RO指令405。在下一管線級(jí)中,準(zhǔn)備加載RO指令405以經(jīng)分派用于執(zhí)行,且解碼BXRO指令406。而且,在解碼與ADVN級(jí)216中,基于先前間接分支執(zhí)行的歷史而做出BX RO指令406是被取得還是未被取得的預(yù)測(cè),且還預(yù)測(cè)間接分支的目標(biāo)地址。對(duì)于此實(shí)例,BX RO指令406經(jīng)指定為被無條件地“取得”且ADVN邏輯電路217僅需要將間接分支目標(biāo)地址預(yù)測(cè)為地址X?;诖祟A(yù)測(cè),引導(dǎo)處理器管線202開始推測(cè)性獲取從地址X開始的指令,地址X在給定“取得”狀態(tài)時(shí)通常是從當(dāng)前指令尋址的重定向。處理器管線202還清空管線中在間接分支BX RO指令406之后的任何指令,如果這些指令不與在地址X處開始的指令相關(guān)聯(lián)。處理器管線202繼續(xù)獲取指令直到在執(zhí)行級(jí)中可確定經(jīng)預(yù)測(cè)地址X是否經(jīng)正確預(yù)測(cè)為止。在處理指令的同時(shí),可能遇到暫停情形,例如關(guān)于加載RO指令405的執(zhí)行可能發(fā)生的暫停情形。加載RO指令405的執(zhí)行可在LI數(shù)據(jù)高速緩沖存儲(chǔ)器中存在命中的情況下無延遲地返回來自LI數(shù)據(jù)高速緩沖存儲(chǔ)器210的值。然而,加載RO指令405的執(zhí)行在LI數(shù)據(jù)高速緩沖存儲(chǔ)器210中存在未命中的情況下可能花費(fèi)大量周期。加載指令可使用來自GPRF 204的寄存器來供應(yīng)基地址,且隨后在執(zhí)行級(jí)222中將中間值加到基地址以產(chǎn)生有效地址。所述有效地址經(jīng)由數(shù)據(jù)路徑232發(fā)送到LI數(shù)據(jù)高速緩沖存儲(chǔ)器210。在LI數(shù)據(jù)高速緩沖存儲(chǔ)器210中的未命中的情況下,必須從可包含例如L2高速緩沖存儲(chǔ)器和主存儲(chǔ)器的存儲(chǔ)器階層212獲取數(shù)據(jù)。此外,數(shù)據(jù)可能在L2高速緩沖存儲(chǔ)器中未命中,從而導(dǎo)致從主存儲(chǔ)器獲取數(shù)據(jù)。舉例來說,LI數(shù)據(jù)高速緩沖存儲(chǔ)器210中的未命中、存儲(chǔ)器階層212中的L2高速緩沖存儲(chǔ)器中的未命中以及對(duì)主存儲(chǔ)器的存取可能需要數(shù)百個(gè)CPU周期來獲取數(shù)據(jù)。在LI數(shù)據(jù)高速緩沖存儲(chǔ)器未命中之后獲取數(shù)據(jù)所花費(fèi)的周期期間,BX RO指令406在處理器管線202中暫停直到運(yùn)行中操作數(shù)可用為止。所述暫停可視為在讀取寄存器級(jí)220中或執(zhí)行級(jí)222的開始處發(fā)生。應(yīng)注意,在具有多個(gè)指令管線的處理器中,加載RO指令405的暫??赡懿⒉粫和T谌魏纹渌芫€中發(fā)生的推測(cè)性操作。由于LI D高速緩沖存儲(chǔ)器210中的未命中所造成的暫停的長(zhǎng)度,可能推測(cè)性獲取大量指令,這在存在間接分支目標(biāo)地址的不正確預(yù)測(cè)的情況下可能顯著影響性能和功率使用??赏ㄟ^使用作為圖2的控制電路206的部分的保持電路來在處理器管線中產(chǎn)生暫停。所述保持電路產(chǎn)生保持信號(hào),其可例如用以選通管線級(jí)寄存器以暫停管線中的指令。對(duì)于圖2的處理器管線202,可例如在讀取寄存器級(jí)中在并非所有輸入都可用的情況下激活保持信號(hào),使得管線保持等待完成指令執(zhí)行所必要的輸入的到達(dá)。當(dāng)所有必要的操作數(shù)變?yōu)榭捎脮r(shí)釋放所述保持信號(hào)。在未命中的解析后,將加載數(shù)據(jù)經(jīng)由路徑240發(fā)送到作為回寫級(jí)224的部分的回寫操作。隨后將操作數(shù)寫入到GPRF 204且也可發(fā)送到上文描述的轉(zhuǎn)發(fā)網(wǎng)絡(luò)226?,F(xiàn)在可將RO的值與經(jīng)預(yù)測(cè)地址X進(jìn)行比較以確定是否需要清空推測(cè)性獲取的指令。由于用以存儲(chǔ)分支目標(biāo)地址的寄存器在每次執(zhí)行間接分支指令時(shí)可能具有不同的值,因此存在將使用當(dāng)前預(yù)測(cè)方法清空推測(cè)性獲取的指令的高概率。圖4B是根據(jù)本發(fā)明的用于間接分支預(yù)先通知的方法的代碼實(shí)例420,所述方法使用圖3A的ADVN指令以用于提供間接分支目標(biāo)地址的預(yù)先通知?;趫D4A的指令A(yù)到D401到404不影響分支目標(biāo)地址寄存器RO的先前提到的分析,加載RO指令405可在指令序列中向上移動(dòng)以例如在圖4B的代碼實(shí)例中放置于指令A(yù)421之后。另外,ADVN RO指令423,例如圖3A的ADVN指令300,直接放置于加載RO指令422之后作為用于間接BX RO指令427的分支目標(biāo)地址的預(yù)先通知的先行輔助。在圖4B的新指令序列421到427流過處理器管線202時(shí),當(dāng)加載RO指令422在執(zhí)行級(jí)中時(shí)ADVN RO指令423將在讀取級(jí)220中,且指令D426將在獲取級(jí)214中。對(duì)于加載RO指令422在LI數(shù)據(jù)高速緩沖存儲(chǔ)器210中命中的情形,RO的值在加載RO執(zhí)行結(jié)束之前是已知的且與RO值一起經(jīng)由轉(zhuǎn)發(fā)網(wǎng)絡(luò)226快速轉(zhuǎn)發(fā)到讀取級(jí),RO值在讀取級(jí)220的末尾或在用于ADVN RO指令的執(zhí)行級(jí)的開始之前也是已知的。在間接分支指令進(jìn)入解碼與ADVN級(jí)216之前確定RO值允許ADVN邏輯電路217將確定的RO值選擇為BX RO指令427的分支目標(biāo)地址而不會(huì)有任何額外的周期延遲。應(yīng)注意,BX RO指令427在管線中是動(dòng)態(tài)識(shí)別的。雖然通常ADVN指定的寄存器(例如此代碼實(shí)例中的R0)將保持與間接分支指定的目標(biāo)地址寄存器相同的地址,但可能遇到異常。在針對(duì)此地址異常的一種方法中,不將ADVN指定的寄存器值與下一遇到的間接分支指令指定的寄存器值進(jìn)行比較,且如果選擇了不正確的目標(biāo)地址,那么在管線中稍后會(huì)檢測(cè)到錯(cuò)誤且采取適當(dāng)動(dòng)作,例如清空管線。在一不同方法中,將ADVN指定的寄存器值與下一遇到的間接分支指令指定的寄存器值進(jìn)行比較,且在找到匹配之前將不針對(duì)推測(cè)性執(zhí)行做出改變,通常情況將是這樣。如果未找到匹配,那么管線將如同未遇到ADVN指令那樣操作。應(yīng)注意,對(duì)于處理器管線202,對(duì)于在LI數(shù)據(jù)高速緩沖存儲(chǔ)器210中存在命中的情況,加載RO指令和ADVN RO指令可能已放置在指令B之后而不會(huì)引起任何進(jìn)一步延遲。然而,如果在LI數(shù)據(jù)高速緩沖存儲(chǔ)器中存在未命中,那么將起始暫停情形。對(duì)于LI數(shù)據(jù)高速緩沖存儲(chǔ)器210中的未命中的此情況,加載RO和ADVN RO指令將需要基于管線深度而放置在BX RO指令之前適當(dāng)數(shù)目個(gè)未命中延遲周期(如果可能的話)以避免引起任何進(jìn)一步延遲。 大體上,ADVN指令在代碼序列中的放置優(yōu)選為在BX指令之前N個(gè)指令。在處理器管線的上下文中,N表示接收間接分支指令的級(jí)與辨識(shí)ADVN指定的分支目標(biāo)地址的級(jí)(例指令獲取級(jí)214和執(zhí)行級(jí)222)之間的級(jí)的數(shù)目。在與轉(zhuǎn)發(fā)網(wǎng)絡(luò)226 —起使用的示范性處理器管線202中,N為二,且在不使用轉(zhuǎn)發(fā)網(wǎng)絡(luò)226的情況下,N為三。對(duì)于例如使用轉(zhuǎn)發(fā)網(wǎng)絡(luò)的處理器管線,如果BX指令在ADVN指令之前N等于二個(gè)指令,那么ADVN目標(biāo)地址寄存器Rm值是由于轉(zhuǎn)發(fā)網(wǎng)絡(luò)226而在讀取寄存器級(jí)220的末尾處確定。在例如針對(duì)ADVN指令使用并不使用轉(zhuǎn)發(fā)網(wǎng)絡(luò)226的處理器管線的替代實(shí)施例中,如果BX指令在ADVN指令之前N等于三個(gè)指令,那么ADVN目標(biāo)地址寄存器Rm值是在BX指令進(jìn)入解碼與ADVN級(jí)216時(shí)在執(zhí)行級(jí)222的末尾處確定。指令的數(shù)目N也可取決于額外的因素,包含上部管線中的暫停(例如歸因于指令獲取級(jí)214中的延遲)、可能改變高達(dá)超標(biāo)量處理器中發(fā)布的K個(gè)指令的指令發(fā)布寬度,以及例如在ADVN與BX指令之間出現(xiàn)的中斷。大體上,ISA可推薦盡可能早地調(diào)度ADVN指令,以最小化這些因素的影響。雖然圖4B是以單個(gè)ADVN RO指令來說明,但在遇到任何間接分支之前可例示多個(gè)ADVN指令。所述多個(gè)ADVN指令以FIFO方式應(yīng)用于接下來遇到的間接分支,例如可通過使用堆棧設(shè)備而獲得。應(yīng)注意,下一遇到的間接分支指令在編程次序上大體上與下一間接分支指令相同。可在確定使用多個(gè)ADVN指令是否適當(dāng)之前評(píng)估可能對(duì)此一般規(guī)則引起異常的代碼。圖5說明根據(jù)本發(fā)明的示范性第一間接分支目標(biāo)地址(BTA)預(yù)先通知電路500。第一間接BTA預(yù)先通知電路500包含ADVN執(zhí)行電路504、分支目標(biāo)地址寄存器(BTAR)電路508、BX解碼電路512、選擇電路516,以及用于響應(yīng)于影響PC地址產(chǎn)生的輸入的下一程序計(jì)數(shù)器(PC)電路520。在ADVN執(zhí)行電路504中執(zhí)行ADVN Rx指令之后,將Rx的值加載到BTAR電路508中。當(dāng)在BX解碼電路512中解碼BX指令時(shí)且如果BTAR如選擇電路516所選擇是有效的,那么將BTAR電路508中的BTA值由下一 PC電路520用作下一獲取地址。也可在BTAR有效處于作用中時(shí)使用BTAR有效指示來停止獲取,從而節(jié)省原本將與獲取錯(cuò)誤地址處的指令相關(guān)聯(lián)的功率。
圖6是根據(jù)本發(fā)明的使用自動(dòng)間接目標(biāo)推斷方法來提供間接分支目標(biāo)地址的預(yù)先通知的方法的代碼實(shí)例600。在代碼序列601到607中,指令A(yù)601、B603、C604和D606與先前描述的相同,且因此不影響分支目標(biāo)地址寄存器。兩個(gè)指令加載RO指令602和相加R0、R7、R8指令605影響此實(shí)例的分支目標(biāo)寄存器R0。間接分支指令BX RO 607與圖4A和4B的先前實(shí)例中使用的相同。在代碼實(shí)例600中,即使加載RO指令602和相加R0、R7、R8指令605影響B(tài)TA寄存器R0,相加R0、R7、R8指令605也是影響B(tài)TA寄存器RO的內(nèi)容的最后指令。通過跟蹤代碼序列600的執(zhí)行模式,自動(dòng)間接目標(biāo)推斷方法電路可以合理的準(zhǔn)確性提供預(yù)先通知在BX RO指令607進(jìn)入解碼與ADVN級(jí)216時(shí)RO的最新值是否應(yīng)用作ADVNBTA。在一個(gè)實(shí)施例中,寫入到RO的最后的值將在BX RO指令進(jìn)入解碼與ADVN級(jí)216時(shí)用·作BX RO指令的值。此實(shí)施例是基于如下評(píng)估對(duì)于與此BX RO指令相關(guān)聯(lián)的代碼序列,寫入到RO的最后的值可被估計(jì)為正確值歷時(shí)較高百分比的時(shí)間。圖7是根據(jù)本發(fā)明的第一間接分支預(yù)先通知(ADVN)過程700,其合適地用以提供間接分支指令的分支目標(biāo)地址的預(yù)先通知。第一間接分支ADVN過程700利用最后寫入器表,其可通過寄存器堆編號(hào)來尋址或標(biāo)引,使得與具有32個(gè)條目RO到R31的寄存器堆相關(guān)聯(lián)的最后寫入器表將可通過索引值O到31來尋址。類似地,如果寄存器堆具有較少條目,例如14個(gè)條目RO到R13,那么最后寫入器表將可通過索引值O到13來尋址。最后寫入器表中的條目中的每一者存儲(chǔ)一指令地址。第一間接分支ADVN過程700還利用分支目標(biāo)地址寄存器更新器關(guān)聯(lián)性存儲(chǔ)器(BTARU),其具有通過指令地址來存取的若干條目且每條目含有一有效位。在進(jìn)入第一間接分支ADVN過程700之前,初始化最后寫入器表以使指令地址無效,例如為零,其中通常將不會(huì)發(fā)現(xiàn)間接分支ADVN代碼序列的指令地址且BTARU條目被初始化為無效狀態(tài)。第一間接分支ADVN過程700以經(jīng)獲取指令流702開始。在決策框704處,做出是否接收到對(duì)可能是間接分支指令的目標(biāo)寄存器的任一寄存器Rm進(jìn)行寫入的指令的確定。舉例來說,在具有14條目寄存器堆(具有寄存器RO到R13)的處理器中,將跟蹤對(duì)寄存器RO到R13中的任一者進(jìn)行寫入的指令,作為間接分支指令的可能目標(biāo)寄存器。對(duì)于監(jiān)視具有間接分支指令的代碼區(qū)段的多次通過的技術(shù),可通過在第一次通過時(shí)識(shí)別間接分支指令來確定特定Rm。舉例來說,在遇到指定相同Rm的間接分支之前接收具有一個(gè)以上Rm改變指令的代碼序列。以多次通過過程700來處理此代碼序列。在過程700的第一次通過中,在遇到間接分支指令之前,將最后的Rm改變指令的地址存儲(chǔ)在最后寫入器表中的經(jīng)標(biāo)引Rm地址處,從而覆寫先前Rm改變指令的地址。在遇到間接分支指令之前在第一次通過時(shí)不更新BTAR,因?yàn)樵诘谝淮瓮ㄟ^中并不知道何時(shí)已接收到最后的Rm改變指令。遇到的間接分支指令斷言一有效位以指示改變了經(jīng)指定Rm的最后指令是將用于存儲(chǔ)在經(jīng)指定Rm中的目標(biāo)地址的預(yù)先通知的有效指令。在第二次通過過程700中,最后Rm改變指令將引起更新BTAR,且當(dāng)遇到(例如在解碼級(jí)中識(shí)別出)間接分支指令時(shí),BTAR可用于分支目標(biāo)地址的預(yù)先通知。返回到框704,如果所接收的指令不影響Rm,那么第一間接分支ADVN過程700前進(jìn)到?jīng)Q策框706。在決策框706處,做出所接收的指令是否為間接分支指令(例如BXRm指令)的確定。如果所接收的指令不是間接分支指令,那么第一間接分支ADVN過程700前進(jìn)到?jīng)Q策框704以評(píng)估下一接收的指令。返回到?jīng)Q策框704,如果所接收的指令不影響Rm,那么第一間接分支ADVN過程700在第一次通過框708、710和712中前進(jìn)到框708。在框708處,在最后寫入器表的Rm地址處加載影響Rm的指令的地址。在框710處,檢查BTARU是否有在所述指令地址處的有效位。在決策框712處,做出在BTARU中的指令地址條目處是否發(fā)現(xiàn)經(jīng)斷言有效位的確定。如果未發(fā)現(xiàn)經(jīng)斷言有效位,例如在第一次通過過程框708、710和712中可能發(fā)生,那么第一間接分支ADVN過程返回到?jīng)Q策框704以評(píng)估下一接收的指令。返回到?jīng)Q策框706,如果接收到間接分支指令(例如BX Rm指令),那么第一間接分支ADVN過程700前進(jìn)到框714。在框714處,檢查最后寫入器表是否有在地址Rm處的有效指令地址。在決策框716處,做出在Rm地址處是否發(fā)現(xiàn)有效指令地址的確定。如果未發(fā)現(xiàn)有效指令地址,那么第一間接分支ADVN過程700前進(jìn)到框718。在框718處,將在指令地址處的BTARU位條目設(shè)定為無效,且第一間接分支ADVN過程700返回到?jīng)Q策框704以評(píng)估下一接收的指令。返回到?jīng)Q策框716,如果發(fā)現(xiàn)有效指令地址,那么第一間接分支ADVN過程700前進(jìn)到框720。如果存在待決的更新,那么第一間接分支ADVN過程700可暫停直到待決的更新被解析為止。在框720處,將指令地址處的BTARU位條目設(shè)定為有效,且第一間接分支ADVN過程700前進(jìn)到?jīng)Q策框722。在決策框722處,做出分支目標(biāo)地址寄存器(BTAR)是否具有有效地址的確定。如果BTAR具有有效地址,那么第一間接分支ADVN過程700前進(jìn)到框724。在框724處,使用存儲(chǔ)的BTAR值提供間接分支指令Rm的預(yù)先通知,且第一間接分支ADVN過程700返回到?jīng)Q策框704以評(píng)估下一接收的指令。返回到?jīng)Q策框722,如果BTAR經(jīng)確定為不具有有效地址,那么第一間接分支ADVN過程700返回到?jīng)Q策框704以評(píng)估下一·接收的指令。返回到?jīng)Q策框704,如果所接收的指令確實(shí)影響間接分支指令的Rm,例如在第二次通過第一間接分支ADVN過程700中可能發(fā)生,那么第一間接分支ADVN過程700在第二次通過框708、710和712中前進(jìn)到框708。在框708處,在最后寫入器表的Rm地址處加載影響Rm的指令的地址。在框710處,檢查BTARU是否有在所述指令地址處的有效位。在決策框712處,做出在BTARU中的指令地址條目處是否發(fā)現(xiàn)經(jīng)斷言有效位的確定。如果發(fā)現(xiàn)經(jīng)斷言有效位,例如在第二次通過過程框708、710和712中可能發(fā)生,那么第一間接分支ADVN過程700前進(jìn)到框726。在框726處,用存儲(chǔ)在Rm中的執(zhí)行指令的BTAR更新器結(jié)果來更新分支目標(biāo)地址寄存器(BTAR),例如圖2的BTAR 219。第一間接分支ADVN過程700隨后返回到?jīng)Q策框704以評(píng)估下一接收的指令。在圖8A和8B中說明的另一自動(dòng)間接分支目標(biāo)地址過程確定在間接分支指令進(jìn)入解碼級(jí)時(shí)存儲(chǔ)在程序寄存器中的最新值是否應(yīng)用作分支目標(biāo)地址(BTA)的預(yù)先通知。圖8A說明示范性目標(biāo)跟蹤表(TTT) 800,其具有TTT條目802,TTT條目802具有六個(gè)字段,包含條目有效位804、標(biāo)記字段805、寄存器Rm地址806、數(shù)據(jù)有效位807,和上/下計(jì)數(shù)器值808,以及Rm數(shù)據(jù)字段809。TTT 800可存儲(chǔ)在例如控制電路206中的存儲(chǔ)器中,所述存儲(chǔ)器可由解碼與ADVN級(jí)216和處理器管線202的其它管級(jí)存取。舉例來說,較低的管級(jí)(例如執(zhí)行級(jí)222)將Rm數(shù)據(jù)寫入到Rm數(shù)據(jù)字段809中。如下文更詳細(xì)描述,間接分支指令在獲取到TTT條目且所述TTT條目不具有已在TTT表中的有效匹配標(biāo)記時(shí)分配所述TTT條目。標(biāo)記字段805可為一完整指令地址或其一部分。影響寄存器值的指令檢查TTT 800中的有效條目是否有如Rm地址806中指定的匹配Rm字段。如果發(fā)現(xiàn)匹配,那么到所述Rm中指定的地址的間接分支指令在TTT表800中具有已建立的條目,例如TTT條目802。圖SB是根據(jù)本發(fā)明的合適地用以提供間接分支指令的分支目標(biāo)地址的預(yù)先通知(ADVN)的第二間接分支預(yù)先通知過程850。第二間接分支ADVN過程850以經(jīng)獲取指令流852開始。在決策框854處,做出是否接收到間接分支(BX Rm)指令的確定。如果未接收到BX Rm指令,那么第二間接分支ADVN過程850前進(jìn)到?jīng)Q策框856。在決策框856處,做出所接收的指令是否影響Rm寄存器的確定。此處做出的確定是所接收的指令是否將更新可能潛在地由BX Rm指令使用的任何寄存器。大體上,影響可由間接分支指令指定的寄存器Rm的任一指令都是通過硬件標(biāo)注為待檢查的可能的候選指令,如下文更詳細(xì)描述。如果所接收的指令不影響Rm寄存器,那么第二間接分支ADVN過程850前進(jìn)到?jīng)Q策框854以評(píng)估下一接收的指令。返回到?jīng)Q策框856,如果所接收的指令確實(shí)影響Rm寄存器,那么第二間接分支 ADVN過程850前進(jìn)到框858。在框858處,檢查TTT 800是否存在有效條目,以查看所接收指令是否將實(shí)際上改變BX指令將需要的寄存器。在決策框860處,做出是否在TTT 800中已發(fā)現(xiàn)任何匹配的Rm的確定。如果在TTT 800中未發(fā)現(xiàn)至少一個(gè)匹配的Rm,那么第二間接分支ADVN過程850返回到?jīng)Q策框854以評(píng)估下一接收的指令。然而,如果在TTT 800中發(fā)現(xiàn)至少一個(gè)匹配的Rm,那么第二間接分支ADVN過程850前進(jìn)到框862。在框862處,遞增與條目相關(guān)聯(lián)的上/下計(jì)數(shù)器。所述上/下計(jì)數(shù)器指示有多少在運(yùn)行中的指令將改變所述特定Rm。應(yīng)注意,當(dāng)Rm改變指令執(zhí)行時(shí),遞減條目的上/下計(jì)數(shù)器值808,設(shè)定數(shù)據(jù)有效位807,且將執(zhí)行的Rm數(shù)據(jù)結(jié)果寫入到Rm數(shù)據(jù)字段809。如果寄存器改變指令無序地執(zhí)行,那么當(dāng)提交執(zhí)行結(jié)果以改變處理器狀態(tài)時(shí),呈編程次序的最新寄存器改變指令取消編程次序較老的指令對(duì)Rm數(shù)據(jù)字段的寫入,進(jìn)而避免了寫入之后寫入的危險(xiǎn)。對(duì)于具有無分支條件指令的處理器指令集架構(gòu)(ISA),無分支條件指令可具有評(píng)估為不執(zhí)行狀態(tài)的條件。因此,為了評(píng)估一條目的上/下計(jì)數(shù)器值808的目的,評(píng)估為不執(zhí)行的無分支條件指令的目標(biāo)寄存器Rm可被讀取為源操作數(shù)。所讀取的Rm值具有最新的目標(biāo)寄存器Rm值。這樣,即使不執(zhí)行具有帶有匹配的有效標(biāo)記的Rm的無分支條件指令,也可用最新值更新Rm數(shù)據(jù)字段809,且相應(yīng)地遞減上/下計(jì)數(shù)器值808。第二間接分支ADVN過程850隨后返回到?jīng)Q策框854以評(píng)估下一接收的指令。返回到?jīng)Q策框854,如果所接收的指令是BX Rm指令,那么第二間接分支ADVN過程850前進(jìn)到框866。在框866處,檢查TTT 800是否存在有效條目。在決策框868處,做出在TTT 800中是否發(fā)現(xiàn)匹配的標(biāo)記的確定。如果未發(fā)現(xiàn)匹配的標(biāo)記,那么第二間接分支ADVN過程850前進(jìn)到框870。在框870處,在TTT 800中建立新條目,其包含將新條目有效位804設(shè)定為有效的指示值,將BX的Rm放置于Rm字段806中,清除數(shù)據(jù)有效位807,以及清除與新條目相關(guān)聯(lián)的上/下計(jì)數(shù)器。第二間接分支ADVN過程850隨后返回到?jīng)Q策框854以評(píng)估下一接收的指令。返回到?jīng)Q策框868,如果發(fā)現(xiàn)匹配的標(biāo)記,那么第二間接分支ADVN過程850前進(jìn)到?jīng)Q策框872。在決策框872處,做出條目的上/下計(jì)數(shù)器是否為零的確定。如果條目的上/下計(jì)數(shù)器非零,那么存在仍在運(yùn)行中的Rm改變指令,且第二間接分支ADVN過程850前進(jìn)到步驟874。在步驟874處,在處理器管線中暫停BX指令直到條目的上/下計(jì)數(shù)器已經(jīng)遞減到零為止。在框876處,將作為對(duì)Rm數(shù)據(jù)的最后改變的TTT條目的Rm數(shù)據(jù)用作間接分支BX指令的目標(biāo)。第二間接分支ADVN過程850隨后返回到?jīng)Q策框854以評(píng)估下一接收的指令。返回到?jīng)Q策框872,如果條目的上/下計(jì)數(shù)器等于零,那么第二間接分支ADVN過程850前進(jìn)到?jīng)Q策框878。在決策框878處,做出條目的數(shù)據(jù)有效位是否等于一的確定。如果條目的數(shù)據(jù)有效位等于一,那么第二間接分支ADVN過程850前進(jìn)到框876。在框876處,將TTT條目的Rm數(shù)據(jù)用作間接分支BX指令的目標(biāo)。第二間接分支ADVN過程850隨后返回到?jīng)Q策框854以評(píng)估下一接收的指令。返回到?jīng)Q策框878,如果條目的數(shù)據(jù)有效位不等于一,那么第二間接分支ADVN過程850返回到?jīng)Q策框854以評(píng)估下一接收的指令。在過程850中的此點(diǎn)處,存在對(duì)響應(yīng)于所接收Bx指令的許多替代方案。在第一替代方案中,可將TTT條目的Rm數(shù)據(jù)用作間接分支BX指令的目標(biāo),因?yàn)锽X Rm標(biāo)記匹配于一有效條目且上/下計(jì)數(shù)器值為零。在第二替代 方案中,引導(dǎo)處理器管線202根據(jù)未采取的路徑來獲取指令以避免沿著不正確的路徑進(jìn)行獲取。由于Rm數(shù)據(jù)字段中的數(shù)據(jù)不是有效的,因此甚至不保證Rm數(shù)據(jù)指向可執(zhí)行存儲(chǔ)器或已經(jīng)授權(quán)進(jìn)行存取的存儲(chǔ)器。沿著循序路徑(未采取的路徑)的獲取對(duì)于被準(zhǔn)許存取的存儲(chǔ)器來說是最可能的。對(duì)于前兩種替代方案中的任一者可能發(fā)生的不正確順序是在處理器管線的較后的級(jí)中發(fā)現(xiàn)且處置。在第三替代方案中,弓I導(dǎo)處理器管線202在BX指令之后停止獲取以便節(jié)省功率且等待BX校正序列重新建立獲取操作。圖9A說明根據(jù)本發(fā)明的示范性第二間接分支目標(biāo)地址(BTA)預(yù)先通知(ADVN)電路900。BTA ADVN電路900與圖2的處理器復(fù)合體200的處理器管線202和控制電路206相關(guān)聯(lián),且根據(jù)第二間接分支ADVN過程850操作。第二間接BTA ADVN電路900包括解碼電路902、檢測(cè)電路904、預(yù)先通知(ADVN)電路906,以及具有展示于電路之間的基本控制信號(hào)路徑的校正電路908。ADVN電路906包含確定電路910、跟蹤I電路912和最當(dāng)前BTA電路914。校正電路908包含跟蹤2電路920和正確管電路922。解碼電路902對(duì)來自圖2的指令獲取級(jí)214的傳入指令進(jìn)行解碼。檢測(cè)電路904監(jiān)視經(jīng)解碼指令是否有間接分支指令或Rm改變指令。在首次檢測(cè)到間接分支指令后,ADVN電路906即刻建立新目標(biāo)跟蹤表(TTT)條目,例如圖8A的TTT條目802,且識(shí)別由檢測(cè)到的間接分支指令指定的分支目標(biāo)地址(BTA)寄存器,如圖SB的框870處描述。根據(jù)框862,在檢測(cè)到與有效TTT條目和匹配的Rm值相關(guān)聯(lián)的Rm改變指令后即刻遞增上/下計(jì)數(shù)器值808,且當(dāng)執(zhí)行Rm改變指令時(shí)遞減上/下計(jì)數(shù)器值808。在間接分支指令的連續(xù)檢測(cè)后,ADVN電路906遵循圖8B的框872到878描述的操作。校正電路908基于不正確的BTA預(yù)先通知而清空管線。在ADVN電路906中,最當(dāng)前BTA電路914使用例如TTT條目(例如圖8A的TTT條目802)來提供間接分支指令(例如BX RO指令607)的BTA的預(yù)先通知。ADVN BTA可用以重新引導(dǎo)處理器管線202獲取在ADVN BTA處開始的指令以用于推測(cè)性執(zhí)行。在校正電路908中,跟蹤2電路920監(jiān)視處理器管線202的執(zhí)行級(jí)222是否有BXRO指令607的執(zhí)行狀態(tài)。如果正確地提供ADVN BTA,那么允許推測(cè)性獲取的指令在處理器管線中繼續(xù)。如果未正確地提供ADVN BTA,那么從處理器管線清空推測(cè)性獲取的指令,且將管線重新引導(dǎo)回到正確的指令序列。還向檢測(cè)電路904告知不正確的ADVN狀態(tài),且響應(yīng)于此狀態(tài),檢測(cè)電路904可經(jīng)編程以停止識(shí)別用于預(yù)先通知的此特定間接分支指令。另外,向ADVN電路906告知不正確的ADVN狀態(tài),且響應(yīng)于此狀態(tài),ADVN電路906可經(jīng)編程以僅允許TTT 800的特定條目的預(yù)先通知。圖9B說明根據(jù)本發(fā)明的示范性第三間接分支目標(biāo)地址(BTA)預(yù)先通知(ADVN)電路950。第三間接BTA ADVN電路950包含下一程序計(jì)數(shù)器(PC)電路952、解碼電路954、執(zhí)行電路956以及目標(biāo)跟蹤表(TTT)電路958,且說明尋址一指令高速緩沖存儲(chǔ)器(例如圖2的LI指令高速緩沖存儲(chǔ)器208)以獲取經(jīng)轉(zhuǎn)發(fā)到解碼電路954的指令的方面。第三間接BTA ADVN電路950根據(jù)第二間接分支ADVN過程850操作。舉例來說,解碼電路954檢測(cè)間接分支(例如BX指令)或Rm改變指令,且向TTT電路958通知已檢測(cè)到BX指令或Rm改變指令且供應(yīng)適當(dāng)?shù)男畔?,例如BX指令的Rm值。TTT電路958也含有上/下計(jì)數(shù)器,其如圖SB的框862處描述般遞增或遞減以提供上/下計(jì)數(shù)器值808。執(zhí)行電路956在執(zhí)行Rm改變指令后即刻提供Rm數(shù)據(jù)值和遞減指示。執(zhí)行電路956還取決于預(yù)先通知的成功或失敗的狀態(tài)而提供分支校正地址。如框876處描述,選擇TTT電路958中的條目,且將所選擇條目的Rm數(shù)據(jù)字段作為目標(biāo)地址的部分供應(yīng)到下一 PC電路952。圖IOA是根據(jù)本發(fā)明的使用軟件代碼仿形方法來確定間接分支目標(biāo)地址的預(yù)先通知的方法的代碼實(shí)例1000。在代碼序列1001到1007中,指令A(yù)1001、B1003、C1004和D1005與先前描述的相同,且因此不影響分支目標(biāo)地址寄存器。指令1002是移動(dòng)RO目標(biāo)A指令1002,其無條件地將一值從目標(biāo)A移動(dòng)到寄存器R0。指令1006是有條件移動(dòng)RO目標(biāo)B指令1006,其有條件地執(zhí)行大約10%的時(shí)間。用于確定指令執(zhí)行的條件可從在如指令集架構(gòu)中通常指定的各種算術(shù)、邏輯和其它功能指令的執(zhí)行中由處理器設(shè)定的條件旗標(biāo)來形成。這些條件旗標(biāo)可存儲(chǔ)在位于控制邏輯206中的程序可讀旗標(biāo)寄存器或條件代碼(CC)寄存器中,所述寄存器也可為程序狀態(tài)寄存器的部分。間接分支指令BX RO 1007與圖4A和4B的先前實(shí)例中使用的相同。在代碼實(shí)例1000中,有條件移動(dòng)RO目標(biāo)B指令1006可取決于其是否執(zhí)行而影響B(tài)TA寄存器R0??紤]如下表中所示的兩種可能情形
權(quán)利要求
1.一種用于改變程序的順序流程的方法,其包括從由第一指令識(shí)別的寄存器檢索程序指定的目標(biāo)地址,其中所述寄存器是在指令集架構(gòu)中界定;以及在遇到第二指令之后將推測(cè)性執(zhí)行流程改變到所述程序指定的目標(biāo)地址,其中所述第二指令經(jīng)動(dòng)態(tài)地確定為間接分支指令。
2.根據(jù)權(quán)利要求I所述的方法,其中所述間接分支指令是在所述第一指令之后的下一遇到的間接分支指令。
3.根據(jù)權(quán)利要求I所述的方法,其中所述間接分支指令是指定匹配由所述第一指令識(shí)別的所述寄存器的目標(biāo)寄存器的下一遇到的間接分支指令。
4.根據(jù)權(quán)利要求I所述的方法,其進(jìn)一步包括將所述第一指令插入代碼序列中處于所述間接分支之前至少N個(gè)程序指令,其中所述 N個(gè)程序指令對(duì)應(yīng)于接收所述間接分支的管線級(jí)與辨識(shí)由所述第一指令識(shí)別的所述寄存器的管線級(jí)之間的管線級(jí)的數(shù)目。
5.根據(jù)權(quán)利要求4所述的方法,其中接收所述間接分支的所述管線級(jí)是獲取級(jí),且辨識(shí)由所述第一指令識(shí)別的所述寄存器的所述管線級(jí)是執(zhí)行級(jí)。
6.根據(jù)權(quán)利要求I所述的方法,其進(jìn)一步包括在遇到對(duì)應(yīng)多個(gè)間接分支指令之前接收多個(gè)預(yù)先通知(ADVN)指令,其中所述第一指令是(ADVN)指令;以及以先入先出堆棧跟蹤所述多個(gè)(ADVN)指令與所述遇到的對(duì)應(yīng)多個(gè)間接分支指令之間的對(duì)應(yīng)關(guān)系。
7.根據(jù)權(quán)利要求I所述的方法,其進(jìn)一步包括確定存儲(chǔ)在分支目標(biāo)地址寄存器中的值是有效指令地址;以及在對(duì)所述間接分支進(jìn)行解碼后即刻從所述分支目標(biāo)地址寄存器選擇所述值以用于識(shí)別待獲取的下一指令地址。
8.根據(jù)權(quán)利要求I所述的方法,其進(jìn)一步包括執(zhí)行所述間接分支以確定分支目標(biāo)地址;將所述確定的分支目標(biāo)地址與所述程序指定的目標(biāo)地址進(jìn)行比較;以及當(dāng)所述確定的分支目標(biāo)地址與所述程序指定的目標(biāo)地址不相同時(shí)清空處理器管線。
9.根據(jù)權(quán)利要求I所述的方法,其進(jìn)一步包括在遇到所述第一指令之后超馳分支預(yù)測(cè)電路。
10.根據(jù)權(quán)利要求I所述的方法,其進(jìn)一步包括將所述指令處理為具有分支歷史預(yù)測(cè)電路的處理器管線中的無操作,所述分支歷史預(yù)測(cè)電路具有用以跟蹤在代碼區(qū)段的執(zhí)行期間遇到的分支的硬件資源;以及針對(duì)超過所述分支歷史預(yù)測(cè)電路可用的所述硬件資源的代碼區(qū)段啟用所述指令。
11.一種用于提供間接分支地址的預(yù)先通知的方法,其包括分析指令序列以識(shí)別由所述指令序列的目標(biāo)地址改變指令產(chǎn)生的最當(dāng)前目標(biāo)地址;以及在推測(cè)性執(zhí)行利用所述最當(dāng)前目標(biāo)地址的間接分支指令之前基于所述最當(dāng)前目標(biāo)地址來準(zhǔn)備下一程序地址。
12.根據(jù)權(quán)利要求11所述的方法,其進(jìn)一步包括在第一次通過代碼區(qū)段時(shí)自動(dòng)識(shí)別所述間接分支指令的目標(biāo)地址寄存器,其中所述識(shí)別的目標(biāo)地址寄存器用以自動(dòng)識(shí)別由所述指令產(chǎn)生的所述最當(dāng)前目標(biāo)地址。
13.根據(jù)權(quán)利要求11所述的方法,其中當(dāng)對(duì)所述間接分支指令進(jìn)行解碼時(shí)準(zhǔn)備所述下一程序地址。
14.根據(jù)權(quán)利要求11所述的方法,其進(jìn)一步包括將所述指令序列中的所述目標(biāo)地址改變指令移動(dòng)到所述指令序列中在間接分支指令之前至少N個(gè)程序指令的位置,其中N對(duì)應(yīng)于接收所述間接分支的管線級(jí)與辨識(shí)由所述目標(biāo)地址改變指令識(shí)別的所述寄存器的管線級(jí)之間的管線級(jí)的數(shù)目。
15.根據(jù)權(quán)利要求14所述的方法,其中接收所述間接分支的所述管線級(jí)是獲取級(jí),且辨識(shí)由所述目標(biāo)地址改變指令識(shí)別的所述寄存器的所述管線級(jí)是執(zhí)行級(jí)。
16.根據(jù)權(quán)利要求11所述的方法,其進(jìn)一步包括在第一表中在由所述間接分支指令指定的目標(biāo)地址寄存器條目處加載產(chǎn)生所述最當(dāng)前目標(biāo)地址的所述指令的指令地址。
17.根據(jù)權(quán)利要求16所述的方法,其進(jìn)一步包括在所述指令地址處檢查有效位的關(guān)聯(lián)性存儲(chǔ)器中是否有經(jīng)斷言的有效位;以及響應(yīng)于經(jīng)斷言的有效位而用從執(zhí)行由所述第一表識(shí)別的所述指令得到的值來加載分支目標(biāo)地址寄存器。
18.根據(jù)權(quán)利要求17所述的方法,其進(jìn)一步包括使用存儲(chǔ)在所述分支目標(biāo)地址寄存器中的所述值提供所述分支目標(biāo)地址。
19.一種用于提供間接分支目標(biāo)地址的預(yù)先通知的設(shè)備,其包括寄存器,其用于保持由程序指定為間接分支指令的預(yù)先通知(ADVN)間接地址的指令存儲(chǔ)器地址;以及下一程序地址選擇器電路,其監(jiān)視以所述寄存器為目標(biāo)的指令,且基于所述監(jiān)視的指令而從所述寄存器將在遇到所述間接分支指令之前的最當(dāng)前目標(biāo)地址選擇為所述(ADVN) 間接地址,以用于在推測(cè)性執(zhí)行所述間接分支指令時(shí)用作下一程序地址。
20.根據(jù)權(quán)利要求19所述的設(shè)備,其進(jìn)一步包括解碼器,其用以對(duì)程序指令進(jìn)行解碼以識(shí)別待存儲(chǔ)在所述寄存器中的分支目標(biāo)地址。
21.根據(jù)權(quán)利要求19所述的設(shè)備,其進(jìn)一步包括處理器管線,其在接收所述間接分支指令的級(jí)與辨識(shí)所述最當(dāng)前目標(biāo)地址的級(jí)之間具有N個(gè)級(jí),其中所述下一程序地址選擇器電路選擇在所述間接分支之前至少所述N個(gè)級(jí)的所述ADVN間接地址。
22.根據(jù)權(quán)利要求21所述的設(shè)備,其中接收所述間接分支指令的所述管線級(jí)是獲取級(jí),且辨識(shí)所述最當(dāng)前目標(biāo)地址的所述管線級(jí)是執(zhí)行級(jí)。
23.根據(jù)權(quán)利要求19所述的設(shè)備,其中所述ADVN間接地址是基于跟蹤表,所述跟蹤表存儲(chǔ)所述程序的在當(dāng)前執(zhí)行循環(huán)之前的影響所述間接分支指令的所述分支目標(biāo)地址的指令的執(zhí)行狀態(tài)。
全文摘要
一種處理器實(shí)施用于提供間接分支地址的預(yù)先通知的設(shè)備和方法。自動(dòng)地識(shí)別由指令產(chǎn)生的目標(biāo)地址。在推測(cè)性執(zhí)行利用最當(dāng)前目標(biāo)地址的間接分支指令之前基于所述最當(dāng)前目標(biāo)地址來準(zhǔn)備下一程序地址。所述設(shè)備合適地采用寄存器,其用于保持由程序指定為間接分支指令的最當(dāng)前間接地址的指令存儲(chǔ)器地址。所述設(shè)備還采用下一程序地址選擇器,其從所述寄存器選擇所述最當(dāng)前間接地址作為所述下一程序地址以用于在推測(cè)性執(zhí)行所述間接分支指令時(shí)使用。
文檔編號(hào)G06F9/30GK102934075SQ201180028116
公開日2013年2月13日 申請(qǐng)日期2011年6月28日 優(yōu)先權(quán)日2010年6月28日
發(fā)明者詹姆斯·諾里斯·迪芬德爾費(fèi)爾, 邁克爾·威廉·莫羅 申請(qǐng)人:高通股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1