專(zhuān)利名稱:用于跟蹤完成表中更大量未完成指令的方法和處理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器領(lǐng)域,更具體說(shuō),是涉及一種完成表,用于跟蹤更大量的未完成指令。
背景技術(shù):
如果微處理器(“處理器”)能在每一時(shí)鐘周期內(nèi)完成多項(xiàng)指令,該微處理器被分類(lèi)為超級(jí)標(biāo)量的。超級(jí)標(biāo)量處理器的體系結(jié)構(gòu),利用處理器內(nèi)多個(gè)并行處理單元,能在每一時(shí)鐘周期內(nèi)完成更多的指令。這些處理單元一般包括多個(gè)并行操作的執(zhí)行單元、用于向執(zhí)行單元發(fā)送指令和數(shù)據(jù)的調(diào)度單元、和為執(zhí)行單元預(yù)裝入指令的重命名緩沖器(重命名寄存器)。這些處理單元還可以包括,含有用于跟蹤指令和使指令退役的(“完成表”)。例如,完成單元可以對(duì)指令何時(shí)已經(jīng)“完成”保持跟蹤。當(dāng)一條指令已經(jīng)執(zhí)行并處于任何例外都不會(huì)再發(fā)布該指令的狀態(tài),該指令可以說(shuō)被“完成”。
在典型的超標(biāo)量處理器中,從指令高速緩沖存儲(chǔ)器檢索多條指令,并放進(jìn)隊(duì)列,通常稱為指令隊(duì)列。在進(jìn)入隊(duì)列之后,由調(diào)度單元把指令向各個(gè)執(zhí)行單元發(fā)布。在執(zhí)行接收的指令時(shí)。執(zhí)行單元可以向完成單元發(fā)送指示,表明該接收的指令的執(zhí)行。這一信息可以存儲(chǔ)在完成表中。然后,完成單元完成該指令,或使該指令退役,并向其余執(zhí)行單元發(fā)送完成信號(hào),使已結(jié)束的數(shù)據(jù)寫(xiě)回構(gòu)建的寄存器。
完成表的大小與被跟蹤的未完成指令數(shù)對(duì)應(yīng)。例如,被跟蹤的未完成指令數(shù)越大,完成表的大小越大。但是,完成表的大小越大,消耗的功率越多和使用更大的硅片面積。雖然較小的完成表縮減硅片面積和功耗,但跟蹤的未完成指令變少,性能也隨之下降。
因此,本領(lǐng)域需要能跟蹤更大量未完成指令,但不增加它的大小的完成表。
發(fā)明內(nèi)容
上面列舉的問(wèn)題,通過(guò)能跟蹤完成表每一表目中未完成指令的連續(xù)數(shù),例如超高速緩沖存儲(chǔ)器一行的長(zhǎng)度,借助只存儲(chǔ)該表目中未完成指令連續(xù)數(shù)的第一個(gè)的有效地址和標(biāo)識(shí)(“ITAG”),至少在一些實(shí)施例中已部分被解決。于是,該完成表能跟蹤更大量未完成指令,但不增加它的大小。
在本發(fā)明的一個(gè)實(shí)施例中,一種在完成表中跟蹤更大量未完成指令的方法,可以包括向第一和第二執(zhí)行單元發(fā)布指令的步驟。本方法還可以包括,在第一和第二執(zhí)行單元之一上,選擇已結(jié)束的指令或現(xiàn)役的指令之一的標(biāo)識(shí)。本方法還可以包括,使用被選擇指令的標(biāo)識(shí),計(jì)算下一條要完成的指令的標(biāo)識(shí)。本方法還可以包括,在完成表的表目中,選擇未完成指令連續(xù)數(shù)的第一個(gè)的指令地址和標(biāo)識(shí)。本方法還可以包括,使用下一條要完成的指令及被選擇的指令的標(biāo)識(shí),和完成表的表目中未完成指令連續(xù)數(shù)的第一個(gè)的標(biāo)識(shí),計(jì)算下一條要完成的指令的指令地址。
在本發(fā)明的另一個(gè)實(shí)施例中,完成表可以包括多個(gè)表目,其中該多個(gè)表目的每一個(gè),跟蹤一個(gè)未完成指令的連續(xù)數(shù)。此外,該多個(gè)表目的每一個(gè),可以用于存儲(chǔ)未完成指令連續(xù)數(shù)的第一個(gè)的指令地址和標(biāo)識(shí)。
前面很一般地列舉了本發(fā)明的一個(gè)或多個(gè)實(shí)施例的特征和技術(shù)優(yōu)點(diǎn),是為了對(duì)本發(fā)明下面的詳細(xì)說(shuō)明有更好的理解。本發(fā)明另外的特征及優(yōu)點(diǎn)將在本文后面說(shuō)明,這些特征及優(yōu)點(diǎn)構(gòu)成本發(fā)明權(quán)利要求書(shū)的主題。
當(dāng)結(jié)合下面的附圖,閱讀后面的詳細(xì)說(shuō)明時(shí),能夠獲得對(duì)本發(fā)明更好的理解,附圖有圖1畫(huà)出一種計(jì)算機(jī)系統(tǒng)的本發(fā)明的實(shí)施例;
圖2畫(huà)出一種處理器的本發(fā)明的實(shí)施例;圖3A和3B是一種方法的流程圖,用于按照本發(fā)明的一個(gè)實(shí)施例,計(jì)算下一條要完成的指令的有效地址和標(biāo)識(shí);和圖4是一種方法的流程圖,用于按照本發(fā)明的一個(gè)實(shí)施例,選擇適當(dāng)指令的標(biāo)識(shí),以便為非順序的處理器計(jì)算下一條要完成的指令的標(biāo)識(shí)。
具體實(shí)施例方式
本發(fā)明包括一種方法、完成表、和處理器,用于跟蹤完成表中更大量的未完成指令。在本發(fā)明的一個(gè)實(shí)施例中,完成表可以包括多個(gè)表目,其中每一個(gè)表目跟蹤一個(gè)未完成指令的連續(xù)數(shù)。每一個(gè)表目可以用于存儲(chǔ)未完成指令連續(xù)數(shù)的第一個(gè)的指令地址和標(biāo)識(shí)。通過(guò)能跟蹤完成表每一表目中未完成指令的連續(xù)數(shù),例如超高速緩沖存儲(chǔ)器一行的長(zhǎng)度,借助只存儲(chǔ)該表目中未完成指令連續(xù)數(shù)的第一個(gè)的指令地址和標(biāo)識(shí),該完成表能跟蹤更大量未完成指令,但不增加它的大小。
在下面的說(shuō)明中,闡明許多專(zhuān)門(mén)的細(xì)節(jié),以提供對(duì)本發(fā)明的完整的理解。但是,本領(lǐng)域熟練人員顯然知道,沒(méi)有這些專(zhuān)門(mén)的細(xì)節(jié),也能實(shí)施本發(fā)明。在其他情況下,熟知的電路以方框圖形式表示,以便不使本發(fā)明被不必要的細(xì)節(jié)掩蓋。絕大部分關(guān)于定時(shí)考慮的細(xì)節(jié)等等都被省略,因?yàn)檫@種細(xì)節(jié)對(duì)完整理解本發(fā)明不是必需的,且屬于本領(lǐng)域普通人員的技能之內(nèi)。
圖1-計(jì)算機(jī)系統(tǒng)圖1畫(huà)出計(jì)算機(jī)系統(tǒng)100的典型硬件配置,它代表實(shí)施本發(fā)明的硬件環(huán)境。計(jì)算機(jī)系統(tǒng)100可以有處理器110,通過(guò)總線112與各種其他部件耦合。處理器110更為詳細(xì)的說(shuō)明,將在下面結(jié)合圖2給出。操作系統(tǒng)140可以在處理器110上運(yùn)行,并提供控制和協(xié)調(diào)圖1各部件的功能。按照本發(fā)明原理的應(yīng)用程序150可以結(jié)合操作系統(tǒng)140運(yùn)行,并向操作系統(tǒng)140提供調(diào)用,在操作系統(tǒng)上,調(diào)用可以實(shí)現(xiàn)由應(yīng)用程序150施行的各種功能或服務(wù)。只讀存儲(chǔ)器(ROM)116可以與系統(tǒng)總線112耦合,并包括控制計(jì)算機(jī)系統(tǒng)100某些基本功能的基本輸入/輸出系統(tǒng)(“BIOS”)。隨機(jī)存取存儲(chǔ)器(RAM)114和磁盤(pán)適配器118,也可以與系統(tǒng)總線112耦合。應(yīng)當(dāng)指出,包括操作系統(tǒng)140和應(yīng)用程序150的軟件成分,可以裝入RAM 114,RAM 114可以是計(jì)算機(jī)系統(tǒng)100用于執(zhí)行的主要存儲(chǔ)器。磁盤(pán)適配器118可以是與磁盤(pán)單元120如磁盤(pán)驅(qū)動(dòng)器通信的集成驅(qū)動(dòng)電子線路(“IDE”)適配器。
現(xiàn)在參考圖1,計(jì)算機(jī)系統(tǒng)100還可以包括與總線112耦合的通信適配器134。通信適配器134可以把總線112與外部網(wǎng)絡(luò)互連,使計(jì)算機(jī)系統(tǒng)100能與其他該類(lèi)系統(tǒng)通信。I/O裝置也可以通過(guò)用戶接口適配器122和顯示適配器136,與系統(tǒng)總線112連接。鍵盤(pán)124、鼠標(biāo)126、和揚(yáng)聲器130,可以全都通過(guò)用戶接口適配器122與總線112互連。事件數(shù)據(jù)可以通過(guò)這些裝置的任一個(gè),輸入計(jì)算機(jī)系統(tǒng)100。顯示監(jiān)控器138可以經(jīng)由顯示適配器136與系統(tǒng)總線112連接。這樣,用戶能通過(guò)鍵盤(pán)124或鼠標(biāo)126,向計(jì)算機(jī)系統(tǒng)100輸入,和經(jīng)過(guò)顯示器138或揚(yáng)聲器130,從計(jì)算機(jī)系統(tǒng)100接收輸出。
圖2-處理器圖2畫(huà)出處理器110(圖1)的一個(gè)實(shí)施例。處理器110可以包括取指令單元201。取指令單元201可以包括取指令地址寄存器(IFAR,Instruction Fetch Address Register)202和指令高速緩沖存儲(chǔ)器203。取指令單元201可以用于,例如從多流系統(tǒng)中的程序計(jì)數(shù)器取指令,也可以把取出的指令地址裝入IFAR 202。裝入IFAR 202的地址可以是代表來(lái)自程序或編譯程序地址的有效地址。與接收的有效地址對(duì)應(yīng)的指令,可以存儲(chǔ)在指令高速緩沖存儲(chǔ)器203中。
取指令單元201還可以用于發(fā)布被取出的指令的有效地址、與被取出的指令關(guān)聯(lián)的標(biāo)識(shí)(本文稱為“ITAG”)、和被取出的指令是否對(duì)與取指令單元201耦合的完成單元204有效的指示。ITAG可以指完成表某一特定表目的超高速緩沖存儲(chǔ)器一行中,用于識(shí)別某一長(zhǎng)度較長(zhǎng)地址的特定指令的較少量的比特,例如完成表有8個(gè)表目,例如該長(zhǎng)度較長(zhǎng)地址是64比特的地址,例如該超高速緩沖存儲(chǔ)器一行是超高速緩沖存儲(chǔ)器一行中32條指令,那么該較少量的比特例如是8比特(下面還要討論)。
完成單元204可以用于對(duì)被取出的指令何時(shí)已經(jīng)“完成”保持跟蹤。本文使用的“完成”,可以指一條指令已經(jīng)被執(zhí)行單元執(zhí)行,并處于任何例外都不會(huì)再發(fā)布該指令的狀態(tài)。完成單元204借助包括一個(gè)表205,對(duì)指令何時(shí)已經(jīng)“完成”保持跟蹤,本文稱該表為“完成表”。完成表205可以包括多個(gè)表目。在完成表205中的每一表目,可以用于對(duì)未完成指令的連續(xù)數(shù)保持跟蹤。在一個(gè)實(shí)施例中,可以用每一表目,對(duì)等于超高速緩沖存儲(chǔ)器一行長(zhǎng)度的未完成指令連續(xù)數(shù)保持跟蹤,該超高速緩沖存儲(chǔ)器一行的長(zhǎng)度例如是32條指令。
現(xiàn)在參考圖2,完成表205中每一表目,可以用于存儲(chǔ)未完成表目,例如32條相繼指令,的連續(xù)數(shù)第一指令的有效地址。該有效地址本文稱“基本指令有效地址(Base IEA)”。完成表205中每一表目還可以用于存儲(chǔ)該第一指令的ITAG,本文稱之為“Base ITAG”。完成表205中每一表目還可以用于存儲(chǔ)該第一指令是否有效的指示,有效的指令在完成表205中以“V”標(biāo)記。通過(guò)能跟蹤完成表中每一表目中未完成指令的連續(xù)數(shù),例如超高速緩沖存儲(chǔ)器一行的長(zhǎng)度,借助只存儲(chǔ)該表目未完成指令連續(xù)數(shù)的第一個(gè)的有效地址和標(biāo)識(shí)(“ITAG”),該完成表能跟蹤更大量未完成指令,但不增加它的大小。
參考圖2,處理器110可以包括與取指令單元201耦合的指令調(diào)度單元206。取指令單元201可以用于從指令高速緩沖存儲(chǔ)器203接收指令。這些指令可以存儲(chǔ)在指令調(diào)度單元206的隊(duì)列207中,本文稱該隊(duì)列為“指令隊(duì)列”。指令隊(duì)列207可以包括“N”個(gè)表目,存儲(chǔ)總共N條指令。在任何時(shí)鐘周期中,可以用指令調(diào)度單元206,把存儲(chǔ)在指令隊(duì)列207中的指令,調(diào)度至適當(dāng)?shù)膱?zhí)行單元,如浮點(diǎn)單元、定點(diǎn)單元、裝入/存儲(chǔ)單元、分支單元。在調(diào)度指令前,該指令可以存儲(chǔ)在適當(dāng)鎖存器208-210中,以便調(diào)度至適當(dāng)?shù)膱?zhí)行單元211-213。例如,定點(diǎn)指令可以存儲(chǔ)在鎖存器208,以便稍后調(diào)度至定點(diǎn)執(zhí)行單元“FXU”,例如“FXU0”211。另外,定點(diǎn)指令可以存儲(chǔ)在鎖存器209中,以便稍后調(diào)度至定點(diǎn)執(zhí)行單元“FXU”,例如“FXU1”212。在另一個(gè)實(shí)施例中,浮點(diǎn)指令可以存儲(chǔ)在鎖存器210中,以便稍后調(diào)度至浮點(diǎn)執(zhí)行單元“FPU”213。應(yīng)當(dāng)指出,處理器110可以包括比畫(huà)出的和圖2所示的更多的執(zhí)行單元(在數(shù)量和類(lèi)型上更多)。
在完成指令的執(zhí)行時(shí),執(zhí)行單元211-213向完成單元204發(fā)送指示,表明指令已經(jīng)“結(jié)束”。本文使用的“結(jié)束”是指一條指令已經(jīng)被適當(dāng)?shù)膱?zhí)行單元執(zhí)行結(jié)束。執(zhí)行單元211-213可以把結(jié)束的指令的標(biāo)識(shí)(“ITAG”)分別放進(jìn)鎖存器214-216。
處理器110余下的單元,將結(jié)合圖3和4在下面討論。圖3是一種方法的流程圖,用于按照本發(fā)明的一個(gè)實(shí)施例,計(jì)算下一條要完成的指令的有效地址和標(biāo)識(shí)。圖4是一種方法的流程圖,用于按照本發(fā)明的一個(gè)實(shí)施例,選擇指令的標(biāo)識(shí),以便為非順序的處理器計(jì)算下一條要完成的指令的標(biāo)識(shí)。
在一個(gè)實(shí)施例中,處理器110可以是順序處理器,是指它同時(shí)執(zhí)行相同類(lèi)型的指令,如定點(diǎn)指令,如果這些指令在同一周期中被調(diào)度的話。在另一個(gè)實(shí)施例中,處理器110可以是非順序處理器,是指它執(zhí)行不同類(lèi)型的指令,如定點(diǎn)和浮點(diǎn)指令,按與調(diào)度不同的次序執(zhí)行這些指令。例如,浮點(diǎn)指令的執(zhí)行一般比定點(diǎn)指令要用更長(zhǎng)的時(shí)間。因此,如果在同一周期調(diào)度兩種類(lèi)型的指令,則定點(diǎn)指令將在浮點(diǎn)指令之前“結(jié)束”。本文使用的“結(jié)束”是指一條指令已經(jīng)被適當(dāng)?shù)膱?zhí)行單元執(zhí)行結(jié)束。為在定點(diǎn)單元和浮點(diǎn)單元之間維持輸送(指被執(zhí)行的指令流),下一調(diào)度群(即指令調(diào)度單元206要調(diào)度的下一指令群)必須在調(diào)度上拖延,并等待浮點(diǎn)單元的執(zhí)行結(jié)束。但是,為了改進(jìn)性能,最好在每一周期都調(diào)度定點(diǎn)指令流,即使在浮點(diǎn)指令已被調(diào)度之后。當(dāng)出現(xiàn)這種情況時(shí),許多比浮點(diǎn)指令年輕(即指令調(diào)度單元206較新近的調(diào)度)的定點(diǎn)指令,在較老(即指令調(diào)度單元206較早調(diào)度)的浮點(diǎn)指令結(jié)束時(shí)早已結(jié)束。因此,浮點(diǎn)指令的結(jié)束相對(duì)于定點(diǎn)指令是非順序的。
如上所述,完成單元204可以使用完成表205,對(duì)取出的指令何時(shí)已經(jīng)完成保持跟蹤。在一個(gè)實(shí)施例中,完成單元204可以通過(guò)跟蹤指令,對(duì)取出的指令何時(shí)已經(jīng)完成保持跟蹤,該指令本文稱為“下一條要完成的指令”。該下一條要完成的指令,可以是完成單元204將要完成的下一個(gè)指令。
如在背景信息段所述,完成表的大小與被跟蹤的未完成指令數(shù)對(duì)應(yīng)。例如,被跟蹤的未完成指令數(shù)越大,完成表的大小越大。但是,完成表的大小越大,消耗的功率越多和使用更大的硅片面積。雖然較小的完成表縮減硅片面積和功耗,但跟蹤的未完成指令變少,性能也隨之下降。因此,本領(lǐng)域需要能跟蹤更大量未完成指令,但不增加它的大小的完成表。在一個(gè)實(shí)施例中,完成表通過(guò)能跟蹤完成表內(nèi)每一表目中未完成指令的連續(xù)數(shù),借助只存儲(chǔ)未完成指令連續(xù)數(shù)的第一個(gè)的有效地址和標(biāo)識(shí)(“ITAG”),該完成表能夠跟蹤更大量未完成指令,但不增加它的大小。完成表204通過(guò)跟蹤下一條要完成的指令的狀態(tài),可以在完成表205內(nèi)每一表目的未完成指令的連續(xù)數(shù)中,跟蹤每一指令的完成。為了跟蹤下一條要完成的指令的狀態(tài),完成單元206需要確定下一條要完成指令的有效地址和標(biāo)識(shí)。完成單元206可以用圖3說(shuō)明的方法,為順序處理器確定下一條要完成的指令的有效地址和標(biāo)識(shí),或用圖3和4說(shuō)明的方法,為非順序處理器確定下一條要完成的指令的有效地址和標(biāo)識(shí)。
圖3-用于計(jì)算下一條要完成指令的有效地址和標(biāo)識(shí)的方法圖3是本發(fā)明的一個(gè)實(shí)施例的流程圖,用于計(jì)算下一條要完成指令的有效地址和標(biāo)識(shí)。
現(xiàn)在結(jié)合圖2參考圖3,在步驟301,取指令單元201取出指令。在步驟302,取指令單元201把取出的指令的有效地址(“IEA”)和標(biāo)識(shí)(“ITAG”),連同指示取出的指令的有效性,發(fā)送至完成單元204。
在步驟303,完成單元204確定,接收的IEA是否與前面取出的IEA相鄰。就是說(shuō),完成單元204確定,取出的指令的有效地址,是否緊隨前面取出的指令的有效地址。
如果取出的指令的有效地址,是緊隨前面取出的指令的有效地址,那么,在步驟304,完成單元204確定,完成表205的“Head-1”位置是否已滿?!癏ead-1”位置是指完成表205中的表目,新近用未完成指令連續(xù)數(shù)第一個(gè)的有效地址和標(biāo)識(shí),以及指示該指令有效性填充的?!癏ead”位置是緊隨著的表目,也就是將要填充的表目。
如果完成表205的“Head-1”位置沒(méi)有滿,那么,取指令單元201在步驟301取出另一條指令。應(yīng)當(dāng)指出,在方法300的任一步驟的完成之中或完成之后,取指令單元201可以取出下一條指令,并且舉例說(shuō)明,另一條指令的取出,是在完成表205的“Head-1”位置沒(méi)有滿時(shí)進(jìn)行的。
但是,如果完成表205的“Head-1”位置已滿,或者,如果取出的指令的有效地址,不是緊隨前面取出的指令的有效地址,那么,在步驟305,完成單元204確定,完成表205是否已滿。
如果完成表205已滿,那么取指令單元201在步驟306,再取出該指令(指步驟301中取出的指令)。在步驟306再取出該指令時(shí),取指令單元201在步驟302,把取出的指令的有效地址(“IEA”)和標(biāo)識(shí)(“ITAG”),連同指示取出的指令的有效性,發(fā)送至完成單元204。
如果完成表205沒(méi)有滿,那么在步驟307,完成單元204把接收的有效地址、標(biāo)識(shí)、和有效性的指示,寫(xiě)入完成表205的表目中對(duì)應(yīng)的“Head”位置。因?yàn)榻邮盏娜〕鲋噶畹挠行У刂罚皇蔷o隨前面取出的指令的有效地址,該取出的指令可以是下一群相繼的未完成指令,例如在緊隨的超高速緩沖存儲(chǔ)器一行中的第一指令。
在步驟308,完成單元204把“Head”指針前推,指向與下一個(gè)空位置對(duì)應(yīng)的“Head+1”位置。在一個(gè)實(shí)施例中,完成單元204可以使指針指向完成表205中下一個(gè)空表目。
現(xiàn)在參考步驟301,在取指令單元201取出指令后,取指令單元201在步驟309,把取出的指令寫(xiě)入指令隊(duì)列207。在步驟310,指令調(diào)度單元206把存儲(chǔ)指令隊(duì)列207中的指令,發(fā)布至一個(gè)或多個(gè)執(zhí)行單元211-213。在步驟311,執(zhí)行單元211、212、或213在執(zhí)行指令時(shí),向完成單元204發(fā)送指示。
在步驟312,完成單元204選擇新近被執(zhí)行單元211、212、或213執(zhí)行,或被執(zhí)行單元211、212、或213結(jié)束的指令的標(biāo)識(shí)(“ITAG”),這里,該被選擇的ITAG,可以用來(lái)計(jì)算下一條要完成指令的標(biāo)識(shí)(“ITAG”),說(shuō)明如下。
在順序處理器的實(shí)施例中,完成單元204接收最新近結(jié)束,即最后結(jié)束的指令的標(biāo)識(shí)(“ITAG”)。該接收的最后結(jié)束指令的標(biāo)識(shí),與完成單元204的機(jī)構(gòu)217為計(jì)算下一條要完成指令的標(biāo)識(shí)而選擇的標(biāo)識(shí)對(duì)應(yīng),討論如下。在一個(gè)實(shí)施例中,存儲(chǔ)在鎖存器214、215、或216中已結(jié)束的指令的標(biāo)識(shí)(“ITAG”),可以發(fā)送至機(jī)構(gòu)217,然后被存儲(chǔ)在完成單元204的鎖存器218中。因?yàn)樵谠撎幚砥?10是順序處理器的實(shí)施例中,完成單元204可以不包括用于存儲(chǔ)最老的現(xiàn)役浮點(diǎn)指令的鎖存器219。鎖存器219可以用在非順序處理器中,下面還要結(jié)合圖4說(shuō)明。在該處理器110是非順序處理器的實(shí)施例中,機(jī)構(gòu)217可以用于從鎖存器214、215、216、或219之一,選擇ITAG,計(jì)算下一條要完成的指令的ITAG,現(xiàn)討論如下。如果機(jī)構(gòu)217從鎖存器219選擇ITAG(“最老的現(xiàn)役浮點(diǎn)指令”,下面要解釋),然后,選擇的ITAG存儲(chǔ)在鎖存器221中,而不是在鎖存器218中,說(shuō)明如下。
在非順序處理器的實(shí)施例中,完成單元204的機(jī)構(gòu)217,選擇新近被執(zhí)行單元211、212、或213執(zhí)行的,或被執(zhí)行單元211、212、或213結(jié)束的指令的標(biāo)識(shí)(“ITAG”),如下面結(jié)合圖4的說(shuō)明。應(yīng)當(dāng)指出,圖4說(shuō)明用于非順序處理器的步驟312中,定點(diǎn)指令和浮點(diǎn)指令可以不按上述次序執(zhí)行。還應(yīng)當(dāng)指出,這些是舉例說(shuō)明的,而且圖4可以用于任何能夠不按次序執(zhí)行的兩種不同類(lèi)型的指令。
在討論圖4之前,先適當(dāng)?shù)赜懻?種定點(diǎn)指令和浮點(diǎn)指令執(zhí)行次序的可能情況。
第一種可能情況是,定點(diǎn)指令和浮點(diǎn)指令同時(shí)結(jié)束。例如,假定指令FX0、FX1、FX2、FP1、和FX4在同一周期被指令調(diào)度單元206調(diào)度,并同時(shí)結(jié)束。在此情況中,選擇浮點(diǎn)指令FP1的標(biāo)識(shí)(“ITAG”)來(lái)計(jì)算下一條要完成的指令的標(biāo)識(shí)(“ITAG”)。選擇浮點(diǎn)指令FP1的標(biāo)識(shí)(“ITAG”),部分是由于浮點(diǎn)指令一般比定點(diǎn)指令需要更長(zhǎng)的執(zhí)行時(shí)間。因此,下一條要完成的指令,很可能是下一個(gè)浮點(diǎn)指令。
第二種可能情況是,假如沒(méi)有浮點(diǎn)指令正在結(jié)束(由浮點(diǎn)單元,如浮點(diǎn)單元213執(zhí)行的浮點(diǎn)指令尚未完成),和新近已經(jīng)結(jié)束一條定點(diǎn)指令。那么,該新近結(jié)束的定點(diǎn)指令與最老的現(xiàn)役浮點(diǎn)指令比較(指尚未結(jié)束但目前正在被浮點(diǎn)單元執(zhí)行的最早被調(diào)度的浮點(diǎn)指令)。假如最年輕的正在結(jié)束的定點(diǎn)指令(最新近結(jié)束的定點(diǎn)指令),比最老的現(xiàn)役浮點(diǎn)指令更老,那么,選擇該最年輕正在結(jié)束的定點(diǎn)指令的ITAG,用來(lái)計(jì)算下一條要完成的指令的ITAG。例如,假定指令FX0、FX1、和FP1,在相同的周期中,按上面指出的次序,被指令調(diào)度單元206調(diào)度。定點(diǎn)指令FX0結(jié)束后,跟著是定點(diǎn)指令FX1。浮點(diǎn)指令FP1仍然是現(xiàn)役。在這種情況中,選擇定點(diǎn)指令FX1的標(biāo)識(shí)(“ITAG”)來(lái)計(jì)算下一條要完成的指令的標(biāo)識(shí)(“ITAG”)。選擇浮點(diǎn)指令FX1的標(biāo)識(shí)(“ITAG”),部分是因?yàn)樗且呀?jīng)結(jié)束的最老指令。在上述情況中,下一條要完成的指令將是FP1。FP1的ITAG可以用下一條要完成的指令的ITAG確定,說(shuō)明如下。
第三種可能情況是,假如沒(méi)有浮點(diǎn)指令正在結(jié)束(由浮點(diǎn)單元,如浮點(diǎn)單元213執(zhí)行的浮點(diǎn)指令尚未完成),和新近已經(jīng)結(jié)束一條定點(diǎn)指令。那么,該新近結(jié)束的定點(diǎn)指令與最老的現(xiàn)役浮點(diǎn)指令比較(指尚未結(jié)束但目前正在被浮點(diǎn)單元執(zhí)行的最早被調(diào)度的浮點(diǎn)指令)。假如最年輕的正在結(jié)束的定點(diǎn)指令(最新近結(jié)束的定點(diǎn)指令),比最老的現(xiàn)役浮點(diǎn)指令更年輕,那么,選擇該最老的現(xiàn)役浮點(diǎn)指令的ITAG,用來(lái)計(jì)算下一條要完成的指令的ITAG。例如,假定指令FX0、FP1、和FX1在相同的周期中,按上面指出的次序,被指令調(diào)度單元206調(diào)度。定點(diǎn)指令FX0結(jié)束后,跟著是定點(diǎn)指令FX1。在這種情況中,選擇浮點(diǎn)指令FP1的標(biāo)識(shí)(“ITAG”)來(lái)計(jì)算下一條要完成的指令的標(biāo)識(shí)(“ITAG”)。在該情況下,浮點(diǎn)指令FP1的標(biāo)識(shí)ITAG,是下一條要完成的指令的ITAG。選擇浮點(diǎn)指令FP1的標(biāo)識(shí)(“ITAG”),部分是因?yàn)?,浮點(diǎn)指令的執(zhí)行一般比定點(diǎn)指令要用更長(zhǎng)的時(shí)間,還因?yàn)樗亲罾系默F(xiàn)役浮點(diǎn)指令。在該情況中,選擇FP1的ITAG為下一條要完成的指令的ITAG。此外,可以保存最年輕的正在結(jié)束的定點(diǎn)指令(最新近結(jié)束的定點(diǎn)指令)的ITAG。該保存的定點(diǎn)指令,可以在下面的情況中使用。
第四種可能情況是,當(dāng)最老的現(xiàn)役浮點(diǎn)指令結(jié)束,且假如沒(méi)有更老的浮點(diǎn)指令在輸送(指在一周期中被調(diào)度的浮點(diǎn)指令流)中,假定沒(méi)有已經(jīng)結(jié)束的更年輕的定點(diǎn)指令,那么,選擇該保存的最年輕的定點(diǎn)指令的ITAG,來(lái)計(jì)算下一條要完成的指令的ITAG。如果有任何比保存的定點(diǎn)指令更年輕的已經(jīng)結(jié)束的定點(diǎn)指令,那么,選擇該更年輕定點(diǎn)指令的ITAG,來(lái)計(jì)算下一條要完成的指令的ITAG。例如,參考第三種情況的例子,當(dāng)浮點(diǎn)指令FP1結(jié)束時(shí),那么用保存的定點(diǎn)指令(在本例中是FX1)的ITAG計(jì)算下一條要完成的指令的ITAG,除非有更年輕的定點(diǎn)指令已經(jīng)結(jié)束??梢赃x擇保存的,或可能更年輕的浮點(diǎn)指令的標(biāo)識(shí)(“ITAG”),部分是因?yàn)樗且呀?jīng)結(jié)束的最老的指令。然后,用該保存的,或可能更年輕的浮點(diǎn)指令的ITAG,確定下一條要完成的指令的ITAG。
在上述第四種情況中,使用下面結(jié)合圖4說(shuō)明的方法,處理器110的機(jī)構(gòu)217,可以用于選擇適當(dāng)?shù)腎TAG來(lái)計(jì)算下一條要完成的指令的ITAG。
現(xiàn)在結(jié)合圖2參考圖4,在步驟401中,完成單元204確定,定點(diǎn)單元211、212是否結(jié)束執(zhí)行一條定點(diǎn)指令。
如果定點(diǎn)單元211、212已經(jīng)結(jié)束執(zhí)行一條定點(diǎn)指令,那么在步驟402,完成單元204確定,是否有最老的現(xiàn)役浮點(diǎn)指令。如果沒(méi)有最老的現(xiàn)役浮點(diǎn)指令,那么在步驟403,完成單元204選擇已結(jié)束的定點(diǎn)指令的標(biāo)識(shí)(“ITAG”)。
但是,如果有最老的現(xiàn)役浮點(diǎn)指令(存儲(chǔ)在鎖存器219中),那么,在步驟404,完成單元204確定,該已經(jīng)結(jié)束的定點(diǎn)指令,是否比該最老的現(xiàn)役浮點(diǎn)指令更年輕。
如果該已經(jīng)結(jié)束的定點(diǎn)指令,不比該最老的現(xiàn)役浮點(diǎn)指令更年輕,那么在步驟403,完成單元204選擇該結(jié)束的定點(diǎn)指令的標(biāo)識(shí)(“ITAG”),計(jì)算下一條要完成的指令的ITAG。然后,完成單元204確定,定點(diǎn)單元211、212是否已經(jīng)在步驟401結(jié)束執(zhí)行一條定點(diǎn)指令。
但是,如果結(jié)束的定點(diǎn)指令,比最老的現(xiàn)役浮點(diǎn)指令更年輕,那么在步驟405,完成單元204選擇該最老的現(xiàn)役浮點(diǎn)指令,作為計(jì)算下一條要完成的指令I(lǐng)TAG的ITAG。如上所述,在該情況下,最老的現(xiàn)役浮點(diǎn)指令的ITAG,是下一條要完成的指令的ITAG。然后,完成單元204確定,定點(diǎn)單元211、212是否已經(jīng)在步驟401結(jié)束執(zhí)行一條定點(diǎn)指令。
現(xiàn)在回到步驟401,如果定點(diǎn)單元211、212沒(méi)有結(jié)束執(zhí)行一條定點(diǎn)指令,那么在步驟406,完成單元204確定,浮點(diǎn)單元213是否已經(jīng)結(jié)束執(zhí)行一條指令。如果浮點(diǎn)單元213沒(méi)有結(jié)束執(zhí)行一條浮點(diǎn)指令,那么完成單元204確定,定點(diǎn)單元211、212是否已經(jīng)在步驟401結(jié)束執(zhí)行一條定點(diǎn)指令。
但是,如果浮點(diǎn)單元213已經(jīng)結(jié)束執(zhí)行一條浮點(diǎn)指令,那么在步驟407,完成單元204確定,是否有任何保存的定點(diǎn)指令(指最年輕的正在結(jié)束的定點(diǎn)指令)。
如果沒(méi)有保存的定點(diǎn)指令,那么在步驟408,完成單元204選擇已結(jié)束的浮點(diǎn)指令的ITAG,作為要確定下一條要完成的指令I(lǐng)TAG的ITAG。然后,完成單元204確定,定點(diǎn)單元211、212是否已經(jīng)在步驟401結(jié)束執(zhí)行一條定點(diǎn)指令。
但是,如果有保存的定點(diǎn)指令,那么在步驟409,完成單元204確定,是否有任何比該保存的定點(diǎn)指令更年輕的已結(jié)束的定點(diǎn)指令。如果沒(méi)有比該保存的定點(diǎn)指令更年輕的已結(jié)束的定點(diǎn)指令,那么在步驟410,完成單元204選擇該保存的定點(diǎn)指令的ITAG,作為要確定下一條要完成的指令I(lǐng)TAG的ITAG。然后,完成單元204確定,定點(diǎn)單元211、212是否已經(jīng)在步驟401結(jié)束執(zhí)行一條定點(diǎn)指令。
但是,如果有比保存的定點(diǎn)指令更年輕的已結(jié)束的定點(diǎn)指令,那么在步驟411,完成單元204選擇該更年輕已結(jié)束的定點(diǎn)指令的ITAG,作為要確定下一條要完成的指令I(lǐng)TAG的ITAG。然后,完成單元204確定,定點(diǎn)單元211、212是否已經(jīng)在步驟401結(jié)束執(zhí)行一條定點(diǎn)指令。
現(xiàn)在回到圖3,在步驟313,完成單元204確定,選擇的ITAG是否為最老的現(xiàn)役浮點(diǎn)指令的ITAG。在一個(gè)實(shí)施例中,機(jī)構(gòu)217包含確定被選擇的ITAG是否為最老現(xiàn)役浮點(diǎn)指令的ITAG的邏輯。
如果選擇的ITAG不是最老現(xiàn)役浮點(diǎn)指令的ITAG,那么,完成單元204可以在步驟314,通過(guò)把邏輯值“1”加到被選擇標(biāo)識(shí)的標(biāo)識(shí)上,計(jì)算下一條要完成的指令的標(biāo)識(shí)。在一個(gè)實(shí)施例中,完成單元204可以通過(guò)增量器220,把選擇的標(biāo)識(shí)(“ITAG”)增加邏輯值1,來(lái)計(jì)算下一條要完成的指令的標(biāo)識(shí),并把結(jié)果存儲(chǔ)在鎖存器221中。鎖存器221可以用于存儲(chǔ)下一條要完成的指令的ITAG。
但是,如果選擇的ITAG是最老現(xiàn)役浮點(diǎn)指令的ITAG,那么,完成單元204可以在步驟315中,通過(guò)令選擇的ITAG(最老現(xiàn)役浮點(diǎn)指令的ITAG)為下一條要完成的指令的ITAG,來(lái)計(jì)算下一條要完成的指令的標(biāo)識(shí)。在一個(gè)實(shí)施例中,可以用機(jī)構(gòu)217把選擇的ITAG(最老現(xiàn)役浮點(diǎn)指令的ITAG)存儲(chǔ)在鎖存器221中。
在步驟316,完成單元204確定,選擇的指令(指機(jī)構(gòu)217選擇的ITAG標(biāo)識(shí)的指令),是否比完成表205“Tail+1”位置中未完成指令連續(xù)數(shù)的第一個(gè)對(duì)應(yīng)的指令更老?!癟ail”位置可以指完成表205中最老的表目?!癟ail+1”位置可以指完成表205中次最老的表目。在一個(gè)實(shí)施例中,完成單元204可以通過(guò)比較器222,把Tail+1位置中的Base ITAG,與選擇的指令的ITAG比較,確定最后結(jié)束的指令,是否比完成表205“Tail+1”位置中未完成指令連續(xù)數(shù)的第一個(gè)對(duì)應(yīng)的指令更老。比較結(jié)果可以存儲(chǔ)在鎖存器223、224、和225中。
如果選擇的指令,比完成表205“Tail+1”位置中未完成指令連續(xù)數(shù)第一個(gè)對(duì)應(yīng)的指令更老,那么在步驟317,完成單元204選擇完成表205中Tail位置表目的Base ITAG和Base IEA。如果選擇的指令,比完成表205“Tail+1”位置中未完成指令連續(xù)數(shù)第一個(gè)對(duì)應(yīng)的指令更老,那么選擇的指令,與完成表205的Tail位置中代表的指令之一對(duì)應(yīng)。在一個(gè)實(shí)施例中,完成單元204可以通過(guò)把完成表205中Tail和Tail+1兩個(gè)位置的Base ITAG,輸入復(fù)用器226,以選擇完成表205中Tail位置表目中的Base ITAG。復(fù)用器226通過(guò)復(fù)用器226選擇從鎖存器227接收適當(dāng)?shù)闹?,?或邏輯值“1”的輸入,選擇適當(dāng)?shù)腎TAG(在本例中,是完成表205的Tail位置的Base ITAG)。然后,復(fù)用器226選擇的ITAG,可以存儲(chǔ)在鎖存器227中。在一個(gè)實(shí)施例中,完成單元204可以通過(guò)把完成表205中Tail和Tail+1兩個(gè)位置的Base IEA,輸入復(fù)用器228,以選擇完成表205中Tail位置表目中的Base IEA。復(fù)用器228通過(guò)復(fù)用器228選擇從鎖存器223接收適當(dāng)?shù)闹?,?或邏輯值“1”的輸入,選擇適當(dāng)?shù)腎EA(在本例中,是完成表205的Tail位置的Base IEA)。然后,復(fù)用器228選擇的ITAG,可以存儲(chǔ)在鎖存器229中。
在步驟318,完成單元204計(jì)算地址偏移。在一個(gè)實(shí)施例中,完成單元204從步驟314或315計(jì)算的下一條要完成的指令的ITAG中,減去選擇的Base ITAG,計(jì)算地址偏移。在一個(gè)實(shí)施例中,完成單元204通過(guò)減法器230,從步驟314或315中計(jì)算的下一條要完成指令的ITAG,減去選擇的Base ITAG,計(jì)算地址偏移。然后,該地址偏移可以存儲(chǔ)在鎖存器231內(nèi)。
在步驟319,完成單元204計(jì)算下一條要完成的指令的有效地址。在一個(gè)實(shí)施例中,完成單元204通過(guò)把步驟318中計(jì)算的地址偏移,與選擇的Base IEA相加,計(jì)算下一條要完成的指令的有效地址。在一個(gè)實(shí)施例中,完成單元204通過(guò)加法器232,把步驟318中計(jì)算的地址偏移,與選擇的Base IEA相加,計(jì)算下一條要完成的指令的有效地址。然后,該下一條要完成的指令的有效地址,可以存儲(chǔ)在鎖存器233中。
在計(jì)算下一條要完成的指令的有效地址后,取指令單元201在步驟301取出另一條指令。應(yīng)當(dāng)指出,取指令單元201可以在方法300的任一步驟之中或之后,取出下一條指令,并舉例說(shuō)明,取出是在計(jì)算下一條要完成的指令的有效地址時(shí)進(jìn)行的。
現(xiàn)在回到步驟316,如果選擇的指令,不比完成表“Tail+1”位置中未完成指令連續(xù)數(shù)第一個(gè)對(duì)應(yīng)的指令更老,那么在步驟320,完成單元204選擇完成表205的Tail+1位置表目中的Base ITAG和Base IEA。如果選擇的指令,不比完成表“Tail+1”位置中未完成指令連續(xù)數(shù)的第一個(gè)對(duì)應(yīng)的指令更老,那么,選擇的指令與完成表205的Tail+1位置中代表的指令之一對(duì)應(yīng)。在一個(gè)實(shí)施例中,完成單元204可以通過(guò)把完成表205中Tail和Tail+1兩個(gè)位置的Base ITAG,輸入復(fù)用器226,以選擇完成表205中Tail+1位置表目中的Base ITAG。復(fù)用器226通過(guò)復(fù)用器226選擇從鎖存器225接收適當(dāng)?shù)闹?,?或邏輯值“1”的輸入,選擇適當(dāng)?shù)腎TAG(在本例中,是完成表205的Tail+1位置的Base ITAG)。然后,復(fù)用器226選擇的ITAG,可以存儲(chǔ)在鎖存器227中。在一個(gè)實(shí)施例中,完成單元204可以通過(guò)把完成表205中Tail和Tail+1兩個(gè)位置的BaseIEA,輸入復(fù)用器228,以選擇完成表205中Tail+1位置表目中的BaseIEA。復(fù)用器228通過(guò)復(fù)用器228選擇從鎖存器223接收適當(dāng)?shù)闹?,?或邏輯值“1”的輸入,選擇適當(dāng)?shù)腎EA(在本例中,是完成表205的Tail+1位置的Base IEA)。然后,復(fù)用器228選擇的ITAG,可以存儲(chǔ)在鎖存器229中。
在步驟321,完成單元204計(jì)算地址偏移。在一個(gè)實(shí)施例中,完成單元204從步驟314或315計(jì)算的下一條要完成的指令的ITAG中,減去選擇的Base ITAG,計(jì)算地址偏移。在一個(gè)實(shí)施例中,完成單元204通過(guò)減法器230,從步驟314或315中計(jì)算的下一條要完成的指令的ITAG中,減去選擇的Base ITAG,計(jì)算地址偏移。然后,該地址偏移可以存儲(chǔ)在鎖存器231內(nèi)。
在步驟322,完成單元204計(jì)算下一條要完成的指令的有效地址。在一個(gè)實(shí)施例中,完成單元204通過(guò)把步驟321中計(jì)算的地址偏移,與選擇的Base IEA相加,計(jì)算下一條要完成的指令的有效地址。在一個(gè)實(shí)施例中,完成單元204通過(guò)加法器232,把步驟321中計(jì)算的地址偏移,與選擇的Base IEA相加,計(jì)算下一條要完成的指令的有效地址。然后,該下一條要完成的指令的有效地址,可以存儲(chǔ)在鎖存器233中。
在步驟323,完成單元204對(duì)完成表205位于Tail位置的表目,解除分配。完成單元204對(duì)完成表205位于Tail位置的表目,解除分配,是因?yàn)樵摫砟看淼乃兄噶畹倪B續(xù)數(shù)已經(jīng)完成。在一個(gè)實(shí)施例中,完成單元204的邏輯單元234從鎖存器224接收適當(dāng)?shù)闹?,?或邏輯值“1”時(shí),對(duì)完成表205位于Tail位置的表目,解除分配。
在對(duì)完成表205位于Tail位置的表目解除分配后,取指令單元201在步驟301取出另一條指令。應(yīng)當(dāng)指出,在方法300的任一步驟的完成之中或完成之后,取指令單元201可以取出下一條指令,并且舉例說(shuō)明,取出是在對(duì)完成表205位于Tail位置的表目解除分配時(shí)進(jìn)行的。
應(yīng)當(dāng)指出,為按順序的或不按順序的處理器之一計(jì)算下一條要完成指令的有效地址和指示(“ITAG”)所使用的上述方法,可以用來(lái)處理例外的情形。在執(zhí)行單元211、212、或213結(jié)束一條指令的執(zhí)行時(shí),執(zhí)行單元211、212、或213可以報(bào)告存在例外的條件。然后,完成單元204可以用上述方法,為按順序的或不按順序的處理器之一計(jì)算下一條要完成的指令的有效地址和指示(“ITAG”)。下一條要完成的指令的有效地址和ITAG,可以作為例外條件已經(jīng)處理后送回的有效地址和ITAG而保存起來(lái)。
還應(yīng)當(dāng)指出,方法300可以包括為清楚起見(jiàn)沒(méi)有畫(huà)出的其他和/或另外的步驟。還應(yīng)當(dāng)指出,方法300可以按不同于給出次序的次序執(zhí)行,且圖3和4討論中給出的次序,是示例性的。還應(yīng)當(dāng)指出,方法300中包含的步驟,可按同時(shí)方式執(zhí)行。
雖然本方法、完成表、和處理器,是結(jié)合若干個(gè)實(shí)施例說(shuō)明的,但這不意味限制在本文闡明的特定形式,相反,應(yīng)當(dāng)認(rèn)為,附于后面的權(quán)利要求書(shū)規(guī)定的本發(fā)明的精神和范圍中,合理地包括那些變化、修改、和等價(jià)的內(nèi)容。應(yīng)當(dāng)指出,標(biāo)題僅用于組織的目的,不是對(duì)說(shuō)明或權(quán)利要求的限制。
權(quán)利要求
1.一種完成表,包括多個(gè)表目,其中,所述多個(gè)表目的每一個(gè)跟蹤未完成指令的連續(xù)數(shù),其中,所述多個(gè)表目的每一個(gè)用于存儲(chǔ)所述未完成指令連續(xù)數(shù)第一個(gè)的指令地址和所述未完成指令連續(xù)數(shù)所述第一個(gè)的標(biāo)識(shí)。
2.按照權(quán)利要求1的完成表,其中所述未完成指令的連續(xù)數(shù)包括超高速緩沖存儲(chǔ)器一行的長(zhǎng)度。
3.按照權(quán)利要求1的完成表,其中所述指令地址是有效地址。
4.按照權(quán)利要求1的完成表,其中在所述完成表的選擇表目中下一條要完成的指令的指令地址和標(biāo)識(shí)是用所述未完成指令連續(xù)數(shù)的所述第一個(gè)的所述指令地址和所述未完成指令連續(xù)數(shù)的所述第一個(gè)的所述標(biāo)識(shí)分別計(jì)算的。
5.按照權(quán)利要求4的完成表,其中所述表目是根據(jù)執(zhí)行單元上最老的現(xiàn)役指令和已結(jié)束指令之一選擇的。
6.一種跟蹤完成表中更大量未完成指令的方法,包括如下步驟向第一和第二執(zhí)行單元發(fā)布指令;在所述第一和第二執(zhí)行單元之一上選擇已結(jié)束指令和現(xiàn)役指令之一的標(biāo)識(shí);用所述選擇指令的所述標(biāo)識(shí)計(jì)算下一條要完成的指令的標(biāo)識(shí);選擇位于所述完成表表目中未完成指令連續(xù)數(shù)的第一個(gè)的指令地址和標(biāo)識(shí);和用所述下一條要完成指令的所述標(biāo)識(shí)和所述完成表所述表目中所述未完成指令連續(xù)數(shù)所述第一個(gè)的所述選擇的指令地址及標(biāo)識(shí)計(jì)算所述下一條要完成指令的指令地址。
7.按照權(quán)利要求6的方法,還包括步驟用位于所述完成表所述表目中所述未完成指令連續(xù)數(shù)所述第一個(gè)的所述選擇的標(biāo)識(shí)和所述下一條要完成指令的所述標(biāo)識(shí)計(jì)算地址偏移。
8.按照權(quán)利要求7的方法,其中,如果所述選擇的指令比位于所述完成表尾位置前一個(gè)的表目中未完成指令連續(xù)數(shù)的第一個(gè)更老,則所述未完成指令連續(xù)數(shù)所述第一個(gè)的所述選擇的指令地址及標(biāo)識(shí)從位于所述完成表的所述尾位置的表目中選擇。
9.按照權(quán)利要求7的方法,其中,如果所述選擇的指令不比位于所述完成表尾位置前一個(gè)的位于表目中未完成指令連續(xù)數(shù)的第一個(gè)更老,則所述未完成指令連續(xù)數(shù)所述第一個(gè)的所述選擇的指令地址及標(biāo)識(shí)從位于所述完成表所述尾位置前一個(gè)的所述表目中選擇。
10.按照權(quán)利要求7的方法,還包括步驟用所述計(jì)算的地址偏移和所述選擇的指令地址計(jì)算所述下一條要完成的指令的指令地址。
11.按照權(quán)利要求10的方法,其中所述下一條要完成指令的所述指令地址是通過(guò)把所述計(jì)算的地址偏移與所述選擇的指令地址相加來(lái)計(jì)算的。
12.按照權(quán)利要求9的方法,還包括步驟如果所述選擇的指令不比位于所述完成表所述尾位置前一個(gè)表目中所述未完成指令連續(xù)數(shù)所述第一個(gè)更老,則對(duì)位于所述完成表所述尾位置的所述表目解除分配。
13.按照權(quán)利要求6的方法,其中所述選擇的指令是在所述第一和所述第二執(zhí)行單元上最新近結(jié)束的指令。
14.按照權(quán)利要求13的方法,其中所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
15.按照權(quán)利要求6的方法,其中所述第一執(zhí)行單元是浮點(diǎn)單元,其中所述第二執(zhí)行單元是定點(diǎn)單元。
16.按照權(quán)利要求15的方法,其中,如果在所述浮點(diǎn)單元上執(zhí)行的所述選擇的指令與在所述定點(diǎn)單元上執(zhí)行的指令同時(shí)結(jié)束,則所述選擇的指令是在所述浮點(diǎn)單元上已結(jié)束的指令,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
17.按照權(quán)利要求15的方法,其中,如果在所述浮點(diǎn)單元上沒(méi)有指令正在結(jié)束和所述選擇的指令比所述浮點(diǎn)單元上最老的現(xiàn)役指令更老,則所述選擇的指令是在所述定點(diǎn)單元上已結(jié)束的指令,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
18.按照權(quán)利要求15的方法,其中,如果在所述浮點(diǎn)單元上沒(méi)有指令正在結(jié)束和所述選擇的指令比所述浮點(diǎn)單元上最老的現(xiàn)役指令更年輕,則所述選擇的指令是在所述浮點(diǎn)單元上所述最老的現(xiàn)役指令,其中,在所述定點(diǎn)單元上最年輕的正在結(jié)束的指令被保存,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是所述選擇的指令的所述標(biāo)識(shí)。
19.按照權(quán)利要求18的方法,其中,如果在所述浮點(diǎn)單元上所述最老的現(xiàn)役指令已經(jīng)結(jié)束,和在所述浮點(diǎn)單元上沒(méi)有比所述浮點(diǎn)單元上所述已結(jié)束的最老現(xiàn)役指令更老的指令,又如果在所述定點(diǎn)單元上沒(méi)有其他更年輕的指令,則所述選擇的指令是所述保存的指令,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
20.按照權(quán)利要求18的方法,其中,如果在所述浮點(diǎn)單元上所述最老的現(xiàn)役指令已經(jīng)結(jié)束,和在所述浮點(diǎn)單元上沒(méi)有比所述浮點(diǎn)單元上所述已結(jié)束的最老現(xiàn)役指令更老的指令,又如果在所述定點(diǎn)單元上最年輕的正在結(jié)束的指令比所述保存的指令更年輕,則所述選擇的指令是所述定點(diǎn)單元上所述最年輕的正在結(jié)束的指令,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
21.一種處理器,包括取指令單元,用于取出指令;與所述取指令單元耦合的指令調(diào)度單元,其中,所述取指令單元還用于向所述指令調(diào)度單元發(fā)布所述取出的指令,其中,所述指令調(diào)度單元包括指令隊(duì)列,用于存儲(chǔ)所述取出的指令;與所述指令調(diào)度單元耦合的第一和第二執(zhí)行單元,其中所述調(diào)度單元用于把所述存儲(chǔ)的取出的指令調(diào)度至所述第一和所述第二執(zhí)行單元;和與所述取指令單元耦合的完成單元,其中,所述取指令單元還用于向所述完成單元發(fā)布指令地址和每一個(gè)所述取出的指令的標(biāo)識(shí),其中,所述完成單元用于對(duì)所述取出的指令何時(shí)已經(jīng)完成保持跟蹤,其中,所述完成單元包括完成表,其中,所述完成表包括多個(gè)表目,其中,每一所述多個(gè)表目跟蹤未完成指令的連續(xù)數(shù),其中,每一所述多個(gè)表目用于存儲(chǔ)所述未完成指令連續(xù)數(shù)的第一個(gè)的指令地址和所述未完成指令連續(xù)數(shù)所述第一個(gè)的標(biāo)識(shí)。
22.按照權(quán)利要求21的處理器,其中所述完成單元包括用于選擇標(biāo)識(shí)的邏輯,該邏輯在所述第一和所述第二執(zhí)行單元之一上選擇已結(jié)束指令和現(xiàn)役指令之一的標(biāo)識(shí);用于計(jì)算標(biāo)識(shí)的邏輯,該邏輯使用所述選擇的指令的所述標(biāo)識(shí)計(jì)算下一條要完成的指令的標(biāo)識(shí);用于選擇指令地址和標(biāo)識(shí)的邏輯,該邏輯選擇位于所述完成表表目中未完成指令連續(xù)數(shù)第一個(gè)的指令地址和標(biāo)識(shí);和用于計(jì)算指令地址的邏輯,該邏輯使用所述下一條要完成的指令的所述標(biāo)識(shí)和位于所述完成表所述表目中所述未完成指令連續(xù)數(shù)所述第一個(gè)的所述選擇的指令地址及標(biāo)識(shí)計(jì)算所述下一條要完成的指令的指令地址。
23.按照權(quán)利要求22的處理器,其中所述完成單元還包括用于計(jì)算地址偏移的邏輯,該邏輯使用位于所述完成表所述表目中所述未完成指令連續(xù)數(shù)所述第一個(gè)所述選擇的標(biāo)識(shí)和所述下一條要完成的指令的所述標(biāo)識(shí)計(jì)算地址偏移。
24.按照權(quán)利要求23的處理器,其中,如果所述選擇的指令比位于所述完成表尾位置前一個(gè)的表目中未完成指令連續(xù)數(shù)的第一個(gè)更老,則所述未完成指令連續(xù)數(shù)所述第一個(gè)的所述選擇的指令地址及標(biāo)識(shí)從位于所述完成表的所述尾位置的表目中選擇。
25.按照權(quán)利要求23的處理器,其中,如果所述選擇的指令不比位于所述完成表尾位置前一個(gè)的位于表目中未完成指令連續(xù)數(shù)的第一個(gè)更老,則所述未完成指令連續(xù)數(shù)所述第一個(gè)的所述選擇的指令地址及標(biāo)識(shí)從位于所述完成表所述尾位置前一個(gè)的所述表目中選擇。
26.按照權(quán)利要求23的處理器,其中,所述完成單元還包括用于計(jì)算指令地址的邏輯,該邏輯使用所述計(jì)算的地址偏移和所述選擇的指令地址計(jì)算所述下一條要完成的指令的指令地址。
27.按照權(quán)利要求26的處理器,其中所述下一條要完成的指令的所述指令地址是通過(guò)在所述選擇的指令地址上加上所述計(jì)算的地址偏移計(jì)算的。
28.按照權(quán)利要求25的處理器,其中,所述完成單元還包括用于解除分配的邏輯,如果所述選擇的指令不比位于所述完成表所述尾位置前一個(gè)的表目中所述未完成指令連續(xù)數(shù)所述第一個(gè)更老,則該邏輯對(duì)位于所述完成表所述尾位置的所述表目解除分配。
29.按照權(quán)利要求22的處理器,其中所述選擇的指令是在所述第一和所述第二執(zhí)行單元之一上最新近結(jié)束的指令。
30.按照權(quán)利要求29的處理器,其中所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
31.按照權(quán)利要求22的處理器,其中所述第一執(zhí)行單元是浮點(diǎn)單元,其中所述第二執(zhí)行單元是定點(diǎn)單元。
32.按照權(quán)利要求31的處理器,其中,如果在所述浮點(diǎn)單元上執(zhí)行的所述選擇的指令與在所述定點(diǎn)單元上執(zhí)行的指令同時(shí)結(jié)束,則所述選擇的指令是在所述浮點(diǎn)單元上已結(jié)束的指令,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
33.按照權(quán)利要求31的處理器,其中,如果在所述浮點(diǎn)單元上沒(méi)有指令正在結(jié)束,和所述選擇的指令比所述浮點(diǎn)單元上最老的現(xiàn)役指令更老,則所述選擇的指令是在所述定點(diǎn)單元上已結(jié)束的指令,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
34.按照權(quán)利要求31的處理器,其中,如果在所述浮點(diǎn)單元上沒(méi)有指令正在結(jié)束,和所述選擇的指令比所述浮點(diǎn)單元上最老的現(xiàn)役指令更年輕,則所述選擇的指令是在所述浮點(diǎn)單元上所述最老的現(xiàn)役指令,其中,在所述定點(diǎn)單元上最年輕的正在結(jié)束的指令被保存,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是所述選擇的指令的所述標(biāo)識(shí)。
35.按照權(quán)利要求34的處理器,其中,如果在所述浮點(diǎn)單元上所述最老的現(xiàn)役指令已經(jīng)結(jié)束,和在所述浮點(diǎn)單元上沒(méi)有比所述浮點(diǎn)單元上所述已結(jié)束的最老現(xiàn)役指令更老的指令,又如果在所述定點(diǎn)單元上沒(méi)有其他更年輕的指令,則所述選擇的指令是所述保存的指令,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
36.按照權(quán)利要求34的處理器,其中,如果在所述浮點(diǎn)單元上所述最老的現(xiàn)役指令已經(jīng)結(jié)束,和在所述浮點(diǎn)單元上沒(méi)有比所述浮點(diǎn)單元上所述已結(jié)束的最老現(xiàn)役指令更老的指令,又如果在所述定點(diǎn)單元上最年輕的正在結(jié)束的指令比所述保存的指令更年輕,則所述選擇的指令是所述定點(diǎn)單元上所述最年輕的正在結(jié)束的指令,其中,所述下一條要完成的指令的所述標(biāo)識(shí)是通過(guò)在所述選擇的指令的所述標(biāo)識(shí)上加上邏輯值1來(lái)計(jì)算的。
全文摘要
一種用于跟蹤更大量未完成指令的方法、完成表、和處理器。該完成表可以包括多個(gè)表目,其中每一表目跟蹤未完成指令的一個(gè)連續(xù)數(shù)。每一表目可以用于存儲(chǔ)未完成指令的連續(xù)數(shù)的第一個(gè)。通過(guò)能跟蹤完成表每一表目中未完成指令的連續(xù)數(shù),例如超高速緩沖存儲(chǔ)器一行的長(zhǎng)度,借助只存儲(chǔ)該表目中未完成指令連續(xù)數(shù)的第一個(gè)的指令地址和標(biāo)識(shí),該完成表能跟蹤更大量未完成指令,但不增加它的大小。
文檔編號(hào)G06F12/08GK1680917SQ200510009310
公開(kāi)日2005年10月12日 申請(qǐng)日期2005年2月18日 優(yōu)先權(quán)日2004年4月8日
發(fā)明者蘇珊·E·艾爾森, 恒·Q·樂(lè), 戴維·A·魯伊克, 鄧·Q·古揚(yáng) 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司