(57)【特許請求の範囲】
【請求項１】
命令をデコードするためのハードウェアデコーダであって、前記命令はオペコードを含む、ハードウェアデコーダと、
前記デコードされた命令を実行するための実行ハードウェアであって、前記デコードされた命令に応じて、投機的メモリアクセスを追跡するためのデータ投機的実行（ＤＳＸ）追跡ハードウェアがリセットされ、ＤＳＸ状態レジスタ内のＤＳＸ状態指標がクリアされ、ＤＳＸ領域のすべての投機的に実行されたストアがコミットされ、それにより前記ＤＳＸ領域が終了する、実行ハードウェアと、を備え、
前記実行ハードウェアはさらに、ＲＴＭ（Ｒｅｓｔｒｉｃｔｅｄ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ）トランザクションが発生していることを判断し且つ前記ＲＴＭトランザクションを終了させる、装置。
【請求項２】
命令をデコードするためのハードウェアデコーダであって、前記命令はオペコードを含む、ハードウェアデコーダと、
前記デコードされた命令を実行するための実行ハードウェアであって、前記デコードされた命令に応じて、投機的メモリアクセスを追跡するためのデータ投機的実行（ＤＳＸ）追跡ハードウェアがリセットされ、ＤＳＸ状態レジスタ内のＤＳＸ状態指標がクリアされ、ＤＳＸ領域のすべての投機的に実行されたストアがコミットされ、それにより前記ＤＳＸ領域が終了する、実行ハードウェアと、を備え、
前記ＤＳＸ領域において、ストアはバッファリングされ、ロードはバッファリングされない、装置。
【請求項３】
前記命令は、ＤＳＸ状態レジスタオペランドを含む、請求項１または２に記載の装置。
【請求項４】
前記実行ハードウェアは、前記ＤＳＸ領域を終了させる前に、ＤＳＸがアクティブであることを判断する、請求項１から３のいずれか一項に記載の装置。
【請求項５】
前記実行ハードウェアは、ＤＳＸがアクティブでないことを判断し且つエラーを生成する、請求項１から３のいずれか一項に記載の装置。
【請求項６】
対応するＤＳＸ領域の終了を備えていないＤＳＸ領域の開始の数に対応する値を格納するためのＤＳＸネストカウンタをさらに備える、請求項１から５のいずれか一項に記載の装置。
【請求項７】
前記実行ハードウェアは、ＤＳＸネストカウンタの値がゼロに等しいことを判断し且つ処理を実行しない、請求項１から６のいずれか一項に記載の装置。
【請求項８】
ハードウェアデコーダを使用して、命令をデコードする段階であって、前記命令はオペコードを含む、デコードする段階と、
前記デコードされた命令を実行する段階であって、前記デコードされた命令に応じて、投機的メモリアクセスを追跡するためのデータ投機的実行（ＤＳＸ）追跡ハードウェアがリセットされ、ＤＳＸ状態レジスタ内のＤＳＸ状態指標がクリアされ、ＤＳＸ領域のすべての投機的に実行されたストアがコミットされ、それにより前記ＤＳＸ領域が終了する、実行する段階と、を備え、
ＲＴＭ（Ｒｅｓｔｒｉｃｔｅｄ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ）トランザクションが発生していることを判断し且つ前記ＲＴＭトランザクションを終了させる段階をさらに備える、方法。
【請求項９】
ハードウェアデコーダを使用して、命令をデコードする段階であって、前記命令はオペコードを含む、デコードする段階と、
前記デコードされた命令を実行する段階であって、前記デコードされた命令に応じて、投機的メモリアクセスを追跡するためのデータ投機的実行（ＤＳＸ）追跡ハードウェアがリセットされ、ＤＳＸ状態レジスタ内のＤＳＸ状態指標がクリアされ、ＤＳＸ領域のすべての投機的に実行されたストアがコミットされ、それにより前記ＤＳＸ領域が終了する、実行する段階と、を備え、
前記ＤＳＸ領域において、ストアはバッファリングされ、ロードはバッファリングされない、方法。
【請求項１０】
前記命令は、ＤＳＸ状態レジスタオペランドを含む、請求項８または９に記載の方法。
【請求項１１】
前記ＤＳＸ領域を終了させる前に、ＤＳＸがアクティブであることを判断する段階をさらに備える、請求項８から１０のいずれか一項に記載の方法。
【請求項１２】
ＤＳＸがアクティブでないことを判断し且つエラーを生成する段階をさらに備える、請求項８から１０のいずれか一項に記載の方法。
【請求項１３】
対応するＤＳＸ領域の終了を備えていないＤＳＸ領域の開始の数に対応する値を格納する段階をさらに備える、請求項８から１２のいずれか一項に記載の方法。
【請求項１４】
ＤＳＸネストカウンタの値がゼロに等しいことを判断し且つ処理を実行しない段階をさらに備える、請求項８から１３のいずれか一項に記載の方法。
【請求項１５】
コンピュータに、回路を生成する手順を実行させるためのプログラムであって、前記回路は、
命令をデコードするためのハードウェアデコーダであって、前記命令はオペコードを含む、ハードウェアデコーダと、
前記デコードされた命令を実行するための実行ハードウェアであって、前記デコードされた命令に応じて、投機的メモリアクセスを追跡するためのデータ投機的実行（ＤＳＸ）追跡ハードウェアがリセットされ、ＤＳＸ状態レジスタ内のＤＳＸ状態指標がクリアされ、ＤＳＸ領域のすべての投機的に実行されたストアがコミットされ、それにより前記ＤＳＸ領域が終了する、実行ハードウェアと、を含み、
前記実行ハードウェアはさらに、ＲＴＭ（Ｒｅｓｔｒｉｃｔｅｄ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ）トランザクションが発生していることを判断し且つ前記ＲＴＭトランザクションを終了させる、プログラム。
【請求項１６】
コンピュータに、回路を生成する手順を実行させるためのプログラムであって、前記回路は、
命令をデコードするためのハードウェアデコーダであって、前記命令はオペコードを含む、ハードウェアデコーダと、
前記デコードされた命令を実行するための実行ハードウェアであって、前記デコードされた命令に応じて、投機的メモリアクセスを追跡するためのデータ投機的実行（ＤＳＸ）追跡ハードウェアがリセットされ、ＤＳＸ状態レジスタ内のＤＳＸ状態指標がクリアされ、ＤＳＸ領域のすべての投機的に実行されたストアがコミットされ、それにより前記ＤＳＸ領域が終了する、実行ハードウェアと、を含み、
前記ＤＳＸ領域において、ストアはバッファリングされ、ロードはバッファリングされない、プログラム。
【請求項１７】
前記命令は、ＤＳＸ状態レジスタオペランドを含む、請求項１５または１６に記載のプログラム。
【請求項１８】
前記実行ハードウェアは、前記ＤＳＸ領域を終了させる前に、ＤＳＸがアクティブであることを判断する、請求項１５から１７のいずれか一項に記載のプログラム。
【請求項１９】
前記実行ハードウェアは、ＤＳＸがアクティブでないことを判断し且つエラーを生成する、請求項１５から１７のいずれか一項に記載のプログラム。
【請求項２０】
請求項１５から１９のいずれか一項に記載のプログラムを格納したコンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の技術分野は概して、コンピュータプロセッサアーキテクチャに関し、より具体的には投機的実行に関する。
【背景技術】
【０００２】
イタレーション間の依存関係を含む可能性のあるループのベクトル化は、難しいことで有名である。以下に、このタイプの例示的なループを示す。
【数１】
0006687232.tif 000002
【０００３】
以下に、このループの単純な（および正しくない）ベクトル化を示す。
【数２】
0006687232.tif 000003
【０００４】
しかしながら、ループのベクトル化されたバージョンを生成するコンパイラが、Ａ、ＢおよびＣのアドレスまたは配置に関する事前知識を有していない場合、上記のベクトル化は安全ではない。
【図面の簡単な説明】
【０００５】
本発明は、添付図面中に、限定ではなく例示として示されており、同様の参照符号は類似の要素を示す。
【０００６】
【図１】データ投機拡張（ＤＳＸ）をハードウェアで実行可能なプロセッサコアの一実施形態の例示的なブロック図である。
【０００７】
【図２】一実施形態による、投機的命令実行の一例を示す。
【０００８】
【図３】ＤＳＸ追跡ハードウェアの具体的な実施形態を示す。
【０００９】
【図４】ＤＳＸ追跡ハードウェアによって実行されるＤＳＸ投機ミス検出の例示的な方法を示す。
【００１０】
【図５（Ａ）】ＤＳＸ追跡ハードウェアによって実行されるＤＳＸ投機ミス検出の例示的な方法を示す。
【図５（Ｂ）】ＤＳＸ追跡ハードウェアによって実行されるＤＳＸ投機ミス検出の例示的な方法を示す。
【００１１】
【図６】ＤＳＸを開始する命令の実行に係る一実施形態を示す。
【００１２】
【図７】ＹＢＥＧＩＮ命令フォーマットのいくつかの例示的な実施形態を示す。
【００１３】
【図８】ＹＢＥＧＩＮ命令等の命令の実行に係る詳細な実施形態を示す。
【００１４】
【図９】ＹＢＥＧＩＮ命令等の命令の実行を示す擬似コードの例を示す。
【００１５】
【図１０】ＤＳＸを開始する命令の実行に係る一実施形態を示す。
【００１６】
【図１１】ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令フォーマットのいくつかの例示的な実施形態を示す。
【００１７】
【図１２】ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令等の命令の実行に係る詳細な実施形態を示す。
【００１８】
【図１３】ＤＳＸを終了させずに、ＤＳＸを続行する命令の実行に係る一実施形態を示す。
【００１９】
【図１４】ＹＣＯＮＴＩＮＵＥ命令フォーマットのいくつかの例示的な実施形態を示す。
【００２０】
【図１５】ＹＣＯＮＴＩＮＵＥ命令等の命令の実行に係る詳細な実施形態を示す。
【００２１】
【図１６】ＹＣＯＮＴＩＮＵＥ命令等の命令の実行を示す擬似コードの例を示す。
【００２２】
【図１７】ＤＳＸをアボートする命令の実行に係る一実施形態を示す。
【００２３】
【図１８】ＹＡＢＯＲＴ命令フォーマットのいくつかの例示的な実施形態を示す。
【００２４】
【図１９】ＹＡＢＯＲＴ命令等の命令の実行に係る詳細な実施形態を示す。
【００２５】
【図２０】ＹＡＢＯＲＴ命令等の命令の実行を示す擬似コードの例を示す。
【００２６】
【図２１】ＤＳＸの状態をテストする命令の実行に係る一実施形態を示す。
【００２７】
【図２２】ＹＴＥＳＴ命令フォーマットのいくつかの例示的な実施形態を示す。
【００２８】
【図２３】ＹＴＥＳＴ命令等の命令の実行を示す擬似コードの例を示す。
【００２９】
【図２４】ＤＳＸを終了させる命令の実行に係る一実施形態を示す。
【００３０】
【図２５】ＹＥＮＤ命令フォーマットのいくつかの例示的な実施形態を示す。
【００３１】
【図２６】ＹＥＮＤ命令等の命令の実行に係る詳細な実施形態を示す。
【００３２】
【図２７】ＹＥＮＤ命令等の命令の実行を示す擬似コードの例を示す。
【００３３】
【図２８Ａ】本発明の実施形態による、汎用ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。
【図２８Ｂ】本発明の実施形態による、汎用ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。
【００３４】
【図２９Ａ】特定ベクトル向け命令フォーマット２９００を示す。特定ベクトル向け命令フォーマット２９００は、フィールドの場所、サイズ、解釈および順序に加え、これらのフィールドの一部の値を指定するという意味において特定的である。
【図２９Ｂ】特定ベクトル向け命令フォーマット２９００を示す。特定ベクトル向け命令フォーマット２９００は、フィールドの場所、サイズ、解釈および順序に加え、これらのフィールドの一部の値を指定するという意味において特定的である。
【図２９Ｃ】特定ベクトル向け命令フォーマット２９００を示す。特定ベクトル向け命令フォーマット２９００は、フィールドの場所、サイズ、解釈および順序に加え、これらのフィールドの一部の値を指定するという意味において特定的である。
【図２９Ｄ】特定ベクトル向け命令フォーマット２９００を示す。特定ベクトル向け命令フォーマット２９００は、フィールドの場所、サイズ、解釈および順序に加え、これらのフィールドの一部の値を指定するという意味において特定的である。
【００３５】
【図３０】本発明の一実施形態によるレジスタアーキテクチャのブロック図である。
【００３６】
【図３１Ａ】本発明の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【００３７】
【図３１Ｂ】本発明の実施形態による、プロセッサに含まれる、インオーダアーキテクチャコアに係る例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【００３８】
【図３２Ａ】より具体的な例示的インオーダコアアーキテクチャのブロック図を示しており、コアは、チップ内のいくつかの論理ブロック（同一タイプおよび／または異なるタイプの他のコアを含む）のうちの１つである。
【図３２Ｂ】より具体的な例示的インオーダコアアーキテクチャのブロック図を示しており、コアは、チップ内のいくつかの論理ブロック（同一タイプおよび／または異なるタイプの他のコアを含む）のうちの１つである。
【００３９】
【図３３】本発明の実施形態による、プロセッサのブロック図であり、当該プロセッサは、２以上のコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックを有してよい。
【００４０】
【図３４】本発明の一実施形態によるシステムのブロック図を示す。
【００４１】
【図３５】本発明の一実施形態による第１のより具体的な例示的システムのブロック図を示す。
【００４２】
【図３６】本発明の一実施形態による第２のより具体的な例示的システムのブロック図を示す。
【００４３】
【図３７】本発明の一実施形態によるＳｏＣのブロック図を示す。
【００４４】
【図３８】本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。
【発明を実施するための形態】
【００４５】
以下の詳細な説明において、多数の具体的な詳細が記載される。しかしながら、本発明の実施形態は、これらの具体的な詳細を省いても実施可能であることを理解されたい。他の例においては、本説明の理解を曖昧にしないように、周知の回路、構造および技術は詳細に示されていない。
【００４６】
本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の言及は、記載される実施形態は特定の特徴、構造または特性を含み得るが、すべての実施形態が必ずしも、当該特定の特徴、構造または特性を含まなくてもよいことを示している。さらに、このような文言が必ずしも同一の実施形態を指しているわけではない。さらに、特定の特徴、構造または特性がある実施形態に関し記載されている場合、明示の記載のあるなしに関わらず、このような特徴、構造または特性を他の実施形態に関し作用させることは当業者の知識の範囲内に属するものである。
【００４７】
この詳細な説明を通して、データ投機拡張（ＤＳＸ）と称される投機的実行に関する技術について記載する。この詳細な説明には、ＤＳＸハードウェアおよびＤＳＸをサポートする新しい命令が含まれている。
【００４８】
ＤＳＸは本質的には、制限付きトランザクション型メモリ（ＲＴＭ）の実装に類似しているが、より簡易的なものである。例えば、ＤＳＸ領域は、暗示フェンスを必要としない。むしろ、通常のロード／ストア順序ルールが維持される。さらに、ＤＳＸ領域は、ロードについてアトミックな動作を強制するプロセッサの構成を設定しないのに対し、ＲＴＭでは、トランザクションのロードおよびストアはアトミックに扱われる（トランザクションの完了時、コミットされる）。また、ロードは、ＲＴＭにおける場合のように、バッファリングされない。しかしながら、投機実行が不要になると、直ちにストアはバッファリングおよびコミットされる。実施形態に応じて、これらのストアは、専用の投機的実行ストレージ内または共有レジスタ若しくはメモリ位置にバッファリングされてよい。いくつかの実施形態において、投機的ベクトル化は単一スレッドのみで発生し、それは、他のスレッドからの干渉に対する保護の必要がないことを意味する。
【００４９】
上記のベクトル化されたループでは、安全性のために動的チェックが必要となるだろう。例えば、特定のベクトルイタレーションにおけるＡへの書き込みが、スカラループ内で後のイタレーションで読み取られるＢまたはＣの要素と重複しないことを保証することが挙げられる。以下の実施形態は、投機実行の使用を通し、ベクトル化事例の処理について詳述する。投機的バージョンは、各ループのイタレーションは投機的に実行されるべきであること（例えば、後述の命令を使用して）、およびハードウェアはアドレスチェックの実行に寄与すべきであるということを示す。アドレスチェック（非常に高価なハードウェアを必要とする）を専門に担うハードウェアに依存する代わりに、説明するアプローチはソフトウェアを使用して、ハードウェアを支援する情報を提供し、実行時間に影響を与えずに、またはプログラマ若しくはコンパイラに過度の負荷をかけずに、はるかに安価なハードウェアソリューションを可能にする。
【００５０】
残念なことに、ベクトル化には、順序違反が存在する可能性がある。上記のスカラループの例を再度見てみることにする。
【数３】
0006687232.tif 000004
【００５１】
このループの最初の４回のイタレーション中、以下のメモリ操作が以下の順序で発生する。
Read C[0]
Read B[C[0]]
Write A[0]
Read C[1]
Read B[C[1]]
Write A[1]
Read C[2]
Read B[C[2]]
Write A[2]
Read C[3]
Read B[C[3]]
Write A[3]
【００５２】
同一アレイへの複数のアクセス間の距離（命令個数における）は３であり、これはまた、ひとたびループがベクトル化（ＳＩＭＤに生成）された場合のループ内の投機的メモリ命令の数でもある。この距離は「ストライド」と呼ばれる。これはまた、ひとたびループがベクトル化された場合のループ内のメモリ命令の数でもあり、当該メモリ命令は、自身に実行されるアドレスチェックを有することになる。いくつかの実施形態において、このストライドは、ループの開始時に、特別な命令を介して、アドレス追跡ハードウェアに伝達される（これについては後述する）。いくつかの実施形態において、この命令はまた、アドレス追跡ハードウェアをクリアする。
【００５３】
本明細書には、ベクトル化されたループ実行等の場合に、ＤＳＸで使用される新しい命令（ＤＳＸメモリ命令）について記載する。各ＤＳＸメモリ命令（ロード、ストア、ギャザーおよびスキャッター等）は、ＤＳＸ中に使用されるオペランドを含み、オペランドは、ＤＳＸ実行内の位置（例えば、実行されるループ内の位置）を示す。いくつかの実施形態において、オペランドは、即値にエンコードされた順序の数値を持つ即値（例えば、８ビット即値）である。他の実施形態において、オペランドは、エンコードされた順序の数値を格納するレジスタまたはメモリ位置である。
【００５４】
また、いくつかの実施形態において、これらの命令は、通常の命令とは異なるオペコードを有する。これらの命令は、スカラまたはスーパースカラ（例えば、ＳＩＭＤまたはＭＩＭＤ）であってよい。これらの命令のいくつかの例をいかに示す。ここでは、オペコードのニーモニックが、それが投機的バージョンであることを示す「Ｓ」（以下で下線付き）を含み、ｉｍｍ８は実行の位置（例えば、実行されるループ内の位置）を示すために使用される即値オペランドである。
【数４】
0006687232.tif 000005
【００５５】
もちろん、他の命令は、説明されたオペランド並びに論理（ＡＮＤ、ＯＲ、ＸＯＲ等）およびデータ操作（加算、減算等）命令等のオペコードニーモニック（および下線のオペコード）の変形版を利用してもよい。
【００５６】
上記スカラの例のベクトル化されたバージョン（４つのパックドデータ要素のＳＩＭＤ幅を想定）では、メモリ操作の順序は以下の通りである。
Read C[0], C[1], C[2], C[3]
Read B[C[0]], B[C[1]], B[C[2]], B[C[3]]
Write A[0], A[1], A[2], A[3]
【００５７】
この順序は、例えば、Ｂ［Ｃ［１］］がＡ［０］と重複する場合、誤った実行をもたらす可能性がある。元のスカラ順序では、Ｂ［Ｃ［１］］の読み取りは、Ａ［０］への書き込みの後に生じるが、ベクトル化された実行では、Ｂ［Ｃ［１］］の読み取りはＡ［０］への書き込みの前に生じる。
【００５８】
誤った実行をもたらす可能性のあるループ内の演算に対し、投機的メモリ命令を使用すると、この問題の対処に役立つ。後述の通り、各投機的メモリ命令が、ＤＳＸ追跡ハードウェア（後述）に対し、ループ本体内部におけるその位置を通知する。
【数５】
0006687232.tif 000006
【００５９】
各投機的メモリ操作によって提供されるループ位置情報がストライドと組み合わされ、スカラメモリ操作を再構築可能である。投機的メモリ命令が実行されると、各要素について識別子（ＩＤ）がＤＳＸハードウェアトラッカーによって計算される（ＩＤ＝シーケンス番号＋ストライド×ＳＩＭＤ演算内の要素数）。ハードウェアトラッカーは、シーケンス番号、計算されたＩＤおよび各パックされたデータ要素のアドレスおよびサイズを使用して、順序違反（すなわち、データ要素が別のデータ要素と重複しているか、および間違った順序で読み取りまたは書き込みされたか）が存在したかどうかを判断する。
【００６０】
各ベクトルメモリ命令を有する個々のメモリ操作をアンロールし、各アンロールのストライドを蓄積し、結果の数字を「ＩＤ」として割り当てると、以下のようになる。
Read C[0] //ＩＤ＝０
Read C[1] //ＩＤ＝３
Read C[2] //ＩＤ＝６
Read C[3] //ＩＤ＝９
Read B[C[0]] //ＩＤ＝１
Read B[C[1]] //ＩＤ＝４
Read B[C[2]] //ＩＤ＝７
Read B[C[3]] //ＩＤ=１０
Write A[0] //ＩＤ＝２
Write A[1] //ＩＤ＝５
Write A[2] //ＩＤ＝８
Write A[3] //ＩＤ＝１１
【００６１】
上記の個々のメモリ操作をＩＤでソートすると、元のスカラメモリの順序が再構築される。
【００６２】
図１は、データ投機拡張（ＤＳＸ）をハードウェアで実行可能なプロセッサコアの一実施形態の例示的なブロック図である。
【００６３】
プロセッサコア１０６は、コア１０６が実行する命令をフェッチするためのフェッチユニット１０２を含んでよい。例えば、命令は、Ｌ１キャッシュまたはメモリからフェッチされてよい。コア１０６はまた、後述のものを含むフェッチされた命令をデコードするためのデコードユニット１０４を含んでもよい。例えば、デコードユニット１０４は、フェッチされた命令を複数のマイクロオペレーション（マイクロｏｐ）へとデコードしてよい。
【００６４】
また、コア１０６は、スケジューリングユニット１０７を含んでよい。スケジューリングユニット１０７は、命令がディスパッチの準備が整うまで、例えば、デコードされた命令のオペランドのすべてのソース値が利用可能になるまで、デコードされた命令（例えば、デコードユニット１０４から受信された）の格納に関連する様々な操作を実行してよい。一実施形態において、スケジューリングユニット１０７は、デコードされた命令をスケジューリングし、および／または実行のために１または複数の実行ユニット１０８に発行（またはディスパッチ）してよい。実行ユニット１０８は、メモリ実行ユニット、整数実行ユニット、浮動小数点実行ユニットまたは他の実行ユニットを含んでよい。リタイアメントユニット１１０は、命令がコミットされた後、実行された命令をリタイアしてよい。一実施形態において、実行された命令のリタイアメントによって、命令の実行からコミットされるプロセッサの状態、命令によって使用された物理レジスタの割り当て解除等がもたらされてよい。
【００６５】
メモリ順序バッファ（ＭＯＢ）１１８は、ロードバッファ、ストアバッファ、およびメインメモリに読み込みまたはライトバックされていない保留中のメモリ操作を格納するためのロジックを含んでよい。いくつかの実施形態において、ＭＯＢ  １１８またはＭＯＢ  １１８に類似する回路が、ＤＳＸ領域の投機的ストア（書き込み）を格納する。様々な実施形態において、コアは、例えば、１または複数のキャッシュライン１２４（例えば、キャッシュライン０からＷ）を含んでよく且つキャッシュ回路１３９によって管理されるキャッシュ１１６等のプライベートキャッシュのようなローカルキャッシュを含んでよい。一実施形態において、キャッシュ１１６の各ラインは、コア１０６で実行される各スレッドについて、ＤＳＸ読み取りビット１２６および／またはＤＳＸ書き込みビット１２８を含んでよい。ビット１２６およびビット１２８は、ＤＳＸメモリアクセスリクエストによる対応するキャッシュラインへの（ロードおよび／またはストア）アクセスを示すために、設定またはクリアされてよい。図１の実施形態では、各キャッシュライン１２４は、それぞれのビット１２６および１２８を有するように図示されているが、他の構成も可能であることに留意されたい。例えば、ＤＳＸ読み取りビット１２６（またはＤＳＸ書き込みビット１２８）は、キャッシュブロックまたはキャッシュ１１６の他の部分等、キャッシュ１１６の選択された部分に対応してよい。また、ビット１２６および／または１２８は、キャッシュ１１６以外の場所に格納されてもよい。
【００６６】
ＤＳＸ操作の実行に役立つべく、コア１０６は、合致するＤＳＸ終了がない状態に遭遇したＤＳＸ開始の数に対応する値を格納するためのＤＳＸネストカウンタ１３０を含んでよい。カウンタ１３０は、ハードウェアレジスタ等の任意のタイプのストレージデバイスまたはメモリ（例えば、システムメモリまたはキャッシュ１１６）内に格納された変数として実装されてよい。コア１０６はまた、カウンタ１３０に格納された値を更新するためのＤＳＸネストカウンタ回路１３２を含んでもよい。コア１０６は、コア１０６の様々なコンポーネントの状態をチェックポイント（または格納）するためのＤＳＸチェックポイント回路１３４および例えば、特定のＤＳＸのアボート時に、フォールバックアドレスを使用して、コア１０６の様々なコンポーネントの状態を復元するためのＤＳＸ復元回路１３６を含んでよい。フォールバックアドレスは、ＤＳＸ復元回路１３６に格納される、またはレジスタ１４０等の別の場所に格納される。また、コア１０６は、ＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等、様々なＤＳＸメモリアクセスリクエストに対応する１または複数の追加のレジスタ１４０を含んでよい。ＤＳＸＳＲは、ＤＳＸがアクティブかどうかの指標、ＤＳＸ命令ポインタ（ＤＳＸＸＩＰ）（例えば、ＤＳＸ命令ポインタは、対応するＤＳＸの開始（または直前）位置における命令への命令ポインタであってよい）、および／またはＤＳＸスタックポインタ（ＤＳＸＳＰ）（例えば、ＤＳＸスタックポインタは、コア１０６の１または複数のコンポーネントの様々な状態を格納するスタックの先頭へのスタックポインタであってよい）を格納する。これらのレジスタはまた、ＭＳＲ１５０であってよい。
【００６７】
ＤＳＸアドレス追跡ハードウェア１５２（場合によっては、単にＤＳＸ追跡ハードウェアと呼ばれる）は、投機的メモリアクセスを追跡し、ＤＳＸの順序違反を検出する。特に、この追跡ハードウェア１５２は、元のスカラメモリ順序を再構築するための情報を取得した後、元のスカラメモリ順序を強制するアドレストラッカーを含む。通常、入力は、ループ本体内の追跡が必要な投機的メモリ命令の数であり、それらの命令の各々についての情報の一部は（１）シーケンス番号、（２）命令アクセスのアドレス、および（３）命令がメモリへの読み取りまたは書き込みのどちらを生じさせるか、といったものである。２つの投機的メモリ命令がメモリの重複部分にアクセスする場合、ハードウェアトラッカー１５２はこの情報を使用して、メモリ操作の元のスカラ順序が変更されたかどうかを判断する。変更されており、且ついずれかの操作が書き込みである場合、ハードウェアは投機ミスをトリガする。図１は、独自のＤＳＸ追跡ハードウェア１５２を図示するものの、いくつかの実施形態においては、このハードウェアは他のコアコンポーネントの一部である。
【００６８】
図２は、一実施形態による、投機的命令実行の一例を示す。２０１において、投機的命令がフェッチされる。例えば、上記のような投機的メモリ命令がフェッチされる。いくつかの実施形態において、この命令は、その投機的性質を示すオペコードおよびＤＳＸ内での順序付けを示すオペランドを含む。順序付けのオペランドは、即値またはレジスタ／メモリ位置であってよい。
【００６９】
２０３において、フェッチされた投機的命令がデコードされる。
【００７０】
２０５において、デコードされた投機的命令がＤＳＸの一部であるかどうかの判断がなされる。例えば、一実施形態により、ＤＳＸが上記のＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）に示されているか？といったものである。ＤＳＸがアクティブでない場合、２０７において、命令は、処理なし（ｎｏｐ）になるか、または通常の命令である非投機的命令として実行される。
【００７１】
ＤＳＸがアクティブである場合、２０９において、投機的命令が投機的に実行され（例えば、コミットされない）、且つＤＳＸ追跡ハードウェアが更新される。
【００７２】
図３は、ＤＳＸアドレス追跡ハードウェアの詳細な実施形態を示す。このハードウェアは、投機的メモリインスタンスを追跡する。通常、ＤＳＸ追跡ハードウェアによって解析される要素（例えば、ＳＩＭＤ要素）は、サイズが「Ｂ」バイト以下のチャンクと呼ばれる部分に細分化される。
【００７３】
シフト回路３０１は、チャンクのアドレス（開始アドレス等）をシフトする。多くの実施形態において、シフト回路３０１は、右シフトを実行する。通常、右シフトは、ｌｏｇ２Ｂ分である。シフトされたアドレスは、ハッシュ関数ユニット回路３０３によって実行されるハッシュ関数が適用される。
【００７４】
ハッシュ関数の出力は、ハッシュテーブル３０５へのインデックスである。図示の通り、ハッシュテーブル３０５は、複数のバケット３０７を含む。いくつかの実施形態において、ハッシュテーブル３０５はブルームフィルタである。ハッシュテーブル３０５は、投機ミスの検出および投機的にアクセスされるデータのアドレス、アクセスタイプ、シーケンス番号およびＩＤ番号の記録に使用される。ハッシュテーブル３０５は、Ｎ個の「セット」を含んでおり、各セットはＭ個のエントリ３０９を含む。各エントリ３０９は、前に実行された投機的メモリ命令の要素の有効なビット、シーケンス番号、ＩＤ番号およびアクセスタイプを保持する。いくつかの実施形態において、各エントリ３０９は、対応するアドレス（図中、破線ボックスで図示）も含む。ＤＳＸが命令（例えば、後述のＹＢＥＧＩＮおよびバリアント）を開始すると、すべての有効なビットはクリアされ、「投機実行アクティブ」フラグが設定され、命令がＤＳＸを終了する際、投機アクティブフラグがクリアされる。
【００７５】
競合チェック回路３１１は、テスト対象要素３１５（または要素のチャンク）に対する競合チェックをエントリ３０９ごとに行う。いくつかの実施形態において、エントリ３０９が有効であり且つ次のうちの少なくとも１つの場合に、競合が存在する。すなわち、ｉ）エントリ３０９内のアクセスタイプが書き込みである、またはｉｉ）テスト対象のアクセスタイプが書き込みである、場合に、ｉ）エントリ３０９内のシーケンス番号がテスト対象要素３１５のシーケンス番号より小さく且つエントリ３０９内のＩＤ番号がテスト対象要素３１５のＩＤ番号より大きい、またはｉｉ）エントリ３０９内のシーケンス番号がテスト対象要素３１５のシーケンス番号より大きく且つエントリ３０９内のＩＤ番号がテスト対象要素３１５のＩＤ番号より小さい、のうちいずれかが組み合わされたとき、である。
【００７６】
換言すると、以下の場合に競合が存在する。（エントリが有効である）ＡＮＤ（（エントリ内のアクセスタイプ＝＝書き込み）ＯＲ（テスト対象のアクセスタイプ＝＝書き込み）ＡＮＤ（（（エントリ内のシーケンス番号＜テスト対象のシーケンス番号）ＡＮＤ（エントリ内のＩＤ番号＞テスト対象のＩＤ番号））ＯＲ（（エントリ内のシーケンス番号＞テスト対象のシーケンス番号）ＡＮＤ（エントリ内のＩＤ番号＜テスト対象のＩＤ番号）））。
【００７７】
多くの実施形態においては、アドレス重複のテストは存在しないことに留意されたい。この重複は、ハッシュテーブル内のエントリにヒットすることから暗示される。ヒットは、アドレス重複が存在しない場合に発生する可能性があり、これはハッシュ関数のエイリアシングから、および／または、チェックの粒度が粗すぎる（すなわち、Ｂが大きすぎる）ことからのエイリアシングに起因する。しかしながら、アドレス重複が存在する場合は、ヒットが存在するであろう。よって、正確性は保証されるが、誤検知が存在する可能性がある（すなわち、ハードウェアはアドレス重複がない場合に投機ミスを検出する可能性がある）。一実施形態において、チャンクアドレスは各エントリ３０９に格納され、投機ミスをテストするための追加の条件が適用される（すなわち、これは、エントリ３０９内のアドレスがテスト対象要素３１５のアドレスと等しいという上記条件と論理ＡＮＤ演算される）。
【００７８】
ＯＲゲート３１３（または同等物）は、競合チェックの結果を論理ＯＲ演算する。ＯＲ演算の結果が１である場合、投機ミスが発生した可能性があり、ＯＲゲート３１３はその出力と共にそれを示す。
【００７９】
この実施形態の合計ストレージは、Ｍ×Ｎエントリである。このことは、それが、最大Ｍ×Ｎの投機的にアクセスされたデータ要素を追跡し得ることを意味する。しかしながら、実際、ループは、Ｎ個のセットのうち、一部のセットへのアクセスを他のセットへのアクセスより多く有する可能性がある。任意のセット内の空間を使い果たした場合、いくつかの実施形態においては、正確性を保証するために投機ミスがトリガされる。Ｍを増加させると、この問題が緩和するが、競合チェックハードウェアのより多くのコピーが存在することを強制し得る。すべてのＭ個の競合チェックを同時に実行するためには（いくつかの実施形態においてなされるように）、競合チェックロジックのＭ個のコピーが存在する。
【００８０】
Ｂ、Ｎ、Ｍおよびハッシュ関数を特定の方法で選択することで、Ｌ１データキャッシュと非常に類似する方法で構造が編成されることを可能にする。特に、Ｂがキャッシュラインサイズ、ＮがＬ１データキャッシュ内のセット数、ＭがＬ１データキャッシュの結合性、およびハッシュ関数がアドレスの最下位ビット（右シフト後）となるようにする。この構造は、Ｌ１データキャッシュと同数のエントリおよび編成を有することになり、その実装を簡易にできる。
【００８１】
最後に、代替的な実施形態は、アクセスタイプ情報を格納する必要性を回避し、および競合チェック中に、アクセスタイプをチェックする必要性を回避するために、読み取りおよび書き込みについて、別個のブルームフィルタを使用することに留意されたい。代わりに、読み取りについては、実施形態は「書き込み」フィルタに対してのみ競合チェックを実行し、投機ミスが存在しない場合、要素を「読み取り」フィルタに挿入する。同様に、書き込みについては、実施形態は「読み取り」および「書き込み」フィルタの両方に対して競合チェックを実行し、投機ミスが存在しない場合、要素を「書き込み」フィルタに挿入する。
【００８２】
図４は、ＤＳＸ追跡ハードウェアによって実行されるＤＳＸ投機ミス検出の例示的な方法を示す。４０１において、ＤＳＸが開始される、または前の投機的イタレーションがコミットされる。例えば、ＹＢＥＧＩＮ命令が実行される。この命令の実行により、エントリ３０９内の有効なビットをクリアし、状態レジスタ（上記のＤＳＸ状態レジスタ等）内の投機アクティブフラグを設定する（既に設定されていない場合）。ＤＳＸが開始された後、投機的メモリ命令が実行され、テスト対象のデータ要素を提供する。
【００８３】
４０３において、投機的メモリ命令からのテスト対象のデータ要素は、Ｂバイト以下のチャンクに細分化される。ハッシュテーブルは、Ｂバイトの粒度でアクセスされる（すなわち、アドレスの低ビットは破棄される）。要素が十分大きく、および／または、アライメントされていない場合、要素はＢバイト境界を越えてよく、その場合、要素は複数のチャンクに細分化される。
【００８４】
チャンクごとに、以下（４０５〜４２１）が実行される。チャンクの開始アドレスは、ｌｏｇ２Ｂ分右シフトされる。４０７において、シフトされたアドレスはハッシュされ、インデックス値を生成する。
【００８５】
４０９において、インデックス値を使用して、ハッシュテーブルの対応するセットのルックアップが行われ、４１１において、当該セットのすべてのエントリが読み出される。
【００８６】
４１３において、読み出された各エントリについて、テスト対象要素に対し競合チェック（上記のような）が実行される。４１５において、すべての競合チェックに対するＯＲ演算が実行される。４１７において、いずれかのチェックが競合を示す（結果、ＯＲは１である）場合、４１９において投機ミスの指標が形成される。この時点で、ＤＳＸは通常アボートされる。投機ミスがない場合、４２１において、セット内の無効なエントリが検出され、無効なエントリはテスト対象要素の情報で埋められ、有効とマークされる。無効なエントリが存在しない場合、投機ミスがトリガされる。
【００８７】
図５Ａ〜図５Ｂは、ＤＳＸ追跡ハードウェアによって実行されるＤＳＸ投機ミス検出の例示的な方法を示す。５０１において、ＤＳＸが開始される、または前の投機的イタレーションがコミットされる。例えば、ＹＢＥＧＩＮ命令が実行される。
【００８８】
この命令の実行により、５０３において、エントリ３０９内の有効なビットをクリアすることによって、追跡ハードウェアをリセットし且つ状態レジスタ（上記のＤＳＸ状態レジスタ等）内の投機アクティブフラグを設定する（既に設定されていない場合）。
【００８９】
５０５において、投機的メモリ命令が実行される。これらの命令の例は、上記されている。５０７において、投機的命令からのテスト対象要素の数であるカウンタ（ｅ）がゼロに設定され、５０９において、ＩＤが計算される（ＩＤ＝シーケンス番号＋ストライド×ｅ）。
【００９０】
５１１において、いずれかの前の書き込みがカウンタ値ｅと重複するかどうかの判断がなされる。これは、前の格納（書き込み）に対する依存性チェックとして動作する。重複する書き込みがあれば、５１３において、競合チェックが実行される。いくつかの実施形態において、この競合チェックは次のものの確認を試みる。すなわち、ｉ）エントリ３０９内のシーケンス番号がテスト対象要素３１５のシーケンス番号より小さく且つエントリ３０９内のＩＤ番号がテスト対象要素３１５のＩＤ番号より大きいかどうか、またはｉｉ）エントリ３０９内のシーケンス番号がテスト対象要素３１５のシーケンス番号より大きく且つエントリ３０９内のＩＤ番号がテスト対象要素３１５のＩＤ番号より小さいかどうかである。
【００９１】
競合が存在する場合、５１５において、投機ミスがトリガされる。競合が存在しない場合、または重複する前の書き込みが存在しなかった場合、５１７において、投機的メモリ命令は書き込みであるかどうかの判断がなされる。
【００９２】
はいの場合、５１９において、前のいずれかの読み取りがカウンタ値ｅと重複するかどうかの判断がなされる。これは、前のロード（読み取り）に対する依存性チェックとして動作する。いずれかの重複する読み取りがあれば、５２１において、競合チェックが実行される。いくつかの実施形態において、この競合チェックは次のものの確認を試みる。すなわち、ｉ）エントリ３０９内のシーケンス番号がテスト対象要素３１５のシーケンス番号より小さく且つエントリ３０９内のＩＤ番号がテスト対象要素３１５のＩＤ番号より大きいかどうか、またはｉｉ）エントリ３０９内のシーケンス番号がテスト対象要素３１５のシーケンス番号より大きく且つエントリ３０９内のＩＤ番号がテスト対象要素３１５のＩＤ番号より小さいかどうかである。
【００９３】
競合が存在する場合、５２３において、投機ミスがトリガされる。競合が存在しない場合、または重複する前の読み取りが存在しなかった場合、５２５において、カウンタｅがインクリメントされる。
【００９４】
５２６において、カウンタｅが投機的メモリ命令内の要素数に等しいかどうかの判断がなされる。換言すると、すべての要素が評価済みかどうか？で、いいえの場合、５０９において、別のＩＤが計算される。はいの場合、５２７において、ハードウェアは別の命令の実行を待機する。次の命令が別の投機的メモリ命令である場合、５０７においてカウンタがリセットされる。次の命令がＹＢＥＧＩＮの場合、５０３においてハードウェアがリセットされるといった具合である。次の命令がＹＥＮＤの場合、５２９においてＤＳＸは無効にされる。
【００９５】
［ＹＢＥＧＩＮ命令］
【００９６】
図６は、ＤＳＸを開始する命令の実行に係る一実施形態を示す。本明細書で説明する通り、この命令は「ＹＢＥＧＩＮ」と称され、ＤＳＸ領域の開始をシグナリングするために使用される。もちろん、当該命令は別の名前で称されてもよい。いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【００９７】
６０１において、ＹＢＥＧＩＮ命令が受信／フェッチされる。例えば、命令はメモリから命令キャッシュへフェッチされ、または命令キャッシュからフェッチされる。フェッチされた命令は、後述のいくつかの形式のうちの１つを取ってよい。
【００９８】
図７は、ＹＢＥＧＩＮ命令フォーマットのいくつかの例示的な実施形態を示す。７０１に図示の通り、一実施形態において、ＹＢＥＧＩＮ命令は、オペコード（ＹＢＥＧＩＮ）およびフォールバックアドレスの変位を提供するための単一のオペランドを含み、これは、プログラム実行が投機ミスを処理する必要がある場合である。要するに、変位値は、フォールバックアドレスの一部である。いくつかの実施形態において、この変位値は即値オペランドとして提供される。他の実施形態において、この変位値はレジスタまたはメモリ位置オペランド内に格納される。ＹＢＥＧＩＮ実装に応じ、ＤＳＸ状態レジスタ、ネストカウントレジスタおよび／またはＲＴＭ状態レジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。
【００９９】
７０３に図示の通り、別の実施形態においては、ＹＢＥＧＩＮ命令はオペコードおよび変位オペランドのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態に対する明示的オペランドも含む。ＹＢＥＧＩＮ実装に応じ、ネストカウントレジスタおよび／またはＲＴＭ状態レジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。
【０１００】
７０５に図示の通り、別の実施形態においては、ＹＢＥＧＩＮ命令はオペコードおよび変位オペランドのみでなく、ＤＳＸネストカウントレジスタ等のＤＳＸネストカウントに対する明示的オペランドも含む。上記の通り、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）といった具体である。ＹＢＥＧＩＮ実装に応じ、ＤＳＸ状態レジスタおよび／またはＲＴＭ状態レジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。
【０１０１】
７０７に図示の通り、別の実施形態においては、ＹＢＥＧＩＮ命令はオペコードおよび変位オペランドのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態およびＤＳＸネストカウントレジスタ等のＤＳＸネストカウントに対する明示的オペランドも含む。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタ等のような全体的な状態レジスタ等）。そして、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）。ＹＢＥＧＩＮ実装に応じ、ＲＴＭ状態レジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具合である。
【０１０２】
７０９に図示の通り、別の実施形態において、ＹＢＥＧＩＮ命令は、オペコードおよび変位オペランドのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態、ＤＳＸネストカウントレジスタ等のＤＳＸネストカウントおよびＲＴＭ状態に対する明示的オペランドも含む。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタ等のような全体的な状態レジスタ等）。そして、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）。
【０１０３】
もちろん、ＹＢＥＧＩＮの他の変形例も考え得る。例えば、変位値を提供する代わりに、命令はフォールバックアドレス自体を即値、レジスタ、またはメモリ位置のいずれかに含む。
【０１０４】
図６の参照に戻ると、６０３において、フェッチ／受信されたＹＢＥＧＩＮ命令がデコードされる。いくつかの実施形態において、命令は、後述のようなハードウェアデコーダによってデコードされる。いくつかの実施形態において、命令はマイクロオペレーション（マイクロｏｐ）へとデコードされる。例えば、一部のＣＩＳＣベースの機械は通常、マクロ命令から派生したマイクロオペレーションを使用する。他の実施形態において、デコーディングは、ジャストインタイムコンパイル等のソフトウェアルーチンの一部である。
【０１０５】
６０５において、デコードされた命令に関連付けられた任意のオペランドが取得される。例えば、ＤＳＸレジスタ、ＤＳＸネストカウントレジスタ、および／またはＲＴＭ状態レジスタのうちの１または複数からデータが取得される。
【０１０６】
６０７において、デコードされたＹＢＥＧＩＮ命令が実行される。命令がマイクロｏｐへとデコードされる実施形態においては、これらのマイクロｏｐが実行される。デコードされた命令の実行により、ハードウェアに対し、以下の実行されるべき動作のうちの１または複数を実行させる。すなわち、１）ＲＴＭトランザクションがアクティブであることを判断し且つそのトランザクションを続行する、２）ＹＢＥＧＩＮ命令の命令ポインタに追加された変位値を使用し、フォールバックアドレスを計算する、３）ＤＳＸネストカウントをインクリメントする、４）アボートする、５）ＤＳＸ状態をアクティブに設定する、および／または６）ＤＳＸ追跡ハードウェアをリセットする。
【０１０７】
通常、ＹＢＥＧＩＮ命令のインスタンスにおいて、アクティブなＲＴＭトランザクションが存在しない場合、ＤＳＸ状態はアクティブに設定され、ＤＳＸネストカウントはインクリメントされ（カウントが最大値より小さい場合）、ＤＳＸ追跡ハードウェアはリセットされ（例えば、上記のように）、およびＤＳＸ領域を開始すべく、変位値を使用してフォールバックアドレスが計算される。上記の通り、ＤＳＸの状態は通常、図１に関し記載したＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のレジスタのようなアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。ＤＳＸ追跡ハードウェアのリセットについても説明済みである。上記の通り、ＤＳＸの状態は通常、図１に関し記載したＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のレジスタのようなアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。このレジスタは、コアのハードウェアによってチェックされ、ＤＳＸが実際に発生していたかどうかが判断されてよい。
【０１０８】
ＤＳＸが開始できない何らかの理由が存在した場合、他の潜在的な動作のうちの１または複数が発生する。例えば、ＲＴＭをサポートするプロセッサのいくつかの実施形態においては、ＲＴＭトランザクションがアクティブであった場合、もともとＤＳＸアクティブが生じるべきではなかったので、ＲＴＭが遂行される。もともとＤＳＸの設定について何らかの間違いがある（ネストカウントが正しくない）場合、アボートが発生することになる。また、いくつかの実施形態において、ＤＳＸが生じなかった場合、エラーが生成され、処理が実行されない（ＮＯＰ）。どの動作が実行されるかに関わらず、多くの実施形態において、その動作の後、保留中のＤＳＸが存在しないことを示すために、ＤＳＸ状態がリセット（設定されていた場合）される。
【０１０９】
図８は、ＹＢＥＧＩＮ命令等の命令の実行に係る詳細な実施形態を示す。例えば、いくつかの実施形態において、このフローは図６の６０７のボックスである。いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０１１０】
いくつかの実施形態において、例えば、ＲＴＭトランザクションをサポートするプロセッサにおいては、８０１において、ＲＴＭトランザクションが発生しているかどうかの判断がなされる。例えば、ＲＴＭをサポートするプロセッサのいくつかの実施形態において、ＲＴＭトランザクションがアクティブであった場合、もともとＤＳＸアクティブが生じるべきではなかった。この例では、ＲＴＭトランザクションにおいて何らかの問題が発生し、その終了手順がアクティブ化されるべきである。通常、ＲＴＭトランザクションの状態はＲＴＭ制御および状態レジスタ等のレジスタに格納される。プロセッサのハードウェアは、このレジスタの内容を評価し、ＲＴＭトランザクションが発生しているかどうかを判断する。ＲＴＭトランザクションが発生している場合、８０３において、ＲＴＭトランザクションは処理を続行する。
【０１１１】
ＲＴＭトランザクションが発生していない場合、またはＲＴＭがサポートされていない場合、８０５において、現在のＤＳＸネストカウントが最大ネストカウントより小さいかどうかの判断がなされる。いくつかの実施形態において、現在のネストカウントを格納するためのネストカウントレジスタが、ＹＢＥＧＩＮ命令によってオペランドとして提供される。代替的に、現在のネストカウントを格納するために使用される専用のネストカウントレジスタがハードウェアに存在してよい。最大ネストカウントは、対応するＤＳＸ終了（例えば、ＹＥＮＤ命令命令を介する）がない状態で発生し得るＤＳＸ開始（例えば、ＹＢＥＧＩＮ命令を介する）の最大数である。
【０１１２】
現在のＤＳＸネストカウントが最大値より大きい場合、８０７において、アボートが発生する。いくつかの実施形態において、アボートは、ＤＳＸ復元回路１３５等の復元回路を使用して、ロールバックをトリガする。他の実施形態においては、ＹＡＢＯＲＴ命令は後述の通り実行される。そこでは、フォールバックアドレスへのロールバックを実行するだけでなく、投機的に格納された書き込みを破棄し、現在のネストカウントをリセットし、ＤＳＸ状態を非アクティブに設定する。上記の通り、ＤＳＸ状態は通常、図１中に示されるＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等の制御レジスタに格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。
【０１１３】
現在のネストカウントが最大値より大きくない場合、８０９において、現在のＤＳＸネストカウントがインクリメントされる。
【０１１４】
８１１において、現在のＤＳＸネストカウントが１に等しいかどうかの判断がなされる。現在のＤＳＸネストカウントが１に等しい場合、いくつかの実施形態においては、８１３で、ＹＢＥＧＩＮ命令によって提供される変位値をＹＢＥＧＩＮ命令の後にある命令のアドレスに追加することによって、フォールバックアドレスが計算される。ＹＢＥＧＩＮ命令がフォールバックアドレスを提供した実施形態においては、この計算は必要ではない。
【０１１５】
８１５において、ＤＳＸ状態がアクティブに設定され（必要な場合）、ＤＳＸ追跡ハードウェアがリセットされる（例えば、上記の通りに）。例えば、上記の通り、ＤＳＸの状態は通常、図１に関し記載されたＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のレジスタのようなアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。このレジスタは、コアのハードウェアによってチェックされ、ＤＳＸが実際に発生していたかどうかが判断されてよい。
【０１１６】
図９は、ＹＢＥＧＩＮ命令等の命令の実行を示す擬似コードの例を示す。
【０１１７】
［ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令］
【０１１８】
図１０は、ＤＳＸを開始する命令の実行に係る一実施形態を示す。本明細書で説明する通り、この命令は「ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ」と称され、ＤＳＸ領域の開始をシグナリングするために使用される。もちろん、当該命令は別の名前で称されてもよい。いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０１１９】
１００１において、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令が受信／フェッチされる。例えば、命令はメモリから命令キャッシュへフェッチされ、または命令キャッシュからフェッチされる。フェッチされた命令は、後述のいくつかの形式のうちの１つを取ってよい。 
【０１２０】
図１１はＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令フォーマットのいくつかの例示的な実施形態を示す。１１０１に図示の通り、一実施形態において、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令は、オペコード（ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ）およびフォールバックアドレスの変位を提供するためのオペランドを含み、これは、プログラム実行が投機ミスおよびストライド値オペランドを処理する必要がある場合である。要するに、変位値は、フォールバックアドレスの一部である。いくつかの実施形態において、変位は即値オペランドとして提供される。他の実施形態において、変位値はレジスタまたはメモリ位置オペランド内に格納される。いくつかの実施形態において、ストライドは即値オペランドとして提供される。他の実施形態において、ストライドはレジスタまたはメモリ位置オペランド内に格納される。ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ実装に応じ、ＤＳＸ状態レジスタ、ネストカウントレジスタおよび／またはＲＴＭ状態レジスタに対する暗示的オペランドが使用される。
【０１２１】
１１０３に図示の通り、別の実施形態においては、ＹＢＥＧＩＮ  ＷＩＨＴ  ＳＴＲＩＤＥ命令はオペコードおよび変位オペランドおよびストライド値オペランドのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態に対する明示的オペランドも含む。いくつかの実施形態において、変位は即値オペランドとして提供される。他の実施形態において、変位値はレジスタまたはメモリ位置オペランド内に格納される。いくつかの実施形態において、ストライドは即値オペランドとして提供される。他の実施形態において、ストライドはレジスタまたはメモリ位置オペランド内に格納される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ実装に応じ、ネストカウントレジスタおよび／またはＲＴＭ状態レジスタに対する暗示的オペランドが使用される。
【０１２２】
１１０５に図示の通り、別の実施形態においては、ＹＢＥＧＩＮ  ＷＩＨＴ  ＳＴＲＩＤＥ命令はオペコード、変位オペランドおよびストライド値オペランドのみでなく、ＤＳＸネストカウントレジスタ等のＤＳＸネストカウントに対する明示的オペランドも含む。いくつかの実施形態において、変位は即値オペランドとして提供される。他の実施形態において、変位値はレジスタまたはメモリ位置オペランド内に格納される。いくつかの実施形態において、ストライドは即値オペランドとして提供される。他の実施形態において、ストライドはレジスタまたはメモリ位置オペランド内に格納される。上記の通り、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）。ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ実装に応じ、ＤＳＸ状態レジスタおよび／またはＲＴＭ状態レジスタに対する暗示的オペランドが使用される。
【０１２３】
１１０７に図示の通り、別の実施形態においては、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令はオペコード、変位オペランドおよびストライド値オペランドのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態およびＤＳＸネストカウントレジスタ等のＤＳＸネストカウントに対する明示的オペランドも含む。いくつかの実施形態において、変位は即値オペランドとして提供される。他の実施形態において、変位値はレジスタまたはメモリ位置オペランド内に格納される。いくつかの実施形態において、ストライドは即値オペランドとして提供される。他の実施形態において、ストライドはレジスタまたはメモリ位置オペランド内に格納される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタ等のような全体的な状態レジスタ等）。そして、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）。ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ実装に応じ、ＲＴＭ状態レジスタに対する暗示的オペランドが使用される。
【０１２４】
１１０９に図示の通り、別の実施形態においては、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令は、オペコード、変位オペランドおよびストライド値オペランドのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態、ＤＳＸネストカウントレジスタ等のＤＳＸネストカウントおよびＲＴＭ状態レジスタに対する明示的オペランドも含む。いくつかの実施形態において、変位は即値オペランドとして提供される。他の実施形態において、変位値はレジスタまたはメモリ位置オペランド内に格納される。いくつかの実施形態において、ストライドは即値オペランドとして提供される。他の実施形態において、ストライドはレジスタまたはメモリ位置オペランド内に格納される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタ等のような全体的な状態レジスタ等）。そして、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）。
【０１２５】
もちろん、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥの他の変形例も考え得る。例えば、変位値を提供する代わりに、命令はフォールバックアドレス自体を即値、レジスタ、またはメモリ位置のいずれかに含む。
【０１２６】
図１０の参照に戻ると、１００３において、フェッチ／受信されたＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令がデコードされる。いくつかの実施形態において、命令は、後述のようなハードウェアデコーダによってデコードされる。いくつかの実施形態において、命令はマイクロオペレーション（マイクロｏｐ）へとデコードされる。例えば、一部のＣＩＳＣベースの機械は通常、マクロ命令から派生したマイクロオペレーションを使用する。他の実施形態において、デコーディングは、ジャストインタイムコンパイル等のソフトウェアルーチンの一部である。
【０１２７】
１００５において、デコードされたＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令に関連付けられた任意のオペランドが取得される。例えば、ＤＳＸレジスタ、ＤＳＸネストカウントレジスタおよび／またはＲＴＭ状態レジスタのうちの１または複数からデータが取得される。
【０１２８】
１００７において、デコードされたＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令が実行される。命令がマイクロｏｐへとデコードされる実施形態においては、これらのマイクロｏｐが実行される。デコードされた命令の実行により、ハードウェアに対し、以下の実行されるべき動作のうちの１または複数を実行させる。すなわち、１）ＲＴＭトランザクションがアクティブであることを判断し且つそのトランザクションを開始する、２）ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令の命令ポインタに追加された変位値を使用し、フォールバックアドレスを計算する、３）ＤＳＸネストカウントをインクリメントする、４）アボートする、５）ＤＳＸ状態をアクティブに設定する、６）ＤＳＸ追跡ハードウェアをリセットする、および／または７）ストライド値をＤＳＸハードウェアトラッカーに提供する。
【０１２９】
通常、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令の第１のインスタンスにおいて、アクティブなＲＴＭトランザクションが存在しない場合、ＤＳＸ状態がアクティブに設定され、ＤＳＸ追跡ハードウェアがリセットされ（例えば、上記の通り、提供されたストライド値を使用して）、ＤＳＸ領域を開始するために、変位値を使用してフォールバックアドレスが計算される。上記の通り、ＤＳＸの状態は通常、図１に関し記載したＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のレジスタのようなアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。ＤＳＸ追跡ハードウェアのリセットについても説明済みである。
【０１３０】
通常、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令のインスタンスにおいて、アクティブなＲＴＭトランザクションが存在しない場合、ＤＳＸ状態はアクティブに設定され、ＤＳＸネストカウントはインクリメントされ（カウントが最大値より小さい場合）、ＤＳＸ追跡ハードウェアはリセットされ（例えば、上記の通り、提供されたストライドを使用して）、ＤＳＸ領域を開始するために、変位値を使用してフォールバックアドレスが計算される。上記の通り、ＤＳＸの状態は通常、図１に関し記載したＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のレジスタのようなアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。ＤＳＸ追跡ハードウェアのリセットについても説明済みである。上記の通り、ＤＳＸの状態は通常、図１に関し記載したＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のレジスタのようなアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。このレジスタは、コアのハードウェアによってチェックされ、ＤＳＸが実際に発生していたかどうかが判断されてよい。
【０１３１】
ＤＳＸが開始できない何らかの理由が存在した場合、他の潜在的な動作のうちの１または複数が発生する。例えば、ＲＴＭをサポートするプロセッサのいくつかの実施形態においては、ＲＴＭトランザクションがアクティブであった場合、もともとＤＳＸアクティブが生じるべきではなかったので、ＲＴＭが遂行される。もともとＤＳＸの設定について何らかの間違いがある（ネストカウントが正しくない）場合、アボートが発生することになる。また、いくつかの実施形態において、ＤＳＸが存在しなかった場合、エラーが生成され、処理が実行されない（ＮＯＰ）。どの動作が実行されるかに関わらず、多くの実施形態において、その動作の後、保留中のＤＳＸが存在しないことを示すために、ＤＳＸ状態がリセット（設定されていた場合）される。
【０１３２】
図１２は、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令等の命令の実行に係る詳細な実施形態を示す。例えば、いくつかの実施形態において、このフローは図１０の１００７のボックスである。いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０１３３】
いくつかの実施形態において、例えば、ＲＴＭトランザクションをサポートするプロセッサにおいては、１２０１において、ＲＴＭトランザクションが発生しているかどうかの判断がなされる。例えば、ＲＴＭをサポートするプロセッサのいくつかの実施形態において、ＲＴＭトランザクションがアクティブであった場合、もともとＤＳＸアクティブが生じるべきではなかった。この例では、ＲＴＭトランザクションにおいて何らかの問題が発生し、その終了手順がアクティブ化されるべきである。通常、ＲＴＭトランザクションの状態はＲＴＭ制御および状態レジスタ等のレジスタに格納される。プロセッサのハードウェアは、このレジスタの内容を評価し、ＲＴＭトランザクションが発生しているかどうかを判断する。ＲＴＭトランザクションが発生している場合、１２０３において、ＲＴＭトランザクションは処理を続行する。
【０１３４】
ＲＴＭトランザクションが発生していない場合、またはＲＴＭがサポートされていない場合、１２０５において、現在のＤＳＸネストカウントが最大ネストカウントより小さいかどうかの判断がなされる。いくつかの実施形態において、現在のネストカウントを格納するためのネストカウントレジスタが、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令によってオペランドとして提供される。代替的に、現在のネストカウントを格納するために使用される専用のネストカウントレジスタがハードウェアに存在してよい。最大ネストカウントは、対応するＤＳＸ終了（例えば、ＹＥＮＤ命令を介する）がない状態で発生し得るＤＳＸ開始（例えば、ＹＢＥＧＩＮ命令を介する）の最大数である。
【０１３５】
現在のネストカウントが最大値より大きい場合、１２０７において、アボートが発生する。いくつかの実施形態において、アボートはロールバックをトリガする。他の実施形態においては、ＹＡＢＯＲＴ命令は後述の通り実行される。そこでは、フォールバックアドレスへのロールバックを実行するだけでなく、また投機的に格納された書き込みを破棄し、現在のネストカウントをリセットし、ＤＳＸ状態を非アクティブに設定する。上記の通り、ＤＳＸ状態は通常、図１中に示されるＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等の制御レジスタに格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。
【０１３６】
現在のネストカウントが最大値より大きくない場合、１２０９において、現在のＤＳＸネストカウントがインクリメントされる。
【０１３７】
１２１１において、現在のＤＳＸネストカウントが１に等しいかどうかの判断がなされる。現在のＤＳＸネストカウントが１に等しい場合、いくつかの実施形態においては、１２１３において、ＹＢＥＧＩＮ  ＷＩＴＨ  ＳＴＲＩＤＥ命令によって提供される変位値をＹＢＥＧＩＮ  ＷＩＨＴ  ＳＴＲＩＤＥ命令の後にある命令のアドレスに追加することによって、フォールバックアドレスが計算される。ＹＢＥＧＩＮ  ＷＩＨＴ  ＳＴＲＩＤＥ命令がフォールバックアドレスを提供した実施形態においては、この計算は必要ではない。
【０１３８】
１２１５において、ＤＳＸ状態がアクティブに設定され（必要な場合）、ＤＳＸ追跡ハードウェアがリセットされる（例えば、上記の通り、提供されたストライド値を使用して）。例えば、上記の通り、ＤＳＸの状態は通常、図１に関し記載されたＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のレジスタのようなアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。このレジスタは、コアのハードウェアによってチェックされ、ＤＳＸが実際に発生していたかどうかが判断されてよい。
【０１３９】
［ＹＣＯＮＴＩＮＵＥ命令］
【０１４０】
ＤＳＸが問題なく終了すると（例えば、ループのイタレーションが最後まで実行された）、いくつかの実施形態において、後述の通り、投機的領域の終了を示すための命令（ＹＥＮＤ）が実行される。つまり、この命令の実行は、後述の通り、現在の投機的状態のコミットメント（書き込まれていないすべての書き込み）および現在の投機的領域からの終了を発生させる。その後、ループの別のイタレーションが、別のＹＢＥＧＩＮを呼び出すことによって開始されてよい。
【０１４１】
しかしながら、いくつかの実施形態において、ＹＢＥＧＩＮ、ＹＥＮＤ、ＹＢＥＧＩＮ等のこのサイクルに対する最適化が、投機実行がこれ以上必要でない場合（例えば、ストア間に競合がない場合）に、現在のループイタレーションをコミットするためのＣｏｎｔｉｎｕｅ命令の使用を通して利用可能である。Ｃｏｎｔｉｎｕｅ命令はまた、ＹＢＥＧＩＮを呼び出す必要なしに、新しい投機的ループのイタレーションを開始する。
【０１４２】
図１３は、ＤＳＸを終了させずに、ＤＳＸを続行する命令の実行に係る一実施形態を示す。本明細書で説明する通り、この命令は「ＹＣＯＮＴＩＮＵＥ」と称され、トランザクションの終了をシグナリングするために使用される。もちろん、当該命令は別の名前で称されてもよい。
【０１４３】
いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０１４４】
１３０１において、ＹＣＯＮＴＩＮＵＥ命令が受信／フェッチされる。例えば、命令はメモリから命令キャッシュへフェッチされ、または命令キャッシュからフェッチされる。フェッチされた命令は、後述のいくつかの形式のうちの１つを取ってよい。
【０１４５】
図１４は、ＹＣＯＮＴＩＮＵＥ命令フォーマットのいくつかの例示的な実施形態を示す。１４０１に図示の通り、一実施形態において、ＹＣＯＮＴＩＮＵＥ命令は、オペコード（ＹＣＯＮＴＩＮＵＥ）を含むが、明示的オペランドは含まない。ＹＣＯＮＴＩＮＵＥ実装に応じ、ＤＳＸ状態レジスタおよびネストカウントレジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）といった具合である。また、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。
【０１４６】
１４０３に図示の通り、別の実施形態において、ＹＣＯＮＴＩＮＵＥ命令はオペコードのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態に対する明示的オペランドも含む。ＹＣＯＮＴＩＮＵＥ実装に応じ、ネストカウントレジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）といった具体である。また、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。
【０１４７】
１４０５に図示の通り、別の実施形態においては、ＹＣＯＮＴＩＮＵＥ命令はオペコードのみでなく、ＤＳＸネストカウントレジスタ等のＤＳＸネストカウントに対する明示的オペランドも含む。ＹＣＯＮＴＩＮＵＥ実装に応じ、ＤＳＸ状態レジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）といった具合である。また、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。
【０１４８】
１４０７に図示の通り、別の実施形態においては、ＹＣＯＮＴＩＮＵＥ命令はオペコードのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態およびＤＳＸネストカウントレジスタ等のＤＳＸネストカウントに対する明示的オペランドも含む。上記の通り、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）といった具合である。また、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。
【０１４９】
図１３の参照に戻ると、１３０３において、フェッチ／受信されたＹＣＯＮＴＩＮＵＥ命令がデコードされる。いくつかの実施形態において、命令は、後述のようなハードウェアデコーダによってデコードされる。いくつかの実施形態において、命令はマイクロオペレーション（マイクロｏｐ）へとデコードされる。例えば、一部のＣＩＳＣベースの機械は通常、マクロ命令から派生したマイクロオペレーションを使用する。他の実施形態において、デコーディングは、ジャストインタイムコンパイル等のソフトウェアルーチンの一部である。
【０１５０】
１３０５において、デコードされたＹＣＯＮＴＩＮＵＥ命令に関連付けられた任意のオペランドが取得される。例えば、ＤＳＸレジスタおよびＤＳＸネストカウントレジスタのうちの１または複数からデータが取得される。
【０１５１】
１３０７において、デコードされたＹＣＯＮＴＩＮＵＥ命令が実行される。命令がマイクロｏｐへとデコードされる実施形態においては、これらのマイクロｏｐが実行される。デコードされた命令の実行は、ハードウェアに対し、実行されるべき次の動作のうちの１または複数を実行させる。すなわち、１）投機実行がこれ以上必要ではないとき、ＤＳＸに関連付けられた投機的書き込みがコミットされるべきであることを判断し且つそれらをコミットし且つ新しい投機的ループのイタレーション（新しいＤＳＸ領域等）を開始する、および／または２）処理を実行しない。
【０１５２】
これらの動作のうちの第１のもの（投機的書き込みを確定し、新しい投機的ループのイタレーションを開始する）は、上記のＤＳＸチェックハードウェアによって実行されてよい。この動作において、ＤＳＸのループのイタレーションに関連付けられた投機的書き込みのすべてがコミットされる（それらはＤＳＸ外部でアクセス可能であるように格納される）が、ＹＥＮＤ命令の場合とは異なり、ＤＳＸが存在しないことを示すためのＤＳＸ状態は設定されない。例えば、ＤＳＸに関連付けられたすべての書き込み（キャッシュ、レジスタまたはメモリ内に格納されたもの）がコミットされ、その結果、それらは確定され且つＤＳＸの外部から可視であるようにされる。通常、ＤＳＸコミットは、ＤＳＸネストカウントが１である場合を除き、発生しない。それ以外の場合、いくつかの実施形態においては、何も処理が実行されない。
【０１５３】
いくつかの実施形態において、ＤＳＸがアクティブでない場合、何も処理が実行されなくてよい。
【０１５４】
図１５は、ＹＣＯＮＴＩＮＵＥ命令等の命令の実行に係る詳細な実施形態を示す。例えば、いくつかの実施形態において、このフローは図１３のボックス１３０７である。いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０１５５】
１５０１において、ＤＳＸがアクティブであるかどうかの判断がなされる。上記の通り、ＤＳＸ状態は通常、図１中に示されるＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等の制御レジスタに格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。状態がどこに格納されるかに関わらず、位置はプロセッサのハードウェアによってチェックされ、ＤＳＸが実際に発生していたかどうかが判断される。
【０１５６】
ＤＳＸが発生していない場合、１５０３において、処理は実行されない。
【０１５７】
ＤＳＸが発生している場合、１５０５において、ＤＳＸネストカウントが１に等しいかどうかの判断がなされる。上記の通り、ＤＳＸネストカウントは通常、ネストカウントレジスタ内に格納される。ＤＳＸネストカウントが１でない場合、１５０７において、処理は実行されない。ＤＳＸネストカウントが１である場合、１５０９において、コミットおよびＤＳＸ再開がなされる。いくつかの実施形態において、コミットおよびＤＳＸ再開が発生する場合、以下のうちの１または複数が発生する。すなわち、１）ＤＳＸ追跡ハードウェアがリセットされる（例えば、上記の通り）、２）フォールバックアドレスが計算される、および３）前の投機的領域の投機的に実行された命令（書き込み）のコミットがなされる。
【０１５８】
図１６は、ＹＣＯＮＴＩＮＵＥ命令等の命令の実行を示す擬似コードの例を示す。
【０１５９】
［ＹＡＢＯＲＴ命令］
【０１６０】
時折、ＤＳＸをアボートするように要求する問題（投機ミス等）がＤＳＸ内に存在する。図１７は、ＤＳＸをアボートする命令の実行に係る一実施形態を示す。本明細書に記載の通り、この命令は「ＹＡＢＯＲＴ」と称される。もちろん、当該命令は別の名前で称されてもよい。いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０１６１】
１７０１において、ＹＡＢＯＲＴ命令が受信／フェッチされる。例えば、命令はメモリから命令キャッシュへフェッチされ、または命令キャッシュからフェッチされる。フェッチされた命令は、後述のいくつかの形式のうちの１つを取ってよい。
【０１６２】
図１８は、ＹＡＢＯＲＴ命令フォーマットのいくつかの例示的な実施形態を示す。一実施形態において、１８０１に図示の通り、ＹＡＢＯＲＴ命令はオペコード（ＹＡＢＯＲＴ）のみを含む。ＹＡＢＯＲＴ実装に応じ、ＤＳＸ状態レジスタおよび／またはＲＴＭ状態レジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。
【０１６３】
１８０３に図示の通り、別の実施形態においては、ＹＡＢＯＲＴ命令はオペコードのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態レジスタに対する明示的オペランドも含む。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。ＹＡＢＯＲＴ実装に応じ、ＲＴＭ状態レジスタに対する暗示的オペランドが使用される。
【０１６４】
１８０５に図示の通り、別の実施形態においては、ＹＡＢＯＲＴ命令はオペコードのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態レジスタおよびＲＴＭ状態レジスタに対する明示的オペランドも含む。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）といった具体である。
【０１６５】
図１７の参照に戻ると、１７０３において、フェッチ／受信されたＹＡＢＯＲＴ命令がデコードされる。いくつかの実施形態において、命令は、後述のようなハードウェアデコーダによってデコードされる。いくつかの実施形態において、命令はマイクロオペレーション（マイクロｏｐ）へとデコードされる。例えば、一部のＣＩＳＣベースの機械は通常、マクロ命令から派生したマイクロオペレーションを使用する。他の実施形態において、デコーディングは、ジャストインタイムコンパイル等のソフトウェアルーチンの一部である。
【０１６６】
１７０５において、デコードされたＹＡＢＯＲＴ命令に関連付けられた任意のオペランドが取得される。例えば、ＤＳＸレジスタおよび／またはＲＴＭ状態レジスタのうちの１または複数からデータが取得される。
【０１６７】
１７０７において、デコードされたＹＡＢＯＲＴ命令が実行される。命令がマイクロｏｐへとデコードされる実施形態においては、これらのマイクロｏｐが実行される。デコードされた命令の実行は、ハードウェアに対し、実行されるべき次の動作のうちの１または複数を実行させる。すなわち、１）ＲＴＭトランザクションがアクティブであることを判断し且つＲＴＭトランザクションをアボートする、２）ＤＳＸがアクティブでないことを判断し且つ処理を実行しない、および／または３）任意のＤＳＸネストカウントをリセットし、すべての投機的に実行された書き込みを破棄し、ＤＳＸ状態を非アクティブに設定し且つ実行をフォールバックアドレスにロールバックすることによってＤＳＸをアボートする。
【０１６８】
第１の動作に関し、ＲＴＭ状態は通常、ＲＴＭ状態および制御レジスタ内に格納される。このレジスタが、ＲＴＭトランザクションが発生していることを示す場合、ＹＡＢＯＲＴ命令が実行されるべきではなかった。よって、ＲＴＭトランザクションに関し問題が存在した場合、それはアボートするべきである。
【０１６９】
上記の通り、第２の動作および第３の動作に関し、ＤＳＸの状態は通常、図１に関し記載されたＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のレジスタのようなアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。このレジスタは、コアのハードウェアによってチェックされ、ＤＳＸが実際に発生していたかどうかが判断されてよい。このレジスタによって示されるＤＳＸが存在しない場合、ＹＡＢＯＲＴ命令を実行する理由は存在せず、よって何も処理が実行されない（または同様の処理）。このレジスタによって示されるＤＳＸが存在する場合、ＤＳＸ追跡ハードウェアのリセット、すべての格納された投機的に実行された書き込みの破棄、ＤＳＸ状態の非アクティブのリセット、および実行のロールバックを含む、ＤＳＸアボート処理が発生する。
【０１７０】
図１９は、ＹＡＢＯＲＴ命令等の命令の実行に係る詳細な実施形態を示す。例えば、いくつかの実施形態において、このフローは図１７のボックス１７０７である。いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０１７１】
例えば、ＲＴＭトランザクションをサポートするプロセッサのいくつかの実施形態において、１９０１において、ＲＴＭトランザクションが発生しているかどうかの判断がなされる。例えば、ＲＴＭをサポートするプロセッサのいくつかの実施形態において、ＲＴＭトランザクションがアクティブであった場合、もともとＤＳＸアクティブが生じるべきではなかった。この例では、ＲＴＭトランザクションにおいて何らかの問題が発生し、その終了手順がアクティブ化されるべきである。通常、ＲＴＭトランザクションの状態はＲＴＭ制御および状態レジスタ等のレジスタに格納される。プロセッサのハードウェアは、このレジスタの内容を評価し、ＲＴＭトランザクションが発生しているかどうかを判断する。ＲＴＭトランザクションが発生している場合、１９０３において、ＲＴＭトランザクションは処理を続行する。
【０１７２】
ＲＴＭトランザクションが発生していない場合、またはＲＴＭがサポートされていない場合、１９０５において、ＤＳＸがアクティブかどうかの判断がなされる。ＤＳＸの状態は通常、図１に関し記載したＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。このレジスタは、コアのハードウェアによってチェックされ、ＤＳＸが実際に発生していたかどうかが判断されてよい。
【０１７３】
このレジスタによって示されるＤＳＸが存在しない場合、１９０７において、処理が実行されない。このレジスタによって示されるＤＳＸが存在する場合、１９０９において、ＤＳＸ追跡ハードウェアのリセット、すべての格納された投機的に実行された書き込みの破棄、ＤＳＸ状態の非アクティブへのリセットおよび実行のロールバックを含む、ＤＳＸアボート処理が発生する。
【０１７４】
図２０は、ＹＡＢＯＲＴ命令等の命令の実行を示す擬似コードの例を示す。
【０１７５】
［ＹＴＥＳＴ命令］
【０１７６】
一般に、ソフトウェアが新しいＤＳＸ投機的領域を開始する前に、ＤＳＸがアクティブか否かを認識することが望ましい。図２１は、ＤＳＸの状態をテストする命令の実行に係る一実施形態を示す。本明細書で記載の通り、この命令は「ＹＴＥＳＴ」として称され、フラグの使用を通して、ＤＳＸがアクティブであるという指標を提供するために使用される。もちろん、当該命令は別の名前で称されてもよい。
【０１７７】
いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０１７８】
２１０１において、ＹＴＥＳＴ命令が受信／フェッチされる。例えば、命令はメモリから命令キャッシュへフェッチされ、または命令キャッシュからフェッチされる。フェッチされた命令は、いくつかの形式のうちの１つを取ってよい。図２２は、ＹＴＥＳＴ命令フォーマットのいくつかの例示的な実施形態を示す。２２０１に図示の通り、一実施形態において、ＹＴＥＳＴ命令は、オペコード（ＹＴＥＳＴ）を含むが、明示的オペランドは含まない。ＤＳＸ状態レジスタおよびフラグレジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）。例示的なフラグレジスタとしては、ＥＦＬＡＧＳレジスタが含まれる。特に、当該フラグレジスタは、ゼロフラグ（ＺＦ）を格納する。
【０１７９】
２２０３に図示の通り、別の実施形態においては、ＹＴＥＳＴ命令はオペコードのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態に対する明示的オペランドも含む。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタ等のような全体的な状態レジスタ等）。フラグレジスタに対する暗示的オペランドが使用される。例示的なフラグレジスタとしては、ＥＦＬＡＧＳレジスタが含まれる。特に、当該フラグレジスタはゼロフラグ（ＺＦ）を格納する。
【０１８０】
２２０５に図示の通り、別の実施形態においては、ＹＴＥＳＴ命令はオペコードのみでなく、フラグレジスタに対する明示的オペランドも含む。例示的なフラグレジスタとしては、ＥＦＬＡＧＳレジスタが含まれる。特に、当該フラグレジスタは、ゼロフラグ（ＺＦ）を格納する。ＤＳＸ状態レジスタに対する暗示的オペランドが使用される。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）。
【０１８１】
２２０７に図示の通り、別の実施形態においては、ＹＴＥＳＴ命令はオペコードのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態およびフラグレジスタに対する明示的オペランドも含む。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタのような全体的な状態レジスタ等）。フラグレジスタに対する暗示的オペランドが使用される。例示的なフラグレジスタとしては、ＥＦＬＡＧＳレジスタが含まれる。特に、当該フラグレジスタは、ゼロフラグ（ＺＦ）を格納する。
【０１８２】
図２１の参照に戻ると、２１０３において、フェッチ／受信されたＹＴＥＳＴ命令がデコードされる。いくつかの実施形態において、命令は、後述のようなハードウェアデコーダによってデコードされる。いくつかの実施形態において、命令はマイクロオペレーション（マイクロｏｐ）へとデコードされる。例えば、一部のＣＩＳＣベースの機械は通常、マクロ命令から派生したマイクロオペレーションを使用する。他の実施形態において、デコーディングは、ジャストインタイムコンパイル等のソフトウェアルーチンの一部である。
【０１８３】
２１０５において、デコードされたＹＴＥＳＴ命令に関連付けられた任意のオペランドが取得される。例えば、ＤＳＸ状態レジスタからデータが取得される。
【０１８４】
２１０７において、デコードされたＹＴＥＳＴ命令が実行される。命令がマイクロｏｐへとデコードされる実施形態においては、これらのマイクロｏｐが実行される。デコードされた命令の実行は、ハードウェアに対し、実行されるべき次の動作のうちの１または複数を実行させる。すなわち、１）ＤＳＸ状態レジスタが、ＤＳＸがアクティブであると示すことを判断し、そうであれば、フラグレジスタ内のゼロフラグを０に設定する、または２）ＤＳＸ状態レジスタが、ＤＳＸがアクティブでないと示すこと判断し、そうであれば、フラグレジスタ内のゼロフラグを１に設定する。もちろん、ＤＳＸがアクティブな状態を示すためにゼロフラグが使用される一方で、実施形態に応じ、他のフラグが使用される。
【０１８５】
図２３は、ＹＴＥＳＴ命令等の命令の実行を示す擬似コードの例を示す。
【０１８６】
［ＹＥＮＤ命令］
【０１８７】
ＤＳＸが問題なく終了すると（例えば、ループのイタレーションが最後まで実行された）、いくつかの実施形態において、投機的領域の終了を示すための命令が実行される。つまり、この命令の実行は、現在の投機的状態のコミットメント（書き込まれていないすべての書き込み）および現在の投機的領域からの終了を発生させる。
【０１８８】
図２４は、ＤＳＸを終了させる命令の実行に係る一実施形態を示す。本明細書に記載の通り、この命令は「ＹＥＮＤ」と称され、ＤＳＸの終了をシグナリングするために使用される。もちろん、当該命令は別の名前で称されてもよい。
【０１８９】
いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０１９０】
２４０１において、ＹＥＮＤ命令が受信／フェッチされる。例えば、命令はメモリから命令キャッシュへフェッチされ、または命令キャッシュからフェッチされる。フェッチされた命令は、いくつかの形式のうちの１つを取ってよい。図２５は、ＹＥＮＤ命令フォーマットのいくつかの例示的な実施形態を示す。２５０１に図示の通り、一実施形態において、ＹＥＮＤ命令は、オペコード（ＹＥＮＤ）を含むが、明示的オペランドは含まない。ＹＥＮＤ実装に応じ、ＤＳＸ状態、ネストカウントおよび／またはＲＴＭ状態に対する暗示的レジスタオペランドが使用される。
【０１９１】
２５０３に図示の通り、別の実施形態においては、ＹＥＮＤ命令はオペコードのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態に対する明示的オペランドも含む。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタ等のような全体的な状態レジスタ等）。ＹＥＮＤ実装に応じ、ネストカウントおよび／またはＲＴＭ状態に対する暗示的レジスタオペランドが使用される。
【０１９２】
２５０５に図示の通り、別の実施形態においては、ＹＥＮＤ命令はオペコードのみでなく、ＤＳＸネストカウントレジスタ等のＤＳＸネストカウントに対する明示的オペランドも含む。上記の通り、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）。ＹＥＮＤ実装に応じ、ＤＳＸ状態および／またはＲＴＭ状態に対する暗示的レジスタオペランドが使用される。
【０１９３】
２５０７に図示の通り、別の実施形態においては、ＹＥＮＤ命令はオペコードのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態およびＤＳＸネストカウントレジスタ等のＤＳＸネストカウントに対する明示的オペランドも含む。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタ等のような全体的な状態レジスタ等）。そして、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）。ＹＥＮＤ実装に応じ、ＲＴＭ状態レジスタに対する暗示的オペランドが使用される。
【０１９４】
２５０９に図示の通り、別の実施形態においては、ＹＥＮＤ命令はオペコードのみでなく、ＤＳＸ状態レジスタ等のＤＳＸ状態およびＤＳＸネストカウントレジスタ等のＤＳＸネストカウントおよびＲＴＭ状態に対する明示的オペランドも含む。上記の通り、ＤＳＸ状態レジスタは専用レジスタであってよく、レジスタ内のフラグはＤＳＸ状態に専用でなくてもよい（フラグレジスタ等のような全体的な状態レジスタ等）。そして、ＤＳＸネストカウントは専用レジスタであってよく、レジスタ内のフラグはＤＳＸネストカウントに専用でなくてもよい（全体的な状態レジスタ等）。
【０１９５】
図２４の参照に戻ると、２４０３において、フェッチ／受信されたＹＥＮＤ命令がデコードされる。いくつかの実施形態において、命令は、後述のようなハードウェアデコーダによってデコードされる。いくつかの実施形態において、命令はマイクロオペレーション（マイクロｏｐ）へとデコードされる。例えば、一部のＣＩＳＣベースの機械は通常、マクロ命令から派生したマイクロオペレーションを使用する。他の実施形態において、デコーディングは、ジャストインタイムコンパイル等のソフトウェアルーチンの一部である。
【０１９６】
２４０５において、デコードされたＹＥＮＤ命令に関連付けられた任意のオペランドが取得される。例えば、ＤＳＸレジスタ、ＤＳＸネストカウントレジスタおよび／またはＲＴＭ状態レジスタのうちの１または複数からデータが取得される。
【０１９７】
２４０７において、デコードされたＹＥＮＤ命令が実行される。命令がマイクロｏｐの中にデコードされる実施形態においては、これらのマイクロｏｐが実行される。デコードされた命令の実行は、ハードウェアに対し、実行されるべき以下の動作のうちの１または複数を実行させる。すなわち、１）ＤＳＸに関連付けられた投機的書き込みを確定する（それらをコミットする）、２）エラー（一般保護違反等）をシグナリングし、且つ処理を実行しない、３）ＤＳＸをアボートする、および／または４）ＲＴＭトランザクションを終了する。
【０１９８】
これらの動作のうちの第１のもの（投機的書き込みを確定する）は、ＤＳＸに関連付けられたすべての投機的書き込みがコミットされるようにし（それらがＤＳＸ外部からアクセス可能なように格納される）、ＤＳＸがＤＳＸ状態レジスタ内に存在しないことを示すためのＤＳＸ状態が設定される。例えば、ＤＳＸに関連付けられたすべての書き込み（キャッシュ、レジスタまたはメモリ内に格納されたもの）がコミットされ、その結果、それらが確定され且つＤＳＸの外部から可視であるようにされる。通常、その投機実行のネストカウントがゼロである場合を除き、ＤＳＸは確定できない。ネストカウントがゼロより大きい場合、いくつかの実施形態においては、処理が実行されない。
【０１９９】
ＤＳＸを確定できない何らかの理由が存在した場合、他の３つの潜在的な動作のうちの１または複数が行われる。例えば、ＲＴＭをサポートするプロセッサのいくつかの実施形態において、ＲＴＭトランザクションがアクティブであった場合、もともとＤＳＸアクティブが生じるべきではなかった。この例では、ＲＴＭトランザクションにおいて何らかの問題が発生し、その終了手順が、上記の第４の動作によって示される通りアクティブ化されるべきである。
【０２００】
いくつかの実施形態において、ＤＳＸが存在しなかった場合、エラーが生成され、処理が実行されない（ＮＯＰ）。例えば、上記の通り、ＤＳＸの状態は通常、図１に関し記載されたＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等のレジスタのようなアクセス可能な位置に格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。このレジスタは、コアのハードウェアによってチェックされ、ＤＳＸが実際に発生していたかどうかが判断されてよい。
【０２０１】
いくつかの実施形態において、トランザクションのコミットにおいてエラーが存在する場合、アボート手順が実装される。例えば、ＲＴＭをサポートするプロセッサのいくつかの実施形態においては、ＲＴＭアボート手順がアクティブ化される。
【０２０２】
どの動作が実行されるかに関わらず、多くの実施形態において、その動作の後、保留中のＤＳＸが存在しないことを示すために、ＤＳＸ状態がリセット（設定されていた場合）される。
【０２０３】
図２６は、ＹＥＮＤ命令等の命令の実行に係る詳細な実施形態を示す。例えば、いくつかの実施形態において、このフローは、図２４のボックス２４０７である。いくつかの実施形態において、この実行は、中央処理装置（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等のハードウェアデバイスの１または複数のハードウェアコアに対し実行される。他の実施形態においては、当該命令の実行はエミュレーションである。
【０２０４】
例えば、ＲＴＭトランザクションをサポートするプロセッサのいくつかの実施形態においては、２６０１において、ＲＴＭトランザクションが発生しているかどうかの判断がなされる。例えば、ＲＴＭをサポートするプロセッサのいくつかの実施形態において、ＲＴＭトランザクションがアクティブであった場合、もともとＤＳＸアクティブが生じるべきではなかった。この例では、ＲＴＭトランザクションにおいて何らかの問題が発生し、その終了手順がアクティブ化されるべきである。通常、ＲＴＭトランザクションの状態はＲＴＭ制御および状態レジスタ等のレジスタに格納される。プロセッサのハードウェアは、このレジスタの内容を評価し、ＲＴＭトランザクションが発生しているかどうかを判断する。
【０２０５】
ＲＴＭトランザクションが発生している場合、２６０３において、そのＲＴＭトランザクションを終了させる呼び出しがなされる。例えば、ＲＴＭトランザクションを終了させる命令が呼び出され、実行される。このような命令の例として、ＸＥＮＤが挙げられる。
【０２０６】
ＲＴＭトランザクションが発生していない場合、２６０５において、ＤＳＸがアクティブかどうかの判断がなされる。上記の通り、ＤＳＸ状態は通常、図１中に示されるＤＳＸ状態および制御レジスタ（ＤＳＸＳＲ）等の制御レジスタに格納される。しかしながら、専用ではない制御／状態レジスタ（フラグレジスタ等）内のＤＳＸ状態フラグ等の他の手段が利用されてもよい。状態がどこに格納されるかに関わらず、位置はプロセッサのハードウェアによってチェックされ、ＤＳＸが実際に発生していたかどうかが判断される。
【０２０７】
ＤＳＸが発生していない場合、２６０７において、エラーが生成される。例えば、一般保護違反が生成される。また、いくつかの実施形態においては、処理が実行されない（ｎｏｐ）。
【０２０８】
ＤＳＸが発生している場合、２６０９において、ＤＳＸネストカウントがデクリメントされる。例えば、上記のようなＤＳＸネストカウントレジスタに格納されたＤＳＸネストカウントがデクリメントされる。
【０２０９】
２６１１において、ＤＳＸネストカウントがゼロに等しいかどうかの判断がなされる。上記の通り、ＤＳＸネストカウントは通常、レジスタ内に格納される。ＤＳＸネストカウントがゼロでない場合、いくつかの実施形態において、処理が実行されない。ＤＳＸネストカウントがゼロの場合、２６１５において、現在のＤＳＸの投機的状態は確定され、コミットされる。
【０２１０】
２６１７において、コミットメントが成功したかどうかの判断がなされる。例えば、格納されたエラーが存在したかどうか？といったものである。存在しなかった場合、２６２１において、ＤＳＸがアボートされる。コミットメントが成功した場合、２６１９において、アクティブなＤＳＸが存在しないことを示すためのＤＳＸ状態指標（ＤＳＸ状態および制御レジスタ内に格納されるもの等）が設定される。いくつかの実施形態においては、この指標の設定は、２６０７のエラーの生成または２６２１のＤＳＸのアボートの後に行われる。
【０２１１】
図２７は、ＹＥＮＤ命令等の命令の実行を示す擬似コードの例を示す。
【０２１２】
命令フォーマットの実施形態および上記命令を実行するための実行リソースについて以下記載する。
【０２１３】
命令セットは、１または複数の命令フォーマットを含む。特定の命令フォーマットは、とりわけ、実行されるべき演算（オペコード）およびその演算が実行されるべきオペランドを指定するための様々なフィールド（ビット数、ビット位置）を定義する。いくつかの命令フォーマットは、命令テンプレート（またはサブフォーマット）の定義を通して、さらに細分化されている。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく（含まれるフィールドは通常、同一順序であるが、少なくともいくつかは、含まれるフィールド数がより少ないので、異なるビット位置を有する）、および／または、異なって解釈される特定のフィールドを有するように定義されてよい。故に、ＩＳＡの各命令は、特定の命令フォーマット（また、定義されている場合には、その命令フォーマットの命令テンプレートのうちの特定の１つにおいて）を使用して表現され、演算およびオペランドを指定するためのフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコード並びにそのオペコードを指定するためのオペコードフィールドおよびオペランド（ソース１／デスティネーションおよびソース２）を選択するためのオペランドフィールドを含む命令フォーマットを有する。命令ストリーム内にこのＡＤＤ命令が出現すると、特定のオペランドを選択するオペランドフィールド内に特定の内容を有することになる。アドバンストベクトル拡張（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と称され、ベクトル拡張（ＶＥＸ）コーディングスキームを使用するＳＩＭＤ拡張のセットがリリースおよび／または公開されている（例えば、２０１１年１０月のインテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェアデベロッパーズマニュアル並びに２０１１年６月のインテル（登録商標）アドバンストベクトル拡張プログラミングリファレンスを参照）。
【０２１４】
［例示的命令フォーマット］
【０２１５】
本明細書に記載の命令の実施形態は異なる形式で具現化されてよい。また、例示的なシステム、アーキテクチャおよびパイプラインについて詳細に後述する。本命令の実施形態は、このようなシステム、アーキテクチャおよびパイプライン上で実行されてよいが、本発明の実施形態はそれらの具体的な内容に限定されるわけではない。
【０２１６】
［汎用ベクトル向け命令フォーマット］
【０２１７】
ベクトル向け命令フォーマットとは、ベクトル命令に好適な命令フォーマットである（例えば、ベクトル演算に特有の所定のフィールドが存在する）。実施形態は、ベクトル演算およびスカラ演算の両方がベクトル向け命令フォーマットを通してサポートされるように記載されているものの、代替的な実施形態は、ベクトル向け命令フォーマットのベクトル演算のみ使用する。
【０２１８】
図２８Ａ〜２８Ｂは、本発明の実施形態による、汎用ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。図２８Ａは、本発明の実施形態による汎用ベクトル向け命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図であり、これに対し、図２８Ｂは、本発明の実施形態による汎用ベクトル向け命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。具体的には、汎用ベクトル向け命令フォーマット２８００に対し、クラスＡ命令テンプレートおよびクラスＢ命令テンプレートが定義され、クラスＡ命令テンプレートおよびクラスＢ命令テンプレートは両方とも、メモリアクセスなし２８０５命令テンプレートおよびメモリアクセス２８２０命令テンプレートを含む。ベクトル向け命令フォーマットの文脈における汎用（ｇｅｎｅｒｉｃ）いう用語は、いずれの固有の命令セットにも関連付けられない命令フォーマットを指す。
【０２１９】
本発明の実施形態は、ベクトル向け命令フォーマットが次のものをサポートするように記載されている。すなわち、３２ビット（４バイト）または６４ビット（８バイト）データ要素幅（またはサイズ）を備えた６４バイトベクトルオペランド長（またはサイズ）（つまり、６４バイトベクトルは、１６個のダブルワードサイズの要素または代替的に８個のクワッドワードサイズの要素のいずれかから成る）；１６ビット（２バイト）または８ビット（１バイト）データ要素幅（またはサイズ）を備えた６４バイトベクトルオペランド長（またはサイズ）；３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）または８ビット（１バイト）データ要素幅（またはサイズ）を備えた３２バイトベクトルオペランド長（またはサイズ）；および３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）または８ビット（１バイト）データ要素幅（またはサイズ）を備えた１６バイトベクトルオペランド長（またはサイズ）。一方で、代替的な実施形態は、より多い、より少ない、または異なるデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を備えたより多い、より少ない、および／または異なるベクトルオペランドサイズ（例えば、２５６バイトベクトルオペランド）をサポートしてよい。
【０２２０】
図２８Ａ中のクラスＡ命令テンプレートには次のものが含まれる。すなわち、１）メモリアクセスなし２８０５命令テンプレート内に、メモリアクセスなし、完全ラウンド制御タイプ演算２８１０命令テンプレートおよびメモリアクセスなし、データ変換タイプ演算２８１５命令テンプレートが存在するように図示されている。２）メモリアクセス２８２０命令テンプレート内に、メモリアクセス、一時的２８２５命令テンプレートおよびメモリアクセス、非一時的２８３０命令テンプレートが存在するように図示されている。図２８Ｂ中のクラスＢ命令テンプレートには次のものが含まれる。すなわち、１）メモリアクセスなし２８０５命令テンプレート内に、メモリアクセスなし、書き込みマスク制御、部分的ラウンド制御タイプ演算２８１２命令テンプレートおよびメモリアクセスなし、書き込みマスク制御、ｖｓｉｚｅタイプ演算２８１７命令テンプレートが存在するように図示されている。２）メモリアクセス２８２０命令テンプレート内に、メモリアクセス、書き込みマスク制御２８２７命令テンプレートが存在するように図示されている。
【０２２１】
汎用ベクトル向け命令フォーマット２８００は、以下に挙げられるフィールドを図２８Ａおよび図２８Ｂ中に図示される順序で含む。
【０２２２】
フォーマットフィールド２８４０。このフィールド内の特定値（命令フォーマット識別子の値）は、ベクトル向け命令フォーマットを一意に識別し、故に命令ストリームのベクトル向け命令フォーマットの命令の出現を一意に識別する。よって、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには不要であるという意味において任意的である。
【０２２３】
ベース演算フィールド２８４２。その内容が、異なるベース演算を区別する。
【０２２４】
レジスタインデックスフィールド２８４４。その内容が、直接的にまたはアドレス生成を介して、ソースオペランドおよびデスティネーションオペランドの位置を指定する。それらはレジスタ内またはメモリ内である。これらは、ＰｘＱ（例えば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）レジスタファイルからＮ個のレジスタを選択するための十分なビット数を含む。一実施形態において、Ｎは最大３つのソースレジスタおよび１つのデスティネーションレジスタであってよく、一方で、代替的な実施形態は、それより多いまたは少ないソースレジスタおよびデスティネーションレジスタをサポートしてよい（例えば、最大２つのソースをサポートしてよく、この場合、これらのソースのうちの１つがデスティネーションとしても動作する。最大３つのソースをサポートしてよく、この場合、これらのソースのうちの１つがデスティネーションとしても動作する。最大２つのソースおよび１つのデスティネーションをサポートしてよい）。
【０２２５】
修飾子フィールド２８４６。その内容が、汎用ベクトル命令フォーマットの、メモリアクセスを指定する命令の出現を、メモリアクセスを指定しないものから区別する。すなわち、メモリアクセスなし２８０５命令テンプレートおよびメモリアクセス２８２０命令テンプレート間を区別する。メモリアクセス操作はメモリ階層に対し、読み取りおよび／または書き込みを行う（場合によっては、レジスタ内の値を使用してソースアドレスおよび／またはデスティネーションアドレスを指定する）が、メモリアクセスなし操作はそれを行わない（例えば、ソースおよびデスティネーションはレジスタである）。一実施形態において、このフィールドはまたメモリアドレス計算を実行するための３つの異なる方法の中で選択をする一方で、代替的な実施形態は、メモリアドレス計算を実行するためのより多い、より少ないまたは異なる方法をサポートしてよい。
【０２２６】
拡張演算フィールド２８５０。その内容が、ベース演算に加え、様々な異なる演算のうちどれが実行されるべきかを区別する。このフィールドは、コンテキストに特有のものである。本発明の一実施形態において、このフィールドは、クラスフィールド２８６８、アルファフィールド２８５２およびベータフィールド２８５４に分割される。拡張演算フィールド２８５０は、２、３または４の命令ではなく、単一の命令において共通の演算グループが実行されることを可能にする。
【０２２７】
スケールフィールド２８６０。その内容が、メモリアドレス生成（例えば、２ｓｃａｌｅ＊インデックス＋ベースを使用するアドレス生成について）のためのインデックスフィールドの内容のスケーリングを可能にする。
【０２２８】
変位フィールド２８６２Ａ。その内容が、メモリアドレス生成（例えば、２ｓｃａｌｅ＊インデックス＋ベース＋変位を使用するアドレス生成について）の一部として使用される。
【０２２９】
変位係数フィールド２８６２Ｂ（変位係数フィールド２８６２Ｂ上に直接、変位フィールド２８６２Ａが並置されていることで、一方または他方が使用されることを示すことに留意されたい）。その内容が、アドレス生成の一部として使用される。その内容は、メモリアクセス（Ｎ）のサイズに応じてスケーリングされるべき変位係数を指定する。ここでＮは、メモリアクセス（例えば、２ｓｃａｌｅ＊インデックス＋ベース＋スケールされた変位を使用するアドレス生成について）におけるバイト数である。冗長下位ビットは無視され、従って、変位係数フィールドの内容は、有効アドレスの計算に使用される最終的な変位を生成すべく、メモリオペランドの合計サイズ（Ｎ）によって乗算される。Ｎの値は、フルオペコードフィールド２８７４（本明細書で後述の）およびデータ操作フィールド２８５４Ｃに基づいて、ランタイムでプロセッサハードウェアによって判断される。変位フィールド２８６２Ａおよび変位係数フィールド２８６２Ｂは、それらがメモリアクセスなし２８０５命令テンプレートには使用されない、および／または、異なる実施形態がそれら２つのうちの一方のみを実装してよい、またはいずれも実装しなくてよいという意味において任意的である。
【０２３０】
データ要素幅フィールド２８６４。その内容が、複数のデータ要素幅のうちどれが使用されるべきかを区別する（いくつかの実施形態においては、すべての命令に対し、他の実施形態においては、命令の一部のみに対し）。１つのデータ要素幅のみがサポートされる、および／または、オペコードのいくつかの態様を使用して複数のデータ要素幅がサポートされる場合、このフィールドは不要であるという意味において、このフィールドは任意的なものである。
【０２３１】
書き込みマスクフィールド２８７０。その内容が、データ要素位置単位で、デスティネーションベクトルオペランド内のそのデータ要素位置が、ベース演算および拡張演算の結果を反映するかを制御する。クラスＡ命令テンプレートは、マージ‐書き込みマスクをサポートする一方で、クラスＢ命令テンプレートは、マージ‐書き込みマスクおよびゼロイング‐書き込みマスクの両方をサポートする。マージの場合、ベクトルマスクは、任意の演算の実行中、デスティネーション内のあらゆる要素セットが更新されないように保護されることを可能にする（ベース演算および拡張演算によって指定される）。他の一実施形態においては、対応するマスクビットが０を有する場合、デスティネーションの各要素の古い値が保持される。これと対照的に、ゼロイングの場合、ベクトルマスクは、任意の演算の実行中、デスティネーション内のあらゆる要素セットがゼロにされることを可能にする（ベース演算および拡張演算によって指定される）。一実施形態においては、対応するマスクビットが０値を有する場合、デスティネーションの要素は０に設定される。この機能のうちのサブセットで、実行される演算のベクトル長（すなわち、要素のスパンが第１のものから最後のものへと変更される）を制御できる。しかしながら、変更される要素は連続的であることは必要ではない。故に、書き込みマスクフィールド２８７０は、ロード、ストア、算術、論理等を含む部分的なベクトル演算を可能にする。本発明の実施形態は、書き込みマスクフィールド２８７０の内容は、複数の書き込みマスクレジスタのうち使用されるべき書き込みマスクを含むものを選択（故に、書き込みマスクフィールド２８７０の内容は、実行されるべきマスキングを間接的に識別する）するように記載されているものの、代替的な実施形態は、代替的または追加的に、マスク書き込みフィールド２８７０の内容が、実行されるべきマスキングを直接指定することを可能にする。
【０２３２】
即値フィールド２８７２。その内容が、即値の指定を可能にする。このフィールドは即値をサポートしない汎用ベクトル向けフォーマットの実装には存在しない、および、このフィールドは即値を使用しない命令内には存在しないという意味において、このフィールドは、任意的なものである。
【０２３３】
クラスフィールド２８６８。その内容が、異なるクラスの命令間を区別する。図２８Ａおよび図２８Ｂを参照すると、このフィールドの内容で、クラスＡ命令およびクラスＢ命令間を選択する。図２８Ａおよび図２８Ｂ中、特定値がフィールド内に存在することを示すために、隅が丸められた四角が使用されている（例えば、図２８Ａおよび図２８Ｂ中、クラスフィールド２８６８に対し、それぞれクラスＡ  ２８６８ＡおよびクラスＢ  ２８６８Ｂ）。
【０２３４】
［クラスＡの命令テンプレート］
【０２３５】
クラスＡのメモリアクセスなし２８０５命令テンプレートの場合、アルファフィールド２８５２はＲＳフィールド２８５２Ａとして解釈され、ＲＳフィールド２８５２Ａの内容が、異なる拡張演算タイプのうちどれが実行されるべきか（例えば、ラウンド２８５２Ａ．１およびデータ変換２８５２Ａ．２がそれぞれ、メモリアクセスなし、ラウンドタイプ演算２８１０命令テンプレートおよびメモリアクセスなし、データ変換タイプ演算２８１５命令テンプレートに対し指定される）を区別し、一方で、ベータフィールド２８５４は指定されるタイプの演算のうちどれが実行されるべきかを区別する。メモリアクセスなし２８０５命令テンプレートには、スケールフィールド２８６０、変位フィールド２８６２Ａおよび変位スケールフィールド２８６２Ｂは存在しない。
【０２３６】
［メモリアクセスなし命令テンプレート‐完全ラウンド制御タイプ演算］
【０２３７】
メモリアクセスなしの完全ラウンド制御タイプ演算２８１０命令テンプレートでは、ベータフィールド２８５４はラウンド制御フィールド２８５４Ａとして解釈され、ラウンド制御フィールド２８５４Ａの内容は静的ラウンドを提供する。本発明に記載の実施形態においては、ラウンド制御フィールド２８５４Ａは、すべての浮動小数点の例外を抑制（ＳＡＥ）フィールド２８５６およびラウンド演算制御フィールド２８５８を含み、一方で、代替的な実施形態は、これら両方の概念をサポートしてよく、且つこれら両方の概念を同一フィールドにエンコードしてよく、または代替的な実施形態はこれらの概念／フィールドのうちの一方または他方のみを有してよい（例えば、ラウンド演算制御フィールド２８５８のみを有してよい）。
【０２３８】
ＳＡＥフィールド２８５６。その内容が、例外イベント報告を無効にするか否かを区別する。ＳＡＥフィールド２８５６の内容が、抑制が有効になっていることを示す場合、特定の命令は、あらゆる種類の浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを発生させない。
【０２３９】
ラウンド演算制御フィールド２８５８。その内容が、ラウンド演算グループ（例えば、切り上げ、切り捨て、ゼロへの丸めおよび最近値への丸め）のうちどれが実行されるかを区別する。故に、ラウンド演算制御フィールド２８５８は、命令単位で、ラウンドモードの変更を可能にする。本発明の一実施形態において、プロセッサがラウンドモードを指定するための制御レジスタを含む場合、ラウンド演算制御フィールド２８５０の内容で、そのレジスタ値を上書きする。
【０２４０】
［メモリアクセスなし命令テンプレート‐データ変換タイプ演算］
【０２４１】
メモリアクセスなしのデータ変換タイプ演算２８１５命令テンプレートでは、ベータフィールド２８５４はデータ変換フィールド２８５４Ｂとして解釈され、データ変換フィールド２８５４Ｂの内容が、複数のデータ変換（例えば、データ変換なし、スウィズル、ブロードキャスト）のうちどれが実行されるべきかを区別する。
【０２４２】
クラスＡのメモリアクセス２８２０命令テンプレートの場合、アルファフィールド２８５２はエビクションヒントフィールド２８５２Ｂとして解釈され、エビクションヒントフィールド２８５２Ｂの内容が、エビクションヒントのうちどれが使用されるべきかを区別し（図２８Ａ中、一時的２８５２Ｂ．１および非一時的２８５２Ｂ．２がそれぞれ、メモリアクセスの一時的２８２５命令テンプレートおよびメモリアクセスの非一時的２８３０命令テンプレートに対し指定される）、一方で、ベータフィールド２８５４はデータ操作フィールド２８５４Ｃとして解釈され、データ操作フィールドの内容が、複数のデータ操作演算（プリミティブとしても知られる）のうちどれが実行されるべきかを区別する（例えば、操作なし、ブロードキャスト、ソースのアップコンバージョンおよびデスティネーションのダウンコンバージョン）。メモリアクセス２８２０命令テンプレートは、スケールフィールド２８６０を含み、随意で変位フィールド２８６２Ａまたは変位スケールフィールド２８６２Ｂを含む。
【０２４３】
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令の場合と同様、ベクトルメモリ命令は、データ要素全体でデータをメモリから／メモリへ転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクの内容によって記述されている。
【０２４４】
［メモリアクセス命令テンプレート‐一時的］
【０２４５】
一時的データとは、キャッシュから利益を十分得るために、間もなく再利用される可能性の高いデータのことである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、それを異なる方法で実装してよい。
【０２４６】
［メモリアクセス命令テンプレート‐非一時的］
【０２４７】
非一時的データとは、第１のレベルのキャッシュにおけるキャッシュから利益を十分得るために、間もなく再利用される可能性の低いデータのことであり、エビクションのための優先度が付与されるべきである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、それを異なる方法で実装してよい。
【０２４８】
［クラスＢの命令テンプレート］
【０２４９】
クラスＢの命令テンプレートの場合、アルファフィールド２８５２は書き込みマスク制御（Ｚ）フィールド２８５２Ｃとして解釈され、書き込みマスク制御（Ｚ）フィールド２８５２Ｃの内容が、書き込みマスクフィールド２８７０によって制御される書き込みマスキングが、マージであるべきか、またはゼロイングであるべきかを区別する。
【０２５０】
クラスＢのメモリアクセスなし２８０５命令テンプレートの場合、ベータフィールド２８５４の一部はＲＬフィールド２８５７Ａとして解釈され、ＲＬフィールド２８５７Ａの内容が、異なる拡張演算タイプのうちどれが実行されるべきかを区別し（例えば、ラウンド２８５７Ａ．１およびベクトル長（ＶＳＩＺＥ）２８５７Ａ．２がそれぞれ、メモリアクセスなし、書き込みマスク制御、部分的ラウンド制御タイプ演算２８１２命令テンプレートおよびメモリアクセスなし、書き込みマスク制御、ＶＳＩＺＥタイプ演算２８１７命令テンプレートに対し指定される）、一方で、ベータフィールド２８５４の残部が、指定されるタイプの演算のうちどれが実行されるべきかを区別する。メモリアクセスなし２８０５命令テンプレートには、スケールフィールド２８６０、変位フィールド２８６２Ａおよび変位スケールフィールド２８６２Ｂが存在しない。
【０２５１】
メモリアクセスなし、書き込みマスク制御、部分的ラウンド制御タイプ演算２８１０命令テンプレートでは、ベータフィールド２８５４の残部はラウンド演算フィールド２８５９Ａとして解釈され、例外イベント報告が無効にされる（特定の命令は、あらゆる種類の浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを発生させない）。
【０２５２】
ラウンド演算制御フィールド２８５９Ａ。まさにラウンド演算制御フィールド２８５８と同様、その内容が、ラウンド演算グループ（例えば、切り上げ、切り捨て、ゼロへの丸めおよび最近値への丸め）のうちどれが実行されるかを区別する。故に、ラウンド演算制御フィールド２８５９Ａは、命令単位で、ラウンドモードの変更を可能にする。本発明の一実施形態において、プロセッサがラウンドモードを指定するための制御レジスタを含む場合、ラウンド演算制御フィールド２８５０の内容で、そのレジスタ値を上書きする。
【０２５３】
メモリアクセスなし、書き込みマスク制御、ＶＳＩＺＥタイプ演算２８１７命令テンプレートでは、ベータフィールド２８５４の残部はベクトル長フィールド２８５９Ｂとして解釈され、ベクトル長フィールド２８５９Ｂの内容が、複数のデータベクトル長のうちのどれ（例えば、１２８、２５６または５１２バイト）に実行されるべきかを区別する。
【０２５４】
クラスＢのメモリアクセス２８２０命令テンプレートの場合、ベータフィールド２８５４の一部はブロードキャストフィールド２８５７Ｂとして解釈され、ブロードキャストフィールド２８５７Ｂの内容が、ブロードキャストタイプのデータ操作演算が実行されるか否かを区別し、一方で、ベータフィールド２８５４の残部はベクトル長フィールド２８５９Ｂとして解釈される。メモリアクセス２８２０命令テンプレートは、スケールフィールド２８６０を含み、随意で変位フィールド２８６２Ａまたは変位スケールフィールド２８６２Ｂを含む。
【０２５５】
汎用ベクトル向け命令フォーマット２８００に関しては、フルオペコードフィールド２８７４は、フォーマットフィールド２８４０、ベース演算フィールド２８４２およびデータ要素幅フィールド２８６４を含むように表示されている。一実施形態は、フルオペコードフィールド２８７４がこれらのフィールドのうちすべてを含むように示されているものの、これらのフィールドのすべてをサポートしない実施形態においては、フルオペコードフィールド２８７４は、これらのフィールドのすべてより少ない数を含む。フルオペコードフィールド２８７４は、オペレーションコード（オペコード）を提供する。
【０２５６】
拡張演算フィールド２８５０、データ要素幅フィールド２８６４および書き込みマスクフィールド２８７０は、汎用ベクトル向け命令フォーマット内でこれらの機能が、命令単位で指定されることを可能にする。
【０２５７】
書き込みマスクフィールドおよびデータ要素幅フィールドの組み合わせで、異なるデータ要素幅に基づいてマスクが適用されることを可能にするタイプの命令を作成する。
【０２５８】
クラスＡおよびクラスＢ内に存在する様々な命令テンプレートは、異なる状況において有益である。本発明のいくつかの実施形態において、あるプロセッサ内の異なる複数のプロセッサまたは異なるコアが、クラスＡのみ、クラスＢのみ、またはこれら両方のクラスをサポートしてよい。例えば、汎用コンピューティング向け高性能な汎用アウトオブオーダコアはクラスＢのみをサポートしてよく、主にグラフィックおよび／または科学技術（スループット）コンピューティング向けのコアはクラスＡのみをサポートしてよく、これら両方向けのコアは両方をサポートしてよい（もちろん、両方のクラスのテンプレートおよび命令がいくつか混在したものを有するが、両方のクラスのすべてのテンプレートおよび命令を有さないコアは、本発明の範囲に属する）。また、単一のプロセッサが複数のコアを含んでよく、それらのすべてが同一クラスをサポートし、またはそれらのうち異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックコアおよび汎用コアを備えるプロセッサでは、主にグラフィックおよび／または科学技術コンピューティング向けのグラフィックコアのうちの１つはクラスＡのみをサポートしてよく、一方で、汎用コアのうちの１または複数は、クラスＢのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行およびレジスタリネーミングを備えた高性能な汎用コアであってよい。別個のグラフィックコアを有さない別のプロセッサは、クラスＡおよびクラスＢの両方をサポートする１または複数の汎用インオーダまたはアウトオブオーダコアを含んでよい。もちろん、本発明の異なる実施形態において、一方のクラスに属する諸機能が、他方のクラスに実装されてもよい。高水準言語で記述されるプログラムは、様々な異なる実行可能な形式になされるであろう（例えば、ジャストインタイムコンパイルまたは静的コンパイル）。それらの形式としては、１）実行のためにターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または２）すべてのクラスの命令の異なる組み合わせを使用して記述された代替的なルーチンを有し且つ現在コードを実行中のプロセッサによってサポートされる命令に基づき、実行するルーチンを選択する制御フローコードを有する形式が含まれる。
【０２５９】
［例示的な特定ベクトル向け命令フォーマット］
【０２６０】
図２９は、本発明の実施形態による、例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図２９は特定ベクトル向け命令フォーマット２９００を示す。特定ベクトル向け命令フォーマット２９００は、場所、サイズ、解釈およびフィールド順序に加え、これらのフィールドの一部の値を指定するという意味において特定的である。特定ベクトル向け命令フォーマット２９００は、ｘ８６命令セットを拡張するために使用されてよく、よって、当該フィールドのうちのいくつかは、既存のｘ８６命令セットおよびその拡張（例えば、ＡＶＸ）で使用されるフィールドと類似または同一である。このフォーマットは、いくつかの拡張を備えた既存のｘ８６命令セットのプレフィクスエンコーディングフィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールドおよび即値フィールドと、整合性が維持されている。図２８のフィールドが図２９のどのフィールドにマッピングされるかが図示されている。
【０２６１】
本発明の実施形態は、例示目的で、汎用ベクトル向け命令フォーマット２８００に照らし特定ベクトル向け命令フォーマット２９００に関し説明されているものの、本発明は特許請求される場合を除き、特定ベクトル向け命令フォーマット２９００には限定されないことを理解されたい。例えば、特定ベクトル向け命令フォーマット２９００は特定のサイズのフィールドを有するように図示されているものの、汎用ベクトル向け命令フォーマット２８００は、様々なフィールドについて様々な考え得るサイズを想定している。特定の例示であるが、データ要素幅フィールド２８６４は、特定ベクトル向け命令フォーマット２９００では１ビットフィールドとして図示されているものの、本発明はそのようには限定されない（すなわち、汎用ベクトル向け命令フォーマット２８００は、データ要素幅フィールド２８６４の他のサイズを想定している）。
【０２６２】
特定ベクトル向け命令フォーマット２９００は、以下に挙げられるフィールドを図２９Ａに図示される順序で含む。
【０２６３】
ＥＶＥＸプレフィクス（バイト０〜３）２９０２。これは４バイト形式でエンコードされる。
【０２６４】
フォーマットフィールド２８４０（ＥＶＥＸバイト０、ビット［７：０］）。第１のバイト（ＥＶＥＸバイト０）はフォーマットフィールド２８４０であり、フォーマットフィールド２８４０は０ｘ６２を含む（本発明の一実施形態において、ベクトル向け命令フォーマットを区別するために使用される一意の値）。
【０２６５】
第２から第４のバイト（ＥＶＥＸバイト１〜３）は、特定の機能を提供する複数のビットフィールドを含む。
【０２６６】
ＲＥＸフィールド２９０５（ＥＶＥＸバイト１、ビット［７‐５］）。これはＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］‐Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］‐Ｘ）および２８５７ＢＥＸバイト１、ビット［５］‐Ｂ）から成る。ＥＶＥＸ．Ｒビットフィールド、ＥＶＥＸ．ＸビットフィールドおよびＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同一の機能を提供し、それらは１の補数形式を使用してエンコードされ、すなわちＺＭＭ０は１１１１Ｂとしてエンコードされ、ＺＭＭ１５は００００Ｂとしてエンコードされる。命令の他のフィールドは、レジスタインデックスの下位３ビットを当該技術分野で既知の方法（ｒｒｒ、ｘｘｘおよびｂｂｂ）でエンコードし、その結果、Ｒｒｒｒ、ＸｘｘｘおよびＢｂｂｂが、ＥＶＥＸ．Ｒ、ＥＶＥＸ．ＸおよびＥＶＥＸ．Ｂを追加することによって形成されてよい。
【０２６７】
ＲＥＸ'フィールド２９１０。これはＲＥＸ'フィールド２９１０の第１の部分であり、拡張３２レジスタセットの上位１６または下位１６のいずれかをエンコードするために使用されるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］‐Ｒ'）である。本発明の一実施形態において、以下に示される他のものと共にこのビットは、ビット反転フォーマットで格納され、ＢＯＵＮＤ命令から区別（周知のｘ８６の３２ビットモードで）される。ＢＯＵＮＤ命令のリアルオペコードバイトは６２であるが、ＭＯＤ  Ｒ／Ｍフィールド（後述）内では、ＭＯＤフィールドの値１１を受け付けない。本発明の代替的な実施形態は、このビットおよび後述される他のビットを反転フォーマットで格納しない。値１が使用され、下位１６個のレジスタをエンコードする。換言すると、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒおよび他のフィールドの他のＲＲＲを組み合わせて、Ｒ'Ｒｒｒｒが形成される。
【０２６８】
オペコードマップフィールド２９１５（ＥＶＥＸバイト１、ビット［３：０］‐ｍｍｍｍ）。その内容が暗示される先頭オペコードバイト（０Ｆ、０Ｆ３８、または０Ｆ３）をエンコードする。
【０２６９】
データ要素幅フィールド２８６４（ＥＶＥＸバイト２、ビット［７］‐Ｗ）。これはＥＶＥＸ．Ｗという表記で表される。ＥＶＥＸ．Ｗが使用され、データタイプの粒度（サイズ）を定義する（３２ビットデータ要素または６４ビットデータ要素のいずれか）。
【０２７０】
ＥＶＥＸ．ｖｖｖｖ２９２０（ＥＶＥＸバイト２、ビット［６：３］‐ｖｖｖｖ）。ＥＶＥＸ．ｖｖｖｖの役割は以下を含んでよい。１）ＥＶＥＸ．ｖｖｖｖは第１のソースレジスタオペランドを指定された反転（１の補数）形式にエンコードし、ＥＶＥＸ．ｖｖｖｖは２以上のソースオペランドを持つ命令に対し有効である。２）ＥＶＥＸ．ｖｖｖｖはデスティネーションレジスタオペランドを、指定された特定のベクトルシフト用の１の補数形式にエンコードする。または３）ＥＶＥＸ．ｖｖｖｖはいずれのオペランドもエンコードせず、当該フィールドは予約され、１１１１ｂを含むべきである。故に、ＥＶＥＸ．ｖｖｖｖフィールド２９２０は、反転（１の補数）形式で格納された第１のソースレジスタ指定子の４つの下位ビットをエンコードする。命令に応じて、追加の異なるＥＶＥＸビットフィールドが使用され、指定子サイズを３２個のレジスタに拡張する。
【０２７１】
ＥＶＥＸ．Ｕ  ２８６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］‐Ｕ）。ＥＶＥＸ．Ｕ＝０の場合、それはクラスＡまたはＥＶＥＸ．Ｕ０を示す。ＥＶＥＸ．Ｕ＝１の場合、それはクラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０２７２】
プレフィクスエンコーディングフィールド２９２５（ＥＶＥＸバイト２、ビット［１：０］‐ｐｐ）。これは、ベース演算フィールドの追加のビットを提供する。ＥＶＥＸプレフィクスフォーマットにおけるレガシＳＳＥ命令のサポートの提供に加え、これはまた、ＳＩＭＤプレフィクスのコンパクト化の利点を有する（ＳＩＭＤプレフィクスを表わすために１バイトを要求する代わりに、ＥＶＥＸプレフィクスは２ビットのみを要求する）。一実施形態において、レガシフォーマットおよびＥＶＥＸプレフィクスフォーマットの両方において、ＳＩＭＤプレフィクス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用するレガシＳＳＥ命令をサポートすべく、これらのレガシＳＩＭＤプレフィクスは、ＳＩＭＤプレフィクスエンコーディングフィールドにエンコードされる。これらのレガシＳＩＭＤプレフィクスは、デコーダのＰＬＡに提供される前に、ランタイムにレガシＳＩＭＤプレフィクスに拡張される（よって、ＰＬＡは、変更なしで、これらのレガシ命令のレガシフォーマットおよびＥＶＥＸフォーマットの両方を実行可能である）。より新しい命令はＥＶＥＸプレフィクスエンコーディングフィールドの内容を直接オペコード拡張として使用できるものの、特定の実施形態は、整合性のために同様の方法で拡張するが、これらのレガシＳＩＭＤプレフィクスによって指定される異なる手段を可能にする。代替的な実施形態は、２ビットＳＩＭＤプレフィクスエンコードをサポートするように、つまり拡張を要求しないように、ＰＬＡを再設計してよい。
【０２７３】
アルファフィールド２８５２（ＥＶＥＸバイト３、ビット［７］‐ＥＨ。これはＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書き込みマスク制御およびＥＶＥＸ．Ｎとしても知られる。またαを用いて図示）。上記の通り、このフィールドはコンテキストに特有のものである。
【０２７４】
ベータフィールド２８５４（ＥＶＥＸバイト３、ビット［６：４］‐ＳＳＳ。これはＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られる。またβββを用いて図示）。上記の通り、このフィールドはコンテキストに特有のものである。
【０２７５】
ＲＥＸ'フィールド２９１０。これはＲＥＸ'フィールドの残部であり、ＲＥＸ'フィールド２９１０は、拡張された３２個のレジスタセットの上位１６個または下位１６個のいずれかをエンコードするために使用され得るＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］‐Ｖ'）である。このビットは、ビット反転フォーマットで格納される。値１が使用され、下位１６個のレジスタをエンコードする。換言すると、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることにより、Ｖ'ＶＶＶＶが形成される。
【０２７６】
書き込みマスクフィールド２８７０（ＥＶＥＸバイト３、ビット［２：０］‐ｋｋｋ）。上記の通り、その内容が書き込みマスクレジスタ内のレジスタのインデックスを指定する。本発明の一実施形態において、特定値ＥＶＥＸ．ｋｋｋ＝０００は、特定の命令について書き込みマスクが使用されないことを暗示する特別な動作を有する（これは、すべて１にハードワイヤードされた書き込みマスクの使用またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な方法で実装されてよい）。
【０２７７】
リアルオペコードフィールド２９３０（バイト４）は、オペコードバイトとしても知られる。このフィールドで、オペコードの一部が指定される。
【０２７８】
ＭＯＤ  Ｒ／Ｍフィールド２９４０（バイト５）は、ＭＯＤフィールド２９４２、Ｒｅｇフィールド２９４４およびＲ／Ｍフィールド２９４６を含む。上記の通り、ＭＯＤフィールド２９４２の内容が、メモリアクセス操作およびメモリアクセスなし操作間を区別する。Ｒｅｇフィールド２９４４の役割は、デスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコードすること、または、オペコード拡張として扱われ、命令オペランドをエンコードするために使用されないこと、という２つの状況に要約できる。Ｒ／Ｍフィールド２９４６の役割としては、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコードすることが含まれてよい。
【０２７９】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）。上記の通り、スケールフィールド２８５０の内容は、メモリアドレス生成に使用される。ＳＩＢ．ｘｘｘ２９５４およびＳＩＢ．ｂｂｂ  ２９５６。これらのフィールドの内容は、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関して記載済みである。
【０２８０】
変位フィールド２８６２Ａ（バイト７‐１０）。ＭＯＤフィールド２９４２に１０が含まれる場合、バイト７‐１０は変位フィールド２８６２Ａであり、変位フィールド２８６２Ａはレガシ３２‐ビット変位（ｄｉｓｐ３２）と同様に動作し、バイト粒度で動作する。
【０２８１】
変位係数フィールド２８６２Ｂ（バイト７）。ＭＯＤフィールド２９４２に０１が含まれる場合、バイト７は変位係数フィールド２８６２Ｂである。このフィールドの場所は、レガシｘ８６命令セットの８‐ビット変位（ｄｉｓｐ８）の場所と同一であり、レガシｘ８６命令セットの８‐ビット変位（ｄｉｓｐ８）はバイト粒度で動作する。ｄｉｓｐ８は符号拡張されるので、ｄｉｓｐ８は−１２８〜１２７バイトオフセット間のアドレス指定のみ可能である。６４バイトのキャッシュラインに関しては、ｄｉｓｐ８は４つの実際に有用な値、−１２８、−６４、０および６４のみに設定可能な８ビットを使用する。通常、さらに広い範囲が必要であるので、ｄｉｓｐ３２が使用されるが、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８およびｄｉｓｐ３２と対照的に、変位係数フィールド２８６２Ｂはｄｉｓｐ８と再解釈される。変位係数フィールド２８６２Ｂを使用する場合、実際の変位は、メモリオペランドアクセス（Ｎ）のサイズで乗算された変位係数フィールドの内容によって決定される。このタイプの変位は、ｄｉｓｐ８×Ｎと称される。これは、平均的な命令の長さ（変位に使用されるのは１バイトであるが、はるかにより広い範囲を備える）を低減する。このような圧縮された変位は、有効な変位は、メモリアクセスの粒度の倍数であり、従って、アドレスオフセットの冗長下位ビットはエンコードの必要がないという前提に基づいている。換言すると、変位係数フィールド２８６２Ｂは、レガシｘ８６命令セットの８‐ビット変位に置き換わる。故に、変位係数フィールド２８６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８×Ｎにオーバーロードされる点のみを除いては、ｘ８６命令セットの８‐ビット変位と同じ方法でエンコードされる（よって、ＭｏｄＲＭ／ＳＩＢエンコードルールの変更はない）。換言すると、ハードウェアによる変位値の解釈のみを除き、エンコードルールまたはエンコーディング長に変更はない（バイト単位のアドレスオフセットを取得するために、メモリオペランドのサイズに応じて変位をスケーリングする必要がある）。
【０２８２】
即値フィールド２８７２は、上記の通り動作する。
【０２８３】
［フルオペコードフィールド］
【０２８４】
図２９Ｂは、本発明の一実施形態による、特定ベクトル向け命令フォーマット２９００のフルオペコードフィールド２８７４を構成するフィールドを示すブロック図である。具体的には、フルオペコードフィールド２８７４は、フォーマットフィールド２８４０、ベース演算フィールド２８４２およびデータ要素幅（Ｗ）フィールド２８６４を含む。ベース演算フィールド２８４２は、プレフィクスエンコーディングフィールド２９２５、オペコードマップフィールド２９１５およびリアルオペコードフィールド２９３０を含む。
【０２８５】
［レジスタインデックスフィールド］
【０２８６】
図２９Ｃは、本発明の一実施形態による、特定ベクトル向け命令フォーマット２９００のレジスタインデックスフィールド２８４４を構成するフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド２８４４は、ＲＥＸフィールド２９０５、ＲＥＸ'フィールド２９１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド２９４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド２９４６、ＶＶＶＶフィールド２９２０、ｘｘｘフィールド２９５４およびｂｂｂフィールド２９５６を含む。
【０２８７】
［拡張演算フィールド］
【０２８８】
図２９Ｄは、本発明の一実施形態による、特定ベクトル向け命令フォーマット２９００の拡張演算フィールド２８５０を構成するフィールドを示すブロック図である。クラス（Ｕ）フィールド２８６８が０を含む場合、それはＥＶＥＸ．Ｕ０（クラスＡ  ２８６８Ａ）を表わす。クラス（Ｕ）フィールド２８６８が１を含む場合、それはＥＶＥＸ．Ｕ１（クラスＢ  ２８６８Ｂ）を表わす。Ｕ＝０で且つＭＯＤフィールド２９４２が１１を含む場合（メモリアクセスなし操作を意味）、アルファフィールド２８５２（ＥＶＥＸバイト３、ビット［７］‐ＥＨ）は、ｒｓフィールド２８５２Ａとして解釈される。ｒｓフィールド２８５２Ａが１を含む場合（ラウンド２８５２Ａ．１）、ベータフィールド２８５４（ＥＶＥＸバイト３、ビット［６：４］‐ＳＳＳ）はラウンド制御フィールド２８５４Ａとして解釈される。ラウンド制御フィールド２８５４Ａは、１ビットのＳＡＥフィールド２８５６および２ビットのラウンド演算フィールド２８５８を含む。ｒｓフィールド２８５２Ａが０を含む場合（データ変換２８５２Ａ．２）、ベータフィールド２８５４（ＥＶＥＸバイト３、ビット［６：４］‐ＳＳＳ）は３ビットのデータ変換フィールド２８５４Ｂとして解釈される。Ｕ＝０で且つＭＯＤフィールド２９４２が００、０１または１０を含む場合（メモリアクセス操作を意味）、アルファフィールド２８５２（ＥＶＥＸバイト３、ビット［７］‐ＥＨ）は、エビクションヒント（ＥＨ）フィールド２８５２Ｂとして解釈され、ベータフィールド２８５４（ＥＶＥＸバイト３、ビット［６：４］‐ＳＳＳ）は３ビットのデータ操作フィールド２８５４Ｃとして解釈される。
【０２８９】
Ｕ＝１の場合、アルファフィールド２８５２（ＥＶＥＸバイト３、ビット［７］‐ＥＨ）は、書き込みマスク制御（Ｚ）フィールド２８５２Ｃとして解釈される。Ｕ＝１で且つＭＯＤフィールド２９４２が１１を含む場合（メモリアクセスなし操作を意味）、ベータフィールド２８５４の一部（ＥＶＥＸバイト３、ビット［４］‐Ｓ０）は、ＲＬフィールド２８５７Ａとして解釈される。ＲＬフィールド２８５７Ａが１を含む場合（ラウンド２８５７Ａ．１）、ベータフィールド２８５４の残部（ＥＶＥＸバイト３、ビット［６‐５］‐Ｓ２−１）はラウンド演算フィールド２８５９Ａとして解釈され、一方で、ＲＬフィールド２８５７Ａが０を含む場合（ＶＳＩＺＥ２８５７．Ａ２）、ベータフィールド２８５４の残部（ＥＶＥＸバイト３、ビット［６‐５］‐Ｓ２−１）は、ベクトル長フィールド２８５９Ｂ（ＥＶＥＸバイト３、ビット［６‐５］‐Ｌ１−０）として解釈される。Ｕ＝１で且つＭＯＤフィールド２９４２が００、０１または１０を含む場合（メモリアクセス操作を意味）、ベータフィールド２８５４（ＥＶＥＸバイト３、ビット［６：４］‐ＳＳＳ）は、ベクトル長フィールド２８５９Ｂ（ＥＶＥＸバイト３、ビット［６‐５］‐Ｌ１‐０）およびブロードキャストフィールド２８５７Ｂ（ＥＶＥＸバイト３、ビット［４］‐Ｂ）として解釈される。
【０２９０】
［例示的なレジスタアーキテクチャ］
【０２９１】
図３０は、本発明の一実施形態による、レジスタアーキテクチャ３０００のブロック図である。図示される実施形態には、５１２ビット幅の３２個のベクトルレジスタ３０１０がある。これらのレジスタは、ｚｍｍ０からｚｍｍ３１と参照符号が付されている。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜ｙｍｍ１６に重なっている。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜ｘｍｍ１５に重なっている。特定ベクトル向け命令フォーマット２９００は、これらの重なったレジスタファイルに対し、以下の表に示されるように動作する。
【表１】
0006687232.tif 000007
【０２９２】
換言すると、ベクトル長フィールド２８５９Ｂは、最大長から１または複数の他のより短い長さまでの範囲内から選択する。ここで、当該より短い長さの各々は、１つ前の長さの半分であり、ベクトル長フィールド２８５９Ｂを持たない命令テンプレートは、最大ベクトル長に対し動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット２９００のクラスＢ命令テンプレートは、パックド単精度／倍精度浮動小数点データまたはスカラ単精度／倍精度浮動小数点データおよびパックド整数データまたはスカラ整数データに対し、動作する。スカラ演算とは、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位のデータ要素の位置で実行される演算である。実施形態に応じ、より上位のデータ要素の位置は、命令前と同じに保持されるか、ゼロにされるかのいずれかである。
【０２９３】
図示された実施形態中の書き込みマスクレジスタ３０１５には、８個の書き込みマスクレジスタ（ｋ０からｋ７）が存在し、各々６４ビットのサイズである。代替的な実施形態において、書き込みマスクレジスタ３０１５は、１６ビットのサイズである。上記の通り、本発明の一実施形態において、ベクトルマスクレジスタｋ０は書き込みマスクとして使用不可である。通常ｋ０を示すエンコーディングが書き込みマスクに使用される場合、それは０ｘＦＦＦＦのハードワイヤードされた書き込みマスクを選択し、有効にその命令に対し書き込みマスキングを無効にする。
【０２９４】
図示された実施形態中の汎用レジスタ３０２５には、メモリオペランドをアドレス指定するために既存のｘ８６アドレス指定モードと共に使用される１６個の６４ビットの汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰおよびＲ８〜Ｒ１５という名称で参照される。
【０２９５】
図示された実施形態中、スカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）３０４５について、ＭＭＸパックド整数フラットレジスタファイル３０５０というエイリアスが示されているが、ｘ８７スタックは、ｘ８７命令セット拡張を使用して、３２／６４／８０ビットの浮動小数点データにスカラ浮動小数点演算を実行するために使用される８個の要素のスタックである。ＭＭＸレジスタは、６４ビットのパックド整数データに対し演算を実行するために使用されるが、ＭＭＸレジスタおよびＸＭＭレジスタ間で実行されるいくつかの演算のためのオペランドを保持するためにも使用される。
【０２９６】
本発明の代替的な実施形態は、より範囲の広いまたは狭いレジスタを使用してよい。また、本発明の代替的な実施形態は、より多い、より少ないまたは異なるレジスタファイルおよびレジスタを使用してもよい。
【０２９７】
［例示的なコアアーキテクチャ、プロセッサおよびコンピュータアーキテクチャ］
【０２９８】
プロセッサコアは、異なる方法で、異なる目的のために、および異なるプロセッサ内に実装されてよい。例えば、このようなコアの実装としては次のようなものが含まれてよい。すなわち、１）汎用コンピューティング用の汎用インオーダコアインオーダコア、２）汎用コンピューティング用の高性能汎用アウトオブオーダコア、３）主にグラフィックおよび／または科学技術（スループット）コンピューティング用の専用コア。異なるプロセッサの実装としては、次のようなものが含まれてよい。すなわち、１）汎用コンピューティング用の１または複数の汎用インオーダコアおよび／または汎用コンピューティング用の１または複数の汎用アウトオブオーダコアを含むＣＰＵ、および２）主にグラフィックおよび／または科学技術（スループット）用の１または複数の専用コアを含むコプロセッサ。このような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、それには次のようなものが含まれてよい。すなわち、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同一パッケージ内の別個のダイ上にあるコプロセッサ、３）ＣＰＵと同一ダイ上のコプロセッサ（この場合、このようなコプロセッサは、統合グラフィックおよび／または科学技術（スループット）ロジック等の専用ロジック、または専用コアと呼ばれることがある）および、４）同一のダイ上に上記ＣＰＵ（アプリケーションコアまたはアプリケーションプロセッサと呼ばれることがある）、上記コプロセッサおよび追加の機能を含み得るシステムオンチップ。例示的なコアアーキテクチャが次に記載され、その後に例示的プロセッサおよびコンピュータアーキテクチャが続く。
【０２９９】
［例示的なコアアーキテクチャ］
【０３００】
［インオーダおよびアウトオブオーダコアのブロック図］
【０３０１】
図３１Ａは、本発明の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図３１Ｂは、本発明の実施形態による、プロセッサに含まれる、インオーダアーキテクチャコアに係る例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図３１Ａ〜図３１Ｂ中の実線ボックスは、インオーダパイプラインおよびインオーダコアを示すが、オプションで追加される破線ボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダ態様のサブセットであると想定して、アウトオブオーダ態様について以下記載する。
【０３０２】
図３１Ａ中、プロセッサパイプライン３１００は、フェッチステージ３１０２、長さデコードステージ３１０４、デコードステージ３１０６、割り当てステージ３１０８、リネーミングステージ３１１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ３１１２、レジスタ読み取り／メモリ読み取りステージ３１１４、実行ステージ３１１６、ライトバック／メモリ書き込みステージ３１１８、例外処理ステージ３１２２およびコミットステージ３１２４が含まれる。
【０３０３】
図３１Ｂは、実行エンジンユニット３１５０に連結されたフロントエンドユニット３１３０を含むプロセッサコア３１９０を示し、フロントエンドユニット３１３０および実行エンジンユニット３１５０の両方はメモリユニット３１７０に連結されている。コア３１９０は縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッド若しくは代替的なコアタイプであってよい。さらなる別のオプションとして、コア３１９０は、例えば、ネットワークコアまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット（ＧＰＧＰＵ）コア、グラフィックコア等のような専用コアであってよい。
【０３０４】
フロントエンドユニット３１３０は、命令キャッシュユニット３１３４に連結された分岐予測ユニット３１３２を含み、命令キャッシュユニット３１３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）３１３６に連結され、ＴＬＢ３１３６は命令フェッチユニット３１３８に連結され、命令フェッチユニット３１３８はデコードユニット３１４０に連結される。デコードユニット３１４０（すなわちデコーダ）は命令をデコードしてよく、および、１または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令または他の制御信号を出力として生成してよく、これらは元の命令からデコードされ、あるいは元の命令を反映し、あるいは元の命令から派生する。デコードユニット３１４０は、様々な異なるメカニズムを使用して実装されてよい。好適なメカニズムの例としては、限定はされないがルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等が含まれる。一実施形態において、コア３１９０は、特定のマクロ命令のためのマイクロコードを格納（例えば、デコードユニット３１４０内またはフロントエンドユニット３１３０内部）するマイクロコードＲＯＭまたは他の媒体を含む。デコードユニット３１４０は、実行エンジンユニット３１５０内のリネーム／アロケータユニット３１５２に連結される。
【０３０５】
実行エンジンユニット３１５０は、リタイアメントユニット３１５４に連結されたリネーム／アロケータユニット３１５２および１または複数のスケジューラユニット３１５６のセットを含む。スケジューラユニット３１５６は、予約ステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表わす。スケジューラユニット３１５６は物理レジスタファイルユニット３１５８に連結される。物理レジスタファイルユニット３１５８の各々は、１または複数の物理レジスタファイルを表わし、それらの異なる１つ１つは、１または複数の異なるデータタイプを格納する。そのようなものとしては、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（例えば、実行される次の命令のアドレスである命令ポインタ）等が挙げられる。一実施形態において、物理レジスタファイルユニット３１５８はベクトルレジスタユニット、書き込みマスクレジスタユニットおよびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャのベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々な方法を示すため、物理レジスタファイルユニット３１５８がリタイアメントユニット３１５４に重ねられている（例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用する、将来のファイル、履歴バッファおよびリタイアメントレジスタファイルを使用する、レジスタマップおよびレジスタプールを使用する等）。リタイアメントユニット３１５４および物理レジスタファイルユニット３１５８は、実行クラスタ３１６０に連結される。実行クラスタ３１６０は、１または複数の実行ユニット３１６２のセットおよび１または複数のメモリアクセスユニット３１６４のセットを含む。実行ユニット３１６２は、様々な演算（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に行ってよい。いくつかの実施形態は、特定の関数または関数のセットに専用に割り当てられた複数の実行ユニットを含んでよく、一方で、他の実施形態は、１つのみの実行ユニットまたは、それらすべてが全関数を実行する複数の実行ユニットを含んでよい。スケジューラユニット３１５６、物理レジスタファイルユニット３１５８および実行クラスタ３１６０が可能性として複数形で図示されているのは、特定の実施形態が特定のタイプのデータ／演算のために別個のパイプライン（例えば、スカラ整数のパイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点のパイプラインおよび／またはメモリアクセスパイプライン。これらの各々は独自のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有する。別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット３１６４を有する特定の実施形態が実装される）を形成するからである。別個のパイプラインが使用される場合、これらのパイプラインのうちの１または複数はアウトオブオーダ発行／実行であってよく、残りはインオーダであってよいことも理解されたい。
【０３０６】
メモリアクセスユニット３１６４のセットがメモリユニット３１７０に連結され、メモリユニット３１７０はレベル２（Ｌ２）キャッシュユニット３１７６に連結されたデータキャッシュユニット３１７４に連結されたデータＴＬＢユニット３１７２を含む。一例示的な実施形態において、メモリアクセスユニット３１６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々はメモリユニット３１７０内のデータＴＬＢユニット３１７２に連結される。命令キャッシュユニット３１３４は、メモリユニット３１７０内のレベル２（Ｌ２）キャッシュユニット３１７６にさらに連結される。Ｌ２キャッシュユニット３１７６は、１または複数の他のレベルのキャッシュに連結され、最終的にメインメモリに連結される。
【０３０７】
例を挙げると、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン３１００を以下のように実装してよい。すなわち、１）命令フェッチ３１３８がフェッチステージ３１０２および長さデコーディングステージ３１０４を実行する。２）デコードユニット３１４０がデコードステージ３１０６を実行する。３）リネーム／アロケータユニット３１５２が割り当てステージ３１０８およびリネーミングステージ３１１０を実行する。４）スケジューラユニット３１５６がスケジューリングステージ３１１２を実行する。５）物理レジスタファイルユニット３１５８およびメモリユニット３１７０がレジスタ読み取り／メモリ読み取りステージ３１１４を実行する。実行クラスタ３１６０が実行ステージ３１１６を実行する。６）メモリユニット３１７０および物理レジスタファイルユニット３１５８がライトバック／メモリ書き込みステージ３１１８を実行する。７）様々なユニットが例外処理ステージ３１２２に関与してよい。８）リタイアメントユニット３１５４および物理レジスタファイルユニット３１５８がコミットステージ３１２４を実行する。 
【０３０８】
コア３１９０は、本明細書に記載の命令を含む、１または複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加されたいくつかの拡張を持つ）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮ等のオプションの追加拡張を持つ））をサポートしてよい。一実施形態において、コア３１９０は、パックされたデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックされたデータを使用して実行されることを可能にする。
【０３０９】
コアは、マルチスレッディング（演算またはスレッドの２または２より多い並列セットの実行）をサポートしてよく、様々な方法でマルチスレッディングを実行してよいことを理解されたい。そのようなものとしては、時分割マルチスレッディング、同時マルチスレッディング（この場合、単一の物理コアは、物理コアが同時にマルチスレッディングを行うスレッドの各々に対し、論理コアを提供する）、またはこれらの組み合わせ（例えば、時分割フェッチおよび時分割デコード並びにインテル（登録商標）ハイパースレッディング技術等のそれら以降の同時マルチスレッディング）が含まれる。
【０３１０】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてよいことを理解されたい。図示されたプロセッサの実施形態はまた、別個の命令キャッシュユニット３１３４およびデータキャッシュユニット３１７４並びに共有Ｌ２キャッシュユニット３１７６を含むが、代替的な実施形態は、命令およびデータの両方のための例えば、レベル１（Ｌ１）内部キャッシュまたは複数のレベルの内部キャッシュのような単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュ並びにコアおよび／またはプロセッサの外部にある外部キャッシュの組み合わせを含んでよい。代替的に、すべてのキャッシュは、コアおよび／またはプロセッサの外部にあってよい。
【０３１１】
［特定の例示的なインオーダコアアーキテクチャ］
【０３１２】
図３２Ａ〜３２Ｂは、より具体的な例示のインオーダコアアーキテクチャのブロック図を示し、コア（同一タイプおよび／または異なるタイプの他のコアを含む）はチップ内のいくつかの論理ブロックの１つであろう。その適用に応じ、論理ブロックは、何らかの固有の機能ロジック、メモリＩ／Ｏインタフェースおよび他の必要なＩ／Ｏロジックを備えた高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を介して通信する。
【０３１３】
図３２Ａは、本発明の実施形態による、オンダイ相互接続ネットワーク３２０２への接続を備え、且つ、レベル２（Ｌ２）キャッシュ３２０４のローカルサブセットを備えた単一のプロセッサコアのブロック図である。一実施形態において、命令デコーダ３２００は、パックドデータ命令セット拡張を備えたｘ８６命令セットをサポートする。Ｌ１キャッシュ３２０６は、キャッシュメモリからスカラユニットおよびベクトルユニットへと読み出す低レイテンシアクセスを可能にする。一実施形態（設計を簡易化した）において、スカラユニット３２０８およびベクトルユニット３２１０は、別個のレジスタセット（それぞれスカラレジスタ３２１２およびベクトルレジスタ３２１４）を使用し、それらの間で転送されたデータはメモリに書き込まれた後、レベル１（Ｌ１）キャッシュ３２０６からリードバックされる一方で、本発明の代替的な実施形態は、異なるアプローチ（例えば、単一のレジスタセットを使用する、またはデータが書き込みおよびリードバックされることなく、２つのレジスタファイル間で転送されることを可能にする通信パスを含む）を使用してよい。
【０３１４】
Ｌ２キャッシュのローカルサブセット３２０４は、１つのプロセッサコアにつき１つのローカルサブセットとして、別個の複数のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、プロセッサコア自身のＬ２キャッシュ３２０４のローカルサブセットへのダイレクトアクセスパスを有する。プロセッサコアによって読み取られたデータは、そのＬ２キャッシュサブセット３２０４に格納され、当該データは、他のプロセッサコアが、自身のローカルＬ２キャッシュサブセットにアクセスするのと並列的に、迅速にアクセス可能である。プロセッサコアによって書き込まれたデータは、自身のＬ２キャッシュサブセット３２０４に格納され、必要な場合、他のサブセットからはフラッシュされる。リングネットワークは、共有データのためのコヒーレンシを保証する。リングネットワークは双方向であり、プロセッサコア、Ｌ２キャッシュおよび他の論理ブロック等のエージェントが、チップ内で互いに通信することを可能にする。各リングデータパスは、一方向当たり１０１２ビット幅である。
【０３１５】
図３２Ｂは、本発明の実施形態による、図３２Ａのプロセッサコアの一部の拡大図である。図３２Ｂには、Ｌ１キャッシュ３２０４の一部であるＬ１データキャッシュ３２０６Ａに加え、ベクトルユニット３２１０およびベクトルレジスタ３２１４に関しより詳細なものが含まれる。具体的には、ベクトルユニット３２１０は、１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ  ３２２８を参照）であり、整数命令、単精度浮動命令および倍精度浮動命令のうちの１または複数を実行する。ＶＰＵは、スウィズルユニット３２２０を用いるレジスタ入力のスウィズル、数値変換ユニット３２２２Ａ〜Ｂを用いる数値変換およびメモリ入力での複製ユニット３２２４を用いる複製をサポートする。書き込みマスクレジスタ３２２６は、結果ベクトル書き込みの述語を可能にする。
【０３１６】
［統合メモリコントローラおよびグラフィックを持つプロセッサ］
【０３１７】
図３３は、本発明の実施形態による、プロセッサ３３００のブロック図であり、当該プロセッサは、２以上のコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックを有してよい。図３３中の実線ボックスは、単一のコア３３０２Ａ、システムエージェント３３１０、１または複数のバスコントローラユニット３３１６のセットを備えたプロセッサ３３００を示す一方で、破線ボックスのオプションの追加は、複数のコア３３０２Ａ〜Ｎ、システムエージェントユニット３３１０内の１または複数の統合メモリコントローラユニット３３１４、および専用ロジック３３０８を備えた代替的なプロセッサ３３００を示す。
【０３１８】
故に、プロセッサ３３００の異なる実装は、次のもの、すなわち１）統合グラフィックおよび／または科学技術（スループット）ロジック（１または複数のコアを含んでよい）である専用ロジック３３０８と、１または複数の汎用コアであるコア３３０２Ａ〜３３０２Ｎ（例えば、汎用インオーダコア、汎用アウトオブオーダコア、それら２つの組み合わせ）を有するＣＰＵ、２）主にグラフィックおよび／または科学技術（スループット）向けの多数の専用コアであるコア３３０２Ａ〜３３０２Ｎを有するコプロセッサ、並びに３）多数の汎用インオーダコアであるコア３３０２Ａ〜３３０２Ｎを有するコプロセッサ、を含んでよい。故に、プロセッサ３３００は、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ（汎用グラフィック処理ユニット）、高スループット多集積コア（ＭＩＣ）コプロセッサ（３０または３０より多いコアを含む）、組み込みプロセッサ等のような汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは、１または複数のチップ上に実装されてよい。プロセッサ３３００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳ等の複数のプロセス技術のうちの任意のものを使用する１または複数の基板の一部であってよく、および／または当該基板上に実装されてよい。
【０３１９】
メモリ階層は、コア内の１または複数のレベルのキャッシュ、共有キャッシュユニット３３０６のセット若しくは１または複数の共有キャッシュユニット３３０６、および統合メモリコントローラユニット３３１４のセットに連結された外部メモリ（不図示）を含む。共有キャッシュユニットのセット３３０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）等の１または複数の中レベルキャッシュまたは他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）および／またはそれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット３３１２は、統合グラフィックロジック３３０８、共有キャッシュユニット３３０６のセットおよびシステムエージェントユニット３３１０／統合メモリコントローラユニット３３１４を相互接続する一方で、代替的な実施形態は、このようなユニットを相互接続するための任意の数の周知技術を使用してよい。一実施形態において、コヒーレンシは、１または複数のキャッシュユニット３３０６およびコア３３０２Ａ〜Ｎ間で維持される。
【０３２０】
いくつかの実施形態において、コア３３０２Ａ〜Ｎのうちの１または複数は、マルチスレッディングが可能である。システムエージェント３３１０は、コア３３０２Ａ〜Ｎを調整および操作するそれらのコンポーネントを含む。システムエージェントユニット３３１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでよい。ＰＣＵは、コア３３０２Ａ〜Ｎおよび統合グラフィックロジック３３０８の電力状態を統制するために必要なロジックおよびコンポーネントであってよい、またはそれらを含んでよい。ディスプレイユニットは、１または複数の外部接続されたディスプレイを駆動するためのものである。
【０３２１】
コア３３０２Ａ〜Ｎは、アーキテクチャ命令セットの観点から同種または異種であってよい。すなわち、コア３３０２Ａ〜３３０２Ｎのうち２または２より多くは、同一命令セットを実行可能であってよいが、他のものはその命令セットのサブセットのみまたは異なる命令セットを実行可能であってよい。
【０３２２】
［例示的なコンピュータアーキテクチャ］
【０３２３】
図３４〜図３７は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子デバイスのための当該技術分野で既知の他のシステム設計および構成も好適である。一般的に、本明細書に開示のプロセッサおよび／または他の実行ロジックを組み込み可能な非常に多種多様なシステムまたは電子デバイスが概して好適である。
【０３２４】
ここで図３４を参照すると、本発明の一実施形態によるシステム３４００のブロック図が示されている。システム３４００は、１または複数のプロセッサ３４１０、３４１５を含んでよく、当該１または複数のプロセッサ３４１０、３４１５は、コントローラハブ３４２０に連結される。一実施形態において、コントローラハブ３４２０は、グラフィックメモリコントローラハブ（ＧＭＣＨ）３４９０および入／出力ハブ（ＩＯＨ）３４５０（別個のチップ上に存在してよい）を含む。ＧＭＣＨ３４９０は、メモリ３４４０およびコプロセッサ３４４５が連結されたメモリコントローラおよびグラフィックコントローラを含む。ＩＯＨ３４５０は、入出力（Ｉ／Ｏ）デバイス３４６０をＧＭＣＨ３４９０に連結する。代替的に、メモリコントローラおよびグラフィックコントローラの一方または両方がプロセッサ内に統合され（本明細書に記載の通り）、メモリ３４４０およびコプロセッサ３４４５は、プロセッサ３４１０と、単一のチップ内のＩＯＨ３４５０を持つコントローラハブ３４２０とに直接連結される。
【０３２５】
図３４中、破線を用いて、追加のプロセッサ３４１５がオプションの性質であることが示されている。各プロセッサ３４１０、３４１５は、本明細書に記載の処理コアのうちの１または複数を含んでよく、プロセッサ３３００の何らかのバージョンであってよい。
【０３２６】
メモリ３４４０は、例えば、ダイナミックランダムアクセス（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはこれら２つの組み合わせであってよい。少なくとも１つの実施形態について、コントローラハブ３４２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、ＱｕｉｃｋＰａｔｈインターコネクト（ＱＰＩ）等のポイントツーポイントインタフェースまたは類似の接続３４９５を介して、プロセッサ３４１０、３４１５と通信する。
【０３２７】
一実施形態において、コプロセッサ３４４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサプロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような専用プロセッサである。一実施形態において、コントローラハブ３４２０は統合グラフィックアクセラレータを含んでよい。
【０３２８】
物理リソース３４１０と３４１５との間には、アーキテクチャ上、マイクロアーキテクチャ上、熱的、電力消費特性等を含む利点の様々な基準に関して、様々な差異が存在し得る。
【０３２９】
一実施形態において、プロセッサ３４１０は、汎用タイプのデータ処理演算を制御する命令を実行する。コプロセッサ命令が命令内に埋め込まれてよい。プロセッサ３４１０は、これらのコプロセッサ命令を取り付けられたコプロセッサ３４４５によって実行されるべきタイプのものであると認識する。従って、プロセッサ３４１０はこれらのコプロセッサ命令（またはコプロセッサ命令を表わす制御信号）を、コプロセッサ３４４５へのコプロセッサバスまたは他の相互接続上に発行する。コプロセッサ３４４５はコプロセッサ命令を受け取り、受信されたコプロセッサ命令を実行する。
【０３３０】
ここで図３５を参照すると、本発明の一実施形態による第１のより具体的な例示的システム３５００のブロック図を示す。図３５に図示の通り、マルチプロセッサシステム３５００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続３５５０を介して連結された第１のプロセッサ３５７０および第２のプロセッサ３５８０を含む。プロセッサ３５７０および３５８０の各々は、プロセッサ３３００の何らかのバージョンであってよい。本発明の一実施形態において、プロセッサ３５７０および３５８０は、それぞれプロセッサ３４１０および３４１５である一方で、コプロセッサ３５３８はコプロセッサ３４４５である。別の実施形態においては、プロセッサ３５７０および３５８０は、それぞれプロセッサ３４１０およびコプロセッサ３４４５である。
【０３３１】
プロセッサ３５７０および３５８０は、それぞれ統合メモリコントローラ（ＩＭＣ）ユニット３５７２および３５８２を含むように図示されている。プロセッサ３５７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース３５７６および３５７８を含み、同様に第２のプロセッサ３５８０はＰ−Ｐインタフェース３５８６および３５８８を含む。プロセッサ３５７０、３５８０は、Ｐ−Ｐインタフェース回路３５７８、３５８８を使用して、ポイントツーポイント（Ｐ−Ｐ）インタフェース３５５０を介して情報を交換してよい。図３５に図示の通り、ＩＭＣ３５７２および３５８２はプロセッサをそれぞれのメモリ、すなわちメモリ３５３２およびメモリ３５３４に連結する。メモリ３５３２およびメモリ３５３４は、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【０３３２】
プロセッサ３５７０、３５８０はそれぞれ、ポイントツーポイントインタフェース回路３５７６、３５９４、３５８６、３５９８を使用して、個々のＰ−Ｐインタフェース３５５２、３５５４を介して、チップセット３５９０と情報を交換してよい。随意で、チップセット３５９０は、高性能インタフェース３５３９を介してコプロセッサ３５３８と情報を交換してよい。一実施形態において、コプロセッサ３５３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサまたは通信プロセッサプロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような専用プロセッサである。
【０３３３】
共有キャッシュ（不図示）が、いずれかのプロセッサの内部または両方のプロセッサの外部に含まれてよく、共有キャッシュはさらに当該プロセッサとＰ‐Ｐ相互接続を介して接続されていてよく、その結果、プロセッサが低電力モードの場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るようになる。
【０３３４】
チップセット３５９０が、インタフェース３５９６を介して第１のバス３５１６に連結されてよい。一実施形態において、第１のバス３５１６はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、すなわちＰＣＩ  Ｅｘｐｒｅｓｓバス若しくは別の第３世代Ｉ／Ｏ相互接続バス等のバスであってよいが、本発明の範囲はそのようには限定されない。
【０３３５】
図３５に図示の通り、様々なＩ／Ｏデバイス３５１４がバスブリッジ３５１８と共に第１のバス３５１６に連結されてよく、バスブリッジ３５１８は第１のバス３５１６を第２のバス３５２０に連結する。一実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサ等の１または複数の追加のプロセッサ３５１５が第１のバス３５１６に連結される。一実施形態において、第２のバス３５２０はローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、様々なデバイスが第２のバス３５２０に連結されてよく、そのようなものとしては、例えば、キーボードおよび／またはマウス３５２２、通信デバイス３５２７および命令／コードおよびデータ３５３０を含み得るディスクドライブまたは他の大容量ストレージデバイス等のストレージユニット３５２８が含まれる。さらに、オーディオＩ／Ｏ３５２４が第２のバス３５２０に連結されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図３５のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のこのようなアーキテクチャを実装してよい。
【０３３６】
ここで図３６を参照すると、本発明の実施形態による、第２のより具体的な例示的システム３６００のブロック図が示されている。図３５および図３６中で同様の要素は同様の参照符号が付されており、図３６の他の態様を不明瞭にするのを回避すべく、図３５の特定の態様は図３６で省略されている。
【０３３７】
図３６は、プロセッサ３５７０、３５８０が統合メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）３５７２および３５８２をそれぞれ含んでよいことを示す。故に、ＣＬ３５７２、３５８２は、統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図３６は、メモリ３５３２、３５３４がＣＬ３５７２、３５８２に連結されるだけでなく、Ｉ／Ｏデバイス３６１４はまた制御ロジック３５７２、３５８２に連結されることも示している。レガシＩ／Ｏデバイス３６１５がチップセット３５９０に連結される。
【０３３８】
ここで図３７を参照すると、本発明の一実施形態によるＳｏＣ３７００のブロック図が示されている。図３３中と同様の要素は同様の参照番号が付されている。また、破線ボックスは、より高度なＳｏＣ上でのオプションの機能である。図３７中、相互接続ユニット３７０２は、アプリケーションプロセッサ３７１０と、システムエージェントユニット３３１０と、バスコントローラユニット３３１６と、統合メモリコントローラユニット３３１４と、コプロセッサ３７２０のセットまたは１若しくは複数のコプロセッサ３７２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット３７３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット３７３２と、１または複数の外部ディスプレイに連結するためのディスプレイユニット３７４０とに連結される。アプリケーションプロセッサ３７１０は、１または複数のコア２０２Ａ〜Ｎのセットおよび共有キャッシュユニット３３０６を含む。コプロセッサ３７２０のセットまたは１若しくは複数のコプロセッサ３７２０は、統合グラフィックロジック、イメージプロセッサ、オーディオプロセッサおよびビデオプロセッサを含んでよい。一実施形態において、コプロセッサ３７２０は、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサ等のような専用プロセッサを含む。
【０３３９】
本明細書に開示のメカニズムに係る実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこのような実装アプローチの組み合わせで実装されてよい。本発明の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性のメモリ並びに／またはストレージ要素を含む）、少なくとも１つの入力デバイスおよび少なくとも１つの出力デバイスを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０３４０】
図３５に図示されたコード３５３０等のプログラムコードは、本明細書に記載の機能を実行するための命令を入力するため、および出力情報を生成するために適用されてよい。出力情報は、１または複数の出力デバイスに既知の態様で適用されてよい。本願の目的において、処理システムには、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサ等のプロセッサを有する任意のシステムが含まれる。
【０３４１】
プログラムコードは、処理システムと通信するために、高水準の手順型プログラミング言語またはオブジェクト指向型プログラミング言語で実装されてよい。必要であれば、プログラムコードはまた、アセンブリ言語または機械言語で実装されてもよい。実際、本明細書に記載のメカニズムは、いずれの特定のプログラミング言語にも範囲限定されない。いずれの場合においても、言語はコンパイル型言語または解釈型言語であってよい。
【０３４２】
少なくとも１つの実施形態に係る１または複数の態様は、機械可読媒体上に格納された、プロセッサ内で様々なロジックを表わす典型的命令によって実装されてよく、当該命令は機械による読み取り時に、機械に対し、本明細書に記載の技術を実行するためのロジックを生成させる。このような「ＩＰコア」として知られる典型的なものが、有形の機械可読媒体上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを作成する製造機械にロードされてよい。
【０３４３】
このような機械可読記録媒体としては、限定はされないが、機械またはデバイスによって製造または形成される複数の物品から成る非一時的な有形の構成が含まれてよく、それらとしては、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ‐ＲＷ）、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）等の半導体デバイス、磁気カード若しくは光カードといった記録媒体または電子的命令を格納するのに好適な任意の他のタイプの媒体が含まれる。
【０３４４】
従って、また、本発明の実施形態は、命令を含む、または本明細書に記載の構造、回路、装置、プロセッサおよび／またはシステム機能を定義するハードウェア記述言語（ＨＤＬ）等の設計データを含む非一時的な有形の機械可読媒体を含む。また、このような実施形態はプログラム製品としても称されてよい。
【０３４５】
［エミュレーション（バイナリ変換、コードモーフィング等）］
【０３４６】
いくつかの場合において、命令コンバータが使用され、命令をソース命令セットからターゲット命令セットへと変換してよい。例えば、命令コンバータは、ある命令を、コアによって処理されるべき１または複数の他の命令へと、トランスレート（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して）、モーフィング、エミュレート、またはそれら以外の方法による変換を行ってよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ内、プロセッサ外、または部分的にプロセッサ内または部分的にプロセッサ外に存在してよい。
【０３４７】
図３８は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータはソフトウェア命令コンバータであるものの、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装されてもよい。図３８は、高水準言語３８０２のプログラムが、ｘ８６バイナリコード３８０６を生成するｘ８６コンパイラ３８０４を使用してコンパイルされ得ることを示しており、当該ｘ８６バイナリコード３８０６は、少なくとも１つのｘ８６命令セットコアを持つプロセッサ３８１６によってネイティブに実行されてよい。少なくとも１つのｘ８６命令セットコアを持つプロセッサ３８１６は、少なくとも１つのｘ８６命令セットコアを持つインテルプロセッサと実質的に同一の諸機能を実行できる任意のプロセッサを表わしており、これは次のように行う。すなわち、少なくとも１つのｘ８６命令セットコアを持つインテルのプロセッサと実質的に同一の結果を得るべく、（１）インテルｘ８６命令セットコアの命令セットの大部分、または（２）少なくとも１つのｘ８６命令セットコアを持つインテルプロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン、を互換性のある状態で実行またはそれ以外の方法で処理することによってである。ｘ８６コンパイラ３８０４は、ｘ８６バイナリコード３８０６（例えばオブジェクトコード）を生成するように動作可能なコンパイラを表わし、当該ｘ８６バイナリコード３８０６は、追加のリンク処理と共に、または追加のリンク処理なしに、少なくとも１つのｘ８６命令セットコアを持つプロセッサ３８１６上で実行可能である。同様に、図３８は、高水準言語３８０２のプログラムが、代替的な命令セットバイナリコード３８１０を生成する代替的な命令セットコンパイラ３８０８を使用してコンパイルされ得ることを示しており、当該代替的な命令セットバイナリコード３８１０は、少なくとも１つのｘ８６命令セットコアを持たないプロセッサ３８１４（例えば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、および／または、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを持つプロセッサ）によってネイティブに実行されてよい。命令コンバータ３８１２は、ｘ８６バイナリコード３８０６を、ｘ８６命令セットコアを持たないプロセッサ３８１４によってネイティブに実行可能なコードに変換されるのに使用される。これが可能な命令コンバータの作成は難しいので、この変換されたコードは、代替的な命令セットバイナリコード３８１０と同じである可能性は低いが、しかしながら、変換されたコードは、一般的な演算を達成し、代替的な命令セットに属する命令で構成されるであろう。故に、命令コンバータ３８１２は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わし、それらは、エミュレーション、シミュレーションまたは任意の他の処理を介して��ｘ８６命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスが、ｘ８６バイナリコード３８０６を実行できるようにする。
（項目１）
命令をデコードするためのハードウェアデコーダであって、上記命令はオペコードを含む、ハードウェアデコーダと、
上記デコードされた命令を実行するための実行ハードウェアと、を備え、
上記デコードされた命令は、投機的メモリアクセスを追跡するためのデータ投機的実行（ＤＳＸ）追跡ハードウェアをリセットし、ＤＳＸ状態レジスタ内のＤＳＸ状態指標をクリアし、ＤＳＸ領域のすべての投機的に実行されたストアをコミットし、それにより上記ＤＳＸ領域を終了させる、装置。
（項目２）
上記命令は、ＤＳＸ状態レジスタオペランドを含む、項目１に記載の装置。
（項目３）
上記実行ハードウェアは、上記ＤＳＸ領域を終了させる前に、ＤＳＸがアクティブであることを判断する、項目１に記載の装置。
（項目４）
上記実行ハードウェアは、ＤＳＸがアクティブでないことを判断し且つエラーを生成する、項目１に記載の装置。
（項目５）
上記実行ハードウェアはさらに、ＲＴＭ（Ｒｅｓｔｒｉｃｔｅｄ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ）トランザクションが発生していることを判断し且つ上記ＲＴＭトランザクションを終了させる、項目１に記載の装置。
（項目６）
対応するＤＳＸ領域の終了を備えていないＤＳＸ領域の開始の数に対応する値を格納するためのＤＳＸネストカウンタをさらに備える、項目１に記載の装置。
（項目７）
上記実行ハードウェアは、ＤＳＸネストカウンタの値がゼロに等しいことを判断し且つ処理を実行しない、項目１に記載の装置。
（項目８）
ハードウェアデコーダを使用して、命令をデコードする段階であって、上記命令はオペコード並びにフォールバックアドレスの一部を格納するためのオペランドおよびストライド値を格納するためのオペランドを含む、デコードする段階と、
上記デコードされた命令を実行する段階であって、上記デコードされた命令は、投機的メモリアクセスを追跡するためのデータ投機的実行（ＤＳＸ）追跡ハードウェアをリセットし、ＤＳＸ状態レジスタ内のＤＳＸ状態指標をクリアし、ＤＳＸ領域のすべての投機的に実行されたストアをコミットし、それにより上記ＤＳＸ領域を終了させる、実行する段階と、を備える、方法。
（項目９）
上記命令は、ＤＳＸ状態レジスタオペランドを含む、項目８に記載の方法。
（項目１０）
上記ＤＳＸ領域を終了させる前に、ＤＳＸがアクティブであることを判断する段階をさらに備える、項目８に記載の方法。
（項目１１）
ＤＳＸがアクティブでないことを判断し且つエラーを生成する段階をさらに備える、項目８に記載の方法。
（項目１２）
ＲＴＭ（Ｒｅｓｔｒｉｃｔｅｄ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙ）トランザクションが発生していることを判断し且つ上記ＲＴＭトランザクションを終了させる段階をさらに備える、項目８に記載の方法。
（項目１３）
対応するＤＳＸ領域の終了を備えていないＤＳＸ領域の開始の数に対応する値を格納する段階をさらに備える、項目８に記載の方法。
（項目１４）
ＤＳＸネストカウンタの値がゼロに等しいことを判断し且つ処理を実行しない段階をさらに備える、項目８に記載の方法。
（項目１５）
機械による実行時、回路が生成されるようにする命令を格納した非一時機械可読媒体であって、上記回路は、
命令をデコードするためのハードウェアデコーダであって、上記命令はオペコードを含む、ハードウェアデコーダと、
上記デコードされた命令を実行するための実行ハードウェアであって、上記デコードされた命令は、投機的メモリアクセスを追跡するためのデータ投機的実行（ＤＳＸ）追跡ハードウェアをリセットし、ＤＳＸ状態レジスタ内のＤＳＸ状態指標をクリアし、ＤＳＸ領域のすべての投機的に実行されたストアをコミットし、それにより上記ＤＳＸ領域を終了させる、実行ハードウェアと、を含む、非一時機械可読媒体。
（項目１６）
上記命令は、ＤＳＸ状態レジスタオペランドを含む、項目１５に記載の非一時機械可読媒体。
（項目１７）
上記実行ハードウェアは、上記ＤＳＸ領域を終了させる前に、ＤＳＸがアクティブであることを判断する、項目１５に記載の非一時機械可読媒体。
（項目１８）
上記実行ハードウェアは、ＤＳＸがアクティブでないことを判断し且つエラーを生成する、項目１５に記載の非一時機械可読媒体。
【図１】
0006687232.tif 000008
【図２】
0006687232.tif 000009
【図３】
0006687232.tif 000010
【図４】
0006687232.tif 000011
【図５（Ａ）】
0006687232.tif 000012
【図５（Ｂ）】
0006687232.tif 000013
【図６】
0006687232.tif 000014
【図７】
0006687232.tif 000015
【図８】
0006687232.tif 000016
【図９】
0006687232.tif 000017
【図１０】
0006687232.tif 000018
【図１１】
0006687232.tif 000019
【図１２】
0006687232.tif 000020
【図１３】
0006687232.tif 000021
【図１４】
0006687232.tif 000022
【図１５】
0006687232.tif 000023
【図１６】
0006687232.tif 000024
【図１７】
0006687232.tif 000025
【図１８】
0006687232.tif 000026
【図１９】
0006687232.tif 000027
【図２０】
0006687232.tif 000028
【図２１】
0006687232.tif 000029
【図２２】
0006687232.tif 000030
【図２３】
0006687232.tif 000031
【図２４】
0006687232.tif 000032
【図２５】
0006687232.tif 000033
【図２６】
0006687232.tif 000034
【図２７】
0006687232.tif 000035
【図２８Ａ】
0006687232.tif 000036
【図２８Ｂ】
0006687232.tif 000037
【図２９Ａ】
0006687232.tif 000038
【図２９Ｂ】
0006687232.tif 000039
【図２９Ｃ】
0006687232.tif 000040
【図２９Ｄ】
0006687232.tif 000041
【図３０】
0006687232.tif 000042
【図３１Ａ】
0006687232.tif 000043
【図３１Ｂ】
0006687232.tif 000044
【図３２Ａ】
0006687232.tif 000045
【図３２Ｂ】
0006687232.tif 000046
【図３３】
0006687232.tif 000047
【図３４】
0006687232.tif 000048
【図３５】
0006687232.tif 000049
【図３６】
0006687232.tif 000050
【図３７】
0006687232.tif 000051
【図３８】
0006687232.tif 000052