(57)【要約】      （修正有）【課題】パックされたデータ・タイプに対するシフト演算の実行を可能にする。【解決手段】第２の複数のデータ要素を有する第２のパックされたデータを生成するために第１の複数のデータ要素を有する第１のパックされたデータをシフトカウントだけシフトするシフターと、前記第２の複数のデータ要素のそれぞれの少なくとも１つの数字を置換する補正回路であって、シフトされたデータ要素のいずれのデータ要素においても当該データ要素に対応するすべての置換された数字が同じ値の数字に置換される補正回路とを設けた。【選択図】図１
2006172486.tif 000002
【特許請求の範囲】
【請求項１】
第２の複数のデータ要素を有する第２のパックされたデータを生成するために第１の複数のデータ要素を有する第１のパックされたデータをシフトカウントだけシフトするシフターと；
前記第２の複数のデータ要素のそれぞれの少なくとも１つの数字を置換する補正回路であって、シフトされたデータ要素のいずれのデータ要素においても当該データ要素に対応するすべての置換された数字が同じ値の数字に置換される補正回路とを備え、
前記補正回路が、さらに、前記第１、第２の複数のデータ要素の長さを設定するとともに前記シフトカウントを多ビットで表された複数の値のいずれかの値に設定するよう動作させる制御信号に応答するよう構成されていることを特徴とする装置。
【請求項２】
複数のデータ要素の長さを設定可能であるとともにシフトカウントを多ビットで表された複数の値のいずれかの値に設定可能な制御命令に応答して前記複数のデータ要素を前記シフトカウントだけシフトするシフト回路と；
第１の値を有する少なくとも１つの置換数字を複数のデータ要素の１つについて生成し、複数のデータ要素の１つに対応しかつ前記少なくとも１つの置換数字からの置換数字を含む被シフトデータ要素を生成するために前記シフト回路に結合された補正回路と
を備えることを特徴とするデジタル処理装置。
【請求項３】
制御信号を受信し、かつ、この制御信号がパックされたシフト命令フォーマットを含む場合はパックされたシフト演算を示すデコーダと；
前記パックされたシフト命令フォーマットにより長さが設定されるとともにシフトカウントが多ビットで表された複数の値のいずれかの値に設定される１組のデータ要素を有する第１のパックされたデータを保持する記憶位置と；
パックされたシフト演算に応答して第１のパックされたデータを前記シフトカウントだけシフトするシフト回路と；
１組のデータ要素の第１のソース・データ要素について第１の置換数字を生成し、第１のソース・データ要素に対応するシフトされた第１の宛先データ要素を生成するためにシフト回路に結合された回路であって、シフトされた第１の宛先データ要素が第１の置換数字を含んでいる補正回路と
を備えることを特徴とするデジタル処理装置。
【請求項４】
制御信号を受信し、かつ、該制御信号が１組のデータ要素の長さを設定するとともにシフトカウントを多ビットで表された複数の値のいずれかの値に設定するよう動作可能なパックされたシフト命令フォーマットを有する場合に該１組のデータ要素に関するパックされたシフト演算を示すデコーダと；
パックされたシフト演算に応答して前記１組のデータ要素を前記シフトカウントだけシフトし、かつ、１組のデータ要素の第１の初期符号値を有する第１のデータ要素に対応する第１の２進置換数字を生成するユニットであって、第１のデータ要素について生成された第１の２進置換数字が、シフトされた第１のデータ要素の高位の２進数字を第１の初期符号値で満たす、またはシフトされた第１のデータ要素の低位の２進数字をゼロの値で満たすためのものであり、かつ、第１の２進置換数字を含むシフトされた第１のデータ要素を生成するためのものである機能ユニットとを備えることを特徴とするデジタル処理装置。
【請求項５】
第１の命令をデコードするように動作可能なデコーダであって、前記命令が、複数のパックされたデータ要素を有する一連の第１のパックされたデータに対して実行されるべきシフト演算を指定するように動作可能であり、さらに、前記一連のパックされたデータに含まれるデータ要素の可変のサイズを指定するとともにシフトカウントを多ビットで表された複数の値のいずれかの値に設定するように動作可能なデコーダと；
前記デコーダに結合され、前記第１の命令に応答して前記複数のパックされたデータ要素を前記シフトカウントだけ独立してシフトするように動作可能な回路と
を備えることを特徴とするプロセッサ。
【請求項６】
パックされたデータをシフトするコンピュータで実施される方法であって、
ａ）第１の複数のパックされたデータ要素を有する一連の第１のパックされたデータに対して実行されるべきシフト演算を指定し、さらに前記一連のパックされたデータに含まれるパックされた各データ要素の可変のサイズを指定するとともにシフトカウントを多ビットで表された複数の値のいずれかの値に設定する第１の命令をデコードするステップと；
ｂ）前記第１の複数のパックされたデータ要素を前記シフトカウントだけ独立してシフトするステップと
を含むことを特徴とするデジタル処理方法。
【請求項７】
前記複数のパックされたデータ要素は、各々３２ビットの２つのパックされたダブルワードを含むことを特徴とする請求項６記載の方法。
【請求項８】
前記一連のパックされたデータは、１６ビットのデータ要素を有するパックされたワードを示すことを特徴とする請求項６記載の方法。
【請求項９】
前記シフトするステップは、前記複数のパックされたデータ要素の独立した論理シフトを有し、かつパックされた各データ要素におけるシフト・カウントに対応するビットをゼロで満たすことを特徴とする請求項６〜８のいずれか１項に記載の方法。
【請求項１０】
前記シフトするステップは、前記複数のパックされたデータ要素の独立した算術シフトを有し、かつパックされた各データ要素における前記シフト・カウントに対応するビットを当該各データ要素に対する符号ビットで満たすことを特徴とする請求項６〜８のいずれか１項に記載の方法。
【請求項１１】
パックされたバイト・データに対する７、またはパックされたワード・データに対する１５、あるいはパックされたダブルワード・データに対する３１より大きい前記シフト・カウントが、パックされた各データ要素に、当該各データ要素に対する符号ビットを満たすようにすることを特徴とする請求項１０に記載の方法。
【請求項１２】
前記第１の複数のパックされたデータ要素の各々を独立にシフトすることにより生成される第２の複数のパックされたデータ要素を有する一連のパックされたデータにより、前記一連のパックされたデータを上書きすることを特徴とする請求項６〜１１のいずれか１項に記載の方法。
【請求項１３】
第１の複数のパックされたデータ要素を格納することができる第１の格納場所と、
多ビットで表された複数の値のいずれかの値に設定される、シフト・カウントを格納することができる第２の格納場所と、
前記第１、第２の格納場所にアクセス可能なデコーダと、
少なくとも１つの命令を表すデータを格納可能であるとともに、該少なくとも１つの命令を前記デコーダに出力可能な第３の格納場所と、
パックされたデータのシフト回路とを備え、
第１の複数のパックされたデータ要素を有し、かつ前記第１の格納場所に格納された一連の第１のパックされたデータに対して実行されるべきシフト演算を指定し、さらに前記一連のパックされたデータに含まれるパックされた各データ要素の可変のサイズを指定する第１の命令を、前記デコーダがデコードし、；
前記第１の複数のパックされたデータ要素を、前記第２の格納場所に格納されたシフト・カウントだけシフトするコンピュータ実施装置。
【請求項１４】
前記パックされたシフト命令フォーマットは前記１組のデータ要素の第１の長さを少なくとも６４ビットまたは前記１組のデータ要素の第２の長さを６４ビットより短い長さに設定するよう動作可能に構成されているとともに、同じ単一のシフト回路と補正回路とが前記第１の長さのデータ要素及び第２の長さのデータ要素に対してパックされたシフト演算を実行するよう構成したことを特徴とする請求項３記載の装置。
【請求項１５】
前記パックされたシフト命令フォーマットは３以上のバイトを有し、その第３のバイトが第１の３ビット・ソース−宛先アドレスと第２の３ビット・ソースアドレスを保持可能であることを特徴とする請求項３または１４のいずれか１項に記載の装置。
【請求項１６】
前記パックされたシフト命令フォーマットは３以上のバイトを有し、その第１、第２のバイトが、前記１組のデータ要素に対して１６ビット、３２ビットまたは６４ビット要素の論理または算術右シフトを実行するための、パックされたシフト演算を指定する演算コードを保持可能であることを特徴とする請求項３、１４または１５のいずれか１項に記載の装置。
【請求項１７】
前記パックされたシフト命令フォーマットは、
前記パックされたシフト演算のオプコードを指定する第１フィールドと、
第１のパックされたデータを保持する記憶場所に対する最初の３ビットソース・アドレスを示す第２フィールドと、
前記シフト・カウントを示す第３フィールドと
を有することを特徴とする請求項４記載の装置。
【請求項１８】
前記第３フィールドは、即値をシフト・カウントとして指定できるよう前記パックされたシフト演算のためのオプコードに対して３ビット拡張されていることを特徴とする請求項１７記載の装置。
【請求項１９】
前記第３フィールドは、シフト・カウントを保持する記憶場所を示す第２の３ビット・ソースアドレスであることを特徴とする請求項１７記載の装置。
【請求項２０】
前記パックされたシフト命令フォーマットは前記データの長さを１６ビット、３２ビットまたは６４ビットに設定可能であり、同じ単一の機能ユニットが前記１６ビット、３２ビットまたは６４ビット長のデータ要素に対してパックされたシフト演算を実行することを特徴とする請求項４、１７、１８または１９のいずれか１項に記載された装置。
【請求項２１】
前記第１の命令は、さらに、データ要素の第１のサイズを６４ビットに、データ要素の第２のサイズを１６ビットまたは３２ビットに指定可能であり、前記第１のサイズが指定されたときにデータ要素をシフトするために前記デコーダに接続された同じ回路が、第２のサイズが指定されたときに対してもデータ要素をシフト可能であることを特徴とする請求項５記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、単一の制御信号を使用して複数のデータ要素を操作する算術演算（オペレーション）を行う装置および方法に関する。本発明は、パックされたデータ・タイプに対するシフト演算の実行を可能にする。
【背景技術】
【０００２】
現在、ほとんどのパーソナル・コンピュータ・システムは１つの命令によって演算（オペレーション）を行って１つの結果を出す。命令の実行速度とプロセッサ命令の複雑さを増すことによって、パフォーマンスの向上が実現され、これは複雑命令セット・コンピュータ（ＣＩＳＣ）と呼ばれる。米国カリフォルニア州サンタクララのインテル・コーポレイションが販売するＩｎｔｅｌ８０２８６TMマイクロプロセッサのようなプロセッサがＣＩＳＣプロセッサの範疇に入る。
【０００３】
以前のコンピュータ・システム・アーキテクチャは、ＣＩＳＣの概念を利用するように最適化されていた。そのようなシステムは一般に、３２ビット幅のデータ・バスを持つ。しかし、コンピュータ・サポーテッド・コオペレーション（ＣＳＣ：電子会議と混在メディア・データ操作を統合したもの）、二次元／三次元グラフィックス、画像処理、ビデオ圧縮／圧縮解除、認識アルゴリズム、および音声操作を対象にしたアプリケーションによって、パフォーマンス向上の必要が増す。しかし、命令の実行速度と複雑さを増すことが唯一の解決策である。
【０００４】
これらのアプリケーションの１つの一般的な点は、数ビットだけが重要な、大量のデータを操作することが多いことである。すなわち、意味のあるビットがデータ・バスのサイズよりもはるかに少ないビット数で表されるデータである。たとえば、プロセッサは８ビットおよび１６ビットのデータ（たとえばビデオ画像における画素の色成分）に対して多くの演算を実行するが、それよりかなり広いデータ・バスとレジスタを有する。したがって、３２ビットのデータ・バスとレジスタを有し、これらのアルゴリズムの１つを実行するプロセッサは、データの先頭８ビットだけが重要であるので、そのデータの処理、伝送、および記憶容量の最大７５パーセントが無駄になることがある。
したがって、操作するデータを表すのに必要なビット数とプロセッサの実際のデータ伝送および記憶容量との差をより効率的に使用することによってパフォーマンスを向上させるプロセッサが望ましい。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
したがって、操作するデータを表すのに必要なビット数とプロセッサの実際のデータ伝送および記憶容量との差をより効率的に使用することによってパフォーマンスを向上させるプロセッサが望ましい。
【課題を解決するための手段】
【０００６】
複数のデータ要素に対して作用するシフト演算を有するプロセッサについて説明する。
このプロセッサは、制御信号を受信するように結合されたデコーダを備える。制御信号は、第１のソース・アドレスと、第２のソース・アドレスと、宛先アドレスと、命令フィールドとを有する。第１のソース・アドレスは第１の場所に対応する。第２のソース・アドレスは第２の場所に対応する。宛先アドレスは第３の場所に対応する。演算フィールドは、あるタイプのパックされたデータのシフト演算を行うことを示す。プロセッサはさらに、デコーダに結合された回路を備える。この回路は、第１の場所に格納された第１のパックされたデータを第２の場所に格納された値によってシフトする回路である。この回路はさらに、対応するパックされた結果データを第３の場所に伝達する。
本説明および図には多くの詳細が含まれるが、本発明は請求の範囲によって定義される。本発明には、それらの請求の範囲に記載されている限定だけが適用される。
【発明を実施するための最良の形態】
【０００７】
複数のデータ要素に対して作用するシフト演算を有するプロセッサについて説明する。以下の説明では、本発明を十分に理解することができるように、回路などの多くの特定の詳細を記載する。他の場合には、本発明が無用に不明瞭にならないように、周知の構造および技法については詳細に示さない。
【０００８】
本発明の実施態様の説明を理解する基礎となるように、以下のように定義を示す。
ビットＸないしビットＹ：二進数のサブフィールドを規定する。たとえば、                    （基数２で示した）バイト００１１１０１０2 のビット６ないしビット０は、          １１１０１０2 のサブフィールドを表す。二進数の後の「２」は基数２を示            す。したがって、１０００2 は８10に等しく、Ｆ16は１５10に等しい。
Ｒx ：  レジスタである。レジスタは、データの記憶と供給を行うことができる任意の          素子である。レジスタの他の機能については後述する。レジスタはプロセッサ          のパッケージの一部であるとは限らない。
ＤＥＳＴ：データ・アドレスである。
ＳＲＣ１：データ・アドレスである。  
ＳＲＣ２：データ・アドレスである。
【０００９】
結果：  ＤＥＳＴによってアドレス指定されたレジスタに格納されるデータである。
ソース１：ＳＲＣ１によってアドレス指定されたレジスタに格納されているデータで
ある。
ソース２：ＳＲＣ２によってアドレス指定されたレジスタに格納されているデータで
ある。
【００１０】
コンピュータ・システム
第１図を参照すると、本発明の実施形態を実施することができるコンピュータ・システムが、コンピュータ・システム１００として図示されている。コンピュータ・システム１００は、情報を伝送するバス１０１またはその他の通信ハードウェアおよびソフトウェアと、バス１０１に結合された情報を処理するプロセッサ１０９とを備える。コンピュータ・システム１００はさらに、バス１０１に結合され、プロセッサ１０９によって実行される情報と命令を記憶するランダム・アクセス・メモリ（ＲＡＭ）またはその他のダイナミック記憶装置（メイン・メモリ１０４と呼ぶ）を備える。メイン・メモリ１０４は、プロセッサ１０９による命令の実行中に変数またはその他の中間情報を一時的に記憶するためにも使用することができる。コンピュータ・システム１００は、バス１０１に結合され、プロセッサ１０９のための静的情報および命令を記憶する読取り専用メモリ（ＲＯＭ）１０６またはその他のスタティック記憶装置あるいはその両方も備える。バス１０１には情報と命令を記憶するデータ記憶装置１０７が結合されている。
【００１１】
さらに、コンピュータ・システム１００には磁気ディスクや光ディスクなどのデータ記憶装置１０７とそれに対応するディスク・ドライブを結合することができる。コンピュータ・システム１００は、コンピュータ・ユーザに情報を表示するためにバス１０１を介して表示装置１２１にも結合することができる。表示装置１２１は、フレーム・バッファ、専用グラフィックス・レンダリング装置、陰極線管（ＣＲＴ）、フラット・パネル・ディスプレイを含むことができる。プロセッサ１０９に情報とコマンド選択を伝えるために、英数字およびその他のキーを備える英数字入力装置１２２が、典型的にはバス１０１に結合されている。他のタイプのユーザ入力装置は、プロセッサ１０９に指示情報とコマンド選択を伝え、表示装置１２１上のカーソル移動を制御する、マウス、トラックボール、ペン、タッチ画面、カーソル指示キーなどのカーソル制御装置１２３である。この入力装置は一般に、第１の軸（たとえばｘ）と第２の軸（たとえばｙ）の２つの軸に２つの自由度を持ち、それによってこの装置は平面内の位置を指定することができる。しかし、本発明は、２つの自由度しかもたない入力装置には限定されない。
【００１２】
バス１０１に結合することができる他の装置は、命令、データ、またはその他の情報を、紙、フィルム、または同様のタイプの媒体などの媒体に印刷するために使用することができるハード・コピー装置１２４である。さらに、コンピュータ・システム１００は、情報を記録するためにマイクロホンに結合されたオーディオ・ディジタイザなど、録音または再生あるいはその両方のための装置１２５に結合することができる。さらに、この装置は、ディジタル化された音声を再生するためにディジタル−アナログ（Ｄ／Ａ）変換器に結合されたスピーカも含むことができる。
【００１３】
また、コンピュータ・システム１００は、コンピュータ・ネットワーク（たとえばＬＡＮ）内の端末とすることもできる。その場合、コンピュータ・システム１００は、いくつかのネットワーク化された装置を含むコンピュータ・システムのコンピュータ・サブシステムとなる。コンピュータ・システム１００は、任意選択としてビデオ・ディジタイジング装置１２６を備える。ビデオ・ディジタイジング装置１２６を使用して、ビデオ画像を捕らえ、それをコンピュータ・ネットワーク上の他の装置に送信することができる。
【００１４】
コンピュータ・システム１００は、コンピュータ・サポーテッド・コオペレーション（ＣＳＣ：電子会議と混在媒体データ操作とが統合されたもの）、二次元／三次元グラフィックス、画像処理、ビデオ圧縮／圧縮解除、認識アルゴリズム、および音声操作に対応するのに有用である。
【００１５】
プロセッサ
第２図にプロセッサ１０９の詳細図を示す。プロセッサ１０９は、ＢｉＣＭＯＳ、ＣＭＯＳ、ＮＭＯＳなどのいくつかの処理技法のいずれかを使用して、１つまたは複数の基板上に実装することができる。
【００１６】
プロセッサ１０９は、プロセッサ１０９が使用する制御信号とデータをデコードするデコーダ２０２を備える。その場合、データは内部バス２０５を介してレジスタ・ファイル２０４に格納することができる。明確に言えば、実施形態のレジスタは特定のタイプの回路にのみに限定されることを意味しない。むしろ実施形態のレジスタは、データの記憶および供給と、本明細書に記載の機能を実行することができればよい。
【００１７】
データは、データのタイプに応じて、整数レジスタ２０１、レジスタ２０９、状態レジスタ２０８、または命令ポインタ・レジスタ２１１に格納することができる。たとえば浮動小数点レジスタなど他のレジスタをレジスタ・ファイル２０４に含めることができる。一実施形態では、整数レジスタ２０１には、３２ビットの整数データが格納される。一実施形態では、レジスタ２０９にはＲ0 ２１２ａ〜Ｒ7 ２１２ｈの８個のレジスタが含まれる。レジスタ２０９内の各レジスタ長は６４ビットである。Ｒ1 ２１２ａ、Ｒ2 ２１２ｂ、およびＲ3 ２１２ｃがレジスタ２０９内の個々のレジスタの例である。レジスタ２０９内の３２ビットのレジスタを、整数レジスタ２０１内の整数レジスタに移動させることができる。同様に、整数レジスタ内の値をレジスタ２０９内の３２ビットのレジスタに移動させることができる。
【００１８】
状態レジスタ２０８は、プロセッサ１０９の状態を示す。命令ポインタ・レジスタ２１１には、次に実行される命令のアドレスが格納される。整数レジスタ２０１，レジスタ２０９、状態レジスタ２０８、および命令ポインタ・レジスタ２１１はすべて内部バス２０５に接続されている。内部バスには任意の追加のレジスタが接続される。
【００１９】
他の実施形態では、これらのレジスタのうちのいくつかは２つの異なるタイプのデータに使用することができる。たとえば、レジスタ２０９と整数レジスタ２０１を組み合わせて、各レジスタに整数データまたはパックされたデータを格納することができる。他の実施形態では、レジスタ２０９を浮動小数点レジスタとして使用することができる。この実施形態では、パックされたデータはレジスタ２０９または浮動小数点データに格納することができる。一実施形態では、組み合わされたレジスタの長さは６４ビットで、整数は６４ビットで表される。この実施形態では、パックされたデータと整数データを格納する際に、レジスタはその２つのデータ・タイプを区別する必要がない。
【００２０】
機能ユニット２０３は、プロセッサ１０９が行う演算を実行する。このような演算には、シフト、加算、減算、乗算などが含まれる。機能ユニット２０３は内部バス２０５に接続している。キャッシュ２０６は、プロセッサ１０９の任意選択要素であり、たとえばメイン・メモリ１０４からのデータまたは制御信号あるいはその両方をキャッシュするために使用される。キャッシュ２０６は、デコーダ２０２に接続され、制御信号２０７を受信するように接続されている。
【００２１】
第３図に、プロセッサ１０９の動作概要を示す。すなわち、第３図にはプロセッサ１０９がパックされたデータに対する演算、アンパックされたデータに対する演算、または他の何らかの操作を実行する間にたどるステップが示されている。たとえば、このような操作にはレジスタ・ファイル２０４内のレジスタに、キャッシュ２０６、メイン・メモリ１０４、読取り専用メモリ（ＲＯＭ）１０６、またはデータ記憶装置１０７からデータをロードする操作が含まれる。本発明の一実施形態では、プロセッサ１０９は、米国カリフォルニア州サンタクララのインテル・コーポレイションが販売するＩｎｔｅｌ８０４８６TMによってサポートされる命令のほとんどをサポートする。本発明の他の実施形態では、プロセッサ１０９は米国カリフォルニア州サンタクララのインテル・コーポレイションが販売するＩｎｔｅｌ８０４８６TMによってサポートされるすべての演算をサポートする。本発明の他の実施形態では、プロセッサ１０９は、すべて米国カリフォルニア州サンタクララのインテル・コーポレイションが販売するＰｅｎｔｉｕｍ（登録商標）TMプロセッサ、Ｉｎｔｅｌ８０４８６TMプロセッサ、８０３８６TMプロセッサ、Ｉｎｔｅｌ８０２８６TMプロセッサ、およびＩｎｔｅｌ８０８６TMプロセッサによってサポートされるすべての演算をサポートする。本発明の他の実施形態では、プロセッサ１０９は、米国カリフォルニア州サンタクララのインテル・コーポレイションが定義するＩＡTM（インテル・アーキテクチャ）でサポートされるすべての演算をサポートする（米国カリフォルニア州サンタクララのインテルから入手可能な「Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒｓ，Ｉｎｔｅｌ  Ｄａｔａ  Ｂｏｏｋｓ  ｖｏｌｕｍｅ１およびｖｏｌｕｍｅ２、１９９２年および１９９３年刊」を参照）。一般に、プロセッサ１０９はＰｅｎｔｉｕｍTMプロセッサの現行命令セットをサポートすることができるが、将来の命令と本明細書に記載の命令を組み込むように修正することもできる。重要なのは、汎用プロセッサ１０９が、本明細書に記載の演算に加えて、従来使用されていた演算をサポートすることができることである。
【００２２】
ステップ３０１で、デコーダ２０２がキャッシュ２０６またはバス１０１から制御信号２０７を受け取る。デコーダ２０２は、制御信号をデコードして、実行すべき演算を判断する。
【００２３】
ステップ３０２で、デコーダ２０２はレジスタ・ファイル２０４またはメモリ内の記憶場所にアクセスする。制御信号２０７で指定されたレジスタ・アドレスに応じて、レジスタ・ファイル２０４内のレジスタかメモリ内の記憶場所のどちらかにアクセスする。たとえば、パックされたデータに対する演算の場合、制御信号２０７にはＳＲＣ１、ＳＲＣ２、およびＤＥＳＴレジスタ・アドレスを含めることができる。ＳＲＣ１は第１のソース・レジスタのアドレスである。ＳＲＣ２は第２のソース・レジスタのアドレスである。すべての演算が２つのソース・アドレスを必要とするわけではないので、場合によってはＳＲＣ２アドレスは任意選択である。ＳＲＣ２アドレスが不要な場合、ＳＲＣ１アドレスのみが使用される。ＤＥＳＴは、結果データが格納される宛先レジスタのアドレスである。一実施形態では、ＳＲＣ１またはＳＲＣ２はＤＥＳＴとしても使用される。ＳＲＣ１、ＳＲＣ２、およびＤＥＳＴについては第６ａ図および第６ｂ図を参照しながら詳述する。対応するレジスタに格納されているデータをそれぞれＳｏｕｒｃｅ１、Ｓｏｕｒｃｅ２、およびＲｅｓｕｌｔと呼ぶ。これらの各データの長さは６４ビットである。
【００２４】
本発明の他の実施形態では、ＳＲＣ１、ＳＲＣ２、およびＤＥＳＴのいずれか１つまたは全部は、プロセッサ１０９のアドレス可能記憶空間内の記憶場所を規定することができる。たとえば、ＳＲＣ１はメイン・メモリ１０４内の記憶場所を識別し、ＳＲＣ２は整数レジスタ２０１内の第１のレジスタを識別し、ＤＥＳＴはレジスタ２０９内の第２のレジスタを識別する。本明細書では説明を簡単にするために、レジスタ・ファイル２０４へのアクセスについて言及するが、これらのアクセスはレジスタ・ファイル２０４の代わりにメモりに対して行うこともできる。
【００２５】
本発明の他の実施形態では、命令コードはＳＲＣ１とＳＲＣ２の２つのアドレスしか含まない。この実施形態では、演算の結果はＳＲＣ１レジスタまたはＳＲＣ２レジスタに格納される。すなわち、ＳＲＣ１（またはＳＲＣ２）をＤＥＳＴとして使用する。このタイプのアドレス指定は、２つのアドレスしか持たない以前のＣＩＳＣ命令に対応する。これによって、デコーダ２０２における複雑さが減少する。この実施形態では、ＳＲＣ１レジスタに含まれるデータを破壊してはならない場合、演算を実行する前にそのデータをまず別のレジスタにコピーしなければならないことに留意されたい。コピーには追加の命令が必要になる。本明細書では説明を簡単にするために、３アドレスのアドレス指定方式について説明する（すなわちＳＲＣ１、ＳＲＣ２、およびＤＥＳＴ）。しかし、一実施形態では制御信号にＳＲＣ１とＳＲＣ２しか含めることができず、ＳＲＣ１（またはＳＲＣ２）によって宛先レジスタを識別することを想起されたい。
【００２６】
制御信号が演算を必要とする場合、ステップ３０３で、機能ユニット２０３がレジスタ・ファイル２０４内のアクセス・データに対してその演算を実行するようにされる。機能ユニット２０３で演算が実行されると、ステップ３０４でその結果が制御信号２０７の要件に従ってレジスタ・ファイル２０４に戻されて格納される。
【００２７】
データ形式および記憶形式
第４ａ図に、第１図のコンピュータ・システムで使用可能なデータ形式をいくつか示す。これらのデータ形式は固定小数点である。プロセッサ１０９はこれらのデータ形式を操作することができる。マルチメディア・アルゴリズムはこれらのデータ形式を使用することが多い。バイト４０１は８ビットの情報を含む。ワード４０２は１６ビットの情報、すなわち２バイトを含む。ダブルワード４０３は３２ビットの情報、すなわち４バイトを含む。したがって、プロセッサ１０９はこれらの記憶データ形式のうちの任意の１つに対して操作を行うことができる制御信号を実行する。
【００２８】
以下の説明では、ビット、バイト、ワード、およびダブルワード・サブフィールドについて言及する。たとえば、（基数２で示す）バイト００１１１０１０2 のビット６ないしビット０はサブフィールド１１１０１０2 を表す。
【００２９】
第４ｂ図ないし第４ｄ図に、本発明の一実施形態で使用するレジスタ内表現を示す。たとえば、無符号バイトのレジスタ内表現４１０によって、整数レジスタ２０１内のレジスタに格納されているデータを表すことができる。一実施形態では、整数レジスタ２０１内のレジスタ長は６４ビットである。他の実施形態では、整数レジスタ２０１内のレジスタ長は３２ビットである。説明を簡単にするために、以下の説明では６４ビットの整数レジスタについて説明するが、３２ビットの整数レジスタを使用することもできる。
【００３０】
無符号バイトのレジスタ内表現４１０は、プロセッサ１０９が整数レジスタ２０１にバイト４０１を格納し、そのレジスタ内のビット７ないしビット０の先頭８ビットがそのデータ・バイト４０１専用であることを示している。これらのビットを｛ｂ｝と示す。このバイトを正しく表すには、残りの５６ビットがゼロでなければならない。符号付きバイトのレジスタ内表現４１１の場合、整数レジスタ２０１にはデータはビット６ないしビット０の最初の７ビットにデータとして格納される。７番目のビットは符号ビットを表し、｛ｓ｝で示す。残りのビット６３ないしビット８はそのバイトの符号の継続である。
【００３１】
無符号ワードのレジスタ内表現４１２は、レジスタ２０１のうちの１つのレジスタに格納される。ビット１５ないしビット０には、無符号ワード４０２が入れられる。これらのビットを｛ｗ｝で示す。このワードを正しく表すには、残りのビット６３ないしビット１６はゼロでなければならない。符号付きワード４０２は、符号付きワードのレジスタ内表現４１３が示すように、ビット１４ないしビット０に格納される。残りのビット６３ないしビット１５は符号フィールドである。
【００３２】
ダブルワード４０３は、無符号ダブルワードのレジスタ内表現４１４または符号付きダブルワードのレジスタ内表現４１５として格納することができる。無符号ダブルワードのレジスタ内表現４１４のビット３１ないしビット０がデータである。これらのビットを｛ｄ｝で示す。この無符号ダブルワードを正しく表すには、残りのビット６３ないしビット３２はゼロでなければならない。整数レジスタ２０１には、符号付きダブルワードのレジスタ内表現４１５が、そのビット３０ないしビット０に格納される。残りのビット６３ないしビット３１は符号フィールドである。
【００３３】
前述の第４ｂ図ないし第４ｄ図に示すように、データ・タイプによっては６４ビット幅のレジスタに格納するのは非効率的な格納方法である。たとえば、無符号バイトのレジスタ内表現４１０を格納する場合、ビット６３ないしビット８はゼロでなければならず、ビット７ないしビット０にしか非ゼロ・ビットを入れることができない。したがって、６４ビット・レジスタに１バイトを格納するプロセッサは、レジスタの容量の１２．５％しか使用しない。同様に、機能ユニット２０３によって実行される命令は始めの数ビットしか重要ではない。
【００３４】
第５ａ図に、パックされたデータのデータ形式を示す。パックされたバイト５０１、パックされワード５０２、パックされたダブルワード５０３の３つのパックされたデータ形式が図示されている。パックされたバイトは、本発明の一実施形態では６４ビット長であり、８個のデータ要素を含む。各データ要素は１バイト長である。一般に、データ要素は１つのレジスタ（または記憶場所）に同じ長さの他のデータ要素と共に格納される個々のデータである。本発明の一実施形態では、１つのレジスタに格納されるデータ要素の数は、６４ビットをデータ要素のビット長で割った商である。
【００３５】
パックされたワード５０２は６４ビット長であり、４個のワード４０２データ要素を含む。各ワード４０２データ要素は、１６ビットの情報を含む。
【００３６】
パックされたダブルワード５０３は６４ビット長であり、２個のダブルワード４０３データ要素を含む。各ダブルワード４０３データ要素は３２ビットの情報を含む。
【００３７】
第５ｂ図ないし第５ｄ図にレジスタ内にパックされたデータ記憶表現を示す。無符号のパックされたバイトのレジスタ内の表現５１０は、レジスタＲ0 ２１２ａ〜Ｒn ２１２ａｆのうちの１つにパックされたバイト５０１が格納されている様子を示している。各バイト・データ要素の情報は、バイト０はビット７ないしビット０に格納され、バイト１はビット１５ないしビット８、バイト２はビット２３ないしビット１６、バイト３はビット３１ないしビット２４，バイト４はビット３９ないしビット３２、バイト５はビット４７ないしビット４０、バイト６はビット５５ないしビット４８、バイト７はビット６３ないしビット５６に格納される。したがって、レジスタ内ですべての使用可能ビットが使用される。この記憶構成によって、プロセッサの記憶効率が向上する。また、８個のデータ要素にアクセスして、１つの操作を８個のデータ要素に同時に実行することができるようになる。符号付きパックされたバイトのレジスタ内表現５１１も同様にレジスタ２０９内のレジスタに格納される。どのバイト・データ要素でも８番目のビットのみが必要な符号ビットであり、他のビットは使用してもしなくても符号が示されることに留意されたい。
【００３８】
無符号のパックされたワードのレジスタ内表現５１２は、ワード３ないしワード０がレジスタ２０９のうちの１つのレジスタに格納される様子を示している。ビット１５ないしビット０にはワード０のデータ要素情報が入り、ビット３１ないしビット１６にはデータ要素ワード１の情報が入り、ビット４７ないしビット３２にはデータ要素ワード２の情報が入り、ビット６３ないしビット４８にはデータ要素ワード３の情報が入る。符号付きパックされたワードのレジスタ内表現５１３は無符号のパックされたワードのレジスタ内表現５１２と同様である。各ワード・データ要素の１６番目のビットにのみ、必要な符号標識が入ることに留意されたい。
【００３９】
無符号のパックされたダブルワードのレジスタ内表現５１４は、レジスタ２０９に２個のダブルワード・データ要素が格納される様子を示している。ダブルワード０はレジスタのビット３１ないしビット０に格納される。ダブルワード１はレジスタのビット６３ないしビット３２に格納される。符号付きパックされたダブルワードのレジスタ内表現５１５は無符号のパックされたダブルワードのレジスタ内表現５１４と同様である。必要な符号ビットはダブルワード・データ要素の３２番目のビットであることに留意されたい。
【００４０】
前述のように、レジスタ２０９はパックされたデータと整数データの両方に使用することができる。本発明のこの実施形態では、アドレス指定されたレジスタ、たとえばＲ1 ２１２ａにパックされたデータと単純整数／固定小数点データのどちらが格納されているかを追跡するために、個々のプログラミング・プロセッサ１０９が必要である。他の実施形態では、プロセッサ１０９はレジスタ２０９の個々のレジスタに格納されているデータのタイプを追跡することができる。この代替実施形態では、たとえば単純／固定小数点整数データに対してパックされた加算を行おうとした場合、エラーを生成することができる。
【００４１】
制御信号の形式
以下に、プロセッサ１０９がパックされたデータを操作するために使用する制御信号形式の一実施形態について説明する。本発明の一実施形態では、制御信号は３２ビットで表される。デコーダ２０２はバス１０１から制御信号２０７を受け取ることができる。他の実施形態では、デコーダ２０２はキャッシュ２０６からもそのような制御信号を受け取ることができる。
【００４２】
第６ａ図にパックされたデータを操作する制御信号の一般的な形式を示す。命令フィールドＯＰ６０１（ビット３１ないしビット２６）は、たとえば、パックされた加算、パックされた減算など、プロセッサ１０９によって実行される演算に関する情報を供給する。ＳＲＣ１  ６０２（ビット２５ないしビット２０）は、レジスタ２０９内のレジスタのソース・レジスタ・アドレスを供給する。このソース・レジスタは、制御信号の実行で使用される第１のパックされたデータＳｏｕｒｃｅ１を保持する。同様に、ＳＲＣ２  ６０３（ビット１９ないしビット１４）には、レジスタ２０９内のレジスタのアドレスが入れられる。この第２のソース・レジスタは、演算の実行時に使用されるパックされたデータＳｏｕｒｃｅ２を保持する。ＤＥＳＴ６０５（ビット５ないしビット０）にはレジスタ２０９内のレジスタのアドレスが入れられる。この宛先レジスタには、パックされたデータ演算のパックされた結果データＲｅｓｕｌｔが格納される。
【００４３】
制御ビットＳＺ６１０（ビット１２およびビット１３）は、第１および第２のパックされたデータ・ソース・レジスタ内のデータ要素の長さを示す。ＳＺ６１０が０１2 に等しい場合、パックされたデータはパックされたバイト５０１としてフォーマットされる。ＳＺ６１０が１０2 に等しい場合、パックされたデータはパックされたワード５０２としてフォーマットされる。しかし、００2 または１１2 と等しいＳＺ６１０を受け取った場合、他の実施形態では、これらの値のうちの１つを使用してパックされたダブルワード５０３を示すことができる。
【００４４】
制御ビットＴ６１１（ビット１１）は、演算を飽和モードで行うかどうかを示す。Ｔ６１１が１の場合、飽和演算が行われる。Ｔ６１１がゼロの場合、非飽和演算が行われる。飽和演算については後述する。
【００４５】
制御ビットＳ６１２（ビット１０）は、符号付き演算の使用を示す。Ｓ６１２が１の場合、符号付き演算が行われる。Ｓ６１２がゼロの場合、無符号演算が行われる。
【００４６】
第６ｂ図に、パックされたデータを操作する制御信号の第２の一般的形式を示す。この形式は、米国イリノイ州マウント・プロスペクトＰ．Ｏ．Ｂｏｘ７６４１インテル・コーポレイションのＬｉｔｅｒａｔｕｒｅ  Ｓａｌｅｓから入手可能な”ＰｅｎｔｉｕｍTM  Ｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ  Ｕｓｅｒ’ｓ  Ｍａｎｕａｌ”に記載されている汎用整数命令コード形式に対応する。ＯＰ６０１、ＳＺ６１０、Ｔ６１１、およびＳ６１２がすべて組み合わされて１つの大きなフィールドになることに留意されたい。制御信号によっては、ビット３ないし５がＳＲＣ１  ６０２となる。一実施形態では、ＳＲＣ１  ６０２アドレスがある場合、ビット３ないし５はＤＥＳＴ６０５にも対応する。ＳＲＣ２  ６０３アドレスが存在する一代替実施形態では、ビット０ないし２もＤＥＳＴ６０５に対応する。パックされたシフト即値演算のような他の制御信号の場合、ビット３ないし５は命令コード・フィールドの拡張部を表す。一実施形態では、この拡張部によってプログラマはシフト・カウント値などの即値を制御信号と共に組み込むことができる。一実施形態では、即値は制御信号の後に続く。これについては”ＰｅｎｔｉｕｍTM  Ｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ  Ｕｓｅｒ’ｓ  Ｍａｎｕａｌ”の付録ＦのＦ−１〜Ｆ−３ページに詳述されている。ビット０ないし２はＳＲＣ２  ６０３を表す。この汎用形式によって、レジスタからレジスタ、メモリからレジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタからメモリのアドレス指定を行うことができる。また、一実施形態では、この汎用形式は整数レジスタからレジスタと、レジスタから整数レジスタへのアドレス指定もサポートする。
【００４７】
飽和／非飽和の説明
前述のように、Ｔ６１１は演算が任意選択で飽和するかどうかを示す。飽和を可能にした演算の結果がデータの範囲からオーバーフローまたはアンダーフローする場合、その結果はクランプされる。クランプとは、結果がその範囲の最大値または最小値を超える場合、その結果を最大値または最小値に設定することを意味する。アンダーフローの場合、飽和によって結果がその範囲内の最低値にクランプされ、オーバーフローの場合は最高値にクランプされる。各データ形式の許容範囲を表１に示す。
【００４８】
【表１】
2006172486.tif 000003
【００４９】
前述のように、Ｔ６１１は飽和演算を行うかどうかを示す。したがって、無符号バイト・データ形式を使用し、演算結果＝２５８で、飽和を使用可能にしていた場合、結果は演算の宛先レジスタに格納される前に２５５にクランプされることになる。同様に、演算結果＝−３２９９９で、プロセッサ１０９が飽和を使用可能にして符号付きデータ形式を使用した場合、結果は演算の宛先レジスタに格納される前に−３２７６８にクランプされることになる。
【００５０】
シフト演算
本発明の一実施形態では、標準ＣＩＳＣ命令セット（アンパックされたデータ演算）をサポートするだけでなくパックされたデータのシフト演算もサポートすることによって、ＣＳＣアプリケーションのパフォーマンスを向上させる。パックされたシフト演算を使用して、高速フーリエ変換、コサイン変換、およびその他のディジタル画像および音声信号処理アルゴリズムの固定小数点インプレリメントの速度を高速化することができる。
【００５１】
本発明の一実施形態では、ＳＲＣ１レジスタにはシフトさせるデータ（Ｓｏｕｒｃｅ１）が入れられ、ＳＲＣ２レジスタにはシフト・カウントを表すデータ（Ｓｏｕｒｃｅ２）が入れられ、ＤＥＳＴレジスタにはシフトの結果（Ｒｅｓｕｌｔ）が入れられる。すなわちＳｏｕｒｃｅ１はシフト・カウントによって独立してシフトされた各データ要素を有することになる。一実施形態では、Ｓｏｕｒｃｅ２は無符号６４ビット・スカラと解釈される。他の実施形態では、Ｓｏｕｒｃｅ２はパックされたデータであり、Ｓｏｕｒｃｅ１内のそれぞれの対応するデータ要素のシフト・カウントが入れられる。
【００５２】
本発明の一実施形態では、算術シフトと論理シフトの両方をサポートする。算術シフトは、各データ要素のビットを指定された数だけ下にシフトし、各データ要素の上位ビットを符号ビットの初期値で満たす。パックされたバイト・データの場合の７を超えるシフト・カウント、パックされたワード・データの場合の１５を超えるシフト・カウント、またはパックされたダブルワードの場合の３１を超えるシフト・カウントがあると、各Ｒｅｓｕｌｔデータ要素は符号ビットの初期値で満たされる。論理シフトは、ビットを上下にシフトさせることによって機能することができる。右シフト論理演算では、各データ要素の上位ビットがゼロで満たされる。左シフト論理演算では、各データ要素の下位ビットがゼロで満たされる。
【００５３】
本発明の一実施形態では、パックされたバイトおよびパックされたワードの右シフト算術演算と右シフト論理演算と左シフト論理演算がサポートされる。本発明の他の実施形態では、パックされたダブルワードでもこれらの演算がサポートされる。
【００５４】
第７図に、パックされたデータに対してシフト演算を行う方法の一実施形態を示す。この実施形態は、第２図のプロセッサ１０９で実施することができる。
【００５５】
ステップ７０１で、プロセッサ１０９が受け取った制御信号２０７をデコーダ２０２がデコードする。したがって、デコーダ２０２は、適切なシフト演算の命令コードと、整数レジスタ２０９内のＳＲＣ１  ６０２、ＳＲＣ２  ６０３、およびＤＥＳＴ６０５アドレスと、飽和／非飽和（シフト演算の場合は必ずしも必要ではない）と、符号付き／無符号（これも必ずしも必要ではない）と、パックされたデータ内のデータ要素の長さとをデコードする。
【００５６】
ステップ７０２で、ＳＲＣ１  ６０２アドレスとＳＲＣ２  ６０３アドレスが与えられた場合、内部バス２０５を介してデコーダ２０２がレジスタ・ファイル２０４内の整数レジスタ２０９にアクセスする。整数レジスタ２０９は機能ユニット２０３にＳＲＣ１  ６０２レジスタに格納されているパックされたデータ（Ｓｏｕｒｃｅ１）と、ＳＲＣ２  ６０３レジスタに格納されているスカラ・シフト・カウント（Ｓｏｕｒｃｅ２）を供給する。すなわち、整数レジスタ２０９は、パックされたデータを内部バス２０５を介して機能ユニット２０３に伝達する。
【００５７】
ステップ７０３で、デコーダ２０２は機能ユニット２０３が適切なパックされたシフト演算を実行することができるようにする。デコーダ２０２は、さらに、内部バス２０５を介してデータ要素のサイズとシフト演算のタイプとシフトの方向（論理シフトの場合）も伝達する。
【００５８】
ステップ７１０で、データ要素のサイズによって次にどのステップを実行するかが決まる。データ要素のサイズが８ビット（バイト・データ）の場合、機能ユニット２０３はステップ７１２を実行する。しかしパックされたデータ内のデータ要素のサイズが１６ビット（ワード・データ）の場合、機能ユニット２０３はステップ７１４を実行する。一実施形態では、８ビットと１６ビットのデータ要素サイズのパックされたシフトのみがサポートされる。しかし、他の実施形態では、３２ビットのデータ要素サイズのパックされたシフトもサポートされる。
【００５９】
データ要素のサイズが８ビットであると仮定すると、ステップ７１２が実行される。ステップ７１２では以下のシフト演算が行われる。Ｓｏｕｒｃｅ１のビット７ないし０がシフト・カウント（Ｓｏｕｒｃｅ２のビット６３ないし０）によってシフトされ、Ｒｅｓｕｌｔのビット７ないし０が生成される。Ｓｏｕｒｃｅ１のビット１５ないし８がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット１５ないし８が生成される。Ｓｏｕｒｃｅ１のビット２３ないし１６がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット２３ないし１６が生成される。Ｓｏｕｒｃｅ１のビット３１ないし２４がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット３１ないし２４が生成される。Ｓｏｕｒｃｅ１のビット３９ないし３２がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット３９ないし３２が生成される。Ｓｏｕｒｃｅ１のビット４７ないし４０がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット４７ないし４０が生成される。Ｓｏｕｒｃｅ１のビット５５ないし４８がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット５５ないし４８が生成される。Ｓｏｕｒｃｅ１のビット６３ないし５６がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット６３ないし５６が生成される。
【００６０】
データ要素のサイズが１６ビットであると仮定すると、ステップ７１４が実行される。ステップ７１４では以下のシフト演算が行われる。Ｓｏｕｒｃｅ１のビット１５ないし０がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット１５ないし０が生成される。Ｓｏｕｒｃｅ１のビット３１ないし１６がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット３１ないし１６が生成される。Ｓｏｕｒｃｅ１のビット４７ないし３２がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット４７ないし３２が生成される。Ｓｏｕｒｃｅ１のビット６３ないし４８がシフト・カウントによってシフトされ、Ｒｅｓｕｌｔのビット６３ないし４８が生成される。
【００６１】
一実施形態では、ステップ７１２のシフト演算が同時に行われる。しかし、他の実施形態では、これらのシフト演算は順次に行われる。他の実施形態では、これらのシフト演算の一部が同時に行われ、一部は順次に行われる。これは、ステップ７１４のシフト演算にも同様に適用される。
【００６２】
ステップ７２０で、ＲｅｓｕｌｔがＤＥＳＴレジスタに格納される。
表２に、パックされた右シフト算術演算のレジスタ内表現を示す。最初の行のビットはＳｏｕｒｃｅ１のパックされたデータ表現である。２番目の行のビットはＳｏｕｒｃｅ２のデータ表現である。３番目の行のビットはＲｅｓｕｌｔのパックされたデータ表現である。各データ要素ビットの下の数字はデータ要素番号である。たとえば、Ｓｏｕｒｃｅ１データ要素３は  １０００００００2 である。
【００６３】
【表２】
2006172486.tif 000004
【００６４】
表３に、パックされたバイト・データに対するパック右シフト論理演算のレジスタ内表現を示す。
【００６５】
【表３】
2006172486.tif 000005
【００６６】
表４に、パックされたバイト・データに対するパック左シフト論理演算のレジスタ内表現を示す。
【００６７】
【表４】
2006172486.tif 000006
【００６８】
パックされたデータ回路
一実施形態では、アンパックされたデータに対する単一のシフト演算と同じクロック・サイクル数で複数のデータ要素に対するシフト演算を行うことができる。同じクロック・サイクル数での実行を実現するために、並列処理を使用する。すなわち、データ要素に対してシフト演算を行うように各レジスタが同時に命令される。これについては以下で詳述する。第８図に、アンパックされたデータに対するシフト演算と同じクロック・サイクル数でパックされたデータに対するシフト演算を行うことができる回路の一部の一実施形態を示す。
【００６９】
第８図には、修正バイト・スライス・シフト回路であるバイト・スライス段i ８９９の使用が図示されている。最上位データ要素バイト・スライスを除く各バイト・スライスは、シフト・ユニットとビット制御回路を含む。最上位データ要素バイト・スライスはシフト・ユニットのみを備えるだけでよい。
【００７０】
シフト・ユニットi ８１１とシフト・ユニットi+1 ８７１はそれぞれ、シフト・カウントによってＳｏｕｒｃｅ１から８ビットをシフトさせることができる。一実施形態では、各シフト・ユニットは周知の８ビット・シフト回路のように動作する。各シフト・ユニットは、Ｓｏｕｒｃｅ１入力とＳｏｕｒｃｅ２入力と制御入力と次段信号と最終段信号と結果出力とを有する。したがって、シフト・ユニットi ８１１は、Ｓｏｕｒｃｅ１i ８３１入力とＳｏｕｒｃｅ２［６３：０］８３３入力と制御i ８０１入力と次段i ８１３信号と、最終段i ８１２入力と結果レジスタi ８５１に格納される結果とを有する。したがって、シフト・ユニットi+1 ８７１は、Ｓｏｕｒｃｅ１i+1 ８３２入力とＳｏｕｒｃｅ２［６３：０］８３３入力と制御i+1 ８０２入力と次段i+1 ８７３信号と最終段i+1 ８７２入力と、結果レジスタi+1 ８５２に格納される結果とを有する。
【００７１】
Ｓｏｕｒｃｅ１入力は典型的にはＳｏｕｒｃｅ１の８ビット部分である。この８ビットは、最小のタイプのデータ要素である１パックされたバイト・データ要素を表す。Ｓｏｕｒｃｅ２入力はシフト・カウントを表す。一実施形態では、各シフト・ユニットがＳｏｕｒｃｅ２［６３：０］８３３から同じシフト・カウントを受け取る。操作制御回路８００が制御信号を送り、各シフト・ユニットをイネーブルにし、必要なシフトを行うようにする。この制御信号はシフトのタイプ（算術または論理）とシフトの方向から決定される。そのシフト・ユニットのビット制御回路から次段信号を受け取る。シフト・ユニットは、シフトの方向（左または右）に応じて、次段信号について最上位ビットをシフト・アウトまたはシフト・インする。同様に、各シフト・ユニットは、シフトの方向（右または左）に応じて、最終段信号について最下位ビットをシフト・アウトまたはシフト・インする。最終段信号は直前の段のビット制御ユニットから受け取る。その結果の出力は、シフト・ユニットが操作しているＳｏｕｒｃｅ１の部分に対するシフト演算の結果を表す。
【００７２】
操作制御回路８００からパックされたデータ・イネーブルi ８０６を介してビット制御回路i ８２０がイネーブルにされる。ビット制御i ８２０は次段i ８１３と最終段i+1 ８７２を制御する。たとえば、シフト・ユニットi ８１１がＳｏｕｒｃｅ１の下位８ビットを操作し、シフト・ユニットi+1 ８７１がＳｏｕｃｅ１の次の８ビットを操作するものとする。パックされたバイトに対するシフトを行う場合、ビット制御i ８２０はシフト・ユニットi+1 ８７１からの最下位ビットがシフト・ユニットi ８１１の最上位ビットに伝達されないようにする。しかし、パックされたワードに対するシフトを行う場合は、ビット制御i ８２０はシフト・ユニットi+1 ８７１からの最下位ビットがシフト・ユニットi ８１１の最上位ビットと連絡するようにする。
【００７３】
たとえば、表５ではパックされたバイト算術右シフトを行う。シフト・ユニットi+1 ８７１はデータ要素１を操作し、シフト・ユニットi ８１１はデータ要素０を操作する。シフト・ユニットi+1 ８７１はその最下位ビットをシフト・アウトする。しかし、操作制御回路８００はビット制御i ８２０に最終段i+1 ８２１から受け取ったそのビットを次段i ８１３に伝播させるのを停止させる。その代わりに、シフト・ユニットi ８１１が上位ビットを符号ビットであるＳｏｕｒｃｅ１［７］で満たす。
【００７４】
【表５】
2006172486.tif 000007
【００７５】
しかし、パックされたワード算術シフトを行う場合、シフト・ユニットi+1 ８７１の最下位ビットがシフト・ユニットi ８１１の最上位ビットに伝達される。表６にこの結果を示す。この伝達はパックされたダブルワード・シフトの場合にも可能になる。
【００７６】
【表６】
2006172486.tif 000008
【００７７】
各シフト・ユニットは任意選択で結果レジスタに接続される。結果レジスタには、完全な結果であるＲｅｓｕｌｔ［６３：０］８６０をＤＥＳＴレジスタに送ることができるまでシフト演算の結果が一時的に格納される。
【００７８】
完全な６４ビット・パックされたシフト回路の場合、８個のシフト・ユニットと７個のビット制御ユニットが使用される。このような回路を使用して６４ビットのアンパックされたデータに対するシフトを行うこともでき、それによって同じ回路を使用してアンパックされたシフト演算とパックされたシフト演算が行われる。
【００７９】
以上、複数データ要素に対して作用するシフト演算を有するプロセッサについて説明した。
【図面の簡単な説明】
【００８０】
【図１】本発明の方法および装置を使用するコンピュータ・システムの実施形態を示す図である。
【図２】本発明のプロセッサの実施形態を示す図である。
【図３】プロセッサがレジスタ・ファイル内のデータを操作するために使用する一般的なステップを示す流れ図である。
【図４ａ】記憶データ・タイプを示す図である。
【図４ｂ】レジスタ内整数データ表現を示す図である。
【図４ｃ】レジスタ内整数データ表現を示す図である。
【図４ｄ】レジスタ内整数データ表現を示す図である。
【図５ａ】パックされたデータ・タイプを示す図である。
【図５ｂ】レジスタ内パックされたデータ表現を示す図である。
【図５ｃ】レジスタ内パックされたデータ表現を示す図である。
【図５ｄ】レジスタ内パックされたデータ表現を示す図である。
【図６ａ】パックされたデータの使用を示す、コンピュータ・システムで使用される制御信号形式の図である。
【図６ｂ】パックされたデータの使用を示す、コンピュータ・システムで使用可能な第２の制御信号形式の図である。
【図７】パックされたデータに対してシフト演算を行うときにプロセッサが従う方法の一実施形態を示す図である。
【図８】パックされたデータの個々のバイトを処理することができる回路を示す図である。
【符号の説明】
【００８１】
１００  コンピュータ・システム
１０９  プロセッサ
【図１】
2006172486.tif 000009
【図２】
2006172486.tif 000010
【図３】
2006172486.tif 000011
【図４ａ】
2006172486.tif 000012
【図４ｂ】
2006172486.tif 000013
【図４ｃ】
2006172486.tif 000014
【図４ｄ】
2006172486.tif 000015
【図５ａ】
2006172486.tif 000016
【図５ｂ】
2006172486.tif 000017
【図５ｃ】
2006172486.tif 000018
【図５ｄ】
2006172486.tif 000019
【図６ａ】
2006172486.tif 000020
【図６ｂ】
2006172486.tif 000021
【図７】
2006172486.tif 000022
【図８】
2006172486.tif 000023