欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

錯誤的推測性更新的鏈接棧修復(fù)的制作方法

文檔序號:6478601閱讀:181來源:國知局
專利名稱:錯誤的推測性更新的鏈接棧修復(fù)的制作方法
技術(shù)領(lǐng)域
本發(fā)明大體涉及處理器的領(lǐng)域,且明確地說涉及一種用于修復(fù)被推測性指令執(zhí)行破壞的鏈接棧的系統(tǒng)和方法。
背景技術(shù)
現(xiàn)代軟件本質(zhì)上是模塊化的,其特定功能在子例程中實施。為了有效地實施子例 程調(diào)用和返回,許多現(xiàn)代處理器采用實施(或仿真)鏈接棧的電路。鏈接棧是用于存儲僅 硬件可見且程序設(shè)計者不可直接存取的鏈接地址的邏輯結(jié)構(gòu)。調(diào)用(分支到)子例程的指 令,例如分支和鏈接指令,將隨后指令的地址“推進”到鏈接棧上。在子例程中遇到返回型 指令時,鏈接棧被“上托(popped)”以產(chǎn)生進行子例程調(diào)用的指令之后的指令的地址。隨著 子例程調(diào)用其它子例程,鏈接地址被相繼推進到鏈接棧上,且當子例程完成執(zhí)行并返回時 被上托。大多數(shù)現(xiàn)代處理器采用管線式架構(gòu),其中各具有多個執(zhí)行步驟的連續(xù)指令在執(zhí)行 中重疊。為了獲得最大性能,指令應(yīng)連續(xù)流動穿過管線。任何導(dǎo)致指令在管線中停止的情 形均不利地影響性能。幾乎所有現(xiàn)實世界程序均包含有條件分支指令,直到在管線中深處估計指令時才 知道其實際分支行為。為了避免將由于等待每一分支指令的實際估計而引起的管線停止, 許多現(xiàn)代處理器采用某一形式的分支預(yù)測,借此在管線中較早地預(yù)測有條件分支指令的分 支行為?;谒A(yù)測的分支估計,處理器推測性地從所預(yù)測地址(分支目標地址(如果分 支經(jīng)預(yù)測為被采取)或分支指令之后的下一連續(xù)地址(如果分支經(jīng)預(yù)測為未采取))獲取 指令并執(zhí)行指令。當確定實際分支行為時,如果分支被錯誤地預(yù)測,那么從管線沖洗推測性 獲取的指令,且從正確的下一地址獲取新指令。錯誤預(yù)測的分支不利地影響性能和功率消 耗兩者。錯誤預(yù)測的分支的另一結(jié)果可能是鏈接棧被破壞。如果錯誤預(yù)測的分支之后推測 性地執(zhí)行的指令包含子例程返回和后續(xù)調(diào)用,那么將從鏈接棧上托有效鏈接地址,且將新 鏈接地址推進到棧上。依據(jù)鏈接棧硬件實施方案,錯誤地上托鏈接棧本身不會具有不利后 果,因為上托所述棧僅移動讀取指針;數(shù)據(jù)保持在鏈接棧緩沖器中。然而,隨后將新的值錯 誤地推進到鏈接棧上可重寫先前的值。當檢測到分支錯誤預(yù)測且獲取并執(zhí)行適當指令流 時,如果鏈接棧破壞未檢測到并加以修復(fù),那么子例程返回將把控制轉(zhuǎn)移到錯誤位置。一種避免鏈接棧破壞的方式是禁止推測性指令進行的鏈接棧更新。舉例來說,可 延遲鏈接棧更新,直到解析所有有條件分支為止。隨著分支估計在管線中深處在執(zhí)行管級 中發(fā)生,這將有效地將鏈接棧更新移動到管線中深處。然而,這將由于有效地拒絕短的子例 程使用鏈接棧功能性而不利地影響短的子例程的性能。因此,為了獲得來自鏈接棧硬件的 最大性能,鏈接棧優(yōu)選地在管線中較早地更新,例如在解碼管級處更新?!N防止由于分支錯誤預(yù)測引起的處理器資源(例如,寄存器重命名緩沖器等) 的破壞的已知方法是維持資源的并行、“已提交的”副本。所述已提交的副本僅在改變其狀態(tài)的指令提交以供執(zhí)行時才被更新。當指令確定不存在將阻止指令完成執(zhí)行的危險時,所述指令確認其自身的執(zhí)行。舉例來說,實施算術(shù)或邏輯運算的指令可在其所有運算數(shù)可用 (即,其已由其它指令計算或已從存儲器成功檢索)時確認執(zhí)行。當一指令和管線中在其之 前的所有指令被確認時,所述指令提交以供執(zhí)行。為了避免由于分支錯誤預(yù)測引起的破壞,處理器資源的工作副本的狀態(tài)在指令的 例程執(zhí)行期間以正在進行為基礎(chǔ)而改變;然而,處理器資源的已提交副本的狀態(tài)僅由已提 交以供執(zhí)行的指令改變。當檢測到分支錯誤預(yù)測時,將處理器資源的已提交副本復(fù)制到工 作副本并替換工作副本的內(nèi)容。此技術(shù)將工作副本置于其在任何指令的推測性執(zhí)行之前所 具有的狀態(tài)中。有可能采用此方法來解決鏈接棧破壞問題。工作鏈接棧將由管線中實施子例程調(diào) 用和返回的指令更新。已提交鏈接棧將僅由已提交以供執(zhí)行的子例程調(diào)用和返回指令更 新。在發(fā)現(xiàn)分支錯誤預(yù)測后,鏈接棧的已提交副本將被簡單地復(fù)制為工作鏈接棧。然而,此 方法在硅面積和功率消耗兩個方面代價較大。復(fù)制鏈接棧需要復(fù)制實施所述鏈接棧的寄存 器或其它存儲器結(jié)構(gòu),連同管理鏈接棧所必需的控制邏輯。額外硬件占據(jù)了寶貴的集成電 路面積,增加了布線擁塞,且使時鐘和功率分布復(fù)雜化。連續(xù)更新兩個完整的鏈接棧標稱消 耗僅運行一個鏈接棧的功率的兩倍。尤其在部署于移動電子裝置中的處理器中,使功率消 耗最小化對于保存電池壽命和減少熱耗散很關(guān)鍵。

發(fā)明內(nèi)容
根據(jù)本文揭示和主張的一個或一個以上實施例,檢測并有效地修復(fù)鏈接棧破壞。 每當將鏈接地址寫入到鏈接棧時,將鏈接棧條目的先前值保存在鏈接棧恢復(fù)緩沖器中。當 檢測到錯誤的鏈接棧推進操作時,將此值恢復(fù)到鏈接棧。錯誤的鏈接棧推進操作是在錯誤 預(yù)測的分支之后推測性地執(zhí)行的操作。通過維持管線中未提交的鏈接棧寫入指令的總數(shù)的 計數(shù)以及在每一分支指令之前的未提交的鏈接棧寫入指令的數(shù)目的計數(shù)來檢測此情形。當 分支經(jīng)估計且確定為已錯誤預(yù)測時,將與其相關(guān)聯(lián)的計數(shù)與總計數(shù)進行比較。不一致指示 鏈接棧寫入指令是在所述錯誤預(yù)測的分支指令之后被推測性地發(fā)布到所述管線中,且將鏈 接地址推進到所述鏈接棧上。在此情況下,從鏈接棧恢復(fù)緩沖器將先前鏈接地址恢復(fù)到所 述鏈接棧。一個實施例涉及一種管理包括多個條目的鏈接棧的方法,每一條目操作以存儲鏈 接地址。在將任何新鏈接地址寫入到鏈接棧時,保存鏈接棧條目的先前值。預(yù)測分支指令 的分支估計。響應(yīng)于所述預(yù)測,推測性地執(zhí)行指令。確定分支估計已錯誤預(yù)測。確定鏈接 棧已被推測性地寫入。將所保存的值恢復(fù)到鏈接棧。另一實施例涉及一種處理器。所述處理器包含指令執(zhí)行管線和包括多個條目的鏈 接棧,每一條目操作以存儲鏈接地址。所述處理器進一步包含鏈接?;謴?fù)緩沖器,其操作以 在任何鏈接棧條目被以新的鏈接地址重寫后存儲鏈接棧條目的先前值,且進一步操作以在 檢測到置換所述鏈接棧條目的鏈接棧寫入是推測性的且錯誤的之后將先前值恢復(fù)到鏈接 棧條目。所述處理器還包含鏈接棧監(jiān)視器電路,其操作以檢測向鏈接棧的錯誤的推測性寫 入。又一實施例涉及一種處理器。所述處理器包含指令執(zhí)行管線和包括多個條目的鏈接棧,每一條目操作以存儲鏈接地址。所述處理器進一步包含鏈接?;謴?fù)緩沖器,其操作以 在任何鏈接棧條目被以新的鏈接地址重寫后存儲鏈接棧條目的先前值,且進一步操作以在 檢測到置換所述鏈接棧條目的鏈接棧寫入是推測性的且錯誤的之后將先前值恢復(fù)到鏈接 棧條目。所述處理器還包含升/降計數(shù)器,其操作以通過在解碼鏈接棧寫入指令后遞增且 在鏈接棧寫入指令提交以供執(zhí)行后遞減而維持管線中未提交的鏈接棧寫入指令的計數(shù)。所 述處理器進一步包含與管線中每一未提交的分支指令相關(guān)聯(lián)的計數(shù)器,所述計數(shù)器操作以 通過在解碼分支指令后初始化到升/降計數(shù)器值且在鏈接棧寫入指令提交以供執(zhí)行后遞 減而維持管線中在分支指令之前的未提交的鏈接棧寫入指令的計數(shù)。所述處理器還進一步 包含比較器,其操作以通過將升/降計數(shù)器值與和錯誤預(yù)測的分支指令相關(guān)聯(lián)的計數(shù)器的 值進行比較而檢測錯誤的推測性鏈接棧寫入操作。


圖1是處理器的功能框圖。圖2是處理器的選定部分的功能框圖。圖3是代碼流程圖。圖4是鏈接棧管理的方法的流程圖。
具體實施例方式圖1描繪包含用以有效地修復(fù)由于分支錯誤預(yù)測引起的鏈接棧的破壞的電路的 處理器10的功能框圖。處理器10根據(jù)控制邏輯11執(zhí)行指令執(zhí)行管線12中的指令。管線 12可以是具有多個并行執(zhí)行管線14、16的超標量設(shè)計。管線12包含組織在若干管級中的 各種寄存器或鎖存器18,以及例如算術(shù)邏輯單元(ALU)(未圖示)等邏輯和計算電路。通用 寄存器(GPR)堆20提供構(gòu)成存儲器層級的頂部的寄存器。支持管線12的其它處理器資源 是鏈接棧22、鏈接?;謴?fù)緩沖器(LSRB) 23、分支預(yù)測電路24和分支信息隊列(BIQ) 25,其操 作在本文中進一步闡釋。管線12從指令高速緩沖存儲器(I-高速緩沖存儲器或1$) 26獲取指令,其中存儲 器尋址和許可由指令側(cè)翻譯旁視緩沖器(ITLB) 28管理。從數(shù)據(jù)高速緩沖存儲器(D-高速 緩沖存儲器或D$) 30存取數(shù)據(jù),其中存儲器尋址和許可由主翻譯旁視緩沖器(TLB) 32管理。 在各種實施例中,ITLB 28可包括TLB 32的一部分的副本?;蛘?,ITLB 28與TLB 32可集 成。在一些實施例中,專用數(shù)據(jù)側(cè)TLB或DTLB(未圖示)可與ITLB 28完全分離。類似地, 在處理器10的各種實施例中,I-高速緩沖存儲器26與D-高速緩沖存儲器30可統(tǒng)一。I-高速緩沖存儲器26和/或D-高速緩沖存儲器30中的未中致使在存儲器接口36的控制下存取主(芯片外)存儲器34 (其它高速緩沖存儲器(未圖示)可插入在處理器 10與主存儲器34之間)。處理器10可包含控制對各種外圍裝置40、42的存取的輸入/輸 出(I/O)接口 38。所屬領(lǐng)域的技術(shù)人員將了解,處理器10的眾多變型是可能的。舉例來 說,處理器10可包含針對I-高速緩沖存儲器26和D-高速緩沖存儲器30中的任一者或兩 者的第二級(L2)高速緩沖存儲器。另外,處理器10中描繪的功能塊中的一者或一者以上 可從特定實施例中省略。圖2是描繪鏈接?;謴?fù)緩沖器23修復(fù)由于錯誤預(yù)測的分支引起的鏈接棧22的破壞的操作的功能框圖。為了清楚起見從圖2中省略例如控制電路和信號等低級細節(jié)。在所 描繪的實施例中,鏈接棧22通過如此項技術(shù)中眾所周知遞增和遞減讀取和寫入指針而實 施為環(huán)形緩沖器,其在此情況下包括8個寄存器。此實施方案不是限定性的,且本發(fā)明的實 施例可有利地應(yīng)用于使用此項技術(shù)中已知或尚待發(fā)明的任何硬件結(jié)構(gòu)而實施的鏈接棧22。鏈接?;謴?fù)緩沖器23維持由鏈接棧推進操作重寫的最后鏈接地址的副本。即,當 分支和鏈接指令將鏈接地址寫入到鏈接棧22時,存儲在對應(yīng)鏈接棧條目中的先前地址自 動保存到鏈接?;謴?fù)緩沖器23。另外,在所描繪的實施例中,存儲鏈接棧索引,使得鏈接地 址可視需要恢復(fù)到鏈接棧22中其被重寫的位置。在所描繪的實施例中,鏈接?;謴?fù)緩沖 器23包括單一寄存器。然而,本發(fā)明不限于此實施例。在其它實施例中,尤其在具有非常 深的管線的處理器中,鏈接棧恢復(fù)緩沖器23可包括多個條目,且可視要求或需要而組織為 棧、緩沖器或其它邏輯結(jié)構(gòu)。當在管線12中執(zhí)行子例程調(diào)用(例如,分支和鏈接)指令時,將鏈接地址寫入到 鏈接棧22。優(yōu)選地在管線12中較早地寫入鏈接地址,例如在解碼管級處,如圖2中描繪的 實施例中那樣。這允許短的子例程利用鏈接棧22硬件。然而,在其它實施例中,可視特定 管線12的要求或需要而在任何管級處寫入鏈接棧22。如果響應(yīng)于分支預(yù)測而推測性地獲 取包含鏈接棧寫入指令的指令流,那么有可能鏈接棧寫入操作可超越有效鏈接地址。因此, 當新的值寫入到鏈接棧22時,將先前鏈接地址保存到鏈接?;謴?fù)緩沖器23。當檢測到分支 錯誤預(yù)測時,如果鏈接棧寫入確定為已錯誤,那么可將存儲在鏈接棧恢復(fù)緩沖器23中的先 前值恢復(fù)到其被重寫處的鏈接棧22條目。圖3描繪論證可如何響應(yīng)于錯誤預(yù)測的分支而破壞鏈接棧22的指令的假設(shè)序列。 主程序序列(右側(cè))執(zhí)行兩個加載(LD)指令A(yù)DD和存儲(ST),接著是分支和鏈接指令調(diào) 用子例程A(BL SUB Α)。這是適當?shù)拇a序列,如描繪程序流的實線箭頭所表示。BL SUB A 指令將隨后的LD指令的地址推進到鏈接棧上,且分支到子例程A,其中執(zhí)行LD、ADD和比較 (CMP)指令。當管線12獲取針對子例程A的指令時,檢測到如果相等則分支(branch if equal, BEQ)指令,且所預(yù)測的分支方向以及下一地址在分支預(yù)測電路51中公式化。在此 實例中,分支被錯誤地預(yù)測為采用(以索引1為分支目標)。在索引1處開始獲取指令且 推測性地執(zhí)行指令,如描繪程序流的虛線箭頭所指示。執(zhí)行流因此分支到索引1處的LD指 令,從而跳過到鏈接返回指令BX LR(其是從子例程A的第一退出點)的第一分支。推測性地執(zhí)行LD、減法(SUB)和ST指令,且BX LR指令分支到鏈接棧22的頂部處 的鏈接地址,從而通過移動讀取指針而上托鏈接棧22。在圖2中描繪的鏈接棧實施例中,上 托鏈接棧22不會破壞任何條目。即,在檢測到錯誤預(yù)測的分支后,鏈接棧22讀取指針可簡 單地復(fù)位到其先前位置。推測性程序執(zhí)行沿主程序流繼續(xù),執(zhí)行LD、SUB和ST指令。接著推測性地執(zhí)行對子例程B的調(diào)用,從而分支到子例程B中的LD指令且將隨后的主程序ADD指令的地址推進 到鏈接棧22上。鏈接棧22推進操作重寫鏈接棧條目的先前值,其含有較早主程序LD指令 的地址。根據(jù)本發(fā)明的實施例,當將ADD指令的地址推進到鏈接棧22上時,將LD指令的地 址保存在鏈接棧恢復(fù)緩沖器23中。推測性執(zhí)行在子例程B處繼續(xù),執(zhí)行兩個LD指令和一 ADD。
此時,較早的錯誤預(yù)測的分支指令已行進穿過管線12且在執(zhí)行管級中估計。檢測到分支錯誤預(yù)測,且沖洗管線12中在錯誤預(yù)測的分支指令之后的所有指令(子例程A中到 索引1的BEQ)。還檢測到對鏈接棧22的錯誤的推進操作(如本文中更詳細描述),且將主 程序LD指令的地址從鏈接棧恢復(fù)緩沖器23寫入到鏈接棧22中的適當條目(S卩,將鏈接棧 索引連同鏈接地址一起保存在鏈接?;謴?fù)緩沖器23中),從而重寫主程序ADD指令的錯誤 地址。還復(fù)位鏈接棧22讀取和寫入指針,且獲取并執(zhí)行在錯誤預(yù)測的分支指令之后的指令 (艮P,以在到索引1的BEQ之后的LD開始)。在執(zhí)行LD和ORR指令之后,到鏈接返回指令 的分支分支到主程序中的LD指令(并非受破壞的鏈接棧22原本會將其導(dǎo)向到的ADD),且 適當?shù)闹噶顖?zhí)行繼續(xù)。返回參看圖2,通過針對每一預(yù)測的分支指令將管線12中未提交的鏈接棧寫入指 令的總數(shù)的計數(shù)與管線12中在分支指令之前的未提交的鏈接棧寫入指令的數(shù)目的計數(shù)進 行比較而檢測對鏈接棧22的錯誤的推測性寫入。這兩個計數(shù)的不一致指示將鏈接地址推 進到鏈接棧22上的在相關(guān)分支指令之后的鏈接棧寫入指令。如果所述分支指令被確定為 已被錯誤預(yù)測,那么已知推進操作已經(jīng)是推測性的且是錯誤的,且可通過恢復(fù)保存在鏈接 棧修復(fù)緩沖器23中的鏈接地址來修復(fù)。當在管線12中解碼寫入到鏈接棧22的指令(例如,分支和鏈接構(gòu)造)時,將鏈接 地址寫入到鏈接棧22且遞增升/降計數(shù)器50。在圖2中描繪的實施例中,這在解碼管級處 發(fā)生,但本發(fā)明不限于此實施方案。當寫入到鏈接棧22的每一指令提交以供在管線12中 執(zhí)行時,遞減升/降計數(shù)器50。因此,升/降計數(shù)器50的值指示管線12中“正在進行中” 的未提交的鏈接棧寫入指令的數(shù)目,而不管管線12中指令的次序如何。支持分支預(yù)測和推測性指令執(zhí)行的許多處理器包含分支信息隊列(BIQ) 25。BIQ 25存儲關(guān)于正在進行中的分支指令的信息,例如分支預(yù)測、所預(yù)測的分支目標地址等。 BIQ25中的每一條目與唯一未提交(即,正在進行中)的分支指令相關(guān)聯(lián)。根據(jù)本發(fā)明的一 個或一個以上實施例,計數(shù)字段界定于每一 BIQ 25條目中,且因此與每一未提交的分支指 令相關(guān)聯(lián)。當分支指令離開例如解碼管級等較早管級時,將升/降計數(shù)器50的當前值復(fù)制 到BIQ條目的與所述分支指令相關(guān)聯(lián)的計數(shù)字段中。此值表示管線12中以及因此在分支 指令之前的未提交的鏈接棧寫入指令的數(shù)目。BIQ計數(shù)字段值每當寫入到鏈接棧22的指令 提交以供在管線12中執(zhí)行時被遞減。BIQ計數(shù)字段值因此表示管線12中在相關(guān)聯(lián)的分支 指令之前的未提交的鏈接棧寫入指令的數(shù)目。BIQ計數(shù)字段以升/降計數(shù)器50的值初始化。BIQ計數(shù)字段和升/降計數(shù)器50 兩者均通過鏈接棧寫入指令提交而遞減。升/降計數(shù)器50通過新解碼的鏈接棧寫入指令 而遞增;BIQ計數(shù)字段永不遞增。因此,兩個計數(shù)值將僅當在相關(guān)分支指令之后沒有新的鏈 接棧寫入指令進入管線12的情況下彼此跟蹤。相反,兩個計數(shù)值的不一致指示在相關(guān)分支 指令之后至少一個新的鏈接棧寫入指令進入管線12。當分支指令在管線12中估計且經(jīng)確定為已錯誤預(yù)測時,從管線12沖洗在錯誤預(yù) 測的分支指令之后的所有指令,如此項技術(shù)中已知。另外,在比較器52處將與錯誤預(yù)測的 分支指令相關(guān)聯(lián)的BIQ計數(shù)字段與升/降計數(shù)器50的值進行比較。如果兩個計數(shù)相同,那 么在錯誤預(yù)測的分支指令之前的未提交的鏈接棧寫入指令的數(shù)目等于管線12中未提交的 鏈接棧寫入指令的總數(shù),這意味著在錯誤預(yù)測的分支之后沒有未提交(推測性執(zhí)行)的鏈接棧寫入指令。因此,不需要鏈接棧22修復(fù)。然而,如果BIQ計數(shù)字段不同于升/降計數(shù)器50的值,那么在為錯誤預(yù)測的分支指令創(chuàng)建BIQ條目之后解碼至少一個鏈接棧寫入指令,這意味著鏈接棧22是由響應(yīng)于分支 錯誤預(yù)測而推測性執(zhí)行的指令寫入,且可需要通過將鏈接棧修復(fù)緩沖器23的內(nèi)容恢復(fù)到 鏈接棧22而進行修復(fù)。這在功能上由比較電路52的輸出指示,所述輸出在鏈接棧修復(fù)緩 沖器23與管線12之間多路復(fù)用對鏈接棧22的輸入。所屬領(lǐng)域的技術(shù)人員將了解,實際的 實施方案將不同。升/降計數(shù)器50、多個BIQ計數(shù)字段、比較器52和其它實施邏輯(未圖 示)包括鏈接棧監(jiān)視器電路。在圖2中描繪的實施例中,鏈接棧修復(fù)緩沖器23包括單一條目。在此情況下,比 較器52可實施簡單的逐位XOR函數(shù),以及歸約AND。在其它實施例(其中兩個或兩個以上 鏈接地址可保存在鏈接棧修復(fù)緩沖器23中)中,升/降計數(shù)器50值與BIQ計數(shù)字段之間的 數(shù)值比較將指示在錯誤預(yù)測的分支之后且將被修復(fù)的鏈接棧寫入操作的數(shù)目。注意,XOR/ AND函數(shù)可能不能在2n個鏈接棧寫入指令跟隨錯誤預(yù)測的分支指令的情況下檢測受破壞的 鏈接棧22,其中η是BIQ計數(shù)字段的寬度(促使所述計數(shù)字段“纏繞”)。對于η >=2,這 是不可能的,除非管線12極深。在圖2中描繪的至少鏈接棧22 ( S卩,實施為環(huán)形緩沖器)的實施例中,推測性鏈接 棧寫入指令(推進)將不會破壞鏈接棧22條目,除非推測性鏈接棧讀取指令(上托)在其 之前。因此,在一個實施例中,來自鏈接棧修復(fù)緩沖器23的所存儲的值僅在檢測到推測性 鏈接棧上托操作在錯誤的推測性鏈接棧推進之前的情況下恢復(fù)到鏈接棧22。在另一實施例 中,來自鏈接棧修復(fù)緩沖器23的所存儲的值僅在檢測到推測性鏈接棧上托和推進操作兩 者的情況下恢復(fù)到鏈接棧22,而不管其執(zhí)行的相對次序如何。在一個實施例中,推測性鏈接 棧上托檢測可類似于本文針對檢測推測性鏈接棧推進操作所描述而實施,即,維持管線范 圍的推測性鏈接棧讀取指令升/降計數(shù)器和與每一分支指令相關(guān)聯(lián)的推測性鏈接棧讀取 指令計數(shù),并在分支經(jīng)確定為已錯誤預(yù)測的情況下比較所述兩個值。圖4描繪管理鏈接棧的方法60的流程圖。預(yù)測分支指令的估計(框62)?;诜?支預(yù)測,推測性地從下一連續(xù)地址或所預(yù)測的分支目標地址獲取指令并執(zhí)行指令(框64)。 在指令(包含推測性執(zhí)行的指令)寫入鏈接棧22的任何時間(框66),將被重寫的鏈接棧 條目的先前值保存在鏈接棧恢復(fù)緩沖器23中(框68)。當在執(zhí)行管級中估計分支指令時, 如果分支預(yù)測是正確的(框70),那么管線操作照常繼續(xù)。如果分支被錯誤預(yù)測(框70), 那么從管線沖洗推測性指令,且從分支指令之后的地址或所計算的分支目標地址獲取適當 指令(框72)。確認推測性指令(即,分支指令之后的指令)是否寫入了鏈接棧22(框74)。在 一個實施例中,這包括維持管線中所有未提交的鏈接棧寫入指令的進行中的計數(shù)以及在每 一分支指令之前的所有未提交的鏈接棧寫入指令的計數(shù),以及將與錯誤預(yù)測的分支指令相 關(guān)聯(lián)的計數(shù)與總計數(shù)進行比較。如果錯誤預(yù)測的分支指令之后沒有指令寫入鏈接棧22 (框 74),那么管線操作照常繼續(xù)。如果推測性指令寫入了鏈接棧22,那么可在所存儲的鏈接棧 索引處,從鏈接?;謴?fù)緩沖器23恢復(fù)先前鏈接棧條目值(框76),且管線操作照常繼續(xù)。在 一些實施例中,鏈接棧22恢復(fù)僅在推測性讀取指令還上托鏈接棧22的情況下發(fā)生。在一個實施例中,單一條目鏈接棧修復(fù)緩沖器23包括用于鏈接地址的32個位和一模式位(例如,ARM/Thumb模式位),以及一 3位索引(用于8條目鏈接棧22)。每一 BIQ 計數(shù)字段可僅包括2或3個位,這取決于管線12的深度。因此,此方法的硬件影響最小。 單一條目鏈接棧修復(fù)緩沖器23的仿真與無鏈接棧修復(fù)機制相比產(chǎn)生鏈接棧準確性的大于 20%的增加。較深鏈接棧修復(fù)緩沖器的仿真產(chǎn)生可忽略的額外準確性的增加。當然,這些 結(jié)果取決于眾多因素,包含管線深度、代碼特性等。一般來說,在已知本發(fā)明的教示的情況 下,所屬領(lǐng)域的技術(shù)人員將能夠針對任何特定處理器實施方案選擇使性能和功率節(jié)省與設(shè) 計復(fù)雜性和硅面積平衡的鏈接棧修復(fù)緩沖器深度。即使具有多個鏈接棧修復(fù)緩沖器條目 (以及計數(shù)器比較的相伴復(fù)雜性),本發(fā)明的實施例也提供比單獨“已提交”的鏈接棧有效 得多的受破壞鏈接棧修復(fù)的解決方案。此外,鏈接棧22操作在管線12中較早發(fā)生,從而針 對甚至短的子例程也提供鏈接棧優(yōu)化。如本文所使用,“鏈接棧寫入指令”是將鏈接地址推進到鏈接棧上的任何指令(例如,分支和鏈接指令),即使所述指令實施其它功能性(例如,程序流重定向)。如本文所使 用,“計數(shù)器”可包括操作以遞增和/或遞減所存儲的值的硬件計數(shù)器,或可包括緩沖器中的 位字段,其值是通過讀取所述值、執(zhí)行所述操作和將新的值寫入到位字段而遞增和/或遞 減。盡管本文中已相對于本發(fā)明的特定特征、方面和實施例描述了本發(fā)明,但將了解, 在本發(fā)明的廣泛范圍內(nèi),眾多變化、修改和其它實施例是可能的,且因此,所有變化、修改和 實施例應(yīng)被視為屬于本發(fā)明的范圍內(nèi)。因此,當前實施例應(yīng)在所有方面被解釋為說明性而 非限定性的,且落在所附權(quán)利要求書的含義和等效性范圍內(nèi)的所有改變均既定包含于其 中。
權(quán)利要求
一種管理包括多個條目的鏈接棧的方法,每一條目操作以存儲鏈接地址,所述方法包括在將任何新鏈接地址寫入到鏈接棧條目后,保存所述鏈接棧條目的先前值;預(yù)測分支指令的分支估計;響應(yīng)于所述預(yù)測,推測性地執(zhí)行指令;檢測所述分支估計被錯誤預(yù)測;檢測所述鏈接棧被推測性地寫入;以及將所述保存的值恢復(fù)到所述鏈接棧。
2.根據(jù)權(quán)利要求1所述的方法,其中檢測所述鏈接棧被推測性地寫入包括 維持管線中未提交的鏈接棧寫入指令的總數(shù)的計數(shù);維持所述管線中每一未提交的分支指令之前的所述未提交的鏈接棧寫入指令的與所 述每一未提交的分支指令相關(guān)聯(lián)的計數(shù);以及在檢測到分支被錯誤預(yù)測后,將與所述分支指令相關(guān)聯(lián)的所述計數(shù)與所述總計數(shù)進行 比較,且如果所述計數(shù)不相同,那么檢測所述鏈接棧被推測性地寫入。
3.根據(jù)權(quán)利要求2所述的方法,其中維持所述管線中未提交的鏈接棧寫入指令的所述 總數(shù)的計數(shù)包括在解碼鏈接棧寫入指令后遞增升/降計數(shù)器;以及 在鏈接棧寫入指令提交以供執(zhí)行時遞減所述升/降計數(shù)器。
4.根據(jù)權(quán)利要求3所述的方法,其中維持所述管線中每一未提交的分支指令之前的所 述未提交的鏈接棧寫入指令的與所述每一未提交的分支指令相關(guān)聯(lián)的計數(shù)包括在解碼所述分支指令后將所述升/降計數(shù)器的值復(fù)制到與所述分支指令相關(guān)聯(lián)的計 數(shù)器,以及當鏈接棧寫入指令提交以供執(zhí)行時遞減所述計數(shù)器。
5.根據(jù)權(quán)利要求4所述的方法,其中與所述分支指令相關(guān)聯(lián)的所述計數(shù)器是與所述分 支指令相關(guān)聯(lián)的分支指令隊列條目中的字段。
6.根據(jù)權(quán)利要求1所述的方法,其進一步包括連同所述先前值一起保存所述新寫入的 鏈接棧條目的鏈接棧索引,且其中將所述保存的值恢復(fù)到所述鏈接棧包括將所述值恢復(fù)到 所述保存的鏈接棧索引處的所述鏈接棧條目。
7.根據(jù)權(quán)利要求1所述的方法,其進一步包括檢測所述鏈接棧被推測性地讀取,且其 中將所述保存的值恢復(fù)到所述鏈接棧包括僅在所述鏈接棧被推測性地讀取且還被推測性 地寫入的情況下將所述保存的值恢復(fù)到所述鏈接棧。
8.根據(jù)權(quán)利要求7所述的方法,其中將所述保存的值恢復(fù)到所述鏈接棧包括僅在所述 鏈接棧在被推測性地寫入之前被推測性地讀取的情況下將所述保存的值恢復(fù)到所述鏈接 棧。
9.一種處理器,其包括 指令執(zhí)行管線;包括多個條目的鏈接棧,每一條目操作以存儲鏈接地址;鏈接棧恢復(fù)緩沖器,其操作以在任何鏈接棧條目被以新的鏈接地址重寫后存儲鏈接棧 條目的先前值,且進一步操作以在檢測到置換所述鏈接棧條目的鏈接棧寫入是推測性的且錯誤的之后將所述先前值恢復(fù)到所述鏈接棧條目;以及鏈接棧監(jiān)視器電路,其操作以檢測向所述鏈接棧的錯誤的推測性寫入。
10.根據(jù)權(quán)利要求9所述的處理器,其中所述鏈接棧監(jiān)視器電路操作以通過檢測所述 管線中錯誤預(yù)測的分支指令之后的一個或一個以上鏈接棧寫入指令而檢測向所述鏈接棧 的錯誤的推測性寫入。
11.根據(jù)權(quán)利要求10所述的處理器,其中所述鏈接棧監(jiān)視器電路操作以通過將所述管 線中在錯誤預(yù)測的分支指令之前的未提交的鏈接棧寫入指令的計數(shù)與所述管線中未提交 的鏈接棧寫入指令的總數(shù)的計數(shù)進行比較而檢測所述管線中在錯誤預(yù)測的分支指令之后 的一個或一個以上鏈接棧寫入指令。
12.令時遞增且當 鏈接棧寫入指令提交以供執(zhí)行時遞減。
13.根據(jù)權(quán)利要求12所述的處理器,其中所述管線中在錯誤預(yù)測的分支指令之前的所 述未提交的鏈接棧寫入指令的所述計數(shù)是與分支指令相關(guān)聯(lián)的計數(shù)器的值,所述計數(shù)器當 解碼所述分支指令時初始化到所述升/降計數(shù)器的所述值且在鏈接棧寫入指令提交以供 執(zhí)行時遞減,且所述分支指令被估計為已被錯誤預(yù)測。
14.一種處理器,其包括指令執(zhí)行管線;包括多個條目的鏈接棧,每一條目操作以存儲鏈接地址;鏈接棧恢復(fù)緩沖器,其操作以在任何鏈接棧條目被以新的鏈接地址重寫后存儲鏈接棧 條目的先前值,且進一步操作以在檢測到置換所述鏈接棧條目的鏈接棧寫入是推測性的且 錯誤的之后將所述先前值恢復(fù)到所述鏈接棧條目;升/降計數(shù)器,其操作以通過在解碼鏈接棧寫入指令后遞增且在鏈接棧寫入指令提交 以供執(zhí)行后遞減而維持所述管線中未提交的鏈接棧寫入指令的計數(shù);與所述管線中每一未提交的分支指令相關(guān)聯(lián)的計數(shù)器,所述計數(shù)器操作以通過在解碼 分支指令后初始化到所述升/降計數(shù)器值且在鏈接棧寫入指令提交以供執(zhí)行后遞減而維 持所述管線中在所述分支指令之前的未提交的鏈接棧寫入指令的計數(shù);以及比較器,其操作以通過將所述升/降計數(shù)器值與和錯誤預(yù)測的分支指令相關(guān)聯(lián)的所述 計數(shù)器的值進行比較而檢測錯誤的推測性鏈接棧寫入操作。
15.根據(jù)權(quán)利要求14所述的處理器,其中所述鏈接?;謴?fù)緩沖器進一步操作以存儲所 述被重寫條目的鏈接棧索引。
16.根據(jù)權(quán)利要求14所述的處理器,其中所述鏈接?;謴?fù)緩沖器包括單一條目。
17.根據(jù)權(quán)利要求14所述的處理器,其中所述比較器實施逐位XOR和歸約AND函數(shù)。
18.根據(jù)權(quán)利要求14所述的處理器,其中與所述管線中每一未提交的分支指令相關(guān)聯(lián) 的所述計數(shù)器包括分支指令隊列中的計數(shù)字段。
全文摘要
每當將鏈接地址寫入到鏈接棧時,保存鏈接棧條目的先前值,且在在錯誤預(yù)測的分支之后推測性地執(zhí)行鏈接棧推進操作之后將所述先前值恢復(fù)到所述鏈接棧。通過維持管線中未提交的鏈接棧寫入指令的總數(shù)的計數(shù)以及每一分支指令之前的未提交的鏈接棧寫入指令的數(shù)目的計數(shù)來檢測此情形。當分支被估計且確定為已錯誤預(yù)測時,將與其相關(guān)聯(lián)的計數(shù)與總計數(shù)進行比較。不一致指示鏈接棧寫入指令是在所述錯誤預(yù)測的分支指令之后被推測性地發(fā)布到所述管線中,且將鏈接地址推進到所述鏈接棧上。從鏈接?;謴?fù)緩沖器將先前鏈接地址恢復(fù)到所述鏈接棧。
文檔編號G06F9/38GK101815984SQ200880110141
公開日2010年8月25日 申請日期2008年10月3日 優(yōu)先權(quán)日2007年10月5日
發(fā)明者布萊恩·邁克爾·斯坦普爾, 羅德尼·韋恩·史密斯, 詹姆斯·諾里斯·迪芬德爾費爾 申請人:高通股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
泸西县| 武定县| 临城县| 临沭县| 崇左市| 手游| 从江县| 东丰县| 禹城市| 炎陵县| 远安县| 舞钢市| 迭部县| 察雅县| 新蔡县| 高阳县| 六枝特区| 乾安县| 渑池县| 彩票| 灵宝市| 周宁县| 乌拉特后旗| 沾化县| 阳春市| 东丰县| 四会市| 阳山县| 文安县| 万安县| 高尔夫| 聂拉木县| 天峨县| 沿河| 钦州市| 淮阳县| 东港市| 银川市| 顺义区| 桃园县| 腾冲县|