專利名稱:用于處理不精確異常的一種方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng)領(lǐng)域。確切地說,本發(fā)明涉及用于更新以多微指令實(shí)現(xiàn)交錯(cuò)執(zhí)行的一個(gè)系統(tǒng)的體系狀態(tài)的一種方法和裝置。
單指令多數(shù)據(jù)(SIMD)技術(shù)極大地提高了在多媒體應(yīng)用中的性能。SIMD技術(shù)提供一單個(gè)宏指令,執(zhí)行該宏指令能夠使處理器對多數(shù)據(jù)項(xiàng)并行進(jìn)行相同的運(yùn)算。這種技術(shù)特別適合于提供壓縮數(shù)據(jù)格式的系統(tǒng)。壓縮數(shù)據(jù)格式是一種將在一寄存器中的比特位邏輯地劃分為許多固定大小的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)單元代表一個(gè)獨(dú)立值。例如,一個(gè)64位的寄存器可以分解為4個(gè)16位的數(shù)據(jù)單元,每個(gè)數(shù)據(jù)單元表示一獨(dú)立的16位值。然后,SIMD指令獨(dú)立地并行控制具有這些壓縮數(shù)據(jù)類型的各個(gè)單元。例如,一SIMD壓縮的ADD指令將第一壓縮數(shù)據(jù)操作數(shù)和第二壓縮數(shù)據(jù)操作數(shù)的相應(yīng)數(shù)據(jù)單元加在一起。更確切地說,壓縮數(shù)據(jù)操作數(shù)X(包含數(shù)據(jù)單元X0,X1,X2,X3)和壓縮數(shù)據(jù)操作數(shù)Y(包含數(shù)據(jù)單元Y0,Y1,Y2,Y3)相加得到壓縮數(shù)據(jù)操作數(shù)Z(包含數(shù)據(jù)單元Z0,Z1,Z2,Z3,其中Zi=Xi+Yi)。
附
圖1所示為實(shí)現(xiàn)可以用于執(zhí)行SIMD指令的一個(gè)算術(shù)邏輯單元(ALU)的一種現(xiàn)有技術(shù)的處理器,附圖1所示的ALU包括在整個(gè)操作數(shù)寬度(即所有的數(shù)據(jù)元素)上執(zhí)行并行運(yùn)算所必需的電路。具體地說,附圖1所示為具有能夠分別用作4個(gè)獨(dú)立的ADD執(zhí)行單元和4個(gè)獨(dú)立的MUL執(zhí)行單元的一個(gè)ADD執(zhí)行單元和一個(gè)MUL執(zhí)行單元的一個(gè)ALU。
許多現(xiàn)有的處理器,不管是依序還是無序的,都必須保持一種推測狀態(tài)和一種體系狀態(tài)。體系狀態(tài)表示順序地執(zhí)行完指令,該指令的任一和所有的異常都已處理過。相反,推測狀態(tài)表示順序或無序地執(zhí)行指令,該指令可能或已經(jīng)產(chǎn)生一異常。當(dāng)一宏指令從推測狀態(tài)變?yōu)橐惑w系狀態(tài)時(shí),稱該宏指令已更新了體系狀態(tài)(例如,在一順序處理器中,當(dāng)宏指令已經(jīng)執(zhí)行完畢并寫下結(jié)果時(shí);在一無序處理器中,當(dāng)宏指令已經(jīng)退役時(shí))。因?yàn)樵趫D1所示系統(tǒng)中宏指令的操作是對所有數(shù)據(jù)單元并行地執(zhí)行的,所以在解除了所有的異常之后所有的結(jié)果一起都用于更新體系狀態(tài)。
實(shí)現(xiàn)上述方法需要大量的雙份硬件部件并且硬件部件(即ADD和MUL執(zhí)行單元)的利用效率低。
本發(fā)明公開了一種在一以多微指令實(shí)現(xiàn)交錯(cuò)執(zhí)行的系統(tǒng)中更新體系狀態(tài)的方法和裝置。依據(jù)本發(fā)明的一方面,提供一種方法,在該方法中將一宏指令解碼成第一和第二微指令。宏指令在一段數(shù)據(jù)上指定一操作,執(zhí)行第一和第二微指令分別使所說的操作在數(shù)據(jù)段的不同部分上運(yùn)行。該方法還要求執(zhí)行第一微指令而與第二微指令無關(guān)(例如,在不同時(shí)間),并且檢測到所說的第二微指令將不引起任何不可恢復(fù)的異常。然后將第一微指令的結(jié)果用于在比所說的第二微指令早的一時(shí)鐘周期更新體系狀態(tài)。
下面參照附圖,以舉例方式而不是限制方式介紹本發(fā)明,在附圖中,相同的標(biāo)號(hào)指相似的單元,其中圖1所示為實(shí)現(xiàn)可以用來執(zhí)行SIMD指令的一個(gè)算術(shù)邏輯單元(ALU)的一個(gè)現(xiàn)行的處理器。
圖2所示為從概念上說明依據(jù)本發(fā)明的一實(shí)施例以一交錯(cuò)方式(staggermanner)對操作數(shù)執(zhí)行的壓縮數(shù)據(jù)宏指令指定的操作。
圖3所示為依據(jù)本發(fā)明的一實(shí)施例構(gòu)成的一處理器體系中各部分的概念性的方框圖,該處理器能夠由相關(guān)的交錯(cuò)執(zhí)行微指令來獨(dú)立更新體系狀態(tài)并且提供一精確的異常模式。
圖4所示為依據(jù)本發(fā)明的一實(shí)施例校驗(yàn)一單個(gè)的交錯(cuò)執(zhí)行微指令的地址異常的流程圖。
圖5所示為依據(jù)本發(fā)明的一實(shí)施例響應(yīng)相關(guān)的交錯(cuò)執(zhí)行微指令獨(dú)立地更新體系狀態(tài)的流程圖。
圖6所示為依據(jù)本發(fā)明的一實(shí)施例的退役延遲單元360的電路示意圖。
本申請公開了一種在一以多微指令實(shí)現(xiàn)的交錯(cuò)執(zhí)行系統(tǒng)中更新體系狀態(tài)的方法和裝置。在下面的詳細(xì)描述中,為使對本發(fā)明全面理解,闡述了大量的細(xì)節(jié)。對一個(gè)本領(lǐng)域的普通技術(shù)人員來說,很顯然實(shí)現(xiàn)本發(fā)明并不需要這些細(xì)節(jié)。在其它的例子中,公知的結(jié)構(gòu)、接口以及處理過程都沒有詳細(xì)地給出,為的是以免對本發(fā)明造成不必要的晦澀。
附圖2所示為從概念上說明依據(jù)本發(fā)明的一實(shí)施例以交錯(cuò)方式在操作數(shù)上執(zhí)行的壓縮數(shù)據(jù)宏指令指定的操作。雖然參照一以壓縮數(shù)據(jù)操作數(shù)的形式描述了本發(fā)明的一實(shí)施例,下面的描述同樣適用于對一純量數(shù)據(jù)格式進(jìn)行一定的操作(例如,邏輯操作)。在這實(shí)施例的上下文中“交錯(cuò)執(zhí)行”指將一宏指令操作數(shù)分解成幾個(gè)分離的段并利用同一硬件獨(dú)立地處理每段的過程。通過在連續(xù)段的處理中引入延遲來獨(dú)立地處理各段。如附圖2所示,一ADD指令的壓縮數(shù)據(jù)操作數(shù)分解成一“高位段”(數(shù)據(jù)單元3和2)和一“低位段”(數(shù)據(jù)單元1和0)。在延遲高位段的同時(shí)處理低位段。因此,在處理完高位段后就得到整個(gè)數(shù)據(jù)寬度的結(jié)果。此外,雖然下面的實(shí)施例描述為具有ADD和MUL執(zhí)行單元,可以利用不同的執(zhí)行單元作為可替換的實(shí)施例(例如,一可替換的實(shí)施例利用一個(gè)或多個(gè)乘法累加(MAC)單元代替執(zhí)行單元ADD和MUL執(zhí)行單元)。
雖然有許多不同的方法可以實(shí)現(xiàn)指令的交錯(cuò)執(zhí)行,而下面描述將宏指令譯碼成2個(gè)或更多個(gè)微指令以進(jìn)行交錯(cuò)執(zhí)行的實(shí)施例。在示例性的實(shí)施例中,該實(shí)施例支持指定包含128比特操作數(shù)的的邏輯寄存器的宏指令,將每個(gè)這種宏指令分解成至少2個(gè)“交錯(cuò)執(zhí)行”的微指令,該每個(gè)微指令僅對操作數(shù)的一半(高位段或低位段)操作。換句話說,每個(gè)交錯(cuò)執(zhí)行的微指令分別地產(chǎn)生對操作數(shù)的低位段和高位段在不同時(shí)間執(zhí)行的宏指令指定的操作(在一些實(shí)施例中,利用相同的硬件)。在一個(gè)實(shí)施例中,執(zhí)行下面的步驟1)當(dāng)交錯(cuò)執(zhí)行的微指令分別地僅使一半操作數(shù)從邏輯寄存器中存取時(shí),將操作數(shù)分解成一高位段和低位段;和2)每個(gè)微指令使結(jié)果操作數(shù)的一半寫入由宏指令指定的邏輯目的寄存器。一給定的宏指令產(chǎn)生的交錯(cuò)執(zhí)行微指令稱為相關(guān)的交錯(cuò)執(zhí)行微指令。等價(jià)的實(shí)施例以其它的方式分解操作數(shù)(例如,同時(shí)訪問和/或存儲(chǔ)整個(gè)操作數(shù)到適當(dāng)?shù)倪壿嫾拇嫫?,但在不同時(shí)間執(zhí)行由宏指令在指定的一半寬度操作數(shù)的操作)。此外,在描述的一個(gè)實(shí)施例中,將128比特操作數(shù)分成2段,替換實(shí)施例可使用更大或更小的操作數(shù),和/或?qū)⑦@些操作數(shù)分成更多的段。
在這里所用的術(shù)語邏輯寄存器是指將指令指定一包含一單個(gè)的操作數(shù)的存儲(chǔ)區(qū)域。因此,可以以硬件實(shí)現(xiàn)一邏輯寄存器,通過利用許多的公知技術(shù)包括一專用的物理寄存器、一個(gè)或多個(gè)利用一寄存器重命名機(jī)構(gòu)(在后面將進(jìn)一步描述)的動(dòng)態(tài)分配的物理寄存器,等等…附圖3所示為依據(jù)本發(fā)明的一實(shí)施例附加到一處理器體系的概念性的方框圖,該處理器能夠由相關(guān)的交錯(cuò)執(zhí)行微指令來獨(dú)立更新體系狀態(tài)并且提供一精確的異常模式。附圖3從概念上給出了一處理器的各個(gè)方面,而處理器的許多公知的內(nèi)容沒有圖示,因?yàn)樗鼈儗斫獗景l(fā)明是不需要。附圖3給出了一送入一解碼單元305的宏指令300。因?yàn)楹曛噶?00是應(yīng)用多微指令交錯(cuò)執(zhí)行的指令之一種,依據(jù)附圖3中的示例性實(shí)施例解碼單元305產(chǎn)生2個(gè)交錯(cuò)執(zhí)行微指令。那就是,與指定一對整個(gè)寬度操作數(shù)上執(zhí)行的操作的宏指令300對應(yīng),解碼單元305產(chǎn)生第一和第二交錯(cuò)執(zhí)行微指令,其每個(gè)微指令對一不同半操作數(shù)進(jìn)行操作。
在處理所得到的交錯(cuò)執(zhí)行微指令中,處理器能夠完成寄存器重命名和/或無序執(zhí)行。雖然本發(fā)明可以應(yīng)用于許多不同的寄存器重命名機(jī)構(gòu)和無序執(zhí)行模式,但是下文分別參照在美國專利US5446912和US5197132中描述的兩種不同的機(jī)構(gòu)來描述本發(fā)明。
不管是否應(yīng)用存器重命名和/或無序執(zhí)行,處理器按照一種給定的順序接收宏指令并按照該順序更新體系狀態(tài)。正因?yàn)槿绱?,必須維持接收宏指令的順序??梢詰?yīng)用各種技術(shù)來保持接收宏指令的順序。例如,在一通過流水線來保持宏指令順序的順序處理器中,或者通過在同一流水線中分配連續(xù)的級(jí)或者通過在相同的時(shí)間發(fā)送到多個(gè)流水線來將相關(guān)的交錯(cuò)執(zhí)行微指令分組。相反,附圖3給出了一無序處理器。盡管可以應(yīng)用各種技術(shù)來保持接收宏指令的順序,為示例性的目的,附圖3包括一指令順序隊(duì)列310。通過應(yīng)用美國專利US5446912中所述的再排序緩沖器,US5197132的運(yùn)行記錄器或任何其它的指令順序維持結(jié)構(gòu)來實(shí)現(xiàn)指令順序隊(duì)列310。指令順序隊(duì)列310作為一環(huán)行隊(duì)列工作。正因?yàn)槿绱?,指令順序?duì)列310包括一頭指針325來標(biāo)識(shí)指定的后續(xù)入口,以及一尾指針330指示隊(duì)列何時(shí)是滿的。
在美國專利US5446912和US5197132所述系統(tǒng)中,將每個(gè)宏指令各自地在再排序緩沖器或運(yùn)行記錄器(log)中以接收宏指令的順序中分配一個(gè)入口。通過這種方式,保持接收宏指令的順序的記錄。相反,交叉執(zhí)行一宏指令要求在指定的指令順序隊(duì)列310中分配兩個(gè)入口,每個(gè)交錯(cuò)執(zhí)行微指令需要一個(gè)。參考附圖3,在指令順序隊(duì)列310中第一和第二交錯(cuò)執(zhí)行微指令各自被分配入口315和320。
附圖3還給出了一維持一退役指針335的退役單元340。退役指針335在頭指針325之后并標(biāo)識(shí)在指令順序隊(duì)列310中被認(rèn)為退役的當(dāng)前的入口(指退役窗口)。不同的系統(tǒng)試圖從指令順序隊(duì)列310中一次退役不同的數(shù)量的入口,本發(fā)明的一個(gè)實(shí)施例試圖一次退役3個(gè)入口。
不管是應(yīng)用順序還是無序的處理器,都會(huì)出現(xiàn)一定的與更新響應(yīng)交錯(cuò)執(zhí)行微指令的體系狀態(tài)相關(guān)的問題。特別是,體系狀態(tài)都必須提供一來自程序員觀點(diǎn)的精確的異常模式(這包括操作系統(tǒng)程序員的)。為確保一精確的異常模式,一處理器可以設(shè)計(jì)成相關(guān)的交錯(cuò)執(zhí)行微指令都必須一起更新體系狀態(tài)。要求所有的交錯(cuò)執(zhí)行微指令都一起用于更新體系狀態(tài)確保只有在執(zhí)行兩微指令而不產(chǎn)生任何不可恢復(fù)的異常時(shí)才更新體系狀態(tài)。一不可恢復(fù)的異常定義為處理器不能處理的異常。因此,一不可恢復(fù)的異常不包括可由微代碼和/或硬件處理的異常,但包括對程序員可見的異常(包括操作系統(tǒng)程序員)。
不幸的是,要求交錯(cuò)執(zhí)行微指令一起來更新體系狀態(tài)降低了處理器的效率。特別是,當(dāng)希望第一微指令在與第二微指令不同的時(shí)間來更新體系狀態(tài)時(shí)將會(huì)有一些時(shí)間。例如,假設(shè)當(dāng)前的退役窗口包括第一微指令但不包括第二微指令。作為另外一個(gè)例子,假設(shè)第一微指令執(zhí)行完畢,但第二微指令還沒有。
本發(fā)明的第一方面是允許相關(guān)的交錯(cuò)執(zhí)行微指令獨(dú)立地更新體系狀態(tài)同時(shí)仍具有一精確的異常模式。為維持一精確的異常模式,如果處理器試圖響應(yīng)獨(dú)立于一相關(guān)的第二交錯(cuò)執(zhí)行微指令的第一交錯(cuò)執(zhí)行微指令更新體系狀態(tài),處理器必須確保第二交錯(cuò)執(zhí)行微指令不引起一不可恢復(fù)的異常。涉及的兩類異常包括1)地址異常;和2)數(shù)值異常。
地址異常關(guān)于地址異常,在將要求一存儲(chǔ)器存取(讀或?qū)?的一宏指令譯解成兩個(gè)微指令的實(shí)施例中,每個(gè)交錯(cuò)執(zhí)行微指令對操作數(shù)寬度的一半進(jìn)行存取。為提供一精確的異常模式,必須保證如果整個(gè)寬度的任一段的存取導(dǎo)致了一地址異常則任一交錯(cuò)執(zhí)行微指令都不更新體系狀態(tài)。因此,為提供一精確的異常模式,要檢驗(yàn)與至少第一交錯(cuò)執(zhí)行微指令聯(lián)系的整個(gè)寬度操作數(shù)地址,而不獨(dú)立地檢驗(yàn)分別與第一和第二微指令聯(lián)系的半寬度地址。因此,當(dāng)?shù)谝唤诲e(cuò)執(zhí)行微指令準(zhǔn)備更新體系狀態(tài)時(shí),它可以確定在任一半寬度操作數(shù)存儲(chǔ)器存取上是否有一地址異常。是否作為處理第二微指令的部分檢驗(yàn)任一部分或是整個(gè)寬度操作數(shù)地址取決于實(shí)現(xiàn)過程。例如,在確保第一微指令在第二微指令之前執(zhí)行的實(shí)現(xiàn)中(比如,一順序的執(zhí)行,一無序的執(zhí)行,將該無序執(zhí)行修改以要求按順序執(zhí)行進(jìn)行存儲(chǔ)器存取的相關(guān)交叉執(zhí)行微指令,等等),在第二交錯(cuò)執(zhí)行微指令中操作碼地址檢驗(yàn)是可選的。作為另外一個(gè)例子,在可以無序地執(zhí)行進(jìn)行存儲(chǔ)器存取的相關(guān)交錯(cuò)執(zhí)行微指令的實(shí)現(xiàn)中,將檢驗(yàn)半寬度操作數(shù)或者整個(gè)寬度操作數(shù)作為處理第二微指令的一部分。
附圖3給出了一存儲(chǔ)器存取單元345。該存儲(chǔ)器存取單元345包括一地址單元350,對于一給定的交錯(cuò)執(zhí)行微指令該地址單元350校驗(yàn)與半寬度操作數(shù)地址不同的整個(gè)寬度操作數(shù)地址,該半寬度操作數(shù)地址由該給定的交錯(cuò)執(zhí)行微指令負(fù)責(zé)。應(yīng)用公知技術(shù)將存儲(chǔ)器存取單元345并入一處理器,該公知技術(shù)在此不進(jìn)一步描述。
附圖4所示為依據(jù)本發(fā)明的一實(shí)施例對一單個(gè)的交錯(cuò)執(zhí)行微指令進(jìn)行地址異常檢驗(yàn)的流程圖。在步驟400中,即使一個(gè)交錯(cuò)執(zhí)行微指令僅對半寬度操作數(shù)進(jìn)行操作,仍然還是檢驗(yàn)整個(gè)寬度操作碼。詳細(xì)地說,在一操作數(shù)是128位的實(shí)施例中,地址單元350進(jìn)行一128位寬度的校驗(yàn)。在一個(gè)實(shí)施例中,步驟400包括多種形式的存儲(chǔ)器存取操作的校驗(yàn)對齊錯(cuò)誤(alignment faults),頁面錯(cuò)誤和段限制越界錯(cuò)誤。然而,由某一實(shí)施例支持的某些指令(未對準(zhǔn)的128位加載,部分加載(僅加載128位操作數(shù)的16位或64位),預(yù)取,等)不要求一對齊校驗(yàn)。此外,通過將低位段的地址和第一和第二交錯(cuò)執(zhí)行微指令相關(guān)來校驗(yàn)整個(gè)寬度地址。為得到高位段的地址,將一個(gè)對齊的地址的第4位設(shè)定為1(相當(dāng)于將8位加到低位數(shù)據(jù)段地址中)。因?yàn)橐粋€(gè)對齊的地址的4個(gè)最低位將會(huì)為零,在一實(shí)施例中通過測試4個(gè)最低位來校驗(yàn)對齊。至于段限制越界和頁錯(cuò)誤,應(yīng)用公知的技術(shù)(例如,低位段地址用作基地址,并校驗(yàn)整個(gè)寬度操作數(shù)地址)。
如果在整個(gè)寬度操作上檢測到地址異常,到步驟405,在該處記錄異常(例如,在指令順序隊(duì)列310的適當(dāng)入口處)。否則,到步驟410,在該處記錄沒有地址異常產(chǎn)生。
數(shù)值異常關(guān)于數(shù)值異常,在一執(zhí)行級(jí)只有執(zhí)行實(shí)際的算術(shù)操作時(shí)通常才能確定一數(shù)值異常。然而,第一和第二交錯(cuò)執(zhí)行微指令獨(dú)立地執(zhí)行由其父宏指令要求的一半算術(shù)操作。對于每個(gè)交錯(cuò)執(zhí)行微指令,作為是否產(chǎn)生數(shù)值異常的一指示存儲(chǔ)在指令順序隊(duì)列310的一適當(dāng)入口處。因此,一交錯(cuò)執(zhí)行微指令能夠獨(dú)立地更新體系狀態(tài)的一種情況是在其它的交錯(cuò)執(zhí)行微指令沒有任何異常地運(yùn)行完之后。然而,如果一給定的交錯(cuò)執(zhí)行微指令不是必須等到其它的交錯(cuò)執(zhí)行微指令執(zhí)行完畢之后才執(zhí)行的話,則可以提高處理器的效率。最后,本發(fā)明的一個(gè)實(shí)施例允許屏蔽數(shù)值異常。當(dāng)屏蔽一個(gè)數(shù)值異常時(shí),通過一種實(shí)際上對程序員不可見的方式來處理該異常(例如,以微代碼來處理異常,以一種為可恢復(fù)的異常設(shè)計(jì)的特殊的宏指令例程,等)。相反,未被屏蔽的異常是那些不可恢復(fù)的異常(它們是機(jī)器本身不能修正的異常)。
附圖3給出了一異常屏蔽寄存器355,該屏蔽寄存器355存儲(chǔ)指示依據(jù)公知技術(shù)哪些數(shù)值異常被屏蔽和哪些數(shù)值異常沒有被屏蔽的數(shù)據(jù)。在一順序處理器中,可應(yīng)用類似的技術(shù)。盡管在一所描述的實(shí)施例中,可選擇性地屏蔽數(shù)值異常,而可替代的實(shí)施例不具有這樣一種選擇機(jī)構(gòu)(比如,某些或所有的數(shù)值異??偸强苫謴?fù)的,某些或所有的數(shù)值異??偸遣豢苫謴?fù)的,等)。在所有的數(shù)值異常都是可恢復(fù)的情況中,不需要利用相關(guān)交錯(cuò)執(zhí)行微指令之間的相關(guān)來處理數(shù)值異常。
體系更新再參照附圖3,退役單元包括一退役延遲單元360。當(dāng)一交錯(cuò)執(zhí)行微指令要退役時(shí),退役延遲單元360依據(jù)相關(guān)交錯(cuò)執(zhí)行微指令來確定是否必須延遲更新體系狀態(tài)。在附圖3所示的實(shí)施例中,通過檢查一校驗(yàn)下一操作域312來檢測一交錯(cuò)執(zhí)行微指令。在操作中,將數(shù)據(jù)存儲(chǔ)在一入口的校驗(yàn)下一操作域中以連接一入口到下一入口。在對于每個(gè)宏指令產(chǎn)生兩交錯(cuò)執(zhí)行微指令的實(shí)施例中分別將邏輯1和邏輯0存儲(chǔ)在給第一和第二交錯(cuò)執(zhí)行微指令分配的入口的校驗(yàn)下一操作域中,(分別參見附圖3)。因此,在一入口的校驗(yàn)下一操作域中的邏輯1指示在利用當(dāng)前入口更新處理器的體系狀態(tài)之前需要校驗(yàn)下一入口。雖然一個(gè)實(shí)施例使用指令序列隊(duì)列中的一域,而替代實(shí)施例應(yīng)用多種技術(shù)(例如,檢查在指令順序隊(duì)列中的操作碼,在一順序處理器控制與第一微指令相關(guān)的位,等)。
附圖5所示為依據(jù)本發(fā)明的一實(shí)施例獨(dú)立地更新響應(yīng)相關(guān)的交錯(cuò)執(zhí)行微指令的體系狀態(tài)的流程圖。在附圖5中,假設(shè)一交錯(cuò)執(zhí)行微指令準(zhǔn)備更新體系狀態(tài)。在步驟505中,通過檢查在先記錄的地址異常數(shù)據(jù)確定是否有任何地址異常。至于附圖3,通過校驗(yàn)由地址單元350存儲(chǔ)在指令順序隊(duì)列310中的異常數(shù)據(jù)來執(zhí)行步驟505(見附圖4中的步驟405和410)。如先前所述,地址單元在整個(gè)寬度操作上校驗(yàn)地址異常。如果有地址異常,到步驟510,依據(jù)公知技術(shù)處理異常。否則控制程序從步驟505到步驟525。
如步驟525所示,確定是否屏蔽了所有的數(shù)值異常。如上所述,當(dāng)屏蔽了所有的數(shù)值異常時(shí),由一相關(guān)交錯(cuò)執(zhí)行微指令產(chǎn)生的任何數(shù)值異常都將是可恢復(fù)的,所以,將不會(huì)引起不確切的異常狀態(tài)。如果屏蔽了所有的數(shù)值異常則控制程序從步驟525到步驟520。以這種方式,可以允許一交錯(cuò)執(zhí)行微指令獨(dú)立于相關(guān)交錯(cuò)執(zhí)行微指令更新體系狀態(tài)。由于解除了這一對體系更新過程的限制,提高了處理器的效率。相反,如果至少有一個(gè)數(shù)值異常沒有被屏蔽掉,則控制進(jìn)程到步驟530。當(dāng)然,在不能有選擇性地屏蔽數(shù)值異常的實(shí)施例中,步驟525是不需要的。
盡管在所述的實(shí)施例中,響應(yīng)一當(dāng)前交錯(cuò)執(zhí)行微指令延遲更新體系狀態(tài)基于是否已經(jīng)沒有任何異常地完成執(zhí)行了一相關(guān)的第二交錯(cuò)執(zhí)行微指令,或基于是否屏蔽掉了所有的數(shù)值異常,替換實(shí)施例具有相對于屏蔽了數(shù)值異常的實(shí)施例有更大的粒度(granularity)。更詳細(xì)地,假設(shè)執(zhí)行一微指令產(chǎn)生一被屏蔽的異常,不能保證該異常是可恢復(fù)的,因?yàn)榉?wù)某些異常能夠引起其它的數(shù)值異常的產(chǎn)生(稱為第二數(shù)值異常)。如果產(chǎn)生這樣的一當(dāng)前不可屏蔽的第二數(shù)值異常,那么就會(huì)產(chǎn)生一不可恢復(fù)的異常。至少對于某些異常,可能的第二數(shù)值異常是有限的(換句話說,可能的第二數(shù)值異常集不包括所有的可能的數(shù)值異常)。因此,在一個(gè)變型實(shí)施例中,如果在執(zhí)行交錯(cuò)執(zhí)行微指令時(shí)產(chǎn)生一可恢復(fù)的數(shù)值異常(例如,一被屏蔽的數(shù)值異常),并且在其服務(wù)期間產(chǎn)生的所有的第二數(shù)值異常都是可恢復(fù)的(比如,可屏蔽的),為了數(shù)值異常的目的而不響應(yīng)一相關(guān)的交錯(cuò)執(zhí)行微指令延遲更新體系狀態(tài)。
在步驟530中,確定是否沒有異常地執(zhí)行完畢了所有相關(guān)的交錯(cuò)執(zhí)行微指令。具體地說,在相關(guān)交錯(cuò)執(zhí)行微指令已經(jīng)執(zhí)行完畢后有一些時(shí)間,因此,將已經(jīng)記錄了已經(jīng)產(chǎn)生的任何異常(例如,在指令順序隊(duì)列310中)。如果沒有異常地執(zhí)行完畢了所有的相關(guān)的交錯(cuò)執(zhí)行微指令,控制前進(jìn)到步驟520。相反,如果任何相關(guān)交錯(cuò)執(zhí)行微指令可能或已經(jīng)引起一數(shù)值異常,控制到步驟535,在該步驟中延遲更新體系狀態(tài)。通過舉例,如果1)一相關(guān)交錯(cuò)執(zhí)行微指令已經(jīng)引起一數(shù)值異常;2)還沒有執(zhí)行一相關(guān)交錯(cuò)執(zhí)行微指令;3)得不到關(guān)于一相關(guān)交錯(cuò)執(zhí)行微指令的信息,等,控制從步驟530到步驟535。通過進(jìn)一步的舉例,在一實(shí)施例中得不到關(guān)于一相關(guān)交錯(cuò)執(zhí)行微指令的信息,在該實(shí)施例中,在退役窗口中的最后的操作不對在指令順序隊(duì)列中的下一入口進(jìn)行存取(從在退役窗口之外的指令順序隊(duì)列的下一入口中不具有到退役單元的端口)。
在這些情況下延遲更新體系狀態(tài),在下一體系更新時(shí)機(jī)將再次考慮當(dāng)前的微指令。舉例來說,在一順序處理器中具有一些緩沖區(qū)(例如,緩沖器級(jí),臨時(shí)微代碼寄存器,等)以存放第一交錯(cuò)執(zhí)行微指令的結(jié)果,直到第二交錯(cuò)執(zhí)行微指令準(zhǔn)備好。盡管所述的實(shí)施例包括步驟530,當(dāng)沒有屏蔽掉所有的數(shù)值異常時(shí),不執(zhí)行步驟530的變型實(shí)施例而能夠簡單地將控制從步驟525送到步驟535。
附圖6所示為依據(jù)本發(fā)明的一實(shí)施例的退役延遲單元360的電路示意圖。附圖6中所示的電路將在退役電路中提供在退役窗口中的每個(gè)操作,通過在退役窗口中的多操作可以串行的方式共享一個(gè)或多個(gè)這種電路。在附圖6中,將異常屏蔽位輸送到AND門600的輸入中。假設(shè)當(dāng)一異常被屏蔽時(shí)異常屏蔽位是邏輯1,當(dāng)屏蔽了所有的異常時(shí),AND門600的輸出將為邏輯1—當(dāng)由于數(shù)值異常沒有阻止獨(dú)立的退役時(shí)。AND門600的輸出是一OR門605的一輸入。OR門605的另一輸入是指示是否其它的相關(guān)交錯(cuò)執(zhí)行微指令已經(jīng)沒有任何異常地執(zhí)行完畢的信號(hào)。通過將指示執(zhí)行完畢的位和指示相對于指令順序隊(duì)列的后來的入口(例如,下一入口)沒有異常的位集中并進(jìn)行與操作產(chǎn)生這一信號(hào)。結(jié)果,當(dāng)獨(dú)立的退役是可能的時(shí),OR門的輸出將為邏輯1。將OR門605的輸出通過一反相器輸入到一AND門610。AND門610的另一輸入是指示當(dāng)前入口的校驗(yàn)下一操作域的狀態(tài)的信號(hào)。在這個(gè)實(shí)施例中,在校驗(yàn)下一操作域中的邏輯1指示指令順序隊(duì)列310的下一入口包含一相關(guān)交錯(cuò)執(zhí)行微指令。正因?yàn)槿绱耍?dāng)應(yīng)當(dāng)延遲退役時(shí),AND門610的所有輸入都是邏輯1。
盡管在附圖6中給出了一電路示意圖,但可以應(yīng)用任何不同的電路結(jié)構(gòu)來實(shí)現(xiàn)。例如,在上面描述的變型實(shí)施例中,在該實(shí)施例中在退役窗口中的最后操作不能對在指令順序隊(duì)列中的下一入口進(jìn)行存取,不能得到一表示在退役窗口之外的任何相關(guān)交錯(cuò)執(zhí)行微指令是否已經(jīng)沒有引起任何異常地執(zhí)行完畢的信號(hào)。
例示系統(tǒng)當(dāng)將一較大操作數(shù)規(guī)模的操作結(jié)合到已有的處理器體系中時(shí)實(shí)現(xiàn)雙微指令交錯(cuò)執(zhí)行尤其有用。例如,一個(gè)實(shí)施例將128位壓縮的浮點(diǎn)運(yùn)算結(jié)合到已有的32位體系中(例如奔騰II處理器)。在這個(gè)例子中,處理器支持用以存儲(chǔ)壓縮的浮點(diǎn)運(yùn)算數(shù)據(jù)的Y個(gè)新邏輯寄存器。將一個(gè)壓縮的浮點(diǎn)宏指令轉(zhuǎn)換為兩個(gè)半寬度的交錯(cuò)執(zhí)行微指令(例如64位),即一“高位操作”和一“低位操作”。
假設(shè)已有的體系(部分地)利用一寄存器映射表來將邏輯寄存器映射到物理寄存器來執(zhí)行寄存器重命名,每個(gè)交錯(cuò)執(zhí)行微指令的邏輯源和/或目的寄存器都是指針,該指針指到對于Y個(gè)128位邏輯寄存器添加的一新寄存器映射表(例如一RAT)中的特定寄存器入口。在寄存器映射表中的入口依次指到對于邏輯資源和目的寄存器當(dāng)前分配的物理寄存器的位置。依據(jù)一個(gè)實(shí)施例,為適應(yīng)上述的半寬度的高位操作和低位操作,用于壓縮浮點(diǎn)數(shù)據(jù)的新的RAT具有Y*2個(gè)入口。因此,例如,對于Y個(gè)新邏輯寄存器中的每一個(gè)寄存器不是RAT有一個(gè)入口,而是對于Y個(gè)新邏輯寄存器中的每一個(gè)寄存器RAT有二個(gè)入口。每個(gè)入口均可用于新128位邏輯寄存器其中之一的高位半部分或低位半部分。
因此高位和低位交叉執(zhí)行微指令的每一個(gè)具有在寄存器映射表中同各自的操作數(shù)相應(yīng)的相關(guān)入口。每個(gè)交錯(cuò)執(zhí)行微指令檢索并獨(dú)立地處理128位操作數(shù)的64位段。因此,在不同的時(shí)間,應(yīng)用同一64位硬件單元來執(zhí)行高位和低位操作數(shù)。
在一個(gè)實(shí)施例中,加入了一新的128位退役寄存器文件(retirementregister file)以存儲(chǔ)Y個(gè)新邏輯寄存器的體系狀態(tài)(例如,與在美國專利US5446912中的退役寄存器文件類似)。變型實(shí)施例可以以不同方式處理體系狀態(tài)(例如,具有Y*2個(gè)64位退役寄存器,每個(gè)設(shè)計(jì)成有高位或低位;不利用退役寄存器文件—見美國專利US5197132;等)。
在一個(gè)實(shí)施例中,當(dāng)一第二交錯(cuò)執(zhí)行微指令產(chǎn)生一可恢復(fù)的數(shù)值異常時(shí),處理器在處理異常之前清空系統(tǒng)。假設(shè)第一交錯(cuò)執(zhí)行微指令已經(jīng)執(zhí)行并準(zhǔn)備退役,不同的實(shí)施例以不同的方式處理第一交錯(cuò)熱行微指令先前產(chǎn)生的結(jié)果。例如,在一個(gè)實(shí)施例中,清空第一交錯(cuò)執(zhí)行微指令的結(jié)果并且第一交錯(cuò)執(zhí)行微指令與第二交錯(cuò)執(zhí)行微指令一起重新執(zhí)行。在變型實(shí)施例中,保存第一交錯(cuò)執(zhí)行微指令的結(jié)果從而不需要重新執(zhí)行第一交錯(cuò)執(zhí)行微指令??梢詰?yīng)用任何數(shù)目的不同的機(jī)構(gòu)來保存第一交錯(cuò)執(zhí)行微指令的結(jié)果(例如,一附加的臨時(shí)存儲(chǔ)區(qū)以存儲(chǔ)結(jié)果,在清空期間保持在當(dāng)前的存儲(chǔ)位置的結(jié)果的機(jī)構(gòu),等)。
結(jié)論因此,本發(fā)明揭示了一種用于交錯(cuò)執(zhí)行微指令的獨(dú)立退役的方法和裝置。在此描述的詳細(xì)的結(jié)構(gòu)設(shè)計(jì)和方法僅是示例性地說明本發(fā)明的原理,在不脫離本發(fā)明的范圍內(nèi)可以作出大量的修改。雖然本發(fā)明已經(jīng)依據(jù)特定的實(shí)施例給出,但不應(yīng)將它僅限制于此。而是,僅通過所附的權(quán)利要求的范圍來限制本發(fā)明。
權(quán)利要求
1.一種方法,包括計(jì)算機(jī)執(zhí)行的如下步驟將對一段數(shù)據(jù)指定一操作的一宏指令解碼成一第一和第二微指令,執(zhí)行該微指令分別使所說的操作在所說的數(shù)據(jù)段的不同部分上執(zhí)行;與所說的第二微指令的執(zhí)行無關(guān)地執(zhí)行所說的第一微指令;檢測所說的第二微指令將不會(huì)引起任何不可恢復(fù)的異常;和響應(yīng)所說的第一微指令,在比所說的第二微指令較早的一時(shí)鐘周期內(nèi)更新體系狀態(tài)。
2.如權(quán)利要求1所述的方法,其中所說檢測所說的第二微指令將不會(huì)引起任何不可恢復(fù)的異常的步驟包括如下步驟檢測所說的操作是一存儲(chǔ)器存取操作;在執(zhí)行第一微指令期間,檢測由所說的第一和第二微指令要求的所說的存儲(chǔ)器存取操作將不會(huì)引起一地址異常。
3.如權(quán)利要求2所述的方法,進(jìn)一步包括如下步驟在執(zhí)行所說的第二微指令期間,檢測由所說的第一和第二微指令要求的所說的存儲(chǔ)器存取操作將不會(huì)引起一地址異常。
4.如權(quán)利要求2所述的方法,進(jìn)一步包括如下步驟在執(zhí)行所說的第一微指令之前執(zhí)行所說的第二微指令。
5.如權(quán)利要求2所述的方法,其中檢測由所說的第一和第二微指令要求的所說的存儲(chǔ)器存取操作將不會(huì)引起一地址異常的步驟包括如下步驟校驗(yàn)對齊,頁面和段違界錯(cuò)誤。
6.如權(quán)利要求2所述的方法,其中所說的宏指令指定一壓縮的數(shù)據(jù)操作,所說的數(shù)據(jù)段是一包括許多數(shù)據(jù)元素的壓縮的數(shù)據(jù)項(xiàng),并且所說的第一和第二微指令使所說的壓縮的數(shù)據(jù)操作在所說的許多的數(shù)據(jù)元素的不同部分上執(zhí)行。
7.如權(quán)利要求1所述的方法,其中檢測所說的第二微指令將不會(huì)引起任何不可恢復(fù)的異常的步驟包括如下步驟檢測所說的操作是一算術(shù)操作;和檢測所說的第二微指令將不會(huì)引起任何不可恢復(fù)的數(shù)值異常。
8.如權(quán)利要求7所述的方法,其中檢測所說的第二微指令將不會(huì)引起任何不可恢復(fù)的數(shù)值異常的步驟包括如下步驟檢測屏蔽了所有的數(shù)值異常。
9.如權(quán)利要求7所述的方法,其中所說的數(shù)值異常包括????。
10.如權(quán)利要求7所述的方法,其中所說的宏指令指定一壓縮的數(shù)據(jù)操作,所說的數(shù)據(jù)段是一包括許多數(shù)據(jù)元素的壓縮的數(shù)據(jù)項(xiàng),并且所說的第一和第二微指令使所說的壓縮的數(shù)據(jù)操作在許多的數(shù)據(jù)元素的不同部分上執(zhí)行。
11.如權(quán)利要求1所述的方法,其中所說的檢測所說的第二微指令將不會(huì)引起任何不可恢復(fù)的異常的步驟包括如下步驟如果所說的操作是一存儲(chǔ)器存取,然后在執(zhí)行所說的第一微指令期間檢測所說的第二微指令的存儲(chǔ)器存取將不會(huì)引起一地址異常;和如果所說的操作是一算術(shù)操作,然后檢測執(zhí)行所說的第二微指令時(shí)不會(huì)出現(xiàn)不可恢復(fù)的異常的數(shù)值異常。
12.如權(quán)利要求1所述的方法,其中所說的宏指令指定一壓縮的數(shù)據(jù)操作,數(shù)據(jù)段是一包括許多數(shù)據(jù)元素的壓縮的數(shù)據(jù)項(xiàng),并且第一和第二微指令使所說的壓縮的數(shù)據(jù)操作在所說的許多的數(shù)據(jù)元素的不同部分上運(yùn)行。
13.如權(quán)利要求12所述的方法,其中所說的許多的數(shù)據(jù)元素的每一個(gè)都代表一個(gè)浮點(diǎn)值。
14.如權(quán)利要求12所述的方法,其中所說的許多的數(shù)據(jù)元素的每一個(gè)都代表一個(gè)整數(shù)值。
15.一種處理器,它包括對在數(shù)據(jù)上指定一操作的宏指令進(jìn)行解碼的解碼單元,該解碼單元將該宏指令解碼成一第一和第二微指令,執(zhí)行該微指令使所說的操作在該數(shù)據(jù)的不同部分上獨(dú)立地執(zhí)行;一與解碼單元耦合的隊(duì)列,該隊(duì)列具有許多存儲(chǔ)數(shù)據(jù)的入口,該數(shù)據(jù)指示由所說的處理器接收宏指令的順序,每個(gè)入口包括一校驗(yàn)下一操作域,所說的隊(duì)列在順序入口中存儲(chǔ)所說的第一和第二微指令和在順序入口的校驗(yàn)下一操作域中存儲(chǔ)數(shù)據(jù)以指示所說的順序入口屬于相同的宏指令。
16.如權(quán)利要求15所述的處理器,它還包括一在不同的時(shí)間執(zhí)行所說的第一和第二微指令的執(zhí)行單元。
17.如權(quán)利要求16所述的處理器,它還包括一地址單元,該地址單元響應(yīng)所說的第一和第二微指令其中之一的單個(gè)指令校驗(yàn)是否對整個(gè)數(shù)據(jù)進(jìn)行一存儲(chǔ)器存取將會(huì)引起一地址異常。
18.如權(quán)利要求17所述的處理器,其中所說的宏指令指定一壓縮的數(shù)據(jù)操作,所說的數(shù)據(jù)是一包括許多數(shù)據(jù)元素的壓縮的數(shù)據(jù)項(xiàng),并且所說的第一和第二微指令使所說的壓縮的數(shù)據(jù)操作在所說的許多的數(shù)據(jù)元素的不同部分上執(zhí)行。
19.如權(quán)利要求18所述的處理器,其中所說的地址單元校驗(yàn)是否一存儲(chǔ)器存取將會(huì)引起一對齊,頁面,或段越界錯(cuò)誤。
20.如權(quán)利要求15所說的處理器,進(jìn)一步包括一與所說的隊(duì)列耦合的退役單元,確定是否所說的順序入口能否獨(dú)立地退役。
21.如權(quán)利要求20所述的處理器,其中所說的退役單元包括一退役延遲單元以檢測是否所說的第二微指令是否將會(huì)引起任何不可恢復(fù)的異常。
22.如權(quán)利要求20所述的處理器,其中所說的退役單元包括一與所說的域耦合的退役延遲單元,以確定是否所說的第一微指令的退役必需延遲到所說的第二微指令執(zhí)行之后。
23.如權(quán)利要求15所述的處理器,它還包括一存儲(chǔ)指示那些數(shù)值異常當(dāng)前被指定為不可恢復(fù)的異常的數(shù)據(jù)的異常屏蔽寄存器;和與所說的異常屏蔽寄存器和所說的校驗(yàn)下一操作域耦合的退役延遲單元以延遲所說的第一微指令的退役,如果保證所說的第二微指令不會(huì)引起任何不可恢復(fù)的數(shù)值異常的話。
24.如權(quán)利要求23所述的處理器,它還包括一地址單元,該地址單元響應(yīng)所說的第一微指令并獨(dú)立于所說的第二微指令,校驗(yàn)是否對整個(gè)數(shù)據(jù)進(jìn)行一存儲(chǔ)器存取將會(huì)引起一地址異常,所說的許多入口的每個(gè)入口都包括一異常域,與所說的異常域相耦合的所說的地址單元在為所說的第一微指令分配的入口中存儲(chǔ)指示校驗(yàn)結(jié)果的數(shù)據(jù),所說的退役延遲單元與所說的異常域耦合。
25.如權(quán)利要求24所述的處理器,其中所說的宏指令指定一壓縮的數(shù)據(jù)操作,所說的數(shù)據(jù)是一包括許多數(shù)據(jù)元素的壓縮的數(shù)據(jù)項(xiàng),并且所說的第一和第二微指令使所說的壓縮的數(shù)據(jù)操作在許多的數(shù)據(jù)元素的不同部分上執(zhí)行。
全文摘要
本申請公開了一種在一以多微指令實(shí)現(xiàn)的交錯(cuò)執(zhí)行的系統(tǒng)中更新體系狀態(tài)的方法和裝置。依據(jù)本發(fā)明的一方面,提供一種方法,在該方法中將一宏指令解碼成一第一和第二微指令。宏指令在一段數(shù)據(jù)上指定一操作,執(zhí)行第一和第二微指令分別使所說的操作在數(shù)據(jù)段的不同部分上運(yùn)行。該方法還要求與第二微指令無關(guān)地執(zhí)行第一微指令(例如,在不同時(shí)間),并且檢測所說的第二微指令將不引起任何不可恢復(fù)的異常。然后將第一微指令的結(jié)果用于在比所說的第二微指令早一時(shí)鐘周期更新體系狀態(tài)。
文檔編號(hào)G06F9/22GK1242546SQ9910754
公開日2000年1月26日 申請日期1999年3月31日 優(yōu)先權(quán)日1999年3月31日
發(fā)明者M·阿布達(dá)拉, V·彭特科夫斯基 申請人:英特爾公司