ここでは、命令エミュレーションのプロセッサ、方法、およびシステムについて開示する。以下の説明においては、多くの特定の詳細(例えば、特定のエミュレーションモードアウェアロジック、例外条件を処理するためのアプローチ、特権リソースのタイプおよび情報、ロジック実装、マイクロアーキテクチャ詳細、動作のシーケンス、ロジックパーティショニング/統合の詳細、ハードウエア/ソフトウエアパーティショニングの詳細、プロセッサ構成、システム構成要素のタイプおよび相互関係、およびこれらの類)が示される。しかしながら、理解されるように、本発明の実施形態は、これらの特定の詳細なしに実施されることが許される。その逆に周知の回路、構造、および技術は、この説明の理解を不明瞭にせぬために詳細に示されていない。
図1は、コンピュータシステム100の実施形態のブロック図である。多様な実施形態において、コンピュータシステムは、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯情報端末、携帯電話、サーバ、ネットワークデバイス(例えば、ルータまたはスイッチ)、モバイルインターネットデバイス(MID)、メディアプレーヤ、スマートテレビジョン、セットトップボックス、ビデオゲームコントローラ、またはその他のタイプの電子デバイスを表わすことができる。
コンピュータシステムは、プロセッサ101の実施形態を含む。いくつかの実施形態においては、プロセッサを汎用プロセッサとすることができる。例えばプロセッサを、中央処理装置(CPU)等の一般に使用されているタイプの汎用プロセッサとすることができる。他の実施形態においては、プロセッサが専用プロセッサとなることがある。適切な専用プロセッサの例は、限定ではないが、コプロセッサ、グラフィックプロセッサ、通信プロセッサ、ネットワークプロセッサ、暗号プロセッサ、埋込み型プロセッサ、およびデジタル信号プロセッサ(DSP)を含むが、これらは一部の例に過ぎない。プロセッサは、多様な複合命令セットコンピューティング(CISC)プロセッサ、多様な縮小命令セットコンピューティング(RISC)プロセッサ、多様な超長命令語(VLIW)プロセッサ、これらの多様なハイブリッド、またはその他のタイプのプロセッサすべてのうちのいずれであってもよい。
コンピュータシステムはまた、結合メカニズム109によってプロセッサ101と結合されるメモリ110の実施形態も含む。この分野で周知の任意の従来的な、プロセッサとメモリを結合するための結合メカニズムが適する。その種のメカニズムの例は、限定ではないが、相互接続、バス、ハブ、メモリコントローラ、チップセット、チップセット構成要素、およびこれらの類、およびこれらの組合せを含む。メモリは、同一または異なるタイプのいずれかの1つまたは複数のメモリデバイスを含むことができる。一般的に使用され、実施形態に適したメモリのタイプの1つにダイナミックランダムアクセスメモリ(DRAM)があるが、それに代えて他のタイプのメモリ(例えば、フラッシュメモリ)が使用されることはある。
メモリ110は、それの中にソフトウエア111が格納されることがある。ソフトウエアは、例えば、1つまたは複数のオペレーティングシステム(OS)および1つまたは複数のアプリケーションを含むことができる。動作の間にソフトウエアの部分がプロセッサにロードされ、プロセッサ上で実行されることがある。示されているとおり、プロセッサは、プロセッサの命令セットのISA命令102を受信できる。例えば、命令フェッチユニットがISA命令をフェッチすることができる。ISA命令は、マクロ命令、アッセンブリ言語命令、マシンレベルの命令、またはその他の、復号化されて実行されるべくプロセッサに提供される命令を表わすことができる。示されているとおり、いくつかの実施形態においては、ISA命令がエミュレーションなし命令103および1つまたは複数のタイプのエミュレーションあり命令104の両方を含むことがある。
プロセッサは、復号化ロジック105を含む。復号化ロジックは、復号化ユニットまたは復号器と呼ばれることもある。復号化ロジックは、ISA命令102を受信できる。エミュレーションなし命令103の場合には、復号化ロジックが、比較的よりハイレベルの命令を復号化し、ISA命令から引き出される1つまたは複数の比較的よりローレベルのマイクロ命令、マイクロ動作、マイクロコード入口ポイント、またはその他の比較的よりローレベルの命令または制御信号を出力できる。図解においては、これらが復号化済み命令106として示されている。復号器から出力される復号化済み命令は、復号器に入力されたよりハイレベルのISA命令を反映すること、表わすこと、および/またはそれから引き出されること、および1つまたは複数のよりローレベルの(例えば、回路レベルまたはハードウエアレベルの)動作を通じてそれらのISA命令を実装することができる。復号器は、限定ではないが、マイクロコード読出し専用メモリ(ROM)、ルックアップテーブル、ハードウエア実装、プログラム可能ロジックアレイ(PLA)、およびその他の、この分野において周知の復号器の実装に使用されるメカニズムを含む多様な異なるメカニズムを使用して実装できる。
復号化後命令プロセッサロジック107が復号化ロジックに結合されている。復号化後命令プロセッサロジックは、プロセッサの命令処理パイプラインの復号化後の部分を表わすことができる。復号化後命令プロセッサロジックは、復号化済み命令106を受信し、処理することができる。一般に、復号化後命令プロセッサロジックは、レジスタ読み出し/メモリ読み出しロジック、実行ロジック、レジスタおよび/またはメモリ書き戻しロジック、および例外ハンドラロジックを含むことができるが、このロジックは、アーキテクチャごとに異なることがあり、本発明の範囲がその種のロジックに限定されることはない。いくつかの実施形態では、例えばアウトオブオーダプロセッサパイプラインの場合において、復号化後命令プロセッサロジックがオプションとしてその他の、例えば割付けロジック、リネームロジック、スケジューリングロジック、リタイアまたはコミットロジック、またはこれらの類といったロジックを含むことができる。
プロセッサはまた、1つまたは複数セットのアーキテクチャ的に可視の、またはアーキテクチャ上のレジスタ108も含む。アーキテクチャ的に可視のレジスタは、ソフトウエアおよび/またはプログラマに可視のレジスタ、および/またはオペランドを識別するべくISA命令102によって指定されるレジスタを表わす。これらのアーキテクチャ上のレジスタは、所定のマイクロアーキテクチャ内における他の非アーキテクチャ上の、または非アーキテクチャ的に可視のレジスタ(例えば、命令によって使用される一時的なレジスタ、リオーダバッファ、リタイアメントレジスタ等)と対比される。アーキテクチャ上のレジスタは、概して、データを格納するべく動作できるオンダイプロセッサの記憶位置を表わす。ここでは、これらのアーキテクチャ上のレジスタを、しばしば単にレジスタと呼ぶ。例を述べれば、アーキテクチャ上のレジスタは、汎用レジスタのセット、パックドデータレジスタのセット、浮動小数点レジスタのセット、整数レジスタのセット、またはこれらの何らかの組合せを含むことができる。アーキテクチャ上のレジスタは、周知の技術を使用し、異なる方法、異なるマイクロアーキテクチャで実装でき、特定タイプの回路に限定されない。適切なタイプのアーキテクチャ上のレジスタの例は、限定ではないが、専用物理レジスタ、レジスタリネームを使用して動的に割付けられる物理レジスタ、およびこれらの組合せを含む。
復号化後命令プロセッサロジック107は、レジスタ108に結合される。復号化後命令プロセッサロジックは、それらのレジスタからのデータの受信、およびそれらへのデータの書き込みまたは格納を行なう。例えば、レジスタ読み出しロジックが命令のソースオペランドとして示されたレジスタからデータを読み出すこと、および/または書き戻しロジックが命令のデスティネーションオペランドとして示されたレジスタへ結果を書き込むことまたは格納することができる。復号化後命令プロセッサロジックは、また、メモリ110にも結合され、メモリからのデータの受信およびそれへのデータの格納を行なうことができる。例えば、メモリ読み出しロジックが命令によって示されたメモリ位置からからデータを読み出すこと、および/またはメモリ書き戻しロジックが命令によって示されたメモリ位置へデータを書き込むことができる。
再度図1を参照すると、エミュレーションあり命令104もまた、復号化ロジック105に提供できる。エミュレーションなし命令103とは対照的に、エミュレーションあり命令104は、復号化ロジックによる完全な復号化が行なわれずに対応する復号化済み命令106として復号化後命令プロセッサロジック107に提供されることがある。むしろいくつかの実施形態においては、エミュレーションロジック115に提供されてエミュレーションあり命令(1つまたは複数)104のエミュレーションが行なわれる。この分野においては、この種のエミュレーションに、例えば命令変換、バイナリ翻訳、コードモーフィング、命令解釈といった多様な異なる用語が与えられる。ここでは広く、この産業において使用されるこれらの多様な異なる用語を囲い込むべくエミュレーションという用語が使用される。
示されているとおり、いくつかの実施形態においては、エミュレーションロジック115が、部分的にオンダイエミュレーションロジック117と、部分的にオフダイエミュレーションロジック113の間に分割されることがあるが、これは必須ではない。他の実施形態においては、エミュレーションロジック115のすべてをオプションとしてオンダイとすること、または大半をオプションとしてオフダイとすることができるが、通常は少なくともいくらかのオンダイエミュレーションロジック(例えば、エミュレーションモード118、パイプライン内の何らかのエミュレーションモードアウェア命令プロセッサロジック120等)が存在する。オンダイエミュレーションロジックは、プロセッサとともにオンダイで固定されるか、常駐するか、または永続する。一般に、オンダイエミュレーションロジックは、プロセッサがパワーオフのとき、ブートの前、および/または製造完了時においてさえ、プロセッサとともにオンダイで存在する。適切なオンダイエミュレーションロジックの例は、限定ではないが、ハードウエア(例えば、集積回路、トランジスタ等)、ファームウエア(例えば、オンダイROM、EPROM、フラッシュメモリ、またはその他の永続的または不揮発性メモリおよびそれに格納される不揮発性の命令)、またはこれらの組合せを含む。
オフダイエミュレーションロジック113は、メモリ110内に含めることができる。オフダイエミュレーションロジックは、オンダイエミュレーションロジックと結合すること、またはその他の形で通信することができる。いくつかの実施形態においては、オフダイエミュレーションロジックをメモリの保護領域または部分112内に含めることができる。いくつかの実施形態においては、保護部分が、プロセッサ上で実行するソフトウエア111のためにではなく、オンダイハードウエアおよび/またはプロセッサのファームウエアロジックによる使用のみのために確保されることがある。例えば、いくつかの実施形態において、オンダイエミュレーションロジック117、エミュレーションモードアウェア命令プロセッサロジック120、および/または可能性としてはその他のオンダイプロセッサロジックは、オフダイエミュレーションロジック113へのアクセスおよび使用ができるが、プロセッサ上で走っているソフトウエア111(例えば、オペレーティングシステムまたはアプリケーション)にはオフダイエミュレーションロジック113へのアクセスまたは使用が可能でないことがある。いくつかの実施形態においては、オフダイエミュレーションロジックが、アプリケーション、オペレーティングシステム、仮想マシンマネージャ(存在する場合)、および/または入出力デバイスによるアクセスおよび修正から保護されること、および/またはそれらに対して不可視とされることがある。これは、セキュリティの促進を補助できる。
復号化ロジックは、エミュレーションあり命令104を検出し、または認識するロジック119を含む。例えば、復号器は、オペコードに基づいてエミュレーションあり命令を検出できる。いくつかの実施形態においては、エミュレーションあり命令を検出すると復号器がエミュレーションロジック115へエミュレーションモード信号116(例えば、エミュレーショントラップ信号)を提供できる。示されているとおり、エミュレーションロジックはエミュレーションモード118を有することができる。例として述べれば、エミュレーションモードは、1または複数のビットまたは制御をプロセッサの制御または構成レジスタ内に有して、プロセッサ(例えば、ロジック105、107等)がエミュレーションモードにあるか否かを示すことができる。いくつかの実施形態においては、エミュレーションあり命令104がエミュレーションされるべきであることを示すエミュレーションモード信号116を復号器から受信すると、エミュレーションモード118に入ることができる。
いくつかの実施形態において、復号化ロジック105は、エミュレーションロジック115へ、エミュレーションされる命令に関連付けされるその他の情報の提供も行なうことができる。その種の情報の例は、限定ではないが、可能性としてオペランド識別子(例えば、ソースまたはデスティネーションレジスタアドレスまたはメモリ位置)、メモリアドレシングモード、イミディエト、実行を加速する定数、および/またはエミュレーションあり命令104からの、および/またはそれに関連付けされるその他の情報を含む。例として述べるが、可能性として、エミュレーションシステムにエミュレーションあり命令104のエミュレーションを可能にする上で有用な、エミュレーションあり命令からの、および/またはエミュレーションあり命令に関連付けされる任意の情報を提供できる。
いくつかの実施形態においては、エミュレーションロジック115がエミュレーションあり命令104の各異なるタイプのエミュレーションに、1つまたは複数の命令114の異なるセットを含むことができる。例えば、1つまたは複数の命令114の第1のセットを提供して第1のオペコードを有する第1の命令104のエミュレーションを行ない、それとは異なる1つまたは複数の命令114の第2のセットを提供して異なる第2のオペコードを有する第2の異なる命令104のエミュレーションを行なうことができる。いくつかの実施形態においては、各セットが少なくとも3つの命令を含むことができる。図解されている実施形態においては、1つまたは複数の命令114のセットが、オフダイエミュレーションロジック113内に含められているが、これは必須ではない。他の実施形態においては、命令114をオンダイで(例えば、オンダイエミュレーションロジック117の永続または不揮発性メモリ内に)提供できる。さらに他の実施形態においては、命令114の一部をオンダイで(例えば、オンダイエミュレーションロジック内に)提供し、一部をオフダイで(例えば、オフダイエミュレーションロジック内に)提供することができる。
いくつかの実施形態においては、エミュレーションあり命令104のエミュレーションに使用される1つまたは複数の命令114のセットの命令のそれぞれが、エミュレーションロジック115からフェッチされるか、その他の形で回収されて復号化ロジック105に提供されるようにできる。いくつかの実施形態においては、エミュレーションあり命令104のエミュレーションに使用される1つまたは複数の命令114のセットの命令のそれぞれを、エミュレーションあり命令104と同じ命令セットのものとすることができる。復号化ロジック105は、1つまたは複数の命令114のセットのそれぞれを対応する復号化済み命令106に復号化するべく動作可能であるとすることができる。復号化済み命令は、復号化後命令プロセッサロジック107に提供できる。
復号化後命令プロセッサロジックは、エミュレーションモードアウェア命令プロセッサロジック120の実施形態を含む。示されているとおり、エミュレーションモードアウェア命令プロセッサロジックは、エミュレーションモード118と結合されるか、またはその他の方法でそれを認識できる。いくつかの実施形態においては、エミュレーションモードアウェア命令プロセッサロジックが、プロセッサがエミュレーションモードにあるときにはプロセッサがエミュレーションモードにないときとは少なくともいくつかの方法において異なって命令114の復号化済みバージョンの少なくともいくつかを処理すべく動作可能であるとすることができる。処理が異なるものとなり得る多様な異なる方法が存在する。いくつかの実施形態においては、エミュレーションモードにあるときにはエミュレーションモードにないときと比較して誤りまたはエラー処理を異なって実施できる。他の実施形態においては、エミュレーションモードにあるとき、例えば安全、特権、またはその他の形のアクセス制御付きのリソースおよび/または情報等の特定タイプのリソースおよび/または情報へのアクセスを、エミュレーションモードにないときとは異なって処理できる。例えば、エミュレーションモードにあるときにはリソースおよび/または情報へのアクセスを許可し、エミュレーションモードにないときには許可しないようにできる。
エミュレーションモードにあるときには復号化後命令プロセッサロジックが記憶位置121にアクセスできる。図解されている実施形態においては、記憶位置121がオンダイエミュレーションロジック117の一部になる。それに代えて、記憶位置をオフダイエミュレーションロジック内に含めること、または一部をオンダイエミュレーションロジック内に、一部をオフダイエミュレーションロジック内に含めることができる。記憶位置は、命令114のセットの実行に関連付けされる一時変数、中間結果、および/または実行状態の格納に使用できる。これは、エミュレーションあり命令104を有するオリジナルのプログラムの実行状態を保存する必要性を回避する補助となるか、かつ/または命令114のセットの処理によってその種の実行状態(例えば、アーキテクチャ上のレジスタ108内の内容)が改変されることを防止する補助となり得る。いくつかの実施形態においては、記憶位置121がアーキテクチャ上のレジスタをエミュレーションできるが、これは必須ではない。いくつかの実施形態においては、記憶位置121の内容が、アプリケーション、オペレーティングシステム、仮想マシンマネージャ、入出力デバイスによるアクセス、割り込み、およびその類から独立、隔離、および/または保護されているとすることができる。命令114のセットが完了すると、プロセッサのアーキテクチャ上の状態を更新できる(例えば、結果を記憶位置121からレジスタ108へ格納できる)。これは、低レイテンシーアクセスを伴って行なうことができる。一般にこれは、エミュレーションあり命令104が実際に直接実行された場合に発生したであろうアーキテクチャ上の状態における変化、および/または生じたであろうプロセッサの挙動を近似するか、模倣するか、似せるか、またはその他の形でエミュレーションするために使用できる。
説明の不明瞭化を回避するために、比較的単純なプロセッサ101を示し、説明してきた。その他の実施形態においては、プロセッサが、オプションとしてその他の周知の構成要素を含むことができる。プロセッサには、異なる構成要素の組合せおよび構成が文字どおり多数存在し、実施形態がいずれかの特定の組合せまたは構成に限定されることはない。プロセッサは、集積回路あるいは1つまたは複数の半導体ダイまたはチップのセット(例えば、単一のダイまたはチップ、または2またはそれより多くのダイまたはチップを組み込んだパッケージ)を表わしているとすることができる。いくつかの実施形態においては、プロセッサがシステムオンチップ(SoC)および/またはチップマルチプロセッサ(CMP)を表わすとすることができる。
いくつかのプロセッサは、比較的複雑な動作を用いる。例えば、いくつかの命令は、単一のメモリアクセスのみではなく複数のメモリアクセスを行なう。その例は、メモリからデータ要素のベクトルを集めるベクトルギャザ命令である。他の例として、単一のペアのデータ要素または2つのパックドデータ内の対応するデータ要素のペアの比較に代えて、特定の命令は多くのデータ要素の比較を行なう。その例は、ベクトルコンフリクト命令および文字列処理命令である。1つのアプローチは、その種の複雑な動作をハードウエア内に完全に実装することである。しかしながら、しばしば、必要とされるハードウエアの量が無視できないものとなる傾向を有することがあり、それが製造コスト、ダイのサイズ、およびパワー消費を増加する傾向を有し得る。他のアプローチは、その種の複雑な動作を少なくとも部分的にマイクロコードで実装することである。マイクロコードの使用は、その種の複雑な動作の実装に必要とされるハードウエアの量の低減の補助となるか、かつ/または特定の既存のハードウエアの再使用を可能にする補助となり得る。しかしながら、いくつかのプロセッサはマイクロコードを使用しない(例えば、命令セットの命令の実装にマイクロコードを使用しない)。
いくつかの実施形態においては、1つまたは複数の比較的より単純な命令セットを用いて比較的より複雑な命令をエミュレーションできる。より複雑およびより単純という用語は、絶対的な用語ではなく、互いに関する相対的な用語である。好都合なことにこれは、より複雑な命令の実装に必要とされるハードウエアの量の低減を潜在的に補助すること、および/またはより複雑な命令のエミュレーションに使用される1つまたは複数の命令によって使用された既存のハードウエアの再使用を可能にする補助となることができる。いくつかの実施形態においては、より単純な1つまたは複数の命令を用いたより複雑な命令のエミュレーションを使用して、いくつかの実施形態においてプロセッサがマイクロコードを使用するべく構成されてないことがある場合、および/またはより複雑な命令の実装にマイクロコードを使用するべく構成されてない場合であってさえ、より複雑な命令のマイクロコード類似の実装を提供できる。
図2は、プロセッサ内の命令をエミュレーションする方法230の実施形態のブロックフロー図である。いくつかの実施形態においては、図2の動作および/または方法を、図1のプロセッサによって、および/またはそれの中で実施できる。図1のプロセッサについて本明細書に述べられている構成要素、特徴、および特定のオプションの詳細もまた、図2の動作および/または方法にオプションとして適用される。それに代えて、図2の動作および/または方法を、類似の、または完全に異なるプロセッサによって、および/またはそれの中で実施することができる。さらにまた、図1のプロセッサは、図2と類似の、またはそれとは異なる動作および/または方法を実施できる。
この方法は、ブロック231において第1の命令を受信することを含む。いくつかの実施形態では、第1の命令を復号器において受信できる。この方法は、ブロック232において第1の命令をエミュレーションすることを決定することを含む。いくつかの実施形態においては、復号器が、エミュレーションされるべき命令のための1つまたは複数のオペコードのセットの中に第1の命令のオペコードがあると決定することによって第1の命令をエミュレーションすることを決定できる。この方法は、ブロック233において第1の命令のエミュレーションに使用される1つまたは複数の命令からなるセットを受信することを含む。いくつかの実施形態では、復号器においてこの命令(1つまたは複数)のセットを、オンダイエミュレーションロジック、またはオフダイエミュレーションロジック、またはこれらの組合せから受信できる。いくつかの実施形態においては、そのセットの命令(1つまたは複数)のそれぞれを第1の命令と同じ命令セットのものとすることができる。この方法は、ブロック234において、そのセットの命令から引き出される1つまたは複数の制御信号をエミュレーションモードにあるときにエミュレーションモードにないときとは異なって処理することを含む。
これは、異なる実施形態において異なる方法で行なうことができる。いくつかの実施形態においては、そのセットの命令を処理する間に遭遇した例外条件に、異なる処理を行なうことができる。いくつかの実施形態においては、そのセットの命令の処理が、エミュレーションモードで行なわれていない場合には同一の命令(すなわち、同一オペコードを有する命令)に利用可能でない情報および/またはリソースへのアクセスを可能にできる。
図3は、1つまたは複数の命令(例えば、より単純な命令)のセット314を用いて命令(例えば、複雑な命令)304をエミュレーションするロジック301の実施形態を図解したブロック図である。いくつかの実施形態においては、図3のロジックを図1のプロセッサおよび/またはコンピュータシステム内に含めることができる。それに代えて図3のロジックを類似の、または異なるプロセッサまたはコンピュータシステム内に含めることができる。さらにまた、図1のプロセッサおよび/またはコンピュータシステムは、図3に類似の、または異なるロジックを含むことができる。
エミュレーションされるべき命令(例えば、複雑な命令)304は、復号化ロジック305に提供できる。復号化ロジックは、命令304を検出するロジック319、例えばエミュレーションされるべき命令のオペコードのセットの中に命令304のオペコードがあることを検出するロジックを含むことができる。示されているとおり、いくつかの実施形態においては、プロセッサがマイクロコード330を有していないことがある。復号化ロジックは、エミュレーションロジック315にエミュレーションモード信号316を提供できる。多様な実施形態においては、エミュレーションロジック315が、オンダイロジック、オフダイロジック、またはオンダイロジックおよびオフダイロジックの両方を含むことができる。エミュレーションロジックは、エミュレーションモード信号に応答してエミュレーションモード318に入ることができる。
エミュレーションロジックはまた、命令(例えば、より複雑な)304のエミュレーションに使用できる1つまたは複数の(例えば、より単純な)命令314のセットも含む。いくつかの実施形態においては、その1つまたは複数の命令314を命令304と同じ命令セットのものとすることができる。いくつかの実施形態においては、その1つまたは複数の命令314を、エミュレーションモードにないときに復号化されて実行される他の命令とまったく同じとすることができる。(例えば、複雑な)命令304をエミュレーションするために、その1つまたは複数の(例えば、より単純な)命令314のそれぞれを復号化ロジックに提供できる。復号化ロジックは、命令314のそれぞれを1つまたは複数の復号化済み命令306として復号化できる。
復号化後命令プロセッサロジック307は、命令314に対応する復号化済み命令306を受信できる。復号化後命令プロセッサロジックは、エミュレーションモードアウェアロジック320の実施形態を含むことができる。示されているとおり、いくつかの実施形態においては、エミュレーションモードアウェアロジックは、エミュレーションモード318と結合されるか、またはその他の方法でそれを認識できる。いくつかの実施形態においては、エミュレーションモードアウェアロジックが、プロセッサがエミュレーションモード318にあるときにはプロセッサがエミュレーションモードにないときとは異なって命令314に対応する復号化済み命令306を処理すべく動作可能であるとすることができる。いくつかの実施形態においては、エミュレーションモードにあるときにはエミュレーションモードにないときと比較して誤りまたはエラー処理を異なって実施できる。例えばロジック320は、図4について後述するオプションの態様を使用できる。他の実施形態においては、エミュレーションモードにあるときにはリソースおよび/または情報へのアクセスが選択的に提供されるが、プロセッサがエミュレーションモードにないときにはそれがなされないようにできる。例えばロジック320は、図5について後述するオプションの態様を使用できる。
好都合なことに、いくつかの実施形態においては、より複雑な命令をより単純な命令/動作のセットによって実装できる。好都合なことにこれは、より複雑な命令の実装に必要とされるハードウエアの量の低減を潜在的に補助すること、および/またはより複雑な命令のエミュレーションに使用される1つまたは複数の命令によって使用された既存のハードウエアの再使用を可能にする補助となることができる。いくつかの実施形態においては、より単純な1つまたは複数の命令を用いたより複雑な命令のエミュレーションを使用して、いくつかの実施形態においてプロセッサがマイクロコードを使用するべく構成されてないことがある場合、および/またはより複雑な命令の実装にマイクロコードを使用するべく構成されてない場合であってさえ、より複雑な命令のマイクロコード類似の実装を提供できる。いくつかの実施形態においては、より単純な命令/動作を、より複雑な命令と同じ命令セットのものとすることさえできる。
その種の、より単純な命令を用いたより複雑な命令のエミュレーションは、命令をエミュレーションする理由として考え得るものの単なる1つの例に過ぎない。他の実施形態においては、エミュレーションあり命令を比較的使用頻度の低い(例えば、稀に使用される)命令とし、比較的より頻繁に使用される1つまたは複数の命令を用いてエミュレーションできる。好都合なことにこれは、稀に使用される命令の実装に必要とされるハードウエアの量の低減を潜在的に補助すること、および/または稀に使用される命令のエミュレーションに使用される1つまたは複数の命令によって使用された既存のハードウエアの再使用を可能にする補助となることができる。さら他の実施形態においては、エミュレーションあり命令を、より古い、および/または陳腐化した命令とすること、および/または非推奨のプロセス中のものとすること、および1つまたは複数の他の命令を用いてエミュレーションすることができる。好都合なことにエミュレーションは、非推奨の命令がそれにもかかわらず実行されることを可能にし、それによってソフトウエアに後方互換性を提供する補助となる一方、同時に、非推奨の命令の実装に必要とされるハードウエアの量の低減を潜在的に補助し、かつ/または非推奨の命令のエミュレーションに使用される1つまたは複数の命令によって使用された既存のハードウエアの再使用を可能にする補助となることができる。この開示から恩典を受ける当業者には、本明細書に開示されているエミュレーションのさらに他の用途が明らかになるであろう。
図4は、エミュレーションモードの場合にはエミュレーションモードでない場合と比較して異なる例外条件の処理をプロセッサに可能にするロジック401の実施形態を図解したブロック図である。いくつかの実施形態においては、図4のロジックを、図1のプロセッサおよび/またはコンピュータシステム内および/または図3のロジック内に含めることができる。それに代えて図4のロジックを類似の、または異なるプロセッサまたはコンピュータシステム内に含めることができる。さらにまた、図1のプロセッサおよび/またはコンピュータシステムおよび/または図3のロジックは、図4に類似の、または異なるロジックを含むことができる。
プロセッサがエミュレーションモード418にないとき、所定の命令(例えば、所定のオペコードを有する命令)の第1のインスタンス403−1が復号化ロジック405に提供される。プロセッサがエミュレーションモード418で動作しているとき、同じ所定の命令(例えば、同じ所定のオペコードを有する他の命令)の第2のインスタンス403−2が復号化ロジックに提供される。その所定の命令の第2のインスタンス403−2は、復号器のエミュレーションあり命令の受信に応答して、エミュレーションあり命令のエミュレーションに使用される1つまたは複数の命令414のセットから提供できる。その命令セットは、オンダイ、オフダイ、または一部をオンダイおよび一部をオフダイとすることができるエミュレーションロジック415に含まれるとすることができる。エミュレーションロジック415は、エミュレーションロジックについて本明細書のいずれかの箇所で述べているオプションの特性の任意のものを有することができる。復号化ロジックは、所定の命令の第1のインスタンス403−1および第2のインスタンス403−2のそれぞれのための1つまたは複数の復号化済み命令セット(例えば、まったく等しいセット)を提供できる。
復号化後命令処理ロジック407は、復号化済み命令(1つまたは複数)406を受信できる。復号化後命令処理ロジックは、エミュレーションモードアウェア例外条件ハンドラロジック420を含む。エミュレーションモードアウェア例外条件ハンドラロジックは、エミュレーションモードアウェアな方法で例外条件の取り扱い/処理を行なうべく動作できる。本明細書で使用される場合、用語「例外条件」は、広く、命令の処理の間に生じ得る多様な異なるタイプの例外条件を言う。その種の例外条件の例は、限定ではないが、例外、割り込み、誤り、トラップ、およびこれらの類を含む。しばしばこの分野においては、例外、割り込み、誤り、およびトラップという用語が種々の異なる形で使用される。用語「例外」は、特権違反、特権例外、ページフォルト、メモリ保護誤り、ゼロ除算、不正オペコードの実行の試み、およびその他のこの種の例外条件に応答するハンドラルーチンへの自動的に生成される制御の移行を指して、おそらくはより一般的に使用される。
いくつかの実施形態においては、プロセッサがエミュレーションモード418になく、所定の命令の第1のインスタンス403−1が処理されているときに特権違反、ページフォルト、メモリ保護誤り、ゼロ除算、不正オペコードの実行の試み、またはその他の例外条件が発生すると、プロセッサが、実質的に従来的な例外条件の処理を行なうことができる。例えば、いくつかの実施形態においては、直接440で例外条件が受け取られ、例外条件ハンドラルーチン441へ制御が移される。一般に、例外条件ハンドラルーチンは、オペレーティングシステム、仮想マシンモニタ、またはその他の特権ソフトウエアの一部とすることができる。その種のハンドラルーチンの例は、限定ではないが、ページフォルトハンドラ、エラーハンドラ、割り込みハンドラ、およびこれらの類を含む。
これに対し、いくつかの実施形態においては、プロセッサがエミュレーションモード418にあり、所定の命令の第2のインスタンス403−2が処理されているときに特権違反、ページフォルト、メモリ保護誤り、ゼロ除算、不正オペコードの実行の試み、またはその他の例外条件が発生すると、プロセッサが、実質的に非従来的な例外条件の処理を行なうことができる。例えば、いくつかの実施形態においては、例外条件が直接受け取られない。いくつかの実施形態においては、ロジック420が、例外条件の結果としてもたらされる例外条件ハンドラルーチンへの自動的な制御の移行を抑制するメカニズムを含むことができる。制御は、エミュレーションプログラムから例外条件ハンドラルーチン441へ直接移されなくてもよい。むしろ、いくつかの実施形態においては、エミュレーションモードアウェア例外条件ハンドラロジック420が、例外条件ハンドラ441への制御の移行を一時的に抑制し、442で間接的に例外条件をレポートする。いくつかの実施形態においては、エミュレーションモードアウェア例外条件ハンドラロジック420が、1つまたは複数のエミュレーション伝達レジスタ(1つまたは複数)443を通じて例外条件を間接的にレポートできる。この1つまたは複数の伝達レジスタは、エミュレーションロジックとエミュレーションされているオリジナルの命令を有するプログラムの間における情報の伝達に使用できる。
いくつかの実施形態においては、エミュレーションモード418にあるときに発生する例外条件に応答して、エミュレーションモードアウェア例外条件ハンドラロジック420が、その例外条件のインジケータを例外条件またはエラーステータスフラグ(1つまたは複数)、フィールド、またはレジスタ444内に格納できる。例えば、単一ビットまたはフラグが、例外条件が発生したことを示す第1の値(例えば、バイナリの1にセットされる)を有すること、または例外条件が発生していないことを示す第2の値(例えば、バイナリのゼロにクリアされる)を有することができる。いくつかの実施形態においては、エミュレーションモード418にあるときに発生する例外条件に応答して、エミュレーションモードアウェア例外条件ハンドラロジック420が、その例外条件のためのエラーコードをエラーコードフィールドまたはレジスタ445内に格納できる。エラーコードは、例えば、エラーのタイプおよび例外条件の性質を伝える補助となるオプションの追加の詳細といったエラーについての追加の情報を提供できる。代替として、伝達レジスタの使用に代えて、その他の形で情報を通知または提供できる(例えば、メモリ内への格納、電気信号を通じたレポート等)。
いくつかの実施形態においては、エミュレーションモードアウェア例外条件ハンドラロジック420が、エミュレーションされている命令(すなわち、復号化ロジック405に送られる第2のインスタンス403−2を生じさせた命令)のアドレス(例えば、命令ポインタ)のインジケータも提供できる。例えば、いくつかの実施形態においては、エミュレーションされている命令のアドレス446をスタック447のトップに格納できる。エミュレーションされている所定の命令のアドレスを、その所定の命令のエミュレーションに使用されている命令の1つに代えてスタックに格納することは、例外ハンドラからのリターンが、エミュレーションされている命令のエミュレーションに使用されている命令の1つへ戻ることに代えて、エミュレーションされている命令へ戻ることを生じさせることができる。それに代えて例外ハンドラからのリターンが、その命令のエミュレーションに使用されている命令の1つへ戻った場合には、それが問題を生じさせる可能性がある。例えば、ソフトウエア(例えば、アプリケーション、オペレーティングシステム等)は、その所定の命令のエミュレーションに使用されている命令を承知していないことがあり、関連付けされたアドレスを認識できないことがある。オペレーティングシステムは、未知の、不正な、リスクのある、または許可されていない場所へ制御フローが移されると理解することがあり、潜在的に移行の防止を試みることがある。
いくつかの実施形態においては、命令414のセットがエラーステータス444および/またはエラーコード445を監視できる。例えば、いくつかの実施形態においては、命令414がエラーステータス444およびエラーコード445をエミュレーション伝達レジスタ443から読み出し、例外条件を聞きつけ、例外条件について学習できる。エラーステータス444が例外条件を示すときに、いくつかの実施形態においては、命令414のセットが例外条件449を取ることができる。例えば、命令414のうちの1つまたは複数が実行されてエラーステータスをチェックし、エラーが示される場合には、例外条件ハンドラへ制御を移すことができる。いくつかの実施形態においては、これが例外条件ハンドラ441に制御を移す命令414のセットを含むことができる。いくつかの実施形態においては、例外条件についての情報(例えば、エラーコード445)を例外条件ハンドラ441に提供できる。いくつかの実施形態においては、エミュレーションあり命令のアドレス446を例外条件ハンドラ441に提供することもでき、かつ/またはスタックのトップに少なくとも保存することができる。エミュレーションあり命令のアドレス446は、例外条件の処理からのリターン時に例外条件ハンドラ441によって使用できる。好都合なことに、エミュレーションされている命令のアドレスをスタック上に格納することによって、オペレーティングシステムまたはその他のエラーハンドラルーチンが、エラーを生じさせたものはエミュレーションされている命令であると見なすことができる。
いくつかの実施形態においては、エミュレーションロジックが、命令内のメモリアクセスが正しく働くか否か、または結果としてもたらされ得る例外条件のタイプをテストし、レポートするロジックを含むことができる。例えば、特殊な命令を含めて、エミュレーションされるアクセス権とともにメモリアドレスをテストし、そのメモリアドレスが有効か否か(例えば、ページが存在するか否か)、およびプログラムがそのメモリ位置の読み出しおよび/または修正を行なうための充分なアクセス権を有しているか否かを調べることができる。テストが失敗した場合にエミュレーションロジックは、エミュレーションされている命令が例外ハンドラに対して直接制御を渡したかのように、適切な割り込みハンドラに制御をリターンアドレスとともに渡すことができる。他の例としては、状態マシンが、メモリ動作が有効か否かを示す条件付きメモリトランザクションを実施できる。これは、結果として例外がもたらされないことを前提としてメモリ動作を実施できるときの決定に使用できる。これは、例外を伴うことなく安全に読み出すことができる命令情報の文字列または命令ストリームのバイト数の決定にも使用できる。例えば、これを使用して命令長を読み取ることができるか否か、または命令長の一部がページフォルトを生じさせるか否かをテストし、決定できる。エミュレーションロジックは、複数のページにわたる命令および/またはページがメモリ内にないときを扱うロジックを含むことができる。
いくつかの実施形態においては、エミュレーションロジックが、中間ポイントにおいてエミュレーションの実行が停止し、その後再開するように中間実行割り込みステータスを提供するロジックを含むことができる。これは、長いデュレーションまたは実行時間を伴う命令のエミュレーション時に特に好都合となり得る。いくつかの実施形態においては、特定タイプの命令(例えば、ムーブストリング命令、ギャザ命令、およびその他の長い動作を伴う命令)のエミュレーションに使用される命令セットが、エミュレーションされている命令を有するソフトウエアの実行状態を更新して、現在の進捗度を反映させることができる。例えば、中間ポイントにおいて動作の割り込みが行なわれて、エミュレーションに使用される命令セットが例外条件ハンドラによって保存されたマシン状態内(例えば、プロセッサステータスレジスタ内)のフラグまたはステータスビットをセットすることができ、その結果、リターン時に、中間状態から実行を再開していることを決定するべくエミュレーションコードによるフラグまたはステータスビットのテストを可能にできる。フラグまたはステータスビットは、割り込みの生じた実行を示すことができる。この方法により、例外条件が処理された後の例外条件ハンドラからのリターン時に、プログラムは、それが中断されたときの中間の進捗度において実行を再開できる。いくつかの場合においては、割り込みの後に中間状態から実行を再開できるように、命令(例えば、ムーブストリング命令)が動作の中間状態を反映するべくレジスタを修正できる。
図5は、エミュレーションモードの場合にはエミュレーションモードでない場合と比較して異なるリソース(1つまたは複数)および/または情報へのアクセスをプロセッサに可能にするロジック501の実施形態を図解したブロック図である。いくつかの実施形態においては、図5のロジックを、図1のプロセッサおよび/またはコンピュータシステム内および/または図3のロジック内に含めることができる。それに代えて図5のロジックを類似の、または異なるプロセッサまたはコンピュータシステム内に含めることができる。さらにまた、図1のプロセッサおよび/またはコンピュータシステムおよび/または図3のロジックは、図5に類似の、または異なるロジックを含むことができる。
プロセッサがエミュレーションモード518にないとき、所定の命令(例えば、所定のオペコードを有する命令)の第1のインスタンス503−1が復号化ロジック505に提供される。プロセッサがエミュレーションモード518で動作しているとき、同じ所定の命令(例えば、同じ所定のオペコードを有する他の命令)の第2のインスタンス503−2が復号化ロジックに提供される。その所定の命令の第2のインスタンス503−2は、復号器のエミュレーションあり命令の受信に応答して、エミュレーションあり命令のエミュレーションに使用される1つまたは複数の命令514のセットから提供できる。その命令セットは、オンダイ、オフダイ、または一部をオンダイおよび一部をオフダイとすることができるエミュレーションロジック515に含まれるとすることができる。エミュレーションロジック515は、エミュレーションロジックについて本明細書のいずれかの箇所で述べているオプションの特性の任意のものを有することができる。
復号化後命令プロセッサロジック507は、第2のインスタンス503−2に対応する復号化済み命令(1つまたは複数)506を受信できる。復号化後命令プロセッサロジックは、エミュレーションモードアウェアアクセス制御ロジック520を含むことができる。エミュレーションモードアウェアアクセス制御ロジックは、エミュレーションモードアウェアな方法で1つまたは複数のリソースおよび/または情報550へのアクセスを制御するべく動作できる。いくつかの実施形態においては、プロセッサがエミュレーションモードで動作していないとき、復号化後命令プロセッサロジック507が、リソース(1つまたは複数)および/または情報550への実質的に従来的なアクセスを伴って所定の命令の第1のインスタンス503−1を処理できる。示されているとおり、いくつかの実施形態においては、エミュレーションモードになく、その所定の命令の第1のインスタンス503−1を処理するとき、リソース(1つまたは複数)および/または情報550へのアクセスを防止551できる。エミュレーションモードにないときのリソース(1つまたは複数)および/または情報へのアクセスを防止することは、所定の命令が、概してそれらのリソース(1つまたは複数)および/または情報へのアクセスを必要とせず、また必要ベースでのみリソース(1つまたは複数)および/または情報の提供が望まれることから、またはその他の理由のために、例えば情報および/またはリソース(1つまたは複数)のセキュリティの保護等の可能性のある多様な理由のいずれかにとって適切であるとし得る。
これに対して、いくつかの実施形態においては、エミュレーションモード518での動作時に所定の命令の第2のインスタンス503−2が処理されているとき、復号化後命令プロセッサロジックが、リソース(1つまたは複数)および/または情報550への実質的に非従来的なアクセスを(例えば、非エミュレーションモードにあるときとは異なる方法で)使用できる。例えば、図解の実施形態に示されているとおり、リソース(1つまたは複数)および/または情報550へのアクセスは、エミュレーションモード518にあって、所定の命令の第2のインスタンス503−2を処理するときに許可552されるようにできる。例として述べるが、エミュレーションモード518は、ロジック507および/またはロジック520が、エミュレーションモードにあるときにその所定の命令のための情報および/またはリソース(1つまたは複数)への選択的なアクセスを可能にする特殊なハードウエア状態を有することを許可できる。例えば、1つまたは複数のアクセス特権ビットを提供し、エミュレーションモードにあるときに状態マシンによる情報への選択的なアクセスを可能にするべく構成できる。
多様な異なるタイプの情報および/またはリソース(1つまたは複数)550が企図される。適切なリソース(1つまたは複数)および/または情報の例は、限定ではないが、セキュリティ関連のリソース(1つまたは複数)および/または情報(例えば、セキュリティロジック)、暗号化および/または解読関連のリソース(1つまたは複数)および/または情報(例えば、暗号化ロジックおよび/または解読ロジック)、乱数発生器リソース(1つまたは複数)および/または情報(例えば、乱数発生器ロジック)、オペレーティングシステムおよび/または仮想マシンモニタに対応する特権またはリングレベルのために確保されているリソース(1つまたは複数)および/または情報、およびこれらの類を含む。
適切なリソース(1つまたは複数)および/または情報の他の例は、限定ではないが、復号化後命令プロセッサロジック507を有する物理プロセッサまたは論理プロセッサとは異なる物理プロセッサまたは論理プロセッサ(例えば、コア、ハードウエアスレッド、スレッドコンテキスト等)内のリソース(1つまたは複数)および/または情報を含む。これらの異なる物理または論理プロセッサは、同一または異なるソケット内にあるとすることができる。例として述べるが、エミュレーションモードにあるときにエミュレーションモードアウェア制御ロジック520は、エミュレーションモードにないときには復号化後命令プロセッサロジック507に利用可能とならない他のソケットの他のコアの情報および/またはリソース(1つまたは複数)へのアクセス(例えば、コアのステータスのクエリ)が可能になることがある。
好都合なことに、エミュレーションモードアウェアアクセス制御ロジック520は、エミュレーションモードにないときには命令セットの同じ命令に通常は利用可能とならないリソース(1つまたは複数)および/または情報へのアクセスを、命令514の少なくともいくつかがエミュレーションモードにあるときに選択的に有することを可能にする補助となり得る。それにもかかわらずセキュリティは、エミュレーションロジックをオンダイとするか、かつ/またはメモリの保護された部分内とすることができるので維持できる。
いくつかの実施形態においては、いくつかの実行レベル、例えばセキュリティ実行状態が、その種のエミュレーションを使用してそれらのリソース(1つまたは複数)および/または情報にアクセスすることを禁止できる。例えば、エミュレーションされたオペコードの使用がすべての実行状態に許可されなくてもよい。特殊なセキュリティ実行状態は、その種の割り込みまたはよりローレベルの実行が許可されると証明可能に安全でないことがある。それに代えて、その種の実行レベルまたはセキュリティ実行状態が類似のアクセスを必要とする場合に、それらは、エミュレーションソフトウエアに利用可能なハードウエアプリミティブを使用することによって代わりにそれを実装できる。
いくつかの実施形態においては、命令エミュレーションを、命令の所定のオペコードのための異なる意味の提供を補助するべく使用できる。命令セットのマクロ命令、マシン語命令、およびその他の命令は、しばしばオペレーションコードまたはオペコードを含む。オペコードは、概して、命令に応答して実施されるべき特定の命令および/または動作の指定に使用される命令の一部を表わす。例えば、パックド乗算命令のオペコードは、パックド加算命令のオペコードと異なるものとすることができる。概して言えば、オペコードは、物理的にグループ化されないのであれば論理的になされる1つまたは複数のフィールド内のいくつかのビットを含む。しばしば、望ましい数の命令/動作を可能にする一方でオペコードを比較的短く、または可能な限り短く保つべく試みることが望ましい。比較的長いオペコードは、復号器のサイズおよび/または複雑性を増加する傾向を有し、また概して、より命令を長くする傾向も有する。オペコード内の固定数のビットの場合には、概して固定数の異なる命令/動作のみが識別できる。この分野には、例えばエスケープコードの使用およびこの類によってオペコードの最大限の活用を試みる多様な技が存在する。それにもかかわらず、オペコードを用いて一意的に識別可能な命令の数は、概して、しばしば望まれるより限定される。概して言えば、最終的にいずれかのポイントで利用可能なオペコードをがなくなることを伴わずに、プロセッサのオペコード空間に新しい命令を追加し続けることは不可能である。
作業負荷は時間とともに変化する。同様に、望ましい命令および望ましい命令機能も時間とともに変化する。新しい命令機能は、一般に、進行基準でプロセッサに追加される。同様に、いくつかの命令/動作は、時間とともに比較的あまり有用でなくなるか、かつ/またはあまり頻繁に使用されなくなるか、かつ/またはあまり重要でなくなる。いくつかの場合においては、命令/動作が有する有用性または重要性が充分に限られるとき、それらを非推奨とすることができる。非推奨は、この分野において、構成要素、特徴、特性、または実施に適用されるステータスを指して、しばしば、それが破棄されるかまたは取って代わられる過程にあること、および/または将来においては利用できないか、またはサポートされないことから、概してそれを避けるべきであることを示すために一般に使用されている用語である。
一般に、その種の命令/動作は、一時的な後方互換性(例えば、既存の、またはレガシーコードの継続的な実行を可能にする)の提供を補助するために、直ちに削除される代わりに非推奨とされる。これは、コードが取って代わる命令/動作に適合する時間を与えること、および/または既存の、またはレガシーコードが段階的に廃止される時間を与えることができる。しばしば、命令セットからの命令/動作を非推奨にすることは、古いプログラムを充分に排除することが可能になるまで長時間、例えば数十年ではないとしても多くの年数を必要とする。従来的に、非推奨の命令/動作のオペコードの値は、その種の長い時間期間が経過するまで、異なる命令/動作のために取り戻すこと、または再使用することが可能でない。そのようにしなければ、レガシーソフトウエアを実行したとき、意図された非推奨の動作ではなく、そのオペコード値を有する命令が、取って代わる動作をプロセッサに実施させる可能性があり、誤った結果を生じさせる可能性がある。
いくつかの実施形態においては、命令エミュレーションを、命令の所定のオペコードのための異なる意味の提供を補助するべく使用できる。いくつかの実施形態においては、命令の所定のオペコードが異なる意味に解釈されることがある。いくつかの実施形態においては、所定のオペコードのために複数のオペコードの定義がサポートされていることがある。例えば、所定のオペコードを、その命令を有するソフトウエアプログラムが意図する意味を用いて解釈できる。例として述べるが、いくつかの実施形態においては、より古い、またはレガシーソフトウエアプログラムが、所定のオペコードを伴う命令が、より古い、レガシーの、または非推奨の意味を有することを示し、より新しいソフトウエアプログラムが、その所定のオペコードを伴う命令がより新しい意味を有することを示すことができる。いくつかの実施形態においては、より古い、または非推奨の意味がエミュレーションされ、より新しい意味が制御信号に復号化され、プロセッサのパイプラインで直接実行されるようにできる。好都合なことに、いくつかの実施形態においては、このことが、より古いプログラムが非推奨のオペコードを伴って走ることを可能にする一方で、その非推奨のオペコードが異なる意味を伴うより新しいプログラムのために使用されて性能の向上を補助することを可能にする後方互換性を提供しつつ、非推奨とされているオペコードのより早い取り戻しおよび再使用を可能にする補助となり得る。
図6は、プロセッサ内および/またはそれによって実施される方法660の実施形態のブロックフロー図である。いくつかの実施形態においては、図6の動作および/または方法を、図1のプロセッサおよび/または図3もしくは図7のロジックによって、および/またはそれの中で実施できる。プロセッサおよびロジックについて本明細書に述べられている構成要素、特徴、および特定のオプションの詳細もまた、図6の動作および/または方法にオプションとして適用される。それに代えて、図6の動作および/または方法を、類似の、または完全に異なるプロセッサまたはロジックによって、および/またはそれの中で実施することができる。さらにまた、図1のプロセッサおよび/または図3もしくは図7のロジックは、図6に類似の、または異なる動作および/または方法を実施できる。
この方法は、ブロック661において、所定のオペコードを有する第1の命令を受信することを含む。いくつかの実施形態では、第1の命令を復号器において受信できる。ブロック662においては、その所定のオペコードが第1の意味または第2の意味を有するか否かの決定を行なうことができる。いくつかの実施形態においては、第1の意味を第1のオペコード定義とし、第2の意味をそれとは異なる第2のオペコード定義とすることができる。以下においてさらに説明するとおり、いくつかの実施形態においては、これが、復号器によるインジケータ、例えば、フラグ、ステータスレジスタ、またはその他のオンダイ記憶位置の読み出し、および所定のオペコードが第1の意味または第2の意味を有するか否かのチェックを伴うことがある。以下においてさらに説明するとおり、いくつかの実施形態においては、プロセッサによって実行されるソフトウエアのロード時にソフトウエア(例えば、オペレーティングシステムモジュールのプログラムローダモジュール)が、フラグ、ステータスレジスタ、またはその他のオンダイ記憶位置にそのインジケータを格納できる。例として述べるが、ソフトウエアは、所定のオペコードが第1の意味または第2の意味を有することをソフトウエアが期待または指定するか否かを示すメタデータ(例えば、オブジェクトモジュールフォーマット)を含むことができる。
再度図6を参照すると、ブロック662における決定が、その所定のオペコードは第1の意味を有するというものであれば、この方法は、ブロック663に進むことができる。ブロック663においては、第1の命令を1つまたは複数のマイクロ命令、マイクロオペレーション、またはその他のよりローレベルの命令または制御信号に復号化できる。いくつかの実施形態においては、復号器が、これらの命令(1つまたは複数)または制御信号(1つまたは複数)を復号化後命令プロセッサロジック(例えば、実行ユニット等)に出力できる。復号化後命令プロセッサロジックは、これらの命令を、通常、エミュレーションが使用される場合よりはるかに高速に処理できる。いくつかの実施形態においては、非推奨でないオペコードの意味、比較的より新しいオペコードの意味、比較的より頻繁に使用されるオペコードの意味、より強く性能に影響するオペコードの意味、またはこれらの類のために第1の意味を使用できる。
その逆に、ブロック662における決定が、その所定のオペコードは第2の意味を有するというものであれば、この方法はブロック664に進むことができる。ブロック664においては、第1の命令のエミュレーションを誘導できる。例えば、復号器がエミュレーションロジックに、エミュレーショントラップを提供すること、またはその他の形でエミュレーションモードを通知することができる。その後に続いて、第2の意味を有するオペコードとともに第1の命令のエミュレーションに使用されるエミュレーションロジックの1つまたは複数の命令からなるセットを復号器に提供し、エミュレーションモードで処理させることができる。これは、実質的に本明細書のいずれかの箇所で述べたとおりに行なうことができる。いくつかの実施形態においては、非推奨のオペコードの意味、非推奨になる過程にあるか非推奨になる直前のオペコードの意味、比較的より古いオペコードの意味、あまり頻繁に使用されないオペコードの意味、あまり強く性能に影響しないオペコードの意味、またはこれらの類のために第2の意味を使用できる。
図7は、所定のオペコードが異なる意味を有することを可能にするロジック701の実施形態を図解したブロック図である。いくつかの実施形態においては、図7のロジックを、図1のプロセッサおよび/またはコンピュータシステム内および/または図3のロジック内に含めることができる。それに代えて図7のロジックを類似の、または異なるプロセッサまたはコンピュータシステム内に含めることができる。さらにまた、図1のプロセッサおよび/またはコンピュータシステムおよび/または図3のロジックは、図7に類似の、または異なるロジックを含むことができる。
メモリ710は、第1のソフトウエアモジュール711−1、第2のソフトウエアモジュール711−2、およびプログラムローダモジュール770を有するオペレーティングシステムモジュール797を含む。いくつかの実施形態においては、第1のソフトウエアモジュールが、所定のオペコードについて第1の意味の使用を示すインジケータ772を含み、第2のソフトウエアモジュールが、所定のオペコードについてそれとは異なる第2の意味の使用を示すインジケータ773を含む。例として述べるが、第1および第2のソフトウエアモジュールは、それぞれ、これらのインジケータ772、773を含むオブジェクトモジュールフォーマット、その他のメタデータ、または1つまたは複数のデータ構造を含むことができる。プログラムローダモジュールは、プロセッサ上での実行のために第1のソフトウエアモジュールおよび第2のソフトウエアモジュールをプロセッサにロードするべく動作可能であるとし得る。示されているとおり、いくつかの実施形態においては、プログラムローダモジュールが、特定のソフトウエアモジュールによって示される所定のオペコードの意味をプロセッサ状態としてプロセッサ上にロードするモジュール771を含むことができる。いくつかの実施形態においては、モジュール771が、所定のオペコードのために第1または第2の意味を使用するか否かを示すインジケータ775としてオンダイ記憶位置774に、第1のソフトウエアモジュールのロード時にインジケータ772をロードするか、第2のソフトウエアモジュールのロード時にインジケータ773をロードするべく動作可能であるとし得る。オンダイ記憶位置は、復号器705と結合されているか、またはその他の形でアクセス可能である。
いくつかの実施形態においては、例えば古いソフトウエアモジュールの場合に、そのソフトウエアモジュールが所定のオペコードのために所定の意味を使用するという明示的なインジケータを有していないことがある。例えば、より新しい意味の存在の前にソフトウエアが記述されることがある。いくつかの実施形態においては、モジュール771および/またはプログラムローダ770が、ソフトウエアモジュールは所定のオペコードの第1または第2の意味を使用する必要があるか否かを推論するべく動作可能であるとすることができる。例えばこれは、プログラム内に埋め込まれた特徴リスト、プログラムのフォーマット、プログラムの古さまたはプログラムの作成された年、またはその他の、メタデータおよび/またはソフトウエアモジュール内のその種の情報から推論できる。例えば、第2のソフトウエアモジュール711−2が古いソフトウエアであり、所定のオペコードの第1の意味の導入/定義の前に作成されたものである場合には、プログラムローダモジュールおよび/またはオペレーティングシステムモジュールが、第2のソフトウエアモジュールはその所定のオペコードのために第1の意味ではなく、第2の意味を使用する必要があると推論するべく動作可能であるとすることができる。モジュール771は、ソフトウエアの切り換えまたは交換のときに記憶エリア内のインジケータ775を切り換えまたは交換するべく動作可能であるとすることができる。
さらに例証するために、第1のソフトウエアモジュール711−1から復号器705に提供される所定のオペコードを伴う命令の第1のインスタンス703−1を考える。第1のソフトウエアモジュールは、所定のオペコードに対して第1の意味を使用することを示すインジケータ772を含み、モジュール771はそれを記憶位置774内に保存しておくことができる。復号器は、記憶位置774に結合されて所定のオペコードのために第1または第2の意味を使用するか否かについてのインジケータ775をチェックするチェックロジック776を含む。チェックロジックは、記憶位置にアクセスするか、またはそれを読み出し、第1のソフトウエアモジュールからの命令の第1のインスタンスの処理時に、所定のオペコードのために第1の意味が使用されるべきであると決定できる。いくつかの実施形態においては、記憶位置774が、それぞれが異なるオペコードに対応する複数のインジケータを格納する複数の異なる記憶位置を含むことができる。それに応答して復号器の復号化ロジック777が、所定のオペコードの第1の意味を前提として命令を復号化できる。1つまたは複数の復号化済み命令706または1つまたは複数のその他の制御信号を、復号器から、それらを処理できる復号化後命令処理ロジック707へ提供できる。
同じ所定のオペコードを伴う命令の第2のインスタンス703−2を、第2のソフトウエアモジュール711−2から復号器705へ提供することができる。第2のソフトウエアモジュールは、所定のオペコードに対して第2の意味を使用することを示すインジケータ773を含み、モジュール771はそれを記憶位置774内に保存しておくことができる。チェックロジック776は、インジケータ775をチェックし、第2のソフトウエアモジュールからの命令の第2のインスタンスの処理時に、所定のオペコードのために第2の意味が使用されるべきであると決定できる。それに応答して、エミュレーション誘導ロジック778が、命令の第2のインスタンス703−2のエミュレーションを誘導できる。例えば、エミュレーション誘導ロジックは、エミュレーショントラップを行なうか、またはその他の形でエミュレーションモード718を通知できる。第2の意味を伴う所定のオペコードを有する命令の第2のインスタンスのエミュレーションに使用される1つまたは複数の命令714のセットを、エミュレーションロジック715から復号器に提供できる。エミュレーションロジックは、オンダイ、オフダイ、または一部をオンダイおよび一部をオフダイとすることができる。エミュレーションロジック715は、エミュレーションロジックについて本明細書のいずれかの箇所で述べているオプションの特性の任意のものを有することができる。
いくつかの実施形態においては、命令(1つまたは複数)714は、所定のオペコードを有する命令と同じ命令セットのものとすることができる。いくつかの実施形態においては、復号器が、これらの命令のそれぞれを復号化し、それらを、復号化済み命令706として、またはその他の制御信号として復号化後命令処理ロジックに提供できる。いくつかの実施形態においては、復号化後命令処理ロジックが、本明細書のいずれかの箇所で述べているもの(例えば、図1または3〜5のいずれか)に類似または同じとすることができるエミュレーションモードアウェア命令プロセッサロジック720を含むことができる。示されているとおり、いくつかの実施形態においては、エミュレーションモードアウェア命令処理ロジックは、エミュレーションモード718と結合されるか、またはその他の方法でそれを認識できる。さらにまた、エミュレーションモードアウェア命令処理ロジックは、エミュレーションロジックの記憶位置721と結合され、そこからのデータの読み出し、およびそこへの書き込みができる。
いくつかの実施形態においては、ロジック796を含めてプロセッサ特徴識別レジスタ795を、記憶位置774内のインジケータ775に基づいて更新することができる。適切なプロセッサ特徴識別レジスタの例に、CPUID(CPUアイデンティフィケーション(CPU IDentification))のために使用されるものがある。ロジック796は、記憶位置774およびプロセッサ特徴識別レジスタ795と結合できる。プロセッサ特徴識別レジスタは、プロセッサの命令セットのプロセッサ特徴識別命令(例えば、CPUID命令)により読み出し可能であるとすることができる。ソフトウエアは、プロセッサ特徴識別命令を実行することによってプロセッサ特徴識別レジスタからオペコードの意味のインジケータを読み出すことができる。
いくつかの実施形態においては、特権レベルおよび/またはリングレベルロジック794を復号器705と結合し、特権レベルおよび/またはリングレベルに基づいて復号器にオペコードの所定の意味の使用を強制するか、またはその他の形で使用させることができる。例えば、第1の意味がより新しい意味であり、第2の意味が非推奨の意味である実施形態においてはこれが有用となり得る。オペレーティングシステムは、通常、ユーザアプリケーションとは異なる特定の特権レベルおよび/またはリングレベルにおいて動作する。さらにまた、オペレーティングシステムは、通常、所定のオペコードのより古い意味ではなく、その所定のオペコードのより新しい意味を、一般にそれらが頻繁に更新されることから使用する。その種の場合においては、特権レベルおよび/またはリングレベルロジック794が、オペレーティングシステムのものに対応する特権レベルおよび/またはリングレベルにあるとき所定のオペコードのより新しい意味を復号器に使用させることができる。
説明の簡潔性のため、ここでは、オペコードの2つの異なる意味を代表的に説明している。しかしながら、所定のオペコードのために3またはそれより多くの異なる意味が他の実施様態において使用できることは認識されるであろう。例として述べれば、記憶位置774は、複数のその種の異なる意味のいずれが所定のオペコードのために使用されるべきであるかを示す2またはそれより多くのビットを含むことができる。同様にプロセッサ特徴識別レジスタは、その所定のオペコードのための複数のその種の意味を反映できる。
図8は、オペレーティングシステムモジュールによって実施できる方法880の実施形態のブロックフロー図である。いくつかの実施形態においては、この方法をプログラムローダモジュールによって実施できる。
この方法は、所定のオペコードを有する第1の命令が、ソフトウエアプログラムからプロセッサによって実行されるときに第1の意味に代えて第2の意味を有するという決定をブロック881に含む。これは、異なる実施形態において異なる方法で行なうことができる。いくつかの実施形態においては、ソフトウエアプログラムが、所定のオペコードのために所定の意味を使用することのインジケータを明示的に指定できる。例えば、オペレーティングシステムモジュールがソフトウエアプログラムのメタデータを調べることができる。例えば、いずれの意味を使用するかを示すフラグがオブジェクトモジュールフォーマット内に存在することがある。他の実施形態において、例えばレガシーソフトウエアの場合には、いずれの意味を使用するかを示すインジケータをソフトウエアプログラムが明示的に指定しないことがある。いくつかの実施形態においては、いずれの意味を使用するかを推論するロジックをオペレーティングシステムモジュールが含むことができる。これは、多様な異なる方法で行なうことができる。
いくつかの実施形態においては、これが、ソフトウエアプログラムの特徴リストを調べることを含むことができる。いくつかの場合において、特徴リストは、命令のいずれのバージョンが期待されているかを指定できる。いくつかの実施形態においては、これが、ソフトウエアプログラムの作成日を調べることを含むことができる。特定の日付、例えばより新しい取って代わる意味の命令の日付より古い作成日は、そのソフトウエアプログラムがより古いか、または非推奨の意味を使用することのインジケータであるとして推論できる。いくつかの実施形態においては、これが、ソフトウエアプログラムのフォーマットを調べることを含むことができる。例えば、特定のレベルの前の特定の改訂のプログラムフォーマットを、より古いまたは非推奨の意味の推論に使用できる。いくつかの実施形態においては、これが、特定の意味の使用が既知のソフトウエアプログラムの明示的なリスト(例えば、例外リスト)を調べることを含むことができる。例として述べるが、このリストは、履歴情報に基づいて更新できる(例えば、一方の意味からエラーがもたらされた場合には、他方の意味をリストに追加できる)。これは単なる1つの例に過ぎない。意味を推論するこの他の方法も企図されている。
この方法は、ブロック882において、所定のオペコードを有する第1の命令は第1の意味に代えて第2の意味を有するというインジケータをプロセッサの状態に格納することを含む。例えば、オペレーティングシステムモジュールは、本明細書のいずれかの箇所で述べたとおり、復号器に結合された記憶位置のビットを修正できる。
図9は、1つまたは複数の関数、サブルーチン、またはソフトウエアライブラリ983のその他の部分のセットであって、それらを使用するソフトウエアに適した所定のオペコードの意味を有するものを選択するべく動作可能な選択モジュール985を含むプログラムローダモジュール970の実施形態のブロック図である。ソフトウエアライブラリは、概して、多様なソフトウエアモジュールが使用することができるソフトウエアの集合を表わし、サブルーチン、関数、クラス、プロシージャ、スクリプト、構成データ、およびこれらの類の形式の既存のソフトウエアを含むことができる。ソフトウエアモジュールは、多様な機能を含むべく、ライブラリのこれらの多様な部分を使用できる。例として、ソフトウエアモジュールは、多様な数学的関数またはサブルーチンを有する数学ソフトウエアライブラリまたはそれの一部を組み込むことができる。
示されているとおり、いくつかの実施形態においては、ライブラリが、所定のオペコードの第1の意味を使用するライブラリの関数、サブルーチン、またはその他の部分の第1のセットを含むことができる。またライブラリは、その所定のオペコードの異なる第2の意味を使用するライブラリの関数、サブルーチン、またはその他の部分の第2のセットを含むことができる。オプションとして、オペコードの意味が2つより多い場合には、3つまたはそれより多くの異なる意味のそれぞれについて同様にライブラリの異なる部分が存在し得る。いくつかの場合においては、異なる意味を使用する部分が、異なるコード部分となることがある。その他の場合においては、それらの部分を同一コードの異なる部分とすることができ、分岐またはその他の条件付きの移動を使用して第1の意味または第2の意味を使用する部分のいずれかにも適宜移動することができる。
再度図を参照するが、プログラムローダモジュール970は、所定のオペコードの第1の意味を使用する第1のソフトウエアモジュール911−1、および所定のオペコードの第2の意味を使用する第2のソフトウエアモジュール911−2の両方のためにライブラリの部分をロードできる。プログラムローダモジュールは、1つまたは複数の関数、サブルーチン、またはソフトウエアライブラリのその他の部分のセットであって、それらを使用するソフトウエアに適した所定のオペコードの意味を有するものを選択するべく動作可能な選択モジュール985を含む。例えば、選択モジュールは、ライブラリの部分であって、それらを使用するソフトウエアと同じ所定のオペコードの意味を有する部分を選択できる。例えば、図に示されているとおり、選択モジュールは、第1のソフトウエアモジュール911−1のために、それが所定のオペコードの第1の意味を使用することから、第1のセット984−1を選択できる。同様に選択モジュールは、第2のソフトウエアモジュール911−2のために、それが所定のオペコードの第2の意味を使用することから、第2のセット984−2を選択できる。第1のソフトウエア911−1が古いソフトウエアであり、所定のオペコードの第1の意味が非推奨の意味である1つの特定の実施形態においては、選択モジュールが、所定のオペコードのための同じ非推奨の意味を使用するライブラリの部分の第1のセット984を選択するべく動作可能であるとし得る。したがって、選択モジュールは、ソフトウエアと一貫しているか、または同じである所定のオペコードの意味を使用するライブラリの部分を選択でき、ライブラリのその部分をソフトウエアは使用する。 例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサ内に実装することができる。例えば、その種のコアの実装には(1)汎用コンピューティングのために意図された汎用インオーダコア、(2)汎用コンピューティングのために意図された高性能汎用アウトオブオーダコア、(3)主としてグラフィックおよび/または科学(スループット)コンピューティングのために意図された専用コアを含めることができる。異なるプロセッサの実装には(1)汎用コンピューティングのために意図された1つまたは複数の汎用インオーダコアおよび/または汎用コンピューティングのために意図された1つまたは複数の汎用アウトオブオーダコアを含むCPU、および(2)主としてグラフィックおよび/または科学(スループット)のために意図された1つまたは複数の専用コアを含むコプロセッサを含めることができる。その種の異なるプロセッサにより、異なるコンピュータシステムアーキテクチャが実施され得る。それには(1)CPUとは別のチップ上のコプロセッサ、(2)CPUと同一パッケージ内の別々のダイ上のコプロセッサ、(3)CPUと同一のダイ上のコプロセッサ(この場合においては、しばしばその種のコプロセッサが、内蔵型グラフィックおよび/または科学(スループット)ロジック等の専用ロジック、または専用コアと呼ばれる)、および(4)同一ダイ上に前述のCPU(しばしば、アプリケーションコア(1つまたは複数)またはアプリケーションプロセッサ(1つまたは複数)と呼ばれる)、前述のコプロセッサおよび追加の機能を含むことができるシステムオンチップを含めることができる。次に例示的なコアアーキテクチャを説明し、その後、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。 例示的なコアアーキテクチャ インオーダおよびアウトオブオーダコアのブロック図
図10Aは、本発明の実施形態に係る例示的なインオーダパイプライン、およびレジスタリネーム、アウトオブオーダ発行/実行パイプラインの両方を図解したブロック図である。図10Bは、本発明の実施形態に係るプロセッサ内に含まれるインオーダアーキテクチャコア、および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方の例示的な実施形態を図解したブロック図である。図10A−B内の実線のボックスはインオーダパイプラインおよびインオーダコアを図解し、オプションの破線のボックスの追加は、レジスタリネーム、アウトオブオーダ発行/実行パイプラインおよびコアを図解している。インオーダ態様がアウトオブオーダ態様のサブセットであるとしてアウトオブオーダ態様を説明する。
図10Aにおいて、プロセッサパイプライン1000は、フェッチ段階1002、長さ復号化段階1004、復号化段階1006、割付けステージ1008、リネーム段階1010、スケジューリング(ディスパッチまたは発行としても知られる)段階1012、レジスタ読み出し/メモリ読み出し段階1014、実行段階1016、書き戻し/メモリ書き込み段階1018、例外処理段階1022、コミット段階1024を含む。
図10Bは、実行エンジンユニット1050に結合されたフロントエンドユニット1030を含み、それら両方がメモリユニット1070に結合されるプロセッサコア1090を示している。コア1090は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドまたは代替コアタイプとすることができる。さらに他のオプションとして、コア1090は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット(GPGPU)コア、グラフィックコア、またはこれらの類の専用コアとすることができる。
フロントエンドユニット1030は分岐予測ユニット1032を含み、それが命令キャッシュユニット1034に結合され、それが命令翻訳ルックアサイドバッファ(TLB)1036に結合され、それが命令フェッチユニット1038に結合され、それが復号化ユニット1040に結合されている。復号化ユニット1040(または復号器)は、命令を復号化し、出力として、オリジナルの命令から復号化されるか、またはその他の形でそれらを反映するか、それらから引き出される1つまたは複数のマイクロ動作、マイクロコードの入口ポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成する。復号化ユニット1040は、多様な異なるメカニズムを使用して実装できる。適切なメカニズムの例は、限定ではないが、ルックアップテーブル、ハードウエア実装、プログラム可能ロジックアレイ(PLA)、マイクロコード読出し専用メモリ(ROM)等を含む。一実施形態においては、コア1090が、マイクロコードROMまたはその他の、特定のマクロ命令のためのマイクロコードを格納する媒体を含む(例えば、復号化ユニット1040内またはフロントエンドユニット1030内)。復号化ユニット1040は、実行エンジンユニット1050内のリネーム/割付け器ユニット1052に結合されている。
実行エンジンユニット1050は、リタイアメントユニット1054に結合されたリネーム/割付け器ユニット1052および1つまたは複数のスケジューラユニット1056のセットを含む。スケジューラユニット1056(1つまたは複数)は、確保ステーション、中央命令ウインドウ等を含む任意数の異なるスケジューラを表わす。スケジューラユニット1056(1つまたは複数)は、物理レジスタファイル(1つまたは複数)ユニット1058(1つまたは複数)に結合される。物物理レジスタファイル(1つまたは複数)ユニット1058のそれぞれは、異なるものが1つまたは複数の異なるデータ型、例えばスカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス(例えば、命令ポインタ、すなわち次に実行されるべき命令のアドレス)等を格納する1つまたは複数の物理レジスタファイルを表わす。一実施形態においては、物理レジスタファイル(1つまたは複数)ユニット1058が、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラーレジスタユニットを包含する。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供できる。物理レジスタファイル(1つまたは複数)ユニット1058(1つまたは複数)の上には、リタイアメントユニット1054が重ねられており、レジスタリネームおよびアウトオブオーダ実行を実装できる多様な方法(例えば、リオーダバッファ(1つまたは複数)およびリタイアメントレジスタファイル(1つまたは複数)の使用、将来ファイル(1つまたは複数)、履歴バッファ(1つまたは複数)、およびリタイアメントレジスタファイル(1つまたは複数)の使用、レジスタマップおよびレジスタのプールの使用)を説明する。リタイアメントユニット1054および物理レジスタファイル(1つまたは複数)ユニット1058(1つまたは複数)は、実行クラスタ1060(1つまたは複数)に結合される。実行クラスタ1060(1つまたは複数)は、1つまたは複数の実行ユニット1062のセットおよび1つまたは複数のメモリアクセスユニット1064のセットを含む。実行ユニット1062は、多様な型のデータ(例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して多様な動作(例えば、シフト、加算、減算、乗算)を行なうことができる。
いくつかの実施形態は、特定の機能または機能のセットに専用の多数の実行ユニットを含むことができるが、他の実施形態は、すべての機能をすべて行なう1つの実行ユニットまたは複数の実行ユニットだけを含むことができる。スケジューラユニット1056(1つまたは複数)、物理レジスタファイル(1つまたは複数)ユニット1058(1つまたは複数)、および実行クラスタ1060(1つまたは複数)は、特定の実施形態が特定の型のデータ/動作のために別々のパイプラインを作り出すことから可能性として複数であるとして示されている(例えば、スカラー整数パイプライン、スカラー浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインはそれぞれが自身のスケジューラユニット、物理レジスタファイル(1つまたは複数)ユニット、および/または実行クラスタを有し、また別々のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット1064(1つまたは複数)を有する特定の実施形態が実装される)。これについても理解されるように、別々のパイプラインが使用される場合には、これらのパイプラインのうちの1つまたは複数がアウトオブオーダ発行/実行となり、残りがインオーダとなることがある。
メモリアクセスユニット1064のセットは、レベル2(L2)キャッシュユニット1076に結合されたデータキャッシュユニット1074に結合されデータTLBユニット1072を含むメモリユニット1070に結合される。1つの例示的な実施形態においては、メモリアクセスユニット1064が、それぞれがメモリユニット1070内のデータTLBユニット1072に結合されたロードユニット、格納アドレスユニット、および格納データユニットを含むことができる。命令キャッシュユニット1034は、さらにメモリユニット1070内のレベル2(L2)キャッシュユニット1076に結合される。L2キャッシュユニット1076は、1つまたは複数の他のレベルのキャッシュに、最終的にはメインメモリに結合される。
例として述べるが、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアのアーキテクチャは、次のとおりにパイプライン1000を実装できる。(1)命令フェッチユニット1038がフェッチ段階1002および長さ復号化段階1004を実施し、(2)復号化ユニット1040が復号化段階1006を実施し、(3)リネーム/割付け器ユニット1052が割付けステージ1008およびリネーム段階1010を実施し、(4)スケジューラユニット1056(1つまたは複数)がスケジューリング段階1012を実施し、(5)物理レジスタファイル(1つまたは複数)ユニット1058(1つまたは複数)およびメモリユニット1070がレジスタ読み出し/メモリ読み出し段階1014を実施し、実行クラスタ1060が実行段階1016を実施し、(6)メモリユニット1070および物理レジスタファイル(1つまたは複数)ユニット1058(1つまたは複数)が書き戻し/メモリ書き込み段階1018を実施し、(7)多様なユニットが例外処理段階1022にかかわり合うことがあり、(8)リタイアメントユニット1054および物理レジスタファイル(1つまたは複数)ユニット1058(1つまたは複数)がコミット段階1024を実施する。
コア1090は、本明細書に述べられている命令(1つまたは複数)を含め、1つまたは複数の命令からなるセット(例えば、x86命令セット(より新しいバージョンに追加されたいくつかの拡張を伴う)、カリフォルニア州サニーベイルのMIPSテクノロジのMIPS命令セット、カリフォルニア州サニーベイルのARMホーディングスのARM命令セット(NEON等のオプションの追加の拡張を伴う))をサポートできる。一実施形態においては、コア1090が、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される動作がパックドデータを使用して実施されることを可能にする。
理解されるように、コアは、マルチスレッドをサポートすること(動作またはスレッドの2つまたはそれより多くの並列セットを実行すること)、およびそれを、タイムスライスマルチスレッド、同時マルチスレッド(単一の物理コアが、その物理コアが同時にマルチスレッディングするスレッドのそれぞれのためにロジックコアを提供する)、またはこれらの組合せ(例えば、インテル(Intel(登録商標))のハイパースレッディング(Hyperthreading)テクノロジにおけるようなタイムスライスフェッチおよび復号化およびその後の同時マルチスレッド)を含む多様な方法で行なうことができる。
レジスタリネームがアウトオブオーダ実行の文脈で述べられているが、レジスタリネームは、インオーダアーキテクチャにおいても使用できることは理解されるべきである。図解されているプロセッサの実施形態は、別々の命令およびデータキャッシュユニット1034/1074および共有L2キャッシュユニット1076も含んでいるが、代替の実施形態が、命令およびデータ両方のために単一の内部キャッシュ、例えばレベル1(L1)内部キャッシュを、または複数レベルの内部キャッシュを有し得る。いくつかの実施形態においては、システムが、内部キャッシュ、およびコアおよび/またはプロセッサの外部となる外部キャッシュの組合せを含むことができる。それに代えて、キャッシュのすべてをコアおよび/またはプロセッサの外部とすることができる。 特定の例示的なインオーダコアアーキテクチャ
図11A−Bは、より具体的な例示のインオーダコアアーキテクチャのブロック図であり、コアは、チップ内のいくつかのロジックブロック(同一タイプおよび/または異なるタイプの他のコアも含む)の1つとなる。これらのロジックブロックは、高帯域相互接続ネットワーク(例えば、リングネットワーク)を通じ、いくつかの固定関数ロジック、メモリ入出力インタフェース、およびその他の必要な入出力ロジックとアプリケーションに応じて通信する。
図11Aは、本発明の実施形態に従ってシングルプロセッサコアを、それのオンダイ相互接続回路網1102への接続とともに、およびそれのレベル2(L2)キャッシュ1104のローカルサブセットとともに示したブロック図である。一実施形態においては、命令復号器1100がパックドデータ命令セット拡張付きのx86命令セットをサポートする。L1キャッシュ1106は、スカラーおよびベクトルユニットへのキャッシュメモリに対する低レイテンシーアクセスを可能にする。一実施形態においては(設計を簡潔にするために)スカラーユニット1108およびベクトルユニット1110が別々のレジスタセット(それぞれ、スカラーレジスタ1112およびベクトルレジスタ1114)を使用し、それらの間において転送されるデータがメモリに書き込まれ、その後、レベル1(L1)キャッシュ1106から読み戻されるが、本発明の代替の実施形態は、異なるアプローチ(例えば、単一のレジスタセットを使用するか、または2つのレジスタファイルの間において書き込みおよび読み戻しなしにデータが転送されることを可能にする通信路を含む)を使用できる。
L2キャッシュ1104のローカルサブセットは、プロセッサコアごとに1つの独立したローカルサブセットに分割されるグローバルL2キャッシュの部分である。各プロセッサコアは、それ自身のL2キャッシュ1104のローカルサブセットへの直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、それのL2キャッシュサブセット1104内に格納され、それぞれ自身のローカルL2キャッシュサブセットにアクセスしている他のプロセッサコアと並行した迅速なアクセスが可能である。プロセッサコアによって書き込まれたデータは、それのL2キャッシュサブセット1104内に格納され、必要な場合には、他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンスを確保する。リングネットワークは、双方向であり、プロセッサコア、L2キャッシュ、およびその他のロジックブロック等のエージェントが、チップ内において互いに通信することを可能にする。各リングデータ路は、方向当たり1012ビットの幅である。
図11Bは、本発明の実施形態に係る図11Aのプロセッサコアの一部の拡大図である。図11Bは、L2キャッシュ1106のL1データキャッシュ1106A部分をはじめ、ベクトルユニット1110およびベクトルレジスタ1114に関してのより詳細を含んでいる。特に、ベクトルユニット1110は、整数、単精度浮動小数点、および倍精度浮動小数点命令のうちの1つまたは複数を実行する16ワイドのベクトル処理ユニット(VPU)(16ワイドALU 1128参照)である。VPUは、メモリ入力に対する、スウィズルユニット1120を用いたレジスタ入力のスウィズル、数値化ユニット1122A−Bを用いた数値化、および複製ユニット1124を用いたメモリ入力の複製をサポートする。書き込みマスクレジスタ1126は、結果のベクトル書き込みの修飾を可能にする。 内蔵型メモリコントローラおよびグラフィックを伴うプロセッサ
図12は、本発明の実施形態に係る内蔵型メモリコントローラを有することができ、かつ内蔵型グラフィックを有することができる1より多くの数のコアを有することができるプロセッサ1200のブロック図である。図12内の実線のボックスは、シングルコア1202A、システムエージェント1210、1つまたは複数のバスコントローラユニット1216のセットを伴うプロセッサ1200を図解しており、オプションで追加される破線のボックスは、複数のコア1202A〜N、システムエージェントユニット1210内の1つまたは複数の内蔵型メモリコントローラユニット1214のセット、および専用ロジック1208を伴う代替プロセッサ1200を図解している。
したがって、プロセッサ1200の種々の異なる実装には(1)内蔵型グラフィックおよび/または科学(スループット)ロジック(1つまたは複数のコアを含むことができる)となる専用ロジック1208、および1つまたは複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組合せ)となるコア1202A〜Nを伴うCPU、(2)主としてグラフィックおよび/または科学(スループット)のために意図された多数の専用コアとなるコア1202A〜Nを伴うコプロセッサ、および(3)多数の汎用インオーダコアとなるコア1202A〜Nを伴うコプロセッサを含めることができる。したがって、プロセッサ1200は、汎用プロセッサ、コプロセッサ、または、例えばネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU(汎用グラフィック処理ユニット)、高スループット多集積コア(MIC)コプロセッサ(30またはそれを超えるコアを含む)、埋込み型プロセッサ、またはこれらの類の専用プロセッサとすることができる。プロセッサは、1つまたは複数のチップ上に実装できる。プロセッサ1200は、例えばBiCMOS、CMOS、またはNMOS等の多くのプロセステクノロジのうちのいずれかを使用して1つまたは複数の基板上に実装されるか、かつ/またはそれの一部とすることができる。
メモリ階層は、コア内の1つまたは複数のレベルのキャッシュ、1つまたは複数の共有キャッシュユニット1206のセット、および内蔵型メモリコントローラユニット1214のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット1206のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、またはその他のレベルのキャッシュ等の1つまたは複数の中レベルキャッシュ、最終レベルのキャッシュ(LLC)、および/またはこれらの組合せを含むことができる。一実施形態においては、リングベースの相互接続ユニット1212が内蔵型グラフィックロジック1208、共有キャッシュユニット1206のセット、およびシステムエージェントユニット1210/内蔵型メモリコントローラユニット1214(1つまたは複数)を相互接続するが、代替の実施形態は、その種のユニットの相互接続のための周知の技術を任意数使用することができる。一実施形態においては、1つまたは複数のキャッシュユニット1206とコア1202A〜Nの間においてコヒーレンスが維持される。
いくつかの実施形態においては、コア1202A〜Nのうちの1つまたは複数がマルチスレッドの能力を有する。システムエージェントユニット1210は、コア1202A〜Nを調和させ、動作させる構成要素を含む。システムエージェントユニット1210は、例えば、パワー制御ユニット(PCU)およびディスプレイユニットを含むことができる。PCUは、コア1202A〜Nおよび内蔵型グラフィックロジック1208のパワー状態を調整するために必要なロジックおよび構成要素であるとすること、またはそれを含むとすることができる。ディスプレイユニットは、外部的に接続された1つまたは複数のディスプレイを駆動するためのものである。
コア1202A〜Nは、アーキテクチャ命令セットという見地から同種または異種とすることができ、言い換えると、コア1202A〜Nのうちの2つまたはそれより多くが同一命令セットを実行する能力を持つ一方で、その他がその命令セットまたは異なる命令セットのサブセットを実行する能力しか持たないとすることができる。 例示的なコンピュータアーキテクチャ
図13〜16は、例示的なコンピュータアーキテクチャのブロック図である。その他の、ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、工学ワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋込み型プロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および多様なその他の電子デバイスについてこの分野で周知のシステム設計および構成もまた適している。概して言えば、本明細書に開示されているプロセッサおよび/またはその他の実行ロジックを組み込むことができる非常に多様なシステムまたは電子デバイスが一般に適している。
ここで図13を参照すると、本発明の一実施形態に係るシステム1300のブロック図が示されている。システム1300は、コントローラハブ1320に結合された1つまたは複数のプロセッサ1310、1315を含むことができる。一実施形態においては、コントローラハブ1320が、グラフィックメモリコントローラハブ(GMCH)1390および入出力ハブ(IOH)1350(別々のチップ上とすることができる)を含み、GMCH 1390は、メモリならびにメモリ1340およびコプロセッサ1345が結合されるグラフィックコントローラを含み、IOH 1350は、入力/出力(入出力)デバイス1360をGMCH 1390と結合する。その代替としては、メモリおよびグラフィックコントローラのうちの1つまたは両方を(ここで述べているとおり)プロセッサ内に統合し、メモリ1340およびコプロセッサ1345をプロセッサ1310、およびIOH 1350を伴うシングルチップ内のコントローラハブ1320と直接結合する。
図13には、追加のプロセッサ1315のオプションの性質が破線を用いて示されている。各プロセッサ1310、1315は、本明細書で述べている処理コアのうちの1つまたは複数を含むこと、および何らかのバージョンのプロセッサ1200とすることができる。
メモリ1340は、例えばダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組合せとすることができる。少なくとも一実施形態については、コントローラハブ1320が、プロセッサ(1つまたは複数)1310、1315と、フロントサイドバス(FSB)等のマルチドロップバス、クイックパス相互接続(QuickPath Interconnect (QPI))等のポイントツーポイントインタフェース、および類似の接続1395を介して通信する。
一実施形態においては、コプロセッサ1345が、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、埋込み型プロセッサ、またはこれらの類の専用プロセッサになる。一実施形態においては、コントローラハブ1320が、内蔵型グラフィックアクセラレータを含むことができる。
アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、温度特性、パワー消費特性およびこれらの類を含む利点の一連のメトリクスの観点から物理的リソース1310、1315の間には多様な差が存在し得る。
一実施形態においては、プロセッサ1310が、一般的なタイプのデータ処理動作を制御する命令を実行する。命令の中には、コプロセッサ命令を埋め込むことができる。プロセッサ1310は、これらのコプロセッサ命令を、アタッチされたコプロセッサ1345によって実行されるべきタイプのものであるとして認識する。したがって、プロセッサ1310は、コプロセッサバスまたはその他の相互接続上において、それらのコプロセッサ命令(または、コプロセッサ命令を表わす制御信号)をコプロセッサ1345に向けて発行する。コプロセッサ(1つまたは複数)1345は、それを受け入れ、受信したコプロセッサ命令を実行する。
次に図14を参照すると、本発明の実施形態に係るより詳細な第1の例示的なシステム1400のブロック図が示されている。図14に示されているとおり、マルチプロセッサシステム1400は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1450を介して結合された第1のプロセッサ1470および第2のプロセッサ1480を含む。プロセッサ1470および1480のそれぞれは、プロセッサ1200のいずれかのバージョンとすることができる。本発明の一実施形態においては、プロセッサ1470および1480がそれぞれプロセッサ1310および1315になり、コプロセッサ1438がコプロセッサ1345になる。他の実施形態においては、プロセッサ1470および1480がそれぞれプロセッサ1310およびコプロセッサ1345になる。
プロセッサ1470および1480は、それぞれが内蔵型メモリコントローラ(IMC)ユニット1472および1482を含むとして示されている。プロセッサ1470は、また、それのバスコントローラユニットの一部としてポイントツーポイント(P−P)インタフェース1476および1478を含み、同様に第2のプロセッサ1480もP−Pインタフェース1486および1488を含む。プロセッサ1470、1480は、ポイントツーポイント(P−P)インタフェース1450を介し、P−Pインタフェース回路1478、1488を使用して情報を交換できる。図14に示されているとおり、IMC 1472および1482は、プロセッサをそれぞれのメモリに、すなわち、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部とすることができるメモリ1432およびメモリ1434に結合する。
プロセッサ1470および1480は、それぞれ個別のP−Pインタフェース1452、1454を介し、ポイントツーポイントインタフェース回路1476、1494、1486、および1498を使用してチップセット1490と情報を交換できる。チップセット1490は、高性能インタフェース1439を介してコプロセッサ1438と情報を交換できる。一実施形態においては、コプロセッサ1438が、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、埋込み型プロセッサ、またはこれらの類の専用プロセッサになる。
プロセッサが低パワーモードに置かれている場合にいずれかまたは両方のプロセッサのローカルキャッシュの情報を共有キャッシュ内に格納できるように、共有キャッシュ(図示せず)はいずれかのプロセッサ内または両方のプロセッサの外に、P−P相互接続を介してプロセッサと接続されるが、含めることができる。
チップセット1490は、インタフェース1496を介して第1のバス1416と結合できる。一実施形態においては、第1のバス1416がPCI(ペリフェラルコンポーネントインターコネクト(Peripheral Component Interconnect))バスまたはPCIエクスプレス(PCI Express)バスまたはその他の第3ジェネレーション入出力相互接続バス等のバスとすることができるが、本発明の範囲がそのように限定されることはない。
図14に示されているとおり、第1のバス1416には、第1のバス1416を第2のバス1420に結合するバスブリッジ1418とともに多様な入出力デバイス1414を結合できる。一実施形態においては、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等の1つまたは複数の追加のプロセッサ1415が第1のバス1416に結合される。一実施形態においては、第2のバス1420をLPC(ローピンカウント(Low Pin Count))バスとすることができる。第2のバス1420には、例えば、キーボードおよび/またはマウス1422、通信デバイス1427、および一実施形態においては命令/コードおよびデータ1430を含むことができるディスクドライブまたはその他の大容量記憶デバイス等の記憶ユニット1428を含めた多様なデバイスを結合できる。さらに第2のバス1420には、オーディオ入出力1424を結合できる。なお、この他のアーキテクチャも可能である。例えば、図14のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたはその他のその種のアーキテクチャを実装できる。
次に図15を参照すると、本発明の実施形態に係るより詳細な第2の例示的なシステム1500のブロック図が示されている。図14および15における類似の要素は、類似の参照番号を有しており、図14の特定の態様は、図15の他の態様の不明瞭化を回避するために図15から省略されている。
図15は、プロセッサ1470および1480が、それぞれ、内蔵型メモリおよび入出力制御ロジック(「CL」)1472および1482を含むことができることを図解している。CL 1472、1482は、内蔵型メモリコントローラユニットを含み、かつ入出力制御ロジックを含む。図15は、メモリ1432、1434だけがCL 1472、1482に結合されるのではなく、入出力デバイス1514もまた制御ロジック1472、1482に結合されることを図解している。レガシー入出力デバイス1515は、チップセット1490に結合される。
次に図16を参照すると、本発明の実施形態に係るSoC 1600のブロック図が示されている。図12に類似の要素は類似の参照番号を有する。また、破線のボックスは、より高度なSoCのオプションの特徴である。図16において、相互接続ユニット(1つまたは複数)1602は、1つまたは複数のコア1202A〜Nおよび共有キャッシュユニット(1つまたは複数)1206のセットを含むアプリケーションプロセッサ1610、システムエージェントユニット1210、バスコントローラユニット(1つまたは複数)1216、内蔵型メモリコントローラユニット(1つまたは複数)1214、内蔵型グラフィックロジック、画像処理プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含むことができる1つまたは複数のコプロセッサ1620のセット、スタティックランダムアクセスメモリ(SRAM)ユニット1630、ダイレクトメモリアクセス(DMA)ユニット1632、および1つまたは複数の外部ディスプレイに結合するためのディスプレイユニット1640に結合される。一実施形態においては、コプロセッサ(1つまたは複数)1620が、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋込み型プロセッサ、またはこれらの類の専用プロセッサを含む。
本明細書に開示されているメカニズムの実施形態は、ハードウエア、ソフトウエア、ファームウエア、またはその種の実装アプローチの組合せにおいて実装できる。本発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性および不揮発性メモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを包含するプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装できる。
図14に図解されているコード1430等のプログラムコードを、入力命令に適用して本明細書で述べている機能を実施し、出力情報を生成することができる。出力情報は、周知の態様で1つまたは複数の出力デバイスに適用できる。この出願の目的のために、処理システムは、例えばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
処理システムと通信するべくプログラムコードをハイレベルのプロシージャまたはオブジェクト指向プログラミング言語において実装できる。望ましければ、プログラムコードは、アッセンブリまたはマシン語において実装することもできる。実際、本明細書に述べられているメカニズムは、いずれかの特定のプログラミング言語の範囲に限定されない。いずれの場合においても、言語は、コンパイラ型またはインタプリタ型の言語とすることができる。
少なくとも一実施形態の1つまたは複数の態様は、プロセッサ内の多様なロジックを表わし、マシンによって読み出されたときにそのマシンに、本明細書に述べられている技術を実施するロジックを作らせるマシン可読媒体上に格納された代表的な命令によって実装できる。その種の表現は「IPコア」として知られるが、有体のマシン可読媒体上に格納して多様なカスタマまたは製造設備に供給し、ロジックまたはプロセッサを実際に作成する製造マシン内にロードすることができる。
その種のマシン可読記憶媒体は、限定ではないが、ハードディスク、その他のタイプのフロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読出し専用メモリ(CD−ROM)、コンパクトディスク再書き込み可能(CD−RW)を含むディスク、および光磁気ディスク、読出し専用メモリ(ROM)およびランダムアクセスメモリ(RAM)等の半導体デバイス、例えばダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブル読出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読出し専用メモリ(EEPROM)、相変化メモリ(PCM)等、磁気または光カード、または電子的な命令の格納に適した任意のその他のタイプの媒体等の記憶媒体を含むマシンまたはデバイスによって製造されるかまたは形成される非一時的な物品の有体アレンジメントを含むことができる。
したがって、本発明の実施形態は、命令が入っているか、または本明細書に述べられている構造、回路、装置、プロセッサ、および/またはシステムの特徴を定義するハードウエア記述言語(HDL)等の設計データが入っている非一時的な有体のマシン可読媒体も含む。その種の実施形態はまた、プログラム製品と呼ぶこともできる。 エミュレーション(バイナリ翻訳、コードモーフィング等を含む)
いくつかの場合においては、命令変換器を使用してソース命令セットからターゲット命令セットへ命令を変換できる。例えば、命令変換器は、コアによって処理されるべき1つまたは複数の他の命令への命令の翻訳(例えば、静的なバイナリ翻訳、動的コンパイルを含む動的なバイナリ翻訳を使用する)、モーフィング、エミュレーション、またはその他の変換を行なうことができる。命令変換器は、ソフトウエア、ハードウエア、ファームウエア、またはこれらの組合せにおいて実装することができる。命令変換器は、プロセッサ上、プロセッサ外、または一部をプロセッサ上および一部をプロセッサ外とすることができる。
図17は、本発明の実施形態に係るターゲット命令セット内のバイナリ命令に対してソース命令セット内のバイナリ命令を変換するソフトウエア命令変換器の使用を対比させたブロック図である。図解されている実施形態においては、命令変換器がソフトウエア命令変換器であるが、それに代えて、命令変換器をソフトウエア、ファームウエア、ハードウエア、またはこれらの多様な組合せにおいて実装できる。
図17は、少なくとも1つのx86命令セットコアを伴うプロセッサ1716によってネイティブ実行できるx86バイナリコード1706を生成するx86コンパイラ1704を使用してコンパイルできるハイレベル言語1702のプログラムを示している。少なくとも1つのx86命令セットコアを伴うプロセッサ1716は、少なくとも1つのx86命令セットコアを伴うインテルプロセッサと実質的に等しい結果を達成するために、(1)インテルx86命令セットコアの命令セットの実質的な部分、または(2)少なくとも1つのx86命令セットコアを伴うインテルプロセッサ上において走ることをねらいとするアプリケーションまたはその他のソフトウエアのオブジェクトコードバージョンを互換的に実行するかまたはその他の形で処理することによって、少なくとも1つのx86命令セットコアを伴うインテルプロセッサと実質的に等しい機能を実施可能な任意のプロセッサを表わす。x86コンパイラ1704は、追加のリンケージ処理を伴うか、または伴わずに少なくとも1つのx86命令セットコアを伴うプロセッサ1716上において実行可能なx86バイナリコード1706(例えば、オブジェクトコード)を生成するべく動作可能なコンパイラを表わす。
同様に図17は、代替命令セットコンパイラ1708を使用してコンパイルされ、少なくとも1つのx86命令セットコアを伴わないプロセッサ1714(例えば、カリフォルニア州サニーベイルのMIPSテクノロジーズ(MIPS Technologies)のMIPS命令セットを実行するコアおよび/またはカリフォルニア州サニーベイルのARMホーディングス(ARM Holdings)のARM命令セットを実行するコアを伴うプロセッサ)によってネイティブ実行できる代替命令セットのバイナリコード1710を生成することができるハイレベル言語1702のプログラムを示している。命令変換器1712が使用されてx86バイナリコード1706が、x86命令セットコアを伴わないプロセッサ1714によってネイティブ実行できるコードに変換される。この変換後のコードは、代替命令セットのバイナリコード1710と同じになりがちではなく、それは、これを行なう能力を有する命令変換器を作成することが困難なことによるが、変換後のコードは、一般的な動作を達成することになり、かつ代替命令セットからの命令から構成される。したがって、命令変換器1712は、ソフトウエア、ファームウエア、ハードウエア、またはこれらの組合せを表わし、エミュレーション、シミュレーション、またはその他のプロセスを通じて、x86命令セットプロセッサまたはコアを有していないプロセッサまたはその他の電子デバイスがx86バイナリコード1706を実行することを可能にする。
他の実施形態においては、ライブラリ自体が、ソフトウエアモジュールに適切なライブラリの部分のセットを選択するロジックを含むことができる。例えば、ライブラリは、プロセッサの特徴ステータスレジスタを読み出してソフトウエアモジュールが所定のオペコードのためにどのような意味を有するかを決定し、その後その部分を選択し、提供することができる。
図1、4、および5のいずれかについて述べた構成要素、特徴、および詳細は、図2および3のいずれにおいてもオプションとして使用できる。さらにまた、装置のいずれかについて本明細書に述べられている構成要素、特徴、および詳細もまた、本明細書に述べられている方法のうちのいずれかにおいてオプションとして使用でき、実施形態においてはそれを、その種の装置によって、および/またはその種の装置を用いて実施できる。 例示的な実施形態
以下の例は、さらなる実施形態に関係する。これらの例の中に示されている詳細は、1つまたは複数の実施形態のいずれに使用してもよい。
例1は、第1の命令を受信し、その第1の命令がエミュレーションされることを決定する復号化ロジックを含むプロセッサである。プロセッサは、また、復号化ロジックに結合されたエミュレーションモードアウェア復号化後命令プロセッサロジックも含む。エミュレーションモードアウェア復号化後命令プロセッサロジックは、第1の命令のエミュレーションに使用される1つまたは複数の命令からなるセットの命令から復号化された1つまたは複数の制御信号を、エミュレーションモードにあるときにエミュレーションモードにないときとは異なって処理する。
例2は、先行するいずれかの例のプロセッサを含み、オプションとして、第1の命令は、より多くの動作が実施されることをその第1の命令を伴うことから、そのセットの各命令より複雑であるとする。
例3は、先行するいずれかの例のプロセッサを含み、オプションとして、プロセッサは、命令セットの任意の命令の実装にマイクロコードを使用しないこととする。
例4は、先行するいずれかの例のプロセッサを含み、オプションとして、上記の1つまたは複数の命令からなるセットの各命令は、第1の命令と同じ命令セットの命令とする。
例5は、先行するいずれかの例のプロセッサを含み、オプションとして、エミュレーションモードアウェア復号化後命令プロセッサロジックは、1つまたは複数の制御信号を処理する間にエミュレーションロジックに対して生じる例外条件をレポートするエミュレーションモードアウェア例外条件ハンドラロジックを包含する。
例6は、先行するいずれかの例のプロセッサを含み、オプションとして、エミュレーションモードアウェア例外条件ハンドラロジックは、第1の命令のアドレスをスタック内に格納する。
例7は、先行するいずれかの例のプロセッサを含み、オプションとして、エミュレーションモードアウェア例外条件ハンドラロジックは、例外条件のインジケータ、およびその例外条件のためのエラーコードをエミュレーションロジックに結合された1つまたは複数のレジスタ内に格納する。
例8は、先行するいずれかの例のプロセッサを含み、オプションとして、エミュレーションモードアウェア例外条件ハンドラロジックは、例外条件に応答して例外条件ハンドラに対して制御を直接移すことを回避し、エミュレーションロジックの1つまたは複数の命令が例外条件ハンドラに制御を移す。
例9は、先行するいずれかの例のプロセッサを含み、オプションとして、エミュレーションモードアウェア復号化後命令プロセッサロジックは、エミュレーションモードアウェアアクセス制御ロジックを包含し、1つまたは複数の制御信号によるリソースおよび情報のうちの少なくとも1つへのアクセスを、エミュレーションモードにあるときにエミュレーションモードにないときとは異なって制御する。
例10は、先行するいずれかの例のプロセッサを含み、オプションとして、エミュレーションモードアウェアアクセス制御ロジックは、エミュレーションモードにあるときにはリソースおよび情報のうちの前記少なくとも1つへのアクセスを許可し、エミュレーションモードにないときにはリソースおよび情報のうちの前記少なくとも1つへのアクセスを防止する。
例11は、先行するいずれかの例のプロセッサを含み、オプションとして、リソースおよび情報のうちの少なくとも1つは、セキュリティロジック、安全情報、暗号化ロジック、解読ロジック、乱数発生器ロジック、オペレーティングシステムによるアクセスのために確保されたロジック、オペレーティングシステムによるアクセスのために確保されたメモリの部分、およびオペレーティングシステムによるアクセスのために確保された情報のうちの少なくとも1つを包含する。
例12は、先行するいずれかの例のプロセッサを含み、オプションとして、リソースおよび情報のうちの少なくとも1つは、他の論理プロセッサおよび他の物理プロセッサのうちの1つにおけるリソースおよび情報のうちの少なくとも1つを包含する。
例13は、先行するいずれかの例のプロセッサを含み、オプションとして、1つまたは複数の命令からなるセットは、少なくとも3つの命令を含む。
例14は、プロセッサ内における方法であり、第1の命令を受信すること、およびその第1の命令のエミュレーションを行なうことを決定することを含む。この方法はまた、第1の命令のエミュレーションに使用される1つまたは複数の命令からなるセットを受信することも含む。さらにこの方法は、そのセットの命令から引き出される1つまたは複数の制御信号を、エミュレーションモードにあるときにエミュレーションモードにないときとは異なって処理することも含む。
例15は、先行するいずれかの例の方法を含み、オプションとして、第1の命令を受信することは、1つまたは複数の命令からなるセットの各命令より複雑な第1の命令を受信することを包含する。
例16は、先行するいずれかの例の方法を含み、オプションとして、1つまたは複数の命令からなるセットを受信することは、第1の命令と同じ命令セットの各命令である1つまたは複数の命令を受信することを包含する。
例17は、先行するいずれかの例の方法を含み、オプションとして、処理することは、1つまたは複数の制御信号を処理する間にエミュレーションロジックに対して生じる例外条件をレポートすることを包含する。またオプションとして、エミュレーションロジックの1つまたは複数の命令を実行し、例外条件ハンドラに制御を移す。
例18は、先行するいずれかの例の方法を含み、オプションとして、レポートすることは、1つまたは複数のレジスタ内に例外条件のインジケータを格納することを包含する。またオプションとして、スタック内に第1の命令のアドレスを格納する。
例19は、先行するいずれかの例の方法を含み、オプションとして、処理することは、1つまたは複数の制御信号によるリソースおよび情報のうちの少なくとも1つに対するアクセスを、エミュレーションモードにあるときにエミュレーションモードにないときと異なって制御することを包含する。
例20は、先行するいずれかの例の方法を含み、オプションとして、アクセスを異なって制御することは、エミュレーションモードにあるときにはリソースおよび情報の前記少なくとも1つに対するアクセスを許可することを包含する。またオプションとして、エミュレーションモードにないときにはリソースおよび情報の前記少なくとも1つに対するアクセスを防止する。
例21は、相互接続および相互接続に結合されたプロセッサを含む命令を処理するシステムである。プロセッサは、第1の命令を受信し、その第1の命令がエミュレーションされることを決定する復号化ロジックを含む。プロセッサは、また、復号化ロジックに結合されたエミュレーションモードアウェア復号化後命令プロセッサロジックも含む。エミュレーションモードアウェア復号化後命令プロセッサロジックは、第1の命令のエミュレーションに使用される1つまたは複数の命令からなるセットの命令から復号化された1つまたは複数の制御信号を、エミュレーションモードにあるときにエミュレーションモードにないときとは異なって処理する。またシステムは、相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)も含む。
例22は、例21のシステムを含み、オプションとして、エミュレーションモードアウェア復号化後命令プロセッサロジックは、1つまたは複数の制御信号を処理する間にエミュレーションロジックに対して生じる例外条件をレポートするエミュレーションモードアウェア例外条件ハンドラロジックを包含する。
例1は、所定のオペコードを有する第1の命令を受信する復号器を含むプロセッサである。復号器は、所定のオペコードが第1の意味または第2の意味を有するか否かをチェックするチェックロジックを含む。また復号器は、第1の命令を復号化し、所定のオペコードが第1の意味を有するとき、1つまたは複数の対応する制御信号を出力する復号化ロジックも含む。また復号器は、所定のオペコードが第2の意味を有するとき、第1の命令のエミュレーションを誘導するエミュレーション誘導ロジックも含む。
例2は、先行するいずれかの例のプロセッサを含み、オプションとして、第2の意味は第1の意味より古いとする。
例3は、先行するいずれかの例のプロセッサを含み、オプションとして、第2の意味は、非推奨となりつつあるプロセス中にあるオペコード定義を包含する。
例4は、先行するいずれかの例のプロセッサを含み、オプションとして、さらに、所定のオペコードが第1の意味または第2の意味を有するか否かのインジケータを格納する復号器に結合された記憶位置を包含し、チェックロジックは、その記憶位置をチェックしてインジケータを決定する。
例5は、先行するいずれかの例のプロセッサを含み、オプションとして、記憶位置は、プログラムローダモジュールにアクセス可能であり、プログラムローダモジュールが記憶位置にインジケータを格納することを可能にする。
例6は、先行するいずれかの例のプロセッサを含み、オプションとして、さらに、記憶位置からプロセッサ特徴レジスタへインジケータを格納する記憶位置に結合されたロジックを包含し、プロセッサ特徴レジスタは、第1の命令の命令セットのプロセッサ特徴識別命令によって読み出し可能である。
例7は、先行するいずれかの例のプロセッサを含み、オプションとして、さらに、復号器に結合された複数のインジケータを格納する複数の記憶位置を包含し、それぞれのインジケータは複数のオペコードのうちの異なるオペコードに対応し、インジケータのそれぞれは、それぞれのオペコードが第1の意味または第2の意味を有するか否かを示す。
例8は、先行するいずれかの例のプロセッサを含み、オプションとして、エミュレーションを誘導するロジックは、エミュレーションモードを設定するロジックを包含する。
例9は、先行するいずれかの例のプロセッサを含み、オプションとして、さらに、復号器に結合されたエミュレーションロジックを包含し、エミュレーションロジックは、エミュレーション誘導ロジックがエミュレーションを誘導することに応答して、所定のオペコードが第2の意味を有するとき第1の命令のエミュレーションを行なう1つまたは複数の命令からなるセットを復号器に提供する。
例10は、先行するいずれかの例のプロセッサを含み、オプションとして、セットの各命令は、第1の命令と同一命令セットのものである。
例11は、先行するいずれかの例のプロセッサを含み、オプションとして、プロセッサは、命令セットの任意の命令の実装にマイクロコードを使用しないこととする。
例12は、先行するいずれかの例のプロセッサを含み、オプションとして、さらに、特権レベルロジックおよびリングレベルロジックのうちの1つがオペレーティングシステムモードを示すとき、所定のオペコードのために非推奨の意味に代えてより新しい意味を使用することを復号器に強制するロジックを包含する。
例13は、プロセッサ内における方法であり、所定のオペコードを有する第1の命令を受信すること、およびその所定のオペコードが第1の意味に代えて第2の意味を有することを決定することを含む。この方法は、また、所定のオペコードが第2の意味を有するという決定に応答して第1の命令のエミュレーションを決定することも含む。
例14は、先行するいずれかの例の方法を含み、オプションとして、決定することは、所定のオペコードが第1の意味より古い第2の意味を有すると決定することを包含し、第2の意味は、非推奨になりつつあるプロセス中にある。
例15は、先行するいずれかの例の方法を含み、オプションとして、決定することは、記憶位置から所定のオペコードが第2の意味を有することのインジケータを読み出すことを包含する。
例16は、先行するいずれかの例の方法を含み、オプションとして、さらに、プロセッサの命令セットのプロセッサ特徴識別命令によって読み出し可能なプロセッサ特徴レジスタ内へ所定のオペコードが第2の意味を有することのインジケータを格納することを包含する。
例17は、先行するいずれかの例の方法を含み、オプションとして、さらに、第1の命令のエミュレーションは、所定のオペコードが第2の意味を有するときに第1の命令のエミュレーションに使用される1つまたは複数の命令からなるセットを復号化することを包含する。
例18は、先行するいずれかの例の方法を含み、オプションとして、命令セットの復号化は、第1の命令と同じ命令セットの命令である1つまたは複数の命令を復号化することを包含する。
例19は、先行するいずれかの例の方法を含み、オプションとして、命令セットのいずれの命令の実装にもマイクロコードを使用しないプロセッサ内において実施される。
例20は、マシンによって実行されたときにそのマシンに動作を実施させる命令を格納している非一時的なマシン可読記憶媒体を含む製品である。動作は、ソフトウエアモジュールのメタデータを調べることによって、所定のオペコードを有する第1の命令が、ソフトウエアモジュールからプロセッサによって実行されるときに第1の意味に代えて第2の意味を有すると決定することを含む。動作はまた、所定のオペコードを有する第1の命令は第2の意味を有するというインジケータをプロセッサの状態に格納することを含む。
例21は、先行するいずれかの例の製品を含み、オプションとして、マシン可読記憶媒体が、さらにマシンによって実行されたときにそのマシンに、所定のオペコードの第2の意味を使用するソフトウエアライブラリの部分を所定のオペコードの第1の意味を使用するソフトウエアライブラリの他の部分に代えて選択すること、およびソフトウエアライブラリの選択した部分をソフトウエアモジュールに提供することを含む動作を実施させる命令を格納しており、第2の意味は非推奨とされる意味である。
例22は、先行するいずれかの例の製品を含み、オプションとして、マシン可読記憶媒体が、さらにマシンによって実行されたときにそのマシンに、ソフトウエアモジュールの古さに基づいて所定のオペコードが第2の意味を有すると決定することを含む動作を実施させる命令を格納している。
例23は、先行するいずれかの例の製品を含み、オプションとして、マシン可読記憶媒体が、さらにマシンによって実行されたときにそのマシンに、オブジェクトモジュールフォーマット内のフラグを調べること、およびフラグ内のインジケータをプロセッサのレジスタ内に格納することを含む動作を実施させる命令を格納している。
例24は、相互接続およびその相互接続に結合されたプロセッサを含む命令を処理するシステムである。プロセッサは、所定のオペコードを有する第1の命令を受信する。プロセッサは、所定のオペコードが第1の意味または第2の意味を有するか否かをチェックするチェックロジックを含む。プロセッサは、第1の命令を復号化し、所定のオペコードが第1の意味を有するとき、1つまたは複数の対応する制御信号を出力する復号化ロジックも含む。プロセッサは、所定のオペコードが第2の意味を有するとき、第1の命令のエミュレーションを誘導するエミュレーション誘導ロジックも含む。またシステムは、相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)も含む。
例25は例24の内容を含み、オプションとして、さらに、所定のオペコードが第2の意味を有するときに第1の命令のエミュレーションを行なうべく復号器に第1の命令と同じ命令セットの1つまたは複数の命令からなるセットを提供するエミュレーションロジックを包含する。
例26は、例13〜19のうちのいずれかの方法を実施する装置を含む。
例27は、例13〜19のうちのいずれかの方法を実施するための手段を包含する装置を含む。
例28は、実質的に本明細書に述べられているとおりの方法を実施する装置を含む。
例29は、実質的に本明細書に述べられているとおりの方法を実施するための手段を包含する装置を含む。
説明および特許請求の範囲においては、用語「結合される」および「接続される」が、それらの派生語とともに使用されている。これらの用語は、互いについての同義語として意図されていないことは理解されるべきである。むしろ、特定の実施形態において「接続される」は、2つまたはそれより多くの要素が、直接物理的に、または電気的に互いに接触することを示すために使用されているとみてよい。「結合される」は、2つまたはそれより多くの要素が、直接物理的に、または電気的に接触することを意味することができる。しかしながら「結合される」は、2つまたはそれより多くの要素が、互いに直接接触していないが、それでもなお互いに協働すること、または相互作用することも意味することができる。例えば、第1の構成要素および第2の構成要素が、介在する構成要素を通じて互いに結合されることがある。図においては、双方向矢印が、双方向接続および結合を示すために使用されている。
説明および特許請求の範囲においては、用語「ロジック」が使用されている。本明細書で使用される場合に、ロジックは、ハードウエア、ファームウエア、ソフトウエア、またはこれらの組合せを含むことができる。ロジックの例は、集積回路、特定用途向け集積回路、アナログ回路、デジタル回路、プログラマブルロジックデバイス、命令を含むメモリデバイス等を含む。いくつかの実施形態においては、ハードウエアロジックがトランジスタおよび/またはゲートを、おそらくはその他の回路構成要素とともに含むことができる。
用語「および/または」も使われている。本明細書で使用される場合に「および/または」は、一方または他方または両方を意味する(例えば、Aおよび/またはBは、AまたはBまたはAおよびB両方を意味する)。
上記の説明においては、説明を目的として、本発明の実施形態の完全な理解を提供するために、多くの具体的な詳細が示されている。しかしながら、当業者には明らかになるであろうが、1つまたは複数のその他の実施形態をこれらの具体的な詳細のいくつかを使用することなく実施できる。論じられている特定の実施形態は、本発明の限定ではなく、例示的な実施形態を通じてそれを例証するために提供されている。本発明の範囲は、特定の例ではなく、特許請求の範囲によってのみ決定される。その他の場合においては、周知の回路、構造、デバイス、および動作は、説明の理解の不明瞭化を回避するためにブロック図形式で、または詳細を伴わずに示されている。
適切と考えられる場合には、参照番号または参照番号の末尾部分が、対応するかまたは類似の要素を示すべく複数図面にわたって反復して使用されているが、それらはオプションとして、別段の指定があるか、または明らかにそれ以外となる場合を除いて類似の、または同一の特性を有することがあり得る。複数の構成要素について述べられている場合には、概してそれらを単一の構成要素に統合できる。それに対し、単一の構成要素について述べられている場合には、概してそれを複数の構成要素に分割できる。
以上、多様な動作および方法を述べてきた。方法のいくつかは、比較的基本的なフロー図形式で述べられたが、オプションとして動作の追加および/または削除をそれらの方法に対して行なうことができる。それに加えてフロー図は、例示的な実施形態に従って動作の特定の順序を示しているが、その特定の順序は例示である。代替の実施形態は、オプションとして、異なる順序で動作を実施すること、特定の動作を結合すること、特定の動作を重ねること等ができる。
いくつかの実施形態は、マシン可読媒体を含む製品(例えば、コンピュータプログラム製品)を含む。この媒体は、マシンによる読み出しが可能な形式で情報を提供、例えば格納するメカニズムを含む。マシン可読媒体は、マシンによって実行される場合および/または実行されたときに、本明細書に開示されている1つまたは複数の動作、方法、または技術をそのマシンに実施させるか、かつ/または結果としてそれを実施するマシンをもたらすべく動作可能な1つまたは複数の命令を提供するか、またはその上に格納できる。適切なマシンの例は、限定ではないが、プロセッサ、命令処理装置、デジタルロジック回路、集積回路、およびこれらの類を含む。さらにその他の適切なマシンの例は、コンピューティングデバイスおよびその他の、その種のプロセッサ、命令処理装置、デジタルロジック回路、または集積回路を組み込んだ電子デバイスを含む。その種のコンピューティングデバイスおよび電子デバイスの例は、限定ではないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータおよびスイッチ)、モバイルインターネットデバイス(MID)、メディアプレーヤ、スマートテレビジョン、ネットトップ、セットトップボックス、およびビデオゲームコントローラを含む。
いくつかの実施形態においては、マシン可読媒体が有体の、および/または非一時的なマシン可読記憶媒体を含むことができる。例えば、有体の、および/または非一時的なマシン可読記憶媒体は、フロッピー(登録商標)ディスク、光記憶媒体、光ディスク、光データ記憶デバイス、CD−ROM、磁気ディスク、光磁気ディスク、読出し専用メモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一過性メモリ、非一過性データ記憶デバイス、またはこれらの類を含むことができる。非一時的なマシン可読記憶媒体は、一時的な伝播信号から構成されない。
これも認識されるように、この明細書全体を通じて使用されている「一実施形態」、「実施形態」、または「1つまたは複数の実施形態」は、例えば特定の特徴が本発明の実施に含まれることがあるという意味である。同様に、これも認識されるように、説明の中では、開示を効率化し、本発明の多様な態様の理解を補助する目的のために多様な特徴がしばしば単一の実施形態、図面、またはそれの記述にグループ化されている。しかしながら、この開示の方法は、本発明が各請求項の中で明示的に言及されているより多くの特徴を必要とする意図を反映するとして解釈されるものではない。むしろ、以下の特許請求の範囲は、発明的態様が単一の開示された実施形態のすべての特徴より少ないところにある得ることを反映している。したがって、発明を実施するための形態に続く特許請求の範囲は、ここに明示的にこの発明を実施するための形態に組み込まれる。各請求項はそれ自身が本発明の別個の実施形態として実施され得る。
(項目1)
第1の命令を受信し、上記第1の命令がエミュレーションされることを決定する復号化ロジックと、
上記復号化ロジックと結合されたエミュレーションモードアウェア復号化後命令プロセッサロジックであって、上記第1の命令のエミュレーションに使用される1つまたは複数の命令からなるセットの命令から復号化された1つまたは複数の制御信号を、エミュレーションモードにあるときはエミュレーションモードにないときと異なって処理するエミュレーションモードアウェア復号化後命令プロセッサロジックと
を備えるプロセッサ。
(項目2)
上記第1の命令は、より多くの動作が実施されることを上記第1の命令を伴うことから、上記セットの各命令より複雑である、項目1に記載のプロセッサ。
(項目3)
上記プロセッサは、命令セットの任意の命令の実装にマイクロコードを使用しない、項目2に記載のプロセッサ。
(項目4)
上記1つまたは複数の命令からなるセットの各命令は、上記第1の命令と同じ命令セットの命令である、項目1に記載のプロセッサ。
(項目5)
上記エミュレーションモードアウェア復号化後命令プロセッサロジックは、上記1つまたは複数の制御信号を処理する間にエミュレーションロジックに対して生じる例外条件をレポートするエミュレーションモードアウェア例外条件ハンドラロジックを有する、項目1に記載のプロセッサ。
(項目6)
上記エミュレーションモードアウェア例外条件ハンドラロジックは、上記第1の命令のアドレスをスタック内に格納する、項目5に記載のプロセッサ。
(項目7)
上記エミュレーションモードアウェア例外条件ハンドラロジックは、上記例外条件のインジケータ、および上記例外条件のためのエラーコードを上記エミュレーションロジックに結合された1つまたは複数のレジスタ内に格納する、項目5に記載のプロセッサ。
(項目8)
上記エミュレーションモードアウェア例外条件ハンドラロジックは、上記例外条件に応答して例外条件ハンドラに対して制御を直接移すことを回避し、上記エミュレーションロジックの1つまたは複数の命令が上記例外条件ハンドラに制御を移す、項目5に記載のプロセッサ。
(項目9)
上記エミュレーションモードアウェア復号化後命令プロセッサロジックは、エミュレーションモードアウェアアクセス制御ロジックを有し、上記1つまたは複数の制御信号によるリソースおよび情報のうちの少なくとも1つへのアクセスを、上記エミュレーションモードにあるときには上記エミュレーションモードにないときとは異なって制御する、項目1に記載のプロセッサ。
(項目10)
上記エミュレーションモードアウェアアクセス制御ロジックは、上記エミュレーションモードにあるときには上記リソースおよび上記情報のうちの上記少なくとも1つへのアクセスを許可し、上記エミュレーションモードにないときには上記リソースおよび上記情報のうちの上記少なくとも1つへのアクセスを防止する、項目9に記載のプロセッサ。
(項目11)
上記リソースおよび上記情報のうちの上記少なくとも1つは、セキュリティロジック、安全情報、暗号化ロジック、解読ロジック、乱数発生器ロジック、オペレーティングシステムによるアクセスのために確保されたロジック、オペレーティングシステムによるアクセスのために確保されたメモリの部分、およびオペレーティングシステムによるアクセスのために確保された情報のうちの少なくとも1つを含む、項目10に記載のプロセッサ。
(項目12)
上記リソースおよび上記情報のうちの上記少なくとも1つは、他の論理プロセッサおよび他の物理プロセッサのうちの1つにおけるリソースおよび情報のうちの少なくとも1つを含む、項目10に記載のプロセッサ。
(項目13)
上記1つまたは複数からなる命令のセットは、少なくとも3つの命令を含む、項目1に記載のプロセッサ。
(項目14)
第1の命令を受信することと、
上記第1の命令のエミュレーションを行なうことを決定することと、
上記第1の命令のエミュレーションに使用される1つまたは複数の命令からなるセットを受信することと、
上記セットの命令から引き出される1つまたは複数の制御信号をエミュレーションモードにあるときには上記エミュレーションモードにないときと異なって処理することと
を備えるプロセッサ内における方法。
(項目15)
上記第1の命令を受信することは、上記1つまたは複数からなる命令のセットの各命令より複雑な上記第1の命令を受信することを有する、項目14に記載の方法。
(項目16)
上記1つまたは複数からなる命令のセットを受信することは、上記第1の命令と同じ命令セットの各命令である1つまたは複数の命令を受信することを有する、項目14に記載の方法。
(項目17)
上記処理することは、
上記1つまたは複数の制御信号を処理する間にエミュレーションロジックに対して生じる例外条件をレポートすることと、
上記エミュレーションロジックの1つまたは複数の命令を実行し、例外条件ハンドラに制御を移すことと
を有する、項目14に記載の方法。
(項目18)
上記レポートすることは、
1つまたは複数のレジスタ内に上記例外条件のインジケータを格納することと、
スタック内に上記第1の命令のアドレスを格納することと
を含む、項目17に記載の方法。
(項目19)
上記処理することは、上記1つまたは複数の制御信号によるリソースおよび情報のうちの少なくとも1つに対するアクセスを、エミュレーションモードにあるときは上記エミュレーションモードにないときと異なって制御することを含む、項目14に記載の方法。
(項目20)
上記アクセスを異なって制御することは、
上記エミュレーションモードにあるときには上記リソースおよび上記情報の上記少なくとも1つに対するアクセスを許可することと、
上記エミュレーションモードにないときには上記リソースおよび上記情報の上記少なくとも1つに対するアクセスを防止することと
を含む、項目19に記載の方法。
(項目21)
相互接続と、
上記相互接続に結合されたプロセッサであって、
第1の命令を受信し、上記第1の命令がエミュレーションされることを決定する復号化ロジックと、
上記復号化ロジックと結合されたエミュレーションモードアウェア復号化後命令プロセッサロジックであって、上記第1の命令のエミュレーションに使用される1つまたは複数の命令からなるセットの命令から復号化された1つまたは複数の制御信号を、エミュレーションモードにあるときはエミュレーションモードにないときと異なって処理するエミュレーションモードアウェア復号化後命令プロセッサロジックと
を有するプロセッサと、
上記相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)と
を備える、命令を処理するシステム。
(項目22)
上記エミュレーションモードアウェア復号化後命令プロセッサロジックは、上記1つまたは複数の制御信号を処理する間にエミュレーションロジックに対して生じる例外条件をレポートするエミュレーションモードアウェア例外条件ハンドラロジックを含む、項目21に記載のシステム。