專利名稱:X87熔合乘加指令及其應(yīng)用的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及的是在管線微處理器中執(zhí)行的浮點(diǎn)指令,更具體地說,是關(guān) 于一種在X87指令集架構(gòu)中執(zhí)行的熔合乘加指令。
背景技術(shù):
某些微處理器,微控制器和數(shù)字信號處理器的指令集中包括了熔合乘加 (Fused Multiply-Add, FMA)指令。 一個(gè)浮點(diǎn)熔合乘加指令將兩個(gè)浮點(diǎn)操作數(shù) (A和B)相乘,將其乘積與第三個(gè)浮點(diǎn)操作數(shù)(C)相加,即 FMA(A, B, C) = (A * B) + C與需要程序執(zhí)行一個(gè)單獨(dú)的乘法指令,再執(zhí)行一個(gè)單獨(dú)的加法指令的微處理器相比,指令集中包括了熔合乘加指令的微處理器可以提高許多含有乘 積累加的重要運(yùn)算的速度和精確度,例如矩陣乘法、點(diǎn)積運(yùn)算或多項(xiàng)式展開。 浮點(diǎn)熔合乘加指令可以提高精確度,因?yàn)槿酆铣思又噶羁梢灾粚Y(jié)果進(jìn)行一 次舍入,而一個(gè)單獨(dú)的乘法指令,再執(zhí)行一個(gè)單獨(dú)的加法指令時(shí),必須進(jìn)行 兩次舍入。后者的乘法指令的結(jié)果是進(jìn)行舍入了的,但浮點(diǎn)熔合乘加指令在 加上第三個(gè)操作數(shù)之前是不會(huì)做舍入的。另外,浮點(diǎn)熔合乘加指令可以提高 速度,因?yàn)榛谖Ⅲw系機(jī)構(gòu)的微處理器執(zhí)行單獨(dú)一條指令的速度比執(zhí)行兩條 指令的速度快。包括了浮點(diǎn)熔合乘加指令的微處理器有PowerPC, Intel ItaniumTM以 及Sun Microsystems SPARC系列處理器。但是,當(dāng)前最主流的X86體系結(jié) 構(gòu)的微處理器的指令集中當(dāng)前卻沒有包含浮點(diǎn)熔合乘加指令。因此需要在X86 體系結(jié)構(gòu)的微處理器的指令集中加入浮點(diǎn)熔合乘加指令。發(fā)明內(nèi)容本發(fā)明提供了一種X87熔合乘加指令,該指令存儲(chǔ)于計(jì)算機(jī)系統(tǒng)存儲(chǔ)器 中,并由具有X87浮點(diǎn)單元寄存器堆棧的X86體系結(jié)構(gòu)的微處理器執(zhí)行,該 指令包括第一操作數(shù)和第二操作數(shù),被指定存儲(chǔ)于寄存器堆棧的第一寄存
器和第二寄存器。該第一寄存器和第二寄存器是位于該寄存器堆棧棧頂?shù)膬?個(gè)寄存器。該指令還包括第三操作數(shù),被指定存儲(chǔ)于寄存器堆棧的第三寄存 器中。該熔合乘加指令指示微處理器將該第一操作數(shù)和該第二操作數(shù)相乘以 產(chǎn)生一個(gè)乘積,然后將該第三操作數(shù)和該乘積相加以產(chǎn)生一個(gè)計(jì)算結(jié)果。本發(fā)明的另一方面,提供了一種具有X87浮點(diǎn)單元的X86體系結(jié)構(gòu)的微 處理器,其中該X87浮點(diǎn)單元具有X87寄存器堆棧。該微處理器包括指令譯 碼器,其對微處理器指令集中的X87熔合乘加指令進(jìn)行譯碼。該熔合乘加指 令包括第一操作數(shù)和第二操作數(shù),被指定存儲(chǔ)于該寄存器堆棧的第一寄存器 和第二寄存器。該第一寄存器和第二寄存器是位于該寄存器堆棧棧頂?shù)膬蓚€(gè)寄存器。該熔合乘加指令還包括第三操作數(shù),被指定存儲(chǔ)于寄存器堆棧的第 三寄存器中。該微處理器還包括乘法器,耦接至該寄存器堆棧,其將該第一 操作數(shù)和該第二操作數(shù)相乘產(chǎn)生一乘積,以響應(yīng)該熔合乘加指令。該微處理 器還包括加法器,耦接至該乘法器,其將該第三操作數(shù)和該乘積相加以產(chǎn)生 一個(gè)計(jì)算結(jié)果,以響應(yīng)該熔合乘加指令。本發(fā)明的另 一方面,提供了 一種在計(jì)算設(shè)備中使用的計(jì)算機(jī)程序產(chǎn)品。 該計(jì)算機(jī)程序產(chǎn)品包括包含計(jì)算機(jī)可讀程序代碼的計(jì)算機(jī)可用存儲(chǔ)媒介,以 提供一種具有X87浮點(diǎn)單元的X86體系結(jié)構(gòu)的微處理器,其中該X87浮點(diǎn)單 元具有X87寄存器堆棧。該計(jì)算機(jī)可讀程序代碼包括第一程序代碼,其提供 指令譯碼器將微處理器指令集中的XS7熔合乘加指令譯碼。該熔合乘加指令 包括第一操作數(shù)和第二操作數(shù),被指定存儲(chǔ)于該寄存器堆棧的第一寄存器和 第二寄存器。該第一寄存器和第二寄存器是位于該寄存器堆棧棧頂?shù)膬蓚€(gè)寄 存器。該熔合乘加指令還包括第三操作數(shù),被指定存儲(chǔ)于寄存器堆棧的第三 寄存器中。該計(jì)算機(jī)可讀程序代碼還包括第二程序代碼,其提供乘法器,耦 接至該寄存器堆棧,該乘法器將該第一操作數(shù)和該第二操作數(shù)相乘產(chǎn)生一乘 積,以響應(yīng)該熔合乘加指令。該計(jì)算機(jī)可讀程序代碼還包括第三程序代碼, 其提供加法器,耦接至該乘法器,其將該第三操作數(shù)和該乘積相加以產(chǎn)生一 個(gè)計(jì)算結(jié)果,以響應(yīng)該熔合乘加指令。
圖1是根據(jù)本發(fā)明實(shí)施例所述的指令集包括X87熔合乘加指令的X86體 系結(jié)構(gòu)的微處理器的結(jié)構(gòu)框圖。 圖2是圖1中執(zhí)行熔合乘加指令的X87浮點(diǎn)單元的結(jié)構(gòu)示意圖。 圖3是圖1中的微處理器執(zhí)行熔合乘加指令的步驟流程圖。 圖4是提供執(zhí)行本發(fā)明各步驟的軟件,并接著將該軟件作為計(jì)算機(jī)數(shù)據(jù) 信號通過通訊網(wǎng)絡(luò)傳輸?shù)姆椒鞒虉D。 主要元件標(biāo)號說明202數(shù)據(jù)寄存器堆棧 204乘法器206加法器 208移位器212控制邏輯電路 214規(guī)格化及舍入電路216加法器 218計(jì)算結(jié)果222乘積具體實(shí)施方式
參考圖1,該結(jié)構(gòu)框圖示出了指令集包括X87熔合乘加(Fused Multiply-Add, FMA)指令的X86體系結(jié)構(gòu)的微處理器100。微處理器100包 括指令緩存器102,其緩存取自耦接于微處理器100的系統(tǒng)存儲(chǔ)器的程序指 令,根據(jù)本發(fā)明,該程序指令包括X87熔合乘加指令。微處理器1Q0還包括 指令取得器1Q4,耦接至該指令緩存器102,其從指令緩存器1Q2和系統(tǒng)存儲(chǔ) 器中取得程序指令。微處理器100還包括指令譯碼器106,耦接至該指令取 得器104,其對取得的微處理器100指令集的程序代碼,如本發(fā)明所描述的 X87熔合乘加指令,進(jìn)行譯碼。指令調(diào)度器108,耦接至指令譯碼器106,將 指令調(diào)度至耦接到該指令調(diào)度器108的各個(gè)功能單元。在本發(fā)明的一個(gè)實(shí)施 例中,指令譯碼器106是一個(gè)指令轉(zhuǎn)變器,其將取得的程序指令轉(zhuǎn)變?yōu)榈讓?的微指令,這些微指令被指令調(diào)度器108調(diào)度各個(gè)功能單元。這些功能單元 或執(zhí)行單元包括整數(shù)執(zhí)行單無124,存取單元122以及X87浮點(diǎn)單元 (Floating-Point Unit , FPU) 126。在其它實(shí)施例中,還可以包括其它功能 單元,如獨(dú)立的浮點(diǎn)加法單元、MMX(MultiMedia Extens ions,多媒體擴(kuò)展指 令集)單元、SSE (Streaming SIMD Extensions,單指令多數(shù)據(jù)流擴(kuò)展)單元、 和/或SSE2單元。微處理器100還包括寄存器文件112,其為功能單元提供 指令操作數(shù)并從功能單元接收指令結(jié)果。微處理器1QQ還包括數(shù)據(jù)緩存器 114,其耦接至存取單元122,存取單元122緩存來自系統(tǒng)存儲(chǔ)器的數(shù)據(jù)。指 令調(diào)度器108調(diào)度本發(fā)明的X87熔合乘加指令至X87浮點(diǎn)單元126。執(zhí)行X87
熔合乘加指令時(shí)的X87浮點(diǎn)單元126及其操作數(shù)在圖2和圖3中有詳細(xì)的表 述。圖1也示出了熔合乘加指令的形式。該熔合乘加指令包括操作碼132, 其作為在微處理器100的指令集中識別該熔合乘加指令的唯一標(biāo)識。操作碼 132的值是X87的操作碼范圍。在本發(fā)明的一實(shí)施例中,X87熔合乘加指令有 四個(gè)可能的操作碼值QxD9D4、 0xD9D5、 0xD9D6、 0xD9D7。在本發(fā)明的一實(shí) 施例中,X87熔合乘加指令還明確指定了熔合乘加指令的第三操作數(shù),如加 數(shù)(這里用"C,,表示)。根據(jù)X87的標(biāo)準(zhǔn)術(shù)語,第三個(gè)操作數(shù)這里也可以表示 為通用記法ST(i),其代表了 X87浮點(diǎn)單元寄存器堆棧202 (在圖2示出)中的 一個(gè)寄存器,即寄存器堆棧202的棧頂下的第"i"個(gè)寄存器,其中可 以取0到7之間的值。熔合乘加指令指定另兩個(gè)操作數(shù)到X87浮點(diǎn)單元寄存 器堆棧202中最接近棧頂?shù)膬蓚€(gè)寄存器。圖2是圖1中根據(jù)本發(fā)明執(zhí)行熔合乘加指令的X87浮點(diǎn)單元126的結(jié)構(gòu) 示意圖。該X87浮點(diǎn)單元126包括X87數(shù)據(jù)寄存器堆棧202。該X87浮點(diǎn)單 元寄存器堆棧202包括八個(gè)以堆棧方式組織的80bit位寬的寄存器。其中每 個(gè)寄存器包括64bit的尾數(shù)字段,15bit的指數(shù)字段以及1個(gè)符號位。棧頂 (Top-of-Stack, T0S)指針指向X87浮點(diǎn)單元寄存器堆棧202的棧頂寄存器的 棧頂,如圖2中所示的棧頂指針TOP (Top-of-Stack Pointer)。棧頂指針包 含在X87浮點(diǎn)單元126的一個(gè)狀態(tài)寄存器中(圖中未示)。如圖2所示,棧頂 指針指向的是索引值為6的寄存器。因此,這兩個(gè)被指定的操作數(shù),如這里 被表示為位于寄存器6和寄存器5的因子"A"和"B",分別位于X87浮點(diǎn)單 元寄存器堆棧202的棧頂?shù)募拇嫫?通用的表示法是表示為ST(0))和棧頂以 下緊鄰棧頂?shù)募拇嫫?通用的表示法是表示為ST(l))。在圖2所示的實(shí)施例 中,加法操作數(shù)"C"位于寄存器4,例如可以是X87浮點(diǎn)單元寄存器堆棧202 中緊鄰操作數(shù)"B,,的寄存器。但是,除了在圖2所示的實(shí)施例所示,程序員 也可以指定X87浮點(diǎn)單元寄存器堆棧202中的其它寄存器為第三操作數(shù),而 不是緊鄰操作數(shù)"B"的寄存器。X87浮點(diǎn)單元126包括乘法器204,其將因子"A"和"B"的尾數(shù)相乘一 產(chǎn)生一個(gè)128位的乘積222,乘積222提供給加法器216的第一輸入端。X87 浮點(diǎn)單元126還包括一個(gè)第二加法器206,其接收因子"A"和"B"的指數(shù), 并將其相加產(chǎn)生一個(gè)和以提供給控制邏輯電路212??刂七壿嬰娐?12也接
收加數(shù)"C"的指數(shù)。移位器208接收操作數(shù)"C"的尾數(shù),并在控制邏輯電 路212提供的控制信號的指示下,將所接收的操作數(shù)"C"的尾數(shù)移位。移位 器208的輸出提供給加法器216的第二輸入端??刂七壿嬰娐?12控制移位 器208根據(jù)"C"的指數(shù)及"A"與"B"的指數(shù)之和將"C"的尾數(shù)移位,加 法器216將乘積222與"C"尾數(shù)的有效位相加以產(chǎn)生一個(gè)和。盡管圖2示出 乘法器204和加法器206耦接至X87浮點(diǎn)單元寄存器堆棧202的接收寄存器 5和6,且移位器208和控制邏輯電路212耦接至接收寄存器4, X87浮點(diǎn)單 元寄存器堆棧202還包括多工器邏輯(圖中未示出),其接收XS7浮點(diǎn)單元寄 存器堆棧202的每個(gè)寄存器的內(nèi)容,并基于棧頂指針(Top-of-Stack Pointer) 以及熔合乘加指令的具體操作數(shù)來選擇適當(dāng)?shù)募拇嫫鲀?nèi)容提供給乘法器204, 加法器206,移位器208以及控制邏輯電路212。加法器216將其得到的加和提供給規(guī)格化及舍入電路214。該規(guī)格化及 舍入電路214將該加和規(guī)格化并舍入為標(biāo)準(zhǔn)的X87的符號位、指數(shù)、尾數(shù)格 式,根據(jù)控制邏輯電路212提供給規(guī)格化及舍入電路214的控制信號,產(chǎn)生 該熔合乘加指令的計(jì)算計(jì)算結(jié)果218的尾數(shù)。控制邏輯電路212根據(jù)"C"的 指數(shù)及"A"的指數(shù)與"B"指數(shù)的和,并根據(jù)加法器216的輸出產(chǎn)生該控制 信號??刂七壿嬰娐?12還輸出該熔合乘加指令的計(jì)算結(jié)果218的指數(shù)和符 號。計(jì)算結(jié)果218被存儲(chǔ)于該熔合乘加指令指定的存儲(chǔ)操作數(shù)"C"的寄存器 中。在本發(fā)明的其它實(shí)施例中,計(jì)算結(jié)果218還可以存儲(chǔ)到寄存器堆棧202 中除了棧頂?shù)膬蓚€(gè)寄存器的其它任意一個(gè)寄存器中,甚至還可以存儲(chǔ)到微處 理器100中其它寄存器中。在本發(fā)明的一實(shí)施例中,如圖3所示,操作數(shù)"A"和"B"彈出該X87 浮點(diǎn)單元寄存器堆棧202。因此,如果該熔合乘加指令指定X87浮點(diǎn)單元寄 存器堆棧202棧頂指針(Top-of-Stack Pointer, TOP)以下的第二個(gè)寄存器 (通常記為ST(2))為"C,,操作數(shù)寄存器,則該熔合乘加指令的計(jì)算結(jié)果218 將置于X87浮點(diǎn)單元寄存器堆棧202如圖3所示的棧頂指針(Top-of-Stack Pointer, TOP)寄存器中?,F(xiàn)在參考圖3,是圖1中的微處理器100執(zhí)行熔合乘加指令的步驟流程 圖。流程從步驟302開始。根據(jù)本發(fā)明的一實(shí)施例,在步驟302,指令解碼器106將X87熔合乘加 指令解碼。如上所述,該X87熔合乘加指令指定熔合乘加操作的前兩個(gè)操作
數(shù)(因子"A"和"B")到圖2中的X87浮點(diǎn)單元寄存器堆棧202頂部的兩個(gè) 寄存器ST(O) and ST(l),并指定第三個(gè)操作數(shù)(加數(shù)"C")到X87浮點(diǎn)單元 寄存器堆棧202的第三寄存器ST(i)。接下來執(zhí)行步驟304。在步驟304,圖2中的乘法器204將因子的尾數(shù)相乘產(chǎn)生圖2中的乘積 222。另外,圖2中的加法器206將"A"和"B"的指數(shù)部分相加產(chǎn)生一個(gè)和 以提供給圖2中的控制邏輯電路212接下來執(zhí)行步驟306。在步驟306,加法器216將乘積222與加數(shù)"C"的尾數(shù)被移位器208移 位以后的結(jié)果相加以產(chǎn)生一個(gè)和。另外,控制邏輯電路212根據(jù)"C,,的指數(shù) 及"A"與"B"的指數(shù)之和,以及根據(jù)加法器216的執(zhí)行結(jié)果以產(chǎn)生計(jì)算結(jié) 果218的指數(shù)和符號位。接下來執(zhí)行步驟308。在步驟308,參考以上圖2的描述,圖2中的規(guī)格化及舍入電路214將 加法器216輸出的和規(guī)格化及舍入,將加法器216輸出的和轉(zhuǎn)化成符合X87 標(biāo)準(zhǔn)的符號位、指數(shù)、尾數(shù)格式。規(guī)格化及舍入的操作被延遲直到步驟306 的加法執(zhí)行以后,如此提供的計(jì)算結(jié)果218比分別先后執(zhí)行乘法,舍入和加 法操作所得的結(jié)果更精確。接下來執(zhí)行步驟312。在步驟312,計(jì)算結(jié)果218被存儲(chǔ)到X87浮點(diǎn)單元寄存器堆棧202中被 指定存儲(chǔ)熔合乘加指令的第三操作數(shù)的寄存器ST(i)中。在本發(fā)明的另一實(shí) 施例中,X87浮點(diǎn)單元寄存器堆棧202的棧頂指針(Top-of-Stack Pointer, TOP)以下的第二個(gè)寄存器ST(2)被指定為該目的寄存器,即第三操作數(shù)寄存 器,換句話說,寄存器ST(2)緊鄰在寄存器ST(1)的下方。接著執(zhí)行步驟314。在步驟31.4中,該X87浮點(diǎn)單元126將棧頂?shù)膬蓚€(gè)值,即操作數(shù)"A"和 "B"彈出該X87浮點(diǎn)單元寄存器堆棧202。因此,如果程序員指定X87浮點(diǎn) 單元寄存器堆棧202的棧頂指針(T叩-of-Stack Pointer, TOP)以下的第二個(gè) 寄存器ST(2)為"C,,操作數(shù)寄存器和目的寄存器,則當(dāng)熔合乘加指令執(zhí)行完 全完成以后,如圖3所示,計(jì)算結(jié)果218就被置于X87浮點(diǎn)單元寄存器堆棧 202的棧頂指針(Top-of-Stack Pointer, TOP)寄存器中。步驟214完成以后 流程結(jié)束。另一方面,任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的范圍內(nèi),可 在此基礎(chǔ)上做進(jìn)一步的形式上和具體實(shí)施方式
上的改進(jìn)和變化,例如在步驟 308后,執(zhí)行步驟314再執(zhí)行步驟312。值得注意的是,用于執(zhí)行一系列結(jié)果累積的程序可以包括一系列的三指 令序列。該指令序列中的三個(gè)指令包括兩個(gè)指令將操作數(shù)"A"和"B"壓 入X87浮點(diǎn)單元寄存器堆棧202的棧頂指針(Top-of-Stack Pointer, TOP) 寄存器中,接著一熔合乘加指令指定寄存器ST(2)為"C,,操作數(shù)寄存器和目 的寄存器。另外,程序也可以包括一個(gè)包含這三指令序列的循環(huán)程序。這里揭露的X87熔合乘加指令解決了熔合乘加指令需要指定三個(gè)操作數(shù) 的問題,這并不是X87指令的本來的特點(diǎn)。這里揭露的X87熔合乘加指令通 過指定至少兩個(gè)操作數(shù)存儲(chǔ)到X87浮點(diǎn)單元寄存器堆棧的棧頂?shù)募拇嫫髦校?解決了這個(gè)問題。盡管本發(fā)明及其對象,特點(diǎn)和優(yōu)點(diǎn)已經(jīng)被詳細(xì)描述,本發(fā)明還包括了其 它的具體實(shí)施方式
。例如,盡管本實(shí)施例描述了 X87熔合乘加指令中指定X87 浮點(diǎn)單元寄存器堆棧中的寄存器用來存放該第三操作數(shù),在其它實(shí)施例中也 描述了 X87浮點(diǎn)單元寄存器堆棧中的寄存器ST(2)被指定為存放該第三操作 數(shù)的寄存器。以上所述僅為本發(fā)明較佳實(shí)施例,然其并非用以限定本發(fā)明的范圍,任 何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的范圍內(nèi),可在此基礎(chǔ)上做進(jìn)一步的形 式上和具體實(shí)施方式
上的改進(jìn)和變化,例如,除了采用硬件(例如,中央處理 器、微處理器、微控制器、數(shù)字信號處理器、處理器核、片上系統(tǒng)(System on Chip, SOC)或其它設(shè)備)以外,還可以采用被存儲(chǔ)在計(jì)算機(jī)可用(如可讀)媒介 中的軟件(如計(jì)算機(jī)可讀代碼、程序代碼和其它形式的指令,如源語言、目標(biāo) 語言或機(jī)器語言)實(shí)現(xiàn)。這樣的軟件可以實(shí)現(xiàn)這里揭露的裝置和方法的功能、 制造、建模、仿真描述和/或測試。例如,可以通過使用通用編程語言(如 C,C++),硬件描述語言(HDL)包括Verilog HDL、 VHDL等,或其它可用程序來 實(shí)現(xiàn)。這樣的軟件可以被置于任何計(jì)算機(jī)可用的媒介中,如半導(dǎo)體、磁盤或 光盤(如CD-R0M、 DVD-ROM等)。該軟件也可是包含在計(jì)算機(jī)可用(如可讀)的 傳輸媒介(如載波或其他任何包含數(shù)字,光或模擬介質(zhì)的傳輸媒介)中的一個(gè) 計(jì)算機(jī)數(shù)據(jù)信號。如圖4所示,本發(fā)明的實(shí)施例還為這里描述的微處理器提 供該軟件和接下來將該軟件作為 一個(gè)計(jì)算機(jī)數(shù)據(jù)信號在包括互聯(lián)網(wǎng)和內(nèi)部網(wǎng) 的通訊網(wǎng)絡(luò)中傳輸?shù)姆椒?。這里描述的裝置和方法可能會(huì)包含在半導(dǎo)體 IP(intellectual property)核中,如孩t處理器核(如用HDL實(shí)現(xiàn)),并被轉(zhuǎn)變 為集成電路中的硬件。此外,這里描述的裝置和方法可以用軟件結(jié)合的方法 實(shí)現(xiàn)。因此,本發(fā)明不應(yīng)局限在上述任何一個(gè)實(shí)施例中,本發(fā)明的保護(hù)范圍 當(dāng)以本申請的權(quán)利要求及其均等物所界定的范圍為準(zhǔn)。
任何本領(lǐng)域技術(shù)人員,可在運(yùn)用與本發(fā)明相同目的的前提下,使用本發(fā) 明所揭露的概念和特別實(shí)施例來作為設(shè)計(jì)和改進(jìn)其他一些結(jié)構(gòu)的基礎(chǔ)。這些 變化、替代和改進(jìn)不能背離權(quán)利要求書所界定的本發(fā)明的保護(hù)范圍。
權(quán)利要求
1. 一種X87熔合乘加指令,存儲(chǔ)于計(jì)算機(jī)系統(tǒng)存儲(chǔ)器中,并由具有X87 浮點(diǎn)單元寄存器堆棧的X86體系結(jié)構(gòu)的微處理器執(zhí)行,該指令包括第一操作數(shù)和第二操作數(shù),被指定存儲(chǔ)于該X87浮點(diǎn)單元寄存器堆棧的 第一寄存器和第二寄存器,其中該第一寄存器和該第二寄存器是位于該X87浮點(diǎn)單元寄存器堆棧棧頂?shù)膬蓚€(gè)寄存器;以及第三操作數(shù),被指定存儲(chǔ)于該X87浮點(diǎn)單元寄存器堆棧的第三寄存器中; 其中,該X87熔合乘加指令指示該微處理器將該第一操作數(shù)和該第二操作數(shù)相乘以產(chǎn)生乘積,并將該第三操作數(shù)和該乘積相加以產(chǎn)生計(jì)算結(jié)果。
2. 如權(quán)利要求1所述的X87熔合乘加指令,其特征在于,該指令還指示 該微處理器將該計(jì)算結(jié)果存儲(chǔ)于該X87浮點(diǎn)單元寄存器堆棧的該第三寄存器 中。
3. 如權(quán)利要求1所述的X87熔合乘加指令,其特征在于,該指令還指示 該微處理器將該第一操作數(shù)和該第二操作數(shù)彈出該X87浮點(diǎn)單元寄存器堆棧。
4. 如權(quán)利要求1所述的熔合乘加指令,其特征在于,其中該第三寄存器 為該寄存器堆棧棧頂以下的第二個(gè)寄存器。
5. —種具備X87浮點(diǎn)單元的X86體系結(jié)構(gòu)微處理器,其中該X87浮點(diǎn)單 元具有X87寄存器堆棧。該微處理器包括指令譯碼器,其對該微處理器指令集中的X87熔合乘加指令進(jìn)行譯碼, 該熔合乘加指令包括第一操作數(shù)和第二操作數(shù),被指定存儲(chǔ)于該寄存器堆棧 的第一寄存器和第二寄存器,該第一寄存器和該第二寄存器是位于該寄存器 堆棧的棧頂?shù)膬蓚€(gè)寄存器,該熔合乘加指令還包括第三操作數(shù),被指定存儲(chǔ) 于該寄存器堆棧的第三寄存器中;乘法器,耦接至該寄存器堆棧,其將該第一操作數(shù)和該第二操作數(shù)相乘 產(chǎn)生乘積,以響應(yīng)該熔合乘加指令;以及加法器,耦接至該乘法器,其將該第三操作數(shù)和該乘積相加以產(chǎn)生一個(gè) 計(jì)算結(jié)果,以響應(yīng)該熔合乘加指令。
6. 如權(quán)利要求5所述的微處理器,其特征在于,其還將該計(jì)算結(jié)果存儲(chǔ) 于該寄存器堆棧的該第三寄存器中,以響應(yīng)該熔合乘加指令。
7. 如權(quán)利要求5所述的微處理器,其特征在于,該微處理器還將該第一 操作數(shù)和該第二操作數(shù)彈出該寄存器堆棧,以響應(yīng)該熔合乘加指令。
8. 如權(quán)利要求5所述的微處理器,其特征在于,其中該第三寄存器為該 寄存器堆棧棧頂以下的第二個(gè)寄存器。
9. 一種在計(jì)算設(shè)備中使用的計(jì)算機(jī)程序產(chǎn)品,其包括 計(jì)算機(jī)可用存儲(chǔ)媒介,其中包含計(jì)算機(jī)可讀程序代碼,該程序代碼提供具有X87浮點(diǎn)單元的X86體系結(jié)構(gòu)的微處理器,其中該X87浮點(diǎn)單元具有X87 寄存器堆棧,該計(jì)算機(jī)可讀程序代碼包括第一程序代碼,其提供指令譯碼器,將微處理器指令集中的X87熔合 乘加指令譯碼,其中該熔合乘加指令包括第一操作數(shù)和萊二操作數(shù),被指定存儲(chǔ)于該寄存器堆棧的第一寄存器和第二寄存器,該第一寄存器和該第二寄 存器是位于該寄存器堆棧的棧頂?shù)膬蓚€(gè)寄存器,該熔合乘加指令還包括第三 操作數(shù),被指定存儲(chǔ)于寄存器堆棧的第三寄存器中;第二程序代碼,其提供乘法器,耦接至該寄存器堆棧,該乘法器將該 第一操作數(shù)和該第二操作數(shù)相乘產(chǎn)生乘積,以響應(yīng)該熔合乘加指令;以及第三程序代碼,其提供加法器,耦接至該乘法器,其將該第三操作數(shù) 與該乘積相加以產(chǎn)生計(jì)算結(jié)果,以響應(yīng)該熔合乘加指令。
10. 如權(quán)利要求9所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中該微處理 器還存儲(chǔ)該計(jì)算結(jié)果到該寄存器堆棧的該第三寄存器中,以響應(yīng)該熔合乘加 指令。
11.如權(quán)利要求9所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,其中該計(jì)算機(jī) 可讀程序代碼可作為計(jì)算機(jī)數(shù)據(jù)信號在網(wǎng)絡(luò)上傳輸。
全文摘要
本發(fā)明是有關(guān)于一種X86體系結(jié)構(gòu)的微處理器指令集中的X87熔合乘加指令。該熔合乘加指令將第一和第二操作數(shù)指定到X87浮點(diǎn)單元寄存器堆棧棧頂?shù)膬蓚€(gè)寄存器中,并指定第三操作數(shù)到該X87浮點(diǎn)單元寄存器堆棧的第三寄存器中。該微處理器將該第一和第二操作數(shù)相乘以產(chǎn)生乘積,并將該第三操作數(shù)和該乘積相加以產(chǎn)生計(jì)算結(jié)果。該計(jì)算結(jié)果被存儲(chǔ)于該第三寄存器中,且前兩個(gè)操作數(shù)被彈出該寄存器堆棧。在本發(fā)明的另一個(gè)實(shí)施例中,該第三操作數(shù)被指定存儲(chǔ)于該寄存器堆棧棧頂以下的第二個(gè)寄存器中,且該計(jì)算結(jié)果也被存儲(chǔ)于此。該指令操作碼的值在X87指令操作碼的范圍內(nèi)。
文檔編號G06F9/302GK101145099SQ20071016668
公開日2008年3月19日 申請日期2007年11月5日 優(yōu)先權(quán)日2007年4月10日
發(fā)明者G·格倫·亨利, 特里·帕克斯, 蒂莫西·A·埃利奧特 申請人:威盛電子股份有限公司