(57)【特許請求の範囲】
【請求項１】
第１の演算コードと、少なくとも第１のデータ要素を含む第１の複数のデータ要素を有する第１のオペランドを示す第１のフィールドと、少なくとも第２のデータ要素を含む第２の複数のデータ要素を有する第２のオペランドを示す第２のフィールドとを含み、第１および第２の複数のデータ要素のデータ要素それぞれがＮビット長の命令形式である第１の命令を受け取るステップと；
第１の複数のデータ要素各々から導出される長さがＮビット未満の第１のマルチビット部分をデスティネーション・オペランドにパックし、第２の複数のデータ要素各々から導出される長さがＮビット未満の第２のマルチビット部分をデスティネーション・オペランドにパックすることにより、前記第１の命令に応答して長さが少なくともＮビットの第１のパックドデータを格納するステップと
を含むことを特徴とする方法。
【請求項２】
前記第１の命令がパック命令であることを特徴とする請求項１に記載の方法。
【請求項３】
第１のオペランドの第１のデータ要素セットに、デスティネーション・オペランドの第１のパックドデータを上書きするステップをさらに含むことを特徴とする請求項１または２に記載の方法。
【請求項４】
第１の複数のデータ要素の１つまたは複数の下位データ要素に、第１の複数のデータ要素各々のパックされた第１のマルチビット部分を上書きするステップをさらに含むことを特徴とする請求項１から３のいずれかに記載の方法。
【請求項５】
第１の複数のデータ要素の１つまたは複数の上位データ要素に、第２の複数のデータ要素各々のパックされた第２のマルチビット部分を上書きするステップをさらに含むことを特徴とする請求項１から４のいずれかに記載の方法。
【請求項６】
デスティネーション・オペランドが第１のフィールドによって示されることを特徴とする請求項１から５のいずれかに記載の方法。
【請求項７】
第１のフィールドが前記命令形式のビット３〜５で構成されることを特徴とする請求項１から６のいずれかに記載の方法。
【請求項８】
第２のフィールドが前記命令形式のビット０〜２を含むことを特徴とする請求項１から７のいずれかに記載の方法。
【請求項９】
第１および第２のマルチビット部分が各々N/2ビット長であることを特徴とする請求項１から８のいずれかに記載の方法。
【請求項１０】
第１の複数のデータ要素各々から導出される第１のマルチビット部分がこの第１の複数のデータ要素のそれぞれのデータ要素の最下位ビットを少くとも含み、第２の複数のデータ要素各々から導出される第２のマルチビット部分がこの第２の複数のデータ要素のそれぞれのデータ要素の最下位ビットを少くとも含むことを特徴とする請求項１から９のいずれかに記載の方法。
【請求項１１】
符号付きの飽和クランピング（clamping）を使用して第１および第２のマルチビット部分各々をパックすることを特徴とする請求項１から９のいずれかに記載の方法。
【請求項１２】
無符号の飽和クランピングを使用して第１および第２のマルチビット部分各々をパックすることを特徴とする請求項１から９のいずれかに記載の方法。
【請求項１３】
符号付きのデータ要素により第１および第２のマルチビット部分のパックを行うことを特徴とする請求項１から12のいずれかに記載の方法。
【請求項１４】
第２の演算コードと、第３のデータ要素を含む第３の複数のデータ要素を有する第３のオペランドを示す第１のフィールドと、第４のデータ要素を含む第４の複数のデータ要素を有する第４のオペランドを示す第２のフィールドとを含み、第３および第４の複数のデータ要素のデータ要素それぞれがM/2ビット長である前記命令形式である第２の命令を受け取るステップと；
前記第２の命令に応答して、第３および第４のデータ要素を含む、結果として得られるＭビット長の第１のデータ要素を格納するステップと
をさらに含むことを特徴とする請求項１から13のいずれかに記載の方法。
【請求項１５】
第１の演算コードと、少なくとも第１のデータ要素を含む第１の複数のデータ要素を有する第１のオペランドを示す第１のフィールドと、少なくとも第２のデータ要素を含む第２の複数のデータ要素を有する第２のオペランドを示す第２のフィールドとを含み、第１および第２の複数のデータ要素のデータ要素それぞれがＮビット長の命令形式である第１の命令の前記第１の複数のデータ要素を格納する第１の記憶場所と；
前記第１の命令の第２の複数のデータ要素を格納する第２の記憶場所と；
第１および第２の記憶場所にアクセスするデコーダと；
第１の複数のデータ要素各々から導出される長さがＮビット未満の第１のマルチビット部分をデスティネーション・オペランドにパックし、第２の複数のデータ要素各々から導出される長さがＮビット未満の第２のマルチビット部分をデスティネーション・オペランドにパックすることにより、前記第１の命令に応答して長さが少なくともＮビットの第１のパックドデータを格納する第３の記憶場所と；
前記第１の命令を含む少なくとも１つの命令に少なくとも部分的に応答して、前記デコーダと共に所望の演算を実行する、デコーダと動作的に結合された機能ユニットと
を含むことを特徴とするプロセッサ。
【請求項１６】
第１のデータ要素を含む第１の複数のデータ要素を有する第１のオペランドを示し、第２のデータ要素を含む第２の複数のデータ要素を有する第２のオペランドを示し、第１および第２の複数のデータ要素のデータ要素それぞれがＮビット長である第１の命令を受け取るデコーダと；
デコーダが第１の命令をデコードするのに応答して、第１および第２の複数のデータ要素各々から導出された長さがＮビット未満のマルチビット部分を含む、少なくとも2Nビット長である第１のパックドデータを格納する、デコーダと動作的に結合された機能ユニットと
を含むことを特徴とするプロセッサ。
【請求項１７】
第１の命令は３バイト以上を含む形式であり、３バイト以上のバイトの第３バイトにより、第１の３ビットのソース・デスティネーション・レジスタ・アドレス、および第２の３ビットのソース・レジスタ・アドレスが可能になることを特徴とする請求項16に記載のプロセッサ。
【請求項１８】
第１のオペランドが第１の３ビットのソース・デスティネーション・レジスタ・アドレスに対応することを特徴とする請求項17に記載のプロセッサ。
【請求項１９】
第２のオペランドが、メモリ内のアドレス指定可能な場所に対応することを特徴とする請求項16から18のいずれかに記載のプロセッサ。
【請求項２０】
第２のオペランドが第２の３ビットのソース・レジスタ・アドレスに対応することを特徴とする請求項17または18に記載のプロセッサ。
【請求項２１】
機能ユニットが、第１の３ビットのソース・デスティネーション・レジスタ・アドレスに対応するデスティネーションに第１のパックドデータを格納することを特徴とする請求項17から20のいずれかに記載のプロセッサ。
【請求項２２】
第１の命令が、第１のオペランドを示す第１のフィールド、第２のオペランドを示す第２のフィールド、および第１のパックドデータを格納するデスティネーションを示す第３のフィールドを含む形式を有することを特徴とする請求項16に記載のプロセッサ。
【請求項２３】
第１の命令を保持するメモリと；
ソフトウェアが第１の命令をメモリに供給し、命令デコーダがメモリから第１の命令を受け取る、ソフトウェアを保持する記憶装置と
をさらに含み、
前記第１の複数のデータ要素が第３のデータ要素を含み、前記第２の複数のデータ要素が第４のデータ要素を含み；
前記第１のパックドデータが、第１のデータ要素から導出される第１のマルチビット部分Ａ、および第３のデータ要素から導出される第２のマルチビット部分Ｂを含む複数の下位マルチビット部分と、第２のデータ要素から導出される第３のマルチビット部分Ｃ、および第４のデータ要素から導出される第４のマルチビット部分Ｄを含む複数の上位マルチビット部分とを含むことを特徴とする請求項16から22のいずれかに記載のプロセッサ。
【請求項２４】
デジタル・オーディオ信号を処理するように構成されたシステムであって、
パックされたＭ個のＮビット・データ要素の第１のセットからなる第１のＭ×Ｎビット・データと、パックされたＭ個のＮビット・データ要素の第２のセットからなる第２のＭ×Ｎビット・データとを格納するメモリと；
第１および第２のＭ×Ｎビット・データにアクセスし、命令に応答して2M個のパックされたN/2ビットの結果の第３のセットを生成する、メモリと結合されたプロセッサであって、前記命令は、第１のＭ×Ｎビット・データに対応する第１のソースと、第２のＭ×Ｎビット・データに対応する第２のソースとを識別するように動作可能な第１の形式であり、パックされた2M個のN/2ビットの結果の第３のセットは、第１および第２のＭ個のパックされたＮビット・データ要素からパックされた、任意選択で飽和した2M個のN/2ビット要素に対応するプロセッサと；
プロセッサおよびメモリとのデータの送受信を行う、プロセッサに結合されたバスと；
オーディオ・デジタル化装置、音声録音装置、音声再生装置、マイクロフォン、デジタル／アナログ変換器、およびスピーカからなる群から選択されるオーディオ装置を含む１つまたは複数の装置とバスを結合し、バスにデータを提供する、またはバスからデータを受け取るインタフェースと
を含むことを特徴とするシステム。
【請求項２５】
前記プロセッサが、第１のＭ×Ｎビット・データに2M個のパックされたN/2ビットの結果の第３のセットを上書きすることを特徴とする請求項24に記載のシステム。
【発明の詳細な説明】
発明の背景
発明の分野
本発明は、単一の制御信号を使用して複数のデータ要素を操作する演算を行う装置および方法を含む。本発明は、パックされたデータ（パックドデータ）・データ・タイプに対する移動演算、パック演算、およびアンパック演算の実行を可能にする。
関連技術の説明
現在、ほとんどのパーソナル・コンピュータ・システムは１つの命令によって演算を行って１つの結果を出す。命令の実行速度とプロセッサ命令の複雑さを増すことと、複数の命令を並列して実行することによって、パフォーマンスの向上が実現され、これは複雑命令セット・コンピュータ（CISC,Complex Instruction Set Computer）と呼ばれる。米国カリフォルニア州サンタクララ所在のインテル・コーポレイションが販売するIntel80286TMマイクロプロセッサのようなプロセッサがCISCプロセッサの範疇に入る。
以前のコンピュータ・システム・アーキテクチャは、CISCの概念を利用するように最適化されていた。そのようなシステムは一般に、32ビット幅のデータ・バスを持つ。しかし、コンピュータ・サポーテッド・コオペレーション（CSC:電子会議と混在メディア・データ操作を統合したもの）、二次元／三次元グラフィックス、画像処理、ビデオ圧縮／圧縮解除、認識アルゴリズム、および音声操作を対象にしたアプリケーションによって、パフォーマンス向上の必要が増す。しかし、命令の実行速度と複雑さを増すことが唯一の解決策である。
これらのアプリケーションの１つの一般的な点は、数ビットだけが重要な、大量のデータを操作することが多いことである。すなわち、意味のあるビットがデータ・バスのサイズよりもはるかに少ないビット数で表されるデータである。たとえば、プロセッサは８ビットおよび16ビットのデータ（たとえばビデオ画像における画素の色成分）に対して多くの演算を実行するが、それよりかなり広いでデータ・バスとレジスタを有する。したがって、32ビットのデータ・バスとレジスタを有し、これらのアルゴリズムの１つを実行するプロセッサは、データの先頭８ビットだけが重要であるため、そのデータの処理、伝送、および記憶容量の最大75パーセントが無駄になることがある。
したがって、操作するデータを表すのに必要なビット数とプロセッサの実際のデータ伝送および記憶容量との差をより効率的に使用することによってパフォーマンスを向上させるプロセッサが望ましい。
発明の概要
複数のデータ要素に対して作用するシフト演算（シフトオペレーション）を有するプロセッサについて説明する。
このプロセッサは、第１のパックドデータを格納する第１のレジスタと、デコーダと、機能ユニットとを備える。デコーダは、制御信号入力を有する。制御信号入力は、第１の制御信号と第２の制御信号を受け取る。第１の制御信号はパック演算を示す。第２の制御信号はアンパック演算を示す。機能ユニットはデコーダとレジスタとに結合されている。機能ユニットは、第１のパックドデータを使用してパック演算とアンパック演算を行う。プロセッサは移動演算もサポートする。
本説明および図には多くの詳細が含まれるが、本発明は請求の範囲によって定義される。本発明には、それらの請求の範囲に記載されている限定だけが適用される。
【図面の簡単な説明】
本発明を、図面に限定的なものではなく例として図示する。同様の参照符号は同様の要素を示す。
第１図は、本発明の方法および装置を使用するコンピュータ・システムの実施例を示す図である。
第２図は、本発明のプロセッサの実施例を示す図である。
第３図は、プロセッサがレジスタ・ファイル内のデータを操作するために使用する一般的なステップを示す流れ図である。
第4a図は、記憶データ・タイプを示す図である。
第4b図、第4c図、および第4d図は、レジスタ内整数データ表現を示す図である。
第5a図は、パックドデータ・タイプを示す図である。
第5b図、第5c図、および第5d図は、レジスタ内パックドデータ表現を示す図である。
第6a図は、パックドデータの使用を示す、コンピュータ・システムで使用される制御信号形式の図である。
第6b図は、パックドデータまたは整数データの使用を示す、コンピュータ・システムで使用可能な第２の制御信号形式の図である。
第７図は、パックドデータに対してシフト演算を行うときにプロセッサが従う方法の一実施例を示す図である。
第8a図は、パックドバイト・データに対するパック演算を実施することができる回路を示す図である。
第8b図は、パックドワード・データに対するパック演算を実施することができる回路を示す図である。
第９図は、パックドデータに対するアンパック演算を行う場合にプロセッサがたどる方法の一実施例を示す図である。
第10図は、パックドデータに対するアンパック演算を実施することができる回路を示す図である。
好ましい実施例の説明
本発明の一実施例の概要
複数のデータ要素に対して作用する移動演算（ムーブオペレーション）とパック演算とアンパック演算の機能を有するプロセッサについて説明する。以下の説明では、本発明を十分に理解することができるように、回路などの多くの特定の詳細を記載する。他の場合には、本発明が無用に不明瞭にならないように、周知の構造および技法については詳細に示さない。
定義
本発明の実施形態の説明を理解する基礎となるように、以下のように定義を示す。
ビットＸないしビットY:二進数のサブフィールドを規定する。たとえば、（基数２で示した）バイト001110102のビット６ないしビット０は、１サブフィールド110102を表す。二進数の後の下付け文字「２」は基数２を示す。したがって、10002は810に等しく、F16は1510に等しい。
Rx:レジスタである。レジスタは、データの記憶と供給を行うことができる任意の素子である。レジスタの他の機能については後述する。レジスタはプロセッサのパッケージの一部であるとは限らない。
DEST:データ・アドレスである。
SRC1:データ・アドレスである。
SRC2:データ・アドレスである。
結果（Result）:DESTによってアドレス指定されたレジスタに格納されるデータである。
ソース1:SRC1によってアドレス指定されたレジスタに格納されているデータである。
ソース2:SRC2によってアドレス指定されたレジスタに格納されているデータである。
コンピュータ・システム
第１図を参照すると、本発明の実施例を実施することができるコンピュータ・システムが、コンピュータ・システム100として図示されている。コンピュータ・システム100は、情報を伝送するバス101またはその他の通信ハードウェアおよびソフトウェアと、バス101に結合された情報を処理するプロセッサ109とを備える。コンピュータ・システム100はさらに、バス101に結合され、プロセッサ109によって実行される情報と命令を記憶するランダム・アクセス・メモリ（RAM）またはその他のダイナミック記憶装置（メイン・メモリ104と呼ぶ）を備える。メイン・メモリ104は、プロセッサ109による命令の実行中に変数またはその他の中間情報を一時的に記憶するためにも使用することができる。コンピュータ・システム100は、バス101に結合され、プロセッサ109のための静的情報および命令を記憶する読取り専用メモリ（ROM）106またはその他のスタティック記憶装置あるいはその両方も備える。バス101には情報と命令を記憶するデータ記憶装置107が結合されている。
さらに、コンピュータ・システム100には磁気ディスクや光ディスクなどのデータ記憶装置107とそれに対応するディスク・ドライブを結合することができる。コンピュータ・システム100は、コンピュータ・ユーザに情報を表示するためにバス101を介して表示装置121にも結合することができる。表示装置121は、フレーム・バッファ、専用グラフィックス・レンダリング装置、陰極線管（CRT）、フラット・パネル・ディスプレイを含むことができる。プロセッサ109に情報とコマンド選択を伝えるために、英数字およびその他のキーを備える英数字入力装置122が、典型的にはバス101に結合されている。他のタイプのユーザ入力装置は、プロセッサ109に指示情報とコマンド選択を伝え、表示装置121上のカーソル移動を制御する、マウス、トラックボール、ペン、タッチ画面、カーソル指示キーなどのカーソル制御装置123である。この入力装置は一般に、第１の軸（たとえばｘ）と第２の軸（たとえばｙ）の２つの軸に２つの自由度を持ち、それによってこの装置は平面内の位置を指定することができる。しかし、本発明は、２つの自由度しかもたない入力装置には限定されない。
バス101に結合することができる他の装置は、命令、データ、またはその他の情報を、紙、フィルム、または同様のタイプの媒体などの媒体に印刷するために使用することができるハード・コピー装置124である。さらに、コンピュータ・システム100は、情報を記録するためにマイクロホンに結合されたオーディオ・ディジタイザなど、録音または再生あるいはその両方のための装置125に結合することができる。さらに、この装置は、ディジタル化された音声を再生するためにディジタル−アナログ（D/A）変換器に結合されたスピーカも含むことができる。
また、コンピュータ・システム100は、コンピュータ・ネットワーク（たとえばLAN）内の端末とすることもできる。その場合、コンピュータ・システム100は、いくつかのネットワーク化された装置を含むコンピュータ・システムのコンピュータ・サブシステムとなる。コンピュータ・システム100は、任意選択としてビデオ・ディジタイジング装置126を備える。ビデオ・ディジタイジング装置126を使用して、ビデオ画像をキャプチャし、それをコンピュータ・ネットワーク上の他の装置に送信することができる。
コンピュータ・システム100は、コンピュータ・サポーテッド・コオペレーション（CSC:電子会議と混在媒体データ操作とが統合されたもの）、二次元／三次元グラフィックス、画像処理、ビデオ圧縮／圧縮解除、認識アルゴリズム、および音声操作に対応するのに有用である。
プロセッサ
第２図にプロセッサ109の詳細図を示す。プロセッサ109は、BiCMOS、CMOS、NMOSなどのいくつかの処理技法のいずれかを使用して、１つまたは複数の基板上に実装することができる。
プロセッサ109は、プロセッサ109が使用する制御信号とデータをデコードするデコーダ202を備える。その場合、データは内部バス205を介してレジスタ・ファイル204に格納することができる。明確に言えば、実施例のレジスタは特定のタイプの回路にのみに限定されることを意味しない。むしろ実施例のレジスタは、データの記憶および供給と、本明細書に記載の機能を実行することができればよい。
データは、データのタイプに応じて、整数レジスタ201、レジスタ209、状態レジスタ208、または命令ポインタ・レジスタ211に格納することができる。たとえば浮動小数点レジスタなど他のレジスタをレジスタ・ファイル204に含めることができる。一実施例では、整数レジスタ201には、32ビットの整数データが格納される。一実施例では、レジスタ209にはR0212a〜R7212hの８個のレジスタが含まれる。レジスタ209内の各レジスタ長は64ビットである。R1212a、R2212b、およびR3212cがレジスタ209内の個々のレジスタの例である。レジスタ209内の32ビットのレジスタを、整数レジスタ201内の整数レジスタに移動させることができる。同様に、整数レジスタ内の値をレジスタ209内の32ビットのレジスタに移動させることができる。
状態レジスタ208は、プロセッサ109の状況を示す。命令ポインタ・レジスタ211には、次に実行される命令のアドレスが格納される。整数レジスタ201,レジスタ209、状態レジスタ208、および命令ポインタ・レジスタ211はすべて内部バス205に接続されている。内部バスには任意の追加のレジスタが接続される。
他の実施例では、これらのレジスタのうちのいくつかは２つの異なるタイプのデータに使用することができる。たとえば、レジスタ209と整数レジスタ201を組み合わせて、各レジスタに整数データまたはパックドデータを格納することができる。他の実施例では、レジスタ209を浮動小数点レジスタとして使用することができる。この実施例では、パックドデータはレジスタ209または浮動小数点データに格納することができる。一実施例では、組み合わされたレジスタの長さは64ビットで、整数は64ビットで表される。この実施例では、パックドデータと整数データを格納する際に、レジスタはその２つのデータ・タイプを区別する必要がない。
機能ユニット203は、プロセッサ109が行う演算（オペレーション）を実行する。このような演算には、シフト、加算、減算、乗算などが含まれる。機能ユニット203は内部バス205に接続している。キャッシュ206は、プロセッサ109の任意選択要素であり、たとえばメイン・メモリ104からのデータまたは制御信号あるいはその両方をキャッシュするために使用される。キャッシュ206は、デコーダ202に接続され、制御信号207を受信するように接続されている。
第３図に、プロセッサ109の動作概要を示す。すなわち、第３図にはプロセッサ109がパックドデータに対する演算、アンパックドデータに対する演算、または他の何らかの操作を実行する間にたどるステップが示されている。たとえば、このような操作にはレジスタ・ファイル204内のレジスタに、キャッシュ206、メイン・メモリ104、読取り専用メモリ（ROM）106、またはデータ記憶装置107からデータをロードする操作が含まれる。本発明の一実施例では、プロセッサ109は、米国カリフォルニア州サンタクララ所在のインテル・コーポレイションが販売するIntel80486TMによってサポートされる命令のほとんどをサポートする。本発明の他の実施例では、プロセッサ109は米国カリフォルニア州サンタクララ所在のインテル・コーポレイションが販売するIntel80486TMによってサポートされるすべての演算をサポートする。本発明の他の実施例では、プロセッサ109は、すべて米国カリフォルニア州サンタクララ所在のインテル・コーポレイションが販売するPentiumTMプロセッサ、Intel80486TMプロセッサ、80386TMプロセッサ、Intel80286TMプロセッサ、およびIntel8086TMプロセッサによってサポートされるすべての演算をサポートする。本発明の他の実施例では、プロセッサ109は、米国カリフォルニア州サンタクララ所在のインテル・コーポレイションが定義するIATM（インテル・アーキテクチャ）でサポートされるすべての演算をサポートする（米国カリフォルニア州サンタクララのインテルから入手可能な「Microprocessors,Intel  Data  Books  volume1およびvolume2、1992年および1993年刊」を参照）。一般に、プロセッサ109はPentiumTMプロセッサの現行命令セットをサポートすることができるが、将来の命令と本明細書に記載の命令を組み込むように修正することもできる。重要なのは、汎用プロセッサ109が、本明細書に記載の演算に加えて、従来使用されていた演算をサポートすることができることである。
ステップ301で、デコーダ202がキャッシュ206またはバス101から制御信号207を受け取る。デコーダ202は、制御信号をデコードして、実行すべき演算を判断する。
ステップ302で、デコーダ202はレジスタ・ファイル204またはメモリ内の記憶場所にアクセスする。制御信号207で指定されたレジスタ・アドレスに応じて、レジスタ・ファイル204内のレジスタかメモリ内の記憶場所のどちらかにアクセスする。たとえば、パックドデータに対する演算の場合、制御信号207にはSRC1、SRC2、およびDESTレジスタ・アドレスを含めることができる。SRC1は第１のソース・レジスタのアドレスである。SRC2は第２のソース・レジスタのアドレスである。すべての演算が２つのソース・アドレスを必要とするわけではないので、場合によってはSRC2アドレスは任意選択である。SRC2アドレスが不要な場合、SRC1アドレスのみが使用される。DESTは、結果データが格納される宛先レジスタのアドレスである。一実施例では、SRC1またはSRC2はDESTとしても使用される。SRC1、SRC2、およびDESTについては第6a図および第6b図を参照しながら詳述する。対応するレジスタに格納されているデータをそれぞれSource1、Source2、およびResultと呼ぶ。これらの各データの長さは64ビットである。
本発明の他の実施例では、SRC1、SRC2、およびDESTのいずれか１つまたは全部は、プロセッサ109のアドレス可能記憶空間内の記憶場所を規定することができる。たとえば、SRC1はメイン・メモリ104内の記憶場所を識別し、SRC2は整数レジスタ201内の第１のレジスタを識別し、DESTはレジスタ209内の第２のレジスタを識別する。本明細書では説明を簡単にするために、レジスタ・ファイル204へのアクセスについて言及するが、これらのアクセスはレジスタ・ファイル204の代わりにメモリに対して行うこともできる。
本発明の他の実施例では、命令コードはSRC1とSRC2の２つのアドレスしか含まない。この実施例では、演算の結果はSRC1レジスタまたはSRC2レジスタに格納される。すなわち、SRC1（またはSRC2）をDESTとして使用する。このタイプのアドレス指定は、２つのアドレスしか持たない以前のCISC命令に対応する。これによって、デコーダ202における複雑さが減少する。この実施例では、SRC1レジスタに含まれるデータを破壊してはならない場合、演算を実行する前にそのデータをまず別のレジスタにコピーしなければならないことに留意されたい。コピーには追加の命令が必要になる。本明細書では説明を簡単にするために、３アドレスのアドレス指定方式について説明する（すなわちSRC1、SRC2、およびDEST）。しかし、一実施例では制御信号にSRC1とSRC2しか含めることができず、SRC1（またはSRC2）によって宛先レジスタを識別することを想起されたい。
制御信号が演算を要求とする場合、ステップ303で、機能ユニット203がレジスタ・ファイル204内のアクセス・データに対してその演算を実行するように使用可能にされる。機能ユニット203で演算が実行されると、ステップ304でその結果が制御信号207の要件に従ってレジスタ・ファイル204に戻されて格納される。
データ形式および記憶形式
第4a図に、第１図のコンピュータ・システムで使用可能なデータ形式をいくつか示す。これらのデータ形式は固定小数点である。プロセッサ109はこれらのデータ形式を操作することができる。マルチメディア・アルゴリズムはこれらのデータ形式を使用することが多い。バイト401は８ビットの情報を含む。ワード402は16ビットの情報、すなわち２バイトを含む。ダブルワード403は32ビットの情報、すなわち４ビットを含む。したがって、プロセッサ109はこれらの記憶データ形式のうちの任意の１つに対して操作を行うことができる制御信号を実行する。
以下の説明では、ビット、バイト、ワード、およびダブルワード・サブフィールドについて言及する。たとえば、（基数２で示す）バイト001110102のビット６ないしビット０はサブフィールド1110102を表す。
第4b図ないし第4d図に、本発明の一実施例で使用するレジスタ内表現を示す。たとえば、無符号バイトのレジスタ内表現410によって、整数レジスタ201内のレジスタに格納されているデータを表すことができる。一実施例では、整数レジスタ201内のレジスタ長は64ビットである。他の実施例では、整数レジスタ201内のレジスタ長は32ビットである。説明を簡単にするために、以下の説明では64ビットの整数レジスタについて説明するが、32ビットの整数レジスタを使用することもできる。
無符号バイトのレジスタ内表現410は、プロセッサ109が整数レジスタ201にバイト401を格納し、そのレジスタ内のビット７ないしビット０の先頭８ビットがそのデータ・バイト401専用であることを示している。これらのビットを｛ｂ｝と示す。このバイトを正しく表すには、残りの56ビットがゼロでなければならない。符号付きバイトのレジスタ内表現411の場合、整数レジスタ201にはデータはビット６ないしビット０の先頭７ビットにデータとして格納される。７番目のビットは符号ビットを表し、｛ｓ｝で示す。残りのビット63ないしビット８はそのバイトの符号の継続である。
無符号ワードのレジスタ内表現412は、レジスタ201のうちの１つのレジスタに格納される。ビット15ないしビット０には、無符号ワード402が入れられる。これらのビットを｛ｗ｝で示す。このワードを正しく表すには、残りのビット63ないしビット16はゼロでなければならない。符号付きワード402は、符号付きワードのレジスタ内表現413が示すように、ビット14ないしビット０に格納される。残りのビット63ないしビット15は符号フィールドである。
ダブルワード403は、無符号ダブルワードのレジスタ内表現414または符号付きダブルワードのレジスタ内表現415として格納することができる。無符号ダブルワードのレジスタ内表現414のビット31ないしビット０がデータである。これらのビットを｛ｄ｝で示す。この無符号ダブルワードを正しく表すには、残りのビット63ないしビット32はゼロでなければならない。整数レジスタ201には、符号付きダブルワードのレジスタ内表現415が、そのビット30ないしビット０に格納される。残りのビット63ないしビット31は符号フィールドである。
前述の第4b図ないし第4d図に示すように、データ・タイプによっては64ビット幅のレジスタに格納するのは非効率的な格納方法である。たとえば、無符号バイトのレジスタ内表現410を格納する場合、ビット63ないしビット８はゼロでなければならず、ビット７ないしビット０にしか非ゼロ・ビットを入れることができない。したがって、64ビット・レジスタに１バイトを格納するプロセッサは、レジスタの容量の12.5％しか使用しない。同様に、機能ユニット203によって実行される命令は先頭の数ビットしか重要ではない。
第5a図に、パックされたデータすなわちパックドデータのデータ形式を示す。各パックドデータは複数の独立したデータ要素を含む。パックドバイト（パックされたバイト）501、パックドワード（パックされたワード）502、パックドダブルワード（パックされたダブルワード）503の３つのパックドデータ形式が図示されている。パックドバイトは、本発明の一実施例では64ビット長であり、８個のデータ要素を含む。各データ要素は１バイト長である。一般に、データ要素は１つのレジスタ（または記憶場所）に同じ長さの他のデータ要素と共に格納される個々のデータである。本発明の一実施例では、１つのレジスタに格納されるデータ要素の数は、64ビットをデータ要素のビット長で割った商である。
パックドワード502は64ビット長であり、４個のワード402データ要素を含む。各ワード402データ要素は、16ビットの情報を含む。
パックドダブルワード503は64ビット長であり、２個のダブルワード403データ要素を含む。各ダブルワード403データ要素は32ビットの情報を含む。
第5b図ないし第5d図にレジスタ内パックドデータ記憶表現を示す。無符号パックドバイトのレジスタ内表現510は、レジスタR0212a〜Rn212afのうちの１つにパックドバイト501が格納されている様子を示している。各バイト・データ要素の情報は、バイト０はビット７ないしビット０に格納され、バイト１はビット15ないしビット８、バイト２はビット23ないしビット16、バイト３はビット31ないしビット24,バイト４はビット39ないしビット32、バイト５はビット47ないしビット40、バイト６はビット55ないしビット48、バイト７はビット63ないしビット56に格納される。したがって、レジスタ内ですべての使用可能ビットが使用される。この記憶構成によって、プロセッサの記憶効率が向上する。また、８個のデータ要素にアクセスして、１つの操作を８個のデータ要素に同時に実行することができるようになる。符号付きパックドバイトのレジスタ内表現511も同様にレジスタ209内のレジスタに格納される。どのバイト・データ要素でも８番目のビットのみが必要な符号ビットであり、他のビットは使用してもしなくても符号が示されることに留意されたい。
無符号パックドワードのレジスタ内表現512は、ワード３ないしワード０がレジスタ209のうちの１つのレジスタに格納される様子を示している。ビット15ないしビット０にはワード０のデータ要素情報が入り、ビット31ないしビット16にはデータ要素ワード１の情報が入り、ビット47ないしビット32にはデータ要素ワード２の情報が入り、ビット63ないしビット48にはデータ要素ワード３の情報が入る。符号付きパックドワードのレジスタ内表現513は無符号パックドワードのレジスタ内表現512と同様である。各ワード・データ要素の16番目のビットにのみ、必要な符号インジケータが入ることに留意されたい。
無符号パックドダブルワードのレジスタ内表現514は、レジスタ209に２個のダブルワード・データ要素が格納される様子を示している。ダブルワード０はレジスタのビット31ないしビット０に格納される。ダブルワード１はレジスタのビット63ないしビット32に格納される。符号付きパックドダブルワードのレジスタ内表現515は無符号パックドダブルワードのレジスタ内表現514と同様である。必要な符号ビットはダブルワード・データ要素の32番目のビットであることに留意されたい。
前述のように、レジスタ209はパックドデータと整数データとの両方に使用することができる。本発明のこの実施例では、アドレス指定されたレジスタ、たとえばR1212aにパックドデータと単純整数／固定小数点データのどちらが格納されているかを追跡するために、個々のプログラミング・プロセッサ109が必要である。他の実施例では、プロセッサ109はレジスタ209の個々のレジスタに格納されているデータのタイプを追跡することができる。この代替実施例では、たとえば単純／固定小数点整数データに対してパック加算を行おうとした場合、エラーを生成することができる。
制御信号の形式
以下に、プロセッサ109がパックドデータを操作するために使用する制御信号形式の一実施例について説明する。本発明の一実施例では、制御信号は32ビットで表される。デコーダ202はバス101から制御信号207を受け取ることができる。他の実施例では、デコーダ202はキャッシュ206からもそのような制御信号を受け取ることができる。
第6a図にパックドデータを操作する制御信号の一般的な形式を示す。命令フィールドOP601（ビット31ないしビット26）は、たとえば、パック加算、パック減算など、プロセッサ109によって実行される演算に関する情報を与える。SRC1  602（ビット25ないしビット20）は、レジスタ209内のレジスタのソース・レジスタ・アドレスを供給する。このソース・レジスタは、制御信号の実行で使用される第１のパックドデータSource1を保持する。同様に、SRC2  603（ビット19ないしビット14）には、レジスタ209内のレジスタのアドレスが入れられる。この第２のソース・レジスタは、演算の実行時に使用されるパックドデータSource2を保持する。DEST605（ビット５ないしビット０）にはレジスタ209内のレジスタのアドレスが入れられる。この宛先レジスタには、パックドデータ演算の結果パックドデータResultが格納される。
制御ビットSZ610（ビット12およびビット13）は、第１および第２のパックドデータ・ソース・レジスタ内のデータ要素の長さを示す。SZ610が012に等しい場合、パックドデータはパックドバイト501としてフォーマットされる。SZ610が102に等しい場合、パックドデータはパックドワード502としてフォーマットされる。しかし、002または112と等しいSZ610を受け取った場合、他の実施例では、これらの値のうちの１つを使用してパックドダブルワード503を示すことができる。
制御ビットT611（ビット11）は、演算を飽和モードで行うかどうかを示す。T611が１の場合、飽和演算が行われる。T611がゼロの場合、非飽和演算が行われる。飽和演算については後述する。
制御ビットS612（ビット10）は、符号付き演算の使用を示す。S612が１の場合、符号付き演算が行われる。S612がゼロの場合、無符号演算が行われる。
第6b図に、パックドデータを操作する制御信号の第２の一般的形式を示す。この形式は、米国イリノイ州マウント・プロスペクトP.O.Box7641インテル・コーポレイションのLiterature  Salesから入手可能な"PentiumTM  Processor  Family  User's  Manual"に記載されている汎用整数命令コード形式に対応する。OP601、SZ610、T611、およびS612がすべて組み合わされて１つの大きなフィールドになることに留意されたい。制御信号によっては、ビット３ないし５がSRC1  602となる。一実施例では、SRC1  602アドレスがある場合、ビット３ないし５はDEST605にも対応する。SRC2  603アドレスが存在する代替実施例ではビット０ないし２もDEST605に対応する。パックドシフト即値演算のような他の制御信号の場合、ビット３ないし５は命令コード・フィールドの拡張部を表す。一実施例では、この拡張部によってプログラマはシフト・カウント値などの即値を制御信号と共に組み込むことができる。一実施例では、即値は制御信号の後に続く。これについては"PentiumTM  Processor  Family  User's  Manual"の付録ＦのＦ−１〜Ｆ−３ページに詳述されている。ビット０ないし２はSRC2  603を表す。この汎用形式によって、レジスタからレジスタ、メモリからレジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタからメモリのアドレス指定を行うことができる。また、一実施例では、この汎用形式は整数レジスタからレジスタと、レジスタから整数レジスタへのアドレス指定もサポートする。
飽和／非飽和の説明
前述のように、T611は演算が任意選択で飽和するかどうかを示す。飽和を可能にした演算の結果がデータの範囲からオーバーフローまたはアンダーフローする場合、その結果はクランプされる。クランプとは、結果がその範囲の最大値または最小値を超える場合、その結果を最大値または最小値に設定することを意味する。アンダーフローの場合、飽和によって結果がその範囲内の最低値にクランプされ、オーバーフローの場合は最高値にクランプされる。各データ形式の許容範囲を表１に示す。
0003615222.tif 000002
前述のように、T611は飽和演算を行うかどうかを示す。したがって、無符号バイト・データ形式を使用し、演算結果＝258で、飽和を使用可能にしていた場合、結果は演算の宛先レジスタに格納される前に255にクランプされることになる。同様に、演算結果＝−32999で、プロセッサ109が飽和を使用可能にして符号付きデータ形式を使用した場合、結果は演算の宛先レジスタに格納される前に−32768にクランプされることになる。
データ操作演算
本発明の一実施例では、標準CISC命令セット（アンパックドデータ演算）をサポートするだけでなくパックドデータのシフト演算もサポートすることによって、マルチメディア・アプリケーションのパフォーマンスを向上させる。このようなパックドデータ演算には、加算、減算、乗算、比較、シフト、AND、およびXORを含めることができる。しかし、これらの演算を十分に利用するためには、データ操作演算を組み込む必要があると判断されている。このようなデータ操作演算には、移動、パック、アンパックを含めることができる。移動、パック、およびアンパックは、プログラマにとってより使いやすい形式のパックドデータを生成することによって他の演算の実行を容易にする。
他のパック演算の詳細な背景については、1994年12月２日出願の特許出願第349、040号“Ａ  Microprocessor  Having  ａ  Compare  Operation"、1994年12月１日出願の特許出願第349、559号“Ａ  Microprocessor  Having  ａ  Multiply  Operation"、1994年12月11日出願の特許出願第349、730号“Ａ  Novel  Processor  Having  Shift  Operations"、1993年12月30日出願の特許出願第08/176132号“Ａ  Method  and  Apparatus  Using  Packed  Data  in  ａ  Processor"および1993年12月30日出願の特許出願第08/175772号“Ａ  Method  and  Apparatus  Using  Novel  Operations  in  ａ  Processor"を参照された。これらはすべて本発明の譲渡人に譲渡される。
移動演算
移動演算は、レジスタ209との間でデータを送受信する。一実施例では、SRC2  603がソース・データを含むアドレスであり、DEST605がデータの送り先のアドレスである。この実施例では、SRC1  602は使用しない。他の実施例では、SRC1  602はDEST605である。
移動演算の説明のために、レジスタと記憶場所との区別を設ける。レジスタはレジスタ・ファイル204内にあり、記憶場所はたとえばキャッシュ206,メイン・メモリ104、ROM106、データ記憶装置107内とすることができる。
移動演算によって、データを記憶場所からレジスタ209、レジスタ209から記憶場所、レジスタ209内のレジスタからレジスタ209内の第２のレジスタに移動することができる。一実施例では、パックドデータは整数データを記憶するために使用されるレジスタとは異なるレジスタに格納される。この実施例では、移動演算によって整数レジスタ201からレジスタ209にデータを移動することができる。たとえば、プロセッサ109において、レジスタ209にパックドデータが格納され、整数レジスタ201に整数データが格納されている場合、移動命令を使用して整数レジスタ201からレジスタ209にデータを移動したり、その逆を行ったりすることができる。
一実施例では、移動のためにメモリ・アドレスを示すと、記憶場所（最下位バイトを示す記憶場所）にある８バイトのデータがレジスタ209内のレジスタにロードされるかまたはそのレジスタから格納される。レジスタ209内のレジスタが示された場合、そのレジスタの内容がレジスタ209内の第２のレジスタに移動されるかまたはそこからロードされる。整数レジスタ201が64ビット長であって、整数レジスタを指定した場合、そのレジスタ内の８バイトのデータがレジスタ209内のレジスタにロードされるかまたはそのレジスタから格納される。
一実施例では、整数は32ビットで表される。レジスタ209から整数レジスタ201への移動演算を行う場合、パックドデータの下位32ビットだけが指定された整数レジスタに移動される。一実施例では、上位32ビットはゼロにされる。同様に、整数レジスタ201からレジスタ209への移動を実行すると、レジスタ209内のレジスタの下位32ビットだけがロードされる。一実施例では、プロセッサ109はレジスタ209内のレジスタとメモリとの間の32ビットの移動演算をサポートする。他の実施例では、パックドデータの上位32ビットに対して32ビットのみの移動が行われる。
パック演算
本発明の一実施例では、SRC1  602レジスタにデータ（Source1）が入れられ、SRC2  603レジスタにデータ（Source2）が入れられ、DEST605レジスタには演算の結果データ（Result）が入れられる。すなわち、Source1の部分とSource2の部分が一緒にパックされて結果が生成される。
一実施例では、パック演算は、ソース・パックドワード（またはダブルワード）の下位バイト（またはワード）をResultのバイト（またはワード）にパックすることによって、パックドワード（またはダブルワード）がパックドバイト（またはワード）に変換する。一実施例では、パック演算によって、クワッド・パックドワードがパックドダブルワードに変換される。この演算は、任意選択により符号付きデータを使用して行うことができる。さらにこの演算は、任意選択により飽和を使用して行うことができる。
第７図に、パックドデータに対してパック演算を行う方法の一実施例を示す。この実施例は、第２図のプロセッサ109で実施することができる。
ステップ701で、プロセッサ109が受け取った制御信号207をデコーダ202がデコードする。したがって、デコーダ202は、適切なシフト演算の命令コードと、レジスタ209内のSRC1  602、SRC2  603、およびDEST605アドレスと、飽和／非飽和と、符号付き／無符号と、パックドデータ内のデータ要素の長さとをデコードする。前述のように、SRC1  602（またはSRC2  603）をDEST605として使用することができる。
ステップ702で、SRC1  602アドレスとSRC2  603アドレスが与えられた場合、内部バス205を介してデコーダ202がレジスタ・ファイル204内のレジスタ209にアクセスする。レジスタ209は機能ユニット203にSRC1  602レジスタに格納されているパックドデータ（Source1）とSRC2  603レジスタに格納されているパックドデータ（Source2）を供給する。すなわち、レジスタ209は、パックドデータを内部バス205を介して機能ユニット203に伝達する。
ステップ703で、デコーダ202は機能ユニット203が適切なパック演算を実行することができるようにする。デコーダ202は、さらに、内部バス205を介して飽和とSource1内およびSource2内のデータ要素のサイズも伝達する。任意選択で飽和を使用して、結果データ要素内のデータの値を最大化する。Source1またはSource2内のデータ要素の値が、Resultのデータ要素が表すことができる値の範囲より大きいかまたは小さい場合、それに対応する結果データ要素がその最高値または最低値に設定される。たとえば、Source1およびSource2のワード・データ要素内の符号付き値が０×80（またはダブルワードの場合は０×8000）よりも小さい場合、結果のバイト（またはワード）データ要素が０×80（またはダブルワードの場合は０×8000）にクランプされる。Source1およびSource2のワード・データ要素内の符号付き値が０×7F（またはダブルワードの場合は０×7FFF）よりも大きい場合は、結果のバイト（またはワード）データ要素が０×7F（または０×7FFF）にクランプされる。
ステップ710で、データ要素のサイズによって次にどのステップを実行するかが決まる。データ要素のサイズが16ビット（パックドワード502データ）の場合、機能ユニット203はステップ712を実行する。しかしパックドデータ内のデータ要素のサイズが32ビット（パックドダブルワード503データ）の場合、機能ユニット203はステップ714を実行する。
ソース・データ要素のサイズが16ビットであると仮定すると、ステップ712が実行される。ステップ712では、以下のように行う。Source1のビット７〜０はResultのビット７〜０である。Source1のビット23〜６はResultのビット15〜８である。Source1のビット39〜32はResultのビット23〜16である。Source1のビット63〜56はResultのビット31〜24である。Source2のビット７〜０はResultのビット39〜32である。Source2のビット23〜16はResultのビット47〜40である。Source2のビット39〜32はResultのビット55〜48である。Source2のビット63〜56はResultのビット31〜24である。飽和を設定した場合は、Resultデータ要素をクランプすべきかどうかを判断するために各ワードの上位ビットが検査される。
ソース・データ要素のサイズが32ビットであると仮定すると、ステップ714が実行される。ステップ714では、以下のように行われる。Source1のビット15〜０はResultのビット15〜０である。Source1のビット47〜32はResultのビット31〜16である。Source2のビット15〜０はResultのビット47〜32である。Source2のビット47〜32はResultのビット63〜48である。飽和を設定した場合は、Resultデータ要素をクランプすべきかどうかを判断するために各ダブルワードの上位ビットが検査される。
一実施例では、ステップ712のパック演算が同時に行われる。しかし、他の実施例では、このパック演算は順次に行われる。他の実施例では、このパック演算の一部が同時に行われ、一部は順次に行われる。これは、ステップ714のパック演算にも適用される。
ステップ720で、ResultがDEST605レジスタに格納される。
表２に、飽和を使用しないパック無符号ワード演算のレジスタ内表現を示す。最初の行のビットはSource1のパックドデータ表現である。２番目の行のビットはSource2のデータ表現である。３番目の行のビットはResultのパックドデータ表現である。各データ要素ビットの下の数字はデータ要素番号である。たとえば、Source1データ要素３は100000002である。
0003615222.tif 000003
表３に、飽和を使用したパック符号ダブルワード演算のレジスタ内表現を示す。
0003615222.tif 000004
パック回路
本発明の一実施例では、パック演算の効率的な実行を実現するために並列処理を使用する。第8a図および第8b図に、パックドデータに対するパック演算を行う回路の一実施例を示す。
第8a図および第8b図の回路は、演算制御回路800と、結果レジスタ852と、結果レジスタ853と、８個の16ビットから８ビットの飽和検査回路と、４個の32ビットから16ビットの飽和検査回路を備える。
演算制御回路800は、デコーダ202から情報を受け取ってパック演算を可能にする。演算制御回路800は飽和値を使用して各飽和検査回路の飽和検査を可能にする。ソース・パックドデータのサイズがワード・パックドデータ503の場合、演算制御回路800によって出力イネーブル831が設定される。これによって出力レジスタ852の出力がイネーブルにされる。ソース・パックドデータのサイズがダブルワード・パックドデータ504の場合、演算制御回路800によって出力イネーブル832が設定される。これによって、出力レジスタ853の出力がイネーブルにされる。
各飽和検査回路は飽和を選択的に検査することができる。飽和の検査を使用不能にした場合、各飽和検査回路はただ下位ビットを通過させて結果レジスタ内の対応する位置に入れるだけである。飽和の検査を使用可能にした場合、各飽和検査回路は上位ビットを検査して結果をクランプすべきかどうかを判断する。
飽和検査回路810ないし817は16ビットの入力と８ビットの出力を有する。８ビットの出力は入力の下位８ビットか、または任意選択によりクランプ値（０×80、０×7F、または０×FF）である。飽和検査回路810は、Source1のビット15ないし０を受け取り、結果レジスタ852に対するビット７ないし０を出力する。飽和検査回路811は、Source1のビット31ないし16を受け取り、結果レジスタ852に対するビット15ないし８を出力する。飽和検査回路812は、Source1のビット47ないし32を受け取り、結果レジスタ852に対するビット23ないし16を出力する。飽和検査回路813は、Source1のビット63ないし48を受け取り、結果レジスタ852に対するビット31ないし24を出力する。飽和検査回路814は、Source2のビット15ないし０を受け取り、結果レジスタ852に対するビット39ないし32を出力する。飽和検査回路815は、Source2のビット31ないし16を受け取り、結果レジスタ852に対するビット47ないし40を出力する。飽和検査回路816は、Source2のビット47ないし32を受け取り、結果レジスタ852に対するビット55ないし48を出力する。飽和検査回路817は、Source2のビット63ないし48を受け取り、結果レジスタ852に対するビット63ないし56を出力する。
飽和検査回路820ないし飽和検査回路823は、32ビットの入力と16ビットの出力を有する。16ビットの出力は、入力の下位16ビットか、または任意選択によりクランプ値（０×8000、０×7FFF、または０×FFFF）である。飽和検査回路820は、Source1のビット31ないしゼロを受け取り、結果レジスタ853に対するビット15ないし０を出力する。飽和検査回路812がSource1のビット63ないし32を受け取り、結果レジスタ853に対するビット31ないし16を出力する。飽和検査回路822は、Source2のビット31ないし０を受け取り、結果レジスタ853に対するビット47ないし32を出力する。飽和検査回路823は、Source2のビット63ないし32を受け取り、結果レジスタ853に対するビット63ないし48を出力する。
たとえば、表４に飽和を使用しない無符号パックドワードを示す。演算制御回路800は、結果レジスタ852が結果［63:0］860を出力することができるようにする。
0003615222.tif 000005
しかし、飽和なしの無符号パックドダブルワード演算を行う場合、演算制御回路800は結果レジスタ853が結果［63:0］860を出力することができるようにする。表５にこの結果を示す。
0003615222.tif 000006
アンパック演算
一実施例では、アンパック演算によって、２つのソース・パックドデータの下位パックドバイト、ワード、またはダブルワードをインタリーブして、結果のパックドバイト、ワード、またはダブルワードを生成する。
第９図に、パックドデータに対するアンパック演算を行う方法の一実施例を示す。この実施例は、第２図のプロセッサ109において実施することができる。
先にステップ701およびステップ702が実行される。ステップ903で、デコーダ202がアンパック演算を行うように機能ユニット203を使用可能にする。デコーダ202は内部205を介してSource1およびSource2内のデータ要素のサイズを伝達する。
ステップ910で、このデータ要素のサイズによって次にどのステップを実行するかが決まる。データ要素のサイズが８ビット（パックドバイト501データ）の場合、機能ユニット203はステップ712を実行する。しかし、パックドデータ内のデータ要素のサイズが16ビット（パックドワード502データ）の場合、機能ユニット203はステップ714を実行する。しかし、パックドデータ内のデータ要素のサイズが32ビット（パックドダブルワード503データ）の場合、機能ユニット203はステップ716を実行する。
ソース・データ要素のサイズが８ビットであると仮定すると、ステップ172が実行される。ステップ712では以下のように行われる。Source1のビット７〜０はResultのビット７〜０である。Source2のビット７〜０はResultのビット15〜８である。Source1のビット15〜８はResultのビット23〜16である。Source2のビット15〜８はResultのビット31〜24である。Source1のビット23〜16はResultのビット39〜22である。Source2のビット23〜16はResultのビット47〜40である。Source1のビット31〜24はResultのビット55〜48である。Source2のビット31〜24はResultのビット63〜56である。
ソース・データ要素のサイズが16ビットであると仮定すると、ステップ714が実行される。ステップ714では以下のように行われる。Source1のビット15〜０はResultのビット15〜０である。Source2のビット15〜０はResultのビット31〜16である。Source1のビット31〜16はResultのビット47〜32である。Source2のビット31〜16はResultのビット63〜48である。
ソース・データ要素のサイズが32ビットであると仮定すると、ステップ716が実行される。ステップ716では以下のように行われる。Source1のビット31〜０がResultのビット31〜０である。Source2のビット31〜０がResultのビット63〜32である。
一実施例では、ステップ712のアンパック演算が同時に行われる。しかし、他の実施例では、このアンパック演算は順次に行われる。他の実施例では、このアンパック演算の一部が同時に行われ、一部は順次に行われる。これは、ステップ714および716のアンパック演算にも適用される。
ステップ720で、ResultがDEST605レジスタに格納される。
表６に、アンパック・バイト演算のレジスタ内表現を示す。
0003615222.tif 000007
表７に、アンパック・ワード演算のレジスタ内表現を示す。
0003615222.tif 000008
表８に、アンパック・ダブルワード演算のレジスタ内表現を示す。
0003615222.tif 000009
アンパック回路
本発明の一実施例では、アンパック演算の効率的な実行を実現するために並列処理を使用する。第10図に、パックドデータに対するアンパック演算を実行することができる回路の一実施例を示す。
第10図の回路は、演算制御回路800と結果レジスタ1052と結果レジスタ1053と結果レジスタ1054とを備える。
演算制御回路800は、デコーダ202からアンパック演算をイネーブルにする情報を受け取る。ソース・パックドデータのサイズがバイト・パックドデータ502の場合、演算制御回路800によって出力イネーブル1032が設定される。これによって、結果レジスタ1052の出力がイネーブルにされる。ソース・パックドデータのサイズがワード・パックドデータ503の場合、演算制御回路800によって出力イネーブル1033が設定される。これによって出力レジスタ1053の出力がイネーブルにされる。ソース・パックドデータのサイズがダブルワード・パックドデータ504の場合、演算制御回路800によって出力イネーブル1034が設定される。これによって、出力結果レジスタ1054の出力がイネーブルにされる。
結果レジスタ1052は以下の入力を有する。Source1のビット７〜０は結果レジスタ1052のビット７〜０である。Source2のビット７〜０は結果レジスタ1052のビット15〜８である。Source1のビット15〜８は結果レジスタ1052のビット23〜16である。Source2のビット15〜８は結果レジスタ1052のビット31〜24である。Source1のビット23〜16は結果レジスタ1052のビット39〜32である。Source2のビット23〜16は結果レジスタ1052のビット47〜40である。Source1のビット31〜24は結果レジスタ1052の55〜48である。Source2のビット31〜24は結果レジスタ1052のビット63〜56である。
結果レジスタ1053は以下の入力を有する。Source1のビット15〜０は結果レジスタ1053の15〜０である。Source2のビット15〜０は結果レジスタ1053の31〜16である。Source1のビット31〜16は結果レジスタ1053のビット47〜32である。Source2のビット31〜16は結果レジスタ853のビット63〜48である。
結果レジスタ1054は以下の入力を有する。Source1のビット31〜０は結果レジスタ1054のビット31〜０である。Source2のビット31〜０は結果レジスタ1054のビット63〜32である。
たとえば、表９ではアンパック・ワード演算が実行される。演算制御回路800は結果レジスタ1053が結果［63:0］860を出力することができるようにする。
0003615222.tif 000010
しかし、アンパック・ダブルワード演算を行う場合、演算制御回路800は結果レジスタ1054が結果［63:0］860を出力することができるようにする。表10にその結果を示す。
0003615222.tif 000011
したがって、移動演算、パック演算、およびアンパック演算によってマルチメディア・データ要素を操作することができる。従来技術のプロセッサでは、これらのタイプの操作を行うために、単一のパック移動演算、パック演算、またはアンパック演算を行うために複数の別々の演算を実行する必要がある。一実施例では、パックドデータ演算のためのデータ線はすべて関係のあるデータを伝送する。これによって、コンピュータ・システムのパフォーマンスが向上する。
【図１】
0003615222.tif 000012
【図６ａ】
0003615222.tif 000013
【図２】
0003615222.tif 000014
【図４ｂ】
0003615222.tif 000015
【図３】
0003615222.tif 000016
【図４ａ】
0003615222.tif 000017
【図４ｃ】
0003615222.tif 000018
【図４ｄ】
0003615222.tif 000019
【図５ａ】
0003615222.tif 000020
【図５ｂ】
0003615222.tif 000021
【図５ｃ】
0003615222.tif 000022
【図５ｄ】
0003615222.tif 000023
【図６ｂ】
0003615222.tif 000024
【図７】
0003615222.tif 000025
【図８ａ】
0003615222.tif 000026
【図８ｂ】
0003615222.tif 000027
【図９】
0003615222.tif 000028
【図１０】
0003615222.tif 000029