專利名稱:基于識別尋址模式的雙目的寄存器的數(shù)據(jù)預(yù)測機制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器的領(lǐng)域,更確切地說,涉及在微處理器中施行數(shù)據(jù)預(yù)測執(zhí)行。
背景技術(shù):
超標量微處理器通過同時執(zhí)行多重指令和通過使用最短的與其設(shè)計相符合的可能的時鐘周期,而達到高性能。然而,各指令之間的數(shù)據(jù)和控制流依附性(dependency)會限制在任何給定的時間可以發(fā)出多少個指令。結(jié)果,一些微處理器為了獲得額外的性能增益,而支持預(yù)測執(zhí)行功能。
有一種類型的預(yù)測是控制流預(yù)測??刂屏黝A(yù)測預(yù)測程序控制(program control)將進行的方向。例如,分支預(yù)測可用來預(yù)測是否將采用分支??刹捎枚喾N類型的分支預(yù)測,從方法上來區(qū)分,范圍從每次只作相同預(yù)測的分支預(yù)測,至那些為了進行基于歷史的預(yù)測而在程序中保留了復(fù)雜的先前分支經(jīng)歷的分支預(yù)測。分支預(yù)測可通過硬件優(yōu)化、編譯程序優(yōu)化或兩者的結(jié)合來促進分支預(yù)測。根據(jù)由分支預(yù)測機制所提供的預(yù)測,而可在預(yù)測的情況下取得并執(zhí)行指令。當最終評估確定了分支指令后,即可驗證該分支預(yù)測。若預(yù)測為不正確,則要取消任何根據(jù)此不正確的預(yù)測所預(yù)測執(zhí)行的指令。
已提出的另外一種類型的預(yù)測是數(shù)據(jù)預(yù)測。例如,預(yù)測各數(shù)據(jù)項之值的值預(yù)測可包含觀察數(shù)據(jù)中的模式(pattern),并根據(jù)這些模式而作預(yù)測(例如,可通過觀察索引計數(shù)變量的先前值如何增加或減少來預(yù)測該變量的值)。地址預(yù)測包含預(yù)測數(shù)據(jù)的地址。另外一種類型的數(shù)據(jù)預(yù)測稱之為內(nèi)存系統(tǒng)樂觀主義(optimism)。在多處理器系統(tǒng)中,當處理器在一致性檢驗(coherency checking)完成前,使用從該處理器的局部高速緩存來的數(shù)據(jù)而以預(yù)測方式執(zhí)行指令時,即會發(fā)生內(nèi)存系統(tǒng)樂觀主義。同樣地,另外一種類型的數(shù)據(jù)預(yù)測可使加載在儲存前在預(yù)測的情況下執(zhí)行,該儲存在執(zhí)行該加載時具有未計算的地址,即使該儲存可將數(shù)據(jù)儲存在該加載存取的相同地址。在所有的這些類型的數(shù)據(jù)預(yù)測中,最后將評估基礎(chǔ)條件,以驗證或還原該預(yù)測。若該預(yù)測最后為不正確,則可再執(zhí)行使用該預(yù)測數(shù)據(jù)所執(zhí)行的指令(例如,使用更新的和/或非預(yù)測的數(shù)據(jù))。
因為預(yù)測允許執(zhí)行繼續(xù)進行,而不必等待依附性檢驗的完成,若從正確預(yù)測所獲得的性能超過了由不正確預(yù)測所損失的性能,則可獲得顯著的性能增加。因此,希望能夠在微處理器中執(zhí)行數(shù)據(jù)預(yù)測,并對于錯誤的預(yù)測提供有效的恢復(fù)機制。
許多的處理器要求在操作中可取用主存儲器的稱之為“堆?!钡囊徊糠帧T缙诘膞86微處理器當處理異常和中斷時,使用堆棧來儲存狀態(tài)信息??墒褂枚褩6魏投褩V羔?SSSP或SSESP)寄存器對來存取在主存儲器的堆棧部分內(nèi)的內(nèi)存地址。16位SS(堆棧段)寄存器定義包含堆棧的主存儲器堆棧部份之中的基地址(亦即,堆棧的“底部”地址)。16位SP(堆棧指針)寄存器可提供目前堆棧“頂端”距離基地址的偏移。最新的x86微處理器具有32位ESP(擴展堆棧指針)寄存器。
堆棧使用為后入先出(LIFO)儲存機制。堆棧頂端為包含最近儲存于堆棧內(nèi)的數(shù)據(jù)的儲存位置。數(shù)據(jù)被“推”至堆棧(亦即,儲存于堆棧頂端)并從堆?!叭〕?popped)”(亦即,從堆棧頂端移去)。當將數(shù)據(jù)推至堆棧上時,通常ESP寄存器減值。換言之,x86堆棧一般從基地址以向下方向生長。當自堆棧取出數(shù)據(jù)時,該移動的數(shù)據(jù)是最近推至堆棧的數(shù)據(jù)。
x86架構(gòu)包括數(shù)量相當少的寄存器,這些寄存器可用來儲存在軟件程序執(zhí)行期間所處理的數(shù)據(jù)。結(jié)果,在軟件程序執(zhí)行期間所使用的數(shù)據(jù)時常儲存在堆棧內(nèi)。儲存在堆棧內(nèi)的數(shù)據(jù)的可存取性因此在獲得高微處理性能方面特別重要。另一方面,堆棧是主存儲器的一部分,而對主存儲器的存取相當慢。因此希望加速對主存儲器的堆棧部分的存取。
發(fā)明內(nèi)容
可通過匹配包含于不同操作中的尋址模式而實現(xiàn)將加載操作的預(yù)測結(jié)果鏈接至寄存器值的方法和系統(tǒng)的各種實施例。在一個實施例中,系統(tǒng)可包括內(nèi)存文件(memory file)和執(zhí)行內(nèi)核。內(nèi)存文件可包括配置用來儲存尋址模式和標記的登錄項。若內(nèi)存操作(亦即,加載和/或儲存在內(nèi)存中一地址的值的操作)的尋址模式匹配儲存于登錄項中的尋址模式,則內(nèi)存文件可配置成將由標記所識別的數(shù)據(jù)值鏈接到內(nèi)存操作的預(yù)測結(jié)果。內(nèi)存操作的尋址模式包括邏輯寄存器的識別符,和為了判定內(nèi)存操作的尋址模式是否匹配儲存于登錄項中的尋址模式,而可將內(nèi)存文件配置成預(yù)測邏輯寄存器是否正被指定為通用寄存器或者堆棧幀指針寄存器。當執(zhí)行依賴內(nèi)存操作的另一個操作時,可配置執(zhí)行內(nèi)核以存取預(yù)測結(jié)果。
在一些實施例中,若內(nèi)存文件預(yù)測包含于內(nèi)存操作的尋址模式中的邏輯寄存器正被用作堆棧幀指針寄存器,則內(nèi)存文件可判定內(nèi)存操作的尋址模式并不匹配儲存于登錄項中的尋址模式。反之,若內(nèi)存文件預(yù)測邏輯寄存器正被用作通用寄存器,則假使內(nèi)存操作的尋址模式等同于儲存在登錄項中的尋址模式,則內(nèi)存文件可判定加載操作的尋址模式匹配儲存于登錄項中的尋址模式。若內(nèi)存文件預(yù)測包含于內(nèi)存操作的尋址模式中的邏輯寄存器正被用作堆棧幀指針寄存器,則內(nèi)存文件也可配置成不分配新的登錄項來儲存內(nèi)存操作的尋址模式。然而,若內(nèi)存文件預(yù)測邏輯寄存器正用來作為通用寄存器,假使內(nèi)存操作的尋址模式不等同于儲存在登錄項中的尋址模式,則內(nèi)存文件可配置成分配新的登錄項來儲存內(nèi)存操作的尋址模式。
在許多實施例中,內(nèi)存文件可包括幾個登錄項。可配置內(nèi)存文件,若該內(nèi)存文件預(yù)測邏輯寄存器正被用作堆棧文件指針寄存器,則判定內(nèi)存操作的尋址模式并不匹配儲存于任何登錄項中的尋址模式。
在一個實施例中,內(nèi)存文件可配置成當檢測到調(diào)用或登錄項指令時,則預(yù)測邏輯寄存器正被用作堆棧幀指針。內(nèi)存文件也可配置成當檢測到返回或離開指令時,則預(yù)測邏輯寄存器正被用作通用寄存器。
在另外的實施例中,可配置內(nèi)存文件以預(yù)測邏輯寄存器如何被用來追蹤目前的調(diào)用深度。內(nèi)存文件可配置成當檢測到調(diào)用指令,則增加目前的調(diào)用深度,和當檢測到返回指令,則減少目前的調(diào)用深度。除了起始值的其它所有值可指示由于遭遇到一個或多個子程序調(diào)用,目前的子程序調(diào)用深度。登錄項可儲存等于當分配登錄項后的目前調(diào)用深度值的調(diào)用深度值。若當處理內(nèi)存操作時的目前調(diào)用深度的值不等于儲存于登錄項中的調(diào)用深度值,則內(nèi)存文件可配置成判定內(nèi)存操作的尋址模式并不匹配儲存于登錄項中的尋址模式。若當處理內(nèi)存操作時的目前調(diào)用深度的值等于儲存在登錄項中的調(diào)用深度值,而若內(nèi)存操作的尋址模式等同于儲存在登錄項中的尋址模式,則內(nèi)存文件可配置成判定內(nèi)存操作的尋址模式匹配儲存于登錄項中的尋址模式。若當處理內(nèi)存操作時的目前調(diào)用深度的值不等于儲存在登錄項中的調(diào)用深度值,可配置內(nèi)存文件以分配新的登錄項來儲存內(nèi)存操作的尋址模式和儲存當在新的登錄項中處理內(nèi)存操作時的目前調(diào)用深度的值。若儲存于登錄項中的尋址模式識別邏輯寄存器和若當處理操作時的目前調(diào)用深度的值等于儲存在登錄項中的調(diào)用深度值,則內(nèi)存文件可配置成使該登錄項無效,以響應(yīng)分派的操作,當執(zhí)行該分派的操作時修改邏輯寄存器的值。然而,響應(yīng)分派的操作,若當處理操作時的目前調(diào)用深度的值不等于儲存在登錄項中的調(diào)用深度值,則內(nèi)存文件可不使該登錄項無效。
在一些實施例中,內(nèi)存文件可追蹤與堆棧有關(guān)的尋址模式和與堆棧無關(guān)的尋址模式。例如,在一個實施例中,內(nèi)存文件可包括儲存與堆棧有關(guān)的尋址模式的登錄項。內(nèi)存文件可配置成當判定操作的尋址模式是否匹配儲存于登錄項中的與堆棧有關(guān)的尋址模式時,使用一個機制來補償堆棧指針的調(diào)整。例如,內(nèi)存文件可配置成通過修改儲存于登錄項中的位移而補償對堆棧指針的調(diào)整以響應(yīng)分派的操作,當執(zhí)行該分派的操作時修改堆棧指針的值?;蚩扇《?,可先通過修改尋址模式調(diào)整值和將該尋址模式調(diào)整值應(yīng)用到新操作的尋址模式,之后比較新操作的尋址模式與儲存于登錄項中的與堆棧有關(guān)的尋址模式,而將內(nèi)存文件配置成補償堆棧指針的調(diào)整。
在一些實施例中,系統(tǒng)可包括堆棧文件和內(nèi)存文件。若操作的尋址模式并不匹配儲存于堆棧文件登錄項其中之一的尋址模式,和若操作的尋址模式包括邏輯寄存器的識別符,則堆棧文件可配置成分配一個登錄項以儲存該操作的尋址模式。內(nèi)存文件也可響應(yīng)相同的操作而分配登錄項。在另外的實施例中,內(nèi)存文件可根據(jù)預(yù)測邏輯寄存器是被指定為通用寄存器還是堆棧幀指針寄存器,而選擇性地分配登錄項給操作。內(nèi)存文件可配置成永不將內(nèi)存文件中登錄項分配至任何尋址模式包括堆棧指針寄存器的識別符的操作,而堆棧文件總是分配登錄項至這些操作。在一個實施例中,堆棧文件可保持堆棧指針尋址模式調(diào)整值和堆棧幀指針尋址指針調(diào)整值。內(nèi)存文件可配置成根據(jù)堆棧幀指針尋址指針調(diào)整值是否有效而預(yù)測邏輯寄存器是否指定為通用寄存器或堆棧幀指針寄存器。
一個方法的實施例可包含預(yù)測在內(nèi)存操作的尋址模式中識別的邏輯寄存器是否正被用作通用寄存器或堆棧幀指針寄存器;根據(jù)該預(yù)測,判定內(nèi)存操作的尋址模式是否匹配早先操作的尋址模式;若該內(nèi)存操作的尋址模式匹配早先操作的尋址模式,則將由早先操作的操作數(shù)的標記所識別的數(shù)據(jù)值鏈接至內(nèi)存操作的預(yù)測結(jié)果;以及執(zhí)行具有根據(jù)內(nèi)存操作的結(jié)果的操作數(shù)來源的操作,該內(nèi)存操作的結(jié)果通過訪問由該標記所識別的數(shù)據(jù)值而得。
通過參考下面的詳細說明,并結(jié)合下列附圖,可以更好地了解本發(fā)明,其中圖1A顯示根據(jù)一個實施例的微處理器的方框圖。
圖1B顯示根據(jù)另一個實施例的微處理器的方框圖。
圖2A顯示根據(jù)一個實施例的分派單元的方框圖。
圖2B顯示可使用于一個實施例的示例性地址模式。
圖2C至圖2E顯示示例性程序指令和示例性堆棧,和可在一個實施例中產(chǎn)生的堆棧文件內(nèi)容。
圖3為顯示鏈接加載操作的預(yù)測結(jié)果至由特定標記所識別數(shù)據(jù)值的一個方法實施例的流程圖。
圖4A顯示根據(jù)一個實施例的分派單元。
圖4B顯示可使用于一些實施例的示例性地址模式。
圖5顯示根據(jù)一個實施例的調(diào)度裝置(scheduler)的方框圖。
圖6為響應(yīng)數(shù)據(jù)預(yù)測為不正確的指示而發(fā)出操作和再發(fā)出操作的方法實施例的流程圖。
圖7為根據(jù)一些實施例的分派單元的方框圖。
圖8為根據(jù)另一些實施例的分派單元的方框圖。
圖9為顯示發(fā)出具有預(yù)測數(shù)據(jù)值的操作和從錯誤預(yù)測恢復(fù)的另一方法的流程圖。
圖10顯示根據(jù)一個實施例的追蹤緩存的方框圖。
圖11顯示根據(jù)一個實施例的計算機系統(tǒng)。
圖12顯示根據(jù)另一個實施例的計算機系統(tǒng)。
本發(fā)明易于作出各種修飾和替代形式,在此將用參考附圖舉例說明的方式來詳細說明本發(fā)明的特定實施例。然而,應(yīng)當了解的是,此處特定實施例的說明并非要將本發(fā)明限制在所揭示的特定形式,反之,本發(fā)明將涵蓋所有落于所附權(quán)利要求內(nèi)所界定的本發(fā)明的精神和范圍內(nèi)的修飾、等效和替代。應(yīng)注意的是,標題的目的是僅用來組織本說明書,而不是用來限制或解釋說明的內(nèi)容或權(quán)利要求范圍。另外,要注意的是,詞語“可”以容許的意義(亦即,具有潛在性、能夠),而不是強制的意義(亦即必須)而使用于本申請中。“包括”一詞意味著“包括,但不局限于”?!斑B接”詞意味著“直接或者不直接連接”,而且“聯(lián)接(coupled)”一詞意味著“直接或著不直接地聯(lián)接”。
具體實施例方式
圖1為微處理器100的一個實施例的方框圖。微處理器100配置用來執(zhí)行儲存于系統(tǒng)內(nèi)存200中的指令。許多這些指令操作儲存于系統(tǒng)內(nèi)存200中的數(shù)據(jù)。值得注意的是,系統(tǒng)內(nèi)存200可實際分配遍及整個計算機系統(tǒng),并可由一個或多個微處理器100所存取。
微處理器100可包括指令高速緩存106和數(shù)據(jù)高速緩存128。微處理器100可包括聯(lián)接到指令高速緩存106的預(yù)取單元108。分派單元104可配置成用來接收從指令高速緩存106來的指令,并向一個或多個調(diào)度裝置118分派操作。一個或多個調(diào)度裝置118可被聯(lián)接以接收從分派單元104來的分派操作,并發(fā)出操作至一個或多個執(zhí)行內(nèi)核124。執(zhí)行內(nèi)核124可包括加載/儲存單元126,該加載/儲存單元126配置以執(zhí)行對數(shù)據(jù)高速緩存128的存取。由執(zhí)行內(nèi)核124所產(chǎn)生的結(jié)果可輸出至結(jié)果總線130??墒褂眠@些結(jié)果作為操作數(shù)值用于后續(xù)發(fā)出的指令和/或儲存于寄存器堆116。退除隊列(retire queue)102可聯(lián)接至調(diào)度裝置118和分派單元104??膳渲猛顺犃幸詻Q定何時可退除各發(fā)出的操作。在一個實施例中,微處理器100可設(shè)計成與x86架構(gòu)兼容。值得注意的是微處理器100也可包括其它的組件,例如,微處理器100可包括分支預(yù)測單元(圖中未顯示)。
指令高速緩存106在各指令由分派單元104所接收之前可暫時地儲存這些指令??山?jīng)由預(yù)取單元108自系統(tǒng)內(nèi)存200預(yù)先取得指令碼以提供給指令高速緩存106。指令高速緩存106可在各種配置情況下(例如,集合關(guān)聯(lián)(set-associative)、完全關(guān)聯(lián)(fully-associative)、或直接映射(direct-mapped))執(zhí)行。
預(yù)取單元108可從系統(tǒng)內(nèi)存200預(yù)先取得指令碼用來儲存在指令高速緩存106中。在一個實施例中,預(yù)取單元108可配置以將從系統(tǒng)內(nèi)存200來的代碼發(fā)入指令高速緩存106中。預(yù)取單元108可使用各種指定碼預(yù)先取得技術(shù)和算法。
分派單元104可輸出可通過執(zhí)行內(nèi)核124執(zhí)行的包含位編碼操作和操作數(shù)地址信息、立即數(shù)、和/或替換數(shù)據(jù)的信號。在一些實施例中,分派單元104可包括譯碼電路(圖中未顯示),用來將某些指令譯碼成在執(zhí)行內(nèi)核124內(nèi)可執(zhí)行的操作。簡單的指令可對應(yīng)于單一操作。在一些實施例中,更復(fù)雜的指令可對應(yīng)于多重操作。若操作包含寄存器的更新,則可保留在寄存器堆116內(nèi)的寄存器位置(例如,在該操作的譯碼后)以儲存預(yù)測的寄存器狀態(tài)(在一個替代實施例中,可使用重新排序緩沖器以儲存各寄存器的一個或多個預(yù)測寄存器狀態(tài))。寄存器圖134可將來源和目的操作數(shù)的邏輯寄存器名稱轉(zhuǎn)譯成物理寄存器名稱,以便于寄存器重命名。寄存器圖134可追蹤在寄存器堆116內(nèi)的哪個寄存器現(xiàn)在已分配和尚未分配。
圖1A的微處理器100支持無序執(zhí)行(out of order execution)。退除隊列102可保持追蹤用于寄存器讀取和寫入操作的原始程序序列,允許預(yù)測指令的執(zhí)行和分支錯誤預(yù)測的恢復(fù),并促使精確的異常(exception)。在一些實施例中,退除隊列102也可通過提供用于預(yù)測寄存器狀態(tài)的數(shù)據(jù)值的儲存而支持寄存器重命名。在許多實施例中,退除隊列102可類似于重新排序緩沖器而操作。然而,不像一般的重新排序緩沖器,退除隊列102可不提供任何的數(shù)據(jù)值的儲存。在一些實施例中,可用先進先出方式配置退除隊列102,其中當操作經(jīng)驗證后,則將他們移到緩沖器的“底部”,因此讓出隊列的“頂部”空間供新進入操作使用。當退除操作時,退除隊列102可將寄存器堆116中不再需要用來儲存預(yù)測寄存器狀態(tài)的寄存器解除分配,并提供信號至寄存器圖134以指示哪些寄存器當前閑置著。通過維持在寄存器堆116中(或在一個替代實施例中,在重新排序緩沖器內(nèi))的預(yù)測寄存器狀態(tài),直到產(chǎn)生這些狀態(tài)的操作經(jīng)過驗證后,若分支預(yù)測為不正確的話,則沿著錯誤預(yù)測通路的預(yù)測執(zhí)行操作的結(jié)果可以在寄存器堆116中變成無效。
若特定操作所需的操作數(shù)為寄存器位置,則寄存器地址信息可路由到寄存器圖134(或至重新排序緩沖器)。舉例而言,在x86架構(gòu)中,有8個32位邏輯寄存器(例如,EAX、EBX、ECX、EDX、EBP、ESI、EDI和ESP)。物理寄存器堆116(或重新排序緩沖器)包括改變這些邏輯寄存器內(nèi)容的結(jié)果的儲存,允許無序執(zhí)行。寄存器堆116中的物理寄存器可分配來儲存決定修正其中一個邏輯寄存器的內(nèi)容的每個操作的結(jié)果。因此,在執(zhí)行特定程序期間的各不同點上,寄存器堆116(或者,在一個替代實施例中,重新排序緩沖器)可以有一個或多個寄存器包含了某一給定邏輯寄存器的預(yù)測執(zhí)行內(nèi)容。
寄存器圖134可將一個物理寄存器指定給特定的邏輯寄存器,該邏輯寄存器特定用于操作的目的操作數(shù)。分派單元104可判定寄存器堆116具有一個或多個指定給邏輯寄存器的先前分配的物理寄存器,該邏輯寄存器特定為在某一操作中的來源操作數(shù)。寄存器圖134可提供用于最近指定給該邏輯寄存器的物理寄存器的標記??墒褂么藰擞泚泶嫒≡诩拇嫫鞫?16中操作數(shù)的數(shù)據(jù)值,或經(jīng)由在結(jié)果總線130上傳送的結(jié)果來接收數(shù)據(jù)值。若操作數(shù)對應(yīng)于內(nèi)存地址,則操作數(shù)值可經(jīng)由加載/儲存單元126而提供在結(jié)果總線上(用于結(jié)果傳送和/或儲存在寄存器堆116中)。當通過其中一個調(diào)度裝置118發(fā)出操作時,操作數(shù)數(shù)據(jù)值可被提供給執(zhí)行內(nèi)核124。值得注意的是在一個替代實施例中,當分派操作指令時,操作數(shù)值可被提供給對應(yīng)的調(diào)度裝置118(而非當發(fā)出操作指令時提供給對應(yīng)的執(zhí)行內(nèi)核124)。
在分派單元104的輸出提供的位編碼操作和立即數(shù)可路由至一個或多個調(diào)度裝置118。值得注意的是此處所使用的調(diào)度裝置為檢測何時操作已準備好執(zhí)行和發(fā)出準備操作指令至一個或多個執(zhí)行單元的裝置。舉例而言,保留站(reservation station)為一個調(diào)度裝置。各調(diào)度裝置118可以保持住幾個等待發(fā)出至執(zhí)行內(nèi)核124的尚未處理操作的操作信息(例如,位編碼執(zhí)行位和操作數(shù)值、操作數(shù)標記、和/或立即數(shù))。在一些實施例中,各調(diào)度裝置118可不提供操作數(shù)值的儲存。取而代之,各調(diào)度裝置可監(jiān)視可從寄存器堆116中獲得的發(fā)出操作和結(jié)果,以便決定操作數(shù)值何時能供執(zhí)行內(nèi)核124讀取(從寄存器堆116或結(jié)果總線130)。在一些實施例中,各調(diào)度裝置118可關(guān)聯(lián)于專用的執(zhí)行內(nèi)核124。在其它的實施例中,單一調(diào)度裝置118可向多于一個的執(zhí)行內(nèi)核124發(fā)出操作。
調(diào)度裝置118可提供將由執(zhí)行內(nèi)核124所執(zhí)行的操作信息的暫時儲存。如前所述,各調(diào)度裝置118可儲存尚未處理操作的操作信息。此外,各調(diào)度裝置可儲存用于已經(jīng)執(zhí)行但是也許仍將再發(fā)出的操作的操作信息。當可得到用于執(zhí)行的任何所需操作數(shù)的值時,則將操作發(fā)出至執(zhí)行內(nèi)核124。因此,執(zhí)行操作時的次序可與原始程序指令序列的次序不同。包含數(shù)據(jù)預(yù)測的操作可保持在調(diào)度裝置118中,直到他們變成非預(yù)測為止,這樣若數(shù)據(jù)預(yù)測不正確時可再將其發(fā)出。
在一個實施例中,各執(zhí)行內(nèi)核124可包括配置用來執(zhí)行加法和減法的整數(shù)算術(shù)運算,以及移位、旋轉(zhuǎn)、邏輯運算、和分支操作的組件。還可包含有浮點單元以容許浮點操作??膳渲靡粋€或多個執(zhí)行內(nèi)核124以執(zhí)行將由加載/儲存單元126所執(zhí)行的用于加載和儲存內(nèi)存操作的地址產(chǎn)生。
執(zhí)行內(nèi)核124也可將關(guān)于條件分支指令的執(zhí)行的信息提供給分支預(yù)測單元,而使得若分支為錯誤預(yù)測時,分支預(yù)測單元可清洗(flush)緊隨已進入指令處理管線的錯誤預(yù)測分支的指令,并將預(yù)取單元108改向。然后該改向的預(yù)取單元108可開始從指令高速緩存106或系統(tǒng)內(nèi)存200中取得更正指令組。在這些情況中,可舍棄掉在錯誤預(yù)測分支指令后在原始程序序列中所發(fā)生的指令結(jié)果,包括那些預(yù)測執(zhí)行和暫時儲存于寄存器堆116中的指令結(jié)果。若寄存器值被更新,則可將由執(zhí)行內(nèi)核124內(nèi)組件所產(chǎn)生的結(jié)果在結(jié)果總線130上輸出到寄存器堆116。若內(nèi)存位置的內(nèi)容被改變,則在執(zhí)行內(nèi)核124內(nèi)產(chǎn)生的結(jié)果可提供給加載/儲存單元126。
加載/儲存單元126提供執(zhí)行內(nèi)核124和數(shù)據(jù)高速緩存128之間的接口。在一個實施例中,加載/儲存單元126可配置具有加載/儲存緩沖器含數(shù)個尚未處理的加載或儲存的數(shù)據(jù)和地址信息的儲存位置。加載/儲存單元126也可執(zhí)行加載指令相對于尚未處理的儲存指令的依附性檢驗,以確保維持數(shù)據(jù)一致性。
數(shù)據(jù)高速緩存128為高速緩存,其提供用來暫時地儲存加載/儲存單元126和系統(tǒng)內(nèi)存200之間傳送的數(shù)據(jù)。如上述的指令高速緩存106一樣,數(shù)據(jù)高速緩存128可以各種特定的內(nèi)存配置實現(xiàn),包括集合相關(guān)的內(nèi)存配置。此外,在某些實施例中,數(shù)據(jù)高速緩存128和指令高速緩存106可實現(xiàn)于統(tǒng)一的高速緩存中。
堆棧區(qū)域由微處理器100所支持的一個邏輯寄存器(例如堆棧段寄存器,諸如在x86應(yīng)用中的SS)可識別在內(nèi)存200中堆棧區(qū)域的基地址。另外的邏輯寄存器(例如,ESP)可用作堆棧指針寄存器,以識別堆棧區(qū)域目前的頂端??赏ㄟ^結(jié)合堆棧區(qū)域的基地址與在堆棧指針寄存器中指定的堆棧內(nèi)的偏移而形成堆棧的目前頂端的地址??墒褂么说刂芬詫⒅低迫攵褩#亩褩H〕鲋?。
某些指令可使得一個或多個寄存器的內(nèi)容被“推”至堆棧。例如,在子程序調(diào)用期間,一個或多個寄存器的現(xiàn)有內(nèi)容可被推至內(nèi)存的堆棧區(qū)域。推入(push)指令修正堆棧指針,然后將數(shù)據(jù)值儲存至當前由該修正的堆棧指針所指向的堆棧的頂端。舉例而言,在x86的實施例中,推入指令可減少堆棧指針寄存器值,該減少的值對應(yīng)于將推到該堆棧的操作數(shù)大小的量,然后使用該修正值來將操作數(shù)值儲存到堆棧的頂端。同樣地,取出(pop)指令將從堆棧的頂端來的操作數(shù)加載至寄存器或內(nèi)存位置,然后修正堆棧指針,使得該堆棧指針指向堆棧的新的頂端,以有效地從該堆棧移去取出的操作數(shù)。當子程序完成時,子程序一開始儲存的值可從堆棧取出,并恢復(fù)到寄存器堆116內(nèi)的適當?shù)刂贰?br>
子程序可以是程序或中斷處理或異常處理程序。當執(zhí)行子程序調(diào)用指令時,一些寄存器值(例如,代碼段寄存器值和/或指令指針寄存器值指示返回地址)可以自動地儲存??蓛Υ嫫渌募拇嫫髦狄皂憫?yīng)在調(diào)用子程序內(nèi)或在子程序的開始處包括特定的儲存指令(例如,在PUSHEAX或MOV[EBP-2],EAX,則儲存在EAX中的值)。
返回指令可使得某些寄存器值自動地從堆棧取出。當在子程序中包括取出或儲存指令時,可從該堆棧取出其它寄存器值。在一些實施例中,微處理器可支持這樣的指令,當其執(zhí)行時,推入所有的邏輯寄存器值至堆棧,和/或從該堆棧取出所有的邏輯寄存器值。值得注意的是,中斷和異常也可引起寄存器值推入堆棧。
各子程序可以在堆棧區(qū)域內(nèi)有關(guān)聯(lián)的堆棧幀,其中傳遞至該子程序的各局部變量和參數(shù)被儲存。可使用基址指針寄存器(例如,EBP)作為堆棧幀指針,該堆棧幀指針指向當前子程序的堆棧幀的基地址。在子程序內(nèi)的指令可使用堆棧幀指針用于尋址模式中,該尋址模式用來存取傳遞至該子程序的參數(shù)和存取用于子程序內(nèi)的局部數(shù)值。在一個實施例中,可使用于堆棧幀指針的正偏移以存取參數(shù),而同時可使用堆棧幀指針的負偏移以存取局部變量。
因此,可使用堆棧指針寄存器或堆棧幀指針寄存器任何其中之一來指定堆棧相關(guān)尋址模式??墒褂枚褩V羔榿韺ぶ酚烧{(diào)用程序推至堆棧的參數(shù)值??墒褂枚褩羔榿韺ぶ反嫒∮谡{(diào)用子程序內(nèi)的參數(shù)值。當調(diào)用子程序時,可將堆棧幀指針寄存器(用于調(diào)用程序)的當前值儲存到堆棧的頂端。然后,子程序可將堆棧指針寄存器的當前值復(fù)制到堆棧幀指針寄存器中,建立指向子程序的堆棧幀的幀指針。當子程序完成時,可將調(diào)用程序的幀指針值再次儲存到幀指針寄存器。
根據(jù)堆棧相關(guān)尋址模式的數(shù)據(jù)預(yù)測可配置微處理器100以使用預(yù)測的數(shù)據(jù)值而實行數(shù)據(jù)預(yù)測執(zhí)行,該數(shù)據(jù)值使用各種操作的堆棧相關(guān)尋址模式(亦即,存取內(nèi)存的堆棧區(qū)的尋址模式)而預(yù)測。舉例而言,當操作分派至調(diào)度裝置118時,可通過比較操作的操作數(shù)的尋址模式與現(xiàn)存于堆棧文件中的尋址模式,而判別用于一個或多個操作的操作數(shù)的預(yù)測值。在一些實施例中,調(diào)度裝置118可使用預(yù)測值而發(fā)出執(zhí)行的操作。若稍后判定預(yù)測值為不正確,則可使用非預(yù)測值而再發(fā)出操作。
圖2A顯示分派單元104的一個實施例,該分派單元104可根據(jù)操作數(shù)的尋址模式而配置以判別預(yù)測的操作數(shù)值。在此實施例中,分派單元104包括寄存器圖134和堆棧文件132。如上所述,寄存器圖134可配置用來提供寄存器重命名。寄存器圖134可接受各指令(或操作)的各來源和目的操作數(shù)的邏輯寄存器名稱,并輸出最近指定到這些邏輯寄存器的物理寄存器的物理寄存器名稱。寄存器圖134可指定物理寄存器以儲存操作的結(jié)果。堆棧文件132包括堆棧文件控制器202和堆棧文件儲存器204。在一些實施例中可從數(shù)個寄存器、鎖存器、計數(shù)器、加法器/減法器、觸發(fā)器、或其它的時鐘控制的儲存器而執(zhí)行堆棧文件儲存器204。在替代實施例中,堆棧文件儲存器204可包括一個或多個RAM(隨機存取存儲器)單元。
堆棧文件儲存器204包括一個或多個登錄項220。各登錄項220可包括尋址模式206和與登錄項之尋址模式206相關(guān)聯(lián)的標記208。各標記可通過當數(shù)據(jù)值產(chǎn)生時指示該數(shù)據(jù)值將儲存于何處(例如,在重新排序緩沖器內(nèi)或是在寄存器堆116)而識別該數(shù)據(jù)值。舉例而言,如例示的實施例中所示,各標記可識別分配用來儲存該數(shù)據(jù)值的物理寄存器,由寄存器圖134所指示。各尋址模式可包括用來識別特定的堆棧位置的所有的或一些的信息。舉例而言,很快地參閱圖2B,該圖顯示了一個示例性尋址模式206。在此實施例中,尋址模式206包括邏輯寄存器名稱210和位移量214。邏輯寄存器名稱210是用來存取堆棧中數(shù)據(jù)的邏輯寄存器的名稱(例如,堆棧指針寄存器或堆棧幀指針寄存器)。位移量可指示加至當前儲存于邏輯寄存器中的地址的值,或從該邏輯寄存器中的地址減去的值。一些尋址模式206也可包括其它的信息,比如段邏輯寄存器的名稱或索引寄存器的名稱。
當指令或操作的尋址模式指定內(nèi)存的堆棧區(qū)內(nèi)的位置時,可分配在堆棧文件儲存器204內(nèi)的登錄項220。舉例而言,當一儲存操作將值(例如,從物理寄存器來的值)儲存至堆棧區(qū)內(nèi)的內(nèi)存位置時,則可分配一登錄項。推入指令為包含儲存操作的指令的例子。將內(nèi)存位置指定為目的地的移動指令是包含儲存操作的指令的另一個例子。堆棧文件控制器202可檢測將數(shù)據(jù)值儲存于內(nèi)存中堆棧區(qū)域內(nèi)的內(nèi)存位置的儲存操作(例如,根據(jù)操作的操作碼和/或?qū)ぶ纺J?。若檢測到的儲存操作的尋址模式尚未包括在堆棧文件登錄項220中,則堆棧文件控制器202可分配新的登錄項220以儲存該尋址模式。堆棧文件控制器也可儲存識別將由儲存操作所儲存的數(shù)據(jù)值的標記。舉例而言,若堆棧文件控制器202檢測指令PUSH EAX,則堆棧文件控制器可將用來識別當前指定給邏輯寄存器EAX的物理寄存器的標記儲存到響應(yīng)PUSH指令而分配的堆棧文件登錄項220中。堆棧文件控制器可儲存ESP+0(其中+0是以字節(jié)為單位的位移量)作為用于PUSH指令的尋址模式。若在堆棧文件儲存器204內(nèi)沒有閑置的登錄項用以分配,則堆棧文件控制器202可使用譬如LRU(最近最少使用)、FIFO(先進先出)、隨機位移等的位移方案來選擇登錄項加以覆蓋(overwrite)。
若操作的尋址模式已經(jīng)包括于堆棧文件登錄項中,則堆棧文件控制器202可用在該操作中所指出的標記來覆蓋儲存于匹配登錄項中的標記。舉例而言,若儲存操作的尋址模式在堆棧文件儲存器204中命中,則堆棧文件控制器202可用儲存操作的來源操作數(shù)的標記覆蓋儲存于匹配登錄項220中的標記。
堆棧文件控制器202可比較在未分派操作中指明的尋址模式與儲存于堆棧文件儲存器204中登錄項內(nèi)的尋址模式。若操作的尋址模式匹配儲存于堆棧文件儲存器204中登錄項中的尋址模式(例如,操作的堆棧相關(guān)位移在堆棧文件儲存器204中命中),則堆棧文件控制器202可使用或修正(如上所述)包含匹配尋址模式的登錄項。若正在處理把從堆棧來的值加載到寄存器中的操作,則堆棧文件控制器202可輸出儲存于堆棧文件儲存器204內(nèi)匹配登錄項220中的標記(例如,物理寄存器名稱)。此處把從堆棧來的值加載到寄存器中的操作稱之為加載操作。取出指令是包含加載操作指令的例子。值得注意的是,在執(zhí)行x86指令組的實施例中,MOV指令的使用可實行儲存操作和加載操作。
因為堆棧指針值常被修正以響應(yīng)數(shù)據(jù)儲存到堆?;驈亩褩R瞥龅牟僮?例如,推入和取出指令一般會更新堆棧指針值),所以可配置堆棧文件控制器202通過更新登錄項220以反映修正或通過修正輸入到堆棧文件132的尋址模式,和比較修正的尋址模式與在各堆棧文件登錄項220中的尋址模式,而補償對堆棧文件值的修正。
在一個實施例中,每次改變堆棧指針值時,堆棧文件控制器202可通過修正儲存在堆棧文件登錄項220中的相對位移,而補償對堆棧指針值的修正。舉例而言,堆棧文件132可包括減法器和/或加法器(或者,可用上升和/或下降計數(shù)器來取代),其配置成更新各堆棧文件登錄項220以響應(yīng)推入和取出指令。修正量可根據(jù)操作數(shù)的大小而定。例如,若推入指令推4字節(jié)的操作數(shù)到堆棧中,則堆棧文件控制器202可將各登錄項中的位移加4,該登錄項在其尋址模式206中指明堆棧指針。同樣地,若取出指令從堆棧移走2字節(jié)的操作數(shù),則堆棧文件控制器202可從包括在各尋址模式206中的相對位移減去2,該尋址模式206指明該堆棧指針。以此方式,各登錄項之尋址模式關(guān)于堆棧指針的當前位置正確。
在其它實施例中,堆棧文件控制器202可通過追蹤一個或多個尋址模式調(diào)整值,并在比較輸入尋址模式與包含在各堆棧文件登錄項220中的尋址模式之前,將這些調(diào)整值應(yīng)用于輸入到堆棧文件132的尋址模式,而補償堆棧指針值的修改。堆棧文件控制器可追蹤用于各邏輯寄存器(例如,在一些x86實施例中的ESP和EBP)的尋址模式調(diào)整值,該邏輯寄存器用來尋址位于內(nèi)存的堆棧區(qū)中的數(shù)據(jù)。舉例而言,堆棧文件控制器可包括加法器或計數(shù)器以儲存各尋址模式調(diào)整值。各加法器或計數(shù)器可關(guān)聯(lián)于用來尋址在堆棧區(qū)域中數(shù)據(jù)的其中一個邏輯寄存器。每次修改關(guān)聯(lián)于邏輯寄存器的值的操作被分派時,則為了反映該修正,尋址模式調(diào)整值可被增加、減少、加載新值、清除或無效。例如,每次推入指令被分派時,則可減少與堆棧指針寄存器相關(guān)聯(lián)的計數(shù)器的值(例如,響應(yīng)PUSH EBX,count=count-4)。
每次由堆棧文件處理新操作時,堆棧文件控制器202可將適當?shù)膶ぶ纺J秸{(diào)整值應(yīng)用到新操作的尋址模式,以為了判定尋址模式是否在該堆棧文件儲存器命中。舉例而言,若目前ESP相關(guān)尋址模式調(diào)整值為(-12)并接收到操作MOV EAX,[EBP+8],則堆棧文件控制器202可將尋址模式調(diào)整值加至尋址模式,獲得模式[ESP+8-12]或[ESP-4]。若修正的尋址模式[ESP-4]包含于堆棧文件登錄項220中,則堆棧文件控制器202可輸出包含于該堆棧文件登錄項中的物理寄存器識別符。
堆棧文件控制器202可包括一個或多個加法器,以將該尋址模式調(diào)整值應(yīng)用于輸入到堆棧文件的尋址模式。舉例而言,若每個時鐘周期可輸入兩個操作至堆棧文件,則堆棧文件控制器202可包括兩個加法器以應(yīng)用該尋址模式調(diào)整值。此實施例相對于通過修正包含于各堆棧文件登錄項中的相對位移而補償堆棧指針的改變的實施例,需要較少的加法器和/或計數(shù)器。此外,許多子程序包括執(zhí)行從堆棧指針減去相當大數(shù)值的操作,以分配大的局部堆棧幀。在在堆棧文件內(nèi)處理這些操作的實施例中,為了作大的偏移可能需要花費相當貴的加法器和/或計數(shù)器。在這些情況下,減少加法器和/或計數(shù)器的數(shù)目也許是重要的設(shè)計考慮。
在一些追蹤尋址模式調(diào)整值的實施例中,尋址模式調(diào)整值也可以用來調(diào)整將要儲存于堆棧文件登錄項中的尋址模式。舉例而言,考慮第一序列的操作MOV[ESP-4],EAX;MOV[ESP-8],EBX;MOV[ESP-12],ECX;ADD ESP,-12;接著是第二序列的操作MOV[ESP-4],ESI;MOV[ESP-8],EDI;MOV[ESP-12],EBP;ADD ESP,-12。這些序列可通過將一系列的PUSH指令譯碼成MOV和ADD操作,并在譯碼的操作上執(zhí)行固定值傳送而產(chǎn)生。當操作的第一序列通過堆棧文件控制器處理時,堆棧文件控制器202可分配或修正具有尋址模式[ESP-4]、[ESP-8]、和[ESP-12]的登錄項。為響應(yīng)第一序列中的加法運算,堆棧文件控制器202可更新堆棧指針尋址模式調(diào)整值從0至-12。當處理操作的第二序列時,在分配用于該操作的登錄所述之前,堆棧文件控制器202可將尋址模式調(diào)整值加至各操作的尋址模式。因此,分配于操作的第二序列的堆棧文件登錄項可具有尋址模式[ESP-16]、[ESP-20]、和[ESP-24]。為響應(yīng)在第二序列的加法運算,堆棧文件控制器202可更新該堆棧指針尋址調(diào)整值至-24。
若堆棧指針復(fù)制至堆棧幀指針(例如,MOV EBP,ESP)(例如,在子程序的開始),則堆棧文件控制器202可額外地補償此更新。例如,在一個實施例中,堆棧文件控制器202可更新各登錄項220,該登錄項220的尋址模式中指明堆棧幀指針寄存器,而不是識別堆棧幀指針寄存器。在一個x86實施例中,可將指定ESP的各登錄項更新成指定EBP,以響應(yīng)指令MOV EBP,ESP。同樣地,為響應(yīng)將堆棧幀指針復(fù)制至堆棧指針(例如,在子程序結(jié)束的MOV ESP,EBP)的操作時,堆棧文件控制器可將各登錄項更新成由原先識別堆棧幀指針改成識別堆棧指針?;蚩扇《?,可將任何指明這種復(fù)制操作的目標寄存器作為尋址模式一部分的登錄項變?yōu)闊o效。例如,尋址模式為EBP+4的登錄項可被無效,以響應(yīng)復(fù)制操作MOV EBP,ESP。
在另外的替代實施例中,當發(fā)生將堆棧幀指針復(fù)制至堆棧指針或反之將堆棧指針復(fù)制至堆棧幀指針的復(fù)制操作時,堆棧文件控制器202通過設(shè)定一個或多個標識符或其它的狀態(tài)指示符而補償。若使用一個標識符,則當檢測到一種類型的復(fù)制(例如,MOV EBP,ESP)時可設(shè)定該標識符,和當檢測到另一種類型的復(fù)制(例如,MOV ESP,EBP)時清除該標識符。若設(shè)定了標識符和狀態(tài)指示符以表示堆棧指針已經(jīng)復(fù)制到堆棧幀指針,則堆棧文件控制器202可使堆棧文件儲存器204內(nèi)指明堆棧指針寄存器的尋址模式等同于指明在未分派操作中堆棧幀指針的尋址模式(或反之,根據(jù)發(fā)生了哪種類型的復(fù)制),前提是各尋址模式中的位移相同。舉例而言,若堆棧文件登錄項的尋址模式206為ESP+8,且未分派加載操作的尋址模式為EBP+8,且若已設(shè)定了狀態(tài)指示符,則堆棧文件控制器202可判定未分派加載操作的尋址模式匹配包含在登錄項內(nèi)的尋址模式。因此,堆棧文件控制器202可將儲存于該登錄項中的標記輸出給未分派加載操作。
在堆棧文件控制器202追蹤尋址模式調(diào)整值的實施例中,堆棧文件控制器202可補償復(fù)制到堆棧幀指針的堆棧指針,通過將堆棧指針尋址模式調(diào)整值復(fù)制至堆棧幀指針尋址模式調(diào)整值。舉例而言,若操作MOV EBP,ESP被分派,則堆棧文件控制器202可將EBP尋址模式調(diào)整值設(shè)定等于目前ESP尋址模式調(diào)整值。堆棧文件控制器202可將EBP尋址模式調(diào)整值應(yīng)用至其后處理的指定EBP相關(guān)尋址模式的操作。當EBP尋址模式具有有效值,則堆棧文件控制器202可配置成比較輸入至堆棧文件132的操作中修正的EBP相關(guān)尋址模式與在堆棧文件登錄項中的ESP相關(guān)尋址模式。若堆棧文件包括的登錄項220的ESP相關(guān)尋址模式含有與修正的EBP相關(guān)尋址模式相同位移,則修正的EBP相關(guān)尋址模式可命中堆棧文件。在一些實施例中,當分派任何指定EBP為目標寄存器的任何其它操作(除了MOV EBP,ESP操作),EBP尋址模式調(diào)整值可被無效。當EBP尋址模式調(diào)整值為無效,則堆棧文件控制器202可能不處理具有EBP相關(guān)尋址模式的操作。在一些實施例中,堆棧文件控制器202也可(或替換性的)無效該EBP尋址模式調(diào)整值以響應(yīng)一返回指令。
若一操作調(diào)整堆棧指針的值(例如,ADD ESP,12或MOV ESP,EBP),則堆棧文件控制器202可更新堆棧文件指針尋址模式調(diào)整值的值。舉例而言,為響應(yīng)堆棧幀指針復(fù)制至堆棧指針的操作,堆棧文件控制器可將堆棧幀指針調(diào)整值復(fù)制到堆棧指針調(diào)整值,并無效該堆棧幀指針調(diào)整值。為響應(yīng)修正該堆棧指針值的操作(例如,ADD運算),堆棧文件控制器202可更新堆棧指針調(diào)整值以反映該修正。舉例而言,當分派了加法運算時,若使用操作ADD ESP,12來恢復(fù)先前的堆棧幀,堆棧文件控制器可加上12以修正該堆棧指針尋址模式調(diào)整值。
在一些實施例中,堆棧文件132可通過儲存用于各子程序的調(diào)整值而處理嵌套子程序,以及每當處理返回指令時,恢復(fù)對應(yīng)于先前堆棧幀的調(diào)整值。例如,每次處理調(diào)用指令,堆棧文件控制器202可在LIFO(后入先出)結(jié)構(gòu)中儲存目前的尋址模式調(diào)整值,類似于返回地址堆棧。當處理對應(yīng)的返回指令時,儲存的調(diào)整值可在該堆棧文件控制器202中從該結(jié)構(gòu)恢復(fù)取得。
在一些實施例中,尋址模式調(diào)整值可包括指示堆棧指針和堆棧幀指針之間偏差的偏移值。每當操作設(shè)定該兩個指針為相同值時,偏移值可重設(shè)至0。例如,當操作設(shè)定該堆棧指針值等于該堆棧幀指針值時(例如,MOV ESP,EBP),或相反情況時,偏移值可重設(shè)至0。當操作修正ESP和EBP的值時,即適當?shù)匦拚似浦?。舉例而言,為響應(yīng)推入指令(該推入指令減少ESP),可增加偏移值以反映ESP修正。為響應(yīng)從EBP減少某值的操作,可減少偏移值。為了反映正或負偏移值,而可加正負符號于該偏移值。當由堆棧文件處理操作時,可使用偏移值(和/或堆棧指針尋址模式調(diào)整值)以修正用來判定在堆棧文件儲存器204中命中和未命中的尋址模式,并在這些尋址模式儲存作為新的堆棧文件登錄項之前修正尋址模式。舉例而言,若具有EBP相關(guān)尋址模式的操作輸入至堆棧文件132,則在比較該尋址模式與這些儲存于堆棧文件登錄項220中的尋址模式之前,堆棧文件控制器202可將該ESP相關(guān)尋址模式調(diào)整值和EBP-ESP偏移值應(yīng)用到操作的尋址模式。在一些實施例中可提供該偏移值替代堆棧幀指針調(diào)整值或作為額外的值。
若加載操作的尋址模式在堆棧文件儲存器204命中,則可使用由堆棧文件控制器202輸出的標記來將由標記識別的值鏈接至加載操作的預(yù)測結(jié)果。舉例而言,在一些實施例中,當加載操作分派至調(diào)度裝置118時,由堆棧文件132輸出的標記也可提供給調(diào)度裝置(例如,作為預(yù)測的來源操作數(shù)標記)。調(diào)度裝置118可根據(jù)是否有該標記所識別之值(例如,在寄存器堆116中或在結(jié)果總線130上),而發(fā)出加載操作。執(zhí)行內(nèi)核124可執(zhí)行加載操作,而使得該鏈接值在結(jié)果總線130上廣播作為加載操作的預(yù)測結(jié)果(值得注意的是在一些實施例中,產(chǎn)生為加載結(jié)果的值其本身可不定標識符或識別為預(yù)測值)。如下所述,在其它實施例中,該值可通過在預(yù)測的映射中儲存標記而鏈接至加載操作的預(yù)測結(jié)果。
作為鏈接的結(jié)果,一旦取得由標記所識別的數(shù)據(jù)值時(例如,于寄存器堆116中或于結(jié)果總線130上),則可傳送該值作為加載操作的預(yù)測結(jié)果,以便使得相依操作可使用該預(yù)測結(jié)果執(zhí)行。在許多情況下,這可允許相依操作執(zhí)行使用該加載操作的預(yù)測結(jié)果比延遲相依操作的執(zhí)行直到可取得加載操作的非預(yù)測結(jié)果值為止的方式更快得以執(zhí)行。
在一些實施例中,可通過執(zhí)行加載操作而傳送數(shù)據(jù)值,而使得數(shù)據(jù)值輸出到結(jié)果總線130作為該加載操作的預(yù)測結(jié)果。舉例而言,在一個實施例中,通過輸出數(shù)據(jù)值和識別該數(shù)據(jù)值作為操作的結(jié)果的標記可在單次循環(huán)中執(zhí)行加載操作,以替代采用三次循環(huán)來執(zhí)行該非預(yù)測的加載操作(假設(shè)該操作命中該數(shù)據(jù)高速緩存128中)。在其它實施例中,當分派各相依操作時,可用更多間接的方法,通過由堆棧文件控制器202直接提供標記輸出到相依操作(具有由加載操作所產(chǎn)生的操作數(shù)的操作)而傳送數(shù)據(jù)值,作為預(yù)測操作數(shù)來源。傳送此數(shù)據(jù)值的裝置可包括一個或多個分派單元,配置用來修正加載操作以執(zhí)行作為預(yù)測寄存器至寄存器移動操作,或提供標記給相依操作以作為預(yù)測操作數(shù)來源標記;調(diào)度裝置,配置用來根據(jù)是否具有鏈接數(shù)據(jù)值而發(fā)出修正加載和或相依操作;以及執(zhí)行內(nèi)核,配置用來輸出鏈接數(shù)據(jù)值作為加載的結(jié)果,或使用該鏈接數(shù)據(jù)值以執(zhí)行該相依操作。
加載/儲存單元126(或其它在微處理器100內(nèi)用來驗證鏈接的裝置)可以驗證儲存在由堆棧文件132所識別的物理寄存器中的值至加載操作的預(yù)測結(jié)果的鏈接。若該鏈接不正確,則加載/儲存單元126可再發(fā)出加載操作和/或廣播在結(jié)果總線130上加載操作的正確結(jié)果。再發(fā)出加載可導致任何使用加載的預(yù)測結(jié)果而執(zhí)行的相依操作使用更新、非預(yù)測值而再發(fā)出和執(zhí)行?;蚩扇《?,若鏈接不正確,則處理器100可清洗在錯誤預(yù)測后發(fā)生的操作,并使用加載操作的正確結(jié)果再開始執(zhí)行這些操作。若登錄項被用來不正確地將各值鏈接至加載操作的預(yù)測結(jié)果,則堆棧文件控制器202可以使堆棧文件儲存器204內(nèi)的登錄項無效。
如所示,堆棧文件132追蹤在操作中的尋址模式,該操作存取在數(shù)據(jù)高速緩存128(或系統(tǒng)內(nèi)存200)中的數(shù)據(jù)。結(jié)果,堆棧文件132允許儲存在物理寄存器中的寄存器值被鏈接到儲存于內(nèi)存中特定地址的值。
值得注意的是,在一個實施例中,儲存在堆棧文件儲存器204內(nèi)的相對位移206可包括少于用來指明在位移字段214內(nèi)位移的所有的位。在另外的實施例中,堆棧文件控制器202可根據(jù)在該堆棧文件中的登錄項是否能夠儲存用于特定操作的所有的尋址信息,而選擇性地選擇是否將登錄項分配在堆棧文件儲存器204中。舉例而言,若在堆棧文件儲存器204中的各登錄項儲存達16位的位移信息,而一個特定的操作包括24位的位移信息,則堆棧文件控制器202可不分配堆棧文件登錄項給該操作。
為了進一步說明堆棧文件132的一個實施例的操作,假設(shè)由分派單元104所處理的指令序列包括圖2C中所示的指令。圖2C顯示可包括在示例性調(diào)用程序中的指令,以及可包括在示例性子程序SUB1中的指令。值得注意的是,圖2C中所顯示的這些指令,可由一個或多個在程序次序中的插入指令(圖中未顯示)所分隔。圖2D顯示堆棧的內(nèi)容和恰在子程序調(diào)用之前的堆棧文件的內(nèi)容。圖2E顯示堆棧的內(nèi)容和恰在子程序指令MOV[EBP-4],EBX之后的堆棧文件的內(nèi)容。值得注意的是,其它的實施例可以不同的方式處理這些指令(例如,為響應(yīng)修正的堆棧指針,一些實施例可更新尋址模式調(diào)整值以代替更新儲存在堆棧文件中的尋址模式)。
可使用在調(diào)用程序中的第一指令PUSH EBX,以在堆棧上儲存邏輯寄存器值(在此例子中是EBX),而使得該值不必受到子程序的修正。當用來執(zhí)行PUSH EBX的儲存操作的尋址模式被提供給堆棧文件132時,堆棧文件控制器202可檢驗堆棧文件儲存器204匹配的尋址模式。假定尋址模式在堆棧文件儲存器204中未命中,則堆棧文件控制器202可分配登錄項(可通過使用未分配的登錄項或通過覆蓋已經(jīng)分配的登錄項)以儲存推入指令所有的或一些的尋址模式和來源操作數(shù)的標記。在所示實施例中,標記為目前指定給EBX的物理寄存器的物理寄存器識別符(然而,為了容易參照,在圖2D和2E圖中的標記顯示為邏輯寄存器識別符)。堆棧文件控制器可將尋址模式儲存為ESP+0。因為尋址模式在堆棧文件儲存器中未命中,則堆棧文件控制器202可不輸出用于該尋址模式的標記。
可使用接著的兩個指令以儲存兩個參數(shù),即儲存在EDI和ESI的值到堆棧以供子程序使用。假設(shè)在調(diào)用程序中用于下兩個儲存操作的尋址模式(用來執(zhí)行PUSH EDI和PUSH ESI)也未在堆棧文件儲存器204中命中,則堆棧文件控制器202可分配另外兩個登錄項以儲存各儲存操作的這些標記和尋址模式。此外,每次檢測到推入指令(該推入指令將堆棧指針減值),該堆棧文件控制器可修正包含于現(xiàn)有的堆棧文件登錄項中的位移,該登錄項的尋址模式指明堆棧指針ESP。因此,當檢測到PUSH EDI時,堆棧文件控制器204可響應(yīng)PUSH EBX而將分配的登錄項位移增4(因此而使得登錄項的位移變成ESP+4)。同樣地,當檢測到PUSH ESI時,堆棧文件控制器204可增加為響應(yīng)PUSH EBX分配的登錄項中和為響應(yīng)PUSH EDI分配的登錄項中的位移。因此,為響應(yīng)PUSHEBX分配的登錄項中尋址模式可更新為指定ESP+8,且為響應(yīng)PUSH EDI分配的登錄項中尋址模式可更新為指定ESP+4。因此,分派包含在PUSH參數(shù)1指令中的操作后,包含于堆棧文件中的尋址模式可如圖2D中所示。
為響應(yīng)CALL SUB1指令,將指令指針推到堆棧上(用作為返回地址)。因為堆棧指針為了響應(yīng)CALL指令而修正,則可更新包括在堆棧文件中登錄項中的位移,該登錄項的尋址模式指定堆棧指針。舉例而言,響應(yīng)PUSH EBX而分配的包含于登錄項中尋址模式可被更新以指定ESP+12。CALL指令可包括更新堆棧文件的儲存操作。舉例而言,堆棧文件也可響應(yīng)CALL SUB1指令而分配一個堆棧文件登錄項(圖2D至圖2E中未顯示)(例如,具有等同于目前指定給EIP的物理寄存器的物理寄存器識別符的標記,和等同于ESP+0的尋址模式)。
在子程序SUB1內(nèi),指令PUSH EBP可導致將分配一個新的堆棧文件登錄項(具有標記等同于目前指定給EBP的物理寄存器的物理寄存器識別符,和ESP+0的尋址模式)。此外,因為該推入修改堆棧指針,則可修改包含于尋址模式內(nèi)指定該堆棧指針的位移(例如,可增加4)。
為了響應(yīng)指令MOV EBP,ESP,堆棧文件控制器可將具有尋址模式指定ESP的登錄項更新成指定EBP,如圖2E中所示。因此,尋址模式ESP+12可更新成指定EBP+12等等。
下一個指令SUB ESP,4分配空間在堆棧的上端以讓子程序儲存局部變量。因為在此例子中,堆棧文件目前追蹤EBP修正,堆棧文件對于此指令的響應(yīng)可為不分配或修改任何的登錄項。然而,值得注意的是在其它的譬如尋址模式調(diào)整值的這些實施例中,這一指令可能導致一個或多個尋址模式調(diào)整值和/或登錄項的尋址模式的更新,以反映ESP的改變。
當MOV EAX,[EBP+8]的尋址模式提供至堆棧文件時,來源操作數(shù)的尋址模式[EBP+8]匹配其中一個包含于堆棧文件中的尋址模式。因此,堆棧文件可輸出在匹配登錄項中的標記。此處,在匹配登錄項中的標記為物理寄存器的物理寄存器識別符,當分配該匹配登錄項時該物理寄存器指定給ESI??墒褂么藰擞浺詫⑽锢砑拇嫫髦械臄?shù)據(jù)值鏈接至MOV EAX,[EBP+8]的預(yù)測結(jié)果。同樣地,當MOV EBX,[EBP+12]的尋址模式提供給堆棧文件時,該尋址模式匹配現(xiàn)有的登錄項,該堆棧文件可輸出包含于匹配登錄項中的標記,在此例中,當該登錄項被分配時識別指定給EDI的物理寄存器該標記。
對于MOV[EBP-4],EBX的目的操作數(shù)的尋址模式也許在堆棧文件132中未命中。因此,堆棧文件可分配新的登錄項,其具有EBP-4尋址模式和目前指定給EBX的物理寄存器的物理寄存器識別符的標記。當包含于ADD EAX,[EBP-4]中的加載操作的來源操作數(shù)的尋址模式提供給堆棧文件時,尋址模式命中并輸出儲存在匹配登錄項中的標記(當建立匹配登錄項時,該標記識別指定給EBX的物理寄存器)。
指令MOV ESP,EBP復(fù)制堆棧幀指針值至堆棧指針。響應(yīng)此復(fù)制指令,堆棧文件控制器可使任何其尋址模式指定于ESP的堆棧文件登錄項無效。此外,堆棧文件控制器可將任何其尋址模式指定EBP堆棧文件登錄項更改成指定ESP。在一個實施例中,堆棧文件控制器可配置成使任何其尋址模式修改成指定負位移和堆棧指針的登錄項無效。例如,在這樣的實施例中,響應(yīng)MOV[EBP-4],EBX分配的登錄項若其尋址模式修改為指定EBP-4,則該登錄項可為無效。
指令POP EBP將堆棧幀指針值還原成之前在調(diào)用程序中的值。對于包含在POP指令的加載操作的來源操作數(shù)的尋址模式ESP,在該堆棧文件中命中(如上述將尋址模式EBP+0修改成指定ESP+0后),因此該堆棧文件可輸出包含于該登錄項中的標記。因為包含于POP指令中的加法運算在加載取出值后修改堆棧指針值,該堆棧文件控制器可接著修改指定堆棧指針的各尋址模式(例如,通過將包含于各尋址模式中的位移減去4)。
值得注意的是,在一些實施例中當一些諸如推入和取出指令包括諸如儲存或加載操作的幾種組成操作時,這些指令可分派和調(diào)度為單一指令。在另外的實施例中,可分別地分派和調(diào)度包含于這種指令中的一個或多個組成操作。舉例而言,對于取出指令,可使增量堆棧指針的操作以及將堆棧頂端的數(shù)據(jù)加載于特定的寄存器中的操作分別地分派與調(diào)度。
因為堆棧文件132被用作預(yù)測結(jié)構(gòu),則儲存于堆棧文件儲存器204中的信息的準確度對于微處理器100的正確操作而言可不重要(例如,在堆棧文件132中的錯誤預(yù)測也許不造成在微處理器100的輸出中的錯誤)。然而,為了增加由正確地將加載操作的預(yù)測結(jié)果鏈接至儲存于物理寄存器中的值所提供的好處,和/或減少對于錯誤預(yù)測鏈接所招致的任何性能損失,而希望改進堆棧文件132的準確度。在一些實施例中,可響應(yīng)窺視(snooping)取得寫入存取于特定地址的數(shù)據(jù)的另外裝置,而使堆棧文件儲存器204中的登錄項無效。同樣地,可響應(yīng)檢測的錯誤預(yù)測而使登錄項無效。一般而言,可監(jiān)視和使用諸如這些可影響在堆棧文件儲存器204中的登錄項的準確度的許多狀況,而判定何時將登錄項無效。然而,因為堆棧文件132為預(yù)測結(jié)構(gòu),而一些實施例并不執(zhí)行一些這些監(jiān)視方法(例如,若執(zhí)行某些監(jiān)視方法的額外的硬件成本超出堆棧文件準確度的可能的改進)。
值得注意的是堆棧文件132允許在操作流中彼此相隔頗遠的操作之間相互依存,以用來將值鏈接至預(yù)測結(jié)果。因此,堆棧文件可提供操作之間相依的經(jīng)歷,這些操作可由幾個插入的操作所分離。
圖3顯示將加載操作的預(yù)測結(jié)果鏈接至寄存器值的一個方法實施例的流程圖。在步驟301,標記與尋址模式相關(guān)聯(lián),指示二者可能識別相同的數(shù)據(jù)值。該標記和尋址模式皆指定用于第一加載或儲存操作。舉例而言,若第一操作為加載操作,則標記可識別分配以儲存加載結(jié)果的物理寄存器,并可使用尋址模式計算用于加載的地址。可替代的,若第一操作為儲存操作,則尋址模式可指示儲存的目的地的地址,并標記可識別由儲存操作所儲存的數(shù)據(jù)。在一些實施例中,可通過將二者儲存于堆棧文件中的登錄項中,而關(guān)聯(lián)該標記和尋址模式。值得注意的是,在與標記之相關(guān)聯(lián)前,可根據(jù)尋址模式調(diào)整值(例如,由追蹤對堆棧指針值的較早修正值而獲得)而修改尋址模式。
若一個加載操作的尋址模式匹配第一操作的尋址模式,則加載的預(yù)測結(jié)果可鏈接至由該第一操作指明的標記所識別的數(shù)據(jù)值,如步驟303至305所示。若加載操作的尋址模式不匹配第一操作的尋址模式,則可關(guān)聯(lián)加載的尋址模式與用于加載的目的地的標記(例如,通過在堆棧文件中的登錄項中儲存二者),如步驟303至311所示。再者,如在步驟313所示,通常可通過存取數(shù)據(jù)高速緩存而執(zhí)行加載。在一個實施例中,加載操作的尋址模式可與多于一個的先前操作的尋址模式相比較。例如,加載的尋址模式可與當前儲存于堆棧文件中的各尋址模式相比較。還值得注意的是,在一些實施例中,在與先前操作的尋址模式相比較之前,根據(jù)尋址模式調(diào)整值,而可修改加載操作的尋址模式。
如在步驟307所示,若加載的預(yù)測結(jié)果鏈接至由標記所識別的數(shù)據(jù)值,則該數(shù)據(jù)值可傳送至一個或多個相依操作以作為加載操作的預(yù)測結(jié)果。該數(shù)據(jù)值可經(jīng)由結(jié)果傳送或通過傳送相關(guān)操作可使用數(shù)據(jù)值作為預(yù)測的操作數(shù)來源的指示,這將在下文中作更詳細的說明。在一個實施例中,若數(shù)據(jù)值經(jīng)由結(jié)果傳送而傳送的話,則在產(chǎn)生該數(shù)據(jù)值的操作完全執(zhí)行的一周期后執(zhí)行相關(guān)操作。若經(jīng)由指示相關(guān)操作可使用物理寄存器作為預(yù)測操作數(shù)的來源而傳送該數(shù)據(jù)值的話,則一旦完成執(zhí)行產(chǎn)生該數(shù)據(jù)值的操作后,可立即發(fā)出相關(guān)操作。如在步驟309所示,在驗證預(yù)測結(jié)果之前,可傳送預(yù)測結(jié)果??蓚魉皖A(yù)測結(jié)果而不須存取數(shù)據(jù)高速緩存(亦即,預(yù)測結(jié)果比由存取數(shù)據(jù)高速緩存而產(chǎn)生非預(yù)測的結(jié)果更快傳送)。
若在步驟309驗證該預(yù)測結(jié)果是正確的,則可完成加載操作而不須執(zhí)行數(shù)據(jù)高速緩存存取。在其它的實施例中,可施行加載操作而不管該預(yù)測結(jié)果是否驗證為正確。若在步驟309判定預(yù)測結(jié)果為不正確的話,則可執(zhí)行數(shù)據(jù)高速緩存存取以便獲得正確的結(jié)果(圖中未顯示)。若如此,則任何使用加載預(yù)測結(jié)果所執(zhí)行的相關(guān)操作可使用加載的更正結(jié)果而再執(zhí)行。值得注意的是在一些情況下,在傳送鏈接數(shù)據(jù)值作為加載的預(yù)測結(jié)果(在步驟307)之前,可執(zhí)行驗證(在步驟309)。在這些情況下,可正常執(zhí)行加載,或若判定鏈接為正確的話,則可傳送數(shù)據(jù)值作為加載操作的非預(yù)測結(jié)果。
內(nèi)存文件圖4A顯示分派單元104的一個實施例,該分派單元104包括內(nèi)存文件136。內(nèi)存文件136包括內(nèi)存文件控制器402和內(nèi)存文件儲存器404。可使用內(nèi)存文件136根據(jù)尋址模式將儲存于物理寄存器中的寄存器值鏈接至儲存于內(nèi)存中特定地址的值。不像堆棧文件,可使用內(nèi)存文件將寄存器值鏈接至在內(nèi)存區(qū)域中而不在堆棧區(qū)域中的內(nèi)存值。在一些實施例中,內(nèi)存文件136也可如上述般執(zhí)行一些堆棧文件132的功能,以便額外地將寄存器值鏈接至內(nèi)存的堆棧區(qū)域內(nèi)的內(nèi)存值?;蚩扇《峙蓡卧?04也可包括分離的堆棧文件132以執(zhí)行這些功能。
內(nèi)存文件儲存器404包括一個或多個登錄項420。各登錄項420可包括尋址模式406和與登錄項的尋址模式相關(guān)聯(lián)的標記408。當產(chǎn)生標記時,各標記408可通過指示數(shù)據(jù)值將儲存于何處(例如,在重排序緩沖器內(nèi)或在寄存器堆116內(nèi))而指示出該數(shù)據(jù)值。例如,如說明的實施例中所示,各標記408可識別分配以儲存該數(shù)據(jù)值的物理寄存器,如由寄存器圖134所指示。各尋址模式406可包括所有或一些信息,用來指出操作中地址。儲存于內(nèi)存文件136中的尋址模式406可包括類似于儲存在堆棧文件132中的尋址模式206的信息。值得注意的是在一些實施例中,儲存于內(nèi)存文件儲存器404中的尋址模式406可包括少于用于指定操作的所有的尋址信息。在其它實施例中,內(nèi)存文件控制器402可根據(jù)在內(nèi)存文件中的登錄項是否可儲存所有用于特定操作的尋址信息,而選擇性地選擇是否在內(nèi)存文件儲存器404中分配登錄項。類似于堆棧文件儲存器204,內(nèi)存文件儲存器404可從數(shù)個寄存器、鎖存器、正反器、一個或多個隨機存取存儲器(RAM)單元等等而實現(xiàn)。
內(nèi)存文件控制器402可比較指明于非分派操作中的尋址模式與儲存于內(nèi)存文件儲存器404中登錄項420內(nèi)的尋址模式。若操作的尋址模式不匹配任何當前儲存于內(nèi)存文件儲存器404中登錄項內(nèi)的尋址模式406(亦即,操作的尋址模式在內(nèi)存文件儲存器中未命中),則內(nèi)存文件控制器402可在內(nèi)存文件儲存器404中分配新的登錄項420以儲存所有的或一些該操作的尋址模式。若沒有閑置的登錄項可在內(nèi)存文件儲存器404中分配,則內(nèi)存文件控制器402可使用諸如最少最近使用(LRU)、先進先出(FIFO)、隨機取代等等替代設(shè)計而選擇登錄項以覆蓋。除了在分配的登錄項內(nèi)儲存操作的尋址模式之外,內(nèi)存文件控制器402也可儲存標記408(例如,物理寄存器的名稱)以識別從內(nèi)存位置所加載或儲存于內(nèi)存位置的值,該內(nèi)存位置由操作的尋址模式識別。舉例而言,若處理從內(nèi)存加載數(shù)據(jù)的操作,則響應(yīng)該操作而分配的登錄項420可儲存物理寄存器的名稱,該物理寄存器配置成儲存加載操作的結(jié)果。若處理儲存數(shù)據(jù)于內(nèi)存位置的操作,則內(nèi)存文件控制器402可儲存寄存器的物理寄存器名稱,該寄存器儲存由內(nèi)存文件儲存器404中的儲存操作儲存的值。
若操作的尋址模式(或該模式的一部分)已經(jīng)儲存于內(nèi)存文件404的登錄項中(亦即,操作的尋址模式在內(nèi)存文件儲存器中命中),則內(nèi)存文件控制器402可使用或修改包含匹配的尋址模式的該登錄項。若加載操作被處理(將值從特定地址加載到一寄存器的操作),則內(nèi)存文件控制器402可輸出儲存于匹配的登錄項中的物理寄存器名稱。若儲存操作被處理(將從寄存器來的值儲存于特定地址的操作),則內(nèi)存文件控制器402可用儲存的數(shù)據(jù)的標記覆蓋儲存于匹配的登錄項中的該標記(例如,物理寄存器名稱)。
在一些實施例中,若分派指定特定邏輯寄存器(而不是用來儲存堆棧指針和堆棧幀指針的寄存器)為目的操作數(shù)的操作,則內(nèi)存文件控制器402可使包含該邏輯寄存器為其尋址模式406的一部分的任何登錄項420無效。因此,各操作的目標寄存器的邏輯寄存器名稱可輸入至內(nèi)存文件136以便執(zhí)行登錄項無效。此外,在一些實施例中,當窺視到另外的裝置取得在特定地址數(shù)據(jù)的寫入存取時,即令內(nèi)存文件儲存器404內(nèi)的登錄項無效。同樣地,當檢測到錯誤預(yù)測時可使登錄項無效。
若內(nèi)存文件136也分配用于操作的登錄項,該操作的尋址模式指定內(nèi)存的堆棧區(qū)域內(nèi)的位置,則內(nèi)存文件控制器402可包括其中一種上述的針對這些登錄項的堆棧文件補償機制?;蛘哌@些登錄項可維持在獨立的堆棧文件132內(nèi)(亦即,內(nèi)存文件136可不分配登錄項給各操作,該操作的尋址模式指定堆棧內(nèi)的位置)。一般而言,內(nèi)存文件控制器402可根據(jù)各尋址模式內(nèi)包含哪一個邏輯寄存器識別符而區(qū)別指定堆棧區(qū)域內(nèi)的位置的尋址模式與指定內(nèi)存內(nèi)其它地址的尋址模式之間的不同。因為內(nèi)存文件136為預(yù)測結(jié)構(gòu),則由使用這種機制以區(qū)別尋址模式所發(fā)生的可能不正確是可接受的。
在一些架構(gòu)中,用來指定堆棧幀指針的邏輯寄存器(例如,像是EBP基址指針寄存器)也可用作為通用寄存器。因此,包括這種雙目標寄存器的尋址模式406可指定在內(nèi)存的堆棧區(qū)域內(nèi)的位置,或不包括在堆棧區(qū)域內(nèi)的位置。為了區(qū)別這些尋址模式之間的不同,內(nèi)存文件控制器402可包括追蹤目前基址指針寄存器用作堆棧幀指針的可能性的機制。這種機制可包括這樣的標識符,該標識符當基址指針寄存器可能用作堆棧幀指針時予以設(shè)定,和當基址指針寄存器可能用作通用寄存器時予以清除。舉例而言,這種標識符可響應(yīng)CALL指令而設(shè)定,和響應(yīng)RET操作而清除。在其它的實施例中,這種標識符可響應(yīng)ENTER指令而設(shè)定,和響應(yīng)LEAVE指令而清除?;蚩扇《?,這種標識符可響應(yīng)MOV EBP,ESP操作的分派而設(shè)定,和響應(yīng)MOV ESP,EBP操作的分派而清除。當設(shè)定標識符時,內(nèi)存文件控制器402可禁止處理那些尋址模式包括基址指針寄存器的操作(在內(nèi)存文件136不包括堆棧文件功能的這些實施例中)。在這些情況下,堆棧文件132可替代處理這些操作,或完全不處理這些操作。或可取而代之,在內(nèi)存文件136也執(zhí)行堆棧文件功能的這些實施例中,當標識符設(shè)定時,內(nèi)存文件控制器402可用具有堆棧相關(guān)的尋址模式的方式處理這些輸入至內(nèi)存文件的操作。當已清除該標識符時,若這些操作輸入到內(nèi)存文件中,則可以具有非堆棧相關(guān)尋址模式的方式處理該些操作。
在一些實施例中,可通過內(nèi)存文件控制器402維持其它的信息,以便在嵌套子程序環(huán)境中更正確地處理雙目的邏輯寄存器。舉例而言,代替僅維持指示是否已經(jīng)處理CALL指令的標識符,內(nèi)存文件控制器402可追蹤“調(diào)用深度”。調(diào)用深度可指示現(xiàn)用嵌套層級,和用來判定將如何通過內(nèi)存文件控制器402來處理特定的基址指針寄存器尋址模式(或甚至是否該處理這種操作)。
在一個實施例中,內(nèi)存文件控制器402可包括追蹤調(diào)用深度的計數(shù)器。在一些實施例中調(diào)用深度計數(shù)器最初可設(shè)定為0。每次處理CALL指令后,內(nèi)存文件控制器402可增值調(diào)用深度計數(shù)器。每次處理RET指令后,內(nèi)存文件控制器402可減值調(diào)用深度計數(shù)器。當分配登錄項420時,若該登錄項的尋址模式406包括基礎(chǔ)指針邏輯寄存器識別符,則內(nèi)存文件控制器402可將當前調(diào)用深度附加到該登錄項。
當由內(nèi)存文件控制器402依序地處理其尋址模式包括基址指針寄存器的操作后,目前的調(diào)用深度可與儲存于各登錄項中的調(diào)用深度相比較。若這些調(diào)用深度并不匹配,則操作將在內(nèi)存文件136中不命中。例如,指令的序列將包括MOV EAX,[EBP+20]CALL<設(shè)定子程序EBP的新值的操作>
MOV EBX,[EBP+20]RET<恢復(fù)EBP的CALL之前的值>
MOV ECX,[EBP+20]可通過一個或多個插入指令而分隔各指令。由分派單元104處理此指令序列之前,在內(nèi)存文件控制器402中的調(diào)用深度可等于1。當處理MOV EAX,[EBP+20]操作時,內(nèi)存文件控制器402可用具有調(diào)用深度等于1的EBP+20來比較儲存在內(nèi)存文件儲存器404內(nèi)的其它登錄項中的尋址模式。假設(shè)這些尋址模式?jīng)]有一個匹配,則內(nèi)存文件控制器402可分配新的登錄項以儲存尋址模式EBP+20和識別EAX的標記。內(nèi)存文件控制器402可額外地將識別目前調(diào)用深度的值(例如,1)附加至新登錄項內(nèi)的調(diào)用深度字段。值得注意的是,在許多實施例中,內(nèi)存文件控制器402可僅附加此值至儲存包括基礎(chǔ)指針的尋址模式的登錄項。
響應(yīng)CALL操作的分派,內(nèi)存文件控制器402可更新目前的調(diào)用深度(例如,通過將目前的調(diào)用深度增加至2)。在調(diào)用子程序中的操作可更新堆棧幀指針EBP的值(例如,MOV EBP,ESP)。因為在登錄項中的調(diào)用深度不匹配當前調(diào)用深度,則由于EBP的更新,內(nèi)存文件控制器402并不會使該登錄項無效。再者,由于更新EBP,則MOV EBX,[EBP+20]將在內(nèi)存文件中不命中,因為目前具有尋址模式EBP+20的內(nèi)存文件登錄項是根據(jù)不同的EBP值。為了正確地判定MOV EBX,[EBP+20]的尋址模式不匹配已經(jīng)儲存于內(nèi)存文件儲存器中的尋址模式,則內(nèi)存文件控制器可比較當前調(diào)用深度(2)與存在的登錄項的調(diào)用深度(1)。因為目前的調(diào)用深度不同于存在的登錄項的調(diào)用深度,則內(nèi)存文件控制器可判定新的指令在內(nèi)存文件中未命中。因此,內(nèi)存文件控制器可分配登錄項以儲存EBP+20并將指示目前調(diào)用深度的值附加至該登錄項。值得注意的是,現(xiàn)在也許有(至少)兩個具有尋址模式EBP+20的內(nèi)存文件登錄項。當處理RET指令時,內(nèi)存文件控制器可減少目前的調(diào)用深度(例如,再至1)。因為目前的調(diào)用深度等于當之前登錄項分配至MOVEAX,[EBP+20]的調(diào)用深度,則MOV ECX,[EBP+20]可在內(nèi)存文件中命中。值得注意的是在一些實施例中,內(nèi)存文件控制器402可使登錄項無效,該登錄項的調(diào)用深度要大于目前的調(diào)用深度。
在一些包含堆棧文件132和內(nèi)存文件136的實施例中,可使用各種機制來判定哪一結(jié)構(gòu)針對特定的操作而分配登錄項。在一些實施例中,堆棧文件132和內(nèi)存文件136可針對具有堆棧相關(guān)尋址模式(例如,包括EBP或ESP的尋址模式)的操作而分配登錄項。在其它實施例中,可通過結(jié)合堆棧文件132和內(nèi)存文件136成為單一結(jié)構(gòu)而消除冗余。
在其它的替代實施例中,針對尋址模式指定堆棧指針的操作,內(nèi)存文件136可不分配登錄項并判定內(nèi)存文件命中和/或未命中。內(nèi)存文件136可選擇性地處理(或全然不處理)具有指定基址指針寄存器或其它雙目的邏輯寄存器的尋址模式的操作。在一個實施例中,若內(nèi)存文件136選擇性地處理其尋址模式指定基址指針寄存器的操作,則內(nèi)存文件136可如上述般根據(jù)在堆棧文件控制器202中的堆棧幀指針尋址模式調(diào)整值是否有效,或根據(jù)指示子程序是否正在處理的標識符,而判定是否處理特定的操作。當堆棧幀指針尋址模式調(diào)整值為有效時,堆棧文件132可處理包括基址指針寄存器的尋址模式。當堆棧幀指針尋址模式調(diào)整值為無效時,內(nèi)存文件136可處理這些操作。
若正在處理加載操作,且加載操作在內(nèi)存文件儲存器404中命中,則由內(nèi)存文件控制器402輸出的標記可用來將由標記識別的儲存值鏈接至加載操作的預(yù)測結(jié)果。舉例而言,在一些實施例中,當加載操作被分派至調(diào)度裝置118中,則由內(nèi)存文件136所輸出的標記也可提供給調(diào)度裝置(例如,作為預(yù)測來源操作數(shù)標記)。調(diào)度裝置118可針對該標記所識別的值的有效性(例如,在寄存器堆116中或在結(jié)果總線130上)而可發(fā)出操作。執(zhí)行內(nèi)核124可執(zhí)行加載操作,而使得鏈接值在結(jié)果總線130上廣播作為加載操作的預(yù)測結(jié)果(應(yīng)注意的是,在一些實施例中,產(chǎn)生作為加載結(jié)果的數(shù)據(jù)值其本身可不設(shè)為標識符,或否則識別為預(yù)測值)。如下所述,在其它的實施例中,數(shù)據(jù)值可通過在預(yù)測映射中儲存標記而鏈接至加載操作的預(yù)測結(jié)果。
為了進一步說明內(nèi)存文件136的操作,假設(shè)由分派單元104所處理的操作的序列包括下列的操作MOV EBX,[EDX+EAX-位移A](加載1(LOAD1))■■■■■MOV ECX,[EDX+EAX-位移A](加載2(LOAD2))■■■■■MOV[EDX+EAX-位移A],EAX(儲存1(STORE1))這些操作的每一個可通過在程序順序中插入一個或多個干預(yù)操作而分隔。如所示,這些三個操作的每一個包括相同的尋址模式EDX+EAX-位移A。
當LOAD1的尋址模式提供給內(nèi)存文件136時,內(nèi)存文件控制器402可檢驗內(nèi)存文件儲存器404的尋址模式是否匹配LOAD1的尋址模式。假設(shè)尋址模式在內(nèi)存文件儲存器404中未命中,則內(nèi)存文件控制器402可分配登錄項(通過使用未分配的登錄項或通過覆蓋已經(jīng)分配的登錄項)以儲存所有的或一些的加載操作的尋址模式,并加載操作的目標物理寄存器的物理寄存器名稱,如由寄存器圖134所提供。因為加載操作在內(nèi)存文件儲存器中未命中,則內(nèi)存文件控制器402可不輸出用于該加載操作的標記。
當接著由內(nèi)存文件136處理LOAD2時,其尋址模式可匹配分配給LOAD1的登錄項的尋址模式(假設(shè)LOAD1的登錄項尚未因為中間插入操作而被覆蓋)。響應(yīng)LOAD2的尋址模式在內(nèi)存文件儲存器404中命中,內(nèi)存文件控制器402可輸出分配以儲存LOAD1的結(jié)果的物理寄存器的物理寄存器名稱??墒褂梦锢砑拇嫫髅Q將由LOAD1加載的數(shù)據(jù)值鏈接至LOAD2的預(yù)測結(jié)果。
當通過內(nèi)存文件136而處理STORE1時,其尋址模式可在分配給LOAD1的登錄項中命中(再假設(shè)沒有插入操作造成此登錄項被覆蓋)。然而,替代輸出分配以儲存該LOAD1結(jié)果的實際登錄的實際登錄項名稱(如對于LOAD2所施行的),內(nèi)存文件控制器402可用包含由STORE1所儲存的數(shù)據(jù)的寄存器的物理寄存器名稱覆蓋儲存在該登錄項中的實際登錄項名稱。因此,當后續(xù)的加載操作在此登錄項中命中時,內(nèi)存文件控制器402將輸出STORE1的來源物理寄存器的物理寄存器名稱,以代替輸出LOAD1的目標寄存器的物理寄存器名稱。
如所示,堆棧文件132和/或內(nèi)存文件136追蹤在數(shù)據(jù)高速緩存128(或系統(tǒng)內(nèi)存200)中存取數(shù)據(jù)的操作中的尋址模式。結(jié)果,儲存于物理寄存器中的寄存器值可鏈接到儲存于內(nèi)存中特定地址的值。
具有預(yù)測來源的操作的調(diào)度各種實施例可用許多不同的方法鏈接加載操作的預(yù)測結(jié)果與寄存器數(shù)據(jù)值。在一些實施例中,可通過識別用于操作數(shù)的兩個來源而鏈接各值預(yù)測來源與非預(yù)測來源。預(yù)測來源可以是鏈接的數(shù)據(jù)值??商峁╊A(yù)測來源用于加載操作,以指示鏈接到加載的預(yù)測結(jié)果的數(shù)據(jù)值。在一些實施例中,也可提供預(yù)測來源用于根據(jù)這種加載操作的操作。因此,一些操作數(shù)可具有兩個標記一個識別預(yù)測的來源,和一個識別非預(yù)測的來源。在這些實施例中,各調(diào)度裝置118可提供標記儲存器用于預(yù)測操作數(shù)和非預(yù)測操作數(shù),如圖5中所示。
圖5顯示調(diào)度裝置118的一個實施例,該調(diào)度裝置118可包含于微處理器中。在所示實施例中,調(diào)度裝置118包括調(diào)度裝置控制器502和操作儲存器504。響應(yīng)分派單元分派操作,調(diào)度裝置控制器502可分配操作儲存器504內(nèi)的登錄項以儲存對應(yīng)于該操作的信息。舉例而言,在操作儲存器504內(nèi)的登錄項522可包括操作碼字段510、一個或多個操作數(shù)字段、和結(jié)果字段516。結(jié)果字段516可儲存識別物理寄存器的標記,其中將儲存該登錄項的操作的結(jié)果。當發(fā)出操作時,此標記可傳送至在其中一個或多個標記總線520上的各調(diào)度裝置118。各調(diào)度裝置可比較傳送于標記總線520上的各標記與未處理的操作的操作數(shù)標記(如下所述,預(yù)測的和非預(yù)測的),以便判定何時將可取得未處理操作的操作數(shù)。因此,當標記總線520上出現(xiàn)操作的來源操作數(shù)標記時發(fā)出(或注明為準備發(fā)出)該操作。
各操作數(shù)字段可包括用于識別預(yù)測操作數(shù)來源的預(yù)測標記和識別非預(yù)測操作數(shù)來源的非預(yù)測標記的儲存器。在所示的登錄項522中,操作數(shù)1的兩個來源由非預(yù)測標記512和預(yù)測標記514所識別。調(diào)度裝置118可配置成當有一個或多個指示可得到操作的操作數(shù)則發(fā)出操作。若可從預(yù)測的來源和非預(yù)測的來源其中任何一者取得操作數(shù),則代表可得到該操作數(shù)。若從預(yù)測的來源和非預(yù)測的來源得到該操作數(shù),則可使用從非預(yù)測的來源取得的值來執(zhí)行該操作。在一些實施例中,調(diào)度裝置118可對具有非預(yù)測的來源操作,較之僅具有預(yù)測的來源的操作,給予發(fā)出操作較高的優(yōu)先權(quán)。
值得注意的是一個操作可包括一些具有預(yù)測的來源的操作數(shù),和其它的不具有預(yù)測的來源的操作數(shù)。還應(yīng)注意的是,同一個來源對于一個操作也許是預(yù)測的來源,而對于另一個操作也許是非預(yù)測的來源。在一些實施例中,當執(zhí)行操作時,對于各操作數(shù)也許僅可讀取一個數(shù)據(jù)值(例如,執(zhí)行內(nèi)核124可讀取預(yù)測的操作數(shù)來源或非預(yù)測的操作數(shù)來源,但不能同時讀取二者)。如此可使得操作不需增加額外的端口至寄存器堆116中。在一些實施例中,預(yù)測的來源和實際來源可儲存于相同的儲存位置(例如,在寄存器堆116內(nèi)),且預(yù)測的來源可不被定標識符或相反識別為預(yù)測來源。
在許多實施例中,在這些操作已發(fā)出至執(zhí)行內(nèi)核124后,調(diào)度裝置118可配置成仍保持分配給各操作的登錄項。當根據(jù)是否可得一個或多個預(yù)測操作數(shù),而通過調(diào)度裝置118發(fā)出操作時,則該調(diào)度裝置可保持分配至該操作的登錄項522而使得當若該預(yù)測鏈接不正確時能再發(fā)出操作。在一些實施例中,可配置加載/儲存單元以驗證當預(yù)測的加載結(jié)果鏈接至儲存于物理寄存器中的數(shù)據(jù)值時,所發(fā)生的預(yù)測鏈接。若該鏈接為正確,則加載儲存單元可配置成不廣播非預(yù)測的加載結(jié)果,因為已經(jīng)可經(jīng)由鏈接而取得正確結(jié)果。假如如此,若識別用于該操作的非預(yù)測操作數(shù)來源的標記廣播于結(jié)果總線130上,則調(diào)度裝置118可配置成再發(fā)出操作。
可選擇的,加載/儲存單元可廣播該儲存的結(jié)果與一額外狀態(tài)位,該額外狀態(tài)位屏蔽廣播,或指示預(yù)測的鏈接為正確而不必再發(fā)出該加載。然而,若預(yù)測的鏈接不正確,則加載/儲存單元可執(zhí)行數(shù)據(jù)高速緩存和/或內(nèi)存存取,以便獲得用于加載的正確的結(jié)果,并廣播該加載結(jié)果。在一些實施例中,總是廣播結(jié)果,額外的狀態(tài)位可指示預(yù)測的鏈接不正確。因此,在許多實施例中,在微處理器中已經(jīng)取得的一些標記和結(jié)果總線可用來指示預(yù)測的鏈接為不正確。在其它的實施例中,可以執(zhí)行其它替代的指示機制(例如,使用分離的結(jié)果總線130和/或結(jié)果標記總線520以指示錯誤預(yù)測)。
圖6顯示具有預(yù)測的和非預(yù)測的操作數(shù)來源而發(fā)出和再發(fā)出操作的一個方法實施例的流程圖。若操作的預(yù)測操作數(shù)來源為有效,則可發(fā)出操作,如步驟801至803所示。當數(shù)據(jù)值存在于寄存器堆內(nèi)的特定寄存器中,或當數(shù)據(jù)值輸出到結(jié)果總線上時,則可得到操作的預(yù)測操作數(shù)來源。值得注意的是在一些情況中,可在預(yù)測操作數(shù)來源之前先得到用于相同操作數(shù)的操作的非預(yù)測操作數(shù)來源。在這些情況下,在預(yù)測的操作數(shù)來源得到前,可以發(fā)出操作。在某些實施例中,之后得到預(yù)測來源并不觸發(fā)操作的再發(fā)出。
可使用由預(yù)測的操作數(shù)來源所提供的數(shù)據(jù)值來執(zhí)行操作的發(fā)出,如步驟805所指示,并可廣播操作的結(jié)果,如步驟805所指示。廣播該操作的結(jié)果使得可執(zhí)行相依操作。
若在某些稍后時間判定預(yù)測的來源為不正確(例如,由預(yù)測的來源和非預(yù)測的來源所提供的數(shù)據(jù)值并不相同,或用來產(chǎn)生預(yù)測的來源的標記的預(yù)測的鏈接為不正確),則非預(yù)測的來源的標記可廣播作為預(yù)測的來源值為不正確的指示。廣播非預(yù)測的來源的標記包含廣播該標記使調(diào)度裝置以再發(fā)出操作作為響應(yīng)。舉例而言,在一些實施例中,若標記被廣播且與該標記相關(guān)聯(lián)的狀態(tài)標識符設(shè)定于某一值時,則調(diào)度裝置可響應(yīng),而在其它的實施例中,也許沒有關(guān)聯(lián)的狀態(tài)標識符,且調(diào)度裝置可配置成只要廣播非預(yù)測標記時即再發(fā)出操作。
預(yù)測的寄存器7顯示分派單元104的另一個實施例,該分派單元104可包含于微處理器100中。在此實施例中,分派單元104包括寄存器圖134、堆棧文件132(和/或內(nèi)存文件136,圖中未顯示)和預(yù)測的寄存器圖800。類似于寄存器圖134,預(yù)測的寄存器圖800可將邏輯寄存器名稱轉(zhuǎn)譯至物理寄存器名稱。然而,預(yù)測的寄存器圖800可響應(yīng)堆棧文件132(和/或內(nèi)存文件136)將儲存于物理寄存器中的值鏈接至加載操作的預(yù)測結(jié)果,而預(yù)測地將邏輯寄存器名稱映射至物理寄存器名稱。預(yù)測的寄存器圖800可允許用于操作的預(yù)測的操作數(shù)值,該操作并不包括鏈接到寄存器數(shù)據(jù)值的尋址模式。舉例而言,若邏輯寄存器EAX具有有效的預(yù)測映射,則具有EAX作為來源操作數(shù)的操作可具有兩個來源標記由寄存器圖134所提供的非預(yù)測標記和由預(yù)測的寄存器圖800所提供的預(yù)測標記。由于一旦得到操作的預(yù)測來源即可發(fā)出該操作,因此預(yù)測的寄存器圖800可將數(shù)據(jù)消耗器(consumer)經(jīng)由預(yù)測操作數(shù)標記直接鏈接到數(shù)據(jù)產(chǎn)生器,旁通了任何插入加載和儲存。值得注意的是,在一些實施例中,預(yù)測的映射可儲存不是物理寄存器名稱的標記(例如,在具有包含了預(yù)測寄存器狀態(tài)的儲存器的重排序緩沖器的各實施例中)。
預(yù)測的寄存器圖800包括預(yù)測的寄存器圖控制器802和預(yù)測的寄存器圖儲存器804。預(yù)測的寄存器圖儲存器可包括一個或多個的登錄項820。各登錄項820可與特定的邏輯寄存器相關(guān)聯(lián),并指示目前該邏輯寄存器預(yù)測映射的物理寄存器的物理寄存器識別符812。各預(yù)測的寄存器圖登錄項820也可包括一個關(guān)于當前使用的登錄項是否為有效或無效的指示(圖中未顯示)。在一個實施例中,預(yù)測的寄存器圖儲存器804可包括用于各邏輯寄存器的一個登錄項。在其它的實施例中,預(yù)測的寄存器圖儲存器804可包括較邏輯寄存器數(shù)目要少的登錄項。在這些實施例中,各登錄項820可包括一個目前登錄項對應(yīng)的邏輯寄存器的指示。
預(yù)測的寄存器圖控制器802可配置成響應(yīng)加載操作的預(yù)測結(jié)果已與由特定的物理寄存器名稱所識別的數(shù)據(jù)值鏈接的指示,而更新登錄項820。在所例示的實施例中,此指示由堆棧文件132所提供。在其它的實施例中,這些指示也可或者替代地由內(nèi)存文件136所提供。欲更新的登錄項820是作為加載操作目的地的邏輯寄存器的登錄項??筛碌卿涰椧园ㄓ啥褩N募?32所輸出針對該加載操作的該物理寄存器識別符。
在一些實施例中,在與將各操作提供給寄存器圖134的期間,各操作可提供給預(yù)測的寄存器圖800。寄存器圖134執(zhí)行操作的非預(yù)測寄存器更名,預(yù)測的寄存器圖800可指示任何作為儲存操作的預(yù)測來源操作數(shù)之一的邏輯寄存器是否鏈接至特定的物理寄存器。若寄存器圖儲存器804中有一個邏輯寄存器來源的有效登錄,則預(yù)測的寄存器圖控制器802可輸出儲存于該邏輯寄存器的登錄項中的物理寄存器名稱。當該操作分派至調(diào)度裝置118時,分派單元104可輸出此預(yù)測的物理寄存器名稱作為預(yù)測的來源。因此,若將ADD運算提供給預(yù)測的寄存器圖800,且其中一個ADD的來源具有在預(yù)測的寄存器圖儲存器804中的有效的登錄項,則在該登錄項中的物理寄存器識別的標記可提供作為至調(diào)度裝置118的預(yù)測的來源操作數(shù)標記??膳渲谜{(diào)度裝置以如上述般儲存預(yù)測的和非預(yù)測的操作數(shù)標記,并在一些實施例中可配置成響應(yīng)非預(yù)測的標記在結(jié)果總線上廣播而再發(fā)出操作(如果已經(jīng)發(fā)出了操作)。
可響應(yīng)將修改對于特定的邏輯寄存器的數(shù)據(jù)值的指示,而使在預(yù)測映射內(nèi)的登錄項無效。舉例而言,若通過分派單元104而處理操作ADD EAX,ECX,則預(yù)測的寄存器圖控制器802可使當前指定給EAX的預(yù)測映射登錄項無效,因為ADD運算將修改該寄存器值。
一般而言,每當一個操作的預(yù)測的結(jié)果鏈接到寄存器數(shù)據(jù)值時,則預(yù)測的操作數(shù)標記可提供給調(diào)度裝置118。在一些實施例中,堆棧文件132和/或內(nèi)存文件136以及追蹤經(jīng)過幾個循環(huán)的依附性的結(jié)構(gòu)(例如,如于下文中所描述的預(yù)測的寄存器圖800)可被用來將預(yù)測結(jié)果鏈接至寄存器值。例如,分派單元104可產(chǎn)生用于操作的預(yù)測標記,以響應(yīng)堆棧文件132或內(nèi)存文件136識別一鏈接。在一些實施例中,可無須使用這種預(yù)測映射來產(chǎn)生預(yù)測標記。例如,一指令序列可包括ADD EBX,EBX(相加1(ADD1))MOV[尋址模式A],EBX(儲存1(STORE1))ADD[尋址模式A],ECX(相加2(ADD2))這些指令可以為連續(xù)指令(例如,他們可以以程序次序而彼此直接相隨)。這些指令可以分離成下列的組成操作(將邏輯地址轉(zhuǎn)譯成實際地址而顯示),且在執(zhí)行內(nèi)核124內(nèi)執(zhí)行ADD PR2,PR2,PR1(ADD1)MOV[尋址模式A],PR2(STORE1)MOV PR3,[尋址模式A](ADD2的加載)ADD PR4,PR3,PR5(ADD2的相加)MOV[尋址模式A],PR4(ADD2的儲存)在分配ADD2的組成的加載、相加和儲存操作之前,分配單元104可檢測由任何序列組成的操作之間是否有任何的依附性以允許預(yù)測的結(jié)果的鏈接。此外,由STORE1所儲存的數(shù)據(jù)可以鏈接至加載的預(yù)測結(jié)果(例如,通過堆棧文件)。因為沒有插入操作,則分派單元可在同一個分派循環(huán)中具有所有需要用來檢測加載操作與相加操作(由相同的指令導得的兩個操作)之間依附性的所有的信息。根據(jù)這兩個依附性,分配單元104可將由STORE1,PR2所儲存的數(shù)據(jù)的標記鏈接至執(zhí)行作為ADD2部分的加載操作的預(yù)測結(jié)果。此預(yù)測的鏈接可接著允許分派單元將執(zhí)行作為ADD2部分的加法運算的來源鏈接至儲存于PR2中的值。因此,分配單元104可輸出指示PR2可預(yù)測地用作加法操作的操作數(shù)的其中一個來源,而PR3為該操作數(shù)的非預(yù)測的來源。因此,在一個實施例中,可通過分派單元而輸出的操作和操作數(shù)識別符如下ADD PR2,PR2,PR1(ADD1)
MOV[尋址模式A],PR2(STORE1)MOV PR3,[尋址模式A](ADD2的加載)ADD PR4,PR2*,PR3,PR5(ADD2的相加,其中PR2*為用于ECX的預(yù)測的來源,且PR3為用于ECX的非預(yù)測的來源)MOV[尋址模式A],PR4(ADD2的儲存)在其它實施例中,分配單元104可不配置成為根據(jù)加載操作的操作識別預(yù)測的來源操作數(shù)。取而代之,如圖8中所示,分配單元104可包括操作轉(zhuǎn)換器108,配置將加載操作轉(zhuǎn)換成為一個或多個的包括寄存器至寄存器移動操作的操作,以便將預(yù)測的加載結(jié)果提供給依附的操作。執(zhí)行加載操作的轉(zhuǎn)換以響應(yīng)鏈接存在于加載操作的預(yù)測結(jié)果和由特定的物理寄存器名稱所識別的數(shù)據(jù)值之間的指示。在一些實施例中,此指示由鏈接檢測器182所提供,該鏈接檢測器182可包括堆棧文件132和/或內(nèi)存文件136。在其它的實施例中,鏈接檢測器182可包括配置以響應(yīng)諸如條件移動操作而鏈接數(shù)據(jù)值的邏輯,如上所述。
在一個實施例中,操作轉(zhuǎn)換器180可接收用于操作的輸入運算碼,以及是否檢測到寄存器值和操作的預(yù)測的結(jié)果之間的鏈接的指示。若該操作為加載并已檢測到預(yù)測的鏈接,則操作轉(zhuǎn)換器180可輸出一個寄存器至寄存器移動操作的運算碼。分派單元104可使用通過鏈接檢測單元182輸出的標記作為寄存器至寄存器移動的來源操作數(shù)標記,而分派寄存器至寄存器移動操作。
在一些實施例中,可配置操作轉(zhuǎn)換器180以分派所得的寄存器至寄存器移動,而使得調(diào)度裝置在寄存器至寄存器移動操作的登錄項中儲存所需用于寄存器至寄存器移動和原來加載操作的操作數(shù)標記。這使得若檢測到寄存器至寄存器移動操作的預(yù)測結(jié)果為不正確的話,則可再發(fā)出操作作為原來的加載操作。為了執(zhí)行此操作,額外的來源操作數(shù)可加至從修改的加載操作獲得的各寄存器至寄存器移動操作(或者,在一替代實施例中,可修改已經(jīng)存在的來源操作數(shù)以執(zhí)行此操作)。在一些實施例中,可通過執(zhí)行原始加載地址的計算和/或比較鏈接的數(shù)據(jù)值與實際加載結(jié)果數(shù)據(jù)值而驗證寄存器至寄存器移動操作的預(yù)測結(jié)果。若該預(yù)測結(jié)果為不正確,則可存取該數(shù)據(jù)高速緩存以便獲得正確的加載結(jié)果。再廣播更正的加載結(jié)果可引起調(diào)度裝置118再發(fā)出任何使用不正確值所執(zhí)行的依附操作。
在一些實施例中,可配置操作轉(zhuǎn)換器180以將加載操作轉(zhuǎn)換成雙重性操作。如同加載操作,此雙重性操作可包含地址計算和數(shù)據(jù)移動。而不同于加載操作,由雙重性操作所起始的數(shù)據(jù)移動為寄存器至寄存器移動。再者,由雙重性操作所起始的數(shù)據(jù)移動可在地址計算已經(jīng)完成之前發(fā)生??墒褂玫刂酚嬎阋则炞C預(yù)測的鏈接是否為正確。若預(yù)測的鏈接為不正確,則可再發(fā)出雙目的操作作為正常的加載操作,和當完成數(shù)據(jù)高速緩存存取時,其結(jié)果可再廣播至依附的操作。
下列的例子顯示不同的實施例如何可以轉(zhuǎn)換此示例性序列操作ADD PR2,PR1,PR1(ADD1)STORE[尋址模式A],PR2(STORE1)LOAD PR3,[尋址模式A](LOAD1)ADD PR4,PR3,PR3(ADD2)在此序列中,特定的操作可由一個或多個插入操作而分離。然而,假設(shè)沒有插入操作出現(xiàn)來修改用于尋址模式A的值,或者修改儲存在從尋址模式A所計算的地址和在PR2中的數(shù)據(jù)值,則可檢測到儲存于PR2中的數(shù)據(jù)值和從尋址模式A所計算的地址之間的預(yù)測的鏈接。
在一個實施例中,為響應(yīng)通過預(yù)測鏈接檢測器182的預(yù)測鏈接檢測,操作轉(zhuǎn)換器180可轉(zhuǎn)換LOAD1成為雙目的移動操作MOV PR3,PR2。除了指明寄存器來源和目的地以外,此雙目的移動操作也可指明尋址模式A,而使得可執(zhí)行對于LOAD1的地址計算。然而,一旦可得到ECX后,即可立即發(fā)出雙目的移動操作的移動部分。一旦廣播雙部分操作的移動部分的結(jié)果后,可使用移動操作的預(yù)測結(jié)果作為操作數(shù)而發(fā)出ADD2。當執(zhí)行地址計算時,可驗證預(yù)測鏈接。若該預(yù)測的鏈接為不正確,則加載/儲存單元可提供指示至調(diào)度裝置,該指示使得調(diào)度裝置再發(fā)出雙目的移動操作以作為加載操作??蓮V播加載操作的結(jié)果,而導致再發(fā)出諸如ADD2的任何已使用移動預(yù)測結(jié)果執(zhí)行的依附操作。值得注意的是,可使用單一調(diào)度裝置登錄項而調(diào)度此雙目的操作,且調(diào)度裝置118可選擇雙目的操作用于發(fā)出二次一次用于加載的地址計算和一次用于寄存器至寄存器移動。
在一個替代實施例中,操作轉(zhuǎn)換器180可響應(yīng)檢測到的預(yù)測鏈接,而將LOAD1轉(zhuǎn)換成為兩個鏈接的操作,LOAD PR3,[尋址模式A]和MOVPR3,PR2。不像先前包含雙目的操作的例子,這些鏈接操作可各自取得在調(diào)度裝置118中的登錄項,以代替共享單一調(diào)度裝置登錄項。當寄存器至寄存器移動操作發(fā)出時,諸如ADD2的依附操作可使用PR3的預(yù)測值作為操作數(shù)值而發(fā)出??蓸擞汱OAD操作作為特定類型的加載操作,而使得若決定該預(yù)測的鏈接正確時,不廣播該加載的結(jié)果標記(或者,廣播該移動的結(jié)果為正確,和依附操作不應(yīng)再發(fā)出的指示)。同時,若加載和移動操作在同一循環(huán)中廣播他們的結(jié)果,則可提供一指示而使得加載結(jié)果用于依附操作而不是移動的結(jié)果。在一些實施例中,這種情況可通過加上額外的位至微處理器100內(nèi)的各標記總線而發(fā)生,該位指示調(diào)度裝置將對哪一個標記響應(yīng)。若預(yù)測鏈接為不正確(例如,當通過加載的結(jié)果標記的廣播所指示),則可取消移動操作(例如,調(diào)度該移動操作的調(diào)度裝置118可解除分配當前用于分配該寄存器至寄存器移動的該調(diào)度裝置登錄項,而使得該操作不能再發(fā)出)。在許多實施例中,可配置調(diào)度裝置再發(fā)出任何使用預(yù)測加載結(jié)果執(zhí)行的依附操作,若加載結(jié)果標記再出現(xiàn)于結(jié)果總線上。在一個替代實施例中,可配置調(diào)度裝置118成同時發(fā)出兩個鏈接的操作。在這樣的實施例中,兩個鏈接的操作可使用讀取端口進入物理寄存器堆,該物理寄存器堆否則將由原來的未修正的LOAD1操作所使用。
圖9顯示轉(zhuǎn)換加載操作以包括預(yù)測的寄存器至寄存器移動操作的一個方法的實施例。如圖中所示,在步驟1401,若檢測到由特定標記所識別的寄存器數(shù)據(jù)值與加載操作的預(yù)測結(jié)果之間的鏈接(例如,通過堆棧文件或內(nèi)存文件),則可修改加載操作以包括具有來源操作數(shù)標記等于鏈接到預(yù)測加載結(jié)果的數(shù)據(jù)值的標記的寄存器至寄存器移動操作,如在步驟1403所示。在步驟1405,寄存器至寄存器移動操作的執(zhí)行可包含輸出該標記所識別的數(shù)據(jù)值以及加載結(jié)果的標記到結(jié)果總線上。
在步驟1409可驗證預(yù)測結(jié)果(例如,通過執(zhí)行對于原來加載的地址計算)。若預(yù)測結(jié)果為正確,則加載的結(jié)果可不再廣播到結(jié)果總線上(或可取而代之,可再廣播加載的結(jié)果,并伴隨著依附操作不應(yīng)響應(yīng)再廣播的結(jié)果而再發(fā)出的指示)。若預(yù)測結(jié)果為不正確,則可存取數(shù)據(jù)高速緩存以恢復(fù)正確的加載結(jié)果,且正確的加載結(jié)果可廣播于結(jié)果總線上。這可接著造成任何使用預(yù)測結(jié)果值的已發(fā)出依附操作再發(fā)出。值得注意的是,在一些情況下,在執(zhí)行寄存器至寄存器移動操作之前,可驗證預(yù)測結(jié)果。若預(yù)測結(jié)果為不正確,則不執(zhí)行寄存器至寄存器移動操作。
若加載操作的預(yù)測結(jié)果和寄存器數(shù)據(jù)值之間未檢測到鏈接(例如,加載的地址模式在堆棧文件中未命中),則可不修改加載。加載可正常地執(zhí)行,存取該數(shù)據(jù)高速緩存并將其結(jié)果廣播于結(jié)果總線上,如步驟1417和1419所示。
追蹤緩存圖1A顯示根據(jù)一個實施例的微處理器。在此實施例中,微處理器包括追蹤緩存160,該追蹤緩存160配置以高速緩存指令的軌跡(trace)和/或至少部分的譯碼操作。在所示實施例中,追蹤緩存160位于微處理器的后端,而使得當各操作被退除時,通過追蹤填充單元(trace fillunit)162而建立軌跡。若再取出軌跡內(nèi)的操作時,可從追蹤緩存160取出操作而不從指令高速緩存106或系統(tǒng)內(nèi)存200取出操作。值得注意的是在其它實施例中,追蹤填充單元162可包含在微處理器的前端(例如,在分派單元104之前)。
圖10顯示追蹤緩存160的一個實施例。如圖中所示,追蹤緩存160可包括一個或多個追蹤緩存登錄項170。各追蹤緩存登錄項170儲存指令或操作的軌跡172。軌跡172可包括從多于一個的基本區(qū)段來的幾個指令或操作。在特定軌跡內(nèi)的一些操作可根據(jù)包括在軌跡內(nèi)的一個或多個分支操作,而在同一軌跡內(nèi)的其它操作可不根據(jù)這些分支操作。在一些實施例中,軌跡172也可包括流程控制信息以識別包含于各軌跡內(nèi)的各操作是否根據(jù)包含在該軌跡內(nèi)的一個或多個分支操作,是否在建立軌跡時也取得這些分支操作,且當下一次執(zhí)行分支操作時,若分支操作以不同方式分解的話,包括一卷標以識別控制將轉(zhuǎn)換到的操作或指令。
各軌跡可包括已優(yōu)化的操作。優(yōu)化可包括減少軌跡內(nèi)的操作的大小和/或數(shù)目,而使得在該軌跡內(nèi)的操作占用追蹤緩存登錄項170和/或調(diào)度裝置118內(nèi)較少的空間。優(yōu)化還造成軌跡內(nèi)的一個或多個操作變成可較早發(fā)出(例如,通過減少在相同軌跡中各操作間的數(shù)據(jù)依附性)等等。
若有任何由于執(zhí)行該軌跡172內(nèi)的指令和/或操作而造堆棧指針(例如,ESP)的改變,各追蹤緩存登錄項170可包括指示該改變的信息174。當處理包含于軌跡內(nèi)的各操作時,堆棧文件控制器202(或內(nèi)存文件控制器402,若內(nèi)存文件136執(zhí)行堆棧文件功能的話)可使用此信息以更新該堆棧指針尋址調(diào)整值,調(diào)整輸入到該堆棧文件的各操作的尋址模式,和/或調(diào)整在堆棧文件儲存器內(nèi)的登錄項的尋址模式。舉例而言,包括各加4至堆棧指針值的三個操作的追蹤緩存登錄項170當分派這三個操作時,可指示該堆棧和/或內(nèi)存文件控制器應(yīng)加12至堆棧指針尋址模式調(diào)整值。若另一個操作設(shè)定堆棧幀指針等于堆棧指針,則當分派該操作時,追蹤緩存登錄項170可包括指示堆棧和/或內(nèi)存文件控制器應(yīng)設(shè)定補償值等于0的信息(或設(shè)定該堆棧幀指針尋址模式調(diào)整值等于堆棧指針尋址模式調(diào)整值)。
在各追蹤緩存登錄項170中包含指示對該堆棧指針和/或堆棧幀指針改變的信息174,可使該堆棧和/或內(nèi)存文件保持正確,甚至在分派幾個軌跡以后。沒有此信息,軌跡內(nèi)各操作的優(yōu)化在堆棧和/或內(nèi)存文件處理這些優(yōu)化操作后,可能造成堆棧和/或內(nèi)存文件內(nèi)的錯誤。舉例而言,指令序列可包括PUSH<>
MOV EBP,ESPPUSH<>
這些指令可分解成下列的操作序列MOV[ESP-4],<>
ADD ESP,ESP,-4MOV EBP,ESPADD ESP,ESP,-4MOV[ESP],<>
值得注意的是幾乎所有的上述操作皆根據(jù)由先前操作所產(chǎn)生的數(shù)據(jù)值。因此,當?shù)却惹安僮鞯慕Y(jié)果出來時,這些操作在調(diào)度裝置中有極大可能無法進行。當追蹤填充單元162處理該一連串操作,以儲存作為追蹤緩存登錄項170內(nèi)軌跡172的一部分時,追蹤填充單元162可執(zhí)行某些轉(zhuǎn)換以便減少各操作之間的數(shù)據(jù)依附性。例如,上述的操作序列可優(yōu)化為MOV[ESP-4],<>
ADD o1,ESP,-4MOV EBP,o1ADD[ESP-8],<>
ADD ESP,ESP,-8此外,信息174指示在軌跡內(nèi)有共-8的ESP偏移,和+4的ESP-ESP偏移可包括在追蹤緩存登錄項170中。追蹤填充單元162可在當處理各原來的操作時一次更新一個操作信息,和在包括優(yōu)化操作的軌跡172的追蹤緩存登錄項170中儲存最后值。
由于執(zhí)行于各操作的轉(zhuǎn)換,在上述例子中的各優(yōu)化操作現(xiàn)僅根據(jù)ESP值。因此,一旦可取得ESP值時,在軌跡中的所有的操作就立刻變成可發(fā)送。然而,某些優(yōu)化,諸如在ADD運算中將ESP“定位置(slotified)”至暫時寄存器o1的一個優(yōu)化,會模糊信息,該信息否則將由堆棧和/或內(nèi)存文件控制器所使用以維持堆棧和/或內(nèi)存文件的正確性。在此示例性中,定位置轉(zhuǎn)換(slotification transformation)隱藏MOV EBP,01操作實際上指定從堆棧和/或內(nèi)存文件控制器來的堆棧指針的值給EBP的事實,該內(nèi)存文件控制器可配置成僅通過比較寄存器邏輯識別符而檢測此指定。由于軌跡172內(nèi)操作的執(zhí)行,包含在追蹤緩存登錄項170內(nèi)的信息174指示可通過堆棧和/或內(nèi)存文件控制器而使用ESP-EBP偏移等于+4,以適當?shù)卣{(diào)整尋址模式調(diào)整值、尋址模式和/或偏移值,以響應(yīng)對該軌跡中操作的處理。
因此,在一些實施例中,優(yōu)化諸如上述的定位置轉(zhuǎn)換可導致一些操作將以某種格式儲存于追蹤緩存登錄項170內(nèi),該格式在堆棧和/或內(nèi)存文件中將不會被辨認出來,即使可通過在堆棧和/或內(nèi)存文件中命中或通過引起更新一個或多個尋址模式、尋址模式調(diào)整值、和/或偏移值而辨認出這些操作的未優(yōu)化形式。不管這些操作有多混亂,然而,由于信息174包含于各追蹤緩存登錄項170內(nèi),堆棧和/或內(nèi)存文件可保持正確。
若從多于一個基本區(qū)段來的操作包含于軌跡內(nèi),則該軌跡可包括對應(yīng)同一基本區(qū)段內(nèi)各組操作的信息174。堆棧和/或內(nèi)存文件控制器可根據(jù)與各調(diào)整值相關(guān)聯(lián)的基本區(qū)段是否分派和/或預(yù)測將要(或?qū)嶋H地)執(zhí)行,而使用各組的信息174。例如,軌跡可包括從兩個不同的基本區(qū)段和每一群組操作的一組信息174。第二組操作的執(zhí)行可取決于包含于第一組操作中的一個分支的采取。當分派該軌跡時,若預(yù)測未采取該分支,則堆棧和/或內(nèi)存文件控制器可使用與第一組操作相關(guān)聯(lián)的信息174來作調(diào)整。然而,堆棧和/或內(nèi)存文件控制器可忽略關(guān)聯(lián)于另一組操作的信息174,因為該分支預(yù)測指示將不執(zhí)行這些操作。
示例性計算機系統(tǒng)圖11顯示計算機系統(tǒng)400的一個實施例的方框圖。該計算機系統(tǒng)400包括處理器100,該處理器100經(jīng)由總線橋接器402聯(lián)接到各種系統(tǒng)組件。處理器100可包括如上述的分派單元104、堆棧文件132、調(diào)度裝置118、和/或預(yù)測寄存器圖800的實施例??赡懿⒖紤]有計算機系統(tǒng)的其它實施例。在所述系統(tǒng)中,主存儲器200經(jīng)由內(nèi)存總線406聯(lián)接到總線橋接器402,圖形控制器408經(jīng)由AGP總線410聯(lián)接到總線橋接器402。幾個PCI裝置412A至412B經(jīng)由PCI總線414聯(lián)接到總線橋接器402。也可設(shè)有第二總線橋接器416以容納經(jīng)由EISA/ISA總線430至一個或多個EISA或ISA裝置418的電接口。在此例子中,處理器100經(jīng)由CPU總線424而聯(lián)接至總線橋接器402,并聯(lián)接至可選的L2高速緩存428。在一些實施例中,處理器100可包括集成L1高速緩存(圖中未顯示)。
總線橋接器402提供處理器100、主存儲器404、圖形控制器408、和附接到PCI總線414的各裝置之間的接口。當從連接到總線橋接器402的其中一個裝置接收操作時,總線橋接器402識別該操作的目標(例如,特定的裝置,或在PCI總線414的情況時,該目標是在PCI總線414上)??偩€橋接器402將操作路由至該目標裝置??偩€橋接器402通常將操作從由來源裝置或總線所使用的協(xié)議轉(zhuǎn)譯至由該目標裝置或總線所用的協(xié)議。
除了為PCI總線414提供至ISA/EISA總線的接口之外,第二總線橋接器416可合并額外的功能。第二總線橋接器416的外部或與第二總線橋接器416集成的輸入/輸出控制器(圖中未顯示)也可包括于計算機系統(tǒng)400內(nèi),以提供用于鍵盤和鼠標422和用于各種串行和并列端口的操作支持。在其它的實施例中,外部的高速緩存單元(圖中未顯示)也可聯(lián)接至處理器100與總線橋接器402之間的CPU總線424?;蚩蛇x擇的,外部高速緩存可聯(lián)接至總線橋接器402,且用于外部高速緩存的高速緩存控制邏輯可集成到總線橋接器402中。L2高速緩存428以背面結(jié)構(gòu)(backside configuration)聯(lián)接至處理器100。應(yīng)注意的是L2高速緩存428可與處理器100分離,與處理器100集成到一卡盒(例如,插槽1或插槽A)中,或甚至與具有處理器100的半導體基板集成。
主存儲器200為應(yīng)用程序儲存于其中且處理器100可從該主存儲器200取得應(yīng)用程序而首先執(zhí)行的內(nèi)存。適當?shù)闹鞔鎯ζ?00包括動態(tài)隨機存取存儲器(DRAM)。例如,可適合使用多個庫(bank)的同步動態(tài)隨機存取存儲器(SDRAM)或Rambus公司的Rambus動態(tài)隨機存取存儲器(RDRAM)。
PCI裝置412A至412B示出了多種外圍設(shè)備,諸如網(wǎng)絡(luò)接口卡、視頻加速器、音頻卡、硬盤或軟盤驅(qū)動器或驅(qū)動控制器、小型計算機系統(tǒng)接口(SCSI)適配器和電話卡。同樣地,ISA裝置418為例示的各種類型的外圍設(shè)備,諸如調(diào)制解調(diào)器、聲卡、和諸如GPIB或現(xiàn)場總線接口卡的各種的數(shù)據(jù)采集卡。
圖形控制器408提供用來控制顯示器426上文字內(nèi)容和影像的顯現(xiàn)。圖形控制器408可具體實現(xiàn)本領(lǐng)域技術(shù)人員已知的典型的圖形加速器,以顯現(xiàn)能有效地移入主存儲器200和從主存儲器200移出的三維數(shù)據(jù)結(jié)構(gòu)。圖形控制器408因此可以是AGP總線410的主控者,其中該圖形控制器408可請求和接收對總線橋接器402內(nèi)的目標接口的存取,由此獲得對主存儲器200的存取。專用圖形總線允許從主存儲器404快速取得數(shù)據(jù)。對某些操作而言,圖形控制器408可進一步配置以在AGP總線410上產(chǎn)生PCI協(xié)議事項。因此總線橋接器402的AGP接口可包括支持AGP協(xié)議事項以及PCI協(xié)議目標和起始端事項的功能。顯示器426為影像和文字內(nèi)容可呈現(xiàn)于其上的任何的電子顯示器。適當?shù)娘@示器426包括陰極射線管(CRT)、液晶顯示器(LCD)等等。
值得注意的是,雖然在上述說明中AGP、PCI、和ISA或EISA總線已作為示例給出,但是當需要時可用任何總線架構(gòu)替代。還值得注意的是,計算機系統(tǒng)400可以是包括額外處理器(例如,處理器100a顯示為計算機系統(tǒng)400的可選組件)的多重處理計算機系統(tǒng)。處理器100a可與處理器100類似。具體來說,處理器100a可以是處理器100的相同的復(fù)制品。處理器100a可經(jīng)由獨立總線(如圖11中所示)而連接至總線橋接器402,或可與處理器100共享CPU總線424。再者,處理器100a可聯(lián)接至與L2高速緩存428相似的L2高速緩存428a。
現(xiàn)在參照圖12,其顯示計算機系統(tǒng)400的另一個實施例,該計算機系統(tǒng)400可包括如上述的分派單元104、堆棧文件132、調(diào)度裝置118、和/或預(yù)測寄存器圖800。也存在并考慮其它的實施例。在圖12所示的實施例中,計算機系統(tǒng)400包括幾個處理節(jié)點612A、612B、612C、和612D。各處理節(jié)點經(jīng)由包括在各自處理節(jié)點612A至612D內(nèi)的內(nèi)存控制器616A至616D而聯(lián)接至各自的內(nèi)存614A至614D。此外,處理節(jié)點612A至612D包括用于處理節(jié)點612A至612D之間通訊的接口邏輯。舉例而言,處理節(jié)點612A包括用來與處理節(jié)點612B通訊的接口邏輯618A,用來與處理節(jié)點612C通訊的接口邏輯618B,和用來與又一處理節(jié)點(圖中未顯示)通訊的第三接口邏輯618C。同樣地,處理節(jié)點612B包括接口邏輯618D、618E、和618F;處理節(jié)點612C包括接口邏輯618G、618H、和618I;及處理節(jié)點612D包括接口邏輯618J、618K、和618L。處理節(jié)點612D被聯(lián)接以經(jīng)由接口邏輯618L而與多個輸入/輸出裝置(例如,以菊鏈配置的裝置620A至620B)通訊。其它的處理節(jié)點可用相似的方式而與其它的輸入/輸出裝置通訊。
處理節(jié)點612A至612D執(zhí)行基于分組的鏈接,用于處理節(jié)點間通訊。在本實施例中,該鏈接以數(shù)組的單向線路來實施(例如,線路624A用來將分組從處理節(jié)點612A傳輸至處理節(jié)點612B,和線路624B用來將分組從處理節(jié)點612B傳輸至處理節(jié)點612A)。如圖12中所示,其它組的線路624C至624H用來在其它的處理節(jié)點之間傳輸分組。一般而言,線路624的各組可包括一條或多條的數(shù)據(jù)線,一條或多條對應(yīng)于這些數(shù)據(jù)線的時鐘線、和一條或多條指示傳輸?shù)姆纸M的類型的控制線。對于處理節(jié)點之間的通訊,鏈接可以高速緩存一致性的方式操作,或?qū)τ谔幚砉?jié)點和輸入/輸出裝置之間的通訊,鏈接可以非一致性的方式操作(或至諸如PCI總線或ISA總線的公知結(jié)構(gòu)的輸入/輸出總線的總線橋接器)。再者,鏈接可使用如所示的輸入/輸出裝置之間的菊鏈結(jié)構(gòu)而以非一致性的方式操作。應(yīng)注意的是從一個處理節(jié)點傳輸至另一個處理節(jié)點的分組可通過一個或多個的中間節(jié)點。舉例而言,如圖12中所示,通過處理節(jié)點612A傳輸至處理節(jié)點612D的分組可通過處理節(jié)點612B或處理節(jié)點612C??墒褂萌魏芜m當?shù)穆酚伤惴?。計算機系統(tǒng)400的其它實施例可包括較圖12中所示實施例中更多或更少的處理節(jié)點。
一般而言,分組在各節(jié)點之間的線路624上可傳輸為一個或多個位時間。位時間可以是在對應(yīng)時鐘線上時鐘信號的上升沿或下降沿。分組可包括用于起始事項的命令分組、用于維持高速緩存一致性的探測分組、和響應(yīng)探測和命令而來的響應(yīng)分組。
處理節(jié)點612A至612D除了內(nèi)存控制器和接口邏輯以外,還可包括一個或多個處理器。廣義而言,處理節(jié)點包括至少一個處理器和當需要時可選擇性地包括用于與內(nèi)存和其它邏輯通訊的內(nèi)存控制器。具體來說,各處理節(jié)點612A至612D可包括一個或多個處理器100的復(fù)制品。外部接口單元18可包括節(jié)點內(nèi)的接口邏輯618,以及內(nèi)存控制器616。
內(nèi)存614A至614D可包括任何適當?shù)膬?nèi)存裝置。例如,內(nèi)存614A至614D可包括一個或多個RAMBUS DRAM(RDRAM)、同步DRAM(SDRAM)、靜態(tài)RAM等。計算機系統(tǒng)400的地址空間在內(nèi)存614A至614D之間劃分。各處理節(jié)點612A至612D可包括用來決定哪一個地址映射至614A至614D中哪一個內(nèi)存的內(nèi)存映射,而因此對于特定地址的內(nèi)存請求將路由到處理節(jié)點612A至612D中的該個處理節(jié)點。在一個實施例中,計算機系統(tǒng)400內(nèi)的地址的一致點為聯(lián)接到對應(yīng)于該地址的內(nèi)存儲存字節(jié)的內(nèi)存控制器616A至616D。換言之,內(nèi)存控制器616A至616D負責確保對應(yīng)內(nèi)存614A至614D的各內(nèi)存存取以高速緩存一致性的方式發(fā)生。內(nèi)存控制器616A至616D可包括控制電路,用來連接到內(nèi)存614A至614D。此外,內(nèi)存控制器616A至616D可包括用于隊列內(nèi)存請求的請求隊列。
接口邏輯618A至618L可包括用于接收從鏈路來的分組的各種緩沖器,和用于緩沖將根據(jù)鏈接而發(fā)送的分組。計算機系統(tǒng)400可使用任何適當?shù)挠糜趥鬏敺纸M的流程控制機制。舉例而言,在一個實施例中,各接口邏輯618儲存由接口邏輯所連接到的鏈接另一端的接收器內(nèi)各類型緩沖器的計數(shù)數(shù)目。接口邏輯并不傳送分組,除非接收接口邏輯具有閑置的緩沖器以儲存分組。當通過路由出分組而空出接收緩沖器時,接收接口邏輯傳輸一信息至發(fā)送接口邏輯以指示緩沖器已經(jīng)閑置。如此的機制可稱之為“連動式(coupon-based)”系統(tǒng)。
輸入/輸出裝置620A至620B可以是任何適當?shù)妮斎?輸出裝置。舉例而言,輸入/輸出裝置620A至620B可包括用于與另一計算機系統(tǒng)通訊的各裝置,這些裝置(例如,網(wǎng)絡(luò)接口卡或調(diào)制解調(diào)器)可聯(lián)接至該另一計算機系統(tǒng)。再者,輸入/輸出裝置620A至620B可包括視頻加速器、音頻卡、硬盤或軟盤驅(qū)動器或驅(qū)動控制器、小型計算機系統(tǒng)接口適配器和電話卡、聲卡、和諸如GPIB或現(xiàn)場總線接口卡的各種數(shù)據(jù)采集卡。值得注意的是術(shù)語“輸入/輸出裝置”和術(shù)語“外圍設(shè)備”在此文中有相同的意義。
在此所使用的“時鐘周期”或“周期”二詞是指時間間距,在此時間間距期間各種階段的指令處理管線完成其工作。內(nèi)存組件(比如寄存器或數(shù)組)根據(jù)定義時鐘周期的時鐘信號而獲取各指令和計算的值。例如,內(nèi)存組件可根據(jù)時鐘信號的上升沿或下降沿而獲取數(shù)值。
本領(lǐng)域技術(shù)人妖一旦完全了解本發(fā)明上述揭示內(nèi)容后,顯然可對其作許多的變更和修飾。下列權(quán)利要求范圍將被解釋為包含所有的這些變化和修飾。
產(chǎn)業(yè)利用性本發(fā)明通常應(yīng)用于微處理器領(lǐng)域。
權(quán)利要求
1.一種系統(tǒng)(100),包括內(nèi)存文件(136),該內(nèi)存文件(136)包括配置以儲存尋址模式(406)和標記(408)的登錄項(420),其中若內(nèi)存操作的尋址模式匹配儲存于該登錄項(420)中的該尋址模式(406),則該內(nèi)存文件(136)配置以鏈接由該標記(408)所識別的數(shù)據(jù)值至該內(nèi)存操作的預(yù)測結(jié)果,以及執(zhí)行內(nèi)核(124),其聯(lián)接至該內(nèi)存文件(136),其中該執(zhí)行內(nèi)核(124)配置成當執(zhí)行依附于該內(nèi)存操作的另一操作時,存取該預(yù)測結(jié)果;其中該內(nèi)存操作的該尋址模式包括邏輯寄存器的識別符,和其中該內(nèi)存文件(136)配置成預(yù)測該邏輯寄存器是否被指定為通用寄存器或堆棧幀指針寄存器,以便判定該內(nèi)存操作的尋址模式是否匹配儲存于該登錄項(420)中的尋址模式(406)。
2.根據(jù)權(quán)利要求1所述的系統(tǒng)(100),其中,若該內(nèi)存文件(136)預(yù)測包含于該內(nèi)存操作的尋址模式中的邏輯寄存器正被用作該堆棧幀指針寄存器,則該內(nèi)存文件(136)可配置成判定該內(nèi)存操作的尋址模式并不匹配儲存于該登錄項(420)中的尋址模式(406);以及若該內(nèi)存文件(136)預(yù)測該邏輯寄存器正被用作該通用寄存器,則該內(nèi)存文件(136)可配置成,假使該內(nèi)存操作的尋址模式等于儲存于該登錄項中(420)的尋址模式,那么判(406)定該內(nèi)存操作的尋址模式匹配儲存于該登錄項中(420)的尋址模式(406)。
3.根據(jù)權(quán)利要求1所述的系統(tǒng)(100),其中該內(nèi)存文件(136)配置成通過追蹤目前的調(diào)用深度來預(yù)測該邏輯寄存器如何被使用,其中該內(nèi)存文件(136)可配置成當檢測到調(diào)用指令時增加該目前的調(diào)用深度,和當檢測到返回指令時減少該目前的調(diào)用深度。
4.根據(jù)權(quán)利要求1所述的系統(tǒng)(100),其中該內(nèi)存文件(136)包括其它的登錄項(420),其中該其它的登錄項(420)儲存與堆棧有關(guān)的尋址模式,其中該內(nèi)存文件(136)包括補償堆棧指針調(diào)整的機制,和其中該內(nèi)存文件(136)配置成當判定了操作的尋址模式是否匹配儲存于該其它登錄項(420)中與堆棧有關(guān)的尋址模式時,使用該機制來補償對該堆棧指針的調(diào)整。
5.根據(jù)權(quán)利要求1所述的系統(tǒng)(100),其中該內(nèi)存文件(136)被配置成修改堆棧幀指針尋址模式調(diào)整值,以響應(yīng)一操作的分派,其中該分派的操作被執(zhí)行時修改該堆棧幀指針的值;以及其中,該內(nèi)存文件(136)配置成在比較該內(nèi)存操作的尋址模式與儲存于該登錄項(420)中的該尋址模式(406),以便判定該內(nèi)存操作的該尋址模式是否匹配儲存于該登錄項(420)中的該尋址模式(406)之前,將該堆棧幀指針尋址模式調(diào)整值應(yīng)用到該內(nèi)存操作的尋址模式。
6.一種方法,包含預(yù)測識別于內(nèi)存操作的尋址模式中的邏輯寄存器是否正被用作通用寄存器或堆棧幀指針寄存器;根據(jù)該預(yù)測,判定該內(nèi)存操作的尋址模式是否匹配早先操作的尋址模式;若該內(nèi)存操作的尋址模式匹配早先操作的尋址模式,則將通過較早操作的操作數(shù)標記所識別的數(shù)據(jù)值鏈接至該內(nèi)存操作的預(yù)測結(jié)果;以及執(zhí)行具有操作數(shù)來源根據(jù)該內(nèi)存操作的結(jié)果的操作,其中該執(zhí)行步驟包括存取由該標記所識別的該數(shù)據(jù)值。
7.根據(jù)權(quán)利要求6所述的方法,其中,若該預(yù)測步驟預(yù)測包含于該內(nèi)存操作的尋址模式中的邏輯寄存器正被用作該堆棧幀指針寄存器,則該判定步驟包括判定該內(nèi)存操作的尋址模式并不匹配該較早操作的尋址模式;以及其中若該預(yù)測步驟預(yù)測該邏輯寄存器正被用作該通用寄存器,而若該內(nèi)存操作的尋址模式等于該較早操作的尋址模式,則該判定步驟包括判定該內(nèi)存操作的尋址模式匹配該較早操作的尋址模式。
8.根據(jù)權(quán)利要求6所述的方法,其中該預(yù)測步驟包括當檢測到調(diào)用指令時增加該目前調(diào)用深度,和當檢測到返回指令時減少該目前調(diào)用深度,從而追蹤目前調(diào)用深度。
9.根據(jù)權(quán)利要求6所述的方法,其中該較早操作的尋址模式儲存于內(nèi)存文件(136)中的登錄項(420)中,和其中與堆棧相關(guān)尋址模式儲存于內(nèi)存文件(136)中的另一登錄項(420)中;該方法進一步包括通過追蹤堆棧指針的修改,而判定操作的尋址模式是否匹配與堆棧相關(guān)尋址模式。
10.一種計算機系統(tǒng)(400),包括系統(tǒng)內(nèi)存(200);以及微處理器(100),其聯(lián)接至該系統(tǒng)內(nèi)存(200);其特征在于該微處理器(100)包含內(nèi)存文件(136),該內(nèi)存文件(136)包括配置以儲存尋址模式(406)和標記(408)的登錄項(420);該微處理器(100)還包括執(zhí)行內(nèi)核(124),該執(zhí)行內(nèi)核(124)聯(lián)接至該內(nèi)存文件(136);若內(nèi)存操作的尋址模式匹配儲存于該登錄項(420)中的尋址模式(406),則該內(nèi)存文件(136)配置成將由該標記(408)所識別的數(shù)據(jù)值鏈接到該內(nèi)存操作的預(yù)測結(jié)果;該執(zhí)行內(nèi)核(124)配置成當執(zhí)行依附于該內(nèi)存操作的另一操作時,存取該預(yù)測結(jié)果;該內(nèi)存操作的尋址模式包括邏輯寄存器的識別符;以及該內(nèi)存文件(136)配置成預(yù)測該邏輯寄存器是否被指定為通用寄存器或堆棧幀指針寄存器,以便判定該內(nèi)存操作的尋址模式是否匹配儲存于該登錄項(420)中的尋址模式(406)。
全文摘要
一個系統(tǒng)可包括內(nèi)存文件(136)和執(zhí)行內(nèi)核(124)。內(nèi)存文件可包括配置用來儲存尋址模式(406)和標記(408)的登錄項(420)。若內(nèi)存操作的尋址模式匹配儲存于登錄項(420)中的尋址模式(406),則內(nèi)存文件(136)可配置成將由標記所識別的數(shù)據(jù)值鏈接到內(nèi)存操作的預(yù)測結(jié)果。內(nèi)存操作的尋址模式包括邏輯寄存器的識別符,和為了判定內(nèi)存操作的尋址模式是否匹配儲存于登錄項中(420)的尋址模式(406),而可將內(nèi)存文件(136)配置成預(yù)測指定的邏輯寄存器是否為通用寄存器,或為堆棧幀指針寄存器。當執(zhí)行依附內(nèi)存操作的另一個操作時,可將執(zhí)行內(nèi)核(124)配置成存取預(yù)測結(jié)果。
文檔編號G06F9/38GK1742257SQ200480002592
公開日2006年3月1日 申請日期2004年1月9日 優(yōu)先權(quán)日2003年1月21日
發(fā)明者J·K·皮克特, B·T·桑德爾, K·M·列帕克 申請人:先進微裝置公司