(57)【特許請求の範囲】
【請求項１】
データ要素を記憶するためのレジスタデータ記憶装置と、
その内の少なくとも１つが、データ部分と、前記データ部分のすぐ後に結合されているどのように前記データ部分が拡張されるべきかを示す指示を与える制御部分とを備えているデータ処理命令を復号するための命令デコーダと、
前記命令デコーダによって復号された少なくとも１つのデータ処理命令に関連付けられた前記制御部分の前記指示に従って前記データ部分を拡張することによって、ＳＩＭＤ処理におけるソースオペランドとして使用される定数を生成し、生成された前記定数を前記レジスタデータ記憶装置内部に記憶するための定数生成ロジックと、
前記命令デコーダによって復号された前記データ処理命令に応答して、並列処理レーン内部で、少なくとも１つのソースオペランドに対するデータ処理操作を実行するための処理ロジックとを備え、
前記定数生成ロジックが、複数の定数拡張機能を有し、
前記定数生成ロジックが、前記複数の定数拡張機能の内の１つを選択するために、前記少なくとも１つのデータ処理命令に関連付けられた前記制御部分に応答すると共に、前記選択された機能に応答して、前記データ部分を前記生成された定数内部の異なる位置に複写することによって前記定数を生成し、
前記制御部分が、前記データ部分が複写されるべき前記定数内部の少なくとも１つの位置を指定し、
前記定数拡張機能が、前記複写されたデータ部分の入っていない前記定数内部の位置を“０”で満たす機能と、前記複写されたデータ部分の入っていない前記定数内部の位置を“１”で満たす機能とを含み、
前記生成された定数が、前記少なくとも１つのソースオペランドの内の１つを形成する
ことを特徴とするデータ処理装置。
【請求項２】
前記定数生成ロジックが、前記選択された機能に基づいて、前記複写されたデータ部分の入っていない前記定数内部の位置を“０”及び／または“１”で満たす
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記定数生成ロジックが、前記選択された機能に基づいて、前記データ部分の各ビットを複数回繰り返すことにより、前記各ビットを拡張する
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項４】
前記データ部分はバイトである
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項５】
前記処理ロジックが、前記生成された定数に対するデータ処理操作を指示する前記少なくとも１つのデータ処理命令に応答して、並列処理レーン内部で前記データ処理操作を実行すると共に、新たに生成された定数を前記レジスタデータ記憶装置内部に記憶する
ことを特徴とする請求項１に記載のデータ処理装置。
【請求項６】
前記データ処理操作は、少なくとも次の論理積、論理和、加算、減算、及びテストの内の１つを有する
ことを特徴とする請求項５に記載のデータ処理装置。
【請求項７】
前記データ処理操作は、前記定数からビットマスクにより所望のビットを抽出する操作を有する
ことを特徴とする請求項５に記載のデータ処理装置。
【請求項８】
レジスタデータ記憶装置と、命令デコーダと、定数生成ロジックと、処理ロジックとを備えるデータ処理装置におけるデータ処理方法であって、
前記方法は、
前記レジスタデータ記憶装置が、前記レジスタデータ記憶装置内部に複数のデータ要素を記憶するステップと、
その内の少なくとも１つが、データ部分と、前記データ部分のすぐ後に結合されているどのように前記データ部分が拡張されるべきかを示す指示を与える制御部分とを備えているデータ処理命令を、前記命令デコーダが復号するステップと、
前記定数生成ロジックが、前記命令デコーダによって復号された少なくとも１つのデータ処理命令に関連付けられた前記制御部分の前記指示に従って前記データ部分を拡張することによって、ＳＩＭＤ処理におけるソースオペランドとして使用される定数を生成し、生成された前記定数を前記レジスタデータ記憶装置内部に記憶するステップと、
前記処理ロジックが、復号された前記データ処理命令に応答して、並列処理レーン内部で、少なくとも１つのソースオペランドに対するデータ処理操作を実行するステップとを有し、
前記定数生成ロジックが、複数の定数拡張機能を有し、
前記定数を生成するステップにおいて、前記定数生成ロジックが、前記複数の定数拡張機能の内の１つを選択するために、前記少なくとも１つのデータ処理命令に関連付けられた前記制御部分に応答すると共に、前記選択された機能に応答して、前記データ部分を前記生成された定数内部の異なる位置に複写することによって前記定数を生成し、
前記制御部分が、前記データ部分が複写されるべき前記定数内部の少なくとも１つの位置を指定し、
前記定数拡張機能が、前記複写されたデータ部分の入っていない前記定数内部の位置を“０”で満たす機能と、前記複写されたデータ部分の入っていない前記定数内部の位置を“１”で満たす機能とを含み、
前記生成された定数が、前記少なくとも１つのソースオペランドの内の１つを形成する
ことを特徴とする方法。
【請求項９】
前記定数を生成するステップにおいて、前記定数生成ロジックが、前記選択された機能に応答して、前記複写されたデータ部分の入っていない前記定数内部の位置を“０”及び／または“１”で満たす
ことを特徴とする請求項８に記載の方法。
【請求項１０】
前記定数を生成するステップにおいて、前記定数生成ロジックが、前記選択された機能に応答して、前記データ部分の各ビットを複数回繰り返すことにより、前記各ビットを拡張する
ことを特徴とする請求項８に記載の方法。
【請求項１１】
前記データ部分はバイトである
ことを特徴とする請求項８に記載の方法。
【請求項１２】
前記処理ロジックが、前記生成された定数に対するデータ処理操作を指示する前記少なくとも１つのデータ処理命令に応答して、並列処理レーン内部で前記データ処理操作を実行すると共に、新たに生成された定数を前記レジスタデータ記憶装置内部に記憶する
ことを特徴とする請求項８に記載の方法。
【請求項１３】
前記データ処理操作は、少なくとも次の論理積、論理和、加算、減算、及びテストの内の１つを有する
ことを特徴とする請求項１２に記載の方法。
【請求項１４】
レジスタデータ記憶装置と、命令デコーダと、定数生成ロジックと、処理ロジックとを備えるデータ処理装置において実行されるコンピュータプログラムであって、
前記コンピュータプログラムは、
前記レジスタデータ記憶装置が、前記レジスタデータ記憶装置内部に複数のデータ要素を記憶するステップと、
その内の少なくとも１つが、データ部分と、前記データ部分のすぐ後に結合されているどのように前記データ部分が拡張されるべきかを示す指示を与える制御部分とを備えているデータ処理命令を、前記命令デコーダが復号するステップと、
前記定数生成ロジックが、前記命令デコーダによって復号された少なくとも１つのデータ処理命令に関連付けられた前記制御部分の前記指示に従って前記データ部分を拡張することによって、ＳＩＭＤ処理におけるソースオペランドとして使用される定数を生成し、生成された前記定数を前記レジスタデータ記憶装置内部に記憶するステップと、
前記処理ロジックが、復号された前記データ処理命令に応答して、並列処理レーン内部で、少なくとも１つのソースオペランドに対するデータ処理操作を実行するステップとを前記データ処理装置に実行させ、
前記定数生成ロジックが、複数の定数拡張機能を有し、
前記定数を生成するステップにおいて、前記定数生成ロジックが、前記複数の定数拡張機能の内の１つを選択するために、前記少なくとも１つのデータ処理命令に関連付けられた前記制御部分に応答すると共に、前記選択された機能に応答して、前記データ部分を前記生成された定数内部の異なる位置に複写することによって前記定数を生成し、
前記制御部分が、前記データ部分が複写されるべき前記定数内部の少なくとも１つの位置を指定し、
前記定数拡張機能が、前記複写されたデータ部分の入っていない前記定数内部の位置を“０”で満たす機能と、前記複写されたデータ部分の入っていない前記定数内部の位置を“１”で満たす機能とを含み、
前記生成された定数が、前記少なくとも１つのソースオペランドの内の１つを形成する
ことを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理の分野に関すると共に、特に、デスティネーションレジスタ内にそれぞれのデータ要素を生成するように、処理の複数の並列レーンにおいて、データ処理命令がソースレジスタの内部からのそれぞれのデータ要素に対してデータ処理操作を実行する、ＳＩＭＤデータ処理の分野に関するものである。
【背景技術】
【０００２】
データ処理の分野において、命令内部で制限されたデータサイズの即値が与えられることが知られている。もし、大きな定数が要求されるならば、その場合には、先行技術の取り組み方（アプローチ）では、これをメモリに記憶すると共に、記憶された数値をレジスタに移動させるロードを実行する。これの欠点は、定数にアクセスするために、時間及び電力の両方の面で費用のかかるメモリアクセスが実行される必要があるということである。更に、メモリから指定されたレジスタに定数をロードするためにロード命令を提供する必要性が、コード密度に悪影響を与えるということが分かる。更に、ロード操作を実行するために利用可能な帯域幅の量は限られると共に、従って、メモリからレジスタへ定数を移動させるために毎回ロード操作が必要とされるということが分かり、その場合には、これは、プログラムによって要求された他のロード操作を実行するための使用に対して利用可能でないそのロード帯域幅の一部を使用することになる。
【０００３】
命令と共に提供される更に小さなデータサイズの即値は、レジスタ及びゼロで占められたレジスタの残りに移動させられるかもしれず、それにより、ある場合にはあるタイプのデータ処理の使用に対してより適当なデータサイズの定数を提供する。即値に提供されるデータの実際の量は、しかしながら、まだ非常に制限される。
【０００４】
上述の取り組み方（アプローチ）への強化として、ＡＲＭ社は、それらの命令セットにおいて、８ビットの即値の値が指定されること、その上（レジスタの残りのビットが所定の順序の“１”または“０”で満たされた）レジスタ内部のそれの位置を識別するために更なる４ビットが指定されることを可能にする命令エンコーディングを提供した。レジスタ内部のその位置を決定するために、その即値の値に適用されるべき循環と共に即値の値が指定されることを可能にすることにより、整数の定数の選択における更なる柔軟性は提供される。しかしながら、このように生成され得る定数の範囲は、まだ非常に制限される。
【０００５】
指定されたレジスタに対するデータ処理操作が、それらの要素の各々が処理のレーンの一部として扱われているそのレジスタに記憶された複数のデータ要素に対して実行されている並列操作となるＳＩＭＤ（single instruction multiple data）プロセッサを構成することが知られている。１レーンにおける処理が任意の他のレーンの処理に不適切な影響を与えないことを保証するのに必要な程度まで、処理レーンはお互いに分離されている。これは、例えば大量の画素に対して同じ操作が実行されることを必要とするビデオデータ等、特に、大量のデータが同じ方法で処理されることを必要とする分野において、重要な利点を有する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】欧州特許出願公開第１３６７４８３号明細書（EP1367483A2）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ＳＩＭＤ処理における命令を伴う即値の供給は、それ自身の問題に、しばしば、複数のレーン内部の複数のデータ要素に対するある操作の処理に対して適当な形式ではない即値を提供する。そのような場合に、各データ要素に対する即値を提供することは適切であるかもしれないと共に、もし大きなサイズの適切なデータ数値がメモリに記憶されなければ、どのようにこれが実行され得るかは全く明白ではない。
【課題を解決するための手段】
【０００８】
本発明の第１の特徴は、データ要素を記憶することができるレジスタデータ記憶装置と、生成された定数を伴い、それに引き続き関連付けられたデータ数値を有する命令を復号することができる命令デコーダと、前記命令デコーダにより復号されたデータ処理命令に応答して、並列処理レーン内部で少なくとも１つのソースオペランドに対してデータ処理を実行することができるデータプロセッサと、前記データプロセッサは、生成された定数と関連付けられたデータ数値とを伴う前記復号された命令に応答して、前記関連付けられたデータ数値の少なくともデータ部分を拡張することができ、前記拡張は、前記少なくとも１つのソースオペランドの内の１つを形成する生成された定数を伴う前記命令に応答すると共に選択された機能に基づいて、定数を生成するように実行されるデータ処理装置を提供することである。
【０００９】
本発明は、命令を伴い、複数のデータレーンによるＳＩＭＤ処理における使用に対して適当な形式の即値の値を提供することの問題を認識する。それは、ＳＩＭＤデータ処理操作おけるソースオペランドとして使用され得るように、更に大きなデータサイズの定数を生成する命令と関連付けられたデータ数値の少なくともデータ部分を拡張する能力を備えた命令を提供することにより、この問題に取り組む。このように、ＳＩＭＤ処理におけるレーン全域で使用されるべき適切なサイズの定数は、命令と関連付けられた更に小さなサイズのデータ数値から生成され得る。このように、多目的に使用できる即値のセットは、小さな符号化から構成される。
【００１０】
好ましくは、前記データ処理装置は、前記生成された定数を前記レジスタデータ記憶装置内部のレジスタ内に記憶することができる。
【００１１】
命令に関連付けられたデータ数値からの、レジスタを満たすための適切なサイズの定数の生成は、ＳＩＭＤ処理における使用に対して定数を提供する著しく効率的な方法を生み出す。
【００１２】
好ましい実施例において、前記選択された機能は、前記データ処理装置内の定数生成ロジックにより実行される所定の複数の機能の内の１つを有する。
【００１３】
それぞれに個別の命令を与えずに多数の異なる定数を提供する効率的な方法は、前記データ処理装置内の定数生成ロジック内部で多数の機能を実行することと、それらの内の１つを選択する手段に命令を提供することである。
【００１４】
都合良く前記関連付けられたデータ数値は、データ部分と制御部分とを有し、前記制御部分は、前記所定の複数の機能のいずれが前記選択された機能であるかを指定する。
【００１５】
好ましくは、前記データプロセッサは、前記選択された機能に基づいて、前記定数内部で前記データ部分を複写することができ、前記制御部分は、前記データ部分が複写されるべき、前記定数内部の少なくとも１つの位置を指定する。
【００１６】
この方法における制御部分の使用は、命令の制御部分内部の少しのビットの単純な変更により多数の異なる定数を生成するために、データ部分の多数の可能な複写が達成されることを可能にする。
【００１７】
実施例によっては、前記データプロセッサは、前記選択された機能に基づいて、前記複写されたデータ部分の入っていない前記定数内部の位置を“０”及び／または“１”により満たすことができる。
【００１８】
このように、多数の更に大きなサイズの定数は、１つの更に小さなサイズのデータ部分と制御部分とから生成され得る。
【００１９】
変形例において、前記データプロセッサは、前記選択された機能に基づいて、前記各ビットを複数回繰り返すことにより、前記データ部分の各ビットを拡張することができる。
【００２０】
実施例によっては、前記データプロセッサは、前記拡張されたデータを逆にすることにより、前記生成された定数を形成することができる。これは、その上、生成され得る異なる定数の更なる可能性を提供する。
【００２１】
実施例によっては、定数の生成を伴う命令は、更に小さい即値を更に大きなデータ数値内部の少なくとも１つの位置に移動すると共に、データ数値の残りの部分を“１”及び／または“０”で満たすことにより定数を生成する例えば移動のような命令を有し、一方、他の実施例においては、定数の生成を伴う前記命令は、前記データプロセッサが、生成された定数を伴う前記復号された命令に応答して、前記定数の生成に続き並列処理レーン内部で前記生成された定数に対してデータ処理操作を実行することができるような前記データ処理命令を有する。
【００２２】
定数の生成を伴い、生成された定数に対して実行されるＳＩＭＤデータ処理操作を有する命令は、単一の命令に応答して実行されるべき更なる操作の範囲を与える。このように、ＳＩＭＤ処理における即値として、またはデータ数値の特別な部分を抽出するためのバイトマスクのような、データ処理における使用に対する他のデータ数値として使用され得る全ての範囲の更なるデータ数値が生成される。
【００２３】
データ処理操作は、論理積、論理和、加算、減算、及びテストを含めた多数の異なる操作であり得る。
【００２４】
これらのデータ処理操作は、データ数値内部の１つの更に小さな定数から多数の異なるデータ数値を生成するのに特に有益である。
【００２５】
本発明の第２の特徴は、レジスタデータ記憶装置内部に複数のデータ要素を記憶するステップと、生成された定数を伴い、それに引き続き関連付けられたデータ数値を有する命令を復号するステップと、復号されたデータ処理命令に応答して、並列処理レーン内部で少なくとも１つのソースオペランドに対してデータ処理を実行するステップと、生成された定数を伴う前記復号された命令に応答して、選択された機能に基づき前記関連付けられたデータ数値の少なくともデータ部分を拡張することにより定数を生成するステップと、前記生成された定数から前記少なくとも１つのソースオペランドの内の１つを形成するステップとを有する定数の生成方法を提供することである。
【００２６】
本発明の第３の特徴は、データプロセッサを制御するためにデータプロセッサ上で動作する時に、本発明の第２の特徴による方法のステップを実行することができる、生成された定数を伴う命令を備えるコンピュータプログラムを提供することである。
【図面の簡単な説明】
【００２７】
【図１】従来のスカラデータ処理及びＳＩＭＤデータ処理の両方の機能を提供する集積回路を概略的に説明する図である。
【図２】ＳＩＭＤレジスタデータ記憶装置に関してリード（読み出し）とライト（書き込み）のポートの配置を概略的に説明する図である。
【図３】デスティネーションレジスタがソースレジスタの幅の２倍となるＳＩＭＤの読み出しと書き込みの動作を概略的に説明する図である。
【図４】異なるデータ処理演算に対するソースレジスタサイズとデスティネーションレジスタサイズとの関係の異なるタイプを示す図である。
【図５】本技術に従ってデータ処理命令を定義するために使用される構文を概略的に説明する図である。
【図６】６４ビットレジスタ及び１２８ビットレジスタであるＳＩＭＤレジスタデータ記憶装置を概略的に説明する図である。
【図７】６４ビットレジスタと１２８ビットレジスタとの間の重複部分（overlap）（“エイリアシング”）を概略的に説明する図である。
【図８】異なるサイズのＳＩＭＤレジスタの内部に記憶された複数個のデータ要素を概略的に説明する図である。
【図９】ＳＩＭＤベクタレジスタ内部のスカラ値の参照付けを概略的に説明する図である。
【図１０】処理レーン数及びデータ要素サイズが一定の状態を維持するデータ処理命令を概略的に説明する図である。
【図１１Ａ】処理レーン数が一定の状態を維持すると共にデータ要素サイズが変化するデータ処理命令を概略的に説明する図である。
【図１１Ｂ】処理レーン数が一定の状態を維持すると共にデータ要素サイズが変化するデータ処理命令を概略的に説明する図である。
【図１２】ＳＩＭＤレジスタデータ記憶装置とスカラレジスタデータ記憶装置との間のデータの転送を説明する図である。
【図１３】さまざまなレジスタ転送命令の動作を概略的に説明する図である。
【図１４】さまざまなレジスタ転送命令の動作を概略的に説明する図である。
【図１５】さまざまなレジスタ転送命令の動作を概略的に説明する図である。
【図１６】図１４及び図１５に説明されたタイプのレジスタ転送命令が恐らく有効に利用される状況の例を説明するフローチャートである。
【図１７】一実施例に従ってどのようにデータ要素がメモリの連続ブロックからいくつかの指定されたレジスタにロードされるかを概略的に説明する図である。
【図１８】実施例に従ってメモリ内部に存在する可能性がある異なる構造のいくつかの例を説明する図である。
【図１９Ａ】一実施例に従った単一の記憶命令の特別な例の動作を説明する図である。
【図１９Ｂ】一実施例に従った単一の記憶命令の特別な例の動作を説明する図である。
【図１９Ｃ】一実施例に従った単一の記憶命令の特別な例の動作を説明する図である。
【図２０Ａ】一実施例に従った単一のロード命令の特別な例の動作を説明する図である。
【図２０Ｂ】一実施例に従った単一のロード命令の特別な例の動作を説明する図である。
【図２０Ｃ】一実施例に従った単一のロード命令の特別な例の動作を説明する図である。
【図２１Ａ】一実施例に従った単一のロード命令の更に特別な例の動作を説明する図である。
【図２１Ｂ】一実施例に従った単一のロード命令の更に特別な例の動作を説明する図である。
【図２１Ｃ】一実施例に従った単一のロード命令の更に特別な例の動作を説明する図である。
【図２２Ａ】一実施例に従った単一のロード命令の別の特別な例の動作を説明する図である。
【図２２Ｂ】一実施例に従った単一のロード命令の別の特別な例の動作を説明する図である。
【図２２Ｃ】一実施例に従った単一のロード命令の別の特別な例の動作を説明する図である。
【図２３】図１の再整理ロジックの内部に備えられたロジックをより詳細に説明するブロック図である。
【図２４Ａ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２４Ｂ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２４Ｃ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２５Ａ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２５Ｂ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２５Ｃ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２５Ｄ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２５Ｅ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２５Ｆ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２５Ｇ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２５Ｈ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２６Ａ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２６Ｂ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２６Ｃ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２６Ｄ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２６Ｅ】一実施例に従った単一のアクセス命令の４個の異なる手順に対して再整理ロジックを通過するデータの流れを説明する図である。
【図２７】既知の畳み込み演算を説明する図である。
【図２８】一実施例の畳み込み演算を説明する図である。
【図２９】別の実施例の畳み込み演算を説明する図である。
【図３０Ａ】さまざまな畳み込み命令の動作を説明する図である。
【図３０Ｂ】さまざまな畳み込み命令の動作を説明する図である。
【図３０Ｃ】さまざまな畳み込み命令の動作を説明する図である。
【図３０Ｄ】さまざまな畳み込み命令の動作を説明する図である。
【図３１】図１のＳＩＭＤ処理ロジックで提供される畳み込み演算を実行するように配置されたロジックを概略的に説明する図である。
【図３２】ベクトル対スカラＳＩＭＤ命令の動作を説明する図である。
【図３３】図１のＳＩＭＤレジスタファイル内のスカラオペランドの配置を説明する図である。
【図３４】図１のＳＩＭＤ処理ロジック内部で提供されるベクトル対スカラ演算を実行するために配置されたロジックを概略的に説明する。
【図３５】先行技術に従ってシフト操作及び梱包操作を処理する方法を示す図である。
【図３６】本技術の一実施例に従って右シフト操作及び縮小操作を概略的に示す図である。
【図３７】本技術に従って左シフト操作及び縮小操作を概略的に示す図である。
【図３８】本技術の一実施例に従って拡大操作及び左シフト操作を概略的に示す図である。
【図３９】異なる量によるデータ要素のシフトを概略的に示す図である。
【図４０】通常の多重化演算を概略的に示す図である。
【図４１】ソースの数値“ａ”またはソースの数値“ｂ”の選択がビット幅で実行される実施例を概略的に示す図である。
【図４２】ソースの数値“ａ”またはソースの数値“ｂ”の選択がデータ要素で実行される代わりの実施例を概略的に示す図である。
【図４３Ａ】本技術により提供される３個の多重化命令に対応するマルチプレクサの配置の３個の例を概略的に示す図である。
【図４３Ｂ】本技術により提供される３個の多重化命令に対応するマルチプレクサの配置の３個の例を概略的に示す図である。
【図４３Ｃ】本技術により提供される３個の多重化命令に対応するマルチプレクサの配置の３個の例を概略的に示す図である。
【図４４】エンディアンモードに応じて異なる配置でＳＩＭＤレジスタに記憶されている多数のデータ要素を概略的に説明する図である。
【図４５】第１の例に従ったメモリアクセスロジック及びデータ要素再整理ロジックの動作を概略的に説明する図である。
【図４６】第２の例に従ったメモリアクセスロジック及びデータ要素再整理ロジックの動作を概略的に説明する図である。
【図４７】図４５及び図４６のデータ要素再整理ロジックの更に詳細な実施例を概略的に説明する図である。
【図４８】テーブルレジスタとして動作する２個のレジスタ、結果レジスタ、及びインデックスレジスタを含むレジスタデータ記憶装置を概略的に説明する図である。
【図４９】テーブル検索拡張命令の動作を概略的に説明する図である。
【図５０】インデックスレジスタ内部のインデックス値が更なるテーブル検索拡張命令により再使用される前にインデックスレジスタに対して実行される処理を概略的に説明する図である。
【図５１】範囲外のインデックス値に対応する位置に数値ゼロが結果レジスタに書き込まれるテーブル検索拡張命令の動作を概略的に説明する図である。
【図５２】一実施例に従って、どのように図１のＬＳＵがメモリシステム及びメモリ管理ユニットに接続されるかを説明する図である。
【図５３Ａ】一実施例に従ってアクセスされるべきデータブロックのさまざまな例を概略的に説明する図である。
【図５３Ｂ】一実施例に従ってアクセスされるべきデータブロックのさまざまな例を概略的に説明する図である。
【図５３Ｃ】一実施例に従ってアクセスされるべきデータブロックのさまざまな例を概略的に説明する図である。
【図５３Ｄ】一実施例に従ってアクセスされるべきデータブロックのさまざまな例を概略的に説明する図である。
【図５４Ａ】一実施例に従ってアクセスされるべきデータブロックの更なる例を概略的に説明する図である。
【図５４Ｂ】一実施例に従ってアクセスされるべきデータブロックの更なる例を概略的に説明する図である。
【図５５Ａ】インタリーブ操作を概略的に説明する図である。
【図５５Ｂ】デインタリーブ操作を概略的に説明する図である。
【図５５Ｃ】転置操作を概略的に説明する図である。
【図５６Ａ】一実施例に従ってどのようにインタリーブ操作が実行されるかを概略的に説明する図である。
【図５６Ｂ】一実施例に従ってどのように転置操作が実行されるかを概略的に説明する図である。
【図５７Ａ】一実施例にしたがった命令の手順が、画素配列を転置するためにどのように使用されるかを概略的に説明する図である。
【図５７Ｂ】一実施例にしたがった命令の手順が、画素配列を転置するためにどのように使用されるかを概略的に説明する図である。
【図５７Ｃ】一実施例にしたがった命令の手順が、画素配列を転置するためにどのように使用されるかを概略的に説明する図である。
【図５８】一実施例の命令が、複素数の実数部及び虚数部のインタリーブのためにどのように使用されるかを概略的に説明する図である。
【図５９Ａ】一実施例にしたがった命令の手順が、２個の複素数の乗算を並列に実行するためにどのように使用され得るかを説明する図である。
【図５９Ｂ】一実施例にしたがった命令の手順が、２個の複素数の乗算を並列に実行するためにどのように使用され得るかを説明する図である。
【図６０】演算の高位の半分をもたらす加算、及びそれに関係する命令を概略的に示す図である。
【図６１】演算の高位の半分をもたらす丸めを伴う加算、及びそれに関係する命令を概略的に示す図である。
【図６２】演算の高位の半分をもたらす減算、及びそれに関係する命令を概略的に示す図である。
【図６３】データ部分“abcdefgh”及びそれに関係する制御部分を備える命令から生成された定数のテーブルを示す図である。
【図６４】定数生成ロジックを示す図である。
【図６５】定数生成ロジックを備えるデータ処理装置を示す図である。
【図６６Ａ】生成された定数を伴う２タイプの命令に応答するデータ処理装置を概略的に示す図である。
【図６６Ｂ】生成された定数を伴う２タイプの命令に応答するデータ処理装置を概略的に示す図である。
【図６７】本技術に従ったビットマスクの生成を示す図である。
【発明を実施するための形態】
【００２８】
本発明は、それの好ましい実施例に関して、添付図面の中で説明されるように、一例としてのみ更に記述されることになる。
【００２９】
図１は、従来のスカラデータ処理機能及びＳＩＭＤデータ処理機能の両方を組み込んでいるデータ処理システム（集積回路）２を概略的に説明する。スカラデータ処理部分は、明確化のために説明されなかった多くの他の回路のみならず、スカラレジスタデータ記憶装置４、乗算器６、シフタ８、加算器１０、命令パイプライン１２、及びスカラデコーダ１４も組み込んでいる標準のＡＲＭ社製プロセッサのコア（ARM processor core）であることが好ましい。操作において、そのようなスカラプロセッサのコア（scalar processor core）は、スカラレジスタデータ記憶装置４の内部に固定長の３２ビットのデータの数値を記憶すると共に、命令パイプライン１２に沿って伝送され、かつスカラデコーダ１４に供給されるデータ処理命令の制御下にある乗算器６、シフタ８、及び加算器１０を使用してこれらを処理する。スカラデコーダ１４は、従来の方法においてスカラ処理素子の動作を制御する制御信号を生成する。
【００３０】
図１において説明されるように、集積回路２は、ＳＩＭＤレジスタデータ記憶装置２０、専用ＳＩＭＤ処理ロジック１８、及び再整理ロジック２４を含むさまざまな専用のＳＩＭＤ処理素子を備えている。ロード記憶ユニット２２は、スカラ部分と共同で使用されると共に、スカラプロセッサの内部に慣習的に備えられたロード記憶ユニットの同一バージョンまたは修正バージョンとすることもあり得る。
【００３１】
命令パイプライン１２は、専用のＳＩＭＤデコーダ１６によってＳＩＭＤ処理操作を制御する役目を果たす付加的なパイプラインステージを使って拡張される（当然のことながら、他の実施例において、ＳＩＭＤパイプラインはスカラパイプラインを使って並列に提供されても良い。）。ＳＩＭＤデコーダ１６は、要求されたデータ処理操作を実行するように、例えばＳＩＭＤレジスタの読み取り、ＳＩＭＤレジスタの書き込み、及びＳＩＭＤ処理ロジックの配置のようなＳＩＭＤ処理素子の動作を制御するＳＩＭＤ制御信号を生成する。ＳＩＭＤパイプラインステージは、スカラ部分に異なる実行ポイントを効果的に見せるプロセッサのＳＩＭＤ部分に帰着するスカラステージの後に接続されている。これは、以下に論じられるように、重なり合ういくつかの必要性に帰着し得る。
【００３２】
再整理ロジック２４は、要求されたＳＩＭＤ処理操作に、より適合した命令において、集積回路２に接続されたメモリ（図示せず）から読み出されたデータ要素を再整理する役目を果たす。この再整理ロジック２４については、動作及び利点が、以下に更に論じられる。ロード記憶ユニット２２と再整理ロジック２４との間に、ロードＦＩＦＯ２３及び記憶ＦＩＦＯ２３’もまた設けられる。
【００３３】
スカラレジスタデータ記憶装置４は、この例において、例えば従来型の１６個の３２ビットＡＲＭ社製レジスタのような固定数の固定長のレジスタに分割されるものとして取り扱うことができる。その一方、ＳＩＭＤレジスタデータ記憶装置２０は、関係のあるＳＩＭＤデータ処理命令に付随するパラメータに応じた柔軟な方法でアドレス指定される／アクセスされる可能性がある一組の記憶装置を構成する。より詳細には、ＳＩＭＤデータ処理命令は、ソースレジスタ及びデスティネーションレジスタの数と、データ処理命令に付随するデータ要素サイズ及びレジスタサイズとを指定する。これらのパラメータは、アクセスされているレジスタに対する、異なる部分及び適宜にＳＩＭＤレジスタデータ記憶装置２０内部に記憶されているデータ要素のマッピングを制御するために、ＳＩＭＤデコーダ１６及びレジスタデータ記憶装置２０のリード／ライトポートにより一緒に結合される。このように、異なるサイズ、異なるデータ要素サイズのＳＩＭＤレジスタ及びそれに類似するものは、効果的に一緒にして別名（省略形）が付けられる（すなわち、これらのレジスタは重なり合うと共に、要求される可能性のある異なるレジスタ指示子、レジスタサイズ、及びデータ要素サイズの組み合わせによってアクセス可能であるものとして取り扱うことができる。ＳＩＭＤデコーダ１６及びリード（読み取り）／ライト（書き込み）ポートは、本実施例において、レジスタアクセスロジックを構成するものとして取り扱うことができる。）。
【００３４】
図２は、ＳＩＭＤレジスタデータ記憶装置２０に対して設けられるリード（読み取り）とライト（書き込み）のポートの配置を概略的に説明する。この例において、３２個のＳＩＭＤレジスタは、ＳＩＭＤデータ処理命令内部のレジスタ指定領域（５ビット）により指定されることが可能である。Ｎ個のリードポートはＳＩＭＤレジスタデータ記憶装置２０と関係づけられる。サポートされる最小の精度は６４ビットのレジスタ値である。この例において、直接的にサポートされるレジスタサイズは、６４ビット及び１２８ビットである。この分野では、２５６ビット及び更に高いレジスタサイズをサポートするために、直接的、またはレジスタの更に小さいサイズでサポートされた命令を使用して合成することにより間接的に、この配置が調整されることもあり得ることは容易に明白であろう。図２は、ＳＩＭＤ処理レジスタデータ記憶装置２０のライトポートとしての役目を果たすＭ個のデマルチプレクサ（de-multiplexers）を概略的に説明する。当然のことながら、実際には、そのようなデマルチプレクサは、その行き先へ目的とする入力の経路をさだめるマルチプレクサ（multiplexers）の動作と一致するように、ＳＩＭＤレジスタデータ記憶装置内部の記憶要素の行（row）に対して適切に割り当てられたイネーブル信号の形式で提供される。
【００３５】
図３は、それぞれ複数のデータ要素を含んでいる２個の６４ビットのＳＩＭＤレジスタ値（“D”の２倍の語として示される）が、１２８ビットのレジスタ（“Q”の４倍の語として示される）に一緒に記憶された複数の出力データ要素を生成するために、お互いに掛け合わされる特定の例を説明する。個々のリードポートは、ＳＩＭＤレジスタデータ記憶装置２０からソースＳＩＭＤレジスタ値“D1”，“D2”を読み取るために配置される。２個のライトポートは、１２８ビットの結果の第１の“Q [63:0]”部分及び第２の“Q[127:64]”部分が、それぞれ元のＳＩＭＤレジスタ記憶装置２０へ書き込まれることを可能にするように一緒に動く。当然のことながら、“D”レジスタ及び“Q”レジスタ内部のデータ要素サイズは修正することができる。一例として、４個の１６ビットのデータ要素は、乗算の結果である、対応する４個の３２ビットのデータ要素の１組を含んでいるデスティネーション“Q”レジスタと一体の、各ソース“D”レジスタ内部に含まれても良い。この例において、実行されている乗算操作により必要とされる時、データ要素サイズが１６ビットから３２ビットに増やされる一方で、どのように並列処理レーンの数（４）が一定の状態を維持するのかが理解されることになる。
【００３６】
図４は、サポートされ得るソースレジスタサイズとデスティネーションレジスタサイズとの間の関係のさまざまな異なるタイプを説明する。与えられた最重要の例において、並列処理レーンの数は一定の状態を維持すると共に、データ要素サイズは一定の状態を維持する。２番目及び４番目の例において、並列処理レーンの数は一定の状態を維持するが、ソース（レジスタ）とデスティネーション（レジスタ）との間でデータ要素サイズは変化する。３番目の例において、２個のソースの要素は異なるデータ要素サイズを有している。以下に更に記述されるように、本システムのＳＩＭＤ処理構造体及び技術は、これらのデータ処理命令の異なるタイプをサポートする。最後の３個の例は、単一の入力変数による単項演算である。５番目の例は、同一のデータ要素サイズを維持する。６番目の例は、データ要素サイズを２倍にすると共に、７番目の例は、データ要素サイズを２分の１（半分）にする。
【００３７】
図５は、ＳＩＭＤデータ処理命令の構文を概略的に説明する。構文の最初の部分は、当該ＳＩＭＤ演算子、この場合は乗算操作を指定する。これには、出力のデータ要素サイズ及び出力のデータ要素の他の特性を表す領域が続けられている。この例において、出力のデータ要素は、１６ビットの長さでかつ符号付き整数である。次の領域は、入力のデータ要素サイズ及び特性、この場合は符号付き８ビットの整数を表している。次の領域は、デスティネーションレジスタサイズ及びレジスタ指示子を表している。この例において、レジスタ指示子１２を有する１２８ビットで４倍語のＳＩＭＤレジスタは、デスティネーションＳＩＭＤレジスタとして使用されるべきである。２個のソースＳＩＭＤレジスタは、個々に“１”から“４”とするレジスタ指示子を有する、それぞれ２倍語の６４ビットのレジスタである。構文の更なる情報は、以下に記述される。
【００３８】
異なるデータフォーマットを表すための１組のデータタイプが定義される。これらはテーブル０（表１）に記述される。殆どの命令は、正確な操作の決定ために、少なくとも１個のデータタイプ修飾子を使う。しかしながら、操作は必ずしもすべてのデータタイプをサポートするとは限らない。データタイプは、データ要素サイズ、及び特性を表す領域に接尾語として適用される。
【００３９】
【表１】
0005393643.tif 000002
【００４０】
図６は、３２個に分割された６４ビットのレジスタ、または１６個に分割されている１２８ビットのレジスタであるＳＩＭＤレジスタデータ記憶装置２０を概略的に説明する。これらのレジスタは、同一の物理的なＳＩＭＤレジスタデータ記憶装置２０に位置すると共に、適宜に一緒にして別名（省略形）を付ける。一例として、レジスタ“D0”内部のデータ要素がレジスタ“Q0”内部のデータ要素としてアクセスされても良い。
【００４１】
図７は、６４ビットのレジスタと１２８ビットのレジスタとの間の重複部分（overlap）を更に概略的に説明する。説明されるように、１２８ビットのレジスタ“Q(n)”は、２個の６４ビットのレジスタ“D(2n+1)”及び“D(2n)”に一致する。
【００４２】
図８は、異なるサイズのＳＩＭＤレジスタの内部に記憶されたデータ要素の例を概略的に説明する。図８の上部では、１２８ビットのＳＩＭＤレジスタは、４個の３２ビットのデータ要素、または８個の１６ビットのデータ要素のいずれかとして説明される。データ要素は、実行されるべき並列処理に要求され、かつ適した符号付き整数または符号なし整数、浮動小数点数、あるいは他のフォーマットの数とすることができる。
【００４３】
図８の下部では、６４ビットのＳＩＭＤレジスタが２個の符号付き３２ビット整数、または４個の符号なし１６ビット整数のいずれかを含んでも良いことを説明する。他の多くの可能性が利用可能で、かつ技術的な分野において明白にされることになる。
【００４４】
図９は、どのようにＳＩＭＤレジスタ内部の個々のスカラ値が参照され得るかを概略的に説明する。説明されているＳＩＭＤレジスタ２６は４個の符号付き整数値を含んでいる。もしこのＳＩＭＤレジスタがレジスタ“Dn”であると考えられるならば、その場合には異なる個々の符号付き整数値は“Dn[3]”から“Dn[0]”として表され得る。例えば、ＳＩＭＤレジスタ内部のデータ要素の１つを選択し、それをスカラレジスタデータ記憶装置４内部のレジスタの１つへ、またはレジスタの１つから移動するレジスタ転送命令が実行されるとき、このようなＳＩＭＤレジスタ内部の個々のデータ要素の参照が使用される。
【００４５】
図１０は、２個のソースレジスタとデスティネーションレジスタとの間で一定の状態を維持する処理レーンの数と、一定の状態を維持するデータ要素サイズとにより、どのようにＳＩＭＤレジスタ処理命令が実行され得るかを説明する。この例において、ソースＳＩＭＤレジスタは、４個の並列処理レーンを備える“D”レジスタ（６４ビットで、かつ４個の計算結果の１６ビットのデータ要素を含む）である。デスティネーションＳＩＭＤレジスタもまた、４個の１６ビットのデータ要素を含む６４ビットの“D”レジスタである。
【００４６】
図１０とは対照的に、図１１Ａは、デスティネーションＳＩＭＤレジスタがソースＳＩＭＤレジスタの幅の２倍になる例を説明する。処理のレーン数は一定の状態を維持するが、データ要素サイズは２倍になる。このタイプの動作は、乗算、加算、減算、及びシフト（特に左シフト）のようなＳＩＭＤ操作と共に使用することに適している。図１１Ｂは、デスティネーションＳＩＭＤレジスタがソースＳＩＭＤレジスタの幅の半分になる例を説明する。このタイプの命令は、加算、及びシフト（特に右シフト）に有益である。
【００４７】
ソースレジスタとデスティネーションレジスタとの間でデータ要素サイズを変更する能力は、処理レーンの数を維持する間、データ要素の再整理に対する必要条件、または実行されたデータ処理操作により生成されたデータ要素サイズの変化の結果としての命令の倍加を必要とせずに、ＳＩＭＤデータ処理命令の手順が構築されることを可能にする。これは、処理速度、コード密度、電力消費、及びその他同種のものの点から見て著しい利点である。
【００４８】
図１２は、レジスタ転送ロジック２８により連結されたスカラレジスタデータ記憶装置４とＳＩＭＤレジスタデータ記憶装置２０とを概略的に説明する図である。スカラデコーダ１４またはＳＩＭＤデコーダ１６のいずれか、あるいは両方から受信した制御信号は、スカラレジスタデータ記憶装置４内部の指定されたレジスタと、ＳＩＭＤレジスタデータ記憶装置２０の指定されたレジスタ内部の指定された位置との間でデータを移動するために、命令パイプライン１２の内部でレジスタ転送命令に応答するレジスタ転送ロジック２８を制御する。スカラレジスタからＳＩＭＤレジスタへ移動したデータ数値もまた、図１３に説明されるように、ＳＩＭＤレジスタ内部の全ての位置に複写され得る。複写を伴うこのタイプのレジスタ転送命令は、ＳＩＭＤレジスタ内部の全ての処理レーンを、基準化数値（scaling values）のような、ＳＩＭＤ処理ロジック１８によりＳＩＭＤレジスタ内部の異なる他のオペランド（操作対象）に提供される必要がある数値で急速に占めることにとても適している。
【００４９】
図１４は、異なるタイプのレジスタ転送命令を説明する。この例において、３２ビットスカラ値Ａが、ＳＩＭＤレジスタ内部の指定された位置（レーン）へ移動される。他のレーンはその初期値を維持する。スカラ値は、完全にスカラレジスタの全域には複写されない。デスティネーションスカラレジスタ内部の位置は、レジスタ転送命令の内部の適切な領域値により変更され得る。このタイプの操作は、ＳＩＭＤレジスタ内部の個々のデータ要素が、スカラレジスタデータ記憶装置から取得されたデータ数値で占有されることを容認する。
【００５０】
図１５は、レジスタ転送命令の更に進んだタイプを説明する。この例において、ＳＩＭＤレジスタ内部からの１６ビットのデータ要素が、そのＳＩＭＤレジスタ内部の指定された可変位置から取得されると共に、スカラレジスタの１つに複写される。スカラレジスタは３２ビットのレジスタなので、データ要素は、その場合にはこの例において符号拡張される。データ要素は、その代わりに、個々のアルゴリズムまたはシステムの必要条件に応じてゼロ拡張されることもあり得る。
【００５１】
図１６は、図１４及び図１５に説明されたタイプのレジスタ転送命令が恐らく有効に利用される処理のタイプの例を概略的に説明するフローチャートである。ステップ３０において、いくつかのＳＩＭＤ処理は、それぞれがそれ自身のデータ要素を含む複数のレーンに対して並列に実行される。ある時点で、この処理は、ＳＩＭＤ処理ロジック１８によってサポートされないか、または非能率的にそのようにサポートされ得るだけの、実行されるべきデータ操作を必要とする。この状況において、実行されるべきこの複合のデータ操作を可能にするために、スカラ処理システムの全域で、個々のデータ要素を独立に移動することが要求される。ステップ３２は、そのように移動されるべき最初のデータ要素を選択する。ステップ３４は、その場合には図１５において説明されるように、レジスタ転送命令を実行する。ステップ３６は、システムのスカラ部分に今ある個々のデータ要素に対して、要求された複合の処理を実行する。この複合の処理が終了したとき、図１４において説明されるように、今変更されたデータ要素をその最初の位置に戻すために、ステップ３８は、レジスタ転送命令を実行する。ステップ４０は、最後のデータ要素が到達されたか否かを判断すると共に、もしそうでない場合には、ステップ４２は、ステップ３４の処理に戻る前に、次のデータ要素を選択する。もし、それらに対して実行されるべき複合操作に必要とされる全てのデータ要素が、要求された処理に従いスカラシステムの全域に移動されると共に、元のＳＩＭＤシステムへ移動されたならば、その場合にはステップ４０から並列ＳＩＭＤ処理が再開されるステップ４４へ更に処理は続行される。
【００５２】
レジスタデータ記憶装置にアクセスするためにＳＩＭＤレジスタを指定するデータ処理命令は、アクセスするべきレジスタのレジスタ番号を符号化した１つまたはそれ以上のレジスタ領域を含んでいる。使用される５ビットのレジスタ指定子は、ＡＲＭ社製ベクトル浮動小数点（ＶＦＰ）ユニット（Vector Floating Point （VFP） unit）により使用されるものと同一になるように設計される。すなわち、レジスタを指定する命令ビットは次のとおりである。
【００５３】
＊デスティネーションレジスタに関して
D=bit[22]
Rd=bits[15:12]
【００５４】
＊第１のソースレジスタ指定子に関して
N=bit[7]
Rn=bits[19:16]
【００５５】
＊第２のソースレジスタ指定子に関して
m=bit[5]
Rm=bits[3:0]
【００５６】
更に、“VFP”がそれぞれ倍精度レジスタ及び単精度レジスタを指定する方法、及び同じ法則をたどる“Qi”レジスタ及びハーフワードのスカラ量に対する符号化方法で、“Di”レジスタ及びワードのスカラ量が一貫して符号化されるように、これらのビットの使用は選択される。下記は、どのように(D,Rd)が使用されるか、同じように(N,Rn)及び(M,Rm)が使用されるかを記述する。
【００５７】
Qd：“Qi”レジスタ番号は、“(D,Rd[3],Rd[2],Rd[1])”である。
対応する“Di"レジスタ番号は、“(D,Rd[3],Rd[3],Rd[1],0)”及び“(D,Rd[3],Rd[2],Rd[1],1)”である。
“Rd[0]”はゼロであるべきである。
【００５８】
Dd：“Di”レジスタ番号は、(D,Rd[3],Rd[2],Rd[1],Rd[0])である。
【００５９】
ワードスカラ（Word scalar）：
“Di”レジスタ番号は、“(0,Rd[3],Rd[2],Rd[1],Rd[0])”である。
“word[D] ”は、レジスタからリトルエンディアンで選択される。
【００６０】
ハーフワードスカラ（Halfword scalar）：
“Di”レジスタ番号は、“(0,0,Rd[2],Rd[1],Rd[0])”である。
ハーフワード“[(D,Rd[3])]”は、レジスタからリトルエンディアンで選択される。
【００６１】
バイトスカラ（Byte scalar）：
“Di"レジスタ番号は、“(0,0,0,Rd[1],Rd[0])”である。
バイト“[(D,Rd[3],Rd[2])]”は、レジスタからリトルエンディアンで選択される。
【００６２】
このように、ビットD，Rd[3]，Rd[2]，Rd[1]，及びRd[0]は、レジスタ番号に関して、レジスタサイズに依存している多数のビット位置によって交代可能である５ビットの隣接する領域に写像可能であるように構成しても良い。実際のところは、レジスタの符号化ビットは、独立した操作として写像または循環されないが、しかし、行及び部分列のアドレスとしての役目を果たすビットの正確な位置を選択するように、レジスタサイズに応じて適用されている移動可能なマスク（mask）によってレジスタデータ記憶装置へのアクセスに対する行（row）アドレス及び列（column）アドレスを形成するために、レジスタアクセスロジックに供給される。
【００６３】
本実施例に従って、ロード命令及び記憶命令は、ＳＩＭＤレジスタファイル２０（図１参照）とメモリとの間の移動データに対して提供される。ロード命令は、データ要素をメモリから指定されたレジスタへロードするために使用され得ると共に、一方、記憶命令は、データ要素を指定されたレジスタからメモリへ記憶するために使用される。これらのロード命令及び記憶命令は、ＳＩＭＤ処理ロジック１８を使用するアルゴリズムにより必要とされるデータの移動をサポートするように設計される。本実施例のロード命令及び記憶命令は、それらがロードすると共に記憶するデータ要素サイズを指定し、かつこの情報は、メモリシステムのエンディアンに関係なく、レジスタ内部の一貫した順番を提供するために使用される。
【００６４】
本実施例のロード命令及び記憶命令は、メモリの連続ブロックからの複数のデータ要素が、ＳＩＭＤレジスタファイル２０へロードされること、あるいはＳＩＭＤレジスタファイル２０から記憶されることを可能にする。一実施例に従って、どんなバイト幅の配置構造（byte alignment）でも、アクセスは実行され得ると共に、最大で３２バイトまでロードまたは記憶することができる。
【００６５】
本実施例のロード命令及び記憶命令は、各構造体が多数の要素を備えると共に、構造体にデータ要素が配置されるメモリからのデータにアクセスするように構成される。一実施例に従って、メモリ内の構造体は、ＳＩＭＤ処理ロジック１８に認識される任意のデータタイプサイズを有する１個から４個の要素を含むことができ、好ましい実施例において、これらのデータタイプは、８、１６、３２、及び６４ビットである。本実施例で使用される構造体のフォーマットに対するいくつかの共通の例が以下のテーブル１（表２）に示されている。
【００６６】
【表２】
0005393643.tif 000003
【００６７】
どんな特定のロード命令及び記憶命令に対しても、メモリ内の各構造体、すなわちアクセスの対象は、同一の構造体フォーマットを有すると共に、従って同じ数の要素を含むことになる。ロード命令及び記憶命令は、構造体フォーマット内の要素の数を識別するために用意され、かつこの情報は、ロード操作を実行する際にデータ要素のデインタリーブを規定するため、及び記憶操作を実行する際にデータ要素のインタリーブを規定するために、再整理ロジック２４により使用され、構造体の異なるデータ要素が異なるレジスタに現れるように、データがレジスタ内で配置されることを可能にする。この構想は、多数のデータ要素をメモリの連続ブロックから３個の指定されたレジスタへロードするためにロード命令が使用される状況に関して、図１７に概略的に説明される。この例において、指定されたレジスタは３個の６４ビットのレジスタ“D0”２２０，“D1”２２５，“D2”２３０である。この例において、構造体フォーマットは、３Ｄベクトルフォーマット（3D vector format）であり、従って、メモリ２００内の各構造体２１０は、３個の要素を備えている。
【００６８】
図１に示されるように、適切なメモリアクセス制御信号がロード記憶ユニット（load store unit：ＬＳＵ）２２へ送信されている結果として、ロード命令は命令パイプライン１２からスカラデコーダ１４に伝送される。ＬＳＵは、次にメモリの連続ブロックから必要とされた４個の構造体Ａ［０」，Ａ［１］，Ａ［２］，及びＡ［３］にアクセスする。従って、ＬＳＵ２２はその正常な方法において動作し得る。その後、データは、Ｘ要素に付随するデータ要素がレジスタ“D0”２２０へ伝送され、Ｙ要素のデータ要素がレジスタ“D1”２２５へ伝送され、Ｚ要素のデータ要素がレジスタ“D2”２３０へ伝送されるように、各構造体において３個の要素をデインタリーブするために配置される再整理ロジック２４によって伝送される。
【００６９】
構造体の配列からロードすると共に、ロード操作の一部として情報を別個のレジスタへ分類する能力は、データが効率的なＳＩＭＤ処理を直ちに準備することを可能にするために使用され得る。
【００７０】
再整理ロジック２４は、指定されたレジスタからの記憶データをメモリの連続ブロックへ戻す際に、アナログの処理を実行するためにもまた配置され、この場合には、再整理ロジック２４は、データがメモリに記憶される前に、構造体フォーマットを再生するために、インタリーブ操作を実行する。
【００７１】
図１から分かるように、ロード命令は、それらの命令が命令パイプライン１２のＳＩＭＤステージに届く前に、命令パイプラインからスカラデコーダ１４へ伝送される。これは、データをＳＩＭＤレジスタファイル２０へロードする処理が、別の状況では可能である場合より早く発生することを可能にすると共に、次に起こるＳＩＭＤ処理命令が、一般的にそれが実行を開始できるようになる前にロードすべきデータを待たなくても良いことになり、それによってロード操作の待ち時間を著しく減少させるという利益を得る。しかしながら、ＳＩＭＤレジスタファイル２０からのデータの入手、及びＬＳＵ２２によってデータが元のメモリに記憶される前の再整理ロジック２４内部の適切な再整理を制御するために、記憶命令は、それらが適切な制御信号が使用され得るＳＩＭＤデコーダ１６へ伝送されるまで、命令パイプラインに挿入されることを必要とすることになる。しかしながら、命令がデータの中断を生じさせないことを保証するために、命令パイプライン１２のＡＲＭ社製部分において、例えば、アドレス、メモリアクセス許可等をチェックしている間、記憶命令のある部分は実行される。
【００７２】
本実施例のロード命令及び記憶命令は、以下のような１つの構文に従う。その構文は、以下のように表され得る。
V(LD|ST)<st>.<dt>{@<a>}<reglist>,{<n>,}<addr>
【００７３】
ここで、“<st>”は、構造体フォーマットを示し、メモリ内のデータ要素は“<st>”要素を備えた構造体の配列として取り扱う。この情報は、効率の良いＳＩＭＤ処理を可能にするために、それらがメモリとＳＩＭＤレジスタ記憶装置との間で移動するように、データ要素をインタリーブ及びデインタリーブすることに使用される。
【００７４】
“<dt>”は、データタイプを示す。これは、ロードされているデータ要素サイズを決定する。
【００７５】
“<a>”は、オプションで、配置構造指示子を示す。
【００７６】
“<reglist>”は、ＳＩＭＤレジスタリストを示し、これは、書き込まれる、または読み出されることになるＳＩＭＤレジスタの状態を決定する。ロードに関して、これはまさに、命令によって影響を受けることになるＳＩＭＤレジスタファイルの一部である。レジスタリストは、同じ長さの“<st>”ベクトルに分割された、“<dt>”サイズのデータ要素の集まりとして取り扱う。レジスタリスト内部のバイト数は、アクセスされたメモリのバイト数と必ずしも同じでない点に注意せよ。“<n>”オプションと図２０Ａから図２０Ｃを参照せよ。
【００７７】
“<n>”は、オプションで、構造体の数を示す。これは、ロード、または記憶する構造体の数を定義する。これは、レジスタリストが、部分的にメモリデータをロードされ、残る部分をゼロにされることだけを可能にする。それが与えられない場合、それはレジスタリスト及びメモリアクセスサイズが同一であることを意味するデフォルト値を受けとる。
default<n>:=elements<dt>(<reglist>)/<st>
【００７８】
“<addr>”は、アクセスのために使用されるアドレス指定モードを示す。
【００７９】
本実施例に従って、アドレス指定モードは、さまざまな形式、及び特に以下に説明される３個の形式をとることができる。
;//      <addr>
[Rn]  ;//addres:=Rn
[Rn]! ;//addres:=Rn,Rn:=Rn+transfer_size
（ここで、“transfer_size”は、アクセスされたメモリの総量を示す。）
[Rn],Rm ;//address:=Rn,Rn:=Rn+Rm
【００８０】
上記で論じられた記号の意味は、単一の構造体または複数の構造体が、メモリからのデータで満たされないレジスタの残る部分に書かれるべき論理的ゼロをロードまたは記憶されること、及びスカラ修飾子（例えば、“D0[1]”）を含んでいるレジスタリストを使用することによるレジスタへの挿入を可能にする。当然のことながら、本実施例において、与えられた実際のロード命令及び記憶命令は、一般的に上記構文の全ての可能な組み合わせのサブセット（subset）である。
【００８１】
構造体フォーマットに関して、図１８は、構造体フォーマットの３個の可能な例、及びそれらの対応する“st”値を説明する。図１８から分かるように、第１の構造体２５０は、１個の要素のみを備えており、従って“st”値は“１”である。第２の例において、構造体２５５は、例えば複素数の実数部分と虚数部分とを表している２個の要素を備えており、従って“st”値は“２”である。最後に、第３の例において、構造体２６０は、Ｒ，Ｇ，及びＢのデータ要素を表している３個の要素を備えており、従って“st”値は“３”である。
【００８２】
本実施例のロード命令及び記憶命令を使用するときのいくつかの利用可能な機能性の説明を補助するために、図１９から図２２は、ロード命令及び記憶命令の詳細な例を説明する。最初の図１９Ａから図１９Ｃを考察すると、図１９Ａは、記憶命令“VST2.16 {D0,D1,D2,D3}[r1]”によって指定された“ｒｅｇｌｉｓｔ”の状態を説明する。
【００８３】
この命令は、指定されたレジスタファイルからメモリの連続ブロックへ複数の構造体を記憶するために使用される。図に示すように、図１９Ａは、“ｒｅｇｌｉｓｔ”が４個の指定されたレジスタ“D0”２７０，“D1”２８０，“D2”２９０，“D3”３００を含むことを確認する。図１９Ｂに示されるように、これらのレジスタは、“dt”サイズ（すなわち１６ビット）のデータ要素の“st”ベクトル（すなわち２）に分割されるものとして取り扱うことができる。レジスタ“D0”においては、これらのデータ要素は符号２７５により参照され、“D1”においては符号２８５により参照され、“D2”においては符号２９５により参照され、そして“D3”においては符号３０５により参照される。図１９Ｃから分かるように、再整理ロジック２４は、構造体３１２に対して必要とされる構造体フォーマットで各データ要素３１４がメモリ３１０に記憶されるように、これらの２個のベクトルからのデータ要素をインタリーブするために配置される。
【００８４】
図２０Ａから図２０Ｃは、命令“VLD2.16 {D0,D1},#1,[r1]”によって実行された操作を説明する類似した図のセットである。
【００８５】
図２０Ａは、レジスタ“D0”２７０及びレジスタ“D1”２８０を識別する“ｒｅｇｌｉｓｔ”の状態の集まりを説明する。図２０Ｂは、同時に、どのようにこれらのレジスタが、“dt”サイズ（すなわち１６ビット）のデータ要素の“st”ベクトル（すなわち２）に分割されるかを説明する。
【００８６】
図１９Ａから図１９Ｃの例とは対照的に、この命令は、アクセスされるべき構造体の数を識別する“n”パラメータを指定し、この例において“n”は“１”である。従って、このロード命令“n x st”（すなわち、１×２）に関して、データ要素は、有効アドレスの最初から始まるメモリから読み取られると共に、次に、最初のベクトルの一番低いインデックスが付けられた要素から始まるベクトルに、総当たりの割り付けにおいて割り当てられることを必要とする。この処理は、図２０に説明されており、結果的に、第１の要素３１４のデータ要素“x0”は、レジスタ“D0”の一番下の１６ビットに書き込まれていると共に、一方、第２の要素のデータ要素“y0”は、レジスタ“D1”の一番下の１６ビットに書き込まれている。本実施例に従って、ロードされたことのあるデータ要素の全てに一度も書かれなかったレジスタの状態のどの部分もゼロに設定される。同等の記憶命令“n x st”に対して、データ要素はロード命令と逆の方法で記憶されるということに注目するべきである。
【００８７】
図２１Ａから図２１Ｃは、命令に対する構文が、指定されるべき２個のデータタイプ、すなわちアクセスされているデータ要素のためのデータタイプ、及びレジスタへロードされるか、またはメモリに記憶される結果のデータ要素のためのデータタイプを認めるように拡張される、他の特定の例を説明する。従って、図２１Ａから図２１Ｃは、命令“VLD2.32.S16{D0,D1,D2,D3},[r1]”により実行された処理を説明する。
【００８８】
図２１Ａに示されるように、レジスタ“D0”２７０、レジスタ“D1”２８０、レジスタ“D2”２９０、及びレジスタ“D3”３００を識別する“ｒｅｇｌｉｓｔ”の状態が集められる。同時に、図２１Ｂに示されるように、データ要素が、３２ビットの長さとなるレジスタ内部に記憶されるときまでに、この命令がそれを指定するので、このレジスタの状態は、“dt”サイズ（すなわち３２ビット）のデータ要素の“st”ベクトル（すなわち２）に分割される。
【００８９】
更に命令によって指定されるように、メモリ内のデータ要素は、１６ビットの長さであり、従って、一度メモリ３１０から入手されたならば、それらは、その場合に各１６ビットのデータ要素を新しい３２ビットのデータ要素３４２を形成するように拡張するために使用される、いくつかの変換ロジック３４０（それは任意に再整理ロジック２４の一部として組み込まれ得る）に挿入されることになる。第１の要素のデータ要素はレジスタ“D0”及びレジスタ“D1”内部に記憶され、一方第２の要素のデータ要素はレジスタ“D2”及びレジスタ“D3”内部に記憶されるように、これらのデータ要素はデーインタリーブされる。
【００９０】
図２２Ａから図２２Ｃは更なる例を説明すると共に、特に命令“VLD2.16{D0[2],D1[2]},[r1]”の操作を説明する。
【００９１】
この命令は前の命令と同じ構文を共有することができる一方、この命令は、データ要素が構造体の配列として記憶されるメモリの連続ブロックからデータ要素をロードすることよりはむしろ、このロード命令が単一の構造体のみをロードするような、概念上は異なるタイプの命令である。更に、ロードされた単一の構造体のデータ要素は、指定されたレジスタ内部の選択された処理レーンのいずれかに配置され得る。それゆえに、６４ビット幅のレジスタ及び１６ビットのデータ要素を考慮するとき、データ要素が配置され得る４個の可能な処理レーンがある。好ましい実施例において、特定の命令に対して選択されたレーンは、特定のレーンを識別するように“ｒｅｇｌｉｓｔ”データに表される。
【００９２】
図２２Ａを考察すると、“ｒｅｇｌｉｓｔ”状態が集められたとき、これは、レジスタ“D0”の「レーン２」３２０及びレジスタ“D1”の「レーン２」３２５を確認することがわかる。図２２Ｂに示されるように、これらは、その場合には“dt”サイズ（すなわち１６ビット）のデータ要素の“st”ベクトル（すなわち２）に分割される。その後、図２２Ｃに示されるように、一度構造体３１２がメモリ３１０から入手されたならば、再整理ロジック２４は、データ要素“x0”を“D0”レジスタ３３０のレーン２へ割り当て、一方データ要素“y0”を“D1”レジスタ３３５のレーン２へ割り当てるために配置される。この例において、当然のことながら、０から３までの範囲のレーンが確認され得る。
【００９３】
興味を持っている読み手のために、以下のテーブル２からテーブル５（表３から表６）は、１つの特定の実施例において提供される可能性があるさまざまなタイプのロード命令及び記憶命令を特定する。
【００９４】
【表３】
0005393643.tif 000004
【００９５】
【表４】
0005393643.tif 000005
【００９６】
【表５】
0005393643.tif 000006
【００９７】
【表６】
0005393643.tif 000007
【００９８】
一実施例において、図１の再整理ロジック２４は、図２３において説明する形式をとる。図２３のロジックは、その入力に、ロード命令の場合には、図１において説明されるＬＳＵ２２に付随するロードＦＩＦＯ２３からデータを受信するために配置される、または記憶命令の場合には、ＳＩＭＤレジスタ記憶装置２０からデータを受信するために配置される、２個のマルチプレクサ（multiplexers）３５０，３５５を含んでいる。更に、いくつかの状況において、ロード命令は、図２３のロジックにもまた、ＳＩＭＤレジスタ記憶装置２０からのデータを受信させ得る。マルチプレクサ３５０，３５５は、異なる入力信号のどちらかを選択すると共に、選択された入力信号を接続された入力レジスタ３６０，３６５に伝送するように制御される。一実施例において、各入力レジスタは６４ビットのデータを記憶することができる。入力レジスタに記憶されたデータは、その場合にはクロスバーマルチプレクサ（crossbar multiplexer）３７５を通してレジスタキャッシュ３８０へ読み取られると共に、クロスバー制御レジスタ３７０は、入力レジスタから受信した個々のバイトデータをレジスタキャッシュ内部の要求されたバイト位置へ割り当てるように、クロスバーマルチプレクサに駆動信号を供給する。制御レジスタ３７０内の数値は、命令デコーダによって抽出される。
【００９９】
図２３に示されるように、レジスタキャッシュ３８０は、４個のレジスタから構成されるものとして取り扱うことができると共に、一実施例において、各レジスタの長さは６４ビットである。
【０１００】
データがレジスタキャッシュ３８０に記憶されたあと、次に、それは、出力のマルチプレクサ３８５によって、ＬＳＵ２２に付随する記憶データＦＩＦＯ２３’（記憶命令の場合には）、またはＳＩＭＤレジスタファイル２０（ロード命令の場合には）のどちらかに読み取られ得る。
【０１０１】
バイト（８ビット）幅クロスバーマルチプレクサ３７５は、バイト精度で入力レジスタを読み取ることができると共に、バイト精度でレジスタキャッシュへ書き込むことができ、ライトマルチプレクサ（write multiplexers）３８５は、レジスタキャッシュから６４ビット精度で読み取る。
【０１０２】
再整理ロジック２４は、ＳＩＭＤ処理ロジック１８の残りの部分から大部分は独立しているが、しかし、集積回路内部の他の機能ユニットと同一の形式のプログラム順番で命令が与えられる。一実施例において、それは、それがそれ自身を制御する、レジスタファイルの２個のリードポート及び２個のライトポートを備えている。障害が検出されかつ回避されるように、再整理ロジック２４は、得点掲示板を使用するインタロック（interlock）ロジック（図示せず）と通信するように配置されても良い。
【０１０３】
ＳＩＭＤレジスタファイル２０からの記憶命令は、他のＳＩＭＤ命令に対して順序がばらばらに実行されるが、しかし、ＳＩＭＤレジスタファイルからの他の記憶命令に対しては順番通りに維持される。宙に浮いている記憶命令はキュー（待ち行列：queue）に保持されると共に、記憶されたデータが準備されると、それは再整理ロジック２４によって読み取られ、かつＬＳＵ２２に付随する記憶ＦＩＦＯ２３’へ渡される。
【０１０４】
一実施例において、メモリとＳＩＭＤレジスタファイル２０との間を通過する全てのデータは、再整理ロジック２４によって伝送される。しかしながら、代わりの実施例において、再整理が要求されないことが決定された状況に対して、再整理ロジック２４の周りのバイパス経路（bypass path）が与えられる。
【０１０５】
レジスタキャッシュ３８０は、それが、ある条件の下で、ＳＩＭＤレジスタファイル２０に書き込まれる前にレジスタ値を隠す（隠し場所に蓄える）ので、“キャッシュ”と呼ばれる。レジスタキャッシュは、再整理ロジック２４から出力されるべきデータ形式のデータを保持する。
【０１０６】
図２４Ａから図２４Ｃは、命令タイプ“VLD 3.16{D0,D1,D2},[r1]”を実行するときに要求される必要な再整理を実行する再整理ロジック２４の動作を説明する。
【０１０７】
一度データがＬＳＵ２２にロードされたならば、その場合には最初の１サイクルで（図２４Ａに示されるように）、６４ビットの読み出されたデータがマルチプレクサ３５０によって入力レジスタ３６０へロードされ、一方次の６４ビットがマルチプレクサ３５５によって入力レジスタ３６５へロードされる。図２４Ａから図２４Ｃに説明された例において、構造体フォーマットは、要素ｘ，ｙ，ｚを備える３Ｄベクトルを表すものと仮定される。次のサイクルでは、図２４Ｂに示されるように、入力レジスタ内部の１６ビットのデータ要素は、ｘ要素と関係づけられる任意のデータ要素がレジスタキャッシュの第１のレジスタに配置され、ｙ要素と関係づけられる任意のデータ要素がレジスタキャッシュの第２のレジスタに配置され、ｚ要素と関係づけられる任意のデータ要素がレジスタキャッシュの第３のレジスタに配置されるようにデータを整理し直すバイト幅クロスバーマルチプレクサ３７５によってレジスタキャッシュ３８０へ読み取られる。同様にこのサイクルの間に、ロードＦＩＦＯ２３からの次の６４ビットのデータが、マルチプレクサ３５０によって入力レジスタ３６０へロードされる。
【０１０８】
次のサイクルでは、図２４Ｃに示されるように、入力レジスタ３６０からのデータ要素は、上述のように、デインタリーブされているｘ要素、ｙ要素、及びｚ要素として、バイト幅マルチプレクサを介してレジスタキャッシュへ伝送される。図２４Ｃに示されるように、レジスタキャッシュ内のこの結果は、第１のレジスタに４個のｘ要素、第２のレジスタに４個のｙ要素、第３のレジスタに４個のｚ要素を含んでいる。レジスタキャッシュの内容は、次に、ライトマルチプレクサ３８５によって、レジスタ２個が同時にロード命令により指定されたレジスタへ出力され得る。
【０１０９】
図２５Ａから図２５Ｄは、命令“VLD 3.16 {D0[1],D1[1],D2[1]},[r1]”を実行するときに、要求される必要な再整理を実行するために再整理ロジックを通過するデータの流れの第２の例を説明する。この命令に従って、データは、レジスタ“D0”、レジスタ“D1”、及びレジスタ“D2”の特定のレーン、すなわちそれらのレジスタ内部の４個の１６ビット幅のレーンの第２の（２番目の）１６ビット幅のレーンへロードされる。レジスタが続いて書き込まれるときにレジスタの内容が全体として書き込まれるように、レジスタの特定のレーンにデータ要素が記憶され得る前にレジスタの現在の内容は読み出される必要がある。この特徴は、ＳＩＭＤレジスタファイル２０におけるレジスタの一部のみに対する任意の書き込みを行う必要性を回避する。従って、最初のサイクルの間、図２５Ａで示されるように、レジスタ“D0”及びレジスタ“D1”の現在の内容は、マルチプレクサ３５０，３５５によって、ＳＩＭＤレジスタファイルから入力レジスタ３６０，３６５へ読み取られる。次のサイクルでは、図２５Ｂに示されるように、これらの内容は、レジスタキャッシュの第１のレジスタに配置されている“D0”の内容、及び第２のレジスタに配置されている“D1”の内容として、クロスバーマルチプレクサ３７５を通過してレジスタキャッシュ３８０へ読み出される。同じサイクルにおいて、レジスタ“D2”の内容は、マルチプレクサ３５０によってＳＩＭＤレジスタファイルから読み出されると共に、入力レジスタ３６０に記憶される。
【０１１０】
次のサイクルでは、図２５Ｃに示されるように、レジスタ“D2”の内容は、それらがレジスタキャッシュの第３のレジスタに記憶されるように、クロスバーマルチプレクサ３７５によって、レジスタキャッシュ３８０へ読み取られる。同じサイクルにおいて、一般的に既にＬＳＵにより読み出されたであろうデータ構造体、すなわちロードの対象は、ロードＦＩＦＯ２３から、マルチプレクサ３５０によって入力レジスタ３６０へ読み取られる。図２５Ｃに説明された例において、メモリ内の構造体は、要素ｘ、要素ｙ、及び要素ｚによる３Ｄベクトルデータを再度表すものとして取り扱われる。次のサイクルにおいて、図２５Ｄに示されるように、ｘ要素、ｙ要素、及びｚ要素は、レジスタキャッシュ内部においてデータ要素“x0”がレジスタ“D0”の第２のレーンの現在の内容を上書きし、レジスタキャッシュ内部において要素“y0”があらかじめレジスタ“D1”の第２のレーンに存在するデータ要素を上書きし、及びレジスタキャッシュ内部において要素“z0”があらかじめレジスタ“D2”の第２のレーンに存在するデータ要素を上書きするように、クロスバーマルチプレクサ３７５によってデータ要素の第２のレーンへ読み取られる。
【０１１１】
当然のことながら、この時点で、ＳＩＭＤレジスタファイルのレジスタ“D0”、レジスタ“D1”、及びレジスタ“D2”の実際の内容はまだ変化していない。しかしながら、レジスタキャッシュに記憶されたデータは、以前の内容を上書きするために、ライトマルチプレクサ３８５によって元のレジスタ“D0”，“D1”，“D2”へすぐに出力され得る。その結果、メモリから特定の構造体の要素をロードすると共に、次にその構造体の個々の要素を選択されたレーン位置において異なるレジスタに挿入するために、単一のロード命令は使用され得ることがわかる。
【０１１２】
図２５Ｅから図２５Ｈは、図２５Ａから図２５Ｄを参照して上述したロード命令を補足する記憶命令を実行するときに、要求される必要な再整理を実行するために再整理ロジックを通過するデータの流れの第３の例を説明する。従って、図２５Ｅから図２５Ｈは、命令“VST 3.16 {D0[1],D1[1],D2[1]},[r1]”を実行するときに必要な再整理を実行するために要求される処置を説明する。それゆえに、この命令に従って、データは、レジスタ“D0”、レジスタ“D1”、及びレジスタ“D2”の第２の１６ビット幅のレーンから元のメモリに記憶される。図２５Ｅに示されるように、最初のサイクルの間、レジスタ“D0”及びレジスタ“D1”の現在の内容は、マルチプレクサ３５０，３５５によって、ＳＩＭＤレジスタファイルから入力レジスタ３６０，３６５へ読み取られる。次のサイクルでは、図２５Ｆに示されるように、第２のレーンのデータ要素、すなわち数値“x0”及び数値“y0”は、クロスバーマルチプレクサ３７５を通過してレジスタキャッシュ３８０の第１のレジスタへ読み出される。同じサイクルにおいて、レジスタ“D2”の内容は、マルチプレクサ３５０によってＳＩＭＤレジスタファイルから読み出されると共に、入力レジスタ３６０に記憶される。
【０１１３】
次のサイクルでは、図２５Ｇに示されるように、レジスタ“D2”の第２のレーン内のデータ要素は、クロスバーマルチプレクサ３７５によって、レジスタキャッシュ３８０の第１のレジスタへ読み取られる。その場合には、次のサイクルにおいて、図２５Ｈに示されるように、ｘ要素、ｙ要素、及びｚ要素は、元のメモリに記憶するために、ライトマルチプレクサ３８５によりＬＳＵへすぐに出力され得る。当然のことながら、この段階で、データ要素はメモリ内の保管に必要とされる構造体フォーマットにすぐに再整理される。
【０１１４】
図２６Ａから図２６Ｅは、以下の４個の命令による手順を実行する間に再整理ロジック内部で行われる再整理を説明する。
“VLD 3.16 {D0,D1,D2},#1,[r1]”
“VLD 3.16 {D0[1],D1[1],D2[1]},[r2]”
“VLD 3.16 {D0[2],D1[2],D2[2]},[r3]”
“VLD 3.16 {D0[3],D1[3],D2[3]},[r4]”
【０１１５】
一度、第１のロード命令により識別されたデータがＬＳＵにより読み出されたならば、それは最初のサイクルの間、マルチプレクサ３５０によって入力レジスタ３６０へ読み取られる（図２６Ａ参照）。次のサイクルにおいて、それは、ｘ要素、ｙ要素、及びｚ要素がレジスタキャッシュの異なるレジスタに配置されるように、クロスバーマルチプレクサ３７５によってレジスタキャッシュ３８０へ読み取られる。第１の命令内部の“＃１”は、各データ要素が各レジスタの最小桁のデータレーンに配置されるべきであると共に、残るレーンは論理的ゼロ値で満たされるべきであることを示し、これは図２６Ｂに示されている。同様にこのサイクルの間も、第２のロード命令により識別されたデータ要素は、入力レジスタ３６０へ読み出される。次のサイクルの間（図２６Ｃ参照）、入力レジスタ３６０に記憶されたデータ要素は、クロスバーマルチプレクサ３７５によって、それらが第２のレーンに記憶されるレジスタキャッシュ３８０へ移動される。同様にこのサイクルの間も、第３のロード命令のデータ要素は入力レジスタ３６０に配置される。
【０１１６】
次のサイクルにおいて、入力レジスタ３６０の内容は、クロスバーマルチプレクサ３７５によってレジスタキャッシュの第３のレーンへ伝送され、一方第４のロード命令の対象のデータ要素は、入力レジスタ３６０へ読み出される。これは図２６Ｄに示されている。
【０１１７】
最後に、図２６Ｅに示されるように、次のサイクルにおいて、これらのデータ要素は、クロスバーマルチプレクサ３７５によって、それらが第４のレーンに記憶されるレジスタキャッシュ３８０へ伝送される。その後、レジスタキャッシュの各レジスタ内の、６４ビットの幅広のデータのかたまりは、ＳＩＭＤレジスタファイルの指定されたレジスタに出力される。
【０１１８】
図２５Ａから図２５Ｄにおいて採用された取り組み方（アプローチ）と対比して、図２６Ａから図２６Ｅを参照して説明された最初の“VLD”命令の使用は、それによってデータ要素が一度特定のレーンにおいて配置されると共に残るレーンは数値ゼロで満たされたならば、任意の更新がなされる前に、レジスタ“D0”からレジスタ“D2”の内のいずれかにおける現在の内容をＳＩＭＤレジスタファイルから読み出す必要性を回避することに注目するべきである。図２６Ａから図２６Ｅを調べると、レジスタキャッシュ３８０は、それがロード命令の手順に対してデータ要素を隠すと共に、各命令が完了したときにデータをＳＩＭＤレジスタファイルの適切なレジスタに書き込むので、この場合に”ライトスルーキャッシュ（write through cache）”として振る舞うことがわかる。しかしながら、レジスタファイルは、一般的に手順の中で続いて起こる各命令が実行されている間に読み取られる必要がない。
【０１１９】
データ処理において、要素の可換性及び結合の性質を持つ演算子‘ｏｐ’を、全ての要素の間に適用することにより、いわゆる要素のベクトルを１つの要素に減少させることが多くの場合必要とされる。これは、畳み込み演算として説明されることになる。畳み込み演算の典型的な例は、ベクトルの要素を合計すること、またはベクトルの中の要素の最大値を発見することである。
【０１２０】
並列処理構造において、そのような畳み込み演算を実行するために使用される１つの知られた取り組み方は、図２７を参照して記述される。畳み込みされるべきデータ要素“[0]”からデータ要素“[3]”はレジスタ“r1”に含まれている。当然のことながら、並列処理構造の利点は、同一の操作が複数のデータ要素に対して同時に実行されることを可能にすることができるということである。これは、いわゆる並列処理レーンに関して、概念がより明確に理解され得るということである。この例において、各並列処理レーンは、データ要素［０］からデータ要素［３］の内の１つを含んでいる。
【０１２１】
まず第１に、ステップＡにおいて、レジスタ“r2”に循環されたデータ要素を形成するように、データ要素に位置を２個動かす循環を行わせる第１の命令が発せられる。これは、ステップＢにおいて単一命令複数データ（Single Instruction Multiple Data：SIMD）操作を適用できるように、異なるデータ要素を各処理レーンに配置する。
【０１２２】
その後、ステップＢにおいて、各レーンにおけるデータ要素に対して実行されるべきＳＩＭＤ操作を行わせる第２の命令が発せられる。この例では、これらの複数の並列操作の結果のデータ要素はレジスタ“r3”に記憶される。従って、今“r3”におけるエントリ（entries）が、レジスタ“r1”のデータ要素の半分の結合結果を含むことがわかる。（すなわち、“r3”は“[0] op [2]”，“[1] op [3]”，“[2] op [0]”，及び“[3] op [1]”を含む。）
【０１２３】
次に、レジスタ“r3”に記憶された結果に、ステップＣにおいて１並列処理レーン循環されると共にレジスタ“r4”に記憶されることを生じさせる第３の命令が発せられる。前と同じように、“r4”のデータ要素について“r3”に記憶されたデータ要素の循環は、異なるデータ要素が同一の並列処理レーンを占有することを可能にする。
【０１２４】
最後に、ステップＤにおいて、更に１つの命令に各レーンに記憶されたデータ要素に対して実行されるべき複数のデータの操作を行わせる、第４の命令が発せられると共に、結果はレジスタ“r5”に記憶される
【０１２５】
従って、ちょうど４個の命令を使用することにより、レジスタ全域の全てのデータ要素が結合され得ると共に、結果がレジスタ“r5”の各エントリに記憶されることがわかる（すなわち、“r5”の各エントリは[0] op [1] op [2] op [3]を含んでいる。）。結果のデータ要素は、必要に応じてレジスタ“r5”内の４個のエントリのいずれかから読み取られる。
【０１２６】
図２８は、一実施例の畳み込み命令の原理を説明する。各並列処理レーンがレーンの全体にわたって１個のデータ要素の幅と同一である固定幅を有する、従来の並列処理レーン（図２７を参照して記述される）の配置とは違って、本実施例において、並列処理レーンの配置は異なる。この新しい配置において、その入力における各並列処理レーンの幅は、少なくとも２個のソースのデータ要素の幅と同一であり、かつその出力においては、一般的に１個の結果のデータ要素の幅と同一である。このような方法で並列処理レーンを配置することは、単一レジスタ内部のデータ要素のグループ（例えばデータ要素のペア）が並列処理操作の対象になることができるので、先行技術の構成を超える著しい利点を与えるということが見出されている。以下の検討から明確になるように、これは、更に付け加えられたレジスタにおける正確なエントリ位置において複数の操作が平行に発生することを可能にするためにデータ要素を配置する必要性がないので、先行技術の構成においてデータ操作（すなわち、循環操作）を実行する必要性を除去する。
【０１２７】
従って、ソースのデータ要素ｄ［０］からデータ要素ｄ［３］は、レジスタの中のそれぞれのエントリとして与えられる。隣り合ったソースのデータ要素ｄ［０］及びデータ要素ｄ［１］は、ソースのデータ要素のペアとして取り扱うことができる。ソースのデータ要素ｄ［２］及びデータ要素ｄ［３］もまた、ソースのデータ要素のペアとして取り扱うことができる。それゆえに、この例では、２個のソースのデータ要素のペアがある。
【０１２８】
ステップ（Ａ）において、結果のデータ要素を生成するために、ソースのデータ要素の隣り合った各ペアに対して同一の操作が発生するように、レジスタ内部のソースのデータ要素の各ペアに対して操作が実行される。
【０１２９】
それゆえに、当然のことながら、ソースのデータ要素のペア、及び対応する結果のデータ要素の全てが並列処理の同一レーンを占有する。ステップ（Ａ）のあと、結果のデータ要素の数は、ソースのデータ要素の数の半分になることがわかる。データ要素“d[2] op d[3]”及び“d[0] op d[1]”もまた、ソースのデータ要素のペアとして取り扱うことができる。
【０１３０】
ステップ（Ｂ）において、結果のデータ要素“d[0] op d[1] op d[2] op d[3]”を生成するために、ソースのデータ要素のペアに対して更に同一の操作が実行される。ステップ（Ｂ）のあと、結果のデータ要素の数もまた、ソースのデータ要素の数の半分になることがわかる。先に言及されたように、操作は要素の可換性及び結合の性質を持つ操作であり、それゆえ正確なソースのデータ要素の結合指示にかかわりなく、同じ結果のデータ要素は生成される。
【０１３１】
それゆえに、ソースのデータ要素の数は、各操作の結果として２等分され得ると共に、必要とされる結果を生成するために、それらのソースのデータ要素に対して同一の操作が実行され得ることがわかる。従って、図２７の先行技術の構成が、少なくとも４回の操作を実行することを必要とするのに対して、必要とされる結果のデータ要素は、ちょうど２回の操作で生成されることがわかる。当然のことながら、この有効性における改良点は、ソースレジスタ内部のデータ要素のグループに対する並列処理操作の実行を通して達成される。分かりやすくするために、ちょうど２個のソースのデータ要素のペアが説明されたが、当然のことながら、どんな数のソースのデータ要素のペアでも操作の対象になった可能性がある。同様に、分かりやすくするために、ソースのデータ要素のペアに対する操作が説明された一方で、当然のことながら、どんな数のソースのデータ要素（例えば、３、４、あるいはそれ以上）でも操作の対象になった可能性がある。
【０１３２】
実際には、効率の良さの理由で、レジスタデータファイル２０でサポートされる最小のレジスタサイズにより決定された最小数のデータ要素に並列操作を実行するために、畳み込み命令が用意される。図２９は、ソースのデータ要素の数と同じ数の結果のデータ要素を生成する実行を説明する。
【０１３３】
ソースのデータ要素“d[0]”からソースのデータ要素“d[3]”は、レジスタ“Dn”に与えられる。同じ数の結果のデータ要素を生成するために、ソースのデータ要素“d[0]”からソースのデータ要素“d[3]”は、レジスタ“Dm”にもまた与えられる。当然のことながら、レジスタ“Dn”及びレジスタ“Dm”は、複製された結果のデータ要素を生成するために、各ソースのデータ要素をレジスタ“Dn”から２回読み取るＳＩＭＤ処理ロジック１８により、同じレジスタになると思われる。
【０１３４】
ステップ（Ａ）において、単一のＳＩＭＤ命令が発せられ、ソースのデータ要素の各ペアは、それについて実行された操作を受けると共に、対応する結果のデータ要素が生成される。
【０１３５】
ステップ（Ｂ）において、対応する結果のデータ要素を生成するために、ソースのデータ要素の各ペアに、それについて実行された操作を受けさせるように、別の単一のＳＩＭＤ命令が発せられる。
【０１３６】
従って、結果のデータ要素を生成するために、ソースのデータ要素の全てが結合されたことがわかる。
【０１３７】
図３０Ａから図３０Ｄは、他で記述された同じ構文に従うさまざまな畳み込み命令の操作を説明する。当然のことながら、２個のレジスタの存在が示される場合、これらは同じレジスタであるかもしれない。同様に、当然のことながら、利用されるレジスタスペースの量を減少させるために、各ソースレジスタは、デスティネーションレジスタとして指定されこともあり得る。
【０１３８】
図３０Ａは、それによって、‘n’ビットで表される同じレジスタからのソースのデータ要素のペアは、‘2n’ビットで表される結果のデータ要素を生成するために、それについて実行された操作を受ける、ＳＩＭＤ畳み込み命令の操作を説明する。‘2n’ビットを持つように結果のデータ要素を増進することは、オーバフローが発生するであろう可能性を減少させる。結果のデータ要素を増進するとき、それらは一般的に符号拡張か、またはゼロ詰めである。畳み込み命令を概説する以下の例は、そのような操作をサポートする。
【０１３９】
【表７】
0005393643.tif 000008
【０１４０】
図３０Ａに示される特定の例（VSUM.S32.S16 Dd, Dm）において、４個の１６ビットのデータ要素を含んでいる６４ビットのレジスタ“Dm”は、２個の３２ビットの結果のデータ要素を含んでいる６４ビットのレジスタ“Dd”に、畳み込まれると共に記憶される。
【０１４１】
図３０Ｂは、それによって、‘n’ビットで表された異なるレジスタからのソースのデータ要素のペアは、同様に‘n’ビットで表された結果のデータ要素を生成するために、それについて実行された操作を受ける、ＳＩＭＤ畳み込み命令の操作を説明する。最大及び最小命令を概説する以下の例は、そのような操作をサポートする。
【０１４２】
【表８】
0005393643.tif 000009
【０１４３】
【表９】
0005393643.tif 000010
【０１４４】
【表１０】
0005393643.tif 000011
【０１４５】
図３０Ｂに示される特定の例（VSUM.I16 Dd, Dn, Dm）において、それぞれ４個の１６ビットのデータ要素を含んでいる２個の６４ビットのレジスタ“Dm”，“Dn”は、４個の１６ビットの結果のデータ要素を含んでいる６４ビットのレジスタ“Dd”に、畳み込まれると共に記憶される。
【０１４６】
図３０Ｃは、それによって、‘n’ビットで表された同じレジスタからのソースのデータ要素のペアは、同様に‘n’ビットで表された結果のデータ要素を生成するために、それについて実行された操作を受ける、ＳＩＭＤ畳み込み命令の操作を説明する。図３０Ｃに示される特定の例において、８個の１６ビットのデータ要素を含んでいる１２８ビットのレジスタ“Qm”は、４個の１６ビットの結果のデータ要素を含んでいる６４ビットのレジスタ“Dd”に、畳み込まれると共に記憶される。
【０１４７】
図３０Ｄは、図３０Ｂと類似しているが、しかしここでは“Dm”＝“Dn”で、結果のデータの数値がデスティネーションレジスタに複写されるようにするＳＩＭＤ畳み込み命令の操作を説明する。‘n’ビットで表された同じレジスタからのソースのデータ要素のペアは、、同様に‘n’ビットで表された結果のデータ要素を生成するために、それについて実行された操作を受け、そのどれもがレジスタの別のエントリに複写されている。図３０Ｄに示される特定の例において、４個の１６ビットのデータ要素を含んでいる６４ビットのレジスタ“Dm”は、２個の１６ビットの結果のデータ要素を２セット含んでいる６４ビットのレジスタ“Dd”に、畳み込まれると共に記憶される。
【０１４８】
図３１は、畳み込み命令をサポートできると共に、ＳＩＭＤ処理ロジック１８の一部として提供されるＳＩＭＤ畳み込みロジックを概略的に説明する。分かりやすくするために、示されたロジックは、各隣り合ったペアの最大値を選択する命令をサポートするために使用される。しかしながら、以下で更に詳細に記述されるように、当然のことながら、ロジックは、他の操作に対してサポートを行うために容易に適応させられ得る。
【０１４９】
ロジックは、状況に応じてソースのデータ要素（Dn[0]からDn[3]）をレジスタ“Dn”から受信すると共に、ソースのデータ要素（Dm[0]からDm[3]）をレジスタ“Dm”から受信する。もう一つの方法として、ロジックは、ソースのデータ要素（Qm[0]からQm[7]）をレジスタ“Qm”から受信する。隣り合ったソースのデータ要素の各ペアは、関連する畳み込み演算ロジックユニット４００に提供される。各畳み込み演算ロジックユニット４００は、一方のソースのデータ要素を他方から減算すると共に、経路（path）４１５を通じて、マルチプレクサ４２０にどちらが大きいか指示を与える算術演算装置４１０を備えている。経路４１５を通じて与えられた指示に基づいて、マルチプレクサは、操作ロジックユニット４００からソースのデータ要素の大きい方の値を出力する。それゆえに、畳み込み演算ロジックユニット４００は、隣り合ったソースのデータ要素の結合されたペアの最大値を、それぞれ経路４２５，４３５，４４５，４５５を通じて出力するために配置されることが分かる。
【０１５０】
選択及び分配ロジック４５０は、前述の命令をサポートして、結果のデータ要素を受信すると共に、必要に応じて経路４３１から経路４３４を通じて、ＳＩＭＤレジスタファイル２０のレジスタ“Dd”のエントリにそれらを供給する。選択及び分配ロジック４５０の操作は、これから記述されることになる。
【０１５１】
図３０Ａに説明された命令をサポートするために、ソースのデータ要素“Dm[0]”からソースのデータ要素“Dm[3] ”は、下位の２個の畳み込み演算ロジックユニット４００に与えられる。畳み込み演算ロジックユニット４００は、経路４２５及び経路４３５を通じてデータ要素を出力する。経路４３１及び経路４３２は、符号拡張フォーマットまたはゼロ拡張フォーマットで“Dm[0] op Dm[1]”を提供することになると共に、一方経路４３３及び経路４３４は、符号拡張フォーマットまたはゼロ拡張フォーマットで“Dm[2] op Dm[3]”を提供することになる。これは、マルチプレクサ４７０にそれらの“B”入力を選択させ、マルチプレクサ４６０に符号拡張かゼロ拡張のいずれかを選択させ、マルチプレクサ４９０にそれらの“E”入力を選択させ、マルチプレクサ４８０にその“D”入力を選択させる畳み込み命令に応答するＳＩＭＤデコーダ１６によって生成されている信号により達成される。
【０１５２】
図３０Ｂに説明された命令をサポートするために、ソースのデータ要素“Dm[0]”からソースのデータ要素“Dm[3]”は、下位の２個の畳み込み演算ロジックユニット４００に与えられると共に、一方ソースのデータ要素“Dn[0]”からソースのデータ要素“Dn[3]”は、上位の２個の畳み込み演算ロジックユニット４００に与えられる。畳み込み演算ロジックユニット４００は、経路４２５、経路４３５、経路４４５、及び経路４５５を通じてデータ要素を出力する。経路４３１は、“Dm[0] op Dm[1]”を提供することになり、経路４３２は、“Dm[2] op Dm[3]”を提供することになり、経路４３３は、“Dn[0] op Dn[1]”を提供することになり、及び経路４３４は、“Dn[2] op Dn[3]”を提供することになる。これは、マルチプレクサ４７０にそれらのＡ入力を選択させ、マルチプレクサ４８０にその“C”入力を選択させ、マルチプレクサ４９０にそれらのＥ入力を選択させる畳み込み命令に応答するＳＩＭＤデコーダ１６によって生成されている信号により達成される。
【０１５３】
図３０Ｃに説明された命令をサポートするために、ソースのデータ要素“Qm[0]”からソースのデータ要素“Qm[7]”は、畳み込み演算ロジックユニット４００に与えられる。畳み込み演算ロジックユニット４００は、経路４２５、経路４３５、経路４４５、及び経路４５５を通じてデータ要素を出力する。経路４３１は、“Qm[0] op Qm[1]”を提供することになり、経路４３２は、“Qm[2] op Qm[3]”を提供することになり、経路４３３は、“Qm[4] op Qm[5]”を提供することになり、及び経路４３４は、“Qm[6] op Qm[7]”を提供することになる。これは、マルチプレクサ４７０にそれらのＡ入力を選択させ、マルチプレクサ４８０にその“C”入力を選択させ、マルチプレクサ４９０にそれらのＥ入力を選択させる畳み込み命令に応答するＳＩＭＤデコーダ１６によって生成されている信号により達成される。
【０１５４】
図３０Ｄに説明された命令をサポートするために、ソースのデータ要素“Dm[0]”からソースのデータ要素“Dm[3]”は、下位の２個の畳み込み演算ロジックユニット４００に与えられる。畳み込み演算ロジックユニット４００は、経路４２５及び経路４３５を通じてデータ要素を出力する。経路４３１は、“Dm[0] op Dm[1]”を提供することになり、経路４３２は、“Dm[2] op Dm[3]”を提供することになり、経路４３３は、“Dm[0] op Dm[1]”を提供することになり、及び経路４３４は、“Dm[2] op Dm[3]”を提供することになる。これは、マルチプレクサ４７０にそれらの“A”入力を選択させ、マルチプレクサ４８０にその“D”入力を選択させ、マルチプレクサ４９０にそれらの“F”入力を選択させる畳み込み命令に応答するＳＩＭＤデコーダ１６によって生成されている信号により達成される。もう一つの方法として、当然のことながら、その代わりに、上位の２個の畳み込み演算ロジックユニット４００にもまた、ソースのデータ要素を与えることができる共に、図３０Ｂを参照する実例のように、選択及び分配ロジック４５０の複雑さを軽減する同一の操作を実行することもできる。
【０１５５】
従って、このロジックは、結果のデータ要素が、ソースのデータ要素からの単一の操作で、直接的に２個の隣り合ったソースのデータ要素から生成されることを可能にする。
【０１５６】
上記で言及されたように、畳み込み演算ロジックユニット４００は、ソースのデータ要素に対するあらゆる数の操作を実行するために配置されても良い。例えば、マルチプレクサ４２０が、経路４２５を通じて最小限のソースのデータ要素を供給することを選択的に可能にするために、更に付け加えられたロジックが容易に提供されることもあり得る。もう一つの方法として、算術演算装置４１０が、ソースのデータ要素に選択的な加算、減算、比較、乗算を行うために、及び結果のデータ要素を出力するために配置されることもあり得る。それゆえに、当然のことながら、本実施例の取り組み方は、この配置を使用して実行され得る畳み込み演算の範囲で、多くの柔軟性を有利に提供する。
【０１５７】
同様に、当然のことながら、図３１を参照して説明されたロジックは１６ビット操作をサポートする一方、同様のロジックが、３２ビット操作または８ビット操作、あるいはもちろん他のサイズの操作をサポートするために提供されることもあり得る。
【０１５８】
図３２は、“ベクトル×スカラ”ＳＩＭＤ命令（vector-by-scalar SIMD instruction）を説明する。ＳＩＭＤ命令は、他で示された同じ構文に従う。当然のことながら、前と同様に、２個のレジスタの存在が示されたら、それらは同一のレジスタで良い。同様に、利用されるレジスタスペースの量を減少させるために、及び効率的なデータ要素の再循環を可能にするために、各ソースレジスタはデスティネーションレジスタとして指定されることもあり得る。
【０１５９】
レジスタ“Dm”は、データ要素“Dm[0]”からデータ要素“Dm[3]”の多数のデータ要素を記憶する。これらのデータ要素のそれぞれは、選択可能なスカラオペランド（scalar operand）を表す。スカラＳＩＭＤ命令によるベクトルは、データ要素の１つをスカラオペランドとして指定すると共に、別のレジスタ“Dn”の全てのデータ要素に対して、並列に、そのスカラオペランドを使用する操作を実行し、その結果は、レジスタ“Dd”の対応するエントリに記憶される。当然のことながら、レジスタ“Dm”、レジスタ“Dn”、及びレジスタ“Dd”に記憶されたデータ要素は、全て異なるサイズのデータ要素であることもあり得る。特に、結果のデータ要素は、ソースのデータ要素に対して増進されても良い。増進することは、１つのデータタイプから別のものに変えるために、ゼロ詰めまたは符号拡張を必要とする。これは、オーバフローが発生し得ないことを保証するという追加の利点を有しているかもしれない。
【０１６０】
データ要素のマトリクス（行列）を含む状況において、ＳＩＭＤ操作に対して１つのスカラオペランドを選択することができるということは、効率的な特色である。異なるスカラオペランドは、ＳＩＭＤレジスタファイル２０に書き込まれ得ると共に、更にデータ要素を再度書き込むこと、またはデータ要素を動き回らせることを必要とせず、異なる“ベクトル×スカラ”演算に容易に選択される。以下の乗算命令の例は、そのような操作をサポートする。
【０１６１】
【表１１】
0005393643.tif 000012
【０１６２】
【表１２】
0005393643.tif 000013
【０１６３】
【表１３】
0005393643.tif 000014
【０１６４】
“Vd”，“Vn”，及び“Vm”は、選択されたレジスタフォーマット及び選択されたデータタイプから組み立てられたエレメントのベクトルを示す。このベクトル内の要素は配列表記法[x]を使用して選択されている。例えば、“Vd[0]”は、ベクトル“Vd”の最も低位の要素を選択する。
【０１６５】
反復子“i”は、ベクトル定義を可能にするために使われ、ベクトル内部の要素の数未満である“i”の全ての値に対してプログラムの動作は有効である。この命令の定義は、‘データタイプ’及び‘オペランドフォーマット’の列を与え、有効な命令は、各列から１つを取ることで組み立てられる。
【０１６６】
図３３は、ＳＩＭＤレジスタファイル２０内のスカラオペランド“H0”からスカラオペランド“H31”の配置を説明する。他で言及されたように、ＳＩＭＤレジスタファイル２０内のデータ要素の位置を指定する命令の領域で使用される好ましいビットの数は、５ビットである。これにより、３２の可能な位置を指定することができる。当然のことながら、スカラオペランドをＳＩＭＤレジスタファイル２０に写像する１つの可能な方法は、レジスタ“D0”からレジスタ“D31”の各々の中で最初のエントリに各オペランドを配置したことである。しかしながら、ＳＩＭＤレジスタファイル２０は、その代わりに写像するように配置されるか、またはＳＩＭＤレジスタファイル２０内の最初の３２個の論理的エントリに、選択可能なスカラオペランドの別名（省略形）を付ける。このような方法でスカラオペランドを配置することは、著しい利点を与える。第１に、スカラオペランドを近接したエントリに配置することにより、スカラオペランドを記憶するために使用される“D”レジスタの数を最小化し、言い換えると、他のデータ要素を記憶するために利用可能な“D”レジスタの数を最大化する。近接したエントリに記憶されたスカラオペランドを備えることにより、特に行列操作またはフィルタ操作を実行しているときに有効である、ベクトル内部の全てのスカラオペランドがアクセスされることを可能にする。例えば、ベクトル乗算による行列は、ベクトルから選択された各スカラに対して実行されるべきスカラ操作によるベクトルを必要とする。更に、このような方法で少なくともいくつかのレジスタから選択可能なスカラオペランドを記憶することは、全てのスカラオペランドに、それらのレジスタから選択されることを可能にする。
【０１６７】
図３４は、一実施例の“ベクトル×スカラ”演算を実行するために構成されたロジックを概略的に説明する。
【０１６８】
ソースのデータ要素（Dm[0] からDm[3]）は、レジスタ“Dm”から与えられる。各ソースのデータ要素は、多数のマルチプレクサ５００を備えるスカラ選択ロジック５１０へ与えられる。各ソースのデータ要素は、各マルチプレクサ５００の１つの入力に与えられる（すなわち、各マルチプレクサは、ソースのデータ要素“Dm[0]”からソースのデータ要素“Dm[3]”を受信する。）。それゆえに、各マルチプレクサは、ソースのデータ要素“Dm[0]”からソースのデータ要素“Dm[3]”のどれでも出力することができる。この実施例では、各マルチプレクサは、同じソースのデータ要素を出力するように配置される。それゆえに、スカラ選択ロジック５１０は、１個のスカラオペランドを選択し、かつ出力するように配置され得る。これは、マルチプレクサに、ソースのデータ要素“Dm[0]”からソースのデータ要素“Dm[3]”の１つを、選択されたスカラオペランドとして出力させる“ベクトル×スカラ”命令に応答するＳＩＭＤデコーダ１６によって生成されている信号により達成される。
【０１６９】
“ベクトル×スカラ”演算ロジック５２０は、選択されたスカラオペランドを受信すると共に、レジスタ“Dn”から与えられたソースのデータ要素“Dn[0]”からソースのデータ要素“Dn[3]”もまた受信する。各ソースのデータ要素は、多数の演算装置５３０を備える“ベクトル×スカラ”演算ロジック５２０に与えられる。各ソースのデータ要素は、演算装置５３０の１つに与えられる（すなわち、各演算装置は、ソースのデータ要素“Dm[0]”からソースのデータ要素“Dm[3]”の１つと選択されたスカラオペランドとをを受信する。）。“ベクトル×スカラ”演算ロジック５２０は、２個のデータ要素に対して操作を実行すると共に、前述の命令をサポートして、ＳＩＭＤレジスタファイル２０内のレジスタの個々のエントリに記憶するための結果のデータ要素を出力する。これは、受信されたデータ要素に対して必要とされる操作を演算装置５３０に実行させる“ベクトル×スカラ”命令に応答するＳＩＭＤデコーダ１６によって生成されている信号により達成される。
【０１７０】
従って、このロジックは、ソースレジスタのデータ要素の１つが、スカラオペランドとして選択されると共に、別のレジスタからの全てのソースのデータ要素に対して、同一のスカラオペランドを使用して“ベクトル×スカラ”演算を実行することを可能にすることが分かる。
【０１７１】
図３５は、ＳＩＭＤ処理の間のシフト操作及び縮小操作を処理する知られた方法を示す。図に示すように、この操作を実行するために３個の個別の命令（SHR、SHR、及びPACK LO）が要求される。図３５において、及び図３６、図３８においては、明確化のために中間数値が点線によって示される。
【０１７２】
図３６は、本技術による右シフト操作及び縮小操作を示す。本実施例の構造は、特に、シフト操作及び縮小操作を処理するために十分に適用されると共に、単一の命令に応答してそうすることができる。命令は、ＳＩＭＤデコーダ１６（図１参照）内部の命令デコーダにより復号（デコード）される。この例では、ＳＩＭＤレジスタファイル２０（図１参照）に配置されたレジスタ“Qn”内のデータは、右に５ビットシフトされる。更に、残っているデータが丸められる。次に、同様にＳＩＭＤレジスタファイル２０に配置されたデスティネーションレジスタ“Dd”へ、右側の１６ビットが端から端まで転送される。そのハードウェアは、命令に応じてデータの丸め、及び／またはデータの飽和を任意にサポートすることができる。整数を右シフトして処理するとき、一般的には更に小さい数を生み出すので、一般的に右にシフトする命令は、データの飽和を必要としない。しかしながら、右シフトを行いかつ縮小を行う時は、データの飽和は、適切であるかもしれない。
【０１７３】
データの飽和は、最も近い許容値を選択することによりデータ要素をある範囲に制限するために利用され得る処理である。例えば、もし２個の符号なし８ビット整数が８ビットレジスタを使用して掛け合わされると、結果はオーバフローする可能性がある。この場合、与えられ得る最も正確な結果は、２進数の“１１１１１１１１”であると共に、このように、その数はこの数値を与えるために飽和状態になることになる。それによって縮小された数値が狭い空間に適応できない、シフト及び縮小を行うとき、同様の問題は起こりえる。この例では、符号のない数値の場合、シフトステップにおいて不要とされるどのビットもゼロでないとき、その場合には、数値は、最大許容値の飽和状態にされている。符号付き数値の場合、問題は更に複雑である。この場合、最も重要なビットが不要とされるどのビットとも異なるとき、その数値は、正の最大許容値または負の最大許容値の飽和状態にされていなければならない。
【０１７４】
データの飽和は、データ要素の入力のタイプがその出力のタイプと異なる場合、すなわち符号付き数値がシフト及び縮小され、飽和状態にされることで符号なし数値が出力される場合にもまた発生する。異なるデータタイプを出力する能力が非常に有益なこともある。例えば、画素の処理において、輝度は符号なし数値であるが、しかしながら、この数値を処理する間、それを符号付き数値として処理することは適切かもしれない。処理の後で、符号なし数値が出力されるべきであるが、しかしながら、符号付き数値から符号なし数値への単純な変更は、数値を飽和させる能力が与えられない限り、問題を引き起こすこともあり得る。例えば、処理の間に少しの間違いが原因で輝度値が負の値に減少したならば、この負の符号付き数値を符号なし数値として単純に出力することは無意味であろう。このように、符号なし数値を出力する前に、どんな負の数値もゼロに飽和させる能力は、非常に有益な手段である。
【０１７５】
異なるシフト命令に対する可能なフォーマットの例が、以下のテーブル６（表１４から表１６）及びテーブル７（表１７）に与えられている。図に示すように、命令は、それが“V”を最前列に有することによりベクトル命令であることを指定し、更に“SH”によって、この場合には即時にシフトするシフトが指定されると共に、右かまたは左かの方向は、この時“R”または“L”により表される。命令は、同時に、テーブル０（表１）と同様に、デスティネーションレジスタ内のデータ要素サイズである第１のタイプと、ソースレジスタのデータ要素サイズである第２のタイプの２個のタイプを有する。次の情報は、デスティネーションレジスタ及びソースレジスタの名前を有すると共に、その場合には、直接の値が与えられても良く、この値はデータがシフトされるべきビットの数を表すと共に“＃”が前に置かれる。命令の一般的なフォーマットに対する修飾語句が使用される可能性があり、“Q”は、飽和状態の整数計算を利用する操作を表すために使用されると共に、“R”は、丸めを実行する操作を表すために使用される。命令のフォーマットのより多くの詳細は、例えばテーブル０（表１）のように、説明の最初の方で与えられている。
【０１７６】
テーブル７（表１７）は、符号付き変数によるシフトに関する命令を示す。この命令は、即値（immediates）による左シフトと同一であるが、しかし、即値に命令を与える代わりに、符号付き変数のベクトルが記憶されている場所を示すレジスタアドレスには命令が与えられる。この場合、負の数が右方向シフトを表している。シフトされるべきビットの数は、ベクトル内に記憶されているので、各データ要素に対して、それらが異なる量でそれぞれシフトされ得るように、異なる符号付き変数は記憶され得る。この処理は、図３９に、より詳細が示されている。
【０１７７】
テーブル６
「即値によるシフト」
即値シフトは、ソースベクトル全ての要素を同じ量によってシフトするために、命令内部に符号化された直接の数値を使用する。縮小バージョン（Narrowing versions）は、データの飽和を含むことができる数値の縮小化（casting down）を可能にし、一方、ロングバージョン（Long versions）は、任意の固定小数点での拡大化（casting up）を可能にする。累積バージョン（accumulate versions）によるシフトは、多くのＤＳＰアルゴリズムに見られる効率的なスケーリング及び累積をサポートするために提供される。右シフト命令もまた、丸めを行うオプションとして与えられる。丸めは、実際には丸められるべき数の半分を追加することにより実行される。このように、“n”の右シフトを行う時、それをシフトする前に、“２ｎ−１”が数値に加算される。このように、以下のテーブル（表）において、もし“n≧1”の場合、丸め（n）（round(n)）＝２ｎ−１で、もし“n<0”の場合、丸め（n）（round(n)）＝０である。ビット単位の抽出命令は、データの効率的な梱包を可能にするために含まれる。
【０１７８】
【表１４】
0005393643.tif 000015
【０１７９】
【表１５】
0005393643.tif 000016
【０１８０】
【表１６】
0005393643.tif 000017
【０１８１】
テーブル７
「符号付き変数によるシフト」
このセクションのシフトは、第２のベクトルにおいて指定された符号付きシフト量により制御された要素の１つのベクトルに対するシフト実行する。符号付きシフト量をサポートすることは、合理的には負の値になる可能性がある指数値によるシフトに関するサポートを可能にし、負の制御値は右シフトを実行することになる。ベクトルシフトは、各要素が異なる量によりシフトされることを可能にするが、しかし、ベクトルシフトは、シフトが実行される前に、ベクトルの全てのレーンに対するシフト制御オペランドを複製することにより、同一の量の分だけ全てのレーンをシフトするために使用され得る。符号付きシフト制御値は、シフトされるべきオペランドの最小のオペランド要素サイズと同一のサイズの要素である。しかしながら、シフター変数は、シフト量を決定するために、各レーンの最下部の８ビットだけを使用して解釈される。丸め、及び飽和オプションもまた、利用可能である。
【０１８２】
【表１７】
0005393643.tif 000018
【０１８３】
こうして、図に示すように、ハードウェアは、ソースのデータ要素と結果のデータ要素の両方のサイズ、及び、時にはデータがシフトされるべき位置の数もまた指定することが可能である命令をサポートする。これは、それを非常に適応可能で強力な道具にする。
【０１８４】
図３６において示される右シフト操作及び縮小操作は、多数の可能な応用例を有している。例えば、固定小数点数値を含む、確かな精度が要求される計算において、計算が実行される間、オーバーフローまたはアンダーフローの危険性を回避するために、例えばおよそ１６ビットの数値を３２ビットのデータ値の中心に配置することは適しているかもしれない。計算の最後に、１６ビットの数が要求される可能性があると共に、このように、図３６において示されるようなシフト操作及び縮小操作が適切である。異なるサイズのソースレジスタ及び異なるサイズのデスティネーションレジスタを使用する本技術により予想される可能性は、ここでは特に効果的であると共に、異なるサイズのデータが、ＳＩＭＤ処理の間、特定のレーンに留まることを可能にする。
【０１８５】
図３６において説明された操作に類似したシフト操作及び縮小操作の更なる使用は、カラー画素データの処理内にあることもあり得る。ビデオデータは、全てがそれらに対して実行されるべき同一の操作を必要とする複数の画素を含んでいるので、ＳＩＭＤ処理は、特にビデオデータに適している。このように、異なる画素データは、レジスタにおける異なるレーン内に存在することができると共に、単一命令は、全てのデータに対して同一の操作を実行することができる。多くの場合、ビデオデータは、赤色、緑色、及び青色のデータとして生じる可能性がある。これは、それらに対して意味のある操作が実行される前に分離される必要がある。図３７は、１６ビットデータ要素に存在する赤色、緑色、及び青色データの一般的な例を示す。示されたこの例では、青色データが３ビットの左シフト操作及び縮小操作により抽出されることもあり得る。位置３個の左シフトは、概略的に点線のレジスタ（中間の値を表わしている）で示されるように、青色データをデータ要素の中心の左に送り、３個のゼロが、データの左シフトにより引き起こされたデータ数値の右における３個の空の位置を満たす。縮小操作は、結果として生じる８ビットのデータ要素に移されている、青色データ及び３個のゼロに帰着する。
【０１８６】
シフトすること及び縮小することに加えて、同様に本技術は、拡大及びシフトするためにも使用され得ると共に、この処理は図３８に示される。この場合、拡大することは、左シフトに続いて実行される。この操作は、例えば、３２ビットの数値が６４ビットの数値内部で適切な場所に配置されるように、３２ビットの数値を６４ビットの数値へ移すために使用し得る。示された例において、最下位ビットとして加えられているゼロがレーンの最上位ビットに配置されることにより、２個の３２ビットの数値が６４ビットの数値へ移される。
【０１８７】
図３９は、各データ要素がシフトされるべき位置の数を表すと共に、符号付き整数であって負の数が右シフトを表す数値のベクトルを使用することの可能性を示す。各データ要素に対する数値を保持するレジスタが使用されると共に、各データ要素は、そのレーンに設定された数値で指定された量によりシフトされる。そのような操作に対する命令は、予めテーブル７（表１７）に設定される。
【０１８８】
図４０は、単純な多重化操作を概略的に示す。この多重化操作において、マルチプレクサ７００は、制御ビット“c”の数値に従って“D”に出力されるべき数値“a”または数値“b”のいずれの数値も選択する。“c”は、“a”と“b”の間で出力を選択するために使用される。“c”は、多くの場合、“a > b”のような判定の結果に基づいている。構造の実施例は、ＳＩＭＤ処理中の多重化操作を実行する能力を与える。ＳＩＭＤ処理は、分岐操作の実行に適していないと共に、このように、他の命令、もっと正確に言えば、２個のソースレジスタ“a”及び“b”のどちらの部分が選択されるべきかを表すために使用されているマスクが生成される場合、多重化は標準的に実行され得ない。
【０１８９】
このマスクは、２個のソースレジスタａ及びｂのどちらの部分が選択されるべきかを表すために使用される制御値から構成される。実施例によっては、一定の位置における“１”は、“b”の一定のセクションが選択されるべきであることを表しても良く、一方、その位置における“０”は、“a”の対応するセクションが選択されるべきであることを表すであろう。このマスクは汎用レジスタに記憶され、それによって特殊目的レジスタの必要性を減少させる。
【０１９０】
マスクの型は実行されるべき多重化操作に依存していると共に、マスクの型はこの操作に応答して生成される。例えば、この場合、上で与えられた“a”と“b”との比較が実行される。これは、部分部分で実行されることができ、例えば、ＳＩＭＤ処理における対応するデータ要素が比較される。“a”と“b”の対応するデータ要素が比較されると共に、“b”が“a”より大きいか、または“b”が“a”と等しいあるいは“a”より小さいかに依存する制御値を記憶するために使用されている汎用レジスタの一部に数値が書き込まれる。これは、命令“VCGT”より優れた比較を使用して全てのデータ要素に対して並列に実行され得る。この命令は、システムの実施例の命令セットとして与えられる。以下のテーブル８（表１８、表１９）は、構造の実施例により与えられる多様な比較命令を示す。
【０１９１】
テーブル８
「比較及び選択」
データの水準選択及びデータのマスキング（masking）を提供するために使用され得るマスクを生成するための変数の比較とテストが実行され得る。それは、ベクトル化されたコードの終わりで、ベクトル内部の最大値及び最小値を見つけるために使用され得る畳み込みのバージョンを含んでいる、最大値及び最小値を選択するための命令もまた提供する。
【０１９２】
【表１８】
0005393643.tif 000019
【０１９３】
【表１９】
0005393643.tif 000020
【０１９４】
一度マスクが生成されたならば、このマスクを含む汎用レジスタである制御レジスタ“C”を使用して、単一命令が“a”または“b”を選択するために使用され得る。このように、データプロセッサは、“a”または“b”を選択する多重化操作を実行するために、“C”により制御される。
【０１９５】
図４１は、ソースの数値“a”またはソースの数値“b”の選択がビット幅で実行されるシステムの実施例を概略的に示す。この場合、レジスタ“a”７１０とレジスタ“b”７２０とでデータ要素を比較することにより、制御レジスタ７３０がデータで満たされた。このように、例えばおよそ８ビット幅のデータ要素“a0”は、同じサイズのデータ要素“b0”と比較される。このとき、“a”は“b”より小さい、または“b”と等しい場合、このように、８個のゼロ（“０”）が制御レジスタ７３０の対応する部分に挿入される。もし、“a”が“b”より大きい場合、８個の“１”が制御レジスタ７３０の対応する部分に挿入される。類似の比較が全てのデータ要素に対して並列に実行されると共に、対応する制御ビットが生成される。制御ベクトルを生成する比較操作は、命令“VCGT.S8 c,a,b”に対応する。その時、選択は、ソースレジスタに記憶されたビットと制御レジスタに記憶された対応するビットとの間において、単純な論理演算を実行することにより、少しずつとても単純に実行され得ると共に、それぞれの結果のビットが、この例ではレジスタ７３０であるデスティネーションレジスタに書き込まれており、すなわち結果は制御値を上書きする。このビット単位の選択の利点は、データタイプと幅の独立性であると共に、適切な場合、異なるサイズのデータ要素が比較され得ることである。
【０１９６】
図４２は、ビット幅で制御が行われないが、データ要素で制御が行われる代わりの実施例を示す。示された実施例において、もし、制御レジスタ“C”７３０内のデータ要素がゼロより大きい、またはゼロと等しい場合、ソースレジスタ“b”７２０内の対応するデータ要素、それはデスティネーションレジスタ（この場合レジスタ７２０）に書き込まれる。もし、この例のように、“C”が符号付き整数の場合、“a”または”b”のいずれを選択するかを決定するときに、“C”の最上位ビットだけが注目される必要がある。
【０１９７】
他の実施例では、“C”の他の性質が、レジスタ“a”７１０からのデータ要素が選択されるべきかどうか、またはレジスタ“b”７２０からのデータ要素が選択されるべきかどうかを決定するために使用され得る。そのような性質の例は、この場合最下位ビットである制御値の１ビットだけが、再度注目される必要がある“C”が奇数か偶数か、または“C”がゼロと等しいか、ゼロと等しくないか、あるいはゼロより大きいかということを含んでいる。
【０１９８】
一般的に、ＡＲＭの命令、及び実際多くの他のＲＩＳＣ命令だけが、どの命令に対しても３個のオペランドを供給する。多重化操作は、２個のソースレジスタ“a”及び“b”、制御レジスタ“C”、及びデスティネーションレジスタ“D”を指定するために、一般的に４個のオペランドを必要とする。本システムの実施例は、一般的に多重化操作に従う、少なくともソースのデータまたは制御データの２セットの内の１つは、もはや必要とされないという事実を巧みに利用する。このように、デスティネーションレジスタは、２個のソースレジスタの内の１個、または制御レジスタのどちらかになるように選択される。制御レジスタは汎用レジスタであって特殊レジスタではないので、これだけが機能する。システムの実施例において、１個のソースレジスタに書き戻すことを指定する命令、他のソースレジスタに書き戻すための別の命令、制御レジスタに書き戻すための第３の命令の３個の異なる命令が命令セット中に提供される。各命令は、２個のソースレジスタ及び制御レジスタを指定する適正な３個のオペランドを必要とする。これらの３個の命令は、下記のテーブル９（表２０）に指定される。
【０１９９】
【表２０】
0005393643.tif 000021
【０２００】
図４３は、システムにより提供される３個の多重化命令に対応するマルチプレクサの配置の３個の例を概略的に示す。図４３Ａは、ビット単位の選択“VBSL”命令を実行するために接続されたマルチプレクサ７０１を示す。この例では、図４１及び図４２において説明された例とは反対に、“C”が偽（false：０）であるとき、“A”が選択されると共に、“C”が真（true：１）であるとき、“B”が選択される。説明された実施例において、デスティネーションレジスタは、結果の数値が制御値を上書きするように、制御レジスタと同一である。もし、逆の選択が要求される、すなわち“C”が真であるとき、“A”が選択されると共に、“C”が偽であるとき、“B”が選択されるならば、オペランド“A”とオペランド“B”の単純な交換により、同一の回路が使用され得る。
【０２０１】
図４３Ｂは、もし真ならば、ビット単位で挿入する“BIT”命令に対応するマルチプレクサ７０２を示し、かつソースレジスタ及びデスティネーションレジスタの両方として振る舞うと共に結果のデータで上書きされるソースレジスタ“A”である。この例では、“B”は、“C”が真のとき、“A”に書き込まれ、一方、もし“C”が偽のとき、レジスタ“A”の現在の数値は変化しない状態を保持する。この実施例では、もし逆の選択が要求される、すなわち、もし“C”が真でなく偽で、“B”をデスティネーションレジスタに書き込むことを要求される場合、デバイスがマルチプレクサ７０１の対称性を備えていないので、レジスタの配置を単純に入れ替えることは不可能である。
【０２０２】
図４３Ｃは、図４３Ｂの逆の選択、すなわち、もし偽ならば、ビット単位の挿入を行う“BIF”命令に対応するように配置されるマルチプレクサ７０３を示す。この実施例では、“C”が偽のとき、レジスタ“A”の数値がレジスタ“B”へ書き込まれ、一方、“C”が真のとき、レジスタ“B”の数値は変化しない状態を保持する。図４３Ｂのように、このシステムには対称性がない。
【０２０３】
図４４は、メモリ内部に記憶された一連のバイトデータ“B0”から“B7”を概略的に説明する。これらのバイトデータは、同じバイトデータが、現在のエンディアンモード（endianess mode）に関係なく、所定のメモリアドレスの読み取りに応答して返されるであろうバイトの不変のアドレス指定（byte invariant addressing）に従って記憶される。メモリは、位置合わせされないアドレス指定（unaligned addressing）もまたサポートし、それによりハーフワードデータ（half words）、ワードデータ（words）、または更に大きなマルチバイトデータ（multi-byte data）要素が、任意のメモリバイトアドレスから始まるメモリから読み取られる。
【０２０４】
８個のバイトデータ“B0”から“B7”がリトルエンディアンモード（little endian mode）のシステムを備えたメモリから読み取られるとき、その場合にバイトデータ“B0”から“B7”は、レジスタ８００内部に、図４４に示される順番で適切に配置される。レジスタ８００は、それぞれが１６ビットのハーフワードデータを備える４個のデータ要素を含んでいる。図４４は、同様にシステムがビッグエンディアンモード（big endian mode）で動作しているときにレジスタ８０２に読み出されている同じ８個のバイトデータ“B0”から“B7”を示す。
【０２０５】
この例では、一度メモリから個々のＳＩＭＤレジスタ８００，８０２に読み出されるデータは、データ要素サイズが２倍となる２乗操作（squaring operation）の処理を受ける。従って、結果は２個のデスティネーションＳＩＭＤレジスタ８０４，８０６に書き込まれる。図４４からわかるように、これらのレジスタペア８０４，８０６の最初または２番目に個々に書き込まれた結果の数値は、データがメモリから読み取られた際のエンディアンモードに応じて変化する。従って、２乗された結果の数値を更に手際よく処理するＳＩＭＤコンピュータプログラムは、エンディアンモードに応じてデータの異なる配置を考慮するように変更される必要があるかもしれない。これは、不都合にも、データがメモリ内部に記憶された方法における異なるエンディアンに対処するために、２個の異なる形式のコンピュータプログラムを作り出す必要性が生じる。
【０２０６】
図４５は、再整理ロジック８０８の装置によりこの問題を扱う。データ処理システムは、指定されたメモリアドレスから始まると共に、メモリのバイトの不変のアドレス指定の特質を利用するメモリから８個のバイトデータ“B0”から“B7”を読み取る役目を果たすメモリアクセスロジック（memory accessing logic）８１０を含む。メモリアクセスロジック８１０の出力は、従って、エンディアンモードに関係なく同一の出力レーンにおいて、所定のメモリアドレスからのバイトデータの読み取りを提供する。このように、説明されたデータ要素がハーフワードデータである例において、特定のメモリアドレスから再生されたバイトデータは、それが他のエンディアンモードにおけるハーフワードデータの最下位桁部分である一方、あるエンディアンモードのときはハーフワードデータの最上位桁部分であるかもしれない。
【０２０７】
データ要素再整理ロジック８０８は、ＳＩＭＤレジスタ８１２にロードされたデータ要素がリトルエンディアン形式で記憶されたデータと一致する形式となると共に、メモリシステム内部で使用されているエンディアンモードに関係なく再配置なしでロードされるように、メモリアクセスロジック８１０によりメモリから読み出されるデータ要素の再整理に関与する。メモリシステム内部で使用されているリトルエンディアンモードの場合、データ要素再整理ロジック８０８は、バイトデータを再整理しないと共に、これらを変更せずに通過させることになる。しかしながら、メモリ内部にビッグエンディアン形式で記憶されているデータの場合、データ要素再整理ロジック８０８は、ハーフワードのデータ要素がＳＩＭＤレジスタ８１２内部のリトルエンディアン形式で現れるように、それぞれのハーフワードでメモリから読み取られるバイトデータの順番を逆転する役目を果たす。このように、単一のＳＩＭＤコンピュータプログラムは、メモリ内部に記憶された際のエンディアンモードに関係なくＳＩＭＤレジスタに移されたデータ要素に対して、正しいデータ処理操作を実行できる。図４５から、データ要素再整理ロジック８０８が、メモリにより使用されているエンディアンモードを表している信号、及び当該データ要素サイズを表している信号に応答することが理解されることになる。使用されているエンディアンモードは、何らかの再整理が要求されるかどうかを制御することになり、サイズは、もし要求されるならば、適用される再整理の性質を制御することになる。データがメモリ内部にリトルエンディアンモードで記憶されると共に、ＳＩＭＤレジスタがリトルエンディアンであるとき、再整理は要求されないことが理解されることになる。反対に、もしＳＩＭＤレジスタがビッグエンディアン形式と仮定される場合、データがメモリ内部にビッグエンディアン形式で記憶されたときは再整理は要求されないであろうが、しかし、データがメモリ内部にリトルエンディアン形式で記憶されたときには、再整理が要求されるであろう。
【０２０８】
図４６は、この例ではデータ要素が３２ビットデータワードであることを除いて、図４５のそれと類似した例を説明する。図から分かるように、これらのデータワードがビッグエンディアン形式でメモリに記憶されるとき、データ要素再整理ロジック８０８により適用される再整理は、メモリアクセスロジック８１０により読み出される４個のバイトデータ要素のバイト順番（byte order）を、これらが、メモリ内にリトルエンディアン形式で記憶されたデータと一致する形式でＳＩＭＤレジスタ８１２に記憶されると共に、再配置の必要なくロードされるように逆転する。
【０２０９】
当然のことながら、ここに全体として記述されたプロセッサシステムの状況において、メモリアクセスロジック８１０及びデータ要素再整理ロジック８０８は、先に記述されたロード記憶ユニットの一部を形成しても良い。スカラレジスタにデータを読み取るときに、スカラレジスタ内部のデータに対して特定のエンディアンが仮定される場合、データ要素再整理ロジック８０８もまた、メモリシステムのエンディアンを補償するために使用されても良い。
【０２１０】
図４７は、データ要素再整理ロジック８０８の更に詳細を説明する。これは、個々に制御された信号Ｘ、信号Ｙ、及び信号Ｚにより制御されたマルチプレクサの３個の段階として形成されることが理解されることになる。これらの３個の階層は、それぞれ隣接したバイトデータ、隣接したハーフワードデータ、隣接したワードデータの場所を逆転させる原因となる。制御信号Ｘ、制御信号Ｙ、及び制御信号Ｚは、有効な状態（真の状態）にされたときビッグエンディアンモードを表すエンディアン信号、及び、図４７に説明されるように、それぞれ６４、３２、または１６ビットのデータ要素サイズを表すサイズ信号から復号される。当然のことながら、データ要素再整理ロジックの複数の他の形式が、図４５及び図４６に説明されるような、同じ機能的な結果を達成するために使用されることもあり得る。
【０２１１】
メモリのバイトの不変のアドレス指定を実行するために使用されるメモリアクセス命令は、プロセッサのスカラレジスタバンクのレジスタ内部に保持されるメモリアドレス識別子を都合良く使用する。プロセッサは、ＳＩＭＤレジスタ内部の選択されたデータ要素の１つを操作するデータ処理命令と同じように、データ要素サイズを変更するデータ処理命令をサポートする。
【０２１２】
図４８は、それぞれテーブルレジスタとしての役目を果たすレジスタ“D0”，“D1”、インデックスレジスタ“D7”、及び結果レジスタ“D5”のリストを含んでいるレジスタデータ記憶装置９００を説明する。テーブルレジスタ“D0”，“D1”は、レジスタデータ記憶装置９００内部で隣接して番号が付けられているレジスタであることが理解されることになる。結果レジスタ“D7”及びインデックスレジスタ“D5”は、テーブルレジスタに関連すると共に、お互いに関連して、任意の位置に置かれる。このデータ操作に対応する命令の構文は図中に示されている。
【０２１３】
図４９は、テーブル検索拡張命令の動作を概略的に説明する。命令は、例えばリストの中の最初のレジスタ、及びリストの中のレジスタの番号（例えば、１から４）を指定することにより、テーブルレジスタのブロックとして使用されるべきレジスタのリストを指定する。命令は、インデックス（索引）レジスタ“D7”として使用されるべきレジスタ、及び結果レジスタ“D5”として使用されるべきレジスタもまた指定する。テーブル検索拡張命令は、テーブルレジスタ“D0”，“D1”内部に記憶されたデータ要素のデータ要素サイズ、及び、選択され、結果レジスタ“D5”に書き込まれるべきデータ要素のデータ要素サイズを更に指定する。説明された例において、テーブルレジスタ“D0”，“D1”は、それぞれ８個のデータ要素を含む。従って、インデックス値は、０から１５の範囲内の期間を有する。この予め決められた範囲外のインデックス値は、テーブル検索には使用されず、その代わりとして、結果レジスタ“D5”内部の対応する場所は変化しないままの状態とされる。説明されるように、第４及び第６のインデックス値は、このように範囲外である。他のインデックス値は、それぞれテーブルレジスタ“D0”，“D1”内部のデータ要素を示すと共に、これらのデータ要素は、次に結果レジスタ“D5”の対応する場所に記憶される。インデックスレジスタ“D7”内部のインデックス値と、結果レジスタ“D5”内部のデータ要素の場所との間には、１対１の対応関係がある。結果レジスタ“D5”内の“U”マークのついた数値は、その場所に記憶された数値はテーブル検索拡張命令の動作の間保持されることを表す。このように、命令の実行の前にその場所に記憶されたどんなビットでも、命令の実行の後でその場所にまだ記憶されている。
【０２１４】
図５０は、図４９からのインデックス値を説明するもので、ＳＩＭＤ減算操作に従うことにより１６のオフセットがインデックス値のそれぞれに適用される。これは、範囲外のインデックス値を先の範囲内のインデックス値とする。先の範囲外の数値は、直ちに範囲内に動かされる。このように、今変更されたインデックス値を含んでいるインデックスレジスタ“D7”が別のテーブル検索拡張命令において再利用されるとき、第４及び第６のインデックス値は、今は範囲内であると共に、同様に第２のテーブル検索拡張命令の実行の前にリロード（reloaded）されたテーブルレジスタ“D0”，“D1”（または、第２のテーブル検索拡張命令において指定される可能性がある他の異なるレジスタ）において実行されるテーブル検索に使用される。このように、インデックスレジスタ“D7”内部のインデックス値の単一のセットは、オフセットに左右される可能性があり、その上、利用可能である更に大きなテーブルの効果を与えるために、リロードされたテーブルレジスタ“D0”，“D1”に対して再利用される。
【０２１５】
図５１は、テーブル検索拡張命令に併せて提供される可能性がある更なるテーブル検索命令を説明する。これらの命令の間の違いは、テーブル検索命令において、範囲外のインデックス値に遭遇するとき、そのインデックス値に対応する結果レジスタ“D5”内部の場所が、変化しない状態のままにされるより、むしろゼロの値によって書き込まれることである。このタイプの動作は、ある種のプログラミングの状況において有益である。図５１の例は、２個のテーブルレジスタよりは、むしろ３個のテーブルレジスタを説明する。第１、第３、第４、第６、及び第７のインデックス値は、範囲外である。第２、第５、及び第８のインデックス値は、範囲内であると共に、テーブルレジスタ内部の対応するデータ要素のテーブル検索に使用される。
【０２１６】
先に言及されたように、ロード命令及び記憶命令は、ＳＩＭＤレジスタファイル２０（図１参照）とメモリとの間のデータの移動のために提供される。それぞれ、そのようなロード命令及び記憶命令は、そこからアクセス操作（それがロード操作であろうと、記憶操作であろうと）が始まるべきメモリ内部の場所を識別する開始アドレスを指定することになる。本実施例のロード命令及び記憶命令に従って、ロード命令または記憶命令の対象とするデータの総数は、命令ごとに変更され得る。特定の実施例において、データの総数は、データタイプ“dt”（すなわち、各データ要素のサイズ）を識別すること、及びＳＩＭＤレジスタリストの識別によりアクセスされるべきデータ要素の数と任意にアクセスされるべき構造体の数とを識別することにより識別される。
【０２１７】
ＳＩＭＤ処理を実行するとき、必要なデータ要素に関して実行されるアクセス操作は、多くの場合、位置合わせされないアクセス（同様にバイトで位置合わせされたアクセスとしてここに参照される）である場合が多い。言い換えると、開始アドレスは、多くの場合、位置合わせされないことになると共に、そのような状況において、ＬＳＵ２２は、アクセス操作が完了することを可能にするために要求される可能性があるアクセス操作に、アクセスの最大数を割り当てることを必要とする。
【０２１８】
可能な実行において、ＬＳＵ２２は、全てのアクセスが位置合わせされないと仮定する準備をすることもあり得る一方、これは、開始アドレスが、ある程度の複数のバイトで実際に位置合わせされる状況において、ＬＳＵ２２はアクセス操作の効率を改善することができないことを意味する。
【０２１９】
ＬＳＵ２２は、開始アドレスが所定の配置構造を備えているかどうかを、開始アドレスから決定することができるであろう一方、ＬＳＵ２２は、一般的に開始アドレスが実際に計算される前に、一度のアクセス操作のためのアクセス数を制限しなければならない。特定の実施例において、ＬＳＵ２２は、パイプライン構造を備えており、任意の特定のアクセス操作を実行するために使用されるべきアクセス数は、パイプラインの復号ステージにおいて、ＬＳＵにより決定される。しかしながら、多くの場合開始アドレスは、例えばオフセット値を基準アドレスに加算することにより、パイプラインの次の実行ステージにおいて計算されると共に、従って、ＬＳＵ２２は、いくつのアクセスをアクセス操作に割り当てるかを決定する前に、開始アドレスの決定を待ち受けることができない。
【０２２０】
本実施例に従って、配置構造修飾子としてもここに言及される、アクセス命令内部の配置構造指示子の領域を提供することにより、この問題は軽減される。特定の一実施例において、配置構造修飾子は、バイトで位置合わせされたもの、すなわち位置合わせされないものとして開始アドレスが扱われることを表す第１の数値をとることができる。当然のことながら、この第１の数値は、配置構造指示子の領域の任意の所定の符号化により提供されることもあり得る。加えて、配置構造修飾子は、開始アドレスが従うように扱われる、異なる所定の配置構造を表す複数の第２の数値の中のどの１つでも取り得ると共に、特定の一実施例において、複数の使用可能な第２の数値は、以下のテーブル（表２１）として表される。
【０２２１】
【表２１】
0005393643.tif 000022
【０２２２】
一実施例においてこの配置構造指示子の情報が使用される方法は、これから図５２を参照して記述されることになる。図５２に示されるように、ＬＳＵ２２は、一般的に所定の幅のデータバスによってメモリシステムに接続されることになる。多くの場合、メモリシステムは、多数の異なるレベルのメモリから構成されると共に、ＬＳＵがデータバスによって通信するメモリのレベルであるメモリの第１のレベルは、多くの場合キャッシュである。従って、図５２に示されるように、ＬＳＵ２２は、この特定の例において、６４ビットの幅を有するものとして取り扱われるデータバス１０２０によって、メモリのレベル１キャッシュ１０１０と通信するために配置される。キャッシュヒット（cache hit）の場合には、アクセスが、レベル１キャッシュの内容に関して発生するのに対して、キャッシュミス（cache miss）の場合には、レベル１キャッシュ１０１０は、その場合に、１つ以上の更なるバス１０３０によって、メモリシステム１０００の他の部分と通信する。
【０２２３】
メモリシステムのさまざまな部分は、分配される可能性があると共に、図５２に説明された例では、レベル１キャッシュ１０１０は、オンチップ（on-chip：チップ上で）で提供される、すなわち、図１の集積回路２内部に組み入れられ、一方、メモリシステム１０００の残りはオフチップ（off-chip：チップ外で）で提供されると仮定される。図５２において、オンチップとオフチップとの間の境界は、点線１０３５により表される。当業者にとっては当然のことながら、他の構成が使用される可能性があると共に、それゆえ、例えば全てのメモリシステムがオフチップで提供されるか、またはメモリシステムのオンチップ部分とメモリシステムのオフチップ部分との間のいくらかの他の境界が提供される可能性がある。
【０２２４】
ＬＳＵ２２は、一般的に中継ルックアサイドバッファ（ＴＬＢ：Translation Lookaside Buffer）１０１５を一部として含むメモリ管理ユニット（ＭＭＵ：memory management unit）１００５ともまた通信するように配置される。当業者にとっては明らかなように、例えば、仮想アドレスの物理アドレスへの変換、アクセス許可の決定（すなわち、アクセスが起こり得るかどうか）等正確なアクセス制御機能を実行するために、ＭＭＵは使用される。これを実行するために、ＭＭＵは、メモリ内のページテーブルから取得された記述子をＴＬＢ１０１５内部に記憶する。各記述子は、メモリの対応するページに対して、メモリのそのページに適切な不可避のアクセス制御情報を定義する。
【０２２５】
ＬＳＵ２２は、制御経路１０２５によって、レベル１キャッシュ１０１０及びＭＭＵ１００５の両方に対するアクセスの正確な細部を通信するために配置される。特に、ＬＳＵ２２は、レベル１キャッシュ及びＭＭＵへ、開始アドレス及びアクセスされるべきデータのブロックのサイズの表示を出力するために配置される。更に、一実施例に従って、ＬＳＵ２２は、配置構造指示子から取り出された配置構造情報もまた出力する。配置構造指示子情報が、ＬＳＵ２２により、及び／またはレベル１キャッシュ１０１０とＭＭＵ１００５とにより使用される方法は、更に図５３Ａから図５４Ｂまでを参照してこれから記述される。
【０２２６】
図５３Ａは、各水平の実線でメモリにおける６４ビットの配置構造を表しているメモリアドレス空間を説明する。もしアクセス操作が、引数のための１２８ビットの長いデータブロック１０４０を指定するならば、我々は開始アドレス“０ｘ４”を持つと仮定し、そして、ＬＳＵ２２は、アクセス操作を割り当てるために、６４ビットデータバス１０２０を横切る独立したアクセスの数を決定することを必要とする。更に、先に論じたように、一般的に、どこが開始アドレスであるかを知る前に、この決定を行う必要がある。図５２に関して説明された実施例において、ＬＳＵ２２は、割り当てるためのアクセス数を決定するとき、配置構造指示子情報を使用するように配置される。
【０２２７】
図５３Ａの例において、開始アドレスは３２ビットに位置合わせされると共に、配置構造指示子は、この配置構造を識別する可能性がある。その場合において、図５３Ａから分かるように、ＬＳＵ２２は最悪の場合のシナリオを仮定しなければならず、従って、データブロック１０４０に関して必要なアクセス操作を実行するために、３個の独立したアクセスが要求されることになると仮定する。これは、位置合わせされないアクセスに対して割り当てられなければならないアクセス数と同じである。
【０２２８】
しかしながら、もし我々が今、図５３Ｂに説明される類似の例を考察する場合、１２８ビットデータブロック１０４５は再度アクセスされるべきであるが、しかし、この場合、開始アドレスは６４ビットに位置合わせされる。もし、配置構造指示子情報が、６４ビット配置構造を識別するか、または確かに１２８ビットに位置合わせされたデータを識別するならば、この場合、ＬＳＵ２２は、アクセス操作に対して、２個の独立したアクセスを割り当てることだけを必要とし、それにより効率における著しい改善を提供する。しかしながら、もしデータバスが１２８ビット幅であった場合、更に、もし配置構造指示子が６４ビット配置構造よりもむしろ１２８ビット配置構造を表していた場合、ＬＳＵ２２は単一のアクセスを割り当てることだけを必要とする。
【０２２９】
今図５３Ｃにおける例を考察すると、ここで９６ビットサイズのデータブロック１０５０はアクセスされる必要があることがわかると共に、この場合、配置構造指示子は開始アドレスが３２ビットに位置合わせされることを識別すると仮定される。更にまた、この例において、ＬＳＵ２２が、その時点で実際に開始アドレスを計算していなくても、アクセス数は制限される必要があり、ＬＳＵ２２は、まだ、２回のアクセスだけがアクセス操作に割り当てられる必要があると仮定し得る。図５３Ｄは、８０ビットのデータブロック１０５５がアクセスされるべきであると共に、開始アドレスが１６ビットに位置合わせされることを配置構造指示子が識別する第４の例を説明する。更にまた、ＬＳＵ２２だけは、アクセス操作に２回のアクセスを割り当てる必要がある。もし、その代わりに、配置構造指示子が、アクセスは位置合わせされていないアクセスとして処理されるべきであると表したならば、その場合にはＬＳＵが、同じように確かに図５３Ｃの中で説明されたアクセスに対する事例になっていたアクセス操作に、３回のアクセスを割り当てなければならないことは明確である。従って、配置構造指示子情報は、配置構造指示子が開始アドレスのある種の所定配置構造を表す状況において、アクセスの性能を著しく改善するためにＬＳＵ２２により使用されることがわかる。
【０２３０】
配置構造指示子は、開始アドレス（有効アドレスとしてもまたここに参照される）がその配置構造を備えているという保証を得られないが、しかし、進むべき仮定をＬＳＵ２２に供給することに注意するべきである。もし、開始アドレスが、その後、結果的に配置構造指示子により指定される配置構造に従わないならば、その場合には、一実施例において、関連したロードまたは記憶操作は、配置構造不良を生成するように構成される。配置構造不良は、その場合には複数の周知技術の内のどの１つを用いてでも扱われ得る。
【０２３１】
先に言及されたように、配置構造情報はＬＳＵ２２により使用されるだけでなく、経路１０２５によってレベル１キャッシュ１０１０及びＭＭＵ１００５の両方にもまた伝送される。この情報がレベル１キャッシュまたはＭＭＵにより使用される可能性がある方法は、図５４Ａから図５４Ｂを参照してこれから記述されることになる。図５４Ａ及び図５４Ｂにおいて説明されるように、２５６ビットのデータブロック１０６０，１０６５に対するアクセスが考察されると共に、これらの例において、図中の水平の実線は、メモリ内の１２８ビット配置構造を表している。図５４Ａにおいて、データブロックは６４ビットに位置合わせされると仮定され、一方図５４Ｂにおいて、データブロックは１２８ビットに位置合わせされると仮定される。両方の場合、データバス１０２０は６４ビット幅のみであるので、ＬＳＵ２２は、アクセス操作に対して４回のアクセスを割り当てなければならないことが分かる。ＬＳＵの観点から、配置構造指示子が、開始アドレスは６４ビットに位置合わせされると指定するか、または配置構造指示子が、開始アドレスは１２８ビットに位置合わせされると指定するかどうかは問題ではない。
【０２３２】
しかしながら、レベル１キャッシュ１０１０内部のキャッシュラインは、それぞれ２５６ビットデータを超過して記憶する能力があると共に、更に１２８ビットに位置合わせされる可能性がある。図５４Ａの例において、データブロックは１２８ビットに位置合わせされていないので、キャッシュは２本のキャッシュラインがアクセスされる必要があると仮定することが必要になる。しかしながら、図５４Ｂの例において、レベル１キャッシュ１０１０は、レベル１キャッシュ内部の単一のキャッシュラインだけがアクセスされる必要があると共に、これはレベル１キャッシュ１０１０内部のアクセス操作の効率を高めるために使用され得ると、配置構造指示子から判断することができる。
【０２３３】
同様に、適切な記述子をＴＬＢ１０１５へ読み出すためにＭＭＵからアクセスされる必要があるページテーブルは、多くの場合２５６ビットのデータよりも多く記憶すると共に、多くの場合１２８ビットに位置合わせされる可能性がある。従って、ＭＭＵ１００５は、アクセスされるべきページテーブルの数を決定するために、経路１０２５を通じて提供された配置構造情報を使用することができる。一方、図５４Ａの例においては、ＭＭＵ１００５は、１ページを超えるテーブルがアクセスされる必要があると仮定することが必要であり、図５４Ｂの例においては、ＭＭＵは、単一のページテーブルだけがアクセスされる必要があると共に、この情報はＭＭＵ１００５により実行されるアクセス制御機能の効率を改善するために使用され得ると、配置構造指示子から判断することができる。
【０２３４】
従って、もしアクセスサイクルの番号及び／またはキャッシュアクセスが、開始アドレスが決定され得る前に制限されなければならないならば、上述のようなロードまたは記憶命令内部の配置構造指示子の使用は、ハードウェアにとりわけ有益であるアクセス操作のある種の形式を最適化させるために使用され得ることがわかる。この仕組みは、アクセスされるべきデータのさまざまな長さを指定すると共に、ＬＳＵとメモリシステムとの間で異なるデータバスサイズを有するプロセッサ上のロードまたは記憶命令にとって有益である。
【０２３５】
複数のデータ要素がレジスタ内部に隣り合って配置され、その上、それらのデータ要素に対して操作が並列に実行される標準のＳＩＭＤフォーマットにおいて実行されることに、それら自身が役に立たない多数のデータ処理操作がある。いくらかのそのような操作の例は、 図５５Ａから図５５Ｃにおいて説明される。図５５Ａは、第１のレジスタ１１００内部の４個のデータ要素“A”，“B”，“C”，“D”を、第２のレジスタ１１０２内部の４個のデータ要素“E”，“F”，“G”，“H”でインタリーブすることが要求されるインタリーブ操作を説明する。図５５Ａにおいて、結果のインタリーブデータ要素は、デスティネーションレジスタ１１０４，１１０６内部に示されている。これらのデスティネーションレジスタは、ソースレジスタ１１００，１１０２と異なるレジスタであっても良く、または、代わりにソースレジスタと同じ２個のレジスタの１組のセットであっても良い。図５５Ａから分かるように、このインタリーブ操作に従って、各ソースレジスタからの第１のデータ要素は、デスティネーションレジスタ内部に隣り合って配置され、その後に両方のソースレジスタからの第２のデータ要素が続き、その後に両方のソースレジスタからの第３のデータ要素が続き、その後に両方のソースレジスタからの第４のデータ要素が続く。
【０２３６】
図５５Ｂは、２個のソースレジスタ１１０８，１１１０に配置された８個のデータ要素をデインタリーブすることが要求される、逆のデインタリーブ操作を説明する。この操作に従って、第１、第３、第５、及び第７のデータ要素が１個のデスティネーションレジスタ１１１２に配置され、一方第２、第４、第６、及び第８のデータ要素が１個のデスティネーションレジスタ１１１４に配置される。図５５Ａの例と同様に、当然のことながら、デスティネーションレジスタはソースレジスタと異なっていても良く、または、代わりに同じレジスタであっても良い。もし、図５５Ａ及び図５５Ｂの例において、レジスタは６４ビットレジスタであると仮定されるならば、その場合は、この特定の例においてインタリーブまたはデインタリーブされるデータ要素は１６ビット幅のデータ要素である。しかし、当然のことながら、インタリーブまたはデインタリーブされるデータ要素に対して、１６ビット幅であるべきという必要条件はないと共に、ソースレジスタ及びデスティネーションレジスタに対して、６４ビットレジスタであるべきという必要条件もない。
【０２３７】
図５５Ｃは、（行列の）転置操作により実行される機能を説明する。この例に従って、第１のソースレジスタ１１１６からの２個のデータ要素“A”，“B”、及び第２のソースレジスタ１１１８からの２個のデータ要素“C”，“D”は、転置されるべきであると共に、転置の結果は、第１のソースレジスタ１１１６からの第２のデータ要素が第２のソースレジスタ１１１８からの第１のデータ要素で交換され、第１のデスティネーションレジスタ１１２０内部にデータ要素“A”，“C”が与えられる。一方、第２のデスティネーションレジスタ１１２２内部にデータ要素“B”，“D”が与えられる。更にまた、デスティネーションレジスタは、ソースレジスタと異なっても良いが、多くの場合、デスティネーションレジスタは、実際はソースレジスタと同じレジスタである。１つの例において、各レジスタ１１１６，１１１８，１１２０，１１２２は、データ要素は３２ビット幅のデータ要素であるという場合において、６４ビットレジスタであるべきと見なされる。しかしながら、データ要素に対して、３２ビット幅であるべきという必要条件はないと共に、レジスタに対して、６４ビットレジスタであるべきという必要条件もない。
【０２３８】
更に、上述の全ての例において、レジスタの全部の内容が示されると仮定された一方、これらの３個の論じられた操作は、適切なソースレジスタの異なる部分の内部において、データ要素に対して独立して実行されることもあり得ると共に、従って、その場合の図面は、ソース／デスティネーションレジスタの部分だけが説明される。
【０２３９】
先に言及されたように、標準のＳＩＭＤアプローチは、複数のデータ要素をレジスタ内部に隣り合わせで配置すると共に、更に、それらのデータ要素に対して並列に操作を実行することを必要とする。言い換えると、データ要素の精度で操作の並列化が実行される。これは、要求されたデータ要素がそのような方法で配置され得る操作を非常に効率的に実行することができる一方、例えば、複数のレジスタの全域で要求されたソースのデータ要素を分散することにより、そのような方法で要求されたソースのデータ要素を配置することが実用的でないかなりの数の操作があると共に、従って、ＳＩＭＤアプローチの潜在的な速度の利点は、以前には利用され得なかった。上記のインタリーブ、デインタリーブ、及び転置操作は、以前にはＳＩＭＤアプローチの速度の利点を活用することができなかった操作の例であるが、しかし、当然のことながら、例えばあるタイプの算術演算のように、多くの他の例もまたある。そのような算術演算の特定の例は、実数部と虚数部とから構成される複素数に適用されることを必要とする算術演算である。
【０２４０】
一実施例に従って、この問題は、ある種のデータ処理命令に対して、データ要素サイズを識別するばかりでなく、更に別個の存在としてデータ要素サイズの集合であるレーンサイズも識別する能力を提供することにより軽減される。その場合には、データ処理操作の特定の例示に必要とされる２つ以上のデータ要素が同一のソースレジスタ内部に共存できるように、データ処理命令の並列化は、データ要素サイズよりもむしろレーンサイズの精度で発生する。それゆえに、データ処理操作を実行するために使用される処理ロジックは、レーンサイズに基づいて、並列処理の多数のレーンを定義できると共に、そのような並列処理レーンのそれぞれの内部において、選択されたデータ要素に適用されるデータ処理操作は、その場合にそれぞれのレーンにおいて並列に実行され得る。
【０２４１】
そのような取り組み方により、図５５Ａを参照して上述したように、ＳＩＭＤ方法においてインタリーブ操作を実行することが可能になる。特に、図５６Ａは、一実施例に従って“ZIP”命令を実行するときに実行される処理を説明する。この特定の例において、“ZIP”命令は、“32|ZIP.8”命令である。この命令は、従ってデータ要素は８ビット幅で、かつレーンは３２ビット幅であることを識別する。図５６Ａの例に対して、ソースレジスタは６４ビットレジスタ“D0”１１２５、及び６４ビットレジスタ“D1”１１３０であるべき“ZIP”命令が指定したと仮定される。これらのレジスタのそれぞれは、従って８ビットのデータ要素を含んでいる。各レーン内部において、図５６Ａの下半分に示されるように、独立かつ並列に、データ要素の再配置を行うインタリーブ操作が適用される。一実施例において、“ZIP”命令に対しては、デスティネーションレジスタがソースレジスタと同一であると共に、それに応じて、これらの再配置されたデータ要素がレジスタ“D0”１１２５、及びレジスタ“D1”１１３０内部にもう一度記憶されると仮定される。図５６Ａから分かるように、レーン１内部において、各ソースレジスタの第１の４個のデータ要素がインタリーブされ、レーン２内部において、各ソースレジスタの第２の４個のデータ要素がインタリーブされる。
【０２４２】
レーンサイズか、またはデータ要素サイズのいずれかを変更することにより、インタリーブの異なる形式が実行されることもあることが容易に認識される。例えば、もしレーンサイズが６４ビットとして識別された場合、すなわちそれらが単一のレーンだけになる場合、その場合にはデスティネーションレジスタ“D0”が各レジスタの第１の４個のデータ要素のインタリーブされた結果を含み、一方、デスティネーションレジスタ“D1”が各レジスタの第２の４個のデータ要素のインタリーブされた結果を含むことが分かる。当然のことながら、対応するデインタリーブ操作を実行するために、再度レーンサイズ及びデータ要素サイズの両方を指定することができる、対応する“UNZIP”命令が提供される。
【０２４３】
一般的に、転置操作は、インタリーブ操作またはデインタリーブ操作と全く異なる操作として取り扱われると共に、従って、転置操作を実行するために別個の命令が提供されることを必要とすることが一般的に予想される。しかしながら、独立してレーンサイズ及びデータ要素サイズを定義する能力によりインタリーブまたはデインタリーブ命令を提供するとき、その場合には、２個のソースレジスタが指定され、更にレーンサイズがデータ要素サイズの２倍になるようにセットされれば、転置操作を実行するために実際には同一の命令が使用され得ると理解された。これは、８ビットのデータ要素サイズ、及び１６ビットのレーンサイズ（ずなわち、データ要素サイズの２倍）を識別するインタリーブ命令“ZIP”が設定された図５６Ｂに説明されている。図５６Ａの例のように、同一の６４ビットソースレジスタ“D0”１１２５、及びソースレジスタ“D1”１１３０が選択されると仮定して、これは、図５６Ｂにおいて示されるように、並列処理の４個のレーンを定義する。その場合に、図５６Ｂの下半分から分かるように、インタリーブ処理は、実際には各レーン内部で、各レーン内部の第２のソースレジスタの第１のデータ要素が各レーン内部の第１のソースレジスタの第２のデータ要素と交換される転置結果を生成する。
【０２４４】
それゆえに、上述の実施例に従って、どのようにレーンサイズ及びデータ要素サイズが定義されるかに依存する、インタリーブ操作か、または転置操作のいずれかを実行するために、同一の“ZIP”命令が使用され得る。“UNZIP”命令を使用する転置もまた実際に同じ方法で実行され得ると共に、それに応じて、“16|UNZIP.8”命令は、“16|ZIP.8”命令として同一の転置操作を実際に実行することになるということに更に注目するべきである。
【０２４５】
図５７Ａから図５７Ｃは、画像内部の４×４（four-by-four）の画素配列１１３５が、ライン１１３６について転置されるべきである（図５７Ａ参照）、そのような“ZIP”命令の実行の１つの特定の例を説明する。各画素は、一般的にＲＧＢフォーマットで表された赤成分、緑成分、及び青成分から構成される。詳しくは、もし、各画素を定義することを要求されたデータが１６ビットの長さであると仮定すると、その場合には、配列１１３５内の４画素の各水平ラインに対するデータは独立したソースレジスタ“A”，“B”，“C”，“D”に配置され得ることがわかる。
【０２４６】
図５７Ｂは、以下の２個の命令が実行された場合に発生するさまざまな転置を説明する。
“32|ZIP.16A,B”
“32|ZIP.16C,D”
【０２４７】
各“ZIP”命令は、従ってレーン幅を３２ビット、及びデータ要素幅を１６ビットに定義すると共に、このように、各レーン内部で、図５７Ｂにおいて説明された４個の斜めの矢印線により示されるように、第２のレジスタの第１のデータ要素が第１のレジスタの第２のデータ要素と交換される。それゆえに、２×２（two-by-two）ブロック１１３７、２×２ブロック１１４１、２×２ブロック１１４３、及び２×２ブロック１１４５内部で独立した転置が発生する。
【０２４８】
そして図５７Ｃは、以下の２個の命令の実行の結果として発生する転置を説明する。
“64|ZIP.32A,C”
“64|ZIP.32B,D”
【０２４９】
これらの命令に従って、レーン幅が６４ビット、すなわちソースレジスタの幅全体に設定されると共に、データ要素幅が３２ビットに選択される。第１の“ZIP”命令の実行は、このように、レジスタ“C”１１５１内部の第１の３２ビット幅のデータ要素と交換される、レジスタ“A”１１４７内の第２の３２ビット幅のデータ要素となる。同様に、第２の“ZIP”命令の実行は、レジスタ“D”１１５３内部の第１の３２ビット幅のデータ要素と交換された、レジスタ“B”１１４９内の第２の３２ビット幅のデータ要素となる。図５７Ｃにおいて斜めの矢印線により説明されるように、これは、従って右下の画素の２×２ブロックにより交換された左上の画素の２×２ブロックとなる。当業者にとっては明らかなように、この４個の“ZIP”命令の手順は、従って画素の４×４配列１１３５全体を、対角線１１３６について転置した。図５８は、インタリーブ命令の使用の１つの特定の例を説明する。この例において、複素数は実数部と虚数部とから構成されるものとして取り扱われる。ある種の計算方法が、複素数の数列の実数部に対して実行されることを必要とし、一方別個の計算方法が、それらの複素数の数列の虚数部に対して実行されることを必要とすることは問題かもしれない。結果として、実数部は特定のレジスタ“D0”１１５５に配置されたかもしれないと共に、一方虚数部は独立したレジスタ“D1”１１６０に配置された可能性がある。ある時点で、それぞれの複素数の実数部と虚数部とを、それらがレジスタの中で相互に隣接するように再結合することが要求される。図５８において説明されたように、これは、レーン幅がソースレジスタの最大限の幅になるように設定すると共に、データ要素幅が１６ビット、すなわち実数部及び虚数部のそれぞれの幅になるように設定する“64|ZIP.16 ”命令の使用を通じて達成され得る。図５８の下半分に示されるように、“ZIP”命令の実行の結果は、デスティネーションレジスタ“D0”１１５５が複素数“a”及び複素数“b”の実数部と虚数部を含み、デスティネーションレジスタ“D1”１１６０が複素数“c”及び複素数“d”の実数部と虚数部を含むレジスタ空間内部で、各複素数“a”，“b”，“c”，“d”の実数部及び虚数部のそれぞれが再結合される。
【０２５０】
データ要素サイズとは無関係にレーンサイズを指定する能力を活用することができるのは、インタリーブ命令及びデインタリーブ命令のようなデータ要素再整理命令だけではない。例えば、図５９Ａ及び図５９Ｂは、２個の複素数の乗算を実行するために使用され得る２個の命令の手順を説明する。特に、それは、結果の複素数“D”を生成するために、次の等式により説明されるように、複素数“A”と複素数“B”との乗算を行うことが要求される。
“Dre=Are*Bre-Aim*Bim”
“Dim=Are*Bim+Aim*Bre”
【０２５１】
図５９Ａは、以下の形式による第１の乗算命令に応答して実行された操作を示す。
“32|MUL.16 Dd,Dn,Dm[0]”
【０２５２】
ソースレジスタは６４ビットレジスタであると共に、乗算命令は、レーン幅を３２ビット、かつデータ要素サイズを１６ビットに指定する。乗算命令は、ソースレジスタ“Dm”１１６５内部のレーン内の第１のデータ要素を、第２のソースレジスタ“Dn”１１７０内部のレーン内のデータ要素のそれぞれと乗算し（図５９Ａ参照）、結果の数値をデスティネーションレジスタ“Dd”１１７５内部の対応する位置に記憶するために、各レーン内部において用意される。各レーン内部において、デスティネーションレジスタ内の第１のデータ要素は、複素数の結果の一部分の実数部を表すものとして取り扱われると共に、第２のデータ要素は、複素数の結果の一部分の虚数部を表すものとして取り扱われる。
【０２５３】
図５９Ａにおいて説明される命令に続いて、次に、以下の命令が実行される。
“32|MASX.16 Dd,Dn,Dm[1]”
【０２５４】
図５９Ｂにより説明されるように、この命令は、“交換操作を伴う乗算、加算、減算”命令である。この命令に従って、ソースレジスタ“Dm”の各レーン内部の第２のデータ要素は、第２のソースレジスタ“Dn”の対応するレーン内部の各データ要素と、図５９Ｂに説明された方法によって乗算される。そして、その乗算の結果は、既にデスティネーションレジスタ“Dd”１１７５内部に記憶されたデータ要素に対応する数値に加算されるか、既にデスティネーションレジスタ“Dd”１１７５内部に記憶されたデータ要素に対応する数値から減算されるかのいずれかであり、その場合には、結果はデスティネーションレジスタ“Dd”１１７５内部に戻される。先に特定された、結果の複素数“D”の実数部及び虚数部を生成するための等式を用いて、これらの２個の命令を手順に従い利用することにより、それによってＳＩＭＤアプローチの速度の利点が実現されることを可能にする計算方法は、複素数の２セットに対して並列に実行され得るということが、図５９Ａ及び図５９Ｂの操作の比較から分かる。
【０２５５】
上記の例から、データ要素サイズに加えてレーンサイズを指定する能力を有する命令を提供することにより、ＳＩＭＤの実行から潜在的に利益を得ることができる操作の数が増やされると共に、それゆえに、これがＳＩＭＤ方法における操作の実行に関して非常に改善された柔軟性を提供するということが認識されることになる。
【０２５６】
本技術は、ソースとデスティネーション（宛先）のデータ要素の幅が異なるベクトルに対するＳＩＭＤ処理を実行する能力を提供する。この状況における１つの特に有益な操作は、加算または減算であり、ＳＩＭＤ操作の高位の半分をもたらす。図６０は、本技術に従ってＳＩＭＤ操作の高位の半分をもたらす加算の例を示す。ＳＩＭＤデコーダ１６（図１参照）内部の命令デコーダは、命令“VADH.I16.I32 Dd,Qn,Qm”を復号すると共に、図６０において説明され、かつ以下に明確に記述する、高位の半分をもたらす加算を実行する。
【０２５７】
図６０において、ＳＩＭＤレジスタファイル２０（図１参照）内に配置される２個のレジスタ“Qn”及び“Qm”は３２ビットのデータ要素“a”及び“b”のベクトルを含む。これらは、同様にレジスタファイル２０内に配置され、データの高位の半分の集合“Qn=[a3 a2 a1 a0]”，“Qm=[b3 b2 b1 b0]”から形成される、１６ビットのデータ要素のベクトル“Dd”を形成するように、お互いに加算される。
【０２５８】
出力は、”Dd=[(a3+b3)>>16,(a2+b2)>>16,(a1+b1)>>16,(a0+b0)>>16]”である。
【０２５９】
図６１は、図６０に示されたものと類似しているが、しかしこの場合、復号された命令は“VRADH.I16.I32 Dd,Qn,Qm”で、かつ実行される操作が丸めを伴って高位をもたらす加算である操作を概略的に示す。これは、図６０に説明される操作と大変に類似した方法で実行されるが、しかし高位の半分が丸められる。この例においては、これは、加算後でかつ高位の半分をとる前に、データ数値の低位の半分の最上位ビットの位置に“１”を有し、それ以外の位置は“０”を有するデータ数値を加算することにより実行される。
【０２６０】
図６１において、この図では、明確になるように、中間値が点線で示されている。
【０２６１】
更に、サポートされる可能性のある命令（図示せず）は、データの飽和を伴った加算、または減算である。  この場合、加算または減算は、高位の半分がとられる前に、適切なところで飽和状態にされることになる。
【０２６２】
テーブル１１（表２２）は、本技術によりサポートされるいくつかの命令の例を示す。“Size<a>”は、ビットにおけるデータタイプのサイズをもたらすと共に、“round <td>”は、定数“1<<(size<dt>-1)”の丸めをもたらす。
【０２６３】
【表２２】
0005393643.tif 000023
【０２６４】
データの高位の半分とることが実行するべき有利なことである本技術は、提供される異なるタイプのデータに対して実行され得る。それは、特に固定小数点数に対して行われる処理に適している。
【０２６５】
上記の技術は、多くの応用例を有し、かつ例えばＳＩＭＤによるＦＦＴの実行を加速することに使用され得る。ＳＩＭＤは、複数のデータに同一の操作を実行することが必要とされるＦＦＴ（高速フーリエ変換）操作を実行することに対して、特に有益である。このように、ＳＩＭＤ処理を使用することは、複数のデータが並列に処理されることを可能にする。ＦＦＴについて実行される計算は、多くの場合複素数をお互いに乗算することを必要とする。これは、データ数値の乗算と、更に積の加算または減算を必要とする。ＳＩＭＤ処理において、これらの計算は、処理スピードを増加させるために、並列に実行される。
【０２６６】
実行される必要がある計算問題の種類の１つの簡単な例は、以下で与えられる。
“(a+ic)*(b+id)=e+if”
【０２６７】
このように、実数部“e”は、“a*b-c*d”に等しく、虚数部“f”は、“a*d+c*b”に等しい。 
【０２６８】
図６２は、実数部“e”を決定するための計算を示す。図に示すように、１６ビットのデータ要素を含んでいる“a”に割り当てられたベクトルは、同一のサイズのデータ要素を含んでいる“b”に割り当てられたベクトルと乗算され、かつ“c”に割り当てられたベクトルは、“d”に割り当てられたベクトルと乗算される。これらの積は、３２ビットのデータ要素を持つ２個のベクトルを生成する。ベクトルの１つである“e”を生成することは、他のベクトルから減算されることを必要とするが、しかし最終結果は、最初の値と同一の精度が必要とされるだけである。このように、１６ビットのデータ要素による結果のベクトルが要求される。この操作は、図において示されるように、単一の命令“VSBH.16.32 Dd,Qn,Qm”に応答して実行され得る。この命令、すなわち高位の半分をもたらす減算は、それゆえに、この状況において特に有益である。更に、それは、算術演算が更に広いデータ幅に対して実行されることを可能にすると共に、算術演算（減算）の後でのみ発生するビット幅の縮小化を行うという利点を持つ。これは、減算を実行する前にビット幅の縮小化を行う場合より、一般的に更に正確な結果を与える。
【０２６９】
ＡＲＭ社は、それらの命令セットに、即値がいくつかの命令で指定されることを可能にする、命令の符号化を提供した。命令によって符号化されるならば、明らかに即値のサイズは制限されなくてはならない。
【０２７０】
命令の符号化に適しているサイズの即値の値は、データ要素が並列に処理されるＳＩＭＤ処理において、限られた使用法を有している。この問題に取り組むために、それらに関連があるサイズの制限された即値を有するが、しかしこの即値を拡張する能力を有する、生成された定数による命令のセットが提供される。このように、例えばバイトサイズの即値は、６４ビットの定数または即値を生成するために拡張され得る。この方法において、即値は、ＳＩＭＤ処理における複数のソースのデータ要素を含む、６４ビットのソースレジスタによる論理演算に使用され得る。
【０２７１】
図６３は、命令の内部で制御値と共に符号化される即値“abcdefgh”を示しており、それはテーブルの左手（左側）の列において示されている。２進数の即値は、６４ビットのレジスタを満たすように拡張され得ると共に、実際の拡張は、命令及びそれに付随する制御部分に応じて実行される。示された例において、８ビットの即値“abcdefgh”は、即値が制御値に応じて配置される、６４ビットのデータ数値内部の異なる位置において繰り返される。更に、“０”及び／または“１”は、数値が配置されていない空の空間を満たすために使用され得る。“１”及び／または“０”の内のいずれかの選択もまた、制御値により決定される。このように、この例において、ＳＩＭＤ処理で使用される広範囲の可能な定数は、８ビットの即値とそれに付随する４ビットの制御値とを有する命令から生成され得る。
【０２７２】
一実施例（テーブルの最後の行）において、一定の場所で即値を繰り返す代わりに、新しい６４ビットの即値または定数を生成するために、即値の各ビットが拡張される。
【０２７３】
いくつかの場合において図に示すように、各レーンにおいて定数は同一であり、一方他方においては、異なる定数がいくつかのレーンに出現する。実施例によっては（図示せず）、これらの定数を反転することの可能性もまた提供されると共に、これは生成され得る定数の数もまた増加させる。
【０２７４】
図６３において示されるような、一定の型に対して使用され得る命令のフォーマットの例は、以下に与えられる。この命令において、“<value>”は、データ部分または即値であり、“<mode>”は、どのように“<value>”部分が生成された定数内部で拡張されるべきか（図６３のテーブルの異なるラインとして示される。）を示す指示を与える制御部分である。
【０２７５】
“VMOV Dd,#<value>,<mode>”
ここで、
“<value>”は、バイトである。 
“<mode> ”は、列挙された拡張機能のうちの１つである。
【０２７６】
これらの適応した命令は、一般的に、即値及び制御部分“<mode>”を有するデータ部分“<value>”を持つ関連するデータ値を備える。図６３において示されるように、制御部分は、どのように即値が拡張されるべきかを表している。これは、さまざまな方法で実行されても良いが、しかし実施例によっては、制御部分は、定数の拡張が定数生成ロジックを用いて実行されることを表している。
【０２７７】
図６４は、本技術の命令に関連するデータ部分１２１０及び制御部分１２００から定数を生成するように操作可能な定数生成ロジックの例を概略的に示す。示された例において、制御部分１２００は、生成されるべき定数１２４０内部の各ビットに対して、データ数値１２１０の一部、または１つの“１”あるいは１つの“０”のいずれかを出力するためのゲート１２３０を備える定数生成ロジック１２２０を制御する。
【０２７８】
図６５は、同等の参照数字が同等の特徴を表す、図１に示されたものと類似のデータプロセッサ（集積回路）を示す。図６５は、それが明示的に定数生成ロジック１２２０を示す点で図１と異なる。定数生成ロジック１２２０は、デコード／制御部１４，１６に隣接する、あるいはデコード／制御部分１４，１６の一部を形成するものとして取り扱うことができる。図に示すように、命令は命令パイプライン１２から、デコード／制御ロジック１４，１６へ送信される。これは、ＳＩＭＤ処理ロジック１８、ロード記憶ユニット２２、及びプロセッサのスカラ処理部分４，６，８，１０の操作を制御する制御信号を生成する。もし定数の生成を伴う命令が、デコード／制御部１４，１６において受信される場合、定数生成ロジックは、ＳＩＭＤ処理における使用のための定数を生成するために使用される。これは、直接的にＳＩＭＤレジスタデータ記憶装置２０に送信され得る（点線１２２２）か、または、もし定数の生成を伴う命令が、ＳＩＭＤデータ処理部を備えている場合には、生成された定数は、新しいデータ値を生成するために更なる操作が生成された定数に関して実行されるＳＩＭＤ処理ロジックに送信される（線１２２４）。
【０２７９】
図６６Ａ及び図６６Ｂは、図６５に示される２個の異なる経路を概略的に説明する。図６６Ａは、命令が直接的にレジスタ記憶装置に送信される定数を生成する場合、すなわち点線１２２２を示す。図６６Ｂは、生成された定数を伴う命令がデータ処理部を備える場合を示す。この場合、データ処理操作（OP：processing operations）は、生成された定数、更にソースオペランド１２５０に対して、命令に応答して最終データ値１２６０を生成するように実行され、これは図６５の線１２２４に対応する。
【０２８０】
図６３及びそれらの反転において示される定数に加えて、例えばＯＲ（論理和）、ＡＮＤ（論理積）、テスト、加算または減算のような追加のデータ処理操作が、更に広範囲のデータ値を生成するために、生成された定数に対して実行され得る。これは図１３Ｂ、及び図６５の経路１２２４に対応する。テーブル１２（表２３）は、いくつかの追加のデータ値を生成するために使用され得るビット幅のＡＮＤ（論理積）及びビット幅のＯＲ（論理和）の例を与える。
【０２８１】
【表２３】
0005393643.tif 000024
【０２８２】
生成された定数に対して更なるデータ処理操作を実行する能力には、さまざまな用途があり得る。例えば、図６７は、本技術の実施例が、ベクトル内の多数のデータ要素から、ある一つのビットまたは複数のビットを抽出するようにビットマスク（bit mask）を生成するためにどのように使用され得るかを示す。示された例において、ソースのベクトルからの各データ要素の第４のビットが抽出される。初めに、即値８は、それを繰り返すことにより拡張され、更にこれは、要求されたビットを各データ要素から抽出するために生成された定数とソースのベクトルとのＡＮＤ（論理積）を求める論理的ＡＮＤ命令により追随される。これらの操作は、命令“VAND Dd,#0b00001000,0b1100”に応答して実行される。
【０２８３】
ここで、“<mode>”値１１００は、拡張されたデータ部分を備える、生成された定数を参照する（図６３参照）。
【０２８４】
ここでは特定の実施例が記述されたが、当然のことながら、発明がそれに限定されないと共に、クレームによって定義された発明の範囲及び精神から逸脱することなく、それに対する多くの変形及び追加が当業者によって実施されても良い。例えば、従属クレームのさまざまな特徴の組み合わせは、本発明の範囲から逸脱することなく、独立クレームの特徴によって生み出されるものである。
【符号の説明】
【０２８５】
２    データ処理システム（集積回路）
４    スカラレジスタデータ記憶装置
６    乗算器
８    シフタ
１０    加算器
１２    命令パイプライン
１４    スカラデコーダ
１６    ＳＩＭＤデコーダ
１８    専用ＳＩＭＤ処理ロジック
２０    （ＳＩＭＤ）レジスタデータ記憶装置
２２    ロード記憶ユニット（ＬＳＵ）
２３    ロードＦＩＦＯ
２３’    記憶ＦＩＦＯ
２４    再整理ロジック
２６    ＳＩＭＤレジスタ
２８    データ転送ロジック
２００    メモリ
２１０    構造体
２２０    レジスタ“D0”
２２５    レジスタ“D1”
２３０    レジスタ“D2”
２５０、２５５、２６０    構造体
２７０    レジスタ“D0”
２８０    レジスタ“D1”
２９０    レジスタ“D2”
３００    レジスタ“D3”
３１０    メモリ
３１２    構造体
３１４    データ要素
３３０    "D0"レジスタ
３３５    "D1"レジスタ
３４０    変換ロジック
３４２    データ要素
３５０、３５５    マルチプレクサ
３６０、３６５    入力レジスタ
３７０    クロスバー制御レジスタ
３７５    クロスバーマルチプレクサ
３８０    レジスタキャッシュ
３８５    出力のマルチプレクサ
４００    畳み込み演算ロジックユニット
４１５、４２５、４３１〜４３４、４３５、４４５、４５５    経路（path）
４２０、４６０、４７０、４８０、４９０    マルチプレクサ
４１０    算術演算装置
４５０    選択及び分配ロジック
５００    マルチプレクサ
５１０    スカラ選択ロジック
５２０    “ベクトル×スカラ”演算ロジック
５３０    演算装置
７１０    レジスタ“a”
７２０    レジスタ“b”
７３０    制御レジスタ
８００、８０２    ＳＩＭＤレジスタ
８０４、８０６    デスティネーションＳＩＭＤレジスタ
８０８    （データ要素）再整理ロジック
８１０    メモリアクセスロジック
８１２    ＳＩＭＤレジスタ
９００    レジスタデータ記憶装置
１０００    メモリシステム
１００５    メモリ管理ユニット（ＭＭＵ）
１０１０    レベル１キャッシュ
１０１５    中継ルックアサイドバッファ（ＴＬＢ）
１０２０    データバス
１０４０    データブロック
１０４５    １２８ビットデータブロック
１０５０    ９６ビットデータブロック
１０５５    ８０ビットデータブロック
１０６０、１０６５    ２５６ビットデータブロック
１１００    第１のレジスタ
１１０２    第２のレジスタ
１１０４、１１０６    デスティネーションレジスタ
１１００、１１０２    ソースレジスタ
１１１２、１１１４    デスティネーションレジスタ
１１１６    第１のソースレジスタ
１１１８    第２のソースレジスタ
１１２０    第１のデスティネーションレジスタ
１１２２    第２のデスティネーションレジスタ
１１２５    ６４ビットレジスタ“D0”
１１３０    ６４ビットレジスタ“D1”
１１３５    画素の４×４配列
１１３６    対角線
１１３７、１１４１、１１４３、１１４５    ２×２ブロック
１１４７    レジスタ“A”
１１４９    レジスタ“B”
１１５１    レジスタ“C”
１１５３    レジスタ“D”
１１５５    レジスタ“D0”
１１６０    レジスタ“D1”
１１６５    ソースレジスタ“Dm”
１１７０    第２のソースレジスタ“Dn”
１１７５    デスティネーションレジスタ“Dd”
１２００    制御部分
１２１０    データ部分
１２２０    定数生成ロジック
１２２２    点線
１２２４    線
１２３０    ゲート
１２４０    定数
１２５０    ソースオペランド
１２６０    最終データ値
【図１】
0005393643.tif 000025
【図２】
0005393643.tif 000026
【図３】
0005393643.tif 000027
【図４】
0005393643.tif 000028
【図５】
0005393643.tif 000029
【図６】
0005393643.tif 000030
【図７】
0005393643.tif 000031
【図８】
0005393643.tif 000032
【図９】
0005393643.tif 000033
【図１０】
0005393643.tif 000034
【図１１Ａ】
0005393643.tif 000035
【図１１Ｂ】
0005393643.tif 000036
【図１２】
0005393643.tif 000037
【図１３】
0005393643.tif 000038
【図１４】
0005393643.tif 000039
【図１５】
0005393643.tif 000040
【図１６】
0005393643.tif 000041
【図１７】
0005393643.tif 000042
【図１８】
0005393643.tif 000043
【図１９Ａ】
0005393643.tif 000044
【図１９Ｂ】
0005393643.tif 000045
【図１９Ｃ】
0005393643.tif 000046
【図２０Ａ】
0005393643.tif 000047
【図２０Ｂ】
0005393643.tif 000048
【図２０Ｃ】
0005393643.tif 000049
【図２１Ａ】
0005393643.tif 000050
【図２１Ｂ】
0005393643.tif 000051
【図２１Ｃ】
0005393643.tif 000052
【図２２Ａ】
0005393643.tif 000053
【図２２Ｂ】
0005393643.tif 000054
【図２２Ｃ】
0005393643.tif 000055
【図２３】
0005393643.tif 000056
【図２４Ａ】
0005393643.tif 000057
【図２４Ｂ】
0005393643.tif 000058
【図２４Ｃ】
0005393643.tif 000059
【図２５Ａ】
0005393643.tif 000060
【図２５Ｂ】
0005393643.tif 000061
【図２５Ｃ】
0005393643.tif 000062
【図２５Ｄ】
0005393643.tif 000063
【図２５Ｅ】
0005393643.tif 000064
【図２５Ｆ】
0005393643.tif 000065
【図２５Ｇ】
0005393643.tif 000066
【図２５Ｈ】
0005393643.tif 000067
【図２６Ａ】
0005393643.tif 000068
【図２６Ｂ】
0005393643.tif 000069
【図２６Ｃ】
0005393643.tif 000070
【図２６Ｄ】
0005393643.tif 000071
【図２６Ｅ】
0005393643.tif 000072
【図２７】
0005393643.tif 000073
【図２８】
0005393643.tif 000074
【図２９】
0005393643.tif 000075
【図３０Ａ】
0005393643.tif 000076
【図３０Ｂ】
0005393643.tif 000077
【図３０Ｃ】
0005393643.tif 000078
【図３０Ｄ】
0005393643.tif 000079
【図３１】
0005393643.tif 000080
【図３２】
0005393643.tif 000081
【図３３】
0005393643.tif 000082
【図３４】
0005393643.tif 000083
【図３５】
0005393643.tif 000084
【図３６】
0005393643.tif 000085
【図３７】
0005393643.tif 000086
【図３８】
0005393643.tif 000087
【図３９】
0005393643.tif 000088
【図４０】
0005393643.tif 000089
【図４１】
0005393643.tif 000090
【図４２】
0005393643.tif 000091
【図４３Ａ】
0005393643.tif 000092
【図４３Ｂ】
0005393643.tif 000093
【図４３Ｃ】
0005393643.tif 000094
【図４４】
0005393643.tif 000095
【図４５】
0005393643.tif 000096
【図４６】
0005393643.tif 000097
【図４７】
0005393643.tif 000098
【図４８】
0005393643.tif 000099
【図４９】
0005393643.tif 000100
【図５０】
0005393643.tif 000101
【図５１】
0005393643.tif 000102
【図５２】
0005393643.tif 000103
【図５３Ａ】
0005393643.tif 000104
【図５３Ｂ】
0005393643.tif 000105
【図５３Ｃ】
0005393643.tif 000106
【図５３Ｄ】
0005393643.tif 000107
【図５４Ａ】
0005393643.tif 000108
【図５４Ｂ】
0005393643.tif 000109
【図５５Ａ】
0005393643.tif 000110
【図５５Ｂ】
0005393643.tif 000111
【図５５Ｃ】
0005393643.tif 000112
【図５６Ａ】
0005393643.tif 000113
【図５６Ｂ】
0005393643.tif 000114
【図５７Ａ】
0005393643.tif 000115
【図５７Ｂ】
0005393643.tif 000116
【図５７Ｃ】
0005393643.tif 000117
【図５８】
0005393643.tif 000118
【図５９Ａ】
0005393643.tif 000119
【図５９Ｂ】
0005393643.tif 000120
【図６０】
0005393643.tif 000121
【図６１】
0005393643.tif 000122
【図６２】
0005393643.tif 000123
【図６３】
0005393643.tif 000124
【図６４】
0005393643.tif 000125
【図６５】
0005393643.tif 000126
【図６６Ａ】
0005393643.tif 000127
【図６６Ｂ】
0005393643.tif 000128
【図６７】
0005393643.tif 000129