專利名稱:用于檢測(cè)十進(jìn)制浮點(diǎn)量異常的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總地涉及一種電子運(yùn)算處理器,并且更具體地涉及對(duì)特定運(yùn)算計(jì)算條件的檢測(cè)。
背景技術(shù):
十進(jìn)制浮點(diǎn)數(shù)和其它基數(shù)(radices)的浮點(diǎn)數(shù)(諸如,由IEEE 754-2008浮點(diǎn)標(biāo)準(zhǔn)定義的那些)對(duì)于執(zhí)行某些類型的數(shù)據(jù)處理是有用的。已經(jīng)創(chuàng)建了基于IEEE 754-2008 標(biāo)準(zhǔn)的處理器設(shè)計(jì)來直接支持由該標(biāo)準(zhǔn)定義的處理。用于IEEE 754-2008處理器的示例的硬件格式包括用具有指定的指數(shù)范圍的7、16和34數(shù)位的定義的系數(shù)的、長度為32、64和 1 位的十進(jìn)制浮點(diǎn)數(shù)據(jù)格式。軟件處理環(huán)境(諸如包括支持十進(jìn)制浮點(diǎn)數(shù)的Java的編程語言)有時(shí)候使用被稱為“精度”的不同長度系數(shù),該長度系數(shù)具有與在其上運(yùn)行該環(huán)境的硬件所使用的指數(shù)范圍不同指數(shù)范圍。十進(jìn)制浮點(diǎn)數(shù)比只是數(shù)的值保留了更多信息,它們還包含表示該數(shù)的標(biāo)度 (scale)的信息。例如,相加以分幣(cent)表示金錢的數(shù)將通常產(chǎn)生也以分幣表示的和。 一些軟件環(huán)境仿真十進(jìn)制浮點(diǎn)數(shù)精度和范圍,使得一些十進(jìn)制浮點(diǎn)運(yùn)算產(chǎn)生超過可用的處理硬件精度和范圍的結(jié)果。這樣的條件可能不不注意地導(dǎo)致不準(zhǔn)確的結(jié)果。當(dāng)已經(jīng)超過精度或范圍時(shí),發(fā)生現(xiàn)有的異常,諸如不精確、上溢和下溢異常,但是這些異常未能準(zhǔn)確地檢測(cè)精度或者運(yùn)算結(jié)果中所有意外的改變。未檢測(cè)到的潛在錯(cuò)誤的示例是將以分幣表示的兩個(gè)七(7)數(shù)位的金錢數(shù)額相加的十進(jìn)制浮點(diǎn)運(yùn)算。這些源數(shù)據(jù)元素中的每一個(gè)將是處于10000美元范圍的數(shù)額。將這兩個(gè)數(shù)額求和能夠?qū)е绿幱?00000美元范圍的精確結(jié)果。然而,利用七個(gè)數(shù)位表示處于 100000美元范圍中的作為分幣的結(jié)果需要指數(shù)不是將指示分幣的優(yōu)選指數(shù),并且結(jié)果的值的精度將相應(yīng)地減少。利用更高的精度執(zhí)行相同的計(jì)算將導(dǎo)致指示分幣(10_2)的指數(shù)作為結(jié)果的標(biāo)度。現(xiàn)有的異常在產(chǎn)生的結(jié)果中將檢測(cè)不到標(biāo)度的這種丟失。一些硬件實(shí)現(xiàn)方式提供了檢測(cè)上述情形的粗略的方法。在一個(gè)示例中,檢查數(shù)據(jù)以確定最高有效數(shù)位是否是非零的。這種檢查是結(jié)果可能不具有優(yōu)選指數(shù)的過度指示 (over indication),因?yàn)橐恍?zhǔn)確的結(jié)果將導(dǎo)致“假肯定(false positive) ”指示。該方法有效地減少了用于仿真的有用精度一個(gè)數(shù)位,這是由于最高有效數(shù)位用作潛在標(biāo)度丟失的指示符。因此,未檢測(cè)到由處理器格式化限制所產(chǎn)生的十進(jìn)制浮點(diǎn)結(jié)果的標(biāo)度或者精度的意外改變限制了計(jì)算準(zhǔn)確度。
發(fā)明內(nèi)容
在一個(gè)實(shí)施例中,一種用于檢測(cè)處理異常的方法,包括處理器接收至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù),并且對(duì)該至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算以產(chǎn)生十進(jìn)制浮點(diǎn)結(jié)果。進(jìn)行關(guān)于該十進(jìn)制浮點(diǎn)結(jié)果是否未能保持優(yōu)選量(preferred quantum)的確定。該優(yōu)選量指示該十進(jìn)制浮點(diǎn)結(jié)果的有效數(shù)字的最低有效數(shù)位表示的定義值。響應(yīng)于確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,提供用于指示量異常發(fā)生的輸出。在另一實(shí)施例中,一種用于檢測(cè)處理異常的系統(tǒng),包括存儲(chǔ)器以及與該存儲(chǔ)器通信地耦接的處理器。該處理器包括指令處理器。該指令處理器接收至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù),并且對(duì)該至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算以產(chǎn)生十進(jìn)制浮點(diǎn)結(jié)果。 該處理器還包括量異常檢測(cè)器。響應(yīng)于指令處理器執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算,該量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量。該優(yōu)選量指示該十進(jìn)制浮點(diǎn)結(jié)果的有效數(shù)字的最低有效數(shù)位表示的定義值。該處理器還包括量異常響應(yīng)單元。響應(yīng)于量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,該量異常響應(yīng)單元提供用于指示量異常的輸出。響應(yīng)于該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,該量異常發(fā)生。在另一實(shí)施例中,一種用于檢測(cè)處理異常的計(jì)算機(jī)程序產(chǎn)品,包括由處理電路可讀的存儲(chǔ)介質(zhì),并且存儲(chǔ)用于執(zhí)行方法而由處理電路運(yùn)行的指令。該方法包括接收至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)并且對(duì)該至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算以產(chǎn)生十進(jìn)制浮點(diǎn)結(jié)果。確定該十進(jìn)制浮點(diǎn)結(jié)果是否未能保持優(yōu)選量。該優(yōu)選量指示該十進(jìn)制浮點(diǎn)結(jié)果的有效數(shù)字的最低有效數(shù)位表示的定義值。響應(yīng)于確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,提供用于指示量異常發(fā)生的輸出。
附圖以及以下詳細(xì)描述與附圖一起并入本說明書并且形成本說明書的一部分,用作進(jìn)一步說明各種實(shí)施例并且解釋依據(jù)本發(fā)明的各種原理和所有優(yōu)點(diǎn),在附圖中,類似的參考標(biāo)記貫穿各單獨(dú)視圖指代等同的或者在功能上類似的元件,其中圖1圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的計(jì)算機(jī)處理器;圖2圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的十進(jìn)制浮點(diǎn)運(yùn)算執(zhí)行;以及圖3圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的信息處理系統(tǒng)的框圖。
具體實(shí)施例方式根據(jù)需要,在此公開了本發(fā)明的詳細(xì)實(shí)施例;然而,要理解,所公開的實(shí)施例僅僅是本發(fā)明的示例,其可以以各種形式來實(shí)施。因此,在此公開的具體結(jié)構(gòu)上和功能上的細(xì)節(jié)不要解釋為是限制性的,而是僅僅作為權(quán)利要求書的基礎(chǔ)和作為用以教示本領(lǐng)域技術(shù)人員以任何實(shí)質(zhì)上適當(dāng)?shù)脑敿?xì)結(jié)構(gòu)和功能來以各種方式采用本發(fā)明的代表性的基礎(chǔ)。此外,在此使用的術(shù)語和用語不是旨在作為限制性的,而是旨在提供對(duì)本發(fā)明的可理解的描述。如在此使用的術(shù)語“a”或者“an”被定義為一個(gè)或者不止一個(gè)。如在此使用的術(shù)語“多個(gè)”被定義為兩個(gè)或者不止兩個(gè)。如在此使用的術(shù)語“另一個(gè)”被定義為至少第二個(gè)或者更多。如在此使用的術(shù)語“包括”和/或“具有”被定義為包含(即,開放式的語言)。 如在此使用的術(shù)語“耦合”被定義為連接,盡管不一定是直接地連接,并且不一定是機(jī)械上的連接。以下描述的系統(tǒng)和方法包括十進(jìn)制浮點(diǎn)處理器,其能夠在十進(jìn)制浮點(diǎn)運(yùn)算的結(jié)果不表示優(yōu)選量(諸如由IEEE 754-2008標(biāo)準(zhǔn)定義的優(yōu)選的指數(shù))時(shí),生成在此被稱為“量異常”的異常。這對(duì)于軟件或編程語言是尤其有用的,所述軟件或編程語言比在其上運(yùn)行該軟件或編程語言的硬件支持具有更大精度或范圍的十進(jìn)制格式,這是因?yàn)槠湓试S檢測(cè)到超過硬件格式的處理。在本討論的背景下,“量”是指浮點(diǎn)表示的最低有效數(shù)位的“單位”。先前定義的浮點(diǎn)異常檢測(cè)一些處理不準(zhǔn)確性,但是不能完全地檢測(cè)以下情形具有不是優(yōu)選的指數(shù)的標(biāo)度或指數(shù)表示的十進(jìn)制浮點(diǎn)運(yùn)算的結(jié)果。換言之,現(xiàn)有的浮點(diǎn)異常不能完全地指示以下情形如果在處理器中存在表示系數(shù)的更大精度,則十進(jìn)制浮點(diǎn)運(yùn)算結(jié)果不具有可能創(chuàng)建的指數(shù)的情形。IEEE754-2008標(biāo)準(zhǔn)定義了優(yōu)選量的值,但是沒有定義用于未能實(shí)現(xiàn)十進(jìn)制浮點(diǎn)運(yùn)算結(jié)果中的優(yōu)選值的異常。定義以下描述的方法和系統(tǒng)的量異常以與其它IEEE異常具有類似的控制。該量異常還具有相關(guān)聯(lián)的掩碼(mask)、標(biāo)志,以及異常代碼。這允許在標(biāo)準(zhǔn)化的格式上容易仿真具有不同精度和范圍的編程語言,并且在檢測(cè)意外的指數(shù)改變的同時(shí)提供全精度和范圍的格式。當(dāng)十進(jìn)制浮點(diǎn)運(yùn)算產(chǎn)生被舍入或者鉗位(clamp)的結(jié)果時(shí),發(fā)生一個(gè)實(shí)施例的量異常事件。盡管一些Java實(shí)現(xiàn)方式包括被稱為Rounded和Clamped的單獨(dú)事件,但是一個(gè)實(shí)施例的量異常本質(zhì)上指示已經(jīng)超過了結(jié)果的精度或范圍。在一個(gè)實(shí)施例中的量異常報(bào)告機(jī)制是可控的并且具有掩碼位來控制從異常推斷(assertion)導(dǎo)致的動(dòng)作。在一個(gè)實(shí)施例中,在處理器的浮點(diǎn)控制字(FPC)中指示掩碼位以掩碼將量異常捕獲(trap)到程序異常句柄(handler)。當(dāng)所述掩碼位是1并且量異常發(fā)生時(shí),將造成該異常的十進(jìn)制浮點(diǎn)運(yùn)算的結(jié)果寫入到浮點(diǎn)寄存器(FPR),并且將標(biāo)識(shí)異常類型的代碼寫入到浮點(diǎn)控制字(FPC)以及將程序執(zhí)行捕獲到程序中斷句柄。當(dāng)未置位掩碼位時(shí),置位作為粘性標(biāo)志的量異常標(biāo)志并且不進(jìn)行捕獲。本發(fā)明的實(shí)施例利用十進(jìn)制浮點(diǎn)數(shù)進(jìn)行運(yùn)算。通過包括IEEE 754-2008的各種標(biāo)準(zhǔn)定義的十進(jìn)制浮點(diǎn)數(shù)具有三個(gè)部分符號(hào)位、指數(shù)和有效數(shù)字(significand)。作為無符號(hào)值的數(shù)的量級(jí)是有效數(shù)字和被升到指數(shù)次的冪的基數(shù)的乘積。在十進(jìn)制浮點(diǎn)數(shù)中,基數(shù)是十(10)。依賴于符號(hào)位是零還是一,數(shù)的符號(hào)分別是正或負(fù)。有效數(shù)字具有隱含的基數(shù)點(diǎn),并且其位置依賴于對(duì)正被應(yīng)用的浮點(diǎn)數(shù)據(jù)的解釋或觀察(view)。本發(fā)明的實(shí)施例表示具有右側(cè)單位觀察的十進(jìn)制浮點(diǎn)數(shù),其中有效數(shù)字的最右邊的數(shù)位是單位數(shù)位并且基數(shù)點(diǎn)隱含地緊接在整個(gè)有效數(shù)字的右邊。圖1圖示了根據(jù)本發(fā)明的一個(gè)實(shí)施例的計(jì)算機(jī)處理器100。該計(jì)算機(jī)處理器100 包括指令處理器,所述指令處理器包括十進(jìn)制浮點(diǎn)單元110、浮點(diǎn)寄存器108和程序控制器 124。十進(jìn)制浮點(diǎn)單元110從程序控制器IM接收十進(jìn)制浮點(diǎn)指令,程序控制器1 接收存儲(chǔ)在程序存儲(chǔ)器152中的程序指令。向十進(jìn)制浮點(diǎn)單元110發(fā)出的十進(jìn)制浮點(diǎn)指令例如包括指定在一個(gè)或者多個(gè)十進(jìn)制浮點(diǎn)數(shù)上執(zhí)行的數(shù)據(jù)轉(zhuǎn)換和/或十進(jìn)制浮點(diǎn)計(jì)算的指令。十進(jìn)制浮點(diǎn)單元110通過從浮點(diǎn)寄存器108內(nèi)的一個(gè)或多個(gè)源寄存器中讀取十進(jìn)制浮點(diǎn)數(shù)據(jù)來接受十進(jìn)制浮點(diǎn)運(yùn)算數(shù),執(zhí)行指定的十進(jìn)制浮點(diǎn)運(yùn)算,并且將結(jié)果存儲(chǔ)到浮點(diǎn)寄存器內(nèi)的目的地寄存器中。通常在浮點(diǎn)寄存器108和數(shù)據(jù)存儲(chǔ)器150之間交換數(shù)據(jù)。根據(jù)諸如IEEE 754-2008浮點(diǎn)標(biāo)準(zhǔn)之類的可應(yīng)用的浮點(diǎn)處理標(biāo)準(zhǔn),一個(gè)實(shí)施例的十進(jìn)制浮點(diǎn)單元在十進(jìn)制浮點(diǎn)數(shù)上執(zhí)行操作。作為到十進(jìn)制浮點(diǎn)運(yùn)算的輸入的源操作數(shù)的量值通常作為定義用于該運(yùn)算的輸出的優(yōu)選量(如由有關(guān)標(biāo)準(zhǔn)定義的)的基礎(chǔ)。由于十進(jìn)制浮點(diǎn)單元110中可用的精度,源操作數(shù)的值可能產(chǎn)生具有與優(yōu)選量不同的量的結(jié)果。例如,由于造成指定的運(yùn)算的中間結(jié)果或者最終結(jié)果的舍入的十進(jìn)制浮點(diǎn)單元110的有限的硬件精度而引起結(jié)果的量可能從優(yōu)選量改變。通過量檢測(cè)機(jī)制的這種丟失來檢測(cè)計(jì)算硬件精度和并入十進(jìn)制浮點(diǎn)運(yùn)算的軟件架構(gòu)的精度之間的差異,所述量檢測(cè)機(jī)制允許軟件檢測(cè)何時(shí)存在從硬件精度切換到仿真更高的精度的需要,這提供了性能優(yōu)化的實(shí)現(xiàn)方式。一個(gè)實(shí)施例的十進(jìn)制浮點(diǎn)單元110包括量異常檢測(cè)器112。量異常檢測(cè)器112檢測(cè)由具有與優(yōu)選量不同的量的十進(jìn)制浮點(diǎn)運(yùn)算產(chǎn)生的結(jié)果的發(fā)生,其中優(yōu)選量是例如基于源操作數(shù)的值和/或量所確定的定義值。優(yōu)選量和具體運(yùn)算的結(jié)果的量之間的差異能夠由例如通過源操作數(shù)的實(shí)際值造成的硬件上溢或下溢條件造成。一個(gè)實(shí)施例的量異常檢測(cè)器112推斷“量異常”以指示由十進(jìn)制浮點(diǎn)單元110產(chǎn)生的結(jié)果具有與優(yōu)選量值不同的量值、或者指數(shù)值。一個(gè)實(shí)施例的量異常的推斷和處理與其它浮點(diǎn)處理異常類似。一個(gè)實(shí)施例中量異常的推斷被反映在量異常標(biāo)志122中,量異常標(biāo)志122由一個(gè)實(shí)施例的浮點(diǎn)單元110保持并且能夠可改變地被指派異常代碼以標(biāo)識(shí)推斷出的十進(jìn)制浮點(diǎn)異常,諸如量異常。本發(fā)明的一個(gè)實(shí)施例支持響應(yīng)于量異常檢測(cè)器112的量異常的推斷控制所采取的動(dòng)作。本發(fā)明的一個(gè)實(shí)施例保持異??刂萍拇嫫?06,該異??刂萍拇嫫?06包括可變地被指派置位狀態(tài)或者未置位狀態(tài)的一個(gè)或多個(gè)異??刂蒲诖a。在本發(fā)明的一個(gè)實(shí)施例中, 處理器包括作為異??刂萍拇嫫?06的示例的浮點(diǎn)控制字(FPC)。異??刂萍拇嫫?06允許例如置位掩碼以控制對(duì)各種浮點(diǎn)異常(諸如由IEEE 754-2008定義的異常)的響應(yīng)。除了允許用于由各種標(biāo)準(zhǔn)定義的異常的掩碼定義,本發(fā)明的一個(gè)實(shí)施例包括附加掩碼位,以響應(yīng)于上述量異常的推斷而控制發(fā)生的處理。在一個(gè)實(shí)施例中,如果在量異常掩碼位被指派了置位狀態(tài)時(shí)量異常發(fā)生,則由十進(jìn)制浮點(diǎn)單元產(chǎn)生的運(yùn)算結(jié)果(其具有與優(yōu)選量不同的量)被寫入到浮點(diǎn)寄存器108中的結(jié)果寄存器120中, 并且程序控制器1 被發(fā)信號(hào)通知將該程序的運(yùn)行捕獲到程序的中斷句柄。如果在量異常掩碼位被指派了未置位狀態(tài)時(shí)發(fā)生量異常,則將量異常標(biāo)志122置位為粘性標(biāo)志,并且程序運(yùn)行繼續(xù)而不被捕獲到程序中斷句柄。一個(gè)實(shí)施例中的“粘性標(biāo)志”量異常標(biāo)志122在隨后的指令的處理期間保留為置位,以允許在量異常發(fā)生之后的指令序列運(yùn)行之后,響應(yīng)于量異常而延遲檢測(cè)處理和作為結(jié)果的處理。本發(fā)明的一個(gè)實(shí)施例在一些機(jī)器碼指令中提供了附加控制字段以進(jìn)一步控制檢測(cè)量異常以及對(duì)此進(jìn)行響應(yīng)采取的動(dòng)作。在一個(gè)示例中,一些機(jī)器語言指令(諸如十進(jìn)制浮點(diǎn)機(jī)器語言指令)在機(jī)器語言指令文本中包括量異??刂莆?XqC位)或者量異??刂谱侄我允沟媚軌?qū)@些指令單獨(dú)地進(jìn)行量異常檢測(cè)。這種指令的示例例如包括從整數(shù)的轉(zhuǎn)換(Convert)指令、除法指令、加載FP整數(shù)指令、加載舍入的指令、乘法指令、量化指令、重新舍入指令、減法指令等等。在單獨(dú)的指令中包括量異??刂莆换蛘吡慨惓?刂谱侄问沟媚軌蛞圆煌姆绞绞褂孟嗤闹噶顏頇z測(cè)或者不檢測(cè)量異常,并且在檢測(cè)不精確的結(jié)果異常時(shí)提供了靈活性。檢測(cè)不精確的結(jié)果異常的靈活性允許在以下情況下執(zhí)行不同的處理在希望算術(shù)運(yùn)算產(chǎn)生具有例如數(shù)據(jù)類型之間隱式轉(zhuǎn)換或者顯式轉(zhuǎn)換的結(jié)果時(shí),或者在算術(shù)運(yùn)算導(dǎo)致例如如通過各種軟件編程語言所定義的底層運(yùn)算(floor operation)或者上層運(yùn)算(ceil operation)時(shí)。其中可能發(fā)生意外的隱式轉(zhuǎn)換的環(huán)境示例是軟件十進(jìn)制浮點(diǎn)實(shí)現(xiàn)方式利用在其上執(zhí)行該軟件的硬件的更高的精度來仿真的情形。在這種情形下,基于其更高精度的軟件環(huán)境確定指定的計(jì)算能夠保持優(yōu)選量。然而,具有較低精度的硬件必須舍入該結(jié)果并且意外地遭遇到不精確的條件。然而,從顯式轉(zhuǎn)換導(dǎo)致的“不精確”(例如截?cái)辔?應(yīng)不會(huì)導(dǎo)致變更程序運(yùn)行。在編程者將不會(huì)意識(shí)到數(shù)據(jù)類型之間的隱式轉(zhuǎn)換的情形下,則應(yīng)檢測(cè)該不精確性,并且應(yīng)對(duì)于該情形變更程序執(zhí)行。由于不精確性是量丟失的一個(gè)成分,所以在一個(gè)實(shí)施例中提供附加控制以控制量異常檢測(cè),并且該處理在指令基礎(chǔ)上響應(yīng)于那些量異常的發(fā)生。在一個(gè)實(shí)施例中,擴(kuò)展用于控制其它異常的所選擇的十進(jìn)制浮點(diǎn)指令的控制字段,以便還編碼包括量異??刂莆?例如XqC位)的量異常控制字段。在一個(gè)示例中,將量異??刂莆?XqC位)編碼到所選擇的十進(jìn)制浮點(diǎn)指令的舍入模式控制字段(RMC)中。一個(gè)示例的RMC字段是四(4)位字段,其中等于0和8到15的值先前已經(jīng)被定義為控制與特定顯式舍入模式相關(guān)聯(lián)的異常。在該示例中,一個(gè)實(shí)施例的量異??刂谱侄伪环峙浣o等于 1到7的RMC字段的值。等于1到7的RMC字段的值啟動(dòng)量異常并且為這些值挑選具體的舍入模式。將所選擇的這些指令的RMC字段置位為0或者8到15的值導(dǎo)致在執(zhí)行這些指令時(shí),不檢測(cè)量異常。然而,等于1到7的值的RMC字段值導(dǎo)致檢測(cè)量異常并且相應(yīng)地變更程序執(zhí)行。圖2圖示根據(jù)本發(fā)明的一個(gè)實(shí)施例的十進(jìn)制浮點(diǎn)運(yùn)算執(zhí)行200。該十進(jìn)制浮點(diǎn)運(yùn)算執(zhí)行200通過在202接收供十進(jìn)制浮點(diǎn)單元102執(zhí)行的十進(jìn)制浮點(diǎn)運(yùn)算指令而開始。在一個(gè)實(shí)施例中,所接收的十進(jìn)制浮點(diǎn)運(yùn)算指令是程序存儲(chǔ)器152中存儲(chǔ)的程序的一部分并且由計(jì)算機(jī)處理器100的程序控制器124接收。程序控制器124向十進(jìn)制浮點(diǎn)單元110發(fā)出所接收的十進(jìn)制浮點(diǎn)運(yùn)算指令用于執(zhí)行。在一個(gè)實(shí)施例中,十進(jìn)制浮點(diǎn)指令指定第一源操作數(shù)(操作數(shù)A 102)和第二源操作數(shù)(操作數(shù)B 104)。盡管這兩個(gè)源操作數(shù)被例示為駐留在浮點(diǎn)寄存器108中,但各種尋址模式能夠用于指定位于各種位置的源操作數(shù)和目的地操作數(shù),如本領(lǐng)域普通技術(shù)人員鑒于本討論所理解的。該處理通過在204讀取第一源操作數(shù)(操作數(shù)A 102)和在206讀取第二源操作數(shù)(操作數(shù)B 104)繼續(xù)。實(shí)施例能夠通過任何合適的手段將一個(gè)或多個(gè)操作數(shù)接受到指令處理器。然后在208確定由所接收的十進(jìn)制浮點(diǎn)運(yùn)算產(chǎn)生的結(jié)果的優(yōu)選量。在一個(gè)實(shí)施例中,至少部分地基于兩個(gè)源操作數(shù)(操作數(shù)A 102和操作數(shù)B 104)的值來確定優(yōu)選量。然后在210執(zhí)行由所接收的十進(jìn)制浮點(diǎn)指令指定的十進(jìn)制浮點(diǎn)運(yùn)算。在212確定執(zhí)行的十進(jìn)制浮點(diǎn)指令的結(jié)果是否保持該結(jié)果的優(yōu)選量。如果十進(jìn)制浮點(diǎn)運(yùn)算的結(jié)果未能保持優(yōu)選量,則處理在220繼續(xù)確定是否置位量異常控制掩碼。如上所述,各種實(shí)施例提供了一個(gè)或者多個(gè)控制掩碼來影響量異常的發(fā)生結(jié)果。通常的量異??刂蒲诖a能夠在異??刂萍拇嫫?06中置位,或者量異常控制位或者量異??刂谱侄文軌虮痪幋a到單獨(dú)的十進(jìn)制浮點(diǎn)機(jī)器語言指令中。在將量異??刂莆痪幋a到單獨(dú)指令中的情形下,一個(gè)實(shí)施例讀取被編碼到機(jī)器語言指令中的該量異常控制位或掩碼并且在機(jī)器語言指令的執(zhí)行的持續(xù)時(shí)間中使用該值。在220確定是否要置位量異常掩碼,處理器在230將十進(jìn)制浮點(diǎn)運(yùn)算的結(jié)果存儲(chǔ)到結(jié)果或者目的地位置120,諸如浮點(diǎn)寄存器108的結(jié)果寄存器120。通過向程序控制器 124的輸出來指示量異常,造成在232將程序執(zhí)行捕獲到程序中斷句柄。
如果在220確定不置位量異常掩碼,則量異常不造成對(duì)程序執(zhí)行的捕獲,而是記錄(note)量異常用于稍后的處理。在量異常掩碼被置位的情形下,一個(gè)實(shí)施例的處理在 222將結(jié)果存儲(chǔ)到結(jié)果或者目的地位置120,諸如浮點(diǎn)寄存器108的結(jié)果寄存器120。通過置位量異常標(biāo)志122來指示量異常,經(jīng)由粘性標(biāo)志以指示量異常確實(shí)發(fā)生。如果在210執(zhí)行的十進(jìn)制浮點(diǎn)運(yùn)算產(chǎn)生保持優(yōu)選量的結(jié)果,則在214存儲(chǔ)該結(jié)果。 在一個(gè)實(shí)施例中,在浮點(diǎn)寄存器108的結(jié)果或者目的地位置120存儲(chǔ)該結(jié)果。要注意,如果十進(jìn)制浮點(diǎn)運(yùn)算的結(jié)果保持優(yōu)選量,則不影響量異常標(biāo)志122的值或狀態(tài)。通過使得量異常標(biāo)志122的狀態(tài)不受影響,在量異常標(biāo)志中保持在先前執(zhí)行的十進(jìn)制浮點(diǎn)指令中發(fā)生的量異常的發(fā)生指示,并且隨后處理能夠檢查量異常標(biāo)志122以確定由指令序列產(chǎn)生的結(jié)果是否可能已經(jīng)受到在該指令序列的執(zhí)行期間發(fā)生的量異常的影響。在214存儲(chǔ)該結(jié)果之后,或者在2M置位量異常標(biāo)志之后,處理在240確定是否還存在要執(zhí)行的更多指令。本發(fā)明的一個(gè)實(shí)施例允許利用未置位的量異常掩碼來執(zhí)行要定義的指令序列,使得在該序列的任何指令期間發(fā)生的量異常將造成粘性量異常標(biāo)志122被置位并且允許繼續(xù)指令序列的執(zhí)行。然后檢查粘性量異常標(biāo)志122,如下所述,以確定在指令序列期間是否發(fā)生量異常。如果在這樣的指令序列的結(jié)束時(shí),粘性量異常標(biāo)志122被確定為處于置位狀態(tài),則變更程序執(zhí)行以響應(yīng)于量改變的發(fā)生執(zhí)行特殊處理來尋址(address) 量異常的發(fā)生。如果存在更多的指令,則在242確定下一指令是否是十進(jìn)制浮點(diǎn)指令。如果下一指令是十進(jìn)制浮點(diǎn)指令,則處理返回到202接收十進(jìn)制浮點(diǎn)指令。如果下一指令不是十進(jìn)制浮點(diǎn)指令,則處理返回到240確定是否存在要執(zhí)行的更多的指令。當(dāng)不再剩余要執(zhí)行的更多的指令時(shí),一個(gè)實(shí)施例的處理繼續(xù)在244確定是否已經(jīng)置位了量異常標(biāo)志122。如上所述,如果量異常掩碼還未被置位并且在程序指令序列的執(zhí)行期間發(fā)生了量異常,則該處理置位量異常標(biāo)志。在量異常標(biāo)志已經(jīng)被置位的情形下,該處理在246執(zhí)行適應(yīng)先前檢測(cè)的量異常事件的處理。然后,該處理結(jié)束。信息處理系統(tǒng)如本領(lǐng)域技術(shù)人員將理解的,本發(fā)明的各方面可以實(shí)施為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。相應(yīng)地,本發(fā)明的各方面可以采取以下形式整個(gè)是硬件實(shí)施方式、整個(gè)是軟件實(shí)施方式(包括固件、駐留軟件,微代碼等)或者組合軟件和通常在此都可以被稱為“電路”、 “模塊”或“系統(tǒng)”的硬件各方面的實(shí)施方式。此外,本發(fā)明的各方面可以采取在一個(gè)或多個(gè)其上實(shí)施了計(jì)算機(jī)可讀程序代碼的計(jì)算機(jī)可讀介質(zhì)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。可以利用一個(gè)或者多個(gè)計(jì)算機(jī)可讀介質(zhì)的任何組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是例如,但不限于電子的、磁的、光學(xué)的、電磁的、紅外的,或者半導(dǎo)體系統(tǒng)、裝置,或設(shè)備,或者前述的任何合適的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的示例(非窮盡性的列表)將包括以下具有一個(gè)或多個(gè)線路的電連接、便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦除可編程只讀存儲(chǔ)器 (EPR0M或者閃存存儲(chǔ)器)、光纖、便攜式致密盤只讀存儲(chǔ)器(CD-ROM)、光學(xué)存儲(chǔ)設(shè)備、磁存儲(chǔ)設(shè)備,或者前述的任何合適的組合。在該文檔的背景中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是能夠包含或存儲(chǔ)用于供指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用的或者與指令執(zhí)行系統(tǒng)、裝置或設(shè)備連接的程序的任何有形的介質(zhì)。
可以以一個(gè)或多個(gè)編程語言的任何組合來書寫用于執(zhí)行本發(fā)明的各方面的操作的計(jì)算機(jī)程序代碼,包括諸如Java、Smalltalk, C++等之類的面向?qū)ο缶幊陶Z言或者諸如 “C”編程語言之類的傳統(tǒng)的過程編程語言或者類似的編程語言。程序代碼可以完全在用戶計(jì)算機(jī)上、部分地在用戶計(jì)算機(jī)上、作為單獨(dú)的軟件包部分地在用戶計(jì)算機(jī)上以及部分地在遠(yuǎn)程計(jì)算機(jī)上或者完全地在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后者情境下,可以通過包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)的任何類型的網(wǎng)絡(luò)將遠(yuǎn)程計(jì)算機(jī)連接到用戶計(jì)算機(jī),或者可以對(duì)外部計(jì)算機(jī)進(jìn)行該連接(例如,使用因特網(wǎng)服務(wù)提供商的因特網(wǎng))。本發(fā)明的各方面參照根據(jù)本發(fā)明的實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖示和/或框圖在以下進(jìn)行描述。將理解流程圖示和/或框圖的每個(gè)塊、以及流程圖示和/或框圖中的塊的組合可以由計(jì)算機(jī)程序指令來實(shí)現(xiàn)??梢詫⑦@些計(jì)算機(jī)程序指令提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)、或者其它可編程數(shù)據(jù)處理裝置的處理器來諸如經(jīng)由計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器來執(zhí)行的指令之類的機(jī)器創(chuàng)建手段用于實(shí)現(xiàn)在流程圖和/或框圖的一個(gè)塊或多個(gè)塊中指定的功能/動(dòng)作。還可以將這些計(jì)算機(jī)程序指令存儲(chǔ)在可以指導(dǎo)計(jì)算機(jī)、其它可編程數(shù)據(jù)存儲(chǔ)裝置,或者其它裝置的計(jì)算機(jī)可讀介質(zhì)中以便以特定的方式起作用,使得存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令產(chǎn)生包括實(shí)現(xiàn)流程圖和/或框圖的一個(gè)塊或多個(gè)塊中指定的功能/動(dòng)作的指 白勺一#/^( (mgmufgicture) ο計(jì)算機(jī)程序指令還可以被加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置,或者其它設(shè)備上以促使在計(jì)算機(jī)、其它可編程裝置,或者其它設(shè)備上執(zhí)行一系列操作步驟以便產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理使得在計(jì)算機(jī)或者其它可編程裝置上執(zhí)行的指令提供用于實(shí)現(xiàn)流程圖和/ 或框圖的一個(gè)塊或多個(gè)塊中指定的功能/動(dòng)作的處理?,F(xiàn)在參照?qǐng)D3,圖3是圖示可以連同上面關(guān)于圖1討論的處理器100 —起利用的信息處理系統(tǒng)300的框圖。信息處理系統(tǒng)300基于適于實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的適當(dāng)配置的處理系統(tǒng)。類似地,通過本發(fā)明的實(shí)施例可以將任何適當(dāng)配置的處理系統(tǒng)用于信息處理系統(tǒng)300。信息處理系統(tǒng)300包括計(jì)算機(jī)302。計(jì)算機(jī)302具有(多個(gè))處理器304,所述處理器304連接到高速緩存存儲(chǔ)器306、存儲(chǔ)器322、大容量存儲(chǔ)接口 308,以及網(wǎng)絡(luò)適配器硬件310。系統(tǒng)總線312將這些系統(tǒng)組件互聯(lián)。大容量存儲(chǔ)接口 308用于將諸如數(shù)據(jù)存儲(chǔ)設(shè)備314之類的大容量存儲(chǔ)設(shè)備連接到信息處理系統(tǒng)300。數(shù)據(jù)存儲(chǔ)設(shè)備的一個(gè)具體類型是諸如CD/DVD驅(qū)動(dòng)器之類的光學(xué)驅(qū)動(dòng)器,光學(xué)驅(qū)動(dòng)器可以用于將數(shù)據(jù)存儲(chǔ)到計(jì)算機(jī)可讀介質(zhì)或存儲(chǔ)產(chǎn)品(諸如(但不限于)CD/ DVD 316)中或者從計(jì)算機(jī)可讀介質(zhì)或存儲(chǔ)產(chǎn)品(諸如(但不限于)CD/DVD 316)讀取數(shù)據(jù)。 數(shù)據(jù)存儲(chǔ)設(shè)備的另一類型是被配置為支持例如NTFS類型文件系統(tǒng)操作的數(shù)據(jù)存儲(chǔ)設(shè)備。在存儲(chǔ)器322中包括的操作系統(tǒng)(未示出)是諸如Linux、UNIX、WindowsXP,以及 Windows Server 2003操作系統(tǒng)之類的合適的多任務(wù)操作系統(tǒng)。本發(fā)明的實(shí)施例能夠使用任何其它合適的操作系統(tǒng)。本發(fā)明的一些實(shí)施例利用諸如面向?qū)ο罂蚣軝C(jī)制之類的架構(gòu), 其允許操作系統(tǒng)(未示出)的組件的指令在位于信息處理系統(tǒng)300內(nèi)的任何處理器上執(zhí)行。一個(gè)實(shí)施例中的網(wǎng)絡(luò)適配器硬件310向一個(gè)或多個(gè)網(wǎng)絡(luò)320提供網(wǎng)絡(luò)通信接口。本發(fā)明的實(shí)施例能夠適配于利用任何數(shù)據(jù)通信連接(包括目前的模擬技術(shù)和/或數(shù)字技術(shù)或者經(jīng)由將來的聯(lián)網(wǎng)機(jī)制)來工作。圖中的流程圖和框示了根據(jù)本發(fā)明的各個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能的實(shí)現(xiàn)方式的架構(gòu)、功能和操作。關(guān)于這一點(diǎn),流程圖和/或框圖中的每個(gè)塊可以表示包括用于實(shí)現(xiàn)指定的(多個(gè))邏輯功能的一個(gè)或者多個(gè)可執(zhí)行指令的代碼模塊、代碼分段或者代碼部分。應(yīng)注意到,在一些可替換實(shí)現(xiàn)方式中,塊中標(biāo)注的功能可能不以圖中標(biāo)注的順序來進(jìn)行。例如,依賴于所涉及的功能,連續(xù)示出的兩個(gè)塊事實(shí)上可以實(shí)質(zhì)上同時(shí)執(zhí)行,或者塊有時(shí)候可以以相反的順序執(zhí)行。還將注意框圖和/或流程示的每個(gè)塊、以及框圖和/或流程示中的塊的組合可以由執(zhí)行特殊功能或動(dòng)作的基于專用硬件的系統(tǒng)、或者專用硬件和計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。非限制性示例盡管已經(jīng)公開了本發(fā)明的具體實(shí)施例,但是本領(lǐng)域技術(shù)人員將理解可以對(duì)具體實(shí)施例做出改變而不脫離本發(fā)明的精神和范圍。因此,本發(fā)明的范圍不限制為具體實(shí)施例,而是所附的權(quán)利要求書旨在覆蓋本發(fā)明的范圍內(nèi)的任何以及所有的這樣的應(yīng)用、修改和實(shí)施例。
權(quán)利要求
1.一種用于檢測(cè)處理異常的方法,所述方法包括 利用處理器執(zhí)行以下步驟接收至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù);對(duì)該至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算以產(chǎn)生十進(jìn)制浮點(diǎn)結(jié)果; 響應(yīng)于該執(zhí)行,確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,該優(yōu)選量指示由該十進(jìn)制浮點(diǎn)結(jié)果的有效數(shù)字的最低有效數(shù)位表示的定義值;以及響應(yīng)于確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,提供指示量異常的輸出,該量異常響應(yīng)于該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量而發(fā)生。
2.根據(jù)權(quán)利要求1所述的方法,還包括基于該至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)確定所述優(yōu)選量。
3.根據(jù)權(quán)利要求1所述的方法,提供輸出的步驟包括響應(yīng)于確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量而置位量異常標(biāo)志。
4.根據(jù)權(quán)利要求1所述的方法,提供輸出的步驟包括觸發(fā)軟件執(zhí)行捕獲。
5.根據(jù)權(quán)利要求1所述的方法,還包括 在置位狀態(tài)和未置位狀態(tài)之一中保持量異常標(biāo)志; 在置位狀態(tài)和未置位狀態(tài)之一中保持量異常掩碼;運(yùn)行程序指令序列,該程序指令序列包括用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令,該執(zhí)行響應(yīng)于用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令的運(yùn)行;將該十進(jìn)制浮點(diǎn)結(jié)果存儲(chǔ)到目的地存儲(chǔ)位置;響應(yīng)于量異常掩碼處于未置位狀態(tài)并且確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,繼續(xù)運(yùn)行該指令序列;以及響應(yīng)于量異常掩碼處于置位狀態(tài)并且確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,捕獲程序指令序列的運(yùn)行,所述捕獲包括運(yùn)行程序中斷句柄,以及提供輸出的步驟包括將量異常標(biāo)志置位為置位狀態(tài)。
6.根據(jù)權(quán)利要求5所述的方法,還包括在運(yùn)行程序指令序列之后,確定量異常標(biāo)志處于置位狀態(tài);以及響應(yīng)于確定量異常標(biāo)志處于置位狀態(tài)并且在運(yùn)行程序指令序列之后,更改程序運(yùn)行以尋址量異常的發(fā)生。
7.根據(jù)權(quán)利要求5所述的方法,保持量異常掩碼的步驟還包括讀取被編碼到與用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令對(duì)應(yīng)的機(jī)器語言指令中的量異常掩碼值,保持量異常掩碼的步驟還包括在用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令的運(yùn)行持續(xù)時(shí)間中使用量異常掩碼值。
8.根據(jù)權(quán)利要求7所述的方法,其中量異常掩碼值被編碼到機(jī)器語言指令的異常控制字段,該異??刂谱侄芜€對(duì)其它浮點(diǎn)異常的異常掩碼進(jìn)行編碼。
9.一種用于檢測(cè)處理異常的系統(tǒng),該系統(tǒng)包括 存儲(chǔ)器;處理器,與該存儲(chǔ)器通信地耦接,其中該處理器包括 指令處理器接收至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù);以及對(duì)該至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算以產(chǎn)生十進(jìn)制浮點(diǎn)結(jié)果; 量異常檢測(cè)器,響應(yīng)于指令處理器執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算,該量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,該優(yōu)選量指示該十進(jìn)制浮點(diǎn)結(jié)果的有效數(shù)字的最低有效數(shù)位表示的定義值;以及量異常響應(yīng)單元,響應(yīng)于量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,該量異常響應(yīng)單元提供指示量異常的輸出,該量異常響應(yīng)于該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量而發(fā)生。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),指令處理器還基于該至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)確定優(yōu)選量。
11.根據(jù)權(quán)利要求9所述的系統(tǒng),響應(yīng)于確定量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,量異常響應(yīng)單元置位量異常標(biāo)志。
12.根據(jù)權(quán)利要求9所述的系統(tǒng),量異常響應(yīng)單元提供包括觸發(fā)軟件運(yùn)行捕獲的輸出。
13.根據(jù)權(quán)利要求9所述的系統(tǒng), 指令處理器還在置位狀態(tài)和未置位狀態(tài)之一中保持量異常標(biāo)志; 在置位狀態(tài)和未置位狀態(tài)之一中保持量異常掩碼; 運(yùn)行程序指令序列,該程序指令序列包括用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令; 響應(yīng)于運(yùn)行該十進(jìn)制浮點(diǎn)運(yùn)算的指令而執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算; 將十進(jìn)制浮點(diǎn)結(jié)果存儲(chǔ)到目的地存儲(chǔ)位置;響應(yīng)于量異常掩碼處于未置位狀態(tài)并且量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,繼續(xù)運(yùn)行該指令序列;以及響應(yīng)于量異常掩碼處于置位狀態(tài)并且量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,捕獲程序指令序列的運(yùn)行,量異常響應(yīng)單元通過促使指令處理器運(yùn)行程序中斷句柄而捕獲運(yùn)行;以及響應(yīng)于確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,量異常響應(yīng)單元還將量異常標(biāo)志置位為置位狀態(tài)。
14.根據(jù)權(quán)利要求13所述的系統(tǒng),指令處理器還在運(yùn)行程序指令序列之后,確定量異常標(biāo)志處于置位狀態(tài);以及響應(yīng)于確定量異常標(biāo)志處于置位狀態(tài)并且在運(yùn)行程序指令序列之后,更改程序運(yùn)行以尋址量異常的發(fā)生。
15.根據(jù)權(quán)利要求13所述的系統(tǒng),指令處理器還讀取被編碼到與用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令對(duì)應(yīng)的機(jī)器語言指令中的量異常掩碼值;以及在用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令運(yùn)行的持續(xù)時(shí)間中使用該量異常掩碼值。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其中量異常掩碼值被編碼到機(jī)器語言指令的異??刂谱侄?,該異常控制字段還對(duì)其它浮點(diǎn)異常的異常掩碼進(jìn)行編碼。
17.一種用于檢測(cè)處理異常的系統(tǒng),包括 利用處理器執(zhí)行以下步驟的部件用于接收至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)的部件;用于對(duì)該至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算以產(chǎn)生十進(jìn)制浮點(diǎn)結(jié)果的部件;用于響應(yīng)于該執(zhí)行,確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量的部件,該優(yōu)選量指示該十進(jìn)制浮點(diǎn)結(jié)果的有效數(shù)字的最低有效數(shù)位表示的定義值;以及用于響應(yīng)于確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,提供指示量異常的輸出的部件, 該量異常響應(yīng)于該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量而發(fā)生。
18.根據(jù)權(quán)利要求17所述的系統(tǒng),用于提供輸出的部件包括用于響應(yīng)于確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量而置位量異常標(biāo)志的部件。
19.根據(jù)權(quán)利要求17所述的系統(tǒng),還包括用于在置位狀態(tài)和未置位狀態(tài)之一中保持量異常標(biāo)志的部件; 用于在置位狀態(tài)和未置位狀態(tài)之一中保持量異常掩碼的部件; 用于運(yùn)行程序指令序列的部件,該程序指令序列包括用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令, 該執(zhí)行響應(yīng)于用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令的執(zhí)行;用于將十進(jìn)制浮點(diǎn)結(jié)果存儲(chǔ)到目的地存儲(chǔ)位置的部件;用于響應(yīng)于量異常掩碼處于未置位狀態(tài)并且確定十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量而繼續(xù)運(yùn)行該指令序列的部件;以及用于響應(yīng)于量異常掩碼處于置位狀態(tài)并且確定十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量而捕獲程序指令序列的運(yùn)行的部件,所述捕獲包括運(yùn)行程序中斷句柄,以及用于提供輸出的部件包括用于將量異常標(biāo)志置位為置位狀態(tài)的部件。
20.根據(jù)權(quán)利要求19所述的系統(tǒng),還包括用于在運(yùn)行程序指令序列之后,確定量異常標(biāo)志處于置位狀態(tài)的部件;以及用于響應(yīng)于確定量異常標(biāo)志處于置位狀態(tài)并且在運(yùn)行程序指令序列之后、更改程序運(yùn)行以尋址量異常的發(fā)生的部件。
21.根據(jù)權(quán)利要求19所述的方法,還包括用于讀取被編碼到與用于該十進(jìn)制浮點(diǎn)運(yùn)算的指令對(duì)應(yīng)的機(jī)器語言指令中的量異常掩碼值的部件,用于保持量異常掩碼的部件還包括用于在該十進(jìn)制浮點(diǎn)運(yùn)算的指令運(yùn)行的持續(xù)時(shí)間中使用量異常掩碼值的部件。
22.—種數(shù)據(jù)處理系統(tǒng),包括 存儲(chǔ)器;處理器,與該存儲(chǔ)器通信地耦接,其中該處理器包括量異常檢測(cè)器,響應(yīng)于十進(jìn)制浮點(diǎn)運(yùn)算,確定該十進(jìn)制浮點(diǎn)結(jié)果產(chǎn)生未能保持優(yōu)選量, 該優(yōu)選量指示該十進(jìn)制浮點(diǎn)結(jié)果的有效數(shù)字的最低有效數(shù)位表示的定義值;以及量異常響應(yīng)單元,響應(yīng)于量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,該量異常響應(yīng)單元提供指示量異常的輸出,該量異常響應(yīng)于該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量而發(fā)生。
23.根據(jù)權(quán)利要求22所述的系統(tǒng),量異常響應(yīng)單元提供包括觸發(fā)軟件執(zhí)行捕獲的輸出ο
24.根據(jù)權(quán)利要求22所述的系統(tǒng),還包括量異常標(biāo)志,可改變地被指派置位狀態(tài)和未置位狀態(tài); 量異常掩碼,可改變地被指派置位狀態(tài)和未置位狀態(tài),響應(yīng)于確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,量異常檢測(cè)器還向量異常標(biāo)志指派置位狀態(tài),以及量異常響應(yīng)單元響應(yīng)于量異常掩碼被指派了置位狀態(tài)并且量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,通過促使程序中斷句柄的運(yùn)行,促使程序運(yùn)行捕獲;以及響應(yīng)于量異常掩碼被指派了未置位狀態(tài)并且量異常檢測(cè)器確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,促使程序運(yùn)行繼續(xù)。
25.根據(jù)權(quán)利要求M所述的系統(tǒng),還包括指令處理器運(yùn)行程序指令序列,該程序指令序列包括產(chǎn)生十進(jìn)制浮點(diǎn)結(jié)果的十進(jìn)制浮點(diǎn)運(yùn)算的指令;在運(yùn)行程序指令序列之后,確定量異常標(biāo)志被指派了置位狀態(tài);以及響應(yīng)于確定量異常標(biāo)志被指派了置位狀態(tài)并且在運(yùn)行程序指令序列之后,更改程序運(yùn)行以尋址量異常的發(fā)生。
全文摘要
一種用于檢測(cè)十進(jìn)制浮點(diǎn)數(shù)據(jù)處理異常的系統(tǒng)和方法。處理器接收至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)并且對(duì)該至少一個(gè)十進(jìn)制浮點(diǎn)運(yùn)算數(shù)執(zhí)行十進(jìn)制浮點(diǎn)運(yùn)算以產(chǎn)生十進(jìn)制浮點(diǎn)結(jié)果。進(jìn)行關(guān)于該十進(jìn)制浮點(diǎn)結(jié)果是否未能保持優(yōu)選量的確定。該優(yōu)選量指示該十進(jìn)制浮點(diǎn)結(jié)果的有效數(shù)字的最低有效數(shù)位表示的值。響應(yīng)于確定該十進(jìn)制浮點(diǎn)結(jié)果未能保持優(yōu)選量,提供用于指示量異常發(fā)生的輸出。可以生成被立即捕獲或者稍后檢測(cè)的可掩碼的異常以便控制條件性的處理。
文檔編號(hào)G06F9/32GK102331921SQ201110141919
公開日2012年1月25日 申請(qǐng)日期2011年5月30日 優(yōu)先權(quán)日2010年5月28日
發(fā)明者埃里克.施瓦茲, 希爾維亞.M.米勒, 菲爾.C.耶, 邁克爾.F.考利肖 申請(qǐng)人:國際商業(yè)機(jī)器公司