(57)【特許請求の範囲】
【請求項１】
命令をデコードするデコードユニットであって、前記命令は、少なくとも４つのデータエレメントを含む第１のソースパックドデータオペランドと、少なくとも４つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す、デコードユニットと、
前記デコードユニットに結合される実行ユニットであって、前記命令に応答して、結果パックドデータオペランドを前記デスティネーションストア位置にストアする実行ユニットと、
を備え、
前記結果パックドデータオペランドは、
少なくとも２つのマスクされていない結果データエレメントの組であって、複数の前記マスクされていない結果データエレメントの各々は、前記第１のソースパックドデータオペランドの少なくとも２つの連続データエレメントの異なるものの値を相対的順序でストアする、組と、
複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントであって、前記対応ペアのマスクされていない結果データエレメントのうち、前記結果パックドデータオペランドの第１のエンドに最も近いものと同じ値を有し、前記ソースマスクの複数のマスクされたマスクエレメントに対応する、マスクされた結果データエレメントと、
を有する、プロセッサ。
【請求項２】
前記実行ユニットは、前記第１のエンドと、前記第１のエンドに最も近い前記組の第１のマスクされていない結果データエレメントとの間に、少なくとも１つのマスクされた結果データエレメントの第１のセットを含む前記結果パックドデータオペランドをストアする、請求項１に記載のプロセッサ。
【請求項３】
前記実行ユニットは、前記結果パックドデータオペランドをストアし、前記結果パックドデータオペランドにおいて、前記第１のセットの各マスクされた結果データエレメントは、前記結果パックドデータオペランドがストアされる前の、前記デスティネーションストア位置における最初の値と同じ値を有する、請求項２に記載のプロセッサ。
【請求項４】
前記デコードユニットは、最上位データエレメントを含む第２のソースパックドデータオペランドを示す前記命令をデコードし、前記実行ユニットは、前記結果パックドデータオペランドをストアし、前記結果パックドデータオペランドにおいて、前記第１のセットの各マスクされた結果データエレメントは、前記第２のソースパックドデータオペランドの前記最上位データエレメントと同じ値を有する、請求項２に記載のプロセッサ。
【請求項５】
前記デコードユニットは、最下位データエレメントを含む第２のソースパックドデータオペランドを示す前記命令をデコードし、前記実行ユニットは、前記結果パックドデータオペランドをストアし、前記結果パックドデータオペランドにおいて、前記第１のセットの各マスクされた結果データエレメントは、前記第２のソースパックドデータオペランドの前記最下位データエレメントと同じ値を有する、請求項２に記載のプロセッサ。
【請求項６】
前記実行ユニットは、前記結果パックドデータオペランドの第２のエンドと、前記第２のエンドに最も近い前記組の第２のマスクされていない結果データエレメントとの間に、少なくとも１つのマスクされた結果データエレメントの第２のセットを含む前記結果パックドデータオペランドをストアし、前記第２のセットの各マスクされた結果データエレメントは、前記第２のマスクされていない結果データエレメントと同じ値を有する、請求項１に記載のプロセッサ。
【請求項７】
前記実行ユニットは、前記結果パックドデータオペランドをストアし、前記結果パックドデータオペランドにおいて、前記第１のエンドは最下位エンドを含み、前記連続データエレメントは最下位の連続データエレメントである、請求項１に記載のプロセッサ。
【請求項８】
前記実行ユニットは、前記結果パックドデータオペランドをストアし、前記結果パックドデータオペランドにおいて、前記第１のエンドは最下位エンドを含み、前記連続データエレメントは最上位の連続データエレメントである、請求項１に記載のプロセッサ。
【請求項９】
前記実行ユニットは、前記結果パックドデータオペランドをストアし、前記結果パックドデータオペランドにおいて、前記第１のエンドは最上位エンドを含み、前記連続データエレメントは最下位の連続データエレメントである、請求項１に記載のプロセッサ。
【請求項１０】
前記実行ユニットは、前記結果パックドデータオペランドをストアし、前記結果パックドデータオペランドにおいて、前記第１のエンドは最上位エンドを含み、前記連続データエレメントは最上位の連続データエレメントである、請求項１に記載のプロセッサ。
【請求項１１】
前記ソースマスクは、マスクレジスタにストアされ、前記命令は、前記マスクレジスタをプレディケートオペランドとして示す複数の他の命令を有する命令セットに含まれる、請求項１から１０のいずれか１項に記載のプロセッサ。
【請求項１２】
前記デコードユニットは、メモリの位置において前記第１のソースパックドデータオペランドを示す前記命令をデコードする、請求項１から１０のいずれか１項に記載のプロセッサ。
【請求項１３】
前記実行ユニットは、前記結果パックドデータオペランドをストアし、前記結果パックドデータオペランドにおいて、複数のマスクされていない結果データエレメントの前記最も近い対応ペアの間にある前記全てのマスクされた結果データエレメントが、前記対応ペアの前記マスクされていない結果データエレメントのうち、前記第１のエンドに最も近いものと同じ値を有するという特性は、前記命令のオペコードにおいて黙示される、請求項１から１０のいずれか１項に記載のプロセッサ。
【請求項１４】
命令を受信する段階であって、前記命令は、少なくとも４つのデータエレメントを含む第１のソースパックドデータオペランドと、少なくとも４つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す、段階と、
前記命令に応答して、結果パックドデータオペランドを前記デスティネーションストア位置にストアする段階と、
を備え、
前記結果パックドデータオペランドは、
少なくとも２つのマスクされていない結果データエレメントの組であって、複数の前記マスクされていない結果データエレメントの各々は、前記第１のソースパックドデータオペランドの少なくとも２つの連続データエレメントの異なるものの値を相対的順序でストアする、組と、
複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントであって、前記対応ペアのマスクされていない結果データエレメントのうち、前記結果パックドデータオペランドの第１のエンドに最も近いものと同じ値を有し、前記ソースマスクの複数のマスクされたマスクエレメントに対応する、マスクされた結果データエレメントと、
を含む、プロセッサにおける方法。
【請求項１５】
ストアする段階は、前記第１のエンドと、前記第１のエンドに最も近い前記組の第１のマスクされていない結果データエレメントとの間に、少なくとも２つのマスクされた結果データエレメントの第１のセットを含む前記結果パックドデータオペランドをストアする段階を含み、前記結果パックドデータオペランドをストアする段階は、前記第１のセットの複数の前記マスクされた結果データエレメントの各々の値を変更しない段階を含む、請求項１４に記載の方法。
【請求項１６】
ストアする段階は、前記第１のエンドと、前記第１のエンドに最も近い前記組の第１のマスクされていない結果データエレメントとの間に、少なくとも２つのマスクされた結果データエレメントの第１のセットを含む前記結果パックドデータオペランドをストアする段階を含み、前記第１のセットの複数の前記マスクされた結果データエレメントの各々は、前記命令によって示される第２のソースパックドデータオペランドの最上位データエレメントと同じ値を有する、請求項１４に記載の方法。
【請求項１７】
前記第１のエンドは、最下位エンドを含む、請求項１６に記載の方法。
【請求項１８】
ストアする段階は、前記結果パックドデータオペランドの第２のエンドと、前記第２のエンドに最も近い前記組の第２のマスクされていない結果データエレメントとの間に、少なくとも１つのマスクされた結果データエレメントの第２のセットを含む前記結果パックドデータオペランドをストアする段階を含み、前記第２のセットの各マスクされた結果データエレメントは、前記第２のマスクされていない結果データエレメントと同じ値を有する、請求項１６に記載の方法。
【請求項１９】
ストアする段階は、前記第１のエンドと、前記第１のエンドに最も近い前記組の第１のマスクされていない結果データエレメントとの間に、少なくとも２つのマスクされた結果データエレメントの第１のセットを含む前記結果パックドデータオペランドをストアする段階を含み、前記第１のセットの複数の前記マスクされた結果データエレメントの各々は、前記命令によって示される第２のソースパックドデータオペランドの最下位データエレメントと同じ値を有する、請求項１４に記載の方法。
【請求項２０】
前記第１のエンドは、最上位エンドを含む、請求項１９に記載の方法。
【請求項２１】
ストアする段階は、前記結果パックドデータオペランドをストアする段階を含み、前記結果パックドデータオペランドにおいて、複数のマスクされていない結果データエレメントの所与の最も近いペアの間に、少なくとも３つのマスクされた結果データエレメントが存在する、請求項１４に記載の方法。
【請求項２２】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続に結合され、命令に応答して、結果パックドデータオペランドをデスティネーションストア位置にストアするように動作可能なプロセッサであって、前記命令は、少なくとも４つのデータエレメントを含む第１のソースパックドデータオペランドと、少なくとも４つのマスクエレメントを含むソースマスクと、前記デスティネーションストア位置とを示し、前記結果パックドデータオペランドは、
少なくとも２つのマスクされていない結果データエレメントの組であって、複数の前記マスクされていない結果データエレメントの各々は、前記第１のソースパックドデータオペランドの少なくとも２つの連続データエレメントの異なるものの値を、相対的順序でストアする、組と、
複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントであって、前記対応ペアのマスクされていない結果データエレメントのうち、前記結果パックドデータオペランドの第１のエンドに最も近いものと同じ値を有し、前記ソースマスクの複数のマスクされたマスクエレメントに対応する、マスクされた結果データエレメントと、
を含む、プロセッサと、
前記相互接続に結合され、複数の条件に基づいてインクリメントされるスカラ値に対して複数の計算を実行するループをベクトル化する命令セットをストアするダイナミックランダムアクセスメモリ（ＤＲＡＭ）であって、前記命令セットは、前記プロセッサによって実行された場合に、前記プロセッサに複数のオペレーションを実行させるように動作可能であり、前記複数のオペレーションは、
前記複数の条件を評価することと、
正しいと評価された複数の条件に対して、前記ソースマスクの複数のエレメントをマスクされていない状態にすることと、
誤りと評価された複数の条件に対して、前記ソースマスクの複数のエレメントをマスクされた状態にすることと、
前記結果パックドデータオペランドに対して前記複数の計算を並列に実行することと、
を含む、ＤＲＡＭと、
を備えるシステム。
【請求項２３】
前記プロセッサは、前記第１のエンドと前記第１のエンドに最も近い前記組の第１のマスクされていない結果データエレメントとの間に、少なくとも２つのマスクされた結果データエレメントの第１のセットを含む前記結果パックドデータオペランドをストアし、前記第１のセットの複数の前記マスクされた結果データエレメントの各々は、前記命令によって示される第２のソースパックドデータオペランドの最上位データエレメントと同じ値を有する、請求項２２に記載のシステム。
【請求項２４】
請求項１４から２１のいずれか１項に記載の方法を実行するための手段を備えるプロセッサ。
【請求項２５】
機械によって実行された場合に、請求項１４から２１のいずれか１項に記載の方法を前記機械に実行させるプログラム。
【請求項２６】
請求項２５に記載のプログラムをストアするコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書において説明される実施形態は、概して、プロセッサに関する。詳細には、本明細書において説明される実施形態は、概して、パックドデータに対して操作する命令を実行するプロセッサに関する。
【背景技術】
【０００２】
［背景情報］
多くのプロセッサは、単一命令複数データ（ＳＩＭＤ）アーキテクチャを有する。ＳＩＭＤアーキテクチャにおいて、複数のデータエレメントは、１つのレジスタ又はメモリ位置内において、パックドデータ又はベクトルデータとしてパックされてよい。パックドデータにおいて、レジスタ又は他のストア位置の複数のビットは、論理的に、複数のデータエレメントのシーケンスに分割されてよい。例えば、１２８ビット幅のパックドデータレジスタは、２つの６４ビット幅データエレメント、４つの３２ビットデータエレメント、８つの１６ビットデータエレメント等を有してよい。複数のデータエレメントの各々は、別個に及び／又は他とは独立してオペレーションされ得る別個の個々のデータ要素（例えば、ピクセル色等）を表してよい。
【図面の簡単な説明】
【０００３】
本発明は、以下の説明及び複数の実施形態を示すために用いられる添付図面を参照することによって、最も良く理解されよう。図面は以下のとおりである。
【図１】マスクされた連続ソースエレメントのストア及び伝搬命令の実施形態を実行するように動作可能なプロセッサの実施形態のブロック図である。
【図２】マスクされた連続ソースエレメントのストア及び伝搬命令の実施形態を実行する方法の実施形態のブロックフロー図である。
【図３】マスクされた連続ソースエレメントのストア及び伝搬オペレーションの、複数の最下位のマスクされたエレメントが変化しない実施形態のブロック図である。
【図４】マスクされた連続ソースエレメントのストア及び伝搬オペレーションの、複数の最下位のマスクされたエレメントが最上位エレメントからストアされる実施形態のブロック図である。
【図５】マスクされた連続ソースエレメントの反転及び後方ストア及び伝搬オペレーションの、複数の最上位のマスクされたエレメントが最下位エレメントからストアされる実施形態のブロック図である。
【図６】マスクされた連続ソースエレメントの反転ストア及び伝搬オペレーションの、複数の最上位のマスクされたエレメントが最下位エレメントからストアされる実施形態のブロック図である。
【図７】複数のパックドデータレジスタの好適なセットの実施形態のブロック図である。
【図８】マスクビットの数がパックドデータ幅及びパックドデータエレメント幅に従うことを示す表である。
【図９】複数のパックドデータオペレーションマスクレジスタの好適なセットの実施形態のブロック図である。
【図１０Ａ】本発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びその命令テンプレートを示すブロック図である。
【図１０Ｂ】本発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びその命令テンプレートを示すブロック図である。
【図１１Ａ】本発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。
【図１１Ｂ】本発明の一実施形態に係るフルオペコードフィールドを構成する特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図１１Ｃ】本発明の一実施形態に係るレジスタインデックスフィールドを構成する特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図１１Ｄ】本発明の一実施形態に係る増加オペレーションフィールドを構成する特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図１２】レジスタアーキテクチャの実施形態のブロック図である。
【図１３Ａ】インオーダパイプラインの実施形態及びレジスタリネーミングアウトオブオーダ発行／実行パイプラインの実施形態を示すブロック図である。
【図１３Ｂ】実行エンジンユニットに結合され、かつ実行エンジンユニットと共にメモリユニットに結合されるフロントエンドユニットを含むプロセッサコアの実施形態のブロック図である。
【図１４Ａ】単一のプロセッサコアの実施形態を、そのオンダイ相互接続ネットワークへの接続と、その二次（Ｌ２）キャッシュのローカルサブセットと共に示すブロック図である。
【図１４Ｂ】図１４Ａのプロセッサコアの一部の拡大図の実施形態のブロック図である。
【図１５】１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックを有してよいプロセッサの実施形態のブロック図である。
【図１６】コンピュータアーキテクチャの第１の実施形態のブロック図である。
【図１７】コンピュータアーキテクチャの第２の実施形態のブロック図である。
【図１８】コンピュータアーキテクチャの第３の実施形態のブロック図である。
【図１９】コンピュータアーキテクチャの第４の実施形態のブロック図である。
【図２０】本発明の複数の実施形態に係る、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令コンバータの使用のブロック図である。
【発明を実施するための形態】
【０００４】
本明細書では、プロセッサに、複数の連続ソースエレメントを複数のマスクされていない結果エレメントにストアさせると共に、複数のマスクされた結果エレメントに伝搬させる複数のマスクされた連続ソースエレメントのストア及び伝搬命令と、複数の命令を実行するプロセッサと、複数の命令を処理又は実行する場合にプロセッサによって実行される方法と、複数の命令を処理又は実行する１つ又は複数のプロセッサを組み込むシステムとが開示される。以下の説明において、多くの具体的な詳細が示される（例えば、具体的な命令オペレーション、データフォーマット、プロセッサ構成、マイクロアーキテクチャの詳細、オペレーションのシーケンス等）。しかしながら、複数の実施形態は、これらの具体的な詳細がなくても実施可能である。複数の他の例において、周知の回路、構造及び技術は、説明の理解に対する妨げとなることを回避すべく、詳細には示されていない。
【０００５】
図１は、マスクされた連続ソースエレメントのストア及び伝搬命令１０２の実施形態を実行するように動作可能なプロセッサ１００の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、（例えば、デスクトップ、ラップトップ、又は他のコンピュータにおいて多く用いられるタイプの）汎用プロセッサであってよい。あるいは、プロセッサは、特定用途向けプロセッサであってよい。好適な特定用途向けプロセッサの例は、限定されるものではないが、いくつか例を挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、及びコントローラ（例えばマイクロコントローラ）を含む。プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、これらの様々なハイブリッドのいずれかであってよく、又はこのような命令セットの（例えば、異なるコアにおける）組み合わせを実装してよい。
【０００６】
オペレーションの間、プロセッサ１００は、マスクされた連続ソースエレメントのストア及び伝搬命令１０２の実施形態を受信してよい。例えば、命令は、命令フェッチユニット、命令キュー等から受信されてよい。命令は、マクロ命令、アセンブリ言語命令、機械コード命令、又はプロセッサの命令セットの他の命令もしくは制御信号を表してよい。いくつかの実施形態において、命令は、複数の（例えば、少なくとも４つの）データエレメントを有する第１のソースパックドデータオペランド１１０を（例えば、１つ又は複数のフィールド又は複数のビットのセットを介して）明示的に指定し又は他の方法で示し（例えば、黙示的に示し）てよく、又は、複数の（例えば少なくとも４つの）マスクエレメントを含むソースマスク１１６（例えばパックドデータオペレーションマスクレジスタ１１８）を指定し又は他の方法で示してよく、結果パックドデータオペランド１１４がストアされ得るデスティネーションストア位置を指定し又は他の方法で示してよい。いくつかの実施形態において、命令は、任意に、１つ又は複数の極値（例えば、最上位又は最下位の）マスクされた結果データエレメントのために用いられる少なくとも１つの値（例えば、図４−６参照）を有する第２のソース（例えばパックドデータ）オペランド１１２をさらに指定し又は他の方法で示してよいが、これは必須ではない。
【０００７】
再び図１を参照すると、プロセッサは、デコードユニット又はデコーダ１０４を含む。デコードユニットは、マスクされた連続ソースエレメントのストア及び伝搬命令１０２を受信及びデコードしてよい。デコードユニットは、１つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコードされた命令又は制御信号、又は命令１０２を反映し、表し、及び／又はこれから得られる相対的に下位レベルの他の命令又は制御信号を出力してよい。１つ又は複数の下位レベル命令又は制御信号は、１つ又は複数の下位（例えば回路レベル又はハードウェアレベル）オペレーションを介して、上位命令１０２を実装してよい。デコードユニットは、限定されるものではないが、マイクロコードリードオンリメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、及び当技術分野において公知の他のメカニズムを含む様々な異なるメカニズムを用いて実装されてよい。
【０００８】
いくつかの実施形態において、直接デコードユニットに提供される命令１０２の代わりに、命令エミュレータ、トランスレータ、モーファ、インタプリタ、又は他の命令変換モジュールが任意に用いられてよい。様々な異なるタイプの命令変換モジュールが当技術分野において公知であり、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせにおいて実装されてよい。いくつかの実施形態において、命令変換モジュールは、例えば、別個のダイ上及び／又はメモリ（例えば、スタティック、ダイナミック、又はランタイム命令エミュレートモジュール）内のような、命令処理プロセッサの外部に配置されてよい。例として、命令変換モジュールは、第１の命令セットに含まれ得る命令１０２を受信してよく、命令１０２をエミュレート、トランスレート、モーフィング、解釈、又は他の方法で変換し、第２の異なる命令セットに含まれ得る１つ又は複数の対応もしくは派生中間命令又は制御信号にしてよい。第２の命令セットの１つ又は複数の中間命令又は制御信号は、デコードユニット（例えばデコードユニット１０４）に提供されてよい。デコードユニットは、受信された第２の命令セットの１つ又は複数の命令又は制御信号を、プロセッサ（例えば１つ又は複数の実行ユニット）のネイティブハードウェアによって実行可能な１つ又は複数の下位レベル命令又は制御信号にデコードしてよい。
【０００９】
プロセッサは、パックドデータレジスタ１０８のセットをさらに含む。複数のパックドデータレジスタの各々は、パックドデータ、ベクトルデータ、又はＳＩＭＤデータをストアするように動作可能なオンダイのストア位置を表してよい。パックドデータレジスタは、アーキテクチャ的に可視なレジスタ（例えばアーキテクチャレジスタファイル）を表してよい。アーキテクチャ的に可視なアーキテクチャレジスタは、ソフトウェア及び／又はプログラマに可視であり、及び／又は、複数のオペランドを特定するプロセッサの命令セットの複数の命令によって示される、複数のレジスタである。これらのアーキテクチャレジスタは、所与のマイクロアーキテクチャ（例えば、一時的レジスタ、リオーダバッファ、リタイアメントレジスタ等）において、他のアーキテクチャ的ではない又はアーキテクチャ的に不可視なレジスタと対比される。パックドデータレジスタは、周知技術を用いて、異なる態様で、異なるマイクロアーキテクチャにおいて実装されてよく、いかなる特定のタイプの回路に限定されるものではない。様々な異なるタイプのレジスタが適している。レジスタの好適なタイプの例は、限定されるものではないが、専用物理レジスタ、レジスタリネーミングを用いる動的割り当て物理レジスタ、及びこれらの組み合わせを含む。
【００１０】
いくつかの実施形態において、第１のソースパックドデータオペランド１１０は、任意に、第１のパックドデータレジスタにストアされてよく、任意の第２のソースパックドデータオペランド１１２は、第２のパックドデータレジスタにストアされてよい。あるいは、複数のメモリ位置、又は複数の他のストア位置が、これらのオペランドの１つ又は複数のために用いられてよい。いくつかの実施形態において、デスティネーションストア位置は、パックドデータレジスタであってもよい。いくつかの場合において、デスティネーションストア位置として用いられるパックドデータレジスタは、第１のソースパックドデータオペランド及び第２のソースオペランドのために用いられる複数のパックドデータレジスタと異なってよい。複数の他の場合には、複数のソースパックドデータオペランドの１つのために用いられるパックドデータレジスタは、デスティネーションストア位置として再利用されてよい（例えば、結果パックドデータオペランド１１４は、ソースパックドデータオペランド１１０又は１１２の１つに書き込まれてよい）。あるいは、メモリ又は複数の他のストア位置は、任意に、デスティネーションストア位置のために用いられてよい。
【００１１】
再び図１を参照すると、実行ユニット１０６は、デコードユニット１０４、第１のソースパックドデータオペランド１１０、（用いられる場合には）任意の第２のソースオペランド１１２、及びソースマスク１１６に結合される。例えば、実行ユニットは、パックドデータレジスタ１０８及びパックドデータオペレーションマスクレジスタ１１８に結合されてよい。例として、実行ユニットは、論理又はデータ操作オペレーション等を実行する算術ロジックユニット、ロジックユニット、デジタル回路を含んでよい。実行ユニットは、１つ又は複数のデコードされた又は他の方法で変換された命令又は制御信号を受信してよく、これらは、マスクされた連続ソースエレメントのストア及び伝搬命令１０２を表す、及び／又はこれらから得られる。実行ユニットは、第１のソースパックドデータオペランド１１０、ソースマスク１１６をさらに受信してよく、いくつかの実施形態において、全てが命令１０２によって指定され又は他の方法で示される任意の第２のソースオペランド１１２もさらに受信してよい。
【００１２】
いくつかの実施形態において、実行ユニットは、ソースマスク１１６をマスク又は制御オペランドとして用いて、どのようにデータエレメントが第１のソースパックドデータオペランド１１０から結果パックドデータオペランド１１４にストアされるかをマスク又は制御してよい。ソースマスクは、複数のマスクエレメント又は制御エレメントを含んでよい。いくつかの実施形態において、複数のマスクエレメントは、結果パックドデータオペランドの複数の対応結果データエレメントと１対１対応で含まれてよく、これにより、マスク又は制御が、各結果データエレメントに対して別個に及び／又は他とは独立して提供されてよい。いくつかの実施形態において、各マスクエレメントは、単一のマスクビットであってよいが、本発明の範囲はこれに限定されない。このような場合、ソースマスクは、各結果データエレメントに対してマスクビットを有してよい。いくつかの実施形態において、各マスクビット又は他のマスクエレメントの値は、第１のソースパックドデータオペランド１１０からの次の連続データエレメントが結果パックドデータオペランド１１４における対応結果データエレメントにストアされるか否かをマスク又は制御してよい。例えば、各マスクビット又はエレメントは、マスクされていない値（例えば、バイナリの１（すなわち、１）にセットされる）を有し、第１のソースパックドデータオペランド１１０における次の連続ソースデータエレメントを、対応するマスクされていない結果データエレメントにストアさせてよい。又は、各マスクビットは、マスクされた値（例えば、バイナリのゼロ（すなわち、０）にクリアされる）を有し、（例えば、最も近いマスクされていない結果データエレメントの）他の値が対応するマスクされた結果データエレメントに伝搬又は他の方法でストアされるようにしてよい。他の実施形態において、２つ又はそれより多くのビットは、任意に、各マスクエレメントのために用いられてよい。例えば、各マスクエレメントは、各対応ソースデータエレメントと同数のビットを有してよく、最下位ビット又は最上位ビットは、単一のマスクビットとして用いられてよい。
【００１３】
実行ユニットは、命令１０２に応答して及び／又はその結果として（例えば、当該命令からデコードされた１つ又は複数の命令又は制御信号に応答して）、結果パックドデータオペランド１１４を当該命令によって示されるデスティネーションストア位置にストアするように動作可能であってよい。いくつかの実施形態において、結果パックドデータオペランドは、少なくとも２つのマスクされていない結果データエレメントの組を含んでよい。複数のマスクされていない結果データエレメントの組は、結果パックドデータオペランドの第１のエンド（例えば、最下位又は最も有意性の低いエンド又はビット位置）と第２のエンド（例えば、最上位又は最も有意性の高いエンド又はビット位置）との間にあってよい。複数のマスクされていない結果データエレメントの各々は、ソースマスク１１６の（例えば、マスクされたマスクエレメントと対照的に）異なる対応するマスクされていないマスクエレメントに対応してよい。当該組の少なくとも２つのマスクされていない結果データエレメントの各々は、第１のソースパックドデータオペランド１１０の少なくとも２つの連続データエレメントの異なるものの値を、同じ相対的順序でストアしてよい。いくつかの実施形態において、第１のソースパックドデータオペランドの複数の連続又は近接データエレメントは、ソースマスクの複数のマスクされていないエレメントに対応する結果パックドデータオペランドにおける複数の非連続又は潜在的に疎なマスクされていないデータエレメント位置の組に拡張されてよい。ソースマスクの複数のマスクされていないエレメントは、第１のソースパックドデータオペランドの昇順の連続データエレメントによって置換される複数の対応するマスクされていない結果データエレメント位置を選択してよい。複数の連続ソースデータエレメントにおける複数の値の相対的順序（例えば、同じ順序又は反転順序）は、複数のマスクされていない結果データエレメントの組において維持されてよい。例えば、当該組の最下位のマスクされていない結果データエレメントは、少なくとも２つの連続データエレメントの最下位データエレメントの値をストアしてよく、当該組の次の最下位のマスクされていない結果データエレメントは、少なくとも２つの連続データエレメントの次の最下位データエレメントの値をストアしてよい、等である。いくつかの例において、このようなマスクされていない結果データエレメントの少なくとも３つ、又は３つより多くが存在してよいが、これは必須ではない。
【００１４】
いくつかの実施形態において、結果パックドデータオペランドは、少なくとも１つの、又は複数のマスクされた結果データエレメントをさらに含んでよい。複数のマスクされた結果データエレメントは、ソースマスクの（例えば、マスクされていないマスクエレメントと対照的に）マスクされたマスクエレメントに対応してよい。いくつかの実施形態において、複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアの複数のマスクされていない結果データエレメントの１つと同じ値を有してよい。いくつかの実施形態において、複数の最も近いマスクされていない結果データエレメントのペアの間にある全てのマスクされた結果データエレメントは、結果パックドデータオペランドの第１のエンド（例えば、最下位又は最も有意性の低いビット位置又はエンド）に最も近いペアのマスクされていない結果データエレメントと同じ値を有してよい。いくつかの実施形態において、マスクされていない結果データエレメントの値は、それ自体と次の連続するマスクされていない結果データエレメントとの間にある、これらの隣接するマスクされた結果データエレメントの全てに伝搬され、又は他の方法でストアされてよい。有利には、複数のマスクされた結果データエレメントをゼロにする又は変化しない状態で残すことは、必須ではない。いくつかの実施形態において、結果パックドデータオペランドは、任意に、図３−６のいずれかについて図示及び説明されるもののいずれであってよいが、本発明の範囲はこれに限定されない。
【００１５】
いくつかの実施形態において、前述された結果パックドデータオペランドの特性（例えばマスクされていない結果データエレメントの値を隣接するマスクされたデータエレメントに伝播又は他の方法でストアする）は、命令に固定的又は黙示的であってよい（例えば、命令のオペコード及び／又は命令のタイプに対して固定的又は黙示的であってよい）。すなわち、このような特性は、例えば、このような特性を固定又は黙示しないタイプ又はオペコードのフルシャッフル又は再配列命令のような非常に柔軟な命令と共に、明示的な仕様又は制御を介することによって（例えば、制御オペランドを形成することによって）実現される必要はない。
【００１６】
有利には、いくつかの実施形態において、マスクされた連続ソースエレメントのストア及び伝搬命令は、プロセッサに、複数の連続ソースデータエレメントを複数のマスクされていない結果データエレメントの組にストアさせ、複数のソースデータエレメントを、複数のマスクされていない結果データエレメントの間にある複数の隣接するマスクされた結果データエレメントに伝搬又は他の方法でストアさせるように動作してよい。複数のソースデータエレメントを複数のマスクされた結果データエレメントに伝搬又は他の方法でストアする能力は、特定の実装において有用及び／又は有益であってよい。例えば、これは、命令が、ある条件下でインクリメントされるスカラ値に対する複数のループ及び計算を実装するために用いられる場合に該当してよい。他の例として、これは、複数の条件が満たされない場合であって、なおかつ変数の値が同じ状態を保つ場合、及び次の条件が満たされる場合であって、なおかつ次の連続データエレメントの値にのみ変更される場合に該当してよい。
【００１７】
実行ユニット及び／又はプロセッサは、命令１０２に応答して及び／又はその結果として、命令１０２を実行する及び／又は結果をストアするように動作可能な、固有又は特定のロジック（例えば、トランジスタ、集積回路、又はファームウェア（例えば、不揮発性メモリにストアされた命令）及び／又はソフトウェアと潜在的に組み合わせられる他のハードウェア）を含んでよい。
【００１８】
説明の妨げとなることを回避すべく、相対的に簡単なプロセッサが図示及び説明されている。複数の他の実施形態において、プロセッサは、任意に、複数の他の周知のプロセッサコンポーネントを含んでよい。複数の実施形態は、複数のコアを有するプロセッサ、論理プロセッサ、又は実行エンジンに含まれてよく、これらの少なくとも１つは、本明細書で開示される命令の実施形態を実行するデコードユニット及び実行ユニットを有する。
【００１９】
図２は、マスクされた連続ソースエレメントのストア及び伝搬命令の実施形態を実行する方法２２０の実施形態のブロックフロー図である。様々な実施形態において、方法は、プロセッサ、命令処理装置、又は他のデジタルロジック装置によって実行されてよい。いくつかの実施形態において、図２の方法は、図１のプロセッサによって及び／又はその内部で実行されてよい。図１のプロセッサについて本明細書で説明される複数のコンポーネント、特徴、及び具体的かつ任意の詳細は、任意に、図２の方法にさらに適用される。あるいは、図２の方法は、同様の又は異なるプロセッサ又は装置によって及び／又はその内部で実行されてよい。さらに、図１のプロセッサは、図２のものと同じ、同様の、又は異なる複数の方法を実行してよい。
【００２０】
方法は、ブロック２２１において、マスクされた連続ソースエレメントのストア及び伝搬命令を受信する段階を含む。様々な態様において、命令は、プロセッサ又はその一部（例えば、命令フェッチユニット、デコードユニット、バスインタフェースユニット等）において受信されてよい。様々な態様において、命令は、オフダイソースから（例えば、メモリ、相互接続等から）、又はオンダイソースから（例えば、命令キャッシュ、命令キュー等から）受信されてよい。命令は、第１の複数の（例えば、少なくとも４つの）データエレメントを含む第１のソースパックドデータオペランドを指定し又は他の方法で示してよく、複数の（例えば、少なくとも４つの）マスクエレメントを含むソースマスクを指定し又は他の方法で示してよく、デスティネーションストア位置を指定し又は他の方法で示してよい。
【００２１】
方法は、ブロック２２２において、命令に応答して及び／又はその結果として、デスティネーションストア位置に結果パックドデータオペランドをストアする段階を含む。典型的には、実行ユニットは、命令を実行し、結果をストアしてよい。いくつかの実施形態において、結果パックドデータオペランドは、少なくとも２つのマスクされていない結果データエレメントの組を含んでよい。複数のマスクされていない結果データエレメントの各々は、第１のソースパックドデータオペランドの少なくとも２つの連続データエレメントの異なるものの値を、相対的順序（例えば、同じ順序又は反転順序）でストアしてよい。いくつかの実施形態において、結果パックドデータオペランドは、複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントをさらに含んでよく、これらは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第１のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応してよい。いくつかの実施形態において、結果パックドデータオペランドは、図３−６のいずれかについて図示及び説明される複数の特性のいずれかを有してよいが、本発明の範囲はこれに限定されない。
【００２２】
図示された方法は、複数のアーキテクチャオペレーション（例えば、ソフトウェアの観点から可視なもの）を含む。複数の他の実施形態において、方法は、任意に、１つ又は複数のマイクロアーキテクチャオペレーションを含んでよい。例えば、命令は、アウトオブオーダでフェッチ、デコード、スケジューリングされてよく、複数のソースオペランドは、アクセスされてよく、実行ユニットは、命令を実装する複数のマイクロアーキテクチャオペレーションを実行してよい、等である。いくつかの実施形態において、命令を実装する複数のマイクロアーキテクチャオペレーションは、任意に、マスクビットの値を評価することと、複数の連続ソースデータエレメントを、複数のマスクされていない結果データエレメントの組に多重化する又は他の方法で移動させる又は再構成すること、複数のソースデータエレメントを１つ又は複数のマスクされた結果データエレメントに伝播すること等を含んでよい。
【００２３】
図３は、命令の実施形態に応答して実行可能なマスクされた連続ソースエレメントのストア及び伝搬オペレーション３３０の、複数の最下位のマスクされたエレメントが変化しない実施形態を示すブロック図である。本実施形態において、最も有意性の低いマスクされていない結果データエレメント（例えば、図示された例においては位置３のＡ０）に先行するゼロ又はそれより多く（例えば、図示された例においては３つ）の最下位のマスクされた結果データエレメント３３２のセットは、変化しない状態にされる（例えば、デスティネーションストア位置における初期値又は開始値が変更されなくてよい）。図において、結果パックドデータオペランドの最も有意性の低い又は最下位エンドもしくはビット位置３３１は、向かって右に示され、最も有意性の高い又は最上位エンドもしくはビット位置３３３は、向かって左に示される。
【００２４】
命令は、第１の複数の（例えば、少なくとも４つの）パックドデータエレメントを有し得る第１のソースパックドデータオペランド３１０を指定し（例えば、明示的に指定し）又は他の方法で示し（例えば、黙示的に示し）てよい。図示された実施形態において、第１のソースパックドオペランドデータは、８つのデータエレメントＡ０からＡ７を有するが、本発明の範囲はこれに限定されない。複数の他の実施形態において、第１のソースパックドデータオペランドは、異なる数のデータエレメント、例えば、第１のソースパックドデータオペランドのビットサイズを各データエレメントのビットサイズで除算したものに等しい数を有してよい。図示された実施形態において、連続データエレメント３３５の最下位セットは、最下位データエレメント（Ａ０）を位置０に含み、次の最下位データエレメント（Ａ１）を位置１に含む。様々な実施形態において、第１のソースパックドデータオペランドの幅は、６４ビット、１２８ビット、２５６ビット、５１２ビット、又は１０２４ビットであってよいが、本発明の範囲はこれに限定されない。様々な実施形態において、各パックドデータエレメントの幅は、８ビット、１６ビット、３２ビット、又は６４ビットであってよいが、本発明の範囲はこれに限定されない。いくつかの実施形態において、第１のソースパックドデータオペランドは、パックドデータレジスタにストアされてよい。複数の他の実施形態において、第１のソースパックドデータオペランドは、任意に、メモリ位置にストアされてよく、これは、複数のソースデータエレメントが、最初にこれらをパックドデータレジスタにロードする必要なく、メモリ位置から結果パックドデータオペランドに直接ストアされることを可能にしてよい。
【００２５】
命令は、ソースマスク３１６を指定し又は他の方法で示してもよい。ソースマスクは、複数のマスクエレメントを含んでよい。例えば、ソースマスクは、結果パックドデータオペランド３１４における結果データエレメントの数と同数のマスクエレメントを含んでよい。図示された実施形態において、ソースマスクは、８つのマスクエレメントを有する。各マスクエレメントは、複数のオペランド内の同じ相対的位置にある結果パックドデータオペランドの複数の結果データエレメントの１つに対応してよい。示されるように、いくつかの実施形態において、各マスクエレメントは、単一のマスクビットであってよいが、本発明の範囲はこれに限定されない。図示された実施形態において用いられる指定に従って、バイナリのゼロ値（すなわち、０）にクリアされたマスクエレメントは、マスクアウト又はマスクされたマスクエレメントを表し、バイナリの１値（すなわち、１）にセットされたマスクエレメントは、マスクされていないマスクエレメントを表す。逆の指定も可能である。特定の図示された例において、８つのマスクビットは、（左の）最上位位置から（右の）最下位ビット位置に向かって、バイナリ値０、１、０、０、１、０、０、０を有する。これらは、値の例に過ぎない。いくつかの実施形態において、ソースマスクは、パックドデータオペレーションマスクレジスタにストアされてよい。いくつかの実施形態において、命令セットの複数の他の命令は、マスクレジスタを示し（例えば、指定する複数のビット又はフィールドを有し）てよく、マスクレジスタ及び／又は内部にストアされたマスクをプレディケートオペランドとして用い、及び／又はパックドデータオペレーションをプレディケートしてよい。
【００２６】
結果パックドデータオペランド３１４は、命令の実施形態に応答して及び／又はその結果として、デスティネーションストア位置において（例えば、実行ユニット３０６によって）生成及びストアされてよい。様々な実施形態において、デスティネーションストア位置は、パックドデータレジスタ、メモリ位置、又は他のストア位置であってよい。結果パックドデータオペランドは、複数の（例えば、任意に少なくとも４つの）結果データエレメントを含んでよい。例えば、結果パックドデータは、第１のソースパックドデータオペランドのデータエレメントの数と同数の結果データエレメント、及び／又はソースマスクの同数のマスクエレメントを含んでよい。図示された実施形態において、結果パックドデータは、８つの結果データエレメントを有するが、本発明の範囲はこれに限定されない。各結果データエレメントは、複数のオペランド内の同じ相対的位置にあるソースマスクの異なるマスクエレメントに対応してよい。
【００２７】
８つの結果データエレメントは、（右の）最下位エンド又はビット位置３３１から（左の）最上位エンド又はビット位置３３３へと移動する場合に、データエレメント位置０から７を占める。図示された例において、位置３の結果データエレメント（Ａ０）は、マスクされていないマスクエレメントに対応する（例えば、位置３の対応するマスクエレメントは、バイナリの１値を有する）。また、位置３の結果データエレメント（Ａ０）は、最下位のマスクされていない結果データエレメントであり、及び／又は、最下位エンド又はビット位置３３１に最も近いマスクされていない結果データエレメントである。図示された例において、位置０から２にある最下位３つ（最も右）の結果データエレメントは、各々、マスクアウトされたマスクエレメントに対応する（例えば、位置０から２の対応するマスクエレメントは、バイナリのゼロ値を有する）。位置０から２にある最下位３つのマスクされた結果データエレメントのこのセットは、最下位エンド又はビット位置３３１と、位置３にある最下位のマスクされていない結果データエレメント（Ａ０）との間にある。３３２において示されるように、本実施形態において、最も有意性の低いマスクされていない結果データエレメントに先行する複数の最下位のマスクされた結果データエレメントのこのセットにおける結果データエレメントの全ては、変化しない状態にされてよい。例えば、デスティネーションストア位置（例えばレジスタ）の初期又は開始データエレメントは、オペレーション／命令によって変化しない状態にされ、及び／又は更新されない状態にされてよい。例として、デスティネーションストア位置は、最初に、データエレメントＲ０からＲ２を最下位３つのデータエレメント位置にストアしてよい。オペレーション／命令の後で、データエレメントＲ０からＲ２は、デスティネーションストア位置及び／又は結果パックドデータオペランドの最下位３つのデータエレメント位置にストアされた状態を保ってよい。
【００２８】
いくつかの実施形態において、第１のソースパックドデータオペランドの連続データエレメント３３５のセットの最下位データエレメントは、最下位のマスクされていない結果データエレメントにストアされてよい。例えば、位置０からのデータエレメント（Ａ０）の値は、結果パックドデータオペランドにおいて、位置３のマスクされていない結果データエレメントにストアされてよい。ソースマスクの位置３にある最下位のマスクされていないマスクエレメントは、結果パックドデータオペランドの位置３にある対応最下位のマスクされていない結果データエレメントを、第１のソースパックドデータオペランドからの最下位ソースデータエレメント（例えばＡ０）に適したストア位置として選択してよい。
【００２９】
位置４及び５にある結果データエレメントは、（例えば、値０を有する）マスクアウトされたマスクエレメントに対応するマスクされた結果データエレメントである。いくつかの実施形態において、３３４において示されるように、最も近い下位のマスクされていない結果データエレメントの値（この場合、位置３のデータエレメントＡ０）は、これを含まないが、次に上位のマスクされていない結果データエレメント（例えば、位置６のデータエレメントＡ１）まで、位置４及び５にあるこれらの上位のマスクされた結果データエレメントの各々に伝搬され、又は他の方法でストアされてよい。すなわち、いくつかの実施形態において、最も近い下位のマスクされていない結果データエレメントの値は、ゼロ又はそれより多くの上位のマスクされた結果データエレメントのセットにストアされてよい。矢印３３７は、ストア又は伝搬の方向が、ビットの有意性又は順序が上昇する方向であってよいことを示す。
【００３０】
位置６の結果データエレメントは、マスクされていない結果データエレメントである。いくつかの実施形態において、第１のソースパックドデータオペランドの連続データエレメント３３５のセットの次に上位のデータエレメントは、位置６のマスクされていない結果データエレメントにストアされてよい。例えば、示されるように、第１のソースパックドデータオペランドの位置１にあるデータエレメント（Ａ１）の値は、位置６のマスクされていない結果データエレメントにストアされてよい。位置１のソースデータエレメント（Ａ１）は、位置０のソースデータエレメント（Ａ０）の後、次に上位の連続ソースデータエレメントである。ソースマスクの位置６にあるマスクされていないマスクエレメントは、位置６の対応するマスクされていない結果データエレメントを次の連続ソースデータエレメント（例えばＡ１）のストア位置として選択してよい。
【００３１】
位置７にある次の最上位結果データエレメントは、マスクされた結果データエレメントである。いくつかの実施形態において、３３６において示されるように、最も近い下位のマスクされていない結果データエレメント（この例では、位置６のデータエレメントＡ１）の値は、位置７にある最上位のマスクされた結果データエレメントに伝搬され又は他の方法でストアされてよい。位置７のマスクされた結果データエレメントは、最上位エンド又はビット位置３３３と、最上位エンド又はビット位置に最も近いマスクされていない結果データエレメント（例えば位置６のＡ１）との間にある、ゼロ又はそれより多くのマスクされた結果データエレメント（例えばこの例では、単一のマスクされた結果データエレメント）のセットを表す。示されるように、いくつかの実施形態において、第１のソースパックドデータオペランド３１０の複数の連続又は近接データエレメント３３５のセットは、ソースマスク３１６の複数の対応するマスクされていないエレメントによって選択される結果パックドデータオペランド３１４の潜在的に非連続又は疎なマスクされていない結果データエレメントの組に「拡張」されてよい。ソースマスク３１６の複数のマスクされていないエレメントは、第１のソースパックドデータオペランド３１０の近接する昇順の連続データエレメント３３５によって置換される複数の対応するマスクされていない結果データエレメントを選択してよい。さらに、複数の最も近い下位のマスクされていない結果データエレメントの値は、複数の隣接上位のマスクされた結果データエレメントに伝搬され、又は他の方法でストアされてよい。有利には、オペレーション及び／又は命令は、これらのマスクされた結果データエレメントをゼロにすること、又はこれらを変化しない状態のままにすることに限定されるものではなく、むしろ、先行する複数のマスクされていない結果データエレメントの値は、内部に伝搬され、又は他の方法でストアされてよい。
【００３２】
命令は、複数の連続又は近接ソースデータエレメントを、同じサイズの結果パックドデータオペランドの潜在的に非連続な複数のマスクされていない結果データエレメントの組にストアするので、全てのソースデータエレメントは、結果パックドデータオペランド以下の大きさの単一のソースパックドデータオペランド内に含まれてよいことに留意されたい。これは、複数のソースデータエレメントの全てがメモリからの単一ロードオペレーションでロードされることを可能としてよい。対照的に、集合タイプのオペレーションは、潜在的に異なるセグメント、メモリページ等にあり得る複数の非連続メモリ位置から、複数のデータエレメントを集める。
【００３３】
このような集合タイプのオペレーションにより、ページフォルトが発生する傾向又はリスクがより大きく、これらのフォルトを処理する実装オーバヘッドを伴う傾向がある。しかしながら、いくつかの実施形態において、全てのソースデータエレメントは単一ソースパックドデータオペランド内に含まれてよいので、このようなページフォルトは、本明細書において開示される複数の命令の実施形態にとっては問題とはならないことがある。
【００３４】
マスクされた連続ソースエレメントのストア及び伝搬命令の特定の実施形態の例のためのＶＥＸＰＡＮＤＰＲＯＰという名称の疑似コードが、以下列挙される。疑似コードにおいて、ＭＡＳＫはソースマスク（例えばソースマスク３１６）である。ＳＲＣは、デスティネーションにストア又は伝搬される複数の連続エレメントを有するソースパックドデータオペランド（例えばオペランド３１０）である。ＤＳＴは、結果パックドデータオペランド（例えばオペランド３１４）をストア可能なデスティネーションである。様々な実施形態において、ＳＲＣ及びＤＳＴの各々は、１２８ビット（例えばｘｍｍレジスタ）、２５６ビット（例えばｙｍｍレジスタ）、又は５１２ビット（例えばｚｍｍレジスタ）であってよいが、本発明の範囲はこれに限定されない。複数の代替的な実施形態において、他のサイズのレジスタが用いられてよく、及び／又は、複数のソースオペランドの１つ又は複数は、パックドデータレジスタの代わりに、メモリ位置又は他のストア位置からとられてよい。さらに、他の実施形態において、ソースオペランドは、任意にかつ黙示的に、デスティネーションオペランドとして再利用されてよい。疑似コードにおいて、「ｉ」は、複数のオペランド内の位置カウンタであり、「ｉ＋＋」は、「ｉ」のインクリメント（すなわち、ｉ＝ｉ＋１）を意味し、「ｎ」は、インクリメントされる変数であり、「ｎ＋＋」は、「ｎ」のインクリメント（すなわち、ｎ＝ｎ＋１）を意味し、ＶＬは、ＳＲＣ内のデータエレメントの数である。データは、いくつかの例を挙げると、バイト、ワード、ダブルワード、クワッドワード、単精度又は倍精度であってよい。
【数１】
0006374975.tif 000002
【００３５】
この疑似コードは、本実施形態の命令について、第１のマスクされていないエレメントに先行するＤＳＴにおける複数のマスクされた結果データエレメントの最下位セットが、ＤＳＴにおいて変化しない状態にされてよいことを示す。また、パラメータｎはゼロで始まり、マスクされていないマスクエレメントに直面する度に１だけインクリメントされるので、パラメータｎは、複数のマスクされていない結果データエレメントの組にストアされる連続最下位データエレメントを、ＳＲＣ（例えばＳＲＣ［ｎ］）から選択する。また、ｎの値は複数のマスクされたマスクエレメントに対してインクリメントされないので、複数の下位のマスクされていない結果エレメントの値は、複数の上位のマスクされた結果エレメントにストアされてよい。
【００３６】
図４は、命令の実施形態に応答して実行可能なマスクされた連続ソースエレメントのストア及び伝搬オペレーション４４０の、複数の最下位のマスクされたエレメントが最上位エレメントからストアされる実施形態を示すブロック図である。本実施形態において、オペレーションは、第２のソースパックドデータオペランド４１２の最上位データエレメントの値（例えばＸ７）を、結果パックドデータオペランド４１４のゼロ又はそれより多くの（例えば、図示された例においては、任意に３つの）最下位のマスクされた結果データエレメント４３２のセットにストアする。図において、結果パックドデータオペランドの最も有意性の低いもしくは最下位エンド又はビット位置４３１は、向かって右に示され、結果パックドデータオペランドの最も有意性の高いもしくは最上位エンド又はビット位置４３３は、向かって左に示される。
【００３７】
命令は、第１のソースパックドデータオペランド４１０を指定し又は他の方法で示してよく、ソースマスク４１６を指定し又は他の方法で示してよい。第１のソースパックドデータオペランド及びソースマスクは、任意に、（例えば図３で）前述された特性及びバリエーションのいずれかを有してよい。
【００３８】
命令は、第２のソースパックドデータオペランド４１２を指定し又は他の方法で示してよい。本実施形態において、第２のソースパックドデータオペランドは、単一の最上位データエレメント（例えばＸ７）を提供し、その値は、結果パックドデータオペランド４１４のゼロ又はそれより多くの（例えば、図示された例においては３つの）最下位のマスクされた結果データエレメント４３２のために（例えば、そこにストアされるために）用いられてよい。さらに後述されるように、第２のソースパックドデータオペランドの最上位位置に単一のデータエレメント（例えばＸ７）を提供することは、特定の実装（例えば、インクリメントループをベクトル化する場合）に対するアルゴリズムの観点から、利点を提供することができる。例えば、最上位データエレメント（例えばＸ７）は、ループ（例えばベクトル量）の複数の前のイテレーションのセットのうち、直前のイテレーションの値を表してよく、複数のイテレーションのセットのうち次のイテレーションに対する入力値として用いられてよい。これは、複数のループイテレーションの次のセットを準備するためのオーバヘッド低減の助けとなり得る。しかしながら、本発明の範囲は、このような実装又は利点に限定されるものではない。
【００３９】
結果パックドデータオペランド４１４は、命令の実施形態に応答して及び／又はその結果として、デスティネーションストア位置において（例えば、実行ユニット４０６によって）生成及びストアされてよい。デスティネーションストア位置は、任意に、（例えば図３で）前述された特性及びバリエーションのいずれかを有してよい。後述される違いの他に、結果パックドデータオペランド４１４は、（例えば図３で）前述された特性及びバリエーションのいずれかをさらに有してよい。
【００４０】
図示された実施形態の例において、位置０から２にある最下位３つ（最も右）の結果データエレメントは、各々、マスクアウトされたマスクエレメントに対応する（例えば、位置０から２のマスクエレメントは、バイナリのゼロ値を有する）。４３２において示されるように、位置０から２にあるこれら最下位３つのマスクされた結果データエレメントは、最下位エンド又はビット位置４３１と、位置３にある最下位のマスクされていない結果データエレメント（Ａ０）との間にある。本実施形態において、第２のソースパックドデータオペランド４１２の単一の最上位データエレメント（Ｘ７）の値は、結果パックドデータの最下位のマスクされていない結果データエレメント（例えばこの場合、位置３のＡ０）に先行する全ての最下位３つのマスクアウト結果データエレメント４３２にストアされる。示されるように、結果パックドデータオペランド４１４の残りは、図３の結果パックドデータオペランド３１４と同様又は同じであってよい。
【００４１】
上位ソースエレメントから開始するマスクされた連続ソースエレメントのストア及び伝搬命令の特定の実施形態の例のための、名称をＶＥＸＰＡＮＤＰＲＯＰＨＩＧＨとする疑似コードが、以下列挙される。ＳＲＣ１は、ＤＳＴにおける結果パックドデータオペランドのゼロ又はそれより多くの最下位のマスクされたエレメントのセットにストアされる、（例えば位置ＶＬ−１において）単一の最上位データエレメントを有するソースパックドデータオペランド（例えばオペランド４１２）である。ＳＲＣ２は、デスティネーションにストア又は伝搬される複数の連続エレメントを有するソースパックドデータオペランド（例えばオペランド４１０）である。ｔｍｐ＿ｖａｌは、一時的な値又は変数である。
【数２】
0006374975.tif 000003
【００４２】
この疑似コードは、本実施形態の命令に対して、ＤＳＴにおけるゼロ又はそれより多くのマスクされた結果データエレメントの最下位セットが、ＳＲＣ１の最上位データエレメントをストアしてよいことを示す。また、ｎは、満たされたマスクされていないマスクエレメントに直面する度にインクリメントされ、かつ、ｎは、ＳＲＣ２（例えばＳＲＣ２［ｎ］）から次のデータエレメントを選択するために用いられるので、組の各マスクされていない結果データエレメントは、ＳＲＣ２からそれぞれの連続ソースデータエレメントをストアしてよい。また、ｎの値は、複数のマスクされたマスクエレメントに直面した場合にはインクリメントされないので、複数の下位のマスクされていない結果エレメントの値は、次のマスクされていない結果データエレメントまで（これを含まないが）、複数の上位のマスクされた結果エレメントに伝搬又はストアされてよい。
【００４３】
図５は、命令の実施形態に応答して実行可能なマスクされた連続ソースエレメント反転及び後方ストア及び伝搬オペレーション５５０の、複数の最上位のマスクされたエレメントが最下位エレメントからストアされる実施形態を示すブロック図である。本実施形態において、第２のソースパックドデータオペランド５１２の最下位データエレメント（例えばＸ０）の値は、最上位のマスクされていない結果データエレメント（例えば、図示された例においては、位置６のＡ０）に先行するゼロ又はそれより多くの（例えば、図示された例においては、任意に１つの）最上位のマスクされた結果データエレメント５５４のセットの値にストアされてよい。本実施形態において、伝搬は、ビットの有意性又は順序の降順となる「反転」方向である。また、本実施形態は、第１のソースパックドデータオペランド５１０の複数のデータエレメントのビットの有意性又は順序が結果パックドデータオペランド５１４と逆又は後方であるという点で「後方」である。図において、結果パックドデータオペランドの最も有意性の低いもしくは最下位エンド又はビット位置５３１は、向かって右に示され、結果パックドデータオペランドの最も有意性の高いもしくは最上位エンド又はビット位置５３３は、向かって左に示される。
【００４４】
命令は、第１のソースパックドデータオペランド５１０及びソースマスク５１６を指定し又は他の方法で示してよい。第１のソースパックドデータオペランド及びソースマスクは、任意に、（例えば図３−４で）前述された特性及びバリエーションのいずれかを有してよい。
【００４５】
命令は、第２のソースパックドデータオペランド５１２をさらに指定又は他の方法で示してよい。本実施形態において、第２のソースパックドデータオペランドは、単一の最下位データエレメント（例えばＸ０）を提供する。最下位データエレメント（Ｘ０）の値は、結果パックドデータオペランド５１４におけるゼロ又はそれより多くの（例えば、図示された例においては１つの）最上位のマスクされた結果データエレメント５５４のセットのために（例えば、これにストアされるために）用いられてよい。さらに後述されるように、パックドデータオペランドの最下位位置に単一のデータエレメント（例えばＸ０）を提供することは、特定の実装（例えば、デクリメント又は後方カウントループをベクトル化する場合）に対するアルゴリズムの観点から、利点を提供することができる。例えば、最下位データエレメント（例えばＸ０）は、複数のデクリメントイテレーションの前のセットの間に生成された最後の値を表してよく、これは、複数のデクリメントイテレーションの新たなセットに対する入力値として用いられてよい。しかしながら、本発明の範囲は、このような実装又は利点に限定されるものではない。他に、第２のソースパックドデータオペランドは、任意に、前述された特性及びバリエーションのいずれかを有してよい。
【００４６】
結果パックドデータオペランド５１４は、命令の実施形態に応答して及び／又はその結果として、デスティネーションストア位置において（例えば、実行ユニット５０６によって）生成及びストアされてよい。デスティネーションストア位置は、任意に、（例えば図３−４で）前述された特性及びバリエーションのいずれかを有してよい。第２のソースパックドデータオペランドの最下位データエレメント（例えばＸ０）を用いること及び反転順序態様のような、後述される違いの他に、結果パックドデータオペランド５１４は、任意に、（例えば図３−４で）前述された特性及びバリエーションのいずれかを有してよい。
【００４７】
図示された実施形態の例において、位置７の最上位結果データエレメントは、マスクされた結果データエレメントである。この最上位のマスクされた結果データエレメントは、最上位エンド又はビット位置５３３と最上位のマスクされていない結果データエレメント（例えばこの例では、位置６のＡ０）との間にある。本実施形態において、最上位のマスクされた結果データエレメントは、第２のソースパックドデータオペランドの最下位データエレメント（例えばＸ０）の値をストアする。
【００４８】
位置６にある次の最上位結果データエレメントは、最上位のマスクされていない結果データエレメントである。示されるように、位置６にある最上位のマスクされていない結果データエレメントは第１のソースパックドデータオペランド５１０の複数の連続最下位データエレメント５３５のセットの最下位ソースデータエレメント（例えば、位置０のＡ０）の値をストアしてよい。ソース及び結果データエレメントのビット順序又は有意性は、本実施形態において、後方に向かう又は反転される。一例として、これは、インクリメント位置ｎ（すなわちｎ＝ｎ＋１）によるデクリメントループカウンタ（すなわち、ｉ＝ｉ−１）を伴う実装（例えば、ループのベクトル化）において用いられてよい。この場合、連続ソースデータエレメント（例えばＳＲＣ［ｎ］）の読み出しは、昇順又は順方向順序で進み、結果パックドデータオペランド（例えばＤＳＴ［ｉ］）への複数の結果エレメントのストアは、後方逆順序で進む。図示された例において、位置４及び５にある次に下位の２つの結果データエレメントは、マスクされた結果データエレメントである。示されるように、いくつかの実施形態において、最も近い上位のマスクされていない結果データエレメント（例えばこの例では、位置６のＡ０）の値は、位置４及び５にあるこれらの下位のマスクされた結果データエレメントに伝搬され又は他の方法でストアされてよい。本実施形態において、伝搬は、上位のマスクされていない結果データエレメントから１つ又は複数の（例えばこの例では、任意に２つの）下位のマスクされた結果データエレメントに行われる。矢印５３７は、伝搬又はストアの方向が、降順のビットの有意性又は順序であることを示す。方向は、図３−４の実施形態に対して反転又は逆であることに留意されたい。
【００４９】
位置３にある次に下位の結果データエレメントは、マスクされていない結果データエレメントである。位置３のマスクされていない結果データエレメントは、第１のソースパックドデータオペランドの複数の連続最下位データエレメント５３５のセットの次に上位の連続ソースデータエレメント（例えば、位置１のＡ１）をストアする。位置１のデータエレメントＡ１は、第１のソースパックドデータオペランドにわたって下位から上位位置へと移動する場合に、位置０にあるデータエレメントＡ０の後の次の連続データエレメントである。ソースマスクの位置３のマスクされていないマスクエレメントは、結果パックドデータオペランドの位置３にある対応するマスクされていない結果データエレメントを、次の連続ソースデータエレメント（例えばＡ１）の適したストア位置として、有効に選択してよい。図示された例において、位置０から２にある最下位３つの結果データエレメントは、マスクされた結果データエレメントのセットである。示されるように、位置０から２にある最下位のマスクされた結果データエレメントは、各々、最も近い上位のマスクされていない結果データエレメント（例えば、位置３のＡ１）の値をストアする。
【００５０】
名称をＶＥＸＰＡＮＤＰＲＯＰＲＥＶＢＷＬＯＷとする下位エレメント命令から開始するマスクされた連続ソースエレメントの反転及び後方ストア及び伝搬の特定の実施形態の例の疑似コードが、以下列挙される。ＳＲＣ１は、結果パックドデータオペランドのゼロ又はそれより多くの最上位のマスクされたエレメントのセットにストアされる単一の最下位データエレメントを有するソースパックドデータオペランド（例えばオペランド５１２）である。ＳＲＣ２は、デスティネーションにストア又は伝搬される複数の連続エレメントを有するソースパックドデータオペランド（例えばオペランド５１０）である。コードにおいて、「ｉ−−」は、デクリメント（例えば、ｉ＝ｉ−１）を意味し、ｉ＞＝０条件は、「ｉ」がゼロより大きい又はこれに等しいことである。
【数３】
0006374975.tif 000004
【００５１】
この疑似コードは、本実施形態の命令がＳＲＣ１の最下位データエレメントをゼロ又はそれより多くの最上位のマスクされた結果データエレメントのセットにストアすることを示す。ＳＲＣ２の最下位の連続データエレメントのセットの最下位データエレメントは、最上位のマスクされていない結果データエレメントにストアされる。複数の上位のマスクされていない結果データエレメントは、複数の下位のマスクされた結果データエレメントに伝搬又はストアされる。
【００５２】
図６は、命令の実施形態に応答して実行可能なマスクされた連続ソースエレメント反転ストア及び伝搬オペレーション６６０の、複数の最上位のマスクされたエレメントが最下位エレメントからストアされる実施形態を示すブロック図である。本実施形態において、第２のソースパックドデータオペランド６１２の最下位データエレメント（例えばＸ０）の値は、最上位のマスクされていない結果データエレメント（例えば、図示された例においては、位置６のＡ７）に先行するゼロ又はそれより多くの（例えば、図示された例においては、任意に１つの）最上位のマスクされた結果データエレメント６５４のセットの値にストアされてよい。図において、結果パックドデータオペランドの最も有意性の低いもしくは最下位エンド又はビット位置６３１は、向かって右に示され、結果パックドデータオペランドの最も有意性の高いもしくは最上位エンド又はビット位置６３３は、向かって左に示される。
【００５３】
命令は、第１のソースパックドデータオペランド６１０及びソースマスク６１６を指定し又は他の方法で示してよい。第１のソースパックドデータオペランド及びソースマスクは、任意に、（例えば図３−５で）前述された特性及びバリエーションのいずれかを有してよい。
【００５４】
命令は、第２のソースパックドデータオペランド６１２をさらに指定又は他の方法で示してよい。本実施形態において、第２のソースパックドデータオペランドは、単一の最下位データエレメント（例えばＸ０）を提供する。最下位データエレメント（Ｘ０）の値は、結果パックドデータオペランド６１４におけるゼロ又はそれより多くの（例えば、図示された例においては１つの）最上位のマスクされた結果データエレメント６５４のセットのために（例えば、これにストアされるために）用いられてよい。第２のソースパックドデータオペランドは、他の方法で任意に、（例えば図４−５で）前述された特性及びバリエーションのいずれかを有してよい。
【００５５】
結果パックドデータオペランド６１４は、命令の実施形態に応答して及び／又はその結果として、デスティネーションストア位置において（例えば、実行ユニット６０６によって）生成及びストアされてよい。デスティネーションストア位置は、任意に、（例えば図３−５で）前述された特性及びバリエーションのいずれかを有してよい。第２のソースパックドデータオペランドの最下位データエレメント（Ｘ０）を用いること及び反転順序態様のような、後述される違いの他に、結果パックドデータオペランド６１４は、（例えば図３−５で）前述された特性及びバリエーションのいずれかをさらに有してよい。
【００５６】
図示された実施形態の例において、位置７の最上位結果データエレメントは、最上位エンド又はビット位置６３３と最上位のマスクされていない結果データエレメント（例えばこの例では、位置６のＡ７）との間にあるマスクされた結果データエレメントである。本実施形態において、最上位のマスクされた結果データエレメントは、第２のソースパックドデータオペランド６１２の最下位データエレメント（例えばＸ０）の値をストアする。位置６にある次に上位の結果データエレメントは、マスクされていない結果データエレメントである。示されるように、位置６のマスクされていない結果データエレメントは、第１のソースパックドデータオペランド６１０の複数の連続最上位データエレメント６５２のセットの最上位データエレメント（例えば、位置７のＡ７）の値をストアしてよい。図示された例において、位置４及び５にある次に下位の２つの結果データエレメントは、マスクされた結果データエレメントである。示されるように、いくつかの実施形態において、最も近い上位のマスクされていない結果データエレメント（例えばこの例では、位置６のＡ７）の値は、これらの下位のマスクされた結果データエレメントに伝搬又は他の方法でストアされてよい。本実施形態において、伝搬は、上位のマスクされていない結果データエレメントから１つ又は複数の（例えばこの例では、任意に２つの）下位のマスクされた結果データエレメントに行われる。矢印６３７は、伝搬又はストアの方向を示す。方向は、図３−４の実施形態の方向から反転していることに留意されたい。
【００５７】
位置３にある次に下位の結果データエレメントは、マスクされていない結果データエレメントである。位置３のマスクされていない結果データエレメントは、第１のソースパックドデータオペランドの複数の連続最上位データエレメント６５２のセットの次に下位の連続ソースデータエレメント（例えば、位置６のＡ６）をストアする。図示された例において、位置０から２にある最下位３つの結果データエレメント６５８は、マスクされた結果データエレメントのセットである。示されるように、位置０から２にある最下位のマスクされた結果データエレメントは、各々、最も近い上位のマスクされていない結果データエレメント（例えば、位置３のＡ６）の値をストアしてよい。
【００５８】
名称をＶＥＸＰＡＮＤＰＲＯＰＲＥＶＬＯＷとする下位エレメント命令から開始するマスクされた連続ソースエレメントの反転ストア及び伝搬の特定の実施形態の例の疑似コードが、以下列挙される。ＳＲＣ１は、結果パックドデータオペランドのゼロ又はそれより多くの最上位のマスクされたエレメントのセットにストアされる単一の最下位データエレメントを有するソースパックドデータオペランド（例えばオペランド６１２）である。ＳＲＣ２は、デスティネーションにストア又は伝搬される複数の連続エレメントを有するソースパックドデータオペランド（例えばオペランド６１０）である。「ｎ−−」は、「ｎ」のデクリメント（すなわち、ｎ＝ｎ−１）を意味する。
【数４】
0006374975.tif 000005
図４−６の実施形態を考慮すると、いくつかの実施形態において、複数の命令は、任意に、第２のソースパックドデータオペランド（例えば、４１２、５１２、６１２）のために用いられるレジスタがデスティネーションストア位置としても用いられることを、明示的に指定してはいないものの黙示的に示してよいが、これは必須ではない。例として、さらに後述されるように、いくつかの実施形態において、これらの命令は、複数のループのベクトル化に用いられてよい。ループのイテレーションの最初のセットをベクトル化するために用いられる命令の結果は、ループのイテレーションの後のセットをベクトル化するために用いられる命令に対して、連続性を目的に、入力又は開始値として生成及び利用されてよい。レジスタをソースとして、かつ黙示的にデスティネーションとして用いることは、他の別個のレジスタを指定又は利用する必要を回避する助けとなり得る。しかしながら、これは任意であって、必須ではない。
【００５９】
図３−６は、いくつかの例示的な実施形態の例を示す。しかしながら、本発明の範囲はこれらの実施形態のみに限定されるものではない。他の複数の実施形態は、異なる数のデータエレメント、マルチビットマスクエレメントを含んでよく、ソースパックドデータオペランドは、同数のデータエレメントを結果パックドデータオペランド等として有する必要がない。さらに、図４−６は、複数の最下位又は最上位のマスクされた結果データエレメントの値のために用いられる単一のデータエレメント又は値（例えば、Ｘ０又はＸ７）を提供するためのアプローチの例を示す。しかしながら、様々な他の複数の実施形態において、単一のデータエレメント又は値は、パックドデータの中間位置において、汎用レジスタにおいて、メモリ位置において、又は他のストア位置において提供されてよい。単一のデータエレメント又は値が、特定の実装の命令長を過度に増加させないよう十分に小さい場合（例えば、８ビットバイトエレメント又は１６ビットワードエレメント）、これは、命令の即値に任意に提供されてよい。
【００６０】
本明細書において開示される複数の命令は、汎用的な命令である。当業者及び本開示の恩恵を有する者であれば、当該命令を用いる様々な異なる態様及び目的を企図しよう。いくつかの実施形態において、複数の命令は、任意に、例えば、スカラ値が条件下でインクリメント又はデクリメントされる計算ループのようなループのベクトル化を容易にするために用いられてよいが、本発明の範囲はこれに限定されない。条件下でインクリメントされるこのようなループの１つの説明例が、以下の疑似コードに示される。
【数５】
0006374975.tif 000006
【００６１】
この疑似コードにおいて、ｘはスカラ値であり、「ｉ」はイテレーションの回数である。記号「ｉ＋＋」は、「ｉ」が１だけインクリメントされる（すなわち、ｉ＝ｉ＋１）ことを意味する。同様に、記号「ｎ＋＋」は、「ｎ」が１だけインクリメントされる（すなわち、ｎ＝ｎ＋１）ことを意味する。Ａ［ｎ］は、ベクトル又はアレイのｎ番目のエレメントである。この例では、計算は、値ｎ、ｘの値又はＡ［ｎ］に従属し、特定の実装に応じて、潜在的に／任意に、イテレーションの回数「ｉ」に従属してよい。ループのイテレーションの間、ｘの値は、これらのイテレーションに対してのみ変更され、当該イテレーションの条件が満たされ、ｎがインクリメントされることに留意されたい。条件が満たされない場合に、ｘの値は変更されない。これは、データエレメントの値を結果パックドデータオペランドの１つの位置から他の位置に伝播又はストアすることによって、実装されてよい。
【００６２】
このような特性の適用可能な用途の１つの説明例は、経時的なマルチ状態トリガである。例えば、トリガが起動される（例えば、ボタンが押される）各回が、条件が満たされたことを表してよい。条件が満たされたことは、ソースマスクのマスクされていないビットとして表されてよい。このような場合に、トリガは、その現在状態を新たな状態に変更してよい。これは、次の連続ソースデータエレメントをソースパックドデータオペランドから選択することによって、表されてよい。トリガが再度起動されない（例えば、ボタンが押されない）場合に、条件は再度満たされない（例えば、新たなマスクされていないマスクエレメントによって表されない）。これは、データエレメントの値をマスクされた結果データエレメントに伝播することによって、表されてよい。
【００６３】
１つの課題は、現在、大部分はｎ及びｘの値における複数のイテレーションの間のデータ従属性に起因して、ベクトル化が少しでも可能である場合に、このようなループのベクトル化が、概して困難となる傾向があることである。例えば、データ従属性を解消可能となるように十分に短い命令シーケンスが存在しないことがあり、これは、このようなループをベクトル化するコンパイラによって利用可能である。有利には、本明細書で開示される複数の命令の実施形態は、例えば、上述された疑似コードにおいて示されたループのような複数のループのベクトル化を容易にするために用いられてよい。例えば、複数のイテレーションの条件は、評価されて、ｖｅｘｐａｎｄｐｒｏｐｈｉｇｈ命令によって示され得るソースマスクを生成するために用いられてよい。例えば、複数のマスクエレメントは、正しいと評価された条件に対してはマスクされず、又は、複数のマスクエレメントは、誤りと評価された条件に対してはマスクされてよい。次に、ｖｅｘｐａｎｄｐｒｏｐｈｉｇｈ命令は、ｘ値ベクトルを生成するために用いられてよい。これらのｘ値は、後の計算において用いられてよい。ＳＩＭＤ、ベクトル、又はパックドデータ処理は、ｘ値ベクトルを並列処理するために用いられてよい。
【００６４】
特定の概念をさらに示すべく、どのように上述されたループの例がベクトル化され得るかという疑似コードの以下の例を考慮する。この例では、ｚｍｍ＊は、５１２ビットのパックドデータレジスタを表し、ＫＬは、ベクトル長をデータエレメントの数で表す。
【数６】
0006374975.tif 000007
【００６５】
上述された内容において、第１のｖｅｘｐａｎｄｐｒｏｐｈｉｇｈ命令は、ｚｍｍ３の複数のＫＬイテレーションのこのセットに対して、「ｎ」値のベクトルを生成するために用いられる。これは、ｖｅｘｐａｎｄｐｒｏｐｈｉｇｈ命令をベクトル｛ｎ０＋ＫＬ：ｎ０＋ＫＬ−１：…：ｎ０＋２：ｎ０＋１｝に適用することによってなされる。ここで、ｎ０は、現在のＫＬイテレーションのセットに先行するＫＬイテレーションのセットのうち、最後のイテレーションにおけるｎの結果値である。ｖｅｘｐａｎｄｐｒｏｐｈｉｇｈ命令の第２の例は、ソースデータエレメントを拡張し、ｘ値のベクトルを生成するために用いられる。この例では、複数のソースデータエレメントは、メモリ（例えばＡ［ｎ＋１］）にある。
【００６６】
さらに例示すべく、ベクトルがループの８回のイテレーション（イテレーション０から７）に用いられる、上述されたループの実装例を考慮する。最初に、複数の条件が評価され、ソースマスク（ｋ１）を生成してよく、開始データが、ｖｅｘｐａｎｄｐｒｏｐｈｉｇｈ命令によって示され得るソースオペランドにおいて確立されてよい。
【数７】
0006374975.tif 000008
【００６７】
次に、８つの条件の他のセットが評価され、イテレーション８から１５に対する新たなソースマスク（ｋ１）を生成してよい。次の８回のイテレーションに対する開始データの新たなセットは、新たなソースオペランド（ｚｍｍ２）にストアされてよい。
【数８】
0006374975.tif 000009
この処理は、概して、後のループのイテレーションで繰り返されてよい。 
【００６８】
図７は、複数のパックドデータレジスタ７０８の好適なセットの実施形態の例のブロック図である。複数のパックドデータレジスタは、ＺＭＭ０からＺＭＭ３１とラベリングされる３２の５１２ビットパックドデータレジスタを含む。図示された実施形態において、下位１６レジスタの下位２５６ビット、すなわちＺＭＭ０−ＺＭＭ１５は、ＹＭＭ０−ＹＭＭ１５とラベリングされたそれぞれの２５６ビットパックドデータレジスタにおいてエイリアス又はオーバレイされるが、これは必須ではない。同様に、図示された実施形態において、レジスタＹＭＭ０−ＹＭＭ１５の下位１２８ビットは、ＸＭＭ０−ＸＭＭ１５とラベリングされたそれぞれの１２８ビットパックドデータレジスタにおいてエイリアス又はオーバレイされるが、これも必須ではない。５１２ビットレジスタＺＭＭ０からＺＭＭ３１は、５１２ビットパックドデータ、２５６ビットパックドデータ、又は１２８ビットパックドデータを保持するように動作可能である。２５６ビットレジスタＹＭＭ０−ＹＭＭ１５は、２５６ビットパックドデータ又は１２８ビットパックドデータを保持するように動作可能である。１２８ビットレジスタＸＭＭ０−ＸＭＭ１５は、１２８ビットパックドデータを保持するように動作可能である。いくつかの実施形態において、複数のレジスタの各々は、パックド浮動小数点データ又はパックド整数データのいずれかをストアするために用いられてよい。少なくとも８ビットバイトデータ、１６ビットワードデータ、３２ビットダブルワード、３２ビット単精度浮動小数点データ、６４ビットクワッドワード、及び６４ビット倍精度浮動小数点データを含む、異なるデータエレメントのサイズがサポートされる。複数の代替的な実施形態において、異なる数のレジスタ及び／又は異なるサイズのレジスタが、用いられてよい。さらに他の複数の実施形態において、複数のレジスタは、より小さいレジスタにおけるより大きいレジスタのエイリアスを用いてよく、又は用いなくてよく、及び／又は、浮動小数点データをストアするために用いられてよく、又は用いられなくてよい。
【００６９】
図８は、マスクビットの数がパックドデータ幅及びパックドデータエレメント幅に従うことを示す表８９０である。１２８ビット、２５６ビット、及び５１２ビットのパックドデータ幅が示されるが、複数の他の幅も適用可能である。８ビットバイト、１６ビットワード、３２ビットダブルワード（ｄｗｏｒｄ）もしくは単精度浮動小数点、及び６４ビットクワッドワード（Ｑｗｏｒｄ）もしくは倍精度浮動小数点のパックドデータエレメント幅が考慮されるが、複数の他の幅も適用可能である。
【００７０】
図９は、パックドデータオペレーションマスクレジスタ９０８の好適なセットの実施形態の例のブロック図である。複数のパックドデータオペレーションマスクレジスタの各々は、パックドデータオペレーションマスクをストアするために用いられてよい。図示された実施形態において、セットは、ｋ０からｋ７とラベリングされた８つのレジスタを含む。複数の代替的な実施形態は、８つより少ないレジスタ（例えば、２、４、６等）、又は８つより多くのレジスタ（例えば、１６、３２等）のいずれかを含んでよい。図示された実施形態において、複数のレジスタの各々は、６４ビットである。複数の代替的な実施形態において、複数のレジスタの幅は、６４ビットより広い（例えば、８０ビット、１２８ビット等）、又は６４ビットより狭い（例えば、８ビット、１６ビット、３２ビット等）のいずれかであってよい。複数のレジスタは、複数の周知技術を用いる異なる態様で実装されてよく、いかなる公知の特定のタイプの回路にも限定されるものではない。好適なレジスタの例は、限定されるものではないが、専用物理レジスタ、レジスタリネーミングを用いる動的割り当て物理レジスタ、及びこれらの組み合わせを含む。例として、命令は、３ビット（例えば、３ビットフィールド）を用いて、８つのパックドデータオペレーションマスクレジスタｋ０からｋ７のいずれか１つをエンコード又は指定してよい。複数の代替的な実施形態において、より少ない又はより多くのビットのいずれかが、それぞれ、より少ない又はより多くのパックドデータオペレーションマスクレジスタが存在する場合に用いられてよい。いくつかの実施形態において、マスクは、これらレジスタの複数の最下位ビットにストアされてよいが、これは必須ではない。
【００７１】
命令セットは、１つ又は複数の命令フォーマットを含む。所与の命令フォーマットは、様々なフィールド（ビットの数、ビットの位置）を定義し、とりわけ、実行されるオペレーション（オペコード）及びオペレーションが実行されるオペランドを指定する。いくつかの命令フォーマットは、複数の命令テンプレート（又はサブフォーマット）の定義を通して、さらに分解される。例えば、所与の命令フォーマットの複数の命令テンプレートは、命令フォーマットフィールドの複数の異なるサブセットを有するように定義されてよく（含まれる複数のフィールドは、典型的には同じ順序だが、含まれるフィールドがより少ないので、少なくともいくつかは異なるビット位置を有する）、及び／又は、異なるように解釈される所与のフィールドを有するように定義されてよい。そこで、ＩＳＡの各命令は、所与の命令フォーマットを用いて（かつ、定義された場合には、命令フォーマットの命令テンプレートの所与の１つで）表され、オペレーション及び複数のオペランドを指定する複数のフィールドを含む。例えば、例示的なＡＤＤ命令は、具体的なオペコードと、当該オペコードを指定するオペコードフィールド及び複数のオペランド（ソース１／デスティネーション及びソース２）を選択する複数のオペランドフィールドを含む命令フォーマットとを有し、このＡＤＤ命令の命令ストリームにおける発生は、具体的な複数のオペランドを選択する複数のオペランドフィールドにおいて具体的なコンテンツを有する。高度ベクトル拡張（ＡＶＸ）（ＡＶＸ１及びＡＶＸ２）と称され、複数のベクトル拡張（ＶＥＸ）コーディングスキームを用いる複数のＳＩＭＤ拡張のセットが、リリース及び／又は公開されている（例えば、２０１１年１０月版インテル（登録商標）６４及びＩＡ−３２アーキテクチャソフトウェア開発者マニュアル、２０１１年６月版インテル（登録商標）高度ベクトル拡張プログラミングリファレンスを参照）。
【００７２】
［例示的な命令フォーマット］
本明細書で説明される命令の複数の実施形態は、複数の異なるフォーマットで具現化されてよい。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが、以下詳述される。命令の複数の実施形態は、このようなシステム、アーキテクチャ、及びパイプライン上で実行されてよいが、詳述された内容に限定されるものではない。
【００７３】
［汎用ベクトル向け命令フォーマット］
ベクトル向け命令フォーマットは、（例えば、ベクトルオペレーションに固有の特定のフィールドが存在する）ベクトル命令に適した命令フォーマットである。ベクトル向け命令フォーマットを通してベクトル及びスカラオペレーションの両方がサポートされる複数の実施形態が説明されるが、複数の代替的な実施形態は、ベクトルオペレーションのベクトル向け命令フォーマットのみを用いる。
【００７４】
図１０Ａ−１０Ｂは、本発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びその命令テンプレートを示すブロック図である。図１０Ａは、本発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスＡ命令テンプレートを示すブロック図である。図１０Ｂは、本発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスＢ命令テンプレートを示すブロック図である。具体的には、汎用ベクトル向け命令フォーマット１０００に対してクラスＡ及びクラスＢ命令テンプレートが定義され、その両方が非メモリアクセス１００５命令テンプレート及びメモリアクセス１０２０命令テンプレートを含む。ベクトル向け命令フォーマットに関して汎用という用語は、あらゆる具体的な命令セットに拘束されない命令フォーマットを指す。
【００７５】
ベクトル向け命令フォーマットが、以下の３２ビット（４バイト）もしくは６４ビット（８バイト）データエレメント幅（又はサイズ）（そこで、６４バイトベクトルは、１６ダブルワードサイズエレメントあるいは８クワッドワードサイズエレメントのいずれかから構成される）を有する６４バイトベクトルオペランド長（又はサイズ）、１６ビット（２バイト）もしくは８ビット（１バイト）データエレメント幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、もしくは８ビット（１バイト）データエレメント幅（又はサイズ）を有する３２バイトベクトルオペランド長（又はサイズ）、及び３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、もしくは８ビット（１バイト）データエレメント幅（又はサイズ）を有する１６バイトベクトルオペランド長（又はサイズ）をサポートする本発明の複数の実施形態が説明されるが、複数の代替的な実施形態は、より大きい、より小さい、又は異なるデータエレメント幅（例えば、１２８ビット（１６バイト）データエレメント幅）を有する、より大きい、より小さい及び／又は異なるベクトルオペランドサイズ（例えば、２５６バイトベクトルオペランド）をサポートしてよい。
【００７６】
図１０ＡのクラスＡ命令テンプレートは、１）非メモリアクセス１００５命令テンプレート内に、非メモリアクセス、フルラウンド制御タイプオペレーション１０１０命令テンプレートと、非メモリアクセス、データ変換タイプオペレーション１０１５命令テンプレートとが示されるもの、２）メモリアクセス１０２０命令テンプレート内に、メモリアクセス、一時的１０２５命令テンプレートと、メモリアクセス、非一時的１０３０命令テンプレートとが示されるものを含む。図１０ＢのクラスＢ命令テンプレートは、１）非メモリアクセス１００５命令テンプレート内に、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション１０１２命令テンプレートと、非メモリアクセス、ライトマスク制御、ｖｓｉｚｅタイプオペレーション１０１７命令テンプレートとが示されるもの、２）メモリアクセス１０２０命令テンプレート内に、メモリアクセス、ライトマスク制御１０２７命令テンプレートが示されるものを含む。
【００７７】
汎用ベクトル向け命令フォーマット１０００は、図１０Ａ−１０Ｂに示される順序で以下列挙される以下のフィールドを含む。
【００７８】
フォーマットフィールド１０４０−このフィールドの特定値（命令フォーマット識別値）は、ベクトル向け命令フォーマットを一意に特定し、そこで、複数の命令ストリームにおいて、ベクトル向け命令フォーマットで命令が発生する。このように、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには必要とされないという意味で任意である。
【００７９】
ベースオペレーションフィールド１０４２−そのコンテンツは、複数の異なるベースオペレーションを区別する。
【００８０】
レジスタインデックスフィールド１０４４−そのコンテンツは、ソース及びデスティネーションオペランドがレジスタ又はメモリにある場合に、直接又はアドレス生成を通して、これらの位置を指定する。これらは、Ｎ個のレジスタをＰｘＱ（例えば３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）個のレジスタファイルから選択するのに十分なビットの数を含む。一実施形態において、Ｎは最大で３つのソース及び１つのデスティネーションレジスタであってよいが、複数の代替的な実施形態は、より多くの又はより少ないソース及びデスティネーションレジスタをサポートしてよい（例えば、最大で２つのソースであって、これらのソースの１つがデスティネーションとしても動作するソースをサポートしてよく、最大で３つのソースであって、これらのソースの１つがデスティネーションとしても動作するソースをサポートしてよく、最大で２つのソース及び１つのデスティネーションをサポートしてよい）。
【００８１】
修飾子フィールド１０４６−このコンテンツは、メモリアクセスをそうでないものから、すなわち、非メモリアクセス１００５命令テンプレートとメモリアクセス１０２０命令テンプレートとの間で指定する汎用ベクトル命令フォーマットでの命令の発生を区別する。複数のメモリアクセスオペレーションは、メモリ階層への読み出し及び／又は書き込みを行う（いくつかの場合において、複数のレジスタにおける値を用いてソース及び／又はデスティネーションアドレスを指定する）が、非メモリアクセスオペレーションは、これを行わない（例えば、ソース及びデスティネーションはレジスタである）。一実施形態において、このフィールドは３つの異なる態様の間でさらに選択を行い、メモリアドレス算出を実行するが、複数の代替的な実施形態は、メモリアドレス算出を実行すべく、より多くの、より少ない、又は異なる態様をサポートしてよい。
【００８２】
増加オペレーションフィールド１０５０−このコンテンツは、様々な異なるオペレーションのどの１つがベースオペレーションに加えて実行されるかを区別する。このフィールドは、コンテキスト固有ではない。本発明の一実施形態において、このフィールドは、クラスフィールド１０６８、アルファフィールド１０５２、及びベータフィールド１０５４に分割される。増加オペレーションフィールド１０５０は、複数のオペレーションの複数の共通グループが、２つ、３つ、又は４つの命令ではなく、単一の命令で実行されることを可能とする。
【００８３】
スケールフィールド１０６０−このコンテンツは、メモリアドレス生成のための（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅを用いるアドレス生成のための）インデックスフィールドのコンテンツをスケーリングすることを可能とする。
【００８４】
変位フィールド１０６２Ａ−このコンテンツは、（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成のための）メモリアドレス生成の一部として用いられる。
【００８５】
変位係数フィールド１０６２Ｂ（なお、変位フィールド１０６２Ａを変位係数フィールド１０６２Ｂに直接並置することは、一方又は他方が用いられることを示す）−このコンテンツは、アドレス生成の一部として用いられる。これは、メモリアクセスのサイズ（Ｎ）によってスケーリングされる変位係数を指定する。ここで、Ｎは、（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｓｃａｌｅｄ  ｄｉｓｐｌａｃｅｍｅｎｔを用いるアドレス生成のための）メモリアクセスにおけるバイト数である。複数の冗長下位ビットは無視され、従って、変位係数フィールドのコンテンツは、有効アドレス算出に用いられる最終的な変位を生成すべく、メモリオペランドの合計サイズ（Ｎ）によって乗算される。ｎの値は、フルオペコードフィールド１０７４（本明細書において後述）及びデータ操作フィールド１０５４Ｃに基づいて、ランタイムにおいて、プロセッサハードウェアによって決定される。変位フィールド１０６２Ａ及び変位係数フィールド１０６２Ｂは、これらが非メモリアクセス１００５命令テンプレートに用いられず、及び／又は、複数の異なる実施形態が１つだけを実装してよく、又は２つのうち１つも実装しなくてよいという意味で任意である。
【００８６】
データエレメント幅フィールド１０６４−このコンテンツは、（いくつかの実施形態においては全ての命令に対して、複数の他の実施形態においては、のいくつかの命令のみに対して）多数のデータエレメント幅のどの１つが用いられるかを区別する。このフィールドは、オペコードのいくつかの態様を用いて１つだけのデータエレメント幅がサポートされる及び／又は複数のデータエレメント幅がサポートされる場合には必要とされないという意味で任意である。
【００８７】
ライトマスクフィールド１０７０−このコンテンツは、データエレメント位置毎に、デスティネーションベクトルオペランドのデータエレメント位置がベースオペレーション及び増加オペレーションの結果を反映しているか否かを制御する。複数のクラスＡ命令テンプレートは、マージライトマスクをサポートし、複数のクラスＢ命令テンプレートは、マージライトマスク及びゼロライトマスクの両方をサポートする。マージの場合、複数のベクトルマスクは、デスティネーションにおける複数のエレメントの任意のセットが、（ベースオペレーション及び増加オペレーションによって指定される）任意のオペレーションの実行中の更新から保護されることを可能とし、他の一実施形態においては、対応マスクビットが０を有するデスティネーションの各エレメントの古い値を保持する。対照的に、ゼロにする場合、複数のベクトルマスクは、デスティネーションにおける複数のエレメントの任意のセットが（ベースオペレーション及び増加オペレーションによって指定される）任意のオペレーションの実行中にゼロにされることを可能とし、一実施形態において、デスティネーションのエレメントは、対応マスクビットが０値を有する場合に０にセットされる。この機能のサブセットは、実行されているオペレーションのベクトル長を制御する能力である（すなわち、複数のエレメントのスパンが、最初から最後のものに変化する）。しかしながら、変化させられる複数のエレメントは、連続的であることを必要としない。そこで、ライトマスクフィールド１０７０は、ロード、ストア、算術、論理等を含む部分的なベクトルオペレーションを可能とする。ライトマスクフィールド１０７０のコンテンツが用いられるライトマスクを含む多数のライトマスクレジスタの１つを選択する（かつ、そこで、ライトマスクフィールド１０７０のコンテンツが実行されるマスクを間接的に特定する）本発明の複数の実施形態が説明されるが、複数の代替的な実施形態は、ライトマスクフィールド１０７０のコンテンツが、代わりに又は追加的に、実行されるマスクを直接指定することを可能とする。
【００８８】
即値フィールド１０７２−このコンテンツは、即値の仕様を可能とする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装には存在せず、即値を用いない命令には存在しないという意味で任意である。
【００８９】
クラスフィールド１０６８−このコンテンツは、複数の命令の異なるクラスの間で区別する。図１０Ａ−Ｂを参照すると、このフィールドのコンテンツは、クラスＡ命令とクラスＢ命令との間で選択する。図１０Ａ−Ｂにおいて、複数の角が丸い四角は、特定値がフィールドに存在することを示すために用いられる（例えば、図１０Ａ−Ｂのそれぞれのクラスフィールド１０６８に対して、クラスＡ１０６８Ａ及びクラスＢ１０６８Ｂ）。
【００９０】
［クラスＡ命令テンプレート］
クラスＡ非メモリアクセス１００５命令テンプレートの場合、アルファフィールド１０５２は、ＲＳフィールド１０５２Ａと解釈され、そのコンテンツは、異なる増加オペレーションタイプのどの１つが実行されるかを区別し（例えば、ラウンド１０５２Ａ．１及びデータ変換１０５２Ａ．２は、非メモリアクセスラウンドタイプオペレーション１０１０及び非メモリアクセスデータ変換タイプオペレーション１０１５命令テンプレートにそれぞれ指定され）、ベータフィールド１０５４は、指定されるタイプの複数のオペレーションのいずれが実行されるかを区別する。非メモリアクセス１００５命令テンプレートにおいて、スケールフィールド１０６０、変位フィールド１０６２Ａ、及び変位スケールフィールド１０６２Ｂは、存在しない。
【００９１】
［非メモリアクセス命令テンプレート−フルラウンド制御タイプオペレーション］
非メモリアクセスフルラウンド制御タイプオペレーション１０１０命令テンプレートにおいて、ベータフィールド１０５４は、ラウンド制御フィールド１０５４Ａと解釈され、そのコンテンツは、静的なラウンドを提供する。説明される本発明の複数の実施形態において、ラウンド制御フィールド１０５４Ａは抑制全浮動小数点例外（ＳＡＥ）フィールド１０５６及びラウンドオペレーション制御フィールド１０５８を含むが、複数の代替的な実施形態は、これらの概念の両方を同じフィールドにエンコードすること、又はこれらの概念／フィールドの一方又は他方のみを有することをサポートしてよい（例えば、ラウンドオペレーション制御フィールド１０５８のみを有してよい）。
【００９２】
ＳＡＥフィールド１０５６−このコンテンツは、例外イベント報告を無効化するか否かを区別する。ＳＡＥフィールド１０５６のコンテンツが、抑制が可能であることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外処理部も起動しない。
【００９３】
ラウンドオペレーション制御フィールド１０５８−このコンテンツは、複数のラウンドオペレーションのグループ（例えば、切り上げ、切り捨て、０へのラウンド及び近似値へのラウンド）のどの１つが実行されるかを区別する。そこで、ラウンドオペレーション制御フィールド１０５８は、命令毎に、ラウンドモードの変更を可能とする。プロセッサが複数のラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド１０５０のコンテンツは、当該レジスタ値をオーバライドする。
【００９４】
［非メモリアクセス命令テンプレート−データ変換タイプオペレーション］
非メモリアクセスデータ変換タイプオペレーション１０１５命令テンプレートにおいて、ベータフィールド１０５４は、データ変換フィールド１０５４Ｂと解釈され、そのコンテンツは、多数のデータ変換（例えば、データ変換、再構成、ブロードキャスト）のどの１つが実行されるかを区別する。
【００９５】
クラスＡメモリアクセス１０２０命令テンプレートの場合、アルファフィールド１０５２は、追い出し示唆フィールド１０５２Ｂと解釈され、そのコンテンツは、複数の追い出し示唆のどの１つが用いられるかを区別する（図１０Ａにおいて、一時的１０５２Ｂ．１及び非一時的１０５２Ｂ．２はそれぞれ、メモリアクセス、一時的１０２５命令テンプレート及びメモリアクセス、非一時的１０３０命令テンプレートに指定される）。ベータフィールド１０５４は、データ操作フィールド１０５４Ｃと解釈され、そのコンテンツは、多数のデータ操作オペレーション（プリミティブとしても知られる）のどの１つが実行されるかを区別する（例えば、操作なし、ブロードキャスト、ソースのアップコンバート、デスティネーションのダウンコンバート）。メモリアクセス１０２０命令テンプレートは、スケールフィールド１０６０、及び任意に、変位フィールド１０６２Ａ又は変位スケールフィールド１０６２Ｂを含む。
【００９６】
ベクトルメモリ命令は、変換サポートにより、メモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、複数のベクトルメモリ命令は、ライトマスクとして選択されるベクトルマスクのコンテンツに命令される、実際に転送される複数のエレメントと共に、データエレメント単位の態様で、メモリから／へデータを転送する。
【００９７】
［メモリアクセス命令テンプレート−一時的］
一時的データは、キャッシュから恩恵を享受し得るほどすぐに再利用される可能性が高いデータである。しかしながら、これは示唆であり、異なるプロセッサは、示唆を完全に無視することを含む異なる態様で、これを実装してよい。
【００９８】
［メモリアクセス命令テンプレート−非一時的］
非一時的データは、一次キャッシュにおいてキャッシュからの恩恵を享受するほどすぐに再利用される可能性は低いデータであり、追い出しのプライオリティを付与されなければならない。しかしながら、これは示唆であり、異なるプロセッサは、示唆を完全に無視することを含む異なる態様で、これを実装してよい。
【００９９】
［クラスＢ命令テンプレート］
クラスＢ命令テンプレートの場合、アルファフィールド１０５２は、ライトマスク制御（Ｚ）フィールド１０５２Ｃと解釈され、そのコンテンツは、ライトマスクフィールド１０７０によって制御されるライトマスクがマージ又はゼロにすべきか否かを区別する。
【０１００】
クラスＢ非メモリアクセス１００５命令テンプレートの場合、ベータフィールド１０５４の一部は、ＲＬフィールド１０５７Ａと解釈され、そのコンテンツは、異なる増加オペレーションタイプのどの１つが実行されるかを区別する（例えば、ラウンド１０５７Ａ．１及びベクトル長（ＶＳＩＺＥ）１０５７Ａ．２は、それぞれ、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション１０１２命令テンプレート及び非メモリアクセス、ライトマスク制御、ＶＳＩＺＥタイプオペレーション１０１７命令テンプレートに対して指定される）。ベータフィールド１０５４の残りは、指定されるタイプの複数のオペレーションのいずれが実行されるかを区別する。非メモリアクセス１００５命令テンプレートにおいて、スケールフィールド１０６０、変位フィールド１０６２Ａ、及び変位スケールフィールド１０６２Ｂは、存在しない。
【０１０１】
非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション１０１０命令テンプレートにおいて、ベータフィールド１０５４の残りはラウンドオペレーションフィールド１０５９Ａと解釈され、例外イベント報告は無効化される（所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外処理部も起動しない）。
【０１０２】
ラウンドオペレーション制御フィールド１０５９Ａ−単にラウンドオペレーション制御フィールド１０５８として、このコンテンツは、複数のラウンドオペレーションのグループ（例えば、切り上げ、切り捨て、０へのラウンド及び近似値へのラウンド）のどの１つが実行されるかを区別する。そこで、ラウンドオペレーション制御フィールド１０５９Ａは、命令毎に、ラウンドモードの変更を可能とする。プロセッサが複数のラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド１０５０のコンテンツは、当該レジスタ値をオーバライドする。
【０１０３】
非メモリアクセス、ライトマスク制御、ＶＳＩＺＥタイプオペレーション１０１７命令テンプレートにおいて、ベータフィールド１０５４の残りはベクトル長フィールド１０５９Ｂと解釈され、そのコンテンツは、多数のデータベクトル長のどの１つが実行されるかを区別する（例えば、１２８、２５６又は５１２バイト）。
【０１０４】
クラスＢメモリアクセス１０２０命令テンプレートの場合、ベータフィールド１０５４の一部はブロードキャストフィールド１０５７Ｂと解釈され、そのコンテンツは、ブロードキャストタイプデータ操作オペレーションが実行されるか否かを区別し、ベータフィールド１０５４の残りは、ベクトル長フィールド１０５９Ｂと解釈される。メモリアクセス１０２０命令テンプレートは、スケールフィールド１０６０、及び任意に、変位フィールド１０６２Ａ又は変位スケールフィールド１０６２Ｂを含む。
【０１０５】
汎用ベクトル向け命令フォーマット１０００に関して、フォーマットフィールド１０４０、ベースオペレーションフィールド１０４２、及びデータエレメント幅フィールド１０６４を含むフルオペコードフィールド１０７４が示される。フルオペコードフィールド１０７４がこれらのフィールドの全てを含む一実施形態が示されるが、これらの全てをサポートしない複数の実施形態において、フルオペコードフィールド１０７４は、これらのフィールドの一部のみを含む。フルオペコードフィールド１０７４は、オペレーションコード（オペコード）を提供する。
【０１０６】
増加オペレーションフィールド１０５０、データエレメント幅フィールド１０６４、及びライトマスクフィールド１０７０は、汎用ベクトル向け命令フォーマットにおいて、これらの機能が命令毎に指定されることを可能とする。
【０１０７】
ライトマスクフィールド及びデータエレメント幅フィールドの組み合わせは、タイプ別の複数の命令を形成し、これらによれば、マスクは複数の異なるデータエレメント幅に基づいて適用されることが可能となる。
【０１０８】
クラスＡ及びクラスＢ内で見られる様々な命令テンプレートは、複数の異なる状況において有益である。本発明のいくつかの実施形態において、複数の異なるプロセッサ又はプロセッサ内の複数の異なるコアは、クラスＡのみ、クラスＢのみ、又は両方のクラスをサポートしてよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスＢのみをサポートしてよく、主にグラフィック及び／又は科学的（スループット）コンピューティング向けのコアは、クラスＡのみをサポートしてよく、両方向けのコアは、両方をサポートしてよい（勿論、コアは、両方のクラスからの複数のテンプレート及び命令の何らかの組み合わせを有するが、両方のクラスからの複数のテンプレート及び命令の全てが本発明の範囲内にある訳ではない）。また、単一のプロセッサは、複数のコアを含んでよく、その全ては、同じクラスをサポートし、又はその複数の異なるコアは、異なるクラスをサポートする。例えば、別個のグラフィック及び汎用コアを有するプロセッサにおいて、主にグラフィック及び／又は科学的コンピューティング向けの複数のグラフィックコアの１つは、クラスＡのみをサポートしてよく、複数の汎用コアのうちの１つ又は複数は、クラスＢのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行及びレジスタリネーミングを伴う高性能汎用コアであってよい。別個のグラフィックコアを有さない他のプロセッサは、クラスＡ及びクラスＢの両方をサポートするもう１つの汎用インオーダ又はアウトオブオーダコアを含んでよい。勿論、１つのクラスからの機能は、本発明の複数の異なる実施形態において、他のクラスに実装されてもよい。高水準言語で記述される複数のプログラムは、１）実行のためにターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、又は２）全クラスの複数の命令の異なる組み合わせを用いて記述される代替的な複数のルーチンを有し、コードを現在実行しているプロセッサによってサポートされる複数の命令に基づいて実行する、複数のルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされる（例えば、ジャストインタイムでコンパイルされ、又は静的にコンパイルされる）。
【０１０９】
［例示的な特定ベクトル向け命令フォーマット］
図１１Ａ−Ｄは、本発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図１１Ａ−Ｄは、特定ベクトル向け命令フォーマット１１００を示し、これは、複数のフィールドの位置、サイズ、解釈、及び順序、ならびにこれらのフィールドのいくつかの値を指定するという意味で特定的である。特定ベクトル向け命令フォーマット１１００は、ｘ８６命令セットを拡張するために用いられてよく、そこで、複数のフィールドのいくつかは、既存のｘ８６命令セット及びその拡張（例えばＡＶＸ）で用いられたものと同様の又は同じものとなる。このフォーマットは、拡張された既存のｘ８６命令セットのプレフィクスエンコードフィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド及び複数の即値フィールドと整合性のある状態を保つ。図１１Ａ−Ｄからの複数のフィールドがマップされる図１０Ａ−Ｂからの複数のフィールドが示される。
【０１１０】
本発明の複数の実施形態が、例示目的のため、汎用ベクトル向け命令フォーマット１０００に関して特定ベクトル向け命令フォーマット１１００を参照して説明されるが、本発明は、特許請求の範囲に記載されたものを除き、特定ベクトル向け命令フォーマット１１００に限定されるものではないことを理解されたい。例えば、汎用ベクトル向け命令フォーマット１０００は、様々なフィールドに適用可能な様々なサイズを企図し、特定ベクトル向け命令フォーマット１１００は、具体的な複数のサイズの複数のフィールドを有するものとして示される。具体例として、データエレメント幅フィールド１０６４は、特定ベクトル向け命令フォーマット１１００の１ビットフィールドとして示されるが、本発明は、これに限定されるものではない（すなわち、汎用ベクトル向け命令フォーマット１０００は、データエレメント幅フィールド１０６４の複数の他のサイズを企図する）。
【０１１１】
汎用ベクトル向け命令フォーマット１０００は、図１１Ａに示される順序で、以下に列挙される複数の以下のフィールドを含む。
【０１１２】
ＥＶＥＸプレフィクス（バイト０−３）１１０２−これは、４バイト形式でエンコードされる。
【０１１３】
フォーマットフィールド１０４０（ＥＶＥＸバイト０、ビット［７：０］）−第１のバイト（ＥＶＥＸバイト０）は、フォーマットフィールド１０４０であり、これは、０ｘ６２（本発明の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる固有値）を含む。
【０１１４】
第２−第４のバイト（ＥＶＥＸバイト１−３）は、具体的な機能を提供する多数のビットフィールドを含む。
【０１１５】
ＲＥＸフィールド１１０５（ＥＶＥＸバイト１、ビット［７−５］）−これは、ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、及び１０５７ＢＥＸバイト１、ビット［５］−Ｂ）から構成される。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂビットフィールドは、対応する複数のＶＥＸビットフィールドと同じ機能を提供し、１の補数形式を用いてエンコードされ、すなわち、ＺＭＭ０は１１１１Ｂとしてエンコードされ、ＺＭＭ１５は００００Ｂとしてエンコードされる。当技術分野において公知なように、複数の命令の複数の他のフィールドが複数のレジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）をエンコードし、これにより、Ｒｒｒｒ、Ｘｘｘｘ、及びＢｂｂｂは、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ及びＥＶＥＸ．Ｂを加算することによって形成されてよい。
【０１１６】
ＲＥＸ'フィールド１０１０−これは、ＲＥＸ'フィールド１０１０の第１の部分であり、拡張された３２個のレジスタセットの上位１６又は下位１６のいずれかをエンコードするために用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本発明の一実施形態において、このビットは、以下に示されるように他の複数のビットと共に、ビット反転フォーマットでストアされることにより、リアルオペコードバイトは６２であるが、（後述の）ＭＯＤ  Ｒ／ＭフィールドにおいてＭＯＤフィールドの値１１を受け付けない（周知のｘ８６の３２ビットモードにおける）ＢＯＵＮＤ命令から区別するが、本発明の複数の代替的な実施形態は、これ及び以下に示される反転フォーマットの他のビットをストアしない。１の値は、下位１６個のレジスタをエンコードするために用いられる。換言すると、Ｒ'Ｒｒｒｒは、複数の他のフィールドからのＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、及び他のＲＲＲを組み合わせることによって形成される。
【０１１７】
オペコードマップフィールド１１１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−このコンテンツは、黙示された先頭オペコードバイト（ＯＦ、ＯＦ３８、又はＯＦ３）をエンコードする。
【０１１８】
データエレメント幅フィールド１０６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）−これは、ＥＶＥＸ．Ｗという表記によって表される。ＥＶＥＸ．Ｗは、データタイプの粒度（サイズ）を定義するために用いられる（３２ビットデータエレメント又は複数の６４ビットデータエレメントのいずれか）。
【０１１９】
ＥＶＥＸ．ｖｖｖｖ１１２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は、以下の、１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で指定される第１のソースレジスタオペランドをエンコードし、２つ又はそれより多くのソースオペランドを有する複数の命令に対して有効であり、２）ＥＶＥＸ．ｖｖｖｖは、特定の複数のベクトルシフトに対して１の補数形式で指定されるデスティネーションレジスタオペランドをエンコードし、又は３）ＥＶＥＸ．ｖｖｖｖは、いずれのオペランドもエンコードせず、フィールドは予約されて１１１１ｂを含まなくてはならないということを含んでよい。そこで、ＥＶＥＸ．ｖｖｖｖフィールド１１２０は、反転（１の補数）形式でストアされる第１のソースレジスタ指定子の下位４ビットをエンコードする。命令に応じて、追加の異なるＥＶＥＸビットフィールドは、指定子サイズを３２個のレジスタに拡張するために用いられる。
【０１２０】
ＥＶＥＸ．Ｕ１０６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０の場合、これは、クラスＡ又はＥＶＥＸ．Ｕ０を示す。ＥＶＥＸ．Ｕ＝１の場合、これは、クラスＢ又はＥＶＥＸ．Ｕ１を示す。
【０１２１】
プレフィクスエンコードフィールド１１２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−これは、ベースオペレーションフィールドに複数の追加ビットを提供する。ＥＶＥＸプレフィクスフォーマットの複数のレガシＳＳＥ命令に対するサポートを提供することに加えて、これは、ＳＩＭＤプレフィクスを圧縮するという利益をさらに有する（ＳＩＭＤプレフィクスを表すためのバイトを必要とするのではなく、ＥＶＥＸプレフィクスは、２ビットのみを必要とする）。一実施形態において、レガシフォーマット及びＥＶＥＸプレフィクスフォーマットの両方のＳＩＭＤプレフィクス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いる複数のレガシＳＳＥ命令をサポートするために、これらの複数のレガシＳＩＭＤプレフィクスは、ＳＩＭＤプレフィクスエンコードフィールドにエンコードされ、デコーダのＰＬＡに提供される前に、ランタイムにおいて、レガシＳＩＭＤプレフィクスに拡張される（そのためＰＬＡは、これらの複数のレガシ命令のレガシ及びＥＶＥＸフォーマットの両方を、変更することなく実行してよい）。より新たな複数の命令は、ＥＶＥＸプレフィクスエンコードフィールドのコンテンツを、オペコード拡張として直接用いることができたが、複数の特定の実施形態は、整合性に関して同様の態様で拡張するが、これらのレガシＳＩＭＤプレフィクスによって指定される異なる複数の意味を可能とする。代替的な実施形態は、２ビットＳＩＭＤプレフィクスの複数のエンコードをサポートするＰＬＡを再設計し、そこで、拡張を必要としない。
【０１２２】
アルファフィールド１０５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ。ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌ、及びＥＶＥＸ．Ｎとしても知られ、さらにαにより示される）−前述されたように、このフィールドは、コンテキスト固有である。
【０１２３】
ベータフィールド１０５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ。ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒｌ、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、さらにβββにより示される）−前述されたように、このフィールドは、コンテキスト固有である。
【０１２４】
ＲＥＸ'フィールド１０１０−これは、ＲＥＸ'フィールドの残りであり、拡張された３２個のレジスタセットの上位１６又は下位１６のいずれかをエンコードするために利用可能なＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットは、ビット反転フォーマットでストアされる。１の値は、下位１６個のレジスタをエンコードするために用いられる。換言すると、Ｖ'ＶＶＶＶは、ＥＶＥＸ．Ｖ、ＥＶＥＸ．ｖｖｖｖを組み合わせることによって形成される。
【０１２５】
ライトマスクフィールド１０７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−このコンテンツは、前述されたように、複数のライトマスクレジスタにおいてレジスタのインデックスを指定する。本発明の一実施形態において、特定値ＥＶＥＸ．ｋｋｋ＝０００は、特定の命令のために用いられるライトマスクがないことを示唆する特別な動作を有する（これは、ハードウェアに組み込まれた全てのライトマスク又はマスキングハードウェアを回避するハードウェアを用いることを含む、様々な態様で実装されてよい）。
【０１２６】
リアルオペコードフィールド１１３０（バイト４）−これは、オペコードバイトとしても知られる。オペコードの一部は、このフィールドで指定される。
【０１２７】
ＭＯＤ  Ｒ／Ｍフィールド１１４０（バイト５）は、ＭＯＤフィールド１１４２、Ｒｅｇフィールド１１４４、及びＲ／Ｍフィールド１１４６を含む。前述されたように、ＭＯＤフィールド１１４２のコンテンツは、メモリアクセス及び非メモリアクセスオペレーションの間で区別する。Ｒｅｇフィールド１１４４の役割は、デスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかをエンコードする、もしくはオペコード拡張として扱われ、いずれの命令オペランドをエンコードするためにも用いられないという、２つの状況に要約されてよい。Ｒ／Ｍフィールド１１４６の役割は、以下のものを含んでよい。すなわち、メモリアドレスを参照する命令オペランドをエンコードする、又はデスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかをエンコードすることである。
【０１２８】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−前述されたように、スケールフィールド１０５０のコンテンツは、メモリアドレス生成のために用いられる。ＳＩＢ．ｘｘｘ１１５４及びＳＩＢ．ｂｂｂ１１５６−これらの複数のフィールドのコンテンツは、複数のレジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前述されている。
【０１２９】
変位フィールド１０６２Ａ（バイト７―１０）−ＭＯＤフィールド１１４２が１０を含む場合、バイト７−１０は変位フィールド１０６２Ａであり、これは、レガシ３２ビット変位（ｄｉｓｐ３２）と同じように機能し、バイト粒度で機能する。
【０１３０】
変位係数フィールド１０６２Ｂ（バイト７）−ＭＯＤフィールド１１４２が０１を含む場合、バイト７は、変位係数フィールド１０６２Ｂである。このフィールドの位置は、バイト粒度で機能するレガシｘ８６命令セットの８ビット変位（ｄｉｓｐ８）と同じである。ｄｉｓｐ８は拡張されるサインであるため、これは、−１２８から１２７バイトまでの間のオフセットにのみアドレスしてよく、６４バイトの複数のキャッシュラインに関して、ｄｉｓｐ８は、実に有用な４つの値−１２８、−６４、０及び６４にのみセット可能な８ビットを用い、多くの場合はより広範囲が必要となるのでｄｉｓｐ３２が用いられる。しかしながら、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８及びｄｉｓｐ３２と対照的に、変位係数フィールド１０６２Ｂは、ｄｉｓｐ８の再解釈であり、変位係数フィールド１０６２Ｂを用いる場合、実際の変位は、メモリオペランドアクセス（Ｎ）のサイズによって乗算された変位係数フィールドのコンテンツによって決定される。このタイプの変位は、ｄｉｓｐ８＊Ｎと称される。これにより、平均命令長（変位のために用いられる単一のバイトであるが、はるかにより広範囲を有する）が減少する。このような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づいており、従って、アドレスオフセットの複数の冗長下位ビットは、エンコードされる必要がない。換言すると、変位係数フィールド１０６２Ｂは、レガシｘ８６命令セットの８ビット変位を置換する。そこで、変位係数フィールド１０６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎに対して過負荷になるという場合のみを例外として、ｘ８６命令セットの８ビット変位と同じ態様でエンコードされる（そのため、ＭｏｄＲＭ／ＳＩＢエンコードルールは変更されない）。換言すると、（バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズで変位をスケーリングする必要がある）ハードウェアによる変位値の解釈のみを除き、エンコードルール又はエンコード長さは変更されない。即値フィールド１０７２は、前述されたように動作する。
【０１３１】
［フルオペコードフィールド］
図１１Ｂは、本発明の一実施形態に係るフルオペコードフィールド１０７４を構成する特定ベクトル向け命令フォーマット１１００の複数のフィールドを示すブロック図である。具体的には、フルオペコードフィールド１０７４は、フォーマットフィールド１０４０、ベースオペレーションフィールド１０４２、及びデータエレメント幅（Ｗ）フィールド１０６４を含む。ベースオペレーションフィールド１０４２は、プレフィクスエンコードフィールド１１２５、オペコードマップフィールド１１１５、及びリアルオペコードフィールド１１３０を含む。
【０１３２】
［レジスタインデックスフィールド］
図１１Ｃは、本発明の一実施形態に係るレジスタインデックスフィールド１０４４を構成する特定ベクトル向け命令フォーマット１１００の複数のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド１０４４は、ＲＥＸフィールド１１０５、ＲＥＸ'フィールド１１１０、ＭＯＤＲ／Ｍ．Ｒｅｇフィールド１１４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１１４６、ＷＷフィールド１１２０、ｘｘｘフィールド１１５４、及びｂｂｂフィールド１１５６を含む。
【０１３３】
［増加オペレーションフィールド］
図１１Ｄは、本発明の一実施形態に係る増加オペレーションフィールド１０５０を構成する特定ベクトル向け命令フォーマット１１００の複数のフィールドを示すブロック図である。クラス（Ｕ）フィールド１０６８が０を含む場合、これはＥＶＥＸ．Ｕ０（クラスＡ１０６８Ａ）を示し、これが１を含む場合、これはＥＶＥＸ．Ｕ１（クラスＢ１０６８Ｂ）を示す。
【０１３４】
Ｕ＝０、かつＭＯＤフィールド１１４２が１１を含む（メモリアクセスオペレーションなしを示す）場合、アルファフィールド１０５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド１０５２Ａと解釈される。ＲＳフィールド１０５２Ａが１（ラウンド１０５２Ａ．１）を含む場合、ベータフィールド１０５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ラウンド制御フィールド１０５４Ａと解釈される。ラウンド制御フィールド１０５４Ａは、１ビットのＳＡＥフィールド１０５６及び２ビットのラウンドオペレーションフィールド１０５８を含む。ｒｓフィールド１０５２Ａが０（データ変換１０５２Ａ．２）を含む場合、ベータフィールド１０５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド１０５４Ｂと解釈される。Ｕ＝０、かつＭＯＤフィールド１１４２が００、０１又は１０を含む（メモリアクセスオペレーションを示す）場合、アルファフィールド１０５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、追い出し示唆（ＥＨ）フィールド１０５２Ｂと解釈され、ベータフィールド１０５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド１０５４Ｃと解釈される。
【０１３５】
Ｕ＝１の場合、アルファフィールド１０５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ライトマスク制御（Ｚ）フィールド１０５２Ｃと解釈される。Ｕ＝１、かつＭＯＤフィールド１１４２が１１を含む（非メモリアクセスオペレーションを示す）場合、ベータフィールド１０５４（ＥＶＥＸバイト３、ビット［４］−Ｓ０）の一部はＲＬフィールド１０５７Ａと解釈される。これが１（ラウンド１０５７Ａ．１）を含む場合、ベータフィールド１０５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りはラウンドオペレーションフィールド１０５９Ａと解釈され、ＲＬフィールド１０５７Ａが０（ＶＳＩＺＥ１０５７．Ａ２）を含む場合、ベータフィールド１０５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りはベクトル長フィールド１０５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）と解釈される。Ｕ＝１、かつＭＯＤフィールド１１４２が００、０１又は１０を含む（メモリアクセスオペレーションを示す）場合、ベータフィールド１０５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド１０５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）及びブロードキャストフィールド１０５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）と解釈される。
【０１３６】
［例示的なレジスタアーキテクチャ］
図１２は、本発明の一実施形態に係るレジスタアーキテクチャ１２００のブロック図である。図示された実施形態において、３２個の５１２ビット幅ベクトルレジスタ１２１０が存在し、これらのレジスタは、ｚｍｍ０からｚｍｍ３１と称される。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０−１６にオーバレイされる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０−１５にオーバレイされる。特定ベクトル向け命令フォーマット１１００は、これらのオーバレイされたレジスタファイルに対して、以下の表に示されるように動作する。
【表１】
0006374975.tif 000010
【０１３７】
換言すると、ベクトル長フィールド１０５９Ｂは、最大長さと１つ又は複数の他のより短い長さとの間で選択し、ここで、このようなより短い長さの各々は、先行の長さの半分の長さであり、ベクトル長フィールド１０５９Ｂを有さない複数の命令のテンプレートは、最大ベクトル長において動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット１１００の複数のクラスＢ命令テンプレートは、パックド又はスカラ単／倍精度浮動小数点データ及びパックド又はスカラ整数データに対して動作する。複数のスカラオペレーションは、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタの最下位データエレメント位置において実行されるオペレーションであり、より上位の複数のデータエレメント位置は、実施形態に応じて、命令前と同じ状態で残されるか又はゼロにされるかのいずれかである。
【０１３８】
ライトマスクレジスタ１２１５−図示された実施形態において、８個のライトマスクレジスタ（ｋ０からｋ７）が存在し、各サイズは６４ビットである。代替的な実施形態において、複数のライトマスクレジスタ１２１５は、１６ビットのサイズである。前述されたように、本発明の一実施形態において、ベクトルマスクレジスタｋ０は、ライトマスクとして用いられることができず、ｋ０を標準的に示すエンコードがライトマスクに用いられる場合、これは、ハードウェアに組み込まれるライトマスク０ｘＦＦＦＦを選択し、当該命令に対し、有効にライトマスクを無効化する。
【０１３９】
汎用レジスタ１２２５−図示された実施形態において、複数のメモリオペランドにアドレスする既存の複数のｘ８６アドレッシングモードと共に用いられる１６個の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８からＲ１５という名称で参照される。
【０１４０】
ＭＭＸパックド整数フラットレジスタファイル１２５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１２４５−図示された実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点の複数のオペレーションを実行するために用いられる８エレメントスタックであり、複数のＭＭＸレジスタは、６４ビットパックド整数データに対して複数のオペレーションを実行し、ＭＭＸ及びＸＭＭレジスタの間で実行されるいくつかのオペレーションのための複数のオペランドを保持するために用いられる。本発明の複数の代替的な実施形態は、より広い又はより狭いレジスタを用いてよい。 
【０１４１】
さらに、本発明の複数の代替的な実施形態は、より多くの、より少ない、又は異なるレジスタファイル及びレジスタを用いてよい。
【０１４２】
［例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ］
複数のプロセッサコアは、複数の異なる態様で、複数の異なる目的のために、複数の異なるプロセッサにおいて実装されてよい。例えば、このようなコアの実装は、以下の、１）汎用コンピューティング向けの汎用インオーダコア、２）汎用コンピューティング向けの高性能汎用アウトオブオーダコア、３）主にグラフィック及び／又は科学的（スループット）コンピューティング向けの特定用途向けコアを含んでよい。異なるプロセッサの実装は、１）汎用コンピューティング向けの１つ又は複数の汎用インオーダコア及び／又は汎用コンピューティング向けの１つ又は複数の汎用アウトオブオーダコアを含むＣＰＵ、及び２）主にグラフィック及び／又は科学的（スループット）向けの１つ又は複数の特定用途向けコアを含むコプロセッサを含んでよい。このような異なるプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内で別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、このようなコプロセッサは、場合によっては統合グラフィック及び／又は科学的（スループット）ロジックのような特定用途向けロジック、又は複数の特定用途向けコアと称される）、及び４）同じダイ上で、説明されたＣＰＵ（場合によってはアプリケーションコア又はアプリケーションプロセッサと称される）、上述されたコプロセッサ及び追加的な機能を含み得るシステムオンチップを含んでよい複数の異なるコンピュータシステムアーキテクチャをもたらす。次に、複数の例示的なコアアーキテクチャが説明され、その次に、例示的な複数のプロセッサ及びコンピュータアーキテクチャが説明される。
【０１４３】
［例示的なコアアーキテクチャ］
［インオーダ及びアウトオブオーダコアのブロック図］
図１３Ａは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図１３Ｂは、本発明の複数の実施形態に係るプロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態、及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図１３Ａ−Ｂにおける複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、任意に追加された複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであることを前提に、アウトオブオーダ態様が説明される。
【０１４４】
図１３Ａにおいて、プロセッサパイプライン１３００が、フェッチステージ１３０２、長さデコードステージ１３０４、デコードステージ１３０６、割り当てステージ１３０８、リネーミングステージ１３１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ１３１２、レジスタ読み出し／メモリ読み出しステージ１３１４、実行ステージ１３１６、ライトバック／メモリ書き込みステージ１３１８、例外処理ステージ１３２２、及びコミットステージ１３２４を含む。
【０１４５】
図１３Ｂは、実行エンジンユニット１３５０に結合されるフロントエンドユニット１３３０を含むプロセッサコア１３９０を示し、両方ともメモリユニット１３７０に結合されている。コア１３９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッドもしくは代替的なコアタイプであってよい。さらに他の選択肢において、コア１３９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット（ＧＰＧＰＵ）コア、グラフィックコア等のような特定用途向けコアであってよい。
【０１４６】
フロントエンドユニット１３３０は、命令キャッシュユニット１３３４に結合される分岐予測ユニット１３３２を含み、命令キャッシュユニット１３３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）１３３３６に結合され、命令トランスレーションルックアサイドバッファ１３３６は命令フェッチユニット１３３８に結合され、命令フェッチユニット１３３８はデコードユニット１３４０に結合される。デコードユニット１３４０（又はデコーダ）は、複数の命令をデコードし、出力として、１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は元の複数の命令からデコードされた、もしくはこれらを他の方法で反映する、もしくはこれらから得られた他の制御信号を生成してよい。デコードユニット１３４０は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等を含む。一実施形態において、コア１３９０は、マイクロコードＲＯＭ又は（例えば、デコードユニット１３４０、さもなければフロントエンドユニット１３３０内で）特定の複数のマクロ命令に対するマイクロコードをストアする他の媒体を含む。デコードユニット１３４０は、実行エンジンユニット１３５０においてリネーム／アロケータユニット１３５２に結合される。
【０１４７】
実行エンジンユニット１３５０は、リタイアメントユニット１３５４及び１つ又は複数のスケジューラユニット１３５６のセットに結合されるリネーム／アロケータユニット１３５２を含む。スケジューラユニット１３５６は、複数の予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット１３５６は、物理レジスタファイルユニット１３５８に結合される。複数の物理レジスタファイルユニット１３５８の各々は、１つ又は複数の物理レジスタファイルを表し、その中の異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、次に実行される命令のアドレスである命令ポインタ）等のような１つ又は複数の異なるデータタイプをストアする。一実施形態において、物理レジスタファイルユニット１３５８は、ベクトルレジスタユニット、ライトマスクレジスタユニット、及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ及び汎用レジスタを提供してよい。物理レジスタファイルユニット１３５８は、リタイアメントユニット１３５４によってオーバラップされ、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な態様（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いて、ならびにレジスタマップ及び複数のレジスタのプールを用いて、等）を示す。リタイアメントユニット１３５４及び物理レジスタファイルユニット１３５８は、実行クラスタ１３６０に結合される。実行クラスタ１３６０は、１つ又は複数の実行ユニット１３６２のセット及び１つ又は複数のメモリアクセスユニット１３６４のセットを含む。複数の実行ユニット１３６２は、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々なオペレーション（例えば、複数のシフト、加算、減算、乗算）を実行してよい。いくつかの実施形態は、具体的な複数の機能又は複数の機能の複数のセット専用の多数の実行ユニットを含んでよく、他の複数の実施形態は、１つだけの実行ユニット又は全ての機能を全てで実行する複数の実行ユニットを含んでよい。複数の特定の実施形態は、複数の特定のタイプのデータ／オペレーションに対して別個のパイプラインを形成するので、スケジューラユニット１３５６、物理レジスタファイルユニット１３５８、及び実行クラスタ１３６０は、複数として示される可能性がある（例えば、各々がこれら自体のスケジューラユニット、物理レジスタファイルユニット、及び／又は実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプラインは、及び別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット１３６４を有する複数の特定の実施形態が実装される）。複数の別個のパイプラインが用いられる場合、これらのパイプラインの１つ又は複数はアウトオブオーダ発行／実行で、残りはインオーダであってよいことも理解されたい。
【０１４８】
複数のメモリアクセスユニット１３６４のセットは、メモリユニット１３７０に結合され、メモリユニット１３７０は、二次（Ｌ２）キャッシュユニット１３７６に結合されるデータキャッシュユニット１３７４に結合されるデータＴＬＢユニット１３７２を含む。例示的な一実施形態において、メモリアクセスユニット１３６４は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらの各々は、メモリユニット１３７０のデータＴＬＢユニット１３７２に結合される。命令キャッシュユニット１３３４は、メモリユニット１３７０における二次（Ｌ２）キャッシュユニット１３７６にさらに結合される。Ｌ２キャッシュユニット１３７６は、１つ又は複数の他のレベルのキャッシュに、最終的にはメインメモリに結合される。
【０１４９】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン１３００を以下のように実装してよい。１）命令フェッチ１３３８が、フェッチステージ１３０２及び長さデコードステージ１３０４を実行し、２）デコードユニット１３４０が、デコードステージ１３０６を実行し、３）リネーム／アロケータユニット１３５２が、割り当てステージ１３０８及びリネーミングステージ１３１０を実行し、４）スケジューラユニット１３５６が、スケジューリングステージ１３１２を実行し、５）物理レジスタファイルユニット１３５８及びメモリユニット１３７０が、レジスタ読み出し／メモリ読み出しステージ１３１４を実行し、実行クラスタ１３６０が、実行ステージ１３１６を実行し、６）メモリユニット１３７０及び物理レジスタファイルユニット１３５８が、ライトバック／メモリ書き込みステージ１３１８を実行し、７）様々な複数のユニットが、例外処理ステージ１３２２に関与してよく、８）リタイアメントユニット１３５４及び物理レジスタファイルユニット１３５８が、コミットステージ１３２４を実行する。
【０１５０】
コア１３９０は、本明細書において説明される命令を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（複数のより新たなバージョンと共に追加された、いくつかの拡張を有する）カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスの（ＮＥＯＮのような任意で追加的な拡張を有する）ＡＲＭ命令セット）をサポートしてよい。一実施形態において、コア１３９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、これによって、多くのマルチメディアアプリケーションによって用いられる複数のオペレーションがパックドデータを用いて実行されることを可能にする。
【０１５１】
コアは、マルチスレッディング（複数のオペレーション又は複数のスレッドの２つ又はそれより多くの並列セットを実行すること）をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング（単一の物理コアが複数のスレッドの各々に対して論理コアを提供することにより、物理コアが同時マルチスレッディングを実行すること）又はこれらの組み合わせ（例えば、時分割フェッチ及びデコード、その後、インテル（登録商標）ハイパースレッディング技術におけるもののような同時マルチスレッディング）を含む様々な態様で、マルチスレッディングを実行してよいことを理解されたい。
【０１５２】
アウトオブオーダ実行に関してレジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられてよいことを理解されたい。プロセッサの図示された実施形態は、別個の命令及びデータキャッシュユニット１３３４／１３７４、及び共有のＬ２キャッシュユニット１３７６をさらに含むが、複数の代替的な実施形態は、複数の命令及びデータの両方のために、例えば、一次（Ｌ１）内部キャッシュ、又は複数のレベルの内部キャッシュのような単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、キャッシュの全ては、コア及び／又はプロセッサの外部にあってよい。
【０１５３】
［詳細な例示的インオーダコアアーキテクチャ］
図１４Ａ−Ｂは、より詳細な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプ及び／又は異なるタイプの他の複数のコアを含む）の中の１つであってよい。複数の論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、いくつかの固定機能ロジック、メモリＩ／Ｏインタフェース及び他の必要なＩ／Ｏロジックと通信を行う。
【０１５４】
図１４Ａは、本発明の複数の実施形態に係る、単一のプロセッサコアのブロック図であって、そのオンダイ相互接続ネットワーク１４０２への接続、及びその二次（Ｌ２）キャッシュのローカルサブセット１４０４と共に示す。一実施形態において、命令デコーダ１４００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１４０６によれば、キャッシュメモリ、さらにはスカラ及びベクトルユニットへの低レイテンシアクセスが可能である。一実施形態において、（設計の単純化のために）スカラユニット１４０８及びベクトルユニット１４１０は、別個のレジスタセット（それぞれ、複数のスカラレジスタ１４１２及び複数のベクトルレジスタ１４１４）を用い、これらの間で転送されるデータは、一次（Ｌ１）キャッシュ１４０６のメモリに書き込まれてから再読み出しされるが、本発明の複数の代替的な実施形態は、異なるアプローチ（例えば、単一のレジスタセットを用いる、又は書き込み及び再読み出しを行うことなく、２つのレジスタファイル間でのデータ転送を可能にする通信パスを含む）を用いてよい。
【０１５５】
Ｌ２キャッシュのローカルサブセット１４０４は、プロセッサコア毎に１つの別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ自体のローカルサブセット１４０４への直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、そのＬ２キャッシュサブセット１４０４にストアされ、他の複数のプロセッサコアがこれら自体の複数のローカルＬ２キャッシュサブセットにアクセスするのと並列に、迅速にアクセスされることができる。プロセッサコアによって書き込まれたデータは、それ自体のＬ２キャッシュサブセット１４０４にストアされ、他の複数のサブセットから、必要に応じてフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、Ｌ２キャッシュ及び他の論理ブロックのようなエージェントは、チップ内で互いに通信を行うことが可能となる。各リングデータパスは、方向毎に１０１２ビット幅である。
【０１５６】
図１４Ｂは、本発明の複数の実施形態に係る図１４Ａのプロセッサコアの一部の拡大図である。図１４Ｂは、Ｌ１キャッシュ１４０４の一部であるＬ１データキャッシュ１４０６Ａを含むとともに、ベクトルユニット１４１０及びベクトルレジスタ１４１４に関してより詳細に示す。具体的には、ベクトルユニット１４１０は、整数、単精度浮動及び倍精度浮動命令のうちの１つ又は複数を実行する１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ１４２８を参照）である。ＶＰＵは、再構成ユニット１４２０による複数のレジスタ入力の再構成、数値変換ユニット１４２２Ａ−Ｂによる数値変換、及び複製ユニット１４２４によるメモリ入力に対する複製をサポートする。複数のライトマスクレジスタ１４２６は、結果的な複数のベクトル書き込みのプレディケートを可能とする。
【０１５７】
［統合メモリコントローラ及びグラフィックを有するプロセッサ］
図１５は、本発明の複数の実施形態に係るプロセッサ１５００のブロック図であり、これは、１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックを有してよい。図１５の複数の実線のボックスは、単一のコア１５０２Ａを有するプロセッサ１５００、システムエージェント１５１０、１つ又は複数のバスコントローラユニット１５１６のセットを示し、任意に追加された複数の破線のボックスは、複数のコア１５０２Ａ−Ｎを有する代替的なプロセッサ１５００、システムエージェントユニット１５１０における１つ又は複数の統合メモリコントローラユニット１５１４のセット、及び特定用途向けロジック１５０８を示す。
【０１５８】
そこで、プロセッサ１５００の複数の異なる実装は、１）（１つ又は複数のコアを含み得る）統合グラフィック及び／又は科学的（スループット）ロジックである特定用途向けロジック１５０８、及び１つ又は複数の汎用コア（例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら２つの組み合わせ）である複数のコア１５０２Ａ−Ｎを有するＣＰＵ、２）主にグラフィック及び／又は科学的（スループット）向けの多数の特定用途向けコアである複数のコア１５０２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアである複数のコア１５０２Ａ−Ｎを有するコプロセッサを含んでよい。そこで、プロセッサ１５００は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ（汎用グラフィック処理ユニット）、ハイスループット多集積コア（ＭＩＣ）コプロセッサ（３０個又はそれより多くのコアを含む）、組み込みプロセッサ等のような、汎用プロセッサ、コプロセッサ又は特定用途プロセッサであってよい。プロセッサは、１つ又は複数のチップ上に実装されてよい。
【０１５９】
プロセッサ１５００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳのような、多数の処理技術のいずれかを用いた１つ又は複数の基板の一部であってよく、及び／又はその上に実装されてよい。
【０１６０】
メモリ階層は、複数のコア内の１つ又は複数のレベルのキャッシュ、複数の共有キャッシュユニット１５０６のセット又はこれらの１つ又は複数、及び複数の統合メモリコントローラユニット１５１４のセットに結合された外部メモリ（不図示）を含む。複数の共有キャッシュユニットのセット１５０６のセットは、二次（Ｌ２）、三次（Ｌ３）、四次（Ｌ４）又は他の複数のレベルのキャッシュのような１つ又は複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）及び／又はこれらの複数の組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット１５１２が、統合グラフィックロジック１５０８、複数の共有キャッシュユニット１５０６のセット及びシステムエージェントユニット１５１０／統合メモリコントローラユニット１５１４を相互接続するが、複数の代替的な実施形態は、このような複数のユニットを相互接続するための任意の数の周知技術を用いてよい。一実施形態において、１つ又は複数のキャッシュユニット１５０６とコア１５０２−Ａ−Ｎとの間で、コヒーレンシが維持される。
【０１６１】
いくつかの実施形態において、コア１５０２Ａ−Ｎの１つ又は複数は、マルチスレッディング可能である。システムエージェント１５１０は、コア１５０２Ａ−Ｎを調整及びオペレーションするこれらのコンポーネントを含む。システムエージェントユニット１５１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでよい。ＰＣＵは、コア１５０２Ａ−Ｎ及び統合グラフィックロジック１５０８の電力状態を調整するために必要なロジック及び複数のコンポーネントであってよく、又はこれらを含んでよい。ディスプレイユニットは、１つ又は複数の外部接続されたディスプレイを駆動するためのものである。
【０１６２】
コア１５０２Ａ−Ｎは、アーキテクチャ命令セットに関してホモジニアス又はヘテロジニアスであってよく、すなわち、コア１５０２Ａ−Ｎの２つ又はそれより多くは、同じ命令セットを実行可能であってよく、他のものは、当該命令セット又は異なる命令セットのサブセットのみを実行可能であってよい。
【０１６３】
［例示的なコンピュータアーキテクチャ］
図１６−１９は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野において公知の複数の他のシステム設計及び構成も適している。概して、本明細書で開示されるように、プロセッサ及び／又は他の実行ロジックを組み込み可能な多様なシステム又は電子デバイスが、概して適している。
【０１６４】
ここで図１６を参照すると、本発明の一実施形態に係るシステム１６００のブロック図が示される。システム１６００は、コントローラハブ１６２０に結合される１つ又は複数のプロセッサ１６１０、１６１５を含んでよい。一実施形態において、コントローラハブ１６２０は、グラフィックメモリコントローラハブ（ＧＭＣＨ）１６９０及び入力／出力ハブ（ＩＯＨ）１６５０を含み（これらは別個のチップ上にあってよい）、ＧＭＣＨ１６９０は、メモリ１６４０及びコプロセッサ１６４５が結合されるメモリ及びグラフィックコントローラを含み、ＩＯＨ１６５０は、複数の入力／出力（Ｉ／Ｏ）デバイス１６６０をＧＭＣＨ１６９０に結合する。あるいは、メモリ及びグラフィックコントローラの一方又は両方は、（本明細書で説明されたように）プロセッサ内で統合され、メモリ１６４０及びコプロセッサ１６４５は、プロセッサ１６１０及びＩＯＨ１６５０と共に単一のチップにあるコントローラハブ１６２０と、直接的に結合される。
【０１６５】
複数の追加のプロセッサ１６１５の任意の性質が、図１６において、破線で示される。各プロセッサ１６１０、１６１５は、本明細書で説明される複数の処理コアのうちの１つ又は複数を含んでよく、プロセッサ１５００の何らかのバージョンであってよい。
【０１６６】
メモリ１６４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）又はこれら２つの組み合わせであってよい。少なくとも一実施形態では、コントローラハブ１６２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ）のようなポイントツーポイントインタフェース、又は同様の接続１６９５を介して、プロセッサ１６１０、１６１５と通信を行う。
【０１６７】
一実施形態において、コプロセッサ１６４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような特定用途向けプロセッサである。一実施形態において、コントローラハブ１６２０は、統合グラフィックアクセラレータを含んでよい。
【０１６８】
物理リソース１６１０、１６１５の間には、アーキテクチャ上、マイクロアーキテクチャ上、熱的、電力消費等の特性を含む利点の様々な基準に関して、様々な違いが存在し得る。
【０１６９】
一実施形態において、プロセッサ１６１０は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれてよい。プロセッサ１６１０は、取り付けられたコプロセッサ１６４５によって実行されるべきタイプとして、これらの複数のコプロセッサ命令を認識する。従って、プロセッサ１６１０は、コプロセッサバス又は他の相互接続に対し、コプロセッサ１６４５へのこれらの複数のコプロセッサ命令（又は複数のコプロセッサ命令を表す複数の制御信号）を発行する。コプロセッサ１６４５は、複数のコプロセッサ命令を受け付け、受信された複数のコプロセッサ命令を実行する。
【０１７０】
ここで図１７を参照すると、本発明の実施形態に係る、第１のより詳細な例示的システム１７００のブロック図が示される。図１７に示されるように、マルチプロセッサシステム１７００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１７５０を介して結合される第１のプロセッサ１７７０及び第２のプロセッサ１７８０を含む。プロセッサ１７７０及び１７８０の各々は、プロセッサ１５００の何らかのバージョンであってよい。本発明の一実施形態において、プロセッサ１７７０及び１７８０は、それぞれプロセッサ１６１０及び１６１５であり、コプロセッサ１７３８は、コプロセッサ１６４５である。他の実施形態において、プロセッサ１７７０及び１７８０は、それぞれプロセッサ１６１０、コプロセッサ１６４５である。
【０１７１】
プロセッサ１７７０及び１７８０は、それぞれ、統合メモリコントローラ（ＩＭＣ）ユニット１７７２及び１７８２を含むものとして示される。プロセッサ１７７０は、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１７７６及び１７７８をさらに含む。同様に、第２のプロセッサ１７８０は、Ｐ−Ｐインタフェース１７８６及び１７８８を含む。プロセッサ１７７０、１７８０は、Ｐ−Ｐインタフェース回路１７７８、１７８８を用いるポイントツーポイント（Ｐ−Ｐ）インタフェース１７５０を介して、情報を交換してよい。図１７に示されるように、ＩＭＣ１７７２及び１７８２は、複数のプロセッサをそれぞれの複数のメモリ、すなわち、それぞれの複数のプロセッサにローカルに取り付けられたメインメモリの一部であり得る、メモリ１７３２及びメモリ１７３４に結合する。
【０１７２】
プロセッサ１７７０、１７８０は、各々、ポイントツーポイントインタフェース回路１７７６、１７９４、１７８６、１７９８を用いる個々のＰ−Ｐインタフェース１７５２、１７５４を介して、チップセット１７９０と情報を交換してよい。チップセット１７９０は、任意に、高性能インタフェース１７３９を介して、コプロセッサ１７３８と情報を交換してよい。一実施形態において、コプロセッサ１７３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような特定用途向けプロセッサである。
【０１７３】
共有キャッシュ（不図示）は、プロセッサが低電力モードに置かれている場合に、複数のプロセッサのいずれか又は両方のローカルキャッシュ情報が共有キャッシュにストアされ得るように、プロセッサに含まれるか、又は、両方のプロセッサの外部にあってＰ−Ｐ相互接続を介して複数のプロセッサに接続されるかのいずれかであってよい。
【０１７４】
チップセット１７９０は、インタフェース１７９６を介して第１のバス１７１６に結合されてよい。一実施形態において、第１のバス１７１６は、周辺コンポーネント相互接続（ＰＣＩ）バス、又はＰＣＩエクスプレスバスもしくは他の第３世代Ｉ／Ｏ相互接続バスのようなバスであってよいが、本発明の範囲はこれに限定されない。
【０１７５】
図１７に示されるように、様々なＩ／Ｏデバイス１７１４は、第１のバス１７１６を第２のバス１７２０に結合するバスブリッジ１７１８と共に、第１のバス１７１６に結合されてよい。一実施形態において、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵ、（例えば、グラフィックアクセラレータもしくはデジタル信号処理（ＤＳＰ）ユニットのような）アクセラレータ、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような１つ又は複数の追加のプロセッサ１７１５が、第１のバス１７１６に結合される。一実施形態において、第２のバス１７２０は、ローピンカウント（ＬＰＣ）バスであってよい。様々なデバイスは、一実施形態において、例えば、キーボード及び／又はマウス１７２２、複数の通信デバイス１７２７及び複数の命令／コード及びデータ１７３０を含み得るディスクドライブ又は他の大容量ストレージデバイスのようなストレージユニット１７２８を含む第２のバス１７２０に結合されてよい。さらに、オーディオＩ／Ｏ１７２４は、第２のバス１７２０に結合されてよい。なお、他のアーキテクチャが適応可能である。例えば、図１７のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のこのようなアーキテクチャを実装してよい。
【０１７６】
ここで図１８を参照すると、本発明の実施形態に係る、第２のより詳細な例示的システム１８００のブロック図が示される。図１７及び１８における同様の複数のエレメントには、同様の参照番号が付され、図１７の複数の特定の態様は、図１８の他の複数の態様の妨げとることを回避すべく、図１８から省略されている。
【０１７７】
図１８は、プロセッサ１７７０、１７８０がそれぞれ、統合メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１７７２及び１７８２を含んでよいことを示す。そこで、ＣＬ１７７２、１７８２は、統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１８は、メモリ１７３２、１７３４がＣＬ１７７２、１７８２に結合されるのみならず、複数のＩ／Ｏデバイス１８１４も制御ロジック１７７２、１７８２に結合されることを示す。複数のレガシＩ／Ｏデバイス１８１５は、チップセット１７９０に結合される。
【０１７８】
ここで図１９を参照すると、本発明の実施形態に係るＳｏＣ１９００のブロック図が示される。図１５における同様の複数のエレメントは、複数の同様の参照番号が付される。また、複数の破線のボックスは、より高度な複数のＳｏＣにおける複数の任意の機能である。図１９において、相互接続ユニット１９０２は、１つ又は複数のコア２０２Ａ―Ｎ及び共有キャッシュユニット１５０６のセットを含むアプリケーションプロセッサ１９１０、システムエージェントユニット１５１０、バスコントローラユニット１５１６、統合メモリコントローラユニット１５１４、統合グラフィックロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る１つ又は複数のコプロセッサ１９２０又はそのセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１９３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１９３２及び１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット１９４０に結合される。一実施形態において、コプロセッサ１９２０は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサ等のような特定用途向けプロセッサを含む。
【０１７９】
本明細書において開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はこのような複数の実装アプローチの組み合わせにより実装されてよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、（揮発性及び不揮発性メモリ及び／又は複数のストレージエレメントを含む）ストレージシステム、少なくとも１つの入力デバイス及び少なくとも１つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラム又はプログラムコードとして実装されてよい。
【０１８０】
本明細書において説明される複数の機能を実行し、出力情報を生成する複数の命令を入力すべく、図１７に示されるコード１７３０のようなプログラムコードが適用されてよい。出力情報は、公知の態様で、１つ又は複数の出力デバイスに適用されてよい。この適用の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
【０１８１】
プログラムコードは、処理システムと通信を行う高水準の手順型又はオブジェクト指向のプログラミング言語で実装されてよい。プログラムコードは、望ましい場合には、アセンブリ又は機械言語で実装されてもよい。実際に、本明細書において説明される複数のメカニズムは、その範囲において、いかなる特定のプログラミング言語にも限定されるものではない。いずれの場合も、言語は、コンパイラ型又はインタプリタ型言語であってよい。
【０１８２】
少なくとも一実施形態の１つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体にストアされた代表的な複数の命令によって実装されてよく、これらは、機械によって読み出された場合に、本明細書において説明される複数の技術を実行するロジックを、機械に製造させる。「ＩＰコア」として公知のこのような表現は、有形の機械可読媒体にストアされてよく、様々な顧客又は製造施設に供給され、実際にロジック又はプロセッサを作り出す製造機械にロードされてよい。
【０１８３】
このような機械可読記憶媒体は、限定されるものではないが、ハードディスク、フロッピ（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）及び磁気光ディスクを含む任意の他のタイプのディスク、リードオンリメモリ（ＲＯＭ）のような半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気又は光カードのようなランダムアクセスメモリ（ＲＡＭ）、又は複数の電子的命令をストアすることに適した任意の他のタイプのメディアのような記憶媒体を含む、機械又はデバイスによって製造又は形成される複数の物品の非一時的かつ有形の構成を含んでよい。
【０１８４】
従って、本発明の複数の実施形態は、本明細書において説明される複数の構造、回路、装置、複数のプロセッサ、及び／又はシステム機能を定義するハードウェア記述言語（ＨＤＬ）のような複数の命令又は設計データを含む、有形の非一時的機械可読媒体をさらに含む。このような複数の実施形態は、プログラム製品と称されてもよい。
【０１８５】
［エミュレート（バイナリトランスレーション、コードモーフィング等を含む）］
いくつかの場合において、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために用いられてよい。例えば、命令コンバータは、コアによって処理されるべき１つ又は複数の他の命令に、命令をトランスレート（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて）、モーフィング、エミュレート、又は他の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせにおいて実装されてよい。命令コンバータは、プロセッサ上にあってよく、プロセッサ外にあってよく、又は、一部がプロセッサ上かつ一部がプロセッサ外にあってよい。
【０１８６】
図２０は、本発明の複数の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、あるいは、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせにおいて実装されてよい。図２０は、高水準言語２００２のプログラムが、少なくとも１つのｘ８６命令セットコアを有するプロセッサ２０１６によってネイティブで実行され得るｘ８６バイナリコード２００６を生成するために、ｘ８６コンパイラ２００４を用いてコンパイルされてよいことを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ２０１６は、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと実質的に同じ結果を実現すべく、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットの大部分又は（２）複数のアプリケーションのオブジェクトコードバージョン又は少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサ上で実行することを目的とする他のソフトウェアを、互換的に実行又は他の方法で処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル（登録商標）プロセッサと実質的に同じ複数の機能を実行することができる任意のプロセッサを表す。ｘ８６コンパイラ２００４は、追加のリンク処理を用いて、又はこれ用いることなく、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ２０１６上で実行可能なｘ８６バイナリコード２００６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図２０は、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ２０１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行する、及び／又はカリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブで実行され得る代替的な命令セットバイナリコード２０１０を生成するために、代替的な命令セットコンパイラ２００８を用いて、高水準言語２００２のプログラムがコンパイルされてよいことを示す。命令コンバータ２０１２は、ｘ８６バイナリコード２００６を、ｘ８６命令セットコアを有さないプロセッサ２０１４によってネイティブで実行可能なコードに変換するために用いられる。この変換されたコードは、これが可能な命令コンバータの作成が難しいので、代替的な命令セットバイナリコード２０１０と同じである可能性は低いが、しかしながら、変換されたコードは、一般的なオペレーションを達成し、代替的な命令セットからの複数の命令で構成される。そこで、命令コンバータ２０１２は、エミュレート、シミュレーション又は任意の他の処理により、プロセッサ又はｘ８６命令セットプロセッサもしくはコアを有さない他の電子デバイスにｘ８６バイナリコード２００６を実行させることが可能なソフトウェア、ファームウェア、ハードウェア又はこれらの組み合わせを表す。
【０１８７】
図３−９のいずれかで説明されたコンポーネント、機能、及び詳細は、任意に、図１−２のいずれにもさらに用いられてよい。さらに、本明細書において説明される装置のいずれかについて、本明細書において説明されるコンポーネント、機能、及び詳細は、任意に、複数の実施形態においてこのような装置によって及び／又はこれらと共に実行可能な、本明細書において説明される複数の方法のいずれかにおいて用いられ、及び／又はこれらに適用されてもよい。本明細書において説明される複数のプロセッサのいずれも、本明細書で開示される複数のコンピュータシステム又は他のシステムのいずれかに含まれてよい。命令は、本明細書で開示される様々な命令フォーマットのいずれかを有してよい。
【０１８８】
本明細書及び特許請求の範囲において、用語「結合」及び／又は「接続」は、これらの派生語と共に用いられていてよい。これらの用語は、互いにとっての同義語として意図されるものではない。むしろ、複数の実施形態において、「接続」は、２つ又はそれより多くの要素が互いに直接物理的及び／又は電気的に接触していることを示すために用いられてよい。「結合」は、２つ又はそれより多くの要素が互いに直接物理的及び／又は電気的に接触していることを意味してよい。しかしながら、「結合」は、また、２つ又はそれより多くの要素が互いに直接接触しないものの、なおも互いに協働又はインタラクトすることをさらに意味してよい。例えば、実行ユニットは、１つ又は複数の介在コンポーネントを介して、レジスタ及び／又はデコードユニットに結合されてよい。複数の図において、複数の矢印は、接続及び結合を示すために用いられる。
【０１８９】
用語「及び／又は」が用いられていてよい。用語「及び／又は」は、本明細書において用いられるように、一方もしくは他方又は両方を意味する（例えば、Ａ及び／又はＢは、ＡもしくはＢ、又はＡ及びＢの両方を意味する）。
【０１９０】
上述の説明では、複数の実施形態の完全な理解を提供すべく、具体的な詳細が示されている。しかしながら、他の複数の実施形態は、これらの具体的な詳細のいくつかを用いることなく実施されてよい。本発明の範囲は、上述された具体例によって決定されるのではなく、以下に添付された特許請求の範囲によってのみ決定される。複数の他の例において、説明の理解に対する妨げとなることを回避すべく、周知の回路、構造、デバイス、及び／又はオペレーションは、ブロック図の形式で、又は詳細なく示されている。適切と考えられる場合には、参照番号、又は参照番号の末端部分は、別途指定されない限り又は明確に自明でない限り、任意に同様の又は同じ特性を有し得る対応又は類似の要素を示すために図中で繰り返されている。
【０１９１】
複数の特定のオペレーションは、ハードウェアコンポーネントによって実行されてよく、又は機械実行可能もしくは回路実行可能命令で具現化されてよい。機械実行可能もしくは回路実行可能命令は、複数のオペレーションを実行する命令をプログラミングされた機械、回路、又はハードウェアコンポーネント（例えば、プロセッサ、プロセッサの一部、回路等）を生じさせ、及び／又はもたらすために用いられてよい。複数のオペレーションは、任意に、ハードウェア及びソフトウェアの組み合わせによって実行されてよい。プロセッサ、機械、回路、又はハードウェアは、命令を実行及び／又は処理し、命令に応答して結果をストアするように動作可能な固有又は特定の回路又は他のロジック（例えば、潜在的にはファームウェア及び／又はソフトウェアと組み合わせられるハードウェア）を含んでよい。
【０１９２】
いくつかの実施形態は、機械可読媒体を含む製品（例えば、コンピュータプログラム製品）を含む。媒体は、機械によって可読な形式で情報を提供する、例えばストアするメカニズムを含んでよい。機械可読媒体は、機械によって実行される場合及び／又はそのときに、本明細書で開示される１つ又は複数のオペレーション、方法、又は技術を機械に実行させ、及び／又はこれらを実行する機械をもたらすように動作可能な命令又は複数の命令のシーケンスを提供するか、又はそれらをこれにストアさせてよい。機械可読媒体は、本明細書で開示される複数の命令の実施形態の１つ又は複数をストアしてよく、又は他の方法で提供してよい。
【０１９３】
いくつかの実施形態において、機械可読媒体は、有形の及び／又は非一時的機械可読記憶媒体を含んでよい。例えば、有形の及び／又は非一時的機械可読記憶媒体は、フロッピ（登録商標）ディスケット、光記憶媒体、光ディスク、光学式データストレージデバイス、ＣＤ−ＲＯＭ、磁気ディスク、磁気光ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データストレージ記憶材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等を含んでよい。非一時的機械可読記憶媒体は、一時的な伝搬信号から構成されるものではない。
【０１９４】
好適な機械の例は、限定されるものではないが、汎用プロセッサ、特定用途向けプロセッサ、命令処理装置、デジタル論理回路、集積回路等を含む。好適な機械のさらに他の例は、プロセッサ、命令処理装置、デジタル論理回路、もしくは集積回路を含むコンピューティングデバイス又は他の電子デバイスを含む。このようなコンピューティングデバイス及び電子デバイスの例は、限定されるものではないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータ及びスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラを含む。
【０１９５】
本明細書の全体にわたって、「一実施形態」、「実施形態」、「１つ又は複数の実施形態」、「いくつかの実施形態」という記載は、例えば、特定の特徴が本発明の実施に含まれてよいが、必ず要求されるものではないことを示す。同様に、本明細書では、開示のストリームライン化及び様々な発明の態様の理解の助けを目的として、様々な特徴が場合によっては単一の実施形態、図、又はその説明において共にグループ化される。しかしながら、本開示のこの方法は、本発明が各請求項において明示的に記載されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の特許請求の範囲が反映するように、複数の発明の態様は、単一の開示された実施形態の複数の特徴の一部のみに存する。そこで、詳細な説明に続く特許請求の範囲は、これにより、この詳細な説明に明示的に組み込まれ、各請求項は、本発明の別個の実施形態として独立している。
【０１９６】
［実施形態の例］
複数の以下の例は、さらに複数の実施形態に関する。複数の例における具体的事柄は、１つ又は複数の実施形態のいずれかの箇所で用いられてよい。
【０１９７】
例１は、命令をデコードするデコードユニットを備えるプロセッサを含む。命令は、少なくとも４つのデータエレメントを含む第１のソースパックドデータオペランドと、少なくとも４つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す。実行ユニットは、デコードユニットに結合される。実行ユニットは、命令に応答して、結果パックドデータオペランドをデスティネーションストア位置にストアする。結果パックドデータオペランドは、少なくとも２つのマスクされていない結果データエレメントの組を有する。複数のマスクされていない結果データエレメントの各々は、第１のソースパックドデータオペランドの少なくとも２つの連続データエレメントの異なるものの値を相対的順序でストアする。複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第１のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応する。
【０１９８】
例２は、例１のプロセッサを含み、実行ユニットは、第１のエンドと、第１のエンドに最も近い組の第１のマスクされていない結果データエレメントとの間に、少なくとも１つのマスクされた結果データエレメントの第１のセットを含む結果パックドデータオペランドをストアする。
【０１９９】
例３は、例２のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第１のセットの各マスクされた結果データエレメントは、結果パックドデータオペランドがストアされる前の、デスティネーションストア位置における最初の値と同じ値を有する。
【０２００】
例４は、例２のプロセッサを含み、デコードユニットは、最上位データエレメントを含む第２のソースパックドデータオペランドを示す命令をデコードし、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第１のセットの各マスクされた結果データエレメントは、第２のソースパックドデータオペランドの最上位データエレメントと同じ値を有する。
【０２０１】
例５は、例２のプロセッサを含み、デコードユニットは、最下位データエレメントを含む第２のソースパックドデータオペランドを示す命令をデコードし、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第１のセットの各マスクされた結果データエレメントは、第２のソースパックドデータオペランドの最下位データエレメントと同じ値を有する。
【０２０２】
例６は、例１のプロセッサを含み、実行ユニットは、結果パックドデータオペランドの第２のエンドと、第２のエンドに最も近い組の第２のマスクされていない結果データエレメントとの間に、少なくとも１つのマスクされた結果データエレメントの第２のセットを含む結果パックドデータオペランドをストアし、第２のセットの各マスクされた結果データエレメントは、第２のマスクされていない結果データエレメントと同じ値を有する。
【０２０３】
例７は、例１のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第１のエンドは最下位エンドを含み、連続データエレメントは最下位の連続データエレメントである。
【０２０４】
例８は、例１のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第１のエンドは最下位エンドを含み、連続データエレメントは最上位の連続データエレメントである。
【０２０５】
例９は、例１のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第１のエンドは最上位エンドを含み、連続データエレメントは最下位の連続データエレメントである。
【０２０６】
例１０は、例１のプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、第１のエンドは最上位エンドを含み、連続データエレメントは最上位の連続データエレメントである。
【０２０７】
例１１は、例１から１０のいずれか１つのプロセッサを含み、ソースマスクは、マスクレジスタにストアされ、命令は、マスクレジスタをプレディケートオペランドとして示す複数の他の命令を有する命令セットに含まれる。
【０２０８】
例１２は、例１から１０のいずれか１つのプロセッサを含み、デコードユニットは、メモリの位置において第１のソースパックドデータオペランドを示す命令をデコードする。
【０２０９】
例１３は、例１から１０のいずれか１つのプロセッサを含み、実行ユニットは、結果パックドデータオペランドをストアし、結果パックドデータオペランドにおいて、複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントが、対応ペアのマスクされていない結果データエレメントのうち、第１のエンドに最も近いものと同じ値を有するという特性は、命令のオペコードにおいて黙示される。
【０２１０】
例１４は、命令を受信する段階を備える、プロセッサにおける方法である。命令は、少なくとも４つのデータエレメントを含む第１のソースパックドデータオペランドと、少なくとも４つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す。命令に応答して、結果パックドデータオペランドをデスティネーションストア位置にストアする。結果パックドデータオペランドは、少なくとも２つのマスクされていない結果データエレメントの組を含む。複数のマスクされていない結果データエレメントの各々は、第１のソースパックドデータオペランドの少なくとも２つの連続データエレメントの異なるものの値を相対的順序でストアする。複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第１のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応する。
【０２１１】
例１５は、例１４の方法を含み、ストアする段階は、第１のエンドと、第１のエンドに最も近い組の第１のマスクされていない結果データエレメントとの間に、少なくとも２つのマスクされた結果データエレメントの第１のセットを含む結果パックドデータオペランドをストアする段階を含む。また、結果パックドデータオペランドをストアする段階は、第１のセットの複数のマスクされた結果データエレメントの各々の値を変更しない段階を含む。
【０２１２】
例１６は、例１４の方法を含み、ストアする段階は、第１のエンドと、第１のエンドに最も近い組の第１のマスクされていない結果データエレメントとの間に、少なくとも２つのマスクされた結果データエレメントの第１のセットを含む結果パックドデータオペランドをストアする段階を含む。また、第１のセットの複数のマスクされた結果データエレメントの各々は、命令によって示される第２のソースパックドデータオペランドの最上位データエレメントと同じ値を有する。例１７は、例１６の方法を含み、第１のエンドは、最下位エンドを含む。
【０２１３】
例１８は、例１６の方法を含み、ストアする段階は、結果パックドデータオペランドの第２のエンドと、第２のエンドに最も近い組の第２のマスクされていない結果データエレメントとの間に、少なくとも１つのマスクされた結果データエレメントの第２のセットを含む結果パックドデータオペランドをストアする段階を含む。また、第２のセットの各マスクされた結果データエレメントは、第２のマスクされていない結果データエレメントと同じ値を有する。
【０２１４】
例１９は、例１４の方法を含み、ストアする段階は、第１のエンドと、第１のエンドに最も近い組の第１のマスクされていない結果データエレメントとの間に、少なくとも２つのマスクされた結果データエレメントの第１のセットを含む結果パックドデータオペランドをストアする段階を含む。また、第１のセットの複数のマスクされた結果データエレメントの各々は、命令によって示される第２のソースパックドデータオペランドの最下位データエレメントと同じ値を有する。
【０２１５】
例２０は、例１９の方法を含み、第１のエンドは、最上位エンドを含む。
【０２１６】
例２１は、例１４の方法を含み、ストアする段階は、結果パックドデータをストアする段階を含み、結果パックドデータにおいて、複数のマスクされていない結果データエレメントの所与の最も近いペアの間に、少なくとも３つのマスクされた結果データエレメントが存在する。
【０２１７】
例２２は、複数の命令を処理するシステムであって、相互接続と、相互接続に結合されるプロセッサとを備える。プロセッサは、少なくとも４つのデータエレメントを含む第１のソースパックドデータオペランドと、少なくとも４つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す命令に応答して、結果パックドデータオペランドをデスティネーションストア位置にストアするように動作可能である。結果パックドデータオペランドは、少なくとも２つのマスクされていない結果データエレメントの組を含む。複数のマスクされていない結果データエレメントの各々は、第１のソースパックドデータオペランドの少なくとも２つの連続データエレメントの異なるものの値を、相対的順序でストアする。複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第１のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応する。システムは、相互接続に結合されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）をさらに含む。ＤＲＡＭは、複数の条件に基づいてインクリメントされるスカラ値に対して計算を実行するループをベクトル化する命令セットをストアする。命令セットは、プロセッサによって実行された場合に、プロセッサに複数のオペレーションを実行させるように動作可能であり、複数のオペレーションは、複数の条件を評価することと、正しいと評価された複数の条件に対して、ソースマスクの複数のエレメントをマスクされていない状態にすることと、誤りと評価された複数の条件に対して、ソースマスクの複数のエレメントをマスクされた状態にすることと、結果パックドデータオペランドに対して計算を並列に実行することと、を含む。
【０２１８】
例２３は、例２２のシステムを含み、プロセッサは、第１のエンドと第１のエンドに最も近い組の第１のマスクされていない結果データエレメントとの間に、少なくとも２つのマスクされた結果データエレメントの第１のセットを含む結果パックドデータオペランドをストアする。第１のセットの複数のマスクされた結果データエレメントの各々は、命令によって示される第２のソースパックドデータオペランドの最上位データエレメントと同じ値を有する。
【０２１９】
例２４は、非一時的機械可読記憶媒体を備える製品を含む。非一時的機械可読記憶媒体は、命令をストアする。命令は、少なくとも４つのデータエレメントを含む第１のソースパックドデータオペランドと、少なくとも４つのマスクエレメントを含むソースマスクと、デスティネーションストア位置とを示す。命令は、機械によって実行された場合に、結果パックドデータオペランドをデスティネーションストア位置にストアすることを含む複数のオペレーションを、機械に実行させるように動作可能である。結果パックドデータオペランドは、少なくとも２つのマスクされていない結果データエレメントの組を含む。複数のマスクされていない結果データエレメントの各々は、第１のソースパックドデータオペランドの少なくとも２つの連続データエレメントの異なるものの値を、相対的順序でストアする。複数のマスクされていない結果データエレメントの最も近い対応ペアの間にある全てのマスクされた結果データエレメントは、対応ペアのマスクされていない結果データエレメントのうち、結果パックドデータオペランドの第１のエンドに最も近いものと同じ値を有する。複数のマスクされた結果データエレメントは、ソースマスクの複数のマスクされたマスクエレメントに対応する。
【０２２０】
例２５は、例２４の製品を含み、結果パックドデータオペランドは、複数のマスクされていない結果データエレメントの対応する最も近いペアの間に少なくとも３つのマスクされた結果データエレメントを含む。任意に、各マスクエレメントは、単一のビットから構成されてよい。
【０２２１】
例２６は、例１４−２１のいずれかの方法を実行するように動作可能なプロセッサ又は他の装置を含む。
【０２２２】
例２７は、例１４−２１のいずれかの方法を実行する手段を含むプロセッサ又は他の装置を含む。
【０２２３】
例２８は、例１４−２１のいずれかの方法を実行するモジュール、複数のユニット、ロジック、回路、手段、又はこれらの任意の組み合わせを含むプロセッサを含む。
【０２２４】
例２９は、命令を任意にストア又は他の方法で提供する非一時的機械可読媒体を任意に含み、当該命令は、プロセッサ、コンピュータシステム、又は他の機械によって実行される場合及び／又はそのときに、例１４−２１のいずれかの方法を、機械に実行させるように動作可能である。
【０２２５】
例３０は、実質的に本明細書において説明される１つ又は複数のオペレーション又は任意の方法を実行するように動作可能なプロセッサ又は他の装置を含む。
【０２２６】
例３１は、実質的に本明細書において説明される１つ又は複数のオペレーション又は任意の方法を実行する手段を含むプロセッサ又は他の装置を含む。
【０２２７】
例３２は、実質的に本明細書において説明される複数の命令のいずれかを実行するように動作可能なプロセッサ又は他の装置を含む。
【０２２８】
例３３は、実質的に本明細書において説明される複数の命令のいずれかを実行する手段を含むプロセッサ又は他の装置を含む。
【０２２９】
例３４は、第１の命令セットの複数の命令をデコードするように動作可能なデコードユニットを含むプロセッサ又は他の装置を含む。デコードユニットは、第１の命令をエミュレートする１つ又は複数の命令を受信し、当該命令は、実質的に本明細書に開示される複数の命令のいずれかであってよく、かつ、第２の命令セットに含まれる。プロセッサ又は他の装置は、デコードユニットに結合され、かつ、第１の命令セットの１つ又は複数の命令を実行する１つ又は複数の実行ユニットをさらに含む。１つ又は複数の実行ユニットは、第１の命令セットの１つ又は複数の命令に応答して、結果をデスティネーションにストアするように動作可能である。結果は、第１の命令に対して、実質的に本明細書に開示される複数の結果のいずれかを含んでよい。
【０２３０】
例３５は、第１の命令セットの複数の命令をデコードするように動作可能なデコードユニットと、１つ又は複数の実行ユニットとを有するプロセッサを含むコンピュータシステム又は他の電子デバイスを含む。コンピュータシステムは、プロセッサに結合されるストレージデバイスをさらに含む。ストレージデバイスは、第１の命令をストアし、当該命令は、実質的に本明細書で開示される複数の命令のいずれかであってよく、かつ、第２の命令セットに含まれる。ストレージデバイスは、複数の命令をさらにストアし、第１の命令を第１の命令セットの１つ又は複数の命令に変換する。第１の命令セットの１つ又は複数の命令は、プロセッサによって実行された場合に、プロセッサに、結果をデスティネーションにストアさせるように動作可能である。結果は、第１の命令に対して、実質的に本明細書に開示される複数の結果のいずれかを含んでよい。
【図１】
0006374975.tif 000011
【図２】
0006374975.tif 000012
【図３】
0006374975.tif 000013
【図４】
0006374975.tif 000014
【図５】
0006374975.tif 000015
【図６】
0006374975.tif 000016
【図７】
0006374975.tif 000017
【図８】
0006374975.tif 000018
【図９】
0006374975.tif 000019
【図１０Ａ】
0006374975.tif 000020
【図１０Ｂ】
0006374975.tif 000021
【図１１Ａ】
0006374975.tif 000022
【図１１Ｂ】
0006374975.tif 000023
【図１１Ｃ】
0006374975.tif 000024
【図１１Ｄ】
0006374975.tif 000025
【図１２】
0006374975.tif 000026
【図１３Ａ】
0006374975.tif 000027
【図１３Ｂ】
0006374975.tif 000028
【図１４Ａ】
0006374975.tif 000029
【図１４Ｂ】
0006374975.tif 000030
【図１５】
0006374975.tif 000031
【図１６】
0006374975.tif 000032
【図１７】
0006374975.tif 000033
【図１８】
0006374975.tif 000034
【図１９】
0006374975.tif 000035
【図２０】
0006374975.tif 000036