專利名稱:包括對準(zhǔn)或者廣播指令的多媒體協(xié)處理器控制機(jī)制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域。更具體來講,本發(fā)明涉及包含協(xié)處理器的數(shù)據(jù)處理系統(tǒng)。
背景技術(shù):
提供包含主處理器以及協(xié)處理器的數(shù)據(jù)處理系統(tǒng)是眾所周知的。在一些系統(tǒng)中,能夠向主處理器提供一個(gè)或多個(gè)不同的協(xié)處理器也是為人們所熟知的。在該情況下,不同的協(xié)處理器可以由不同的協(xié)處理器編號來區(qū)別。
將在主處理器的指令數(shù)據(jù)流中遇到的協(xié)處理器指令在總線上發(fā)布,其中所述總線與所述協(xié)處理器耦合。附于所述總線的一個(gè)或多個(gè)協(xié)處理器(其均具有相關(guān)聯(lián)的硬布線的協(xié)處理器編號)檢驗(yàn)所述指令的協(xié)處理器編號字段,以便確定對于該指令而言它們是否是目標(biāo)協(xié)處理器。如果它們是目標(biāo)協(xié)處理器,那么它們向主處理器發(fā)布接受信號。如果所述主處理器沒有接收到接受信號,那么它可以進(jìn)入異常狀態(tài)來處理未定義指令。
假定所述協(xié)處理器指令是主處理器指令的子集,那么在許多環(huán)境中,對于協(xié)處理器而言,指令位空間是受限的。如果協(xié)處理器要求具有大量寬操作的充足指令集,那么會使這些問題更加惡化。
由此,需要更好的方式來為協(xié)處理器配制指令。
圖1示意性地舉例說明了依照本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)處理系統(tǒng);圖2舉例說明了依照本發(fā)明一個(gè)實(shí)施例的協(xié)處理器;圖3是對依照本發(fā)明一個(gè)實(shí)施例的操作的位序列的敘述;圖4是依照本發(fā)明一個(gè)實(shí)施例的流程圖;圖5是依照本發(fā)明一個(gè)實(shí)施例的邏輯運(yùn)算的流程圖;圖6是依照本發(fā)明一個(gè)實(shí)施例的對準(zhǔn)操作的流程圖;
圖7是依照本發(fā)明一個(gè)實(shí)施例的一次操作的敘述;圖8是依照本發(fā)明一個(gè)實(shí)施例的絕對差運(yùn)算的求和的流程圖;圖9是依照本發(fā)明一個(gè)實(shí)施例的開包操作的流程圖;圖10A是依照本發(fā)明一個(gè)實(shí)施例的另一運(yùn)算的敘述;圖10B是依照本發(fā)明一個(gè)實(shí)施例的另一運(yùn)算的敘述;圖11是依照本發(fā)明一個(gè)實(shí)施例的又一運(yùn)算的敘述;圖12A是依照本發(fā)明一個(gè)實(shí)施例的再一運(yùn)算的敘述;圖12B是依照本發(fā)明一個(gè)實(shí)施例的另一運(yùn)算的敘述;圖13是依照本發(fā)明一個(gè)實(shí)施例的另一運(yùn)算的敘述;圖14是依照本發(fā)明一個(gè)實(shí)施例的打包操作的流程圖;圖15是依照本發(fā)明一個(gè)實(shí)施例的平均二操作的流程圖;圖16是依照本發(fā)明一個(gè)實(shí)施例的正移操作的流程圖;圖17是依照本發(fā)明一個(gè)實(shí)施例的累加運(yùn)算的流程圖;圖18是依照本發(fā)明一個(gè)實(shí)施例的最大值/最小值運(yùn)算的流程圖;圖19是依照本發(fā)明一個(gè)實(shí)施例的比較操作的流程圖;圖20是依照本發(fā)明一個(gè)實(shí)施例的廣播操作的流程圖;圖21是依照本發(fā)明一個(gè)實(shí)施例的移位操作的流程圖;以及圖22是用于圖2中所示移位和交換單元的換碼器的一個(gè)實(shí)施例的示意性敘述。
具體實(shí)施例方式
如圖1所示,依照本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)處理系統(tǒng)22可以包括主處理器或執(zhí)行核心24,多媒體協(xié)處理器26,高速緩沖存儲器28和輸入/輸出系統(tǒng)32。依照本發(fā)明的一個(gè)實(shí)施例,所述輸入/輸出系統(tǒng)32可以與無線接口33耦合。
在操作中,所述主處理器24執(zhí)行數(shù)據(jù)處理指令流,所述數(shù)據(jù)處理指令流用于控制一般類型的數(shù)據(jù)處理操作,包括與高速緩沖存儲器28以及輸入/輸出系統(tǒng)32的交互。在數(shù)據(jù)處理指令流內(nèi)嵌入有協(xié)處理器指令。所述主處理器24認(rèn)出這些協(xié)處理器指令是應(yīng)該由附屬的協(xié)處理器26來執(zhí)行的類型。據(jù)此,所述主處理器24在協(xié)處理器總線36上發(fā)布這些協(xié)處理器指令,并且任意的附屬協(xié)處理器可以從所述協(xié)處理器總線36上接收它們。在該情況下,所述協(xié)處理器26將接受并且執(zhí)行任何所接收到的、被檢測為用于該協(xié)處理器的協(xié)處理器指令。此檢測是通過在協(xié)處理器指令內(nèi)、組合協(xié)處理器編號字段與為所指定的協(xié)處理器編碼的有效指令來實(shí)現(xiàn)的。
參照圖2,所述多媒體協(xié)處理器26可以包括協(xié)處理器接口單元(CIU)34,所述協(xié)處理器接口單元34包括轉(zhuǎn)送緩沖器46。所述轉(zhuǎn)送緩沖器46可以便于向協(xié)處理器寄存器(MCR)進(jìn)行轉(zhuǎn)送,并且轉(zhuǎn)送來自于協(xié)處理器(MRC)的內(nèi)容。所述CIU 34還可以包括存儲緩沖器48以及載入緩沖器50。所述CIU 34與乘法累加單元36、移位及交換單元38以及算術(shù)邏輯單元(ALU)/邏輯單元40通信。所述CGR 44包含輔助寄存器。多個(gè)多路復(fù)用器(MUX)便于各個(gè)單元之間的數(shù)據(jù)轉(zhuǎn)送。
寄存器堆(RF)單元42可以包括多個(gè)寄存器。在一個(gè)實(shí)施例中,所述RF單元42可以包括十六個(gè)寄存器。對于每個(gè)指令,可以為其分配三個(gè)寄存器42a。在本發(fā)明的一些實(shí)施例中,可以為每個(gè)指令分配兩個(gè)源寄存器以及一個(gè)目的寄存器42a。依照本發(fā)明的一個(gè)實(shí)施例,主要的源寄存器可以被指定為wRn,輔助源寄存器可以被指定為wRm,并且目的寄存器可以被指定為wRd。
協(xié)處理器指令可以被有條件地執(zhí)行。有條件地執(zhí)行指的是所述指令具有這樣的條件,通過確定圖1中的主處理器算術(shù)標(biāo)志25a和25b是否與指定的條件匹配來進(jìn)行檢驗(yàn)。
緊接著轉(zhuǎn)向圖3,在一些實(shí)施例中,64位單指令多數(shù)據(jù)(SIMD)算術(shù)運(yùn)算可以通過協(xié)處理器數(shù)據(jù)處理(CDP)指令來執(zhí)行??梢允褂萌僮鲾?shù)指令,它們包括兩個(gè)源操作數(shù)和一個(gè)目的操作數(shù)。在一些實(shí)施例中,所述協(xié)處理器可以對8,16,32和64位值進(jìn)行操作,并且可以有條件地被執(zhí)行。在一些情況下,可以執(zhí)行加減法,以及具有進(jìn)位的加法??梢詫λ蠸IMD字段執(zhí)行零、負(fù)數(shù)、進(jìn)位以及溢出檢測。此外,可以與無符號的飽和一起來執(zhí)行SIMD字段寬度的有符號飽和。
所述加法指令執(zhí)行8,16,或者32位有符號或者無符號數(shù)據(jù)向量的源寄存器(wRn以及wRm)內(nèi)容的向量加法。所述指令把結(jié)果放置在目的寄存器wRd中。飽和可以被指定為有符號的、無符號的或者不飽和的。
飽和涉及到當(dāng)由運(yùn)算產(chǎn)生的位數(shù)超出有效容量時(shí)發(fā)生的事情。如果不飽和,那么只存在結(jié)果的較低位。如果是無符號飽和(US),那么可以存在從零到最大容量的位。如果是有符號飽和(SS),那么存在從最大正值到最大負(fù)值的位。以下的偽碼中,在大括號內(nèi)表明飽和類型SS和US,表示它們是任選的。
操作數(shù)的大小可以是一字節(jié)或8位,半字或16位,字或32位。在一些環(huán)境中,可以將16位稱為字、將32位稱為雙字,并且將64位稱為四倍長字。在字節(jié)SIMD的情況下,在目的寄存器(wRd)中每個(gè)編號的字節(jié)定位是使源寄存器(wRn以及wRm)中同一字節(jié)位置的和飽和達(dá)到指定數(shù)據(jù)大小(例如,字節(jié)長度8)的結(jié)果wRd[byte 7]=saturate(wRn[byte 7]+wRm[byte 7],{US,SS},8)wRd[byte 6]=saturate(wRn[byte 6]+wRm[byte 6],{US,SS},8)wRd[byte 5]=saturate(wRn[byte 5]+wRm[byte 5],{US,SS},8)wRd[byte 4]=saturate(wRn[byte 4]+wRm[byte 4],{US,SS},8)wRd[byte 3]=saturate(wRn[byte 3]+wRm[byte 3],{US,SS},8)wRd[byte 2]=saturate(wRn[byte 2]+wRm[byte 2],{US,SS},8)wRd[byte 1]=saturate(wRn[byte 1]+wRm[byte 1],{US,SS},8)wRd[byte 0]=saturate(wRn[byte 0]+wRm[byte 0],{US,SS},8)在半字的情況下wRd[half 3]=saturate(wRn[half 3]+wRm[half 3],{US,SS},16)wRd[half 2]=saturate(wRn[half 2]+wRm[half 2],{US,SS},16)wRd[half 1]=satufate(wRn[half 1]+wRm[half 1],{US,SS},16)wRd[half 0]=saturate(wRn[half 0]+wRm[half 0],{US,SS},16)最終,如果字SIMD被識別wRd[word 1]=saturate(wRn[word 1]+wRm[word 1],{US,SS},32)wRd[word 0]=saturate(wRn[word 0]+wRm[word 0],{US,SS},32)所得到的編碼產(chǎn)生32位指令,其中,位0至3屬于wRm源寄存器,位4是零,位5至7識別運(yùn)算,在加法指令的情況下其是100。位8至11識別協(xié)處理器編號,在這里其是一。位12至15給出目的寄存器,而位16至19屬于源寄存器wRn。
位20以及21提供飽和類型。對于不飽和而言,所述位是00,對于無符號飽和(US)而言它們是01,而對于有符號飽和(SS)而言它們是11。位22以及23提供操作數(shù)的大小。對于一個(gè)字節(jié)大小的操作數(shù)而言,位22以及23是00,對于半字而言,所述位是01,對于字而言,所述位是10。位24至27可以是1110,表明協(xié)處理器運(yùn)算。隨后的論述假定位27至24是1110,指定協(xié)處理器指令。位28至31表明是否應(yīng)用條件執(zhí)行。條件執(zhí)行可以被隨意地指定。
減法運(yùn)算執(zhí)行從有符號或無符號數(shù)據(jù)的8,16或32位向量wRn中減去wRm的向量減法,并且把結(jié)果放在wRd中。此外,可以指定飽和。對于SIMD是8位或一字節(jié)的情形而言wRd[byte 7]=saturate(wRn[byte 7]-wRm[byte 7],{US,SS},8)wRd[byte 6]=saturate(wRn[byte 6]-wRm[byte 6],{US,SS},8)wRd[byte 5]=saturate(wRn[byte 5]-wRm[byte 5],{US,SS},8)wRd[byte 4]=saturate(wRn[byte 4]-wRm[byte 4],{US,SS},8)wRd[byte 3]=saturate(wRn[byte 3]-wRm[byte 3],{US,SS},8)wRd[byte 2]=saturate(wRn[byte 2]-wRm[byte 2],{US,SS},8)wRd[byte 1]=saturate(wRn[byte 1]-wRm[byte 1],{US,SS},8)wRd[byte 0]=saturate(wRn[byte 0]-wRm[byte 0],{US,SS},8)如果所述指令是半字wRd[half 3]=saturate(wRn[half 3]-wRm[half 3],{US.SS},16)wRd[half 2]=saturate(wRn[half 2]-wRm[half 2],{US,SS},16)wRd[half 1]=saturate(wRn[half 1]-wRm[half 1],{US,SS},16)wRd[half 0]=saturate(wRn[half 0]-wRm[half 0],{US,SS},16)最終,如果被指定為字wRd[word 1]=saturate(wRn[word 1]-wRm[word 1],{US,SS},32)wRd[word 0]=saturate(wRn[word 0]-wRm[word 0],{US.SS},32)所述代碼與先前對加法操作描述的一樣,除了位5至7可以表示101,用于識別向量減法。
由此,參照圖4,在加或減指令的情況下,在塊62,位5至7被分析以便確定是否涉及加或減指令。加法指令時(shí)這些位是100,而減法指令時(shí)為101。如果涉及加或減,那么依照在塊66所確定的那樣來分析位8至11。在菱形68進(jìn)行檢驗(yàn),以便確定所分析的位是否表明指定了多媒體協(xié)處理器。如果是這樣的話,在菱形69進(jìn)行檢驗(yàn),以便確定是否指定了條件執(zhí)行。如果是這樣的話,在菱形71進(jìn)行檢驗(yàn),以便確定算術(shù)寄存器25中標(biāo)志的狀態(tài)。如果所述標(biāo)志表明條件得到滿足,那么指令執(zhí)行繼續(xù);否則,流程移到下一指令。
可以在塊70分析位22和23。如果所述位是零和零,如在菱形71所確定的那樣,那么操作數(shù)大小是一字節(jié)。同樣,如果所述位是零和一,如在菱形72所確定的那樣,那么操作數(shù)大小是半字,否則,所述指令是無效的(位22和23兩個(gè)都是一),或操作數(shù)大小是全字。在所述流程中,為了此處描述以及隨后指令的清楚,無效選項(xiàng)被省略。在塊74設(shè)置大小。
接下來,在塊76分析位20和21。如果那些位是零和零,如在菱形78所確定的那樣,那么不飽和被使用。同樣,如果所述位是零和一,如在菱形80所確定的那樣,那么無符號飽和被提供。否則,有符號飽和被提供。在塊82設(shè)置適當(dāng)?shù)娘柡皖愋汀?br>
對于邏輯運(yùn)算而言,所述位11至8、7至5以及23至22全部是零。在位的位置21至20中的值00確定或(0R)功能,在位的位置21至20中的值01確定異或(XOR)功能,在位的位置21至20中的值10確定與(AND)功能,而在位的位置21至20中的值11確定與非(ANDN)功能。在與功能中,所述協(xié)處理器在wRn和wRm之間執(zhí)行逐位邏輯與,并且將結(jié)果放在目的寄存器wRd中。在或功能中,所述協(xié)處理器在wRn和非wRm之間執(zhí)行逐位邏輯或,并且將結(jié)果放在目的寄存器wRd中。在與非功能中,所述協(xié)處理器在wRn和非wRm之間執(zhí)行逐位邏輯與,并且將結(jié)果放在目的寄存器wRd中。在異或(XOR)功能中,所述協(xié)處理器在wRn和wRm之間執(zhí)行逐位邏輯異或,并且將結(jié)果放在wRd中。例如可以如圖4所示那樣指定并實(shí)現(xiàn)條件執(zhí)行。
參照圖5,在菱形84進(jìn)行檢驗(yàn),以便確定所述位模式是否對應(yīng)于邏輯運(yùn)算。若非,所述流程跳轉(zhuǎn)到另一模塊,否則,依照在86表明的那樣執(zhí)行邏輯運(yùn)算。在菱形88,90以及92,基于位21和20、就采用什么類型的邏輯運(yùn)算做出確定。
所述對準(zhǔn)操作執(zhí)行有效的功能來處理不是以64位為界限存儲在存儲器中數(shù)據(jù)。例如,技術(shù)只能夠從64位對準(zhǔn)的地址載入64位、雙字?jǐn)?shù)據(jù)。因此,如果需要未對準(zhǔn)的值,那么未對準(zhǔn)的值跨越的兩個(gè)64位對準(zhǔn)雙字被載入寄存器堆,并且將對準(zhǔn)指令用于提取所要求的準(zhǔn)確的64位。這樣做省去了傳統(tǒng)方案中的移位和屏蔽值來提取正確的對準(zhǔn)。所述對準(zhǔn)指令可以以字節(jié)為界限從兩個(gè)源寄存器提取任何64位值。
圖7示出了對準(zhǔn)指令的應(yīng)用的例子。在此例子中,所需數(shù)據(jù)是來自于地址0×103的64位值,其不是64位的對準(zhǔn)地址。為了獲取此值,來自于地址0×100的雙字?jǐn)?shù)據(jù)被載入右側(cè)源寄存器,并且來自于地址0×108的雙字?jǐn)?shù)據(jù)被載入左側(cè)源寄存器。所述對準(zhǔn)指令和三字節(jié)的指定偏移一起使用。這使得來自于右側(cè)寄存器的5字節(jié)(來自于地址0×103-0×107的字節(jié))將被提取,并且與左側(cè)寄存器的較低三個(gè)字節(jié)(來自于地址0×108-0×10A)相組合。由此,在執(zhí)行對準(zhǔn)指令之后,目的寄存器包含來自于地址0×103到0×10A的期望數(shù)據(jù),即,地址0×103處的64位值。
所述對準(zhǔn)偏移可以在使用指令的即時(shí)形式時(shí)被即時(shí)指定,或者通過使用寄存器格式并且在wCGRx輔助寄存器中存放對準(zhǔn)偏移來指定。如果地址偏移是通過屏蔽存取地址的低位來創(chuàng)建然后被轉(zhuǎn)送至wCGR寄存器的話,那么后者是十分有用的。由此,參照圖7,給出一個(gè)例子,其中即時(shí)對準(zhǔn)模式(IMM)位20至22等于三,用于指定字節(jié)偏移值以便提取。
當(dāng)如同單采用有限脈沖響應(yīng)(FIR)濾波器一樣事先已知對準(zhǔn)序列時(shí),即時(shí)對準(zhǔn)指令十分有用。當(dāng)如同用于視頻壓縮的快速運(yùn)動(dòng)搜索算法一樣執(zhí)行所述算法時(shí),如果計(jì)算對準(zhǔn)序列,寄存器對準(zhǔn)指令十分有用。這些指令都是在寄存器對上操作的,其可以被有效地轉(zhuǎn)換,利用交替載入顯著降低了對準(zhǔn)的開銷。
在對準(zhǔn)操作中,位8至11是零,而位5至7是001。所述協(xié)處理器使用處于位的位置23和22的值10來確定要使用的寄存器對準(zhǔn)值。位的位置23中的值零用于要定待使用的即時(shí)對準(zhǔn)值。在寄存器對準(zhǔn)模式中,位21和位20經(jīng)由CGR 44(圖2)確定四個(gè)輔助寄存器的哪一個(gè)供對準(zhǔn)值使用。
在即時(shí)對準(zhǔn)模式中,位20至22確定對準(zhǔn)偏移(零和七之間)。在即時(shí)對準(zhǔn)中,所述協(xié)處理器從兩個(gè)64位源寄存器((wRn(在位16至19)和wRm(在位0至3))提取64位值,并將結(jié)果放在目的寄存器wRd(在位12至15)中。所述指令使用三位中間值來指定要提取的值的字節(jié)偏移。作為采用其他指令的情況,位4是零,位24至27是1110,而位28至31用于條件執(zhí)行。
參照圖6,在菱形112進(jìn)行檢驗(yàn),以便確定是否基于位模式指定了對準(zhǔn)操作。在菱形106進(jìn)行檢驗(yàn),以便確定所述位是否確定了寄存器對準(zhǔn)值,其中所述對準(zhǔn)值是在塊108和110中設(shè)置的。若非,在菱形112進(jìn)行檢驗(yàn),以便確定位23是否等于零,以表明即時(shí)對準(zhǔn)值,其是在塊114中設(shè)置的。在塊116,所述位20至22被用于確定對準(zhǔn)偏移。例如可以指定并且如圖4所示那樣實(shí)現(xiàn)條件執(zhí)行。
寄存器對準(zhǔn)操作從兩個(gè)64位源寄存器(wRn和wRm)提取64位值,并將結(jié)果放在目的寄存器wRd中。所述指令使用存儲在指定的通用寄存器中的3位值來指定要提取的值的偏移值。
參照圖22,可以作為移位及交換單元38一部分的換碼器300可以處理對準(zhǔn)操作。所述換碼器300在預(yù)處理塊302和304接收來自于源寄存器(SRC1和SRC2)的操作數(shù)。在一個(gè)實(shí)施例中,所述塊302以及304可以通過一組多路復(fù)用器來實(shí)現(xiàn)。
解碼邏輯310接收控制信號,所述控制信號用于指定即時(shí)或寄存器對準(zhǔn)以及即時(shí)或者偏移值。在組合部306中組合所述信息并且由多路復(fù)用器308來多路復(fù)用。
可以在wRn和wRm之間執(zhí)行絕對差的求和(SAD),并且將結(jié)果與wRd累加??梢詫⒔^對差的求和應(yīng)用于8或16位無符號數(shù)據(jù)向量,并且累加SIMD平行絕對差計(jì)算的結(jié)果。所述位11至8必須是0001。位7至5必須是001,而所述位23和21必須是零。將位20用來確定是否首先歸零累加器。例如可以指定并且如圖4所示那樣實(shí)現(xiàn)條件執(zhí)行。位22用來確定字節(jié)或半字SIMD計(jì)算。如果B被指定,那么wRd[word1]=0。可以指定Z來表明首先對累加器歸零,那么wRd[word 0]=(Z Specified)?0wRd[word 0]+abs(wRn[byte 7]-wRm[byte 7])+abs(wRn[byte 6]-wRm[byte 6])+abs(wRn[byte 5]-wRm[byte 5])+abs(wRn[byte 4]-wRm[byte 4])+abs(wRn[byte 3]-wRm[byte 3])+abs(wRn[byte 2]-wRm[byte 2])+abs(wRn[byte 1]-wRm[byte 1])+abs(wRn[byte 0]-wRm[byte 0])如果指定了H表示半字SIMD,那么wRd[word 0]=(Z Specified)?0wRd[word 0]+abs(wRn[half 3]-wRm[half 3])
+abs(wRn[half 2]-wRm[half 2])+abs(wRn[half 1]-wRm[half 1])+abs(wRn[half 0]-wRm[half 0])參照圖8,在菱形112進(jìn)行檢驗(yàn),以便確定位模式是否指定SAD操作,其是在塊114中設(shè)置的。如果是這樣的話,在菱形116進(jìn)行檢驗(yàn),以便確定位20是否是零,這要求歸零所述累加器,如在塊118所表明的那樣。在菱形120進(jìn)行檢驗(yàn),以便確定位22是否是零,這表明字節(jié)長度計(jì)算。否則,設(shè)置半字,如在塊124所表明的那樣。
所述協(xié)處理器可以執(zhí)行開包操作,將源操作數(shù)開包放入目的寄存器。存在兩種模式交織開包和擴(kuò)展開包。在交織模式中可以存在兩個(gè)源操作數(shù),而只有單個(gè)源操作數(shù)用于擴(kuò)展所述SIMD字段。源數(shù)據(jù)可以是一字節(jié)、半字或字。所述協(xié)處理器可以開包并且將兩個(gè)源操作數(shù)交織并且保持SIMD字段不變。這樣可以開包源操作數(shù)的低位或高位的半個(gè)部分。這樣還可以開包單個(gè)源操作數(shù),使每個(gè)SIMD寬度加倍。它可以零擴(kuò)展單個(gè)源開包值,并且可以符號擴(kuò)展單個(gè)源開包值。它可以為每個(gè)SIMD字段在最終結(jié)果標(biāo)志(N和Z)上設(shè)定飽和設(shè)置。例如可以指定并且如圖4所示那樣實(shí)現(xiàn)條件執(zhí)行。
所述位8至11是0000。所述位7至6是11,而位五用于確定它是高位還是低位開包。位的位置22和23用來確定數(shù)據(jù)大小。對于字節(jié)大小而言,所述位22和23是00,對于半字大小而言是01,對于字大小而言是10。位20確定是選擇擴(kuò)展模式還是選擇交織模式。對于交織模式而言,該位是一。位21確定是符號擴(kuò)展還是零擴(kuò)展,并且如果所述位是一,那么將其設(shè)定為符號擴(kuò)展。位5中的值確定是開包源操作數(shù)的較低部分還是開包較高部分。對于低位開包而言,所述位是一,而對于高位開包而言,所述位是零。
參照圖9,在菱形124進(jìn)行檢驗(yàn),以便確定是否通過位模式指定了開包操作。倘若如此,在菱形128進(jìn)行檢驗(yàn)以便確定位23和22表明是字節(jié)大小數(shù)據(jù)、半字大小數(shù)據(jù)還是字大小數(shù)據(jù)。接下來,在菱形138進(jìn)行檢驗(yàn),以便確定位20是等于一,表示交織模式,如在塊140所表明的那樣,還是字節(jié)20不等于一,表示擴(kuò)展模式,如在塊142所表明的那樣。在菱形144進(jìn)行檢驗(yàn)以便確定位21是否等于一,表示符號模式,否則表明零擴(kuò)展,如在塊148所表明的那樣。在菱形150進(jìn)行檢驗(yàn),以便確定位5是否等于一,表示開包較低位模式,如在塊152所表明的那樣。否則,設(shè)定為開包較高位模式,如在塊154所表明的那樣。
擴(kuò)展高位模式的開包操作對來自于wRn源寄存器上半部的8位、16位或32位數(shù)據(jù)進(jìn)行開包,并且零擴(kuò)展或者符號擴(kuò)展每個(gè)字段并且將結(jié)果放在目的寄存器wRn中。在圖10A中示出了無符號擴(kuò)展高位,并且在圖10B中示出了符號擴(kuò)展高位。
指令交織高位模式的開包對來自于wRn上半部的8位、16位或者32位數(shù)據(jù)進(jìn)行開包,與wRm的上半部交織,將結(jié)果放在目的寄存器wRd中。圖11中示出了開包交織高位模式指令。
擴(kuò)展低位開包指令對來自于源寄存器wRn下半部的8位、16位或32位數(shù)據(jù)進(jìn)行開包,并且零擴(kuò)展或者符號擴(kuò)展每個(gè)字段并且將結(jié)果放在目的寄存器wRd中。在圖12A中示出了無符號擴(kuò)展低位,并且在圖12B中示出了符號擴(kuò)展低位。
最終,開包交織低位模式對來自于wRn下半部以及wRm的下半部的8位、16位或者32位數(shù)據(jù)進(jìn)行開包,并將結(jié)果放在目的寄存器wRd中。圖13中示出了開包交織低位指令。
打包操作將來自于兩個(gè)源寄存器的數(shù)據(jù)打包到單個(gè)目的寄存器中。所述源數(shù)據(jù)可以是半字、字或雙字。在打包期間,它可以使用有符號飽和與無符號飽和。所述位8至11是0000,而所述位5至7是100。位的位置22和23中的值用來確定數(shù)據(jù)大小。這些位是01時(shí)設(shè)置為半字?jǐn)?shù)據(jù)大小,這些位是10時(shí)設(shè)置為字?jǐn)?shù)據(jù)大小,而這些位是11時(shí)設(shè)置為雙字?jǐn)?shù)據(jù)大小。位置20和21中的值確定飽和類型。對于位01而言,指定為無符號飽和,對于位11而言,設(shè)定為有符號飽和。對于16、32或64位數(shù)據(jù)向量而言,所述打包指令把來自于wRn和wRm的數(shù)據(jù)打包到wRd中,并且wRm被打包進(jìn)上半部而wRn被打包進(jìn)下半部。使所述結(jié)果飽和并且將其放在目的寄存器wRd中??梢砸勒沼蟹柕幕驘o符號飽和來執(zhí)行打包。對于半字而言,wRd[byte 7]=saturate(wRm[half 3],{US,SS},8)wRd[byte 6]=saturate(wRm[half 2],{US,SS},8)wRd[byte 5]=saturate(wRm[half 1],{US,SS},8)wRd[byte 4]=saturate(wRm[half 0],{US,SS},8)
wRd[byte 3]=saturate(wRn[half 3],{US,SS},8)wRd[byte 2]=saturate(wRn[half 2],{US,SS},8)wRd[byte 1]=saturate(wRn[half 1],{US,SS},8)wRd[byte 0]=saturate(wRn[half 0],{US,SS},8)對于全字而言wRd[half 3]=saturate(wRm[word 1],{US,SS},16)wRd[half 2]=saturate(wRm[word 0],{US,SS},16)wRd[half 1]=saturate(wRn[word 1],{US,SS},16)wRd[half 0]=saturate(wRn[word 0],{US,SS},16)對于雙字而言wRd[word 1]=saturate(wRm,{US,SS},32)wRd[word 0]=saturate(wRn,{US,SS},32)參照圖14,在菱形150進(jìn)行檢驗(yàn),以便確定位模式是否表示指定了打包操作,如在菱形150和塊152所表明的那樣。倘若如此,在菱形154和158進(jìn)行檢驗(yàn),以便確定指定了半字、字還是雙字。在菱形164進(jìn)行檢驗(yàn),以便確定所述位21和20表示無符號飽和(塊166)還是有符號飽和(塊168)。例如可以指定并且如圖4所示那樣實(shí)現(xiàn)條件執(zhí)行。
兩數(shù)平均指令用于對8或16位數(shù)據(jù)的無符號向量執(zhí)行wRn和wRm的2值平均,可選地所述8或16位數(shù)據(jù)的無符號向量具有+1的舍入,并且在目的寄存器wRd中存放結(jié)果。源數(shù)據(jù)可以是字節(jié)或半字,并且可以具有可選的舍入模式。所述位8至11是0000,位23是1,而位21是0而位7至5是000。在位的位置22中的值用來確定數(shù)據(jù)大小。位22等于0表明是字節(jié)數(shù)據(jù)大小,而等于1表明是半字?jǐn)?shù)據(jù)大小。位20確定是否進(jìn)行舍入。等于1確定進(jìn)舍入,而等于0則確定不舍入。例如可以指定并且如圖4所示那樣實(shí)現(xiàn)條件執(zhí)行。
參照圖15,在菱形168,就是否指定了兩數(shù)平均指令的運(yùn)算做出確定,如果位模式表明如此,那么在塊170中進(jìn)行設(shè)置。在菱形172進(jìn)行檢驗(yàn),以便確定數(shù)據(jù)大小是半字(塊176)還是字節(jié)(塊174)。在菱形178進(jìn)行檢驗(yàn),以便確定指定為舍入(塊180)還是不舍入(塊182)。
如果是字節(jié)長度SIMD,那么wRd[byte 7]=(wRn[byte 7]+wRm[byte 7]+Round)/2
wRd[byte 6]=(wRn[byte 6]+wRm[byte 6]+Round)/2wRd[byte 5]=(wRn[byte 5]+wRm[byte 5]+Round)/2wRd[byte 4]=(wRn[byte 4]+wRm[byte 4]+Round)/2wRd[byte 3]=(wRn[byte 3]+wRm[byte 3]+Round)/2wRd[byte 2]=(wRn[byte 2]+wRm[byte 2]+Round)/2wRd[byte 1]=(wRn[byte 1]+wRm[byte 1]+Round)/2wRd[byte 0]=(wRn[byte 0]+wRm[byte 0]+Round)/2如果是半字SIMD,那么wRd[half 3]=(wRn[half 3]+wRm[half 3]+Round)/2wRd[half 2]=(wRn[half 2]+wRm[half 2]+Round)/2wRd[half 1]=(wRn[half 1]+wRm[half 1]+Round)/2wRd[half 0]=(wRn[half 0]+wRm[half 0]+Round)/2正移操作允許根據(jù)源寄存器的16位字段在目的寄存器wRd中選擇16位數(shù)據(jù)值,其中所述源寄存器中的16位字段由8位中間值指定。其允許源的任何半字被存放在目的寄存器的任何半字中。所述位8至11是0001,而所述位5至7是111。選作半字零的值是通過位一和零的值確定的。選作半字一的值是通過位2和3的值確定的。選作半字2的值是通過位20和21的值確定的。選作半字3的值是通過位23和22的值確定的。例如可以指定并且如圖4所示那樣實(shí)現(xiàn)條件執(zhí)行。
參照圖16,在菱形184進(jìn)行檢驗(yàn),以便確定是否指定了正移操作,如果位模式表明如此,那么在塊186進(jìn)行設(shè)置。塊188確定源寄存器中哪些位將被正移到目的寄存器的哪些字段中。在塊190,從源寄存器字段中的四個(gè)十六位值之一選擇目的寄存器中的16位值。為每四個(gè)SIMD字段重復(fù)此操作。例如可以指定并且如圖4所示那樣實(shí)現(xiàn)條件執(zhí)行。
所述累加操作累加SIMD字的所有字段。它可以對字節(jié)、半字或字?jǐn)?shù)據(jù)格式進(jìn)行運(yùn)算。位8至11是0001。位5至7是110,而所述位21和20是00。所述位23和22確定所述源數(shù)據(jù)類型00時(shí)是字節(jié)數(shù)據(jù)源、01為半字而10為字。
參照圖17,在菱形196進(jìn)行確定,以表明是否已經(jīng)指定了累加(塊198)操作。倘若如此,分析位23和20以便確定提供了字節(jié)數(shù)據(jù)源(塊202)、半字?jǐn)?shù)據(jù)源(塊206)還是字?jǐn)?shù)據(jù)源(塊208)。
所述指令累加執(zhí)行跨越源寄存器wRn字段的無符號累加,并且將結(jié)果寫入目的寄存器wRd。如果字節(jié)SIMD被指定,那么wRd=wRn[6356]+wRn[5548]+wRn[4740]+wRn[3932]+wRn[3124]+wRn[2316]+wRn[158]+wRn[70]如果半字SIMD被指定,那么wRd=wRn[6348]+wRn[4732]+wRn[3116]+wRn[150]如果字被指定,那么wRd=wRn[6332]+wRn[310]最大值和最小值操作把來自于每個(gè)源字段的最大的或最小的值存放在對應(yīng)的目的地字段中。所述源數(shù)據(jù)可以是字節(jié)、半字或字。它可以使用有符號或無符號操作數(shù)進(jìn)行比較。所述位11至8必須是0001。所述位7至5應(yīng)該是011。位的位置23,22中的值確定數(shù)據(jù)大小。換句話說,對于00而言,確定為字節(jié)數(shù)據(jù)大小,對于01而言,確定為半字?jǐn)?shù)據(jù)大小,而對于10而言,確定為字?jǐn)?shù)據(jù)大小。位21確定進(jìn)行有符號比較還是進(jìn)行無符號比較。位20確定選擇最大值還是最小值。對于具有零值的位20而言,選擇最大值。例如可以指定并且如圖4所表明的那樣實(shí)現(xiàn)條件執(zhí)行。
參照圖18,在菱形210進(jìn)行檢驗(yàn),以表明指定了最大值還是最小值運(yùn)算,這在塊212中表明。在菱形214和218分析所述位23至20,以便確定指定了字節(jié)(塊216)、半字(塊220)還是字(塊222)數(shù)據(jù)大小。在菱形224進(jìn)行檢驗(yàn),以便確定有符號比較(塊226)還是無符號比較(塊228)是適當(dāng)?shù)摹W罱K,在菱形230進(jìn)行檢驗(yàn),以便確定所述運(yùn)算是最大值(塊232)還是最小值(塊234)。
最大值運(yùn)算根據(jù)對來自8、16和32位數(shù)據(jù)向量的wRn和wRm的元素執(zhí)行向量最大值選擇,并且根據(jù)目的寄存器wRd來存放最大值字段。如果8位或字節(jié)SIMD被指定,那么wRd[byte 7]=(wRn[byte 7]>wRm[byte 7])?wRn[byte 7]wRm[byte 7]wRd[byte 6]=(wRn[byte 6]>wRm[byte 6])?wRn[byte 6]wRm[byte 6]wRd[byte 5]=(wRn[byte 5]>wRm[byte 5])?wRn[byte 5]wRm[byte 5]wRd[byte 4]=(wRn[byte 4]>wRm[byte 4])?wRn[byte 4]wRm[byte 4]wRd[byte 3]=(wRn[byte 3]>wRm[byte 3])?wRn[byte 3]wRm[byte 3]wRd[byte 2]=(wRn[byte 2]>wRm[byte 2])?wRn[byte 2]wRm[byte 2]wRd[byte 1]=(wRn[byte 1]>wRm[byte 1})?wRn[byte 1]wRm[byte 1]wRd[byte 0]=(wRn[byte 0]>wRm[byte 0])?wRn[byte 0]wRm[byte 0]如果半字SIMD被指定,那么wRd[half 3]=(wRn[half 3]>wRm[half 3])?wRn[half 3]wRm[half 3]wRd[half 2]=(wRn[half 2]>wRm[half 2])?wRn[half 2]wRm[half 2]wRd[half 1]=(wRn[half 1]>wRm[half 1])?wRn[half 1]wRm[half 1]wRd[half 0]=(wRn[half 0]>wRm[half 0])?wRn[half 0]wRm[half 0]如果字被指定,那么wRd[word 1]=(wRn[word 1]>wRm[word 1])?wRn[word 1]wRm[word 1]wRd[word 0]=(wRn[word 0]>wRm[word 0])?wRn[word 0]wRm[word 0]最小值運(yùn)算對來自8、16或32位數(shù)據(jù)向量的wRn和wRm的元素執(zhí)行向量最小值選擇,并且在目的寄存器wRd中安插最小值字段。如果字節(jié)SIMD被指定,那么wRd[byte 7]=(wRn[byte 7]<wRm[byte 7])?wRn[byte 7]wRm[byte 7]wRd[byte 6]=(wRn[byte 6]<wRm[byte 6])?wRn[byte6]wRm[byte 6]
wRd[byte 5]=(wRn[byte 5]<wRm[byte 5])?wRn[byte5]wRm[byte 5]wRd[byte 4]=(wRn[byte 4]<wRm[byte 4])?wRn[byte4]wRm[byte 4]wRd[byte 3]=(wRn[byte 3]<wRm[byte 3])?wRn[byte3]wRm[byte 3]wRd[byte 2]=(wRn[byte 2]<wRm[byte 2])?wRn[byte2]wRm[byte 2]wRd[byte 1]=(wRn[byte 1]<wRm[byte 1])?wRn[byte 1]wRm[byte 1]wRd[byte 0]=(wRn[byte 0]<wRm[byte 0])?wRn[byte 0]wRm[byte 0]如果半字SIMD被指定,那么wRd[half 3]=(wRn[half 3]<wRm[half 3])?wRn[half3]wRm[half 3]wRd[half 2]=(wRn[half 2]<wRm[half 2])?wRn[half2]wRm[half 2]wRd[half 1]=(wRn[half 1]<wRm[half 1])?wRn[half 1]wRm[half 1]wRd[half 0]=(wRn[half 0]<wRm[half 0])?wRn[half 0]wRm[half 0]如果字被指定,那么wRd[word 1]=(wRn[word 1]<wRm[word 1])?wRn[word 1]wRm[word 1]wRd[word 0]=(wRn[word 0]<wRm[word 0])?wRn[word 0]wRm[word 0]所述比較操作比較所述源操作數(shù),并且如果成功,就在目的地字段中放入全1。如果所述比較失敗,它就在目的地字段中放入零。它可以對無符號操作數(shù)或?qū)τ蟹柕倪\(yùn)算比較“是否相等”,并且可以比較“是否大于”。所述位11至8是0000,而所述位7至5是011。它使用位的位置22和23中的值來確定數(shù)據(jù)大小。對于字節(jié)數(shù)據(jù)大小而言,所述值是00,對于半字?jǐn)?shù)據(jù)大小而言,所述值是01,而對于字?jǐn)?shù)據(jù)大小而言,所述值是10。它使用位20來確定是選擇“是否相等”還是“是否大于”的比較。它使用位21來確定是進(jìn)行有符號的還是無符號的“是否大于”的比較。例如可以指定并且如圖4所表明的那樣實(shí)現(xiàn)條件執(zhí)行。
比較“相等”執(zhí)行8、16或32位數(shù)據(jù)向量的wRn和wRm的向量相等比較,當(dāng)所述源操作數(shù)相等時(shí)將wRd的對應(yīng)數(shù)據(jù)元全部設(shè)置為一,否則將wRd的數(shù)據(jù)元全部設(shè)置為零。如果字節(jié)SIMD被指定,那么wRd[byte 7]=(wRn[byte 7]==wRm[byte 7])?0xFF0x00wRd[byte 6]=(wRn[byte 6]==wRm[byte 6])?0xFF0x00wRd[byte 5]=(wRn[byte 5]==wRm[byte 5])?0xFF0x00wRd[byte 4]=(wRn[byte 4]==wRm[byte 4])?0xFF0x00wRd[byte 3]=(wRn[byte 3]==wRm[byte 3])?0xFF0x00wRd[byte 2]=(wRn[byte 2]==wRm[byte 2])?0xFF0x00wRd[byte 1]=(wRn[byte 1]==wRm[byte 1])?0xFF0x00wRd[byte 0]=(wRn[byte 0]==wRm[byte 0])?0xFF0x00如果半字被指定,那么wRd[half 3]=(wRn[half 3]==wRm[half 3])?0xFFFF0x0000wRd[half 2]=(wRn[half 2]==wRm[half 2])?0xFFFF0x000wRd[half 1]=(wRn[half 1]==wRm[half 1])?0xFFFF0x0000wRd[half 0]=(wRn[half 0]==wRm[half 0])?0xFFFF0x0000如果字被指定,那么wRd[word 1]=(wRn[word 1]==wRm[word1])?0xFFFFFFFF0x00000000wRd[word 0]=(wRn[word 0]==wRm[word0])?0xFFFFFFFF0x00000000比較“是否大于”的操作執(zhí)行8,16和32位數(shù)據(jù)向量的wRn和wRm的向量幅度比較,當(dāng)wRn的對應(yīng)字段大于wRm時(shí),將wRd的對應(yīng)數(shù)據(jù)元全部設(shè)置為一。否則,它將wRd全部設(shè)定為零。所述操作可以對有符號數(shù)據(jù)或者無符號數(shù)據(jù)執(zhí)行。當(dāng)使用有符號的值時(shí)指定有符號的比較。如果字節(jié)長度SIMD被指定,那么wRd[byte 7]=(wRn[byte 7]>wRm[byte 7])?0xFF0x00wRd[byte 6]=(wRn[byte 6]>wRm[byte 6])?0xFF0x00
wRd[byte 5]=(wRn[byte 5]>wRm[byte 5])?0xFF0x00wRd[byte 4]=(wRn[byte 4]>wRm[byte 4])?0xFF0x00wRd[byte 3]=(wRn[byte 3]>wRm[byte 3])?0xFF0x00wRd[byte 2]=(wRn[byte 2]>wRm[byte 2])?0xFF0x00wRd[byte 1]=(wRn[byte 1]>wRm[byte 1])?0xFF0x00wRd[byte 0]=(wRn[byte 0]>wRm[byte 0])?0xFF0x00如果半字被指定,那么wRd[half 3]=(wRn[half 3]>wRm[half 3])?0xFFFF0x0000wRd[half 2]=(wRn[half 2]>wRm[half 2])?0xFFFF0x0000wRd[half 1]=(wRn[half 1]>wRm[half 1])?0xFFFF0x0000wRd[half 0]=(wRn[half 0]>wRm[half 0])?0xFFFF0x0000如果字被指定,那么wRd[word 1]=(wRn[word 1]>wRm[word 1])?0xFFFFFFFF0x00000000wRd[word 0]=(wRn[word 0]>wRm[word0])?0xFFFFFFFF0x00000000參照圖19,在菱形236進(jìn)行檢驗(yàn),以便確定是否指定了比較操作,如果合適,在塊238將其設(shè)定。在菱形240和244,就指定的是字節(jié)(塊242)、半字(塊246)還是字(塊248)數(shù)據(jù)大小來做出確定。在菱形256進(jìn)行檢驗(yàn),以便確定指定的是“是否大于”操作(塊258)還是“是否相等”操作(塊260)。在菱形250進(jìn)行檢驗(yàn),以便確定有符號的還是無符號的“是否大于”計(jì)算是合適的。
所述廣播操作將來自于主處理器的源寄存器(Rn)的值廣播至協(xié)處理器的SIMD目的寄存器(wRd)的所有字段中。例如,一個(gè)字節(jié)(8位)數(shù)據(jù)元可以被轉(zhuǎn)送入具有64位容量的目的寄存器wRd中的所有八個(gè)目的數(shù)據(jù)元。依照另一例子,一個(gè)字(32位)可以被放置在目的寄存器的兩個(gè)位置中。依照又一例子,半字(16位)可以被轉(zhuǎn)送至目的寄存器中的所有四個(gè)數(shù)據(jù)元中。所述位11至8是0000,所述位23至21是010而位5是零。位的位置7和6中的值確定目的寄存器的數(shù)據(jù)大小。對于字節(jié)而言,位7和6是00,對于半字而言,所述位7和6是01,對于字而言,所述位7和6是10。就字節(jié)長度SIMD而言,所述值被放入wRd的每個(gè)位置中。對于半字大小而言,將所述值在wRd中放置四次。對于字大小而言,將所述值在wRd中放置兩次。
例如可以在位28至31指定條件執(zhí)行并且如圖4中所表明的那樣來實(shí)現(xiàn)。所述位24至27是1110,位20是0,所述位16至19用wRd,所述位12至15用Rn,所述位4是一并且所述位0至3是0000。
參照圖20,在菱形262,就是否指定了廣播(塊264)做出確定。所述菱形266和270分析所述位6和7來確定目的地?cái)?shù)據(jù)大小是字節(jié)(塊268)、半字(塊272)還是字(塊274)。
所述移位運(yùn)算根據(jù)16、32或64位數(shù)據(jù)向量的wRn對wRn執(zhí)行向量邏輯左移,并將結(jié)果放在wRd中。它使用位零至三來編碼包含移位值的寄存器。位8用來確定所述移位值來自主處理器的寄存器還是CGR44(wCGRm)中的寄存器。具有指定的G-限定符的移位指令使用在所述wRm字段中指定的存儲在通用寄存器中的移位值。位23以及22確定操作數(shù)的大小。位的位置7至5中的值010確定移位運(yùn)算。位的位置21和22中的值01表明邏輯左移。位的位置21和22中的值00表明算術(shù)右移。位的位置21和20中的值10表明邏輯右移,而位的位置21和20中的值11表明循環(huán)。例如可以指定并且如圖4所表明的那樣實(shí)現(xiàn)條件執(zhí)行。
對于邏輯左移而言,如果半字被指定,那么wRd[half 3]=wRn[half 3]<<((G Specified)?wCGRm[70]wRm[70]wRd[half 2]=wRn[half 2]<<((G Specified)?wCGRm[70]wRm[70]wRd[half 1]=wRn[half 1]<<((G Specified)?wCGRm[76]wRm[70]wRd[half 0]=wRn[half 0]<<((G Specified)?wCGRm[70]wRm[70]如果32位字被指定,那么wRd[word 1]=wRn[word 1]<<((G Specified)?wCGRm[70]wRm[70]wRd[word 0]=wRn[word 0]<<((G Specified)?wCGRm[70]wRm[70]如果雙字被指定,那么
wRd=wRn((G Specified)?wCGRm[70]wRm[70]對于右移位操作而言,對1 6,32或6 4位數(shù)據(jù)向量大小而言,將wRn向量算術(shù)右移wRm,并將結(jié)果放在wRd中。對于半字?jǐn)?shù)據(jù)大小而言,那么wRd[half 3]=wRn[half 3]>>((G Specified)?wCGRm[70]wRm[70]wRd[half 2]=wRn[half 2]>>((G Specified)?wCGRm[70]wRm[70]wRd[half 1]=wRn[half 1]>>((G Specified)?wCGRm[70]wRm[70]wRd[half 0]=wRn[half 0]>>((G Specified)?wCGRm[70]wRm[70]否則,對于字?jǐn)?shù)據(jù)大小而言,那么wRd[word 1]=wRn[word 1]>>((G Specified)?wCGRm[70]wRm[70]wRd[word 0]=wRn[word 0]>>((G Specified)?wCGRm[70]wRm[70]如果雙字被指定,那么wRd=wRn>>((G Specified)?wCGRm[70]wRm[70]對16、32或64位數(shù)據(jù)向量而言,將wRn向量邏輯右移wRm,并且將結(jié)果置于wRd中。如果半字被指定,那么wRd[half 3]=wRn[half 3]>>((G Specified)?wCGRm[70]wRm[70]wRd[half 2]=wRn[half 2]>>((G Specified)?wCGRm[70]wRm[70]wRd[half 1]=wRn[half 1]>>((G Specified)?wCGRm[70]wRm[70]wRd[half 0]=wRn[half 0]>>((G Specified)?wCGRm[70]wRm[70]如果字被指定,那么wRd[word 1]=wRn[word 1]>>((G Specified)?wCGRm[70]wRm[70]
wRd[word 0]=wRn[word 0]>>((G Specified)?wCGRm[70]wRm[70]如果雙字被指定,那么wRd=wRn>>((G Specified)?wCGRm[70]wRm[70]對16、32或64位數(shù)據(jù)向量而言,將wRn向量邏輯循環(huán)右移wRm,并且將結(jié)果置于目的寄存器wRd中。
如果半字被指定,那么wRd[half 3]=wRn[half 3]rotate_by((G Specified)?wCGRm[70]wRm[70]wRd[half 2]=wRn[half 2]rotate_by((G Specified)?wCGRm[70]wRm[70]wRd[half 1]=wRn[half 1]rotate_by((G Specified)?wCGRm[70]wRm[70]wRd[half 0]=wRn[half 0]rotate_by((G Specified)?wCGRm[70]wRm[70]如果字被指定,那么wRd[word 1]=wRn[word 1]rotate_by((G Specified)?wCGRm[70]wRm[70]wRd[word 0]=wRn[word 0]rotate_by((G Specified)?wCGRm[70]wRm[70]如果雙字被指定,那么wRd=wRn rotateby((G Specified)?wCGRm[70]wRm[70]參照圖21,在菱形276確定移位運(yùn)算(塊278)。在塊280分析所述位0至3來為移位值編碼寄存器。在塊282,分析所述位8來確定所述移位值處于主寄存器堆還是處于輔助寄存器堆。在塊284,所述位23以及22確定操作數(shù)的大小。在塊286,所述位21和20確定移位類型。
概括地說,此處討論的指令對于所表示的位組合(7-5,23-20,11-8)使用以下編碼
指令7-523-2011-8OR 0000000 0000XOR0000001 0000AND0000010 0000ANDN 0000011 0000AVG2 0001h0r 0000對準(zhǔn)即時(shí) 0010vvv 0000對準(zhǔn)寄存器 00110vv 0000算術(shù)右移 010ww00 000g邏輯左移 010ww01 000g邏輯右移 010ww10 000g循環(huán) 010ww11 000g比較相等 011ww00 0000比較是否大于 011wws1 0000打包 100wwss 0000開包擴(kuò)展高位 110wws0 0000開包交織高位 110ww01 0000開包擴(kuò)展低位 111wws0 0000開包交織低位 111ww01 0000SAD0010h0z 0001最大值 011wws0 0001最小值 011wws1 0001加法 100wwss O001減法 101wwss O001累加 110ww00 O001正移 111ddcc O001廣播 ww0010 O000雖然已經(jīng)就有限數(shù)目的實(shí)施例描述了本發(fā)明,但是本領(lǐng)域技術(shù)人員將會從中理解各種修改和變化。希望在所附權(quán)利要求書中涵蓋落入本發(fā)明的精神和范圍內(nèi)的所有這種修改和變化。
權(quán)利要求
1.一種用于為協(xié)處理器提供指令的方法,包括響應(yīng)數(shù)據(jù)處理指令流使用主處理器執(zhí)行數(shù)據(jù)處理,所述數(shù)據(jù)處理指令包括至少一個(gè)協(xié)處理器指令;為至少一個(gè)協(xié)處理器指令提供兩個(gè)源寄存器和一個(gè)目的寄存器,所述寄存器包括數(shù)據(jù)元;并且提供一協(xié)處理器指令,其包括指定將由協(xié)處理器執(zhí)行的數(shù)據(jù)處理操作的操作碼,以及用于為所述協(xié)處理器指令識別目標(biāo)協(xié)處理器的協(xié)處理器識別字段,所述指令用于將數(shù)據(jù)元從所述源寄存器之一廣播至所述目的寄存器的數(shù)據(jù)元。
2.如權(quán)利要求1所述的方法,包括提供一個(gè)指令來將數(shù)據(jù)元廣播至所述目的寄存器的所有數(shù)據(jù)元。
3.如權(quán)利要求1所述的方法,包括指定將要被廣播的數(shù)據(jù)元大小。
4.如權(quán)利要求3所述的方法,包括有選擇地將要被廣播的數(shù)據(jù)元指定為八、十六或三十二位之一。
5.如權(quán)利要求1所述的方法,包括分配位零至三十一,使用位七至五來表明操作類型,分配位十一至八來表明協(xié)處理器編號,分配位23和22來表明操作數(shù)大小,并且分配位21和20來設(shè)定飽和類型。
6.如權(quán)利要求1所述的方法,包括分配位27至24為1110。
7.如權(quán)利要求1所述的方法,包括根據(jù)主處理器算術(shù)標(biāo)志的狀態(tài)來有條件地執(zhí)行協(xié)處理器指令。
8.如權(quán)利要求1所述的方法,包括提供一指令來將數(shù)據(jù)元從主處理器的源寄存器廣播至協(xié)處理器的目的寄存器。
9.一種包括介質(zhì)的物品,所述介質(zhì)存儲有指令,當(dāng)執(zhí)行所述指令時(shí),允許基于處理器的系統(tǒng)響應(yīng)數(shù)據(jù)處理指令流使用主處理器來執(zhí)行數(shù)據(jù)處理,所述數(shù)據(jù)處理指令包括至少一個(gè)協(xié)處理器指令;為至少一個(gè)協(xié)處理器指令使用兩個(gè)源寄存器和一個(gè)目的寄存器,所述寄存器包括數(shù)據(jù)元;并且處理協(xié)處理器指令,該指令包括指定將由協(xié)處理器執(zhí)行的數(shù)據(jù)處理操作的操作碼,以及用于為所述協(xié)處理器指令識別目標(biāo)協(xié)處理器的協(xié)處理器識別字段,所述指令用于將數(shù)據(jù)元從所述源寄存器之一廣播至所述目的寄存器的數(shù)據(jù)元。
10.如權(quán)利要求9所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),允許基于處理器的系統(tǒng)提供一指令來將數(shù)據(jù)元廣播至所述目的寄存器的所有數(shù)據(jù)元。
11.如權(quán)利要求9所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),允許基于處理器的系統(tǒng)提供一指令來指定所述將要被廣播的數(shù)據(jù)元的大小。
12.如權(quán)利要求9所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),允許基于處理器的系統(tǒng)提供一指令來有選擇地將要被廣播的數(shù)據(jù)元指定為八、十六或三十二位之一。
13.如權(quán)利要求9所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),允許基于處理器的系統(tǒng)處理指令,來分配位零至三十一,使用位七至五來表明操作類型,分配位十一至八來表明協(xié)處理器編號,分配位二十三和二十二來表明操作數(shù)大小,并且分配位二十一和二十來設(shè)定飽和類型。
14.如權(quán)利要求9所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),允許基于處理器的系統(tǒng)根據(jù)主處理器算術(shù)標(biāo)志的狀態(tài)有條件地執(zhí)行協(xié)處理器指令。
15.一種處理器,包括主處理器,包括算術(shù)標(biāo)志;以及與所述主處理器耦合的協(xié)處理器,所述協(xié)處理器包括用于指定將由協(xié)處理器執(zhí)行的數(shù)據(jù)處理操作的操作碼,以及用于為所述協(xié)處理器指令識別目標(biāo)協(xié)處理器的協(xié)處理器識別字段,所述協(xié)處理器用于為協(xié)處理器指令分配兩個(gè)源寄存器以及一個(gè)目的寄存器,所述寄存器包括數(shù)據(jù)元,所述協(xié)處理器包括用于將數(shù)據(jù)元從所述源寄存器廣播至所述目的寄存器的數(shù)據(jù)元的指令。
16.如權(quán)利要求15所述的處理器,其中所述處理器是單指令多數(shù)據(jù)協(xié)處理器。
17.如權(quán)利要求15所述的處理器,其中所述協(xié)處理器使用具有位零至三十一的指令,并且其中位七至五表明操作類型,位十一至八表明協(xié)處理器編號,位二十三和二十二表明操作數(shù)大小,并且位二十一以及二十設(shè)定飽和類型。
18.如權(quán)利要求15所述的處理器,其中所述指令用于將數(shù)據(jù)元廣播至所述目的寄存器的所有數(shù)據(jù)元。
19.如權(quán)利要求15所述的處理器,其中所述指令指定將要被廣播的數(shù)據(jù)元的大小。
20.如權(quán)利要求19所述的處理器,其中所述指令有選擇地將要被廣播的數(shù)據(jù)元指定為八、十六或三十二位之一。
21.如權(quán)利要求15所述的處理器,其中所述協(xié)處理器包括所述目的寄存器,并且所述主處理器包括源寄存器。
22.一種用于為協(xié)處理器提供指令的方法,包括響應(yīng)數(shù)據(jù)處理指令流使用主處理器執(zhí)行數(shù)據(jù)處理,所述數(shù)據(jù)處理指令包括至少一個(gè)協(xié)處理器指令;為所述至少一個(gè)協(xié)處理器指令提供兩個(gè)源寄存器和一個(gè)目的寄存器;提供協(xié)處理器指令,其包括用于指定將由協(xié)處理器執(zhí)行的數(shù)據(jù)處理操作的操作碼,以及用于為所述協(xié)處理器指令識別目標(biāo)協(xié)處理器的協(xié)處理器識別字段;以及執(zhí)行一個(gè)指令以便從所述源寄存器提取值,并且把這些值放置在所述目的寄存器中,所述指令包括信息,根據(jù)這些信息來確定所述值的偏移,以便允許從所述源寄存器中提取那些值。
23.如權(quán)利要求22所述的方法,包括在指令中提供偏移。
24.如權(quán)利要求22所述的方法,包括在指令中提供與定位所述偏移信息的位置有關(guān)的信息。
25.如權(quán)利要求24所述的方法,包括在指令中標(biāo)記,其指示包含了偏移信息的通用寄存器。
26.如權(quán)利要求22所述的方法,包括根據(jù)主處理器算術(shù)標(biāo)志的狀態(tài)來有條件地執(zhí)行協(xié)處理器指令。
27.一種包括介質(zhì)的物品,所述介質(zhì)存儲有指令,當(dāng)執(zhí)行所述指令時(shí),使基于處理器的系統(tǒng)能響應(yīng)數(shù)據(jù)處理指令流使用主處理器來執(zhí)行數(shù)據(jù)處理,所述數(shù)據(jù)處理指令包括至少一個(gè)協(xié)處理器指令;為所述至少一個(gè)協(xié)處理器指令提供兩個(gè)源寄存器和一個(gè)目的寄存器;提供協(xié)處理器指令,該指令包括用于指定將由協(xié)處理器執(zhí)行的數(shù)據(jù)處理操作的操作碼,以及用于為所述協(xié)處理器指令識別目標(biāo)協(xié)處理器的協(xié)處理器識別字段;以及執(zhí)行一個(gè)指令來從所述源寄存器提取值,并且把這些值放置在所述目的寄存器中,所述指令包含有信息,根據(jù)該信息來確定所述值的偏移,以便允許從所述源寄存器中提取那些值。
28.如權(quán)利要求27所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),使基于處理器的系統(tǒng)能在所述指令中提供偏移。
29.如權(quán)利要求27所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),使基于處理器的系統(tǒng)能在指令中提供有關(guān)定位偏移信息位置的信息。
30.如權(quán)利要求27所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),使基于處理器的系統(tǒng)能在指令中提供標(biāo)記,其指示包含與偏移有關(guān)的信息的通用寄存器。
31.如權(quán)利要求27所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),使基于處理器的系統(tǒng)能提供三種不同的飽和類型,包括有符號飽和、不飽和以及無符號飽和。
32.如權(quán)利要求27所述的物品,還存儲有指令,當(dāng)執(zhí)行所述指令時(shí),使基于處理器的系統(tǒng)能根據(jù)主處理器算術(shù)標(biāo)志的狀態(tài)有條件地執(zhí)行協(xié)處理器指令。
33.一種協(xié)處理器,包括主處理器,其包括算術(shù)標(biāo)志;以及存儲器,用于存儲指定將由協(xié)處理器執(zhí)行的數(shù)據(jù)處理操作的操作碼,以及存儲為協(xié)處理器指令識別目標(biāo)協(xié)處理器的協(xié)處理器識別字段,所述協(xié)處理器執(zhí)行一個(gè)指令以便從所述源寄存器提取值,并且將這些值放置在所述目的寄存器中,所述指令包括信息,根據(jù)該信息來確定所述值的偏移,以便允許從所述源寄存器中提取那些值。
34.如權(quán)利要求33所述的協(xié)處理器,其中所述協(xié)處理器是單指令多數(shù)據(jù)協(xié)處理器。
35.如權(quán)利要求33所述的協(xié)處理器,用于從所述指令中提取偏移。
36.如權(quán)利要求33所述的協(xié)處理器,用于從指令中提取與定位偏移信息的位置有關(guān)的信息。
37.如權(quán)利要求33所述的協(xié)處理器,用于從所述指令中提取一個(gè)標(biāo)記,該標(biāo)記指示了包含與所述偏移有關(guān)的信息的通用寄存器。
38.如權(quán)利要求33所述的協(xié)處理器,其中所述協(xié)處理器使用具有位零至三十一的指令,并且其中位七至五表明操作類型,位十一至八表明協(xié)處理器編號,位二十三和二十二表明操作數(shù)大小,并且位二十一以及二十設(shè)定飽和類型。
全文摘要
基于處理器的系統(tǒng)(22)可以包括主處理器(24)以及協(xié)處理器(26)。所述協(xié)處理器(26)處理如下的指令,其包括將由所述協(xié)處理器(26)執(zhí)行的操作的操作碼以及用于為協(xié)處理器指令識別目標(biāo)協(xié)處理器的協(xié)處理器識別字段。兩位表明四個(gè)數(shù)據(jù)大小之一,所述數(shù)據(jù)大小包括字節(jié)(8位)、半字(16位)、字(32位)以及雙字(64位)。其他兩位表明飽和類型。
文檔編號G06F9/00GK1688966SQ03823993
公開日2005年10月26日 申請日期2003年8月6日 優(yōu)先權(quán)日2002年8月9日
發(fā)明者W·馬希爾斯, W·于, N·帕維爾, A·耶布森, J·劉, K·巴瓦里亞, R·帕里克, D·鄧, M·帕特爾, M·福勒爾頓, M·加內(nèi)桑, S·斯特拉茲杜斯 申請人:英特爾公司