(57)【特許請求の範囲】
【請求項１】
コンピュータプロセッサにおいて特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令を実行する方法であり、
６４ビットデータのソースオペランドを含む前記特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令をフェッチする段階と、
フェッチされた前記特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令をデコードする段階と、
デコードされた前記特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令を実行し、前記特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令の命令コードにより特定される前記セグメントベースレジスタへ前記ソースオペランドの前記６４ビットデータを書き込む段階と
を備える、方法。
【請求項２】
前記セグメントベースレジスタはＩＡ３２＿ＦＳ＿ＢＡＳＥである、請求項１に記載の方法。
【請求項３】
前記セグメントベースレジスタはＩＡ３２＿ＧＳ＿ＢＡＳＥである、請求項１に記載の方法。
【請求項４】
前記特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令は、特権レベル３のプログラムの一部である、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記コンピュータプロセッサのＣＰＵＩＤ機能フラグを確認することにより、前記コンピュータプロセッサが前記特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令に対応可能であることを判断する段階をさらに備える、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
前記特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令に対応可能であること示すフラグを前記コンピュータプロセッサに設定する段階をさらに備える、請求項５に記載の方法。
【請求項７】
前記コンピュータプロセッサのＣＰＵＩＤ機能フラグを確認することにより、前記コンピュータプロセッサが前記特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令に対応可能でないことを判断する段階と、
前記特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令に対応不可能であることを示すフラグを前記コンピュータプロセッサに設定する段階と
をさらに備える、請求項１〜４のいずれか１項に記載の方法。
【請求項８】
コンピュータプロセッサにおいて特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令を実行する方法であり、
６４ビットデータのデスティネーションオペランドを含む前記特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令をフェッチする段階と、
フェッチされた前記特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令をデコードする段階と、
デコードされた前記特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令を実行し、前記特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令の命令コードにより特定される前記セグメントベースレジスタの前記６４ビットデータを読み取り、前記６４ビットデータのデスティネーションオペランドにより特定される位置へ前記６４ビットデータを格納する段階と
を備える方法。
【請求項９】
前記セグメントベースレジスタはＩＡ３２＿ＦＳ＿ＢＡＳＥである、請求項８に記載の方法。
【請求項１０】
前記セグメントベースレジスタはＩＡ３２＿ＧＳ＿ＢＡＳＥである、請求項８に記載の方法。
【請求項１１】
前記特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令は、特権レベル３のプログラムの一部である、請求項８〜１０のいずれか１項に記載の方法。
【請求項１２】
前記コンピュータプロセッサのＣＰＵＩＤ機能フラグを確認することにより、前記コンピュータプロセッサが前記特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令に対応可能であることを判断する段階をさらに備える、請求項８に記載の方法。
【請求項１３】
前記特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令に対応可能であることを示すフラグを前記コンピュータプロセッサに設定する段階をさらに備える、請求項１２に記載の方法。
【請求項１４】
前記コンピュータプロセッサのＣＰＵＩＤ機能フラグを確認することにより、前記コンピュータプロセッサが前記特権に関しアグノスティックなセグメントベースレジスタへの読み取り命令に対応可能でないことを判断する段階と、
前記特権に関しアグノスティックなセグメントベースレジスタへの読み取り命令に対応不可能であることを示すフラグを前記コンピュータプロセッサに設定する段階と
をさらに備える、請求項８〜１１のいずれか１項に記載の方法。
【請求項１５】
請求項１〜１４のいずれか１項に記載の方法をコンピュータプロセッサに実行させるプログラム。
【請求項１６】
請求項１〜１４のいずれか１項に記載の方法を実行するコンピュータプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明の分野は、一般的に、コンピュータプロセッサアーキテクチャに関し、より詳細には、実行された際に特定の結果をもたらす命令に関する。
【背景技術】
【０００２】
今日用いられているプロセッサの多くは、特定のエンティティによって実行され得るプロセスおよび実行され得ないプロセスを決める、異なる複数の特権レベルを有している。この技術の一般的な例においては、特権レベルが異なる複数のリングへと分けられる。図１に示すように、リング０は最高位の特権レベルであり、よって、リング０（特権レベル０、またはカーネルモード）で実行されるプログラムは、システム内においていかなるプロセスをも実行でき、他方、リング３（ユーザモード）で実行されるコードは、特権レベルが低く、よってその能力には制限が課されている。このように特権レベルを分けることにより、任意のリング３のアプリケーションを他のリング３のアプリケーションから保護することが出来、リング０のカーネルをリング３のアプリケーションから保護することが出来る。コンピュータの実行状態を維持する重要なタスクはリング０のカーネルにとって利用可能であり、リング３のアプリケーションにとっては利用可能でないので、リング３のアプリケーションのプロセスが失敗に終わったとしても常に、コンピュータシステムの他のプロセスに影響を与えてはならない。リング１およびリング２に関する制限はリング０に関する制限よりも大きいが、リング３程ではない。
【０００３】
これら複数のレベルを用いることによって、ソフトウェアによる偶発的な、または意図的なシステム環境の破損（およびそれに伴う、システムセキュリティの違反）からのハードウェア保護を行うことが出来る。カーネルモードの制限されていない環境下においては、システムソフトウェアの「信頼された」部分のみが絶対的な必要性がある場合においてのみ、実行を許可される。他の全てのソフトウェアは、１以上のユーザモードにおいて実行される。
【図面の簡単な説明】
【０００４】
本願発明は添付の図面において、例を挙げることを目的とし、限定を目的とせず示されている。同様の参照符号は、同様の要素を指す。
【図１】図１は、一般的な特権レベルアーキテクチャを示す。
【図２】図２は、対応可能性の表示設定方法の実施形態を示す。
【図３】図３は、セグメントベースレジスタの読み取り／書き込み方法の実施形態を示す。
【図４】図４は、特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令のハンドリング方法の実施形態を示す。
【図５】図５は、特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令のハンドリングの実施形態を示す。
【図６】図６は、本願発明の実施形態に係る、コアの例示的なアウトオブオーダーアーキテクチャを示すブロック図である。
【図７】図７は、本願発明の一実施形態に係るシステムのブロック図を示す。
【図８】図８は、本願発明の実施形態に係る第２システムのブロック図を示す。
【図９】図９は、本願発明の実施形態に係る第３システムのブロック図を示す。
【発明を実施するための形態】
【０００５】
以下の説明において、様々な特定的な詳細を示す。しかし、本願発明の実施形態は、これらの特定的な詳細を用いずとも実施出来ることが理解されよう。他の例においては、周知の回路、構造、および技術が、本願発明の説明に関する理解を曖昧にすることがないよう、詳細には示されていない。
【０００６】
本明細書において「一実施形態」、「実施形態」、「例示的な実施形態」などに言及した場合、説明される実施形態が、特定の特徴、構造、または特性を含んでよいが、全ての実施形態においてそれら特定的な特徴、構造、または特性が必ずしも含まれるわけではないことを示す。さらに、そのような文言は、それぞれ同一の実施形態を必ずしも指すわけではない。さらに、特定の特徴、構造、または特性がある実施形態との関連で説明された場合、当業者であれば、そのような特徴、構造、または特性の効果を、明示的に示されているか示されていないかに関わらず他の実施形態において発揮させることが可能であることを理解されよう。
【０００７】
今日、全部ではないかもしれないがほとんどのＯＳは、単一のアドレス空間での複数の実行スレッドに対応する。プロセッサ、ＣＰＵ、またはコア内のスレッド固有の情報は、スレッドコンテキストと呼ばれる。特定のＣＰＵでスレッドを実行する前に、オペレーティングシステムは、適切なスレッドコンテキストが当該ＣＰＵ上に確実に存在するようにしておく必要がある。このプロセスは一般的にコンテキストの切り替えと呼ばれ、その際オペレーティングシステムは、任意のスレッドから他のスレッドへの切り替えプロセスの一部として、スレッドコンテキストの切り替えを行う。オペレーティングシステムは、スレッド固有ストレージと呼ばれる実行スレッド固有ストレージを行う何らかのメカニズムも提供する。ｘ８６プロセッサでは、ＦＳおよび／またはＧＳセグメントレジスタを用いて、スレッド固有ストレージへのアクセスが行われる。データにアクセスする際、セグメントレジスタを用いることにより、各スレッドは同一のセグメントおよびオフセットを用いることが出来、かつ、当該スレッド固有のデータ組にアクセスすることが出来る。このことは多くのＩＡ３２及びインテル（登録商標）６４ベースのオペレーティングシステム、若しくは、それらの同等物において、非ゼロベース、かつ非最大限度のセグメントの唯一の利用であることが多い。セグメント記述子はスレッドコンテキストの一部であり、スレッドコンテキストの残りと共に切り替えられたコンテキストでなければならない。多くのオペレーティングシステムは、システム内のスレッドの全てのうち、同一のリング０、またはカーネルアドレス空間を共有する。これらのオペレーティングシステムは、リング３またはユーザモードのために有するカーネルに対し、異なるスレッド固有ストレージを有することが多い。カーネルにおいて、スレッド固有ストレージは実際には論理プロセッサ固有ストレージであり、当該プロセッサ固有の情報を保持する。これらのオペレーティングシステムはリング間遷移に際し、セグメント記述子を変更しなければならず、かつ、コンテキストスワップコード内のユーザコードで用いるセグメント記述子を修正しなければならない。
【０００８】
ｘ８６アーキテクチャの６４ビットの変形例が導入された際（Ｉｎｔｅｌ（登録商標）６４）、ＦＳおよびＧＳセグメントレジスタを例外として、６４ビットモードからセグメンテーション（ｓｅｇｍｅｎｔａｔｉｏｎ）が取り除かれた。より大きなアドレス空間に対応すべく、セグメント記述子の改善はなされなかった。それらは８バイトの記述子として残され、３２ビットベースのアドレスのみに対応する。多くのオペレーティングシステムは仮想アドレス空間を分け、その際、カーネルアドレス空間は最上部に位置し、ユーザアドレス空間は最下部に位置する。さらに、カーネルの論理プロセッサ固有のデータはカーネルアドレス空間にある必要があり、他方、スレッド固有のデータはユーザアドレス空間にある必要がある。このことは、ユーザアドレス空間およびカーネルアドレス空間が逆にされたとしても、３２ビットベースアドレスで実現することは出来ない。これらのセグメントを、６４ビットモードが対応する４８ビットの仮想アドレス空間のいずれかの場所に配置するには、代替的なメカニズムが必要となる。実装されたメカニズムは、それぞれ対応するセグメントのベースアドレスのマッピングを行う２つのＭＳＲ、ＩＡ３２＿ＦＳ＿ＢＡＳＥ  ＭＳＲ（Ｃ００００１００Ｈ）およびＩＡ３２−ＧＳ＿ＢＡＳＥ  ＭＳＲ（Ｃ００００１０１Ｈ）を提供する。セグメントのベースアドレスは、単にこれらのＭＳＲの書き込みを行うことによって変更することが出来る。ＲＤＭＳＲおよびＷＲＭＳＲは、６４ビットの書き込みを可能とする、ユーザレベルのコードには利用可能でない、特権命令である。ＳＷＡＰＧＳ命令もまた、リング間遷移において、カーネルモードＧＳセグメントと、ユーザモードＧＳセグメントとの間の切り替えを単純化する。オペレーティングシステム全体の動作にとって重要であるＭＳＲをリング３のアプリケーションが操作出来ないように、命令ＲＤＭＳＲ、ＷＲＭＳＲ、およびＳＷＡＰＧＳはリング０またはカーネルモードに制限される。上記の命令がリング０に制限されているということは、ＦＳおよびＧＳセグメントの修正を行うリング３のアプリケーションの能力を意図的に制限しているということである。よって、現在のＩＡシステムに関して、アプリケーションはシステムコールをするか、またはセグメント記述子を変更して、ＦＳまたはＧＳベースの切り替えを行うよう制限されている。システムコールはリング間遷移を伴うのでスピードが遅く、かつ、セグメント記述子が（上述したように）３２ビットセグメントベースのみを保持するが故、これらの２つのセグメントベースの値を、６４ビットシステムにおいて利用可能なアドレス空間のうちほんの僅かの部分に過ぎない４ＧＢと低い値に制限し、セグメント記述子の合計数を８Ｋ未満に制限する。従来技術のｘ８６プロセッサは２つのシステムテーブルレジスタ、Ｇｌｏｂａｌ  Ｄｅｓｃｒｉｐｔｏｒ  Ｔａｂｌｅ  Ｒｅｇｉｓｔｅｒ（ＧＤＴＲ）およびＬｏｃａｌ  Ｄｅｓｃｒｉｐｔｏｒ  Ｔａｂｌｅ  Ｒｅｇｉｓｔｅｒ（ＬＤＴＲ）も含む。これら両方のレジスタは、３２または６４ビットリニアベースアドレスを格納する。
【０００９】
コンテキストの切り替えの間に少量の処理のみを行うスレッドに関し、システムコール、コンテキストの切り替え、およびそれらに続くユーザモードコードへのリターンは、スレッドが実行される際に行う処理の主要な部分であることが多い。この課題の１つの解決方法としては、スレッド間のコンテキストの切り替えをユーザモードコードで行うユーザモードスレッドがある。これらのユーザモードスレッドのそれぞれは、スレッド固有ストレージの自身の固有のコピーを必要とする。それら自身の固有のコピーなしでは、ユーザモードスレッドは単一のＯＳスレッドへと制限され（スレッド固有ストレージは、ＯＳスレッドの間を移動する間、それらの後に続かない。）、その場合であっても、同一の格納を用いるが互いに気付かない複数のエンティティに係る課題がある。
【００１０】
「ユーザモード」から「カーネルモード」への切り替えは、既存のほとんどのシステムにおいて、必要な情報処理量が大きい。この理由により、上述した、セグメントレジスタから読み取り、セグメントレジスタへ書き込む方法は、理想的ではない。６４ビットモードでの現在の特権レベルに関わらず、ＩＡ３２＿ＧＳ＿ＢＡＳＥまたはＩＡ３２＿ＦＳ＿ＢＡＳＥなどのセグメントベースレジスタに対し読み取りおよび書き込みを行うための命令を実行するのに用いることが出来る、システムおよびアーキテクチャなどの実施形態を詳細に説明する。これらの命令は、特権レベル３のプログラムの一部であってもよい。
【００１１】
特権に関しアグノスティックな書き込み命令の一例は「ＷＲＧＳＢＡＳＥ  ＲＡＸ」である。ここで「ＲＡＸ」は、ＧＳセグメントベースレジスタへ書き込まれる６４ビットデータ値を保持するレジスタまたはメモリオペランドである。ＷＲＧＳＢＡＳＥは命令コードであり、ＩＡ３２＿ＧＳ＿ＢＡＳＥレジスタを特定する。この命令の実行によって、ＲＡＸレジスタのデータがＧＳセグメントベースレジスタに書き込まれる。同様に、ＷＲＦＳＢＡＳＥ  ＲＡＸは実行された場合に、ＲＡＸのデータをＦＳセグメントレジスタ（ＩＡ３２＿ＦＳ＿ＢＡＳＥ）へ書き込むための命令である。
【００１２】
特権に関しアグノスティックな読み取り命令の一例は「ＲＤＧＳＢＡＳＥ  ＲＡＸ」である。ここで「ＲＡＸ」は、ＧＳセグメントベースレジスタから読み取られる６４ビットデータを格納するレジスタまたはメモリオペランドである。ＲＤＧＳＢＡＳＥは命令コードであり、ＩＡ３２＿ＧＳ＿ＢＡＳＥレジスタを特定する。この命令の実行によりＧＳセグメントベースレジスタの値が読み取られＲＡＸレジスタに格納される。同様に、ＲＤＦＳＢＡＳＥ  ＲＡＸは実行された場合に、ＦＳセグメントベースレジスタ（ＩＡ３２＿ＦＳ＿ＢＡＳＥ）からデータを読み取り、ＲＡＸに格納されるようにする。
【００１３】
いくつかの実施形態において、特権に関しアグノスティックなセグメントベースレジスタに対する読み取り／書き込み命令を実行する前に、オペレーティングシステム、プロセッサ、およびチップセットのうち１つが、プロセッサが当該命令に対応可能である旨を示す表示を設定する。図２は、この表示を設定する方法の実施形態を示す。
【００１４】
２０１において、特権レベルに関わらず、６４ビット値の、１以上のプロセッサセグメントベースレジスタに対する読み取り、および／または書き込みの実行に、プロセッサの論理プロセッサが対応可能であるかどうかの判断が行われる。典型的にはこの判断は、対応可能であることを示すプロセッサのＣＰＵＩＤ機能フラグを確認することにより行われる。
【００１５】
対応可能でない場合、セグメントベースレジスタに対する読み取り、および／または書き込みの、効率性が低い手段が２０３で用いられる。対応可能である場合、これらのタイプの命令に対応可能であることを示すフラグを１以上、制御レジスタに設定する。例えばいくつかの実施形態において、制御レジスタ４はそのことを示すよう設定されたフラグを有する。当然ながら、他のレジスタをこの目的で用いることも可能である。
【００１６】
図３は、セグメントベースレジスタに対する読み取り／書き込み方法の実施形態を示す。３０１において、特権に関しアグノスティックなセグメントベースレジスタに対する読み取り／書き込み命令が３０１において有効化されたかどうかの判断がされる。例えば、ｘ８６アーキテクチャの制御レジスタ４などの制御レジスタが用いられる場合、対応可能なプロセスを確認するべく、対応するフラグが確認される。特権に関しアグノスティックなセグメントベースレジスタに対する読み取り／書き込み命令に対応可能である場合、３１３において、これらの命令はフェッチされるなどの処理が行われる。
【００１７】
特権に関しアグノスティックなセグメントベースレジスタに対する読み取り／書き込み命令に対応不可能な場合、３０３において、論理プロセッサが特権レベル０であるかどうかの判断がなされる。上記にて詳細に説明したように、特権レベル０とは、実行可能なプロセスにほとんど制限がないか、全く制限がないことを指す。特権レベルが０である場合、３０５において、ＲＤＭＳＲまたはＷＲＭＳＲ特権命令のうち対応するものを用いて、ＩＡ３２＿ＧＳ＿ＢＡＳＥおよびＩＡ３２＿ＦＳ＿ＢＡＳＥのいずれかに対する読み取りまたは書き込みを行うことにより、ＧＳおよびＦＳベースアドレスを６４ビットモードで更新してもよい。
【００１８】
特権レベルが０よりも高い場合、３０７において特権レベル０への切り替えが行われる。特権レベル０に切り替えられると、３０９において、ＲＤＭＳＲまたはＷＲＭＳＲ特権命令のうち対応するものを用いて、ＩＡ３２＿ＧＳ＿ＢＡＳＥおよびＩＡ３２＿ＦＳ＿ＢＡＳＥのいずれかに対する読み取りまたは書き込みを行うことにより、ＧＳおよびＦＳベースアドレスを６４ビットモードで更新してもよい。この動作が行われた後、３１１において、以前の特権レベルへ戻す切り替えが行われる。当然ながら、このことにより顕著な（ｕｎｄｅｒｌｉｎｅｄ）性能上の不利な条件が生まれる。
【００１９】
図４は、特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令のハンドリング方法の実施形態を示す。この例示的な方法の段階のいずれかが行われる前に、命令に対応可能であるかどうかの判断が行われていてもよい。４０１において、特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令が受け取られる。この命令には、セグメントベースレジスタ（例えば、ＩＡ３２＿ＧＳ＿ＢＡＳＥまたはＩＡ３２＿ＦＳ＿ＢＡＳＥ）に書き込まれる６４ビットデータを含むオペランドが含まれる。このオペランドはメモリ位置またはレジスタであってよいが、より典型的にはレジスタである。
【００２０】
４０３において、復号論理で特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令が復号化され、４０５においてオペランドデータが読み出される。例えば、オペランドがＲＡＸなどのレジスタである場合、レジスタからのデータが読み出される。
【００２１】
４０７において、特権に関しアグノスティックなセグメントベースレジスタへの書き込み命令が実行され、現在の特権レベルに関わらず、読み出されたデータの適切なセグメントベースレジスタへの書き込みが行われる。
【００２２】
図５は、特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令のハンドリング方法の実施形態を示す。この例示的な方法の段階のいずれかが行われる前に、命令に対応可能であるかどうかの判断が行われている。５０１において、特権に関しアグノスティックなセグメントベースレジスタへの読み取り命令が受け取られる。この命令には、セグメントＭＳＲ（例えば、ＩＡ３２＿ＧＳ＿ＢＡＳＥまたはＩＡ３２＿ＦＳ＿ＢＡＳＥ）から読み取られる６４ビットデータを格納する位置を特定するオペランドが含まれる。このオペランドはメモリ位置またはレジスタであってよい。
【００２３】
５０３において、復号論理で特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令が復号化される。例えば、オペランドがＲＡＸなどのレジスタである場合、レジスタからのデータが読み出される。
【００２４】
５０５において、特権に関しアグノスティックなセグメントベースレジスタからの読み取り命令が実行され、特権レベルに関わらず、適切なベースレジスタのデータの読み取りが行われる。その後５０７において、オペランドによって定められる位置にデータが格納される。
【００２５】
例示的なコンピュータシステムおよびプロセッサ
上述した命令を実行することが出来る装置およびシステムの実施形態を下記に詳細に説明する。図６は、本願発明の実施形態に係る、コアの例示的なアウトオブオーダーアーキテクチャを示すブロック図である。しかし上記の命令は、インオーダーアーキテクチャで実行してもよい。図６において、矢印は２以上のユニットの関連付けを示し、矢印の方向は、それらユニット間のデータフローの方向を示す。このアーキテクチャのコンポーネントを用いて、上記で詳細に説明した命令のフェッチ、復号化、および実行を含む、これら命令の処理を行ってもよい。
【００２６】
図６は、実行エンジンユニット６１０およびメモリユニット６１５へ関連付けられたフロントエンドユニット６０５を含む。実行エンジンユニット６１０はさらにメモリユニット６１５へ関連付けられている。
【００２７】
フロントエンドユニット６０５は、レベル２（Ｌ２）分岐予測ユニット６２２へ関連付けられたレベル１（Ｌ１）分岐予測ユニット６２０を含む。これらのユニットによりコアは、分岐が解消されるのを待つ必要なく、命令のフェッチおよび実行をすることが出来る。Ｌ１およびＬ２分岐予測ユニット６２０、６２２は、Ｌ１命令キャッシュユニット６２４へ関連付けられている。Ｌ１命令キャッシュユニット６２４は、実行エンジンユニット６１０により実行され得る命令、または１以上のスレッドを保持する。
【００２８】
Ｌ１命令キャッシュユニット６２４は、命令トランスレーションルックアサイドバッファ（ＩＴＬＢ）６２６へ関連付けられている。ＩＴＬＢ６２６は、バイトストリームを個別の命令に分割する命令フェッチ／事前復号化ユニット６２８へ関連付けられている。
【００２９】
命令フェッチ／事前復号化ユニット６２８は、これらの命令を格納する命令キューユニット６３０へ関連付けられている。復号化ユニット６３２は上述した命令を含む、キューに入れられた命令を復号化する。いくつかの実施形態において、復号化ユニット６３２は複雑な復号化ユニット６３４および３つの単純な復号化ユニット６３６、６３８、６４０を備える。単純な複合化ユニットはｘ８６命令のほとんど、若しくは全てのハンドリングを行うことができ、当該命令は単一のｕｏｐへと復号化される。複雑な複合化ユニットは命令を復号化し、複数のｕｏｐへとマッピングを行うことが出来る。復号化ユニット６３２はマイクロコードＲＯＭユニット６４２も含んでよい。
【００３０】
Ｌ１命令キャッシュユニット６２４はさらに、メモリユニット６１５内でＬ２キャッシュユニット６４８へ関連付けられている。命令ＴＬＢユニット６２６はさらに、メモリユニット６１５内で第２レベルＴＬＢユニット６４６へ関連付けられている。復号化ユニット６３２、マイクロコードＲＯＭユニット６４２、およびループストリーム検出（ＬＳＤ）ユニット６４４はそれぞれ、実行エンジンユニット６１０内でリネーム／アロケータユニット６５６へ関連付けられている。ＬＳＤユニット６４４は、いつソフトウェア内のループが実行され、分岐の予測（および場合によっては、ループの最後の分岐に関する誤った予測）が停止され、ループから出るように命令のストリーミング（ｓｔｒｅａｍ）が行われるのかを検出する。いくつかの実施形態において、ＬＳＤユニット６４４は、マイクロｏｐのキャッシュを行う。
【００３１】
実行エンジンユニット６１０は、リタイヤユニット６７４および統合スケジューラユニット６５８へ関連付けられたリネーム／アロケータユニット６５６を含む。リネーム／アロケータユニット６５６は、レジスタのリネームを行う前に必要とされるリソースを判断し、実行するべく利用可能なリソースを割り当てる。リネーム／アロケータユニット６５６は論理レジスタの、物理レジスタファイルの物理レジスタへのリネームを行う。
【００３２】
リタイヤユニット６７４はさらに実行ユニット６６０へ関連付けられ、リオーダーバッファユニット６７８を含む。リタイヤユニット６７４は実行が完了した命令のリタイヤを行う。
【００３３】
統合スケジューラユニット６５８はさらに、実行ユニット６６０と関連付けられた物理レジスタファイルユニット６７６へ関連付けられている。統合スケジューラユニット６５８はプロセッサ上で実行される異なる複数のスレッド間で共有される。
【００３４】
物理レジスタファイルユニット６７６は、ＭＳＲユニット６７７Ａ、浮動小数点レジスタユニット６７７Ｂ、および整数レジスタユニット６７７Ｃを備え、示されていないが追加的なレジスタファイルを含んでよい（例えば、ＭＭＸパックド整数フラットレジスタファイル５５０上でエイリアスされたスカラ浮動小数点スタックレジスタファイル５４５など）。ＭＳＲユニットは、ＩＡ３２＿ＧＳ＿ＢＡＳＥレジスタおよびＩＡ３２＿ＦＳ＿ＢＡＳＥレジスタを含む。
【００３５】
実行ユニット６６０は、３つのミックスされたスカラ／ＳＩＭＤ実行ユニット６６２、６６４、６７２、ロードユニット６６６、記憶アドレスユニット６６８、および記憶データユニット６７０を含む。ロードユニット６６６、記憶アドレスユニット６６８、および記憶データユニット６７０は、ロード／格納、およびメモリ動作を行い、それぞれがさらに、メモリユニット６１５内でデータＴＬＢユニット６５２へ関連付けられている。
【００３６】
メモリユニット６１５は、データＴＬＢユニット６５２へ関連付けられた第２レベルＴＬＢユニット６４６を含む。データＴＬＢユニット６５２は、Ｌ１データキャッシュユニット６５４へ関連付けられている。Ｌ１データキャッシュユニット６５４はさらに、Ｌ２キャッシュユニット６４８へ関連付けられている。いくつかの実施形態において、Ｌ２キャッシュユニット６４８はさらに、メモリユニット６１５内および／またはメモリユニット６１５外で、Ｌ３およびさらに数字の大きなレベルのキャッシュユニット６５０へ関連付けられている。
【００３７】
本明細書で説明される命令を実行するのに適した例示的なシステムを以下に説明する。ノート型パソコン、デスクトップ型パソコン、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および他の様々な電子デバイスなどに関する、当技術分野で公知の他のシステムデザインおよび構成も適している。一般的に、本明細書で開示するプロセッサおよび／または他の実行論理を組み込むことが出来る多種多様なシステムおよび電子デバイスが適している。
【００３８】
図７は、本願発明の一実施形態に係るシステム７００のブロック図を示す。システム７００は、グラフィックメモリコントローラハブ（ＧＭＣＨ）７２０へ関連付けられている１以上の処理部７１０、７１５を含んでよい。追加的な処理部７１５は任意選択的に用いられるので、図７において破線で示されている。
【００３９】
各処理部はシングルコアであってよく、また代替的に、複数のコアを含んでもよい。処理部は、統合メモリコントローラおよび／または統合Ｉ／Ｏ制御論理など、処理コアに加えて他のオンダイの要素を任意選択的に含んでよい。また、少なくとも一実施形態において、処理部のコアは、マルチスレッド型であり、コア１つあたり、２以上のハードウェアスレッドを含んでよい。
【００４０】
図７は、例えばダイナミックランダムアクセスメモリ（ＤＲＡＭ）などであってよいメモリ７４０へ関連付けられていてよいＧＭＣＨ７２０を図示する。ＤＲＡＭは、少なくとも一実施形態において、不揮発性キャッシュに関連付けられていてもよい。
【００４１】
ＧＭＣＨ７２０はチップセットであってもよく、若しくは、チップセットの一部であってもよい。ＧＭＣＨ７２０はプロセッサ７１０、７１５と通信を行ってもよく、プロセッサ７１０、７１５と、メモリ７４０との間の相互作用を制御してもよい。ＧＭＣＨ７２０はプロセッサ７１０、７１５と、システム７００の他の要素との間の加速バスインタフェースとしての働きをしてもよい。少なくとも一実施形態において、ＧＭＣＨ７２０は、フロントサイドバス（ＦＳＢ）７９５などのマルチドロップバスを介して、プロセッサ７１０、７１５と通信を行う。
【００４２】
さらに、ＧＭＣＨ７２０は（フラットパネルディスプレイなどの）ディスプレイ７４５へ関連付けられている。ＧＭＣＨ７２０は統合グラフィックアクセラレータを含んでもよい。ＧＭＣＨ７２０はさらに、システム７００へ様々な周辺デバイスを関連付けるのに用いられてもよい入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）７５０へ関連付けられている。他の周辺デバイス７７０と同様にＩＣＨ７５０へ関連付けられていている独立したグラフィックデバイスであってよい外部グラフィックデバイス７６０が、図７に示す実施形態において例示されている。
【００４３】
代替的に、追加的な、または異なる処理部もシステム７００に存在してもよい。例えば、追加的な処理部７１５は、プロセッサ７１０と同様の追加的なプロセッサ、プロセッサ７１０と異種の、または非対称な追加的なプロセッサ、（例えばグラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニットなどの）アクセラレータ、フィールドプログラマブルゲートアレイ、または任意の他の処理部を含んでよい。物理リソース７１０、７１５間では、アーキテクチャ、マイクロアーキテクチャ、熱的、消費電力特性などを含む利点について様々な差異があり得る。これらの差異は、処理部７１０、７１５間の非対称性および異種性を用いて効果的に生じさせられる。少なくとも一実施形態において、様々な処理部７１０、７１５は同一のダイパッケージに存在してもよい。
【００４４】
図８は本願発明の実施形態に係る第２システム８００のブロック図を示す。図８に示すように、マルチプロセッサシステム８００はポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト８５０を介して互いに関連付けられた第１処理部８７０および第２処理部８８０を含む。図８に示すように、処理部８７０、８８０のそれぞれは、第１および第２プロセッサコア（つまり、プロセッサコア８７４ａ、８７４ｂ、およびプロセッサコア８８４ａ、８８４ｂ）を含むマルチコアプロセッサであってよい。
【００４５】
代替的に、処理部８７０、８８０のうち１以上は、アクセラレータまたはフィールドプログラマブルゲートアレイなどの、プロセッサ以外の要素であってもよい。
【００４６】
２つの処理部８７０、８８０のみが示されているが、本願発明の態様はそのように限定されない。他の実施形態において、１以上の追加的な処理部が、任意のプロセッサ内に存在してもよい。
【００４７】
第１処理部８７０はさらに、メモリコントローラハブ（ＭＣＨ）８７２、およびポイントツーポイント（Ｐ−Ｐ）インタフェース８７６、８７８も含んでよい。同様に第２処理部８８０は、ＭＣＨ８８２およびＰ−Ｐインタフェース８８６、８８８を含んでよい。プロセッサ８７０、８８０は、ＰｔＰインタフェース回路８７８、８８８を用いて、ポイントツーポイント（ＰｔＰ）インタフェース８５０を介してデータの交換を行ってもよい。図８に示すように、ＭＣＨ８７２、８８２はプロセッサを、各メモリ、つまり各プロセッサにローカルに取り付けられるメインメモリの部分であってよいメモリ８４２、およびメモリ８４４へ関連付ける。
【００４８】
プロセッサ８７０、８８０のそれぞれは、ポイントツーポイントインタフェース回路８７６、８９４、８８６、８９８を用いて個々のＰｔＰインタフェース８５２、８５４を介してチップセット８９０とデータの交換を行ってもよい。チップセット８９０は、高性能グラフィックインタフェース８３９を介して高性能グラフィック回路８３８とデータの交換を行ってもよい。本願発明の実施形態は、任意の数の処理コアを有する任意のプロセッサ内、または図８に示すそれぞれのＰｔＰバスエージェント内に位置してもよい。一実施形態において、任意のプロセッサコアは、ローカルキャッシュメモリ（図示せず）を含むか、そうでなければ関連付けられていてもよい。さらに、プロセッサが低消費電力モードに入ったときにいずれかの、もしくは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ（図示せず）内に格納されるよう、共有キャッシュが、両方のプロセッサの外部のいずれかのプロセッサに含まれ、それでいてｐ２ｐインターコネクトを介してプロセッサと接続されていてもよい。
【００４９】
第１処理部８７０および第２処理部８８０は、Ｐ−Ｐインターコネクト８７６、８８６、８８４をそれぞれ介し、チップセット８９０へ関連付けられていてもよい。図８に示すようにチップセット８９０はＰ−Ｐインタフェース８９４、８９８を含む。さらにチップセット８９０は、チップセット８９０を高性能グラフィックエンジン８４８へ関連付けるインタフェース８９２を含む。一実施形態において、バス８４９を用いて、グラフィックエンジン８４８をチップセット８９０へ関連付けてもよい。代替的に、ポイントツーポイントインターコネクト８４９がこれらのコンポーネントを関連付けてもよい。
【００５０】
他方、チップセット８９０はインタフェース８９６を介し、第１バス８１６へ関連付けられていてもよい。一実施形態において、第１バス８１６はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスであってもよく、若しくは、ＰＣＩエクスプレスまたは他の第３世代Ｉ／Ｏインターコネクトバスなどのバスであってもよい。ただし、本願発明の態様はこのように限定されない。
【００５１】
図８に示すように様々なＩ／Ｏデバイス８１４が、第１バス８１６を第２バス８２０へと関連付けるバスブリッジ８１８と同様に、第１バス８１６へ関連付けられていてもよい。一実施形態において、第２バス８２０はローピンカウント（ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ）（ＬＰＣ）バスであってもよい。一実施形態において、キーボード／マウス８２２、通信デバイス８２６、およびコード８３０を含んでよいディスクドライブまたは他の大容量記憶デバイスなどのデータ記憶ユニット８２８などを含む様々なデバイスが、第２バス８２０へ関連付けられていてもよい。さらに、オーディオＩ／Ｏ８２４が第２バス８２０へ関連付けられていてもよい。なお、他のアーキテクチャを採用することも可能である。例えば、図８に示すポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス、または他の同様のアーキテクチャを実装してもよい。
【００５２】
図９は、本願発明の実施形態に係る第３システム９００のブロック図を示す。図８と図９とにおいて共通する要素には、同様の参照符号が付され、図８の要素のいくつかは、図９の特徴を曖昧にすることを避けるべく、図９において省略されている。
【００５３】
図９は、処理部８７０、８８０がそれぞれ、集積メモリおよびＩ／Ｏ制御論理（「ＣＬ」）８７２、８８２を含んでよいことを示している。少なくとも一実施形態において、ＣＬ８７２、８８２は図７および８に関連して説明したもののような、メモリコントローラハブ論理（ＭＣＨ）を含んでもよい。さらに、ＣＬ８７２、８８２はＩ／Ｏ制御論理も含んでよい。図９は、メモリ８４２、８４４だけではなく、Ｉ／Ｏデバイス９１４もＣＬ８７２、８８２へ関連付けられていることを示している。レガシーＩ／Ｏデバイス９１５は、チップセット８９０へ関連付けられている。
【００５４】
本明細書で開示するメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせにより実装されてもよい。本願発明の実施形態は、１以上のプロセッサ、（揮発性および不揮発性メモリ、並びに／若しくは記憶部材を含む）データ記憶システム、１以上の入力デバイス、および１以上の出力デバイスを備えるプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【００５５】
図８に示すコード８３０などのプログラムコードは、本明細書で説明する機能を実現し、出力情報を生成するべく入力データに適用されてもよい。出力情報は、１以上の出力デバイスへ、公知の方法を用いて適用されてもよい。この適用例において、処理システムは、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【００５６】
プログラムコードは、処理システムと通信を行うための高水準のプロシージャ言語またはオブジェクト指向プログラミング言語で実装されてもよい。プログラムコードは所望される場合、アセンブリ言語または機械言語で実装されてもよい。事実、本明細書で説明するメカニズムの態様は、何らかの特定のプログラム言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語、またはインタープリタ型言語であってよい。
【００５７】
１以上の実施形態の１以上の態様は、機械に読み取られると当該機械に対し、本明細書で説明した技術を実行するための論理を作成させるプロセッサ内の様々な論理を表す、機械可読媒体に格納されたデータ表現によって実装されてもよい。「ＩＰコア」として知られるそのような表現は有形の機械可読媒体に格納され、様々な顧客または製造施設へと供給されてもよく、そこで論理またはプロセッサを実際に作成する製造機械へとロードされてもよい。
【００５８】
そのような機械可読記憶媒体は、ハードディスク、フロッピー（登録商標）ディスク、光学ディスク、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、および光磁気ディスクを含む他のタイプのディスク、読み取り専用メモリ（ＲＯＭ）、ＤＲＡＭおよびＳＲＡＭなどのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ）などの半導体デバイス、磁気または光学カード、または電子命令の格納に適した他のタイプの媒体などの記憶媒体を含む、機械またはデバイスによって製造または形成される、非一時的な有形の粒子の配置を含んでよいが、これらに限定されない。
【００５９】
したがって、本願発明の実施形態は、本明細書に説明される構造、回路、装置、プロセッサ、および／またはシステム特徴を定めるＨＤＬなどの命令または設計データを保持する、非一時的な、有形の機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ぶことも出来る。
【００６０】
本明細書で開示する命令のいくつかの動作は、ハードウェアコンポーネントで実行されてもよく、若しくは、機械実行可能命令をプログラミングされた回路または他のハードウェアコンポーネントに対し当該動作を実行させるよう、または少なくとも当該回路またハードウェアコンポーネントが結果的に当該動作を行うこととなるよう用いられる当該命令として実施されてもよい。回路は、ほんの数例を挙げると、汎用または特定用途プロセッサを含んでよく、若しくは論理回路を含んでよい。動作は、任意選択的に、ハードウェアおよびソフトウェアの組み合わせによって実行されてもよい。実行論理および／またはプロセッサは、機械命令、または機械命令から導出される１以上の制御信号に応じて命令が特定された結果オペランド（ｉｎｓｔｒｕｃｔｉｏｎ  ｓｐｅｃｉｆｉｅｄ  ｒｅｓｕｌｔ  ｏｐｅｒａｎｄ）を格納する特定の回路または他の論理を含んでもよい。例えば、本明細書で開示する命令の実施形態は、図７、８、および９に示す１以上のシステムで実行されてもよく、命令の実施形態は、当該システムで実行されるプログラムコードに格納されてもよい。
【００６１】
上記の説明は本願発明の好ましい実施形態を例示することを目的としている。上記の説明から、成長が早くさらなる進歩の予測が容易ではない技術分野において特に、当業者であれば本願発明の思想から逸脱することなく、下記の請求項およびその同等物の態様内で、本願発明の構成および詳細に関して変更を加えることが可能である。例えば方法中の１以上の動作を組み合わせることが出来、若しくはそれぞれの動作をさらに分けて行うことが出来る。
【００６２】
代替実施形態
本明細書で説明された命令をネイティブに（ｎａｔｉｖｅｌｙ）実行する実施形態を説明してきたが、本願発明の代替実施形態は、（例えば、米国カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行するプロセッサ、または米国カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するプロセッサなどの）異なる命令セットを実行するプロセッサで実行されるエミュレーション層を用いて命令を実行してもよい。また、図面中のフロー図は本願発明の特定の実施形態によって実行される動作の特定の順序を示しているが、そのような順序が例示に過ぎないことが理解されるべきである（例えば、代替実施形態は異なる順序で動作を行ってもよく、または特定の動作を組み合わせてもよく、または、特定の動作を重複して行ってもよい）。
【００６３】
上記において、説明を目的とし、本願発明の実施形態をよりよく理解いただけるよう様々な特定的な詳細を示した。しかし当業者であれば、１以上の他の実施形態が、これらの特定的な詳細のいくつかを用いなくとも実施可能であることを理解されよう。説明された特定の実施形態は本願発明の態様を限定するべく示されたのではなく、本願発明の実施形態を例示することを目的として説明されている。本願発明の態様は上述された特定の実施例ではなく、下記の請求項によってのみ定められる。
【図１】
0005688165.tif 000002
【図２】
0005688165.tif 000003
【図３】
0005688165.tif 000004
【図４】
0005688165.tif 000005
【図５】
0005688165.tif 000006
【図６】
0005688165.tif 000007
【図７】
0005688165.tif 000008
【図８】
0005688165.tif 000009
【図９】
0005688165.tif 000010