專利名稱:用以預(yù)測有條件非分支指令的不執(zhí)行的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體來說涉及處理器的領(lǐng)域,且特定來說涉及支持有條件非分支指令的處理器。
背景技術(shù):
例如手機(jī)、膝上型計算機(jī)、個人數(shù)據(jù)助理(PDA)等許多便攜式產(chǎn)品利用執(zhí)行例如通信和多媒體程序等程序的處理系統(tǒng)。用于此類產(chǎn)品的處理系統(tǒng)可包括多個處理器、用于存儲指令和數(shù)據(jù)的復(fù)雜存儲器系統(tǒng)、控制器、例如通信接口等外圍裝置和配置于(例如)單芯片上的固定功能邏輯塊。同時,便攜式產(chǎn)品具有呈電池形式的有限能源,常常需要所述電池支持處理系統(tǒng)進(jìn)行的高性能操作。為了增加電池壽命,需要盡可能有效地執(zhí)行這些操作。 還正在開發(fā)具有有效設(shè)計以在總能量消耗降低的情況下操作的許多個人計算機(jī)。處理器使用具有指令集的管線式架構(gòu),所述指令集大體上包括有條件分支指令。 程序可使用有條件分支指令來控制程序操作的流程。然而,執(zhí)行有條件分支指令可引起在相關(guān)聯(lián)分支條件的管線待決解析中出現(xiàn)泡(biAble),通常直到處理器的管線深處才可確定所述相關(guān)聯(lián)分支條件。許多處理器還包括有條件非分支指令以幫助減輕有條件分支指令的性能搶奪(performance robbing)性質(zhì)。非分支指令的有條件執(zhí)行允許程序設(shè)計師基于先前產(chǎn)生的機(jī)器狀態(tài)來指定是否將執(zhí)行指令。使用有條件非分支指令幫助降低對有條件分支指令的需要且借此改進(jìn)性能。當(dāng)有條件指令的相關(guān)聯(lián)條件經(jīng)評估且指示不執(zhí)行指令時,可能已消耗與有條件指令相關(guān)聯(lián)的資源。舉例來說,可能已提取有條件非分支指令執(zhí)行所需的寄存器操作數(shù)。并且,有條件非分支指令可能已不必要地將管線相依性引入處理器管線中。舉例來說,有條件指令可在管線中暫停同時等待解析其條件,借此引起暫停波動(ripple)到視所述有條件指令的執(zhí)行而定的所有指令。另外,有條件指令可存在于軟件回路中,其中有條件指令的條件解析性質(zhì)針對回路的每一反復(fù)以類似方式出現(xiàn),從而可引起顯著性能降級。
發(fā)明內(nèi)容
在本發(fā)明的若干方面中,從本發(fā)明可認(rèn)識到,提供用于預(yù)測有條件非分支指令的不執(zhí)行的更有效的方法和設(shè)備可改進(jìn)性能且降低處理器系統(tǒng)中的功率要求。為實(shí)現(xiàn)此類目的,本發(fā)明的一實(shí)施例提出一種用于不執(zhí)行已發(fā)出的有條件非分支指令的方法。將有條件非分支指令識別為入選以用于預(yù)測,所述預(yù)測指示所述入選有條件非分支(ECNB)指令將不會執(zhí)行。所述ECNB指令響應(yīng)于所述ECNB指令將不會執(zhí)行的所述預(yù)測而作為無操作(NOP) 指令執(zhí)行。另一實(shí)施例提出一種用于預(yù)測有條件非分支指令將不會執(zhí)行的設(shè)備。所述設(shè)備具有第一電路,其用于將有條件非分支指令識別為入選以用于預(yù)測。所述設(shè)備具有第二電路, 其用于響應(yīng)于滿足評估準(zhǔn)則而預(yù)測所述入選有條件非分支(ECNB)指令是否將不會執(zhí)行。另一實(shí)施例提供一種用于預(yù)測有條件非分支指令將不會執(zhí)行的方法。識別入選以用于預(yù)測是否將執(zhí)行的有條件非分支指令。響應(yīng)于滿足評估準(zhǔn)則而預(yù)測所述入選有條件非分支(ECNB)指令將不會執(zhí)行。應(yīng)理解,對于所屬領(lǐng)域的技術(shù)人員來說,本發(fā)明的其它實(shí)施例將從以下詳細(xì)描述而變得容易顯而易見,在以下詳細(xì)描述中,以說明的方式來展示和描述本發(fā)明的各種實(shí)施例。將了解,本發(fā)明容許其它和不同的實(shí)施例且其若干細(xì)節(jié)容許在其它各方面加以修改,以上所有均不偏離本發(fā)明的精神和范圍。因此,應(yīng)將圖式和詳細(xì)描述視為本質(zhì)上為說明性而非限制性的。
在附圖中通過實(shí)例而非通過限制來說明本發(fā)明的各個方面,附圖中圖1說明無線通信系統(tǒng);圖2展示預(yù)測是否執(zhí)行有條件非分支指令的示范性處理器系統(tǒng);圖3說明示范性入選有條件非分支(ECNB)指令預(yù)測電路;圖4A說明用于預(yù)測ECNB指令的執(zhí)行的第一過程;圖4B說明用于預(yù)測ECNB指令的執(zhí)行的第二過程;圖5說明用于預(yù)測ECNB指令的執(zhí)行的第三過程;以及圖6說明用于預(yù)測ECNB指令的執(zhí)行的第四過程。
具體實(shí)施例方式下文結(jié)合附圖所闡述的詳細(xì)描述希望作為對本發(fā)明的各種示范性實(shí)施例的描述, 且不希望表示可實(shí)踐本發(fā)明的僅有實(shí)施例。詳細(xì)描述包括出于提供對本發(fā)明的徹底理解的目的的特定細(xì)節(jié)。然而,對于所屬領(lǐng)域的技術(shù)人員將顯而易見,本發(fā)明可在無這些特定細(xì)節(jié)的情況下實(shí)踐。在一些例子中,以框圖形式展示眾所周知的結(jié)構(gòu)和組件,以避免使本發(fā)明的概念模糊。圖1說明可有利地使用本發(fā)明的實(shí)施例的示范性無線通信系統(tǒng)100。出于說明的目的,圖1展示三個遠(yuǎn)程單元120、130和150以及兩個基站140。將認(rèn)識到,常用無線通信系統(tǒng)可具有更多遠(yuǎn)程單元和基站。分別包括硬件組件、軟件組件或其兩者(由組件125A、 125C、125B和12OT表示)的遠(yuǎn)程單元120、130、150和基站140已經(jīng)調(diào)適以體現(xiàn)本發(fā)明,如下文進(jìn)一步論述。圖1展示從基站140到遠(yuǎn)程單元120、130和150的前向鏈路信號180以及從遠(yuǎn)程單元120、130和150到基站140的反向鏈路信號190。圖1中,遠(yuǎn)程單元120經(jīng)展示為移動電話,遠(yuǎn)程單元130經(jīng)展示為便攜式計算機(jī)且遠(yuǎn)程單元150經(jīng)展示為無線區(qū)域回路系統(tǒng)中的固定位置遠(yuǎn)程單元。通過實(shí)例,遠(yuǎn)程單元或者可為手機(jī)、尋呼機(jī)、對講機(jī)、手持式個人通信系統(tǒng)(PCQ單元、例如個人數(shù)據(jù)助理等便攜式數(shù)據(jù)單元,或例如儀表讀取設(shè)備等固定位置數(shù)據(jù)單元。盡管圖1說明根據(jù)本發(fā)明的教示的遠(yuǎn)程單元,但本發(fā)明不限于這些所說明的示范性單元。本發(fā)明的實(shí)施例可適用于具有有條件非分支指令的處理器中。圖2展示預(yù)測是否執(zhí)行有條件非分支指令的示范性處理器系統(tǒng)200。處理器系統(tǒng) 200包括處理器210、高速緩沖存儲器系統(tǒng)212、系統(tǒng)存儲器214以及輸入和輸出(I/O)系統(tǒng) 216。舉例來說,處理器210包含指令管線220和有條件非分支預(yù)測邏輯電路222。舉例來說,高速緩沖存儲器系統(tǒng)212包含指令高速緩沖存儲器(Icache) 224、存儲器控制器2 和數(shù)據(jù)高速緩沖存儲器(Dcache) 228。系統(tǒng)存儲器214提供未在Icache 2 或Dcache 228 中發(fā)現(xiàn)的指令和數(shù)據(jù)的存取。應(yīng)注意,高速緩沖存儲器系統(tǒng)212可與處理器210集成且可進(jìn)一步包括階層式組織中的多個層級的高速緩沖存儲器。I/O系統(tǒng)216包含與處理器210 介接的多個I/O裝置,例如I/O裝置240和M2。指令管線220由例如提取級230、解碼級231、發(fā)出級232、執(zhí)行級233和完成級234 等一系列級組成。所屬領(lǐng)域的技術(shù)人員將認(rèn)識到,指令管線220中的每一級230-234可(例如)視處理器的操作頻率和每一級中所需的操作的復(fù)雜性而包含許多額外管線級。并且, 執(zhí)行級可由例如加法器、乘法器、邏輯運(yùn)算、移位與旋轉(zhuǎn)操作等一個或一個以上指令執(zhí)行級電路組成。此類指令執(zhí)行級電路可與有條件非分支指令相關(guān)聯(lián)。管線級中的每一者可在不偏離本文中所描述的有條件預(yù)測方法和設(shè)備的情況下具有變化的實(shí)施方案。提取級230根據(jù)計算機(jī)程序流程從指令高速緩沖存儲器(Icache) 224提取指令以供執(zhí)行,所述指令可包括有條件分支指令和有條件非分支指令。大體來說,所提取的有條件分支指令使用分支預(yù)測邏輯來預(yù)測是否將進(jìn)行所述有條件分支。所提取的非分支指令(其不是有條件非分支指令)進(jìn)行到解碼級231以供解碼,在發(fā)出級232中發(fā)出以供執(zhí)行,在執(zhí)行級233中執(zhí)行且在完成級234中引退(retire)。所提取的有條件非分支指令利用如本文中所描述的有條件非分支預(yù)測邏輯電路222來確定是否應(yīng)不執(zhí)行所述指令。未經(jīng)執(zhí)行的有條件非分支指令并不改變在遇到有條件非分支指令前處理器所具有的狀態(tài)。有條件非分支預(yù)測邏輯電路222包含檢測邏輯電路246、具有過濾器250和有條件歷史表252的監(jiān)視邏輯電路M8,以及預(yù)測與固定邏輯電路254。在一個實(shí)施例中,假設(shè)大部分有條件非分支指令的條件針對軟件回路的大多數(shù)反復(fù)通常解析為相同值。在一個實(shí)施例中,檢測邏輯電路246充當(dāng)軟件回路檢測器,其基于軟件回路中所使用的有條件分支指令的動態(tài)特性而操作。在具有單一入口和單一出口的軟件回路中,回路結(jié)束分支通常為有條件分支指令,其針對回路的除最后反復(fù)外的所有反復(fù)形成分支返回到軟件回路的開始,所述最后反復(fù)退出軟件回路。檢測邏輯電路246可具有用于軟件回路的檢測的多個實(shí)施例,如下文和轉(zhuǎn)讓給本申請案的受讓人的題目為“通過回路結(jié)束分支 WM^^W(Suppressing Update of a Branch History Register by Loop-Ending Branches) ”的第11/066,508號美國專利申請案中更詳細(xì)描述,所述專利申請案的全文并入本文中。根據(jù)一個實(shí)施例,假設(shè)具有小于有條件分支指令地址的分支目標(biāo)地址的每一有條件分支指令(且因此視為向后分支)為回路結(jié)束分支指令。此實(shí)施例在確定分支目標(biāo)地址時需要地址比較。由于并非所有向后分支均為回路結(jié)束分支,因此存在可能需要考慮的一定程度的不準(zhǔn)確性。在另一實(shí)施例中,在簡單回路中,可通過辨識對相同分支指令的重復(fù)執(zhí)行來檢測回路結(jié)束分支。通過將最后向后分支指令的程序計數(shù)器值存儲于專用寄存器中且將此所存儲的值與下一向后分支指令的指令地址進(jìn)行比較,可在兩個指令地址匹配時辨識回路結(jié)束分支。由于代碼可包括軟件回路內(nèi)的有條件分支指令,因此回路結(jié)束分支指令的確定可變得更復(fù)雜。在此情形下,可以硬件實(shí)體化多個專用寄存器以存儲每一有條件分支指令的指令地址。通過比較所有存儲值,可針對回路結(jié)束分支確定匹配。
回路結(jié)束分支還可由編譯程序或匯編程序來靜態(tài)標(biāo)記。舉例來說,在一個實(shí)施例中,通過使用唯一操作碼或設(shè)定僅用于回路結(jié)束分支的特定格式位字段,編譯程序產(chǎn)生特定類型的分支指令。在解碼特定分支指令后,確定回路結(jié)束分支。監(jiān)視邏輯電路248包含過濾器250、有條件歷史表(CHT) 252和相關(guān)聯(lián)的監(jiān)視邏輯。在一個實(shí)施例中,監(jiān)視過程保存預(yù)先指定的條件事件的狀態(tài)信息,所述預(yù)先指定的條件事件可能已在對具有入選以用于預(yù)測的有條件非分支指令的軟件回路的一次或一次以上先前執(zhí)行過程中發(fā)生。在一個實(shí)施例中,可能所有的有條件非分支指令均不入選以用于預(yù)測。舉例來說,出于實(shí)施方案復(fù)雜性的原因而通過微代碼實(shí)施的有條件非分支指令可能不入選以用于預(yù)測的執(zhí)行操作。并且,有條件分支指令將不入選以用于有條件非分支指令預(yù)測,因?yàn)樗龇种е噶钔ǔ>哂衅渥陨淼囊耘c本文中所描述的預(yù)測技術(shù)不同的方式操作的預(yù)測硬件和方法。使用歷史信息來預(yù)測何時入選有條件非分支(ECNB)指令將不會執(zhí)行。如以下更詳細(xì)描述,使用一些途徑來以高置信度確定是否將執(zhí)行ECNB指令。確定高置信度預(yù)測方法的途徑是有利的,因?yàn)轭A(yù)測應(yīng)當(dāng)執(zhí)行的ECNB指令不執(zhí)行的損失比預(yù)測不應(yīng)執(zhí)行的ECNB指令執(zhí)行要嚴(yán)重得多。舉例來說,經(jīng)預(yù)測為不執(zhí)行的ECNB指令將改變與所述ECNB指令相關(guān)聯(lián)的管線操作,從而通過不執(zhí)行選定ECNB操作來最小化功率和/或改進(jìn)性能,所述選定ECNB 操作在預(yù)測ECNB指令不執(zhí)行時為不需要的。舉例來說,如果預(yù)測有條件載入指令不執(zhí)行, 那么將無需提取由所述有條件載入指令指定的存儲器操作數(shù)。對于經(jīng)預(yù)測為不執(zhí)行的此 ECNB指令來說,管線將在適當(dāng)管線級處改變(例如)為不提取所述指令執(zhí)行所需的任何寄存器或存儲器操作數(shù),從而降低功率且改進(jìn)性能。然而,如果由所預(yù)測的ECNB指令指定的條件指示不正確預(yù)測,那么管線必須至少清空到所提取代碼中的可校正歸因于不正確預(yù)測的效應(yīng)的點(diǎn)。當(dāng)不應(yīng)執(zhí)行的ECNB指令被預(yù)測執(zhí)行時無需管線清空,而是對于不正確預(yù)測的狀況來說,終止指令使得不影響處理器狀態(tài)。條件評估過程評估預(yù)先指定的條件事件的所保存狀態(tài)信息,且在滿足預(yù)先指定的評估準(zhǔn)則時,針對當(dāng)前入選有條件非分支(ECNB)指令在回路中的下一次執(zhí)行啟用其預(yù)測。 舉例來說,預(yù)先指定的條件事件可包括軟件回路將被執(zhí)行的預(yù)先指定的次數(shù)以及是否曾基于相關(guān)聯(lián)條件的狀態(tài)執(zhí)行一個或一個以上先前ECNB指令。舉例來說,預(yù)先指定的評估準(zhǔn)則可包括滿足軟件回路的設(shè)定的反復(fù)數(shù)目以及具有如下先前狀態(tài)不執(zhí)行在先前所設(shè)定數(shù)目個回路反復(fù)中曾遇到的先前ECNB指令。舉例來說,預(yù)先指定的評估準(zhǔn)則可能需要不執(zhí)行在軟件回路的兩次先前執(zhí)行中曾遇到的先前ECNB指令。在此狀況下,將預(yù)測在軟件回路的下一次反復(fù)中不執(zhí)行當(dāng)前ECNB指令。為支持此監(jiān)視邏輯電路M8,過濾器250確定所提取的有條件非分支指令是否入選以用于所預(yù)測的執(zhí)行。如果所提取的指令不入選以用于所預(yù)測的執(zhí)行,那么如在無預(yù)測信息的輔助的情況下處理器的架構(gòu)所指定來執(zhí)行所提取的指令。如果所提取的指令入選以用于所預(yù)測的執(zhí)行,那么啟用CHT 252。選擇CHT 252中的與ECNB指令相關(guān)聯(lián)的條目以將預(yù)測信息提供到預(yù)測邏輯,所述預(yù)測邏輯為預(yù)測與固定邏輯電路2M的一部分。舉例來說, 當(dāng)ECNB指令移動通過管線時,通過管線級232-234追蹤此預(yù)測信息。CHT 252的條目記錄入選以用于所預(yù)測執(zhí)行的所提取指令的執(zhí)行歷史。舉例來說, 每一 CHT條目可包含來自執(zhí)行狀態(tài)計數(shù)器的計數(shù)值與狀態(tài)位(其為到預(yù)測邏輯的輸入)的組合。CHT 252還可包含索引邏輯以允許對所提取的ECNB指令標(biāo)以索引到與所提取的ECNB 指令相關(guān)聯(lián)的CHT 252中的條目中,因?yàn)檐浖芈分锌赡艽嬖诙鄠€ECNB指令。舉例來說, 通過從軟件回路的頂部對ECNB指令數(shù)目進(jìn)行計數(shù),所述計數(shù)可用作到CHT 252中的索引。 監(jiān)視邏輯電路248包括回路計數(shù)器,用于對軟件回路的反復(fù)進(jìn)行計數(shù)且確保執(zhí)行狀態(tài)計數(shù)器具有在表示(例如)強(qiáng)力不執(zhí)行狀態(tài)的指定計數(shù)值下飽和(saturate)的機(jī)會。如果執(zhí)行狀態(tài)計數(shù)器已飽和,那么啟用預(yù)測邏輯以預(yù)測在回路的下一次反復(fù)中不執(zhí)行相關(guān)聯(lián)所提取的有條件非分支指令。預(yù)測與固定邏輯2M產(chǎn)生預(yù)測信息,所述預(yù)測信息在發(fā)出級232、執(zhí)行級233和完成級234處于追蹤寄存器發(fā)出(TrI)沈2、追蹤寄存器執(zhí)行(TrE) 263和追蹤寄存器完成 (TrC) 264中被追蹤。舉例來說,在預(yù)測ECNB指令不執(zhí)行時,在管線級232-234中將ECNB指令有效地視為(例如)無操作(NOP)指令。通過將ECNB指令視為NOP,如果執(zhí)行ECNB指令時需要,則不讀取通用寄存器(GPR),因?yàn)閳?zhí)行所預(yù)測的NOP指令不需要所述通用寄存器。 如果ECNB指令為載入或存儲存儲器存取指令,那么不將存儲器存取操作起始為所預(yù)測的 NOP指令。舉例來說,響應(yīng)于不執(zhí)行的預(yù)測,在執(zhí)行級233中操作的操作數(shù)提取電路235將不提取ECNB指令執(zhí)行所需的操作數(shù)。通過不讀取GPR或不存取存儲器,可降低處理器210 中的功率。并且,通過不讀取GPR或不存取存儲器和不必等待在ECNB指令被預(yù)測為NOP時將不需要的操作數(shù),可改進(jìn)處理器性能。在到達(dá)執(zhí)行級233后,如果針對ECNB指令所指定的執(zhí)行條件已評估與其預(yù)測相反,那么即刻校正所預(yù)測的NOP指令的管線執(zhí)行。舉例來說,對管線的校正可包括清空在進(jìn)行預(yù)測的級處開始的管線中的指令。在替代實(shí)施例中,可從最初提取ECNB指令的開始提取級清空管線。并且,也可在不正確預(yù)測后校正適當(dāng)CHT條目。圖3說明示范性入選有條件非分支(ECNB)指令預(yù)測電路300。ECNB預(yù)測電路300 說明電路和電路之間的控制信號路徑。更詳細(xì)來說,ECNB指令預(yù)測電路300包括檢測電路 304、監(jiān)視器電路306和預(yù)測與固定電路308。監(jiān)視器電路306包含過濾器電路310和有條件歷史表(CHT)電路312。預(yù)測與固定電路308包含預(yù)測電路314、追蹤電路316和校正電路 318。充當(dāng)回路檢測器的檢測電路304操作以檢測回路結(jié)束分支,如上文關(guān)于檢測邏輯電路246所論述。舉例來說,回路結(jié)束分支通常為有條件分支指令,其針對回路的除最后反復(fù)外的所有反復(fù)形成分支返回到回路的開始,所述最后反復(fù)退出回路。將與每一所識別的回路有關(guān)的信息傳遞到過濾器電路310。在一個實(shí)施例中,過濾器電路為(例如)回路計數(shù)器,其提供軟件回路已發(fā)生設(shè)定數(shù)目次反復(fù)的指示,例如特定回路的三次反復(fù)。對于回路的每一反復(fù)來說,過濾器確定有條件非分支指令是否入選以用于預(yù)測。如果回路中存在入選有條件非分支(ECNB)指令,那么將執(zhí)行ECNB指令的狀態(tài)記錄于有條件歷史表(CHT)電路312中。舉例來說,可使用執(zhí)行狀態(tài)計數(shù)器來記錄ECNB指令的先前嘗試執(zhí)行的執(zhí)行歷史??稍谝粋€方向上更新執(zhí)行狀態(tài)計數(shù)器以指示ECNB指令曾有條件地執(zhí)行,且在相反方向上更新所述執(zhí)行狀態(tài)計數(shù)器以指示 ECNB指令未曾有條件地執(zhí)行。舉例來說,可使用兩位執(zhí)行狀態(tài)計數(shù)器,其中不執(zhí)行狀態(tài)使計數(shù)器遞減且執(zhí)行狀態(tài)使計數(shù)器遞增。向執(zhí)行狀態(tài)計數(shù)器的輸出狀態(tài)(例如)指派“11”輸出以指示先前ECNB指令強(qiáng)力指示為已執(zhí)行,指派“ 10”輸出以指示先前ECNB指令較弱地指示為已執(zhí)行,指派“01”輸出以指示先前ECNB指令較弱地指示為尚未執(zhí)行,以及“00”輸出指示先前ECNB指令強(qiáng)力指示為尚未執(zhí)行。執(zhí)行狀態(tài)計數(shù)器的“11”輸出和“00”輸出將為飽和的輸出值。執(zhí)行狀態(tài)計數(shù)器將與所檢測到的軟件回路中的每一 ECNB指令相關(guān)聯(lián)或提供所述ECNB指令的狀態(tài)。然而,特定實(shí)施方案可能限制實(shí)施方案中所使用的執(zhí)行狀態(tài)計數(shù)器的數(shù)目且因此限制可預(yù)測的ECNB指令的數(shù)目。檢測電路304通常在首次進(jìn)入軟件回路后使執(zhí)行狀態(tài)計數(shù)器復(fù)位?;蛘?,停用預(yù)測旗標(biāo)而非執(zhí)行狀態(tài)計數(shù)器可與待預(yù)測的每一 ECNB指令相關(guān)聯(lián)。如果先前已確定已執(zhí)行相關(guān)聯(lián)ECNB指令,那么將停用預(yù)測旗標(biāo)設(shè)定為作用中的以停用預(yù)測。 具有已執(zhí)行的先前ECNB指令暗示預(yù)測ECNB指令的不執(zhí)行情形的置信度等級將低于可接受的等級。索引計數(shù)器也可與CHT 312—起使用以確定軟件回路中正在對哪一 ECNB指令進(jìn)行計數(shù)或評估。舉例來說,在具有五個或五個以上ECNB指令的回路中,第一 ECNB指令可具有索引“000”且第四入選非分支指令可具有索引“011”。索引表示進(jìn)入CHT 312以存取相應(yīng)ECNB指令的所存儲執(zhí)行狀態(tài)計數(shù)器值的地址。預(yù)測電路314接收ECNB指令的預(yù)測信息(例如,執(zhí)行狀態(tài)計數(shù)器輸出值),且在 (例如)圖2的解碼級231期間預(yù)測ECNB指令將不會執(zhí)行。在替代實(shí)施例中,預(yù)測電路314 可預(yù)測由ECNB指令所指定的條件評估為不執(zhí)行狀態(tài)。預(yù)測電路314將預(yù)測決策傳遞到追蹤電路316,預(yù)測決策可包括所預(yù)測的相關(guān)聯(lián)ECNB指令和相應(yīng)CHT條目內(nèi)容。如果未預(yù)測 ECNB指令,那么預(yù)測信息指示常規(guī)執(zhí)行。如果預(yù)測將ECNB指令作為NOP指令執(zhí)行,那么追蹤信息向校正電路318通知執(zhí)行狀態(tài)和相關(guān)聯(lián)條件評估以確定是否產(chǎn)生不正確預(yù)測。如果產(chǎn)生不正確預(yù)測,那么校正電路318清空管線,更新CHT 312中的適當(dāng)執(zhí)行狀態(tài)計數(shù)器,且在一個實(shí)施例中標(biāo)記相關(guān)聯(lián)CHT條目以指示從此點(diǎn)開始不預(yù)測此特定ECNB指令。在另一實(shí)施例中,校正電路318還可(例如)在確定ECNB指令被誤預(yù)測后改變預(yù)先指定的評估準(zhǔn)貝U,以由此點(diǎn)開始使預(yù)測準(zhǔn)則更穩(wěn)妥。應(yīng)認(rèn)識到,可譯碼回路中的入選有條件非分支(ECNB)指令的序列使得每一指令視相同條件解析而定。在此狀況下,可將ECNB指令的序列視為與有條件歷史表(CHT)中的單一條目有關(guān)的群組。在此狀況下,當(dāng)預(yù)測指示不執(zhí)行時,將ECNB指令的序列視為無操作 (NOP)指令的序列。舉例來說,ECNB指令的群組可包括兩個有條件載入操作數(shù)指令,之后是有條件算術(shù)指令,所述有條件算術(shù)指令指定對兩個載入操作數(shù)執(zhí)行的運(yùn)算。此外,三個ECNB 指令視相同條件解析而定。在管線式處理器中,可較早在管線中將這三個指令識別為具有相同條件解析的有條件群組。在一個實(shí)施例中,管線中的所述群組的第一有條件載入指令觸發(fā)預(yù)測評估且CHT中的條目可標(biāo)記為與ECNB指令的此群組相關(guān)聯(lián)。以此方式,ECNB指令的所述群組與到CHT中的單一索引相關(guān)聯(lián),使得ECNB群組的所有指令評估為相同索引。應(yīng)認(rèn)識到,可在回路外辨識入選有條件非分支(ECNB)指令且也可有利地將所述指令預(yù)測為不執(zhí)行。充當(dāng)?shù)刂贩秶鷻z測電路的檢測電路304檢測將評估ECNB指令預(yù)測所處的地址范圍。每當(dāng)提取進(jìn)入地址范圍的代碼時,啟用ECNB指令預(yù)測電路300且監(jiān)視并評估地址范圍內(nèi)的ECNB指令。當(dāng)滿足評估準(zhǔn)則時,通過以與先前描述類似的方式操作的追蹤和校正來預(yù)測是否執(zhí)行ECNB指令。進(jìn)一步認(rèn)識到,并非所有回路或地址范圍具有類似特性。如果特殊回路或地址范圍提供不良預(yù)測結(jié)果,那么可標(biāo)記所述回路或地址范圍以停用預(yù)測。以類似方式,特殊回路或地址范圍可在一個操作情形集合下以優(yōu)良預(yù)測操作且可在一不同操作情形集合下以不良預(yù)測操作。在此狀況下,對操作情形的辨識允許啟用預(yù)測、停用預(yù)測或在適用于操作情形的不同評估準(zhǔn)則下啟用預(yù)測。圖4A說明用于預(yù)測ECNB指令的執(zhí)行的第一過程400。在框402處,監(jiān)視處理器代碼執(zhí)行以檢測軟件回路。在決策框404處,做出是否已到達(dá)代碼中已檢測到軟件回路的點(diǎn)的確定。如上所述,可(例如)通過識別到回路的開始處的向后分支來確定軟件回路。如果尚未識別到軟件回路,那么第一過程400返回到框402。如果已識別到軟件回路,那么在代碼中此點(diǎn)處,已執(zhí)行軟件回路的第一循環(huán)且可準(zhǔn)備開始軟件回路的下一循環(huán)。在決策框406處,在軟件回路的下一循環(huán)中,做出在(例如)管線解碼級(例如, 圖2的解碼級231)期間是否已檢測到ECNB指令的確定。如果尚未檢測到ECNB指令,那么過程400進(jìn)行到?jīng)Q策框408。在決策框408處,做出是否已完成對軟件回路的遍歷的確定。 可通過(例如)到達(dá)在決策框404處識別軟件回路的向后分支來確定對軟件回路的第一次遍歷。如果尚未完成對軟件回路的遍歷,那么第一過程400返回到?jīng)Q策框406以繼續(xù)檢查ECNB指令。在決策框406處,如果已檢測到ECNB指令,那么第一過程400進(jìn)行到?jīng)Q策框 410。在決策框410處,在處理器解碼級231期間做出(例如)是否滿足此ECNB指令的預(yù)先指定的評估準(zhǔn)則的確定。預(yù)先指定的評估準(zhǔn)則可為(例如)回路反復(fù)計數(shù)是否大于或等于預(yù)先指定的值(例如,3)。如果不滿足預(yù)先指定的評估準(zhǔn)則,那么第一過程400進(jìn)行到框 412。在框412處,執(zhí)行此ECNB指令且更新此ECNB指令的執(zhí)行狀態(tài)。舉例來說,如果ECNB 指令曾有條件地執(zhí)行,那么設(shè)定停用預(yù)測旗標(biāo)。一旦設(shè)定停用預(yù)測旗標(biāo),則(例如)直到完成軟件回路才可對其進(jìn)行復(fù)位。在決策框408處,做出是否已完成對軟件回路的遍歷的確定。如果已完成對軟件回路的遍歷,那么第一過程400進(jìn)行到?jīng)Q策框414。在決策框414處,做出軟件回路是否完結(jié)的確定。如果軟件回路未結(jié)束,那么第一過程400進(jìn)行到框416。在框416處,對回路反復(fù)進(jìn)行計數(shù)且第一過程400返回到?jīng)Q策框406以保持檢查ECNB指令。如果軟件回路結(jié)束, 那么第一過程400進(jìn)行到框418。在框418處,使第一過程400中所使用的預(yù)測電路復(fù)位。 此復(fù)位允許在每次進(jìn)入軟件回路時預(yù)測評估以重新初始化的電路而開始?;蛘撸稍诿慨?dāng)檢測到新軟件回路時進(jìn)行復(fù)位。接著,第一過程400返回到框402以開始搜索下一軟件回路。返回到?jīng)Q策框410,如果滿足預(yù)先指定的準(zhǔn)則,那么第一過程400進(jìn)行到?jīng)Q策框 420。在決策框420處,做出關(guān)于是否滿足此ECNB指令的執(zhí)行條件的確定。舉例來說,執(zhí)行條件可采用用于此ECNB指令的停用預(yù)測旗標(biāo)的形式。每當(dāng)ECNB指令的例項(xiàng)有條件地執(zhí)行時,通常將設(shè)定停用預(yù)測旗標(biāo)。一旦設(shè)定此停用預(yù)測旗標(biāo),則(例如)直到完成軟件回路才可對其進(jìn)行復(fù)位。返回到?jīng)Q策框420,如果停用預(yù)測旗標(biāo)處于指示先前曾執(zhí)行ECNB指令的停用預(yù)測狀態(tài),那么第一過程400返回到框412。如果停用預(yù)測旗標(biāo)處于指示先前尚未執(zhí)行 ECNB指令的啟用預(yù)測狀態(tài),那么第一過程400進(jìn)行到框421。在框421處,預(yù)測將此ECNB 指令作為NOP指令執(zhí)行。在框422處,在處理器管線中追蹤預(yù)測。在決策框似4處,在確定與此ECNB指令相關(guān)聯(lián)的條件的管線級處,做出框420的預(yù)測是否正確的確定。如果預(yù)測正確,那么過程400返回到框408,因?yàn)榭赡苄枰u估軟件回路中的其它ECNB指令。如果預(yù)測不正確,那么第一過程400進(jìn)行到框426。在框似6處,起始處理器管線的清空以移除經(jīng)不正確預(yù)測的ECNB指令和管線中可能受到所預(yù)測操作影響的任何指令。在框似6處,將管線校正到檢測此ECNB指令的點(diǎn)。接著,過程400返回到框412,其中可接著執(zhí)行此ECNB指令且更新其相關(guān)聯(lián)執(zhí)行狀態(tài)。圖4B說明用于預(yù)測ECNB指令的執(zhí)行的第二過程450。在框452處,監(jiān)視處理器代碼執(zhí)行以檢測ECNB指令。在決策框4M處,做出在(例如)管線解碼級(例如,圖2的解碼級231)期間是否已檢測到ECNB指令的確定。如果尚未檢測到ECNB指令,那么第二過程 450返回到框452。如果已檢測到ECNB指令,那么第二過程450進(jìn)行到?jīng)Q策框456。在決策框456處,在處理器解碼級231期間做出(例如)是否滿足此ECNB指令的預(yù)先指定的評估準(zhǔn)則的確定。預(yù)先指定的評估準(zhǔn)則可為(例如)與ECNB指令相關(guān)聯(lián)的回路反復(fù)計數(shù)是否大于或等于預(yù)先指定的值(例如,3)。如果尚未滿足預(yù)先指定的評估準(zhǔn)則,那么第二過程 450進(jìn)行到框458。在框458處,執(zhí)行此ECNB指令且更新此ECNB指令的執(zhí)行狀態(tài)計數(shù)器。在決策框460處,做出是否已檢測到軟件回路的確定。如上所述,可通過(例如) 識別代碼中的向后分支來確定軟件回路。如果尚未檢測到軟件回路,那么第二過程450返回到框452以檢查另一 ECNB指令。如果已檢測到軟件回路,那么第二過程450進(jìn)行到框 462。在框462處,初始化不為所檢測到的回路的部分的ECNB指令的執(zhí)行狀態(tài)計數(shù)器,因?yàn)樵诘诙^程450中,僅預(yù)測軟件回路中的ECNB指令。圖4B涵蓋在具有回路外的其它ECNB 指令的代碼序列中檢測到所述回路的預(yù)期狀況?;芈吠獾钠渌麰CNB指令影響CHT容量且可限制在所檢測到的回路中評估的ECNB指令的數(shù)目。因此,重新起始回路外的所遇到的ECNB 指令的執(zhí)行狀態(tài)計數(shù)器且如以下進(jìn)一步詳細(xì)描述來調(diào)整CHT邏輯??蓮腅CNB指令的地址和軟件回路的地址范圍來確定不為所檢測到的軟件回路的部分的ECNB指令。調(diào)整有條件歷史表(CHT)的開始條目以表示軟件回路中檢測到的ECNB 指令。還應(yīng)注意,可將不為所檢測到的回路的部分的ECNB指令的執(zhí)行狀態(tài)計數(shù)器重新分配到CHT以增加用于軟件回路內(nèi)ECNB指令的CHT容量。在決策框464處,做出軟件回路是否完結(jié)的確定。如果軟件回路未結(jié)束,那么第二過程450進(jìn)行到框466。在框466處,對回路反復(fù)進(jìn)行計數(shù)且過程返回到框452。如果軟件回路結(jié)束,那么第二過程450進(jìn)行到框468。 在框468處,使第一過程400中所使用的預(yù)測電路復(fù)位。此復(fù)位允許在每次進(jìn)入軟件回路時通過重新起始的電路開始預(yù)測評估。或者,可在每當(dāng)檢測到新軟件回路時進(jìn)行復(fù)位。返回到?jīng)Q策框456,如果滿足預(yù)先指定的準(zhǔn)則,那么第二過程450進(jìn)行到?jīng)Q策框 470。在決策框470處,做出是否將此ECNB指令作為無操作(NOP)指令執(zhí)行的確定。舉例來說,可預(yù)測此ECNB指令執(zhí)行由所述ECNB指令指定的功能。在此狀況下,第二過程450進(jìn)行到框458?;蛘?,可預(yù)測將此ECNB指令作為NOP指令執(zhí)行。在框472處,在處理器管線中追蹤預(yù)測。在決策框474處,在確定與此ECNB指令相關(guān)聯(lián)的條件的管線級處,做出框470 的預(yù)測是否正確的確定。如果預(yù)測正確,那么第二過程450返回到框460。如果預(yù)測不正確,那么第二過程450進(jìn)行到框476。在框476處,起始處理器管線的清空以移除經(jīng)不正確預(yù)測的ECNB指令和管線中可能受到所預(yù)測操作影響的任何指令。在框478處,由于發(fā)現(xiàn)正被評估的軟件回路中的不正確預(yù)測而使第二過程450中所使用的預(yù)測電路復(fù)位。接著,第二過程450返回到框452。或者,可對ECNB指令狀態(tài)計數(shù)器進(jìn)行校正以反映不正確預(yù)測且過程可繼續(xù)。
圖5說明用于預(yù)測ECNB指令的執(zhí)行的第三過程500。在框502處,監(jiān)視處理器代碼執(zhí)行以確定處理器是否正執(zhí)行從預(yù)先指定的地址范圍提取的代碼。舉例來說,編譯程序或其它軟件工具可識別代碼區(qū)段中的ECNB指令且使用所識別的ECNB指令的地址來一般化預(yù)先指定的地址范圍。在決策框504處,做出在(例如)管線提取級(例如,圖2的提取級 230)期間是否檢測到預(yù)先指定的地址范圍的確定。如果尚未檢測到預(yù)先指定的地址范圍, 那么第三過程500返回到框502。如果已檢測到預(yù)先指定的地址范圍,那么第三過程500進(jìn)行到框506。在框506處,更新地址范圍計數(shù)器以指示進(jìn)入特定地址范圍的次數(shù)。在框508 處,監(jiān)視處理器代碼以檢測ECNB指令。在決策框510處,做出在(例如)管線解碼級(例如,圖2的解碼級231)期間是否已檢測到ECNB指令的確定。如果尚未檢測到ECNB指令, 那么第三過程500進(jìn)行到?jīng)Q策框512。在決策框512處,做出處理器是否仍在執(zhí)行預(yù)先指定的地址范圍內(nèi)的代碼的確定。如果處理器并非正在執(zhí)行預(yù)先指定的地址范圍內(nèi)的代碼,那么第三過程500進(jìn)行到框502。如果處理器正在執(zhí)行預(yù)先指定的地址范圍內(nèi)的代碼,那么第三過程500進(jìn)行到框508。返回到?jīng)Q策框510處,如果已檢測到ECNB指令,那么第三過程500進(jìn)行到?jīng)Q策框 514。在決策框514處,在圖2的處理器解碼級231期間做出(例如)是否滿足此ECNB指令的預(yù)先指定的評估準(zhǔn)則的確定。選擇預(yù)先指定的評估準(zhǔn)則以提供預(yù)測將ECNB指令作為 NOP執(zhí)行的高置信度。舉例來說,在一個實(shí)施例中,可設(shè)置預(yù)先指定的評估準(zhǔn)則以要求ECNB 指令的至少兩次先前嘗試執(zhí)行具有強(qiáng)力不執(zhí)行狀態(tài)。如果不滿足預(yù)先指定的評估準(zhǔn)則,那么第三過程500進(jìn)行到框516。在框516處,執(zhí)行此ECNB指令且更新此ECNB指令的執(zhí)行狀態(tài)計數(shù)器。接著,第三過程500返回到?jīng)Q策框512以確定處理器是否仍在執(zhí)行預(yù)先指定的地址范圍內(nèi)的代碼,且如果確定結(jié)果為肯定的,那么返回到框508,否則返回到框502。返回到?jīng)Q策框514,如果滿足預(yù)先指定的評估準(zhǔn)則,那么第三過程500進(jìn)行到框 520。在框520處,此ECNB指令的執(zhí)行經(jīng)預(yù)測以作為NOP指令執(zhí)行。在框522處,在處理器管線中追蹤預(yù)測。在決策框5M處,在確定與此ECNB指令相關(guān)聯(lián)的條件的管線級處,做出框520的預(yù)測是否正確的確定。如果預(yù)測正確,那么第三過程500返回到?jīng)Q策框512以確定處理器是否仍在執(zhí)行預(yù)先指定的地址范圍內(nèi)的代碼,且如果確定結(jié)果為肯定的,那么返回到框508,否則返回到框502。返回到?jīng)Q策框524,如果預(yù)測不正確,那么第三過程500進(jìn)行到框528。在框528 處,起始處理器管線的清空以移除經(jīng)不正確預(yù)測的ECNB指令和管線中可能受到所預(yù)測操作影響的任何指令。在框530處,更新用于此ECNB指令的預(yù)測電路。接著,過程500返回到框508。圖6說明用于預(yù)測ECNB指令的執(zhí)行的第四過程600。第四過程600評估ECNB指令是否重復(fù)地識別為在相同ECNB指令的識別之間具有相對較短或相對較長的處理器循環(huán)周期。相對較短的處理器循環(huán)周期可指示ECNB指令位于軟件回路中。相對較長的處理器循環(huán)周期可指示ECNB指令位于主要?dú)w因于被調(diào)用例程而執(zhí)行(例如,當(dāng)用戶下載用于顯示的視頻時)的地址范圍內(nèi)。在此狀況下,可調(diào)用具有ECNB指令的MPEG解碼例程。在框602處,監(jiān)視處理器代碼執(zhí)行以檢測ECNB指令。在決策框604處,做出在(例如)管線解碼級(例如,圖2的解碼級231)期間是否已檢測到ECNB指令的確定。如果尚未檢測到ECNB指令,那么第四過程600返回到框602。如果已檢測到ECNB指令,那么第四
12過程600進(jìn)行到?jīng)Q策框606。在決策框606處,做出先前是否已識別到此ECNB指令的確定。 如果此識別為對此ECNB指令的第一次識別,那么第四過程600進(jìn)行到框608。在框608處, 記錄此ECNB指令的地址。在框610處,將“命中”計數(shù)器起始為(例如)計數(shù)1。在框612 處,開始經(jīng)過循環(huán)計數(shù)器(elapsed cycle counter)以對多次遇到此ECNB指令之間經(jīng)過的循環(huán)的數(shù)目進(jìn)行計數(shù)。應(yīng)注意,在與中斷例程和直接存儲器存取操作相關(guān)聯(lián)的循環(huán)就其預(yù)期目的來說影響計數(shù)準(zhǔn)確性的程度上,可能需要過濾所計數(shù)的循環(huán)數(shù)目以考慮這些其它操作。在框614處,執(zhí)行此ECNB指令且更新執(zhí)行狀態(tài)計數(shù)器。接著,第四過程600返回到框 602。返回到?jīng)Q策框606,如果先前已識別此ECNB指令,那么第四過程600進(jìn)行到框 618。在框618處,評估已遇到此ECNB指令的次數(shù)和多次遇到之間經(jīng)過的循環(huán)的數(shù)目。在框619處,更新“命中”計數(shù)器,存儲當(dāng)前經(jīng)過循環(huán)計數(shù),且重新開始經(jīng)過循環(huán)計數(shù)器以對下一周期中多次遇到之間經(jīng)過的循環(huán)的數(shù)目進(jìn)行計數(shù)。在決策框620處,做出是否評估預(yù)先指定的評估準(zhǔn)則的確定。在一個實(shí)施例中,可設(shè)置預(yù)先指定的評估準(zhǔn)則以要求在執(zhí)行狀態(tài)計數(shù)器中至少兩次先前嘗試執(zhí)行具有強(qiáng)力不執(zhí)行狀態(tài),其中兩次遇到之間的處理器循環(huán)少于X個。在另一實(shí)施例中,可設(shè)置預(yù)先指定的評估準(zhǔn)則以要求至少三次先前嘗試執(zhí)行,每一次先前嘗試執(zhí)行在執(zhí)行狀態(tài)計數(shù)器中具有強(qiáng)力不執(zhí)行狀態(tài),其中三次遇到中的每一者之間的處理器循環(huán)至少為Y個,其中Y大于X。如果不滿足預(yù)先指定的評估準(zhǔn)則,那么第四過程 600返回到框614,其中執(zhí)行此ECNB指令且更新執(zhí)行狀態(tài)計數(shù)器。接著,過程返回進(jìn)行到 602。返回到?jīng)Q策框620,如果滿足預(yù)先指定的評估準(zhǔn)則,那么第四過程600進(jìn)行到框 624。在框6M處,預(yù)測此ECNB指令的執(zhí)行;例如,預(yù)測將此ECNB指令作為NOP指令執(zhí)行。 在框6 處,在處理器管線中追蹤預(yù)測。在決策框6 處,在確定與此ECNB指令相關(guān)聯(lián)的條件的管線級處,做出框624的預(yù)測是否正確的確定。如果預(yù)測正確,那么第四過程600返回到框602。如果預(yù)測不正確,那么第四過程600進(jìn)行到框632。在框632處,起始處理器管線的清空以移除經(jīng)不正確預(yù)測的ECNB指令和管線中可能受到預(yù)測操作影響的任何指令。在框634處,使用于此ECNB指令的預(yù)測電路復(fù)位。接著,過程600返回到框602。結(jié)合本文中所揭示的實(shí)施例所描述的各種說明性邏輯塊、模塊、電路、元件和/或組件可利用以下各項(xiàng)來實(shí)施或執(zhí)行通用處理器、數(shù)字信號處理器(DSP)、專用集成電路 (ASIC)、現(xiàn)場可編程門陣列(FPGA)或其它可編程邏輯組件、離散門或晶體管邏輯、離散硬件組件,或其經(jīng)設(shè)計以執(zhí)行本文中所描述的功能的任何組合。通用處理器可為微處理器,但在替代方案中,處理器可為任何常規(guī)的處理器、控制器、微控制器或狀態(tài)機(jī)。還可將處理器實(shí)施為計算組件的組合,例如,DSP與微處理器的組合、多個微處理器的組合、結(jié)合DSP核心的一個或一個以上微處理器或適于所要應(yīng)用的任何其它此類配置。結(jié)合本文中所揭示的實(shí)施例所描述的方法可直接以硬件、以由處理器執(zhí)行的軟件模塊或以兩者的組合體現(xiàn)。軟件模塊可駐留于RAM存儲器、快閃存儲器、ROM存儲器、EPROM 存儲器、EEPROM存儲器、寄存器、硬盤、可裝卸盤、⑶-ROM或此項(xiàng)技術(shù)中已知的任何其它形式的存儲媒體中。存儲媒體可耦合到處理器,使得所述處理器可從所述存儲媒體讀取信息且可將信息寫入到所述存儲媒體。在替代方案中,存儲媒體可與處理器成一體式。舉例來說,處理器210可經(jīng)配置以在存儲于計算機(jī)可讀存儲媒體上的程序的控制下執(zhí)行包括有條件非分支指令的指令,所述計算機(jī)可讀存儲媒體(例如)在本地與處理器直接相關(guān)聯(lián)(例如,可經(jīng)由指令高速緩沖存儲器獲得)或可經(jīng)由I/O裝置(例如,I/O裝置 240或?qū)?中的一者)存取。I/O裝置還可存取駐留于在本地與處理器直接相關(guān)聯(lián)的存儲器裝置(例如,Dcache 228)中或可從另一處理器的存儲器存取的數(shù)據(jù)。計算機(jī)可讀存儲媒體可包括隨機(jī)存取存儲器(RAM)、動態(tài)隨機(jī)存取存儲器(DRAM)、同步動態(tài)隨機(jī)存取存儲器 (SDRAM)、快閃存儲器、只讀存儲器(ROM)、可編程只讀存儲器(PROM)、可擦除可編程只讀存儲器(EPROM)、電可擦除可編程只讀存儲器(EEPROM)、緊密光盤(CD)、數(shù)字影音光盤(DVD)、 其它類型的可裝卸盤或任何其它合適的存儲媒體。 盡管在說明性實(shí)施例的情境中揭示本發(fā)明以在處理器系統(tǒng)中使用,但應(yīng)認(rèn)識到, 所屬領(lǐng)域的一般技術(shù)人員可使用與上文論述和所附權(quán)利要求書相一致的廣泛多種實(shí)施方案。舉例來說,固定功能實(shí)施方案也可利用本發(fā)明的各種實(shí)施例。
權(quán)利要求
1.一種用于不執(zhí)行已發(fā)出的有條件非分支指令的方法,所述方法包含將有條件非分支指令識別為入選以用于預(yù)測,所述預(yù)測指示所述入選有條件非分支 ECNB指令將不會執(zhí)行;以及響應(yīng)于所述ECNB指令將不會執(zhí)行的所述預(yù)測,將所述ECNB指令作為無操作NOP指令執(zhí)行。
2.根據(jù)權(quán)利要求1所述的方法,其中響應(yīng)于所述預(yù)測而不提取所述ECNB指令執(zhí)行所需的源操作數(shù)。
3.根據(jù)權(quán)利要求1所述的方法,其中響應(yīng)于所述預(yù)測而不保留通用寄存器文件中的寄存器以含有所述ECNB指令的結(jié)果。
4.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含響應(yīng)于停用預(yù)測旗標(biāo)而預(yù)測所述ECNB指令不執(zhí)行,所述停用預(yù)測旗標(biāo)指示在所述預(yù)測所基于的入選周期期間未發(fā)生所述ECNB指令的先前成功執(zhí)行。
5.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含在歷史寄存器中記錄所述ECNB指令是否曾執(zhí)行;以及響應(yīng)于所述歷史寄存器指示所述ECNB指令的至少一次先前所嘗試執(zhí)行未曾執(zhí)行而預(yù)測下一 ECNB指令不執(zhí)行。
6.根據(jù)權(quán)利要求5所述的方法,其中在軟件回路中曾遇到所述ECNB指令的所述至少一次先前所嘗試執(zhí)行。
7.根據(jù)權(quán)利要求5所述的方法,其中在預(yù)先指定的地址范圍中曾遇到所述ECNB指令的所述至少一次先前所嘗試執(zhí)行。
8.根據(jù)權(quán)利要求5所述的方法,其中在所識別數(shù)目的處理器循環(huán)內(nèi)曾遇到所述ECNB指令的所述至少一次先前所嘗試執(zhí)行。
9.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含比較評估準(zhǔn)則與ECNB指令執(zhí)行狀態(tài)計數(shù)器的計數(shù)值輸出以產(chǎn)生所述預(yù)測,其中所述 ECNB指令執(zhí)行狀態(tài)計數(shù)器在第一計數(shù)值下飽和,所述第一計數(shù)值指示所述ECNB指令的先前所嘗試執(zhí)行被強(qiáng)力不執(zhí)行的歷史。
10.根據(jù)權(quán)利要求9所述的方法,其進(jìn)一步包含在第一方向上更新所述ECNB指令執(zhí)行狀態(tài)計數(shù)器以指示所述ECNB指令的先前所嘗試執(zhí)行曾有條件地執(zhí)行;以及在與所述第一方向相反的第二方向上更新所述ECNB指令執(zhí)行狀態(tài)計數(shù)器以指示所述 ECNB指令的先前所嘗試執(zhí)行未曾有條件地執(zhí)行。
11.根據(jù)權(quán)利要求9所述的方法,其中所述評估準(zhǔn)則為所述第一計數(shù)值。
12.根據(jù)權(quán)利要求9所述的方法,其中在軟件回路中曾遇到所述ECNB指令的所述先前所嘗試執(zhí)行。
13.一種用于預(yù)測有條件非分支指令將不會執(zhí)行的設(shè)備,所述設(shè)備包含第一電路,其用于識別有條件非分支指令入選以用于預(yù)測;以及第二電路,其用于響應(yīng)于滿足評估準(zhǔn)則而預(yù)測所述入選有條件非分支ECNB指令是否將不會執(zhí)行。
14.根據(jù)權(quán)利要求13所述的設(shè)備,其進(jìn)一步包含操作數(shù)提取電路,其響應(yīng)于不執(zhí)行的所述預(yù)測而不提取所述ECNB指令執(zhí)行所需的操作數(shù)。
15.根據(jù)權(quán)利要求13所述的設(shè)備,其進(jìn)一步包含管線追蹤電路,其用以在用于預(yù)測的管線級之后的管線級中追蹤所述預(yù)測;以及 ECNB指令執(zhí)行級電路,其響應(yīng)于不執(zhí)行的所述預(yù)測而不執(zhí)行所述ECNB指令。
16.根據(jù)權(quán)利要求13所述的設(shè)備,其進(jìn)一步包含ECNB指令執(zhí)行狀態(tài)計數(shù)器,其具有與所述評估準(zhǔn)則進(jìn)行比較的計數(shù)值輸出,其中所述計數(shù)值在第一方向上經(jīng)更新以指示ECNB指令曾有條件地執(zhí)行并在指示強(qiáng)力執(zhí)行歷史的第一計數(shù)值下飽和,且在第二方向上經(jīng)更新以指示ECNB指令未曾執(zhí)行并在指示強(qiáng)力不執(zhí)行歷史的第二計數(shù)值下飽和。
17.根據(jù)權(quán)利要求16所述的設(shè)備,其中所述評估準(zhǔn)則為所述第二計數(shù)值。
18.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述評估準(zhǔn)則為處于非作用中狀態(tài)的停用預(yù)測旗標(biāo),其中所述停用預(yù)測旗標(biāo)的所述非作用中狀態(tài)指示預(yù)測經(jīng)啟用,其中在任何時候確定所述ECNB指令已在與所述ECNB指令相關(guān)聯(lián)的軟件回路中有條件地執(zhí)行的情況下將所述停用預(yù)測旗標(biāo)設(shè)定為停用狀態(tài)。
19.一種用于預(yù)測有條件非分支指令將不會執(zhí)行的方法,所述方法包含 識別入選以用于預(yù)測有條件非分支指令是否將執(zhí)行;以及響應(yīng)于滿足評估準(zhǔn)則而預(yù)測所述入選有條件非分支ECNB指令將不執(zhí)行。
20.根據(jù)權(quán)利要求19所述的方法,其中響應(yīng)于滿足所述評估準(zhǔn)則而不提取所述ECNB指令執(zhí)行所需的源操作數(shù)。
21.根據(jù)權(quán)利要求19所述的方法,其中響應(yīng)于滿足所述評估準(zhǔn)則而將所述ECNB指令作為無操作NOP指令執(zhí)行。
22.根據(jù)權(quán)利要求19所述的方法,其中滿足所述評估準(zhǔn)則包含記錄在軟件回路內(nèi)曾遇到的所述ECNB指令的先前所嘗試執(zhí)行的執(zhí)行狀態(tài)的歷史;以及將所述歷史與所述評估準(zhǔn)則進(jìn)行比較以指示是否已滿足所述評估準(zhǔn)則。
全文摘要
本發(fā)明描述用于不執(zhí)行已發(fā)出的有條件非分支指令的有效技術(shù)。將有條件非分支指令識別為入選以用于預(yù)測,所述預(yù)測指示所述入選有條件非分支ECNB指令將不會執(zhí)行。所述ECNB指令響應(yīng)于所述ECNB指令將不會執(zhí)行的所述預(yù)測而作為無操作NOP指令執(zhí)行。所述ECNB指令執(zhí)行所需的源操作數(shù)響應(yīng)于不執(zhí)行的所述預(yù)測而不被提取。
文檔編號G06F9/38GK102483696SQ201080036831
公開日2012年5月30日 申請日期2010年8月18日 優(yōu)先權(quán)日2009年8月19日
發(fā)明者布萊恩·M·斯坦普爾, 戴維·J·曼德扎克, 托馬斯·A·薩托里烏斯, 羅德尼·W·史密斯, 詹姆斯·N·迪芬德爾弗爾 申請人:高通股份有限公司