專利名稱::不對(duì)準(zhǔn)存儲(chǔ)器存取預(yù)測(cè)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明大體上涉及處理器領(lǐng)域,且明確地說(shuō)涉及預(yù)測(cè)管線處理器中的不對(duì)準(zhǔn)存儲(chǔ)器存取。
背景技術(shù):
:便攜式電子裝置已變得普遍。便攜式電子裝置的兩個(gè)趨勢(shì)是功能性增加和尺寸減小。功能性增加是由較快且更強(qiáng)大的處理器所提供的增加的計(jì)算能力推動(dòng)的。除了提供高級(jí)特征和功能性,便攜式電子裝置自身的尺寸和重量不斷縮減。此縮減趨勢(shì)的一個(gè)影響是用于向裝置中的處理器和其它電子元件供電的電池的尺寸不斷減小。盡管電池技術(shù)提高部分抵銷了所述問(wèn)題,但電池尺寸減小對(duì)所有便攜式電子裝置電子元件強(qiáng)加嚴(yán)格的功率預(yù)算。便攜式電子裝置的功率預(yù)算的相當(dāng)大部分是由處理器消耗的功率。因此,提高性能且減少功率消耗的處理器改進(jìn)對(duì)于例如便攜式電子裝置的許多應(yīng)用來(lái)說(shuō)是理想的。通?,F(xiàn)代處理器采用管線結(jié)構(gòu),其中順序指令(其每一者具有多個(gè)執(zhí)行步驟)在執(zhí)行上重疊。為了獲得最大性能,指令應(yīng)連續(xù)流動(dòng)通過(guò)管線。導(dǎo)致指令從管線沖洗出且隨后重新開始的任何情形均可能不利地影響性能和功率消耗兩者。某些管線資源(例如,用于指令狀態(tài)和追蹤的隊(duì)列位置)在指令進(jìn)入管線時(shí)被分派。如果稍后在管線中發(fā)現(xiàn)單個(gè)指令需要比最初分派的資源更多的資源,那么可能需要沖洗隨后指令以允許將它們的資源重新分派給需要所述資源的指令。從存儲(chǔ)器加載未對(duì)準(zhǔn)數(shù)據(jù)或?qū)⑽磳?duì)準(zhǔn)數(shù)據(jù)存儲(chǔ)到存儲(chǔ)器的存儲(chǔ)器存取指令是可能需要比最初分派到的管線資源更多的管線資源的指令的一個(gè)實(shí)例,可能直到在管線深處才發(fā)現(xiàn)指令需要更多管線資源。未對(duì)準(zhǔn)數(shù)據(jù)是在存儲(chǔ)于存儲(chǔ)器中時(shí)越過(guò)預(yù)定存儲(chǔ)器邊界(例如,字或半字邊界)的那些數(shù)據(jù)。由于在邏輯上構(gòu)造和尋址存儲(chǔ)器以及在物理上將存儲(chǔ)器耦合到存儲(chǔ)器總線的方式的緣故,通常不能在單個(gè)周期中讀取或?qū)懭朐竭^(guò)存儲(chǔ)器邊界的數(shù)據(jù)。事實(shí)上,可能需要兩個(gè)連續(xù)總線周期——一個(gè)用以讀取或?qū)懭脒吔缫粋?cè)的數(shù)據(jù),且另一個(gè)用以讀取或?qū)懭胧S鄶?shù)據(jù)。對(duì)于不對(duì)準(zhǔn)數(shù)據(jù)的存儲(chǔ)器存取指令——即加載或存儲(chǔ)指令——必須在管線中產(chǎn)生額外指令步驟或微操作,以執(zhí)行不對(duì)準(zhǔn)數(shù)據(jù)所需的額外存儲(chǔ)器存取。然而,在執(zhí)行級(jí)處,直到知道存儲(chǔ)器存取的有效地址和數(shù)據(jù)大小(這可能僅發(fā)生在管線深處)時(shí)才能確定數(shù)據(jù)的對(duì)準(zhǔn)。當(dāng)產(chǎn)生有效地址且發(fā)現(xiàn)數(shù)據(jù)未對(duì)準(zhǔn)時(shí),可能存在不足以用于產(chǎn)生微操作來(lái)執(zhí)行第二存儲(chǔ)器存取的管線控制資源。在此類未對(duì)準(zhǔn)的情況下,管線必須被沖洗出至少所有隨后指令,以釋放這些資源。接著必須在管線中重新取出并重新執(zhí)行所述沖洗出的指令,從而使處理器性能降級(jí)且浪費(fèi)了功率。
發(fā)明內(nèi)容可在管線中早期在指令的有效地址產(chǎn)生之前預(yù)測(cè)存儲(chǔ)器存取指令的數(shù)據(jù)未對(duì)準(zhǔn)??煞峙晒芫€資源且控制管線以創(chuàng)建第二微操作。根據(jù)未對(duì)準(zhǔn)數(shù)據(jù)的需要,利用所述第二微操作來(lái)執(zhí)行第二存儲(chǔ)器存取周期。本發(fā)明在一個(gè)實(shí)施例中涉及一種在指令執(zhí)行管線中處理存儲(chǔ)器存取指令的方法。預(yù)測(cè)存儲(chǔ)器存取指令的未對(duì)準(zhǔn),且在針對(duì)存儲(chǔ)器存取指令產(chǎn)生有效地址之前,響應(yīng)于所述預(yù)測(cè)在管線中產(chǎn)生至少一個(gè)微操作,所述微操作針對(duì)未對(duì)準(zhǔn)數(shù)據(jù)執(zhí)行第二存儲(chǔ)器存取。在另一實(shí)施例中,本發(fā)明涉及一種管線處理器。所述處理器包括包含多個(gè)管級(jí)的指令執(zhí)行管線,和產(chǎn)生存儲(chǔ)器存取指令將存取未對(duì)準(zhǔn)數(shù)據(jù)的預(yù)測(cè)的未對(duì)準(zhǔn)預(yù)測(cè)器。所述處理器另外包括控制邏輯,其在針對(duì)存儲(chǔ)器存取指令產(chǎn)生有效地址之前,響應(yīng)于所述預(yù)測(cè)在管線中針對(duì)存儲(chǔ)器存取指令產(chǎn)生額外微操作。圖1是處理器的功能方框圖。圖2是存儲(chǔ)器組織的圖。圖3是處理器管線的一部分的功能方框圖。具體實(shí)施例方式管線技術(shù)是一種處理器實(shí)施技術(shù),借此多個(gè)指令在執(zhí)行時(shí)同時(shí)重疊。典型結(jié)構(gòu)中的每一指令通常以多個(gè)執(zhí)行步驟來(lái)執(zhí)行,所述執(zhí)行步驟例如取出、解碼、一個(gè)或一個(gè)以上執(zhí)行步驟、存儲(chǔ)器存取和反寫。處理器管線包含多個(gè)"管級(jí)"。每一管級(jí)(其通常包含邏輯和存儲(chǔ)裝置)完成指令的執(zhí)行步驟或執(zhí)行步驟的一部分。所述管級(jí)耦合在一起以形成管線。指令進(jìn)入管級(jí),且在所述管級(jí)中被連續(xù)處理。在先前指令完成執(zhí)行之前,額外指令進(jìn)入管線——因此,可在任何給定時(shí)間在管線內(nèi)處理多個(gè)指令。這種在順序指令流中的指令間開發(fā)并行性的能力顯著有助于改進(jìn)處理器性能。在理想條件下且在在一個(gè)周期中完成每個(gè)管級(jí)的處理器中,在填充管線的簡(jiǎn)短初始過(guò)程之后,指令可在每個(gè)周期中完成執(zhí)行。由于包括指令間的數(shù)據(jù)相依性(數(shù)據(jù)危險(xiǎn))、例如分支的控制相依性(控制危險(xiǎn))、處理器資源分派沖突(結(jié)構(gòu)危險(xiǎn))、中斷、高速緩沖存儲(chǔ)器未中等的多種因素的緣故,實(shí)際上很少實(shí)現(xiàn)此類理想條件。另外,某些指令可能需要通過(guò)一個(gè)或一個(gè)以上所述管級(jí)一次以上。在此情況下,處理器可為所述指令產(chǎn)生多個(gè)微操作。如本文所使用,微操作是一種邏輯實(shí)體,其每次占據(jù)一個(gè)管級(jí)且流動(dòng)穿過(guò)管線。理想地,大多數(shù)指令包含管線中的單個(gè)微操作(以接近每個(gè)周期一個(gè)指令的目標(biāo))。然而,指令可包含兩個(gè)或兩個(gè)以上微操作,或者可分裂成兩個(gè)或兩個(gè)以上,其每一者依序流動(dòng)穿過(guò)管線?!N形式的結(jié)構(gòu)管線危險(xiǎn)由未對(duì)準(zhǔn)的存儲(chǔ)器存取產(chǎn)生。在執(zhí)行級(jí)期間,許多存儲(chǔ)器存取指令計(jì)算有效存儲(chǔ)器地址——即從其處加載數(shù)據(jù)或數(shù)據(jù)被存儲(chǔ)到的地址。然而,在解碼級(jí)期間,將處理器資源一一明確地說(shuō),向指令分派管級(jí)和穿過(guò)管線追蹤指令的管線控制資源——分派到加載或存儲(chǔ)指令。在字、半字或其它預(yù)定地址邊界上對(duì)準(zhǔn)存儲(chǔ)器地址的常見情況下,可在單個(gè)管級(jí)中執(zhí)行加載或存儲(chǔ)操作(但在從存儲(chǔ)器檢索數(shù)據(jù)時(shí)可暫停管線)。如果存儲(chǔ)器存取指令針對(duì)于越過(guò)預(yù)定地址邊界的數(shù)據(jù),那么需要兩個(gè)加載或存儲(chǔ)操作,從而需要執(zhí)行管線中的兩個(gè)微操作。然而,很可能在解碼級(jí)中僅將一個(gè)微操作分派給所述加載或存儲(chǔ)。需要在管線的執(zhí)行級(jí)中產(chǎn)生新的微操作存在問(wèn)題。在管線資源被完全分派的情況下,需要新的微操作將造成異常,從而需要從管線中沖洗出隨后所有的指令以釋放必需的管線控制資源。圖1描繪處理器10的功能方框圖。所述處理器10根據(jù)控制邏輯14在指令執(zhí)行管線12中執(zhí)行指令,所述控制邏輯14可包括指令執(zhí)行FIF015。所述管線包括各種寄存器或鎖存器器16(其以管級(jí)形式組織)和一個(gè)或一個(gè)以上算術(shù)邏輯單元(ALU)18。通用寄存器(GPR)文件20提供組成存儲(chǔ)器層級(jí)的頂部的寄存器。管線從指令高速緩沖存儲(chǔ)器22中取出指令,其中存儲(chǔ)器尋址和許可由指令側(cè)轉(zhuǎn)譯后備緩沖器(ITLB)24管理。從數(shù)據(jù)高速緩沖存儲(chǔ)器26存取數(shù)據(jù),其中存儲(chǔ)器尋址和許可由主轉(zhuǎn)譯后備緩沖器(TLB)28管理。在各種實(shí)施例中,ITLB可包含TLB的一部分的副本?;蛘?,ITLB和TLB可集成。類似地,在處理器10的各種實(shí)施例中,I高速緩沖存儲(chǔ)器22和D高速緩沖存儲(chǔ)器26可集成或聯(lián)合。I高速緩沖存儲(chǔ)器22和/或D高速緩沖存儲(chǔ)器26中的未中造成在存儲(chǔ)器接口30的控制下對(duì)主(芯片外)存儲(chǔ)器32的存取,所述存儲(chǔ)器接口30可包括高速緩沖存儲(chǔ)器未中處理隊(duì)列29。處理器10可包括輸入/輸出(1/0)接口34,其控制對(duì)各種外圍裝置36的存取。所屬領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到可能對(duì)處理器10作出多種變化。舉例來(lái)說(shuō),處理器10可包括針對(duì)I和D高速緩沖存儲(chǔ)器中的任一者或兩者的第二級(jí)別(L2)高速緩沖存儲(chǔ)器。另外,可在特定實(shí)施例中省略處理器10中所描繪的功能塊中的一者或一者以上。以下表1描繪代表性管線操作的圖。所述代表性結(jié)構(gòu)中的指令以六個(gè)步驟執(zhí)行IF-指令取出ID-指令解碼EX1-執(zhí)行(取出用于存儲(chǔ)器存取指令的地址操作數(shù))EX2-執(zhí)行(針對(duì)存儲(chǔ)器存取指令的有效地址計(jì)算)MEM-存儲(chǔ)器存取WB-反寫指令編號(hào)時(shí)鐘周期1234567910/IFIDEX1EX2MEMWB,H"lIFIDEX1EX2MEMWB'+2IFIDEX1EX2MEMWBi.+3IFIDEX1EX2MEMWBf+4IFIDEX1EX2MEMWB表1:代表性管線操作如果每一管級(jí)以一個(gè)周期執(zhí)行,且如果不存在管線停止、危險(xiǎn)或中斷,那么從周期6到IO,在每一周期中完成一個(gè)指令并執(zhí)行其結(jié)果的反寫。時(shí)鐘周期1到4代表填充管線的初始化過(guò)程,其(例如)在管線的復(fù)位、上下文切換、中斷或任何其它沖洗之后執(zhí)行。由于額5外指令跟隨第i+4指令,因而在理想情況下可無(wú)限期地繼續(xù)每個(gè)周期一個(gè)指令的執(zhí)行。表1的管線結(jié)構(gòu)僅僅是代表性的。在任何給定處理器實(shí)施方案中,管線可包括針對(duì)任何指令步驟的任何數(shù)目的管級(jí)。加載(LD)和存儲(chǔ)(ST)指令存取存儲(chǔ)器以分別讀取和寫入數(shù)據(jù)。存儲(chǔ)器經(jīng)組織以每次同時(shí)存取預(yù)定量的數(shù)據(jù)。圖2是電子裝置中的一個(gè)存儲(chǔ)器結(jié)構(gòu)的方框圖,其包括處理器10、總線31和存儲(chǔ)器32。在此實(shí)例中,總線31為32位寬,且存儲(chǔ)器32(其可包含(例如)處理器中的高速緩沖存儲(chǔ)器或芯片外RAM)在字(32位)邊界上對(duì)準(zhǔn)。如所屬領(lǐng)域的技術(shù)人員將容易了解,可實(shí)施多種不同的總線和存儲(chǔ)器結(jié)構(gòu),其具有相應(yīng)的不同數(shù)據(jù)對(duì)準(zhǔn)邊界。作為不對(duì)準(zhǔn)存儲(chǔ)器存取的實(shí)例,圖2描繪由LD指令以有效開始字節(jié)地址OxOA讀取的存儲(chǔ)器,和具有三個(gè)字節(jié)的尺寸字段。對(duì)于字對(duì)準(zhǔn)的存儲(chǔ)器32,不能在一個(gè)總線周期中從存儲(chǔ)器讀取此數(shù)據(jù)。事實(shí)上,處理器10必須首先讀取在0x08處開始的全字(遮蔽字節(jié)0x08和0x09),且接著讀取在OxOC處開始的全字(遮蔽字節(jié)OxOD到OxOF)。在具有雙字存儲(chǔ)器對(duì)準(zhǔn)和64位總線的系統(tǒng)中,可在單個(gè)周期中讀取此數(shù)據(jù);然而,不可讀取在0x07處開始的3字節(jié)數(shù)據(jù)。一般來(lái)說(shuō),任何現(xiàn)實(shí)總線31和存儲(chǔ)器32配置可引起不對(duì)準(zhǔn)存儲(chǔ)器存取的問(wèn)題。因?yàn)椴粚?duì)準(zhǔn)數(shù)據(jù)需要兩個(gè)總線周期,所以針對(duì)不對(duì)準(zhǔn)數(shù)據(jù)的存儲(chǔ)器存取指令(本文中稱為"不對(duì)準(zhǔn)存儲(chǔ)器指令")將導(dǎo)致在執(zhí)行級(jí)中創(chuàng)建兩個(gè)微操作。舉例來(lái)說(shuō),如果表l中第i+3個(gè)指令是不對(duì)準(zhǔn)存儲(chǔ)器存取指令,那么管線將如以下表2中描繪而執(zhí)行。<table>tableseeoriginaldocumentpage6</column></row><table>表2:具有不對(duì)準(zhǔn)存儲(chǔ)器存取指令的代表性管線在EX2級(jí)期間,在時(shí)鐘周期7中確定存儲(chǔ)器存取指令i+3的有效地址。只有在此刻,處理器控制邏輯才可確定有效存儲(chǔ)器存取是不對(duì)準(zhǔn)的——也就是說(shuō),其越過(guò)預(yù)定存儲(chǔ)器邊界且不能在單個(gè)總線周期中存取。如果足夠的管線資源可用,那么處理器將為存儲(chǔ)器存取指令產(chǎn)生額外的微操作(表2中"genii-op"),指示為(i+3)2。最初分派的微操作和新的微操作接著依序前進(jìn)通過(guò)剩余管線。初始微操作(已在EX2處計(jì)算第一存儲(chǔ)器存取的地址)接著在MEM處存取經(jīng)尋址數(shù)據(jù)的第一部分,且在WB處寫入數(shù)據(jù)。新創(chuàng)建的微操作將在時(shí)鐘周期8中在EX2處計(jì)算第二存儲(chǔ)器存取的地址(例如,通過(guò)添加一個(gè)字偏移),接著在MEM處存取經(jīng)尋址數(shù)據(jù)的第二部分,且在TO處寫入數(shù)據(jù)。由于指令i+3的未對(duì)準(zhǔn)數(shù)據(jù)所需的額外微操作的緣故,指令i+4在時(shí)鐘周期8中停止。為了在管線中實(shí)施此停止,必須門控針對(duì)EX1鎖存器的時(shí)鐘,針對(duì)EX1鎖存器的輸出重新循環(huán)到針對(duì)EX1鎖存器的輸入處的多路復(fù)用器,或者必須采用某種其它機(jī)制來(lái)保持EXl內(nèi)容通過(guò)時(shí)鐘周期7和8兩者。類似地,隨后指令i+5將在整個(gè)管線中在DCD鎖存器等等處停止。實(shí)施此停止控制提出設(shè)計(jì)挑戰(zhàn),當(dāng)在管線中晚期才發(fā)現(xiàn)需要停止時(shí)尤其如此。另外,需要針對(duì)EX2處的存儲(chǔ)器存取指令以及針對(duì)先前管級(jí)中的其它指令"重新循環(huán)"管級(jí)會(huì)在一個(gè)或一個(gè)以上關(guān)鍵路徑上添加多路復(fù)用器選擇延遲,從而可能通過(guò)增加機(jī)器周期時(shí)間而降低性能。將可能造成管線停止的事件減到最少改進(jìn)了性能。還可參看圖3更詳細(xì)地描述未對(duì)準(zhǔn)存儲(chǔ)器存取,圖3是指令管線12的一部分的功能方框圖。在管線中從指令高速緩沖存儲(chǔ)器22取出LD指令并將其加載到IF鎖存器40中。所述指令由解碼邏輯42解碼。在一個(gè)實(shí)施例中,LD通過(guò)將位于第一寄存器rl中的基地址加上位于第二寄存器r2中的偏移來(lái)計(jì)算有效地址。從所述指令中解碼出所述兩個(gè)寄存器rl和r2的地址以及數(shù)據(jù)的大小,且將其鎖存在DCD鎖存器44中。這些寄存器地址接著可將寄存器文件(例如,GPR文件20)索引,所述寄存器文件傳回寄存器(指示為(rl)和(r2))的內(nèi)容。將這些值存儲(chǔ)在EX1鎖存器46中,由ALU18相加,且將有效存儲(chǔ)器地址存儲(chǔ)在EX2鎖存器48中。存儲(chǔ)器存取接著在50處繼續(xù),從而存取數(shù)據(jù)高速緩沖存儲(chǔ)器26。如果數(shù)據(jù)高速緩沖存儲(chǔ)器26中發(fā)生存取未中,那么存儲(chǔ)器存取操作50在必要時(shí)將執(zhí)行地址轉(zhuǎn)譯,且存取芯片外存儲(chǔ)器32,從而停止管線直到解決存儲(chǔ)器存取為止。在任何情況下,存儲(chǔ)器存取操作50傳回不對(duì)準(zhǔn)數(shù)據(jù)的第一部分,將其存儲(chǔ)在MEM鎖存器52中。在48處通過(guò)將(rl)和(r2)相加而產(chǎn)生有效地址時(shí),控制邏輯14檢查有效地址和大小字段,且第一次檢測(cè)到存儲(chǔ)器存取不對(duì)準(zhǔn)。如果足夠的處理器資源是可用的,那么有效地址在EX2鎖存器48處"重新循環(huán)",如箭頭54所指示。用單字偏移來(lái)更新所述地址,以為第二存儲(chǔ)器存取產(chǎn)生有效地址。這向管線添加微操作;且不允許隨后指令前進(jìn)到EX2管級(jí)。當(dāng)從第一字提取的數(shù)據(jù)沿著管線前進(jìn)時(shí),在50處存取第二字,并將其存儲(chǔ)在MEM鎖存器52中。接著可連續(xù)地將數(shù)據(jù)寫入到GPR,或在適當(dāng)時(shí),將其進(jìn)行組合并接著寫入。注意,出于解釋的目的,圖3描繪管線12的每一級(jí),在所述級(jí)中具有相關(guān)的LD指令步驟。實(shí)際上,一旦相關(guān)LD指令步驟在一管級(jí)中完成且相應(yīng)的微操作移動(dòng)到后續(xù)級(jí),就將另一指令的微操作加載到所述管級(jí)中以進(jìn)行處理。因此,當(dāng)在48處鎖存LD指令的有效地址時(shí),先前三個(gè)管級(jí)加載有三個(gè)微操作,其可對(duì)應(yīng)于多達(dá)三個(gè)不同指令。當(dāng)在EX2鎖存器48處產(chǎn)生有效地址時(shí),如果沒有足夠的管線控制資源可用于如54處所描繪而循環(huán)地址且產(chǎn)生第二微操作以執(zhí)行第二存儲(chǔ)器存取,那么造成結(jié)構(gòu)危險(xiǎn)且將發(fā)生異常。在此情況下,必須從管線處沖洗出未對(duì)準(zhǔn)LD指令后面的所有指令,以使得必要的控制資源可用。稍后必須重新取出這些指令并對(duì)其重新處理,從而導(dǎo)致性能損失且浪費(fèi)與兩次執(zhí)行所述操作相關(guān)聯(lián)的功率。必須可用于在EX2管級(jí)中創(chuàng)建微操作的管線控制資源可包括指令跟蹤FIFO15(圖1)中的條目。所述指令跟蹤FIFO15包括針對(duì)每一發(fā)出指令(以編程次序)的條目。當(dāng)發(fā)出相應(yīng)指令時(shí)分派FIFO15中的條目,且在若干周期之后,當(dāng)管線控制邏輯14確定所述指令是否具有可能造成中斷的異常時(shí),對(duì)所述條目進(jìn)行更新。依次從指令跟蹤FIFO15中移除條目,使每一者在已被"證實(shí)"(即,管線控制器確定指令將完成執(zhí)行而不發(fā)生異常)并"確認(rèn)"(即,管線控制器已認(rèn)識(shí)到,其及其所有先趨者已被確認(rèn),所以顯然所述指令在管線中完成執(zhí)行)之后出棧。如果指令跟蹤FIFO15中的每一條目對(duì)應(yīng)于單個(gè)微操作,那么簡(jiǎn)化了指令跟蹤FIF015的結(jié)構(gòu)和控制。另一方面,如果不對(duì)準(zhǔn)存儲(chǔ)器存取指令造成在管線深處(例如,在EX2管級(jí)中)產(chǎn)生額外微操作,那么指令跟蹤FIFO15中的每一條目必須能夠跟蹤多個(gè)潛在微操作,從而對(duì)于每一FIFO條目增加了硬件資源和控制復(fù)雜性。此增加的復(fù)雜性和大小對(duì)于每一FIFO條目來(lái)說(shuō)是需要的,但不對(duì)準(zhǔn)存儲(chǔ)器存取指令(晚期將需要多個(gè)微操作跟蹤的僅有的指令)相對(duì)稀少。作為將指令跟蹤FIFO15設(shè)計(jì)成每個(gè)條目跟蹤多個(gè)微操作的替代方案,每一條目可僅跟蹤一個(gè)微操作。在此情況下,晚期未對(duì)準(zhǔn)存儲(chǔ)器存取指令將造成管線(和指令跟蹤FIFO15)沖洗出其后面的所有指令,在指令跟蹤FIFO15中分派對(duì)應(yīng)于兩個(gè)微指令的兩個(gè)條目,且重新取出并重新發(fā)出所有隨后指令。這導(dǎo)致顯著的性能和功率損失。除了指令跟蹤FIFO15之外,在管線中晚期可能不可用的未對(duì)準(zhǔn)存儲(chǔ)器指令所必需的另一資源是高速緩沖存儲(chǔ)器未中隊(duì)列29中的條目。當(dāng)數(shù)據(jù)高速緩沖存儲(chǔ)器中發(fā)生數(shù)據(jù)存取未中時(shí),可將所述存取放置在隊(duì)列29中以存取外部總線上的主存儲(chǔ)器。如果沒有隊(duì)列條目可用,那么管線必須停止。在存儲(chǔ)器存取指令的情況下,可在DCD級(jí)期間檢查高速緩沖存儲(chǔ)器未中隊(duì)列29,且如果條目可用,那么控制邏輯14允許指令前進(jìn),從而知道高速緩沖存儲(chǔ)器未中將不會(huì)使管線12停止。然而,如果不對(duì)準(zhǔn)存儲(chǔ)器存取指令晚期必須在管中產(chǎn)生額外微操作,以執(zhí)行額外存儲(chǔ)器存取,且如果高速緩沖存儲(chǔ)器中發(fā)生存儲(chǔ)器存取未中,那么需要第二高速緩沖存儲(chǔ)器未中隊(duì)列條目。由于在DCD管級(jí)中僅保留一個(gè),因而可能沒有足夠的隊(duì)列資源可用,從而造成管線12停止。根據(jù)本發(fā)明的一個(gè)實(shí)施例,在針對(duì)存儲(chǔ)器存取指令產(chǎn)生有效地址之前,預(yù)測(cè)存儲(chǔ)器存取指令中的數(shù)據(jù)未對(duì)準(zhǔn),且響應(yīng)于所述預(yù)測(cè)創(chuàng)建微操作。新的微操作執(zhí)行存取未對(duì)準(zhǔn)數(shù)據(jù)所需的第二存儲(chǔ)器存取。這允許早期在管線中(例如,在解碼指令之后立即)分派管線控制資源。再次參看圖2,一旦在42處解碼存儲(chǔ)器存取指令,未對(duì)準(zhǔn)預(yù)測(cè)器56就檢測(cè)所述指令。響應(yīng)于未對(duì)準(zhǔn)預(yù)測(cè),可立即創(chuàng)建第二微操作,如在IF鎖存器40處"重新循環(huán)"LD指令所指示。所述第二微操作將跟隨初級(jí)加載指令微操作通過(guò)管線,且將可用于在所預(yù)測(cè)的數(shù)據(jù)未對(duì)準(zhǔn)正確時(shí)執(zhí)行第二存儲(chǔ)器存取周期。額外的微操作實(shí)際上不需要執(zhí)行上文針對(duì)LD指令所描述的寄存器存取和地址產(chǎn)生,因?yàn)橐阎鎯?chǔ)器存取的地址與具有(例如)單字偏移的LD指令的地址是相同的。在50處通過(guò)LD指令進(jìn)行第一存儲(chǔ)器存取之后,如果未對(duì)準(zhǔn)預(yù)測(cè)是正確的,那么當(dāng)?shù)谝粩?shù)據(jù)存儲(chǔ)在MEM鎖存器52中時(shí),計(jì)算讀取未對(duì)準(zhǔn)數(shù)據(jù)所必需的第二存儲(chǔ)器存取的地址并將其存儲(chǔ)在EX2鎖存器48中。接著執(zhí)行第二存儲(chǔ)器存取,且從高速緩沖存儲(chǔ)器26或存儲(chǔ)器32處獲得第二數(shù)據(jù),且將其加載到MEM鎖存器52中。如果未對(duì)準(zhǔn)預(yù)測(cè)錯(cuò)誤,那么不執(zhí)行第二存儲(chǔ)器存取,且放棄所述額外的微操作。在管線停止的情況下,LD之后的指令可前進(jìn),從而消耗經(jīng)分派以用于第二微操作的資源并有效地將其從管線中移除。以下表3描繪其中指令i+3是被正確預(yù)測(cè)未對(duì)準(zhǔn)的未對(duì)準(zhǔn)存儲(chǔ)器存取指令的管線。<table>tableseeoriginaldocumentpage9</column></row><table><table>tableseeoriginaldocumentpage9</column></row><table>表3:具有正確預(yù)測(cè)的不對(duì)準(zhǔn)存儲(chǔ)器存取指令的代表性管線響應(yīng)于將指令解碼為L(zhǎng)D且預(yù)測(cè)未對(duì)準(zhǔn),在解碼管級(jí)處在時(shí)鐘周期5中產(chǎn)生第二微操作(i+3)2。如此早期產(chǎn)生微操作(在時(shí)鐘周期7處在EX2管級(jí)中計(jì)算LD指令的有效地址之前)確保足夠的管線控制資源可用于微操作(i+3)2。指令執(zhí)行的時(shí)序以另外方式與表2中的類似,其假定足夠的資源可用于在EX2管級(jí)中創(chuàng)建第二微操作(i+3)2。一個(gè)不同之是使指令i+4停止相同量,但停止在其執(zhí)行序列中較早發(fā)生,因?yàn)樵诠芫€中較早產(chǎn)生微操作(i+3)2。如果未對(duì)準(zhǔn)預(yù)測(cè)準(zhǔn)確,那么精確地分派正確的管線控制資源以用于執(zhí)行未對(duì)準(zhǔn)存儲(chǔ)器存取,且可將后續(xù)指令加載到管線中并執(zhí)行而不用擔(dān)心它們由于未對(duì)準(zhǔn)的緣故而被沖洗。如果未對(duì)準(zhǔn)預(yù)測(cè)錯(cuò)誤,那么處理器性能和功率管理降低。然而,性能的降級(jí)不是對(duì)稱的。以下表4描繪對(duì)于未對(duì)準(zhǔn)預(yù)測(cè)準(zhǔn)確性可能性的相關(guān)性能和功率影響。<table>tableseeoriginaldocumentpage9</column></row><table>表4:未對(duì)準(zhǔn)預(yù)測(cè)準(zhǔn)確性的影響經(jīng)正確預(yù)測(cè)的情況通過(guò)根據(jù)充分執(zhí)行指令需要的那樣精確地將所需數(shù)目的微操作分派到存儲(chǔ)器存取指令來(lái)提供最佳性能。上文描述了預(yù)測(cè)為對(duì)準(zhǔn)但實(shí)際上未對(duì)準(zhǔn)的錯(cuò)誤預(yù)測(cè)情況,其中直到針對(duì)存儲(chǔ)器存取指令產(chǎn)生有效地址(在上述實(shí)例中在EX2管級(jí)中)才檢驗(yàn)數(shù)據(jù)對(duì)準(zhǔn)。如所論述,如果足夠的管線控制資源可用,那么唯一的性能降級(jí)是完成所述存儲(chǔ)器存取指令之后的指令的等待時(shí)間增加,因?yàn)閯?chuàng)建了微操作以執(zhí)行第二存儲(chǔ)器存取操作。然而,如果沒有足夠的管線控制資源可用,那么將發(fā)生異常,且管線12將沖洗出加載于存儲(chǔ)器存取指令之后的所有指令,以釋放用以創(chuàng)建和管理額外微操作的必要資源。這是性能和功率優(yōu)化方面的最壞可能性。預(yù)測(cè)為未對(duì)準(zhǔn)但實(shí)際上對(duì)準(zhǔn)的錯(cuò)誤預(yù)測(cè)情況在管線12中在存儲(chǔ)器存取指令之后產(chǎn)生多余的微操作或"氣泡"。一旦產(chǎn)生存儲(chǔ)器存取指令的有效地址且控制邏輯14可檢測(cè)到其實(shí)際上是對(duì)準(zhǔn)的,那么可放棄所述多余的微操作。如果(例如)高速緩沖存儲(chǔ)器26中發(fā)生存儲(chǔ)器存取指令未中,從而迫使存取芯片外存儲(chǔ)器32,那么將停止管線12以等待完成存儲(chǔ)器存取操作。如果所產(chǎn)生的微操作后面的另一指令在EX1或EX2管級(jí)中不遭遇任何危險(xiǎn),那么其可前進(jìn)到恰好在存儲(chǔ)器存取指令后面,從而使得氣泡消失。在此情況下,盡管浪費(fèi)了某些功率來(lái)創(chuàng)建和管理微操作,但沒有性能降級(jí)。在高速緩沖存儲(chǔ)器26中發(fā)生存儲(chǔ)器存取指令命中(且管線12另外不停止)的更可能的情況下,氣泡將流動(dòng)通過(guò)管線12,從而造成單周期性能降級(jí)(假定每個(gè)管級(jí)一個(gè)周期)。然而,錯(cuò)誤預(yù)測(cè)的未對(duì)準(zhǔn)將不會(huì)造成異常或由于缺少必要控制資源而沖洗管線12??梢愿鞣N其它方式來(lái)執(zhí)行未對(duì)準(zhǔn)預(yù)測(cè),本文中揭示了某些方式。然而,本發(fā)明不限于所揭示的特定未對(duì)準(zhǔn)預(yù)測(cè)算法。預(yù)測(cè)(以任何方式)存儲(chǔ)器存取指令的未對(duì)準(zhǔn)和在產(chǎn)生指令的有效地址之前響應(yīng)于所述預(yù)測(cè)產(chǎn)生微操作以存取未對(duì)準(zhǔn)數(shù)據(jù)屬于本發(fā)明的范圍內(nèi)。在未對(duì)準(zhǔn)數(shù)據(jù)存取是常見的情況下,合理的微小未對(duì)準(zhǔn)預(yù)測(cè)算法可能只是假定未對(duì)準(zhǔn),且始終在針對(duì)存儲(chǔ)器存取指令產(chǎn)生有效地址之前產(chǎn)生額外微操作。這將以每個(gè)實(shí)際上對(duì)準(zhǔn)的存儲(chǔ)器存取一個(gè)周期的執(zhí)行性能沖擊為代價(jià)保證不會(huì)由于未對(duì)準(zhǔn)的緣故而造成異?;蚬芫€沖洗。根據(jù)本發(fā)明的一個(gè)實(shí)施例,"預(yù)測(cè)未對(duì)準(zhǔn)"模式由控制寄存器中的位界定。當(dāng)應(yīng)用預(yù)期較大數(shù)目的未對(duì)準(zhǔn)存儲(chǔ)器存取時(shí),其可通過(guò)設(shè)定所述位來(lái)啟用所述模式。當(dāng)設(shè)定所述位時(shí),預(yù)測(cè)所有存儲(chǔ)器存取為未對(duì)準(zhǔn)的。在另一實(shí)施例中,未對(duì)準(zhǔn)預(yù)測(cè)由存儲(chǔ)器存取指令的頁(yè)表中的屬性控制,使得將以相同方式(無(wú)論對(duì)準(zhǔn)還是未對(duì)準(zhǔn))預(yù)測(cè)來(lái)自單個(gè)頁(yè)的指令進(jìn)行的所有存儲(chǔ)器存取。大多數(shù)代碼可能不會(huì)遭遇如此容易地被識(shí)別為在特定代碼片段或存儲(chǔ)器區(qū)域內(nèi)的未對(duì)準(zhǔn)存儲(chǔ)器存取。因此,需要較復(fù)雜的未對(duì)準(zhǔn)預(yù)測(cè)方法——預(yù)測(cè)可被連續(xù)啟用但不盲目預(yù)測(cè)所有存儲(chǔ)器存取或特定頁(yè)上的所有存取將是未對(duì)準(zhǔn)的。舉例來(lái)說(shuō),在一個(gè)實(shí)施例中,未對(duì)準(zhǔn)預(yù)測(cè)可遵循堆棧指針對(duì)準(zhǔn)。如果堆棧指針未對(duì)準(zhǔn),那么預(yù)測(cè)存儲(chǔ)器存取是未對(duì)準(zhǔn)的。預(yù)測(cè)條件分支指令的行為的方法是眾所周知的,且許多方法可應(yīng)用于預(yù)測(cè)未對(duì)準(zhǔn)。舉例來(lái)說(shuō),過(guò)去的新近存儲(chǔ)器存取型式可以是未來(lái)存儲(chǔ)器存取的對(duì)準(zhǔn)的良好指示符。在一個(gè)實(shí)施例中,多個(gè)一位旗標(biāo)(通過(guò)存儲(chǔ)器存取指令的地址位索引)指示相應(yīng)指令進(jìn)行的最近存儲(chǔ)器存取的對(duì)準(zhǔn)——例如,"一"指示未對(duì)準(zhǔn)存取,且"零"指示對(duì)準(zhǔn)存取(或反之亦然)。未對(duì)準(zhǔn)旗標(biāo)可包括比較存儲(chǔ)器存取指令地址的全部或大部分以防止存儲(chǔ)器存取指令間的未對(duì)準(zhǔn)混淆(其可降低預(yù)測(cè)準(zhǔn)確性)的標(biāo)簽?;蛘撸瑸榱斯?jié)省資源,可僅使用地址的最低有效少數(shù)位將未對(duì)準(zhǔn)旗標(biāo)索引。在產(chǎn)生存儲(chǔ)器存取指令的有效地址之前,且優(yōu)選地盡可能早地,檢驗(yàn)相應(yīng)的未對(duì)準(zhǔn)旗標(biāo)。如果存儲(chǔ)器存取指令的最近執(zhí)行未對(duì)準(zhǔn),那么管線控制器可預(yù)測(cè)待決存取也將是未對(duì)準(zhǔn)的,且產(chǎn)生微操作以執(zhí)行第二存儲(chǔ)器存取。由于在指令解碼管級(jí)中首先知道指令(即,存儲(chǔ)器存取指令)的類型,因而優(yōu)選地在那里創(chuàng)建微操作。然而,可在管線中稍后創(chuàng)建微操作。在產(chǎn)生存儲(chǔ)器存取指令的有效地址之前響應(yīng)于未對(duì)準(zhǔn)預(yù)測(cè)進(jìn)行的任何微操作創(chuàng)建10均屬于本發(fā)明范圍內(nèi)。單個(gè)位未對(duì)準(zhǔn)旗標(biāo)的一個(gè)結(jié)果是,對(duì)準(zhǔn)存儲(chǔ)器存取指令流中的奇數(shù)未對(duì)準(zhǔn)存儲(chǔ)器存取指令將誤預(yù)測(cè)兩次——一次是在首次遭遇未對(duì)準(zhǔn)指令時(shí),且再次是在指令(其未對(duì)準(zhǔn)旗標(biāo)現(xiàn)被設(shè)定)的下一次對(duì)準(zhǔn)執(zhí)行時(shí)。此問(wèn)題的解決方案(在條件分支預(yù)測(cè)中也是已知的)是雙峰未對(duì)準(zhǔn)預(yù)測(cè)器,其包含通過(guò)存儲(chǔ)器存取指令地址索引的兩位飽和計(jì)數(shù)器的表。每一計(jì)數(shù)器具有四個(gè)狀態(tài)中的一者11-強(qiáng)未對(duì)準(zhǔn)10-弱未對(duì)準(zhǔn)01-弱對(duì)準(zhǔn)00-強(qiáng)對(duì)準(zhǔn)當(dāng)產(chǎn)生存儲(chǔ)器存取指令的有效地址時(shí),更新相應(yīng)的計(jì)數(shù)器。未對(duì)準(zhǔn)存儲(chǔ)器存取指令使?fàn)顟B(tài)朝向強(qiáng)未對(duì)準(zhǔn)遞增,且對(duì)準(zhǔn)存儲(chǔ)器存取指令使?fàn)顟B(tài)朝向強(qiáng)對(duì)準(zhǔn)遞減。此類雙峰計(jì)數(shù)器將僅對(duì)對(duì)準(zhǔn)存取流中的奇數(shù)未對(duì)準(zhǔn)存取誤預(yù)測(cè)一次,其代價(jià)是在未對(duì)準(zhǔn)存取流的開始處誤預(yù)測(cè)兩次??蓮臈l件分支預(yù)測(cè)借用的另一未對(duì)準(zhǔn)預(yù)測(cè)算法是局部未對(duì)準(zhǔn)預(yù)測(cè)器。局部未對(duì)準(zhǔn)預(yù)測(cè)器維持兩個(gè)表。第一表是局部未對(duì)準(zhǔn)歷史表。其通過(guò)存儲(chǔ)器存取指令的地址位被索引,且其記錄每一存儲(chǔ)器存取指令的n個(gè)最近執(zhí)行的對(duì)準(zhǔn)/未對(duì)準(zhǔn)歷史。另一表是型式歷史表。類似于雙峰預(yù)測(cè)器,此表含有雙峰計(jì)數(shù)器;然而,其索引是從第一表中的未對(duì)準(zhǔn)歷史中產(chǎn)生的。為了預(yù)測(cè)對(duì)準(zhǔn),查找未對(duì)準(zhǔn)歷史,且接著使用所述歷史來(lái)查找進(jìn)行未對(duì)準(zhǔn)預(yù)測(cè)的雙峰計(jì)數(shù)器。用于預(yù)測(cè)未對(duì)準(zhǔn)的又一選項(xiàng)是全局未對(duì)準(zhǔn)預(yù)測(cè)器,其利用許多存儲(chǔ)器存取的行為與其它新近存儲(chǔ)器存取的歷史極其相關(guān)的事實(shí)。全局未對(duì)準(zhǔn)預(yù)測(cè)器保持以所執(zhí)行的每個(gè)存儲(chǔ)器存取指令的新近未對(duì)準(zhǔn)歷史更新的單個(gè)移位寄存器,且使用此值將雙峰計(jì)數(shù)器的表索引。或者,所述雙峰計(jì)數(shù)器的表可用與存儲(chǔ)器存取指令的地址中的少數(shù)位鏈接的新近未對(duì)準(zhǔn)歷史來(lái)索引,這稱為gselect預(yù)測(cè)器。對(duì)于較小的表尺寸,gselect可比局部預(yù)測(cè)產(chǎn)生更準(zhǔn)確的結(jié)果。作為另一替代方案,存儲(chǔ)器存取指令地址可與全局歷史進(jìn)行異或運(yùn)算,而并非鏈接,這稱為gshare預(yù)測(cè)器。對(duì)于較大的表,gshare可比gselet產(chǎn)生更準(zhǔn)確的未對(duì)準(zhǔn)預(yù)測(cè)。即使gselect和gshare不如局部預(yù)測(cè)準(zhǔn)確,但它們可能出于實(shí)施原因而為優(yōu)選的。gselect和gshare對(duì)于每個(gè)對(duì)準(zhǔn)預(yù)測(cè)需要單次表查找,而局部預(yù)測(cè)需要連續(xù)的兩次表查找。1993年,ScottMcFarling在數(shù)字西方研究工作實(shí)驗(yàn)室技術(shù)說(shuō)明(DigitalWesternResearchLaboratoryTechnicalNote)TN_36,"CombiningBranchPredictors,,中提議組合分支預(yù)測(cè)器,所述文章全文以引用的方式并入本文中。根據(jù)本發(fā)明,McFarling所提議的技術(shù)可有利地應(yīng)用于預(yù)測(cè)未對(duì)準(zhǔn)存儲(chǔ)器存取的問(wèn)題,以借此在存儲(chǔ)器存取指令的有效地址產(chǎn)生之前產(chǎn)生管線微操作。在一個(gè)實(shí)施例中,經(jīng)組合的未對(duì)準(zhǔn)預(yù)測(cè)并行使用三個(gè)預(yù)測(cè)器雙峰、gshare,和類似雙峰預(yù)測(cè)器以基于每個(gè)存儲(chǔ)器存取指令來(lái)挑選使用雙峰或gshare中的哪一者。選擇預(yù)測(cè)器是另一種2位升/降飽和計(jì)數(shù)器,在此情況下,MSB選擇將使用的預(yù)測(cè)。在此情況下,每當(dāng)雙峰和gshare預(yù)測(cè)不一致時(shí)更新計(jì)數(shù)器,以贊同較為準(zhǔn)確的任何一個(gè)預(yù)測(cè)器。在另一實(shí)施例中,未對(duì)準(zhǔn)預(yù)測(cè)器可維持未對(duì)準(zhǔn)高速緩沖存儲(chǔ)器,其可為完全相關(guān)聯(lián)或設(shè)定相關(guān)聯(lián)的,且可通過(guò)存儲(chǔ)器存取指令地址的一部分或所述地址的與其它新近未對(duì)準(zhǔn)歷史(例如對(duì)于以上gselect和gshare參數(shù))鏈接或進(jìn)行異或運(yùn)算的一部分索引。在管線中早期,例如在指令取出管級(jí)期間(例如,在恰好知道指令是存儲(chǔ)器存取指令之前),可將高速緩沖存儲(chǔ)器索引。如果未對(duì)準(zhǔn)高速緩沖存儲(chǔ)器命中,那么存儲(chǔ)器存取最近為未對(duì)準(zhǔn)的,且可預(yù)測(cè)為未對(duì)準(zhǔn)。如果此高速緩沖存儲(chǔ)器存取未中,那么存儲(chǔ)器存取被預(yù)測(cè)為對(duì)準(zhǔn)的。向用于未預(yù)測(cè)為未對(duì)準(zhǔn)的存儲(chǔ)器存取指令的高速緩沖存儲(chǔ)器添加條目,且從用于預(yù)測(cè)為不對(duì)準(zhǔn)的對(duì)準(zhǔn)存儲(chǔ)器存取的高速緩沖存儲(chǔ)器中移除條目。各種其它未對(duì)準(zhǔn)預(yù)測(cè)算法是可能的。舉例來(lái)說(shuō),未對(duì)準(zhǔn)預(yù)測(cè)器可保持存儲(chǔ)器存取指令的對(duì)準(zhǔn)行為的詳細(xì)統(tǒng)計(jì),且逐個(gè)指令或全局地基于過(guò)去對(duì)準(zhǔn)經(jīng)歷的統(tǒng)計(jì)平均值而預(yù)測(cè)未對(duì)準(zhǔn)。類似地,未對(duì)準(zhǔn)預(yù)測(cè)器可維持n個(gè)最近存儲(chǔ)器存取指令的對(duì)準(zhǔn)的滾動(dòng)平均值。某些指令集結(jié)構(gòu)在操作碼中包括靜態(tài)預(yù)測(cè)位,其可由程序員基于他或她對(duì)應(yīng)用的特定認(rèn)識(shí)來(lái)指定。舉例來(lái)說(shuō),如果在"遇誤分支(branchonerror)"情形中使用分支且錯(cuò)誤相對(duì)稀少,那么程序員可靜態(tài)地預(yù)測(cè)那些分支為"不采用"。類似地,程序員可洞察到特定應(yīng)用的存儲(chǔ)器對(duì)準(zhǔn)行為。舉例來(lái)說(shuō),許多數(shù)據(jù)處理應(yīng)用利用設(shè)計(jì)周全且有序的數(shù)據(jù)結(jié)構(gòu),且將預(yù)期很少(如果有的話)的不對(duì)準(zhǔn)存儲(chǔ)器存取。另一方面,某些應(yīng)用可預(yù)期較大數(shù)目的不對(duì)準(zhǔn)數(shù)據(jù)存取。實(shí)例可包括通信程序從共享信道中的連續(xù)數(shù)據(jù)流中提取特定數(shù)據(jù),或數(shù)據(jù)獲得應(yīng)用響應(yīng)于異步觸發(fā)器記錄來(lái)自連續(xù)輸出的數(shù)據(jù)。在此類應(yīng)用中,啟用未對(duì)準(zhǔn)預(yù)測(cè)或者將未對(duì)準(zhǔn)預(yù)測(cè)偏置到較積極模式可改進(jìn)處理器性能和功率節(jié)省。根據(jù)本發(fā)明的一個(gè)實(shí)施例,程序員可經(jīng)由存儲(chǔ)器存取指令中的旗標(biāo)或一組不對(duì)準(zhǔn)存儲(chǔ)器存取指令來(lái)影響程序的未對(duì)準(zhǔn)預(yù)測(cè)行為。在一個(gè)實(shí)施例中,存儲(chǔ)器存取指令(例如,LD和ST指令)包括參數(shù)列表中的旗標(biāo),其指示應(yīng)執(zhí)行未對(duì)準(zhǔn)預(yù)測(cè)?;蛘?,指令集可包括分別針對(duì)可能未對(duì)準(zhǔn)的加載和存儲(chǔ)操作的新的指令(例如,LDMAL和STMAL)。此旗標(biāo)或新的指令向未對(duì)準(zhǔn)預(yù)測(cè)器56提供輸入以啟用存儲(chǔ)器對(duì)準(zhǔn)預(yù)測(cè),且在有效地址產(chǎn)生之前較早地產(chǎn)生微操作,以執(zhí)行額外存儲(chǔ)器存取周期來(lái)存取不對(duì)準(zhǔn)數(shù)據(jù)。在另一實(shí)施例中,未對(duì)準(zhǔn)預(yù)測(cè)旗標(biāo)或指令類型將未對(duì)準(zhǔn)預(yù)測(cè)器56置于一種模式中,在所述模式中與在沒有旗標(biāo)的情況下相比,其作出更積極的未對(duì)準(zhǔn)預(yù)測(cè)。舉例來(lái)說(shuō),旗標(biāo)或指令類型可將未對(duì)準(zhǔn)預(yù)測(cè)器從使用兩位雙峰飽和計(jì)數(shù)器(如上所述)切換為三位飽和計(jì)數(shù)器,其中八個(gè)狀態(tài)中的五個(gè)或六個(gè)狀態(tài)指示所預(yù)測(cè)的未對(duì)準(zhǔn)的程度。此類非對(duì)準(zhǔn)預(yù)測(cè)旗標(biāo)或指令類型的一個(gè)優(yōu)點(diǎn)是,由程序員來(lái)控制未對(duì)準(zhǔn)預(yù)測(cè),程序員依靠他或她對(duì)應(yīng)用行為的認(rèn)識(shí)能更好地預(yù)測(cè)何時(shí)未對(duì)準(zhǔn)預(yù)測(cè)可能引起處理器性能和功率管理改進(jìn)。盡管本文已相對(duì)于本發(fā)明的特定特征、方面和實(shí)施例描述了本發(fā)明,但將了解,在本發(fā)明的廣泛范圍內(nèi)可能作出許多變化、修改和其它實(shí)施例,且因此,應(yīng)將所有變化、修改和實(shí)施例視為屬于本發(fā)明范圍內(nèi)。因此,應(yīng)在所有方面將本發(fā)明實(shí)施例解釋為說(shuō)明性的而并非限制性的,且期望在所附權(quán)利要求書的含義和等效范圍內(nèi)的所有變化均包含于其中。權(quán)利要求一種在指令執(zhí)行管線中處理存儲(chǔ)器存取指令的方法,所述存儲(chǔ)器存取指令執(zhí)行第一存儲(chǔ)器存取,所述方法包含在獲得與有效存取器存取指令的產(chǎn)生相關(guān)聯(lián)的地址操作數(shù)之前,在所述指令執(zhí)行管線的解碼級(jí)期間,針對(duì)所述存儲(chǔ)器存取指令預(yù)測(cè)數(shù)據(jù)未對(duì)準(zhǔn),其中針對(duì)所述存儲(chǔ)器存取指令的預(yù)測(cè)數(shù)據(jù)未對(duì)準(zhǔn)包括在控制寄存器中設(shè)定未對(duì)準(zhǔn)預(yù)測(cè)比特,使得當(dāng)所述未對(duì)準(zhǔn)預(yù)測(cè)比特被設(shè)定時(shí),所有的存儲(chǔ)器存取指令被預(yù)測(cè)為是未對(duì)準(zhǔn)的;以及響應(yīng)于所述預(yù)測(cè),在所述管線中產(chǎn)生至少一個(gè)微操作,所述微操作針對(duì)未對(duì)準(zhǔn)的數(shù)據(jù)執(zhí)行第二存儲(chǔ)器存取。2.根據(jù)權(quán)利要求1所述的方法,其中在所述管線中產(chǎn)生至少一個(gè)微操作包含在指令解碼管級(jí)中產(chǎn)生所述微操作。3.根據(jù)權(quán)利要求1所述的方法,其中產(chǎn)生至少一個(gè)微操作包含針對(duì)所述微操作分派管線控制資源。4.一種管線處理器,其包含指令執(zhí)行管線,其包含多個(gè)管級(jí);未對(duì)準(zhǔn)預(yù)測(cè)器,其在所述指令執(zhí)行管線的解碼級(jí)期間經(jīng)配置以在獲得與有效存儲(chǔ)器存取指令的產(chǎn)生相關(guān)聯(lián)的地址操作數(shù)之前,產(chǎn)生存儲(chǔ)器存取指令將存取未對(duì)準(zhǔn)數(shù)據(jù)的預(yù)測(cè),其中所述未對(duì)準(zhǔn)預(yù)測(cè)器包括在控制寄存器中設(shè)定未對(duì)準(zhǔn)預(yù)測(cè)比特,使得當(dāng)所述比特被設(shè)置時(shí),所有的存儲(chǔ)器存取指令都被預(yù)測(cè)為是未對(duì)準(zhǔn)的;以及控制邏輯,其在針對(duì)所述存儲(chǔ)器存取指令產(chǎn)生有效地址之前,響應(yīng)于所述預(yù)測(cè)在所述管線中產(chǎn)生額外微操作,以執(zhí)行額外存儲(chǔ)器存取。5.根據(jù)權(quán)利要求4所述的處理器,其中所述額外微操作是在指令解碼管級(jí)中產(chǎn)生的。6.根據(jù)權(quán)利要求4所述的處理器,其中所述微操作占據(jù)至少一個(gè)所述管級(jí)。7.根據(jù)權(quán)利要求4所述的處理器,其中所述未對(duì)準(zhǔn)預(yù)測(cè)器包括存儲(chǔ)所述存儲(chǔ)器存取指令對(duì)準(zhǔn)歷史的存儲(chǔ)器。8.根據(jù)權(quán)利要求4所述的處理器,其進(jìn)一步包含指令執(zhí)行先進(jìn)先出(FIFO)緩沖器,且其中所述控制邏輯在對(duì)應(yīng)于所述額外微操作的所述指令執(zhí)行FIFO緩沖器中產(chǎn)生條目。全文摘要在指令執(zhí)行管線中,預(yù)測(cè)存儲(chǔ)器存取指令的未對(duì)準(zhǔn)?;谒鲱A(yù)測(cè),在所述存儲(chǔ)器存取指令的有效地址產(chǎn)生之前,在所述管線中產(chǎn)生額外微操作。所述額外微操作存取越過(guò)預(yù)定地址邊界的存儲(chǔ)器。預(yù)測(cè)所述未對(duì)準(zhǔn)且在所述管線中早期產(chǎn)生微操作確保足夠的管線控制資源可用于產(chǎn)生和跟蹤所述額外微操作,從而在所述資源在有效地址產(chǎn)生時(shí)不可用的情況下避免管線沖洗。所述未對(duì)準(zhǔn)預(yù)測(cè)可采用已知的條件分支預(yù)測(cè)技術(shù),例如旗標(biāo)、雙峰計(jì)數(shù)器、局部預(yù)測(cè)器、全局預(yù)測(cè)器和經(jīng)組合的預(yù)測(cè)器。未對(duì)準(zhǔn)預(yù)測(cè)器可由存儲(chǔ)器存取指令旗標(biāo)或未對(duì)準(zhǔn)指令類型啟用或偏置。文檔編號(hào)G06F9/312GK101694613SQ20091017884公開日2010年4月14日申請(qǐng)日期2006年2月16日優(yōu)先權(quán)日2005年2月17日發(fā)明者托馬斯·安德魯·薩托里烏斯,杰弗里·托德·布里奇斯,維克托·羅伯茨·奧格斯堡,詹姆斯·諾里斯·迪芬德爾費(fèi)爾申請(qǐng)人:高通股份有限公司;