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