專利名稱:一種組合指令的技術(shù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實(shí)施例涉及微處理器體系結(jié)構(gòu)。本發(fā)明的實(shí)施例尤其涉及使用其數(shù) 量要少于微處理器指令內(nèi)的微操作(uop)的數(shù)量來表示兩條或更多條微處理器指令的技術(shù)。
技術(shù)背景在典型的高性能超標(biāo)量微處理器中, 一種用于改善性能的技術(shù)是通過將一個或多個微操作("uop")轉(zhuǎn)換成一個可作為單個uop執(zhí)行的"融合"u叩來降低執(zhí) 行各種微處理器指令的uop數(shù)量。在本公開通篇使用的術(shù)語"uop"用于描述由指令解碼成的任何子指令或操作,以便處理器執(zhí)行由所述指令描述的所述操作?,F(xiàn)有的u叩融合技術(shù)通常用于組合由單條指令生成的u叩。此外,現(xiàn)有的某些 u叩融合技術(shù)可以在處理器流水線內(nèi)或者可以在這些uop被退回并提交給處理器狀 態(tài)之前解融合這些已融合的uop。在相應(yīng)指令退回之前正在解融合已融合的uop會 降低受益于u叩融合的某些性能。在任一情況下,現(xiàn)有的uop融合技術(shù)按照處理器和/或計算機(jī)系統(tǒng)性能來說在某些環(huán)境中仍是效率低下的。
本發(fā)明的實(shí)施例以實(shí)例的方式示出,并且不限于附圖所示的情況,在附圖中相同的編號指代相似的元素并且所述附圖包括圖l根據(jù)本發(fā)明的一個實(shí)施例示出了用于表示一種指令組合技術(shù)的邏輯元件。圖2是根據(jù)本發(fā)明的一個實(shí)施例示出了要被執(zhí)行以判定在程序順序中相鄰的 兩個微操作(uop)是否應(yīng)該融合的操作流程圖。圖3是根據(jù)本發(fā)明的一個實(shí)施例示出了要被執(zhí)行以判定在程序順序中不相鄰的兩個微操作(u叩)是否應(yīng)該融合的操作流程圖。
圖4是根據(jù)本發(fā)明的一個實(shí)施例示出了要被執(zhí)行以判定在程序順序中相鄰的 兩個微操作(uop)是否應(yīng)被退回的操作流程圖。圖5是根據(jù)本發(fā)明的一個實(shí)施例示出了要被執(zhí)行以判定在程序順序中不相鄰 的兩個微操作(uop)是否應(yīng)被退回的操作流程圖。圖6是在其中可以使用本發(fā)明一個實(shí)施例的具有點(diǎn)對點(diǎn)總線體系結(jié)構(gòu)的計算 機(jī)系統(tǒng)。圖7是在其中可以使用本發(fā)明一個實(shí)施例的具有共享總線體系結(jié)構(gòu)的計算機(jī) 系統(tǒng)。
具體實(shí)施方式
本發(fā)明的實(shí)施例涉及微處理器體系結(jié)構(gòu)。更具體地,本發(fā)明的實(shí)施例涉及使 用其數(shù)量要少于兩條或更多條微處理器指令中任何指令所包含數(shù)量的微操作 ("u叩")表示所述兩條或更多條指令或uop的技術(shù),其中所述微處理器以與執(zhí)行 和退回這些指令或uop本身所導(dǎo)致的處理器狀態(tài)實(shí)質(zhì)上相同的方式執(zhí)行并退回所 述uop。在一個實(shí)施例中,可以識別由單個uop表示的兩條指令,其中對該單個uop指令的執(zhí)行和退回會導(dǎo)致與執(zhí)行和退回所述兩條指令實(shí)質(zhì)上相同的處理器狀態(tài)。 在本發(fā)明的某些實(shí)施例中,在程序順序中彼此相鄰或不相鄰出現(xiàn)的兩條或更多條指令在它們適于組合的情況下都能被一個uop表示。在一個實(shí)施例中,如果與 第一條指令相關(guān)聯(lián)的第一uop的執(zhí)行結(jié)果可由與第二條指令相關(guān)聯(lián)的第二uop所使用,這些指令無論在程序順序中相鄰還是不相鄰地出現(xiàn)都適于組合。兩條指令的組合結(jié)果可由兩個uop的部分結(jié)果組成,例如可由第一 uop的寄存器值和第二 uop 的標(biāo)志組成。由于第二uop的標(biāo)志覆蓋了第一uop的標(biāo)志,因此就刪除該第一uop 的標(biāo)志。例如,相加兩個操作數(shù)的指令("add"指令)可用作將所述加法指令的 結(jié)果與另一個操作數(shù)相比較的另一條指令("cmp"指令)的源。因此在本發(fā)明的 一個實(shí)施例中,負(fù)責(zé)執(zhí)行所述加法操作的uop與負(fù)責(zé)執(zhí)行所述比較運(yùn)算的uop可由 執(zhí)行加法和比較兩種操作的一個uop表示。在另一個實(shí)施例中,在程序順序中彼此相鄰或不相鄰出現(xiàn)的多于兩條的指令 也可由單個uop表示。例如在一個實(shí)施例中,引起操作數(shù)值遞增的指令("inc" 指令)、cmp指令和基于cmp指令比較結(jié)果改變指令指針的指令("jump"指令)
可由單個uop表示以在執(zhí)行時完成所有三條指令,因?yàn)榕c這三條指令相關(guān)聯(lián)的uop 在功能上是相連的(例如,cmp指令使用的inc指令的輸出,而cmp指令的輸出又 為jump指令所用)。在此情況下,組合的結(jié)果由寄存器值組成,而任何標(biāo)志或目 標(biāo)地址則被存儲在其他地方。但在其它實(shí)施例中,這些標(biāo)志和目標(biāo)地址也可以連同 寄存器值一并存儲。通常,本發(fā)明的實(shí)施例有助于改進(jìn)實(shí)施例對應(yīng)的微處理器或計算機(jī)系統(tǒng)的性 能。例如,至少一個實(shí)施例可以允許對于現(xiàn)有技術(shù)相同的解碼資源量實(shí)現(xiàn)更多的指 令被解碼來增加指令解碼帶寬。本發(fā)明的某些實(shí)施例還可以進(jìn)一步改進(jìn)性能以增加 u叩重命名的帶寬、增強(qiáng)u叩保留和/或重排序能力、降低uop執(zhí)行延遲時間、減小 功耗或增加退回帶寬。從在此描述的本發(fā)明一個或多個實(shí)施例中可以認(rèn)識到的上述 的部分或全部優(yōu)勢。圖1根據(jù)本發(fā)明的一個實(shí)施例示出了用于表示一種指令組合技術(shù)的邏輯元件。 在其他實(shí)施例中,圖1可以包括其他邏輯元件。此外,圖1中的所述邏輯元件還可 以用于電子設(shè)備,諸如微處理器、微控制器或其他設(shè)備。圖l所示的邏輯元件還可 被分配給多個電子設(shè)備,諸如多個處理器。此外,圖1中的一個或多個邏輯元件還 可以表示硬件邏輯(諸如由互補(bǔ)金屬氧化物半導(dǎo)體(CMOS)門組成的邏輯)、軟 件(諸如由計算機(jī)可讀指令組成的程序例程)或者硬件邏輯和軟件的組合。更具體地,圖1示出了其中存儲有指令的指令隊列101,其中的指令在由解碼 器105-120解碼成u叩之后將由處理器執(zhí)行單元150執(zhí)行。圖1所示的一個實(shí)施例 是以自下而上的順序從指令隊列中讀取指令,而在其他實(shí)施例中,也可以其他的順 序讀取指令,例如自上而下。在一個實(shí)施例中,第一指令由解碼器105解碼而相應(yīng) 的uop則存儲在寄存器140內(nèi),第二指令由解碼器11O解碼而相應(yīng)的uop則存儲在 寄存器135內(nèi),第四指令由解碼器115解碼而相應(yīng)的uop則存儲在寄存器130內(nèi)并 且第五指令由解碼器120解碼而相應(yīng)的uop則存儲在寄存器125內(nèi)。在其它實(shí)施例 中,被解碼的uop可被存儲在其他存儲結(jié)構(gòu)中或被組合入一個或多個寄存器。在一個實(shí)施例中,發(fā)現(xiàn)第三指令與第二指令相關(guān)聯(lián)并且可由單個uop表示第 二和第三指令。例如在一個實(shí)施例中,第二指令可以是比較兩個值的指令("cmp" 指令),而第三指令可以是基于比較結(jié)果改變指令指針的指令(例如,"jump" 指令)(例如,如果cmp指令比較的值不相等就跳轉(zhuǎn),或"jne"指令)。在第二 指令和第三指令分別是cmp和jne指令的情況下, 一個實(shí)施例可以使用一個能夠執(zhí) 行這兩條指令的uop來表示這兩條指令,諸如比較兩個值并基于比較結(jié)果的否定 (off)行進(jìn)至條件分支(例如,"cmpjcc" uop),并且產(chǎn)生CMP的跳轉(zhuǎn)目標(biāo)和標(biāo)志。在此情況下就無需解碼第三指令,并且只需將該指令的跳轉(zhuǎn)目標(biāo)送至cmpjcc uop。在一個實(shí)施例中,對cmp指令的解碼就指示出下一條指令將會是某種跳轉(zhuǎn)指 令,因此就無需再對該跳轉(zhuǎn)指令進(jìn)行解碼。然而在其它實(shí)施例中,第二指令可以是 尚未設(shè)定后續(xù)指令的另一條指令,而必須被實(shí)際解碼。在此實(shí)例中,在表示第二和 第三指令的uop被確定之前,必須通過解碼邏輯發(fā)送該第三指令。在其它實(shí)施例中,由單個uop表示的兩條指令在指令隊列中不是彼此相鄰的, 而是由一條或多條指令隔開的。通常,本發(fā)明的實(shí)施例允許由少于兩條或多條指令中所含u叩數(shù)量的一個u叩 數(shù)量來表示所述的兩條或多條指令。因此,本發(fā)明的實(shí)施例基于對能夠與其他指令 組合并能由單個u叩或者至少比被組合指令所包括的uop數(shù)量要少的uop所表示的 一條或多條指令的識別,就能因?yàn)闊o需解碼一條或多條指令而增加可用解碼邏輯的 帶寬。重新參考圖1,存儲在獨(dú)立寄存器125-140中的u叩取決于存儲在指令隊列里 相應(yīng)的指令。例如在一個實(shí)施例中,第一和第四指令可以是從存儲器源中載入數(shù)據(jù) 的指令(例如,"load"指令)。因此,存儲在寄存器140和130內(nèi)的uop就可以 是對應(yīng)于load指令的uop (例如"load" uop)。類似的,第五指令可以是算術(shù)指 令,諸如乘以2或更多值的指令(例如,"mul"指令)。因此,存儲在寄存器125 內(nèi)的u叩就可以是對應(yīng)于mul指令的uop (例如"mul"uop)。因?yàn)樵谝粋€實(shí)施例 中,是通過它們可由一個uop表示(例如,"cmpjcc" uop)來確定第二和第三指 令相關(guān),所以寄存器135就包括被執(zhí)行時將執(zhí)行第二和第三兩條指令的uop。圖1還示出了其中存儲在寄存器125-140內(nèi)的uop可被排序和預(yù)定用于執(zhí)行單 元150的執(zhí)行的保留站145。更具體地,保留站可以存儲諸如cmpjcc u叩147的表 示一條或多條指令的uop直到其被送入執(zhí)行單元。在執(zhí)行單元執(zhí)行了該cmpjcc或 其他u叩之后,處理器狀態(tài)信息就必須改變并因此通過"退回(retiring)"該cmpjcc uop而能被其他電子設(shè)備和程序所見。因
的uop,所以必須以uop的數(shù)目猶如等于其表示指令的數(shù)目來反映uop的執(zhí)行的方式表示所得的狀態(tài)信息。在執(zhí)行表示兩條或多條指令的uop而導(dǎo)致錯誤、陷阱或幫助的實(shí)施例中,通 常需要確定該u叩的哪一部分導(dǎo)致錯誤、陷阱或幫助的產(chǎn)生,從而在退回期間保持 適當(dāng)?shù)臋C(jī)器狀態(tài)。例如在一個實(shí)施例中,頁錯誤僅由cmpjccuop的cmp部分引起。 在此情況下,頁錯誤服務(wù)例程就就可連同cmpjcc uop的cmp部分被執(zhí)行之前的狀 態(tài)信息被一并調(diào)用。在一個實(shí)施例中,可以使用本領(lǐng)域內(nèi)已知的技術(shù)來處理由 cmpjcc u叩的cmp部分引起的頁錯誤的情況。類似地在一個實(shí)施例中,陷阱通常 僅由cmpjccuop的jcc部分引起。在此情況下,服務(wù)例程就就可連同由cmpjccuop 完成所產(chǎn)生的機(jī)器狀態(tài)被一并調(diào)用以服務(wù)該陷阱。在一個實(shí)施例中,服務(wù)該陷阱的 技術(shù)可以是與服務(wù)未融合的jcc操作的那些已知的技術(shù)大致類似或相同的現(xiàn)有技 術(shù)。在此公幵中除非特別指出,通常由異常處理程序連同在產(chǎn)生錯誤的指令執(zhí)行 之前在程序順序中出現(xiàn)的指令執(zhí)行結(jié)果的狀態(tài)信息來服務(wù)錯誤指令。例如在一個實(shí) 施例中,如果出現(xiàn)頁錯誤,由執(zhí)行在產(chǎn)生頁錯誤的指令之前在程序順序中出現(xiàn)的指 令而產(chǎn)生的狀態(tài)信息被送至故障處理例程,從而能夠退回預(yù)期頁并重新執(zhí)行發(fā)生錯 誤的指令。另一方面,除非特別指出,通常由異常處理程序連同由執(zhí)行引發(fā)陷阱的指令 所產(chǎn)生的狀態(tài)信息來服務(wù)該引起陷阱情形的指令。例如在一個實(shí)施例中,如果出現(xiàn) 斷點(diǎn)調(diào)試陷阱,就退回引起該陷阱的所述指令并在服務(wù)例程被調(diào)用之前調(diào)撥相應(yīng)的 處理器狀態(tài)以服務(wù)該陷阱。在由uop表示兩條或多條指令并且該uop的各組成錯誤、陷阱助狀態(tài)并 非相互排斥的情況下,諸如由uop執(zhí)行多次jcc操作或cmp操作的情況下,可能無 法弄清恰好在該u叩執(zhí)行之前的狀態(tài)是否被用于uop的退回或者恰好在該u叩執(zhí)行 之后的狀態(tài)是否被用作服務(wù)陷阱、錯誤或幫助的正確狀態(tài)信息。在此情況下,就需 要調(diào)用一個特殊的服務(wù)例程以生成由該uop各組成操作單獨(dú)產(chǎn)生的條件。例如在一個cmpjcc uop表示比較和跳轉(zhuǎn)指令的實(shí)施例中,對應(yīng)于u叩的cmp 部分或該u叩的jcc部分的操作執(zhí)行結(jié)果都可能產(chǎn)生代碼段的無效。為了確定是哪 部分的操作引起代碼段無效并且確定應(yīng)該被提供給服務(wù)例程以糾正錯誤的正確狀
態(tài),首先就需要調(diào)用一個特殊服務(wù)例程以重新存儲該uop的cmp部分的狀態(tài)以確 定所述代碼段的無效是否由cmp操作產(chǎn)生。如果不是,就能推論出代碼段無效是 由uop的jcc部分引起的,于是就能夠連同執(zhí)行cmpjcc所產(chǎn)生的狀態(tài)信息而不是 cmpjcc uop的cmp和jcc部分之間的中間狀態(tài)來調(diào)用服務(wù)例程以處理該無效。如果錯誤或其他條件是由表示兩條或多條指令的uop的全部兩個(或者多個, 在uop表示多于兩條指令的情況下)組成操作的執(zhí)行所產(chǎn)生的,則可通過獨(dú)立執(zhí)行 各組成操作而非執(zhí)行表示兩條或多條指令的uop來確定導(dǎo)致該條件的u叩部分。盡 管如此,由執(zhí)行表示兩條或多條指令的uop的兩個或多個組成操作的結(jié)果而出現(xiàn)多 于一個條件的情況十分罕見。如下將參考圖2、 3、 4和5來描述如何執(zhí)行本發(fā)明至少一個實(shí)施例的各個方 面。也可使用參考圖2、 3、 4和5而明確討論的技術(shù)之外的其他技術(shù)來實(shí)現(xiàn)本發(fā)明 其他實(shí)施例的相應(yīng)方面。此外,如下參考圖2、 3、 4和5的某些討論示出了在其中 組合兩條指令并由至少一個融合uop來表示的至少一個實(shí)施例的各個方面。然而, 在其它實(shí)施例中,也可將如下參考圖2、 3、 4和5的描述應(yīng)用于在其中組合多于兩 條指令并由一個或多個融合u叩表示的實(shí)施例。圖2是根據(jù)本發(fā)明的一個實(shí)施例示出了要被執(zhí)行以判定對應(yīng)于程序順序中相 鄰指令的兩個uop是否應(yīng)該被融合的操作流程圖。在操作201判定所述兩個u叩 是否適于融合。在一個實(shí)施例中,若一u叩的輸出是要被融合的其他uop的來源, 則所述的兩個或多個uop就適于融合。如果不適合,則在操作210處就不融合這些 uop。如果適合,就在操作205判定兩個uop所使用的寄存器是否相容。在一個實(shí) 施例中,若兩個u叩的寄存器是用于這兩個uop的同一目的寄存器,即在該對u叩 的第二 uop的目的寄存器蓋寫第一 u叩的目的寄存器或者u叩之一不具有目的寄存 器因此任一uop都可使用該目的寄存器的情況下,這些寄存器相容。如果這些寄存 器不相容,則在操作215處就不融合這些uop。如果兩個uop的寄存器相容,則在 操作220判定兩個uop的標(biāo)志目標(biāo)是否相容。在一個實(shí)施例中,如果兩個u叩都改 寫相同的標(biāo)志,這些標(biāo)志目標(biāo)相容,即在來兩個uop的第二u叩是最后更新標(biāo)志或 者uop中只有一個更新標(biāo)志字段。如果兩個uop的標(biāo)志目標(biāo)不相容,則在操作225 處就不融合這些uop。如果所述標(biāo)志目標(biāo)相容,則在操作230判定這兩個uop的源操作數(shù)是否相容。
在一個實(shí)施例中,如果來自這兩個uop的寄存器操作數(shù)未溢出可用于存儲所述源操 作數(shù)的寄存器、即時/置換值未溢出可用存儲,同時由第一uop轉(zhuǎn)發(fā)給第二u叩的結(jié)果可被隱含地或顯式地處理,則這些源操作數(shù)相容。如果這些源操作數(shù)不相容,則在操作235處就不融合這些uop。如果這些源操作數(shù)相容,則在操作240判定這兩個uop是否對應(yīng)于在程序順 序中彼此相鄰的指令。如果是,就在操作245使用分別執(zhí)行所述兩個指令的至少兩 個uop功能的單個融合uop來表示兩個指令。否則,在操作250處就不融合這些 uop。圖3是示出了可用于本發(fā)明一個實(shí)施例的操作的流程圖,在該實(shí)施例中的兩 個或多個uop對應(yīng)于在程序順序中不相鄰的指令。在一個實(shí)施例中,所述流程圖示 出了結(jié)合在程序順序中由一個或多個中間uop隔開的第一和第二uop的實(shí)施例而使 用的操作。例如,在操作301判定中間uop是否要讀取目標(biāo)寄存器,其中這些寄存 器含有在程序順序中要被融合的第一 uop的結(jié)果。如果是,則在操作305處就不融 合第一和第二 uop。如果中間uop不讀取含有要來自在程序順序中要被融合的第一 uop的結(jié)果的 目標(biāo)寄存器,就在操作310判定在程序順序中要被融合的所述第一 u叩寫入的標(biāo) 志是否會被中間uop讀取。如果是,則在操作315處就不融合這些uop。如果在程 序順序中要被融合的所述第一 uop的標(biāo)志不由中間uop讀取,則隨后在操作320 就判定所述中間uop是否要寫入任何用來為在程序順序中要被融合的所述第二 uop 存儲源操作數(shù)的任何寄存器。如果是,則在操作325處就不融合這些uop。如果中間uop沒有寫入任何用來為在程序順序中要被融合的所述第二 uop存 儲源操作數(shù)的寄存器,則隨后在操作330處確定所述中間uop是否寫入任何可由在 程序順序中要被融合的所述第二uop讀取的標(biāo)志。如果是,則在操作335處就不融 合第一和第二 u叩。但若所述中間值沒有寫入任何可由在程序順序中要被融合的所 述第二 uop讀取的標(biāo)志,隨后就在操作340處確定所述中間uop是否要在第二 uop 將要存儲數(shù)據(jù)的任何標(biāo)志或寄存器中存儲數(shù)據(jù)。如果不是,則在操作345處就不融 合第一禾口第二 uop。如果是,則在操作350處判定由所述中間uop存儲的數(shù)據(jù)是否會被另一個中 間uop讀取。如果是,則隨后在操作355處就不融合第一和第二u叩。如果不是,
隨后就在操作360處融合所述第一和第二 uop并可忽略要在第二 uop將要存儲數(shù)據(jù) 的任何標(biāo)志或寄存器中存儲數(shù)據(jù)的中間uop。在某些實(shí)施例中,中間uop可被標(biāo)記 為"非寫入"中間u叩,從而為程序或邏輯指明可忽略所述中間值并可融合所述第 一禾口第二 uop。圖4是根據(jù)本發(fā)明的一個實(shí)施例示出了要被執(zhí)行以判定對應(yīng)于程序順序中相 鄰指令的兩個uop如何被退回的操作流程圖。在操作401,判定對由至少一個融合 uop表示的組合指令的執(zhí)行是否導(dǎo)致了陷阱或錯誤條件。如果不是,隨后就在操作 405處退回所述組合指令并將程序順序中組合指令中的最末條的狀態(tài)提交給處理 器體系結(jié)構(gòu)。如果出現(xiàn)了錯誤或陷阱,就在操作410確定錯誤的產(chǎn)生是否是因?yàn)閳?zhí) 行了程序順序中組合指令中的第一條而引起的。如果是,則在操作420處使用由執(zhí) 行程序順序中組合指令中的第一條而產(chǎn)生的狀態(tài)信息來調(diào)用故障處理例程。如果不 是,就在操作425處確定是否作為執(zhí)行程序順序中組合指令中的第二條的結(jié)果產(chǎn)生 了陷阱。如果是,就在操作430使用由執(zhí)行程序順序中組合指令中的第二條而產(chǎn)生 的狀態(tài)信息來調(diào)用陷阱處理例程。如果不是,則可能已經(jīng)出現(xiàn)了作為執(zhí)行程序順序中組合指令中的第一條的結(jié) 果的陷阱或者出現(xiàn)了作為執(zhí)行程序順序中組合指令中的第二條的結(jié)果的錯誤。另外 也可能會出現(xiàn)多個異常,從而不能確定正確的結(jié)果狀態(tài)。于是在操作435處,諸如 在處理器固件中實(shí)現(xiàn)的那樣("ucode"),軟件例程可重建由執(zhí)行第一指令產(chǎn)生 的狀態(tài),從而就能退回所述第一指令。由于所述第一u叩的結(jié)果(標(biāo)志和目標(biāo)寄存 器)可用,因此就可能實(shí)現(xiàn)以上描述。在一個實(shí)施例中,ucode可以確定通過執(zhí)行由一個或多個融合uop表示的組合 指令中第一指令產(chǎn)生的異常情形,并將其列入優(yōu)先。此外,在重建執(zhí)行所述組合指 令中的第一條所產(chǎn)生的狀態(tài)之后,對所述組合指令中的第一條的退回就會引起對錯 誤或陷阱處理例程的調(diào)用。在一個實(shí)施例中,如果所述組合指令中的第一條指令引 起一陷阱,就可使用上述ucode例程確定執(zhí)行第一和第二組合指令之間形成的處理 器狀態(tài)("中間"狀態(tài))。另一方面,如果執(zhí)行組合指令中的第一條指令沒有產(chǎn)生 異常狀態(tài)并且從組合指令中的第二條指令產(chǎn)生的異常狀態(tài)是模糊的,則ucode就重 新執(zhí)行所述組合指令中的第二條指令并以與猶如分別執(zhí)行組合指令相同的方式響 應(yīng)異常。 圖5是根據(jù)本發(fā)明的一個實(shí)施例示出了要被執(zhí)行以確定對應(yīng)于程序順序中不相鄰指令的兩個uop如何被退回的操作流程圖。在操作501,確定對由至少一個融 合uop表示的組合指令的執(zhí)行是否導(dǎo)致了陷阱或錯誤。如果沒有,就在操作510 處使用由執(zhí)行程序順序中組合指令中的最末條指令所產(chǎn)生的狀態(tài)信息退回所述組 合指令。如果有,隨后就在操作515調(diào)用異常處理例程。在一個實(shí)施例中,異常處 理例程可以從所述組合指令中帶有適當(dāng)機(jī)構(gòu)(諸如,標(biāo)志)的第一條指令中重新啟 動對所述組合指令的執(zhí)行以避免將所述組合指令當(dāng)作融合u叩而再次執(zhí)行。在一個 實(shí)施例中,所述組合指令的第一條指令的完成會帶有錯誤或陷阱,而可使用錯誤或 陷阱處理例程來對上述錯誤或陷阱進(jìn)行處理。另外,如果錯誤是因?yàn)閳?zhí)行在程序順 序中被融合的uop之間出現(xiàn)的中間u叩的結(jié)果而出現(xiàn)的,就能僅簡單退回所述組合 指令中的第一條指令。圖6示出了其中可使用本發(fā)明一個實(shí)施例的點(diǎn)對點(diǎn)(PtP)計算機(jī)系統(tǒng)。更具 體地,圖6示出了其中通過多個點(diǎn)對點(diǎn)接口互連處理器、存儲器和輸入/輸出設(shè)備 的系統(tǒng)。圖6中的系統(tǒng)可以包括多個處理器,但為了顯示的明晰僅示出了兩個處理器 670和680。處理器670和680分別包括各自與存儲器62和64相連的本地存儲器 控制集線器(MCH) 672和682。處理器670和680可以使用PtP接口電路678和 688經(jīng)由點(diǎn)對點(diǎn)(PtP)接口 650交換數(shù)據(jù)。處理器670和680可以經(jīng)由獨(dú)立的PtP 接口 652和652使用點(diǎn)對點(diǎn)接口電路676、694、686和698與芯片組690交換數(shù)據(jù)。 芯片組690還可以經(jīng)由高性能圖形接口 639與高性能圖形電路638交換數(shù)據(jù)。本發(fā)明的至少一個實(shí)施例可以位于圖6每個PtP總線代理中的處理核內(nèi)。而 本發(fā)明的其它實(shí)施例則可位于圖6系統(tǒng)中的其他電路、邏輯單元或設(shè)備內(nèi)。此外, 還可將本發(fā)明的其它實(shí)施例分配給圖6所示的各電路、邏輯單元或設(shè)備。圖7示出了其中可使用本發(fā)明一個實(shí)施例的正面總線(front-side-bus) (FSB) 計算機(jī)系統(tǒng)。處理器705訪問一級(Ll)高速緩存710和主存儲器715中的數(shù)據(jù)。 在本發(fā)明的其它實(shí)施例中,高速緩存具有二級(L2)高速緩存或位于計算機(jī)系統(tǒng) 存儲器層次結(jié)構(gòu)中的其他存儲器。此外在某些實(shí)施例中,圖7的計算機(jī)系統(tǒng)同時包 括Ll高速緩存和L2高速緩存,它們組成了在其中可在Ll和L2高速緩存之間共 享相干數(shù)據(jù)的相容高速緩存分級結(jié)構(gòu)。在其他實(shí)施例中,可以存在多于1高速緩存
的分級結(jié)構(gòu)。在圖7的處理器中示出了的是本發(fā)明的一個實(shí)施例706。而本發(fā)明的其它實(shí)施例則可在本系統(tǒng)內(nèi)的其他設(shè)備(諸如圖形控制器)中實(shí)現(xiàn),或者被分配給系統(tǒng)中的 硬件、軟件或它們的組合。所述主存儲器可由各種存儲器源實(shí)現(xiàn),諸如包括動態(tài)隨機(jī)存取存儲器(DRAM)、硬盤驅(qū)動器(HDD) 720或者位于經(jīng)由網(wǎng)絡(luò)接口 730的連接的包含各 種存儲設(shè)備和技術(shù)的遠(yuǎn)程計算機(jī)系統(tǒng)內(nèi)的存儲器源。高速緩存可以位于處理器內(nèi)或 非常接近處理器,諸如位于處理器的局域總線707上。此外,高速緩存還可以包括 相對較快的存儲器單元,諸如六-晶體管(6T)單元或者大致等于或快于存取速度 的其他存儲器單元。其中或者至少相關(guān)聯(lián),每個總線代理是本發(fā)明的至少一個實(shí)施 例706,以便于在所述總線代理之間迅速存儲操作。可以使用互補(bǔ)金屬氧化物半導(dǎo)體(CMOS)電路和邏輯器件(硬件)實(shí)現(xiàn)本發(fā) 明實(shí)施例的各個方面,同時可使用存儲在機(jī)器可讀介質(zhì)上的指令(軟件)執(zhí)行其他 方面,其中上述軟件可由處理器執(zhí)行從而引發(fā)本發(fā)明一個實(shí)施例的執(zhí)行。此外,本 發(fā)明的某些實(shí)施例可以在硬件中獨(dú)立執(zhí)行而其他實(shí)施例則可在軟件中獨(dú)立執(zhí)行。雖然本發(fā)明業(yè)己參考了示出的實(shí)施例,但是本說明書并不以限定的方式進(jìn)行 解釋。所示實(shí)施例的各種修改及其其他實(shí)施例對本領(lǐng)域普通技術(shù)人員來說都是顯而 易見的,并且位于本發(fā)明的精神和范圍內(nèi)。
權(quán)利要求
1.一種裝置,包括存儲由單個微操作(uop)表示的多條指令的存儲單元,其中所述多條指令中僅有一條要被解碼成一個或多個uop。
2. 如權(quán)利要求l所述的裝置,其特征在于,所述多條指令中第一條指令的執(zhí)行結(jié)果的目標(biāo)存儲位置是所述多條指令中第二條指令的操作數(shù)的源存儲位置。
3. 如權(quán)利要求2所述的裝置,其特征在于,所述多條指令中的第一條和第二 條指令在程序順序中彼此相鄰出現(xiàn)。
4. 如權(quán)利要求2所述的裝置,其特征在于,所述多條指令中的第一條和第二 條指令在程序順序中彼此不相鄰出現(xiàn)。
5. 如權(quán)利要求2所述的裝置,其特征在于,所述單個uop被按順序退回以保 持將要執(zhí)行所述單個u叩的處理器內(nèi)部的正確狀態(tài)。
6. 如權(quán)利要求l所述的裝置,其特征在于,還包括存儲與所述單個uop相關(guān) 聯(lián)的操作數(shù)、存儲器偏移量和分支目標(biāo)的保留站。
7. 如權(quán)利要求6所述的裝置,其特征在于,還包括執(zhí)行所述單個uop的執(zhí)行
8. 如權(quán)利要求7所述的裝置,其特征在于,還包括將所述單個uop的執(zhí)行結(jié) 果狀態(tài)信息提交至機(jī)器狀態(tài)的退回單元。
9. 一種方法,包括在解碼兩條或多條指令中任一條指令之前確定所述兩條或多條指令是否可由爭個微操作(U0p)表示; 使用單個uop表示所述兩條或多條指令。
10. 如權(quán)利要求9所述的方法,其特征在于,所述確定包括檢査所述兩條或 多條指令中第一條指令的源操作數(shù)存儲位置和所述兩條或多條指令中第二條指令 的結(jié)果目標(biāo)存儲位置之間的關(guān)系。
11. 如權(quán)利要求IO所述的方法,其特征在于,還包括使用單個uop表示兩條 或多條指令
12. 如權(quán)利要求11所述的方法,其特征在于,還包括僅解碼所述兩條或多條 指令中的一條指令。
13. 如權(quán)利要求12所述的方法,其特征在于,包括重新排列所述單個uop相 對于其執(zhí)行可能會導(dǎo)致不正確機(jī)器狀態(tài)的其他uop的順序。
14. 如權(quán)利要求13所述的方法,其特征在于,還包括如果執(zhí)行所述單個u叩 會導(dǎo)致錯誤、幫助和陷阱情形之一的情況調(diào)用服務(wù)例程以產(chǎn)生正確的機(jī)器狀態(tài)。
15. 如權(quán)利要求14所述的方法,其特征在于,所述服務(wù)例程使用恰好在執(zhí)行 所述單個uop之前的uop執(zhí)行結(jié)果的狀態(tài)信息。
16. 如權(quán)利要求14所述的方法,其特征在于,所述服務(wù)例程使用所述單個uop 執(zhí)行結(jié)果的狀態(tài)信息。
17. 如權(quán)利要求14所述的方法,其特征在于,所述服務(wù)例程使用與所述兩條 或多條指令的程序順序中的第一條指令相對應(yīng)的uop執(zhí)行結(jié)果的狀態(tài)信息。
18. —種系統(tǒng),包括;存儲由單個微操作(UOp)表示的兩條或多條指令的存儲器單元; 僅解碼所述兩條或多條指令中一條指令的解碼邏輯;在由所述解碼邏輯解碼兩條或多條指令中所述一條指令之前確定所述兩條或多條指令是否由單個uop表示的第一邏輯。
19. 如權(quán)利要求18所述的系統(tǒng),其特征在于,還包括執(zhí)行所述單個u叩并退 回所述單個uop以保持正確處理器狀態(tài)的處理器。
20. 如權(quán)利要求18所述的系統(tǒng),其特征在于,還包括與所述存儲器單元耦合 的音頻設(shè)備。
21. 如權(quán)利要求19所述的系統(tǒng),其特征在于,所述處理器包括存儲在被所述 解碼邏輯解碼之前彼此相鄰的兩條或多條指令的指令隊列。
22. 如權(quán)利要求19所述的系統(tǒng),其特征在于,所述處理器包括存儲在被所述 解碼邏輯解碼之前彼此不相鄰的兩條或多條指令的指令隊列。
23. 如權(quán)利要求18所述的系統(tǒng),其特征在于,所述兩條或多條指令包括比較 兩個操作數(shù)的第一指令以及響應(yīng)于所述兩個操作數(shù)的比較結(jié)果而改變指令指針的第二指令。
24. 如權(quán)利要求18所述的系統(tǒng),其特征在于,所述兩條或多條指令包括生成 第 和第二操作數(shù)之和的第一指令以及將所得和與第三操作數(shù)比較的第二指令。
25. 如權(quán)利要求18所述的系統(tǒng),其特征在于,所述第一邏輯包括至少一條指 令,其中當(dāng)所述指令被處理器執(zhí)行時,會引發(fā)所述處理器確定所述兩條或多條指令 是否要由單個u叩表示。
26. -種具有一組指令存儲其上的機(jī)器可讀介質(zhì),當(dāng)機(jī)器執(zhí)行所述指令時會 導(dǎo)致所述機(jī)器執(zhí)行如下方法- 確定執(zhí)行由單個微操作(uop)表示的兩條或多條指令是否會導(dǎo)致錯誤、輔助 和陷阱之一的情形;僅在未出現(xiàn)上述情形時才存儲所述單個U叩執(zhí)行結(jié)果的機(jī)器狀態(tài)。
27. 如權(quán)利要求26所述的機(jī)器可讀介質(zhì),其特征在于,如果出現(xiàn)的情形之一 是執(zhí)行對應(yīng)于所述兩條或多條指令中第一條而非兩條或多條指令中第二條的操作 所得的結(jié)果,就存儲對應(yīng)于所述兩條或多條指令中第一條指令操作結(jié)果的機(jī)器狀 態(tài)。
28. 如權(quán)利要求26所述的機(jī)器可讀介質(zhì),其特征在于,如果出現(xiàn)的情形之一 是執(zhí)行對應(yīng)于所述兩條或多條指令中第二條操作所得的結(jié)果,就存儲對應(yīng)于所述兩 條或多條指令中第二條指令操作結(jié)果的機(jī)器狀態(tài)。
29. 如權(quán)利要求26所述的機(jī)器可讀介質(zhì),其特征在于,如果出現(xiàn)的情形之一是執(zhí)行對應(yīng)r所述兩條或多條指令中的第- 一條和第二條操作所得的結(jié)果,就單獨(dú)執(zhí)行所述第 一和第二條指令以代替執(zhí)行所述單個uop。
30. 如權(quán)利要求26所述的機(jī)器可讀介質(zhì),其特征在于,還包括在存儲所述機(jī) 器狀態(tài)之后退回所述兩條或多條指令的第一和第二指令。
全文摘要
一種微操作(uop)融合技術(shù)。更具體地,本發(fā)明的實(shí)施例涉及了將源自兩條或多條指令的兩個或多個uop相融合的技術(shù)。
文檔編號G06F9/30GK101110017SQ200610111159
公開日2008年1月23日 申請日期2006年8月8日 優(yōu)先權(quán)日2005年8月9日
發(fā)明者A·雷波韋茨, G·普瑞布什, I·奧澤爾, I·阿乃提, R·瓦倫蒂恩, Z·司珀勃 申請人:英特爾公司