在不同的粒度水平下對數據值進行廣播和掩碼的指令執行的制作方法
【專利摘要】描述了一種裝置,其包括用于執行第一指令和第二指令的執行單元。該執行單元包括輸入寄存器空間,該輸入寄存器空間用于存儲在執行第一指令時要復制的第一數據結構,且用于存儲在執行第二指令時要復制的第二數據結構。第一和第二數據結構均是打包數據結構。第一打包數據結構的數據值是第二打包數據結構的數據值的兩倍大。該執行單元還包括復制邏輯電路,用于在執行第一指令時復制第一數據結構以創建第一復制數據結構,并用于在執行第二數據指令時復制第二數據結構以創建第二復制數據結構。該執行單元還包括掩碼邏輯電路,用于在第一粒度下對第一復制數據結構進行掩碼操作,并在第二粒度下對第二復制數據結構進行掩碼操作。第二粒度是第一粒度的一半。
【專利說明】在不同的粒度水平下對數據值進行廣播和掩碼的指令執行
【技術領域】
[0001] 本發明一般屬于計算科學,更具體地涉及在不同的粒度水平下對數據值進行廣播 和掩碼的指令執行。
【背景技術】
[0002] 圖1示出了在半導體芯片上用邏輯電路實現的處理核100的高級圖。該處理核包 括流水線101。該流水線由各自被設計成在完全執行程序代碼指令所需的多步驟過程中執 行特定步驟的多個級組成。這些級通常至少包括:1)指令取出和解碼;2)數據取出;3)執 行;4)寫回。執行級對由在先前級(例如在上述步驟1))中所取出和解碼的指令所標識并 在另一先前級(例如在上述步驟2))中被取出的數據執行由在先前級(例如在上述步驟 1))中取出和解碼的指令所標識的特定操作。被操作的數據通常是從(通用)寄存器存儲 空間102中取出的。在該操作完成時所創建的新數據通常也被"寫回"寄存器存儲空間(例 如在上述級4))。
[0003] 與執行級相關聯的邏輯電路通常由多個"執行單元"或"功能單元" 103_1至103_ N構成,這些單元各自被設計成執行其自身的唯一操作子集(例如,第一功能單元執行整數 數學操作,第二功能單元執行浮點指令,第三功能單元執行從高速緩存/存儲器的加載操 作和/或到高速緩存/存儲器的存儲操作等等)。由所有這些功能單元執行的所有操作的 集合與處理核100所支持的"指令集"相對應。
[0004] 計算機科學領域中廣泛認可兩種類型的處理器架構:"標量"和"向量"。標量處理 器被設計成執行對單個數據集進行操作的指令,而向量處理器被設計成執行對多個數據集 進行操作的指令。圖2A和2B呈現了展示標量處理器與向量處理器之間的基本差異的比較 示例。
[0005] 圖2A示出標量AND (與)指令的示例,其中單個操作數集A和B -起進行"與"運 算以產生奇異(或"標量")結果C(S卩,AB = C)。相反,圖2B示出向量AND指令的示例,其 中兩個操作數集A/B和D/E并行地分別一起進行"與"運算以同時產生向量結果C和F(即, A. AND. B = C以及D. AND. E = F)。根據術語學,"向量"是具有多個"元素"的數據元素。例 如,向量V = Q,R,S,T,U具有五個不同的元素:Q、R、S、T和U。示例性向量V的"尺寸"是 5 (因為它具有5個元素)。
[0006] 圖1還示出向量寄存器空間104的存在,該向量寄存器空間104不同于通用寄存 器空間102。具體而言,通用寄存器空間102標準地用于存儲標量值。這樣,當各執行單元中 的任一個執行標量操作時,它們標準地使用從通用寄存器存儲空間102調用的操作數(并 將結果寫回通用寄存器存儲空間102)。相反,當各執行單元中的任一個執行向量操作時,它 們標準地使用從向量寄存器空間107調用的操作數(并將結果寫回向量寄存器空間107)。 可類似地分配存儲器的不同區域以存儲標量值和向量值。
[0007] 還應注意,存在位于功能單元103_1到103_N的相應輸入處的掩碼邏輯104_1到 104_N,以及位于功能單元103_1到103_N的相應輸出處的掩碼邏輯105_1到105_N。在各 種實現中,實際上僅實現這些層中的一個層一不過這并非嚴格要求。對于采用掩碼的任 何指令,輸入掩碼邏輯1〇4_1到104_N和/或輸出掩碼邏輯105_1到105_N可用于控制哪些 元素被該向量指令有效地操作。在此,從掩碼寄存器空間106讀取掩碼向量(例如與從向 量寄存器存儲空間107讀取的輸入數據向量一起),并將該掩碼向量呈現給掩碼邏輯104、 105層中的至少一層。
[0008] 在執行向量程序代碼的過程中,每一向量指令無需要求全數據字。例如,一些指令 的輸入向量可能僅僅是8個元素,其他指令的輸入向量可能是16個元素,其他指令的輸入 向量可能是32個元素,等等。因此,掩碼層104/105用于標識完整向量數據字中的應用于 特定指令的一組元素,以在多個指令之間實現不同的向量尺寸。通常,對于每一向量指令, 掩碼寄存器空間106中所保持的特定掩碼模式被該指令調出,從掩碼寄存器空間中被取出 并且被提供給掩碼層104/105中的任一者或兩者,以"啟用"針對該特定向量操作的正確元 素集合。
[0009] 圖3a至3d示出多個現有技術的VBR0ADCAST指令的邏輯操作。VBR0ADCAST指令 有效地將數據結構復制多次至結果中。圖3a至3d的每個現有技術VBR0ADCAST指令是在 具有256位的結果向量數據寬度的向量處理器架構上實現的。
[0010] 圖 3a 描繪"256 位"VBR0ADCASTSS 指令。如圖 3a 中觀察到,256 位 VBR0ADCASTSS 指令從存儲器301_A讀取32位單精度浮點數據值,并將其復制八次至256位目的地302_A 中。
[0011] 圖 3a 描繪" 128 位"VBR0ADCASTSS 指令。如圖 3b 中觀察到,128 位 VBR0ADCASTSS 指令從存儲器301_B讀取32位單精度浮點數據值,并將其復制四次至256位目的地302b 中。用零值寫入目的地中的余下四個32位元素。
[0012] 圖3c描繪VBR0ADCASTSD指令。如圖3c中觀察到,位VBR0ADCASTSD指令從存儲 器301_C讀取64位雙精度浮點數據值,并將其復制四次至256位目的地302_C中。
[0013] 圖3d描繪VBR0ADCASTF128指令。如圖3d中觀察到,VBR0ADCASTF128指令從存儲 器301_D中讀取128數據字,并將其重復兩次至256位目的地303d中。源操作數301_D可 以是具有兩個64位雙精度浮點元素(在圖3d中描繪)或四個32位單精度浮點元素(未 在圖3d中描繪)的打包數據結構。
【專利附圖】
【附圖說明】
[0014] 本發明是通過示例說明的,而不僅局限于各個附圖的圖示,在附圖中,類似的參考 標號表示類似的元件,其中:
[0015] 圖1示出指令執行流水線;
[0016] 圖2a和2b將標量處理與向量處理進行比較;
[0017] 圖3a至3d示出現有技術的VBR0ADCAST指令;
[0018] 圖4a至4g示出經改進的VBR0ADCAST指令;
[0019] 圖5a和5b涉及用于實現經改進的VBR0ADCAST指令的執行邏輯電路;
[0020] 圖6A-6B是示出根據本發明的實施例的通用向量友好指令格式及其指令模板的 框圖;
[0021] 圖7是示出根據本發明的實施例的示例性專用向量友好指令格式的框圖;
[0022] 圖8是根據本發明的一個實施例的寄存器架構的框圖;
[0023] 圖9A是示出根據本發明的實施例的示例性有序流水線以及示例性寄存器重命名 的無序發布/執行流水線兩者的框圖;
[0024] 圖9B是示出根據本發明的各實施例的要包括在處理器中的有序架構核的示例性 實施例和示例性的寄存器重命名的無序發布/執行架構核的框圖;
[0025] 圖10A-B示出了更具體的示例性有序核架構的框圖,該核將是芯片中的若干邏輯 塊之一(包括相同類型和/或不同類型的其他核);
[0026] 圖11是根據本發明的實施例的可具有超過一個的核、可具有集成的存儲器控制 器、并且可具有集成圖形的處理器的框圖;
[0027] 圖12是根據本發明一個實施例的系統的框圖;
[0028] 圖13是根據本發明的實施例的第一更具體的示例性系統的框圖;
[0029] 圖14是根據本發明的實施例的第二更具體的示例性系統的框圖;
[0030] 圖15是根據本發明的實施例的SoC的框圖;以及
[0031] 圖16是根據本發明的實施例的對比使用軟件指令變換器將源指令集中的二進制 指令變換成目標指令集中的二進制指令的框圖。
【具體實施方式】
[0032] 概覽
[0033] 圖4a至4f涉及新的高級VBR0ADCAST指令集。新的高級VBR0ADCAST指令集的特 征在于寫掩碼層,該寫掩碼層允許在被復制的數據結構內在數據元素的粒度下進行掩碼操 作。例如,如果被復制的數據結構是包含兩個32位單精度值的64位結構,則該寫掩碼將支 持32位粒度下的掩碼操作。此外,以上在圖3a至3d中討論的現有技術的VBR0ADCAST指 令創建256位結果,然而相比之下,圖4a至4f的經改進的VBR0ADCAST指令產生512位結 果。如將在以下討論中變得明顯,與圖3a至3d的現有技術VBR0ADCAST指令相比,向512 位結果的擴展允許顯著更復雜的復制模式。
[0034] 圖4a示出利用掩碼操作的VBR0ADCASTSS指令。如圖4a中觀察到,VBR0ADCASTSS 指令將32位輸入數據結構401_A復制十六次,以創建復制數據結構402_A。掩碼層403_A 應用掩碼模式以在32位粒度下對復制數據結構402_A進行掩碼操作,以創建結果數據結構 404_A。應理解,該結果數據結構最終被寫入向量寄存器空間中的目的地寄存器。在該指令 的字段中指定該目的地寄存器的地址。
[0035] 在實施例中,輸入數據結構是從存儲器中讀取的或從向量源操作數中提取(例如 向量源操作數中的最右邊的元素)的32位單精度浮點值,該向量源操作數是從諸如圖1的 寄存器空間107之類的向量寄存器空間取出的。在任一情況下,指令格式包括標識要復制 的數據結構在何處的字段。
[0036] 在圖4a的掩碼模式中觀察到的1和0的特定模式僅僅是示例性的。本領域普通 技術人員將理解,可利用與掩碼的尺寸一致的1和〇的任何模式。在實施例中,可將該掩碼 模式嵌入在指令自身中(例如類似于立即操作數)。替代地,可從諸如圖1的寄存器空間 106之類的掩碼模式寄存器空間取出該掩碼模式。在前一種情況,該指令格式包括包含實際 掩碼模式的字段,而在后一種情況下,該指令格式包括標識從何處取出掩碼模式的字段。
[0037] 在向量友好指令格式的實現中(其實施例在下文更詳細地描述),指令格式支持 這兩種掩碼模式技術。在此情況下,指令格式包括標識將對該指令采取哪種辦法的附加字 段(例如,1 =掩碼模式類似于嵌入在指令中的立即操作數,0 =將從掩碼寄存器空間取出 掩碼模式)。
[0038] 分開地或組合地,所應用的掩碼操作類型可以是"合并"或"歸零"。在合并掩碼操 作的情況下,結果數據結構的"被掩碼"字段(諸如字段405)不被覆寫。確切而言,目的地 寄存器中該位置處的原始值被保留。相反,在歸零掩碼的情況,結果數據結構的"被掩碼"字 段用〇值來覆寫目的地寄存器中的該位置。在各種實施例中(諸如與剛才引述的向量友好 指令格式相關聯的實施例中),在指令格式的另一字段中指定應用合并掩碼操作還是歸零 掩碼操作。
[0039] 以上關于掩碼操作的評述也適用于以下與圖4b至4f相關聯的指令的討論。出于 方便起見,以下不再贅述。
[0040] 圖4b示出利用掩碼操作的VBR0ADCASTSD指令。如圖4b中觀察到,VBR0ADCASTSD 指令將64位輸入數據結構401_B復制八次,以創建復制數據結構402_B。掩碼層403_B應 用掩碼模式以在64位粒度下對復制數據結構402_B進行掩碼操作,以創建結果數據結構 404_B。應理解,該結果數據結構最終被寫入向量寄存器空間中的目的地寄存器。在該指令 的字段中指定該目的地寄存器的地址。
[0041] 在實施例中,輸入數據結構是從存儲器中讀取的或從向量源操作數中提取(例如 向量源操作數中的最右邊的元素)的64位單精度浮點值,該向量源操作數是從諸如圖1的 寄存器空間107之類的向量寄存器空間取出的。在任一情況下,指令格式包括標識要復制 的數據結構在何處的字段。
[0042] 圖4c示出利用掩碼操作的VBR0ADCAST32X2指令。如圖4c中觀察到, VBR0ADCAST32X2指令將64位輸入數據結構401_C復制八次,以創建復制數據結構402_C。 然而,被復制的64位輸入數據結構401_C是一對打包的32位單精度浮點值。因此,掩碼層 403_(:在32位粒度下應用掩碼模式以創建結果數據結構404_C。應理解,該結果數據結構 最終被寫入向量寄存器空間中的目的地寄存器。在該指令的字段中指定該目的地寄存器的 地址。
[0043] 在實施例中,輸入數據結構是從存儲器中讀取的或從向量源操作數中提取(例如 向量源操作數中的最右邊的元素)的,該向量源操作數是從諸如圖1的寄存器空間107之 類的向量寄存器空間取出的。在任一情況下,指令格式包括標識要復制的數據結構在何處 的字段。
[0044] 圖4d示出利用掩碼操作的VBR0ADCAST32X4指令。如圖4d中觀察到, VBR0ADCAST32X4指令將128位輸入數據結構401_D復制四次,以創建復制數據結構402_D。 然而,被復制的128位輸入數據結構401_0是打包的32位單精度浮點值的四字(四個一 組)。因此,掩碼層403_0在32位粒度下應用掩碼模式以創建結果數據結構404_D。應理 解,該結果數據結構最終被寫入向量寄存器空間中的目的地寄存器。在該指令的字段中指 定該目的地寄存器的地址。
[0045] 在實施例中,輸入數據結構是從存儲器中讀取的或從向量源操作數中提取(例如 向量源操作數中的最右邊的元素)的,該向量源操作數是從諸如圖1的寄存器空間107之 類的向量寄存器空間取出的。在任一情況下,指令格式包括標識要復制的數據結構在何處 的字段。
[0046] 圖4e示出利用掩碼操作的VBR0ADCAST32X8指令。如圖4e中觀察到, VBR0ADCAST32X8指令將256位輸入數據結構401_E復制四次,以創建復制數據結構402_E。 然而,被復制的256位輸入數據結構401_E是打包的32位單精度浮點值的八字("八個一 組")。因此,掩碼層403_E在32位粒度下應用掩碼模式以創建結果數據結構404_E。應理 解,該結果數據結構最終被寫入向量寄存器空間中的目的地寄存器。在該指令的字段中指 定該目的地寄存器的地址。
[0047] 在實施例中,輸入數據結構是從存儲器中讀取的或從向量源操作數中提取(例如 向量源操作數中的最右邊的元素)的,該向量源操作數是從諸如圖1的寄存器空間107之 類的向量寄存器空間取出的。在任一情況下,指令格式包括標識要復制的數據結構在何處 的字段。
[0048] 圖4f示出利用掩碼操作的VBR0ADCAST64X2指令。如圖4f中觀察到, VBR0ADCAST64X2指令將128位輸入數據結構401_F復制四次,以創建復制數據結構402_F。 然而,被復制的128位輸入數據結構401_F是一對打包的64位雙精度浮點值。因此,掩碼 層403_F在64位粒度下應用掩碼模式以創建結果數據結構404_F。應理解,該結果數據結 構最終被寫入向量寄存器空間中的目的地寄存器。在該指令的字段中指定該目的地寄存器 的地址。
[0049] 在實施例中,輸入數據結構是從存儲器中讀取的或從向量源操作數中提取(例如 向量源操作數中的最右邊的元素)的,該向量源操作數是從諸如圖1的寄存器空間107之 類的向量寄存器空間取出的。在任一情況下,指令格式包括標識要復制的數據結構在何處 的字段。
[0050] 圖4g示出利用掩碼操作的VBR0ADCAST64X4指令。如圖4g中觀察到, VBR0ADCAST64X4指令將256位輸入數據結構401_G復制兩次,以創建復制數據結構402_G。 然而,被復制的256位輸入數據結構401_G是打包的64位雙精度浮點值的四字。因此,掩 碼層403_G在64位粒度下應用掩碼模式以創建結果數據結構404_G。應理解,該結果數據 結構最終被寫入向量寄存器空間中的目的地寄存器。在該指令的字段中指定該目的地寄存 器的地址。
[0051] 在實施例中,輸入數據結構是從存儲器中讀取的或從向量源操作數中提取(例如 向量源操作數中的最右邊的元素)的,該向量源操作數是從諸如圖1的寄存器空間107之 類的向量寄存器空間取出的。在任一情況下,指令格式包括標識要復制的數據結構在何處 的字段。
[0052] 在以上對 VBR0ADCAST32X4、VBR0ADCAST32X8、VBR0ADCAST64X2 以及 VBR0ADCAST64X4指令的討論中,描述了要復制的數據結構僅能從存儲器來獲得。然而,可理 解,可將這些指令擴展以接受來自存儲器或向量寄存器空間的要復制的數據結構。因此,根 據實現,可將支持這些指令的流水線的數據取出級耦合至存儲器或存儲器和寄存器空間。
[0053] 此外,對利用掩碼操作的VBR0ADCASTSS、利用掩碼操作的VBR0ADCASTSD、 VBR0ADCAST32X2、VBR0ADCAST32X4、VBR0ADCAST32X8、VBR0ADCAST64X2 以及 VBR0ADCAST64X4 指令中的每一個的討論已被描述為僅支持浮點數據值。可理解,可將這些指令擴展至處理 整數以及浮點數據值。此處,圖1的寄存器空間102可包括專用于存儲浮點值的第一部分和 專用于存儲浮點值的另一部分。在不擴展至整數值的情況下,就處理這些指令的方式而言, 流水線的數據取出和寫回級被耦合至浮點寄存器空間且不耦合至整數寄存器空間。相反, 如果這些指令被設計成支持兩種數據類型,則數據取出和寫回級可被耦合至任一者(取決 于對指令的解碼)。
[0054] 圖5a示出可實現以上在圖4a至4f中討論的指令的任何組合(包括全部指令) 的執行的邏輯設計。參照圖5a,第一寄存器501保持要復制的數據結構。值得注意的是,第 一寄存器501的尺寸應當大到足以保持其期望能夠復制的最大數據結構。此外,第一寄存 器501也可位于流水線中的數據取出級的后端。出于本申請的目的,這樣的寄存器可被視 為執行單元的部分。第一寄存器501耦合至復制邏輯電路502,該復制邏輯電路復制第一寄 存器中的內容以在其輸出503處產生與被執行的指令一致的復制數據結構。對于微編碼的 那些實現,復制邏輯電路502的術語"邏輯電路"或類似術語將包括微代碼和響應于微代碼 而動作的邏輯。
[0055] 復制邏輯電路的輸出503耦合至掩碼邏輯504,該掩碼邏輯接收來自寄存器505的 掩碼模式以將掩碼應用于復制數據結構,以在寄存器506中創建結果數據結構。取決于實 現,寄存器506可對應于向量寄存器空間107中的寄存器,或寄存器506可以是執行單元內 部的寄存器,該寄存器被目的地寄存器的內容填充(例如在數據取出階段期間),然后在掩 碼邏輯已經將結果寫入該寄存器中之后該寄存器被寫回至同一目的地寄存器。
[0056] 在進一步實施例中,執行單元邏輯電路被設計成不僅支持圖4a至4g的任何/所 有指令,而且還支持圖3a至3d的任何/所有現有技術指令。在此情形中,因為圖3a至3d 的現有技術指令不支持掩碼操作,因此存在當這些指令被執行時繞過掩碼邏輯504的旁路 路徑507。
[0057] 盡管對以上指令的描述包括關于數據值、要復制的數據結構的具體位寬以及結果 的尺寸,但是本領域普通技術人員將認識到,本文描述的概念可擴展到不同的相應寬度。
[0058] 圖5b示出可由圖5a的邏輯電路執行的方法。將要復制的數據結構放置在第一寄 存器中510,并且如果掩碼操作適用511,則將掩碼模式放置在第二寄存器中512。然后與被 執行的指令一致地復制該數據結構以創建復制數據結構513。如果掩碼操作適用514,則將 該掩碼模式應用于復制數據結構以創建結果515。如果掩碼操作不適用,則結果就是該復制 數據結構516。
[0059] 示例性指令格式
[0060] 本文中所描述的指令的實施例可以不同的格式體現。另外,在下文中詳述示例性 系統、架構、以及流水線。指令的實施例可在這些系統、架構、以及流水線上執行,但是不限 于詳述的系統、架構、以及流水線。
[0061] 通用向量友好指令格式
[0062] 向量友好指令格式是適于向量指令(例如,存在專用于向量操作的特定字段)的 指令格式。盡管描述了其中通過向量友好指令格式支持向量和標量運算兩者的實施例,但 是替代實施例僅使用通過向量友好指令格式的向量運算。
[0063] 圖6A-6B是示出根據本發明的實施例的通用向量友好指令格式及其指令模板的 框圖。圖6A是示出根據本發明的實施例的通用向量友好指令格式及其A類指令模板的框 圖;而圖6B是示出根據本發明的實施例的通用向量友好指令格式及其B類指令模板的框 圖。具體地,針對通用向量友好指令格式600定義A類和B類指令模板,兩者包括無存儲器 訪問605的指令模板和存儲器訪問620的指令模板。在向量友好指令格式的上下文中的術 語"通用"指不束縛于任何專用指令集的指令格式。
[0064] 盡管將描述其中向量友好指令格式支持以下情況的本發明的實施例,即64字節 向量操作數長度(或尺寸)與32位(4字節)或64位(8字節)數據元素寬度(或尺寸) (并且由此,64字節向量由16雙字尺寸的元素或者替代地8四字尺寸的元素組成)、64字節 向量操作數長度(或尺寸)與16位(2字節)或8位(1字節)數據元素寬度(或尺寸)、 32字節向量操作數長度(或尺寸)與32位(4字節)、64位(8字節)、16位(2字節)、或 8位(1字節)數據元素寬度(或尺寸)、以及16字節向量操作數長度(或尺寸)與32位 (4字節)、64位(8字節)、16位(2字節)、或8位(1字節)數據元素寬度(或尺寸),但是 替代實施例可支持更大、更小、和/或不同的向量操作數尺寸(例如,256字節向量操作數) 與更大、更小或不同的數據元素寬度(例如,128位(16字節)數據元素寬度)。
[0065] 圖6A中的A類指令模板包括:1)在無存儲器訪問605的指令模板內,示出無存儲 器訪問的完全舍入控制型操作610的指令模板、以及無存儲器訪問的數據變換型操作615 的指令模板;以及2)在存儲器訪問620的指令模板內,示出存儲器訪問的時效性625的指 令模板和存儲器訪問的非時效性630的指令模板。圖6B中的B類指令模板包括:1)在無存 儲器訪問605的指令模板內,示出無存儲器訪問的寫掩碼控制的部分舍入控制型操作612 的指令模板以及無存儲器訪問的寫掩碼控制的vsize型操作617的指令模板;以及2)在存 儲器訪問620的指令模板內,示出存儲器訪問的寫掩碼控制627的指令模板。
[0066] 通用向量友好指令格式600包括以下列出的按照在圖6A-6B中示出的順序的如下 字段。結合以上的討論,在實施例中,參考下文在圖6A-B和7中提供的格式細節,可利用非 存儲器訪問指令類型605或存儲器訪問指令類型620。可在以下描述的寄存器地址字段644 中標識讀取掩碼、輸入向量操作數和目的地的地址。在其他實施例中,在EVEX. kkk字段中 編碼讀掩碼和寫掩碼。
[0067] 格式字段640 -該字段中的特定值(指令格式標識符值)唯一地標識向量友好指 令格式,并且由此標識指令在指令流中以向量友好指令格式出現。由此,該字段對于僅具有 通用向量友好指令格式的指令集是不需要的,在這個意義上該字段是任選的。
[0068] 基礎操作字段642 -其內容區分不同的基礎操作。
[0069] 寄存器索引字段644-其內容直接或者通過地址生成來指定源或目的地操作數在 寄存器中或者在存儲器中的位置。這些字段包括足夠數量的位以從PxQ(例如,32x512、 16xl28、32xl024、64xl024)個寄存器組選擇N個寄存器。盡管在一個實施例中N可高達三個 源和一個目的地寄存器,但是替代實施例可支持更多或更少的源和目的地寄存器(例如, 可支持高達兩個源,其中這些源中的一個源還用作目的地,可支持高達三個源,其中這些源 中的一個源還用作目的地,可支持高達兩個源和一個目的地)。
[0070] 修飾符(modifier)字段646 -其內容將指定存儲器訪問的以通用向量指令格式出 現的指令與不指定存儲器訪問的以通用向量指令格式出現的指令區分開;即在無存儲器訪 問605的指令模板與存儲器訪問620的指令模板之間進行區分。存儲器訪問操作讀取和/ 或寫入到存儲器層次(在一些情況下,使用寄存器中的值來指定源和/或目的地地址),而 非存儲器訪問操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個實施例中,該字 段還在三種不同的方式之間選擇以執行存儲器地址計算,但是替代實施例可支持更多、更 少或不同的方式來執行存儲器地址計算。
[0071] 擴充操作字段650 -其內容區分除基礎操作以外還要執行各種不同操作中的哪 一個操作。該字段是針對上下文的。在本發明的一個實施例中,該字段被分成類字段668、 α字段652、以及β字段654。擴充操作字段650允許在單一指令而非2、3或4個指令中 執行多組共同的操作。
[0072] 比例字段660 -其內容允許用于存儲器地址生成(例如,用于使用2ttw*索引+ 基址的地址生成)的索引字段的內容的按比例縮放。
[0073] 位移字段662A -其內容用作存儲器地址生成的一部分(例如,用于使用2 索 引+基址+位移的地址生成)。
[0074] 位移因數字段662B (注意,位移字段662A直接在位移因數字段662B上的并置指 示使用一個或另一個)一其內容用作地址生成的一部分,它指定通過存儲器訪問的尺寸 (N)按比例縮放的位移因數,其中N是存儲器訪問中的字節數量(例如,用于使用2?*索 弓丨+基址+按比例縮放的位移的地址生成)。忽略冗余的低階位,并且因此將位移因數字段 的內容乘以存儲器操作數總尺寸(N)以生成在計算有效地址中使用的最終位移。N的值由 處理器硬件在運行時基于完整操作碼字段674 (稍后在本文中描述)和數據操縱字段654C 確定。位移字段662A和位移因數字段662B可以不用于無存儲器訪問605的指令模板和/ 或不同的實施例可實現兩者中的僅一個或不實現兩者中的任一個,在這個意義上位移字段 662A和位移因數字段662B是任選的。
[0075] 數據元素寬度字段664 -其內容區分使用多個數據元素寬度中的哪一個(在一些 實施例中用于所有指令,在其他實施例中只用于一些指令)。如果支持僅一個數據元素寬度 和/或使用操作碼的某一方面來支持數據元素寬度,則該字段是不需要的,在這個意義上 該字段是任選的。
[0076] 寫掩碼字段670 -其內容在每一數據元素位置的基礎上控制目的地向量操作數 中的數據元素位置是否反映基礎操作和擴充操作的結果。A類指令模板支持合并-寫掩碼 操作,而B類指令模板支持合并寫掩碼操作和歸零寫掩碼操作兩者。當合并時,向量掩碼允 許在執行任何操作期間保護目的地中的任何元素集免于更新(由基礎操作和擴充操作指 定);在另一實施例中,保持其中對應掩碼位具有〇的目的地的每一元素的舊值。相反,當 歸零時,向量掩碼允許在執行任何操作期間使目的地中的任何元素集歸零(由基礎操作和 擴充操作指定);在一個實施例中,目的地的元素在對應掩碼位具有〇值時被設為〇。該功 能的子集是控制執行的操作的向量長度的能力(即,從第一個到最后一個要修改的元素的 跨度),然而,被修改的元素不一定要是連續的。由此,寫掩碼字段670允許部分向量操作, 這包括加載、存儲、算術、邏輯等。盡管描述了其中寫掩碼字段670的內容選擇了多個寫掩 碼寄存器中的包含要使用的寫掩碼的一個寫掩碼寄存器(并且由此寫掩碼字段670的內容 間接地標識了要執行的掩碼操作)的本發明的實施例,但是替代實施例相反或另外允許掩 碼寫字段670的內容直接地指定要執行的掩碼操作。
[0077] 立即數字段672 -其內容允許對立即數的指定。該字段在實現不支持立即數的通 用向量友好格式中不存在且在不使用立即數的指令中不存在,在這個意義上該字段是任選 的。
[0078] 類字段668 -其內容在不同類的指令之間進行區分。參考圖6A-B,該字段的內容 在A類和B類指令之間進行選擇。在圖6A-B中,圓角方形用于指示專用值存在于字段中 (例如,在圖6A-B中分別用于類字段668的A類668A和B類668B)。
[0079] A類指令模板
[0080] 在A類非存儲器訪問605的指令模板的情況下,α字段652被解釋為其內容區分 要執行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的舍入型操作610和無存 儲器訪問的數據變換型操作615的指令模板分別指定舍入652Α. 1和數據變換652Α. 2)的 RS字段652Α,而β字段654區分要執行指定類型的操作中的哪一種。在無存儲器訪問605 指令模板中,比例字段660、位移字段662Α以及位移比例字段662Β不存在。
[0081] 無存儲器訪問的指令模板一完全舍入控制型操作
[0082] 在無存儲器訪問的完全舍入控制型操作610的指令模板中,β字段654被解釋為 其內容提供靜態舍入的舍入控制字段654Α。盡管在本發明的所述實施例中舍入控制字段 654Α包括抑制所有浮點異常(SAE)字段656和舍入操作控制字段658,但是替代實施例可 支持、可將這些概念兩者都編碼成相同的字段或者僅具有這些概念/字段中的一個或另一 個(例如,可僅有舍入操作控制字段658)。
[0083] SAE字段656 -其內容區分是否停用異常事件報告;當SAE字段656的內容指示 啟用抑制時,給定指令不報告任何種類的浮點異常標志且不喚起任何浮點異常處理程序。
[0084] 舍入操作控制字段658 -其內容區分執行一組舍入操作中的哪一個(例如,向上 舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段658允許在每一指令 的基礎上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發明的一 個實施例中,舍入操作控制字段650的內容優先于該寄存器值。
[0085] 無存儲器訪問的指令模板一數據變換型操作
[0086] 在無存儲器訪問的數據變換型操作615的指令模板中,β字段654被解釋為數據 變換字段654Β,其內容區分要執行多個數據變換中的哪一個(例如,無數據變換、混合、廣 播)。
[0087] 在Α類存儲器訪問620的指令模板的情況下,α字段652被解釋為驅逐提示字段 652Β,其內容區分要使用驅逐提示中的哪一個(在圖6Α中,對于存儲器訪問時效性625的 指令模板和存儲器訪問非時效性630的指令模板分別指定時效性的652Β. 1和非時效性的 652Β. 2),而β字段654被解釋為數據操縱字段654C,其內容區分要執行多個數據操縱操作 (也稱為基元(primitive))中的哪一個(例如,無操縱、廣播、源的向上轉換、以及目的地的 向下轉換)。存儲器訪問620的指令模板包括比例字段660、以及任選的位移字段662A或 位移比例字段662B。
[0088] 向量存儲器指令使用轉換支持來執行來自存儲器的向量加載并將向量存儲到存 儲器。如同尋常的向量指令,向量存儲器指令以數據元素式的方式與存儲器來回傳輸數據, 其中實際傳輸的元素由選為寫掩碼的向量掩碼的內容規定。
[0089] 存儲器訪問的指令模板一時效性的
[0090] 時效性的數據是可能足夠快地重新使用以從高速緩存受益的數據。然而,這是提 示,且不同的處理器可以不同的方式實現它,包括完全忽略該提示。
[0091 ] 存儲器訪問的指令模板一非時效性的
[0092] 非時效性的數據是不可能足夠快地重新使用以從第一級高速緩存中的高速緩存 受益且應當被給予驅逐優先級的數據。然而,這是提示,且不同的處理器可以不同的方式實 現它,包括完全忽略該提示。
[0093] B類指令模板
[0094] 在B類指令模板的情況下,α字段652被解釋為寫掩碼控制(Z)字段652C,其內 容區分由寫掩碼字段670控制的寫掩碼操作應當是合并還是歸零。
[0095] 在Β類非存儲器訪問605的指令模板的情況下,β字段654的一部分被解釋為RL 字段657Α,其內容區分要執行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的 寫掩碼控制部分舍入控制類型操作612的指令模板和無存儲器訪問的寫掩碼控制VSIZE型 操作617的指令模板分別指定舍入657Α. 1和向量長度(VSIZE) 657Α. 2),而β字段654的 其余部分區分要執行指定類型的操作中的哪一種。在無存儲器訪問605指令模板中,比例 字段660、位移字段662Α以及位移比例字段662Β不存在。
[0096] 在無存儲器訪問的寫掩碼控制的部分舍入控制型操作610的指令模板中,β字段 654的其余部分被解釋為舍入操作字段659Α,并且停用異常事件報告(給定指令不報告任 何種類的浮點異常標志且不喚起任何浮點異常處理程序)。
[0097] 舍入操作控制字段659Α -正如舍入操作控制字段658,其內容區分執行一組舍入 操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控 制字段659Α允許在每一指令的基礎上改變舍入模式。在其中處理器包括用于指定舍入模 式的控制寄存器的本發明的一個實施例中,舍入操作控制字段650的內容優先于該寄存器 值。
[0098] 在無存儲器訪問的寫掩碼控制VSIZE型操作617的指令模板中,β字段654的其 余部分被解釋為向量長度字段659Β,其內容區分要執行多個數據向量長度中的哪一個(例 如,128字節、256字節、或512字節)。
[0099] 在Β類存儲器訪問620的指令模板的情況下,β字段654的一部分被解釋為廣播 字段657Β,其內容區分是否要執行廣播型數據操縱操作,而β字段654的其余部分被解釋 為向量長度字段659Β。存儲器訪問620的指令模板包括比例字段660、以及任選的位移字 段662Α或位移比例字段662Β。
[0100] 針對通用向量友好指令格式600,示出完整操作碼字段674包括格式字段640、基 礎操作字段642以及數據元素寬度字段664。盡管示出了其中完整操作碼字段674包括所 有這些字段的一個實施例,但是在不支持所有這些字段的實施例中,完整操作碼字段674 包括少于所有的這些字段。完整操作碼字段674提供操作碼(opcode)。
[0101] 擴充操作字段650、數據元素寬度字段664以及寫掩碼字段670允許在每一指令的 基礎上以通用向量友好指令格式指定這些特征。
[0102] 寫掩碼字段和數據元素寬度字段的組合創建各種類型的指令,因為這些指令允許 基于不同的數據元素寬度應用該掩碼。
[0103] 在A類和B類內出現的各種指令模板在不同的情形下是有益的。在本發明的一些 實施例中,不同處理器或者處理器內的不同核可支持僅A類、僅B類、或者可支持兩類。舉 例而言,旨在用于通用計算的高性能通用無序核可僅支持B類,旨在主要用于圖形和/或科 學(吞吐量)計算的核可僅支持A類,并且旨在用于兩者的核可支持兩者(當然,具有來自 兩類的模板和指令的一些混合、但是并非來自兩類的所有模板和指令的核在本發明的范圍 內)。同樣,單一處理器可包括多個核,所有核支持相同的類或者其中不同的核支持不同的 類。舉例而言,在具有單獨的圖形和通用核的處理器中,圖形核中的旨在主要用于圖形和/ 或科學計算的一個核可僅支持A類,而通用核中的一個或多個可以是具有旨在用于通用計 算的僅支持B類的無序執行和寄存器重命名的高性能通用核。不具有單獨的圖形核的另一 處理器可包括既支持A類又支持B類的一個或多個通用有序或無序核。當然,在本發明的不 同實施例中,來自一類的特征也可在其他類中實現。可使以高級語言撰寫的程序成為(例 如,及時編譯或者統計編譯)各種不同的可執行形式,包括:1)僅具有用于執行的目標處理 器支持的類的指令的形式;或者2)具有使用所有類的指令的不同組合而編寫的替代例程 且具有選擇這些例程以基于由當前正在執行代碼的處理器支持的指令而執行的控制流代 碼的形式。
[0104] 示例性專用向量友好指令格式
[0105] 圖7是示出根據本發明的實施例的示例性專用向量友好指令格式的框圖。圖7示 出專用向量友好指令格式700,其指定位置、尺寸、解釋和字段的次序、以及那些字段中的一 些字段的值,在這個意義上向量友好指令格式700是專用的。專用向量友好指令格式700可 用于擴展x86指令集,并且由此一些字段類似于在現有x86指令集及其擴展(例如,AVX)中 使用的那些字段或與之相同。該格式保持與具有擴展的現有x86指令集的前綴編碼字段、 實操作碼字節字段、MOD R/M字段、SIB字段、位移字段、以及立即數字段一致。示出來自圖 6的字段,來自圖7的字段映射到來自圖7的字段。
[0106] 應當理解,雖然出于說明的目的在通用向量友好指令格式600的上下文中參考專 用向量友好指令格式700描述了本發明的實施例,但是本發明不限于專用向量友好指令格 式700,除非另有聲明。例如,通用向量友好指令格式600構想各種字段的各種可能的尺寸, 而專用向量友好指令格式700被示為具有特定尺寸的字段。作為具體示例,盡管在專用向 量友好指令格式700中數據元素寬度字段664被示為一位字段,但是本發明不限于此(即, 通用向量友好指令格式600構想數據元素寬度字段664的其他尺寸)。
[0107] 通用向量友好指令格式600包括以下列出的按照圖7A中示出的順序的如下字段。
[0108] EVEX前綴(字節0-3) 702 -以四字節形式進行編碼。
[0109] 格式字段640(EVEX字節0,位[7:0]) -第一字節(EVEX字節0)是格式字段640, 并且它包含0x62 (在本發明的一個實施例中用于區分向量友好指令格式的唯一值)。
[0110] 第二一第四字節(EVEX字節1-3)包括提供專用能力的多個位字段。
[0111] REX 字段 705 (EVEX 字節 1,位[7-5]) -由 EVEX. R 位字段(EVEX 字節 1,位[7] - R)、 EVEX. X 位字段(EVEX 字節 1,位[6] - X)以及(657BEX 字節 1,位[5] - B)組成。EVEX. R、 EVEX. X和EVEX. B位字段提供與對應VEX位字段相同的功能,并且使用1補碼的形式進行編 碼,g卩ΖΜΜ0被編碼為1111B,ZMM15被編碼為0000B。這些指令的其他字段對如在本領域中 已知的寄存器索引的較低三個位(rrr、XXX、以及bbb)進行編碼,由此可通過增加EVEX. R、 EVEX. X 以及 EVEX. B 來形成 Rrrr、Xxxx 以及 Bbbb。
[0112] REX'字段610-這是REX'字段610的第一部分,并且是用于對擴展的32個寄存器 集合的較高16個或較低16個寄存器進行編碼的EVEX. R'位字段(EVEX字節1,位[4] - R')。 在本發明的一個實施例中,該位與以下指示的其他位一起以位反轉的格式存儲以(在公知 x86的32位模式下)與實操作碼字節是62的BOUND指令進行區分,但是在MOD R/M字段 (在下文中描述)中不接受MOD字段中的值11 ;本發明的替代實施例不以反轉的格式存儲 該指示的位以及其他指示的位。值1用于對較低16個寄存器進行編碼。換句話說,通過組 合EVEX. R'、EVEX. R、以及來自其他字段的其他RRR來形成R' Rrrr。
[0113] 操作碼映射字段715(EVEX字節1,位[3:0] -_m)-其內容對隱含的前導操作碼 字節(0F、0F38、或0F3)進行編碼。
[0114] 數據元素寬度字段664 (EVEX字節2,位[7] -W) -由記號EVEX. W表示。EVEX. W 用于定義數據類型(32位數據元素或64位數據元素)的粒度(尺寸)。
[0115] EVEX. vvvv720 (EVEX 字節 2,位[6:3]-vvvv) - EVEX. vvvv 的作用可包括如下:1) EVEX. vvvv編碼第一源寄存器操作數且對具有兩個或兩個以上源操作數的指令有效,第一 源寄存器操作數以反轉(1補碼)的形式被指定;2)EVEX. vvvv編碼目的地寄存器操作數, 目的地寄存器操作數針對特定向量位移以1補碼的形式被指定;或者3)EVEX. vvvv不編碼 任何操作數,保留該字段,并且應當包含1111b。由此,EVEX. ww字段720對以反轉(1補 碼)的形式存儲的第一源寄存器指定符的4個低階位進行編碼。取決于該指令,額外不同 的EVEX位字段用于將指定符尺寸擴展到32個寄存器。
[0116] EVEX.U668類字段(EVEX字節2,位[2]-U) -如果EVEX.U = 0,則它指示A類或 EVEX. U0 ;如果 EVEX. U = 1,則它指示 B 類或 EVEX. U1。
[0117] 前綴編碼字段725(EVEX字節2,位[1:0]-ρρ) -提供了用于基礎操作字段的附加 位。除了對以EVEX前綴格式的傳統SSE指令提供支持以外,這也具有壓縮SMD前綴的益 處(EVEX前綴只需要2位,而不是需要字節來表達SMD前綴)。在一個實施例中,為了支 持使用以傳統格式和以EVEX前綴格式的SMD前綴(66H、F2H、F3H)的傳統SSE指令,將這 些傳統SMD前綴編碼成SMD前綴編碼字段;并且在運行時在提供給解碼器的PLA之前被 擴展成傳統SMD前綴(因此PLA可執行傳統和EVEX格式的這些傳統指令,而無需修改)。 雖然較新的指令可將EVEX前綴編碼字段的內容直接作為操作碼擴展,但是為了一致性,特 定實施例以類似的方式擴展,但允許由這些傳統SIMD前綴指定不同的含義。替代實施例可 重新設計PLA以支持2位SMD前綴編碼,并且由此不需要擴展。
[0118] α 字段 652 (EVEX 字節 3,位[7] - H1,也稱為 EVEX. HI、EVEX. rs、EVEX. RL、EVEX. 寫掩碼控制、以及EVEX. N;也以α示出)一如先前所述,該字段是針對上下文的。
[0119] β字段654(EVEX字節3,位[6:4]-SSS,也稱為EVEX·s2-0、EVEX·r2-0、EVEX·rrl、 EVEX. LL0、EVEX. LLB;也以β β β示出)一如先前所述,該字段是針對上下文的。
[0120] REX'字段610 -這是REX'字段的其余部分,并且是可用于對擴展的32個寄存器集 合的較高16個或較低16個寄存器進行編碼的EVEX. V'位字段(EVEX字節3,位[3] - V')。 該位以位反轉的格式存儲。值1用于對較低16個寄存器進行編碼。換句話說,通過組合 EVEX. V'、EVEX. vvvv 來形成 V' VVVV。
[0121] 寫掩碼字段670(EVEX字節3,位[2:0]_kkk) -其內容指定寫掩碼寄存器中的寄存 器索引,如先前所述。在本發明的一個實施例中,特定值EVEX. kkk = 000具有暗示沒有寫 掩碼用于特定指令的特殊行為(這可以各種方式實現,包括使用硬連線到所有的寫掩碼或 者旁路掩碼硬件的硬件來實現)。
[0122] 實操作碼字段730(字節4)還被稱為操作碼字節。操作碼的一部分在該字段中被 指定。
[0123] M0DR/M字段740(字節5)包括MOD字段742、Reg字段744、以及R/M字段746。如 先前所述的,MOD字段742的內容將存儲器訪問和非存儲器訪問操作區分開。Reg字段744 的作用可被歸結為兩種情形:對目的地寄存器操作數或源寄存器操作數進行編碼;或者被 視為操作碼擴展且不用于對任何指令操作數進行編碼。R/M字段746的作用可包括如下: 對引用存儲器地址的指令操作數進行編碼;或者對目的地寄存器操作數或源寄存器操作數 進行編碼。
[0124] 比例、索引、基址(SIB)字節(字節6)-如先前所述的,比例字段650的內容用于 存儲器地址生成。SIB. xxx754和SIB. bbb756 -先前已經針對寄存器索引Xxxx和Bbbb提 及了這些字段的內容。
[0125] 位移字段662A (字節7-10) -當MOD字段742包含10時,字節7-10是位移字段 662A,并且它與傳統32位位移(disp32) -樣地工作,并且以字節粒度工作。
[0126] 位移因數字段662B (字節7) -當MOD字段742包含01時,字節7是位移因數字 段662B。該字段的位置與傳統x86指令集8位位移(disp8)的位置相同,它以字節粒度工 作。由于disp8是符號擴展的,因此它僅能在-128和127字節偏移量之間尋址;在64字節 高速緩存行的方面,disp8使用可被設為僅四個真正有用的值-128、-64、0和64的8位;由 于常常需要更大的范圍,所以使用disp32 ;然而,disp32需要4個字節。與disp8和disp32 對比,位移因數字段662B是disp8的重新解釋;當使用位移因數字段662B時,通過將位移 因數字段的內容乘以存儲器操作數訪問的尺寸(N)來確定實際位移。該類型的位移被稱為 disp8*N。這減小了平均指令長度(單個字節用于位移,但具有大得多的范圍)。這種壓縮 位移基于有效位移是存儲器訪問的粒度的倍數的假設,并且由此地址偏移量的冗余低階位 不需要被編碼。換句話說,位移因數字段662B替代傳統x86指令集8位位移。由此,位移 因數字段662B以與x86指令集8位位移相同的方式(因此在ModRM/SIB編碼規則中沒有 變化)進行編碼,唯一的不同在于,將disp8超載至disp8*N。換句話說,在編碼規則或編碼 長度中沒有變化,而僅在通過硬件對位移值的解釋中有變化(這需要按存儲器操作數的尺 寸按比例縮放位移量以獲得字節式地址偏移量)。
[0127] 立即數字段672如先前所述地操作。
[0128] 完整操作碼字段
[0129] 圖7B是示出根據本發明的實施例的構成完整操作碼字段674的具有專用向量友 好指令格式700的字段的框圖。具體地,完整操作碼字段674包括格式字段640、基礎操作 字段642、以及數據元素寬度(W)字段664。基礎操作字段642包括前綴編碼字段725、操作 碼映射字段715以及實操作碼字段730。
[0130] 寄存器索引字段
[0131] 圖7C是示出根據本發明的一個實施例的構成寄存器索引字段644的具有專用向 量友好指令格式700的字段的框圖。具體地,寄存器索引字段644包括REX字段705、REX' 字段 710、M0DR/M. reg 字段 744、M0DR/M. r/m 字段 746、VVVV 字段 720、XXX 字段 754 以及 bbb 字段 756。
[0132] 擴充操作字段
[0133] 圖7D是示出根據本發明的一個實施例的構成擴充操作字段650的具有專用向量 友好指令格式700的字段的框圖。當類(U)字段668包含0時,它表明EVEX.U0(A類668A); 當它包含1時,它表明EVEX. U1 (B類668B)。當U = 0且MOD字段742包含11 (表明無存儲 器訪問操作)時,α字段652 (EVEX字節3,位[7] - EH)被解釋為rs字段652A。當rs字 段652A包含1 (舍入652A. 1)時,β字段654 (EVEX字節3,位[6:4] - SSS)被解釋為舍入 控制字段654Α。舍入控制字段654Α包括一位SAE字段656和兩位舍入操作字段658。當 rs字段652Α包含0 (數據變換652Α. 2)時,β字段654 (EVEX字節3,位[6:4] - SSS)被解 釋為三位數據變換字段654Β。當U = 0且MOD字段742包含00、01或10 (表明存儲器訪問 操作)時,α字段652(EVEX字節3,位[7] -EH)被解釋為驅逐提示(EH)字段652B且β 字段654 (EVEX字節3,位[6:4] -SSS)被解釋為三位數據操縱字段654C。
[0134] 當U = 1時,α字段652 (EVEX字節3,位[7] -EH)被解釋為寫掩碼控制(Z)字段 652C。當U = 1且MOD字段742包含11 (表明無存儲器訪問操作)時,β字段654的一部 分(EVEX字節3,位[4] - SQ)被解釋為RL字段657Α ;當它包含1 (舍入657Α. 1)時,β字 段654的其余部分(EVEX字節3,位[6-5] - S2J被解釋為舍入操作字段659Α,而當RL字段 657A包含0(VSIZE657.A2)時,β字段654的其余部分(EVEX字節3,位[6-5=-?^被解釋 為向量長度字段659B(EVEX字節3,位[6-5] -Lg)。當U= 1且MOD字段742包含00、01 或1〇(表明存儲器訪問操作)時,β字段654(EVEX字節3,位[6:4] -SSS)被解釋為向量 長度字段659B (EVEX字節3,位[6-5] - Lg)和廣播字段657B (EVEX字節3,位[4] - B)。
[0135] 示例性寄存器架構
[0136] 圖8是根據本發明的一個實施例的寄存器架構800的框圖。在所示出的實施例中, 有32個512位寬的向量寄存器810 ;這些寄存器被引用為zmmO到zmm31。較低的16zmm寄 存器的較低階256個位覆蓋在寄存器ymm〇-16上。較低的16zmm寄存器的較低階128個位 (ymm寄存器的較低階128個位)覆蓋在寄存器xmmO-15上。專用向量友好指令格式700對 這些覆蓋的寄存器組操作,如在以下表格中所示的。
[0137]
【權利要求】
1. 一種裝置,包括: 執行單元,用于執行第一指令和第二指令,所述執行單元包括以下部件: i) 輸入寄存器空間,用于存儲在執行所述第一指令時要復制的第一數據結構,并用于 存儲在執行所述第二指令時要復制的第二數據結構,所述第一和第二數據結構均為打包數 據結構,所述第一打包數據結構的數據值是所述第二打包數據結構的數據值的兩倍大; ii) 復制邏輯電路,用于在執行所述第一指令時復制所述第一數據結構以創建第一復 制數據結構,并用于在執行所述第二指令時復制所述第二數據結構以創建第二復制數據結 構; iii) 掩碼邏輯電路,用于在第一粒度下對所述第一復制數據結構進行掩碼操作,并在 第二粒度下對所述第二復制數據結構進行掩碼操作,所述第二粒度是所述第一粒度的一 半。
2. 如權利要求1所述的裝置,其特征在于,所述第一復制數據結構包括所述第一數據 結構的四個副本。
3. 如權利要求1所述的裝置,其特征在于,所述第一復制數據結構包括所述第一數據 結構的兩個副本。
4. 如權利要求1所述的裝置,其特征在于,所述第二復制數據結構包括所述第二數據 結構的八個副本。
5. 如權利要求1所述的裝置,其特征在于,所述第二復制數據結構包括所述第二數據 結構的四個副本。
6. 如權利要求1所述的裝置,其特征在于,所述第二復制數據結構包括所述第二數據 結構的兩個副本。
7. 如權利要求1所述的裝置,其特征在于,所述第一打包數據結構的所述數據值均是 64位,且所述第二打包數據結構的所述數據值均是32位。
8. -種方法,包括: 取出用于第一指令的第一數據結構,所述第一數據結構是第一打包數據結構; 通過以下方式來執行所述第一指令:在執行單元內復制所述第一數據結構以創建第一 復制數據結構,并對所述第一復制數據結構進行掩碼操作; 取出用于第二指令的第二數據結構,所述第二數據結構是第二打包數據結構,所述第 一打包數據結構的數據值是所述第二打包數據結構的數據值的兩倍大; 通過以下方式來執行所述第二指令:在所述執行單元內復制所述第二數據結構以創建 第二復制數據結構,并在對所述第一復制數據結構的所述掩碼操作的一半粒度下對所述第 二復制數據結構進行掩碼操作。
9. 如權利要求8所述的方法,其特征在于,所述第一和第二數據值是浮點數據值。
10. 如權利要求9所述的方法,其特征在于,所述第一數據值是64位,且所述第二數據 值是32位。
11. 如權利要求8所述的方法,其特征在于,所述第一復制數據結構包含以下任一數量 的所述第一數據結構的副本: 兩個; 四個。
12. 如權利要求11所述的方法,其特征在于,所述復制數據結構包含以下任一數量的 所述第二數據結構的副本: 兩個; 四個; 八個。
13. 如權利要求8所述的方法,其特征在于,所述第一打包數據結構具有以下任一數量 的數據值: 兩個; 四個。
14. 如權利要求13所述的方法,其特征在于,所述第二打包數據結構具有以下任一數 量的數據值: 兩個; 四個; 八個。
15. -種裝置,包括: 執行單元,用于執行第一指令和第二指令,所述執行單元包括以下部件: i) 輸入寄存器空間,用于存儲對于多個指令中的每個指令要復制的相應數據結構,所 述多個指令將由所述執行單元執行,用于所述多個指令中的每個指令的所述相應數據結構 包括:用于第一指令的第一未打包數據結構;用于第二指令的第二未打包數據結構,其中 所述第二未打包數據結構是所述第一未打包數據結構的兩倍大;用于第三指令的第三打包 數據結構,其數據值與所述第一未打包數據結構的尺寸相同;用于第四指令的第四打包數 據結構,其數據值與所述第二未打包數據結構的尺寸相同; ii) 復制邏輯電路,用于:在執行所述第一指令時復制所述第一數據結構以創建第一 復制數據結構,在執行所述第二指令時復制所述第二數據結構以創建第二復制數據結構, 在執行所述第三指令時復制所述第三數據結構以創建第三復制數據結構,在執行所述第四 指令時復制所述第四數據結構以創建第四復制數據結構; iii) 掩碼邏輯電路,用于在第一粒度下對所述第一復制數據結構和所述第三復制數據 結構進行掩碼操作,并在第二粒度下對所述第二復制數據結構和所述第四復制數據結構進 行掩碼操作,所述第一粒度是所述第二粒度的一半。
16. 如權利要求15所述的裝置,其特征在于,所述第四指令的所述復制產生第四復制 數據結構,所述第四復制數據結構包含以下任一數量的所述第四數據結構的副本: 兩個; 四個。
17. 如權利要求16所述的裝置,其特征在于,所述第三指令的所述復制產生第三復制 數據結構,所述第三復制數據結構包含以下任一數量的所述第三數據結構的副本: 兩個; 四個; 八個。
18. 如權利要求15所述的裝置,其特征在于,所述第四打包數據結構具有以下任一數 量的數據值: 兩個; 四個。
19. 如權利要求18所述的裝置,其特征在于,所述第三打包數據結構具有以下任一數 量的數據值: 兩個; 四個; 八個。
20. 如權利要求15所述的裝置,其特征在于,所述第一數據值是32位,且所述第二數據 值是64位。
【文檔編號】G06F9/305GK104067224SQ201180076281
【公開日】2014年9月24日 申請日期:2011年12月23日 優先權日:2011年12月23日
【發明者】E·烏爾德-阿邁德-瓦爾, R·凡倫天, J·考博爾, B·L·托爾, M·J·查尼 申請人:英特爾公司