日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

不會引起密碼應(yīng)用的算術(shù)標志的三輸入操作數(shù)向量add指令的制作方法

文檔序號:6485509閱讀:192來源:國知局
不會引起密碼應(yīng)用的算術(shù)標志的三輸入操作數(shù)向量add指令的制作方法
【專利摘要】描述了一種方法,包括在實現(xiàn)于半導(dǎo)體芯片上的指令執(zhí)行流水線內(nèi)執(zhí)行以下:通過執(zhí)行單個指令對三個輸入向量操作數(shù)進行求和;以及即使求和的結(jié)果產(chǎn)生比設(shè)計成傳輸該和的電路能夠傳輸?shù)奈桓嗟奈唬膊灰鹑魏嗡阈g(shù)標志。
【專利說明】不會引起密碼應(yīng)用的算術(shù)標志的三輸入操作數(shù)向量ADD指 令 【背景技術(shù)】 【技術(shù)領(lǐng)域】
[0001] 本發(fā)明一般涉及計算科學,且尤其涉及對于密碼應(yīng)用不會引起算術(shù)標志的三輸入 操作數(shù)向量ADD指令。
[0002] 背景摶術(shù)
[0003] 指令執(zhí)行流水線以及標量對向量處理
[0004] 圖1示出了在半導(dǎo)體芯片上用邏輯電路實現(xiàn)的處理核100的高級圖。該處理核包 括流水線101。該流水線由各自被設(shè)計成在完全執(zhí)行程序代碼指令所需的多步驟過程中執(zhí) 行特定步驟的多個級組成。這些級通常至少包括:1)指令取出和解碼;2)數(shù)據(jù)取出;3)執(zhí) 行;4)寫回。執(zhí)行級對由在先前級(例如在上述步驟1))中所取出和解碼的指令所標識并 在另一先前級(例如在上述步驟2))中被取出的數(shù)據(jù)執(zhí)行由在先前級(例如在上述步驟 1))中取出和解碼的指令所標識的特定操作。被操作的數(shù)據(jù)通常是從(通用)寄存器存儲 空間102中取出的。在該操作完成時所創(chuàng)建的新數(shù)據(jù)通常也被"寫回"寄存器存儲空間(例 如在上述級4))。
[0005] 與執(zhí)行級相關(guān)聯(lián)的邏輯電路通常由多個"執(zhí)行單元"或"功能單元" 103_1至103_ N構(gòu)成,這些單元各自被設(shè)計成執(zhí)行其自身的唯一操作子集(例如,第一功能單元執(zhí)行整數(shù) 數(shù)學操作,第二功能單元執(zhí)行浮點指令,第三功能單元執(zhí)行從高速緩存/存儲器的加載操 作和/或到高速緩存/存儲器的存儲操作等等)。由所有這些功能單元執(zhí)行的所有操作的 集合與處理核100所支持的"指令集"相對應(yīng)。
[0006] 計算機科學領(lǐng)域中廣泛認可兩種類型的處理器架構(gòu):"標量"和"向量"。標量處理 器被設(shè)計成執(zhí)行對單個數(shù)據(jù)集進行操作的指令,而向量處理器被設(shè)計成執(zhí)行對多個數(shù)據(jù)集 進行操作的指令。圖2A和2B呈現(xiàn)了展示標量處理器與向量處理器之間的基本差異的比較 示例。
[0007] 圖2A示出標量AND (與)指令的示例,其中單個操作數(shù)集A和B -起進行"與"運 算以產(chǎn)生奇異(或"標量")結(jié)果C(S卩,AB = C)。相反,圖2B示出向量AND指令的示例,其 中兩個操作數(shù)集A/B和D/E分別并行地一起進行"與"運算以同時產(chǎn)生向量結(jié)果C和F(即, A. AND. B = C以及D. AND. E = F)。根據(jù)術(shù)語學,"向量"是具有多個"元素"的數(shù)據(jù)元素。例 如,向量V = Q,R,S,T,U具有五個不同的元素:Q、R、S、T和U。示例性向量V的"尺寸"是 5 (因為它具有5個元素)。
[0008] 圖1還示出與通用寄存器空間102不同的向量寄存器空間104的存在。具體而言, 通用寄存器空間102標稱地用于存儲標量值。由此,當各執(zhí)行單元中的任一個執(zhí)行標量操 作時,它們標稱地使用從通用寄存器存儲空間102調(diào)用的操作數(shù)(并且將結(jié)果寫回通用寄 存器存儲空間102)。相反,當各執(zhí)行單元中的任一個執(zhí)行向量操作時,它們標稱地使用從向 量寄存器空間104調(diào)用的操作數(shù)(并將結(jié)果寫回向量寄存器空間107)。可類似地分配存儲 器的不同區(qū)域以存儲標量值和向量值。
[0009] 算術(shù)標志
[0010] 算術(shù)標志用于響應(yīng)于操作結(jié)果重新定向程序流。例如,在條件分支的情況下,可 將程序代碼寫入以:i)如果結(jié)果>1則取第一路徑;ii)如果結(jié)果=1則取第二路徑;以及 iii)如果結(jié)果〈1則取第三路徑。因此,計算結(jié)果的執(zhí)行單元也被設(shè)計成將算術(shù)標志設(shè)置成 指示應(yīng)用哪個結(jié)果。以下的條件分支指令考慮標志設(shè)置以決定程序代碼選取哪個路徑。 [0011] 算術(shù)標志還可用于指示在指令的執(zhí)行期間已經(jīng)引起了關(guān)注的問題或事件。例如, 在"溢出"條件或"進位超出(carry out)"條件的情況下,用于進位和/或保持數(shù)學操作 (諸如加法)的結(jié)果的線的位寬不足夠大。例如,ADD操作的正確結(jié)果可以是65位寬,然 而,可用于傳送和/或存儲結(jié)果的硬連線位寬僅為64位。在這種情況下,引起算術(shù)"標志", 該標志促使CPU硬件和/或軟件分支到恢復(fù)或處理機制,以處理引起標志的問題。
[0012] 圖1示出標志邏輯108的存在。標志邏輯108是被設(shè)計成檢測并且至少發(fā)起算術(shù) 標志的處理的專用邏輯電路。在問題或差錯標志的情況下,諸如溢出或進位超出,對引起該 標志的問題的解決本質(zhì)上對應(yīng)于在程序執(zhí)行中的性能沖擊(performance hit)或低效。即, 通常,需要大量的CPU循環(huán)來解決引起標志的狀況。在圖1中觀察到,標志邏輯108耦合到 每個執(zhí)行單元。
[0013] 密碼散列
[0014] 圖3示出例如用于產(chǎn)生文件的數(shù)字簽名的SHA密碼散列算法。在典型的應(yīng)用中, 五個不同的32位常數(shù)用作A、B、C、D、E輸入301的初始集合。穿過散列過程302的全部五 個通道的行進(稱為"輪(round)")產(chǎn)生A、B、C、D、E輸出值303的集合。典型地,對于來 自原始文件的A、B、C、D、E輸入301的每個初始集合,執(zhí)行60或80輪連續(xù)序列。此處,前 一輪的A、B、C、D、E輸出結(jié)果303被反饋304作為"下一"輪的A、B、C、D、E輸入301。在60 或80輪之后A、B、C、D、E輸出303的最終值對應(yīng)于從文件獲取的A、B、C、D、E輸入301的 原始集合的簽名或經(jīng)加密形式。
[0015] 如在圖3中觀察到的,散列過程302包括一串加法305、三輸入操作數(shù)邏輯函數(shù)F 306、向左旋轉(zhuǎn)5次操作307和向左旋轉(zhuǎn)30次操作308。邏輯函數(shù)F 306可以是正執(zhí)行哪 輪的函數(shù)。例如,在具有80輪的示例性實現(xiàn)中,對于前二十輪,F(xiàn)= (B AND C)0R((N0T B) AND D);對于接下來的二十輪,F(xiàn) = B XOR C XOR D;對于第41至60輪,F(xiàn)= (B AND C)0R(B AND D) 0R(C AND D),且對于第 61 至 80 輪,F(xiàn) = B X0R C X0R D (再次)。
[0016] 注意,通過散列算法對其數(shù)據(jù)內(nèi)容進行散列的文件或其它數(shù)據(jù)結(jié)構(gòu)被分成(例如 64位)塊。每個64位塊被擴展以形成60-80Wt值,這些值被引入散列過程的不同輪。
[0017] 已經(jīng)在半導(dǎo)體處理器上執(zhí)行的先前已知的密碼散列過程利用整數(shù)指令來進行,其 中如果和產(chǎn)生溢出或進位超出,則為下一輪計算A值而執(zhí)行的加法將引起算法標志。由于 密碼散列計算高度密集,因此算法標志的產(chǎn)生對應(yīng)于顯著的性能沖擊。 【專利附圖】

【附圖說明】
[0018] 本發(fā)明是通過示例說明的,而不僅局限于各個附圖的圖示,在附圖中,類似的參考 標號表示類似的元件,其中:
[0019] 圖1示出指令執(zhí)行流水線;
[0020] 圖2a和2b將標量處理與向量處理進行比較;
[0021] 圖3示出加密過程;
[0022] 圖4示出利用向量指令且對于加法指令不引起算法標志的改進的加密過程;
[0023] 圖5a示出VPADD指令的邏輯設(shè)計;
[0024] 圖5b示出可由處理器執(zhí)行的具有向量TERNLOG、SHIFTLEFT和VPADD指令的方法;
[0025] 圖6A例示了示例性AVX指令格式;
[0026] 圖6B示出來自圖6A的哪些字段構(gòu)成完整操作碼字段和基礎(chǔ)操作字段;
[0027] 圖6C示出來自圖6A的哪些字段構(gòu)成寄存器索引字段;
[0028] 圖7A-7B是示出根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其指令模板的 框圖;
[0029] 圖8是示出根據(jù)本發(fā)明的實施例的示例性專用向量友好指令格式的框圖;
[0030] 圖9是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)的框圖;
[0031] 圖10A是示出根據(jù)本發(fā)明的實施例的示例性有序流水線和示例性寄存器重命名、 無序發(fā)布/執(zhí)行流水線二者的框圖;
[0032] 圖10B是示出根據(jù)本發(fā)明的實施例的要包括在處理器中的有序架構(gòu)核的示例性 實施例和示例性的寄存器重命名、無序發(fā)布/執(zhí)行架構(gòu)核的框圖;
[0033] 圖11A-B示出了更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的若干邏輯 塊之一(包括相同類型和/或不同類型的其他核);
[0034] 圖12是根據(jù)本發(fā)明實施例可具有一個以上的核、可具有集成存儲器控制器以及 可具有集成圖形器件的處理器的框圖;
[0035] 圖13是根據(jù)本發(fā)明的實施例的示例性系統(tǒng)的框圖;
[0036] 圖14是根據(jù)本發(fā)明的實施例的第一更具體的示例性系統(tǒng)的框圖;
[0037] 圖15是根據(jù)本發(fā)明的實施例的第二更具體的示例性系統(tǒng)的框圖;
[0038] 圖16是根據(jù)本發(fā)明的實施例的片上系統(tǒng)(SoC)的框圖;
[0039] 圖17是根據(jù)本發(fā)明的實施例的對照使用軟件指令轉(zhuǎn)換器將源指令集中的二進制 指令轉(zhuǎn)換成目標指令集中的二進制指令的框圖。 【具體實施方式】
[0040] 概覽
[0041] 圖4示出為執(zhí)行圖4觀察到的一輪密碼散列過程而優(yōu)化的指令內(nèi)核的偽代碼。指 令的內(nèi)核可被重復(fù),以執(zhí)行散列過程所調(diào)用的輪數(shù)(例如,60輪、80輪等)。此外,指令的內(nèi) 核被實現(xiàn)為向量指令,使得不同A、B、C、D、E輸入/輸出的多個集合可被并行處理。
[0042] 在圖4的特定示例中,有A、B、C、D、E輸入/輸出三個集合通過內(nèi)核處理(集合_1 =AO, BO, CO, DO, E0 ;集合 _2 = Al, Bl, Cl, Dl, E1 ;集合 _3 = A2, B2, C2, D2, E2)。這樣,可針 對不同A、B、C、D、E值的三個完整集合,同時執(zhí)行圖4的加密流程。
[0043] 在一個特定實現(xiàn)中,下層處理核將支持512位大的向量尺寸。如果每個向量元素 對應(yīng)于32位,則圖4的內(nèi)核可同時處理16個獨立文件。然而,本領(lǐng)域的技術(shù)人員將理解, 向量的尺寸在不同實現(xiàn)中可不同。
[0044] 在初始化401期間,向量寄存器R1至R5被分別定義成存儲將被并行處理的三個 集合的A、B、C、D和E的值。R6和R7被分別定義成存儲三個集合中的每一個的Wt和Kt值。 在典型的實現(xiàn)中,預(yù)期對于每個集合Wt是獨特的,而Kt可在各集合間相同。如果Kt在各 集合間相同,則R7將保持三個值相同的元素。R8被設(shè)置成等于R2。
[0045] 第一指令(TERNL0G) 402執(zhí)行邏輯函數(shù)F。在圖4中觀察到的實施例中,TERNL0G 指令接受存儲在寄存器R8、R3和R4中的三個向量作為輸入操作數(shù)。回顧寄存器R8、R3和 R4分別存儲三個集合的B、C和D,且從圖3的討論中回顧邏輯函數(shù)F對B、C和D進行操作, 注意,TERNL0G指令對ABCDE值的全部三個集合(下文中僅稱為"集合")同時執(zhí)行邏輯函 數(shù)F。由指令產(chǎn)生的結(jié)果向量(具有三個元素,三個集合中的每一個具有一個F結(jié)果)被存 儲回R8。因此,在將其結(jié)果寫在剛剛被用作輸入操作數(shù)的信息上的意義上,在圖4中觀察到 的特定TERNL0G指令是"破壞性的"。
[0046] 在另一個實施例中,TERNL0G指令是特殊指令,該指令另外采用定義將在三輸入操 作數(shù)上執(zhí)行的邏輯操作的附加操作數(shù)X 403。即,TERNL0G指令的邏輯電路被設(shè)計成執(zhí)行很 多不同的邏輯函數(shù)。然而,對于指令的任何單次執(zhí)行,僅執(zhí)行這些邏輯函數(shù)中的一個。所執(zhí) 行的特定的邏輯函數(shù)F由輸入操作數(shù)X 403定義。
[0047] 例如,如果輸入操作數(shù) X403 :i)具有值 00000,則 F = (B AND C)0R((N0T B)AND D) ;ii)具有值 00001,則 F = B XOR C XOR D ;iii)具有值 00010,則 F = (B AND C)0R(B AND D) OR(C AND D)?;仡檯⒖紙D3討論的基于特定輪迭代應(yīng)用哪個函數(shù)F的示例,注意, 圖4的內(nèi)核可被重復(fù)全部的80輪,如果輸入操作數(shù)403具有:i)對于前二十輪,值00000 ; ii)對于第21-40和61-80輪,值00001 ;以及iii)對于第41-60輪,值00010。
[0048] 在另一個實施例中,輸入操作數(shù)X 403被指定為立即操作數(shù)。如本領(lǐng)域中已知的, 立即操作數(shù)是在指令格式本身中(而不是在存儲器或寄存器空間中)定義的輸入操作數(shù)。 在這種情況下,用于實現(xiàn)全部80輪的代碼覆蓋區(qū)將比在輸入操作數(shù)403被保持在寄存器空 間中時可實現(xiàn)的代碼覆蓋區(qū)要大,因為對于不同的F函數(shù)將不會執(zhí)行相同的物理TERNL0G 指令。換言之,不同的物理TERNL0G將不得不用于輸入操作數(shù)403的每個不同值。
[0049] 在從執(zhí)行TERNL0G指令得到的結(jié)果向量已經(jīng)被存儲在R8中之后,在R1的內(nèi)容上 執(zhí)行R0TATELEFT_5指令404。即,存儲在R1中的向量的A元素向左旋轉(zhuǎn)5個空間。在實施 例中,旋轉(zhuǎn)與桶形移位的相似之處在于在左側(cè)移出的位重新出現(xiàn)在右側(cè)。向左旋轉(zhuǎn)5次操 作的結(jié)果被存儲在R9中。在這種情況下,R0TATELEFT_5指令404不是破壞性的,因為結(jié)果 數(shù)據(jù)未被寫在R1中的原始操作數(shù)數(shù)據(jù)上。
[0050] 在另一個實施例中,R0TATELEFT_5指令404實際上被實現(xiàn)為R0TATELEFT(向左 旋轉(zhuǎn))指令,其中向左旋轉(zhuǎn)的空間數(shù)量(5)通過輸入操作數(shù)(在寄存器或存儲器空間中或 利用立即操作數(shù))來指定。在又一個實施例中,R〇TATELEFT_5指令404實際上被實現(xiàn)為 ROTATE指令,其中所旋轉(zhuǎn)的空間數(shù)量(5)和旋轉(zhuǎn)的方向(向左)通過輸入操作數(shù)信息(每 個信息也可從寄存器空間調(diào)用或嵌入在指令中作為立即操作數(shù))來指定。
[0051] 在另一種方法中,R0TATELEFT指令被設(shè)計成在單個微操作中(利用"文字書(text book) "旋轉(zhuǎn)電路)執(zhí)行旋轉(zhuǎn),以使完全執(zhí)行R0TATELEFT指令所需的時鐘周期數(shù)最小化。
[0052] 在R0TATELEFT_5指令之后執(zhí)行VPADD指令405。在圖4觀察到的實施例中,VPADD 指令接受分別存儲在寄存器R9、R8和R5中的三個不同的向量并將其相加。此處,R9對應(yīng) 于R0TATETLEFT_5指令404的結(jié)果,R8對應(yīng)于由TERNL0G指令402執(zhí)行的邏輯操作F的結(jié) 果,且R5對應(yīng)于E值。將這些值相加在一起對應(yīng)于在單個指令中執(zhí)行圖3的區(qū)域310列出 的加法。
[0053] 在另一個實施例中,即使VPADD指令405執(zhí)行數(shù)字加法,也不實現(xiàn)算術(shù)標志。此處, 回顧數(shù)學ADD可能生成對于硬件而言太大而無法傳送或存儲的結(jié)果,并且這通常將引起溢 出標志或進位超出標志,在一實現(xiàn)中,在執(zhí)行VPADD指令405時有目的地不利用這些標志。
[0054] 相關(guān)觀點是VPADD指令405盡管涉及數(shù)學函數(shù),但最終被用于密碼散列過程而不 是實質(zhì)計算。因而,對于相同輸入數(shù)據(jù)的可重復(fù)性是更重要的目標(而不是正確的數(shù)學結(jié) 果)。換言之,只要相同的輸入文件在多輪密碼散列過程結(jié)束時將產(chǎn)生相同的密碼簽名,那 么密碼散列過程即為有效。
[0055] 因而,可忽略延伸超出硬件的數(shù)據(jù)寬度的任何溢出或進位超出位,因此忽略本應(yīng) 響應(yīng)于它們的生成而引起的算術(shù)標志。此處,再次,由ADD操作生成的較低階位(S卩,消耗 硬件的全寬度的結(jié)果位)足以用于密碼散列目的,因為它們對于相同的輸入數(shù)據(jù)將重復(fù)地 相同。
[0056] 算術(shù)標志的禁用能以各種方式實現(xiàn),諸如將圖1的標志邏輯108設(shè)計成忽略執(zhí)行 VPADD指令的執(zhí)行單元在其執(zhí)行VPADD指令時生成的任何標志,或者將執(zhí)行單元設(shè)計成在 其執(zhí)行VPADD指令時不生成任何算術(shù)標志。在后一方法的實施例中,執(zhí)行單元是否生成算 術(shù)標志是可設(shè)置的參數(shù)(例如,立即操作數(shù)嵌入在指令格式中)。
[0057] 因而,當VPADD指令被編譯用于密碼散列過程時,所生成的代碼將生成VPADD指令 格式的"關(guān)閉(turn off)"算術(shù)標志生成的立即值。作為對比,如果VPADD指令用于涉及有 意義的數(shù)據(jù)計算的其它目的,則編譯器可替代地生成代碼,該代碼生成VPADD指令格式的 "開啟"算術(shù)標志生成的立即值。
[0058] 注意,在圖4中描繪的VPADD指令405是破壞性的,因為加法的結(jié)果被寫在最初提 供SHIFTLEFT_5指令404的結(jié)果的數(shù)據(jù)上。
[0059] 在執(zhí)行VPADD指令405之后,執(zhí)行第二VPADD指令406,該指令將先前的VPADD指 令的結(jié)果(存儲在R9中)與分別存儲在R6和R7中的Wt和Kt常數(shù)相加。第二VPADD指 令406也是破壞性的,因為它將其結(jié)果寫入R9 (R9提供用于第二VPADD指令406的輸入操 作數(shù))。注意,第二VPADD指令406有效地執(zhí)行圖3的區(qū)域311中列出的加法。
[0060] 因為,當?shù)诙PADD指令406已經(jīng)完成其操作時,內(nèi)核的加法操作完成。因此,在 一實現(xiàn)中,VPADD指令被有目的地選擇成將三個操作數(shù)相加,因為整個密碼內(nèi)核僅具有六個 總數(shù)加法操作數(shù)。換言之,作為三操作數(shù)ADD指令,僅需要VPADD指令的兩次執(zhí)行404、405 來執(zhí)行內(nèi)核的所有加法。在這種情況下,在一實施例中,從三個數(shù)相加之后可生成標記,并 且這些標志被存儲在掩碼寄存器中。
[0061] 在執(zhí)行第二VPADD指令406之后,執(zhí)行R0TATELEFT_30指令407,該指令將R2中的 B值向左旋轉(zhuǎn)三十個位置并將結(jié)果存儲在R10中。類似于先前的R0TATELEFT_5指令406, R0TATELEFT_30指令407是非破壞性的,因為其輸入操作數(shù)信息仍被使用(如以下進一步描 述的那樣)。R〇TATELEFT_30指令可以是R0TATELEFT或ROTATE指令,且可利用一個或多個 輸入操作數(shù)(例如,立即操作數(shù))以指定被旋轉(zhuǎn)的位位置的數(shù)量和/或旋轉(zhuǎn)的方向。
[0062] 如圖4中觀察到的,R0TATELEFT_30指令407已經(jīng)執(zhí)行,內(nèi)核的下一迭代的A、B、C、 D、E值(S卩,對于下一輪)分別在寄存器R9、Rl、RIO、R3和R4中找到。此外,參考圖3和 4 :i)下一輪的A值對應(yīng)于存儲在R9中的第二VPADD指令406執(zhí)行的加法的結(jié)果;ii)下一 輪的B值對應(yīng)于存儲在R1中的剛剛執(zhí)行的輪的A值;iii)下一輪的C值對應(yīng)于存儲在R10 中的SHIFTLEFT_30指令的加法的結(jié)果;iv)下一輪的D值對應(yīng)于存儲在R3中的剛剛執(zhí)行 的輪的C值;以及v)下一輪的E值對應(yīng)于存儲在R4中的剛剛執(zhí)行的輪的D值。
[0063] 圖5a示出可執(zhí)行VPADD指令的執(zhí)行單元的邏輯電路的邏輯設(shè)計。根據(jù)圖5a的 邏輯設(shè)計,加法電路包括向傳統(tǒng)加法器502饋送的3:2保留進位加法器(CSA,carry-save adder) 501的一級。正如本領(lǐng)域中已知的,保留進位加法器501是計算三個或更多個二進 制η位數(shù)的和的數(shù)字加法器。此處相加的三個二進制數(shù)被提前存儲在輸入寄存器503、504、 505中。參考圖4,作為示例,在VPADD指令405的情況下,寄存器503、504、505將分別存儲 R9、R8和R5的內(nèi)容作為指令流水線的數(shù)據(jù)獲取處理的一部分。
[0064] 傳統(tǒng)的保留進位加法器產(chǎn)生兩個輸出506、507(每個輸出可與輸入相同尺寸)。 一個輸出506是部分和(partial sum)位的序列,且另一個輸出507是進位位的序列。如 圖5a中觀察到的,在輸出506產(chǎn)生的部分和位由傳統(tǒng)加法器502相加以產(chǎn)生最終的和 508。在微代碼實現(xiàn)中,可利用單個微操作實現(xiàn)由VPADD指令執(zhí)行的求和?;仡櫼陨嫌懻摰?R0TATELEFT_[5/30]指令也可利用單個微操作來實現(xiàn),注意圖4的指令404至407可利用四 個微操作的總和來執(zhí)行。
[0065] 在實施例中,通過在指令各種指定的控制字段,VPADD指令可以是破壞性的(在源 操作數(shù)上寫)或非破壞性的(不在源操作數(shù)上寫)。最后,至少當VPADD執(zhí)行密碼散列應(yīng)用 的指令時,忽略進位位507。此外,如上所述,進位位和任何算術(shù)標志邏輯可被選擇性地啟用 或禁用(例如,通過立即操作數(shù)),或者可通過邏輯硬件的設(shè)計而被永久忽略/不使用。
[0066] 圖5b示出可由處理器執(zhí)行的具有以上討論的TTERNLOG、R0TATELEFT和VPADD指 令的方法。如圖5b所觀察到的,執(zhí)行TERNL0G指令以對分別保持B、C和D值的多個元素的 三個輸入向量執(zhí)行邏輯函數(shù)F(510)。TERNL0G指令具有附加輸入操作數(shù),其指定對于所執(zhí) 行的特定輪將執(zhí)行的適當函數(shù)F。然后執(zhí)行R0TATELEFT指令(511),該指令旋轉(zhuǎn)保持A值 的多個元素的向量輸入的元素??稍趩蝹€微操作中執(zhí)行R0TATELEFT指令。
[0067] 然后執(zhí)行第一 VPADD指令(512),該指令將指令510、511的結(jié)果連同保持E值的多 個元素的第三輸入向量相加??稍趩蝹€微操作中執(zhí)行VPADD指令,且忽略來自加法的任何 進位超出或溢出。不引起任何算術(shù)標志。
[0068] 然后執(zhí)行第二VPADD指令(513),該指令將指令512的結(jié)果與分別保持Wt和Kt值 的第二和第三輸入向量相加??稍趩蝹€微操作中執(zhí)行第二VPADD指令,且忽略來自加法的 任何進位超出或溢出。不引起任何算術(shù)標志。
[0069] 然后執(zhí)行另一個R0TATELEFT指令(514),該指令旋轉(zhuǎn)具有A值的多個元素的輸入 向量。
[0070] 在這點,指令513的結(jié)果被識別為具有用于下一輪的A值。具有用于剛剛執(zhí)行的 輪的A值的向量被標識為具有用于下一輪的B值。指令514的結(jié)果被識別為具有用于下一 輪的C值。具有用于剛剛執(zhí)行的輪的C值的向量被識別為具有用于下一輪的D值,且具有 用于剛剛執(zhí)行的輪的D值的向量被識別為具有用于下一輪的E值。
[0071] 然后重復(fù)該過程(515),以計算下一輪。可使用分支指令以實現(xiàn)循環(huán)返回至下一 輪。
[0072] 示例性指令格式
[0073] 本文中所描述的指令的實施例可以不同的格式體現(xiàn)。例如,本文描述的指令可體 現(xiàn)為VEX、通用向量友好或其它格式。以下討論VEX和通用向量友好格式的細節(jié)。另外,在 下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。指令的實施例可在這些系統(tǒng)、架構(gòu)、以及流水線 上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。
[0074] VEX指令格式
[0075] VEX編碼允許指令具有兩個以上操作數(shù),并且允許SMD向量寄存器比128位長。 VEX前綴的使用提供了三個操作數(shù)(或者更多)句法。例如,先前的兩個操作數(shù)指令執(zhí)行 蓋寫源操作數(shù)的操作(諸如A = A+B)。VEX前綴的使用使操作數(shù)執(zhí)行非破壞性操作,諸如 A = B+C。
[0076] 圖6A示出示例性AVX指令格式,包括VEX前綴602、實操作碼字段630、M〇D R/M字 節(jié)640、SIB字節(jié)650、位移字段662以及IMM8672。圖6B示出來自圖6A的哪些字段構(gòu)成完 整操作碼字段674和基礎(chǔ)操作字段642。圖6C示出來自圖6A的哪些字段構(gòu)成寄存器索引 字段644。
[0077] VEX前綴(字節(jié)0-2)602以三字節(jié)形式進行編碼。第一字節(jié)是格式字段640 (VEX 字節(jié)0,位[7:0]),該格式字段640包含明確的C4字節(jié)值(用于區(qū)分C4指令格式的唯一 值)。第二-第三字節(jié)(VEX字節(jié)1-2)包括提供專用能力的多個位字段。具體地,REX字段 605 (VEX字節(jié)1,位[7-5])由VEX. R位字段(VEX字節(jié)1,位[7] - R)、VEX. X位字段(VEX字 節(jié)1,位[6] -X)以及VEX. B位字段(VEX字節(jié)1,位[5] -B)組成。這些指令的其他字段對 如在本領(lǐng)域中已知的寄存器索引的較低三個位(rrr、XXX以及bbb)進行編碼,由此可通過 增加 VEX. R、VEX. X以及VEX. B來形成Rrrr、Xxxx以及Bbbb。操作碼映射字段615 (VEX字節(jié) 1,位[4:0] -mmmmm)包括對隱含的領(lǐng)先操作碼字節(jié)進行編碼的內(nèi)容。W字段664 (VEX字節(jié) 2,位[7] -W)由記號VEX. W表示,并且提供依賴于該指令而不同的功能。VEX. ww 620 (VEX 字節(jié)2,位[6:3]-vvvv)的作用可包括如下:1)VEX. vvvv對以反轉(zhuǎn)(1 (多個)補碼)的形 式指定第一源寄存器操作數(shù)進行編碼,且對具有兩個或兩個以上源操作數(shù)的指令有效;2) VEX. vvvv針對特定向量位移對以1 (多個)補碼的形式指定的目的地寄存器操作數(shù)進行編 碼;或者3) VEX. vvvv不對任何操作數(shù)進行編碼,保留該字段,并且應(yīng)當包含1111b。如果 VEX. L 668尺寸字段(VEX字節(jié)2,位[2]-L) =0,則它指示128位向量;如果VEX. L= 1,則 它指示256位向量。前綴編碼字段625 (VEX字節(jié)2,位[1:0]-ρρ)提供用于基礎(chǔ)操作字段的 附加位。
[0078] 實操作碼字段630 (字節(jié)3)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中被 指定。
[0079] MOD R/Μ 字段 640 (字節(jié) 4)包括 MOD 字段 642 (位[7-6] )、Reg 字段 644 (位[5-3])、 以及R/Μ字段646 (位[2-0])。Reg字段644的作用可包括如下:對目的地寄存器操作數(shù)或 源寄存器操作數(shù)(Rrrr中的rrr)進行編碼;或者被視為操作碼擴展且不用于對任何指令操 作數(shù)進行編碼。R/Μ字段646的作用可包括如下:對引用存儲器地址的指令操作數(shù)進行編 碼;或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼。
[0080] 比例、索引、基址(SIB)-比例字段650(字節(jié)5)的內(nèi)容包括用于存儲器地址生 成的SS652(位[7-6])。先前已經(jīng)針對寄存器索引Xxxx和Bbbb參考了 SIB. XXX 654(位
[5-3])和 SIB. bbb 656(位[2-0])的內(nèi)容。
[0081] 位移字段662和立即數(shù)字段(IMM8) 672包含地址數(shù)據(jù)。
[0082] 通用向量友好指令格式
[0083] 向量友好指令格式是適于向量指令(例如,存在專用于向量操作的特定字段)的 指令格式。盡管描述了其中通過向量友好指令格式支持向量和標量運算兩者的實施例,但 是替換實施例僅使用通過向量友好指令格式的向量運算。
[0084] 圖7A-7B是示出根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其指令模板的 框圖。圖7A是示出根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其A類指令模板的框 圖;而圖7B是示出根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其B類指令模板的框 圖。具體地,針對通用向量友好指令格式700定義A類和B類指令模板,兩者包括無存儲器 訪問705的指令模板和存儲器訪問720的指令模板。在向量友好指令格式的上下文中的術(shù) 語"通用"指不束縛于任何專用指令集的指令格式。
[0085] 盡管將描述其中向量友好指令格式支持64字節(jié)向量操作數(shù)長度(或尺寸)與32 位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或尺寸)(并且由此,64字節(jié)向量由16雙字 尺寸的元素或者替換地8四字尺寸的元素組成)、64字節(jié)向量操作數(shù)長度(或尺寸)與16 位(2字節(jié))或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸)、32字節(jié)向量操作數(shù)長度(或尺寸) 與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺 寸)、以及16字節(jié)向量操作數(shù)長度(或尺寸)與32位(4字節(jié))、64位(8字節(jié))、16位(2 字節(jié))、或8位(1字節(jié))數(shù)據(jù)元素寬度(或尺寸)的本發(fā)明的實施例,但是替換實施例可支 持更大、更小、和/或不同的向量操作數(shù)尺寸(例如,256字節(jié)向量操作數(shù))與更大、更小或 不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)。
[0086] 圖7A中的A類指令模板包括:1)在無存儲器訪問705的指令模板內(nèi),示出無存儲 器訪問的完全舍入(round)控制型操作710的指令模板、以及無存儲器訪問的數(shù)據(jù)變換型 操作715715的指令模板;以及2)在存儲器訪問720的指令模板內(nèi),示出存儲器訪問的時 效性725的指令模板和存儲器訪問的非時效性730的指令模板。圖7B中的B類指令模板 包括:1)在無存儲器訪問705的指令模板內(nèi),示出無存儲器訪問的寫掩碼控制的部分舍入 控制型操作712的指令模板以及無存儲器訪問的寫掩碼控制的vsize型操作717的指令模 板;以及2)在存儲器訪問720的指令模板內(nèi),示出存儲器訪問的寫掩碼控制727的指令模 板。
[0087] 通用向量友好指令格式700包括以下列出的按照在圖7A-7B中示出的順序的如下 字段。
[0088] 結(jié)合以上涉及圖4至5b的討論,在一實施例中,參考以下在圖7A-B和8中提供的 格式細節(jié),可利用非存儲器存取指令類型705或存儲器存取指令類型720??稍谝韵旅枋龅?寄存器地址字段744中標識輸入向量操作數(shù)和目的地的地址。指令可被格式化為破壞性的 或非破壞性的。
[0089] 格式字段740 -該字段中的特定值(指令格式標識符值)唯一地標識向量友好指 令格式,并且由此標識指令在指令流中以向量友好指令格式出現(xiàn)。由此,該字段在無需僅有 通用向量友好指令格式的指令集的意義上是任選的。
[0090] 基礎(chǔ)操作字段742 -其內(nèi)容區(qū)分不同的基礎(chǔ)操作。
[0091] 寄存器索引字段744-其內(nèi)容直接或者通過地址生成來指定源或目的地操作數(shù)在 寄存器中或者在存儲器中的位置。這些字段包括足夠數(shù)量的位以從PxQ(例如,32x512、 16xl28、32xl024、64xl024)個寄存器組選擇N個寄存器。盡管在一個實施例中N可高達三個 源和一個目的地寄存器,但是替換實施例可支持更多或更少的源和目的地寄存器(例如, 可支持高達兩個源,其中這些源中的一個源還用作目的地,可支持高達三個源,其中這些源 中的一個源還用作目的地,可支持高達兩個源和一個目的地)。
[0092] 修飾符(modifier)字段746 -其內(nèi)容將以指定存儲器訪問的通用向量指令格式出 現(xiàn)的指令與不指定存儲器訪問的通用向量指令格式出現(xiàn)的指令區(qū)分開;即在無存儲器訪問 705的指令模板與存儲器訪問720的指令模板之間。存儲器訪問操作讀取和/或?qū)懭氲酱?儲器層次(在一些情況下,使用寄存器中的值來指定源和/或目的地地址),而非存儲器訪 問操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個實施例中,該字段還在三種 不同的方式之間選擇以執(zhí)行存儲器地址計算,但是替換實施例可支持更多、更少或不同的 方式來執(zhí)行存儲器地址計算。
[0093] 擴充操作字段750 -其內(nèi)容區(qū)分除基礎(chǔ)操作以外還要執(zhí)行各種不同操作中的哪 一個操作。該字段是上下文專用的。在本發(fā)明的一個實施例中,該字段被分成類字段768、 α字段752、以及β字段754。擴充操作字段750允許在單一指令而非2、3或4個指令中 執(zhí)行多組共同的操作。
[0094] 比例字段760 -其內(nèi)容允許用于存儲器地址生成(例如,用于使用2ttw*索引+ 基址的地址生成)的索引字段的內(nèi)容的比例。
[0095] 位移字段762A -其內(nèi)容用作存儲器地址生成的一部分(例如,用于使用2 索 引+基址+位移的地址生成)。
[0096] 位移因數(shù)字段762B (注意,位移字段762A直接在位移因數(shù)字段762B上的并置指 示使用一個或另一個)一其內(nèi)容用作地址生成的一部分,它指定通過存儲器訪問的尺寸 (N)按比例縮放的位移因數(shù),其中N是存儲器訪問中的字節(jié)數(shù)量(例如,用于使用索 弓丨+基址+按比例縮放的位移的地址生成)。忽略冗余的低階位,并且因此將位移因數(shù)字段 的內(nèi)容乘以存儲器操作數(shù)總尺寸(N)以生成在計算有效地址中使用的最終位移。N的值由 處理器硬件在運行時基于完整操作碼字段774 (稍候在本文中描述)和數(shù)據(jù)操縱字段754C 確定。位移字段762A和位移因數(shù)字段762B在它們不用于無存儲器訪問705的指令模板和 /或不同的實施例可實現(xiàn)兩者中的僅一個或均未實現(xiàn)的意義上是任選的。
[0097] 數(shù)據(jù)元素寬度字段764 -其內(nèi)容區(qū)分使用多個數(shù)據(jù)元素寬度中的哪一個(在一些 實施例中用于所有指令,在其他實施例中只用于一些指令)。該字段在如果支持僅一個數(shù)據(jù) 元素寬度和/或使用操作碼的某一方面來支持數(shù)據(jù)元素寬度則不需要的意義上是任選的。 [0098] 寫掩碼字段770 -其內(nèi)容在每一數(shù)據(jù)元素位置的基礎(chǔ)上控制目的地向量操作數(shù) 中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴充操作的結(jié)果。A類指令模板支持合并-寫掩碼, 而B類指令模板支持合并寫掩碼和歸零寫掩碼兩者。當合并的向量掩碼允許在執(zhí)行任何操 作(由基礎(chǔ)操作和擴充操作指定)期間保護目的地中的任何元素集免于更新時,在另一實 施例中,保持其中對應(yīng)掩碼位具有〇的目的地的每一元素的舊值。相反,當歸零向量掩碼允 許在執(zhí)行任何操作(由基礎(chǔ)操作和擴充操作指定)期間使目的地中的任何元素集歸零時, 在一個實施例中,目的地的元素在對應(yīng)掩碼位具有〇值時被設(shè)為0。該功能的子集是控制執(zhí) 行的操作的向量長度的能力(即,從第一個到最后一個要修改的元素的跨度),然而,被修 改的元素不一定要是連續(xù)的。由此,寫掩碼字段770允許部分向量操作,這包括加載、存儲、 算術(shù)、邏輯等。盡管描述了其中寫掩碼字段770的內(nèi)容選擇了多個寫掩碼寄存器中的包含 要使用的寫掩碼的一個寫掩碼寄存器(并且由此寫掩碼字段770的內(nèi)容間接地標識了要執(zhí) 行的掩蔽操作)的本發(fā)明的實施例,但是替換實施例相反或另外允許掩碼寫字段770的內(nèi) 容直接地指定要執(zhí)行的掩蔽操作。
[0099] 立即數(shù)字段772 -其內(nèi)容允許對立即數(shù)的指定。該字段在實現(xiàn)不支持立即數(shù)的通 用向量友好格式中不存在且在不使用立即數(shù)的指令中不存在的意義上是任選的。
[0100] 類字段768 -其內(nèi)容在不同類的指令之間進行區(qū)分。參考圖7A-B,該字段的內(nèi)容 在A類和B類指令之間進行選擇。在圖7A-B中,圓角方形用于指示專用值存在于字段中 (例如,在圖7A-B中分別用于類字段768的A類768A和B類768B)。
[0101] A類指令模板
[0102] 在A類非存儲器訪問705的指令模板的情況下,α字段752被解釋為其內(nèi)容區(qū)分 要執(zhí)行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的舍入型操作710和無存 儲器訪問的數(shù)據(jù)變換型操作715的指令模板分別指定舍入752Α. 1和數(shù)據(jù)變換752Α. 2)的 RS字段752Α,而β字段754區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無存儲器訪問705 指令模板中,比例字段760、位移字段762Α以及位移比例字段762Β不存在。
[0103] 無存儲器訪問的指令模板一完全舍入控制型操作
[0104] 在無存儲器訪問的完全舍入控制型操作710的指令模板中,β字段754被解釋為 其內(nèi)容提供靜態(tài)舍入的舍入控制字段754Α。盡管在本發(fā)明的所述實施例中舍入控制字段 754Α包括抑制所有浮點異常(SAE)字段756和舍入操作控制字段758,但是替換實施例可 支持、可將這些概念兩者都編碼成相同的字段或者只有這些概念/字段中的一個或另一個 (例如,可只有舍入操作控制字段758)。
[0105] SAE字段756 -其內(nèi)容區(qū)分是否停用異常事件報告;當SAE字段756的內(nèi)容指示 啟用抑制時,給定指令不報告任何種類的浮點異常標志且不喚起任何浮點異常處理程序。
[0106] 舍入操作控制字段758 -其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(例如,向上 舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段758允許在每一指令 的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一 個實施例中,舍入操作控制字段750的內(nèi)容覆蓋該寄存器值。
[0107] 無存儲器訪問的指令模板一數(shù)據(jù)變換型操作
[0108] 在無存儲器訪問的數(shù)據(jù)變換型操作715的指令模板中,β字段754被解釋為數(shù)據(jù) 變換字段754Β,其內(nèi)容區(qū)分要執(zhí)行多個數(shù)據(jù)變換中的哪一個(例如,無數(shù)據(jù)變換、拌和、廣 播)。
[0109] 在Α類存儲器訪問720的指令模板的情況下,α字段752被解釋為驅(qū)逐提示字段 752Β,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(在圖7Α中,對于存儲器訪問時效性725的 指令模板和存儲器訪問非時效性730的指令模板分別指定時效性的752Β. 1和非時效性的 752Β. 2),而β字段754被解釋為數(shù)據(jù)操縱字段754C,其內(nèi)容區(qū)分要執(zhí)行多個數(shù)據(jù)操縱操作 (也稱為基元(primitive))中的哪一個(例如,無操縱、廣播、源的向上轉(zhuǎn)換、以及目的地的 向下轉(zhuǎn)換)。存儲器訪問720的指令模板包括比例字段760、以及任選的位移字段762A或 位移比例字段762B。
[oho]向量存儲器指令使用轉(zhuǎn)換支持來執(zhí)行來自存儲器的向量加載并將向量存儲到存 儲器。如同尋常的向量指令,向量存儲器指令以數(shù)據(jù)元素式的方式與存儲器來回傳輸數(shù)據(jù), 其中實際傳輸?shù)脑赜蛇x為寫掩碼的向量掩碼的內(nèi)容規(guī)定。
[0111] 存儲器訪問的指令模板一時效性的
[0112] 時效性的數(shù)據(jù)是可能很快地重新使用足以從高速緩存受益的數(shù)據(jù)。然而,這是提 示且不同的處理器可以不同的方式實現(xiàn)它,包括完全忽略該提示。
[0113] 存儲器訪問的指令模板一非時效性的
[0114] 非時效性的數(shù)據(jù)是不可能很快地重新使用足以從第一級高速緩存中的高速緩存 受益且應(yīng)當給予驅(qū)逐優(yōu)先級的數(shù)據(jù)。然而,這是提示且不同的處理器可以不同的方式實現(xiàn) 它,包括完全忽略該提示。
[0115] B類指令模板
[0116] 在B類指令模板的情況下,α字段752被解釋為寫掩碼控制⑵字段752C,其內(nèi) 容區(qū)分由寫掩碼字段770控制的寫掩蔽操作應(yīng)當是合并還是歸零。
[0117] 在Β類非存儲器訪問705的指令模板的情況下,β字段754的一部分被解釋為RL 字段757Α,其內(nèi)容區(qū)分要執(zhí)行不同擴充操作類型中的哪一種(例如,針對無存儲器訪問的 寫掩碼控制部分舍入控制類型操作712的指令模板和無存儲器訪問的寫掩碼控制VSIZE型 操作717的指令模板分別指定舍入757Α. 1和向量長度(VSIZE) 757Α. 2),而β字段754的 其余部分區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無存儲器訪問705指令模板中,比例 字段760、位移字段762Α以及位移比例字段762Β不存在。
[0118] 在無存儲器訪問的寫掩碼控制的部分舍入控制型操作710的指令模板中,β字段 754的其余部分被解釋為舍入操作字段759Α,并且停用異常事件報告(給定指令不報告任 何種類的浮點異常標志且不喚起任何浮點異常處理程序)。
[0119] 舍入操作控制字段759Α -只作為舍入操作控制字段758,其內(nèi)容區(qū)分執(zhí)行一組舍 入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作 控制字段759Α允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入 模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段750的內(nèi)容覆蓋該寄存器 值。
[0120] 在無存儲器訪問的寫掩碼控制VSIZE型操作717的指令模板中,β字段754的其 余部分被解釋為向量長度字段759Β,其內(nèi)容區(qū)分要執(zhí)行多個數(shù)據(jù)向量長度中的哪一個(例 如,128字節(jié)、256字節(jié)、或512字節(jié))。
[0121] 在Β類存儲器訪問720的指令模板的情況下,β字段754的一部分被解釋為廣播 字段757Β,其內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作,而β字段754的其余部分被解釋 為向量長度字段759Β。存儲器訪問720的指令模板包括比例字段760、以及任選的位移字 段762Α或位移比例字段762Β。
[0122] 針對通用向量友好指令格式700,示出完整操作碼字段774包括格式字段740、基 礎(chǔ)操作字段742以及數(shù)據(jù)元素寬度字段764。盡管示出了其中完整操作碼字段774包括所 有這些字段的一個實施例,但是完整操作碼字段774包括在不支持所有這些字段的實施例 中的少于所有的這些字段。完整操作碼字段774提供操作碼(opcode)。
[0123] 擴充操作字段750、數(shù)據(jù)元素寬度字段764以及寫掩碼字段770允許在每一指令的 基礎(chǔ)上以通用向量友好指令格式指定這些特征。
[0124] 寫掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類型的指令,因為這些指令允許 基于不同的數(shù)據(jù)元素寬度應(yīng)用該掩碼。
[0125] 在A類和B類內(nèi)出現(xiàn)的各種指令模板在不同的情形下是有益的。在本發(fā)明的一些 實施例中,不同處理器或者處理器內(nèi)的不同核可支持僅A類、僅B類、或者可支持兩類。舉 例而言,期望用于通用計算的高性能通用無序核可僅支持B類,期望主要用于圖形和/或科 學(吞吐量)計算的核可僅支持A類,并且期望用于兩者的核可支持兩者(當然,具有來自 兩類的模板和指令的一些混合、但是并非來自兩類的所有模板和指令的核在本發(fā)明的范圍 內(nèi))。同樣,單一處理器可包括多個核,所有核支持相同的類或者其中不同的核支持不同的 類。舉例而言,在具有分離的圖形和通用核的處理器中,圖形核中的期望主要用于圖形和/ 或科學計算的一個核可僅支持A類,而通用核中的一個或多個可以是具有期望用于通用計 算的僅支持B類的無序執(zhí)行和寄存器重命名的高性能通用核。沒有單獨的圖形核的另一處 理器可包括支持A類和B類兩者的一個或多個通用有序或無序核。當然,在本發(fā)明的不同 實施例中,來自一類的特征也可在其他類中實現(xiàn)。以高級語言撰寫的程序可被輸入(例如, 及時編譯或者統(tǒng)計編譯)到各種不同的可執(zhí)行形式,包括:1)具有用于執(zhí)行的目標處理器 支持的類的指令的形式;或者2)具有使用所有類的指令的不同組合而編寫的替換例程且 具有選擇這些例程以基于由當前正在執(zhí)行代碼的處理器支持的指令而執(zhí)行的控制流代碼 的形式。
[0126] 示例性專用向量友好指令格式
[0127] 圖8是示出根據(jù)本發(fā)明的實施例的示例性專用向量友好指令格式的框圖。圖8示 出在其指定位置、尺寸、解釋和字段的次序、以及那些字段中的一些字段的值的意義上是專 用的專用向量友好指令格式800。專用向量友好指令格式800可用于擴展x86指令集,并 且由此一些字段類似于在現(xiàn)有x86指令集及其擴展(例如,AVX)中使用的那些字段或與之 相同。該格式保持與具有擴展的現(xiàn)有x86指令集的前綴編碼字段、實操作碼字節(jié)字段、MOD R/M字段、SIB字段、位移字段、以及立即數(shù)字段一致。示出來自圖7的字段,來自圖8的字 段映射到來自圖7的字段。
[0128] 應(yīng)當理解,雖然出于說明的目的在通用向量友好指令格式700的上下文中參考專 用向量友好指令格式800描述了本發(fā)明的實施例,但是本發(fā)明不限于專用向量友好指令格 式800,除非另有聲明。例如,通用向量友好指令格式700構(gòu)想各種字段的各種可能的尺寸, 而專用向量友好指令格式800被示為具有專用尺寸的字段。作為具體示例,盡管在專用向 量友好指令格式800中數(shù)據(jù)元素寬度字段764被示為一位字段,但是本發(fā)明不限于此(即, 通用向量友好指令格式700構(gòu)想數(shù)據(jù)元素寬度字段764的其他尺寸)。
[0129] 通用向量友好指令格式700包括以下列出的按照圖8A中示出的順序的如下字段。
[0130] EVEX前綴(字節(jié)0-3) 802 -以四字節(jié)形式進行編碼。
[0131] 格式字段740(EVEX字節(jié)0,位[7:0]) -第一字節(jié)(EVEX字節(jié)0)是格式字段740, 并且它包含0x62 (在本發(fā)明的一個實施例中用于區(qū)分向量友好指令格式的唯一值)。
[0132] 第二-第四字節(jié)(EVEX字節(jié)1-3)包括提供專用能力的多個位字段。
[0133] REX 字段 805 (EVEX 字節(jié) 1,位[7-5]) -由 EVEX. R 位字段(EVEX 字節(jié) 1,位[7] - R)、 EVEX. X 位字段(EVEX 字節(jié) 1,位[6] - X)以及(757BEX 字節(jié) 1,位[5] - B)組成。EVEX. R、 EVEX. X和EVEX. B位字段提供與對應(yīng)VEX位字段相同的功能,并且使用(多個)1補碼的形 式進行編碼,即ZMMO被編碼為1111B,ZMM15被編碼為0000B。這些指令的其他字段對如在 本領(lǐng)域中已知的寄存器索引的較低三個位(rrr、xxx、以及bbb)進行編碼,由此可通過增加 EVEX. R、EVEX. X 以及 EVEX. B 來形成 Rrrr、Xxxx 以及 Bbbb。
[0134] REX'字段710-這是REX'字段710的第一部分,并且是用于對擴展的32個寄存器 集合的較高16個或較低16個寄存器進行編碼的EVEX. R'位字段(EVEX字節(jié)1,位[4] - R')。 在本發(fā)明的一個實施例中,該位與以下指示的其他位一起以位反轉(zhuǎn)的格式存儲以(在公知 x86的32位模式下)與實操作碼字節(jié)是62的BOUND指令進行區(qū)分,但是在MOD R/M字段 (在下文中描述)中不接受MOD字段中的值11 ;本發(fā)明的替換實施例不以反轉(zhuǎn)的格式存儲 該指示的位以及其他指示的位。值1用于對較低16個寄存器進行編碼。換句話說,通過組 合EVEX. R'、EVEX. R、以及來自其他字段的其他RRR來形成R' Rrrr。
[0135] 操作碼映射字段815(EVEX字節(jié)1,位[3:0] -_m)-其內(nèi)容對隱含的領(lǐng)先操作碼 字節(jié)(0F、0F 38、或0F 3)進行編碼。
[0136] 數(shù)據(jù)元素寬度字段764 (EVEX字節(jié)2,位[7] -W) -由記號EVEX. W表示。EVEX. W 用于定義數(shù)據(jù)類型(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)的粒度(尺寸)。
[0137] EVEX. vvvv 820 (EVEX 字節(jié) 2,位[6:3]-vvvv) - EVEX. vvvv 的作用可包括如下:1) EVEX. vvvv對以反轉(zhuǎn)((多個)1補碼)的形式指定的第一源寄存器操作數(shù)進行編碼且對具 有兩個或兩個以上源操作數(shù)的指令有效;2)EVEX. vvvv針對特定向量位移對以(多個)1補 碼的形式指定的目的地寄存器操作數(shù)進行編碼;或者3)EVEX. vvvv不對任何操作數(shù)進行編 碼,保留該字段,并且應(yīng)當包含1111b。由此,EVEX. vvvv字段820對以反轉(zhuǎn)((多個)1補 碼)的形式存儲的第一源寄存器指定符的4個低階位進行編碼。取決于該指令,額外不同 的EVEX位字段用于將指定符尺寸擴展到32個寄存器。
[0138] EVEX. U 768類字段(EVEX字節(jié)2,位[2]-U) -如果EVEX. U = 0,則它指示A類或 EVEX. U0,如果 EVEX. U = 1,則它指示 B 類或 EVEX. U1。
[0139] 前綴編碼字段825(EVEX字節(jié)2,位[1:0]-ρρ) -提供了用于基礎(chǔ)操作字段的附加 位。除了對以EVEX前綴格式的傳統(tǒng)SSE指令提供支持以外,這也具有壓縮SIMD前綴的益 處(EVEX前綴只需要2位,而不是需要字節(jié)來表達SMD前綴)。在一個實施例中,為了支 持使用以傳統(tǒng)格式和以EVEX前綴格式的SMD前綴(66H、F2H、F3H)的傳統(tǒng)SSE指令,這些 傳統(tǒng)SMD前綴被編碼成SMD前綴編碼字段;并且在運行時在提供給解碼器的PLA之前被 擴展成傳統(tǒng)SMD前綴(因此PLA可執(zhí)行傳統(tǒng)和EVEX格式的這些傳統(tǒng)指令,而無需修改)。 雖然較新的指令可將EVEX前綴編碼字段的內(nèi)容直接作為操作碼擴展,但是為了一致性,特 定實施例以類似的方式擴展,但允許由這些傳統(tǒng)SIMD前綴指定不同的含義。替換實施例可 重新設(shè)計PLA以支持2位SMD前綴編碼,并且由此不需要擴展。
[0140] α 字段 752 (EVEX 字節(jié) 3,位[7] - H1,也稱為 EVEX. HI、EVEX. rs、EVEX. RL、EVEX. 寫掩碼控制、以及EVEX.N,還被示為具有α) -如先前所述的,該字段是上下文專用的。
[0141] β 字段 754(EVEX 字節(jié) 3,位[6:4]-SSS,也稱為 EVEX. s2_Q、EVEX. r2_Q、EVEX. rrl、 EVEX. LLO、EVEX. LLB,還被示為具有β β β) -如先前所述,該字段是內(nèi)容專用的。
[0142] REX'字段710-這是REX'字段1210的其余部分,并且是可用于對擴展的32個 寄存器集合的較高16個或較低16寄存器進行編碼的EVEX. R'位字段(EVEX字節(jié)3,位 [3] -V')。該位以位反轉(zhuǎn)的格式存儲。值1用于對較低16個寄存器進行編碼。換句話說, 通過組合 EVEX. V'、EVEX. vvvv 來形成 V' VVVV。
[0143] 寫掩碼字段770(EVEX字節(jié)3,位[2:0]_kkk) -其內(nèi)容指定寫掩碼寄存器中的寄存 器索引,如先前所述。在本發(fā)明的一個實施例中,特定值EVEX. kkk = 000具有暗示沒有寫 掩碼用于特定指令(這可以各種方式實現(xiàn),包括使用硬連線到所有的寫掩碼或者旁路掩碼 硬件的硬件來實現(xiàn))的特別行為。
[0144] 實操作碼字段830 (字節(jié)4)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中被 指定。
[0145] MOD R/M字段840 (字節(jié)5)包括MOD字段842、Reg字段844、以及R/M字段846。 如先前所述的,MOD字段842的內(nèi)容將存儲器訪問和非存儲器訪問操作區(qū)分開。Reg字段 844的作用可被歸結(jié)為兩種情形:對目的地寄存器操作數(shù)或源寄存器操作數(shù)進行編碼;或 者被視為操作碼擴展且不用于對任何指令操作數(shù)進行編碼。R/M字段846的作用可包括如 下:對引用存儲器地址的指令操作數(shù)進行編碼;或者對目的地寄存器操作數(shù)或源寄存器操 作數(shù)進行編碼。
[0146] 比例、索引、基址(SIB)字節(jié)(字節(jié)6)-如先前所述的,比例字段750的內(nèi)容用于 存儲器地址生成。SIB. XXX 854和SIB. bbb 856 -先前已經(jīng)針對寄存器索引Xxxx和Bbbb 提及了這些字段的內(nèi)容。
[0147] 位移字段762A (字節(jié)7-10) -當MOD字段842包含10時,字節(jié)7-10是位移字段 762A,并且它與傳統(tǒng)32位位移(disp32) -樣地工作,并且以字節(jié)粒度工作。
[0148] 位移因數(shù)字段762B (字節(jié)7) -當MOD字段842包含01時,字節(jié)7是位移因數(shù)字 段762B。該字段的位置與傳統(tǒng)x86指令集8位位移(disp8)的位置相同,它以字節(jié)粒度工 作。由于disp8是符號擴展的,因此它可只在-128和127字節(jié)偏移量之間尋址;在64字節(jié) 高速緩存線的方面,disp8使用可被設(shè)為僅四個真正有用的值-128、-64、0和64的8位;由 于常常需要更大的范圍,所以使用disp32 ;然而,disp32需要4個字節(jié)。與disp8和disp32 對比,位移因數(shù)字段762B是disp8的重新解釋;當使用位移因數(shù)字段762B時,通過位移因 數(shù)字段的內(nèi)容乘以存儲器操作數(shù)訪問的尺寸(N)來確定實際位移。該類型的位移被稱為 disp8*N。這減小了平均指令長度(用于位移但具有大得多的范圍的單一字節(jié))。這種壓縮 位移基于有效位移是存儲器訪問的粒度的倍數(shù)的假設(shè),并且由此地址偏移量的冗余低階位 不需要被編碼。換句話說,位移因數(shù)字段762B替代傳統(tǒng)x86指令集8位位移。由此,位移 因數(shù)字段762B以與x86指令集8位位移相同的方式(因此在ModRM/SIB編碼規(guī)則中沒有 變化)進行編碼,唯一的不同在于,disp8超載至disp8*N。換句話說,在編碼規(guī)則或編碼長 度中沒有變化,而僅在通過硬件對位移值的解釋中有變化(這需要按存儲器操作數(shù)的尺寸 按比例縮放位移量以獲得字節(jié)式地址偏移量)。
[0149] 立即數(shù)字段772如先前所述地操作。
[0150] 完整操作碼字段
[0151] 圖8B是示出根據(jù)本發(fā)明的實施例的構(gòu)成完整操作碼字段774的具有專用向量友 好指令格式800的字段的框圖。具體地,完整操作碼字段774包括格式字段740、基礎(chǔ)操作 字段742、以及數(shù)據(jù)元素寬度(W)字段764?;A(chǔ)操作字段742包括前綴編碼字段825、操作 碼映射字段815以及實操作碼字段830。
[0152] 寄存器索引字段
[0153] 圖8C是示出根據(jù)本發(fā)明的一個實施例的構(gòu)成寄存器索引字段744的具有專用向 量友好指令格式800的字段的框圖。具體地,寄存器索引字段744包括REX字段805、REX' 字段 810、MODR/M. reg 字段 844、MODR/M. r/m 字段 846、VVVV 字段 820、XXX 字段 854 以及 bbb 字段 856。
[0154] 擴充操作字段
[0155] 圖8D是示出根據(jù)本發(fā)明的一個實施例的構(gòu)成擴充操作字段750的具有專用向量 友好指令格式800的字段的框圖。當類(U)字段768包含0時,它表明EVEX.U0(A類768A); 當它包含1時,它表明EVEX. U1 (B類768B)。當U = 0且MOD字段842包含11 (表明無存儲 器訪問操作)時,α字段752 (EVEX字節(jié)3,位[7] - EH)被解釋為rs字段752A。當rs字 段752A包含1 (舍入752A. 1)時,β字段754 (EVEX字節(jié)3,位[6:4] - SSS)被解釋為舍入 控制字段754Α。舍入控制字段754Α包括一位SAE字段756和兩位舍入操作字段758。當 rs字段752Α包含0 (數(shù)據(jù)變換752Α. 2)時,β字段754 (EVEX字節(jié)3,位[6:4] - SSS)被解 釋為三位數(shù)據(jù)變換字段754Β。當U = 0且MOD字段842包含00、01或10 (表明存儲器訪問 操作)時,α字段752(EVEX字節(jié)3,位[7] - EH)被解釋為驅(qū)逐提示(EH)字段752B且β 字段754 (EVEX字節(jié)3,位[6:4] -SSS)被解釋為三位數(shù)據(jù)操縱字段754C。
[0156] 當U = 1時,α字段752 (EVEX字節(jié)3,位[7] - EH)被解釋為寫掩碼控制(Z)字段 752C。當U = 1且MOD字段842包含11 (表明無存儲器訪問操作)時,β字段754的一部 分(EVEX字節(jié)3,位[4] - SQ)被解釋為RL字段757Α ;當它包含1 (舍入757Α. 1)時,β字 段754的其余部分(EVEX字節(jié)3,位[6-5] - S2J被解釋為舍入操作字段759Α,而當RL字段 757A包含0(VSIZE 757.A2)時,β字段754的其余部分(EVEX字節(jié)3,位[6-5=-?^)被解 釋為向量長度字段759B (EVEX字節(jié)3,位[6-5] - Lg)。當U = 1且MOD字段842包含00、 01或10 (表明存儲器訪問操作)時,β字段754 (EVEX字節(jié)3,位[6:4] - SSS)被解釋為向 量長度字段759B (EVEX字節(jié)3,位[6-5] - Lg)和廣播字段757B (EVEX字節(jié)3,位[4] - B)。
[0157] 示例性寄存器架構(gòu)
[0158] 圖9是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)900的框圖。在所示出的實施例中, 有32個512位寬的向量寄存器910 ;這些寄存器被引用為zmmO到zmm31。較低的16zmm寄 存器的較低階256個位覆蓋在寄存器ymm〇-16上。較低的16zmm寄存器的較低階128個位 (ymm寄存器的較低階128個位)覆蓋在寄存器xmmO-15上。專用向量友好指令格式800對 這些覆蓋的寄存器組操作,如在以下表格中所示的。
[0159]
【權(quán)利要求】
1. 一種方法,包括: 在實現(xiàn)于半導(dǎo)體芯片上的指令執(zhí)行流水線內(nèi)執(zhí)行以下: 通過執(zhí)行單個指令對三個輸入向量操作數(shù)進行求和;以及 即使所述求和的結(jié)果產(chǎn)生比設(shè)計成傳輸所述和的電路能夠傳輸?shù)奈桓嗟奈?,也不?起任何算術(shù)標志。
2. 如權(quán)利要求1所述的方法,其特征在于,利用單個微操作來執(zhí)行所述求和。
3. 如權(quán)利要求1所述的方法,其特征在于,所述和的結(jié)果是否被寫在所述輸入向量操 作數(shù)之一上是在所述指令的指令格式中指定的。
4. 如權(quán)利要求1所述的方法,其特征在于,進一步包括: 通過執(zhí)行以下單個指令對三個不同的輸入向量操作數(shù)進行求和,所述不同的向量操作 數(shù)之一是由所述單個指令執(zhí)行的所述求和的結(jié)果;以及 即使所述以下單個指令的所述求和的結(jié)果產(chǎn)生比設(shè)計成傳輸所述和的硬件能夠傳輸 的位更多的位,也不引起任何算術(shù)標志。
5. 如權(quán)利要求4所述的方法,其特征在于,還包括重復(fù)地迭代權(quán)利要求1和4的過程以 執(zhí)行多輪密碼散列過程。
6. 如權(quán)利要求5所述的方法,其特征在于,執(zhí)行所述多輪包括對于每輪對三個輸入操 作數(shù)向量執(zhí)行邏輯函數(shù)指令,其中邏輯函數(shù)指令還具有指定將對所述三個輸入操作數(shù)向量 執(zhí)行哪種特定的邏輯函數(shù)的操作數(shù)。
7. 如權(quán)利要求1所述的方法,其特征在于,還包括重復(fù)地迭代權(quán)利要求1的過程以執(zhí)行 多輪密碼散列過程。
8. -種裝置,包括: 實現(xiàn)在微半導(dǎo)體芯片上的指令流水線,包括: 具有邏輯電路的執(zhí)行單元,用于: 通過執(zhí)行單個指令對三個輸入向量操作數(shù)進行求和;以及 即使所述求和的結(jié)果產(chǎn)生比設(shè)計成傳輸所述和的電路能夠傳輸?shù)奈桓嗟奈?,也不?起任何算術(shù)標志。
9. 如權(quán)利要求8所述的裝置,其特征在于,所述執(zhí)行單元包括單個微操作以執(zhí)行所述 和。
10. 如權(quán)利要求9所述的裝置,其特征在于,所述執(zhí)行單元包括單個3:2保留進位加法 器,其后是加法器。
11. 如權(quán)利要求8所述的裝置,其特征在于,所述指令執(zhí)行單元流水線還包括用于執(zhí)行 第二指令的邏輯電路,所述第二指令對三個輸入向量操作數(shù)執(zhí)行邏輯函數(shù),所述邏輯電路 能夠?qū)λ鋈齻€輸入向量操作數(shù)執(zhí)行不同的邏輯函數(shù),所述第二指令的輸入操作數(shù)指定將 對所述三個輸入向量操作數(shù)執(zhí)行哪個邏輯函數(shù)。
12. -種機器可讀介質(zhì),包含程序代碼,所述程序代碼在由數(shù)字處理系統(tǒng)處理時導(dǎo)致執(zhí) 行一種方法,所述方法包括: 編譯程序代碼以形成指令流,以執(zhí)行一輪加密過程,所述指令流包括: 對三個輸入向量操作數(shù)執(zhí)行邏輯函數(shù)的第一指令,所述第一指令還具有指定將對所述 三個輸入向量操作數(shù)執(zhí)行多個可能的邏輯函數(shù)中的哪一個的輸入操作數(shù);以及 第二和第三指令,每個指令分別對其自身的三個輸入向量操作數(shù)執(zhí)行求和,其中在進 位超出或溢出情況下所述第二和第三指令均不引起算術(shù)標志。
13. 如權(quán)利要求12所述的機器可讀介質(zhì),其特征在于,所述指令流還包括在所述第二 和第三指令之前執(zhí)行的第一旋轉(zhuǎn)指令。
14. 如權(quán)利要求13所述的機器可讀介質(zhì),其特征在于,所述指令流還包括第二旋轉(zhuǎn)指 令。
15. 如權(quán)利要求14所述的機器可讀介質(zhì),其特征在于,所述第一和第二旋轉(zhuǎn)指令在單 個微操作中各自執(zhí)行旋轉(zhuǎn)。
16. 如權(quán)利要求15所述的機器可讀介質(zhì),其特征在于,所述第二和第三指令在單個微 操作中各自執(zhí)行求和。
17. 如權(quán)利要求12所述的機器可讀介質(zhì),其特征在于,所述指令流包括循環(huán)返回以重 新執(zhí)行所述第一、第二和第三指令,以執(zhí)行下一輪所述加密過程。
18. -種機器可讀介質(zhì),包含程序代碼,所述程序代碼在由數(shù)字處理系統(tǒng)處理時導(dǎo)致執(zhí) 行一種方法,所述方法包括: 通過執(zhí)行以下執(zhí)行一輪加密過程: 執(zhí)行第一指令,所述第一指令對三個輸入向量操作數(shù)執(zhí)行邏輯函數(shù),所述第一指令還 具有指定將對所述三個輸入向量操作數(shù)執(zhí)行多個可能的邏輯函數(shù)中的哪一個的輸入操作 數(shù);以及 執(zhí)行第二和第三指令,每個指令分別對其自身的三個輸入向量操作數(shù)執(zhí)行求和,所述 第二和第三指令在進位超出或溢出條件下均不引起算術(shù)標志,所述第二指令的結(jié)果還是所 述第三指令的輸入向量操作數(shù)。
19. 如權(quán)利要求18所述的機器可讀介質(zhì),其特征在于,所述方法還包括在所述第二和 第三指令之前執(zhí)行第一旋轉(zhuǎn)指令。
20. 如權(quán)利要求19所述的機器可讀介質(zhì),其特征在于,所述方法還包括執(zhí)行第二旋轉(zhuǎn) 指令。
21. 如權(quán)利要求18所述的機器可讀介質(zhì),其特征在于,所述方法還包括執(zhí)行用于循環(huán) 返回的分支指令以重新執(zhí)行所述第一、第二和第三指令,以執(zhí)行下一輪所述加密過程。
【文檔編號】G06F9/302GK104126173SQ201180076415
【公開日】2014年10月29日 申請日期:2011年12月23日 優(yōu)先權(quán)日:2011年12月23日
【發(fā)明者】W·K·費格哈利, V·戈帕爾, J·D·吉爾福德, E·奧茲圖科, G·M·沃爾里齊, K·S·雅普, S·M·格爾雷, M·G·迪克森 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1