專利名稱::算術(shù)運(yùn)算裝置和進(jìn)行算術(shù)運(yùn)算的方法
技術(shù)領(lǐng)域:
:這里記載的實(shí)施例是一種在用一個(gè)或多個(gè)浮點(diǎn)積和算術(shù)運(yùn)算器進(jìn)行的復(fù)數(shù)矩陣積和等算術(shù)運(yùn)算中優(yōu)選地使用的技術(shù)。
背景技術(shù):
:一般地,使用復(fù)數(shù)作為操作數(shù)的算術(shù)運(yùn)算是由下式(l)來實(shí)現(xiàn)的。<formula>formulaseeoriginaldocumentpage5</formula>使用單個(gè)浮點(diǎn)積和算術(shù)運(yùn)算器執(zhí)行該矩陣積和運(yùn)算需要執(zhí)行下式(1-1)~(1-4)這4次算^算。也就是說,如果用單個(gè)浮點(diǎn)積和算^算器來實(shí)現(xiàn)復(fù)數(shù)矩陣積和運(yùn)算,則必須向算術(shù)運(yùn)算器發(fā)布4個(gè)指令。<formula>formulaseeoriginaldocumentpage5</formula>一般地,單個(gè)指令對(duì)多個(gè)數(shù)據(jù)流進(jìn)行處理的單指令流多數(shù)據(jù)流(SIMD)方案因用更少的指令高效地執(zhí)行積和運(yùn)算而廣為人知??捎糜赟IMD方案的算術(shù)運(yùn)算單元包括寄存器和使用存儲(chǔ)在該寄存器中的操作數(shù)(寄存器值)進(jìn)行相同算^算的2個(gè)浮點(diǎn)積和算"算器。這2個(gè)浮點(diǎn)積和算^算器分別稱作普通浮點(diǎn)積和算術(shù)運(yùn)算器(普通算^算器)和擴(kuò)展浮點(diǎn)積和算^算器(擴(kuò)展算^:算器)。將與寄存器的前半?yún)^(qū)域中的指定寄存器編號(hào)關(guān)聯(lián)的寄存器值輸入到普通運(yùn)算器中以用作供算術(shù)運(yùn)算用的^Mt數(shù),而將與寄存器的后半?yún)^(qū)域中的指定寄存器編號(hào)關(guān)聯(lián)的寄存器值輸入到擴(kuò)展運(yùn)算器中以用作供算"算用的操作數(shù)。此處,寄存器的后半?yún)^(qū)域中的指定寄存器編號(hào)是寄存器的前半?yún)^(qū)域中的指定寄存器編號(hào)與預(yù)定偏移之和。假設(shè)寄存器編號(hào)數(shù)目是128,則偏移設(shè)定為64。對(duì)于這種構(gòu)造,單個(gè)指令分配對(duì)要從寄存器輸出至普通算術(shù)運(yùn)算器的寄存器值進(jìn)行指定的寄存器編號(hào),還可分配對(duì)要從寄存器輸出至擴(kuò)展算術(shù)運(yùn)算器的寄存器值進(jìn)行指定的寄存器編號(hào)。也就是說,單個(gè)指令可指示2個(gè)算術(shù)運(yùn)算器執(zhí)行算術(shù)運(yùn)算,因此,用2個(gè)指令可實(shí)現(xiàn)以往需要4個(gè)指令的算術(shù)運(yùn)算,從而使吞吐量加倍?!矊@墨I(xiàn)1〕日本特開2003-16051號(hào)4^才艮然而,由上式(l-l)~(l-4)這4次算^J逸算(即4個(gè)指令)執(zhí)行的復(fù)數(shù)矩陣積和運(yùn)算不能依照2個(gè)指令而用無修改的SIMD方案來實(shí)現(xiàn),這是由于以下的原因普通算^逸算器使用寄存器的前半?yún)^(qū)域、且擴(kuò)展算術(shù)運(yùn)算器使用寄存器的后半?yún)^(qū)域這一對(duì)寄存器的限制;以及普通算術(shù)運(yùn)算器和擴(kuò)展算術(shù)運(yùn)算器進(jìn)行相同算術(shù)運(yùn)算這一對(duì)算術(shù)運(yùn)算的限制。
發(fā)明內(nèi)容這里的實(shí)施例的目的是用更少的指令種類碼來實(shí)現(xiàn)例如SIMD浮點(diǎn)積和算^J逸算中的算&逸算的各種組合。除了上述目的以外,本實(shí)施例的另一目的是提供從本發(fā)明的最佳實(shí)施方式得到的、未由傳統(tǒng)技術(shù)實(shí)現(xiàn)的優(yōu)點(diǎn)。根據(jù)本實(shí)施例的一個(gè)方面,提供了一種算錄算裝置,包括寄存器,所述寄存器存儲(chǔ)要用于算術(shù)運(yùn)算的操作數(shù);一個(gè)或多個(gè)算術(shù)運(yùn)算器,所述一個(gè)或多個(gè)算術(shù)運(yùn)算器響應(yīng)于對(duì)要從該寄存器讀取的操作數(shù)和要由該算術(shù)運(yùn)算器進(jìn)行的一個(gè)或多個(gè)算^算進(jìn)行指定并具有多個(gè)位的第一指令、使用由該第一指令指定的操作數(shù)來進(jìn)行由該笫一指令指定的算^逸算;以及設(shè)定單元,所述設(shè)定單元在該第一指令中未用于普通處理的一個(gè)或多個(gè)未使用的位中設(shè)定擴(kuò)展指令信息,該擴(kuò)展指令信息指示該寄存器和該算術(shù)運(yùn)算器中的至少一個(gè)根據(jù)該第一指令執(zhí)行與普通處理不同的擴(kuò)展處理。根據(jù)本實(shí)施例的另一方面,提供了一種在算術(shù)運(yùn)算裝置中進(jìn)行算^M1算的方法,所述算術(shù)運(yùn)算裝置包括寄存器,所述寄存器存儲(chǔ)要用于算術(shù)運(yùn)算的操作數(shù);以及一個(gè)或多個(gè)算術(shù)運(yùn)算器,所述一個(gè)或多個(gè)算術(shù)運(yùn)算器使用從該寄存器讀取的操作數(shù)來進(jìn)行算術(shù)運(yùn)算,所述方法包括在該算術(shù)運(yùn)算器處響應(yīng)于對(duì)要從該寄存器讀取的操作數(shù)和要由該算術(shù)運(yùn)算器進(jìn)行的一個(gè)或多個(gè)算術(shù)運(yùn)算進(jìn)行指定并具有多個(gè)位的第一指令、使用由該第一指令指定的操作數(shù)來進(jìn)行由該第一指令指定的算W算;以及在該第一指令中未用于普通處理的一個(gè)或多個(gè)未使用的位中設(shè)定擴(kuò)展指令信息,該擴(kuò)展指令信息指示該寄存器和該算術(shù)運(yùn)算器中的至少一個(gè)根據(jù)該第一指令執(zhí)行與普通處理不同的擴(kuò)展處理。所^Hf的算術(shù)運(yùn)算裝置和算術(shù)運(yùn)算的方法可通過使用一個(gè)或多個(gè)未使用的位來指示寄存器和運(yùn)算器執(zhí)行與普通處理不同的擴(kuò)展處理。因此,可由更少的指令種類碼來實(shí)現(xiàn)例如SIMD浮點(diǎn)積和的算^i逸算的各種組合。因此,由2個(gè)指令可實(shí)現(xiàn)例如以往需要4個(gè)指令的復(fù)數(shù)矩陣乘積運(yùn)算等的復(fù)雜算術(shù)運(yùn)算,從而可以使吞吐量加倍。本發(fā)明(實(shí)施例)的更多目的和優(yōu)點(diǎn)部分地在下面的說明中闡明,部分地從說明中顯而易見,或者可通過實(shí)踐本發(fā)明而習(xí)知。將借助在所附權(quán)利要求書中特別指出的要素和組合來實(shí)現(xiàn)和獲得本發(fā)明的目的和優(yōu)點(diǎn)。應(yīng)當(dāng)理解,前面的一般性說明和下面的詳細(xì)說明僅是示例性和解釋性的,而不對(duì)所要求的本發(fā)明構(gòu)成限制。將基于以下附圖來詳細(xì)說明本發(fā)明的諸示例實(shí)施例,在附圖中圖l是示意性地示出了第一實(shí)施例的算術(shù)運(yùn)算裝置的框圖2是示出在根據(jù)第一實(shí)施例的算^算裝置中進(jìn)行的一連串基本工序步驟的流程圖3是簡(jiǎn)要地示出了由圖1的算術(shù)運(yùn)算裝置中包含的算術(shù)運(yùn)算單元在非SIMD模式下進(jìn)行的操作的圖4是示出了由圖1的算^逸算裝置中包含的指令碼發(fā)布單元和生成單元在非SIMD模式下進(jìn)行的操作的圖5A~5D是示出了由圖1的算^il算裝置在非SIMD模式下使用的指令碼、算術(shù)碼、寄存器記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位)的表格;圖6是筒要地示出了由圖1的算術(shù)運(yùn)算裝置中包含的算術(shù)運(yùn)算單元在SIMD模式下進(jìn)4亍的IMt的圖7是示出了由圖1的算術(shù)運(yùn)算裝置中包含的指令碼發(fā)布單元和生成單元在SIMD模式下進(jìn)行的操作的圖;圖8A~8D是示出了由圖1的算絲算裝置在SIMD模式下使用的指令碼、算術(shù)碼、寄存器記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位)的表格;圖9是簡(jiǎn)要地示出了由圖1的算術(shù)運(yùn)算裝置的算術(shù)運(yùn)算單元在將未使用的位^使用的第一模式下進(jìn)行的操作的圖IO是簡(jiǎn)要地示出了由圖1的算^逸算裝置的指令碼發(fā)布單元(設(shè)定單元)和生成單元在將未使用的位投入使用的第一模式下進(jìn)行的操作的圖11A~UD是示出了由圖l的算^:算裝置在將未使用的位^使用的第一模式下使用的指令碼、算術(shù)碼、寄存器記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位)的表格;圖12~15是各自示出了由圖1的算W算裝置的算^:算單元在將未使用的位^v使用的第一模式下進(jìn)行的算^逸算的組合的圖16和17是各自示出了由圖l的算術(shù)運(yùn)算裝置的算術(shù)運(yùn)算單元在將未使用的位^使用的第二模式下進(jìn)行的算^i逸算的組合的圖18A~18D是示出了由圖1的算^:算裝置在將未使用的位^7v使用的第二模式下使用的指令碼、算術(shù)碼、寄存器記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位)的表格;圖19和20是各自簡(jiǎn)要地示出了由圖1的算術(shù)運(yùn)算裝置的算術(shù)運(yùn)算單元在將未使用的位^vf吏用的笫三才莫式下進(jìn)行的^作的圖21是簡(jiǎn)要地示出了由圖1的算術(shù)運(yùn)算裝置的指令碼發(fā)布單元(設(shè)定單元)和生成單元在將未使用的位投入使用的第三模式下進(jìn)行的操作的圖22A~22D是示出了由圖1的算^逸算裝置在將未使用的位^V(吏用的第三模式下使用的指令碼、算術(shù)碼、寄存器記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位)的表格;圖23和24是各自示出了由圖1的算^算裝置的算^算單元在將未使用的位^v使用的第三模式下進(jìn)行的算^算的組合的圖;以及圖25是示出了圖1的算^算裝置中的生成單元的具體實(shí)例的電路圖。具體實(shí)施例方式通過參照附圖進(jìn)行說明,第一實(shí)施例將是顯而易見的。(1)算^il算裝置的構(gòu)造圖1是示意性地示出了根據(jù)第一實(shí)施例的算術(shù)運(yùn)算裝置的構(gòu)造的框圖。圖1所示的算術(shù)運(yùn)算裝置1包括算術(shù)單元10、指令碼發(fā)布單元(i丈定單元)20和生成單元30。算術(shù)單元10包括寄存器11、普通浮點(diǎn)積和運(yùn)算器(也稱作普通算W算器或算^il算器)l2b和擴(kuò)展浮點(diǎn)積和運(yùn)算器(也稱作擴(kuò)展算^:算器或算^:算器)12e。以下,"普通浮點(diǎn)積和算術(shù)運(yùn)算器,,也稱作普通積和運(yùn)算器、普通算^算器,并簡(jiǎn)單地稱為算"算器,而"擴(kuò)展浮點(diǎn)積和運(yùn)算器"也稱作擴(kuò)展積和運(yùn)算器、擴(kuò)展算M算器,并簡(jiǎn)單地稱為算^ii:算器。寄存器11存儲(chǔ)由2N個(gè)寄存器編號(hào)0~2N-1指定的寄存器值(數(shù)據(jù)),其中在第一實(shí)施例中N=64。寄存器11存儲(chǔ)^Mt數(shù)和由算術(shù)運(yùn)算器12b和12e執(zhí)行的算術(shù)運(yùn)算的結(jié)果。第一實(shí)施例的算a算裝置l是這樣的構(gòu)造如后面所述,該構(gòu)造能夠響應(yīng)于由指令種類碼(opcode)指定的單個(gè)指令而在采用和不采用對(duì)多個(gè)(在本實(shí)施例中是2個(gè))數(shù)據(jù)流進(jìn)行處理的單指令流多數(shù)據(jù)流(SIMD)方案之間切換。當(dāng)采用SIMD方案時(shí),將寄存器11的整體區(qū)域分割成前半部分(寄存器編號(hào)0N-1)和后半部分(寄存器編號(hào)N2N-1)這2個(gè)區(qū)域,這2個(gè)區(qū)g本上分別被普通運(yùn)算器12b和擴(kuò)屑_運(yùn)算器12e使用。后面詳細(xì)說明的生成單元30將6個(gè)輸出寄存器編號(hào)、2個(gè)輸入寄存器編號(hào)和輸入寄存器記錄控制信號(hào)輸入到寄存器ll中。這6個(gè)輸出寄存器編號(hào)對(duì)其中有3個(gè)要輸出至各算術(shù)運(yùn)算器12b和12e的6個(gè)寄存器值(供積和運(yùn)算用的操作數(shù))進(jìn)行指定。這2個(gè)輸入寄存器編號(hào)對(duì)代表由算W算器12b和12e所得的算^:算結(jié)果的寄存器值要被輸入和記錄的目的地(寄存器11中的地址)進(jìn)行指定。此輸入寄存器記錄控制信號(hào)選擇并控制是否將算術(shù)運(yùn)算器12b和12e所進(jìn)行算^il算的結(jié)果記錄在寄存器11中。在圖示的實(shí)例中,7位值b一rd6:0用作對(duì)由普通積和運(yùn)算器12b進(jìn)行的算和逸算的結(jié)果的記錄目的^進(jìn)行指定的輸入寄存器編號(hào),并且被輸入到寄存器ll中。3個(gè)7位值b—rsl[6:0、b—rs6:0和b—rs3[6:0用作對(duì)要從寄存器11輸出至普通積和運(yùn)算器12b的3個(gè)寄存器值(供積和運(yùn)算用的操作數(shù))進(jìn)行指定的3個(gè)輸出寄存器編號(hào),并且被輸入到寄存器11中。同理,7位值ejd[6:0用作對(duì)由擴(kuò)展積和運(yùn)算器12e進(jìn)行的算術(shù)運(yùn)算的結(jié)果的記錄目的亟進(jìn)行指定的輸入寄存器編號(hào),并且被輸入到寄存器11中。3個(gè)7位值e—rsl[6:0]、e—rs2[6:0]、ejs3[6:0用作對(duì)要從寄存器11輸出至擴(kuò)展積和運(yùn)^器12e的3個(gè)寄存器j(供積和運(yùn)算用的操作數(shù))進(jìn)行指定的3個(gè)輸出寄存器編號(hào),并且被輸入到寄存器11中。這些7位值b—rd[6:0、b_rsl[6:0、b—rs6:0、b_rs3[6:0、e—rd[6:0]、e_rsl[6:0]、e_rs2[6:0、e—rs3[6:0]是0~127的整數(shù),并且對(duì)供由算^i^^器12b和12e進(jìn)行的積i^運(yùn)算使用的寄存器編號(hào)進(jìn)行指定。也就是說,對(duì)于各算術(shù)運(yùn)算器12b和12e,為包含供乘積運(yùn)算用的操作數(shù)的2個(gè)寄存器編號(hào)、供求和運(yùn)算用的操作數(shù)的寄存器編號(hào)、以及算術(shù)運(yùn)算結(jié)果的記錄目的地的寄存器編號(hào)在內(nèi)的共4個(gè)寄存器編號(hào)分配編號(hào)0~127。由寄存器編號(hào)0~63定義的寄存器11的區(qū)域稱作前半?yún)^(qū)域(區(qū)段),而由編號(hào)64~127定義的寄存器11的區(qū)域稱作后半?yún)^(qū)域(區(qū)段)。在本實(shí)施例中,寄存器編號(hào)11(11=0、1、2.....127)處的寄存器值由。/。r[n表達(dá)。例如,存儲(chǔ)在寄存器編號(hào)n=0、1、2.....127中的寄存器值分別表達(dá)為°/"、%r[l].....%r[127。在這些寄存器值。/。r、%r[l].....。/or[127]中,將由指令指定的寄存器編號(hào)表達(dá)如下。例如,假設(shè)用于普通運(yùn)算器12b的4個(gè)寄存器值表達(dá)為。/。bl、%b2、0/。b3和。/。bd,則在"b—rsl[6:0—15"這一算^^算的情況下,0/obl代表。/。r[151。類似地,假設(shè)用于擴(kuò)展運(yùn)算器12e的4個(gè)寄存器值表達(dá)為。/。el、%e2、%e3和。/。ed,則在"e—rsl[6:0—79"這一算術(shù)運(yùn)算的情況下,。/。el代表。/or[79。上述輸入寄存器記錄控制信號(hào)由b—we和e_we表達(dá)??刂菩盘?hào)b_we是用于根據(jù)選擇來控制是否將普通運(yùn)算器12b所進(jìn)行的積和運(yùn)算的結(jié)果記錄在寄存器11中的1位信號(hào)。當(dāng)要記錄該結(jié)果時(shí)將控制信號(hào)^we設(shè)定為"1",而當(dāng)不記錄該結(jié)果時(shí)則將控制信號(hào)b—we設(shè)定為"0"。i似地,控制信號(hào)e_we是用于根據(jù)選擇來控制是否將^展運(yùn)算器12e所進(jìn)行的積和運(yùn)算的結(jié)果記錄在寄存器11中的1位信號(hào)。當(dāng)要記錄該結(jié)果時(shí)將控制信號(hào)ewe設(shè)定為"1",而當(dāng)不記錄該結(jié)果時(shí)則將控制信號(hào)ewe設(shè)定為各算術(shù)運(yùn)算器12b和12e是3輸入單輸出浮點(diǎn)積和運(yùn)算器,并能夠根據(jù)從后面說明的生成單元30發(fā)布的指令集所包含的算術(shù)種類碼(以下筒單地稱作"算術(shù)碼")來切換算術(shù)運(yùn)算。普通積和運(yùn)算器12b接收用作輸入值b一il、b一i2和b—i3的、從寄存器ll讀取的3個(gè)寄存器值r。bl、。/。b2和y。b3,并^P代表^術(shù)運(yùn)算的結(jié)果的輸出值b—0(即寄存器值。/obd)輸出至寄存器U。類似地,擴(kuò)展積和運(yùn)算器12e接k用作輸入值ejl、ej2和e—i3的、從寄存器11讀取的3個(gè)寄存器值。/。el、。/。e2和。/。e3,并#代表^^算的結(jié)果的輸出值e_o(即寄存器值y。ed)輸出至寄存器11。具體地,普通積和運(yùn)算器12b接收來自生成單元30的算術(shù)碼b一op[1:0和來自寄存器11的操作數(shù)。/。bl、%b2和。/。b3,基于輸入操作數(shù)。/。bl、%b2和。/。b3進(jìn)行由算術(shù)碼b一op[l:01指定的算^算,最后輸出算^算的結(jié)果數(shù)據(jù)。/。bd。以相同方殳,擴(kuò)展積和運(yùn)算器12e接收來自生成單元30的算術(shù)碼ejp[l:0和來自寄存器11的操作數(shù)。/oel、%e2和。/oe3,基于輸入^Mt數(shù)。/oel、%e2和。/。e3進(jìn)行由算術(shù)碼ejp[l:0]指定的算術(shù)運(yùn)算,最后輸出算^算的結(jié)果數(shù)據(jù)。/。ed。此處,2位算術(shù)碼bjp[l:0和L叩[1:0在算術(shù)運(yùn)算器12b和12e中指定以下4個(gè)要進(jìn)行的^—^:算(算^名)?!脖?〕<table>tableseeoriginaldocumentpage11</column></row><table>指令碼發(fā)布單元(設(shè)定單元)20將指令碼通過生成單元30發(fā)給算術(shù)單元10,并用作后面要說明的設(shè)定單元。此處,如下表2和下表3所示,由指令碼發(fā)布單元20發(fā)布的指令碼由指令種類碼和4個(gè)寄存器編號(hào)分配形成。指令種類碼是由叩code[3:0表示的4位數(shù)據(jù),因此可指定16種指令。如圖5A、8A、IIA、18A和22A所示,4個(gè)寄存器編號(hào)分配各自由7位形成,并且指定0~127中的單個(gè)寄存器編號(hào)。下表2示出了當(dāng)將opcode[3:2]設(shè)定為"00"以采用后面參照?qǐng)D3-5說明的非SIMD方案時(shí)的指令種類碼、指令描述以及與該指令種類碼關(guān)聯(lián)的詳細(xì)算^:算。在該非SIMD模式下,算術(shù)單元10不使用擴(kuò)展運(yùn)算器12e、而是僅使用普通運(yùn)算器12b對(duì)寄存器11整體的操作數(shù)進(jìn)行積和運(yùn)算。下表3示出了當(dāng)將opcode[32設(shè)定為"01"以采用后面參照?qǐng)D6~8說明的SIMD方案時(shí)的指令種類碼、指令描述以及與該指令種類碼關(guān)聯(lián)且要由算術(shù)普通運(yùn)算器12b和擴(kuò)展運(yùn)算器12e進(jìn)行的詳細(xì)算和逸算。在該SIMD模式下,在算術(shù)單元10中,將與寄存器ll的前半?yún)^(qū)域中的指定寄存器編號(hào)關(guān)聯(lián)的寄存器值輸入到普通積和運(yùn)算器12b中以用作供算W算用的操作數(shù),同時(shí)將與寄存器11的后半?yún)^(qū)域中的指定寄存器編號(hào)關(guān)聯(lián)的寄存器值輸入到擴(kuò)展積和運(yùn)算器12e中以用作供算^it算用的^Mt數(shù)。此處,寄存器11的后半?yún)^(qū)域中的指定寄存器編號(hào)是寄存器11的前半?yún)^(qū)域中的指定寄存器編號(hào)與預(yù)定偏移(在第一實(shí)施例中是64)之和。對(duì)于對(duì)由算術(shù)運(yùn)算器12b和12e進(jìn)行的算^算的結(jié)果的存儲(chǔ)目的地進(jìn)行指定的寄存器編號(hào)也同樣如此。當(dāng)采用SIMD方案時(shí),盡管4個(gè)寄存器編號(hào)分配都具有7位(即rd[6:0]、rsl[6:0、rs2[6:0和rs3[6:0),但各寄存器編號(hào)分配4吏用7位中的6位(即rd[5:0、rsl[5:0、rs2[5:0]和rs3[5:0),因此各寄存器編號(hào)分配的l位(即rd[6、rsl[6]、rs2[6]和rs3[6)得以不被使用?!脖?〕<table>tableseeoriginaldocumentpage12</column></row><table>〔表3〕<table>tableseeoriginaldocumentpage12</column></row><table><table>tableseeoriginaldocumentpage13</column></row><table>由指令碼發(fā)布單元20實(shí)施的作為設(shè)定單元的一種功能是在指令(指令集)中的一個(gè)或多個(gè)未使用的位中設(shè)定擴(kuò)展指令信息。這種擴(kuò)展指令信息指示寄存器11和算術(shù)運(yùn)算器12b、12e中的至少一個(gè)根據(jù)該指令執(zhí)行要執(zhí)行的、與普通處理不同的擴(kuò)展處理。這種未使用的位是當(dāng)算術(shù)運(yùn)算裝置1采用SIMD模式時(shí)得以不被使用的寄存器編號(hào)指定字段的最高有效位(MSB)rd[6、rsl[6]、rs2[6和rs3[6中的一個(gè)或多個(gè)。使用一個(gè)或多個(gè)未使用的位的擴(kuò)展指令信息可以是以下兩種類型(al)后面參照?qǐng)D9~24說明的擴(kuò)展指令信息,其將待輸出至算術(shù)運(yùn)算器12b和12e中的一個(gè)的操作數(shù)從與算^逸算關(guān)聯(lián)的區(qū)域中的操作數(shù)切換成除與其中一個(gè)算術(shù)運(yùn)算器關(guān)聯(lián)的區(qū)域以外的其余區(qū)域中的操作數(shù)。根據(jù)這一擴(kuò)展指令信息,各算術(shù)運(yùn)算器12b和12e可使用在寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域二者中的寄存器值來執(zhí)行算術(shù)運(yùn)算。(a2)后面參照?qǐng)D20、22B、23和24說明的擴(kuò)展指令信息用以指示各算術(shù)運(yùn)算器12b和12e切換要由該算術(shù)運(yùn)算器進(jìn)行的算術(shù)運(yùn)算。憑借這一擴(kuò)展指4^ft息,可彼此獨(dú)立地切換要由算^it算器12b和12e進(jìn)行的算術(shù)運(yùn)算,由此,算術(shù)運(yùn)算器12b和12e可進(jìn)行不同的算術(shù)運(yùn)算。如后面參照?qǐng)D4、7、10、17、21和25詳細(xì)i兌明的那樣,生成單元30基于由指令碼發(fā)布單元(設(shè)定單元)20設(shè)定和發(fā)布的指令集(指令碼)生成要輸入到算術(shù)單元10中的指令集。此處,從指令碼發(fā)布單元加發(fā)出的指令碼是由opcode[3:0]、rd[6:0]、rsl[6:0、rs2[6:0]和rs6:0形成的32位數(shù)據(jù)。由生成單元30生成并要輸入到算術(shù)單元10中的指令集是由b—we、e_we、b—rd[6:0卜b_rsl[6:0]、b_rs2[6:0、b—rs3[6:0、e—rd[6:0、e—rsl[6:0、e—rs2[6:0、e—rs3[6:0、bjp[l:0和e—叩[1:0形成的62位數(shù)^。也就是說,來自指令碼發(fā)布單元20的32位指令碼由生成單元30變換成要輸入到算術(shù)單元10中的62位指令集。此時(shí),如后面參照?qǐng)D10、IID、17、18D、21、22B、22D和25詳細(xì)說明的那樣,生成單元30基于在一個(gè)或多個(gè)未使用的位中設(shè)定的擴(kuò)展指令信息而生成指令。也就是說,生成單元30具有這一功能基于在一個(gè)或多個(gè)未使用的位中設(shè)定的擴(kuò)展指令信息和在除未使用的位以外的位中設(shè)定的信息而生成擴(kuò)展指令、并將所生成的擴(kuò)展指令輸出至寄存器11和算術(shù)運(yùn)算器12b、12e中的至少一個(gè)。此處,這一擴(kuò)展指令指示執(zhí)行由上述項(xiàng)目(al)和(a2)等擴(kuò)展指令信息規(guī)定的擴(kuò)展處理。(2)算術(shù)單元的基^#作此處,參照?qǐng)D2的流程圖對(duì)由圖1所示的算術(shù)運(yùn)算裝置1中的算術(shù)單元10進(jìn)行的基本操作(處理)進(jìn)行說明。在算術(shù)運(yùn)算裝置1中,在執(zhí)行圖2的流程圖所示的工序步驟之前,在指令碼發(fā)布單元20和生成單元30處分別進(jìn)行發(fā)布指令碼的步驟(包括設(shè)定步驟)和生成步驟,但這些步驟并未在附圖中示出。在設(shè)定步驟中,如上所述,指令碼發(fā)布單元20的作為設(shè)定單元的功能在指令集中的一個(gè)或多個(gè)未使用的位中設(shè)定擴(kuò)展指令信息。生成步驟使得生成單元30將來自指令碼發(fā)布單元20的指令碼變換成要輸入到算術(shù)單元10中的指令集。在該變換時(shí),要生成的指令是基于在一個(gè)或多個(gè)未使用的位中設(shè)定的擴(kuò)展指4Ht息的。當(dāng)輸入由生成單元30(生成步驟)所生成的包括b—we、e—we、b_rd、brsl、brs2、b—rs3、e—rd、e一rsl、ers2、e—rs3、bop和eop在內(nèi)的指令集時(shí),處理工序首(從寄i器11S取數(shù)^(步驟SIO)。在從寄存器讀取數(shù)據(jù)的步驟中,將寄存器值。/。r[b—rsl、%r[b_rs2、%r[b_rs3]、%r[e—rsl]、%r[e_rs2]、。/。r[e—rs3從寄^"器11輸入至算絲算器12b和12e以用作b—il、b_i2、b—i3、e—il、e—i2、ej3(步驟S11)。此后,基于在步驟S10(S11)中讀取的寄存器值來實(shí)施由普通運(yùn)算器12b進(jìn)行算術(shù)運(yùn)算的步驟(步驟S20)和由擴(kuò)展運(yùn)算器12e進(jìn)行算術(shù)運(yùn)算的步驟(步驟S30)。步驟S20首先判斷算術(shù)碼1)_叩是否為指定算術(shù)運(yùn)算名為fmadd的算W算的"00"(步驟S21)。如i判斷結(jié)果為肯定(步驟S21中的"是"路線),則普通運(yùn)算器12b執(zhí)行算術(shù)運(yùn)算"b_il*b—i2+b_i3",并將代表算術(shù)運(yùn)算結(jié)果的值b—o輸出至寄存器ll(步驟S22)。然后,處理工序前進(jìn)至步驟S30。相反,如果判斷結(jié)果為否定(步驟S21中的"否,,路線),則判斷算術(shù)碼1)_叩是否為指定算術(shù)運(yùn)算名為fnmadd的算^算的"11"(步驟S23)。如果—判斷結(jié)果為肯定(步驟S23中的"是"路線),則普通運(yùn)算器12b執(zhí)行算^算"-b—il*b_i2-b_i3",并將代表算^算結(jié)果的值b_o輸出至寄存器11(步驟S24)。然后,處理工序前進(jìn)至步驟S30。相反,如果判斷結(jié)果為否定(步驟S23中的"否"路線),則判斷算術(shù)碼b_op是否為指定算和逸算名為fmsub的算水逸算的"01"(步驟S25)。如果^斷結(jié)果為肯定(步驟S25中的"是,,路線),則普通運(yùn)算器12b執(zhí)行算術(shù)運(yùn)算"b—il*b—i2-b—i3",并將代表算術(shù)運(yùn)算結(jié)果的值b—o輸出至寄存器11(步驟S26)。^后,處理工序前進(jìn)至步驟S30。相反,如果判斷結(jié)果為否定(步驟S25中的"否,,路線),則判斷算術(shù)碼b_op是否為指定算^逸算名為fnmsub的算^算的"10"(步驟S27)。如果》'J斷結(jié)果為肯定(步驟S27中的"是,,路線),則普通運(yùn)算器12b執(zhí)行算術(shù)運(yùn)算"-b—il*b—i2+b—i3,,,并將代表算術(shù)運(yùn)算結(jié)果的值b—o輸出至寄存器11(步驟S28)。然后,處理工序前進(jìn)至步驟S30。而且,如果判斷結(jié)果為否定(步驟S27中的"否"路線),則處理工序前進(jìn)至步驟S30。步驟S30首先判斷算術(shù)碼ejp是否為指定算和逸算名為fmadd的算術(shù)運(yùn)算的"00"(步驟S31)。如i判斷結(jié)果為肯定(步驟S31中的"是"路線),則擴(kuò)展運(yùn)算器12e執(zhí)行算術(shù)運(yùn)算"e_il*e_i2+e—i3",并將代表算W算結(jié)果的值ej輸出至寄存器ll(步驟S32)。^后,處理工序前進(jìn)至步驟S40。相反,如果判斷結(jié)果為否定(步驟S31中的"否"路線),則判斷算術(shù)碼e_op是否為指定算^算名為fnmadd的算^it算的"11"(步驟S33)。如^判斷結(jié)果為肯定(步驟S33中的"是,,路線),則擴(kuò)展運(yùn)算器12e執(zhí)行算術(shù)運(yùn)算"-e_il*e—i2-e_i3",并將代表算術(shù)運(yùn)算結(jié)果的值e_o輸出至寄存器11(步驟S34)。^后,處理工序前進(jìn)至步驟S40。相反,如果判斷結(jié)果為否定(步驟S33中的"否"路線),則判斷算術(shù)碼e_op是否為指定算W算名為fmsub的算術(shù)運(yùn)算的"01"(步驟S35)。如^判斷結(jié)果為肯定(步驟S35中的"是"路線),則擴(kuò);^運(yùn)算器12e執(zhí)行算術(shù)運(yùn)算"e_il*e_i2-e_i3,,,并將代表算術(shù)運(yùn)算結(jié)果的值e_o輸出至寄存器11(步驟S36)。然后,處理工序前進(jìn)至步驟S40。相反,如果判斷結(jié)果為否定(步驟S35中的"否"路線),則判斷算術(shù)碼e—op是否為指定算^it算名為fnmsub的算^逸算的"10"(步驟S37)。如^判斷結(jié)果為肯定(步驟S37中的"是"路線),則擴(kuò)展運(yùn)算器12e執(zhí)行算g算"-e—il*e—i2+e—i3",并將代表算^算結(jié)果的值e_o輸出至寄存器11(步驟S38)。^后,處理工序前進(jìn)至步驟S40。而且,如果判斷結(jié)果為否定(步驟S37中的"否"路線),則處理工序前進(jìn)至步驟S40。圖2顯示了在步驟S20之后執(zhí)行步驟S30,但實(shí)際上步驟S20是與步驟S30并行地執(zhí)行的。步驟S21、S23、S25和S27的執(zhí)行順序和步驟S31、S33、S35和S37的執(zhí)^f亍順序不限于圖2所示的執(zhí)^f亍順序。在步驟S40中,基于控制信號(hào)l^we、e_we和指定寄存器編號(hào)b一rd、e_rd,對(duì)算W算器12b和12e所i^ft的算^算的結(jié)果向寄存器11中的記錄進(jìn)行控制。具體地,判斷控制信號(hào)b一we是否為1(步驟S41)。如果判斷結(jié)果為肯定(步驟S41中的"是"路線),則普通運(yùn)算器12b的輸出值b—o由寄存器值。/。r[bjdl表達(dá),其然后被記錄在寄存器ll中(步驟S42)。相反,如果判斷結(jié)果為否定(步驟S41中的"否"路線)或如果步驟S42中的記錄已完成,則再判斷控制信號(hào)e—we是否為1(步驟S43)。如果判斷結(jié)果為肯定(步驟S43中的"是"路線),則擴(kuò)屑_運(yùn)算器12e的輸出值e_o由寄存器值。/。r[ejd]表達(dá),其然后被記錄在寄存器ll中(步驟S44)。如^判斷結(jié)果為否定(》驟S43中的"否,,路線)或如果步驟S44中的記錄已完成,則算術(shù)單元10結(jié)束工序步驟。(3)非SIMD模式下算^算裝置的操作如上面參照表2所述,當(dāng)算^算裝置1選擇非SIMD模式時(shí),將"00"分配給由指令碼發(fā)布單元20發(fā)布的指令種類碼的最高2位叩code[3:2]。以下參照?qǐng)D3、4和5A~5D說明非SIMD模式下算術(shù)運(yùn)算裝置1所進(jìn)行的操作。圖3簡(jiǎn)要地示出了由圖1所示的算術(shù)運(yùn)算裝置1的算術(shù)單元10在非SIMD模式期間進(jìn)行的操作;圖4示出了由圖1所示的算^逸算裝置1中包含的指令碼發(fā)布單元20和生成單元30在非SIMD模式期間進(jìn)行的操作;而圖5A5D具體地示出了圖l所示的算術(shù)運(yùn)算裝置l中的指令碼、算術(shù)碼、寄存器記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位)。如圖3所示,在非SIMD模式期間,算術(shù)運(yùn)算裝置1的算術(shù)單元10僅利用普通運(yùn)算器12b(即,不利用擴(kuò)展運(yùn)算器12e)對(duì)寄存器11的整體區(qū)域中的數(shù)據(jù)進(jìn)行積和算術(shù)運(yùn)算。也就是說,根據(jù)來自寄存器11的輸入值和指令碼叩code[l:O],普通運(yùn)算器12b進(jìn)行算術(shù)運(yùn)算,依照控制信號(hào)b—we的值將該算^i^^的結(jié)果記錄在寄存器11中。在此非SIMD模式下,如圖4和5C所示,控制信號(hào)e_we總是設(shè)定為0,不將擴(kuò)屑^運(yùn)算器12e所進(jìn)行的算^算的結(jié)果記錄在、存器11中。由指令碼發(fā)布單元20發(fā)布的4個(gè)寄存器編號(hào)分配rd[6:0、rsl[6:0、rs2[6:0和rs3[6:0]各自占用全部7位,因此從寄存器ll的整體區(qū)域分配4個(gè)毒存器值。在非SIMD模式下,生成單元30如圖4所示那樣對(duì)由指令碼發(fā)布單元20發(fā)布的指令碼叩code[3:0以及4個(gè)寄存器編號(hào)分配rd[6:0、rsl[6:0、rs2[6:0]和rs3[6:0進(jìn)行變換,然后,指令集b—we、e—we、b_rd[6:0、b—rsl[6:0、b_rs2[6:0、b_rs3[6:0]、e—rd[6:0、e—rsl[6:0、e—rs6:0]、e_rs3[6:0、bjp[l:0]和ejp[l:0]被輸入到算術(shù)單元10中。此處,如圖4和5B所示,供普通運(yùn)算器12b用的算術(shù)碼1)_叩[1:0]由指令碼中包含的指令種類碼的最低2位上的值叩code[l:0來i達(dá)。在非SIMD模式下,如圖4和5C所示,來自普通運(yùn)算器12b的用于記錄在寄存器11中的控制信號(hào)1^we被設(shè)定為1,將普通運(yùn)算器12b所進(jìn)行的算術(shù)運(yùn)算的結(jié)果記錄在寄存i11中。另一方面,如圖4和5B所示,供擴(kuò)>^運(yùn)算器12e用的算術(shù)碼e_op[l:0]被固定為"00"。此時(shí),如圖4和5C所示,來自擴(kuò)屑^運(yùn)算器12e^用于記錄在寄存器11中的控制信號(hào)e—we被設(shè)定為0,從而不將擴(kuò)展運(yùn)算器12e所進(jìn)行的算術(shù)運(yùn)算的結(jié)果記錄;寄存器11中。另夕卜,如圖4和5D所示,4個(gè)7位寄存器編號(hào)分配rd[6:0、rsl[6:0、rs2[6:0、rs3[6:0用作供普通運(yùn)算器12b用的寄存器編號(hào)分配b_rd[6:0、b—rsl[6:0]、b—rs2[6:0]、b_rs3[6:0,其然后被輸出至寄存器11。與^目比,如圖4和5D所示,供擴(kuò)展運(yùn)算器12e用的寄存器編號(hào)分配e—rd[6:0、e—rsl[6:0]、e—rs2[6:0和e—rs3[6:0全部i殳定為0。接下來,對(duì)在非SIMD模式下的詳細(xì)操作、即執(zhí)行例如fnmsub%f80、%flO、Y。f20和o/of40的算木運(yùn)算進(jìn)行說明,該運(yùn)算表達(dá)如下<formula>formulaseeoriginaldocumentpage17</formula>在執(zhí)行上述算術(shù)運(yùn)算時(shí),由下表4所示的指令碼分配的指令種類碼opcode[3:0]以及寄存器編號(hào)分配rd[6:0、rsl[6:0、rs2[6:0和rs3[6:0的值被變換成用作下表5所示的向普通運(yùn)算器12b中輸入的輸入信號(hào)的值,亦即算術(shù)碼1)_叩[1:0和寄存器編號(hào)分配b_rd[6:0、b_rsl[6:0、b_rs2[6:0、b—rs3[6:0,j然后被輸出到寄存器11中。如下表5所示,供f展運(yùn)算器12e用的算術(shù)碼e—op[l:0和寄存器編號(hào)分配ejrd[6:0]、e一rsl[6:0]、e—rs2[6:0]、e—rs3[6:0的值全部設(shè)定為0。來自普通運(yùn)算器12b的用于記i在務(wù)存器11中的控制信號(hào)b—we被設(shè)定為1,從而普通運(yùn)算器12b所進(jìn)行的算術(shù)運(yùn)算的結(jié)果由寄存器i。/。r[80表達(dá),其然后被記錄在寄存器11中。來自擴(kuò)展運(yùn)算器12e的用于記錄在寄存器11中的控制信號(hào)e_we被設(shè)定為0?!脖?〕<table>tableseeoriginaldocumentpage18</column></row><table>e_rd[6:0]OOOOOOO(固定值)e—rsl[6:0]OOOOOOO(固定值)e一rs2[6:0OOOOOOO(固定值)e一rs3[6:0OOOOOOO(固定值)(4)SIMD模式下算術(shù)運(yùn)算裝置的操作如上面參照表3所述,當(dāng)算^算裝置1選擇SIMD模式時(shí),"01"被分配給由指令碼發(fā)布單元20發(fā)布的指令種類碼的最高2位叩code[3:2]。下面參照?qǐng)D6、7和8A~8D說明SIMD模式下算^1算裝置1所進(jìn)行的操作。圖6簡(jiǎn)要地示出了由圖1所示的算術(shù)運(yùn)算裝置1的算術(shù)單元10在SIMD模式期間進(jìn)行的操作;圖7示出了由圖1所示的算水逸算裝置1的指令碼發(fā)布單元20和生成單元30在SIMD模式期間進(jìn)行的操作;而圖8A8D具體地示出了圖l所示的算術(shù)運(yùn)算裝置l中的指令碼、算術(shù)碼、寄存器記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位)。如圖6所示,在SIMD模式期間,在算術(shù)運(yùn)算裝置1的算術(shù)單元10中,將用作供算術(shù)運(yùn)算用的操作數(shù)的寄存器前半?yún)^(qū)域中的指定寄存器編號(hào)處的寄存器值輸入到普通運(yùn)算器12b中,類似地,將用作供算和逸算用的操作數(shù)的寄存器后半?yún)^(qū)域中的指定寄存器編號(hào)處的寄存器值輸入到擴(kuò)展運(yùn)算器12e中。此處,M通運(yùn)算器12b用的指定寄存器編號(hào)表達(dá)為供擴(kuò)展運(yùn)算器12e用的指定寄存器編號(hào)與預(yù)定偏移值N(在圖示的實(shí)例中N=64)之和。也就是說,算術(shù)運(yùn)算器12b和12e對(duì)不同的輸入值(不同的寄存器值)進(jìn)行由指令種類碼opcode[l:O]指定的同一種算術(shù)運(yùn)算。由算術(shù)運(yùn)算器12b和12e執(zhí)行的算木逸算的結(jié)果分別記錄在寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域中。此時(shí),由指令碼發(fā)布單元20發(fā)布的4個(gè)寄存器編號(hào)分配rd[6:0]、rsl[6:0、rs2[6:0和rs3[6:0分別占用7位中的最低6位rd[5:0、rsl[5:0、rs2[5:0]和rs3[5:0。這樣的一組指令碼同時(shí)分配M通運(yùn)^器121)用的%存器編號(hào)和供擴(kuò)y^運(yùn)算器12e用的寄存器編號(hào)。結(jié)果,如圖8A所示,采用SIMD方案時(shí)不使用寄存器編號(hào)分配的最高有效位rd[6、rsl問、rs2問和rs3[6。在SIMD模式下,生成單元30如圖7所示那樣對(duì)由指令碼發(fā)布單元20發(fā)布的指令碼叩code3:0以及4個(gè)寄存器編號(hào)分配rd[6:0]、rsl[6:0、rs2[6:0和rs6:0]進(jìn)行變換,并將指令集b—we、e—we、b—rd[6:0、b—rsl[6:0]、b—rs2[6:0、b—rs3[6:0、e_rd[6:0、e—rsl[6:0、e—rs2[6:0、e_rs3[6:0、b—op[l:0]和e—op[l:O]輸入到算術(shù)單元10中。此處,如圖7和8B所示,分別*通運(yùn)算器12b和擴(kuò)展運(yùn)算器12e用的各算術(shù)碼b—op[l:OI和e—opl:0]由指令碼中包含的指令種類碼的最低2位上的值叩code[l:0表達(dá)。同一算術(shù)碼總是輸入到算術(shù)運(yùn)算器和12e二者中,對(duì)此響應(yīng),算術(shù)運(yùn)算器12b和12e執(zhí)行同一種算術(shù)碼。在SIMD模式下,如圖7和8C所示,分別來自算木逸算器12b和12e的用于記錄在寄存器11中的控制信號(hào)b—we和e—we被設(shè)定為固定值'T,。這就將算術(shù)運(yùn)算器12b和12e所執(zhí)行的^術(shù)運(yùn)算^結(jié)果分別記錄在寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域中。如圖7所示,將指令碼中包含的4個(gè)寄存器編號(hào)分配的最低6位rd5:0j、rsl[5:0、rs2[5:0I和rs3[5:0輸入到寄存器11中以用作^"f通運(yùn)算器12b用的寄存器編號(hào)分配b一rd[5:0]、b—rsl[5:0、b—rs2[5:0和b_rs3[5:0。同時(shí),將同一數(shù)據(jù)rd[5:0、rsl[5:0]、rs2[5:0和rs3[5:0]輸入至〖寄存器11中以還用作供擴(kuò)展運(yùn)無器12e用的+存器編號(hào)分配e—rdl5:0J、e—rsl[5:0]、e—rs2[5:0和e—rs3[5:0]。此外,如圖7和8D所示,將供普通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位bjd6、b_rsl6、bjs2[6]和bjs3[6設(shè)定為固定值"0",并將供擴(kuò)展運(yùn)^器12e用的寄存i編號(hào)分配的最高有效位e一rd[6、e—rsl[6、ejs2問和ejs3問設(shè)定為固定值"1"。利用這些最高^效位,普通運(yùn)算器12b使用寄存器11的前半?yún)^(qū)域(寄存器編號(hào)0~63)中的寄存器值,而擴(kuò)展運(yùn)算器12e使用被定義為供普通運(yùn)算器12b用的寄存器編號(hào)與64之和的、寄存器后半?yún)^(qū)域(寄存器編號(hào)64~127)中的寄存器值。接下來,對(duì)在SIMD模式下進(jìn)行的詳細(xì)操作、即執(zhí)行例如simd-fnmsub%f40、%fl0、%f20、%f30的算絲算進(jìn)行說明。在這種情況下,算術(shù)單元10的算^算器12b和12e進(jìn)行如下不同的算^算在普通運(yùn)算器12b處%r[40—-%r[10]*%r[20+%r[30]在擴(kuò)>^運(yùn)算器12e處%r104—-%r[741*%r[84]+%r[94I在SIMD模式下,下表6中的指令碼中指定的指令種類碼opcode[3:0以及寄存器編號(hào)分配rd[6:0]、rsl[6:0、rs2[6:0和rs6:0的值被變換成用作下表7所示的向算^逸算器12b和12e中輸入的輸入信號(hào)的值。也就是說,M通運(yùn)算器12b用的寄存器編號(hào)分配和供擴(kuò)展運(yùn)算器12e用的寄存器編號(hào)分配具有由rd[5:0]、rsl[5:0]、rs2[5:0]和rs5:0表達(dá)的相同的最低6位,并分別具有要輸入到最高有效位中的固定值0和1。將同一算術(shù)碼"10"輸入到^通運(yùn)算器12b用的算術(shù)碼bjp[l:0]和供擴(kuò)展運(yùn)算器i:2e用的算術(shù)碼ejp[l:0中。由此,將不同的4不輸入值和同一算術(shù)碼從寄存器11輸入到^^:i器12b和12e中,對(duì)此響應(yīng),算&算器12b和12e對(duì)不同的輸入值執(zhí)行同一種算^算。由于記錄在寄存器11中的控制信號(hào)b_we和e—we都被設(shè)定為"1",因此由普通運(yùn)算器12b進(jìn)行的算術(shù)運(yùn)算"結(jié)果取得待記錄在寄存器11的前半?yún)^(qū)域中的寄存器值%r[40;而由擴(kuò)展運(yùn)算器12e進(jìn)行的算術(shù)運(yùn)算的結(jié)果取得待記錄在寄存器11的后半?yún)^(qū)域中的寄存器值。/。r[1041。〔表6〕<table>tableseeoriginaldocumentpage21</column></row><table>b_rs3[6:0]0011110(30)e一rd[6:0]1101000(104)e—rsl[6:01001010(74)e—rs2[6:0]1010100(84)e—rs3[6:01011110(94)(5)算術(shù)運(yùn)算裝置在將未使用的位^v使用的第一模式下進(jìn)行的操作圖9筒要地示出了由圖1所示的算術(shù)運(yùn)算裝置1的算術(shù)單元10在將未使用的位^使用的第一模式期間進(jìn)行的操作;圖10示出了由算^算裝置1中的指令碼發(fā)布單元(設(shè)定單元)20和生成單元30在第一模式期間進(jìn)行的操作;圖UA11D具體地示出了算術(shù)運(yùn)算裝置1在第一模式下的指令碼、算術(shù)碼、寄存器記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位);而圖12~15示出了要由圖l所示的算術(shù)運(yùn)算裝置l的算術(shù)單元10當(dāng)?shù)谝荒J奖徊捎脮r(shí)執(zhí)行的算術(shù)運(yùn)算的組合的具體實(shí)例。當(dāng)采用SIMD模式時(shí),普通運(yùn)算器12b和擴(kuò)展運(yùn)算器12e分別對(duì)寄存器11的前半?yún)^(qū)域中的值和寄存器11的后半?yún)^(qū)域中的值同時(shí)執(zhí)行同一種算術(shù)運(yùn)算。由算術(shù)運(yùn)算器12b和12e進(jìn)行的算術(shù)運(yùn)算的結(jié)果分別記錄在寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域中。因此,上述SIMD方案在單個(gè)算術(shù)運(yùn)算器12b或12e中不能使用來自寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域二者的操作數(shù)實(shí)現(xiàn)算術(shù)運(yùn)算。在第一模式下的操作除上述4個(gè)指令集simd-fmadd、simd-fmsub、simd-fnmsub、simd-fnmadd以夕卜,還具有4個(gè)才旨令集艮卩cross-fmaddl、cross國(guó)fmadd2、cross-fmadd3和cross-fmadd4(見圖11A)。如圖9的左側(cè)部分所示,這些附加指令集cross-fmaddl、cross-fmadd2、cross-fmadd3和cross-fmadd4都是將寄存器11的后半?yún)^(qū)域的值切換成i^普通運(yùn)算器12b的3個(gè)操作數(shù)并Jbf目反地將寄存器11的前半?yún)^(qū)域的值切換成ii/v擴(kuò)展運(yùn)算器12e的3個(gè)操作數(shù)的指令。具體地,這些指令4吏來自寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域的值分別交叉輸入到擴(kuò)展運(yùn)算器12e和普通運(yùn)算器12b中。在第一模式下,允許算術(shù)運(yùn)算器12b和12e執(zhí)行不同的算術(shù)運(yùn)算。與在SIMD方案中使用的指令碼類似,這些指令集cross-fmaddl、......、cross-fmadd4使用各寄存器編號(hào)分配rd[6:0]、rsl[6:0]、rs2[6:0]和rs3[6:0的7位中的最低6位rd[5:0]、rsl[5:0、rs2[5:0和rs3[5:0而不4吏用最高有效位rd[6]、rsl[6、rs2[6和rs3[6。在下面詳細(xì)說明的第一模式(將未使用的位^使用的第一模式)使用各指令集cross-fmaddl........cross-fmadd4中的4個(gè)未使用的位rd[6、rsl[6、rs2問和rs3[6]中的2位(具體地,rsl[6和rs2問)。用作設(shè)定單元的指令碼發(fā)布單元20在這2個(gè)未使用的位rsl問和rs2[6中設(shè)定擴(kuò)展指令信息,該擴(kuò)展指令信息指示寄存器ll和算^算器12b、12e執(zhí)行與根據(jù)不寸吏用rsl問和rs2[6的指令集cross國(guó)fmaddl、……、cross-fmadd4進(jìn)行的普通處理不同的擴(kuò)展處理(例如,參見圖12~15所示的算術(shù)運(yùn)算的組合)。如后面參照?qǐng)D10和11A11D所說明的那樣,基于在未使用的位中設(shè)定的擴(kuò)展指令信息和在除未使用的位以外的位中設(shè)定的信息,生成單元30生成指示寄存器11和算術(shù)運(yùn)算器12b、12e執(zhí)行擴(kuò)展處理的擴(kuò)展指令。由此,如圖9的右側(cè)部分所示,允許各算術(shù)運(yùn)算器12b和12e使用來自寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域二者的輸入值來執(zhí)行算術(shù)運(yùn)算。特別地,在未使用的位rsl[6和rs2[6中設(shè)定執(zhí)行擴(kuò)展處理的擴(kuò)展指4^f吏得可以將來自寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域二者的2個(gè)操作數(shù)輸入到各算^J逸算器12b和12e中。因而,由上式(1-1)~(1-4)的4次算和逸算(即4個(gè)指令)執(zhí)行的復(fù)數(shù)矩陣乘積運(yùn)算可如后面說明那樣通過2個(gè)指令來進(jìn)行。在采用將未使用的位投入使用的第一模式時(shí)(即,在執(zhí)行由指令cross-fmaddl........cross-fmadd4指定的算術(shù)運(yùn)算時(shí)),將由指令碼發(fā)布單元20發(fā)布的指令種類碼的最高2位opcode[3:2]設(shè)定為"11"。下面,參照?qǐng)D10~15說明在將未使用的位^v使用的第一模式下算術(shù)運(yùn)算裝置1進(jìn)行的操作。在第一模式下,生成單元30如圖10所示那樣對(duì)由指令碼發(fā)布單元20發(fā)布的指令碼叩code[3:0以及4個(gè)寄存器編號(hào)分配rd[6:0]、rsl[6:0、rs2[6:0和rs3[6:0]進(jìn)行變換,并將指令集b_we、e—we、b_rd[6:0、b_rsl[6:0]、bjrs2[6:0、b—rs3[6:0]、e_rd[6:0、e—rsl[6:0、e_rs2[6:0]、e—rs3[6:0、b—op[l:0]和e—op[l:0輸入到算術(shù)單元10中。此處,在指令集cross-fmaddl........cross-fmadd4中,如圖10、11B和下表8所示,基于指令碼的指令種類碼中包含的最低2位的值opcode[l:O],生成分別要在算術(shù)運(yùn)算器12b和12e中進(jìn)行的算術(shù)運(yùn)算用的諫術(shù)碼bjp[l:0]和e—op[l:0。與上述SIMD方案不同,算術(shù)運(yùn)算器和12e彼此獨(dú)立地切i:要執(zhí)行的算^算的種類,從而算^it算器12b和12e在某一時(shí)刻可執(zhí)行同一種算術(shù)運(yùn)算或可執(zhí)行不同的算術(shù)運(yùn)算。〔表8〕<table>tableseeoriginaldocumentpage24</column></row><table>如圖10和11C所示,對(duì)于第一模式,在分別來自算術(shù)運(yùn)算器12b和12e的用于記錄在寄存器11中的控制信號(hào)1^we和e一we中設(shè)定固定值"l"。這就將算術(shù)運(yùn)算器12b和12e所執(zhí)行的算&算的結(jié)果分別記錄在寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域中。如圖10所示,對(duì)于普通運(yùn)算器12b用的寄存器編號(hào)分配b—rd[5:0、b_rsl[5:0]、bjs2[5:0和b—rs3[5:0,將指令碼中包含的4個(gè)"^存器編號(hào)分配的最低6位rd[5:0、rsl[5:0、rs2[5:0和rs3[5:0輸入到寄存器11中。同時(shí),同一數(shù)據(jù)rd[5:0、rsl[5:0、rs2[5:0]和rs3[5:0亦用作擴(kuò)屑J逸算器12e用的寄存器編號(hào)分配e—rd[5:0]、e_rsl[5:0]、e—rs2[5:0和e_rs3[5:0],其也輸入到寄存器11中。如圖10、11D和下表9所示,在供普通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位bjd問和b—rs3[6]中設(shè)定固定值"0"并在供擴(kuò)^J逸算器12e用的寄存器編號(hào)分配的襄高有效位e—rd[6]和e_rs3[6]中設(shè)定固定值'T,。與^目比,將基于寄存器編號(hào)分配"最高有^T位rsl[6]和rs2問的值(即,擴(kuò)展指4H言息)和指令種類碼叩code[l:O]計(jì)算和生成的值輸入到供普通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位bjsl[6和bjs2[6]以及供擴(kuò)展運(yùn)算器12e用的寄存器編號(hào)分配的最高有效位ejsl問和e_rs2[6I。如圖10、11D和下表9所示,該輸入值是依據(jù)指令種^:碼、基于寄存器編號(hào)分配的最高有效位rsl問和rs2[6的值而生成的。由此,各自來自寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域之一的2個(gè)值可用作各算^算器12b和12e中的算^算用的操作數(shù)。也就是說,在未使用的位rs1[6]和rs2[6中設(shè)定的擴(kuò)展指令信息指示寄存器11將待輸入至算術(shù)運(yùn)算器12b和12e之一的值從分配給該算術(shù)運(yùn)算器之一的區(qū)域中的值切換成分配給另一算術(shù)運(yùn)算器的區(qū)域中的值。此處,"X"代表"X"的相反值。〔表9〕指令種類碼b一rsl[6(圖10中的al)b一rs2[6(圖10中的a2)e一rsl[6(圖10中的a3)e一rs2[6](圖10中的a4)cross國(guó)fmaddlrsl[6]rs2[6]rsl[6]rs2[6cross-fmadd2~rsl[6rs2[6Jrsl問rs2[6cross畫fmadd3~rsl[6rs2[6rsl[6rs2[6cross-fmadd4~rsl[6]rs2[6]~rsl[6rs2問接下來,對(duì)在將未使用的位^使用的第一模式下進(jìn)行的操作實(shí)例、即執(zhí)行算^it算"cross-fmaddl%G0、%fl0、%f20、%f30"進(jìn)行說明。在這種情況下,算術(shù)單元10的算^:算器12b和12e執(zhí)行以下2個(gè)算^算。在普通運(yùn)算器12b處%r[30*~%r[10*%r[20]+%r[30J在擴(kuò)展運(yùn)算器12e處%r[94卄%r[10*%r[84]+%r[94]這2個(gè)算術(shù)運(yùn)算對(duì)應(yīng)于以下復(fù)數(shù)算術(shù)運(yùn)算,該復(fù)數(shù)算術(shù)運(yùn)算使用分別從寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域讀取其實(shí)部和其虛部的操作數(shù)。X—X+A*C(1-1)Y—Y+A*D(1-2)在這種情況下,由下表10所示的指令碼指定的指令種類碼叩code[3:0]和寄存器編號(hào)分配rd6:0、rsl[6:0、rs2[6:0、rs3[6:0的值被變換成下表11所示的供算"算器12b和12e用的輸入信號(hào)的值,并被輸入到寄存器11中。具體地,如下表10所示,從指令碼發(fā)布單元20發(fā)布的指令種類碼opcode[3:0]被設(shè)定為"1100",用作設(shè)定單元的指令碼發(fā)布單元20在未使用的位rsl[6和rs6中設(shè)定"0"和"0"(參見后面說明的圖12的左上實(shí)例)。根據(jù)這些值,生成單元30基于表9和圖11D中的等式計(jì)算和設(shè)定0、0、0和0,用于供普通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位b_rd[6、b_rsl[6、bjs2[6和bjs3[6(參見下表11)。以相同的方式,生1單元30計(jì)算和設(shè)定1、0、l和l,用于供擴(kuò)展運(yùn)算器12e用的寄存器編號(hào)分配的最高有效位ejd[6、e—rsl[6、e—rs2[6和e_rs3[6](參見下表ll)。將如圖11B和上表8所示的依據(jù)指令種類碼叩code[l:0]決定的算術(shù)碼"00"和"00"分別輸入到算術(shù)運(yùn)算器12b和12e中。因而,在25本例中,算術(shù)運(yùn)算器12b和12e執(zhí)行同一種算術(shù)運(yùn)算(fmadd)。將相同值rd[5:0]、rsl[5:0]、rs2[5:0]和rs3[5:0]輸入到供普通運(yùn)算器12b用的寄存器編號(hào)分配和供擴(kuò)展運(yùn)算器12e用的寄存器編號(hào)分配的最低6位。如圖12的左上實(shí)例所示,普通運(yùn)算器12b然后對(duì)輸入值執(zhí)行基于上式(l-l)的算術(shù)運(yùn)算,該輸入值表達(dá)為由寄存器編號(hào)分配的最高有效位b—rsl[6、b—rs2[6]、b—rs3[6=0、0、O選擇的、且位于寄存器的前半?yún)^(qū)域的3個(gè)操作數(shù)即A(%rrsl=%r[10)、C(%r[rs2]=%r[20)和X(%r[rs3=%r[30)。同時(shí),如圖12的左上實(shí)例所示,擴(kuò)展運(yùn)算器12e對(duì)輸入值執(zhí)行基于上式(l-2)的算術(shù)運(yùn)算,該輸入值表達(dá)為由寄存器編號(hào)分配的最高有效位e—rsl[6]、e_rs2[6]、e_rs6]=0、1、1選擇的操作數(shù)A、D和Y,即位于寄>器的前萃區(qū)域的<個(gè)操作數(shù)A(。/。r[rslh。/。r[10])和位于寄存器的后半?yún)^(qū)域的2個(gè)操作數(shù)D(%r[N+rs2]=%r[84])和Y(%r[N+rs3I=%r[94])。算術(shù)運(yùn)算器12b和12e將對(duì)不同操作數(shù)進(jìn)行的同一種算術(shù)運(yùn)算的結(jié)果輸出至寄存器11。在第一模式下,在分別來自算^算器12b和12e的用于記錄在寄存器11中的控制信號(hào)b_we和e_we二者中設(shè)定固定值'T,。因此,由普通運(yùn)算器12b進(jìn)行的算^運(yùn)算的結(jié)果取得要記錄在寄存器11的前半?yún)^(qū)域中的寄存器值yor[rdt。/。r[30,類似地,由擴(kuò)展運(yùn)算器12e進(jìn)行的算^逸算的結(jié)果取得要記錄在寄存器11的后半?yún)^(qū)域中的寄存器值。/。r[N+rdh。/。r[94。也就是說,可根據(jù)單個(gè)指令執(zhí)行上式(l-l)和(l-2)的2個(gè)算術(shù)運(yùn)算,類似地,可依照單個(gè)指令來執(zhí)行由上式(l-3)和(l-4)表達(dá)的算術(shù)運(yùn)算?!脖鞩O〕指令碼值opcode[3:011100(cross-fmaddl)rd[6:0]0011110(30)rsl6:00001010(10)rs2[6:00010100(20)rs3[6:0]0011110(30)〔表ll〕輸入信號(hào)值26<table>tableseeoriginaldocumentpage27</column></row><table>上述實(shí)例假設(shè)指令種類碼opcode[3:0被設(shè)定為"1100"并且未4吏用的位rsl[6和rs2[6都被設(shè)定為"0"。然而,將未使用的位^v使用的第一模式可實(shí)現(xiàn)算W算的其它15種組合,這將參照?qǐng)D12~15來詳細(xì)說明。圖12示出了在指令種類碼叩code[3:04100的情況下的算術(shù)運(yùn)算的4種組合,其中算術(shù)運(yùn)算器12b和12e執(zhí)行同一種算術(shù)運(yùn)算fmadd。在這種情況下,如果未使用的位(最高有效位)rsl[6]和rs2[6]都被設(shè)定為"0",則寄存器編號(hào)分配的最高有效位b_rsl[6]、b—rs2[6]、b_rs3[6都是"0"且寄存器編號(hào)分配的最高有效位e—rsl[6卜e—rs2[6和e_rs3[6分別是0、l和l。因而,如圖12的左上實(shí)例所示,普i運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的3個(gè)操作數(shù)。/。r[rs1]、。/。r[rs2和。/。r[rs3作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rsl]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rs2和。/。r[N+rs3]作為輸入值而執(zhí)行算^:算(fmadd)。如果未使用的位(最高有效位)rsl[6]和rs2[6分別被設(shè)定為"0"和'T,,則寄存器編號(hào)分配的最高有效位b_rsl[61、b—rs2[6]和bjs3[6分別是0、1和0且寄存器編號(hào)分配的最高有效位e—rsl問、e—rs2[6]和e—rs3問分別是0、0和1。因而,如圖12的左下實(shí)例所示,普ii運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)V。r[rsl]和。/。r[rs3和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rs2作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò);^運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)"/。r[rsl和。/or[rs2和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rs3]作為輸入值而執(zhí)行算^M:算(fmadd)。如果未使用的位(最高有效位)rsl[6和rs2[6分別被設(shè)定為'T,和"0",則寄存器編號(hào)分配的最高有效位b_rsl[6、bjs2[6]和b—rs3[6分別是1、0和0且寄存器編號(hào)分配的最高有效位e_rsl[6]、e—rs2[6和e—rs3[6分別是l、l和l。因而,如圖12的右上實(shí)例所示,普ii運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rs2]和。/。r[rs3和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rsl作為輸入值而執(zhí)行i^算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的后半?yún)^(qū)域的3個(gè)操作數(shù)。/。r[N+rsl、。/。r[N+rs2]和。/。r[N+rs31作為輸入值而執(zhí)行算^i^算(fmadd)。如果未使用的位(最高有效位)rsl[6和rs2[6都被設(shè)定為'T,,則寄存器編號(hào)分配的最高有效位b_rsl[6、bjs2[6]和bjs3問分別是1、1和0且寄存器編號(hào)分配的最高有效位ejs1[6、ejs2[61和ejs3[6分別是l、0和l。因而,如圖12的右下實(shí)例^示,普i運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rs3]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/or[N+rsl]和。/。r[N+rs2作為輸入值而執(zhí)行算^:算(fmadd)。擴(kuò)屑_運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rs2]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rsl]和。/or[N+rs3]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。圖13示出了在指令種類碼叩code[3:0^1101的情況下的算術(shù)運(yùn)算的4種組合,其中普通運(yùn)算器12b和擴(kuò)展運(yùn)算器12e分別執(zhí)行算術(shù)運(yùn)算fnmsub和fmadd。在這種情況下,如果未使用的位(最高有效位)rsl[6和rs2[6都被設(shè)定為"0",則寄存器編號(hào)分配的最高有效位b_rsl[6]、bjs2[6和b_rs3[6]分別是1、1和0且寄存器編號(hào)分配的最高有效位e_rsl[6、e—rs2[6和ejs3[6分別是1、0和1。因而,如圖13的左上實(shí)例所示,普通運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rs3]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/or[N+rsll和o/or[N+rs2作為輸入值而執(zhí)行算術(shù)運(yùn)算(fnmsub)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/or[rs2和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rsl和0/。r[N+rs31作為輸入值而執(zhí)行算^算(fmadd)。如果未使用的位(最高有效位)rsl[6和rs2[6分別被設(shè)定為"0"和'T,,則寄存器編號(hào)分配的最高有效位b—rsl[6、b—rs2[6和bjs3[6]分別是1、0和0且寄存器編號(hào)分配的最高有效位e—rsl[6、e—rs2[6和e—rs3[6]分別是l、l和l。因而,如圖13的左下實(shí)例;斤示,普ii運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rs2]和Y。r[rs3和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/or[N+rsl作為輸入值而執(zhí)行算術(shù)運(yùn)算(fnmsub)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的后半?yún)^(qū)域的3個(gè)操作數(shù)。/"[N+rs1]、。/。r[N+rs2和y。r[N+rs3作為輸入值而執(zhí)行算^il算(fmadd)。如果未使用的位(最高有效位)rsl[6和rs2[6分別被設(shè)定為"r,和"0",則寄存器編號(hào)分配的最高有效位b_rsl[6]、b—rs2[6和b—rs3[6分別是0、1和0且寄存器編號(hào)分配的最高有效位e—rsl問、e—rs2問和e—rs3問分別是0、0和1。因而,如圖13的右上實(shí)例;斤示,普ii運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rsl]和。/。r[rs3]和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rs21作為輸入值而執(zhí)行算術(shù)運(yùn)算(fnmsub)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rsl]和。/。r[rs2和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/or[N+rs3]作為輸入值而執(zhí)行算^ii:算(fmadd)。如果未使用的位(最高有效位)rsl[6和rs2[6]都被設(shè)定為'T,,則寄存器編號(hào)分配的最高有效位bjs1[6、bjs2問和bjs3[6]分別是0、0和0且寄存器編號(hào)分配的最高有效位e—rsl問、e—rs2[6和ejs3[6]分別是0、1和l。因而,如圖13的右下實(shí)例^示,普ii運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的3個(gè)操作數(shù)。/。r[rsl、0/。r[rs2和。/。r[rs3]作為輸入值而執(zhí)行算^^算(fnmsub)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rsl]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rs2和%r[N+rs3作為輸入值而執(zhí)行算^算(fmadd)。圖14示出了在指令種類碼叩code[3:04110的情況下的算^逸算的4種組合,其中普通運(yùn)算器12b和擴(kuò)展運(yùn)算器12e分別執(zhí)行算絲算fmadd和fnmsub。在這種情況下,如果未使用的位(最高有效位)rsl[6]和rs2[6]都,皮設(shè)定為"0",則寄存器編號(hào)分配的最高有效位b_rsl[6、b_rs2[6]、b—rs3[6分別是1、1和0且寄存器編號(hào)分配的最高j效位e—rsl[6、e—rs2[6和e一rs3[6]分別是l、0和1。因而,如圖14的左上實(shí)例所示,普i運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/or[rs3和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rsl和。/or[N+rs2作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)V。r[rs2和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)o/"[N+rsl、%r[N+rs3作為輸入值而執(zhí)行算^it算(fnmsub)。如果未使用的位(最高有效位)rsl問和rs2[6]分別被設(shè)定為"0"和'T',則寄存器編號(hào)分配的最高有效位b_rsl[6]、bjs2[6]和bjs3[6分別是1、0和0且寄存器編號(hào)分配的最高有效位e—rsl問、e—rs2[6和e—rs3[6分別是l、l和l。因而,如圖14的左下實(shí)例7斤示,普通運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rs2和。/。r[rs3和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)Y。r[N+rsl]作為輸入值而執(zhí)行^術(shù)運(yùn)算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的后半?yún)^(qū)域的3個(gè)操作數(shù)。/。r[N+rsl、0/。r[N+rs2和o/or[N+rs3作為輸入值而執(zhí)行算^:算(fnmsub)。如果未使用的位(最高有效位)rsl[6和rs2[6分別被設(shè)定為"l"和"0",則寄存器編號(hào)分配的最高有效位b—rsl[6、b_rs2[6、bjs3[6分別是0、1和0且寄存器編號(hào)分配的最高有效位e_rsl[6]、e—rs2[6]和ejs3問分別是0、0和1。因而,如圖14的右上實(shí)例所示,普i運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rsl和。/。r[rs3]和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/or[N+rs2]作為輸入值而執(zhí)行^^iS算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rsl]和。/。r[rs2和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/or[N+rs3]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fnmsub)。如果未使用的位(最高有效位)rsl[6和rs2[6]都被設(shè)定為"1",則寄存器編號(hào)分配的最高有效位b—rsl[6]、b—rs2[6]和bjs3問分別是0、0和0且寄存器編號(hào)分配的最高有效位ejs1[6、ejs2[6和ejs3[6]分別是0、1和l。因而,如圖14的右下實(shí)例^"示,普i運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的3個(gè)操作數(shù)。/or[rs1]、。/or[rs2和。/。r[rs2]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)屑_運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)^作數(shù)。/。r[rsl和來自寄存器11的后半?yún)^(qū)域的2個(gè)^Mt數(shù)。/。r[N+rs2和y。r[N+rs3作為輸入值而執(zhí)行算^算(fnmsub)。圖15示出了在指令種類碼opcode[3:0h1111的情況下的算^i逸算的4種組合,其中算^逸算器12b和12e執(zhí)行同一種算^逸算fnmsub。在這種情況下,如果未使用的位(最高有效位)rsl[6和rs2[6]都被設(shè)定為"0",則寄存器編號(hào)分配的最高有效位b_rsl[6、b_rs6、b_rs3[6分別是1、0和0且寄存器編號(hào)分配的最高有效位e—rsl[6、e—rs2[6和ejs3[6分別是1、l和l。因而,如圖15的左上實(shí)例所示,普i運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rs2和。/。r[rs3和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/or[N+rsl作為輸入值而執(zhí)行算^il算(fnmsub)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的后半?yún)^(qū)域的3個(gè)操作數(shù)%r[N+rsl、%r[N+rs2]和%r[N+rs3作為輸入值而執(zhí)行算術(shù)運(yùn)算(fnmsub)。如果未使用的位(最高有效位)rsl[6和rs2[6]分別被設(shè)定為"0"和"l",則寄存器編號(hào)分配的最高有效位b—rsl[6]、b_rs2[6、bjs3[6分別是1、1和0且寄存器編號(hào)分配的最高有效位e_rsl[6、e—rs2[6]和e—rs3[6]分別是1、0和1。因而,如圖15的左下實(shí)例所示,普ii運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的單個(gè)^^作數(shù)。/or[rs3]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/or[N+rsl]和。/。r[N+rs2作為輸入值而執(zhí)行算術(shù)運(yùn)算(fnmsub)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rs2和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rsl和。/。r[N+rs3]作為輸入值而執(zhí)行算^^算(fnmsub)。如果未使用的位(最高有效位)rsl[6和rs2[6]分別被設(shè)定為"l"和"0",則寄存器編號(hào)分配的最高有效位b—rsl[6、bjs2[6和bjs3[6分別是0、0和0且寄存器編號(hào)分配的最高有效位e_rsl[61、e—rs2[6]和e—rs3[6分別是0、l和l。因而,如圖15的右上實(shí)例所示,普通運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的3個(gè)操作數(shù)。/。r[rs1]、0/。r[rs2]和。/。r[rs3]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fnmsub)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rsl和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rs2I和。/。r[N+rs3]作為輸入值而執(zhí)行算^i^算(fnmsub)。如果未使用的位(最高有效位)rsl[6]和rs2問都被設(shè)定為'T,,則寄存器編號(hào)分配的最高有效位b_rsl[6]、bjs2問和b—rs3[6]分別是0、1和0且寄存器編號(hào)分配的最高有效位e—rsl[6]、e—rs2[6]和e—rs3[6分別是0、0和l。因而,如圖15的右下實(shí)例^"示,普ii運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rsl]和。/。r[rs3I和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/or[N+rs2作為輸入值而執(zhí)行算術(shù)運(yùn)算(fnmsub)。擴(kuò)展運(yùn)算器12e使用來自+存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rsl]和。/。r[rs2和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/or[N+rs3]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fnmsub)。(6)算術(shù)運(yùn)算裝置在將未使用的位^使用的第二模式下進(jìn)行的操作圖16簡(jiǎn)要地示出了由圖1所示的算術(shù)運(yùn)算裝置1的算術(shù)單元10在將未使用的位^使用的笫二模式期間進(jìn)行的操作;圖17示出了由算^算裝置1中的指令碼發(fā)布單元(設(shè)定單元)20和生成單元30在第二模式期間進(jìn)行的操作;圖18A~18D具體地示出了算術(shù)運(yùn)算裝置1在第二模式下的指令碼、算術(shù)碼、i^寄存器11的記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位)。對(duì)于上述將未使用的位^JM吏用的第一模式,已參照?qǐng)D12~15對(duì)擴(kuò)展處理的執(zhí)行指轉(zhuǎn)了說明,該指令是使用在指令集cross-fmaddl........cross-fmadd4中設(shè)定的未使用的位rsl[6和rs2[6而實(shí)現(xiàn)的。除了上述第一模式下的操作以外,此處要詳細(xì)說明的第二模式使用已參照?qǐng)D6、7和8A8Di兌明的SIMD方案中的指令集simd-fmadd、simd-fmsub、simd-fnmsub、simd-fnmadd的未使用的位rd問、rsl[6、rs2[6和rs3[6。在這些未4吏用的位rd[6、rsl[6、rs2[6]和rs3問中,特別4吏用2個(gè)位rsl[6]和rs2[6]。用作設(shè)定單元的指令碼發(fā)布單元20在這2個(gè)未使用的位rsl[6和rs2[6]中設(shè)定擴(kuò)展指4Ht息,該擴(kuò)展指^Ht息指示寄存器11和算^算器12b、12e執(zhí)行與根據(jù)不使用rsl[6和rs2[6]的指令集simd-fmadd、simd-fmsub、simd-fnmsub、simd-fnmadd進(jìn)行的普通處理(參見圖16的左側(cè)實(shí)例)不同的擴(kuò)展處理。如后面參照?qǐng)D17和18A~18D所說明的那樣,基于在未使用的位中設(shè)定的擴(kuò)展指令信息和在除未使用的位以外的位中設(shè)定的信息,生成單元30生成指示寄存器ll和算術(shù)運(yùn)算器12b、12e執(zhí)行擴(kuò)展處理的擴(kuò)展指令。由此,如圖16的右側(cè)實(shí)例所示,允許各算術(shù)運(yùn)算器12b和12e使用來自寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域二者的輸入值來執(zhí)行算術(shù)運(yùn)算。特別地,在未使用的位rsl[6和rs2[6]中設(shè)定執(zhí)行擴(kuò)展處理的擴(kuò)展指^H吏得可以將來自寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域二者的2個(gè)操作數(shù)輸入到各算術(shù)運(yùn)算器12b和12e中。這種擴(kuò)展處理可增加SIMD方案中供算術(shù)運(yùn)算用的寄存器組合的數(shù)量。除了復(fù)數(shù)算術(shù)運(yùn)算以外,還可對(duì)來自單個(gè)寄存器的前半?yún)^(qū)域和后半?yún)^(qū)域二者的操作數(shù)的各種組合進(jìn)行各種算術(shù)運(yùn)算。在采用將未使用的位投入使用的第二模式時(shí)(即,在執(zhí)行由指令集simd國(guó)fmadd、simd-fmsub、simd-fnmsub、simd-fnmadd指定的算^i^算時(shí)),由指令碼發(fā)布單元20發(fā)布的指令種類碼的最高2位叩code[3:2被定為"01"。下面參照?qǐng)D17和18A18D說明在將未使用的位^JV使用的第二模式下算術(shù)運(yùn)算裝置1所進(jìn)行的操作。在第二模式下,生成單元30如圖17所示那樣對(duì)由指令碼發(fā)布單元20發(fā)布的指令碼叩code[3:0以及4個(gè)寄存器編號(hào)分配rd[6:0卜rsl[6:0、rs2[6:0和rs3[6:0進(jìn)行變換,并將指令集b—we、e_we、b_rd[6:0、b—rsl[6:0、b—rs2[6:0]、b一rs3[6:0、e一rd[6:0、e一rsl[6:0]、e—rs2[6:0]、e—rs3[6:0]、b_op[l:0]、e—op[l:0]輸入到算術(shù)單元10中。此處,如圖17和18B所示,分別供算術(shù)運(yùn)算器12b和12e用的算術(shù)碼b—op[l:0和e—op[l:0取得指令碼中包含的指令種類碼的最低2位的值opcode[l:0。同一如術(shù)碼總是輸入到算術(shù)運(yùn)算器Ub和Ue中,從而算術(shù)運(yùn)算器12b和12e執(zhí)行同一種算術(shù)運(yùn)算。如圖17和18C所示,對(duì)于第二才莫式,在分別來自算術(shù)運(yùn)算器12b和12e的用于記錄在寄存器11中的控制信號(hào)b—we和e_we中設(shè)定固定值'T,。這就將算術(shù)運(yùn)算器12b和12e所進(jìn)行的算&算的結(jié)果分別記錄在寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域中。如圖17所示,對(duì)于普通運(yùn)算器12b用的寄存器編號(hào)分配bjd[5:0、b—rsl[5:0卜b—rs2[5:0]和b_rs3[5:01,將指令碼中包含的4個(gè)一>器編號(hào)分配的最低6位rd[5:0、rsl[5:0、rs2[5:0]和rs3[5:0]輸入到寄存器11中。同時(shí),同一數(shù)據(jù)rd[5:0、rsl[5:0、rs2[5:0和rs3[5:0亦用作擴(kuò)屑j逸算器12e用的寄存器編號(hào)分配e—rd[5:0、e—rsl[5:0]、e—rs2[5:0]和e_rs3[5:0],其被輸入到寄存器11中。如圖17和18D所示,在供普通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位bjd[6和bjs3[6]中設(shè)定固定值"0",并在供擴(kuò);^運(yùn)算器12e用的寄存器編號(hào)分配的最高有效位ejd[6]和e一rs3[6]中設(shè)定固定值"1"。與4^目比,將值rsl[6]和rs2[6]分別輸入到"通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位bjsl[6]和b_rs2[6中。此夕卜,將值rsl[6]和rs2[6分別輸入到供擴(kuò)展運(yùn)算器12e用的f存器編號(hào)分配的最高有效位e_rsl6和ejs2[61中。也就是說,在未使用的位rsl[6]和rs2[6]中設(shè)定的擴(kuò)^指令信息指示寄存器11將待輸入至算術(shù)運(yùn)算器12b和12e之一的值從分配給該算術(shù)運(yùn)算器之一的區(qū)域中的值切換成分配給另一算術(shù)運(yùn)算器的區(qū)域中的值。此處,"X"代表"X"的相>^值。接下來,對(duì)在將未使用的位^使用的第二模式下進(jìn)行的操作實(shí)例、即執(zhí)行算絲算"simd-fnmsub%f40、%flO、%f80、%D0,,進(jìn)行說明。在這種算術(shù)運(yùn)算中,算術(shù)單元10的算術(shù)運(yùn)算器12b和12e執(zhí)行以下2個(gè)算^算。在普通運(yùn)算器12b處%r[40]—%r[10]*%r[80]-°/。r[30在擴(kuò)>^運(yùn)算器12e處%r104—%r74]*%r[16I-%r[94在這種情況下,由下表12所示的指令碼指定的指令種類碼叩code[3:0]和寄存器編號(hào)分配rd[6:0、rsl[6:0、rs2[6:0]、rs3[6:0的值被變換成下表13所示的要輸入到算^:算器12b和12e中的值,并被輸入到寄存器11中。具體地,如下表12所示,從指令碼發(fā)布單元20發(fā)布的指令種類碼叩code[3:0被設(shè)定為"0101",且用作設(shè)定單元的指令碼發(fā)布單元20在未使用的位rsl[6和rs2[6中分別設(shè)定值"0"和'T,。根據(jù)這些值,基于表9和圖18D中的等式,生成單元30在^通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位b_rd[6、b_rsl[6、b—rs2[6和b_rs3[6中計(jì)算和設(shè)定0、0、l和0(參見下表13)。以相同的方式,生成單元30;供擴(kuò)>^運(yùn)算器用的寄存器編號(hào)分配的最高有效位ejd[61、e_rsl[6、ejs2問和e—rs3[6中計(jì)算和設(shè)定l、o、l和l(參見下il3)。將同一算術(shù)碼"01"輸入到算術(shù)運(yùn)算器12b和12e的算術(shù)碼b—叩[l:01和ejp[l:0中。因而,在本例中,算術(shù)運(yùn)算器12b和12e執(zhí)行同一it算術(shù)運(yùn)算。^P相同的值rd[5:0、rsl[5:0]、rs2[5:0和rs3[5:0]輸入到^f通運(yùn)算器12b用的寄存器編號(hào)分配和供擴(kuò)展運(yùn)算器12e用的寄存器編號(hào)分配的最低6位中。普通運(yùn)算器12b然后對(duì)輸入值執(zhí)行算術(shù)運(yùn)算(fnmsub),該輸入值表達(dá)為由寄存器編號(hào)分配的最高有效位b—rs1[6]、b—rs2[6、b_rs3[6=0、1、0選擇的3個(gè)操作數(shù),即位于寄存器11的前半?yún)^(qū)域Sl2個(gè)操作數(shù)。/。r[rsll-o/。r[10和。/。r[rs3h。/or[30]和位于寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rs2^。/or[80]。同時(shí),擴(kuò)展運(yùn)算器12e使用這樣的值來執(zhí)行算^算該值表達(dá)為由+存器編號(hào)分配的最高有效位e_rsl[6]、e—rs2[6、e—rs3[6]=l、0、1選擇的3個(gè)操作數(shù),即位于寄存器11的前半?yún)^(qū)^的單個(gè)^作數(shù)o/。r[N+rs2h。/"[16和位于寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)%r[N+rsl]-。/or[74]和。/。r[N+rs3h。/or[94]。算術(shù)運(yùn)算器12b和12e將對(duì)不同操作數(shù)進(jìn)行的同一種算^it算的結(jié)果輸出至寄存器11。在第二模式下,在分別來自算術(shù)運(yùn)算器12b和12e的用于記錄在寄存器11中的控制信號(hào)b_we和e_we中設(shè)定固定值'T,。因此,普通運(yùn)算器12b所進(jìn)行的算^^的結(jié)^取得要記錄在寄存器11的前半?yún)^(qū)域中的寄存器值%r[rd]=%r[40,類似地,擴(kuò)展運(yùn)算器12e所進(jìn)行的算^算的結(jié)果取得要記錄在寄存器11的后半?yún)^(qū)域中的寄存器值。/or[rd=%r[104。〔表12〕<table>tableseeoriginaldocumentpage35</column></row><table>上述實(shí)例假設(shè)指令種類碼叩code[3:0被設(shè)定為"0101",并且未使用的位rsl[6]和rs2[6分別被設(shè)定為"0"和"1"。然而,將未使用的位投入使用的第二模式可實(shí)現(xiàn)算術(shù)運(yùn)算的其它組合。此處,opcode[l:0]從算^算器12b和12e要進(jìn)行的4個(gè)算術(shù)運(yùn)算中選擇一個(gè)算術(shù)運(yùn)算,且未使用的位rsl[6和rs2[6的值指定并選擇要從寄存器11的前半?yún)^(qū)域或后半?yún)^(qū)域輸入到各算術(shù)運(yùn)算器12b和12e中的2個(gè)操作數(shù)(即,要進(jìn)行乘積運(yùn)算的操作數(shù))。如果未使用的位(最高有效位)rsl[6和rs2問都被設(shè)定為"0",則寄存器編號(hào)分配的最高有效位b_rsl[6]、bjs2[6]和b—rs3[6]是0、0和0且寄存器編號(hào)分配的最高有效位e—rsl[6]、e—rs6和e—rs6]分別是1、1和1。因而,普通運(yùn)算器12b使用i自寄存器11的前半?yún)^(qū)域的3個(gè)操作數(shù)。/。r[rsl、。/。r[rs2I和。/。r[rs3]作為輸入值而執(zhí)行算^:算。擴(kuò)屑j逸算器12e使用來自寄存器11的后半?yún)^(qū)域的3個(gè)操作數(shù)。/。r[N+rsl、。/"[N+rs2和0/or[N+rs3作為輸入值而執(zhí)行算^算。如果未使用的位(最高有效位)rsl[6和rs2[6分別被設(shè)定為"0"和"l",則寄存器編號(hào)分配的最高有效位b—rs1[6]、b—rs2[6]和b—rs6是0、l和0且寄存器編號(hào)分配的最高有效位e—rsl[6]、ejs2[6和e—rs3[6]分別是1、0和1。因而,普通運(yùn)算器12b使用i自寄存gl1的前半?yún)^(qū)域的2個(gè)操作數(shù)。/"[rsl和。/。r[rs3I和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rs2作為輸入值而執(zhí)行算"算。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rs2]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)y。r[N+rsl和。/or[N+rs3]作為輸入值而執(zhí)行算^i^算。如果未使用的位(最高有效位)rsl問和rs2[6分別被設(shè)定為"l"和"0",則寄存器編號(hào)分配的最高有效位b—rsl[6]、bjs2[6和bjs3[6是l、0和0且寄存器編號(hào)分配的最高有效位e—rsl問、e—rs2[6和e—rs3[6分別是0、l和l。因而,普通運(yùn)算器12b使用i自寄存^11的前半?yún)^(qū)域的2個(gè)操作數(shù)y。r[rs2和Y。r[rs3I和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rsl]作為輸入值而執(zhí)行算術(shù)運(yùn)算。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rsl和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)y。r[N+rs21和o/。r[N+rs3I作為輸入值而執(zhí)行算^:算。如果未使用的位(最高有效位)rsl[6和rs2[6都被設(shè)定為"1",則寄存器編號(hào)分配的最高有效位b—rsl[6、bjs2[6]和b—rs3[6是l、1和0且寄存器編號(hào)分配的最高有效位e—rsl問、ejs2[61和ejs3[6分別是0、0和1。因而,普通運(yùn)算器12b使用來^寄存器11的前半?yún)^(qū)k的單個(gè)操作數(shù)。/"[rs3]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rsl和Y。r[N+rs2作為輸入值而執(zhí)行算術(shù)運(yùn)算。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)o/。r[rsll和。/。r[rs2]和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rs3作為輸入值而執(zhí)行算^i^算。(7)算術(shù)運(yùn)算裝置在將未使用的位^使用的第三模式下進(jìn)行的^Mt圖19和20筒要地示出了由圖1所示的算^算裝置1的算術(shù)單元10在將未使用的位^JV使用的第三模式期間進(jìn)行的^Mt;圖21示出了由算術(shù)運(yùn)算裝置1中的指令碼發(fā)布單元(設(shè)定單元)20和生成單元30在第三模式期間進(jìn)行的操作;而圖22A~22D具體地示出了圖1的算^算裝置l在第三模式下的指令碼、算術(shù)碼、寄存器記錄信號(hào)和寄存器編號(hào)分配(僅最高有效位)。圖23和24示出了由圖1所示的算^算裝置1的算術(shù)單元10在第三模式期間執(zhí)行的算^算的具體組合;而圖25示出了實(shí)現(xiàn)圖1所示的算術(shù)運(yùn)算裝置1的生成單元30的具體實(shí)例。在此處要詳細(xì)說明的將未使用的位投入使用的第三模式期間,如圖22A所示,使用上述SIMD方案中的指令集simd-fmadd、simd-fmsub、simd-fnmsub和simd-fnmadd中得以未被使用的全部未使用的位rd[6、rsl[6、rs2[6和rs3[6。第二模式使用未使用的位rsl[6和rs2[6]對(duì)SIMD指令進(jìn)行擴(kuò)展,而第三模式亦使用其余未使用的位rs3[6和rd[6對(duì)SIMD指令進(jìn)行進(jìn)一步擴(kuò)展。使用未使用的位rs3[6]來選擇代表在擴(kuò)展運(yùn)算器12e中進(jìn)行的乘積用操作數(shù)的寄存器編號(hào),類似地,使用未使用的位rd[6]來選擇供擴(kuò)展運(yùn)算器12e用的算術(shù)碼e_op[l:0]。如圖19和20所示,這種SIMD指令擴(kuò)展可實(shí)現(xiàn)由第一模式添;的同一種算^算。因而,在第三模式下可以不需要在第一才莫式下添加的才旨令cross-fmaddl、......、cross隱fmadd4。用作設(shè)定單元的指令碼發(fā)布單元20在這4位rd[6]、rsl[6、rs2[6和rs3[6中設(shè)定擴(kuò)展指4^ft息。該擴(kuò)展指令信息指示寄存器11和算^算器12b、12e執(zhí)行與依照各指令集simd-fmadd、simd-fmsub、simd-fnmsub和simd-fnmadd進(jìn)行的普通處理(參見圖19的左側(cè)實(shí)例)不同的擴(kuò)展處理(例如,參見圖23和24所示的算術(shù)運(yùn)算的組合)。如后面參照?qǐng)D21和22A22D所說明的那樣,基于在未使用的位中設(shè)定的擴(kuò)展指令信息和在除未使用的位以外的位中設(shè)定的信息,生成單元30生成指示寄存器11和算^il算器12b、12e執(zhí)行擴(kuò)展處理的擴(kuò)展指令,并將該擴(kuò)展指令輸出至寄存器11。由此,如圖19的右側(cè)部分和圖20所示,允許各算術(shù)運(yùn)算器12b和12e使用來自寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域二者的操作數(shù)來執(zhí)行算術(shù)運(yùn)算。擴(kuò)展指令進(jìn)而對(duì)要由擴(kuò)展運(yùn)算器12e進(jìn)行的算術(shù)運(yùn)算進(jìn)行切換,作為響應(yīng),擴(kuò)展運(yùn)算器12e受到控制以切換算^逸算。因而,由上式(1-1)~(l-4)的4次算術(shù)運(yùn)算(即4個(gè)指令)執(zhí)行的復(fù)數(shù)矩陣乘積運(yùn)算可如后面說明那樣通過2個(gè)指令來執(zhí)行。在釆用將未使用的位投入使用的第三模式時(shí),將由指令碼發(fā)布單元20發(fā)布的指令種類碼的最高2位叩code[32設(shè)定為"01"。下面參照?qǐng)D21~25說明在將未使用的位^使用的第三模式下算術(shù)運(yùn)算裝置1進(jìn)行的操作。在第三模式下,生成單元30如圖21所示那樣對(duì)由指令碼發(fā)布單元20發(fā)布的指令碼叩code[3:0]以及4個(gè)寄存器編號(hào)分配rd[6:0、rsl[6:0、rs2[6:0]和rs3[6:0進(jìn)4亍變換,并將指令集b—we、e—we、b—rd[6:0、b_rsl[6:0、b_rs2[6:0、b_rs3[6:0]、e_rd[6:0、e—rsl[6:0、e—rs2[6:0、e_rs3[6:0、b_op[l:01、e—op[l:0]輸入到算術(shù)單元10中。此處,指令碼中包含的指令種類碼的最低2位叩code[l:0用作供普通運(yùn)算器12b用的算術(shù)碼bjp[l:0。進(jìn)而,如圖22B和下il4所示,生成單元30基于未使用的位rd[6的值而生成供擴(kuò)展運(yùn)算器12e用的算術(shù)碼e_op[l:0。與上述SIMD方案不同,第三模式彼此獨(dú)立地控制和切換要由,術(shù)運(yùn)算器12b和12e執(zhí)行的各算術(shù)運(yùn)算。由此,算術(shù)運(yùn)算器12b和12e可執(zhí)行同一種算術(shù)運(yùn)算或可執(zhí)行不同的算術(shù)運(yùn)算。SIMD指令和在未使用的位rd問中設(shè)定的值(擴(kuò)展指4^ff息)的這種組合可實(shí)現(xiàn)與在第一模式下添加的算術(shù)運(yùn)算組合數(shù)量相同的算術(shù)運(yùn)算組合。〔表14〕<table>tableseeoriginaldocumentpage38</column></row><table><table>tableseeoriginaldocumentpage39</column></row><table>如圖21和22C所示,對(duì)于第三模式,在分別來自算術(shù)運(yùn)算器12b和12e的用于記錄在寄存器11中的控制信號(hào)b一we和e—we中設(shè)定固定值"l"。這就將由算^算器12b和12e進(jìn)行的算^k算的結(jié)果分別記錄在寄存器11的前半?yún)^(qū)域和后半?yún)^(qū)域中。如圖21所示,對(duì)于普通運(yùn)算器12b用的寄存器編號(hào)分配b_rd[5:0]、b—rsl[5:0]、b—rs2[5:0和b—rs3[5:0,指令碼中包含的4個(gè)寄存「器編號(hào)分配的最低6位rd[5:0、rsl[5:0]、rs2[5:0]和rs3[5:0被輸入到寄存器11中。同時(shí),同一數(shù)據(jù)rd[5:0、rsl[5:0、rs2[5:0和rs3[5:0亦用作擴(kuò)屑^運(yùn)算器12e用的寄存器編號(hào)分配e—rd[5:0、e—rsl[5:0、e—rs2[5:0]和e—rs3[5:0,其也輸入到寄存器11中。如圖21、22D和下表15所示,在供普通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位b—rd[6]和b—rs3[6]中設(shè)定固定值"0"并在供擴(kuò)展運(yùn)算器12e用的寄存器編號(hào)分配的產(chǎn)高j效位e—rd[6和e—rs3[6中設(shè)定固定值"1"。與^M目比,將rsl6]和rs2[6的值設(shè)定在^f通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位bjsl問和b_rs2[6中。對(duì)于供擴(kuò)展運(yùn)算器12e用的寄存器編號(hào)分配的最高有效位e—rsl問和e_rs2[6,計(jì)算、生成并設(shè)定rsl[6Ars3[6]和rs2問。由此,^—自來自寄j器11的前半?yún)^(qū)域和后半?yún)^(qū)域之一的2個(gè)操作數(shù)可用于各算術(shù)運(yùn)算器12b和12e中的算術(shù)運(yùn)算。也就是說,在未使用的位rs1[6、rs2[6]和rs3[6中設(shè)定的擴(kuò)展指令信息指示寄存器11將待輸入至算術(shù)運(yùn)算器12b和12e之一的值從分配給該算W算器之一的區(qū)域中的值切換成分配給另一算術(shù)運(yùn)算器的區(qū)域中的值。此處,"~X"代表"X"的相反值,而"AAB"代表值A(chǔ)和B的異或(EOR)。在未使用的位rsl[6、rs2問和rs3[6]中設(shè)定的值(擴(kuò)展指4^息)與在最高有效位b—rsl[6、b—rs2[6和e—rsl[6和e—rs2[6]中設(shè)定的值具有如下表15所示的;聯(lián)?!脖?5〕<table>tableseeoriginaldocumentpage39</column></row><table><table>tableseeoriginaldocumentpage40</column></row><table>此處,在未使用的位rsl[6、rs2[6]和rs3[6]中設(shè)定的值(擴(kuò)展指^Ht息)起到以下功能將rsl[6設(shè)定為'T,,則從寄存器11的后半?yún)^(qū)域上的操作數(shù)供給向普通運(yùn)算器12b輸入的第一輸入b—il;將rs2[6設(shè)定為'T,,則從寄存器11的后半?yún)^(qū)域上的操作數(shù)供給向普通運(yùn)算器12b輸入的第二輸入b—i2;將rs3[6]設(shè)定為"1",則從與第一輸入值b—il相同區(qū)域上的操作數(shù)供給向擴(kuò)展運(yùn)反器12e輸入的笫一輸入b_il;以及rd[6改變算術(shù)碼ejp[l:0](將積和運(yùn)算的結(jié)果乘以)。接下來,對(duì)在將未使用的位^v使用的笫三模式下進(jìn)行的操作實(shí)例、即執(zhí)行算絲算"simd-fmadd%O0、%flO、%f20、%f{30+64},,進(jìn)行說明。在此算a算中,算術(shù)單元10的算術(shù)運(yùn)算器12b和12e執(zhí)行以下2個(gè)算W算。在普通運(yùn)算器12b處%r[30—%r[101*%r[20]+%r[30在擴(kuò)展運(yùn)算器12e處%r[94—%r[10*%r[84+%r[94]這2個(gè)算^il算對(duì)應(yīng)于以下復(fù)數(shù)算術(shù)運(yùn)算,該復(fù)數(shù)算術(shù)運(yùn)算使用其實(shí)部和其虛部分別來自寄存器u的前半?yún)^(qū)域和后半?yún)^(qū)域的操作數(shù)。X—X+A*C(1-1)Y—Y+A*D(1-2)在這種情況下,由下表16所示的指令碼指定的指令種類碼opcode[3:0和寄存器編號(hào)分配rd[6:0、rsl[6:0、rs2[6:0和rs3[6:0的值被變換成下表17所示的要輸入算術(shù)運(yùn)算器12b和12e中的輸入信號(hào)的值,并被輸入到寄存器ll中。具體地,如下表16所示,將由指令碼發(fā)布單元20發(fā)布的指令種類碼叩code[3:0設(shè)定為"0100",用作設(shè)定單元的指令碼發(fā)布單元20將0、0、0和1分別設(shè)定在4個(gè)未使用的位rd[6、rsl問、rs2[6和rs3[6中(參見后面說明的圖23中的左起上部第三個(gè)實(shí)例)。根據(jù)這些值,生成4元30基于表15和圖22D中的等式計(jì)算和設(shè)定0、0、0和0以用作供普通運(yùn)算器12b用的寄存器編號(hào)分配的最高有效位b—rd[6、b_rsl[6]、bjs2[6和、rs3[6](參見下表17)。以相同的方式,生成萃元30計(jì)算和設(shè)f1、0、1^1以用作供擴(kuò)屑Jt算器12e用的寄存器編號(hào)分配的最高有效位e—rd[6、ejsl[6卜e—rs2[6和e—rs3[6](參見下表17)。將如圖22B的等iC和上表14所示的依據(jù)指令種類碼叩code[l:0和未使用的位rd[6]的值決定的算術(shù)碼"00"輸入到擴(kuò)屑^運(yùn)算器12e中。因而,在本例中,算^算器12b和12e執(zhí)行同一種算術(shù)運(yùn)算(fmadd)。將相同的值rd[5:0]、rsl[5:0、rs5:0和rs3[5:0輸入至供普通運(yùn)算器12b用的寄存器編號(hào)分配和供擴(kuò);^運(yùn)算器12e用的寄存器編號(hào)分配的最低6位。如圖23中的左起上部第三個(gè)實(shí)例所示,普通運(yùn)算器12b然后對(duì)輸入值執(zhí)行基于上式(l-l)的算術(shù)運(yùn)算,該輸入值表達(dá)為由寄存器編號(hào)分配的最高有效位brsl[6、b_rs2[61、b_rs3[6]=0、0、0選擇的、且位于寄存器的前半?yún)^(qū)域的3個(gè)操弄數(shù)即A(%r[rsl=%r[10])、C(。/or[rs21-。/。r20)和X(%r[rs3=%r[30I)。同時(shí),如圖23的左起上部第三個(gè)的實(shí)例所示,擴(kuò)展運(yùn)算器12e對(duì)輸入值執(zhí)行基于上式(l-2)的算&算,該輸入值表達(dá)為由寄存器編號(hào)分配的最高有效位ejs6、e—rs2[6]和ejs3[6]-0、1、1選擇的操作數(shù)A、D和Y,即位于寄i器的前禾區(qū)域的單個(gè)操作數(shù)A(%r[rsl=%r[10I)和位于寄存器的后半?yún)^(qū)域的2個(gè)操作數(shù)D(o/or[N+rs2^。/or[84])和Y(%r[N+rs3]=%r[94])。算^ii:算器12b和12e將使用不同操作數(shù)進(jìn)行的同一種算術(shù)運(yùn)算的結(jié)果輸出至寄存器11。在第三模式下,在分別來自算術(shù)運(yùn)算器12b和12e的用于記錄在寄存器11中的控制信號(hào)b_we和e_we中設(shè)定固定值"1"。因此,由普通運(yùn)算器12b進(jìn)行的算術(shù)運(yùn)算的結(jié)i取得要記錄在寄存器11的前半?yún)^(qū)域中的寄存器值%r[rd=%r[30,類似地,由擴(kuò)屑it算器12e進(jìn)行的算術(shù)運(yùn)算的結(jié)果取得要記錄在寄存器11的后半?yún)^(qū)域中的寄存器值。/"[N+rd=%r[94。也就是說,可根據(jù)單個(gè)指令執(zhí)行上式(l-l)和(l-2)的2個(gè)算^算,類似地,可依照單個(gè)指令來執(zhí)行由上式(l-3)和(l-4)表達(dá)的算術(shù)運(yùn)算。結(jié)果,可由2個(gè)指令來進(jìn)行原本需要4個(gè)指令的復(fù)數(shù)算術(shù)運(yùn)算?!脖?6〕<table>tableseeoriginaldocumentpage42</column></row><table>上述實(shí)例個(gè)i殳指令種類碼叩code[3:0]被設(shè)定為"0100"(simd-fmadd)并且4個(gè)未使用的位rd[6]、rsl[6]、rs2問和rs3[6分別被設(shè)定為0、0、0和l。然而,將未使用的位^使用的第三模式可實(shí)現(xiàn)其它算^:算的63種組合。具體地,此外,對(duì)于4種SIMD指令(由指令種類碼opcode[3:0=0100(simd-fmadd)、0101(simd-fmsub)、0110(simd-fnmsub)和Olll(simd-fnmadd)指定)中的每種SIMD指令,可實(shí)現(xiàn)算術(shù)運(yùn)算的16種組合。簡(jiǎn)而言之,第三模式總共可實(shí)現(xiàn)算"算的64種組合。此處,將參照?qǐng)D23和24來詳細(xì)說明4種SIMD指令中由指令種類碼opcode[3:0]="0100"(simd-fmadd)決定的一種SIMD指令的算^算模式的16種組合。與圖23和24的記載類似,其余3種SIMD指令各自具有算^算的16種組合。圖23示出了由指令種類碼opcode[3:0-"0100"和未使用的位rd[6=0指定的算術(shù)運(yùn)算的8種組合。在這種情況下,算術(shù)運(yùn)算器12b和12e執(zhí)行同一種算術(shù)運(yùn)算fmadd。特別地,圖23的左半部分示出了進(jìn)一步由未使用的位rd[6=0和未使用的位rs3[6=0決定的算術(shù)運(yùn)算的4種組合。在這種情況下,如果未使用的位(最高有效位)rsl[6和rs2[6都凈皮設(shè)定為"0",則寄存器編號(hào)分配的最高有效位b_rsl[6、b—rs2[6]和b—rs3[6都是"0"且寄存器編號(hào)分配的最高有效位e_rsl[6、e—rs2[6和e—rs3[6都是'T,。因而,如圖23的左起上部第一個(gè)實(shí)例所示,普通運(yùn)算i12b使用來自寄存器11的前半?yún)^(qū)域的3個(gè)操作數(shù)。/。r[rs1]、。/or[rs2I和。/。r[rs3作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的后半?yún)^(qū)域的3個(gè)^Mt數(shù)。/。r[N+rsl、。/or[N+rs2]和Q/or[N+rs3作為輸入值而執(zhí)行算木逸算(fmadd)。如果未使用的位(最高有效位)rsl[6]和rs2[6分別被設(shè)定為0和1,貝'J寄存器編號(hào)分配的最高有效位b—rsl問、bjs2[6和b—rs3[6分別是0、1和0且寄存器編號(hào)分配的最高有i位e_rsl[6、ejs2[6]和e—rs3[6分別是1、0和1。因而,如圖23的左起下部^一個(gè)實(shí)例所示,普l(shuí)f運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rslI和。/。r[rs3]和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rs2]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)"/。r[rs2]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/or[N+rsl]和。/or[N+rs3作為輸入值而執(zhí)行算^算(fmadd)。如果未使用的位(最高有效位)rsl[6和rs2[6分別被設(shè)定為1和0,貝'J寄存器編號(hào)分配的最高有效位b_rsl[6、bjs2[6和bjs3問分別是1、0和0且寄存器編號(hào)分配的最高有效位e_rsl[6]、e—rs2[6]和e—rs3[6]分別是0、l和l。因而,如圖23的左起上部^二個(gè)實(shí)例所示,普i運(yùn)^器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rs2]和。/。r[rs3和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)Y。r[N+rsl作為輸入值而執(zhí)行算^算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rsl和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rs2和。/。r[N+rs3作為輸入值而執(zhí)行算^it算(fmadd)。如果未使用的位(最高有效位)rsl[6和rs2[6都被設(shè)定為1,則寄存器編號(hào)分配的最高有效位b_rsl[6、bjs2問和bjs3[6分別是1、1和0且寄存器編號(hào)分配的最高有效位e—rsl[6]、e—rs2[6]和e—rs3問分別是0、0和1。因而,如圖23的左起下^笫二個(gè)實(shí)例所示,普通運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rs3]和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/or[N+rsl和。/。r[N+rs2作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)屑_運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的2個(gè)^作數(shù)0/。r[rsl和。/。r[rs2和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rs3]作為輸入值而執(zhí)行算^算(fmadd)。圖23的右半部分示出了進(jìn)一步由未4吏用的位rd[6]=0和未^f吏用的位rs3[6]=l指定的算術(shù)運(yùn)算的4種組合。在這種情況下,如果未使用的位(最高有效位)rsl[6和rs2[6]都被設(shè)定為"0",則寄存器編號(hào)分配的最高有效位b—rsl[6、b—rs6]和b—rs3[6都是"0"且寄存器編號(hào)分配的最高有效位e—rsl[6]、e一rs2[6和e_rs3[6分別是0、l和l。因而,如圖23的左起上4jT第三個(gè)實(shí)例所示,普通運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的3個(gè)操作數(shù)V。r[rsl、。/。r[rs2和。/。r[rs3]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rsl和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rs2和。/。r[N+rs3]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。如果未使用的位(最高有效位)rsl[6和rs2[6分別被設(shè)定為0和1,貝'J寄存器編號(hào)分配的最高有效位b—rsl[6]、b—rs6]和b—rs3問分別是0、1和0且寄存器編號(hào)分配的最高有效位e—rsl[6]、e—rs2問和e—rs3[6]分別是0、0和1。因而,如圖23的左起下部^三個(gè)實(shí)例所示,普通運(yùn)^器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rsl]和。/。r[rs3和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rs2]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[rsl和。/。r[rs2]和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[N+rs31作為輸入值而執(zhí)行算^iS算(fmadd)。如果未使用的位(最高有效位)rsl[6]和rs6]分別被設(shè)定為1和0,則寄存器編號(hào)分配的最高有效位b_rsl[6]、b—rs2[6和b—rs3[6分別是1、0和0且寄存器編號(hào)分配的最高有k位e—rsl[6]、ejs2問和ejs6分別是1、l和l。因而,如圖23的左起上部第四個(gè)實(shí)例所示,普通運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的2個(gè)操作數(shù)V。r[rs2和。/。r[rs3和來自寄存器11的后半?yún)^(qū)域的單個(gè)操作數(shù)Q/。r[N+rsl]作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的后半?yún)^(qū)域的3個(gè)操作數(shù)%r[N+rsl]、"/。r[N+rs2]和o/。r[N+rs3]作為輸入值而執(zhí)行算^i^算(fmadd)。如果未使用的位(最高有效位)rsl[6和rs2[6]都被設(shè)定為1,則寄存器編號(hào)分配的最高有效位b_rsl[6]、bjs2[6和b—rs3[6分別是1、1和0且寄存器編號(hào)分配的最高有效位e—rsl問、e—rs2[6和ejs3[6分別是1、0和1。因而,如圖23的左起下部第四個(gè)實(shí)例所示,普l(shuí)t運(yùn)算器12b使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)。/。r[rs3和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rsl和。/。r[N+rs2作為輸入值而執(zhí)行算術(shù)運(yùn)算(fmadd)。擴(kuò)展運(yùn)算器12e使用來自寄存器11的前半?yún)^(qū)域的單個(gè)操作數(shù)"/。r[rs2和來自寄存器11的后半?yún)^(qū)域的2個(gè)操作數(shù)。/。r[N+rsl]和V。r[N+rs3作為輸入值而執(zhí)行算^:算(fmadd)。圖24示出了由指令種類碼opcode[3:0=0100和未4吏用的位rd問-l指定的算術(shù)運(yùn)算的8種組合。在這種情況下,普通運(yùn)算器12b執(zhí)行算W算fmadd而擴(kuò)展運(yùn)算器12e執(zhí)行算^ii:算fnmsub。圖24的左半部分示出了進(jìn)一步由未使用的位rd[6一l和未使用的位rs3[6I=l指定的算術(shù)運(yùn)算的4種組合,而圖24的右半部分示出了進(jìn)一步由未使用的位rd[64和未使用的位rs6=l指定的算^算的4種組合。在算術(shù)運(yùn)算的所述組合中,未使用的位rd[61=l將待由擴(kuò)展運(yùn)算器12e進(jìn)行的算和逸算切換成與普通運(yùn)算器12b進(jìn)行的算^算不同的算術(shù)運(yùn)算fnmsub,除此以外與圖23所示的運(yùn)算組合相同。因此,此處省略對(duì)圖24的說明。下面參照?qǐng)D25說明當(dāng)進(jìn)行將未使用的位^vf吏用的第三模式時(shí)圖1所示的算^算裝置1的生成單元30的具體實(shí)例。圖25所示的生成單元30包括4個(gè)邏輯積電路(與門)31、32、33和34、2個(gè)邏輯異或電路(異或門)35和36、以;S^相電路(非門、>^相器)31汪、32a、34a和36a。本例的生成單元30可處理前面參照?qǐng)D3~5說明的指令種類碼opcodep]下的、非SIMD模式下的操作。也就是說,opcode[2^1選擇執(zhí)行參照?qǐng)D19~24說明的第三模式下的操作,而opcode[2]=0選擇執(zhí)行參照?qǐng)D3~5說明的非SIMD模式下的操作。與門31計(jì)算rd[6]與叩code[2的相v^值的邏輯積,并輸出該邏輯積用作寄存器編號(hào)分配b_rd[61。要輸入到與門31中的叩code[2的相反值由^jf目電路31a生成和輸出。也就是說,當(dāng)根據(jù)opcode[2]=0采用非SIMD模式時(shí),將opcode[2的相反值l輸入到與門31中,并輸出操作數(shù)rd[6以用作b_rd[6。另一方面,當(dāng)依opcode[2I=l而采用第三模式時(shí),將opcode[2的相反值0輸入到與門31+,并將b_rd[6]固定為0。與門32計(jì)算rs3[6與叩code[2的相反值的邏輯積,并輸出該邏輯積用作寄存器編號(hào)分配bjs3[6]。要輸入到與門32中的叩code[2]的相^^值由反相電路3h生成。也就是說,當(dāng)依叩code[2]^而i用非SIMD模式時(shí),將opcode[2]的相反值1輸入到與門32中,并輸出操作數(shù)rs6用作b—rs3[6。另一方面,當(dāng)依叩code[2]4而采用第三模式時(shí),將叩code[2的相反值0輸入到與門31中,并將b一rs3[6固定為0。異或門36計(jì)算rs3[6與rsl[6的相v^值的邏輯異或,并輸出該邏輯異或。要輸入到異或門36中的rsl[6的相反值由反相電路36a計(jì)算。由異或門36計(jì)算出的邏輯異或值對(duì)應(yīng)于上面參照表15、圖21和22D詳細(xì)說明的值rsl[6rrs3[6。與門33計(jì)算異或門36的輸出與叩code[2的邏輯積,并輸出該邏輯積用作寄存器編號(hào)分配e—rsl[6]。也就是說,當(dāng)依opcode[21-0而釆用非SIMD模式時(shí),將ejsl[6固定為0。另一方面,當(dāng)依opcode[2=1而采用第三模式時(shí),輸出rsl[6Ars3[6用作e—rsl[6](參見圖22D)。與門34計(jì)算rs2[6的相反值與opcode[2的邏輯積,并輸出該邏輯積用作寄存器編號(hào)分配e_rs6]。rs2[6的相反值rs2[6由反相電路34a計(jì)算。也就是說,當(dāng)依opcode2^0而采用非SIMD模式時(shí),將ejs^6固定為0。另一方面,當(dāng)依叩code[2]4而采用笫三模式時(shí),輸出rsZ問用作e—rs2[6(參見圖22D)。異或門35計(jì)算rd[6]與叩codell的邏輯異或,并輸出該邏輯異或用作ejp[1]。圖25所示的生成單元30無修改地原樣輸出叩code[l:0]用作算氺;馬bjp[l:01,并無修改地原樣輸出opcode以用作用于記錄在寄存器11中的控制信號(hào)e—we以及寄存器編號(hào)分配e—rd[6]、e—rs3[6]。此外,生成單元30還向寄^器11輸出rd[5:0]、rsl[6:0、rs2[6:0]和rs3[5:0以分別用作寄存器編號(hào)分配b—rd[5:0、b—rsl[6:0、b—rs2[6:0和b—rs3[5:0,并輸出rd[5:0、rsl[5:0、rs2[5:0]和rs3[5:0以分別用作寄存器編號(hào)分配e_rd[5:0、e—rsl[5:01、e—rs2[5:0]和e—rs3[5:0。憑借以上構(gòu)造,當(dāng)依opcode[2^1而選擇將未使用的位^v使用的第三才莫式時(shí),圖25所示的生成單元30將來自指令碼發(fā)布單元20的指令碼opcode[l:O]、rd6:0]、rsl[6:0、rs2[6:0和rs3[6:0]變換成上面參照表14、15、圖21和22i兌明的指令集b—we、e—we、b—rd[6:0、b—rsl[6:0]、b—rs2[6:0、b—rs3[6:0、e—rd[6:0、e—rsl[6:0]、e一rs2[6:0、e—rs3[6:0]、bjp[l:0和ejp[l:0,并輸出所得的指令集。如果依opcode[2]=0而選擇fSIMD模(,則將來自指令碼發(fā)布單元20的指令碼變換成上面參照?qǐng)D4和5說明的指令集,并輸出該指令集。(8)第一實(shí)施例的效果根據(jù)第一實(shí)施例的算術(shù)運(yùn)算裝置1和算^逸算用的方法,指令碼發(fā)布單元20(設(shè)定單元)和生成單元30的功能使得可以使用單個(gè)指令中的一個(gè)或多個(gè)未使用的位rd[61、rsl6、rs2[6]和rs3[6來指示與普通處理不同的擴(kuò)展處理。由此,可由更少的指令種類碼來實(shí)現(xiàn)例如SIMD浮點(diǎn)積和算術(shù)運(yùn)算的算術(shù)運(yùn)算的各種組合。因此,由2個(gè)指令可實(shí)現(xiàn)以往需要4個(gè)指令的復(fù)數(shù)矩陣乘積運(yùn)算等的復(fù)雜算術(shù)運(yùn)算,從而可以^f吏吞吐量加倍。此夕卜,算術(shù)運(yùn)算裝置1彼此獨(dú)立地輸入供普通運(yùn)算器12b用的算^il算種類和輸入寄存器編號(hào)分配以及供擴(kuò)展運(yùn)算器12e用的算^it算種類和輸入寄存器編號(hào)分配。因此,算術(shù)運(yùn)算器12b和12e可以是使用不同操作數(shù)(寄存器值)的不同算^:算器。因而,算^:算裝置1不僅可實(shí)現(xiàn)上述復(fù)數(shù)矩陣乘積運(yùn)算,還可實(shí)現(xiàn)參照?qǐng)D12~15、23和24i兌明的算術(shù)運(yùn)算才莫式的組合。(9)其它本發(fā)明不限于上述實(shí)施例,而是可不脫離本發(fā)明的精神而做出各種變形和1務(wù)改。例如,以上說明書假設(shè)第一實(shí)施例包括普通運(yùn)算器和擴(kuò)展運(yùn)算器這2種算術(shù)運(yùn)算器。然而本發(fā)明不限于此。本發(fā)明同樣適用于具有3個(gè)或更多算術(shù)運(yùn)算器的算術(shù)運(yùn)算裝置,結(jié)果得到與第一實(shí)施例同樣的效果。第一實(shí)施例使用因采用SIMD方案而得以未被使用的位,但本發(fā)明不限于此。通過在因采用各種方式而得以未被使用的位中的一個(gè)或多個(gè)未使47用的位中設(shè)定上述擴(kuò)展處理信息,可得到與第一實(shí)施例相同的結(jié)果。進(jìn)而,指令碼發(fā)布單元20的功能(設(shè)定步驟)和生成單元30的功能(生成步驟)可通過使計(jì)算機(jī)(包括CPU、信息處理器和各種終端)執(zhí)行預(yù)定的應(yīng)用程序來實(shí)現(xiàn)。該程序可按照在諸如軟盤、CD(例如CD-ROM、CD-R、CD-RW)、DVD(例如DVD畫ROM、DVD-RAM、DVD-R、DVD-RW、DVR+R、DVD+RW)、磁盤、光盤或磁光盤等計(jì)算機(jī)可讀記錄介質(zhì)中進(jìn)行存儲(chǔ)這一形式來提供。另外,計(jì)算機(jī)可從記錄介質(zhì)讀取程序并將所讀取的程序發(fā)送至內(nèi)部或外部存儲(chǔ)器來進(jìn)行存儲(chǔ)以供使用。另外,可替選地,該程序可記錄在諸如磁盤、光盤或磁光盤等存儲(chǔ)器件(記錄介質(zhì))中,并從該存儲(chǔ)器件通過通信路徑提供給計(jì)算機(jī)。此處,計(jì)算機(jī)是硬件和操作系統(tǒng)(OS)的組合的概念,并且是指在OS的控制下工作的硬件。否則,如果應(yīng)用程序獨(dú)立于OS而操作硬件,則硬件對(duì)應(yīng)于計(jì)算機(jī)。硬件至少包括CPU等微處理器以及讀取記錄在記錄介質(zhì)中的計(jì)算初4呈序的裝置。這種程序包括使上述計(jì)算機(jī)實(shí)現(xiàn)作為設(shè)定單元20的功能(設(shè)定步驟)和作為生成單元30的功能(生成步驟)的程序代碼。這些功能可部分地由OS而不是由應(yīng)用程序來實(shí)現(xiàn)。此處陳述的全部實(shí)例和M性語(yǔ)言旨在用于教示目的,以協(xié)助讀者理解本發(fā)明的原則和由本發(fā)明人為推進(jìn)本領(lǐng)域所貢獻(xiàn)的概念,并應(yīng)理解為不限于這些具體陳述的實(shí)例和條件,而且本說明書中這些實(shí)例的組織也不牽涉到展示本發(fā)明的優(yōu)劣。盡管已詳細(xì)說明了本發(fā)明的實(shí)施例,但應(yīng)當(dāng)理解在不脫離本發(fā)明的精神和范圍的情況下,可對(duì)本發(fā)明作出各種修改、替換和變更。權(quán)利要求1.一種算術(shù)運(yùn)算裝置,包括寄存器(11),所述寄存器(11)存儲(chǔ)要用于算術(shù)運(yùn)算的操作數(shù);一個(gè)或多個(gè)算術(shù)運(yùn)算器(12b、12e),所述算術(shù)運(yùn)算器(12b、12e)響應(yīng)于對(duì)要從所述寄存器(11)讀取的操作數(shù)和要由所述算術(shù)運(yùn)算器(12b、12e)進(jìn)行的一個(gè)或多個(gè)所述算術(shù)運(yùn)算進(jìn)行指定并具有多個(gè)位的第一指令、使用由所述第一指令指定的操作數(shù)來進(jìn)行由所述第一指令指定的算術(shù)運(yùn)算;以及設(shè)定單元(20),所述設(shè)定單元(20)在所述第一指令中未用于普通處理的一個(gè)或多個(gè)未使用的位中設(shè)定擴(kuò)展指令信息,所述擴(kuò)展指令信息指示所述寄存器(11)和所述算術(shù)運(yùn)算器(12b、12e)中的至少一個(gè)根據(jù)所述第一指令執(zhí)行與所述普通處理不同的擴(kuò)展處理。2.根據(jù)權(quán)利要求l所述的算術(shù)運(yùn)算裝置,進(jìn)一步包括生成單元(30),所述生成單元(30)基于由所述設(shè)定單元(20)在所述未使用的位中設(shè)定的擴(kuò)展指令信息和在所述第一指令中除所述未使用的位以外的位中設(shè)定的信息來生成指示所述寄存器(ll)和所述算術(shù)運(yùn)算器(12b、12e)中的至少一個(gè)執(zhí)行所述擴(kuò)展處理的擴(kuò)展指令,并將用作所述第一指令的所述擴(kuò)展指令輸出至所述寄存器(ll)和所述算術(shù)運(yùn)算器(12b、12e)中的至少一個(gè)。3.根據(jù)權(quán)利要求1所述的算術(shù)運(yùn)算裝置,其中由于采用如下單指令流多數(shù)據(jù)流(SIMD)方案其中所述第一指令指示為所述寄存器(ll)的多個(gè)區(qū)段中的每一區(qū)段分配一個(gè)的多個(gè)所述算術(shù)運(yùn)算器(12b、12e)對(duì)多個(gè)數(shù)據(jù)流進(jìn)行處理,因此當(dāng)執(zhí)行所述普通處理時(shí)所述未使用的位得以不被使用。4.根據(jù)權(quán)利要求3所述的算^算裝置,其中所述多個(gè)算術(shù)運(yùn)算器(12b、12e)各自是能夠根據(jù)所述第一指令中包含的算術(shù)碼來切換算術(shù)運(yùn)算的多輸入單輸出積和運(yùn)算器;并且所述未使用的位各自是所述第一指令中包含的第一寄存器編號(hào)指定字段中的一個(gè)的最高有效位,所述第一寄存器編號(hào)指定字m要輸出至所述多個(gè)算術(shù)運(yùn)算器(12b、12e)中的至少一個(gè)的所述寄存器(ll)中的操作數(shù)進(jìn)行指定。5.根據(jù)權(quán)利要求3所述的算術(shù)運(yùn)算裝置,其中所述多個(gè)算術(shù)運(yùn)算器(12b、12e)各自是能夠根據(jù)所述第一指令中包含的算術(shù)碼來切換算術(shù)運(yùn)算的多輸入單輸出積和運(yùn)算器;并且所述未使用的位中的一個(gè)是所述第一指令中包含的第二寄存器編號(hào)指定字段的最高有效位,所述第二寄存器編號(hào)指定字段對(duì)所述寄存器(ll)中的要記錄由所述多個(gè)算術(shù)運(yùn)算器(12b、12e)進(jìn)行的算術(shù)運(yùn)算的結(jié)果的位進(jìn)行指定。6.根據(jù)權(quán)利要求4所述的算術(shù)運(yùn)算裝置,其中所述擴(kuò)展指令信息指示所述寄存器(ll)將所述寄存器(ll)中要輸出至各所述算術(shù)運(yùn)算器(12b、12e)的操作數(shù)中的至少一個(gè)從分配給各所述算術(shù)運(yùn)算器(12b、12e)的區(qū)段中的操作數(shù)切換成除分配給各所述算術(shù)運(yùn)算器(12b、12e)的區(qū)段以外的其余區(qū)段中的操作數(shù)。7.根據(jù)權(quán)利要求4~6中任一項(xiàng)所述的算術(shù)運(yùn)算裝置,其中所述擴(kuò)展指令信息指示各所述算術(shù)運(yùn)算器(12b、12e)對(duì)要由各所述算術(shù)運(yùn)算器(12b、12e)進(jìn)行的算術(shù)運(yùn)算進(jìn)行切換。8.—種在算術(shù)運(yùn)算裝置中進(jìn)行算術(shù)運(yùn)算的方法,所述算術(shù)運(yùn)算裝置包括寄存器(ll),所述寄存器(ll)存儲(chǔ)要用于算術(shù)運(yùn)算的操作數(shù);以及一個(gè)或多個(gè)算術(shù)運(yùn)算器(12b、12e),所述算術(shù)運(yùn)算器(12b、12e)使用從所述寄存器(ll)讀取的操作數(shù)來進(jìn)行所述算術(shù)運(yùn)算,所述方法包括在所述算術(shù)運(yùn)算器(12b、12e)處響應(yīng)于對(duì)要從所述寄存器(ll)讀取的操作數(shù)和要由所述算術(shù)運(yùn)算器(12b、12e)進(jìn)行的一個(gè)或多個(gè)所述算術(shù)運(yùn)算進(jìn)行指定并具有多個(gè)位的第一指令、使用由所述第一指令指定的操作數(shù)來進(jìn)行由所述第一指令指定的算術(shù)運(yùn)算;以及在所述第一指令中未用于普通處理的一個(gè)或多個(gè)未使用的位中設(shè)定擴(kuò)展指4Hf息,所述擴(kuò)展指^Ht息指示所述寄存器(U)和所述算^算器(12b、12e)中的至少一個(gè)根據(jù)所述第一指4^執(zhí)行與所述普通處理不同的擴(kuò)展處理。9.根據(jù)權(quán)利要求8所述的進(jìn)行算術(shù)運(yùn)算的方法,進(jìn)一步包括基于在所述設(shè)定步驟中在所述未使用的位中設(shè)定的所述擴(kuò)展指令信息和在所述第一指令中除所述未使用的位以外的位中設(shè)定的信息來生成擴(kuò)展指令,所述擴(kuò)展指令指示所述寄存器(ll)和所述算術(shù)運(yùn)算器(12b、12e)中的至少一個(gè)執(zhí)行所述擴(kuò)展處理;以及將用作所述第一指令的所述擴(kuò)展指令輸出至所述寄存器(ll)和所述算^J逸算器(12b、12e)中的至少一個(gè)。10.根據(jù)權(quán)利要求8所述的進(jìn)行算術(shù)運(yùn)算的方法,其中由于采用如下單指令流多數(shù)據(jù)流(SIMD)方案其中所述第一指令指示為所述寄存器(ll)的多個(gè)區(qū)段中的每一區(qū)段分配一個(gè)的多個(gè)所述算^:算器(12b、12e)對(duì)多個(gè)數(shù)據(jù)流進(jìn)4亍處理,因此當(dāng)執(zhí)行所述普通處理時(shí)所述未使用的位得以不被使用。11.根據(jù)權(quán)利要求10所述的進(jìn)行算術(shù)運(yùn)算的方法,其中所述多個(gè)算術(shù)運(yùn)算器(12b、12e)各自是能夠根據(jù)所述第一指令中包含的算術(shù)碼來切換算術(shù)運(yùn)算的多輸入單輸出積和運(yùn)算器;并且所述未使用的位各自是所述第一指令中包含的第一寄存器編號(hào)指定字段中的一個(gè)的最高有效位,所述第一寄存器編號(hào)指定字m要輸出至所述多個(gè)算術(shù)運(yùn)算器(12b、12e)中的至少一個(gè)的所述寄存器(ll)中的操作數(shù)進(jìn)行指定。12.根據(jù)權(quán)利要求10所述的進(jìn)行算術(shù)運(yùn)算的方法,其中所述多個(gè)算術(shù)運(yùn)算器(12b、12e)各自是能夠根據(jù)所述第一指令中包含的算術(shù)碼來切換算術(shù)運(yùn)算的多輸入單輸出積和運(yùn)算器;并且所述未使用的位中的一個(gè)是所述第一指令中包含的第二寄存器編號(hào)指定字段的最高有效位,所述第二寄存器編號(hào)指定字段對(duì)所述寄存器(ll)中的要記錄由所述多個(gè)算術(shù)運(yùn)算器(12b、12e)進(jìn)行的算術(shù)運(yùn)算的結(jié)果的位進(jìn)行指定。13.根據(jù)權(quán)利要求11所述的進(jìn)行算術(shù)運(yùn)算的方法,其中所述擴(kuò)展指令信息指示所述寄存器(ll)將所述寄存器(ll)中要輸出至各所述算術(shù)運(yùn)算器(12b、12e)的操作數(shù)中的至少一個(gè)從分配給各所述算"算器(12b、12e)的區(qū)段中的操作數(shù)切換成除分配給各所述算術(shù)運(yùn)算器(12b、12e)的區(qū)段以外的其余區(qū)段中的操作數(shù)。14.根據(jù)權(quán)利要求11~13中任一項(xiàng)所述的進(jìn)行算術(shù)運(yùn)算的方法,其中所述擴(kuò)展指令信息指示各所述多個(gè)算術(shù)運(yùn)算器(12b、12e)對(duì)要由各所述算術(shù)運(yùn)算器(12b、12e)進(jìn)行的算^il算進(jìn)行切換。全文摘要一種技術(shù)實(shí)現(xiàn)了用更少的指令種類碼來執(zhí)行例如SIMD浮點(diǎn)積和算術(shù)運(yùn)算中的算術(shù)運(yùn)算的各種組合。算術(shù)運(yùn)算裝置(1)包括設(shè)定單元(20),設(shè)定單元(20)在單個(gè)指令中的一個(gè)或多個(gè)未使用的位中設(shè)定擴(kuò)展指令信息,以指示寄存器(11)和算術(shù)運(yùn)算器(12b、12e)中的至少一個(gè)進(jìn)行與普通處理不同的擴(kuò)展處理。文檔編號(hào)G06F9/302GK101539851SQ200910129469公開日2009年9月23日申請(qǐng)日期2009年3月20日優(yōu)先權(quán)日2008年3月21日發(fā)明者伊藤成記申請(qǐng)人:富士通株式會(huì)社