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