技術(shù)領(lǐng)域
本發(fā)明涉及計算機系統(tǒng),更具體地說,涉及用于執(zhí)行選擇操作的方法和裝置。
背景技術(shù):
在典型的計算機系統(tǒng)中,處理器被實現(xiàn)為使用指令在由大量位(例如,64)所表示的值上進(jìn)行操作以產(chǎn)生一個結(jié)果。例如,執(zhí)行加法指令會將第一個64位值與第二個64位值加在一起,并且將結(jié)果存儲為第三個64位值。多媒體應(yīng)用(例如,以計算機支持的協(xié)作為目標(biāo)的應(yīng)用(CSC-具有混合媒體數(shù)據(jù)操作的遠(yuǎn)程電信會議集合)、2D/3D圖形、圖像處理、視頻壓縮/解壓縮、識別算法和音頻操作)要求大量的數(shù)據(jù)操作。數(shù)據(jù)可以由單個大值(例如,64位或128位)表示,或者可以替代地以少量位(例如,8或16或32位)來表示。例如,圖形數(shù)據(jù)可以由8或16位表示,聲音數(shù)據(jù)可以由8或16位表示,整數(shù)數(shù)據(jù)可以由8、16或32位表示,而浮點數(shù)據(jù)可以由32或64位表示。
為了改善多媒體應(yīng)用(以及具有相同特性的其它應(yīng)用)的效率,處理器可以提供緊縮數(shù)據(jù)格式。緊縮數(shù)據(jù)格式是其中通常被用于表示單個值的位被分為多個固定大小的數(shù)據(jù)元素的數(shù)據(jù)格式,其中每個數(shù)據(jù)元素表示一個分離值。例如,128位寄存器可以被分為四個32位元素,其中每個32位元素表示一個分離的32位值。以這種方式,這些處理器能夠更有效地處理多媒體應(yīng)用。
技術(shù)實現(xiàn)要素:
根據(jù)本發(fā)明的一個方面,公開一種方法,包括:接收指令代碼,所述指令代碼的指令格式包括第一字段和第二字段,第一字段指示第一多位操作數(shù),且第二字段指示第二多位操作數(shù);以及當(dāng)?shù)谝徊僮鲾?shù)中的一個或多個數(shù)據(jù)元素的符號位非0時,響應(yīng)于與第一操作數(shù)相關(guān)聯(lián)的符號位修改第二操作數(shù)。
根據(jù)本發(fā)明的另一方面,公開一種用于執(zhí)行上述方法的裝置,包括:執(zhí)行單元;以及包括數(shù)據(jù)的機器可存取介質(zhì),當(dāng)所述數(shù)據(jù)被所述執(zhí)行單元存取時,使所述執(zhí)行單元執(zhí)行上述方法。
根據(jù)本發(fā)明的又一方面,公開一種裝置,包括:第一輸入,接收第一數(shù)據(jù);第二輸入,接收包括與第一數(shù)據(jù)相同位數(shù)的第二數(shù)據(jù);電路,響應(yīng)于第一處理器指令,基于控制位從第一操作數(shù)選擇第一數(shù)據(jù)元素,其中所述控制位用于當(dāng)所述控制位非0時選擇第一數(shù)據(jù)元素。
根據(jù)本發(fā)明的再一方面,公開一種計算機系統(tǒng),包括:可尋址存儲器,用于存儲數(shù)據(jù);處理器,包括:體系結(jié)構(gòu)可見的存儲區(qū)域,用于存儲控制位;解碼器,用于解碼指令,所述指令的第一字段用于指定N位的源操作數(shù),且第二字段用于指定N位的目標(biāo)操作數(shù);和執(zhí)行單元,響應(yīng)于所述解碼器解碼所述指令,基于控制位從所述源操作數(shù)選擇第一數(shù)據(jù)元素,其中所述控制位用于當(dāng)所述控制位非0時選擇第一數(shù)據(jù)元素。
附圖說明
通過附圖中圖的例子對本發(fā)明進(jìn)行說明,而并不是限制本發(fā)明。
圖1a-1c示出根據(jù)本發(fā)明備選實施例的示例計算機系統(tǒng)。
圖2a-2b示出根據(jù)本發(fā)明備選實施例的處理器的寄存器堆。
圖3示出處理器執(zhí)行來操作數(shù)據(jù)的過程的至少一個實施例的流程圖。
圖4示出根據(jù)本發(fā)明備選實施例的緊縮數(shù)據(jù)類型。
圖5示出根據(jù)本發(fā)明至少一個實施例的寄存器內(nèi)緊縮字節(jié)和寄存器內(nèi)緊縮字?jǐn)?shù)據(jù)表示。
圖6示出根據(jù)本發(fā)明至少一個實施例的寄存器內(nèi)緊縮雙字和寄存器內(nèi)緊縮四字?jǐn)?shù)據(jù)表示。
圖7是示出用于執(zhí)行選擇操作的過程實施例的流程圖。
圖8是示出用于執(zhí)行立即選擇操作的過程實施例的流程圖。
圖9a-9c示出用于執(zhí)行立即選擇操作的電路的各種實施例。
圖10是示出用于執(zhí)行可變選擇操作的過程實施例的流程圖。
圖11a-11c示出用于執(zhí)行可變選擇操作的電路的各種實施例。
圖12是示出處理器指令的操作代碼格式的各種實施例的框圖。
具體實施方式
在此公開的方法、系統(tǒng)和電路的實施例包括用于響應(yīng)控制信號而在數(shù)據(jù)的多位上執(zhí)行選擇操作的處理器指令。包括在選擇操作中的數(shù)據(jù)可以是緊縮或非緊縮的數(shù)據(jù)。對于至少一個實施例,處理器被連接到存儲器。存儲器已經(jīng)在其中存儲有第一數(shù)據(jù)和第二數(shù)據(jù)。所述處理器基于控制信號,響應(yīng)于接收到一個指令,在第一數(shù)據(jù)和第二數(shù)據(jù)中的數(shù)據(jù)元素上執(zhí)行選擇操作,并且將結(jié)果存儲在第二數(shù)據(jù)中。
本發(fā)明的這些和其它實施例可以依照以下示教而實現(xiàn),并且明顯的是,在以下示教中可以進(jìn)行各種修改和變化,并沒有背離本發(fā)明的較寬精神和范圍。因此,說明書和附圖應(yīng)當(dāng)被認(rèn)為是說明性的,而不是限制意義,并且本發(fā)明僅依據(jù)權(quán)利要求書進(jìn)行衡量。
計算機系統(tǒng)
圖1a示出根據(jù)本發(fā)明一個實施例的示例計算機系統(tǒng)100。計算機系統(tǒng)100包括用于傳遞信息的互連101?;ミB101可以包括多點總線、一個或多個點到點互連或二者的任意組合,以及任意其它通信硬件和/或軟件。
圖1a示出了用于處理信息的處理器109,其與互連101連接。處理器109代表任意類型體系結(jié)構(gòu)的中央處理單元,包括CISC或RISC類型體系結(jié)構(gòu)。
計算機系統(tǒng)100還包括連接到互連101的用于存儲信息和要被處理器109執(zhí)行的指令的隨機存取存儲器(RAM)或其它動態(tài)存儲設(shè)備(稱作主存儲器104)。在處理器109執(zhí)行指令期間,主存儲器104還可以用于存儲臨時變量或其它中間信息。
計算機系統(tǒng)100還包括連接到互連101的用于為處理器109存儲靜態(tài)信息和指令的只讀存儲器(ROM)106和/或其它靜態(tài)存儲設(shè)備。數(shù)據(jù)存儲設(shè)備107連接到互連101用于存儲信息和指令。
圖1a還示出了處理器109包括執(zhí)行單元130、寄存器堆150、高速緩存160、解碼器165和內(nèi)部互連170。當(dāng)然,處理器109還包括對于理解本發(fā)明不需要的額外電路。
解碼器165用于解碼由處理器109接收的指令,并且執(zhí)行單元130用于執(zhí)行由處理器109接收的指令。除了識別通常在通用處理器中執(zhí)行的指令之外,如這里所描述的,解碼器165和執(zhí)行單元130還識別用于執(zhí)行條件復(fù)制操作(BLEND)操作的指令。解碼器165和執(zhí)行單元130識別用于對緊縮或非緊縮數(shù)據(jù)執(zhí)行BLEND操作的指令。
執(zhí)行單元130通過內(nèi)部互連170連接到寄存器堆150。此外,內(nèi)部互連170不需要必需是多點總線,在備選實施例中,可以是點到點互連和其它類型的通信路徑。
寄存器堆150表示處理器109的用于存儲信息包括數(shù)據(jù)的存儲區(qū)域。要理解的是,本發(fā)明的一個方面是所描述的用于對緊縮或非緊縮數(shù)據(jù)執(zhí)行BLEND操作的指令實施例。根據(jù)本發(fā)明的該方面,用于存儲數(shù)據(jù)的存儲區(qū)域不是關(guān)鍵的。然而,寄存器堆150的實施例在后面參考圖2a-2b進(jìn)行描述。
執(zhí)行單元130連接到高速緩存160和解碼器165。高速緩存160被用于高速緩存數(shù)據(jù)和/或例如來自主存儲器104的控制信號。解碼器165用于將處理器109所接收的指令解碼為控制信號和/或微代碼進(jìn)入點。這些控制信號和/或微代碼進(jìn)入點可以從解碼器165轉(zhuǎn)發(fā)至執(zhí)行單元130。執(zhí)行單元130響應(yīng)于這些控制信號和/或微代碼進(jìn)入點而執(zhí)行適當(dāng)?shù)牟僮鳌?/p>
可以使用任意數(shù)量的不同機制(例如,查找表、硬件實現(xiàn)、PLA等)來實現(xiàn)解碼器165。由此,盡管在此可以用一系列如果/則(if/then)語句來表示由解碼器165和執(zhí)行單元130進(jìn)行的各種指令執(zhí)行,但是要理解的是,指令的執(zhí)行不需要串行處理這些如果/則語句。而是,用于邏輯執(zhí)行該如果/則處理的任何機制都被認(rèn)為處于本發(fā)明的范圍之內(nèi)。
圖1a額外地示出了能夠連接到計算機系統(tǒng)100的數(shù)據(jù)存儲設(shè)備107(例如,磁盤、光盤和/或其它機器可讀介質(zhì))。此外,數(shù)據(jù)存儲設(shè)備107顯示為包括用于由處理器109執(zhí)行的代碼195。代碼195能夠包括一個或多個BLEND指令142的實施例,并且能夠被寫入,以使處理器109為了任意數(shù)量的目的(例如,運動視頻壓縮/解壓縮、圖像濾波、音頻信號壓縮、濾波或合成、調(diào)制/解調(diào)等)而用BLEND指令142來執(zhí)行位測試。
計算機系統(tǒng)100還能夠經(jīng)由互連101連接到用于向計算機用戶顯示信息的顯示設(shè)備121。顯示設(shè)備121能夠包括幀緩沖器、專用圖形再現(xiàn)設(shè)備、液晶顯示器(LCD)和/或平板顯示器。
包括字母數(shù)字和其它鍵的輸入設(shè)備122可以連接到互連101,用于向處理器109傳遞信息和命令選擇。另一種類型的用戶輸入設(shè)備是光標(biāo)控制123,例如鼠標(biāo)、跟蹤球、筆、觸摸屏或用于向處理器109傳遞方向信息和命令選擇并用于控制顯示設(shè)備121上光標(biāo)移動的光標(biāo)方向鍵。該輸入設(shè)備通常在兩個軸即第一軸(例如,x)和第二軸(例如,y)具有兩種自由度,其允許該設(shè)備在平面中指定位置。然而,本發(fā)明不應(yīng)當(dāng)局限于僅具有兩種自由度的輸入設(shè)備。
可以連接到互連101的另一種設(shè)備是硬復(fù)制設(shè)備124,其可以被用于打印指令、數(shù)據(jù)或諸如紙、膠片或相似類型介質(zhì)的介質(zhì)上的其它信息。此外,計算機系統(tǒng)100能夠連接到用于聲音記錄和/或重放的設(shè)備125,例如連接到麥克風(fēng)的用于記錄信息的音頻數(shù)字轉(zhuǎn)換器。此外,設(shè)備125可以包括連接到數(shù)模(D/A)轉(zhuǎn)換器的用于重放數(shù)字化聲音的揚聲器。
計算機系統(tǒng)100能夠是計算機網(wǎng)絡(luò)(例如,LAN)中的終端。那么計算機系統(tǒng)100可以是計算機網(wǎng)絡(luò)的計算機子系統(tǒng)。計算機系統(tǒng)100任選地包括視頻數(shù)字化設(shè)備126和/或通信設(shè)備190(例如,串行通信芯片、無線接口、以太網(wǎng)芯片或調(diào)制解調(diào)器,其提供與外部設(shè)備或網(wǎng)絡(luò)的通信)。視頻數(shù)字化設(shè)備126能夠被用于捕捉視頻圖像,該視頻圖像能夠被傳送至計算機網(wǎng)絡(luò)上的其它設(shè)備。
對于至少一個實施例,處理器109支持與加利福尼亞圣塔克拉拉的Intel公司制造的現(xiàn)有處理器(例如,比如處理器、Pro處理器、II處理器、III處理器、4處理器、處理器、2處理器或CoreTM Duo處理器)所使用的指令集相兼容的指令集。結(jié)果,除了本發(fā)明的操作之外,處理器109還能夠支持現(xiàn)有的處理器操作。處理器109還可以適于以一種或多種處理技術(shù)來制造,并且通過被足夠詳細(xì)地表示在機器可讀介質(zhì)上可能適于方便所述制造。盡管本發(fā)明在下面結(jié)合了基于x86的指令集進(jìn)行描述,但是備選實施例能夠?qū)⒈景l(fā)明與其它指令集相結(jié)合。例如,本發(fā)明能夠結(jié)合于使用不同于基于x86的指令集的指令集的64位處理器。
圖1b示出了實現(xiàn)本發(fā)明原理的數(shù)據(jù)處理系統(tǒng)102的備選實施例。數(shù)據(jù)處理系統(tǒng)102的一個實施例是采用Intel XScaleTM技術(shù)的應(yīng)用處理器。本領(lǐng)域技術(shù)人員將容易理解的是,在此描述的實施例能夠采用備選處理系統(tǒng),并沒有背離本發(fā)明的范圍。
計算機系統(tǒng)102包括能夠執(zhí)行BLEND操作的處理核心110。對于一個實施例,處理核心110代表任意類型體系結(jié)構(gòu)的處理單元,包括但不限于CISC、RISC或VLIW類型體系結(jié)構(gòu)。處理核心110還可適于以一種或多種處理技術(shù)進(jìn)行制造,并且通過將其足夠詳細(xì)地表示在機器可讀介質(zhì)上可能適于方便所述制造。
處理核心110包括執(zhí)行單元130、一組寄存器堆150和解碼器165。處理核心110還包括對于理解本發(fā)明不需要的額外電路(未示出)。
執(zhí)行單元130被用于執(zhí)行由處理核心110所接收的指令。除了識別典型的處理器指令之外,執(zhí)行單元130還識別用于對緊縮和非緊縮數(shù)據(jù)格式執(zhí)行BLEND操作的指令。由解碼器165和執(zhí)行單元130所識別的指令集可以包括一個或多個用于BLEND操作的指令,并且還可以包括其它緊縮指令。
執(zhí)行單元130通過內(nèi)部總線(再者,其可以是包括多點總線、點到點互連等的任意類型的通信路徑)連接到寄存器堆150。寄存器堆150代表處理核心110用于存儲信息包括數(shù)據(jù)的存儲區(qū)域。如之前所述,要理解的是,用于存儲數(shù)據(jù)的存儲區(qū)域不是關(guān)鍵的。執(zhí)行單元130連接到解碼器165。解碼器165被用于將處理核心110所接收的指令解碼為控制信號和/或微代碼進(jìn)入點。響應(yīng)于這些控制信號和/或微代碼進(jìn)入點。這些控制信號和/或微代碼進(jìn)入點可以被轉(zhuǎn)發(fā)至執(zhí)行單元130。響應(yīng)于接收到控制信號和/或微代碼進(jìn)入點,執(zhí)行單元130可執(zhí)行適當(dāng)?shù)牟僮?。例如,對于至少一個實施例,執(zhí)行單元130可執(zhí)行在此所述的邏輯比較,并且還可設(shè)置如在此所述的狀態(tài)標(biāo)志或到指定代碼位置的分支,或二者。
處理核心110與總線214連接,用于與各種其它系統(tǒng)設(shè)備進(jìn)行通信,例如,所述系統(tǒng)設(shè)備可以包括同步動態(tài)隨機存取存儲器(SDRAM)控制器271、靜態(tài)隨機存取存儲器(SRAM)控制器272、突發(fā)閃存接口273、個人計算機存儲卡國際協(xié)會(PCMCIA)/小型閃存(CF)卡控制器274、液晶顯示器(LCD)控制器275、直接存儲器存取(DMA)控制器276和備選總線主接口277,但并不局限于此。
對于至少一個實施例,數(shù)據(jù)處理系統(tǒng)102還可以包括用于經(jīng)由I/O總線295與各種I/O設(shè)備進(jìn)行通信的I/O橋290。例如,這樣的I/O設(shè)備可以包括例如通用異步接收器/發(fā)送器(UART)291、通用串行總線(USB)292、藍(lán)牙無線UART 293和I/O擴展接口294,但并不局限于此。如上述的其它總線,I/O總線295可以是包括多點總線、點到點互連等的任意類型的通信路徑。
數(shù)據(jù)處理系統(tǒng)102的至少一個實施例為移動應(yīng)用提供網(wǎng)絡(luò)和/或無線通信,并且處理核心110能夠?qū)o縮和非緊縮數(shù)據(jù)執(zhí)行BLEND操作。處理核心110可以用各種音頻、視頻、成像和通信算法進(jìn)行編程,包括離散變換、濾波器或卷積;例如色空間變換、視頻編碼運動估計或視頻解碼運動補償?shù)膲嚎s/解壓縮技術(shù);以及例如脈沖編碼調(diào)制(PCM)的調(diào)制/解調(diào)(MODEM)功能。
圖1c示出了能夠?qū)o縮和非緊縮數(shù)據(jù)執(zhí)行BLEND操作的數(shù)據(jù)處理系統(tǒng)103的備選實施例。依據(jù)一個備選實施例,數(shù)據(jù)處理系統(tǒng)103可以包括包含主處理器224以及一個或多個協(xié)處理器226的芯片包310。附加的協(xié)處理器226的可選特性在圖1c中由虛線表示。例如,一個或多個協(xié)處理器226可以是例如能夠執(zhí)行SIMD指令的圖形協(xié)處理器。
圖1c示出了數(shù)據(jù)處理系統(tǒng)103還可以包括高速緩存存儲器278和輸入/輸出系統(tǒng)295,二者均連接到芯片包310。輸入/輸出系統(tǒng)295可以可選擇地連接到無線接口296。
協(xié)處理器226能夠執(zhí)行通用計算操作,并且還能夠執(zhí)行SIMD操作。對于至少一個實施例,協(xié)處理器226能夠?qū)o縮和非緊縮數(shù)據(jù)執(zhí)行BLEND操作。
對于至少一個實施例,協(xié)處理器226包括執(zhí)行單元130和寄存器堆209。主處理器224的至少一個實施例包括對指令集的指令進(jìn)行識別和解碼的解碼器165,該指令集包括由執(zhí)行單元130執(zhí)行的BLEND指令。對于備選實施例,協(xié)處理器226還包括對包括BLEND指令的指令集的指令進(jìn)行解碼的至少一部分解碼器166。數(shù)據(jù)處理系統(tǒng)103還包括對于理解本發(fā)明不需要的額外電路(未示出)。
在運行中,主處理器224執(zhí)行控制包括與高速緩存存儲器278和輸入/輸出系統(tǒng)295的交互的通用類型的數(shù)據(jù)處理操作的數(shù)據(jù)處理指令流。嵌入在數(shù)據(jù)處理指令流中的是協(xié)處理器指令。主處理器224的解碼器165將這些協(xié)處理器指令識別為應(yīng)當(dāng)由所附的協(xié)處理器226執(zhí)行的類型。相應(yīng)地,主處理器224在任何附加的協(xié)處理器從其接收指令的協(xié)處理器互連236上發(fā)出這些協(xié)處理器指令(或表示協(xié)處理器指令的控制信號)。對于圖1c中所示的單個協(xié)處理器實施例,協(xié)處理器226接受并執(zhí)行所接收的供其使用的任何協(xié)處理器指令。協(xié)處理器互連可以是包括多點總線、點到點互連等的任意類型的通信路徑。
數(shù)據(jù)可以通過無線接口296接收,以由協(xié)處理器指令進(jìn)行處理。對于一個示例,語音通信可以數(shù)字信號形式被接收,這種形式可以由協(xié)處理器指令處理以再生成表示語音通信的數(shù)字音頻采樣。對于另一個示例,壓縮的音頻和/或視頻可以數(shù)字位流形式被接收,這種形式可以由協(xié)處理器指令處理以再生成數(shù)字音頻采樣和/或運動視頻幀。
對于至少一個備選實施例,主處理器224和協(xié)處理器226可以被集成到單個處理核心中,所述處理核心包括執(zhí)行單元130、寄存器堆209和解碼器165以識別包括由執(zhí)行單元130執(zhí)行的BLEND指令的指令集的指令。
圖2a示出根據(jù)本發(fā)明一個實施例的處理器的寄存器堆。寄存器堆150可以用于存儲信息,包括控制/狀態(tài)信息、整數(shù)數(shù)據(jù)、浮點數(shù)據(jù)和緊縮數(shù)據(jù)。本領(lǐng)域技術(shù)人員將認(rèn)識到,前述的信息和數(shù)據(jù)列表不是詳盡的、全包含在內(nèi)的列表。
對于圖2a所示的實施例,寄存器堆150包括整數(shù)寄存器201、寄存器209、狀態(tài)寄存器208和指令指針寄存器211。狀態(tài)寄存器208指示處理器109的狀態(tài),并且可以包括各種狀態(tài)寄存器。指令指針寄存器211存儲下一個要被執(zhí)行的指令的地址。整數(shù)寄存器201、寄存器209、狀態(tài)寄存器208和指令指針寄存器211均連接到內(nèi)部互連170。附加的寄存器也可以連接到內(nèi)部互連170。內(nèi)部互連170可以是多點總線,但并非必須如此。作為替代,內(nèi)部互連170還可以是任意其它類型的通信路徑,包括點到點互連。
對于一個實施例,寄存器209可以被用于緊縮數(shù)據(jù)和浮點數(shù)據(jù)二者。在一個這樣的實施例中,在任意給定時刻,處理器109將寄存器209視為堆棧參考的浮點寄存器或非堆棧參考的緊縮數(shù)據(jù)寄存器。在該實施例中,包括一種機制以允許處理器109在操作在作為堆棧參考的浮點寄存器和非堆棧參考的緊縮數(shù)據(jù)寄存器的寄存器209上之間進(jìn)行切換。在另一個這樣的實施例中,處理器109可以同時操作在作為非堆棧參考的浮點和緊縮數(shù)據(jù)寄存器的寄存器209上。作為另一個示例,在另一個實施例中,這些相同的寄存器可以用于存儲整數(shù)數(shù)據(jù)。
當(dāng)然,備選實施例可以實現(xiàn)包含更多或更少的寄存器集合。例如,一個備選實施例可包括一個單獨的浮點寄存器集合用于存儲浮點數(shù)據(jù)。作為另一個示例,備選實施例可以包括第一寄存器集合,其中每個寄存器用于存儲控制/狀態(tài)信息,以及第二寄存器集合,其中每個寄存器能夠存儲整數(shù)、浮點和緊縮數(shù)據(jù)。為了清楚起見,實施例的寄存器不應(yīng)局限于是指特定類型的電路。而是,實施例的寄存器僅需要能夠存儲和提供數(shù)據(jù),并且執(zhí)行在此所描述的功能。
各種寄存器集合(例如,整數(shù)寄存器201、寄存器209)可以被實現(xiàn)為包括不同數(shù)量的寄存器和/或不同大小的寄存器。例如,在一個實施例中,整數(shù)寄存器201被實現(xiàn)為存儲32位,而寄存器209被實現(xiàn)為存儲80位(所有的80位被用于存儲浮點數(shù)據(jù),而僅有64被用于緊縮數(shù)據(jù))。此外,寄存器209可以包含8個寄存器,R0 212a到R7 212h。R1 212b、R2 212c和R3212d是寄存器209中的個別寄存器的示例。寄存器209中寄存器的32位能夠被移至整數(shù)寄存器201中的整數(shù)寄存器。相似地,整數(shù)寄存器中的值能夠被移至寄存器209中寄存器的32位。在另一個實施例中,整數(shù)寄存器201各包含64位,并且數(shù)據(jù)的64位可以在整數(shù)寄存器201和寄存器209之間移動。在另一個備選實施例中,寄存器209各包含64位,并且寄存器209包含16個寄存器。在另一個備選實施例中,寄存器209包含32個寄存器。
圖2b示出了根據(jù)本發(fā)明一個備選實施例的處理器的寄存器堆。寄存器堆150可以被用于存儲信息,包括控制/狀態(tài)信息、整數(shù)數(shù)據(jù)、浮點數(shù)據(jù)和緊縮數(shù)據(jù)。在圖2b所示的實施例中,寄存器堆150包括整數(shù)寄存器201、寄存器209、狀態(tài)寄存器208、擴展寄存器210和指令指針寄存器211。狀態(tài)寄存器208、指令指針寄存器211、整數(shù)寄存器201、寄存器209全都連接到內(nèi)部互連170。此外,擴展寄存器210也連接到內(nèi)部互連170。內(nèi)部互連170可以是多點總線,但并非必須如此。作為替代,內(nèi)部互連170還可以是任意其它類型的通信路徑,包括點到點互連。
對于至少一個實施例,擴展寄存器210被用于緊縮的整數(shù)數(shù)據(jù)和緊縮的浮點數(shù)據(jù)。對于備選實施例,擴展寄存器210可以被用于標(biāo)量數(shù)據(jù)、緊縮的布爾數(shù)據(jù)、緊縮的整數(shù)數(shù)據(jù)和/或緊縮的浮點數(shù)據(jù)。當(dāng)然,備選實施例可以被實現(xiàn)為包含更多或更少的寄存器集合、每個集合中更多或更少的寄存器或者每個寄存器中更多或更少的數(shù)據(jù)存儲位,并不背離本發(fā)明的較寬范圍。
對于至少一個實施例,整數(shù)寄存器201被實現(xiàn)為存儲32位,寄存器209被實現(xiàn)為存儲80位(所有的80位被用于存儲浮點數(shù)據(jù),而僅有64被用于緊縮數(shù)據(jù)),并且擴展寄存器210被實現(xiàn)為存儲128位。此外,擴展寄存器210可以包括8個寄存器,XR0 213a到XR7 213h。XR0213a、XR1 213b和XR2 213c是寄存器210中個別寄存器的示例。對于另一個實施例,整數(shù)寄存器201各包含64位,擴展寄存器210各包含64位,并且擴展寄存器210包含16個寄存器。對于一個實施例,擴展寄存器210的兩個寄存器可以成對操作。對于另一個備選實施例,擴展寄存器210包含32個寄存器。
圖3示出了根據(jù)本發(fā)明一個實施例用于操作數(shù)據(jù)的過程300的一個實施例的流程圖。也就是說,圖3示出了在對緊縮數(shù)據(jù)執(zhí)行BLEND操作、對非緊縮數(shù)據(jù)執(zhí)行BLEND操作或執(zhí)行一些其它操作時例如處理器109(例如,見圖1a)所進(jìn)行的過程。在此所公開的過程300和其它過程由處理塊執(zhí)行,所述處理塊可以包括專用硬件或者可由通用機器或?qū)S脵C器或這二者的組合執(zhí)行的軟件或固件操作代碼。
圖3示出了方法的處理在“開始”處開始,并且進(jìn)行至處理塊301。在處理塊301,解碼器165(例如,見圖1a)從高速緩存160(例如,見圖1a)或互連101(例如,見圖1a)接收控制信號。對于至少一個實施例,在塊301所接收的控制信號可以是通常被稱作軟件“指令”的控制信號類型。解碼器165對控制信號進(jìn)行解碼以確定將要執(zhí)行的操作。處理從處理塊301進(jìn)行至處理塊302。
在處理塊302,解碼器165存取寄存器堆150(圖1a)或存儲器(例如,見圖1a的主存儲器104或高速緩存存儲器160)中的位置。寄存器堆150中的寄存器或存儲器中的存儲器位置根據(jù)控制信號中所指定的寄存器地址進(jìn)行存取。例如,用于操作的控制信號能夠包括SRC1、SRC2和DEST寄存器地址。SRC1是第一源寄存器的地址。SRC2是第二源寄存器的地址。在一些情形下,由于并非所有操作都需要兩個源地址,所以SRC2地址是可選的。如果操作不需要SRC2地址,則僅使用SRC1地址。DEST是存儲結(jié)果數(shù)據(jù)的目標(biāo)寄存器的地址。對于至少一個實施例,在由解碼器165所識別的至少一個控制信號中,SRC1或SRC2也可以被用作DEST。
存儲在對應(yīng)寄存器中的數(shù)據(jù)分別被稱作Source1、Source2和Result。在一個實施例中,這些數(shù)據(jù)中的每一個的長度均可以是64位。對于備選實施例,這些數(shù)據(jù)中的一個或多個可以是其它長度,例如長度為128位。
對于本發(fā)明的另一個實施例,SRC1、SRC2和DEST中的任意一個或全部能夠定義處理器109(圖1a)或處理核心110(圖1b)的可尋址存儲空間中的存儲器位置。例如,SRC1可以標(biāo)識主存儲器104中的存儲器位置,而SRC2標(biāo)識整數(shù)寄存器201中的第一寄存器,并且DEST標(biāo)識寄存器209中的第二寄存器。為了在此簡要說明,本發(fā)明將結(jié)合存取寄存器堆150進(jìn)行描述。然而,本領(lǐng)域技術(shù)人員將認(rèn)識到,作為替代,這些所描述的存取也可以對存儲器進(jìn)行。
處理從塊302進(jìn)行至處理塊303。在處理塊303,執(zhí)行單元130(例如,見圖1a)能夠?qū)λ嫒〉臄?shù)據(jù)執(zhí)行操作。
處理從處理塊303進(jìn)行至處理塊304。在處理塊304,根據(jù)控制信號的要求,將結(jié)果存儲回寄存器堆150或存儲器。然后,處理在“停止”處結(jié)束。
數(shù)據(jù)存儲格式
圖4示出了根據(jù)本發(fā)明一個實施例的緊縮數(shù)據(jù)類型。示出了四個緊縮和一個非緊縮數(shù)據(jù)格式,包括緊縮字節(jié)421、緊縮半倍422、緊縮單倍423、緊縮雙倍424和非緊縮雙四字412。
對于至少一個實施例,緊縮字節(jié)格式421為包含16個數(shù)據(jù)元素(B0-B15)的128位長。每個數(shù)據(jù)元素(B0-B15)為1字節(jié)(例如,8位)長度。
對于至少一個實施例,緊縮半倍格式422為包含8個數(shù)據(jù)元素(Half0至Half7)的128位長。每個數(shù)據(jù)元素(Half0至Half7)可以保存16位信息。作為選擇,這些16位數(shù)據(jù)元素中的每一個可以被稱作“半字”或“短字”,或者簡單地稱作“字”。
對于至少一個實施例,緊縮單倍格式423可以為128位長,且可以保存4個423數(shù)據(jù)元素(Single0至Single3)。數(shù)據(jù)元素(Single0至Single3)中的每一個可以保存32位信息。作為選擇,32位數(shù)據(jù)元素中的每一個可以被稱作“dword”或“雙字”。例如,數(shù)據(jù)元素(Single0至Single3)中的每一個可以表示32位單精度浮點值,因而稱作“緊縮單倍”格式。
對于至少一個實施例,緊縮雙倍格式424可以為128位長,并且可以保存2個數(shù)據(jù)元素。緊縮雙倍格式424的每個數(shù)據(jù)元素(Double0,Double1)可以保存64位信息。作為選擇,64位數(shù)據(jù)元素中的每一個可以被稱作“qword”或“四字”。例如,數(shù)據(jù)元素(Double0,Double1)中的每一個可以表示64位雙精度浮點值,因而稱作“緊縮雙倍”格式。
非緊縮雙四字格式412可以保存高達(dá)128位的數(shù)據(jù)。所述數(shù)據(jù)不需要必需為緊縮數(shù)據(jù)。例如,對于至少一個實施例,非緊縮雙四字格式412的128位信息可以表示單個標(biāo)量數(shù)據(jù),例如字符、整數(shù)、浮點值或二進(jìn)制位屏蔽值。作為選擇,非緊縮雙四字格式412的128位可以表示不相關(guān)位的集合(例如每一位或位組表示不同標(biāo)志的狀態(tài)寄存器值)等。
對于本發(fā)明的至少一個實施例,緊縮單倍423和緊縮雙倍424格式的數(shù)據(jù)元素可以是上面指示的緊縮浮點數(shù)據(jù)元素。在本發(fā)明的備選實施例中,緊縮單倍423和緊縮雙倍424格式的數(shù)據(jù)元素可以是緊縮整數(shù)、緊縮布爾或緊縮浮點數(shù)據(jù)元素。對于本發(fā)明的另一個備選實施例,緊縮字節(jié)421、緊縮半倍422、緊縮單倍423和緊縮雙倍424格式的數(shù)據(jù)元素可以是緊縮整數(shù)或緊縮布爾數(shù)據(jù)元素。對于本發(fā)明的備選實施例,并非全部的緊縮字節(jié)421、緊縮半倍422、緊縮單倍423和緊縮雙倍424數(shù)據(jù)格式都可以被允許或支持。
圖5和6示出了根據(jù)本發(fā)明至少一個實施例的寄存器內(nèi)緊縮數(shù)據(jù)存儲表示。
圖5分別示出了無符號和有符號的緊縮字節(jié)寄存器內(nèi)格式510和511。例如,無符號緊縮字節(jié)寄存器內(nèi)表示510示出了在128位擴展寄存器XR0213a到XR7 213h(例如,見圖2b)之一中無符號緊縮字節(jié)數(shù)據(jù)的存儲。每個16字節(jié)數(shù)據(jù)元素的信息存儲在字節(jié)0的位7至位0、字節(jié)1的位15至位8、字節(jié)2的位23至位16、字節(jié)3的位31至位24、字節(jié)4的位39至位32、字節(jié)5的位47至位40、字節(jié)6的位55至位48、字節(jié)7的位63至位56、字節(jié)8的位71至位64、字節(jié)9的位79至位72、字節(jié)10的位87至位80、字節(jié)11的位95至位88、字節(jié)12的位103至位96、字節(jié)13的位111至位104、字節(jié)14的位119至位112和字節(jié)15的位127至位120。
因此,在寄存器中所有可用位都被使用。這樣的存儲配置增加了處理器的存儲效率。而且,用所存取的16個數(shù)據(jù)元素,現(xiàn)在能夠同時在16個數(shù)據(jù)元素上執(zhí)行一個操作。
有符號緊縮字節(jié)寄存器內(nèi)表示511示出了有符號緊縮字節(jié)的存儲。注意,每字節(jié)數(shù)據(jù)元素的第8位(MSB)為符號指示(“s”)。
圖5還分別示出了無符號和有符號緊縮字寄存器內(nèi)表示512和513。
無符號緊縮字寄存器內(nèi)表示512示出了擴展寄存器210如何存儲8個字(每個16位)數(shù)據(jù)元素。字0存儲在寄存器的位15到位0。字1存儲在寄存器的位31到位16。字2存儲在寄存器的位47到位32。字3存儲在寄存器的位63到位48。字4存儲在寄存器的位79到位64。字5存儲在寄存器的位95到位80。字6存儲在寄存器的位111到位96。字7存儲在寄存器的位127到位112。
有符號緊縮字寄存器內(nèi)表示513與無符號緊縮字寄存器內(nèi)表示512相似。注意,符號位(“s”)存儲在每個字?jǐn)?shù)據(jù)元素的第16位(MSB)。
圖6分別示出了無符號和有符號緊縮雙字寄存器內(nèi)格式514和515。無符號緊縮雙字寄存器內(nèi)表示514示出了擴展寄存器210如何存儲4個雙字(每個32位)數(shù)據(jù)元素。雙字0存儲在寄存器的位31至位0。雙字1存儲在寄存器的位63至位32。雙字2存儲在寄存器的位95至位64。雙字3存儲在寄存器的位127至位96。
有符號緊縮雙字寄存器內(nèi)表示515與無符號緊縮雙字寄存器內(nèi)表示514相似。注意,符號位(“s”)是每個雙字?jǐn)?shù)據(jù)元素的第32位(MSB)。
圖6還分別示出了無符號和有符號緊縮四字寄存器內(nèi)格式516和517。無符號緊縮四字寄存器內(nèi)表示516示出了擴展寄存器210如何存儲2個四字(每個64位)數(shù)據(jù)元素。四字0存儲在寄存器的位63至位0。四字1存儲在寄存器的位127至位64。
有符號緊縮四字寄存器內(nèi)表示517與無符號緊縮四字寄存器內(nèi)表示516相似。注意,符號位(“s”)是每個四字?jǐn)?shù)據(jù)元素的第64位(MSB)。
BLEND操作
圖7是根據(jù)本發(fā)明至少一個實施例用于執(zhí)行BLEND操作的一般方法700的流程圖。在此所公開的過程700和其它過程由處理塊執(zhí)行,所述處理塊可以包括專用硬件或者可由通用機器或?qū)S脵C器或這二者的組合執(zhí)行的軟件或固件操作代碼。
圖7示出了所述方法在“開始”處開始,并且進(jìn)行至處理塊705。在處理塊705,解碼器165對處理器109所接收的控制信號進(jìn)行解碼。這樣,解碼器165對BLEND指令的操作代碼進(jìn)行解碼。處理接著從處理塊705進(jìn)行至處理塊710。
在處理塊710,給定在指令中編碼的SRC1和DEST地址,解碼器165經(jīng)由內(nèi)部總線170存取寄存器堆150中的寄存器209。對于至少一個實施例,在指令中編碼的地址各指示一個擴展寄存器(例如,見圖2b的擴展寄存器210)。對于這樣的實施例,在塊710存取所指示的擴展寄存器210,以便向執(zhí)行單元130提供在SRC1寄存器(Source1)中存儲的數(shù)據(jù)以及在DEST寄存器(Dest)中存儲的數(shù)據(jù)。對于至少一個實施例,擴展寄存器210經(jīng)由內(nèi)部總線170向執(zhí)行單元130傳遞數(shù)據(jù)。
處理從處理塊710進(jìn)行至處理塊715。在處理塊715,解碼器165使執(zhí)行單元130能夠執(zhí)行指令。對于至少一個實施例,通過向執(zhí)行單元發(fā)送一個或多個控制信號來指示所希望的操作(BLEND),而執(zhí)行這種使能715。
處理從處理塊715進(jìn)行至處理塊720。在處理塊720,所希望的操作獲取在指令中存儲的數(shù)據(jù)。
處理從處理塊720進(jìn)行至處理塊725。在處理塊725,處理器確定該數(shù)據(jù)元素的控制位是否被設(shè)置為“1”。所述數(shù)據(jù)元素可以基于數(shù)據(jù)存儲格式而變化。如圖4所示,有各種緊縮數(shù)據(jù)類型。
對于至少一個實施例,緊縮字節(jié)格式421為包含16個數(shù)據(jù)元素(B0-B15)的128位長度。每個數(shù)據(jù)元素(B0-B15)為1字節(jié)(例如,8位)長度。
對于至少一個實施例,緊縮半倍格式422為包含8個數(shù)據(jù)元素(Half0至Half7)的128位長度。每個數(shù)據(jù)元素(Half0至Half7)可以保存16位信息。作為選擇,這些16位數(shù)據(jù)元素中的每一個可以被稱作“半字”或“短字”,或者簡單地被稱作“字”。
對于至少一個實施例,緊縮單倍格式423可以為128位長,且可以保存4個423數(shù)據(jù)元素(Single0至Single3)。數(shù)據(jù)元素(Single0至Single3)中的每一個可以保存32位信息。作為選擇,32位數(shù)據(jù)元素中的每一個可以被稱作“dword”或“雙字”。例如,數(shù)據(jù)元素(Single0至Single3)中的每一個可以表示32位單精度浮點值,因而稱作“緊縮單倍”格式。
對于至少一個實施例,緊縮雙倍格式424可以為128位長,并且可以保存2個數(shù)據(jù)元素。緊縮雙倍格式424的每個數(shù)據(jù)元素(Double0,Double1)可以保存64位信息。作為選擇,64位數(shù)據(jù)元素中的每一個可以被稱作“qword”或“四字”。例如,數(shù)據(jù)元素(Double0,Double1)中的每一個可以表示64位雙精度浮點值,因而稱作“緊縮雙倍”格式。
對于本發(fā)明的至少一個實施例,緊縮423和緊縮雙倍424格式的數(shù)據(jù)元素可以是上面指示的緊縮浮點數(shù)據(jù)元素。在本發(fā)明的備選實施例中,緊縮單倍423和緊縮雙倍424格式的數(shù)據(jù)元素可以是緊縮的整數(shù)、緊縮的布爾或緊縮的浮點數(shù)據(jù)元素。
對于本發(fā)明的至少一個實施例,控制位可以指的是數(shù)據(jù)元素的MSB。MSB還可以被稱為符號指示或符號位。例如,每字節(jié)數(shù)據(jù)元素的第8位(MSB)是符號指示;每個字?jǐn)?shù)據(jù)元素的第16位(MSB)是符號位;每個雙字?jǐn)?shù)據(jù)元素的第32位(MSB)是符號位;并且每個四字?jǐn)?shù)據(jù)元素的第64位(MSB)是符號位。
如果Source1數(shù)據(jù)元素的控制位是“1”,則處理進(jìn)行至處理塊730。在處理塊730,多路復(fù)用器選擇控制位為“1”的Source1數(shù)據(jù)元素。多路復(fù)用器的數(shù)量取決于指令的粒度。SRC1中的數(shù)據(jù)元素被復(fù)制到DEST。處理進(jìn)行至處理塊735。在塊735,存儲器將所選擇的數(shù)據(jù)元素存儲至DEST寄存器。一旦存儲了,則所述處理結(jié)束。
如果控制位是“0”,則處理結(jié)束。DEST中的數(shù)據(jù)元素保持原樣,并且不被復(fù)制。
立即BLEND操作
圖8示出了圖7所示一般方法700的立即選擇操作800過程的至少一個實施例的流程圖。對于圖8所示的具體實施例800,立即BLEND操作在128位長的Source1和Dest數(shù)據(jù)值上執(zhí)行,且所述數(shù)據(jù)值可以是或可以不是緊縮數(shù)據(jù)。而且,本領(lǐng)域技術(shù)人員會認(rèn)識到,圖8所示的操作還能夠?qū)τ谄渌L度的數(shù)據(jù)值執(zhí)行,包括更小或更大長度的那些數(shù)據(jù)值。
立即BLEND指令使用位屏蔽而不是字節(jié)、字或雙字屏蔽。通過使用位屏蔽,這考慮到小的立即操作數(shù)(而不是64位或128位),從而可以發(fā)生更小的代碼大小和更有效的解碼。
方法800的處理塊805至820的操作實質(zhì)上與以上結(jié)合圖7所示的方法700所描述的處理塊705至720的操作相同。在塊815解碼器165使執(zhí)行單元130能夠執(zhí)行指令時,所述指令是用于選擇Source1和Dest值的相應(yīng)數(shù)據(jù)元素的BLEND指令。
處理從處理塊820進(jìn)行至處理塊825。在處理塊825,執(zhí)行以下內(nèi)容。
對于立即BLEND指令,助記術(shù)如下:BLEND xmm1,xmm2/m128,imm8。指令取3個操作數(shù)。第一操作數(shù)可以是源操作數(shù),第二操作數(shù)可以是目標(biāo)操作數(shù),并且第三操作數(shù)可以是立即位。立即BLEND指令基于位屏蔽從Source1(xmm1)和Dest(xmm2)中選擇值。位屏蔽可以是存儲在數(shù)據(jù)元素立即字段中的位。立即位(Ib[])可以被用于控制目的,并且在指令內(nèi)進(jìn)行編碼,并被用作控制位。
處理從處理塊825進(jìn)行至處理塊830。在處理塊830,如果Source1的立即位中的位屏蔽是“1”,則來自Source1的輸入被多路復(fù)用器選擇。如之前所提到的,多路復(fù)用器的數(shù)量取決于指令的粒度。處理接著進(jìn)行至處理塊835。在處理塊835,所選擇的輸入被存儲在最終Dest。這樣,如果Source1的立即位是“1”,則該數(shù)據(jù)值被存儲在最終Dest。
如果Source1的立即位中的位屏蔽是“0”,則處理從處理塊825進(jìn)行至“停止”,則Dest中的值沒有變化。Source1數(shù)據(jù)值未存儲在Dest中。
由于立即BLEND指令使用立即操作數(shù),其允許使用靜態(tài)屏蔽模式的圖形應(yīng)用被編碼,而無需模式數(shù)據(jù)的任何加載。例如,在像Powerpoint之類的圖形應(yīng)用中的模式填充,或紋理映射,或水面上的陽光閃爍或其它動畫效果。
立即BLEND指令還提供結(jié)果的快速緊縮,其中各成分必須被區(qū)別對待,并且模式是事先已知的。例如,復(fù)數(shù)或紅-綠-藍(lán)-α像素格式。
有利地,由于立即BLEND指令不需要加載操作或比較操作來設(shè)置屏蔽,所以指令可以兩倍速度運行。
圖9a示出了用于圖8所示的立即選擇操作800的過程的至少一個具體實施例的電路圖。對于圖9a所示的具體實施例,指令是BLEND緊縮雙精度浮點值(BLENDPD)。BLENDPD操作在128位長度的Source1和Dest數(shù)據(jù)值上執(zhí)行,并且所述數(shù)據(jù)值可以是或可以不是緊縮數(shù)據(jù)。而且,本領(lǐng)域技術(shù)人員將認(rèn)識到,圖9a所示的操作還可對于其它長度的數(shù)據(jù)值執(zhí)行,包括更小或更大長度的那些數(shù)據(jù)值。
現(xiàn)在參考圖9a,對于BLENDPD操作,根據(jù)立即操作數(shù)915a中的位,來自例如xmm1 905a的源操作數(shù)的雙精度浮點值可以被有條件地寫入例如xmm2 910a的目標(biāo)操作數(shù)。如之前所提及的,立即位確定目標(biāo)操作數(shù)中的對應(yīng)雙精度浮點值是否從源操作數(shù)選擇和/或復(fù)制。如果屏蔽中的立即位對應(yīng)于一個字是“1”,則雙精度浮點值被選擇和/或復(fù)制,否則目標(biāo)中的值保持不變。
由于BLENDPD是緊縮雙精度浮點元素類型,所以其可以為28位長并且可以為每個xmm寄存器保存兩個數(shù)據(jù)元素。例如,源操作數(shù)xmm1寄存器可以保存數(shù)據(jù)元素920a和925a,而目標(biāo)操作數(shù)xmm2寄存器可以保存數(shù)據(jù)元素930a和935a。緊縮雙倍格式424的每個數(shù)據(jù)元素可以保存64位信息。該實例的立即位是每個數(shù)據(jù)元素的Ib[]915a。基于xmm1寄存器905a中每個數(shù)據(jù)元素的立即位915a,多路復(fù)用器940a選擇目標(biāo)值是否從xmm1寄存器905a進(jìn)行復(fù)制。
參考圖9a,如果操作如下:BLENDPD xmm1,xmm2,01b。該操作表示將數(shù)據(jù)元素從立即位為“1”的源操作數(shù)放到目標(biāo)寄存器中。由于Ib[0]915a包含位“1”,所以數(shù)據(jù)元素925a被MUX 940a選擇并且存儲在目標(biāo)寄存器910a中。由于Ib[1]915a包含位“0”,所以數(shù)據(jù)元素930a在目標(biāo)寄存器910a中保持原樣。一旦操作完成,最終目標(biāo)寄存器910a就包含數(shù)據(jù)元素930a和925a。該值現(xiàn)在可以被存儲在存儲器中。
圖9b示出了用于圖8所示的立即選擇操作800的過程的至少一個具體實施例的電路圖。對于圖9b所示的具體實施例,指令是BLEND緊縮單精度浮點值(BLENDPS)。BLENDPS操作在128位長度的Source1和Dest數(shù)據(jù)值上執(zhí)行,并且所述數(shù)據(jù)值可以是或可以不是緊縮數(shù)據(jù)。而且,本領(lǐng)域技術(shù)人員將認(rèn)識到,圖9b所示的操作還可對于其它長度的數(shù)據(jù)值執(zhí)行,包括更小或更大長度的那些數(shù)據(jù)值。
現(xiàn)在參考圖9b,對于BLENDPS操作,基于立即操作數(shù)915b中的位,來自諸如xmm1 905b的源操作數(shù)的單精度浮點值可以被有條件地寫入例如xmm2 910b的目標(biāo)操作數(shù)。如之前所提及的,立即位確定目標(biāo)操作數(shù)中的對應(yīng)單精度浮點值是否從源操作數(shù)選擇和/或復(fù)制。如果屏蔽中的立即位對應(yīng)于一個字是“1”,則單精度浮點值被MUX 940b選擇和/或復(fù)制,否則目標(biāo)中的值保持不變。
由于BLENDPS是緊縮單精度浮點元素類型,所以其可以為28位長并且可以為每個xmm寄存器保存4個423數(shù)據(jù)元素。例如,源操作數(shù)xmm1寄存器可以保存數(shù)據(jù)元素920b、925b、926b和927b。目標(biāo)操作數(shù)xmm2寄存器可以保存數(shù)據(jù)元素930b、935b、936b和937b。緊縮單倍格式423的每個數(shù)據(jù)元素可以保存32位信息。該實例的立即位是每個數(shù)據(jù)元素的Ib[]915b?;趚mm1寄存器905b中每個數(shù)據(jù)元素的立即位915b,多路復(fù)用器940b選擇目標(biāo)值是否從xmm1寄存器905b進(jìn)行復(fù)制。
參考圖9b,如果操作如下:BLENDPS xmm1,xmm2,0101b。該操作表示將數(shù)據(jù)元素從立即位為“1”的源操作數(shù)放到目標(biāo)寄存器中。由于Ib[0]915b包含位“1”,所以數(shù)據(jù)元素927b被選擇并且存儲在目標(biāo)寄存器910b中。由于Ib[1]915b包含位“0”,所以數(shù)據(jù)元素936b在目標(biāo)寄存器910b中保持原樣。Ib[2]915b包含位“1”,數(shù)據(jù)元素925b被選擇并且存儲在目標(biāo)寄存器910b中。最后,Ib[3]包含位“0”,數(shù)據(jù)元素930b在目標(biāo)寄存器910b中保持原樣。一旦操作完成,最終目標(biāo)寄存器910b就包含數(shù)據(jù)元素930b、925b、936b和927b。該值現(xiàn)在可被存儲在存儲器中。
圖9c示出了用于圖8所示的立即選擇操作800的過程的至少一個具體實施例的電路圖。對于圖9c所示的具體實施例,指令是BLEND緊縮字(PBLENDDW)。PBLENDDW操作在128位長度的Source1和Dest數(shù)據(jù)值上執(zhí)行,并且所述數(shù)據(jù)值可以是或可以不是緊縮數(shù)據(jù)。而且,本領(lǐng)域技術(shù)人員將會認(rèn)識到,圖9c所示的操作還可對于其它長度的數(shù)據(jù)值執(zhí)行,包括更小或更大長度的那些數(shù)據(jù)值。
現(xiàn)在參考圖9c,對于PBLENDDW操作,基于立即操作數(shù)915c中的位,來自諸如xmm1 905c的源操作數(shù)的字值可以被有條件地寫入例如xmm2 910c的目標(biāo)操作數(shù)。如之前所提及的,立即位確定目標(biāo)操作數(shù)中的對應(yīng)字值是否從源操作數(shù)被多路復(fù)用器選擇。如果屏蔽中的立即位對應(yīng)于一個字是“1”,則字值被選擇和/或復(fù)制,否則目標(biāo)中的值保持不變。
由于PBLENDDW是緊縮字元素類型,所以其可以為28位長并且可以為每個xmm寄存器保存8個數(shù)據(jù)元素。例如,源操作數(shù)xmm1寄存器可以保存數(shù)據(jù)元素920c、925c、926c、927c、928c、929c、921c和922c。目標(biāo)操作數(shù)xmm2寄存器可以保存數(shù)據(jù)元素930c、935c、936c、937c、938c、939c、931c和932c。緊縮雙倍格式422的每個數(shù)據(jù)元素可以保存16位信息。該實例的立即位是每個數(shù)據(jù)元素的Ib[]915c?;趚mm1寄存器905c中每個數(shù)據(jù)元素的立即位915c,多路復(fù)用器940c選擇目標(biāo)值是否從xmm1寄存器905c進(jìn)行復(fù)制。
參考圖9c,如果操作如下:PBLENDDW xmm1,xmm2,00001111b。該操作表示將數(shù)據(jù)元素從立即位為“1”的源操作數(shù)放到目標(biāo)寄存器中。由于Ib[0]915c包含位“1”,所以數(shù)據(jù)元素922c被MUX 940c選擇并且存儲在目標(biāo)寄存器910c中。Ib[1]915c包含位“1”,數(shù)據(jù)元素921c被MUX940c選擇并且存儲在目標(biāo)寄存器910c中。由于Ib[2]915c包含位“1”,所以數(shù)據(jù)元素929c被MUX 940c選擇并且存儲在目標(biāo)寄存器910c中。Ib[3]915c包含位“1”,數(shù)據(jù)元素928c被MUX 940c選擇并且存儲在目標(biāo)寄存器910c中。由于Ib[4]915c包含位“0”,所以數(shù)據(jù)元素937c在目標(biāo)寄存器910c中保持原樣。Ib[5]915c包含位“0”,數(shù)據(jù)元素936c在目標(biāo)寄存器910c中保持原樣。由于Ib[6]915c包含位“0”,所以數(shù)據(jù)元素935c在目標(biāo)寄存器910c中保持原樣。由于Ib[7]915c包含位“0”,所以數(shù)據(jù)元素930c在目標(biāo)寄存器910c中保持原樣。一旦操作完成,最終目標(biāo)寄存器910c就包含數(shù)據(jù)元素930c、935c、936c、937c、928c、929c、921c和922c。該值現(xiàn)在可以被存儲在存儲器中。
可變BLEND操作
圖10示出了圖7所示的一般方法700的立即選擇操作1000的過程的至少一個實施例的流程圖。對于圖10所示的具體實施例1000,可變BLEND操作在128位長的Source1和Dest數(shù)據(jù)值上執(zhí)行,并且所述數(shù)據(jù)值可以是或可以不是緊縮數(shù)據(jù)。而且,本領(lǐng)域技術(shù)人員將認(rèn)識到,圖10所示的操作還可對于其它長度的數(shù)據(jù)值執(zhí)行,包括更小或更大長度的那些數(shù)據(jù)值。此外,可變BLEND指令對每個數(shù)據(jù)元素使用符號位,或最高有效位(MSB)。
方法1000的處理塊1005至1020的操作實質(zhì)上與以上結(jié)合圖7所示方法700所描述的處理塊705至720的操作相同。當(dāng)在塊1015解碼器165使執(zhí)行單元130能夠執(zhí)行指令時,所述指令是用于選擇Source1和Dest值的相應(yīng)數(shù)據(jù)元素的BLEND指令。
處理從處理塊1020進(jìn)行至處理塊1025。在處理塊1025,執(zhí)行以下內(nèi)容。
對于可變BLEND指令,助記術(shù)如下:BLEND xmm1,xmm2/m128,<XMM0>。所述指令取3個操作數(shù)。第一操作數(shù)可以是源操作數(shù),第二操作數(shù)可以是目標(biāo)操作數(shù),并且第三操作數(shù)可以是控制寄存器??勺傿LEND指令基于隱式寄存器xmm0中的最高有效位從Source1(xmm1)和Dest(xmm2)中選擇值??刂苼碓从诿總€字段的MSB。字段寬度對應(yīng)于指令類型的字段。
處理從處理塊1025進(jìn)行至處理塊1030。在處理塊1030,如果Source1的xmm0寄存器中的MSB是“1”,則來自Source1的輸入被多路復(fù)用器選擇。如之前所提到的,多路復(fù)用器的數(shù)量取決于指令的粒度。處理接著進(jìn)行至處理塊1035。在處理塊1035,所選擇的輸入被存儲在最終Dest。這樣,如果Source1的MSB是“1”,則該數(shù)據(jù)值被存儲在最終Dest。
如果Source1的MSB是“0”,則處理從處理塊1025進(jìn)行至“停止”,則Dest中的值沒有變化。Source1數(shù)據(jù)值沒有存儲在Dest中。
由于可變BLEND操作使用每個字段的MSB,其允許將任何算術(shù)結(jié)果(浮點或整數(shù))用作屏蔽。其還允許使用比較結(jié)果(例如,32位浮點z緩沖器操作能夠被用于屏蔽32位像素)。
有利地,可變BLEND操作允許為多種目的(例如動畫效果)設(shè)計屏蔽??梢允紫仁褂米罡哂行唬又鴮⑵帘蜗蜃笠?,并且使用第二最高有效位,接著是第三,等等。通過利用該技術(shù),能夠大大減少屏蔽的預(yù)計算序列、加載操作和存儲。
圖11a示出了用于圖10所示可變選擇操作1000的過程的至少一個具體實施例的電路圖。對于圖11a所示的具體實施例,指令是可變BLEND緊縮雙精度浮點值(BLENDVPD)。BLENDVPD操作在128位長的Source1和Dest數(shù)據(jù)值上執(zhí)行,并且所述數(shù)據(jù)值可以是或可以不是緊縮數(shù)據(jù)。而且,本領(lǐng)域技術(shù)人員將認(rèn)識到,圖11a所示的操作還可對于其它長度的數(shù)據(jù)值執(zhí)行,包括更小或更大長度的那些數(shù)據(jù)值。
現(xiàn)在參考圖11a,對于BLENDVPD操作,根據(jù)隱式第三寄存器xmm01115a中的MSB,來自例如xmm1 1105a的源操作數(shù)的雙精度浮點值可以被有條件地寫入例如xmm2 1110a的目標(biāo)操作數(shù)。第三操作數(shù)的寄存器分配可以是體系結(jié)構(gòu)寄存器XMM0。如之前所提及的,每個Source1的隱式第三寄存器中的MSB確定目標(biāo)操作數(shù)中的對應(yīng)雙精度浮點值是否從源操作數(shù)選擇和/或復(fù)制。如果屏蔽中的MSB對應(yīng)于“1”,則雙精度浮點值被選擇和/或復(fù)制,否則目標(biāo)中的值保持不變。
由于BLENDVPD是緊縮雙精度浮點元素類型,所以其可以為28位長并且可以為每個xmm寄存器保存兩個數(shù)據(jù)元素。例如,源操作數(shù)xmm1寄存器1105a可以保存數(shù)據(jù)元素1120a和1125a,而目標(biāo)操作數(shù)xmm2寄存器1110a可以保存數(shù)據(jù)元素1130a和1135a。緊縮雙倍格式424的每個數(shù)據(jù)元素可以保存64位信息?;趚mm1寄存器1105中每個數(shù)據(jù)元素的寄存器1115a中的MSB,多路復(fù)用器1140a選擇目標(biāo)值是否從xmm1寄存器1105a被選擇。
參考圖11a,如果操作如下:BLENDVPD xmm1,xmm2,<XMM0>。該操作表示將數(shù)據(jù)元素從隱式寄存器XMM0中的MSB為“1”的源操作數(shù)放到目標(biāo)寄存器中。由于寄存器XMM0 1117a的MSB包含位“0”,所以數(shù)據(jù)元素1125a沒有被MUX 1140a選擇。寄存器xmm2 1110a中的數(shù)據(jù)元素1135a保持在目標(biāo)寄存器中。然而,寄存器XMM0 1116a的MSB包含位“1”,數(shù)據(jù)元素1120a被MUX 1140a選擇并且存儲在目標(biāo)寄存器1110a中。一旦操作完成,最終目標(biāo)寄存器1110a就包含數(shù)據(jù)元素1120a和1135a。該值現(xiàn)在可以被存儲在存儲器中。
圖11b示出了用于圖10所示可變選擇操作1000的過程的至少一個具體實施例的電路圖。對于圖11b所示的具體實施例,指令是可變BLEND緊縮單精度浮點值(BLENDVPS)。BLENDVPS操作在128位長的Source1和Dest數(shù)據(jù)值上執(zhí)行,并且所述數(shù)據(jù)值可以是或可以不是緊縮數(shù)據(jù)。而且,本領(lǐng)域技術(shù)人員將認(rèn)識到,圖11b所示的操作還可對于其它長度的數(shù)據(jù)值執(zhí)行,包括更小或更大長度的那些數(shù)據(jù)值。
現(xiàn)在參考圖11b,對于BLENDVPS操作,根據(jù)隱式第三寄存器xmm0 1115b中的MSB,來自例如xmm1 1105b的源操作數(shù)的單精度浮點值可以被有條件地寫入例如xmm2 1110b的目標(biāo)操作數(shù)。第三操作數(shù)的寄存器分配可以是體系結(jié)構(gòu)寄存器XMM0。如之前所提及的,每個Source1的隱式第三寄存器中的MSB確定目標(biāo)操作數(shù)中的對應(yīng)單精度浮點值是否從源操作數(shù)被選擇和/或復(fù)制。如果屏蔽中的MSB對應(yīng)于“1”,則單精度浮點值被MUX 1140b選擇和/或復(fù)制,否則目標(biāo)中的值保持不變。
由于BLENDVPS是緊縮單精度浮點元素類型,所以其可以為28位長并且可以為每個xmm寄存器保存4個423數(shù)據(jù)元素。例如,源操作數(shù)xmm1寄存器可以保存數(shù)據(jù)元素1120b、1125b、1126b和1127b,而目標(biāo)操作數(shù)xmm2寄存器可以保存數(shù)據(jù)元素1130b、1135b、1136b和1137b。緊縮單倍格式423的每個數(shù)據(jù)元素可以保存32位信息?;趚mm1寄存器1105b中每個數(shù)據(jù)元素的寄存器1115b中的MSB,多路復(fù)用器1140b選擇目標(biāo)值是否從xmm1寄存器1105b被選擇。
參考圖11b,如果操作如下:BLENDVPS xmm1,xmm2,<XMM0>。該操作表示將數(shù)據(jù)元素從隱式寄存器XMM0中的MSB為“1”的源操作數(shù)放到目標(biāo)寄存器中。由于寄存器XMM0 1117b的MSB包含位“0”,所以數(shù)據(jù)元素1127b沒有被MUX 1140b選擇。目標(biāo)寄存器1137b的值保持不變。由于寄存器XMM0 1118b的MSB包含位“1”,所以數(shù)據(jù)元素1126b被MUX 1140b選擇并且存儲在目標(biāo)寄存器1110b中。目標(biāo)寄存器1136b中的值被源操作數(shù)置換。寄存器XMM0 1117b的MSB包含位“0”,所以數(shù)據(jù)元素1125b沒有被MUX 1140b選擇。目標(biāo)寄存器1135b的值保持不變。最后,寄存器XMM0 1116b的MSB包含位“1”,數(shù)據(jù)元素1120b被MUX 1140b選擇。目標(biāo)寄存器1130b的值被源操作數(shù)置換。一旦操作完成,最終目標(biāo)寄存器1110b就包含數(shù)據(jù)元素1120b、1135b、1126b和1137b。該值現(xiàn)在可以被存儲在存儲器中。
圖11c示出了用于圖10所示可變選擇操作1000的過程的至少一個具體實施例的電路圖。對于圖11c所示的具體實施例,指令是可變BLEND緊縮字節(jié)(PBLENDVB)。PBLENDVB操作在128位長的Source1和Dest數(shù)據(jù)值上執(zhí)行,并且所述數(shù)據(jù)值可以是或可以不是緊縮數(shù)據(jù)。而且,本領(lǐng)域技術(shù)人員將認(rèn)識到,圖11c所示的操作還可對于其它長度的數(shù)據(jù)值執(zhí)行,包括更小或更大長度的那些數(shù)據(jù)值。
現(xiàn)在參考圖11c,對于PBLENDVB操作,根據(jù)隱式第三寄存器xmm0 1115c中的MSB,來自例如xmm1 1105c的源操作數(shù)的字節(jié)值可以被有條件地寫入例如xmm2 1110c的目標(biāo)操作數(shù)。第三操作數(shù)的寄存器分配可以是體系結(jié)構(gòu)寄存器XMM0。如之前所提及的,每個Source1的隱式第三寄存器中的MSB確定目標(biāo)操作數(shù)中的對應(yīng)字節(jié)值是否從源操作數(shù)被選擇和/或復(fù)制。如果屏蔽中的MSB對應(yīng)于“1”,則字節(jié)值被MUX 1140c選擇并復(fù)制,否則目標(biāo)中的值保持不變。
由于PBLENDVB是緊縮字節(jié)元素類型,所以其可以為28位長并且可以為每個xmm寄存器保存16個數(shù)據(jù)元素。例如,源操作數(shù)xmm1寄存器可以保存數(shù)據(jù)元素1120c1至1120c16。其中c1至c16表示:寄存器xmm1 1105c的16個數(shù)據(jù)元素;寄存器xmm2 1110c的16個數(shù)據(jù)元素;16個多路復(fù)用器1140c;和16個隱式寄存器XMM0 1115c。
目標(biāo)操作數(shù)xmm2寄存器可以保存數(shù)據(jù)元素1130c1至1130c16。緊縮字節(jié)格式421的每個數(shù)據(jù)元素可以保存16位信息?;趚mm1寄存器1105c中每個數(shù)據(jù)元素的寄存器1115c中的MSB,多路復(fù)用器1140c選擇目標(biāo)值是否從xmm1寄存器1105c被選擇。
參考圖11c,如果操作如下:PBLENDVB xmm1,xmm2,<XMM0>。該操作表示將數(shù)據(jù)元素從隱式寄存器XMM0中的MSB為“1”的源操作數(shù)放到目標(biāo)寄存器中。如之前所提及的,源操作數(shù)1120c由MUX 1140c基于隱式寄存器1115c中的MSB進(jìn)行選擇。如果MSB是“1”,則源操作數(shù)被選擇并復(fù)制到目標(biāo)寄存器1110c中。如果MSB是“0”,則目標(biāo)寄存器保持不變。值然后被存儲在存儲器中。
參考圖12,其示出了可以用于對BLEND指令的控制信號(操作代碼)進(jìn)行編碼的操作代碼的各種實施例。圖12示出了根據(jù)本發(fā)明一個實施例的指令格式1200。指令格式1200包括各種字段;這些字段可以包括前綴字段1210、操作碼字段1220和操作數(shù)說明符字段(例如,modR/M、比例-變址-基址、位移、立即等)。操作數(shù)說明符字段是可選的,并且包括modR/M字段1230、SIB字段1240、位移字段1250和立即字段1260。
本領(lǐng)域技術(shù)人員將認(rèn)識到,圖12中所闡述的格式1200是說明性的,并且所公開的實施例可以利用指令代碼內(nèi)的其它數(shù)據(jù)組織形式。例如,字段1210、1220、1230、1240、1250、1260無需以所示的順序進(jìn)行組織,而是可以相對于彼此重新組織在其它位置,并且無需是連續(xù)的。而且,在此討論的字段長度不應(yīng)當(dāng)被認(rèn)為是限定性的。在備選實施例中,作為特定字節(jié)數(shù)討論的字段可以被實現(xiàn)為更大或更小的字段。而且,盡管在此使用的術(shù)語“字節(jié)”表示8位的分組,但在其它實施例中可以被實現(xiàn)為任意其它大小的分組,包括4位、16位和32位。
如這里所使的,為了指示所希望的操作,諸如BLEND指令的指令的特定實例的操作碼可在指令格式200的字段中包括某些值。這種指令有時被稱作“實際指令”。實際指令的位值有時在此共同稱作“指令代碼”。
對于每個指令代碼,對應(yīng)的解碼指令代碼唯一地表示要由執(zhí)行單元(比如,例如圖1a的130)響應(yīng)于指令代碼而執(zhí)行的操作。解碼的指令代碼可以包括一個或多個微操作。
操作碼字段1220的內(nèi)容規(guī)定操作。對于至少一個實施例,在此所討論的BLEND指令的實施例的操作碼字段1220為3字節(jié)長。操作碼字段1220可以包括1個、2個或3個字節(jié)的信息。對于至少一個實施例,操作碼字段1220的2字節(jié)轉(zhuǎn)義字段118c中的3字節(jié)轉(zhuǎn)義操作碼值與操作碼字段1220的第三字節(jié)1225的內(nèi)容組合來規(guī)定BLEND操作。該第三字節(jié)1225在此被稱作指令特定操作碼。
對于至少一個實施例,前綴值0x66置于前綴字段1210中,并且被用作定義所希望操作的指令操作碼的一部分。也就是說,前綴字段1210中的值被解碼為操作碼的一部分,而不是被解釋為僅僅對后續(xù)的操作碼進(jìn)行限定。例如,對于至少一個實施例,前綴值0x66被用于指示BLEND指令的目標(biāo)和源操作數(shù)存在于128位SSE2XMM寄存器中。可以相似地使用其它前綴。然而,對于BLEND指令的至少一些實施例,在一些操作條件下,替代地,前綴可以被用于傳統(tǒng)的增強操作碼或限定操作碼的作用。
指令格式的第一實施例1226和第二實施例1228均包括3字節(jié)轉(zhuǎn)義操作碼字段118c和指令特定操作碼字段1225。對于至少一個實施例,3字節(jié)轉(zhuǎn)義操作碼字段118c為2字節(jié)長。指令格式1226使用稱為3字節(jié)轉(zhuǎn)義操作碼的4個特殊轉(zhuǎn)義操作碼中的一個。3字節(jié)轉(zhuǎn)義操作碼為2字節(jié)長,并且它們指示解碼器硬件該指令使用操作碼字段1220中的第三字節(jié)來定義指令。3字節(jié)轉(zhuǎn)義操作碼字段118c可以處于指令操作碼內(nèi)的任意位置,并且不需要必需是指令內(nèi)的最高階或最低階字段。
以下表1闡述了使用前綴和3字節(jié)轉(zhuǎn)義操作碼的BLEND指令代碼的示例。
表1
為了執(zhí)行以上結(jié)合圖7-11所討論的緊縮BLEND指令的至少一些實施例的等同物,需要向操作增加機器周期等待時間的額外指令。例如,以下在表2中闡述的偽代碼表示BLEND指令的這種使用。
表2
表2所闡述的偽代碼有助于說明所描述的BLEND指令實施例能夠被用于改善軟件代碼的性能。結(jié)果,BLEND指令能夠被用在通用處理器中來改進(jìn)較以前更多數(shù)量的算法的性能。
備選實施例
盡管所描述的實施例使用MSB為BLEND指令緊縮實施例的各種大小的數(shù)據(jù)元素發(fā)信號通知,但是備選實施例可以使用不同大小的輸入、不同大小的數(shù)據(jù)元素和/或不同位(例如,數(shù)據(jù)元素的LSB)的比較。此外,盡管在一些所描述的實施例中,Source1和Dest各包含128位數(shù)據(jù),但是備選實施例可以在具有更多或更少數(shù)據(jù)的緊縮數(shù)據(jù)上進(jìn)行操作。例如,一個備選實施例在具有64位數(shù)據(jù)的緊縮數(shù)據(jù)上進(jìn)行操作。
盡管已經(jīng)依照幾個實施例對本發(fā)明進(jìn)行了描述,但是本領(lǐng)域技術(shù)人員將將認(rèn)識到,本發(fā)明并不局限于所描述的實施例??梢栽谒綑?quán)利要求的精神和范圍內(nèi),利用修改和改變來實施本發(fā)明的方法和裝置。因此,該說明書應(yīng)當(dāng)被看成是說明性的,而不是對本發(fā)明的限制。
以上描述旨在說明本發(fā)明的優(yōu)選實施例。由以上討論,還應(yīng)當(dāng)明顯的是,尤其在這種技術(shù)領(lǐng)域中,發(fā)展是快速的并且進(jìn)一步的進(jìn)步并不易于預(yù)見,本領(lǐng)域技術(shù)人員可以在配置和細(xì)節(jié)上對本發(fā)明進(jìn)行修改,而不會背離所附權(quán)利要求書范圍內(nèi)的本發(fā)明的原理。