(57)【特許請求の範囲】
【請求項１】
コンピュータプロセッサでギャザーストライド命令を実行する方法であって、
デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を示す前記ギャザーストライド命令をフェッチする段階と、
フェッチされた前記ギャザーストライド命令をデコードする段階と、
フェッチされた前記ギャザーストライド命令を実行する段階であって、前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからストライドされたデータ要素を前記デスティネーションレジスタに格納する、前記実行する段階と
を備え、
前記実行する段階は、
前記ギャザーストライド命令の前記書き込みマスクおよびデスティネーションレジスタが同じレジスタかの判断を行い、前記書き込みマスクおよびデスティネーションレジスタが同じレジスタである場合は、前記ギャザーストライド命令の実行を中断する段階と、
前記メモリ内の第１のデータ要素のアドレスを生成する段階とを含み、
前記アドレスは、前記ストライド値と、前記スケール値と、インデックスとを乗算して、前記ベース値および変位値を前記乗算された値に加算することにより決定される方法。
【請求項２】
前記実行する段階は、
前記ベース値を利用して決定される、前記メモリ内の前記第１のデータ要素のアドレスを生成する段階と
前記メモリ内の第１のデータ要素に対応している、前記書き込みマスクの第１のマスクビット値が、前記メモリ内の第１のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階と
を含み、
前記メモリ内の第１のデータ要素に対応している、前記書き込みマスクの前記第１のマスクビット値が、前記第１のデータ要素が格納されるべきであることを示していない場合、前記メモリ内の前記第１のデータ要素を前記デスティネーションレジスタの前記対応する位置に格納せずに、前記デスティネーションレジスタの前記対応する位置のデータ要素を放置して、
前記メモリ内の第１のデータ要素に対応している、前記書き込みマスクの前記第１のマスクビット値が、前記第１のデータ要素が格納されるべきであることを示している場合、前記第１のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第１のマスクビットをクリアして、格納に成功したことを示す、請求項１に記載の方法。
【請求項３】
前記第１のマスクビット値は、前記書き込みマスクの最下位ビットであり、前記デスティネーションレジスタの前記第１のデータ要素は、前記デスティネーションレジスタの最下位データ要素である、請求項２に記載の方法。
【請求項４】
前記実行する段階は、
前記メモリ内の第１のデータ要素に対するフォルトがあると判断する段階と、
前記実行する段階を中断する段階と
をさらに含む、請求項２または３に記載の方法。
【請求項５】
前記実行する段階は、
前記スケール値、ベース値、およびストライド値を利用して決定される、前記メモリ内の第２のデータ要素のアドレスを生成する段階と、
前記メモリ内の第２のデータ要素に対応している、前記書き込みマスクの第２のマスクビット値が、前記メモリ内の第２のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階と
をさらに含み、
前記メモリ内の第２のデータ要素に対応している、前記書き込みマスクの前記第２のマスクビット値が、前記第２のデータ要素が格納されるべきであることを示していない場合、前記メモリ内の前記第２のデータ要素を前記デスティネーションレジスタの前記対応する位置に格納せずに、前記デスティネーションレジスタの前記対応する位置のデータ要素を放置して、
前記メモリ内の第２のデータ要素に対応している、前記書き込みマスクの前記第２のマスクビット値が、前記第２のデータ要素が格納されるべきであることを示している場合、前記第２のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第２のマスクビットをクリアして、格納に成功したことを示し、前記第２のデータ要素は、前記第１のデータ要素からデータ要素Ｘ個分、離れており、Ｘは前記ストライド値である、請求項２から４のいずれか一項に記載の方法。
【請求項６】
前記デスティネーションレジスタの前記データ要素のサイズは３２ビットであり、前記書き込みマスクはベクトルレジスタであり、前記書き込みマスクの各データ要素の符号ビットが、マスクビットである、請求項１から５のいずれか一項に記載の方法。
【請求項７】
ハードウェアデコーダと、
実行ロジックと
を備える装置であって、
前記ハードウェアデコーダは、
デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を示すギャザーストライド命令と、
ソースレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリデスティネーションアドレス情報を示すスキャッタストライド命令とをデコードして、
前記実行ロジックは、
デコードされた前記ギャザーストライド命令および前記スキャッタストライド命令を実行して、デコードされた前記ギャザーストライド命令の実行により、前記ギャザーストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからのストライドされたデータ要素を前記デスティネーションレジスタに格納し、デコードされた前記スキャッタストライド命令の実行により、前記スキャッタストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、データ要素を前記メモリのストライドされた位置に格納し、
前記実行ロジックは、前記ギャザーストライド命令の実行により、前記メモリ内の第１のデータ要素のアドレスを生成し、前記ギャザーストライド命令の前記書き込みマスクおよびデスティネーションレジスタが同じレジスタかの判断を行い、前記書き込みマスクおよびデスティネーションレジスタが同じレジスタである場合は、前記ギャザーストライド命令の実行を中断し、
前記アドレスは、前記ストライド値と、前記スケール値と、インデックスとを乗算して、前記ベース値および変位値を前記乗算された値に加算することにより決定される装置。
【請求項８】
前記実行ロジックは、ベクトル実行ロジックを含む、請求項７に記載の装置。
【請求項９】
前記ギャザーストライド命令の前記デスティネーションレジスタまたは前記スキャッタストライド命令の前記ソースレジスタは、５１２ビットのベクトルレジスタである、請求項７に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
本発明の分野は、一般的に、コンピュータプロセッサアーキテクチャに関しており、より詳しくは、実行されると特定の結果を生じさせる命令に関する。
【０００２】
プロセッサのＳＩＭＤ（single instruction, multiple data）幅が大きくなるにつれて、アプリケーションの開発者たち（およびコンパイラたち）は、ＳＩＭＤハードウェアを完全に利用することを難しく感じるようになってきている。これは、彼らが、同時に作業したいデータ要素がメモリに連続して存在していないからである。この問題を解決するための１つの方法としては、ギャザー／スキャッタ命令を利用する、というものがある。命令のギャザーによって、メモリから連続していない（可能性がある）要素セットを読み出して、これらを（通常は１つのレジスタに）パッキングする。スキャッタ命令は、これと逆のことを行う。あいにく、これらギャザー命令もスキャッタ命令も、所定の効率性を達成していない。
【０００３】
本発明を図面に限定ではなく例示として示すが、図面において同様の参照番号は同様の部材を示している。
【図面の簡単な説明】
【０００４】
【図１】ギャザーストライド命令の実行の一例を示す。
【図２】ギャザーストライド命令の実行の別の例を示す。
【図３】ギャザーストライド命令の実行のまた別の例を示す。
【図４】プロセッサでギャザーストライド命令を実行する一実施形態を示す。
【図５】ギャザーストライド命令を処理する方法の一実施形態を示す。
【図６】スキャッタストライド命令の実行の一例を示す。
【図７】スキャッタストライド命令の実行の別の例を示す。
【図８】スキャッタストライド命令の実行のまた別の例を示す。
【図９】プロセッサでスキャッタストライド命令を実行する一実施形態を示す。
【図１０】スキャッタストライド命令を処理する方法の一実施形態を示す。
【図１１】ギャザーストライドプリフェッチ命令の実行の一例を示す。
【図１２】プロセッサでギャザーストライドプリフェッチ命令を利用する一実施形態を示す。
【図１３】ギャザーストライドプリフェッチ命令を処理する方法の一実施形態を示す。
【図１４Ａ】本発明の実施形態における、汎用ベクトルフレンドリーな命令フォーマットと、そのクラスＡ命令テンプレートとを示すブロック図である。
【図１４Ｂ】本発明の実施形態における、汎用ベクトルフレンドリーな命令フォーマットと、そのクラスＢ命令テンプレートとを示すブロック図である。
【図１５Ａ】本発明の実施形態における、特殊なベクトルフレンドリーな命令フォーマットの一例を示す。
【図１５Ｂ】本発明の実施形態における、特殊なベクトルフレンドリーな命令フォーマットの一例を示す。
【図１５Ｃ】本発明の実施形態における、特殊なベクトルフレンドリーな命令フォーマットの一例を示す。
【図１６】本発明の実施形態における、レジスタアーキテクチャのブロック図である。
【図１７Ａ】本発明の実施形態における、シングルＣＰＵコアと、そのオンダイ相互接続ネットワークおよびレベル２（Ｌ２）キャッシュのローカルサブセットとの接続を示すブロック図である。
【図１７Ｂ】本発明の実施形態における、図１７ＡのＣＰＵコアの一部の分解図である。
【図１８】本発明の実施形態におけるアウトオブオーダアーキテクチャの一例を示すブロック図である。
【図１９】本発明の一実施形態におけるシステムのブロック図である。
【図２０】本発明の一実施形態における第２のシステムのブロック図である。
【図２１】本発明の一実施形態における第３のシステムのブロック図である。
【図２２】本発明の一実施形態におけるＳｏＣのブロック図である。
【図２３】本発明の実施形態における統合メモリコントローラおよびグラフィックをもつシングルコアプロセッサとマルチコアプロセッサのブロック図である。
【図２４】本発明の実施形態において、ソース命令セットのバイナリ命令を、ターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの利用を比較するブロック図である。
【発明を実施するための形態】
【０００５】
以下の記載では、複数の詳細を述べる。しかし、本発明の実施形態はこれら具体的な詳細がなくとも実施可能である点を理解されたい。他の例では、公知の回路、構造、および技術は詳細に示さず、本記載の理解をあいまいにしないようにしている場合もある。
【０００６】
本明細書全体において、「一実施形態」又は「１つの実施形態」という言い回しは、その実施形態で記載される特定の特徴、構造、又は特性が、本発明の少なくとも１つの実施形態に含まれていることを示す。したがって「一実施形態」又は「１つの実施形態」という言い回しが本明細書の随所にみられても、これらは必ずしも全てが同じ実施形態のことを意味しているわけではない。さらに、特定の特徴、構造、又は特性は、それらが述べられた具体的な実施形態以外の適切な形態で実施することもでき、本願の請求項の範囲には、これらすべての形態が含まれることとする。
【０００７】
高いパフォーマンスの計算／スループットコンピューティングアプリケーションにおいては、非常によく利用される連続していないメモリ参照パターンが「ストライドメモリパターン」である。ストライドメモリパターンは、各要素が、前のものからｅ１９ｔという同じ一定の量、離れている（ストライドと称されている）、まばらなメモリ位置のセットのことである。このメモリパターンは、多次元の「Ｃ」または他のハイレベルプログラミング言語アレイの対角線または列にアクセスする際によく見られる。
【０００８】
ストライドパターンの一例は、Ａ、Ａ＋３、Ａ＋６、Ａ＋９、Ａ＋１２、…であり、ここではＡはベースアドレスでありストライドが３である。ストライドメモリパターンを取り扱うギャザーおよびスキャッタの問題は、要素が無作為にスキャッタしていることを想定して設計されているので、ストライドが本来提供する情報を活用することができない点である（高いレベルの予測性によって、より高いパフォーマンスの実装が可能となる）。さらに、プログラマーおよびコンパイラたちは、既知のストライドを、ギャザー／スキャッタが入力として利用するメモリインデックスのベクトルに変換する際にオーバヘッドを生じてしまう、という点である。以下に、ストライドを活用することができるいくつかのギャザーおよびスキャッタ命令の実施形態、および、これらの命令を実行するために利用可能なシステム、アーキテクチャ、命令セット等の実施形態を示す。
【０００９】
＜ギャザーストライド＞
第１の種類の命令は、ギャザーストライド命令である。この命令をプロセッサで実行すると、メモリのデータ要素が条件付きでデスティネーションレジスタにロードされる。たとえば、一部の実施形態では、１６個までの３２ビット（または８つの６４ビット）の浮動小数点データ要素が条件付きでデスティネーション（たとえばＸＭＭ、ＹＭＭ，またはＺＭＭレジスタ）にパッキングされる。
【００１０】
ロードされるデータ要素は、あるタイプのＳＩＢ（スケール、インデックス、およびベース）の指定によって特定される。一部の実施形態では、命令は、汎用レジスタに渡されるベースアドレス、即値として渡されるスケール、汎用レジスタとして渡されるストライドレジスタ、および随意で変位（displacement）を含んでいる。もちろん、ベースアドレスおよび／またはストライドの即値等を含む命令等の他の実装例を利用することもできる。
【００１１】
ギャザーストライド命令も書き込みマスクを含む。専用マスクレジスタ（たとえば後述する「ｋ」書き込みマスク）を利用する一部の実施形態では、対応する書き込みマスクビットがそうすべきと示しているとき（たとえば一部の実施形態ではビットが「１」の場合）に、メモリデータ要素がロードされる。他の実施形態では、データ要素の書き込みマスクビットは、書き込みマスクレジスタ（たとえばＸＭＭまたはＹＭＭレジスタ）からの対応する要素の符号ビットである。これら実施形態では、書き込みマスク要素は、データ要素と同じサイズとして扱われる。データ要素の対応する書き込みマスクビットが設定されていない場合には、デスティネーションレジスタ（ＸＭＭ、ＹＭＭ、またはＺＭＭレジスタ）の対応するデータ要素を変更せずにおく。
【００１２】
通常は、ギャザーストライド命令の実行によって、例外的事例を除いて、書き込みマスクレジスタ全体がゼロに設定される。しかし、一部の実施形態では、命令が、少なくとも１つの要素が既にギャザーされている場合（つまり、書き込みマスクビットが設定されている最下位のもの以外の要素によって例外がトリガされると）、例外により命令が中断される。こうなると、デスティネーションレジスタおよび書き込みマスクレジスタが、部分的に更新される（ギャザーされている要素は、デスティネーションレジスタに配置され、マスクビットをゼロに設定される）。既にギャザーされている要素からトラップまたは割り込みがペンディングである場合、これらは例外の代わりに配信され、ＥＦＬＡＧＳ再開フラグまたはこの均等物が１に設定され、命令ブレークポイントは、命令が継続されても再度トリガされない。
【００１３】
１２８ビットサイズのベクトルの一部の実施形態では、命令は、４つの単精度浮動小数点値または２つの倍精度浮動小数点値までギャザーされる。２５６ビットサイズのベクトルの一部の実施形態では、命令は、８つの単精度浮動小数点値または４つの倍精度浮動小数点値までギャザーされる。５１２ビットサイズのベクトルの一部の実施形態では、命令は、１６個の単精度浮動小数点値または８個の倍精度浮動小数点値までギャザーされる。
【００１４】
一部の実施形態では、マスクおよびデスティネーションレジスタが同じ場合、この命令はＧＰフォルトを配信する。通常、データ要素値は、任意の順序でメモリから読み出される。しかし、フォルトは右から左の順に配信される。つまり、フォルトが要素によりトリガされて配信されると、デスティネーションＸＭＭ，ＹＭＭ，またはＺＭＭのＬＳＢ付近のすべての要素が完了する（フォルトではない（non-faulting））。ＭＳＢ付近の個々の要素は、完了してもしなくてもよい。任意の要素が複数のフォルトをトリガすると、これらは従来の順序で配信される。この命令はいずれの実装も繰り返すことができる、つまり、同じ入力値およびアーキテクチャ状態である場合には、フォルトになったものの左の同じ要素セットをギャザーする。
【００１５】
この命令の形式の例が、「VGATHERSTR  zmm1 {k1}, [base, scale * stride] + displacement」であり、ここでｚｍｍｌがデスティネーションベクトルレジスタオペランド（たとえば１２８−、２５６−、５１２ビットレジスタ等）であり、ｋｌは、書き込みマスクオペランドであり（たとえば１６ビットのレジスタであり、この例に関しては後述する）、ベース、スケール、ストライド、および変位を利用して、メモリの第１のデータ要素のメモリソースアドレスと、後続するメモリデータエレンメントのストライド値とを生成して、デスティネーションレジスタに条件付きでパッキングする。一部の実施形態では、書き込みマスクは、異なるサイズ（たとえば８ビット、３２ビット）であってもよい。加えて、一部の実施形態では、書き込みマスクのすべてのビットが、命令により利用されなくてもよいが、この点は後述する。ＶＧＡＴＨＥＲＳＴＲは、命令のオペコードである。通常、各オペランドは命令によって明示的に定義されている。データ要素のサイズは、ここで記載する「Ｗ」等のデータ粒度ビットの情報を利用する等によって、命令の「プレフィックス」部分で定義されている。殆どの実施形態では、データ粒度ビットは、データ要素が３２ビットまたは６４ビットであることを示す。データ要素が３２ビットのサイズであり、ソースが５１２ビットのサイズである場合には、１６個のデータ要素が１つのソースについて存在する。
【００１６】
以下は、この命令に利用可能なアドレス指定への近道である。通常のＩｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ｘ８６）メモリオペランドでは、たとえば[rax + rsi*2]+36であり、ここでRAXがベース（BASE）であり、RSIがINDEXであり、2がスケールSSであり、36が変位であり、括弧[]はメモリオペランドの内容である。したがって、このアドレスにおけるデータは、data = MEM_CONTENTS(addr= RAX + RSI*2 + 36)である。通常のギャザーでは、[rax + zmm2*2]+36であり、RAXがベース（BASE）であり、Zmm2がINDEXの*vector*であり、2がscale SSであり、36が変位であり、[ ]括弧は、メモリオペランドの内容を示す。したがって、データのベクトルは、data[i] = MEM_CONTENTS(addr= RAX + ZMM2[i]*2 + 36)である。ギャザーストライドでは、一部の実施形態で、アドレス指定がここでも、 [rax, rsi*2]+36であり、ここでRAXがBASEであり、RSIがストライド（STRIDE）であり、2がscale SSであり、36が変位であり、括弧[ ]はメモリオペランドの内容である。ここで、データのベクトルが、data[i] = MEM_CONTENTS(addr= RAX + STRIDE*i*2 + 36)である。他の「ストライド」命令が、同様のアドレス指定モデルを示している。
【００１７】
ギャザーストライド命令の実行例を図１に示す。この例では、ソースは、ＲＡＸレジスタにみられるアドレスに、初期アドレス指定されているメモリである（これは、メモリアドレス指定の簡略化された図であり、変位等を、アドレスを生成するために利用することができる）。もちろん、メモリアドレスは、他のレジスタに格納されていても、上述した命令の即値として発見されてもよい。
【００１８】
この例の書き込みマスクは、ビットの値が４ＤＢ４のhe20ecimalの値に対応している１６ビットの書き込みマスクである。「１」の値の書き込みマスクの各ビット位置において、メモリソースからのデータ要素が、デスティネーションレジスタの対応する位置に格納される。書き込みマスクの第１の位置（たとえばkl[0]）は「０」であり、対応するデスティネーションデータ要素位置（たとえばデスティネーションレジスタの第１のデータ要素）が、そこには、ソースメモリからのデータ要素が格納されていないことを示す。この場合、ＲＡＸアドレスに関連しているデータ要素は格納されない。書き込みマスクの次のビットも「０」であり、これは、メモリからの次の「ストライド」されたデータ要素も、デスティネーションレジスタに格納されるべきではないことを示している。この例では、ストライド値が「３」であり、この後続するストライドされたデータ要素は、第１のデータ要素から離れている第３のデータ要素である。
【００１９】
書き込みマスクの第１の「１」の値は、第３のビット位置にある（たとえばkl[2]）。これは、メモリの前のストライドされたデータ要素に後続するストライドされたデータ要素が、デスティネーションレジスタの対応するデータ要素の位置に格納されるべきことを示す。この後続するストライドされたデータ要素は、前のストライドされたデータ要素から３つ離れており、第１のデータ要素からは６つ離れている。
【００２０】
残りの書き込みマスクビット位置も、メモリソースのどの追加的データ要素がデスティネーションレジスタに格納されるかを判断するために利用される（この例では、全部で８つのデータ要素が格納されるが、書き込みマスクビットに応じて、数はこれより多くても少なくてもよい）。加えて、メモリソースからのデータ要素は、デスティネーションのデータ要素のサイズが、たとえば、デスティネーションに格納される前に１６ビットの浮動小数点値から３２ビットの浮動小数点値になるようアップコンバージョンされてよい。アップコンバージョンおよびこれらを命令フォーマットにエンコードする方法の例は、上述した通りである。加えて、一部の実施形態では、メモリオペランドのストライドされたデータ要素が、デスティネーションに格納する前にレジスタに格納される。
【００２１】
ギャザーストライド命令の実行の別の例を図２に示す。この例は、前の例に類似しているが、データ要素のサイズが異なっている（たとえば、データ要素の数が３２ビットではなくて６４ビットである）。このサイズの変更によって、マスクで利用されるビット数も変化する（本例では８である）。一部の実施形態では、マスクの下位のほうの８ビットが利用される（最下位８ビット）。他の実施形態では、マスクの上位のほうの８ビットが利用される（最上位８ビット）。他の実施形態では、マスクの１つおきのビットを利用する（つまり、偶数のビットまたは奇数のビット）。
【００２２】
ギャザーストライド命令の実行の別の例が図３に示されている。この例は、前の例に類似しているが、マスクが１６ビットではない点が異なる。本例では、書き込みマスクレジスタがベクトルレジスタ（たとえばＸＭＭまたはＭＭレジスタ）である。本例では、条件付きで格納される各データ要素の書き込みマスクビットが、書き込みマスクの対応するデータエレンメントの符号ビットである。
【００２３】
図４は、プロセッサのギャザーストライド命令の利用の一実施形態を示す。デスティネーションオペランド、ソースアドレスオペランド（ベース、変位、インデックス、および／またはスケール）および書き込みマスクを有するギャザーストライド命令をフェッチする（４０１）。オペランドのサイズの例は前述したとおりである。
【００２４】
４０３で、ギャザーストライド命令をデコードする。命令の形式に応じて、この段階で、様々なデータを解釈する（たとえば、アップコンバージョン（またはその他のデータ変換）が必要か、どのレジスタに書き込み、またはどのレジスタから取得すべきか、および、ソースメモリアドレスはどれか、等）。
【００２５】
４０５で、ソースオペランド値を取得する／読み取る。ほとんどの実施形態では、メモリソース位置アドレスおよび後続するストライドアドレスに関するデータ要素がこの時点で読み出される（たとえばキャッシュライン全体を読み出す）。加えて、これらは、デスティネーション以外のベクトルレジスタに一時的に格納されてよい。しかしソースからのデータ要素は一回につき１つだけ取得することができる。
【００２６】
実行すべきデータ要素変換がある場合（たとえばアップコンバージョン）、４０７で実行する。たとえばメモリから１６ビットデータ要素を、３２ビットのデータ要素にアップコンバージョンしてよい。
【００２７】
ギャザーストライド命令（または、マイクロオペレーション等の命令を含むオペレーション）が、４０９で実行リソースにより実行される。この実行によって、アドレスメモリのストライドされたデータ要素が、書き込みマスクの対応するビットに基づいて、条件付きで、デスティネーションレジスタに格納される。この格納の例は前述したとおりである。
【００２８】
図５は、ギャザーストライド命令を処理する方法の一実施形態を示す。この実施形態では、オペレーション４０１−４０７のうち全部ではなくとも一部が予め実行されていることを想定しているが、以下では詳細をあいまいにしないよう配慮して示されてはいない。たとえば、フェッチおよびデコードは示されておらず、オペランド（ソースおよび書き込みマスク）の取得も示されていない。
【００２９】
５０１で、マスクとデスティネーションとが同じレジスタかの判断を行う。同じであれば、フォルトを生成して、命令の実行を中断する。
【００３０】
同じでなければ、メモリの第１のデータ要素のアドレスを、ソースオペランドのアドレスデータから生成する（５０３）。たとえばベースおよび変位が、アドレスを生成するために利用される。ここでも、これは前に実行されていてもよい。この時点で、データ要素が前に取得されていなければ、取得される。一部の実施形態では、（ストライド）データ要素の全てではなくてもいくつかが取得される。
【００３１】
５０４で、第１のデータ要素にフォルトがあるかを判断する。フォルトがある場合、命令の実行を中断する。
【００３２】
フォルトがない場合には、メモリの第１のデータ要素に対応している書き込みマスクビット値を、デスティネーションレジスタの対応する位置に格納すべきかを判断する（５０５）。前の例を振り返ると、この判断は、図１の書き込みマスクの最下位の値等の書き込みマスクの最下位位置を参照して、メモリデータ要素をデスティネーションの第１のデータ要素位置に格納すべきかを判断することで行われる。
【００３３】
書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示していない場合には、デスティネーションの第１の位置のデータ要素をそのままにしておく（５０７）。通常、これは、書き込みマスクの「０」の値で示されるが、反対のルール（opposite convention）を適用することもできる。
【００３４】
書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示している場合には、デスティネーションの第１の位置のデータ要素をこの位置に格納する（５０９）。通常、これは、書き込みマスクの「１」の値で示されるが、反対のルールを適用することもできる。データ変換（アップコンバージョン等）が必要な場合には、前に行われていない場合はこのときに行うことができる。
【００３５】
５１１で、第１の書き込みマスクビットをクリアして、書き込みの成功を示す。
【００３６】
条件付きでデスティネーションレジスタに格納する、後続するストライドされたデータ要素のアドレスを５１３で生成する。前の例で詳述したように、このデータ要素は、メモリの前のデータ要素から「ｘ」個のデータ要素分離れており、ここで「ｘ」は、命令に含まれるストライド値である。ここでも、この処理は前に実行されていてもよい。データ要素は、前に取得されていなければ、このときに取得される。
【００３７】
この後続するストライドされたデータ要素にフォルトがあるかの判断を５１５で行う。フォルトがある場合には、命令の実行を中断する。
【００３８】
フォルトがない場合には、メモリの後続するストライドされたデータ要素に対応する書き込みマスクビット値が、デスティネーションレジスタの対応する位置に格納すべきかを判断する（５１７）。前の例を振り返ると、この判断は、図１の書き込みマスクの２番目に最下位の値等の書き込みマスクの次の位置を参照して、メモリデータ要素をデスティネーションの第２のデータ要素位置に格納すべきかを判断することで行われている。
【００３９】
書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示していない場合には、デスティネーションの該当位置のデータ要素をそのままにしておく（５２３）。通常、これは、書き込みマスクの「０」の値で示されるが、反対のルール（opposite convention）を適用することもできる。
【００４０】
書き込みマスクビットが、メモリデータ要素をデスティネーションレジスタに格納すべきであると示している場合には、デスティネーションの第１の位置のデータ要素をこの位置に格納する（５１９）。通常、これは、書き込みマスクの「１」の値で示されるが、反対のルールを適用することもできる。データ変換（アップコンバージョン等）が必要な場合には、前に行われていない場合はこのときに行うことができる。
【００４１】
書き込みマスク評価ビットを５２１でクリアして、書き込みの成功を示す。
【００４２】
評価された書き込みマスク位置が書き込みマスクの最後か、デスティネーションのデータ要素位置の全てが満たされているかの判断を５２５で行う。この判断結果が肯定的である場合には、オペレーションを終了する。否定的な場合には、別の書き込みマスクビットを評価する。
【００４３】
この図および上述した記載は、それぞれの第１の位置を最下位の位置と想定しているが、一部の実施形態では、第１の位置が最上位の位置である。一部の実施形態では、フォルトの決定を行わない。
【００４４】
＜スキャッタストライド＞
第２の種類の命令は、スキャッタストライド命令である。一部の実施形態では、この命令をプロセッサで実行すると、ソースレジスタ（たとえばＸＭＭ，ＹＭＭ，またはＺＭＭ）からデータ要素が、書き込みマスクの値に基づいて、デスティネーションメモリ位置に条件付きで格納される。たとえば一部の実施形態では、１６個までの３２ビット（または８つの６４ビット）の浮動小数点データ要素が条件付きでデスティネーションに格納される。
【００４５】
通常は、デスティネーションメモリ位置は、ＳＩＢ情報（上述した）で特定される。対応するマスクビットがそう指定している場合には、データ要素を格納する。一部の実施形態では、命令は、汎用レジスタに渡されるベースアドレス、即値として渡されるスケール、汎用レジスタとして渡されるストライドレジスタ、および随意で変位（displacement）を含んでいる。もちろん、ベースアドレスおよび／またはストライドの即値等を含む命令等の他の実装例を利用することもできる。
【００４６】
スキャッタストライド命令も書き込みマスクを含む。専用マスクレジスタ（たとえば後述する「ｋ」書き込みマスク）を利用する一部の実施形態では、対応する書き込みマスクビットがそうすべきと示しているとき（たとえば一部の実施形態ではビットが「１」の場合）に、メモリデータ要素がロードされる。他の実施形態では、メモリデータ要素の書き込みマスクビットは、書き込みマスクレジスタ（たとえばＸＭＭまたはＹＭＭレジスタ）からの対応する要素の符号ビットである。これら実施形態では、書き込みマスク要素は、データ要素と同じサイズとして扱われる。データ要素の対応する書き込みマスクビットが設定されていない場合には、メモリの対応するデータ要素を変更せずにおく。
【００４７】
通常は、スキャッタストライド命令によって、例外的事例がトリガされた場合を除いて、本スキャッタストライド命令に関する書き込みマスクレジスタ全体がゼロに設定される。加えて、少なくとも１つのデータ要素が既にスキャッタされている場合、この命令の実行は、例外により中断される（ギャザーストライド命令について上述した通りである）。こうなると、デスティネーションメモリおよびマスクレジスタが、部分的に更新される。
【００４８】
１２８ビットサイズのベクトルの一部の実施形態では、命令は、４つの単精度浮動小数点値または２つの倍精度浮動小数点値までスキャッタされる。２５６ビットサイズのベクトルの一部の実施形態では、命令は、８つの単精度浮動小数点値または４つの倍精度浮動小数点値までスキャッタされる。５１２ビットサイズの一部の実施形態では、命令は、１６個の３２ビット（または８つの６４ビット）の浮動小数点値までスキャッタされる。
【００４９】
一部の実施形態では、重複しているデスティネーション位置に対する書き込みのみが、互いに対して順序を付けられることが保証されている（ソースレジスタの最下位から最上位へ）。任意の２つの異なる要素の２つの位置が同じである場合、これら要素は重複している。重複していない書き込みは任意の順序で行われてよい。一部の実施形態では、２以上のデスティネーション位置が完全に重複している場合、「前の」書き込みのほうを省略する。加えて一部の実施形態では、データ要素は任意の順序でスキャッタさせることができるが（重複がない場合）、フォルトは右から左の順に配信される（上述したギャザーストライド命令と同様である）。
【００５０】
この命令のフォーマットの例は、「VSCATTERSTR  [base, scale * stride] + displacement {k1}, ZMM1」であり、ここでZMM1は、ソースベクトルレジスタオペランド（128-, 256-, 512-ビットのレジスタ）であり、k1が書き込みマスクオペランドであり（後で詳述する１６ビットのレジスタ例）、ベース、スケール、ストライド、および変位が、メモリデスティネーションアドレスおよびストライド値を、メモリの後続するデータ要素に提供して、デスティネーションレジスタに条件付きでパッキングさせる。一部の実施形態では、書き込みマスクが異なるサイズ（８ビット、３２ビット等）である場合もある。加えて一実施形態では、書き込みマスクビットの全てのビットが命令によって利用されない場合もある（後述する）。VSCATTERSTRは、命令のオペコードである。通常、各オペランドは明示的に命令で定義されている。データ要素のサイズは、ここで記載する「Ｗ」等のデータ粒度ビットの情報を利用して、命令の「プレフィックス」部分で定義されている。一部の実施形態では、データ粒度ビットは、データ要素が３２ビットまたは６４ビットであることを示す。データ要素が３２ビットのサイズであり、ソースが５１２ビットのサイズである場合には、１６個のデータ要素が１つのソースについて存在する。
【００５１】
この命令は通常、この例では、書き込みマスクレジスタｋｌに設定されている対応するビットをもつ要素のみが、デスティネーションメモリ位置で修正されるように、書き込みマスクされる。対応するビットが書き込みマスクレジスタでクリアされているデスティネーションメモリ位置のデータ要素は、自身の前の値を保持している。
【００５２】
スキャッタストライド命令の実行の例が図６に示されている。ソースは、ＸＭＭ、ＹＭＭ，またはＺＭＭ等のレジスタである。この例では、デスティネーションは、ＲＡＸレジスタに見つかるアドレスで初期アドレス指定されているメモリである（これは、メモリアドレス指定の簡略化された図であり、変位等を利用してアドレスが生成されてよい）。もちろん、メモリアドレスは他のレジスタに格納され、命令の即値として発見されてもよい（上述した通りである）。
【００５３】
この例の書き込みマスクは、ビットの値が４ＤＢ４のhe20ecimalの値に対応している１６ビットの書き込みマスクである。「１」の値の書き込みマスクの各ビット位置において、レジスタソースからの対応するデータ要素が、デスティネーションメモリの対応する（ストライド）位置に格納される。書き込みマスクの第１の位置（たとえばkl[0]）は「０」であり、対応するソースデータ要素位置（たとえばソースレジスタの第１のデータ要素）が、ＲＡＸメモリ位置には書き込めないことを示す。書き込みマスクの次のビットも「０」であり、これは、ソースレジスタからの次のデータ要素も、ＲＡＸメモリ位置からストライドされたメモリ位置に格納されないことを示している。この例では、ストライド値が「３」であるので、ＲＡＸメモリ位置から３つのデータ要素離れたデータ要素が上書きできない。
【００５４】
書き込みマスクの第１の「１」の値は、第３のビット位置にある（たとえばkl[2]）。これは、ソースレジスタの第３のデータ要素がデスティネーションメモリに格納されるべきことを示す。このデータ要素は、ストライドされたデータ要素から３つストライド離れた位置であって、第１のデータ要素から６つ離れた位置に格納されている。
【００５５】
残りの書き込みマスクビット位置も、ソースレジスタのどの追加的データ要素がデスティネーションメモリに格納されるかを判断するために利用される（この例では、全部で８つのデータ要素が格納されるが、書き込みマスクに応じて、数はこれより多くても少なくてもよい）。加えて、レジスタソースからのデータ要素は、デスティネーションのデータ要素のサイズが、たとえば、デスティネーションに格納される前に３２ビットの浮動小数点値から１６ビットの浮動小数点値になるように、ダウンコンバージョンされてよい。ダウンコンバージョンおよびこれらを命令フォーマットにエンコードする方法の例は、上述した通りである。
【００５６】
スキャッタストライド命令の実行の別の例が図７に示されている。この例は、前の例に類似しているが、データ要素のサイズが異なっている（たとえば、データ要素の数が３２ビットではなくて６４ビットである）。このサイズの変更によって、マスクで利用されるビット数も変化する（本例では８である）。一部の実施形態では、マスクの下位のほうの８ビットが利用される（最下位８ビット）。他の実施形態では、マスクの上位のほうの８ビットが利用される（最上位８ビット）。他の実施形態では、マスクの１つおきのビットを利用する（つまり、偶数のビットまたは奇数のビット）。
【００５７】
スキャッタストライド命令の実行のまた別の例が図８に示されている。この例は、前の例に類似しているが、マスクが１６ビットではない点が異なる。本例では、書き込みマスクレジスタがベクトルレジスタ（たとえばＸＭＭまたはＭＭレジスタ）である。本例では、条件付きで格納される各データ要素の書き込みマスクビットが、書き込みマスクの対応するデータエレンメントの符号ビットである。
【００５８】
図９は、プロセッサでスキャッタストライド命令を実行する一実施形態を示す。９０１で、デスティネーションアドレスオペランド（ベース、変位、インデックス、および／またはスケール）、書き込みマスク、およびソースレジスタオペランドをもつスキャッタストライド命令をフェッチする。ソースレジスタのサイズの例は前に詳述した通りである。
【００５９】
９０３で、スキャッタストライド命令をデコードする。命令の形式に応じて、この段階で、様々なデータを解釈する（たとえば、アップコンバージョン（またはその他のデータ変換）が必要か、どのレジスタに書き込み、またはどのレジスタから取得すべきか、および、メモリアドレスはどれか、等）。
【００６０】
９０５で、ソースオペランドの値を取得する／読み取る。
【００６１】
実行すべきデータ要素変換がある場合（たとえばダウンコンバージョン）、９０７で実行する。たとえばソースから３２ビットデータ要素を、１６ビットのデータ要素にダウンコンバージョンしてよい。
【００６２】
スキャッタストライド命令（または、マイクロオペレーション等の命令を含むオペレーション）が、９０９で実行リソースにより実行される。この実行によって、ソース（ＸＭＭ、ＹＭＭ、またはＺＭＭレジスタ）からのデータエレンメントが、書き込みマスクの値に基づいて、最下位から最上位へと、重複している（ストライド）デスティネーションメモリ位置に、条件付きで格納される。
【００６３】
図１０は、スキャッタストライド命令を処理する方法の一実施形態を示す。この実施形態では、オペレーション９０１−９０７のうち全部ではなくとも一部が予め実行されていることを想定しているが、以下では詳細をあいまいにしないよう配慮して示されてはいない。たとえば、フェッチおよびデコードは示されておらず、オペランド（ソースおよび書き込みマスク）の取得も示されていない。
【００６４】
１００１で、潜在的に書き込まれる可能性のある第１のメモリ位置を、命令のアドレスデータから生成する。ここでも、これは前に実行していてもよい。
【００６５】
１００２で、このアドレスにフォルトがあるかを判断する。フォルトがある場合には実行を中断する。
【００６６】
フォルトがない場合には、１００３で、第１の書き込みマスクビットの値が、ソースレジスタの第１のデータ要素が、生成されたアドレスに格納されるべきかを判断する。前の例を参照すると、この決定は、図６の書き込みマスクの最下位の値等の書き込みマスクの最下位の位置を参照して、第１のレジスタデータ要素を生成されたアドレスに格納すべきかを判断することで行われる。
【００６７】
書き込みマスクビットが、レジスタデータ要素を、生成されたアドレスに格納すべきであると示していない場合には、メモリのデータ要素をそのままにしておく（１００５）。通常、これは、書き込みマスクの「０」の値で示されるが、反対のルール（opposite convention）を適用することもできる。
【００６８】
書き込みマスクビットが、レジスタデータ要素を、生成されたアドレスに格納すべきであると示している場合には、ソースの第１の位置のデータ要素をこの位置に格納する（１００７）。通常、これは、書き込みマスクの「１」の値で示されるが、反対のルールを適用することもできる。データ変換（ダウンコンバージョン等）が必要な場合には、前に行われていない場合はこのときに行うことができる。
【００６９】
１００９で、書き込みマスクビットをクリアして、書き込みの成功を示す。
【００７０】
１０１１で、データ要素が条件付きで上書きされてよい後続するストライドメモリアドレスを生成する。前の例で詳述したように、このアドレスは、メモリの前のデータ要素から「ｘ」個のデータ要素分離れており、ここで「ｘ」は、命令に含まれるストライド値である。
【００７１】
この後続するストライドされたデータ要素にフォルトがあるかの判断を１０１３で行う。フォルトがある場合には、命令の実行を中断する。
【００７２】
フォルトがない場合には、１０１５で、後続する書き込みマスクビットの値が、ソースレジスタの後続するデータ要素が、生成されたストライドアドレスに格納されるべきであるかを示しているか判断してよい。前の例を振り返ると、この判断は、図６の書き込みマスクの２番目に最下位の値等の書き込みマスクの次の位置を参照して、対応するデータ要素を、生成されたアドレスに格納すべきかを判断することで行われている。
【００７３】
書き込みマスクビットが、ソースデータ要素をメモリ位置に格納すべきであると示していない場合には、そのアドレスのデータ要素をそのままにしておく（１０２１）。通常、これは、書き込みマスクの「０」の値で示されるが、反対のルール（opposite convention）を適用することもできる。
【００７４】
書き込みマスクビットが、ソースデータ要素を、生成されたストライドアドレスに格納すべきであると示している場合には、そのアドレスのデータ要素を、ソースデータ要素で上書きする（１０１７）。通常、これは、書き込みマスクの「１」の値で示されるが、反対のルールを適用することもできる。データ変換（ダウンコンバージョン等）が必要な場合には、前に行われていない場合はこのときに行うことができる。
【００７５】
書き込みマスクビットを１０１９でクリアして、書き込みの成功を示す。
【００７６】
評価された書き込みマスク位置が書き込みマスクの最後か、またはデスティネーションのデータ要素位置の全てが満たされているかの判断を１０２３で行う。この判断結果が肯定的である場合には、オペレーションを終了する。否定的な場合には、ストライドアドレスに格納する候補の別のデータ要素を評価する。
【００７７】
この図および上述した記載は、それぞれの第１の位置を最下位の位置と想定しているが、一部の実施形態では、第１の位置が最上位の位置である。加えて、一部の実施形態では、フォルトの決定を行わない。
【００７８】
＜ギャザーストライドプリフェッチ＞
第３の種類の命令は、ギャザーストライドプリフェッチ命令である。この命令のプロセッサによる実行によって、メモリ（システムまたはキャッシュ）から条件付きでストライドデータがプリフェッチされて、命令の書き込みマスクに従って命令で示唆されている（hint at）命令によってキャッシュのレベルに入れられる。プリフェッチされたデータは、後続する命令によって読み出されてよい。上述したギャザーストライド命令とは異なり、デスティネーションレジスタがなく、書き込みマスクが修正されない（この命令は、プロセッサの任意のアーキテクチャ状態を修正するものではない）。データ要素は、キャッシュライン等のメモリチャンク全体の部分としてプリフェッチされてよい。
【００７９】
プリフェッチされるデータ要素は、１種類のＳＩＢ（スケール、インデックス、およびベース）の指定によって特定される（前述した）。一部の実施形態では、命令は、汎用レジスタに渡されるベースアドレス、即値として渡されるスケール、汎用レジスタとして渡されるストライドレジスタ、および随意で変位（displacement）を含んでいる。もちろん、ベースアドレスおよび／またはストライドの即値等を含む命令等の他の実装例を利用することもできる。
【００８０】
ギャザーストライドプリフェッチ命令も書き込みマスクを含む。専用マスクレジスタ（たとえば後述する「ｋ」書き込みマスク）を利用する一部の実施形態では、メモリデータ要素に対応する書き込みマスクビットがそうすべきと示しているとき（たとえば一部の実施形態ではビットが「１」の場合）に、当該メモリデータ要素がプリフェッチされる。他の実施形態では、データ要素の書き込みマスクビットは、書き込みマスクレジスからの対応する要素の符号ビットである（たとえばＸＭＭまたはＹＭＭレジスタ）。これら実施形態では、書き込みマスク要素は、データ要素と同じサイズとして扱われる。
【００８１】
加えて、上述したギャザーストライドの実施形態とは異なり、通常は、ギャザーストライドプリフェッチ命令は、例外的に停止されず、ページフォルトを配信しない。
【００８２】
この命令の形式の例が、「VGATHERSTR_PRE  [base, scale * stride] + displacement, {k1}, hint」であり、ここでk1が書き込みマスクオペランドであり（後で詳述する１６ビットのレジスタ例）、ベース、スケール、ストライド、および変位が、メモリソースアドレスおよびストライド値を、メモリの後続するデータ要素に提供して、デスティネーションレジスタに条件付きでプリフェッチさせる。示唆（hint）により、条件付きでプリフェッチするキャッシュレベルを提供する。一部の実施形態では、書き込みマスクも異なるサイズ（８ビット、３２ビット等）であってよい。加えて一部の実施形態では、後述するように、書き込みマスクの全てのビットを命令が利用しない場合もある。VGATHERSTR_PREは、命令のオペコードである。通常、各オペランドは明示的に命令で定義されている。
【００８３】
この命令は通常、この例では、書き込みマスクレジスタｋｌに設定されている対応するビットをもつメモリ位置のみが、プレフェッチされるように、書き込みマスクされる。
【００８４】
ギャザーストライドプリフェッチ命令の実行の一例が図１１に示されている。この例では、メモリは、ＲＡＸレジスタにみられるアドレスに、初期アドレス指定されている（これは、メモリアドレス指定の簡略化された図であり、変位等を、アドレスを生成するために利用することができる）。もちろん、メモリアドレスは、他のレジスタに格納されていても、上述した命令の即値として発見されてもよい。
【００８５】
この例の書き込みマスクは、ビットの値が４ＤＢ４のhe20ecimalの値に対応している１６ビットの書き込みマスクである。「１」の値の書き込みマスクの各ビット位置において、メモリソースからのデータ要素がプリフェッチされ、これには、キャッシュまたはメモリのライン全体のプリフェッチが含まれてよい。書き込みマスクの第１の位置は（たとえばkl[0]）であり、対応するデスティネーションデータ要素位置（たとえばデスティネーションレジスタの第１のデータ要素）が、そこには、ソースメモリからのデータ要素が格納されていないことを示す。この場合、ＲＡＸアドレスに関連しているデータ要素は格納されない。書き込みマスクの次のビットも「０」であり、これは、メモリ内の後続する「ストライド」されたデータ要素も、プリフェッチされるべきではないことを示している。この例では、ストライド値が「３」であり、この後続するデータ要素は、第１のデータ要素から離れている第３のデータ要素である。
【００８６】
書き込みマスクの第１の「１」の値は、第３のビット位置にある（たとえばkl[2]）。これは、メモリの前のストライドされたデータ要素に後続するストライドされたデータ要素がプリフェッチされるべきことを示す。この後続するストライドされたデータ要素は、前のストライドされたデータ要素から３つ離れており、第１のデータ要素からは６つ離れている。
【００８７】
残りの書き込みマスクビット位置も、メモリソースのどの追加的データ要素をプリフェッチするかを判断するために利用される。
【００８８】
図１２は、プロセッサでギャザーストライドプリフェッチ命令を利用する一実施形態を示す。アドレスオペランド（ベース、変位、インデックス、および／またはスケール）、書き込みマスク、および示唆（hint）を有するギャザーストライドプリフェッチ命令をフェッチする（１２０１）。
【００８９】
１２０３で、ギャザーストライドプリフェッチ命令をデコードする。命令の形式に応じて、この段階で、様々なデータを解釈してよい（たとえば、どのキャッシュレベルをプリフェッチするか、ソースからのメモリアドレスはどれか、等）。
【００９０】
１２０５で、ソースオペランド値を取得する／読み取る。ほとんどの実施形態では、メモリソース位置アドレスに関するデータ要素および後続するストライドアドレスに関するデータ要素（およびそれに関するデータ要素）がこの時点で読み出される（たとえばキャッシュライン全体を読み出す）。しかしソースからのデータ要素は一回につき１つだけ取得することができる（破線に示されている通りである）。
【００９１】
ギャザーストライドプリフェッチ命令（または、マイクロオペレーション等の命令を含むオペレーション）が、１２０７で実行リソースにより実行される。この実行によって、プロセッサは、メモリ（システムまたはキャッシュ）からストライドされたデータ要素をプリフェッチして、命令の書き込みマスクに従って命令で示唆されている（hint at）キャッシュのレベルに入れられる。
【００９２】
図１３は、ギャザーストライドプリフェッチ命令を処理する方法の一実施形態を示す。この実施形態では、オペレーション１２０１―１２０５のうち全部ではなくとも一部が予め実行されていることを想定しているが、以下では詳細をあいまいにしないよう配慮して示されてはいない。
【００９３】
１３０１で、条件付きでプリフェッチされるメモリの第１のデータ要素のアドレスが、ソースオペランドのアドレスデータから生成される。ここでも、これは前に実行されていてもよい。
【００９４】
１３０３で、メモリの第１のデータ要素に対応している書き込みマスクビット値が、プリフェッチされるべきであると示しているかどうかの判断を行う。前の例を振り返ると、この判断は、図１１の書き込みマスクの最下位の値等の書き込みマスクの最下位の位置を参照して、メモリデータ要素をプリフェッチすべきかを判断することで行われている。
【００９５】
書き込みマスクが、メモリデータ要素をプリフェッチすべきであると示していない場合には、なにもプリフェッチされない（１３０５）。通常は、書き込みマスクの「０」の値で示されるが、反対のルール（opposite convention）を適用することもできる。
【００９６】
書き込みマスクが、メモリデータ要素をプリフェッチすべきであると示している場合には、データ要素をプリフェッチする（１３０７）。通常は、書き込みマスクの「１」の値で示されるが、反対のルール（opposite convention）を適用することもできる。前述したように、これは、他のデータ要素を含むキャッシュラインまたはメモリ位置全体をフェッチすることを意味していてよい。
【００９７】
条件付きでプリフェッチされる、後続するストライドされたデータ要素のアドレスを１３０９で生成する。前の例で詳述したように、このデータ要素は、メモリの前のデータ要素から「ｘ」個のデータ要素分離れており、ここで「ｘ」は、命令に含まれるストライド値である。
【００９８】
１３１１で、メモリ内の後続するストライドされたデータ要素に対応している書き込みマスクビット値が、プリフェッチされるべきであると示しているかどうかの判断を行う。前の例を振り返ると、この判断は、図１１の書き込みマスクの２番目に最下位の値等の書き込みマスクの次の位置を参照して、メモリデータ要素をプリフェッチすべきかを判断することで行われている。
【００９９】
書き込みマスクビットが、メモリデータ要素をプリフェッチすべきであると示していない場合には、なにもプリフェッチされない（１３１３）。通常は、書き込みマスクの「０」の値で示されるが、反対のルール（opposite convention）を適用することもできる。
【０１００】
書き込みマスクが、メモリデータ要素をプリフェッチすべきであると示している場合には、データ要素をプリフェッチする（１３１５）。通常は、書き込みマスクの「１」の値で示されるが、反対のルール（opposite convention）を適用することもできる。
【０１０１】
評価された書き込みマスクの位置が、書き込みマスクの最後かを判断する（１３１７）。この判断結果が肯定的である場合には、オペレーションを終了する。否定的な場合には、別のストライドされたデータ要素を評価する。
【０１０２】
この図および上述した記載は、それぞれの第１の位置を最下位の位置と想定しているが、一部の実施形態では、第１の位置が最上位の位置である。
【０１０３】
＜スキャッタストライドプリフェッチ＞
第４の種類の命令は、スキャッタストライドプリフェッチ命令である。この命令のプロセッサによる実行によって、メモリ（システムまたはキャッシュ）からストライドデータがプリフェッチされて、命令の書き込みマスクに従って命令で示唆されている（hint at）命令によってキャッシュのレベルに入れられる。この命令と、ギャザーストライドプリフェッチとの違いは、プリフェッチされるデータが、後で書き込まれるが、読み出されないことである。
【０１０４】
上記にて詳述した命令の実施形態は、下記に詳述する「汎用のベクトルフレンドリーな命令フォーマット」で実施することも可能である。他の実施形態において、そのような形式は用いられず、他の命令フォーマットが用いられる。しかし、書き込みマスクレジスタ、様々なデータ変換（スウィズル、ブロードキャストなど）、アドレシングなどに関する以下の説明は一般的に、上述した命令の実施形態の説明に関して適用可能である。加えて、例示的なシステム、アーキテクチャ、およびパイプラインについて以下で詳述する。上述した命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプラインで実行することが出来るが、それら詳述されるものに限定されない。
【０１０５】
ベクトルフレンドリーな命令フォーマットは、ベクトル命令に適した命令フォーマット（例えば、ベクトル演算に特定のいくつかのフィールドがある）である。ベクトルフレンドリーな命令フォーマットによってベクトル演算およびスカラ演算の両方がサポートされる実施形態を説明するが、代替的な実施形態においては、ベクトルフレンドリーな命令フォーマットのベクトル演算のみが用いられる。
【０１０６】
＜例示的な汎用のベクトルフレンドリーな命令フォーマット−図１４Ａおよび図１４Ｂ＞
【０１０７】
図１４Ａおよび図１４Ｂは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令フォーマット、および、その命令テンプレートを示すブロック図である。図１４Ａは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令フォーマット、および、そのクラスＡの命令テンプレートを示すブロック図である。図１４Ｂは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令フォーマット、および、そのクラスＢ命令テンプレートを示すブロック図である。詳細には、汎用のベクトルフレンドリーな命令フォーマット１４００には、それぞれが非メモリアクセス１４０５命令テンプレートおよびメモリアクセス１４２０命令テンプレートを含む、クラスＡおよびクラスＢ命令テンプレートが定義されている。ベクトルフレンドリーな命令フォーマットという表現において汎用という用語は、命令フォーマットが何ら特定の命令セットに関連付けられていないことを意味する。ベクトルフレンドリーな命令フォーマットの命令が、レジスタ（非メモリアクセス１４０５命令テンプレート）およびレジスタ／メモリ（メモリアクセス１４２０命令テンプレート）のうちいずれかをソースとするベクトルに対して動作する実施形態を説明するが、本願発明の代替的な実施形態においては、これらのうちいずれか一方だけをサポートしてもよい。また、ベクトル命令フォーマットのロード命令および格納命令がある本願発明の実施形態を説明するが、代替的な実施形態においては、代わりに、或いは、加えて、レジスタへ、またはレジスタからベクトル（例えば、メモリからレジスタへ、レジスタからメモリへ、レジスタ間で、など）を移動させる異なる命令フォーマットの命令が用いられる。さらに、２つのクラスの命令テンプレートをサポートする本願発明の実施形態を説明するが、代替的な実施形態においては、これらのうち一方のみ、または３つ以上がサポートされる。
【０１０８】
ベクトルフレンドリーな命令フォーマットが、３２ビット（４バイト）、または、６４ビット（８バイト）のデータ要素幅（またはサイズ）を有する６４バイトベクトルオペランドの長さ（またはサイズ）（よって、６４バイトのベクトルは、１６倍長語サイズの要素、および８クワッド語サイズの要素のいずれかからなる）、１６ビット（２バイト）、または、８ビット（１バイト）のデータ要素幅（またはサイズ）を有する６４バイトベクトルオペランドの長さ（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または、８ビット（１バイト）のデータ要素幅（またはサイズ）を有する３２バイトベクトルオペランドの長さ（またはサイズ）、並びに、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または、８ビット（１バイト）のデータ要素幅（またはサイズ）を有する１６バイトベクトルオペランドの長さ（またはサイズ）をサポートする実施形態について説明するが、代替的な実施形態においては、より大きな、より小さな、または異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有するより大きな、より小さな、および／または異なるベクトルオペランドサイズ（例えば１４５６バイトのベクトルオペランド）がサポートされてもよい。
【０１０９】
図１４ＡのクラスＡの命令テンプレートは、１）非メモリアクセス１４０５命令テンプレート内に、非メモリアクセス完全丸め制御タイプ演算１４１０命令テンプレート、および非メモリアクセスデータ変換タイプ演算１４１５命令テンプレート、並びに２）メモリアクセス１４２０命令テンプレート内に、メモリアクセス一時的１４２５命令テンプレート、およびメモリアクセス非一時的１４３０命令テンプレートを含む。図１４ＢのクラスＢ命令テンプレートは、１）非メモリアクセス１４０５命令テンプレート内に、非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算１４１２命令テンプレート、および非メモリアクセス書き込みマスク制御ｖｓｉｚｅタイプ演算１４１７命令テンプレート、並びに、２）メモリアクセス１４２０命令テンプレート内に、メモリアクセス書き込みマスク制御１４２７命令テンプレートを含む。
【０１１０】
＜形式＞
汎用のベクトルフレンドリーな命令フォーマット１４００は、図１４Ａおよび図１４Ｂに示される順序で、以下に列挙するフィールドを含む。
【０１１１】
形式フィールド１４４０−このフィールド内の特定値（命令フォーマット識別値）は一意的に、ベクトルフレンドリーな命令フォーマットを識別し、よって、命令ストリーム内のベクトルフレンドリーな命令フォーマットの命令の発生を識別する。よって、形式フィールド１４４０の内容は、第１命令フォーマットの命令の発生を他の命令フォーマットの命令の発生と区別し、これにより、ベクトルフレンドリーな命令フォーマットを他の命令フォーマットの命令セットへ導入することが可能となる。このため、このフィールドは、汎用のベクトルフレンドリーな命令フォーマットのみを有する命令には必要でないので任意的なものである。
【０１１２】
ベース演算フィールド１４４２−この内容は、複数の異なるベース演算を区別する。本明細書で以下に説明するように、ベース演算フィールド１４４２は、オペコードフィールドを含み、および／または、その一部であってもよい。
【０１１３】
レジスタインデックスフィールド１４４４−この内容は、直接的またはアドレス生成を介して、レジスタまたはメモリなどの、ソースおよびデスティネーションオペランドの位置を特定する。これらには、ＰｘＱ（例えば３２ｘ１６１２）レジスタファイルからＮ個のレジスタを選択するのに十分な数のビットを含む。一実施形態において、Ｎは最大３つのソースおよび１つのデスティネーションレジスタであるが、代替的な実施形態においては、より多く、またはより少ないソースおよびデスティネーションレジスタをサポートしてもよい（例えば最大２つのソースをサポートしてもよく、これらソースのうち１つはデスティネーションとしても動作する。例えば最大３つのソースをサポートしてもよく、これらソースのうち１つはデスティネーションとしても動作する。例えば最大２つのソースおよび１つのデスティネーションをサポートしてもよい）。一実施形態においてはＰ＝３２であるが、代替的な実施形態においては、より多く、またはより少ないレジスタ（例えば１６の）をサポートしてもよい。一実施形態においてはＱ＝１６１２ビットであるが、代替的な実施形態においては、より多く、またはより少ないビット（例えば１２８、１０２４の）をサポートしてもよい。
【０１１４】
修飾子フィールド１４４６−この内容は、メモリアクセスを特定する汎用ベクトル命令フォーマットの命令の発生を、メモリアクセスを特定しない命令フォーマットの命令の発生と区別する。つまり、非メモリアクセス１４０５命令テンプレートとメモリアクセス１４２０命令テンプレートとを区別する。メモリアクセス動作は、メモリ階層から読み出す、および／または、メモリ階層へ書き込む（場合によっては、レジスタ内の値を用いて、ソース、および／またはデスティネーションアドレスを特定する。他方、メモリアクセス動作はこれらを特定しない（例えば、ソースおよびデスティネーションがレジスタである）。一実施形態においては、このフィールドはメモリアドレス計算を実行する３つの異なる方法からの選択も行うが、代替的な実施形態においては、メモリアドレス計算を実行するより多くの、より少ない、または複数の異なる方法をサポートする。
【０１１５】
オーグメンテーション演算フィールド１４５０−この内容は、ベース演算に加えて、様々な複数の異なる演算のうち何れを実行するかを区別する。このフィールドはコンテキスト特有のものである。本願発明の一実施形態において、このフィールドは、クラスフィールド１４６８、アルファフィールド１４５２、および、ベータフィールド１４５４に分けられる。オーグメンテーション演算フィールドは、複数の演算からなる共通のグループを、２、３、または４つの命令ではなく１つの命令で実行することを可能とする。以下に示すのは、必要な命令の数を減らすべくオーグメンテーションフィールド１４５０を用いる命令（用いられる用語の意味は、本明細書において以下により詳細に説明する）のいくつかの例である。
【表１】
0005844882.tif 000002
【０１１６】
ここで、［ｒａｘ］はアドレス生成に用いられるベースポインタであり、｛｝は、データ操作フィールド（本明細書で以下により詳細に説明する）で特定される変換演算を示す。
【０１１７】
スケールフィールド１４６０−この内容は、メモリアドレスの生成のための（例えば、２スケール＊インデックス＋ベースを用いるアドレス生成のための）インデックスフィールドの内容のスケーリングを可能とする。
【０１１８】
変位フィールド１４６２Ａ−この内容は、メモリアドレスの生成（例えば、２スケール＊インデックス＋ベース＋変位を用いるアドレス生成）の一部として用いられる。
【０１１９】
変位係数フィールド１４６２Ｂ（いずれか一方のみが用いられるので、変位フィールド１４６２Ａは変位係数フィールド１４６２Ｂの直接上に配置されている）−この内容は、アドレス生成の一部として用いられる。このフィールドは、メモリアクセス（Ｎ）のサイズでスケーリングされる変位係数を特定する。ここでＮは、メモリアクセス（例えば、２スケール＊インデックス＋ベース＋スケーリングされた変位を用いるアドレス生成のための）のバイト数である。冗長下位ビットは無視され、よって、有効アドレスを計算するのに用いられる最終的な変位を生成すべく変位係数フィールドの内容がメモリオペランドの合計サイズ（Ｎ）で乗算される。Ｎの値は、本明細書で以下に説明するようにフルオペコードフィールド１４７４（本明細書で以下に説明する）およびデータ操作フィールド１４５４Ｃに基づいて実行時にプロセッサハードウェアによって求められる。変位フィールド１４６２Ａおよび変位係数フィールド１４６２Ｂは非メモリアクセス１４０５命令テンプレートには用いられない、並びに／或いは、異なる実施形態においては、いずれか一方が用いられる、または両方とも用いられないので、任意的なものである。
【０１２０】
データ要素幅フィールド１４６４−この内容は、複数のデータ要素幅のうち何れを用いるかを区別する（いくつかの実施形態においては全ての命令に関して。他の実施形態においては、命令のうちいくつかに関して）。１つだけのデータ要素幅がサポートされる場合、および／または、オペコードのいくつかの態様を用いて複数のデータ要素幅がサポートされる場合には必要ではないので、このフィールドは任意的なものである。
【０１２１】
書き込みマスクフィールド１４７０−この内容は、データ要素の位置毎に、デスティネーションベクトルオペランドのデータ要素の位置に、ベース演算およびオーグメンテーション演算の結果を反映させるかどうかを制御する。クラスＡ命令テンプレートはマージング−書き込みマスキングをサポートし、クラスＢ命令テンプレートは、マージング−書き込みマスキング、およびゼロ化−書き込みマスキングの両方をサポートする。マージングの際、ベクトルマスクにより、デスティネーションの複数の要素からなる何れのセットも、（ベース演算およびオーグメンテーション演算によって特定される）いかなる演算の実行の間であっても、更新から保護をすることが可能となる。他の一実施形態において、対応するマスクビットが有する０を有するデスティネーションの各要素の古い値が維持される。対照的に、ベクトルマスクをゼロ化する際、（ベース演算およびオーグメンテーション演算によって特定される）いかなる演算の実行の間であっても、デスティネーションの複数の要素からなる何れのセットもゼロにされる。一実施形態において、対応するマスクビットが０の値を有するデスティネーションの要素が０に設定される。この機能のサブセットは、実行されている演算のベクトル長さ（つまり、最初から最後までの、修飾されている要素のスパン）を制御する能力である。しかし、修飾される要素が連続している必要はない。よって、書き込みマスクフィールド１４７０は、ロード、格納、算術、ロジカルなどを含む部分的なベクトル演算を可能とする。また、このマスキングをフォルトの抑制に用いることも出来る（つまり、フォルトを引き起こし得る／引き起こす何らかの演算の結果の受信を避けるべくデスティネーションのデータ要素の位置をマスキングすることにより。例えば、メモリのベクトルがページの境界をクロスし、２番目のページではなく最初のページがページフォルトを引き起こすことを想定すると、最初のページにあるベクトルの全てのデータ要素が書き込みマスクによりマスキングされた場合、ページフォルトを無視することが出来る）。さらに、書き込みマスクは、特定のタイプの条件ステートメントを含む「ベクトル化ループ」を可能とする。書き込みマスクフィールド１４７０の内容が、用いられる書き込みマスクを含む複数の書き込みマスクレジスタのうちの１つを選択する（よって、書き込みマスクフィールド１４７０の内容が、実行されるマスキングを間接的に識別する）本願発明の実施形態を説明したが、代替的な実施形態においては、代替的または追加的に、書き込みマスクフィールド１４７０の内容が、実行されるマスキングを直接的に特定することを可能とする。さらに、１）レジスタリネームパイプライン段階においてデスティネーションは黙示的なソースではないので、デスティネーションオペランドがソースでもない命令（ノンターナリ命令とも呼ばれる）に対してレジスタリネーミングが用いられる（演算の結果でない何れかデータ要素（何れのマスキングされたデータ要素）もゼロにされるので、現在のデスティネーションレジスタからのデータ要素の何れもリネームされたデスティネーションレジスタにコピーされる必要がなく、或いは、何らかの方法で演算を実行される必要がない）場合、および、２）ゼロが書き込まれているので、書き戻し段階の間、ゼロ化により性能の向上が可能となる。
【０１２２】
即値フィールド１４７２−この内容は即値の特定を可能とする。即値をサポートしない汎用のベクトルフレンドリーな形式の実施では存在せず、即値を用いない命令では存在しないので、このフィールドは任意的なものである。
【０１２３】
＜命令テンプレートクラス選択＞
クラスフィールド１４６８−この内容は複数の異なるクラスの命令を区別する。図１４Ａおよび図１４Ｂを参照すると、このフィールドの内容は、クラスＡの命令およびクラスＢの命令のうちから選択する。図１４Ａおよび図１４Ｂにおいて、角が丸められた正方形は、特定値がフィールド内に存在することを示すのに用いられている（例えば、図１４ＡのクラスＡ１４６８Ａ、および図１４ＢのクラスＢ１４６８Ｂ）。
【０１２４】
＜クラスＡの非メモリアクセス命令テンプレート＞
クラスＡの非メモリアクセス１４０５命令テンプレートの場合、アルファフィールド１４５２は、含まれる内容が複数の異なるオーグメンテーション演算タイプのうち何れが実行されるかを区別する（例えば、丸め１４５２Ａ．１およびデータ変換１４５２Ａ．２がそれぞれ、非メモリアクセス丸めタイプ演算１４１０および非メモリアクセスデータ変換タイプ演算１４１５命令テンプレートに関して特定される）ＲＳフィールド１４５２Ａとして解釈され、ベータフィールド１４５４は、特定されたタイプの演算のうち何れが実行されるかを区別する。図１４Ａおよび図１４Ｂにおいて、角が丸められたブロックは、特定値が存在することを示すのに用いられている（例えば、修飾子フィールド１４４６の非メモリアクセス１４４６Ａ、アルファフィールド１４５２／ｒｓフィールド１４５２Ａの丸め１４５２Ａ．１およびデータ変換１４５２Ａ．２）。非メモリアクセス１４０５命令テンプレートにおいて、スケールフィールド１４６０、変位フィールド１４６２Ａ、および変位スケールフィールド１４６２Ｂは存在しない。
【０１２５】
＜非メモリアクセス命令テンプレート−完全丸め制御タイプ演算＞
非メモリアクセス完全丸め制御タイプ演算１４１０命令テンプレートにおいて、ベータフィールド１４５４は、含まれる内容が静的な丸めを提供する丸め制御フィールド１４５４Ａとして解釈される。本願発明の説明される実施形態においては、丸め制御フィールド１４５４Ａは全浮動小数点例外抑制（ＳＡＥ）フィールド１４５６、および、丸め演算制御フィールド１４５８を含むが、代替的な実施形態においては、これらのコンセプトの両方を同じフィールドにエンコードする、または、これらのコンセプト／フィールドのうち一方、または他方のみを有する（例えば、丸め演算制御フィールド１４５８のみを有する）。
【０１２６】
ＳＡＥフィールド１４５６−この内容は、例外イベント報告を無効化するかどうかを区別する。抑制が有効であることをＳＡＥフィールド１４５６の内容が示す場合、任意の命令はあらゆるタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを立ち上げない。
【０１２７】
丸め演算制御フィールド１４５８−この内容は、複数の丸め演算（例えば、端数切り上げ、端数切り捨て、ゼロに丸め、および最も近い値に丸め）からなるグループのうち何れを実行するかを区別する。よって、丸め演算制御フィールド１４５８は、命令毎に丸めモードを変更することを可能とし、よって、このようなことが必要である場合に特に有用である。丸めモードを特定するための制御レジスタをプロセッサが含む本願発明の一実施形態において、丸め演算制御フィールド１４５０の内容は、レジスタ値よりも優位である（そのような制御レジスタに対し格納−変更−復元を実行する必要なく丸めモードを選択出来るということは有利である）。
【０１２８】
＜非メモリアクセス命令テンプレート−データ変換タイプ演算＞
非メモリアクセスデータ変換タイプ演算１４１５命令テンプレートにおいて、ベータフィールド１４５４は、複数のデータ変換（例えば、データ変換、スウィズル、ブロードキャスト）のうち何れが実行されるかを含まれる内容が区別するデータ変換フィールド１４５４Ｂとして解釈される。
【０１２９】
＜クラスＡのメモリアクセス命令テンプレート＞
クラスＡのメモリアクセス１４２０命令テンプレートの場合、アルファフィールド１４５２に含まれている内容は、エビクション・示唆（hint）のうちいずれが用いられるかを区別する（図１４Ａにおいて、一時的１４５２Ｂ．１および非一時的１４５２Ｂ．２がそれぞれ、メモリアクセス一時的１４２５命令テンプレートおよびメモリアクセス非一時的１４３０命令テンプレートに関して特定される）エビクション・示唆（hint）フィールド１４５２Ｂとして解釈され、ベータフィールド１４５４は、含まれる内容が複数のデータ操作演算（プリミティブとしても知られる）のうちいずれが実行されるか（例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン）を区別するデータ操作フィールド１４５４Ｃとして解釈される。メモリアクセス１４２０命令テンプレートは、スケールフィールド１４６０を含み、場合によっては、変位フィールド１４６２Ａまたは変位スケールフィールド１４６２Ｂを含む。
【０１３０】
ベクトルメモリ命令は、変換のサポートと共に、メモリからのベクトルロード、およびメモリへのベクトル格納を実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素の点で、書き込みマスクとして選択されたベクトルマスクの内容によって指示されて実際に転送される要素と共に、メモリから、またはメモリへデータを転送する。図１４Ａにおいて、角が丸められた正方形は、フィールド内に特定値が存在することを示すのに用いられている（例えば、修飾子フィールド１４４６のメモリアクセス１４４６Ｂ、アルファフィールド１４５２／エビクション・示唆（hint）フィールド１４５２Ｂの一時的１４５２Ｂ．１、および非一時的１４５２Ｂ．２）。
【０１３１】
＜メモリアクセス命令テンプレート−一時的＞
一時的データは、キャッシュするのが有利である程度に直ぐに再度用いられる可能性が高いデータである。しかし、これは示唆（hint）であり、複数の異なるプロセッサが、示唆（hint）を全く無視するなど複数の異なるやり方で実行し得る。
【０１３２】
＜メモリアクセス命令テンプレート−非一時的＞
非一時的データは、第１レベルキャッシュでキャッシュするのが有利ではない程度に直ぐには再度用いられる可能性が低く、エビクションの高い優先度を与えられるべきデータである。しかし、これは示唆（hint）であり、複数の異なるプロセッサが、示唆（hint）を全く無視するなど複数の異なるやり方で実行し得る。
【０１３３】
＜クラスＢ命令テンプレート＞
クラスＢ命令テンプレートの場合、アルファフィールド１４５２は、書き込みマスクフィールド１４７０により制御される書き込みマスキングがマージングであるかゼロ化であるかを含まれる内容が区別する書き込みマスク制御（Ｚ）フィールド１４５２Ｃとして解釈される。
【０１３４】
＜クラスＢの非メモリアクセス命令テンプレート＞
クラスＢの非メモリアクセス１４０５命令テンプレートの場合、ベータフィールド１４５４の一部は、含まれる内容が複数の異なるオーグメンテーション演算タイプのうちいずれが実行されるのかを区別する（例えば、丸め１４５７Ａ．１およびベクトル長さ（ＶＳＩＺＥ）１４５７Ａ．２がそれぞれ、非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算１４１２命令テンプレート、および非メモリアクセス書き込みマスク制御ＶＳＩＺＥタイプ演算１４１７命令テンプレートに関して特定される）ＲＬフィールド１４５７Ａとして解釈され、ベータフィールド１４５４の残りは、特定されたタイプの演算のうちいずれが実行されるのかを区別する。図１４Ａおよび１４Ｂにおいて、角が丸められたブロックは、特定値（例えば、修飾子フィールド１４４６の非メモリアクセス１４４６Ａ、ＲＬフィールド１４５７Ａの丸め１４５７Ａ．１およびＶＳＩＺＥ１４５７Ａ．２）が存在することを示すのに用いられている。非メモリアクセス１４０５命令テンプレートにおいて、スケールフィールド１４６０、変位フィールド１４６２Ａ、および、変位スケールフィールド１４６２Ｂは存在しない。
【０１３５】
＜非メモリアクセス命令テンプレート−書き込みマスク制御部分的丸め制御タイプ演算＞
非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算１４１０命令テンプレートにおいて、ベータフィールド１４５４の残りは、丸め演算フィールド１４５９Ａとして解釈され、例外イベント報告が無効化される（任意の命令はあらゆるタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを立ち上げない）。
【０１３６】
丸め演算制御フィールド１４５９Ａ−丸め演算制御フィールド１４５８とちょうど同じようにこの内容は、複数の丸め演算（例えば、端数切り上げ、端数切り捨て、ゼロに丸め、および最も近い値に丸め）からなるグループのうち何れを実行するかを区別する。よって、丸め演算制御フィールド１４５９Ａは、命令毎に丸めモードを変更することを可能とし、よって、このようなことが必要である場合に特に有用である。丸めモードを特定するための制御レジスタをプロセッサが含む本願発明の一実施形態において、丸め演算制御フィールド１４５０の内容は、レジスタ値よりも優位である（そのような制御レジスタに対し格納−変更−復元を実行する必要なく丸めモードを選択出来るということは有利である）。
【０１３７】
＜非メモリアクセス命令テンプレート−書き込みマスク制御ＶＳＩＺＥタイプ演算＞
非メモリアクセス書き込みマスク制御ＶＳＩＺＥタイプ演算１４１７命令テンプレートにおいて、ベータフィールド１４５４の残りは、複数のデータベクトル長さ（例えば、１２８、１４５６、または１６１２バイト）のうち何れで実行されるかを含まれる内容が区別するベクトル長さフィールド１４５９Ｂとして解釈される。
【０１３８】
＜クラスＢのメモリアクセス命令テンプレート
クラスＡのメモリアクセス１４２０命令テンプレートの場合、ベータフィールド１４５４の一部は、ブロードキャストタイプデータ操作が実行されるかどうかを含まれる内容が区別するブロードキャストフィールド１４５７Ｂとして解釈され、ベータフィールド１４５４の残りは、ベクトル長さフィールド１４５９Ｂとして解釈される。メモリアクセス１４２０命令テンプレートは、スケールフィールド１４６０を含み、場合によっては、変位フィールド１４６２Ａまたは変位スケールフィールド１４６２Ｂを含む。
【０１３９】
＜フィールドについての追加の説明＞
汎用のベクトルフレンドリーな命令フォーマット１４００に関し、フルオペコードフィールド１４７４は、形式フィールド１４４０、ベース演算フィールド１４４２、およびデータ要素幅フィールド１４６４を含むものとして示した。フルオペコードフィールド１４７４がこれらのフィールド全てを含む一実施形態を示したが、これらのフィールド全てをサポートしない実施形態においては、フルオペコードフィールド１４７４はこれらのフィールドの全ては含まない。フルオペコードフィールド１４７４は演算コードを提供する。
【０１４０】
オーグメンテーション演算フィールド１４５０、データ要素幅フィールド１４６４、および書き込みマスクフィールド１４７０は、汎用のベクトルフレンドリーな命令フォーマットで、命令毎にこれらの特徴全てを特定することを可能とする。
【０１４１】
書き込マスクフィールドおよびデータ要素幅フィールドを組み合わせると、複数の異なるデータ要素幅に基づいたマスクの適用を可能とするタイプ化された命令が生成される。
【０１４２】
当該命令フォーマットは、他のフィールドの内容に基づいて異なる目的のために異なるフィールドを再利用するので、必要なビット数が比較的少なくて済む。例えば、一つの見方としては、修飾子フィールドの内容が、図１４Ａおよび図１４Ｂの非メモリアクセス１４０５命令テンプレートと、図１４Ａおよび図１４Ｂのメモリアクセス１４２５０命令テンプレートとの間で選択と行い、クラスフィールド１４６８の内容が、それら非メモリアクセス１４０５命令テンプレートのうち、図１４Ａの命令テンプレート１４１０／１４１５、および、図１４Ｂの命令テンプレート１４１２／１４１７から選択を行い、クラスフィールド１４６８の内容が、それらメモリアクセス１４２０命令テンプレートのうち、図１４Ａの命令テンプレート１４２５／１４３０、および、図１４Ｂの命令テンプレート１４２７から選択を行う。他の見方では、クラスフィールド１４６８の内容が、図１４Ａおよび図１４ＢのうちそれぞれのクラスＡおよびクラスＢ命令テンプレートから選択を行い、修飾子フィールドの内容が、それらクラスＡの命令テンプレートのうち、図１４Ａの命令テンプレート１４０５、１４２０から選択を行い、修飾子フィールドの内容が、それらクラスＢ命令テンプレートのうち、図１４Ｂの命令テンプレート１４０５、１４２０から選択を行う。クラスフィールドの内容がクラスＡの命令テンプレートを示す場合、修飾子フィールド１４４６の内容が、アルファフィールド１４５２（ＲＳフィールド１４５２ＡおよびＥＨフィールド１４５２Ｂ）の解釈を選択する。同様に、修飾子フィールド１４４６およびクラスフィールド１４６８の内容が、アルファフィールドがＲＳフィールド１４５２Ａ、ＥＨフィールド１４５２Ｂ、または書き込みマスク制御（Ｚ）フィールド１４５２Ｃとして解釈されるかの選択を行う。クラスフィールドおよび修飾子フィールドがクラスＡの非メモリアクセス動作を示す場合、オーグメンテーションフィールドのベータフィールドの解釈は、ＲＳフィールドの内容に基づいて変化し、クラスフィールドおよび修飾子フィールドがクラスＢの非メモリアクセス動作を示す場合には、ベータフィールドの解釈は、ＲＬフィールドの内容に依存する。クラスフィールドおよび修飾子フィールドがクラスＡのメモリアクセス動作を示す場合には、オーグメンテーションフィールドのベータフィールドの解釈は、ベース演算フィールドの内容に基づいて変化し、クラスフィールドおよび修飾子フィールドがクラスＢのメモリアクセス動作を示す場合には、オーグメンテーションフィールドのベータフィールドのブロードキャストフィールド１４５７Ｂの解釈は、ベース演算フィールドの内容に基づいて変化する。よって、ベース演算フィールド、修飾子フィールド、および、オーグメンテーション演算フィールドの組み合わせにより、さらに幅広いタイプのオーグメンテーション演算を特定することが可能となる。
【０１４３】
複数の異なる状況において、クラスＡおよびクラスＢに関し様々な命令テンプレートを用いるのが有益である。クラスＡは、性能上の理由によりゼロ化−書き込みマスキング、または、より短いベクトル長さが所望される場合に有用である。例えば、ゼロ化により、人工的にデスティネーションとマージングを行う必要がなくリネームが用いられる場合に偽の依存性を避けることが可能となる。他の例として、ベクトル長さの制御は、ベクトルマスクを用いてより短いベクトルサイズをエミュレートする際に格納−ロード転送に関する課題を緩和する。クラスＢは、１）浮動小数点の例外を可能とし（つまり、ＳＡＥフィールドの内容がＮｏを示す）、同時に丸めモード制御を用いる場合、２）アップコンバージョン、スウィズル、スワップ、および／または、ダウンコンバージョンを用いることが出来る場合、並びに、３）グラフィックデータタイプで動作することが所望される場合に有用である。例えば、アップコンバージョン、スウィズル、スワップ、ダウンコンバージョン、およびグラフィックデータタイプは、異なる形式のソースを処理する際に必要となる命令の数を減らす。他の例としては、例外を可能とする性能により、指示される丸めモードでＩＥＥＥの規格に完全に準拠することが可能となる。
【０１４４】
＜例示的な特定のベクトルフレンドリーな命令フォーマット＞
図１５Ａ、図１５Ｂ、および図１５Ｃは、本願発明の実施形態に係る例示的な特定のベクトルフレンドリーな命令フォーマットを示すブロック図である。図１５Ａ、図１５Ｂ、および図１５Ｃは、フィールドの場所、サイズ、解釈、および順序、並びに、これらのフィールドのうちいくつかの値を特定するという意味で特定的である、特定のベクトルフレンドリーな命令フォーマット１５００を示す。特定のベクトルフレンドリーな命令フォーマット１５００を用いて、ｘ８６命令の拡張を行ってもよく、よって、フィールのうちいくつかは、既存のｘ８６命令のセット、およびその拡張（例えばＡＶＸ）に用いられるものと同様、または同じである。この形式は、拡張された既存のｘ８６命令のセットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および、即値フィールドに対応したままである。図１５Ａ、図１５Ｂ、および図１５Ｃからのフィールドがマッピングされる図１４Ａおよび図１４Ｂのフィールドが示されている。
【０１４５】
なお、本願発明の実施形態は、例示を目的とし、汎用のベクトルフレンドリーな命令フォーマット１４００の文脈で特定のベクトルフレンドリーな命令フォーマット１５００に関して説明するが、本願発明は、特に記される場合を除き、特定のベクトルフレンドリーな命令フォーマット１５００に限定されない。例えば、特定のベクトルフレンドリーな命令フォーマット１５００は特定のサイズのフィールドを有するものとして示されているが、汎用のベクトルフレンドリーな命令フォーマット１４００に関しては様々なフィールドが様々なサイズを有し得る。特定の例として、データ要素幅フィールド１４６４は特定のベクトルフレンドリーな命令フォーマット１５００において１ビットのフィールドとして示されているが、本願発明はそのように限定されない（つまり、汎用のベクトルフレンドリーな命令フォーマット１４００のデータ要素幅フィールド１４６４は他のサイズを有し得る）。
【０１４６】
＜形式−図１５Ａ、図１５Ｂ、および図１５Ｃ＞
汎用のベクトルフレンドリーな命令フォーマット１４００は、図１５Ａ、図１５Ｂ、および図１５Ｃで示される順序で以下に列挙するフィールドを含む。  ＥＶＥＸ  Ｐｒｅｆｉｘ（Ｂｙｔｅｓ  ０−３）  ＥＶＥＸ  Ｐｒｅｆｉｘ１００２−４バイト形式でエンコードされている。  形式フィールド１４４０（ＥＶＥＸ  Ｂｙｔｅ０，ｂｉｔｓ［７：０］）−第１バイト（ＥＶＥＸ  Ｂｙｔｅ  ０）は、形式フィールド１４４０であり、０ｘ６２（本願発明の一実施形態において、ベクトルフレンドリーな命令フォーマットを区別するのに用いられる一意の値）を含む。
【０１４７】
第２〜４バイト（ＥＶＥＸ  Ｂｙｔｅｓ  １−３）は特定の機能を提供する複数のビットフィールドを含む。
【０１４８】
ＲＥＸフィールド１５０５（ＥＶＥＸ  Ｂｙｔｅ  １，ｂｉｔｓ［７−５］）−ＥＶＥＸ．Ｒ  ｂｉｔ  ｆｉｅｌｄ（ＥＶＥＸ  Ｂｙｔｅ  １，ｂｉｔ［７］−Ｒ），ＥＶＥＸ．Ｘ  ｂｉｔ  ｆｉｅｌｄ（ＥＶＥＸ  ｂｙｔｅ１，ｂｉｔ［６］−Ｘ）、および１４５７ＢＥＸ  ｂｙｔｅ  １，ｂｉｔ［５］−Ｂ）からなる。ＥＶＥＸ．Ｒ，ＥＶＥＸ．ＸおよびＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同様の機能を提供し、１の補数形式を用いてエンコードされる。つまり、ＺＭＭ０は、１１１１Ｂとしてエンコードされ、ＺＭＭ１５は、００００Ｂとしてエンコードされる。当分野で公知のように命令の他のフィールドは、レジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、およびｂｂｂ）をエンコードするので、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂを加えることにより、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂが形成され得る。
【０１４９】
ＲＥＸ'フィールド１５１０−このフィールドは、ＲＥＸ'フィールド１５１０の最初の部分であり、拡張された３２レジスタセットの上位１６および下位１６のうちいずれかをエンコードするのに用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸ  Ｂｙｔｅ  １，ｂｉｔ［４］−Ｒ'）である。本願発明の一実施形態において、以下に示す他のビットと共にこのビットは、リアルオペコードバイトが６２であるＢＯＵＮＤ命令と（周知のｘ８６  ３２ビットモードで）区別すべくビット反転形式で格納されるが、ＭＯＤフィールドの１１の値をＭＯＤ  Ｒ／Ｍフィールド（以下に説明する）で受け入れない。代替的な実施形態においては、このビット、および以下に示された他のビットは反転形式で格納されない。１の値を用いて下位１６のレジスタをエンコードする。言い換えると、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、および他のフィールドからの他のＲＲＲを組み合わせて、Ｒ'Ｒｒｒｒが形成される。
【０１５０】
オペコードマップフィールド１０１５（ＥＶＥＸ  ｂｙｔｅ  １，ｂｉｔｓ［３：０］−ｍｍｍｍ）−この内容は、示唆された先頭のオペコードバイト（０Ｆ、０Ｆ  ３８、または、０Ｆ  ３）をエンコードする。
【０１５１】
データ要素幅フィールド１４６４（ＥＶＥＸ  ｂｙｔｅ  ２，ｂｉｔ［７］−Ｗ）−ＥＶＥＸ．Ｗと表記される。ＥＶＥＸ．Ｗは、データタイプの粒度（サイズ）を定義するのに用いられる（３２ビットのデータ要素、または６４ビットのデータ要素）。
【０１５２】
ＥＶＥＸ．ｖｖｖｖ１５２０（ＥＶＥＸ  Ｂｙｔｅ  ２，ｂｉｔｓ［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割には、以下のものが含まれ得る。１）ＥＶＥＸ．ｖｖｖｖは、反転された（１の補数）形式で特定される第１ソースレジスタオペランドをエンコードし、２以上のソースオペランドの命令に有効である、２）ＥＶＥＸ．ｖｖｖｖは、特定のベクトルシフトに関し、１の補数形式で特定されるデスティネーションレジスタオペランドをエンコードする、３）ＥＶＥＸ．ｖｖｖｖは、何れのオペランドもエンコードせず、当該フィールドは残しておかれ、１１１１ｂを含む。よって、ＥＶＥＸ．ｖｖｖｖフィールド１５２０は、反転された（１の補数）形式で格納される第１ソースレジスタ指定子の４つの下位ビットをエンコードする。命令に応じて、追加の異なるＥＶＥＸビットフィールドが、指定子のサイズを３２レジスタに拡張するのに用いられる。
【０１５３】
ＥＶＥＸ．Ｕ１４６８クラスフィールド（ＥＶＥＸ  ｂｙｔｅ  ２，ｂｉｔ［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０の場合、クラスＡ、またはＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合、クラスＢ、またはＥＶＥＸ．Ｕ１を示す。
【０１５４】
プレフィックスエンコードフィールド１５２５（ＥＶＥＸ  ｂｙｔｅ  ２，ｂｉｔｓ［１：０］−ｐｐ）−ベース演算フィールドに追加のビットを提供する。ＥＶＥＸプレフィックス形式のレガシーＳＳＥ命令のサポートを提供するのに加え、このフィールドは、ＳＩＭＤプレフィックスをコンパクト化するのに有用である（ＳＩＭＤプレフィックスを表現するのに１バイトを必要とせず、ＥＶＥＸ  Ｐｒｅｆｉｘは２ビットのみ必要とする）。一実施形態において、レガシー形式、およびＥＶＥＸプレフィックス形式の両方のＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシーＳＳＥ命令をサポートするべく、これらのレガシーＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックスエンコードフィールドにエンコードされ、実行時には、デコーダのＰＬＡに提供される前に、レガシーＳＩＭＤプレフィックスに拡張される（つまり、ＰＬＡは修正を加えることなくこれらのレガシー命令のレガシー形式およびＥＶＥＸ形式を実行することが出来る）。より新しい命令はＥＶＥＸプレフィックスエンコードフィールドの内容を直接的にオペコード拡張として用いることが出来るが、特定の実施形態においては、一貫性を保つべく同様のやり方で拡張が行われるが、これらのレガシーＳＩＭＤプレフィックスによる異なる意味の特定を可能とする。代替的な実施形態において、２ビットのＳＩＭＤプレフィックスエンコードをサポートするようＰＬＡを再設計し、よって、拡張が必要とされない。
【０１５５】
アルファフィールド１４５２（ＥＶＥＸ  ｂｙｔｅ  ３，ｂｉｔ［７］−ＥＨ。ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌおよびＥＶＥＸ．Ｎとしても知られる。αを用いても示される−上述したように、このフィールドは内容特有のものである。追加の説明は本明細書において以下に示す。
【０１５６】
ベータフィールド１４５４（ＥＶＥＸ  ｂｙｔｅ  ３，ｂｉｔｓ［６：４］−ＳＳＳ。ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られる。βββを用いても示される）−上述したように、このフィールドは内容特有のものである。追加の説明は本明細書において以下に示す。
【０１５７】
ＲＥＸ'フィールド１５１０−このフィールドはＲＥＸ'フィールドの残りであり、拡張された３２レジスタセットの上位１６および下位１６のうちいずれかをエンコードするのに用いられ得るＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸ  Ｂｙｔｅ  ３，ｂｉｔ［３］−Ｖ'）である。このビットはビット反転形式で格納される。下位１６のレジスタをエンコードするのに１の値が用いられる。言い換えると、ＥＶＥＸ．Ｖ'とＥＶＥＸ．ｖｖｖｖとを組み合わせてＶ'ＶＶＶＶが形成される。
【０１５８】
書き込みマスクフィールド１４７０（ＥＶＥＸ  ｂｙｔｅ  ３，ｂｉｔｓ［２：０］−ｋｋｋ）−この内容は、上述したように書き込みマスクレジスタのレジスタのインデックスを特定する。本願発明の一実施形態において、特定値ＥＶＥＸ．ｋｋｋ＝０００は特定の命令に対し書き込みマスクが用いられないことを示唆する特別な挙動を示す（このことは、全ての１にハードワイヤされた、またはマスキングハードウェアをバイパスするハードウェアにハードワイヤされた書き込みマスクを用いることを含む様々なやり方で実装することが出来る）。  リアルオペコードフィールド１０３０（Ｂｙｔｅ  ４）  このフィールドは、オペコードバイトとしても知られる。オペコードの一部はこのフィールドで特定される。  ＭＯＤ  Ｒ／Ｍフィールド１０４０（Ｂｙｔｅ  ５）  修飾子フィールド１４４６（ＭＯＤＲ／Ｍ．ＭＯＤ，ｂｉｔｓ［７−６］−ＭＯＤフィールド１５４２）−上述したように、ＭＯＤフィールド１５４２の内容は、メモリアクセス動作と非メモリアクセス動作とを区別する。このフィールドは本明細書において以下にさらに説明する。  ＭＯＤＲ／Ｍ．ｒｅｇフィールド１０４４，ｂｉｔｓ［５−３］−ＭｏｄＲ／Ｍ．ｒｅｇフィールドの役割は、２つの状況に要約することが出来る。ＭｏｄＲ／Ｍ．ｒｅｇが、デスティネーションレジスタオペランド、およびソースレジスタオペランドのうちいずれかをエンコードする。または、ＭｏｄＲ／Ｍ．ｒｅｇが、オペコード拡張として扱われ、いずれの命令オペランドをエンコードするのにも用いられない。  ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１０４６，ｂｉｔｓ［２−０］−ＭｏｄＲ／Ｍ．ｒ／ｍフィールドの役割には以下のものが含まれ得る。ＭｏｄＲ／Ｍ．ｒ／ｍが、メモリアドレスを参照する命令オペランドをエンコードする。または、ＭｏｄＲ／Ｍ．ｒ／ｍが、デスティネーションレジスタオペランド、およびソースレジスタオペランドのいずれかをエンコードする。  スケール、インデックス、ベース（ＳＩＢ）バイト（Ｂｙｔｅ  ６）スケールフィールド１４６０（ＳＩＢ．ＳＳ，ｂｉｔｓ［７−６］−上述したように、スケールフィールド１４６０の内容は、メモリアドレスの生成に用いられる。このフィールドは本明細書において以下にさらに説明する。  ＳＩＢ．ｘｘｘ１５５４（ｂｉｔｓ［５−３］）、および、ＳＩＢ．ｂｂｂ１０５６（ｂｉｔｓ［２−０］）−これらのフィールドの内容は、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関連して上記にて参照した。  変位バイト（Ｂｙｔｅ  ７、または、Ｂｙｔｅｓ  ７−１０）  変位フィールド１４６２Ａ（Ｂｙｔｅｓ  ７−１０）−ＭＯＤフィールド１５４２が１０を含む場合、バイト７−１０は変位フィールド１４６２Ａであり、レガシー３２ビットの変位（ｄｉｓｐ３２）と同じく動作し、バイト粒度で動作する。
【０１５９】
変位係数フィールド１４６２Ｂ（Ｂｙｔｅ  ７）−ＭＯＤフィールド１５４２が０１を含む場合、バイト７は変位係数フィールド１４６２Ｂである。このフィールドの場所は、バイト粒度で動作するレガシーｘ８６命令セットの８ビット変位（ｄｉｓｐ８）の場所と同じである。ｄｉｓｐ８は符号が拡張されているので、−１２８〜１２７バイトのオフセットのみに対応出来る。６４バイトのキャッシュに関しては、ｄｉｓｐ８は、−１２８、−６４、０、および６４の４つの実際に有用な値にのみ設定され得る８ビットを用いる。さらに大きな範囲が必要とされることが多いので、ｄｉｓｐ３２が用いられる。しかし、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８およびｄｉｓｐ３２と対照的に、変位係数フィールド１４６２Ｂはｄｉｓｐ８の再解釈である。変位係数フィールド１４６２Ｂを用いる場合、実際の変位は、変位係数フィールドの内容にメモリオペランドアクセスのサイズ（Ｎ）を乗算して決定される。このタイプの変位は、ｄｉｓｐ８＊Ｎと示される。これにより、平均の命令長さが短くなる（変位に関して１つのバイトがより大きな範囲に対して用いられる）。そのような圧縮された変位は、有効な変位はメモリアクセスの粒度の倍数であり、よって、アドレスオフセットの冗長下位ビットは、エンコードされる必要がないという仮定に基づいている。言い換えると、変位係数フィールド１４６２Ｂはレガシーｘ８６命令セットの８ビット変位に置き換わる。よって、変位係数フィールド１４６２Ｂは、ｘ８６命令セットの８ビット変位と同じやり方でエンコードされ（つまり、ＭｏｄＲＭ／ＳＩＢのエンコードルールには変更がない）、ｄｉｓｐ８がｄｉｓｐ８＊Ｎにオーバーロードされる（ｏｖｅｒｌｏａｄｅｄ）点だけが異なる。言い換えると、エンコードルールまたはエンコード長さには変化がないが、（バイトごとのアドレスオフセットを得るには、メモリオペランドのサイズで変位をスケーリングする必要がある）ハードウェアによる変位値の解釈にのみ変化がある。
【０１６０】
＜即値＞
即値フィールド１４７２は上述したように動作する。
【０１６１】
＜例示的なレジスタアーキテクチャ−図１６＞
図１６は、本願発明の一実施形態に係るレジスタアーキテクチャ１６００のブロック図である。レジスタアーキテクチャのレジスタファイルおよびレジスタを以下に列挙する。
【０１６２】
＜ベクトルレジスタファイル１６１０＞
示される実施形態において、１１１２ビットの幅を有する３２個のベクトルレジスタがある。これらのレジスタをｚｍｍ０〜ｚｍｍ３１と呼ぶ。最初の１６個のレジスタの下位９５６ビットは、レジスタｙｍｍ０〜１６にオーバーレイされて（ｏｖｅｒｌａｉｄ）いる。最初の１６ｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５にオーバーレイされている。特定のベクトルフレンドリーな命令フォーマット１５００は以下の表に示すようにこれらオーバーレイされたレジスタファイルに対して動作する。
【表２】
0005844882.tif 000003
【０１６３】
言い換えると、ベクトル長さフィールド１４５９Ｂは、最大長さおよび１以上の他のより短い長さのうちから選択を行う。ここでそのようなより短い長さのそれぞれは先行する長さの半分である。ベクトル長さフィールド１４５９Ｂを有さない命令テンプレートは、最大ベクトル長さで動作する。さらに、一実施形態において、特定のベクトルフレンドリーな命令フォーマット１５００のクラスＢ命令テンプレートは、パックされた、またはスカラの単／倍精度浮動小数点データ、およびパックされた、またはスカラの整数データに対し動作する。スカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタの下位のデータ要素の位置に対して行われる演算である。上位のデータ要素の位置は命令の前の位置と同じままである、または実施形態によってはゼロにされる。
【０１６４】
書き込みマスクレジスタ１５１５−示される実施形態において、それぞれサイズが６４ビットである８個の書き込みマスクレジスタ（ｋ０〜ｋ７）がある。上述したように、本願発明の一実施形態において、ベクトルマスクレジスタｋ０は書き込みマスクとして用いることが出来ない。エンコードの際には、このフィールドは通常ｋ０が書き込みマスクに用いられることを示し、０ｘＦＦＦＦのハードワイヤされた書き込みマスクを選択し、効果的に当該命令の書き込みマスクを無効化する。
【０１６５】
マルチメディア拡張制御ステータスレジスタ（ＭＸＣＳＲ）１６２０−示される実施形態において、この３２ビットレジスタは浮動小数点演算に用いられるステータスおよび制御ビットを提供する。
【０１６６】
汎用レジスタ１６２５−示される実施形態において、メモリオペランドに対応する既存のｘ８６アドレシングモードと用いられる１６個の６４ビット汎用レジスタがある。これらのレジスタはＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、および、Ｒ８〜Ｒ１５で示される。
【０１６７】
拡張フラグ（ＥＦＬＡＧＳ）レジスタ１６３０−示される実施形態において、この３２ビットのレジスタは、多くの命令の結果を記録するのに用いられる。
【０１６８】
浮動小数点制御ワード（ＦＣＷ）レジスタ１６３５、および、浮動小数点ステータスワード（ＦＳＷ）レジスタ１６４０−示される実施形態において、これらのレジスタは、ＦＣＷの場合に丸めモード、例外マスク、およびフラグを設定し、ＦＳＷの場合に例外の記録をつけるべく、ｘ８７命令セット拡張によって用いられる。
【０１６９】
ＭＭＸパックド整数フラットレジスタファイル１６５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１６４５−示される実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いる３２／６４／８０ビット浮動小数点データに対するスカラ浮動小数点演算を実行するのに用いられる８個の要素のスタックであり、ＭＭＸレジスタは、６４ビットのパックされた整数データに対する演算を実行し、ＭＭＸレジスタとＸＭＭレジスタとの間で実行されるいくつかの演算のオペランドを保持するのに用いられる。
【０１７０】
セグメントレジスタ１６５５−示される実施形態において、セグメント化されたアドレス生成に用いられるデータを格納するのに用いられる６個の１６ビットレジスタがある。
【０１７１】
ＲＩＰレジスタ１６６５−示される実施形態において、この６４ビットレジスタは、命令ポインタを格納する。
【０１７２】
本願発明の代替的な実施形態においては、より広い、またはより狭いレジスタが用いられる。加えて、本願発明の代替的な実施形態においては、より多くの、より少ない、または異なるレジスタファイルおよびレジスタが用いられる。
【０１７３】
＜例示的なインオーダープロセッサアーキテクチャ−図１７Ａおよび図１７Ｂ＞
図１７Ａおよび図１７Ｂは、例示的なインオーダープロセッサアーキテクチャのブロック図を示す。これらの例示的な実施形態は、ワイドベクトルプロセッサ（ＶＰＵ）で補強されたインオーダーＣＰＵコアの複数のインスタンシエイションに基づいて設計されている。コアはｅ１９ｔアプリケーションに応じて、何らかの所定の関数ロジック、メモリＩ／Ｏインタフェース、および、他の必要なＩ／Ｏロジックと高帯域幅インターコネクトネットワークを介して通信を行う。例えば、スタンドアローンＧＰＵとしての本実施形態の実施は、典型的にはＰＣＩｅバスを含む。
【０１７４】
図１７Ａは、本願発明の実施形態に係る、シングルＣＰＵコア、当該シングルＣＰＵコアのオンダイインターコネクトネットワーク１７０２との接続、およびレベル２（Ｌ２）キャッシュ１７０４のローカルサブセットを示すブロック図である。命令デコーダ１７００は、特定のベクトル命令フォーマット１０００を含む拡張を有するｘ８６命令セットをサポートする。本願発明の一実施形態においては、（設計を単純にするべく）スカラユニット１７０８およびベクトルユニット１７１０は別個のレジスタセットを用い（それぞれ、スカラレジスタ１７１２、およびベクトルレジスタ１７１４）、これらの間で転送されるデータはメモリへ書き込まれ、レベル１（Ｌ１）キャッシュ１７０６から読み出されるが、本願発明の代替的な実施形態においては、異なるアプローチが用いられる（例えば、１つのレジスタセットが用いられる、または、書き込みおよび読み出しが行われることなく２つのレジスタファイル間でデータの転送を可能とする通信パスが含まれる）。
【０１７５】
Ｌ１キャッシュ１７０６は、メモリのスカラユニットおよびベクトルユニットへのキャッシュのための低いレイテンシアクセスを可能とする。ベクトルフレンドリーな命令フォーマットのロードオペランド命令と併せて、このことは、拡張されたレジスタファイルと幾分同じようにＬ１キャッシュ１７０６を扱えることを意味する。このことにより、多くのアルゴリズム、特にエビクション・示唆（hint）フィールド１４５２Ｂのアルゴリズムに関して性能を向上させられる。
【０１７６】
Ｌ２キャッシュ１７０４のローカルサブセットは、ＣＰＵコア毎に１つの、別個のローカルサブセットへ分割されるグローバルなＬ２キャッシュの一部である。各ＣＰＵは、Ｌ２キャッシュ１７０４の自身のローカルサブセットへの直接的なアクセスパスを有する。ＣＰＵコアによって読み出されたデータは、そのＬ２キャッシュサブセット１７０４に格納され、それぞれ自身のローカルＬ２キャッシュサブセットにアクセスする他のＣＰＵと並行して迅速にアクセスすることが出来る。ＣＰＵコアによって書き込まれたデータは、自身のＬ２キャッシュサブセット１７０４に格納され、必要であれば他のサブセットからフラッシュされる。リングネットワークによって、共有されるデータの一貫性が確保される。
【０１７７】
図１７Ｂは、本願発明の実施形態に係る、図１７ＡのＣＰＵコアの一部を示す分解図である。図１７ＢはＬ１キャッシュ１７０４のＬ１データキャッシュ１７０６Ａ部分、並びに、ベクトルユニット１７１０およびベクトルレジスタ１７１４の詳細を示す。詳細には、ベクトルユニット１７１０は整数、単精度浮動小数点、および倍精度浮動小数点命令を実行する１６ワイドベクトル処理ユニット（ＶＰＵ）（１６ワイドＡＬＵ１７２８を参照）である。ＶＰＵは、スウィズルユニット１７２０のレジスタインプットのスウィズリング、数値変換ユニット１７２２Ａ、１７２２Ｂの数値変換、およびメモリインプットの複製ユニット１７２４の複製をサポートする。書き込みマスクレジスタ１７２６により、結果として生じるベクトル書き込みの予測が可能となる。
【０１７８】
レジスタデータは、例えば行列の乗算をサポートするなど、様々なやり方でスウィズリング出来る。メモリからのデータは、複数のＶＰＵレーンに対して複製出来る。このことはグラフィックおよび非グラフィック両方の並列データ処理に共通の演算であり、キャッシュの効率性をはるかに向上させる。
【０１７９】
リングネットワークは、ＣＰＵコア、Ｌ２キャッシュ、および他のロジックグロックなどのエージェントが互いにチップ内で通信を行えるよう双方向性である。各リングデータパスは、一方向あたり１１１２ビット幅である。
【０１８０】
＜例示的なアウトオブオーダーアーキテクチャ−図１８＞
図１８は、本願発明の実施形態に係る例示的なアウトオブオーダーアーキテクチャを示すブロック図である。詳細には、図１８は、ベクトルフレンドリーな命令フォーマットおよびその実行に対応するよう修正された周知の例示的なアウトオブオーダーアーキテクチャを示す。図１８において、矢印は２以上のユニットの結合を示し、矢印の方向はそれらユニット間のデータフローの方向を示す。図１８は、実行エンジンユニット１８１０およびメモリユニット１８１５に結合されたフロントエンドユニット１８０５を含む。実行エンジンユニット１８１０はさらに、メモリユニット１８１５に結合されている。
【０１８１】
フロントエンドユニット１８０５は、レベル２（Ｌ２）分岐予測ユニット１８２２に結合されたレベル１（Ｌ１）分岐予測ユニット１８２０を含む。Ｌ１およびＬ２分岐予測ユニット１８２０、１８２２は、Ｌ１命令キャッシュユニット１８２４に結合されている。Ｌ１命令キャッシュユニット１８２４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）１８２６に結合され、命令トランスレーションルックアサイドバッファ（ＴＬＢ）１８２６はさらに、命令フェッチ／プリデコードユニット１８２８に結合されている。命令フェッチ／プリデコードユニット１８２８は、命令キューユニット１８３０に結合され、命令キューユニット１８３０はさらにデコードユニット１８３２に結合されている。デコードユニット１８３２は、1個の複雑なデコーダユニット１８３４、および３個の単純なデコーダユニット１８３６、１８３８、１８４０を備える。デコードユニット１８３２は、マイクロコードＲＯＭユニット１８４２を含む。デコードユニット１８３２は、デコード段階について述べたセクションで上述したように動作してもよい。Ｌ１命令キャッシュユニット１８２４はさらに、メモリユニット１８１５内のＬ２キャッシュユニット１８４８に結合されている。命令ＴＬＢユニット１８２６はさらに、メモリユニット１８１５内の第２レベルＴＬＢユニット１８４６に結合されている。デコードユニット１８３２、マイクロコードＲＯＭユニット１８４２、およびループストリーム検出ユニット１８４４はそれぞれ、実行エンジンユニット１８１０内のリネーム／アロケータユニット１８５６に結合されている。
【０１８２】
実行エンジンユニット１８１０は、リネーム／アロケータユニット１８５６を含み、リネーム／アロケータユニット１８５６は、リタイヤユニット１８７４および統合スケジューラユニット１８５８に結合されている。リタイヤユニット１８７４はさらに、実行ユニット１８６０に結合され、リオーダバッファユニット１８７８を含む。統合スケジューラユニット１８５８はさらに、物理レジスタファイルユニット１８７６に結合され、物理レジスタファイルユニット１８７６は実行ユニット１８６０に結合されている。物理レジスタファイルユニット１８７６は、ベクトルレジスタユニット１８７７Ａ、書き込みマスクレジスタユニット１８７７Ｂ、および、スカラレジスタユニット１８７７Ｃを備える。これらのレジスタユニットは、ベクトルレジスタ１６１０、ベクトルマスクレジスタ１５１５、および、汎用レジスタ１６２５を提供してもよく、物理レジスタファイルユニット１８７６は、示されていない追加のレジスタファイルを含んでもよい（例えば、ＭＭＸパックド整数フラットレジスタファイル１６５０に対しエイリアスされたスカラ浮動小数点スタックレジスタファイル１６４５）。実行ユニット１８６０は３個のミックスされたスカラおよびベクトルユニット１８６２、１８６４、１８７２、ロードユニット１８６６、格納アドレスユニット１８６８、および、格納データユニット１８７０を含む。ロードユニット１８６６、格納アドレスユニット１８６８、および、格納データユニット１８７０はそれぞれさらに、メモリユニット１８１５内のデータＴＬＢユニット１８５２に結合されている。
【０１８３】
メモリユニット１８１５は、第２レベルＴＬＢユニット１８４６を含み、第２レベルＴＬＢユニット１８４６は、データＴＬＢユニット１８５２に結合されている。データＴＬＢユニット１８５２はＬ１データキャッシュユニット１８５４に結合されている。Ｌ１データキャッシュユニット１８５４はさらに、Ｌ２キャッシュユニット１８４８に結合されている。いくつかの実施形態において、Ｌ２キャッシュユニット１８４８はさらに、メモリユニット１８１５内、および／または外のＬ３およびさらに高いレベルのキャッシュユニット１８５０に結合されている。
【０１８４】
例として、例示的なアウトオブオーダーアーキテクチャは、次のように処理パイプラインを実施する。１）命令フェッチ／プリデコードユニット１８２８がフェッチおよび長さデコード段階を実行する、２）デコードユニット１８３２がデコード段階を実行する、３）リネーム／アロケータユニット１８５６がアロケーションおよびリネーム段階を実行する、４）統合スケジューラユニット１８５８がスケジューリング段階を実行する、５）物理レジスタファイルユニット１８７６、リオーダバッファユニット１８７８、およびメモリユニット１８１５がレジスタ読み出し／メモリ読み出し段階を実行し、実行ユニット１８６０が実行／データ変換段階を実行する、６）メモリユニット１８１５およびリオーダバッファユニット１８７８が、書き戻し／メモリ書き込み段階を実行する、７）リタイヤユニット１８７４がＲＯＢ読み出し段階を実行する、８）様々なユニットが例外取り扱い段階１４１６４に関わってもよい、９）リタイヤユニット１８７４および物理レジスタファイルユニット１８７６がコミット段階を実行する。
【０１８５】
＜例示的なシングルコアおよびマルチコアプロセッサ＞
図２３は、本願発明の実施形態に係る、集積メモリコントローラおよび集積グラフィックを備えたシングルコアプロセッサおよびマルチコアプロセッサ２３００を示すブロック図である。図２３において、実線の四角はシングルコア２３０２Ａ、システムエージェント２３１０、および１以上のバスコントローラユニット２３１６からなるセットを含むプロセッサ２３００を示し、破線の四角は、複数のコア２３０２Ａ〜Ｎ、システムエージェントユニット２３１０内の１以上の集積メモリコントローラユニット２３１４からなるセット、および集積グラフィックロジック２３０８を含む代替的なプロセッサ２３００を任意的な追加として示す。
【０１８６】
メモリ階層は、コア内の１以上のレベルのキャッシュ、１以上の共有キャッシュユニット２３０６からなるセット、複数の集積メモリコントローラユニット２３１４からなるセットに結合された外部メモリ（図示せず）を含む。複数の共有キャッシュユニット２３０６からなるセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他のレベルのキャッシュなど１以上の中間レベルのキャッシュ、最後のレベルのキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせを含んでよい。一実施形態においては、リングベースのインターコネクトユニット２３１２が集積グラフィックロジック２３０８、複数の共有キャッシュユニット２３０６からなるセット、および、システムエージェントユニット２３１０を相互接続するが、代替的な実施形態においては、そのようなユニットを相互接続する周知の技術をいくつか用いてもよい。
【０１８７】
いくつかの実施形態において、１以上のコア２３０２Ａ〜Ｎは、マルチスレッドに対応可能である。システムエージェント２３１０は、コア２３０２Ａ〜Ｎの調整を行い動作させるコンポーネントを含む。システムエージェントユニット２３１０は、例えば、電力制御ユニット（ＰＣＵ）、およびディスプレイユニットを含む。ＰＣＵは、コア２３０２Ａ〜Ｎおよび集積グラフィックロジック２３０８の電力状況を制御するのに必要なロジックおよびコンポイーネントであるか、それらを含んでもよい。ディスプレイユニットが１以上の外部接続されたディスプレイを駆動する。
【０１８８】
コア２３０２Ａ〜Ｎは、アーキテクチャ、および／または命令セットに関して、同質、または異質のものであってもよい。例えば、コア２３０２Ａ〜Ｎのうちいくつかはインオーダー（例えば、図１７Ａおよび図１７Ｂで示すような）であり、他のコアは、アウトオブオーダー（例えば、図２３に示すような）であってもよい。他の例として、コア２３０２Ａ〜Ｎのうち２以上は、同じ命令セットを実行可能であり、他のコアは、その命令セットのサブセットのみ、または異なる命令セットを実行可能である。少なくとも１つのコアが、本明細書で説明するベクトルフレンドリーな命令フォーマットを実行可能である。
【０１８９】
プロセッサは、米国カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎにより販売されるＣｏｒｅ（登録商標）ｉ３、ｉ５、ｉ７、２  Ｄｕｏ、およびＱｕａｄ、Ｘｅｏｎ（登録商標）、またはＩｔａｎｉｕｍ（登録商標）プロセッサなどの汎用プロセッサであってよい。代替的に、プロセッサは他の企業が販売するものであってもよい。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、コプロセッサ、埋め込み型プロセッサなどの特定用途プロセッサであってもよい。プロセッサは１以上のチップ上で実装されてもよい。プロセッサ２３００は、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどの処理技術をいくつか用い、１以上の基板の一部である、および／または、それら基板上で実装されてもよい。
【０１９０】
＜例示的なコンピュータシステムおよびプロセッサ−図１９〜２２＞
図１９〜２２は、プロセッサ２３００を含めるのに適した例示的なシステムを示す。図１７Ａおよび図１７Ｂは、１以上のコア２３０２を含みうる例示的なシステムオンチップ（ＳｏＣ）を示す。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込み型プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスに関する当分野で公知の他のシステム設計および構成も適している。一般的に、本明細書で開示されるプロセッサ、および／または他の実行ロジックを組み込むことが可能な非常に幅広い種類のシステムまたは電子デバイスが適している。
【０１９１】
図１９は、本願発明の一実施形態に係るシステム１９００を示すブロック図である。システム１９００は、１以上のプロセッサ１９１０、１９１５を含み、１以上のプロセッサ１９１０、１９１５はグラフィックメモリコントローラハブ（ＧＭＣＨ）１９２０に結合されている。追加のプロセッサ１９１５は任意で用いられるので、図１９において破線で示されている。
【０１９２】
各プロセッサ１９１０、１９１５はプロセッサ２３００の何らかのバージョンであってよい。しかし、集積グラフィックロジックおよび集積メモリ制御ユニットがプロセッサ１９１０、１９１５内に存在するということは考えられにくい。
【０１９３】
図１９は、ＧＭＣＨ１９２０が、例えばダイナミックランダムアクセスメモリ（ＤＲＡＭ）であってよいメモリ１９４０に結合されていてよいことを示す。ＤＲＡＭは、少なくとも一実施形態において、非揮発性キャッシュに関連付けられている。
【０１９４】
ＧＭＣＨ１９２０は、チップセットである、またはチップセット一部である。ＧＭＣＨ１９２０はプロセッサ１９１０、１９１５と通信を行い、プロセッサ１９１０、１９１５とメモリ１９４０との間の相互作用を制御してもよい。またＧＭＣＨ１９２０は、プロセッサ１９１０、１９１５と、システム１９００の他の要素との間の加速バスインタフェースとして動作してもよい。少なくとも一実施形態において、ＧＭＣＨ１９２０は、フロントサイドバス（ＦＳＢ）１９９５などのマルチドロップバスを介してプロセッサ１９１０、１９１５と通信を行う。
【０１９５】
さらに、ＧＭＣＨ１９２０は、ディスプレイ１９４５（フラットパネルディスプレイなど）に結合されている。ＧＭＣＨ１９２０は、集積グラフィックアクセラレータを含んでもよい。ＧＭＣＨ１９２０はさらに、様々な周辺デバイスをシステム１９００に結合するのに用いられ得る、入力／出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）１９５０に結合されている。図１９の実施形態においては、他の周辺デバイス１９７０と併せて、ＩＣＨ１９５０に結合されている独立したグラフィックデバイスであってよい外部グラフィックデバイス１９６０が例として示されている。
【０１９６】
代替的に、追加的な、または異なるプロセッサもシステム１９００に存在してもよい。例えば、追加のプロセッサ１９１５には、プロセッサ１９１０と同じ追加のプロセッサ、プロセッサ１９１０と異質の、または対称的な追加のプロセッサ、アクセラレータ（例えば、グラフィックアクセラレータ、またはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、または他の何らかのプロセッサが含まれてよい。アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などの面で、物理リソース１９１０、１９１５毎に様々な利点がある。これらの利点の差は、処理要素１９１０、１９１５間の対称性または異質性を利用し有効に活用される。少なくとも一実施形態において、様々な処理要素１９１０、１９１５が同じダイパッケージに存在してもよい。
【０１９７】
図２０は、本願発明の実施形態に係る第２システム２０００を示すブロック図である。図２０に示すようにマルチプロセッサシステム２０００は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト２０５０で結合された第１プロセッサ２０７０および第２プロセッサ２０８０を含む。図２０に示すように各プロセッサ２０７０、２０８０はプロセッサ２３００の何らかのバージョンであってよい。
【０１９８】
代替的に、１以上のプロセッサ２０７０、２０８０は、アクセラレータまたはフィールドプログラマブルゲートアレイなど、プロセッサ以外の要素であってよい。
【０１９９】
２つのプロセッサ２０７０、２０８０のみが示されているが、本願発明の態様はこのことに限定されない。他の実施形態において、１以上の追加的な処理要素が任意のプロセッサに存在してもよい。
【０２００】
プロセッサ２０７０はさらに、集積メモリコントローラハブ（ＩＭＣ）２０７２、およびポイントツーポイント（Ｐ−Ｐ）２０７６、２０７８を含んでもよい。同様に、第２プロセッサ２０８０は、ＩＭＣ２０８２およびＰ−Ｐインタフェース２０８６、２０８８を含んでもよい。プロセッサ２０７０、２０８０は、ＰｔＰインタフェース回路２０７８、２０８８を用いてポイントツーポイント（ＰｔＰ）インタフェース２０５０を介してデータを交換してもよい。図２０に示すようにＩＭＣ２０７２、２０８２は各プロセッサを、対応するメモリ、つまり各プロセッサにローカルに取り付けられた主メモリの一部であってもよいメモリ２０４２およびメモリ２０４４に結合する。
【０２０１】
プロセッサ２０７０、２０８０はそれぞれ、ポイントツーポイントインタフェース回路２０７６、２０９４、２０８６、２０９８を用いて個々のＰ−Ｐインタフェース２０５２、２０５４を介しチップセット２０９０とデータを交換してもよい。またチップセット２０９０は、高性能グラフィックインタフェース２０３９を介して高性能グラフィック回路２０３８とデータを交換してもよい。
【０２０２】
プロセッサが低電力モードにされた場合、いずれか、または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納されるように、共有キャッシュ（図示せず）は、両プロセッサ外でいずれかのプロセッサに含まれ、かつ、Ｐ−Ｐインターコネクトを介しプロセッサと接続されていてもよい。
【０２０３】
チップセット２０９０は、インタフェース２０９６を介して第１バス２０１６に結合されていてもよい。一実施形態において、第１バス２０１６は、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、或いは、ＰＣＩ  Ｅｘｐｒｅｓｓバスまたは他の第３世代Ｉ／Ｏインターコネクトバスなどのバスであってもよい。ただし、本願発明の態様はこのことに限定されない。
【０２０４】
図２０に示すように、第１バス２０１６を第２バス２０２０へ結合するバスブリッジ２０１８と併せて、様々なＩ／Ｏデバイス２０１４が第１バス２０１６に結合されていてもよい。一実施形態において、第２バス２０２０はｌｏｗ  ｐｉｎ  ｃｏｕｎｔ（ＬＰＣ）バスであってもよい。一実施形態において、キーボード／マウス２０２２、通信デバイス２０２６、並びに、ディスクドライブまたは、コード２０３０を含んでよい他の大容量記憶装置などのデータ格納ユニット２０２８など様々なデバイスが第２バス２０２０に結合されていてもよい。さらに、オーディオＩ／Ｏ２０２４が第２バス２０２０に結合されていてもよい。なお他のアーキテクチャを用いることも可能である。例えば、図２０のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の同様のアーキテクチャを実装してもよい。
【０２０５】
図２１は、本願発明の実施形態に係る第３システム２１００を示すブロック図である。図２０および図２１において同様の要素は、同様の参照符号が付されており、図２０の特定の態様は、図２１の他の態様を曖昧にすることを避けるべく図２１において省略されている。
【０２０６】
図２１は、処理要素２０７０、２０８０がそれぞれ集積メモリ−Ｉ／Ｏ制御ロジック（「ＣＬ」）２０７２、２０８２を含んでよいことを示す。少なくとも一実施形態において、ＣＬ２０７２、２０８２は図１９および図２０に関連して上述したようなメモリコントローラハブロジック（ＩＭＣ）を含んでもよい。加えて、ＣＬ２０７２、２０８２はＩ／Ｏ制御ロジックも含んでよい。図２１は、メモリ２０４２、２０４４のみがＣＬ２０７２、２０８２に結合されているのではなく、Ｉ／Ｏデバイス２１１４も制御ロジック２０７２、２０８２に結合されていることを示す。レガシーＩ／Ｏデバイス２１１５がチップセット２０９０に結合されている。
【０２０７】
図２２は、本願発明の実施形態に係るＳｏＣ２２００のブロック図を示す。同様の要素には同様の参照符号が付されている。また破線の四角はより高度なＳｏＣの、任意で用いられる特徴を示す。図２２において、インターコネクトユニット２２０２は、１以上のコア２３０２Ａ〜Ｎからなるセットおよび共有キャッシュユニット２３０６を含むアプリケーションプロセッサ２２１０と、システムエージェントユニット２３１０と、バスコントローラユニット２３２１と、集積メモリコントローラユニット２３１４と、集積グラフィックロジック２３０８、スチールカメラ、および／またはビデオカメラ機能を提供するイメージプロセッサ２２２４、ハードウェアオーディオアクセラレーションを提供するオーディオプロセッサ２２２６、および、ビデオエンコード／デコードアクセラレーションを提供するビデオプロセッサ２２２８を含みうる１以上のメディアプロセッサ２２２０からなるセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット２２３０と、ダイレクトメモリメモリアクセス（ＤＭＡ）ユニット２２３２と、１以上の外部ディスプレイに結合されるディスプレイユニット２２４０とに結合されている。
【０２０８】
本明細書で開示するメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにより実施されてもよい。本願発明の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性、および非揮発性のメモリ、および／または記憶要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備えるプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実施されてもよい。
【０２０９】
プログラムコードは、本明細書で開示される機能を実行し、出力情報を生成する入力データに適用されてもよい。出力情報は、公知の方式で、１以上の出力デバイスに適用されてもよい。この適用の目的において、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する何らかのシステムを含む。
【０２１０】
プログラムコードは、処理システムと通信を行う高水準の手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実施されてもよい。またプログラムコードは、所望される場合、アセンブリ言語または機械言語で実施されてもよい。事実、本明細書で開示されるメカニズムは、何らかの特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語、またはインタープリタ型言語であってもよい。
【０２１１】
少なくとも１つの実施形態の１以上の態様は、機械によって読み出されると当該機械に本明細書で開示される技術を実施するロジックを作成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された表現命令によって実施されてもよい。「ＩＰコア」とし知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードされるべく様々な顧客または製造施設に提供されてもよい。
【０２１２】
そのような機械可読媒体には、これらに限定されるわけではないが、機械またはデバイスによって製造または形成される、ハードディスク、フロッピー（登録商標）ディスク、光学式ディスク（コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスクなどを含む他の何らかのタイプのディスク、リードオンリーメモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラム可能リードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、磁気または光学式カード、または、電子命令を格納するのに適した他の何らかのタイプの媒体などの記憶媒体を含む物品の非一時的な有形構造を含みうる。
【０２１３】
したがって、本願発明の実施形態は、本明細書で説明される構造、回路、装置、プロセッサ、および／またはシステム特徴を定めるベクトルフレンドリーな命令フォーマットの命令を保持する、またはＨａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ（ＨＤＬ）などの設計データを保持する非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品とも呼ばれ得る。
【０２１４】
場合によっては、命令コンバータを用いて、ソース命令セットからターゲット命令セットへ命令が変換される。例えば、命令コンバータは、命令をコアによって処理される１以上の他の命令にトランスレートする（スタティックバイナリトランスレーション、ダイナミックコンパイルを含むダイナミックバイナリトランスレーションを用いて）、モーフィングする、エミュレートする、または変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実施されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、または一部がプロセッサ上で一部がプロセッサ外であってもよい。
【０２１５】
図２４は、本願発明の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実施されてもよい。図２４は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ２４１６によりネイティブに実行され得るｘ８６バイナリコード２４０６を生成するべくｘ８６コンパイラ２４０４を用いてコンパイルされている高水準言語２４０２のプログラムを示す（コンパイルされた命令のうちいくつかがベクトルフレンドリーな命令フォーマットであるものと想定されている）。少なくとも１つのｘ８６命令セットコアを備えるプロセッサ２４１６は、（１）Ｉｎｔｅｌｘ８６命令セットコアの命令の実質的な部分、または、（２）少なくとも１つのｘ８６命令セットコアを備えるＩｎｔｅｌプロセッサと実質的に同じ結果を得るべく、少なくとも１つのｘ８６命令セットコアを備えるＩｎｔｅｌプロセッサで実行されることを目的とするアプリケーションのオブジェクトコードバージョンまたは他のソフトウェアに適合して実行する、または処理することにより、少なくとも１つのｘ８６命令セットコアを備えるＩｎｔｅｌプロセッサと実質的に同じ機能を実行出来るプロセッサを表す。ｘ８６コンパイラ２４０４は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ２４１６で追加のリンケージ処理あり、またはなしで実行され得るｘ８６バイナリコード２４０６（例えばオブジェクトコード）を生成するべく動作可能なコンパイラを表す。同様に、図２４は、少なくとも１つのｘ８６命令セットコアを備えないプロセッサ２４１４（例えば、米国カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行するコアを備えるプロセッサ、および／または米国カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを備えるプロセッサなど）によってネイティブに実行され得る代替的な命令セットバイナリコード２４１０を生成するべく、代替的な命令セットコンパイラ２４０８を用いてコンパイルされ得る高水準言語２４０２のプログラムを示す。命令コンバータ２４１２を用いて、ｘ８６命令セットコアを備えないプロセッサ２４１４によってネイティブに実行され得るコードへｘ８６バイナリコード２４０６を変換する。この変換されたコードが、代替的な命令セットバイナリコード２４１０と同じであることは考えられにくい。なぜなら、このことに対応可能な命令コンバータは作成しにくいからである。しかし、変換されたコードは、一般的な動作を実行し、代替的な命令セットからの命令によって構成されているであろう。よって、命令コンバータ２４１２は、エミュレーション、シミュレーション、または他の何らかの処理により、プロセッサ、或いは、ｘ８６命令セットプロセッサまたはコアを有さない他の電子デバイスがｘ８６バイナリコード２４０６を実行することを可能とする、ソフトウェア、ファーム��ェア、ハードウェア、またはこれらの組み合わせを表す。
【０２１６】
本明細書で開示されるベクトルフレンドリーな命令フォーマットの命令の特定の演算は、ハードウェアコンポーネントで実行されてもよく、当該命令をプログラムされた回路または他のハードウェアコンポーネントによるそれらの演算の実行を引き起こす、または少なくともそのような結果をもたらすのに用いられる機械可読命令として実施され得る。回路には、ほんの数例を上げると、汎用プロセッサ、特定用途プロセッサ、またはロジック回路が含まれる。また演算は、場合によっては、ハードウェアとソフトウェアとの組み合わせによって実施されてもよい。実行ロジック、および／またはプロセッサは、命令によって特定される結果オペランドを格納するよう指示する機械命令、または当該機械命令から抽出された１以上の制御信号に応答する特定的な、または特定の回路または他のロジックを含んでもよい。例えば、本明細書で開示される命令の実施形態は、図１４Ａ〜図２２の１以上のシステムで実行されてもよく、ベクトルフレンドリーな命令フォーマットの命令の実施形態は、システムによって実行されるプログラムコードに格納されてもよい。加えて、これら図面の処理要素は、本明細書で詳述されたパイプライン、および／またはアーキテクチャ（例えば、インオーダーアーキテクチャ、およびアウトオブオーダーアーキテクチャ）のうち１つを用いてもよい。例えば、インオーダーアーキテクチャのデコードユニットは、命令をデコードし、デコードされた命令をベクトルユニットまたはスカラユニットに渡すなどしてもよい。
【０２１７】
上記の説明は、本願発明の好ましい実施形態を示すことを目的として提供された。上記の説明から、成長が早くさらなる進歩の予測が容易ではない当技術分野において特に、本願発明は構造に関して、また詳細部分において、当業者によって本願発明の原理から逸脱することなく、添付の請求項およびそれらの同等物の範囲内で本願発明に修正が加えられ得ることは明らかである。例えば、方法の１以上の動作は組み合わせられ得る、またはさらに分割され得る。
【０２１８】
＜代替的な実施形態＞
ベクトルフレンドリーな命令フォーマットがネイティブに実行される実施形態を説明してきたが、代替的な実施形態においては、異なる命令セットを実行する（例えば、米国カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行するプロセッサ、米国カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するプロセッサなどの）プロセッサ上で実行されるエミュレーションレイヤーを介してベクトルフレンドリーな命令フォーマットを実行してもよい。また、図中のフロー図は本願発明の特定の実施形態によって実行される動作の特定の順序を示すが、そのような順序は例示であることが理解されるべきである（例えば、代替的な実施形態においては、それらの動作を異なる順序で実行する、特定の動作を組み合わせる、または特定の動作を同時に行うなど）。
【０２１９】
以上の説明において、説明を目的とし、本願発明の実施形態をよりよく理解いただけるように様々な特定の詳細を示してきた。しかし当業者であれば、それら特定の詳細のいくつかを用いずとも１以上の他の実施形態が実施可能であることを理解されよう。説明された特定の実施形態は、本願発明を限定するのではなく、本願発明の実施形態を例示するべく示されている。本願発明の態様は上記された特定の例によっては定められず、以下の請求項によってのみ定められる。
本実施形態の例を下記の各項目として示す。
［項目１］
コンピュータプロセッサでギャザーストライド命令を実行する方法であって、
デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を含む前記ギャザーストライド命令をフェッチする段階と、
フェッチされた前記ギャザーストライド命令をデコードする段階と、
フェッチされた前記ギャザーストライド命令を実行して、前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからストライドされたデータ要素を前記デスティネーションレジスタに格納する段階と
を備える方法。
［項目２］
前記実行する段階は、
前記ベース値を利用して決定される、前記メモリ内の第１のデータ要素のアドレスを生成する段階と
前記メモリ内の第１のデータ要素に対応している、前記書き込みマスクの第１のマスクビット値が、前記メモリ内の第１のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階と
を含み、
前記メモリ内の第１のデータ要素に対応している、前記書き込みマスクの前記第１のマスクビット値が、前記第１のデータ要素が格納されるべきであることを示していない場合、前記データ要素を、前記デスティネーションレジスタの前記対応する位置に、変更せずに放置して、
前記メモリ内の第１のデータ要素に対応している、前記書き込みマスクの前記第１のマスクビット値が、前記第１のデータ要素が格納されるべきであることを示している場合、前記第１のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第１のマスクビットをクリアして、格納に成功したことを示す、項目１に記載の方法。
［項目３］
前記第１のマスクビット値は、前記書き込みマスクの最下位ビットであり、前記デスティネーションレジスタの前記第１のデータ要素は、前記デスティネーションレジスタの最下位データ要素である、項目２に記載の方法。
［項目４］
前記実行する段階は、
前記メモリ内の第１のデータ要素に対するフォルトがあると判断する段階と、
前記実行する段階を中断する段階と
をさらに含む、項目２または３に記載の方法。
［項目５］
前記実行する段階は、
前記スケール値、ベース値、およびストライド値を利用して決定される、前記メモリ内の第２のデータ要素のアドレスを生成する段階と、
前記メモリ内の第２のデータ要素に対応している、前記書き込みマスクの第２のマスクビット値が、前記メモリ内の第２のデータ要素が、前記デスティネーションレジスタの対応する位置に格納されるべきであることを示しているかを判断する段階と
をさらに含み、
前記メモリ内の第２のデータ要素に対応している、前記書き込みマスクの前記第２のマスクビット値が、前記第２のデータ要素が格納されるべきであることを示していない場合、前記第２のデータ要素を、前記デスティネーションレジスタの前記対応する位置に、変更せずに放置して、
前記メモリ内の第２のデータ要素に対応している、前記書き込みマスクの前記第２のマスクビット値が、前記第２のデータ要素が格納されるべきであることを示している場合、前記第２のデータ要素を、前記デスティネーションレジスタの前記対応する位置に格納して、前記第２のマスクビットをクリアして、格納に成功したことを示し、前記第２のデータ要素は、前記第１のデータ要素からデータ要素Ｘ個分、離れており、Ｘは前記ストライド値である、項目２から４のいずれか一項に記載の方法。
［項目６］
前記デスティネーションレジスタの前記データ要素のサイズは３２ビットであり、前記書き込みマスクは、専用の１６ビットレジスタである、項目１から５のいずれか一項に記載の方法。
［項目７］
前記デスティネーションレジスタの前記データ要素のサイズは６４ビットであり、前記書き込みマスクは１６ビットレジスタであり、前記書き込みマスクの最下位８ビットが、前記メモリのどのデータ要素を前記デスティネーションレジスタに格納すべきかを決定している、項目１から５のいずれか一項に記載の方法。
［項目８］
前記デスティネーションレジスタの前記データ要素のサイズは３２ビットであり、前記書き込みマスクはベクトルレジスタであり、前記書き込みマスクの各データ要素の符号ビットが、マスクビットである、項目１から５のいずれか一項に記載の方法。
［項目９］
前記デスティネーションレジスタ内に格納される、前記メモリ内のデータ要素はすべて、前記デスティネーションレジスタに格納される前にアップコンバージョンされる、項目１から８のいずれか一項に記載の方法。
［項目１０］
コンピュータプロセッサでスキャッタストライド命令を実行する方法であって、
ソースレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリデスティネーションアドレス情報を含む前記スキャッタストライド命令をフェッチする段階と、
前記スキャッタストライド命令をデコードする段階と、
前記スキャッタストライド命令を実行して、前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、前記ソースレジスタからのデータ要素を前記メモリのストライドされた位置に格納する段階と
を備える方法。
［項目１１］
前記実行する段階は、
前記ベース値を利用して決定される、前記メモリ内の第１の位置のアドレスを生成する段階と、
前記書き込みマスクの第１のマスクビット値が、前記ソースレジスタの第１のデータ要素が、前記メモリの、前記第１の位置について生成された前記アドレスに格納されるべきであることを示しているかを判断する段階と
を含み、
前記書き込みマスクの第１のマスクビット値が、前記ソースレジスタの第１のデータ要素が、前記メモリの、前記第１の位置について生成された前記アドレスに格納されるべきであることを示していない場合、前記データ要素を、前記メモリの、前記第１の位置について生成された前記アドレスに、変更せずに放置して、
前記書き込みマスクの第１のマスクビット値が、前記ソースレジスタの第１のデータ要素が、前記メモリの、前記第１の位置について生成された前記アドレスに格納されるべきであることを示している場合、前記ソースレジスタの前記第１のデータ要素を、前記メモリの、前記第１の位置について生成された前記アドレスに格納して、前記第１のマスクビットをクリアして、格納に成功したことを示す、項目１０に記載の方法。
［項目１２］
前記第１のマスクビット値は、前記書き込みマスクの最下位ビットであり、前記第１のデータ要素は、前記ソースレジスタの最下位データ要素である、項目１１に記載の方法。
［項目１３］
前記実行する段階は、
前記スケール値、ベース値、およびストライド値を利用して決定され、前記第１の位置から、Ｘ個のデータ要素分離れた、前記メモリ内の第２の位置のアドレスを生成する段階と、
前記書き込みマスクの第２のマスクビット値が、前記ソースレジスタの第２のデータ要素が、前記メモリの、前記第２の位置について生成された前記アドレスに格納されるべきであることを示しているかを判断する段階と
を含み、
前記書き込みマスクの第２のマスクビット値が、前記ソースレジスタの第２のデータ要素が、前記メモリの、前記第２の位置について生成された前記アドレスに格納されるべきであることを示していない場合、前記データ要素を、前記メモリの、前記第２の位置について生成された前記アドレスに、変更せずに放置して、
前記書き込みマスクの第２のマスクビット値が、前記ソースレジスタの第２のデータ要素が、前記メモリの、前記第２の位置について生成された前記アドレスに格納されるべきであることを示している場合、前記ソースレジスタの前記第２のデータ要素を、前記メモリの、前記第２の位置について生成された前記アドレスに格納して、前記第２のマスクビットをクリアして、格納に成功したことを示し、Ｘは、前記ストライド値である、項目１１または１２に記載の方法。
［項目１４］
前記ソースレジスタの前記データ要素のサイズは３２ビットであり、前記書き込みマスクは、専用の１６ビットレジスタである、項目１０から１３のいずれか一項に記載の方法。
［項目１５］
前記ソースレジスタの前記データ要素のサイズは６４ビットであり、前記書き込みマスクは１６ビットレジスタであり、前記書き込みマスクの最下位８ビットが、前記ソースレジスタのどのデータ要素を前記メモリに格納すべきかを決定している、項目１０から１３のいずれか一項に記載の方法。
［項目１６］
前記ソースレジスタの前記データ要素のサイズは３２ビットであり、前記書き込みマスクはベクトルレジスタであり、前記書き込みマスクの各データ要素の符号ビットが、マスクビットである、項目１０から１３のいずれか一項に記載の方法。
［項目１７］
ハードウェアデコーダと、
実行ロジックと
を備える装置であって、
前記ハードウェアデコーダは、
デスティネーションレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリソースアドレス情報を含むギャザーストライド命令と、
ソースレジスタオペランド、書き込みマスク、ならびに、スケール値、ベース値、およびストライド値を含むメモリデスティネーションアドレス情報を含むスキャッタストライド命令とをデコードして、
前記実行ロジックは、
デコードされた前記ギャザーストライド命令および前記スキャッタストライド命令を実行して、デコードされた前記ギャザーストライド命令の実行により、前記ギャザーストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、メモリからのストライドされたデータ要素が前記デスティネーションレジスタに格納され、デコードされた前記スキャッタストライド命令の実行により、前記スキャッタストライド命令の前記書き込みマスクのビット値の少なくとも一部に基づいて、条件付きで、データ要素が前記メモリのストライドされた位置に格納される、装置。
［項目１８］
前記実行ロジックは、ベクトル実行ロジックを含む、項目１７に記載の装置。
［項目１９］
前記ギャザーストライド命令および前記スキャッタストライド命令の少なくとも一方の前記書き込みマスクは、専用の１６ビットレジスタである、項目１７に記載の装置。
［項目２０］
前記ギャザーストライド命令の前記ソースレジスタは、５１２ビットのベクトルレジスタである、項目１７に記載の装置。
【図１】
0005844882.tif 000004
【図２】
0005844882.tif 000005
【図３】
0005844882.tif 000006
【図４】
0005844882.tif 000007
【図５】
0005844882.tif 000008
【図６】
0005844882.tif 000009
【図７】
0005844882.tif 000010
【図８】
0005844882.tif 000011
【図９】
0005844882.tif 000012
【図１０】
0005844882.tif 000013
【図１１】
0005844882.tif 000014
【図１２】
0005844882.tif 000015
【図１３】
0005844882.tif 000016
【図１４Ａ】
0005844882.tif 000017
【図１４Ｂ】
0005844882.tif 000018
【図１５Ａ】
0005844882.tif 000019
【図１５Ｂ】
0005844882.tif 000020
【図１５Ｃ】
0005844882.tif 000021
【図１６】
0005844882.tif 000022
【図１７Ａ】
0005844882.tif 000023
【図１７Ｂ】
0005844882.tif 000024
【図１８】
0005844882.tif 000025
【図１９】
0005844882.tif 000026
【図２０】
0005844882.tif 000027
【図２１】
0005844882.tif 000028
【図２２】
0005844882.tif 000029
【図２３】
0005844882.tif 000030
【図２４】
0005844882.tif 000031