專利名稱:在條件指令將不執(zhí)行時停止等待源操作數(shù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于在條件使得條件指令將不執(zhí)行時避免等待用于所述條件指令的 操作數(shù)數(shù)據(jù)而帶來的延時的技術(shù),且涉及實施所述技術(shù)的管線處理器。
背景技術(shù):
現(xiàn)代微處理器及其他可編程處理器電路通常依賴于管線處理構(gòu)架,以改進執(zhí)行速 度。管線處理器包括多個處理級,以便在每一指令穿過所述管線時依序處理所述指令。 當一個級正處理一指令時,沿所述管線的其他級同時處理其他指令。管線的每一級執(zhí)行每一程序指令的總處理中所需的r個不同功能。雖然次序及/ 或功能可能略有變化,但典型的簡單管線包括指令提取級、指令解碼級、寄存器文件 訪問或寄存器讀取級、執(zhí)行級和結(jié)果寫回級。更先進的處理器設(shè)計將這些級的一些或 全部分解成數(shù)個單獨級,以便實施這些功能的子部分。超標量設(shè)計進一步分解所述功 能,及/或提供復制功能或委托指定功能至指定管線,以同時在并列管線中執(zhí)行操作。 隨著處理器速度的增加,給定級實施其功能的時間減少。為維持或進一步改進性能, 將每一級細分。每一新級在給定的循環(huán)期間實施較少的工作,但存在更多以較高時鐘 率同時操作的級。在較高速構(gòu)架中,獲得指令據(jù)以進行操作所需的數(shù)據(jù)一也就是說對應的操作數(shù)數(shù) 據(jù)一相對于處理器循環(huán)時間需要更多時間,且可能導致一個或多個循環(huán)的延時。另外, 通常一指令必須在一較早或較舊的指令己將所述操作數(shù)數(shù)據(jù)寫入(通常)指定寄存器 之后才獲得操作數(shù)數(shù)據(jù)。寫后讀的危險出現(xiàn)于指令寫入操作數(shù)數(shù)據(jù)花費了大量處理循 環(huán)(例如,針對乘法操作),且想要使用所述操作數(shù)數(shù)據(jù)的后一指令必須等待直至較舊 指令已計算及完成寫入必要的操作數(shù)數(shù)據(jù)時。存在真實的數(shù)據(jù)依賴性,因為后一指令 需要來自較早指令的數(shù)據(jù)以完成其操作。因此,后一指令的處理停止于寄存器讀取級 內(nèi)或執(zhí)行級開始時。這一寫后讀(RAW)危險的影響隨寫入操作數(shù)的較舊指令的延時增加而增大,因 為所述停止會延時越來越多的處理循環(huán)。如果管線僅具有一個執(zhí)行級,則所述危險事 實上將不成問題,因為無論如何后一指令將總是等待較舊指令完成執(zhí)行。然而,由于 在超標量構(gòu)架中管線深化以包含多個執(zhí)行級或并列執(zhí)行級,則后一指令可在較舊指令 在其前面執(zhí)行時繼續(xù)一個或多個級,但后一指令的級執(zhí)行必須等待(停止)以獲得由 較早指令產(chǎn)生的操作數(shù)數(shù)據(jù)。
如果從寄存器文件處獲得操作數(shù)數(shù)據(jù),則通常無需等待數(shù)據(jù)。然而,如果指令必 須停止于寄存器文件讀取(或更早的)級中,并等待長延時操作數(shù)數(shù)據(jù)寫入所述寄存 器文件,則存在對來自寄存器文件的數(shù)據(jù)的等待。在這一情形中,等待指令讀取(或 再讀取)寄存器文件以獲得其數(shù)據(jù)。僅在幾乎或完全不存在來自其他結(jié)果產(chǎn)生級的操 作數(shù)數(shù)據(jù)轉(zhuǎn)發(fā)路徑時才使用此方法。事實上,所有的現(xiàn)代處理器均具有操作數(shù)轉(zhuǎn)發(fā)網(wǎng)絡(luò),且無需自寄存器文件讀取RAW操作數(shù)。條件性執(zhí)行指令是基于某一經(jīng)標識條件的狀態(tài)而執(zhí)行或不執(zhí)行的指令,其中所述 經(jīng)標識條件通常是由條件寄存器中的一個或多個比特指示的條件。條件指令使得如果 條件代碼(CC)寄存器中的一個或多個條件代碼匹配所述指令中指定的條件,則執(zhí)行 其指定功能。如果不滿足所述條件,則將不執(zhí)行所述條件指令。在所述情形中,可將 指令標記為通過管線的更多級傳遞而不執(zhí)行的"NOP"指令,或者可自管線中的指令 流中移除所述條件性執(zhí)行指令。通常,將條件性分析作為執(zhí)行處理的一部分來執(zhí)行。例如條件性加、減、乘、除等多數(shù)條件指令在滿足相應條件時需要用于執(zhí)行指定 功能的操作數(shù)數(shù)據(jù)。如果將要執(zhí)行條件指令(滿足條件),則其進一步的處理必須等待 從寄存器文件、或經(jīng)由結(jié)果轉(zhuǎn)發(fā)網(wǎng)絡(luò)從所述管線本身、或從存儲器獲得必需的操作數(shù) 數(shù)據(jù)?,F(xiàn)有系統(tǒng)通過管線施加所述條件指令的這一相同等待、停止處理,而無論是否 滿足所述條件。在其中后一指令需要操作數(shù)數(shù)據(jù)但是是條件指令的情形中,如果不滿足條件,則 將不執(zhí)行結(jié)果。在所述情形中,等待讀取操作數(shù)數(shù)據(jù)會施加不必要的延時。發(fā)明內(nèi)容本發(fā)明教示減輕因原來會在等待RAW危險操作數(shù)數(shù)據(jù)時施加的非執(zhí)行條件指令 而引起的延時。在執(zhí)行之前的適合點處,做出關(guān)于所述條件的確定。如果所述條件使 得將不在通過管線的這一傳遞時執(zhí)行指令,則可在完成接收所有相關(guān)聯(lián)的操作數(shù)數(shù)據(jù) 之前終止(也就是說跳過或停止)關(guān)于所述條件指令的保持。這些教示的范圍涵蓋(例如) 一種用以控制條件指令通過管線處理器的處理的方 法,其中所述管線處理器包含大量處理級。所述方法涉及在管線的第一級中將條件指 令解碼,并分析用于執(zhí)行所述指令以確定是否應由管線的后一級執(zhí)行所述指令所需的 條件。如果所述條件的分析指示不應執(zhí)行所述指令,則可以縮短或跳過對任何尚未接 收到的、原本是執(zhí)行所述條件指令所需的操作數(shù)數(shù)據(jù)的停止。非執(zhí)行條件指令無需等待以接收所有其操作數(shù)數(shù)據(jù)。例如,在較早的指令計算并 寫入用于所述條件指令的操作數(shù)數(shù)據(jù)之前,不再存在延時。通常,如果不滿足所述條件指令的指定條件,則將不執(zhí)行所述指令。然而,可能 存在其中條件指令經(jīng)構(gòu)架以使得在滿足指定條件時不執(zhí)行的情況。存在數(shù)個將允許指令繼續(xù)通過管線而不執(zhí)行所述指令的處理技術(shù)。例如,可將所
述指令標記為或轉(zhuǎn)換至無操作(NOP)指令。后面的級將標識所述NOP,且將不執(zhí)行 原始指令(注意,所述NOP被作為NOP來執(zhí)行)?;蛘?,可將所述指令標記為好像已 接收到所有操作數(shù)數(shù)據(jù),從而避開等待長的延時數(shù)據(jù)。在這后一情形中,在執(zhí)行級處 理所述指令時,其將再次確定條件使得所述指令不應被執(zhí)行并相應地采取行動?;貞谄渲杏捎谶m用的條件狀態(tài)而不執(zhí)行所述指令的第一確定,其他方法可能從 管線中整體移除非執(zhí)行條件指令??梢酝ㄟ^允許依序的下一指令覆寫其中確定應不執(zhí) 行所述指令的級中的所述條件指令而有效地移除所述條件指令,或者所述處理器可以 在當前保持所述條件指令的級中以清除狀態(tài)計時。存在其中可以不設(shè)定條件指令所指定的條件的情形。由于較早指令可寫入必要的操作數(shù)數(shù)據(jù),則較早指令也可以設(shè)定用以指定特定條件的狀態(tài)的代碼或數(shù)據(jù)。在確定 所述條件是否將導致條件指令的執(zhí)行之前,可能必須預測管線中的條件指令以確定仍 在處理中的較早指令是否可能設(shè)定關(guān)于相關(guān)條件的數(shù)據(jù)。如果不存在由較早指令設(shè)定 相關(guān)條件數(shù)據(jù)的這種可能性,則條件分析可以確定將執(zhí)行還是不執(zhí)行所述條件指令, 且隨后等待或不等待用于執(zhí)行所述指令所需的操作數(shù)數(shù)據(jù)。如果存在將設(shè)定相關(guān)條件 數(shù)據(jù)的較早指令,則所述條件指令必須等待更新想要在可以確定是執(zhí)行還是不執(zhí)行條 件指令之前就知曉的條件數(shù)據(jù)。本發(fā)明教示還涵蓋管線處理器。例如,這種處理器可以包括解碼級、寄存器讀取 級和執(zhí)行區(qū)段。執(zhí)行區(qū)段包括多個級。 一個所述指令的執(zhí)行是條件性的,其中基于指 定條件的出現(xiàn)來執(zhí)行一個指令。通常,當指令遇到其不能使用數(shù)據(jù)轉(zhuǎn)發(fā)網(wǎng)絡(luò)立即解決 的RAW危險時,保持所述指令,避免其執(zhí)行直至其已獲得所有用于其執(zhí)行所需的源 操作數(shù)數(shù)據(jù)。然而,基于尚未出現(xiàn)指定條件的確定而停止在執(zhí)行所述條件指令之前的 保持。其他目標、優(yōu)點及新穎特征將在以下說明中部分地加以闡述,且在審查以下說明 及隨附圖式后將部分地對所屬技術(shù)領(lǐng)域中的技術(shù)人員顯而易見,或可通過產(chǎn)生或操作 所述實例而知曉。本發(fā)明教示的目標及優(yōu)點可以通過實踐或使用隨附權(quán)利要求書中特 別指出的方法、手段和組合來實現(xiàn)及達成。
所述圖式僅以舉例而非限制方式描繪根據(jù)本發(fā)明教示的一個或多個實施方案。在 圖式中,相同的參考編號表示相同或相似的元件。圖1是管線處理器的簡化實例的功能方塊圖,所述管線處理器可實施根據(jù)本文所 述技術(shù)的條件指令處理。圖2是根據(jù)ARM協(xié)議的條件指令的格式的圖形表示。圖3是條件狀態(tài)和相關(guān)聯(lián)的可執(zhí)行指令的格式的圖形表示,所述條件狀態(tài)和可執(zhí) 行指令一起形成根據(jù)ARM協(xié)議的THUMB擴展的條件指令。
圖4是有利于解釋適用于處理條件指令的邏輯實例的流程圖。
具體實施方式
在下列詳細說明中,以舉例方式列舉大量具體細節(jié)以提供相關(guān)教示的透徹理解。 然而,所屬技術(shù)領(lǐng)域的技術(shù)人員將易于了解,可在沒有這些細節(jié)的情況下實踐本發(fā)明 教示。在其他示例中,以相對高級別而非詳細地闡述眾所周知的方法、程序、組件和 電路,以免不必要地淡化本發(fā)明教示的各方面。本文揭示的各種技術(shù)涉及撤銷或避免停止管線中的條件指令,以等待接收非執(zhí)行 條件指令的操作數(shù)數(shù)據(jù)。例如,針對將不在此次通過管線時執(zhí)行的條件指令,這種技 術(shù)減少或減輕對正行進通過管線的較早指令進行寫入操作數(shù)數(shù)據(jù)的等待。條件指令的執(zhí)行(也就是所述指令所指定處理的實施)取決于指定條件,例如可由條件代碼(CC)寄存器中設(shè)定的一個或多個比特表示??赡艽嬖谄渲袟l件指令經(jīng)構(gòu) 架以使得如果滿足指定條件則不執(zhí)行所述指令的情況。然而,出于進一步論述所述實 例的目的,如果滿足所述條件則執(zhí)行條件指令,且如果不滿足條件指令的指定條件則 不執(zhí)行?,F(xiàn)在詳細參照隨附圖式中所圖解說明及下文論述的實例。圖1是管線處理器10 的簡化方塊圖。為便于論述,管線10的所述實例是一標量設(shè)計,其主要實施單個級管 道。然而,所屬技術(shù)領(lǐng)域的技術(shù)人員將了解,本文所述條件指令的處理還適用于超標 量設(shè)計和其他實施并列管線的構(gòu)架。同樣,管線的深度(例如,級數(shù)量)僅為代表性。 實際的管線可具有比所述實例中的管線10更少或更多個級。實際的超標量實例可由兩 個或更多個并列管線組成。簡化的管線10包括5個主要的管線處理級類別提取ll、解碼13、寄存器讀取 15、執(zhí)行17和寫回19。圖式中的箭頭表示邏輯數(shù)據(jù)流,而不必須為實際連接。所屬 技術(shù)領(lǐng)域的技術(shù)人員將了解,這些級的任一者可被分解為分別執(zhí)行相關(guān)功能的一部分 的多個級,或者所述管線可包括用于提供其他功能的其他級。出于論述的目的,數(shù)個 主要的級類別顯示為單獨級,盡管通常針對高速處理器而將每一級類別分解為兩個或 更多個級。在有益于論述關(guān)于條件指令的處理并避免對寫入此類指令必需的源操作數(shù) 數(shù)據(jù)的等待時間的地方,將執(zhí)行區(qū)段顯示為包括多個級。在實例性管線10中,第一級是指令提取級11。提取級11獲得用于由后面的級處 理的指令。提取級11從一般以存儲器21表示的存儲器層級獲得所述指令。存儲器21 通常包括指令或一級(Ll)高速緩存、二級(L2)高速緩存和主存儲器??蓪⒅噶钭?其他源(例如,引導ROM或磁盤機)加載至主存儲器。提取級11將每一指令提供至 解碼級13。指令解碼級13的邏輯將所接收的指令字節(jié)解碼,并將結(jié)果提供至管線的 下一級。在實例10中,條件性處理可能早在解碼級13處就開始。條件性處理需要分析指
示一個或多個條件狀態(tài)的數(shù)據(jù),以確定控制指令處理的條件是否需要執(zhí)行所述條件指 令。所述實例使用條件代碼作為條件數(shù)據(jù)。條件代碼通常是設(shè)定于條件寄存器中的比 特。例如,ARM符號涉及條件代碼(CC)寄存器23,其通常包括NZCV條件比特。 負(N)比特指示所記錄的前一結(jié)果(應注意,并不記錄所有結(jié)果)是否為負。零(Z) 比特指示所述結(jié)果是否均為零。進位(C)比特指示前一結(jié)果是否包括進位輸出。溢 出(V)比特指示所述結(jié)果是否為溢出。如下文論述,作為其處理的一部分,解碼級 13的邏輯將確定是否每一指令均為條件指令。如果是條件性的,則解碼級可檢查CC 寄存器23中指示各種條件的比特狀態(tài),作為所述條件指令是否將在通過處理器管線 10的這一傳遞時執(zhí)行的第一確定。下一級提供本地寄存器訪問或寄存器讀取,如級15表示。寄存器讀取級15的邏 輯訪問通用寄存器(GPR)文件29中指定寄存器中的操作數(shù)數(shù)據(jù)。在文件29中存在 n個GPR寄存器,分別編號為0至n-l。在某些情形中,寄存器讀取級15的邏輯可從 存儲器或其他資源(未顯示)獲得操作數(shù)數(shù)據(jù)。如下文針對條件指令的更詳細論述, 寄存器讀取級15的邏輯還檢查寄存器23中指示各種條件的比特的狀態(tài),以確定是否 蔣執(zhí)行條件指令。 '寄存器讀取級15將所述指令及必要的操作數(shù)數(shù)據(jù)傳遞至提供執(zhí)行功能的級17的 組群中。執(zhí)行級17的組群主要對取回的操作數(shù)數(shù)據(jù)執(zhí)行每一指令的特定功能,并產(chǎn)生 結(jié)果。提供執(zhí)行功能的一個或多個級可(例如)實施算法邏輯單元(ALU)。在所述實 例中,管線的執(zhí)行區(qū)段17包括多個級。盡管這些級的數(shù)量可能不同,但出于這一實例 的目的而顯示三個級, 一般稱為Exe 1級37、 Exe 2級39和Exe 3級41。執(zhí)行區(qū)段17的最后一個級一在這一情形中為Exe 3級41一將每一指令的一個或 多個執(zhí)行結(jié)果提供至寫回級19。當然,從Exe級37和39到寫回級19也可能存在"早 退出"路徑。同樣,通常將存在結(jié)果轉(zhuǎn)發(fā)網(wǎng)絡(luò),以將結(jié)果轉(zhuǎn)發(fā)至通過管線傳遞的隨后 指令。級19將所述結(jié)果寫回至文件29中的寄存器或至存儲器(未顯示)。由一指令寫 入GPR寄存器的數(shù)據(jù)可作為操作數(shù)數(shù)據(jù)來讀取,并與流過處理器管線10的后一指令 相一致地進行處理。盡管未單獨顯示,但管線10的每一級通常包括狀態(tài)機或?qū)嵤┫嚓P(guān)邏輯功能的類 似裝置,及用于將指令及/或任何處理結(jié)果傳遞至下一級或傳遞回GPR寄存器文件29 的相關(guān)聯(lián)寄存器。通過管線10處理的多數(shù)指令將要求在所述指令的執(zhí)行期間處理操作數(shù)數(shù)據(jù)。通 常,這種指令包括在較早或較舊指令已執(zhí)行級37、 39和41通過的一者或多者但尚未 寫入GPR文件29或?qū)⑵浣Y(jié)果及時置于轉(zhuǎn)發(fā)網(wǎng)絡(luò)上以供相關(guān)指令不停頓地接收所述結(jié) 果時,在EXE 1級37或較早級處等待操作數(shù)數(shù)據(jù)。這一數(shù)據(jù)相關(guān)性會產(chǎn)生寫后讀 (RAW)危險。有時,寫入操作數(shù)數(shù)據(jù)的較早指令會花費大量處理循環(huán)來完成其計算并寫回結(jié) 果。例如,乘法指令可能需要數(shù)個處理循環(huán)來完成乘法。在這些循環(huán)期間,需要所述
操作數(shù)數(shù)據(jù)的后一指令(例如,所述乘法的結(jié)果)必須等待直至較舊指令已計算并完 成寫入必要的操作數(shù)數(shù)據(jù)。作為另一實例,較早指令的執(zhí)行可能導致發(fā)起將數(shù)據(jù)載入 指定寄存器的操作。然而,如果存在數(shù)據(jù)丟失(想要載入的數(shù)據(jù)不在高速緩存中),則 所述載入經(jīng)排隊以自某一其他資源讀取所述數(shù)據(jù)。盡管針對所述載入而呼叫的指令的 執(zhí)行可能己完成,但實際的載入操作可能在將必需的數(shù)據(jù)載入寄存器并變?yōu)榭捎珊笠?指令使用的操作數(shù)數(shù)據(jù)之前花費大量其他循環(huán)。作為使得必需的操作數(shù)數(shù)據(jù)在這些情形中變得可用所需的時間的結(jié)果,停止所述 需要操作數(shù)數(shù)據(jù)的后一指令的處理。停止所述必需的操作數(shù)數(shù)據(jù)可能是在解碼級中。 通常,處理器IO在寄存器讀取級15的一者中或第一執(zhí)行級(EXE 1) 37的開始處施 加這一停止。在所述實例中,停止等待操作數(shù)數(shù)據(jù)將每一指令保持于EXE1級37處, 包括任一需要操作數(shù)數(shù)據(jù)的條件指令。如本文教示,如果不滿足條件指令中指定的條件或針對所述指令指定的條件,則 所述條件指令將跳過級37處的停止,或?qū)е滤鐾V沟妮^早終止。如果滿足條件或 如果所述指令不是條件性的,則所述指令將等待以正常方式接收必需的操作數(shù)數(shù)據(jù)。在條件'指令的正常處理中,執(zhí)行級的一者(例如,EXE1'級37)將在處理條件指 令時檢查所述條件,如自寄存器23至級37的箭頭所表示。級37-41中的后續(xù)處理將 用于或?qū)⒉挥糜诨诩拇嫫?3中的條件代碼CC與所述指令中所指定條件的比較來執(zhí) 行任一操作數(shù)數(shù)據(jù)上的指令的功能。另外,在條件指令沿管線10傳遞時,管線較早級的一者或多者將以類似方式檢 查條件。在所述實例中,可在解碼級13中的處理期間做出初始檢查,如自寄存器23 至解碼級13的箭頭所表示。寄存器讀取級15還可以檢查條件寄存器23以確定是否滿 足所述條件,同時所述級處理條件指令,如自寄存器23至級15的箭頭所表示。如果 這些較早檢査的任一者確定對于所述條件指令在管線10中的特定通過將不滿足所述 條件,則處理將終止或跳過EXE 1級37處的任何對于完成接收操作數(shù)數(shù)據(jù)的等待, 所述操作數(shù)數(shù)據(jù)原本是執(zhí)行條件指令所需的但尚未接收到。因此,條件指令的處理需要確定所述指令是條件性的,并檢驗指示條件狀態(tài)的條 件代碼或比特以確定是否滿足指定條件。指令可能在其本身內(nèi)具有指示其是條件性的 字段,或者可由另一指令或機制將一指令的制約性施加至所述指令。所述教示可適用 于大量軟件或指令格式。然而,其可能有利于簡要概述某些實例。例如Advanced Rise Machines有限公司許可的"ARM"型處理器等某些處理器構(gòu) 架支持條件指令。ARM指令集具有用以確定所述指令是條件還是非條件的字段,所述 字段是指令本身的一部分。Advance Rise Machines有限公司還提供THUMB-2指令集。 在這后一指令集中,可由較早指令將所述指令的條件施加至所述指令上。THUMB-2 指令集具有稱作it (代表如果…則)的條件施加指令。thumb-2指令集具有16和 32比特兩種指令長度。IT指令本身僅為16比特。另外,IT指令可影響多達四個接續(xù) 指令,其中每一指令可以是16或32比特。
圖2圖解說明處于正常ARM格式中的條件指令格式。所述指令為32比特長,在 所例示的符號中以比特31至比特0來編號。ARM條件指令包括一4比特條件字段(比 特31-28)及一28比特的傳統(tǒng)指令(比特27-0)。條件字段包含主要指定下列的條件 代碼所述指令是否是條件性的、考慮哪些代碼比特以確定是否滿足所述條件、及可 能如何滿足所述條件。剩余的28個比特包含如果滿足條件則執(zhí)行的指令。參照圖3, 在THUMB-2模式中,"條件性"指令可包括至少兩個指令Al和A2。第一指令Al是 IT型指令,其提供條件狀態(tài)并指示如果滿足第一指令Al的條件則將執(zhí)行下一指令(或 接續(xù)的數(shù)個指令)A2。因此,使第二指令A2的執(zhí)行成為由第一指令Al施加至第二 指令A2上的條件指令。盡管A2顯示為第二個16比特指令,如上文提及,由IT指令 Al變?yōu)闂l件性的每一后續(xù)指令(在THUMB-2的當前版本中,多達四個接續(xù)指令)可 以是16或32比特長。在任一情形中,如果不滿足所述條件則不執(zhí)行指令,也就是說如果不滿足所述條 件則不產(chǎn)生任何構(gòu)架上的可視結(jié)果。在每一情形中,管線10的一個或多個級中的邏輯 根據(jù)條件字段中的代碼來辨識條件指令,并確定條件代碼(CC)寄存器23中的比特 是否滿足指定條件。這常,僅在己找回所有操作數(shù)數(shù)據(jù)之后才實施確定是否滿足所述 條件。然而,應注意,將存在其中CC寄存器23中的條件數(shù)據(jù)也必須由較早指令設(shè)定的 情形,以針對確定是否滿足特定條件指令的條件。 一個或多個級的邏輯(例如,解碼 級13、寄存器讀取級15或EXE 1級37)沿所述管線向后看以査看是否需要執(zhí)行任何 較早指令以針對關(guān)于當前條件指令的條件確定來設(shè)定條件代碼(CC)寄存器23中的 相關(guān)比特。如果(或當)不存在仍需要執(zhí)行以設(shè)定條件代碼(CC)寄存器23中的特 定比特的較早指令(時),則較早級的邏輯可確定在所述條件指令通過處理器管線10 的這一傳遞時是否滿足所述條件。這時,可根據(jù)所述條件確定是否將在這一傳遞時執(zhí) 行所述指令。如果否,則將不存在執(zhí)行,且無需等待操作數(shù)數(shù)據(jù)。預測可以設(shè)定相關(guān)條件數(shù)據(jù)的較早指令可用各種方式來實施。用于追蹤指令和狀 態(tài)的最佳解決方案是選擇用于特定管線構(gòu)架的,且通常類似于用于檢査仍可寫入或載 入必要操作數(shù)數(shù)據(jù)的較早指令的方案。然而,概述某些關(guān)于設(shè)定條件性數(shù)據(jù)的預測實 例可能是有益的。例如所示實例的簡單依次執(zhí)行管線在所述指令流動通過管線時依序執(zhí)行每一指 令。在這一管線中,每一執(zhí)行級將包括一控制比特,指示當前位于級中的指令是否將 條件代碼設(shè)定為其執(zhí)行的一部分。處理條件指令的級查看那些控制比特,以確定何時 將沒有較早指令來設(shè)定條件代碼,從而允許所述級確定是否將執(zhí)行所述條件指令。舉 例而言,處理條件指令的寄存器讀取級15可根據(jù)執(zhí)行級37、 39和41的控制比特來使 用OR邏輯。如果所有的控制比特均指示為否,則OR結(jié)果為否,且寄存器讀取級15 可確定正在執(zhí)行級37、 39和41中處理的較早指令將均不設(shè)定條件代碼。如果不使 用條件代碼結(jié)果的轉(zhuǎn)發(fā),則還將包括對寫回級19中任一指令的檢査?;蛘撸幚硭?br>
條件指令的級可以繼續(xù)掃描正在執(zhí)行較早指令的級37、 39和41的控制比特,直至所 述掃描可傳遞通過所有執(zhí)行級而未找到指示一指令將設(shè)定所述條件代碼的控制比特。所屬技術(shù)領(lǐng)域的技術(shù)人員將了解,可使用大量其他方案進行預測,從而以與那些 用于預測以確定是否需要計算及寫回相關(guān)操作數(shù)數(shù)據(jù)類似的方式來確定是否將由較早 指令設(shè)定所述條件代碼(或條件代碼中的相關(guān)比特)。更復雜的方案將需要用于具有更 復雜處理器構(gòu)架的應用,例如使用寄存器重映射的超標量設(shè)計。在所例示的實例中, 確定是否將由較早指令設(shè)定寄存器23中的代碼。當然,可能存在多個條件寄存器,及 /或可將指令僅設(shè)定為寄存器中一個或多個比特的子集。預測方案可適用于特定條件設(shè) 定和必須檢査的特定條件,以(例如)確認條件指令分析無需等待任何較早指令設(shè)定 適合的條件寄存器中或某一其他條件數(shù)據(jù)存儲位置中的一個或多個相關(guān)比特。如上文概述,邏輯確定將不在當前通過管線時執(zhí)行條件指令。因此,處理器邏輯 可采取步驟以跳過或移除所述停止,否則這些停止將包括等待一個或多個較早指令執(zhí) 行以提供操作數(shù)數(shù)據(jù)。例如,可將指令標記或轉(zhuǎn)換至無操作(NOP)指令。可將所述 NOP指令立即傳遞出EXE 1級37,且后面的級將辨識所述NOP且將不執(zhí)行原始指令。 或者,可將所述指令標記為似乎色經(jīng)接收到所有操作數(shù)數(shù)據(jù),并將其立即傳遞至執(zhí)行 區(qū)段。在這后一情形中,當執(zhí)行級37處理指令時,將被告知或再次確定所述一個或多 個條件使得所述指令將不執(zhí)行及相應地起作用。回應于將由于適用的條件狀態(tài)而不執(zhí) 行條件指令的第一確定,其他方法可從管線中移除所述指令。所述條件指令可以通過 允許下一指令覆寫所述指令或在當前保持所述條件指令的級中以清除狀態(tài)計時來有效 移除所述條件指令。較舊指令是否將設(shè)定相關(guān)條件比特的確定可以是逐比特分析,以針對特定的條件 指令確定較早指令是否將影響CC寄存器23中的所關(guān)注比特。在一實例中,任何將設(shè) 定條件代碼(CC)寄存器23中的任何一個比特的指令會設(shè)定所述寄存器中的所有比 特。其將設(shè)定任何其借助新條件比特數(shù)據(jù)改變的比特。未發(fā)生改變的比特將以舊值重 新寫入。在這一實例中,用以檢査較早指令是否將影響條件指令的所關(guān)注比特的邏輯 僅需檢查仍在管線中處理的任一較舊指令是否可設(shè)定條件代碼(CC)寄存器23,而 無需逐比特分析哪些比特可由哪一 (些)較早指令設(shè)定。在超標量設(shè)計中,還可能需 要確定是否任何正在并列管線中處理的指令可設(shè)定條件寄存器或條件寄存器中的所關(guān) 注比特,以實現(xiàn)關(guān)于所關(guān)注指令的條件性確定。如果在操作數(shù)數(shù)據(jù)回來之前就設(shè)定條件代碼(CC)寄存器23,則處理器10可在 不滿足所需條件時終止所述條件指令的停止。在某些情形中,不存在將設(shè)定條件代碼 (CC)寄存器23的正在處理的較舊指令。在其他情形中,正在處理的較舊指令將設(shè) 定條件代碼(CC)寄存器,但其將在條件指令的所有操作數(shù)數(shù)據(jù)變得可用之前就設(shè)定 條件代碼(CC)寄存器23。在兩種情形中,通過早期確定未滿足相關(guān)條件來消除由 所述停止施加以獲得稍后到達的操作數(shù)數(shù)據(jù)的某些或全部時間延時。參照圖4,在這一點處考慮實例性處理流程可能是有益的。圖式中描繪的處理流
程包括處理管線10的數(shù)個級的功能。在管線10的級邏輯中,用于實施所示處理步驟 的精確位置是應在管線處理器技術(shù)領(lǐng)域中的技術(shù)人員所掌握技術(shù)內(nèi)的內(nèi)容,及僅以舉 例方式給出實施特定步驟的級的下列論述中的陳述。所例示的處理開始于指令的初始解碼(Sl)。如上文提及,ARM指令的字段或兩 個(或更多個)THUMB-2指令的較早指令可將指令標識為條件性。因此,所述解碼 邏輯可檢驗一個或多個指令的適合部分,以確定給定指令是否是條件指令(步驟S2)。 如果所述指令不是條件性的,則處理從S2移至S3,在這一點處,后面的級開始訪問 含有任何必要操作數(shù)數(shù)據(jù)的適合資源。含有操作數(shù)數(shù)據(jù)的資源通常是寄存器文件。操 作數(shù)數(shù)據(jù)的接收可繼續(xù)通過大量處理循環(huán),直至其完成為止。假設(shè)在我們較早實例的 管線處理器10中,Exel級37現(xiàn)在含有所有用于所述指令的必需操作數(shù)數(shù)據(jù)。此后, 指令和操作數(shù)數(shù)據(jù)進入剩余的執(zhí)行級(在步驟S5處)以完成執(zhí)行,盡管如果所述處理 器可稍后從其他級轉(zhuǎn)發(fā)操作數(shù)數(shù)據(jù),則所述指令可前進至執(zhí)行級。在所述實例中,存在獲得操作數(shù)數(shù)據(jù)(例如,從轉(zhuǎn)發(fā)網(wǎng)絡(luò)接收數(shù)據(jù))所需的某一 時間周期(S3至S4),其中針對RAW危險而獲得來自較早指令的數(shù)據(jù)。類似地,如 果因為不存在所述操作數(shù)的轉(zhuǎn)發(fā)網(wǎng)絡(luò)而使用寄存器文件獲得RAW數(shù)據(jù),則可能需要 某一時間周期用于讀取所述寄存器文件。這一周期(例如)可包括允許較早指令將必 需數(shù)據(jù)寫入一位置的時間,其中可針對在EXE 1級37中等待或從更遠程的資源處載 入數(shù)據(jù)的指令而在所述位置處獲得所述數(shù)據(jù)。類似地,如果因為不存在所述操作數(shù)的 轉(zhuǎn)發(fā)網(wǎng)絡(luò)而使用寄存器文件獲得RAW數(shù)據(jù),則可能需要某一時間周期用于讀取所述 寄存器文件。現(xiàn)在返回考慮處理步驟S2,其中解碼邏輯檢驗指令的適合部分以確定所述指令是 否是條件指令。現(xiàn)在假設(shè)當前指令是條件指令。因此,解碼級13確定所述指令是條件 性的,且處理從步驟S2移至步驟S6。盡管未單獨顯示,但在步驟S6處,后面的級開 始訪問含有任何必需操作數(shù)數(shù)據(jù)的適合資源;且操作數(shù)數(shù)據(jù)的接收可繼續(xù)通過大量處 理循環(huán),直至其完成為止,基本如步驟S3-S4中指示。然而,在S2處確定指令為條件 性還啟動了大量開始于S6處的歩驟,以與獲得操作數(shù)數(shù)據(jù)同時實施條件性處理。在步驟S6處, 一個所述處理級的邏輯査看仍在管線中行進且在當前條件指令之 前的較早指令,以確定那些較早指令的任一者是否將設(shè)定條件數(shù)據(jù)。在所述實例中, 寄存器23保持4比特"條件代碼"(CC),且所述邏輯確定正在行進的較早指令的一 者是否將代碼值重新寫入寄存器23中。如果先前指令將設(shè)定寄存器23中的條件代碼, 則處理當前的條件指令將需要等待如步驟S7中所指示來設(shè)定所述代碼。現(xiàn)在假設(shè),S6處的所述確定檢測到先前指令將設(shè)定寄存器23中的條件代碼。在 所述情形中,處理移至步驟S7,其中所述邏輯確定是否已完成較早的條件代碼更新。 如果完成條件代碼更新,則處理移至步驟S8,其中檢驗所述條件以確定是否應如界定 來執(zhí)行所述指令或?qū)⑺鲋噶钷D(zhuǎn)換為NOP。在S6處,所述邏輯可確定在管線中不存在仍行進的將把條件代碼寫入寄存器23
的較早指令。當所述邏輯確定不存在將設(shè)定寄存器23中的條件代碼的較早指令時,現(xiàn) 在可能能夠檢查條件指令中指定的條件。因此,S6處的處理現(xiàn)在移至步驟S8。在S8處,適合的管線級邏輯基于對CC寄存器23中的條件代碼的檢驗和條件字 段所指定的條件指令的要求,確定是否滿足指定條件。所述指令的條件字段涉及CC 寄存器的一個、兩個或可能更多個比特的組合。舉例而言,所述字段可指定全零 (all-zero)條件,主要檢査先前指令是否將Z比特設(shè)定為1 。由前一操作產(chǎn)生以設(shè)定 CC寄存器23的正數(shù)將由N比特中的O (非負)和Z比特中的0 (非全零)來指示。 因此,基于正的較早結(jié)果的條件指令將檢查N和Z比特以確定其均為0。如果滿足條件,則將在管線10的級37-41中執(zhí)行所述指令。因此,需要完整的操 作數(shù)數(shù)據(jù)。在這一情形中,處理移至步驟S3,以檢査是否已接收所有的操作數(shù)數(shù)據(jù)。 如果已接收所有的操作數(shù)數(shù)據(jù),則S3處的處理移至步驟S5,其中將所述指令和操作 數(shù)數(shù)據(jù)傳遞至適合級供執(zhí)行之用。如果尚未接收到當前指令的所有操作數(shù)數(shù)據(jù),則S3 處的處理移至S4以使得處理器等待至少一個處理循環(huán)以接收所有操作數(shù)。在接收到所 有數(shù)據(jù)操作數(shù)之后,處理從步驟S4移至步驟S5,其中將指令和操作數(shù)數(shù)據(jù)傳遞至適 合的級供執(zhí)行之用。 '現(xiàn)在再次考慮開始于步驟S8處的處理。在S8處,首先確定不滿足條件(且因為 沒有較舊指令將設(shè)定條件代碼而不能滿足條件),則處理將移至步驟S9。移至S9會終 止或繞開通過S3和S4的處理,其中S3和S4實施等待或停止直至已接收到所有操作 數(shù)數(shù)據(jù)。如先前提及,存在數(shù)個方式以在確定所述條件將導致指令的非執(zhí)行之后,恢復條 件指令通過管線的傳遞。在圖4所示實例中,在步驟S9處將指令標記或轉(zhuǎn)換至NOP (無操作)指令。所述指令轉(zhuǎn)到執(zhí)行級(在步驟S5),盡管那些級將僅傳遞指令而不 實際執(zhí)行。在所述實例中,EXE 1級37處的管線邏輯將基于寄存器23中的條件代碼檢查和 條件字段所指定條件指令的要求來確定是否滿足條件。如果前一指令將設(shè)定CC寄存 器23中的條件代碼,則這一處理將等待設(shè)定所述寄存器中的代碼。一旦設(shè)定條件代碼, 則所述邏輯將基于所述代碼來決定是否執(zhí)行條件指令。然而,這種執(zhí)行無需等待返回 將不執(zhí)行的條件指令的所有操作數(shù)數(shù)據(jù)。在所述實例中,在S8處于EXE1級37期間檢査條件?;蛘撸稍缭诮獯a級處就 檢査所述條件??赡苓€存在某些其中在后面的級中檢查條件的情況。例如,如果滿足所述條件且 已將所有操作數(shù)數(shù)據(jù)聚集于寄存器讀取級15中,則條件指令和數(shù)據(jù)可傳遞至執(zhí)行級。 執(zhí)行級的一者或多者可在其確定滿足條件時重新檢査所述條件,且隨后根據(jù)所述操作 數(shù)數(shù)據(jù)執(zhí)行指令。作為另一實例,如果基于確定不滿足條件而移除所述停止,則一個 方法將所述指令標記為"已接收所有數(shù)據(jù)",且將指令傳遞至執(zhí)行級,而無論這時在 EXE 1級37中出現(xiàn)什么值。在指令傳遞通過執(zhí)行級37、 39和41時,那些級的一者或
多者將再次辨識不滿足所述條件,且將阻止執(zhí)行所述指令。
盡管可將上文的闡述視為最佳模式及/或其他實例,但應理解,可在本文中作出各 種修改且本文所揭示的主題可以用各種形式和實例來實施,且所述教示可應用于大量 應用中,而本文僅揭示其中的某些應用。下述權(quán)利要求意欲主張任何及所有歸屬于本 發(fā)明教示的真實范圍內(nèi)的應用、修改和變化。
權(quán)利要求
1、一種控制通過管線處理器處理條件指令的方法,所述管線處理器包括多個處理級,所述方法包括在所述管線的第一級中對條件指令進行解碼;分析執(zhí)行所述指令所需的條件,以確定所述指令是否應由所述管線的后一級執(zhí)行;及如果對所述條件的所述分析表明不應執(zhí)行所述指令,則跳過操作數(shù)數(shù)據(jù)等待周期的至少一部分,所述操作數(shù)數(shù)據(jù)對于執(zhí)行所述條件指令原本應是需要的。
2、 如權(quán)利要求1所述的方法,其中所述跳過步驟包括將所述條件指令傳遞到所 述管線的將不執(zhí)行所述指令的后一級,而不等待完成接收所述操作數(shù)數(shù)據(jù)。
3、 如權(quán)利要求1所述的方法,其中所述跳過步驟包括將所述條件指令標記為無 操作(NOP)指令,且將所述NOP指令傳遞至所述管線的所述后一級。
4、 如權(quán)利要求1所述的方法,其中所述跳過步驟包括從所述管線中清除所述條 件指令而不將其傳遞至所述后一級。
5、 如權(quán)利要求l所述的方法,其中所述條件指令指定如果應執(zhí)行所述指令的話則要滿足的條件;及 所述分析包括對所述指定條件與較早指令寫入的條件數(shù)據(jù)進行比較,以確定是否 滿足所述條件。
6、 如權(quán)利要求5所述的方法,其中所述分析步驟包括確定尚未完全通過所述管線執(zhí)行的任一較舊指令是否可設(shè)定執(zhí)行所述條件指令 所需的條件;及在確定仍在所述管線中執(zhí)行的較舊指令均不可以設(shè)定所述條件時,執(zhí)行對所述條 件的所述分析。
7、 如權(quán)利要求6所述的方法,其進一步包括在確定正在所述管線的后一級中處理的較舊指令均不可以設(shè)定執(zhí)行所述條件指 令所需的條件之前,開始獲得原本應為執(zhí)行所述條件指令所需的操作數(shù)數(shù)據(jù)并保持所 述條件指令不將其傳遞至所述后一級以等待完成獲得所述操作數(shù)數(shù)據(jù);及在確定正在所述管線的后一級中處理的較舊指令均不可以設(shè)定執(zhí)行所述條件指 令所需的條件且所述分析根據(jù)所述條件確定應由所述管線的后一級執(zhí)行所述條件指令 時,終止所述保持。
8、 如權(quán)利要求1所述的方法,其中所述條件指令包括條件字段及包含將要基于 所述條件分析來執(zhí)行的指令的字段。
9、 如權(quán)利要求1所述的方法,其中所述條件指令包括第一指令,其指定所要滿足的條件;及 第二指令,其指定在滿足所述第一指令中所指定的所述條件的情況下將要執(zhí)行的 操作。
10、 一種管線處理器,其經(jīng)配置以實施如權(quán)利要求l所述的方法。
11、 一種通過管線處理指令的方法,其包括-以所需序列從存儲器中提取所述指令; 在依序提取每一指令時,對每一指令進行解碼;針對多個所述經(jīng)解碼指令中的每一者,獲得所述指令所需的操作數(shù)數(shù)據(jù);及 將指令傳遞至所述管線的執(zhí)行區(qū)段;其中,對于所述經(jīng)解碼指令中將針對其獲得操作數(shù)數(shù)據(jù)且對于其而言所述獲得操 作數(shù)數(shù)據(jù)需要多個處理循環(huán)的條件指令,所述方法進一步包括(a) 分析執(zhí)行所述條件指令所需的條件,以確定是否應由所述管線的執(zhí)行區(qū)段 執(zhí)行所述指令;(b) 如果對所述條件的所述分析表明應在當前通過所述管線時執(zhí)行所述條件 指令,則完成接收所述條件指令所需的所述操作數(shù)數(shù)據(jù)并通過所述管線的所述執(zhí)行級 來處理所述條件指令和所需的操作數(shù)數(shù)據(jù);及 '(c) 如果對所述條件的所述分析表明不應在所述當前通過所述管線時執(zhí)行所 述條件指令,則跳過獲得關(guān)于所述條件指令的操作數(shù)數(shù)據(jù)所需的所述處理循環(huán)中的至 少一者。
12、 如權(quán)利要求11所述的方法,其中獲得關(guān)于所述條件指令的所述操作數(shù)數(shù)據(jù)涉及保持所述條件指令,直至獲得所述 操作數(shù)數(shù)據(jù)所需的所述多個處理循環(huán)期滿為止;及所述跳過所述處理循環(huán)中的至少一者包括在所述多個處理循環(huán)期滿之前, 一旦 確定所述條件表明不應執(zhí)行所述條件指令,即刻停止關(guān)于所述條件指令的所述保持。
13、 如權(quán)利要求11所述的方法,其中所述分析步驟包括確定尚未完全通過所述管線執(zhí)行的任一較舊指令是否可設(shè)定執(zhí)行所述條件指令所需的條件;及在確定仍在所述管線中執(zhí)行的較舊指令均不可以設(shè)定所述條件時,執(zhí)行對所述條 件的所述分析。
14、 如權(quán)利要求11所述的方法,其中所述跳過步驟包括在確定不應執(zhí)行所述條 件指令時,立即將所述條件指令傳遞到所述管線的將不執(zhí)行所述指令的執(zhí)行區(qū)段中。
15、 如權(quán)利要求11所述的方法,其中所述跳過步驟包括將所述條件指令標記為 無操作(NOP)指令,并將所述NOP指令傳遞到所述管線的所述執(zhí)行區(qū)段。
16、 如權(quán)利要求11所述的方法,其中所述跳過步驟包括從所述管線中清除所述 條件指令而不將其傳遞到所述執(zhí)行區(qū)段。
17、 如權(quán)利要求11所述的方法,其中所述條件指令包括條件字段和包含將要基 于所述條件分析來執(zhí)行的指令的字段。
18、 如權(quán)利要求ll所述的方法,其中所述條件指令包括 第一指令,其指定將要滿足的條件;及第二指令,其指定在滿足所述第一指令中指定的所述條件的情況下將要執(zhí)行的操作。
19、 一種管線處理器,其經(jīng)配置以實施如權(quán)利要求ll所述的方法。
20、 一種用于處理指令的管線處理器,所述管線處理器包括 寄存器讀取級,其用于獲得多個處理指令中的每一者的執(zhí)行所需的操作數(shù)數(shù)據(jù); 執(zhí)行級,其用于根據(jù)對應的操作數(shù)數(shù)據(jù)執(zhí)行處理指令;保持裝置,其用于在所述執(zhí)行級執(zhí)行所述指令之前輪流保持所述多個處理指令中 的每一者,直至完成接收對應操作數(shù)數(shù)據(jù);及確定和終止裝置,其用于在完成對關(guān)于所述處理指令中條件指令的對應操作數(shù)數(shù) 據(jù)的接收的保持之前確定是否將執(zhí)行所述條件指令并在確定將不執(zhí)行所述條件指令時 即刻終止關(guān)于所述條件性執(zhí)行的所述保持。
21、 如權(quán)利要求20所述的管線處理器,其進一步包括確定裝置,其用于確定尚未完全通過所述管線處理器執(zhí)行的任一較舊指令是否可 以設(shè)定執(zhí)行所述條件指令所需的條件,其中所述確定是否將執(zhí)行所述條件指令是基于確定沒有任何尚未完全通過所述 管線處理器執(zhí)行的較舊指令可以設(shè)定所需條件而做出的。
全文摘要
基于非執(zhí)行條件指令將不在當前通過管線處理器時執(zhí)行的早期辨識,減輕原本會在等待遲來的操作數(shù)數(shù)據(jù)時施加的非執(zhí)行條件指令的延時。在執(zhí)行之前的合適點處,做出關(guān)于所述條件的確定。如果所述條件使得所述指令將不在此次通過管線時執(zhí)行,則可終止關(guān)于所述條件指令的保持,也就是說在完成接收所有相關(guān)聯(lián)的操作數(shù)數(shù)據(jù)之前跳過或停止關(guān)于所述條件指令的保持。例如,非執(zhí)行指令通過所述管線的流動無需等待較早的指令計算及寫入源操作數(shù)數(shù)據(jù)供所述條件指令使用。
文檔編號G06F9/38GK101164042SQ200680013586
公開日2008年4月16日 申請日期2006年3月6日 優(yōu)先權(quán)日2005年3月4日
發(fā)明者托馬斯·安德魯·薩托里烏斯, 杰弗里·托德·布里奇斯, 詹姆斯·諾里斯·迪芬德爾費爾, 邁克爾·斯科特·麥基爾文 申請人:高通股份有限公司