(57)【要約】  一実施形態では、バイナリトランスレーションが、単一のマクロ命令へと命令セットアーキテクチャの複数のマクロ命令を融合するために使用される。融合可能な命令シーケンスは、インクリメント、比較、及びジャンプ命令のシーケンスを含む。一実施形態では、処理デバイスが、融合されたマクロ命令にサポートを提供する。一実施形態では、処理デバイスは、プロセッサパイプラインの単一の実行ステージ内で、融合されたマクロ命令を実行する。一実施形態では、融合されたマクロ命令は、単一の実行サイクル内で実施される。
2018500657.tif 000002
【特許請求の範囲】
【請求項１】
第１のオペランド及び第２のオペランドを含むデコードされた融合命令へと融合命令をデコードするためのデコードロジックと、
前記デコードされた融合命令を実行して、単一の機械レベルマクロ命令として、インクリメント動作、比較動作、及びジャンプ動作を実施するための実行ユニットと、を備える、処理装置。
【請求項２】
前記融合命令をフェッチするための命令フェッチユニットと、
前記第１のオペランドまたは前記第２のオペランドによって指定されたレジスタに、前記インクリメント動作の結果をコミットするためのレジスタファイルユニットと、をさらに備える、請求項１に記載の処理装置。
【請求項３】
前記実行ユニットが、
前記インクリメント動作及び前記比較動作を実施するための算術ロジックユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）と、
前記ジャンプ動作を実施するためのジャンプ実行ユニットと、を備える、請求項１に記載の処理装置。
【請求項４】
前記第１のオペランド及び前記第２のオペランドが、前記比較動作と関連付けられ、前記第１のオペランドまたは前記第２のオペランドのうち１つが、前記インクリメント動作と関連付けられる、請求項１に記載の処理装置。
【請求項５】
前記デコードされた融合命令が、前記ジャンプ動作と関連付けられたジャンプターゲットオペランドを追加として含む、請求項４に記載の処理装置。
【請求項６】
前記実行ユニットがさらに、単一のサイクルにおいて、前記インクリメント動作、前記比較動作、及び前記ジャンプ動作を実行する、請求項５に記載の処理装置。
【請求項７】
前記ジャンプ動作が、前記比較動作を条件にする、請求項５に記載の処理装置。
【請求項８】
前記ジャンプ動作が、前記比較動作によって設定されたゼロフラグを条件にする、請求項７に記載の処理装置。
【請求項９】
前記ジャンプ動作が、前記比較動作によって設定された桁上げフラグを条件にする、請求項７に記載の処理装置。
【請求項１０】
前記ジャンプ動作が、前記比較動作によって設定されたオーバーフローフラグを条件にする、請求項７に記載の処理装置。
【請求項１１】
前記ジャンプ動作が、前記比較動作によって設定された符号フラグを条件にする、請求項７に記載の処理装置。
【請求項１２】
単一のマクロ命令へと複数のマクロ命令を融合するための方法であって、
インクリメント命令、比較命令、及びジャンプ命令を含む命令シーケンスについて、第１のソースコードブロックをスキャンすることと、
前記命令シーケンスを検出した後に、データ依存性について前記命令シーケンスをスキャンすることと、
前記命令シーケンスにおいてコード断片を順序変更することと、
インクリメント命令、比較命令、及びジャンプ命令のセットを、プロセッサによって実行される場合に、前記プロセッサに、インクリメント動作、比較動作、及びジャンプ動作を実施させるという単一の融合命令と置き換えることと、を含む、方法。
【請求項１３】
前記プロセッサが、単一のプロセッサパイプライン実行サイクルにおいて、前記融合命令を実行する、請求項１２に記載の方法。
【請求項１４】
前記プロセッサが、算術ロジックユニット（ＡＬＵ）を使用して前記インクリメント命令及び前記比較命令と関連付けられた第１のオペランド及び第２のオペランドの比較動作を実施する一方で、前記ＡＬＵへの桁上げ入力をアサートすることにより前記第１のオペランドまたは前記第２のオペランドをインクリメントすることによって、前記サイクルにおいて前記融合命令を実施する、請求項１３に記載の方法。
【請求項１５】
前記プロセッサ内でジャンプ実行ユニットを使用して前記比較動作によって前記ＡＬＵから出力されたフラグを評価して、前記ジャンプ動作が実施されることになるかどうかを判定することをさらに含む、請求項１４に記載の方法。
【請求項１６】
前記プロセッサが、分岐予測プロセッサであり、
前記ジャンプ命令と関連付けられた分岐が実行されることになることを予測することと、
前記融合命令の前記ジャンプ動作が実行されるかどうかを判定することと、
前記ジャンプ命令について予測された前記分岐を解決することと、をさらに含む、請求項１５に記載の方法。
【請求項１７】
請求項１２〜１６のいずれか１項に記載の方法を実施するための手段を備えるシステム。
【請求項１８】
命令を記憶する非一時的機械可読媒体であって、１または複数のプロセッサによって実行される場合に、前記１または複数のプロセッサに、請求項１２〜１６のいずれか１項に記載の方法を含む動作を実施させる、非一時的機械可読媒体。
【請求項１９】
融合されたマクロ命令の実施方法であって、
第１のオペランド及び第２のオペランドを含むデコードされた融合命令へと融合命令をデコードすることと、
前記デコードされた融合命令を実行して、単一の機械レベルマクロ命令として、インクリメント動作、比較動作、及びジャンプ動作を実施することと、を含む、方法。
【請求項２０】
単一の実行サイクルにおいて、前記デコードされた融合命令を実行することをさらに含む、請求項１９に記載の方法。
【請求項２１】
前記動作の結果に基づいて、次の命令ポインタを更新することをさらに含む、請求項１９に記載の方法。
【請求項２２】
前記第１のオペランドまたは前記第２のオペランドによって指示されたレジスタに、前記インクリメント動作の結果をコミットすることをさらに含む、請求項１９に記載の方法。
【請求項２３】
前記ジャンプ動作の結果に基づいて、分岐予測を解決することをさらに含む、請求項１９に記載の方法。
【請求項２４】
データが記憶された機械可読媒体であって、少なくとも１つの機械によって実施される場合に、前記少なくとも１つの機械に、請求項１９〜２３のいずれか１項に記載の方法を含む動作を実施する少なくとも１つの集積回路をファブリケートさせる、機械可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、処理ロジック、マイクロプロセッサ、及び関連付けられた命令セットアーキテクチャの分野に関し、それらは、プロセッサまたは他の処理ロジックによって実行される場合、単一の機械命令へと複数の命令を融合することを含む論理的、数学的、または他の機能動作を実施する。
【背景技術】
【０００２】
命令セットまたは命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）は、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み及び例外ハンドリング、ならびに外部入出力（Ｉ／Ｏ：ｉｎｐｕｔ  ａｎｄ  ｏｕｔｐｕｔ）を含む、プログラミングに関係付けられたコンピュータアーキテクチャの一部である。バイナリトランスレーション（「ＢＴ」：Ｂｉｎａｒｙ  Ｔｒａｎｓｌａｔｉｏｎ）は、１つのソース（「ゲスト」）のために構築されたバイナリを、別のターゲット（「ホスト」）ＩＳＡにトランスレートするための一般的な技法である。ＢＴを使用すると、高レベルのソースコードを再コンパイルすることもなく、低レベルのアセンブリコードを書き直すこともなく、異なるアーキテクチャを用いてプロセッサ上で１つのプロセッサＩＳＡのために構築されたアプリケーションバイナリを実行することが可能である。ほとんどのレガシーコンピュータアプリケーションがバイナリフォーマットのみ利用可能なため、ＢＴは、プロセッサが、それ用に作成されておらず利用できないアプリケーションの実行を可能にする可能性のために、非常に魅力的である。バイナリトランスレーションは、動的にまたは静的に実施され得る。動的ＢＴ（ＤＢＴ：Ｄｙｎａｍｉｃ  ＢＴ）は、アプリケーションが実行されるとき、ランタイムにおいてバイナリトランスレーションを実施する。静的ＢＴ（ＳＢＴ：Ｓｔａｔｉｃ  ＢＴ）は、バイナリが実行される前に、バイナリに対して実施される。
【０００３】
実施形態は、例として図解され、以下の添付の図面の図において限定されない。
【図面の簡単な説明】
【０００４】
【図１Ａ】実施形態に従う、例示的なインオーダフェッチ、デコード、リタイアパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインとの両方を図解するブロック図である。
【０００５】
【図１Ｂ】実施形態に従う、例示的なインオーダフェッチ、デコード、リタイアパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインとの両方を図解するブロック図である。
【０００６】
【図２Ａ】より具体的な例示的なインオーダコアアーキテクチャのブロック図である。
【図２Ｂ】より具体的な例示的なインオーダコアアーキテクチャのブロック図である。
【０００７】
【図３】集積メモリコントローラ及び特定目的ロジックを有するシングルコアプロセッサならびにマルチコアプロセッサのブロック図である。
【０００８】
【図４】或る実施形態に従う、システムのブロック図を図解する。
【０００９】
【図５】或る実施形態に従う、第２のシステムのブロック図を図解する。
【００１０】
【図６】或る実施形態に従う、第３のシステムのブロック図を図解する。
【００１１】
【図７】或る実施形態に従う、システムオンチップ（ＳｏＣ：ｓｙｓｔｅｍ  ｏｎ  ａ  ｃｈｉｐ）のブロック図を図解する。
【００１２】
【図８】実施形態に従う、ターゲット命令セットにおけるバイナリ命令に、ソース命令セットにおけるバイナリ命令を転換するためにソフトウェア命令転換器の使用を対比するブロック図を図解する。
【００１３】
【図９Ａ】或る実施形態に従う、融合されたインクリメント＿比較＿ジャンプ動作を実施するためのビット操作の動作を図解するブロック図である。
【図９Ｂ】或る実施形態に従う、融合されたインクリメント＿比較＿ジャンプ動作を実施するためのビット操作の動作を図解するブロック図である。
【００１４】
【図１０Ａ】実施形態に従う、インクリメント＿比較＿ジャンプ命令の例示的なプロセッサ実装を図解するブロック図である。
【図１０Ｂ】実施形態に従う、インクリメント＿比較＿ジャンプ命令の例示的なプロセッサ実装を図解するブロック図である。
【００１５】
【図１１】或る実施形態に従う、融合されたインクリメント＿比較＿ジャンプ動作を実施するためのロジックを含む処理システムのブロック図である。
【００１６】
【図１２】或る実施形態に従う、ロジックが、例示的な融合されたインクリメント＿比較＿ジャンプ動作を処理するための流れ図である。
【００１７】
【図１３Ａ】実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを図解するブロック図である。
【図１３Ｂ】実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを図解するブロック図である。
【００１８】
【図１４Ａ】本発明の実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。
【図１４Ｂ】本発明の実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。
【図１４Ｃ】本発明の実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。
【図１４Ｄ】本発明の実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。
【００１９】
【図１５】或る実施形態に従う、スカラ及びベクトルレジスタアーキテクチャのブロック図である。
【発明を実施するための形態】
【００２０】
ゲストとホストＩＳＡとの間のバイナリトランスレーションに加えて、ＳＢＴとＤＢＴとの両方が、単一のＩＳＡ内でバイナリ実行を最適化するために使用され得る。例えば、バイナリトランスレーションが、単一のマクロ命令へと命令セットアーキテクチャの複数のマクロ命令を融合するために使用され得る。一実施形態では、処理デバイスが、融合されたマクロ命令にサポートを提供する。「命令」という用語が、概して、本明細書では、プロセッサがマクロ命令からデコードするマイクロ命令またはマイクロ動作（例えば、ｍｉｃｒｏ−ｏｐ）と対照的に、実行のためにプロセッサに与えられる命令であるマクロ命令を指すことに留意されたい。マイクロ命令またはｍｉｃｒｏ−ｏｐは、マクロ命令に関連付けられたロジックを実装するための動作を実施するために、プロセッサ上の実行ユニットに命令するように構成され得る。
【００２１】
プロセッサコアアーキテクチャが以下に記載され、本明細書に記載される実施形態に従う、例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。数多くの具体的な詳細が、以下に記載される本発明の実施形態の完全な理解を提供するために、述べられる。しかしながら、実施形態が、これらの具体的な詳細のいくつかがなくても実践され得ることは、当業者に明らかであろう。他の実例では、周知の構造及びデバイスが、様々な実施形態の根底にある原理を不明瞭にすることを回避するために、ブロック図の形態で示される。
【００２２】
プロセッサコアは、異なる手段で、異なる目的のために、異なるプロセッサ内で実装され得る。例えば、そのようなコアの実装は、以下を含み得る。１）汎用コンピューティングのために意図された汎用インオーダコア。２）汎用コンピューティングのために意図された高性能汎用アウトオブオーダコア。３）主にグラフィックス及び／またはサイエンティフィック（スループット）コンピューティングのために意図された特定目的コア。プロセッサは、シングルプロセッサコアを使用して実装され得るか、複数のプロセッサコアを含み得る。プロセッサ内のプロセッサコアは、アーキテクチャ命令セットの観点から、同種または異種であり得る。
【００２３】
異なるプロセッサの実装は、以下を含む。１）汎用コンピューティングのための１または複数の汎用インオーダコア及び／または汎用コンピューティングのために意図された１または複数の汎用アウトオブオーダを含むセントラルプロセッサ、及び２）主にグラフィックス及び／またはサイエンティフィックのために意図された１または複数の特定目的コアを含むコプロセッサ（例えば、多くの集積コアプロセッサ）。そのような異なるプロセッサは、以下を含む異なるコンピュータシステムアーキテクチャに通じる。１）セントラルシステムプロセッサとは別個のチップ上のコプロセッサ、２）セントラルシステムプロセッサとは別個のダイ上にあるが、同じパッケージ内にあるコプロセッサ、３）他のプロセッサコアと同じダイ上のコプロセッサ（その場合、そのようなコプロセッサは、集積グラフィックス及び／もしくはサイエンティフィック（スループット）ロジック、または特定目的コア等の特定目的ロジックと時に称される）、ならびに４）同じダイ上に記載されたプロセッサ（アプリケーションコア（複数可）またはアプリケーションプロセッサ（複数可）と時に称される）、上述のコプロセッサ、及び追加の機能性を含み得るシステムオンチップ。
【００２４】
例示的なコアアーキテクチャ
［インオーダ及びアウトオブオーダコアのブロック図］
図１Ａは、或る実施形態に従う、例示的なインオーダパイプラインと、例示的なレジスタリネーミングアウトオブオーダ発行／実行パイプラインとの両方を図解するブロック図である。図１Ｂは、或る実施形態に従う、プロセッサに含まれることになる、インオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアとの両方を図解するブロック図である。図１Ａ〜１Ｂの実線の囲みは、インオーダパイプライン及びインオーダコアを図解する一方で、破線の囲みの任意的な追加は、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを図解する。インオーダの態様がアウトオブオーダの態様のサブセットであると想定して、アウトオブオーダの態様が記載されている。
【００２５】
図１Ａにおいて、プロセッサパイプライン１００は、フェッチステージ１０２、長さデコードステージ１０４、デコードステージ１０６、割り当てステージ１０８、リネーミングステージ１１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ１１２、レジスタ読み出し／メモリ読み出しステージ１１４、実行ステージ１１６、ライトバック／メモリ書き込みステージ１１８、例外ハンドリングステージ１２２、及びコミットステージ１２４を含む。
【００２６】
図１Ｂは、実行エンジンユニット１５０に結合されたフロントエンドユニット１３０を含むプロセッサコア１９０を示し、両方ともメモリユニット１７０に結合される。コア１９０は、縮小命令セットコンピューティング（ＲＩＳＣ：ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）コア、複合命令セットコンピューティング（ＣＩＳＣ：ｃｏｍｐｌｅｘ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）コア、超長命令語（ＶＬＩＷ：ｖｅｒｙ  ｌｏｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｏｒｄ）コア、またはハイブリッドもしくは代替のコアタイプであり得る。さらに別のオプションとして、コア１９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ：ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）コア、グラフィックスコア等の特定目的コアであり得る。
【００２７】
フロントエンドユニット１３０は、命令キャッシュユニット１３４に結合された分岐予測ユニット１３２を含み、命令キャッシュユニット１３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）１３６に結合され、命令ＴＬＢ１３６は命令フェッチユニット１３８に結合され、命令フェッチユニット１３８はデコードユニット１４０に結合される。デコードユニット１４０（またはデコーダ）は、命令をデコードし、出力として、１または複数のマイクロ動作、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされるか、そうでなければ元の命令を反映するか、元の命令から派生される他の制御信号を生成し得る。デコードユニット１４０は、様々な異なる機構を使用して実装され得る。好適な機構の例としては、限定されないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ（ＰＬＡ：ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙ）、マイクロコード読み出し専用メモリ（ＲＯＭ：ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）等が挙げられる。一実施形態では、コア１９０は、マイクロコードＲＯＭ、または或る特定のマクロ命令のためにマイクロコードを記憶する他の媒体を含む（例えば、デコードユニット１４０内、そうでなければフロントエンドユニット１３０内）。デコードユニット１４０は、実行エンジンユニット１５０内のリネーム／アロケータユニット１５２に結合される。
【００２８】
実行エンジンユニット１５０は、リタイアメントユニット１５４及び１または複数のスケジューラユニット（複数可）１５６のセットに結合されたリネーム／アロケータユニット１５２を含む。スケジューラユニット（複数可）１５６は、リザベーションステーション、中心命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット（複数可）１５６は、物理レジスタファイル（複数可）ユニット（複数可）１５８に結合される。物理レジスタファイル（複数可）ユニット１５８の各々は、１または複数の物理レジスタファイルを表し、物理レジスタファイルの異なるファイルは、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行されることになる次の命令のアドレスである命令ポインタ）等の１または複数の異なるデータタイプを記憶する。一実施形態では、物理レジスタファイル（複数可）ユニット１５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイル（複数可）ユニット（複数可）１５８は、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な手段を図解するために、リタイアメントユニット１５４によって重ね合わされる（例えば、順序変更バッファ（複数可）及びリタイアメントレジスタファイル（複数可）を使用して、フューチャーファイル（複数可）、履歴バッファ（複数可）、及びリタイアメントレジスタファイル（複数可）を使用して、レジスタマップ及びレジスタのプールを使用して等）。リタイアメントユニット１５４及び物理レジスタファイル（複数可）ユニット（複数可）１５８は、実行クラスタ（複数可）１６０に結合される。実行クラスタ（複数可）１６０は、１または複数の実行ユニット１６２のセット及び１または複数のメモリアクセスユニット１６４のセットを含む。実行ユニット１６２は、様々なタイプのデータ（例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々な動作（例えば、シフト、加算、減算、乗算）を実施し得る。いくつかの実施形態は、具体的な関数または関数のセット専用のいくらかの実行ユニットを含み得る一方で、他の実施形態は、１つのみの実行ユニット、またはそれらのすべてがすべての関数を実施する複数の実行ユニットを含み得る。或る特定の実施形態では、或る特定のタイプのデータ／動作用に別個のパイプラインを形成するため、スケジューラユニット（複数可）１５６、物理レジスタファイル（複数可）ユニット（複数可）１５８、及び実行クラスタ（複数可）１６０は、複数である可能性があるものとして示されている（例えば、スカラ整数パイプライン、スカラ浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／または各々が独自のスケジューラユニット、物理レジスタファイル（複数可）ユニット、ならびに／もしくは実行クラスタを有するメモリアクセスパイプライン。そして、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット（複数可）１６４を有する或る特定の実施形態が実装される）。別個のパイプラインが使用される場合、これらのパイプラインのうち１または複数がアウトオブオーダ発行／実行で、残りがインオーダであり得ることも理解されたい。
【００２９】
メモリアクセスユニット１６４のセットは、メモリユニット１７０に結合され、メモリユニット１７０は、レベル２（Ｌ２）キャッシュユニット１７６に結合されたデータキャッシュユニット１７４に結合されたデータＴＬＢユニット１７２を含む。例示的な一実施形態では、メモリアクセスユニット１６４は、ロードユニット、記憶アドレスユニット、及び記憶データユニットを含み得、それらの各々は、メモリユニット１７０内のデータＴＬＢユニット１７２に結合される。命令キャッシュユニット１３４は、メモリユニット１７０内のレベル２（Ｌ２）キャッシュユニット１７６にさらに結合される。Ｌ２キャッシュユニット１７６は、１または複数の他のレベルのキャッシュに、最終的には主メモリに結合される。
【００３０】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、次のようにパイプライン１００を実装し得る。１）命令フェッチ１３８は、フェッチステージ１０２及び長さデコーディングステージ１０４を実施する。２）デコードユニット１４０は、デコードステージ１０６を実施する。３）リネーム／アロケータユニット１５２は、割り当てステージ１０８及びリネーミングステージ１１０を実施する。４）スケジューラユニット（複数可）１５６は、スケジュールステージ１１２を実施する。５）物理レジスタファイル（複数可）ユニット（複数可）１５８及びメモリユニット１７０は、レジスタ読み出し／メモリ読み出しステージ１１４を実施し、実行クラスタ１６０は、実行ステージ１１６を実施する。６）メモリユニット１７０及び物理レジスタファイル（複数可）ユニット（複数可）１５８は、ライトバック／メモリ書き込みステージ１１８を実施する。７）様々なユニットが、例外ハンドリングステージ１２２に関与し得る。８）リタイアメントユニット１５４及び物理レジスタファイル（複数可）ユニット（複数可）１５８は、コミットステージ１２４を実施する。
【００３１】
コア１９０は、本明細書に記載される命令（複数可）を含む１または複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンで追加されたいくつかの拡張を含む）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、イングランドのケンブリッジのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ（登録商標）命令セット（ＮＥＯＮ等の任意的な追加の拡張を含む））をサポートし得る。一実施形態では、コア１９０は、パックデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２等）をサポートするためのロジックを含み、多くのマルチメディアのアプリケーションによって使用される動作が、パックデータを使用して実施されることを可能にする。
【００３２】
コアがマルチスレッディングをサポートし得（動作またはスレッドの２以上の並列セットを実行する）、時分割マルチスレッディング、同時マルチスレッディング（単一の物理コアが、物理コアが同時マルチスレッディングしているスレッドの各々に、論理的コアを提供する場合）、またはこれらの組み合わせ（例えば、Ｉｎｔｅｌ（登録商標）のＨｙｐｅｒーＴｈｒｅａｄｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙ等、時分割フェッチならびにデコーディング及びその後の同時マルチスレッディング）を含む様々な手段でそれを行い得ることを理解されたい。
【００３３】
レジスタリネーミングがアウトオブオーダ実行のコンテキストにおいて記載される一方で、レジスタリネーミングがインオーダアーキテクチャにおいて使用され得ることを理解されたい。プロセッサの図解された実施形態は、別個の命令キャッシュユニット１３４、データキャッシュユニット１７４、及び共有Ｌ２キャッシュユニット１７６も含む一方で、代替の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ、または複数レベルの内部キャッシュ等、命令とデータとの両方に対して単一の内部キャッシュを有し得る。いくつかの実施形態では、システムは、内部キャッシュと、コア及び／またはプロセッサの外部の外部キャッシュとの組み合わせを含み得る。代わりに、キャッシュのすべては、コア及び／またはプロセッサの外部に存在し得る。
【００３４】
具体的な例示的なインオーダコアアーキテクチャ
図２Ａ〜２Ｂは、より具体的な例示的なインオーダコアアーキテクチャのブロック図であり、そのコアは、チップ内のいくつかのロジックブロックのうち１つ（同一タイプ及び／または異なるタイプの他のコアを含む）となるであろう。ロジックブロックは、アプリケーションに依存して、何らかの固定関数ロジック、メモリＩ／Ｏインターフェース、及び他の必要なＩ／Ｏロジックと、高帯域の相互接続ネットワーク（例えば、リングネットワーク）を通して通信する。
【００３５】
図２Ａは、或る実施形態に従うレベル２（Ｌ２）キャッシュ２０４のローカルサブセットを有するシングルプロセッサコア、及びそのオンダイの相互接続ネットワーク２０２への接続、のブロック図である。一実施形態では、命令デコーダ２００は、パックデータ命令セット拡張を用いて、ｘ８６命令セットをサポートする。Ｌ１キャッシュ２０６は、キャッシュメモリのスカラ及びベクトルユニットへの低遅延アクセスを可能にする。一実施形態では（設計を単純化するために）、スカラユニット２０８及びベクトルユニット２１０は、別個のレジスタセット（それぞれ、スカラレジスタ２１２及びベクトルレジスタ２１４）を使用し、それらの間で転送されるデータは、メモリへ書き込まれて、その後、レベル１（Ｌ１）キャッシュ２０６からリードバックされる一方、代替の実施形態は、異なる手法を使用し（例えば、単一のレジスタセットを使用するか、データが、書き込まれてリードバックされることなく２つのレジスタファイルの間で転送されることを可能にする通信経路を含み）得る。
【００３６】
Ｌ２キャッシュ２０４のローカルサブセットは、プロセッサコアにつき１つ、別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ２０４の独自のローカルサブセットへの直接アクセス経路を有する。プロセッサコアによって読み出されたデータは、そのＬ２キャッシュサブセット２０４内に記憶されて、迅速に、かつ独自のローカルＬ２キャッシュサブセットにアクセスする他のプロセッサコアと並列に、アクセスされ得る。プロセッサコアによって書き込まれたデータは、独自のＬ２キャッシュサブセット２０４内に記憶されて、必要に応じて、他のサブセットからフラッシュされる。リングネットワークは、共有データのためにコヒーレンシを保証する。リングネットワークは、プロセッサコア、Ｌ２キャッシュ、及び他のロジックブロック等のエージェントが、チップ内で互いに通信することを可能にするように双方向である。各リングデータ経路は、方向につき１０１２ビット幅である。
【００３７】
図２Ｂは、或る実施形態に従う、図２Ａ中のプロセッサコアの一部の展開図である。図２Ｂは、Ｌ１キャッシュ２０４のＬ１データキャッシュ２０６Ａの部分、ならびにベクトルユニット２１０及びベクトルレジスタ２１４に関するさらなる詳細を含む。具体的には、ベクトルユニット２１０は、１６−ｗｉｄｅベクトル処理ユニット（ＶＰＵ：ｖｅｃｔｏｒ−ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）であり（１６−ｗｉｄｅ算術ロジックユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）２２８を参照のこと）、それは、整数、単一精度浮動、及び倍精度浮動の命令のうち１または複数を実行する。ＶＰＵは、スウィズルユニット２２０を用いてレジスタ入力をスウィズルすること、数値転換ユニット２２２Ａ〜Ｂを用いた数値転換、及びメモリ入力上の複製ユニット２２４を用いた複製をサポートする。書き込みマスクレジスタ２２６は、結果として生じるベクトル書き込みをプレディケートすることを可能にする。
【００３８】
［集積メモリコントローラ及び特定目的ロジックを有するプロセッサ］
図３は、或る実施形態に従う、２つ以上のコアを有し得、集積メモリコントローラを有し得、かつ集積グラフィックスを有し得るプロセッサ３００のブロック図である。図３中の実線の囲みは、シングルコア３０２Ａ、システムエージェント３１０、１または複数のバスコントローラユニット３１６のセットを有するプロセッサ３００を図解する一方で、破線の囲みの任意的な追加は、複数のコア３０２Ａ〜Ｎ、システムエージェントユニット３１０内の１または複数の集積メモリコントローラユニット（複数可）３１４のセット、及び特定目的ロジック３０８を有する代替のプロセッサ３００を図解する。
【００３９】
したがって、プロセッサ３００の異なる実装は、以下を含み得る。１）特定目的ロジック３０８が集積グラフィックス及び／またはサイエンティフィック（スループット）ロジックであり（１または複数のコアを含み得る）、かつコア３０２Ａ〜Ｎが、１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、及び２つの組み合わせ）であるＣＰＵ、２）コア３０２Ａ〜Ｎが、主にグラフィックス及び／またはサイエンティフィック（スループット）のために意図された多数の特定目的コアであるコプロセッサ、ならびに３）コア３０２Ａ〜Ｎが、多数の汎用インオーダコアであるコプロセッサ。したがって、プロセッサ３００は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループット多集積コア（ＭＩＣ：ｈｉｇｈ−ｔｈｒｏｕｇｈｐｕｔ  ｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ）コプロセッサ（３０以上のコアを含む）、埋め込みプロセッサ等の、汎用プロセッサ、コプロセッサ、または特定目的プロセッサであり得る。プロセッサは、１または複数のチップ上に実装され得る。プロセッサ３００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等のいくらかの処理技法のいずれかを使用する、１または複数の基板の一部であり得、及び／または該基板上に実装され得る。
【００４０】
メモリ階層は、コア内のキャッシュの１または複数のレベル、１または複数の共有キャッシュユニット３０６のセット、及び集積メモリコントローラユニット３１４のセットに結合された外部メモリ（図示せず）を含む。共有キャッシュユニット３０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ：ｌａｓｔ  ｌｅｖｅｌ  ｃａｃｈｅ）、及び／またはこれらの組み合わせ等の１または複数の中間レベルキャッシュを含み得る。一実施形態では、リングベースの相互接続ユニット３１２は、集積グラフィックスロジック３０８、共有キャッシュユニット３０６のセット、及びシステムエージェントユニット３１０／集積メモリコントローラユニット（複数可）３１４を相互接続する一方で、代替の実施形態は、そのようなユニットを相互接続するための任意の数の周知の技法を使用し得る。一実施形態では、１または複数のキャッシュユニット３０６及びコア３０２Ａ〜Ｎの間のコヒーレンシが維持される。
【００４１】
いくつかの実施形態では、コア３０２Ａ〜Ｎのうち１または複数は、マルチスレッディングができる。システムエージェント３１０は、コア３０２Ａ〜Ｎを調整及び動作するそれらのコンポーネントを含む。システムエージェントユニット３１０は、例えば、電力制御ユニット（ＰＣＵ：ｐｏｗｅｒ  ｃｏｎｔｒｏｌ  ｕｎｉｔ）及び表示ユニットを含み得る。ＰＣＵは、コア３０２Ａ〜Ｎ及び集積グラフィックスロジック３０８の電源状態を調節するために必要とされるロジック及びコンポーネントであり得るか、それらを含み得る。表示ユニットは、１または複数の外部接続された表示を駆動するためのものである。
【００４２】
コア３０２Ａ〜Ｎは、アーキテクチャ命令セットの観点から、同種または異種であり得、つまり、コア３０２Ａ〜Ｎのうち２以上は、同じ命令セットを実行することができ得る一方で、他のものは、その命令セットのサブセットのみまたは異なる命令セットを実行することができ得る。
【００４３】
［例示的なコンピュータアーキテクチャ］
図４〜７は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための当該技術分野において知られている他のシステム設計及び構成もまた好適である。一般的に、本明細書に開示されるようなプロセッサ及び／もしくは他の実行ロジックを組み込むことができる多様なシステムまたは電子デバイスが、概して好適である。
【００４４】
図４は、或る実施形態に従う、システム４００のブロック図を示す。システム４００は、コントローラハブ４２０に結合される１または複数のプロセッサ４１０、４１５を含み得る。一実施形態では、コントローラハブ４２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ：ｇｒａｐｈｉｃｓ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ  ｈｕｂ）４９０及び入力／出力ハブ（ＩＯＨ）４５０（別個のチップ上にあり得る）を含み、ＧＭＣＨ４９０は、メモリ４４０及びコプロセッサ４４５が結合されるメモリ及びグラフィックスコントローラを含み、ＩＯＨ４５０は、入力／出力（Ｉ／Ｏ）デバイス４６０をＧＭＣＨ４９０に結合する。代わりに、メモリ及びグラフィックスコントローラのうち１つまたは両方は、プロセッサ（本明細書に記載されるような）内に集積され、メモリ４４０、及びコプロセッサ４４５は、ＩＯＨ４５０を有する単一のチップにおいて、プロセッサ４１０、及びコントローラハブ４２０に直接的に結合される。
【００４５】
追加のプロセッサ４１５の任意的な性質は、破線で図４に表記される。各プロセッサ４１０、４１５は、本明細書に記載される処理コアのうち１または複数を含み、プロセッサ３００の何らかのバージョンであり得る。
【００４６】
メモリ４４０は、例えば、動的ランダムアクセスメモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、相変化メモリ（ＰＣＭ：ｐｈａｓｅ  ｃｈａｎｇｅ  ｍｅｍｏｒｙ）、またはそれら２つの組み合わせであり得る。少なくとも１つの実施形態について、コントローラハブ４２０は、フロントサイドバス（ＦＳＢ：ｆｒｏｎｔｓｉｄｅ  ｂｕｓ）等のマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ：ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）等のポイントツーポイントインターフェース、または類似の接続４９５を介して、プロセッサ（複数可）４１０、４１５と通信する。
【００４７】
一実施形態では、コプロセッサ４４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等の特定目的プロセッサである。一実施形態では、コントローラハブ４２０は、集積グラフィックスアクセラレータを含み得る。
【００４８】
アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性等を含む利点のメトリクスの範囲の観点から、物理リソース４１０、４１５の間には様々な違いがあり得る。
【００４９】
一実施形態では、プロセッサ４１０は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令内の埋め込みは、コプロセッサ命令であり得る。プロセッサ４１０は、これらのコプロセッサ命令を、付加されたコプロセッサ４４５によって実行されるべきタイプとして認識する。したがって、プロセッサ４１０は、コプロセッサバスまたは他の相互接続上で、コプロセッサ４４５に対して、これらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）を発行する。コプロセッサ（複数可）４４５は、受信されたコプロセッサ命令を受け入れ、それらを実行する。
【００５０】
図５は、或る実施形態に従う、第１のより具体的な、例示的なシステム５００のブロック図を示す。図５に示されるように、マルチプロセッサシステム５００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続５５０を介して結合された第１のプロセッサ５７０及び第２のプロセッサ５８０を含む。プロセッサ５７０及び５８０の各々は、プロセッサ３００の何らかのバージョンであり得る。本発明の一実施形態では、プロセッサ５７０及び５８０はそれぞれ、プロセッサ４１０及び４１５である一方で、コプロセッサ５３８はコプロセッサ４４５である。別の実施形態では、プロセッサ５７０及び５８０はそれぞれ、プロセッサ４１０、コプロセッサ４４５である。
【００５１】
それぞれ、集積メモリコントローラ（ＩＭＣ：ｉｎｔｅｇｒａｔｅｄ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ）ユニット５７２及び５８２を含む、プロセッサ５７０及び５８０が示される。プロセッサ５７０は、また、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ：ｐｏｉｎｔ−ｔｏ−ｐｏｉｎｔ）インターフェース５７６及び５７８を含み、同様に、第２のプロセッサ５８０は、Ｐ−Ｐインターフェース５８６及び５８８を含む。プロセッサ５７０、５８０は、Ｐ−Ｐインターフェース回路５７８、５８８を使用して、ポイントツーポイント（Ｐ−Ｐ）インターフェース５５０を介して情報を交換し得る。図５に示されるように、ＩＭＣ５７２及び５８２は、プロセッサを、それぞれのメモリ、すなわち、メモリ５３２及びメモリ５３４に結合し、メモリ５３２及びメモリ５３４は、それぞれのプロセッサにローカルに取設された主メモリの部分であり得る。
【００５２】
各プロセッサ５７０、５８０は、ポイントツーポイントインターフェース回路５７６、５９４、５８６、５９８を使用して、個々のＰ−Ｐインターフェース５５２、５５４を介して、チップセット５９０と情報を交換し得る。チップセット５９０は、高性能インターフェース５３９を介して、任意にコプロセッサ５３８と情報を交換し得る。一実施形態では、コプロセッサ５３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等の特定目的プロセッサである。
【００５３】
共有キャッシュ（図示せず）は、どちらかのプロセッサ内に、または両方のプロセッサの外に含まれ得るが、それでも、Ｐ−Ｐ相互接続を介してプロセッサと接続され得、これによって、プロセッサのどちらかまたは両方のローカルキャッシュ情報は、プロセッサが低電力モードに入れられる場合、共有キャッシュ内に記憶され得る。
【００５４】
チップセット５９０は、インターフェース５９６を介して第１のバス５１６に結合され得る。一実施形態では、第１のバス５１６は、周辺コンポーネント相互接続（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、またはＰＣＩエクスプレスバスもしくは別の第３の生成Ｉ／Ｏ相互接続バス等のバスであり得るが、本発明の範囲はそのように限定されない。
【００５５】
図５に示されるように、様々なＩ／Ｏデバイス５１４は、第１のバス５１６を第２のバス５２０に結合するバスブリッジ５１８と共に、第１のバス５１６に結合され得る。一実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵの、アクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｉｎｇ）ユニット等）、フィールドプログラム可能ゲートアレイ、または任意の他のプロセッサ等の１または複数の追加のプロセッサ（複数可）５１５は、第１のバス５１６に結合される。一実施形態では、第２のバス５２０は、ロウピンカウント（ＬＰＣ：ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ）バスであり得る。一実施形態では、例えば、キーボード及び／またはマウス５２２、通信デバイス５２７、ならびに命令／コード及びデータ５３０を含み得るディスクドライブまたは他の大記憶デバイス等の記憶ユニット５２８を含む、様々なデバイスは、第２のバス５２０に結合され得る。さらに、オーディオＩ／Ｏ５２４は、第２のバス５２０に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図５のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
【００５６】
図６は、或る実施形態に従う、第２のより具体的な例示的なシステム６００のブロック図を示す。図５及び６における同様の要素は、同様の参照番号を帯び、図５の或る特定の態様は、図６の他の態様を不明瞭にすることを回避するために、図６から省略された。
【００５７】
図６は、プロセッサ５７０、５８０がそれぞれ、集積メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）５７２及び５８２を含み得ることを図解する。したがって、ＣＬ５７２、５８２は、集積メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図６は、メモリ５３２、５３４がＣＬ５７２、５８２に結合されるだけでなく、Ｉ／Ｏデバイス６１４が制御ロジック５７２、５８２に結合されることも図解する。レガシーＩ／Ｏデバイス６１５は、チップセット５９０に結合される。
【００５８】
図７は、或る実施形態に従う、ＳｏＣ７００のブロック図を示す。図３における類似の要素は、同様の参照番号を帯びる。また、破線の囲みは、より高度なＳｏＣに関する任意的な特徴である。図７において、相互接続ユニット（複数可）７０２は、１または複数のコア２０２Ａ〜Ｎ及び共有キャッシュユニット（複数可）３０６のセットを含むアプリケーションプロセッサ７１０と、システムエージェントユニット３１０と、バスコントローラユニット（複数可）３１６と、集積メモリコントローラユニット（複数可）３１４と、集積グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る１または複数のコプロセッサのセット７２０と、静的ランダムアクセスメモリ（ＳＲＡＭ：ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）ユニット７３０と、直接メモリアクセス（ＤＭＡ：ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）ユニット７３２と、１または複数の外部表示に結合するための表示ユニット７４０とを含み得る。一実施形態では、コプロセッサ（複数可）７２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋め込みプロセッサ等の特定目的プロセッサを含む。
【００５９】
本明細書に開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手法の組み合わせにおいて実装される。実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性及び不揮発性メモリ及び／または記憶要素を含む）、少なくとも１つの入力デバイス、ならびに少なくとも１つの出力デバイスを備えるプログラム可能システム上で実行するコンピュータプログラムまたはプログラムコードとして実装される。
【００６０】
図５に図解されたコード５３０等のプログラムコードは、入力命令に適用されて、本明細書に記載される機能を実施し、出力情報を生成し得る。出力情報は、既知の様式で、１または複数の出力デバイスに適用され得る。この用途の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【００６１】
プログラムコードは、処理システムと通信するための高レベル手続き型またはオブジェクト指向型プログラミング言語において実装され得る。プログラムコードは、また、所望される場合、アセンブリまたは機械言語において実装され得る。事実、本明細書に記載される機構は、任意の特定のプログラミング言語に範囲を限定されない。いかなる場合も、言語は、コンパイルされたまたは解釈された言語であり得る。
【００６２】
少なくとも１つの実施形態のうち１または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に記憶された代表的なデータによって実装され得、それは、機械によって読み出される場合、機械に、本明細書に記載される技法を実施するためのロジックをファブリケートさせる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体（「テープ」）上に記憶され、様々な顧客または製造設備に供給されて、ロジックまたはプロセッサを実際に製作するファブリケーション機械へとロードし得る。例えば、ＡＲＭ  Ｈｏｌｄｉｎｇｓ，Ｌｔｄ．、及びＣｈｉｎｅｓｅ  Ａｃａｄｅｍｙ  ｏｆ  ＳｃｉｅｎｃｅｓのＩｎｓｔｉｔｕｔｅ  ｏｆ  Ｃｏｍｐｕｔｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙ（ＩＣＴ）によって開発されたプロセッサ等のＩＰコアは、様々な顧客または実施権者に認可または販売され、これらの顧客または実施権者によって生産されたプロセッサにおいて実装され得る。
【００６３】
そのような機械可読記憶媒体は、限定無しに、機械またはデバイスによって製造または形成される物品の非一時的、有形の配置を含み得、ハードディスク等の記憶媒体や、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ：ｒｅｗｒｉｔａｂｌｅ  ｃｏｍｐａｃｔ  ｄｉｓｋ）、及び光磁気ディスクを含む任意の他のタイプのディスク、読取り専用メモリ（ＲＯＭ）等の半導体デバイス、動的ランダムアクセスメモリ（ＤＲＡＭ）、静的ランダムアクセスメモリ（ＳＲＡＭ）、消去及びプログラム可能読取り専用メモリ（ＥＰＲＯＭ：ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、フラッシュメモリ、電気的消去可能プログラム可能読取り専用メモリ（ＥＥＰＲＯＭ：ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、相変化メモリ（ＰＣＭ）、磁気もしくは光カード等のランダムアクセスメモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、または電子命令を記憶するのに好適な任意の他のタイプの媒体を含み得る。
【００６４】
したがって、実施形態は、また、命令を含む、または本明細書に記載される構造、回路、装置、プロセッサ、及び／もしくはシステム特徴を定義するハードウェア記述言語（ＨＤＬ：Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）等の設計データを含む、非一時的、有形の機械可読媒体を含む。そのような実施形態は、プログラム製品とも称され得る。
【００６５】
［エミュレーション（バイナリトランスレーション、コードモーフィング等を含む）］
本明細書に記載される単一の命令セットの最適化に加えて、命令転換は、ソース命令セットからターゲット命令セットへ命令を転換するために使用され得る。例えば、命令転換器は、コアによって処理されることになる１または複数の他の命令に命令をトランスレート（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを使用して）、モーフィング、エミュレート、そうでなければ転換し得る。命令転換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせにおいて実装され得る。命令転換器は、オンプロセッサ、オフプロセッサ、または一部オンプロセッサ及び一部オフプロセッサであり得る。
【００６６】
図８は、或る実施形態に従う、ターゲット命令セットにおけるバイナリ命令に、ソース命令セットにおけるバイナリ命令を転換するためにソフトウェア命令転換器の使用を対比するブロック図である。図解された実施形態では、命令転換器はソフトウェア命令転換器であるが、代わりに、命令転換器は、ソフトウェア、ファームウェア、ハードウェア、または様々なこれらの組み合わせにおいて実装され得る。図８は、高レベル言語８０２におけるプログラムが、ｘ８６コンパイラ８０４を使用してコンパイルされて、少なくとも１つのｘ８６命令セットコア８１６を有するプロセッサによってネイティブに実行され得るｘ８６バイナリコード８０６を生成し得ることを示す。
【００６７】
少なくとも１つのｘ８６命令セットコア８１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ結果を成し遂げるために、以下を互換的に実行するか、そうでなければ別の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサと実質的に同じ機能を実施し得る任意のプロセッサを表す。（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの実質的な部分、または（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサ上で走ることを目標とされたアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン。ｘ８６コンパイラ８０４は、追加のリンケージ処理の有る無しに関わらず、少なくとも１つのｘ８６命令セットコア８１６を有するプロセッサ上で実行され得るｘ８６バイナリコード８０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図８は、高レベル言語８０２におけるプログラムが、代替の命令セットコンパイラ８０８を使用してコンパイルされて、少なくとも１つのｘ８６命令セットコア８１４を有しないプロセッサ（例えば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行するか、及び／またはイングランドのケンブリッジのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを有するプロセッサ）によってネイティブに実行され得る代替の命令セットバイナリコード８１０を生成し得ることを示す。
【００６８】
命令転換器８１２は、ｘ８６命令セットコア８１４の無いプロセッサによってネイティブに実行され得るコードへと、ｘ８６バイナリコード８０６を転換するために使用される。この転換されたコードは、代替の命令セットバイナリコード８１０と同じである可能性が低い。なぜなら、これができる命令転換器は、製造することが難しいからである。しかしながら、転換されたコードは、一般的な動作を達成し、代替の命令セットからの命令から作り上げられることになる。したがって、命令転換器８１２は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表し、それは、エミュレーション、シミュレーション、または任意の他の処理を通して、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスが、ｘ８６バイナリコード８０６を実行することを可能にする。
【００６９】
［最適化動的バイナリトランスレーションシステム］
ＤＢＴシステムは、融合可能な命令シーケンスを発見して、複数の命令を単一の命令へと融合することによりそれらの命令シーケンスを最適化することができる最適化動的バイナリトランスレーションシステムとして構成され得る。図９Ａ〜９Ｂは、融合された命令へと複数の命令を融合することを含むランタイムバイナリ最適化を実施するための例示的なバイナリトランスレーションシステム及びロジックを図解する。図９Ａは、或る実施形態に従う、動的バイナリトランスレーションのために構成されるコンピューティングシステムのブロック図である。図９Ｂは、単一の融合命令へとソースコードブロックにおける命令を融合するためのロジックの流れ図である。
【００７０】
図９Ａのシステム９００は、システムメモリ９０４に結合されたプロセッサ９０２を含む。一実施形態では、システムは、追加として、キャッシュメモリ９０５（例えば、図１Ｂのデータキャッシュユニット１７４またはＬ２キャッシュユニット１７６）、及びプロセッサ９０２と結合されたまたはプロセッサ９０２内に集積されたスクラッチパッドメモリ９０７を含む。プロセッサ９０２は、物理レジスタ９０６のセット及び１または複数のコア処理ユニット（例えば、「コア」９０３Ａ〜Ｎ）を含む。一実施形態では、コア処理ユニットの各々は、複数の同時スレッドを実行するように構成される。
【００７１】
システムメモリ９０４は、ソースバイナリアプリケーション９１０、動的バイナリトランスレーションシステム９１５、及びホスト動作システム（「ＯＳ：ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ」）９２０をホストし得る。動的バイナリトランスレーションシステム９１５は、ターゲットバイナリコード９１２、レジスタマッピングモジュール９１６を含む動的バイナリトランスレータコード９１４、及び／またはソースレジスタ記憶９１８のブロックを含み得る。ソースバイナリアプリケーション９１０は、アセンブルされた低レベルコードまたはコンパイルされた高レベルコードであり得るソースバイナリコードブロックのセットを含む。ソースバイナリコードブロックは、インクリメント、比較、及びジャンプ命令を含むロジックを分岐させることを含み得る命令のシーケンスである。
【００７２】
一実施形態では、ターゲットバイナリコードブロック（複数可）９１２は、「コードキャッシュ」９１１と呼ばれるシステムメモリの領域内に記憶される。コードキャッシュ９１１は、ソースバイナリコードブロックの１または複数の対応するブロックからトランスレートされたターゲットバイナリコードブロック（複数可）９１２に対する記憶として使用される。システムメモリ９０４は、プロセッサレジスタ９０６へ／からデータをロード／記憶するように構成されるソースレジスタ記憶９１８をホストし得る。いくつかの実施形態では、キャッシュメモリ９０５及び／またはスクラッチパッドメモリ９０７は、プロセッサレジスタ（複数可）９０６へ／からデータをロード／記憶するように構成される。
【００７３】
一実施形態では、動的バイナリトランスレータコード９１４及びレジスタマッピングモジュール９１６は、ソースバイナリアプリケーション９１０のブロック（複数可）をターゲットバイナリコードブロック（複数可）９１２へと変換するために、ソースバイナリアプリケーション９１０上で動作するための１または複数のコアによって実行される。ターゲットバイナリコードブロック（複数可）９１２は、ソースバイナリアプリケーション９１０の対応するソースバイナリコードブロックの機能性を含むように構成される。一実施形態では、ソースバイナリアプリケーションのソースバイナリコードブロックの複数の命令が、より小さい数の命令に組み合わされて（例えば、融合されて）、より小さい数の命令にわたって実施されるソースバイナリアプリケーションと同じ機能性を含む最適化されたターゲットバイナリコード９１２を作成する。例えば、ソースバイナリアプリケーション９１０は、カウンタをインクリメントまたはデクリメントすること、カウンタを定数と比較すること、その後、或る特定の制限が満たされる場合（例えば、ループ変数がまだＮまでインクリメントされなかった場合、Ｎは、ループ反復の所望される数である）ジャンプを呼び出すことを含む、比較及びジャンプ命令シーケンスを含み得る。一実施形態では、ＤＢＴシステム９１５は、３つの別個のインクリメント、比較、及びジャンプ命令を単一の命令へと圧縮する（例えば、融合する）ように構成される。
【００７４】
システム９００がバイナリコードブロックを実行するための呼び出しを受信する場合、ＤＢＴシステム９１５は、融合可能な命令についてコードブロックをスキャンして、命令シーケンスを融合された命令へと組み合わせる。命令をスキャン及び最適化するための例示的なロジックは、図９Ｂに示される。ＤＢＴシステム９１５が図解される一方で、一実施形態では、ＳＢＴは、バイナリが実行される前に、バイナリに対して実施され、発見される任意の静的に融合可能な命令シーケンス（例えば、静的分析を介して安全であると判定される命令シーケンス）は、融合されて、最適化されたバイナリを実行のために作成し得る。
【００７５】
図９Ｂの９２０において示されるように、システムは、バイナリコードブロックを実行するための呼び出しを受信する。一実施形態では、システムは、９２２において示されるように、インクリメント、比較、及びジャンプ命令シーケンスについてスキャンする。命令シーケンスが図９Ｂの９２４において検出される場合、トランスレーションロジックは、９２６において、任意のデータ依存性が検出されたシーケンス内に存在するかどうかを判定することを含む追加の動作を実施し得る。そうでなければ、次のコードブロックが存在する場合、システムは、９３２において、次の利用可能なコードブロックに進む。例示的な検出されたコードシーケンスは、以下の表１に示される。
【表１】
2018500657.tif 000003
【００７６】
表１の例示的な命令では、インクリメント命令が行（１）において示され、比較命令が行（３）において示され、ジャンプ命令が行（５）において示される。行（２）は、コード、ｆｒａｇｍｅｎｔ＿Ａを表し、それは、行（１）におけるインクリメントと行（３）における比較との間の０以上の命令を含み得る。行（４）は、コード、ｆｒａｇｍｅｎｔ＿Ｂを表し、それは、行（３）における比較と行（５）におけるジャンプとの間の０以上の命令を含み得る。ＪＥ（等しい場合、ジャンプ）命令が行（５）において示される一方で、実施形態は任意の特定のジャンプ命令に限定されない。その上、ＣＭＰ（比較）命令が示される一方で、他の比較動作（例えば、ＴＥＳＴ）も融合され得る。
【００７７】
ＡＤＤ、ＣＭＰ、及びＪＥ命令の間の命令断片は、いずれの他の命令も含まない場合がある。そのような場合は、ＡＤＤ／ＣＭＰ／ＪＥシーケンスは連続しているであろう。しかしながら、他の命令は、断片内のコードシーケンスに存在し得る。コードシーケンスにおいて任意の追加の命令を順序変更する前に、トランスレーションロジックは、９２６において、任意のデータ依存が存在するかどうかを判定するために、コードシーケンスをスキャンする。ｆｒａｇｍｅｎｔ＿Ａまたはｆｒａｇｍｅｎｔ＿Ｂにおける命令のオペランドのいずれかが、追加、比較、またはジャンプ命令に対してオペランドに依存する場合、命令を順序変更することが可能にされていない場合があり、そのようなコードブロックが存在する場合、トランスレーションロジックは、９３２において、次の利用可能なコードブロックに進む。追加として、任意の追加の分岐命令がｆｒａｇｍｅｎｔ＿Ａまたはｆｒａｇｍｅｎｔ＿Ｂのどちらかに存在する場合、命令を順序変更することを可能にされていない場合がある。しかしながら、いくつかの実施形態では、ジャンプ命令直後の追加の分岐命令が可能にされる。
【００７８】
しかしながら、ｆｒａｇｍｅｎｔ＿Ａまたはｆｒａｇｍｅｎｔ＿Ｂの命令が、追加、比較、またはジャンプ命令のオペランドとのデータ依存性を有しない場合、入来コードストリームにおいて追加の命令を可能にすることが合法であり、トランスレータは、任意のデータ依存性に違反することなく、自由にこれらの命令を順序変更するべきである。したがって、トランスレーションロジックは、ブロック９２８において、命令の検出されたシーケンス内のコード断片において、任意の命令を順序変更し得る。ブロック９３０において、トランスレーションロジックは、比較動作のためのレジスタ及び定数値、ならびにジャンプ動作のためのジャンプラベルを含む、命令シーケンスを実施するよう要求されるオペランドを含む、単一のインクリメント＿比較＿ジャンプ動作と、別個のインクリメント、比較、ジャンプ命令を置き換える。例示的な順序変更されたコードシーケンスは、以下の表２に示される。
【表２】
2018500657.tif 000004
【００７９】
上記表２に示されるように、ｆｒａｇｍｅｎｔ＿Ａ及びｆｒａｇｍｅｎｔ＿Ｂのための命令は、行（６）及び行（７）において示されるように、順序変更され得る。行８において示されるように、インクリメント、比較、及びジャンプ動作のためのオペランドを含む融合されたインクリメント＿比較＿ジャンプ動作が挿入される。
【００８０】
例示的な融合された命令プロセッサ実装
図１０Ａ〜１０Ｂは、インクリメント＿比較＿ジャンプ動作の例示的なプロセッサ実装を図解するブロック図である。いくつかの実施形態では、実装するプロセッサは、命令を実装するためのいくつかのアーキテクチャの特徴を含む。図１０Ａは、或る実施形態に従う、動作を実施するためのロジックを含むプロセッサコアのブロック図である。図１０Ｂは、或る実施形態に従う、インクリメント＿比較＿ジャンプ動作を実装するための例示的な具体的なマイクロアーキテクチャのブロック図である。
【００８１】
図１０Ａに示されるように、一実施形態では、プロセッサコア１０００は、実行されることになる命令をフェッチするためのインオーダフロントエンド１００１を含み、プロセッサパイプライン内で、後で使用されることになる命令を準備する。一実施形態では、フロントエンド１００１は、図１Ｂのフロントエンドユニット１３０に類似しており、メモリから命令をプリエンプティブにフェッチするための命令プリフェッチャ１０２６を含むコンポーネントを追加として含む。フェッチされた命令は、命令をデコードするか、解釈するための命令デコーダ１０２８に供給され得る。
【００８２】
一実施形態では、命令デコーダ１０２８は、受信された命令を、機械が実行し得る「マイクロ命令」または「マイクロ動作」と呼ばれる（ｍｉｃｒｏ  ｏｐまたはｕｏｐとも呼ばれる）１または複数の動作へとデコードする。他の実施形態では、デコーダは、命令を、オペコードと対応するデータと、一実施形態に従う動作を実施するマイクロアーキテクチャによって使用される制御フィールドとにパースする。一実施形態では、トレースキャッシュ１０２９は、デコードされたｕｏｐを取り、それらを、ｕｏｐキュー１０３４におけるプログラム順序のシーケンスまたはトレースに、実行のためにアセンブルする。
【００８３】
一実施形態では、プロセッサコア１０００は、複合命令セットを実装する。トレースキャッシュ１０２９が複合命令に遭遇する場合、マイクロコードＲＯＭ１０３２は、動作を完了するために必要とされるｕｏｐを提供する。いくつかの命令は、単一のｍｉｃｒｏ−ｏｐへと転換される一方で、他のものは、フル動作を完了するためのいくつかのｍｉｃｒｏ−ｏｐを必要とする。一実施形態では、命令は、命令デコーダ１０２８における処理のために、小さい数のｍｉｃｒｏ−ｏｐへとデコードされ得る。別の実施形態では、いくらかのｍｉｃｒｏ−ｏｐが、動作を達成するために必要とされる場合、命令は、マイクロコードＲＯＭ１０３２内に記憶され得る。例えば、一実施形態では、５つ以上のｍｉｃｒｏ−ｏｐが命令を完了することを必要とされる場合、デコーダ１０２８は、命令を実施するために、マイクロコードＲＯＭ１０３２にアクセスする。
【００８４】
トレースキャッシュ１０２９は、マイクロコードシーケンスを読み出すための正確なマイクロ命令ポインタを判定して、マイクロコードＲＯＭ１０３２から一実施形態に従う１または複数の命令を完了するためのエントリポイントプログラム可能ロジックアレイ（ＰＬＡ）を指す。マイクロコードＲＯＭ１０３２が命令のためにｍｉｃｒｏ−ｏｐを順番に並べ終えた後、機械のフロントエンド１００１は、トレースキャッシュ１０２９からｍｉｃｒｏ−ｏｐをフェッチすることを再開する。一実施形態では、プロセッサコア１０００は、命令が実行のために準備されるアウトオブオーダ実行エンジン１００３を含む。アウトオブオーダ実行ロジックは、命令フローを順序変更して、命令が命令パイプラインを通して進むにつれて性能を最適化するためのいくらかのバッファを有する。マイクロコードサポートのために構成される実施形態について、アロケータロジックは、各ｕｏｐが実行の最中に使用する機械バッファ及びリソースを割り当てる。追加として、レジスタリネーミングロジックは、レジスタファイル中の物理レジスタにおいて、ロジックレジスタを物理レジスタにリネーミングする。
【００８５】
一実施形態では、アロケータは、命令スケジューラ、メモリスケジューラ、高速スケジューラ１００２、遅い／一般的な浮動小数点スケジューラ１００４、及び簡易浮動小数点スケジューラ１００６の前に、各ｕｏｐのエントリを２つのｕｏｐキューのうち１つに対して、１つをメモリ動作に、１つを非メモリ動作というふうに割り当てる。ｕｏｐスケジューラ１００２、１００４、及び１００６は、それらの従属入力レジスタオペランドソースの準備ができていること、及びｕｏｐがそれらの動作を完了する必要がある実行リソースｕｏｐの利用可能性に基づいて、いつｕｏｐの準備ができているのかを判定する。一実施形態の高速スケジューラ１００２は、主クロックサイクルの各半分にスケジューリングをする場合がある一方で、他のスケジューラは、主プロセッサクロックサイクルにつき一度しかスケジューリングをしない場合がある。スケジューラは、実行のためのｕｏｐのスケジューリングをするために、ディスパッチポート間を調整する。
【００８６】
レジスタファイル１００８、１０１０は、実行ブロック１０１１において、スケジューラ１００２、１００４、１００６、及び実行ユニット１０１２、１０１４、１０１６、１０１８、１０２０、１０２２、１０２４の間に位置する。一実施形態では、整数及び浮動小数点動作に対してそれぞれ、別個のレジスタファイル１００８、１０１０が存在する。一実施形態では、各レジスタファイル１００８、１０１０は、まだレジスタファイルに書き込まれていない完了した結果を、新しい従属ｕｏｐにバイパスまたは転送し得るバイパスネットワークを含み得る。整数レジスタファイル１００８及び浮動小数点レジスタファイル１０１０は、また、データを他と通信することができる。一実施形態について、整数レジスタファイル１００８は、２つの別個のレジスタファイルに、つまり、１つのレジスタファイルをデータの低オーダ３２ビットに、第２のレジスタファイルをデータの高オーダ３２ビットにというふうに、分けられる。一実施形態では、浮動小数点レジスタファイル１０１０は１２８ビット幅エントリを有する。
【００８７】
実行ブロック１０１１は、命令を実行するための実行ユニット１０１２、１０１４、１０１６、１０１８、１０２０、１０２２、１０２４を含む。レジスタファイル１００８、１０１０は、マイクロ命令が実行する必要のある整数及び浮動小数点データオペランド値を記憶する。一実施形態のプロセッサコア１０００は、いくらかの実行ユニット（アドレス生成ユニット（ＡＧＵ：ａｄｄｒｅｓｓ  ｇｅｎｅｒａｔｉｏｎ  ｕｎｉｔ）１０１２、ＡＧＵ１０１４、高速ＡＬＵ１０１６、高速ＡＬＵ１０１８、遅いＡＬＵ１０２０、浮動小数点ＡＬＵ１０２２、及び浮動小数点移動ユニット１０２４）からなる。一実施形態について、浮動小数点実行ブロック１０２２、１０２４は、浮動小数点、ＭＭＸ、ＳＩＭＤ、及びＳＳＥ、または他の動作を実行する。一実施形態の浮動小数点ＡＬＵ１０２２は、除算、平方根、及び剰余ｍｉｃｒｏ−ｏｐを実行するための６４ビット×６４ビット浮動小数点除算器を含む。
【００８８】
一実施形態では、浮動小数点値に関わる命令は、浮動小数点ハードウェアを用いて扱われ得る。ＡＬＵ動作は、高速度ＡＬＵ実行ユニット１０１６、１０１８に移行する。一実施形態の高速ＡＬＵ１０１６、１０１８は、クロックサイクルの半分の効果的なレイテンシーで高速動作を実行し得る。一実施形態について、ほとんどの複合整数動作は遅いＡＬＵ１０２０に移行する。なぜなら、遅いＡＬＵ１０２０は、乗算器、シフト、フラグロジック、及び分岐処理等の長いレイテンシータイプの動作のための整数実行ハードウェアを含むからだ。メモリロード／記憶動作は、ＡＧＵ１０１２、１０１４によって実行される。一実施形態について、整数ＡＬＵ１０１６、１０１８、１０２０は、６４ビットデータオペランドに対して整数動作を実施するコンテキストにおいて記載される。代替の実施形態では、ＡＬＵ１０１６、１０１８、１０２０は、１６、３２、１２８、２５６等を含む様々なデータビットをサポートするように実装され得る。同様に、浮動小数点ユニット１０２２、１０２４は、様々な幅のビットを有するオペランドの範囲をサポートするように実装され得る。一実施形態について、浮動小数点ユニット１０２２、１０２４は、ＳＩＭＤ及びマルチ媒体命令と併せて、１２８ビット幅パックデータオペランド上で動作し得る。
【００８９】
一実施形態では、ｕｏｐスケジューラ１００２、１００４、１００６は、親ロードが実行することを終了する前に、従属動作をディスパッチする。ｕｏｐが推論的にスケジュールを立てられ、実行されるため、プロセッサコア１０００は、また、メモリミスを扱うためのロジックを含む。データロードがデータキャッシュにおいてミスする場合、一時的に不正確なデータをスケジューラに残したパイプライン内にフライトにおける従属動作が存在し得る。再生機構は、不正確なデータを使用する命令を追跡して、再実行する。一実施形態では、従属動作のみが再生される必要があり、独立動作は、完了することを可能にされる。
【００９０】
一実施形態では、メモリ実行ユニット（ＭＥＩ：ｍｅｍｏｒｙ  ｅｘｅｃｕｔｉｏｎ  ｕｎｉｔ）１０４１が含まれる。ＭＥＵ１０４１は、メモリオーダバッファ（ＭＯＢ：ｍｅｍｏｒｙ  ｏｒｄｅｒ  ｂｕｆｆｅｒ）１０４２、ＳＲＡＭユニット１０３０、データＴＬＢユニット１０７２、データキャッシュユニット１０７４、及びＬ２キャッシュユニット１０７６を含む。
【００９１】
プロセッサコア１０００は、様々なコンポーネントを共有または区画化することによって、同時マルチスレッドされた動作に対して構成され得る。プロセッサ上で動作する任意のスレッドは、共有コンポーネントにアクセスし得る。例えば、共有バッファまたは共有キャッシュ内のスペースは、要求するスレッドに関係なく、スレッド動作に割り当てられ得る。一実施形態では、区画化されたコンポーネントは、スレッドにつき割り当てられる。具体的には、どのコンポーネントが共有され、どのコンポーネントが区画化されるのかが、実施形態に従って変動する。一実施形態では、実行ユニット（例えば、実行ブロック１０１１）及びデータキャッシュ（例えば、データＴＬＢユニット１０７２、データキャッシュユニット１０７４）等のプロセッサ実行リソースは、共有リソースである。一実施形態では、Ｌ２キャッシュユニット１０７６及び他のより高レベルのキャッシュユニット（例えば、Ｌ３キャッシュ、Ｌ４キャッシュ）を含むマルチレベルキャッシュは、すべての実行スレッドの間で共有される。他のプロセッサリソースは、各スレッドベースで分配され、及び付与されるか、または割り当てられ、区画化されたリソースの具体的な区画は、具体的なスレッド専用である。例示的な区画化されたリソースは、ＭＯＢ１０４２、アウトオブオーダエンジン１００３のレジスタエイリアステーブル（ＲＡＴ：ｒｅｇｉｓｔｅｒ  ａｌｉａｓ  ｔａｂｌｅ）及び順序変更バッファ（ＲＯＢ）（例えば、図１Ｂのリネーム／アロケータユニット１５２及びリタイアメントユニット１５４内で）、及びフロントエンド１００１の命令デコーダ１０２８と関連付けられた１または複数の命令デコードキューを含む。一実施形態では、命令ＴＬＢ（例えば、図１Ｂの命令ＴＬＢユニット１３６）及び分岐予測ユニット（例えば、図１Ｂの分岐予測ユニット１３２）は、区画化もされる。
【００９２】
実行ブロック１０１１の例示的な部分は、図１０Ｂに示されるようなロジックを含み、それは、単一のサイクルインクリメント＿比較＿ジャンプ動作を実装するためのマイクロアーキテクチャ１０５０を図解する。一実施形態では、図解されたマイクロアーキテクチャ１０５０は、プロセッサ実行パイプライン内で実行ステージを実施するように構成される。マイクロアーキテクチャ１０５０は、算術ロジックユニット（ＡＬＵ）１０５４及びジャンプ実行ユニット（ＪＥＵ：ｊｕｍｐ  ｅｘｅｃｕｔｉｏｎ  ｕｎｉｔ）１０５６を含み、分岐及び算術命令を実行することができる。パイピングロジック１０５２Ａ〜Ｂは、マイクロアーキテクチャを、前の及び連続するパイプラインステージのためのロジックと繋げ、ＡＬＵ演算の結果１０６３（例えば、Ｂ＋１）を連続するパイプラインステージに渡すために、ＡＬＵ１０５４にオペランド（例えば、オペランド＿Ａ１０６０、オペランド＿Ｂ１０６１）を供給する。一実施形態では、インクリメント動作の結果は、入力オペランドによって指示された適切なレジスタにコミットされる。制御ユニットからのＡＬＵ１０５４への制御信号１０６６は、使用されて、ＡＬＵ動作の間で選択するか、一実施形態では、オペコードをＡＬＵに提供する。制御信号１０６７は、また、制御ユニットから制御ＪＥＵ動作までＪＥＵに提供される。
【００９３】
一実施形態では、ＡＬＵ１０５４は、比較動作を実施するために使用される。減算動作は、プレ修正比較命令に提供されるオペランド＿Ａ１０６０、オペランド＿Ｂ１０６１を使用して、実施され得る。減算動作（例えば、Ａ〜Ｂ）は、実施されて、ＪＥＵ１０５６に供給されて（例えば、条件付き分岐１０６４についてのＡＬＵフラグ）、条件付き分岐を取るかどうかを判定するフラグを生成する（例えば、ジャンプと等しい、ジャンプと等しくない等）。
【００９４】
単一の実行サイクル内でインクリメント＿比較＿ジャンプ動作を実施するために、各コンポーネントは、サイクル内の適切な点における適切な入力を要求する。例えば、ＡＬＵフラグ１０６４は、サイクルにおける早期にＪＥＵ１０５６に到達するべきで、それらは、マルチサイクルバイパスの結果であり得ない。一実施形態では、フラグの具体的なサブセット（例えば、桁上げ、ゼロ、符号、オーバーフロー等）は、タイミング限定に基づいて、条件付きジャンプのために使用される。一実施形態では、アーキテクチャフラグレジスタ内のすべてのフラグは、パリティーフラグを含むジャンプ状況のために使用され得る。
【００９５】
一実施形態では、インクリメント＿比較＿ジャンプ動作は、ＡＬＵ１０５４への桁上げ入力１０６２を利用することによって、単一のサイクル内で実施される。例えば、第０ビットスライス加算器への桁上げ入力１０６２は、アサートされ、ＡＬＵ１０５４に、タイミングへの任意の実質的な影響無しに、インクリメント及び比較（例えば、比較Ａ−Ｂ＋１）を実施させ得る。演算は、サイクルにおける早期に実施され、必要に応じてジャンプ演算を実施するための時間内にジャンプ実行ユニット１０５６のためのＡＬＵフラグを生成し得る。ＡＬＵフラグ１０６４に少なくとも一部基づいて、ＪＥＵ１０５６は、プロセッサフロントエンドに提供されて、かつ制御フロー変更を開始して、次の命令ポインタ（ＮＩＰ：ｎｅｘｔ  ｉｎｓｔｒｕｃｔｉｏｎ  ｐｏｉｎｔｅｒ）を更新するためのジャンプターゲットアドレスを含む制御リダイレクト情報１０６５を生成する。
【００９６】
図１１は、或る実施形態に従う、インクリメント＿比較＿ジャンプ動作を実施するためのロジックを含む処理システムのブロック図である。例示的な処理システムは、主メモリ１１００に結合されたプロセッサ１１５５を含む。プロセッサ１１５５は、インクリメント＿比較＿ジャンプ動作をデコードするためのデコードロジック１１３１を有するデコードユニット１１３０を含む。追加として、プロセッサ実行エンジンユニット１１４０は、命令を実行するための追加の実行ロジック１１４１を含む。レジスタ１１０５は、実行ユニット１１４０が命令ストリームを実行するとき、オペランド、制御データ、及び他のタイプのデータに、レジスタ記憶を提供する。
【００９７】
シングルプロセッサコア（「コア０」）の詳細は、簡潔にするために図１１において図解される。しかしながら、図１１に示される各コアが、コア０としてのロジックと同じセットを有し得ることが理解されよう。図解されるように、各コアは、また、指定されたキャッシュ管理ポリシーに従って、命令及びデータをキャッシュするための、専用のレベル１（Ｌ１）キャッシュ１１１２及びレベル２（Ｌ２）キャッシュ１１１１を含み得る。Ｌ１キャッシュ１１１１は、命令を記憶するための別個の命令キャッシュ１３２０、及びデータを記憶するための別個のデータキャッシュ１１２１を含む。様々なプロセッサキャッシュ内に記憶された命令及びデータは、固定サイズ（例えば、長さが６４、１２８、５１２バイト）であり得るキャッシュ行の粒度において管理される。この例示的な実施形態の各コアは、主メモリ１１００及び／または共有レベル３（Ｌ３）キャッシュ１１１６から命令をフェッチするための命令フェッチユニット１１１０、命令をデコードするためのデコードユニット１１３０、命令を実行するための実行ユニット１３４０、及び命令をリタイアして、結果をライトバックするためのライトバック／リタイアユニット１１５０を有する。
【００９８】
命令フェッチユニット１１１０は、メモリ１１００（またはキャッシュのうち１つ）からフェッチされることになる次の命令のアドレスを記憶するための次の命令ポインタ１１０３、アドレストランスレーションの速度を改善するための最近使用された仮想命令アドレスから物理命令アドレスへのマップを記憶するための命令トランスレーションルックアサイドバッファ（ＩＴＬＢ：ｉｎｓｔｒｕｃｔｉｏｎ  ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋ−ａｓｉｄｅ  ｂｕｆｆｅｒ）１１０４のマップ、推論的に命令分岐アドレスを予測するための分岐予測ユニット１１０２、及び分岐アドレス及びターゲットアドレスを記憶するための分岐ターゲットバッファ（ＢＴＢ：ｂｒａｎｃｈ  ｔａｒｇｅｔ  ｂｕｆｆｅｒ）１１０１を含む様々な周知のコンポーネントを含む。一旦フェッチされると、命令は、その後、デコードユニット１１３０、実行ユニット１１４０、及びライトバック／リタイアユニット１１５０を含む命令パイプラインの残りのステージにストリームされる。
【００９９】
図１２は、或る実施形態に従う、ロジックが、インクリメント＿比較＿ジャンプ動作を処理するための流れ図である。ブロック１２０２において、命令パイプラインは、インクリメント＿比較＿ジャンプ動作を実施するための命令のフェッチから始まる。命令は、命令のインクリメント及び比較部分のための第１の及び第２の入力オペランド、ならびに命令の条件付きジャンプ部分のためのジャンプラベルオペランドを受け入れる。一実施形態では、第１のオペランドは、レジスタまたは即値であり得る一方で、第２のオペランドは、レジスタ、即値、またはメモリアドレスであり得る。いくつかの実施形態では、ジャンプラベルは、ジャンプターゲットアドレスに転換されるジャンプ命令からオフセットされる即値である。
【０１００】
ブロック１２０４において、デコードユニットは、インクリメント＿比較＿ジャンプ動作をデコードされた命令へとデコードする。一実施形態では、デコードされた命令は、単一のプロセッササイクルにおいて実行される単一の動作である。一実施形態では、デコードされた命令は、命令の各サブ要素を実施するための１または複数のマイクロ動作を含む。マイクロ動作は、ハードワイヤードであり得、あるいは、マイクロコード動作は、実行ユニット等のプロセッサのコンポーネントに、命令を実装するための様々な動作を実施させ得る。
【０１０１】
ブロック１２０６において、プロセッサの実行ユニットは、デコードされた命令を実行して、融合されたインクリメント＿比較＿ジャンプ動作を実施して、インクリメントし、比較し、条件付きで、比較に基づいてジャンプターゲットラベルにジャンプ（例えば、分岐）する。一実施形態では、ＡＬＵ比較（例えば、減算）動作及び任意の他のステータスフラグに起因するステータスフラグに基づいて、関連する場合、ジャンプターゲットアドレスが生成され、プロセッサフロントエンドに対して通信される。
【０１０２】
ブロック１２０８において、プロセッサフロントエンドは、これらの結果に基づいて次の命令ポインタを更新し、プロセッサのリタイアメントユニットが命令をリタイアする。一実施形態では、次の命令ポインタは、ジャンプが実行されるかどうかに基づいて、シーケンスにおいて、ジャンプターゲットアドレスに対して更新されるか、次の命令に対して更新される。一実施形態では、アウトオブオーダプロセッサは、分岐予測プロセッサであり、プロセッサは、命令の結果を使用して分岐予測を解決する。分岐予測が正確な場合、パイプラインにおける命令フローは、中断されない状態が続く。しかしながら、分岐予測が不正確な場合、プロセッサは、予測誤り回復動作を実施して分岐予測誤りを解決する。
【０１０３】
一実施形態では、予測誤りが検出される場合、ＪＥＵは、分岐予測誤りの後にフェッチされた命令によって生成された状態をフロントエンドから取り除く信号（例えば、ＪＥクリア）をアサートし、新しい命令をフェッチすることを始めることをフロントエンドアドレスに対して指示する。分岐予測誤りから回復するのに費やされたプロセッササイクルは、予測誤りの分岐から十分に回復することが要求されるサイクルの数であるプロセッサ分岐予測誤りペナルティに貢献する。一実施形態では、命令融合は、別個の命令シナリオと比較された２つのサイクルによって、分岐予測誤りペナルティを減少させる。別個のインクリメント、比較、及びジャンプ命令に関わる分岐予測誤りから回復するために、一実施形態では、３つのプロセッササイクルを要求する。
【０１０４】
別個のインクリメント、比較、及びジャンプ命令の間の比較は、以下の表に示される。表３は、別個のインクリメント、比較、及びジャンプ命令の例示的なパイプラインタイミングを示す。表４は、融合された、単一のサイクルインクリメント＿比較＿ジャンプについてのタイミングを示す。
【表３】
2018500657.tif 000005
【０１０５】
上記表３に示されるように、別個のインクリメント（ＩＮＣ）、比較（ＣＭＰ）、及びジャンプ（ＪＣＣ）命令は、スケジューリングされ、レジスタファイル読み出しを遂行し、アウトオブオーダプロセッサ（例えばアウトオブオーダエンジン１００３）によって命令オーダから実行される。命令が別個に実行される場合、プロセッサのＪＥＵは、Ｎ＋４まで分岐アドレスをフロントエンドにディスパッチすることができず、プロセッサが不正確に分岐を予測する場合、予測誤りペナルティを拡張する。
【表４】
2018500657.tif 000006
【０１０６】
上記表４に示されるように、融合されたインクリメント＿比較＿ジャンプ動作は、スケジューリングされ、レジスタファイル読み出しを遂行し、別個の命令よりも早期に２つのサイクルを実行する。追加として、別個のアクションを実施するために要求されるハードウェア命令の数を減少させることは、様々な機能的ユニットへの圧力を減少させ、それらのユニットに自由に他の動作を実施させておき得る。一実施形態では、減少された数の命令が、プロセッサハードウェア内で、スケジューリングされ、管理されるので、融合された命令は、スケジューリング及び記帳ハードウェアに対する要求を減少させる。追加として、減少されたリソースが順序変更バッファ及びリザベーションステーションに要求される。
【０１０７】
一実施形態では、個々の命令のレジスタの間の明示的な依存性があるであろうことと、単一の命令が使用される場合、レジスタオペランドのすべてが、単一の命令のオペランドであることとを考えると、命令の融合は、また、バイナリトランスレーションロジック内とプロセッサ内の両方で、レジスタ割り当てハードウェアへの圧力を減少させる。追加として、融合された命令は、バイナリトランスレーティングシステムのための命令キャッシュフットプリントを減少させ、命令フェッチ及びデコーディング帯域幅の使用量を減少させ、ならびにコード密度を改善する。
【０１０８】
例示的な命令フォーマット
本明細書に記載される命令（複数可）の実施形態は、ベクトルフレンドリー命令フォーマットを含む異なるフォーマットにおいて具現され得る。ベクトルフレンドリー命令フォーマットは、ベクトル命令に適した命令フォーマットである（例えば、ベクトル動作に特有である、或る特定のフィールドが存在する）。ベクトルとスカラ動作との両方がベクトルフレンドリー命令フォーマットを通してサポートされる実施形態が記載される一方で、代替の実施形態は、ベクトル動作ベクトルフレンドリー命令フォーマットのみを使用する。
【０１０９】
図１３Ａ〜１３Ｂは、或る実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びその命令テンプレートを図解するブロック図である。図１３Ａは、或る実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びそのクラスＡ命令テンプレートを図解するブロック図である一方で、図１３Ｂは、或る実施形態に従う、汎用ベクトルフレンドリー命令フォーマット及びそのクラスＢ命令テンプレートを図解するブロック図である。具体的には、汎用ベクトルフレンドリー命令フォーマット１３００について、クラスＡ及びクラスＢ命令テンプレートが定義されており、それらの両方は、メモリアクセス無し１３０５命令テンプレート及びメモリアクセス１３２０命令テンプレートを含む。汎用ベクトルフレンドリー命令フォーマットのコンテキストにおける「汎用」という用語は、任意の具体的な命令セットに結び付けられていない命令フォーマットを指す。
【０１１０】
ベクトルフレンドリー命令フォーマットが以下をサポートする実施形態が記載されている。３２ビット（４バイト）または６４ビット（８バイト）データ要素幅（またはサイズ）（したがって、６４バイトベクトルは、１６ダブルワードサイズ要素、または代わりに８クワドワードサイズ要素のどちらかから成る）を有する６４バイトベクトルオペランド長（またはサイズ）、１６ビット（２バイト）または８ビット（１バイト）データ要素幅（またはサイズ）を有する６４バイトベクトルオペランド長（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（またはサイズ）を有する３２バイトベクトルオペランド長（またはサイズ）、及び３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（またはサイズ）を有する１６バイトベクトルオペランド長（またはサイズ）。しかしながら、代替の実施形態は、より多い、より少ない、または異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を用いて、より多い、より少ない、及び／または異なるベクトルオペランドサイズ（例えば、２５６バイトベクトルオペランド）をサポートする。
【０１１１】
図１３Ａにおけるクラス命令テンプレートは以下を含む。１）メモリアクセス無し１３０５命令テンプレート内で、メモリアクセス無し、フル丸め制御タイプ動作１３１０命令テンプレート及びメモリアクセス無し、データ変換タイプ動作１３１５命令テンプレートが示され、ならびに２）メモリアクセス１３２０命令テンプレート内で、メモリアクセス、時間的１３２５命令テンプレート及びメモリアクセス、非時間的１３３０命令テンプレートが示される。図１３ＢにおけるクラスＢ命令テンプレートは以下を含む。１）メモリアクセス無し１３０５命令テンプレート内で、メモリアクセス無し、書き込みマスク制御、部分的な丸め制御タイプ動作１３１２命令テンプレート及びメモリアクセス無し、書き込みマスク制御、ｖｓｉｚｅタイプ動作１３１７命令テンプレートが示され、ならびに２）メモリアクセス１３２０命令テンプレート内で、メモリアクセス、書き込みマスク制御１３２７命令テンプレートが示される。
【０１１２】
汎用ベクトルフレンドリー命令フォーマット１３００は、図１３Ａ〜１３Ｂにおいて図解された順序で以下に一覧に示された以下のフィールドを含む。
【０１１３】
フォーマットフィールド１３４０−このフィールドにおける具体的な値（命令フォーマット識別子値）は、ベクトルフレンドリー命令フォーマット、したがって命令ストリームにおけるベクトルフレンドリー命令フォーマットにおける命令の発生を一意的に識別する。よって、このフィールドは、それが、汎用ベクトルフレンドリー命令フォーマットのみを有する命令セットにとって必要とされないという意味で、任意的である。
【０１１４】
ベース動作フィールド１３４２−その内容は、異なるベース動作を区別する。
【０１１５】
レジスタインデックスフィールド１３４４−その内容は、直接的にまたはアドレス生成を通して、ソース及び宛先オペランドの位置を指定する（それらがレジスタ内またはメモリ内にある場合）。これらは、ＰｘＱ（例えば３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）レジスタファイルからＮレジスタを選択するための十分なビット数を含む。一実施形態では、Ｎは、３つのソース及び１つの宛先レジスタまでであり得、代替の実施形態は、より多くのまたはより少ないソース及び宛先レジスタをサポートし得る（例えば、２つのソースまでをサポートし得（これらのソースのうち１つがまた、宛先の働きをする場合）、３つのソースまでをサポートし得（これらのソースのうち１つがまた、宛先の働きをする場合）、２つのソース及び１つの宛先までをサポートし得る）。
【０１１６】
修正子フィールド１３４６−その内容は、汎用ベクトル命令フォーマットにおいてメモリアクセスを指定する命令の発生を、それを指定しないものと区別し、つまり、メモリアクセス無し１３０５命令テンプレート及びメモリアクセス１３２０命令テンプレートを区別する。メモリアクセス動作は、メモリ階層への読み出し及び／または書き込む（いくつかの場合、レジスタにおける値を使用して、ソース及び／または宛先アドレスを指定する）一方で、非メモリアクセス動作はそれらを行わない（例えば、ソース及び宛先はレジスタである）。一実施形態では、このフィールドは、また、メモリアドレス計算を実施するための３つの異なる手段の間で選択する一方で、代替の実施形態は、メモリアドレス計算を実施するためのより多い、より少ない、または異なる手段をサポートし得る。
【０１１７】
増大動作フィールド１３５０−その内容は、様々な異なる動作のうちどの１つが、ベース動作に加えて実施されることになるのかを区別する。このフィールドは、コンテキスト固有である。一実施形態では、このフィールドは、クラスフィールド１３６８、アルファフィールド１３５２、及びベータフィールド１３５４に分割される。増大動作フィールド１３５０は、動作の共通群が、２個、３個、または４個の命令ではなく、単一の命令において実施されることを可能にする。
【０１１８】
スケールフィールド１３６０−その内容は、メモリアドレス生成について（例えば、２ｓｃａｌｅ＊  ｉｎｄｅｘ＋ｂａｓｅを使用するアドレス生成について）、インデックスフィールドの内容をスケール変更することを可能にする。
【０１１９】
変位フィールド１３６２Ａ−その内容は、メモリアドレス生成の一部として使用される（例えば、２ｓｃａｌｅ＊  ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを使用するアドレス生成について）。
【０１２０】
変位因子フィールド１３６２Ｂ（変位フィールド１３６２Ａの変位因子フィールド１３６２Ｂの真上への並置は、一方または他方が使用されることを指示することに留意されたい）−その内容は、アドレス生成の一部として使用され、それは、メモリアクセス（Ｎ）のサイズによってスケール変更されることになる変位因子を指定する−ここで、Ｎは、メモリアクセスにおけるバイト数である（例えば、２ｓｃａｌｅ＊  ｉｎｄｅｘ＋ｂａｓｅ＋ｓｃａｌｅｄ  ｄｉｓｐｌａｃｅｍｅｎｔを使用するアドレス生成について）。冗長な低オーダビットは無視され、よって、効果的なアドレスを計算する際に使用されることになる最終的な変位を生成するために、変位因子フィールドの内容は、メモリオペランド全サイズ（Ｎ）を乗算される。Ｎの値は、プロセッサハードウェアによって、ランタイムにおいて、フルオペコードフィールド１３７４（本明細書に後で記載される）及びデータ操作フィールド１３５４Ｃに基づいて判定される。変位フィールド１３６２Ａ及び変位因子フィールド１３６２Ｂは、それらが、メモリアクセス無し１３０５命令テンプレートのために使用されず、及び／または異なる実施形態が、２つのうち１つのみを実装するか、どちらも実装しない場合があるという意味で、任意的である。
【０１２１】
データ要素幅フィールド１３６４−その内容は、いくらかのデータ要素幅のうちどの１つが、使用されることになるのか（いくつかの実施形態では、すべての命令のために、他の実施形態では、命令のいくつかのみのために）を区別する。このフィールドは、１つのデータ要素幅のみがサポートされ、及び／またはデータ要素幅がオペコードの何らかの態様を使用してサポートされる場合、それが必要とされないという意味で、任意的である。
【０１２２】
書き込みマスクフィールド１３７０−その内容は、各データ要素位置ベースで、宛先ベクトルオペランドにおけるそのデータ要素位置が、ベース動作及び増大動作の結果を反映するかどうかを制御する。クラスＡ命令テンプレートは、併合書き込みマスキングをサポートする一方で、クラスＢ命令テンプレートは、併合とゼロ化書き込みマスキングとの両方をサポートする。併合するとき、ベクトルマスクは、宛先における要素の任意のセットが、任意の動作（ベース動作及び増大動作によって指定された）の実行の最中に更新から保護されることを可能にし、他の一実施形態では、対応するマスクビットが０を有する宛先の各要素の古い値を保存する。対照的に、ゼロ化ベクトルマスクは、宛先内の要素の任意のセットが、任意の動作（ベース動作及び増大動作によって指定された）の実行の最中にゼロ化されることを可能にする場合、一実施形態では、対応するマスクビットが値０を有する場合、宛先の要素は０に設定される。この機能性のサブセットは、実施されている動作のベクトル長（つまり、修正されている要素のスパン、最初から最後の１つまで）を制御するための能力であるが、しかしながら、修正される要素が連続的である必要はない。したがって、書き込みマスクフィールド１３７０は、ロード、記憶、算術、論理的等を含む部分的なベクトル動作を可能にする。書き込みマスクフィールドの１３７０の内容が、使用されることになる書き込みマスクを含むいくらかの書き込みマスクレジスタのうち１つを選択する実施形態が記載される一方で（したがって、書き込みマスクフィールドの１３７０の内容は、実施されることになるマスキングを間接的に識別する）、代替の実施形態は、代わりにまたは追加として、マスク書き込みフィールドの１３７０の内容が、実施されることになるマスキングを直接的に指定することを可能にする。
【０１２３】
即値フィールド１３７２−その内容は、即値の指定を可能にする。このフィールドは、それが、即値をサポートしない汎用ベクトルフレンドリーフォーマットの実装において存在せず、それが、即値を使用しない命令において存在しないという意味で、任意的である。
【０１２４】
クラスフィールド１３６８−その内容は、命令の異なるクラスの間で区別する。図１３Ａ〜１３Ｂを参照して、このフィールドの内容は、クラスＡ及びクラスＢ命令との間で選択する。図１３Ａ〜１３Ｂにおいて、角丸方形は、具体的な値がフィールド（例えば、それぞれ、図１３Ａ〜１３Ｂにおけるクラスフィールド１３６８に対するクラスＡ１３６８Ａ及びクラスＢ１３６８Ｂ）内に存在することを指示するために使用される。
【０１２５】
［クラスＡの命令テンプレート］
クラスＡの非メモリアクセス１３０５命令テンプレートの場合、アルファフィールド１３５２は、ＲＳフィールド１３５２Ａとして解釈され、その内容は、異なる増大動作タイプのうちどの１つが、実施されることになるのか（例えば、丸め１３５２Ａ．１及びデータ変換１３５２Ａ．２は、それぞれ、メモリアクセス無し、丸めタイプ動作１３１０及びメモリアクセス無し、データ変換タイプ動作１３１５命令テンプレートのために指定される）を区別する一方で、ベータフィールド１３５４は、指定されたタイプのどの動作が実施されることになるのかを区別する。メモリアクセス無し１３０５命令テンプレートにおいて、スケールフィールド１３６０、変位フィールド１３６２Ａ、及び変位スケールフィールド１３６２Ｂは存在しない。
【０１２６】
［メモリアクセス無し命令テンプレート−フル丸め制御タイプ動作］
メモリアクセス無しフル丸め制御タイプ動作１３１０命令テンプレートにおいて、ベータフィールド１３５４は、丸め制御フィールド１３５４Ａとして解釈され、その内容（複数可）は静的丸めを提供する。記載された実施形態では、丸め制御フィールド１３５４Ａは、全浮動小数点例外抑制（ＳＡＥ：ｓｕｐｐｒｅｓｓ  ａｌｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｅｘｃｅｐｔｉｏｎｓ）フィールド１３５６及び丸め動作制御フィールド１３５８を含む一方で、代替の実施形態は、これらの概念の両方を同じフィールドへとエンコードすること、またはこれらの概念／フィールドのうち一方もしくは他方のみを有することをサポートし得る（例えば、丸め動作制御フィールド１３５８のみを有し得る）。
【０１２７】
ＳＡＥフィールド１３５６−その内容は、例外イベント報告を無効にするかどうかを区別し、ＳＡＥフィールドの１３５６の内容が、抑制が有効にされることを指示する場合、所与の命令は、任意の種類の浮動小数点例外フラグを報告せず、任意の浮動小数点例外ハンドラを立てない。
【０１２８】
丸め動作制御フィールド１３５８−その内容は、一群の丸め動作（例えば、切り上げ、切り捨て、０の方への丸め、及び直近への丸め）のうちどの１つを実施するのかを区別する。したがって、丸め動作制御フィールド１３５８は、各命令ベースで、丸めモードの変更を可能にする。一実施形態では、プロセッサは、丸めモードを指定するための制御レジスタを含み、丸め動作制御フィールドの１３５０の内容は、そのレジスタ値をオーバーライドする。
【０１２９】
［メモリアクセス無し命令テンプレート−データ変換タイプ動作］
メモリアクセス無しデータ変換タイプ動作１３１５命令テンプレートにおいて、ベータフィールド１３５４は、データ変換フィールド１３５４Ｂとして解釈され、その内容は、いくらかのデータ変換のうちどの１つが実施されることになるのか（例えば、データ変換無し、スウィズル、ブロードキャスト）を区別する。
【０１３０】
クラスＡのメモリアクセス１３２０命令テンプレートの場合、アルファフィールド１３５２は、放逐ヒントフィールド１３５２Ｂとして解釈され、その内容は、放逐ヒントのうちどの１つが、使用されることになるのか（図１３Ａにおいて、時間的１３５２Ｂ．１及び非時間的１３５２Ｂ．２はそれぞれ、メモリアクセス、時間的１３２５命令テンプレート、及びメモリアクセス、非時間的１３３０命令テンプレートのために指定される）を区別する一方で、ベータフィールド１３５４は、データ操作フィールド１３５４Ｃとして解釈され、その内容は、いくらかのデータ操作動作（プリミティブとしても知られる）のうちどの１つが実施されることになるのか（例えば、操作無し、ブロードキャスト、ソースのアップ転換、及び宛先のダウン転換）を区別する。メモリアクセス１３２０命令テンプレートは、スケールフィールド１３６０、及び任意に変位フィールド１３６２Ａまたは変位スケールフィールド１３６２Ｂを含む。
【０１３１】
ベクトルメモリ命令は、転換サポートを用いて、メモリからのベクトルロード、及びメモリへのベクトル記憶を実施する。規則的なベクトル命令を用いるように、ベクトルメモリ命令は、データ要素単位の様式でメモリから／へデータを転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクの内容によって指令される。
【０１３２】
［メモリアクセス命令テンプレート−時間的］
時間的データは、キャッシュすることから裨益するのに十分早く再使用される可能性が高いデータである。しかしながら、これはヒントであり、異なるプロセッサは、該ヒントを完全に無視することを含め、それを異なる手段で実装し得る。
【０１３３】
［メモリアクセス命令テンプレート−非時間的］
非時間的データは、第一レベルのキャッシュにキャッシュすることから裨益するのに十分早く再使用される可能性が高くないデータであり、放逐のために優先されるべきである。しかしながら、これはヒントであり、異なるプロセッサは、該ヒントを完全に無視することを含め、これを異なる手段で実装され得る。
【０１３４】
［クラスＢの命令テンプレート］
クラスＢの命令テンプレートの場合、アルファフィールド１３５２は、書き込みマスク制御（Ｚ）フィールド１３５２Ｃとして解釈され、その内容は、書き込みマスクフィールド１３７０によって制御される書き込みマスキングが併合またはゼロ化のどちらであるべきかを区別する。
【０１３５】
クラスＢの非メモリアクセス１３０５命令テンプレートの場合、ベータフィールド１３５４の一部は、ＲＬフィールド１３５７Ａとして解釈され、その内容は、どの異なる増大動作タイプのうち１つが実施されることになるのか（例えば、丸め１３５７Ａ．１及びベクトル長（ＶＳＩＺＥ）１３５７Ａ．２は、それぞれ、メモリアクセス無し、書き込みマスク制御、部分的な丸め制御タイプ動作１３１２命令テンプレート、及びメモリアクセス無し、書き込みマスク制御、ＶＳＩＺＥタイプ動作１３１７命令テンプレートのために指定される）を区別する一方で、ベータフィールド１３５４の残りは、指定されたタイプのどの動作が実施されることになるのかを区別する。メモリアクセス無し１３０５命令テンプレートにおいて、スケールフィールド１３６０、変位フィールド１３６２Ａ、及び変位スケールフィールド１３６２Ｂは存在しない。
【０１３６】
メモリアクセス無し、書き込みマスク制御、部分的な丸め制御タイプ動作１３１０命令テンプレートにおいて、ベータフィールド１３５４の残りは、丸め動作フィールド１３５９Ａとして解釈され、例外イベント報告は無効にされる（所与の命令は、任意の種類の浮動小数点例外フラグを報告せず、任意の浮動小数点例外ハンドラを立てない）。
【０１３７】
丸め動作制御フィールド１３５９Ａ−ちょうど丸め動作制御フィールド１３５８のように、その内容は、一群の丸め動作（例えば、切り上げ、切り捨て、０の方への丸め、及び０の直近への丸め）のうちどの１つを実施するのかを区別する。したがって、丸め動作制御フィールド１３５９Ａは、各命令ベースで、丸めモードの変更を可能にする。一実施形態では、プロセッサは、丸めモードを指定するための制御レジスタを含み、丸め動作制御フィールドの１３５０の内容は、そのレジスタ値をオーバーライドする。
【０１３８】
メモリアクセス無し、書き込みマスク制御、ＶＳＩＺＥタイプ動作１３１７命令テンプレートにおいて、ベータフィールド１３５４の残りは、ベクトル長フィールド１３５９Ｂとして解釈され、その内容は、いくらかのデータベクトル長のうちどの１つが実施されることになるのか（例えば、１２８、２５６、または５１２バイト）を区別する。
【０１３９】
クラスＢのメモリアクセス１３２０命令テンプレートの場合、ベータフィールド１３５４の一部は、ブロードキャストフィールド１３５７Ｂとして解釈され、その内容は、ブロードキャストタイプデータ操作動作が実施されることになるのかを区別する一方で、ベータフィールド１３５４の残りは、ベクトル長フィールド１３５９Ｂとして解釈される。メモリアクセス１３２０命令テンプレートは、スケールフィールド１３６０、及び任意に変位フィールド１３６２Ａまたは変位スケールフィールド１３６２Ｂを含む。
【０１４０】
汎用ベクトルフレンドリー命令フォーマット１３００に関して、フォーマットフィールド１３４０、ベース動作フィールド１３４２、及びデータ要素幅フィールド１３６４を含むフルオペコードフィールド１３７４が示される。フルオペコードフィールド１３７４がこれらのフィールドのすべてを含む一実施形態が示される一方で、フルオペコードフィールド１３７４は、それらのすべてをサポートしない実施形態では、これらのフィールドのすべてより少ないものを含む。フルオペコードフィールド１３７４は、動作コード（オペコード）を提供する。
【０１４１】
増大動作フィールド１３５０、データ要素幅フィールド１３６４、及び書き込みマスクフィールド１３７０は、これらの特徴が、汎用ベクトルフレンドリー命令フォーマットにおいて、各命令ベースで指定されることを可能にする。
【０１４２】
書き込みマスクフィールド及びデータ要素幅フィールドの組み合わせは、マスクが異なるデータ要素幅に基づいて適用されることを可能にするので、型付けされた命令を作成する。
【０１４３】
クラスＡ及びクラスＢ内で見出される様々な命令テンプレートは、異なる状況において有益である。いくつかの実施形態では、プロセッサ内の異なるプロセッサまたは異なるコアは、クラスＡのみ、クラスＢのみ、または両方のクラスをサポートし得る。例えば、汎用コンピューティングのために意図された高性能汎用アウトオブオーダコアは、クラスＢのみをサポートし得、グラフィックス及び／またはサイエンティフィック（スループット）コンピューティングのために意図されたコアは、クラスＡのみをサポートし得、両方のために意図されたコアは、両方をサポートし得る（当然のことながら、両方のクラスからのテンプレート及び命令の何らかの混合を有するコアであるが、両方のクラスからのすべてのテンプレート及び命令が本発明の範囲内にあるわけではないコア）。また、単一のプロセッサは、複数のコアを含み得、それらのすべてが同じクラスをサポートするか、異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサにおいて、主にグラフィックス及び／またはサイエンティフィックコンピューティングのために意図されたグラフィックスコアのうち１つは、クラスＡのみをサポートし得る一方で、汎用コアのうち１または複数は、主にクラスＢのみをサポートする汎用コンピューティングのために意図されたアウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアであり得る。別個のグラフィックスコアを有しない別のプロセッサは、クラスＡとクラスＢとの両方をサポートする１または複数の汎用インオーダまたはアウトオブオーダコアを含み得る。当然のことながら、１つのクラスからの特徴は、また、異なる実施形態の他のクラスにおいて実装され得る。高レベル言語において書き込まれたプログラムは、（例えば、ジャストインタイムで、コンパイルされるか、静的にコンパイルされ）以下を含む様々な異なる実行可能な形態へと置かれるだろう。１）実行のためのターゲットプロセッサによってサポートされるクラス（複数可）の命令のみを有する形態、または２）すべてのクラスの命令の異なる組み合わせを使用して書き込まれる代替のルーチンを有し、かつ現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行するためのルーチンを選択する制御フローコードを有する形態。
【０１４４】
［例示的な固有ベクトルフレンドリー命令フォーマット］
図１４は、本発明の或る実施形態に従う、例示的な固有ベクトルフレンドリー命令フォーマットを図解するブロック図である。図１４は、それが、フィールドの位置、サイズ、解釈、及びオーダ、ならびにそれらのフィールドのいくつかのための値を指定するという意味で固有の、固有ベクトルフレンドリー命令フォーマット１４００を示す。固有ベクトルフレンドリー命令フォーマット１４００は、ｘ８６命令セットを拡張するために使用され得、したがって、フィールドのいくつかは、既存のｘ８６命令セット及びその拡張（例えば、ＡＶＸ）において使用されるものと類似しているか同じである。このフォーマットは、拡張を有する既存のｘ８６命令セットのプレフィックスエンコーディングフィールド、真のオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、及び即値フィールドと整合するままである。図１４のマップからのフィールドがマッピングする図１３からのフィールドが図解される。
【０１４５】
固有ベクトルフレンドリー命令フォーマット１４００を参照して、図解の目的のための汎用ベクトルフレンドリー命令フォーマット１３００のコンテキストにおいて、実施形態が記載されるが、本発明は、特許請求の範囲に記載される場合を除いて、固有ベクトルフレンドリー命令フォーマット１４００に限定されないことを理解されたい。例えば、汎用ベクトルフレンドリー命令フォーマット１３００は、様々なフィールドについての様々な可能なサイズを考慮する一方で、固有ベクトルフレンドリー命令フォーマット１４００は、具体的なサイズのフィールドを有するものとして示される。具体的な例として、データ要素幅フィールド１３６４は、固有ベクトルフレンドリー命令フォーマット１４００において、１ビットフィールドとして図解される一方で、本発明はそのように限定されない（つまり、汎用ベクトルフレンドリー命令フォーマット１３００は、データ要素幅フィールド１３６４の他のサイズを考慮する）。
【０１４６】
汎用ベクトルフレンドリー命令フォーマット１３００は、図１４Ａにおいて図解された順序で以下に一覧に示された以下のフィールドを含む。
【０１４７】
ＥＶＥＸプレフィックス（バイト０〜３）１４０２は、４バイト形態においてエンコードされる。
【０１４８】
フォーマットフィールド１３４０（ＥＶＥＸバイト０、ビット［７：０］）−第１のバイト（ＥＶＥＸバイト０）は、フォーマットフィールド１３４０であり、それは、０ｘ６２（本発明の一実施形態では、ベクトルフレンドリー命令フォーマットを区別するために使用される一意的な値）を含む。
【０１４９】
第２〜第４バイト（ＥＶＥＸバイト１〜３）は、具体的な可能性を提供するいくらかのビットフィールドを含む。
【０１５０】
ＲＥＸフィールド１４０５（ＥＶＥＸバイト１、ビット［７−５］）は、ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、及び１３５７ＢＥＸバイト１、ビット［５］−Ｂ）から成る。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能性を提供し、１の補数形を使用してエンコードされ、すなわち、ＺＭＭ０は１１１１Ｂとしてエンコードされ、ＺＭＭ１５は００００Ｂとしてエンコードされる。命令の他のフィールドは、当該技術分野において知られているレジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）をエンコードし、そのため、Ｒｒｒｒ、Ｘｘｘｘ、及びＢｂｂｂは、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂを追加することによって形成され得る。
【０１５１】
ＲＥＸ'フィールド１３１０−これは、ＲＥＸ'フィールド１３１０の第１部分であり、拡張された３２レジスタセットの上位１６または下位１６のどちらかをエンコードするために使用されるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。一実施形態では、このビットは、以下に指示されるような他のものと共に、（周知のｘ８６  ３２ビットモードにおいて）その真のオペコードバイトは６２であるＢＯＵＮＤ命令から区別するためにビット反転したフォーマットに記憶されるが、ＭＯＤフィールドにおいて、ＭＯＤ  Ｒ／Ｍフィールド（以下に記載）中の値１１を受け入れず、代替の実施形態は、これ及び他の以下に指示されたビットをフォーマットで記憶しない。値１は、下位１６レジスタをエンコードするために使用される。言い換えると、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、及び他のフィールドからの他のＲＲＲを組み合わせることにより形成される。
【０１５２】
オペコードマップフィールド１４１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−その内容は、含意される先頭オペコードバイト（０Ｆ、０Ｆ３８、または０Ｆ３）をエンコードする。
【０１５３】
データ要素幅フィールド１３６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）は、ＥＶＥＸ．Ｗという表記法によって表される。ＥＶＥＸ．Ｗは、データタイプ（３２ビットデータ要素または６４ビットデータ要素のどちらか）の粒度（サイズ）を定義するために使用される。
【０１５４】
ＥＶＥＸ．ｖｖｖｖ１４２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割は以下を含み得る。１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形において指定された第１のソースレジスタオペランドをエンコードし、２以上のソースオペランドを有する命令に対して有効であり、２）ＥＶＥＸ．ｖｖｖｖは、或る特定のベクトルシフトに対して１の補数形において指定された宛先レジスタオペランドをエンコードし、または３）ＥＶＥＸ．ｖｖｖｖは、任意のオペランドをエンコードせず、フィールドはリザーブされ、１１１１ｂを含むべきである。したがって、ＥＶＥＸ．ｖｖｖｖフィールド１４２０は、反転（１の補数）形において記憶された第１のソースレジスタ指定子の４低オーダビットをエンコードする。命令に従って、余分の異なるＥＶＥＸビットフィールドは、指定子サイズを３２レジスタに拡張するために使用される。
【０１５５】
ＥＶＥＸ．Ｕ１３６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０の場合、それはクラスＡまたはＥＶＥＸ．Ｕ０を指示し、ＥＶＥＸ．Ｕ＝１の場合、それはクラスＢまたはＥＶＥＸ．Ｕ１を指示する。
【０１５６】
プレフィックスエンコーディングフィールド１４２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）は、ベース動作フィールドのために追加のビットを提供する。ＥＶＥＸプレフィックスフォーマット中のレガシーＳＳＥ命令のためにサポートを提供することに加えて、これは、また、ＳＩＭＤプレフィックスをコンパクトにする利点を有する（ＥＶＥＸプレフィックスは、ＳＩＭＤプレフィックスを表現するためのバイトを要求するのではなく、２ビットのみを要求する）。一実施形態では、レガシーフォーマットとＥＶＥＸプレフィックスフォーマットとの両方において、ＳＩＭＤプレフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用するレガシーＳＳＥ命令をサポートするために、これらのレガシーＳＩＭＤプレフィックスは、ＳＩＭＤプレフィックスエンコーディングフィールドへとエンコードされ、及びデコーダのＰＬＡに提供される前に、ランタイムにおいて、レガシーＳＩＭＤプレフィックスへと展開される（それ故、ＰＬＡは、修正無しで、これらのレガシー命令のレガシーとＥＶＥＸフォーマットとの両方を実行し得る）。より新しい命令が、直接的にオペコード拡張として、ＥＶＥＸプレフィックスエンコーディングフィールドの内容を使用し得るが、或る特定の実施形態は、一貫性について類似の様式で展開するが、異なる意味が、これらのレガシーＳＩＭＤプレフィックスによって指定されることを可能にする。代替の実施形態は、２ビットＳＩＭＤプレフィックスエンコーディングをサポートするようにＰＬＡを再設計し得、したがって展開を要求しない。
【０１５７】
アルファフィールド１３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書き込みマスク制御、及びＥＶＥＸ．Ｎとしても知られ、また、αと共に図解された）−前述のように、このフィールドコンテキスト固有である。
【０１５８】
ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒｌ、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、また、βββと共に図解された）−前述のように、このフィールドはコンテキスト固有である。
【０１５９】
ＲＥＸ'フィールド１３１０−これは、ＲＥＸ'フィールドの剰余であり、拡張された３２レジスタセットの上位１６または下位１６のどちらかをエンコードするために使用され得るＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットは、ビット反転フォーマットにおいて記憶される。値１は、下位１６レジスタをエンコードするために使用される。言い換えると、Ｖ'ＶＶＶＶは、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることによって形成される。
【０１６０】
書き込みマスクフィールド１３７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−その内容は、前述のように、書き込みマスクレジスタにおいて、レジスタのインデックスを指定する。一実施形態では、具体的な値ＥＶＥＸ．ｋｋｋ＝０００は、書き込みマスクが特定の命令のために使用されないことを含意する特別な振る舞いを有する（これは、すべてのものにハードワイヤードな書き込みマスク、またはマスキングハードウェアをバイパスするハードウェアの使用を含む様々な手段において、実装され得る）。
【０１６１】
真のオペコードフィールド１４３０（バイト４）は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内で指定される。
【０１６２】
ＭＯＤ  Ｒ／Ｍフィールド１４４０（バイト５）は、ＭＯＤフィールド１４４２、Ｒｅｇフィールド１４４４、及びＲ／Ｍフィールド１４４６を含む。前述のように、ＭＯＤフィールドの１４４２の内容は、メモリアクセスと非メモリアクセス動作との間で区別する。Ｒｅｇフィールド１４４４の役割は、２つの状況に要約され得る。宛先レジスタオペランドまたはソースレジスタオペランドのどちらかをエンコードするか、オペコード拡張として取り扱われ、任意の命令オペランドをエンコードするために使用されない。Ｒ／Ｍフィールド１４４６の役割は、以下を含み得る。メモリアドレスを参照する命令オペランドをエンコードするか、または宛先レジスタオペランドまたはソースレジスタオペランドのどちらかをエンコードする。
【０１６３】
スケール、インデックス、ベース（ＳＩＢ：Ｓｃａｌｅ，Ｉｎｄｅｘ，Ｂａｓｅ）バイト（バイト６）−前述のように、スケールフィールドの１３５０の内容は、メモリアドレス生成について使用される。ＳＩＢ．ｘｘｘ１４５４及びＳＩＢ．ｂｂｂ１４５６−これらのフィールドの内容は、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関して以前に参照された。
【０１６４】
変位フィールド１３６２Ａ（バイト７〜１０）−ＭＯＤフィールド１４４２が１０を含む場合、バイト７〜１０は変位フィールド１３６２Ａであり、それは、レガシー３２ビット変位（ｄｉｓｐ３２）と同じように働き、バイト粒度において働く。
【０１６５】
変位因子フィールド１３６２Ｂ（バイト７）−ＭＯＤフィールド１４４２が０１を含む場合、バイト７は変位因子フィールド１３６２Ｂである。このフィールドの位置は、レガシーｘ８６命令セット８ビット変位（ｄｉｓｐ８）と同じものであり、それは、バイト粒度で働く。ｄｉｓｐ８が符号拡張されるので、それは、−１２８及び１２７バイトオフセットの間のみ、アドレス指定する。また、６４バイトキャッシュ行の観点から、ｄｉｓｐ８は、４つの真に有用な値−１２８、−６４、０、及び６４のみに設定され得る８ビットを使用する。より大きな範囲が多くの場合必要とされるので、ｄｉｓｐ３２が使用される。しかしながら、ｄｉｓｐ３２は４バイトを要求する。ｄｉｓｐ８及びｄｉｓｐ３２と対照的に、変位因子フィールド１３６２Ｂはｄｉｓｐ８の再解釈である。変位因子フィールド１３６２Ｂを使用する場合、実際の変位は、メモリオペランドアクセス（Ｎ）のサイズを乗算した変位因子フィールドの内容によって判定されるこのタイプの変位はｄｉｓｐ８＊Ｎと称される。これは、平均命令長（単一のバイトが、変位のために使用されるが、はるかに大きな範囲で使用される）を減少させる。そのような圧縮された変位は、効果的な変位がメモリアクセスの複数の粒度の倍数であり、よってアドレスオフセットの冗長な低位オーダビットがエンコードされる必要がないという前提に基づく。言い換えると、変位因子フィールド１３６２Ｂは、レガシーｘ８６命令セット８ビット変位を代用する。したがって、変位因子フィールド１３６２Ｂは、ｘ８６命令セット８ビット変位と同じ手段でエンコードされ（それ故に、ＭｏｄＲＭ／ＳＩＢエンコーディング規則における変更が無く）、唯一の例外が、ｄｉｓｐ８が、ｄｉｓｐ８＊Ｎに対して過負荷されることである。言い換えると、エンコーディング規則またはエンコーディング長において変更が無いが、変更は、ハードウェアによる変位値の解釈においてのみである（メモリオペランドのサイズによって変位をスケール変更して、バイト単位のアドレスオフセットを得る必要がある）。
【０１６６】
即値フィールド１３７２は、前述のように動作する。
【０１６７】
［フルオペコードフィールド］
図１４Ｂは、一実施形態に従うフルオペコードフィールド１３７４を作り上げる固有ベクトルフレンドリー命令フォーマット１４００のフィールドを図解するブロック図である。具体的には、フルオペコードフィールド１３７４は、フォーマットフィールド１３４０、ベース動作フィールド１３４２、及びデータ要素幅（Ｗ）フィールド１３６４を含む。ベース動作フィールド１３４２は、プレフィックスエンコーディングフィールド１４２５、オペコードマップフィールド１４１５、及び真のオペコードフィールド１４３０を含む。
【０１６８】
［レジスタインデックスフィールド］
図１４Ｃは、一実施形態に従うレジスタインデックスフィールド１３４４を作り上げる固有ベクトルフレンドリー命令フォーマット１４００のフィールドを図解するブロック図である。具体的には、レジスタインデックスフィールド１３４４は、ＲＥＸフィールド１４０５、ＲＥＸ'フィールド１４１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１４４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１４４６、ＶＶＶＶフィールド１４２０、ｘｘｘフィールド１４５４、及びｂｂｂフィールド１４５６を含む。
【０１６９】
［増大動作フィールド］
図１４Ｄは、一実施形態に従う増大動作フィールド１３５０を作り上げる固有ベクトルフレンドリー命令フォーマットの１４００のフィールドを図解するブロック図である。クラス（Ｕ）フィールド１３６８が０を含む場合、それはＥＶＥＸ．Ｕ０（クラスＡ１３６８Ａ）を意味し、それが１を含む場合、それはＥＶＥＸ．Ｕ１（クラスＢ１３６８Ｂ）を意味する。Ｕ＝０、かつＭＯＤフィールド１４４２が１１（メモリアクセス無し動作を意味する）を含む場合、アルファフィールド１３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド１３５２Ａとして解釈される。ｒｓフィールド１３５２Ａが、１（丸め１３５２Ａ．１）を含む場合、ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、丸め制御フィールド１３５４Ａとして解釈される。丸め制御フィールド１３５４Ａは、１ビットＳＡＥフィールド１３５６及び２ビット丸め動作フィールド１３５８を含む。ｒｓフィールド１３５２Ａは、０（データ変換１３５２Ａ．２）を含む場合、ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットデータ変換フィールド１３５４Ｂとして解釈される。Ｕ＝０、かつＭＯＤフィールド１４４２が、００、０１、または１０（メモリアクセス動作を意味する）を含む場合、アルファフィールド１３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、放逐ヒント（ＥＨ）フィールド１３５２Ｂとして解釈され、ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットデータ操作フィールド１３５４Ｃとして解釈される。
【０１７０】
Ｕ＝１の場合、アルファフィールド１３５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、書き込みマスク制御（Ｚ）フィールド１３５２Ｃとして解釈される。Ｕ＝１、かつＭＯＤフィールド１４４２が、１１（メモリアクセス無し動作を意味する）を含む場合、ベータフィールド１３５４の一部（ＥＶＥＸバイト３、ビット［４］−Ｓ０）は、ＲＬフィールド１３５７Ａとして解釈され、それが１（丸め１３５７Ａ．１）を含む場合、ベータフィールド１３５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は、丸め動作フィールド１３５９Ａとして解釈される一方で、ＲＬフィールド１３５７Ａが０（ＶＳＩＺＥ１３５７Ａ．２）を含む場合、ベータフィールド１３５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は、ベクトル長フィールド１３５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１、かつＭＯＤフィールド１４４２が００、０１、または１０（メモリアクセス動作を意味する）を含む場合、ベータフィールド１３５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド１３５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）及びブロードキャストフィールド１３５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【０１７１】
［例示的なレジスタアーキテクチャ］
図１５は、一実施形態に従う、レジスタアーキテクチャ１５００のブロック図である。図解された実施形態では、５１２ビット幅である３２ベクトルレジスタ１５１０が存在し、これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１として参照される。下位１６ｚｍｍレジスタの下位オーダ２５６ビットは、レジスタｙｍｍ０−１６上でオーバーレイされる。下位１６ｚｍｍレジスタの下位オーダ１２８ビット（ｙｍｍレジスタの下位オーダ１２８ビット）は、レジスタｘｍｍ０−１５上でオーバーレイされる。固有ベクトルフレンドリー命令フォーマット１４００は、下の表５に図解されるように、これらのオーバーレイされたレジスタ上で動作する。
【表５】
2018500657.tif 000007
【０１７２】
言い換えると、ベクトル長フィールド１３５９Ｂは、最大長さ及び１または複数の他のより短い長さの間で選択し、各々のそのようなより短い長さは、先行する長さの半分の長さであり、ベクトル長フィールド１３５９Ｂを有しない命令テンプレートは、最大ベクトル長上で動作する。さらに、一実施形態では、固有ベクトルフレンドリー命令フォーマット１４００のクラスＢ命令テンプレートは、パックまたはスカラ単一／倍精度浮動小数点データ及びパックまたはスカラ整数データ上で動作する。スカラ動作は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最低のオーダデータ要素位置に対して実施される動作であり、より高いオーダデータ要素位置は、それらが命令の前の状態か、または実施形態に従うゼロ化の状態のままかのどちらかにされる。
【０１７３】
書き込みマスクレジスタ１５１５−図解された実施形態では、８つの書き込みマスクレジスタ（ｋ０〜ｋ７）が存在し、サイズが各６４ビットである。代替の実施形態では、書き込みマスクレジスタ１５１５は、サイズが１６ビットである。前述のように、一実施形態では、ベクトルマスクレジスタｋ０は、書き込みマスクとして使用され得ず、ｋ０が書き込みマスクのために使用されることを通常指示するであろうことをエンコードする場合、それは、０ｘＦＦＦＦのハードワイヤード書き込みマスクを選択し、効果的にその命令に対する書き込みマスキングを無効にする。
【０１７４】
汎用レジスタ１５２５−図解された実施形態では、アドレスメモリオペランドへの既存のｘ８６アドレス指定モードと共に使用される１６の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８〜Ｒ１５のネームによって参照される。
【０１７５】
ＭＭＸパック整数フラットレジスタファイル１５５０が上でエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１５４５、−図解された実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を使用して、３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点動作を実施するために使用される８要素のスタックである一方で、ＭＭＸレジスタは、６４ビットパック整数データ上で動作を実施して、ならびにＭＭＸ及びＸＭＭレジスタの間で実施されるいくつかの動作のためにオペランドを保持するために使用される。
【０１７６】
代替の実施形態は、より広いまたはより狭いレジスタを使用し得る。追加として、代替の実施形態は、より多い、より少ない、または異なるレジスタファイル及びレジスタを使用し得る。
【０１７７】
一実施形態では、本明細書に記載される命令は、或る特定の動作を実施するように構成されるか、所定の機能性を有する特定用途向け集積回路（ＡＳＩＣ）等のハードウェアの具体的な構成を指す。そのような電子デバイスは、例示的には、１または複数の記憶デバイス（非一時的機械可読記憶媒体）、ユーザ入力出力デバイス（例えば、キーボード、タッチスクリーン、及び／または表示）、及びネットワーク接続等の１または複数の他のコンポーネントに結合された１または複数のプロセッサのセットを含む。プロセッサのセット及び他のコンポーネントの結合は、例示的には、１または複数のバス及びブリッジ（バスコントローラとも命名される）を通してのものである。ネットワークトラフィックを搬送する記憶デバイス及び信号はそれぞれ、１または複数の機械可読記憶媒体及び機械可読通信媒体を表す。したがって、所与の電子デバイスの記憶デバイスは、例示的には、その電子デバイスの１または複数のプロセッサのセットへの実行のために、コード及び／またはデータを記憶する。
【０１７８】
前述の明細書では、本発明は、その具体的な例示的な実施形態を参照して記載された。しかしながら、様々な修正及び変更が、添付の特許請求の範囲に記載された本発明のより広範な精神及び範囲から逸脱することなく、それらに対して行われ得ることは、明白であろう。或る特定の例では、周知の構造及び機能は、本発明の主題を不明瞭にすることを回避するために、精巧な詳細において記載されなかった。したがって、明細書及び図面は、制限的な意味ではなく、例示的な意味においてみなされるべきである。したがって、本発明の範囲及び精神は、続く特許請求の範囲の用語において判断されるべきである。
【図１Ａ】
2018500657.tif 000008
【図１Ｂ】
2018500657.tif 000009
【図２Ａ】
2018500657.tif 000010
【図２Ｂ】
2018500657.tif 000011
【図３】
2018500657.tif 000012
【図４】
2018500657.tif 000013
【図５】
2018500657.tif 000014
【図６】
2018500657.tif 000015
【図７】
2018500657.tif 000016
【図８】
2018500657.tif 000017
【図９Ａ】
2018500657.tif 000018
【図９Ｂ】
2018500657.tif 000019
【図１０Ａ】
2018500657.tif 000020
【図１０Ｂ】
2018500657.tif 000021
【図１１】
2018500657.tif 000022
【図１２】
2018500657.tif 000023
【図１３Ａ】
2018500657.tif 000024
【図１３Ｂ】
2018500657.tif 000025
【図１４Ａ】
2018500657.tif 000026
【図１４Ｂ】
2018500657.tif 000027
【図１４Ｃ】
2018500657.tif 000028
【図１４Ｄ】
2018500657.tif 000029
【図１５】
2018500657.tif 000030
【手続補正書】
【提出日】平成29年7月25日(2017.7.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１のオペランド及び第２のオペランドを含むデコードされた融合命令へと融合命令をデコードするためのデコードロジックと、
前記デコードされた融合命令を実行して、単一の機械レベルマクロ命令として、インクリメント動作、比較動作、及びジャンプ動作を実施するための実行ユニットと、を備える、処理装置。
【請求項２】
前記融合命令をフェッチするための命令フェッチユニットと、
前記第１のオペランドまたは前記第２のオペランドによって指定されたレジスタに、前記インクリメント動作の結果をコミットするためのレジスタファイルユニットと、をさらに備える、請求項１に記載の処理装置。
【請求項３】
前記実行ユニットが、
前記インクリメント動作及び前記比較動作を実施するための算術ロジックユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ  ｌｏｇｉｃ  ｕｎｉｔ）と、
前記ジャンプ動作を実施するためのジャンプ実行ユニットと、を備える、請求項１に記載の処理装置。
【請求項４】
前記第１のオペランド及び前記第２のオペランドが、前記比較動作と関連付けられ、前記第１のオペランドまたは前記第２のオペランドのうち１つが、前記インクリメント動作と関連付けられる、請求項１に記載の処理装置。
【請求項５】
前記デコードされた融合命令が、前記ジャンプ動作と関連付けられたジャンプターゲットオペランドを追加として含む、請求項４に記載の処理装置。
【請求項６】
前記実行ユニットがさらに、単一のサイクルにおいて、前記インクリメント動作、前記比較動作、及び前記ジャンプ動作を実行する、請求項５に記載の処理装置。
【請求項７】
前記ジャンプ動作が、前記比較動作を条件にする、請求項５に記載の処理装置。
【請求項８】
前記ジャンプ動作が、前記比較動作によって設定されたゼロフラグを条件にする、請求項７に記載の処理装置。
【請求項９】
前記ジャンプ動作が、前記比較動作によって設定された桁上げフラグを条件にする、請求項７に記載の処理装置。
【請求項１０】
前記ジャンプ動作が、前記比較動作によって設定されたオーバーフローフラグを条件にする、請求項７に記載の処理装置。
【請求項１１】
前記ジャンプ動作が、前記比較動作によって設定された符号フラグを条件にする、請求項７に記載の処理装置。
【請求項１２】
単一のマクロ命令へと複数のマクロ命令を融合するための方法であって、
インクリメント命令、比較命令、及びジャンプ命令を含む命令シーケンスについて、第１のソースコードブロックをスキャンすることと、
前記命令シーケンスを検出した後に、データ依存性について前記命令シーケンスをスキャンすることと、
前記命令シーケンスにおいてコード断片を順序変更することと、
インクリメント命令、比較命令、及びジャンプ命令のセットを、プロセッサによって実行される場合に、前記プロセッサに、インクリメント動作、比較動作、及びジャンプ動作を実施させるという単一の融合命令と置き換えることと、を含む、方法。
【請求項１３】
前記プロセッサが、単一のプロセッサパイプライン実行サイクルにおいて、前記単一の融合命令を実行する、請求項１２に記載の方法。
【請求項１４】
前記プロセッサが、算術ロジックユニット（ＡＬＵ）を使用して前記インクリメント命令及び前記比較命令と関連付けられた第１のオペランド及び第２のオペランドの比較動作を実施する一方で、前記ＡＬＵへの桁上げ入力をアサートすることにより前記第１のオペランドまたは前記第２のオペランドをインクリメントすることによって、前記単一のプロセッサパイプライン実行サイクルにおいて前記単一の融合命令を実施する、請求項１３に記載の方法。
【請求項１５】
前記プロセッサ内でジャンプ実行ユニットを使用して前記比較動作によって前記ＡＬＵから出力されたフラグを評価して、前記ジャンプ動作が実施されることになるかどうかを判定することをさらに含む、請求項１４に記載の方法。
【請求項１６】
前記プロセッサが、分岐予測プロセッサであり、
前記ジャンプ命令と関連付けられた分岐が実行されることになることを予測することと、
前記単一の融合命令の前記ジャンプ動作が実行されるかどうかを判定することと、
前記ジャンプ命令について予測された前記分岐を解決することと、をさらに含む、請求項１５に記載の方法。
【請求項１７】
請求項１２〜１６のいずれか１項に記載の方法を実施するための手段を備えるシステム。
【請求項１８】
１または複数のプロセッサによって実行される場合に、前記１または複数のプロセッサに、請求項１２〜１６のいずれか１項に記載の方法を含む動作を実施させるための、コンピュータプログラム。
【請求項１９】
融合されたマクロ命令の実施方法であって、
第１のオペランド及び第２のオペランドを含むデコードされた融合命令へと融合命令をデコードすることと、
前記デコードされた融合命令を実行して、単一の機械レベルマクロ命令として、インクリメント動作、比較動作、及びジャンプ動作を実施することと、を含む、方法。
【請求項２０】
単一の実行サイクルにおいて、前記デコードされた融合命令を実行することをさらに含む、請求項１９に記載の方法。
【請求項２１】
前記インクリメント動作、前記比較動作、及び前記ジャンプ動作の結果に基づいて、次の命令ポインタを更新することをさらに含む、請求項１９に記載の方法。
【請求項２２】
前記第１のオペランドまたは前記第２のオペランドによって指示されたレジスタに、前記インクリメント動作の結果をコミットすることをさらに含む、請求項１９に記載の方法。
【請求項２３】
前記ジャンプ動作の結果に基づいて、分岐予測を解決することをさらに含む、請求項１９に記載の方法。
【請求項２４】
少なくとも１つの機械によって実施される場合に、前記少なくとも１つの機械に、請求項１９〜２３のいずれか１項に記載の方法を含む動作を実施する少なくとも１つの集積回路をファブリケートさせるための、コンピュータプログラム。
【請求項２５】
請求項１８または２４に記載のコンピュータプログラムを記憶する、コンピュータ可読記録媒体。
【国際調査報告】
2018500657.tif 000031
2018500657.tif 000032