相關(guān)申請的交叉引用
本申請涉及同時提交的標(biāo)題為“machineinstructionsforconvertingfromdecimalfloatingpointformattopackeddecimalformat(用于從十進(jìn)制浮點格式轉(zhuǎn)換為壓縮十進(jìn)制格式的機器指令)”的美國專利申請14/502082,此專利申請在此全部引入作為參考。
背景技術(shù):
本發(fā)明一般地涉及將數(shù)據(jù)從一種格式轉(zhuǎn)換為另一種格式,并且更具體地說,涉及通過執(zhí)行機器指令在壓縮十進(jìn)制格式與十進(jìn)制浮點格式之間轉(zhuǎn)換數(shù)據(jù)。
通常,用于處理以壓縮十進(jìn)制格式存儲在數(shù)據(jù)庫中的數(shù)字十進(jìn)制(即,基數(shù)10)數(shù)據(jù)的運算直接針對存儲裝置運行。這些運算被稱為存儲到存儲十進(jìn)制運算。存儲到存儲運算的性能受存儲接口的延遲的限制,因為依賴于來自上一個運算的結(jié)果的每個運算必須等待,直到結(jié)果被寫出到存儲器該運算才可以開始。隨著存儲延遲與處理器速度之間的差距繼續(xù)增加,這些運算的相對性能繼續(xù)降低。
技術(shù)實現(xiàn)要素:
本發(fā)明的各個方面包括一種用于執(zhí)行機器指令的計算機程序產(chǎn)品、方法、以及系統(tǒng)。根據(jù)本發(fā)明的一個方面,提供一種通過執(zhí)行機器指令將數(shù)據(jù)從一種格式轉(zhuǎn)換為另一種格式的方法。所述方法從在通信上耦合到處理器的存儲器讀取壓縮十進(jìn)制格式的數(shù)據(jù)。所述方法將所述壓縮十進(jìn)制格式的數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制浮點格式。所述方法將轉(zhuǎn)換成所述十進(jìn)制浮點格式的數(shù)據(jù)寫入所述處理器的一個或多個目標(biāo)寄存器。
根據(jù)本發(fā)明的另一個方面,提供一種用于將數(shù)據(jù)從一種格式轉(zhuǎn)換為另一種格式的計算機程序產(chǎn)品。所述計算機程序產(chǎn)品包括計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)具有隨其包含的機器指令??捎商幚砥髯x取的所述機器指令導(dǎo)致處理電路執(zhí)行一種方法。所述方法從在通信上耦合到所述處理器的存儲器讀取壓縮十進(jìn)制格式的數(shù)據(jù)。所述方法將所述壓縮十進(jìn)制格式的數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制浮點格式。所述方法將轉(zhuǎn)換成所述十進(jìn)制浮點格式的數(shù)據(jù)寫入所述處理器的一個或多個目標(biāo)寄存器。
根據(jù)本發(fā)明的再一方面,提供一種用于將一種格式的數(shù)據(jù)轉(zhuǎn)換為另一種格式的計算機系統(tǒng)。所述計算機系統(tǒng)包括存儲器,其具有壓縮十進(jìn)制格式的數(shù)據(jù)。所述計算機系統(tǒng)進(jìn)一步包括處理器,其被配置為執(zhí)行機器指令以便執(zhí)行一種方法。所述方法從在通信上耦合到所述處理器的所述存儲器讀取壓縮十進(jìn)制格式的數(shù)據(jù)。所述方法將所述壓縮十進(jìn)制格式的數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制浮點格式。所述方法將轉(zhuǎn)換成所述十進(jìn)制浮點格式的數(shù)據(jù)寫入所述處理器的一個或多個目標(biāo)寄存器。
附圖說明
現(xiàn)在將僅通過實例的方式參考附圖描述本發(fā)明的實施例,這些附圖是:
圖1示出根據(jù)本發(fā)明的一個實施例的計算機系統(tǒng)的框圖;
圖2示出根據(jù)本發(fā)明的一個實施例的機器指令的格式;
圖3示出根據(jù)本發(fā)明的一個實施例的用于轉(zhuǎn)換數(shù)據(jù)的過程流程;
圖4示出根據(jù)本發(fā)明的一個實施例的機器指令的格式;以及
圖5示出根據(jù)本發(fā)明的一個實施例的用于轉(zhuǎn)換數(shù)據(jù)的過程流程。
具體實施方式
用于浮點數(shù)的ieee標(biāo)準(zhǔn)(ieee754-2008)包括用于十進(jìn)制浮點運算和數(shù)字格式的標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)已被常規(guī)計算系統(tǒng)支持。但是,在這些常規(guī)計算系統(tǒng)中,浮點運算不能非常好地與壓縮十進(jìn)制格式的數(shù)據(jù)交互。這是因為用于處理壓縮十進(jìn)制格式的數(shù)據(jù)的軟件例程必須被手動開發(fā)并且因此不會可靠地用于這些系統(tǒng),并且還因為沒有將數(shù)據(jù)從壓縮十進(jìn)制格式轉(zhuǎn)換為十進(jìn)制浮點格式的有效方式。
本發(fā)明的實施例有效地在壓縮十進(jìn)制格式與十進(jìn)制浮點格式之間轉(zhuǎn)換數(shù)據(jù),而沒有與存儲到存儲運算關(guān)聯(lián)的存儲開銷。具體地說,本發(fā)明的實施例提供用于將數(shù)據(jù)從壓縮十進(jìn)制格式轉(zhuǎn)換為十進(jìn)制浮點格式的兩個示例性機器指令。這兩個示例性指令在此被稱為長轉(zhuǎn)換自壓縮指令(cdpt,longconvertfrompackedinstruction)和擴展轉(zhuǎn)換自壓縮指令(cxpt,extendedconvertfrompackedinstruction)。cdpt用于從存儲器讀取壓縮十進(jìn)制格式的數(shù)據(jù)(例如,多達(dá)16位),將該數(shù)據(jù)轉(zhuǎn)換成具有零指數(shù)的適當(dāng)十進(jìn)制浮點格式,并且將十進(jìn)制浮點格式的數(shù)據(jù)寫入目標(biāo)浮點寄存器。cxpt用于從存儲器讀取壓縮十進(jìn)制格式的數(shù)據(jù)(例如,多達(dá)34位),將該數(shù)據(jù)轉(zhuǎn)換成具有零指數(shù)的適當(dāng)十進(jìn)制浮點格式,并且將十進(jìn)制浮點格式的數(shù)據(jù)寫入目標(biāo)浮點寄存器對。
本發(fā)明的實施例進(jìn)一步提供用于將數(shù)據(jù)從十進(jìn)制浮點格式轉(zhuǎn)換為壓縮十進(jìn)制格式的指令的兩個其它示例性機器指令。這兩個示例性指令在此被稱為長轉(zhuǎn)換為壓縮指令(cpdt,longconverttopackedinstruction)和擴展轉(zhuǎn)換為壓縮指令(cpxt,extendedconverttopackedinstruction)。cpdt用于從指定浮點寄存器讀取十進(jìn)制浮點格式的數(shù)據(jù),將指定浮點寄存器中的數(shù)據(jù)的尾數(shù)轉(zhuǎn)換為壓縮十進(jìn)制格式,并且將數(shù)據(jù)寫入目標(biāo)存儲位置。cpxt用于將浮點寄存器對中的擴展精度十進(jìn)制浮點數(shù)據(jù)轉(zhuǎn)換為壓縮十進(jìn)制格式,并且將該數(shù)據(jù)存儲到目標(biāo)存儲位置。
如本領(lǐng)域中已知的,在壓縮十進(jìn)制格式中,數(shù)字以一系列8位字節(jié)來表示,其中每個字節(jié)的四位被分配給單個十進(jìn)制數(shù)(digit),從而允許每個字節(jié)表示兩個十進(jìn)制數(shù)。4位模式中的一個被分配給符號(正或負(fù))。壓縮十進(jìn)制數(shù)可以是任何指定長度,直到適用的語言所施加的限制,且認(rèn)為在某個固定位置具有隱式小數(shù)點。
如本領(lǐng)域中已知的,十進(jìn)制浮點格式旨在用于與壓縮十進(jìn)制格式不同的用途。使用不同的更緊湊的表示在十進(jìn)制浮點格式中編碼十進(jìn)制數(shù)。十進(jìn)制浮點數(shù)據(jù)可以以三種數(shù)據(jù)格式中的任一種表示:短、長或擴展。三種數(shù)據(jù)格式中的每一種的內(nèi)容表示編碼信息。分配特殊代碼以便將有限數(shù)與nan(非數(shù)字)和無窮大區(qū)分開。對于有限數(shù),在格式中使用偏置指數(shù)。對于三種格式中的每一種,針對右單位視圖指數(shù)(right-units-viewexponents)使用不同于左單位視圖指數(shù)(left-units-viewexponents)的偏差。偏置指數(shù)是無符號數(shù)。使用組合字段中的有效位(significand)的最左側(cè)位來編碼偏置指數(shù)。在編碼后的尾隨有效位字段中編碼有效位的剩余位。
當(dāng)將十進(jìn)制浮點短格式的操作數(shù)(即,數(shù)據(jù))加載到浮點寄存器中時,操作數(shù)占用寄存器的左半部分,并且右半部分保持不變。當(dāng)將十進(jìn)制浮點雙精度格式(即,十進(jìn)制浮點長格式)的操作數(shù)加載到浮點寄存器中時,操作數(shù)占用整個寄存器。十進(jìn)制浮點擴展格式的操作數(shù)占用一個浮點寄存器對。最左側(cè)64位占用該對的整個較低編號的寄存器,并且最右側(cè)64位占用整個較高編號的寄存器。符號位在每種格式的位0中,并且例如對于正號為0而對于負(fù)號為1。
對于有限數(shù),組合字段包括偏置指數(shù)和有效位的最左側(cè)數(shù)位;對于nan和無窮大,組合字段包括用于標(biāo)識nan和無窮大的代碼。當(dāng)格式的位1-5在00000-11101的范圍內(nèi)時,操作數(shù)是有限數(shù)。偏置指數(shù)的兩個最左側(cè)位和有效位的最左側(cè)數(shù)位以格式的位1-5來編碼。位6到組合字段的末尾包括偏置指數(shù)的其余部分。當(dāng)格式字段的位1-5為11110時,操作數(shù)為無窮大。格式的位5右側(cè)的組合字段中的所有位構(gòu)成無窮大的保留字段。在源無窮大中接受保留字段中的非零值;在結(jié)果無窮大中將保留字段設(shè)置為0。當(dāng)格式的位1-5為11111時,操作數(shù)為nan,并且位6(被稱為snan位)進(jìn)一步將qnan(安靜nan)與snan(信令nan)區(qū)分開。如果位6為0,則它為qnan;否則為snan。格式的位6右側(cè)的組合字段中的所有位構(gòu)成nan的保留字段。在源nan中接受保留字段中的非零值;在結(jié)果nan中將保留字段設(shè)置為0。
圖1示出根據(jù)本發(fā)明的某些實施例的用于有效地在壓縮十進(jìn)制格式與十進(jìn)制浮點格式之間轉(zhuǎn)換數(shù)據(jù)的系統(tǒng)100。具體地說,該圖示出系統(tǒng)100包括處理器105、存儲器110和輸入/輸出(i/o)接口115,此外還包括為使例示和描述簡單而未被示出的其它組件(例如,網(wǎng)絡(luò)接口)。應(yīng)該理解,那些其它組件對于理解本發(fā)明的各種實施例不是必需的。處理器105、存儲器110和i/o接口115經(jīng)由一個或多個總線120彼此耦接。
如本領(lǐng)域中已知的,處理器或處理器系列(例如8086和x86系列或ibmsystemz服務(wù)器系列的處理器)具有它自己的機器指令集。例如,在ibm出版物z/architectureprinciplesofoperation(z/架構(gòu)操作原理)(sa22-7832-09,第10版,2012年9月,其全部內(nèi)容在此引入作為參考)中給出了ibmsystemz服務(wù)器系列的指令集(被稱為z/architecture指令集)。機器指令是通過設(shè)計對應(yīng)于到機器的不同命令的位模式。在大多數(shù)情況下,指令集特定于使用相同架構(gòu)的一類處理器。機器指令集可以具有相同長度的所有指令,或者該集合可以具有可變長度指令。大多數(shù)指令具有一個或多個操作碼字段,這些字段指定基本指令類型(例如算術(shù)、邏輯、跳轉(zhuǎn)等)和實際運算(例如加法或比較);以及其它字段,其它字段可以給出操作數(shù)(多個)的類型、尋址模式(多個)、尋址偏移(多個)或索引,或者實際值本身。即,每個機器指令用于針對寄存器或存儲器中的數(shù)據(jù)單元執(zhí)行非常特定的任務(wù),例如加載、跳轉(zhuǎn)或算術(shù)邏輯單元(alu)運算。
處理器106是被配置為執(zhí)行包括cdpt、cxpt、cpdt和cpxt(圖1中未示出)的機器指令的處理器。即,當(dāng)執(zhí)行cdpt或cxpt時,處理器106從存儲器110讀取壓縮十進(jìn)制格式的數(shù)據(jù),將該數(shù)據(jù)轉(zhuǎn)換成適當(dāng)?shù)氖M(jìn)制浮點格式,并且將十進(jìn)制浮點格式的數(shù)據(jù)寫入寄存器125的目標(biāo)浮點寄存器或目標(biāo)浮點寄存器對。當(dāng)執(zhí)行cpdt和cpxt時,處理器106從寄存器125的源浮點寄存器或浮點寄存器對讀取十進(jìn)制浮點格式的數(shù)據(jù),將十進(jìn)制浮點格式的數(shù)據(jù)轉(zhuǎn)換為壓縮十進(jìn)制格式,并且將數(shù)據(jù)存儲到存儲器110中的目標(biāo)存儲位置。處理器106的寄存器125包括一個或多個通用寄存器和/或一個或多個專用寄存器(包括浮點寄存器)。
i/o接口115支持i/o設(shè)備到系統(tǒng)100的附接??梢酝ㄟ^i/o接口115附接到系統(tǒng)100的i/o設(shè)備包括鍵盤和顯示器以及盤、直接存取存儲設(shè)備、光盤和其它存儲介質(zhì)。在某些實施例中,處理器106經(jīng)由i/o接口115在系統(tǒng)100外部的存儲器(未示出)中存儲和取回壓縮十進(jìn)制格式的數(shù)據(jù)。
圖2示出cpdt和cpxt的一種實例格式200。格式200包括操作碼字段205、長度字段(l2)210、基址寄存器字段(b2)215、位移字段(d2)220、寄存器字段(r1)225、掩碼字段(m3)230以及操作碼字段235。操作碼字段235是操作碼字段205的擴展以便保存較長操作碼(例如,2字節(jié)操作碼)。在格式200下面示出的數(shù)字是位索引。如圖所示,某些實施例的格式200具有48位的長度。
操作碼字段205保存指定要執(zhí)行的運算的操作碼(例如,十六進(jìn)制值)。預(yù)定義操作碼(例如,edaehex)指定由格式200表示的機器指令是cpdt。另一個預(yù)定義操作碼(例如,edafhex)指定機器指令是cpxt。當(dāng)由處理器執(zhí)行cpdt或cpxt時,處理器將壓縮十進(jìn)制格式的第二操作數(shù)轉(zhuǎn)換為十進(jìn)制浮點格式。該轉(zhuǎn)換的結(jié)果被放置在第一操作數(shù)位置(即寄存器或寄存器對)處。
長度字段210指定第二操作數(shù)(即,壓縮十進(jìn)制格式的數(shù)據(jù))的長度(例如,以字節(jié)為單位)。在某些實施例中,長度字段210包括用于cpdt的0與8之間(即,長度為1到9字節(jié))的長度代碼,以及用于cpxt的0到17(即,長度為1到18字節(jié))的長度代碼。即,長度字段210指示的字節(jié)數(shù)對應(yīng)于壓縮十進(jìn)制格式的數(shù)據(jù)具有的位數(shù)。
基址寄存器字段215指定通用寄存器。由基址寄存器字段215指定的通用寄存器的內(nèi)容被與位移字段220的內(nèi)容相加。位移字段220包括這樣的內(nèi)容:這些內(nèi)容被與由基址寄存器字段215指定的通用寄存器的內(nèi)容相加以形成第二操作數(shù)地址。
寄存器字段225指定浮點寄存器。所指定寄存器的內(nèi)容是第一操作數(shù)(即,轉(zhuǎn)換為十進(jìn)制浮點格式的數(shù)據(jù))。包括第一操作數(shù)的寄存器被稱為第一操作數(shù)位置。
掩碼字段230具有四個位(例如,位0到位3)。在某些實施例中,掩碼字段230包括符號控制(例如,位),在一個實例中符號控制是掩碼字段230的位0。當(dāng)符號控制關(guān)閉時(例如,當(dāng)將符號控制位設(shè)置為0時),第二操作數(shù)沒有符號位,并且十進(jìn)制浮點第一操作數(shù)結(jié)果的符號位被設(shè)置為指示正號的值(例如,0)。當(dāng)符號控制開啟時(例如,當(dāng)將符號控制位設(shè)置為1時),第二操作數(shù)包含符號位-第二操作數(shù)的最右側(cè)字節(jié)的最右側(cè)四個位位置是符號。當(dāng)?shù)诙僮鲾?shù)的符號位指示正值時,將十進(jìn)制浮點第一操作數(shù)結(jié)果的符號位設(shè)置為指示正號的值(例如,0)。當(dāng)?shù)诙僮鲾?shù)的符號字段指示負(fù)值時,將十進(jìn)制浮點第一操作數(shù)結(jié)果的符號位設(shè)置為指示負(fù)號的值(例如,1)。
在某些實施例中,掩碼字段230包括忽略符號位控制(例如,位),在一個實例中忽略符號位控制是掩碼字段230的位3。僅當(dāng)符號控制開啟時才使用該忽略符號位控制。當(dāng)符號控制關(guān)閉時,忽略符號位控制被忽略。當(dāng)忽略符號位控制關(guān)閉時(例如,當(dāng)將忽略符號位設(shè)置為0時),不采取動作。當(dāng)忽略符號位控制開啟時(例如,當(dāng)將忽略符號位設(shè)置為1時),忽略第二操作數(shù)的符號位。即,不檢查第二操作數(shù)的符號位的無效性,并且將十進(jìn)制浮點第一操作數(shù)結(jié)果的符號位設(shè)置為指示正號的0。
當(dāng)在第二操作數(shù)中檢測到無效位或符號代碼時,或者當(dāng)未使用的位不為0時,識別到異常。如果符號控制和忽略符號位控制為1,則不針對符號位執(zhí)行符號代碼檢查。
當(dāng)檢測到異常時,不執(zhí)行由操作碼字段205指定的機器指令。對于cdpt,當(dāng)長度字段210大于8時,處理器停止執(zhí)行該機器指令并且返回異常。對于cxpt,當(dāng)長度字段210大于17時或者當(dāng)寄存器字段225指定無效的浮點寄存器對時,處理器停止執(zhí)行該機器指令并且返回異常。
圖3示出根據(jù)本發(fā)明的某些實施例的用于執(zhí)行機器指令的過程流程。在某些實施例中,系統(tǒng)100(具體地說圖1的處理器105)執(zhí)行圖3中所示的過程流程。
在方框310,處理器105驗證所接收的機器指令以便判定是否返回異常并停止執(zhí)行該機器指令。具體地說,處理器105判定所接收的機器指令是否滿足異常的任何條件。例如,當(dāng)操作碼字段205指示所接收的機器指令是cdpt時,處理器105判定長度字段210是否大于8。如果長度字段210大于8,則處理器105確定滿足異常條件。此外,當(dāng)操作碼字段205指示所接收的機器指令是cpxt時,處理器105判定長度字段210是否大于17。如果長度字段210大于17,則處理器105確定滿足異常條件。此外,當(dāng)操作碼字段205指示所接收的機器指令是cpxt時,處理器105還判定寄存器字段225是否指定了無效的浮點寄存器對。如果寄存器字段225指定了無效的浮點寄存器對,則處理器105確定滿足異常條件。
當(dāng)處理器105在方框310確定滿足異常條件時,處理器105繼續(xù)到方框320,這將在下面進(jìn)一步描述。當(dāng)處理器105在方框310確定不滿足異常條件時,處理器105在方框380停止執(zhí)行該機器指令并且返回異常。即,處理器105不執(zhí)行由所接收的機器指令的操作碼字段205指定的運算。
在方框320,處理器105從存儲器110讀取如格式200的字段所指定的壓縮十進(jìn)制格式的數(shù)據(jù)。在方框330,處理器105檢查壓縮十進(jìn)制格式的十進(jìn)制數(shù)的有效性。如果十進(jìn)制數(shù)無效,則處理器105繼續(xù)到方框380以便停止執(zhí)行該機器指令并且返回異常。在方框340,處理器105檢查壓縮十進(jìn)制格式的符號的有效性。如果符號無效,則處理器105繼續(xù)到方框390以便停止執(zhí)行該機器指令并且返回異常。
如果十進(jìn)制數(shù)和壓縮十進(jìn)制格式的符號有效,則處理器105繼續(xù)到方框350以便將數(shù)據(jù)中的數(shù)字轉(zhuǎn)換成十進(jìn)制浮點格式。具體地說,當(dāng)機器指令是cpdt時,處理器105將數(shù)字轉(zhuǎn)換成十進(jìn)制浮點雙精度格式(即,十進(jìn)制浮點長格式)。當(dāng)機器指令是cpxt時,處理器105將數(shù)字轉(zhuǎn)換成十進(jìn)制浮點擴展格式。
在方框360,處理器105設(shè)置用于轉(zhuǎn)換后的數(shù)字的符號。具體地說,在某些實施例中,處理器105檢查格式200的符號控制位。當(dāng)符號控制關(guān)閉時,壓縮十進(jìn)制格式的數(shù)據(jù)沒有符號字段,并且處理器105將十進(jìn)制浮點數(shù)據(jù)的符號位設(shè)置為指示正號的值(例如,0)。當(dāng)符號控制開啟時,壓縮十進(jìn)制格式的數(shù)據(jù)包含符號位。當(dāng)該符號位指示正值時,處理器105將十進(jìn)制浮點數(shù)據(jù)中的數(shù)據(jù)的符號位設(shè)置為指示正號的值(例如,0)。當(dāng)符號位指示負(fù)值時,處理器105將十進(jìn)制浮點數(shù)據(jù)中的數(shù)據(jù)的符號位設(shè)置為指示負(fù)號的值(例如,1)。
在方框360,處理器105還在符號控制開啟時檢查忽略符號位控制。即,當(dāng)符號控制關(guān)閉時,處理器105不使用忽略符號位控制。當(dāng)忽略符號位控制關(guān)閉時,處理器105不采取動作。當(dāng)忽略符號位控制開啟時,忽略壓縮十進(jìn)制格式的數(shù)據(jù)的符號位。即,處理器105不檢查壓縮十進(jìn)制格式的數(shù)據(jù)的符號位的無效性,并且將十進(jìn)制浮點格式的數(shù)據(jù)的符號位設(shè)置為指示正號的值(例如,0)。
在方框370,處理器105將數(shù)據(jù)和符號寫入十進(jìn)制浮點格式寄存器(多個)中。具體地說,當(dāng)機器指令是cdpt時,處理器105將數(shù)據(jù)寫入目標(biāo)十進(jìn)制浮點寄存器中。當(dāng)機器指令是cxpt時,處理器105將數(shù)據(jù)寫入處理器105的一對目標(biāo)十進(jìn)制浮點寄存器中。
上面詳細(xì)描述了兩個指令cdpt和cxpt,它們提供了顯著改善存儲到存儲十進(jìn)制運算的手段。通過諸如加法(ap)、減法(sp)、乘法(mp)或除法(dp)之類的算術(shù)運算來操作壓縮十進(jìn)制格式的數(shù)據(jù)。這些算術(shù)運算必須等待先前操作的存儲完成,然后算術(shù)運算才能開始,并且這些算術(shù)運算然后將結(jié)果存儲到存儲器。對運算的存儲器依賴性主導(dǎo)了性能。諸如比較、移位和符號操縱之類的其它運算也可以作為基于寄存器的運算而不是作為存儲到存儲運算被執(zhí)行,并且由此提高性能。
采用新指令cdpt和cxpt(例如,重新編譯已啟用cdpt和cxpt的程序的源代碼)會使用十進(jìn)制浮點格式等效物(例如,ad/xtr、sd/xtr、md/xtr、dt/xtr)替換壓縮十進(jìn)制格式的算術(shù)運算,以使得對于要存儲或從存儲器讀取的任何操作數(shù)(即,數(shù)據(jù))不存在等待。ad/xtr、sd/xtr、md/xtr和dt/xtr以與ap、sp、mp或dp相似的時間量操作,但沒有存儲開銷。
cdpt和cxpt指令提供用于將數(shù)據(jù)從存儲器中的壓縮十進(jìn)制格式直接轉(zhuǎn)換成寄存器中的十進(jìn)制浮點格式的有效手段。cdpt和cxpt允許在單個步驟中將數(shù)據(jù)從壓縮十進(jìn)制格式轉(zhuǎn)換為十進(jìn)制浮點格式。通常,壓縮十進(jìn)制格式的數(shù)據(jù)必須被加載到通用寄存器中,但因為當(dāng)前在常規(guī)指令集架構(gòu)中沒有長度受控加載,這通常需要字、半字和字節(jié)加載操作的混合。然后能夠使用其它機器指令將通用寄存器/通用寄存器對中的壓縮十進(jìn)制格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)十進(jìn)制浮點格式。相比之下,cdpt或cxpt允許在單個步驟中將數(shù)據(jù)從存儲器中的壓縮十進(jìn)制格式轉(zhuǎn)換為目標(biāo)寄存器(多個)中的十進(jìn)制浮點格式。
在某些情況下,存儲在盤或磁帶上的壓縮十進(jìn)制格式的數(shù)據(jù)不能具有可信符號。因此,不能使用cdpt和cxpt指令的常規(guī)編譯器針對每個操作數(shù)插入orimmediate(oi)指令以便強制符號位為fhex。輸入操作數(shù)的這種附加清除引入額外的存儲延遲。相比之下,采用cdpt和cxpt使能通過以下方式移除這些oi指令:替代地設(shè)置忽略符號位位來作為從壓縮十進(jìn)制格式到十進(jìn)制浮點格式的格式轉(zhuǎn)換的一部分而強制產(chǎn)生正值。
除了從壓縮轉(zhuǎn)換為十進(jìn)制浮點指令(cdpt和cxpt)之外,還提供cpdt和cpxt指令。cpdt和cpxt提供將數(shù)據(jù)從浮點寄存器或浮點寄存器對中保存的十進(jìn)制浮點格式轉(zhuǎn)換為壓縮十進(jìn)制格式并將轉(zhuǎn)換后的數(shù)據(jù)直接存儲到存儲器的有效手段。
圖4示出cpdt和cpxt的一個實例格式400。格式400包括操作碼字段405、長度字段(l2)410、基址寄存器字段(b2)415、位移字段(d2)420、寄存器字段(r1)425、掩碼字段(m3)430以及操作碼字段435。格式400下示出的編號是位索引。如圖所示,某些實施例的格式400具有48位的長度。
操作碼字段405保存指定要執(zhí)行的運算的操作碼(例如,十六進(jìn)制值)。預(yù)定義操作碼(例如,edachex)指定由格式400表示的機器指令是cpdt。另一個預(yù)定義操作碼(例如,edadhex)指定機器指令是cpxt。當(dāng)由處理器執(zhí)行cpdt或cpxt時,處理器將第一操作數(shù)(即,十進(jìn)制浮點格式的數(shù)據(jù))的有效數(shù)字和第一操作數(shù)的符號位轉(zhuǎn)換為壓縮十進(jìn)制格式。處理器忽略組合字段中的指數(shù),并且在偏置之前將其視為指數(shù)具有為0的值。
長度字段410指定包含第一操作數(shù)的最右側(cè)有效數(shù)字的字節(jié)數(shù)量。在某些實施例中,長度字段410包括用于cpdt的0與8之間(即,長度為1到9字節(jié))的長度代碼,以及用于cpxt的0到17(即,長度為1到18字節(jié))的長度代碼。長度字段410指示的字節(jié)數(shù)量還對應(yīng)于轉(zhuǎn)換為壓縮十進(jìn)制格式的數(shù)據(jù)將具有的位數(shù)。當(dāng)由處理器執(zhí)行cpdt或cpxt時,處理器將由長度字段410指示的字節(jié)數(shù)量放置在第二操作數(shù)位置處。如果沒有足夠的有效數(shù)字來填充轉(zhuǎn)換成壓縮十進(jìn)制格式的數(shù)據(jù)的所有字節(jié),則處理器將數(shù)字0附加到有效數(shù)字作為最左側(cè)數(shù)字。
基址寄存器字段415指定通用寄存器。由基址寄存器字段415指定的通用寄存器的內(nèi)容被與位移字段420的內(nèi)容相加。位移字段420包括這樣的內(nèi)容:這些內(nèi)容被與由基址寄存器字段415指定的通用寄存器的內(nèi)容相加以形成第二操作數(shù)地址。
寄存器字段425指定寄存器。所指定寄存器的內(nèi)容是第一操作數(shù)(即,十進(jìn)制浮點格式的源數(shù)據(jù))。包括第一操作數(shù)的寄存器被稱為第一操作數(shù)位置。
掩碼字段430具有四個位(例如,位0到位3)。在某些實施例中,掩碼字段430包括符號控制(例如,位),在一個實例中符號控制是掩碼字段430的位0。當(dāng)符號控制開啟時(例如,當(dāng)將符號控制位設(shè)置為1時),第二操作數(shù)具有符號位—第二操作數(shù)的最右側(cè)字節(jié)的最右側(cè)四個位位置將具有符號。當(dāng)符號控制關(guān)閉時(例如,當(dāng)將符號控制位設(shè)置為0時),第二操作數(shù)沒有符號位。
在某些實施例中,掩碼字段430包括加號代碼控制(例如,位),在一個實例中加號代碼控制是掩碼字段430的位2。僅當(dāng)符號控制開啟時才使用該加號代碼控制。當(dāng)符號控制關(guān)閉時,加號代碼控制被忽略。當(dāng)加號代碼控制關(guān)閉時(例如,當(dāng)將加號代碼控制設(shè)置為0時),加號被編碼為指示正號的值(例如,11002或chex)。當(dāng)加號代碼控制開啟時(例如,當(dāng)將加號代碼控制設(shè)置為1時),加號被編碼為指示無符號數(shù)的值(例如,11112或fhex)。
在某些實施例中,掩碼字段430包括強制加零控制(例如,位),在一個實例中強制加零控制是掩碼字段430的位3。僅當(dāng)符號控制開啟時才使用該強制加零控制。當(dāng)符號控制關(guān)閉時,強制加零控制被忽略。當(dāng)強制加零控制關(guān)閉(例如,當(dāng)將強制加零控制設(shè)置為0)并且產(chǎn)生負(fù)零的帶符號值時,不采取動作。當(dāng)強制加零控制開啟(例如,當(dāng)將強制加零控制設(shè)置為1)并且要放置在第二操作數(shù)位置中的轉(zhuǎn)換結(jié)果的絕對值為零時,使用由加號代碼控制指定的符號代碼設(shè)置轉(zhuǎn)換結(jié)果的符號位以便指示正零。
針對任何類型的第一操作數(shù)(包括無窮大、qnan或snan)執(zhí)行cpdt或cpxt而不導(dǎo)致異常。如果第一操作數(shù)是特殊的(即,無窮大、qnan或snan),則附加數(shù)字0作為有效數(shù)字的最左側(cè)數(shù)字,從而在概念上形成要轉(zhuǎn)換的實際有效數(shù)字。指定數(shù)量的最右側(cè)實際有效數(shù)字和符號位被轉(zhuǎn)換為壓縮十進(jìn)制格式。轉(zhuǎn)換結(jié)果被放置在第二操作數(shù)位置處,并且以適當(dāng)?shù)臈l件代碼完成cpdt或cpxt的執(zhí)行。實例條件代碼包括:0,其用于指示十進(jìn)制浮點格式的源數(shù)據(jù)為0;1,其用于指示源數(shù)據(jù)不是特殊的并且小于0;2,其用于指示源數(shù)據(jù)不是特殊的并且大于0;以及3,其用于指示源是特殊的—無窮大、qnan、snan或部分結(jié)果。
對于任何類型的第一操作數(shù)(包括無窮大和nan),當(dāng)因為第二操作數(shù)字段太短而使有效位的一個或多個最左側(cè)非零位丟失時,通過忽略溢出位獲得轉(zhuǎn)換結(jié)果。然后,設(shè)置條件代碼3。如果十進(jìn)制溢出掩碼位為1,則發(fā)生針對十進(jìn)制溢出的程序中斷。操作數(shù)長度本身不是溢出的指示;非零位必定已在運算期間丟失。
圖5示出根據(jù)本發(fā)明的某些實施例的用于執(zhí)行機器指令的過程流程。在某些實施例中,系統(tǒng)100(具體地說圖1的處理器105)執(zhí)行圖5中所示的過程流程。
在方框510,處理器105驗證所接收的機器指令以便判定是否返回異常并停止執(zhí)行該機器指令。具體地說,處理器105判定所接收的機器指令是否滿足任何異常條件。例如,當(dāng)操作碼字段405指示所接收的機器指令是cdpt時,處理器105判定長度字段410是否大于8。如果長度字段410大于8,則處理器105確定滿足異常條件。此外,當(dāng)操作碼字段405指示所接收的機器指令是cpxt時,處理器105判定長度字段410是否大于17。如果長度字段410大于17,則處理器105確定滿足異常條件。
當(dāng)處理器105在方框510確定滿足異常條件時,處理器105繼續(xù)到方框520,這將在下面進(jìn)一步描述。當(dāng)處理器105在方框510確定不滿足異常條件時,處理器105在方框560停止執(zhí)行該機器指令并返回異常。即,處理器105不執(zhí)行由所接收的機器指令的操作碼字段405指定的運算。
在方框520,處理器105從如由格式400的字段指定的十進(jìn)制浮點寄存器或十進(jìn)制浮點寄存器對讀取十進(jìn)制浮點格式的數(shù)據(jù)。在方框530,處理器105將十進(jìn)制浮點格式的數(shù)據(jù)中的數(shù)字轉(zhuǎn)換成壓縮十進(jìn)制格式。具體地說,如果十進(jìn)制浮點格式的數(shù)據(jù)是特殊的(即,無窮大、qnan或snan),則處理器105附加數(shù)字0作為有效數(shù)字的最左側(cè)數(shù)字。處理器105還將指定數(shù)量的最右側(cè)實際有效數(shù)字和符號位轉(zhuǎn)換為壓縮十進(jìn)制格式。
在方框540,處理器105設(shè)置用于轉(zhuǎn)換后的數(shù)字的符號。具體地說,在某些實施例中,處理器105檢查格式400的符號控制位。當(dāng)符號控制開啟時,處理器105為壓縮十進(jìn)制格式的轉(zhuǎn)換后數(shù)據(jù)設(shè)置符號位。處理器105在壓縮十進(jìn)制格式的數(shù)據(jù)的最右側(cè)字節(jié)的最右側(cè)四個位位置中設(shè)置符號。當(dāng)符號控制關(guān)閉時,處理器105不為壓縮十進(jìn)制格式的轉(zhuǎn)換后數(shù)據(jù)設(shè)置符號位。
在方框540,當(dāng)符號控制開啟時,處理器105還檢查加號代碼控制。即,當(dāng)符號控制關(guān)閉時,處理器105忽略加號代碼控制。當(dāng)加號代碼控制關(guān)閉時(例如,當(dāng)將加號代碼控制設(shè)置為0時),處理器105將加號編碼為指示正號的值(例如,11002或chex)。當(dāng)加號代碼控制開啟時(例如,當(dāng)將加號代碼控制設(shè)置為開啟時),處理器105將加號編碼為指示無符號數(shù)的值(例如,11112或fhex)。
也在方框540,當(dāng)符號控制開啟時,處理器105檢查強制加零控制。當(dāng)符號控制關(guān)閉時,處理器105忽略強制加零控制。當(dāng)強制加零控制關(guān)閉并且產(chǎn)生負(fù)零的帶符號值時,處理器105不采取動作。當(dāng)強制加零控制開啟并且轉(zhuǎn)換為壓縮十進(jìn)制格式的數(shù)據(jù)的絕對值為零時,處理器105使用由加號代碼控制指定的符號代碼設(shè)置數(shù)據(jù)的符號位以便指示正零。
在方框550,處理器105將壓縮十進(jìn)制格式的數(shù)據(jù)寫入目標(biāo)存儲位置。在某些實施例中,處理器105還返回適當(dāng)?shù)臈l件代碼。
cpdt和cpxt指令提供用于將數(shù)據(jù)從浮點寄存器或浮點寄存器對中保存的十進(jìn)制浮點格式直接轉(zhuǎn)換為壓縮十進(jìn)制格式并將轉(zhuǎn)換后的數(shù)據(jù)存儲到存儲器的有效手段。通常,必須在通用寄存器中將十進(jìn)制浮點格式的數(shù)據(jù)轉(zhuǎn)換為壓縮十進(jìn)制格式。然后必須將轉(zhuǎn)換為壓縮十進(jìn)制格式的數(shù)據(jù)從通用寄存器存儲到存儲器,但因為當(dāng)前在常規(guī)指令集架構(gòu)中沒有長度受控加載,這通常需要字、半字和字節(jié)加載操作的混合。相比之下,cdzt或cxzt允許在單個步驟中將數(shù)據(jù)從寄存器(多個)中的十進(jìn)制浮點格式轉(zhuǎn)換為存儲器中的壓縮十進(jìn)制格式。因此,能夠提高計算機本身的功能。
計算機可讀存儲介質(zhì)可以是可以保持和存儲由指令執(zhí)行設(shè)備使用的指令的有形設(shè)備。計算機可讀存儲介質(zhì)例如可以是—但不限于—電存儲設(shè)備、磁存儲設(shè)備、光存儲設(shè)備、電磁存儲設(shè)備、半導(dǎo)體存儲設(shè)備或者上述的任意合適的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計算機盤、硬盤、隨機存取存儲器(ram)、只讀存儲器(rom)、可擦式可編程只讀存儲器(eprom或閃存)、靜態(tài)隨機存取存儲器(sram)、便攜式壓縮盤只讀存儲器(cd-rom)、數(shù)字多功能盤(dvd)、記憶棒、軟盤、機械編碼設(shè)備、例如其上存儲有指令的打孔卡或凹槽內(nèi)凸起結(jié)構(gòu)、以及上述的任意合適的組合。這里所使用的計算機可讀存儲介質(zhì)不被解釋為瞬時信號本身,諸如無線電波或者其它自由傳播的電磁波、通過波導(dǎo)或其它傳輸介質(zhì)傳播的電磁波(例如,通過光纖電纜的光脈沖)、或者通過電線傳輸?shù)碾娦盘枴?/p>
這里所描述的計算機可讀程序指令可以從計算機可讀存儲介質(zhì)下載到各個計算/處理設(shè)備,或者通過網(wǎng)絡(luò)、例如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)和/或無線網(wǎng)下載到外部計算機或外部存儲設(shè)備。網(wǎng)絡(luò)可以包括銅傳輸電纜、光纖傳輸、無線傳輸、路由器、防火墻、交換機、網(wǎng)關(guān)計算機和/或邊緣服務(wù)器。每個計算/處理設(shè)備中的網(wǎng)絡(luò)適配卡或者網(wǎng)絡(luò)接口從網(wǎng)絡(luò)接收計算機可讀程序指令,并轉(zhuǎn)發(fā)該計算機可讀程序指令,以供存儲在各個計算/處理設(shè)備中的計算機可讀存儲介質(zhì)中。
用于執(zhí)行本發(fā)明操作的計算機程序指令可以是匯編指令、指令集架構(gòu)(isa)指令、機器指令、機器相關(guān)指令、微代碼、固件指令、狀態(tài)設(shè)置數(shù)據(jù)、或者以一種或多種編程語言的任意組合編寫的源代碼或目標(biāo)代碼,所述編程語言包括面向?qū)ο蟮木幊陶Z言—諸如smalltalk、c++等,以及常規(guī)的過程式編程語言—諸如“c”語言或類似的編程語言。計算機可讀程序指令可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠(yuǎn)程計算機上執(zhí)行、或者完全在遠(yuǎn)程計算機或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計算機的情形中,遠(yuǎn)程計算機可以通過任意種類的網(wǎng)絡(luò)—包括局域網(wǎng)(lan)或廣域網(wǎng)(wan)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。在一些實施例中,通過利用計算機可讀程序指令的狀態(tài)信息來個性化定制電子電路,例如可編程邏輯電路、現(xiàn)場可編程門陣列(fpga)或可編程邏輯陣列(pla),該電子電路可以執(zhí)行計算機可讀程序指令,從而實現(xiàn)本發(fā)明的各個方面。
這里參照根據(jù)本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖描述了本發(fā)明的各個方面。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機可讀程序指令實現(xiàn)。
這些計算機可讀程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,使得這些指令在通過計算機或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的裝置。也可以把這些計算機可讀程序指令存儲在計算機可讀存儲介質(zhì)中,這些指令使得計算機、可編程數(shù)據(jù)處理裝置和/或其它設(shè)備以特定方式工作,從而,存儲有指令的計算機可讀介質(zhì)則包括一個制造品,其包括實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的各個方面的指令。
也可以把計算機可讀程序指令加載到計算機、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計算機、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而使得在計算機、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上執(zhí)行的指令實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作。
附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或指令的一部分,所述模塊、程序段或指令的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。在有些作為替換的實現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
出于示例目的給出了對本發(fā)明的不同實施例的描述,但所述描述并非旨在是窮舉的或是限于所公開的實施例。在不偏離所述實施例的范圍和精神的情況下,對于所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說許多修改和變化都將是顯而易見的。在此使用的術(shù)語的選擇,旨在最好地解釋實施例的原理、實際應(yīng)用或?qū)κ袌鲋械募夹g(shù)的技術(shù)改進(jìn),或者使所屬技術(shù)領(lǐng)域的其它普通技術(shù)人員能理解在此所公開的實施例。