[発明の分野]
本発明は、一般的に、データ処理システムに関し、より詳細には、データ処理システム内で使用の命令に関する。
[関連技術]
データ処理システムの性能の増大は、ベクトルの多重エレメントの演算の並列実行を可能にすることにより達成することができる。今日入手可能な1つのタイプのプロセッサは、ベクトル演算を実行するベクトル・レジスタを利用するベクトル・プロセッサである。しかしながら、ベクトル・プロセッサは、より高い性能を可能にする一方、またスカラ汎用レジスタを用いるプロセッサより一層増大した複雑さ及びコストをもたらす。即ち、ベクトル・プロセッサ内のベクトル・レジスタ・ファイルは典型的には、N個のベクトル・レジスタを含み、そこにおいて、各ベクトル・レジスタは、M個のエレメント(要素)を保持するためM個のレジスタのバンクを含む。例えば、当該技術で既知のそのような1つのベクトル・プロセッサにおいては、レジスタ・ファイルは、32個のベクトル・レジスタを含み、そこにおいては、各ベクトル・レジスタは、32個の64ビット・レジスタのバンクを含み、従って、1024個の64ビット・レジスタに相当するものを必要とする。
今日入手可能な別のタイプのプロセッサは、いずれの既存のスカラ汎用レジスタ(GPR)を用いながら制限されたベクトル処理を可能にする単一命令多重データ(SIMD)スカラ・プロセッサ(「ショート・ベクトル・マシン(short−vector machine)」とも呼ばれる。)である。例えば、32個のスカラ64ビットGPRを有するデータ処理システムにおいては、各スカラ・レジスタは、2個の32ビット・エレメント(ビット要素)、4個の16ビット・エレメント、又は8個の8ビット・エレメントを保持することができ、従って、2個の32ビット・エレメント演算、4個の16ビット・エレメント演算、又は8個の8ビット・エレメント演算を実行することができる。従って、1演算当たりのエレメントの数は、ベクトル・プロセッサと比較して制限される(なお、ベクトル・プロセッサは、上記で与えられた例によれば、レジスタ・バンクで32個の64ビット・エレメントの演算を一度に行うことができる。)にも拘わらず、低減されたハードウエアが、必要とされる。しかしながら、現在のSIMDスカラ・プロセッサにおいては、実行のためスカラ・レジスタへのベクトル・エレメント(ベクトル要素)の転送とメモリへの多重ベクトル・エレメントの戻し転送とに関連した大きいオーバヘッドが存在する。このオーバヘッドは、演算の実効スループットを制限し、従って、多重ベクトル・エレメントをメモリとレジスタとの間でロード及び格納する方法を改善する必要性が存在する。
本発明は、一例として説明され、添付図面に制限されず、そこにおいては、類似の参照番号は、類似の構成要素を示す。
当業者は、図面の構成要素が単純化及び明瞭化のため図示され、そして必ずしも一定の尺度率で描かれているわけではないことを認めるであろう。例えば、図面の中の構成要素の一部の寸法は、本発明の実施形態の理解を向上させるのを助けるため他の構成要素に対して誇張されている。
[発明の詳細な説明]
本明細書で用いられているように、用語「バス」は、データ、アドレス、制御又は状態(ステータス)のような1又はそれより多くの様々なタイプの情報を転送するため用いられ得る複数の信号又は導体を指すため用いられている。本明細書で説明される導体は、単一の導体、複数の導体、一方向導体、又は双方向導体であることに関連して示され又は説明される。しかしながら、異なる実施形態は、導体の実行を変え得る。例えば、分離した一方向導体は、双方向導体よりむしろ用いられ得て、そして逆の場合もある。また、複数の導体は、シリアルに又は時分割多重化する要領で多重信号を転送する単一の導体と置換され得る。同様に、多重信号を搬送する単一の導体は、これらの信号のサブセットを様々な異なる導体に分けられ得る。従って、多くのオプションが信号を転送するため存在する。
用語「アサート」又は「セット(組)」及び「ニゲート」(又は、「デアサート」又は「クリア)が、信号、ステータス・ビット、又は類似の装置をその論理的真状態又は論理的偽状態にすることを指すとき用いられる。論理的真状態が論理レベル1である場合、論理的偽状態は、論理レベル0である。そして、論理的真状態が論理レベル0である場合、論理的偽状態が、論理レベル1である。また、数字の前の「0x」は、その数字がその16進で又は底16の形式で表されていることを示す。数字の前の記号「%」は、その数字がその2進又は底2の形式で表されていることを示す。
前述したように、メモリからレジスタへの及びレジスタからメモリへの多重ベクトル・エレメントの転送に関連するオーバヘッドを低減する必要性が存在する。従って、メモリへ及びそれからのベクトル・エレメントの転送を改善する要領で可能にする様々な異なるベクトル・ロード及び格納命令が、本明細書で説明されるであろう。更に、本明細書で説明される命令の使用は、オーバヘッドの低減を可能にし得て、既存の設計に対して加えられる追加のハードウエアの複雑さは最小である。例えば、多くのタイプのデータ処理システム内で用いられるスカラ・レジスタ・ファイルが、これらの命令と共に用いられ、従って、より高いコストの別々のベクトル・レジスタ・ファイルを必要としない。また、この命令は、実行効率を更に向上させながら、ソフトウエアの複雑さを低減することを可能にし得る。また、本明細書における命令を用いて、例えば、メモリ内のベクトル・エレメントの整列、精度の増大のためメモリ・エレメントのサイズをレジスタ・エレメントの中に拡張するための必要性、任意のベクトル長対レジスタの固定長、又はデータのベクトルを検索/格納するため必要とされるロード/格納命令の数と関連したオーバヘッド(例えば、命令の発行及び実行における)のような様々な発行に対処し得る。また、本明細書における命令を用いて、これらの発行のいずれかの組み合わせ、追加の発行、又は発行の組み合わせに対処し得て、それらは、図1から図35を参照して以下に与えられる説明により理解されるであろう。
図1は、本発明の一実施形態に従ったデータ処理システム10をブロック図形式で示す。データ処理システム10は、プロセッサ14、メモリ12、入力/出力(I/O)16、他の周辺装置18、及びシステム・バス20を含む。メモリ12は、システム・バス20に導体22を介して双方向に結合され、I/O16は、システム・バス20に導体24を介して双方向に結合され、他の周辺装置18は、システム・バス20に導体26を介して双方向に結合され、そしてプロセッサ14は、システム・バス20に導体58を介して双方向に結合される。一実施形態において、他の周辺装置18は、1又はそれより多くの周辺装置を含み得て、そこにおいて、それぞれの周辺装置は、例えば、汎用非同期受信器送信器(UART)、リアル・タイム・クロック(RTC)、キーボード制御器、他のメモリ等のような任意のタイプの周辺装置であることができる。他の周辺装置18の一部又はその全部は、情報を導体62を介してデータ処理システム10の外部へ通信することができてもよい。I/O回路16は、情報を受け取り、そして情報を、例えば導体60を介してデータ処理システム10の外部へ与える任意のタイプのI/O回路を含み得る。メモリ12は、例えば、読み出し専用メモリ(ROM)、ランダム・アクセス・メモリ(RAM)、不揮発性メモリ(例えば、フラッシュ)等のような任意のタイプのメモリであることができる。データ処理システム10は、説明した構成要素以外の他の構成要素を含み得て、又は説明した構成要素より多くの又はより少ない構成要素を含み得る。例えば、データ処理システム10は、任意の数のメモリ又はプロセッサを含み得る。
プロセッサ14は、例えば、マイクロプロセッサ、マイクロコントローラ、ディジタル信号プロセッサ等のような任意のタイプのプロセッサであり得る。一実施形態において、プロセッサ14は、プロセッサ・コアと呼ばれ得る。別の実施形態において、プロセッサ14は、マルチプロセッサ・データ処理システムの中の多くのプロセッサのうちの1つであり得る。更に、同様に説明しないが、プロセッサ14は、パイプライン化されたプロセッサであり得る。図1に示される実施形態において、プロセッサ14は、制御ユニット28、命令ユニット30、実行ユニット32、スカラ・レジスタ・ファイル34、バス・インターフェース・ユニット(BIU)36、及びロード/格納ユニット38を含む。制御ユニット28は、命令ユニット30に導体40を介して双方向に結合され、実行ユニット32に導体42を介して双方向に結合に、スカラ・レジスタ・ファイル34に導体46を介して双方向に結合され、ロード/格納ユニット38に導体48を介して双方向に結合される。実行ユニット32は、スカラ・レジスタ・ファイル34に導体44を介して双方向に結合され、スカラ・レジスタ・ファイル34は、ロード/格納ユニット38に導体50を介して双方向に結合される。BIU36は、命令ユニット30に導体54を介して双方向に結合され、ロード/格納ユニット38に導体52を介して双方向に結合される。プロセッサ14は、導体58に結合されている導体56を介してシステム・バス20と通信することができる。プロセッサ14は、説明した回路より多くの回路を含み得て、その場合、追加の回路もまた導体58を介して結合され得ることに注目されたい。即ち、導体56は、システム・バス20と導体58の全て又はその一部を介して通信し得る。また、プロセッサ14の全て又はその一部は、処理回路と呼ばれ得ることに注目されたい。
動作において、命令ユニット30は、命令をメモリ12のようなメモリからBIU36及びシステム・バス20を介してフェッチし、そして制御情報を制御ユニット28から受け取りそしてそれへ与える。命令ユニット30は、当該技術で既知であるいずれのタイプの命令ユニットであることができ、そして当該技術で既知のように動作し得て、従って、本明細書ではより詳細に説明しない。従って、命令ユニット30は、命令を制御ユニット28に与え、当該制御ユニット28は、これらの受け取られた命令を、例えば実行ユニット32及びロード/格納ユニット38を介して制御し、実行ユニット32及びロード/格納ユニット38の両方は、必要に応じて、直接、又は制御ユニット28を介して、スカラ・レジスタ・ファイル34と通信することができる。例えば、制御ユニット28は、ロード/格納ユニット38及びBIU36を介して、データをメモリ(例えば、メモリ12のような)から、命令を実行することが必要とされるスカラ・レジスタ・ファイル34内のレジスタへロードすることができ、そしてデータをスカラ・レジスタ・ファイル34内のレジスタから、命令を実行することが必要とされるメモリ(例えば、メモリ12のような)に格納することができる。例えば、一実施形態において、ロード/格納ユニット38は、(データを読み出し及び書き込むため)スカラ・レジスタ・ファイル34と導体50を介して、制御ユニット28から導体48を介して与えられる制御情報に基づいて通信することができる。実行ユニット32は、命令ユニット30から受け取られた命令を制御ユニット28により実行することが必要とされるに応じて、スカラ・レジスタ・ファイル34内に格納されたデータを用いて、算術演算、論理演算、シフト演算、又は他の演算を実行し、そしてその結果をスカラ・レジスタ・ファイル34内のレジスタに格納する。実行ユニット32は、例えば、算術論理演算ユニット(ALU)、浮動小数点ユニット等を含み得る。
スカラ・レジスタ・ファイル34は、N個の汎用レジスタ(GPR)を含む。なお、Nは、1又はそれより大きい任意の整数であることができる。一実施形態において、スカラ・レジスタ・ファイル34は、32個の64ビット・レジスタを含む。本明細書で用いられているように、スカラ・レジスタは、1次元マップを有し、従って1行のみのデータを保持するレジスタ(例えば、1×Mビット・レジスタ)を示す。なお、Mは、1又はそれより大きい任意の整数であることができる。一実施形態において、Mは64であり、従って、各レジスタは、64ビットの量を格納することができる。スカラ・レジスタ・ファイル34は、制御情報又はデータを導体46を介して制御ユニット28へ与えそしてそれから受け取ることができる。
プロセッサ14の動作は、一般的に当業者により理解される。従って、プロセッサ14は、図2から図36を参照して説明される様々な実施形態を理解するのに必要である部分を除いて、本明細書ではより詳細に説明しない。また、スカラ汎用レジスタ・ファイルに格納されたオペランドを有するデータ処理システムについての既存の設計は、本明細書で説明されるロード及び格納命令を実行することが必要とされるように変更されることができることに注目されたい。更に、スカラ・レジスタ・ファイルを用い得るので、現在の既存の設計は、本明細書で説明される命令を可能にするため改良され得ることに注目されたい。(しかしながら、本明細書で説明される実施形態は、いずれのタイプのレジスタ・ファイルと共に用いられ得て、そしてスカラ・レジスタ・ファイルのみに制限されないことに注目されたい。)
図2から図11は、例えば、図1のプロセッサ14のような処理回路により実行され得る様々なベクトル・エレメント・ロード及び格納命令を示す。例えば、各命令は、命令ユニット30によりフェッチされることができ、当該命令ユニット30は、それらの命令を適宜に制御ユニット28に与える。従って、制御ユニット28は、データを格納することが必要とされるスカラ・レジスタ・ファイルを用いて、ロード/格納ユニット38及び実行ユニット32に、必要に応じて、受け取られた命令を実行するよう指図することができる。図2から図11に示される命令を用いる事例が、それに続く図面を参照して与えられることに注目されたい。また、本明細書で用いられているように、ベクトル・エレメント(又はレジスタ・エレメント)は、せいぜいスカラGPRのサイズであることができる要素(エレメント)を指すが、しかしまたGPRのサイズより小さいものであることができることに注目されたい。例えば、スカラ・レジスタ・ファイル34が64ビット・レジスタ(M=64)を含む場合、ベクトル・エレメントは、サイズ64ビット又はそれより小さいサイズであることができる。例えば、ベクトル・エレメントは、1個の64ビットGPRが8個のベクトル・エレメントを保持することができるように1バイト(8ビット)であり得る。また、ベクトル・エレメントは、1個の64ビットGPRが4個のベクトル・エレメントを保持することができるように1ハーフワード(16ビット)であり得る。同様に、ベクトル・エレメントは、1個の64ビットGPRが2個のベクトル・エレメントを保持することができるように1ワード(32ビット)であり得る。また、本明細書で用いられているように、バイトは、「b」により指示され、ハーフワードは、「h」により指示され、ワードは、「w」により指示されていることに注目されたい。(代替実施形態では、1ワード又は1ハーフワードは異なって定義され得ることに注目されたい。例えば、1ワードは、32ビットでは無く16ビットを意味する場合もある。しかしながら、本明細書で用いられているように、1ワードは、説明の容易さのため32ビットを指すことにする。)。
図2は、エレメントをメモリからレジスタ・ファイル(例えば、スカラ・レジスタ・ファイル34のような)の中の1個のデスティナーション・レジスタ(宛先レジスタ)にロードするベクトル・エレメント・ロード(load vector elements)(lvex)命令を示す。一実施形態において、例えば、s/uフィールド、msフィールド、dsフィールド等のような追加の制御フィールドを用いて、演算(オペレーション)を更に定義し得る。なお、s/uフィールド、msフィールド、dsフィールドのそれぞれは、図2において、演算子「lvex」に続き、ピリオドにより分けられて示されている。一実施形態においては、これらの制御フィールドのそれぞれが、存在するが、しかしながら、代替実施形態においては、これらの制御フィールドの一部が存在してもよく、またいずれも存在しなくてもよい。一実施形態において、msフィールドは、メモリ・エレメント・サイズ・フィールドに対応し、dsフィールドは、デスティナーション・エレメント・サイズに対応する。例えば、一実施形態において、メモリ・エレメント・サイズ(ms)フィールドは、mb、mh及びmwのうちの1つに設定されて、ロードされるべきメモリ・エレメントがバイト、ハーフワード及びワードのうちのいずれであるかを指示し得る。同様に、デスティナーション・エレメント・サイズ(ds)フィールドを用いて、各ロードされたエレメント(要素)がデスティナーション・レジスタ内で持つであろうサイズを指示する。
図2のlvex命令はまた、3つのオペランド:rD、rA及びrBを含む。命令lvexは、ベクトル・エレメントをメモリからデスティナーション・レジスタrDにロードする。メモリの中の第1のエレメントが、レジスタrAにより指し示され、そして図2の実施形態において、追加のパラメータが、レジスタrBにおいて指定される。従って、rD、rA及びrBのそれぞれは、スカラ・レジスタ・ファイル34内のGPRのうちの1つを指示することができる。レジスタrBに格納されている追加のパラメータは、計数(cnt)値及び刻み幅(stride)値を含み、それによりlvex命令は、「cnt」個のエレメントをメモリ(なお、rAにより指し示される当該メモリの最初)からレジスタrD従って、サイズdsを有するレジスタrDのフィールドを得て、それによりrDにおける各デスティナーション・エレメントは、サイズdsである。
どのようにメモリの中のエレメントがスペース(間隔)を開けて配置されているかを指示する刻み幅値がまた、指定され得る。即ち、メモリの中のエレメントは、サイズms離れた「刻み幅(stride)」単位で、間隔を置いて配置される。例えば、メモリの中のエレメントが隣接して連続している場合、1の刻み幅を用いて、「cnt」個のサイズ「ms」の連続エレメントを得ることができる。例えば、エレメントが3個のエレメント離れて配置されている場合、3の刻み幅が用いられて、それぞれが互いにサイズ「ms」の3単位離れて配置された「cnt」個のエレメントを得ることができる。例えば、msが1ワード(例えば、mw)を指示する場合、3の刻み幅は、rAにより指し示されたメモリ位置から始まるメモリ内の3つ目毎のワードを得るであろう。また、刻み幅値は、符号を有する値であり得て、その場合、負の値は、だんだん高くなるアドレス位置ではなくてだんだん低くなるアドレス位置でエレメントを得るであろうことに注目されたい。
一実施形態において、デスティナーション・サイズ(ds)は、メモリ・エレメント・サイズ(ms)に等しいかそれより大きくあるべきである。デスティナーション・サイズ(ds)がメモリ・エレメント・サイズ(ms)より大きい場合、s/uフィールドを用いて、各メモリ・エレメントを適切に拡張し得る。「s」を用いて、エレメントが符号を付され、従って符号に関して拡張されるべきであることを指示することができ、一方「u」を用いて、エレメントが符号を付されてなく、従ってゼロ拡張される(zero−extend)べきであることを指示することができる。例えば、「lvex.u.mh.dw rD,rA,rB」のケースにおいては、rD内の(サイズ・ワードの)各デスティナーション位置の上位のハーフワードが、以下でより詳細に説明されるように、ゼロにされるであろう。また、一実施形態において、「cnt*ds」がデスティナーション・レジスタrDのサイズより小さい場合、rDの残りの低い桁部分が、ゼロにされる。代替として、例えば、rDの残りの低い桁部分のようなrDのいずれの残りの部分は、任意の所定の値(ゼロ又はいずれの他の所定の値のような値)で満たされ得ることに注目されたい。また、一実施形態において、dsがmsより小さい場合、エレメントのそれぞれは、rDにロードされるとき丸められ又は切り捨てをされることができ、(その場合、lvex命令はまた、格納命令を参照して以下で説明されるように、切り捨て又は丸め制御フィールドを含み得る)。
図示の実施形態において、s/uフィールド、msフィールド及びdsフィールドは、演算コードの一部分又はサブ演算コードとして符号化されることができる。従って、図示の実施形態において、lvex命令は、演算コードを指示するフィールド、rDを指示するフィールド、rAを指示するフィールド、rBを指示するフィールド、及びサブ演算コードを指示するフィールドを含む。しかしながら、代替実施形態において、s/uフィールド、msフィールド及びdsフィールドもまたrBにおいて、cnt及びstrideと共に指示されることができる。
図3は、図2のlvex命令の代替実施形態を示し、そこにおいて、rBが追加のパラメータを含むオペランドとしてrBを指示するよりむしろ、パラメータの全部が、命令演算コード又はサブ演算コードの全部又は一部として与えられ得る。例えば、cnt、stride(刻み幅)、及び制御フィールド(s/u、ms及びds)は全て、命令のサブ演算コード部分内で指示され得る。
制御フィールドs/u、ms及びdsに関して上記で与えられた説明を、本明細書で説明される全てのロード命令に適用する。命令lvexの場合のように、これらの制御フィールドの全部又は一部が本明細書で説明される他のロード命令に存在し得て、又はこれらの制御フィールドのいずれもが本明細書で説明される他のロード命令に存在しない場合がある。また、本明細書における説明に関して、rDは、一般的に、デスティナーション・レジスタを指し、rAは、メモリの中の最初のメモリ・エレメントを指し示し、そしてrBは、命令の中に存在する場合、その命令のための一部又は全ての追加のパラメータを格納することに注目されたい。rBがまた、制御レジスタと呼ばれる場合があり、そしてGPRの1つである必要はないことに注目されたい。同様に、rAは、制御レジスタ又は別のメモリ場所であることができ、GPRの1つである必要はない。また、本明細書で説明される全ての命令(ロード及び格納)において、制御フィールドは、命令の演算コードの一部又はサブ演算コードとして符号化され得るか、又はレジスタrBに配置され得るかのいずれかである。それらが、レジスタrBに配置される場合、制御フィールドは、一般的に、演算子に続き、ピリオドで分けられているように見えないが、しかしレジスタrBの中にのみ見えるであろう。また、より多くのパラメータ又は制御フィールドが必要とされる場合、本明細書における命令のいずれもは、必要ならば命令パラメータ及び制御フィールドを指示するための2以上のレジスタを指示し得て、又は追加の情報が、共通又は排反(disjoint)の格納場所に含まれ得る。
図4は、エレメントをメモリから多重デスティナーション・レジスタ(複数)にロードする多重ベクトル・エレメント・ロード(load multiple vector elements)(lmvex)命令を示す。lvex命令の場合のように、lmvex命令はまた、s/uフィールド、msフィールド及びdsフィールドを含み得て、これらのフィールドのそれぞれが、演算子lmvexに続いて、ピリオドにより分けられているように図4に示されている。図4のlmvex命令はまた、3つのオペランド:rD、rA及びrBを含む。命令lmvexは、「cnt」個のベクトル・エレメントをメモリ(なお、メモリの中の第1のエレメントは、レジスタrAにより指し示される。)から最初のデスティナーション・レジスタrDに、そしてrDに続く必要に応じた数のレジスタにロードし、それによりいずれのデスティナーション・レジスタの各デスティナーション・エレメントは、dsである。例えば、サイズ・ハーフワード(16ビット)の9個のエレメントがrD(ここで、GPRのそれぞれは、64ビットである。)にロードされるべきである場合、3個のGPRが、必要とされる。一実施形態において、rDは、第1のレジスタを指示し、そしてより多くのものが必要とされる場合、追加の連続したレジスタが用いられる。例えば、rDが9個のエレメントのためレジスタR4を指示する場合、レジスタR4、R5及びR6が用いられる。
レジスタrBに格納されている追加のパラメータは、cnt、stride(刻み幅)、skip(スキップ)及びskip_cnt(計数スキップ)を含む。パラメータcnt及びstrideは、図1を参照して上記で説明したものと同じである。即ち、ロードされるべきメモリの中のエレメントは、サイズmsの「刻み幅(stride)」単位離れて配置され得る。lmvex命令は、「skip_cnt」個のエレメントがフェッチされるまで、エレメントをメモリからロードし、(サイズmsの)「stride」個の単位離れて間隔を開けて配置される。この点で、次のエレメントが、サイズmsの「skip」個の単位離れた位置に配置され、そしてskip_cntの経過を追う(例えば、カウンタのような)機構が、リセットされる。従って、「skip_cnt」個のエレメントが(命令の開始以降、又はskip_cntカウンタがリセットされた最後の時間以降)フェッチされる毎に、次のエレメントが、サイズmsの「skip」個(「stride」個ではなく)の単位だけ離れて配置される。一実施形態において、プロセッサ14内のカウンタ(例えば、制御ユニット28内のようなもの)が、「skip_cnt−1」に設定され、そしてカウンタが終わる(ゼロに達する)まで、各フェッチ後に減分され、そして「cnt」個のエレメントがフェッチされるまで、「skip」個の単位だけ離れて配置されたエレメントをフェッチすることを継続する。(代替として、カウンタは、ゼロに設定され、カウンタがskip_cnt−1に達するまで毎度増分されることができる。代替実施形態は、skip_cntの経過を追う他の方法を用い得る。stride(刻み幅)及びskip(スキップ)の両方が符号を付された量であることができることに注目されたい。また、一実施形態において、用いられた最後のデスティナーション・レジスタの中のいずれの残りの未充填のバイトは、「cnt」個のエレメントをメモリからロードした後で、所定の値(例えば、ゼロのような値)で満たされる。
一実施形態において、デスティナーション・サイズ(ds)は、メモリ・エレメント・サイズ(ms)に等しいかそれより大きくあるべきである。デスティナーション・サイズ(ds)がメモリ・エレメント・サイズ(ms)より大きい場合、lvexを参照して上記で説明されたように、s/uフィールドを用いて、各メモリ・エレメントを適切に拡張し得る。しかしながら、一実施形態においては、dsがmsより小さい場合、エレメントのそれぞれは、格納命令を参照して以下で説明されるように、rDにロードされるとき丸められ、又は切り捨てにされることができる。
図5は、図4のlmvex命令の代替実施形態を示し、そこにおいては、rBが追加のパラメータを含むオペランドとしてrBを指示するよりむしろ、全てのパラメータが、命令サブ演算コードの全部又は一部として与えられ得る。例えば、cnt、stride刻、skip、skip_cnt、及び制御フィールド(s/u、ms及びds)は、命令のサブ演算コード又は演算コード部分内で指示され得る。別の実施形態(図示せず)においては、個々の命令パラメータが、命令フィールドに、又はrB内のフィールドに割り当てられ得る。rB内のフィールドへの割り当ては、計算の結果に基づいて又はシステム状態に基づいて動的変更を可能にするパラメータを有することが望ましいとき、用いられ得る。他のパラメータは、静的性質であり、従って、命令内のフィールドの中に符号化され得る。
本明細書で説明される残りの命令に関しては、いずれの追加のパラメータが、rBに配置され、そこにおいて、rBは、命令に対するオペランドとして与えられる。しかしながら、代替実施形態においては、命令は、上記で説明されたように、異なるフォーマットを有し得ることが理解される筈である。
図6は、別の多重ベクトル・エレメント・ロード(load multiple vector elements)(lmvex2)命令を示し、当該別の多重ベクトル・エレメント・ロード(lmvex2)命令はまた、エレメントをメモリから多重デスティナーション・レジスタ(複数)にロードする。前述した命令の場合のように、lmvex2命令はまた、s/uフィールド、msフィールド、及びdsフィールドを含み得て、当該s/uフィールド、msフィールド、及びdsフィールドのそれぞれが、図6において、演算子「lmvex2」に続いて、ピリオドにより分けられて示されている。図6のlmvex2命令はまた、オペランド:rD、rA、及びrBを含む。命令lmvex2は、「cnt」個のベクトル・エレメントをメモリ(なお、メモリの中の最初のエレメントが、レジスタrAにより指し示される。)からデスティナーション・レジスタrD(及び、rDに続く必要に応じた数のレジスタ)にロードし、それにより、いずれのデスティナーション・レジスタの中の各デスティナーション・エレメントが、サイズdsである。例えばサイズ・ハーフワード(16ビット)の9個のエレメントがrD(ここで、GPRのそれぞれは64ビットである。)にロードされることになる場合、少なくとも3個のGPRが、必要とされ、そして更に説明されるように、3個を越えた追加のGPRがまた、必要とされる。一実施形態において、rDは、最初のレジスタを指示し、そしてより多くのレジスタが必要とされる場合、追加の連続したレジスタが、用いられる。例えば、rDが9個のエレメントのためレジスタR4を指示する場合、少なくともR4、R5及びR6が、用いられる。
レジスタrBに格納されているlmvex2に関する追加のパラメータは、cnt、rcnt、stride、及びskipを含む。パラメータcnt及びstrideは、lmvexを参照して上記で説明したものと同じである。即ち、ロードされるべきメモリの中のエレメントは、サイズmsの「stride」単位だけ離れて配置され得て、そしてcntは、ロードされるべきエレメントの合計数を定義する。rcntパラメータは、各レジスタにロードされるべきデスティナーション・エレメントの最大数を定義する。(従って、必要とされるレジスタの合計数は、cnt及びrcntの両方に依存する。)lmvex2命令は、合計「cnt」個のエレメントをメモリから1又はそれより多くの(必要に応じた数の)デスティナーション・レジスタにロードし、そこにおいて、「rcnt」個のエレメントのみが、各デスティナーション・レジスタにロードされる。(従って、一実施形態において、rcntは、サイズdsのデスティナーション・エレメントの合計数に等しいか又はそれより小さく、その合計数個のデスティナーション・エレメントは、単一のGPR内に含まれ、そしてrcntはまた、cntに等しいか又はそれより小さい。
例えば、lmvex2命令は、「rcnt」個のエレメントが単一のレジスタにフェッチされるまで、(サイズmsの)「stride」個の単位だけ離れて間隔を開けられて配置されているエレメントをメモリからデスティナーション・レジスタにロードする。この点で、「cnt」個の合計エレメントが依然フェッチされていない場合、次のエレメントが、サイズmsの「skip」個の単位だけ離れて配置される。次いで、(サイズdsの)「stride」個の単位だけ離れて間隔を開けられたメモリ位置からのエレメントは、「rcnt」個のエレメントが別のデスティナーション・レジスタにフェッチされるまで(、又は「cnt」個のエレメントがフェッチされるまで、のうちのいずれかが最初に生じるまで)その別のデスティナーション・レジスタ(例えば、rD+1のようなもの)にロードされる。「cnt」個のエレメントがフェッチされた後で、「cnt」個のエレメントが依然フェッチされなかった場合、「skip」個の単位だけ離れて間隔を開けられた配置された次のエレメントを例えばrD+2にロードすることを継続する。「cnt」個のエレメントに達したとき、ロードすることを停止する。従って、所与のデスティナーション・レジスタのためのメモリの中のエレメントは、「stride」個のms単位だけ離れて間隔を開けられて置かれ、そして連続のレジスタのためのエレメントは、サイズmsの「skip」個の単位を前のデスティナーション・レジスタの最後のエレメントのアドレスに加えた後でフェッチされることに注目されたい。また、stride及びskipの両方が、符号を付された量であり得て、負のstride及びskipを可能にすることに注目されたい。
代替実施形態において、skip_cntパラメータを用いて得て、それにより、skip_cnt個のエレメントがフェッチされた後で、次のエレメントが、サイズmsの「skip」個の単位だけ離れて配置される。このようにして、「rcnt」個のエレメントがデスティナーション・レジスタにロードされた後で、連続のレジスタのための次のエレメントは、skip_cnt個のエレメントがロードされた場合skipに基づいて、又はskip_cnt個のエレメントがまだロードされていない場合にはstrideに基づいて、命令の開始以降、又はskip_cntが最後にリセットされた以降フェッチされる。
lvexを参照して上記で説明したように、プロセッサ14内(例えば、制御ユニット28内のような)のカウンタを用いて、ベクトル・エレメントのロード中に「cnt」の経過を追跡し得る。同様に、プロセッサ14内のカウンタを用いて、各デスィテネーション・レジスタのロード中に「rcnt」の経過も追跡し得る。代替実施形態は、cnt及びrcntの経過を追う他の方法を用い得る。また、一実施形態において、「rcnt」個のエレメントがロードされた後の各デスティナーション・レジスタの中のいずれの残りのバイトが、例えば、ゼロのような所定の値で満たされる。また、一実施形態において、用いられた最後のデスティナーション・レジスタの中の残りのバイトは、「cnt」個のエレメントをメモリからロードした後で(例えば、ゼロのような)所定の値で満たされる。
一実施形態において、デスティナーション・レジスタ(ds)は、メモリ・エレメント・サイズ(ms)に等しいか又はそれより大きくあるべきである。デスティナーション・サイズ(ds)がメモリ・エレメント・サイズ(ms)より大きい場合、上記の命令を参照して先に説明したように、s/uフィールドを用いて、各メモリ・エレメントを適切に拡張し得る。しかしながら、一実施形態において、dsがmsより小さい場合、エレメントのそれぞれは、格納命令を参照して以下で説明されるように、rDにロードされるとき、丸められ又は切り捨てをされることができる。
図7は、ベクトル・エレメントのストリームのロード(load stream of vector elements)(lstmvex)命令を示し、当該ベクトル・エレメントのストリームのロード(lstmvex)命令は、ベクトル・エレメントのストリームをメモリから、デスティナーション・レジスタと関連した名前を付されたストリームの中にロードすることを開始する。前述した命令の場合のように、lstmvex命令はまた、s/uフィールド、msフィールド及びdsフィールドを含み得て、それぞれのフィードが、演算子「lstmvex」に続いて、ピリオドで分けられて図7に示されている。図7のlstmvex命令はまた、3つのオペランド:rD、rA及びrBを含む。lstmvex命令のための追加のパラメータは、cnt、rcnt、skip、及びskip_cntを含む。パラメータcnt、rcnt、stride、skip、及びskip_cntは、一般的に、lvex、lmvex、及びlmvex2を参照して上記で説明したのと同じである。
lstmvex命令は、「cnt」個の合計エレメントをメモリからrDの多重インスタンスにロードし(そこにおいて、メモリの中の第1のエレメントは、レジスタrAにより指し示される。)、それによりデスティナーション・レジスタの中の各デスティナーション・エレメントは、サイズdsである。cnt及びrcntの値は、目標にされるrDのインスタンスの数を決定する。lstmvex命令は、「skip_cnt」個のエレメントがフェッチされるまで、サイズmsの「stride」単位だけ離れて間隔を開けられて置かれたベクトル・エレメントをメモリからロードする。この点で、「skip*ms」が、フェッチされた最後のエレメントのアドレスに(「stride*ms」の代わりに)加えられて、ロードされるべき次のエレメントのアドレスを得る。また、この点で、skip_cntの経過を追う機構(例えば、カウンタのようなもの)がリセットされる。従って、「skip_cnt」個のエレメントが、(命令の開始以降、又はskip_cntカウンタがリセットされた最後の時間以降)フェッチされる毎に、次のエレメントの位置が、「stride」パラメータよりむしろ「skip」パラメータにより指示される。
「rcnt」パラメータは、1レジスタ・インスタンス当たりのデスティナーション・エレメントの数を定義する。(従って、一実施形態においては、rcntは、単一のGPR内のサイズdsのデスティナーション・エレメントの合計数に等しいか又はそれより小さく、そしてrcntは、cntに等しいか又はそれより小さい。)例えば、lstmvex命令は、「rcnt」個のエレメントがフェッチされるまで、エレメントをメモリからrD(即ち、rDの第1のインスタンス)に(前述したパラメータstride、skip、及びskip_cntに従って)ロードする。この点で、「cnt」個のエレメントが依然フェッチされていなかった場合、次のエレメントは、サイズmsの「stride」個の単位だけ離れて配置され(、又はskip_cnt個のエレメントがフェッチされた場合は、次のエレメントは、サイズmsの「stride」個の単位よりむしろ「skip」個の単位だけ離れて配置される)。次いで、lstmvex命令は、「rcnt」個のエレメントがフェッチされるまで(、又は「cnt」個のエレメントがフェッチされるまでのうちのいずれかが最初に生じるまで)エレメントをメモリからrDの異なるインスタンス(即ち、rDの第2のインスタンス)に(パラメータstride、skip、及びskip_cntに従って)ロードする(即ち、rDの前の値をオーバライトする)ことを継続する。「rcnt」個のエレメントがフェッチされた後で、「cnt」個のエレメントが依然フェッチされない場合、次のエレメントをrD(rDの別のインスタンス)の中へロードすることが継続する。「cnt」個のエレメントがフェッチされたとき、ロードすることが停止される。rDの各インスタンスは、メモリからフェッチされたrcnt個のエレメントの一意の組に対応する。rDの各インスタンスがデキュー(dequeu)されるので、エレメントのストリームの合計cnt個のエレメントがロードされるまで、当該エレメントのストリームの中のrcnt個のエレメントの次の組を次のインスタンスにロードする。
一実施形態において、rDのインスタンスは、後続の命令においてrDの使用又は位置に基づいてデキューされる。例えば、一実施形態において、rDのインスタンスは、rDが後続の命令において特定のソース・レジスタとして用いられる場合デキューされる。従って、その後続の命令が(rDを特定のソース・レジスタとして用いて)実行された後で、次の「rcnt」個のエレメントは、(「rcnt」個のエレメントが依然として到着されていないと仮定して、)rDにロードされるであろう。しかしながら、rDが特定のソース・レジスタとして用いられない場合(例えば、それが異なるソース・レジスタである場合、又はそれがデスティナーション・レジスタである場合、)rDは、デキューされず、そして次の「rcnt」個のエレメントは、まだrDにロードされない。代替実施形態において、デキューするか又はしないかのオプション(選択)は、他の方法で、例えば、命令内のフラグによる、又は異なる演算コード(例えば、デキューすることを求めて呼ぶ特別のサブセットの命令に対応するようなもの)を用いることによるような方法で、指示される。オプションのデキューすることの例は、以下で、図23から図26を参照して説明されるであろう。
上記の命令を参照して上記で説明したように、プロセッサ14内のカウンタ(例えば、制御ユニット28のようなもの)を用いて、ベクトル・エレメントのロード中に「cnt」の経過を追跡し得る。同様に、プロセッサ14内のカウンタを用いて、各デスティナーション・レジスタのロード中に「rcnt」の経過も追跡し得る。また、カウンタを用いて、skip_cntの経過を追跡し得る。代替実施形態は、cnt、rcnt、及びskip_cntの経過を追う他の方法を用い得る。また、一実施形態において、「rcnt」個のエレメントがロードされた後の各デスティナーション・レジスタ又はレジスタ・インスタンスの中のいずれの残りのバイトが、所定の値、例えば、ゼロのような値をロードされ、又はその値で満たされる。また、一実施形態において、用いられた最後のデスティナーション・レジスタ又はレジスタ・インスタンスの中の残りのバイトは、「cnt」個のエレメントをメモリからロードした後で、所定の値(例えば、ゼロのような値)で満たされる。また、stride及びskipの両方が符号を付された量であり得て、負のstride及びskipが可能であることに注目されたい。
一実施形態において、デスティナーション・サイズ(ds)は、メモリ・エレメント・サイズ(ms)に等しいか又はそれより大きくあるべきである。デスティナーション・サイズ(ds)がメモリ・エレメント・サイズ(ms)より大きい場合、s/uフィールドを用いて、上記の命令を参照して上記で説明したように、各メモリ・エレメントを適切に拡張し得る。しかしながら、一実施形態において、dsはmsより小さい場合、エレメントのそれぞれは、rDにロードされるとき丸められ又は切り捨てにされることができる。
代替実施形態において、lstmvex命令の個々のパラメータのそれぞれが、任意であり得て、そしてこれはまた、例えば、lvex命令、lmvex命令及びlmvex2命令のような、本明細書で説明される他の命令の実施形態を有するケースであり得る。
図8は、エレメントをソース・レジスタからメモリへ格納するベクトル・エレメントの格納(store vector elements)(stvex)命令を示す。stvex命令は、lvex命令の格納相手方と考えられ得る。一実施形態において、stvex命令は、s/uフィールド、msフィールド、ssフィールド、及びh/lフィールドのような、追加の制御フィールドを用い、これらのフィールドのそれぞれは、図8において、演算子「stvex」に続いて、そしてピリオドにより分離されて示されている。一実施形態において、これらの制御フィールドのそれぞれが、存在する。しかしながら、代替実施形態において、これらの制御フィールドの一部のみが存在し、又は全く無い場合がある。一実施形態において、s/uフィールド(符号付き又は符号なしに拡張)及びmsフィールド(メモリ・サイズ)は、ロード命令を参照して上記で説明したものと同じである。一実施形態において、ssフィールドは、ソース・レジスタの各ソース・エレメントのサイズを指示するソース・エレメント・サイズ・フィールドに対応する。例えば、一実施形態において、ssフィールドは、sb、sh、又はswのうちの1つに設定されて、格納されるべきソース・エレメントがそれぞれバイト、ハーフワード、又はワードであるかどうかを指示し得る。
図8のstvex命令はまた、3つのオペランド:rS、rA及びrBを含む。図8の実施形態において、追加のパラメータが、レジスタrBで指定され、そこにおいてこれらの追加のパラメータは、cnt及びstrideを含む。(従って、上記のロード命令の場合のように、rS、rA及びrBのそれぞれは、スカラ・レジスタ・ファイル34内のGPRのうちの1つを指示することができる。)stvex命令は、「cnt」個のサイズssのエレメントをソース・レジスタrSからメモリへ格納し、そこにおいて、最初のエレメントは、レジスタrAにより指し示されたメモリ位置に格納されることになり、それによりメモリの中の各デスティナーション・エレメントは、サイズmsを有し、(そして、s/uフィールド及びh/lフィールドにより指示されるように、任意に切り捨て又は拡張される)。
また、メモリのエレメントが間隔を開けて置かれることになる仕方を指示するstride値が、指定され得る。即ち、メモリのエレメントは、格納されるとき、サイズmsの「stride」単位離れて間隔を開けて置かれることになる。例えば、1のstrideを用いて、「cnt」個のサイズ「ms」の連続のエレメントを格納することができる。同様に、3のstrideを用いて、「cnt」個のサイズ「ms」のエレメントをメモリに格納することができ、それぞれが互いにサイズ「ms」の3単位離れて間隔を開けて置かれる。また、stride値が、符号を付された値であり得ることに注目されたい。
一実施形態において、h/lフィールドは、切り捨て制御フィールドである。例えば、ssがmsより大きい(即ち、ソース・サイズがメモリ・サイズより大きい)場合、h/lフィールドを用いて、ソース・エレメントが切り捨てられることになる仕方を指示することができる。例えば、h/lフィールドが「h」である場合、ソース・エレメントの低い次数部分が、切り捨てられる。しかしながら、h/lフィールドが「l」である場合、ソース・エレメントの高い次数部分が、切り捨てられる。代替実施形態において、stvex命令はまた、(切り捨て制御フィールドに加えて又はその代わりに)丸め制御フィールドを含み得て、それにより、例えば、ssがmsより大きい場合、値は、切り捨てをされるよりむしろ丸められ得る。例えば、一実施形態において、ソース・エレメントの高い次数部分が、ソース・エレメントの低い次数部分の値に基づいて丸められ得る。
一実施形態において、ソース・エレメント・サイズ(ss)がメモリ・エレメント・サイズ(ms)より小さい場合、s/uフィールドを用いて、メモリに格納されたとき、各ソース・エレメントを適切に拡張し得る。「s」を用いて、エレメントが符号を付され、従って符号について拡張されるべきであることを指示することができる、一方「u」を用いて、エレメントに符号が付されず、従ってゼロ拡張されるべきであることを指示することができる。
図示の実施形態において、本明細書で説明される格納命令のうちのいずれの格納命令のs/uフィールド、msフィールド、ssフィールド、及びh/lフィールドは、演算コード又はサブ演算コードとして符号化されることができる。従って、図示の実施形態において、stvex命令は、演算コードを指示するためのフィールド、rSを指示するためのフィールド、rAを指示するためのフィールド、rBを指示するためのフィールド、及びサブ演算コードを指示するためのフィールドを含む。しかしながら、代替実施形態において、s/uフィールド、h/lフィールド、msフィールド、及びssフィールドがまた、rBで、cnt及びstrideと一緒に指示されることができる。また、ロード命令の場合のように、追加のパラメータのそれぞれがまた、rBのようなレジスタを指定する必要なしに、演算コードの一部又はサブ演算コードとして符号化され得る。従って、代替実施形態において、本明細書で説明される格納命令のいずれも、様々な違ったフォーマットを有し得ることに注目されたい。また、格納命令は、いずれの追加のパラメータがレジスタrBに格納されることに関して説明されるであろう。(前述したように、複数のレジスタ又は格納場所は、追加のパラメータ及び制御フィールドが必要とされる場合上記命令の中で指示されることができる。)。
制御フィールドs/u、ms、ss及びh/lに関して上記で与えられた記載を、本明細書で説明される全ての格納命令に適用する。命令stvexの場合のように、これらの制御フィールドの全て又は一部が、本明細書で説明される他の格納命令に存在し得て又はこれらの制御フィールドがどれも本明細書で説明される他の格納命令に存在しなくてもよい。本明細書における説明に対して、rSが、一般的にソース・レジスタと呼ばれ、rAが、最初のエレメントが格納されることになるメモリの中の位置を指し示し、そしてrBは、命令の中に存在する場合、その命令の一部又は全ての追加のパラメータを保持する。
図9は、エレメントを多重ソース・レジスタからメモリへ格納する多重ベクトル・エレメントの格納(store multiple vector elements)(stmvex)命令を示す。stmvex命令は、lmvex命令の格納相手方と考えられ得る。一実施形態において、stmvex命令は、s/uフィールド、ssフィールド、dsフィールド、及びh/lフィールドのような追加の制御フィールドを用い、これら制御フィードのそれぞれが、図9において、演算子「stmvex」に続いて、ピリオドにより分離されて示されている。stvex命令に関するこれらのフィールドに対して上記で与えられた説明がまた、ここで、stmvex命令に適用される。
図9のstmvex命令はまた、3つのオペランド:rS、rA及びrBを含む。図9の実施形態において、追加のパラメータが、レジスタrBで指定され、そこにおいて、これらの追加のパラメータは、cnt、stride、skip、及びskip_cntを含む。stmvex命令は、「cnt」個のサイズssのエレメントを多重ソース・レジスタrS(及び、必要に応じて、rS+1、rS+2のようなrSに続くレジスタ)からメモリへ格納し、そこにおいて、格納されるべき最初のエレメントのアドレスは、レジスタrAにより指し示され、そしてそれによりメモリの各エレメントは、サイズmsを有し、(そしてs/uフィールド及びh/lフィールドにより指示されるように、任意に切り捨て又は拡張される)。
stvexの場合のように、stride値は、メモリのエレメントが間隔を開けて置かれる仕方を指示し得る。従って、rSからのソース・エレメントが、メモリに格納され、それにより、それらは、「skip_cnt」個のエレメントが格納されるまで、「stride」個の(サイズmsの)単位離れて配置される。この点で、「skip*ms」は、(「stride*ms」の代わりに、)格納された最後のエレメントのアドレスに加えられて、格納されるべき次のエレメントのアドレスを得る。また、この点で、skip_cntの経過を追うため用いられた機構(例えば、カウンタのようなもの)が、リセットされる。従って、「skip_cnt」個のエレメントが、(命令の開始以降、又はskip_cntカウンタがリセットされた以降)格納される毎に、格納されるべき次のレメントの位置が、strideパラメータよりむしろskipパラメータにより指示される。rSからのソース・エレメントがメモリに格納された後で、次のソース・レジスタ(例えば、rS+1のようなもの)からのソース・エレメントは、「cnt」個のエレメントが格納されるまで、stride、skip及びskip_cntパラメータに基づいてメモリに格納される。
ロード命令に関して上記で説明したように、プロセッサ14内のカウンタ(例えば、制御ユニット28におけるようなもの)を用いて、cnt及びskip_cntの経過を適切に追跡し得る。例えば、カウンタを用いて、「skip_cnt」個のエレメントを指示し得て、そこにおいて、「skip_cnt」個のエレメントが格納された後で、カウンタは、リセットされ、そして次の「skip_cnt」個のエレメントが、その開始がskipにより指示される位置に格納される。これは、例えば、「cnt」個のエレメントが格納されるまで(それは、例えば、別のカウンタにより指示され得る。)継続し得る。代替実施形態は、cnt及びskip_cntの経過を追う他の方法を用い得る。
一実施形態において、ssがmsより小さい場合、各ソース・エレメントは、(stvexに関して説明したように)s/uフィールドにより指示されるように、適切に拡張されて、メモリ・デスティナーション・エレメントを生成することに注目されたい。また、一実施形態において、ssがmsより大きい場合、各ソース・エレメントは、(stvexに関して説明したように)h/lフィールドにより指示されるように、適切に切り捨てられて、メモリ・デスティナーション・エレメントを生成する。
図10は、エレメントを多重デスティナーション・レジスタからメモリへ格納する別の多重ベクトル・エレメントの格納(store multiple vector elements)(stmvex2)命令を示す。stmvex2命令は、lmvex2命令の格納相手方と考えられ得る。一実施形態において、stmvex2命令は、s/uフィールド、ssフィールド、dsフィールド及びh/lフィールドのような追加の制御フィールドを用い、これら制御のそれぞれが、図10において、演算子「stmvex2」に続いて、ピリオドにより分離されて示されている。stvex命令及びstmvex命令に関するこれらのフィールドについて上記で与えられた説明がまた、ここでstmvex2命令に適用される。
図10のstmvex2命令はまた、3つのオペランド:rS、rA及びrBを含む。図10の実施形態において、追加のパラメータは、レジスタrBにおいて指定され、そこにおいて、これらの追加のパラメータは、cnt、rcnt、stride、及びskipを含む。stmvex2命令は、「cnt」個のサイズssのエレメントを多重ソース・レジスタrS(及び、必要に応じて、rS+1、rS+2のようなrSに続くレジスタ)からメモリへ格納し、そこにおいて、格納されるべき最初のエレメントのアドレスは、レジスタrAにより指し示され、そしてそれにより、メモリの各エレメントは、サイズmsを有し(、及びs/uフィールド及びh/lフィールドにより指示されるように、任意に切り捨て又は拡張される)。rcntパラメータは、格納されるべき1ソース・レジスタ当たりのソース・エレメントの数を定義する。
stmvexの場合のように、stride値は、メモリの中のエレメントが間隔を開けて置かれる仕方を指示し得る。従って、rSからのソース・エレメントは、それらが「stride」個の(サイズmsの)単位離れて配置されるようにメモリに格納される。一実施形態において、「rcnt」個のエレメントを所与のソース・レジスタ(rS)から格納した後で、残りのエレメントが格納されることになる場合、「skip*ms」が、(「stride*ms」の代わりに)格納された最後のエレメントのアドレスに加えられて、次のエレメントのアドレスを得る。次いで、次のソース・レジスタ(例えば、rS+1のようなもの)からの「rcnt」個のソース・エレメントは、指示された「stride」値を用いて、メモリに格納される。これは、「cnt」個のエレメントが格納されるまで継続する。一実施形態において、「rcnt*ss」がソース・レジスタのサイズより小さい場合、各ソース・レジスタの残りの低い次数部分が、無視されることに注目されたい。また、「stride」及び「skip」が、符号を付された量であり、従って、負のstride及びskipが可能であることに注目されたい。
代替実施形態において、また、skip_cntパラメータを用い、それにより、「skip_cnt」個のエレメントが格納された後で、次のエレメントが、(サイズmsの「stride」個の単位よりむしろ)サイズmsの「skip」個の単位離れて配置されることに注目されたい。このようにして、「rcnt」個のエレメントがメモリに格納された後で、連続のレジスタからの次のエレメントは、「skip_cnt」個のエレメントが格納された場合skipに基づいて、又は「skip_cnt」個のエレメントが命令の開始以降又はskip_cntが最後にリセットされた以降まだ格納されていない場合strideに基づいて、メモリの中のある位置に格納される。
ロード命令に関して上記で説明したように、プロセッサ14内のカウンタ(例えば、制御ユニット28におけるようなもの)を用いて、cnt及びrcntの経過を適切に追跡し得る。代替実施形態は、cnt及びrcntの経過を追う他の方法を用い得る。
一実施形態において、ssがmsより小さい場合、各ソース・エレメントは、(stvexに関して説明したように)s/uフィールドにより指示されるように、適切に拡張されて、メモリ・デスティナーション・エレメントを生成する。また、一実施形態において、ssがmsより大きい場合、各ソース・エレメントは、(stvex及びstmvexに関して説明したように)h/lフィールドにより指示されるように、適切に切り捨てをされて、メモリデスティナーション・エレメントを生成する。また、丸めが、stvex命令に関して先に説明したように、任意に指定され得る。
図11は、ベクトル・エレメントのストリームを、名前を付けられたストリームからメモリへ格納することを開始するベクトル・エレメントのストリームの格納(store stream of vector elements)(ststrmvex)命令を示す。ststrmvex命令は、lstmvex命令の格納相手方と考えられ得る。一実施形態において、ststrmvex命令は、s/uフィールド、ssフィールド、dsフィールド及びh/lフィールドのような追加の制御フィールドを用い、これらの制御のそれぞれが、図11において、演算子「ststrmvex」に続いて、ピリオドにより分離されて示されている。stvex命令、stmvex命令及びstmvex2命令に関してこれらのフィールドについて上記で与えられた説明がまた、ここでststrmvex命令に適用される。
図11のststrmvex命令はまた、3つのオペランド:rS、rA及びrBを含む。図11の実施形態において、追加のパラメータが、レジスタrBにおいて指定され、そこにおいて、これら追加のパラメータは、cnt、rcnt、skip、及びskip_cntを含む。ststrmvex命令は、「cnt」個の合計エレメントを有するソース・レジスタrSの多重インスタンスをメモリに格納し、そこにおいて、格納されるべき最初のエレメントのアドレスは、rAにより指し示される。従って、「cnt」パラメータは、格納されるべきエレメントの合計数を定義し、そして「rcnt」パラメータは、ソース・レジスタrSの1インスタンス当たりのソース・エレメントの数を定義する。ststrmvex命令は、rSからのエレメント(即ち、rSの最初のエレメント)をメモリに格納し、それによりそれらのエレメントは、「skip_cnt」個のエレメントが格納されるまで、「stride」個の(サイズmsの)単位離れて間隔を開けられて置かれる。この点で、「skip*ms」が、(「stride*ms」の代わりに)格納された最後のエレメントのアドレスに追加されて、次のエレメントのアドレスを得る。また、この点で、skip_cntの経過を追う機構(例えば、カウンタのようなもの)は、リセットされる。従って、「skip_cnt」個のエレメントが、(命令の開始以降、又はskip_cntカウンタがリセットされた以降)格納される毎に、次のエレメントの位置が、strideパラメータよりむしろskipパラメータにより指示される。
また、「rcnt」個のエレメントをrSの所与のインスタンスから格納した後で、エレメントが格納されるため残っている(即ち、「cnt」個のエレメントが格納されていない)場合、(「skip_cnt」個のエレメントが格納されていない(その場合に、「stride*ms」よりむしろ「skip*ms」が格納された最後のエレメントのアドレスに加えられる。)ならば、)「stride*ms」が、格納された最後のエレメントのアドレスに加えられて、rSの次のインスタンス(これは、例えば、rSをデスティナーション・レジスタとして用いる命令の実行後に格納される。)から格納されるべき最初のエレメントのアドレスを得る。例えば、一実施形態において、インスタンスは、rSを命令のためのデスティナーション・レジスタとして用いるときデキューされる。例えば、rSが後続の命令のためのデスティナーション・レジスタとして用いられ、そして「cnt」個のエレメントがまだ格納されてない場合、rS、即ち、後続の命令のデスティナーション・レジスタからの「rcnt」個のエレメント(これは、例えば、後続の命令の結果の全て又は一部を含む。)は、strideパラメータ、skipパラメータ、及びskip_cntパラメータに従ってメモリに格納される。この実施形態において、rSを命令のデスティナーション・レジスタとして用いない場合、それは、その命令の実行の際に、エンキュー(enqueu)されず、(従って、ベクトル・ストリームの一部として格納されない)。代替実施形態において、命令の中のフラグ、又は演算コード(例えば、エンキューすることを求めて呼ぶ命令の特別なサブセットに対応するようなもの)のような他の機構を用いて、rSのインスタンスがエンキューされるべきかを指示し得ることに注目されたい。
一実施形態において、「rcnt*ss」がソース・レジスタのサイズより小さい場合、そのソース・レジスタの残りの低い次数部分が、無視されることに注目されたい。また、「stride」及び「skip」は、符号を付された量であり得て、従って、負のstride及びskipを可能にする。
ロード命令に関して上記で説明したように、プロセッサ14内のカウンタ(例えば、制御ユニット28におけるようなもの)を用いて、cnt、rcnt、skip、及びskip_cntの経過を適切に追跡し得る。代替実施形態は、これらのパラメータの経過を追う他の方法を用い得る。
一実施形態において、ssがmsより小さい場合、各ソース・エレメントは、(stvexに関して説明したように)s/uフィールドにより指示されるように、適切に拡張されて、メモリ・デスティナーション・エレメントを生成する。また、一実施形態において、ssがmsより大きい場合、各ソース・エレメントは、(stvex及びstmvexに関して説明したように)h/lフィールドにより指示されるように、適切に切り捨てをされて、メモリ・デスティナーション・エレメントを生成する。代替として、丸めを用いて、メモリ・デスティナーション・エレメントを生成し得る。
上記で説明した様々の異なるロード命令の例が、図12から図16を参照して説明されるであろう。図12は、メモリの一部分100を示し、そのメモリの一部分100は、例えば、図1のメモリ12の全て又は一部分に対応し得る。メモリ部分100は、所与の実施形態の実際の形態が異なり得るにも拘わらず、説明の容易さのため、128ビット幅メモリとして示される。例えば、メモリ部分100は、位置0x12−0x16に格納される第1行(ハーフワードA、B及びCに対応する)と、位置0x22−0x26に格納される第2行(ハーフワードD、E及びFに対応する)と、位置0x32−0x36に格納される第3行(ハーフワードG、H及びIに対応する)とを有するマトリックス102を含む。メモリ部分100は、位置0x54−0x58に格納される第1行(ハーフワードK、L及びMに対応する)と、位置0x64−0x68に格納される第2行(ハーフワードN、O及びPに対応する)と、位置0x74−0x78に格納される第3行(ハーフワードQ、R及びSに対応する)とを有するマトリックス106を含む。メモリ部分100は、位置0x8A−0x8Eに格納される第1行(ハーフワードaa、bb及びccに対応する)と、位置0x9A−0x9Eに格納される第2行(ハーフワードdd、ee及びffに対応する)と、位置0xAA−0xAEに格納される第3行(ハーフワードgg、hh及びiiに対応する)とを有するマトリックス108を含む。メモリ部分100は、位置0x46−0x4Eに格納されるベクトル104(ハーフワードpp、qq、rr及びttに対応する)を含む。メモリ部分100はまた、位置0xA2、0xA3、0xA4及び0xA5のそれぞれに格納されるバイトサイズ・エレメントT、U、V及びWを含む。
代替実施形態において、メモリ部分100は、様々にアドレスされ得ることに注目されたい。また、メモリ部分100は、任意のサイズでよく、そしていずれのタイプの情報を保持し得て、そしてデータ処理システム内の任意の場所に配置され得る。
上記で説明したロード命令及び格納命令を用いて、例えば、マトリックスが図12のマトリックス102及び106として格納されるとき、マトリックス演算を実行し得る。即ち、マトリックス102及び106のそれぞれが、3×3の2次元アレイとして格納されることに注目されたい。また、一実施形態において、マトリックス演算の結果がまた、同じフォーマットで、マトリックス108のような3×3の2次元アレイとして格納され得る。従って、次の擬似コードを用いて、マトリックス102及びマトリックス106の第1行の追加を実行して、その結果生じる第1行マトリックス108を得ることができる。
この例において、R7が、マトリックス102の第1行の開始アドレス(0x12)を格納し、そしてR8が、rBとして用いられて、図2及び図3に関して上記で説明したcntパラメータ及びstrideパラメータを格納することに注目されたい。同様に、R9は、マトリックス106の第1行の開始アドレス(0x54)格納し、そしてr10が、rBとして用いられて、cntパラメータ及びstrideのパラメータを格納する。R11を用いて、R2の第1のエレメントが格納されることになる位置(0x8A)を格納し、そしてR12を用いて、cntパラメータ及びstrideパラメータを格納する。
図13は、上記の擬似コードの実行後に、レジスタ・ファイル(例えば、図1のスカラ・レジスタ・ファイル34のようなもの)を示す。マトリックス102のA、B及びCが、第1のlvex命令の実行でもってR0にロードされ、R0の最後のフィールドが、所定の値(例えば、この実施形態においてはゼロ)で満たされる。同様に、マトリックス106のK、L及びMは、第2のlvex命令の実行でもってR1にロードされる。従って、マトリックスの第1行のそれぞれが、cnt及びstrideを指定することを可能にするまさに単一の命令でもって容易にロードされ得る。add.h命令は、R0及びR1の中の4つの独立のハーフワード・エレメントを加算し、そしてその結果生じる4つのハーフワード・エレメントをR2に置く。lvex命令がR0及びR1の最後の未使用フィールドをゼロで満たすこと(cnt*dsが64ビットより小さいので、R0及びR1の幅)を可能にしたので、2つのレジスタの加算(addition)は、R2の不所望のフィールドの中にゼロをもたらしたことに注目されたい。このようにして、R2の不所望のフィールドに未知の値を有する(又は、未知の値の追加に起因して起こる不所望の例外的条件を有する)よりむしろ、所定の値(この例ではゼロ)であることが既知である。次いで、R2の最初の3個のフィールドが、aa=A+K、bb=B+L、及びcc=C+Hとなるようにstvex命令を用いて、メモリに格納される。
次いで、マトリックス102及び106の加算が、次の擬似コードにより完了されることができる。
最初の3つの加算命令は、R7,R9及びR11の値を増分し、それによりそれらは、それぞれ、マトリックス102,106及び108のそれぞれの第2行の最初のエレメントを指し示す。図14は、上記コードの実行後の図13のレジスタ・ファイルを示す。最初の2つのlvex命令の後に、D,E及びFが、R0にロードされ、そしてN、O及びPが、R1にロードされる。add.h命令は、R0及びR1の中の4つの独立のハーフワード・エレメントを加算し、そしてその4つの結果として生じたハーフワード・エレメントをR2に置く。従って、その結果は、stvex命令により、dd=D+N、ee=E+O及びff=F+Pとなるように、マトリックス108の中のメモリに格納される。第5から第7までの加算命令が、再び、R7、R9及びR11の値を増分し、それによりそれらは、それぞれ、マトリックス102、106及び108のそれぞれの第3行の最初のエレメントを指し示す。マトリックス102及び106の第3行をロードするためのlvex命令が、それらをR0及びR1よりむしろR3及びR4のそれぞれにロードすることに注目されたい。代替実施形態が、必要に応じて演算を実行するためレジスタのいずれをも用い得ることを理解すべきである。例えば、同じレジスタ(例えば、R0及びR1のようなもの)が、連続的にオーバライトされ得て、又は異なるレジスタ(例えば、R3及びR4のようなもの)が、用いられ得る。最後の格納命令が、gg=G+Q、hh=H+R及びii=I+Sとなるように結果をマトリックス108に格納する。
代替実施形態において、異なるコード及び命令を用いて、マトリックス102及び106を加算し、そしてその結果をマトリックス108に格納することに注目されたい。例えば、上記の擬似コードは、マトリックスの各行に対する2つのlvex命令及び1つのstvex命令がループ本体にあるように1つのループで書くことができ、その場合当該ループは、3回、即ち、各行に対して1回実行されることに注目されたい。代替として、異なるベクトル・ロード及び格納命令を用いて、マトリックス102又はマトリックス106の全てをレジスタ・ファイルに同時に入れることができるであろう。これは、例えば、lmvex命令又はlmvex2命令を用いて、達成されることができるであろう。例えば、図15及び図16は、マトリックス102をレジスタR0、R1及びR2にロードする2つの例を示す。
図15は、例えば、lmvex命令を用いて、マトリックス102をロードした後のレジスタ・ファイルを示す。次のlmvex命令において、R7が、マトリックス102の開始点を指し示し(R7が0x12を格納する。)、そしてR8が、9のcnt値、1のstride値、6のskip値、及び3のskip_cnt値を格納するrBに対応することが想定される。従って、次の命令が、用いられ得る。
従って、図15に示されるように、エレメントA、B及びCは、当該エレメントが「stride*ms」又は1ハーフワード離れてロードされるのでメモリの中でそれぞれが連続して、R0にロードされる。従って、「skip_cnt」個のエレメントが、ロードされた(即ち、3)ので、「stride*ms」(即ち、1ハーフワード)離れているよりむしろ「skip*ms」(即ち、6ハーフワード)離れて配置された次のエレメントDは、R0の第4のエレメントとしてロードされる。次いで、エレメントE及びFは、再び「skip_cnt」個のエレメントがロードされるまでR1、即ち、R0に続くレジスタにロードされ、従って、6ハーフワード離れて配置された次のエレメントGに対して「skip」を要求する。これは、「cnt」個のエレメントがロードされるまで継続する。従って、最後のエレメントIが、R2の最初のフィールドにロードされる。R2の残りのフィールドが、所定の値(この例では、ゼロ)で満たされることに注目されたい。
図16は、例えば、cnt、rcnt、skip及びskip_cntが指定されることができるlmvex2命令を用いて、マトリックス102をロードした後のレジスタ・ファイルを示す。次のlmvex命令において、R7が、マトリックス102の開始点を指し示し(R7が0x12を格納する)。、そしてR8が、9のcnt値、3のrcnt値、1のstride値及び6のskip値を格納するrBに対応することが想定される。従って、次の命令が、用いられ得る。
従って、図16に示されるように、エレメントA、B及びCがR0にロードされ、それぞれのエレメントは、strideが「stride*ms」又は1ハーフワードであるので、メモリの中で連続である。この点で、「rcnt」個のエレメント(即ち、3)が、R0にロードされ、従って、次のエレメントDが、「skip*ms」(即ち、6ハーフワード)だけ離れた位置からロードされる。更に、次のエレメントDは、図15の前の例においてlmvex命令を用いて行われたように、R0の第4のエレメントとしてロードされず、しかし代わりに、R0が既に「rcnt」個のエレメントを有するので、R1(それは、R0に続くレジスタである。)の最初のエレメントとしてロードされる。エレメントE及びFがまた、R1にロードされ、R1に対して3のrcntを完了する。「rcnt」個のエレメントが、R1にロードされてしまい(、そして「cnt」個のエレメント、即ち、9が、まだロードされてない)ので、次のエレメントGは、skipにより決定された位置、即ち、6ハーフワード離れた位置からR2の中にフェッチされる。また、エレメントH及びIが、R2にロードされる。この点で、「cnt」個のエレメントが、ロードされてしまう。また、R0、R1及びR2の未使用のフィールドのそれぞれが、所定の値(この例では、ゼロ)で満たされることに注目されたい。
代替実施形態においては、上記で説明したように、lmvex2命令はまた、skip_cntフィールドを指定することを可能にし得る。また、例えば、マトリックス102には、図16に見られるように、上記のようにlmvex2命令を用いて3のskip_cntがてロードされる。この例(引き続き図16、及び全ての同じパラメータ及びskip_cnt=3の加算を有する上記lmvex2命令を参照して)においては、エレメントA、B及びCが、R0にロードされ、それぞれのエレメントは、それらが「stride*ms」又は1ハーフワード離れて配置されるので、メモリの中で連続である。次いで、「skip_cnt」個のエレメントが、ロードされた(即ち、3)ので、「stride*ms」(即ち、1ハーフワード)離れてよりむしろ「skip*ms」(即ち、6ハーフワード)離れて配置された次のエレメントDが、ロードされる。また、「rcnt」個のエレメント(即ち、3)のみが、各レジスタにロードされることに注目されたい。従って、次のエレメントDは、図15の前の例においてlmvex命令を用いて行われたように、R0の第4のエレメントとしてロードされず、しかし代わりに、R1(このR1はR0に続くレジスタである。)の第1のエレメントとしてロードされる。次いで、エレメントE及びFがまた、R1にロードされる。「skip_cnt」個のエレメントが、再びロードされてしまい(、そして「cnt」個のエレメント、即ち9が、まだロードされていない)ので、次のエレメントGが、6ハーフワード離れて配置される。また、「rcnt」個のエレメントが、既にR1にロードされたので、次のエレメントGが、R2にH及びIと一緒にロードされる。この点で、「cnt」個のエレメントが、ロードされたことになる。また、R0、R1及びR2の未使用のフィールドのそれぞれが、所定の値(この例ではゼロ)で満たされることに注目されたい。
従って、マトリックス102のようなマトリックスが、上記で説明したロード命令の様々な実施形態を用いて様々の異なる方法でメモリからレジスタへ容易に移動されることができることに注目されたい。また、「rcnt」個のパラメータの使用は、ベクトル・エレメントをメモリからロードするため従来のプログラミング方法を用いた場合に要求されたマスキング操作の数を低減することを可能にすることに注目されたい。
代替実施形態において、上記命令は、ここで説明したパラメータより多くのパラメータ、又はそれより少ないパラメータ、又は異なったパラメータを含み得る。例えば、異なる実施形態において、lmvex2命令は、skip_cntパラメータを考慮してもしなくてもよい。また、上記で与えられた例示の命令は、s/uフィールドを「u」に設定し、それにより、必要ならば、エレメントは、レジスタに格納されるとき、ゼロに拡張されることに注目されたい。一実施形態において、s/uフィールドは、「s」に設定され得て、又は省略され得る。例えば、一実施形態において、ms=dsの場合、s/uフィールドは、省略、又は無視され得る。
図16はまた、T、U及びVをメモリ部分100の位置0xA2,0xA3及び0xA4からR4へロードするロード命令の一例を説明する。例えば、次のlvex命令を用い得て、その場合、R10が開始値0xA2を格納し、そしてR11が3のcnt値及び1のstride値を格納することが想定される。
メモリ・サイズ(mb)及びデスティナーション・サイズ(dh)が異なることに注目されたい。即ち、本明細書で説明される全ての命令において、メモリ・サイズ及びデスティナーション・サイズ(又は、格納命令の場合には、ソース・サイズ(発信元サイズ))のそれぞれは、それらが同じ又は異なってよいように独立であり得る。上記の例においては、メモリ・サイズは、メモリの中の各エレメントのサイズ(T、U及びV)がバイトであることを指示するmbに設定されることに注目されたい。しかしながら、デスティナーション・サイズは、R4におけるデスティナーション・サイズがハーフワードであることを指示するためdhに設定され、それは、バイトより大きい。従って、「cnt」個のエレメント(3エレメント)が、R4にロードされ、そこにおいて、各エレメントT、U及びVが、ハーフワードのデスティナーション・サイズを満たすため適切に拡張される。この例においては、それらは、「.u」により指示されるようにゼロ拡張(zeroe xtend)される(即ち、符号なしで拡張される(unsigned extend))。しかしながら、「.s」を用いて、それぞれのエレメントを符号付き拡張(sign extend)することができるであろう。また、「cnt*ds」が3ハーフワード(又は46ビット)であり、従ってR4のサイズより小さいので、R4の残りの未使用部分は、所定の値(この例ではゼロ)で満たされることに注目されたい。
図17は、メモリ部分100のベクトル104が1のstride及び2のstrideをロードされる場合のレジスタ・ファイルの例を示す。一例においては、R7が、0x46を格納することによりpp、即ちベクトル104の開始点を指し示し、そしてR10が、5のcnt値、1のstride値、及び5のskip_cnt値を格納すると仮定する。skipの値は、この例では、cnt=skip_cntであるので重要でない(即ち、メモリからの単一のベクトルが、更に「skip」を必要とすることなしにロードされている。)ことに注目されたい。従って、次の命令を用いて、ベクトル104をレジスタ・ファイルにロードし得る。
上記の例では、「cnt」個のエレメント(5エレメント)は、レジスタ・ファイルにロードされ、それはR1で開始し、次いでR2を用いて継続する。stride=1であり、そして後続のエレメントが、「stride」個のサイズmsの単位離れて配置されるので、ロードされるべきそのエレメントは、互いに1ハーフワード離れて配置される。従って、5連続のハーフワード(pp、qq、rr、ss及びtt)が、レジスタR1及びR2にロードされる。また、R2の残りの未使用部分が、所定の値(この例ではゼロ)で満たされることに注目されたい。また、「.s」が、s/uフィールドのため代わりに用いられることができるであろうことに注目されたい。又は、代替として、s/uフィールドが、存在しなくてもよい。
別の例においては、R7が、ppを指し示し(0x46を格納し)、そしてR10が、3のcnt値及び2のstride値を格納すると仮定する。従って、次の命令を用いて、ベクトル104の1つおきのエレメントをレジスタ・ファイルにロードし得る。
この例では、cnt*ms(3ハーフワード)が単一のレジスタ(図示の実施形態において64ビット・レジスタ)に適合するので、lvex命令を用い得る。このlvex命令を用いて、「cnt」個のエレメント(3エレメント)が、R4にロードされ、そこにおいて、後続のエレメントが、「stride」個のサイズmsの単位離れて配置される。従って、この例では、後続のエレメントは、2ハーフワード(「stride*ms」)離れて配置され、従って、各エレメントがロードされた後で、次のエレメントが、2ハーフワード離れてからフェッチされる。例えば、ppは、0x46からフェッチされ、次いで、rrが、0x4A(0x46+0x2)からフェッチされる。これは、3エレメントがロードされるまで継続する。また、R4の未使用部分が、所定の値(この例ではゼロ)で満たされることに注目されたい。
図18は、4つの異なる時刻(時刻=0、時刻=1、時刻=2及び時刻=3)におけるメモリの部分200を示し、それらは、例えば、図1のメモリ12の全て又は一部分に対応し(、又はデータ処理システム内のどこにでも配置され得る)。図示の実施形態において、メモリ部分200は、64ビット幅メモリとして示されている。代替実施形態において、メモリ部分200は、異なる幅を有する様々な異なる方法でフォーマット化され得る。メモリ部分200は、エレメントC4、C3、C2、C1及びC0をメモリ位置0x08,0x0A,0x0C,0x0E及び0x10のそれぞれに格納する。エレメントt、u及びvが、0x12、0x14及び0x16のそれぞれに格納される。また、時刻=0におけるメモリ部分200は、X4、X3、X2、X1及びX0を0x20,0x22,0x24,0x26及び0x28のそれぞれに格納する。一実施形態において、これらの値のそれぞれは、特定のサンプリング速度でサンプリングされたディジタルにサンプリングされた信号の様々な時間サンプルを意味し得る。例えば、時刻=0において、現在のサンプルが、X0より指示され、そして1時間遅延(即ち、1/サンプリング速度)前のサンプルが、X1により指示され、2時間遅延(即ち、2*1/サンプリング速度)前のサンプルが、X2により指示される、等々である。
次に、時刻=1において、現在のサンプルは、X1により指示され、そして1時間遅延(即ち、1/サンプリング速度)前のサンプルが、X0により指示され、2時間遅延(即ち、2*1/サンプリング速度)前のサンプルが、X1により指示される、等々である。最も新しいサンプルが、図示の実施形態において時刻=1でX4であった最も古い時刻サンプルをオーバライトすることに注目されたい。従って、時刻=2において、現在のサンプルX2が、X3をオーバライトし、そして時刻=3において、現在のサンプルX3が、X2をオーバライトする。従って、格納場所0x20、0x22、0x24、0x26、0x26及び0x28は、ディジタルにサンプリングされた信号の到来時間サンプルを連続的に格納するサーキュラー・バッファを実現し得る。代替実施形態において、サーキュラー・バッファは、異なる理由で又は応用のため実現され得る。
一実施形態において、変更されたlmvexロード命令を用いて、(図19から図22を参照して説明されるように、)サーキュラー・バッファの値が、例えば、フィルタリング関数を実行する際におけるような計算のための希望された正しい順序にある要領で、当該サーキュラー・バッファの値をレジスタ・ファイルのレジスタ(複数)に正しく入れ得る。例えば、次の方程式は、フィルタリング関数に対応し、そこにおいて、Y0、Y1、Y2及びY3は、時刻=0、時刻=1、時刻=2及び時刻=3のそれぞれにおける結果に対応する。
一実施形態において、変更されたlmvex命令は、図27に示されるように、多重ベクトル・エレメント・ロード1回スキップ命令(lmvex_skip_once)命令と呼ばれる。図27のlmvex_skip_once命令は、s/uフィールド、msフィールド、及びdsフィールドを含み、それは、lmvex命令に関して上記で説明したようにまさに動作する。lmvex_skip_once命令はまた、3オペランド:rD、rA及びrBを取る。lmvex_skip_onceは、追加のパラメータcnt、stride、skip及びskip_cntを用い、そこにおいて、それらは、rBにより指示された1又は複数のレジスタに格納され、又は命令のサブ演算コードにより指定され得る。オペランド又は追加のパラメータの全てが、skip_cntの追加のパラメータを除いて、lmvex命令に関して上記で説明されたのと同じに動作する。上記で説明されたように、lmvex命令は、「skip_cnt」個のエレメントをフェッチし、次いで、「skip」パラメータを用いて、次のエレメントをフェッチする。この点で、skip_cntカウンタは、リセットされねばならず、それにより次の「skip_cnt」個のエレメントが、再びスキップする前にフェッチされることができる。これは、「cnt」個のエレメントがロードされるまで継続する。lmvex_skip_once命令は、lmvex命令と似てなく、それは、「skip_cnt」個のエレメントがフェッチされた後にskip_cntカウンタをリセットしない。従って、「skip_cnt」個のエレメントがフェッチされた後で、次のエレメントは、「skip」個のサイズmsの単位離れて配置される。しかしながら、この点以降、skip_cntカウンタは、「cnt」個のエレメントがフェッチされるまで連続的に減分される(即ち、リセットされない)。
例えば、図19から図22に関して説明されるように、擬似コードの次のセクションを用いて、上記の方程式1、2、3及び4のフィルタ結果Y0、Y1、Y2及びY3を計算し得る。
上記コード・セクションの中のラベル「loop:」により指示されたループに入る前に、R12が、5のcnt値及び1のstride値を用いて初期化され、そしてR13が、5のcnt値、1のstride値、5のskip_cnt値、及び−4のskip値を用いて初期化される。従って、レジスタR12及びR13は、後続のベクトル・ロード命令の中で「rB」オペランドとして用いられることができる。R1が、初期化されて、一定のベクトルの開始(0x08でのC4)を指し示す。R2が、初期化されて、サーキュラー・バッファの開始点を指し示し、それは、図18に示されるように、時刻=0で0x20である。従って、ループの最初の繰り返しは、(図19に示されるように)時刻=0に対応するレジスタ・ファイルにロードされる値に対応する。
第1のlmvex命令は、R12に格納されたパラメータ(それらは前に初期化されている。)と、図4及び図5に関して上記で説明したような制御フィールドとに従って、(図19においてR6及びR7を用いて示されるように、)C4−C1をR6に且つC0をR7にロードする。次いで、ループを通る第1の繰り返しは、lmvex_skip_once命令で始まる。時刻=0に対応する第1の繰り返しにおいて、lmvex_skip_once命令は、R12に格納されたパラメータと、制御フィールド(それらは前に初期化されている。)とに従って、図19におけるR8及びR9でもって示されるようにX−4−X−1をR8に且つX0をR9にロードする。この第1の繰り返しにおいてskip_cnt=cntであるので、skip値は、「構わない(don‘t care)」として処理されることができることに注目されたい。それは、skip値が必要とされないからである。即ち、skip_cntカウンタが期間を過ぎたとき、cntカウンタも期間が過ぎ、従って、上記命令は、「スキップすること(skipping)」なしに完了する。
第1のベクトル乗算−累算命令(vector multiply−accumulate instruction)(vmac.h)は、レジスタR6及びR8のハーフワード・エレメントについてベクトル乗算−累算演算を行い、そしてその結果をR10に格納する。従って、R10が、ここで、図19におけるR10でもって示されるように、C4*X−4+C3*X−3+C2*X−2+C1*X−1を格納する。第2のベクトル乗算−累算命令は、レジスタR7及びR9のハーフワード・エレメントについてベクトル乗算−累算演算を行い、そしてその結果をR11に格納する。従って、R11は、ここで、C0*X0に単純に等しC0*X0+0*0+0*0+0*0を格納する。この現在の例においては、ベクトル・ロード命令(lmvex及びlmvex_skip_once)のそれぞれを用いて、(R7及びR9のような)レジスタの残りの不充填の部分が、ゼロとされ、従って、正しい結果をR11にもたらすことに注目されたい。さもなければ、R11は、例えば、t、u及びvの値が代わりにメモリ200からロードされた場合、正しく無い値であり得る。
次いで、第1の加算命令は、R10及びR11の値同士を加算し、そしてその結果をR10に格納する(この動作は、図19に示されていない。)。次いで、上記の方程式1のY0に対応するこの値は、必要に応じて、例えば、メモリ200に戻るようにして、格納されることができる。第2の加算命令は、サーキュラー・バッファの開始ポインタを次のハーフワードまで進め、それにより、時刻=1に関する開始ポインタは、ここで、図18及び図20に示されるように、アドレス0x22でのX−3を指し示す。次に、R13は、skip_cnt=skip_cnt−1であるように変更される。従って、上記のコード・セグメントの第1の繰り返し後に、skip_cntは、ここで4に等しい。ループ・カウンタ、又は追加の命令(上記コード・セグメントに含まれない。)を用いて、ループを出るべきかどうかを指示し得る。ループを出ない場合、コードは、「ループ」に戻るよう分岐し、そして次の繰り返しが、始まる。
値C4−C0は、(図20においてR6及びR7でもって示されるように)R6及びR7に残っている。ループを介した第2の繰り返しは、lmvex_skip_once命令で始まる。時刻=1に対応する第2の繰り返しにおいて、lmvex_skip_once命令は、R12に格納されたパラメータと、図20においてR8及びR9でもって示されるような制御フィールドとに従って、X−3−X0をR8に且つX1をR9にロードする。この繰り返しにおいて、skip_cntが4であり、そしてrAがロードされるべき最初のエレメントとしてX3を指し示すので、4個のエレメントX3−X0がロードされる。この点で、「skip_cnt」個(4個)のエレメントがロードされ、そして「cnt」個(5個)エレメントがまだロードされていないので、次のエレメントは、「skip」個のサイズmsの単位(ハーフワード)離れた位置からロードされる。従って、この例における−4のskipは、エレメントX1をロードすることを可能にする。それは、0x28−4*2=0x20だからである。(メモリ200がハーフワード・アドレス指定可能であり、従って「skip」個のサイズmsの単位離れていることは、−4ハーフワード離れていることを指示することに注目されたい。)上記で説明したように、時刻=1においてメモリ200の中の最も最近のエレメントが、0x20、即ち、前の最も古い時間サンプルの位置に格納されることに注目されたい。従って、lmvex_skip_once命令は、最も古い時間サンプルから最も新しい時間サンプルまでのメモリ位置0x20−0x28からY1を計算するため必要とされる5個のエレメントをR8及びR9に正しくロードする。
第1のベクトル乗算−累算命令(vmac.h)は、レジスタR6及びR8のハーフワード・エレメントについてベクトル乗算−累算演算を行い、そしてその結果をR10に格納する。従って、R10は、ここで、図20においてR10でもって示されるように、C4*X−3+C3*X−2+C2*X−1+C1*X0を格納する。第2のベクトル乗算−累算命令は、レジスタR7及びR9のハーフワードについてベクトル乗算−累算演算を行い、そしてその結果をR11に格納する。従って、R11は、ここで、C0*X1に単純に等しいC0*X1+0*0+0*0+0*0を格納する。この現在の例では、ベクトル・ロード命令(lmvex及びlmvex_skip_once)のそれぞれを用いて、レジスタ(例えば、R7及びR9のようなもの)の残りの充填されていない部分は、ゼロにされ、従って、正しい結果をR11にもたらす。さもなければ、R11は、例えば、a、b又はc(又は、t、u又はv)の値が、代わりにメモリ200からロードされる。
次いで、第1の加算命令が、R10及びR11の値同士を加算し、そしてその結果をR10に格納する(この動作は、図20に示されていない。)。次いで、上記方程式2のY1に対応するこの値は、必要に応じて、例えばメモリ200に戻すように、格納される。第2の加算命令は、サーキュラー・バッファの開始ポインタを次のハーフワードまで進め、それにより、時刻=2に関する開始ポインタが、ここで、図18及び図21に示されるように、アドレス0x24でのX−2を指し示す。次に、R13は、skip_cnt=skip_cnt−1であるように変更される。従って、上記のコード・セグメントの第2の繰り返し後に、skip_cntは、ここで、3に等しい。ループ・カウンタ又は追加の命令(上記のコード・セグメントには含まれない)を用いて、ループを出るべきかどうかを指示し得る。ループを出ない場合、コードは、「ループ」に戻るよう分岐し、そして次の繰り返しが、始まり得る。
第3の繰り返しは、第1及び第2の繰り返しと似た動作する。時刻=2に対応する第3の繰り返しについては、lmvex_skip_once命令は、図21に示されるように、X−2、X−1、X0、X1及びX2をレジスタR8及びR9にロードする。従って、ひとたびエレメントX−2、X−1及びX0が(0x24で開始して)ロードされると、「skip_cnt」個のエレメントが、ロードされてしまい、そしてskipを用いて、X1及びX2をロードする。後続のベクトル乗算−累算命令は、C4*X−2+C3*X−1+C2*X0+C1*X1がR10に格納され、そしてC0*X2がR11に格納されることをもたらす。第1の加算命令は、Y2に対応する結果をR10に格納し、そこにおいて、次に、Y2が、希望される場合メモリに格納されることができる。次いで、第2の加算命令は、図22に示されるように、ポインタを開始位置0x26まで進める。また、R13は、skip_cnt=skip_cnt−1であるように変更される。従って、上記のコード・セグメントの第3の繰り返し後に、skip_cntは、ここで、2に等しい。ループ・カウンタ又は追加の命令(上記コード・セグメントに含まれない)を用いて、ループを出るべきかどうかを指示し得る。ループを出ない場合、コードは、「ループ」に戻るよう分岐し、そして次の繰り返しが始まる。
図4及び図5に関して上記で説明したlmvex命令を用いて、skip_cntの経過を追う機構(例えば、カウンタ)が、リセットされ、それにより、次の「skip_cnt」個のエレメントがロードされ(、そして「skip_cnt」個のエレメントがまだロードされていないと仮定する)とき、次のエレメントが、skip_*ms単位離れてからロードされる。しかしながら、この現在の例では、lmvex_skip_once命令は、「skip_cnt」個のエレメントがロードされるときskip_cntの経過を追う機構がリセットされないように用いられている。このように、skipは、フルの「cnt」個のエレメントをロードする前に再び用いられないであろう。これは、例えば、第4の繰り返し(時刻=3に対応する。)を用いて説明されるように、全てのエレメントを後続の繰り返しにおいて正しくロードすることを可能にする。
第4の繰り返しは、前の繰り返しと似た動作する。時刻=3に対応する第4の繰り返しについては、lmvex_skip_once命令が、図22に示されるように、X−1、X0、X1、X2及びX3をレジスタR8及びR9にロードする。この繰り返しでは、ロードされる第1のエレメントは、(時刻=3に関して図18に示されるように)位置0x26からロードされることに注目されたい。X−1及びX0をロードした後で、「skip_cnt」個(これは今は2に等しい。)のエレメントが、ロードされてしまい、従って、skipを用いて、ポインタを位置0x20へ戻るようラップされる(wrap)。それは、cnt個(5個)のエレメントが、まだロードされていないからである。また、skip_cnt機構が、リセットされないことに注目されたい。このように、次の「skip_cnt」個(2個)のエレメントがロードされた後でさえ、スキップは、実行されない。スキップが、次の「skip_cnt」個のエレメントの後でこの繰り返しに関して実行された場合、エレメントX1及びX2のみが、スキップの前にフェッチされ、従って、エレメントX3を外してしまうであろう。従って、より前の繰り返しにおいて、skip_cntが最初のスキップの後でリセットされたかどうかは重要で無かったかも知れないにも拘わらず、この繰り返しのような幾つかの繰り返しにおいて、それは、正しいエレメントがフェッチされたか否かを決定し得る。従って、lmvex_skip_once命令を用いて、例えば、フィルタ応用に対してのように、サーキュラー・バッファを正しく実現し得る仕方が認められることができる。また、上記コード・セグメントが様々な異なる方法で書き込まれることができたであろうことに注目されたい。例えば、ループは、ループとして書き込まれるよりむしろロールアウトされ得ることに注目されたい。この例では、lmvex命令は、時刻=0、1及び2に対して用いられ、そしてlmvex_skip_once命令は、時刻=3及び4に対してのみ用いられ得る。
図22に見られるように、ひとたびエレメントX−1、X0、X1、X2及びX3がロードされると、後続のベクトル乗算−累算命令は、C4*X−1+C3*X0+C2*X1+C1*X2が、R10に格納され、そしてC0*X3が、R11に格納される。第1の加算命令は、Y3に対応する結果をR10に格納し、そこにおいて、次いで、Y3が、希望される場合、メモリに格納されることができる。この点で、フローは、前の繰り返しの場合に説明したように継続する。一実施形態において、R12がskip_cntが0である点へ変更された後で、ループを出て、それにより、skip_cntが、例えば、5へ戻るようリセットされ、そして全体のプロセスが、繰り返される。
従って、ベクトル・ロード命令は、skip、skip_cnt、stride及びcntと一緒に用いて、サーキュラー・バッファを実現することができる。一実施形態において、多重ベクトル・エレメントのサーキュラー・バッファ・ロード(circular buffer load multiple vector elements)(lmvex_cb)命令が、図28に示されるように用いられ得る。この繰り返しは、rBに格納された追加のパラメータがbuffer_size及びオフセット(offset)であることを除いて、図4及び図5を参照して上記で説明したlmvex命令に類似している。(lmvex命令の場合のように、代替実施形態において、追加のパラメータは、演算コード又はサブ演算コードの一部として含められ得る。)図29は、追加のパラメータを用いて、サーキュラー・バッファを定義し得る仕方を示す。例えば、上記で説明したロード命令の場合のように、rAは、図29に示されるように、サーキュラー・バッファをメモリに格納するメモリ位置の開始を指示する。バッファ・サイズ(buffer_size)が、「(バッファ・エレメントの合計数)*ms」を指示し、そしてオフセットが、ロードされるべき最初のエレメントがサーキュラー・バッファの中のどこであるかを定義する。また、図示されていないにも拘わらず、多重ベクトル・エレメントのサーキュラー・バッファ格納(circular buffer store multiple vector elements)(stmvex_cb)命令がまた、lmvex_cbの格納相手方として用いられ得ることに注目されたい。lmvex_cb命令及びstmvex_cb命令の両方に対して、一部の実施形態においては、「offset」により表される現在の開始値が、サーキュラー・バッファを通る各パス後に、即ち、「cnt」個のエレメントがlmvex_cb命令又はstmvex_cb命令の実行の一部として処理された後で、所定の個数のエレメントだけ自動的に増分又は減分される。
図30は、追加のパラメータがcnt、skip及びskip_cntよりむしろ(図29に関して上記で説明したように)buffer_size(バッファ・サイズ)及びoffset(オフセット)を含むことを除いて、lstrmvex命令に似た動作をするエレメントのストリームのサーキュラー・バッファ・ロード命令(circular buffer load stream of elements)(lstmvex_cb)命令を示す。まさに上記のlstrmvex命令のように、lmvex_cb命令は、ベクトル・エレメントのストリームをメモリから開始し、そこにおいて、エレメントは、例えば、いつrDが後続の命令の特定のソース・オペランドとして用いられかに応じてデキューされ得る。従って、アドレッシング・モードに関する以外は、lstrmvexに関する上記の同じ説明が、ここで、lstmvex_cbに対して適用される。また、図示されていないにも拘わらず、エレメントのベクトル・ストリームのサーキュラー・バッファ格納(circular buffer store vector stream of elements)(ststrmvex_cb)命令がまた、lstmvex_cbの格納相手方として用いられ得ることに注目されたい。lstmvex_cb命令及びststrmvex_cb命令の両方に対して、一部の実施形態においては、「offset」により表される現在の開始値が、サーキュラー・バッファを通る各パス後に、所定数のエレメントだけ自動的に増分される。
lmvex_cb命令、stmvex_cb命令、lstmvex_cb命令、及びststrmvex_cb命令に対するオプションの修飾子は、lmvex命令、lmvex2命令、stmvex命令、stmvex2命令、lstmvex命令、及びststrmvex命令に関して前に説明したように動作するrcnt及びstride(図29及び図30に図示せず)を含む。これは、レジスタrDのそれぞれのインスタンスにロードされる、又はソース・レジスタrSのそれぞれから格納されるサーキュラー・バッファ・エレメントの数に対する制御、並びに、サーキュラー・バッファを介したアクセスのストライディング(striding)の制御を可能にする。例えば、ストライディングを用いて、フラクショナル・レート・フィルタリング操作(fractional rate filtering operations)又はデシメーティング・フィルタ(decimating filter)を実現し得る。
図23から図26は、lstrmvex命令(図7に関して上記で説明した)を用いて、例えば、マトリックス乗算を実行し得る仕方の一例を示す。この例に関して、図12のメモリ部分100、及びマトリックス102、106及び108が、用いられるであろう。図23から図26は、マトリックス乗算中の様々な時点における、例えば、図1のスカラ・レジスタ・ファイル34のようなレジスタ・ファイルの内容を示す。
この現在の例において、マトリックス102は、マトリックス106により乗算され、そしてその結果は、マトリックス108に対応する。例えば、マトリックス乗算を実行する際に、次の方程式が、その結果生じるマトリックス108の最初の2列に対して用いられる。
上記の方程式において、aa、dd及びggを得る際に、エレメントをマトリックス102からデキューすることが望ましく(それは、A、B、Cを用いて、aaを取得し、D、E、Fを用いて、ddを取得し、次いで、G、H、Iを用いて、ggを取得するからである。)、一方マトリックス106をデキューすることは望ましくない(それは、K、N、Qがaa、dd及びggのそれぞれを取得するため必要とされるからである。)ことに注目されたい。従って、次の擬似コードは、例えば、lstrmvex命令のような命令を用いて、その結果のマトリックス108を取得する仕方の一例を与える。次の擬似コード例においては、rDが命令の最初のソース(ソース1)(例えば、命令デスティネーション、ソース1、ソース2)として現れるときにのみデキューすることが実行されることに注目されたい。
上記擬似コードを用いて、上記方程式5−8に記載されるように、aa、dd、gg、bb、ee、及びhhを取得することができる。この例において用いられているように、全ての値が、符号の付されてないハーフワードであると仮定される。最初に、R6が初期化されて、9のcnt、3のrcnt、1のstride、6のskip、及び3のskip_cntを格納し、そこにおいて、R6が、lstrmvex命令のためのrBレジスタとして用いられることができる。R4は、図23に示されるように、初期化されて、0x12におけるエレメントA、即ち、図12のマトリックス102の第1行の第1エレメントを指し示す。R7が、初期化されて、9のcnt、3のrcnt、8のstride、−15のskip、及び3のskip_cntを格納し、そこにおいて、R7は、lstrmvex命令のためのrBレジスタとして用いられることができる。R5は、図23に示されるように、初期化されて、0x54におけるエレメントK、即ち、マトリックス106の第1列の第1エレメントを指し示す。
第1のlstrmvex命令が、ベクトル・エレメントのストリームを開始し、それは、マトリックス102の各行を順にロードする。最初に、当該命令は、(図23に示されるように)マトリックス102の第1行をR1にロードする。例えば、エレメントA、B及びCは、それぞれ1ハーフワード離れており、(従って、1のstrideが、必要とされる。)。3のrcntは、3エレメントのみを一時にR1にロードし(、残りの部分がゼロ(zero out)にされ、)そして「skip_cnt」個のエレメント(この例では3個)が、ロードされ、次いで、8*ms(8ハーフワード)のskipがCの位置(0x16)に加算されて、次のエレメントDのアドレスを位置0x22(0x16+0x08)に取得する。R1が、以下で説明されるように、後続の命令のソース1として用いられるとき、それがデキューされ、それにより、(rcnt、stride、及びskip_cntにより定義されるように)マトリックス102の次の列が、R1にロードされる。
第2のlstrmvex命令が、ベクトル・エレメントのストリームを開始し、それは、マトリックス106の各列をR2に順にロードする。最初に、当該命令が、(図23に示されるように)マトリックス106の第1列をR2にロードする。例えば、エレメントK、N及びQは、メモリの中で各8ハーフワード離れており(、従って、8のstrideが、必要とされる。)。3のrcntが、3個のエレメントのみを一時にR2にロードし(、残りの部分がゼロにされ、)そして「skip_cnt」個のエレメント(この場合、3個)が、ロードされ、次いで、−15*ms(−15又は−0x0Fハーフワード)のskipが、Qの位置(0x74)に加算されて、次のエレメントLのアドレスを位置0x56(0x74−0x0F*2)に取得し、そこにおいて、Lは、マトリックス106の第2列の第1エレメントである。R2が、以下で説明されるように、後続の命令のソース1として用いられるとき、それがデキューされて、それにより、(rcnt、stride、及びskip_cntにより定義される)マトリックス106の次の列が、R2にロードされる。
第1の乗算−累算(vmac)命令は、図24に示されるように、A*K+B*N+C*Q(それはaaに等しい。)をR10に格納する。R1がソース1として用いられるので、それは、第1のlstrmvex命令(及びR6の中のパラメータ)に従ってデキューされ、それにより、マトリックス102の次の行(D、E及びF)が、R1に格納され、残りの部分が、ゼロにされる。この点で、R2がソース1として用いられないので、それは、デキューされず、従って、K、N及びQが、R2に残り、そしてマトリックス106の次の列が、まだR2に格納されない。
第2の乗算−累算(vmac)命令が、図25に示されるように、D*K+E*N+F*Q(これはddに等しい)をR11に格納する。R1がソース1として用いられるので、それは、再び、第1のlstrmvex命令(及びR6の中のパラメータ)に従ってデキューされ、それにより、マトリックス102の次の行(G、H及びI)が、R1に格納され、残りの部分がゼロにされる。この点で、第1のlstrmvex命令に対応する9個のエレメントが、ロードされてしまい、従って、「cnt」個のエレメントが、ロードされ、そしてこの命令に関するストリーミングが、終わる。R2がソース1として用いられないので、それは、デキューされず、従って、K、N及びQが、R2の中に残り、そしてマトリックス106の次の列が、まだR2に格納されない。この点で、第2のlstrmvex命令に対応する3個のエレメントのみが、ロードされてしまい、従って、「cnt」個のエレメントが、この命令に対してロードされなかった。
第3の乗算−累算(vmac)命令は、図26に示されるように、G*K+H*N+I*Q(これはggに等しい。)をR11に格納する。R2が、ここでソース1として用いられるので、それは、続いて、第2のlstrmvex命令(及びR7の中のパラメータ)に従ってデキューされ、それにより、マトリックス106の次の列(L、Q及びR)が、R2に格納され、残りの部分が、ゼロにされる。この点で、マトリックス106の9個のエレメントのうちの6個が、ロードされてしまう。また、「cnt」個のエレメント(マトリックス102に関して)は、既に、第1のlstrmvex命令によりロードされてしまったので、R1は、変わらず、そして相変わらずG、H及びIを保持する。(更に、たとえ「cnt」個のエレメントが第1のlstrmvex命令によりまだロードされていない場合でも、R1は、相変わらず変わらないであろう。それは、R1がソース2として用いられるので、それがデキューされないであろうからである。)。
第3のlstrmvex命令が、第1のlstrmvex命令と同じであるベクトル・エレメントの新しいストリームを開始する。即ち、第3のlstrmvex命令は、上記で説明したように、マトリックス102の各行をR1に順にロードする。それに続く3つのvmac命令は、bb、ee及びhhの値をR13、R14及びR15のそれぞれに格納する。最初の3つのvmac命令の場合のように、第1のlstrmvex命令が、第3のlstrmvex命令に続く第1の2つのvmac命令を用いてデキューされ、そして第2のlstrmvex命令が、第3のlstrmvex命令に続く第3のvmac命令を用いてデキューされることに注目されたい。この点で、マトリックス106の最終の列(M、P及びS)が、R2にロードされるであろうし(図示せず)、そして第2のlstrmvex命令のためロードすることは、「cnt」個のエレメント(例えば、9個のエレメント)がこの点でロードされてしまっているので停止するであろう。次いで、類似の命令を用いて、cc、ff及びiiを取得することができる。次いで、aa、dd、gg、bb、ee、hh、cc、ff、及びiiの値は、マトリックス108のメモリ位置0x8A、0x9A、0xAA、0x8C、0x9C、0xAC、0x8E、0x9E、及び0xAEのそれぞれに戻るよう格納することができる。本明細書で説明されるようなベクトル格納命令を用いて、これらの格納を実行することができる。
上記の擬似コードの例において、エレメントが、後続の命令におけるrDの位置(即ち、rDがソース1として用いられるか、又はソース2として用いられるか)に依存してデキューされることに注目されたい。しかしながら、代替実施形態において、他のファクタを用いて、エレメントをデキューすべきか否かを指示し得る。例えば、デキューすることを指示するため、異なる演算コードを用い得るか、又は、他のインディケータ、例えば、フラグのようなものを用い得る。また、一実施形態において、rDは、それがソース1であるときだけではなくて、それがソースとして後続の命令において現れるときはいつでもデキューされる。更に別の実施形態においては、デキューすることは、ソース・オペランドと同じレジスタrDを用いた命令が処理ユニット14により実行される全ての命令の適正なサブセットの中の1又はそれより多くの所定の命令であるときのみ実行される。即ち、この実施形態において、命令のサブセット又は命令機能のサブセットのみがデキューすることを実際にそれらの命令の一部として実行し、そして処理ユニット14により実行される残りの命令は、rDをソース・オペランドとして使用することに拘わらず、デキューすることを実行しない。デキューすることを実行するサブセットは、実行される全体命令の所定のサブセットであり得て、そしてデータ処理システム10の必要性に基づいて決定され得る。更に別の実施形態において、デキューすることは、デキューする操作を制御するための命令内で制御フィールド値により決定され得る。
デキューすることが、図23から図26について記載する前のパラグラフで説明されたが、エンキューする類似の操作が、本発明の実施形態に等しく適用可能であり、そして実質的に類似の要領で操作する。エンキューすることは、後続の命令の宛先(デスティネーション)としてのエンキューするソース・レジスタrSの位置に基づいて、又は処理ユニット14により実行される全ての命令の適正なサブセットの中の1又はそれより多くの所定の命令におけるデスティネーション・オペランド(宛先オペランド)に基づいて実行され得る。即ち、一実施形態において、命令又は命令機能のサブセットのみが、実際に、それらの実行の一部としてエンキューすることを実行し、そして処理ユニット14により実行される残りの命令は、デスティネーション・オペランドとしてrSを使用することに拘わらず、エンキューすることを実行しない。エンキューすることを実行するサブセットは、実行される全体命令の所定のサブセットであり得て、そしてデータ処理システム10の必要性に基づいて決定され得る。更に別の実施形態において、エンキューすることは、エンキューする操作を制御するための命令内で制御フィールド値により決定され得る。
図31は、高速フーリエ変換(FFT)と共に用いられ得る命令を示す。図31は、制御フィールドs/u、ms及びds、及びオペランドrD、rA及びrBを有する多重ベクトル・エレメントFFTロード(load multiple vector elements FFT)(lmvex_fft)命令を示す。これらの制御フィールド及びオペランドのそれぞれが、他のロード命令に関して上記で説明したように動作する。lmvex_fft命令はまた、rBに格納された追加のパラメータ「基数(radix)」を用い、そして他のベクトル・エレメント・ロード命令に関して上記で説明したようにrBに格納されたrcnt制御フィールドを任意に実行し得る。上記の命令の場合のように、代替実施形態において、「radix」(及び、存在する場合「rcnt」)は、演算コード又はサブ演算コードの一部であることができ、従って、rBは、必要でなくてもよい。lmvex_fft命令はまた、上記で説明したように、切り捨て又は丸めフィールドを用いる。
図32は、制御フィールドs/u、ms及びss、及びオペランドrS、rA及びrBをまた有する多重ベクトル・エレメントFFT格納(store multiple vector elements FFT)(stmvex_fft)命令を示す。これらの制御フィールド及びオペランドのそれぞれは、他の格納命令に関して上記で説明したように動作する。stmvex_fft命令はまた、上記で説明したように、切り捨て又は丸めフィールドを用い得て、そして他のベクトル格納命令に関して上記で説明したようにrcnt制御フィールドを任意に実行し得る。stmvex_fft命令はまた、rBに格納された追加のパラメータ「radix」を用いる。上記の命令の場合のように、代替実施形態において、「radix」は、演算コード又はサブ演算コードの一部であることができ、従って、rBは、必要無い場合がある。stmvex_fft命令は、lmvex_fft命令の格納相手方と考えられ得る。
再びlmvex_fft命令を参照すると、「radix」パラメータを用いて、一連のデータをレジスタ又は1組のレジスタに、当該技術で既知のようにFFTアドレッシング・アルゴリズムに従ってロードし得る。例えば、FFTに関して、X0、X1、X2、X3、X4、X5、X6及びX7の順序のデータが、或る一定の計算のためX0、X4、X6、X2、X1、X5、X3、X7の順序に「ビット反転(bit reverse)」されることは既知である。lmvex_fft命令において、「radix」は、エレメントの数、及びエレメントの特定の格納シーケンスを定義する。例えば、図34は、例えば、図1のメモリ12の一部であり得るメモリ300を示す。メモリ300は、位置0x16−0x24に格納されているエレメントX0、X1、X2、X3、X4、X5、X6及びX7を含む。メモリ300はまた、位置0x44−0x52に格納されているエレメントY0、Y4、Y6、Y2、Y1、Y5、Y3及びY7を含む。
図35は、図1のスカラ・レジスタ・ファイル34のようなレジスタ・ファイルの一部を示す。例えば、8のradixを有するlmvex_fft命令を用いて、X個のエレメントをビット反転の要領でレジスタR1及びR2に(図35に示されるように)入れることができ、そこにおいて、R1は、rDにより指定され、そしてロードされるべき第1のメモリ位置(0x16)は、rAにより指定される。同様に、8のradixを有するlmvex_fft命令を用いて、ビット反転されたY個のエレメントを順次の順序でR4及びR5に(図35に示されるように)入れることができ、そこにおいて、R4は、rDにおり指定され、そしてロードされるべき第1のメモリ位置(0x44)は、rAにより指定される。従って、lmvex_fft命令は、エレメントをビット反転の要領でロードし得て、そこにおいて、エレメントは、最初にビット反転されるか、又はそうされないかのいずれかである。
同様に、stmvex_fft命令を用いて、エレメントをビット反転の要領でメモリに格納し得る。例えば、8のradixを有するstmvex_fft命令を用いて、ビット反転されたX個のエレメントをR1及びR2からメモリの位置0x16−0x24に格納し、それにより、メモリの中のエレメントは、R1及びR2の中のそれらのエレメントと比較してビット反転された状態ではない。同様に、stmvex_fft命令を用いて、順次的なY個のエレメントをR4及びR5からメモリの位置0x44−0x52に格納することができ、それにより、メモリの中のエレメントは、R4及びR5の中のそれらのエレメントと比較してビット反転された状態にある。
図33は、制御フィールドs/u、ms及びds、及びオペランドrD、rA及びrBを有するベクトル・エレメントのストリームFFTロード(load stream of vector elements FFT)(lmstrmvex_fft)命令を示す。これらのフィールド及びオペランドのそれぞれが、lstrmvex命令に関して上記で説明したように動作する。lmstrmvex_fft命令はまた、rBに格納された追加のパラメータ「radix」を用い、そして他のベクトル・エレメント・ロード命令に関して説明したようにrBに格納されたrcnt制御フィールドを任意に実行し得る。上記の命令の場合のように、代替実施形態において、「radix」(及び、存在する場合「rcnt」)は、演算コード又はサブ演算コードの一部であることができ、従って、rBは、必要で無い場合がある。「radix」は、ロードされるべきエレメントの合計数を定義する。lmstrmvex命令の場合のように、lmstrmvex_fft命令は、ベクトル・エレメントのストリームをメモリから開始し、そこにおいて、エレメントは、ビット反転の要領で、又はビット反転された順序から順次の順序でロードされ、そして例えば、後続の命令におけるrDの位置に依存してデキューされ得る。図示されていないが、相手方の格納命令を用いて、FFT応用のようなもののためビット反転の要領で、エレメントのストリームをメモリに格納することを開始し得ることに注目されたい。
従って、様々な異なるタイプのベクトル・ロード及び格納命令が、例えばスカラ・レジスタ・ファイルのような1組のレジスタを有するシステムで用いられることができる仕方が認められることができる。即ち、上記の命令を既存の設計で用いることができ、又は既存の設計の実行ユニット(例えば、実行ユニット32のようなもの)及び制御ユニット(例えば、制御ユニット28のようななもの)に対する一層小さい変更のみを要求し得る。本明細書で説明される命令のそれぞれが、異なるフォーマットを有することができ、そして複数の命令に分割すらされ得ることに注目されたい。また、ベクトル・エレメントをレジスタへ、及びそれから転送する際に、追加のパラメータを用いて、(例えば、ベクトル・ロード命令に対するもののような)どのレジスタ・エレメントをメモリへ転送するべきか、又はレジスタ内のどのレジスタ・エレメントに、メモリからロードされたベクトル・エレメントを格納するかを指示し得る。更に、追加のパラメータを用いて、ベクトル・エレメントをレジスタの中に置く仕方、又はどこへベクトル・エレメントをメモリから読み出すかを定義し得る。例えば、設けられ得る開始位置インディケータは、レジスタの中のどこに又はどこから転送することを開始するかを指示する。また、strideが、1つのレジスタのため与えられ得て、それにより、パラメータは、レジスタに又はそれから、レジスタ内で非連続的な要領で転送され得る。また、本明細書で説明される全てのパラメータ及び制御フィールドは、上記命令のいずれとのいずれの組み合わせで現れ得る。
また、異なるアドレッシング・モードが、例えば、stride、skip、skip_cnt等々を用いたモード、又はbuffer_size及びoffsetを用いたモード、又はradixを用いたモードのようなモードが、上記で説明したことに注目されたい。しかしながら、代替実施形態において、異なるアドレッシング・モードを用い得る。例えば、アレイ次元が、例えば、アレイの次元(例えば、2次元4×4アレイ、3次元5×5アレイ等々)のようなものを、代わりに指定され得る。従って、上記実施形態を用いて本明細書で説明されたアドレッシング・モードを用いて、データ又はデータのアレイを、例えば、上記で説明したように、ジグザグ・パターン及び他の正規のパターンを含む様々なパターンでロード又は格納し得る。本明細書で説明された命令はまた、現在のSIMDプロセッサにおいて要求されるオーバヘッドと比較して、メモリ・エレメントをメモリへ又はメモリから転送するために要求されるオーバヘッドを低減し得る。例えば、SIMD動作が可能である現在のプロセッサにおいて、多数の命令が、ベクトル・エレメント(例えば、データのベクトル又はアレイ、又はデータの他の正規のパターンのようなもの)をメモリへまはそれから転送するため必要である。しかしながら、エレメントの同じ転送は、上記で説明したベクトル・ロード及び格納命令を用いて達成されることができ、そこにおいて、低減された数の命令(又はまさに1個の命令)を用いて、転送を達成し得る。
次のパラグラフは、本発明の様々な局面、形式及び実施形態の記載を提供する。これらの記載のそれぞれは、様々な実施形態の例を提供するだけであり、これらの記載、又は上記で説明した実施形態のいずれかに限定する意図ではない。
本発明の一局面に従って、データ処理システムは、オペランドを格納するメモリと、少なくとも1つの汎用レジスタとを有する。プロセッサ回路は、1又はそれより多くの命令を実行し、そして1又はそれより多くの命令のうちの少なくとも1つは、データ・エレメントをメモリと少なくとも1つの汎用レジスタとの間で転送する。少なくとも1又はそれより多くの命令は、少なくとも1つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立してメモリの中のデータ・エレメントのサイズを指定する。一形式において、1又はそれより多くの命令は、メモリのための第1のデータ・サイズ修飾子、及び少なくとも1つの汎用レジスタのための第2のデータ・サイズ修飾子を別々に格納する独立のフィールドを含む。別の形式において、1又はそれより多くの命令は、メモリのための第1のデータ・サイズ修飾子、及び少なくとも1つの汎用レジスタのための第2のデータ・サイズ修飾子を定義するための格納場所を指定する。一形式において、格納場所は、メモリの中の1つの場所と当該メモリに対して外部のプロセッサ・レジスタ場所とのうちのいずれかの1つである。別の形式において、格納場所は、データ処理システムの制御レジスタである。一形式において、格納場所は、データ処理システムが実行する算術、論理及びシフト演算を利用するデータ処理システム内のレジスタである。メモリは更に、メモリと少なくとも1つの汎用レジスタとの間で転送されるべき複数の多重データ・エレメントを含み得る。一形式において、多重データ・エレメントは、メモリの中で連続である。別の形式において、多重データ・エレメントは、メモリの中で非連続である。一形式において、少なくとも1つの汎用レジスタのそれぞれが、多重データ・エレメントを保持する。別の形式において、少なくとも1つの汎用レジスタのそれぞれが、1次元メモリ・マップを有するスカラ・レジスタを含む。
少なくとも1又はそれより多くの命令が、少なくとも1つの汎用レジスタの中のデスティネーション・データ・エレメントのサイズより大きいメモリの中のソース・データ・エレメントのサイズを指定するとき、プロセッサ回路は、メモリの中のソース・データ・エレメントの一部分の切り捨てを行い得る。切り捨てをされるメモリの中のソース・データ・エレメントの部分は、メモリの中のソース・データ・エレメントの高い桁部分であり得る。切り捨てをされるメモリの中のソース・データ・エレメントの部分は、メモリの中の低い桁部分であり得る。少なくとも1又はそれより多くの命令が、少なくとも1つの汎用レジスタの中のデスティネーション・データ・エレメントのサイズより大きいメモリの中のソース・データ・エレメントのサイズを指定するとき、プロセッサ回路は、メモリの中のソース・データ・エレメントの高い桁部分の値に基づいてメモリの中のソース・データ・エレメントの高い桁部分を丸めることを行い得る。少なくとも1又はそれより多くの命令が、メモリの中のソース・データ・エレメントのサイズが少なくとも1つの汎用レジスタの中のデスティネーション・データ・エレメントより小さいサイズを有するよう指定するとき、プロセッサ回路は、メモリからのソース・データ・エレメントにより充填されない少なくとも1つの汎用レジスタのデスティネーション・データ・エレメントの部分に所定のデータ値を置き得る。一形式において、プロセッサ回路は、ゼロ拡張を用いることにより、少なくとも1つの汎用レジスタのデスティネーション・データ・エレメントの部分に所定のデータ値を置く。別の形式において、プロセッサ回路は、符号拡張を用いることにより、少なくとも1つの汎用レジスタのデスティネーション・データ・エレメントの部分に所定のデータ値を置く。更に別の形式において、プロセッサ回路は、少なくとも1つの汎用レジスタのデスティネーション・データ・エレメントの低い桁のデータ部分に所定のビット値を充填することにより、少なくとも1つの汎用レジスタのデスティネーション・データ・エレメントの部分に所定のデータ値を置き、そしてその所定のビット値は、ゼロ値である。
少なくとも1又はそれより多くの命令が、少なくとも1つの汎用レジスタの中のソース・データ・エレメントのサイズより小さいメモリの中のデスティネーション・データ・エレメントのサイズを指定するとき、プロセッサ回路は、少なくとも1つの汎用レジスタの中のソース・データ・エレメントの一部分を切り捨てることを行い得る。一形式において、プロセッサ回路は、少なくとも1つの汎用レジスタの中のソース・データ・エレメントの高い桁部分を切り捨てる。別の形式において、プロセッサ回路は、少なくとも1つの汎用レジスタの中のソース・データ・エレメントの低い桁部分を切り捨てる。少なくとも1又はそれより多くの命令が、少なくとも1つの汎用レジスタの中のソース・データ・エレメントのサイズより小さいメモリの中のデスティネーション・データ・エレメントのサイズを指定するとき、プロセッサ回路は、ソース・データ・エレメントの低い桁部分の値に基づいて、少なくとも1つの汎用レジスタの中のソース・データ・エレメントの高い桁部分を丸めることを行い得る。少なくとも1又はそれより多くの命令が、少なくとも1つの汎用レジスタの中のソース・データ・エレメントのサイズより大きいメモリの中のデスティネーション・データ・エレメントのサイズを指定するとき、プロセッサ回路は、少なくとも1つの汎用レジスタの中のソース・データ・エレメントにより充填されないメモリの中のデスティネーション・データ・エレメントの一部分に所定のデータ値を置き得る。別の形式において、プロセッサ回路は、ゼロ拡張を用いることにより充填されてないメモリの中のデスティネーション・データ・エレメントの一部分に所定のデータ値を置き、又は符号拡張を用いることにより充填されてないメモリの中のデスティネーション・データ・エレメントの一部分に所定のデータ値を置く。別の形式において、所定のデータ値は、デスティネーション・データ・エレメントの低い桁のデータ部分に所定のビット値を置くことにより、充填されてないメモリの中のデスティネーション・データ・エレメントの一部分に置かれる。
別の局面に従って、データ処理システムにおいてデータ・エレメントをロードして格納する方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも1つの汎用レジスタを設けるステップとを含む。1又はそれより多くの命令が、実行され、その1又はそれより多くの命令のうちの少なくとも1つは、メモリと少なくとも1つの汎用レジスタとの間でデータ・エレメントの転送を生じさせる。少なくとも1又はそれより多くの命令が、少なくとも1つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立にメモリの中のデータ・エレメントのサイズを指定する。データ・エレメントのサイズは、少なくとも1又はそれより多くの命令内の独立のフィールドを実行することにより指定され、第1のフィールドは、メモリに関する第1のデータ・サイズ修飾子を指示し、そして第2のフィールドは、少なくとも1つの汎用レジスタに関する第2のデータ・サイズ修飾子を指示する。データ・エレメントのサイズは、少なくとも1又はそれより多くの命令内の所定のフィールドを実行することにより指定され得て、当該所定のフィールドは、メモリに関する第1のデータ・サイズ修飾子と少なくとも1つの汎用レジスタに関する第2のデータ・サイズ修飾子とを定義するための格納場所を指示する。メモリの中のソース・データ・エレメントの一部分は、少なくとも1又はそれより多くの命令が少なくとも1つの汎用レジスタの中のデスティネーション・データ・エレメントのサイズより大きいメモリの中のソース・データ・エレメントのサイズを指定するとき切り捨てをされ得る。別の形式において、メモリの中のソース・データ・エレメントの高い桁部分は、少なくとも1又はそれより多くの命令が少なくとも1つの汎用レジスタの中のデスティネーション・データ・エレメントのサイズより大きいメモリの中のソース・データ・エレメントのサイズを指定するとき、メモリの中のソース・データ・エレメントの低い桁部分の値に基づいて丸めをされ得る。別の形式において、データ処理システムは、メモリと、データ処理命令を実行するプロセッサとを含む。データ処理命令のうちの少なくとも1つが、メモリに対して外部であるデータ処理システムにおける少なくとも1つの格納場所に格納されたデータ・エレメントのサイズを指定することから別個に且つそのことから独立に、メモリに格納されたデータ・エレメントのサイズを指定する制御情報を含む。
別の形式において、データ処理システムのプロセッサ回路は、少なくとも、第1の命令とその第1の命令に続く第2の命令とを実行する。第1の命令は、データ・エレメントのストリームをメモリと少なくとも1つの汎用レジスタとの間で転送して、それをメモリと少なくとも1つの汎用レジスタとのうちの少なくとも1つにおいてデキューする。第2の命令は、少なくとも第1のソース・オペランドを含み、そして第2の命令のソース・オペランドとして現れる少なくとも1つの汎用レジスタに基づいてデータ・エレメントのストリームの一部分を条件付けでデキューする。データ・エレメントのストリームの一部分を条件付けでデキューすることは、少なくとも1つの汎用レジスタが、第2の命令により指定された所定のタイプの関数のためのソース・オペランドとして用いられるとき実行され得る。別の形式において、データ・エレメントのストリームの一部分を条件付けでデキューすることは、第2の命令の制御フィールドの値に基づいて実行される。第2の命令は更に、第2のソース・オペランドを含み得て、そして条件付けでデキューすることは、少なくとも1つの汎用レジスタが第1のソース・オペランドとして現れるとき実行され得る。一形式において、条件付けでデキューすることは、少なくとも1つの汎用レジスタが第2のソース・オペランドとして現れるときは実行されない。
別の局面に従って、データ処理システムにおいてデータ・エレメントを選択的にデキューする方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも1つの汎用レジスタを設けるステップとを含む。少なくとも、第1の命令とその第1の命令に続く第2の命令とが、実行される。データ・エレメントのストリームが、第1の命令に応答して、メモリと少なくとも1つの汎用レジスタとの間で転送される。メモリと少なくとも1つの汎用レジスタとのうちの少なくとも1つの中のデータ・エレメントのストリームが、デキューされる。第1の命令に続く第2の命令が、実行される。第2の命令は、少なくとも第1のソース・オペランドを含む。データ・エレメントのストリームの一部分は、少なくとも1つの汎用レジスタが第2の命令のソース・オペランドとして現れることに基づいて、条件付けでデキューされる。データ・エレメントのストリームの一部分は、少なくとも1つの汎用レジスタが第2の命令により指定された所定のタイプの関数に対するソース・オペランドとして用いられる。第2のソース・オペランドは、第2の命令内に設けられ得て、そしてデータ・エレメントのストリームの一部分は、少なくとも1つの汎用レジスタが第1のソース・オペランドとして現れるとき、条件付けでデキューされ得る。一形式において、デキューすることは、少なくとも1つの汎用レジスタが第2のソース・オペランドとして現れるとき、実行されない。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと、少なくとも1つの汎用レジスタとを含む。プロセッサ回路は、複数の命令を実行し、当該複数の命令のうちの第1の命令は、データ・エレメントのストリームをメモリと少なくとも1つの汎用レジスタとの間で転送して、それをメモリ及び少なくとも1つの汎用レジスタのうちの少なくとも1つにデキューする。データ・エレメントのストリームの一部分は、複数の命令の適正なサブセット内の所定の命令に対応する複数の命令のうちの第2の命令に応答して条件付けでデキューされる。プロセッサ回路は更に、少なくとも1つ汎用レジスタが複数の命令のうちの第2の命令のソース・オペランドとして現れることに基づいてデータ・エレメントのストリームの一部分を条件付けでデキューし得る。プロセッサ回路は更に、複数の命令のうちの第2の命令の制御フィールドの値に基づいてデータ・エレメントのストリームの一部分を条件付けでデキューし得る。
別の局面に従って、データ処理システムにおいてデータ・エレメントを選択的にデキューする方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも1つの汎用レジスタを設けるステップとを含む。複数の命令が、実行され、当該複数の命令のうちの第1の命令が、データ・エレメントのストリームをメモリと少なくとも1つの汎用レジスタとの間で転送する。データ・エレメントのストリームは、メモリと少なくとも1つの汎用レジスタとのうちの少なくとも1つにおいてキュー(queu)される。データ・エレメントのストリームの一部分は、複数の命令の適正なサブセット内の所定の命令に対応する複数の命令のうちの第2の命令に応答して条件付けでデキューされる。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと、少なくとも1つの汎用レジスタとを含む。プロセッサ回路は、複数の命令を実行する。複数の命令のうちの第1の命令は、データ・エレメントのストリームをメモリと少なくとも1つの汎用レジスタとの間で転送する。データ・エレメントのストリームの一部分は、少なくとも1つの汎用レジスタが複数の命令のうちの第2の命令のデスティネーション・オペランドとして現れることに基づいて条件付けでエンキューされる。
別の局面に従って、データ処理システムにおいてデータ・エレメントを選択的にエンキューする方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも1つの汎用レジスタを設けるステップとを含む。複数の命令が、実行され、当該複数の命令のうちの第1の命令は、データ・エレメントのストリームを、メモリと少なくとも1つの汎用レジスタとの間で転送して、メモリと少なくとも1つの汎用レジスタとのうちの少なくとも1つにおいてキューする。データ・エレメントのストリームの一部分は、少なくとも1つの汎用レジスタが複数の命令のうちの第2の命令のデスティネーション・オペランドとして現れることに基づいて条件付けでエンキューされる。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと、少なくとも1つの汎用レジスタとを含む。プロセッサ回路は、少なくとも、第1の命令とその第1の命令に続く第2の命令とを実行する。第1の命令は、データ・エレメントのストリームを、メモリと少なくとも1つの汎用レジスタとの間で転送して、メモリと少なくとも1つの汎用レジスタとのうちの少なくとも1つにおいてキューされる。第2の命令は、少なくとも第1のデスティネーション・オペランドを含む。データ・エレメントのストリームの一部分は、少なくとも1つの汎用レジスタが第2の命令のデスティネーション・オペランドとして現れることに基づいて条件付けでエンキューされる。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと少なくとも1つの汎用レジスタとを含む。プロセッサ回路は、少なくとも第1の命令と、その第1の命令に続く第2の命令とを実行する。第1の命令は、データ・エレメントのストリームを、メモリと少なくとも1つの汎用レジスタとの間で転送して、メモリと少なくとも1つの汎用レジスタとのうちの少なくとも1つにおいてキューされる。第1の命令は更に、転送されるべきデータ・エレメントの数を指定し、そして少なくとも1つの汎用レジスタが第2の命令のソース・オペランドとして現れることに基づいて、データ・エレメントのストリームの一部分からの複数のデータ・エレメントを条件付けでデキューする。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと少なくとも1つの汎用レジスタとを含む。プロセッサ回路は、少なくとも第1の命令と、その第1の命令に続く第2の命令とを実行する。第1の命令は、データ・エレメントのストリームを、メモリと少なくとも1つの汎用レジスタとの間で転送して、メモリと少なくとも1つの汎用レジスタとのうちの少なくとも1つにおいてキューされる。第1の命令は更に、転送されるべきデータ・エレメントの数を指定し、そして少なくとも1つの汎用レジスタが第2の命令のデスティネーション・オペランドとして現れることに基づいて、データ・エレメントのストリームの一部分からの複数のデータ・エレメントを条件付けでエンキューする。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと、少なくとも1つの汎用レジスタと、プロセッサ回路とを含む。プロセッサ回路は、複数の命令を実行する。複数の命令のうちの第1の命令は、データ・エレメントのストリームを、メモリと少なくとも1つの汎用レジスタとの間で転送して、メモリと少なくとも1つの汎用レジスタとのうちの少なくとも1つにおいてキューされる。データ・エレメントのストリームの一部分をエンキューすることとその一部分をデキューすることとのうちの少なくとも1つのことは、複数の命令のうちの第2の命令内の制御フィールドに応答して、条件付けで実行される。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと複数の汎用レジスタとを含み、各汎用レジスタは、多重データ・エレメントを保持する。プロセッサ回路は、1又はそれより多くの命令を実行し、そして当該1又はそれより多くの命令のうちの少なくとも1つは、複数のデータ・エレメントをメモリと複数の汎用レジスタのうちの少なくとも2つの汎用レジスタとの間で転送し、そこにおいて、少なくとも1又はそれより多くの命令が、複数の汎用レジスタのうちの少なくとも2つの汎用レジスタのそれぞれとメモリとの間で転送されるべきレジスタ・エレメントの数を指定する。1又はそれより多くの命令は、その上、転送されるべきレジスタ・エレメントの数に加えて、レジスタ・エレメントのうちのどれをロード又は格納すべきかを指定する。別の形式において、サブセットの多重データ・エレメントのみが複数の汎用レジスタのうちの少なくとも2つの汎用レジスタのそれぞれとメモリとの間で転送されるとき、いずれの未指定のデータ・エレメントが、所定の値で満たされる。
別の局面に従って、データ処理システムにおいてデータ・エレメントを転送する方法は、オペランドをメモリに格納するステップを含む。多重データ・エレメントが、複数の汎用レジスタのそれぞれに格納される。1又はそれより多くの命令は、データ処理システムにより実行される。1又はそれより多くの命令のうちの少なくとも1つの命令は、メモリと複数の汎用レジスタのうちの少なくとも2つの汎用レジスタとの間の複数のデータ・エレメントの転送を生じさせる。少なくとも1又はそれより多くの命令は、複数の汎用レジスタのうちの少なくとも2つの汎用レジスタのそれぞれとメモリとの間で転送されるべきレジスタ・エレメントの数を指定する。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと複数の汎用レジスタとを含み、それぞれの汎用レジスタは、多重データ・エレメントを保持する。プロセッサ回路が、1又はそれより多くの命令を実行し、1又はそれより多くの命令のうちの少なくとも1つは、複数のデータ・エレメントをメモリと複数の汎用レジスタのうちの少なくとも2つの汎用レジスタとの間で転送する。少なくとも1又はそれより多くの命令は、複数の汎用レジスタのうちの少なくとも2つの汎用レジスタのどのデータ・エレメントが転送されるべきであるかを指定する。多重データ・エレメントのサブセットのみが転送されるとき、いずれの指定されていないデータ・エレメントは、プロセッサ回路により所定の値で充填される。一形式において、少なくとも1又はそれより多くの命令により指定されるデータ・エレメントは、複数の汎用レジスタのうちの少なくとも2つの汎用レジスタ内に連続して位置される。別の形式において、少なくとも1又はそれより多くの命令により指定されるデータ・エレメントは、複数の汎用レジスタのうちの少なくとも2つの汎用レジスタ内に連続しては位置されない。
別の局面に従って、データ処理システムにおいてデータ・エレメントを転送する方法は、オペランドをメモリに格納するステップと、多重データ・エレメントを複数の汎用レジスタのそれぞれに保持するステップとを含む。1又はそれより多くの命令が、実行され、1又はそれより多くの命令のうちの少なくとも1つが、メモリと複数の汎用レジスタのうちの少なくとも2つの汎用との間での複数のデータ・エレメントの転送を生じさせ、そこにおいて、少なくとも1又はそれより多くの命令は、複数の汎用レジスタのうちの少なくとも2つの汎用レジスタのどのデータ・エレメントが転送されるべきかを指定する。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと複数の汎用レジスタとを含み、そこにおいて、各汎用レジスタは、多重データ・エレメントを保持する。プロセッサ回路は、1又はそれより多くの命令を実行し、その1又はそれより多くの命令のうちの少なくとも1つは、複数のデータ・エレメントをメモリと複数の汎用レジスタのうちの少なくとも2つの汎用レジスタとの間で転送し、そこにおいて、少なくとも1又はそれより多くの命令は、複数の汎用レジスタのうちの少なくとも2つの汎用レジスタのそれぞれとメモリとの間で転送されるべきデータ・エレメントの数を指定し、そして更に、転送されるべきデータ・エレメントの合計数を指定する。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと少なくとも1つの汎用レジスタとを含む。プロセッサ回路は、1又はそれより多くの命令を実行し、当該1又はそれより多くの命令のうちの少なくとも1つは、データ・エレメントをメモリと少なくとも1つの汎用レジスタとの間で転送するためのものであり、そこにおいて、1又はそれより多くの命令のうちの1つは、(a)メモリの中の連続のデータ・エレメントの第1の部分内のデータ・エレメント間の第1のオフセットと、(b)メモリと少なくとも1つのGPRとの間で転送されるべきデータ・エレメントの第1の数と、(c)メモリの中のデータ・エレメントの第1の部分と第2の部分との間の第2のオフセットとを指定する。一形式において、1又はそれより多くの命令は更に、メモリの中のデータ・エレメントのデータ・エレメント・サイズを指定する。別の形式において、1又はそれより多くの命令のうちの1つは更に、少なくとも1つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立してメモリの中のデータ・エレメントのサイズを指定する。プロセッサ回路は、メモリの中のデータ・エレメントのサイズに基づいて転送されるべきデータ・エレメントの合計数を決定する。プロセッサ回路は、少なくとも1つの汎用レジスタの中のデータ・エレメントのサイズに基づいて転送されるべきデータ・エレメントの合計数を決定し得る。1又はそれより多くの命令は更に、メモリと少なくとも1つの汎用レジスタとの間で転送されるべきデータ・エレメントの合計数を指定し得る。データ処理システムは更に、第1の汎用レジスタと第2の汎用レジスタとを含み、そこにおいて、1又はそれより多くの命令のうちの1つは、1又はそれより多くの命令のうちの1つを実行することに応答して、データ・エレメントをメモリと第1の汎用レジスタ及び第2の汎用レジスタの両方との間で転送する。1又はそれより多くの命令のうちの1つは更に、メモリと第1の汎用レジスタ及び第2の汎用レジスタの両方との間で転送されるべきデータ・エレメントの合計数を指定し得る。転送されるデータ・エレメントの合計数が第2の汎用レジスタを完全には満たさない場合、プロセッサ回路は、いずれの残りのビット位置の少なくとも一部分を所定の値で満たし得る。1又はそれより多くの命令のうちの1つは更に、メモリと第1及び第2の汎用レジスタのそれぞれとの間で転送されるべきデータ・エレメントのそれぞれの数を別々に指定し得る。転送されるデータ・エレメントの合計数が第2の汎用レジスタを完全には満たさない場合、プロセッサ回路は、いずれの残りのビット位置の少なくとも一部分を所定の値で満たし得る。1又はそれより多くの命令のうちの1つは更に、1つの修飾子を含み、そこにおいて、第2のオフセットは、第1の数のデータ・エレメントを転送しながら、プロセッサ回路により1回以下で用いられる。プロセッサ回路は、1又はそれより多くの命令のうちの1つが第2のオフセットがたった1回用いられるべきであることを指定するとき、サーキュラー・バッファを用いることによりメモリの中のデータ・エレメントを通信し得る。1又はそれより多くの命令のうちの1つは更に、1つの修飾子を含み、そこにおいて、転送されるべき第1の数のデータ・エレメントが転送されるべきデータ・エレメントの第1の部分の2倍より大きい場合、第2のオフセットが、プロセッサ回路により2回以上用いられる。
別の局面に従って、データ処理システムは、オペランドを格納するためのメモリと少なくとも1つの汎用レジスタとを含む。プロセッサ回路は、1又はそれより多くの命令を実行し、当該1又はそれより多くの命令のうちの少なくとも1つは、データ・エレメントをメモリと少なくとも1つの汎用レジスタとの間で転送し、そこにおいて、1又はそれより多くの命令のうちの1つは、1又はそれより多くのデータ・エレメントをビット反転した順序でメモリと少なくとも1つの汎用レジスタとの間で転送することを実行するための基数修飾子(radix specifier)を指定する。
別の局面に従って、多重アドレッシング・モードを用いる方法は、オペランドを格納するためのメモリを設ける。少なくとも1つの汎用レジスタが、設けられる。1又はそれより多くの命令が、実行され、当該1又はそれより多くの命令のうちの少なくとも1つが、データ・エレメントをメモリと少なくとも1つの汎用レジスタとの間で転送する。1又はそれより多くの命令のうちの少なくとも1つは、メモリの中の連続したデータ・エレメントの第1の部分内のデータ・エレメント間の第1のオフセットを指定する。1又はそれより多くの命令のうちの少なくとも1つは、メモリと少なくとも1つの汎用レジスタ(GPR)との間で転送されるべきデータ・エレメントの第1の数を指定する。1又はそれより多くの命令のうちの少なくとも1つは更に、メモリの中のデータ・エレメントの第1の部分と第2の部分との間の第2のオフセットを指定し得る。1又はそれより多くの命令のうちの少なくとも1つを用いて、メモリの中のデータ・エレメントのデータ・エレメント・サイズを更に指定し得る。1又はそれより多くの命令のうちの少なくとも1つを用いて、少なくとも1つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立してメモリの中のデータ・エレメントのサイズを更に指定し得る。プロセッサを用いて、メモリの中のデータ・エレメントのサイズに基づいて転送されるべきデータ・エレメントの合計数を決定し得る。プロセッサを用いて、少なくとも1つの汎用レジスタの中のデータ・エレメントのサイズに基づいて転送されるべきデータ・エレメントの合計数を決定し得る。1又はそれより多くの命令のうちの少なくとも1つの命令を用いて、メモリと少なくとも1つの汎用レジスタとの間で転送されるべきデータ・エレメントの合計数を更に指定し得る。第1の汎用レジスタと第2の汎用レジスタとが、設けられ、そして1又はそれより多くの命令のうちの1つを実行することに応答して、データ・エレメントをメモリと第1の汎用レジスタ及び第2の汎用レジスタの両方との間で転送し得る。1又はそれより多くの命令のうちの1つを用いて、メモリと第1の汎用レジスタ及び第2の汎用レジスタの両方との間で転送されるべきデータ・エレメントの合計数を更に指定し得る。一形式において、転送される合計数のデータ・エレメントが第2の汎用レジスタを完全には満たさない場合、第2の汎用レジスタの中のいずれの残りの未充填のビット位置の少なくとも一部分が、所定の値で満たされる。1又はそれより多くの命令のうちの1つを用いて、メモリと第1及び第2の汎用レジスタのそれぞれとの間で転送されるべきデータ・エレメントの数を更に別々に指定し得る。一形式において、転送される合計数のデータ・エレメントが第2の汎用レジスタを完全には満たさない場合、いずれの残りのビット位置の少なくとも一部分が、ゼロのような所定の値で満たされる。1又はそれより多くの命令のうちの1つの命令の中の修飾子が、設けられ、そこにおいて、当該修飾子に応答して、第2のオフセットが、プロセッサによりたった1回用いられて、第1の数のデータ・エレメントを転送する。
別の局面に従って、メモリの中のデータ・エレメントは、1又はそれより多くの命令のうちの1つが第2のオフセットを1回のみ用いるべきであることを指定するときサーキュラー・バッファを用いることによりプロセッサの制御下で通信され得る。1又はそれより多くの命令の中の修飾子が、設けられ得て、そこにおいて、転送されるべきデータ・エレメントの第1の数がメモリの中のデータ・エレメントの第1の部分の中のデータ・エレメントの数の2倍より大きい場合、第2のオフセットが、プロセッサにより2回以上用いられる。1又はそれより多くの命令の中の基数修飾子が、設けられ得て、当該基数修飾子は、1又はそれより多くのデータ・エレメントをビット逆順でメモリと少なくとも1つの汎用レジスタとの間で転送することを実行する。
別の局面に従って、データ処理アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも1つの汎用レジスタを設けるステップとを含む。1又はそれより多くの命令が、実行され、1又はそれより多くの命令のうちの少なくとも1つが、データ・エレメントをメモリと少なくとも1つの汎用レジスタとの間で転送するステップを含む。1又はそれより多くの命令のうちの少なくとも1つが、1又はそれより多くの命令のうちの少なくとも1つの中の基数修飾子を指定し、その基数修飾子は、1又はそれより多くのデータ・エレメントをビット逆順でメモリと少なくとも1つの汎用レジスタとの間で転送することを実行する。
別の局面に従って、データ処理アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも1つの汎用レジスタを設けるステップとを含む。プロセッサ回路が、1又はそれより多くの命令を実行するため設けられる。1又はそれより多くの命令のうちの少なくとも1つが、データ・エレメントをメモリと少なくとも1つの汎用レジスタとの間で転送し、そこにおいて、1又はそれより多くの命令のうちの1つは、所定のデータ・エレメントをメモリの中にビット逆順で格納し、そしてその所定のデータ・エレメントを少なくとも1つの汎用レジスタに転送する。1又はそれより多くの命令のうちの少なくとも1つは更に、少なくとも1つの汎用レジスタに転送すべきデータ・エレメントの数を指定する。別の形式において、1又はそれより多くの命令のうちの少なくとも1つは更に、少なくとも1つの汎用レジスタの中のデータ・エレメントのサイズを指定することとは別個に且つそのことから独立してメモリの中のデータ・エレメントのサイズを指定する。
別の局面に従って、データ処理システム・アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも1つの汎用レジスタを設けるステップとを含む。プロセッサ回路が、1又はそれより多くの命令を実行するため設けられ、当該1又はそれより多くの命令のうちの少なくとも1つが、データ・エレメントをメモリと少なくとも1つの汎用レジスタとの間で転送し、そこにおいて、1又はそれより多くの命令のうちの1つは、所定のデータ・エレメントをメモリの中に順次の順序で格納し、そしてその所定のデータ・エレメントを少なくとも1つの汎用レジスタにビット逆順で転送する。
別の局面に従って、データ処理システム・アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも1つの汎用レジスタを設けるステップとを含む。プロセッサ回路が、1又はそれより多くの命令を実行するため設けられ、当該1又はそれより多くの命令のうちの少なくとも1つが、データ・エレメントをメモリと少なくとも1つの汎用レジスタとの間で転送し、そこにおいて、1又はそれより多くの命令のうちの1つは、所定のデータ・エレメントを少なくとも1つの汎用レジスタの中にビット逆順で格納すること、及びその所定のデータ・エレメントをメモリに転送することを実行する。
別の局面に従って、データ処理システム・アドレッシング方法は、オペランドを格納するためのメモリを設けるステップと、少なくとも1つの汎用レジスタを設けるステップとを含む。プロセッサ回路が、1又はそれより多くの命令を実行するため設けられ、当該1又はそれより多くの命令のうちの少なくとも1つが、データ・エレメントをメモリと少なくとも1つの汎用レジスタとの間で転送し、そこにおいて、1又はそれより多くの命令のうちの1つは、所定のデータ・エレメントを少なくとも1つの汎用レジスタの中に順次の順序で格納し、そしてその所定のデータ・エレメントをメモリにビット逆順で転送する。
前述の詳細において、本発明は、特定の実施形態、事例及び局面を参照して説明された。しかしながら、当業者は、添付の特許請求の範囲に記載される本発明の範囲から逸脱することなしに様々な変更及び変化を行うことができることを認めるであろう。例えば、ブロック図は、図示した以外の異なるブロックを含み得て、そしてより多くの又はより少ないブロックを有し得て、又は異なっているよう配列され得る。また、別の例として、本明細書で説明した命令は、様々な異なるフォーマットを有し、そして図示した以外の異なる制御フィールド及びパラメータを用いことができる。各命令は、多重命令として実行されることさえあり得る。また、別の例として、本明細書で説明したレジスタは、データ処理システム内の任意の場所に配置されるいずれのタイプの記憶回路であることができる。従って、本明細書及び図面は、限定する意味よりむしろ例示と考えられるべきであり、そして全てのそのような変更は、本発明の範囲内に含まれることを意図している。
恩恵、他の利点、及び問題に対する解法が、特定の実施形態に関して上記で説明した。しかしながら、上記恩恵、利点、問題に対する解法、及びいずれの恩恵、利点、又はより明白に生じる又はより明白になる解法を生じ得るいずれの構成要素は、特許請求の範囲のいずれか又は全てに記載の重要で、要求された、又は本質的な特徴又は構成要素として解釈されるべきでない。本明細書で用いられたように、用語「備える」「備えている」、又はそれらのいずれの他の変形表現は、非排他的包含をカバーすることを意図され、それにより、一連の構成要素を備えるプロセス、方法、物品、又は装置は、それらの構成要素のみ含むわけではなく、しかし明示的に列挙されてなく又はそのようなプロセス、方法、物品又は装置に対して本来的でない他の構成要素を含み得る。