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