超級乘加(超級madd)指令的制作方法
【專利摘要】描述了一種處理指令的方法,該方法包括取出并解碼該指令。該指令具有分開的目的地地址、第一操作數(shù)源地址和第二操作數(shù)源地址分量。第一操作數(shù)源地址標(biāo)識第一掩碼圖案在掩碼寄存器空間中的位置。第二操作數(shù)源地址標(biāo)識第二掩碼圖案在掩碼寄存器空間中的位置。該方法還包括:從掩碼寄存器空間中取出第一掩碼圖案;從掩碼寄存器空間中取出第二掩碼圖案;將第一和第二掩碼圖案合并成一合并掩碼圖案;以及將該合并掩碼圖案存儲到該目的地址所標(biāo)識的存儲位置處。
【專利說明】超級乘加(超級MADD)指令
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的領(lǐng)域一般涉及計算系統(tǒng),且尤其涉及超級多次加法指令。
【背景技術(shù)】
[0002]圖1示出了在半導(dǎo)體芯片上用邏輯電路實現(xiàn)的處理核100的高級圖。該處理核包括流水線101。該流水線由各自被設(shè)計成在完全執(zhí)行程序代碼指令所需的多步驟過程中執(zhí)行特定步驟的多個級組成。這些通常至少包括:1)指令取出和解碼;2)數(shù)據(jù)取出;3)執(zhí)行;
4)寫回。執(zhí)行級對由相同指令標(biāo)識出并在另一上述先前級(例如,步驟2)中被取出的數(shù)據(jù)執(zhí)行由上述先前步驟(例如在步驟I)中所取出和解碼的指令所標(biāo)識出的特定操作。被操作的數(shù)據(jù)通常是從(通用)寄存器存儲空間102中取出的。在該操作完成時所創(chuàng)建的新數(shù)據(jù)通常也被“寫回”到寄存器存儲空間(例如,在級4處)。
[0003]與執(zhí)行級相關(guān)聯(lián)的邏輯電路通常由多個“執(zhí)行單元”或“功能單元” 103_1至103_N構(gòu)成,這些單元各自被設(shè)計成執(zhí)行其自身的獨(dú)特的操作子集(例如,第一功能單元執(zhí)行整數(shù)數(shù)學(xué)操作,第二功能單元執(zhí)行浮點(diǎn)指令,第三功能單元執(zhí)行自/至高速緩存/存儲器的加載/存儲操作等等)。由所有這些功能單元執(zhí)行的所有操作的集合與處理核100所支持的“指令集”相對應(yīng)。
[0004]兩種類型的處理器架構(gòu)在計算機(jī)科學(xué)領(lǐng)域中被廣泛認(rèn)可:“標(biāo)量”和“向量”。標(biāo)量處理器被設(shè)計成執(zhí)行對單個數(shù)據(jù)集進(jìn)行操作的指令,而向量處理器被設(shè)計成執(zhí)行對多個數(shù)據(jù)集進(jìn)行操作的指令。圖2A和圖2B呈現(xiàn)比較性示例,該比較性示例展示了標(biāo)量處理器與向量處理器之間的基本差異。
[0005]圖2A示出標(biāo)量AND (與)指令的示例,其中單個操作數(shù)集A和B被加在一起以產(chǎn)生奇異(或“標(biāo)量”)結(jié)果C(S卩,AB = C)。相比之下,圖2B示出向量AND指令的示例,其中兩個操作數(shù)集Α/B和D/E并行地分別加在一起以同時產(chǎn)生向量結(jié)果C和F(即,A.AND.B =C和D.AND.E = F)。根據(jù)術(shù)語學(xué),“向量”是具有多個“元素”的數(shù)據(jù)元素。例如,向量V =Q,R,S,T,U具有五個不同元素:Q,R,S,T和U。示例性向量V的“尺寸”為五(因為它具有五個元素)。
[0006]圖1還不出與通用寄存器空間102不同的向量寄存器空間107的存在。具體而目,通用寄存器空間102標(biāo)準(zhǔn)地用于存儲標(biāo)量值。由此,當(dāng)執(zhí)行單元中的任一個執(zhí)行標(biāo)量操作時,它們標(biāo)準(zhǔn)地使用從通用寄存器存儲空間102中調(diào)用的操作數(shù)(并且將結(jié)果寫回到通用寄存器存儲空間102)。相比之下,當(dāng)執(zhí)行單元中的任一個執(zhí)行向量操作時,它們標(biāo)準(zhǔn)地使用從向量寄存器空間107調(diào)用的操作數(shù)(并且將結(jié)果寫回向量寄存器空間107)。存儲器的不同區(qū)域可類似地被分配以供存儲標(biāo)量值和向量值。
[0007]還注意到,在到功能單元103_1至103_N的相應(yīng)輸入以及來自功能單元103_1至103_N的相應(yīng)輸出處,存在掩碼邏輯104_1至104_N以及105_1至105_N。在各種實現(xiàn)中,對于向量操作,這些層中只有一層實際上被實現(xiàn)一盡管這并不是嚴(yán)格的要求(盡管圖1中未描繪,但可以想到,僅執(zhí)行標(biāo)量操作而非向量操作的執(zhí)行單元不需要具有任何掩碼層)。對于采用掩碼的任何向量指令,輸入掩碼邏輯104_1至104_N和/或輸出掩碼邏輯105_1至105_N可用于控制針對該向量指令對哪些元素進(jìn)行有效地操作。這里,掩碼向量是從掩碼寄存器空間106中被讀取(例如,連同從向量寄存器存儲空間107中被讀取的輸入操作數(shù)向量一起)并且被呈現(xiàn)給掩碼邏輯104、105層中的至少一者。
[0008]在執(zhí)行向量程序代碼的過程中,每一個向量指令無需要求全數(shù)據(jù)字。例如,用于某些指令的輸入向量可以僅是8個元素,用于其他指令的輸入向量可以是16個元素,用于其他指令的輸入向量可以是32個元素等等。因此,掩碼層104/105被用于標(biāo)識全向量數(shù)據(jù)字的一元素集合,該元素集合應(yīng)用于特定指令以便實現(xiàn)跨指令的不同向量尺寸。通常,對于每一個向量指令,掩碼寄存器空間106中所保持的特定掩碼圖案(mask pattern)被該指令調(diào)出,從掩碼寄存器空間中被取出,并且被提供給掩碼層104/105中的任一者或兩者,以“啟用”針對該特定向量操作的正確的元素集合。
[0009]附圖簡述
[0010]本發(fā)明是作為示例說明的,而不僅限制于各個附圖的圖形,在附圖中,類似的參考編號表示類似的元件,其中:
[0011]圖1示出處理器流水線;
[0012]圖2A和2B比較標(biāo)量和向量操作;
[0013]圖3a示出了在可執(zhí)行VSMADD指令的執(zhí)行單元之內(nèi)的邏輯電路的實施例;
[0014]圖3b示出了用于VSMADD指令的操作的方法;
[0015]圖4示出了一種指令格式,包括在立即操作數(shù)字段中的標(biāo)量操作數(shù)編碼數(shù)據(jù)以及符號控制數(shù)據(jù);
[0016]圖5a示出了在可執(zhí)行VFMMADD指令的執(zhí)行單元之內(nèi)的邏輯電路的實施例;
[0017]圖5b示出了用于VFMMADD指令的操作的方法;
[0018]圖6A-6B是示出了根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其指令模板的框圖;
[0019]圖7是示出了根據(jù)本發(fā)明的實施例的示例性專用向量友好指令格式的框圖;
[0020]圖8是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)的框圖;
[0021]圖9A是示出了根據(jù)本發(fā)明的實施例的示例性有序流水線以及示例性寄存器重命名的無序發(fā)布/執(zhí)行流水線這兩者的框圖;
[0022]圖9B是示出了根據(jù)本發(fā)明的各實施例的要被包括在處理器中的有序架構(gòu)核的示例性實施例和示例性的寄存器重命名的無序發(fā)布/執(zhí)行架構(gòu)核這兩者的框圖;
[0023]圖10A-B示出了更具體的示例性有序核架構(gòu)的框圖,該核將是芯片中的若干邏輯塊之一(包括相同類型和/或不同類型的其他核);
[0024]圖11是根據(jù)本發(fā)明的實施例的可具有一個以上的核、可具有集成存儲器控制器、并且可具有集成圖形的處理器的方框圖;
[0025]圖12是根據(jù)本發(fā)明的一個實施例的系統(tǒng)的框圖;
[0026]圖13是根據(jù)本發(fā)明的實施例的更具體的第一示例性系統(tǒng)的框圖;
[0027]圖14是根據(jù)本發(fā)明的實施例的更具體的第二示例性系統(tǒng)的框圖;
[0028]圖15是根據(jù)本發(fā)明的實施例的SoC的框圖;以及
[0029]圖16是根據(jù)本發(fā)明的實施例的對比使用軟件指令變換器將源指令集中的二進(jìn)制指令變換成目標(biāo)指令集中的二進(jìn)制指令的框圖。
[0030]詳細(xì)描述
[0031]圖3a和3b示出了 “超級”MADD指令VSMADD的描繪,該指令執(zhí)行如下操作:V1 []=((3轉(zhuǎn)2[]) + (13轉(zhuǎn)3[])+¥1[]),其中,¥1[]是輸入向量和結(jié)果向量,V2[]和V3[]是輸入向量,并且a和b是標(biāo)量。如圖3a中所觀察到的那樣,執(zhí)行該操作的執(zhí)行單元采用了一種以VSMADD Rl ;R2 ;R3 ;R4/M為形式的指令格式技術(shù)。在這樣做的過程中,指令格式單獨(dú)地是指:
i)寄存器的地址R1,輸入操作數(shù)Vl[]是從該地址提供的,并且該操作的結(jié)果被存儲到該地址(該結(jié)果對應(yīng)于具有更新的值的Vl[]) ;ii)兩個單獨(dú)的輸入操作數(shù)寄存器地址R2和R3,用于分別存儲輸入操作數(shù)V2[]和V3[];以及iii)第四輸入操作數(shù)地址R4或M,用于定義存在標(biāo)量a和b的寄存器或存儲器存儲位置。
[0032]用于VSMADD指令的正式的格式可以是VSMADD Rl ;k ;z ;R2 ;R3 ;R4/M,其中,k對應(yīng)于掩碼向量,z對應(yīng)于位選擇以確定歸零掩碼操作或合并掩碼操作是否適用。如果掩碼位是零,則歸零掩碼操作將零寫到該目的地,而合并掩碼操作使該目的地保持不變。在又一個實施例中,僅僅寫入掩碼(圖1的層105)被用作該架構(gòu)的一部分。為了簡單,本說明書的其余部分將主要參照這種VSMADD Rl ;R2 ;R3 ;R4/M格式。
[0033]在一實施例中,標(biāo)號R1、R2、R3和R4中的每一個對應(yīng)于圖1的向量寄存器空間104中的位置。相似的是,M對應(yīng)于在存儲器中存儲了向量值的位置。在一實施例中,標(biāo)量值a和b是從標(biāo)準(zhǔn)地被用于存儲向量的存儲空間R4/M中調(diào)用的。即,該VSMADD指令具有五個輸入操作數(shù)(VI [],V2 [],V3 [],a和b),但是僅僅消耗三個輸入數(shù)據(jù)源(例如,三個寄存器或兩個寄存器和一存儲器 位置)。
[0034]為了實現(xiàn)輸入信息的壓縮,正如圖3a中所觀察到的那樣,標(biāo)量a和b被“打包”到同一輸入數(shù)據(jù)結(jié)構(gòu)中,以有效地從單個源中提供了這兩個標(biāo)量。特別是,經(jīng)“打包”的或類似向量的數(shù)據(jù)結(jié)構(gòu)包含在R4/M中的標(biāo)量值a和b,該數(shù)據(jù)結(jié)構(gòu)并不必然地具有與該指令所調(diào)出的其它向量相同的向量尺寸。由此,不像典型的向量指令那樣(其中,每一個輸入操作數(shù)是相同尺寸的向量),VSMADD指令的結(jié)構(gòu)接受這樣一種可能:一組輸入操作數(shù)V1[],V2[],V3□將都是第一尺寸(由機(jī)器支持的任何向量尺寸)的向量,同時另一個輸入操作數(shù)基本上是不同的第二尺寸(二)的向量。
[0035]如圖3a中所觀察到的那樣,用于VSMADD指令的執(zhí)行單元資源包括寄存器309,310,311和312,用于分別保持Vl [],V2 [],V3 []以及a和b標(biāo)量。這些執(zhí)行單元資源還包括融合的乘法器313。輸出結(jié)果被從該乘法器313傳遞到結(jié)果寄存器309。在一實施例中,融合的乘法器313基本上包括兩個“并排的”乘法器,每一個乘法器由其自己的各個選擇邏輯314、316 (以產(chǎn)生部分乘積項)及其自己的各個華萊士樹(Wallace tree)電路315、317(或其它合適的加法器電路,用于將該部分乘積相加)構(gòu)成。通過使用這種“并排的”方式,(a*V2[])和(b*V3[])這兩項可以被基本上同時計算出。
[0036]參照圖3a,“左半邊的”乘法器是由選擇邏輯314和華萊士樹電路315構(gòu)成的。選擇邏輯314構(gòu)造用于(a*V2[])乘法的部分乘積,并且華萊士樹電路315對這些部分乘積求和以確定(a*V2[])最終乘積。相似的是,“右半邊”乘法器是由選擇邏輯316和華萊士樹電路317構(gòu)成的。選擇邏輯316構(gòu)造用于(b*V3[])乘法的部分乘積,并且華萊士樹電路317對這些部分乘積求和以確定(b*V3[])最終乘積。然后,通過加法器318將(a*V2[])和(b*V3[])最終乘積與輸入Vl []項相加,以產(chǎn)生最終結(jié)果Vl []。
[0037]如上所述的融合的乘法對應(yīng)于在加法器318處的單次舍入。此處,至少對于浮點(diǎn)操作數(shù),圖3a中所觀察到的V2[], V3[], a, b, c輸入值對應(yīng)于尾數(shù)值。指數(shù)加法以實現(xiàn)該乘法是通過圖3a中未示出的加法電路來實現(xiàn)的??紤]到執(zhí)行單元作為一個整體可對其進(jìn)行操作的不同的輸入值的動態(tài)范圍,圖3a的尾數(shù)值在考慮到其各自的指數(shù)值的情況下可能需要被移動以實現(xiàn)正確的對齊。在加法級(比如底部加法器318)中,這種移動可以產(chǎn)生舍入誤差。
[0038]與通過同一乘法累加電路而“循環(huán)兩次”由此使兩個單獨(dú)的舍入誤差(例如,第一循環(huán)確定了(a*V2[])+Vl□(所創(chuàng)建的第一舍入誤差),以及第二循環(huán)確定了(b*V3[])并將其與(a*V2[])+Vl[]相加(所創(chuàng)建的第二舍入誤差))級聯(lián)起來的方法(例如,通過微代碼操作)相比,如上所述的融合的乘法可以使加法舍入誤差最小化至單次舍入誤差。指出下列這一點(diǎn)是恰當(dāng)?shù)?盡管使舍入誤差級聯(lián)起來,但是通過同一乘法電路而循環(huán)兩次的方法可能對于各種應(yīng)用而言是足夠的了,因此,該方法可以被視為本發(fā)明的一實施例。在一實施例中,兩個不同的操作碼被底層的指令集使用,以指定是否要使用融合的乘法或“循環(huán)兩次”。
[0039]在圖3a中,輸入向量Vl []被提供到底部加法器318,但是可以兩者擇一地被輸入到華萊士樹315、316之一中(這取決于華萊士樹的尺寸)。也可想像的是,某些另外的或備選的方法可以選擇將來自左邊和右邊部分乘積的部分乘積混合到同一華萊士樹結(jié)構(gòu)中,使得左邊和右邊的華萊士樹315、317之間的區(qū)別變模糊了(例如,具有預(yù)先對齊的尾數(shù)和額外的流水線級)。
[0040]在一實施例中,基于數(shù)據(jù)類型,有不同“味道”的VSMADD指令。例如,根據(jù)一個實施例,可應(yīng)用的處理器的指令集架構(gòu)被設(shè)計成支持用于向量操作的VSMADDPS(向量單精度)和VSMADDTO (向量雙精度)。
[0041]在又一實施例中,執(zhí)行單元資源被設(shè)計成不僅支持向量指令還支持標(biāo)量指令SMADD0即,這些執(zhí)行資源也執(zhí)行函數(shù)(a*A) + (b*B)+C,其中,A,B和C是標(biāo)量輸入操作數(shù)。此處,向量寄存器的低階位(圖3a中未示出)可能與寄存器309,310,311和312中的每一個相關(guān)聯(lián),并且按與圖3a中所觀察到的相同方式被路由到執(zhí)行單元邏輯。
[0042]通過使用符號控制,VSMADD和SMADD指令可以更一般地被表述為用于向量指令的Vl[] = +/-(a*V2[])+/-(b*V3[])+/-Vl[]以及用于標(biāo)量指令的C =+/-(a*A)+/-(b*B)+/-C。此處,另外的立即操作數(shù)(比如imm8)被包括在該指令格式中以指定每一項的符號。例如,在VSMADD的情況下,該指令格式采用VSMADD Rl ;k ;R2 ;R3 ;R4/M ;1的格式,其中,I是立即操作數(shù)。在一實施例中,該立即操作數(shù)的三個位被用于指定(a*V2[])、(b*V3[])和Vl[]項中的每一項的正負(fù)符號。
[0043]將五個輸入操作數(shù)打包到考慮到提供最多三個輸入操作數(shù)而設(shè)計的指令格式中的問題是指定了“額外的”操作數(shù)的編碼。具體地講,該指令執(zhí)行邏輯需要知道a和b標(biāo)量中的每一個的尺寸和/或它們的邊界在從R4/M中取出的數(shù)據(jù)結(jié)構(gòu)內(nèi)的何處。在一實施例中,如在圖4中觀察到的那樣,該信息連同上述符號控制信息一起被呈現(xiàn)在立即操作數(shù)中(例如,x86或兼容指令格式中的imm8)。立即操作數(shù)是一變量,該變量在運(yùn)行時間以前是已知,因此,可以在編譯/代碼構(gòu)建過程中被直接地嵌入該指令中。這樣,在VSMADD指令的編譯期間,用于定義在從R4/M中取出的打包數(shù)據(jù)結(jié)構(gòu)中哪里可以單獨(dú)找到a和b標(biāo)量的信息在立即操作數(shù)字段中被直接地嵌入到該指令中。
[0044]圖5a和5b示出了另一個“超級’^ADD指令VFMMADD的描繪,該指令執(zhí)行如下操作:VlG = (&轉(zhuǎn)2[]) + (13轉(zhuǎn)3[]),其中,¥1[]是結(jié)果向量,V2[]和V3[]是輸入向量,并且a和b是標(biāo)量。如圖4中所觀察到的那樣,執(zhí)行該操作的執(zhí)行單元采用了一種以VFMMADD Rl ;R2 ;R3 ;R4/M為形式的指令格式技術(shù)。在這樣做的過程中,指令格式單獨(dú)地是指:i)寄存器的地址R1,該操作的結(jié)果被存儲到該地址;ii)兩個單獨(dú)的輸入操作數(shù)寄存器地址R2和R3,用于分別存儲輸入操作數(shù)V2[]和V3[];以及iii)第四輸入操作數(shù)地址R4或M,用于定義找到標(biāo)量a和b的寄存器或存儲器存儲位置。
[0045]如圖5a和5b中所觀察到的那樣,除了沒有輸入加數(shù)Vl []以外,VFMMADD指令可以與上述VSMADD指令基本上相同。
[0046]示例性指令格式
[0047]本文中所描述的指令的實施例可以不同的格式體現(xiàn)。另外,在下文中詳述示例性系統(tǒng)、架構(gòu)、以及流水線。指令的實施例可在這些系統(tǒng)、架構(gòu)、以及流水線上執(zhí)行,但是不限于詳述的系統(tǒng)、架構(gòu)、以及流水線。
[0048]通用向量友好指令格式
[0049]向量友好指令格式是適于向量指令(例如,存在專用于向量操作的某些字段)的指令格式。盡管描述了其中通過向量友好指令格式支持向量和標(biāo)量運(yùn)算兩者的實施例,但是替代實施例只通過向量友 好指令格式使用向量運(yùn)算。
[0050]圖6A-6B是示出了根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其指令模板的方框圖。圖6A是示出了根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其A類指令模板的框圖;而圖6B是示出了根據(jù)本發(fā)明的實施例的通用向量友好指令格式及其B類指令模板的框圖。具體地,針對通用向量友好指令格式600定義A類和B類指令模板,兩者包括無存儲器訪問605的指令模板和存儲器訪問620的指令模板。在向量友好指令格式的上下文中的通用術(shù)語是指不綁定到任何專用指令集的指令格式。
[0051]盡管將描述其中向量友好指令格式支持64字節(jié)向量操作數(shù)長度(或尺寸)與32位(4字節(jié))或64位(8字節(jié))數(shù)據(jù)元素寬度(或尺寸)(并且由此,64字節(jié)向量由16雙字尺寸的元素或者替代地8雙字尺寸的元素組成)、64字節(jié)向量操作數(shù)長度(或尺寸)與16位(2字節(jié))或8位(I字節(jié))數(shù)據(jù)元素寬度(或尺寸)、32字節(jié)向量操作數(shù)長度(或尺寸)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(I字節(jié))數(shù)據(jù)元素寬度(或尺寸)、以及16字節(jié)向量操作數(shù)長度(或尺寸)與32位(4字節(jié))、64位(8字節(jié))、16位(2字節(jié))、或8位(I字節(jié))數(shù)據(jù)元素寬度(或尺寸)的本發(fā)明的實施例,但是替代實施例可支持更大、更小、和/或不同的向量操作數(shù)尺寸(例如,256字節(jié)向量操作數(shù))與更大、更小或不同的數(shù)據(jù)元素寬度(例如,128位(16字節(jié))數(shù)據(jù)元素寬度)。
[0052]圖6A中的A類指令模板包括:1)在無存儲器訪問605的指令模板內(nèi),示出了無存儲器訪問的全部舍入控制型操作610的指令模板、以及無存儲器訪問的數(shù)據(jù)變換型操作615的指令模板;以及2)在存儲器訪問620的指令模板內(nèi),示出存儲器訪問的時效性625的指令模板和存儲器訪問的非時效性630的指令模板。圖6B中的B類指令模板包括:1)在無存儲器訪問605的指令模板內(nèi),示出了無存儲器訪問的寫掩碼控制的部分舍入控制型操作612的指令模板以及無存儲器訪問的寫掩碼控制的vsize型操作617的指令模板;以及
2)在存儲器訪問620的指令模板內(nèi),示出了存儲器訪問的寫掩碼控制627的指令模板。
[0053]通用向量友好指令格式600包括以下列出以在圖6A-6B中示出順序的如下字段。結(jié)合以上涉及VPLANE指令的討論,在一實施例中,參考以下在圖6A-B和7中提供的格式細(xì)節(jié),可利用非存儲器訪問指令類型605或存儲器訪問指令類型620。用于第一、第二和第三輸入操作數(shù)R2R3R4/M和目的地Rl的地址可以是在下述寄存器地址字段644中指定的。在又一實施例中,第一源操作數(shù)Vl []的尺寸是在Reg_Field744中被編碼的;第二源操作數(shù)V2 []的尺寸是在VVVV字段720中被編碼的,并且標(biāo)量a,b, c的尺寸/位置是在i_8字段772中被編碼的。在一實施例中,i_8的位[3]和[7:4]被用于按上文所述那樣對a和b標(biāo)量進(jìn)行編碼,并且imm8的位[2:0]被用于上述符號控制。
[0054]格式字段640-該字段中的特定值(指令格式標(biāo)識符值)唯一地標(biāo)識了向量友好指令格式,并且由此標(biāo)識了指令在指令流中以向量友好指令格式的出現(xiàn)。由此,該字段在無需只有通用向量友好指令格式的指令集的意義上是任選的。
[0055]基礎(chǔ)操作字段642-其內(nèi)容區(qū)分了不同的基礎(chǔ)操作。
[0056]寄存器索引字段644-其內(nèi)容直接或者通過地址生成指定了源或目的地操作數(shù)在寄存器中或者在存儲器中的位置。這些包括足夠數(shù)量的位以從PxQ(例如,32x512、16x128、32x1024,64x1024)個寄存器組中選擇N個寄存器。盡管在一個實施例中N可多達(dá)三個源和一個目的地寄存器,但是替代實施例可支持更多或更少的源和目的地寄存器(例如,可支持高達(dá)兩個源,其中這些源中的一個源還用作目的地,可支持高達(dá)三個源,其中這些源中的一個源還用作目的地,可支持高達(dá)兩個源和一個目的地)。
[0057]修飾符(modifier)字段646 —其內(nèi)容將以指定存儲器訪問的通用向量指令格式出現(xiàn)的指令與不指定存儲器訪問的通用向量指令格式出現(xiàn)的指令區(qū)分開;即在無存儲器訪問605的指令模板與存儲器訪問620的指令模板之間。存儲器訪問操作讀取和/或?qū)懭氲酱鎯ζ鲗哟?在一些情況下,使用寄存器中的值來指定源和/或目的地址),而非存儲器訪問操作不這樣(例如,源和/或目的地是寄存器)。盡管在一個實施例中,該字段還在三種不同的方式之間選擇以執(zhí)行存儲器地址計算,但是替代實施例可支持更多、更少或不同的方式來執(zhí)行存儲器地址計算。
[0058]擴(kuò)充操作字段650 —其內(nèi)容區(qū)分了除基礎(chǔ)操作以外要執(zhí)行的各種不同操作中的哪一個操作。該字段是上下文專用的。在本發(fā)明的一個實施例中,該字段被分成類字段668、α字段652、以及β字段654。擴(kuò)充操作字段650允許在單一指令而非2、3或4個指令中執(zhí)行多組共同的操作。
[0059]比例字段660 —其內(nèi)容允許用于存儲器地址生成(例如,用于使用2ttw*索引+基址的地址生成)的索引字段的內(nèi)容的按比例縮放。
[0060]位移字段662A —其內(nèi)容被用作存儲器地址生成的一部分(例如,用于使用2ttw*索引+基址+位移的地址生成)。
[0061]位移因數(shù)字段662B(注意,位移字段662A直接在位移因數(shù)字段662B上的并置指示了使用一個或另一個)一其內(nèi)容被用作地址生成的一部分,它指定由存儲器訪問的尺寸(N)比例的位移因數(shù),其中N是存儲器訪問中的字節(jié)的數(shù)量(例如,用于使用2?*索引+基址+比例的位移的地址生成)。忽略冗余的低階位,并且因此位移因數(shù)字段的內(nèi)容乘以存儲器操作數(shù)總尺寸以生成在計算有效地址時所使用的最終位移。N的值由處理器硬件在運(yùn)行時基于完整操作碼字段674 (稍候在本文中描述)和數(shù)據(jù)操縱字段654C確定。位移字段662A和位移因數(shù)字段662B在它們不用于無存儲器訪問605的指令模板和/或不同的實施例可實現(xiàn)這兩者中的僅一個或均未實現(xiàn)的意義上是任選的。
[0062]數(shù)據(jù)元素寬度字段664 —其內(nèi)容區(qū)分了將要使用多個數(shù)據(jù)元素寬度中的哪一個(在一些實施例中用于所有的指令,在其他實施例中只用于一些指令)。該字段在如果支持僅一個數(shù)據(jù)元素寬度和/或使用操作碼的某一方面來支持?jǐn)?shù)據(jù)元素寬度則不需要的意義上是任選的。
[0063]寫掩碼字段670 —其內(nèi)容基于每一數(shù)據(jù)元素位置來控制目的地向量操作數(shù)中的數(shù)據(jù)元素位置是否反映基礎(chǔ)操作和擴(kuò)充操作的結(jié)果。A類指令模板支持合并-寫掩碼,而B類指令模板支持合并寫掩碼和歸零寫掩碼兩者。當(dāng)合并的向量掩碼允許在執(zhí)行任何操作(由基礎(chǔ)操作和擴(kuò)充操作指定)期間保護(hù)目的地中的任何元素集免于更新時,在另一實施例中,保持其中對應(yīng)掩碼位具有O的目的地的每一元素的舊值。相反,當(dāng)歸零向量掩碼允許在執(zhí)行任何操作(由基礎(chǔ)操作和擴(kuò)充操作指定)期間使目的地中的任何元素集歸零時,在一個實施例中,目的地的元素在對應(yīng)掩碼位具有O值時被設(shè)為O。該功能的子集是控制執(zhí)行的操作的向量長度的能力(即,從第一個到最后一個要修改的元素的跨度),然而,被修改的元素不必是連續(xù)的。由此,寫掩碼字段670允許部分向量操作,這包括加載、存儲、算術(shù)、邏輯等。盡管描述了其中寫掩碼字段670的內(nèi)容選擇了多個寫掩碼寄存器中的包含要使用的寫掩碼的一個寫掩碼寄存器(并且由此寫掩碼字段670的內(nèi)容間接地標(biāo)識了要執(zhí)行的掩碼)的本發(fā)明的實施例,但是替代實施例相反或另外允許掩碼寫字段670的內(nèi)容直接地指定要執(zhí)行的掩碼。
[0064]立即數(shù)字段672 —其內(nèi)容允許對立即數(shù)的指定。該字段在實現(xiàn)不支持立即數(shù)的通用向量友好格式中不存在且在不使用立即數(shù)的指令中不存在的意義上是任選的。
[0065]類字段668 —其內(nèi)容在指令的不同的類之間進(jìn)行區(qū)分。參考圖6A-B,該字段的內(nèi)容在A類和B類指令之間進(jìn)行選擇。在圖6A-B中,圓角方形用于指示專用值存在于字段中(例如,在圖6A-B中分別用于類字段668的A類668A和B類668B)。
[0066]A類指令模板
[0067]在A類非存儲器訪問605的指令模板的情況下,α字段652被解釋為其內(nèi)容區(qū)分了要執(zhí)行不同擴(kuò)充操作類型中的哪一種(例如,針對無存儲器訪問的舍入型操作610和無存儲器訪問的數(shù)據(jù)變換型操作615的指令模板分別指定舍入652Α.1和數(shù)據(jù)變換652Α.2)的RS字段652Α,而β字段654區(qū)分了要執(zhí)行指定類型的操作中的哪一種。在無存儲器訪問605指令模板中,比例字段660、位移字段662Α以及位移比例字段662Β都不存在。
[0068]無存儲器訪問的指令模板一全部舍入控制型操作
[0069]在無存儲器訪問的全部舍入控制型操作610的指令模板中,β字段654被解釋為其內(nèi)容提供了靜態(tài)舍入的舍入控制字段654Α。盡管在本發(fā)明的所述實施例中舍入控制字段654Α包括抑制所有浮點(diǎn)異常(SAE)字段656和舍入操作控制字段658,但是替代實施例可支持、可將這些概念兩者都編碼成相同的字段或者只有這些概念/字段中的一個或另一個(例如,可只有舍入操作控制字段658)。
[0070]SAE字段656 —其內(nèi)容區(qū)分了是否停用異常事件報告;當(dāng)SAE字段656的內(nèi)容指示啟用抑制時,給定指令不報告任何種類的浮點(diǎn)異常標(biāo)志且不喚起任何浮點(diǎn)異常處理器。
[0071]舍入操作控制字段658 —其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段658允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段650的內(nèi)容優(yōu)先于該寄存器值。
[0072]無存儲器訪問的指令模板一數(shù)據(jù)變換型操作
[0073]在無存儲器訪問的數(shù)據(jù)變換型操作615的指令模板中,β字段654被解釋為數(shù)據(jù)變換字段654Β,其內(nèi)容區(qū)分要執(zhí)行多個數(shù)據(jù)變換中的哪一個(例如,無數(shù)據(jù)變換、混合、廣播)的。
[0074]在A類存儲器訪問620的指令模板的情況下,α字段652被解釋為驅(qū)逐提示字段652Β,其內(nèi)容區(qū)分要使用驅(qū)逐提示中的哪一個(在圖6Α中,為存儲器訪問時效性625的指令模板和存儲器訪問非時效性630的指令模板分別指定時效性652Β.1和非時效性652Β.2),而β字段654被解釋為數(shù)據(jù)操縱字段654C,其內(nèi)容區(qū)分要執(zhí)行多個數(shù)據(jù)操縱操作(也稱為基元(primitive))中的哪一個(例如,無操縱、廣播、源的向上轉(zhuǎn)換、以及目的地的向下轉(zhuǎn)換)。存儲器訪問620的指令模板包括比例字段660、以及任選的位移字段662A或位移比例字段662B。
[0075]向量存儲器指令使用轉(zhuǎn)換支持來執(zhí)行來自存儲器的向量負(fù)載并將向量存儲到存儲器。如同有規(guī)律的向量指令,向量存儲器指令以數(shù)據(jù)元素式的方式與存儲器來回傳輸數(shù)據(jù),其中實際傳輸?shù)脑赜蛇x為寫掩碼的向量掩碼的內(nèi)容闡述。
[0076]存儲器訪問的指令模板一時效性
[0077]時效性數(shù)據(jù)是可能足夠快地重新使用以從高速緩存受益的數(shù)據(jù)。然而,這是提示且不同的處理器可以不同的方式實現(xiàn)它,包括完全忽略該提示。
[0078]存儲器訪問的指令模板一非時效性
[0079]非時效性數(shù)據(jù)是不可能足夠快地重新使用以從第一級高速緩存中的高速緩存受益且應(yīng)當(dāng)給予驅(qū)逐優(yōu)先級的數(shù)據(jù)。然而,這是提示且不同的處理器可以不同的方式實現(xiàn)它,包括完全忽略該提示。
[0080]B類指令模板
[0081]在B類指令模板的情況下,α字段652被解釋為寫掩碼控制(Z)字段652C,其內(nèi)容區(qū)分由寫掩碼字段670控制的寫掩碼應(yīng)當(dāng)是合并還是歸零。
[0082]在B類非存儲器訪問605的指令模板的情況下,β字段654的一部分被解釋為RL字段657Α,其內(nèi)容區(qū)分要執(zhí)行不同擴(kuò)充操作類型中的哪一種(例如,針對無存儲器訪問的寫掩碼控制部分舍入控制類型操作612的指令模板和無存儲器訪問的寫掩碼控制VSIZE型操作617的指令模板分別指定舍入657Α.1和向量長度(VSIZE) 657Α.2),而β字段654的其余部分區(qū)分要執(zhí)行指定類型的操作中的哪一種。在無存儲器訪問605指令模板中,比例字段660、位移字段662Α以及位移比例字段662Β都不存在。
[0083]在無存儲器訪問的寫掩碼控制的部分舍入控制型操作610的指令模板中,β字段654的其余部分被解釋為舍入操作字段659Α,并且停用異常事件報告(給定指令不報告任何種類的浮點(diǎn)異常標(biāo)志且不喚起任何浮點(diǎn)異常處理器)。
[0084]舍入操作控制字段659Α —只作為舍入操作控制字段658,其內(nèi)容區(qū)分執(zhí)行一組舍入操作中的哪一個(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段659A允許在每一指令的基礎(chǔ)上改變舍入模式。在其中處理器包括用于指定舍入模式的控制寄存器的本發(fā)明的一個實施例中,舍入操作控制字段650的內(nèi)容優(yōu)先于該寄存器值。
[0085]在無存儲器訪問的寫掩碼控制VSIZE型操作617的指令模板中,β字段654的其余部分被解釋為向量長度字段659Β,其內(nèi)容區(qū)分了要執(zhí)行多個數(shù)據(jù)向量長度中的哪一個(例如,128字節(jié)、256字節(jié)、或512字節(jié))。
[0086]在B類存儲器訪問620的指令模板的情況下,β字段654的一部分被解釋為廣播字段657Β,其內(nèi)容區(qū)分是否要執(zhí)行廣播型數(shù)據(jù)操縱操作,而β字段654的其余部分被解釋為向量長度字段659Β。存儲器訪問620的指令模板包括比例字段660、以及任選的位移字段662Α或位移比例字段662Β。
[0087]針對通用向量友好指令格式600,示出完整操作碼字段674,包括格式字段640、基礎(chǔ)操作字段642以及數(shù)據(jù)元素寬度字段664。盡管示出了其中完整操作碼字段674包括所有這些字段的一個實施例,但是完整操作碼字段674包括在不支持所有這些字段的實施例中的少于所有的這些字段。完整操作碼字段674提供該操作碼(opcode)。
[0088]擴(kuò)充操作字段650、數(shù)據(jù)元素寬度字段664以及寫掩碼字段670允許這些特征在每一指令的基礎(chǔ)上以通用向量友好指令格式指定。
[0089]寫掩碼字段和數(shù)據(jù)元素寬度字段的組合創(chuàng)建各種類型的指令,其中這些指令允許基于不同的數(shù)據(jù)元素寬度應(yīng)用該掩碼。
[0090]在A類和B類內(nèi)找到的各種指令模板在不同的情形下是有益的。在本發(fā)明的一些實施例中,不同處理器或者處理器內(nèi)的不同核可只有支持僅A類、僅B類、或者可支持兩類。舉例而言,期望用于通用計算的高性能通用無序核可只支持B類,期望主要用于圖形和/或科學(xué)(吞吐量)計算的核可只支持A類,并且期望用于兩者的核可支持兩者(當(dāng)然,具有來自兩類的模板和指令的一些混合的核,但是并非來自兩類的所有模板和指令都在本發(fā)明的范圍內(nèi))。同樣,單一處理器可包括多個核,所有核支持相同的類或者其中不同的核支持不同的類。舉例而言,在具有分離的圖形和通用核的處理器中,圖形核中的期望主要用于圖形和/或科學(xué)計算的一個核可只支持A類,而通用核中的一個或多個可以是和期望用于通用計算的支持B類的無序執(zhí)行和寄存器重命名的高性能通用核。沒有分離的圖形核的另一處理器可包括支持A類和B類兩者的一個或多個通用有序或無序核。當(dāng)然,在本發(fā)明的不同實施例中,來自一類的特征還可在其他類中實現(xiàn)。以高級語言撰寫的程序可被輸入(例如,僅僅按時效性編譯或者統(tǒng)計編譯)到各種不同的可執(zhí)行形式,包括:1)只有用于執(zhí)行的目標(biāo)處理器支持的類的指令的形式;或者2)具有使用所有類的指令的不同組合而撰寫的替代例程且具有選擇這些例程以基于由當(dāng)前正在執(zhí)行代碼的處理器支持的指令而執(zhí)行的控制流代碼的形式。
[0091]示例性專用向量友好指令格式
[0092]圖7是示出根據(jù)本發(fā)明的實施例的示例性專用向量友好指令格式的框圖。圖7示出在其指定位置、尺寸、解釋和字段的次序、以及那些字段中的一些字段的值的意義上是專用的專用向量友好指令格式700。專用向量友好指令格式700可用于擴(kuò)展x86指令集,并且由此一些字段類似于在現(xiàn)有x86指令集及其擴(kuò)展(例如,AVx)中使用的那些字段或與之相同。該格式保持與具有擴(kuò)展的現(xiàn)有x86指令集的前綴編碼字段、實操作碼字節(jié)字段、MOD R/M字段、SIB字段、位移字段、以及立即數(shù)字段一致。示出了來自圖6的字段,來自圖7的字段映射到來自圖6的字段。
[0093]應(yīng)當(dāng)理解,雖然出于說明的目的在通用向量友好指令格式600的上下文中,本發(fā)明的實施例參考專用向量友好指令格式700進(jìn)行了描述,但是本發(fā)明不限于專用向量友好指令格式700,聲明的地方除外。例如,通用向量友好指令格式600構(gòu)想各種字段的各種可能的尺寸,而專用向量友好指令格式700被示為具有專用尺寸的字段。作為具體示例,盡管在專用向量友好指令格式700中數(shù)據(jù)元素寬度字段664被示為一位字段,但是本發(fā)明不限于此(即,通用向量友好指令格式600構(gòu)想數(shù)據(jù)元素寬度字段664的其他尺寸)。
[0094]通用向量友好指令格式600包括以下列出以在圖7A中示出的順序的如下字段。
[0095]EVEX前綴(字節(jié)0-3) 702 —以四字節(jié)形式進(jìn)行編碼。
[0096]格式字段640 (EVEX字節(jié)0,位[7:0]) —第一字節(jié)(EVEX字節(jié)O)是格式字段640,并且它包含0x62 (在本發(fā)明的一個實施例中用于區(qū)分向量友好指令格式的唯一值)。
[0097]第二 -第四字節(jié)(EVEX字節(jié)1-3)包括提供專用能力的多個位字段。
[0098]REX 字段 705 (EVEX 字節(jié) I,位[7-5]) —由 EVEX.R 位字段(EVEX 字節(jié) I,位[7] - R)、EVEX.X 位字段(EVEX 字節(jié) 1,位[6] - X)以及(657BEX 字節(jié) 1,位[5] - B)組成。EVEX.R、EVEX.X和EVEX.B位字段提供與對應(yīng)VEX位字段相同的功能,并且使用I補(bǔ)碼的形式進(jìn)行編碼,即ZMMO被編碼為1111B,ZMM15被編碼為0000B。這些指令的其他字段對如在本領(lǐng)域中已知的寄存器索引的較低三個位(rrr、xxx、以及bbb)進(jìn)行編碼,由此Rrrr、Xxxx以及Bbbb可通過增加EVEX.R、EVEX.X以及EVEX.B來形成。
[0099]REX’字段610—這是REX’字段610的第一部分,并且是用于對擴(kuò)展的32個寄存器集合的較高16個或較低16個寄存器進(jìn)行編碼的EVEX.R’位字段(EVEX字節(jié)1,位[4] -R,)。在本發(fā)明的一個實施例中,該位與以下指示的其他位一起以位反轉(zhuǎn)的格式存儲以(在公知x86的32位模式下)與其實操作碼字節(jié)是62的BOUND指令進(jìn)行區(qū)分,但是在MOD R/Μ字段(在下文中描述)中不接受MOD字段中的值11 ;本發(fā)明的替代實施例不以反轉(zhuǎn)的格式存儲該指示的位以及其他指示的位。值I用于對較低16個寄存器進(jìn)行編碼。換句話說,通過組合EVEX.R’、EVEX.R、以及來自其他字段的其他RRR來形成R’ Rrrr。
[0100]操作碼映射字段715(EVEX字節(jié)1,位[3:0] - _m)-其內(nèi)容對隱含的領(lǐng)先操作碼字節(jié)(0F、0F38、或0F3)進(jìn)行編碼。
[0101]數(shù)據(jù)元素寬度字段664 (EVEX字節(jié)2,位[7] - W) 一由記號EVEX.W表示。EVEX.W用于定義數(shù)據(jù)類型(32位數(shù)據(jù)元素或64位數(shù)據(jù)元素)的粒度(尺寸)。
[0102]EVEX.vvvv720 (EVEX 字節(jié) 2,位[6:3]_vvvv) — EVEX.vvvv 的作用可包括如下:1)EVEX.vvvv對以反轉(zhuǎn)(I補(bǔ)碼)的形式指定的第一源寄存器操作數(shù)進(jìn)行編碼且對具有兩個或兩個以上源操作數(shù)的指令有效;2)EVEX.vvvv針對特定向量位移對以I補(bǔ)碼的形式指定的目的地寄存器操作數(shù)進(jìn)行編碼;或者3)EVEX.vvvv不對任何操作數(shù)進(jìn)行編碼,保留該字段,并且應(yīng)當(dāng)包含1111b。由此,EVEX.vvvv字段720對以反轉(zhuǎn)(I補(bǔ)碼)的形式存儲的第一源寄存器指定符的4個低階位進(jìn)行編碼。取決于該指令,額外不同的EVEX位字段用于將指定符尺寸擴(kuò)展到32個寄存器。
[0103]EVEX.U668類字段(EVEX字節(jié)2,位[2]-U)—如果EVEX.U = 0,則它指示A類或EVEX.UO,如果 EVEX.U = 1,則它指示 B 類或 EVEX.Ul。
[0104]前綴編碼字段725(EVEX字節(jié)2,位[1:0]-ρρ) —提供了用于基礎(chǔ)操作字段的附加位。除了對以EVEX前綴格式的傳統(tǒng)SSE指令提供支持以外,這也具有的壓縮SMD前綴的益處(EVEX前綴只需要2位,而不是需要字節(jié)來表達(dá)SMD前綴)。在一個實施例中,為了支持使用以傳統(tǒng)格式和以EVEX前綴格式的SMD前綴(66H、F2H、F3H)的傳統(tǒng)SSE指令,這些傳統(tǒng)SMD前綴被編碼成SMD前綴編碼字段;并且在運(yùn)行時在提供給解碼器的PLA之前被擴(kuò)展成傳統(tǒng)SMD前綴(因此PLA可執(zhí)行傳統(tǒng)和EVEX格式的這些傳統(tǒng)指令,而無需修改)。雖然較新的指令可將EVEX前綴編碼字段的內(nèi)容直接作為操作碼擴(kuò)展,但是為了一致性,特定實施例以類似的方式擴(kuò)展,但允許由這些傳統(tǒng)SIMD前綴指定不同的含義。替代實施例可重新設(shè)計PLA以支持2位SMD前綴編碼,并且由此不需要擴(kuò)展。
[0105]α 字段 652 (EVEX 字節(jié) 3,位[7] - EH ;也稱為 EVEX.EH、EVEX.rs、EVEX.RL、EVEX.寫掩碼控制、以及EVEX.N;還被示為具有α) —如先前所述的,該字段是上下文特定的。
[0106]β 字段 654 (EVEX 字節(jié) 3,位[6:4]_SSS,也稱為 EVEX.s2_0、EVEX.r2_0、EVEX.rrl、EVEX.LLO、EVEX.LLB ;還被示為具有β β β) —如先前所述的,該字段是上下文特定的。
[0107]REX’字段610 —這是REX’字段的其余部分,并且是可用于對擴(kuò)展的32個寄存器集合的較高16個或較低16寄存器進(jìn)行編碼的EVEX.V’位字段(EVEX字節(jié)3,位[3] - V’)。該位以位反轉(zhuǎn)的格式存儲。值I用于對較低16個寄存器進(jìn)行編碼。換句話說,通過組合EVEX.V’、EVEX.VVW 來形成 V’ VVVV。
[0108]寫掩碼字段670 (EVEX字節(jié)3,位[2:0]_kkk) —其內(nèi)容指定寫掩碼寄存器中的寄存器索引,如先前所述的。在本發(fā)明的一個實施例中,專用值EVEX.kkk = 000具有隱含著沒有寫掩碼用于特定指令(這可以各種方式(包括使用硬連線到所有的寫掩碼或者旁路掩碼硬件的硬件)實現(xiàn))的特別行為。
[0109]實操作碼字段730 (字節(jié)4)還被稱為操作碼字節(jié)。操作碼的一部分在該字段中指定。
[0110]MOD R/M字段740 (字節(jié)5)包括MOD字段742、Reg字段744、以及R/M字段746。如先前所述的,MOD字段742的內(nèi)容在存儲器訪問和非存儲器訪問的操作之間進(jìn)行區(qū)分。Reg字段744的作用可被歸結(jié)為兩種情形:對目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼;或者被視為操作碼擴(kuò)展且不用于對任何指令操作數(shù)進(jìn)行編碼。R/M字段746的作用可包括如下:對參考存儲器地址的指令操作數(shù)進(jìn)行編碼;或者對目的地寄存器操作數(shù)或源寄存器操作數(shù)進(jìn)行編碼。
[0111]比例索引基址(SIB)字節(jié)(字節(jié)6) —如先前所述的,比例字段650的內(nèi)容用于存儲器地址生成。SIB.xxx754和SIB.bbb756 一先前已經(jīng)針對寄存器索引Xxxx和Bbbb參考了這些字段的內(nèi)容。
[0112]位移字段662A (字節(jié)7-10) —當(dāng)MOD字段742包含10時,字節(jié)7_10是位移字段662A,并且它與傳統(tǒng)32位位移(disp32) —樣地工作,并且以字節(jié)粒度工作。
[0113]位移因數(shù)字段662B(字節(jié)7) —當(dāng)MOD字段742包含01時,字節(jié)7是位移因數(shù)字段662B。該字段的位置與傳統(tǒng)x86指令集8位位移(disp8)的位置相同,它以字節(jié)粒度工作。由于dispS是符號擴(kuò)展的,因此它可只在-128和127字節(jié)偏移量之間尋址,在64字節(jié)的高速緩存行的方面,disp8使用可被設(shè)為僅四個真正有用的值-128、-64,0和64的8位;由于常常需要更大的范圍,所以使用disp32 ;然而,disp32需要4個字節(jié)。與disp8和disp32對比,位移因數(shù)字段662B是dispS的重新解釋;當(dāng)使用位移因數(shù)字段662B時,實際位移通過位移因數(shù)字段的內(nèi)容乘以存儲器操作數(shù)訪問的尺寸(N)確定。該類型的位移被稱為disp8*N。這減小了平均指令長度(用于位移但具有大得多的范圍的單一字節(jié))。這種壓縮位移基于有效位移是存儲器訪問的粒度的倍數(shù)的假設(shè),并且由此地址偏移量的冗余低階位不需要被編碼。換句話說,位移因數(shù)字段662B替代傳統(tǒng)x86指令集8位位移。由此,位移因數(shù)字段662B以與x86指令集8位位移相同的方式(因此在ModRM/SIB編碼規(guī)則中沒有變化)進(jìn)行編碼,唯一的不同在于,dispS超載至disp8*N。換句話說,在編碼規(guī)則或編碼長度中沒有變化,而是僅在通過硬件對位移值的解釋中有變化(這需要按存儲器操作數(shù)的尺寸來按比例縮放位移量以獲得字節(jié)式地址偏移量)。
[0114]立即數(shù)字段672如先前所述地操作。
[0115]完整操作碼字段
[0116]圖7B是示出根據(jù)本發(fā)明的實施例的構(gòu)成完整操作碼字段674的具有專用向量友好指令格式700的字段的方框圖。具體地,完整操作碼字段674包括格式字段640、基礎(chǔ)操作字段642、以及數(shù)據(jù)元素寬度(W)字段664?;A(chǔ)操作字段642包括前綴編碼字段725、操作碼映射字段715以及實操作碼字段730。
[0117]寄存器索引字段
[0118]圖7C是示出了根據(jù)本發(fā)明的一個實施例的構(gòu)成寄存器索引字段644的具有專用向量友好指令格式700的字段的方框圖。具體地,寄存器索引字段644包括REX字段705、REX’ 字段 710、M0DR/M.reg 字段 744、M0DR/M.r/m 字段 746、VVVV 字段 720、xxx 字段 754 以及bbb字段756。
[0119]擴(kuò)充操作字段
[0120]圖7D是示出了根據(jù)本發(fā)明的一個實施例的構(gòu)成擴(kuò)充操作字段650的具有專用向量友好指令格式700的字段的方框圖。當(dāng)類(U)字段668包含O時,它表達(dá)EVEX.UO (A類668A);當(dāng)它包含I時,它表達(dá)EVEX.U1(B類668B)。當(dāng)U = O且MOD字段742包含11 (表達(dá)無存儲器訪問操作)時,α字段652(EVEX字節(jié)3,位[7] - EH)被解釋為rs字段652A。當(dāng)rs字段652A包含I (舍入652A.1)時,β字段654 (EVEX字節(jié)3,位[6:4] - SSS)被解釋為舍入控制字段654A。舍入控制字段654A包括一位SAE字段656和兩位舍入操作字段658。當(dāng)rs字段652A包含O (數(shù)據(jù)變換652A.2)時,β字段654 (EVEX字節(jié)3,位[6:4] - SSS)被解釋為三位數(shù)據(jù)變換字段654Β。當(dāng)U = O且MOD字段742包含00、01或10 (表達(dá)存儲器訪問操作)時,α字段652 (EVEX字節(jié)3,位[7] -EH)被解釋為驅(qū)逐提示(EH)字段652B且β字段654(EVEX字節(jié)3,位[6:4]_SSS)被解釋為三位數(shù)據(jù)操縱字段654C。
[0121]當(dāng)U = I時,α字段652 (EVEX字節(jié)3,位[7] - EH)被解釋為寫掩碼控制(Z)字段652C。當(dāng)U = I且MOD字段742包含11 (表達(dá)無存儲器訪問操作)時,β字段654的一部分(EVEX字節(jié)3,位[4] - S0)被解釋為RL字段657Α ;當(dāng)它包含I (舍入657Α.1)時,β字段654的其余部分(EVEX字節(jié)3,位[6_5] - S2^1)被解釋為舍入操作字段659Α,而當(dāng)RL字段657Α包含0(VSIZE657.A2)時,β字段654的其余部分(EVEX字節(jié)3,位[6-5]-?^)被解釋為向量長度字段659B(EVEX字節(jié)3,位[6_5] - L1J。當(dāng)U= I且MOD字段742包含00、01或10 (表達(dá)存儲器訪問操作)時,β字段654(EVEX字節(jié)3,位[6:4] - SSS)被解釋為向量長度字段659B (EVEX字節(jié)3,位[6-5] - L卜0)和廣播字段657B (EVEX字節(jié)3,位[4] - B)。
[0122]示例性寄存器架構(gòu)
[0123]圖8是根據(jù)本發(fā)明的一個實施例的寄存器架構(gòu)800的框圖。在所示出的實施例中,有32個512位寬的向量寄存器810 ;這些寄存器被引用為zmmO到zmm31。較低的16zmm寄存器的較低階256個位覆蓋在寄存器ymmO-16上。較低的16zmm寄存器的較低階128個位(ymm寄存器的較低階128個位)覆蓋在寄存器xmmO-15上。專用向量友好指令格式700對這些覆蓋的寄存器組操作,如在以下表格中所示的。
[0124]
【權(quán)利要求】
1.一種處理核,包括: 執(zhí)行單元邏輯電路,具有下列部件以執(zhí)行單個指令: a)第一寄存器,用于存儲第一向量輸入操作數(shù)Vl[]; b)第二寄存器,用于存儲第二向量輸入操作數(shù)V2[]; c)第三寄存器,用于存儲第二向量輸入操作數(shù)V3[]; c)第四寄存器,用于存儲一打包數(shù)據(jù)結(jié)構(gòu),所述打包數(shù)據(jù)結(jié)構(gòu)包含標(biāo)量輸入操作數(shù)a和b ; d)乘法器,用于執(zhí)行操作(a*V2[])+ (b*V3[])+Vl[]。
2.如權(quán)利要求1所述的處理核,其特征在于, 所述乘法器具有用于接收V2[]的第一輸入、用于接收a的第二輸入、用于接收V3[]的第三輸入以及用于接收b的第四輸入,使得基本上同時計算(a*V2[])和(b*V3[])。
3.如權(quán)利要求1所述的處理核,其特征在于, 所述執(zhí)行單元包括用于循環(huán)通過所述乘法器兩次的微代碼,第一次循環(huán)計算(a*V2 [])而第二次循環(huán)計算(b*V3[])。
4.如權(quán)利要求1 所述的處理核,其特征在于, 所述指令單獨(dú)地標(biāo)識由所述乘法器所產(chǎn)生的(a*V2[])、(b*V3[])和Vl[]項中的每一項的符號。
5.如權(quán)利要求所述的處理核,其特征在于, 單獨(dú)地標(biāo)識的符號被提供在imm8立即操作數(shù)中。
6.如權(quán)利要求1所述的處理核,其特征在于, 在所述打包數(shù)據(jù)結(jié)構(gòu)之內(nèi)a和b的各自的位置能從用于所述操作的指令的立即操作數(shù)中所放置的信息被確定。
7.一種方法,包括: 在流水線中執(zhí)行單個指令,所述單個指令的執(zhí)行包括: 加載第一向量操作數(shù)Vl []; 加載第二向量操作數(shù)V2[]; 加載第三向量操作數(shù)V3[]; 加載一打包數(shù)據(jù)結(jié)構(gòu),所述打包數(shù)據(jù)結(jié)構(gòu)包含標(biāo)量值a和b ;以及 計算 Vl[] = (a*V2[]) + (b*V3[])+Vl[]。
8.如權(quán)利要求7所述的方法,其特征在于,還包括: 基本上同時計算(a*V2[]) + (b*V3[])。
9.如權(quán)利要求7所述的方法,其特征在于,還包括: 在第一微代碼循環(huán)中計算(a*V2[]),并且在第二微代碼循環(huán)中計算(b*V3[])。
10.如權(quán)利要求7所述的方法,其特征在于,還包括: 將寫掩碼應(yīng)用到結(jié)果Vl []。
11.如權(quán)利要求7所述的方法,其特征在于, 所述指令在立即值中提供足以從所述打包數(shù)據(jù)結(jié)構(gòu)中單獨(dú)地提取a和b中的每一個的信息。
12.如權(quán)利要求7所述的方法,其特征在于,所述指令根據(jù)也允許兩個向量源操作數(shù)和目的地的指令格式而構(gòu)建。
13.—種處理核,包括: 執(zhí)行單元邏輯電路,具有: a)第一寄存器,用于存儲第一向量輸入操作數(shù); b)第二寄存器,用于存儲第二向量輸入操作數(shù); c)第三寄存器,用于存儲一打包數(shù)據(jù)結(jié)構(gòu),所述打包數(shù)據(jù)結(jié)構(gòu)包含標(biāo)量輸入操作數(shù)a和b ; d)乘法器,用于執(zhí)行操作: (a* (第一向量輸入操作數(shù)))+ (b* (第二向量操作數(shù)))。
14.如權(quán)利要求13所述的處理核,其特征在于, 所述乘法器具有用于接收第一向量輸入操作數(shù)的第一輸入、用于接收a的第二輸入、用于接收第二向量輸入操作數(shù)的第三輸入以及用于接收b的第四輸入,使得基本上同時計算(a*(第一向量輸入操作數(shù)))和(b*(第二向量輸入操作數(shù)))。
15.如權(quán)利要求13所述的處理核,其特征在于, 所述執(zhí)行單元包括用于循環(huán)通過所述乘法器兩次的微代碼,第一次循環(huán)計算(a*(第一向量輸入操作數(shù)))而第二次循環(huán)計算(b*(第二向量輸入操作數(shù)))。
16.如權(quán)利要求13所述的處理核,其中, 在所述打包數(shù)據(jù)結(jié)構(gòu)之內(nèi)a和b的各自的位置能根據(jù)所述指令的立即操作數(shù)中所放置的信息被確定。
17.如權(quán)利要求16所述的處理核,其中, (a*(第一向量輸入操作數(shù)))和(b*(第二向量操作數(shù)))中的每一個的符號值在所述立即操作數(shù)中被指定。
18.如權(quán)利要求13所述的處理核,其中, (a*(第一向量輸入操作數(shù)))和(b*(第二向量操作數(shù)))中的每一個的符號值在所述指令的立即操作數(shù)中被指定。
【文檔編號】G06F9/30GK104011665SQ201180075799
【公開日】2014年8月27日 申請日期:2011年12月23日 優(yōu)先權(quán)日:2011年12月23日
【發(fā)明者】J·考博爾, A·T·福塞斯, R·艾斯帕薩, M·費(fèi)爾南德斯, T·D·弗萊切 申請人:英特爾公司