相關申請的交叉引用本申請涉及:在2010年12月21日提交的申請序列號12/974,157,題為“mechanismforconflictdetectionusingsimd”的申請;在2010年12月22日提交的申請序列號12/976,616,題為“vectorconflictintructions”的申請;和2012年12月29日提交的申請序列號13/731,006,題為“method,apparatus,instructionsandlogictoprovidevectoraddressconflictdetectionfunctionality”的申請。本公開屬于處理邏輯、微處理器、和相關聯的指令集架構的領域,所述相關聯的指令集架構在被處理器或者其他處理邏輯執(zhí)行時執(zhí)行邏輯、數學或者其他功能操作。特別地,本公開涉及用以提供單指令多數據(simd)向量包裝元組交叉比較功能的處理器指令和邏輯。
背景技術:
:現代處理器通常包括用以提供操作的指令,所述操作是計算密集型的,但是提供了高水平數據并行化,其可通過使用諸如例如simd向量寄存器之類的各種數據存儲設備的有效實現方式來利用。在simd執(zhí)行時,單個指令對多個數據元素并發(fā)地或者同時地進行操作。這典型地通過以下來實現:擴展諸如寄存器和算術邏輯單元(alu)之類的各種資源的寬度,從而允許它們分別保持多個數據元素或對多個數據元素進行操作。中央處理器單元(cpu)可以提供這樣的并行硬件,以支持對向量的simd處理。向量是持有一定數量的連續(xù)數據元素的數據結構。大小為l的向量寄存器包含大小為m的n個向量元素,其中n=l/m。例如,64字節(jié)向量寄存器可以被分成(a)64個向量元素,其中每個元素持有占據1字節(jié)的數據項,(b)32個向量元素,用以各自持有占據2字節(jié)(或者一個“字”)的數據項,(c)16個向量元素,用以各自持有占據4字節(jié)(或者一個“雙字”)的數據項,或者(d)8個向量元素,用以各自持有占據8字節(jié)(或者一個“四倍字”)的數據項。多種應用具有大量的數據級并行化,并且可以能夠得益于simd支持。然而,一些應用將操作時的大量時間花費在一組稀疏位置上。而且,有時,對相同的稀疏位置執(zhí)行順序操作,并且因此,這些應用可能僅看到來自simd操作的有限益處。為了保持simd有效性,一些架構不僅允許simd算術操作,而且也允許simd存儲器讀取和寫入(通過收集和分散操作)。分散縮減(scatterreduction)是許多應用中的常見操作。例如,散加(scatter-add)操作可以用于根據索引的分布(其可能通常是隨機的),使得第一陣列的多個值能夠被縮減到(即,加到)第二陣列的所選元素中。但是因為這一點,可能難以有效地并發(fā)處理多個元素(即,在simd模式中)。一種顧慮在于,在必要時確保標量程序次序被保留。另一種顧慮在于,確保當數據被分散到存儲器中時,所得到的存儲地址向量僅包括唯一地址(即,不存在重復地址)。例如,直方圖計算在許多圖像處理應用中是常見操作。直方圖可以用來跟蹤圖像中的像素的顏色值的分布。然而,對直方圖陣列的更新可能取決于對陣列的輸入數據而是隨機的。特別地,相鄰元素的索引可以指向相同的直方圖面元(histogrambin)。因此,需要沖突檢測和解決來檢測對相同位置的多個相關性更新,并且確保保留了標量程序次序。這正好是可能使得非常難以并發(fā)或同時處理多個數據(即,使用simd操作)的那種狀況。至今,對于這樣的沖突顧慮和相關處理困難的潛在解決方案還沒有被足夠地探索。附圖說明作為示例而不是限制在所附附圖的各圖中圖示本發(fā)明。圖1a是執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的系統(tǒng)的一個實施例的方框圖。圖1b是執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的系統(tǒng)的另一個實施例的方框圖。圖1c是執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的系統(tǒng)的另一個實施例的方框圖。圖2是執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的處理器的一個實施例的方框圖。圖3a圖示了根據一個實施例的包裝數據類型。圖3b圖示了根據一個實施例的包裝數據類型。圖3c圖示了根據一個實施例的包裝數據類型。圖3d圖示了根據一個實施例的編碼為提供simd向量包裝元組交叉比較功能的指令。圖3e圖示了根據另一個實施例的編碼為提供simd向量包裝元組交叉比較功能的指令。圖3f圖示了根據另一個實施例的編碼為提供simd向量包裝元組交叉比較功能的指令。圖3g圖示了根據另一個實施例的編碼為提供simd向量包裝元組交叉比較功能的指令。圖3h圖示了根據另一個實施例的編碼為提供simd向量包裝元組交叉比較功能的指令。圖4a圖示了用以執(zhí)行提供simd向量包裝元組交叉比較功能的指令的處理器微架構的一個實施例的元素。圖4b圖示了用以執(zhí)行提供simd向量包裝元組交叉比較功能的指令的處理器微架構的另一個實施例的元素。圖5是用以執(zhí)行提供simd向量包裝元組交叉比較功能的指令的處理器的一個實施例的方框圖。圖6是用以執(zhí)行提供simd向量包裝元組交叉比較功能的指令的計算機系統(tǒng)的一個實施例的方框圖。圖7是用以執(zhí)行提供simd向量包裝元組交叉比較功能的指令的計算機系統(tǒng)的另一個實施例的方框圖。圖8是用以執(zhí)行提供simd向量包裝元組交叉比較功能的指令的計算機系統(tǒng)的另一個實施例的方框圖。圖9是用以執(zhí)行提供simd向量包裝元組交叉比較功能的指令的片上系統(tǒng)的一個實施例的方框圖。圖10是用以執(zhí)行提供simd向量包裝元組交叉比較功能的指令的處理器的一個實施例的方框圖。圖11是提供simd向量包裝元組交叉比較功能的ip核開發(fā)系統(tǒng)的一個實施例的方框圖。圖12圖示了提供simd向量包裝元組交叉比較功能的架構模擬系統(tǒng)的一個實施例。圖13圖示了用以轉譯提供simd向量包裝元組交叉比較功能的指令的系統(tǒng)的實施例。圖14a圖示了用以使用simd向量前導零計數指令以用于生成用于有效向量地址沖突解決的置換控制的示例的一個實施例的流程圖。圖14b圖示了用以使用simd向量地址沖突掩碼以用于有效向量地址沖突解決的示例的一個實施例的流程圖。圖15a圖示了針對用以執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的處理器中的過程的一個實施例的流程圖。圖15b圖示了針對用以使用simd向量地址沖突掩碼以用于有效向量地址沖突解決的過程的一個實施例的流程圖。圖16圖示了用于執(zhí)行用以提供simd向量前導零計數功能的指令的裝置的現有技術實施例,所述simd向量前導零計數功能對于生成用于有效向量地址沖突解決的置換控制是有用的。圖17a-17c圖示了用以提供simd向量包裝元組交叉比較功能的指令的一些替代實施例。圖18圖示了將指令的結果進行組合以生成用于有效向量地址沖突解決的地址沖突掩碼的方法的實施例,所述指令用以提供simd向量包裝元組交叉比較功能。圖19a圖示了用于執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的裝置的實施例。圖19b圖示了用于執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的裝置的替代實施例。具體實施方式以下描述公開了用以在處理器、計算機系統(tǒng)或者其他處理裝置內或者與處理器、計算機系統(tǒng)或者其他處理裝置相關聯地提供simd向量包裝元組交叉比較功能的指令和處理邏輯。指令和邏輯在本文中被公開為提供simd向量包裝元組交叉比較功能。一些實施例包括具有第一和第二寄存器的處理器,所述第一和第二寄存器具有可變的多個數據字段,數據字段中的每一個用以存儲第一數據類型的元素。處理器在一些實施例中執(zhí)行用于向量包裝元組交叉比較的simd指令,其對于第一寄存器的元組中的數據字段的一部分中的每個數據字段而言,將其對應元素與第二寄存器的元組中的數據字段的對應部分的每個元素相比較,并且根據對應比較,在與對應第一寄存器部分的每個未掩蔽元素相對應的位掩碼(bit-mask)中,設置與第二寄存器部分的每個元素相對應的掩碼位(maskbit)。在一些實施例中,包裝元組可以各自包括兩個、四個或者八個元素。在一些實施例中,位掩碼也可以在被存儲在目的地寄存器中之前由第三寄存器的數據字段中的對應元素移位。比較類型可以通過由指令指定的立即數操作數(immediateoperand)來指示。在一些實施例中,第三寄存器可以是與目的地寄存器相同的寄存器。當正被比較的元素(例如,索引)與被需要來表示比較結果的掩碼(例如,在256位寄存器中的16個16位元素)是相同大小時,則執(zhí)行用以對所有元素交叉比較的指令可能是適當的。但是當用于比較的元素多于可用于表示比較結果的位時,可能需要替代解決方案。將領會的是,如本文公開的simd向量包裝元組比較指令可以用作用于可變大小元素和存儲器偏移的替代解決方案,以提供simd向量地址沖突檢測功能和被組合以生成用于有效simd地址沖突解決的沖突掩碼的結果。還將領會的是,simd向量包裝元組比較指令可以具有更多的通用可適用性(例如,當各種各樣的不同比較操作中的任何一項可能有用時),并且相比于用以對所有元素交叉比較的指令在區(qū)域和功率方面需要更低的實現成本。在以下描述中,諸如處理邏輯、處理器類型、微架構條件、事件、啟用機制等等的許多具體細節(jié)被闡述,以便提供對本發(fā)明的實施例的更透徹的理解。然而,將由本領域技術人員領會的是,本發(fā)明可以在沒有這樣的具體細節(jié)的情況下實踐。另外,一些眾所周知的結構、電路等等尚未被詳細示出,以避免不必要地使本發(fā)明的實施例晦澀難懂。雖然參考處理器來描述以下實施例,但是其他實施例可適用于其他類型的集成電路和邏輯設備。本發(fā)明的實施例的相似技術和教導可以被應用于可得益于較高流水線吞吐量和改進性能的其他類型的電路或者半導體設備。本發(fā)明的實施例的教導可適用于執(zhí)行數據操縱的任何處理器或者機器。然而,本發(fā)明不限于執(zhí)行512位、256位、128位、64位、32位或者16位數據操作的處理器或者機器,并且可以被應用于執(zhí)行數據的操縱和管理的任何處理器和機器。另外,以下描述了提供了示例,并且為了圖示的目的,附圖示出了各種示例。然而,這些示例不應該以限制性意義來解讀,因為它們僅意圖提供本發(fā)明的實施例的示例,而不是提供本發(fā)明的實施例的所有可能實施方式的窮盡性列表。雖然以下示例在執(zhí)行單元和邏輯電路的情境中描述了指令處理和分布,但是本發(fā)明的其他實施例可以借助于存儲在機器可讀、有形介質上的數據和/或指令來完成,所述數據和/或指令在被機器執(zhí)行時促使該機器執(zhí)行與本發(fā)明的至少一個實施例一致的功能。在一個實施例中,與本發(fā)明的實施例相關聯的功能被體現在機器可執(zhí)行指令中。指令可以用于促使利用指令編程的通用或者專用處理器執(zhí)行本發(fā)明的步驟。本發(fā)明的實施例可以被提供為計算機程序產品或軟件,該計算機程序產品或軟件可以包括具有存儲在其上的指令的機器可讀介質或計算機可讀介質,所述指令可用于對計算機(或者其他電子設備)進行編程以根據本發(fā)明的實施例執(zhí)行一個或者多個操作??商娲兀景l(fā)明的實施例的步驟可以由包含用于執(zhí)行步驟的固定函數邏輯的特定硬件部件來執(zhí)行,或者由經編程的計算機部件和固定函數硬件部件的任何組合來執(zhí)行。用于對邏輯編程以執(zhí)行本發(fā)明的實施例的指令可以被存儲在系統(tǒng)的存儲器內,該存儲器諸如是dram、高速緩存、閃速存儲器、或者其他存儲裝置。此外,可以經由網絡或者借助于其他計算機可讀介質來分布指令。因此,機器可讀介質可以包括用于存儲或者傳輸以由機器(例如,計算機)可讀的形式的信息的任何機制,但是不限于軟盤、光盤、緊湊盤、只讀存儲器(cd-rom)、以及磁光盤、只讀存儲器(rom)、隨機存取存儲器(ram)、可擦除可編程只讀存儲器(eprom)、電子可擦除可編程只讀存儲器(eeprom)、磁卡或者光卡、閃速存儲器或者用于通過互聯網經由電、光、聲、或者其他形式的傳播信號(例如,載波、紅外信號、數字信號等等)傳輸信息的有形機器可讀存儲裝置。因此,計算機可讀介質包括適用于存儲或者傳輸以由機器(例如,計算機)可讀的形式的電子指令或信息的任何類型的有形機器可讀介質。一種設計可以經歷從創(chuàng)建到仿真到制造的各種階段。表示設計的數據可以以多種方式來表示設計。首先,正如在仿真時有用的,硬件可以使用硬件描述語言或者另一功能描述語言來表示。附加地,具有邏輯和/或晶體管門的電路級模型可以在設計過程的一些階段產生。此外,大多數設計在某個階段達到表示在硬件模型中的各種設備的物理放置的數據級別。在使用常規(guī)半導體制造技術的情況下,表示硬件模型的數據可以是指定各種特征在用于被用來生產集成電路的掩模的掩模層上的存在或者不存在的數據。在設計的任何表示中,可以以任何形式的機器可讀介質來存儲數據。存儲器或者磁性或光學存儲裝置(諸如盤)可以是用以存儲經由光波或者電波傳輸的信息的機器可讀介質,所述光波或者電波被調制或者以其他方式生成以傳輸這樣的信息。當傳輸指示或承載代碼或者設計的電載波時,在執(zhí)行復制拷貝、緩沖或者重新傳輸電信號的程度上,新副本被制作。因此,通信提供商或者網絡提供商可以在有形機器可讀介質上至少臨時存儲體現本發(fā)明的實施例的技術的制品,諸如編碼成載波的信息。在現代處理器中,多個不同的執(zhí)行單元用于處理和執(zhí)行各種各樣的代碼和指令。并不是所有指令都被等同地創(chuàng)建,因為一些指令會更快完成,而其他指令可能會花費多個時鐘周期來完成。指令的吞吐量越快,處理器的總體性能就越好。因此,使得許多指令盡可能快地執(zhí)行將是有利的。然而,存在某些指令,其具有更高復雜度并且在執(zhí)行時間和處理器資源方面需要更多。例如,存在浮點指令、加載/存儲操作、數據移動等等。隨著更多計算機程序用于互聯網、文本和多媒體應用中,附加處理器支持已經隨時間而引入。在一個實施例,指令集可以與一個或者多個計算機架構相關聯,所述計算機架構包括數據類型、指令、寄存器架構、尋址模式、存儲器架構、中斷和異常處理和外部輸入和輸出(i/o)。在一些實施例中,指令集架構(isa)可由一個或者多個微架構來實現,所述一個或者多個微架構包括用于實現一個或者多個指令集的處理器邏輯和電路。相應地,具有不同微架構的處理器可以共享共用指令集的至少一部分。例如,intelpentium4處理器、intelcoretm處理器、和來自加州的sunnyvale的advancedmicrodevices,inc.的處理器實現x86指令集的近乎相同版本(具有已經與較新版本一起添加的一些擴展),但是具有不同的內部設計。相似地,由其他處理器開發(fā)公司(諸如arm股份有限公司、mips)或者他們的被許可方或者采納方設計的處理器可以至少共享共用指令集的一部分,但是可以包括不同的處理器設計。例如,isa的相同寄存器架構可以使用新的或者眾所周知的技術以不同方式實現在不同微架構中,所述技術包括專用物理存儲器、使用寄存器重命名機制(例如,使用寄存器別名表(rat)、重排序緩沖器(rob)和引退寄存器文件)的一個或者多個動態(tài)分配物理寄存器。在一個實施例中,寄存器可以包括一個或者多個寄存器、寄存器架構、寄存器文件或者可以或者可以不被軟件程序員可尋址的其他寄存器集合。在一個實施例中,指令可以包括一個或者多個指令格式。在一個實施例中,指令格式可以指示各種字段(位的數目、位的位置等等)以除了別的以外指定要執(zhí)行的操作和要對其執(zhí)行操作的(一個或者多個)操作數等等。一些指令格式可以被進一步由指令模板(或者子格式)分解定義。例如,給定指令格式的指令模板可以被定義為具有指令格式字段的不同子集和/或被定義為具有被不同地解譯的給定字段。在一個實施例中,使用指令格式(并且如果被定義的話,則是在該指令格式的指令模板中的給定一個中)來表達指令,并且指定或者指示操作和將對其運行操作的操作數。科學、金融、自動向量通用、rms(識別、挖掘、和合成)以及視覺和多媒體應用(例如,2d/3d圖形、圖像處理、視頻壓縮/解壓縮、語音識別算法和音頻操縱)可能要求對大量數據項執(zhí)行相同操作。在一個實施例中,單指令多數據(simd)指代促使處理器對多個數據元素執(zhí)行操作的指令類型。simd技術可以用于如下處理器中:該處理器可以邏輯地將寄存器中的位劃分成多個固定大小或者可變大小的數據元素,其中的每個表示單獨值。例如,在一個實施例中,在64位寄存器中的位可以被組織為包含四個單獨16位數據元素的源操作數,其中的每個表示單獨的16位值。這種類型的數據可以被稱為“包裝”數據類型或者“向量”數據類型,并且這種數據類型的操作數被稱為包裝數據操作數或者向量操作數。在一個實施例中,包裝數據項或者向量可以是被存儲在單個寄存器內的包裝數據元素的序列,并且包裝數據操作數或者向量操作數可以是simd指令(或者“包裝數據指令”或者“向量指令)的源或目的地操作數。在一個實施例中,simd指令指定了單個向量操作,要對兩個源向量操作數執(zhí)行該單個向量操作,以生成具有相同或者不同大小的目的地向量操作數(也被稱為結果向量操作數),其具有相同或者不同數目的數據元素,并且處于相同或者不同的數據元素次序。諸如由具有包括x86、mmxtm、流傳輸simd擴展(sse)、sse2、sse3、sse4.1和sse4.2指令在內的指令集的intelcoretm處理器、arm處理器(諸如具有包括向量浮點(vfp)和/或neon指令在內的指令集的armcortex族處理器)和mips處理器(諸如由中國科學院計算技術所(ict)開發(fā)的loongson族處理器)所采用的那些simd技術已經使得能夠實現在應用性能方面的顯著改進(coretm和mmxtm是注冊商標或者加州的santaclara的intel公司的商標)。在一個實施例中,目的地和源寄存器/數據是用以表示對應數據或者操作的源和目的地的通用術語。在一些實施例中,它們可以由具有除了所描述的那些內容外的名稱或者功能的寄存器、存儲器或者其他存儲區(qū)域來實現。例如,在一個實施例中,“dest1”可以是臨時存儲寄存器或者其他存儲區(qū)域,而“src1”和“src2”可以是第一和第二源存儲寄存器或者其他存儲區(qū)域等等。在其他實施例中,src和dest存儲區(qū)域中的兩個或者更多個可以對應于相同存儲區(qū)域(例如,simd寄存器)內的不同數據存儲元素。在一個實施例中,源寄存器之一也可以例如通過將對第一和第二源數據執(zhí)行的操作的結果寫回到用作目的地寄存器的兩個源寄存器之一來充當目的地寄存器。圖1a是根據本發(fā)明的一個實施例的利用包括用以執(zhí)行指令的指令單元的處理器所形成的示例性計算機系統(tǒng)的方框圖。系統(tǒng)100包括諸如處理器102之類的部件,以采用包括用以執(zhí)行用于根據本發(fā)明(諸如在本文中描述的本實施例中)處理數據的算法的邏輯的執(zhí)行單元。系統(tǒng)100表示基于從加州的santaclara的intel公司可得的pentium?iii、pentium?4、xeontm、itanium?、xscaletm和/或strongarmtm微處理器的處理系統(tǒng),但是也可以使用其他系統(tǒng)(包括具有其他微處理器的pc、工程工作站、機頂盒等等)。在一個實施例中,樣本系統(tǒng)100可以執(zhí)行從華盛頓redmond的microsoftcorporation可得的windowstm操作系統(tǒng)的某個版本,但是也可以使用其他操作系統(tǒng)(例如unix和linux)、嵌入式軟件、和/或圖形用戶界面。因此,本發(fā)明的實施例不限于硬件電路和軟件的任何特定組合。實施例不限于計算機系統(tǒng)。本發(fā)明的替代實施例可以用于諸如手持式設備和嵌入式應用之類的其他設備中。手持式設備的一些示例包括蜂窩電話、互聯網協議設備、數字相機、個人數字助理(pda)、以及手持式pc。嵌入式應用可以包括微控制器、數字信號處理器(dsp)、片上系統(tǒng)、網絡計算機(netpc)、機頂盒、網絡中樞、廣域網(wan)交換機或者可以根據至少一個實施例執(zhí)行一個或者多個指令的任何其他系統(tǒng)。圖1a是根據本發(fā)明的一個實施例的利用處理器102形成的計算機系統(tǒng)100的方框圖,所述處理器102包括用以執(zhí)行算法來執(zhí)行至少一個指令的一個或者多個執(zhí)行單元108。一個實施例可以在單處理器臺式或服務器系統(tǒng)的情境中描述,但是替代實施例可以被包括在多處理器系統(tǒng)中。系統(tǒng)100是“中樞”系統(tǒng)架構的示例。計算機系統(tǒng)100包括用以處理數字信號的處理器102。處理器102可以是復雜指令集計算機(cisc)微處理器、精簡指令集計算(risc)微處理器、超長指令字(vliw)微處理器、實施指令集的組合的處理器、或者任何其他處理器設備,諸如例如數字信號處理器。處理器102耦合到可以在系統(tǒng)100中的處理器102和其他部件之間傳輸數據信號的處理器總線110。系統(tǒng)100的元件執(zhí)行其對本領域技術人員而言眾所周知的常規(guī)功能。在一個實施例中,處理器102包括1級(l1)內部高速緩存存儲器104。取決于架構,處理器102可以具有單個內部高速緩存或者多個級別的內部高速緩存??商娲?,在另一個實施例中,高速緩存存儲器可以駐留于處理器102的外部。取決于特定實施方式和需求,其他實施例還可以包括內部和外部高速緩存兩者的組合。寄存器文件106可以將不同類型的數據存儲在包括整數寄存器、浮點寄存器、狀態(tài)寄存器和指令指針寄存器的各種寄存器中。包括用以執(zhí)行整數操作和浮點操作的邏輯的執(zhí)行單元108也駐留于處理器102中。處理器102還包括微代碼(ucode)rom,其存儲用于某些宏指令的微代碼。對于一個實施例而言,執(zhí)行單元108包括用以處理包裝指令集109的邏輯。通過將包裝指令集109包括在通用處理器102(連同用以執(zhí)行指令的相關聯電路)的指令集中,由許多多媒體應用使用的操作可以通過使用通用處理器102中的包裝數據來執(zhí)行。因此,許多多媒體應用可以通過使用用于對包裝數據執(zhí)行操作的處理器數據總線的完整寬度而被加速并且更有效地執(zhí)行。這可以消除對于以下的需要:跨越處理器數據總線傳輸較小的數據單元以每次對一個數據元素執(zhí)行一個或者多個操作。執(zhí)行單元108的替代實施例還可以用于微控制器、嵌入式處理器、圖形設備、dsp和其他類型的邏輯電路。系統(tǒng)100包括存儲器120。存儲器120可以是動態(tài)隨機存取存儲器(dram)設備、靜態(tài)隨機存取存儲器(sram)設備、閃速存儲器設備或者其他存儲器設備。存儲器120可以存儲由可被處理器102執(zhí)行的數據信號所表示的指令和/或數據。系統(tǒng)邏輯芯片116耦合到處理器總線110和存儲器120。在所圖示的實施例中的系統(tǒng)邏輯芯片116是存儲器控制器中樞(mch)。處理器102可以經由處理器總線110與mch116通信。mch116向存儲器120提供高帶寬存儲器路徑118,以用于指令和數據存儲并且用于存儲圖形命令、數據和結構(texture)。mch116用以在系統(tǒng)100中的處理器102、存儲器120和其他部件之間引導數據信號,并且用以在處理器總線110、存儲器120和系統(tǒng)i/o122之間橋接數據信號。在一些實施例中,系統(tǒng)邏輯芯片116可以提供用于耦合到圖形控制器112的圖形端口。mch116通過存儲器接口118耦合到存儲器120。圖形卡112通過加速圖形端口(agp)互連114耦合到mch116。系統(tǒng)100使用專有中樞接口總線122來將mch116耦合到i/o控制器中樞(ich)130。ich130經由本地i/o總線向一些i/o設備提供直接連接。本地i/o總線是用于將外圍設備連接到存儲器120、芯片集和處理器120的高速i/o總線。一些示例是音頻控制器、固件中樞(閃速bios)128、無線收發(fā)機126、數據存儲裝置124、包含用戶輸入和鍵盤接口的舊有i/o控制器、串行擴展端口(諸如通用串行總線(usb))、和網絡控制器134。數據存儲設備124可以包括硬盤驅動器、軟盤驅動器、cd-rom設備、閃速存儲器設備或者其他大容量存儲設備。對于系統(tǒng)的另一實施例而言,根據一個實施例的指令可以與片上系統(tǒng)一起使用。片上系統(tǒng)的一個實施例包括處理器和存儲器。用于一個這樣的系統(tǒng)的存儲器是閃速存儲器。閃速存儲器可以位于與處理器和其他系統(tǒng)部件相同的管芯上。附加地,諸如存儲器控制器或者圖形控制器之類的其他邏輯塊也可以位于片上系統(tǒng)上。圖1b圖示了實現本發(fā)明的一個實施例的原理的數據處理系統(tǒng)140。由本領域技術人員將容易領會的是,本文描述的實施例可以與替代處理系統(tǒng)一起使用,而不會偏離本發(fā)明的實施例的范圍。計算機系統(tǒng)140包括能夠執(zhí)行根據一個實施例的至少一個指令的處理核159。對于一個實施例而言,處理核159表示任何類型架構的處理單元,所述架構包括但不限于cisc、risc、或者vlim類型架構。處理核159還可以適合于以一種或者多種工藝技術進行制造,以及通過以足夠細節(jié)在機器可讀介質上表示,該處理核159可以適合于促進所述制造。處理器159包括執(zhí)行單元142、(一個或者多個)寄存器文件145的集合、和解碼器144。處理核159還包括附加電路(未示出),其對于理解本發(fā)明的實施例而言不是必需的。執(zhí)行單元142用于執(zhí)行由處理核159接收到的指令。除了執(zhí)行典型的處理器指令之外,執(zhí)行單元142可以執(zhí)行包裝指令集143中的指令,以用于對包裝數據格式執(zhí)行操作。包裝指令集143包括用于執(zhí)行本發(fā)明的實施例的指令和其他包裝指令。執(zhí)行單元142通過內部總線耦合到寄存器文件145。寄存器文件145表示處理核159上的存儲區(qū)域,用于存儲包括數據的信息。如先前提及的,要理解,用于存儲包裝數據的存儲區(qū)域不是關鍵的。執(zhí)行單元142耦合到解碼器144。解碼器144用于將由處理核159接收到的指令解碼成控制信號和/或微代碼入口點。響應于這些控制信號和/或微代碼入口點,執(zhí)行單元142執(zhí)行適當操作。在一個實施例中,解碼器用于解譯指令的操作碼,其將指示應該對在指令內指示的對應數據執(zhí)行什么操作。處理核159與總線141耦合,以用于與各種其他系統(tǒng)設備通信,所述其他系統(tǒng)設備可以包括但不限于例如同步動態(tài)隨機存取存儲器(sdram)控制146、靜態(tài)隨機存取存儲器(sram)控制147、突發(fā)式閃速存儲器接口148、個人計算機存儲器卡國際協會(pcmcia)/緊湊閃速(cf)卡控件149、液晶顯示器(lcd)控件150、直接存儲器訪問(dma)控制器151和替代的總線主接口152。在一個實施例中,數據處理系統(tǒng)140還可以包括用于經由i/o總線153與各種i/o設備通信的i/o橋154。這樣的i/o設備可以包括但不限于例如通用異步接收機/發(fā)射機(uart)155、通用串行總線(usb)156、藍牙無線uart157和i/o擴展接口158。數據處理系統(tǒng)140的一個實施例提供了移動網絡和/或無線通信,以及能夠執(zhí)行包括字符串比較操作的simd操作的處理核159。處理核159可以利用各種音頻、視頻、成像和通信算法來編程,所述算法包括諸如walsh-hadamard變換、快速傅里葉變換(fft)、離散余弦變換(dct)和它們的相應逆變換之類的離散變換;諸如顏色空間變換、視頻編碼運動估計或者視頻解碼運動補償之類的壓縮/解壓縮技術;以及諸如脈沖編碼調制(pcm)之類的調制/解調(modem)函數。圖1c圖示了能夠執(zhí)行指令以提供simd向量包裝元組交叉比較功能的數據處理系統(tǒng)的另一替代實施例。根據一個替代實施例,數據處理系統(tǒng)160可以包括主處理器166、simd協處理器161、高速緩存存儲器167、和輸入/輸出系統(tǒng)168。輸入/輸出系統(tǒng)168可以可選地耦合到無線接口169。simd協處理器161能夠執(zhí)行包括根據一個實施例的指令的操作。處理核170可以適合于以一種或者多種工藝技術進行制造,以及通過以足夠細節(jié)在機器可讀介質上表示,處理核170可以適合于促進包括處理核170的數據處理系統(tǒng)160的全部或者一部分的制造。對于一個實施例而言,simd協處理器161包括執(zhí)行單元162和(一個或多個)寄存器文件164的集合。主處理器166的一個實施例包括用以識別指令集163的指令的解碼器165,所述指令集163包括根據一個實施例的用于由執(zhí)行單元162執(zhí)行的指令。對于替代實施例而言,simd協處理器161還包括用以對指令集163的指令解碼的解碼器165b的至少一部分。處理核170還包括附加電路(未示出),其對于理解本發(fā)明的實施例而言不是必需的。在操作時,主處理器166執(zhí)行控制通用類型的數據處理操作的數據處理指令流,所述數據處理操作包括與高速緩存存儲器167和輸入/輸出系統(tǒng)168的交互。嵌入在數據處理指令流內的是simd協處理器指令。主處理器166的解碼器165將這些simd協處理器指令識別為具有應該由所附接的simd協處理器161執(zhí)行的類型。因此,主處理器166在協處理器總線171上發(fā)布這些simd協處理器指令(或者表示simd協處理器指令的控制信號),由任何所附接的simd協處理器從該協處理器總線171接收這些simd協處理器指令。在該情況下,simd協處理器161將接受和執(zhí)行意圖用于其的任何接收到的simd協處理器指令??梢越浻蔁o線接口169接收數據,以用于由simd協處理器指令進行處理。對于一個示例而言,語音通信可以以數字信號的形式被接收,所述數字信號可以被simd協處理器指令處理,以重新生成表示語音通信的數字音頻樣本。對于另一示例而言,壓縮的音頻和/或視頻可以以數字位流的形式被接收,所述數字位流可以被simd協處理器指令處理,以重新生成數字音頻樣本和/或運動視頻幀。對于處理核170的一個實施例而言,主處理器166和simd協處理器161被集成到單個處理核170中,所述單個處理核170包括執(zhí)行單元162、(一個或者多個)寄存器文件164的集合和解碼器165,以識別包括根據一個實施例的指令的指令集163的指令。圖2是用于處理器200的微架構的方框圖,所述處理器200包括用以執(zhí)行根據本發(fā)明的一個實施例的指令的邏輯電路。在一些實施例中,根據一個實施例的指令可以被實現為對具有字節(jié)、字、雙字、四倍字等等大小以及諸如單精度和雙精度整數和浮點數據類型之類的數據類型的數據元素進行操作。在一個實施例中,有序前端201是處理器200的部分,其提取要被執(zhí)行的指令并且將它們準備好以隨后用于處理器流水線中使用。前端201可以包括若干個單元。在一個實施例中,指令預提取器226從存儲器提取指令,并且將它們饋送到指令解碼器228中,指令解碼器228進而對它們進行解碼或者解譯。例如,在一個實施例中,解碼器將接收到的指令解碼成機器可以執(zhí)行的被稱為“微指令”或者“微操作”(也被稱為微op或者uop)的一個或者多個操作。在其他實施例中,解碼器將指令解析成由微架構用于執(zhí)行根據一個實施例的操作的操作碼和對應的數據和控制字段。在一個實施例中,軌跡高速緩存230取得已解碼的微操作,并且將其組裝成微操作隊列234中的程序排序的序列或者軌跡以用于執(zhí)行。當軌跡高速緩存230遇到復雜指令時,微代碼rom232提供完成操作所需要的微操作。一些指令被轉換成單個微操作,而其他指令需要若干個微操作來完成完整操作。在一個實施例中,如果需要多于四個微操作來完成指令,則解碼器228訪問微代碼rom232來進行該指令。對于一個實施例而言,指令可以被解碼成少量微操作以用于在指令解碼器228處進行處理。在另一實施例中,如果需要多個微操作來完成操作,則指令可以被存儲在微代碼rom232內。軌跡高速緩存230指代入口點可編程邏輯陣列(pla),用以確定用于讀取微代碼序列的正確微指令指針,以完成來自微代碼rom232的根據一個實施例的一個或者多個指令。在微代碼rom232完成針對指令將微操作進行定序之后,機器的前端201恢復從軌跡高速緩存230提取微操作。無序執(zhí)行引擎203是其中將指令準備好用于執(zhí)行的地方。無序執(zhí)行邏輯具有多個緩沖器,用以使指令流平滑并對其重新排序,以隨著指令沿流水線傳下去而對性能進行優(yōu)化并且為了執(zhí)行而受到調度。分配器邏輯分配每個微操作為了執(zhí)行而需要的機器緩沖器和資源。寄存器重命名邏輯將邏輯寄存器重命名到寄存器文件中的條目上。分配器還在指令調度器之前針對兩個微操作隊列(一個用于存儲器操作,而一個用于非存儲器操作)之一中的每個微操作分配條目,所述指令調度器是:存儲器調度器、快速調度器202、慢速/通用浮點調度器204、和簡單浮點調度器206。微操作調度器202、204、206基于其相關性輸入寄存器操作數源的準備就緒和微操作完成其操作所需要的執(zhí)行資源的可用性來確定何時微操作已經準備好進行執(zhí)行。一個實施例的快速調度器202可以對每半個主時鐘周期進行調度,而其他調度器可以僅每個主處理器時鐘周期調度一次。調度器對分派端口進行仲裁,以調度微操作以用于執(zhí)行。寄存器文件208、210位于調度器202、204、206和執(zhí)行塊211中的執(zhí)行單元212、214、216、218、220、222、224之間。存在分別用于整數和浮點操作的單獨的寄存器文件208、210。一個實施例的每個寄存器文件208、210還包括分流網絡(bypassnetwork),其可以向新的相關性微指令分流或轉發(fā)還沒有被寫入到寄存器文件中的剛完成的結果。整數寄存器文件208和浮點寄存器文件210也能夠與彼此傳送數據。對于一個實施例而言,整數寄存器文件208被拆分成兩個單獨的寄存器文件,一個寄存器文件用于數據的低序位32位,而第二個寄存器文件用于數據的高序位32位。一個實施例的浮點寄存器文件210具有128位寬的條目,因為浮點指令通常具有在寬度上從64到128位的操作數。執(zhí)行塊211包含執(zhí)行單元212、214、216、218、220、222、224,在其中指令被實際執(zhí)行。該部分包括存儲微指令為了執(zhí)行所需要的整數和浮點數據操作數值。一個實施例的處理器200包括多個執(zhí)行單元:地址生成單元(agu)212、agu214、快速alu216、快速alu218、慢速alu220、浮點alu222、浮點移動單元224。對于一個實施例而言,浮點執(zhí)行塊222、224執(zhí)行浮點操作、mmx操作、simd操作和sse操作或者其他操作。一個實施例的浮點alu222包括64位乘64位的浮點除法器,用以執(zhí)行對微操作的除法、平方根、和求余數。對于本發(fā)明的實施例而言,涉及浮點值的指令可以利用浮點硬件來處理。在一個實施例中,alu操作去往高速alu執(zhí)行單元216、218。一個實施例的快速alu216、218可以以半個時鐘周期的有效延遲來執(zhí)行快速操作。對于一個實施例而言,大多數復雜整數操作去往慢速alu220,因為慢速alu220包括用于長延遲類型的操作(諸如乘法器、移位、標志邏輯和分支處理)的整數執(zhí)行硬件。存儲器加載/存儲操作由agu212、214執(zhí)行。對于一個實施例而言,在對64位數據操作數執(zhí)行整數操作的情境中描述整數alu216、218、220。在替代實施例中,alu216、218、220可以被實現為支持各種各樣的數據位,包括16、32、128、256等等。相似地,浮點單元222、224可以被實現為支持具有各種寬度的位的操作數范圍。對于一個實施例而言,浮點單元222、224可以結合simd和多媒體指令對128位寬度的包裝數據操作數進行操作。在一個實施例中,微操作調度器202、204、206在親代加載已經完成執(zhí)行之前分派相關性操作。因為微操作在處理器200中被推測性地調度和執(zhí)行,所以處理器200也包括用以處理存儲器丟失的邏輯。如果數據加載在數據高速緩存中丟失,則在流水線中可能有在途中(inflight)的相關性操作,其已經為調度器中留有暫時不正確的數據。重放機制可以跟蹤和重新執(zhí)行使用不正確數據的指令。只有相關性操作需要被重放,并且允許獨立性操作完成。處理器的一個實施例的調度器和重放機制也被設計成捕獲提供simd向量包裝元組交叉比較功能的指令。術語“寄存器”可以指代機載處理器存儲位置,其被用作用以標識操作數的指令的一部分。換言之,寄存器可以是可從處理器外部(從程序員的角度而言)使用的那些。然而,一個實施例的寄存器不應該在含義上被限制為特定類型的電路。而是,一個實施例的寄存器能夠存儲和提供數據,并且執(zhí)行本文描述的功能。本文描述的寄存器可以由處理器內的電路使用任何數量的不同技術來實現,所述技術諸如是專用物理寄存器、使用寄存器重命名的動態(tài)分配物理寄存器、專用物理寄存器和動態(tài)分配物理寄存器的組合等等。在一個實施例中,整數寄存器存儲32位整數數據。一個實施例的寄存器文件還包含用于包裝數據的8個多媒體simd寄存器。對于以下的討論,寄存器被理解為是被設計成保持包裝數據的數據寄存器,諸如在利用來自加州的santaclara的intel公司的mmx技術能夠實現的微處理器中的64位寬的mmxtm寄存器(其在一些實例中也被稱為“mm”)。以整數和浮點形式都可用的這些mmx寄存器可以利用伴有simd和sse指令的包裝數據元素進行操作。相似地,與sse2、sse3、sse4或者之后的(被概括稱為“ssex”)技術相關的128位寬xmm寄存器也可以用于保持這樣的包裝數據操作數。在一個實施例中,在存儲包裝數據和整數數據時,寄存器不需要在兩種數據類型之間進行區(qū)分。在一個實施例中,整數和浮點被包含在相同寄存器文件或者不同寄存器文件中。此外,在一個實施例中,浮點和整數數據可以被存儲在不同寄存器中或者相同寄存器中。在以下附圖的示例中,描述了多個數據操作數。圖3a圖示了根據本發(fā)明的一個實施例的在多媒體寄存器中的各種包裝數據類型表示。圖3a圖示了用于128位寬操作數的包裝字節(jié)310、包裝字320和包裝雙字(dword)330的數據類型。該示例的包裝字節(jié)格式310是128位長的,并且包含16個包裝字節(jié)數據元素。字節(jié)在此處被定義為數據的8位。針對每個字節(jié)數據元素的信息被如下存儲:對于字節(jié)0而言被存儲在位7到位0中,對于字節(jié)1而言被存儲在位15到位8中,對于字節(jié)2而言被存儲在位23到位16中,并且最終對于字節(jié)15而言被存儲在位120到位127中。因此,所有可用的位在寄存器中使用。這種存儲布置增加了處理器的存儲效率。同樣,在訪問16個數據元素的情況下,現在可以對16個數據元素并行執(zhí)行一個操作。一般地,數據元素是存儲在單個寄存器或者存儲器位置中的單個一段數據,其中其他數據元素具有相同長度。在與ssex技術相關的包裝數據序列中,存儲在xmm寄存器中的數據元素的數量是128位除以單個數據元素的位長度。相似地,在與mmx和sse技術相關的包裝數據序列中,存儲在mmx寄存器中的數據元素的數量是64位除以單個數據元素的位長度。雖然在圖3a中圖示的數據類型是128位長,但是本發(fā)明的實施例也可以利用64位寬、256位寬、或者其他大小的操作數來操作。該示例的包裝字格式320是128位長,并且包含八個包裝字數據元素。每個包裝字包含16位信息。圖3a的包裝雙字格式330是128位長,并且包含四個包裝雙字數據元素。每個包裝雙字數據元素包含32位信息。包裝四倍字是128位長,并且包含兩個包裝四倍字數據元素。圖3b圖示了替代的寄存器內數據存儲格式。每個包裝數據可以包括多于一個獨立數據元素。三個包裝數據格式被圖示:包裝半字(packedhalf)341、包裝單字(packedsingle)342、和包裝雙字(packeddouble)343。包裝半字341、包裝單字342、和包裝雙字343的一個實施例包含固定點數據元素。對于替代實施例而言,包裝半字341、包裝單字342、和包裝雙字343中的一項或者多項可以包含浮點數據元素。包裝半字341的一個替代實施例是包含8個16位數據元素的128位長。包裝單字342的一個實施例是128位長并且包含4個32位數據元素。包裝雙字343的一個實施例是128位長并且包含2個64位數據元素。將領會,這樣的包裝數據格式可以被進一步擴展成其他寄存器長度,例如96位、160位、192位、224位、256位、512位或更多。圖3c圖示了根據本發(fā)明的一個實施例的在多媒體寄存器中的各種有符號和無符號包裝數據類型表示。無符號包裝字節(jié)表示344圖示了在simd寄存器中的無符號包裝字節(jié)的存儲。針對每個字節(jié)數據元素的信息被如下存儲:對于字節(jié)0被存儲在位7到位0,對于字節(jié)1被存儲在位15到位8,對于字節(jié)2被存儲在位23到位16等等,并且最后,對于字節(jié)15被存儲在位120到位127。因此,所有可用的位在寄存器中被使用。這種存儲布置增加了處理器的存儲效率。同樣,在訪問16個數據元素的情況下,現在可以對16個數據元素以并行方式執(zhí)行一個操作。有符號包裝字節(jié)表示345圖示了有符號包裝字節(jié)的存儲。要指出,每個字節(jié)數據元素的第八位是符號指示符。無符號包裝字表示346圖示了字7到字0如何被存儲在simd寄存器中。有符號包裝字表示347類似于無符號包裝字寄存器內表示346。要指出,每個字數據元素的第16位是符號指示符。無符號包裝雙字表示348示出了雙字數據元素如何被存儲。有符號包裝雙字表示349類似于無符號包裝雙字寄存器內表示348。要指出,必要的符號位是每個雙字數據元素的第32位。圖3d是操作編碼(操作碼)格式360的一個實施例的描繪,所述操作編碼格式360具有32或更多個位,以及下述寄存器/存儲器操作數尋址模式:該寄存器/存儲器操作數尋址模式與在intel.com/products/processor/manuals/處在萬維網(www)上從加州的santaclara的intel公司可得的“intel64andia-32intelarchitecturesoftwaredeveloper'smanualcombinedvolumes2aand2b:instructionsetreferencea-z”中描述的操作碼格式類型相對應。在一個實施例中,指令可以由字段361和362中的一項或者多項來編碼。每個指令的多達兩個操作數位置可以被標識,其包括多達兩個源操作數標識符364和365。對于一個實施例,目的地操作數標識符366與源操作數標識符364相同,而在其他實施例中,它們是不同的。對于替代實施例而言,目的地操作數標識符366與源操作數標識符365相同,而在其他實施例中,它們是不同的。在一個實施例中,由源操作數標識符364和365標識的源操作數之一由指令的結果覆寫,而在其他實施例中,標識符364對應于源寄存器元素,并且標識符365對應于目的地寄存器元素。對于一個實施例而言,操作數標識符364和365可以用于標識32位或者64位源和目的地操作數。圖3e是具有四十或者更多個位的另一替代操作編碼(操作碼)格式370的描繪。操作碼格式370對應于操作碼格式360,并且包括可選前綴字節(jié)378。根據一個實施例的指令可以由字段378、371和372中的一項或者多項來編碼。每個指令的多達兩個操作數位置可以由源操作數標識符374和375以及由前綴字節(jié)378標識。對于一個實施例而言,前綴字節(jié)378可以被用來標識32位或者64位源和目的地操作數。對于一個實施例而言,目的地操作數標識符376與源操作數標識符375相同,而在其他實施例中,它們是不同的。對于替代實施例而言,目的地操作數標識符376與源操作數標識符375相同,而在其他實施例中,它們是不同的。在一個實施例中,指令對由操作數標識符374和375標識的操作數中的一項或者多項進行操作,并且由操作數標識符374和375所標識的一個或者多個操作數被指令的結果所覆寫,而在其他實施例中,由標識符374和375標識的操作數被寫入到另一寄存器中的另一數據元素。操作碼格式360和370允許部分地由mod字段363和373以及由可選的縮放索引基數和位移(scale-index-baseanddisplacements)字節(jié)所指定的寄存器對寄存器尋址、存儲器對寄存器尋址、經由存儲器的寄存器尋址、經由寄存器的寄存器尋址、經由立即數的寄存器尋址、寄存器對存儲器尋址。接下來轉向圖3f,在一些替代實施例中,64位(或者128位、或者256位、或者512位或者更多)單指令多數據(simd)算術操作可以通過協處理器數據處理(cdp)指令來執(zhí)行。操作編碼(操作碼)格式380描繪了具有cdp操作碼字段382和389的一個這樣的cdp指令。對于替代實施例而言,cdp指令類型的操作可以由字段383、384、387和388中的一項或者多項來編碼。每個指令的多達三個操作數位置可以被標識,其包括多達兩個源操作數標識符385和390,以及一個目的地操作數標識符386。協處理器的一個實施例可以對8、16、32、和64位值進行操作。對于一個實施例而言,對整數數據元素執(zhí)行指令。在一些實施例中,可以使用條件字段381有條件地執(zhí)行指令。對于一些實施例而言,源數據大小可以由字段383編碼。在一些實施例中,零(z)、負(n)、進位(c)、和溢出(v)檢測可以在simd字段上進行。對于一些指令而言,飽和類型可以由字段384編碼。接下來轉向圖3g,其是用以提供根據另一實施例的simd向量包裝元組交叉比較功能的另一替代操作編碼(操作碼)格式397的描繪,所述另一替代操作編碼(操作碼)格式397與在intel.com/products/processor/manuals/處在萬維網(www)上從加州的santaclara的intel公司可得的“inteladvancedvectorextensionsprogrammingreference”中描述的操作碼格式類型相對應。原始x86指令集提供1字節(jié)操作碼,其具有各種格式的被包含在附加字節(jié)中的地址字節(jié)(addresssyllable)和立即數操作數,所述附加字節(jié)的存在從第一“操作碼”字節(jié)中已知。附加地,存在被預留為對于操作碼的修飾符的特定字節(jié)值(被稱為前綴,因為其必須被置于指令之前)。當256操作碼字節(jié)的原始調色碼(palette)(包括這些特殊的前綴值)被耗盡時,單個字節(jié)專用為對于新的一組256個操作碼的換碼。隨著向量指令(例如,simd)被添加,生成了對于更多操作碼的需要,并且“兩個字節(jié)”的操作碼映射也是不足的,即便當通過使用前綴進行擴展時。為了這個目的,新指令被添加到使用2字節(jié)加上作為標識符的可選前綴的附加映射中。附加地,為了促成64位模式中的附加寄存器,可以在前綴和操作碼(以及確定操作碼必需的任何換碼字節(jié))之間使用附加前綴(被稱為“rex”)。在一個實施例中,rex可以具有4個“有效負荷”位,以指示在64位模式中的附加寄存器的使用。在其他實施例中,其可以少于或者多于4個位。至少一個指令集的一般格式(其一般對用于格式360和/或格式370)被一般地說明如下:[前綴][rex]換碼[換碼2]操作碼modrm(等等)。操作碼格式397對應于操作碼格式370,并且包括可選的vex前綴字節(jié)391(在一個實施例中以c4十六進制開始),以代替大多數其他常用的舊有指令前綴字節(jié)和換碼。例如,以下說明了使用兩個字段來編碼指令的實施例,這可以以下的時候被使用:當第二換碼存在于原始指令中的時候,或者在rex字段中的額外位(例如,xb和w字段)需要被使用的時候。在以下圖示的實施例中,舊有換碼由新換碼值來表示,舊有前綴被完全壓縮成“有效負荷”字節(jié)的一部分,舊有前綴被收回并且可用于未來擴展,第二換碼在“映射”字段中被壓縮,并且未來映射或者特征空間是可用的,并且新特征被添加(例如,增大的向量長度和附加的源寄存器說明符)。根據一個實施例的指令可以由字段391和392中的一項或者多項編碼。每個指令的多達四個操作數位置可以由字段391與源操作數標識符374和375相結合地以及與可選的縮放索基數(sib)標識符393、可選的位移標識符394和可選的立即數字節(jié)395相結合地來標識。對于一個實施例而言,vex前綴字節(jié)391可以用于標識32位或者64位源和目的地操作數和/或128位或者256位simd寄存器或存儲器操作數。對于一個實施例而言,由操作碼格式397提供的功能可以對于操作碼格式370而言是冗余的,而在其他實施例中,它們是不同的。操作碼格式370和397允許部分地由mod字段373以及由可選的(sib)標識符393、可選的位移標識符394、和可選的立即數字節(jié)395所指定的寄存器對寄存器尋址、存儲器對寄存器尋址、經由存儲器的寄存器尋址、經由寄存器的寄存器尋址、經由立即數的寄存器尋址、寄存器對存儲器尋址。接下來轉向圖3h,其是用以提供根據另一實施例的simd向量包裝元組交叉比較功能的另一替代操作編碼(操作碼)格式398的描繪。操作碼格式398對應于操作碼格式370和397,并且包括可選的evex前綴字節(jié)396(在一個實施例中以62十六進制開始),以替代大多數其他常用的舊有指令前綴字節(jié)和換碼,并且提供附加的功能。根據一個實施例的指令可以由字段396和392中的一項或者多項來編碼。每個指令多達四個操作數位置和掩碼可以由字段396與源操作數標識符374和375相結合地以及與可選的縮放索引基數(sib)標識符393、可選的位移標識符394、和可選的立即數字節(jié)395相結合地來標識。對于一個實施例而言,evex前綴字節(jié)396可以用于標識32位或者64位源和目的地操作數和/或128位、256位或者512位simd寄存器或者存儲器操作數。對于一個實施例而言,由操作碼格式398提供的功能可以對于操作碼格式370或者397是冗余的,而在其他實施例中,它們是不同的。操作碼格式398允許部分地由mod字段373以及由可選的(sib)標識符393、可選的位移標識符394、和可選的立即數字節(jié)395所指定的利用掩碼的寄存器對寄存器尋址、存儲器對寄存器尋址、經由存儲器的寄存器尋址、經由寄存器的寄存器尋址、經由立即數的寄存器尋址、寄存器對存儲器尋址。至少一個指令集的一般格式(其一般對應于格式360和/或格式370)被一般地說明如下:evex1rxbmmmmmwvvvlppevex4操作碼modrm[sib][disp][imm]。對于一個實施例而言,根據evex格式398編碼的指令可以具有附加的“有效負荷”位,其可以用于提供具有附加的新特征的simd向量包裝元組交叉比較功能,該附加的新特征諸如例如是用戶可配置掩碼寄存器、或者附加操作數、或者從128位、256位或者512位向量寄存器當中進行的選擇、或者要從其選擇的更多寄存器,等等。例如,在vex格式397可以用于提供不具有掩碼的simd向量包裝元組交叉比較功能的情況下,evex格式398可以用于提供具有顯式用戶可配置掩碼的simd向量包裝元組交叉比較功能。附加地,在vex格式397可以用于在128位或者256位向量寄存器上提供simd向量包裝元組交叉比較功能的情況下,evex格式398可以用于在128位、256位、512位向量寄存器上提供simd向量包裝元組交叉比較功能。用以提供simd向量包裝元組交叉比較功能以用于有效的向量地址沖突解決的示例指令由以下示例來說明:指令目的地/源1源2源3源4源5描述vpdcmpuw向量包裝二元組比較無符號字vmm1vmm2vmm3/mem1mask1imm8將寄存器vmm2中的每個二元組(2元組)的每個16位無符號元素(如果mask1中的對應掩碼位是1)與寄存器vmm3中的或者存儲器位置mem1處(根據imm8中的比較類型)的對應二元組中的每個元素相比較,并且將比較掩碼存儲為目的地寄存器vmm1中的對應元素。vpqcmpd向量包裝四元組比較[有符號]雙字vmm1vmm2/mem1mask1imm8將源/目的地寄存器vmm1中的每個四元組(4元組)的每個32位有符號元素(如果mask1中的對應掩碼位是1)與寄存器vmm2中的或者存儲器位置mem1處(根據imm8中的比較類型)的對應四元組中的每個元素相比較,并且將比較掩碼存儲為寄存器vmm1中的對應元素。vposhcmpb向量包裝八元組移位比較[有符號]字節(jié)vmm1vmm2vmm3/mem1mask1imm8將寄存器vmm2中的每個八元組(8元組)的每個8位有符號元素(如果mask1中的對應掩碼位是1)與寄存器vmm3中的或者存儲器位置mem1處(根據imm8中的比較類型)的對應八元組中的每個元素相比較,將結果得到的比較掩碼分別左移位源/目的地寄存器vmm1中的移位計數。將左移位的比較掩碼存儲為寄存器vmm1中的元素。vpdcmpq向量包裝二元組比較[有符號]四倍字vmm1vmm2vmm3/mem1mask1imm8將寄存器vmm2中的每個二元組(2元組)的每個64位有符號元素(如果mask1中的對應掩碼位是1)與寄存器vmm3中的或者存儲器位置mem1處(根據imm8中的比較類型)的對應二元組中的每個元素相比較,并且將比較掩碼存儲為目的地寄存器vmm1中的對應元素。在正被比較的元素(例如索引)與表示比較結果所需要的掩碼(例如在256位寄存器中的16個16位元素)是相同大小時,則執(zhí)行用以交叉比較所有元素的指令可能是合適的。但是存在比可用于表示比較結果的位更多的元素時,可能需要替代的解決方案。將領會,如以上示例中的simd向量包裝元組比較指令可以用作一種用于可變大小的元素和存儲器偏移量的替代解決方案,以提供simd向量地址沖突檢測功能以及被組合來生成用于有效simd地址沖突解決的沖突掩碼的結果。示例包括具有第一和第二寄存器的處理器,所述第一和第二寄存器具有可變的多個數據字段,數據字段中的每一項用以存儲第一數據類型的元素。在一些實施例中,處理器執(zhí)行用于向量包裝元組(例如,雙元組、四元組、或者八元組)交叉比較的simd指令(其針對由第一寄存器的元組構成的數據字段的一部分中的每個數據字段),將其對應元素與第二寄存器中的元組(或者存儲器中的向量)的數據字段的對應部分的每個元素相比較,并且根據對應比較,在與對應的第一寄存器部分的每個非掩碼元素相對應的位掩碼中,設置與第二向量部分的每個元素相對應的掩碼位。包裝元組可以各自包括兩個、四個或者八個元素,其中,元素可以是有符號的或者無符號的包裝字節(jié)(8位)、字(16位)、雙字(32位)或者四倍字(64位)。在一些實施例中,任何比較位掩碼還可以在被存儲到源/目的地寄存器中之前被左移位另一源/目的地寄存器的數據字段中的對應元素。比較類型可以典型地通過由指令所指定的立即數操作數來指示(例如,指示為等于、小于、小于或等于、總為假、不等于、不小于、不小于或等于以及總為真中的一項)。還將領會,simd向量前導零計數指令(simdvectorleadingzerocountinstruction)可以與可變大小的元素和沖突掩碼一起使用,以提供simd置換控制(permutecontrol),這將在以下(例如,關于圖14a)更詳細地描述,從而在沒有通過存儲器執(zhí)行相關性計算的情況下準許寄存器中的有效simd地址沖突解決。因此,本文公開的指令提供了尤其在收集-修改-分散應用中的有效simd地址沖突解決。圖4a是圖示了根據本發(fā)明的至少一個實施例的有序流水線和寄存器重命名級、無序發(fā)布/執(zhí)行流水線的方框圖。圖4b是圖示了根據本發(fā)明的至少一個實施例的要被包括在處理器中的有序架構核和寄存器重命名邏輯、無序發(fā)布/執(zhí)行邏輯的方框圖。圖4a中的實線框圖示了有序流水線,而虛線框圖示了寄存器重命名、無序分發(fā)/執(zhí)行流水線。相似地,圖4b中的實線框圖示了有序架構邏輯,而虛線框圖示了寄存器重命名邏輯和無序發(fā)布/執(zhí)行邏輯。在圖4a中,處理器流水線400包括提取級402、長度解碼級404、解碼級406、分配級408、重命名級410、調度(也被稱為分派或者發(fā)布)級412、寄存器讀取/存儲器讀取級414、執(zhí)行級416、寫回/存儲器寫入級418、異常處理級422和提交級424。在圖4b中,箭頭表示了在兩個和更多單元之間的耦合,并且箭頭的方向指示了在那些單元之間的數據流方向。圖4b示出了處理器核490,其包括耦合到執(zhí)行引擎單元450的前端單元430,并且引擎單元450和前端單元430兩者都耦合到存儲器單元470。核490可以是精簡指令集計算(risc)核、復雜指令集計算(cisc)核、超長指令字(vliw)核或者混合或者替代核類型。作為又一個選項,核490可以是專用核,諸如例如是網絡或者通信核、壓縮引擎、圖形核等等。前端單元430包括耦合到指令高速緩存單元434的分支預測單元432,該指令高速緩存單元434耦合到指令轉譯后備緩沖器(tlb)436,該指令轉譯后備緩沖器(tlb)436耦合到指令提取單元438,該指令提取單元438耦合到解碼單元440。解碼單元或者解碼器可以解碼指令,并且作為輸出生成一個或者多個微操作、微代碼入口點、微指令、其他指令、或者其他控制信號,其是從原始指令解碼的、或者以其他方式反映原始指令、或者從原始指令導出的。解碼器可以使用各種不同機制來實現。適當機制的示例包括但不限于查找表、硬件實現方式、可編程邏輯陣列(pla)、微代碼只讀存儲器(rom)等等。指令高速緩存單元434進一步耦合到存儲器單元470中的2級(l2)高速緩存單元476。解碼單元440耦合到執(zhí)行引擎單元450中的重命名/分配器單元452。執(zhí)行引擎單元450包括耦合到引退單元(retirementunit)454和一個或多個調度器單元456的集合的重命名/分配器單元452。(一個或者多個)調度器單元456表示任何數目的不同調度器,其包括保留站、中央指令窗等等。(一個或者多個)調度器單元456耦合到(一個或者多個)物理寄存器文件單元458。(一個或者多個)物理寄存器文件單元458中的每一個表示一個或者多個物理寄存器文件,其中的不同物理寄存器文件存儲一個或者多個不同數據類型(諸如標量整數、標量浮點、包裝整數(packedinteger)、包裝浮點、向量整數、向量浮點等等)、狀態(tài)(例如,作為要執(zhí)行的下一指令的地址的指令指針)等等。(一個或者多個)物理寄存器文件單元458被引退單元454覆蓋以圖示可以實現寄存器重命名和無序執(zhí)行的各種方式(例如,使用(一個或者多個)重排序緩沖器和(一個或者多個)引退寄存器文件、使用(一個或者多個)未來文件、(一個或者多個)歷史緩沖器和(一個或者多個)引退寄存器文件;使用寄存器映射和寄存器池等等)。一般地,架構寄存器從處理器外是可見的,或者從程序員的視角是可見的。寄存器不限于任何已知特定類型的電路。各種不同類型的寄存器是適當的,只要它們能夠存儲和提供數據,如本文所描述的。適當寄存器的示例包括但不限于:專用物理寄存器、使用寄存器重命名的動態(tài)分配物理寄存器、專用和動態(tài)分配物理寄存器的組合等等。引退單元454和(一個或者多個)物理寄存器文件單元458耦合到(一個或者多個)執(zhí)行集群460。(一個或者多個)執(zhí)行集群460包括一個或者多個執(zhí)行單元462的集合和一個或者多個存儲器訪問單元464的集合。執(zhí)行單元462可執(zhí)行各種操作(例如,移位、加法、減法、乘法)并且對各種類型的數據(例如,標量浮點、包裝整數、包裝浮點、向量整數、向量浮點)執(zhí)行。雖然一些實施例可以包括專用于具體功能或者功能集合的多個執(zhí)行單元,但是其他實施例可以僅包括一個執(zhí)行單元或者全部都執(zhí)行全部功能的多個執(zhí)行單元。(一個或者多個)調度器456、(一個或者多個)物理寄存器文件單元458和(一個或者多個)執(zhí)行集群460可能被示為可能是復數個,因為特定實施例針對某些類型的數據/操作創(chuàng)建單獨的流水線(例如,標量整數流水線、標量浮點/包裝整數/包裝浮點/向量整數/向量浮點流水線、和/或各自具有其自己的調度器單元、物理寄存器(多個)文件單元和/或執(zhí)行集群的存儲器訪問流水線,并且在單獨的存儲器訪問流水線的情況下,實現某些實施例,其中只有該流水線的執(zhí)行集群具有(一個或者多個)存儲器訪問單元464)。還應該理解,在使用單獨流水線的情況下,這些流水線中的一個或者多個可以是無序發(fā)布/執(zhí)行的,并且其余是有序的。存儲器訪問單元464的集合耦合到存儲器單元470,存儲器單元470包括耦合到數據高速緩存單元474的數據tlb單元472,該數據高速緩存單元474耦合到2級(l2)高速緩存單元476。在一個示例性實施例中,存儲器訪問單元464可以包括加載單元、存儲地址單元、和存儲數據單元,這些中的每一個耦合到存儲器單元470中的數據tlb單元472。l2高速緩存單元476耦合到一個或者多個其他級別的高速緩存,并且最終耦合到主存儲器。作為示例,示例性寄存器重命名、無序發(fā)布/執(zhí)行核架構可以將如下來實現流水線400:1)指令提取438執(zhí)行提取和長度解碼級402和404;2)解碼單元440執(zhí)行解碼級406;3)重命名/分配器單元452執(zhí)行分配級408和重命名級410;4)(一個或者多個)調度器單元456執(zhí)行調度級412;5)(一個或者多個)物理寄存器文件單元458和存儲器單元470執(zhí)行寄存器讀取/存儲器讀取級414;執(zhí)行集群460執(zhí)行該執(zhí)行級416;6)存儲器單元470和(一個或者多個)物理寄存器文件單元458執(zhí)行寫回/存儲器寫入級418;7)各種單元可以被牽涉于異常處理級422中;以及8)引退單元454和(一個或者多個)物理寄存器文件單元458執(zhí)行提交級424。核490可以支持一個或者多個指令集(例如,x86指令集(具有已經被添加有較新版本的一些擴展);加州的sunnyvale的mips技術公司的mips指令集;加州的sunnyvale的arm控股公司的arm指令集(具有可選的附加擴展,諸如neon)。應該理解,所述核可以支持多線程(執(zhí)行操作或者線程的兩個或者更多個并行集合),并且可以以各種各樣的方式進行,這些方式包括時間片段化多線程、同時多線程(其中,單個物理核為物理核正在同時進行多線程的線程中的每一個提供邏輯核)、或者其組合(例如,時間片段化提取和解碼以及此后的同時多線程,諸如在intelhyperthreading技術中)。雖然在無序執(zhí)行的情境中描述了寄存器重命名,但是應該理解,寄存器重命名可以用于有序架構中。雖然處理器的所圖示的實施例還包括單獨的指令和數據高速緩存單元434/474和共享l2高速緩存單元476,但是替代實施例可具有用于指令和數據兩者的單個內部高速緩存,諸如例如1級(l1)內部高速緩存、或者多個級別的內部高速緩存。在一些實施例中,系統(tǒng)可以包括內部高速緩存和在核和/或處理器外部的外部高速緩存的組合??商娲?,所有的高速緩存都可以在核和/或處理器外部。圖5是根據本發(fā)明的實施例的具有集成存儲器控制器和圖形單元(graphics)的單核處理器和多核處理器500的方框圖。圖5中的實線框圖示了具有單核502a、系統(tǒng)代理510、一個或者多個總線控制器單元516的集合的處理器500,而虛線框的可選附加項圖示了具有多核502a-n、系統(tǒng)代理單元510中的一個或者多個集成存儲器控制器單元514的集合和專用圖形邏輯508的替代存儲器500。存儲器層級包括核內的一個或者多個級別的高速緩存、一個或者多個共享高速緩存單元506的集合、和耦合到集成存儲器控制器單元514的集合的外部存儲器(未示出)。共享高速緩存單元506的集合可以包括一個或者多個中級高速緩存,諸如2級(l2)、3級(l3)、4級(l4)、或者其他級別的高速緩存、末級高速緩存(llc)、和/或其組合。雖然在一個實施例中,基于環(huán)的互連單元512將集成圖形邏輯508、共享高速緩存單元506的集合、以及系統(tǒng)代理單元510進行互連,但是替代實施例可以使用用于互連這樣的單元的任何數量的眾所周知的技術。在一些實施例中,核502a-n中的一個或者多個能夠進行多線程。系統(tǒng)代理510包括協調和操作所述核502a-n的那些部件。系統(tǒng)代理單元510可以包括例如功率控制單元(pcu)和顯示單元。pcu可以是或者可以包括調節(jié)核502a-n和集成圖像邏輯508的功率狀態(tài)所需要的邏輯和部件。顯示單元用于驅動一個或者多個外部連接的顯示器。在架構和/或指令集方面,核502a-n可以是同構的或者異構的。例如,核502a-n中的一些可以是有序的,而其他可以是無序的。作為另一個示例,核502a-n中的兩個或者更多個可以能夠執(zhí)行相同的指令集,而其他可以能夠僅執(zhí)行該指令集的子集或者執(zhí)行不同的指令集。處理器可以是通用處理器,諸如從加州的santaclara的intel公司可得的coretmi3、i5、i7、2duo和quad、xeontm、itaniumtm、xscaletm或者strongarmtm處理器??商娲兀幚砥骺梢詠碜云渌?,諸如arm股份有限公司、mips公司等等。處理器可以是專用處理器,諸如例如網絡或者通信處理器、壓縮引擎、圖形處理器、協處理器、嵌入式處理器等等。處理器可以在一個或者多個芯片上實現。處理器500可以是使用多種工藝技術(諸如例如bicoms、cmos、或者nmos)中的任一種的一個或者多個基板的一部分和/或在所述基板上實現。圖6-8是適合于包括處理器500的示例性系統(tǒng),而圖9是可以包括核502中的一個或者多個的示例性片上系統(tǒng)(soc)。用于膝上型電腦、臺式電腦、手持式pc、個人數字助理、工程工作站、服務器、網絡設備、網絡中樞、交換機、嵌入式處理器、數字信號處理器(dsp)、圖形設備、視頻游戲設備、機頂盒、微控制器、蜂窩電話、便攜式媒體播放器、手持設備和各種其他電子設備的本領域中已知的其他系統(tǒng)設計和配置也是適當的。一般而言,能夠結合本文公開的處理器和/或其他執(zhí)行邏輯的多種多樣的系統(tǒng)或者電子設備一般是適當的?,F在參考圖6,示出了根據本發(fā)明的一個實施例的系統(tǒng)600的方框圖。系統(tǒng)600可以包括一個或者多個處理器610、615,其耦合到圖形存儲器控制器中樞(gmch)620。附加處理器615的可選性質在圖6中用虛線來表示。每個處理器610、615可以是處理器600的某種版本。然而,應該指出,不太可能的是,集成圖形邏輯和集成存儲器控制單元將會存在于處理器610、615中。圖6圖示了gmch620可以耦合到可以是例如動態(tài)隨機存取存儲器(dram)的存儲器640。對于至少一個實施例而言,dram可以與非易失性高速緩存相關聯。gmch620可以是芯片集或者芯片集的一部分。gmch620可以與(一個或者多個)處理器610、615通信,并且控制(一個或者多個)處理器610、615和存儲器之間的交互。gmch620還可以充當系統(tǒng)600的(一個或者多個)處理器610、615和其他元件之間的加速總線接口。對于至少一個實施例而言,gmch620經由諸如前端總線(fsb)695之類的多點分支總線與(一個或者多個)處理器610、615通信。此外,gmch620耦合到顯示器645(諸如平面板顯示器)。gmch620可以包括集成圖形加速器。gmch620進一步耦合到輸入/輸出(i/o)控制器中樞(ich)650,其可以用于將各種外圍設備耦合到系統(tǒng)600。例如在圖6的實施例中所示的是外部圖形設備660(其可以是耦合到ich650的離散圖形設備)以及另一外圍設備670??蛇x地,附加或者不同的處理器也可以存在于系統(tǒng)600中。例如,(一個或者多個)附加處理器615可以包括與處理器610相同的(一個或者多個)附加處理器、與處理器610異構的或者不對稱的(一個或者多個)附加處理器、加速器(諸如例如,圖形加速器或者數字信號處理(dsp)單元)、現場可編程門陣列或者任何其他處理器。在優(yōu)點度量范圍(包括架構的、微架構的、熱學的、功率消耗特性等等)方面,在物理資源610、615之間可能存在各種各樣的區(qū)別。這些區(qū)別可以有效地將它們自己表明為在處理器610、615之間的不對稱性和異構性。對于至少一個實施例而言,各種處理器610、615可以駐留于相同的管芯封裝中。現在參考圖7,示出了根據本發(fā)明的實施例的第二系統(tǒng)700的方框圖。如在圖7中示出的,多處理器系統(tǒng)700是點對點互連系統(tǒng),并且包括經由點對點互連750耦合的第一處理器770和第二處理器780。處理器770和780中的每一個可以是處理器500的某種版本,如處理器610、615中的一個或者多個。雖然僅示出了兩個處理器770、780,但是要理解,本發(fā)明的范圍不被如此限制。在其他實施例中,可以在給定處理器中存在一個或者多個附加處理器。處理器770和780被示為分別包括集成存儲器控制器單元772和782。處理器770還包括作為其總線控制器單元的一部分的點對點(p-p)接口776和778;相似地,第二控制器780包括p-p接口786和788。處理器770、780可以經由點對點(p-p)接口750使用p-p接口電路778、788來交換信息。如圖7中示出的,imc772和782將處理器耦合到相應存儲器,即存儲器732和存儲器734,其可以是本地附接到相應處理器的主存儲器的部分。處理器770、780可以各自經由單個p-p接口752、754使用點對點接口電路776、794、786、798與芯片集790交換信息。芯片集790還可以經由高性能圖形接口739與高性能圖形電路738交換信息。共享高速緩存(未示出)可以被包括在任一處理器中,或者在兩個處理器之外,但是經由p-p互連與處理器連接,以使得如果處理器被置于低功率模式中,任一處理器或者兩個處理器的本地高速緩存信息可以被存儲在共享高速緩存中。芯片集790可以經由接口796耦合到第一總線716。在一個實施例中,第一總線716可以是外圍部件互連(pci)總線、或者諸如是pciexpress總線或者另一第三代i/o互連總線之類的總線,但是本發(fā)明的范圍并不被如此限制。如圖7中示出的,各種i/o設備714與總線橋718一起可以耦合到第一總線716,所述總線橋718將第一總線718耦合到第二總線720。在一個實施例中,第二總線720可以是低引腳數(lpc)總線。各種設備可以耦合到第二總線720,在一個實施例中,所述設備包括例如鍵盤和/或鼠標722、通信設備727和可以包括指令/代碼和數據730的存儲單元728(諸如盤驅動器或者其他大容量存儲設備)。此外,音頻i/o724可以耦合到第二總線720。要指出,其他架構是可能的。例如,代替圖7的點對點架構,系統(tǒng)可以實現多點分支總線或者其他這樣的架構?,F在參考圖8,示出了根據本發(fā)明的實施例的第三系統(tǒng)800的方框圖。在圖7和8中的類似元件具有類似的附圖標記,并且已經將圖7的某些方面從圖8中省略,以便避免使圖8的其他方面晦澀難懂。圖8圖示了處理器870、880可以分別包括集成存儲器和i/o控制邏輯(“cl”)872和882。對于一個實施例而言,cl872、882可以包括集成存儲器控制器單元,諸如以上結合圖5和7所描述的。另外,cl872、882還包括i/o控制邏輯。圖8圖示了不僅存儲器832、834被耦合到cl872、882,而且i/o設備814也耦合到控制邏輯872、882。舊有i/o設備815被耦合到芯片集890?,F在參考圖9,示出了根據本發(fā)明的實施例的soc900的方框圖。在圖5中的相似元件具有類似的附圖標記。另外,虛線框是更高級的soc上的可選特征。在圖9中,(一個或者多個)互連單元902耦合到:包括一個或者多個核502a-n的集合和(一個或者多個)共享高速緩存單元506的應用處理器910;系統(tǒng)代理單元510;(一個或者多個)總線控制器單元516;(一個或者多個)集成存儲器控制器單元514;一個或多個媒體處理器920的集合,其可以包括集成圖形邏輯508、用于提供靜止和/或視頻相機功能的圖像處理器924、用于提供硬件音頻加速的音頻處理器926、和用于提供視頻編碼/解碼加速的視頻處理器928;靜態(tài)隨機存取存儲器(sram)單元930;直接存儲器訪問(dma)單元932;以及用于耦合到一個或者多個外部顯示器的顯示單元940。圖10圖示了包含中央處理單元(cpu)和圖形處理單元(gpu)的處理器,其可以執(zhí)行根據一個實施例的至少一個指令。在一個實施例中,用以執(zhí)行根據至少一個實施例的操作的指令可以由cpu來執(zhí)行。在另一實施例中,指令可以由gpu來執(zhí)行。在又一實施例中,指令可以通過由gpu和cpu執(zhí)行的操作的組合來執(zhí)行。例如,在一個實施例中,根據一個實施例的指令可以被接收和解碼,以用于在gpu上執(zhí)行。然而,在已解碼指令內的一個或者多個操作可以由cpu來執(zhí)行,并且將結果返回給gpu以用于最終的指令引退。相反,在一些實施例中,cpu可以充當主處理器,并且gpu充當協處理器。在一些實施例中,受益于高度并行吞吐量處理器的指令可以由gpu來執(zhí)行,而受益于從深度流水線化架構受益的處理器性能的指令可以由cpu來執(zhí)行。例如,圖形、科學應用、金融應用和其他并行工作量可以受益于gpu的性能,并且被相應地執(zhí)行,而諸如操作系統(tǒng)內核或者應用代碼之類的更加有順序的應用可能更適于cpu。在圖10中,處理器1000包括cpu1005、gpu1010、圖形處理器1015、視頻處理器1020、usb控制器1025、uart控制器1030、spi/sdio控制器1035、顯示設備1040、高清晰度多媒體接口(hdmi)控制器1045、mipi控制器1050、閃速存儲器控制器1055、雙數據速率(ddr)控制器1060、安全引擎1065、和i2s/i2c(集成芯片間聲音/內部集成電路)接口1070。其他邏輯和電路可以被包括在圖10的處理器中,其包括更多cpu或者gpu以及其他外圍接口控制器。至少一個實施例的一個或者多個方面可以由存儲在表示處理器內的各種邏輯的機器可讀介質上的代表性數據來實現,所述代表性數據當被機器讀取時促使該機器制造用以執(zhí)行本文描述的技術的邏輯。稱為“ip核”的這樣的表示可以被存儲在有形、機器可讀介質(“磁帶(tape)”)上,并且供應給各種消費者或者加工設施,以加載到實際制作邏輯或者處理器的制造機器中。例如,諸如由arm股份有限公司開發(fā)的cortextm族的處理器和由中國科學院的計算技術所(ict)開發(fā)的loongsonip核之類的ip核可以被許可或者售賣給各種消費者或者被許可方,諸如texasinstruments、qualcomm、apple或者samsung,并且被實現在由這些消費者或者被許可方生產的處理器中。圖11示出了圖示出根據一個實施例的ip核的開發(fā)的方框。存儲裝置1130包括仿真軟件1120和/或硬件或者軟件模型1110。在一個實施例中,表示ip核設計的數據可以經由存儲器1140(例如,硬盤)、有線連接(例如,互聯網)1150或者無線連接1160提供給存儲裝置1130。由仿真工具和模型生成的ip核信息然后可以被傳輸到制造設施,在那里其可以被第三方制造,以執(zhí)行根據至少一個實施例的至少一個指令。在一些實施例中,一個或者多個指令可以對應于第一類型或架構(例如,x86),并且在不同類型或架構(例如,arm)的處理器上被轉譯或者模擬。根據一個實施例的指令可以因此在包括arm、x86、mips、gpu或者其他處理器類型或架構的任何處理器或者處理器類型上執(zhí)行。圖12圖示了根據一個實施例的第一類型的指令如何被不同類型的處理器模擬。在圖12中,程序1205包含可以與根據一個實施例的指令執(zhí)行相同或者基本相同功能的一些指令。然而,程序1205的指令可以具有不同于處理器1215或者與處理器1215不兼容的類型和/或格式,這意味著在程序1205中的類型的指令可能不能夠由處理器1215原生地執(zhí)行。然而,在模擬邏輯1210的幫助下,程序1205的指令被轉譯成原生地能夠由處理器1215執(zhí)行的指令。在一個實施例中,模擬邏輯被體現在硬件中。在另一實施例中,模擬邏輯被嵌入在有形、機器可讀介質中,所述機器可讀介質包含軟件,其用以將程序1205中的類型的指令轉譯成可由處理器1215原生地執(zhí)行的類型。在其他實施例中,模擬邏輯是固定功能或者可編程硬件和存儲在有形、機器可讀介質上的程序的組合。在一個實施例中,處理器包含模擬邏輯,而在其他實施例中,模擬邏輯存在于處理器外,并且由第三方提供。在一個實施例中,處理器能夠通過執(zhí)行被包含在該處理器中或者與該處理器相關聯的微代碼或者固件來加載體現在包含軟件的有形機器可讀介質中的模擬邏輯。圖13是對照了根據本發(fā)明的實施例的使用軟件指令轉換器來將源指令集中的二進制指令轉換成目標指令集中的二進制指令的方框圖。在所圖示的實施例中,指令轉換器是軟件指令轉換器,但是可替代地,指令轉換器可以被實現在軟件、固件、硬件或者其各種組合中。圖13示出了以高級語言1302的程序可以使用x86編譯器1304來編譯,以生成可以由具有至少一個x86指令集核1316的處理器原生地執(zhí)行的x86二進制代碼1306。具有至少一個x86指令集核1316的處理器表示下述的任何處理器,其可通過兼容地執(zhí)行或者以其他方式處理以下各項而基本上執(zhí)行與具有至少一個x86指令集核的intel處理器相同的功能:(1)intelx86指令集核的指令集的主要部分,或者(2)目標在于運行于具有至少一個x86指令集核的intel處理器上以便基本實現與具有至少一個x86指令集核的intel處理器相同的結果的應用或其他軟件的目標代碼版本。x86編譯器1304表示可操作為生成x86二進制代碼1306(例如,目標代碼)的編譯器,所述x86二進制代碼1306可以在具有或者不具有附加聯動處理的情況下在具有至少一個x86指令集核1316的處理器上被執(zhí)行。相似地,圖13示出了以高級語言1302的程序可以通過使用替代指令集編譯器1308來編譯,以生成替代指令集二級制代碼1310,其可以由不具有至少一個x86指令集核1314的處理器(例如,具有執(zhí)行加州的sunnyvale的mips技術公司的mips指令集的核和/或執(zhí)行加州的sunnyvale的arm控股公司的arm指令集的核的處理器)原生地執(zhí)行。指令轉換器1312用于將x86二進制代碼1306轉換成可以由不具有x86指令集核1314的處理器原生地執(zhí)行的代碼。這種經轉換的代碼不太可能與替代指令集二進制代碼1310相同,因為能夠進行這一點的指令轉換器是難以制作的;然而,經轉換的代碼將完成一般操作,并且由來自替代指令集的指令構成。因此,指令轉換器1312通過模擬、仿真或者任何其他過程來表示軟件、固件、硬件或者其組合,允許不具有x86指令集處理器或核的處理器或其他電子設備執(zhí)行x86二進制代碼1306。圖14a圖示了用于使用simd向量前導零計數指令以便生成用于有效向量地址沖突解決的置換控制的過程1401的示例的一個實施例的流程圖。本文公開的過程1401和其他過程由處理塊來執(zhí)行,所述處理塊可以包括可由通用機器或者由專用機器或者由兩者的組合執(zhí)行的專用硬件或者軟件或者固件操作代碼。在過程1401的處理塊1410中,初始化索引的集合,例如初始化為值7、2、7、1和7。將領會,偏移量索引的數量和偏移量索引的值意圖是說明性的,并且不限制本發(fā)明的實施例。特別地,在寄存器中的偏移量索引的數量可以由特定應用和/或對應于索引的數據元素的大小來確定。偏移量索引的示例值僅意圖圖示相關性沖突的解決。在處理塊1415中,元素左掩碼被設置為全1(例如,五個1)。在處理塊1420中,相關性掩碼可以根據過程1405的技術(其將在以下關于圖18更詳細描述)來設置,以反映所有匹配的偏移量索引。然后在處理塊1425中,初始化次序掩碼的集合。在處理塊1430中,通過在相關性掩碼和次序掩碼之間執(zhí)行按位的和運算(and)來計算沖突掩碼。接下來進行到處理塊1439,通過如下來計算前導零計數:通過針對沖突掩碼的每個數據字段對被設置為零的最高有效連續(xù)位的數量進行計數,并且將每個計數存儲為前導零計數的對應數據字段中的值,對沖突掩碼使用向量包裝前導零計數指令vplzcnt。在處理塊1440中,最大計數被初始化為全為4,這是比用于表示所圖示的示例中的沖突掩碼的位數量小1的值。在處理塊1445中,通過以下來計算置換索引的集合:通過執(zhí)行simd包裝減法psub(從對應的最大計數值(其比用于表示沖突掩碼的位數量小1)減去每個前導零計數的值)以生成最大計數減去前導零計數的對應差值。將領會,對應于與先前計算無關的偏移量索引的那些位置具有為-1的置換索引,這也可以被有利地使用。在處理塊1450中,根據偏移量索引和(可選地)全為1的元素左掩碼來從存儲器收集數據。接下來在處理塊1455中,通過以下來重新計算元素左掩碼:使用包裝比較不相等(packedcomparenotequal)指令pcmpneq,其有利地將置換索引與所有-1相比較。在處理塊1460中,做出元素左掩碼是否是零(0)的確定。如果是這樣,則在處理塊1465中,使用偏移量索引將數據分散到存儲器,并且對這個simd數據集合的處理在處理塊1499中結束。否則,在處理塊1470中,通過以下來置換數據:執(zhí)行simd向量包裝置換vperm,其將置換索引和元素左掩碼用作完成掩碼來有利地僅更新過程左邊的元素。在處理塊1475,使用元素左掩碼作為完成掩碼來對過程左邊的數據元素執(zhí)行所需的計算。然后,在先前的技術過程1406中,通過將元素左掩碼廣播到處理塊1480中的所有元素來初始化起沖突(conflictedout)元素的集合。然后,通過對先前的沖突掩碼和新的起沖突元素使用向量包裝和運算(and)指令來重新計算沖突掩碼的集合。然后通過以下來計算新的元素左掩碼:使用包裝比較不相等指令pcmpneq,其將每個沖突掩碼與全零相比較。處理然后重新迭代,其在處理塊1460中開始于測試新的元素左掩碼。將領會,如本文所描述的simd向量前導零計數指令可以有利地與可變大小的元素和沖突掩碼一起使用來提供simd置換控制,從而在沒有通過存儲器執(zhí)行相關性計算的情況下準許寄存器中的有效simd地址沖突解決。圖14b圖示了用于使用simd向量地址沖突掩碼以用于有效向量地址沖突解決的示例的一個實施例的流程圖。在過程1402的處理塊1410中,初始化偏移量索引的集合,例如初始化為值7、2、7、1和7。將再次領會,偏移量索引的數量和偏移量索引的值意圖是說明性的,并且不限制本發(fā)明的實施例。特別地,在寄存器中的偏移量索引的數量可以由特定應用和/或對應于索引的數據元素的大小來確定。偏移量索引的示例值僅意圖圖示相關性沖突的解決。在處理塊1415中,元素左掩碼被設置為全1(例如,五個1)。在處理塊1420中,相關性掩碼可以根據過程1405的技術(其將在以下關于圖18更詳細描述)來設置,以包括匹配的偏移量索引。然后在處理塊1425中,初始化次序掩碼的集合。在處理塊1430中,通過在相關性掩碼和次序掩碼之間執(zhí)行按位的和運算(and)來計算沖突掩碼。在處理塊1450中,根據偏移量索引和(可選地)全1的元素左掩碼從存儲器收集數據。接下來,在處理塊1460中,通過將元素左掩碼廣播到處理塊1480中的所有元素來初始化起沖突元素的集合。在處理塊1485中,對先前的沖突掩碼和新的起沖突元素使用向量包裝和運算(and)指令來重新計算沖突掩碼的集合。然后通過以下來在處理塊1490中計算新的元素左掩碼:使用包裝比較不相等指令pcmpneq,其將每個沖突元素與所有零相比較。在處理塊1462中,元素左掩碼被否定,以形成已完成這些(didthese)掩碼,并且在處理塊1466中根據偏移量索引將數據元素分散到存儲器。在處理塊1460中,做出元素左掩碼是否是零(0)的確定。如果是這樣,則對這個simd數據集合的處理在處理塊1499中結束。否則,處理重現迭代,開始于過程1402的處理塊1450。圖15a圖示了針對用以執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的處理器中的過程1501的一個實施例的流程圖。包裝元組可以各自包括兩個、四個或者八個元素。在一些實施例中,比較類型可以通過由指令指定的立即數操作數來指示(例如,指示為等于、小于、小于或等于、假、不等于、不小于、不小于或等于以及真中的一個)。在處理塊1510中,第一數據類型的元素被存儲在向量寄存器的多個n個數據字段中的每個中。在處理塊1520中,第一數據類型的元素被存儲在第二向量的n個數據字段的每個中,在處理塊1530中,用于向量包裝元組交叉比較的simd指令在處理器中被解碼。響應于用于向量包裝元組交叉比較的simd指令,處理在過程1503中以處理塊1540繼續(xù)進行。在處理塊1540中,向量寄存器中的下一元組被選擇用于處理。在處理塊1550中,將元組中的下一元素與第二寄存器的多個n個數據字段的對應元組的每個元素相比較。在處理塊1560中,根據對應比較,在與同時與被選擇用于處理的向量寄存器元組相比較的元素相對應的下一位掩碼中,設置與第二向量的每個元組元素相對應的掩碼位。在一些實施例中,與向量寄存器的元素相對應的所有位掩碼可以與向量寄存器中其對應元素的最低有效位相對齊地被存儲在目的地寄存器中。在一些替代實施例中,與向量寄存器的元素相對應的位掩碼可以代替地根據存儲在源/目的地寄存器的對應元素中的移位計數而重新對齊地被存儲在源/目的地寄存器中。在處理塊1570中,做出關于是否已經完成針對當前被選用于處理的元組的所有比較的確定。如果不是,則處理重新迭代,開始于處理塊155,直到已經完成當前被選擇用于處理的元組的每個數據字段為止。在一些實施例中,向量寄存器的數據字段可以是隱式未掩蔽的,要求其每一項被交叉比較。在一些替代實施例中,向量寄存器的數據字段可以是顯式掩蔽或未掩蔽的(例如,在由指令指定的掩碼寄存器中),要求僅未掩蔽的數據字段中的元素被交叉比較。此時,對于當前所選元組已經完成所有所需的比較,處理進行到處理塊1580,在那里做出關于是否已經完成向量寄存器的所有n個數據字段的處理的確定。如果不是,則處理重新迭代,開始于處理塊1540,在那里將向量寄存器中的另一元組選擇用于處理。否則,處理在處理塊1590中結束。將領會,如在本文所描述的實施例中的simd向量包裝元組交叉比較指令可以用于可變大小的元素和存儲器偏移量,以提供simd向量地址沖突檢測功能以及生成沖突掩碼以用于有效的simd地址沖突解決。還將領會,如本文所描述的實施例中,simd向量包裝元組交叉比較指令可以與simd向量前導零計數指令相結合地使用,以提供simd置換控制,以用于有效simd地址沖突解決,尤其是在沒有通過存儲器執(zhí)行相關性計算的情況下在準許寄存器中的地址沖突解決的收集-修改-分散應用中。圖15b圖示了針對用以使用simd向量地址沖突掩碼以用于有效向量地址沖突解決的過程1502的一個實施例的流程圖。在處理塊1505中,將第一寄存器或存儲器向量源的每個元素中的偏移量與向量源的每個較低有效元素中的偏移量相比較,以確定它們是否保持匹配的偏移量。在處理塊1515中,將對應于保持與對應于第一向量目的地中的掩碼的元素中的偏移量匹配的偏移量的第一向量源中的較低有效元素的掩碼位設置為1(例如,如在過程1801中所示那樣)。在處理塊1525中,目的地寄存器中的任何其他位被設置為第二值(例如,0)(例如,如過程1405中所示的)。在處理塊1535中,將存儲在第一目的地寄存器中的掩碼中的每一個的值與另一向量中的特定值(例如,0)的對應副本相比較,以便生成取決于較低有效元素的計算的元素的掩碼。在處理塊1545中,取決于對較低有效元素的不完整計算的元素掩碼被用來檢測準備好進行處理的元素,并且生成完成掩碼。在處理塊1555中,使用完成掩碼對數據執(zhí)行simd計算。然后在處理塊1565中,取決于對較低有效元素的不完整計算的元素掩碼被更新。在處理塊1575中,做出是否完成對所有元素的處理的確定,并且如果是這樣,則對這些元素的處理在處理塊1595中結束。否則,處理重新迭代,開始于處理塊1545。還將領會,雖然所圖示的過程1502沒有假設已處理的元素需要被存儲到存儲器,但是任何這樣的存儲或者分散到存儲器與過程1502的附加隨后迭代一起可以根據本發(fā)明的替代實施例來執(zhí)行。圖16圖示了用于執(zhí)行用以提供simd向量前導零計數功能的指令的裝置1601的現有技術實施例,所述simd向量前導零計數功能對于生成用于有效向量地址沖突解決的置換控制是有用的。裝置1601的實施例可以是流水線400的一部分(例如,執(zhí)行級416)或者核490的一部分(例如,(一個或者多個)執(zhí)行單元462),以用于執(zhí)行用以提供simd向量前導零計數功能的指令。裝置1601的實施例可以與解碼級(例如,解碼406)或者解碼器(例如,解碼單元440)耦合,以解碼用于simd向量前導零計數的指令,所述simd向量前導零計數可以準許有效向量地址沖突解決。一個或者多個執(zhí)行單元(例如,執(zhí)行裝置1601)響應于經解碼的指令來讀取存儲器向量操作數或者向量寄存器1610或1620中的數據字段中的每個數據字段的多個位,并且對于存儲器向量操作數或者向量寄存器1610或1620的每個數據字段而言,對被設置為零的最高有效連續(xù)位的數目進行計數,并且將該計數存儲為simd目的地寄存器1650或1660中的對應數據字段中的值。例如,裝置1601的實施例可以與向量寄存器(例如,(一個或者多個)物理寄存器文件單元458)耦合,所述向量寄存器包括可變的多個n個可變大小數據字段,以存儲可變的多個n個可變大小數據元素的值。用以提供simd向量前導零計數功能的指令的實施例指定了向量前導零計數操作和數據字段大小,以用于針對存儲器向量操作數或者向量寄存器(例如,1610或1620)執(zhí)行simd向量前導零計數,并且將計數存儲為simd目的地寄存器(例如,1650或1660)中的所指定的大小的對應數據字段中的值。例如,用于執(zhí)行用以提供simd向量前導零計數功能的指令的裝置1601的一個實施例讀取存儲器向量操作數或者向量寄存器1620中的第一大小(例如,16位或者32位)的數據字段中的每個數據字段的多個位,并且對前導零計數電路1603的前導零計數器1630-1637中的被設置為零的最高有效連續(xù)位的數目進行計數,然后將該計數存儲為simd目的地寄存器1660中的相同指定大小的對應數據字段中的值。用于執(zhí)行用以提供simd向量前導零計數的指令的裝置1601的另一個實施例讀取存儲器向量操作數或者向量寄存器1610中的第二大?。ɡ?,32位或者64位)的數據字段中的每個數據字段的多個位,并且在前導零計數組合電路1604的選擇性加法器電路1640到1643中,從奇數前導零計數器1631到1637中選擇被設置為0的最高有效連續(xù)位的計數,或者分別將值m加到來自偶數前導零計數器1630到1636的計數,并且將所組合的計數存儲為simd目的地寄存器1650中的指定大小的對應數據字段中的值。將領會,用于執(zhí)行用以提供simd向量前導零計數的指令的裝置1601的替代實施例可以能夠執(zhí)行第一數據字段大小的simd向量前導零計數和第二數據字段大小的simd向量前導零計數兩者,如在圖16中所示的,或者可以被修改成針對各種各樣的指定的數據字段大小而執(zhí)行simd向量前導零計數。如在本文所描述的實施例中,simd向量前導零計數指令可以與可變大小的元素和沖突掩碼一起使用,以提供simd置換控制,從而在沒有通過存儲器執(zhí)行相關性計算的情況下準許寄存器中的更有效的simd地址沖突解決。因此,本文公開的simd向量前導零計數指令和邏輯提供了有效simd地址沖突解決,尤其在某些收集-修改-分散應用中,例如,如關于圖14a所討論的。當例如索引的正被比較元素與被需要來表示比較結果的掩碼(例如,在256位寄存器中的16個16位元素)是相同大小時,則執(zhí)行用以對所有元素交叉比較的指令可能是適當的。但是當存在比可用于表示比較結果的位更多的要比較的元素時,可能需要替代解決方案。將領會的是,如本文公開的simd向量包裝元組比較指令可以用作用于可變大小元素和存儲器偏移的替代解決方案,以提供simd向量地址沖突檢測功能和被組合以生成用于有效simd地址沖突解決的沖突掩碼的結果。還將領會的是,simd向量包裝元組比較指令可以具有更多的通用可適用性(例如,當各種各樣的不同比較操作中的任何一項可能有用時),并且相比于用以對所有元素交叉比較的指令在區(qū)域和功率方面需要更低的實現成本。圖17a圖示了用以提供simd向量包裝雙交叉比較功能的示例指令1701的一個實施例。在一些實施例中,指令1701的編碼可以被記錄在一些機器可讀介質上,以記錄功能描述性材料,以用于由專用機器或者由通用處理機器執(zhí)行。在一些實施例中,指令1701的編碼可以指定第一向量寄存器1710,其包括第一多個數據字段(例如,n個數據字段),所述第一多個數據字段被劃分成第一部分,每個第一部分具有第二多個數據字段(例如,兩個數據字段),每個數據字段將是掩蔽的或者未掩蔽的。在一些實施例中,第一向量寄存器1710的數據字段可以是隱式未掩蔽的,從而需要比較它們中的每一個。在一些替代實施例中,第一向量寄存器1710的數據字段可以是顯式掩蔽或者未掩蔽的(例如,在由指令1701指定的掩碼寄存器中),從而僅需要比較未掩蔽數據字段中的元素。指令1701還可以指定第二向量寄存器1720或者存儲器存儲集合,其表示對應于第一多個數據字段的第三多個數據字段,所述第三多個數據字段被劃分成第二部分,每個第二部分也具有所述第二多個數據字段(例如,兩個數據字段)。在一些實施例中,包裝元素可以是有符號或者無符號包裝字節(jié)(8位)、字(16位)、雙字(32位)、或者四倍字(64位)。指令1701還可以指定對特定類型的比較(例如,大于或等于,≥)進行編碼的立即數字節(jié)操作數1731和包括被劃分成對應第一部分的對應第一多個數據字段(例如,n個數據字段)的目的地向量寄存器1771,每個對應第一部分具有第二多個數據字段(例如,兩個數據字段)。在一些實施例中,比較類型可以被立即數操作數1731指示為以下之一:等于、小于、小于或等于、總為假、不等于、不小于、不小于或等于、以及總為真。對于第一向量寄存器1710中的第一多個n個數據字段的第一部分(例如,2元組)的數據字段中存儲的每個元素而言,指令1701將該元素與表示第二向量寄存器1720或者存儲器存儲集合的所述第三多個n個數據字段的對應部分(例如,2元組)的每個元素相比較。在目的地向量寄存器1771中,指令1701根據對應比較,在與對應的第一寄存器1710部分的每個未掩蔽元素相對應的位掩碼中,設置與第二向量1720部分的每個元素相對應的掩碼位,并且將目的地寄存器中的任何其他位(例如,位掩碼中的更高有效位)設置為零值。在一些實施例中,與第一向量寄存器1710的元素相對應的所有位掩碼可以與第一向量寄存器1710中其對應元素的最低有效位相對齊地被存儲在目的地向量寄存器1771中。在一些替代實施例中,與第一向量寄存器1710的元素相對應的位掩碼可以代替地根據存儲在源/目的地向量寄存器1771的對應元素中的移位計數而重新對齊地存儲在源/目的地向量寄存器1771中。圖17b圖示了用以提供simd向量包裝四元組交叉比較功能的指令1702的替代實施例。在一些實施例中,指令1702的編碼也可以被記錄在一些機器可讀介質上,以記錄功能描述性材料,以用于由專用機器或者由通用處理機器執(zhí)行。在一些實施例中,指令1702的編碼可以指定第一向量寄存器1710,其包括第一多個數據字段(例如,n個數據字段),所述第一多個數據字段被劃分成第一部分,每個第一部分具有第二多個數據字段(例如,四個數據字段),每個數據字段是掩蔽的或者未掩蔽的。在一些實施例中,第一向量寄存器1710的數據字段可以是隱式未掩蔽的,從而需要比較它們中的每一個。在一些替代實施例中,第一向量寄存器1710的數據字段可以是顯式掩蔽或者未掩蔽的(例如,在由指令1702指定的掩碼寄存器中),從而僅需要比較未掩蔽數據字段中的元素。指令1702還可以指定第二向量寄存器1720或者存儲器存儲集合,其表示對應于第一多個數據字段的第三多個數據字段,所述第三多個數據字段被劃分成第二部分,每個第二部分也具有所述第二多個數據字段(例如,四個數據字段)。在一些實施例中,包裝元素可以是有符號或者無符號包裝字節(jié)(8位)、字(16位)、雙字(32位)、或者四倍字(64位)。指令1702還可以指定對特定類型的比較(例如,小于,<)進行編碼的立即數字節(jié)操作數1732和包括被劃分成對應第一部分的對應第一多個數據字段(例如,n個數據字段)的目的地向量寄存器1772,每個對應第一部分具有第二多個數據字段(例如,四個數據字段)。在一些實施例中,比較類型可以被立即數操作數1732指示為以下之一:等于、小于、小于或等于、總為假、不等于、不小于、不小于或等于、以及總為真。對于第一向量寄存器1710中的第一多個n個數據字段的第一部分(例如,4元組)的數據字段中存儲的每個元素而言,指令1702將該元素與表示第二向量寄存器1720或者存儲器存儲集合的所述第三多個n個數據字段的對應部分(例如,4元組)的每個元素相比較。在目的地向量寄存器1772中,指令1702根據對應比較,在與對應的第一寄存器1710部分的每個未掩蔽元素相對應的位掩碼中,設置與第二向量1720部分的每個元素相對應的掩碼位,并且將目的地寄存器中的任何其他位(例如,位掩碼中的更高有效位)設置為零值。在一些實施例中,與第一向量寄存器1710的元素相對應的所有位掩碼可以與第一向量寄存器1710中其對應元素的最低有效位相對齊地被存儲在目的地向量寄存器1772中。在一些替代實施例中,與第一向量寄存器1710的元素相對應的位掩碼可以代替地根據存儲在源/目的地向量寄存器1772的對應元素中的移位計數而重新對齊地存儲在源/目的地向量寄存器1772中。圖17c圖示了用以提供simd向量包裝八元組交叉比較功能的指令1703的替代實施例。在一些實施例中,指令1703的編碼也可以被記錄在一些機器可讀介質上,以記錄功能描述性材料,以用于由專用機器或者由通用處理機器執(zhí)行。在一些實施例中,指令1703的編碼可以指定第一向量寄存器1710,其包括第一多個數據字段(例如,n個數據字段),所述第一多個數據字段被劃分成第一部分,每個第一部分具有第二多個數據字段(例如,八個數據字段),每個數據字段是被掩蔽的或者未掩蔽的。在一些實施例中,第一向量寄存器1710的數據字段可以是隱式未掩蔽的,從而需要比較它們中的每一個。在一些替代實施例中,第一向量寄存器1710的數據字段可以是顯式掩蔽或者未掩蔽的(例如,在由指令1703指定的掩碼寄存器中),從而僅需要比較未掩蔽數據字段中的元素。指令1703還可以指定第二向量寄存器1720或者存儲器存儲集合,其表示與第一多個數據字段相對應的第三多個數據字段,所述第三多個數據字段被劃分成第二部分,每個第二部分也具有所述第二多個數據字段(例如,八個數據字段)。在一些實施例中,包裝元素可以是有符號或者無符號包裝字節(jié)(8位)、字(16位)、雙字(32位)、或者四倍字(64位)。指令1703還可以指定對特定類型的比較(例如,等于,=)進行編碼的立即數字節(jié)操作數1733和包括被劃分成對應第一部分的對應第一多個數據字段(例如,n個數據字段)的目的地向量寄存器1773,每個對應第一部分具有第二多個數據字段(例如,八個數據字段)。在一些實施例中,比較類型可以被立即數操作數1733指示為以下之一:等于、小于、小于或等于、總為假、不等于、不小于、不小于或等于、以及總為真。對于第一向量寄存器1710中的第一多個n個數據字段的第一部分(例如,8元組)的數據字段中存儲的每個元素而言,指令1703將該元素與表示第二向量寄存器1720或者存儲器存儲集合的所述第三多個n個數據字段的對應部分(例如,8元組)的每個元素相比較。在目的地向量寄存器1773中,指令1703根據對應比較,在與對應的第一寄存器1710部分的每個未掩蔽元素相對應的位掩碼中,設置與第二向量1720部分的每個元素相對應的掩碼位,并且將目的地寄存器中的任何其他位(例如,位掩碼中的更高有效位)設置為零值。在一些實施例中,與第一向量寄存器1710的元素相對應的所有位掩碼可以與在第一向量寄存器1710中其對應元素的最低有效位相對齊地被存儲在目的地向量寄存器1773。在一些替代實施例中,與第一向量寄存器1710的元素相對應的位掩碼可以代替地根據存儲在源/目的地向量寄存器1773的對應元素中的移位計數而重新對齊地存儲在源/目的地向量寄存器1773中。圖18圖示了將指令的結果進行組合以生成用于有效向量地址沖突解決的地址沖突掩碼的方法的實施例,所述指令用以提供simd向量包裝元組交叉比較功能。對于第一向量包裝二元組交叉比較1802而言,第一數據類型的元素被存儲在向量寄存器1810的n個數據字段中的每個數據字段中。第一數據類型的元素還被存儲在向量1820的n個數據字段的每個數據字段中,所述向量1820可以被存儲在向量寄存器中或者被存儲在表示向量1820的存儲器集合中。在處理器中,對用于向量包裝二元組交叉比較1802的simd指令進行解碼。響應于用于向量包裝二元組交叉比較1802的simd指令,對于向量寄存器1810中的n個數據字段的每個部分(例如,2元組)的數據字段中存儲的每個元素,指令1802將該元素與表示向量1820的n個字段的向量寄存器或者存儲器存儲集合的對應部分(例如,2元組)的每個元素相比較。在目的地向量寄存器1830中,指令1802根據所執(zhí)行的對應比較(例如,針對相等),在與對應的寄存器1810部分的每個未掩蔽元素相對應的位掩碼中,設置與向量1820部分的每個元素相對應的掩碼位,并且將目的地寄存器中的任何其他位(例如,位掩碼中的更高有效位)設置為零值。在一些實施例中,與向量寄存器1810的元素相對應的所有位掩碼可以與第一向量寄存器1810中其對應元素的最低有效位相對齊地被首先存儲在目的地向量寄存器1830中,并且然后包裝移位1812可以根據單獨的simd指令來執(zhí)行。在一些替代實施例中,與第一向量寄存器1810的元素相對應的位掩碼可以代替地根據存儲在源/目的地向量寄存器1830的對應元素中的移位計數而重新對齊地存儲在源/目的地向量寄存器1830中。對于第二向量包裝二元組交叉比較1803而言,第一數據類型的元素被存儲在向量寄存器1815的n個數據字段的每個數據字段中。第一數據類型的元素還被存儲在向量1825的n個數據字段的每個數據字段中,所述向量1825可以被存儲在向量寄存器中或者被存儲在表示向量1825的存儲器集合中。對用于向量包裝二元組交叉比較1803的第二simd指令進行解碼。響應于用于向量包裝二元組交叉比較1803的第二simd指令,對于向量寄存器1815中的n個數據字段的每個部分(例如,2元組)的數據字段中存儲的每個元素,指令1803將該元素與表示向量1825的n個字段的向量寄存器或者存儲器存儲集合的對應部分(例如,2元組)的每個元素相比較。在目的地向量寄存器1835中,指令1803根據所執(zhí)行的對應比較(例如,針對相等),在與對應的寄存器1815部分的每個未掩蔽元素相對應的位掩碼中,設置與向量1825部分的每個元素相對應的掩碼位,并且將目的地寄存器中的任何其他位(例如,位掩碼中的更高有效位)設置為零值。在一些實施例中,與向量寄存器1815的元素相對應的所有位掩碼可以與第一向量寄存器1815中其對應元素的最低有效位相對齊地被首先存儲在目的地向量寄存器1835中,并且然后包裝移位1813可以根據單獨的simd指令來執(zhí)行。在一些替代實施例中,與第一向量寄存器1815的元素相對應的位掩碼可以代替地根據存儲在源/目的地向量寄存器1835的對應元素中的移位計數而重新對齊地存儲在源/目的地向量寄存器1835中。然后可以根據置換向量1840和單獨的simd向量置換指令對向量寄存器1835的位掩碼元素執(zhí)行向量置換,以生成臨時結果向量寄存器1845。對于第三向量包裝二元組交叉比較1804而言,第一數據類型的元素被存儲在向量1850的n個數據字段的每個數據字段中,所述向量1850可以被存儲在向量寄存器中或者被存儲在表示向量1850的存儲器集合中。對用于向量包裝二元組交叉比較1804的第三simd指令進行解碼。響應于用于向量包裝二元組交叉比較1804的第三simd指令,對于向量寄存器1815中的n個數據字段的每個部分(例如,2元組)的數據字段中存儲的每個元素,指令1804將該元素與表示向量1850的n個字段的向量寄存器或者存儲器存儲集合的對應部分(例如,2元組)的每個元素相比較。在目的地向量寄存器1860中,指令1804根據所執(zhí)行的對應比較(例如,針對相等),在與對應的寄存器1815部分的每個未掩蔽元素相對應的位掩碼中,設置與向量1850部分的每個元素相對應的掩碼位,并且將目的地寄存器中的任何其他位(例如,位掩碼中的更高有效位)設置為零值。在一些實施例中,與向量寄存器1815的元素相對應的所有位掩碼可以與在向量寄存器1815中其對應元素的最低有效位相對齊地被首先存儲在目的地向量寄存器1860中,并且然后包裝移位1814可以根據單獨的simd指令來執(zhí)行。在一些替代實施例中,與第一向量寄存器1815的元素相對應的位掩碼可以代替地根據存儲在源/目的地向量寄存器1860的對應元素中的移位計數而重新對齊地存儲在源/目的地向量寄存器1860中。與向量寄存器1815的元素相對應的存儲在源/目的地向量寄存器1860中的位掩碼分別與存儲在臨時結果向量寄存器1845中的位掩碼相組合(例如,根據單獨的simd向量包裝加法指令),以生成第二臨時結果向量寄存器1870。與向量寄存器1815的元素相對應的存儲在源/目的地向量寄存器1835中的位掩碼分別與存儲在第二臨時結果向量寄存器1870中的位掩碼相組合(例如,根據另一單獨的simd向量包裝加法指令),以生成第三臨時結果向量寄存器1880。與向量寄存器1810的元素相對應的存儲在源/目的地向量寄存器1830中的位掩碼分別與存儲在第三臨時結果向量寄存器1880中的位掩碼相組合(例如,根據另一單獨的simd向量包裝加法指令),以生成結果向量寄存器1890,其具有與向量寄存器1810的元素相對應的地址沖突掩碼(例如,諸如1420)。將領會,如本文公開的simd向量包裝元組比較指令可以用作用于可變大小元素和存儲器偏移量的替代解決方案,以提供simd向量地址沖突檢測功能和被組合以生成用于有效simd地址沖突解決的沖突掩碼的結果。還將領會,simd向量包裝元組比較指令可以具有更多的通用可適用性(例如,當各種各樣不同比較操作中的任何一個可能有用時),并且相比用以對所有元素交叉比較的指令在區(qū)域和功率方面需要更低的實現成本。圖19a圖示了用于執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的裝置1901的實施例。裝置1901的實施例可以是用于執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的流水線400的一部分(例如,執(zhí)行級416)或者核490的一部分(例如,(一個或者多個)執(zhí)行單元462)。裝置1901的一些實施例包括包裝元組比較裝置1903,其包括控制邏輯1940和比較器陣列1942,并且可選地包括移位裝置1905,其包括移位器1950、1951、1952和1953等等。裝置1901的實施例可以與解碼級(例如,解碼406)或者解碼器(例如,解碼單元440)耦合,以對用于simd向量包裝元組交叉比較的指令進行解碼,該指令可以準許有效向量地址沖突解決。一個或者多個執(zhí)行單元(例如,執(zhí)行裝置1901)響應于經解碼的指令,對于向量寄存器1910中的n個數據字段的每個部分(例如,2元組)的數據字段中存儲的每個元素,將該元素與表示向量1920的n個數據字段的向量寄存器或者存儲器存儲集合的對應部分(例如,2元組)的每個元素相比較。裝置1901的實施例可以與包括用以存儲可變的多個n個可變大小數據元素的值的可變的多個n個可變大小數據字段的向量寄存器(例如,(一個或者多個)物理寄存器文件單元458)耦合。在目的地向量寄存器1970中,裝置1901根據所執(zhí)行的對應比較(例如,由立即數操作數1930指定的),在與對應寄存器1910部分的每個未掩蔽元素相對應的位掩碼中,設置與向量1920部分的每個元素相對應的掩碼位,并且將目的地寄存器中的任何其他位(例如,位掩碼中的更高有效位)設置為零值。在一些實施例中,與向量寄存器1910的元素相對應的所有位掩碼可以與向量寄存器1910中其對應元素的最低有效位相對齊地被存儲在目的地向量寄存器1970中。在一些替代實施例中,與第一向量寄存器1910的元素相對應的位掩碼可以可選地根據存儲在源/目的地向量寄存器1970的對應元素中的移位計數而(例如,通過移位裝置1905)重新對齊地存儲在源/目的地向量寄存器1970中。圖19b圖示了用于執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的裝置1902的替代實施例。裝置1902的實施例可以是用于執(zhí)行用以提供simd向量包裝元組交叉比較功能的指令的流水線400的一部分(例如,執(zhí)行級416)或者核490的一部分(例如,(一個或者多個)執(zhí)行單元462)。裝置1902的一些實施例包括包裝元組比較裝置1904,其包括控制邏輯1940和比較器陣列1944,并且可選地包括移位裝置1906,其包括移位器1960、1961、1962、1963等等。裝置1902的實施例可以與解碼級(例如,解碼406)或者解碼器(例如,解碼單元440)耦合,以對用于simd向量包裝元組交叉比較的指令進行解碼,該指令可以準許有效向量地址沖突解決。一個或者多個執(zhí)行單元(例如,執(zhí)行裝置1902)響應于經解碼的指令,對于向量寄存器1910中的n個數據字段的每個部分(例如,4元組)的數據字段中存儲的每個元素,將該元素與表示向量1920的n個數據字段的向量寄存器或者存儲器存儲集合的對應部分(例如,4元組)的每個元素相比較。裝置1902的實施例可以與包括用以存儲可變的多個n個可變大小數據元素的值的可變的多個n個可變大小數據字段的向量寄存器(例如,(一個或者多個)物理寄存器文件單元458)耦合。在目的地向量寄存器1970中,裝置1902根據所執(zhí)行的對應比較(例如,由立即數操作數1930指定的),在與對應寄存器1910部分的每個未掩蔽元素相對應的位掩碼中,設置與向量1920部分的每個元素相對應的掩碼位,并且將目的地寄存器中的任何其他位(例如,位掩碼中的更高有效位)設置為零值。在一些實施例中,與向量寄存器1910的元素相對應的所有位掩碼可以與向量寄存器1910中其對應元素的最低有效位相對齊地被存儲在目的地向量寄存器1970中。在一些替代實施例中,與第一向量寄存器1910的元素相對應的位掩碼可以可選地根據存儲在源/目的地向量寄存器1970的對應元素中的移位計數而(例如,通過移位裝置1906)重新對齊地存儲在源/目的地向量寄存器1970中。使用simd向量包裝元組比較指令準許了包括有符號或者無符號包裝字節(jié)(8位)、字(16位)、雙字(32位)和四倍字(64位)的可變的多個n個可變大小數據元素。將領會,simd向量包裝元組比較指令可以具有比向量沖突指令更多的通用可適用性(例如,當各種各樣不同比較操作中的任何一個可能有用時),并且相比用以對所有元素交叉比較的指令在區(qū)域和功率方面需要更低的實現成本。本文公開的機制的實施例可以以硬件、軟件、固件或者這樣的實現方法的組合來實現。本發(fā)明的實施例可以被實現為在可編程系統(tǒng)上執(zhí)行的計算機程序或者程序代碼,所述可編程系統(tǒng)包括至少一個處理器、存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設備和至少一個輸出設備。程序代碼可以被應用于用以執(zhí)行本文描述的功能的輸入指令并且生成輸出信息。所輸出的信息可以以已知方式被應用于一個或者多個輸出設備。出于這種應用的目的,處理系統(tǒng)包括具有處理器的任何系統(tǒng),處理器諸如例如是數字信號處理器(dsp)、微控制器、專用集成電路(asic)、或者微處理器。程序代碼可以以高級過程或面向對象的編程語言來實現,以與處理系統(tǒng)通信。如果期望的話,程序代碼也可以以匯編語言或者機器語言來實現。實際上,本文描述的機制在范圍上不限于任何特定編程語言。在任何情況下,語言可以是經編譯的閾值或者經解譯的語言。至少一個實施例的一個或者多個方面可以由存儲在表示處理器內的各種邏輯的機器可讀介質上的代表性指令來實現,所述指令當被機器讀取時促使該機器制造用于執(zhí)行本文描述的技術的邏輯。這樣的稱為“ip核”的表示可以被存儲在有形、機器可讀介質上,并且供應給各種消費者或者制造設施,以加載到實際制作邏輯或者處理器的制造機器中。這樣的機器可讀介質可以包括但是不限于由機器或者設備制造或者形成的制品的非瞬時性、有形布置,其包括存儲介質,諸如硬盤、任何其他類型的盤(包括軟盤、光盤、緊湊盤只讀存儲器(cd-rom)、緊湊可重寫盤(cd-rw)、和磁光盤)、半導體設備(諸如只讀存儲器(rom)、隨機存取存儲器(ram)(諸如動態(tài)隨機存取存儲器(dram)、靜態(tài)隨機存取存儲器(sram))、可擦除可編程只讀存儲器(eprom)、閃速存儲器、電可擦除可編程只讀存儲器(eeprom))、磁卡或者光學卡、或者適于存儲電子指令的任何其他類型的介質。因此,本發(fā)明的實施例還包括非瞬時性有形機器可讀介質,其包含指令或者包含設計數據,諸如定義了本文描述的結構、電路、裝置、處理器和/或系統(tǒng)特征的硬件描述語言(hdl)。這樣的實施例也可以被稱為程序產品。在一些情況下,指令轉換器可以用于將指令從源指令集轉換到目標指令集。例如,指令轉換器可以將指令轉譯(例如,使用靜態(tài)二進制轉譯、包括動態(tài)編譯的動態(tài)二進制轉譯)、變形、模擬或者以其他方式轉換成要由核來處理的一個或者多個其他指令。指令轉換器可以以軟件、硬件、固件或者其組合來實現。指令轉換器可以在處理器上、在處理器外或者部分在處理器上且部分在處理器外。因此,公開了用于執(zhí)行根據至少一個實施例的一個或者多個指令的技術。雖然已經在附圖中描述且示出了某些示例性實施例,但是要理解,這樣的實施例僅僅說明寬泛發(fā)明而并不對寬泛發(fā)明進行限制,并且本發(fā)明不限于所示出和描述的具體構造和布置,因為各種其他修改可以由本領域技術人員在研究本公開時想到。在諸如本文的
技術領域:
中,在發(fā)展很快并且進一步的進步不容易預見的情況下,所公開的實施例在不偏離本公開的原理或者隨附權利要求的范圍的情況下可以是通過使得能夠實現技術進步所促成的在布置和細節(jié)方面可容易修改的。當前第1頁12