專利名稱:在分組數(shù)據(jù)上操作的指令集的制作方法
技術(shù)領(lǐng)域:
本發(fā)明具體涉及計算機系統(tǒng)領(lǐng)域。更具體地,本發(fā)明涉及分組數(shù)據(jù)操作領(lǐng)域。
背景技術(shù):
在典型的計算機系統(tǒng)中,將處理器實現(xiàn)為利用產(chǎn)生一種結(jié)果的指令在由大量的位(如64)表示的值上操作。例如,執(zhí)行加法指令將第一個64位值與第二個64位值相加并作為第三個64位值存儲該結(jié)果。然而,多媒體應(yīng)用(諸如以計算機支持的協(xié)作為目的的應(yīng)用(CSC-電話會議與混合媒體數(shù)據(jù)處理的集成)、2D/3D圖形、圖象處理、視頻壓縮/解壓、識別算法與音頻處理)要求處理可以用少量的位表示的大量數(shù)據(jù)。例如,圖形數(shù)據(jù)通常需要8或16位,聲音數(shù)據(jù)通常需要8或16位。這些多媒體應(yīng)用的各個需要一種或多種算法,各需要若干操作。例如,算法可能需要加法、比較及移位操作。
為了改進(jìn)多媒體應(yīng)用(以及具有相同特征的其它應(yīng)用),先有技術(shù)處理器提供分組數(shù)據(jù)格式。分組數(shù)據(jù)格式中通常用來表示單個值的位被分成若干固定長度的數(shù)據(jù)元素,各元素表示單獨的值。例如,可將一個64位寄存器分成兩個32位元素,各元素表示一個單獨的32位值。此外,這些先有技術(shù)處理器提供并行分開處理這些分組數(shù)據(jù)類型中各元素的指令。例如,分組的加法指令將來自第一分組數(shù)據(jù)與第二分組數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素相加。從而,如果多媒體算法需要包含必須在大量數(shù)據(jù)元素上執(zhí)行的五種操作的循環(huán),總是希望組裝該數(shù)據(jù)并利用分組數(shù)據(jù)指令并行執(zhí)行這些操作。以這一方式,這些處理器便能更高效地處理多媒體應(yīng)用。
然而,如果該操作循環(huán)中包含處理器不能在分組數(shù)據(jù)上執(zhí)行的操作(即處理器缺少適當(dāng)?shù)闹噶?,則必須分解該數(shù)據(jù)來執(zhí)行該操作。例如,如果多媒體算法要求加法運算而不能獲得上述分組加法指令,則程序員必須分解第一分組數(shù)據(jù)與第二分組數(shù)據(jù)(即分開包含第一分組數(shù)據(jù)與第二分組數(shù)據(jù)的元素),將各個分開的單獨的元素相加,然后將結(jié)果組裝成分組的結(jié)果供進(jìn)一步分組處理。執(zhí)行這種組裝與分解所需的處理時間通常抵消了提供分組數(shù)據(jù)格式的性能優(yōu)點。因此,希望在通用處理器上包含提供典型多媒體算法所需的所有操作的分組數(shù)據(jù)指令集。然而,由于當(dāng)今微處理器上的有限芯片面積,可以增加的指令數(shù)目是有限的。
包含分組數(shù)據(jù)指令的一種通用處理器便是加州Santa Clara的Intel公司制造的i860XPTM處理器。i860XP處理器包含具有不同元素大小的若干分組數(shù)據(jù)類型。此外,i860XP處理器包含分組加法與分組比較指令。然而,分組加法指令并不斷開進(jìn)位鏈,因此程序員必須保證軟件正在執(zhí)行的運算不會導(dǎo)致溢出,即運算不會導(dǎo)致來自分組數(shù)據(jù)中一個元素的位溢出到該分組數(shù)據(jù)的下一元素中。例如,如果將值1加到存儲“11111111”的8位分組數(shù)據(jù)元素上,便出現(xiàn)溢出而結(jié)果為“100000000”。此外,i860XP所支持的分組數(shù)據(jù)類型中的小數(shù)點位置是固定的(即i860XP處理器支持?jǐn)?shù)8.8、6.10與8.24,其中數(shù)i.j包含i個最高位及小數(shù)點后的j位)。從而限制了程序員可以表示的值。由于i860XP處理器只支持這兩條指令,它不能執(zhí)行采用分組數(shù)據(jù)的多媒體算法所要求的許多運算。
另一種支持分組數(shù)據(jù)的通用處理器便是Motorala公司制造的MC88110TM處理器。MC88110處理器支持具有不同長度元素的若干種不同的分組數(shù)據(jù)格式。此外,MC88110處理器所支持的分組指令集中包括組裝、分解、分組加法、分組減法、分組乘法、分組比較與分組旋轉(zhuǎn)。
MC88110處理器分組命令通過連接第一寄存器對中的各元素的(t*r)/64(其中t為該分組數(shù)據(jù)的元素中的位數(shù))個最高有效位進(jìn)行操作來生成寬度為r的一個字段。該字段取代存儲在第二寄存器對中的分組數(shù)據(jù)的最高有效位。然后將這一分組數(shù)據(jù)存儲在第三寄存器對中并左旋r位。下面在表1與2中示出所支持的t與r值,以及這一指令的運算實例。
X=未定義的操作表1
表2分組指令的這一實現(xiàn)具有兩個缺點。第一是需要附加的邏輯在指令結(jié)束時執(zhí)行旋轉(zhuǎn)。第二是生成分組數(shù)據(jù)結(jié)果所需的指令數(shù)目。例如,如果希望使用4個32位值來生成第三寄存器(以上所示)中的結(jié)果,便需要兩條具有t=32與r=32的指令,如下面表3中所示。
ppack Source1,Source2
(源1)(源2)(結(jié)果1)
ppack Result1,Source3
(結(jié)果1)(源3)(結(jié)果2)表3MC88110處理器分解命令通過將來自分組數(shù)據(jù)的4、8或16位數(shù)據(jù)元素放入兩倍長(8、16或32位)的數(shù)據(jù)元素的低位一半中,并填充以零,即將得出的數(shù)據(jù)元素的較高位設(shè)定為零進(jìn)行操作。下面表4中示出了這一分解命令的操作的一個例子。
第一寄存器對
3 2 1 0表4MC88110處理器分組乘法指令將64位分組數(shù)據(jù)的各元素乘以一個32位值,如同該分組數(shù)據(jù)表示單一的值一樣,如下面表5中所示。
表5
這一乘法指令具有兩個缺點。首先這一乘法指令并不斷開進(jìn)位鏈,從而程序員必須保證在分組數(shù)據(jù)上執(zhí)行的運算并不導(dǎo)致溢出。結(jié)果,程序員有時必須加入附加的指令來防止這一溢出。第二,這一乘法指令將分組數(shù)據(jù)中的各元素乘以單一的值(即該32位值)。結(jié)果,用戶沒有選擇分組數(shù)據(jù)中哪些元素乘以該32位值的靈活性。因此,程序員必須制備數(shù)據(jù)使得分組數(shù)據(jù)中的每一個元素上都需要相同的乘法或者每當(dāng)需要對該數(shù)據(jù)中少于全部元素進(jìn)行乘法時浪費處理時間來分解數(shù)據(jù)。因此程序員不能并行利用多個乘數(shù)來執(zhí)行多個乘法。例如,將8個不同的數(shù)據(jù)片相乘,每一數(shù)據(jù)片一個字長,需要四次單獨的乘法運算。各運算每次乘兩個字,實際上浪費了用于位16以上的位的數(shù)據(jù)線與電路。
MC88110處理器分組比較指令比較來自第一分組數(shù)據(jù)與第二分組數(shù)據(jù)的對應(yīng)的32位數(shù)據(jù)元素。兩個比較中各個可能返回小于(<)或大于等于(≥)之一,得出四種可能的組合。該指令返回一個8位結(jié)果串;四位表示符合四種可能條件中哪一種,四位表示這些位的補碼。根據(jù)這一指令的結(jié)果的條件轉(zhuǎn)移能以兩種方式實現(xiàn)1)用一序列條件轉(zhuǎn)移;或2)用跳轉(zhuǎn)表。該指令的問題在于它需要根據(jù)數(shù)據(jù)的條件轉(zhuǎn)移來執(zhí)行函數(shù)的事實,諸如if Y>A then X=X+B else X=X。這一函數(shù)的偽碼編譯表示將是 新的微處理器試圖通過推測轉(zhuǎn)移到哪里來加快執(zhí)行。如果預(yù)測正確,便不損失性能并且存在著提高性能的潛力。然而如果預(yù)測錯誤,便損失性能。因此,預(yù)測得好的鼓勵是巨大的。然而根據(jù)數(shù)據(jù)的轉(zhuǎn)移(諸如上面的)呈現(xiàn)為不可預(yù)測的方式,這破壞了預(yù)測算法并得出更多的錯誤預(yù)測。結(jié)果,使用這一比較指令來建立根據(jù)數(shù)據(jù)的條件轉(zhuǎn)移要付出性能上的高昂代價。
MC88110處理器旋轉(zhuǎn)指令旋轉(zhuǎn)一個64位值到0與60位之間的任一模4邊界上(見下面表6的示例)。
表6由于旋轉(zhuǎn)指令使移出寄存器的高位移入寄存器的低位,MC88110處理器并不支持單個地移位分組數(shù)據(jù)中的各元素。結(jié)果,要求單獨移位分組數(shù)據(jù)類型中各元素的編程算法需要1)分解數(shù)據(jù),2)單獨地在各元素上執(zhí)行移位,及3)將結(jié)果組裝成結(jié)果分組數(shù)據(jù)供進(jìn)一步分組數(shù)據(jù)處理。
發(fā)明內(nèi)容
本發(fā)明描述了在處理器中加入支持典型的多媒體應(yīng)用所要求的操作的分組數(shù)據(jù)指令集的方法與裝置。在一個實施例中,本發(fā)明包括一個處理器及一個存儲區(qū)。存儲區(qū)中包含若干指令供處理器執(zhí)行以操作分組數(shù)據(jù)。在這一實施例中,這些指令包括組裝、分解、分組加法、分組減法、分組乘法、分組移位及分組比較。
處理器對接收組裝指令作出響應(yīng),組裝來自至少兩個分組數(shù)據(jù)中的數(shù)據(jù)元素的一部分位以構(gòu)成第三分組數(shù)據(jù)。作為比較,處理器對接收該分解指令作出響應(yīng),生成包含來自第一分組數(shù)據(jù)操作數(shù)的至少一個數(shù)據(jù)元素及來自第二分組數(shù)據(jù)操作數(shù)的至少一個對應(yīng)數(shù)據(jù)元素的第四分組數(shù)據(jù)。
處理器響應(yīng)接收該分組加法指令單獨地將來自至少兩個分組數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素并行加在一起。作為對比,處理器響應(yīng)接收該分組減法指令單獨地將來自至少兩個分組數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素并行相減。
處理器響應(yīng)接收分組乘法指令單獨地將來自至少兩個分組數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素并行相乘。
處理器響應(yīng)接收分組移位指令單獨地將分組數(shù)據(jù)操作數(shù)中的各數(shù)據(jù)元素并行移位所指示的計數(shù)值。
處理器響應(yīng)接收分組比較指令按照指示的關(guān)系單獨地將來自至少兩個分組數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素并行比較,并作為結(jié)果將一個分組掩碼存儲在第一寄存器中。分組掩碼至少包含第一掩碼元素與第二掩碼元素。第一掩碼元素中的各位表示比較一組對應(yīng)數(shù)據(jù)元素的結(jié)果,而第二掩碼元素中的各位表示第二組數(shù)據(jù)元素的比較結(jié)果。
本發(fā)明是在附圖中用示例而非限制方式說明的。相同的參照指示相同的元素。
圖1說明按照本發(fā)明的一個實施例的示例性計算機系統(tǒng)。
圖2說明按照本發(fā)明的一個實施例的處理器的寄存器文件。
圖3為說明按照本發(fā)明的一個實施例的處理器用來處理數(shù)據(jù)的通用步驟的流程圖。
圖4說明按照本發(fā)明的一個實施例的分組數(shù)據(jù)類型。
圖5a表示按照本發(fā)明的一個實施例的寄存器中分組數(shù)據(jù)。
圖5b表示按照本發(fā)明的一個實施例的寄存器中分組數(shù)據(jù)。
圖5c表示按照本發(fā)明的一個實施例的寄存器中分組數(shù)據(jù)。
圖6a表示按照本發(fā)明的一個實施例指示分組數(shù)據(jù)的使用的控制信號格式。
圖6b說明按照本發(fā)明的一個實施例的指示分組數(shù)據(jù)的使用的第二控制信號格式。
分組加法/減法圖7a說明按照本發(fā)明的一個實施例執(zhí)行分組加法的方法。
圖7b說明按照本發(fā)明的一個實施例執(zhí)行分組減法的方法。
圖8說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)的各個位上執(zhí)行分組加法與分組減法的電路。
圖9說明按照本發(fā)明的一個實施例在分組字節(jié)數(shù)據(jù)上執(zhí)行分組加法與分組減法的電路。
圖10為按照本發(fā)明的一個實施例在分組字?jǐn)?shù)據(jù)上執(zhí)行分組加法與分組減法的電路的邏輯視圖。
圖11為按照本發(fā)明的一個實施例在分組雙字?jǐn)?shù)據(jù)上執(zhí)行分組加法與分組減法的電路的邏輯視圖。
分組乘法圖12為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分組乘法運算的方法的流程圖。
圖13說明按照本發(fā)明的一個實施例執(zhí)行分組乘法的電路。
乘-加/減圖14為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行乘-加與乘-減運算的方法的流程圖。
圖15說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行乘-加與/或乘-減運算的電路。
分組移位圖16為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分組移位操作的方法的流程圖。
圖17說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)的各個字節(jié)上執(zhí)行分組移位的電路。
組裝圖18為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行組裝操作的方法的流程圖。
圖19a說明按照本發(fā)明的一個實施例在分組字節(jié)數(shù)據(jù)上執(zhí)行組裝操作的電路。
圖19b說明按照本發(fā)明的一個實施例在分組字?jǐn)?shù)據(jù)上執(zhí)行組裝操作的電路。
分解圖20為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分解操作的方法的流程圖。
圖21說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分解操作的電路。
個數(shù)計數(shù)圖22為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行個數(shù)計數(shù)操作的方法的流程圖。
圖23為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)的一個數(shù)據(jù)元素上執(zhí)行個數(shù)計數(shù)操作及為結(jié)果分組數(shù)據(jù)生成單一結(jié)果數(shù)據(jù)元素的方法的流程圖。
圖24說明按照本發(fā)明的一個實施例在具有四個字?jǐn)?shù)據(jù)元素的分組數(shù)據(jù)上執(zhí)行個數(shù)計數(shù)操作的電路。
圖25說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)的一個字?jǐn)?shù)據(jù)元素上執(zhí)行個數(shù)計數(shù)操作的詳細(xì)電路。
分組邏輯運算。
圖26為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行若干邏輯運算的方法的流程圖。
圖27說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行邏輯運算的電路。
分組比較圖28為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分組比較操作的方法的流程圖。
圖29說明按照本發(fā)明的一個實施例的分組數(shù)據(jù)的單個字節(jié)上執(zhí)行分組比較操作的電路。
具體實施例方式
本申請描述在處理器中包括支持典型的多媒體應(yīng)用所要求的分組數(shù)據(jù)上的操作的指令集的方法與裝置。在下面的描述中,陳述了許多特定細(xì)節(jié)以提供對本發(fā)明的全面理解。然而,應(yīng)理解本發(fā)明可以不用這些特定細(xì)節(jié)實現(xiàn)。在其它實例中,為了避免使本發(fā)明不必要地沖淡,不詳細(xì)示出眾所周知的電路、結(jié)構(gòu)與技術(shù)。
定義為了提供理解本發(fā)明的實施例的描述的基礎(chǔ),提出以下定義。
位X至位Y;定義二進(jìn)制數(shù)的子字段。例如,字節(jié)001110102(以基2表示)的位6至位0表示子字段1110102。二進(jìn)制數(shù)后面的‘2’表示基2。因此,10002等于810,而F16等于1510。
Rx為寄存器。寄存器為能存儲與提供數(shù)據(jù)的任何器件。寄存器的進(jìn)一步功能在下面描述。寄存器不是處理器組件的必要部件。
SRC1,SRC2與DEST標(biāo)識存儲區(qū)(諸如存儲器地址、寄存器等)Source1-i與Result1-i表示數(shù)據(jù)計算機系統(tǒng)圖1說明按照本發(fā)明的一個實施例的示范性計算機系統(tǒng)100。計算機系統(tǒng)100包括用于傳遞信息的總線101或其它通信硬件與軟件,及用于處理信息的與總線101耦合的處理器109。處理器109表示包含CISC(復(fù)雜指令集計算)或RISC(精減指令集計算)類型體系結(jié)構(gòu)在內(nèi)的任何類型體系結(jié)構(gòu)的中央處理單元。計算機系統(tǒng)100還包括耦合在總線101上用于存儲信息及要由處理器109執(zhí)行的指令的隨機存取存儲器(RAM)或其它動態(tài)存儲設(shè)備(稱作主存儲器104)。在處理器109執(zhí)行指令期間,主存儲器104也可用來存儲臨時變量或其它中間信息。計算機系統(tǒng)100還包括耦合在總線101上用于存儲靜態(tài)信息及處理器109的指令的只讀存儲器(ROM)106與/或其它靜態(tài)存儲設(shè)備。數(shù)據(jù)存儲設(shè)備107耦合在總線101上用于存儲信息與指令。
圖1還示出處理器109包括執(zhí)行單元130、寄存器文件150、高速緩沖存儲器165及外部總線170。當(dāng)然,處理器109還包含其它電路,為了不沖淡本發(fā)明而未示出它們。
執(zhí)行單元130用于執(zhí)行處理器109所接收的指令。除了識別通常在通用處理器實現(xiàn)的指令,執(zhí)行單元130還識別在分組數(shù)據(jù)格式上執(zhí)行操作的分組指令集140中的指令。在一個實施例中,分組指令集140包含以此后描述的方式支持組裝操作、分解操作、分組加法運算、分組減法運算、分組乘法運算、分組移位操作、分組比較操作、乘-加運算、乘-減運算、個數(shù)計算操作及一組分組邏輯運算(包含分組“與”、分組“與非”、分組“或”及分組“異或”)的指令。雖然描述了包含這些指令的分組指令集140的一個實施例,其它實施例可包含這些指令的子集或超集。
通過包含這些指令,可以用分組數(shù)據(jù)執(zhí)行多媒體應(yīng)用中所使用的許多算法所需要的操作。從而,可以編寫這些算法來組裝必要的數(shù)據(jù)及在分組數(shù)據(jù)上執(zhí)行必要的操作,而無須分解這些分組數(shù)據(jù)來一次在一個數(shù)據(jù)元素上執(zhí)行一個或多個操作。如上所述,這比不支持某些多媒體算法所要求的分組數(shù)據(jù)操作的先有技術(shù)通用處理器(即,如果多媒體算法要求不能在分組數(shù)據(jù)上執(zhí)行的操作,則程序必須分解該數(shù)據(jù),單獨地在分開的元素上執(zhí)行操作,然后將結(jié)果組裝成分組結(jié)果供進(jìn)一步分組處理)具有性能上的優(yōu)勢。此外,所公開的在其中執(zhí)行若干條這些指令的方式改進(jìn)了許多多媒體應(yīng)用的性能。
執(zhí)行單元130由內(nèi)部總線170耦合在寄存器文件150上。寄存器文件150表示處理器109上用于存儲包含數(shù)據(jù)在內(nèi)的信息的存儲區(qū)。應(yīng)理解本發(fā)明的一個方面是在分組數(shù)據(jù)上操作的所描述的指令集。按照本發(fā)明的這一方面,用來存儲分組數(shù)據(jù)的存儲區(qū)不是關(guān)鍵的。但是,稍后參照圖2描述寄存器文件150的一個實施例。執(zhí)行單元130耦合在高速緩沖存儲器160及解碼器165上。高速緩沖存儲器160用來高速緩沖來自諸如主存儲器104的數(shù)據(jù)與/或控制信號、解碼器165用來將處理器109所接收的指令解碼成控制信號與/或微代碼入口點。響應(yīng)這些控制信號與/或微代碼入口點,執(zhí)行單元130執(zhí)行適當(dāng)?shù)牟僮?。例如,如果接收到一個加法指令,解碼器165便令執(zhí)行單元130執(zhí)行要求的加法;如果接收到一個減法指令,解碼器165便令執(zhí)行單元130執(zhí)行要求的減法;等。解碼器165可用任何數(shù)目的不同機構(gòu)實現(xiàn)(諸如,查找表、硬件實現(xiàn)、PLA等)。從而,盡管解碼器與執(zhí)行單元執(zhí)行各種指令是由一系列if/then語句表示的,但應(yīng)理解指令的執(zhí)行并不需要這些if/then語句的一系列處理。而是將任何用于邏輯執(zhí)行這一if/then處理的機構(gòu)認(rèn)為是在本發(fā)明的范圍之內(nèi)。
圖1還示出了數(shù)據(jù)存儲設(shè)備107,諸如磁盤或光盤,及其對應(yīng)的盤驅(qū)動器。計算機系統(tǒng)100也能通過總線101耦合在將信息顯示給計算機用戶的顯示設(shè)備121上。顯示設(shè)備121可包含幀緩沖器、專用的圖形描繪設(shè)備(graphics rendering device)、陰極射線管(CRT)與/或平板顯示器。包含字母數(shù)字與其它鍵的字母數(shù)字輸入設(shè)備122通常耦合在總線101上,用于向處理器109傳遞信息及命令選擇。另一種用戶輸入設(shè)備為光標(biāo)控制設(shè)備123,諸如用于傳遞方向信息及命令選擇給處理器109及用于控制光標(biāo)在顯示設(shè)備121上運動的鼠標(biāo)器、軌跡球、筆、觸摸屏或光標(biāo)方向鍵。這一輸入設(shè)備通常具有兩根軸上的兩個自由度,第一軸(如X)及第二軸(如Y),它允許設(shè)備指定平面上的位置。然而,本發(fā)明不應(yīng)限制在只有兩個自由度的輸入設(shè)備上。
另一可以耦合到總線101上的設(shè)備為可用來在諸如紙、膠片等介質(zhì)或類似類型的介質(zhì)上打印指令、數(shù)據(jù)或其它信息的硬拷貝設(shè)備124。此外,可將計算機系統(tǒng)100耦合在用于聲音錄制與/或播放的設(shè)備125上,諸如耦合在用于錄制信息的麥克風(fēng)上的音頻數(shù)字化器。此外,該設(shè)備可包含耦合在數(shù)模(D/A)轉(zhuǎn)換器上的揚聲器,用于播放數(shù)字化聲音。
計算機系統(tǒng)100也可以是計算機網(wǎng)絡(luò)(諸如LAN)中的終端。計算機系統(tǒng)100這時便是計算機網(wǎng)絡(luò)的一個計算機子系統(tǒng)。計算機系統(tǒng)100可選地包含視頻數(shù)字化設(shè)備126。視頻數(shù)字化設(shè)備126能用來捕捉能在計算機網(wǎng)絡(luò)上傳輸給其它計算機的視頻圖象。
在一個實施例中,處理器109附加支持與X86指令集(諸如加州Santa Clara的Intel公司制造的Pentium處理器等現(xiàn)有微處理器所使用的指令集)兼容的指令集。從而,在一個實施例中,處理器109支持加州Santa Clara的Intel公司所定義的IATM-Intel體系結(jié)構(gòu)所支持的所有操作(見“微處理器”,Intel資料集卷1與卷2,1992與1993,可從加州Santa Clara的Intel購得)。結(jié)果,除了本發(fā)明的操作外,處理器109還能支持現(xiàn)有的X86操作。雖然本發(fā)明是描述為包含在基于X86指令集中的,替代實施例可將本發(fā)明包含在其它指令集中。例如,可將本發(fā)明包含在采用新指令集的64位處理器中。
圖2說明按照本發(fā)明的一個實施例的處理器的寄存器文件。寄存器文件150用來存儲信息,包括控制/狀態(tài)信息、整數(shù)數(shù)據(jù)、浮點數(shù)據(jù)及分組數(shù)據(jù)。在圖2所示的實施例中,寄存器文件150包括整數(shù)寄存器201、寄存器209、狀態(tài)寄存器208及指令指針寄存器211。狀態(tài)寄存器208指示處理器109的狀態(tài)。指令指針寄存器211存儲要執(zhí)行的下一條指令的地址。整數(shù)寄存器201、寄存器209、狀態(tài)寄存器208及指令指針寄存器211全都耦合在內(nèi)部總線170上。任何附加的寄存器也耦合在內(nèi)部總線170上。
在一個實施例中,寄存器209既用于分組數(shù)據(jù)又用于浮點數(shù)據(jù)。在這一實施例中,處理器109在任何給定時刻都必須將寄存器209作為棧定位的浮點寄存器或作為非棧定位的分組數(shù)據(jù)寄存器對待。在本實施例中,包括了一種機制允許處理器109在作為棧定位的浮點寄存器與非棧定位的分組數(shù)據(jù)寄存器的寄存器209上操作之間切換。在另一實施例中,處理器109可同時在作為非棧定位的浮點與分組數(shù)據(jù)寄存器的寄存器209上操作。作為另一實例,在另一實施例中,這些相同的寄存器可用來存儲整數(shù)數(shù)據(jù)。
當(dāng)然,可以實現(xiàn)替代的實施例來包括或多或少的寄存器組。例如,替代實施例可包含獨立的浮點寄存器組用于存儲浮點數(shù)據(jù)。作為另一實例,替代實施例可包含第一組寄存器,各用于存儲控制/狀態(tài)信息,及第二組寄存器,各能存儲整數(shù)、浮點及分組數(shù)據(jù)。為了清楚起見,不應(yīng)將一個實施例的寄存器的意義限制在特定類型的電路上。而是,一個實施例的寄存器只需要能存儲與提供數(shù)據(jù),并執(zhí)行這里所描述的功能。
可將各種寄存器組(諸如整數(shù)寄存器201、寄存器209)實現(xiàn)成包含不同數(shù)目的寄存器與/或不同大小的寄存器。例如,在一個實施例中,將整數(shù)寄存器201實現(xiàn)為存儲32位,而將寄存器209實現(xiàn)為存儲80位(全部80位用來存儲浮點數(shù)據(jù)而只用64位存儲分組數(shù)據(jù))。此外,寄存器209包含8個寄存器,R0212a至R7212h。R1212a、R2212b及R3212c為寄存器209中各個寄存器的實例??蓪⒓拇嫫?09中的一個寄存器的32位移到整數(shù)寄存器201中的一個整數(shù)寄存器中。類似地,可將整數(shù)寄存器中的值移入寄存器209中的一個寄存器32位中。在另一實施例中,整數(shù)寄存器201各包含64位,并且64位數(shù)據(jù)可在整數(shù)寄存器201與寄存器209之間傳送。
圖3為說明按照本發(fā)明的一個實施例的處理器用來處理數(shù)據(jù)的通用步驟的流程圖。例如,這些操作中包含加載操作,將來自高速緩沖存儲器160、主存儲器104、只讀存儲器(ROM)104或數(shù)據(jù)存儲設(shè)備107的數(shù)據(jù)加載到寄存器文件150中的寄存器。
在步驟301,解碼器202接收來自高速緩沖存儲器160或總線101的控制信號207。解碼器202解碼該控制信號來確定要執(zhí)行的操作。
在步驟302,解碼器202存取寄存器文件150或存儲器中的單元。取決于控制信號207中指定的寄存器地址存取寄存器文件150中的寄存器或存儲器中的存儲器單元。例如,對于分組數(shù)據(jù)上的操作,控制信號207可包含SRC1、SRC2及DEST寄存器地址。SRC1是第一源寄存器的地址。SRC2是第二源寄存器的地址。由于不是所有操作都需要兩個源地址,在某些情況中SRC2地址是可選的。如果一種操作不需要SRC2地址,便只使用SRC1地址。DEST是存儲結(jié)果數(shù)據(jù)的目的地寄存器的地址。在一個實施例中,SRC1或SRC2也用作DEST。相對于圖6a與圖6b更全面地描述SRC1、SRC2及DEST。存儲在對應(yīng)寄存器中的數(shù)據(jù)分別稱作源1(Source1)、源2(Source2)與結(jié)果(Result)。每一個這種數(shù)據(jù)的長度都是64位。
在本發(fā)明的另一實施例中,SRC1、SRC2及DEST中任何一個或全部能定義處理器109的可尋址存儲器空間中的一個存儲器單元。例如,SRC1可標(biāo)識主存儲器104中的存儲器單元,而SRC2標(biāo)識整數(shù)寄存器201中的第一寄存器及DEST標(biāo)識寄存器209中的第二寄存器。這里為了簡化描述,本發(fā)明將相對于存取寄存器文件150描述。然而,這些存取能對存儲器進(jìn)行。
在步驟303,啟動執(zhí)行單元130在存取的數(shù)據(jù)上執(zhí)行操作。在步驟304,按照控制信號207的要求將結(jié)果存儲回寄存器文件150。
數(shù)據(jù)與存儲格式圖4說明按照本發(fā)明的一個實施例的分組數(shù)據(jù)類型。示出了三種分組數(shù)據(jù)格式分組字節(jié)401、分組字402及分組雙字403。在本發(fā)明的一個實施例中,分組字節(jié)為包含8個數(shù)據(jù)元素的64位長。各數(shù)據(jù)元素為一個字節(jié)長。通常,數(shù)據(jù)元素是與其它相同長度的數(shù)據(jù)元素一起存儲在單一寄存器(或存儲器單元)中的一個單獨的數(shù)據(jù)片段。在本發(fā)明的一個實施例中,存儲在寄存器中的數(shù)據(jù)元素的數(shù)目是64位除以一個數(shù)據(jù)元素的位長度。
分組字402為64位長并包含4個字402數(shù)據(jù)元素。各字402數(shù)據(jù)元素包含16位信息。
分組雙字403為64位長并包含兩個雙字403數(shù)據(jù)元素。各雙字403數(shù)據(jù)元素包含32位信息。
圖5a至5c說明按照本發(fā)明的一個實施例的寄存器中分組數(shù)據(jù)存儲表示。無符號分組字節(jié)的寄存器表示510示出在寄存器R0212a至R7212h之一中無符號分組字節(jié)401的存儲。各字節(jié)數(shù)據(jù)元素的信息存儲在字節(jié)0的位7至位0、字節(jié)1的位15至位8、字節(jié)2的位23至位16、字節(jié)3的位31至位24、字節(jié)4的位39至位32、字節(jié)5的位47至位40、字節(jié)6的位55至位48及字節(jié)7的位63至位56中。從而,寄存器中使用了所有可利用的位。這一存儲布置提高了處理器的存儲效率。同時,通過存取8個數(shù)據(jù)元素,便可同時在8個數(shù)據(jù)元素上執(zhí)行一種操作。帶符號分組字節(jié)寄存器表示511示出帶符號分組字節(jié)401的存儲。注意只需要每一個字節(jié)數(shù)據(jù)元素的第八位用于符號指示。
無符號分組字寄存器表示512示出如何將字3至字0存儲在寄存器209的一個寄存器中。位15至位0包含字0的數(shù)據(jù)元素信息,位31至位16包含字1的數(shù)據(jù)元素信息,位47至位32包含數(shù)據(jù)元素字2的信息而位63至位48包含數(shù)據(jù)元素字3的信息。帶符號分組字寄存器表示513類似于無符號分組字寄存器表示512。注意只需要各字?jǐn)?shù)據(jù)元素的第16位用作符號指示。
無符號分組雙字寄存器表示514示出寄存器209如何存儲兩個雙字?jǐn)?shù)據(jù)元素。雙字0存儲在寄存器的位31至位0中。雙字1存儲在寄存器的位63至位32中。帶符號分組雙字寄存器表示515類似于無符號分組雙字寄存器表示514。注意必要的符號位是雙字?jǐn)?shù)據(jù)元素的第32位。
如上所述,寄存器209既可用于分組數(shù)據(jù)又可用于浮點數(shù)據(jù)。在本發(fā)明的這一實施例中,可能要求該單個編程處理器109來跟蹤諸如R0212a的所尋址的寄存器是存儲分組數(shù)據(jù)還是浮點數(shù)據(jù)。在一個替代實施例中,處理器109能跟蹤存儲在寄存器209的各個寄存器中的數(shù)據(jù)的類型。然后如果例如在浮點數(shù)據(jù)上試圖進(jìn)行分組加法運算時,這一替代實施例便能產(chǎn)生出錯。
控制信號格式下面描述處理器109用來操作分組數(shù)據(jù)的控制信號格式的一個實施例。在本發(fā)明的一個實施例中,控制信號是表示為32位的。解碼器202可從總線101接收控制信號207。在另一實施例中,解碼器202也能從高速緩沖存儲器160接收這種控制信號。
圖6a說明按照本發(fā)明的一個實施例指示使用分組數(shù)據(jù)的控制信號格式。操作字段OP 601(位31至位26)提供關(guān)于由處理器109執(zhí)行的操作的信息,例如分組加法、分組減法等。SRC1 602(位25至位20)提供寄存器209中的寄存器的源寄存器地址。這一源寄存器包含在控制信號執(zhí)行中要使用的第一分組數(shù)據(jù)Source1。類似地,SRC2 603(位19至位14)包含寄存器209中的寄存器的地址。這一第二源寄存器包含在該操作執(zhí)行期間要使用的分組數(shù)據(jù)Source2。DEST 605(位5至位0)包含寄存器209中的寄存器地址。這一目的地寄存器將存儲分組數(shù)據(jù)操作的結(jié)果分組數(shù)據(jù)Result。
控制位SZ 610(位12與位13)指示在第一與第二分組數(shù)據(jù)源寄存器中的數(shù)據(jù)元素的長度。如果SZ 610等于012,則將分組數(shù)據(jù)格式化為分組字節(jié)401。如果SZ 610等于102,則將分組數(shù)據(jù)格式化為分組字402。SZ 610等于002或112保留不用,然而在另一實施例中,這些值之一可用來指示分組雙字403。
控制位T611(位11)指示是否要以飽和模式進(jìn)行該操作。如果T611等于1,則執(zhí)行飽和操作。如果T 611等于0,則執(zhí)行非飽和操作。稍后將描述飽和操作。
控制位S 612(位10)指示使用帶符號操作。如果S 612等于1,則執(zhí)行帶符號操作。如果S 612等于0,則執(zhí)行無符號操作。
圖6b說明按照本發(fā)明的一個實施例指示采用分組數(shù)據(jù)的第二種控制信號格式。這一格式對應(yīng)于可從Intel公司,文獻(xiàn)銷售處(P.O.Box7641,Mt.Prospect,IL,60056-7641)購得的“Pentium處理器系列用戶手冊”中描述的通用整數(shù)操作碼格式。注意將OP 601、SZ 610、T 611與S 612全部合并成一個大字段。對于某些控制信號,位3至5為SRC1602。在一個實施例中,當(dāng)存在一個SRC1 602地址時,則位3至5也對應(yīng)于DEST 605。在一個替代實施例中,當(dāng)存在SRC2 603地址時,則位0至2也對應(yīng)于DEST 605。對于其它控制信號,如分組移位立即操作,位3至5表示對操作碼字段的擴(kuò)展。在一個實施例中,這一擴(kuò)展允許程序員包含一個具有控制信號的立即值,諸如移位計數(shù)值。在一個實施例中,立即值在控制信號后面。這在“Pentium處理器系列用戶手冊”附錄F,頁F-1至F-3中有更詳細(xì)的描述。位0至2表示SRC2 603。這一通用格式允許寄存器到寄存器、存儲器到寄存器、寄存器被存儲器、寄存器被寄存器、寄存器被立即數(shù)、寄存器到存儲器的尋址。同時,在一個實施例中,這一通用格式能支持整數(shù)寄存器到寄存器及寄存器到整數(shù)寄存器尋址。
飽和/不飽和的說明如上所述,T 611指示操作是否可選擇地飽和。在允許飽和時,當(dāng)操作的結(jié)果上溢或下溢出數(shù)據(jù)范圍時,結(jié)果將被箝位。箝位的意思是如果結(jié)果超出范圍的最大或最小值便將該結(jié)果設(shè)定在最大或最小值上。下溢的情況中,飽和將結(jié)果箝位到范圍中的最低值上,而在上溢的情況中,則到最高值上。表7中示出各數(shù)據(jù)格式的允許范圍。
數(shù)據(jù)格式 最小值 最大值無符號字節(jié) 0255
帶符號字節(jié) -128 127無符號字 0 65535帶符號字 -32768 32767無符號雙字0 264-1帶符號雙字 -263263-1表7如上所述,T 611指示是否正在執(zhí)行飽和操作。因此,采用無符號字節(jié)數(shù)據(jù)格式,如果操作結(jié)果=258且允許飽和,則在將結(jié)果存儲進(jìn)該操作的目的地寄存器之前將該結(jié)果箝位到255。類似地,如果操作結(jié)果=-32999且處理器109采用允許飽和的帶符號字?jǐn)?shù)據(jù)格式,則在將結(jié)果存儲進(jìn)操作的目的地寄存器之前將其箝位到-32768。
分組加法分組加法運算本發(fā)明的一個實施例能夠在執(zhí)行單元130中執(zhí)行分組加法運算。即,本發(fā)明使第一分組數(shù)據(jù)的各數(shù)據(jù)元素能單個地加在第二分組數(shù)據(jù)的各數(shù)據(jù)元素上。
圖7a說明按照本發(fā)明的一個實施例執(zhí)行分組加法的方法。在步驟701,解碼器202解碼處理器109接收的控制信號207。從而,解碼器202解碼出分組加法的操作碼;寄存器209中的SRC1 602、SRC2 603及DEST 605地址;飽和/不飽和、帶符號/無符號及分組數(shù)據(jù)中的數(shù)據(jù)元素的長度。在步驟702,解碼器202通過內(nèi)部總線170存取寄存器文件150中給出SRC1 602與SRC2 603地址的寄存器209。寄存器209向執(zhí)行單元130提供分別存儲在這些地址上的寄存器中的分組數(shù)據(jù)Source1與Source2。即,寄存器209通過內(nèi)部總線170將分組數(shù)據(jù)傳遞給執(zhí)行單元130。
在步驟703,解碼器202啟動執(zhí)行單元130去執(zhí)行分組加法運算。解碼器202還通過內(nèi)部總線170傳遞分組數(shù)據(jù)元素的長度、是否采用飽和及是否采用帶符號算術(shù)運算。在步驟704,數(shù)據(jù)元素的長度確定下面執(zhí)行哪一步驟。如果分組數(shù)據(jù)中的數(shù)據(jù)元素長度為8位(字節(jié)數(shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟705a。然而,如果分組數(shù)據(jù)中的數(shù)據(jù)元素長度為16位(字?jǐn)?shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟705b。在本發(fā)明的一個實施例中,只支持8位與16位數(shù)據(jù)元素長度分組加法。然而,其它實施例能支持不同的與/或其它長度。例如,在一個替代實施例中能附加支持32位數(shù)據(jù)元素長度分組加法。
假定數(shù)據(jù)元素長度為8位,則執(zhí)行步驟705a。執(zhí)行單元130將Source1的位7至位0加在SRC2的位7至位0上,生成Result分組數(shù)據(jù)的位7至位0。與這一加法并行,執(zhí)行單元130將Source1的位15至位8加在Source2的位15至位8上,產(chǎn)生Result分組數(shù)據(jù)的位15至位8。與這些加法并行,執(zhí)行單元130將Source1的位23至位16加在Source2的位23至位16上,產(chǎn)生Result分組數(shù)據(jù)的位23至位16。與這些加法并行,執(zhí)行單元130將Source1的位31至位24加在Source2的位31至位24上,產(chǎn)生Result分組數(shù)據(jù)的位31至位24。與這些加法并行,執(zhí)行單元將Source1的位39至位32加在Source2的位39至位32上,產(chǎn)生Result分組數(shù)據(jù)的位39至位32。與這些加法并行,執(zhí)行單元130將Source1的位47至40加在Source2的位47至位40上,產(chǎn)生Result分組數(shù)據(jù)的位47至位40。與這些加法并行,執(zhí)行單元130將Source1的位55至位48加在Source2的位55至位48上,產(chǎn)生Result分組數(shù)據(jù)的位55至位48。與這些加法并行,執(zhí)行單元130將Source1的位63至位56加在Source2的位63至位56上,產(chǎn)生Result分組數(shù)據(jù)的位63至位56。
假定數(shù)據(jù)元素長度為16位,則執(zhí)行步驟705b。執(zhí)行單元130將Source1的位15至位0加在SRC2的位15至位0上,產(chǎn)生Result分組數(shù)據(jù)的位15至位0。與這一加法并行,執(zhí)行單元130將Source1的位31至位16加在Source2的位31至位16上,產(chǎn)生Result分組數(shù)據(jù)的位31至位16。與這些加法并行,執(zhí)行單元130將Source1的位47至位32加在Source2的位47至位32上,產(chǎn)生Result分組數(shù)據(jù)的位47至位32。與這些加法并行,執(zhí)行單元130將Source1的位63至位48加在Source2的位63至位48上,產(chǎn)生Result分組數(shù)據(jù)的位63至位48。
在步驟706,解碼器202用目的地寄存器的DEST605地址啟動寄存器209中的一個寄存器。從而,將Result存儲在DEST605尋址的寄存器中。
表8a說明分組加法運算的寄存器表示。第一行的位是Source1分組數(shù)據(jù)的分組數(shù)據(jù)表示。第二行的位是Source2分組數(shù)據(jù)的分組數(shù)據(jù)表示。第三行的位是Result分組數(shù)據(jù)的分組數(shù)據(jù)表示。各數(shù)據(jù)元素位下面的號碼是數(shù)據(jù)元素號碼。例如,Source1數(shù)據(jù)元素0為100010002。因此,如果該數(shù)據(jù)元素是8位長度(字節(jié)數(shù)據(jù))且執(zhí)行的是無符號不飽和的加法,則執(zhí)行單元130產(chǎn)生所示的Result分組數(shù)據(jù)。
注意在本發(fā)明的一個實施例中,當(dāng)結(jié)果上溢或下溢且運算采用不飽和時,簡單地截位結(jié)果。即忽略進(jìn)位位。例如,在表8a中,結(jié)果數(shù)據(jù)元素1的寄存器表示將是100010002+100010002=000010002。類似地,對于下溢也截位其結(jié)果。這一截位形式使程序員能容易地執(zhí)行模運算。例如,結(jié)果數(shù)據(jù)元素1的公式可表示為(Source1數(shù)據(jù)元素1+Source2數(shù)據(jù)元素1)mod 256=結(jié)果數(shù)據(jù)元素1。此外,熟悉本技術(shù)的人員會從這一描述理解上溢與下溢可通過在狀態(tài)寄存器中設(shè)置出錯位來檢測。
表8a表8b說明分組字?jǐn)?shù)據(jù)加法運算的寄存器表示。因此,如果該數(shù)據(jù)元素是16位長度(字?jǐn)?shù)據(jù))且所執(zhí)行的是無符號不飽和加法,執(zhí)行單元130產(chǎn)生所示的Result分組數(shù)據(jù)。注意在字?jǐn)?shù)據(jù)元素2中,來自位7(見下面強調(diào)的位1)的進(jìn)位傳播到位8中,導(dǎo)致數(shù)據(jù)元素2上溢(見下面強調(diào)的“上溢”)。
表8b表8c說明分組雙字?jǐn)?shù)據(jù)加法運算的寄存器表示。本發(fā)明的一個替代實施例支持這一運算。因此,如果該數(shù)據(jù)元素是32位長度(即雙字?jǐn)?shù)據(jù))且執(zhí)行的是無符號不飽和加法,執(zhí)行單元130產(chǎn)生所示的Result分組數(shù)據(jù)。注意來自雙字?jǐn)?shù)據(jù)元素1的位7與位15的進(jìn)位分別傳播到位8與位16中。
表8c為了更好地說明分組加法與普通加法之間的差別,表9中復(fù)制了來自上例的數(shù)據(jù)。然而,在這一情況中,在數(shù)據(jù)上執(zhí)行普通加法(64位)。注意來自位7、位15、位23、位31、位39及位47的進(jìn)位已分別帶到位8、位16、位24、位32、位40及位48中。
表9帶符號/不飽和分組加法表10說明帶符號分組加法的示例,其中的分組數(shù)據(jù)的數(shù)據(jù)元素長度是8位。不使用飽和。因此,結(jié)果能上溢與下溢。表10利用與表8a-8c及表9不同的數(shù)據(jù)。
表10帶符號/飽和的分組加法表11說明帶符號分組加法的示例,其中的分組數(shù)據(jù)的數(shù)據(jù)元素長度是8位。采用了飽和,因此將上溢箝位到最大值及將下溢箝位到最小值。表11使用與表10相同的數(shù)據(jù)。這里將數(shù)據(jù)元素0與數(shù)據(jù)元素2箝位到最小值,而將數(shù)據(jù)元素4與數(shù)據(jù)元素6箝位到最大值。
表11分組減法分組減法運算本發(fā)明的一個實施例使在執(zhí)行單元130中能執(zhí)行分組減法運算。即,本發(fā)明使第二分組數(shù)據(jù)的各數(shù)據(jù)元素能從第一分組數(shù)據(jù)的各數(shù)據(jù)元素中分別地減去。
圖7b說明按照本發(fā)明的一個實施例執(zhí)行分組減法的方法。注意,步驟710-713類似于步驟701-704。
在本發(fā)明的當(dāng)前實施例中,只支持8位與16位數(shù)據(jù)元素長度分組減法。然而,替代實施例能支持不同的與/或其它長度。例如,一個替代實施例能附加支持32位數(shù)據(jù)元素長度分組減法。
假定數(shù)據(jù)元素長度是8位,便執(zhí)行步驟714a與715a。執(zhí)行單元130求Source2的位7至位0的2的補碼。與求2的補碼并行,執(zhí)行單元130求Source2的位15至位8的2的補碼。與這些求2的補碼并行,執(zhí)行單元130求Source2的位23至位16的2的補碼。與這些求2的補碼并行,執(zhí)行單元130求Source2的位31至位24的2的補碼。與這些求2的補碼并行,執(zhí)行單元130求Source2的位39至位32的2的補碼。與這些求2的補碼并行,執(zhí)行單元130求Source2的位47至位40的2的補碼。與這些求2的補碼并行,執(zhí)行單元130求Source2的位55至位48的2的補碼。與這些求2的補碼并行,執(zhí)行單元130求Source2的位63至位56的2的補碼。在步驟715a,執(zhí)行單元130執(zhí)行Source2的2的補碼位與Source1的位的加法,如對步驟705a總的描述。
假定數(shù)據(jù)元素長度是16位,則執(zhí)行步驟714b與715b。執(zhí)行單元130求Source2的位15至位0的2的補碼。與這一求2的補碼并行,執(zhí)行單元130求Source2的位31至位16的2的補碼。與這些求2的補碼并行,執(zhí)行單元130求Source2的位47至位32的2的補碼。與這些求2的補碼并行,執(zhí)行單元130求Source2的位63至位48的2的補碼。在步驟715b,執(zhí)行單元130執(zhí)行Source2的2的補碼位與Source1的位的加法,如對步驟705b總的描述。
注意步驟714與715為用在本發(fā)明的一個實施例中從第二個數(shù)減去第一個數(shù)的方法。然而,其它形式的減法在本技術(shù)中是已知的,不應(yīng)認(rèn)為本發(fā)明限于采用2的求補算術(shù)運算。
在步驟716,解碼器202用目的地寄存器的目的地地址啟動寄存器209。從而,將結(jié)果分組數(shù)據(jù)存儲在寄存器209的DEST寄存器中。
表12說明分組減法運算的寄存器表示。假定數(shù)據(jù)元素為8位長度(字節(jié)數(shù)據(jù))且所執(zhí)行的是無符號不飽和減法,則執(zhí)行單元130產(chǎn)生所示的結(jié)果分組數(shù)據(jù)。
表12分組數(shù)據(jù)加法/減法電路圖8說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)的各個位上執(zhí)行分組加法與分組減法的電路。圖8示出修改過的位片加法器/減法器800。加法器/減法器801a-b能在Source1加上或減去來自Source2的兩位。運算與進(jìn)位控制803向控制線路809a傳輸控制信號啟動加法或減法運算。從而,加法器/減法器801a在Source1i804a上所接收的位i上加上或減去Source2i805a上接收的位i,產(chǎn)生在Resulti806a上傳輸?shù)慕Y(jié)果位。Cin 807a-b與Cout 808a-b表示在加法器/減法器上經(jīng)常見到的進(jìn)位控制電路。
從運算與進(jìn)位控制803通過分組數(shù)據(jù)使能811啟動位控制802來控制Cini+1807b及Couti。例如,在表13a中,執(zhí)行無符號分組字節(jié)加法。如果加法器/減法器801a相加Source1位7與Source2位7,則運算與進(jìn)位控制803將啟動位控制802,停止將進(jìn)位從位7傳播到位8。
表13a然而,如果執(zhí)行的是無符號分組字加法,并且類似地用加法器/減法器801a將Source1的位7加在Source2的位7上,則位控制802傳播該進(jìn)位到位8。表13b說明這一結(jié)果。對于分組雙字加法及非分組加法都允許這一傳播。
表13b加法器/減法器801a通過首先反相Source2i 805a及加1形成Source2i805a的2的補碼,從Source1i804a減去位Source2i805a。然后,加法器/減法器801a將這一結(jié)果加在Source1i804a上。位片的2的補碼運算技術(shù)是本技術(shù)中眾所周知的,熟悉本技術(shù)的人員會理解如何設(shè)計這一位片的2的補碼運算電路。注意進(jìn)位的傳播是受位控制802及運算與進(jìn)位控制803控制的。
圖9說明按照本發(fā)明一個實施例在分組字節(jié)數(shù)據(jù)上執(zhí)行分組加法與分組減法的電路。Source1總線901與Source2總線902分別通過Source1in906a-h與Source2in905 a-h將信息信號帶到加法器/減法器908a-h中。從而,加法器/減法器908a在Source1位7至位0上加上/減去Source2位7至位0;加法器/減法器908b在Source1位15至位8上加上/減去Source2位15至位8,等等。CTRL 904a-h通過分組控制911接收來自運算控制903的禁止進(jìn)位傳播、允許/禁止飽和以及允許/禁止帶符號/無符號算術(shù)運算的控制信號。運算控制903通過從CTRL 904a-h接收進(jìn)位信息并且不將它傳播給次最高位加法器/減法器908a-h而禁止進(jìn)位傳播。從而,運算控制903執(zhí)行運算與進(jìn)位控制803及64位分組數(shù)據(jù)的位控制802的運算。給出了圖1-9中的示例及上述描述,熟悉本技術(shù)的人員能建立這一電路。
加法器/減法器908a-h通過結(jié)果輸出907a-h將各種分組加法的結(jié)果信息傳遞給結(jié)果寄存器910a-h。各結(jié)果寄存器910a-h存儲及隨后將結(jié)果信息傳輸?shù)絉esult總線909上。然后將這一結(jié)果信息存儲在DEST605寄存器地址指定的整數(shù)寄存器中。
圖10為按照本發(fā)明的一個實施例在分組字?jǐn)?shù)據(jù)上執(zhí)行分組加法與分組減法的電路的邏輯視圖。這里,正在執(zhí)行分組字運算。運算控制903啟動位8與位7、位24與位23、位40與位39以及位56與位55之間的進(jìn)位傳播。從而,示出為虛擬加法器/減法器1008a的加法器/減法器908a與908b一起工作在分組字?jǐn)?shù)據(jù)Source1的第一個字(位15至位0)上加上/減去分組字?jǐn)?shù)據(jù)Source2的第一個字(位15至位0);示出為虛擬加法器/減法器1008b的加法器/減法器908c與908d一起工作在分組字?jǐn)?shù)據(jù)Source1的第二個字(位31至位16)上加/減分組字?jǐn)?shù)據(jù)Source2的第二個字(位31至位16),等等。
虛擬加法器/減法器1008a-d通過結(jié)果輸出1007a-d(組合的結(jié)果輸出907a-b、907c-d、907e-f及907g-h)將結(jié)果信息傳遞給虛擬結(jié)果寄存器1010a-d。各虛擬結(jié)果寄存器1010a-d(組合的結(jié)果寄存器910a-b、910c-d、910e-f及910g-h)存儲要傳遞到Result總線909上的16位結(jié)果數(shù)據(jù)元素。
圖11為按照本發(fā)明的一個實施例在分組雙字?jǐn)?shù)據(jù)上執(zhí)行分組加法與分組減法的電路的邏輯圖。運算控制903啟動位8與位7、位16與位15、位24與位23、位40與位39、位48與位47及位56與位55之間的進(jìn)位傳播。從而,示出為虛擬加法器/減法器1108a的加法器/減法器908a-d一起工作在組合字?jǐn)?shù)據(jù)Source1的第一個雙字(位31至位0)上加上/減去組合雙字?jǐn)?shù)據(jù)Source2的第一個雙字(位31至位0);示出為虛擬加法器/減法器1108b的加法器/減法器908e-h一起工作在組合雙字?jǐn)?shù)據(jù)Source1的第二個雙字(位63至位32)上加上/減去組合雙字?jǐn)?shù)據(jù)Source2的第二個雙字(位63至位32)。
虛擬加法器/減法器1108a-b通過結(jié)果輸出1107a-b(組合的結(jié)果輸出907a-d與907e-h)將結(jié)果信息傳遞給虛擬結(jié)果寄存器1110a-b。各虛擬結(jié)果寄存器1110a-b(組合的結(jié)果寄存器910a-d與910e-h)存儲要傳遞到Result總線909上的32位結(jié)果數(shù)據(jù)元素。
分組乘法分組乘法運算在本發(fā)明的一個實施例中,SRC1寄存器中包含被乘數(shù)數(shù)據(jù)(Source1),SRC2寄存器中包含乘數(shù)數(shù)據(jù)(Source2),而DEST寄存器中則包含乘積(結(jié)果)的一部分。即Source1的各數(shù)據(jù)元素獨立地乘以Source2的相應(yīng)數(shù)據(jù)元素。取決于乘法的類型,Result中將包含積的高階位或低階位。
在本發(fā)明的一個實施例中,支持下述乘法運算乘法高無符號分組、乘法高帶符號分組及乘法低分組。高/低表示在Result中要包含來自乘積的哪些位。這是必要的,因為兩個N位數(shù)相乘得出具有2N位的積。由于各結(jié)果數(shù)據(jù)元素與被乘數(shù)及乘數(shù)數(shù)據(jù)元素大小相同,結(jié)果只能表示積的一半。高導(dǎo)致較高階位被作為結(jié)果輸出。低導(dǎo)致低階位被作為結(jié)果輸出。例如,Source1[7∶0]×Source2[7∶0]的無符號高分組乘法,在Result[7∶0]中存儲積的高階位。
在本發(fā)明的一個實施例中,高/低運算修飾符的使用消除了從一個數(shù)據(jù)元素上溢到下一個較高數(shù)據(jù)元素的可能性。即,這一修飾符允許程序員選擇積中哪些位要在結(jié)果中而不考慮上溢。程序員能用分組乘法運算的組合生成完整的2N位積。例如,程序員能用Source1和Source2用乘法高無符號分組運算然后再用相同的Source1與Source2用乘法低分組運算得出完整的(2N)積。提供了乘法高運算因為通常積的高階位是積的僅有的重要部分。程序員可以不必首先執(zhí)行任何截位便得到積的高階位,這種截位對于非分組數(shù)據(jù)運算通常是需要的。
在本發(fā)明的一個實施例中,Source2中的各數(shù)據(jù)元素可具有一個不同的值。這向程序員提供了對于Source1中的各被乘數(shù)可具有不同的值作為乘數(shù)的靈活性。
圖12為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分組乘法運算的方法的流程圖。
在步驟1201,解碼器202解碼處理器109接收的控制信號207。從而,解碼器202解碼出適當(dāng)乘法運算的運算碼;寄存器209中的SRC1 602、SRC2 603及DEST 604地址;帶符號/無符號、高/低及分組數(shù)據(jù)中的數(shù)據(jù)元素的長度。
在步驟1202,解碼器202通過內(nèi)部總線170存取寄存器文件150中給定SRC1 602與SRC2 603地址的寄存器209。寄存器209向執(zhí)行單元130提供存儲在SRC1 603寄存器中的分組數(shù)據(jù)(Source1)及存儲在SRC2 603寄存器中的分組數(shù)據(jù)(Source2)。即,寄存器209通過內(nèi)部總線170將分組數(shù)據(jù)傳遞給執(zhí)行單元130。
在步驟1130解碼器202啟動執(zhí)行單元130執(zhí)行適當(dāng)?shù)姆纸M乘法運算。解碼器202還通過內(nèi)部總線170傳遞用于乘法運算的數(shù)據(jù)元素的長度及高/低。
在步驟1210,數(shù)據(jù)元素的長度確定下面執(zhí)行哪一步驟。如果數(shù)據(jù)元素的長度是8位(字節(jié)數(shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟1212。然而,如果分組數(shù)據(jù)中的數(shù)據(jù)元素長度為16位(字?jǐn)?shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟1214。在一個實施例中,只支持16位數(shù)據(jù)元素長度的分組乘法。在另一實施例中,支持8位與16位數(shù)據(jù)元素長度分組乘法。然而,在另一實施例中,還支持32位數(shù)據(jù)元素長度分組乘法。
假定數(shù)據(jù)元素的長度為8位,便執(zhí)行步驟1212。在步驟1212中,執(zhí)行下述各操作,將Source1位7至位0乘以Source2位7至位0生成Result位7至位0。將Source1位15至8乘以Source2位15至8生成Result位15至8。將Source1位23至16乘以Source2位23至16生成Result位23至16。將Source1位31至24乘以Source2位31至24生成Result位31至24。將Source1位39至32乘以Source2位39至32生成Result位39至32。將Source1位47至40乘以Source2位47至40生成REsult位47至40。將Source1位55至48乘以Source2位55至48生成Result位55至48。將Source1位63至56乘以Source2位63至56生成Result位63至56。
假定數(shù)據(jù)元素的長度為16位,則執(zhí)行步驟1214。在步驟1214中,執(zhí)行下述操作。將Source1位15至0乘以Source2位15至0生成Result位15至0。將Source1位31至16乘以Source2位31至16生成Result位31至16。將Source1位47至32乘以Source2位47至32生成Result位47至32。將Source1位63至48乘以Source2位63至48生成Result位63至48。
在一個實施例中,同時執(zhí)行步驟1212的乘法。然而在另一實施例中,這些乘法是串行執(zhí)行的。在另一實施例中,這些乘法中一些是同時執(zhí)行的而一些是串行執(zhí)行的。這一討論也同樣適用于步驟1214的乘法。
在步驟1220將Result存儲在DEST寄存器中。
表14示出在分組字?jǐn)?shù)據(jù)上的分組乘法無符號高運算的寄存器表示。第一行的位為Source1的分組數(shù)據(jù)表示。第二行的位為Source2的數(shù)據(jù)表示。第三行的位為Result的分組數(shù)據(jù)表示。各數(shù)據(jù)元素位下面的號碼為數(shù)據(jù)元素號。例如,Source1數(shù)據(jù)元素2為11111111000000002。
表14
表15示出分組字?jǐn)?shù)據(jù)上的乘法高帶符號分組運算的寄存器表示。
表15表16示出分組字?jǐn)?shù)據(jù)上的分組乘法低運算的寄存器表示。
表16分組數(shù)據(jù)乘法電路在一個實施例中,可以在與分解的數(shù)據(jù)上的單一乘法運算相同數(shù)目的時鐘周期中在多個數(shù)據(jù)元素上出現(xiàn)乘法運算。為了達(dá)到在相同數(shù)目的時鐘周期中執(zhí)行,采用了并行性。即同時指示寄存器在數(shù)據(jù)元素上執(zhí)行乘法運行。在下面更詳細(xì)地討論這一點。
圖13說明用于按照本發(fā)明的一個實施例執(zhí)行分組乘法的電路。運算控制1300控制執(zhí)行乘法的電路。運算控制1300處理乘法運算的控制信號并具有下述輸出高/低使能1380;字節(jié)/字使能1381及符號使能1382,高/低使能1380標(biāo)識結(jié)果中要包含積的高階位還是低階位。字節(jié)/字使能1381標(biāo)識要執(zhí)行的是字節(jié)分組數(shù)據(jù)還是字分組數(shù)據(jù)乘法運算。符號使能1382指示是否應(yīng)采用帶符號乘法。
分組字乘法器1301同時乘四個字?jǐn)?shù)據(jù)元素。分組字節(jié)乘法器1302乘8個字節(jié)數(shù)據(jù)元素。分組字乘法器1301及分組字節(jié)乘法器都具有下述輸入Source1[63∶0]1331、Source[63∶0]1333、符號使能1382及高/低使能1380。
分組字乘法器1301包含4個16×16乘法器電路16×16乘法器A 1310、16×16乘法器B1311、16×16乘法器C 1312及16×16乘法器D1313。16×16乘法器A 1310具有輸入Source1[15∶0]與Source2[15∶0],16×16乘法器B 1311具有輸入Source1[31∶16]與Source2[31∶16],16×16乘法器C 1312具有輸入Source1[47∶32]與Source2[47∶32],16×16乘法器D 1313具有輸入Source1[63∶48]與Source2[63∶48]。各16×16乘法器耦合在符號使能1382上。各16×16乘法器產(chǎn)生32位積。對于各乘法器,多路復(fù)用器(分別為Mx01350、Mx1 1351、Mx2 1352及Mx3 1353)接收32位結(jié)果。取決于高/低使能1380的值,各多路復(fù)用器輸出積的16個高階位或16個低階位。將四個多路復(fù)用器的輸出組合成一個64位結(jié)果。這一結(jié)果可選地存儲在結(jié)果寄存器1 1371中。
分組字節(jié)乘法器1302包含8個8×8乘法器電路8×8乘法器A1320至8×8乘法器H1337。各8×8乘法器具有來自各Source1[63∶0]1331及Source2[63∶0]1333的8位輸入。例如8×8乘法器A 1320具有輸入Source1[7∶0]與Source2[7∶0],而8×8乘法器H 1327具有輸入Source1[63∶56]與Source2[63∶56]。各8×8乘法器耦合在符號使能1382上。各8×8乘法器產(chǎn)生一個16位積。對于各乘法器,多路復(fù)用器(諸如Mx4 1360與Mx11 1367)接收16位結(jié)果。取決于高/低使能1380的值。各多路復(fù)用器輸出積的8個高階位或8個低階位。將8個多路復(fù)用器的輸出組合成一個64位結(jié)果??蛇x地將這一結(jié)果存儲在結(jié)果寄存器2 1372中。取決于該運算要求的數(shù)據(jù)元素的長度,字節(jié)/字使能1381啟動特定的結(jié)果寄存器。
在一個實施例中,通過制造能乘兩個8×8數(shù)或一個16×16數(shù)兩者的電路,減少用于實現(xiàn)乘法的面積。即將兩個8×8乘法器及一個16×16乘法器組合成一個8×8與16×16乘法器。運算控制1300將允許乘法的適當(dāng)長度。在這一實施例中,可以縮小乘法器所使用的物理面積,然而它將難于執(zhí)行分組字節(jié)乘法及分組字乘法。在另一支持分組雙字乘法的實施例中,一個乘法器能執(zhí)行四個8×8乘法、兩個16×16乘法或一個32×32乘法。
在一個實施例中,只提供分組字乘法運算。在這一實施例中,不包含分組字節(jié)乘法器1302及結(jié)果寄存器2 1372。
在指令集中包含上述分組乘法運算的優(yōu)點從而上述分組乘法指令提供了Source1中各數(shù)據(jù)元素乘以Source2中其對應(yīng)數(shù)據(jù)元素的獨立乘法。當(dāng)然,要求Source1各元素乘以同一個數(shù)算法可通過將該相同的數(shù)存儲在Source2的各元素中來執(zhí)行。此外,這一乘法指令通過斷開進(jìn)位鏈防止上溢;借此解除程序員的這一責(zé)任,不再需要準(zhǔn)備數(shù)據(jù)來防止上溢的指令,并得出更健壯的代碼。
反之,不支持這一指令的先有技術(shù)通用處理器需要通過分解數(shù)據(jù)元素、執(zhí)行乘法及隨后組裝結(jié)果供進(jìn)一步分組處理,來執(zhí)行這一運算。這樣,處理器109便能利用一條指令并行地將分組數(shù)據(jù)的不同數(shù)據(jù)元素乘以不同的乘數(shù)。
典型的多媒體算法執(zhí)行大量的乘法運算。從而,通過減少執(zhí)行這些乘法運算所需的指令數(shù),便能提高這些多媒體算法的性能。從而,通過在處理器109所支持的指令集中提供這一乘法指令,處理器109便能在較高的性能級上執(zhí)行需要這一功能的算法。
乘-加/減乘-加/減運算在一個實施例中,采用下面表17a與表17b中所示的單一乘-加指令執(zhí)行兩個乘-加運算。表17a示出所公開的乘-加指令的簡化表示,而表17b示出公開的乘-加指令的位級示例。
Multiply-Add Source1,Source2
(源1)(源2)(結(jié)果1)表17a
表17b除了用“減”替換“加”之外,乘-減運算與乘-加運算相同。
表12中示出執(zhí)行兩個乘-減運算的示例乘-減指令的運算。
Multiply-Subtract Source1,Source2
(源1)(源2)(結(jié)果1)表12在本發(fā)明的一個實施例中,SRC1寄存器包含分組數(shù)據(jù)(Source1),SRC2寄存器包含分組數(shù)據(jù)(Source2),而DEST寄存器將包含在Source1與Source2上執(zhí)行乘-加或乘-減指令的結(jié)果(Result)。在乘-加或乘-減指令的第一步中,Source1的各數(shù)據(jù)元素獨立地乘以Source2的對應(yīng)數(shù)據(jù)元素以生成一組對應(yīng)的中間結(jié)果。在執(zhí)行乘-加指令時,將這些中間結(jié)果成對相加,生成兩個數(shù)據(jù)元素,將它們作為Result的數(shù)據(jù)元素存儲。相反,在執(zhí)行乘-減指令時,成對相減這些中間結(jié)果生成兩個數(shù)據(jù)元素,將它們作為Result的數(shù)據(jù)元素存儲。
替代實施例可改變中間結(jié)果的數(shù)據(jù)元素與/或Result中的數(shù)據(jù)元素中的位數(shù)。此外,替代實施例可改變Source1、Source2及Result中的數(shù)據(jù)元素數(shù)。例如,如果Source1與Source2各有8個數(shù)據(jù)元素,可將乘-加/減指令實現(xiàn)為產(chǎn)生帶有4個數(shù)據(jù)元素(Result中的各數(shù)據(jù)元素表示兩個中間結(jié)果的相加)、兩個數(shù)據(jù)元素(結(jié)果中的各數(shù)據(jù)元素表示四個中間結(jié)果的相加)等的Result。
圖14為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行乘-加與乘-減的方法的流程圖。
在步驟1401,解碼器202解碼處理器109接收的控制信號207。從而,解碼器202解碼出乘-加或乘-減指令的操作碼。
在步驟1402,解碼器202通過內(nèi)部總線170存取給出SRC1 602與SRC2 603地址的寄存器文件150中的寄存器209。寄存器209向執(zhí)行單元130提供存儲在SRC1 602寄存器中的分組數(shù)據(jù)(Source1)及存儲在SRC2 603寄存器中的分組數(shù)據(jù)(Source2)。即寄存器209通過內(nèi)部總線170將分組數(shù)據(jù)傳遞給執(zhí)行單元130。
在步驟1403,解碼器202啟動執(zhí)行單元130去執(zhí)行指令。如果該指令為乘-加指令,流程進(jìn)到步驟1414。然而,如果該指令為乘-減指令,流程便進(jìn)到步驟1415。
在步驟1414中,執(zhí)行以下運算。將Source1位15至0乘以Source2位15至0生成第一32位中間結(jié)果(中間結(jié)果1)。將Source1位31至16乘以Source2位31至16生成第二32位中間結(jié)果(中間結(jié)果2)。將Source1位47至32乘以Source2位47至32生成第三32位中間結(jié)果(中間結(jié)果3)。將Source1位63至48乘以Source2位63至48生成第四32位中間結(jié)果(中間結(jié)果4)。將中間結(jié)果1加到中間結(jié)果2上生成Result的位31至0,并將中間結(jié)果3加到中間結(jié)果4上生成Result的位63至32。
步驟1415與步驟1414相同,除了將中間結(jié)果1與中間結(jié)果2相減以生成Result的位31至0,中間結(jié)果3與中間結(jié)果4相減以生成Result的位63至32。
不同實施例可執(zhí)行串行、并行或串行與并行運算的某種組合的乘與加/減。
在步驟1420,將Result存儲在DEST寄存器中。
分組數(shù)據(jù)乘-加/減電路在一個實施例中,能和在分解的數(shù)據(jù)上的單個乘法一樣的相同數(shù)目的時鐘周期中在多個數(shù)據(jù)元素上出現(xiàn)各乘-加與乘-減指令。為了達(dá)到在相同數(shù)目的時鐘周期中執(zhí)行,采用了并行性。即指示寄存器在數(shù)據(jù)元素上同時執(zhí)行乘-加或乘-減運算。下面更詳細(xì)地討論這一點。
圖15說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行乘-加與/或乘-減運算的電路。操作控制1500處理乘-加與乘-減指令的控制信號。操作控制1500在使能1580上輸出信號來控制分組乘-加法器/減法器1501。
分組乘-加法器/減法器1501具有下列輸入Source1[63∶0]1531、Source2[63∶0]1533及使能1580。分組乘-加法器/減法器1501包含4個16×16乘法器電路16×16乘法器A 1510、16×16乘法器B 1511、16×16乘法器C 1512及16×16乘法器D 1513。16×16乘法器A 1510具有輸入Source1[15∶0]及Source2[15∶0]。16×16乘法器B 1511具有輸入Source1[31∶16]及Source2[31∶16]。16×16乘法器C 1512具有輸入Source1[47∶32]及Source2[47∶32]。16×16乘法器D 1513具有輸入Source1[63∶48]及Source2[63∶48],16×16乘法器A 1510及16×16乘法器B 1511生成的32位中間結(jié)果由虛擬加法器/減法器1550接收,而16×16乘法器C 1512及16×16乘法器D 1513生成的32位中間結(jié)果則由虛擬加法器/減法器1551接收。
基于當(dāng)前指令是乘-加還是乘-減指令,虛擬加法器/減法器1550與1551或加或減它們各自的32位輸入。虛擬加法器/減法器1550的輸出(即Result的位31至0)及虛擬加法器/減法器1551的輸出(即Result的位63至32)組合成64位Result并被傳遞給結(jié)果寄存器1571。
在一個實施例中,虛擬加法器/減法器1551及1550是以類似虛擬加法器/減法器1108b及1108a的方式實現(xiàn)的(即各虛擬加法器/減法器1551及1550是由帶有適當(dāng)傳播延時的4個8位加法器組成的)。然而,替代實施例能用各種方式實現(xiàn)虛擬加法器/減法器1551及1550。
為了在分解數(shù)據(jù)上操作的先有技術(shù)處理器上執(zhí)行這些乘-加或乘-減指令的等效指令,將需要四次獨立的64位乘法運算與兩次64位加或減法運算以及必要的加載與存儲操作。這浪費用于Source1與Source2的高于位16及Result的高于位32的數(shù)據(jù)線及電路。并且,這種先有技術(shù)處理器生成的整個64位結(jié)果對于程序員可能是無用的。因此,程序員將必須截斷各結(jié)果。
在指令集中包含上述乘-加運算的優(yōu)點上述乘-加/減指令可用于若干目的。例如,乘-加指令可用在復(fù)數(shù)乘法及值的相乘與累加。稍后要描述利用乘-加指令的若干算法。
從而通過在處理器109支持的指令集中加入上述乘-加與/或乘-減指令,便能用比缺少這些指令的先有技術(shù)通用處理器較少的指令執(zhí)行許多功能。
分組移位分組移位操作在本發(fā)明的一個實施例中,SCR1寄存器中包含要移位的數(shù)據(jù)(Source1),SRC2寄存器中包含表示移位計數(shù)的數(shù)據(jù)(Source2),而DEST寄存器中將包含移位的結(jié)果(Result)。即Source1中的各數(shù)據(jù)元素獨立地移位該移位計數(shù)。在一個實施例中,將Source2解釋為一個無符號的64位標(biāo)量。在另一實施例中,Source2為分組數(shù)據(jù)并包含Source1中各對應(yīng)數(shù)據(jù)元素的移位計數(shù)。
在本發(fā)明的一個實施例中,支持算術(shù)移位與邏輯移位兩者。算術(shù)移位將各數(shù)據(jù)元素的位向下移位指定的數(shù)目,并用符號位的初始值填充各數(shù)據(jù)元素的高階位。對于分組字節(jié)數(shù)據(jù)大于7的移位計數(shù)、對于分組字?jǐn)?shù)據(jù),大于15的移位計數(shù)、或?qū)τ诜纸M雙字大于31的移位計數(shù)導(dǎo)致用符號位的初始值來填充各Result數(shù)據(jù)元素。邏輯移位可用向上或向下移位來操作。在邏輯向右移位中,用0來填充各數(shù)據(jù)元素的高階位。在邏輯向左移位中,用零來填充各數(shù)據(jù)元素的最低位。
在本發(fā)明的一個實施例中,對分組字節(jié)與分組字支持算術(shù)向右移位、邏輯向右移位及邏輯向左移位。在本發(fā)明的另一實施例中,對分組雙字也支持這些操作。
圖16為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分組移位操作的方法的流程圖。
在步驟1601,解碼器202解碼處理器109所接收的控制信號207。從而,解碼器202解碼出用于適當(dāng)移位操作的操作碼;寄存器209中的SRC1 602、SRC2 603及DEST 605地址;飽和/不飽和(對移位操作不一定需要)、帶符號/無符號(也不一定需要)及分組數(shù)據(jù)中的數(shù)據(jù)元素的長度。
在步驟1602,解碼器202通過內(nèi)部總線170存取寄存器文件150中給出SRC1 602及SRC2 603地址的寄存器209。寄存器209向執(zhí)行單元130提供SRC1 602寄存器中所存儲的分組數(shù)據(jù)(Source1)及存儲在SRC2 603寄存器中的標(biāo)量移位計數(shù)(Source2)。即寄存器209通過內(nèi)部總線170將分組數(shù)據(jù)傳遞給執(zhí)行單元130。
在步驟1603,解碼器202啟動執(zhí)行單元130去執(zhí)行適當(dāng)?shù)姆纸M移位操作。解碼器202還通過內(nèi)部總線170傳遞數(shù)據(jù)元素長度、移位操作類型及移位方向(對于邏輯移位)。
在步驟1610,數(shù)據(jù)元素的長度確定下面要執(zhí)行哪一步驟。如果數(shù)據(jù)元素的長度是8位(字節(jié)數(shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟1612。然而,如果分組數(shù)據(jù)中的數(shù)據(jù)元素的長度為16位(字?jǐn)?shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟1614。在一個實施例中,只支持8位與16位數(shù)據(jù)元素長度的分組移位。然而,在另一實施例中,也支持32位數(shù)據(jù)元素長度的分組移位。
假定數(shù)據(jù)元素的長度為8位,便執(zhí)行步驟1612。在步驟1612中,執(zhí)行下述操作。將Source1位7至0移位移位計數(shù)(Source2位63至0)生成Result位7至0。Source1位15至8移位移位計數(shù)生成Result位15至8。將Source1位23至16移位移位計數(shù)生成Result位23至16。將Source1位31至24移位移位計數(shù)生成Result位31至24。將Source1位39至32移位移位計數(shù)生成Result位39至32。將Source1位47至40移位移位計數(shù)生成Result位47至40。將Source1位55至48移位移位計數(shù)生成Result位55至48。將Source1位63至56移位移位計數(shù)生成Result位63至56。
假定數(shù)據(jù)元素的長度為16位,便執(zhí)行步驟1614。在步驟1614中執(zhí)行下述操作。將Source1位15至0移位移位計數(shù)生成Result位15至0。將Source1位31至16移位移位計數(shù)生成Result位31至16。將Source1位47至32移位移位計數(shù)生成Result位47至32。將Source1位63至48移位移位計數(shù)生成Result位63至48。
在一個實施例中,步驟1612的移位是同時執(zhí)行的。然而,在另一實施例中,這些移位是串行執(zhí)行的。在另一實施例中這些移位中一些是同時執(zhí)行的而一些是串行執(zhí)行的。這一討論同樣適用于步驟1614的移位。
在步驟1620,將Result存儲在DEST寄存器中。
表19說明字節(jié)分組算術(shù)向右移位操作的寄存器表示。第一行的位為Source1的分組數(shù)據(jù)表示。第二行的位為Source2的數(shù)據(jù)表示。第三行的位為Result的分組數(shù)據(jù)表示。各數(shù)據(jù)元素位下面的數(shù)字為數(shù)據(jù)元素號。例如,Source1數(shù)據(jù)元素3為100000002。
表19表20說明分組字節(jié)數(shù)據(jù)上的分組邏輯向右移位操作的寄存器表示 表20表21說明分組字節(jié)數(shù)據(jù)上的分組邏輯向左移位操作的寄存器表示。
表21分組數(shù)據(jù)移位電路在一個實施例中,在與分解的數(shù)據(jù)上的單個移位操作相同數(shù)目的時鐘周期中可在多個數(shù)據(jù)元素上出現(xiàn)移位操作。為了達(dá)到在相同數(shù)目的時鐘周期中執(zhí)行,采用了并行性。即指示寄存器同時在數(shù)據(jù)元素上執(zhí)行移位操作,下面對此作更詳細(xì)的討論。
圖17說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)的各個字節(jié)上執(zhí)行分組移位的電路。圖17示出經(jīng)修改的字節(jié)片移位電路、字節(jié)片級i 1799的使用。各字節(jié)片(除最高位數(shù)據(jù)元素字節(jié)片外)包含一個移位單元及位控制。最高位數(shù)據(jù)元素字節(jié)片只需一個移位單元。
移位單元i 1711及移位單元i+1 1771各允許將來自Source1的8位移位該移位計數(shù)。在一個實施例中,各移位單元象已知的8位移位電路那樣操作。各移位單元具有一個Source1輸入、一個Source2輸入、一個控制輸入、一個下一級信號、一個上一級信號及一個結(jié)果輸出。因此,移位單元i 1711具有Source1i 1731輸入、Source2[63∶0]1733輸入、控制i 1701輸入、下一級i 1713信號、上一級i 1712輸入及存儲在結(jié)果寄存器i 1751中的結(jié)果。因此,移位單元i+1 1771具有Source1i+1 1732輸入、Source2[63∶0]1733輸入、控制i+1 1702輸入、下一級i+1 1773信號、上一級i+1 1772輸入及存儲在結(jié)果寄存器i+1 1752中的結(jié)果。
Source1輸入通常是Source1的一個8位部分。8位表示數(shù)據(jù)元素的最小類型,一個分組字節(jié)數(shù)據(jù)元素。Source2輸入表示移位計數(shù)。在一個實施例中,各移位單元從Source2[63∶0]1733接收相同的移位計數(shù)。操作控制1700傳輸控制信號啟動各移位單元執(zhí)行要求的移位。控制信號是從移位類型(算術(shù)/邏輯)及移位方向確定的。下一級信號是從該移位單元的位控制接收的。取決于移位的方向(左/右),在下一級信號上移位單元將最高位移出/進(jìn)。類似地,取決于移位的方向(右/左),各移位單元在上一級信號上將最低位移出/進(jìn)。上一級信號是從前一級的位控制單元接收的。結(jié)果輸出表示移位單元在其上操作的Source1的部分上的移位操作的結(jié)果。
位控制i 1720是從操作控制1700通過分組數(shù)據(jù)啟動i 1706啟動的。位控制i 1720控制下一級i 1713及上一級i+1 1772。例如,假定移位單元i 1711負(fù)責(zé)Source1的8個最低位,而移位單元i+1 1771負(fù)責(zé)Source1的下一個8位。如果執(zhí)行在分組字節(jié)上的移位,位控制i1720將不允許來自移位單元i+1 1771的最低位與移位單元i 1711的最高位連通。然而,執(zhí)行分組字上的移位時,則位控制i 1720將允許來自移位單元i+1 1771的最低位與移位單元i 1711的最高位連通。
例如,在表22中,執(zhí)行分組字節(jié)算術(shù)向右移位。假定移位單元i+11771在數(shù)據(jù)元素1上操作,而移位單元i 1711在數(shù)據(jù)元素0上操作。移位單元i+1 1771將其最低位移出。然而操作控制1700將導(dǎo)致位控制i 1720停止從上一級i+1 1721接收的該位傳播到下一級i 1713。反之,移位單元i 1711以符號位填充最高階位Source1[7]。
表22然而,如果執(zhí)行分組字算術(shù)移位,則將移位單元i+1 1771的最低位傳遞給移位單元i 1711的最高位。表23示出這一結(jié)果。這一傳遞對于分組雙字移位同樣允許。
表23各移位單元可選地耦合在結(jié)果寄存器上。結(jié)果寄存器臨時存儲移位操作的結(jié)果直到可將整個結(jié)果Result[63∶0]1760傳輸給DEST寄存器為止。
對于一個完整的64位分組移位電路,使用8個移位單元及7個位控制單元。這一電路也能用來執(zhí)行64位非分組數(shù)據(jù)上的移位,從而使用同一電路來執(zhí)行非分組移位操作與分組移位操作。
在指令集中包含上述移位操作的優(yōu)點上述分組移位指令導(dǎo)致Source1的各元素移位指定的移位計數(shù)。通過在指令集中加入這一指令,便可使用單一指令移位一個分組數(shù)據(jù)的各元素。反之,不支持這一操作的先有技術(shù)通用處理器必須執(zhí)行許多指令來分解Source1,單個地移位各分解的數(shù)據(jù)元素,然后將結(jié)果組裝成分組數(shù)據(jù)格式供進(jìn)一步分組處理。
傳送操作傳送操作向或從寄存器209傳送數(shù)據(jù)。在一個實施例中,SRC2 603為包含源數(shù)據(jù)的地址而DEST 605則是數(shù)據(jù)要傳送到的地址。在這一實施例中,不使用SRC1 602。在另一實施例中,SRC1 602等于DEST 605。
為了說明傳送操作的目的,將寄存器與存儲單元區(qū)分開。寄存器在寄存器文件150中而存儲器則可以是諸如在高速緩沖存儲器160、主存儲器104、ROM 106、數(shù)據(jù)存儲設(shè)備107中。
傳送操作可將數(shù)據(jù)從存儲器傳送到寄存器209,從寄存器209到存儲器,及從寄存器209中的一個寄存器到寄存器209中的第二寄存器。在一個實施例中,分組數(shù)據(jù)是存儲在與存儲整數(shù)數(shù)據(jù)不同的寄存器中的。在這一實施例中,傳送操作能將數(shù)據(jù)從整數(shù)寄存器201傳送到寄存器209。例如,在處理器109中,如果分組數(shù)據(jù)存儲在寄存器209中而整數(shù)數(shù)據(jù)存儲在整數(shù)寄存器201中,則傳送指令能用來將數(shù)據(jù)從整數(shù)寄存器201傳送到寄存器209,反之亦然。
在一個實施例中,當(dāng)為傳送指定了一個存儲器地址時,在該存儲單元的8個字節(jié)數(shù)據(jù)(該存儲單元包含最低字節(jié))被加載到寄存器209中的一個寄存器或從該寄存器存儲到指定存儲器單元中。當(dāng)指定寄存器209中的一個寄存器時,便將該寄存器的內(nèi)容傳送到或加載自寄存器209中的第二寄存器或者從第二寄存器向指定寄存器加載。如果整數(shù)寄存器201的長度為64位,并指定了一個整數(shù)寄存器,則將該整數(shù)寄存器中的8個字節(jié)數(shù)據(jù)加載到寄存器209中的寄存器或從該寄存器存儲到指定的整數(shù)寄存器中。
在一個實施例中,整數(shù)是表示為32位的。在執(zhí)行從寄存器209到寄存器201的傳送操作時,則只將分組數(shù)據(jù)的低32位傳送到指定的整數(shù)寄存器。在一個實施例中,將高階32位變成0。類似地,當(dāng)執(zhí)行從整數(shù)寄存器201到寄存器209的傳送時,只加載寄存器209中的一個寄存器的低32位。在一個實施例中,處理器109支持寄存器209中的寄存器與存儲器之間的32位傳送操作。在另一實施例中,只在分組數(shù)據(jù)的高階32位上執(zhí)行只有32位的傳送。
組裝操作在本發(fā)明的一個實施例中,SRC1 602寄存器包含數(shù)據(jù)(Source1),SRC2 603寄存器包含數(shù)據(jù)(Source2),而DEST 605寄存器將包含操作的結(jié)果數(shù)據(jù)(Result)。這便是,將Source1的部分與Source2的部分組裝在一起生成Result。
在一個實施例中,組裝操作通過將源分組字(或雙字)的低階字節(jié)(或字)組裝進(jìn)Result的字節(jié)(或字)中而將分組字(或雙字)轉(zhuǎn)換成分組字節(jié)(或字)。在一個實施例中,組裝操作將4個分組字轉(zhuǎn)換成分組雙字。這一操作可選擇地以帶符號數(shù)據(jù)執(zhí)行。此外,這一操作可以選擇地以飽和執(zhí)行。在一個替代實施例中,加入了在各數(shù)據(jù)元素的高階部分上操作的附加的組裝操作。
圖18為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行組裝操作的方法的流程圖。
在步驟1801,解碼器202解碼處理器109接收的控制信號207。從而,解碼器202解碼出適當(dāng)?shù)慕M裝操作的操作碼;寄存器209中的SRC1 602、SRC2 603及DEST 605地址;飽和/不飽和,帶符號/無符號及分組數(shù)據(jù)中的數(shù)據(jù)元素長度。如上所述,SRC1 602(或SRC2603)可用作DEST 605。
在步驟1802,解碼器202通過內(nèi)部總線170存取寄存器文件150中給定SRC1 602與SRC2 603地址的寄存器209。寄存器209向執(zhí)行單元130提供存儲在SRC1 602寄存器中的分組數(shù)據(jù)(Source1)及存儲在SRC2 603寄存器中的分組數(shù)據(jù)(Source2)。即寄存器209通過內(nèi)部總線170將分組數(shù)據(jù)傳遞給執(zhí)行單元130。
在步驟1803,解碼器202啟動執(zhí)行單元130去執(zhí)行適當(dāng)?shù)慕M裝操作。解碼器202還通過內(nèi)部總線170傳遞飽和及Source1和Source2中的數(shù)據(jù)元素的長度。可選用飽和來使結(jié)果數(shù)據(jù)元素中的數(shù)據(jù)的值成為最大。如果Source1或Source2中的數(shù)據(jù)元素的值大于或小于Result的數(shù)據(jù)元素所能表示的值的范圍,則將對應(yīng)的結(jié)果數(shù)據(jù)元素設(shè)定在其最高或最低值上。例如,如果Source1與Source2的字?jǐn)?shù)據(jù)元素中的帶符號值小于0x80(或?qū)τ陔p字0x8000),則將結(jié)果字節(jié)(或字)數(shù)據(jù)元素箝位到0x80(或?qū)τ陔p字0x8000)上。如果Source1與Source2的字?jǐn)?shù)據(jù)元素中的帶符號值大于0x7F(或?qū)τ陔p字0x7FFF),則將結(jié)果字節(jié)(或字)數(shù)據(jù)元素箝位到0x7F(或0x7FFF)上。
在步驟1810,數(shù)據(jù)元素的長度確定下面要執(zhí)行哪一步驟。如果數(shù)據(jù)元素的長度為16位(分組字402數(shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟1812。然而,如果分組數(shù)據(jù)中的數(shù)據(jù)元素的長度為32位(分組雙字403數(shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟1814。
假定源數(shù)據(jù)元素的長度為16位,便執(zhí)行步驟1812。在步驟1812中,執(zhí)行以下操作。Source1位7至0為Result位7至0。Source1位23至16為Result位15至8。Source1位39至32為Result位23至16。Source1位63至56為Result位31至24。Source2位7至0為Result位39至32。Source2位23至16為Result位47至40。Source2位39至32為Result位55至48。Source2位63至56為Result位31至24。如果設(shè)定飽和,則測試各字的高階位來確定是否應(yīng)箝位Result數(shù)據(jù)元素。
假定源數(shù)據(jù)元素的長度為32位,便執(zhí)行步驟1814。在步驟1814中,執(zhí)行下述操作。Source1位15至0為Result位15至0。Source1位47至32為Result位31至16。Source2位15至0為Result位47至32。Source2位47至32為Result位63至48。如果設(shè)定了飽和,則測試各雙字的高階位來確定是否應(yīng)將Result數(shù)據(jù)元素箝位。
在一個實施例中,同時執(zhí)行步驟1812的組裝。然而在另一實施例中,串行執(zhí)行這一組裝。在另一實施例中,一些組裝是同時執(zhí)行的而一些是串行執(zhí)行的。這一討論也適用于步驟1814的組裝。
在步驟1820,將Result存儲在DEST 605寄存器中。
表24說明組裝字操作的寄存器表示。加下標(biāo)的Hs與Ls分別表示Source1與Source2中的各16位數(shù)據(jù)元素的高與低階位。例如AL表示Source1中的數(shù)據(jù)元素A的低階8位。
表24表25說明組裝雙字操作的寄存器表示,其中加下標(biāo)的Hs與Ls分別表示Source1與Source2中的各32位數(shù)據(jù)元素的高低階位。
表25組裝電路在本發(fā)明的一個實施例中,為了達(dá)到組裝操作的高效執(zhí)行,采用了并行性。圖19a與19b示出按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行組裝操作的電路。該電路能有選擇地執(zhí)行帶飽和的組裝操作。
圖19a與19b的電路包括操作控制1900、結(jié)果寄存器1952、結(jié)果寄存器1953、8個16位到8位測試飽和電路及4個32位到16位測試飽和電路。
操作控制1900接收來自解碼器202的信息來啟動組裝操作。操作控制1900使用飽和值為各測試飽和電路啟動飽和測試。如果源分組數(shù)據(jù)的長度為字分組數(shù)據(jù)503,則操作控制1900設(shè)定輸出使能1931。這便啟動結(jié)果寄存器1952的輸出。如果源分組數(shù)據(jù)的長度為雙字分組數(shù)據(jù)504,則操作控制1900設(shè)定輸出使能1932。這便啟動輸出寄存器1953的輸出。
各測試飽和電路能有選擇地測試飽和。如果禁止飽和測試,則各測試飽和電路只將低階位傳遞到結(jié)果寄存器中對應(yīng)的位置上。如果允許測試飽和,則各測試飽和電路測試高階位來確定是否應(yīng)箝位結(jié)果。
測試飽和1910至測試飽和1917具有16位輸入與8位輸出。8位輸出為輸入的低8位,或可選地是一個箝位的值(0x80、0x7F、或0xFF)。測試飽和1910接收Source1位15至0并向結(jié)果寄存器1952輸出位7至0。測試飽和1911接收Source1位31至16并向結(jié)果寄存器1952輸出位15至8。測試飽和1912接收Source1位47至32并向結(jié)果寄存器1952輸出位23至16。測試飽和1913接收Source1位63至48并向結(jié)果寄存器1952輸出位31至24。測試飽和1914接收Source2位15至0并向結(jié)果寄存器1952輸出位39至32。測試結(jié)果1915接收Source2位31至16并向結(jié)果寄存器1952輸出位47至40。測試飽和1916接收Source2位47至32并向結(jié)果寄存器1952輸出位55至48。測試飽和1917接收Source2位63至48并向結(jié)果寄存器1952輸出位63至56。
測試飽和1920至測試飽和1923具有32位輸入與16位輸出。16位輸出為輸入的低16位,或可選地為一個箝位的值(0x8000、0x7FFF或0xFFFF)。測試飽和1920接收Source1位31至0并為結(jié)果寄存器1953輸出位15至0。測試飽和1921接收Source1位63至32并為結(jié)果寄存器1953輸出位31至16。測試飽和1922接收Source2位31至0并為結(jié)果寄存器1953輸出位47至32。測試飽和1923接收Source2位63至32并為結(jié)果寄存器1953輸出位63至48。
例如,在表26中,執(zhí)行不帶飽和的無符號字組裝。操作控制1900將啟動結(jié)果寄存器1952輸出結(jié)果[63∶0]1960。
表26然而,如果執(zhí)行不帶飽和的無符號雙字組裝,操作控制1900將啟動結(jié)果寄存器1953輸出結(jié)果[63∶0]1960。表27示出這一結(jié)果。
表27在指令集中包含上述組裝操作的優(yōu)點上述組裝指令組裝來自Source1與Source2中各數(shù)據(jù)元素的預(yù)定數(shù)目的位來生成Result。以這一方式,處理器109能以少到先有技術(shù)通用處理器中所需的指令一半的指令中組裝數(shù)據(jù)。例如,從四個32位數(shù)據(jù)元素生成包含4個16位數(shù)據(jù)元素的結(jié)果只需一條指令(與兩條指令相對照),如下面所示Pack,High Source1,Source2
源1源2結(jié)果1表28典型的多媒體應(yīng)用組裝大量數(shù)據(jù)。從而,通過將組裝這些數(shù)據(jù)所需的指令數(shù)目減少到一半,便提高了這些多媒體應(yīng)用的性能。
分解操作分解操作在一個實施例中,分解操作交錯兩個源分組數(shù)據(jù)的低位分組字節(jié)、字或雙字以生成結(jié)果分組字節(jié)、字或雙字。這里將這一操作稱作分解低操作。在另一實施例中,分解操作也可能交錯高階元素(稱作分解高操作)。
圖20為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分解操作的方法的流程圖。
首先執(zhí)行步驟2001與2002。在步驟2003,解碼器202啟動執(zhí)行單元130去執(zhí)行分解操作。解碼器202通過內(nèi)部總線170傳遞Source1與Source2中的數(shù)據(jù)元素的長度。
在步驟2010,數(shù)據(jù)元素的長度確定下面要執(zhí)行哪一步驟。如果數(shù)據(jù)元素的長度為8位(分組字節(jié)401數(shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟2012。然而,如果分組數(shù)據(jù)中的數(shù)據(jù)元素的長度為16位(分組字402數(shù)據(jù))則執(zhí)行單元130執(zhí)行步驟2014。然而,如果分組數(shù)據(jù)中的數(shù)據(jù)元素的長度為32位(分組雙字503數(shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟2016。
假定源數(shù)據(jù)元素長度為8位,便執(zhí)行步驟2012。在步驟2012中,執(zhí)行下述操作。Source1位7至0為Result位7至0。Source2位7至0為Result位15至8。Source1位15至8為Result位23至16。Source2位15至8為Result位31至24。Source1位23至16為Result位39至32。Source2位23至16為Result位47至40。Source1位31至24為Result位55至48。Source2位31至24為Result位63至56。
假定源數(shù)據(jù)元素的長度為16位,則執(zhí)行步驟2014。在步驟2014中,執(zhí)行下述操作。Source1位15至0為Result位15至0。Source2位15至0為Result位31至16。Source1位31至16為Result位47至32。Source2位31至16為Result位63至48。
假定源數(shù)據(jù)元素長度為32位,則執(zhí)行步驟2016。在步驟2016中,執(zhí)行下述操作。Source1位31至0為Result位31至0。Source2位31至0為Result位63至32。
在一個實施例中,同時執(zhí)行步驟2012的分解。然而,在另一實施例中,串行執(zhí)行這一分解。在另一實施例中,一些分解是同時執(zhí)行的而一些則是串行執(zhí)行的。這一討論也適用于步驟2014與步驟2016的分解。
在步驟2020,將Result存儲在DEST 605寄存器中。
表29說明分解雙字操作(各數(shù)據(jù)元素A0-1及B0-1包含32位)的寄存器表示。
表29表30說明分解字操作(各數(shù)據(jù)元素A0-3及B0-3包含16位)的寄存器表示。
表30表31說明分解字節(jié)操作(各數(shù)據(jù)元素A0-7及B0-7包含8位)的寄存器表示。
表31分解電路圖21示出按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分解操作的電路。圖21的電路包含操作控制電路2100、結(jié)果寄存器2152、結(jié)果寄存器2153及結(jié)果寄存器2154。
操作控制2100接收來自解碼器202的信息以啟動分解操作。如果源分組數(shù)據(jù)的長度為字節(jié)分組數(shù)據(jù)502,則操作控制2100設(shè)定輸出使能2132。這便啟動結(jié)果寄存器2152的輸出。如果源分組數(shù)據(jù)的長度為字分組數(shù)據(jù)503,則操作控制2100設(shè)置輸出使能2133。這便啟動輸出寄存器2153的輸出。如果源分組數(shù)據(jù)的長度為雙字分組數(shù)據(jù)504,則操作控制2100設(shè)置輸出使能2134。這便啟動輸出結(jié)果寄存器2154的輸出。
結(jié)果寄存器2152具有下述輸入。Source1位7至0為結(jié)果寄存器2152的位7至0。Source2位7至0為結(jié)果寄存器2152的位15至8。Source1位15至8為結(jié)果寄存器2152的位23至16。Source2位15至8為結(jié)果寄存器2152的位31至24。Source1位23至16為結(jié)果寄存器2152的位39至32。Source2位23至16為結(jié)果寄存器2152的位47至40。Source1位31至24為結(jié)果寄存器2152的位55至48。Source2位31至24為結(jié)果寄存器2152的位63至56。
結(jié)果寄存器2153具有下述輸入。Source1位15至0為結(jié)果寄存器2153的位15至0。Source2位15至0為結(jié)果寄存器2153的位31至16。Source1位31至16為結(jié)果寄存器2153的位47至32。Source2位31至16為結(jié)果寄存器2153的位63至48。
結(jié)果寄存器2154具有下述輸入。Source1位31至0為結(jié)果寄存器2154的位31至0。Source2位31至0為結(jié)果寄存器2154的位63至32。
例如,在表32中,執(zhí)行了分解字操作。操作控制2100將啟動結(jié)果寄存器2153輸出結(jié)果[63∶0]2160。
表32然而,如果執(zhí)行分解雙字,操作控制2100將啟動結(jié)果寄存器2154輸出Result[63∶0]2160。表33示出這一結(jié)果。
表33在指令集中包含上述分解指令的優(yōu)點通過將上述分解指令加入指令集中,可以交錯或者分解分組數(shù)據(jù)。這一分解指令通過使Source2中的數(shù)據(jù)元素全為0,便能用來分解分組數(shù)據(jù)。分解字節(jié)的實例示出在表34a中。
表34a同一分解指令可用來交錯數(shù)據(jù),如表34b中所示。在多種多媒體算法中交錯是有用的。例如,交錯可用于轉(zhuǎn)置矩陣及插值象素。
表34b從而,通過在處理器109支持的指令集中加入這一分解指令,處理器109更為通用并能在更高的性能級上執(zhí)行需要這一功能的算法。
個數(shù)計算個數(shù)計算本發(fā)明的一個實施例允許要在分組數(shù)據(jù)上執(zhí)行的個數(shù)計數(shù)操作。即,本發(fā)明為第一分組數(shù)據(jù)的各數(shù)據(jù)元素生成一個結(jié)果數(shù)據(jù)元素。各結(jié)果數(shù)據(jù)元素表示在第一分組數(shù)據(jù)的各對應(yīng)數(shù)據(jù)元素中置位的位數(shù)。在一個實施例中,計數(shù)置位成1的總位數(shù)。
表35a說明在分組數(shù)據(jù)上的個數(shù)計數(shù)操作的寄存器表示。第一行的位是Source1分組數(shù)據(jù)的分組數(shù)據(jù)表示。第二行的位是Result分組數(shù)據(jù)的分組數(shù)據(jù)表示。各數(shù)據(jù)元素位下面的數(shù)據(jù)字為數(shù)據(jù)元素號。例如,Source1數(shù)據(jù)元素0為10001111100010002。因此,如果數(shù)據(jù)元素長度為16位(字?jǐn)?shù)據(jù)),并且執(zhí)行個數(shù)計數(shù)操作,執(zhí)行單元130生成所示的Result分組數(shù)據(jù)。
表35a在另一實施例中,個數(shù)計數(shù)是在8位數(shù)據(jù)元素上執(zhí)行的。表35b說明在具有8個8位分組數(shù)據(jù)元素的分組數(shù)據(jù)上的個數(shù)計數(shù)的寄存器表示。
表35b在另一實施例中,個數(shù)計數(shù)是在32位數(shù)據(jù)元素上執(zhí)行的。表35c說明在具有兩個32位分組數(shù)據(jù)元素的分組數(shù)據(jù)上的個數(shù)計數(shù)的寄存器表示。
表35c個數(shù)計數(shù)也能在64位整數(shù)數(shù)據(jù)上執(zhí)行。即,求出64位數(shù)據(jù)中置位成1的總位數(shù)。表35d說明在64位整數(shù)數(shù)據(jù)上的個數(shù)計數(shù)的寄存器表示。
表35d執(zhí)行個數(shù)計數(shù)的方法圖22為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行個數(shù)計數(shù)操作的方法的流程圖。在步驟2201,解碼器202響應(yīng)一個控制信號207的接收,解碼該控制信號207。在一個實施例中,控制信號207是通過總線101供給的。在另一實施例中,控制信號207是高速緩沖存儲器160供給的。從而,解碼器202解碼出個數(shù)計數(shù)的操作碼、以及寄存器209中的SRC1 602及DEST 605地址。注意在當(dāng)前本發(fā)明的實施例中不使用SRC2 603。在這一實施例中也不使用飽和/不飽和、帶符號/無符號及分組數(shù)據(jù)中的數(shù)據(jù)元素長度。在本發(fā)明的當(dāng)前實施例中,只支持16位數(shù)據(jù)元素長度的分組加法。然而,熟悉本技術(shù)的人員會理解能在具有8個分組字節(jié)數(shù)據(jù)元素或兩個分組雙字?jǐn)?shù)據(jù)元素的分組數(shù)據(jù)上執(zhí)行個數(shù)計數(shù)。
在步驟2202,解碼器202通過內(nèi)部總線170存取寄存器文件150中給出SRC1 602地址的寄存器209。寄存器209向執(zhí)行單元130提供存儲在這一地址上的寄存器中的分組數(shù)據(jù)Source1,即寄存器209通過內(nèi)部總線170將分組數(shù)據(jù)傳遞給執(zhí)行單元130。
在步驟2130,解碼器202啟動執(zhí)行單元130去執(zhí)行個數(shù)計數(shù)操作。在一個替代實施例中,解碼器202還通過內(nèi)部總線170傳遞分組數(shù)據(jù)元素長度。
在步驟2205,假定數(shù)據(jù)元素長度為16位,則執(zhí)行單元130求出Source1位15至0中置位的位的總數(shù),產(chǎn)生Result分組數(shù)據(jù)的位15至0。與這一求總數(shù)并行,執(zhí)行單元130求Source1位31至16的總數(shù),產(chǎn)生Result分組數(shù)據(jù)的位31至位16。與這些總數(shù)的生成并行,執(zhí)行單元130總計Source1的位47至位32,產(chǎn)生Result分組數(shù)據(jù)的位47至位32。與這些總計的生成并行,執(zhí)行單元130總計Source1的位63至位48,產(chǎn)生Result分組數(shù)據(jù)的位63至位48。
在步驟2206,解碼器202啟動寄存器209中帶有目的地寄存器的DEST 605地址的寄存器。從而,將Result分組數(shù)據(jù)存儲在由DEST 605尋址的寄存器中。
在一個數(shù)據(jù)元素上執(zhí)行個數(shù)計數(shù)的方法圖23為說明按照本發(fā)明的一個實施例在一個分組數(shù)據(jù)的一個數(shù)據(jù)元素上執(zhí)行個數(shù)計數(shù)操作及生成一個結(jié)果分組數(shù)據(jù)的單個結(jié)果數(shù)據(jù)元素的方法。在步驟2310a,從Source1位15、14、13與12生成一個列和CSum 1a及列進(jìn)位CCarry 1a。在步驟2310b,從Source1位11、10、9與8生成列和CSum1b及列進(jìn)位CCarry1b。在步驟2310C從Source1位7、6、5與4生成列和CSum1c及列進(jìn)位CCarry1c。在步驟2310d,從Source1位3、2、1與0生成列和CSum1d及列進(jìn)位CCarry1d。在本發(fā)明的一個實施例中,步驟2310a-d是并行執(zhí)行的。在步驟2320a,從CSum1a、CCarry 1a、CSum1b與CCarry 1b生成列和CSum2a及列進(jìn)位CCarry 2b。在步驟2320b,從CSum1c、CCarry1、CSum1d與CCarry1d生成列和CSum2b及列進(jìn)位CCarry2b。在本發(fā)明的一個實施例中,步驟2320a-b是并行執(zhí)行的。在步驟2330,從CSumm2a、CCarry 2a、CSum2b及CCarry 2b生成列和CSum3及列進(jìn)位CCarry3。在步驟2340,從CSum3與CCarry3生成Result結(jié)果。在一個實施例中,Result是以16位表示的。在這一實施例中,由于只需要位4至位0來表示Source1中置位的位的最大數(shù)目,將位15至5設(shè)定為0。Source1的最大位數(shù)為16。這出現(xiàn)在Source1等于11111111111111112時。Result將為16并用00000000000100002表示。
從而,為了為64位分組數(shù)據(jù)上的個數(shù)計數(shù)操作計算4個結(jié)果數(shù)據(jù)元素,要為分組數(shù)據(jù)中的每一個數(shù)據(jù)元素執(zhí)行圖23的步驟。在一個實施例中,4個16位結(jié)果數(shù)據(jù)元素是并行計算的。
執(zhí)行個數(shù)計數(shù)的電路圖24說明按照本發(fā)明的一個實施例在具有4個字?jǐn)?shù)據(jù)元素的分組數(shù)據(jù)上執(zhí)行個數(shù)計數(shù)操作的電路。圖25說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)的一個字?jǐn)?shù)據(jù)元素上執(zhí)行個數(shù)計數(shù)操作的詳細(xì)電路。
圖24示出一個電路,其中Source1總線2401通過Source1IN2406a-d將信息信號帶到popcnt電路2408a-d。從而popcnt電路2408a求出Source1的位16至位0中置位的位的總數(shù),生成Result的位15至位0。popcnt電路2408b求出Source1的位31至位16中置位的位的總數(shù),生成Result的位31至位16。popcnt電路2408c求出Source1的位47至位32中置位的位的總數(shù),生成Result的位47至位32。popcnt電路2408d求出Source1的位63至位48中的置位的位的總數(shù),生成Result的位63至位48。啟動2404a-d通過控制2403從操作控制2410接收啟動popcnt電路2408a-d執(zhí)行個數(shù)計數(shù)操作的控制信號,及將Result放置在Result總線2409上。給予了上面描述及圖1-6b及22-25中的描述與說明,熟悉本技術(shù)的人員將能建立這一電路。
popcnt電路2408a-d通過結(jié)果輸出2407a-d將分組個數(shù)計數(shù)操作的結(jié)果信息傳遞到Result總線2409上。然后將這一結(jié)果信息存儲在DEST 605寄存器地址所指定的整數(shù)寄存器中。
在一個數(shù)據(jù)元素上執(zhí)行個數(shù)計數(shù)的電路圖25示出在分組數(shù)據(jù)的一個字?jǐn)?shù)據(jù)元素上執(zhí)行個數(shù)計數(shù)操作的詳細(xì)電路。具體地,圖25示出popcnt電路2408a的一部分。為了達(dá)到采用個數(shù)計數(shù)操作的應(yīng)用的最大性能,應(yīng)在一個時鐘周期內(nèi)完成這個操作。因此,假定存取寄存器及存儲結(jié)果需要時鐘周期的一定百分比,圖24的電路在一個時鐘周期大約80%的時間內(nèi)完成其操作。這一電路具有允許處理器109在一個時鐘周期中在四個16位數(shù)據(jù)元素上執(zhí)行個數(shù)計數(shù)操作的優(yōu)點。
popcnt電路2408a采用4->2進(jìn)位保留加法器(除非另有指定,CSA將指4->2進(jìn)位保留加法器),popcnt電路2408a-d中可能采用的4->2進(jìn)位保留加法器是本技術(shù)中眾所周知的。4->2進(jìn)位保留加法器為將4個操作數(shù)相加得出兩個和的加法器。由于popcnt電路2408a中的個數(shù)計數(shù)操作包含16位,第一級包含4個4->2進(jìn)位保留加法器。這四個4->2進(jìn)位保留加法器將16個一位操作數(shù)變換成8個2位和。第二級將8個2位和變換成4個3位和,而第三級將4個3位和變換成兩個4位和。然后一個4位全加法器將兩個四位和相加生成最終結(jié)果。
雖然采用了4->2進(jìn)位保留加法器,替代實施例中可采用3->2進(jìn)位保留加法器。另外,也可使用若干個全加法器;然而,這種配置不能象圖25中所示的實施例那樣快地提供結(jié)果。
Source1IN15-02406a攜帶Source1的位15至位0。第一個四位耦合在4->2進(jìn)位保留加法器(CSA 2510a)的輸入上。下面的四位耦合在CSA 2510b的輸入上。再下面的四位耦合在CSA 2510c的輸入上。最后四位耦合在CSA 2510d的輸入上。各CSA 2510a-d生成兩個2位輸出。將CSA 2510a的兩個2位輸出耦合到CSA 2520a的兩個輸入上。將CSA 2510b的兩個2位輸出耦合到CSA 2520a的其它兩個輸入上。將CSA 2510c的兩個2位輸出耦合到CSA 2520b的兩個輸入上。將CSA 2510d的兩個2位輸出耦合到CSA 2520b其余兩個輸入上。各CSA 2520a-b生成兩個3位輸出。將2520a的兩個3位輸出耦合到CSA2530的兩個輸入上。將2520b的兩個3位輸出耦合到CSA 2530的其余兩個輸入上。CSA 2530生成兩個4位輸出。
將這些兩個4位輸出耦合到全加法器(FA 2550)的兩個輸入上。FA 2550將兩個4位輸入相加并傳遞Result輸出2407a的位3至位0作為該兩個4位輸入相加的總和。FA 2550通過進(jìn)位輸出(C0 2552)生成Result輸出2407a的位4。在一個替代實施例中,采用5位全加法器來生成Result輸出2407a的位4至位0。在任一情況中,都將Result輸出2407a的位15至位5固定在0上。同樣,將對全加法器的任何進(jìn)位輸入固定在0上。
雖然在圖25中未示出,熟悉本技術(shù)的人員會理解可將Result輸出2407a多路復(fù)用或緩沖存儲到Result總線2409上。多路復(fù)用器受到使能2404a的控制。這將允許其它執(zhí)行單元電路將數(shù)據(jù)寫到Result總線2409上。
在指令集中加入上述個數(shù)計數(shù)操作的優(yōu)點上述個數(shù)計數(shù)指令計數(shù)諸如Source1等分組數(shù)據(jù)的各數(shù)據(jù)元素中置位的位的數(shù)目。從而,通過在指令集中加入這一指令,便可在一條單一指令中在分組數(shù)據(jù)上執(zhí)行個數(shù)計數(shù)操作。相反,先有技術(shù)通用處理器必須執(zhí)行許多指令來分解Source1,在各分解的數(shù)據(jù)元素上單個地執(zhí)行該功能,然后組裝結(jié)果供進(jìn)一步分組處理。
從而,通過在處理器109支持的指令集中加入這一個數(shù)計數(shù)指令,便提高了需要這一功能的算法的性能。
邏輯運算邏輯運算在本發(fā)明的一個實施例中,SRC1寄存器包含分組數(shù)據(jù)(Source1),SRC2寄存器包含分組數(shù)據(jù)(Source2),而DEST寄存器將包含在Source1與Source2上執(zhí)行所選擇的邏輯運算的結(jié)果(Result)。例如,如果選擇了邏輯“與”運算,則將Source1與Source2邏輯“與”。
在本發(fā)明的一個實施例中,支持下述邏輯運算邏輯“與”、邏輯“非與”(ANDN)、邏輯“或”及邏輯“異或”(XOR)。邏輯“與”、“或”及“異或”運算是本技術(shù)中眾所周知的。邏輯“非與”(ANDN)運算使Source2與Source1的邏輯“非”進(jìn)行“與”運算。雖然本發(fā)明是關(guān)于這些邏輯運算描述的,其它實施例可實現(xiàn)其它邏輯運算。
圖26為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行若干種邏輯運算的方法的流程圖。
在步驟2601,解碼器202解碼處理器109所接收的控制信號207。從而,解碼器202解碼出適當(dāng)?shù)倪壿嬤\算(即“與”、“非與”、“或”或“異或”)的操作碼;寄存器209中的SRC1 602、SRC2 603及DEST 604地址。
在步驟2602,解碼器202通過內(nèi)部總線170存取寄存器文件150中給出SRC1 602及SRC2 603地址的寄存器209。寄存器209向執(zhí)行單元130提供存儲在SRC1 602寄存器中的分組數(shù)據(jù)(Source1)及存儲在SRC2 603寄存器中的分組數(shù)據(jù)(Source2)。即,寄存器209通過內(nèi)部總線170將分組數(shù)據(jù)傳遞給執(zhí)行單元130。
在步驟2603,解碼器202啟動執(zhí)行單元130去執(zhí)行分組邏輯運算中所選擇的一種。
在步驟2610,分組邏輯運算中所選擇的一種確定下面執(zhí)行哪一步驟。如果選擇了邏輯“與”運算,執(zhí)行單元130執(zhí)行步驟2612;如果選擇了邏輯“非與”運算,執(zhí)行單元130執(zhí)行步驟2613;如果選擇了邏輯“或”運算,執(zhí)行單元130執(zhí)行步驟2614;而如果選擇了邏輯“異或”運算,執(zhí)行單元130執(zhí)行步驟2615。
假定選擇了邏輯“與”運算,便執(zhí)行步驟2612。在步驟2612中,Source1位63至0和Source2位63至0進(jìn)行“與”運算生成Result位63至0。
假定選擇了邏輯“非與”運算,便執(zhí)行步驟2613。在步驟2613中,Source1位63至0和Source2位63至0進(jìn)行“非與”運算生成Result位63至0。
假定選擇了邏輯“或”運算,便執(zhí)行步驟2614。在步驟2614中,Source1位63至0和Source2位63至0進(jìn)行“或”運算生成Result位63至0。
假定選擇了邏輯“異或”運算,便執(zhí)行步驟2615。在步驟2615中,Source1位63至0和Source2位63至0進(jìn)行“異或”運算生成Result位63至0。
在步驟2620,將Result存儲在DEST寄存器中。
表36說明分組數(shù)據(jù)上的邏輯“非與”運算的寄存器表示。第一行的位是Source1的分組數(shù)據(jù)表示。第二行的位是Source2的分組數(shù)據(jù)表示。第三行的位是Result的分組數(shù)據(jù)表示。各數(shù)據(jù)元素位下方的數(shù)字為數(shù)據(jù)元素號。例如,Source1數(shù)據(jù)元素2為11111111000000002。
表36雖然本發(fā)明是相對于在Source1與Source2中的對應(yīng)數(shù)據(jù)元素上執(zhí)行同一邏輯運算描述的,替代實施例可支持允許在逐個元素的基礎(chǔ)上選擇在對應(yīng)的數(shù)據(jù)元素上要執(zhí)行的邏輯運算的指令。
分組數(shù)據(jù)邏輯電路在一個實施例中,能夠在和非分組數(shù)據(jù)上的單一邏輯運算相同數(shù)目的時鐘周期中在多個數(shù)據(jù)元素上出現(xiàn)上述邏輯運算。為了達(dá)到在相同數(shù)目的時鐘周期中的執(zhí)行,采用了并行性。
圖27說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行邏輯運算的電路。操作控制2700控制執(zhí)行邏輯運算的電路。操作控制2700處理控制信號并在控制線2780上輸出選擇信號。這些選擇信號向邏輯運算電路2701傳遞“與”、“非與”、“或”及“異或”運算中選擇的一種。
邏輯運算電路2701接收Source1[63∶0]及Source2[63∶0]并執(zhí)行選擇信號指定的邏輯運算以生成Result。邏輯運算電路2701將Result[63∶0]傳遞給結(jié)果寄存器2731。
在指令集中加入上述邏輯運算的優(yōu)點上述邏輯指令執(zhí)行邏輯“與”、邏輯“非與”、邏輯“或”及邏輯“異或”。這些指令在需要數(shù)據(jù)的邏輯操作的任何應(yīng)用中是有用的。通過在處理器109支持的指令集中加入這些指令,便可以在一條指令中在分組數(shù)據(jù)上執(zhí)行這些邏輯運算。
分組比較分組比較操作在本發(fā)明的一個實施例中,SRC1 602寄存器中包含要比較的數(shù)據(jù)(Source1),SRC2 603寄存器中包含要相對于它進(jìn)行比較的數(shù)據(jù)(Source2),而DEST 605寄存器中將包含比較的結(jié)果(Result)。即,用Source2的各數(shù)據(jù)元素按指定的關(guān)系獨立地與Source1中各數(shù)據(jù)元素比較。
在本發(fā)明的一個實施例中,支持下述比較關(guān)系等于;帶符號的大于;帶符號的大于或等于;無符號大于;或無符號大于或等于。在每對對應(yīng)的數(shù)據(jù)元素中測試這種關(guān)系。例如,Source1[7∶0]大于Source2[7∶0],結(jié)果為Result[7∶0]。如果比較結(jié)果滿足該關(guān)系,則在一個實施例中將Result中的對應(yīng)數(shù)據(jù)元素設(shè)置成全1。如果比較的結(jié)果不滿足該關(guān)系,則將Result中的對應(yīng)數(shù)據(jù)元素設(shè)置成全0。
圖28為說明按照本發(fā)明的一個實施例在分組數(shù)據(jù)上執(zhí)行分組比較操作的方法的流程圖。
在步驟2801,解碼器202解碼處理器109接收的控制信號207。從而,解碼器202解碼出適當(dāng)比較操作的操作碼;寄存器209中的SRC1 602、SRC2 603及DEST 605地址;飽和/不飽和(對比較操作沒有必要),帶符號/無符號及分組數(shù)據(jù)中的數(shù)據(jù)元素的長度。如上所述,SRC1 602(或SRC2 603)可用作DEST 605。
在步驟2802,解碼器202通過內(nèi)部總線170存取寄存器文件150中給定SRC1 602與SRC2 603地址的寄存器209。寄存器209向執(zhí)行單元130提供存儲在SRC1 602寄存器中的分組數(shù)據(jù)(Source1)及存儲在SRC2 603寄存器中的分組數(shù)據(jù)(Source2)。即,寄存器209通過內(nèi)部總線170將分組數(shù)據(jù)傳遞給執(zhí)行單元130。
在步驟2803,解碼器202啟動執(zhí)行單元130去執(zhí)行適當(dāng)?shù)姆纸M比較操作。解碼器202還通過內(nèi)部總線170傳遞數(shù)據(jù)元素的長度及比較操作的關(guān)系。
在步驟2810,數(shù)據(jù)元素的長度確定下面要執(zhí)行的步驟。如果數(shù)據(jù)元素的長度為8位(分組字節(jié)401數(shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟2812。然而,如果分組數(shù)據(jù)中的數(shù)據(jù)元素的長度為16位(分組字402數(shù)據(jù)),則執(zhí)行單元130執(zhí)行步驟2814。在一個實施例中,只支持8位與16位數(shù)據(jù)元素長度的分組比較。然而,在另一實施例中,也支持32位數(shù)據(jù)元素長度的分組比較(分組雙字403)。
假定數(shù)據(jù)元素的長度為8位,則執(zhí)行步驟2812。在步驟2812中,執(zhí)行下述操作。將Source1位7至0對Source2位7至0比較生成Result位7至0。將Source1位15至8對Source2位15至8比較生成Result位15至8。將Source1位23至16對Source2位23至16比較生成Result位23至16。將Source1位31至24對Source2位31至24比較生成Result位31至24。將Source1位39至32對Source2位39至32比較生成Result位39至32。將Source1位47至40對Source2位47至40比較生成Result位47至40。將Source1位55至48對Source2位55至48比較生成Result位55至48。將Source1位63至56對Source2位63至56比較生成Result位63至56。
假定數(shù)據(jù)元素的長度為16位,便執(zhí)行步驟2814。在步驟2814中,執(zhí)行下述操作。將Source1位15至0對Source2位15至0比較生成Result位15至0。將Source1位31至16對Source2位31至16比較生成Result位31至16。將Source1位47至32對Source2位47至32比較生成Result位47至32。將Source1位63至48對Source2位63至48比較生成Result位63至48。
在一個實施例中,步驟2812的比較是同時執(zhí)行的。然而,在另一實施例中,這些比較是串行執(zhí)行的。在另一實施例中,一些比較是同時執(zhí)行的而一些則是串行執(zhí)行的。這一討論也適用于步驟2814中的比較。
在步驟2820,將Result存儲在DEST 605寄存器中。
表37說明分組比較無符號大于操作的寄存器表示。第一行的位是Source1的分組數(shù)據(jù)表示。第二行的位是Source2的數(shù)據(jù)表示。第三行的位是Result的分組數(shù)據(jù)表示。各數(shù)據(jù)元素位下面的數(shù)字是數(shù)據(jù)元素號。例如,Source1數(shù)據(jù)元素3為100000002。
表37
表38說明分組字節(jié)數(shù)據(jù)上的分組比較帶符號大于或等于操作的寄存器表示。
表38分組數(shù)據(jù)比較電路在一個實施例中,在和非分組數(shù)據(jù)上的單個比較操作相同數(shù)目的時鐘周期中能在多個數(shù)據(jù)元素上產(chǎn)生比較操作。為了達(dá)到相同數(shù)目的時鐘周期中的執(zhí)行,采用了并行性。即,同時指示寄存器在數(shù)據(jù)元素上執(zhí)行比較操作。下面更詳細(xì)地討論這一點。
圖29示出按照本發(fā)明的一個實施例在分組數(shù)據(jù)的各個字節(jié)上執(zhí)行分組比較操作的電路。圖29示出經(jīng)過修改的字節(jié)片比較電路、字節(jié)片級i 2999的使用。除了最高位數(shù)據(jù)元素字節(jié)片以外的各字節(jié)片都包含一個比較單元及位控制。最高位數(shù)據(jù)元素字節(jié)片只需一個比較單元。
比較單元i 2911及比較單元i+1 2971各允許來自Source1的8位與來自Source2的對應(yīng)的8位進(jìn)行比較。在一個實施例中,各比較單元象已知的8位比較單元一樣操作。這一已知的8位比較電路包含允許從Source1減去Source2的字節(jié)片電路。處理減法的結(jié)果來確定比較操作的結(jié)果。在一個實施例中,減法結(jié)果包含一個溢出信息。測試這一溢出信息來判定比較操作的結(jié)果是否為真。
各比較單元具有一個Source1輸入、一個Source2輸入、一個控制輸入、一個下一級信號、一個上一級信號及一個結(jié)果輸出。因此,比較單元i 2911具有Source1i2931輸入、Source2i2933輸入、控制i 2901輸入、下一級i 2913信號、上一級i 2912輸入及存儲在結(jié)果寄存器i 2951中的結(jié)果。因此,比較單元i+1 2971具有Source1i+12932輸入、Source2i+12934輸入、控制i+1 2902輸入、下一級i+1 2973信號、上一級i+1 2972輸入及存儲在結(jié)果寄存器i+1 2952中的結(jié)果。
Source1n輸入通常是Source1的一個8位部分。8位表示最小類型的數(shù)據(jù)元素,一個分組字節(jié)401的數(shù)據(jù)元素。Source2輸入是Source2的對應(yīng)8位部分。操作控制2900傳輸控制信號來啟動各比較單元執(zhí)行所要求的比較??刂菩盘柺菑谋容^的關(guān)系(諸如帶符號大于)及數(shù)據(jù)元素的長度(諸如字節(jié)或字)確定的。下一級信號是從該比較單元的位控制接收的。當(dāng)使用大于字節(jié)長度的數(shù)據(jù)元素時,位控制單元有效地組合比較單元。例如,當(dāng)比較字分組數(shù)據(jù)時,第一比較單元與第二比較單元之間的位控制單元將使得這兩個比較單元作為一個16位比較單元工作。類似地,第三與第四比較單元之間的控制單元將使得這兩個比較單元作為一個比較單元工作。這可以繼續(xù)到四個分組字?jǐn)?shù)據(jù)元素。
取決于所要求的關(guān)系及Source1與Source2的值,比較單元通過允許較高階比較單元的結(jié)果向下傳播到較低階比較單元或反過來以執(zhí)行比較。這便是,各比較單元將利用位控制i 2920傳遞的信息來提供比較結(jié)果。如果使用雙字分組數(shù)據(jù),則四個比較單元一起工作以形成用于各數(shù)據(jù)元素的一個32位長的比較單元。各比較單元的結(jié)果輸出表示該比較單元在其上操作的Source1與Source2的部分上的比較操作的結(jié)果。
位控制i 2920是從操作控制2900通過分組數(shù)據(jù)使能i 2906啟動的。位控制i 2920控制下一級i 2913與上一級i+1 2972。例如,假定比較單元i 2911負(fù)責(zé)Source1與Source2的8個最低位,而比較單元i+1 2971負(fù)責(zé)Source1與Source2的下一8位。如果在分組字節(jié)數(shù)據(jù)上執(zhí)行比較,位控制i 2920將不允許來自比較單元i+1 2971的結(jié)果信息傳遞到比較單元i 2911,反之亦然。然而,如果在分組字上執(zhí)行比較,則位控制i 2920將允許來自比較單元i 2911的結(jié)果(在一個實施例中為溢出)信息傳遞到比較單元i+1,以及來自比較單元i+1 2971的結(jié)果(在一個實施例中為溢出)信息傳遞給比較單元i2911。
例如,在表39中,執(zhí)行分組字節(jié)帶符號大于比較。假定比較單元i+1 2971在數(shù)據(jù)元素1上操作,而比較單元i 2911在數(shù)據(jù)元素0上操作。比較單元i+1 2971比較一個字的最高8位并通過上一級i+12972傳遞該結(jié)果信息。比較單元i 2911比較該字的最低8位并通過下一級i 2913傳遞該結(jié)果信息。然而操作控制2900將使得位控制i2920停止在比較單元之間傳播從上一級i+1 2972及下一級i 2913接收的結(jié)果信息。
表39然而,如果執(zhí)行分組字帶符號大于比較,則比較單元i+1 2971的結(jié)果將傳遞到比較單元i 2911,反之亦然。表40示出這一結(jié)果。這在類型的傳遞對分組雙字比較同樣允許。
表40各比較單元可選地耦合在結(jié)果寄存器上。結(jié)果寄存器臨時存儲比較操作的結(jié)果直到能將完整的結(jié)果Result[63∶0]2960傳輸?shù)紻EST605寄存器為止。
對于一個完整的64位分組比較電路,采用8個比較單元及7個位控制單元。這一電路也能用來在64位非分組數(shù)據(jù)上執(zhí)行比較,借此利用同一電路來執(zhí)行非分組比較操作與分組比較操作。
在指令集中加入上述分組比較操作的優(yōu)點上述分組比較指令將Source1與Source2的比較結(jié)果作為分組掩碼存儲。如上所述,數(shù)據(jù)上的條件轉(zhuǎn)移是不可預(yù)測的,并因為它們破壞轉(zhuǎn)移預(yù)測算法,因此浪費了處理器性能。然而,通過生成分組掩碼,這一比較指令減少了需要的基于數(shù)據(jù)的條件轉(zhuǎn)移的數(shù)目。例如,可以在分組數(shù)據(jù)上執(zhí)行函數(shù)(if Y>A then X=X+B;else X=X),如下面表41中所示(表41中所示的值為以16進(jìn)制符號示出的)。
Compare.Greater_Than Source1,Source2
Source1=Y(jié)0-1Source2=A0-1掩碼Packed AND Source3,Mask
Source3=B0-1掩碼結(jié)果Packed Add Source4,Result
Source4=X0-1結(jié)果新X0-1值表41從上述示例中可見,不再需要條件轉(zhuǎn)移。由于不需要轉(zhuǎn)移指令,當(dāng)使用這一比較指令來執(zhí)行這一與其它類似操作時,推測性地預(yù)測轉(zhuǎn)移的處理器不會有性能降低。從而,通過在處理器109支持的指令集中提供這一比較指令,處理器109便能在較高的性能級上執(zhí)行需要這一功能的算法。
多媒體算法示例為說明所公開的指令集的通用性,下面描述若干多媒體算法示例。在一些情況中,可以用類似的分組數(shù)據(jù)指令來執(zhí)行這些算法中的某些步驟。在下面的示例中,已經(jīng)省略了需要使用通用處理器指令來管理數(shù)據(jù)傳送、循環(huán)及條件轉(zhuǎn)移的若干步驟。
1)復(fù)數(shù)乘法所公開的乘-加指令能用來在單一的指令中將兩個復(fù)數(shù)相乘,如表42a中所示。兩個復(fù)數(shù)(諸如,r1 i1與r2 i2)的乘法是按照下列等式執(zhí)行的實部=r1·r2-i1·i2虛部=r1·i2+r2·i1如果將這一指令實現(xiàn)成在一時鐘周期中完成,本發(fā)明便能在一個時鐘周期中將兩個復(fù)數(shù)相乘。
Multiply-Add Soure1 Soure2
源1源2結(jié)果1表42a作為另一示例,表42b示出用來將三個復(fù)數(shù)一起乘的指令。
Multiply-Add Source1,Source2
源1源2結(jié)果1Packed Shift Right Source1,Source2
結(jié)果1結(jié)果2Pack Result2,Result2
結(jié)果2結(jié)果2結(jié)果3Multiply-Add Result3,Source3
結(jié)果3源3結(jié)果4表42b
2)乘累加運算所公開的指令也能用來乘與累加值。例如,可將兩組4個數(shù)據(jù)元素(A1-4與B1-4)相乘與累加,如下面表43中所示。在一個實施例中,表43中所示的各指令是實現(xiàn)成在每個時鐘周期中完成的。
Multiply-Add Source1,Source2
源1源2結(jié)果1Multiply-Add Source3,Source4
源3源4結(jié)果2Unpacked Add Result1,Result2
結(jié)果1結(jié)果2結(jié)果3表43如果各組中的數(shù)據(jù)元素的數(shù)目超過8個且為4的倍數(shù),如果如下面表44中所示執(zhí)行,這些組的乘法與累加需要更少的指令。
Multiply-Add Source1,Source2
源1源2結(jié)果1Multiply-Add Source3,Source4
源3源4結(jié)果2Packed Add Result1,Result2
結(jié)果1結(jié)果2結(jié)果3Unpack High Result3,Source5
結(jié)果3源5結(jié)果4
Unpack Low Result3,Source5
結(jié)果3源5結(jié)果5Packed Add Result4,Result5
結(jié)果4結(jié)果5結(jié)果6表44作為另一示例,表45示出組A與B以及組C與D的分開乘法與累加,其中這些組中各組包含兩個數(shù)據(jù)元素。
Multiply-Add Source1,Source2
源1源2結(jié)果1表45作為另一示例,表46示出組A與B以及組C與D的分開乘法與累加,其中這些組中各組包含4個數(shù)據(jù)元素。
Multiply-Add Source1,Source2
源1源2結(jié)果1Multiply-Add Source3,Source4
源3源4結(jié)果2Packed Add Result1,Result2
結(jié)果1結(jié)果2結(jié)果6表463)點積算法點積(亦稱內(nèi)積)用在信號處理與矩陣運算中。例如,在計算矩陣的積、數(shù)字濾波操作(諸如FIR與IIR濾波)及計算相關(guān)序列時使用點積。由于許多語音壓縮算法(如GSM、G.728、CELP及VSELP)及高保真壓縮算法(諸如MPEG及分頻段編碼)廣泛地利用數(shù)字濾波及相關(guān)計算,提高點積的性能等于提高這些算法的性能。
兩個長度N的序列A與B的點積定義為Result=Σi=0N-1Ai·Bi]]>執(zhí)行點積計算廣泛利用乘累加運算,其中將各序列的對應(yīng)元素相乘,并累加這些結(jié)果以構(gòu)成點積結(jié)果。
通過包含傳送、分組加法、乘-加及分組移位操作,本發(fā)明允許使用分組數(shù)據(jù)執(zhí)行點積計算。例如,如果使用包含4個16位元素的分組數(shù)據(jù)類型,便可用下述操作在各包含4個值的兩個序列上執(zhí)行點積計算1)使用傳送指令從A序列取4個16位值來生成Source1;2)使用傳送指令從B序列取4個16位值來生成Source2;以及3)使用乘-加、分組加法及移位指令如上所述相乘與累加。
對于帶有稍多元素的矢量,使用表46中所示的方法并在最后將最終結(jié)果加在一起。其它支持指令包含用于初始化累加器寄存器的分組OR與XOR指令,用于在計算的最后級上移出不需要的值的分組移位指令。利用已存在處理器109的指令集中的指令完成循環(huán)控制操作。
4)二維環(huán)路濾波器二維環(huán)路濾波器用在一些多媒體算法中。例如,下面表47中所示的濾波器系數(shù)可用在視頻會議算法中以便在象素數(shù)據(jù)上執(zhí)行低通濾波。
121242121]]>表47為了計算位置(x,y)上的象素的新值,使用下述等式結(jié)果象素=(x-1,y-1)+2(x,y-1)+ (x+1,y-1)+2(x-1,y)+4(x,y)+2(x+1,y)+(x-1,y+1)+2(x,y-1)+(x+1,y+1)通過包含組裝、分組、傳送、分組移位及分組加法,本發(fā)明允許使用分組數(shù)據(jù)執(zhí)行二維環(huán)路濾波器。按照上述環(huán)路濾波器的一種實現(xiàn),這一環(huán)路濾波器是作為兩個簡單的一維濾波器應(yīng)用的-即,上述二維濾波器能用作兩個121濾波器。第一濾波器在水平方向上,而第二濾波器則在垂直方向上。
表48示出象素數(shù)據(jù)的一個8×8塊的表示。
<-8->
表48執(zhí)行下述步驟來實現(xiàn)象素數(shù)據(jù)的這一8×8塊上的濾波器的水平通過1)使用傳送指令存取8個8位象素值作為分組數(shù)據(jù);2)將這8個8位象素分解成包含4個8位象素的16位分組數(shù)據(jù)(Source1)以保持累加中的精度;3)復(fù)制Source1兩次生成Source2與Source3;4)在Source1上執(zhí)行非分組向右移位16位;5)在Source3上執(zhí)行非分組向左移位16位;6)通過執(zhí)行下述分組加法生成(Source1+2*Source2+Source3);a)Source1=Source1+Source2;b)Source1=Source1+Source2;c)Source1=Source1+Source3;7)作為一個8×8中間結(jié)果數(shù)組的一部分存儲得出的分組字?jǐn)?shù)據(jù);以及8)重復(fù)這些步驟直到生成如下面表49中所示的整個8×8中間結(jié)果數(shù)組(如IA0表示來自表49的A0的中間結(jié)果)。
←16→
表49執(zhí)行下述步驟來實現(xiàn)8×8中間結(jié)果數(shù)組上的濾波器的垂直通過1)使用傳送指令存取來自誼中問結(jié)果數(shù)組的4×4的數(shù)據(jù)決作為分組數(shù)據(jù)以生成source1、Source2及Source3(如見作為示例的表50);←16→
源1源2源3表502)通過執(zhí)行下述分組加法生成(Source1+2*Source2+Source3)a)Source1=Source1+Source2b)Source1=Source1+Source2;c)Source1=Source1+Source3;3)在得出的Source1上執(zhí)行分組向右移住4位生成加權(quán)值之和一實際上除以16;4)組裝帶有飽和的結(jié)果Source1,將16位值轉(zhuǎn)換回8位象素值;5)將得出的分組字節(jié)數(shù)據(jù)作為一個8×8結(jié)果數(shù)組的一部分存儲(對于表50中所示的例子,這四個字節(jié)表示B0、B1、B2與B3的新象素值);以及
6)重復(fù)這些步驟直到生成整個8×8結(jié)果數(shù)組為止。
值得指出的是,8×8結(jié)果數(shù)組的頂與底行是用不同的算法確定的,為了不沖淡本發(fā)明在這里未描述該算法。
從而通過在處理器109上提供組裝、分解、傳送、分組移位及分組加法指令,本發(fā)明的性能明顯高于先有技術(shù)通用處理器,后者必須一次一個數(shù)據(jù)元素地執(zhí)行這些濾波器所要求的操作。
5)運動估計(Motion Estimation)運動估計用在若干種多媒體應(yīng)用中(諸如,電視會議及MPBG(高質(zhì)量電視播放))。對于電視會議,運動估計用來減少必須在終端之間傳輸?shù)臄?shù)據(jù)量。運動估計通過將視頻幀分成固定大小的視頻塊進(jìn)行。對于幀1中的各塊,確定在幀2中是否有包含相似圖象的塊。如果幀2中包含這樣的塊,便能用對幀1中的運動矢量引用來描述該塊。這樣,不是傳輸表示該塊的所有數(shù)據(jù),只需要將一個運動矢量傳輸?shù)浇邮战K端。例如,如果幀1中的一塊相似于幀2中的一塊且在相同的屏幕坐標(biāo)上,只需要為該塊發(fā)送一個運動矢量0。然而,如果幀1中的一塊相似于幀2中的一塊但在不同的屏面坐標(biāo)上,只需要發(fā)送指示該塊的新位置的一個運動矢量即可。按照一種實現(xiàn),為了確定幀1中的塊A是否相似于幀2中的塊B,確定象素值之間的絕對差值之和。和越低,塊A與塊B越相似(即如果和為0,塊A等于塊B)。
通過包含傳送、分解、分組加法、帶飽和的分組減法及邏輯運算,本發(fā)明允許用分組數(shù)據(jù)執(zhí)行運動估計。例如,如果兩個16×16的視頻塊是用作為分組數(shù)據(jù)存儲的兩個8位象素值的數(shù)組表示的,可用下述步驟計算出這兩塊中的象素值的絕對差值1)利用傳送指令從塊A中取8個8位值生成Source1;2)利用傳送指令從塊B中取8個8位值生成Source2;3)執(zhí)行帶飽和的分組減法從Source2中減去Source1生成Source3-通過帶飽和的減法,Source3中將只包含這一減法的正結(jié)果(即負(fù)結(jié)果成為0);4)執(zhí)行帶飽和的分組減法從Source1中減去Source2生成Source4-通過帶飽和的減法,Source4中將只包含這一減法的正結(jié)果(即負(fù)結(jié)果成為0);5)在Source3與Source4上執(zhí)行分組或運算(OR)產(chǎn)生Source5-通過執(zhí)行這一或運算,Source5中包含Source1與Source2的絕對值;6)重復(fù)這些步驟直到處理完16×16塊。
將得出的8位絕對值分解成16位數(shù)據(jù)元素以便允許16位精度,然后使用分組加法求和。
從而,通過在處理器109上提供傳送、分解、分組加法、帶飽和的分組減法及邏輯運算,本發(fā)明比先有技術(shù)通用處理器有了明顯的性能提高,后者必須一次一個數(shù)據(jù)元素地執(zhí)行運動估計計算的加法與絕對差值。
6)離散余弦變換離散余弦變換(DCT)是用在許多信號處理算法中的著名函數(shù)。尤其是視頻與圖象壓縮算法廣泛地利用這一變換。
在圖象與視頻壓縮算法中,使用DCT將一塊象素從空間表示變換到頻率表示。在頻率表示中,將畫面信息分成頻率分量,某些分量比其它分量更重要。壓縮算法有選擇地量化或丟棄對重構(gòu)畫面內(nèi)容并無不利影響的頻率分量。以這一方式達(dá)到壓縮。
DCT有許多實現(xiàn),其中最流行的是基于快速傅里葉變換(FFT)計算流程建模的某種快速變換方法。在該快速變換中,將N階變換分解成N/2階變換的組合并重組結(jié)果??蓪⑦@一分解一直進(jìn)行到到達(dá)最小的二階變換為止。通常將這一初等二階變換核稱作蝶形運算。蝶形運算表示如下X=a*x+b*yY=c*x-d*y其中a、b、c與d稱作系數(shù),x與y為輸入數(shù)據(jù),而X與Y則為變換輸出。
通過包含傳送、乘-加及分組移位指令,本發(fā)明允許以下述方式使用分組數(shù)據(jù)執(zhí)行DCT計算1)利用傳送及分解指令取表示x與y的兩個16位值生成Source1(見下面表51);2)如下面表51中所示生成Source2-注意Source2在若干次蝶形運算上可重復(fù)使用;以及3)利用Source1與Source2執(zhí)行乘-加指令生成Result(見下面表51)。
源1
源2
源3表51在一些情況中,蝶形運算的系數(shù)為1.對于這些情況,蝶形運算退化成只有加與減,這可以利用分組加法與分組減法指令來執(zhí)行。
IEEE文件規(guī)定了電視會議必須執(zhí)行的逆DCT所用的精度。(見IEEE電路與系統(tǒng)協(xié)會,“8×8逆離散余弦變換的實現(xiàn)的IEEE標(biāo)準(zhǔn)規(guī)范”,IEEE Std.1180-1990,IEEE Inc.345 East 47thst.,NY,NY 10017,USA,1991年3月18日)。公開的乘-加指令滿足這一要求的精度因為它使用16位輸入來生成32位輸出。
從而通過在處理器109上提供傳送、乘-加及分組移位操作,本發(fā)明相比于每次必須一個數(shù)據(jù)元素地執(zhí)行DCT計算的加法與乘法的先有技術(shù)通用處理器,本發(fā)明有了明顯的性能提高。
替代實施例雖然已將本發(fā)明描述成其中各個不同的運算具有獨立的電路,但也能實現(xiàn)替代的實施例使不同運算共同某些電路。例如,在一個實施例中使用下列電路1)單個算術(shù)邏輯單元(ALU)來執(zhí)行分組加法、分組減法、分組比較及分組邏輯運算;2)一個電路單元來執(zhí)行組裝、分解及分組移位操作;3)一個電路單元來執(zhí)行分組乘法及乘-加運算;以及4)一個電路單元來執(zhí)行個數(shù)計數(shù)操作。
這里使用了對應(yīng)與相應(yīng)的名詞來指稱存儲在兩個或更多分組數(shù)據(jù)中的數(shù)據(jù)元素之間的預(yù)定關(guān)系。在一個實施例中,這一關(guān)系是基于分組數(shù)據(jù)中的數(shù)據(jù)元素的位位置的。例如,第一分組數(shù)據(jù)的數(shù)據(jù)元素0(例如以分組字節(jié)格式存儲在位位置0-7中)對應(yīng)于第二分組數(shù)據(jù)的數(shù)據(jù)元素0(例如以分組字節(jié)格式存儲在位位置0-7中)。然而,在不同的實施例中這一關(guān)系可以不同。例如,第一與第二分組數(shù)據(jù)中的對應(yīng)數(shù)據(jù)元素可能具有不同長度。作為另一示例,不是第一分組數(shù)據(jù)的最低位數(shù)據(jù)元素對應(yīng)于第二分組數(shù)據(jù)的最低位數(shù)據(jù)元素(及以此類推),而且第一與第二分組數(shù)據(jù)中的數(shù)據(jù)元素可以以某種其它次序互相對應(yīng)。作為另一示例,第一與第二分組數(shù)據(jù)中的數(shù)據(jù)元素不是具有一一對應(yīng),而數(shù)據(jù)元素可在不同的比率上對應(yīng)(例如,第一分組數(shù)據(jù)的一個或多個數(shù)據(jù)元素可對應(yīng)于第二分組數(shù)據(jù)中的兩個或更多不同數(shù)據(jù)元素)。
雖已用若干實施例描述了本發(fā)明,熟悉本技術(shù)者將理解本發(fā)明不限于所述實施例??稍谒綑?quán)利要求書的精神與范圍內(nèi)修改或改變來實現(xiàn)本發(fā)明的方法與裝置。因此,該說明書應(yīng)認(rèn)為是示例性的而不是對本發(fā)明的限制。
權(quán)利要求
1.一種裝置,包括存儲區(qū),所述存儲區(qū)存儲包括每一個都具有多個數(shù)據(jù)元素的分組數(shù)據(jù)的數(shù)據(jù);執(zhí)行單元,所述執(zhí)行單元執(zhí)行具有用于標(biāo)識第一源數(shù)據(jù)和第二源數(shù)據(jù)的格式的分組數(shù)據(jù)指令集所指定的操作,其中所述分組數(shù)據(jù)指令集指定至少如下操作,包括一個或多個分解類型操作,其中每個導(dǎo)致在所述存儲器區(qū)生成和存儲結(jié)果分組數(shù)據(jù),所述結(jié)果分組數(shù)據(jù)包括少于所述第一源數(shù)據(jù)的數(shù)據(jù)元素和所述第二源數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素交錯的數(shù)據(jù)元素的全部;一個或多個組裝類型的操作,其中每個導(dǎo)致在所述存儲區(qū)生成和存儲結(jié)果分組數(shù)據(jù),所述結(jié)果分組數(shù)據(jù)包括從所述第一源數(shù)據(jù)和所述第二源數(shù)據(jù)中的每個數(shù)據(jù)元素中求出的多個位部分,所述第一和第二源數(shù)據(jù)中的所述多個位部分在所述結(jié)果分組數(shù)據(jù)中是交錯的;一個或多個分組乘類型操作,其中每個導(dǎo)致在所述存儲器區(qū)生成和存儲結(jié)果分組數(shù)據(jù),所述結(jié)果分組數(shù)據(jù)僅包括作為獨立結(jié)果元素的高階或者低階位,所述高階或者低階位來自與所述第二源數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素相乘后的所述第一源數(shù)據(jù)的每個數(shù)據(jù)元素的結(jié)果的高階或者低階位;一個或多個分組加類型操作,其中每個導(dǎo)致在所述存儲器區(qū)生成和存儲結(jié)果分組數(shù)據(jù),所述結(jié)果分組數(shù)據(jù)包括作為獨立的結(jié)果元素的與所述第二源數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素進(jìn)行了相加的所述第一源數(shù)據(jù)的每個數(shù)據(jù)元素;一個或多個分組減類型操作,其中每個導(dǎo)致在所述存儲器區(qū)生成和存儲結(jié)果分組數(shù)據(jù),所述結(jié)果分組數(shù)據(jù)包括作為獨立的結(jié)果元素的被從所述第一源數(shù)據(jù)的對應(yīng)數(shù)據(jù)元素中減去的所述第二源數(shù)據(jù)的每個數(shù)據(jù)元素;一個或多個分組比較類型操作,其中每個導(dǎo)致在所述存儲器區(qū)生成和存儲結(jié)果分組數(shù)據(jù),所述結(jié)果分組數(shù)據(jù)包括作為獨立的結(jié)果元素的掩碼,所述掩碼表示將所述第一分組數(shù)據(jù)中的每個數(shù)據(jù)元素之一和所述第二分組數(shù)據(jù)中的對應(yīng)數(shù)據(jù)元素進(jìn)行對應(yīng)的比較,所述掩碼中的那些對應(yīng)比較為真的掩碼的每一個包括多個都具有第一預(yù)定值的位,并且所述掩碼中的那些對應(yīng)比較為假的掩碼的每一個包括多個都具有第二預(yù)定值的位;以及一個或多個乘加類型操作,其中每個導(dǎo)致在所述存儲器區(qū)生成和存儲結(jié)果分組數(shù)據(jù),所述結(jié)果分組數(shù)據(jù)包括第一結(jié)果元素和第二結(jié)果元素,所述第一和第二結(jié)果元素被存儲而沒有對所述第一和第二結(jié)果元素進(jìn)行求和,其中所述第一結(jié)果元素表示將所述第一源數(shù)據(jù)和所述第二源數(shù)據(jù)的兩對對應(yīng)數(shù)據(jù)元素相乘的結(jié)果的第一個和,所述第二結(jié)果元素表示將所述第一源數(shù)據(jù)和所述第二源數(shù)據(jù)的不同兩對的對應(yīng)數(shù)據(jù)元素相乘的結(jié)果的第二個和,所述第一和第二結(jié)果元素具有比用于生成所述第一和第二結(jié)果元素的所述第一和第二源數(shù)據(jù)中的每個數(shù)據(jù)元素更高的精度。
2.權(quán)利要求1的裝置,其中對于所述一個或多個分解類型的操作中的至少一個,結(jié)果分組數(shù)據(jù)包括所述第一源數(shù)據(jù)和所述第二源數(shù)據(jù)的高位一半或者低位一半。
3.權(quán)利要求1的裝置,其中對于所述一個或多個組裝類型的操作中的至少一個,所述第一和第二源數(shù)據(jù)的每個數(shù)據(jù)元素是N位數(shù)據(jù)元素,所述多個位部分的每個是N/2位結(jié)果元素。
4.權(quán)利要求1-3中任意一項的裝置,其中對于所述一個或多個乘加類型操作中的至少一個,所述第一和第二源數(shù)據(jù)中的每個數(shù)據(jù)元素包括N位數(shù)據(jù)元素,并且所述第一結(jié)果元素和所述第二結(jié)果元素中的每一個是2N位結(jié)果元素。
5.權(quán)利要求1-4中任意一項的裝置,其中所述第一存儲區(qū)是一個或多個寄存器的組。
6.權(quán)利要求1-5中任意一項的裝置,其中所述格式包括把第一存儲位置指定為源-目的操作數(shù)并把第二存儲位置指定為源操作數(shù)。
7.權(quán)利要求6的裝置,其中所述源操作數(shù)和所述源-目的操作數(shù)中的每個被指定為寄存器數(shù),所述源操作數(shù)由操作碼字節(jié)的0-2位來指定,所述源-目的操作數(shù)由所述操作碼字節(jié)的3-5位指定。
8.權(quán)利要求1-8中任意一項的裝置,其中所述分組數(shù)據(jù)指令集還指定至少如下操作,包括一個或多個分組移位類型的操作,其中每個導(dǎo)致在所述存儲區(qū)生成和存儲結(jié)果分組數(shù)據(jù),所述結(jié)果分組數(shù)據(jù)包括作為獨立的結(jié)果元素的所述第一源數(shù)據(jù),所述第一源數(shù)據(jù)中的每個數(shù)據(jù)元素已經(jīng)進(jìn)行了由所述第二源數(shù)據(jù)指定的量的移位并且對每個數(shù)據(jù)元素的所述量的位進(jìn)行了填充,如果需要,則使用填充值來填充。
9.權(quán)利要求8的裝置,其中所述一個或多個分組移位類型操作包括一個或多個分組向右移位算術(shù)類型操作,其中每個使所述結(jié)果分組數(shù)據(jù)包含作為獨立的結(jié)果元素的所述第一源數(shù)據(jù),所述第一源數(shù)據(jù)的每個數(shù)據(jù)元素向右移位由所述第二源數(shù)據(jù)指定的所述量,并且對高階位進(jìn)行填充,如果需要,則使用帶符號的值來加以填充;一個或多個分組向左移位類型操作,其中每個使所述結(jié)果分組數(shù)據(jù)包含作為獨立的結(jié)果元素的所述第一源數(shù)據(jù),所述第一源數(shù)據(jù)的每個數(shù)據(jù)元素向左移位由所述第二源數(shù)據(jù)指定的所述量,并且對低階位進(jìn)行填充,如果需要,則使用0來加以填充;以及一個或多個分組向右移位邏輯類型操作,其中每個使所述結(jié)果分組數(shù)據(jù)包含作為獨立的結(jié)果元素的所述第一源數(shù)據(jù),所述第一源數(shù)據(jù)的每個數(shù)據(jù)元素向右移位由所述第二源數(shù)據(jù)指定的所述量,并且對高階位進(jìn)行填充,如果需要,則使用0加以填充。
10.權(quán)利要求1-9中任意一項的裝置,其中所述執(zhí)行單元包括多個電路,其中所述多個電路中的至少一個電路執(zhí)行多個所述操作。
11.權(quán)利要求10的裝置,其中所述多個電路包括加法器/減法器電路;以及乘加電路。
12.權(quán)利要求1-9中的任意一項的裝置,其中所述執(zhí)行單元包括第一電路,所述第一電路執(zhí)行所述組裝和分解類型操作;以及第二電路,所述第二電路執(zhí)行所述組裝來和乘加類型操作。
13.權(quán)利要求12的裝置,其中所述執(zhí)行單元還包括第三電路,所述第三電路執(zhí)行所述分組加、分組減、分組比較以及邏輯類型操作。
14.權(quán)利要求10-13中任意一項的裝置,還包括存儲設(shè)備,所述存儲設(shè)備存儲多個指令序列,所述存儲設(shè)備與所述執(zhí)行單元耦合;與所述執(zhí)行單元耦合的顯示設(shè)備;以及與所述執(zhí)行單元耦合的聲音播放設(shè)備。
15.權(quán)利要求14的裝置,其中所述存儲設(shè)備存儲復(fù)數(shù)乘法例程,所述復(fù)數(shù)乘法例程包括用于指定所述一個或多個乘加類型操作的一個來使至少兩個復(fù)數(shù)彼此相乘的指令。
16.權(quán)利要求14或15的裝置,其中所述存儲設(shè)備存儲乘累加例程,所述乘累加例程包括用于指定所述分解和乘加類型操作中的每個的至少一種類型的指令。
17.權(quán)利要求14-16中任意一項的裝置,其中所述存儲設(shè)備存儲點積例程,所述點積例程包括用于指定所述乘加、分組移位以及分組加類型操作中每個的至少一種類型的指令。
18.權(quán)利要求14-17中任意一項的裝置,其中所述存儲設(shè)備存儲環(huán)路濾波器例程,所述環(huán)路濾波器例程包括用于指定所述分解、分組移位以及分組加類型操作中的每個的至少一種類型的指令。
19.權(quán)利要求14-18中任意一項的裝置,其中所述存儲設(shè)備存儲運動估計例程,所述運動估計例程包括用于指定所述分解、帶飽和分組減、分組加類型操作和分組邏輯類型操作中的每個的至少一種類型的指令,所述運動估計例程處理可在所述顯示設(shè)備上顯示的數(shù)據(jù)。
20.權(quán)利要求14-19中任意一項的裝置,其中所述存儲設(shè)備存儲離散余弦變換例程,所述離散余弦變換例程包括用于指定所述分組移位和乘加類型操作中的每個的至少一種類型的指令,所述離散余弦變換例程處理可在所述顯示設(shè)備上顯示的數(shù)據(jù)。
全文摘要
一種在處理器中加入支持典型的多媒體應(yīng)用所要求的分組數(shù)據(jù)上的操作的指令集的裝置。在一個實施例中,本發(fā)明包括具有存儲區(qū)(150)、解碼器(165)及多個電路(130)的處理器。該多個電路提供若干指令的執(zhí)行來操作分組數(shù)據(jù)。在這一實施例中,這些指令包含組裝、分解、分組乘法、分組加法、分組減法、分組比較及分組移位。
文檔編號G06F9/30GK1534453SQ0313284
公開日2004年10月6日 申請日期1996年7月17日 優(yōu)先權(quán)日1995年8月31日
發(fā)明者A·D·佩勒格, Y·雅里, M·米塔爾, L·M·門內(nèi)梅爾, B·艾坦, A·F·格盧, C·杜龍, E·科瓦施, W·維特, A D 佩勒格, 呤, 格盧, 門內(nèi)梅爾 申請人:英特爾公司