,字元素0,W 及2-3)內(nèi)。單字大小的元素全部被視為32位無符號二進(jìn)制整數(shù)。在加上每個元素之后, 來自總和的進(jìn)位(例如,位位置0)例如被加到在第一操作數(shù)的字元素1中的結(jié)果的位位置 31。
[0129] 條件碼:代碼保持不變。
[0130] 程序異常:
[013U *具有數(shù)據(jù)異常碼值XOFE的數(shù)據(jù),向量指令,指示未啟用向量工具
[0132] *操作(如果未安裝用于z/Architec化re的向量工具)
[0133] *事務(wù)約束
[0134] 編程注釋:
[01巧]1.第=操作數(shù)的內(nèi)容將在檢驗(yàn)和計(jì)算算法的開頭包含0。
[0136] 2. 16位校驗(yàn)和例如被用于TCP/IP應(yīng)用。下面的程序可在已計(jì)算32位校驗(yàn)和之后 執(zhí)行:
[0137] VE化LF V2, VI,16 (0) (VE化LF-向量元素旋轉(zhuǎn)左邏輯-4字節(jié)值)
[013引VAF V2, VI,V2 (VAF-向量加法-4字節(jié)值)
[0139] 元素2中的半字包含16位校驗(yàn)和。
[0140] 參考圖5B和5C描述有關(guān)向量校驗(yàn)和指令的進(jìn)一步細(xì)節(jié)。在一個實(shí)例中,圖5B示 出在執(zhí)行向量校驗(yàn)和指令時由處理器執(zhí)行的邏輯的一個實(shí)施例,圖5C示出執(zhí)行向量校驗(yàn) 和指令的一個實(shí)例的框圖。
[0141] 參考圖5B,首先,將第一操作數(shù)(OPl)的元素索引巧y)例如設(shè)置為1,從而指示第 一操作數(shù)的元素U步驟530)。類似地,將第=操作數(shù)(0P3)的元素索引巧X)例如設(shè)置為 1,從而指示第=操作數(shù)的元素1(步驟532)。然后,將元素索引巧i)設(shè)置為等于0,并且元 素索引巧y)處的元素(即,該實(shí)例中的元素1)被初始化為〇(步驟534)。在進(jìn)一步實(shí)施例 中,Ex和Ey可被設(shè)置為任何有效的元素索引。
[0142]執(zhí)行端回進(jìn)位(EAC,end around carry)加法,其中OPl(Ey)= OPl(Ey)+0P2(Ei)+0P2(Ei+1)(步驟536)。該樣,輸出向量(OPl)的元素1被設(shè)置為等于該 元素的內(nèi)容加上第二操作數(shù)(0P2)的元素0中的值和第二操作數(shù)的元素1中的值。通過端 回進(jìn)位加法,執(zhí)行加法操作,并且來自加法的任何進(jìn)位被加回總和W產(chǎn)生新的總和。
[0143] 在另一實(shí)施例中,不執(zhí)行上述加法,而是執(zhí)行W下操作:定義臨時累加器值并將其 初始化為0,然后一次加上一個元素。作為另一實(shí)施例,所有字被并行地相加,并且不存在臨 時累加器。其他變型也是可能的。
[0144] 之后,判定是否有其他元素要被加到第二操作數(shù)中(詢問538)。例如,Ei-2是否 小于第二操作數(shù)的元素?cái)?shù)。如果存在更多要被相加的第二操作數(shù)元素,則Ei例如遞增2 (步 驟540),然后處理繼續(xù)執(zhí)行步驟536。
[0145] 在跨第二操作數(shù)加上元素之后,結(jié)果被加到第=操作數(shù)中的值。例如,執(zhí)行第一操 作數(shù)的元素巧y)(其是跨所有第二操作數(shù)元素的EAC加法的總和)與第S操作數(shù)(OP3)的 元素巧X)中的值的端回進(jìn)位加法(即,EACADDOPl(Ey)+OP3 (Ex))(步驟542)。該在圖5C 中W圖形的形式示出。
[0146] 如圖5C所示,第二操作數(shù)550包括多個元素552a-552n,并且該些元素連同第=操 作數(shù)560的字1 (562)中的元素一起被逐個相加在一起。結(jié)果被放入第一操作數(shù)570的元 素U572)。該在數(shù)學(xué)上由W下等式示出;Ey=Ex+Ei的總和,其中i= 0到n,并且加法為 端回進(jìn)位加法。
[0147] 上面描述了跨向量寄存器的元素執(zhí)行校驗(yàn)和,而非執(zhí)行萊恩算術(shù)(lane arithmetic)的向量校驗(yàn)和指令的一個實(shí)施例。在一個實(shí)施例中,向量校驗(yàn)和指令通過借助 端回進(jìn)位加法執(zhí)行跨越求和(sum-across)來執(zhí)行校驗(yàn)和。在一個實(shí)例中,向量校驗(yàn)和指令 從向量寄存器獲取四個4字節(jié)整數(shù)元素并將它們加在一起。來自加法的任何進(jìn)位都被加回 總和。4字節(jié)總和被加到另一操作數(shù)中的4字節(jié)元素,然后被保存在再一向量寄存器中(例 如,向量寄存器的低階4字節(jié)元素,且0被存儲在該向量寄存器的高階元素中)。
[0148] 在另一實(shí)施例中,不使用進(jìn)一步的向量寄存器或另一寄存器來保存值,而是使用 其他寄存器(即,操作數(shù))之一作為累加器。
[0149] 所提供的校驗(yàn)和可被用于保持?jǐn)?shù)據(jù)完整性。校驗(yàn)和經(jīng)常被應(yīng)用于數(shù)據(jù)并且在增雜 信道上發(fā)送W檢驗(yàn)所接收到的數(shù)據(jù)是否正確。在該實(shí)例中,如此處所述,通過將連續(xù)的4字 節(jié)整數(shù)加在一起來計(jì)算校驗(yàn)和。如果具有來自整數(shù)算術(shù)運(yùn)算的進(jìn)位,則該進(jìn)位(額外的1) 被加到當(dāng)前和(runningsum)中。
[0150] 盡管此處描述了校驗(yàn)和,但是類似的技術(shù)也可被用于其他端回進(jìn)位加法。
[0151] 根據(jù)一個方面提供的另一指令為向量伽羅瓦域乘法求和與累加(VGFMA)指令,該 指令的一個實(shí)例在圖6A中示出。在一個例子中,向量伽羅瓦域乘法求和與累加指令600包 括;操作碼字段602a(例如,位0-7)、602b(例如,位40-47),其指示向量伽羅瓦域乘法求和 與累加操作;第一向量字段604(例如,位8-11),其被用于指定第一向量寄存器(Vi);第二 向量寄存器字段606(例如,位12-15),其被用于指定第二向量寄存器(V2);第S向量寄存 器字段608 (例如,位16-19),其被用于指定第=向量寄存器(Vs);掩碼字段(Me) 610 (例如, 位20-23);第四向量寄存器字段612(例如,位32-35),其被用于指定第四向量寄存器(V4); W及RXB字段614 (例如,位36-39)。在一個例子中,字段604-614中的每一個都與操作碼 字段(多個)分離并且獨(dú)立于操作碼字段(多個)。此外,在一個實(shí)施例中,它們相互分離 和獨(dú)立;但是,在其他實(shí)施例中,一個W上字段可進(jìn)行組合。
[0152] 在一個實(shí)例中,由操作碼字段602a指定的操作碼的選定位(例如,前兩位)指定 指令的長度。在該特定實(shí)例中,選定位指示長度為=個半字。此外,指令的格式為具有擴(kuò)展 操作碼字段的向量寄存器和寄存器操作。每個向量(V)字段連同其由RXB指定的對應(yīng)擴(kuò)展 位一起指定向量寄存器。具體而言,對于向量寄存器,包含操作數(shù)的寄存器例如使用加上其 對應(yīng)的寄存器擴(kuò)展位(RXB)作為最高位的寄存器字段的四位字段進(jìn)行指定。
[0153]Mg字段610例如具有四個位0-3,并且指定元素大小巧巧控制。元素大小控制指 定向量寄存器操作數(shù)2和3中的元素的大?。坏谝缓偷谒牟僮鲾?shù)中的元素是ES控制所指定 的元素大小的兩倍。例如,Mg中的值0指示單字節(jié)大小的元素;1指示半字;2指示單字;W 及3指示雙字。
[0154] 在執(zhí)行向量伽羅瓦域乘法求和與累加指令的一個實(shí)施例時,第二操作數(shù)的每個元 素在伽羅瓦域(即,具有有限數(shù)量元素的有限域)中與第=操作數(shù)的對應(yīng)元素相乘。也就 是說,使用無進(jìn)位乘法使第二操作數(shù)的每個元素與第=操作數(shù)的對應(yīng)元素相乘。在一個實(shí) 例中,伽羅瓦域?yàn)槎A。該乘法類似于標(biāo)準(zhǔn)的二進(jìn)制乘法,它并非將移位后的被乘數(shù)相加, 而是異或狂OR)。例如,得到的奇-偶雙元素大小的乘積對相互進(jìn)行異或,并且與第四操作 數(shù)的對應(yīng)元素(例如,雙寬元素)進(jìn)行異或。結(jié)果被例如放入第一操作數(shù)的雙寬元素。
[0巧5] 條件碼:代碼保持不變。
[0156] 程序異常:
[0157] *具有數(shù)據(jù)異常碼值XOFE的數(shù)據(jù),向量指令,指示未啟用向量工具 [015引*操作(如果未安裝用于z/Architec化re的向量工具)
[0159] *規(guī)范
[0160] *事務(wù)約束
[0161] 在另一實(shí)施例中,所述指令可包括一個或更少的操作數(shù)。例如,要被異或的值位于 第一操作數(shù)中,而非位于第四操作數(shù)中,第一操作數(shù)也將包括結(jié)果。其他變型也是可能的。
[0162] 參考圖6B和6C描述有關(guān)向量伽羅瓦域乘法求和與累加指令的執(zhí)行的一個實(shí)施例 的進(jìn)一步細(xì)節(jié)。在一個實(shí)例中,圖6B示出由處理器執(zhí)行W執(zhí)行向量伽羅瓦域乘法求和與累 加指令的邏輯的一個實(shí)施例,圖6C是示出邏輯執(zhí)行的框圖的一個實(shí)例。
[0163]參考圖6B,首先,從第二操作數(shù)(0P2)、第S操作數(shù)(0P3)和第四操作數(shù)(0P4)提 取奇/偶對(步驟630),并且執(zhí)行無進(jìn)位乘法求和累加功能(步驟632)。例如,當(dāng)在幕為 2的伽羅瓦域中執(zhí)行運(yùn)算時,無進(jìn)位乘法是移位或XOR(異或),它有效地忽略了任何進(jìn)位。 結(jié)果被放入第一操作數(shù)(OPl)內(nèi)(步驟634),并且判定是否存在更多要被提取的對(詢問 636)。如果存在更多對,則處理繼續(xù)執(zhí)行步驟630;否則,處理完成(步驟638)。在一個例 子中,元素大小631到步驟630-634的輸入。
[0164] 參考圖6C描述步驟632的無進(jìn)位乘法求和累加功能的進(jìn)一步細(xì)節(jié)。如圖所示,從 第二操作數(shù)650提取一對操作數(shù)0P2H652a、OP化652b。此外,從第S操作數(shù)660提取操 作數(shù)對0P3H662a、OP:3L662b,從第四操作數(shù)670提取操作數(shù)對0P4H672a和OP化672b。 操作數(shù)0P2H652a通過無進(jìn)位乘法與操作數(shù)0P3H662a相乘,然后提供結(jié)果H680a。類似 地,OP化65化使用無進(jìn)位乘法與操作數(shù)OP化66化相乘,然后提供結(jié)果L680b。接著,結(jié) 果H680a與結(jié)果L68化進(jìn)行異或運(yùn)算,所得結(jié)果與操作數(shù)0P4H672a和OP化67化進(jìn)行 異或運(yùn)算,接著將結(jié)果放入OPlH690a、OPlL690b內(nèi)。
[0165] 此處描述了執(zhí)行無進(jìn)位乘法運(yùn)算,然后執(zhí)行最后的異或運(yùn)算W創(chuàng)建累積和的向量 指令。此技術(shù)可用于在二階有限域中執(zhí)行運(yùn)算的錯誤檢測代碼和密碼學(xué)的多個方面。
[0166] 在一個實(shí)例中,所述指令針對向量寄存器的多個元素執(zhí)行無進(jìn)位乘法運(yùn)算W獲取 總和。此外,所述指令針對總和執(zhí)行最終的異或W產(chǎn)生累加和。當(dāng)被執(zhí)行時,所述指令在 伽羅瓦域中將第二向量和第=向量中的對應(yīng)元素進(jìn)行相乘,并且對移位后的被乘數(shù)執(zhí)行異 或。每個雙寬乘積相互進(jìn)行異或,所得結(jié)果與第一向量的雙寬對應(yīng)元素進(jìn)行異或。結(jié)果被 存儲在第一向量寄存器中。盡管上面描述了雙字元素,但是也可使用具有其他元素大小的 單字大小的元素。所述指令能夠針對多個不同的元素大小執(zhí)行操作。
[0167] 根據(jù)一個方面提供的另一指令為向量生成掩碼(VGM)指令,參考圖7A描述該指 令的一個實(shí)例。在一個實(shí)例中,向量生成掩碼指令700包括;操作碼字段702a(例如,位 0-7)、702b(例如,位40-47),其指示向量生成掩碼操作;第一向量寄存器字段704 (例如, 位8-11),其被用于指定第一向量寄存器(Vi);第一立即字段12706(例如,位16-24),其被 用于指定第一值;第二立即字段(Is) 708 (例如,位24-32),其被用于指定第二值;掩碼字段 (Ma) 710 (例如,位32-35) ;W及RXB字段712 (例如,位36-39)。在一個實(shí)例中,字段704-712 中的每一個都與操作碼字段(多個)分離并且獨(dú)立于操作碼字段(多個)。此外,在一個實(shí) 施例中,它們相互分離和獨(dú)立;但是,在其他實(shí)施例中,一個W上字段可進(jìn)行組合。
[0168] 在另一實(shí)施例中,第一值和/或第二值可W在通用寄存器中提供,在存儲器中提 供,在向量寄存器的元素中(根據(jù)元素而存在差異)提供,通過地址計(jì)算提供。它可作為指 令的顯式操作數(shù)或作為隱式操作數(shù)或輸入而被包括。
[0169] 在一個實(shí)例中,由操作碼字段702a指定的操作碼的選定位(例如,前兩位)指定 指令的長度。在該特定實(shí)例中,選定位指示長度為=個半字。此外,指令的格式為具有擴(kuò)展 操作碼字段的向量寄存器和立即操作。每個向量(V)字段連同其由RXB指定的對應(yīng)擴(kuò)展位 一起指定向量寄存器。具體而言,對于向量寄存器,包含操作數(shù)的寄存器例如使用加上其對 應(yīng)的寄存器擴(kuò)展位(RXB)作為最高位的寄存器字段的四位字段進(jìn)行指定。
[0170] M4字段例如指定元素大小控制巧巧。元素大小控制指定向量寄存器操作數(shù)中的元 素的大小。在一個例子中,M4字段的位0指定單字節(jié);位1指定半字(例如,2字節(jié));位2 指定單字(例如,4字節(jié);即,全字);W及位3指定雙字。
[0171] 在執(zhí)行向量生成掩碼指令的一個實(shí)施例時,對于第一操作數(shù)中的每個元素,生成 位掩碼。所述掩碼包括被設(shè)置為1的位,該些位從例如12中的無符號整數(shù)值指定的位位置 開始,到例如Is中的無符號整數(shù)值指定的位位置結(jié)束。所有其他位位置被設(shè)置為0。在一 個實(shí)例中,僅從12和I3字段使用表示指定的元素大小的所有位位置所需的位數(shù);其他位被 忽略。如果12字段中的位位置大于I3字段中的位位置,則位的范圍在針對指定元素大小的 最大位位置處繞回(wrap)。例如,假設(shè)單字節(jié)大小的元素,如果12= 1且I3= 6,,則得到 的掩碼為《1761或81〇111111〇1。但是,如果12=6且13=1,,則得到的掩碼為《1811 或b' 10000001'。
[0172] 條件碼:代碼保持不變。
[0173] 程序異常:
[0174] *具有數(shù)據(jù)異常碼值XOFE的數(shù)據(jù),向量指令,指示未啟用向量工具 [01巧]*操作(如果未安裝用于z/Architec化re的向量工具)
[0176] * 規(guī)范
[0177] *事務(wù)約束
[0178] 參考圖7B和7C描述有關(guān)向量生成掩碼指令的一個實(shí)施例的進(jìn)一步細(xì)節(jié)。具體而 言,圖7B示出與由處理器執(zhí)行的向量生成掩碼指令關(guān)聯(lián)的邏輯的一個實(shí)施例;圖7C是示出 向量生成掩碼指令的執(zhí)行的一個實(shí)施例的框圖的一個實(shí)例。
[0179] 參考圖7B,首先,針對第一操作數(shù)中的每個元素生成掩碼(步驟720)。此步驟使 用多個輸入,其中包括在第二操作數(shù)字段中指定為起始位置的值(722)、在第=操作數(shù)字段 中指定為結(jié)束位置的值(724),W及在M4字段中指定的元素的大?。?26)。該些輸入被用于 生成掩碼并填充第一操作數(shù)(OPl)的選定元素(例如,元素0)的位置(步驟730)。例如, 第一操作數(shù)(OPl)的元素0包括多個位置(例如,位位置),并且從12中的無符號整數(shù)值指 定的位置開始,到Is中的無符號整數(shù)值指定的位置結(jié)束,第一操作數(shù)的元素0的位置(例 如,位)被設(shè)置為1。其他位位置被設(shè)置為0。隨后,判定第一操作數(shù)中是否存在更多元素 (詢問734)。如果存在更多元素,則處理繼續(xù)執(zhí)行步驟720。否則,處理完成(步驟736)。
[0180] 掩碼的生成和第一操作數(shù)的填充W圖形的形式在圖7C中示出。如圖所示,第一操 作數(shù)的每個元素的掩碼使用輸入(例如,722-726)生成720,并且生成掩碼的結(jié)果被存儲在 第一操作數(shù)740的元素中。
[0181] 上面詳細(xì)描述了生成向量的每個元素的位掩碼的指令。在一個實(shí)施例中,該指令 采用起始位位置和結(jié)束位位置,并產(chǎn)生針對每個元素重復(fù)的位掩碼。該指令指定位范圍,此 范圍內(nèi)的每個位針對向量寄存器的每個元素被設(shè)置為1,而其他位被設(shè)置為0。
[0182] 在一個實(shí)施例中,使用指令生成位掩碼較之例如從存儲器加載位掩碼提供了優(yōu) 點(diǎn),從存儲器加載位掩增加了指令流的緩存占用,并且取決于所需的掩碼數(shù),可增加關(guān)鍵環(huán) 路的延遲。
[0183] 根據(jù)一個方面提供的再一指令為向量元素旋轉(zhuǎn)和掩碼下插入(VERIM)指令,該指 令的一個實(shí)例在圖8A中示出。在一個例子中,向量元素旋轉(zhuǎn)和掩碼下插入指令800包括: 操作碼字段802a(例如,位0-7)、802b(例如,位40-47),其指示向量元素旋轉(zhuǎn)和掩碼下插 入操作;第一向量寄存器字段804(例如,位8-11),其被用于指定第一向量寄存器(Vi);第 二向量寄存器字段806 (例如,位12-15),其被用于指定第二向量寄存器八);第S向量寄 存器字段808 (例如,位16-19),其被用于指定第S向量寄存器(Vs);立即字段(14)812(例 如,位24-31),其例如包括無符號二進(jìn)制整數(shù),該整數(shù)指定用于旋轉(zhuǎn)每個元素的位數(shù);掩碼 字段(Mg) 814 (例如,位32-35) ;W及RXB字段816 (例如,位36-39)。在一個實(shí)例中,字段 804-816中的每一個都與操作碼字段(多個)分離并且獨(dú)立于操作碼字段(多個)。此外, 在一個實(shí)施例中,它們相互分離和獨(dú)立;但是,在其他實(shí)施例中,一個W上字段可進(jìn)行組合。
[0184] 在一個實(shí)例中,由操作碼字段802a指定的操作碼的選定位(例如,前兩位)指定 指令的長度。在該特定實(shí)例中,選定位指示長度為=個半字。此外,指令的格式為具有擴(kuò)展 操作碼字段的向量寄存器和立即操作。每個向量(V)字段連同其由RXB指定的對應(yīng)擴(kuò)展位 一起指定向量寄存器。具體而言,對于向量寄存器,包含操作數(shù)的寄存器例如使用加上其對 應(yīng)的寄存器擴(kuò)展位(RXB)作為最高位的寄存器字段的四位字段進(jìn)行指定。
[0185]Mg字段指定元素大小控制巧巧。元素大小控制指定向量寄存器操作數(shù)中的元素 的大小。在一個例子中,Mg字段的位0指定單字節(jié);位1指定半字(例如,2字節(jié));位2指 定單字(例如,4字節(jié);即,全字);W及位3指定雙字。
[0186] 在執(zhí)行向量元素旋轉(zhuǎn)和掩碼下插入指令時,第二操作數(shù)的每個元素根據(jù)第四操作 數(shù)指定的位數(shù)向左旋轉(zhuǎn)。從元素的最左側(cè)位位置移位出的每個位再次進(jìn)入元素的最右側(cè)位 位置。第=操作數(shù)在每個元素中包括掩碼。對于第=操作數(shù)中為1的每個位,第二操作數(shù) 中已旋轉(zhuǎn)的元素的對應(yīng)位替換第一操作數(shù)中的對應(yīng)位。也就是說,已旋轉(zhuǎn)的元素的對應(yīng)位 的值替換第一操作數(shù)中對應(yīng)位的值。對于第=操作數(shù)中為O的每個位,第一操作數(shù)的對應(yīng) 位保持不變。除了當(dāng)?shù)谝徊僮鲾?shù)與第二或第=操作數(shù)相同的情況之外,第二和第=操作數(shù) 保持不變。
[0187]第四操作數(shù)例如為無符號二進(jìn)制整數(shù),該整數(shù)指定第二操作數(shù)中每個元素被旋轉(zhuǎn) 的位數(shù)。如果該值大于指定的元素大小中的位數(shù),則該值W元素