專利名稱:擴(kuò)展精度的整數(shù)除的方法
技術(shù)領(lǐng)域:
本發(fā)明通常涉及微處理器和計(jì)算機(jī)系統(tǒng)領(lǐng)域。更準(zhǔn)確地說(shuō),本發(fā)明涉及用于擴(kuò)展精度的整數(shù)除算法的方法和設(shè)備。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)在我們的社會(huì)中已經(jīng)變得日益普遍。計(jì)算機(jī)的處理能力已經(jīng)在廣泛的行業(yè)中提高了工人的效率和生產(chǎn)率。隨著購(gòu)買并擁有一臺(tái)計(jì)算機(jī)的成本繼續(xù)下降,越來(lái)越多的消費(fèi)者已經(jīng)能夠利用更新更快的機(jī)器。此外,許多人因?yàn)榉奖阕杂啥矚g使用筆記本計(jì)算機(jī)。移動(dòng)計(jì)算機(jī)使得用戶能夠在離開辦公室或旅游時(shí)隨身攜帶他們的數(shù)據(jù)和工作。銷售人員、公司主管甚至是學(xué)生非常熟悉這種情況。
隨著處理器技術(shù)的進(jìn)步,也正在產(chǎn)生更新的軟件代碼以運(yùn)行在采用這些處理器的機(jī)器上。用戶通常期望并要求他們的計(jì)算機(jī)有更高的性能,而不管正在使用的軟件的類型。一個(gè)這樣的問題就從實(shí)際正在處理器中被執(zhí)行的指令和操作的種類中而產(chǎn)生了。根據(jù)操作的復(fù)雜度和/或所需電路的類型,某些類型的操作需要更多時(shí)間來(lái)完成。這就提供了一個(gè)優(yōu)化某些復(fù)雜操作在處理器中被執(zhí)行的方式的機(jī)會(huì)。
發(fā)明內(nèi)容
通過進(jìn)行擴(kuò)展精度的整數(shù)除算法以便增加擴(kuò)展精度的整數(shù)除計(jì)算的性能并減少用于執(zhí)行擴(kuò)展精度的整數(shù)除的內(nèi)部操作的處理器的制造成本,本發(fā)明方法的一個(gè)實(shí)施例實(shí)現(xiàn)了改進(jìn)的內(nèi)部處理器操作的技術(shù)效果。在一個(gè)實(shí)施例的方法中,對(duì)大于內(nèi)部運(yùn)算裝置中的任何之一的擴(kuò)展精度的整數(shù)進(jìn)行擴(kuò)展精度的整數(shù)除計(jì)算的技術(shù)問題通過以下步驟得到解決把L位寬的整數(shù)被除數(shù)分成兩個(gè)部分,其中第一整數(shù)格式部分包括所述第一整數(shù)被除數(shù)的低M位,第二整數(shù)格式部分包括所述第一整數(shù)被除數(shù)的高M(jìn)位。
通過把第一和第二整數(shù)部分從內(nèi)部整數(shù)格式轉(zhuǎn)換成內(nèi)部浮點(diǎn)格式部分,并把N位寬的整數(shù)除數(shù)從內(nèi)部整數(shù)格式轉(zhuǎn)換成內(nèi)部浮點(diǎn)格式;一個(gè)實(shí)施例的方法實(shí)現(xiàn)了減少增加了擴(kuò)展精度的整數(shù)除計(jì)算的性能的改善的內(nèi)部處理器操作的制造成本。在內(nèi)部浮點(diǎn)格式下用第一和第二部分除以除數(shù)以獲得第一和第二內(nèi)部浮點(diǎn)格式的商。然后把第一和第二商從內(nèi)部浮點(diǎn)格式轉(zhuǎn)換成第一和第二內(nèi)部整數(shù)格式的商并加和在一起以產(chǎn)生整數(shù)商,由此解決了對(duì)大于內(nèi)部運(yùn)算裝置中的任何之一的擴(kuò)展精度的整數(shù)進(jìn)行擴(kuò)展精度的整數(shù)除計(jì)算的技術(shù)問題。
根據(jù)本發(fā)明,提供一種方法包括把第一L位寬的整數(shù)被除數(shù)分成兩個(gè)等寬的部分,其中第一整數(shù)格式部分包括所述第一整數(shù)被除數(shù)的低M位,第二整數(shù)格式部分包括所述第一整數(shù)被除數(shù)的高M(jìn)位,其中M等于1/2·L;把所述第一整數(shù)格式部分轉(zhuǎn)換成第一浮點(diǎn)格式部分;把N位寬的整數(shù)除數(shù)從整數(shù)格式轉(zhuǎn)換成浮點(diǎn)格式的除數(shù);用所述第一浮點(diǎn)格式部分除以所述浮點(diǎn)格式的除數(shù)以獲得第一浮點(diǎn)格式的商;把所述第一浮點(diǎn)格式的商轉(zhuǎn)換成第一整數(shù)格式的商;把所述第二整數(shù)格式部分轉(zhuǎn)換成第二浮點(diǎn)格式部分;用所述第二浮點(diǎn)格式部分除以所述浮點(diǎn)格式的除數(shù)以獲得第二浮點(diǎn)格式的商;把所述第二浮點(diǎn)格式的商轉(zhuǎn)換成第二整數(shù)格式的商;并且把所述第一和第二整數(shù)格式的商加在一起以產(chǎn)生第三整數(shù)格式的商。
根據(jù)本發(fā)明,還提供一種方法包括把擴(kuò)展精度整數(shù)除指令譯碼成微操作以使整數(shù)除操作發(fā)生;啟動(dòng)除算法以通過使用浮點(diǎn)除執(zhí)行所述整數(shù)除操作;把整數(shù)被除數(shù)和整數(shù)除數(shù)分別轉(zhuǎn)換成浮點(diǎn)被除數(shù)和浮點(diǎn)除數(shù);用所述浮點(diǎn)被除數(shù)除以所述浮點(diǎn)除數(shù)以得到浮點(diǎn)商;把所述浮點(diǎn)商轉(zhuǎn)換成整數(shù)商;根據(jù)所述整數(shù)被除數(shù)、所述整數(shù)除數(shù)和所述整數(shù)商計(jì)算整數(shù)余數(shù);根據(jù)對(duì)所述整數(shù)除數(shù)和所述整數(shù)商的求值檢查錯(cuò)誤;并調(diào)整所述整數(shù)余數(shù)和所述整數(shù)商以解決用所述浮點(diǎn)除執(zhí)行所述整數(shù)除所需要的任何修正。
根據(jù)本發(fā)明,再提供一種方法包括把L位寬的有符號(hào)整數(shù)被除數(shù)轉(zhuǎn)換成L位寬的無(wú)符號(hào)整數(shù)被除數(shù),并把M位寬的有符號(hào)整數(shù)除數(shù)轉(zhuǎn)換成M位寬的無(wú)符號(hào)整數(shù)除數(shù);把所述L位寬的無(wú)符號(hào)整數(shù)被除數(shù)分成N位寬的第一段和N位寬的第二段,其中所述第一段由所述無(wú)符號(hào)整數(shù)被除數(shù)的最低N位組成,所述第二段由所述無(wú)符號(hào)整數(shù)被除數(shù)的最高N位組成;把所述第一段轉(zhuǎn)換成第一浮點(diǎn)被除數(shù),把所述第二段轉(zhuǎn)換成第二浮點(diǎn)被除數(shù),把所述整數(shù)除數(shù)轉(zhuǎn)換成浮點(diǎn)除數(shù);用所述第一浮點(diǎn)被除數(shù)除以所述浮點(diǎn)除數(shù)以產(chǎn)生第一浮點(diǎn)商;把所述第一浮點(diǎn)商轉(zhuǎn)換成第一無(wú)符號(hào)整數(shù)商;用所述第二浮點(diǎn)被除數(shù)除以所述浮點(diǎn)除數(shù)以產(chǎn)生第二浮點(diǎn)商;把所述第二浮點(diǎn)商轉(zhuǎn)換成第二無(wú)符號(hào)整數(shù)商;把所述第一和第二無(wú)符號(hào)整數(shù)商加在一起以獲得第三無(wú)符號(hào)整數(shù)商;并且把所述第三無(wú)符號(hào)整數(shù)商轉(zhuǎn)換成有符號(hào)整數(shù)商。
通過示例來(lái)說(shuō)明本發(fā)明,但本發(fā)明并不局限于附圖中的圖表,在附圖中相同的附圖標(biāo)記指示相似的元件,在這些附圖中圖1是一種計(jì)算機(jī)系統(tǒng)的框圖,該計(jì)算機(jī)系統(tǒng)是依照本發(fā)明的一種實(shí)施方案用一種包括了執(zhí)行擴(kuò)展精度的整數(shù)除算法指令的執(zhí)行單元的處理器形成的;圖2是包括本發(fā)明的一種實(shí)施方案的處理器的框圖;圖3是一種實(shí)施方案的處理器的微體系結(jié)構(gòu)的框圖,該實(shí)施方案包括邏輯電路來(lái)執(zhí)行依照本發(fā)明的擴(kuò)展精度的整數(shù)除操作;圖4A是一個(gè)流程圖,依照本發(fā)明的一種實(shí)施方案說(shuō)明了一種執(zhí)行128位值除以64位值的無(wú)符號(hào)整數(shù)除操作的方法;圖4B是一個(gè)流程圖,說(shuō)明了圖4A中執(zhí)行128位除以64位整數(shù)除操作的方法的一種實(shí)施方案的128位被除數(shù)的低64位部分的無(wú)符號(hào)除操作;圖4C是一個(gè)流程圖,說(shuō)明了圖4A中執(zhí)行128位除以64位整數(shù)除操作的方法的一種實(shí)施方案的128位被除數(shù)的高64位部分的無(wú)符號(hào)除操作;圖4D是一個(gè)流程圖,說(shuō)明了圖4A的實(shí)施方案中128位被除數(shù)的高64位和低64位部分的除后(post-divide)處理;圖5A是一個(gè)流程圖,說(shuō)明了依照本發(fā)明的另一種實(shí)施方案執(zhí)行有符號(hào)128位值除以有符號(hào)64位值的有符號(hào)整數(shù)除操作的方法;以及圖5B是一個(gè)流程圖,說(shuō)明了對(duì)圖5A的128位除以64位整數(shù)除操作的結(jié)果的除后處理。
具體實(shí)施例方式
公開了用于擴(kuò)展精度的整數(shù)除算法的方法和設(shè)備。這里所描述的實(shí)施方案是在微處理器范圍內(nèi)描述的,但并不僅僅局限于此。雖然后面的實(shí)施方案是根據(jù)處理器描述的,但其它實(shí)施方案也適用于其它類型的集成電路和邏輯設(shè)備。本發(fā)明的相同技術(shù)和教義可以很容易地應(yīng)用到能夠從更高的流水線吞吐量和改良的性能獲益的其它類型的電路或半導(dǎo)體設(shè)備。本發(fā)明的教義也適用于能夠執(zhí)行數(shù)據(jù)操作的任意處理器或機(jī)器。然而,本發(fā)明并不局限于執(zhí)行128位、64位、32位或16位數(shù)據(jù)操作的處理器或機(jī)器,并且可以應(yīng)用到需要擴(kuò)展精度整數(shù)除的任意處理器或機(jī)器。
在下面的描述中,為說(shuō)明起見,闡述了大量特定的細(xì)節(jié)以提供對(duì)本發(fā)明的徹底理解。但本領(lǐng)域的技術(shù)人員將意識(shí)到這些特定的細(xì)節(jié)并不是實(shí)踐本發(fā)明所必需的。在其它實(shí)例中,沒有特別詳細(xì)地闡述那些眾所周知的電氣結(jié)構(gòu)和電路,為的是避免不必要的模糊本發(fā)明。
在今天的處理器中,使用了大量不同的執(zhí)行單元來(lái)處理并執(zhí)行多種代碼和指令。并不是所有的指令都被創(chuàng)建為相等的,因?yàn)橛行┲噶钅茌^快地完成,而其它指令則需要占用大量的時(shí)鐘周期。指令的吞吐越快,處理器的整體性能就越高。因而,擁有許多能夠盡可能快地執(zhí)行的指令將會(huì)非常有利。但有些指令復(fù)雜性較高并需要更多的執(zhí)行時(shí)間和處理器資源。例如,浮點(diǎn)指令、裝載/存儲(chǔ)操作、數(shù)據(jù)移動(dòng)等等。
微處理器及相似類型的邏輯電路中除指令的實(shí)現(xiàn)通常涉及很多問題。此外,除操作的復(fù)雜性常常導(dǎo)致需要額外的電路來(lái)正確地執(zhí)行除。目前很多處理器把大量的硬件專門用于浮點(diǎn)除指令,因?yàn)楦↑c(diǎn)除操作通常對(duì)性能非常關(guān)鍵。例如,很難證明在N位的處理器(像32位處理器)上為整數(shù)除包含專用硬件是合理的。因而也更難證明為雙倍大小的2N(即64位)整數(shù)加上專用硬件以便用為較小類型設(shè)計(jì)的運(yùn)算器解決較大的數(shù)據(jù)類型是合理的。
64位硬件的除邏輯通常能夠處理被除數(shù)和除數(shù)是64位或更少位的數(shù)值時(shí)的除操作。例如,能夠執(zhí)行的除操作包括64位除以64位、64位除以32位、32位除以16位、16位除以8位,等等。然而,在某些情況下涉及由大于64位表示的數(shù)值的操作就很難得到,甚至是不可能的。因而擁有64位除法器電路的處理器在沒有本發(fā)明的實(shí)施方案的情況下就不能處理128位除以64位的除操作。
例如,如果在一個(gè)處理器上需要擴(kuò)展精度的除指令,設(shè)計(jì)者就面臨著有限數(shù)量的選擇。設(shè)計(jì)者可以加進(jìn)專用硬件來(lái)處理擴(kuò)展精度的除指令,這種方法增加了整體設(shè)計(jì)的成本和復(fù)雜度,或者在可用的浮點(diǎn)硬件上模擬該指令。因此,可以期望能幫助促進(jìn)用現(xiàn)有硬件實(shí)現(xiàn)整數(shù)除操作的新的解決方案減輕設(shè)計(jì)負(fù)擔(dān)。依照本發(fā)明的一種算法的實(shí)施方案允許用零花費(fèi)或最少的硬件在處理器體系結(jié)構(gòu)中加入有符號(hào)和無(wú)符號(hào)128位除以64位的整數(shù)除指令。
本發(fā)明的實(shí)施方案提供了一種途徑來(lái)把擴(kuò)展精度的整數(shù)除指令實(shí)現(xiàn)為一種算法,該算法利用浮點(diǎn)除指令和浮點(diǎn)硬件。就一種實(shí)施方案來(lái)說(shuō),該算法是基于下面的思想128位值除以64位值的整數(shù)除可以用128位值除以64位值的除(其中被除數(shù)的64最低有效位被清除)和64位值除以64位值的除來(lái)估算。64最低有效位被清除的128位被除數(shù)是XH的縮位版本(scaled version)。一種實(shí)施方案的浮點(diǎn)加法器能夠用128位值除以64位值,只要被除數(shù)只有前64位是非零。因而,64位除以64位除法器實(shí)際上在用上部被除數(shù)執(zhí)行128位除以64位除。通過利用現(xiàn)有的能夠執(zhí)行雙倍擴(kuò)展精度除的浮點(diǎn)指令,可以實(shí)現(xiàn)兩個(gè)64位除以64位除來(lái)利用浮點(diǎn)除法器單元。在一個(gè)實(shí)例中,雙倍擴(kuò)展精度意味著有64位有效(significands)的浮點(diǎn)數(shù)。因?yàn)檎麛?shù)除指令的128位和64位值都是整數(shù)格式,因而在用于浮點(diǎn)硬件之前必須換算并轉(zhuǎn)換成浮點(diǎn)格式。同樣,來(lái)自浮點(diǎn)除的輸出也必須進(jìn)行換算并轉(zhuǎn)換成整數(shù)格式。在完成整數(shù)除指令之前合并兩個(gè)單獨(dú)的除的結(jié)果并對(duì)其進(jìn)行調(diào)整??梢栽谔幚砥鲗?shí)現(xiàn)依照本發(fā)明的整數(shù)除算法的實(shí)施方案以在不使用額外硬件(例如整數(shù)除法器)并且不會(huì)嚴(yán)重?fù)p害整體性能的情況下有效地支持?jǐn)U展精度的128位除以64位整數(shù)除。
一種實(shí)施方案中,擴(kuò)展精度的整數(shù)除算法是基于對(duì)浮點(diǎn)除指令的使用。整數(shù)除調(diào)整浮點(diǎn)除以通過浮點(diǎn)硬件實(shí)現(xiàn)整數(shù)計(jì)算。換句話說(shuō),包括本發(fā)明的實(shí)施方案的處理器能夠在不使用整數(shù)除硬件的情況下執(zhí)行擴(kuò)展精度的整數(shù)除操作。對(duì)一種實(shí)現(xiàn)方式來(lái)說(shuō),浮點(diǎn)除指令的精度至少是整數(shù)被除數(shù)的一半。此外,對(duì)該實(shí)現(xiàn)方式來(lái)說(shuō)除數(shù)的精度不高于浮點(diǎn)除指令的精度。這些條件下,可以實(shí)現(xiàn)有效的擴(kuò)展精度除算法的實(shí)現(xiàn)方案以利用浮點(diǎn)除法器單元。
本發(fā)明的實(shí)施方案能夠用64位除以64位的除法器硬件邏輯實(shí)現(xiàn)128位除以64位的除操作。一種實(shí)施方案中的64位除以64位除法器硬件實(shí)際上是能夠除以雙倍擴(kuò)展精度浮點(diǎn)數(shù)的浮點(diǎn)除法器。對(duì)本發(fā)明的一種實(shí)施方案來(lái)說(shuō),由64位值Y(除數(shù))去除128位值X(被除數(shù))來(lái)獲得64位的商Q和64位的余數(shù)R。為了實(shí)現(xiàn)這種除操作,本發(fā)明的實(shí)施方案把128位除操作分成兩個(gè)獨(dú)立的64位除操作,其中第一64位除是在被除數(shù)的低64位上執(zhí)行的,第二64位除是在被除數(shù)縮放過的高64位上執(zhí)行的(即,低64位被清除的128位值)。因而64位除以64位的整數(shù)除法器能夠執(zhí)行128位除以64位的除操作。這些操作可以表示如下X=Q·Y+RXL=QL·Y+RLXH·264=QH·Y+RH其中,X=XL+XH·264,Q=QL+QH,R=RL+RH這個(gè)實(shí)例及下文中所描述的位數(shù)是根據(jù)特定實(shí)現(xiàn)方式中的最大允許位。例如,這里64位值指的是能夠用來(lái)各自表示商和余數(shù)的位數(shù)。因而用少于全部64位能夠表示的商中的數(shù)可有一串前導(dǎo)零。在下面的論述中通常分別把項(xiàng)″QH″和″RH″稱作與被除數(shù)的上半部″XH″的除相關(guān)的商和余數(shù)。QH和RH也可被分別稱作″高位商″和″高位余″。
現(xiàn)在參考圖1,顯示了一個(gè)示例性的計(jì)算機(jī)系統(tǒng)100。系統(tǒng)100包括一個(gè)部件(例如處理器102)以依照本發(fā)明(例如這里所描述的實(shí)施方案)使用包括執(zhí)行擴(kuò)展精度的整數(shù)除算法的邏輯在內(nèi)的執(zhí)行單元。系統(tǒng)100是基于Santa Clara,California的Intel公司的PENTIUMII ,PENTIUM4,ItaniumTM,XScaleTM和/或StrongARMTM微處理器,盡管也可以使用其它系統(tǒng)(包括擁有其它微處理器的PC、工程技術(shù)工作站、置頂盒等)。一種實(shí)施方案中,樣本系統(tǒng)100可以執(zhí)行來(lái)自Redmond,Washington的Microsoft公司的WINDOWSTM操作系統(tǒng)版本,盡管也可以使用其它操作系統(tǒng)(例如UNIX和Linux)、嵌入式軟件和/或圖形用戶界面。因而,本發(fā)明并不局限于任何特定的硬件電路和軟件的組合。
本發(fā)明也不局限于計(jì)算機(jī)系統(tǒng)。本發(fā)明的選擇實(shí)施方案可以用在像手持設(shè)備和嵌入式應(yīng)用這樣的其它設(shè)備中。手持設(shè)備的一些實(shí)例包括蜂窩電話、Internet協(xié)議設(shè)備、數(shù)字照相機(jī)、個(gè)人數(shù)字助理(PDA)和手持PC。嵌入式應(yīng)用可以包括微控制器、數(shù)字信號(hào)處理器(DSP)、片上系統(tǒng)、網(wǎng)絡(luò)計(jì)算機(jī)(Net PC)、置頂盒、網(wǎng)絡(luò)集線器、廣域網(wǎng)(WAN)交換機(jī)或在操作數(shù)上執(zhí)行整數(shù)除操作的任意其它系統(tǒng)。此外,已經(jīng)實(shí)現(xiàn)了一些體系結(jié)構(gòu)以使得指令能夠同時(shí)在幾個(gè)數(shù)據(jù)在操作以提高多媒體應(yīng)用的效率。隨著數(shù)據(jù)的類型和量的增加,必須增強(qiáng)計(jì)算機(jī)和它們的處理器以用更有效的方法操作數(shù)據(jù)。
圖1是帶有處理器102的計(jì)算機(jī)系統(tǒng)100的框圖,處理器102包括執(zhí)行單元108以依照本發(fā)明執(zhí)行擴(kuò)展精度的整數(shù)除算法。本實(shí)施方案是在單處理器的桌面或服務(wù)器系統(tǒng)的環(huán)境中描述,但在多處理器系統(tǒng)中也可包括選擇實(shí)施方案。系統(tǒng)100是集線器體系結(jié)構(gòu)的一個(gè)示例。計(jì)算機(jī)系統(tǒng)100包括處理器102來(lái)處理數(shù)據(jù)信號(hào)。例如,處理器102可以是復(fù)雜指令集計(jì)算機(jī)(CISC)微處理器、精簡(jiǎn)指令集計(jì)算機(jī)(RISC)微處理器、超長(zhǎng)指令字(VLIW)微處理器、實(shí)現(xiàn)指令集的組合的處理器、或任意其它處理器設(shè)備(例如數(shù)字信號(hào)處理器)。處理器102耦合到處理器總線110,處理器總線110能夠在處理器102和系統(tǒng)100的其它部件之間傳輸數(shù)據(jù)。系統(tǒng)100的元件執(zhí)行它們的對(duì)熟悉本領(lǐng)域的人來(lái)說(shuō)眾所周知的常規(guī)功能。
一種實(shí)施方案中,處理器102包括1級(jí)(L1)內(nèi)部高速緩沖存儲(chǔ)器104。根據(jù)體系結(jié)構(gòu),處理器102可以有單個(gè)內(nèi)部高速緩存或多級(jí)內(nèi)部高速緩存。作為選擇,在另一種實(shí)施方案中,高速緩沖存儲(chǔ)器可以位于處理器102之外。其它實(shí)施方案根據(jù)特定實(shí)現(xiàn)方式和需求還可以包括內(nèi)部和外部高速緩存的組合。處理器102還包括為某些宏指令存儲(chǔ)微代碼的微代碼(ucode)ROM 106。包括執(zhí)行整數(shù)和浮點(diǎn)操作的邏輯在內(nèi)的執(zhí)行單元108也駐留在處理器102中。執(zhí)行單元108的替代實(shí)施方案也可用在微控制器、嵌入式處理器、圖形設(shè)備、DSP和其它類型的邏輯電路中。系統(tǒng)100包括存儲(chǔ)器120。存儲(chǔ)器120可以是動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器(DRAM)設(shè)備、靜態(tài)隨機(jī)訪問存儲(chǔ)器(SRAM)設(shè)備、快閃存儲(chǔ)器設(shè)備或其它存儲(chǔ)器設(shè)備。存儲(chǔ)器120能夠存儲(chǔ)由數(shù)據(jù)信號(hào)所表示的指令和/或數(shù)據(jù),這些指令和/或數(shù)據(jù)可以由處理器102執(zhí)行。
系統(tǒng)邏輯芯片116耦合到處理器總線110和存儲(chǔ)器120。在所說(shuō)明的實(shí)施方案中的系統(tǒng)邏輯芯片116是一個(gè)存儲(chǔ)控制器集線器(MCH)。處理器102能夠通過處理器總線110和MCH 116通信。MCH 116為指令和數(shù)據(jù)存儲(chǔ)、圖形命令的存儲(chǔ)、數(shù)據(jù)和結(jié)構(gòu)提供一個(gè)到存儲(chǔ)器120的高帶寬存儲(chǔ)器通路118。MCH 116是為了在處理器102、存儲(chǔ)器120和系統(tǒng)100的其它部件之間導(dǎo)向數(shù)據(jù),并在處理器總線110、存儲(chǔ)器120和系統(tǒng)I/O 122之間接通數(shù)據(jù)信號(hào)。在一些實(shí)施方案中,系統(tǒng)邏輯芯片116能夠?yàn)轳詈系綀D形控制器112提供圖形端口。MCH 116通過存儲(chǔ)接口118耦合到存儲(chǔ)器120。圖形卡112通過加速圖形端口(AGP)互連114耦合到MCH 116。
系統(tǒng)100使用專有集線器接口總線122耦合MCH 116到I/O控制器集線器(ICH)130。ICH 130通過局部I/O總線提供到一些I/O設(shè)備的直接連接。局部I/O總線是用于連接外設(shè)到存儲(chǔ)器120、芯片組和處理器102的高速I/O總線。一些實(shí)例是音頻控制器、固件集線器(閃存BIOS)128、無(wú)線收發(fā)器126、數(shù)據(jù)存儲(chǔ)124、包括用戶輸入和鍵盤接口的傳統(tǒng)I/O控制器、串行擴(kuò)展端口(例如通用串行總線USB)和網(wǎng)絡(luò)控制器134。數(shù)據(jù)存儲(chǔ)設(shè)備124可以包括硬盤驅(qū)動(dòng)器、軟盤驅(qū)動(dòng)器、CD-ROM設(shè)備、快閃存儲(chǔ)器設(shè)備或其它大容量存儲(chǔ)設(shè)備。
對(duì)系統(tǒng)的另一種實(shí)施方案來(lái)說(shuō),執(zhí)行用于擴(kuò)展精度整數(shù)除的算法的執(zhí)行單元可以和片上的系統(tǒng)一起使用。片上系統(tǒng)的一種實(shí)施方案包括處理器和存儲(chǔ)器。用于一種這樣的系統(tǒng)的存儲(chǔ)器是快閃存儲(chǔ)器??扉W存儲(chǔ)器可以和處理器和其它系統(tǒng)部件位于同一管芯上。另外,其它邏輯塊,例如存儲(chǔ)控制器或圖形控制器,也可位于片上系統(tǒng)上。
圖2是處理器200的框圖,處理器200包括執(zhí)行單元的一種實(shí)施方案以依照本發(fā)明執(zhí)行擴(kuò)展精度的整數(shù)除操作。處理階段的前端202通過分配器/重命名器210和重調(diào)度器重放隊(duì)列220耦合到調(diào)度器230。Ucode ROM 204也耦合到前端202以為所選的復(fù)雜的宏指令提供微代碼程序,否則這些宏指令將占用大量的時(shí)鐘周期進(jìn)行解碼。微操作(微-op或uop)形式的指令可被從調(diào)度器230投機(jī)性地分派。因而調(diào)度器230能夠在不先確定指令所需的數(shù)據(jù)是否有效或可用的情況下分派指令。當(dāng)指令將到達(dá)執(zhí)行時(shí)執(zhí)行指令所需的輸入數(shù)據(jù)被表示為就緒時(shí)調(diào)度器230將從前端202分派指令。
處理器200還包括一個(gè)通過校驗(yàn)器260、分級(jí)隊(duì)列250和重放多路復(fù)用器235實(shí)現(xiàn)的重放機(jī)制。另外重放可以從重放隊(duì)列220完成,當(dāng)校驗(yàn)器260選擇這樣做時(shí)。重放系統(tǒng)可以重新執(zhí)行那些在被調(diào)度器230調(diào)度后沒有被正確執(zhí)行的指令。執(zhí)行單元240能夠在執(zhí)行指令中進(jìn)行數(shù)據(jù)推測(cè)。執(zhí)行單元240可以是算術(shù)邏輯單元(ALU)、浮點(diǎn)ALU、存儲(chǔ)發(fā)生單元,等等。執(zhí)行單元240也可被共同稱為執(zhí)行集群。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),執(zhí)行單元240包括一個(gè)整數(shù)ALU和一個(gè)浮點(diǎn)ALU,整數(shù)ALU用來(lái)處理除操作的整數(shù)方面,浮點(diǎn)ALU用來(lái)處理算法的浮點(diǎn)部分。這種實(shí)施方案的一個(gè)執(zhí)行單元240包括一個(gè)64位乘以64位的整數(shù)乘法器,另一個(gè)執(zhí)行單元240包括一個(gè)依照本發(fā)明的浮點(diǎn)除法器。與執(zhí)行單元240相耦合的寄存器文件可以存儲(chǔ)在指令執(zhí)行和處理期間所用的操作數(shù)和其它數(shù)據(jù)。雖然圖2的示例顯示了三個(gè)執(zhí)行單元240和三個(gè)分級(jí)隊(duì)列250以簡(jiǎn)化描述,但根據(jù)特定的設(shè)計(jì)和實(shí)現(xiàn)方式耦合到多個(gè)調(diào)度器230的執(zhí)行單元240和分級(jí)隊(duì)列250的數(shù)量是可變的。執(zhí)行單元240可以耦合到存儲(chǔ)器設(shè)備的多級(jí)上,可以從存儲(chǔ)器設(shè)備檢索數(shù)據(jù)或向其存入數(shù)據(jù)。在一種實(shí)施方案中,執(zhí)行單元240可以通過存儲(chǔ)請(qǐng)求控制器242耦合到L0高速緩存244、L1高速緩存246和外部存儲(chǔ)器設(shè)備284、286、288。
如果在L0高速緩存244或L1高速緩存246中沒有找到所請(qǐng)求的數(shù)據(jù),執(zhí)行單元240可以試圖從存儲(chǔ)器附加級(jí)中檢索所需數(shù)據(jù)??梢酝ㄟ^存儲(chǔ)器請(qǐng)求控制器242實(shí)現(xiàn)這樣的請(qǐng)求。外部總線接口248耦合到存儲(chǔ)器請(qǐng)求控制器242和外部總線248。在一種實(shí)施方案中,外部存儲(chǔ)器設(shè)備可以包括L2高速緩存284、主存儲(chǔ)器286、磁盤存儲(chǔ)器288以及可以耦合到外部總線282的其它存儲(chǔ)設(shè)備。對(duì)外部存儲(chǔ)器設(shè)備的訪問要比對(duì)片上高速緩沖存儲(chǔ)器的訪問慢得多。在試圖從存儲(chǔ)器載入數(shù)據(jù)到寄存器時(shí),執(zhí)行單元240試圖按照由快到慢的順序從每個(gè)存儲(chǔ)器設(shè)備載入數(shù)據(jù)。在一種實(shí)施方案中,首先檢驗(yàn)最快級(jí)別的存儲(chǔ)器設(shè)備L0高速緩存244,接著是L1高速緩存246,L2高速緩存284,主存儲(chǔ)器286和磁盤存儲(chǔ)器288。裝載存儲(chǔ)器的時(shí)間隨著訪問每一額外的存儲(chǔ)器級(jí)而增加。當(dāng)最后找到所需的數(shù)據(jù)時(shí),由執(zhí)行單元240檢索的數(shù)據(jù)可被存儲(chǔ)在最快的可用存儲(chǔ)器設(shè)備中以用于將來(lái)的訪問。
這里所用的術(shù)語(yǔ)″寄存器″指的是被用作宏指令的一部分以識(shí)別操作數(shù)的板載處理器存儲(chǔ)單元。換句話說(shuō),這里所指的寄存器是那些從處理器外(從程序員的角度)可以看到的。但是,這里所描述的寄存器可以使用任意數(shù)量的不同的技術(shù),例如專用物理寄存器、用寄存器重命名而動(dòng)態(tài)分配的物理寄存器、專用和動(dòng)態(tài)分配的物理寄存器的組合等等,由處理器內(nèi)的電路來(lái)實(shí)現(xiàn)。
在這種實(shí)施方案中,分級(jí)隊(duì)列250能夠把指令延遲固定數(shù)量的時(shí)鐘周期,以便報(bào)告在執(zhí)行單元240中執(zhí)行指令過程中的問題并且指令可以在相同時(shí)刻及時(shí)進(jìn)入校驗(yàn)器260。在不同的實(shí)施方案中,分級(jí)隊(duì)列250中的級(jí)數(shù)根據(jù)每個(gè)執(zhí)行通道中所期望的分級(jí)或延遲的數(shù)量而變化。已經(jīng)分派的指令的副本可以并行地通過分級(jí)隊(duì)列250分級(jí)以通過執(zhí)行單元240執(zhí)行。采用這種方式,分級(jí)隊(duì)列250中所維護(hù)的指令副本被提供給校驗(yàn)器260。如果指令沒有成功執(zhí)行,指令的這個(gè)副本可以由校驗(yàn)器260發(fā)回重放多路復(fù)用器235用于重新執(zhí)行。
在這種體系結(jié)構(gòu)中,校驗(yàn)器單元260位于執(zhí)行核心240之后。校驗(yàn)器260能夠分析指令的數(shù)據(jù)依賴性以及是否有任何錯(cuò)誤存在。此外,校驗(yàn)器260還檢查執(zhí)行結(jié)果的狀態(tài)以確定是否需要重放。如果一條指令已經(jīng)成功執(zhí)行,校驗(yàn)器260把該指令標(biāo)記為完成并聲明該指令為″重放安全″?!逯胤虐踩逯噶羁梢员晦D(zhuǎn)發(fā)到退出單元270。對(duì)另一種實(shí)施方案來(lái)說(shuō),可以使用多個(gè)校驗(yàn)器(一個(gè)快速校驗(yàn)器[或稱前期校驗(yàn)器])和一個(gè)慢校驗(yàn)器[或稱后期校驗(yàn)器]),并允許在流水線的不同點(diǎn)上檢測(cè)不正確的指令執(zhí)行。同樣,另一種實(shí)施方案可以有多個(gè)重放通道。其它條件也能產(chǎn)生重放。如果指令被更快地重放,處理器200的性能就能夠提高。校驗(yàn)器260耦合到退出單元270。調(diào)度器230和執(zhí)行單元240假定一切正常。校驗(yàn)器260和退出單元270檢查問題。執(zhí)行后,微操作和結(jié)果被暫時(shí)存儲(chǔ)以等待提交到體系狀態(tài)。如果沒有執(zhí)行問題,就退出指令并把結(jié)果提交到體系狀態(tài)。
圖3是用于一種實(shí)施方案的處理器的微體系結(jié)構(gòu)的框圖,該處理器包括依照本發(fā)明執(zhí)行擴(kuò)展精度的整數(shù)除操作的邏輯電路。順序前端301是處理器300的一部分,處理器300取出要執(zhí)行的宏指令并準(zhǔn)備它們以隨后在處理器流水線中使用。這種實(shí)施方案的前端包括幾個(gè)單元。指令預(yù)取器326從存儲(chǔ)器取出宏指令并把它們提供給指令譯碼器328,指令譯碼器328隨后把指令譯碼成稱作微指令或微操作(也稱作微op或uop)的原始操作,機(jī)器知道怎樣執(zhí)行這些原始操作。跟蹤高速緩存330獲取譯碼后的uop并把它們匯編在uop隊(duì)列334中的程序有序的序列或跟蹤文件中以便執(zhí)行。當(dāng)跟蹤高速緩存330遇到復(fù)雜的宏指令時(shí),微代碼ROM 332提供所需的uop來(lái)完成操作。
許多宏指令被轉(zhuǎn)換成單個(gè)微操作,其它的需要幾個(gè)微操作來(lái)完成整個(gè)操作。在這個(gè)實(shí)施方案中,如果需要超過4個(gè)微操作來(lái)完成一條宏指令,譯碼器328就訪問微代碼ROM 332來(lái)執(zhí)行宏指令。因?yàn)樾枰罅康奈⒉僮鱽?lái)實(shí)現(xiàn)除操作,因而依照本發(fā)明的擴(kuò)展精度的整數(shù)除算法的實(shí)施方案可以存儲(chǔ)在微代碼ROM 332中。指令譯碼器328確定指令是否是復(fù)雜指令。如果是復(fù)雜指令,指令譯碼器328就參考入口點(diǎn)可編程邏輯陣列(PLA)以確定正確的微指令指針用于讀取微代碼ROM332中的除算法微代碼序列。對(duì)一種實(shí)施方案來(lái)說(shuō),前4個(gè)微操作是從跟蹤高速緩存330中取出的,剩下的微操作來(lái)自微代碼ROM 332,這種情況下指令譯碼器328將把前4個(gè)微操作發(fā)送到跟蹤高速緩存330,并把微指令指針發(fā)送到微代碼ROM 332。在微代碼ROM 332完成了對(duì)當(dāng)前宏指令的微操作的排序之后,機(jī)器的前端301恢復(fù)從跟蹤高速緩存330取微操作。
這種實(shí)施方案的擴(kuò)展精度的整數(shù)除指令被看作是一個(gè)復(fù)雜指令。大部分與浮點(diǎn)有關(guān)的指令都是復(fù)雜指令。這樣,當(dāng)指令譯碼器328遇到這個(gè)整數(shù)除宏指令時(shí),就在適當(dāng)?shù)奈恢迷L問微代碼ROM 332以為本發(fā)明的整數(shù)除算法的一種實(shí)施方案檢索微代碼序列。整數(shù)除算法的這種實(shí)施方案所需的不同微操作被通信給無(wú)序執(zhí)行引擎303以在適當(dāng)?shù)恼麛?shù)和浮點(diǎn)執(zhí)行單元上執(zhí)行。
無(wú)序執(zhí)行引擎303是為執(zhí)行而準(zhǔn)備微指令的地方。無(wú)序執(zhí)行邏輯有大量的緩沖器以在微指令走下流水線并被調(diào)度執(zhí)行時(shí)平滑并重排微指令流以優(yōu)化性能。分配器邏輯分配機(jī)器緩沖器以及每個(gè)uop為了執(zhí)行需要的資源。寄存器重命名邏輯對(duì)寄存器文件中的入口上的邏輯寄存器重新命名。分配器還為指令調(diào)度器(存儲(chǔ)調(diào)度器、快速調(diào)度器302、慢/通用浮點(diǎn)調(diào)度器304和簡(jiǎn)單浮點(diǎn)調(diào)度器306)之前的兩個(gè)微操作隊(duì)列之一中的每個(gè)微操作分配一個(gè)入口,這兩個(gè)微操作隊(duì)列一個(gè)用于存儲(chǔ)器操作另一個(gè)用于非存儲(chǔ)器操作。微操作調(diào)度器302、304、306根據(jù)它們相關(guān)的輸入寄存器操作數(shù)來(lái)源的就緒和微操作需要用來(lái)完成它們的操作的執(zhí)行資源的可用性確定微操作何時(shí)即將執(zhí)行。這種實(shí)施方案的快速調(diào)度器302能夠在主時(shí)鐘周期的每一半上調(diào)度,而其它調(diào)度器每個(gè)主處理器時(shí)鐘周期只能調(diào)度一次。調(diào)度器對(duì)分派端口做出仲裁以調(diào)度微操作用于執(zhí)行。
寄存器文件308、310位于執(zhí)行塊中調(diào)度器302、304、306和執(zhí)行單元312、314、316、318、320、322、324之間。對(duì)整數(shù)和浮點(diǎn)操作分別有一個(gè)單獨(dú)的寄存器文件308和310。這個(gè)實(shí)施方案的每個(gè)寄存器文件308、310還包括一個(gè)旁路網(wǎng)絡(luò),它能繞過或轉(zhuǎn)發(fā)剛完成還沒有寫入寄存器文件的結(jié)果到新的相關(guān)微操作。整數(shù)寄存器文件308和浮點(diǎn)寄存器文件310還能相互進(jìn)行數(shù)據(jù)通信。對(duì)一種實(shí)施方案來(lái)說(shuō),整數(shù)寄存器文件308被分成兩個(gè)獨(dú)立的寄存器文件,一個(gè)寄存器文件用于數(shù)據(jù)的低32位,第二寄存器文件用于數(shù)據(jù)的高32位。一種實(shí)施方案的浮點(diǎn)寄存器文件310有128位寬的入口,因?yàn)楦↑c(diǎn)指令的操作數(shù)寬度通常是64到128位。
執(zhí)行塊311包含執(zhí)行單元312、314、316、318、320、322、324,指令在這里被實(shí)際執(zhí)行。這部分包括寄存器文件308和310,它們存儲(chǔ)微指令需要執(zhí)行的整數(shù)和浮點(diǎn)數(shù)據(jù)操作數(shù)值。這個(gè)實(shí)施方案的處理器300由大量執(zhí)行單元組成地址發(fā)生單元(AGU)312、AGU 314、快速ALU 316、快速ALU 318、慢ALU 320、浮點(diǎn)ALU 322、浮點(diǎn)移動(dòng)單元324。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),浮點(diǎn)執(zhí)行塊322、324,執(zhí)行浮點(diǎn)、MMX以及流動(dòng)單指令多數(shù)據(jù)(SIMD)擴(kuò)展操作。這個(gè)實(shí)施方案的浮點(diǎn)ALU 322包括一個(gè)64位除以64位的浮點(diǎn)除法器來(lái)執(zhí)行除、平方根和余數(shù)微操作。對(duì)本發(fā)明的實(shí)施方案來(lái)說(shuō),涉及浮點(diǎn)值的任何動(dòng)作都是隨著浮點(diǎn)硬件而發(fā)生的。例如,在整數(shù)格式和浮點(diǎn)格式之間的轉(zhuǎn)換涉及浮點(diǎn)寄存器文件。同樣,浮點(diǎn)除操作發(fā)生在浮點(diǎn)除法器。另一方面,非浮點(diǎn)數(shù)和整數(shù)類型是用整數(shù)硬件資源處理的。簡(jiǎn)單的、非常頻繁的LAU操作轉(zhuǎn)到高速ALU執(zhí)行單元316、318。這個(gè)實(shí)施方案的快速ALU 316和318能夠用半個(gè)時(shí)鐘周期的有效等待時(shí)間執(zhí)行快速操作。對(duì)一種實(shí)施方案來(lái)說(shuō),大部分復(fù)雜的整數(shù)操作轉(zhuǎn)到慢ALU 320,因?yàn)槁鼳LU 320包括用于長(zhǎng)等待時(shí)間類型操作的整數(shù)執(zhí)行硬件,例如乘法器、移動(dòng)、標(biāo)志邏輯和分支處理。存儲(chǔ)器裝載/存儲(chǔ)操作由AGU 312和314執(zhí)行。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),整數(shù)ALU 316、318和320是在對(duì)64位數(shù)據(jù)操作數(shù)執(zhí)行整數(shù)操作的環(huán)境中描述的。在可選實(shí)施方案中,可以實(shí)現(xiàn)ALU316、318和320來(lái)支持多種數(shù)據(jù)夾盤(data chuck),包括16、32、128、256,等等。同樣,可以實(shí)現(xiàn)浮點(diǎn)單元322和324來(lái)支持一個(gè)具有可變寬度位數(shù)的操作數(shù)區(qū)域。
在這個(gè)實(shí)施方案中,微操作調(diào)度器302、304和306在父裝載完成執(zhí)行之前分派相關(guān)的操作。因?yàn)槲⒉僮髟谔幚砥?00中是被投機(jī)地調(diào)度并被執(zhí)行的,處理器300還包括處理存儲(chǔ)器缺失的邏輯。如果在數(shù)據(jù)高速緩存中發(fā)生數(shù)據(jù)裝載缺失,就會(huì)有還在流水線中執(zhí)行的相關(guān)操作,這些操作帶著暫時(shí)錯(cuò)誤的數(shù)據(jù)離開調(diào)度器。重放機(jī)制跟蹤并重新執(zhí)行使用了錯(cuò)誤數(shù)據(jù)的指令。只有相關(guān)的操作才需要重放,允許獨(dú)立的操作完成。處理器的一種實(shí)施方案的調(diào)度器和重放機(jī)制還設(shè)計(jì)用來(lái)捕獲擴(kuò)展精度整數(shù)除操作的指令序列。
依照本發(fā)明的一種算法的一個(gè)實(shí)施方案主要處理無(wú)符號(hào)數(shù)。這個(gè)實(shí)施方案的128位除操作由被除數(shù)的低64位XL上的第一64位除和高64位XH上的第二64位除組成。第一64位除可以表示為XL=QL·Y+RL。同樣,第二64位除可以表示為XH·264QH·Y+RH。
圖4A是一個(gè)流程圖,描述依照本發(fā)明的一種實(shí)施方案執(zhí)行128位值除以64位值的無(wú)符號(hào)整數(shù)除操作的方法。操作數(shù)(被除數(shù)和除數(shù))以整數(shù)格式提供。同樣,這個(gè)整數(shù)除操作的結(jié)果(商和余數(shù))也以整數(shù)格式退出。但是,實(shí)際的除算法是在浮點(diǎn)執(zhí)行單元在被除數(shù)和除數(shù)的浮點(diǎn)版本上發(fā)生的,以用浮點(diǎn)格式產(chǎn)生商。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),128位被除數(shù)上的除操作實(shí)際上是由兩個(gè)單獨(dú)的64位除處理的,第一除是被除數(shù)的低64位除以64位除數(shù),第二除是被除數(shù)的高64位除以同一除數(shù)。
對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),執(zhí)行單元通常能夠?yàn)閳?zhí)行處理64位寬的操作數(shù)。換句話說(shuō),無(wú)符號(hào)數(shù)的范圍在0到264-1。但是,某些指令(例如擴(kuò)展精度的整數(shù)除指令)涉及128位寬的操作數(shù),這樣無(wú)符號(hào)的范圍就變成了0到2128-1。從執(zhí)行硬件輸出的值的范圍依然在0到264-1之間。在塊402,進(jìn)行檢查以確定除數(shù)是否等于0。如果除數(shù)等于0,則操作無(wú)效,因?yàn)樵撝噶钫谠噲D用零去除一個(gè)數(shù),這在數(shù)學(xué)上是沒有定義的。如果發(fā)現(xiàn)除數(shù)等于0就在塊403設(shè)置一個(gè)標(biāo)記指示除以″0″異常。結(jié)束這個(gè)除指令。
如果除數(shù)不等于0,整數(shù)除算法繼續(xù)到塊404,在這里在浮點(diǎn)執(zhí)行單元中用除數(shù)去除被除數(shù)的低64位部分。這第一除表示為XL/Y。因?yàn)楸怀龜?shù)和除數(shù)是以整數(shù)格式的操作數(shù)提供的,這些數(shù)在用于浮點(diǎn)執(zhí)行單元中之前必須被轉(zhuǎn)換成浮點(diǎn)格式,因?yàn)楦↑c(diǎn)執(zhí)行單元只能接受浮點(diǎn)格式。來(lái)自浮點(diǎn)單元的合成的商也被從浮點(diǎn)格式轉(zhuǎn)換成整數(shù)格式。用整數(shù)執(zhí)行單元處的整數(shù)乘法器計(jì)算被除數(shù)的低位部分的余數(shù)。圖4B中將更詳細(xì)地描述低64位部分除。
在塊406執(zhí)行檢查以確定被除數(shù)的高位部分是否等于0。如果被除數(shù)的高64等于0,那么高位部分除就不需要了,因?yàn)榻Y(jié)果將是0。因而最后產(chǎn)生的128位除的商和余數(shù)由低64位除的商和余數(shù)組成。結(jié)果被存儲(chǔ)起來(lái),整數(shù)除微操作從執(zhí)行單元繼續(xù)到校驗(yàn)器和退出單元。
如果在塊406被除數(shù)的高位部分不等于0,這個(gè)實(shí)施方案的整數(shù)除算法繼續(xù)執(zhí)行對(duì)128位被除數(shù)的除,在塊408,由除數(shù)在浮點(diǎn)執(zhí)行單元中去除64最低有效位部分被清除的128位被除數(shù)。最低有效64位被清除的128位被除數(shù)X是XH的縮放版本(除以264)。XH是128位被除數(shù)的按比例縮小版本。該第二除可以表示為(264·XH)/Y。像上面對(duì)低位部分所做的一樣,被除數(shù)的高64位部分也必須從整數(shù)格式轉(zhuǎn)換成浮點(diǎn)格式。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),已經(jīng)從塊404的早期轉(zhuǎn)換保存了除數(shù)的浮點(diǎn)版本并在這里重復(fù)使用。來(lái)自浮點(diǎn)單元的這次高位部分除的合成的商也被從浮點(diǎn)格式轉(zhuǎn)換成整數(shù)格式。用整數(shù)執(zhí)行單元計(jì)算被除數(shù)高位部分的余數(shù)。圖4C中將更詳細(xì)地描述高64位部分除。
依照本發(fā)明的實(shí)施方案能夠不使用整數(shù)除法器而正確地執(zhí)行128位除以64位的整數(shù)除,因?yàn)椤?264·XH)/Y″高位部分除可以用64位擴(kuò)展精度的浮點(diǎn)除來(lái)實(shí)現(xiàn)。這種擴(kuò)展精度的浮點(diǎn)除返回與被除數(shù)的高位部分相關(guān)的商QH。在商的浮點(diǎn)版本上執(zhí)行溢出檢查,像下面圖4C的塊434中那樣。如果商>=264,那么結(jié)果將溢出并且用信號(hào)通知除錯(cuò)誤。如果沒有溢出,就把浮點(diǎn)格式的商轉(zhuǎn)換成整數(shù)格式作為QH。浮點(diǎn)除必須使用舍位舍入取整模式。其它舍入模式會(huì)導(dǎo)致計(jì)算錯(cuò)誤。
該算法在塊410執(zhí)行溢出檢查并確定是否有錯(cuò)誤發(fā)生。如果在塊410檢測(cè)到任何溢出錯(cuò)誤,就在塊403把錯(cuò)誤標(biāo)記為異常。下面將用圖4D更詳細(xì)地描述溢出檢查的實(shí)例。如果沒有發(fā)現(xiàn)錯(cuò)誤,就在塊412從高位結(jié)果和低位結(jié)果計(jì)算出最終的商和余數(shù)。在這個(gè)實(shí)施方案的被除數(shù)上進(jìn)行的兩個(gè)獨(dú)立的除操作的結(jié)果就被加在了一起。需要這樣做是為了為擴(kuò)展精度的整數(shù)除指令到達(dá)正確的商和余數(shù),因?yàn)橐勒毡景l(fā)明的除算法的這個(gè)實(shí)施方案已經(jīng)把128位除以64位的除分成了一對(duì)64位除以64位的除操作,它們一起在算術(shù)上產(chǎn)生等價(jià)的結(jié)果。低64位除操作的商連同高64位除操作的商被加在一起。同樣,低64位除的余數(shù)連同高64位除的余數(shù)也被加在一起。在塊413執(zhí)行除以0的錯(cuò)誤檢查。如果檢測(cè)到錯(cuò)誤,就在塊403標(biāo)記除以0的異常。
圖4B是一個(gè)流程圖,為執(zhí)行圖4A中的128位除以64位整數(shù)除操作的一種方法的一個(gè)實(shí)施方案描述128位被除數(shù)的低64位部分的無(wú)符號(hào)除操作。這個(gè)實(shí)例的流程是圖4A的塊404中″XL/Y″除活動(dòng)的更詳細(xì)描述。在塊420,整數(shù)除算法的這個(gè)實(shí)施方案在一個(gè)浮點(diǎn)寄存器文件上把128位被除數(shù)的低位部分從整數(shù)格式轉(zhuǎn)換成浮點(diǎn)格式。在塊422,64位除數(shù)被從它的整數(shù)格式轉(zhuǎn)換成浮點(diǎn)格式。在這個(gè)實(shí)施方案中,在塊424,一個(gè)64位除以64位的除法器以舍位舍入模式用低64位的浮點(diǎn)版本除以64位除數(shù)的浮點(diǎn)版本。除法器以浮點(diǎn)格式輸出商。在塊426這個(gè)低位商被轉(zhuǎn)換成整數(shù)格式并放入整數(shù)寄存器文件。在塊428計(jì)算這低64位部分的余數(shù)。對(duì)整數(shù)除算法的這個(gè)實(shí)施方案來(lái)說(shuō),余數(shù)實(shí)際上是用整數(shù)硬件計(jì)算的。更準(zhǔn)確地說(shuō),從被除數(shù)的低64位減去低位商和除數(shù)的乘積產(chǎn)生低位余數(shù)。這個(gè)計(jì)算可以表示為RL=XL-(QL·Y)。
圖4C是一個(gè)流程圖,為執(zhí)行圖4A中的128位除以64位整數(shù)除操作的一種方法的一個(gè)實(shí)施方案描述128位被除數(shù)的高64位部分的無(wú)符號(hào)除操作。這個(gè)實(shí)例的流程是圖4A的活動(dòng)的塊406、408和412的更詳細(xì)的描述。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),該算法能工作是因?yàn)榭梢杂?4位擴(kuò)展精度浮點(diǎn)除操作完成″(264·XH)/Y″除。在塊406執(zhí)行檢查以確定被除數(shù)的高位部分是否等于0。如果被除數(shù)的高64位等于0,就不需要高位部分除,因?yàn)榻Y(jié)果將為0。如果在塊406被除數(shù)的高位部分不等0,整數(shù)除算法的這個(gè)實(shí)施方案就在浮點(diǎn)執(zhí)行單元中繼續(xù)執(zhí)行被除數(shù)的高64位部分除以除數(shù)的除。在塊430,128位整數(shù)被除數(shù)的高64位在浮點(diǎn)寄存器文件上被從整數(shù)格式轉(zhuǎn)換成浮點(diǎn)格式。這樣這個(gè)浮點(diǎn)數(shù)就被按照因子264縮小。以這種方式完成這個(gè)操作是因?yàn)樵谶@個(gè)實(shí)施方案中128位整數(shù)不能被直接轉(zhuǎn)換成浮點(diǎn)數(shù)。因?yàn)檫@個(gè)128位整數(shù)比較特殊,它的低64位已被清除,整數(shù)到浮點(diǎn)的轉(zhuǎn)換可以按兩步發(fā)生。首先,被除數(shù)的高64位整數(shù)部分XH被轉(zhuǎn)換成浮點(diǎn)值。其次,XH的浮點(diǎn)表示被乘以264以進(jìn)行換算。因而就得到了XH·264的精確浮點(diǎn)表示,或者說(shuō)64最低有效位被清除的被除數(shù)X。從早先為低64位除而進(jìn)行的轉(zhuǎn)換中得到64位除數(shù)的浮點(diǎn)版本并重新使用以避免不必要的重復(fù)。在另一個(gè)實(shí)施方案中,如果浮點(diǎn)版本目前不可用,就把除數(shù)從它的整數(shù)格式轉(zhuǎn)換成浮點(diǎn)格式。在這個(gè)實(shí)施方案中,在塊432,64位除以64位的浮點(diǎn)除法器以舍位舍入模式用縮放的高64位的浮點(diǎn)版本除以64位除數(shù)的浮點(diǎn)版本。除操作的第二部分的按比例縮放的高64位被除數(shù)實(shí)際上就是264·初始被除數(shù)的上半部。除法器以浮點(diǎn)格式輸出高位部分除的商。在塊434執(zhí)行檢查以確定是否發(fā)生了除溢出。如果除溢出條件存在,就在塊435用信號(hào)通知除溢出錯(cuò)誤。規(guī)定正在執(zhí)行的除溢出檢查實(shí)際上是商>=264。
如果在塊434沒有檢測(cè)到除溢出,整數(shù)除算法的這個(gè)實(shí)施方案繼續(xù)在塊436把高位商轉(zhuǎn)換成整數(shù)格式并把它放置在整數(shù)寄存器文件中。在塊438計(jì)算該高64位部分的余數(shù)。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),余數(shù)是用整數(shù)硬件計(jì)算的。更準(zhǔn)確地說(shuō),從被除數(shù)的高64位減去高位商和除數(shù)的乘積產(chǎn)生高位余數(shù)。這個(gè)計(jì)算可以表示為RH=(XH·264)-(QL·Y)。雖然RH的這個(gè)等式意味著需要128位的整數(shù)運(yùn)算以便對(duì)RH求值,目前的實(shí)施方案能夠簡(jiǎn)單地用64位整數(shù)運(yùn)算計(jì)算RH,因?yàn)榇_定RH只需要128位表達(dá)式的64最低有效位。得到的RH由取低有效64位組成。因而能夠主要用64位擴(kuò)展精度的浮點(diǎn)除和64位整數(shù)運(yùn)算有效地實(shí)現(xiàn)本發(fā)明的128位除以64位整數(shù)除算法的實(shí)施方案。
對(duì)整數(shù)除算法的這個(gè)實(shí)施方案來(lái)說(shuō),可以進(jìn)行優(yōu)化來(lái)促進(jìn)對(duì)″RH=(XH·264)-(QH·Y)″求值,以便得到與被除數(shù)的高位部分XH相關(guān)的余數(shù)RH。這個(gè)實(shí)施方案的優(yōu)化由兩部分組成。第一部分是根據(jù)這樣的事實(shí)RH必須大于或等于0且小于264,因而只有乘積″QH·Y″的低位部分(最低有效64位)必須計(jì)算。高位部分不必計(jì)算。同樣,第二部分是根據(jù)如下事實(shí)乘積″XH·264″的低位部分(最低有效64位)是0,因而RH就是乘積″QH·Y″的低位部分關(guān)于2的補(bǔ)碼。結(jié)果,就以對(duì)64位量(乘積″QH·Y″的低位部分)關(guān)于2求補(bǔ)簡(jiǎn)單地代替了本來(lái)計(jì)算RH必需的128位減。此外,乘法器不需要返回完整的128位乘積。因而,不需要進(jìn)行乘法器返128位以及減/加處理128位量所必需的128位運(yùn)算。
圖4D是一個(gè)流程圖,為圖4A的實(shí)施方案描述了128位被除數(shù)的高64位和低64位部分的除后處理。這個(gè)實(shí)例的流程是圖4A的塊410和412上的活動(dòng)的更詳細(xì)的描述。在塊440,來(lái)自低64位和高64位部分的除操作的整數(shù)格式的商在整數(shù)執(zhí)行單元上被加在一起以產(chǎn)生初始的128位被除數(shù)的最終的商。這個(gè)實(shí)施方案的等式是Q=QL+QH。在塊442,來(lái)自低64位和高64位部分的除操作的整數(shù)格式的余數(shù)在整數(shù)執(zhí)行單元上被加在一起以產(chǎn)生128位除的最終的余數(shù)。在塊444執(zhí)行檢查以確定是否已經(jīng)設(shè)置了進(jìn)位標(biāo)志。這里進(jìn)位標(biāo)志可以表示余數(shù)相加有溢出并且有來(lái)自該操作的進(jìn)位。在塊446調(diào)整最后的商和余數(shù)。這個(gè)調(diào)整包括從余數(shù)值減去除數(shù)的量并把商加1以反映從余數(shù)發(fā)現(xiàn)并移除的額外的除數(shù)值。
如果在塊444沒有設(shè)置進(jìn)位標(biāo)志,就在塊445進(jìn)行檢查以確定從塊442獲得的余數(shù)的和是否大于除數(shù)的值。如果余數(shù)大于或等于除數(shù),就在塊446調(diào)整最后的商和余數(shù)。如果余數(shù)小于除數(shù),則不需要執(zhí)行任何調(diào)整。塊444和445的檢查可以表示如下if[(RH+RL)>=Y(jié)]or[進(jìn)位標(biāo)志=1,根據(jù)″RH+RL″操作]then{R=RH+RL-Y;Q=QH+QL+1;}else{R=RH+RL;Q=QH+QL;}如果對(duì)商或余數(shù)值沒有進(jìn)行任何調(diào)整,在塊440得到的加和的商與塊442得到加和的余數(shù)就是整個(gè)128位除以64位除操作的最后得到的商和余數(shù)。如果對(duì)加和值進(jìn)行了調(diào)整,那么從塊446得到的調(diào)整后的值就是128位除以64位除操作的最終的商和余數(shù)的結(jié)果。這時(shí)就完成了對(duì)擴(kuò)展精度的整數(shù)除指令的這個(gè)實(shí)施方案的執(zhí)行,可以發(fā)送該指令使其退出。
算法的另一種實(shí)施方案還能處理有符號(hào)數(shù)的除操作。該算法還適用于處理有符號(hào)數(shù),這樣上述無(wú)符號(hào)除實(shí)施方案就充當(dāng)有符號(hào)除實(shí)施方案的子程序。為了利用上述實(shí)施方案的無(wú)符號(hào)除算法,為無(wú)符號(hào)除算法補(bǔ)充了某些除前和除后處理過程。除前處理包括把有符號(hào)的數(shù),被除數(shù)和除數(shù),從有符號(hào)格式轉(zhuǎn)換成無(wú)符號(hào)格式。然后這個(gè)實(shí)施方案繼續(xù)像在無(wú)符號(hào)除實(shí)施方案中那樣進(jìn)行除操作。除后處理由若干檢查組成,以捕獲溢出條件以及確定商和余數(shù)的符號(hào)。因而,除前和除后過程通過處理符號(hào)使得能夠重用無(wú)符號(hào)除算法。下面將更詳細(xì)地描述有符號(hào)除操作。
圖5A是一個(gè)流程圖,描述依照本發(fā)明的另一個(gè)實(shí)施方案執(zhí)行有符號(hào)128位值除以有符號(hào)64位值的有符號(hào)整數(shù)除操作的一種方法。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),有符號(hào)整數(shù)除算法的核心由與圖4A的算法類似的無(wú)符號(hào)整數(shù)除算法599組成。在有符號(hào)除的這個(gè)實(shí)施方案中,對(duì)符號(hào)的處理和操縱是在無(wú)符號(hào)除序列之前和之后在整數(shù)領(lǐng)域處理的。被除數(shù)和除數(shù)被以有符號(hào)整數(shù)格式提供為指令的操作數(shù)。同樣,也希望這條指令的商和余數(shù)結(jié)果以有符號(hào)整數(shù)格式退出。其中因?yàn)闊o(wú)符號(hào)64位數(shù)的范圍是0到264,因而有符號(hào)64位有符號(hào)數(shù)的范圍實(shí)際擴(kuò)展到了從-263到+(263-1)。有符號(hào)128位被除數(shù)的除操作包括對(duì)符號(hào)的處理、在浮點(diǎn)執(zhí)行單元上由被除數(shù)的低64位除以64位除數(shù)的第一除操作、由被除數(shù)的高64位除以64位除數(shù)的第二除操作、以及對(duì)符號(hào)的除后處理和檢查。
這個(gè)實(shí)施方案的除前處理發(fā)生在塊502。在塊502,有符號(hào)的被除數(shù)和除數(shù)操作數(shù)被從有符號(hào)整數(shù)格式轉(zhuǎn)換成無(wú)符號(hào)整數(shù)格式。到無(wú)符號(hào)整數(shù)的轉(zhuǎn)換也可稱作″轉(zhuǎn)換成正數(shù)″操作,因?yàn)橛蟹?hào)數(shù)的絕對(duì)值可被當(dāng)作無(wú)符號(hào)值處理。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),有符號(hào)整數(shù)除算法調(diào)用無(wú)符號(hào)整數(shù)除算法599來(lái)在浮點(diǎn)單元上執(zhí)行除操作。這里無(wú)符號(hào)除算法599由塊504和512之間的活動(dòng)組成。在塊504,進(jìn)行檢查以確定除數(shù)是否等于0。如果除數(shù)等于0,就在塊503標(biāo)記除以″0″異常并結(jié)束整數(shù)除指令。
如果在塊504除數(shù)不等于0,就在塊506像在浮點(diǎn)操作中那樣用被除數(shù)的無(wú)符號(hào)低64位除以無(wú)符號(hào)除數(shù)。在用在浮點(diǎn)除法器中之前,被除數(shù)和除數(shù)都被轉(zhuǎn)換成浮點(diǎn)格式。從浮點(diǎn)單元產(chǎn)生的商被從浮點(diǎn)格式轉(zhuǎn)換成無(wú)符號(hào)整數(shù)格式。被除數(shù)的低位部分的余數(shù)是用整數(shù)乘法器在整數(shù)執(zhí)行單元上計(jì)算出來(lái)的。通過從被除數(shù)的低64位減去低位商和除數(shù)的乘積計(jì)算出這個(gè)無(wú)符號(hào)余數(shù)。這個(gè)計(jì)算可以表示為RL=XL-(QL·Y)。
在塊508執(zhí)行檢查以確定被除數(shù)的高位部分是否等于0。如果被除數(shù)的高64位等于0,就不需要進(jìn)行高位部分的除操作,因?yàn)榻Y(jié)果將是0。如果被除數(shù)的高位部分不等于0,在塊510,這個(gè)實(shí)施方案繼續(xù)在浮點(diǎn)單元中用被除數(shù)的無(wú)符號(hào)高64位(128位被除數(shù)經(jīng)264成比例縮放的高位部分)除以無(wú)符號(hào)除數(shù)。像先前的低位部分除操作一樣,128位被除數(shù)的其最低有效64位被清除以留下被除數(shù)的高64位部分,它也必須從整數(shù)格式被轉(zhuǎn)換成浮點(diǎn)格式。這里可以重用來(lái)自塊506的除數(shù)的浮點(diǎn)版本。在一種實(shí)施方案中,對(duì)商的浮點(diǎn)版本執(zhí)行溢出檢查。如果商>=264,則結(jié)果將溢出并且被錯(cuò)誤檢查檢測(cè)到。如果有溢出,就用信號(hào)通知除錯(cuò)誤。如果沒有溢出,就把浮點(diǎn)格式的商作為QH轉(zhuǎn)換成整數(shù)格式。從執(zhí)行高位部分除的浮點(diǎn)單元產(chǎn)生的商也被從浮點(diǎn)格式轉(zhuǎn)換成無(wú)符號(hào)整數(shù)格式。用整數(shù)執(zhí)行單元計(jì)算被除數(shù)的高位部分的余數(shù)。這個(gè)無(wú)符號(hào)高位余數(shù)是通過從被除數(shù)的高64位減去高位商和除數(shù)的乘積而計(jì)算出來(lái)的。這個(gè)計(jì)算可以表示為RH=XH·264-(QL·Y)。
在塊512執(zhí)行溢出檢查。如果檢測(cè)到任何錯(cuò)誤,就在塊503標(biāo)記異常。在塊514,從高位和低位結(jié)果計(jì)算出最終的商和余數(shù)。在塊514把這個(gè)實(shí)施方案的128位被除數(shù)上兩個(gè)獨(dú)立的64位除以64位無(wú)符號(hào)除的結(jié)果加在一起。低64位除操作的無(wú)符號(hào)結(jié)果分別和高64位除操作的無(wú)符號(hào)結(jié)果加在一起。用有符號(hào)除,在塊515有額外的溢出檢查。任何檢測(cè)到的錯(cuò)誤都會(huì)在塊503產(chǎn)生異常。在塊516組合后的無(wú)符號(hào)商和余數(shù)被轉(zhuǎn)換成最終的有符號(hào)值。下面用圖5B更詳細(xì)地描述包括這個(gè)實(shí)施方案的塊512的初始溢出檢查、塊514的相加、塊515的附加錯(cuò)誤檢查以及塊516的符號(hào)轉(zhuǎn)換。如果沒有發(fā)現(xiàn)錯(cuò)誤,就存儲(chǔ)最終的有符號(hào)結(jié)果,整數(shù)除微操作從執(zhí)行單元繼續(xù)到校驗(yàn)器與退出單元。
圖5B是一個(gè)流程圖,描述圖5A的128位除以64位整數(shù)除操作的結(jié)果的除后處理。在塊520,低64位除和高64位除的無(wú)符號(hào)商被加在一起以獲得128位除的商的無(wú)符號(hào)值或絕對(duì)值。因?yàn)?4位數(shù)的數(shù)值范圍在有符號(hào)和無(wú)符號(hào)領(lǐng)域是不同的,在處理有符號(hào)數(shù)時(shí)需要附加的檢查。塊522處的檢查是為了確定來(lái)自塊520的最終的商的絕對(duì)值是否大于有符號(hào)64位格式中能夠處理的最大值。對(duì)這個(gè)實(shí)施方案,把最終的商的絕對(duì)值與263相比,因?yàn)?4位2的補(bǔ)碼格式能夠表達(dá)的數(shù)的范圍是從263到263-1。如果商的絕對(duì)值大于263這個(gè)限制,就不能用來(lái)自整數(shù)硬件的64位輸出表示該數(shù)。在塊540用信號(hào)通知除溢出錯(cuò)誤。
如果商的絕對(duì)值小于或等于263。就在塊524確定最終的商的符號(hào)。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),用初始128位有符號(hào)被除號(hào)的符號(hào)和初始64位除有符號(hào)除數(shù)的符號(hào)的″邏輯異或″(XOR)來(lái)計(jì)算商的符號(hào)SIGNQUOTIENT=SIGNDIVIDBNDXOR SIGNDIVISOR因此如果被除數(shù)和除數(shù)的初始符號(hào)相同,則最終的商的符號(hào)為正(+)。但果被除數(shù)和除數(shù)的原始符號(hào)不同,則最終的商的符號(hào)為負(fù)(-)。在塊526,執(zhí)行檢查以確定最終的商的有符號(hào)值是否在有符號(hào)64位格式能夠處理的最大值之內(nèi)。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),最終商的可表示值在-263到+(263-1)之間,包括-263和+(263-1)。在塊526的檢查中,如果最終商的絕對(duì)值等于263并且最終商的符號(hào)為正,則該數(shù)無(wú)法表示,因?yàn)檎龜?shù)的上限是263-1。當(dāng)商等于263并且商的符號(hào)為正時(shí)就檢查到了溢出。在塊540信號(hào)通知除溢出錯(cuò)誤。如果最終商的絕對(duì)值等于263且最終商的符號(hào)為負(fù),該數(shù)就是可表示的,因?yàn)樨?fù)數(shù)的下限為-263。在塊528把正確的符號(hào)施加到最終商的絕對(duì)值上作為128位除操作的商,這里的結(jié)果是有符號(hào)整數(shù)。
如果余數(shù)的絕對(duì)值小于除數(shù),就在塊536確定最終的余數(shù)的符號(hào)。對(duì)這個(gè)實(shí)施方案來(lái)說(shuō),余數(shù)采用和被除數(shù)相同的符號(hào)SIGNREMAINDBR=SIGNDIVIDEND。在塊538把正確的符號(hào)施加到最終的余數(shù)的絕對(duì)值上作為128位除操作的余數(shù),這里的結(jié)果是有符號(hào)的整數(shù)。最終的有符號(hào)的商和余數(shù)被存儲(chǔ)在整數(shù)寄存器文件中并等待它的擴(kuò)展精度的整數(shù)除指令的退出以及把結(jié)果應(yīng)用到體系結(jié)構(gòu)狀態(tài)。
雖然是在128位除以64位除的環(huán)境中描述了上述示例和論述,但應(yīng)該認(rèn)識(shí)到其它擴(kuò)展精度的整數(shù)除可以有不同的長(zhǎng)度。例如,本算法的另一種實(shí)施方案可被實(shí)現(xiàn)在有整數(shù)和/或浮點(diǎn)硬件的處理器中以支持更寬的操作數(shù),例如256位除以64位、256位除以128位等等。同樣,整數(shù)和浮點(diǎn)操作和操作數(shù)的精度在可選實(shí)施方案中是可變的。上述實(shí)施方案所在的環(huán)境是把一個(gè)除操作當(dāng)作兩個(gè)除操作來(lái)執(zhí)行,其中被除數(shù)的高位部分和低位部分是在單獨(dú)的除操作中處理的。可以為L(zhǎng)位被除數(shù)和M位除數(shù)的任意除操作實(shí)現(xiàn)本發(fā)明的其它實(shí)施方案,這里L(fēng)/M是任意整數(shù)。例如,可以把邏輯外推來(lái)把L位被除數(shù)的除操作分成被除數(shù)的四個(gè)不同部分的四個(gè)獨(dú)立除法??稍谄渌鼘?shí)施方案中擴(kuò)展本發(fā)明的技術(shù)和教義以為特定的整數(shù)除支持想要的位數(shù)和精度。
雖然上述示例把指令的執(zhí)行描述為執(zhí)行單元和邏輯電路環(huán)境中的半快操作,但也可通過軟件實(shí)現(xiàn)本發(fā)明的其它實(shí)施方案。這樣的軟件可以存儲(chǔ)在系統(tǒng)內(nèi)的存儲(chǔ)器中。同樣,可以通過網(wǎng)絡(luò)或經(jīng)由其它計(jì)算機(jī)可讀介質(zhì)發(fā)布代碼。例如,可以通過一種計(jì)算機(jī)可讀介質(zhì),例如軟盤或CD-ROM,甚至通過在Internet上的傳輸來(lái)發(fā)布計(jì)算機(jī)程序。因而,機(jī)器可讀介質(zhì)可以包括以機(jī)器(例如,計(jì)算機(jī))可讀的形式存儲(chǔ)或傳輸信息的任意機(jī)制。例如,機(jī)器可讀介質(zhì)可以包括只讀存儲(chǔ)器(ROM)、隨機(jī)訪問存儲(chǔ)器(RAM)、磁盤存儲(chǔ)介質(zhì)、光存儲(chǔ)介質(zhì)、閃存設(shè)備,以及電、光、聲或其它形式的傳播信號(hào)(例如,載波、紅外信號(hào)、數(shù)字信號(hào)等)。
此外,可以電子形式通信或傳輸依照本發(fā)明的集成電路設(shè)計(jì)的實(shí)施方案。例如,可以通過fab來(lái)處理或制造一種實(shí)施方案中的處理器的集成電路設(shè)計(jì)的電子形式以獲得計(jì)算機(jī)部件。在另一個(gè)實(shí)例中,電子形式的集成電路設(shè)計(jì)可由機(jī)器處理,以模擬計(jì)算機(jī)部件。因而一些實(shí)施例中處理器的電路布局計(jì)劃和/或設(shè)計(jì)可以通過機(jī)器可讀介質(zhì)發(fā)布或在其上實(shí)現(xiàn),制造成電路或?qū)ζ溥M(jìn)行模擬,處理器的電路布局計(jì)劃和/或設(shè)計(jì)在由機(jī)器處理時(shí)模擬一個(gè)處理器。機(jī)器可讀介質(zhì)在其它實(shí)施方案中還能夠存儲(chǔ)依照本發(fā)明表示預(yù)先確定的功能的數(shù)據(jù)。
在前面的說(shuō)明書中,已經(jīng)根據(jù)關(guān)于本發(fā)明的具體的示例性實(shí)施方案對(duì)其進(jìn)行了描述。但顯然在不偏離所附權(quán)利要求中闡明的本發(fā)明的更廣的精神和范圍的情況正可對(duì)其進(jìn)行多種更改和變化。因而說(shuō)明書和附圖將被看作是說(shuō)明性的,而不是用于限制。
權(quán)利要求
1.一種在處理裝置中產(chǎn)生擴(kuò)展精度整數(shù)除操作的商和余數(shù)的方法,包括把擴(kuò)展精度整數(shù)除指令譯碼成微操作以使整數(shù)除操作發(fā)生;啟動(dòng)除算法以通過使用浮點(diǎn)除執(zhí)行所述整數(shù)除操作;把整數(shù)被除數(shù)和整數(shù)除數(shù)分別轉(zhuǎn)換成浮點(diǎn)被除數(shù)和浮點(diǎn)除數(shù);用所述浮點(diǎn)被除數(shù)除以所述浮點(diǎn)除數(shù)以得到浮點(diǎn)商;把所述浮點(diǎn)商轉(zhuǎn)換成整數(shù)商;根據(jù)所述整數(shù)被除數(shù)、所述整數(shù)除數(shù)和所述整數(shù)商,通過從所述整數(shù)被除數(shù)減去所述整數(shù)除數(shù)和所述整數(shù)商的乘積計(jì)算整數(shù)余數(shù);根據(jù)對(duì)從所述整數(shù)被除數(shù)、所述整數(shù)除數(shù)和所述整數(shù)商計(jì)算得到的所述整數(shù)余數(shù)的求值檢查錯(cuò)誤;并將所述整數(shù)余數(shù)調(diào)整所述整數(shù)商的值和將所述整數(shù)商調(diào)整1以解決用所述浮點(diǎn)除執(zhí)行所述整數(shù)除操作所需要的任何修正。
2.權(quán)利要求1的方法還包括為所述擴(kuò)展精度整數(shù)除指令接收第一和第二操作數(shù),其中所述第一操作數(shù)是有符號(hào)整數(shù)被除數(shù),所述第二操作數(shù)是有符號(hào)整數(shù)除數(shù);把所述第一操作數(shù)從有符號(hào)整數(shù)被除數(shù)轉(zhuǎn)換成所述整數(shù)被除數(shù),其中所述整數(shù)被除數(shù)是無(wú)符號(hào)的;并且把所述第二操作數(shù)從有符號(hào)整數(shù)除數(shù)轉(zhuǎn)換成所述整數(shù)除數(shù),其中所述整數(shù)除數(shù)是無(wú)符號(hào)的。
3.權(quán)利要求2的方法還包括把所述整數(shù)商轉(zhuǎn)換成有符號(hào)整數(shù)商;通過表示大于2N-1的正值或小于-(2N-1)的負(fù)值來(lái)確定所述有符號(hào)整數(shù)商是否已經(jīng)溢出了有符號(hào)整數(shù)N位格式可表示的限制;如果存在商溢出就用信號(hào)通知除溢出錯(cuò)誤;并且把所述整數(shù)余數(shù)轉(zhuǎn)換成有符號(hào)整數(shù)余數(shù)。
4.權(quán)利要求3的方法,其中所述擴(kuò)展精度整數(shù)除指令是為了使128位除以64位的除操作發(fā)生,其中所述整數(shù)被除數(shù)是128位寬,所述整數(shù)除數(shù)是64位寬。
全文摘要
通過進(jìn)行擴(kuò)展精度整數(shù)除算法以增加擴(kuò)展精度的整數(shù)除計(jì)算的性能并減少用于執(zhí)行擴(kuò)展精度整數(shù)除的內(nèi)部操作的處理器的制造成本,一方法實(shí)現(xiàn)了改進(jìn)的內(nèi)部處理器操作的技術(shù)效果。方法包括把大于內(nèi)部運(yùn)算裝置的L位寬整數(shù)被除數(shù)分成整數(shù)部分,其中第一整數(shù)部分包括整數(shù)被除數(shù)的低M位而第二整數(shù)部分包括所述整數(shù)被除數(shù)的高M(jìn)位。把第一和第二整數(shù)部分從內(nèi)部整數(shù)格式轉(zhuǎn)換成內(nèi)部浮點(diǎn)格式,并把N位寬整數(shù)除數(shù)轉(zhuǎn)換成內(nèi)部浮點(diǎn)格式。在內(nèi)部浮點(diǎn)格式下用第一和第二部分除以除數(shù)以獲得第一和第二內(nèi)部浮點(diǎn)格式的商。然后把第一和第二商從內(nèi)部浮點(diǎn)格式轉(zhuǎn)換成內(nèi)部整數(shù)格式并加在一起以產(chǎn)生整數(shù)商。解決了對(duì)大于內(nèi)部運(yùn)算裝置的擴(kuò)展精度整數(shù)進(jìn)行整數(shù)除計(jì)算的問題。
文檔編號(hào)G06F9/318GK1740963SQ20051010646
公開日2006年3月1日 申請(qǐng)日期2003年12月26日 優(yōu)先權(quán)日2002年12月26日
發(fā)明者P·L·魯塞爾, R·S·帕塔薩拉蒂 申請(qǐng)人:英特爾公司