(57)【特許請求の範囲】
【請求項１】
データを処理する装置であって、
（１）  シフト回路と、
（２）  ビット部分選択および結合回路と、
（３）  前記シフト回路と前記ビット部分選択および結合回路とを制御して、単一命令多重データ命令に応じてデータ語Ｒｎとデータ語Ｒｍに操作を行う命令復号器と、
を備え、前記命令復号器の前記操作は、
（４）  前記データ語Ｒｎの一端から伸びる前記データ語Ｒｎのビット長Ａの第１の部分を選択し、
（５）  前記単一命令多重データ命令内のシフト・オペランドとして指定された算術右シフトの対象となる前記データ語Ｒｍのビット長Ｂの第２の部分を選択し、
（６）  前記第１の部分と前記第２の部分を結合して出力データ語Ｒｄのそれぞれ異なるビット位置部分を形成する、
ことにより与えられる値を生成することである、データを処理する装置。
【請求項２】
前記第１の部分は前記データ語Ｒｎの最上位ビット端から伸びる、請求項１記載のデータを処理する装置。
【請求項３】
前記第１の部分は前記データ語Ｒｎの最下位ビット端から伸びる、請求項１記載のデータを処理する装置。
【請求項４】
前記シフト・オペランドは前記データ語Ｒｍに対して行う算術右シフトの任意の量を指定することができる、請求項１記載のデータを処理する装置。
【請求項５】
前記第１の部分と前記第２の部分は前記出力データ語Ｒｄ内で隣接する、請求項１記載のデータを処理する装置。
【請求項６】
前記出力データ語はビット長Ｃを有し、Ｃ＝Ａ＋Ｂである、請求項５記載のデータを処理する装置。
【請求項７】
Ａ＝Ｂである、請求項６記載のデータを処理する装置。
【請求項８】
Ａ＝１６である、請求項１記載のデータを処理する装置。
【請求項９】
Ｂ＝１６である、請求項１記載のデータを処理する装置。
【請求項１０】
前記単一命令多重データ命令はデータ値・パック操作とシフト操作を結合する、請求項１記載のデータを処理する装置。
【請求項１１】
前記シフト回路は前記装置のデータ・パス内の前記選択および結合回路の上流にある、請求項１記載のデータを処理する装置。
【請求項１２】
前記選択および結合回路は前記データ・パス内の算術回路に並列に配置する、請求項１１記載のデータを処理する装置。
【請求項１３】
コンピュータ内で、単一命令多重データ命令を復号し実行するステップを含む、データを処理する方法であって、前記ステップは、
（１）  前記単一命令多重データ命令内のオペランドデータ語Ｒｎの一端から伸びる前記データ語Ｒｎのビット長Ａの第１の部分を選択し、
（２）  前記単一命令多重データ命令内のシフト・オペランドとして指定された算術右シフトの対象となる前記データ語Ｒｍのビット長Ｂの第２の部分を選択し、
（３）  前記第１の部分と前記第２の部分を結合して出力データ語Ｒｄのそれぞれ異なるビット位置部分を形成する、
ことにより与えられる値を生成するステップからなる、データを処理する方法。
【請求項１４】
コンピュータを制御して請求項１３記載の方法を実行するためのコンピュータ・プログラムを記憶する記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はデータ処理装置の分野に関する。より特定すると、本発明は単一命令多重データ型演算を行うのが望ましいデータ処理装置に関する。
【０００２】
【従来の技術】
単一命令多重データ演算は既知の技術であって、単一命令が処理するデータ語は実際はデータ語内の多数のデータ値を表し、所定の処理は各データ値に独立に行う。この型の命令は処理するデータ処理装置の効率を高め、コード・サイズの減少と処理操作の高速化に特に有用である。この技術は一般にディジタル信号処理アプリケーションなどにおける物理的信号を表すデータ値を処理する分野に適用されるが、これに限られるわけではない。
【０００３】
データ処理装置のデータ処理機能を拡張するとき、考慮すべき重要なことは処理機能を追加するときに加わるサイズ、複雑さ、コスト、電力消費のオーバーヘッドの範囲である。処理機能を追加してもオーバーヘッドは余り増えない方法が強く望まれる。
【０００４】
【課題を解決するための手段】
本発明の一形態のデータ処理装置は、シフト回路と、ビット部分選択および結合回路と、前記シフト回路と前記ビット部分選択および結合回路を制御する命令に応じてデータ語Ｒｎとデータ語Ｒｍに操作を行う命令復号器とを備え、前記操作は、前記データ語Ｒｎの一端から伸びる前記データ語Ｒｎのビット長Ａの第１の部分を選択し、前記命令内のシフト・オペランドとして指定された算術右シフトに従って前記データ語Ｒｍのビット長Ｂの第２の部分を選択し、前記第１の部分と前記第２の部分を結合して出力データ語Ｒｄのそれぞれ異なるビット位置部分を形成する、ことにより与えられる値を生成する。
【０００５】
本発明は、単一命令を用いて２個の入力オペランド・データ語の異なる部分を、パックされた出力データ語内で結合する効率的なパッキング命令を与える。更に本発明は、パックするデータ語の１つをその入力オペランド・データ語内の可変位置から選択するシフト・オペランドを与えて、追加のデータ操作とパッキング操作を結合する機能を与える。例えば、結合してパックされた出力データ語にする部分の１つを、他のデータ語部分と共にパックすると同時に２の累乗で乗算または除算する。これは、入力オペランド・データ語内の固定部分からのデータ語を単にパックするだけの装置とは対照的である。本発明の考え方では、パッキング操作はデータ処理装置のデータ・パスが行う操作としては比較的簡単なものなので、データ・パス内に既に存在する回路要素を用いて、処理のサイクル・タイムに制約を加えずに、追加の機能性をパッキング操作に加えることが可能である。
【０００６】
理解されるように、入力オペランド・データ語の一端から取る固定位置の多重ビット部分はその入力オペランド・データ語の最上位ビット端または最下位ビット端から取ってよい。かかる可能性は、一般の用語では語の上半分または語の下半分のパッキングに対応する。
本発明の特に好ましい実施の形態は、第１の部分と第２の部分が出力データ語内で隣接し、第１の部分と第２の部分の長さが等しく、両者で出力データ語を満たすものである。
多くの実際のＤＳＰでは、データ語の半分が１６ビット長を有するものが便利である。
【０００７】
本発明の命令の追加の機能性を与えるのに特によいのは、データ・パス内でシフト回路が選択および結合回路の上流にある装置である。選択および結合回路はデータ・パス内の算術回路に並列に設けるのがよい。なぜなら、パッキング操作と算術回路が与える機能とを結合するのは望ましくないからである。
【０００８】
本発明の別の態様はデータ処理の方法を提供する。前記方法は、前記データ語Ｒｎの一端から伸びる前記データ語Ｒｎのビット長Ａの第１の部分を選択し、前記命令内のシフト・オペランドとして指定された算術右シフトに従って前記データ語Ｒｍのビット長Ｂの第２の部分を選択し、前記第１および第２の部分を結合して出力データ語Ｒｄのそれぞれ異なるビット位置の部分を形成することにより与えられる値を生成する命令を復号して実行するステップを含む。
【０００９】
また本発明は、汎用コンピュータを制御して上の技術に従って動作するためのコンピュータ・プログラムを記憶する、コンピュータ・プログラム製品を与える。特に、本発明はコンピュータを制御して上に述べた操作を行うための命令を含む、コンピュータ・プログラムを与える。
本発明のかかる目的や機能や利点は、添付の図面を参照して以下の例示の実施の形態の詳細な説明を読めば明らかになる。
【００１０】
【発明の実施の形態】
図１は、ＡＤＤ８ＴＯ１６と呼ぶ第１のＳＩＭＤ型データ処理命令の機能を示す。この命令は、実行する処理の一部として各入力オペランド・データ語の長さを拡張した選択された部分の前部に加えられる拡張の性質に対応する、符号付きまたは符号なしの可変部を形成する。第１の入力オペランド・データ語はデータ処理装置のレジスタＲｍ内に記憶する。データ語は４個の８ビット部分ｐ０、ｐ１、ｐ２、ｐ３で形成する。命令内で８ビット部分の右回転操作を指定しているかどうかに従って、レジスタＲｍ内の入力データ語から多重ビット部分ｐ０とｐ２かまたは多重ビット部分ｐ１とｐ３を選択する。オプションの右回転操作は、必要に応じて１６または２４でもよい。これにより、高次部分と低次部分を効率的にスワップすることができる。図１に示す例は、非隣接部分ｐ０とｐ２を回転しない（シフトする）可変部に選択することを示し、他の可変部は点線で示す。
【００１１】
多重ビット部分を選択すると、ゼロまたは符号拡張を用いてそれぞれを８ビット長から１６ビット長に拡張する。図に示す拡張したデータ語Ｐの斜線部分はこれらの拡張部分を示す。
第２の入力データ語はレジスタＲｎ内に記憶し、２つの１６ビットのデータ値を含む。図に示す例は単一命令多重データ加算演算を行う。すなわち、拡張されたｐ０をＲｎの下位１６ビット値ａ０に加算し、拡張されたｐ２をＲｎの上位１６ビット部分ａ２に加算する。この種の加算は全幅加算と考えてよく、キャリー・チェーン（carry chain）は結果の第１５ビットと第１６ビットの間で分かれる。理解されるように、他のＳＩＭＤ型の算術演算（例えばＳＩＭＤ引き算）を行うこともできる。
【００１２】
図１の命令が生成する出力結果データ語は下位１６ビットにｐ０とａ０の和を生成し、上位１６ビットはｐ２とａ２の和を含む。この命令は各データ値の絶対差の和を決定する演算に特に有用である。ここで、ａ０とａ２は累積値を表し、ｐ０とｐ２は信号の差値（例えば画素の差値）の個別の絶対値を表す。この種の演算は一般にＭＰＥＧの動き推定処理に必要であり、この演算を高速で行う機能は非常に有用である。
【００１３】
図２は図１の命令を実現するのに用いられるデータ処理装置の例示のデータ・パス２を示す。レジスタ・バンク４は処理する３２ビットのデータ語を保持する。ＲｍとＲｎ内に記憶する入力オペランド・データ語はこのレジスタ・バンクから読み出し、結果データ語はレジスタ・バンク４内のレジスタＲｄに再び書き込む。データ・パス２はシフト回路６と加算回路８を含む。この装置が提供する多くの他のデータ処理命令はこのシフト回路６と加算回路８を種々の方法で用いる。かかるデータ・パス２は、シフト回路６と加算回路８を通って伝播するデータ値の所要時間がデータ処理のサイクル・タイムとよく適合するように注意して設計されている。データ・パス２のハードウエア資源は装置内で効率的に使用され、これらの資源はデータ・パス２内を伝播する各データ語の大部分で活動状態にある。符号／ゼロ拡張およびマスキング回路１０をシフト回路６の下位部分に並列に設ける。マルチプレクサ１２は、全シフト回路６の出力かまたは符号／ゼロ拡張およびマスキング回路１０の出力を加算回路８の一方の入力として選択してよい。加算回路８の他方の入力はＲｎの入力オペランド・データ語である。
【００１４】
図１の命令を実行するときＲｍの入力オペランド・データ語をシフト回路６に与えるが、シフト回路６は、命令内でそのパラメータが指定されているかどうかに従ってオプションの８ビット位置の右シフトをデータ語に対して行う。オプションの１６および２４ビット位置の右回転を行ってもよい。多レベルのマルチプレクサを用いたシフタ内では、かかる制限された可能性シフトはシフト回路６の第１の部分から比較的簡単に行うことができる（例えば３２ビット装置の場合、マルチプレクサの第１のレベルは１６ビットのシフトを与え、マルチプレクサの第２のレベルは８ビットのシフトを与える）。したがって、オプションで所定の量だけシフトした値を部分的にシフト回路６から取り出して、符号／ゼロ拡張およびマスキング回路１０に与えることができる。この回路１０はＲｍの恐らくシフトされた入力オペランド・データ語の選択されない多ビット部分をマスクし、これらのマスクされた部分をゼロかまたは各選択された多ビット部分の符号拡張で置換する。符号／ゼロ拡張およびマスキング回路１０の出力はマルチプレクサ１２を介して加算回路８の第１の入力に入る。加算回路８の第２の入力はＲｎの入力オペランド・データ語である。加算回路８はその入力にＳＩＭＤ加算を行う（すなわち、２つの並列１６ビット加算を行い、そのキャリー・チェーンは実質的にビット位置１５と１６の間で分かれる）。加算回路８の出力はレジスタ・バンク４のレジスタＲｄに再び書き込む。
【００１５】
または、符号／ゼロ拡張およびマスキング回路１０はＲｍ（回転しない）を入力として取り、次に４つの可能な符号ビットに０、８、１６、２４の回転を行った後でマスクする。シフト回路６は並列に動作してＲｍの全３２ビットをシフトする。
【００１６】
図３と図４は半語パッキングＳＩＭＤ型命令の２つの変形を示す。図３のＰＫＨＴＢ命令はレジスタＲｎ内に記憶する一方の入力オペランド・データ語の固定の上半分と、レジスタＲｍ内に記憶する第２の入力オペランド・データ語の可変位置半語部分を取り、これらを結合してレジスタＲｄ内に記憶する出力データ語のそれぞれ上半分と下半分にする。命令ＰＫＨＢＴはＲｎの入力オペランド・データ語の下半分とＲｍの第２の入力オペランド・データ語の可変位置半語長部分を取り、これらを結合してＲｄの出力データ語のそれぞれ下半分と上半分にする。図から分かるように、どちらの場合もＲｎの入力オペランド・データ語の選択された部分は出力データ語Ｒｄ内の位置をシフトしない。これによりこの部分は簡単なマスクおよび選択回路で与えられ、追加のハードウエア・オーバーヘッドはほとんどない。図３の命令の可変位置半語部分は、その語をｋビット位置だけ右にシフトした後でＲｍの語のビット位置１５から０までを選択する。同様に、図４の命令に従って選択されるＲｍの半語長可変位置部分は、その語をｋビット位置だけ左にシフトした後でＲｍの語のビット位置３１から１６までを選択する。
【００１７】
図３と図４の命令の可変シフトとパッキング機能の結合は、これらの値の処理中に起こる可能性のある固定点算術値の「Ｑ」値内の変化を調整するのに特に有用である。
図５は、図３と図４の命令を行うのに特に適したデータ・パス１４を示す。この場合もレジスタ・バンク１６は入力オペランド・データ語（この例では３２ビットのデータ語）を与え、出力データ語を記憶する。データ・パスはシフト回路１８と加算回路２０と選択および結合回路２２を含む。
【００１８】
動作を説明すると、Ｒｎのシフトされない入力オペランド・データ語をレジスタ・バンク１６からシフトおよび結合論理２２に直接送る。図３の命令の場合は、Ｒｎの値の最上位１６ビットを選択して、出力データ語Ｒｄ内に対応するビットを形成する。図４の命令の場合はＲｎの入力オペランド・データ語の最下位１６ビットを選択して送り、出力データ語Ｒｄの最下位ビットを形成する。Ｒｍの入力オペランド・データ語は全シフト回路１８を通る。図３の命令の場合は、ｋビット位置の算術右シフトを行い、次に選択および結合回路２２はシフト回路１８の出力から最下位１６ビットを選択してＲｄの出力データ語の最下位１６ビットを形成する。図４の命令の場合は、シフト回路１８はｋビット位置の左論理シフトを行い、その結果を選択および結合回路２２に供給する。選択および結合回路２２はシフト回路１８の出力の最上位１６ビットを選択し、これを用いてＲｄの出力データ語の最上位１６ビットを形成する。
【００１９】
図から分かるように、選択および結合回路２２は加算回路２０に並列の位置に設ける。したがって、全シフトおよび加算演算を１処理サイクル内に行うことができるようにデータ・パス１４を注意して設計すれば、処理サイクルに制限を与えずに、加算回路２０の演算に通常与えられる時間内に選択および結合演算を比較的簡単に行うことができる。
【００２０】
理解されるように、上に説明しまた特許請求の範囲に規定したデータ処理命令は、得られる結果値に関して定義した。同じ結果値は多くの異なる処理ステップとステップの順序で得ることができる。本発明は、単一命令を用いて同じ最終結果値を生成する全てのかかる変形を含む。
本発明の例示の実施の形態について添付の図面を参照して詳細に説明したが、理解されるように、本発明はかかる実施の形態に限定されるものではなく、特許請求の範囲に規定されている本発明の範囲と精神から逸れることなく、当業者は種々の変化や変更を行うことができるものである。
【図面の簡単な説明】
【図１】第１のＳＩＭＤ型データ処理命令の機能の略図。
【図２】図１のデータ処理命令を実行するのに適した型の処理装置内のデータ・パスの略図。
【図３】別のＳＩＭＤ型データ処理命令の変形の略図。
【図４】別のＳＩＭＤ型データ処理命令の変形の略図。
【図５】図３と図４のデータ処理命令を実行するのに適したデータ処理装置のデータ・パスの略図。
【符号の説明】
Ｒｎ，Ｒｍ  入力オペランド・データ語
Ｒｄ  出力データ語
２  データ・パス
４  レジスタ・バンク
６  シフタ
８  加算器
１０  符号／ゼロ拡張及びマスク
１２  マルチプレクサ
【図１】
0003723115.tif 000002
【図２】
0003723115.tif 000003
【図３】
0003723115.tif 000004
【図４】
0003723115.tif 000005
【図５】
0003723115.tif 000006