專(zhuān)利名稱(chēng):執(zhí)行符號(hào)乘法運(yùn)算的方法、裝置和指令的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及執(zhí)行數(shù)學(xué)運(yùn)算的處理裝置和相關(guān)軟件以及軟件序列的領(lǐng)域。
背景技術(shù):
在當(dāng)今社會(huì)計(jì)算機(jī)系統(tǒng)變得日益普遍。計(jì)算機(jī)的處理能力增加了許多職業(yè)的工作人員的效率和生產(chǎn)率。隨著購(gòu)置和擁有計(jì)算機(jī)的費(fèi)用持續(xù)下降,越來(lái)越多的消費(fèi)者已經(jīng)能夠使用較新和較快的機(jī)器。此外,許多人喜歡使用筆記本計(jì)算機(jī),因?yàn)榉奖?。移?dòng)計(jì)算機(jī)允許用戶(hù)在他們離開(kāi)辦公室或者旅行時(shí)容易地傳輸他們的數(shù)據(jù)和用它們來(lái)工作。市場(chǎng)營(yíng)銷(xiāo)人員、公司執(zhí)行人員甚至學(xué)生非常熟悉這種情形。
隨著處理器技術(shù)的進(jìn)步,也產(chǎn)生出較新的軟件代碼,以便在具有這些處理器的機(jī)器上運(yùn)行。用戶(hù)通常期望和要求計(jì)算機(jī)有較高的性能,而不管正在被使用的軟件類(lèi)型。這樣的一種情況可以從實(shí)際正在處理器內(nèi)被執(zhí)行的指令和運(yùn)算的類(lèi)型產(chǎn)生。根據(jù)運(yùn)算的復(fù)雜性和/或所需電路的類(lèi)型,某種類(lèi)型的運(yùn)算需要較多的時(shí)間完成。這提供一種機(jī)會(huì)來(lái)優(yōu)化在處理器內(nèi)執(zhí)行某些復(fù)雜運(yùn)算的方式。
十多年來(lái),媒體應(yīng)用一直在驅(qū)動(dòng)微處理器發(fā)展。事實(shí)上,在近些年來(lái)的大多數(shù)計(jì)算升級(jí)一直是由媒體應(yīng)用驅(qū)動(dòng)的。這些升級(jí)主要發(fā)生在消費(fèi)者部分,盡管在企業(yè)部分也看到用于增強(qiáng)娛樂(lè)性的教育和通信目的的顯著的進(jìn)步。然而,將來(lái)的媒體應(yīng)用將需要甚至更高的計(jì)算需求。其結(jié)果,明天的個(gè)人計(jì)算經(jīng)驗(yàn)在音頻—視頻效果方面甚至更加豐富和更容易使用,以及更重要的,計(jì)算將會(huì)和通信合并在一起。
因此,圖像的顯示以及音頻和視頻數(shù)據(jù)(它們總稱(chēng)為內(nèi)容)的重放已經(jīng)成為對(duì)當(dāng)今計(jì)算設(shè)備的逐漸流行的應(yīng)用。濾波和卷積運(yùn)算是對(duì)諸如圖像、音頻和視頻數(shù)據(jù)的內(nèi)容數(shù)據(jù)的一些最普遍的運(yùn)算。這些運(yùn)算是強(qiáng)計(jì)算型運(yùn)算,除非提供了使用各種數(shù)據(jù)存儲(chǔ)設(shè)備通過(guò)有效的實(shí)現(xiàn)能夠被使用的高水平的數(shù)據(jù)并行性,這些存儲(chǔ)設(shè)備例如有單指令多數(shù)據(jù)(SIMD)寄存器。當(dāng)前的一些結(jié)構(gòu)也要求非必要的數(shù)據(jù)類(lèi)型改變,它使指令的通過(guò)量最小,同時(shí)顯著增加為進(jìn)行算術(shù)運(yùn)算對(duì)安排數(shù)據(jù)所需要的時(shí)鐘周期數(shù)目。
各種現(xiàn)有技術(shù)的與符號(hào)相關(guān)的指令,例如正負(fù)號(hào)函數(shù)(signum)指令,決定二進(jìn)制數(shù)的符號(hào)。然而,這些現(xiàn)有技術(shù)的正負(fù)號(hào)函數(shù)指令的能力在有用性方面受限,特別是在因?yàn)檫@些結(jié)果是較大的算法的中間結(jié)果而需要進(jìn)一步處理正負(fù)號(hào)函數(shù)結(jié)果的應(yīng)用中。通過(guò)請(qǐng)求另外的指令來(lái)得到希望的結(jié)果,在處理資源和流水線時(shí)間片方面會(huì)發(fā)生另外的開(kāi)銷(xiāo)。
本專(zhuān)利申請(qǐng)涉及2003年6月30日提交的同時(shí)待審美國(guó)專(zhuān)利申請(qǐng)No._/_,_,名稱(chēng)為“使用SIMD符號(hào)和絕對(duì)值運(yùn)算的非線性濾波和解塊應(yīng)用”。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個(gè)方面,提供了一種裝置,包括存儲(chǔ)位置;和執(zhí)行資源,所述執(zhí)行資源對(duì)第一操作數(shù)和第二操作數(shù)執(zhí)行第一指令,并響應(yīng)所述第一指令,向所述存儲(chǔ)位置存儲(chǔ)具有下述值的結(jié)果如果所述第二操作數(shù)是正值,則該值為所述第一操作數(shù);如果所述第二操作數(shù)是零,則該值為零;以及如果所述第二操作數(shù)是負(fù)值,則該值為所述第一操作數(shù)的負(fù)的形式。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種處理器,包括能夠存儲(chǔ)組合型數(shù)據(jù)元素的寄存器文件和被耦合到所述寄存器文件并響應(yīng)多個(gè)組合型數(shù)據(jù)指令在所述寄存器文件中存儲(chǔ)值的執(zhí)行單元,所述執(zhí)行單元通過(guò)在所述寄存器文件中存儲(chǔ)包括多個(gè)結(jié)果數(shù)據(jù)元素的結(jié)果來(lái)響應(yīng)所述多個(gè)組合型數(shù)據(jù)指令的第一個(gè),其中,對(duì)于所述第一多個(gè)源數(shù)據(jù)元素和所述第二多個(gè)源數(shù)據(jù)元素的每一個(gè)的任何值,所述多個(gè)結(jié)果數(shù)據(jù)元素的所述每一個(gè)等于第一多個(gè)源數(shù)據(jù)元素的相應(yīng)一個(gè)乘以為第二多個(gè)源數(shù)據(jù)元素的相應(yīng)一個(gè)的符號(hào)值。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種方法,包括取指令,所述指令指定具有第一操作數(shù)符號(hào)和第一操作數(shù)大小的第一操作數(shù)以及具有第二操作數(shù)符號(hào)和第二操作數(shù)大小的第二操作數(shù);判定如果所述第二操作數(shù)是零,則存儲(chǔ)零作為所述指令的最后結(jié)果;以及判定如果所述第二操作數(shù)是非零,則存儲(chǔ)具有等于所述第一大小的最后結(jié)果大小和最后結(jié)果符號(hào)的最后結(jié)果,所述最后結(jié)果符號(hào)是對(duì)于所述第二操作數(shù)大小的單元值和非單元值兩者的所述第一操作數(shù)符號(hào)和所述第二操作數(shù)符號(hào)兩者的函數(shù)。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種方法,包括取指令,所述指令指定第一操作數(shù)和第二操作數(shù);判定如果所述第二操作數(shù)是正,則響應(yīng)于所述指令,存儲(chǔ)所述第一操作數(shù)作為結(jié)果;判定如果所述第二操作數(shù)是負(fù),則存儲(chǔ)等于負(fù)1乘所述第一操作數(shù)的值作為所述指令的結(jié)果;以及判定如果所述第二操作數(shù)是零,則存儲(chǔ)零作為所述指令的結(jié)果。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種系統(tǒng),包括存儲(chǔ)器,存儲(chǔ)第一組合型數(shù)據(jù)指令以及包括第一多個(gè)源數(shù)據(jù)元素的第一組合型數(shù)據(jù)和包括第二多個(gè)源數(shù)據(jù)元素的第二組合型數(shù)據(jù);處理器,執(zhí)行所述第一組合型數(shù)據(jù)指令,并在處理器存儲(chǔ)位置相應(yīng)地存儲(chǔ)包括多個(gè)結(jié)果組合型數(shù)據(jù)元素的結(jié)果組合型數(shù)據(jù),所述多個(gè)結(jié)果組合型數(shù)據(jù)元素的每一個(gè),對(duì)于所述第二多個(gè)源數(shù)據(jù)元素的非零的元素,是所述第一多個(gè)源數(shù)據(jù)元素和所述第二多個(gè)源數(shù)據(jù)元素的相應(yīng)一個(gè)的兩個(gè)符號(hào)的函數(shù),并且只是對(duì)于所述第二多個(gè)源數(shù)據(jù)元素的所述相應(yīng)一個(gè)的單元值和非單元值的所述第一多個(gè)源數(shù)據(jù)元素的所述相應(yīng)的一個(gè)的大小的函數(shù)。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種包括機(jī)器可讀介質(zhì)的物品,所述物品可以被制造或者模擬以實(shí)現(xiàn)一種裝置,所述裝置包括存儲(chǔ)位置;和執(zhí)行資源,所述執(zhí)行資源對(duì)第一操作數(shù)和第二操作數(shù)執(zhí)行第一指令,并響應(yīng)所述第一指令,在所述存儲(chǔ)位置存儲(chǔ)具有下列值的結(jié)果如果所述第二操作數(shù)是正值,則該值是所述第一操作數(shù);如果第二操作數(shù)是零,則該值是零;以及如果第二操作數(shù)是負(fù)值,則該值是所述第一操作數(shù)的負(fù)的形式。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種裝置,包括存儲(chǔ)位置;和執(zhí)行資源,所述執(zhí)行資源對(duì)第一操作數(shù)和第二操作數(shù)執(zhí)行第一指令,所述第一操作數(shù)具有第一大小和第一操作數(shù)起始符號(hào),所述第二操作數(shù)具有第二操作數(shù)符號(hào),所述執(zhí)行資源響應(yīng)于所述第一指令,在所述存儲(chǔ)位置中存儲(chǔ)結(jié)果,如果所述第二操作數(shù)是正操作數(shù),則所述結(jié)果具有所述第一大小和所述第一操作數(shù)起始符號(hào);如果所述第二操作數(shù)是零操作數(shù),則所述結(jié)果是零;如果所述第二操作數(shù)是負(fù)操作數(shù),則所述結(jié)果具有所述第一大小和結(jié)果符號(hào),所述符號(hào)是所述第一操作數(shù)起始符號(hào)乘以所述第二操作數(shù)符號(hào)的乘積。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種裝置,包括存儲(chǔ)位置;和執(zhí)行資源,所述執(zhí)行資源對(duì)具有第一多個(gè)數(shù)據(jù)元素的第一組合型操作數(shù)和具有第二多個(gè)數(shù)據(jù)元素的第二組合型操作數(shù)執(zhí)行第一組合型指令,對(duì)于所述第一操作數(shù)的所述第一多個(gè)數(shù)據(jù)元素的每一數(shù)據(jù)元素具有第一大小和第一操作數(shù)符號(hào),對(duì)于所述第二操作數(shù)的所述第二多個(gè)數(shù)據(jù)元素的每一數(shù)據(jù)具有第二大小和第二操作數(shù)符號(hào),所述執(zhí)行資源響應(yīng)于所述第一指令,向?qū)τ诮Y(jié)果操作數(shù)的各數(shù)據(jù)元素位置的所述存儲(chǔ)位置存儲(chǔ)結(jié)果,如果所述第二操作數(shù)是非零操作數(shù),則所述結(jié)果具有所述第一大小和結(jié)果符號(hào),該結(jié)果符號(hào)是所述第一操作數(shù)符號(hào)和所述第二操作數(shù)符號(hào)兩者的函數(shù);如果所述第二操作數(shù)是零操作數(shù),則所述結(jié)果是零。
本發(fā)明通過(guò)示例的方式來(lái)說(shuō)明,但不限于附圖中的圖例。
圖1A是根據(jù)本發(fā)明的一個(gè)實(shí)施例由包括執(zhí)行用于符號(hào)乘法運(yùn)算的指令的執(zhí)行單元的處理器形成的計(jì)算機(jī)系統(tǒng)的方框圖;圖1B是根據(jù)本發(fā)明的另一可選的實(shí)施例的另一示例性計(jì)算機(jī)系統(tǒng)的方框圖;圖1C是根據(jù)本發(fā)明的另一可選的實(shí)施例的又一示例性計(jì)算機(jī)系統(tǒng)的方框圖;圖2是根據(jù)本發(fā)明對(duì)于一個(gè)實(shí)施例的處理器的微結(jié)構(gòu)的方框圖,它包括邏輯電路以執(zhí)行符號(hào)乘法運(yùn)算;
圖3A表示根據(jù)本發(fā)明的一個(gè)實(shí)施例在多媒體寄存器中的各種組合型數(shù)據(jù)(packed data)類(lèi)型表達(dá);圖3B表示根據(jù)另一可選實(shí)施例的組合型數(shù)據(jù)類(lèi)型;圖3C表示根據(jù)本發(fā)明的一個(gè)實(shí)施例在多媒體寄存器中的各種帶符號(hào)的和不帶符號(hào)的組合型數(shù)據(jù)類(lèi)型表示;圖3D表示操作編碼(opcode)格式的一個(gè)實(shí)施例;圖3E表示另一個(gè)可選的操作編碼(opcode)格式;圖3F表示又一個(gè)可選的操作編碼格式;圖4是根據(jù)本發(fā)明對(duì)組合型數(shù)據(jù)操作數(shù)執(zhí)行符號(hào)運(yùn)算的邏輯的一個(gè)實(shí)施例的方框圖;圖5表示根據(jù)本發(fā)明的一個(gè)實(shí)施例對(duì)數(shù)據(jù)元素的符號(hào)乘法運(yùn)算的操作;圖6A是根據(jù)本發(fā)明執(zhí)行符號(hào)運(yùn)算的電路的一個(gè)實(shí)施例的方框圖;圖6B是根據(jù)本發(fā)明執(zhí)行符號(hào)運(yùn)算的電路的另一個(gè)實(shí)施例的方框圖;圖7表示根據(jù)本發(fā)明的一個(gè)實(shí)施例對(duì)多個(gè)數(shù)據(jù)元素的組合型符號(hào)指令的操作;圖8A是一個(gè)流程圖,表示執(zhí)行符號(hào)運(yùn)算的方法的一個(gè)實(shí)施例;圖8B是一個(gè)流程圖,表示執(zhí)行符號(hào)運(yùn)算的方法的另一個(gè)實(shí)施例;圖9是對(duì)組合型數(shù)據(jù)操作數(shù)執(zhí)行絕對(duì)值運(yùn)算的邏輯的一個(gè)實(shí)施例的方框圖;圖10表示根據(jù)本發(fā)明使用SIMD指令的解塊算法的操作;圖11是一個(gè)流程圖,表示使用SIMD指令執(zhí)行解塊算法的一個(gè)實(shí)施例。
具體實(shí)施例方式
下面的說(shuō)明書(shū)說(shuō)明執(zhí)行符號(hào)和乘法運(yùn)算的方法、裝置和指令的實(shí)施例。在下面的說(shuō)明中,敘述了大量的細(xì)節(jié),諸如處理器類(lèi)型、微結(jié)構(gòu)條件、事件、允許機(jī)構(gòu)等,以便提供對(duì)本發(fā)明更徹底的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該理解,本發(fā)明可以不用這些特定的細(xì)節(jié)而被實(shí)現(xiàn)。另外,一些公知的結(jié)構(gòu)、電路等未詳細(xì)表示,以避免不必要地使本發(fā)明模糊。
雖然下面的實(shí)施例是參考處理器說(shuō)明的,但是其它的實(shí)施例可應(yīng)用于其它類(lèi)型的集成電路和邏輯設(shè)備。同樣的技術(shù)和本發(fā)明的教導(dǎo)可以容易地應(yīng)用于能夠從更高流水線通過(guò)量和改進(jìn)的性能中得益的其它類(lèi)型的電路或半導(dǎo)體器件。本發(fā)明的教導(dǎo)可應(yīng)用于執(zhí)行數(shù)據(jù)操作的任何處理器或機(jī)器。然而,本發(fā)明不限于執(zhí)行256位、128位、64位、32位或者16位數(shù)據(jù)運(yùn)算的處理器或機(jī)器,而可以應(yīng)用于任何其中需要組合型數(shù)據(jù)操作的處理器和機(jī)器。
在下面的說(shuō)明中,為解釋的目的,敘述了大量的特定細(xì)節(jié)以便對(duì)本發(fā)明提供徹底的理解。然而,本領(lǐng)域的技術(shù)人員會(huì)理解,為了實(shí)現(xiàn)本發(fā)明不一定必需這些特定細(xì)節(jié)。在其它的場(chǎng)合,公知的電氣結(jié)構(gòu)和電路未以特定細(xì)節(jié)敘述,以避免不必要地使本發(fā)明模糊。另外,下面的說(shuō)明提供例子,并且附圖為圖示目的表示各種例子。然而,這些例子不應(yīng)該解釋為限制的意義,因?yàn)樗鼈儍H是用來(lái)提供本發(fā)明的例子,而不是提供對(duì)本發(fā)明的所有可能的實(shí)現(xiàn)的窮舉列表。
雖然下面的例子在執(zhí)行單元和邏輯電路的環(huán)境中說(shuō)明指令處理和分布,但是本發(fā)明的其它實(shí)施例可以以軟件方式實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本發(fā)明的方法在機(jī)器可執(zhí)行的指令中體現(xiàn)??梢允褂眠@些指令使以這些指令編程的通用或者專(zhuān)用處理器執(zhí)行本發(fā)明的步驟。本發(fā)明可以提供為計(jì)算機(jī)程序產(chǎn)品或軟件提供,這些可以包括其上存儲(chǔ)有指令的機(jī)器或者計(jì)算機(jī)可讀介質(zhì),所述指令可用于編程計(jì)算機(jī)(或其它電子設(shè)備)來(lái)執(zhí)行根據(jù)本發(fā)明的處理。另外可選地,本發(fā)明的步驟可以由包含執(zhí)行這些步驟的硬件邏輯的特定硬件部件執(zhí)行,或由被編程的計(jì)算機(jī)部件和用戶(hù)硬件部件的任何組合來(lái)執(zhí)行。這種軟件可以存儲(chǔ)在系統(tǒng)的存儲(chǔ)器內(nèi)。相似地,代碼可以經(jīng)由網(wǎng)絡(luò)或者通過(guò)其它計(jì)算機(jī)可讀介質(zhì)的方式分發(fā)。
這樣,機(jī)器可讀介質(zhì)可以包括任何以一個(gè)機(jī)器(例如計(jì)算機(jī))可讀的形式存儲(chǔ)或者傳輸信息的機(jī)構(gòu),但是不限于軟磁盤(pán)、光盤(pán)、光盤(pán)只讀存儲(chǔ)器(CD-ROM)、磁光盤(pán)、只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、可擦寫(xiě)可編程只讀存儲(chǔ)器(EPROM)、電可擦寫(xiě)可編程只讀存儲(chǔ)器(EEPROM)、磁卡或者光卡、閃爍存儲(chǔ)器、通過(guò)因特網(wǎng)的傳輸、電、光、聲或者其它形式的傳播信號(hào)(例如,載波、紅外線信號(hào)、數(shù)字信號(hào)等)等。因此,計(jì)算機(jī)可讀介質(zhì)包括任何類(lèi)型的介質(zhì)/機(jī)器可讀介質(zhì),所述介質(zhì)適于以機(jī)器(例如計(jì)算機(jī))可讀形式存儲(chǔ)或者傳輸電子指令或信息。此外,本發(fā)明還可以作為計(jì)算機(jī)程序產(chǎn)品被下載。同樣地,程序可以從遠(yuǎn)程計(jì)算機(jī)(服務(wù)器)傳輸?shù)秸?qǐng)求計(jì)算機(jī)(例如客戶(hù)機(jī))。程序的傳輸可以通過(guò)以載波或者其它傳播介質(zhì)體現(xiàn)的電、光、聲或者其它形式的數(shù)據(jù)信號(hào)經(jīng)由通信鏈路(例如調(diào)制解調(diào)器、網(wǎng)絡(luò)連接等)實(shí)現(xiàn)。
一種設(shè)計(jì)可以經(jīng)歷各種階段,從構(gòu)想到模擬到制造。表示一種設(shè)計(jì)的數(shù)據(jù)可以以幾種方式表示該設(shè)計(jì)。首先,因?yàn)樵谀M中十分有用,可以使用硬件描述語(yǔ)言或者另外的功能描述語(yǔ)言表示硬件。另外,具有邏輯和/或晶體管門(mén)的電路級(jí)模型可以在設(shè)計(jì)過(guò)程的某些階段產(chǎn)生。此外,大多數(shù)設(shè)計(jì)在某些階段達(dá)到表示在該硬件模型中各種設(shè)備的物理布置的數(shù)據(jù)水平。在使用常規(guī)半導(dǎo)體制造技術(shù)的場(chǎng)合,表示硬件模型的數(shù)據(jù)可以是指定各種特征在對(duì)于生產(chǎn)集成電路所用的掩膜的不同掩膜層上是否存在的數(shù)據(jù)。在設(shè)計(jì)的任何說(shuō)明中,數(shù)據(jù)可以以任何機(jī)器可讀介質(zhì)的形式存儲(chǔ)。被調(diào)制的或者以其它方式產(chǎn)生的、用以傳輸這種信息的光或電波、存儲(chǔ)器或者諸如盤(pán)的磁或光存儲(chǔ)器可以是機(jī)器可讀介質(zhì)。任何這些介質(zhì)可以“載有”或者“指示”設(shè)計(jì)或者軟件信息。當(dāng)指示或者載有代碼或者設(shè)計(jì)的電載波被傳輸,到執(zhí)行復(fù)制、緩沖存儲(chǔ)、或者重新傳輸該電信號(hào)的程度時(shí),一個(gè)新的備份被制作。這樣,通信提供者或網(wǎng)絡(luò)提供者可以制作體現(xiàn)本發(fā)明的技術(shù)的物品(載波)的復(fù)制品。
在現(xiàn)代的處理器中,使用一些不同的執(zhí)行單元來(lái)處理和執(zhí)行各種代碼和指令。并非所有的指令都同等地建立,因?yàn)橛行┠茌^快完成,而另一些要占用大量的時(shí)鐘周期。指令的通過(guò)量越快,處理器的總體性能就越好。所以使同樣多的指令盡可能快地執(zhí)行將是有利的。然而,有一些指令較復(fù)雜,需要更多的執(zhí)行時(shí)間和處理器資源。例如,有浮點(diǎn)指令、加載/存儲(chǔ)操作、數(shù)據(jù)移動(dòng)等。
由于越來(lái)越多的計(jì)算機(jī)系統(tǒng)用在因特網(wǎng)和多媒體應(yīng)用中,所以一直在引入附加的處理器支持。例如,單指令多數(shù)據(jù)(SIMD)整數(shù)/浮點(diǎn)指令和流式SIMD擴(kuò)展(SSE)是減少為執(zhí)行一個(gè)具體程序任務(wù)所需要的指令總數(shù)的指令,它們從而可以減少功率消耗。這些指令通過(guò)并行對(duì)多數(shù)據(jù)元件操作而可以加速軟件性能。其結(jié)果,可以在很大范圍的應(yīng)用中實(shí)現(xiàn)性能增益,這些應(yīng)用包括視頻、語(yǔ)音和圖像/照片處理。SIMD指令在微處理器和相似類(lèi)型的邏輯電路中的實(shí)現(xiàn)通常牽涉一些問(wèn)題。此外,SIMD操作的復(fù)雜性常常導(dǎo)致需要附加的電路以便正確處理和操作數(shù)據(jù)。
當(dāng)前,乘法的SIMD符號(hào)指令不可用。也沒(méi)有為絕對(duì)值運(yùn)算的SIMD指令。由于不存在符號(hào)乘法運(yùn)算,需要大量指令和數(shù)據(jù)寄存器來(lái)實(shí)現(xiàn)在諸如音頻/視頻壓縮、處理和操作等應(yīng)用中的同樣結(jié)果。因此,根據(jù)本發(fā)明的符號(hào)指令可以減少代碼的開(kāi)銷(xiāo)和資源需求。本發(fā)明的實(shí)施例作為一種算法提供實(shí)現(xiàn)符號(hào)運(yùn)算的一種方式,這種算法使用有關(guān)SIMD的硬件。一些實(shí)施例還提供實(shí)現(xiàn)絕對(duì)值運(yùn)算的方式。目前,操作SIMD寄存器中的數(shù)據(jù)有些困難和繁瑣。一些算法需要比實(shí)際執(zhí)行某些算術(shù)運(yùn)算所需要的指令更多的指令來(lái)為這些運(yùn)算安排數(shù)據(jù)。通過(guò)實(shí)現(xiàn)根據(jù)本發(fā)明的符號(hào)乘法運(yùn)算的實(shí)施例,為獲得符號(hào)處理所需要的指令數(shù)目可以顯著減少。
本發(fā)明的實(shí)施例涉及實(shí)現(xiàn)正負(fù)號(hào)函數(shù)運(yùn)算的變化的指令。正負(fù)號(hào)函數(shù)運(yùn)算決定一個(gè)給定的數(shù)是正數(shù)、負(fù)數(shù)、還是零。在正負(fù)號(hào)函數(shù)運(yùn)算期間,該函數(shù)這樣評(píng)價(jià)一個(gè)數(shù)對(duì)于x>0,signum(x)=1;對(duì)于x=0,signum(x)=0;對(duì)于x<0,signum(x)=-1。然而,在多媒體應(yīng)用中,在各種算法期間經(jīng)常需要用一個(gè)值的符號(hào)乘另一個(gè)數(shù)據(jù)值。符號(hào)乘法運(yùn)算能夠避免不得不做許多單獨(dú)的操作,本符號(hào)運(yùn)算的實(shí)施例提供比正負(fù)號(hào)函數(shù)更多的功能,也包括乘法。
根據(jù)本發(fā)明的符號(hào)指令求解運(yùn)算DEST=SRC1×SIGNUM(SRC2)。如果SRC2為正,則SRC2的正負(fù)號(hào)函數(shù)將提供“+1”的值。如果SRC2等于零,則SRC2的正負(fù)號(hào)函數(shù)的結(jié)果是零。如果SRC2為負(fù),則SRC2的正負(fù)號(hào)函數(shù)是“-1”。本發(fā)明的實(shí)施例中的符號(hào)乘法運(yùn)算取第二數(shù)據(jù)元素的正負(fù)號(hào)函數(shù),并以第一數(shù)據(jù)元素的值乘該正負(fù)號(hào)函數(shù)的結(jié)果來(lái)得到結(jié)果的積。應(yīng)用于單個(gè)數(shù)據(jù)元素的一個(gè)實(shí)施例的符號(hào)運(yùn)算可以描述為
if SOURCE2<0,then DEST=SOURCE1ב-1’;else if SOURCE2=0,then DEST=0;else if SOURCE2>0,then DEST=SOURCE1ב+1’.
對(duì)于一個(gè)組合型數(shù)據(jù)操作數(shù),可以把這一流程應(yīng)用于每一數(shù)據(jù)元素位置。
此外,符號(hào)乘法運(yùn)算的一個(gè)實(shí)施例還可以通過(guò)這樣模仿正負(fù)號(hào)函數(shù)運(yùn)算在符號(hào)運(yùn)算中使用值“+1”作為第一源數(shù)據(jù)元素和使用感興趣的值作為第二源數(shù)據(jù)元素。因?yàn)楸緦?shí)施例的符號(hào)運(yùn)算引起第一源數(shù)據(jù)元素乘以根據(jù)第二元素的符號(hào)值的“+1”、“0”或“-1”中的一個(gè),因此正負(fù)號(hào)函數(shù)可以在這里被重復(fù)。相似地,本發(fā)明的符號(hào)運(yùn)算的實(shí)施例還可以通過(guò)設(shè)定對(duì)于符號(hào)運(yùn)算的第一源數(shù)據(jù)元素等于第二源數(shù)據(jù)元素來(lái)執(zhí)行絕對(duì)值運(yùn)算。這是可以實(shí)現(xiàn)的,因?yàn)樵粗祵?shí)質(zhì)上將由它自己的符號(hào)相乘,從而使結(jié)果值為“0”或正。
圖1A是一個(gè)示例性計(jì)算機(jī)系統(tǒng)的方框圖,所述系統(tǒng)由包括執(zhí)行單元的處理器形成,執(zhí)行單元執(zhí)行根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于進(jìn)行符號(hào)乘法運(yùn)算的指令。系統(tǒng)100包括例如處理器102的部件來(lái)使用執(zhí)行單元,它包括例如在這里所說(shuō)明的實(shí)施例中的執(zhí)行根據(jù)本發(fā)明的用于進(jìn)行處理數(shù)據(jù)的算法的邏輯。系統(tǒng)100是基于PENTIUMIII、PENTIUM4、XeonTM、Itanium、XScaleTM和/或StrongARMTM微處理器的處理系統(tǒng)的代表,上述系統(tǒng)可從加利福尼亞州圣克拉拉的英特爾公司得到,雖然也可以使用其它系統(tǒng)(包括具有其它微處理器的PC、工程工作站、機(jī)頂盒等)。在一個(gè)實(shí)施例中,示例系統(tǒng)100可以執(zhí)行WINDOWSTM版本操作系統(tǒng),它可以從華盛頓州雷蒙德的微軟公司得到,雖然也可以使用其它操作系統(tǒng)(例如UNIX和Linux)、嵌入式軟件、和/或圖形用戶(hù)接口。因此,本發(fā)明不限于硬件電路和軟件的任何特定的組合。
本發(fā)明不限于計(jì)算機(jī)系統(tǒng)。本發(fā)明另外可選的實(shí)施例可以用在其它設(shè)備中,例如手持設(shè)備和嵌入式應(yīng)用中。手持設(shè)備的一些例子包括蜂窩電話、因特網(wǎng)協(xié)議設(shè)備、數(shù)碼像機(jī)、個(gè)人數(shù)字助理(PDA)和手持PC。嵌入式應(yīng)用可以包括微控制器、數(shù)字信號(hào)處理器(DSP)、片上系統(tǒng)(system on a chip)、網(wǎng)絡(luò)計(jì)算機(jī)(NetPC)、機(jī)頂盒、網(wǎng)絡(luò)集線器、廣域網(wǎng)(WAN)開(kāi)關(guān)或?qū)Σ僮鲾?shù)執(zhí)行符號(hào)和/或絕對(duì)值運(yùn)算的任何其它系統(tǒng)。此外,已經(jīng)實(shí)現(xiàn)了一些結(jié)構(gòu)允許指令同時(shí)對(duì)幾個(gè)數(shù)據(jù)操作以提高多媒體應(yīng)用的效率。隨著數(shù)據(jù)量和類(lèi)型的增加,必須增強(qiáng)計(jì)算機(jī)和它們的處理器來(lái)以更有效的方法操作數(shù)據(jù)。
圖1A是一個(gè)計(jì)算機(jī)系統(tǒng)100的方框圖,所述系統(tǒng)由包括一個(gè)或者多個(gè)執(zhí)行單元108的處理器102形成,所述執(zhí)行單元根據(jù)本發(fā)明執(zhí)行從一個(gè)操作數(shù)抽取數(shù)據(jù)元素的符號(hào)并且用另一個(gè)數(shù)據(jù)元素乘這一符號(hào)的算法。本實(shí)施例是在單處理器臺(tái)式或服務(wù)器系統(tǒng)的環(huán)境中說(shuō)明的,但是在多處理器系統(tǒng)中可以包括另外的實(shí)施例。系統(tǒng)100是集線器體系結(jié)構(gòu)的一個(gè)例子。計(jì)算機(jī)系統(tǒng)100包括處理器102來(lái)處理數(shù)據(jù)信號(hào)。處理器102可以是復(fù)雜指令集計(jì)算機(jī)(CISC)微處理器、精簡(jiǎn)指令集計(jì)算(RISC)微處理器、超長(zhǎng)指令字(VLIW)微處理器、實(shí)現(xiàn)指令集的組合的處理器或者任何其它處理器設(shè)備,例如數(shù)字信號(hào)處理器。處理器102被耦合到可以在處理器102和系統(tǒng)100中的其它部件之間傳輸數(shù)據(jù)信號(hào)的處理器總線110。系統(tǒng)100的元件執(zhí)行它們對(duì)于本領(lǐng)域技術(shù)人員公知的常規(guī)功能。
在一個(gè)實(shí)施例中,處理器102包括一級(jí)(L1)內(nèi)部超高速緩沖存儲(chǔ)器104。取決于體系結(jié)構(gòu),處理器102可以具有單個(gè)內(nèi)部超高速緩沖存儲(chǔ)器或者多級(jí)內(nèi)部超高速緩沖存儲(chǔ)器。另外可選地,在另一個(gè)實(shí)施例中,超高速緩沖存儲(chǔ)器可以駐留在處理器102之外。其它的實(shí)施例還可以包括內(nèi)部和外部超高速緩沖存儲(chǔ)器的組合,取決于具體的實(shí)現(xiàn)和需要。寄存器文件106可以在各種寄存器中存儲(chǔ)不同類(lèi)型的數(shù)據(jù),這些寄存器包括整數(shù)寄存器、浮點(diǎn)寄存器、狀態(tài)寄存器和指令指針寄存器。
包括執(zhí)行整數(shù)和浮點(diǎn)運(yùn)算的邏輯的執(zhí)行單元108也駐留在處理器102中。處理器102還包括為一些宏指令存儲(chǔ)微代碼的微代碼(ucode)ROM。對(duì)于這一實(shí)施例,執(zhí)行單元108包括處理組合型指令集109的邏輯。在一個(gè)實(shí)施例中,組合型指令集109包括用于修改數(shù)據(jù)的符號(hào)值的組合型符號(hào)指令。通過(guò)在通用處理器102的指令集中包括組合型指令集109,連同執(zhí)行這些指令的相關(guān)電路,由許多多媒體應(yīng)用使用的運(yùn)算可以使用組合型的數(shù)據(jù)在通用處理器102中執(zhí)行。這樣,通過(guò)使用處理器的數(shù)據(jù)總線的全部寬度對(duì)組合型數(shù)據(jù)執(zhí)行運(yùn)算,許多多媒體應(yīng)用可以被加速并且被更有效率地執(zhí)行。這可以消除對(duì)在處理器數(shù)據(jù)總線上傳輸較小的數(shù)據(jù)單元而對(duì)一個(gè)數(shù)據(jù)元素同時(shí)執(zhí)行一個(gè)或者多個(gè)操作的需要。
執(zhí)行單元108的另外可選的實(shí)施例也可以用于微控制器、嵌入式處理器、圖形設(shè)備、DSP和其它類(lèi)型的邏輯電路。系統(tǒng)100包括存儲(chǔ)器120。存儲(chǔ)器120可以是動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)設(shè)備、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)設(shè)備、閃爍存儲(chǔ)器設(shè)備或其它存儲(chǔ)器設(shè)備。存儲(chǔ)器120可以存儲(chǔ)由數(shù)據(jù)信號(hào)表示的可以由處理器102執(zhí)行的指令和/或數(shù)據(jù)。
系統(tǒng)邏輯芯片116耦合到處理器總線110和存儲(chǔ)器120。在圖示實(shí)施例中的系統(tǒng)邏輯芯片116是存儲(chǔ)器控制器中心(MCH)。處理器102可以通過(guò)處理器總線110向MCH 116通信。MCH 116提供向存儲(chǔ)器120的高帶寬存儲(chǔ)器路徑118,用于指令和數(shù)據(jù)存儲(chǔ)和用于圖形命令、數(shù)據(jù)和紋理的存儲(chǔ)。MCH 116在處理器102、存儲(chǔ)器120和系統(tǒng)100中的其它部件之間引導(dǎo)數(shù)據(jù)信號(hào),并橋接處理器總線110、存儲(chǔ)器120和系統(tǒng)I/O 122之間的數(shù)據(jù)信號(hào)。在一些實(shí)施例中,系統(tǒng)邏輯芯片116可以提供用于耦合到圖形控制器112的圖形端口。MCH 116通過(guò)存儲(chǔ)器接口118耦合到存儲(chǔ)器120。圖形卡112通過(guò)加速圖形端口(AGP)互連114耦合到MCH 116。
系統(tǒng)100使用專(zhuān)用集線器接口總線122來(lái)耦合MCH 116到I/O控制器中心(ICH)130。ICH 130通過(guò)本地I/O總線提供到一些I/O設(shè)備的直接連接。本地I/O總線是高速I(mǎi)/O總線,用于連接外設(shè)到存儲(chǔ)器120、芯片組和處理器102。音頻控制器、固件中心(閃爍BIOS)128、無(wú)線收發(fā)器126、數(shù)據(jù)存儲(chǔ)器124、包括用戶(hù)輸入和鍵盤(pán)接口的遺留I/O控制器、諸如通用串行總線(USB)的串行擴(kuò)展端口以及網(wǎng)絡(luò)控制器134是一些例子。數(shù)據(jù)存儲(chǔ)設(shè)備124可以包括硬盤(pán)驅(qū)動(dòng)器、軟盤(pán)驅(qū)動(dòng)器、CD-ROM設(shè)備、閃爍存儲(chǔ)器設(shè)備或其它海量存儲(chǔ)設(shè)備。
對(duì)于系統(tǒng)的另一個(gè)實(shí)施例,可以用片上系統(tǒng)使用執(zhí)行帶符號(hào)指令的算法的執(zhí)行單元。片上系統(tǒng)的一個(gè)實(shí)施例包括處理器和存儲(chǔ)器。這種系統(tǒng)的存儲(chǔ)器是閃爍存儲(chǔ)器。閃爍存儲(chǔ)器可以和處理器和其它系統(tǒng)部件位于同一個(gè)小芯片上。另外,其它邏輯塊,諸如存儲(chǔ)器控制器或者圖形控制器,也可以位于片上系統(tǒng)上。
圖1B表示實(shí)現(xiàn)本發(fā)明原理的數(shù)據(jù)處理系統(tǒng)140的一個(gè)另外可選的實(shí)施例。數(shù)據(jù)處理系統(tǒng)140的一個(gè)實(shí)施例是具有英特爾XscaleTM技術(shù)(如萬(wàn)維網(wǎng)上在developer.intel.com上的說(shuō)明)的Intel個(gè)人因特網(wǎng)客戶(hù)端體系結(jié)構(gòu)(IntelPCA)應(yīng)用處理器。本領(lǐng)域的技術(shù)人員容易理解,這里說(shuō)明的實(shí)施例可以用于另外可選的處理系統(tǒng)而不脫離本發(fā)明的范圍。
計(jì)算機(jī)系統(tǒng)140包括處理核心159,它能夠執(zhí)行包括符號(hào)和絕對(duì)值的SIMD操作。對(duì)于一個(gè)實(shí)施例,處理核心159表示任何類(lèi)型體系結(jié)構(gòu)的處理單元,包括但不限于CISC、RISC或VLIW型體系結(jié)構(gòu)。處理核心159還適于在一種或者多種處理技術(shù)中的制造,并通過(guò)以足夠詳細(xì)的程度表現(xiàn)在機(jī)器可讀介質(zhì)上,可以適于促進(jìn)所述制造。
處理核心159包括執(zhí)行單元142、一組寄存器文件145和解碼器144。處理核心159還包括附加的電路(未示出),這些電路對(duì)于理解本發(fā)明不是必需的。執(zhí)行單元142用于執(zhí)行由處理核心159接收的指令。除了識(shí)別一般的處理器指令之外,執(zhí)行單元142可以識(shí)別在組合型指令集143中用于對(duì)組合型的數(shù)據(jù)格式執(zhí)行操作的指令。組合型指令集143包括支持符號(hào)和絕對(duì)值運(yùn)算的指令,并且也可以包括其它組合型指令。執(zhí)行單元142由內(nèi)部總線耦合到寄存器文件145。寄存器文件145表示處理核心159上的一個(gè)存儲(chǔ)區(qū)域,用于存儲(chǔ)信息,包括數(shù)據(jù)。如前所述,應(yīng)該理解,用于存儲(chǔ)組合型數(shù)據(jù)的存儲(chǔ)區(qū)域不是關(guān)鍵性的。執(zhí)行單元142耦合到解碼器144。使用解碼器144來(lái)將由處理核心159接收的指令解碼為控制信號(hào)和/或微代碼入口點(diǎn)。響應(yīng)于這些控制信號(hào)和/或微代碼入口點(diǎn),執(zhí)行單元142執(zhí)行適當(dāng)?shù)牟僮鳌?br>
處理核心159與總線141耦合來(lái)與各種其它的系統(tǒng)設(shè)備通信,這些設(shè)備可以包括但不限于,例如,同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(SDRAM)控制146、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)控制147、脈沖串閃爍存儲(chǔ)器接口148、個(gè)人計(jì)算機(jī)存儲(chǔ)器卡國(guó)際協(xié)會(huì)(PCMCIA)/緊致閃爍(CF)卡控制149、液晶顯示器(LCD)控制150、直接存儲(chǔ)器存取(DMA)控制器151和備選總線主控接口152。在一個(gè)實(shí)施例中,數(shù)據(jù)處理系統(tǒng)140還可以包括I/O橋154,用于通過(guò)I/O總線153與各種I/O設(shè)備通信。這種I/O設(shè)備可以包括但不限于,例如,通用異步接收器/發(fā)射器(UART)155、通用串行總線(USB)156、藍(lán)牙無(wú)線UART 157和I/O擴(kuò)展接口158。
數(shù)據(jù)處理系統(tǒng)140的一個(gè)實(shí)施例提供給移動(dòng)、網(wǎng)絡(luò)和/或無(wú)線通信以及能夠執(zhí)行包括符號(hào)和絕對(duì)值運(yùn)算的SIMD操作的處理核心159。處理核心159可以用各種音頻、視頻、成像和通信算法編程,所述算法包括離散變換,諸如Walsh-Hadamard變換、快速富立葉變換(FFT)、離散余弦變換(DCT)以及它們各自的逆變換;壓縮/解壓縮技術(shù),諸如彩色空間變換、視頻編碼運(yùn)動(dòng)估計(jì)或視頻解碼運(yùn)動(dòng)補(bǔ)償;和調(diào)制/解調(diào)(MODEM)功能,諸如脈沖編碼調(diào)制(PCM)。
圖1C表示能夠執(zhí)行SIMD符號(hào)或絕對(duì)值運(yùn)算的數(shù)據(jù)處理系統(tǒng)的再一個(gè)可選的實(shí)施例。根據(jù)一個(gè)另外可選的實(shí)施例,數(shù)據(jù)處理系統(tǒng)160可以包括主處理器166、SIMD協(xié)處理器161、超高速緩沖存儲(chǔ)器167和輸入/輸出系統(tǒng)168。輸入/輸出系統(tǒng)168可選地耦合到無(wú)線接口169。SIMD協(xié)處理器161可以執(zhí)行包括符號(hào)或絕對(duì)值的SIMD操作。處理核心170可以適合于在一種或者多種處理技術(shù)中的制造,并通過(guò)以足夠詳細(xì)程度表現(xiàn)在機(jī)器可讀介質(zhì)上,可以適合于促進(jìn)包括處理核心170的數(shù)據(jù)處理系統(tǒng)160的全部或者部分的制造。
對(duì)于一個(gè)實(shí)施例,SIMD協(xié)處理器161包括執(zhí)行單元162和一組寄存器文件164。主處理器166的一個(gè)實(shí)施例包括解碼器165,以識(shí)別要由執(zhí)行單元162執(zhí)行的包括SIMD符號(hào)和絕對(duì)值指令的指令集163的指令。對(duì)于另一可選的實(shí)施例,SIMD協(xié)處理器161還包括至少部分解碼器165B以解碼指令集163的指令。處理核心170還包括另外的電路(未示出),它們對(duì)理解本發(fā)明不是必需的。
運(yùn)行時(shí),主處理器166執(zhí)行控制一般類(lèi)型的數(shù)據(jù)處理操作的數(shù)據(jù)處理指令流,包括與超高速緩沖存儲(chǔ)器167和輸入/輸出系統(tǒng)168的交互。嵌入在數(shù)據(jù)處理指令流中的是SIMD協(xié)處理器指令。主處理器166的解碼器165將這些SIMD協(xié)處理器指令識(shí)別為應(yīng)當(dāng)由配屬的SIMD協(xié)處理器161執(zhí)行的類(lèi)型。相應(yīng)地,主處理器166在協(xié)處理器總線166上發(fā)布這些SIMD協(xié)處理器指令(或者表示SIMD協(xié)處理器指令的控制信號(hào)),它們從協(xié)處理器總線166由任何配屬的SIMD協(xié)處理器接收。在這一場(chǎng)合,SIMD協(xié)處理器161將接受并執(zhí)行任何收到的供給其的SIMD協(xié)處理器指令。
數(shù)據(jù)可以通過(guò)無(wú)線接口169被接收用于由SIMD協(xié)處理器指令處理。對(duì)于一個(gè)例子,可以以數(shù)字信號(hào)的形式接收聲音通信,該信號(hào)可以由SIMD協(xié)處理器指令處理以產(chǎn)生代表聲音通信的數(shù)字音頻樣本。對(duì)于另一個(gè)例子,可以以數(shù)字位流的形式接收壓縮的音頻和/或視頻,該信號(hào)可以由SIMD協(xié)處理器指令處理以再生數(shù)字音頻樣本和/或運(yùn)動(dòng)視頻幀。對(duì)于處理核心170的一個(gè)實(shí)施例,主處理器166和SIMD協(xié)處理器161被集成到單一處理核心170中,后者包括執(zhí)行單元162、一組寄存器文件164以及識(shí)別包括SIMD符號(hào)和絕對(duì)值指令的指令集163的指令的解碼器165。
圖2是一個(gè)實(shí)施例的處理器200的微體系結(jié)構(gòu)的方框圖,它包括邏輯電路來(lái)執(zhí)行根據(jù)本發(fā)明的符號(hào)乘法運(yùn)算。符號(hào)運(yùn)算也可以稱(chēng)為組合型符號(hào)運(yùn)算和組合型符號(hào)指令,就像在上面的討論中那樣。對(duì)于符號(hào)指令的一個(gè)實(shí)施例,該指令可以用第二數(shù)據(jù)元素的符號(hào)值乘第一數(shù)據(jù)元素。該指令還可以稱(chēng)為PSIGN或組合型符號(hào)。在這一實(shí)施例中,符號(hào)指令還可以被實(shí)現(xiàn)來(lái)對(duì)具有字節(jié)、字、雙字、四字等長(zhǎng)度的數(shù)據(jù)元素操作。按次序的前端201是處理器200取要被執(zhí)行的宏指令并且對(duì)其準(zhǔn)備以便以后在處理器流水線中使用的部分。本實(shí)施例的前端201包括幾個(gè)單元。指令預(yù)取器226從存儲(chǔ)器取宏指令并將它們供給指令譯碼器228,后者依次將這些指令解碼為稱(chēng)作微指令或者微操作(也稱(chēng)為微op或uop)的原語(yǔ),機(jī)器知道怎樣執(zhí)行這些原語(yǔ)。追蹤超高速緩沖存儲(chǔ)器230取被解碼的uop,并在uop隊(duì)列234中將它們匯編為程序排序的序列或蹤跡(trace)以便執(zhí)行。當(dāng)追蹤超高速緩沖存儲(chǔ)器230遇到復(fù)雜的宏指令時(shí),微代碼ROM 232提供完成該操作所需要的uop。
許多宏指令被變換為單一微op,而其它的宏指令需要幾個(gè)微op來(lái)完成全部操作。在本實(shí)施例中,如果需要多于4個(gè)微op來(lái)完成一個(gè)宏指令的話,則解碼器228訪問(wèn)微代碼ROM 232來(lái)執(zhí)行宏指令。對(duì)于一個(gè)實(shí)施例,可以把組合型符號(hào)指令解碼為少量微op以便在指令譯碼器228上處理。在另一個(gè)實(shí)施例中,對(duì)于組合型符號(hào)算法的指令可以存儲(chǔ)在微代碼ROM 232內(nèi),如果需要一些微op來(lái)實(shí)現(xiàn)這一操作的話。追蹤超高速緩沖存儲(chǔ)器230涉及入口點(diǎn)可編程邏輯陣列(PLA)以確定正確的微指令指針,以便讀取用于在微代碼ROM 232中的符號(hào)或絕對(duì)值算法的微代碼序列。在微代碼ROM 232完成為當(dāng)前微指令的微op的定序后,機(jī)器的前端201恢復(fù)從追蹤超高速緩沖存儲(chǔ)器230中取微op。
一些SIMD和其它多媒體類(lèi)型的指令被認(rèn)為是復(fù)雜的指令。大多數(shù)與浮點(diǎn)有關(guān)的指令也是復(fù)雜指令。這樣,當(dāng)指令譯碼器228遇到一個(gè)復(fù)雜的宏指令時(shí),訪問(wèn)微代碼ROM 232的適當(dāng)位置來(lái)檢索用于該宏指令的微代碼序列。執(zhí)行該宏指令所需要的各種微op被傳輸?shù)綗o(wú)序執(zhí)行引擎203,以便在適當(dāng)?shù)恼麛?shù)和浮點(diǎn)執(zhí)行單元中執(zhí)行。
無(wú)序執(zhí)行引擎203是微指令被準(zhǔn)備來(lái)執(zhí)行的地方。無(wú)序執(zhí)行邏輯具有一些緩沖器來(lái)平滑和重新排序微指令流,在它們沿流水線下行和被調(diào)度來(lái)執(zhí)行時(shí)優(yōu)化性能。分配器邏輯分配每一uop為了執(zhí)行而需要的機(jī)器緩沖器和資源。寄存器重命名邏輯將邏輯寄存器重新命名為在寄存器文件中的條目。分配器還為兩個(gè)uop隊(duì)列的一個(gè)中的各uop分配uop,兩個(gè)uop隊(duì)列的一個(gè)用于存儲(chǔ)器操作,另一個(gè)用于非存儲(chǔ)器操作,所述uop隊(duì)列在指令調(diào)度器之前存儲(chǔ)器調(diào)度器、快速調(diào)度器202、慢速/通用浮點(diǎn)調(diào)度器204和簡(jiǎn)單浮點(diǎn)調(diào)度器206。uop調(diào)度器202、204、206根據(jù)它們相關(guān)的輸入寄存器操作數(shù)源和uop需要完成它們的操作所需要的執(zhí)行資源的可用性,決定一個(gè)uop何時(shí)準(zhǔn)備執(zhí)行。本實(shí)施例的快速調(diào)度器202可以在每半個(gè)主時(shí)鐘周期調(diào)度,而其它調(diào)度器只能在每個(gè)主時(shí)鐘周期調(diào)度一次。調(diào)度器仲裁端口的分派以調(diào)度uop執(zhí)行。
寄存器文件208、210位于調(diào)度器202、204、206和在執(zhí)行塊211內(nèi)的執(zhí)行單元212、214、216、218、220、222、224之間。有分別用于整數(shù)和浮點(diǎn)運(yùn)算的單獨(dú)的寄存器文件208、210。本實(shí)施例的各寄存器文件208、210還包括一個(gè)旁路網(wǎng)絡(luò),它把剛剛完成的、尚未寫(xiě)到寄存器文件中的結(jié)果旁路或者轉(zhuǎn)送到新的相關(guān)的uop。整數(shù)寄存器文件208和浮點(diǎn)寄存器文件210能夠彼此通信數(shù)據(jù)。對(duì)于一個(gè)實(shí)施例,整數(shù)寄存器文件208被分成兩個(gè)單獨(dú)的寄存器文件,一個(gè)寄存器文件用于數(shù)據(jù)的低階32位,第二寄存器文件用于數(shù)據(jù)的高階32位。本實(shí)施例的浮點(diǎn)寄存器文件210具有128位寬的條目,因?yàn)楦↑c(diǎn)指令通常具有寬度從64位到128位的操作數(shù)。
執(zhí)行塊211包括執(zhí)行單元212、214、216、218、220、222、224,指令在這里實(shí)際執(zhí)行。這一部分包括寄存器文件208、210,它們存儲(chǔ)微指令執(zhí)行所需要的整數(shù)和浮點(diǎn)數(shù)據(jù)操作數(shù)值。本實(shí)施例的處理器200包括一些執(zhí)行單元地址生成單元(AGU)212、AGU 214、快速算術(shù)邏輯單元(ALU)216、快速ALU 218、慢速ALU 220、浮點(diǎn)ALU 222、浮點(diǎn)移動(dòng)單元224。對(duì)于本實(shí)施例,浮點(diǎn)執(zhí)行塊222、224執(zhí)行浮點(diǎn)、多媒體增強(qiáng)指令集(MMX)、SIMD和SSE操作。本實(shí)施例的浮點(diǎn)ALU 222包括一個(gè)64位除64位的浮點(diǎn)除法器,用于執(zhí)行除法、平方根和余數(shù)微指令。對(duì)于本發(fā)明的實(shí)施例,涉及浮點(diǎn)值的任何動(dòng)作都用浮點(diǎn)硬件發(fā)生。例如,在整數(shù)格式和浮點(diǎn)格式之間的變換涉及浮點(diǎn)寄存器文件。相似地,浮點(diǎn)除運(yùn)算發(fā)生在浮點(diǎn)除法器中。另一方面,非浮點(diǎn)數(shù)和整數(shù)類(lèi)型用整數(shù)硬件資源處理。簡(jiǎn)單的、非常頻繁的ALU運(yùn)算求助于高速ALU執(zhí)行單元216、218。本實(shí)施例的快速ALU 216、218可以用半個(gè)時(shí)鐘周期的有效延遲執(zhí)行快速運(yùn)算。對(duì)于一個(gè)實(shí)施例,大多數(shù)復(fù)雜的整數(shù)運(yùn)算求助于慢速ALU 220,因?yàn)槁貯LU 220包括用于長(zhǎng)延遲型運(yùn)算例如乘、移位、標(biāo)記邏輯和分支處理的整數(shù)執(zhí)行硬件。存儲(chǔ)器加載/存儲(chǔ)操作由AGU 212、214執(zhí)行。對(duì)于本實(shí)施例,整數(shù)ALU 216、218、220是在對(duì)64位數(shù)據(jù)操作數(shù)執(zhí)行整數(shù)運(yùn)算的環(huán)境中被說(shuō)明的。在另外可選的實(shí)施例中,整數(shù)ALU 216、218、220可以被實(shí)現(xiàn)為支持包括16、32、128、256等的各種數(shù)據(jù)位。相似地,浮點(diǎn)單元222、224可以被實(shí)現(xiàn)為支持具有各種寬度的位的操作數(shù)范圍。對(duì)于一個(gè)實(shí)施例,浮點(diǎn)單元222、224可以協(xié)同SIMD和多媒體指令對(duì)128位寬的組合型數(shù)據(jù)操作數(shù)運(yùn)算。
在本實(shí)施例中,uop調(diào)度器202、204、206在父加載結(jié)束執(zhí)行之前分派相關(guān)操作數(shù)。當(dāng)uop在處理器200中被投機(jī)(speculatively)調(diào)度和執(zhí)行時(shí),處理器200還包括處理存儲(chǔ)器缺失的邏輯。如果數(shù)據(jù)加載在數(shù)據(jù)超高速緩沖存儲(chǔ)器中確實(shí),則在流水線中會(huì)有運(yùn)行中(in flight)的相關(guān)操作,它們留給調(diào)度器暫時(shí)不正確的數(shù)據(jù)。一個(gè)重放機(jī)構(gòu)追蹤和重新執(zhí)行使用了不正確數(shù)據(jù)的指令。只有有關(guān)操作需要被重放,并且允許完成無(wú)關(guān)的操作。處理器的一個(gè)實(shí)施例的調(diào)度器和重放機(jī)構(gòu)也被設(shè)計(jì)為捕獲用于符號(hào)和絕對(duì)值運(yùn)算的指令。
這里使用的術(shù)語(yǔ)“寄存器”指板上處理器存儲(chǔ)位置,被用作宏指令的一部分以標(biāo)識(shí)操作數(shù)。換句話說(shuō),這里所指的寄存器是從處理器外部可見(jiàn)的那些(從程序員的角度)。然而,實(shí)施例的寄存器不應(yīng)該限于特定類(lèi)型的電路。而是,實(shí)施例的寄存器只需能夠存儲(chǔ)和提供數(shù)據(jù)以及執(zhí)行這里說(shuō)明的功能。這里說(shuō)明的寄存器能夠使用許多不同技術(shù)由處理器內(nèi)的電路實(shí)現(xiàn),諸如專(zhuān)用物理寄存器、使用寄存器重命名的動(dòng)態(tài)分配的物理寄存器、專(zhuān)用和動(dòng)態(tài)分配的物理寄存器的結(jié)合等。在一個(gè)實(shí)施例中,整數(shù)寄存器存貯32位整數(shù)數(shù)據(jù)。一個(gè)實(shí)施例的寄存器文件還包含用于組合型數(shù)據(jù)的8個(gè)多媒體SIMD寄存器。對(duì)于下面的討論,寄存器理解為設(shè)計(jì)用來(lái)保持組合型數(shù)據(jù)的數(shù)據(jù)寄存器,諸如微處理器中使用加利福尼亞州圣克拉拉的英特爾公司的MMX技術(shù)使能的64位寬的MMXTM寄存器(在有些場(chǎng)合也稱(chēng)為“mm”寄存器)。這些在整數(shù)和浮點(diǎn)兩種形式中可用的MMX寄存器可以以伴隨SIMD和SSE指令的組合型數(shù)據(jù)元素操作。相似地,有關(guān)SSE2技術(shù)的128位寬的XMM寄存器也可以用于保持這種組合型數(shù)據(jù)操作數(shù)。在本實(shí)施例中,在存儲(chǔ)組合型數(shù)據(jù)和整數(shù)數(shù)據(jù)時(shí),寄存器不需區(qū)分這兩種數(shù)據(jù)類(lèi)型。
在下面的附圖的例子中說(shuō)明一些數(shù)據(jù)操作數(shù)。圖3A表示根據(jù)本發(fā)明的一個(gè)實(shí)施例在多媒體寄存器中的各種組合型數(shù)據(jù)類(lèi)型表達(dá)。圖3A表示對(duì)于128位寬的操作數(shù)的組合型字節(jié)310、組合型字320和組合型雙字(dword)330的數(shù)據(jù)類(lèi)型。該例的組合型字節(jié)格式310是128位長(zhǎng),包含16個(gè)組合型字節(jié)數(shù)據(jù)元素。一個(gè)字節(jié)在這里定義為8位數(shù)據(jù)。各字節(jié)數(shù)據(jù)元素的信息,從位7到位0存儲(chǔ)字節(jié)0,從15到位8存儲(chǔ)字節(jié)1,從位23到位16存儲(chǔ)字節(jié)2,最后從位120到位127存儲(chǔ)字節(jié)15。這樣,在寄存器中使用了所有可用的位。這種存儲(chǔ)器安排增加了處理器的存儲(chǔ)效率。同時(shí),通過(guò)訪問(wèn)16個(gè)數(shù)據(jù)元素,現(xiàn)在一次操作可對(duì)16個(gè)數(shù)據(jù)元素并行執(zhí)行。
一般,數(shù)據(jù)元素是單條數(shù)據(jù),它與具有同樣長(zhǎng)度的其它數(shù)據(jù)元素一起存儲(chǔ)在單寄存器或存儲(chǔ)器位置中。在涉及SSE2技術(shù)的組合型數(shù)據(jù)序列中,在XMM寄存器中存儲(chǔ)的數(shù)據(jù)元素的數(shù)目是128位除以單個(gè)數(shù)據(jù)元素的位長(zhǎng)。相似地,在涉及MMX和SSE技術(shù)的組合型數(shù)據(jù)序列中,在XMM寄存器中存儲(chǔ)的數(shù)據(jù)元素的數(shù)目是64位除以單個(gè)數(shù)據(jù)元素的位長(zhǎng)。雖然在圖3A中表示的數(shù)據(jù)類(lèi)型是128位長(zhǎng),但是本發(fā)明的實(shí)施例也可以操作64位寬或者其它大小的操作數(shù)。本例的組合型字格式320是128位長(zhǎng),包含8個(gè)組合型字?jǐn)?shù)據(jù)元素。每一組合型字包含16位信息。圖3A的組合型雙字格式330是128位長(zhǎng),包含4個(gè)組合型雙字?jǐn)?shù)據(jù)元素。每一組合型雙字?jǐn)?shù)據(jù)元素包含32位信息。一個(gè)組合型4字是128位長(zhǎng),包含兩個(gè)組合型4字?jǐn)?shù)據(jù)元素。
圖3B表示另外可選的寄存器內(nèi)數(shù)據(jù)存儲(chǔ)格式。每一組合型數(shù)據(jù)可以包含多于一個(gè)的獨(dú)立數(shù)據(jù)元素。表示出3種組合型數(shù)據(jù)格式;組合型半單元341、組合型一單元342和組合型兩單元343。組合型半單元341、組合型一單元342和組合型兩單元343的一個(gè)實(shí)施例包含定點(diǎn)數(shù)據(jù)元素。對(duì)于另外可選的實(shí)施例,一個(gè)或者多個(gè)組合型半單元341、組合型一單元342和組合型兩單元343可以包含浮點(diǎn)數(shù)據(jù)元素。組合型半單元341的一個(gè)另外可選的實(shí)施例是128位長(zhǎng),包含8個(gè)16位數(shù)據(jù)元素。組合型一單元342的一個(gè)實(shí)施例是128位長(zhǎng),包含4個(gè)32位數(shù)據(jù)元素。組合型兩單元343的一個(gè)實(shí)施例是128位長(zhǎng),包含2個(gè)64位數(shù)據(jù)元素。可以理解,這種組合型數(shù)據(jù)格式可以進(jìn)一步擴(kuò)展為其它寄存器長(zhǎng)度,例如96位、160位、192位、224位、256位或更長(zhǎng)。
圖3C表示根據(jù)本發(fā)明的一個(gè)實(shí)施例在多媒體寄存器中的各種帶符號(hào)和不帶符號(hào)的組合型數(shù)據(jù)類(lèi)型表達(dá)。不帶符號(hào)的組合型字節(jié)表達(dá)344表示在SIMD寄存器中的不帶符號(hào)的組合型字節(jié)的存儲(chǔ)。各節(jié)數(shù)據(jù)元素的信息,從位7到位0存儲(chǔ)字節(jié)0,從位15到位8存儲(chǔ)字節(jié)1,從位23到位16存儲(chǔ)字節(jié)2,最后從位120到位127存儲(chǔ)字節(jié)15。這樣,在寄存器中使用了所有可用的位。這種存儲(chǔ)器安排增加了處理器的存儲(chǔ)效率。同時(shí),通過(guò)訪問(wèn)16個(gè)數(shù)據(jù)元素,現(xiàn)在一次操作可對(duì)16個(gè)數(shù)據(jù)元素以并行方式執(zhí)行。帶符號(hào)的組合型字節(jié)表達(dá)345表示帶符號(hào)的組合型字節(jié)的存儲(chǔ)。注意,每一字節(jié)數(shù)據(jù)元素的第8位是符號(hào)指示符。不帶符號(hào)的組合型字表達(dá)346表示字7到字0如何在SIMD寄存器中存儲(chǔ)。帶符號(hào)的組合型字表達(dá)347類(lèi)似不帶符號(hào)的組合型字在寄存器中的表達(dá)346。注意,每一字?jǐn)?shù)據(jù)元素的第16位是符號(hào)指示符。不帶符號(hào)的組合型雙字表達(dá)348表示雙字?jǐn)?shù)據(jù)元素如何存儲(chǔ)。帶符號(hào)的組合型雙字表達(dá)349類(lèi)似不帶符號(hào)的組合型雙字在寄存器中的表達(dá)348。注意,必需的符號(hào)位是每一雙字?jǐn)?shù)據(jù)元素的第32位。
圖3D表示操作編碼(opcode)格式360的一個(gè)實(shí)施例,它具有32位或更多位,它的寄存器/存儲(chǔ)器操作數(shù)尋址方式相應(yīng)于在“LA-32 IntelArchitecture Software Developer’s Manual Volume 2Instruction Set Reference(LA-32 Intel體系結(jié)構(gòu)軟件開(kāi)發(fā)者手冊(cè)第二卷指令集參考)”中說(shuō)明的操作碼格式類(lèi)型,它可以從加利福尼亞州圣克拉拉的英特爾公司在萬(wàn)維網(wǎng)(www)的intel.com/design/litcentr上獲得。符號(hào)乘法運(yùn)算的類(lèi)型可以用一個(gè)或者多個(gè)字段361和362編碼。可以標(biāo)識(shí)每條指令最多到兩個(gè)操作數(shù)位置,包括最多到兩個(gè)源操作數(shù)標(biāo)識(shí)符364和365。對(duì)于符號(hào)指令的一個(gè)實(shí)施例,目的地操作數(shù)標(biāo)識(shí)符366和源操作數(shù)標(biāo)識(shí)符364相同。對(duì)于另外一個(gè)可選的實(shí)施例,目的地操作數(shù)標(biāo)識(shí)符366和源操作數(shù)標(biāo)識(shí)符365相同。因此,對(duì)于符號(hào)乘法運(yùn)算的實(shí)施例,由源操作數(shù)標(biāo)識(shí)符364和365標(biāo)識(shí)的一個(gè)源操作數(shù)被符號(hào)運(yùn)算的結(jié)果重寫(xiě)。對(duì)于符號(hào)指令的一個(gè)實(shí)施例,可以使用源操作數(shù)標(biāo)識(shí)符364和365標(biāo)識(shí)64位的源和目的地操作數(shù)。
圖3E表示另一個(gè)可選的操作編碼(opcode)格式370,具有40或者更多位。操作碼格式370相應(yīng)于操作碼格式360,但包括一個(gè)可選的前綴字節(jié)378。符號(hào)乘法運(yùn)算的類(lèi)型可以由一個(gè)或者多個(gè)字段378、371和372編碼。由源操作數(shù)標(biāo)識(shí)符374和375和由前綴字節(jié)378可以標(biāo)識(shí)每條指令的最多兩個(gè)操作數(shù)位置。對(duì)于符號(hào)指令的一個(gè)實(shí)施例,可以使用前綴字節(jié)378標(biāo)識(shí)128位的源和目的地操作數(shù)。對(duì)于符號(hào)指令的一個(gè)實(shí)施例,目的地操作數(shù)標(biāo)識(shí)符376和源操作數(shù)標(biāo)識(shí)符374相同。對(duì)于另外一個(gè)可選的實(shí)施例,目的地操作數(shù)標(biāo)識(shí)符376和源操作數(shù)標(biāo)識(shí)符375相同。因此,對(duì)于符號(hào)乘法運(yùn)算的實(shí)施例,由源操作數(shù)標(biāo)識(shí)符374和375標(biāo)識(shí)的一個(gè)源操作數(shù)被符號(hào)運(yùn)算的結(jié)果重寫(xiě)。操作碼格式360和370允許部分由模式(MOD)字段363和373和由可選的比例-變址-基址(scale-index-base)和位移字節(jié)指定的寄存器到寄存器、存儲(chǔ)器到寄存器、寄存器由存儲(chǔ)器、寄存器由寄存器、寄存器由立即數(shù)、寄存器到存儲(chǔ)器的尋址。
下面轉(zhuǎn)向圖3F,在一些可選的實(shí)施例中,可以通過(guò)一條協(xié)處理器數(shù)據(jù)處理(CDP)指令執(zhí)行64位單指令多數(shù)據(jù)(SIMD)算術(shù)運(yùn)算。操作編碼(opcode)格式380表示一個(gè)這種CDP指令,它具有CDP操作碼字段382和389。CDP指令的類(lèi)型,對(duì)于符號(hào)或絕對(duì)值運(yùn)算的另外可選的實(shí)施例,可以由一個(gè)或者多個(gè)字段383、384、387和388編碼。每條指令可以最多標(biāo)識(shí)3個(gè)操作數(shù)位置,包括最多兩個(gè)源操作數(shù)標(biāo)識(shí)符385、390和一個(gè)目的地操作數(shù)標(biāo)識(shí)符386。協(xié)處理器的一個(gè)實(shí)施例可以對(duì)8、16、32和64位值操作。對(duì)于一個(gè)實(shí)施例,符號(hào)或者絕對(duì)值運(yùn)算對(duì)整數(shù)數(shù)據(jù)元素執(zhí)行。在一些實(shí)施例中,可以使用條件字段381有條件地執(zhí)行符號(hào)或者絕對(duì)值指令。對(duì)于一些符號(hào)或者絕對(duì)值指令,源數(shù)據(jù)長(zhǎng)度可以由字段383編碼。在符號(hào)或者絕對(duì)值指令的一些實(shí)施例中,可以在SIMD字段上進(jìn)行零(Z)、負(fù)(N)、進(jìn)位(C)和溢出(V)檢測(cè)。對(duì)于一些指令,飽和類(lèi)型可以由字段384編碼。
圖4是根據(jù)本發(fā)明對(duì)組合型數(shù)據(jù)操作數(shù)執(zhí)行符號(hào)運(yùn)算的邏輯的一個(gè)實(shí)施例的方框圖。本發(fā)明的實(shí)施例可以實(shí)現(xiàn)為用上述各種類(lèi)型的操作數(shù)來(lái)起作用。對(duì)于一種實(shí)現(xiàn),根據(jù)本發(fā)明的符號(hào)運(yùn)算被實(shí)現(xiàn)為對(duì)特定數(shù)據(jù)類(lèi)型操作的一組指令。例如,提供組合型符號(hào)字節(jié)(PSIGNB)指令確定字節(jié)數(shù)據(jù)類(lèi)型的符號(hào)。組合型符號(hào)字(PSIGNW)指令引起對(duì)字?jǐn)?shù)據(jù)類(lèi)型的符號(hào)運(yùn)算。組合型符號(hào)雙字(PSIGND)指令對(duì)雙字?jǐn)?shù)據(jù)類(lèi)型執(zhí)行符號(hào)乘法運(yùn)算。雖然這些指令具有不同的名稱(chēng),但是一般的符號(hào)乘法運(yùn)算以相似方式執(zhí)行。為簡(jiǎn)單起見(jiàn),下面的討論和例子在組合型符號(hào)(PSIGN)指令的環(huán)境下處理數(shù)據(jù)元素。
本實(shí)施例的用于符號(hào)乘法運(yùn)算的PSIGN指令以?xún)蓷l信息開(kāi)始第一數(shù)據(jù)操作數(shù)DATA A 410和第二數(shù)據(jù)數(shù)DATA B 420。對(duì)于下面的討論,DATA A、DATA B和RESULTANT(結(jié)果)一般稱(chēng)操作數(shù)或數(shù)據(jù)塊,但是不限于此,還包括寄存器、寄存器文件和存儲(chǔ)器位置。在一個(gè)實(shí)施例中,每一符號(hào)指令(PSIGNB,PSIGNW,PSIGND)被解碼為一個(gè)微操作。在另一可選的實(shí)施例中,每一指令可以被解碼為對(duì)數(shù)據(jù)操作數(shù)執(zhí)行符號(hào)運(yùn)算的不同數(shù)目的微操作。對(duì)于本例,操作數(shù)410、420是128位寬的存儲(chǔ)在具有字寬數(shù)據(jù)元素的源寄存器/存儲(chǔ)器中的多條信息。在一個(gè)實(shí)施例中,操作數(shù)410、420保持在128位長(zhǎng)的SIMD寄存器中,諸如128位SSE2 XMM寄存器。對(duì)于一個(gè)實(shí)施例,RESULTANT 440也是XMM數(shù)據(jù)寄存器。此外,RESULTANT 440也可以是和一個(gè)源操作數(shù)相同的寄存器或存儲(chǔ)器位置。取決于特定的實(shí)現(xiàn),操作數(shù)和寄存器可以是其它長(zhǎng)度,例如32、64和256位,具有字節(jié)、雙字、四字長(zhǎng)度的數(shù)據(jù)元素。雖然本例的數(shù)據(jù)元素是字的長(zhǎng)度,但是同樣的概念可以擴(kuò)展到字節(jié)和雙字長(zhǎng)度的元素。在數(shù)據(jù)操作數(shù)是64位寬時(shí),使用MMX寄存器代替XMM寄存器。
本例中的第一操作數(shù)410包括8個(gè)一組的數(shù)據(jù)元素A7、A6、A5、A4、A3、A2、A1和A0。每一單個(gè)數(shù)據(jù)元素相應(yīng)于結(jié)果440中的數(shù)據(jù)元素位置。第二操作數(shù)420包括另外8個(gè)一組的數(shù)據(jù)段B7、B6、B5、B4、B3、B2、B1和B0。這里的數(shù)據(jù)段等長(zhǎng),每一段包括一個(gè)單字(16位)數(shù)據(jù)。然而,數(shù)據(jù)元素和數(shù)據(jù)元素位置可以處理字以外的其它間隔長(zhǎng)度。如果每一數(shù)據(jù)元素是字節(jié)(8位)、雙字(32位)或4字(64位),則128位操作數(shù)將分別具有16字節(jié)寬、4個(gè)雙字寬或兩個(gè)4字寬數(shù)據(jù)元素。本發(fā)明的實(shí)施例不限于特定長(zhǎng)度的數(shù)據(jù)操作數(shù)或數(shù)據(jù)段,而可以為每種實(shí)現(xiàn)適當(dāng)決定長(zhǎng)度。
操作數(shù)410、420可以駐留在寄存器中或存儲(chǔ)器位置或者在寄存器文件中或其混合中。數(shù)據(jù)操作數(shù)410、420連同符號(hào)指令被送往處理器中的執(zhí)行單元的符號(hào)計(jì)算邏輯430。到符號(hào)指令到達(dá)執(zhí)行單元的時(shí)候,該指令應(yīng)該已經(jīng)在處理器流水線中被解碼。這樣,符號(hào)指令可以處于微操作(uop)或某些其它解碼格式的形式。對(duì)于本實(shí)施例,兩個(gè)數(shù)據(jù)操作數(shù)410、420在符號(hào)計(jì)算邏輯430被接收。符號(hào)計(jì)算邏輯430為第一操作數(shù)410的每一數(shù)據(jù)元素選擇符號(hào)值或者正負(fù)號(hào)函數(shù),把該符號(hào)值與第二操作數(shù)420的相應(yīng)數(shù)據(jù)元素位置的數(shù)據(jù)元素的值相乘,把為該乘法的積放入結(jié)果440的適當(dāng)位置。雖然在這里討論了乘法運(yùn)算的一般概念,但是可以使用其它方法和裝置來(lái)得到和用乘法得到的同樣的結(jié)果。例如,在一個(gè)實(shí)施例中,可以用乘法單元執(zhí)行相乘。在另一個(gè)實(shí)施例中,通過(guò)邏輯來(lái)處理算法使值不改變、設(shè)定為0或者從“+”變換符號(hào)為“-”或反之,也可以得到同樣的結(jié)果。
對(duì)第一操作數(shù)410中的全組數(shù)據(jù)元素位置重復(fù)符號(hào)抽取和乘法的處理。雖然本實(shí)施例的數(shù)據(jù)處理包括符號(hào)抽取和乘法,但是術(shù)語(yǔ)“符號(hào)運(yùn)算”或“符號(hào)乘法運(yùn)算”在這里也可以用來(lái)指這一數(shù)據(jù)處理。對(duì)于一個(gè)實(shí)施例,對(duì)于所有數(shù)據(jù)位置的數(shù)據(jù)元素并行處理。在另一個(gè)實(shí)施例中,某一部分的數(shù)據(jù)元素位置可以同時(shí)一起處理。這里,結(jié)果440包括8個(gè)積B7×SIGNA7、B6×SIGNA6、B5×SIGNA5、B4×SIGNA4、B3×SIGNA3、B2×SIGNA2、B1×SIGNA1和B0×SIGNA0。對(duì)于本實(shí)施例,數(shù)據(jù)元素的正負(fù)號(hào)函數(shù)或符號(hào)值(SIGNx)對(duì)于非零正數(shù)是“+1”,對(duì)于非零負(fù)數(shù)是“-1”,對(duì)于零是“0”。在一個(gè)另外可選的體系結(jié)構(gòu)允許“+0”和“-0”的實(shí)施例中,這兩類(lèi)零都被視為零,其中數(shù)據(jù)元素的正負(fù)號(hào)函數(shù)或符號(hào)值是“0”。
圖5表示根據(jù)本發(fā)明的一個(gè)實(shí)施例對(duì)數(shù)據(jù)元素執(zhí)行符號(hào)乘法運(yùn)算的操作。本例的符號(hào)運(yùn)算可以發(fā)生在圖4的符號(hào)計(jì)算邏輯430之內(nèi)。在本例中,符號(hào)運(yùn)算530用對(duì)于單數(shù)據(jù)元素位置的數(shù)據(jù)元素說(shuō)明。把從第一數(shù)據(jù)操作數(shù)來(lái)的第一數(shù)據(jù)元素DATA ELEMENT A 510和從第二數(shù)據(jù)操作數(shù)來(lái)的第二數(shù)據(jù)元素DATA ELEMENT B 520拿到一起。每一數(shù)據(jù)元素包括一個(gè)值,該值具有符號(hào)部分和數(shù)值基數(shù)部分。例如,DATA ELEMENT A510解釋為包括SIGNA和BASEA的數(shù)512。相似地,DATA ELEMENT B520解釋為包括SIGNB和BASEB的數(shù)522。
在符號(hào)運(yùn)算530期間,符號(hào)計(jì)算邏輯取第一操作數(shù)的符號(hào)值,對(duì)于DATA ELEMENT A 510的SIGNA,用DATA ELEMENT B 520中的數(shù)乘該符號(hào)值。在一種情況下,該邏輯將響應(yīng)于SIGNA的值執(zhí)行適當(dāng)?shù)某朔ㄟ\(yùn)算。一個(gè)數(shù)的符號(hào)部分可以是負(fù)“-”或正“+”。一個(gè)數(shù)的值部分可以是零“0”或非零值。對(duì)于一個(gè)實(shí)施例的符號(hào)運(yùn)算,該邏輯把第一數(shù)據(jù)元素放入3類(lèi)中之一正“+”、零“0”、或負(fù)“-”。如果第一數(shù)據(jù)元素510為正,意味著它的符號(hào)為正,則該數(shù)據(jù)位置的結(jié)果540實(shí)質(zhì)上是第二數(shù)據(jù)元素520自身,因?yàn)檎?hào)被看作用等于“+1”的SIGNA乘第二數(shù)據(jù)元素520。如果第一數(shù)據(jù)元素510是零,則不理第一數(shù)據(jù)元素510的符號(hào)值,因?yàn)榱銓?shí)質(zhì)上是需要等于零的SIGNA乘第二數(shù)據(jù)元素520,產(chǎn)生零的結(jié)果540。如果第一數(shù)據(jù)元素510為負(fù),意味著它的符號(hào)為負(fù),則該數(shù)據(jù)位置的結(jié)果540將是第二數(shù)據(jù)元素520被等于“-1”的SIGNA乘的積。對(duì)于涉及DATA ELEMENT A 510和DATA ELEMENT B 520的給定數(shù)據(jù)元素位置的符號(hào)乘法運(yùn)算的結(jié)果540是“SIGNA×DATA ELEMENTB”。在另一個(gè)實(shí)施例中,該邏輯能夠?qū)⒎?hào)值、SIGNA和SIGNB乘到一起,并把結(jié)果符號(hào)值應(yīng)用于BASEB,形成該數(shù)據(jù)元素位置的最后結(jié)果。
圖6A是根據(jù)本發(fā)明用于執(zhí)行符號(hào)乘法運(yùn)算的電路600的一個(gè)實(shí)施例的方框圖。本實(shí)施例的電路600包括多路轉(zhuǎn)換結(jié)構(gòu)和求值來(lái)自第一源操作數(shù)的元素的符號(hào)值并有效地計(jì)算該符號(hào)值與來(lái)自第二源操作數(shù)的相應(yīng)元素的積的邏輯。為簡(jiǎn)化討論起見(jiàn),圖6A中的電路600是對(duì)于一個(gè)數(shù)據(jù)元素位置或?qū)τ诮Y(jié)果組合型數(shù)據(jù)塊的一條來(lái)表示的。此外,對(duì)于這一數(shù)據(jù)元素位置所示的邏輯600可以存在于同一執(zhí)行單元上的多個(gè)實(shí)例中。取決于具體實(shí)現(xiàn),因?yàn)樾枰糜谙M麛?shù)目的數(shù)據(jù)元素,一些電路元件被外推出來(lái)。例如,對(duì)于8個(gè)數(shù)據(jù)元素,可以物理地存在為處理這8個(gè)數(shù)據(jù)元素的所有位所需要的足夠的多路轉(zhuǎn)換器和加法器。相似地,可以有16個(gè)電路實(shí)例來(lái)處理每一個(gè)具有16個(gè)數(shù)據(jù)元素的兩個(gè)操作數(shù)。在另一個(gè)實(shí)施例中,一些邏輯,例如像加法器614,可以在所有數(shù)據(jù)元素位置中共享。在又一個(gè)實(shí)現(xiàn)中,電路能夠處理組合型數(shù)據(jù),而對(duì)于多數(shù)據(jù)元素位置的數(shù)據(jù)可以通過(guò)該邏輯一起處理。
對(duì)于本實(shí)施例,用于符號(hào)運(yùn)算的一部分邏輯也與其它組合型運(yùn)算共享,以便減少設(shè)備數(shù)量和冗余度。本實(shí)施例的電路600從源操作數(shù)接收輸入數(shù)據(jù)元素,并對(duì)在結(jié)果組合型數(shù)據(jù)操作數(shù)中的特定數(shù)據(jù)元素位置輸出結(jié)果數(shù)據(jù)元素。雖然源元素,SRC X 602和SRC Y 604,在這里指單一數(shù)據(jù)元素,但是應(yīng)該理解,這些元素是伴隨一個(gè)組合型符號(hào)指令的較大的組合型數(shù)據(jù)操作數(shù)的一部分。在本實(shí)施例中,第一源數(shù)據(jù)元素,SRC X 602,耦合到一個(gè)兩輸入(2:1)多路轉(zhuǎn)換器(mux)606。SIGN信號(hào)622控制該2:1多路轉(zhuǎn)換器的操作。對(duì)于本實(shí)施例,如果符號(hào)運(yùn)算正在被服務(wù),則SIGN 622引起多路轉(zhuǎn)換器606輸出“0”,其作為第二輸入耦合到多路轉(zhuǎn)換器606。如果正在執(zhí)行另一類(lèi)型操作,則SIGN 622引起多路轉(zhuǎn)換器606輸出SRC X 602。
本實(shí)施例的第二源數(shù)據(jù)元素,SRC Y 604,以反相的605和非反相的604形式耦合到另一個(gè)2:1多路轉(zhuǎn)換器608。如果正在執(zhí)行符號(hào)運(yùn)算,則SIGN 622引起多路轉(zhuǎn)換器608輸出反相輸入605。在本例中,SRC Y 604的反相形式605可以用于實(shí)現(xiàn)減法。兩個(gè)多路轉(zhuǎn)換器606、608耦合到加法器614。多路轉(zhuǎn)換器輸出610、612分別是對(duì)加法器614的第一和第二輸入。加法器614將把它的輸入加在一起,在其輸出616產(chǎn)生和。在符號(hào)運(yùn)算期問(wèn),加法器接收“0”作為它的第一輸入610,接收SRC Y 605作為它的第二輸入612。加法器614看似把反相的SRC Y 605加到“0”603上。但是本實(shí)施例的SRC Y 604的反相本質(zhì)上引起SRC Y 604把符號(hào)從正改變?yōu)樨?fù),或從負(fù)改變?yōu)檎?。這樣,反相的SRC Y 605實(shí)質(zhì)上引起加法器614在數(shù)學(xué)上從“0”603減去SRC Y 604。加法器614的輸出616可以代表“0-SRC Y”的和。
SRC X 602的數(shù)據(jù)位還耦合到零檢測(cè)器電路624,它將檢測(cè)SRC X602是否等于零值。指示是否檢測(cè)到總的零值的零檢測(cè)器的輸出626作為控制信號(hào)耦合到三輸入(3:1)多路轉(zhuǎn)換器618并作為輸入耦合到邏輯異或(NOR)門(mén)628。一個(gè)實(shí)施例的零檢測(cè)與加法并行執(zhí)行,并且不產(chǎn)生任何新的關(guān)鍵時(shí)序路徑。SRC X 602的N個(gè)符號(hào)位620,N是大于等于1的數(shù),也耦合到邏輯NOR門(mén)628,并作為對(duì)3:1多路轉(zhuǎn)換器618的控制。如果該NOR 628門(mén)的兩個(gè)輸入都是有效低的話,它將輸出有效高信號(hào)。在本例中,如果關(guān)于符號(hào)位620的輸入是低,表示SRC X 602為正,并且關(guān)于零檢測(cè)器結(jié)果的輸入為低,指示SRC X 602是非零值,則NOR門(mén)輸出632將為高。
耦合到3:1多路轉(zhuǎn)換器618的控制信號(hào)組634操作來(lái)選擇合適的數(shù)據(jù)值作為結(jié)果630輸出。SRC X 602、SRC Y 604以及“0-SRC Y”的和616的數(shù)據(jù)值耦合到3:1多路轉(zhuǎn)換器618。對(duì)于本實(shí)施例,信號(hào)634將根據(jù)三種情況中之一引起一個(gè)輸入被選擇。如果第一源數(shù)據(jù)元素SRC X 602是零,則產(chǎn)生第一種情況。換句話說(shuō),第二數(shù)據(jù)元素604將被零乘。這一條件使用零檢測(cè)器的輸出626指示。在這種情況下,SRC X 602的輸入(它在這里是零值)被選擇,并作為結(jié)果630被輸出。在本實(shí)施例中,這一零條件勝過(guò)其它控制信號(hào)620、632,零被輸出,而不管SRC X 602的符號(hào)值和SRC Y 604的內(nèi)容。
如果第一源數(shù)據(jù)元素SRC X 602為正和非零值,則出現(xiàn)第二種情況。這一條件使用NOR門(mén)輸出632指示。實(shí)質(zhì)上,第二數(shù)據(jù)元素604將被“+1”乘,這將得到SRC Y 604自身。在這一場(chǎng)合,SRC Y 604的輸入被選擇并作為結(jié)果630輸出。如果第一源數(shù)據(jù)元素SRC X 602為負(fù)和非零值,則出現(xiàn)第三種情況。這種情況用SRC X 602的N個(gè)符號(hào)位620指示,如果SRC X 602為負(fù),則它提供一個(gè)有效高值,而如果SRC X 602為正,則它提供一個(gè)有效低值。在這一場(chǎng)合,“0-SRC Y”的和616的輸入被選擇并并作為結(jié)果630輸出。實(shí)質(zhì)上,SRC X 602的負(fù)符號(hào)作為“-1”對(duì)待,“0-SRC Y”計(jì)算在數(shù)學(xué)上等價(jià)于第二數(shù)據(jù)元素SRC Y 604用因子“-1”乘。對(duì)于這一實(shí)施例,對(duì)于這一以及其它數(shù)據(jù)元素位置的結(jié)果被組合為具有和源數(shù)據(jù)操作數(shù)同樣長(zhǎng)度的結(jié)果數(shù)據(jù)塊。例如,如果源組合型數(shù)據(jù)操作數(shù)是64或者128位寬,則結(jié)果組合型數(shù)據(jù)塊也分別為64或128位寬。此外,用于符號(hào)運(yùn)算的源數(shù)據(jù)操作數(shù)可以來(lái)自寄存器或存儲(chǔ)器位置。對(duì)于本實(shí)施例,結(jié)果組合型數(shù)據(jù)塊重寫(xiě)在SIMD寄存器中對(duì)于一個(gè)源數(shù)據(jù)操作數(shù)的數(shù)據(jù)。
圖6B是根據(jù)本發(fā)明的執(zhí)行符號(hào)運(yùn)算的電路650的另一實(shí)施例的方框圖。雖然該電路安排和連接不同,但是該實(shí)施例的大體安排和功能相似于圖6A的電路600。本實(shí)施例的電路650也包括多路轉(zhuǎn)換結(jié)構(gòu)和求值第一數(shù)據(jù)元素的符號(hào)并用第二數(shù)據(jù)元素乘該符號(hào)的邏輯。該電路650是在單數(shù)據(jù)元素位置或者結(jié)果組合型操作數(shù)的單數(shù)據(jù)片的環(huán)境下表示和說(shuō)明的,但是所述裝置和方法可以根據(jù)需要擴(kuò)展,并根據(jù)具體實(shí)現(xiàn)應(yīng)用于各種長(zhǎng)度的操作數(shù)。這樣,圖6B中的某些電路元件可以被復(fù)制,以便服務(wù)更多數(shù)據(jù)元素。例如,如果操作數(shù)能夠包括16個(gè)數(shù)據(jù)元素位置,則圖6B的電路可以擴(kuò)展以支持該16個(gè)數(shù)據(jù)元素位置。
本實(shí)施例的電路650從第一組合型操作數(shù)接收輸入數(shù)據(jù)作為第一數(shù)據(jù)元素SRC X 602,從第二組合型操作數(shù)接收輸入數(shù)據(jù)作為第二數(shù)據(jù)元素SRC Y 604。SRC X 602作為輸入耦合到3:1多路轉(zhuǎn)換器618和零檢測(cè)器邏輯624。零檢測(cè)器624將確定SRC X 602是否是零。SRC Y 604耦合到3:1多路轉(zhuǎn)換器618,其反相形式613(-SRC Y)耦合到加法器614。加法器614將把反相的SRC Y 613與其它加法器輸入(在這一場(chǎng)合是“0”613)相加,以在它的輸出616上得到一個(gè)和。通過(guò)把SRC Y 604的反相形式相加,加法器把零與負(fù)的SRC Y相加,或者數(shù)學(xué)上從“0”減去SRCY。加法器614的輸出616是“0-SRC Y”,它作為輸入耦合到3:1多路轉(zhuǎn)換器618。值“0-SRC Y”也等價(jià)于用“-1”乘SRC Y。
零檢測(cè)器電路624的輸出信號(hào)626作為控制信號(hào)耦合到3:1多路轉(zhuǎn)換器618,還作為輸入耦合到兩個(gè)輸入邏輯NOR門(mén)628。相似地,SRC X602的N個(gè)符號(hào)位620作為控制耦合到3:1多路轉(zhuǎn)換器618并作為其它輸入連接到NOR門(mén)628。如果符號(hào)位620和零檢測(cè)器輸出626兩者都是有效低的話,對(duì)于本實(shí)施例的NOR門(mén)628的輸出632是有效高。NOR門(mén)輸出632也作為控制信號(hào)耦合到3:1多路轉(zhuǎn)換器618。該組控制信號(hào)634將根據(jù)哪個(gè)條件存在來(lái)選擇三個(gè)多路轉(zhuǎn)換器輸入602、604、616中的一個(gè)作為結(jié)果630輸出。這三種情況如上面圖6A所述,是(1)SRC X 602是零;(2)SRC X 602是正數(shù)和非零值;(3)SRC X 602是負(fù)數(shù)和非零值。對(duì)于第一種情況,選擇SRC X 602,其為零。在第二種情況,選擇SRC Y 604,它等于“SRC Y×(+1)”。對(duì)于第三種情況,選擇“0-SRCY”616,它等于“SRC Y×(-1)”。對(duì)于每一數(shù)據(jù)元素位置的結(jié)果與其它結(jié)果一起組合到結(jié)果數(shù)據(jù)操作數(shù)中。
圖7表示根據(jù)本發(fā)明的一個(gè)實(shí)施例對(duì)多個(gè)數(shù)據(jù)元素的組合型符號(hào)指令的操作。這是指令“PSIGNW DATA B,DATA A”的例子。PSIGNW指令將引起符號(hào)乘法運(yùn)算來(lái)對(duì)在第一源組合型操作數(shù)DATA B 711和第二源組合型操作數(shù)DATA A 701中的字長(zhǎng)度數(shù)據(jù)元素操作。這里的說(shuō)明也可應(yīng)用于其它組合型符號(hào)指令,例如PSIGNB和PSIGND。在本例中,一個(gè)源數(shù)據(jù)701的符號(hào)通過(guò)乘法施加在另一個(gè)源數(shù)據(jù)711的值上,得到積,該積被組織到目的地?cái)?shù)據(jù)存儲(chǔ)設(shè)備721中。在本例中,兩個(gè)源操作數(shù)DATA A701和DATA B 711的每一個(gè)都包括8個(gè)組合型數(shù)據(jù)元素,結(jié)果721也一樣。在本實(shí)施例中,所涉及的每一數(shù)據(jù)元素是8位或者一個(gè)字節(jié)寬。這樣,DATA A 701、DATA B 711和RESULTANT 721數(shù)據(jù)塊的每一個(gè)都是128位長(zhǎng)。此外,這些數(shù)據(jù)塊可以駐留在存儲(chǔ)器和/或寄存器中。
如圖7所示,DATA A 701包括具有以10為基數(shù)的數(shù)值的數(shù)據(jù)元素“-4270”702,“240”703,“-3573”704,“7033”705,“-2427”706,“-9703”707,“0”708,“2605”709。相似地,DATA B 711包括具有以10為基數(shù)的數(shù)值的源數(shù)據(jù)元素“-1120”712,“6401”713,“36”714,“0”715,“691”716,“-6780”717,“-855”718,“5177”719。以10為基數(shù)的數(shù)字另外在下面用角標(biāo)10的后綴指出。相應(yīng)地,把第二數(shù)據(jù)操作數(shù)701的每一數(shù)據(jù)元素的符號(hào)抽出并與在第一數(shù)據(jù)操作數(shù)711中的相應(yīng)數(shù)據(jù)元素位置的每一數(shù)據(jù)元素的數(shù)相乘。如果對(duì)于在第二操作數(shù)710中的數(shù)據(jù)元素的數(shù)是“0”,則也把“0”輸入到相應(yīng)的結(jié)果數(shù)據(jù)元素位置中。對(duì)于一個(gè)實(shí)施例,對(duì)于在源數(shù)據(jù)701、711中的一個(gè)或者多個(gè)數(shù)據(jù)元素位置的符號(hào)乘法運(yùn)算的處理可以并行執(zhí)行。
當(dāng)求出第二操作數(shù)701中的每一數(shù)據(jù)元素的符號(hào)值,用適當(dāng)?shù)囊蜃映说谝徊僮鲾?shù)711中相應(yīng)數(shù)據(jù)元素位置的數(shù)。對(duì)于本實(shí)施例,乘數(shù)是“-1”、“0”或“+1”中的一個(gè),取決于第二操作數(shù)數(shù)據(jù)元素的符號(hào)值。雖然這里用乘法說(shuō)明符號(hào)運(yùn)算,但是實(shí)際的乘法運(yùn)算在物理上可不一定需要而獲得同樣的數(shù)學(xué)結(jié)果。例如,未必用“0”乘來(lái)得到乘積“0”。物理上也未必需要用“+1”乘一個(gè)數(shù),因?yàn)榉e將是該數(shù)自身。相似地,用“-1”乘一個(gè)數(shù)的結(jié)果也可以通過(guò)從“0”減去該數(shù)得到。
例如,第二操作數(shù)701的最左邊的數(shù)據(jù)元素702具有值“-427010”,它是一個(gè)負(fù)數(shù)。同時(shí),第一操作數(shù)711的最左邊的數(shù)據(jù)元素712包含值“-112010”。因?yàn)榈诙僮鲾?shù)數(shù)據(jù)元素702的符號(hào)值為負(fù),因此在組合型符號(hào)運(yùn)算期間,相應(yīng)的第一操作數(shù)數(shù)據(jù)元素712的值“-112010”概念上由“-1”乘以得到積“112010”。該積被存儲(chǔ)到結(jié)果721的適當(dāng)?shù)臄?shù)據(jù)元素位置722。
相似地,第二操作數(shù)701的最右邊的數(shù)據(jù)元素709具有值“260510”,它是一個(gè)正數(shù)。同時(shí),第一操作數(shù)711的最右邊的數(shù)據(jù)元素719包含值“517710”。因?yàn)榈诙僮鲾?shù)數(shù)據(jù)元素709的符號(hào)值為正,因此在組合型符號(hào)運(yùn)算期間,相應(yīng)的第一操作數(shù)數(shù)據(jù)元素719的值“517710”概念上由“+1”乘以得到積“517710”。該積被存儲(chǔ)到結(jié)果721的最右邊的數(shù)據(jù)元素位置729。假設(shè)第二操作數(shù)數(shù)據(jù)元素709的符號(hào)值為正,則實(shí)際乘法將不需要,因?yàn)榉e729只是第一操作數(shù)數(shù)據(jù)元素719的值。
從第二操作數(shù)701右數(shù)第二數(shù)據(jù)元素708的值是“010”。同時(shí),從第一操作數(shù)711右數(shù)第二數(shù)據(jù)元素718包含值“-85510”。因?yàn)榈诙僮鲾?shù)數(shù)據(jù)元素708的數(shù)是零,因此在組合型符號(hào)運(yùn)算期間,相應(yīng)的數(shù)據(jù)元素718的值“-85510”本質(zhì)上由“0”乘,以得到積“0”。于是,把“0”存儲(chǔ)在從結(jié)果721右數(shù)第二數(shù)據(jù)元素位置728中。因?yàn)榈诙僮鲾?shù)數(shù)據(jù)元素708具有零值,為實(shí)現(xiàn)乘積是“0”,乘法不是必須的。相似地,第二操作數(shù)數(shù)據(jù)元素的零值在本實(shí)施例中定義為在結(jié)果位置中引起“0”,而不管對(duì)于第二操作數(shù)數(shù)據(jù)元素可能存在的任何符號(hào)值。
圖8A是表示執(zhí)行符號(hào)運(yùn)算的一種方法的一個(gè)實(shí)施例的流程圖800。這里使用長(zhǎng)度值L來(lái)表示操作數(shù)和數(shù)據(jù)塊的寬度。取決于具體的實(shí)施例,L可以被用于以位、字節(jié)、字等的數(shù)目的形式來(lái)指定寬度。相似地,使用術(shù)語(yǔ)M指定組合在一個(gè)操作數(shù)內(nèi)的數(shù)據(jù)元素或者段的數(shù)目。在框810,接收到具有M個(gè)元素的長(zhǎng)度L的第一數(shù)據(jù)操作數(shù)B。在框820,接收到也具有M個(gè)元素的長(zhǎng)度L的第二數(shù)據(jù)操作數(shù)A。對(duì)于本實(shí)施例,源操作數(shù)和結(jié)果等長(zhǎng),并具有同樣數(shù)目的數(shù)據(jù)元素。在框830,處理執(zhí)行符號(hào)乘法運(yùn)算的指令。
按照對(duì)每一數(shù)據(jù)元素位置發(fā)生什么來(lái)進(jìn)一步說(shuō)明本實(shí)施例的在框830的符號(hào)運(yùn)算的細(xì)節(jié)。對(duì)于一個(gè)實(shí)施例,并行地執(zhí)行對(duì)于所有組合型的結(jié)果數(shù)據(jù)元素位置的符號(hào)運(yùn)算。在另一個(gè)實(shí)施例中,一次可以處理數(shù)據(jù)元素的某一部分。在框831,進(jìn)行檢查以確定來(lái)自數(shù)據(jù)操作數(shù)A的元素的值是否是負(fù)(小于零)。如果判定該值為負(fù),則在框832計(jì)算對(duì)于來(lái)自數(shù)據(jù)操作數(shù)B的元素的值與“-1”的乘積作為這一具體數(shù)據(jù)元素位置的結(jié)果值。如果對(duì)于來(lái)自操作數(shù)A的元素的值在框831判定為非負(fù),則在框833確定來(lái)自操作數(shù)A的元素的值是否等于零。如果判定該值為零,則在框834將對(duì)于該數(shù)據(jù)元素位置的結(jié)果值設(shè)定為“0”。但是,如果在框833未發(fā)現(xiàn)對(duì)于操作數(shù)A元素的值是零,則在框835進(jìn)行另一判斷,確定對(duì)于該操作數(shù)A元素的值是否為正(大于零)。如果對(duì)于該操作數(shù)A元素的值為正,則在框836計(jì)算對(duì)于操作數(shù)B的數(shù)據(jù)元素的值與“+1”的乘積作為這一具體數(shù)據(jù)元素位置的結(jié)果值。如果對(duì)于本實(shí)施例,在框835判定操作數(shù)A元素的值非正,則在框837該值被認(rèn)為是不明確的,因?yàn)槿N情況(正、“0”、負(fù))的哪一種都不適用。把對(duì)這些不同數(shù)據(jù)元素的結(jié)果值安排到相應(yīng)于在結(jié)果組合型操作數(shù)中的源元素對(duì)的適當(dāng)?shù)臄?shù)據(jù)元素位置中。
圖8B是表示執(zhí)行符號(hào)運(yùn)算的一種方法的另一個(gè)實(shí)施例的流程圖850。在框810和820的對(duì)于該實(shí)施例的方法流程相似于圖8A的流程。在本例中,對(duì)于框830執(zhí)行符號(hào)乘法運(yùn)算的方法有一些不同。也按照對(duì)于每一數(shù)據(jù)元素位置發(fā)生什么來(lái)進(jìn)一步說(shuō)明本實(shí)施例的在框830的符號(hào)運(yùn)算的細(xì)節(jié)。在框840,判定數(shù)據(jù)操作數(shù)A的元素中的值是否等于零。如果該判定為真,值是“0”,則在框841把“0”作為對(duì)于該數(shù)據(jù)元素位置的結(jié)果值輸入。但是如果判定對(duì)于這一位置的操作數(shù)A的數(shù)據(jù)元素是非零值,則在框842計(jì)算操作數(shù)B數(shù)據(jù)元素的值與操作數(shù)A數(shù)據(jù)元素的符號(hào)的乘積作為對(duì)于這一數(shù)據(jù)元素位置的結(jié)果值。和圖8A一樣,把對(duì)于每一數(shù)據(jù)元素位置的結(jié)果值安排到結(jié)果組合型數(shù)據(jù)塊中的適當(dāng)位置中。
圖9是對(duì)組合型數(shù)據(jù)操作數(shù)執(zhí)行絕對(duì)值運(yùn)算的邏輯的一個(gè)實(shí)施例的方框圖。對(duì)于一個(gè)實(shí)施例,根據(jù)本發(fā)明的絕對(duì)值運(yùn)算實(shí)現(xiàn)為操作不同長(zhǎng)度數(shù)據(jù)類(lèi)型的組合型絕對(duì)值(PABS)指令。為簡(jiǎn)單起見(jiàn),這一PABS指令在這里按照具有8個(gè)數(shù)據(jù)元素的組合型操作數(shù)的一般形式來(lái)說(shuō)明。這些數(shù)據(jù)元素可以是字節(jié)、字、雙字等,取決于具體的實(shí)現(xiàn)。在本例中,使用像“PABS SRC1”這樣的一行代碼調(diào)用組合型絕對(duì)值運(yùn)算,其中,SRC1指向SIMD寄存器或存儲(chǔ)器位置。在這種情況下,SRC1既是數(shù)據(jù)源也是結(jié)果目的地。對(duì)于一個(gè)實(shí)施例,指令格式需要兩個(gè)操作數(shù),并且行將讀作“PABS SRC1,SRC2”。在這種情況下,該P(yáng)ABS指令引起SRC2的數(shù)據(jù)元素中的絕對(duì)值被放入SRC1中。此外,在一個(gè)實(shí)施例中,提供組合型絕對(duì)值字節(jié)(PABSB)指令來(lái)產(chǎn)生字節(jié)數(shù)據(jù)類(lèi)型的絕對(duì)值;提供組合型絕對(duì)值字(PABSW)指令來(lái)產(chǎn)生字?jǐn)?shù)據(jù)類(lèi)型的絕對(duì)值;并且提供組合型絕對(duì)值雙字(PABSD)指令來(lái)產(chǎn)生雙字?jǐn)?shù)據(jù)類(lèi)型的絕對(duì)值。
用于本實(shí)施例的絕對(duì)值運(yùn)算的PABS指令以具有8個(gè)數(shù)據(jù)元素A7、A6、A5、A4、A3、A2、A1和A0的第一數(shù)據(jù)操作數(shù)SOURCE DATA 910開(kāi)始。每一單個(gè)的數(shù)據(jù)元素相應(yīng)于結(jié)果930中的數(shù)據(jù)元素位置。把數(shù)據(jù)操作數(shù)910連同絕對(duì)值指令發(fā)送給絕對(duì)值計(jì)算邏輯920。絕對(duì)值計(jì)算邏輯920修改每一源數(shù)據(jù)元素中的值,使得在結(jié)果930中的相應(yīng)元素位置中的數(shù)字值將具有該源數(shù)據(jù)元素?cái)?shù)值的無(wú)符號(hào)絕對(duì)值。例如,最左邊的結(jié)果元素位置具有源數(shù)據(jù)元素A7的數(shù)值的無(wú)符號(hào)絕對(duì)值。對(duì)于在源操作數(shù)910中的數(shù)據(jù)元素位置的全部集合重復(fù)這一絕對(duì)值處理。對(duì)于本實(shí)施例,結(jié)果位置可以和源操作數(shù)位置相同。在用PABS指令指定兩個(gè)操作數(shù)的另一可選的實(shí)施例中,一個(gè)操作數(shù)可以指定源,另一個(gè)可以指定目的地。
在圖像處理中經(jīng)常實(shí)現(xiàn)壓縮。視頻幀通常以像素塊壓縮。高度壓縮的視頻由于量化操作可以顯出成塊的非自然信號(hào)(artifact)。在許多編碼算法中,在較低位速率下發(fā)生的一類(lèi)圖像劣化稱(chēng)為成塊效應(yīng)。這一效應(yīng)是在圖像處理期間通過(guò)將圖像分割為具有固定柵格的矩形塊的不自然的方式而引起的。因?yàn)槊恳粔K的編碼是獨(dú)立的,因此沒(méi)有任何東西來(lái)保證在塊之間的邊界上被編碼的圖像值的連續(xù)性。離散余弦變換的直流(DC)系數(shù)的量化可以給一個(gè)塊增加或者減去一個(gè)偏移量,使它比臨近塊更亮或者更暗,并建立沿塊邊界的線的外觀。這有時(shí)在編碼的圖像中能產(chǎn)生突出的人工邊緣和成塊的非自然信號(hào)。在圖像序列中,相對(duì)于運(yùn)動(dòng)的場(chǎng)景觀看的非運(yùn)動(dòng)的邊緣的背景柵格可以產(chǎn)生非常不自然和不愉快的類(lèi)型的退化。為防止這些成塊效應(yīng)發(fā)生,一種解塊方案可以使用濾波器來(lái)平滑人工邊緣。使用平滑了塊間邊界的解塊算法可以使這些非自然信號(hào)較不容易發(fā)現(xiàn)。然而,如果沿塊邊界確有一個(gè)真的邊緣的話,這一算法不應(yīng)該平滑塊之間的臺(tái)階。一般,如果邊緣臺(tái)階的大小大于可以由量化產(chǎn)生的臺(tái)階大小,則在相鄰塊之間的臺(tái)階被認(rèn)為是真正的邊緣。相似地,可以使用其它算法來(lái)調(diào)和塊的表面。
對(duì)于視頻壓縮方法H.263和MPEG4的一些解塊算法使用符號(hào)或正負(fù)號(hào)函數(shù)運(yùn)算和絕對(duì)值運(yùn)算。在這些視頻解塊算法中,符號(hào)函數(shù)計(jì)算修正因子的符號(hào)。使用絕對(duì)值運(yùn)算決定修正因子的大小并用預(yù)定閾值比較該視頻中的偏差。像上面說(shuō)明的PSIGN和PABS的SIMD指令的實(shí)施例可以與用于H.263和MPEG4的解塊算法一起使用。正負(fù)號(hào)運(yùn)算涉及計(jì)算來(lái)自數(shù)據(jù)的符號(hào)值以及提供符號(hào)值是什么的指示。例如,對(duì)一個(gè)數(shù)據(jù)元素的正負(fù)號(hào)函數(shù)運(yùn)算,如果該數(shù)據(jù)元素是零則輸出“0”,如果該數(shù)據(jù)元素是負(fù)則輸出“-1”,如果該數(shù)據(jù)元素是正則輸出“+1”。對(duì)于一個(gè)實(shí)施例,可以使用根據(jù)根據(jù)本發(fā)明的PSIGN指令提供正負(fù)號(hào)函數(shù)功能。
一種非線性濾波器解塊的方法使用三步驟非線性濾波方法。首先,特征化塊邊界。第二,使用第一步驟的結(jié)果計(jì)算修正沿塊邊界的像素的值的因子。第三,通過(guò)加上或減去在第二步驟計(jì)算的因子,修正沿邊界的像素的值。下面的例子說(shuō)明一種實(shí)現(xiàn)的H.263解塊算法。A和B是在塊邊界一側(cè)的像素。A 1012是離開(kāi)塊邊界一個(gè)像素距離的像素?cái)?shù)組。B 1014是沿該塊邊界的像素?cái)?shù)組。C和D是在該邊界另一側(cè)的像素。C 1022是沿從數(shù)組B的邊界另一側(cè)上的塊邊界的數(shù)組。D 1024是離開(kāi)和數(shù)組C 1022同一個(gè)塊1020中的塊邊界一個(gè)像素距離的像素?cái)?shù)組。為減少由于在塊X 1010和塊Y 1020之間的量化產(chǎn)生的連續(xù)性非自然信號(hào),但要保持真正的邊緣,而執(zhí)行解塊。解塊結(jié)果標(biāo)記為A′、B′、C′、和D′。
圖10表示使用根據(jù)本發(fā)明的SIMD指令的解塊算法的操作。圖10中表示出兩個(gè)數(shù)據(jù)塊1010、1020。在本例中,這些塊包括用于圖像或者視頻流的數(shù)據(jù)。每一塊包括多行和多列數(shù)據(jù)元素。例如,在一些圖像處理算法中的塊是8乘8的數(shù)據(jù)塊。這里,集中在BLOCK X 1010和BLOCK Y1020之間的塊邊界來(lái)進(jìn)行表示。底部?jī)蓚€(gè)數(shù)據(jù)行1012、1014被表示,用于BLOCK X 1010。BLOCK Y 1020用頂部?jī)蓚€(gè)數(shù)據(jù)行1022、1024表示。每一數(shù)據(jù)行包括從7到0標(biāo)號(hào)的數(shù)據(jù)元素。
用對(duì)于數(shù)組A 1012、B 1014、C 1022、D 1024的像素?cái)?shù)據(jù)加載SIMD寄存器。首先,特征化塊邊界。決定跨該塊邊界的臺(tái)階的大小和方向。這可以通過(guò)下面的等式表示d=(A-4B+4C-D)/8。
然后,用升降斜坡計(jì)算對(duì)于數(shù)組B 1014和C 1022的修正因子d1=SIGN(d)×(MAX(0,ABS(d)-MAX(0,2×(ABS(d)-strengh))))。
計(jì)算對(duì)于數(shù)組A 1012和D 1024的修正因子d2=clipd1((A-D)/4,d1/2)。
這里,使用絕對(duì)值和最大值和修剪操作來(lái)計(jì)算像素修正因子d1和d2的大小。符號(hào)運(yùn)算也使用來(lái)自第一步驟的因子d來(lái)計(jì)算修正因子d1的符號(hào)。從像素值中要么加上要么減去修正因子d1和d2。按照下式修正對(duì)于矩陣B 1014和C 1022的邊界像素B′=clip(B+d1);和C′=clip(C-d1)。
然后修正對(duì)于矩陣A 1012和D 1024的像素A′=A-d2;D′=D+d2。
d1計(jì)算是稱(chēng)為升降斜坡的函數(shù)。當(dāng)d等于“stength”時(shí)是峰值,而當(dāng)d等于“2×stength”時(shí)值為零。通過(guò)量化步長(zhǎng)大小決定“stength”的值。一般“stength”大約是該步長(zhǎng)大小的一半。函數(shù)“clipd1()”修剪“(A-D)/4”的結(jié)果為“d1/2”的+或-絕對(duì)值。函數(shù)“clip()”修剪所計(jì)算的結(jié)果為“0”或“255”的值。這一算法的實(shí)施例可以用SIMD指令實(shí)現(xiàn)。對(duì)于本實(shí)施例,可以用PSIGNB或PSIGNW指令實(shí)現(xiàn)符號(hào)運(yùn)算。相似地,可以用PSIGNB或PSIGNW指令實(shí)現(xiàn)絕對(duì)值運(yùn)算。在本實(shí)施例中,對(duì)于數(shù)組A、B、C和D的多個(gè)像素值被加載到單獨(dú)的SIMD寄存器中。對(duì)于一個(gè)實(shí)施例,一次或者并行地對(duì)多于一個(gè)像素列應(yīng)用解塊操作。使用符號(hào)、絕對(duì)值和最大值指令在單獨(dú)的SIMD寄存器中計(jì)算中間值d1和d2的多個(gè)值。在單獨(dú)的SIMD寄存器中計(jì)算結(jié)果A′、B′、C′和D′??梢杂肧IMD最大值和最小值指令計(jì)算修剪操作。
上述符號(hào)指令的功能用于本實(shí)施例的非線性濾波解塊算法中??梢杂孟馠.263或MPEG4的編碼技術(shù)實(shí)現(xiàn)這一解塊算法的實(shí)施例,以去除由這兩種常見(jiàn)的視頻壓縮方法的量化操作引起的成塊非自然信號(hào)。通過(guò)在解塊算法中使用乘法的符號(hào)指令,本方案的實(shí)施例可以加速這些編碼算法的計(jì)算并減小代碼大小。例如,單一PSIGN指令可以代替執(zhí)行相似數(shù)據(jù)操作所需要的多個(gè)算術(shù)指令或不能對(duì)組合型數(shù)據(jù)操作的指令。從而可以改善總的通過(guò)量并釋放處理資源。
對(duì)于解塊算法的一個(gè)實(shí)施例,符號(hào)指令和絕對(duì)值指令沒(méi)有飽和行為。這意味著,對(duì)于一個(gè)組合型絕對(duì)值指令,具有值-2n-1的N位數(shù)據(jù)將被計(jì)算為2n-1。在組合型符號(hào)指令的情況下,具有等于-2n-1的第一源元素和負(fù)的第二源數(shù)據(jù)元素的N位數(shù)據(jù)將被計(jì)算為2n-1。在一些場(chǎng)合,需要帶符號(hào)的結(jié)果,因此不允許大于2n-1-1的正值。一種解決方案是強(qiáng)迫最大的負(fù)和正值在執(zhí)行PABS或PSIGN指令前具有同樣的大小。
一個(gè)實(shí)施例的符號(hào)和絕對(duì)值運(yùn)算可以應(yīng)用于下面說(shuō)明的MPEG4解塊算法。10個(gè)像素,5個(gè)在塊邊界的任何一邊,表示為V0 V1 V2 V3 V4|V5V6 V7 V8 V9。“|”表示塊邊界。首先該塊邊界被特征化為count=φ(V0-V1)+φ(V1-V2)+φ(V2-V3)+φ(V3-V4)+φ(V4-V5)+φ(V5-V6)+φ(V6-V7)+φ(V7-V8)+φ(V8-V9),其中,如果ABS(γ)<=THRESHOLD1,則φ(γ)=1,否則φ(γ)=0。
如果count大于或者等于THRESHOLD2,則使用DC方式,否則使用缺省方式。該塊邊界也被DC特征化為最大值=MAX(V1,V2,V3,V4,V5,V6,V7,V8);最小值=MIN(V1,V2,V3,V4,V5,V6,V7,V8)。
如果(ABS(最大值-最小值)<2×量化因子),則進(jìn)行與DC相關(guān)的修正步驟2和3,否則不進(jìn)行修正。對(duì)于缺省方式,修正因子計(jì)算如下
a3,0=(2×V3-5×V4+5×V5-2×V6)/8;a3,1=(2×V1-5×V2+5×V3-2×V4)/8;a3,2=(2×V5-5×V6+5×V7-2×V8)/8;a3,0′=SIGN(a3,0)×MIN(ABS(a3,0),ABS(a3,1),ABS(a3,2));d=CLIP(5×(a3,0′-a3,0)/8,0,((V4-V5)/2)×δ(ABS(a3,0)<量化因子)),其中,如果真,則δ()計(jì)算為1,如果假,則為0。
然后修正邊界像素。函數(shù)CLIP(r,p,q)在p和q之間修剪r。對(duì)于DC方式,修正因子計(jì)算如下if m<1,then if ABS(V1-V0)<QP,then pm=V0;else pm=V1;if 1<=m<=8,then pm=Vm;if m>8,then if ABS(V8-V9)<量化因子,then pm=V9,else pm=V8。
圖11是表示使用SIMD指令執(zhí)行解塊算法的方法的一個(gè)實(shí)施例的流程圖1100。例如這種解塊算法可以以用于H.263和MPEG4壓縮方法的代碼實(shí)現(xiàn)。在塊1102接收對(duì)于第一塊和第二塊的像素?cái)?shù)據(jù)。在框1104特征化這兩塊之間的塊邊界。在框1106通過(guò)使用對(duì)于組合型符號(hào)乘法運(yùn)算和組合型絕對(duì)值運(yùn)算的指令,對(duì)組合型的像素?cái)?shù)據(jù)計(jì)算一個(gè)或者多個(gè)修正因子。當(dāng)為解塊算法計(jì)算修正因子時(shí)使用PSIGN和/或PABS可以減少所需要的非SIMD指令并提高處理資源的效率。例如根據(jù)本發(fā)明用于圖像處理算法的一個(gè)解塊序列的實(shí)施例使用PSIGN運(yùn)算決定修正因子的符號(hào),使用PABS計(jì)算該修正因子的大小。在塊1108使用以符號(hào)乘法運(yùn)算或絕對(duì)值運(yùn)算計(jì)算出的一個(gè)或者多個(gè)修正因子修正對(duì)于第一塊和第二塊的邊界像素。
這樣,公開(kāi)了一種用于執(zhí)行符號(hào)和乘法運(yùn)算的方法、裝置和指令的技術(shù)。雖然在附圖中說(shuō)明和表示了一些示范實(shí)施例,但是應(yīng)該理解,這些實(shí)施例僅僅是舉例說(shuō)明性的,并不對(duì)廣闊的本發(fā)明構(gòu)成限制,本發(fā)明不限于圖示和說(shuō)明的特定構(gòu)造和安排,因?yàn)閷?duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),在研究本公開(kāi)后可以進(jìn)行各種其它的修改。在像發(fā)展迅速、進(jìn)一步的進(jìn)步不容易預(yù)見(jiàn)的這樣的技術(shù)領(lǐng)域中,所公開(kāi)的實(shí)施例在結(jié)構(gòu)上和細(xì)節(jié)上很容易被修改,這一點(diǎn)由于允許技術(shù)進(jìn)步而變得更加方便,它們不離開(kāi)本公開(kāi)的原理或所附權(quán)利要求的范圍。
權(quán)利要求
1.一種裝置,包括存儲(chǔ)位置;和執(zhí)行資源,所述執(zhí)行資源對(duì)第一操作數(shù)和第二操作數(shù)執(zhí)行第一指令,并響應(yīng)所述第一指令,向所述存儲(chǔ)位置存儲(chǔ)具有下述值的結(jié)果如果所述第二操作數(shù)是正值,則該值為所述第一操作數(shù);如果所述第二操作數(shù)是零,則該值為零;以及如果所述第二操作數(shù)是負(fù)值,則該值為所述第一操作數(shù)的負(fù)的形式。
2.根據(jù)權(quán)利要求1所述的裝置,其中,所述第一操作數(shù)是第一組合型操作數(shù),包括第一多個(gè)組合型數(shù)據(jù)元素,以及其中,所述第二操作數(shù)是第二組合型數(shù)據(jù)操作數(shù),包括第二多個(gè)組合型數(shù)據(jù)元素,以及其中,所述結(jié)果包括第三多個(gè)組合型數(shù)據(jù)元素,所述第三多個(gè)組合型數(shù)據(jù)元素中的每一個(gè)設(shè)定為來(lái)自所述第一多個(gè)組合型數(shù)據(jù)元素的第一數(shù)據(jù)元素的帶符號(hào)數(shù)值乘以所述第二多個(gè)組合型數(shù)據(jù)元素的相應(yīng)數(shù)據(jù)元素的符號(hào)的積。
3.根據(jù)權(quán)利要求1所述的裝置,其中,所述第一操作數(shù)是源/目的地操作數(shù),其中,所述源目的地操作數(shù)取自所述存儲(chǔ)位置用以計(jì)算所述結(jié)果并且被所述結(jié)果重寫(xiě)。
4.根據(jù)權(quán)利要求2所述的裝置,其中,所述存儲(chǔ)位置包括寄存器,以及其中,所述第二操作數(shù)是寄存器或存儲(chǔ)器操作數(shù)之一。
5.根據(jù)權(quán)利要求4所述的裝置,其中,所述第一操作數(shù)是寄存器操作數(shù)。
6.根據(jù)權(quán)利要求5所述的裝置,其中,所述第一指令具有包括寄存器/存儲(chǔ)器模式字段、操作碼字段的指令格式。
7.根據(jù)權(quán)利要求5所述的裝置,其中,所述第一指令具有這樣的指令格式其中操作數(shù)指定字節(jié)的位5到位3指定所述第一操作數(shù),所述操作數(shù)指定字節(jié)的位2到位0指定所述第二操作數(shù)。
8.根據(jù)權(quán)利要求1所述的裝置,其中,所述第一指令具有這樣的指令格式其中操作數(shù)指定字節(jié)的位5到位3指定所述第一操作數(shù),所述操作數(shù)指定字節(jié)的位2到位0指定所述第二操作數(shù)。
9.根據(jù)權(quán)利要求1所述的裝置,其中,所述第一指令是組合型的符號(hào)指令,以及其中,所述裝置還包括加法器電路;被耦合以向所述加法器電路提供第一輸入的第一輸入多路轉(zhuǎn)換器,所述第一多路轉(zhuǎn)換器在所述第一操作數(shù)和被求補(bǔ)的第一操作數(shù)之間選擇;零檢測(cè)器,響應(yīng)于所述第二操作數(shù)輸出選擇信號(hào);和被耦合以向所述加法器電路提供第二輸入的第二輸入多路轉(zhuǎn)換器,所述第二多路轉(zhuǎn)換器響應(yīng)于對(duì)于所述指令的控制信號(hào),在所述第二源操作數(shù)和零值之間選擇。
10.根據(jù)權(quán)利要求9所述的裝置,還包括第三多路轉(zhuǎn)換器,被耦合以接收所述第一源操作數(shù)、所述第二源操作數(shù)以及包括所述第一操作數(shù)的被求補(bǔ)的值的加法器輸出;選擇邏輯,用于基于所述第二操作數(shù)的大小和符號(hào)值,選擇第一源操作數(shù)、第二操作數(shù)或所述加法器輸出之中的一個(gè),其中如果所述第二操作數(shù)的所述大小是零,則所述選擇邏輯引起所述第二操作數(shù)被選擇;如果所述第二操作數(shù)的所述大小是非零值并且所述第二操作數(shù)的所述符號(hào)值為正,則所述選擇邏輯引起所述第一操作數(shù)被選擇;以及如果所述第二操作數(shù)的所述大小是非零值并且所述第二操作數(shù)的所述符號(hào)值為負(fù),則所述選擇邏輯引起所述加法器輸出被選擇。
11.根據(jù)權(quán)利要求6所述的裝置,其中,所述執(zhí)行資源包括解碼所述第一指令的解碼器;用于整數(shù)運(yùn)算的第一物理寄存器文件;第二物理寄存器文件,其中,所述源/目的地操作數(shù)指定在所述第二物理寄存器文件中的寄存器,其中,所述結(jié)果值是整數(shù)值。
12.根據(jù)權(quán)利要求11所述的裝置,其中,所述第一指令是符號(hào)指令,以及其中,所述解碼器將所述符號(hào)指令解碼為由第一執(zhí)行單元執(zhí)行的符號(hào)微操作,所述第一執(zhí)行單元是與整數(shù)執(zhí)行單元分開(kāi)的單元,所述整數(shù)執(zhí)行單元執(zhí)行多個(gè)標(biāo)量整數(shù)運(yùn)算,這些運(yùn)算把結(jié)果存儲(chǔ)在所述第一物理寄存器文件中。
13.根據(jù)權(quán)利要求1所述的裝置,其中,所述第一指令是第一組合型數(shù)據(jù)指令,以及其中,所述結(jié)果包括第一多個(gè)結(jié)果組合型數(shù)據(jù)元素,所述第一結(jié)果組合型數(shù)據(jù)元素中的每一個(gè)具有一個(gè)值,該值等于多個(gè)第一源操作數(shù)數(shù)據(jù)元素中相應(yīng)的一個(gè)乘以多個(gè)第二源操作數(shù)數(shù)據(jù)元素中相應(yīng)的一個(gè)的相應(yīng)符號(hào)值。
14.根據(jù)權(quán)利要求13所述的裝置,其中,所述執(zhí)行資源響應(yīng)于第二指令,將向所述存儲(chǔ)位置存儲(chǔ)第二結(jié)果,所述第二結(jié)果包括第二多個(gè)結(jié)果組合型數(shù)據(jù)元素,所述第二多個(gè)結(jié)果組合型數(shù)據(jù)元素中的每一個(gè)是多個(gè)源組合型數(shù)據(jù)元素中相應(yīng)的一個(gè)的絕對(duì)值。
15.根據(jù)權(quán)利要求1所述的裝置,其中,所述裝置采取在機(jī)器可讀介質(zhì)上的機(jī)器可讀數(shù)據(jù)的形式,所述機(jī)器可讀數(shù)據(jù)可制造或可模擬以提供所述裝置。
16.一種處理器,包括能夠存儲(chǔ)組合型數(shù)據(jù)元素的寄存器文件和被耦合到所述寄存器文件并響應(yīng)多個(gè)組合型數(shù)據(jù)指令在所述寄存器文件中存儲(chǔ)值的執(zhí)行單元,所述執(zhí)行單元通過(guò)在所述寄存器文件中存儲(chǔ)包括多個(gè)結(jié)果數(shù)據(jù)元素的結(jié)果來(lái)響應(yīng)所述多個(gè)組合型數(shù)據(jù)指令中的第一個(gè),其中,對(duì)于所述第一多個(gè)源數(shù)據(jù)元素和所述第二多個(gè)源數(shù)據(jù)元素的每一個(gè)的任何值,所述多個(gè)結(jié)果數(shù)據(jù)元素的所述每一個(gè)等于第一多個(gè)源數(shù)據(jù)元素的相應(yīng)一個(gè)乘以第二多個(gè)源數(shù)據(jù)元素中相應(yīng)一個(gè)的符號(hào)值。
17.根據(jù)權(quán)利要求16所述的處理器,其中,所述執(zhí)行單元通過(guò)在所述寄存器文件中存儲(chǔ)第二結(jié)果,來(lái)響應(yīng)所述多個(gè)組合型數(shù)據(jù)指令的第二個(gè),所述第二結(jié)果包括第二多個(gè)結(jié)果數(shù)據(jù)元素,其中,所述第二多個(gè)結(jié)果數(shù)據(jù)元素的所述每一個(gè)等于第三多個(gè)源數(shù)據(jù)元素的相應(yīng)一個(gè)的絕對(duì)值。
18.根據(jù)權(quán)利要求17所述的處理器,其中,所述多個(gè)組合型數(shù)據(jù)指令的所述第一個(gè)是符號(hào)指令,以及,所述多個(gè)組合型數(shù)據(jù)指令的所述第二個(gè)是絕對(duì)值指令,以及,所述處理器還包括解碼器以將所述符號(hào)指令解碼為第一微操作并將所述絕對(duì)值指令解碼為第二微操作。
19.根據(jù)權(quán)利要求16所述的處理器,還包括用于接收輸入的多路轉(zhuǎn)換器,所述輸入包括對(duì)于所述第一多個(gè)源數(shù)據(jù)元素的第一數(shù)據(jù)元素的第一值、對(duì)于所述第二多個(gè)源數(shù)據(jù)元素相應(yīng)于所述第一數(shù)據(jù)元素的第二數(shù)據(jù)元素的第二值和對(duì)于所述第一多個(gè)源數(shù)據(jù)元素的所述第一數(shù)據(jù)元素的所述第一值的負(fù)形式的第三值;和輸出選擇邏輯,能夠選擇所述多路轉(zhuǎn)換器輸入中的一個(gè)作為對(duì)于相應(yīng)于所述第一和第二數(shù)據(jù)元素的數(shù)據(jù)元素位置的符號(hào)運(yùn)算結(jié)果來(lái)輸出。
20.一種方法,包括取指令,所述指令指定具有第一操作數(shù)符號(hào)和第一操作數(shù)大小的第一操作數(shù)以及具有第二操作數(shù)符號(hào)和第二操作數(shù)大小的第二操作數(shù);判定如果所述第二操作數(shù)是零,則存儲(chǔ)零作為所述指令的最后結(jié)果;以及判定如果所述第二操作數(shù)是非零,則存儲(chǔ)具有等于所述第一大小的最后結(jié)果大小和最后結(jié)果符號(hào)的最后結(jié)果,所述最后結(jié)果符號(hào)是對(duì)于所述第二操作數(shù)大小的單元值和非單元值兩者的所述第二操作數(shù)符號(hào)和所述第一操作數(shù)符號(hào)兩者的函數(shù)。
21.根據(jù)權(quán)利要求20所述的方法,其中,所述第一操作數(shù)是第一組合型數(shù)據(jù),它包括第一多個(gè)源數(shù)據(jù)元素,以及其中,所述第二操作數(shù)是第二組合型數(shù)據(jù),它包括第二多個(gè)源數(shù)據(jù)元素,其中如果對(duì)于所述第二操作數(shù)中的一個(gè)特定元素位置的數(shù)據(jù)元素值是正,則響應(yīng)于所述指令,存儲(chǔ)來(lái)自所述第一操作數(shù)的相應(yīng)的數(shù)據(jù)元素的值,作為對(duì)于所述特定元素位置的結(jié)果;如果對(duì)于所述第二操作數(shù)中的所述特定元素位置的所述數(shù)據(jù)元素值是負(fù),則存儲(chǔ)等于用負(fù)1乘來(lái)自所述第一操作數(shù)的所述相應(yīng)數(shù)據(jù)元素的所述值的值,作為對(duì)于所述特定元素位置的所述結(jié)果;如果對(duì)于所述第二操作數(shù)中的所述特定元素位置的所述數(shù)據(jù)元素值是零,則存儲(chǔ)零作為對(duì)于所述特定元素位置的所述結(jié)果。
22.一種方法,包括取指令,所述指令指定第一操作數(shù)和第二操作數(shù);判定如果所述第二操作數(shù)是正,則響應(yīng)于所述指令,存儲(chǔ)所述第一操作數(shù)作為結(jié)果;判定如果所述第二操作數(shù)是負(fù),則存儲(chǔ)等于負(fù)1乘所述第一操作數(shù)的值作為所述指令的結(jié)果;以及判定如果所述第二操作數(shù)是零,則存儲(chǔ)零作為所述指令的結(jié)果。
23.根據(jù)權(quán)利要求22所述的方法,其中,所述指令是組合型符號(hào)指令。
24.根據(jù)權(quán)利要求23所述的方法,其中,所述第一操作數(shù)和所述第二操作數(shù)分別是包括第一和第二多個(gè)數(shù)據(jù)元素的組合型數(shù)據(jù)操作數(shù)。
25.根據(jù)權(quán)利要求24所述的方法,還包括將所述組合型符號(hào)指令解碼為第一微指令。
26.根據(jù)權(quán)利要求25所述的方法,其中,所述判定所述第二操作數(shù)包括計(jì)算所述第二操作數(shù)的每一單個(gè)數(shù)據(jù)元素。
27.一種系統(tǒng),包括存儲(chǔ)器,存儲(chǔ)第一組合型數(shù)據(jù)指令以及包括第一多個(gè)源數(shù)據(jù)元素的第一組合型數(shù)據(jù)和包括第二多個(gè)源數(shù)據(jù)元素的第二組合型數(shù)據(jù);處理器,執(zhí)行所述第一組合型數(shù)據(jù)指令,并在處理器存儲(chǔ)位置相應(yīng)地存儲(chǔ)包括多個(gè)結(jié)果組合型數(shù)據(jù)元素的結(jié)果組合型數(shù)據(jù),所述多個(gè)結(jié)果組合型數(shù)據(jù)元素的每一個(gè),對(duì)于所述第二多個(gè)源數(shù)據(jù)元素的非零的元素,是所述第一多個(gè)源數(shù)據(jù)元素和所述第二多個(gè)源數(shù)據(jù)元素的相應(yīng)元素的符號(hào)的函數(shù),并且只是對(duì)于所述第二多個(gè)源數(shù)據(jù)元素的所述相應(yīng)元素的單元值和非單元值的所述第一多個(gè)源數(shù)據(jù)元素的所述相應(yīng)的一個(gè)的大小的函數(shù)。
28.根據(jù)權(quán)利要求27所述的系統(tǒng),其中,所述第一組合型數(shù)據(jù)指令是組合型符號(hào)指令,該指令引起對(duì)于相應(yīng)于所述第一多個(gè)源數(shù)據(jù)元素的數(shù)據(jù)元素位置的符號(hào)運(yùn)算。
29.根據(jù)權(quán)利要求28所述的系統(tǒng),其中,所述多個(gè)結(jié)果組合型數(shù)據(jù)元素重寫(xiě)存儲(chǔ)了所述第一組合型數(shù)據(jù)的處理器存儲(chǔ)位置。
30.一種包括機(jī)器可讀介質(zhì)的物品,所述物品可以被制造或者模擬以實(shí)現(xiàn)一種裝置,所述裝置包括存儲(chǔ)位置;和執(zhí)行資源,所述執(zhí)行資源對(duì)第一操作數(shù)和第二操作數(shù)執(zhí)行第一指令,并響應(yīng)所述第一指令,在所述存儲(chǔ)位置存儲(chǔ)具有下列值的結(jié)果如果所述第二操作數(shù)是正值,則該值是所述第一操作數(shù);如果第二操作數(shù)是零,則該值是零;以及如果第二操作數(shù)是負(fù)值,則該值是所述第一操作數(shù)的負(fù)的形式。
31.根據(jù)權(quán)利要求30所述的物品,其中,所述第一操作數(shù)是第一組合型操作數(shù),包括第一多個(gè)組合型數(shù)據(jù)元素,以及其中,所述第二操作數(shù)是第二組合型數(shù)據(jù)操作數(shù),包括第二多個(gè)組合型數(shù)據(jù)元素,以及其中,所述結(jié)果包括第三多個(gè)組合型數(shù)據(jù)元素,所述第三多個(gè)組合型數(shù)據(jù)元素中的每一個(gè)設(shè)定為來(lái)自所述第一多個(gè)組合型數(shù)據(jù)元素的第一數(shù)據(jù)元素的帶符號(hào)數(shù)值乘以所述第二多個(gè)組合型數(shù)據(jù)元素的相應(yīng)數(shù)據(jù)元素的符號(hào)的積。
32.根據(jù)權(quán)利要求30所述的物品,其中,所述第一操作數(shù)是源/目的地操作數(shù),其中,所述源目的地操作數(shù)取自所述存儲(chǔ)位置用以計(jì)算所述結(jié)果并且由所述結(jié)果被重寫(xiě)。
33.根據(jù)權(quán)利要求31所述的物品,其中,所述存儲(chǔ)位置包括寄存器,以及其中,所述第二操作數(shù)是寄存器或存儲(chǔ)器操作數(shù)之一。
34.根據(jù)權(quán)利要求31所述的物品,其中,所述第一指令具有包括寄存器/存儲(chǔ)器模式字段、操作碼字段的指令格式。
35.根據(jù)權(quán)利要求30所述的物品,其中,所述第一指令是組合型符號(hào)指令,以及其中,所述裝置還包括被耦合以向加法器電路提供第一輸入的第一輸入多路轉(zhuǎn)換器,所述第一多路轉(zhuǎn)換器在所述第一操作數(shù)和被求補(bǔ)的第一操作數(shù)之間選擇;零檢測(cè)器,響應(yīng)于所述第二操作數(shù)輸出選擇信號(hào);被耦合以向所述加法器電路提供第二輸入的第二輸入多路轉(zhuǎn)換器,所述第二多路轉(zhuǎn)換器響應(yīng)于對(duì)于所述指令的控制信號(hào),在所述第二源操作數(shù)和零值之間選擇第三多路轉(zhuǎn)換器,被耦合以接收所述第一源操作數(shù)、所述第二源操作數(shù)以及包括所述第一操作數(shù)的被求補(bǔ)的值的加法器輸出;選擇邏輯,用于基于所述第二操作數(shù)的大小和符號(hào)值,選擇第一源操作數(shù)、第二操作數(shù)或所述加法器輸出之中的一個(gè),其中如果所述第二操作數(shù)的所述大小是零,則所述選擇邏輯引起所述第二操作數(shù)被選擇;如果所述第二操作數(shù)的所述大小是非零值并且所述第二操作數(shù)的所述符號(hào)值為正,則所述選擇邏輯引起所述第一操作數(shù)被選擇;以及如果所述第二操作數(shù)的所述大小是非零值并且所述第二操作數(shù)的所述符號(hào)值為負(fù),則所述選擇邏輯引起所述加法器輸出被選擇。
36.根據(jù)權(quán)利要求30所述的物品,其中,所述第一指令是第一組合型數(shù)據(jù)指令,以及其中,所述結(jié)果包括第一多個(gè)結(jié)果組合型數(shù)據(jù)元素,所述第一結(jié)果組合型數(shù)據(jù)元素的每一個(gè)具有一個(gè)值,該值等于多個(gè)第一源操作數(shù)數(shù)據(jù)元素的相應(yīng)的一個(gè)乘以多個(gè)第二源操作數(shù)數(shù)據(jù)元素相應(yīng)的一個(gè)的相應(yīng)符號(hào)值。
37.一種裝置,包括存儲(chǔ)位置;和執(zhí)行資源,所述執(zhí)行資源對(duì)第一操作數(shù)和第二操作數(shù)執(zhí)行第一指令,所述第一操作數(shù)具有第一大小和第一操作數(shù)起始符號(hào),所述第二操作數(shù)具有第二操作數(shù)符號(hào),所述執(zhí)行資源響應(yīng)于所述第一指令,在所述存儲(chǔ)位置中存儲(chǔ)結(jié)果,如果所述第二操作數(shù)是正操作數(shù),則所述結(jié)果具有所述第一大小和所述第一操作數(shù)起始符號(hào);如果所述第二操作數(shù)是零操作數(shù),則所述結(jié)果是零;如果所述第二操作數(shù)是負(fù)操作數(shù),則所述結(jié)果具有所述第一大小和結(jié)果符號(hào),所述結(jié)果符號(hào)是所述第一操作數(shù)起始符號(hào)乘以所述第二操作數(shù)符號(hào)的乘積。
38.根據(jù)權(quán)利要求37所述的裝置,其中,所述第一操作數(shù)是第一組合型操作數(shù),包括第一多個(gè)組合型數(shù)據(jù)元素,以及其中,所述第二操作數(shù)是第二組合型數(shù)據(jù)操作數(shù),包括第二多個(gè)組合型數(shù)據(jù)元素,以及其中,所述結(jié)果包括第三多個(gè)組合型數(shù)據(jù)元素,所述第三多個(gè)組合型數(shù)據(jù)元素中的每一個(gè)設(shè)定為來(lái)自所述第一多個(gè)組合型數(shù)據(jù)元素的第一數(shù)據(jù)元素的帶符號(hào)數(shù)值乘以所述第二多個(gè)組合型數(shù)據(jù)元素的相應(yīng)數(shù)據(jù)元素的符號(hào)的積。
39.根據(jù)權(quán)利要求38所述的裝置,其中,所述存儲(chǔ)位置包括寄存器,以及其中,所述第二操作數(shù)是寄存器或存儲(chǔ)器操作數(shù)之一。
40.根據(jù)權(quán)利要求39所述的裝置,其中,所述第一指令具有包括寄存器/存儲(chǔ)器模式字段、操作碼字段的指令格式。
41.根據(jù)權(quán)利要求40所述的裝置,其中,所述第一指令具有這樣的指令格式其中操作數(shù)指定字節(jié)的位5到位3指定所述第一操作數(shù),所述操作數(shù)指定字節(jié)的位2到位0指定所述第二操作數(shù)。
42.一種裝置,包括存儲(chǔ)位置;和執(zhí)行資源,所述執(zhí)行資源對(duì)具有第一多個(gè)數(shù)據(jù)元素的第一組合型操作數(shù)和具有第二多個(gè)數(shù)據(jù)元素的第二組合型操作數(shù)執(zhí)行第一組合型指令,對(duì)于所述第一操作數(shù)的所述第一多個(gè)數(shù)據(jù)元素的每一數(shù)據(jù)元素具有第一大小和第一操作數(shù)符號(hào),對(duì)于所述第二操作數(shù)的所述第二多個(gè)數(shù)據(jù)元素的每一數(shù)據(jù)具有第二大小和第二操作數(shù)符號(hào),所述執(zhí)行資源響應(yīng)于所述第一指令,向?qū)τ诮Y(jié)果操作數(shù)的各數(shù)據(jù)元素位置的所述存儲(chǔ)位置存儲(chǔ)結(jié)果,如果所述第二操作數(shù)是非零操作數(shù),則所述結(jié)果具有所述第一大小和結(jié)果符號(hào),該結(jié)果符號(hào)是所述第一操作數(shù)符號(hào)和所述第二操作數(shù)符號(hào)兩者的函數(shù);如果所述第二操作數(shù)是零操作數(shù),則所述結(jié)果是零。
43.根據(jù)權(quán)利要求42所述的裝置,其中,所述結(jié)果操作數(shù)包括第三多個(gè)數(shù)據(jù)元素,所述第三多個(gè)組合型數(shù)據(jù)元素的每一個(gè)設(shè)定為來(lái)自所述第一多個(gè)組合型數(shù)據(jù)元素的第一數(shù)據(jù)元素的帶符號(hào)數(shù)值乘以所述第二多個(gè)組合型數(shù)據(jù)元素的相應(yīng)數(shù)據(jù)元素的符號(hào)的積。
44.根據(jù)權(quán)利要求43所述的裝置,其中,所述存儲(chǔ)位置包括寄存器,以及其中,所述第二操作數(shù)是寄存器或存儲(chǔ)器操作數(shù)之一。
45.根據(jù)權(quán)利要求44所述的裝置,其中,所述第一操作數(shù)是寄存器。
46.根據(jù)權(quán)利要求45所述的裝置,其中,對(duì)于所述第一操作數(shù)的所述寄存器也是所述存儲(chǔ)位置。
全文摘要
本發(fā)明公開(kāi)了一種用于執(zhí)行符號(hào)和乘法運(yùn)算的方法、裝置和程序設(shè)備。在一個(gè)實(shí)施例中,一個(gè)裝置包括執(zhí)行第一指令的執(zhí)行資源。響應(yīng)于所述第一指令,所述執(zhí)行資源向存儲(chǔ)位置存儲(chǔ)等于第一源操作數(shù)乘以第二源操作數(shù)的符號(hào)值的乘積的結(jié)果值。在一些實(shí)施例中,第一源操作數(shù)可以被該結(jié)果重寫(xiě)。
文檔編號(hào)G06F9/30GK1577249SQ20031011308
公開(kāi)日2005年2月9日 申請(qǐng)日期2003年12月25日 優(yōu)先權(quán)日2003年6月30日
發(fā)明者威廉·W·小梅西, 輝·V·源 申請(qǐng)人:英特爾公司