(57)【要約】      （修正有）【課題】第１の命令を受信し、第１の命令はエミュレートされるべきであると判定するためのデコード論理を含むプロセッサを提供する。【解決手段】プロセッサは、デコード論理と結合されるエミュレーションモード認識デコード後命令プロセッサ論理を含む。エミュレーションモード認識デコード後命令プロセッサ論理は、命令からデコードされた１つ以上の制御信号を処理する。命令は、第１の命令をエミュレートするために用いられる１つ以上の命令のセットの１つである。１つ以上の制御信号は、エミュレーションモードの時には、エミュレーションモード認識デコード後命令プロセッサ論理によって、エミュレーションモードでない時とは異なるように処理される。【選択図】図１
2014182813.tif 000002
【特許請求の範囲】
【請求項１】
所与のオペコードを有する第１の命令を受信するためのデコーダを含むプロセッサであって、前記デコーダは、
前記所与のオペコードは第１の意味を有するのか、それとも第２の意味を有するのかをチェックするためのチェック論理と、
前記所与のオペコードが前記第１の意味を有する場合に、前記第１の命令をデコードし、１つ以上の対応する制御信号を出力するためのデコード論理と、
前記所与のオペコードが前記第２の意味を有する場合に、前記第１の命令のエミュレーションを誘起するためのエミュレーション誘起論理と
を含む、プロセッサ。
【請求項２】
前記第２の意味は前記第１の意味よりも古い、請求項１に記載のプロセッサ。
【請求項３】
前記第２の意味が、非推奨となる過程にあるオペコード定義を含む、請求項２に記載のプロセッサ。
【請求項４】
前記所与のオペコードは前記第１の意味を有するのか、それとも前記第２の意味を有するのかについての指示を格納するための、前記デコーダと結合される記憶位置をさらに含み、前記チェック論理が、前記指示を判定するために前記記憶位置をチェックする、請求項１に記載のプロセッサ。
【請求項５】
前記記憶位置は、プログラムローダモジュールが前記指示を前記記憶位置内に格納することを可能にするべく、前記プログラムローダモジュールにアクセス可能である、請求項４に記載のプロセッサ。
【請求項６】
前記記憶位置からの前記指示をプロセッサ特徴レジスタに格納するための、前記記憶位置と結合される論理をさらに含み、前記プロセッサ特徴レジスタは前記第１の命令の命令セットのプロセッサ特徴識別命令によって可読である、請求項４または５に記載のプロセッサ。
【請求項７】
複数の指示を格納するために前記デコーダと結合される複数の記憶位置をさらに含み、前記複数の指示の各々は複数のオペコードのうちの異なるオペコードに対応し、前記複数の指示の各々は、各それぞれのオペコードが第１の意味を有するのか、または第２の意味を有するのかを指示する、請求項４〜６のいずれか一項に記載のプロセッサ。
【請求項８】
前記エミュレーションを誘起するための前記論理が、エミュレーションモードをセットするための論理を含む、請求項１に記載のプロセッサ。
【請求項９】
前記デコーダと結合されたエミュレーション論理をさらに含み、前記エミュレーション論理は、前記所与のオペコードが前記第２の意味を有する場合に、前記エミュレーション誘起論理が前記エミュレーションを誘起するのに応答して、前記第１の命令をエミュレートするための１つ以上の命令のセットを前記デコーダに提供する、請求項１に記載のプロセッサ。
【請求項１０】
前記セットの各命令が、前記第１の命令と同じ命令セットのものである、請求項９に記載のプロセッサ。
【請求項１１】
前記プロセッサが、命令セットのいずれの命令を実施するにもマイクロコードを用いない、請求項１に記載のプロセッサ。
【請求項１２】
特権レベル論理およびリングレベル論理の一方がオペレーティングシステムモードを指示する時には、前記デコーダに、前記所与のオペコードのための非推奨の意味の代わりに新しい意味を強制的に使わせる論理をさらに含む、請求項１に記載のプロセッサ。
【請求項１３】
プロセッサ内の方法であって、
所与のオペコードを有する第１の命令を受信する段階と、
前記所与のオペコードは第１の意味ではなく第２の意味を有すると判定する段階と、
前記所与のオペコードは前記第２の意味を有するとの判定に応答して、前記第１の命令をエミュレートすると決定する段階と
を含む方法。
【請求項１４】
前記判定する段階が、前記所与のオペコードは、前記第１の意味よりも古い第２の意味を有すると判定する段階を含み、前記第２の意味は非推奨となる過程にある、請求項１３に記載の方法。
【請求項１５】
前記判定する段階が、前記所与のオペコードは前記第２の意味を有するとの指示を記憶位置から読み出す段階を含む、請求項１３に記載の方法。
【請求項１６】
前記所与のオペコードは前記第２の意味を有するとの前記指示を、前記プロセッサの命令セットのプロセッサ特徴識別命令によって可読であるプロセッサ特徴レジスタ内に格納する段階をさらに含む、請求項１５に記載の方法。
【請求項１７】
前記所与のオペコードが前記第２の意味を有する場合に、前記第１の命令をエミュレートするために用いられる１つ以上の命令のセットをデコードする段階を含む、前記第１の命令をエミュレートする段階をさらに含む、請求項１３〜１６のいずれか一項に記載の方法。
【請求項１８】
前記命令のセットをデコードする前記段階が、前記第１の命令と同じ命令セットのものである１つ以上の命令をデコードする段階を含む、請求項１７に記載の方法。
【請求項１９】
命令セットのいずれの命令を実施するにもマイクロコードを用いない前記プロセッサ内で遂行される、請求項１３〜１８のいずれか一項に記載の方法。
【請求項２０】
機械によって実行されると、前記機械に演算を遂行させる命令を格納する非一時的機械可読記憶媒体を含むプログラムであって、前記演算は、
所与のオペコードを有する第１の命令は、ソフトウェアモジュールからプロセッサによって実行される時に、前記ソフトウェアモジュールのメタデータを調べることによって、第１の意味の代わりに第２の意味を有するべきであると判定する段階と、
前記所与のオペコードを有する前記第１の命令は前記第２の意味を有するべきであるとの指示を前記プロセッサの状態内に格納する段階と
を含む、プログラム。
【請求項２１】
前記機械可読記憶媒体が、前記機械によって実行されると、前記機械に、
前記所与のオペコードの前記第１の意味を用いるソフトウェアライブラリの別の部分ではなく、前記所与のオペコードの前記第２の意味を用いる前記ソフトウェアライブラリの部分を選択する段階と、
前記ソフトウェアライブラリの前記選択された部分を前記ソフトウェアモジュールに提供する段階と
を含み、演算を遂行させる命令をさらに格納し、前記第２の意味は非推奨の意味である、請求項２０に記載のプログラム。
【請求項２２】
前記機械可読記憶媒体が、前記機械によって実行されると、前記機械に、前記所与のオペコードは前記ソフトウェアモジュールの古さに基づいて、前記第２の意味を有すると判定する段階を含む演算を遂行させる命令をさらに格納する、請求項２０または２１に記載のプログラム。
【請求項２３】
前記機械可読記憶媒体が、前記機械によって実行されると、前記機械に、
オブジェクトモジュールフォーマット内のフラグを調べ、フラグ内の前記指示を前記プロセッサのレジスタ内に格納する段階を含む演算を遂行させる命令をさらに格納する、請求項２０〜２２のいずれか一項に記載のプログラム。
【請求項２４】
命令を処理するシステムであって、
相互接続部、
前記相互接続部と結合されるプロセッサであって、所与のオペコードを有する第１の命令を受信し、
前記所与のオペコードは第１の意味を有するのか、または第２の意味を有するのかをチェックするためのチェック論理と、
前記所与のオペコードが前記第１の意味を有する場合に、前記第１の命令をデコードし、１つ以上の対応する制御信号を出力するためのデコード論理と、
前記所与のオペコードが前記第２の意味を有する場合に、前記第１の命令のエミュレーションを誘起するためのエミュレーション誘起論理と
を含む、プロセッサ、および
前記相互接続部と結合されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）
を備える、システム。
【請求項２５】
前記所与のオペコードが前記第２の意味を有する場合に、前記第１の命令をエミュレートするために前記第１の命令と同じ命令セットの１つ以上の命令のセットをデコーダに提供するためのエミュレーション論理をさらに含む、請求項２４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載されている諸実施形態は概ねプロセッサに関する。具体的には、本明細書に記載されている諸実施形態は概ねプロセッサ内の命令エミュレーションに関する。
【背景技術】
【０００２】
通例、プロセッサは命令セットアーキテクチャ（ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ、ＩＳＡ）を有する。ＩＳＡは一般的に、プログラミングに関連するプロセッサのアーキテクチャの部分を表す。ＩＳＡは通常、プロセッサの、ネイティブ命令、アーキテクチャレジスタ、データ型、アドレス指定方式等を含む。ＩＳＡの一部が命令セットである。命令セットは一般的に、プロセッサに実行のために提供されるマクロ命令またはＩＳＡレベル命令を含む。命令セットの命令を処理するために、実行論理および他のパイプライン論理が含まれる。多くの場合、このような実行および他のパイプライン論理の量は膨大になり得る。通常、命令セット内の命令が多くなるほど、および命令セット内の命令が複雑になり、かつ／または特殊化するほど、このような論理の量は大きくなる。このようなハードウェアは、プロセッサの製造コスト、サイズ、および／または電力消費を増大させる傾向があり得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明は、本発明の諸実施形態の例示に用いられる以下の説明および添付の図面を参照することによって最も良く理解することができる。
【図面の簡単な説明】
【０００４】
【図１】コンピュータシステムの一実施形態のブロック図である。
【０００５】
【図２】プロセッサ内で命令をエミュレートする方法の一実施形態のブロックフロー図である。
【０００６】
【図３】命令を１つ以上の命令のセットによってエミュレートするための論理の一実施形態を示すブロック図である。
【０００７】
【図４】エミュレーションモードの時には、プロセッサが例外条件に、エミュレーションモードでない時と比較して異なるように対処することを可能にするための論理の一実施形態を示すブロック図である。
【０００８】
【図５】エミュレーションモードの時には、プロセッサリソースおよび／または情報に、エミュレーションモードでない時とは異なるようにアクセスすることを可能にするための論理の一実施形態を示すブロック図である。
【０００９】
【図６】プロセッサによって、および／またはその内部で遂行される方法の一実施形態のブロックフロー図である。
【００１０】
【図７】所与のオペコードが異なる意味を有することを可能にするための論理の一実施形態を示すブロック図である。
【００１１】
【図８】オペレーティングシステムモジュールによって遂行されてよい方法の一実施形態のブロックフロー図である。
【００１２】
【図９】ソフトウェアライブラリの１つ以上の関数、サブルーチン、または他の部分のセットであって、それらを用いるソフトウェアにふさわしい所与のオペコードの意味を有するセットを選択する選択モジュールを含む、プログラムローダモジュールの一実施形態のブロック図である。
【００１３】
【図１０Ａ】本発明の諸実施形態による例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【００１４】
【図１０Ｂ】本発明の諸実施形態によるプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【００１５】
【図１１Ａ】本発明の諸実施形態による、シングルプロセッサコアのブロック図であって、その、オンダイ相互接続ネットワークへの接続、およびその、レベル２（Ｌｅｖｅｌ  ２、Ｌ２）キャッシュのローカルサブセットを伴うブロック図である。
【００１６】
【図１１Ｂ】本発明の諸実施形態による図１１Ａにおけるプロセッサコアの一部の拡大図である。
【００１７】
【図１２】本発明の諸実施形態による、１つを超えるコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよいプロセッサのブロック図である。
【００１８】
【図１３】本発明の一実施形態によるシステムのブロック図である。
【００１９】
【図１４】本発明の一実施形態による第１のより具体的な例示的システムのブロック図である。
【００２０】
【図１５】本発明の一実施形態による第２のより具体的な例示的システムのブロック図である。
【００２１】
【図１６】本発明の一実施形態によるＳｏＣのブロック図である。
【００２２】
【図１７】本発明の諸実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。
【発明を実施するための形態】
【００２３】
本明細書に開示されているのは、命令エミュレーションプロセッサ、方法、およびシステムである。以下の説明では、数多くの特定の細部が記載されている（例えば、特定のエミュレーションモード認識論理、例外条件に対処するためのアプローチ、特権リソースおよび情報の種類、論理実装、マイクロアーキテクチャの細部、演算の順序、論理分割／統合の細部、ハードウェア／ソフトウェア分割の細部、プロセッサ構成、システム構成要素の種類および相互関係等）。しかし、本発明の諸実施形態はこれらの特定の細部を用いずに実施されてもよいことを理解されたい。他の例では、本記載の理解を不明瞭にしないようにするために、周知の回路、構造および技術は詳細に示されていない。
【００２４】
図１はコンピュータシステム１００の一実施形態のブロック図である。種々の実施形態において、コンピュータシステムは、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、パーソナルデジタルアシスタント、携帯電話、サーバ、ネットワークデバイス（例えば、ルータまたはスイッチ）、携帯インターネットデバイス（Ｍｏｂｉｌｅ  Ｉｎｔｅｒｎｅｔ  ｄｅｖｉｃｅ、ＭＩＤ）、メディアプレーヤ、スマートテレビ、セットトップボックス、ビデオゲームコントローラ、あるいは他の種類の電子デバイスを表してよい。
【００２５】
コンピュータシステムはプロセッサ１０１の一実施形態を含む。実施形態によっては、プロセッサは汎用プロセッサであってよい。例えば、プロセッサは、中央処理装置（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ、ＣＰＵ）として通常用いられている種類の汎用プロセッサであってよい。他の実施形態では、プロセッサは専用プロセッサであってもよい。好適な専用プロセッサの例としては、ほんの数例を挙げると、コプロセッサ、グラフィックスプロセッサ、通信プロセッサ、ネットワークプロセッサ、暗号プロセッサ、組み込みプロセッサ、およびデジタル信号プロセッサ（ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ、ＤＳＰ）が挙げられるが、これらに限定されない。プロセッサは、種々の複合命令セットコンピューティング（ｃｏｍｐｌｅｘ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ、ＣＩＳＣ）プロセッサ、種々の縮小命令セットコンピューティング（ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ、ＲＩＳＣ）プロセッサ、種々の超長命令語（ｖｅｒｙ  ｌｏｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｏｒｄ、ＶＬＩＷ）プロセッサ、これらの種々のハイブリッド、または全く別の種類のプロセッサのいずれのものであってもよい。
【００２６】
コンピュータシステムは、結合機構１０９によってプロセッサ１０１と結合されるメモリ１１０の一実施形態も含む。プロセッサとメモリとを結合するための当技術分野において周知の任意の従来の結合機構が好適である。このような機構の例としては、相互接続部、バス、ハブ、メモリコントローラ、チップセット、チップセット構成要素等、およびこれらの組み合わせが挙げられるが、これらに限定されない。メモリは、同じまたは異なる種類のいずれかの１つ以上のメモリデバイスを含んでよい。諸実施形態に適している１つのよく用いられている種類のメモリは、ダイナミックランダムアクセスメモリ（ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ、ＤＲＡＭ）である。だだし、他の種類のメモリ（例えば、フラッシュメモリ）が代替的に用いられてもよい。
【００２７】
メモリ１１０は、その内部に格納されたソフトウェア１１１を有してよい。ソフトウェアは、例えば、１つ以上のオペレーティングシステム（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ、ＯＳ）および１つ以上のアプリケーションを含んでよい。動作時には、ソフトウェアの一部がプロセッサ上にロードされ、これをプロセッサ上で走らせてよい。図示のように、プロセッサはプロセッサの命令セットのＩＳＡ命令１０２を受信してよい。例えば、命令フェッチユニットがＩＳＡ命令をフェッチしてよい。ＩＳＡ命令は、デコードされ、実行されるべくプロセッサに提供されるマクロ命令、アセンブリ言語命令、マシンレベル命令、または他の命令を表してよい。図示のように、実施形態によっては、ＩＳＡ命令は非エミュレート命令１０３および１種類以上のエミュレート命令１０４の両方を含んでよい。
【００２８】
プロセッサはデコード論理１０５を含む。デコード論理はデコードユニットまたはデコーダと呼ばれてもよい。デコード論理はＩＳＡ命令１０２を受信してよい。非エミュレート命令１０３の場合には、デコード論理は、比較的高レベルの命令をデコードし、１つ以上の比較的低レベルのマイクロ命令、マイクロオペレーション、マイクロコード入口点、あるいはＩＳＡ命令から派生する他の比較的低レベルの命令または制御信号を出力してよい。図において、これらは、デコード命令１０６として示されている。デコーダから出力されるデコード命令は、デコーダに入力された高レベルのＩＳＡ命令を反映し、表し、および／またはそれらから派生することができ、１つ以上のより低レベル（例えば、回路レベルまたはハードウェアレベル）の演算を通じてＩＳＡ命令を実施してよい。デコーダは、マイクロコードリードオンリーメモリ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ、ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ（ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙ、ＰＬＡ）、および当技術分野において周知のデコーダを実装するために用いられる他の機構を含むが、これらに限定されない、様々な機構を用いて実装されてよい。
【００２９】
デコード後命令プロセッサ論理１０７がデコード論理と結合される。デコード後命令プロセッサ論理はプロセッサの命令処理パイプラインのデコード後の部分を表してよい。デコード後命令プロセッサ論理はデコード命令１０６を受信し、処理してよい。通常、デコード後命令プロセッサ論理は、レジスタ読み出しおよび／またはメモリ読み出し論理、実行論理、レジスタおよび／またはメモリ書き戻し論理、ならびに例外ハンドラ論理を含んでよい。ただし、論理はアーキテクチャによって異なってよく、本発明の範囲はこのような論理に限定されない。実施形態によっては、例えばアウトオブオーダプロセッサパイプラインの場合には、デコード後命令プロセッサ論理は、例えば、アロケーション論理、リネーミング論理、スケジューリング論理、リタイアまたはコミット論理、あるいは同様のもの等の、他の論理を任意選択で含んでよい。
【００３０】
プロセッサは、アーキテクチャ的に可視のレジスタまたはアーキテクチャレジスタ１０８の１つ以上のセットも含む。アーキテクチャ的に可視のレジスタは、ソフトウェアおよび／またはプログラマに対して可視であるレジスタ、ならびに／あるいはオペランドを識別するためにＩＳＡ命令１０２によって指定されたレジスタを表す。これらのアーキテクチャレジスタは、所与のマイクロアーキテクチャの他の非アーキテクチャレジスタまたはアーキテクチャ的に可視でないレジスタ（例えば、命令、リオーダバッファ、リタイアメントレジスタ等によって用いられる一時レジスタ）とは対照をなす。アーキテクチャレジスタは一般的に、データを格納するオンダイのプロセッサ記憶位置を表す。多くの場合、これらのアーキテクチャレジスタは本明細書において単にレジスタと呼ばれる。例として、アーキテクチャレジスタは、一組の汎用レジスタ、一組のパックドデータレジスタ、一組の浮動小数点レジスタ、一組の整数レジスタ、またはこれらの何らかの組み合わせを含んでよい。アーキテクチャレジスタは、周知の技術を用い、種々のマイクロアーキテクチャで種々の方法で実装されてよく、いかなる特定の種類の回路にも限定されない。好適な種類のアーキテクチャレジスタの例としては、専用物理レジスタ、レジスタリネーミングを用いる動的アロケーション物理レジスタ、およびこれらの組み合わせが挙げられるが、これらに限定されない。
【００３１】
デコード後命令プロセッサ論理１０７はレジスタ１０８と結合される。デコード後命令プロセッサ論理はレジスタからデータを受信し、そこへデータを書き込むかまたは格納してよい。例えば、レジスタ読み出し論理は、命令のソースオペランドとして指示されたレジスタからデータを読み出してよく、および／または書き戻し論理は、命令の宛先オペランドとして指示されたレジスタに結果を書き込むかまたは格納してよい。デコード後命令プロセッサ論理はメモリ１１０とも結合され、メモリからデータを受信し、そこへデータを格納してよい。例えば、メモリ読み出し論理は、命令によって指示されるメモリ位置からデータを読み出してよく、および／またはメモリ書き戻し論理は、命令によって指示されるメモリ位置にデータを書き込んでよい。
【００３２】
図１を再び参照すると、デコード論理１０５にはエミュレート命令１０４も提供されてよい。非エミュレート命令１０３とは対照的に、エミュレート命令１０４は、デコード論理によって完全にデコードされ、対応するデコード命令１０６としてデコード後命令プロセッサ論理１０７に提供されなくてもよい。むしろ、実施形態によっては、エミュレート命令１０４をエミュレートするためのエミュレーション論理１１５が提供されてよい。当諸技術分野においては、このようなエミュレーションに、例えば、命令変換、バイナリトランスレーション、コードモーフィング、命令解釈等、様々な用語が与えられている。用語、エミュレーションは本明細書において、当業界で用いられているこれらの様々な用語を包含するように幅広く用いられている。
【００３３】
図示のように、実施形態によっては、エミュレーション論理１１５は、一部はオンダイエミュレーション論理１１７、および一部はオフダイエミュレーション論理１１３と分けられてよい。ただし、これは必須ではない。他の実施形態では、エミュレーション論理１１５はすべてが任意選択的にオンダイであってもよく、または大部分が任意選択的にオフダイであってもよい。ただし、通常は、少なくともいくらかのオンダイエミュレーション論理が存在する（例えば、エミュレーションモード１１８、パイプライン内のいくらかのエミュレーションモード認識命令プロセッサ論理１２０等）。オンダイエミュレーション論理はプロセッサに固定されているか、常駐しているか、または永続的にオンダイである。通常、オンダイエミュレーション論理は、起動前にプロセッサの電源が切れている時でも、および／または製造完了時に、プロセッサにオンダイで存在する。好適なオンダイエミュレーション論理の例としては、ハードウェア（例えば、集積回路機構、トランジスタ等）、ファームウェア（例えば、オンダイのＲＯＭ、ＥＰＲＯＭ、フラッシュメモリ、または他の永続性もしくは不揮発性メモリおよびその内部に格納される不揮発性命令）、あるいはこれらの組み合わせが挙げられるが、これらに限定されない。
【００３４】
オフダイエミュレーション論理１１３はメモリ１１０内に含まれてよい。オフダイエミュレーション論理はオンダイエミュレーション論理と結合されるか、または別の方法で通信してよい。実施形態によっては、オフダイエミュレーション論理はメモリの保護領域または部分１１２内に含まれてよい。実施形態によっては、保護部分は、プロセッサのオンダイハードウェアおよび／またはファームウェア論理のみによる使用のために確保され、プロセッサ上で実行するソフトウェア１１１のためには確保されない場合がある。例えば、実施形態によっては、オンダイエミュレーション論理１１７、エミュレーションモード認識命令プロセッサ論理１２０、および／または場合によっては他のオンダイプロセッサ論理は、オフダイエミュレーション論理１１３にアクセスし、それを利用することができてもよいが、プロセッサ上で走るソフトウェア１１１（例えば、オペレーティングシステムまたはアプリケーション）はオフダイエミュレーション論理１１３にアクセスすることまたはそれを利用することができなくてもよい。実施形態によっては、オフダイエミュレーション論理は、アプリケーション、オペレーティングシステム、仮想マシンマネージャが存在する場合には、その仮想マシンマネージャ、および／またはＩ／Ｏデバイスによるアクセスおよび変更から保護され、かつ／またはそれに対して不可視であってもよい。これはセキュリティの向上に役立ち得る。
【００３５】
デコード論理は、エミュレート命令１０４を検出または認知するための論理１１９を含む。例えば、デコーダはオペコードに基づいてエミュレート命令を検出してよい。実施形態によっては、エミュレート命令を検出すると、デコーダはエミュレーション論理１１５にエミュレーションモード信号１１６（例えば、エミュレーショントラップ信号）を提供してよい。図示のように、エミュレーション論理はエミュレーションモード１１８を有してよい。例として、エミュレーションモードは、プロセッサ（例えば、論理１０５、１０７等）はエミュレーションモードになっているのか否かを指示するための１つ以上のビットまたはコントロールをプロセッサの制御または構成レジスタ内に含んでよい。実施形態によっては、エミュレート命令１０４はエミュレートされるべきであると指示するエミュレーションモード信号１１６をデコーダから受信すると、エミュレーションモード１１８に入ってよい。
【００３６】
実施形態によっては、デコード論理１０５は、エミュレートされる命令に関連する他の情報をエミュレーション論理１１５に提供してもよい。このような情報の例としては、オペランド識別子（例えば、ソースまたは宛先レジスタアドレスまたはメモリ位置）、メモリアドレス指定方式、即値、実行を増速するための定数、ならびに／あるいはエミュレート命令１０４からの、および／またはそれに関連する他の情報が潜在的に挙げられるが、これらに限定されない。例として、エミュレーションシステムにとって、エミュレーションシステムがエミュレート命令１０４をエミュレートすることを可能にするために有用である、エミュレート命令からの、および／またはエミュレート命令に関連するあらゆる情報が潜在的に提供され得る。
【００３７】
実施形態によっては、エミュレーション論理１１５は、異なる種類のエミュレート命令１０４毎に、それをエミュレートするための１つ以上の命令１１４の異なるセットを含んでよい。例えば、第１のオペコードを有する第１の命令１０４をエミュレートするために、１つ以上の命令１１４の第１セットが提供されてよく、第２の異なるオペコードを有する第２の異なる命令１０４をエミュレートするために、１つ以上の命令１１４の第２の異なるセットが提供されてよい。実施形態によっては、各セットは少なくとも３つの命令を含んでよい。図示の実施形態では、１つ以上の命令１１４のセットはオフダイエミュレーション論理１１３内に含まれている。ただしこれは必須ではない。他の実施形態では、命令１１４はオンダイで（例えば、オンダイエミュレーション論理１１７の永続性または不揮発性メモリ内に）提供されてよい。さらに他の実施形態では、命令１１４の一部はオンダイで（例えば、オンダイエミュレーション論理内に）提供されてよく、一部はオフダイで（例えば、オフダイエミュレーション論理内に）提供されてよい。
【００３８】
実施形態によっては、エミュレート命令１０４をエミュレートするために用いられる１つ以上の命令１１４のセットの命令の各々は、エミュレーション論理１１５からフェッチされるかまたは別の方法で取得され、デコード論理１０５に提供されてよい。実施形態によっては、エミュレート命令１０４をエミュレートするために用いられる１つ以上の命令１１４のセットの命令の各々は、エミュレート命令１０４と同じ命令セットであり得る。デコード論理１０５は、１つ以上の命令１１４のセットの各々を、対応するデコード命令１０６にデコードしてもよい。デコード命令はデコード後命令プロセッサ論理１０７に提供されてよい。
【００３９】
デコード後命令プロセッサ論理はエミュレーションモード認識命令プロセッサ論理１２０の一実施形態を含む。図示のように、エミュレーションモード認識命令プロセッサ論理はエミュレーションモード１１８と結合されるか、または別の方法でそれを認識してよい。実施形態によっては、プロセッサがエミュレーションモードである時には、エミュレーションモード認識命令プロセッサ論理は、命令１１４のデコードバージョンの少なくとも一部を、プロセッサがエミュレーションモードでない時とは少なくとも一部の面で異なるように処理してもよい。処理が異なり得る面は様々に存在する。実施形態によっては、エミュレーションモードの時には、障害またはエラー対処が、エミュレーションモードでない時と比較して異なるように遂行されてよい。他の実施形態では、エミュレーションモードの時には、例えば、安全な、特権的な、または別様にアクセス制御されたリソースおよび／または情報等の、特定の種類のリソースおよび／または情報へのアクセスが、エミュレーションモードでない時とは異なるように処理されてよい。例えば、リソースおよび／または情報へのアクセスは、エミュレーションモードの時には許可されるが、エミュレーションモードでない時には許可されなくてよい。
【００４０】
エミュレーションモードの時には、デコード後命令プロセッサ論理は記憶位置１２１にアクセスしてよい。図示の実施形態では、記憶位置１２１はオンダイエミュレーション論理１１７の一部である。代替的に、記憶位置は、オフダイエミュレーション論理内に含まれるか、あるいは一部はオンダイエミュレーション論理内、および一部はオフダイエミュレーション論理内に含まれてもよい。記憶位置は、命令１１４のセットの実行に関連する一時変数、中間結果、および／または実行状態を格納するために用いられてよい。これは、エミュレート命令１０４を有する元のプログラムの実行状態を保管する必要を回避するのに役立ち、かつ／またはこのような実行状態（例えば、アーキテクチャレジスタ１０８の内容）が命令１１４のセットの処理によって破損するのを阻止するのに役立ち得る。実施形態によっては、記憶位置１２１はアーキテクチャレジスタをエミュレートしてよい。ただし、これは必須ではない。実施形態によっては、記憶位置１２１のコンテンツは、アプリケーション、オペレーティングシステム、仮想マシンマネージャ、Ｉ／Ｏデバイス、割り込み等によるアクセスから独立し、それらから隔離され、かつ／またはそれらから保護されていてよい。命令１１４のセットが完了すると、プロセッサのアーキテクチャ状態が更新されてよい（例えば、結果が記憶位置１２１からレジスタ１０８に格納されてよい）。これは低レイテンシアクセスによって行われてよい。通常、これは、エミュレート命令１０４が実際に直接実行されていれば生じたアーキテクチャ状態の変化および／または起こったであろうプロセッサの動作に近似し、これを模倣、類似、または別の方法でエミュレートするために用いられてよい。
【００４１】
説明を不明瞭にすることを回避するために、比較的単純なプロセッサ１０１が示され、説明されている。他の実施形態では、プロセッサは他の周知の構成要素を任意選択で含んでもよい。プロセッサ内の構成要素の組み合わせおよび構成は文字通り数多くの様々なものが存在し、諸実施形態はいかなる特定の組み合せまたは構成にも限定されない。プロセッサは、集積回路あるいは１つ以上の半導体ダイもしくはチップ（例えば、単一のダイもしくはチップ、または２つ以上のダイもしくはチップを組み込むパッケージ）の組を表してよい。実施形態によっては、プロセッサはシステムオンチップ（ｓｙｓｔｅｍ−ｏｎ−ｃｈｉｐ、ＳｏＣ）および／またはチップマルチプロセッサ（ｃｈｉｐ  ｍｕｌｔｉ−ｐｒｏｃｅｓｓｏｒ、ＣＭＰ）を表してよい。
【００４２】
一部のプロセッサは比較的複雑な演算を用いる。例えば、単一のメモリアクセスのみの代わりに、一部の命令は複数のメモリアクセスを遂行する。一例は、メモリからデータ要素のベクトルを収集するためのベクトル収集命令である。別の例として、データ要素の単一の対、または２つのパックドデータ内の対応するデータ要素の複数の対を比較する代わりに、一部の命令は多数のデータ要素比較を遂行してよい。諸例は、ベクトルコンフリクト命令およびストリング処理命令である。１つのアプローチは、このような複雑な演算を完全にハードウェアで実装することである。しかし、多くの場合、必要とされるハードウェアの量は膨大になる傾向を有し得、これは、製造コスト、ダイサイズ、および電力消費を増大させる傾向を有し得る。別のアプローチは、このような複雑な演算を少なくとも一部、マイクロコードで実装することである。マイクロコードの使用は、このような複雑な演算の実装に必要なハードウェアの量を削減する助けとなってよく、および／または一部の既存のハードウェアを再利用することを可能にする助けとなってよい。しかし、プロセッサによっては、マイクロコードを用いないものがある（例えば、命令セットのいかなる命令の実装にもマイクロコードを用いない）。
【００４３】
実施形態によっては、比較的より複雑な命令が１つ以上の比較的より単純な命令を用いてエミュレートされてよい。用語「より複雑」および「より単純」は、互いに相対的である、相対的な用語であり、絶対的な用語ではない。有利には、これは潜在的に、より複雑な命令の実装に必要なハードウェアの量を削減する助けとなってよく、および／またはより複雑な命令のエミュレートに用いられる１つ以上の命令によって用いられる既存のハードウェアの再利用を可能にする助けとなってよい。たとえ、実施形態によっては、プロセッサがマイクロコードを用いるように構成されていない場合があり、および／またはより複雑な命令を実装するためにマイクロコードを用いるように構成されていない場合があっても、実施形態によっては、より複雑な命令のマイクロコード的実装を提供するために、より単純な１つ以上の命令を用いた、より複雑な命令のエミュレーションが利用されてよい。
【００４４】
図２は、プロセッサ内で命令をエミュレートする方法２３０の一実施形態のブロックフロー図である。実施形態によっては、図２の演算および／または方法は、図１のプロセッサによって、および／またはその内部で遂行されてよい。図１のプロセッサについて本明細書に記載されている構成要素、特徴、および特定の任意追加の細部は、図２の演算および／または方法にも任意選択で適用される。代替的に、図２の演算および／または方法は、同様のまたは全く異なるプロセッサによって、ならびに／あるいはその内部で遂行されてもよい。さらに、図１のプロセッサは、図２のものと同様のまたは異なる演算および／または方法を遂行してよい。
【００４５】
本方法は、ブロック２３１において、第１の命令を受信することを含む。実施形態によっては、第１の命令はデコーダにおいて受信されてよい。本方法は、ブロック２３２において、第１の命令をエミュレートすると決定することを含む。実施形態によっては、デコーダが、第１の命令のオペコードは、エミュレートされるべき命令のための１つ以上のオペコードのセットのうちの１つであると判定することによって、第１の命令をエミュレートすると決定してよい。本方法は、ブロック２３３において、第１の命令をエミュレートするために用いられる１つ以上の命令のセットを受信することを含む。実施形態によっては、命令のセットは、デコーダにおいて、オンダイエミュレーション論理、またはオフダイエミュレーション論理、あるいはそれらの組み合わせから受信されてよい。実施形態によっては、セットの命令の各々は、第１の命令と同じ命令セットのものであってよい。本方法は、ブロック２３４において、エミュレーションモードの時には、セットの命令から派生した１つ以上の制御信号を、エミュレーションモードでない時とは異なるように処理することを含む。
【００４６】
これは、実施形態によって異なる面で行われてよい。実施形態によっては、セットの命令の処理中に遭遇した例外条件が異なるように処理されてよい。実施形態によっては、セットの命令の処理は、エミュレーションモード内で行われなければ同じ命令（すなわち、同じオペコードを有する命令）が他の方法では利用不可能であろう情報および／またはリソースへのアクセスを可能にしてよい。
【００４７】
図３は、命令（例えば、複雑な命令）３０４を、１つ以上の命令（例えば、より単純な命令）３１４によってエミュレートするための論理３０１の一実施形態を示すブロック図である。実施形態によっては、図３の論理は図１のプロセッサおよび／またはコンピュータシステム内に含まれてよい。代替的に、図３の論理は、同様のまたは異なるプロセッサまたはコンピュータシステム内に含まれてもよい。さらに、図１のプロセッサおよび／またはコンピュータシステムは、図３のものと同様のまたは異なる論理を含んでよい。
【００４８】
エミュレートされるべきである命令（例えば、複雑な命令）３０４がデコード論理３０５に提供されてよい。デコード論理は、命令３０４を検出するための、例えば、命令３０４のオペコードは、エミュレートされるべきである命令のオペコードのセットの中の１つであることを検出するための、論理３１９を含んでよい。図示のように、実施形態によっては、プロセッサはマイクロコード３３０を有しなくてもよい。デコード論理はエミュレーションモード信号３１６をエミュレーション論理３１５に提供してよい。種々の実施形態において、エミュレーション論理３１５は、オンダイ論理、オフダイ論理、あるいはオンダイおよびオフダイ論理の両方を含んでよい。エミュレーション論理はエミュレーションモード信号に応答してエミュレーションモード３１８に入ってよい。
【００４９】
エミュレーション論理は、（例えば、より複雑な）命令３０４をエミュレートするために用いられてよい１つ以上の（例えば、より単純な）命令３１４のセットも含む。実施形態によっては、１つ以上の命令３１４は命令３０４と同じ命令セットであってもよい。実施形態によっては、１つ以上の命令３１４は、エミュレーションモードでない時にデコードされ、実行される他の命令と同一であってもよい。（例えば、複雑な）命令３０４をエミュレートするために、１つ以上の（例えば、より単純な）命令３１４の各々がデコード論理に提供されてよい。デコード論理は命令３１４の各々を１つ以上のデコード命令３０６としてデコードしてよい。
【００５０】
デコード後命令プロセッサ論理３０７が、命令３１４に対応するデコード命令３０６を受信してよい。デコード後命令プロセッサ論理はエミュレーションモード認識論理３２０の一実施形態を含んでよい。図示のように、実施形態によっては、エミュレーションモード認識論理はエミュレーションモード３１８と結合されるか、または別の方法でそれを認識してよい。実施形態によっては、エミュレーションモード認識論理は、プロセッサがエミュレーションモード３１８である時には、命令３１４に対応するデコード命令３０６を、プロセッサがエミュレーションモードでない時とは異なるように処理してもよい。実施形態によっては、エミュレーションモードの時には、障害またはエラー対処が、エミュレーションモードでない時と比較して異なるように遂行されてよい。例えば、論理３２０は、図４について以下に説明される任意追加の態様を用いてよい。他の実施形態では、エミュレーションモードの時には、特定のリソースおよび／または情報へのアクセスが選択的に提供されてよいが、プロセッサがエミュレーションモードでない時には、提供されなくてよい。例えば、論理３２０は、図５について以下に説明される任意追加の態様を用いてよい。
【００５１】
有利には、実施形態によっては、より複雑な命令が、より単純な命令／演算のセットによって実装されてよい。有利には、これは潜在的に、より複雑な命令の実装に必要なハードウェアの量を削減する助けとなってよく、および／またはより複雑な命令のエミュレートに用いられる１つ以上の命令によって用いられる既存のハードウェアの再利用を可能にする助けとなってよい。たとえ、実施形態によっては、プロセッサがマイクロコードを用いるように構成されていない場合があり、および／またはより複雑な命令を実装するためにマイクロコードを用いるように構成されていない場合があっても、実施形態によっては、より複雑な命令のマイクロコード的実装を提供するために、より単純な１つ以上の命令を用いた、より複雑な命令のエミュレーションが利用されてよい。実施形態によっては、より単純な命令／演算は、より複雑な命令と同じ命令セットのものである場合さえある。
【００５２】
このような、より単純な命令を用いた、より複雑な命令のエミュレーションは、命令をエミュレートするための考えられる理由の単なる一例にすぎない。他の実施形態では、エミュレート命令は、使用頻度が比較的低い（例えば、ほとんど使用されない）ものであってよく、比較的より使用頻度が高い１つ以上の命令によってエミュレートされてよい。有利には、これは潜在的に、ほとんど使用されない命令の実装に必要となるハードウェアの量を削減する助けとなってよく、および／またはほとんど使用されない命令のエミュレートに用いられる１つ以上の命令によって用いられる既存のハードウェアの再利用を可能にする助けとなってよい。さらに他の実施形態では、エミュレート命令は、古く、かつ／または旧式の命令であってよく、ならびに／あるいは非推奨となる過程にあるものであってよく、１つ以上の他の命令によってエミュレートされてよい。有利には、エミュレーションは、非推奨となりつつある命令をなおも実行することを可能にし、それにより、ソフトウェアに後方互換性を提供する助けとなり、一方ではそれと同時に、潜在的に、非推奨命令の実装に必要となるハードウェアの量を削減する助けとなり、および／または非推奨命令をエミュレートするために用いられる１つ以上の命令によって用いられる既存のハードウェアの再利用を可能にする助けとなってよい。本明細書に開示されているエミュレーションのさらに別の利用法が、当業者および本開示の利益を得る者には明らかであろう。
【００５３】
図４は、エミュレーションモードの時には、プロセッサが例外条件に、エミュレーションモードでない時と比較して異なるように対処することを可能にするための論理４０１の一実施形態を示すブロック図である。実施形態によっては、図４の論理は、図１のプロセッサおよび／またはコンピュータシステムならびに／あるいは図３の論理内に含まれてよい。代替的に、図４の論理は、同様のまたは異なるプロセッサまたはコンピュータシステム内に含まれてよい。さらに、図１のプロセッサおよび／またはコンピュータシステムならびに／あるいは図３の論理は、図４のものと同様のまたは異なる論理を含んでよい。
【００５４】
プロセッサがエミュレーションモード４１８でない時には、所与の命令（例えば、所与のオペコードを有する命令）の第１インスタンス４０３−１がデコード論理４０５に提供される。プロセッサがエミュレーションモード４１８で動作している時には、同じ所与の命令（例えば、同じ所与のオペコードを有する別の命令）の第２インスタンス４０３−２がデコード論理に提供される。所与の命令の第２インスタンス４０３−２は、デコーダがエミュレート命令を受信するのに応答して、エミュレート命令をエミュレートするために用いられる１つ以上の命令のセット４１４から提供されてよい。命令のセットは、オンダイ、オフダイ、あるいは一部オンダイおよび一部オフダイであってよいエミュレーション論理４１５内に含まれてよい。エミュレーション論理４１５は、エミュレーション論理について本明細書の他の箇所で述べられている任意追加の特徴のいずれのものを有してもよい。デコード論理は、所与の命令の第１インスタンス４０３−１および第２インスタンス４０３−２の各々に（例えば、同一セットの）１つ以上のデコード命令を提供してよい。
【００５５】
デコード後命令処理論理４０７はデコード命令４０６を受信してよい。デコード後命令処理論理はエミュレーションモード認識例外条件ハンドラ論理４２０を含む。エミュレーションモード認識例外条件ハンドラ論理は、エミュレーションモードを認識した方法で例外条件に対処する／それを処理してもよい。本明細書で使用するとき、用語「例外条件」は、命令を処理する際に生じ得る様々な種類の例外条件を幅広く指す。このような例外条件の例としては、例外、割り込み、障害、トラップ等が挙げられるが、これらに限定されない。多くの場合、例外、割り込み、障害、およびトラップの用語は、当諸技術分野において種々の意味で使われる。特権違反、特権例外、ページフォールト、メモリ保護違反、ゼロ除算、違法オペコードの実行の試み、および他のこのような例外条件に応答したハンドラルーチンへの自動発生制御移行を指すために、用語「例外」が恐らく、より一般的に使われている。
【００５６】
実施形態によっては、プロセッサがエミュレーションモード４１８で動作していない時に、所与の命令の第１インスタンス４０３−１が処理されている最中に特権違反、ページフォールト、メモリ保護違反、ゼロ除算、違法オペコードの実行の試み、または他の例外条件が生じると、このとき、プロセッサは例外条件の実質的に従来の対処を遂行してよい。例えば、実施形態によっては、例外条件は直接受け取られてよく４４０、この場合には、制御が例外条件ハンドラルーチン４４１に移行される。通常、例外条件ハンドラルーチンは、オペレーティングシステム、仮想マシンモニタ、または他の特権ソフトウェアの一部であってよい。このようなハンドラルーチンの例としては、ページフォールトハンドラ、エラーハンドラ、割り込みハンドラ等が挙げられるが、これらに限定されない。
【００５７】
対照的に、実施形態によっては、プロセッサがエミュレーションモード４１８で動作している時に、所与の命令の第２インスタンス４０３−２が処理されている最中に特権違反、ページフォールト、メモリ保護違反、ゼロ除算、違法オペコードの実行の試み、または他の例外条件が生じると、このとき、プロセッサは例外条件の実質的に非従来型の対処を遂行してよい。例えば、実施形態によっては、例外条件は直接受け取られなくてもよい。実施形態によっては、論理４２０は、さもなければ例外条件から生じるであろう、例外条件ハンドラルーチンへのさもなければ自動的な制御移行を抑制するための機構を含んでよい。制御はエミュレーションプログラムから例外条件ハンドラルーチン４４１へ直接移行されなくてもよい。むしろ、実施形態によっては、エミュレーションモード認識例外条件ハンドラ論理４２０は例外条件ハンドラ４４１への制御移行を一時的に抑制し、例外条件を間接的に報告してよい（４４２）。実施形態によっては、エミュレーションモード認識例外条件ハンドラ論理４２０は、１つ以上のエミュレーション通信レジスタ４４３を通じて例外条件を間接的に報告してよい。１つ以上の通信レジスタは、エミュレーション論理と、エミュレートされている元の命令を有するプログラムとの間で情報を通信するために用いられてよい。
【００５８】
実施形態によっては、エミュレーションモード４１８の時に例外条件が生じるのに応答して、エミュレーションモード認識例外条件ハンドラ論理４２０は、例外条件の指示を、例外条件またはエラーステータスフラグ、フィールド、またはレジスタ４４４内に格納してよい。例えば、単一のビットまたはフラグが、例外条件が生じたことを指示するための第１の値（例えば、２進値の１にセットされる）を有してよく、または例外条件が生じなかったことを指示するための第２の値（例えば、２進値のゼロにクリアされる）を有してよい。実施形態によっては、エミュレーションモード４１８の時に例外条件が生じるのに応答して、エミュレーションモード認識例外条件ハンドラ論理４２０は、例外条件のためのエラーコードをエラーコードフィールドまたはレジスタ４４５内に格納してよい。エラーコードは、例えば、エラーの種類、および任意選択で、例外条件の性質の伝達を助けるための追加の詳細等の、エラーに関する追加情報を提供してよい。代替的に、通信レジスタを用いる代わりに、情報は別の方法により信号で送られるかまたは提供されてもよい（例えば、メモリ内に格納される、電気信号を通じて報告される、等）。
【００５９】
実施形態によっては、エミュレーションモード認識例外条件ハンドラ論理４２０は、エミュレートされている命令（すなわち、第２インスタンス４０３−２がデコード論理４０５に送られる原因になったもの）のアドレスの指示（例えば、命令ポインタ）を提供してもよい。例えば、実施形態によっては、エミュレートされている命令のアドレス４４６はスタック４４７の最上部の上に格納されてよい。所与の命令のエミュレートに用いられている命令の１つでなく、エミュレートされている所与の命令のアドレスをスタック上に格納すると、例外ハンドラからの復帰を、エミュレート命令のエミュレートに用いられている命令の１つでなく、エミュレート命令へ復帰させることができる。もしそうでなく、例外ハンドラからの復帰が、その命令のエミュレートに用いられている命令の１つへなされると、これは場合によっては問題を生じさせる可能性がある。例えば、ソフトウェア（例えば、アプリケーション、オペレーティングシステム等）は、その所与の命令のエミュレートに用いられている命令について知識がない場合があり、対応付けられたアドレスを認知しない場合がある。オペレーティングシステムは、制御フローが、未知の、違法な、危険な、または許可されていない位置に移行されようとしていると理解する可能性があり、場合によっては、移行を阻止しようと試みる可能性がある。
【００６０】
実施形態によっては、命令のセット４１４はエラーステータス４４４および／またはエラーコード４４５を監視してよい。例えば、実施形態によっては、命令４１４は、例外条件の有無および例外条件の内容を知るために、エミュレーション通信レジスタ４４３からエラーステータス４４４およびエラーコード４４５を読み出してよい。エラーステータス４４４が例外条件を指示していれば、実施形態によっては、命令のセット４１４は例外条件４４９を受け取ってよい。例えば、エラーステータスをチェックし、エラーが指示されていれば制御を例外条件ハンドラに移行するために、命令４１４の１つ以上が実行されてよい。実施形態によっては、これは、命令のセット４１４が制御を例外条件ハンドラ４４１に移行することを含んでよい。実施形態によっては、例外条件に関する情報（例えば、エラーコード４４５）が例外条件ハンドラ４４１に提供されてよい。また、実施形態によっては、エミュレート命令アドレス４４６が例外条件ハンドラ４４１に提供されてもよく、および／またはスタックの最上部の上に少なくとも保存されてよい。エミュレート命令アドレス４４６は、例外条件への対処からの復帰時に例外条件ハンドラ４４１によって利用されてよい。有利なことに、エミュレートされている命令のアドレスをスタック上に格納することによって、オペレーティングシステムまたは他のエラーハンドラルーチンは、エラーを生じさせたのは、エミュレートされている命令であると考えることができる。
【００６１】
実施形態によっては、エミュレーション論理は、命令内のメモリアクセスは正しく動作するかどうか、または生じ得る例外条件の種類を検査し、報告するための論理を含んでよい。例えば、メモリアドレスは有効であるのかどうか（例えば、ページは存在しているのかどうか）、およびプログラムは、そのメモリ位置を読み出し、および／または変更するために十分なアクセス権を有しているのかどうかを判断するべく、エミュレートされたアクセス権を用いてメモリアドレスを検査するための特殊命令が含まれてよい。いずれかの検査が不合格になれば、エミュレーション論理は、エミュレートされている命令があたかも制御を例外ハンドラに直接渡したかのように、制御を復帰アドレスとともに適当な割り込みハンドラに渡してよい。別の例として、状態機械が、メモリ操作は有効になるかどうかを指示する条件付きメモリトランザクションを遂行してもよい。これは、いつメモリ操作が、例外が生じないことを前提として遂行され得るのかを判定するために用いられてよい。これは、何バイトの命令ストリーム、または命令情報のストリングが、例外を生じず安全に読み出され得るのかを判定するために用いられてもよい。例えば、これは、命令長が読み出され得るか否か、またはその命令長の一部はページフォールトを生じさせるかどうかを検査し、判定するために用いられてよい。エミュレーション論理は、複数のページにわたる命令、および／またはページがメモリ内にないときの命令を扱うための論理を含んでよい。
【００６２】
実施形態によっては、エミュレーション論理は、エミュレーションの実行が中間点において停止し、後で再開するように、中間実行割り込みステータスを提供するための論理を含んでよい。これは、長い持続期間または実行時間を伴う命令をエミュレートする際に特に有利となり得る。実施形態によっては、特定の種類の命令（例えば、ストリング移動命令、収集命令、および長い演算を有する他のもの）のエミュレートに用いられる命令のセットは、現在の進捗レベルを反映するために、エミュレートされている命令を有するソフトウェアの実行状態を更新してよい。例えば、演算が中間点において割り込まれてよく、エミュレーションに用いられている命令のセットが、例外条件ハンドラによって（例えば、プロセッサステータスレジスタ内に）保管された機械状態内のフラグまたはステータスビットをセットしてよい。それにより、復帰時に、エミュレーションコードはフラグまたはステータスビットを検査し、それは中間状態から実行を再開することになっていると判定するとしてもよい。フラグまたはステータスビットは、実行が割り込まれたことを指示してよい。このようにして、例外条件が対処された後、例外条件ハンドラから復帰すると、プログラムは、それが中断した中間進捗レベルにおいて実行を再開し得る。場合によっては、命令（例えば、ストリング移動命令）が、演算の中間状態を反映するようにレジスタを変更してよく、それにより、割り込みの後、実行が中間状態から再開され得るようにする。
【００６３】
図５は、エミュレーションモードの時には、プロセッサリソースおよび／または情報に、エミュレーションモードでない時とは異なるようにアクセスすることを可能にするための論理５０１の一実施形態を示すブロック図である。実施形態によっては、図５の論理は、図１のプロセッサおよび／またはコンピュータシステムならびに／あるいは図３の論理内に含まれてよい。代替的に、図５の論理は、同様のまたは異なるプロセッサまたはコンピュータシステム内に含まれてもよい。さらに、図１のプロセッサおよび／またはコンピュータシステムならびに／あるいは図３の論理は、図５のものと同様のまたは異なる論理を含んでよい。
【００６４】
プロセッサがエミュレーションモード５１８でない時には、所与の命令（例えば、所与のオペコードを有する命令）の第１インスタンス５０３−１がデコード論理５０５に提供される。プロセッサがエミュレーションモード５１８で動作している時には、同じ所与の命令（例えば、同じ所与のオペコードを有する別の命令）の第２インスタンス５０３−２がデコード論理に提供される。所与の命令の第２インスタンス５０３−２は、デコーダがエミュレート命令を受信するのに応答して、エミュレート命令をエミュレートするために用いられる１つ以上の命令のセット５１４から提供されてよい。命令のセットは、オンダイ、オフダイ、あるいは一部オンダイおよび一部オフダイであってよいエミュレーション論理５１５内に含まれてよい。エミュレーション論理５１５は、エミュレーション論理について本明細書の他の箇所で述べられている任意追加の特徴のいずれのものを有してもよい。
【００６５】
デコード後命令プロセッサ論理５０７が、第２インスタンス５０３−２に対応するデコード命令５０６を受信してよい。デコード後命令プロセッサ論理はエミュレーションモード認識アクセス制御論理５２０を含む。エミュレーションモード認識アクセス制御論理は、エミュレーションモードを認識した方法で１つ以上のリソースおよび／または情報５５０へのアクセスを制御する。実施形態によっては、プロセッサがエミュレーションモードで動作していない時には、デコード後命令プロセッサ論理５０７は、リソースおよび／または情報５５０への実質的に従来のアクセスを用いて所与の命令の第１インスタンス５０３−１を処理してよい。図示のように、実施形態によっては、エミュレーションモードでない時には、所与の命令の第１インスタンス５０３−１を処理する最中に、リソースおよび／または情報５５０へのアクセスが阻止されてよい（５５１）。エミュレーションモードでない時にリソースおよび／または情報へのアクセスを阻止することは、種々考えられるあらゆる理由で適切となり得る。例えば、所与の命令は一般的にそれらのリソースおよび／または情報にアクセスする必要がなく、自分は必要な場合にのみリソースおよび／または情報を提供したいため、あるいは他の理由で、情報および／またはリソースのセキュリティを保護するという理由などである。
【００６６】
対照的に、実施形態によっては、エミュレーションモード５１８で動作している時に、所与の命令の第２インスタンス５０３−２が処理されている最中には、デコード後命令プロセッサ論理は、リソースおよび／または情報５５０への実質的に非従来型の（例えば、非エミュレーションモード時とは異なる方法の）アクセスを用いてよい。例えば、図示の実施形態に示されているように、エミュレーションモード５１８の時には、所与の命令の第２インスタンス５０３−２を処理する最中に、リソースおよび／または情報５５０へのアクセスが許可されてよい（５５２）。例として、エミュレーションモード５１８は、エミュレーションモードの時には、その所与の命令のために情報および／またはリソースへの選択的アクセスを許可する特殊なハードウェア状態を論理５０７および／または論理５２０が有することを可能にしてよい。例えば、１つ以上のアクセス特権ビットが提供され、エミュレーションモード時には、情報に選択的にアクセスすることを状態機械に許可するように構成されてよい。
【００６７】
様々な種類の情報および／またはリソース５５０が企図されている。好適なリソースおよび／または情報の例としては、セキュリティ関連リソースおよび／または情報（例えば、セキュリティ論理）、暗号化および／または解読関連リソースおよび／または情報（例えば、暗号化論理および／または解読論理）、乱数発生器リソースおよび／または情報（例えば、乱数発生器論理）、オペレーティングシステムおよび／または仮想マシンモニタに対応する特権またはリングレベルのために確保されるリソースおよび／または情報、ならびに同様のものが挙げられるが、これらに限定されない。
【００６８】
好適なリソースおよび／または情報の別の例としては、デコード後命令プロセッサ論理５０７を有する物理プロセッサまたは論理プロセッサとは異なる物理プロセッサまたは論理プロセッサ内のリソースおよび／または情報（例えば、コア、ハードウェアスレッド、スレッドコンテキスト等）が挙げられるが、これらに限定されない。異なる物理または論理プロセッサは、同じまたは異なるソケット内にあってよい。例として、エミュレーションモードの時には、エミュレーションモード認識制御論理５２０が、エミュレーションモードでない時にはデコード後命令プロセッサ論理５０７は利用不可能であろう別のソケット内の別のコアの情報および／またはリソースにアクセスすることができてよい（例えば、コアのステータスを問い合わせる）。
【００６９】
有利には、エミュレーションモード認識アクセス制御論理５２０は、エミュレーションモードの時に、命令５１４の少なくとも一部に、エミュレーションモードでない時には命令セットの同じ命令は通常利用不可能であろう特定のリソースおよび／または情報への選択的アクセスを許可することを助けてよい。エミュレーション論理はオンダイであり、かつ／またはメモリの保護部分内にあってよいため、セキュリティはなおも維持されてよい。
【００７０】
実施形態によっては、一部の実行レベル、例えばセキュリティ実行状態は、このようなエミュレーションを用いてこれらのリソースおよび／または情報にアクセスすることを禁止してもよい。例えば、エミュレートされたオペコードを用いることを全ての実行状態が許可されなくてもよい。このような割り込みまたは下位レベルの実行が許されると、特殊なセキュリティ実行状態は、保証可能なほど安全ではなくなる可能性がある。その代わり、このような実行レベルまたはセキュリティ実行状態が同様のアクセスを必要とする場合には、それらは代わりに、エミュレーションソフトウェアが利用可能なハードウェア基本命令を用いることによってそれを実施してもよい。
【００７１】
実施形態によっては、命令の所与のオペコードに異なる意味を提供することを助けるために、命令エミュレーションが用いられてもよい。命令セットのマクロ命令、機械語命令、および他の命令は演算コードすなわちオペコードをたいてい含む。オペコードは、命令に応答して遂行されるべき特定の命令および／または演算を指定するために用いられる命令の部分を一般的に表す。例えば、パックド乗算命令のオペコードはパックド加算命令のオペコードとは異なってよい。一般的に、オペコードは、物理的ではないとしても論理的にグループ化してまとめられる１つ以上のフィールド内に数ビットを含む。多くの場合、所望の数の命令／演算を可能にしつつ、オペコードを比較的短い長さ、または可能な限り短い長さに維持しようと試みることが望ましい。比較的長いオペコードはデコーダのサイズおよび／または複雑性を増大させる傾向があり、一般的に、命令をより長くする傾向もある。オペコード内のビット数が固定されている場合には、一般的に、固定数の、異なる命令／演算しか識別し得ない。例えば、エスケープコード等を用いることによって、オペコードを最大限に活用しようと試みるための当技術分野において周知の方略が種々存在する。それにもかかわらず、オペコードを用いて一意に識別することができる命令の数は一般的に、しばしば望まれるよりも限定される。一般的に、利用可能なオペコードを最終的にどこかの時点で使い果たすことなく、プロセッサのオペコード空間に新しい命令を追加し続けることはできない。
【００７２】
作業負荷は時が経つにつれて変化する。同様に、所望の命令および所望の命令機能は時が経つにつれて変化する。通常、プロセッサには新しい命令機能が継続的に追加されていく。同様に、一部の命令／演算は、時が経つにつれて比較的有用性が低くなり、および／または使用頻度が低くなり、および／または重要性が低くなる。場合によっては、命令／演算が有する有用性または重要性が十分にわずかなほどしかなくなれば、それらは非推奨（ｄｅｐｒｅｃａｔｅｄ）とされてよい。非推奨とは、当諸技術分野においてよく使われる用語であり、構成要素、機構、特徴、または手法に適用されるステータスであって、多くの場合、それは、放棄もしくは代替される過程にあり、および／または将来、利用不可能になるかまたはサポートされなくなり得るため、それは一般的に避けるべきものであること指示するステータスに言及するために使われる用語である。
【００７３】
通常、このような命令／演算は、すぐに削除されるのではなく、一時的な後方互換性の提供を助けるために（例えば、既存またはレガシーコードが引き続き走ることを可能にするために）、非推奨とされてよい。これにより、コードが後継の命令／演算に準拠される時間が与えられて、および／または既存もしくはレガシーコードが廃止される時間が与えられてよい。多くの場合、命令／演算を命令セットから非推奨とするには、古いプログラムを十分に排除する時間を与えるために、例えば、数十年とは言わないまでも、何年ものオーダの、長い時間がかかる。従来、一般的に、非推奨命令／演算のオペコードの値は、これほど長い期間が経過するまで、異なる命令／演算のために再獲得し、再利用することができなかった。さもなければ、レガシーソフトウェアを走らせると、そのオペコード値を有する命令は、意図された非推奨演算ではなく、後継の演算をプロセッサに遂行させる場合があり、このため、誤った結果が生じ得る。
【００７４】
実施形態によっては、命令の所与のオペコードに異なる意味を提供することを助けるために、命令エミュレーションが用いられてよい。実施形態によっては、命令の所与のオペコードは異なる意味で解釈されてよい。実施形態によっては、所与のオペコードのために複数のオペコード定義がサポートされてよい。例えば、所与のオペコードは、命令を有するソフトウェアプログラムが意図する意味で解釈されてよい。例として、実施形態によっては、古いまたはレガシーソフトウェアプログラムは、所与のオペコードを有する命令は、古い、レガシー、または非推奨の意味を有するべきであることを指示してよく、新しいソフトウェアプログラムは、所与のオペコードを有する命令は新しい意味を有するべきであることを指示してよい。実施形態によっては、古いまたは非推奨の意味はエミュレートされてよく、それに対して、新しい意味は制御信号にデコードされ、プロセッサパイプライン上で直接実行されてよい。有利には、実施形態によっては、これは、性能の向上を助けるために、古いプログラムが非推奨オペコードによって依然として走ることを可能にする後方互換性をなおも提供し、それと同時に、非推奨オペコードを、異なる意味を有する新しいプログラムのために用いることも可能にしつつ、非推奨となっているオペコードのより早期の再獲得および再利用を可能にする助けとなり得る。
【００７５】
図６は、プロセッサによって、および／またはその内部で遂行される方法６６０の一実施形態のブロックフロー図である。実施形態によっては、図６の演算および／または方法は、図１のプロセッサおよび／または図３もしくは図７の論理によって、および／またはそれらの内部で遂行されてよい。プロセッサおよび論理について本明細書に記載されている構成要素、特徴、および特定の任意追加の細部は、図６の演算および／または方法にも任意選択で適用される。代替的に、図６の演算および／または方法は、同様のまたは全く異なるプロセッサまたは論理によって、ならびに／あるいはその内部で遂行されてもよい。さらに、図１のプロセッサおよび／または図３もしくは図７の論理は、図６のものと同様のまたは異なる演算および／または方法を遂行してよい。
【００７６】
本方法は、ブロック６６１において、所与のオペコードを有する第１の命令を受信することを含む。実施形態によっては、第１の命令はデコーダにおいて受信されてよい。ブロック６６２において、所与のオペコードは第１の意味を有するのか、それとも第２の意味を有するのか判定が行われてよい。実施形態によっては、第１の意味は第１のオペコード定義であってよく、第２の意味は第２の異なるオペコード定義であってよい。以下においてさらに説明されるように、実施形態によっては、これは、デコーダが、例えば、フラグ、ステータスレジスタ、または他のオンダイの記憶位置内の、所与のオペコードは第１の意味を有するのか、それとも第２の意味を有するのかについての指示を読み出すことまたはチェックすることを伴ってよい。以下においてさらに説明されるように、実施形態によっては、ソフトウェア（例えば、オペレーティングシステムモジュールのプログラムローダモジュール）が、ソフトウェアをプロセッサによって走らせるためにロードする際に、指示をフラグ、ステータスレジスタ、または他のオンダイの記憶位置内に格納してよい。例として、ソフトウェアは、このソフトウェアは、所与のオペコードが第１の意味を有することを期待または指定するのか、それとも第２の意味を有することを期待または指定するのかを指示するためのメタデータ（例えば、オブジェクトモジュールフォーマット）を含んでよい。
【００７７】
図６を再び参照すると、ブロック６６２における判定が、所与のオペコードは第１の意味を有する、であれば、このとき、方法はブロック６６３へ進んでよい。ブロック６６３において、第１の命令は、１つ以上のマイクロ命令、マイクロオペレーション、あるいは他の下位レベルの命令または制御信号にデコードされてよい。実施形態によっては、デコーダは、これらの命令または制御信号をデコード後命令プロセッサ論理（例えば、実行ユニット等）に出力してよい。デコード後命令プロセッサ論理は、エミュレーションが代わりに用いられたとした場合よりも通例はるかに高速にこれらの命令を処理し得る。実施形態によっては、第１の意味は、非推奨でないオペコードの意味、比較的新しいオペコードの意味、比較的使用頻度の高いオペコードの意味、性能により強く影響を与えるオペコードの意味、または同様のものに用いられてよい。
【００７８】
逆に、ブロック６６２における判定が、所与のオペコードは第２の意味を有する、であれば、このとき、方法はブロック６６４へ進んでよい。ブロック６６４において、第１の命令のエミュレーションが誘起されてよい。例えば、デコーダはエミュレーショントラップを提供するか、または別の方法でエミュレーションモードをエミュレーション論理に合図してよい。続いて、第２の意味を有するオペコードを持つ第１の命令をエミュレートするために用いられるエミュレーション論理の１つ以上の命令のセットがデコーダに提供され、エミュレーションモードで処理されてよい。これは、実質的に、本明細書の他の箇所で説明されている通りに行われてよい。実施形態によっては、第２の意味は、非推奨オペコードの意味、非推奨となる過程にあるかまたは間もなく非推奨となるオペコードの意味、比較的古いオペコードの意味、比較的使用頻度の低いオペコードの意味、性能にあまり強く影響を与えないオペコードの意味、または同様のものに用いられてよい。
【００７９】
図７は、所与のオペコードが異なる意味を有することを可能にするための論理７０１の一実施形態を示すブロック図である。実施形態によっては、図７の論理は、図１のプロセッサおよび／またはコンピュータシステムならびに／あるいは図３の論理内に含まれてよい。代替的に、図７の論理は、同様のまたは異なるプロセッサまたはコンピュータシステム内に含まれてもよい。さらに、図１のプロセッサおよび／またはコンピュータシステムならびに／あるいは図３の論理は、図７のものと同様のまたは異なる論理を含んでよい。
【００８０】
メモリ７１０が、第１ソフトウェアモジュール７１１−１、第２ソフトウェアモジュール７１１−２、およびプログラムローダモジュール７７０を有するオペレーティングシステムモジュール７９７を含む。実施形態によっては、第１ソフトウェアモジュールは、所与のオペコードのために第１の意味を用いるための指示７７２を含み、第２ソフトウェアモジュールは、所与のオペコードのために第２の異なる意味を用いるための指示７７３を含む。例として、第１および第２ソフトウェアモジュールは各々、これらの指示７７２、７７３を含む、オブジェクトモジュールフォーマット、他のメタデータ、または１つ以上のデータ構造を含んでよい。プログラムローダモジュールは、プロセッサ上で実行する第１ソフトウェアモジュールおよび第２ソフトウェアモジュールをロードしてもよい。図示のように、実施形態によっては、プログラムローダモジュールは、特定のソフトウェアモジュールによって指示されている所与のオペコードの意味をプロセッサ状態としてプロセッサ上にロードするためのモジュール７７１を含んでよい。実施形態によっては、モジュール７７１は、所与のオペコードのために第１の意味を用いるのか、それとも第２の意味を用いるのかについての指示７７５として、オンダイの記憶位置７７４に、第１ソフトウェアモジュールをロードする時には指示７７２をロードするか、または第２ソフトウェアモジュールをロードする時には指示７７３をロードしてもよい。オンダイの記憶位置はデコーダ７０５と結合されるか、または別の方法でそれにアクセス可能である。
【００８１】
実施形態によっては、例えば、古いソフトウェアモジュールの場合には、ソフトウェアモジュールは、所与のオペコードのために所与の意味を用いるための明示的指示を有しなくてもよい。例えば、ソフトウェアは、新しい意味の存在以前に書かれたものである場合がある。実施形態によっては、モジュール７７１および／またはプログラムローダ７７０は、ソフトウェアモジュールは所与のオペコードの第１の意味を用いることを必要としているのか、それとも第２の意味を用いることを必要としているのかを推測してもよい。例えば、これは、プログラム内に埋め込まれた特徴リスト、プログラムのフォーマット、プログラムの古さまたはプログラムが作成された年、あるいはメタデータ内および／またはソフトウェアモジュール内の他のこのような情報から推測されてよい。例えば、第２ソフトウェアモジュール７１１−２が、所与のオペコードの第１の意味の導入／定義以前に作成された古いソフトウェアである場合には、このとき、プログラムローダモジュールおよび／またはオペレーティングシステムモジュールは、第２ソフトウェアモジュールは、所与のオペコードのために、第１の意味ではなく、第２の意味を用いることを必要としていると推測してもよい。モジュール７７１は、ソフトウェアを切り替えるまたはスワップする際に記憶領域内の指示７７５を切り替えるまたはスワップアウトしてもよい。
【００８２】
さらに説明するために、所与のオペコードを持つ命令の第１インスタンス７０３−１が第１ソフトウェアモジュール７１１−１からデコーダ７０５に提供されることを考える。第１ソフトウェアモジュールは、モジュール７７１が記憶位置７７４内に保存してよい、所与のオペコードのために第１の意味を用いるための指示７７２を含む。デコーダは、所与のオペコードのために第１の意味を用いるべきであるのか、それとも第２の意味を用いるべきであるのかについての指示７７５をチェックするための、記憶位置７７４と結合されるチェック論理７７６を含む。チェック論理は記憶位置にアクセスするかまたはそれを読み出し、第１ソフトウェアモジュールからの命令の第１インスタンスを処理する時には、第１の意味が所与のオペコードのために用いられるべきであると判定し得る。実施形態によっては、記憶位置７７４は、異なるオペコードに各々対応する複数の指示を格納するために、複数の異なる記憶位置を含んでよい。それに応じて、デコーダのデコード論理７７７が、所与のオペコードの第１の意味を前提として命令をデコードしてよい。１つ以上のデコード命令７０６または１つ以上の他の制御信号がデコーダからデコード後命令処理論理７０７に提供されてよく、デコード後命令処理論理７０７がそれらを処理してよい。
【００８３】
同じ所与のオペコードを持つ命令の第２インスタンス７０３−２が第２ソフトウェアモジュール７１１−２からデコーダ７０５に提供されてもよい。第２ソフトウェアモジュールは、モジュール７７１が記憶位置７７４内に保存してよい、所与のオペコードのために第２の意味を用いるための指示７７３を含む。チェック論理７７６は、指示７７５をチェックし、第２ソフトウェアモジュールからの命令の第２インスタンスを処理する時には、第２の意味が所与のオペコードのために用いられるべきであると判定し得る。それに応じて、エミュレーション誘起論理７７８が命令７０３−２の第２インスタンスのエミュレーションを誘起してよい。例えば、エミュレーション誘起論理はエミュレーショントラップを遂行するか、または別の方法でエミュレーションモード７１８を合図してよい。第２の意味を持つ所与のオペコードを有する命令の第２インスタンスをエミュレートするために用いられる１つ以上の命令のセット７１４が、エミュレーション論理７１５からデコーダに提供されてよい。エミュレーション論理は、オンダイ、オフダイ、あるいは一部オンダイおよび一部オフダイであってよい。エミュレーション論理７１５は、エミュレーション論理について本明細書の他の箇所で説明されている任意追加の特徴のいずれのものを有してもよい。
【００８４】
実施形態によっては、命令７１４は、所与のオペコードを有する命令と同じ命令セットであってよい。実施形態によっては、デコーダはこれらの命令の各々をデコードし、それらをデコード命令７０６または他の制御信号としてデコード後命令処理論理に提供してよい。実施形態によっては、デコード後命令処理論理は、本明細書の他の箇所で説明されているもの（例えば、図１または３〜５のいずれかのもの）と同様または同じであってよい、エミュレーションモード認識命令プロセッサ論理７２０を含んでもよい。図示のように、実施形態によっては、エミュレーションモード認識命令処理論理はエミュレーションモード７１８と結合されるか、または別の方法でそれを認識してよい。さらに、エミュレーションモード認識命令処理論理はエミュレーション論理の記憶位置７２１と結合されてよく、それに対してデータの読み出しおよび書き込みを行ってよい。
【００８５】
実施形態によっては、記憶位置７７４内の指示７７５に基づいてプロセッサ特徴識別レジスタ７９５を更新するための論理７９６が含まれてもよい。好適なプロセッサ特徴識別レジスタの例としては、ＣＰＵ識別（ＣＰＵ  ＩＤｅｎｔｉｆｉｃａｔｉｏｎ、ＣＰＵＩＤ）に用いられるものが挙げられる。論理７９６は記憶位置７７４およびプロセッサ特徴識別レジスタ７９５と結合されてよい。プロセッサ特徴識別レジスタは、プロセッサの命令セットのプロセッサ特徴識別命令（例えば、ＣＰＵＩＤ命令）によって可読であってよい。ソフトウェアは、プロセッサ特徴識別命令を実行することによってプロセッサ特徴識別レジスタからオペコードの意味の指示を読み出してよい。
【００８６】
実施形態によっては、特権レベルおよび／またはリングレベル論理７９４がデコーダ７０５と結合されてもよく、デコーダに、特権レベルおよび／またはリングレベルに基づくオペコードの所与の意味を強制的に使わせるかまたは別の方法でそれをさせてもよい。例えば、これは、第１の意味は新しい意味であり、第２の意味は非推奨の意味である諸実施形態において有用となり得る。オペレーティングシステムは通例、ユーザアプリケーションのものとは異なる特定の特権レベルおよび／またはリングレベルで動作する。さらに、オペレーティングシステムは、それらは一般的に頻繁に更新されるため、通例、所与のオペコードの古い意味ではなく、所与のオペコードの新しい意味を用いる。このような場合には、特権レベルおよび／またはリングレベル論理７９４は、オペレーティングシステムのものに対応する特権またはリングレベルの時には、デコーダに所与のオペコードの新しい意味を使わせてよい。
【００８７】
説明を簡単にするために、本明細書においては、オペコードの２つの異なる意味が典型的に記載されている。しかし、他の実施形態は、所与のオペコードのために３つ以上の異なる意味を用いてもよいことを理解されたい。例として、記憶位置７７４は、複数のこのような異なる意味のうちのどれを所与のオペコードのために用いるべきであるのかを指示するための２つ以上のビットを含んでよい。同様に、プロセッサ特徴識別レジスタは、所与のオペコードのための多数のこのような意味を反映してよい。
【００８８】
図８は、オペレーティングシステムモジュールによって遂行されてよい方法８８０の一実施形態のブロックフロー図である。実施形態によっては、本方法はプログラムローダモジュールによって遂行されてよい。
【００８９】
本方法は、ブロック８８１において、所与のオペコードを有する第１の命令は、ソフトウェアプログラムからプロセッサによって実行される時に、第１の意味の代わりに第２の意味を有するべきであると判定することを含む。これは、実施形態によって異なる方法で行われてよい。実施形態によっては、ソフトウェアプログラムは、所与のオペコードのための所与の意味を用いるための指示を指定してよい。例えば、オペレーティングシステムモジュールはソフトウェアプログラムのメタデータを調べてよい。例えば、どの意味を用いるべきであるのかを指示するフラグがオブジェクトモジュールフォーマット内に存在してよい。他の実施形態では、例えばレガシーソフトウェアの場合には、ソフトウェアプログラムは、どの意味を用いるべきであるのかについての指示を明示的に指定しなくてもよい。実施形態によっては、オペレーティングシステムモジュールは、どの意味を用いるべきであるのかを推測するための論理を含んでもよい。これは様々な方法で行われてよい。実施形態によっては、これは、ソフトウェアプログラムの特徴リストを調べることを含んでよい。場合によっては、特徴リストは、命令のどのリビジョンが期待されているのかを指定してよい。実施形態によっては、これは、ソフトウェアプログラムの作成日付を調べることを含んでよい。所定の日付、例えば新しい後継の意味の命令の日付、よりも古い作成日付は、ソフトウェアプログラムは古いまたは非推奨の意味を用いるとの指示として推測されてよい。実施形態によっては、これは、ソフトウェアプログラムのフォーマットを調べることを含んでよい。例えば、所定のレベル以前の一部のリビジョンのプログラムフォーマットが、古いまたは非推奨の意味を推測するために用いられてもよい。実施形態によっては、これは、所定の意味を用いると知られているソフトウェアプログラムの明示的リスト（例えば、例外リスト）を調べることを含んでもよい。例として、リストは履歴情報に基づいて更新されてよい（例えば、一方の意味からエラーが生じれば、他方の意味がリストに追加されてよい）。これは単なる一例に過ぎない。意味を推測する他の方法も企図されている。
【００９０】
本方法は、ブロック８８２において、所与のオペコードを有する第１の命令は第１の意味ではなく第２の意味を有するべきであるとの指示をプロセッサの状態内に格納することも含む。例えば、オペレーティングシステムモジュールは、本明細書の他の箇所で説明されているように、デコーダと結合された記憶位置内のビットを変更してよい。
【００９１】
図９は、ソフトウェアライブラリ９８３の１つ以上の関数、サブルーチン、または他の部分のセットであって、それらを用いるソフトウェアにふさわしい所与のオペコードの意味を有するセットを選択する選択モジュール９８５を含む、プログラムローダモジュール９７０の一実施形態のブロック図である。ソフトウェアライブラリは一般的に、種々のソフトウェアモジュールが用いてよいソフトウェアの一群を表し、サブルーチン、関数、クラス、手続き、スクリプト、構成データ等の形態の既存のソフトウェアを含んでよい。ソフトウェアモジュールは、種々の機能性を含めるために、ライブラリのこれらの種々の部分を用いてよい。一例として、ソフトウェアモジュールが、種々の数学関数またはサブルーチンを有する数学ソフトウェアライブラリまたはその一部を組み込んでよい。
【００９２】
図示のように、実施形態によっては、ライブラリは、所与のオペコードの第１の意味を用いる、ライブラリ関数、サブルーチン、または他の部分の第１セットを含んでよい。ライブラリは、所与のオペコードの第２の異なる意味を用いる、ライブラリ関数、サブルーチン、または他の部分の第２セットも含んでよい。任意選択で、オペコードの意味が２つを超えて存在する場合には、３つ以上の異なる意味の各々のためのライブラリの異なる部分が同様に存在してよい。場合によっては、異なる意味を用いる部分は異なるコード片であってよい。他の場合には、部分は同じコードの異なる部分であってもよく、第１の意味または第２の意味をふさわしいものとして用いるどちらかのその部分に移動するために、ブランチまたは他の条件付き移動が用いられてよい。
【００９３】
図を再び参照すると、プログラムローダモジュール９７０は、所与のオペコードの第１の意味を用いる第１ソフトウェアモジュール９１１−１、および所与のオペコードの第２の意味を用いる第２ソフトウェアモジュール９１１−２の両方のためのライブラリの部分をロードしてよい。プログラムローダモジュールは、ソフトウェアライブラリの１つ以上の関数、サブルーチン、または他の部分のセットであって、それらを用いるソフトウェアにふさわしい所与のオペコードの意味を有するセットを選択する選択モジュール９８５を含む。例えば、選択モジュールは、ライブラリの部分であって、それらを用いるソフトウェアと同じ、所与のオペコードの意味を有するライブラリの部分を選択してよい。例えば、図に示されているように、選択モジュールは、第１ソフトウェアモジュール９１１−１のためには、それは所与のオペコードの第１の意味を用いるので、第１セット９８４−１を選択してよい。同様に、選択モジュールは、第２ソフトウェアモジュール９１１−２のためには、それは所与のオペコードの第２の意味を用いるので、第２セット９８４−２を選択してよい。第１ソフトウェア９１１−１が古いソフトウェアであり、所与のオペコードの第１の意味が非推奨の意味である１つの特定の実施形態では、選択モジュールは、所与のオペコードのためにその同じ非推奨の意味を同様に用いるライブラリ部分の第１セット９８４を選択してもよい。したがって、選択モジュールは、ライブラリの部分であって、ライブラリのその部分を用いるソフトウェアと矛盾しない、または同じである所与のオペコードの意味を用いる部分を選択してよい。
【００９４】
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ  プロセッサコアは、種々の方法で、種々の目的のために、および種々のプロセッサ内に実装されてよい。例えば、このようなコアの実装は以下のものを含んでよい：１）汎用コンピューティング向きの汎用インオーダコア、２）汎用コンピューティング向きの高性能汎用アウトオブオーダコア、３）主としてグラフィックスおよび／または科学（スループット）コンピューティング向きの専用コア。種々のプロセッサの実装は以下のものを含んでよい：１）汎用コンピューティング向きの１つ以上の汎用インオーダコアおよび／または汎用コンピューティング向きの１つ以上の汎用アウトオブオーダコアを含むＣＰＵ、ならびに２）主としてグラフィックスおよび／または科学（スループット）向きの１つ以上の専用コアを含むコプロセッサ。こうした種々のプロセッサは、以下のものを含んでよい、種々のコンピュータシステムアーキテクチャをもたらす：１）ＣＰＵから独立したチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の独立したダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合には、このようなコプロセッサは、時として、統合グラフィックスおよび／または科学（スループット）論理等の、専用論理、あるいは専用コアと呼ばれる）、ならびに４）上述のＣＰＵ（時として、アプリケーションコアまたはアプリケーションプロセッサと呼ばれる）、上述のコプロセッサ、および追加の機能性を同じダイ上に含んでよい１チップ上のシステム。次に、例示的なコアアーキテクチャを説明し、その後、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
【００９５】
例示的なコアアーキテクチャ  インオーダおよびアウトオブオーダコアブロック図  図１０Ａは、本発明の諸実施形態による例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図１０Ｂは、本発明の諸実施形態によるプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図１０Ａ〜１０Ｂにおける実線の囲み線はインオーダパイプラインおよびインオーダコアを示し、一方、破線の囲み線の任意の追加はレジスタリネーミング、アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであることを考慮し、アウトオブオーダの態様を説明する。
【００９６】
図１０Ａでは、プロセッサパイプライン１０００が、フェッチステージ１００２、長さデコードステージ１００４、デコードステージ１００６、アロケーションステージ１００８、リネームステージ１０１０、スケジューリング（配付または発行としても知られる）ステージ１０１２、レジスタ読み出し／メモリ読み出しステージ１０１４、実行ステージ１０１６、書き戻し／メモリ書き込みステージ１０１８、例外処理ステージ１０２２、およびコミットステージ１０２４を含む。
【００９７】
図１０Ｂは、実行エンジンユニット１０５０と結合されるフロントエンドユニット１０３０を含むプロセッサコア１０９０を示し、両者ともメモリユニット１０７０と結合されている。コア１０９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドあるいは代替的なコア形式であってよい。さらに別の選択物として、コア１０９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ、ＧＰＧＰＵ）コア、グラフィックスコア、あるいは同様のもの等の、専用コアであってよい。
【００９８】
フロントエンドユニット１０３０は、命令キャッシュユニット１０３４と結合される分岐予測ユニット１０３２を含み、命令キャッシュユニット１０３４は命令トランスレーションルックアサイドバッファ（ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ、ＴＬＢ）１０３６と結合され、命令トランスレーションルックアサイドバッファ１０３６は命令フェッチユニット１０３８と結合され、命令フェッチユニット１０３８はデコードユニット１０４０と結合される。デコードユニット１０４０（またはデコーダ）は命令をデコードし、元の命令からデコードされるか、または別の方法でそれを反映するか、もしくはそれから派生する、１つ以上のマイクロオペレーション、マイクロコード入口点、マイクロ命令、他の命令、または他の制御信号を出力として生成してよい。デコードユニット１０４０は種々の異なる機構を用いて実装され得る。好適な機構の例としては、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ（ＰＬＡ）、マイクロコードリードオンリーメモリ（ＲＯＭ）等が挙げられるが、これらに限定されない。一実施形態では、コア１０９０は、特定のマクロ命令のためのマイクロコードを格納するマイクロコードＲＯＭまたは他の媒体を（例えば、デコードユニット１０４０内、または別の方法でフロントエンドユニット１０３０内部に）含む。デコードユニット１０４０は実行エンジンユニット１０５０内のリネーム／アロケータユニット１０５２と結合される。
【００９９】
実行エンジンユニット１０５０は、リタイアメントユニット１０５４および１つ以上のスケジューラユニット１０５６の組と結合されるリネーム／アロケータユニット１０５２を含む。スケジューラユニット１０５６は、リザベーションステーション、中央命令ウィンドウ等を含む、任意の数の種々のスケジューラを表す。スケジューラユニット１０５６は物理レジスタファイルユニット１０５８と結合される。物理レジスタファイルユニット１０５８の各々は１つ以上の物理レジスタファイルを表す。物理レジスタファイルはそれぞれ、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）など等の、１つ以上の異なるデータ型を格納する。一実施形態では、物理レジスタファイルユニット１０５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供してよい。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る種々の方法を示すために（例えば、リオーダバッファならびにリタイアメントレジスタファイルを用いる方法、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いる方法、レジスタマップおよびレジスタのプールを用いる方法等）、物理レジスタファイルユニット１０５８はリタイアメントユニット１０５４によってオーバラップされている。リタイアメントユニット１０５４および物理レジスタファイルユニット１０５８は実行クラスタ１０６０と結合される。実行クラスタ１０６０は、１つ以上の実行ユニット１０６２の組および１つ以上のメモリアクセスユニット１０６４の組を含む。実行ユニット１０６２は種々の演算（例えば、シフト、加算、減算、乗算）を種々の型のデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して遂行してよい。一部の実施形態は特定の機能または機能セット専用の多数の実行ユニットを含んでよく、一方、他の実施形態は、全てが全機能を遂行する唯一の実行ユニットまたは複数の実行ユニットを含んでよい。スケジューラユニット１０５６、物理レジスタファイルユニット１０５８、および実行クラスタ１０６０は、場合により複数あるように示されている。これは、一部の実施形態は、一部の型のデータ／演算用に独立したパイプラインを作成するためである（例えば、独自のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを各々有するスカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプラインである−ならびに、独立したメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット１０６４を有する特定の実施形態が実装される）。独立パイプラインが用いられる場合、これらのパイプラインのうちの１つ以上はアウトオブオーダ発行／実行であり、残りのものはインオーダであってよいことも理解されたい。
【０１００】
一組のメモリアクセスユニット１０６４はメモリユニット１０７０と結合される。メモリユニット１０７０は、レベル２（Ｌ２）キャッシュユニット１０７６と結合されるデータキャッシュユニット１０７４と結合される、データＴＬＢユニット１０７２を含む。１つの例示的な実施形態では、メモリアクセスユニット１０６４は、メモリユニット１０７０内のデータＴＬＢユニット１０７２と各々結合される、ロードユニット、アドレス格納ユニット、およびデータ格納ユニットを含んでよい。命令キャッシュユニット１０３４はメモリユニット１０７０内のレベル２（Ｌ２）キャッシュユニット１０７６とさらに結合される。Ｌ２キャッシュユニット１０７６は１つ以上の他のレベルのキャッシュと結合され、最終的に主メモリと結合される。
【０１０１】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは以下のようにパイプライン１０００を実装し得る：１）命令フェッチ１０３８がフェッチおよび長さデコードステージ１００２および１００４を遂行する、２）デコードユニット１０４０がデコードステージ１００６を遂行する、３）リネーム／アロケータユニット１０５２がアロケーションステージ１００８およびリネームステージ１０１０を遂行する、４）スケジューラユニット１０５６がスケジュールステージ１０１２を遂行する、５）物理レジスタファイルユニット１０５８およびメモリユニット１０７０がレジスタ読み出し／メモリ読み出しステージ１０１４を遂行し、実行クラスタ１０６０が実行ステージ１０１６を遂行する、６）メモリユニット１０７０および物理レジスタファイルユニット１０５８が書き戻し／メモリ書き込みステージ１０１８を遂行する、７）種々のユニットが例外処理ステージ１０２２に関わり得る、ならびに８）リタイアメントユニット１０５４および物理レジスタファイルユニット１０５８がコミットステージ１０２４を遂行する。
【０１０２】
コア１０９０は、本明細書に記載されている命令を含む、１つ以上の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加されたいくつかの拡張を含む）、サニーベール（Ｓｕｎｎｙｖａｌｅ）、ＣＡのミップステクノロジーズ（ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ）のＭＩＰＳ命令セット、サニーベール、ＣＡのＡＲＭホールディングス（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）のＡＲＭ命令セット（ＮＥＯＮ等の任意追加の拡張を含む））をサポートしてよい。一実施形態では、コア１０９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするための論理を含み、それにより、多くのマルチメディアアプリケーションによって用いられる演算を、パックドデータを用いて遂行することを可能にする。
【０１０３】
コアはマルチスレッド（演算またはスレッドの２つ以上の並列セットを実行する）をサポートしてよく、タイムスライスマルチスレッド、同時マルチスレッド（単一の物理コアが、その物理コアが同時にマルチスレッド化しているスレッドの各々のための論理コアを提供する）、あるいはそれらの組み合わせ（例えば、インテル（登録商標）ハイパースレッディング技術におけるもの等のタイムスライスフェッチおよびデコードとその後の同時マルチスレッド）を含む、種々の方法でそれを行ってよいことを理解されたい。
【０１０４】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて用いられてもよいことを理解されたい。プロセッサの図示の実施形態は、独立した命令およびデータキャッシュユニット１０３４／１０７４および共有Ｌ２キャッシュユニット１０７６も含むが、代替実施形態は、例えば、レベル１（Ｌｅｖｅｌ  １、Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュ等の、命令およびデータの双方のための単一の内部キャッシュを有してもよい。実施形態によっては、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、キャッシュは全てコアおよび／またはプロセッサの外部にあってもよい。
【０１０５】
具体的な例示的インオーダコアアーキテクチャ  図１１Ａ〜１１Ｂは、インオーダコアアーキテクチャであって、このコアはチップ内のいくつかの（同じ種類および／または異なる種類の他のコアを含む）論理ブロックの１つになるであろう、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。論理ブロックは、用途に応じて、何らかの固定機能論理、メモリＩ／Ｏインタフェース、および他の必要なＩ／Ｏ論理を用い、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を通じて通信する。
【０１０６】
図１１Ａは、本発明の諸実施形態による、シングルプロセッサコアのブロック図であって、その、オンダイ相互接続ネットワーク１１０２への接続、およびその、レベル２（Ｌ２）キャッシュのローカルサブセット１１０４を伴うブロック図である。一実施形態では、命令デコーダ１１００が、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１１０６が、スカラおよびベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態では（設計を単純にするために）、スカラユニット１１０８およびベクトルユニット１１１０が、独立したレジスタセット（それぞれ、スカラレジスタ１１１２およびベクトルレジスタ１１１４）を用い、それらの間で転送されたデータはメモリに書き込まれ、その後、レベル１（Ｌ１）キャッシュ１１０６から読み戻されるが、本発明の代替実施形態は異なるアプローチを用いてもよい（例えば、単一のレジスタセットを用いるか、またはデータを、書き込みおよび読み戻しせず、２つのレジスタファイルの間で転送することを可能にする通信経路を含む）。
【０１０７】
Ｌ２キャッシュのローカルサブセット１１０４は、プロセッサコア毎に１つずつ、独立したローカルサブセットに分割された大域的Ｌ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュのそれ自身のローカルサブセット１１０４への直接アクセス経路を有する。プロセッサコアによって読み込まれたデータはそのＬ２キャッシュサブセット１１０４内に格納され、他のプロセッサコアがそれら自身のローカルＬ２キャッシュサブセットにアクセスするのと並列に、迅速にアクセスすることができる。プロセッサコアによって書き出されたデータは、必要に応じて、それ自身のＬ２キャッシュサブセット１１０４内に格納され、他のサブセットからフラッシュされる。リングネットワークは共有データのためのコヒーレンシを確実にする。リングネットワークは双方向性であり、プロセッサコア、Ｌ２キャッシュおよび他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にする。各環状データ経路は方向毎に１０１２ビット幅である。
【０１０８】
図１１Ｂは、本発明の諸実施形態による図１１Ａにおけるプロセッサコアの一部の拡大図である。図１１Ｂは、Ｌ１キャッシュ１１０６のＬ１データキャッシュ１１０６Ａ部分、ならびにベクトルユニット１１１０およびベクトルレジスタ１１１４に関するさらなる詳細を含む。具体的には、ベクトルユニット１１１０は、整数、単精度浮動小数、および倍精度浮動小数命令のうちの１つ以上を実行する、１６幅ベクトル処理ユニット（ｖｅｃｔｏｒ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ、ＶＰＵ）（１６幅ＡＬＵ  １１２８参照）である。ＶＰＵは、スウィズルユニット１１２０によるレジスタ入力のスウィズル、数値変換ユニット１１２２Ａ〜Ｂによる数値変換、および複製ユニット１１２４によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ１１２６は、結果として生じるベクトル書き込みの叙述を可能にする。
【０１０９】
統合メモリコントローラおよびグラフィックスを備えるプロセッサ  図１２は、本発明の諸実施形態による、１つを超えるコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよいプロセッサ１２００のブロック図である。図１２における実線の囲み線は、単一のコア１２０２Ａ、システムエージェント１２１０、１つ以上のバスコントローラユニット１２１６の組を備えるプロセッサ１２００を示し、一方、破線の囲み線の任意の追加は、複数のコア１２０２Ａ〜Ｎ、システムエージェントユニット１２１０内の１つ以上の統合メモリコントローラユニット１２１４の組、および専用論理１２０８を備える代替プロセッサ１２００を示す。
【０１１０】
それゆえ、プロセッサ１２００の種々の実装としては、１）専用論理１２０８が統合グラフィックスおよび／または科学（スループット）論理（１つ以上のコアを含んでよい）であって、コア１２０２Ａ〜Ｎが１つ以上の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、その２つの組み合わせ）であるＣＰＵ、２）コア１２０２Ａ〜Ｎが、主としてグラフィックスおよび／または科学（スループット）向けの多数の専用コアであるコプロセッサ、ならびに３）コア１２０２Ａ〜Ｎが多数の汎用インオーダコアである、コプロセッサが挙げられ得る。それゆえ、プロセッサ１２００は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、ハイスループットメニーインテグレーテッドコア（ｈｉｇｈ−ｔｈｒｏｕｇｈｐｕｔ  ｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ、ＭＩＣ）コプロセッサ（３０個以上のコアを含む）、組み込みプロセッサ等の汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは１つ以上のチップ上に実装されてよい。プロセッサ１２００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等、多数の処理技術の任意のものを用いた１つ以上の基板の一部であってよく、および／またはその上に実装されてよい。
【０１１１】
メモリ階層は、コア内部の１つ以上のレベルのキャッシュ、１つ以上の共有キャッシュユニット１２０６の組、および一組の統合メモリコントローラユニット１２１４と結合される外部メモリ（不図示）を含む。一組の共有キャッシュユニット１２０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他のレベルのキャッシュ等の、１つ以上の中間レベルキャッシュ、ラストレベルキャッシュ（ｌａｓｔ  ｌｅｖｅｌ  ｃａｃｈｅ、ＬＬＣ）、および／またはこれらの組み合わせを含んでよい。一実施形態では、環状ベースの相互接続ユニット１２１２が、統合グラフィックス論理１２０８、一組の共有キャッシュユニット１２０６、およびシステムエージェントユニット１２１０／統合メモリコントローラユニット１２１４を相互接続するが、代替実施形態は、このようなユニットを相互接続する周知の技術をいくつ用いてもよい。一実施形態では、１つ以上のキャッシュユニット１２０６とコア１２０２−Ａ〜Ｎとの間においてコヒーレンシが維持される。
【０１１２】
実施形態によっては、コア１２０２Ａ〜Ｎのうちの１つ以上はマルチスレッドの能力を有する。システムエージェント１２１０は、コア１２０２Ａ〜Ｎを調整および操作するそれらの構成要素を含む。システムエージェントユニット１２１０は、例えば、出力調整装置（ｐｏｗｅｒ  ｃｏｎｔｒｏｌ  ｕｎｉｔ、ＰＣＵ）および表示ユニットを含んでよい。ＰＣＵは、コア１２０２Ａ〜Ｎおよび統合グラフィックス論理１２０８の電力状態の調整に必要な論理および構成要素であるか、またはそれらを含んでよい。表示ユニットは、１つ以上の外部接続ディスプレイを駆動するためのものである。
【０１１３】
コア１２０２Ａ〜Ｎはアーキテクチャ命令セットに関して同種または異種であってよい。すなわち、コア１２０２Ａ〜Ｎのうちの２つ以上は実行同じ命令セットの能力を有してよく、一方、他のものはその命令セットのサブセットのみまたは異なる命令セットを実行する能力を有してよい。
【０１１４】
例示的なコンピュータアーキテクチャ  図１３〜１６は例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ、ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および種々の他の電子デバイス用の当技術分野において周知の他のシステム設計および構成も好適である。概して、本明細書に開示されている通りのプロセッサおよび／または他の実行論理を組み込む能力を有する多様なシステムまたは電子デバイスが一般的に好適である。
【０１１５】
次に図１３を参照すると、図示されているのは、本発明の一実施形態によるシステム１３００のブロック図である。システム１３００は、コントローラハブ１３２０と結合される、１つ以上のプロセッサ１３１０、１３１５を含んでよい。一実施形態では、コントローラハブ１３２０は、グラフィックスメモリコントローラハブ（ｇｒａｐｈｉｃｓ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ  ｈｕｂ、ＧＭＣＨ）１３９０および入力／出力ハブ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｈｕｂ、ＩＯＨ）１３５０（独立したチップ上にあってよい）を含む。ＧＭＣＨ  １３９０は、メモリ１３４０およびコプロセッサ１３４５が結合されるメモリコントローラおよびグラフィックスコントローラを含む。ＩＯＨ  １３５０が入力／出力（Ｉ／Ｏ）デバイス１３６０をＧＭＣＨ  １３９０に結合する。代替的に、メモリコントローラおよびグラフィックスコントローラの一方または両方は（本明細書に記載されているように）プロセッサ内部に統合され、メモリ１３４０およびコプロセッサ１３４５は、プロセッサ１３１０と、ＩＯＨ  １３５０を備える単一のチップ内のコントローラハブ１３２０とに直接結合される。
【０１１６】
図１３では、追加プロセッサ１３１５の任意追加性が破線で表されている。各プロセッサ１３１０、１３１５は、本明細書に記載されている処理コアのうちの１つ以上を含んでよく、プロセッサ１２００をいくらか変形したものであってよい。
【０１１７】
メモリ１３４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ｐｈａｓｅ  ｃｈａｎｇｅ  ｍｅｍｏｒｙ、ＰＣＭ）、またはその２つの組み合わせであってよい。少なくとも１つの実施形態のために、コントローラハブ１３２０は、フロントサイドバス（ｆｒｏｎｔｓｉｄｅ  ｂｕｓ、ＦＳＢ）等のマルチドロップバス、クイックパスインターコネクト（ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ、ＱＰＩ）等のポイントツーポイントインタフェース、または同様の接続１３９５を介してプロセッサ１３１０、１３１５と通信する。
【０１１８】
一実施形態では、コプロセッサ１３４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサである。一実施形態では、コントローラハブ１３２０は統合グラフィックスアクセラレータを含んでよい。
【０１１９】
物理リソース１３１０、１３１５の間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性等を含む様々な利点のメトリクスに関して、種々の相違がある。
【０１２０】
一実施形態では、プロセッサ１３１０は、一般型のデータ処理演算を制御する命令を実行する。命令内にはコプロセッサ命令が組み込まれていてよい。プロセッサ１３１０は、これらのコプロセッサ命令を、付加コプロセッサ１３４５によって実行すべき型のものであると認識する。それに応じて、プロセッサ１３１０は、コプロセッサバスまたは他の相互接続部上において、これらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサ１３４５に発行する。コプロセッサ１３４５は、受信されたコプロセッサ命令を受け付け、実行する。
【０１２１】
次に図１４を参照すると、図示されているのは、本発明の一実施形態による第１のより具体的な例示的システム１４００のブロック図である。図１４に示されているように、多重プロセッサシステム１４００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１４５０を介して結合される第１プロセッサ１４７０および第２プロセッサ１４８０を含む。プロセッサ１４７０および１４８０の各々はプロセッサ１２００をいくらか変形したものであってよい。本発明の一実施形態では、プロセッサ１４７０および１４８０はそれぞれプロセッサ１３１０および１３１５であり、一方、コプロセッサ１４３８はコプロセッサ１３４５である。別の実施形態では、プロセッサ１４７０および１４８０はそれぞれプロセッサ１３１０およびコプロセッサ１３４５である。
【０１２２】
プロセッサ１４７０および１４８０は、統合メモリコントローラ（ＩＭＣ）ユニット１４７２および１４８２をそれぞれ含んで示されている。プロセッサ１４７０はそのバスコントローラユニットの一部としてポイントツーポイント（ｐｏｉｎｔ−ｔｏ−ｐｏｉｎｔ、Ｐ−Ｐ）インタフェース１４７６および１４７８も含み、同様に、第２プロセッサ１４８０はＰ−Ｐインタフェース１４８６および１４８８を含む。プロセッサ１４７０、１４８０は、Ｐ−Ｐインタフェース回路１４７８、１４８８を用い、ポイントツーポイント（Ｐ−Ｐ）インタフェース１４５０を介して情報を交換してよい。図１４に示されるように、ＩＭＣ  １４７２および１４８２はプロセッサをそれぞれのメモリ、すなわちメモリ１４３２およびメモリ１４３４、に結合する。それぞれのメモリは、それぞれのプロセッサにローカルに付加された主メモリの一部であってよい。
【０１２３】
プロセッサ１４７０、１４８０は各々、ポイントツーポイントインタフェース回路１４７６、１４９４、１４８６、１４９８を用い、個々のＰ−Ｐインタフェース１４５２、１４５４を介してチップセット１４９０と情報を交換してよい。チップセット１４９０は、高性能インタフェース１４３９を介してコプロセッサ１４３８と情報を任意選択で交換してよい。一実施形態では、コプロセッサ１４３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサである。
【０１２４】
共有キャッシュ（不図示）がどちらかのプロセッサ内に含まれるか、または両プロセッサの外部に、Ｐ−Ｐ相互接続を介してプロセッサとなお接続されて含まれてよく、それにより、プロセッサが低電力モードに置かれると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてよい。
【０１２５】
チップセット１４９０はインタフェース１４９６を介して第１バス１４１６と結合されてよい。一実施形態では、第１バス１４１６は、周辺装置相互接続（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ、ＰＣＩ）バス、あるいはＰＣＩエクスプレスバスまたは別の第３世代Ｉ／Ｏ相互接続バス等のバスであってよい。ただし、本発明の範囲はそのように限定されるわけではない。
【０１２６】
図１４に示されるように、種々のＩ／Ｏデバイス１４１４が、第１バス１４１６を第２バス１４２０に結合するバスブリッジ１４１８とともに、第１バス１４１６に結合されてよい。一実施形態では、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、あるいは任意の他のプロセッサ等の、１つ以上の追加プロセッサ１４１５が第１バス１４１６に結合される。一実施形態では、第２バス１４２０はローピンカウント（ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ、ＬＰＣ）バスであってよい。一実施形態では、例えば、キーボードおよび／またはマウス１４２２、通信デバイス１４２７、ならびに命令／コードおよびデータ１４３０を含んでよいディスクドライブまたは他の大容量記憶デバイス等の記憶ユニット１４２８を含む、種々のデバイスが第２バス１４２０に結合されてよい。さらに、オーディオＩ／Ｏ  １４２４が第２バス１４２０に結合されてよい。他のアーキテクチャがあり得ることに留意されたい。例えば、図１４のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスまたは他のこのようなアーキテクチャを実装してよい。
【０１２７】
次に図１５を参照すると、図示されているのは、本発明の一実施形態による第２のより具体的な例示的システム１５００のブロック図である。図１４および１５における同様の要素は同様の参照符合を有し、図１４の一部の態様は、図１５の他の態様を不明瞭にすることを回避するために、図１５から省かれている。
【０１２８】
図１５は、プロセッサ１４７０、１４８０は統合メモリおよびＩ／Ｏ制御論理（ｃｏｎｔｒｏｌ  ｌｏｇｉｃ、「ＣＬ」）１４７２および１４８２をそれぞれ含んでよいことを示している。それゆえ、ＣＬ  １４７２、１４８２は統合メモリコントローラユニットを含み、Ｉ／Ｏ制御論理を含む。図１５は、メモリ１４３２、１４３４がＣＬ  １４７２、１４８２と結合されることだけではなく、Ｉ／Ｏデバイス１５１４が制御論理１４７２、１４８２と結合されることも示している。レガシーＩ／Ｏデバイス１５１５がチップセット１４９０と結合されている。
【０１２９】
次に図１６を参照すると、示されているのは、本発明の一実施形態によるＳｏＣ  １６００のブロック図である。図１２における同様の要素は同様の参照符合を有する。さらに、破線の囲み線は、より高度のＳｏＣ上の任意追加の特徴である。図１６では、相互接続ユニット１６０２は、１つ以上のコア１２０２Ａ〜Ｎの組、および共有キャッシュユニット１２０６を含むアプリケーションプロセッサ１６１０、システムエージェントユニット１２１０、バスコントローラユニット１２１６、統合メモリコントローラユニット１２１４、統合グラフィックス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含んでよい１つ以上のコプロセッサ１６２０の組み、スタティックランダムアクセスメモリ（ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ、ＳＲＡＭ）ユニット１６３０、直接メモリアクセス（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ、ＤＭＡ）ユニット１６３２、および１つ以上の外部ディスプレイと結合するための表示ユニット１６４０と結合されている。一実施形態では、コプロセッサ１６２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサを含む。
【０１３０】
本明細書に開示されている機構の諸実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはこのような実装アプローチの組み合わせの形で実装されてよい。本発明の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性および不揮発性メモリおよび／または記憶要素を含む）、少なくとも１つの入力デバイス、ならびに少なくとも１つの出力デバイスを備えるプログラム可能システム上で実行するコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０１３１】
本明細書に記載されている機能を遂行し、出力情報を生成するための命令を入力するために、図１４に示されているコード１４３０等のプログラムコードが適用されてよい。出力情報は周知の方法で１つ以上の出力デバイスに適用されてよい。この用途のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ、ＡＳＩＣ）、またはマイクロプロセッサ等の、プロセッサを有する任意のシステムを含む。
【０１３２】
プログラムコードは、処理システムと通信するために、高レベル手続き形またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、所望の場合には、アセンブリまたは機械言語で実装されてもよい。実際には、本明細書に記載されている機構はいかなる特定のプログラミング言語にも範囲を限定されない。いずれにせよ、言語はコンパイラ型またはインタープリタ型言語であってよい。
【０１３３】
少なくとも１つの実施形態の１つ以上の態様は、機械によって読み込まれると、本明細書に記載されている技術を遂行するための論理を機械に作らせる、プロセッサ内の種々の論理を代表する機械可読媒体上に格納された代表命令によって実装されてよい。「ＩＰコア」としても知られるこのような代表は、有形の機械可読媒体上に格納され、論理またはプロセッサを実際に作る製作機械内にロードするために種々の顧客または製造工場に供給されてよい。
【０１３４】
このような機械可読記憶媒体としては、限定されるわけではないが、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリーメモリ（ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ、ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅｗｒｉｔａｂｌｅ、ＣＤ−ＲＷ）、および磁気光ディスクを含む任意の他の種類のディスク、リードオンリーメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラム可能リードオンリーメモリ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ、ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ（ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ、ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）等の半導体デバイス、磁気または光カード、あるいは電子命令の格納に適した任意の他の種類の媒体を含む記憶媒体等の、機械またはデバイスによって製造または形成される非一時的な有形の物品の機構が挙げられる。
【０１３５】
したがって、本発明の諸実施形態は、本明細書に記載されている構造、回路、装置、プロセッサおよび／またはシステムの特徴を定義する、ハードウェア記述言語（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ、ＨＤＬ）等の、命令を包含するかまたは設計データを包含する非一時的な有形の機械可読媒体も含む。このような実施形態はプログラム製品と呼ばれてもよい。
【０１３６】
エミュレーション（バイナリトランスレーション、コードモーフィング等を含む）  場合によっては、命令をソース命令セットからターゲット命令セットに変換するために、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアによって処理されるべき１つ以上の他の命令に翻訳するか（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて）、モーフィングするか、エミュレートするか、または別の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせの形で実装されてよい。命令コンバータは、プロセッサ上、プロセッサ外、あるいは一部プロセッサ上および一部プロセッサ外にあってよい。
【０１３７】
図１７は、本発明の諸実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示の実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェア、あるいはこれらの種々の組み合わせの形で実装されてもよい。図１７は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１７１６によってネイティブに実行され得るｘ８６バイナリコード１７０６を生成するために、ハイレベル言語１７０２のプログラムが、ｘ８６コンパイラ１７０４を用いてコンパイルされてよいことを示している。少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１７１６は、少なくとも１つのｘ８６命令セットコアを備えるインテルプロセッサと実質的に同じ結果を達成するために、（１）インテルｘ８６命令セットコアの命令セットの相当の部分、あるいは（２）少なくとも１つのｘ８６命令セットコアを備えるインテルプロセッサ上で走ることを目的としたアプリケーションまたは他のソフトウェアの目的コードバージョンを互換的に実行するかまたは別の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを備えるインテルプロセッサと実質的に同じ機能を遂行することができる任意のプロセッサを表す。ｘ８６コンパイラ１７０４は、追加の連係処理を用いて、または用いずに、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１７１６上で実行することができるｘ８６バイナリコード１７０６（例えば、目的コード）を生成するコンパイラを表す。同様に、図１７は、少なくとも１つのｘ８６命令セットコアを備えないプロセッサ１７１４（例えば、サニーベール、ＣＡのミップステクノロジーズのＭＩＰＳ命令セットを実行し、かつ／またはサニーベール、ＣＡのＡＲＭホールディングスのＡＲＭ命令セットを実行するコアを備えるプロセッサ）によってネイティブに実行され得る代替命令セットバイナリコード１７１０を生成するために、ハイレベル言語１７０２のプログラムが、代替の命令セットコンパイラ１７０８を用いてコンパイルされてよいことを示している。命令コンバータ１７１２は、ｘ８６バイナリコード１７０６を、ｘ８６命令セットコアを備えないプロセッサ１７１４によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは代替命令セットバイナリコード１７１０と同じにはなりにくい。なぜなら、この能力を有する命令コンバータは製作が難しいからである。しかし、変換されたコードは一般的な演算を果たし、代替命令セットからの命令で構成される。それゆえ、命令コンバータ１７１２は、エミュレーション、シミュレーションまたは任意の他の処理を通じて、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがｘ８６バイナリコード１７０６を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【０１３８】
他の実施形態では、ライブラリ自身が、ソフトウェアモジュールにふさわしいライブラリ部分のセットを選択するための論理を含んでよい。例えば、ライブラリは、ソフトウェアモジュールは所与のオペコードのためにいかなる意味を有するのかを判定するために、プロセッサ特徴ステータスレジスタを読み出してよく、その後、その部分を選択し、提供してよい。
【０１３９】
図１、４、および５のいずれかについて説明されている構成要素、特徴、および細部は、図２および３のいずれかにおいて任意選択で用いられてもよい。さらに、いずれかの装置について本明細書に記載されている構成要素、特徴、および細部は、諸実施形態において、こうした装置によって、および／またはそれを用いて遂行され得る、本明細書に記載されているいずれかの方法に同様に任意選択的に用いられてもよい。
【０１４０】
例示的な実施形態  以下の実施例はさらなる実施形態に関する。各実施例における細目は１つ以上の実施形態のいずれかにおいて用いられ得る。
【０１４１】
実施例１は、第１の命令を受信し、第１の命令はエミュレートされるべきであると判定するためのデコード論理を含むプロセッサである。プロセッサは、デコード論理と結合されるエミュレーションモード認識デコード後命令プロセッサ論理も含む。エミュレーションモード認識デコード後命令プロセッサ論理は、エミュレーションモードの時には、第１の命令をエミュレートするために用いられる１つ以上の命令のセットの命令からデコードされた１つ以上の制御信号を、エミュレーションモードでない時とは異なるように処理する。
【０１４２】
実施例２は、実施例１に記載のプロセッサを含み、任意選択で、第１の命令の方が、より多くの演算が遂行されることを伴うという点で、第１の命令の方がセットの各命令よりも複雑である。
【０１４３】
実施例３は、実施例１または２に記載のプロセッサを含み、任意選択で、プロセッサが、命令セットのいずれの命令を実施するにもマイクロコードを用いない。
【０１４４】
実施例４は、実施例１〜３のいずれかに記載のプロセッサを含み、任意選択で、１つ以上の命令のセットの各命令が、第１の命令と同じ命令セットのものである。
【０１４５】
実施例５は、実施例１〜４のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識デコード後命令プロセッサ論理が、１つ以上の制御信号を処理する間に生じる例外条件をエミュレーション論理に報告するためのエミュレーションモード認識例外条件ハンドラ論理を含む。
【０１４６】
実施例６は、実施例１〜５のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識例外条件ハンドラ論理が第１の命令のアドレスをスタック内に格納する。
【０１４７】
実施例７、実施例１〜６のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識例外条件ハンドラ論理が、例外条件の指示、および例外条件のためのエラーコードを、エミュレーション論理と結合された１つ以上のレジスタ内に格納する。
【０１４８】
実施例８は、実施例１〜７のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識例外条件ハンドラ論理が、例外条件に応答して制御を例外条件ハンドラに直接移行することを回避し、エミュレーション論理の１つ以上の命令が制御を例外条件ハンドラに移行する。
【０１４９】
実施例９は、実施例１〜８のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識デコード後命令プロセッサ論理が、エミュレーションモードの時には、１つ以上の制御信号によるリソースおよび情報の少なくとも１つへのアクセスを、エミュレーションモードでない時とは異なるように制御するためのエミュレーションモード認識アクセス制御論理を含む。
【０１５０】
実施例１０は、実施例１〜９のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識アクセス制御論理が、エミュレーションモードの時にはリソースおよび情報の当該少なくとも１つへのアクセスを許可し、エミュレーションモードでない時にはリソースおよび情報の当該少なくとも１つへのアクセスを阻止する。
【０１５１】
実施例１１は、実施例１〜１０のいずれかに記載のプロセッサを含み、任意選択で、リソースおよび情報の少なくとも１つが、セキュリティ論理、安全な情報、暗号化論理、解読論理、乱数発生器論理、オペレーティングシステムによるアクセスのために確保される論理、オペレーティングシステムによるアクセスのために確保されるメモリの部分、およびオペレーティングシステムによるアクセスのために確保される情報のうちの少なくとも１つを含む。
【０１５２】
実施例１２は、実施例１〜１１のいずれかに記載のプロセッサを含み、任意選択で、リソースおよび情報の少なくとも１つが、別の論理プロセッサおよび別の物理プロセッサの１つの内部のリソースおよび情報の少なくとも１つを含む。
【０１５３】
実施例１３は、実施例１〜１２のいずれかに記載のプロセッサを含み、任意選択で、１つ以上の命令のセットが少なくとも３つの命令を含む。
【０１５４】
実施例１４は、第１の命令を受信することと、第１の命令をエミュレートすると決定することと、を含むプロセッサ内の方法である。本方法は、第１の命令をエミュレートするために用いられるべき１つ以上の命令のセットを受信する段階も含む。本方法は、エミュレーションモードの時には、セットの命令から派生した１つ以上の制御信号を、エミュレーションモードでない時とは異なるように処理する段階も含む。
【０１５５】
実施例１５は、実施例１４に記載の方法を含み、任意選択で、第１の命令を受信する段階が、１つ以上の命令のセットの各命令よりも複雑である第１の命令を受信する段階を含む。
【０１５６】
実施例１６は、実施例１４または１５に記載の方法を含み、任意選択で、１つ以上の命令のセットを受信する段階が、各々、第１の命令と同じ命令セットのものである１つ以上の命令を受信する段階を含む。
【０１５７】
実施例１７は、実施例１４〜１６のいずれかに記載の方法を含み、任意選択で、処理が、１つ以上の制御信号を処理している間に生じる例外条件をエミュレーション論理に報告する段階を含む。さらに、任意選択で、制御を例外条件ハンドラに移行するためのエミュレーション論理の１つ以上の命令を実行する段階を含む。
【０１５８】
実施例１８は、実施例１５〜１７のいずれかに記載の方法を含み、任意選択で、報告が、例外条件の指示を１つ以上のレジスタ内に格納する段階を含む。さらに、任意選択で、第１の命令のアドレスをスタック内に格納する段階を含む。
【０１５９】
実施例１９は、実施例１５〜１８のいずれかに記載の方法を含み、任意選択で、処理が、エミュレーションモードの時には、１つ以上の制御信号によるリソースおよび情報の少なくとも１つへのアクセスを、エミュレーションモードでない時とは異なるように制御する段階を含む。
【０１６０】
実施例２０は、実施例１５〜１９のいずれかに記載の方法を含み、任意選択で、アクセスを異なるように制御する段階が、エミュレーションモードの時にはリソースおよび情報の当該少なくとも１つへのアクセスを許可する段階を含む。さらに、任意選択で、エミュレーションモードでない時にはリソースおよび情報の当該少なくとも１つへのアクセスを阻止する段階を含む。
【０１６１】
実施例２１は、相互接続部と、この相互接続部と結合されるプロセッサと、を含む命令処理システムである。プロセッサは、第１の命令を受信し、第１の命令はエミュレートされるべきであると判定するためのデコード論理を含む。プロセッサは、デコード論理と結合されるエミュレーションモード認識デコード後命令プロセッサ論理も含む。エミュレーションモード認識デコード後命令プロセッサ論理は、エミュレーションモードの時には、第１の命令をエミュレートするために用いられる１つ以上の命令のセットの命令からデコードされた１つ以上の制御信号を、エミュレーションモードでない時とは異なるように処理する。システムは、相互接続部と結合されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）も含む。
【０１６２】
実施例２２は、実施例２１のシステムを含み、任意選択で、エミュレーションモード認識デコード後命令プロセッサ論理が、１つ以上の制御信号を処理する間に生じる例外条件をエミュレーション論理に報告するためのエミュレーションモード認識例外条件ハンドラ論理を含む。
【０１６３】
実施例１は、所与のオペコードを有する第１の命令を受信するためのデコーダを含むプロセッサである。デコーダは、所与のオペコードは第１の意味を有するのか、それとも第２の意味を有するのかをチェックするためのチェック論理を含む。デコーダは、所与のオペコードが第１の意味を有する場合には、第１の命令をデコードし、１つ以上の対応する制御信号を出力するためのデコード論理も含む。デコーダは、所与のオペコードが第２の意味を有する場合には、第１の命令のエミュレーションを誘起するためのエミュレーション誘起論理も含む。
【０１６４】
実施例２は、実施例１に記載のプロセッサを含み、任意選択で、第２の意味は第１の意味よりも古い。
【０１６５】
実施例３は、実施例１または２に記載のプロセッサを含み、任意選択で、第２の意味が、非推奨となる過程にあるオペコード定義を含む。
【０１６６】
実施例４は、実施例１〜３のいずれかに記載のプロセッサを含み、任意選択で、所与のオペコードは第１の意味を有するのか、それとも第２の意味を有するのかについての指示を格納するための、デコーダと結合される記憶位置をさらに含み、チェック論理が、指示を判定するために記憶位置をチェックする。
【０１６７】
実施例５は、実施例１〜４のいずれかに記載のプロセッサを含み、任意選択で、記憶位置がプログラムローダモジュールにとって、このプログラムローダモジュールが指示を記憶位置内に格納することを可能にするべく、アクセス可能である。
【０１６８】
実施例６は、実施例１〜５のいずれかに記載のプロセッサを含み、任意選択で、記憶位置からの指示をプロセッサ特徴レジスタに格納するための、記憶位置と結合される論理をさらに含み、プロセッサ特徴レジスタは第１の命令の命令セットのプロセッサ特徴識別命令によって可読である。
【０１６９】
実施例７は、実施例１〜６のいずれかに記載のプロセッサを含み、任意選択で、複数の指示を格納するための、デコーダと結合される複数の記憶位置をさらに含み、複数の指示の各々は複数のオペコードのうちの異なるオペコードに対応し、複数の指示の各々は、各それぞれのオペコードは第１の意味を有するのか、それとも第２の意味を有するのかを指示する。
【０１７０】
実施例８は、実施例１〜７のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションを誘起するための論理が、エミュレーションモードを設定するための論理を含む。
【０１７１】
実施例９は、実施例１〜８のいずれかに記載のプロセッサを含み、任意選択で、デコーダと結合されるエミュレーション論理をさらに含み、このエミュレーション論理は、所与のオペコードが第２の意味を有する場合には、エミュレーション誘起論理がエミュレーションを誘起するのに応答して、第１の命令をエミュレートするための１つ以上の命令のセットをデコーダに提供する。
【０１７２】
実施例１０は、実施例１〜９のいずれかに記載のプロセッサを含み、任意選択で、セットの各命令が、第１の命令と同じ命令セットのものである。
【０１７３】
実施例１１は、実施例１〜１０のいずれかに記載のプロセッサを含み、任意選択で、プロセッサが、命令セットのいずれの命令を実施するにもマイクロコードを用いない。
【０１７４】
実施例１２は、実施例１〜１１のいずれかに記載のプロセッサを含み、任意選択で、特権レベル論理およびリングレベル論理の一方がオペレーティングシステムモードを指示する時には、デコーダに、所与のオペコードのための非推奨の意味の代わりに新しい意味を強制的に使わせる論理をさらに含む。
【０１７５】
実施例１３は、所与のオペコードを有する第１の命令を受信する段階と、所与のオペコードは第１の意味の代わりに第２の意味を有すると判定する段階とを含むプロセッサ内の方法である。本方法は、所与のオペコードは第２の意味を有するとの判定に応答して第１の命令をエミュレートすると決定する段階も含む。
【０１７６】
実施例１４は、実施例１３に記載の方法を含み、任意選択で、判定が、所与のオペコードは、第１の意味よりも古い第２の意味を有すると判定する段階を含み、第２の意味は非推奨となる過程にある。
【０１７７】
実施例１５は、実施例１３または１４に記載の方法を含み、任意選択で、判定する段階が、所与のオペコードは第２の意味を有するとの指示を記憶位置から読み出す段階を含む。
【０１７８】
実施例１６は、実施例１３〜１５のいずれかに記載の方法を含み、任意選択で、所与のオペコードは第２の意味を有するとの指示を、プロセッサの命令セットのプロセッサ特徴識別命令によって可読であるプロセッサ特徴レジスタ内に格納する段階をさらに含む。
【０１７９】
実施例１７は、実施例１３〜１６のいずれかに記載の方法を含み、任意選択で、所与のオペコードが第２の意味を有する場合には、第１の命令をエミュレートするために用いられる１つ以上の命令のセットをデコードする段階を含む第１の命令をエミュレートする段階をさらに含む。
【０１８０】
実施例１８は、実施例１３〜１７のいずれかに記載の方法を含み、任意選択で、命令のセットをデコードする段階が、第１の命令と同じ命令セットのものである１つ以上の命令をデコードする段階を含む。
【０１８１】
実施例１９は、実施例１〜１８のいずれかに記載の方法を含み、任意選択で、命令セットのいずれの命令を実施するにもマイクロコードを用いないプロセッサ内で遂行される。
【０１８２】
実施例２０は、機械によって実行されると、機械に演算を遂行させる命令を格納する非一時的機械可読記憶媒体を含む製造品である。演算は、所与のオペコードを有する第１の命令は、ソフトウェアモジュールからプロセッサによって実行される時に、ソフトウェアモジュールのメタデータを調べることによって、第１の意味の代わりに第２の意味を有するべきであると判定する段階を含む。演算は、所与のオペコードを有する第１の命令は第２の意味を有するべきであるとの指示をプロセッサの状態内に格納する段階も含む。
【０１８３】
実施例２１は、実施例２０に記載の製造品を含み、任意選択で、機械可読記憶媒体が、機械によって実行されると、機械に、所与のオペコードの第２の意味を用いるソフトウェアライブラリの部分を、所与のオペコードの第１の意味を用いるソフトウェアライブラリの別の部分の代わりに選択する段階と、第２の意味は非推奨の意味である、ソフトウェアライブラリの選択部分をソフトウェアモジュールに提供する段階とを含む演算を遂行させる命令をさらに格納する。
【０１８４】
実施例２２は、実施例２０または２１に記載の製造品を含み、任意選択で、機械可読記憶媒体が、機械によって実行されると、機械に、ソフトウェアモジュールの古さに基づいて所与のオペコードは第２の意味を有すると判定する段階を含む演算を遂行させる命令をさらに格納する。
【０１８５】
実施例２３は、実施例２０〜２２のいずれかに記載の製造品を含み、任意選択で、機械可読記憶媒体が、機械によって実行されると、機械に、オブジェクトモジュールフォーマット内のフラグを調べ、フラグ内の指示をプロセッサのレジスタ内に格納する段階を含む演算を遂行させる命令をさらに格納する。
【０１８６】
実施例２４は、相互接続部と、この相互接続部と結合されるプロセッサと、を含む命令処理システムである。プロセッサは、所与のオペコードを有する第１の命令を受信する。プロセッサは、所与のオペコードは第１の意味を有するのか、それとも第２の意味を有するのかをチェックするためのチェック論理を含む。プロセッサは、所与のオペコードが第１の意味を有する場合には、第１の命令をデコードし、１つ以上の対応する制御信号を出力するためのデコード論理を含む。プロセッサは、所与のオペコードが第２の意味を有する場合には、第１の命令のエミュレーションを誘起するためのエミュレーション誘起論理を含む。システムは、相互接続部と結合されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）も含む。
【０１８７】
実施例２５は実施例２４の主題を含み、任意選択で、所与のオペコードが第２の意味を有する場合には、第１の命令をエミュレートするために第１の命令と同じ命令セットの１つ以上の命令のセットをデコーダに提供するためのエミュレーション論理をさらに含む。
【０１８８】
実施例２６は、実施例１３〜１９のいずれか１つの方法を遂行するための装置を含む。
【０１８９】
実施例２７は、実施例１３〜１９のいずれか１つの方法を遂行するための手段を含む装置を含む。
【０１９０】
実施例２８は、実質的に本明細書に記載されている通りの方法を遂行するための装置を含む。
【０１９１】
実施例２９は、本明細書に記載されている通りの方法を遂行するための手段を含む装置を含む。
【０１９２】
明細書および請求項では、用語「結合される（ｃｏｕｐｌｅｄ）」および「接続される（ｃｏｎｎｅｃｔｅｄ）」がそれらの派生語とともに使用されている場合がある。これらの用語は互いに同義語として意図されているのではないことを理解されたい。むしろ、特定の実施形態では、「接続される」は、２つ以上の要素が互いに物理的または電気的に直接接触していることを指示するために使用されていてよい。「結合される」は、２つ以上の要素が物理的または電気的に接触していることを意味してよい。しかし、「結合される」は、２つ以上の要素が互いに直接接触してはいないが、それでもなお互いに協働または相互作用することを意味する場合もある。例えば、第１構成要素と第２構成要素とが介在構成要素を通じて互いに結合されてよい。図では、双方向接続および結合を示すために双方向矢印が用いられている。
【０１９３】
明細書および請求項では、用語「論理」が使用されている場合がある。本明細書で使用するとき、論理は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせを含んでよい。論理の例としては、集積回路機構、特定用途向け集積回路、アナログ回路、デジタル回路、プログラム化論理デバイス、命令を含むメモリデバイス、等が挙げられる。実施形態によっては、ハードウェア論理は、場合によっては他の回路機構構成要素を伴うトランジスタおよび／またはゲートを含んでよい。
【０１９４】
用語「および／または（ａｎｄ／ｏｒ）」が使用されている場合がある。本明細書で使用するとき、用語「および／または」は、一方または他方あるいは両方を意味する（例えば、Ａおよび／またはＢは、ＡまたはＢあるいはＡおよびＢの両方を意味する）。
【０１９５】
上述の記載では、説明の目的で、本発明の諸実施形態の完全な理解を提供するために数多くの特定の細部が説明された。しかし、１つ以上の他の実施形態は、これらの特定の細部の一部を用いずに実施されてもよいことは当業者には明らかであろう。上述の特定の実施形態は、本発明を限定するために提供されているのではなく、実施形態例を通してそれを説明するために提供されている。本発明の範囲は、具体例によって定まるのではなく、添付の請求項によってのみ定まる。他の例では、説明の理解を不明瞭にすることを回避するために、周知の回路、構造、デバイス、および演算はブロック図の形式で、または細部を有せずに示されている。
【０１９６】
適切と考えられる場合には、別に指定されていない限り、または明白に分かるようでない限り、同様または同じ特性を任意選択的に有し得る対応または類似要素を指示するために、参照符合、または参照符合の末端部は図の間で繰り返されている。複数の構成要素が記載されている場合、一般的に、それらは単一の構成要素内に組み込まれてもよい。他の場合には、単一の構成要素が記載されている場合、一般的に、それは複数の構成要素に分割されてもよい。
【０１９７】
種々の演算および方法が説明されている。フロー図では、方法の一部は比較的基本的な形で記載されているが、演算が方法に任意に追加されてもよく、および／またはそれらから削除されてもよい。加えて、フロー図は実施形態例による演算の特定の順序を示しているが、その特定の順序は例示的なものである。代替実施形態は、必要に応じて、異なる順序で演算を遂行する、一部の演算を組み合わせる、一部の演算を重複させるなどしてよい。
【０１９８】
一部の実施形態は、機械可読媒体を含む製造品（例えば、コンピュータプログラム製品）を含む。媒体は、機械によって読み取り可能である形式で情報を提供する、例えば格納する、機構を含んでよい。機械可読媒体は、機械によって実行されると、および／または実行された時に、本明細書に開示されている１つ以上の演算、方法、または技術を機械に遂行させ、ならびに／あるいはそれらを遂行する機械をもたらす１つ以上の命令を提供するか、またはそれらをその上に格納させてよい。好適な機械の例としては、プロセッサ、命令処理装置、デジタル論理回路、集積回路等が挙げられるが、これらに限定されない。好適な機械のさらに別の例としては、このようなプロセッサ、命令処理装置、デジタル論理回路、または集積回路を組み込むコンピューティングデバイスおよび他の電子デバイスが挙げられる。このようなコンピューティングデバイスおよび電子デバイスの例としては、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータおよびスイッチ）、携帯インターネットデバイス（Ｍｏｂｉｌｅ  Ｉｎｔｅｒｎｅｔ  ｄｅｖｉｃｅ、ＭＩＤ）、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラが挙げられるが、これらに限定されない。
【０１９９】
実施形態によっては、機械可読媒体は有形かつ／または非一時的機械可読記憶媒体を含んでよい。例えば、有形かつ／または非一時的機械可読記憶媒体としては、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光学式データ記憶デバイス、ＣＤ−ＲＯＭ、磁気ディスク、磁気光ディスク、リードオンリーメモリ（ＲＯＭ）、プログラム可能ＲＯＭ（ＰＲＯＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス、または同様のものが挙げられる。非一時的機械可読記憶媒体は一時的な伝播信号からなるものではない。
【０２００】
本明細書全体にわたる、例えば、「一実施形態」、「一実施形態」、または「１つ以上の実施形態」への言及は、特定の特徴が本発明の実施に含まれ得ることを意味することも理解されたい。同様に、本明細書では、本開示を合理化し、種々の本発明の態様を理解するのに役立つために、種々の特徴が時として単一の実施形態、図、またはその説明内にグループ化してまとめられていることを理解されたい。しかし、この開示方法は、本発明が各請求項において明示的に列挙されているよりも多くの特徴を必要とするという意図を反映するものと解釈されない。むしろ、添付の特許請求の範囲が反映している通り、本発明の態様は、単一の開示実施形態の全ての特徴よりも少なくてもよい。それゆえ、発明を実施するための形態に続く特許請求の範囲は、本明細書において、この発明を実施するための形態に明示的に組み込まれており、各請求項は本発明の別個の実施形態として自立している。
【図１】
2014182813.tif 000003
【図２】
2014182813.tif 000004
【図３】
2014182813.tif 000005
【図４】
2014182813.tif 000006
【図５】
2014182813.tif 000007
【図６】
2014182813.tif 000008
【図７】
2014182813.tif 000009
【図８】
2014182813.tif 000010
【図９】
2014182813.tif 000011
【図１０Ａ】
2014182813.tif 000012
【図１０Ｂ】
2014182813.tif 000013
【図１１Ａ】
2014182813.tif 000014
【図１１Ｂ】
2014182813.tif 000015
【図１２】
2014182813.tif 000016
【図１３】
2014182813.tif 000017
【図１４】
2014182813.tif 000018
【図１５】
2014182813.tif 000019
【図１６】
2014182813.tif 000020
【図１７】
2014182813.tif 000021
【外国語明細書】
2014182813000001.pdf