一種用于函數返回地址預測的裝置及方法
【技術領域】
[0001]本發明屬于微處理器領域,尤其涉及一種用于函數返回地址預測的裝置及方法。
【背景技術】
[0002]轉移指令是處理器的基本指令之一,廣泛存在于程序中。轉移指令會引入程序控制流的轉移,是處理器的性能殺手之一。進一步,轉移指令包括條件轉移指令和無條件轉移指令以及間接轉移指令。其中,函數返回指令作為間接轉移指令的一種,頻繁應用于子函數的程序返回,對處理器的性能有著重大影響。為了加快函數返回指令的執行速度,中高端嵌入式處理器普遍采用了函數返回地址棧,為函數返回指令提供返回地址的預測。其基本原理是在發生函數調用時,將函數調用指令的下一條指令的地址視為函數返回的地址,并緩沖到函數返回地址棧中;在發生函數返回時,從函數返回地址棧中讀取緩存的地址作為預測的函數返回地址并返回。
[0003]由于函數返回地址棧常位于處理器中的流水線前級,導致函數返回地址棧在運行過程中由于流水線的原因效率較低。目前對函數返回地址棧的改進集中于對其性能的改進,根據函數調用與返回指令在流水線中處理的不同節點設計多個返回棧指針,包括棧頂指針、檢驗指針、恢復指針等,用于維護函數返回地址棧讀取指針的正確性,進一步,也有為在流水線中不同處理節點設計多個函數返回地址棧的方法,使得返回地址棧具有了內容糾錯能力。但這兩類方法都是對性能進行優化的方法。
[0004]有研宄表明,受限于函數的大小,函數調用的地址偏移大都在IMb范圍以內,因此函數返回地址棧中對函數返回地址的高位進行保存在大多數情況下是沒有意義的。
【發明內容】
[0005]為了克服已有函數返回地址棧方式的成本較高、處理器性能受限的不足,本發明提供了一種有效降低函數返回地址棧的成本、提升處理器性能的用于函數返回地址預測的裝置及方法。
[0006]本發明解決其技術問題所采用的技術方案是:
[0007]一種用于函數返回地址預測的裝置,所述裝置包括:
[0008]指令譯碼單元,用于對輸入的指令進行譯碼,產生操作指示符;
[0009]函數返回地址棧,包含S個表項,用于接受指令譯碼單元的操作指示符,對于譯碼得到的函數調用指令,函數返回地址棧截取并保存函數調用指令的下一條指令的地址的低M比特,對于譯碼得到的函數返回指令,從函數返回地址棧中彈出最近入棧的表項的M比特地址,拼上函數返回指令地址的高(N-M)位,封裝產生N比特的目標地址作為函數返回指令的預測地址A,并記錄返回地址A對應的表項索引X ;
[0010]執行單元,用于接受指令譯碼單元的操作指示符以及函數返回地址棧的預測地址A與表項索引X,當操作指示符指示為函數返回指令時,判斷地址A是否預測正確,產生預測正確信息與實際跳轉地址;
[0011]糾錯單元,用于接受執行單元的輸出,在函數返回地址預測錯誤時用實際地址B對函數返回地址棧中表項索引X指向的內容進行糾正。
[0012]進一步,所述的函數返回地址棧中每個表項的內容為M比特,預測地址A與實際地址B為N比特,M、N均為整數,M<No
[0013]所述譯碼單元對函數調用和函數返回指令進行譯碼,并根據譯碼結果完成函數返回地址棧的入棧和出棧操作。
[0014]函數返回地址棧采用先進后出的堆棧結構。
[0015]再進一步,所述執行單元中,計算產生實際函數返回地址B,并與預測地址A進行比較,產生預測正確信息以及實際地址B;所述糾錯單元中,接受執行單元的輸出,在函數返回地址預測錯誤時用實際地址B的低M比特信息對函數返回地址棧中表項索引X指向的內容進行糾正。
[0016]一種用于函數返回地址預測的方法,所述方法包括如下步驟:
[0017]I)對指令進行譯碼,譯出函數調用指令和函數返回指令,并產生操作指示符;
[0018]2)當指令譯碼為函數調用指令時,截取下一條指令的地址的低M比特并保存在函數返回地址棧中;當指令譯碼為函數返回指令時,從函數返回地址棧中彈出最近入棧的表項的M位地址,拼接上函數返回指令的高(N-M)位地址,封裝產生函數返回指令的預測地址A,并記錄預測地址A對應的表項索引X ;
[0019]3)當操作指示符指示為函數返回指令時,判斷地址A是否預測正確,產生預測正確信息與實際跳轉地址;
[0020]4)在函數返回地址預測錯誤時用實際地址B對函數返回地址棧中表項索引X指向的內容進行糾正;
[0021]進一步,所述步驟3)中,計算產生實際函數返回地址B,并與預測地址A進行比較,產生預測正確信息以及實際地址B ;所述步驟4)中,在函數返回地址預測錯誤時用實際地址B的低M比特信息對函數返回地址棧中表項索引X指向的內容進行糾正。
[0022]再進一步,所述的函數返回地址棧包含S個表項,每個表項的內容為M比特,預測地址A與實際地址B為N比特,M、N均為整數,M<No
[0023]更進一步,函數返回地址棧采用先進后出的堆棧結構。
[0024]本發明的技術構思為:在保證函數返回地址棧對函數返回地址較高預測準確率的情況下,以減小函數返回地址棧每個表項內數據寬度的方法來降低函數返回地址棧的成本。在此基礎上提出了函數返回地址棧無需保留全部地址信息而只保留低位地址信息的預測裝置和方法。
[0025]本發明的有益效果主要表現在:有效降低函數返回地址棧的成本、提升處理器性會K。
【附圖說明】
[0026]圖1是一種函數返回地址預測裝置的示意圖。
[0027]圖2是函數返回地址棧原理圖。
[0028]圖3是函數返回地址棧棧頂指針維護原理圖。
[0029]圖4是糾錯單元原理圖。
[0030]圖5是一種函數返回地址預測方法的流程示意圖。
【具體實施方式】
[0031]下面結合附圖對本發明作進一步描述。
[0032]實施例1
[0033]參照圖1?圖4,一種函數返回地址預測裝置,包括譯碼單元,函數返回地址棧,執行單元和糾錯單元。
[0034]指令譯碼單元對輸入的指令進行譯碼得到操作指示符、寄存器索引等信息。操作指示符包括指令類型、操作數類型以及操作數個數等。指令類型可以有運算類指令、內存訪問指令、條件轉移指令、無條件轉移指令和間接轉移指令等。其中間接轉移類指令里的函數調用和函數返回指令必須經由譯碼單元譯出。寄存器索引信息可以幫助確定函數返回指令以及為間接轉移指令提供地址信息。指令譯碼單元在譯出當前輸入指令為函數調用指令時,會將該指令下一條指令的地址連同一根寫控制信號傳遞給函數返回地址棧。指令譯碼單元在譯出當前輸入指令為函數返回指令時,會傳遞給函數返回地址棧當前指令的地址連同一根讀控制信號。同時,指令譯碼單元還會將操作指示符和寄存器索引等信息傳遞給執行單元。
[0035]參照圖2所示,為函數返回地址棧的一種示意圖。函數返回地址棧共有8個表項,每個表項的數據寬度為20比特。函數返回地址棧采用先進后出的堆棧式結構,以棧頂指針P對返回地址棧的寫入和讀取操作進行控制,指針P在復位時指向表項O的位置。當譯碼單元譯出當前指令為函數調用指令時,會將該指令下一條指令的地址連同寫控制信號傳遞給函數返回地址棧。當譯碼單元譯出其他類型的指令時,該寫控制信號不會被置起。函數返回地址棧在接收到該寫控制信號后,會截取譯碼單元傳遞來的指令地址的低20比特信息,寫入指針P所指向的函數返回地址棧的表項,同時指針P執行“加一”的操作。當譯碼單元譯出當前指令為函數返回指令時,會傳遞給函數返回地址棧當前函數返回指令的地址連同一讀控制信號。當譯碼單元在譯出其他類型的指令時,該讀控制信號不會被置起。函數返回地址棧在看到該讀控制信號后,指針P會執行“減一”的操作,之后將指針P所指向的函數返回地址棧表項內的信息讀取出來。與此同時,函數返回地址棧會截取從譯碼單元傳遞過來的指令地址的高12比特信息,拼接上從地址棧表項內讀取的20比特信息作為函數返回的預測地址A。該預測地址A以及指針P所指向的表項位置即索引X會被傳遞給執行單元用于函數返回地址正確性的檢驗。
[0036]參照圖3所示,為函數返回地址棧棧頂指針P的維護示意圖。棧頂指針P以8位獨熱碼表示所指向的表項索引。當函數返回地址棧接收到的寫控制信號被置起時,執行“加一”的操作;當函數返回地址棧接收到的讀控制信號被置起時,執行“減一”的操作。當指針P加到7之后,寫控制信號再次被置起時,指針P變成0,指向函數返回地址棧O號表項所在的位置;當指針P減到O之后,讀控制信號再次被置起時,指針P變成7,指向函數返回地址棧7號表項所在的位置。
[0037]執行單元在接收到譯碼單元的操作指示符以及寄存器索引等信息表明當前指令為函數返回指令時,會同時接收從函數返回地址棧傳遞來的函數返回預測地址A以及預測地址A所對應的函數返回地址棧表項索引X。執行單元根據從譯碼單元傳遞來的寄存器索引去寄存器組讀得相應