(57)【要約】  １つの実施形態では、プロセッサは、指定された座標に対する指定された次元のＺ順序曲線における次のポイントを計算する機械語レベルの命令を含む。プロセッサ復号ユニットは、第１のｚ曲線インデックスと指定された次元と指定された座標とを含むソースオペランド及び即値オペランドを有する命令を復号するよう構成される。プロセッサ実行ユニットは、復号された命令を実行して、指定された座標に関連付けられた座標値をインクリメントすることで次のポイントの座標を計算し、インクリメントされた座標を含む第２のｚ曲線インデックスを生成するよう構成される。
2017534114.tif 000002
【特許請求の範囲】
【請求項１】
複数のソースオペランドを有する命令を復号して、復号された命令を生成する復号ユニットと、
前記復号された命令を実行し、指定された座標のｚ曲線に沿って次のポイントの座標を計算する実行ユニットと
を備える
プロセッサ。
【請求項２】
前記命令をフェッチする命令フェッチユニットをさらに備え、
前記命令は単一の機械語レベルの命令である、
請求項１に記載のプロセッサ。
【請求項３】
前記単一の機械語レベルの命令は、少なくとも３２ビット要素幅を含むベクトル命令である、
請求項２に記載のプロセッサ。
【請求項４】
前記単一の機械語レベルの命令は、少なくとも６４ビット要素幅を含むベクトル命令である、
請求項２に記載のプロセッサ。
【請求項５】
前記次のポイントの前記座標を、デスティネーションオペランドに関連付けられたレジスタにコミットするレジスタファイルユニットをさらに備える、
請求項１に記載のプロセッサ。
【請求項６】
前記レジスタファイルユニットは、
第１のｚ曲線インデックスを含む第１のソースオペランド値を格納する第１のレジスタと、
即値オペランドである第２のソースオペランド値を格納する第２のレジスタと、
を含むレジスタ群をさらに格納し、
前記即値オペランドの値は次元と前記指定された座標とを含む、
請求項５に記載のプロセッサ。
【請求項７】
前記次元は前記第１のｚ曲線インデックスの次元であり、前記実行ユニットは前記指定された座標の前記次のポイントの前記座標を計算する、
請求項６に記載のプロセッサ。
【請求項８】
前記次元は、２次元、３次元、又は４次元のうちの１つである、
請求項７に記載のプロセッサ。
【請求項９】
前記指定された座標は、前記２次元、前記３次元、又は前記４次元のうちの１つに関連付けられた第１の座標、第２の座標、第３の座標、又は第４の座標のうちの１つである、
請求項８に記載のプロセッサ。
【請求項１０】
前記実行ユニットは、前記第１のｚ曲線インデックス内の前記指定された座標をインクリメントし、前記指定された座標の前記次のポイントを含む第２のｚ曲線インデックスを計算する、
請求項９に記載のプロセッサ。
【請求項１１】
ｚ曲線における次のポイントの座標を計算するオペレーション群のために複数のソース値を格納する複数のレジスタと、
第１のｚ曲線インデックスと指定された座標とを含む複数のデータ要素を入力し、前記第１のｚ曲線インデックス内の前記指定された座標をインクリメントして、前記ｚ曲線における前記次のポイントの前記座標を含む第２のｚ曲線インデックスを計算する前記オペレーション群を実行する実行ユニットとを
備える
論理ユニット。
【請求項１２】
前記複数のレジスタは、
第１のソース値を格納する第１のレジスタと、
第２のソース値を格納する第２のレジスタと
を含み、
前記第２のソース値は、即値オペランドから復号された即値である、
請求項１１に記載の論理ユニット。
【請求項１３】
前記第１のソース値は第１のｚ曲線インデックスを示し、
前記第２のソース値は、前記指定された座標と、前記第１のｚ曲線インデックスに関連付けられた次元とを示す、
請求項１２に記載の論理ユニット。
【請求項１４】
前記実行ユニットは、単一の命令に応答して、１つ又は複数のＡＮＤ演算、ＯＲ演算、ＸＯＲ演算、及びシフト演算によって前記第２のｚ曲線インデックスを計算する、
請求項１１に記載の論理ユニット。
【請求項１５】
結果を格納する第３のレジスタをさらに備える、
請求項１１に記載の論理ユニット。
【請求項１６】
単一のベクトル命令をフェッチして、ｚ曲線における次のポイントの座標を計算する段階であって、前記単一のベクトル命令は２つのソースオペランドと１つのデスティネーションオペランドとを有する、段階と
前記単一のベクトル命令を復号された命令に復号する段階と、
前記２つのソースオペランドに関連付けられたソースオペランド値をフェッチする段階であって、第１のソースオペランドは第１のｚ曲線インデックスを含み、第２のソースオペランドは指定された座標と次元とを含む即値オペランドである、段階と、
前記次元と座標値とを前記即値オペランドから取得する段階と、
前記復号された命令を実行して、前記第１のｚ曲線インデックスと前記指定された座標と前記次元とに基づき、前記ｚ曲線における前記次のポイントの前記座標を計算する段階と
備える
方法。
【請求項１７】
前記復号された命令を実行する段階は、前記第１のｚ曲線インデックス内の前記指定された座標をインクリメントして、前記指定された座標の前記次のポイントを含む第２のｚ曲線インデックスを計算する段階を含む、
請求項１６に記載の方法。
【請求項１８】
前記復号された命令を実行する段階は、１つ又は複数のＡＮＤ演算、ＸＯＲ演算、ＯＲ演算、及びシフト演算を用いて第２のｚ曲線インデックスを計算する段階をさらに含む、
請求項１６又は１７に記載の方法。
【請求項１９】
前記実行する段階は、ＸＯＲ論理ゲート、ＡＮＤ論理ゲート、及びＯＲ論理ゲート、並びにシフタ回路を用いる、
請求項１８に記載の方法。
【請求項２０】
前記復号された命令の結果を、デスティネーションオペランドにより示される位置に格納する段階をさらに備える、
請求項１６に記載の方法。
【請求項２１】
少なくとも１つの機械により実行された場合、請求項１６から２０のいずれか１つに記載の方法を実行する少なくとも１つの集積回路を前記少なくとも１つの機械に製造させるデータを格納した
機械可読媒体。
【請求項２２】
請求項１６から２０のいずれか１つに記載の方法を実行する手段を備える
処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は概して、コンピュータプロセッサの分野に関する。より具体的には、Ｚ曲線において次のポイントの座標を計算するためのベクトル命令を含む装置に関する。
【背景技術】
【０００２】
Ｚ順序曲線は空間充填曲線の一種であり、その範囲が単位区間［０，１］となる連続関数である。Ｚ順序（例えば、モートン順序）は、疎行列演算及び密行列演算（特に行列積）、有限要素解析、画像解析、耐震解析、光線追跡法などを含む、多次元の局所性が重要となる大量のデータセットに著しい性能改善をもたらし得る。しかし、Ｚ順序曲線インデックスを座標から計算するのは計算集約型になる場合がある。
【図面の簡単な説明】
【０００３】
本実施形態のより良い理解は、以下の図面と併せて以下の詳細な説明から得ることができる。その図面は次の通りである。
【０００４】
【図１Ａ】８×８行列に対する例示的なＺ順序マッピングを示す。
【図１Ｂ】８×８行列に対する例示的なＺ順序マッピングを示す。
【０００５】
【図２Ａ】指定された次元に沿ってＺ曲線インデックスをインクリメントする例示的なビット演算を示す。
【図２Ｂ】指定された次元に沿ってＺ曲線インデックスをインクリメントする例示的なビット演算を示す。
【０００６】
【図３】Ｚ曲線インデックス内で選択された座標のビットを示すブロック図である。
【０００７】
【図４】ある実施形態に従い、Ｚ曲線において次のポイントの座標を計算するベクトル命令についての、オペランド及びロジックからなるブロック図である。
【０００８】
【図５Ａ】ある実施形態に従い、Ｚ曲線において次のポイントを計算するベクトル命令のオペレーションを示すブロック図である。
【０００９】
【図５Ｂ】１つ又は複数のマイクロオペレーションを実装する例示的な論理ゲート構成を示すブロック図である。
【００１０】
【図６】ある実施形態に従い、Ｚ曲線において指定された次元に沿って次のポイントの座標を計算するベクトル命令のフロー図である。
【００１１】
【図７】本明細書で説明されるベクトル命令の実施形態を実装するプロセッサのブロック図である。
【００１２】
【図８Ａ】ある実施形態に従い、汎用ベクトル対応命令フォーマット及びその命令テンプレートを示すブロック図である。
【図８Ｂ】ある実施形態に従い、汎用ベクトル対応命令フォーマット及びその命令テンプレートを示すブロック図である。
【００１３】
【図９Ａ】ある実施形態に従い、例示的な特定ベクトル対応命令フォーマットを示すブロック図である。
【図９Ｂ】ある実施形態に従い、例示的な特定ベクトル対応命令フォーマットを示すブロック図である。
【図９Ｃ】ある実施形態に従い、例示的な特定ベクトル対応命令フォーマットを示すブロック図である。
【図９Ｄ】ある実施形態に従い、例示的な特定ベクトル対応命令フォーマットを示すブロック図である。
【００１４】
【図１０】１つの実施形態に従ったレジスタアーキテクチャのブロック図である。
【００１５】
【図１１Ａ】例示的なインオーダフェッチ・復号・リタイアパイプライン、及び例示的なレジスタリネーミング・アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【００１６】
【図１１Ｂ】インオーダフェッチ・復号・リタイアコアの例示的な実施形態、及びある実施形態に含まれる例示的なレジスタリネーミング・アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【００１７】
【図１２Ａ】例示的なインオーダコアアーキテクチャのブロック図を示す。
【図１２Ｂ】例示的なインオーダコアアーキテクチャのブロック図を示す。
【００１８】
【図１３】ある実施形態に従い、１つより多くのコアと、統合メモリコントローラと、統合グラフィックスとを有するプロセッサのブロック図である。
【００１９】
【図１４】例示的なコンピューティングシステムのブロック図を示す。
【００２０】
【図１５】第２の例示的なコンピューティングシステムのブロック図を示す。
【００２１】
【図１６】第３の例示的なコンピューティングシステムのブロック図を示す。
【００２２】
【図１７】ある実施形態に従い、システムオンチップ（ＳｏＣ）のブロック図を示す。
【００２３】
【図１８】ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用法を対比するブロック図を示す。
【発明を実施するための形態】
【００２４】
以下の説明では、説明を目的として、後述される実施形態の完全な理解をもたらすために、多数の具体的な詳細が明記されている。しかし、これらの具体的な詳細のいくつかがなくても、これらの実施形態が実施され得ることが当業者には明らかであろう。他の例では、本実施形態の基本原理をあいまいにしないように、周知の構造及びデバイスがブロック図形式で示されている。１つの実施形態では、Ｉｎｔｅｌ（登録商標）アーキテクチャ（ＩＡ）を拡張するアーキテクチャ拡張が説明されているが、基本原理はどの特定のＩＳＡにも限定されない。
［ベクトル命令及びＳＩＭＤ命令の概要］
【００２５】
特定のタイプのアプリケーションでは、同じ演算が多数のデータ項目に対して実行される必要がある場合が多い（「データ並列処理」と呼ばれる）。単一命令・複数データ処理（ＳＩＭＤ）は、ある演算を複数のデータ項目に対してプロセッサに実行させる命令の一種を指す。ＳＩＭＤ技術は特に、レジスタ中のビットを論理的に複数の固定サイズデータ要素（それぞれが別個の値を表す）に分割し得るプロセッサに適している。例えば、２５６ビットレジスタ中のビットは、４個の別個の６４ビットパックドデータ要素（クワッドワード（Ｑ）サイズのデータ要素）、８個の別個の３２ビットパックドデータ要素（ダブルワード（Ｄ）サイズのデータ要素）、１６個の別個の１６ビットパックドデータ要素（ワード（Ｗ）サイズのデータ要素）、又は３２個の別個の８ビットデータ要素（バイト（Ｂ）サイズのデータ要素）として操作されるソースオペランドに指定されてよい。このタイプのデータは「パックド」データタイプ又は「ベクトル」データタイプと呼ばれ、このデータタイプのオペランドは、パックドデータオペランド又はベクトルオペランドと呼ばれる。換言すると、パックドデータ項目又はベクトルは一連のパックドデータ要素を意味し、パックドデータオペランド又はベクトルオペランドは、ＳＩＭＤ命令（パックドデータ命令又はベクトル命令としても知られている）のソースオペランド又はデスティネーションオペランドである。
【００２６】
ｘ８６、ＭＭＸ（登録商標）、ストリーミングＳＩＭＤ拡張（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、及びＳＳＥ４．２命令を含む命令セットを搭載したＩｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）プロセッサによって利用されるなど、ＳＩＭＤ技術はアプリケーション性能の著しい改善を可能にした。アドバンスト・ベクトル・エクステンション（ＡＶＸ）（ＡＶＸ１及びＡＶＸ２）と呼ばれ、ベクトル拡張（ＶＥＸ）コード体系を用いるＳＩＭＤ拡張の追加セットが公開されている（例えば、Ｉｎｔｅｌ（登録商標）６４及びＩＡ−３２アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル（２０１４年９月）、及びＩｎｔｅｌ（登録商標）アーキテクチャ命令セット拡張プログラミング・リファレンス（２０１４年９月）を参照）。
［Ｚ曲線インデックス化の概要］
【００２７】
１つの実施形態では、プロセッサは３２ビット及び６４ビットの機械語レベルの命令を含み、現在のインデックスを与えられたＺ順序曲線の指定された次元に沿って次のインデックスを計算する。Ｚ順序曲線は空間充填曲線の一種であり、その範囲が単位区間［０，１］となる連続関数である。Ｚ曲線順序（例えば、モートン順序）は、疎行列演算及び密行列演算（特に行列積）、有限要素解析、画像解析、耐震解析、光線追跡法などを含む、多次元の局所性が重要となる大量のデータセットに著しい性能改善をもたらし得る。Ｚ曲線順序は、局所性を高めることで、またブロック化オペレーション又はタイル化オペレーションに論理的根拠を与えることで、データセット解析の性能を改善する。
【００２８】
しかし、座標からＺ順序曲線に沿ってインデックスを計算すること、及びインデックスから座標を計算することはプロセッサ集約的である。したがって、計算のオーバーヘッドを減らし、大量のデータセットを分析する際にアプリケーション性能を向上させるべく、Ｚ順序曲線において次のポイントの座標を計算するベクトル命令が本明細書で説明される。座標群のＺ曲線インデックスは、座標に関連付けられたＺ順序曲線に沿ってポイントを指定するインデックスである。インデックスは、各座標のビットに対してシャッフルオペレーションを実行することで形成され、その座標のビットを結果として得られたＺ曲線インデックスにインターリーブする。Ｚ順序曲線に沿った特定のインデックス（例えば、Ｚ曲線インデックス）が与えられると、指定された次元に沿ったＺ順序曲線の次のポイントの座標を求めるべく、Ｚ曲線インデックスのビットがそれぞれの座標に逆シャッフルされ得、指定された次元の所定の座標はインクリメントされ得、座標値のビットは再シャッフルされて新たなインデックスになり得る。本明細書で説明される１つの実施形態では、逆シャッフルオペレーションも再シャッフルオペレーションも実行することなく、最適化された実装によって、シャッフルされたインデックス中の座標のビットが特定され、インデックス内の座標がインクリメントされる。
【００２９】
図１Ａは、示された８×８行列１００の各要素に対するＺ順序のキーマッピングを示す。表示された各要素内において、上位ビットは上段にあり、下位ビットは下段にある。Ｚ曲線順序の１つの実装は、各次元の元のインデックスのそれぞれのビットをインターリーブ（例えば、シャッフル）することで実行される。図示された行列１００の各要素に示されるＺ順序は、行列１００における各要素の次元１（１０１）及び次元２（１０２）の値をビット単位でインターリーブすることにより生成される。
【００３０】
例えば、座標［２、３］（例えば、次元１（１０１）では２進の０１０、次元２（１０２）では２進の０１１）にある要素のＺ曲線インデックスは、各次元の座標のビットをインターリーブすることで決定され得、００１１０１という２進のＺ曲線インデックスがもたらされる（例えば、０ｘ０Ｄ）。例示的なＺ曲線インデックス値は、座標［２、３］の行列成分が例示的な行列１００のＺ順序曲線において１３番目（１０を基数として、０から数えた値）のインデックスであることを示している。簡単な２次元（２Ｄ）のＺ曲線及び関連インデックスが例示を目的として示されているが、本明細書で説明される命令は、２つ、３つ、又は４つの次元を有するＮ次元のＺ順序曲線に対して実行され得る。
【００３１】
図１Ｂは、要素の行列成分をＺ順序で連続的にたどることで作成されるＺ曲線２００のグラフィカルな説明図である。所定の次元に沿って次のインデックスを求めるべく、Ｚ曲線インデックスが与えられると、インデックスは座標構成要素に分解又は逆シャッフルされ得、関連する座標をインクリメントすることで新たな座標が生成され得、この新たな座標から新たなインデックスが計算され得る。代わりに、ビット操作アルゴリズムが、インデックスを分解又は逆シャッフルすることなく、新たなインデックスを計算するのに用いられ得る。
［Ｚ曲線インデックスにおける座標のインクリメント］
【００３２】
図２Ａ〜図２Ｂは、指定された次元に沿ってＺ曲線インデックスをインクリメントする例示的なビット演算を示す。６ビットからなる２次元のＺ曲線インデックス２０２（例えば、第１の２ＤのＺ曲線インデックス２０２Ａ、及び第２の２ＤのＺ曲線インデックス２０２Ｂ）が示されており、これは、３ビットからなる第１の座標２０４及び３ビットからなる第２の座標（例えば、逆シャッフルされた座標２０６Ａ、及びインクリメントされた座標２０６Ｂ）から、Ｚ曲線インデックスを構成するロジックを用いて計算される。図２Ａは、Ｚ曲線インデックス２０２Ａを座標構成要素２０４、２０６Ａにする逆シャッフルオペレーションを示す。図２Ｂは、座標をインクリメントし（例えば、インクリメントされた座標２０６Ｂ）、新たなＺ曲線インデックス２０２Ｂを再計算するところを示す。
【００３３】
図２Ａに示されるように、ある実施形態は、Ｚ曲線インデックスのビットを座標構成要素の値にする逆シャッフルオペレーション２０３をまず実行することで、指定された次元に沿ったＺ順序曲線における次のポイントのインデックス座標を計算し得る。例示的な２ＤのＺ曲線インデックス２０２は、２つの座標からのビットを含む。第１の座標２０６Ａは、ビットＸ２，Ｘ１、及びＸ０を含み、座標Ｘの２番目のビット、１番目のビット、及び０番目のビットを示している。第２の座標２０４は、ビットＹ２，Ｙ１、及びＹ０を含み、座標Ｙの２番目のビット、１番目のビット、及び０番目のビットを示している。２ＤのＺ曲線インデックスを形成すべく、構成要素のビットが、Ｚ曲線インデックスＹ２Ｘ２Ｙ１Ｘ１Ｙ０Ｘ０にシャッフルされている。正反対のＺ順序曲線オペレーション（例えば、逆シャッフルオペレーション２０３）が、Ｚ曲線インデックスを逆シャッフルして構成する要素にするのに用いられ得る。
【００３４】
図２Ｂに示されるように、インデックス２０２Ａが逆シャッフルされた後に、ある実施形態が選択された座標をインクリメントし得、新たなインデックス２０２Ｂがこれらの座標を再シャッフルすることで作成され得る。逆シャッフルされた図２Ａの第１の座標２０６Ａのビットはインクリメントされ、ビットＸ´２、Ｘ´１、及びＸ´０によって示されるインクリメントされた座標２０６Ｂを形成する。インクリメントされた座標２０６Ｂのビットは、Ｚ順序曲線インデックスオペレーション２０５を用いて第２の座標２０４のビットと共に再シャッフルされ、Ｙ２Ｘ´２Ｙ１Ｘ´１Ｙ０Ｘ´０のビット構成を有する新たな２ＤのＺ曲線インデックス２０２Ｂを計算する。
【００３５】
実施形態が、Ｘ、Ｙ、Ｚ、Ｔなどと呼ばれる次元の座標を用いるオペレーションに関連して、本明細書に説明されていることが理解されるべきである。座標は、２Ｄ空間、３Ｄ空間、又は４Ｄ空間など、Ｎ次元空間内の位置を定義するのに用いられている。用いられる座標は例示的であり、Ｘ、Ｙ、Ｚ、及びＴ座標は一般的に、Ｚ曲線順序が適用可能な任意のＮ次元空間内で、第１、第２、第３、第４の次元などの位置を定義するのに用いられる任意の座標セットを指すことを、当業者は理解するであろう。
【００３６】
図３は、Ｚ曲線インデックス内で選択された座標のビットを示すブロック図である。ある実施形態は、３２ビット及び６４ビットベクトル命令のセットを含み、命令は、Ｚ曲線インデックス値、インデックス内の次元の数、及びインクリメントする座標が与えられると、Ｚ曲線に沿って次のポイントの座標を求める。命令は、ベクトル処理オペレーション及びビット操作を用い、所定のＺ曲線インデックス内の関連ビットを、そのインデックスをそれぞれの座標に逆シャッフルすることなくインクリメントする。図３は、例示的な２ＤのＺ曲線インデックス３０２における例示的な座標Ｘのビット位置を示し、Ｘ０（３１２）、Ｘ１（３１４）、Ｘ２（３１６）、そしてＸＮ（３１８）まで、これらの座標ビットがインデックス全体にわたりシャッフルされる。
【００３７】
図４は、ある実施形態に従い、Ｚ曲線における次のポイントの座標を計算するベクトル命令のオペランド及びロジックのブロック図である。１つの実施形態では、ベクトル命令は、現在のＺ曲線インデックス４０１がＳＲＣ１オペランド４０２を介して入力されるよう実装されている。即値オペランド４０６のビット０〜ビット１（例えば、［１：０］）は、次元の数のインデックスを含む（例えば、２次元、３次元、４次元のインデックスに対し、ＤＩＭ  ＳＥＬ４０５には「０ｂ１０」、「０ｂ１１」、又は「０ｂ００」の値が入る）。即値オペランド４０６のビット２〜ビット３（例えば、［３：２］）は、どの座標がインクリメントされるべきかを示す（例えば、インデックスの第１、第２、第３、又は第４の座標に対し、ＣＯＯＲＤ  ＳＥＬ４０７には「０ｂ００」、「０ｂ０１」、「０ｂ１０」、又は「０ｂ１１」の値が入る）。１つの実施形態では、即値は８ビットの即値であり、４つの上位ビット（例えば、［７：４］）が予約されている。結果の値を書き込む位置を指定するために、デスティネーションオペランド４１２も含まれている。命令は、指定された構成要素の先頭にある「１」の値のビットを「０」に変え、１番目の「０」のビットを「１」に変えることで機能し、これによって事実上、指定されたビットでシャッフルされた座標が１だけインクリメントされる。
【００３８】
実施形態に従い、オペレーションは単一の機械語レベルの命令内で実行され、実行中に１つ又は複数のマイクロオペレーションに復号される。マイクロ命令レベルでは、オペランドに関連する座標は、実行ユニットによって処理される前にプロセッサのレジスタに格納され得る。１つの実施形態では、マルチプレクサ（例えば、ＭＵＸ４０８）が、ソースレジスタをプロセッサ実行ユニット内のＺＯＲＤＥＲＮＥＸＴロジック４１０に結合する。例示的な命令のビット演算が、以下の表１に示される疑似コードによって示されている。
【表１】
2017534114.tif 000003
【００３９】
表１に示されるように、ある実施形態は、デスティネーションオペランド（ｄｓｔ）、ソースオペランド（ｓｒｃ１）、及び８ビット即値オペランド（ｉｍｍ８）を有するｚｏｒｄｅｒｎｅｘｔ命令を含む。ｓｒｃ１オペランドは、ｉｍｍ８［２：０］（例えば、ｉｍｍ８のビット０及びビット１）で指定される次元の数によって定義された既存のＺ曲線インデックスを格納する６４ビット又は３２ビット幅のデータ要素であり得、「０ｂ１０」が２次元のインデックスに対応し、「０ｂ１１」が３次元のインデックスに対応する。１つの実施形態では、「０ｂ００」が４次元のインデックスを示すのに用いられる。これは、０次元のＺ曲線インデックスが定義されていないからである。
【００４０】
インクリメントすべく選択された座標は、ｉｍｍ８のビット３及びビット４に定義され、「０ｂ００」が第１の座標に対応し、「０ｂ０１」が第２の座標に対応し、「０ｂ１０」が第３の座標に対応し、「０ｂ１１」が第４の座標に対応する。１つの実施形態では、座標選択はＺ曲線インデックス値内の座標の位置に対応する。例えば、［ＴＺＹＸ］のビットインターリーブを用いて計算された４次元のＺ曲線インデックスの場合、「Ｔ」次元に関連する座標ビットは最上位ビットにあり、「Ｘ」次元に関連する座標次元は最下位ビットにあり、「Ｘ」次元に関連する座標は第１の座標であり、「Ｔ」次元に関連する座標は第４の座標である。
【００４１】
図５Ａは、ある実施形態に従い、Ｚ曲線において次のポイントを計算するベクトル命令のオペレーションを示すブロック図である。図５Ｂは、図５Ａに示されるオペレーションを実行する例示的な論理ゲート構成５５０を示すブロック図である。命令のオペレーションは、例示的なインデックス０ｂ０１１０１を用いて示され、Ｘ次元として示されている第１のインデックス次元に沿ってＺ順序曲線における次のポイントを計算する。Ｘ次元座標はビット０ｂ１０１を含み、Ｙ次元座標はビット０ｂ０１０を含む。
【００４２】
３段階のオペレーション、つまり、第１段階のＺ曲線インデックス５０２Ａ、第２段階のＺ曲線インデックス５０２Ｂ、及び第３段階のＺ曲線インデックス５０２Ｃが示されている。例示的なビットマスク５０４が２つの段階に示されている。つまり、第１段階のビットマスク５０４Ａ及び第２段階のビットマスク５０４Ｂである。動作中、０ｂ０１１００１という入力の２ＤのＺ曲線インデックス（例えば、第１段階のＺ曲線インデックス５０２Ａ）は、Ｘ次元座標からＸ０、Ｘ１、及びＸ２のビットを含む。第１段階のＺ曲線インデックス５０２Ａ及び第１段階のビットマスク５０４Ａを用いる第１のＡＮＤ演算５０６Ａは、次の段階の演算が発生するかどうかを判定する。
【００４３】
ＡＮＤ演算の結果が「１」の値になった場合、ＸＯＲ演算５０８が、第１段階のＺ曲線インデックス５０２Ａ及び第１段階のビットマスク５０４Ａに対して実行され、０ｂ０１１０００という第２段階のＺ曲線インデックス５０２Ｂを生成する。第２のＡＮＤ演算５０６Ｂが第２段階のビットマスク５０４Ｂに対して実行される。第２段階のビットマスク５０４Ｂは、インデックス内の次元の数（例えば、０ｂ１０）だけ左にシフトさせた第１段階のビットマスク５０４Ａである。第２のＡＮＤ演算５０６Ｂの結果は「０」である。ＡＮＤ演算の結果が「０」の場合、ＯＲ演算５１０が、Ｚ曲線インデックスの現在の動作値（例えば、第２段階のＺ曲線インデックス５０２Ｂ）、及び現在のビットマスク（例えば、第２段階のビットマスク５０４Ｂ）に対して実行される。この場合には、ＯＲ演算５１０の結果は第３段階のＺ曲線インデックス５０２Ｃである。第３段階のＺ曲線インデックス５０２Ｃは、この例では０ｂ０１１１００という結果値である。これが命令の結果値であり、ビット０ｂ１１０を有するＸ次元座標及びビット０ｂ０１０を有するＹ次元座標からなる２ＤのＺ曲線インデックスである。
【００４４】
図５Ｂは、本明細書に説明される命令の実施形態に関連する１つ又は複数のマイクロオペレーションを実行するのに用いられ得る例示的な論理ゲート構成５５０を示す。必須の要素をあいまいにしないように、様々な回路構成要素が省略されていることが理解されるであろう。示されるように、第１段階のＺ曲線インデックス５０２Ａに対応するソースオペランド５５２が、即値オペランド５５４（例えば、ｉｍｍ８）にパックされた次元及び座標データと共に受信され得る。即値オペランドのビット２及びビット３が、最初の座標ビットマスク５０４Ａを選択すべく、第１のシフタ回路５５３を制御する。第１段階のＺ曲線インデックス５０２Ａと第１段階のビットマスク５０４Ａとの間のＸＯＲ演算５０８は、ＸＯＲ論理ゲート５５８を用いて実行され得る。第２のシフタ回路５５５が、例えば、第１段階のビットマスク５０４Ａを、第２段階のビットマスク５０４Ｂに移行させるべく、ビット０及びビット１内の次元選択値分だけビットマスクをシフトさせ得る。第２段階のビットマスク５０４Ｂは、マスク出力５６６として論理ゲートから出力され得、マスク出力５６６は、１つの段階のオペレーションが終わった後のマスクの状態を反映する。
【００４５】
１つの実施形態では、第１段階のＺ曲線インデックス５０２Ａに対して、論理的系（ｌｏｇｉｃａｌ  ｃｏｒｏｌｌａｒｙ）である第１のＡＮＤ演算５０６Ａを実行するのにＮＡＮＤ論理ゲート５５６が用いられ得る。ＸＯＲ演算は、ＸＯＲ論理ゲート５５８によって実行され得る。ＯＲ演算５１０は、ＯＲ論理ゲート５６０によって実行され得る。これらの演算のそれぞれは並列に実行され得、ＮＡＮＤゲート５５６は論理ステージの出力値５６２に関して（マルチプレクサ５６１を介し）、ＸＯＲゲート５５８及びＯＲゲート５６０の出力から選択する。ＮＡＮＤゲート５５６はまた、出力値５６２が有効出力であるか、中間出力であるかを示す有効ビット５６４を設定する。有効５６４が設定される場合、制御ロジック（不図示）が、デスティネーションオペランドにより示されるレジスタに出力５６２を格納し得る。有効５６４が設定されない場合、マスク出力５６６及び中間出力値５６２を用いて、連続的に段階が実行され得る。示される論理ゲート構成５５０は例示的であるので、追加の論理ステージは、類似の論理ゲート構成又は異なる論理ゲート構成を用いることができる。
【００４６】
図６は、ある実施形態に従い、指定された次元に沿ってＺ曲線における次のポイントの座標を計算するベクトル命令のフロー図である。ブロック６０２に示されるように、命令パイプラインは、Ｚ曲線における次のポイントの座標を計算すべく、プロセッサがベクトル命令をフェッチするときに始まる。命令は、第１のソースオペランド、即値オペランド、及びデスティネーションオペランドを有する。ブロック６０４に示されるように、プロセッサはＺ曲線インデックス命令を１つ又は複数のマイクロオペレーションに復号する。マイクロオペレーションは、ブロック６０６に示されるように、実行ユニットなどのプロセッサの構成要素に、ソースオペランドにより示されたソースオペランド値、及び即値をフェッチするオペレーションを含む様々なオペレーションを実行させる。ブロック６０８に示されるように、１つの実施形態では、プロセッサ内の論理ユニットが、即値オペランドから次元値及び座標値を取得するために（例えば、復号する、アンパックする、マスクされる、読み出す、シフトさせるなどのために）追加のオペレーションを実行する。次元値はＺ曲線インデックスの次元の数を指定し、座標値は、Ｚ曲線において次のポイントを求めるべくインクリメントされる座標を指定する。１つの実施形態では、論理ユニットは、明示的な取得を必要とすることなく、ソース座標値をソースオペランドから自動的に分離するハードウェアを含む。
【００４７】
ブロック６１０に示されるように、ソース座標値がフェッチされて次元値及び座標値が取得されると、１つ又は複数のマイクロオペレーションが、１つ又は複数の実行ユニットに、指定された座標に対する指定された次元のＺ曲線において次のポイントの座標を計算させる。ブロック６１２に示されるように、次にプロセッサは、Ｚ曲線インデックス命令の結果をデスティネーションオペランドにより示される位置に格納し得る。
【００４８】
図７は、本明細書で説明されるベクトル命令の実施形態を実装するプロセッサ７５５のブロック図である。プロセッサ７５５は、本明細書で説明されるｚｏｒｄｅｒｎｅｘｔ命令を実行するＺＯＲＤＥＲＮＥＸＴ実行ロジック７４１を搭載した実行ユニット７４０を含む。レジスタセット７０５は、実行ユニット７４０が命令ストリームを実行するときに、オペランド、制御データ、及び他のタイプのデータのためのレジスタストレージを提供する。
【００４９】
簡略化するために、単一のプロセッサコア（「コア０」）の詳細だけが図７に示されている。しかし、図７に示される各コアは、コア０と同じロジック群又は類似のロジック群を有してよいことが理解されるであろう。示されるように、各コアは、指定されたキャッシュ管理ポリシに従って命令及びデータをキャッシュするために、専用のレベル１（Ｌ１）キャッシュ７１２及びレベル２（Ｌ２）キャッシュ７１１を含んでよい。Ｌ１キャッシュ７１１は、命令を格納する別個の命令キャッシュ７２０と、データを格納する別個のデータキャッシュ７２１とを含む。様々なプロセッサキャッシュ内に格納される命令及びデータはキャッシュラインの粒度で管理され、その粒度は固定サイズ（例えば、６４、１２８、５１２バイトの長さ）であってよい。この例示的な実施形態の各コアは、メインメモリ７００及び／又は共有レベル３（Ｌ３）キャッシュ７１６から命令をフェッチする命令フェッチユニット７１０と、命令を復号する（例えば、プログラム命令をマイクロオペレーション（μｏｐ）に復号する）復号ユニット７２０と、命令（例えば、本明細書で説明されるｚｏｒｄｅｒｎｅｘｔ命令）を実行する実行ユニット７４０と、命令をリタイアして結果を書き戻すライトバックユニット７５０とを有する。
【００５０】
命令フェッチユニット７１０は様々な周知の構成要素を含む。それらの構成要素には、メモリ７００（又は複数のキャッシュの１つ）からフェッチされる次の命令のアドレスを格納する次の命令ポインタ７０３と、アドレス変換の速度を向上させるために、最近用いられた仮想から物理への命令アドレスのマッピングを格納する命令変換ルックアサイドバッファ（ＩＴＬＢ）７０４と、命令分岐アドレスを投機的に予測する分岐予測ユニット７０２と、分岐アドレス及びターゲットアドレスを格納する分岐ターゲットバッファ（ＢＴＢ）７０１とが含まれる。命令はフェッチされると、その後、復号ユニット７３０、実行ユニット７４０、及びライトバックユニット７５０を含む命令パイプラインの残りのステージにストリームされる。これらのユニットのそれぞれの構造及び機能は、以下の図１１Ａ〜図１１Ｂにさらに詳細に説明されている。
【００５１】
本明細書で説明される実施形態は、処理装置又はデータ処理システムに実装される。上述の説明では、本明細書で説明される実施形態の完全な理解をもたらすために、多数の具体的な詳細が明記されてきた。しかし、当業者には明らかであろうが、これらの具体的な詳細のいくつかがなくても、これらの実施形態は実施され得る。説明されるアーキテクチャ上の特徴のいくつかは、Ｉｎｔｅｌ（登録商標）アーキテクチャ（ＩＡ）に対する拡張である。しかし、基本原理は、いかなる特定のＩＳＡにも限定されない。
【００５２】
命令セット、つまり命令セットアーキテクチャ（ＩＳＡ）は、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込み処理及び例外処理、並びに外部入力／出力（Ｉ／Ｏ）を含むプログラミングに関連したコンピュータアーキテクチャの一部である。本明細書では概して、「命令」という用語は、実行のためにプロセッサに提供される命令であるマクロ命令を指し、これに対して、マイクロ命令又はマイクロオペレーション（例えば、マイクロｏｐ）は、プロセッサのデコーダがマクロ命令を復号した結果であることに留意すべきである。マイクロ命令又はマイクロｏｐは、マクロ命令に関連したロジックを実行するオペレーションを実行するために、プロセッサ上の実行ユニットに命令するよう構成され得る。
【００５３】
ＩＳＡは、命令セットを実装するのに用いられるプロセッサ設計手法のセットであるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを用いたプロセッサは、一般的な命令セットを共有し得る。例えば、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（登録商標）プロセッサ、Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，Ｉｎｃ（カリフォルニア州／サニーベール）のプロセッサは、ほぼ同一バージョンのｘ８６命令セット（より新しいバージョンに追加されているいくつかの拡張を含む）を実装するが、異なる内部設計を有する。例えば、同じレジスタアーキテクチャのＩＳＡは、専用物理レジスタ、レジスタリネーミングメカニズムを用いる（例えば、レジスタエイリアス表（ＲＡＴ）、リオーダバッファ（ＲＯＢ）、及びリタイアメントレジスタファイルを用いる）１つ又は複数の動的に割り当てられた物理レジスタを含む周知の手法を用いて、異なるマイクロアーキテクチャに異なる方法で実装されてよい。別段の定めがない限り本明細書では、レジスタアーキテクチャ、レジスタファイル、及びレジスタという表現は、どれがソフトウェア／プログラマに対して可視であるかということ、及び命令がレジスタを指定する方式であるかということを指すのに用いられている。区別が必須な場合、「論理的な」、「アーキテクチャ上の」、又は「ソフトウェアに可視な」という形容詞が、レジスタアーキテクチャ内のレジスタ／ファイルを示すのに用いられるが、別の形容詞が、所定のマイクロアーキテクチャ内のレジスタ（例えば、物理レジスタ、リオーダバッファ、リタイアメントレジスタ、レジスタプール）を指定するのに用いられる。
【００５４】
命令セットは、１つ又は複数の命令フォーマットを含む。所定の命令フォーマットは、様々なフィールド（ビットの数、ビットの位置）を定義し、とりわけ、実行されるオペレーション及びそのオペレーションが実行されるオペランドを指定する。命令フォーマットによっては、命令テンプレートの定義（又はサブフォーマット）までさらに分類される。例えば、所定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するよう定義されてよく（含まれるフィールドは典型的には同じ順序にあるが、少なくともいくつかは、より小さいフィールドが含まれているので、別のビット位置を有する）、及び／又は、異なるように解釈される所定のフィールドを有するよう定義されてもよい。所定の命令が所定の命令フォーマットを用いて（また、定義される場合にはその命令フォーマットの複数の命令テンプレートのうちの所定の１つに）表され、オペレーション及びオペランドを指定する。命令ストリームは複数の命令からなる特定の配列であり、配列内の各命令は命令フォーマット内の命令（定義される場合、その命令フォーマットの複数の命令テンプレートのうち所定の１つ）の出現である。
［例示的な命令フォーマット］
【００５５】
本明細書で説明される命令の実施形態は、異なるフォーマットに具現化されてもよい。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述されている。命令の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行されてよいが、詳述されたこれらのものに限定されない。
【００５６】
ベクトル対応命令フォーマットは、ベクトル命令に適した命令フォーマットである（例えば、ベクトル演算に固有の特定のフィールドがある）。ベクトル演算及びスカラ演算の両方がベクトル対応命令フォーマットを通じてサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトル対応命令フォーマットを通じてサポートされるベクトル演算のみを用いる。
【００５７】
図８Ａ〜図８Ｂは、ある実施形態に従い、汎用ベクトル対応命令フォーマット及びその命令テンプレートを示すブロック図である。図８Ａは、ある実施形態に従い、汎用ベクトル対応命令フォーマット及びそのクラスＡ命令テンプレートを示すブロック図であり、図８Ｂは、ある実施形態に従い、汎用ベクトル対応命令フォーマット及びそのクラスＢ命令テンプレートを示すブロック図である。具体的には、汎用ベクトル対応命令フォーマット８００に対して、クラスＡ命令テンプレート及びクラスＢ命令テンプレートが定義され、その両方が非メモリアクセス８０５の命令テンプレート及びメモリアクセス８２０の命令テンプレートを含む。ベクトル対応命令フォーマットとの関連で汎用という用語は、いかなる特定の命令セットにも関係していない命令フォーマットを意味する。
【００５８】
実施形態が説明されるが、その中でベクトル対応命令フォーマットは以下のものをサポートする。つまり、３２ビット（４バイト）又は６４ビット（８バイト）データ要素幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）（したがって、６４バイトベクトルは、ダブルワードサイズの１６個の要素、又は代わりにクワッドワードサイズの８個の要素から構成される）と、１６ビット（２バイト）又は８ビット（１バイト）データ要素幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８ビット（１バイト）データ要素幅（又はサイズ）を有する３２バイトベクトルオペランド長（又はサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、又は８ビット（１バイト）データ要素幅（又はサイズ）を有する１６バイトベクトルオペランド長（又はサイズ）である。しかし、代替的な実施形態は、より大きいデータ要素幅、より小さいデータ要素幅、又は異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を有する、より大きいベクトルオペランドサイズ、より小さいベクトルオペランドサイズ、及び／又は異なるベクトルオペランドサイズ（例えば、２５６バイトベクトルオペランド）をサポートする。
【００５９】
図８ＡのクラスＡ命令テンプレートは以下のものを含む。つまり、１）非メモリアクセス８０５の命令テンプレート内に示されている、非メモリアクセス・フルラウンド制御型オペレーション８１０の命令テンプレート、及び非メモリアクセス・データ変換型オペレーション８１５の命令テンプレート、並びに２）メモリアクセス８２０の命令テンプレート内に示されている、メモリアクセス・一時的８２５の命令テンプレート、及びメモリアクセス・非一時的８３０の命令テンプレートである。図８ＢのクラスＢ命令テンプレートは以下のものを含む。つまり、１）非メモリアクセス８０５の命令テンプレート内に示されている、非メモリアクセス・書き込みマスク制御・部分ラウンド制御型オペレーション８１２の命令テンプレート、及び非メモリアクセス・書き込みマスク制御・ｖｓｉｚｅ型オペレーション８１７の命令テンプレート、並びに２）メモリアクセス８２０命令テンプレート内に示されている、メモリアクセス・書き込みマスク制御８２７の命令テンプレートである。
【００６０】
汎用ベクトル対応命令フォーマット８００は、図８Ａ〜８Ｂに示される順で以下に列挙する次のフィールドを含む。
【００６１】
フォーマットフィールド８４０：このフィールドの特定値（命令フォーマット識別子の値）は、ベクトル対応命令フォーマットを一意に特定し、したがって、命令ストリーム内のベクトル対応命令フォーマットにおける命令の出現を特定する。そのため、このフィールドは、汎用ベクトル対応命令フォーマットのみを有する命令セットには必要とされないという点で、任意なものである。
【００６２】
ベースオペレーションフィールド８４２：このコンテンツは、異なるベースオペレーションを識別する。
【００６３】
レジスタインデックスフィールド８４４：このコンテンツは、ソース及びデスティネーションオペランドの位置を、それらがレジスタ内にあってもメモリ内にあっても、直接又はアドレス生成を通じて指定する。これらは、ＰｘＱ（例えば３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）レジスタファイルからＮ個のレジスタを選択するのに十分な数のビットを含む。１つの実施形態では、Ｎは３つのソースレジスタ及び１つのデスティネーションレジスタまでであってよいが、代替的な実施形態はより多くの又はより少ないソースレジスタ及びデスティネーションレジスタをサポートしてもよい（例えば、２つのソース（このうち１つはデスティネーションの役割も果たす）までをサポートしてよく、３つのソース（このうち１つはデスティネーションの役割も果たす）までをサポートしてもよく、２つのソース及び１つのデスティネーションまでをサポートしてもよい）。
【００６４】
修飾子フィールド８４６：このコンテンツは、汎用ベクトル命令フォーマットにおいてメモリアクセスを指定する命令の出現をそうでない命令の出現と識別する。すなわち、非メモリアクセス８０５の命令テンプレートとメモリアクセス８２０の命令テンプレートとを識別する。メモリアクセスオペレーションは、メモリ階層を読み出す、及び／又はメモリ階層へ書き込む（場合によっては、レジスタ内の値を用いてソースアドレス及び／又はデスティネーションアドレスを指定する）が、非メモリアクセスオペレーションはこうしたことを行わない（例えば、ソース及びデスティネーションはレジスタである）。１つの実施形態では、このフィールドはまた、メモリアドレス計算を実行するための３つの異なる方法から選択するが、代替的な実施形態は、メモリアドレス計算を実行するためのより多くの方法、より少ない方法、又は異なる方法をサポートしてもよい。
【００６５】
拡大オペレーションフィールド８５０：このコンテンツは、様々な異なるオペレーションのどれがベースオペレーションに加えて実行されるかを識別する。このフィールドは、コンテキスト固有のものである。本発明の１つの実施形態では、このフィールドは、クラスフィールド８６８、アルファフィールド８５２、及びベータフィールド８５４に分割される。拡大オペレーションフィールド８５０は、共通グループのオペレーションが２つ、３つ、又は４つの命令ではなく、単一の命令で実行されることを可能にする。
【００６６】
スケールフィールド８６０：このコンテンツは、メモリアドレス生成のために（例えば、２［スケール］×［インデックス］＋［ベース］を用いるアドレス生成のために）インデックスフィールドのコンテンツをスケーリングすることを可能にする。
【００６７】
変位フィールド８６２Ａ：このコンテンツは、（例えば、２［スケール］×［インデックス］＋［ベース］＋［変位］を用いるアドレス生成のために）メモリアドレス生成の一部として用いられる。
【００６８】
変位係数フィールド８６２Ｂ（なお、変位フィールド８６２Ａを変位係数フィールド８６２Ｂのすぐ上に並置することで、一方又は他方が使用されていることが示される点に注意）：このコンテンツは、アドレス生成の一部として用いられ、これは、メモリアクセスのサイズ（Ｎ）によってスケーリングされる変位係数を指定する。ここで、Ｎは、（例えば、２［スケール］×［インデックス］＋［ベース］＋［スケーリングされた変位］を用いるアドレス生成のための）メモリアクセス内のバイト数である。冗長下位ビットは無視され、したがって、有効アドレスの計算に用いられる最終的な変位を生成するために、変位係数フィールドのコンテンツはメモリオペランドの合計サイズ（Ｎ）を乗じる。Ｎの値は、フルオペコードフィールド８７４（本明細書に後述）及びデータ操作フィールド８５４Ｃに基づき、プロセッサハードウェアによって実行時に決定される。変位フィールド８６２Ａ及び変位係数フィールド８６２Ｂは、これらが非メモリアクセス８０５の命令テンプレートには用いられず、及び／又は異なる実施形態では２つのうち一方のみを実装するかどちらも実装しない場合があるという点で任意である。
【００６９】
データ要素幅フィールド８６４：このコンテンツは、（実施形態によっては全ての命令に、他の実施形態ではいくつかの命令だけに）複数のデータ要素幅のどれが用いられるべきかを識別する。このフィールドは、１つのデータ要素幅のみがサポートされる場合、及び／又は複数のデータ要素幅がオペコードの何らかの態様を用いてサポートされる場合は、必要とされないという点で任意である。
【００７０】
書き込みマスクフィールド８７０：このコンテンツは、データ要素位置に基づいて、デスティネーションベクトルオペランドのそのデータ要素位置がベースオペレーション及び拡大オペレーションの結果を反映するかどうかを制御する。クラスＡ命令テンプレートは、マージ処理・書き込みマスク処理をサポートし、クラスＢ命令テンプレートは、マージ・書き込みマスク処理、及びゼロ設定・書き込みマスク処理の両方をサポートする。マージする場合、ベクトルマスクは、（ベースオペレーション及び拡大オペレーションによって指定される）任意のオペレーションを実行中に、デスティネーションにおける任意のセットの要素が更新から保護されることを可能とし、他の１つの実施形態では、対応するマスクビットが０である場合、デスティネーションの各要素の古い値を保護する。これに対して、ゼロ設定する場合、ベクトルマスクは、デスティネーションにおける任意のセットの要素が（ベースオペレーション及び拡大オペレーションによって指定される）任意のオペレーションの実行中にゼロ設定されることを可能とし、１つの実施形態では、対応するマスクビットの値が０である場合、デスティネーションの要素は０に設定される。この機能のサブセットは、実行されているオペレーションのベクトル長（すなわち、変更される要素の長さ、つまり最初の要素から最後の要素まで）を制御する能力である。しかし、変更される要素は連続的である必要はない。したがって、書き込みマスクフィールド８７０は、ロード演算、ストア演算、算術演算、論理演算などを含む一部のベクトル演算を可能にする。書き込みマスクフィールド８７０のコンテンツが用いられる書き込みマスクを含む複数の書き込みマスクレジスタのうち１つを選択する（したがって、書き込みマスクフィールド８７０のコンテンツが実行されるマスク処理を間接的に特定する）実施形態が説明されるが、代替的な実施形態では代わりに又は追加的に、書き込みマスクフィールド８７０のコンテンツが、実行されるマスク処理を直接指定することを可能にする。
【００７１】
即値フィールド８７２：このコンテンツは、本明細書で説明されるように即値オペランドの指定を可能とする。１つの実施形態では、即値オペランドは、機械命令の一部として直接符号化される。
【００７２】
クラスフィールド８６８：このコンテンツは、複数の異なるクラスの命令を識別する。図８Ａ〜図８Ｂに関連して、このフィールドのコンテンツは、クラスＡ命令及びクラスＢ命令から選択する。図８Ａ〜図８Ｂでは、角が丸い四角が、フィールド内に特定値が存在することを示すのに用いられている（例えば、図８Ａ〜図８Ｂにそれぞれあるクラスフィールド８６８用のクラスＡ  ８６８Ａ、及びクラスＢ  ８６８Ｂ）。
［クラスＡの命令テンプレート］
【００７３】
クラスＡの非メモリアクセス８０５命令テンプレートの場合、アルファフィールド８５２はＲＳフィールド８５２Ａと解釈され、そのコンテンツは、異なる拡大オペレーションタイプのどれが実行されるべきかを識別し（例えば、非メモリアクセス・ラウンド型オペレーション８１０及び非メモリアクセス・データ変換型オペレーション８１５の命令テンプレートに対し、ラウンド８５２Ａ．１及びデータ変換８５２Ａ．２がそれぞれ指定される）、ベータフィールド８５４は、指定されるタイプのオペレーションのどれが実行されるべきかを識別する。非メモリアクセス８０５の命令テンプレートには、スケールフィールド８６０、変位フィールド８６２Ａ、及び変位係数フィールド８６２Ｂが存在しない。
［非メモリアクセス命令テンプレート−フルラウンド制御型オペレーション］
【００７４】
非メモリアクセスフルラウンド制御型オペレーション８１０の命令テンプレートにおいて、ベータフィールド８５４はラウンド制御フィールド８５４Ａと解釈され、そのコンテンツは静的なラウンド処理を提供する。説明された実施形態では、ラウンド制御フィールド８５４Ａは、全浮動小数点例外抑制（ＳＡＥ）フィールド８５６及びラウンド演算制御フィールド８５８を含むが、代替的な実施形態では、これらのコンセプトを両方ともサポートしてよく、それらを同じフィールド内に符号化してよく、あるいはこれらのコンセプト／フィールドの一方又は他方のみを有してもよい（例えば、ラウンド演算制御フィールド８５８のみを有してよい）。
【００７５】
ＳＡＥフィールド８５６：このコンテンツは、例外イベント報告を無効化するかどうか識別する。ＳＡＥフィールド８５６のコンテンツが、抑制が可能であることを示す場合、所定の命令は、どの種類の浮動小数点例外フラグも報告せず、どの浮動小数点例外ハンドラも呼び出さない。
【００７６】
ラウンド演算制御フィールド８５８：このコンテンツは、ラウンド演算のグループのどれを実行すべきかを識別する（例えば、切り上げ、切り捨て、０への丸め、及び最近接丸め）。したがって、ラウンド演算制御フィールド８５８は、命令に基づいてラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の１つの実施形態では、ラウンド演算制御フィールド８５０のコンテンツは、当該レジスタの値をオーバーライドする。
［非メモリアクセス命令テンプレート−データ変換型オペレーション］
【００７７】
非メモリアクセスデータ変換型オペレーション８１５の命令テンプレートでは、ベータフィールド８５４はデータ変換フィールド８５４Ｂとして解釈され、そのコンテンツは、複数のデータ変換のどれが実行されるべきかを識別する（例えば、データ変換なし、スウィズル、ブロードキャスト）。
【００７８】
クラスＡのメモリアクセス８２０の命令テンプレートの場合、アルファフィールド８５２はエビクションヒントフィールド８５２Ｂと解釈され、そのコンテンツは、エビクションヒントのどれが用いられるべきかを識別する（図８Ａにおいて、一時的８５２Ｂ．１及び非一時的８５２Ｂ．２はそれぞれ、メモリアクセス・一時的８２５の命令テンプレート及びメモリアクセス・非一時的８３０の命令テンプレートに指定される）。ベータフィールド８５４はデータ操作フィールド８５４Ｃと解釈され、そのコンテンツは、（プリミティブとしても知られる）複数のデータ操作オペレーションのどれが実行されるべきかを識別する（例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、デスティネーションのダウンコンバージョン）。メモリアクセス８２０の命令テンプレートはスケールフィールド８６０を含み、任意で変位フィールド８６２Ａ又は変位係数フィールド８６２Ｂを含む。
【００７９】
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令はデータ要素単位の形式でデータをメモリから転送し、データをメモリに転送する。実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクのコンテンツによって指示される。
［メモリアクセス命令テンプレート−一時的］
【００８０】
一時的データは、すぐに再利用されてキャッシュによる恩恵を受ける可能性の高いデータである。しかし、これはヒントであり、異なるプロセッサが異なる方法でヒントを実行してよく、その方法には、ヒントを完全に無視することも含まれる。
［メモリアクセス命令テンプレート−非一時的］
【００８１】
非一時的データは、すぐに再利用されてレベル１キャッシュにキャッシュすることから恩恵を受ける可能性が低いデータであり、エビクションが優先されなければならない。しかし、これはヒントであり、異なるプロセッサが異なる方法でヒントを実行してよく、その方法には、ヒントを完全に無視することも含まれる。
［クラスＢの命令テンプレート］
【００８２】
クラスＢの命令テンプレートの場合には、アルファフィールド８５２は書き込みマスク制御（Ｚ）フィールド８５２Ｃと解釈され、そのコンテンツは、書き込みマスクフィールド８７０によって制御される書き込みマスク処理がマージ処理であるべきか、ゼロ設定処理であるべきかを識別する。
【００８３】
クラスＢの非メモリアクセス８０５の命令テンプレートの場合、ベータフィールド８５４の一部はＲＬフィールド８５７Ａと解釈され、そのコンテンツは、異なる拡大オペレーションタイプのどれが実行されるべきかを識別し（例えば、非メモリアクセス・書き込みマスク制御・部分ラウンド制御型オペレーション８１２の命令テンプレート、及び非メモリアクセス・書き込みマスク制御・ＶＳＩＺＥ型オペレーション８１７の命令テンプレートに対し、ラウンド８５７Ａ．１及びベクトル長（ＶＳＩＺＥ）８５７Ａ．２がそれぞれ指定される）、ベータフィールド８５４の残りは、指定されるタイプのオペレーションのどれが実行されるべきかを識別する。非メモリアクセス８０５の命令テンプレートには、スケールフィールド８６０、変位フィールド８６２Ａ、及び変位係数フィールド８６２Ｂが存在しない。
【００８４】
非メモリアクセス・書き込みマスク制御・部分ラウンド制御型オペレーション８１２の命令テンプレートでは、ベータフィールド８５４の残りのものはラウンド演算フィールド８５９Ａと解釈され、例外イベント報告は無効にされる（所定の命令は、どの種類の浮動小数点例外フラグも報告せず、どの浮動小数点例外ハンドラも呼び出さない）。
【００８５】
ラウンド演算制御フィールド８５９Ａ：ラウンド演算制御フィールド８５８と全く同じように、このコンテンツは、ラウンド演算のグループのどれを実行すべきかを識別する（例えば、切り上げ、切り捨て、０への丸め、及び最近接丸め）。したがって、ラウンド演算制御フィールド８５９Ａは、命令に基づいてラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の１つの実施形態では、ラウンド演算制御フィールド８５０のコンテンツは、当該レジスタの値をオーバーライドする。
【００８６】
非メモリアクセス・書き込みマスク制御・ＶＳＩＺＥ型オペレーション８１７の命令テンプレートでは、ベータフィールド８５４の残りのものはベクトル長フィールド８５９Ｂと解釈され、そのコンテンツは、複数のデータベクトル長のどれが実行されるべきかを識別する（例えば、１２８バイト、２５６バイト、又は５１２バイト）。
【００８７】
クラスＢのメモリアクセス８２０の命令テンプレートの場合には、ベータフィールド８５４の一部はブロードキャストフィールド８５７Ｂと解釈され、そのコンテンツは、ブロードキャスト型のデータ操作オペレーションが実行されるべきかどうかを識別し、ベータフィールド８５４の残りはベクトル長フィールド８５９Ｂと解釈される。メモリアクセス８２０の命令テンプレートはスケールフィールド８６０を含み、任意で変位フィールド８６２Ａ又は変位係数フィールド８６２Ｂを含む。
【００８８】
汎用ベクトル対応命令フォーマット８００に関して、フォーマットフィールド８４０、ベースオペレーションフィールド８４２、及びデータ要素幅フィールド８６４を含むフルオペコードフィールド８７４が示されている。フルオペコードフィールド８７４がこれらのフィールド全てを含む１つの実施形態が示されているが、これらを全てサポートしない実施形態では、フルオペコードフィールド８７４は、これら全てのフィールドより少ないフィールドを含む。フルオペコードフィールド８７４は、オペレーションコード（オペコード）を提供する。
【００８９】
拡大オペレーションフィールド８５０、データ要素幅フィールド８６４、及び書き込みマスクフィールド８７０は、これらの機能が汎用ベクトル対応命令フォーマットの命令に基づいて指定されることを可能にする。
【００９０】
書き込みマスクフィールドとデータ要素幅フィールドの組み合わせは、それらが異なるデータ要素幅に基づいてマスクが適用されることを可能にするという点で、型付き命令を形成する。
【００９１】
クラスＡ及びクラスＢ内で見られる様々な命令テンプレートは、異なる状況において有益である。実施形態によっては、異なるプロセッサ又はプロセッサ内の異なるコアが、クラスＡのみ、クラスＢのみ、又は両方のクラスをサポートしてよい。例えば、汎用計算を対象とした高性能汎用アウトオブオーダコアは、クラスＢのみをサポートしてよく、グラフィックス及び／又は科学的（スループット）計算を主に対象としたコアは、クラスＡのみをサポートしてよく、両方を対象としたコアは、両方をサポートしてよい（もちろん、コアは、両方のクラスのテンプレート及び命令の何らかの組み合わせを有するが、両方のクラスの全てのテンプレート及び命令が本発明の範囲内にあるわけではない）。また、単一のプロセッサは複数のコアを含んでよく、その全てが同じクラスをサポートし、又はその異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサにおいて、グラフィックス及び／又は科学計算を主に対象とする複数のグラフィックスコアのうち１つがクラスＡのみをサポートしてよく、複数の汎用コアのうち１つ又は複数が、クラスＢのみをサポートする汎用計算を対象としたアウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックスコアを持たない別のプロセッサは、クラスＡ及びクラスＢの両方をサポートするもう１つの汎用インオーダ又はアウトオブオーダコアを含んでよい。
【００９２】
もちろん、一方のクラスの特徴はまた、異なる実施形態において他方のクラスに実装されてよい。高水準言語で書かれたプログラムは、以下の形式を含む様々な異なる実行可能形式に変換される（例えば、ジャスト・イン・タイム方式でコンパイルされる、又は静的にコンパイルされる）であろう。例えば、１）実行用ターゲットプロセッサによってサポートされる１つ又は複数のクラスの命令のみを有する形式、あるいは２）全クラスの命令の異なる組み合わせを用いて書かれた代替ルーチンを有し、プロセッサによってサポートされる命令に基づいて、実行するルーチンを選択する制御フローコードを有する形式であって、当該プロセッサが当該コードを現時点で実行している、形式である。
【００９３】
図９Ａ〜図９Ｄは、ある実施形態に従って例示的な特定ベクトル対応命令フォーマットを示すブロック図である。図９Ａは、特定ベクトル対応命令フォーマット９００を示し、これは位置、サイズ、解釈、及びフィールドの順序、並びにこれらのフィールドのいくつかに対する値を指定するという点で特定のものである。特定ベクトル対応命令フォーマット９００は、ｘ８６命令セットを拡張するのに用いられてよく、したがって、フィールドのいくつかは、既存のｘ８６命令セット及びその拡張版（例えば、ＡＶＸ）に用いられるものと同様又は同じである。このフォーマットは、拡張された既存のｘ８６命令セットのプリフィックス符号化フィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、及び即値フィールドと一致した状態のままである。図９Ａのフィールドがマッピングされる図８Ａ〜図８Ｂのフィールドが示されている。
【００９４】
実施形態は、例示を目的として汎用ベクトル対応命令フォーマット８００との関連で特定ベクトル対応命令フォーマット９００に関連して説明されるが、本発明は、特許請求される場合を除いて、特定ベクトル対応命令フォーマット９００に限定されないことが理解されるべきである。例えば、汎用ベクトル対応命令フォーマット８００では、様々なフィールドについて様々な可能なサイズを検討するが、特定ベクトル対応命令フォーマット９００は、特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド８６４が、特定ベクトル対応命令フォーマット９００内の１ビットフィールドとして示されているが、本発明はそのように限定されてはいない（すなわち、汎用ベクトル対応命令フォーマット８００では、他のサイズのデータ要素幅フィールド８６４を検討する）。
【００９５】
汎用ベクトル対応命令フォーマット８００は、図９Ａに示される順で以下に列挙される次のフィールドを含む。
【００９６】
ＥＶＥＸプリフィックス（バイト０−３）９０２：４バイト形式で符号化される。
【００９７】
フォーマットフィールド８４０（ＥＶＥＸバイト０、ビット［７：０］：１番目のバイト（ＥＶＥＸバイト０）はフォーマットフィールド８４０であり、ここには０ｘ６２（本発明の１つの実施形態において、ベクトル対応命令フォーマットを識別するのに用いられる固有値）が入っている。
【００９８】
２〜４番目のバイト（ＥＶＥＸバイト１−３）は、特定の機能を提供する複数のビットフィールドを含む。
【００９９】
ＲＥＸフィールド９０５（ＥＶＥＸバイト１、ビット［７−５］）：ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、及びＥＶＥＸ．Ｂビットフィールド（ＥＶＥＸバイト１、ビット［５］−Ｂ）から構成される。ＥＶＥＸ．Ｒビットフィールド、ＥＶＥＸ．Ｘビットフィールド、及びＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数形式を用いて符号化される。すなわち、ＺＭＭ０は１１１１Ｂとして符号化され、ＺＭＭ１５は００００Ｂとして符号化される。当技術分野において知られているように、命令の他のフィールドは、レジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）を符号化し、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂを加えることで、Ｒｒｒｒ、Ｘｘｘｘ、Ｂｂｂｂが形成され得る。
【０１００】
ＲＥＸ´フィールド８１０：これはＲＥＸ´フィールド８１０の１番目の部分であり、拡張された３２個のレジスタセットの上位１６又は下位１６を符号化するのに用いられるＥＶＥＸ．Ｒ´ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ´）である。本発明の１つの実施形態では、このビットは、以下に示されるように他のビットと共にビット反転フォーマットで格納され、（周知のｘ８６の３２ビットモードにおいて）ＢＯＵＮＤ命令と識別する。ＢＯＵＮＤ命令のリアルオペコードバイトは６２であるが、（後述の）ＭＯＤ  Ｒ／ＭフィールドにおいてＭＯＤフィールドの値１１を受け付けない。代替的な実施形態は、このビット及び他の以下に示されるビットを反転フォーマットで格納しない。１の値が、下位１６個のレジスタを符号化するのに用いられる。換言すると、ＥＶＥＸ．Ｒ´、ＥＶＥＸ．Ｒ、及び他のフィールドの他のＲＲＲを組み合わせことで、Ｒ´Ｒｒｒｒが形成される。
【０１０１】
オペコードマップフィールド９１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）：このコンテンツは、暗黙の先頭オペコードバイト（０Ｆ、０Ｆ３８、又は０Ｆ３）を符号化する。
【０１０２】
データ要素幅フィールド８６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）：ＥＶＥＸ．Ｗという表記によって表される。ＥＶＥＸ．Ｗは、データタイプ（３２ビットデータ要素又は６４ビットデータ要素）の粒度（サイズ）を定義するのに用いられる。
【０１０３】
ＥＶＥＸ．ｖｖｖｖ９２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）：ＥＶＥＸ．ｖｖｖｖの役割は以下のことを含み得る。１）ＥＶＥＸ．ｖｖｖｖは、第１のソースレジスタオペランドを符号化し、反転（１の補数）形式で指定され、２又はそれより多くのソースオペランドを有する命令に有効である。２）ＥＶＥＸ．ｖｖｖｖは、デスティネーションレジスタオペランドを符号化し、特定のベクトルシフトについて１の補数形式で指定される。又は、３）ＥＶＥＸ．ｖｖｖｖはどのオペランドも符号化せず、フィールドは予約され１１１１ｂを含むはずである。したがって、ＥＶＥＸ．ｖｖｖｖフィールド９２０は、反転（１の補数）形式で格納される第１のソースレジスタ指定子の下位ビット４つを符号化する。命令に応じて、追加の異なるＥＶＥＸビットフィールドが、指定子サイズを３２個のレジスタに拡張するのに用いられる。
【０１０４】
ＥＶＥＸ．Ｕクラスフィールド８６８（ＥＶＥＸバイト２、ビット［２］−Ｕ）：ＥＶＥＸ．Ｕ＝０の場合にクラスＡ又はＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１の場合にクラスＢ又はＥＶＥＸ．Ｕ１を示す。
【０１０５】
プリフィックス符号化フィールド９２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）：ベースオペレーションフィールドに追加のビットを提供する。ＥＶＥＸプリフィックスフォーマットのレガシＳＳＥ命令にサポートを提供することに加え、ＳＩＭＤプリフィックスを圧縮するという利点も有する（ＳＩＭＤプリフィックスを示すのに１バイトを必要とするのではなく、ＥＶＥＸプリフィックスは２ビットしか必要としない）。１つの実施形態では、レガシフォーマット及びＥＶＥＸプリフィックスフォーマットの両方でＳＩＭＤプリフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシＳＳＥ命令をサポートすべく、このレガシＳＩＭＤプリフィックスはＳＩＭＤプリフィックス符号化フィールドに符号化され、実行時には、デコーダのＰＬＡに提供される前にレガシＳＩＭＤプリフィックスに拡張される（そのため、ＰＬＡは、このレガシ命令のレガシフォーマットとＥＶＥＸフォーマットとの両方を変更せずに実行し得る）。より新たな命令がＥＶＥＸプリフィックス符号化フィールドのコンテンツをオペコード拡張として直接用いる場合があるが、特定の実施形態は一貫性のために同様の形式で拡張しても、このレガシＳＩＭＤプリフィックスによって指定される異なる目的を可能とする。代替的な実施形態は、２ビットＳＩＭＤプリフィックス符号化をサポートするようにＰＬＡを再設計してよく、したがって拡張を必要としない。
【０１０６】
アルファフィールド８５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌ、及びＥＶＥＸ．Ｎとしても知られ、αでも示される）：前述したように、このフィールドはコンテキスト固有である。
【０１０７】
ベータフィールド８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、βββでも示される）：前述したように、このフィールドはコンテキスト固有である。
【０１０８】
ＲＥＸ´フィールド８１０：これは、ＲＥＸ´フィールドの残りであり、拡張された３２個のレジスタセットの上位１６又は下位１６を符号化するのに用いられ得るＥＶＥＸ．Ｖ´ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ´）である。このビットは、ビット反転フォーマットで格納される。１の値が、下位１６個のレジスタを符号化するのに用いられる。換言すると、Ｖ´ＶＶＶＶは、ＥＶＥＸ．Ｖ´、ＥＶＥＸ．ｖｖｖｖを組み合わせることで形成される。
【０１０９】
書き込みマスクフィールド８７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）：このコンテンツは、前述したように、書き込みマスクレジスタにおいてレジスタのインデックスを指定する。本発明の１つの実施形態では、特定値ＥＶＥＸ．ｋｋｋ＝０００は、どの書き込みマスクも特定の命令に用いられないことを示唆する特別な挙動を有する（これは、全て１に物理的に組み込まれた書き込みマスクの使用、又はマスキングハードウェアをバイパスするハードウェアの使用を含む様々な方法で実装され得る）。
【０１１０】
リアルオペコードフィールド９３０（バイト４）はまた、オペコードバイトとしても知られている。そのオペコードの一部はこのフィールドに指定されている。
【０１１１】
ＭＯＤ  Ｒ／Ｍフィールド９４０（バイト５）は、ＭＯＤフィールド９４２、Ｒｅｇフィールド９４４、及びＲ／Ｍフィールド９４６を含む。前述したように、ＭＯＤフィールド９４２のコンテンツは、メモリアクセスオペレーションと非メモリアクセスオペレーションとを識別する。Ｒｅｇフィールド９４４の役割は、デスティネーションレジスタオペランド又はソースレジスタオペランドを符号化すること、あるいはオペコード拡張として扱われ、どの命令オペランドを符号化するのにも用いられないこと、という２つの状況に要約され得る。Ｒ／Ｍフィールド９４６の役割は、メモリアドレスを参照する命令オペランドを符号化すること、あるいはデスティネーションレジスタオペランド又はソースレジスタオペランドを符号化することを含んでよい。
【０１１２】
スケール・インデックス・ベース（ＳＩＢ）バイト（バイト６）：前述したように、スケールフィールド８５０のコンテンツは、メモリアドレス生成に用いられる。ＳＩＢ．ｘｘｘ９５４及びＳＩＢ．ｂｂｂ９５６：これらのフィールドのコンテンツは、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前述されている。
【０１１３】
変位フィールド８６２Ａ（バイト７−１０）：ＭＯＤフィールド９４２に１０が入っている場合、バイト７−１０は変位フィールド８６２Ａであり、これは、レガシ３２ビット変位（ｄｉｓｐ３２）と同じように機能し、バイト粒度で機能する。
【０１１４】
変位係数フィールド８６２Ｂ（バイト７）：ＭＯＤフィールド９４２に０１が入っている場合、バイト７は変位係数フィールド８６２Ｂである。このフィールドの位置は、バイト粒度で機能するレガシｘ８６命令セットの８ビット変位（ｄｉｓｐ８）のものと同じである。ｄｉｓｐ８は符号拡張されているので、−１２８と１２７バイトとの間のオフセットをアドレス指定できるだけであり、６４バイトキャッシュラインに関しては、ｄｉｓｐ８は本当に有用な４つの値−１２８、−６４、０及び６４にだけ設定され得る８ビットを用いる。より広い範囲が必要となることが多いのでｄｉｓｐ３２が用いられるが、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８及びｄｉｓｐ３２と対照的に、変位係数フィールド８６２Ｂはｄｉｓｐ８を再解釈したものであり、変位係数フィールド８６２Ｂを用いる場合、実際の変位は、メモリオペランドアクセスのサイズ（Ｎ）を乗じた変位係数フィールドのコンテンツによって決定される。このタイプの変位は、ｄｉｓｐ８×Ｎと呼ばれる。これにより、平均命令長（変位のために用いられる単一のバイトであるが、はるかに広い範囲を有する）が減少する。そのような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づいており、したがって、アドレスオフセットの冗長下位ビットは、符号化される必要がない。換言すると、変位係数フィールド８６２Ｂは、レガシｘ８６命令セットの８ビット変位を代用する。したがって、変位係数フィールド８６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８×Ｎにオーバーロードされることを唯一の例外として、ｘ８６命令セットの８ビット変位と同じように符号化される（そのため、ＭｏｄＲＭ／ＳＩＢ符号化ルールに変更はない）。換言すると、符号化ルール又は符号化長に変更はなく、ハードウェアによる変位値の解釈にだけ変更がある（これにより、バイト単位のアドレスオフセットを取得するために、メモリオペランドのサイズによって変位をスケーリングすることが必要となる）。
【０１１５】
即値フィールド８７２は、前述したように作用する。
［フルオペコードフィールド］
【０１１６】
図９Ｂは、本発明の１つの実施形態に従って、フルオペコードフィールド８７４を構成する特定ベクトル対応命令フォーマット９００のフィールドを示すブロック図である。具体的には、フルオペコードフィールド８７４は、フォーマットフィールド８４０、ベースオペレーションフィールド８４２、及びデータ要素幅（Ｗ）フィールド８６４を含む。ベースオペレーションフィールド８４２は、プリフィックス符号化フィールド９２５、オペコードマップフィールド９１５、及びリアルオペコードフィールド９３０を含む。
［レジスタインデックスフィールド］
【０１１７】
図９Ｃは、本発明の１つの実施形態に従って、レジスタインデックスフィールド８４４を構成する特定ベクトル対応命令フォーマット９００のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド８４４は、ＲＥＸフィールド９０５、ＲＥＸ´フィールド９１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド９４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド９４６、ＶＶＶＶフィールド９２０、ｘｘｘフィールド９５４、及びｂｂｂフィールド９５６を含む。
［拡大オペレーションフィールド］
【０１１８】
図９Ｄは、本発明の１つの実施形態に従って、拡大オペレーションフィールド８５０を構成する特定ベクトル対応命令フォーマット９００のフィールドを示すブロック図である。クラス（Ｕ）フィールド８６８に０が入っている場合、これはＥＶＥＸ．Ｕ０（クラスＡ８６８Ａ）を意味し、１が入っている場合には、ＥＶＥＸ．Ｕ１（クラスＢ８６８Ｂ）を意味する。Ｕ＝０、且つＭＯＤフィールド９４２に１１が入っている場合（非メモリアクセスオペレーションを意味する）、アルファフィールド８５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はｒｓフィールド８５２Ａと解釈される。ｒｓフィールド８５２Ａに１が入っている場合（ラウンド８５２Ａ．１）、ベータフィールド８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）はラウンド制御フィールド８５４Ａと解釈される。ラウンド制御フィールド８５４Ａは、１ビットのＳＡＥフィールド８５６及び２ビットのラウンド演算フィールド８５８を含む。ｒｓフィールド８５２Ａに０が入っている場合（データ変換８５２Ａ．２）、ベータフィールド８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は３ビットのデータ変換フィールド８５４Ｂと解釈される。Ｕ＝０、且つＭＯＤフィールド９４２に００、０１、又は１０が入っている場合（メモリアクセスオペレーションを意味する）、アルファフィールド８５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）はエビクションヒント（ＥＨ）フィールド８５２Ｂと解釈され、ベータフィールド８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は３ビットのデータ操作フィールド８５４Ｃと解釈される。
【０１１９】
Ｕ＝１の場合、アルファフィールド８５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は書き込みマスク制御（Ｚ）フィールド８５２Ｃと解釈される。Ｕ＝１、且つＭＯＤフィールド９４２に１１が入っている場合（非メモリアクセスオペレーションを意味する）、ベータフィールド８５４（ＥＶＥＸバイト３、ビット［４］−Ｓ０）の一部はＲＬフィールド８５７Ａと解釈され、１（ラウンド８５７Ａ．１）が入っている場合には、ベータフィールド８５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りはラウンド演算フィールド８５９Ａと解釈される。ＲＬフィールド８５７Ａに０（ＶＳＩＺＥ８５７．Ａ２）が入っている場合、ベータフィールド８５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りはベクトル長フィールド８５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）と解釈される。Ｕ＝１、且つＭＯＤフィールド９４２に００、０１、又は１０が入っている場合（メモリアクセスオペレーションを意味する）、ベータフィールド８５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド８５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）及びブロードキャストフィールド８５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）と解釈される。
［例示的なレジスタアーキテクチャ］
【０１２０】
図１０は、ある実施形態によるレジスタアーキテクチャ１０００のブロック図である。示される実施形態には、５１２ビット幅の３２個のベクトルレジスタ１０１０があり、これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１と参照符号が付けられている。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１５にオーバーレイされる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５にオーバーレイされる。特定ベクトル対応命令フォーマット９００は、以下の表２に示されるように、これらのオーバーレイされたレジスタファイルに作用する。
【表２】
2017534114.tif 000004
【０１２１】
換言すると、ベクトル長フィールド８５９Ｂは、最大長さと１つ又は複数の他のより短い長さとの間から選択し、このようなより短い長さはそれぞれ、前述の長さの半分の長さであり、ベクトル長フィールド８５９Ｂを用いない命令テンプレートは、最大ベクトル長に作用する。さらに１つの実施形態では、特定ベクトル対応命令フォーマット９００のクラスＢ命令テンプレートは、パックド又はスカラ単精度／倍精度浮動小数点データ、及びパックド又はスカラ整数データに作用する。スカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位データ要素位置において実行される演算であり、上位のデータ要素位置は、実施形態に応じて、命令の前と同じ状態のままにされるか又はゼロ設定される。
【０１２２】
書き込みマスクレジスタ１０１５：示される実施形態には、８個の書き込みマスクレジスタ（ｋ０〜ｋ７）があり、それぞれのサイズは６４ビットである。代替的な実施形態において、書き込みマスクレジスタ１０１５のサイズは１６ビットである。前述したように、本発明の１つの実施形態では、ベクトルマスクレジスタｋ０は書き込みマスクとして用いられることができず、ｋ０を標準的に示すであろう符号化が書き込みマスクに用いられる場合、これは、物理的に組み込まれた０ｘＦＦＦＦという書き込みマスクを選択し、当該命令用の書き込みマスクを事実上無効にする。
【０１２３】
汎用レジスタ１０２５：示される実施形態には、メモリオペランドをアドレス指定する既存のｘ８６アドレッシングモードと共に用いられる１６個の６４ビット汎用レジスタが存在する。これらのレジスタには、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８〜Ｒ１５という名称で参照符号が付けられている。
【０１２４】
ＭＭＸパックド整数フラットレジスタファイル１０５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１０４５：示される実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点演算を実行するのに用いられる８要素スタックである。一方、ＭＭＸレジスタは、６４ビットパックド整数データに対して演算を実行するのに用いられ、さらにＭＭＸとＸＭＭレジスタとの間で実行される一部の演算用にオペランドを保持するのに用いられる。
【０１２５】
代替的な実施形態は、より広いレジスタを用いても、又はより狭いレジスタを用いてもよい。さらに、代替的な実施形態は、より多くのレジスタファイル、より少ないレジスタファイル、又は異なるレジスタファイル及びレジスタを用いてもよい。
【０１２６】
より完全な理解をもたらすべく、例示的なプロセッサコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャの概要が以下に提供されている。
［例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ］
【０１２７】
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサに実装されてよい。例えば、そのようなコアの実装は、１）汎用計算を対象とした汎用インオーダコア、２）汎用計算を対象とした高性能汎用アウトオブオーダコア、３）グラフィックス及び／又は科学（スループット）計算を主に対象とした専用コアを含んでよい。異なるプロセッサの実装は、１）汎用計算を対象とした１つ又は複数の汎用インオーダコア、及び／又は、汎用計算を対象とした１つ又は複数の汎用アウトオブオーダコアを含むＣＰＵ、並びに２）グラフィックス及び／又は科学（スループット）を主に対象とした１つ又は複数の専用コアを含むコプロセッサを含んでよい。そのような異なるプロセッサによって異なるコンピュータシステムアーキテクチャがもたらされるが、それは次のようなものを含んでよい。１）ＣＰＵとは別のチップに搭載されたコプロセッサ、２）ＣＰＵと同じパッケージ内の別のダイに搭載されたコプロセッサ、３）ＣＰＵと同じダイに搭載されたコプロセッサ（この場合、そのようなコプロセッサは専用ロジックと呼ばれることがあり、例えば統合グラフィックスロジック及び／又は科学（スループット）ロジック、あるいは専用コアなどがある）、及び４）説明されたＣＰＵ（アプリケーションコア又はアプリケーションプロセッサと呼ばれることがある）、上述のコプロセッサ、及び追加機能を同じダイ上に含み得るシステムオンチップである。例示的なコアアーキテクチャが次に説明され、その後に例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。
［例示的なコアアーキテクチャ］
［インオーダコア及びアウトオブオーダコアのブロック図］
【０１２８】
図１１Ａは、ある実施形態に従って、例示的なインオーダパイプラインと、例示的なレジスタリネーミング・アウトオブオーダ発行／実行パイプラインとの両方を示すブロック図である。図１１Ｂは、ある実施形態に従って、プロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング・アウトオブオーダ発行／実行アーキテクチャコアとの両方を示すブロック図である。図１１Ａ〜図１１Ｂの実線で示されたボックスは、インオーダパイプライン及びインオーダコアを示す。一方、破線で示されたボックスの任意の追加は、レジスタリネーミング・アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様はアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【０１２９】
図１１Ａにおいて、プロセッサパイプライン１１００は、フェッチステージ１１０２、レングス復号ステージ１１０４、復号ステージ１１０６、割り当てステージ１１０８、リネーミングステージ１１１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ１１１２、レジスタ読み出し／メモリ読み出しステージ１１１４、実行ステージ１１１６、ライトバック／メモリ書き込みステージ１１１８、例外処理ステージ１１２２、及びコミットステージ１１２４を含む。
【０１３０】
図１１Ｂは、実行エンジンユニット１１５０に結合されたフロントエンドユニット１１３０を含むプロセッサコア１１９０を示し、両方ともメモリユニット１１７０に結合されている。コア１１９０は、縮小命令セット計算（ＲＩＳＣ）コア、複合命令セット計算（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、あるいはハイブリッド又は代替的なコアタイプであってよい。さらに別の選択肢として、コア１１９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどの専用コアであってもよい。
【０１３１】
フロントエンドユニット１１３０は、命令キャッシュユニット１１３４に結合された分岐予測ユニット１１３２を含み、命令キャッシュユニット１１３４は命令変換ルックアサイドバッファ（ＴＬＢ）１１３６に結合され、命令変換ルックアサイドバッファ（ＴＬＢ）１１３６は命令フェッチユニット１１３８に結合され、命令フェッチユニット１１３８は復号ユニット１１４０に結合されている。復号ユニット１１４０（又はデコーダ）は、複数の命令を復号し、１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成し得る。これらは、元の命令から復号され、又は別の方法で元の命令を反映し、又は元の命令から導出される。復号ユニット１１４０は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）などが含まれる。１つの実施形態では、コア１１９０は、特定のマクロ命令用のマイクロコードを（例えば、復号ユニット１１４０の中に、そうでなければフロントエンドユニット１１３０内に）格納するマイクロコードＲＯＭ又は他の媒体を含む。復号ユニット１１４０は、実行エンジンユニット１１５０内のリネーム／アロケータユニット１１５２に結合されている。
【０１３２】
実行エンジンユニット１１５０は、リタイアメントユニット１１５４と、１つ又は複数のスケジューラユニット１１５６のセットとに結合されたリネーム／アロケータユニット１１５２を含む。スケジューラユニット１１５６は、リザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット１１５６は、物理レジスタファイルユニット１１５８に結合されている。物理レジスタファイルユニット１１５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、そのそれぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）など、１つ又は複数の異なるデータタイプを格納する。１つの実施形態では、物理レジスタファイルユニット１１５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット１１５８は、リタイアメントユニット１１５４によってオーバーラップされ、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な方法を示す（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、並びにレジスタマップ及びレジスタのプールを用いるなど）。リタイアメントユニット１１５４及び物理レジスタファイルユニット１１５８は、実行クラスタ１１６０に結合されている。実行クラスタ１１６０は、１つ又は複数の実行ユニット１１６２のセットと、１つ又は複数のメモリアクセスユニット１１６４のセットとを含む。実行ユニット１１６２は、様々な演算（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に実行してよい。いくつかの実施形態は、特定の機能又は機能のセットに専用の複数の実行ユニットを含んでよく、他の実施形態は、１つのみの実行ユニット、又は全ての機能を全て実行する複数の実行ユニットを含んでもよい。特定の実施形態は、特定のタイプのデータ／オペレーションに対して別個のパイプラインを形成するので、スケジューラユニット１１５６、物理レジスタファイルユニット１１５８、及び実行クラスタ１１６０は、可能性として複数であると示されている（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプラインはそれぞれ、独自のスケジューラユニット、物理レジスタファイルユニット、及び／又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット１１６４を有する特定の実施形態が実装される）。別個のパイプラインが用いられる場合、これらのパイプラインのうち１つ又は複数がアウトオブオーダ発行／実行であってよく、残りがインオーダであってもよいことも理解されるべきである。
【０１３３】
メモリアクセスユニット１１６４のセットがメモリユニット１１７０に結合され、メモリユニット１１７０は、レベル２（Ｌ２）キャッシュユニット１１７６に結合されたデータキャッシュユニット１１７４に結合されたデータＴＬＢユニット１１７２を含む。１つの例示的な実施形態において、メモリアクセスユニット１１６４は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらのそれぞれはメモリユニット１１７０内のデータＴＬＢユニット１１７２に結合されている。命令キャッシュユニット１１３４は、メモリユニット１１７０内のレベル２（Ｌ２）キャッシュユニット１１７６にさらに結合される。Ｌ２キャッシュユニット１１７６は、１つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【０１３４】
例として、例示的なレジスタリネーミング・アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン１１００を以下のように実装してよい。すなわち、１）命令フェッチ１１３８がフェッチステージ１１０２及びレングス復号ステージ１１０４を実行する。２）復号ユニット１１４０が復号ステージ１１０６を実行する。３）リネーム／アロケータユニット１１５２が割り当てステージ１１０８及びリネーミングステージ１１１０を実行する。４）スケジューラユニット１１５６がスケジュールステージ１１１２を実行する。５）物理レジスタファイルユニット１１５８及びメモリユニット１１７０がレジスタ読み出し／メモリ読み出しステージ１１１４を実行する。実行クラスタ１１６０が実行ステージ１１１６を実行する。６）メモリユニット１１７０及び物理レジスタファイルユニット１１５８がライトバック／メモリ書き込みステージ１１１８を実行する。７）様々なユニットが例外処理ステージ１１２２に関与し得る。８）リタイアメントユニット１１５４及び物理レジスタファイルユニット１１５８がコミットステージ１１２４を実行する。
【０１３５】
コア１１９０は、本明細書で説明される命令を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンと共に追加されたいくつかの拡張を有する）、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州／サニーベール）のＭＩＰＳ命令セット、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（英国／ケンブリッジ、カリフォルニア州／サンノゼ）のＡＲＭ命令セット（ＮＥＯＮなどの任意の追加拡張を有する））をサポートしてよい。１つの実施形態では、コア１１９０はパックドデータ命令セット拡張（例えば、前述されたＡＶＸ１、ＡＶＸ２、及び／又は何らかの形式の汎用ベクトル対応命令フォーマット（Ｕ＝０及び／又はＵ＝１））をサポートするロジックを含み、それによって多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
【０１３６】
コアはマルチスレッディング（オペレーション又はスレッドからなる２つ又はそれより多くの並列セットを実行）をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング（物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して、単一の物理コアが論理コアを提供する）、又はこれらの組み合わせ（例えば、タイムスライスフェッチ及び復号、並びにそれ以降のＩｎｔｅｌ（登録商標）ハイパースレッディング・テクノロジーなどの同時マルチスレッディング）を含む様々な方法でサポートしてよいことが理解されるべきである。
【０１３７】
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてもよいことが理解されるべきである。示されたプロセッサの実施形態はまた、別々の命令キャッシュユニット１１３４とデータキャッシュユニット１１７４、並びに共有Ｌ２キャッシュユニット１１７６を含むが、代替的な実施形態は、命令及びデータの両方に対して、例えばレベル１（Ｌ１）内部キャッシュ又は複数のレベルの内部キャッシュなど、単一の内部キャッシュを有してもよい。実施形態によっては、システムは、内部キャッシュ及び外部キャッシュの組み合わせを含んでよく、外部キャッシュはコア及び／又はプロセッサの外部に存在する。あるいは、全てのキャッシュが、コア及び／又はプロセッサの外部にあってもよい。
［具体的な例示的インオーダコアアーキテクチャ］
【０１３８】
図１２Ａ〜図１２Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じタイプ及び／又は異なるタイプの他のコアを含む）の１つになるであろう。論理ブロックは、用途に応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を通じて、何らかの固定機能ロジック、メモリＩ／Ｏインタフェース、及び他の必要なＩ／Ｏロジックと通信する。
【０１３９】
図１２Ａは、ある実施形態による単一のプロセッサコアのブロック図であり、オンダイ相互接続ネットワーク１２０２への接続に加え、レベル２（Ｌ２）キャッシュ１２０４のローカルサブセットを有する。１つの実施形態では、命令デコーダ１２００はパックドデータ命令セット拡張を用いてｘ８６命令セットをサポートする。Ｌ１キャッシュ１２０６によって、キャッシュメモリからスカラユニット及びベクトルユニットへの低レイテンシアクセスが可能となる。１つの実施形態では、（設計を簡略化するために）スカラユニット１２０８及びベクトルユニット１２１０が、別々のレジスタセット（それぞれ、複数のスカラレジスタ１２１２及び複数のベクトルレジスタ１２１４）を用い、これらの間で転送されるデータはメモリに書き込まれ、その後、レベル１（Ｌ１）キャッシュ１２０６から読み戻されるが、本発明の代替的な実施形態は、異なる手法を用いてよい（例えば、単一のレジスタセットを用いる、又は書き込み及び読み戻しを行うことなく、２つのレジスタファイル間でのデータ転送を可能にする通信経路を含む）。
【０１４０】
Ｌ２キャッシュのローカルサブセット１２０４は、別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部であり、プロセッサコアごとに１つである。各プロセッサコアは、独自のＬ２キャッシュのローカルサブセット１２０４に直接アクセスする経路を有する。プロセッサコアにより読み出されたデータは、Ｌ２キャッシュのサブセット１２０４に格納され、他のプロセッサコアが独自のローカルＬ２キャッシュのサブセットにアクセスするのと並行して、高速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、独自のＬ２キャッシュのサブセット１２０４に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向性であり、プロセッサコア、Ｌ２キャッシュ、及び他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータ経路は、方向ごとに１０１２ビット幅である。
【０１４１】
図１２Ｂは、ある実施形態による図１２Ａのプロセッサコアの一部を拡大した図である。図１２Ｂは、Ｌ１キャッシュ１２０４の一部であるＬ１データキャッシュ１２０６Ａと、ベクトルユニット１２１０及びベクトルレジスタ１２１４に関するより詳細とを含む。具体的には、ベクトルユニット１２１０は１６幅のベクトル処理ユニット（ＶＰＵ）（１６幅のＡＬＵ１２２８を参照）であり、整数命令、単精度浮動小数点命令、及び倍精度浮動小数点命令のうち１つ又は複数を実行する。ＶＰＵは、スウィズルユニット１２２０を用いたレジスタ入力のスウィズル処理、数値変換ユニット１２２２Ａ〜１２２２Ｂを用いた数値変換、並びに複製ユニット１２２４を用いたメモリ入力の複製をサポートする。書き込みマスクレジスタ１２２６は、結果として生じるベクトル書き込みをプレディケートする（ｐｒｅｄｉｃａｔｅｉｎｇ  ）ことを可能にする。
［統合メモリコントローラ及び専用ロジックを有するプロセッサ］
【０１４２】
図１３は、ある実施形態によるプロセッサ１３００のブロック図であり、これは１つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよい。図１３の実線で示されたボックスは、単一のコア１３０２Ａ、システムエージェント１３１０、１つ又は複数のバスコントローラユニット１３１６のセットを有するプロセッサ１３００を示し、破線で示されたボックスの任意の追加は、複数のコア１３０２Ａ〜１３０２Ｎ、システムエージェントユニット１３１０内にある１つ又は複数の統合メモリコントローラユニット１３１４のセット、及び専用ロジック１３０８を有する代替プロセッサ１３００を示す。
【０１４３】
したがって、プロセッサ１３００の異なる実装は、１）専用ロジック１３０８が統合グラフィックス及び／又は科学（スループット）ロジック（１つ又は複数のコアを含んでよい）であり、コア１３０２Ａ〜１３０２Ｎが１つ又は複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、その２つの組み合わせ）であるＣＰＵ、２）コア１３０２Ａ〜１３０２Ｎが、グラフィックス及び／又は科学（スループット）を主に対象とした多数の専用コアであるコプロセッサ、並びに３）コア１３０２Ａ〜１３０２Ｎが多数の汎用インオーダコアであるコプロセッサを含んでよい。したがって、プロセッサ１３００は汎用プロセッサ、コプロセッサであってよく、あるいは専用プロセッサ、例えばネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットの多数統合コア（ＭＩＣ）コプロセッサ（３０個又はそれより多くのコアを含む）、組み込みプロセッサなどであってもよい。プロセッサは、１つ又は複数のチップ上に実装されてよい。プロセッサ１３００は１つ又は複数の基板の一部であってよく、及び／又は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳなどの複数のプロセス技術のいずれかを用いて１つ又は複数の基板上に実装されてもよい。
【０１４４】
メモリ階層は、コア内にある１つ又は複数のレベルのキャッシュと、共有キャッシュユニット１３０６のセットあるいは１つ又は複数の共有キャッシュユニット１３０６と、統合メモリコントローラユニット１３１４のセットに結合された外部メモリ（不図示）とを含む。共有キャッシュユニット１３０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他のレベルのキャッシュなど、１つ又は複数の中間レベルのキャッシュ、又は他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、及び／又はこれらの組み合わせを含んでよい。１つの実施形態では、リングベースの相互接続ユニット１３１２が、統合グラフィックスロジック１３０８、共有キャッシュユニット１３０６のセット、及びシステムエージェントユニット１３１０／統合メモリコントローラユニット１３１４を相互接続するが、代替的な実施形態は、このようなユニットを相互接続するのに任意の数の周知手法を用いてよい。１つの実施形態では、１つ又は複数のキャッシュユニット１３０６と、コア１３０２Ａ〜１３０２Ｎとの間でコヒーレンシが維持される。
【０１４５】
実施形態によっては、コア１３０２Ａ〜１３０２Ｎのうち１つ又は複数がマルチスレッディング可能である。システムエージェント１３１０は、コア１３０２Ａ〜１３０２Ｎを調整し動作させるこうした構成要素を含む。システムエージェントユニット１３１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでよい。ＰＣＵは、コア１３０２Ａ〜１３０２Ｎ及び統合グラフィックスロジック１３０８の電力状態を管理するのに必要なロジック及び構成要素であってよく、又は当該ロジック及び当該構成要素を含んでもよい。ディスプレイユニットは、外部接続された１つ又は複数のディスプレイを駆動するためのものである。
【０１４６】
コア１３０２Ａ〜１３０２Ｎは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア１３０２Ａ〜１３０２Ｎのうち２つ又はそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセット又は別の命令セットだけを実行することが可能であってもよい。
［例示的なコンピュータアーキテクチャ］
【０１４７】
図１４〜図１７は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ型ＰＣ、デスクトップ型ＰＣ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルド型デバイス、及び様々な他の電子デバイス向けの当技術分野において知られる他のシステム設計及び構成も適している。概して、本明細書に開示されるプロセッサ及び／又は他の実行ロジックを組み込むことが可能である多様なシステム又は電子デバイスが一般的に適している。
【０１４８】
ここで図１４を参照すると、本発明の１つの実施形態によるシステム１４００のブロック図が示されている。システム１４００は、１つ又は複数のプロセッサ１４１０、１４１５を含んでよく、これらはコントローラハブ１４２０に結合されている。１つの実施形態では、コントローラハブ１４２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）１４９０と、入力／出力ハブ（ＩＯＨ）１４５０（これは別のチップ上にあってよい）とを含む。ＧＭＣＨ１４９０は、メモリ及びグラフィックスコントローラを含み、これらにメモリ１４４０及びコプロセッサ１４４５が結合されている。ＩＯＨ１４５０は入力／出力（Ｉ／Ｏ）デバイス１４６０をＧＭＣＨ１４９０に結合する。あるいは、メモリ及びグラフィックスコントローラの一方又は両方が、（本明細書に説明されるように）プロセッサ内に統合され、メモリ１４４０及びコプロセッサ１４４５は、プロセッサ１４１０と、ＩＯＨ１４５０と共に単一チップに入ったコントローラハブ１４２０とに直接結合される。
【０１４９】
任意的な性質の追加のプロセッサ１４１５は、図１４に破線で示されている。各プロセッサ１４１０、１４１５は、本明細書で説明される処理コアのうち１つ又は複数を含んでよく、何らかのバージョンのプロセッサ１３００であってよい。
【０１５０】
メモリ１４４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、又はこの２つの組み合わせであってよい。少なくとも１つの実施形態では、コントローラハブ１４２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ）などのポイントツーポイントインタフェース、又は同種の接続１４９５を介してプロセッサ１４１０、１４１５と通信する。
【０１５１】
１つの実施形態では、コプロセッサ１４４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどの専用プロセッサである。１つの実施形態では、コントローラハブ１４２０は統合グラフィックスアクセラレータを含んでよい。
【０１５２】
物理リソース１４１０と１４１５との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性などを含む広範な価値基準に関して、様々な差異が存在し得る。
【０１５３】
１つの実施形態では、プロセッサ１４１０は、一般的タイプのデータ処理オペレーションを制御する命令を実行する。この命令内にコプロセッサ命令が組み込まれてもよい。プロセッサ１４１０は、このコプロセッサ命令を、付属のコプロセッサ１４４５が実行すべきタイプの命令であると認識する。したがって、プロセッサ１４１０は、このコプロセッサ命令（又はコプロセッサ命令を表す制御信号）をコプロセッサバス又は他の相互接続を使ってコプロセッサ１４４５に発行する。コプロセッサ１４４５は、受信したコプロセッサ命令を受け付けて実行する。
【０１５４】
ここで図１５を参照すると、本発明の実施形態に従って、より具体的な第１の例示的なシステム１５００のブロック図が示されている。図１５に示されるように、マルチプロセッサシステム１５００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１５５０を介して結合される第１のプロセッサ１５７０と、第２のプロセッサ１５８０とを含む。プロセッサ１５７０及び１５８０のそれぞれは、何らかのバージョンのプロセッサ１３００であってよい。本発明の１つの実施形態では、プロセッサ１５７０及び１５８０はそれぞれ、プロセッサ１４１０及び１４１５であり、コプロセッサ１５３８はコプロセッサ１４４５である。別の実施形態において、プロセッサ１５７０及び１５８０はそれぞれ、プロセッサ１４１０及びコプロセッサ１４４５である。
【０１５５】
プロセッサ１５７０及び１５８０は、統合メモリコントローラ（ＩＭＣ）ユニット１５７２及び１５８２をそれぞれ含んで示されている。プロセッサ１５７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１５７６及び１５７８を含み、同様に第２のプロセッサ１５８０はＰ−Ｐインタフェース１５８６及び１５８８を含む。プロセッサ１５７０、１５８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース１５５０を介し、Ｐ−Ｐインタフェース回路１５７８、１５８８を用いて情報を交換してよい。図１５に示されるように、ＩＭＣ１５７２及び１５８２は、プロセッサをそれぞれのメモリ、すなわちメモリ１５３２及びメモリ１５３４に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【０１５６】
プロセッサ１５７０、１５８０はそれぞれ、個々のＰ−Ｐインタフェース１５５２、１５５４を介し、ポイントツーポイントインタフェース回路１５７６、１５９４、１５８６、１５９８を用いてチップセット１５９０と情報を交換してよい。チップセット１５９０は任意で、高性能インタフェース１５３９を介してコプロセッサ１５３８と情報を交換してよい。１つの実施形態では、コプロセッサ１５３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどの専用プロセッサである。
【０１５７】
共有キャッシュ（不図示）がどちらかのプロセッサに含まれても、又は両方のプロセッサの外部に含まれてもよく、さらにＰ−Ｐ相互接続を介してこれらのプロセッサに接続されてもよい。これにより、プロセッサが低電力モードに入っている場合に、どちらかのプロセッサ又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【０１５８】
チップセット１５９０は、インタフェース１５９６を介して第１のバス１５１６に結合されてよい。１つの実施形態では、第１のバス１５１６は、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バス、あるいはＰＣＩエクスプレスバス又は別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されてはいない。
【０１５９】
図１５に示されるように、第１のバス１５１６を第２のバス１５２０に結合するバスブリッジ１５１８と共に、様々なＩ／Ｏデバイス１５１４が第１のバス１５１６に結合されてよい。１つの実施形態では、１つ又は複数の追加のプロセッサ１５１５が第１のバス１５１６に結合される。追加のプロセッサとは、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックスアクセラレータ、又はデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、又はその他のプロセッサなどである。１つの実施形態では、第２のバス１５２０はローピンカウント（ＬＰＣ）バスであってよい。様々なデバイスが第２のバス１５２０に結合されてよく、１つの実施形態では、そのようなデバイスには例えば、キーボード及び／又はマウス１５２２、通信デバイス１５２７、及びストレージユニット１５２８が含まれ、ストレージユニットには、命令／コード及びデータ１５３０を含み得るディスクドライブ又は他の大容量ストレージデバイスなどがある。さらに、オーディオＩ／Ｏ１５２４が第２のバス１５２０に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図１５のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装してよい。
【０１６０】
ここで図１６を参照すると、本発明の実施形態に従って、より具体的な第２の例示的なシステム１６００のブロック図が示されている。図１５及び図１６内の同様の要素は同様の参照番号を有しており、図１５の特定の態様が、図１６の他の態様をあいまいにしないように、図１６から省略されている。
【０１６１】
図１６は、プロセッサ１５７０、１５８０がそれぞれ、統合メモリと、Ｉ／Ｏ制御ロジック（「ＣＬ」）１５７２及び１５８２とを含んでよいことを示す。したがって、ＣＬ１５７２、１５８２は統合メモリコントローラユニットを含み、且つＩ／Ｏ制御ロジックを含む。図１６は、メモリ１５３２、１５３４だけがＣＬ１５７２、１５８２に結合されているのでなく、Ｉ／Ｏデバイス１６１４もまた、制御ロジック１５７２、１５８２に結合されていることを示している。レガシＩ／Ｏデバイス１６１５がチップセット１５９０に結合されている。
【０１６２】
ここで図１７を参照すると、本発明の実施形態に従ってＳｏＣ１７００のブロック図が示されている。図１３内の同種の要素は同様の参照番号を有している。また、破線で示されるボックスは、より高度なＳｏＣにおける任意の機能である。図１７において、相互接続ユニット１７０２が、１つ又は複数のコア１３０２Ａ〜１３０２Ｎ及び共有キャッシュユニット１３０６のセットを含むアプリケーションプロセッサ１７１０と、システムエージェントユニット１３１０と、バスコントローラユニット１３１６と、統合メモリコントローラユニット１３１４と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及び映像プロセッサを含み得る１つ又は複数のコプロセッサ１７２０又はそのセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１７３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット１７３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット１７４０とに結合されている。１つの実施形態では、コプロセッサ１７２０は専用プロセッサを含み、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサなどがある。
【０１６３】
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装される。実施形態は、少なくとも１つのプロセッサと、ストレージシステム（揮発性メモリ及び不揮発性メモリ、及び／又は記憶素子を含む）と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを有するプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装される。
【０１６４】
図１５に示されるコード１５３０などのプログラムコードは、本明細書で説明される機能を実行し、出力情報を生成する命令を入力するのに適用されてよい。出力情報は、１つ又は複数の出力デバイスに既知の方法で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１６５】
プログラムコードは、処理システムと通信すべく、高水準の手続き型又はオブジェクト指向型プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械語で実装されてよい。実際には、本明細書で説明されるメカニズムは、どの特定のプログラミング言語にも範囲を限定されない。どのような場合でも、言語はコンパイラ型言語又はインタプリタ型言語であってよい。
【０１６６】
少なくとも１つの実施形態の１つ又は複数の態様は、機械可読媒体に格納された典型的な命令により実装されてよい。この命令は、プロセッサ内の様々なロジックを表し、機械により読み出された場合、本明細書で説明される手法を実行すべく機械にロジックを作成させる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジック又はプロセッサを実際に作成する製造装置にロードすべく、様々な顧客又は製造施設に供給されてよい。
【０１６７】
そのような機械可読記憶媒体は、限定されることなく、機械又は装置により製造される又は形成される非一時的な有形の構成の物品を含んでよく、そのような物品には、ハードディスクや、フロッピ（登録商標）ディスク、光ディスク、コンパクトディスク・リードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク・リライタブル（ＣＤ−ＲＷ）、及び光磁気ディスクを含むその他のタイプのディスク、半導体デバイスとして、例えば、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）やスタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）など、磁気カード又は光カード、又は電子命令を格納するのに適したその他のタイプの媒体などの記憶媒体を含む。
【０１６８】
したがって、ある実施形態はまた、命令を含んだ、又はハードウェア記述言語（ＨＤＬ）などの設計データを含んだ非一時的な有形の機械可読媒体を含む。ＨＤＬは、本明細書で説明される構造、回路、装置、プロセッサ、及び／又はシステム機能を定義する。そのような実施形態はまた、プログラム製品と呼ばれ得る。
［エミュレーション（バイナリ変換、コードモーフィングなどを含む）］
【０１６９】
場合によっては、命令をソース命令セットからターゲット命令セットに変換するのに命令変換器が用いられてよい。例えば命令変換器は、ある命令を、コアによって処理される１つ又は複数の他の命令に翻訳（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）、モーフィング、エミュレーション、又は別の方法で変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサ上にあっても、プロセッサ外にあっても、又は一部がプロセッサ上にあり且つ一部がプロセッサ外にあってもよい。
【０１７０】
図１８は、ある実施形態に従って、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用法を対比するブロック図である。図示された実施形態では、命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてもよい。図１８は、高水準言語１８０２のプログラムがｘ８６コンパイラ１８０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１８１６によってネイティブに実行され得るｘ８６バイナリコード１８０６を生成し得ることを示す。
【０１７１】
少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１８１６は、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ結果を実現すべく、（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの大部分、又は（２）少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサ上で動作することを目的としたオブジェクトコード形式のアプリケーション又は他のソフトウェアを、互換的に実行する、又は別の方法で処理することで、少なくとも１つのｘ８６命令セットコアを搭載するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。ｘ８６コンパイラ１８０４は、追加のリンケージ処理をしてもしなくても、少なくとも１つのｘ８６命令セットコアを搭載するプロセッサ１８１６上で実行され得るｘ８６バイナリコード１８０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図１８は、高水準言語１８０２のプログラムが、別の命令セットコンパイラ１８０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを搭載しないプロセッサ１８１４（例えば、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（カリフォルニア州／サニーベール）のＭＩＰＳ命令セットを実行するコア、及び／又は、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（カリフォルニア州／サンノゼ）のＡＲＭ命令セットを実行するコアを搭載したプロセッサ）によりネイティブに実行され得る別の命令セットバイナリコード１８１０を生成し得ることを示す。
【０１７２】
命令変換器１８１２は、ｘ８６バイナリコード１８０６を、ｘ８６命令セットコアを搭載しないプロセッサ１８１４によりネイティブに実行され得るコードに変換するのに用いられる。この変換されたコードは、別の命令セットバイナリコード１８１０と同じになる可能性は低い。なぜなら、同じにできる命令変換器を作るのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、別の命令セットの命令で構成される。したがって、命令変換器１８１２は、エミュレーション、シミュレーション、又はその他の処理を通じて、ｘ８６命令セットプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスがｘ８６バイナリコード１８０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【０１７３】
上述の明細書では、本発明が、その特定の例示的な実施形態を参照して説明されている。しかし、それに対して、添付の特許請求の範囲に明記されている本発明の大局的な意図及び範囲から逸脱することなく、様々な修正及び変更が行われてよいことが明らかであろう。したがって、本明細書及び図面は限定的意味ではなく例示的意味で考えられるべきである。
【０１７４】
本明細書で説明される命令は、特定のオペレーションを実行するよう構成された、又は予め定められ機能を有する特定用途向け集積回路（ＡＳＩＣ）など、特定の構成のハードウェアを指す。典型的には、そのような電子デバイスは、１つ又は複数の他の構成要素に結合された１つ又は複数のプロセッサのセットを含む。そのような構成要素には、１つ又は複数のストレージデバイス（非一時的機械可読記憶媒体）、ユーザ入力／出力デバイス（例えば、キーボード、タッチスクリーン、及び／又はディスプレイ）、及びネットワーク接続などがある。典型的には、プロセッサのセットと他の構成要素との結合は、１つ又は複数のバス及びブリッジ（バスコントローラとも呼ばれる）を経由する。ストレージデバイス及びネットワークトラフィックを搬送する信号はそれぞれ、１つ又は複数の機械可読記憶媒体及び機械可読通信媒体を表す。したがって典型的には、所定の電子デバイスのストレージデバイスは、その電子デバイスの１つ又は複数のプロセッサのセット上で実行するためのコード及び／又はデータを格納する。
【０１７５】
もちろん、本発明の実施形態の１つ又は複数の部分が、ソフトウェア、ファームウェア、及び／又はハードウェアの異なる組み合わせを用いて実装されてもよい。この詳細な説明の全体にわたり、説明を目的として、本発明の完全な理解をもたらすよう多数の具体的な詳細が明記された。しかし、これらの具体的な詳細のいくつかがなくても本発明が実施され得ることが、当業者には明らかであろう。場合によっては、本発明の主題をあいまいにしないために、周知の構造及び機能はことさら詳細に説明されていない。したがって、本発明の範囲及び意図は、後に続く特許請求の範囲によって判断されるべきである。
【図１Ａ】
2017534114.tif 000005
【図１Ｂ】
2017534114.tif 000006
【図２Ａ】
2017534114.tif 000007
【図２Ｂ】
2017534114.tif 000008
【図３】
2017534114.tif 000009
【図４】
2017534114.tif 000010
【図５Ａ】
2017534114.tif 000011
【図５Ｂ】
2017534114.tif 000012
【図６】
2017534114.tif 000013
【図７】
2017534114.tif 000014
【図８Ａ】
2017534114.tif 000015
【図８Ｂ】
2017534114.tif 000016
【図９Ａ】
2017534114.tif 000017
【図９Ｂ】
2017534114.tif 000018
【図９Ｃ】
2017534114.tif 000019
【図９Ｄ】
2017534114.tif 000020
【図１０】
2017534114.tif 000021
【図１１Ａ】
2017534114.tif 000022
【図１１Ｂ】
2017534114.tif 000023
【図１２Ａ】
2017534114.tif 000024
【図１２Ｂ】
2017534114.tif 000025
【図１３】
2017534114.tif 000026
【図１４】
2017534114.tif 000027
【図１５】
2017534114.tif 000028
【図１６】
2017534114.tif 000029
【図１７】
2017534114.tif 000030
【図１８】
2017534114.tif 000031
【手続補正書】
【提出日】平成29年6月20日(2017.6.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のソースオペランドを有する命令を復号して、復号された命令を生成する復号ユニットと、
前記復号された命令を実行し、指定された座標のｚ曲線に沿って次のポイントの座標を計算する実行ユニットと
を備える
プロセッサ。
【請求項２】
前記命令をフェッチする命令フェッチユニットをさらに備え、
前記命令は単一の機械語レベルの命令である、
請求項１に記載のプロセッサ。
【請求項３】
前記単一の機械語レベルの命令は、少なくとも３２ビット要素幅を含むベクトル命令である、
請求項２に記載のプロセッサ。
【請求項４】
前記単一の機械語レベルの命令は、少なくとも６４ビット要素幅を含むベクトル命令である、
請求項２に記載のプロセッサ。
【請求項５】
前記次のポイントの前記座標を、デスティネーションオペランドに関連付けられたレジスタにコミットするレジスタファイルユニットをさらに備える、
請求項１に記載のプロセッサ。
【請求項６】
前記レジスタファイルユニットは、
第１のｚ曲線インデックスを含む第１のソースオペランド値を格納する第１のレジスタと、
即値オペランドである第２のソースオペランド値を格納する第２のレジスタと、
を含むレジスタ群をさらに格納し、
前記即値オペランドの値は次元と前記指定された座標とを含む、
請求項５に記載のプロセッサ。
【請求項７】
前記次元は前記第１のｚ曲線インデックスの次元であり、前記実行ユニットは前記指定された座標の前記次のポイントの前記座標を計算する、
請求項６に記載のプロセッサ。
【請求項８】
前記次元は、２次元、３次元、又は４次元のうちの１つである、
請求項７に記載のプロセッサ。
【請求項９】
前記指定された座標は、前記２次元、前記３次元、又は前記４次元のうちの１つに関連付けられた第１の座標、第２の座標、第３の座標、又は第４の座標のうちの１つである、
請求項８に記載のプロセッサ。
【請求項１０】
前記実行ユニットは、前記第１のｚ曲線インデックス内の前記指定された座標をインクリメントし、前記指定された座標の前記次のポイントを含む第２のｚ曲線インデックスを計算する、
請求項９に記載のプロセッサ。
【請求項１１】
ｚ曲線における次のポイントの座標を計算するオペレーション群のために複数のソース値を格納する複数のレジスタと、
第１のｚ曲線インデックスと指定された座標とを含む複数のデータ要素を入力し、前記第１のｚ曲線インデックス内の前記指定された座標をインクリメントして、前記ｚ曲線における前記次のポイントの前記座標を含む第２のｚ曲線インデックスを計算する前記オペレーション群を実行する実行ユニットとを
備える
論理ユニット。
【請求項１２】
前記複数のレジスタは、
第１のソース値を格納する第１のレジスタと、
第２のソース値を格納する第２のレジスタと
を含み、
前記第２のソース値は、即値オペランドから復号された即値である、
請求項１１に記載の論理ユニット。
【請求項１３】
前記第１のソース値は第１のｚ曲線インデックスを示し、
前記第２のソース値は、前記指定された座標と、前記第１のｚ曲線インデックスに関連付けられた次元とを示す、
請求項１２に記載の論理ユニット。
【請求項１４】
前記実行ユニットは、単一の命令に応答して、１つ又は複数のＡＮＤ演算、ＯＲ演算、ＸＯＲ演算、及びシフト演算によって前記第２のｚ曲線インデックスを計算する、
請求項１１に記載の論理ユニット。
【請求項１５】
結果を格納する第３のレジスタをさらに備える、
請求項１１に記載の論理ユニット。
【請求項１６】
単一のベクトル命令をフェッチして、ｚ曲線における次のポイントの座標を計算する段階であって、前記単一のベクトル命令は２つのソースオペランドと１つのデスティネーションオペランドとを有する、段階と
前記単一のベクトル命令を復号された命令に復号する段階と、
前記２つのソースオペランドに関連付けられたソースオペランド値をフェッチする段階であって、第１のソースオペランドは第１のｚ曲線インデックスを含み、第２のソースオペランドは指定された座標と次元とを含む即値オペランドである、段階と、
前記次元と座標値とを前記即値オペランドから取得する段階と、
前記復号された命令を実行して、前記第１のｚ曲線インデックスと前記指定された座標と前記次元とに基づき、前記ｚ曲線における前記次のポイントの前記座標を計算する段階と
備える
方法。
【請求項１７】
前記復号された命令を実行する段階は、前記第１のｚ曲線インデックス内の前記指定された座標をインクリメントして、前記指定された座標の前記次のポイントを含む第２のｚ曲線インデックスを計算する段階を含む、
請求項１６に記載の方法。
【請求項１８】
前記復号された命令を実行する段階は、１つ又は複数のＡＮＤ演算、ＸＯＲ演算、ＯＲ演算、及びシフト演算を用いて第２のｚ曲線インデックスを計算する段階をさらに含む、
請求項１６又は１７に記載の方法。
【請求項１９】
前記実行する段階は、ＸＯＲ論理ゲート、ＡＮＤ論理ゲート、及びＯＲ論理ゲート、並びにシフタ回路を用いる、
請求項１８に記載の方法。
【請求項２０】
前記復号された命令の結果を、デスティネーションオペランドにより示される位置に格納する段階をさらに備える、
請求項１６に記載の方法。
【請求項２１】
請求項１６から２０のいずれか１つに記載の方法をコンピュータに実行させる
プログラム。
【請求項２２】
請求項１６から２０のいずれか１つに記載の方法を実行する手段を備える
処理システム。
【請求項２３】
請求項２１に記載のプログラムを格納する、
コンピュータ可読記憶媒体。
【国際調査報告】
2017534114.tif 000032
2017534114.tif 000033