(57)【要約】【課題】様々なロード及び格納命令を用いて、多重ベクトル・エレメントをレジスタ・ファイル内のレジスタとメモリとの間で転送する。【解決手段】オペランド及びデータ・エレメントを格納するメモリと、少なくとも１つの汎用レジスタと、少なくとも第１の命令、及び、第１の命令に続く第２の命令を実行するプロセッサ回路と、を備え、第１の命令によって、少なくとも１つの汎用レジスタにおいてキューされるべき、メモリからのデータ・エレメントのストリームの転送を開始し、第２の命令が、少なくとも第１のソース・オペランドを含み、少なくとも１つの汎用レジスタが、第２の命令のソース・オペランドとして現れることに基づいて、プロセッサ回路が、条件付きで、メモリから、データ・エレメントのストリームの次の部分を、少なくとも１つの汎用レジスタの中にロードする、データ処理システム。【選択図】図１
2010211832.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システムであって、
オペランド、及び、当該オペランドによって操作されるデータ・エレメント、を格納するメモリと、
少なくとも１つの汎用レジスタと、
少なくとも第１の命令、及び、当該第１の命令に続く第２の命令を実行するプロセッサ回路と、を備え、
前記第１の命令によって、前記少なくとも１つの汎用レジスタにおいてキューされるべき、前記メモリからのデータ・エレメントのストリームの転送を開始し、
前記第２の命令が、少なくとも第１のソース・オペランドを含み、
前記少なくとも１つの汎用レジスタが、前記第２の命令のソース・オペランドとして現れることに基づいて、前記プロセッサ回路が、条件付きで、前記メモリから、前記データ・エレメントのストリームの次の部分を、前記少なくとも１つの汎用レジスタの中にロードする、
データ処理システム。
【請求項２】
前記少なくとも１つの汎用レジスタが、前記第２の命令によって指定される所定のタイプの関数に対して、ソース・オペランドとして使用されるときに、前記データ・エレメントのストリームの前記次の部分を条件付きでロードすることが実行される、
請求項１に記載のデータ処理システム。
【請求項３】
前記第２の命令の制御フィールドの値に基づいて、前記データ・エレメントのストリームの前記次の部分を条件付きでロードすることが実行される、
請求項１に記載のデータ処理システム。
【請求項４】
前記第２の命令が、更に、第２のソース・オペランドを含み、
前記少なくとも１つの汎用レジスタが、前記第１のソース・オペランドとして現れるときに、前記条件付きロードが、実行され、
前記少なくとも１つの汎用レジスタが、前記第２のソース・オペランドとして現れるときに、前記条件付きロードが行われない、
請求項１に記載のデータ処理システム。
【請求項５】
オペランド、及び、当該オペランドによって操作されるデータ・エレメント、を格納するメモリ、少なくとも１つの汎用レジスタ、及び、命令を実行するためのプロセッサ回路を含むデータ処理システムにおける方法であって、
少なくとも第１の命令を実行するステップと、
前記第１の命令に応じて、前記メモリから、前記少なくとも１つの汎用レジスタにおいてキューされるべきデータ・エレメントのストリームの転送を開始するステップと、
前記第１の命令に引き続いて、第２の命令を実行するステップであって、当該第２の命令が、少なくとも第１のソース・オペランドを含むものと、
前記少なくとも１つの汎用レジスタが、前記第２の命令のソース・オペランドとして現れることに基づいて、前記メモリから、前記データ・エレメントのストリームの次の部分を条件付きで、前記少なくとも１つの汎用レジスタの中にロードするステップと、
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
［発明の分野］
本発明は、一般的に、データ処理システムに関し、より詳細には、データ処理システム内で使用の命令に関する。
【背景技術】
【０００２】
［関連技術］
データ処理システムの性能の増大は、ベクトルの多重エレメントの演算の並列実行を可能にすることにより達成することができる。今日入手可能な１つのタイプのプロセッサは、ベクトル演算を実行するベクトル・レジスタを利用するベクトル・プロセッサである。しかしながら、ベクトル・プロセッサは、より高い性能を可能にする一方、またスカラ汎用レジスタを用いるプロセッサより一層増大した複雑さ及びコストをもたらす。即ち、ベクトル・プロセッサ内のベクトル・レジスタ・ファイルは典型的には、Ｎ個のベクトル・レジスタを含み、そこにおいて、各ベクトル・レジスタは、Ｍ個のエレメント（要素）を保持するためＭ個のレジスタのバンクを含む。例えば、当該技術で既知のそのような１つのベクトル・プロセッサにおいては、レジスタ・ファイルは、３２個のベクトル・レジスタを含み、そこにおいては、各ベクトル・レジスタは、３２個の６４ビット・レジスタのバンクを含み、従って、１０２４個の６４ビット・レジスタに相当するものを必要とする。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
今日入手可能な別のタイプのプロセッサは、いずれの既存のスカラ汎用レジスタ（ＧＰＲ）を用いながら制限されたベクトル処理を可能にする単一命令多重データ（ＳＩＭＤ）スカラ・プロセッサ（「ショート・ベクトル・マシン（ｓｈｏｒｔ−ｖｅｃｔｏｒ  ｍａｃｈｉｎｅ）」とも呼ばれる。）である。例えば、３２個のスカラ６４ビットＧＰＲを有するデータ処理システムにおいては、各スカラ・レジスタは、２個の３２ビット・エレメント（ビット要素）、４個の１６ビット・エレメント、又は８個の８ビット・エレメントを保持することができ、従って、２個の３２ビット・エレメント演算、４個の１６ビット・エレメント演算、又は８個の８ビット・エレメント演算を実行することができる。従って、１演算当たりのエレメントの数は、ベクトル・プロセッサと比較して制限される（なお、ベクトル・プロセッサは、上記で与えられた例によれば、レジスタ・バンクで３２個の６４ビット・エレメントの演算を一度に行うことができる。）にも拘わらず、低減されたハードウエアが、必要とされる。しかしながら、現在のＳＩＭＤスカラ・プロセッサにおいては、実行のためスカラ・レジスタへのベクトル・エレメント（ベクトル要素）の転送とメモリへの多重ベクトル・エレメントの戻し転送とに関連した大きいオーバヘッドが存在する。このオーバヘッドは、演算の実効スループットを制限し、従って、多重ベクトル・エレメントをメモリとレジスタとの間でロード及び格納する方法を改善する必要性が存在する。
【課題を解決するための手段】
【０００４】
本発明は、一例として説明され、添付図面に制限されず、そこにおいては、類似の参照番号は、類似の構成要素を示す。
【０００５】
当業者は、図面の構成要素が単純化及び明瞭化のため図示され、そして必ずしも一定の尺度率で描かれているわけではないことを認めるであろう。例えば、図面の中の構成要素の一部の寸法は、本発明の実施形態の理解を向上させるのを助けるため他の構成要素に対して誇張されている。
【０００６】
［発明の詳細な説明］
本明細書で用いられているように、用語「バス」は、データ、アドレス、制御又は状態
（ステータス）のような１又はそれより多くの様々なタイプの情報を転送するため用いられ得る複数の信号又は導体を指すため用いられている。本明細書で説明される導体は、単一の導体、複数の導体、一方向導体、又は双方向導体であることに関連して示され又は説明される。しかしながら、異なる実施形態は、導体の実行を変え得る。例えば、分離した一方向導体は、双方向導体よりむしろ用いられ得て、そして逆の場合もある。また、複数の導体は、シリアルに又は時分割多重化する要領で多重信号を転送する単一の導体と置換され得る。同様に、多重信号を搬送する単一の導体は、これらの信号のサブセットを様々な異なる導体に分けられ得る。従って、多くのオプションが信号を転送するため存在する。
【０００７】
用語「アサート」又は「セット（組）」及び「ニゲート」（又は、「デアサート」又は「クリア）が、信号、ステータス・ビット、又は類似の装置をその論理的真状態又は論理的偽状態にすることを指すとき用いられる。論理的真状態が論理レベル１である場合、論理的偽状態は、論理レベル０である。そして、論理的真状態が論理レベル０である場合、論理的偽状態が、論理レベル１である。また、数字の前の「０ｘ」は、その数字がその１６進で又は底１６の形式で表されていることを示す。数字の前の記号「％」は、その数字がその２進又は底２の形式で表されていることを示す。
【０００８】
前述したように、メモリからレジスタへの及びレジスタからメモリへの多重ベクトル・エレメントの転送に関連するオーバヘッドを低減する必要性が存在する。従って、メモリへ及びそれからのベクトル・エレメントの転送を改善する要領で可能にする様々な異なるベクトル・ロード及び格納命令が、本明細書で説明されるであろう。更に、本明細書で説明される命令の使用は、オーバヘッドの低減を可能にし得て、既存の設計に対して加えられる追加のハードウエアの複雑さは最小である。例えば、多くのタイプのデータ処理システム内で用いられるスカラ・レジスタ・ファイルが、これらの命令と共に用いられ、従って、より高いコストの別々のベクトル・レジスタ・ファイルを必要としない。また、この命令は、実行効率を更に向上させながら、ソフトウエアの複雑さを低減することを可能にし得る。また、本明細書における命令を用いて、例えば、メモリ内のベクトル・エレメントの整列、精度の増大のためメモリ・エレメントのサイズをレジスタ・エレメントの中に拡張するための必要性、任意のベクトル長対レジスタの固定長、又はデータのベクトルを検索／格納するため必要とされるロード／格納命令の数と関連したオーバヘッド（例えば、命令の発行及び実行における）のような様々な発行に対処し得る。また、本明細書における命令を用いて、これらの発行のいずれかの組み合わせ、追加の発行、又は発行の組み合わせに対処し得て、それらは、図１から図３５を参照して以下に与えられる説明により理解されるであろう。
【図面の簡単な説明】
【０００９】
【図１】図１は、本発明の一実施形態に従ったデータ処理システムをブロック図の形式で示す。
【図２】図２は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図３】図３は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図４】図４は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図５】図５は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図６】図６は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図７】図７は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図８】図８は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図９】図９は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図１０】図１０は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図１１】図１１は、本発明の様々な実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図１２】図１２は、本発明の一実施形態に従った例示的メモリ部分を示す。
【図１３】図１３は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内のエントリの例を示す。
【図１４】図１４は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内のエントリの例を示す。
【図１５】図１５は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内のエントリの例を示す。
【図１６】図１６は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内のエントリの例を示す。
【図１７】図１７は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内のエントリの例を示す。
【図１８】図１８は、本発明の一実施形態に従った時間につれてのメモリ部分の例を示す。
【図１９】図１９は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内エントリの例を示す。
【図２０】図２０は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内エントリの例を示す。
【図２１】図２１は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内エントリの例を示す。
【図２２】図２２は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内エントリの例を示す。
【図２３】図２３は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内エントリの例を示す。
【図２４】図２４は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内エントリの例を示す。
【図２５】図２５は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内エントリの例を示す。
【図２６】図２６は、本発明の様々な実施形態の１つに従った１組のスカラＧＰＲ内エントリの例を示す。
【図２７】図２７は、本発明の様々な代替実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図２８】図２８は、本発明の様々な代替実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図２９】図２９は、本発明の様々な代替実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図３０】図３０は、本発明の様々な代替実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図３１】図３１は、本発明の様々な代替実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図３２】図３２は、本発明の様々な代替実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図３３】図３３は、本発明の様々な代替実施形態の１つに従った、図１のデータ処理システムにより実行され得るベクトル・ロード及び格納命令を示す。
【図３４】図３４は、本発明の一実施形態に従ったメモリ部分の例を示す。
【図３５】図３５は、本発明の一実施形態に従った１組のスカラＧＰＲ内エントリの例を示す。
【発明を実施するための形態】
【００１０】
図１は、本発明の一実施形態に従ったデータ処理システム１０をブロック図形式で示す。データ処理システム１０は、プロセッサ１４、メモリ１２、入力／出力（Ｉ／Ｏ）１６、他の周辺装置１８、及びシステム・バス２０を含む。メモリ１２は、システム・バス２０に導体２２を介して双方向に結合され、Ｉ／Ｏ１６は、システム・バス２０に導体２４を介して双方向に結合され、他の周辺装置１８は、システム・バス２０に導体２６を介して双方向に結合され、そしてプロセッサ１４は、システム・バス２０に導体５８を介して双方向に結合される。一実施形態において、他の周辺装置１８は、１又はそれより多くの周辺装置を含み得て、そこにおいて、それぞれの周辺装置は、例えば、汎用非同期受信器送信器（ＵＡＲＴ）、リアル・タイム・クロック（ＲＴＣ）、キーボード制御器、他のメモリ等のような任意のタイプの周辺装置であることができる。他の周辺装置１８の一部又はその全部は、情報を導体６２を介してデータ処理システム１０の外部へ通信することができてもよい。Ｉ／Ｏ回路１６は、情報を受け取り、そして情報を、例えば導体６０を介してデータ処理システム１０の外部へ与える任意のタイプのＩ／Ｏ回路を含み得る。メモリ１２は、例えば、読み出し専用メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡ
Ｍ）、不揮発性メモリ（例えば、フラッシュ）等のような任意のタイプのメモリであることができる。データ処理システム１０は、説明した構成要素以外の他の構成要素を含み得て、又は説明した構成要素より多くの又はより少ない構成要素を含み得る。例えば、データ処理システム１０は、任意の数のメモリ又はプロセッサを含み得る。
【００１１】
プロセッサ１４は、例えば、マイクロプロセッサ、マイクロコントローラ、ディジタル信号プロセッサ等のような任意のタイプのプロセッサであり得る。一実施形態において、プロセッサ１４は、プロセッサ・コアと呼ばれ得る。別の実施形態において、プロセッサ１４は、マルチプロセッサ・データ処理システムの中の多くのプロセッサのうちの１つであり得る。更に、同様に説明しないが、プロセッサ１４は、パイプライン化されたプロセッサであり得る。図１に示される実施形態において、プロセッサ１４は、制御ユニット２８、命令ユニット３０、実行ユニット３２、スカラ・レジスタ・ファイル３４、バス・インターフェース・ユニット（ＢＩＵ）３６、及びロード／格納ユニット３８を含む。制御ユニット２８は、命令ユニット３０に導体４０を介して双方向に結合され、実行ユニット３２に導体４２を介して双方向に結合に、スカラ・レジスタ・ファイル３４に導体４６を介して双方向に結合され、ロード／格納ユニット３８に導体４８を介して双方向に結合される。実行ユニット３２は、スカラ・レジスタ・ファイル３４に導体４４を介して双方向に結合され、スカラ・レジスタ・ファイル３４は、ロード／格納ユニット３８に導体５０を介して双方向に結合される。ＢＩＵ３６は、命令ユニット３０に導体５４を介して双方向に結合され、ロード／格納ユニット３８に導体５２を介して双方向に結合される。プロセッサ１４は、導体５８に結合されている導体５６を介してシステム・バス２０と通信することができる。プロセッサ１４は、説明した回路より多くの回路を含み得て、その場合、追加の回路もまた導体５８を介して結合され得ることに注目されたい。即ち、導体５６は、システム・バス２０と導体５８の全て又はその一部を介して通信し得る。また、プロセッサ１４の全て又はその一部は、処理回路と呼ばれ得ることに注目されたい。
【００１２】
動作において、命令ユニット３０は、命令をメモリ１２のようなメモリからＢＩＵ３６及びシステム・バス２０を介してフェッチし、そして制御情報を制御ユニット２８から受け取りそしてそれへ与える。命令ユニット３０は、当該技術で既知であるいずれのタイプの命令ユニットであることができ、そして当該技術で既知のように動作し得て、従って、本明細書ではより詳細に説明しない。従って、命令ユニット３０は、命令を制御ユニット２８に与え、当該制御ユニット２８は、これらの受け取られた命令を、例えば実行ユニット３２及びロード／格納ユニット３８を介して制御し、実行ユニット３２及びロード／格納ユニット３８の両方は、必要に応じて、直接、又は制御ユニット２８を介して、スカラ・レジスタ・ファイル３４と通信することができる。例えば、制御ユニット２８は、ロード／格納ユニット３８及びＢＩＵ３６を介して、データをメモリ（例えば、メモリ１２のような）から、命令を実行することが必要とされるスカラ・レジスタ・ファイル３４内のレジスタへロードすることができ、そしてデータをスカラ・レジスタ・ファイル３４内のレジスタから、命令を実行することが必要とされるメモリ（例えば、メモリ１２のような）に格納することができる。例えば、一実施形態において、ロード／格納ユニット３８は、（データを読み出し及び書き込むため）スカラ・レジスタ・ファイル３４と導体５０を介して、制御ユニット２８から導体４８を介して与えられる制御情報に基づいて通信することができる。実行ユニット３２は、命令ユニット３０から受け取られた命令を制御ユニット２８により実行することが必要とされるに応じて、スカラ・レジスタ・ファイル３４内に格納されたデータを用いて、算術演算、論理演算、シフト演算、又は他の演算を実行し、そしてその結果をスカラ・レジスタ・ファイル３４内のレジスタに格納する。実行ユニット３２は、例えば、算術論理演算ユニット（ＡＬＵ）、浮動小数点ユニット等を含み得る。
【００１３】
スカラ・レジスタ・ファイル３４は、Ｎ個の汎用レジスタ（ＧＰＲ）を含む。なお、Ｎ
は、１又はそれより大きい任意の整数であることができる。一実施形態において、スカラ・レジスタ・ファイル３４は、３２個の６４ビット・レジスタを含む。本明細書で用いられているように、スカラ・レジスタは、１次元マップを有し、従って１行のみのデータを保持するレジスタ（例えば、１×Ｍビット・レジスタ）を示す。なお、Ｍは、１又はそれより大きい任意の整数であることができる。一実施形態において、Ｍは６４であり、従って、各レジスタは、６４ビットの量を格納することができる。スカラ・レジスタ・ファイル３４は、制御情報又はデータを導体４６を介して制御ユニット２８へ与えそしてそれから受け取ることができる。
【００１４】
プロセッサ１４の動作は、一般的に当業者により理解される。従って、プロセッサ１４は、図２から図３６を参照して説明される様々な実施形態を理解するのに必要である部分を除いて、本明細書ではより詳細に説明しない。また、スカラ汎用レジスタ・ファイルに格納されたオペランドを有するデータ処理システムについての既存の設計は、本明細書で説明されるロード及び格納命令を実行することが必要とされるように変更されることができることに注目されたい。更に、スカラ・レジスタ・ファイルを用い得るので、現在の既存の設計は、本明細書で説明される命令を可能にするため改良され得ることに注目されたい。（しかしながら、本明細書で説明される実施形態は、いずれのタイプのレジスタ・ファイルと共に用いられ得て、そしてスカラ・レジスタ・ファイルのみに制限されないことに注目されたい。）
図２から図１１は、例えば、図１のプロセッサ１４のような処理回路により実行され得る様々なベクトル・エレメント・ロード及び格納命令を示す。例えば、各命令は、命令ユニット３０によりフェッチされることができ、当該命令ユニット３０は、それらの命令を適宜に制御ユニット２８に与える。従って、制御ユニット２８は、データを格納することが必要とされるスカラ・レジスタ・ファイルを用いて、ロード／格納ユニット３８及び実行ユニット３２に、必要に応じて、受け取られた命令を実行するよう指図することができる。図２から図１１に示される命令を用いる事例が、それに続く図面を参照して与えられることに注目されたい。また、本明細書で用いられているように、ベクトル・エレメント（又はレジスタ・エレメント）は、せいぜいスカラＧＰＲのサイズであることができる要素（エレメント）を指すが、しかしまたＧＰＲのサイズより小さいものであることができることに注目されたい。例えば、スカラ・レジスタ・ファイル３４が６４ビット・レジスタ（Ｍ＝６４）を含む場合、ベクトル・エレメントは、サイズ６４ビット又はそれより小さいサイズであることができる。例えば、ベクトル・エレメントは、１個の６４ビットＧＰＲが８個のベクトル・エレメントを保持することができるように１バイト（８ビット）であり得る。また、ベクトル・エレメントは、１個の６４ビットＧＰＲが４個のベクトル・エレメントを保持することができるように１ハーフワード（１６ビット）であり得る。同様に、ベクトル・エレメントは、１個の６４ビットＧＰＲが２個のベクトル・エレメントを保持することができるように１ワード（３２ビット）であり得る。また、本明細書で用いられているように、バイトは、「ｂ」により指示され、ハーフワードは、「ｈ」により指示され、ワードは、「ｗ」により指示されていることに注目されたい。（代替実施形態では、１ワード又は１ハーフワードは異なって定義され得ることに注目されたい。例えば、１ワードは、３２ビットでは無く１６ビットを意味する場合もある。しかしながら、本明細書で用いられているように、１ワードは、説明の容易さのため３２ビットを指すことにする。）。
【００１５】
図２は、エレメントをメモリからレジスタ・ファイル（例えば、スカラ・レジスタ・ファイル３４のような）の中の１個のデスティナーション・レジスタ（宛先レジスタ）にロードするベクトル・エレメント・ロード（ｌｏａｄ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｌｖｅｘ）命令を示す。一実施形態において、例えば、ｓ／ｕフィールド、ｍｓフィールド、ｄｓフィールド等のような追加の制御フィールドを用いて、演算（オペレーション）を更に定義し得る。なお、ｓ／ｕフィールド、ｍｓフィールド、ｄｓフィールドのそれ
ぞれは、図２において、演算子「ｌｖｅｘ」に続き、ピリオドにより分けられて示されている。一実施形態においては、これらの制御フィールドのそれぞれが、存在するが、しかしながら、代替実施形態においては、これらの制御フィールドの一部が存在してもよく、またいずれも存在しなくてもよい。一実施形態において、ｍｓフィールドは、メモリ・エレメント・サイズ・フィールドに対応し、ｄｓフィールドは、デスティナーション・エレメント・サイズに対応する。例えば、一実施形態において、メモリ・エレメント・サイズ（ｍｓ）フィールドは、ｍｂ、ｍｈ及びｍｗのうちの１つに設定されて、ロードされるべきメモリ・エレメントがバイト、ハーフワード及びワードのうちのいずれであるかを指示し得る。同様に、デスティナーション・エレメント・サイズ（ｄｓ）フィールドを用いて、各ロードされたエレメント（要素）がデスティナーション・レジスタ内で持つであろうサイズを指示する。
【００１６】
図２のｌｖｅｘ命令はまた、３つのオペランド：ｒＤ、ｒＡ及びｒＢを含む。命令ｌｖｅｘは、ベクトル・エレメントをメモリからデスティナーション・レジスタｒＤにロードする。メモリの中の第１のエレメントが、レジスタｒＡにより指し示され、そして図２の実施形態において、追加のパラメータが、レジスタｒＢにおいて指定される。従って、ｒＤ、ｒＡ及びｒＢのそれぞれは、スカラ・レジスタ・ファイル３４内のＧＰＲのうちの１つを指示することができる。レジスタｒＢに格納されている追加のパラメータは、計数（ｃｎｔ）値及び刻み幅（ｓｔｒｉｄｅ）値を含み、それによりｌｖｅｘ命令は、「ｃｎｔ」個のエレメントをメモリ（なお、ｒＡにより指し示される当該メモリの最初）からレジスタｒＤ従って、サイズｄｓを有するレジスタｒＤのフィールドを得て、それによりｒＤにおける各デスティナーション・エレメントは、サイズｄｓである。
【００１７】
どのようにメモリの中のエレメントがスペース（間隔）を開けて配置されているかを指示する刻み幅値がまた、指定され得る。即ち、メモリの中のエレメントは、サイズｍｓ離れた「刻み幅（ｓｔｒｉｄｅ）」単位で、間隔を置いて配置される。例えば、メモリの中のエレメントが隣接して連続している場合、１の刻み幅を用いて、「ｃｎｔ」個のサイズ「ｍｓ」の連続エレメントを得ることができる。例えば、エレメントが３個のエレメント離れて配置されている場合、３の刻み幅が用いられて、それぞれが互いにサイズ「ｍｓ」の３単位離れて配置された「ｃｎｔ」個のエレメントを得ることができる。例えば、ｍｓが１ワード（例えば、ｍｗ）を指示する場合、３の刻み幅は、ｒＡにより指し示されたメモリ位置から始まるメモリ内の３つ目毎のワードを得るであろう。また、刻み幅値は、符号を有する値であり得て、その場合、負の値は、だんだん高くなるアドレス位置ではなくてだんだん低くなるアドレス位置でエレメントを得るであろうことに注目されたい。
【００１８】
一実施形態において、デスティナーション・サイズ（ｄｓ）は、メモリ・エレメント・サイズ（ｍｓ）に等しいかそれより大きくあるべきである。デスティナーション・サイズ（ｄｓ）がメモリ・エレメント・サイズ（ｍｓ）より大きい場合、ｓ／ｕフィールドを用いて、各メモリ・エレメントを適切に拡張し得る。「ｓ」を用いて、エレメントが符号を付され、従って符号に関して拡張されるべきであることを指示することができ、一方「ｕ」を用いて、エレメントが符号を付されてなく、従ってゼロ拡張される（ｚｅｒｏ−ｅｘｔｅｎｄ）べきであることを指示することができる。例えば、「ｌｖｅｘ．ｕ．ｍｈ．ｄｗ  ｒＤ，ｒＡ，ｒＢ」のケースにおいては、ｒＤ内の（サイズ・ワードの）各デスティナーション位置の上位のハーフワードが、以下でより詳細に説明されるように、ゼロにされるであろう。また、一実施形態において、「ｃｎｔ＊ｄｓ」がデスティナーション・レジスタｒＤのサイズより小さい場合、ｒＤの残りの低い桁部分が、ゼロにされる。代替として、例えば、ｒＤの残りの低い桁部分のようなｒＤのいずれの残りの部分は、任意の所定の値（ゼロ又はいずれの他の所定の値のような値）で満たされ得ることに注目されたい。また、一実施形態において、ｄｓがｍｓより小さい場合、エレメントのそれぞれは、ｒＤにロードされるとき丸められ又は切り捨てをされることができ、（その場合、ｌｖｅｘ
命令はまた、格納命令を参照して以下で説明されるように、切り捨て又は丸め制御フィールドを含み得る）。
【００１９】
図示の実施形態において、ｓ／ｕフィールド、ｍｓフィールド及びｄｓフィールドは、演算コードの一部分又はサブ演算コードとして符号化されることができる。従って、図示の実施形態において、ｌｖｅｘ命令は、演算コードを指示するフィールド、ｒＤを指示するフィールド、ｒＡを指示するフィールド、ｒＢを指示するフィールド、及びサブ演算コードを指示するフィールドを含む。しかしながら、代替実施形態において、ｓ／ｕフィールド、ｍｓフィールド及びｄｓフィールドもまたｒＢにおいて、ｃｎｔ及びｓｔｒｉｄｅと共に指示されることができる。
【００２０】
図３は、図２のｌｖｅｘ命令の代替実施形態を示し、そこにおいて、ｒＢが追加のパラメータを含むオペランドとしてｒＢを指示するよりむしろ、パラメータの全部が、命令演算コード又はサブ演算コードの全部又は一部として与えられ得る。例えば、ｃｎｔ、ｓｔｒｉｄｅ（刻み幅）、及び制御フィールド（ｓ／ｕ、ｍｓ及びｄｓ）は全て、命令のサブ演算コード部分内で指示され得る。
【００２１】
制御フィールドｓ／ｕ、ｍｓ及びｄｓに関して上記で与えられた説明を、本明細書で説明される全てのロード命令に適用する。命令ｌｖｅｘの場合のように、これらの制御フィールドの全部又は一部が本明細書で説明される他のロード命令に存在し得て、又はこれらの制御フィールドのいずれもが本明細書で説明される他のロード命令に存在しない場合がある。また、本明細書における説明に関して、ｒＤは、一般的に、デスティナーション・レジスタを指し、ｒＡは、メモリの中の最初のメモリ・エレメントを指し示し、そしてｒＢは、命令の中に存在する場合、その命令のための一部又は全ての追加のパラメータを格納することに注目されたい。ｒＢがまた、制御レジスタと呼ばれる場合があり、そしてＧＰＲの１つである必要はないことに注目されたい。同様に、ｒＡは、制御レジスタ又は別のメモリ場所であることができ、ＧＰＲの１つである必要はない。また、本明細書で説明される全ての命令（ロード及び格納）において、制御フィールドは、命令の演算コードの一部又はサブ演算コードとして符号化され得るか、又はレジスタｒＢに配置され得るかのいずれかである。それらが、レジスタｒＢに配置される場合、制御フィールドは、一般的に、演算子に続き、ピリオドで分けられているように見えないが、しかしレジスタｒＢの中にのみ見えるであろう。また、より多くのパラメータ又は制御フィールドが必要とされる場合、本明細書における命令のいずれもは、必要ならば命令パラメータ及び制御フィールドを指示するための２以上のレジスタを指示し得て、又は追加の情報が、共通又は排反（ｄｉｓｊｏｉｎｔ）の格納場所に含まれ得る。
【００２２】
図４は、エレメントをメモリから多重デスティナーション・レジスタ（複数）にロードする多重ベクトル・エレメント・ロード（ｌｏａｄ  ｍｕｌｔｉｐｌｅ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｌｍｖｅｘ）命令を示す。ｌｖｅｘ命令の場合のように、ｌｍｖｅｘ命令はまた、ｓ／ｕフィールド、ｍｓフィールド及びｄｓフィールドを含み得て、これらのフィールドのそれぞれが、演算子ｌｍｖｅｘに続いて、ピリオドにより分けられているように図４に示されている。図４のｌｍｖｅｘ命令はまた、３つのオペランド：ｒＤ、ｒＡ及びｒＢを含む。命令ｌｍｖｅｘは、「ｃｎｔ」個のベクトル・エレメントをメモリ（なお、メモリの中の第１のエレメントは、レジスタｒＡにより指し示される。）から最初のデスティナーション・レジスタｒＤに、そしてｒＤに続く必要に応じた数のレジスタにロードし、それによりいずれのデスティナーション・レジスタの各デスティナーション・エレメントは、ｄｓである。例えば、サイズ・ハーフワード（１６ビット）の９個のエレメントがｒＤ（ここで、ＧＰＲのそれぞれは、６４ビットである。）にロードされるべきである場合、３個のＧＰＲが、必要とされる。一実施形態において、ｒＤは、第１のレジスタを指示し、そしてより多くのものが必要とされる場合、追加の連続したレジスタが
用いられる。例えば、ｒＤが９個のエレメントのためレジスタＲ４を指示する場合、レジスタＲ４、Ｒ５及びＲ６が用いられる。
【００２３】
レジスタｒＢに格納されている追加のパラメータは、ｃｎｔ、ｓｔｒｉｄｅ（刻み幅）、ｓｋｉｐ（スキップ）及びｓｋｉｐ＿ｃｎｔ（計数スキップ）を含む。パラメータｃｎｔ及びｓｔｒｉｄｅは、図１を参照して上記で説明したものと同じである。即ち、ロードされるべきメモリの中のエレメントは、サイズｍｓの「刻み幅（ｓｔｒｉｄｅ）」単位離れて配置され得る。ｌｍｖｅｘ命令は、「ｓｋｉｐ＿ｃｎｔ」個のエレメントがフェッチされるまで、エレメントをメモリからロードし、（サイズｍｓの）「ｓｔｒｉｄｅ」個の単位離れて間隔を開けて配置される。この点で、次のエレメントが、サイズｍｓの「ｓｋｉｐ」個の単位離れた位置に配置され、そしてｓｋｉｐ＿ｃｎｔの経過を追う（例えば、カウンタのような）機構が、リセットされる。従って、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが（命令の開始以降、又はｓｋｉｐ＿ｃｎｔカウンタがリセットされた最後の時間以降）フェッチされる毎に、次のエレメントが、サイズｍｓの「ｓｋｉｐ」個（「ｓｔｒｉｄｅ」個ではなく）の単位だけ離れて配置される。一実施形態において、プロセッサ１４内のカウンタ（例えば、制御ユニット２８内のようなもの）が、「ｓｋｉｐ＿ｃｎｔ−１」に設定され、そしてカウンタが終わる（ゼロに達する）まで、各フェッチ後に減分され、そして「ｃｎｔ」個のエレメントがフェッチされるまで、「ｓｋｉｐ」個の単位だけ離れて配置されたエレメントをフェッチすることを継続する。（代替として、カウンタは、ゼロに設定され、カウンタがｓｋｉｐ＿ｃｎｔ−１に達するまで毎度増分されることができる。代替実施形態は、ｓｋｉｐ＿ｃｎｔの経過を追う他の方法を用い得る。ｓｔｒｉｄｅ（刻み幅）及びｓｋｉｐ（スキップ）の両方が符号を付された量であることができることに注目されたい。また、一実施形態において、用いられた最後のデスティナーション・レジスタの中のいずれの残りの未充填のバイトは、「ｃｎｔ」個のエレメントをメモリからロードした後で、所定の値（例えば、ゼロのような値）で満たされる。
【００２４】
一実施形態において、デスティナーション・サイズ（ｄｓ）は、メモリ・エレメント・サイズ（ｍｓ）に等しいかそれより大きくあるべきである。デスティナーション・サイズ（ｄｓ）がメモリ・エレメント・サイズ（ｍｓ）より大きい場合、ｌｖｅｘを参照して上記で説明されたように、ｓ／ｕフィールドを用いて、各メモリ・エレメントを適切に拡張し得る。しかしながら、一実施形態においては、ｄｓがｍｓより小さい場合、エレメントのそれぞれは、格納命令を参照して以下で説明されるように、ｒＤにロードされるとき丸められ、又は切り捨てにされることができる。
【００２５】
図５は、図４のｌｍｖｅｘ命令の代替実施形態を示し、そこにおいては、ｒＢが追加のパラメータを含むオペランドとしてｒＢを指示するよりむしろ、全てのパラメータが、命令サブ演算コードの全部又は一部として与えられ得る。例えば、ｃｎｔ、ｓｔｒｉｄｅ刻、ｓｋｉｐ、ｓｋｉｐ＿ｃｎｔ、及び制御フィールド（ｓ／ｕ、ｍｓ及びｄｓ）は、命令のサブ演算コード又は演算コード部分内で指示され得る。別の実施形態（図示せず）においては、個々の命令パラメータが、命令フィールドに、又はｒＢ内のフィールドに割り当てられ得る。ｒＢ内のフィールドへの割り当ては、計算の結果に基づいて又はシステム状態に基づいて動的変更を可能にするパラメータを有することが望ましいとき、用いられ得る。他のパラメータは、静的性質であり、従って、命令内のフィールドの中に符号化され得る。
【００２６】
本明細書で説明される残りの命令に関しては、いずれの追加のパラメータが、ｒＢに配置され、そこにおいて、ｒＢは、命令に対するオペランドとして与えられる。しかしながら、代替実施形態においては、命令は、上記で説明されたように、異なるフォーマットを有し得ることが理解される筈である。
【００２７】
図６は、別の多重ベクトル・エレメント・ロード（ｌｏａｄ  ｍｕｌｔｉｐｌｅ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｌｍｖｅｘ２）命令を示し、当該別の多重ベクトル・エレメント・ロード（ｌｍｖｅｘ２）命令はまた、エレメントをメモリから多重デスティナーション・レジスタ（複数）にロードする。前述した命令の場合のように、ｌｍｖｅｘ２命令はまた、ｓ／ｕフィールド、ｍｓフィールド、及びｄｓフィールドを含み得て、当該ｓ／ｕフィールド、ｍｓフィールド、及びｄｓフィールドのそれぞれが、図６において、演算子「ｌｍｖｅｘ２」に続いて、ピリオドにより分けられて示されている。図６のｌｍｖｅｘ２命令はまた、オペランド：ｒＤ、ｒＡ、及びｒＢを含む。命令ｌｍｖｅｘ２は、「ｃｎｔ」個のベクトル・エレメントをメモリ（なお、メモリの中の最初のエレメントが、レジスタｒＡにより指し示される。）からデスティナーション・レジスタｒＤ（及び、ｒＤに続く必要に応じた数のレジスタ）にロードし、それにより、いずれのデスティナーション・レジスタの中の各デスティナーション・エレメントが、サイズｄｓである。例えばサイズ・ハーフワード（１６ビット）の９個のエレメントがｒＤ（ここで、ＧＰＲのそれぞれは６４ビットである。）にロードされることになる場合、少なくとも３個のＧＰＲが、必要とされ、そして更に説明されるように、３個を越えた追加のＧＰＲがまた、必要とされる。一実施形態において、ｒＤは、最初のレジスタを指示し、そしてより多くのレジスタが必要とされる場合、追加の連続したレジスタが、用いられる。例えば、ｒＤが９個のエレメントのためレジスタＲ４を指示する場合、少なくともＲ４、Ｒ５及びＲ６が、用いられる。
【００２８】
レジスタｒＢに格納されているｌｍｖｅｘ２に関する追加のパラメータは、ｃｎｔ、ｒｃｎｔ、ｓｔｒｉｄｅ、及びｓｋｉｐを含む。パラメータｃｎｔ及びｓｔｒｉｄｅは、ｌｍｖｅｘを参照して上記で説明したものと同じである。即ち、ロードされるべきメモリの中のエレメントは、サイズｍｓの「ｓｔｒｉｄｅ」単位だけ離れて配置され得て、そしてｃｎｔは、ロードされるべきエレメントの合計数を定義する。ｒｃｎｔパラメータは、各レジスタにロードされるべきデスティナーション・エレメントの最大数を定義する。（従って、必要とされるレジスタの合計数は、ｃｎｔ及びｒｃｎｔの両方に依存する。）ｌｍｖｅｘ２命令は、合計「ｃｎｔ」個のエレメントをメモリから１又はそれより多くの（必要に応じた数の）デスティナーション・レジスタにロードし、そこにおいて、「ｒｃｎｔ」個のエレメントのみが、各デスティナーション・レジスタにロードされる。（従って、一実施形態において、ｒｃｎｔは、サイズｄｓのデスティナーション・エレメントの合計数に等しいか又はそれより小さく、その合計数個のデスティナーション・エレメントは、単一のＧＰＲ内に含まれ、そしてｒｃｎｔはまた、ｃｎｔに等しいか又はそれより小さい。
【００２９】
例えば、ｌｍｖｅｘ２命令は、「ｒｃｎｔ」個のエレメントが単一のレジスタにフェッチされるまで、（サイズｍｓの）「ｓｔｒｉｄｅ」個の単位だけ離れて間隔を開けられて配置されているエレメントをメモリからデスティナーション・レジスタにロードする。この点で、「ｃｎｔ」個の合計エレメントが依然フェッチされていない場合、次のエレメントが、サイズｍｓの「ｓｋｉｐ」個の単位だけ離れて配置される。次いで、（サイズｄｓの）「ｓｔｒｉｄｅ」個の単位だけ離れて間隔を開けられたメモリ位置からのエレメントは、「ｒｃｎｔ」個のエレメントが別のデスティナーション・レジスタにフェッチされるまで（、又は「ｃｎｔ」個のエレメントがフェッチされるまで、のうちのいずれかが最初に生じるまで）その別のデスティナーション・レジスタ（例えば、ｒＤ＋１のようなもの）にロードされる。「ｃｎｔ」個のエレメントがフェッチされた後で、「ｃｎｔ」個のエレメントが依然フェッチされなかった場合、「ｓｋｉｐ」個の単位だけ離れて間隔を開けられた配置された次のエレメントを例えばｒＤ＋２にロードすることを継続する。「ｃｎｔ」個のエレメントに達したとき、ロードすることを停止する。従って、所与のデスティナーション・レジスタのためのメモリの中のエレメントは、「ｓｔｒｉｄｅ」個のｍｓ単位だけ離れて間隔を開けられて置かれ、そして連続のレジスタのためのエレメントは、サ
イズｍｓの「ｓｋｉｐ」個の単位を前のデスティナーション・レジスタの最後のエレメントのアドレスに加えた後でフェッチされることに注目されたい。また、ｓｔｒｉｄｅ及びｓｋｉｐの両方が、符号を付された量であり得て、負のｓｔｒｉｄｅ及びｓｋｉｐを可能にすることに注目されたい。
【００３０】
代替実施形態において、ｓｋｉｐ＿ｃｎｔパラメータを用いて得て、それにより、ｓｋｉｐ＿ｃｎｔ個のエレメントがフェッチされた後で、次のエレメントが、サイズｍｓの「ｓｋｉｐ」個の単位だけ離れて配置される。このようにして、「ｒｃｎｔ」個のエレメントがデスティナーション・レジスタにロードされた後で、連続のレジスタのための次のエレメントは、ｓｋｉｐ＿ｃｎｔ個のエレメントがロードされた場合ｓｋｉｐに基づいて、又はｓｋｉｐ＿ｃｎｔ個のエレメントがまだロードされていない場合にはｓｔｒｉｄｅに基づいて、命令の開始以降、又はｓｋｉｐ＿ｃｎｔが最後にリセットされた以降フェッチされる。
【００３１】
ｌｖｅｘを参照して上記で説明したように、プロセッサ１４内（例えば、制御ユニット２８内のような）のカウンタを用いて、ベクトル・エレメントのロード中に「ｃｎｔ」の経過を追跡し得る。同様に、プロセッサ１４内のカウンタを用いて、各デスィテネーション・レジスタのロード中に「ｒｃｎｔ」の経過も追跡し得る。代替実施形態は、ｃｎｔ及びｒｃｎｔの経過を追う他の方法を用い得る。また、一実施形態において、「ｒｃｎｔ」個のエレメントがロードされた後の各デスティナーション・レジスタの中のいずれの残りのバイトが、例えば、ゼロのような所定の値で満たされる。また、一実施形態において、用いられた最後のデスティナーション・レジスタの中の残りのバイトは、「ｃｎｔ」個のエレメントをメモリからロードした後で（例えば、ゼロのような）所定の値で満たされる。
【００３２】
一実施形態において、デスティナーション・レジスタ（ｄｓ）は、メモリ・エレメント・サイズ（ｍｓ）に等しいか又はそれより大きくあるべきである。デスティナーション・サイズ（ｄｓ）がメモリ・エレメント・サイズ（ｍｓ）より大きい場合、上記の命令を参照して先に説明したように、ｓ／ｕフィールドを用いて、各メモリ・エレメントを適切に拡張し得る。しかしながら、一実施形態において、ｄｓがｍｓより小さい場合、エレメントのそれぞれは、格納命令を参照して以下で説明されるように、ｒＤにロードされるとき、丸められ又は切り捨てをされることができる。
【００３３】
図７は、ベクトル・エレメントのストリームのロード（ｌｏａｄ  ｓｔｒｅａｍ  ｏｆ
ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｌｓｔｍｖｅｘ）命令を示し、当該ベクトル・エレメントのストリームのロード（ｌｓｔｍｖｅｘ）命令は、ベクトル・エレメントのストリームをメモリから、デスティナーション・レジスタと関連した名前を付されたストリームの中にロードすることを開始する。前述した命令の場合のように、ｌｓｔｍｖｅｘ命令はまた、ｓ／ｕフィールド、ｍｓフィールド及びｄｓフィールドを含み得て、それぞれのフィードが、演算子「ｌｓｔｍｖｅｘ」に続いて、ピリオドで分けられて図７に示されている。図７のｌｓｔｍｖｅｘ命令はまた、３つのオペランド：ｒＤ、ｒＡ及びｒＢを含む。ｌｓｔｍｖｅｘ命令のための追加のパラメータは、ｃｎｔ、ｒｃｎｔ、ｓｋｉｐ、及びｓｋｉｐ＿ｃｎｔを含む。パラメータｃｎｔ、ｒｃｎｔ、ｓｔｒｉｄｅ、ｓｋｉｐ、及びｓｋｉｐ＿ｃｎｔは、一般的に、ｌｖｅｘ、ｌｍｖｅｘ、及びｌｍｖｅｘ２を参照して上記で説明したのと同じである。
【００３４】
ｌｓｔｍｖｅｘ命令は、「ｃｎｔ」個の合計エレメントをメモリからｒＤの多重インスタンスにロードし（そこにおいて、メモリの中の第１のエレメントは、レジスタｒＡにより指し示される。）、それによりデスティナーション・レジスタの中の各デスティナーション・エレメントは、サイズｄｓである。ｃｎｔ及びｒｃｎｔの値は、目標にされるｒＤ
のインスタンスの数を決定する。ｌｓｔｍｖｅｘ命令は、「ｓｋｉｐ＿ｃｎｔ」個のエレメントがフェッチされるまで、サイズｍｓの「ｓｔｒｉｄｅ」単位だけ離れて間隔を開けられて置かれたベクトル・エレメントをメモリからロードする。この点で、「ｓｋｉｐ＊ｍｓ」が、フェッチされた最後のエレメントのアドレスに（「ｓｔｒｉｄｅ＊ｍｓ」の代わりに）加えられて、ロードされるべき次のエレメントのアドレスを得る。また、この点で、ｓｋｉｐ＿ｃｎｔの経過を追う機構（例えば、カウンタのようなもの）がリセットされる。従って、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが、（命令の開始以降、又はｓｋｉｐ＿ｃｎｔカウンタがリセットされた最後の時間以降）フェッチされる毎に、次のエレメントの位置が、「ｓｔｒｉｄｅ」パラメータよりむしろ「ｓｋｉｐ」パラメータにより指示される。
【００３５】
「ｒｃｎｔ」パラメータは、１レジスタ・インスタンス当たりのデスティナーション・エレメントの数を定義する。（従って、一実施形態においては、ｒｃｎｔは、単一のＧＰＲ内のサイズｄｓのデスティナーション・エレメントの合計数に等しいか又はそれより小さく、そしてｒｃｎｔは、ｃｎｔに等しいか又はそれより小さい。）例えば、ｌｓｔｍｖｅｘ命令は、「ｒｃｎｔ」個のエレメントがフェッチされるまで、エレメントをメモリからｒＤ（即ち、ｒＤの第１のインスタンス）に（前述したパラメータｓｔｒｉｄｅ、ｓｋｉｐ、及びｓｋｉｐ＿ｃｎｔに従って）ロードする。この点で、「ｃｎｔ」個のエレメントが依然フェッチされていなかった場合、次のエレメントは、サイズｍｓの「ｓｔｒｉｄｅ」個の単位だけ離れて配置され（、又はｓｋｉｐ＿ｃｎｔ個のエレメントがフェッチされた場合は、次のエレメントは、サイズｍｓの「ｓｔｒｉｄｅ」個の単位よりむしろ「ｓｋｉｐ」個の単位だけ離れて配置される）。次いで、ｌｓｔｍｖｅｘ命令は、「ｒｃｎｔ」個のエレメントがフェッチされるまで（、又は「ｃｎｔ」個のエレメントがフェッチされるまでのうちのいずれかが最初に生じるまで）エレメントをメモリからｒＤの異なるインスタンス（即ち、ｒＤの第２のインスタンス）に（パラメータｓｔｒｉｄｅ、ｓｋｉｐ、及びｓｋｉｐ＿ｃｎｔに従って）ロードする（即ち、ｒＤの前の値をオーバライトする）ことを継続する。「ｒｃｎｔ」個のエレメントがフェッチされた後で、「ｃｎｔ」個のエレメントが依然フェッチされない場合、次のエレメントをｒＤ（ｒＤの別のインスタンス）の中へロードすることが継続する。「ｃｎｔ」個のエレメントがフェッチされたとき、ロードすることが停止される。ｒＤの各インスタンスは、メモリからフェッチされたｒｃｎｔ個のエレメントの一意の組に対応する。ｒＤの各インスタンスがデキュー（ｄｅｑｕｅｕ）されるので、エレメントのストリームの合計ｃｎｔ個のエレメントがロードされるまで、当該エレメントのストリームの中のｒｃｎｔ個のエレメントの次の組を次のインスタンスにロードする。
【００３６】
一実施形態において、ｒＤのインスタンスは、後続の命令においてｒＤの使用又は位置に基づいてデキューされる。例えば、一実施形態において、ｒＤのインスタンスは、ｒＤが後続の命令において特定のソース・レジスタとして用いられる場合デキューされる。従って、その後続の命令が（ｒＤを特定のソース・レジスタとして用いて）実行された後で、次の「ｒｃｎｔ」個のエレメントは、（「ｒｃｎｔ」個のエレメントが依然として到着されていないと仮定して、）ｒＤにロードされるであろう。しかしながら、ｒＤが特定のソース・レジスタとして用いられない場合（例えば、それが異なるソース・レジスタである場合、又はそれがデスティナーション・レジスタである場合、）ｒＤは、デキューされず、そして次の「ｒｃｎｔ」個のエレメントは、まだｒＤにロードされない。代替実施形態において、デキューするか又はしないかのオプション（選択）は、他の方法で、例えば、命令内のフラグによる、又は異なる演算コード（例えば、デキューすることを求めて呼ぶ特別のサブセットの命令に対応するようなもの）を用いることによるような方法で、指示される。オプションのデキューすることの例は、以下で、図２３から図２６を参照して説明されるであろう。
【００３７】
上記の命令を参照して上記で説明したように、プロセッサ１４内のカウンタ（例えば、制御ユニット２８のようなもの）を用いて、ベクトル・エレメントのロード中に「ｃｎｔ」の経過を追跡し得る。同様に、プロセッサ１４内のカウンタを用いて、各デスティナーション・レジスタのロード中に「ｒｃｎｔ」の経過も追跡し得る。また、カウンタを用いて、ｓｋｉｐ＿ｃｎｔの経過を追跡し得る。代替実施形態は、ｃｎｔ、ｒｃｎｔ、及びｓｋｉｐ＿ｃｎｔの経過を追う他の方法を用い得る。また、一実施形態において、「ｒｃｎｔ」個のエレメントがロードされた後の各デスティナーション・レジスタ又はレジスタ・インスタンスの中のいずれの残りのバイトが、所定の値、例えば、ゼロのような値をロードされ、又はその値で満たされる。また、一実施形態において、用いられた最後のデスティナーション・レジスタ又はレジスタ・インスタンスの中の残りのバイトは、「ｃｎｔ」個のエレメントをメモリからロードした後で、所定の値（例えば、ゼロのような値）で満たされる。また、ｓｔｒｉｄｅ及びｓｋｉｐの両方が符号を付された量であり得て、負のｓｔｒｉｄｅ及びｓｋｉｐが可能であることに注目されたい。
【００３８】
一実施形態において、デスティナーション・サイズ（ｄｓ）は、メモリ・エレメント・サイズ（ｍｓ）に等しいか又はそれより大きくあるべきである。デスティナーション・サイズ（ｄｓ）がメモリ・エレメント・サイズ（ｍｓ）より大きい場合、ｓ／ｕフィールドを用いて、上記の命令を参照して上記で説明したように、各メモリ・エレメントを適切に拡張し得る。しかしながら、一実施形態において、ｄｓはｍｓより小さい場合、エレメントのそれぞれは、ｒＤにロードされるとき丸められ又は切り捨てにされることができる。
【００３９】
代替実施形態において、ｌｓｔｍｖｅｘ命令の個々のパラメータのそれぞれが、任意であり得て、そしてこれはまた、例えば、ｌｖｅｘ命令、ｌｍｖｅｘ命令及びｌｍｖｅｘ２命令のような、本明細書で説明される他の命令の実施形態を有するケースであり得る。
図８は、エレメントをソース・レジスタからメモリへ格納するベクトル・エレメントの格納（ｓｔｏｒｅ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｓｔｖｅｘ）命令を示す。ｓｔｖｅｘ命令は、ｌｖｅｘ命令の格納相手方と考えられ得る。一実施形態において、ｓｔｖｅｘ命令は、ｓ／ｕフィールド、ｍｓフィールド、ｓｓフィールド、及びｈ／ｌフィールドのような、追加の制御フィールドを用い、これらのフィールドのそれぞれは、図８において、演算子「ｓｔｖｅｘ」に続いて、そしてピリオドにより分離されて示されている。一実施形態において、これらの制御フィールドのそれぞれが、存在する。しかしながら、代替実施形態において、これらの制御フィールドの一部のみが存在し、又は全く無い場合がある。一実施形態において、ｓ／ｕフィールド（符号付き又は符号なしに拡張）及びｍｓフィールド（メモリ・サイズ）は、ロード命令を参照して上記で説明したものと同じである。一実施形態において、ｓｓフィールドは、ソース・レジスタの各ソース・エレメントのサイズを指示するソース・エレメント・サイズ・フィールドに対応する。例えば、一実施形態において、ｓｓフィールドは、ｓｂ、ｓｈ、又はｓｗのうちの１つに設定されて、格納されるべきソース・エレメントがそれぞれバイト、ハーフワード、又はワードであるかどうかを指示し得る。
【００４０】
図８のｓｔｖｅｘ命令はまた、３つのオペランド：ｒＳ、ｒＡ及びｒＢを含む。図８の実施形態において、追加のパラメータが、レジスタｒＢで指定され、そこにおいてこれらの追加のパラメータは、ｃｎｔ及びｓｔｒｉｄｅを含む。（従って、上記のロード命令の場合のように、ｒＳ、ｒＡ及びｒＢのそれぞれは、スカラ・レジスタ・ファイル３４内のＧＰＲのうちの１つを指示することができる。）ｓｔｖｅｘ命令は、「ｃｎｔ」個のサイズｓｓのエレメントをソース・レジスタｒＳからメモリへ格納し、そこにおいて、最初のエレメントは、レジスタｒＡにより指し示されたメモリ位置に格納されることになり、それによりメモリの中の各デスティナーション・エレメントは、サイズｍｓを有し、（そして、ｓ／ｕフィールド及びｈ／ｌフィールドにより指示されるように、任意に切り捨て又は拡張される）。
【００４１】
また、メモリのエレメントが間隔を開けて置かれることになる仕方を指示するｓｔｒｉｄｅ値が、指定され得る。即ち、メモリのエレメントは、格納されるとき、サイズｍｓの「ｓｔｒｉｄｅ」単位離れて間隔を開けて置かれることになる。例えば、１のｓｔｒｉｄｅを用いて、「ｃｎｔ」個のサイズ「ｍｓ」の連続のエレメントを格納することができる。同様に、３のｓｔｒｉｄｅを用いて、「ｃｎｔ」個のサイズ「ｍｓ」のエレメントをメモリに格納することができ、それぞれが互いにサイズ「ｍｓ」の３単位離れて間隔を開けて置かれる。また、ｓｔｒｉｄｅ値が、符号を付された値であり得ることに注目されたい。
【００４２】
一実施形態において、ｈ／ｌフィールドは、切り捨て制御フィールドである。例えば、ｓｓがｍｓより大きい（即ち、ソース・サイズがメモリ・サイズより大きい）場合、ｈ／ｌフィールドを用いて、ソース・エレメントが切り捨てられることになる仕方を指示することができる。例えば、ｈ／ｌフィールドが「ｈ」である場合、ソース・エレメントの低い次数部分が、切り捨てられる。しかしながら、ｈ／ｌフィールドが「ｌ」である場合、ソース・エレメントの高い次数部分が、切り捨てられる。代替実施形態において、ｓｔｖｅｘ命令はまた、（切り捨て制御フィールドに加えて又はその代わりに）丸め制御フィールドを含み得て、それにより、例えば、ｓｓがｍｓより大きい場合、値は、切り捨てをされるよりむしろ丸められ得る。例えば、一実施形態において、ソース・エレメントの高い次数部分が、ソース・エレメントの低い次数部分の値に基づいて丸められ得る。
【００４３】
一実施形態において、ソース・エレメント・サイズ（ｓｓ）がメモリ・エレメント・サイズ（ｍｓ）より小さい場合、ｓ／ｕフィールドを用いて、メモリに格納されたとき、各ソース・エレメントを適切に拡張し得る。「ｓ」を用いて、エレメントが符号を付され、従って符号について拡張されるべきであることを指示することができる、一方「ｕ」を用いて、エレメントに符号が付されず、従ってゼロ拡張されるべきであることを指示することができる。
【００４４】
図示の実施形態において、本明細書で説明される格納命令のうちのいずれの格納命令のｓ／ｕフィールド、ｍｓフィールド、ｓｓフィールド、及びｈ／ｌフィールドは、演算コード又はサブ演算コードとして符号化されることができる。従って、図示の実施形態において、ｓｔｖｅｘ命令は、演算コードを指示するためのフィールド、ｒＳを指示するためのフィールド、ｒＡを指示するためのフィールド、ｒＢを指示するためのフィールド、及びサブ演算コードを指示するためのフィールドを含む。しかしながら、代替実施形態において、ｓ／ｕフィールド、ｈ／ｌフィールド、ｍｓフィールド、及びｓｓフィールドがまた、ｒＢで、ｃｎｔ及びｓｔｒｉｄｅと一緒に指示されることができる。また、ロード命令の場合のように、追加のパラメータのそれぞれがまた、ｒＢのようなレジスタを指定する必要なしに、演算コードの一部又はサブ演算コードとして符号化され得る。従って、代替実施形態において、本明細書で説明される格納命令のいずれも、様々な違ったフォーマットを有し得ることに注目されたい。また、格納命令は、いずれの追加のパラメータがレジスタｒＢに格納されることに関して説明されるであろう。（前述したように、複数のレジスタ又は格納場所は、追加のパラメータ及び制御フィールドが必要とされる場合上記命令の中で指示されることができる。）。
【００４５】
制御フィールドｓ／ｕ、ｍｓ、ｓｓ及びｈ／ｌに関して上記で与えられた記載を、本明細書で説明される全ての格納命令に適用する。命令ｓｔｖｅｘの場合のように、これらの制御フィールドの全て又は一部が、本明細書で説明される他の格納命令に存在し得て又はこれらの制御フィールドがどれも本明細書で説明される他の格納命令に存在しなくてもよい。本明細書における説明に対して、ｒＳが、一般的にソース・レジスタと呼ばれ、ｒＡが、最初のエレメントが格納されることになるメモリの中の位置を指し示し、そしてｒＢ
は、命令の中に存在する場合、その命令の一部又は全ての追加のパラメータを保持する。
【００４６】
図９は、エレメントを多重ソース・レジスタからメモリへ格納する多重ベクトル・エレメントの格納（ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｓｔｍｖｅｘ）命令を示す。ｓｔｍｖｅｘ命令は、ｌｍｖｅｘ命令の格納相手方と考えられ得る。一実施形態において、ｓｔｍｖｅｘ命令は、ｓ／ｕフィールド、ｓｓフィールド、ｄｓフィールド、及びｈ／ｌフィールドのような追加の制御フィールドを用い、これら制御フィードのそれぞれが、図９において、演算子「ｓｔｍｖｅｘ」に続いて、ピリオドにより分離されて示されている。ｓｔｖｅｘ命令に関するこれらのフィールドに対して上記で与えられた説明がまた、ここで、ｓｔｍｖｅｘ命令に適用される。
【００４７】
図９のｓｔｍｖｅｘ命令はまた、３つのオペランド：ｒＳ、ｒＡ及びｒＢを含む。図９の実施形態において、追加のパラメータが、レジスタｒＢで指定され、そこにおいて、これらの追加のパラメータは、ｃｎｔ、ｓｔｒｉｄｅ、ｓｋｉｐ、及びｓｋｉｐ＿ｃｎｔを含む。ｓｔｍｖｅｘ命令は、「ｃｎｔ」個のサイズｓｓのエレメントを多重ソース・レジスタｒＳ（及び、必要に応じて、ｒＳ＋１、ｒＳ＋２のようなｒＳに続くレジスタ）からメモリへ格納し、そこにおいて、格納されるべき最初のエレメントのアドレスは、レジスタｒＡにより指し示され、そしてそれによりメモリの各エレメントは、サイズｍｓを有し、（そしてｓ／ｕフィールド及びｈ／ｌフィールドにより指示されるように、任意に切り捨て又は拡張される）。
【００４８】
ｓｔｖｅｘの場合のように、ｓｔｒｉｄｅ値は、メモリのエレメントが間隔を開けて置かれる仕方を指示し得る。従って、ｒＳからのソース・エレメントが、メモリに格納され、それにより、それらは、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが格納されるまで、「ｓｔｒｉｄｅ」個の（サイズｍｓの）単位離れて配置される。この点で、「ｓｋｉｐ＊ｍｓ」は、（「ｓｔｒｉｄｅ＊ｍｓ」の代わりに、）格納された最後のエレメントのアドレスに加えられて、格納されるべき次のエレメントのアドレスを得る。また、この点で、ｓｋｉｐ＿ｃｎｔの経過を追うため用いられた機構（例えば、カウンタのようなもの）が、リセットされる。従って、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが、（命令の開始以降、又はｓｋｉｐ＿ｃｎｔカウンタがリセットされた以降）格納される毎に、格納されるべき次のレメントの位置が、ｓｔｒｉｄｅパラメータよりむしろｓｋｉｐパラメータにより指示される。ｒＳからのソース・エレメントがメモリに格納された後で、次のソース・レジスタ（例えば、ｒＳ＋１のようなもの）からのソース・エレメントは、「ｃｎｔ」個のエレメントが格納されるまで、ｓｔｒｉｄｅ、ｓｋｉｐ及びｓｋｉｐ＿ｃｎｔパラメータに基づいてメモリに格納される。
【００４９】
ロード命令に関して上記で説明したように、プロセッサ１４内のカウンタ（例えば、制御ユニット２８におけるようなもの）を用いて、ｃｎｔ及びｓｋｉｐ＿ｃｎｔの経過を適切に追跡し得る。例えば、カウンタを用いて、「ｓｋｉｐ＿ｃｎｔ」個のエレメントを指示し得て、そこにおいて、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが格納された後で、カウンタは、リセットされ、そして次の「ｓｋｉｐ＿ｃｎｔ」個のエレメントが、その開始がｓｋｉｐにより指示される位置に格納される。これは、例えば、「ｃｎｔ」個のエレメントが格納されるまで（それは、例えば、別のカウンタにより指示され得る。）継続し得る。代替実施形態は、ｃｎｔ及びｓｋｉｐ＿ｃｎｔの経過を追う他の方法を用い得る。
【００５０】
一実施形態において、ｓｓがｍｓより小さい場合、各ソース・エレメントは、（ｓｔｖｅｘに関して説明したように）ｓ／ｕフィールドにより指示されるように、適切に拡張されて、メモリ・デスティナーション・エレメントを生成することに注目されたい。また、一実施形態において、ｓｓがｍｓより大きい場合、各ソース・エレメントは、（ｓｔｖｅｘに関して説明したように）ｈ／ｌフィールドにより指示されるように、適切に切り捨て
られて、メモリ・デスティナーション・エレメントを生成する。
【００５１】
図１０は、エレメントを多重デスティナーション・レジスタからメモリへ格納する別の多重ベクトル・エレメントの格納（ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｓｔｍｖｅｘ２）命令を示す。ｓｔｍｖｅｘ２命令は、ｌｍｖｅｘ２命令の格納相手方と考えられ得る。一実施形態において、ｓｔｍｖｅｘ２命令は、ｓ／ｕフィールド、ｓｓフィールド、ｄｓフィールド及びｈ／ｌフィールドのような追加の制御フィールドを用い、これら制御のそれぞれが、図１０において、演算子「ｓｔｍｖｅｘ２」に続いて、ピリオドにより分離されて示されている。ｓｔｖｅｘ命令及びｓｔｍｖｅｘ命令に関するこれらのフィールドについて上記で与えられた説明がまた、ここでｓｔｍｖｅｘ２命令に適用される。
【００５２】
図１０のｓｔｍｖｅｘ２命令はまた、３つのオペランド：ｒＳ、ｒＡ及びｒＢを含む。図１０の実施形態において、追加のパラメータは、レジスタｒＢにおいて指定され、そこにおいて、これらの追加のパラメータは、ｃｎｔ、ｒｃｎｔ、ｓｔｒｉｄｅ、及びｓｋｉｐを含む。ｓｔｍｖｅｘ２命令は、「ｃｎｔ」個のサイズｓｓのエレメントを多重ソース・レジスタｒＳ（及び、必要に応じて、ｒＳ＋１、ｒＳ＋２のようなｒＳに続くレジスタ）からメモリへ格納し、そこにおいて、格納されるべき最初のエレメントのアドレスは、レジスタｒＡにより指し示され、そしてそれにより、メモリの各エレメントは、サイズｍｓを有し（、及びｓ／ｕフィールド及びｈ／ｌフィールドにより指示されるように、任意に切り捨て又は拡張される）。ｒｃｎｔパラメータは、格納されるべき１ソース・レジスタ当たりのソース・エレメントの数を定義する。
【００５３】
ｓｔｍｖｅｘの場合のように、ｓｔｒｉｄｅ値は、メモリの中のエレメントが間隔を開けて置かれる仕方を指示し得る。従って、ｒＳからのソース・エレメントは、それらが「ｓｔｒｉｄｅ」個の（サイズｍｓの）単位離れて配置されるようにメモリに格納される。一実施形態において、「ｒｃｎｔ」個のエレメントを所与のソース・レジスタ（ｒＳ）から格納した後で、残りのエレメントが格納されることになる場合、「ｓｋｉｐ＊ｍｓ」が、（「ｓｔｒｉｄｅ＊ｍｓ」の代わりに）格納された最後のエレメントのアドレスに加えられて、次のエレメントのアドレスを得る。次いで、次のソース・レジスタ（例えば、ｒＳ＋１のようなもの）からの「ｒｃｎｔ」個のソース・エレメントは、指示された「ｓｔｒｉｄｅ」値を用いて、メモリに格納される。これは、「ｃｎｔ」個のエレメントが格納されるまで継続する。一実施形態において、「ｒｃｎｔ＊ｓｓ」がソース・レジスタのサイズより小さい場合、各ソース・レジスタの残りの低い次数部分が、無視されることに注目されたい。また、「ｓｔｒｉｄｅ」及び「ｓｋｉｐ」が、符号を付された量であり、従って、負のｓｔｒｉｄｅ及びｓｋｉｐが可能であることに注目されたい。
【００５４】
代替実施形態において、また、ｓｋｉｐ＿ｃｎｔパラメータを用い、それにより、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが格納された後で、次のエレメントが、（サイズｍｓの「ｓｔｒｉｄｅ」個の単位よりむしろ）サイズｍｓの「ｓｋｉｐ」個の単位離れて配置されることに注目されたい。このようにして、「ｒｃｎｔ」個のエレメントがメモリに格納された後で、連続のレジスタからの次のエレメントは、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが格納された場合ｓｋｉｐに基づいて、又は「ｓｋｉｐ＿ｃｎｔ」個のエレメントが命令の開始以降又はｓｋｉｐ＿ｃｎｔが最後にリセットされた以降まだ格納されていない場合ｓｔｒｉｄｅに基づいて、メモリの中のある位置に格納される。
【００５５】
ロード命令に関して上記で説明したように、プロセッサ１４内のカウンタ（例えば、制御ユニット２８におけるようなもの）を用いて、ｃｎｔ及びｒｃｎｔの経過を適切に追跡し得る。代替実施形態は、ｃｎｔ及びｒｃｎｔの経過を追う他の方法を用い得る。
【００５６】
一実施形態において、ｓｓがｍｓより小さい場合、各ソース・エレメントは、（ｓｔｖｅｘに関して説明したように）ｓ／ｕフィールドにより指示されるように、適切に拡張されて、メモリ・デスティナーション・エレメントを生成する。また、一実施形態において、ｓｓがｍｓより大きい場合、各ソース・エレメントは、（ｓｔｖｅｘ及びｓｔｍｖｅｘに関して説明したように）ｈ／ｌフィールドにより指示されるように、適切に切り捨てをされて、メモリデスティナーション・エレメントを生成する。また、丸めが、ｓｔｖｅｘ命令に関して先に説明したように、任意に指定され得る。
【００５７】
図１１は、ベクトル・エレメントのストリームを、名前を付けられたストリームからメモリへ格納することを開始するベクトル・エレメントのストリームの格納（ｓｔｏｒｅ  ｓｔｒｅａｍ  ｏｆ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｓｔｓｔｒｍｖｅｘ）命令を示す。ｓｔｓｔｒｍｖｅｘ命令は、ｌｓｔｍｖｅｘ命令の格納相手方と考えられ得る。一実施形態において、ｓｔｓｔｒｍｖｅｘ命令は、ｓ／ｕフィールド、ｓｓフィールド、ｄｓフィールド及びｈ／ｌフィールドのような追加の制御フィールドを用い、これらの制御のそれぞれが、図１１において、演算子「ｓｔｓｔｒｍｖｅｘ」に続いて、ピリオドにより分離されて示されている。ｓｔｖｅｘ命令、ｓｔｍｖｅｘ命令及びｓｔｍｖｅｘ２命令に関してこれらのフィールドについて上記で与えられた説明がまた、ここでｓｔｓｔｒｍｖｅｘ命令に適用される。
【００５８】
図１１のｓｔｓｔｒｍｖｅｘ命令はまた、３つのオペランド：ｒＳ、ｒＡ及びｒＢを含む。図１１の実施形態において、追加のパラメータが、レジスタｒＢにおいて指定され、そこにおいて、これら追加のパラメータは、ｃｎｔ、ｒｃｎｔ、ｓｋｉｐ、及びｓｋｉｐ＿ｃｎｔを含む。ｓｔｓｔｒｍｖｅｘ命令は、「ｃｎｔ」個の合計エレメントを有するソース・レジスタｒＳの多重インスタンスをメモリに格納し、そこにおいて、格納されるべき最初のエレメントのアドレスは、ｒＡにより指し示される。従って、「ｃｎｔ」パラメータは、格納されるべきエレメントの合計数を定義し、そして「ｒｃｎｔ」パラメータは、ソース・レジスタｒＳの１インスタンス当たりのソース・エレメントの数を定義する。ｓｔｓｔｒｍｖｅｘ命令は、ｒＳからのエレメント（即ち、ｒＳの最初のエレメント）をメモリに格納し、それによりそれらのエレメントは、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが格納されるまで、「ｓｔｒｉｄｅ」個の（サイズｍｓの）単位離れて間隔を開けられて置かれる。この点で、「ｓｋｉｐ＊ｍｓ」が、（「ｓｔｒｉｄｅ＊ｍｓ」の代わりに）格納された最後のエレメントのアドレスに追加されて、次のエレメントのアドレスを得る。また、この点で、ｓｋｉｐ＿ｃｎｔの経過を追う機構（例えば、カウンタのようなもの）は、リセットされる。従って、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが、（命令の開始以降、又はｓｋｉｐ＿ｃｎｔカウンタがリセットされた以降）格納される毎に、次のエレメントの位置が、ｓｔｒｉｄｅパラメータよりむしろｓｋｉｐパラメータにより指示される。
【００５９】
また、「ｒｃｎｔ」個のエレメントをｒＳの所与のインスタンスから格納した後で、エレメントが格納されるため残っている（即ち、「ｃｎｔ」個のエレメントが格納されていない）場合、（「ｓｋｉｐ＿ｃｎｔ」個のエレメントが格納されていない（その場合に、「ｓｔｒｉｄｅ＊ｍｓ」よりむしろ「ｓｋｉｐ＊ｍｓ」が格納された最後のエレメントのアドレスに加えられる。）ならば、）「ｓｔｒｉｄｅ＊ｍｓ」が、格納された最後のエレメントのアドレスに加えられて、ｒＳの次のインスタンス（これは、例えば、ｒＳをデスティナーション・レジスタとして用いる命令の実行後に格納される。）から格納されるべき最初のエレメントのアドレスを得る。例えば、一実施形態において、インスタンスは、ｒＳを命令のためのデスティナーション・レジスタとして用いるときデキューされる。例えば、ｒＳが後続の命令のためのデスティナーション・レジスタとして用いられ、そして「ｃｎｔ」個のエレメントがまだ格納されてない場合、ｒＳ、即ち、後続の命令のデスティナーション・レジスタからの「ｒｃｎｔ」個のエレメント（これは、例えば、後続の命
令の結果の全て又は一部を含む。）は、ｓｔｒｉｄｅパラメータ、ｓｋｉｐパラメータ、及びｓｋｉｐ＿ｃｎｔパラメータに従ってメモリに格納される。この実施形態において、ｒＳを命令のデスティナーション・レジスタとして用いない場合、それは、その命令の実行の際に、エンキュー（ｅｎｑｕｅｕ）されず、（従って、ベクトル・ストリームの一部として格納されない）。代替実施形態において、命令の中のフラグ、又は演算コード（例えば、エンキューすることを求めて呼ぶ命令の特別なサブセットに対応するようなもの）のような他の機構を用いて、ｒＳのインスタンスがエンキューされるべきかを指示し得ることに注目されたい。
【００６０】
一実施形態において、「ｒｃｎｔ＊ｓｓ」がソース・レジスタのサイズより小さい場合、そのソース・レジスタの残りの低い次数部分が、無視されることに注目されたい。また、「ｓｔｒｉｄｅ」及び「ｓｋｉｐ」は、符号を付された量であり得て、従って、負のｓｔｒｉｄｅ及びｓｋｉｐを可能にする。
【００６１】
ロード命令に関して上記で説明したように、プロセッサ１４内のカウンタ（例えば、制御ユニット２８におけるようなもの）を用いて、ｃｎｔ、ｒｃｎｔ、ｓｋｉｐ、及びｓｋｉｐ＿ｃｎｔの経過を適切に追跡し得る。代替実施形態は、これらのパラメータの経過を追う他の方法を用い得る。
【００６２】
一実施形態において、ｓｓがｍｓより小さい場合、各ソース・エレメントは、（ｓｔｖｅｘに関して説明したように）ｓ／ｕフィールドにより指示されるように、適切に拡張されて、メモリ・デスティナーション・エレメントを生成する。また、一実施形態において、ｓｓがｍｓより大きい場合、各ソース・エレメントは、（ｓｔｖｅｘ及びｓｔｍｖｅｘに関して説明したように）ｈ／ｌフィールドにより指示されるように、適切に切り捨てをされて、メモリ・デスティナーション・エレメントを生成する。代替として、丸めを用いて、メモリ・デスティナーション・エレメントを生成し得る。
【００６３】
上記で説明した様々の異なるロード命令の例が、図１２から図１６を参照して説明されるであろう。図１２は、メモリの一部分１００を示し、そのメモリの一部分１００は、例えば、図１のメモリ１２の全て又は一部分に対応し得る。メモリ部分１００は、所与の実施形態の実際の形態が異なり得るにも拘わらず、説明の容易さのため、１２８ビット幅メモリとして示される。例えば、メモリ部分１００は、位置０ｘ１２−０ｘ１６に格納される第１行（ハーフワードＡ、Ｂ及びＣに対応する）と、位置０ｘ２２−０ｘ２６に格納される第２行（ハーフワードＤ、Ｅ及びＦに対応する）と、位置０ｘ３２−０ｘ３６に格納される第３行（ハーフワードＧ、Ｈ及びＩに対応する）とを有するマトリックス１０２を含む。メモリ部分１００は、位置０ｘ５４−０ｘ５８に格納される第１行（ハーフワードＫ、Ｌ及びＭに対応する）と、位置０ｘ６４−０ｘ６８に格納される第２行（ハーフワードＮ、Ｏ及びＰに対応する）と、位置０ｘ７４−０ｘ７８に格納される第３行（ハーフワードＱ、Ｒ及びＳに対応する）とを有するマトリックス１０６を含む。メモリ部分１００は、位置０ｘ８Ａ−０ｘ８Ｅに格納される第１行（ハーフワードａａ、ｂｂ及びｃｃに対応する）と、位置０ｘ９Ａ−０ｘ９Ｅに格納される第２行（ハーフワードｄｄ、ｅｅ及びｆｆに対応する）と、位置０ｘＡＡ−０ｘＡＥに格納される第３行（ハーフワードｇｇ、ｈｈ及びｉｉに対応する）とを有するマトリックス１０８を含む。メモリ部分１００は、位置０ｘ４６−０ｘ４Ｅに格納されるベクトル１０４（ハーフワードｐｐ、ｑｑ、ｒｒ及びｔｔに対応する）を含む。メモリ部分１００はまた、位置０ｘＡ２、０ｘＡ３、０ｘＡ４及び０ｘＡ５のそれぞれに格納されるバイトサイズ・エレメントＴ、Ｕ、Ｖ及びＷを含む。
【００６４】
代替実施形態において、メモリ部分１００は、様々にアドレスされ得ることに注目されたい。また、メモリ部分１００は、任意のサイズでよく、そしていずれのタイプの情報を
保持し得て、そしてデータ処理システム内の任意の場所に配置され得る。
【００６５】
上記で説明したロード命令及び格納命令を用いて、例えば、マトリックスが図１２のマトリックス１０２及び１０６として格納されるとき、マトリックス演算を実行し得る。即ち、マトリックス１０２及び１０６のそれぞれが、３×３の２次元アレイとして格納されることに注目されたい。また、一実施形態において、マトリックス演算の結果がまた、同じフォーマットで、マトリックス１０８のような３×３の２次元アレイとして格納され得る。従って、次の擬似コードを用いて、マトリックス１０２及びマトリックス１０６の第１行の追加を実行して、その結果生じる第１行マトリックス１０８を得ることができる。
【００６６】
【表１】
2010211832.tif 000003
【００６７】
【表２】
2010211832.tif 000004
【００６８】
この例において、Ｒ７が、マトリックス１０２の第１行の開始アドレス（０ｘ１２）を格納し、そしてＲ８が、ｒＢとして用いられて、図２及び図３に関して上記で説明したｃｎｔパラメータ及びｓｔｒｉｄｅパラメータを格納することに注目されたい。同様に、Ｒ９は、マトリックス１０６の第１行の開始アドレス（０ｘ５４）格納し、そしてｒ１０が、ｒＢとして用いられて、ｃｎｔパラメータ及びｓｔｒｉｄｅのパラメータを格納する。Ｒ１１を用いて、Ｒ２の第１のエレメントが格納されることになる位置（０ｘ８Ａ）を格納し、そしてＲ１２を用いて、ｃｎｔパラメータ及びｓｔｒｉｄｅパラメータを格納する。
【００６９】
図１３は、上記の擬似コードの実行後に、レジスタ・ファイル（例えば、図１のスカラ・レジスタ・ファイル３４のようなもの）を示す。マトリックス１０２のＡ、Ｂ及びＣが、第１のｌｖｅｘ命令の実行でもってＲ０にロードされ、Ｒ０の最後のフィールドが、所定の値（例えば、この実施形態においてはゼロ）で満たされる。同様に、マトリックス１０６のＫ、Ｌ及びＭは、第２のｌｖｅｘ命令の実行でもってＲ１にロードされる。従って、マトリックスの第１行のそれぞれが、ｃｎｔ及びｓｔｒｉｄｅを指定することを可能にするまさに単一の命令でもって容易にロードされ得る。ａｄｄ．ｈ命令は、Ｒ０及びＲ１の中の４つの独立のハーフワード・エレメントを加算し、そしてその結果生じる４つのハーフワード・エレメントをＲ２に置く。ｌｖｅｘ命令がＲ０及びＲ１の最後の未使用フィールドをゼロで満たすこと（ｃｎｔ＊ｄｓが６４ビットより小さいので、Ｒ０及びＲ１の幅）を可能にしたので、２つのレジスタの加算（ａｄｄｉｔｉｏｎ）は、Ｒ２の不所望のフィールドの中にゼロをもたらしたことに注目されたい。このようにして、Ｒ２の不所望のフィールドに未知の値を有する（又は、未知の値の追加に起因して起こる不所望の例外的条件を有する）よりむしろ、所定の値（この例ではゼロ）であることが既知である。次いで、Ｒ２の最初の３個のフィールドが、ａａ＝Ａ＋Ｋ、ｂｂ＝Ｂ＋Ｌ、及びｃｃ＝Ｃ＋Ｈとなるようにｓｔｖｅｘ命令を用いて、メモリに格納される。
【００７０】
次いで、マトリックス１０２及び１０６の加算が、次の擬似コードにより完了されることができる。
【００７１】
【表３】
2010211832.tif 000005
【００７２】
【表４】
2010211832.tif 000006
【００７３】
最初の３つの加算命令は、Ｒ７，Ｒ９及びＲ１１の値を増分し、それによりそれらは、それぞれ、マトリックス１０２，１０６及び１０８のそれぞれの第２行の最初のエレメントを指し示す。図１４は、上記コードの実行後の図１３のレジスタ・ファイルを示す。最初の２つのｌｖｅｘ命令の後に、Ｄ，Ｅ及びＦが、Ｒ０にロードされ、そしてＮ、Ｏ及びＰが、Ｒ１にロードされる。ａｄｄ．ｈ命令は、Ｒ０及びＲ１の中の４つの独立のハーフワード・エレメントを加算し、そしてその４つの結果として生じたハーフワード・エレメントをＲ２に置く。従って、その結果は、ｓｔｖｅｘ命令により、ｄｄ＝Ｄ＋Ｎ、ｅｅ＝Ｅ＋Ｏ及びｆｆ＝Ｆ＋Ｐとなるように、マトリックス１０８の中のメモリに格納される。第５から第７までの加算命令が、再び、Ｒ７、Ｒ９及びＲ１１の値を増分し、それによりそれらは、それぞれ、マトリックス１０２、１０６及び１０８のそれぞれの第３行の最初のエレメントを指し示す。マトリックス１０２及び１０６の第３行をロードするためのｌｖｅｘ命令が、それらをＲ０及びＲ１よりむしろＲ３及びＲ４のそれぞれにロードすることに注目されたい。代替実施形態が、必要に応じて演算を実行するためレジスタのいずれをも用い得ることを理解すべきである。例えば、同じレジスタ（例えば、Ｒ０及びＲ１のようなもの）が、連続的にオーバライトされ得て、又は異なるレジスタ（例えば、Ｒ３及びＲ４のようなもの）が、用いられ得る。最後の格納命令が、ｇｇ＝Ｇ＋Ｑ、ｈｈ＝Ｈ＋Ｒ及びｉｉ＝Ｉ＋Ｓとなるように結果をマトリックス１０８に格納する。
【００７４】
代替実施形態において、異なるコード及び命令を用いて、マトリックス１０２及び１０６を加算し、そしてその結果をマトリックス１０８に格納することに注目されたい。例えば、上記の擬似コードは、マトリックスの各行に対する２つのｌｖｅｘ命令及び１つのｓｔｖｅｘ命令がループ本体にあるように１つのループで書くことができ、その場合当該ループは、３回、即ち、各行に対して１回実行されることに注目されたい。代替として、異なるベクトル・ロード及び格納命令を用いて、マトリックス１０２又はマトリックス１０６の全てをレジスタ・ファイルに同時に入れることができるであろう。これは、例えば、ｌｍｖｅｘ命令又はｌｍｖｅｘ２命令を用いて、達成されることができるであろう。例え
ば、図１５及び図１６は、マトリックス１０２をレジスタＲ０、Ｒ１及びＲ２にロードする２つの例を示す。
【００７５】
図１５は、例えば、ｌｍｖｅｘ命令を用いて、マトリックス１０２をロードした後のレジスタ・ファイルを示す。次のｌｍｖｅｘ命令において、Ｒ７が、マトリックス１０２の開始点を指し示し（Ｒ７が０ｘ１２を格納する。）、そしてＲ８が、９のｃｎｔ値、１のｓｔｒｉｄｅ値、６のｓｋｉｐ値、及び３のｓｋｉｐ＿ｃｎｔ値を格納するｒＢに対応することが想定される。従って、次の命令が、用いられ得る。
【００７６】
【表５】
2010211832.tif 000007
【００７７】
【表６】
2010211832.tif 000008
【００７８】
従って、図１５に示されるように、エレメントＡ、Ｂ及びＣは、当該エレメントが「ｓｔｒｉｄｅ＊ｍｓ」又は１ハーフワード離れてロードされるのでメモリの中でそれぞれが連続して、Ｒ０にロードされる。従って、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが、ロードされた（即ち、３）ので、「ｓｔｒｉｄｅ＊ｍｓ」（即ち、１ハーフワード）離れているよりむしろ「ｓｋｉｐ＊ｍｓ」（即ち、６ハーフワード）離れて配置された次のエレメントＤは、Ｒ０の第４のエレメントとしてロードされる。次いで、エレメントＥ及びＦは、再び「ｓｋｉｐ＿ｃｎｔ」個のエレメントがロードされるまでＲ１、即ち、Ｒ０に続くレジスタにロードされ、従って、６ハーフワード離れて配置された次のエレメントＧに対して「ｓｋｉｐ」を要求する。これは、「ｃｎｔ」個のエレメントがロードされるまで継続する。従って、最後のエレメントＩが、Ｒ２の最初のフィールドにロードされる。Ｒ２の残りのフィールドが、所定の値（この例では、ゼロ）で満たされることに注目されたい。
【００７９】
図１６は、例えば、ｃｎｔ、ｒｃｎｔ、ｓｋｉｐ及びｓｋｉｐ＿ｃｎｔが指定されることができるｌｍｖｅｘ２命令を用いて、マトリックス１０２をロードした後のレジスタ・ファイルを示す。次のｌｍｖｅｘ命令において、Ｒ７が、マトリックス１０２の開始点を指し示し（Ｒ７が０ｘ１２を格納する）。、そしてＲ８が、９のｃｎｔ値、３のｒｃｎｔ値、１のｓｔｒｉｄｅ値及び６のｓｋｉｐ値を格納するｒＢに対応することが想定される。従って、次の命令が、用いられ得る。
【００８０】
【表７】
2010211832.tif 000009
【００８１】
従って、図１６に示されるように、エレメントＡ、Ｂ及びＣがＲ０にロードされ、それぞれのエレメントは、ｓｔｒｉｄｅが「ｓｔｒｉｄｅ＊ｍｓ」又は１ハーフワードであるので、メモリの中で連続である。この点で、「ｒｃｎｔ」個のエレメント（即ち、３）が
、Ｒ０にロードされ、従って、次のエレメントＤが、「ｓｋｉｐ＊ｍｓ」（即ち、６ハーフワード）だけ離れた位置からロードされる。更に、次のエレメントＤは、図１５の前の例においてｌｍｖｅｘ命令を用いて行われたように、Ｒ０の第４のエレメントとしてロードされず、しかし代わりに、Ｒ０が既に「ｒｃｎｔ」個のエレメントを有するので、Ｒ１（それは、Ｒ０に続くレジスタである。）の最初のエレメントとしてロードされる。エレメントＥ及びＦがまた、Ｒ１にロードされ、Ｒ１に対して３のｒｃｎｔを完了する。「ｒｃｎｔ」個のエレメントが、Ｒ１にロードされてしまい（、そして「ｃｎｔ」個のエレメント、即ち、９が、まだロードされてない）ので、次のエレメントＧは、ｓｋｉｐにより決定された位置、即ち、６ハーフワード離れた位置からＲ２の中にフェッチされる。また、エレメントＨ及びＩが、Ｒ２にロードされる。この点で、「ｃｎｔ」個のエレメントが、ロードされてしまう。また、Ｒ０、Ｒ１及びＲ２の未使用のフィールドのそれぞれが、所定の値（この例では、ゼロ）で満たされることに注目されたい。
【００８２】
代替実施形態においては、上記で説明したように、ｌｍｖｅｘ２命令はまた、ｓｋｉｐ＿ｃｎｔフィールドを指定することを可能にし得る。また、例えば、マトリックス１０２には、図１６に見られるように、上記のようにｌｍｖｅｘ２命令を用いて３のｓｋｉｐ＿ｃｎｔがてロードされる。この例（引き続き図１６、及び全ての同じパラメータ及びｓｋｉｐ＿ｃｎｔ＝３の加算を有する上記ｌｍｖｅｘ２命令を参照して）においては、エレメントＡ、Ｂ及びＣが、Ｒ０にロードされ、それぞれのエレメントは、それらが「ｓｔｒｉｄｅ＊ｍｓ」又は１ハーフワード離れて配置されるので、メモリの中で連続である。次いで、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが、ロードされた（即ち、３）ので、「ｓｔｒｉｄｅ＊ｍｓ」（即ち、１ハーフワード）離れてよりむしろ「ｓｋｉｐ＊ｍｓ」（即ち、６ハーフワード）離れて配置された次のエレメントＤが、ロードされる。また、「ｒｃｎｔ」個のエレメント（即ち、３）のみが、各レジスタにロードされることに注目されたい。従って、次のエレメントＤは、図１５の前の例においてｌｍｖｅｘ命令を用いて行われたように、Ｒ０の第４のエレメントとしてロードされず、しかし代わりに、Ｒ１（このＲ１はＲ０に続くレジスタである。）の第１のエレメントとしてロードされる。次いで、エレメントＥ及びＦがまた、Ｒ１にロードされる。「ｓｋｉｐ＿ｃｎｔ」個のエレメントが、再びロードされてしまい（、そして「ｃｎｔ」個のエレメント、即ち９が、まだロードされていない）ので、次のエレメントＧが、６ハーフワード離れて配置される。また、「ｒｃｎｔ」個のエレメントが、既にＲ１にロードされたので、次のエレメントＧが、Ｒ２にＨ及びＩと一緒にロードされる。この点で、「ｃｎｔ」個のエレメントが、ロードされたことになる。また、Ｒ０、Ｒ１及びＲ２の未使用のフィールドのそれぞれが、所定の値（この例ではゼロ）で満たされることに注目されたい。
【００８３】
従って、マトリックス１０２のようなマトリックスが、上記で説明したロード命令の様々な実施形態を用いて様々の異なる方法でメモリからレジスタへ容易に移動されることができることに注目されたい。また、「ｒｃｎｔ」個のパラメータの使用は、ベクトル・エレメントをメモリからロードするため従来のプログラミング方法を用いた場合に要求されたマスキング操作の数を低減することを可能にすることに注目されたい。
【００８４】
代替実施形態において、上記命令は、ここで説明したパラメータより多くのパラメータ、又はそれより少ないパラメータ、又は異なったパラメータを含み得る。例えば、異なる実施形態において、ｌｍｖｅｘ２命令は、ｓｋｉｐ＿ｃｎｔパラメータを考慮してもしなくてもよい。また、上記で与えられた例示の命令は、ｓ／ｕフィールドを「ｕ」に設定し、それにより、必要ならば、エレメントは、レジスタに格納されるとき、ゼロに拡張されることに注目されたい。一実施形態において、ｓ／ｕフィールドは、「ｓ」に設定され得て、又は省略され得る。例えば、一実施形態において、ｍｓ＝ｄｓの場合、ｓ／ｕフィールドは、省略、又は無視され得る。
【００８５】
図１６はまた、Ｔ、Ｕ及びＶをメモリ部分１００の位置０ｘＡ２，０ｘＡ３及び０ｘＡ４からＲ４へロードするロード命令の一例を説明する。例えば、次のｌｖｅｘ命令を用い得て、その場合、Ｒ１０が開始値０ｘＡ２を格納し、そしてＲ１１が３のｃｎｔ値及び１のｓｔｒｉｄｅ値を格納することが想定される。
【００８６】
【表８】
2010211832.tif 000010
【００８７】
メモリ・サイズ（ｍｂ）及びデスティナーション・サイズ（ｄｈ）が異なることに注目されたい。即ち、本明細書で説明される全ての命令において、メモリ・サイズ及びデスティナーション・サイズ（又は、格納命令の場合には、ソース・サイズ（発信元サイズ））のそれぞれは、それらが同じ又は異なってよいように独立であり得る。上記の例においては、メモリ・サイズは、メモリの中の各エレメントのサイズ（Ｔ、Ｕ及びＶ）がバイトであることを指示するｍｂに設定されることに注目されたい。しかしながら、デスティナーション・サイズは、Ｒ４におけるデスティナーション・サイズがハーフワードであることを指示するためｄｈに設定され、それは、バイトより大きい。従って、「ｃｎｔ」個のエレメント（３エレメント）が、Ｒ４にロードされ、そこにおいて、各エレメントＴ、Ｕ及びＶが、ハーフワードのデスティナーション・サイズを満たすため適切に拡張される。この例においては、それらは、「．ｕ」により指示されるようにゼロ拡張（ｚｅｒｏｅ  ｘｔｅｎｄ）される（即ち、符号なしで拡張される（ｕｎｓｉｇｎｅｄ  ｅｘｔｅｎｄ））。しかしながら、「．ｓ」を用いて、それぞれのエレメントを符号付き拡張（ｓｉｇｎ  ｅｘｔｅｎｄ）することができるであろう。また、「ｃｎｔ＊ｄｓ」が３ハーフワード（又は４６ビット）であり、従ってＲ４のサイズより小さいので、Ｒ４の残りの未使用部分は、所定の値（この例ではゼロ）で満たされることに注目されたい。
【００８８】
図１７は、メモリ部分１００のベクトル１０４が１のｓｔｒｉｄｅ及び２のｓｔｒｉｄｅをロードされる場合のレジスタ・ファイルの例を示す。一例においては、Ｒ７が、０ｘ４６を格納することによりｐｐ、即ちベクトル１０４の開始点を指し示し、そしてＲ１０が、５のｃｎｔ値、１のｓｔｒｉｄｅ値、及び５のｓｋｉｐ＿ｃｎｔ値を格納すると仮定する。ｓｋｉｐの値は、この例では、ｃｎｔ＝ｓｋｉｐ＿ｃｎｔであるので重要でない（即ち、メモリからの単一のベクトルが、更に「ｓｋｉｐ」を必要とすることなしにロードされている。）ことに注目されたい。従って、次の命令を用いて、ベクトル１０４をレジスタ・ファイルにロードし得る。
【００８９】
【表９】
2010211832.tif 000011
【００９０】
上記の例では、「ｃｎｔ」個のエレメント（５エレメント）は、レジスタ・ファイルにロードされ、それはＲ１で開始し、次いでＲ２を用いて継続する。ｓｔｒｉｄｅ＝１であり、そして後続のエレメントが、「ｓｔｒｉｄｅ」個のサイズｍｓの単位離れて配置されるので、ロードされるべきそのエレメントは、互いに１ハーフワード離れて配置される。従って、５連続のハーフワード（ｐｐ、ｑｑ、ｒｒ、ｓｓ及びｔｔ）が、レジスタＲ１及びＲ２にロードされる。また、Ｒ２の残りの未使用部分が、所定の値（この例ではゼロ）で満たされることに注目されたい。また、「．ｓ」が、ｓ／ｕフィールドのため代わりに用いられることができるであろうことに注目されたい。又は、代替として、ｓ／ｕフィールドが、存在しなくてもよい。
【００９１】
別の例においては、Ｒ７が、ｐｐを指し示し（０ｘ４６を格納し）、そしてＲ１０が、３のｃｎｔ値及び２のｓｔｒｉｄｅ値を格納すると仮定する。従って、次の命令を用いて、ベクトル１０４の１つおきのエレメントをレジスタ・ファイルにロードし得る。
【００９２】
【表１０】
2010211832.tif 000012
【００９３】
この例では、ｃｎｔ＊ｍｓ（３ハーフワード）が単一のレジスタ（図示の実施形態において６４ビット・レジスタ）に適合するので、ｌｖｅｘ命令を用い得る。このｌｖｅｘ命令を用いて、「ｃｎｔ」個のエレメント（３エレメント）が、Ｒ４にロードされ、そこにおいて、後続のエレメントが、「ｓｔｒｉｄｅ」個のサイズｍｓの単位離れて配置される。従って、この例では、後続のエレメントは、２ハーフワード（「ｓｔｒｉｄｅ＊ｍｓ」）離れて配置され、従って、各エレメントがロードされた後で、次のエレメントが、２ハーフワード離れてからフェッチされる。例えば、ｐｐは、０ｘ４６からフェッチされ、次いで、ｒｒが、０ｘ４Ａ（０ｘ４６＋０ｘ２）からフェッチされる。これは、３エレメントがロードされるまで継続する。また、Ｒ４の未使用部分が、所定の値（この例ではゼロ）で満たされることに注目されたい。
【００９４】
図１８は、４つの異なる時刻（時刻＝０、時刻＝１、時刻＝２及び時刻＝３）におけるメモリの部分２００を示し、それらは、例えば、図１のメモリ１２の全て又は一部分に対応し（、又はデータ処理システム内のどこにでも配置され得る）。図示の実施形態において、メモリ部分２００は、６４ビット幅メモリとして示されている。代替実施形態において、メモリ部分２００は、異なる幅を有する様々な異なる方法でフォーマット化され得る。メモリ部分２００は、エレメントＣ４、Ｃ３、Ｃ２、Ｃ１及びＣ０をメモリ位置０ｘ０８，０ｘ０Ａ，０ｘ０Ｃ，０ｘ０Ｅ及び０ｘ１０のそれぞれに格納する。エレメントｔ、ｕ及びｖが、０ｘ１２、０ｘ１４及び０ｘ１６のそれぞれに格納される。また、時刻＝０におけるメモリ部分２００は、Ｘ４、Ｘ３、Ｘ２、Ｘ１及びＸ０を０ｘ２０，０ｘ２２，０ｘ２４，０ｘ２６及び０ｘ２８のそれぞれに格納する。一実施形態において、これらの値のそれぞれは、特定のサンプリング速度でサンプリングされたディジタルにサンプリングされた信号の様々な時間サンプルを意味し得る。例えば、時刻＝０において、現在のサンプルが、Ｘ０より指示され、そして１時間遅延（即ち、１／サンプリング速度）前のサンプルが、Ｘ１により指示され、２時間遅延（即ち、２＊１／サンプリング速度）前のサンプルが、Ｘ２により指示される、等々である。
【００９５】
次に、時刻＝１において、現在のサンプルは、Ｘ１により指示され、そして１時間遅延（即ち、１／サンプリング速度）前のサンプルが、Ｘ０により指示され、２時間遅延（即ち、２＊１／サンプリング速度）前のサンプルが、Ｘ１により指示される、等々である。最も新しいサンプルが、図示の実施形態において時刻＝１でＸ４であった最も古い時刻サンプルをオーバライトすることに注目されたい。従って、時刻＝２において、現在のサンプルＸ２が、Ｘ３をオーバライトし、そして時刻＝３において、現在のサンプルＸ３が、Ｘ２をオーバライトする。従って、格納場所０ｘ２０、０ｘ２２、０ｘ２４、０ｘ２６、０ｘ２６及び０ｘ２８は、ディジタルにサンプリングされた信号の到来時間サンプルを連続的に格納するサーキュラー・バッファを実現し得る。代替実施形態において、サーキュラー・バッファは、異なる理由で又は応用のため実現され得る。
【００９６】
一実施形態において、変更されたｌｍｖｅｘロード命令を用いて、（図１９から図２２を参照して説明されるように、）サーキュラー・バッファの値が、例えば、フィルタリン
グ関数を実行する際におけるような計算のための希望された正しい順序にある要領で、当該サーキュラー・バッファの値をレジスタ・ファイルのレジスタ（複数）に正しく入れ得る。例えば、次の方程式は、フィルタリング関数に対応し、そこにおいて、Ｙ０、Ｙ１、Ｙ２及びＹ３は、時刻＝０、時刻＝１、時刻＝２及び時刻＝３のそれぞれにおける結果に対応する。
【００９７】
【数１】
2010211832.tif 000013
【００９８】
一実施形態において、変更されたｌｍｖｅｘ命令は、図２７に示されるように、多重ベクトル・エレメント・ロード１回スキップ命令（ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ）命令と呼ばれる。図２７のｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令は、ｓ／ｕフィールド、ｍｓフィールド、及びｄｓフィールドを含み、それは、ｌｍｖｅｘ命令に関して上記で説明したようにまさに動作する。ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令はまた、３オペランド：ｒＤ、ｒＡ及びｒＢを取る。ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅは、追加のパラメータｃｎｔ、ｓｔｒｉｄｅ、ｓｋｉｐ及びｓｋｉｐ＿ｃｎｔを用い、そこにおいて、それらは、ｒＢにより指示された１又は複数のレジスタに格納され、又は命令のサブ演算コードにより指定され得る。オペランド又は追加のパラメータの全てが、ｓｋｉｐ＿ｃｎｔの追加のパラメータを除いて、ｌｍｖｅｘ命令に関して上記で説明されたのと同じに動作する。上記で説明されたように、ｌｍｖｅｘ命令は、「ｓｋｉｐ＿ｃｎｔ」個のエレメントをフェッチし、次いで、「ｓｋｉｐ」パラメータを用いて、次のエレメントをフェッチする。この点で、ｓｋｉｐ＿ｃｎｔカウンタは、リセットされねばならず、それにより次の「ｓｋｉｐ＿ｃｎｔ」個のエレメントが、再びスキップする前にフェッチされることができる。これは、「ｃｎｔ」個のエレメントがロードされるまで継続する。ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令は、ｌｍｖｅｘ命令と似てなく、それは、「ｓｋｉｐ＿ｃｎｔ」個のエレメントがフェッチされた後にｓｋｉｐ＿ｃｎｔカウンタをリセットしない。従って、「ｓｋｉｐ＿ｃｎｔ」個のエレメントがフェッチされた後で、次のエレメントは、「ｓｋｉｐ」個のサイズｍｓの単位離れて配置される。しかしながら、この点以降、ｓｋｉｐ＿ｃｎｔカウンタは、「ｃｎｔ」個のエレメントがフェッチされるまで連続的に減分される（即ち、リセットされない）。
【００９９】
例えば、図１９から図２２に関して説明されるように、擬似コードの次のセクションを用いて、上記の方程式１、２、３及び４のフィルタ結果Ｙ０、Ｙ１、Ｙ２及びＹ３を計算し得る。
【０１００】
【表１１】
2010211832.tif 000014
【０１０１】
【表１２】
2010211832.tif 000015
【０１０２】
上記コード・セクションの中のラベル「ｌｏｏｐ：」により指示されたループに入る前に、Ｒ１２が、５のｃｎｔ値及び１のｓｔｒｉｄｅ値を用いて初期化され、そしてＲ１３が、５のｃｎｔ値、１のｓｔｒｉｄｅ値、５のｓｋｉｐ＿ｃｎｔ値、及び−４のｓｋｉｐ値を用いて初期化される。従って、レジスタＲ１２及びＲ１３は、後続のベクトル・ロード命令の中で「ｒＢ」オペランドとして用いられることができる。Ｒ１が、初期化されて、一定のベクトルの開始（０ｘ０８でのＣ４）を指し示す。Ｒ２が、初期化されて、サーキュラー・バッファの開始点を指し示し、それは、図１８に示されるように、時刻＝０で０ｘ２０である。従って、ループの最初の繰り返しは、（図１９に示されるように）時刻＝０に対応するレジスタ・ファイルにロードされる値に対応する。
【０１０３】
第１のｌｍｖｅｘ命令は、Ｒ１２に格納されたパラメータ（それらは前に初期化されている。）と、図４及び図５に関して上記で説明したような制御フィールドとに従って、（図１９においてＲ６及びＲ７を用いて示されるように、）Ｃ４−Ｃ１をＲ６に且つＣ０をＲ７にロードする。次いで、ループを通る第１の繰り返しは、ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令で始まる。時刻＝０に対応する第１の繰り返しにおいて、ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令は、Ｒ１２に格納されたパラメータと、制御フィールド（それらは前に初期化されている。）とに従って、図１９におけるＲ８及びＲ９でもって示されるようにＸ−４−Ｘ−１をＲ８に且つＸ０をＲ９にロードする。この第１の繰り返しにおいてｓｋｉｐ＿ｃｎｔ＝ｃｎｔであるので、ｓｋｉｐ値は、「構わない（ｄｏｎ‘ｔ  ｃａｒｅ）」として処理されることができることに注目されたい。それは、ｓｋｉｐ値が必要とされないからである。即ち、ｓｋｉｐ＿ｃｎｔカウンタが期間を過ぎたとき、ｃｎｔカウンタも期間が過ぎ、従って、上記命令は、「スキップすること（ｓｋｉｐｐｉｎｇ）」なしに
完了する。
【０１０４】
第１のベクトル乗算−累算命令（ｖｅｃｔｏｒ  ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ  ｉｎｓｔｒｕｃｔｉｏｎ）（ｖｍａｃ．ｈ）は、レジスタＲ６及びＲ８のハーフワード・エレメントについてベクトル乗算−累算演算を行い、そしてその結果をＲ１０に格納する。従って、Ｒ１０が、ここで、図１９におけるＲ１０でもって示されるように、Ｃ４＊Ｘ−４＋Ｃ３＊Ｘ−３＋Ｃ２＊Ｘ−２＋Ｃ１＊Ｘ−１を格納する。第２のベクトル乗算−累算命令は、レジスタＲ７及びＲ９のハーフワード・エレメントについてベクトル乗算−累算演算を行い、そしてその結果をＲ１１に格納する。従って、Ｒ１１は、ここで、Ｃ０＊Ｘ０に単純に等しＣ０＊Ｘ０＋０＊０＋０＊０＋０＊０を格納する。この現在の例においては、ベクトル・ロード命令（ｌｍｖｅｘ及びｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ）のそれぞれを用いて、（Ｒ７及びＲ９のような）レジスタの残りの不充填の部分が、ゼロとされ、従って、正しい結果をＲ１１にもたらすことに注目されたい。さもなければ、Ｒ１１は、例えば、ｔ、ｕ及びｖの値が代わりにメモリ２００からロードされた場合、正しく無い値であり得る。
【０１０５】
次いで、第１の加算命令は、Ｒ１０及びＲ１１の値同士を加算し、そしてその結果をＲ１０に格納する（この動作は、図１９に示されていない。）。次いで、上記の方程式１のＹ０に対応するこの値は、必要に応じて、例えば、メモリ２００に戻るようにして、格納されることができる。第２の加算命令は、サーキュラー・バッファの開始ポインタを次のハーフワードまで進め、それにより、時刻＝１に関する開始ポインタは、ここで、図１８及び図２０に示されるように、アドレス０ｘ２２でのＸ−３を指し示す。次に、Ｒ１３は、ｓｋｉｐ＿ｃｎｔ＝ｓｋｉｐ＿ｃｎｔ−１であるように変更される。従って、上記のコード・セグメントの第１の繰り返し後に、ｓｋｉｐ＿ｃｎｔは、ここで４に等しい。ループ・カウンタ、又は追加の命令（上記コード・セグメントに含まれない。）を用いて、ループを出るべきかどうかを指示し得る。ループを出ない場合、コードは、「ループ」に戻るよう分岐し、そして次の繰り返しが、始まる。
【０１０６】
値Ｃ４−Ｃ０は、（図２０においてＲ６及びＲ７でもって示されるように）Ｒ６及びＲ７に残っている。ループを介した第２の繰り返しは、ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令で始まる。時刻＝１に対応する第２の繰り返しにおいて、ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令は、Ｒ１２に格納されたパラメータと、図２０においてＲ８及びＲ９でもって示されるような制御フィールドとに従って、Ｘ−３−Ｘ０をＲ８に且つＸ１をＲ９にロードする。この繰り返しにおいて、ｓｋｉｐ＿ｃｎｔが４であり、そしてｒＡがロードされるべき最初のエレメントとしてＸ３を指し示すので、４個のエレメントＸ３−Ｘ０がロードされる。この点で、「ｓｋｉｐ＿ｃｎｔ」個（４個）のエレメントがロードされ、そして「ｃｎｔ」個（５個）エレメントがまだロードされていないので、次のエレメントは、「ｓｋｉｐ」個のサイズｍｓの単位（ハーフワード）離れた位置からロードされる。従って、この例における−４のｓｋｉｐは、エレメントＸ１をロードすることを可能にする。それは、０ｘ２８−４＊２＝０ｘ２０だからである。（メモリ２００がハーフワード・アドレス指定可能であり、従って「ｓｋｉｐ」個のサイズｍｓの単位離れていることは、−４ハーフワード離れていることを指示することに注目されたい。）上記で説明したように、時刻＝１においてメモリ２００の中の最も最近のエレメントが、０ｘ２０、即ち、前の最も古い時間サンプルの位置に格納されることに注目されたい。従って、ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令は、最も古い時間サンプルから最も新しい時間サンプルまでのメモリ位置０ｘ２０−０ｘ２８からＹ１を計算するため必要とされる５個のエレメントをＲ８及びＲ９に正しくロードする。
【０１０７】
第１のベクトル乗算−累算命令（ｖｍａｃ．ｈ）は、レジスタＲ６及びＲ８のハーフワード・エレメントについてベクトル乗算−累算演算を行い、そしてその結果をＲ１０に格
納する。従って、Ｒ１０は、ここで、図２０においてＲ１０でもって示されるように、Ｃ４＊Ｘ−３＋Ｃ３＊Ｘ−２＋Ｃ２＊Ｘ−１＋Ｃ１＊Ｘ０を格納する。第２のベクトル乗算−累算命令は、レジスタＲ７及びＲ９のハーフワードについてベクトル乗算−累算演算を行い、そしてその結果をＲ１１に格納する。従って、Ｒ１１は、ここで、Ｃ０＊Ｘ１に単純に等しいＣ０＊Ｘ１＋０＊０＋０＊０＋０＊０を格納する。この現在の例では、ベクトル・ロード命令（ｌｍｖｅｘ及びｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ）のそれぞれを用いて、レジスタ（例えば、Ｒ７及びＲ９のようなもの）の残りの充填されていない部分は、ゼロにされ、従って、正しい結果をＲ１１にもたらす。さもなければ、Ｒ１１は、例えば、ａ、ｂ又はｃ（又は、ｔ、ｕ又はｖ）の値が、代わりにメモリ２００からロードされる。
【０１０８】
次いで、第１の加算命令が、Ｒ１０及びＲ１１の値同士を加算し、そしてその結果をＲ１０に格納する（この動作は、図２０に示されていない。）。次いで、上記方程式２のＹ１に対応するこの値は、必要に応じて、例えばメモリ２００に戻すように、格納される。第２の加算命令は、サーキュラー・バッファの開始ポインタを次のハーフワードまで進め、それにより、時刻＝２に関する開始ポインタが、ここで、図１８及び図２１に示されるように、アドレス０ｘ２４でのＸ−２を指し示す。次に、Ｒ１３は、ｓｋｉｐ＿ｃｎｔ＝ｓｋｉｐ＿ｃｎｔ−１であるように変更される。従って、上記のコード・セグメントの第２の繰り返し後に、ｓｋｉｐ＿ｃｎｔは、ここで、３に等しい。ループ・カウンタ又は追加の命令（上記のコード・セグメントには含まれない）を用いて、ループを出るべきかどうかを指示し得る。ループを出ない場合、コードは、「ループ」に戻るよう分岐し、そして次の繰り返しが、始まり得る。
【０１０９】
第３の繰り返しは、第１及び第２の繰り返しと似た動作する。時刻＝２に対応する第３の繰り返しについては、ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令は、図２１に示されるように、Ｘ−２、Ｘ−１、Ｘ０、Ｘ１及びＸ２をレジスタＲ８及びＲ９にロードする。従って、ひとたびエレメントＸ−２、Ｘ−１及びＸ０が（０ｘ２４で開始して）ロードされると、「ｓｋｉｐ＿ｃｎｔ」個のエレメントが、ロードされてしまい、そしてｓｋｉｐを用いて、Ｘ１及びＸ２をロードする。後続のベクトル乗算−累算命令は、Ｃ４＊Ｘ−２＋Ｃ３＊Ｘ−１＋Ｃ２＊Ｘ０＋Ｃ１＊Ｘ１がＲ１０に格納され、そしてＣ０＊Ｘ２がＲ１１に格納されることをもたらす。第１の加算命令は、Ｙ２に対応する結果をＲ１０に格納し、そこにおいて、次に、Ｙ２が、希望される場合メモリに格納されることができる。次いで、第２の加算命令は、図２２に示されるように、ポインタを開始位置０ｘ２６まで進める。また、Ｒ１３は、ｓｋｉｐ＿ｃｎｔ＝ｓｋｉｐ＿ｃｎｔ−１であるように変更される。従って、上記のコード・セグメントの第３の繰り返し後に、ｓｋｉｐ＿ｃｎｔは、ここで、２に等しい。ループ・カウンタ又は追加の命令（上記コード・セグメントに含まれない）を用いて、ループを出るべきかどうかを指示し得る。ループを出ない場合、コードは、「ループ」に戻るよう分岐し、そして次の繰り返しが始まる。
【０１１０】
図４及び図５に関して上記で説明したｌｍｖｅｘ命令を用いて、ｓｋｉｐ＿ｃｎｔの経過を追う機構（例えば、カウンタ）が、リセットされ、それにより、次の「ｓｋｉｐ＿ｃｎｔ」個のエレメントがロードされ（、そして「ｓｋｉｐ＿ｃｎｔ」個のエレメントがまだロードされていないと仮定する）とき、次のエレメントが、ｓｋｉｐ＿＊ｍｓ単位離れてからロードされる。しかしながら、この現在の例では、ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令は、「ｓｋｉｐ＿ｃｎｔ」個のエレメントがロードされるときｓｋｉｐ＿ｃｎｔの経過を追う機構がリセットされないように用いられている。このように、ｓｋｉｐは、フルの「ｃｎｔ」個のエレメントをロードする前に再び用いられないであろう。これは、例えば、第４の繰り返し（時刻＝３に対応する。）を用いて説明されるように、全てのエレメントを後続の繰り返しにおいて正しくロードすることを可能にする。
【０１１１】
第４の繰り返しは、前の繰り返しと似た動作する。時刻＝３に対応する第４の繰り返し
については、ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令が、図２２に示されるように、Ｘ−１、Ｘ０、Ｘ１、Ｘ２及びＸ３をレジスタＲ８及びＲ９にロードする。この繰り返しでは、ロードされる第１のエレメントは、（時刻＝３に関して図１８に示されるように）位置０ｘ２６からロードされることに注目されたい。Ｘ−１及びＸ０をロードした後で、「ｓｋｉｐ＿ｃｎｔ」個（これは今は２に等しい。）のエレメントが、ロードされてしまい、従って、ｓｋｉｐを用いて、ポインタを位置０ｘ２０へ戻るようラップされる（ｗｒａｐ）。それは、ｃｎｔ個（５個）のエレメントが、まだロードされていないからである。また、ｓｋｉｐ＿ｃｎｔ機構が、リセットされないことに注目されたい。このように、次の「ｓｋｉｐ＿ｃｎｔ」個（２個）のエレメントがロードされた後でさえ、スキップは、実行されない。スキップが、次の「ｓｋｉｐ＿ｃｎｔ」個のエレメントの後でこの繰り返しに関して実行された場合、エレメントＸ１及びＸ２のみが、スキップの前にフェッチされ、従って、エレメントＸ３を外してしまうであろう。従って、より前の繰り返しにおいて、ｓｋｉｐ＿ｃｎｔが最初のスキップの後でリセットされたかどうかは重要で無かったかも知れないにも拘わらず、この繰り返しのような幾つかの繰り返しにおいて、それは、正しいエレメントがフェッチされたか否かを決定し得る。従って、ｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令を用いて、例えば、フィルタ応用に対してのように、サーキュラー・バッファを正しく実現し得る仕方が認められることができる。また、上記コード・セグメントが様々な異なる方法で書き込まれることができたであろうことに注目されたい。例えば、ループは、ループとして書き込まれるよりむしろロールアウトされ得ることに注目されたい。この例では、ｌｍｖｅｘ命令は、時刻＝０、１及び２に対して用いられ、そしてｌｍｖｅｘ＿ｓｋｉｐ＿ｏｎｃｅ命令は、時刻＝３及び４に対してのみ用いられ得る。
【０１１２】
図２２に見られるように、ひとたびエレメントＸ−１、Ｘ０、Ｘ１、Ｘ２及びＸ３がロードされると、後続のベクトル乗算−累算命令は、Ｃ４＊Ｘ−１＋Ｃ３＊Ｘ０＋Ｃ２＊Ｘ１＋Ｃ１＊Ｘ２が、Ｒ１０に格納され、そしてＣ０＊Ｘ３が、Ｒ１１に格納される。第１の加算命令は、Ｙ３に対応する結果をＲ１０に格納し、そこにおいて、次いで、Ｙ３が、希望される場合、メモリに格納されることができる。この点で、フローは、前の繰り返しの場合に説明したように継続する。一実施形態において、Ｒ１２がｓｋｉｐ＿ｃｎｔが０である点へ変更された後で、ループを出て、それにより、ｓｋｉｐ＿ｃｎｔが、例えば、５へ戻るようリセットされ、そして全体のプロセスが、繰り返される。
【０１１３】
従って、ベクトル・ロード命令は、ｓｋｉｐ、ｓｋｉｐ＿ｃｎｔ、ｓｔｒｉｄｅ及びｃｎｔと一緒に用いて、サーキュラー・バッファを実現することができる。一実施形態において、多重ベクトル・エレメントのサーキュラー・バッファ・ロード（ｃｉｒｃｕｌａｒ
ｂｕｆｆｅｒ  ｌｏａｄ  ｍｕｌｔｉｐｌｅ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｌｍｖｅｘ＿ｃｂ）命令が、図２８に示されるように用いられ得る。この繰り返しは、ｒＢに格納された追加のパラメータがｂｕｆｆｅｒ＿ｓｉｚｅ及びオフセット（ｏｆｆｓｅｔ）であることを除いて、図４及び図５を参照して上記で説明したｌｍｖｅｘ命令に類似している。（ｌｍｖｅｘ命令の場合のように、代替実施形態において、追加のパラメータは、演算コード又はサブ演算コードの一部として含められ得る。）図２９は、追加のパラメータを用いて、サーキュラー・バッファを定義し得る仕方を示す。例えば、上記で説明したロード命令の場合のように、ｒＡは、図２９に示されるように、サーキュラー・バッファをメモリに格納するメモリ位置の開始を指示する。バッファ・サイズ（ｂｕｆｆｅｒ＿ｓｉｚｅ）が、「（バッファ・エレメントの合計数）＊ｍｓ」を指示し、そしてオフセットが、ロードされるべき最初のエレメントがサーキュラー・バッファの中のどこであるかを定義する。また、図示されていないにも拘わらず、多重ベクトル・エレメントのサーキュラー・バッファ格納（ｃｉｒｃｕｌａｒ  ｂｕｆｆｅｒ  ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ）（ｓｔｍｖｅｘ＿ｃｂ）命令がまた、ｌｍｖｅｘ＿ｃｂの格納相手方として用いられ得ることに注目されたい。ｌｍｖｅｘ＿ｃｂ命令及びｓｔｍｖｅｘ＿ｃｂ命令の両方に対して、一部の実施形態においては、「ｏｆｆｓｅｔ」
により表される現在の開始値が、サーキュラー・バッファを通る各パス後に、即ち、「ｃｎｔ」個のエレメントがｌｍｖｅｘ＿ｃｂ命令又はｓｔｍｖｅｘ＿ｃｂ命令の実行の一部として処理された後で、所定の個数のエレメントだけ自動的に増分又は減分される。
【０１１４】
図３０は、追加のパラメータがｃｎｔ、ｓｋｉｐ及びｓｋｉｐ＿ｃｎｔよりむしろ（図２９に関して上記で説明したように）ｂｕｆｆｅｒ＿ｓｉｚｅ（バッファ・サイズ）及びｏｆｆｓｅｔ（オフセット）を含むことを除いて、ｌｓｔｒｍｖｅｘ命令に似た動作をするエレメントのストリームのサーキュラー・バッファ・ロード命令（ｃｉｒｃｕｌａｒ  ｂｕｆｆｅｒ  ｌｏａｄ  ｓｔｒｅａｍ  ｏｆ  ｅｌｅｍｅｎｔｓ）（ｌｓｔｍｖｅｘ＿ｃｂ）命令を示す。まさに上記のｌｓｔｒｍｖｅｘ命令のように、ｌｍｖｅｘ＿ｃｂ命令は、ベクトル・エレメントのストリームをメモリから開始し、そこにおいて、エレメントは、例えば、いつｒＤが後続の命令の特定のソース・オペランドとして用いられかに応じてデキューされ得る。従って、アドレッシング・モードに関する以外は、ｌｓｔｒｍｖｅｘに関する上記の同じ説明が、ここで、ｌｓｔｍｖｅｘ＿ｃｂに対して適用される。また、図示されていないにも拘わらず、エレメントのベクトル・ストリームのサーキュラー・バッファ格納（ｃｉｒｃｕｌａｒ  ｂｕｆｆｅｒ  ｓｔｏｒｅ  ｖｅｃｔｏｒ  ｓｔｒｅａｍ  ｏｆ  ｅｌｅｍｅｎｔｓ）（ｓｔｓｔｒｍｖｅｘ＿ｃｂ）命令がまた、ｌｓｔｍｖｅｘ＿ｃｂの格納相手方として用いられ得ることに注目されたい。ｌｓｔｍｖｅｘ＿ｃｂ命令及びｓｔｓｔｒｍｖｅｘ＿ｃｂ命令の両方に対して、一部の実施形態においては、「ｏｆｆｓｅｔ」により表される現在の開始値が、サーキュラー・バッファを通る各パス後に、所定数のエレメントだけ自動的に増分される。
【０１１５】
ｌｍｖｅｘ＿ｃｂ命令、ｓｔｍｖｅｘ＿ｃｂ命令、ｌｓｔｍｖｅｘ＿ｃｂ命令、及びｓｔｓｔｒｍｖｅｘ＿ｃｂ命令に対するオプションの修飾子は、ｌｍｖｅｘ命令、ｌｍｖｅｘ２命令、ｓｔｍｖｅｘ命令、ｓｔｍｖｅｘ２命令、ｌｓｔｍｖｅｘ命令、及びｓｔｓｔｒｍｖｅｘ命令に関して前に説明したように動作するｒｃｎｔ及びｓｔｒｉｄｅ（図２９及び図３０に図示せず）を含む。これは、レジスタｒＤのそれぞれのインスタンスにロードされる、又はソース・レジスタｒＳのそれぞれから格納されるサーキュラー・バッファ・エレメントの数に対する制御、並びに、サーキュラー・バッファを介したアクセスのストライディング（ｓｔｒｉｄｉｎｇ）の制御を可能にする。例えば、ストライディングを用いて、フラクショナル・レート・フィルタリング操作（ｆｒａｃｔｉｏｎａｌ  ｒａｔｅ  ｆｉｌｔｅｒｉｎｇ  ｏｐｅｒａｔｉｏｎｓ）又はデシメーティング・フィルタ（ｄｅｃｉｍａｔｉｎｇ  ｆｉｌｔｅｒ）を実現し得る。
【０１１６】
図２３から図２６は、ｌｓｔｒｍｖｅｘ命令（図７に関して上記で説明した）を用いて、例えば、マトリックス乗算を実行し得る仕方の一例を示す。この例に関して、図１２のメモリ部分１００、及びマトリックス１０２、１０６及び１０８が、用いられるであろう。図２３から図２６は、マトリックス乗算中の様々な時点における、例えば、図１のスカラ・レジスタ・ファイル３４のようなレジスタ・ファイルの内容を示す。
【０１１７】
この現在の例において、マトリックス１０２は、マトリックス１０６により乗算され、そしてその結果は、マトリックス１０８に対応する。例えば、マトリックス乗算を実行する際に、次の方程式が、その結果生じるマトリックス１０８の最初の２列に対して用いられる。
【０１１８】
【数２】
2010211832.tif 000016
【０１１９】
上記の方程式において、ａａ、ｄｄ及びｇｇを得る際に、エレメントをマトリックス１０２からデキューすることが望ましく（それは、Ａ、Ｂ、Ｃを用いて、ａａを取得し、Ｄ、Ｅ、Ｆを用いて、ｄｄを取得し、次いで、Ｇ、Ｈ、Ｉを用いて、ｇｇを取得するからである。）、一方マトリックス１０６をデキューすることは望ましくない（それは、Ｋ、Ｎ、Ｑがａａ、ｄｄ及びｇｇのそれぞれを取得するため必要とされるからである。）ことに注目されたい。従って、次の擬似コードは、例えば、ｌｓｔｒｍｖｅｘ命令のような命令を用いて、その結果のマトリックス１０８を取得する仕方の一例を与える。次の擬似コード例においては、ｒＤが命令の最初のソース（ソース１）（例えば、命令デスティネーション、ソース１、ソース２）として現れるときにのみデキューすることが実行されることに注目されたい。
【０１２０】
【表１３】
2010211832.tif 000017
【０１２１】
【表１４】
2010211832.tif 000018
【０１２２】
上記擬似コードを用いて、上記方程式５−８に記載されるように、ａａ、ｄｄ、ｇｇ、ｂｂ、ｅｅ、及びｈｈを取得することができる。この例において用いられているように、全ての値が、符号の付されてないハーフワードであると仮定される。最初に、Ｒ６が初期化されて、９のｃｎｔ、３のｒｃｎｔ、１のｓｔｒｉｄｅ、６のｓｋｉｐ、及び３のｓｋｉｐ＿ｃｎｔを格納し、そこにおいて、Ｒ６が、ｌｓｔｒｍｖｅｘ命令のためのｒＢレジスタとして用いられることができる。Ｒ４は、図２３に示されるように、初期化されて、０ｘ１２におけるエレメントＡ、即ち、図１２のマトリックス１０２の第１行の第１エレメントを指し示す。Ｒ７が、初期化されて、９のｃｎｔ、３のｒｃｎｔ、８のｓｔｒｉｄｅ、−１５のｓｋｉｐ、及び３のｓｋｉｐ＿ｃｎｔを格納し、そこにおいて、Ｒ７は、ｌｓｔｒｍｖｅｘ命令のためのｒＢレジスタとして用いられることができる。Ｒ５は、図２３に示されるように、初期化されて、０ｘ５４におけるエレメントＫ、即ち、マトリックス１０６の第１列の第１エレメントを指し示す。
【０１２３】
第１のｌｓｔｒｍｖｅｘ命令が、ベクトル・エレメントのストリームを開始し、それは、マトリックス１０２の各行を順にロードする。最初に、当該命令は、（図２３に示されるように）マトリックス１０２の第１行をＲ１にロードする。例えば、エレメントＡ、Ｂ及びＣは、それぞれ１ハーフワード離れており、（従って、１のｓｔｒｉｄｅが、必要とされる。）。３のｒｃｎｔは、３エレメントのみを一時にＲ１にロードし（、残りの部分がゼロ（ｚｅｒｏ  ｏｕｔ）にされ、）そして「ｓｋｉｐ＿ｃｎｔ」個のエレメント（この例では３個）が、ロードされ、次いで、８＊ｍｓ（８ハーフワード）のｓｋｉｐがＣの位置（０ｘ１６）に加算されて、次のエレメントＤのアドレスを位置０ｘ２２（０ｘ１６＋０ｘ０８）に取得する。Ｒ１が、以下で説明されるように、後続の命令のソース１として用いられるとき、それがデキューされ、それにより、（ｒｃｎｔ、ｓｔｒｉｄｅ、及びｓｋｉｐ＿ｃｎｔにより定義されるように）マトリックス１０２の次の列が、Ｒ１にロードされる。
【０１２４】
第２のｌｓｔｒｍｖｅｘ命令が、ベクトル・エレメントのストリームを開始し、それは、マトリックス１０６の各列をＲ２に順にロードする。最初に、当該命令が、（図２３に示されるように）マトリックス１０６の第１列をＲ２にロードする。例えば、エレメントＫ、Ｎ及びＱは、メモリの中で各８ハーフワード離れており（、従って、８のｓｔｒｉｄｅが、必要とされる。）。３のｒｃｎｔが、３個のエレメントのみを一時にＲ２にロードし（、残りの部分がゼロにされ、）そして「ｓｋｉｐ＿ｃｎｔ」個のエレメント（この場合、３個）が、ロードされ、次いで、−１５＊ｍｓ（−１５又は−０ｘ０Ｆハーフワード）のｓｋｉｐが、Ｑの位置（０ｘ７４）に加算されて、次のエレメントＬのアドレスを位置０ｘ５６（０ｘ７４−０ｘ０Ｆ＊２）に取得し、そこにおいて、Ｌは、マトリックス１０６の第２列の第１エレメントである。Ｒ２が、以下で説明されるように、後続の命令のソース１として用いられるとき、それがデキューされて、それにより、（ｒｃｎｔ、ｓｔｒｉｄｅ、及びｓｋｉｐ＿ｃｎｔにより定義される）マトリックス１０６の次の列が、Ｒ２にロードされる。
【０１２５】
第１の乗算−累算（ｖｍａｃ）命令は、図２４に示されるように、Ａ＊Ｋ＋Ｂ＊Ｎ＋Ｃ＊Ｑ（それはａａに等しい。）をＲ１０に格納する。Ｒ１がソース１として用いられるので、それは、第１のｌｓｔｒｍｖｅｘ命令（及びＲ６の中のパラメータ）に従ってデキューされ、それにより、マトリックス１０２の次の行（Ｄ、Ｅ及びＦ）が、Ｒ１に格納され、残りの部分が、ゼロにされる。この点で、Ｒ２がソース１として用いられないので、それは、デキューされず、従って、Ｋ、Ｎ及びＱが、Ｒ２に残り、そしてマトリックス１０６の次の列が、まだＲ２に格納されない。
【０１２６】
第２の乗算−累算（ｖｍａｃ）命令が、図２５に示されるように、Ｄ＊Ｋ＋Ｅ＊Ｎ＋Ｆ＊Ｑ（これはｄｄに等しい）をＲ１１に格納する。Ｒ１がソース１として用いられるので、それは、再び、第１のｌｓｔｒｍｖｅｘ命令（及びＲ６の中のパラメータ）に従ってデキューされ、それにより、マトリックス１０２の次の行（Ｇ、Ｈ及びＩ）が、Ｒ１に格納され、残りの部分がゼロにされる。この点で、第１のｌｓｔｒｍｖｅｘ命令に対応する９個のエレメントが、ロードされてしまい、従って、「ｃｎｔ」個のエレメントが、ロードされ、そしてこの命令に関するストリーミングが、終わる。Ｒ２がソース１として用いられないので、それは、デキューされず、従って、Ｋ、Ｎ及びＱが、Ｒ２の中に残り、そしてマトリックス１０６の次の列が、まだＲ２に格納されない。この点で、第２のｌｓｔｒｍｖｅｘ命令に対応する３個のエレメントのみが、ロードされてしまい、従って、「ｃｎｔ」個のエレメントが、この命令に対してロードされなかった。
【０１２７】
第３の乗算−累算（ｖｍａｃ）命令は、図２６に示されるように、Ｇ＊Ｋ＋Ｈ＊Ｎ＋Ｉ＊Ｑ（これはｇｇに等しい。）をＲ１１に格納する。Ｒ２が、ここでソース１として用いられるので、それは、続いて、第２のｌｓｔｒｍｖｅｘ命令（及びＲ７の中のパラメータ）に従ってデキューされ、それにより、マトリックス１０６の次の列（Ｌ、Ｑ及びＲ）が、Ｒ２に格納され、残りの部分が、ゼロにされる。この点で、マトリックス１０６の９個のエレメントのうちの６個が、ロードされてしまう。また、「ｃｎｔ」個のエレメント（マトリックス１０２に関して）は、既に、第１のｌｓｔｒｍｖｅｘ命令によりロードされてしまったので、Ｒ１は、変わらず、そして相変わらずＧ、Ｈ及びＩを保持する。（更に、たとえ「ｃｎｔ」個のエレメントが第１のｌｓｔｒｍｖｅｘ命令によりまだロードされていない場合でも、Ｒ１は、相変わらず変わらないであろう。それは、Ｒ１がソース２として用いられるので、それがデキューされないであろうからである。）。
【０１２８】
第３のｌｓｔｒｍｖｅｘ命令が、第１のｌｓｔｒｍｖｅｘ命令と同じであるベクトル・エレメントの新しいストリームを開始する。即ち、第３のｌｓｔｒｍｖｅｘ命令は、上記で説明したように、マトリックス１０２の各行をＲ１に順にロードする。それに続く３つのｖｍａｃ命令は、ｂｂ、ｅｅ及びｈｈの値をＲ１３、Ｒ１４及びＲ１５のそれぞれに格
納する。最初の３つのｖｍａｃ命令の場合のように、第１のｌｓｔｒｍｖｅｘ命令が、第３のｌｓｔｒｍｖｅｘ命令に続く第１の２つのｖｍａｃ命令を用いてデキューされ、そして第２のｌｓｔｒｍｖｅｘ命令が、第３のｌｓｔｒｍｖｅｘ命令に続く第３のｖｍａｃ命令を用いてデキューされることに注目されたい。この点で、マトリックス１０６の最終の列（Ｍ、Ｐ及びＳ）が、Ｒ２にロードされるであろうし（図示せず）、そして第２のｌｓｔｒｍｖｅｘ命令のためロードすることは、「ｃｎｔ」個のエレメント（例えば、９個のエレメント）がこの点でロードされてしまっているので停止するであろう。次いで、類似の命令を用いて、ｃｃ、ｆｆ及びｉｉを取得することができる。次いで、ａａ、ｄｄ、ｇｇ、ｂｂ、ｅｅ、ｈｈ、ｃｃ、ｆｆ、及びｉｉの値は、マトリックス１０８のメモリ位置０ｘ８Ａ、０ｘ９Ａ、０ｘＡＡ、０ｘ８Ｃ、０ｘ９Ｃ、０ｘＡＣ、０ｘ８Ｅ、０ｘ９Ｅ、及び０ｘＡＥのそれぞれに戻るよう格納することができる。本明細書で説明されるようなベクトル格納命令を用いて、これらの格納を実行することができる。
【０１２９】
上記の擬似コードの例において、エレメントが、後続の命令におけるｒＤの位置（即ち、ｒＤがソース１として用いられるか、又はソース２として用いられるか）に依存してデキューされることに注目されたい。しかしながら、代替実施形態において、他のファクタを用いて、エレメントをデキューすべきか否かを指示し得る。例えば、デキューすることを指示するため、異なる演算コードを用い得るか、又は、他のインディケータ、例えば、フラグのようなものを用い得る。また、一実施形態において、ｒＤは、それがソース１であるときだけではなくて、それがソースとして後続の命令において現れるときはいつでもデキューされる。更に別の実施形態においては、デキューすることは、ソース・オペランドと同じレジスタｒＤを用いた命令が処理ユニット１４により実行される全ての命令の適正なサブセットの中の１又はそれより多くの所定の命令であるときのみ実行される。即ち、この実施形態において、命令のサブセット又は命令機能のサブセットのみがデキューすることを実際にそれらの命令の一部として実行し、そして処理ユニット１４により実行される残りの命令は、ｒＤをソース・オペランドとして使用することに拘わらず、デキューすることを実行しない。デキューすることを実行するサブセットは、実行される全体命令の所定のサブセットであり得て、そしてデータ処理システム１０の必要性に基づいて決定され得る。更に別の実施形態において、デキューすることは、デキューする操作を制御するための命令内で制御フィールド値により決定され得る。
【０１３０】
デキューすることが、図２３から図２６について記載する前のパラグラフで説明されたが、エンキューする類似の操作が、本発明の実施形態に等しく適用可能であり、そして実質的に類似の要領で操作する。エンキューすることは、後続の命令の宛先（デスティネーション）としてのエンキューするソース・レジスタｒＳの位置に基づいて、又は処理ユニット１４により実行される全ての命令の適正なサブセットの中の１又はそれより多くの所定の命令におけるデスティネーション・オペランド（宛先オペランド）に基づいて実行され得る。即ち、一実施形態において、命令又は命令機能のサブセットのみが、実際に、それらの実行の一部としてエンキューすることを実行し、そして処理ユニット１４により実行される残りの命令は、デスティネーション・オペランドとしてｒＳを使用することに拘わらず、エンキューすることを実行しない。エンキューすることを実行するサブセットは、実行される全体命令の所定のサブセットであり得て、そしてデータ処理システム１０の必要性に基づいて決定され得る。更に別の実施形態において、エンキューすることは、エンキューする操作を制御するための命令内で制御フィールド値により決定され得る。
【０１３１】
図３１は、高速フーリエ変換（ＦＦＴ）と共に用いられ得る命令を示す。図３１は、制御フィールドｓ／ｕ、ｍｓ及びｄｓ、及びオペランドｒＤ、ｒＡ及びｒＢを有する多重ベクトル・エレメントＦＦＴロード（ｌｏａｄ  ｍｕｌｔｉｐｌｅ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ  ＦＦＴ）（ｌｍｖｅｘ＿ｆｆｔ）命令を示す。これらの制御フィールド及びオペランドのそれぞれが、他のロード命令に関して上記で説明したように動作する。ｌｍ
ｖｅｘ＿ｆｆｔ命令はまた、ｒＢに格納された追加のパラメータ「基数（ｒａｄｉｘ）」を用い、そして他のベクトル・エレメント・ロード命令に関して上記で説明したようにｒＢに格納されたｒｃｎｔ制御フィールドを任意に実行し得る。上記の命令の場合のように、代替実施形態において、「ｒａｄｉｘ」（及び、存在する場合「ｒｃｎｔ」）は、演算コード又はサブ演算コードの一部であることができ、従って、ｒＢは、必要でなくてもよい。ｌｍｖｅｘ＿ｆｆｔ命令はまた、上記で説明したように、切り捨て又は丸めフィールドを用いる。
【０１３２】
図３２は、制御フィールドｓ／ｕ、ｍｓ及びｓｓ、及びオペランドｒＳ、ｒＡ及びｒＢをまた有する多重ベクトル・エレメントＦＦＴ格納（ｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ  ＦＦＴ）（ｓｔｍｖｅｘ＿ｆｆｔ）命令を示す。これらの制御フィールド及びオペランドのそれぞれは、他の格納命令に関して上記で説明したように動作する。ｓｔｍｖｅｘ＿ｆｆｔ命令はまた、上記で説明したように、切り捨て又は丸めフィールドを用い得て、そして他のベクトル格納命令に関して上記で説明したようにｒｃｎｔ制御フィールドを任意に実行し得る。ｓｔｍｖｅｘ＿ｆｆｔ命令はまた、ｒＢに格納された追加のパラメータ「ｒａｄｉｘ」を用いる。上記の命令の場合のように、代替実施形態において、「ｒａｄｉｘ」は、演算コード又はサブ演算コードの一部であることができ、従って、ｒＢは、必要無い場合がある。ｓｔｍｖｅｘ＿ｆｆｔ命令は、ｌｍｖｅｘ＿ｆｆｔ命令の格納相手方と考えられ得る。
【０１３３】
再びｌｍｖｅｘ＿ｆｆｔ命令を参照すると、「ｒａｄｉｘ」パラメータを用いて、一連のデータをレジスタ又は１組のレジスタに、当該技術で既知のようにＦＦＴアドレッシング・アルゴリズムに従ってロードし得る。例えば、ＦＦＴに関して、Ｘ０、Ｘ１、Ｘ２、Ｘ３、Ｘ４、Ｘ５、Ｘ６及びＸ７の順序のデータが、或る一定の計算のためＸ０、Ｘ４、Ｘ６、Ｘ２、Ｘ１、Ｘ５、Ｘ３、Ｘ７の順序に「ビット反転（ｂｉｔ  ｒｅｖｅｒｓｅ）」されることは既知である。ｌｍｖｅｘ＿ｆｆｔ命令において、「ｒａｄｉｘ」は、エレメントの数、及びエレメントの特定の格納シーケンスを定義する。例えば、図３４は、例えば、図１のメモリ１２の一部であり得るメモリ３００を示す。メモリ３００は、位置０ｘ１６−０ｘ２４に格納されているエレメントＸ０、Ｘ１、Ｘ２、Ｘ３、Ｘ４、Ｘ５、Ｘ６及びＸ７を含む。メモリ３００はまた、位置０ｘ４４−０ｘ５２に格納されているエレメントＹ０、Ｙ４、Ｙ６、Ｙ２、Ｙ１、Ｙ５、Ｙ３及びＹ７を含む。
【０１３４】
図３５は、図１のスカラ・レジスタ・ファイル３４のようなレジスタ・ファイルの一部を示す。例えば、８のｒａｄｉｘを有するｌｍｖｅｘ＿ｆｆｔ命令を用いて、Ｘ個のエレメントをビット反転の要領でレジスタＲ１及びＲ２に（図３５に示されるように）入れることができ、そこにおいて、Ｒ１は、ｒＤにより指定され、そしてロードされるべき第１のメモリ位置（０ｘ１６）は、ｒＡにより指定される。同様に、８のｒａｄｉｘを有するｌｍｖｅｘ＿ｆｆｔ命令を用いて、ビット反転されたＹ個のエレメントを順次の順序でＲ４及びＲ５に（図３５に示されるように）入れることができ、そこにおいて、Ｒ４は、ｒＤにおり指定され、そしてロードされるべき第１のメモリ位置（０ｘ４４）は、ｒＡにより指定される。従って、ｌｍｖｅｘ＿ｆｆｔ命令は、エレメントをビット反転の要領でロードし得て、そこにおいて、エレメントは、最初にビット反転されるか、又はそうされないかのいずれかである。
【０１３５】
同様に、ｓｔｍｖｅｘ＿ｆｆｔ命令を用いて、エレメントをビット反転の要領でメモリに格納し得る。例えば、８のｒａｄｉｘを有するｓｔｍｖｅｘ＿ｆｆｔ命令を用いて、ビット反転されたＸ個のエレメントをＲ１及びＲ２からメモリの位置０ｘ１６−０ｘ２４に格納し、それにより、メモリの中のエレメントは、Ｒ１及びＲ２の中のそれらのエレメントと比較してビット反転された状態ではない。同様に、ｓｔｍｖｅｘ＿ｆｆｔ命令を用いて、順次的なＹ個のエレメントをＲ４及びＲ５からメモリの位置０ｘ４４−０ｘ５２に格
納することができ、それにより、メモリの中のエレメントは、Ｒ４及びＲ５の中のそれらのエレメントと比較してビット反転された状態にある。
【０１３６】
図３３は、制御フィールドｓ／ｕ、ｍｓ及びｄｓ、及びオペランドｒＤ、ｒＡ及びｒＢを有するベクトル・エレメントのストリームＦＦＴロード（ｌｏａｄ  ｓｔｒｅａｍ  ｏｆ  ｖｅｃｔｏｒ  ｅｌｅｍｅｎｔｓ  ＦＦＴ）（ｌｍｓｔｒｍｖｅｘ＿ｆｆｔ）命令を示す。これらのフィールド及びオペランドのそれぞれが、ｌｓｔｒｍｖｅｘ命令に関して上記で説明したように動作する。ｌｍｓｔｒｍｖｅｘ＿ｆｆｔ命令はまた、ｒＢに格納された追加のパラメータ「ｒａｄｉｘ」を用い、そして他のベクトル・エレメント・ロード命令に関して説明したようにｒＢに格納されたｒｃｎｔ制御フィールドを任意に実行し得る。上記の命令の場合のように、代替実施形態において、「ｒａｄｉｘ」（及び、存在する場合「ｒｃｎｔ」）は、演算コード又はサブ演算コードの一部であることができ、従って、ｒＢは、必要で無い場合がある。「ｒａｄｉｘ」は、ロードされるべきエレメントの合計数を定義する。ｌｍｓｔｒｍｖｅｘ命令の場合のように、ｌｍｓｔｒｍｖｅｘ＿ｆｆｔ命令は、ベクトル・エレメントのストリームをメモリから開始し、そこにおいて、エレメントは、ビット反転の要領で、又はビット反転された順序から順次の順序でロードされ、そして例えば、後続の命令におけるｒＤの位置に依存してデキューされ得る。図示されていないが、相手方の格納命令を用いて、ＦＦＴ応用のようなもののためビット反転の要領で、エレメントのストリームをメモリに格納することを開始し得ることに注目されたい。
【０１３７】
従って、様々な異なるタイプのベクトル・ロード及び格納命令が、例えばスカラ・レジスタ・ファイルのような１組のレジスタを有するシステムで用いられることができる仕方が認められることができる。即ち、上記の命令を既存の設計で用いることができ、又は既存の設計の実行ユニット（例えば、実行ユニット３２のようなもの）及び制御ユニット（例えば、制御ユニット２８のようななもの）に対する一層小さい変更のみを要求し得る。本明細書で説明される命令のそれぞれが、異なるフォーマットを有することができ、そして複数の命令に分割すらされ得ることに注目されたい。また、ベクトル・エレメントをレジスタへ、及びそれから転送する際に、追加のパラメータを用いて、（例えば、ベクトル・ロード命令に対するもののような）どのレジスタ・エレメントをメモリへ転送するべきか、又はレジスタ内のどのレジスタ・エレメントに、メモリからロードされたベクトル・エレメントを格納するかを指示し得る。更に、追加のパラメータを用いて、ベクトル・エレメントをレジスタの中に置く仕方、又はどこへベクトル・エレメントをメモリから読み出すかを定義し得る。例えば、設けられ得る開始位置インディケータは、レジスタの中のどこに又はどこから転送することを開始するかを指示する。また、ｓｔｒｉｄｅが、１つのレジスタのため与えられ得て、それにより、パラメータは、レジスタに又はそれから、レジスタ内で非連続的な要領で転送され得る。また、本明細書で説明される全てのパラメータ及び制御フィールドは、上記命令のいずれとのいずれの組み合わせで現れ得る。
【０１３８】
また、異なるアドレッシング・モードが、例えば、ｓｔｒｉｄｅ、ｓｋｉｐ、ｓｋｉｐ＿ｃｎｔ等々を用いたモード、又はｂｕｆｆｅｒ＿ｓｉｚｅ及びｏｆｆｓｅｔを用いたモード、又はｒａｄｉｘを用いたモードのようなモードが、上記で説明したことに注目されたい。しかしながら、代替実施形態において、異なるアドレッシング・モードを用い得る。例えば、アレイ次元が、例えば、アレイの次元（例えば、２次元４×４アレイ、３次元５×５アレイ等々）のようなものを、代わりに指定され得る。従って、上記実施形態を用いて本明細書で説明されたアドレッシング・モードを用いて、データ又はデータのアレイを、例えば、上記で説明したように、ジグザグ・パターン及び他の正規のパターンを含む様々なパターンでロード又は格納し得る。本明細書で説明された命令はまた、現在のＳＩＭＤプロセッサにおいて要求されるオーバヘッドと比較して、メモリ・エレメントをメモリへ又はメモリから転送するために要求されるオーバヘッドを低減し得る。例えば、ＳＩ
ＭＤ動作が可能である現在のプロセッサにおいて、多数の命令が、ベクトル・エレメント（例えば、データのベクトル又はアレイ、又はデータの他の正規のパターンのようなもの）をメモリへまはそれから転送するため必要である。しかしながら、エレメントの同じ転送は、上記で説明したベクトル・ロード及び格納命令を用いて達成されることができ、そこにおいて、低減された数の命令（又はまさに１個の命令）を用いて、転送を達成し得る。
【０１３９】
次のパラグラフは、本発明の様々な局面、形式及び実施形態の記載を提供する。これらの記載のそれぞれは、様々な実施形態の例を提供するだけであり、これらの記載、又は上記で説明した実施形態のいずれかに限定する意図ではない。
【０１４０】
本発明の一局面に従って、データ処理システムは、オペランドを格納するメモリと、少なくとも１つの汎用レジスタとを有する。プロセッサ回路は、１又はそれより多くの命令を実行し、そして１又はそれより多くの命令のうちの少なくとも１つは、データ・エレメントをメモリと少なくとも１つの汎用レジスタとの間で転送する。少なくとも１又はそれより多くの命令は、少なくとも１つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立してメモリの中のデータ・エレメントのサイズを指定する。一形式において、１又はそれより多くの命令は、メモリのための第１のデータ・サイズ修飾子、及び少なくとも１つの汎用レジスタのための第２のデータ・サイズ修飾子を別々に格納する独立のフィールドを含む。別の形式において、１又はそれより多くの命令は、メモリのための第１のデータ・サイズ修飾子、及び少なくとも１つの汎用レジスタのための第２のデータ・サイズ修飾子を定義するための格納場所を指定する。一形式において、格納場所は、メモリの中の１つの場所と当該メモリに対して外部のプロセッサ・レジスタ場所とのうちのいずれかの１つである。別の形式において、格納場所は、データ処理システムの制御レジスタである。一形式において、格納場所は、データ処理システムが実行する算術、論理及びシフト演算を利用するデータ処理システム内のレジスタである。メモリは更に、メモリと少なくとも１つの汎用レジスタとの間で転送されるべき複数の多重データ・エレメントを含み得る。一形式において、多重データ・エレメントは、メモリの中で連続である。別の形式において、多重データ・エレメントは、メモリの中で非連続である。一形式において、少なくとも１つの汎用レジスタのそれぞれが、多重データ・エレメントを保持する。別の形式において、少なくとも１つの汎用レジスタのそれぞれが、１次元メモリ・マップを有するスカラ・レジスタを含む。
【０１４１】
少なくとも１又はそれより多くの命令が、少なくとも１つの汎用レジスタの中のデスティネーション・データ・エレメントのサイズより大きいメモリの中のソース・データ・エレメントのサイズを指定するとき、プロセッサ回路は、メモリの中のソース・データ・エレメントの一部分の切り捨てを行い得る。切り捨てをされるメモリの中のソース・データ・エレメントの部分は、メモリの中のソース・データ・エレメントの高い桁部分であり得る。切り捨てをされるメモリの中のソース・データ・エレメントの部分は、メモリの中の低い桁部分であり得る。少なくとも１又はそれより多くの命令が、少なくとも１つの汎用レジスタの中のデスティネーション・データ・エレメントのサイズより大きいメモリの中のソース・データ・エレメントのサイズを指定するとき、プロセッサ回路は、メモリの中のソース・データ・エレメントの高い桁部分の値に基づいてメモリの中のソース・データ・エレメントの高い桁部分を丸めることを行い得る。少なくとも１又はそれより多くの命令が、メモリの中のソース・データ・エレメントのサイズが少なくとも１つの汎用レジスタの中のデスティネーション・データ・エレメントより小さいサイズを有するよう指定するとき、プロセッサ回路は、メモリからのソース・データ・エレメントにより充填されない少なくとも１つの汎用レジスタのデスティネーション・データ・エレメントの部分に所定のデータ値を置き得る。一形式において、プロセッサ回路は、ゼロ拡張を用いることにより、少なくとも１つの汎用レジスタのデスティネーション・データ・エレメントの部分
に所定のデータ値を置く。別の形式において、プロセッサ回路は、符号拡張を用いることにより、少なくとも１つの汎用レジスタのデスティネーション・データ・エレメントの部分に所定のデータ値を置く。更に別の形式において、プロセッサ回路は、少なくとも１つの汎用レジスタのデスティネーション・データ・エレメントの低い桁のデータ部分に所定のビット値を充填することにより、少なくとも１つの汎用レジスタのデスティネーション・データ・エレメントの部分に所定のデータ値を置き、そしてその所定のビット値は、ゼロ値である。
【０１４２】
少なくとも１又はそれより多くの命令が、少なくとも１つの汎用レジスタの中のソース・データ・エレメントのサイズより小さいメモリの中のデスティネーション・データ・エレメントのサイズを指定するとき、プロセッサ回路は、少なくとも１つの汎用レジスタの中のソース・データ・エレメントの一部分を切り捨てることを行い得る。一形式において、プロセッサ回路は、少なくとも１つの汎用レジスタの中のソース・データ・エレメントの高い桁部分を切り捨てる。別の形式において、プロセッサ回路は、少なくとも１つの汎用レジスタの中のソース・データ・エレメントの低い桁部分を切り捨てる。少なくとも１又はそれより多くの命令が、少なくとも１つの汎用レジスタの中のソース・データ・エレメントのサイズより小さいメモリの中のデスティネーション・データ・エレメントのサイズを指定するとき、プロセッサ回路は、ソース・データ・エレメントの低い桁部分の値に基づいて、少なくとも１つの汎用レジスタの中のソース・データ・エレメントの高い桁部分を丸めることを行い得る。少なくとも１又はそれより多くの命令が、少なくとも１つの汎用レジスタの中のソース・データ・エレメントのサイズより大きいメモリの中のデスティネーション・データ・エレメントのサイズを指定するとき、プロセッサ回路は、少なくとも１つの汎用レジスタの中のソース・データ・エレメントにより充填されないメモリの中のデスティネーション・データ・エレメントの一部分に所定のデータ値を置き得る。別の形式において、プロセッサ回路は、ゼロ拡張を用いることにより充填されてないメモリの中のデスティネーション・データ・エレメントの一部分に所定のデータ値を置き、又は符号拡張を用いることにより充填されてないメモリの中のデスティネーション・データ・エレメントの一部分に所定のデータ値を置く。別の形式において、所定のデータ値は、デスティネーション・データ・エレメントの低い桁のデータ部分に所定のビット値を置くことにより、充填されてないメモリの中のデスティネーション・データ・エレメントの一部分に置かれる。
【０１４３】
別の局面に従って、データ処理システムにおいてデータ・エレメントをロードして格納する方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも１つの汎用レジスタを設けるステップとを含む。１又はそれより多くの命令が、実行され、その１又はそれより多くの命令のうちの少なくとも１つは、メモリと少なくとも１つの汎用レジスタとの間でデータ・エレメントの転送を生じさせる。少なくとも１又はそれより多くの命令が、少なくとも１つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立にメモリの中のデータ・エレメントのサイズを指定する。データ・エレメントのサイズは、少なくとも１又はそれより多くの命令内の独立のフィールドを実行することにより指定され、第１のフィールドは、メモリに関する第１のデータ・サイズ修飾子を指示し、そして第２のフィールドは、少なくとも１つの汎用レジスタに関する第２のデータ・サイズ修飾子を指示する。データ・エレメントのサイズは、少なくとも１又はそれより多くの命令内の所定のフィールドを実行することにより指定され得て、当該所定のフィールドは、メモリに関する第１のデータ・サイズ修飾子と少なくとも１つの汎用レジスタに関する第２のデータ・サイズ修飾子とを定義するための格納場所を指示する。メモリの中のソース・データ・エレメントの一部分は、少なくとも１又はそれより多くの命令が少なくとも１つの汎用レジスタの中のデスティネーション・データ・エレメントのサイズより大きいメモリの中のソース・データ・エレメントのサイズを指定するとき切り捨てをされ得る。別の形式において、メモリの中のソース・データ・エレ
メントの高い桁部分は、少なくとも１又はそれより多くの命令が少なくとも１つの汎用レジスタの中のデスティネーション・データ・エレメントのサイズより大きいメモリの中のソース・データ・エレメントのサイズを指定するとき、メモリの中のソース・データ・エレメントの低い桁部分の値に基づいて丸めをされ得る。別の形式において、データ処理システムは、メモリと、データ処理命令を実行するプロセッサとを含む。データ処理命令のうちの少なくとも１つが、メモリに対して外部であるデータ処理システムにおける少なくとも１つの格納場所に格納されたデータ・エレメントのサイズを指定することから別個に且つそのことから独立に、メモリに格納されたデータ・エレメントのサイズを指定する制御情報を含む。
【０１４４】
別の形式において、データ処理システムのプロセッサ回路は、少なくとも、第１の命令とその第１の命令に続く第２の命令とを実行する。第１の命令は、データ・エレメントのストリームをメモリと少なくとも１つの汎用レジスタとの間で転送して、それをメモリと少なくとも１つの汎用レジスタとのうちの少なくとも１つにおいてデキューする。第２の命令は、少なくとも第１のソース・オペランドを含み、そして第２の命令のソース・オペランドとして現れる少なくとも１つの汎用レジスタに基づいてデータ・エレメントのストリームの一部分を条件付けでデキューする。データ・エレメントのストリームの一部分を条件付けでデキューすることは、少なくとも１つの汎用レジスタが、第２の命令により指定された所定のタイプの関数のためのソース・オペランドとして用いられるとき実行され得る。別の形式において、データ・エレメントのストリームの一部分を条件付けでデキューすることは、第２の命令の制御フィールドの値に基づいて実行される。第２の命令は更に、第２のソース・オペランドを含み得て、そして条件付けでデキューすることは、少なくとも１つの汎用レジスタが第１のソース・オペランドとして現れるとき実行され得る。一形式において、条件付けでデキューすることは、少なくとも１つの汎用レジスタが第２のソース・オペランドとして現れるときは実行されない。
【０１４５】
別の局面に従って、データ処理システムにおいてデータ・エレメントを選択的にデキューする方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも１つの汎用レジスタを設けるステップとを含む。少なくとも、第１の命令とその第１の命令に続く第２の命令とが、実行される。データ・エレメントのストリームが、第１の命令に応答して、メモリと少なくとも１つの汎用レジスタとの間で転送される。メモリと少なくとも１つの汎用レジスタとのうちの少なくとも１つの中のデータ・エレメントのストリームが、デキューされる。第１の命令に続く第２の命令が、実行される。第２の命令は、少なくとも第１のソース・オペランドを含む。データ・エレメントのストリームの一部分は、少なくとも１つの汎用レジスタが第２の命令のソース・オペランドとして現れることに基づいて、条件付けでデキューされる。データ・エレメントのストリームの一部分は、少なくとも１つの汎用レジスタが第２の命令により指定された所定のタイプの関数に対するソース・オペランドとして用いられる。第２のソース・オペランドは、第２の命令内に設けられ得て、そしてデータ・エレメントのストリームの一部分は、少なくとも１つの汎用レジスタが第１のソース・オペランドとして現れるとき、条件付けでデキューされ得る。一形式において、デキューすることは、少なくとも１つの汎用レジスタが第２のソース・オペランドとして現れるとき、実行されない。
【０１４６】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと、少なくとも１つの汎用レジスタとを含む。プロセッサ回路は、複数の命令を実行し、当該複数の命令のうちの第１の命令は、データ・エレメントのストリームをメモリと少なくとも１つの汎用レジスタとの間で転送して、それをメモリ及び少なくとも１つの汎用レジスタのうちの少なくとも１つにデキューする。データ・エレメントのストリームの一部分は、複数の命令の適正なサブセット内の所定の命令に対応する複数の命令のうちの第２の命令に応答して条件付けでデキューされる。プロセッサ回路は更に、少なくとも１つ汎用レジ
スタが複数の命令のうちの第２の命令のソース・オペランドとして現れることに基づいてデータ・エレメントのストリームの一部分を条件付けでデキューし得る。プロセッサ回路は更に、複数の命令のうちの第２の命令の制御フィールドの値に基づいてデータ・エレメントのストリームの一部分を条件付けでデキューし得る。
【０１４７】
別の局面に従って、データ処理システムにおいてデータ・エレメントを選択的にデキューする方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも１つの汎用レジスタを設けるステップとを含む。複数の命令が、実行され、当該複数の命令のうちの第１の命令が、データ・エレメントのストリームをメモリと少なくとも１つの汎用レジスタとの間で転送する。データ・エレメントのストリームは、メモリと少なくとも１つの汎用レジスタとのうちの少なくとも１つにおいてキュー（ｑｕｅｕ）される。データ・エレメントのストリームの一部分は、複数の命令の適正なサブセット内の所定の命令に対応する複数の命令のうちの第２の命令に応答して条件付けでデキューされる。
【０１４８】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと、少なくとも１つの汎用レジスタとを含む。プロセッサ回路は、複数の命令を実行する。複数の命令のうちの第１の命令は、データ・エレメントのストリームをメモリと少なくとも１つの汎用レジスタとの間で転送する。データ・エレメントのストリームの一部分は、少なくとも１つの汎用レジスタが複数の命令のうちの第２の命令のデスティネーション・オペランドとして現れることに基づいて条件付けでエンキューされる。
【０１４９】
別の局面に従って、データ処理システムにおいてデータ・エレメントを選択的にエンキューする方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも１つの汎用レジスタを設けるステップとを含む。複数の命令が、実行され、当該複数の命令のうちの第１の命令は、データ・エレメントのストリームを、メモリと少なくとも１つの汎用レジスタとの間で転送して、メモリと少なくとも１つの汎用レジスタとのうちの少なくとも１つにおいてキューする。データ・エレメントのストリームの一部分は、少なくとも１つの汎用レジスタが複数の命令のうちの第２の命令のデスティネーション・オペランドとして現れることに基づいて条件付けでエンキューされる。
【０１５０】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと、少なくとも１つの汎用レジスタとを含む。プロセッサ回路は、少なくとも、第１の命令とその第１の命令に続く第２の命令とを実行する。第１の命令は、データ・エレメントのストリームを、メモリと少なくとも１つの汎用レジスタとの間で転送して、メモリと少なくとも１つの汎用レジスタとのうちの少なくとも１つにおいてキューされる。第２の命令は、少なくとも第１のデスティネーション・オペランドを含む。データ・エレメントのストリームの一部分は、少なくとも１つの汎用レジスタが第２の命令のデスティネーション・オペランドとして現れることに基づいて条件付けでエンキューされる。
【０１５１】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと少なくとも１つの汎用レジスタとを含む。プロセッサ回路は、少なくとも第１の命令と、その第１の命令に続く第２の命令とを実行する。第１の命令は、データ・エレメントのストリームを、メモリと少なくとも１つの汎用レジスタとの間で転送して、メモリと少なくとも１つの汎用レジスタとのうちの少なくとも１つにおいてキューされる。第１の命令は更に、転送されるべきデータ・エレメントの数を指定し、そして少なくとも１つの汎用レジスタが第２の命令のソース・オペランドとして現れることに基づいて、データ・エレメントのストリームの一部分からの複数のデータ・エレメントを条件付けでデキューする。
【０１５２】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと少なくとも１つの汎用レジスタとを含む。プロセッサ回路は、少なくとも第１の命令と、その
第１の命令に続く第２の命令とを実行する。第１の命令は、データ・エレメントのストリームを、メモリと少なくとも１つの汎用レジスタとの間で転送して、メモリと少なくとも１つの汎用レジスタとのうちの少なくとも１つにおいてキューされる。第１の命令は更に、転送されるべきデータ・エレメントの数を指定し、そして少なくとも１つの汎用レジスタが第２の命令のデスティネーション・オペランドとして現れることに基づいて、データ・エレメントのストリームの一部分からの複数のデータ・エレメントを条件付けでエンキューする。
【０１５３】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと、少なくとも１つの汎用レジスタと、プロセッサ回路とを含む。プロセッサ回路は、複数の命令を実行する。複数の命令のうちの第１の命令は、データ・エレメントのストリームを、メモリと少なくとも１つの汎用レジスタとの間で転送して、メモリと少なくとも１つの汎用レジスタとのうちの少なくとも１つにおいてキューされる。データ・エレメントのストリームの一部分をエンキューすることとその一部分をデキューすることとのうちの少なくとも１つのことは、複数の命令のうちの第２の命令内の制御フィールドに応答して、条件付けで実行される。
【０１５４】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと複数の汎用レジスタとを含み、各汎用レジスタは、多重データ・エレメントを保持する。プロセッサ回路は、１又はそれより多くの命令を実行し、そして当該１又はそれより多くの命令のうちの少なくとも１つは、複数のデータ・エレメントをメモリと複数の汎用レジスタのうちの少なくとも２つの汎用レジスタとの間で転送し、そこにおいて、少なくとも１又はそれより多くの命令が、複数の汎用レジスタのうちの少なくとも２つの汎用レジスタのそれぞれとメモリとの間で転送されるべきレジスタ・エレメントの数を指定する。１又はそれより多くの命令は、その上、転送されるべきレジスタ・エレメントの数に加えて、レジスタ・エレメントのうちのどれをロード又は格納すべきかを指定する。別の形式において、サブセットの多重データ・エレメントのみが複数の汎用レジスタのうちの少なくとも２つの汎用レジスタのそれぞれとメモリとの間で転送されるとき、いずれの未指定のデータ・エレメントが、所定の値で満たされる。
【０１５５】
別の局面に従って、データ処理システムにおいてデータ・エレメントを転送する方法は、オペランドをメモリに格納するステップを含む。多重データ・エレメントが、複数の汎用レジスタのそれぞれに格納される。１又はそれより多くの命令は、データ処理システムにより実行される。１又はそれより多くの命令のうちの少なくとも１つの命令は、メモリと複数の汎用レジスタのうちの少なくとも２つの汎用レジスタとの間の複数のデータ・エレメントの転送を生じさせる。少なくとも１又はそれより多くの命令は、複数の汎用レジスタのうちの少なくとも２つの汎用レジスタのそれぞれとメモリとの間で転送されるべきレジスタ・エレメントの数を指定する。
【０１５６】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと複数の汎用レジスタとを含み、それぞれの汎用レジスタは、多重データ・エレメントを保持する。プロセッサ回路が、１又はそれより多くの命令を実行し、１又はそれより多くの命令のうちの少なくとも１つは、複数のデータ・エレメントをメモリと複数の汎用レジスタのうちの少なくとも２つの汎用レジスタとの間で転送する。少なくとも１又はそれより多くの命令は、複数の汎用レジスタのうちの少なくとも２つの汎用レジスタのどのデータ・エレメントが転送されるべきであるかを指定する。多重データ・エレメントのサブセットのみが転送されるとき、いずれの指定されていないデータ・エレメントは、プロセッサ回路により所定の値で充填される。一形式において、少なくとも１又はそれより多くの命令により指定されるデータ・エレメントは、複数の汎用レジスタのうちの少なくとも２つの汎用レジスタ内に連続して位置される。別の形式において、少なくとも１又はそれより多く
の命令により指定されるデータ・エレメントは、複数の汎用レジスタのうちの少なくとも２つの汎用レジスタ内に連続しては位置されない。
【０１５７】
別の局面に従って、データ処理システムにおいてデータ・エレメントを転送する方法は、オペランドをメモリに格納するステップと、多重データ・エレメントを複数の汎用レジスタのそれぞれに保持するステップとを含む。１又はそれより多くの命令が、実行され、１又はそれより多くの命令のうちの少なくとも１つが、メモリと複数の汎用レジスタのうちの少なくとも２つの汎用との間での複数のデータ・エレメントの転送を生じさせ、そこにおいて、少なくとも１又はそれより多くの命令は、複数の汎用レジスタのうちの少なくとも２つの汎用レジスタのどのデータ・エレメントが転送されるべきかを指定する。
【０１５８】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと複数の汎用レジスタとを含み、そこにおいて、各汎用レジスタは、多重データ・エレメントを保持する。プロセッサ回路は、１又はそれより多くの命令を実行し、その１又はそれより多くの命令のうちの少なくとも１つは、複数のデータ・エレメントをメモリと複数の汎用レジスタのうちの少なくとも２つの汎用レジスタとの間で転送し、そこにおいて、少なくとも１又はそれより多くの命令は、複数の汎用レジスタのうちの少なくとも２つの汎用レジスタのそれぞれとメモリとの間で転送されるべきデータ・エレメントの数を指定し、そして更に、転送されるべきデータ・エレメントの合計数を指定する。
【０１５９】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと少なくとも１つの汎用レジスタとを含む。プロセッサ回路は、１又はそれより多くの命令を実行し、当該１又はそれより多くの命令のうちの少なくとも１つは、データ・エレメントをメモリと少なくとも１つの汎用レジスタとの間で転送するためのものであり、そこにおいて、１又はそれより多くの命令のうちの１つは、（ａ）メモリの中の連続のデータ・エレメントの第１の部分内のデータ・エレメント間の第１のオフセットと、（ｂ）メモリと少なくとも１つのＧＰＲとの間で転送されるべきデータ・エレメントの第１の数と、（ｃ）メモリの中のデータ・エレメントの第１の部分と第２の部分との間の第２のオフセットとを指定する。一形式において、１又はそれより多くの命令は更に、メモリの中のデータ・エレメントのデータ・エレメント・サイズを指定する。別の形式において、１又はそれより多くの命令のうちの１つは更に、少なくとも１つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立してメモリの中のデータ・エレメントのサイズを指定する。プロセッサ回路は、メモリの中のデータ・エレメントのサイズに基づいて転送されるべきデータ・エレメントの合計数を決定する。プロセッサ回路は、少なくとも１つの汎用レジスタの中のデータ・エレメントのサイズに基づいて転送されるべきデータ・エレメントの合計数を決定し得る。１又はそれより多くの命令は更に、メモリと少なくとも１つの汎用レジスタとの間で転送されるべきデータ・エレメントの合計数を指定し得る。データ処理システムは更に、第１の汎用レジスタと第２の汎用レジスタとを含み、そこにおいて、１又はそれより多くの命令のうちの１つは、１又はそれより多くの命令のうちの１つを実行することに応答して、データ・エレメントをメモリと第１の汎用レジスタ及び第２の汎用レジスタの両方との間で転送する。１又はそれより多くの命令のうちの１つは更に、メモリと第１の汎用レジスタ及び第２の汎用レジスタの両方との間で転送されるべきデータ・エレメントの合計数を指定し得る。転送されるデータ・エレメントの合計数が第２の汎用レジスタを完全には満たさない場合、プロセッサ回路は、いずれの残りのビット位置の少なくとも一部分を所定の値で満たし得る。１又はそれより多くの命令のうちの１つは更に、メモリと第１及び第２の汎用レジスタのそれぞれとの間で転送されるべきデータ・エレメントのそれぞれの数を別々に指定し得る。転送されるデータ・エレメントの合計数が第２の汎用レジスタを完全には満たさない場合、プロセッサ回路は、いずれの残りのビット位置の少なくとも一部分を所定の値で満たし得る。１又はそれより多くの命令のうちの１つは更に、１つの修飾子を含み、そこにおいて、第２の
オフセットは、第１の数のデータ・エレメントを転送しながら、プロセッサ回路により１回以下で用いられる。プロセッサ回路は、１又はそれより多くの命令のうちの１つが第２のオフセットがたった１回用いられるべきであることを指定するとき、サーキュラー・バッファを用いることによりメモリの中のデータ・エレメントを通信し得る。１又はそれより多くの命令のうちの１つは更に、１つの修飾子を含み、そこにおいて、転送されるべき第１の数のデータ・エレメントが転送されるべきデータ・エレメントの第１の部分の２倍より大きい場合、第２のオフセットが、プロセッサ回路により２回以上用いられる。
【０１６０】
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと少なくとも１つの汎用レジスタとを含む。プロセッサ回路は、１又はそれより多くの命令を実行し、当該１又はそれより多くの命令のうちの少なくとも１つは、データ・エレメントをメモリと少なくとも１つの汎用レジスタとの間で転送し、そこにおいて、１又はそれより多くの命令のうちの１つは、１又はそれより多くのデータ・エレメントをビット反転した順序でメモリと少なくとも１つの汎用レジスタとの間で転送することを実行するための基数修飾子（ｒａｄｉｘ  ｓｐｅｃｉｆｉｅｒ）を指定する。
【０１６１】
別の局面に従って、多重アドレッシング・モードを用いる方法は、オペランドを格納するためのメモリを設ける。少なくとも１つの汎用レジスタが、設けられる。１又はそれより多くの命令が、実行され、当該１又はそれより多くの命令のうちの少なくとも１つが、データ・エレメントをメモリと少なくとも１つの汎用レジスタとの間で転送する。１又はそれより多くの命令のうちの少なくとも１つは、メモリの中の連続したデータ・エレメントの第１の部分内のデータ・エレメント間の第１のオフセットを指定する。１又はそれより多くの命令のうちの少なくとも１つは、メモリと少なくとも１つの汎用レジスタ（ＧＰＲ）との間で転送されるべきデータ・エレメントの第１の数を指定する。１又はそれより多くの命令のうちの少なくとも１つは更に、メモリの中のデータ・エレメントの第１の部分と第２の部分との間の第２のオフセットを指定し得る。１又はそれより多くの命令のうちの少なくとも１つを用いて、メモリの中のデータ・エレメントのデータ・エレメント・サイズを更に指定し得る。１又はそれより多くの命令のうちの少なくとも１つを用いて、少なくとも１つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立してメモリの中のデータ・エレメントのサイズを更に指定し得る。プロセッサを用いて、メモリの中のデータ・エレメントのサイズに基づいて転送されるべきデータ・エレメントの合計数を決定し得る。プロセッサを用いて、少なくとも１つの汎用レジスタの中のデータ・エレメントのサイズに基づいて転送されるべきデータ・エレメントの合計数を決定し得る。１又はそれより多くの命令のうちの少なくとも１つの命令を用いて、メモリと少なくとも１つの汎用レジスタとの間で転送されるべきデータ・エレメントの合計数を更に指定し得る。第１の汎用レジスタと第２の汎用レジスタとが、設けられ、そして１又はそれより多くの命令のうちの１つを実行することに応答して、データ・エレメントをメモリと第１の汎用レジスタ及び第２の汎用レジスタの両方との間で転送し得る。１又はそれより多くの命令のうちの１つを用いて、メモリと第１の汎用レジスタ及び第２の汎用レジスタの両方との間で転送されるべきデータ・エレメントの合計数を更に指定し得る。一形式において、転送される合計数のデータ・エレメントが第２の汎用レジスタを完全には満たさない場合、第２の汎用レジスタの中のいずれの残りの未充填のビット位置の少なくとも一部分が、所定の値で満たされる。１又はそれより多くの命令のうちの１つを用いて、メモリと第１及び第２の汎用レジスタのそれぞれとの間で転送されるべきデータ・エレメントの数を更に別々に指定し得る。一形式において、転送される合計数のデータ・エレメントが第２の汎用レジスタを完全には満たさない場合、いずれの残りのビット位置の少なくとも一部分が、ゼロのような所定の値で満たされる。１又はそれより多くの命令のうちの１つの命令の中の修飾子が、設けられ、そこにおいて、当該修飾子に応答して、第２のオフセットが、プロセッサによりたった１回用いられて、第１の数のデータ・エレメントを転送する。
【０１６２】
別の局面に従って、メモリの中のデータ・エレメントは、１又はそれより多くの命令のうちの１つが第２のオフセットを１回のみ用いるべきであることを指定するときサーキュラー・バッファを用いることによりプロセッサの制御下で通信され得る。１又はそれより多くの命令の中の修飾子が、設けられ得て、そこにおいて、転送されるべきデータ・エレメントの第１の数がメモリの中のデータ・エレメントの第１の部分の中のデータ・エレメントの数の２倍より大きい場合、第２のオフセットが、プロセッサにより２回以上用いられる。１又はそれより多くの命令の中の基数修飾子が、設けられ得て、当該基数修飾子は、１又はそれより多くのデータ・エレメントをビット逆順でメモリと少なくとも１つの汎用レジスタとの間で転送することを実行する。
【０１６３】
別の局面に従って、データ処理アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも１つの汎用レジスタを設けるステップとを含む。１又はそれより多くの命令が、実行され、１又はそれより多くの命令のうちの少なくとも１つが、データ・エレメントをメモリと少なくとも１つの汎用レジスタとの間で転送するステップを含む。１又はそれより多くの命令のうちの少なくとも１つが、１又はそれより多くの命令のうちの少なくとも１つの中の基数修飾子を指定し、その基数修飾子は、１又はそれより多くのデータ・エレメントをビット逆順でメモリと少なくとも１つの汎用レジスタとの間で転送することを実行する。
【０１６４】
別の局面に従って、データ処理アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも１つの汎用レジスタを設けるステップとを含む。プロセッサ回路が、１又はそれより多くの命令を実行するため設けられる。１又はそれより多くの命令のうちの少なくとも１つが、データ・エレメントをメモリと少なくとも１つの汎用レジスタとの間で転送し、そこにおいて、１又はそれより多くの命令のうちの１つは、所定のデータ・エレメントをメモリの中にビット逆順で格納し、そしてその所定のデータ・エレメントを少なくとも１つの汎用レジスタに転送する。１又はそれより多くの命令のうちの少なくとも１つは更に、少なくとも１つの汎用レジスタに転送すべきデータ・エレメントの数を指定する。別の形式において、１又はそれより多くの命令のうちの少なくとも１つは更に、少なくとも１つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立してメモリの中のデータ・エレメントのサイズを指定する。
【０１６５】
別の局面に従って、データ処理システム・アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも１つの汎用レジスタを設けるステップとを含む。プロセッサ回路が、１又はそれより多くの命令を実行するため設けられ、当該１又はそれより多くの命令のうちの少なくとも１つが、データ・エレメントをメモリと少なくとも１つの汎用レジスタとの間で転送し、そこにおいて、１又はそれより多くの命令のうちの１つは、所定のデータ・エレメントをメモリの中に順次の順序で格納し、そしてその所定のデータ・エレメントを少なくとも１つの汎用レジスタにビット逆順で転送する。
【０１６６】
別の局面に従って、データ処理システム・アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも１つの汎用レジスタを設けるステップとを含む。プロセッサ回路が、１又はそれより多くの命令を実行するため設けられ、当該１又はそれより多くの命令のうちの少なくとも１つが、データ・エレメントをメモリと少なくとも１つの汎用レジスタとの間で転送し、そこにおいて、１又はそれより多くの命令のうちの１つは、所定のデータ・エレメントを少なくとも１つの汎用レジスタの中にビット逆順で格納すること、及びその所定のデータ・エレメントをメモリに転送することを実行する。
【０１６７】
別の局面に従って、データ処理システム・アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも１つの汎用レジスタを設けるステップとを含む。プロセッサ回路が、１又はそれより多くの命令を実行するため設けられ、当該１又はそれより多くの命令のうちの少なくとも１つが、データ・エレメントをメモリと少なくとも１つの汎用レジスタとの間で転送し、そこにおいて、１又はそれより多くの命令のうちの１つは、所定のデータ・エレメントを少なくとも１つの汎用レジスタの中に順次の順序で格納し、そしてその所定のデータ・エレメントをメモリにビット逆順で転送する。
【０１６８】
前述の詳細において、本発明は、特定の実施形態、事例及び局面を参照して説明された。しかしながら、当業者は、添付の特許請求の範囲に記載される本発明の範囲から逸脱することなしに様々な変更及び変化を行うことができることを認めるであろう。例えば、ブロック図は、図示した以外の異なるブロックを含み得て、そしてより多くの又はより少ないブロックを有し得て、又は異なっているよう配列され得る。また、別の例として、本明細書で説明した命令は、様々な異なるフォーマットを有し、そして図示した以外の異なる制御フィールド及びパラメータを用いことができる。各命令は、多重命令として実行されることさえあり得る。また、別の例として、本明細書で説明したレジスタは、データ処理システム内の任意の場所に配置されるいずれのタイプの記憶回路であることができる。従って、本明細書及び図面は、限定する意味よりむしろ例示と考えられるべきであり、そして全てのそのような変更は、本発明の範囲内に含まれることを意図している。
【０１６９】
恩恵、他の利点、及び問題に対する解法が、特定の実施形態に関して上記で説明した。しかしながら、上記恩恵、利点、問題に対する解法、及びいずれの恩恵、利点、又はより明白に生じる又はより明白になる解法を生じ得るいずれの構成要素は、特許請求の範囲のいずれか又は全てに記載の重要で、要求された、又は本質的な特徴又は構成要素として解釈されるべきでない。本明細書で用いられたように、用語「備える」「備えている」、又はそれらのいずれの他の変形表現は、非排他的包含をカバーすることを意図され、それにより、一連の構成要素を備えるプロセス、方法、物品、又は装置は、それらの構成要素のみ含むわけではなく、しかし明示的に列挙されてなく又はそのようなプロセス、方法、物品又は装置に対して本来的でない他の構成要素を含み得る。
【図１】
2010211832.tif 000019
【図２】
2010211832.tif 000020
【図３】
2010211832.tif 000021
【図４】
2010211832.tif 000022
【図５】
2010211832.tif 000023
【図６】
2010211832.tif 000024
【図７】
2010211832.tif 000025
【図８】
2010211832.tif 000026
【図９】
2010211832.tif 000027
【図１０】
2010211832.tif 000028
【図１１】
2010211832.tif 000029
【図１２】
2010211832.tif 000030
【図１３】
2010211832.tif 000031
【図１４】
2010211832.tif 000032
【図１５】
2010211832.tif 000033
【図１６】
2010211832.tif 000034
【図１７】
2010211832.tif 000035
【図１８】
2010211832.tif 000036
【図１９】
2010211832.tif 000037
【図２０】
2010211832.tif 000038
【図２１】
2010211832.tif 000039
【図２２】
2010211832.tif 000040
【図２３】
2010211832.tif 000041
【図２４】
2010211832.tif 000042
【図２５】
2010211832.tif 000043
【図２６】
2010211832.tif 000044
【図２７】
2010211832.tif 000045
【図２８】
2010211832.tif 000046
【図２９】
2010211832.tif 000047
【図３０】
2010211832.tif 000048
【図３１】
2010211832.tif 000049
【図３２】
2010211832.tif 000050
【図３３】
2010211832.tif 000051
【図３４】
2010211832.tif 000052
【図３５】
2010211832.tif 000053