堆棧存儲的變量值預測的制作方法
【專利說明】堆棧存儲的變量值預測
【背景技術】
[0001] 通過以與程序中的順序不同的次序執(zhí)行指令,亂序微處理器能夠提供改善的計算 性能,從而使得當它們的輸入數據可用時執(zhí)行指令而非等待去執(zhí)行該程序中的在先指令。 為了允許在微處理器上亂序運行指令,能夠對指令所使用的寄存器重命名是有用的。這使 得能夠將"讀后寫"(WAR)依賴性從指令中移除,這是由于這些相關并不是真正的相關。通 過使用寄存器重命名并移除這些依賴性,能夠不按程序順序而執(zhí)行更多指令,并且進一步 改善性能。通過維護以下映射來執(zhí)行寄存器重命名:在指令中被命名的寄存器(稱作虛擬 寄存器(architecturalregister))被映射到微處理器的物理寄存器上的映射。該映射可 以被稱的"寄存器重命名映射"。
[0002] 由于存在有限數量的虛擬寄存器,編譯器不能總是將所有程序變量保持在寄存器 中,并且因此,在寄存器中存儲的一些變量可能需要被保存到存儲器(通常被保存到程序 堆棧)以釋放虛擬寄存器。當隨后需要變量的值時,必須再次將這些值從存儲器(例如,堆 棧)讀取回寄存器中。該從存儲器的讀取引入了延遲。
[0003] 存在許多可能出現不足的虛擬寄存器的問題的情況。例如,在存在比函數內的虛 擬寄存器更多的變量(導致寄存器溢出)的情況下和/或當一個函數(父函數)調用另一 函數(子函數)并且存在針對父函數和子函數兩者不足的虛擬寄存器時。盡管一個解決方 案會是增加可用虛擬寄存器的數量,但是這通常是不可能的,這是因為它將改變指令集的 尺寸。
[0004] 以下描述的實施例不限于解決對處理器進行操作的已知方法的缺點中的任何或 全部的實現方式。
【發(fā)明內容】
[0005] 提供該
【發(fā)明內容】
以按照簡要形式介紹概念的選集,上文在【具體實施方式】中進一步 描述所述概念。該
【發(fā)明內容】
不旨在標識所主張的主題內容的關鍵特征或主要特征,也不旨 在于用作輔助于確定所主張的主題內容的范圍。
[0006] 描述了對堆棧中存儲的變量的值進行預測的方法。當出現在堆棧中在距所述堆棧 指針偏移的位置中存儲變量的指令時,條目被添加到數據結構,該數據結構標識當前存儲 堆棧指針的物理寄存器、存儲變量的值和偏移值的物理寄存器。隨后,當出現從堆棧中從通 過參照堆棧指針而標識的位置來加載變量的指令時,搜索所述數據結構以看是否存在包括 與加載指令相同的偏移和存儲堆棧指針的相同物理寄存器的對應條目。如果找到對應條 目,則加載指令中的虛擬寄存器被映射到存儲來自所述條目的變量的值的物理寄存器。
[0007] 第一方面提供了預測處理器中的堆棧中存儲的變量的值的方法,所述堆棧具有堆 棧指針,并且所述方法包括:響應于檢測到參照所述堆棧指針而將變量存儲到堆棧的指令, 在數據結構中存儲數據條目,所述數據條目包括用于所述堆棧指針的唯一ID、表示所述變 量被存儲到所述堆棧之前的所述變量的值的參數、以及到所述變量被存儲在的堆棧指針處 的偏移;響應于隨后檢測到參照所述堆棧指針而從所述堆棧加載變量的指令,在所述數據 結構搜索與所檢測到的指令對應的條目;并且響應于在所述數據結構中找到對應條目,使 用在所述對應條目中存儲的信息來更新在所檢測到的指令中引用的虛擬寄存器的有效值。
[0008]第二方面提供了一種設備,包括:硬件邏輯,其被設置為預測在處理器中的堆棧中 存儲的變量的值,所述堆棧具有堆棧指針;以及存儲器,其被設置為堆棧保存的值存儲區(qū), 其中,所述硬件邏輯被設置為:響應于檢測到參照所述堆棧指針而將變量存儲到所述堆棧 的指令,在所述堆棧保存的值存儲區(qū)中存儲數據條目,所述數據條目包括用于所述堆棧指 針的唯一ID、表示在所述變量被存儲到所述堆棧之前的所述變量的值的參數、以及到所述 變量被存儲在的所述堆棧指針處的偏移;響應于隨后檢測到參照所述堆棧指針而從所述堆 棧加載變量的指令,在堆棧保存的值存儲區(qū)搜索與所檢測到的指令對應的條目;并且響應 于在堆棧保存的值存儲區(qū)中找到對應條目,使用在所述堆棧保存的值存儲區(qū)中的所述對應 條目中存儲的信息來更新所檢測到的指令中引用的虛擬寄存器的有效值。
[0009]第三方面提供了計算機可讀存儲介質,計算機可讀存儲介質具有在其上編碼的用 于生成包括如本文中描述的設備的處理器的計算機可讀程序代碼。
[0010] 第四方面提供了計算機可讀存儲介質,計算機可讀存儲介質具有在其上編碼的用 于生成被配置為執(zhí)行如本文中描述的方法的處理器的計算機可讀程序代碼。
[0011] 其它方面提供了基本如參照附圖的圖2和圖4所描述的方法以及基本如參照附圖 的圖3所描述的處理器。
[0012] 本文中描述的方法可以由被配置有按照存儲在有形存儲介質上的機器可讀形式 的軟件的計算機來執(zhí)行,例如,當在計算機上運行程序時并且在計算機程序可以被實施在 計算機可讀存儲介質上的情況下,按照包含有用于將計算機配置為執(zhí)行所描述的方法的構 成部分的計算機可讀程序代碼的計算機程序的形式,按照包含有被適應為執(zhí)行本文中所描 述的任意方法的所有步驟的計算機程序代碼模塊的計算機程序的形式。有形(或非瞬時 性)存儲介質的示例包括盤、拇指驅動器、存儲卡等,并且不包括傳播信號。該軟件能夠適 合于在并行處理器或串行處理器上的執(zhí)行,從而使得可以以任意適當次序或同時執(zhí)行方法 步驟。
[0013]本文中描述的硬件部件可以由具有在其上編碼的計算機可讀程序代碼的非瞬時 性計算機可讀存儲介質來生成。
[0014]這承認了可以單獨地使用固件和軟件,并且固件和軟件可以是有益的。旨在于涵 蓋在"非智能(dumb) "或標準硬件上運行的或控制"非智能"或標準硬件的軟件以執(zhí)行所期 望的功能。還旨在于涵蓋"描述"或限定硬件的配置的軟件(例如用于設計硅芯片的HDL(硬 件描述語言)軟件、或用于配置通用可編程芯片的軟件)以執(zhí)行所期望的功能。
[0015]如對于技術人員顯而易見的,優(yōu)選的特征可以適當地結合并且可以與本發(fā)明的任 何方面相結合。
【附圖說明】
[0016]將參照以下圖通過示例來描述本發(fā)明的實施例,在附圖中:
[0017] 圖1是堆棧的示意圖;
[0018] 圖2示出了對保存到堆棧中的變量的值進行預測的示例方法的流程圖;
[0019] 圖3示出了在其中可以實現本文中描述的方法的示例處理器的示意圖;
[0020] 圖4示出了在對保存到堆棧的變量的值進行預測的示例方法中的可選附加步驟 的流程圖;
[0021] 圖5示出了堆棧保存的值存儲區(qū)的示例;
[0022] 圖6是堆棧指針值預測的示例方法的流程圖;
[0023] 圖7示出了示例堆棧的增大和縮小的示意圖;
[0024] 圖8示出了示例處理器的示意圖;
[0025] 圖9是由加載-存儲單元所實現的緩存堆棧指針值的示例方法的流程圖;
[0026] 圖10是更詳細地示出來自圖6的方法的操作的流程圖;
[0027] 圖11是更詳細地示出來自圖6的方法的操作的流程圖;
[0028] 圖12是堆棧指針值預測的另一示例方法的流程圖;
[0029] 圖13是堆棧指針值預測的又一示例方法的流程圖;
[0030] 圖14是示出當發(fā)生中斷時所實現的方法的流程圖;以及
[0031] 圖15是堆棧指針值預測的再一示例方法的流程圖。
[0032] 附圖通篇中使用共同的附圖標記來指示類似的特征。
【具體實施方式】
[0033] 以下僅通過示例的方式描述本發(fā)明的實施例。這些示例表示申請人當前所知道的 將本發(fā)明付諸實踐的最佳方式,盡管它們不是僅有的能夠實現本發(fā)明的方式。該描述闡述 了示例的功能和用于構建和操作示例的步驟的順序。然而,可以由不同的示例來完成相同 的或等同的功能和順序。
[0034] 如上所述,在處理器中存在有限數量的虛擬寄存器,并且因此在寄存器中存儲的 一些變量可能需要被保存到堆棧以釋放虛擬寄存器。
[0035] 堆棧是通常用于提供供程序使用的臨時存儲區(qū)域的數據結構,并且堆棧被實現為 后進先出(LIFO)數據結構(其可以替選地被稱作先入后出FILO數據結構),從而使得嚴格 地以被添加到堆棧的相反次序從堆棧中移除數據。堆??梢员徽J為是從堆棧原點向上或向 下生長;然而,在任一種情況下,由堆棧指針來標識堆棧的頂端(其是被最新添加到堆棧的 元素),該堆棧指針通常指向下一非使用的條目。堆棧指針的值可以被存儲在處理器內的 硬件寄存器中。當數據元素被添加(或"推入")到