本明細書に開示されているのは、命令エミュレーションプロセッサ、方法、およびシステムである。以下の説明では、数多くの特定の細部が記載されている(例えば、特定のエミュレーションモード認識論理、例外条件に対処するためのアプローチ、特権リソースおよび情報の種類、論理実装、マイクロアーキテクチャの細部、演算の順序、論理分割/統合の細部、ハードウェア/ソフトウェア分割の細部、プロセッサ構成、システム構成要素の種類および相互関係等)。しかし、本発明の諸実施形態はこれらの特定の細部を用いずに実施されてもよいことを理解されたい。他の例では、本記載の理解を不明瞭にしないようにするために、周知の回路、構造および技術は詳細に示されていない。
図1はコンピュータシステム100の一実施形態のブロック図である。種々の実施形態において、コンピュータシステムは、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、パーソナルデジタルアシスタント、携帯電話、サーバ、ネットワークデバイス(例えば、ルータまたはスイッチ)、携帯インターネットデバイス(Mobile Internet device、MID)、メディアプレーヤ、スマートテレビ、セットトップボックス、ビデオゲームコントローラ、あるいは他の種類の電子デバイスを表してよい。
コンピュータシステムはプロセッサ101の一実施形態を含む。実施形態によっては、プロセッサは汎用プロセッサであってよい。例えば、プロセッサは、中央処理装置(central processing unit、CPU)として通常用いられている種類の汎用プロセッサであってよい。他の実施形態では、プロセッサは専用プロセッサであってもよい。好適な専用プロセッサの例としては、ほんの数例を挙げると、コプロセッサ、グラフィックスプロセッサ、通信プロセッサ、ネットワークプロセッサ、暗号プロセッサ、組み込みプロセッサ、およびデジタル信号プロセッサ(digital signal processor、DSP)が挙げられるが、これらに限定されない。プロセッサは、種々の複合命令セットコンピューティング(complex instruction set computing、CISC)プロセッサ、種々の縮小命令セットコンピューティング(reduced instruction set computing、RISC)プロセッサ、種々の超長命令語(very long instruction word、VLIW)プロセッサ、これらの種々のハイブリッド、または全く別の種類のプロセッサのいずれのものであってもよい。
コンピュータシステムは、結合機構109によってプロセッサ101と結合されるメモリ110の一実施形態も含む。プロセッサとメモリとを結合するための当技術分野において周知の任意の従来の結合機構が好適である。このような機構の例としては、相互接続部、バス、ハブ、メモリコントローラ、チップセット、チップセット構成要素等、およびこれらの組み合わせが挙げられるが、これらに限定されない。メモリは、同じまたは異なる種類のいずれかの1つ以上のメモリデバイスを含んでよい。諸実施形態に適している1つのよく用いられている種類のメモリは、ダイナミックランダムアクセスメモリ(dynamic random access memory、DRAM)である。だだし、他の種類のメモリ(例えば、フラッシュメモリ)が代替的に用いられてもよい。
メモリ110は、その内部に格納されたソフトウェア111を有してよい。ソフトウェアは、例えば、1つ以上のオペレーティングシステム(operating system、OS)および1つ以上のアプリケーションを含んでよい。動作時には、ソフトウェアの一部がプロセッサ上にロードされ、これをプロセッサ上で走らせてよい。図示のように、プロセッサはプロセッサの命令セットのISA命令102を受信してよい。例えば、命令フェッチユニットがISA命令をフェッチしてよい。ISA命令は、デコードされ、実行されるべくプロセッサに提供されるマクロ命令、アセンブリ言語命令、マシンレベル命令、または他の命令を表してよい。図示のように、実施形態によっては、ISA命令は非エミュレート命令103および1種類以上のエミュレート命令104の両方を含んでよい。
プロセッサはデコード論理105を含む。デコード論理はデコードユニットまたはデコーダと呼ばれてもよい。デコード論理はISA命令102を受信してよい。非エミュレート命令103の場合には、デコード論理は、比較的高レベルの命令をデコードし、1つ以上の比較的低レベルのマイクロ命令、マイクロオペレーション、マイクロコード入口点、あるいはISA命令から派生する他の比較的低レベルの命令または制御信号を出力してよい。図において、これらは、デコード命令106として示されている。デコーダから出力されるデコード命令は、デコーダに入力された高レベルのISA命令を反映し、表し、および/またはそれらから派生することができ、1つ以上のより低レベル(例えば、回路レベルまたはハードウェアレベル)の演算を通じてISA命令を実施してよい。デコーダは、マイクロコードリードオンリーメモリ(read only memory、ROM)、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(programmable logic array、PLA)、および当技術分野において周知のデコーダを実装するために用いられる他の機構を含むが、これらに限定されない、様々な機構を用いて実装されてよい。
デコード後命令プロセッサ論理107がデコード論理と結合される。デコード後命令プロセッサ論理はプロセッサの命令処理パイプラインのデコード後の部分を表してよい。デコード後命令プロセッサ論理はデコード命令106を受信し、処理してよい。通常、デコード後命令プロセッサ論理は、レジスタ読み出しおよび/またはメモリ読み出し論理、実行論理、レジスタおよび/またはメモリ書き戻し論理、ならびに例外ハンドラ論理を含んでよい。ただし、論理はアーキテクチャによって異なってよく、本発明の範囲はこのような論理に限定されない。実施形態によっては、例えばアウトオブオーダプロセッサパイプラインの場合には、デコード後命令プロセッサ論理は、例えば、アロケーション論理、リネーミング論理、スケジューリング論理、リタイアまたはコミット論理、あるいは同様のもの等の、他の論理を任意選択で含んでよい。
プロセッサは、アーキテクチャ的に可視のレジスタまたはアーキテクチャレジスタ108の1つ以上のセットも含む。アーキテクチャ的に可視のレジスタは、ソフトウェアおよび/またはプログラマに対して可視であるレジスタ、ならびに/あるいはオペランドを識別するためにISA命令102によって指定されたレジスタを表す。これらのアーキテクチャレジスタは、所与のマイクロアーキテクチャの他の非アーキテクチャレジスタまたはアーキテクチャ的に可視でないレジスタ(例えば、命令、リオーダバッファ、リタイアメントレジスタ等によって用いられる一時レジスタ)とは対照をなす。アーキテクチャレジスタは一般的に、データを格納するオンダイのプロセッサ記憶位置を表す。多くの場合、これらのアーキテクチャレジスタは本明細書において単にレジスタと呼ばれる。例として、アーキテクチャレジスタは、一組の汎用レジスタ、一組のパックドデータレジスタ、一組の浮動小数点レジスタ、一組の整数レジスタ、またはこれらの何らかの組み合わせを含んでよい。アーキテクチャレジスタは、周知の技術を用い、種々のマイクロアーキテクチャで種々の方法で実装されてよく、いかなる特定の種類の回路にも限定されない。好適な種類のアーキテクチャレジスタの例としては、専用物理レジスタ、レジスタリネーミングを用いる動的アロケーション物理レジスタ、およびこれらの組み合わせが挙げられるが、これらに限定されない。
デコード後命令プロセッサ論理107はレジスタ108と結合される。デコード後命令プロセッサ論理はレジスタからデータを受信し、そこへデータを書き込むかまたは格納してよい。例えば、レジスタ読み出し論理は、命令のソースオペランドとして指示されたレジスタからデータを読み出してよく、および/または書き戻し論理は、命令の宛先オペランドとして指示されたレジスタに結果を書き込むかまたは格納してよい。デコード後命令プロセッサ論理はメモリ110とも結合され、メモリからデータを受信し、そこへデータを格納してよい。例えば、メモリ読み出し論理は、命令によって指示されるメモリ位置からデータを読み出してよく、および/またはメモリ書き戻し論理は、命令によって指示されるメモリ位置にデータを書き込んでよい。
図1を再び参照すると、デコード論理105にはエミュレート命令104も提供されてよい。非エミュレート命令103とは対照的に、エミュレート命令104は、デコード論理によって完全にデコードされ、対応するデコード命令106としてデコード後命令プロセッサ論理107に提供されなくてもよい。むしろ、実施形態によっては、エミュレート命令104をエミュレートするためのエミュレーション論理115が提供されてよい。当諸技術分野においては、このようなエミュレーションに、例えば、命令変換、バイナリトランスレーション、コードモーフィング、命令解釈等、様々な用語が与えられている。用語、エミュレーションは本明細書において、当業界で用いられているこれらの様々な用語を包含するように幅広く用いられている。
図示のように、実施形態によっては、エミュレーション論理115は、一部はオンダイエミュレーション論理117、および一部はオフダイエミュレーション論理113と分けられてよい。ただし、これは必須ではない。他の実施形態では、エミュレーション論理115はすべてが任意選択的にオンダイであってもよく、または大部分が任意選択的にオフダイであってもよい。ただし、通常は、少なくともいくらかのオンダイエミュレーション論理が存在する(例えば、エミュレーションモード118、パイプライン内のいくらかのエミュレーションモード認識命令プロセッサ論理120等)。オンダイエミュレーション論理はプロセッサに固定されているか、常駐しているか、または永続的にオンダイである。通常、オンダイエミュレーション論理は、起動前にプロセッサの電源が切れている時でも、および/または製造完了時に、プロセッサにオンダイで存在する。好適なオンダイエミュレーション論理の例としては、ハードウェア(例えば、集積回路機構、トランジスタ等)、ファームウェア(例えば、オンダイのROM、EPROM、フラッシュメモリ、または他の永続性もしくは不揮発性メモリおよびその内部に格納される不揮発性命令)、あるいはこれらの組み合わせが挙げられるが、これらに限定されない。
オフダイエミュレーション論理113はメモリ110内に含まれてよい。オフダイエミュレーション論理はオンダイエミュレーション論理と結合されるか、または別の方法で通信してよい。実施形態によっては、オフダイエミュレーション論理はメモリの保護領域または部分112内に含まれてよい。実施形態によっては、保護部分は、プロセッサのオンダイハードウェアおよび/またはファームウェア論理のみによる使用のために確保され、プロセッサ上で実行するソフトウェア111のためには確保されない場合がある。例えば、実施形態によっては、オンダイエミュレーション論理117、エミュレーションモード認識命令プロセッサ論理120、および/または場合によっては他のオンダイプロセッサ論理は、オフダイエミュレーション論理113にアクセスし、それを利用することができてもよいが、プロセッサ上で走るソフトウェア111(例えば、オペレーティングシステムまたはアプリケーション)はオフダイエミュレーション論理113にアクセスすることまたはそれを利用することができなくてもよい。実施形態によっては、オフダイエミュレーション論理は、アプリケーション、オペレーティングシステム、仮想マシンマネージャが存在する場合には、その仮想マシンマネージャ、および/またはI/Oデバイスによるアクセスおよび変更から保護され、かつ/またはそれに対して不可視であってもよい。これはセキュリティの向上に役立ち得る。
デコード論理は、エミュレート命令104を検出または認知するための論理119を含む。例えば、デコーダはオペコードに基づいてエミュレート命令を検出してよい。実施形態によっては、エミュレート命令を検出すると、デコーダはエミュレーション論理115にエミュレーションモード信号116(例えば、エミュレーショントラップ信号)を提供してよい。図示のように、エミュレーション論理はエミュレーションモード118を有してよい。例として、エミュレーションモードは、プロセッサ(例えば、論理105、107等)はエミュレーションモードになっているのか否かを指示するための1つ以上のビットまたはコントロールをプロセッサの制御または構成レジスタ内に含んでよい。実施形態によっては、エミュレート命令104はエミュレートされるべきであると指示するエミュレーションモード信号116をデコーダから受信すると、エミュレーションモード118に入ってよい。
実施形態によっては、デコード論理105は、エミュレートされる命令に関連する他の情報をエミュレーション論理115に提供してもよい。このような情報の例としては、オペランド識別子(例えば、ソースまたは宛先レジスタアドレスまたはメモリ位置)、メモリアドレス指定方式、即値、実行を増速するための定数、ならびに/あるいはエミュレート命令104からの、および/またはそれに関連する他の情報が潜在的に挙げられるが、これらに限定されない。例として、エミュレーションシステムにとって、エミュレーションシステムがエミュレート命令104をエミュレートすることを可能にするために有用である、エミュレート命令からの、および/またはエミュレート命令に関連するあらゆる情報が潜在的に提供され得る。
実施形態によっては、エミュレーション論理115は、異なる種類のエミュレート命令104毎に、それをエミュレートするための1つ以上の命令114の異なるセットを含んでよい。例えば、第1のオペコードを有する第1の命令104をエミュレートするために、1つ以上の命令114の第1セットが提供されてよく、第2の異なるオペコードを有する第2の異なる命令104をエミュレートするために、1つ以上の命令114の第2の異なるセットが提供されてよい。実施形態によっては、各セットは少なくとも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を有する元のプログラムの実行状態を保管する必要を回避するのに役立ち、かつ/またはこのような実行状態(例えば、アーキテクチャレジスタ108の内容)が命令114のセットの処理によって破損するのを阻止するのに役立ち得る。実施形態によっては、記憶位置121はアーキテクチャレジスタをエミュレートしてよい。ただし、これは必須ではない。実施形態によっては、記憶位置121のコンテンツは、アプリケーション、オペレーティングシステム、仮想マシンマネージャ、I/Oデバイス、割り込み等によるアクセスから独立し、それらから隔離され、かつ/またはそれらから保護されていてよい。命令114のセットが完了すると、プロセッサのアーキテクチャ状態が更新されてよい(例えば、結果が記憶位置121からレジスタ108に格納されてよい)。これは低レイテンシアクセスによって行われてよい。通常、これは、エミュレート命令104が実際に直接実行されていれば生じたアーキテクチャ状態の変化および/または起こったであろうプロセッサの動作に近似し、これを模倣、類似、または別の方法でエミュレートするために用いられてよい。
説明を不明瞭にすることを回避するために、比較的単純なプロセッサ101が示され、説明されている。他の実施形態では、プロセッサは他の周知の構成要素を任意選択で含んでもよい。プロセッサ内の構成要素の組み合わせおよび構成は文字通り数多くの様々なものが存在し、諸実施形態はいかなる特定の組み合せまたは構成にも限定されない。プロセッサは、集積回路あるいは1つ以上の半導体ダイもしくはチップ(例えば、単一のダイもしくはチップ、または2つ以上のダイもしくはチップを組み込むパッケージ)の組を表してよい。実施形態によっては、プロセッサはシステムオンチップ(system−on−chip、SoC)および/またはチップマルチプロセッサ(chip multi−processor、CMP)を表してよい。
一部のプロセッサは比較的複雑な演算を用いる。例えば、単一のメモリアクセスのみの代わりに、一部の命令は複数のメモリアクセスを遂行する。一例は、メモリからデータ要素のベクトルを収集するためのベクトル収集命令である。別の例として、データ要素の単一の対、または2つのパックドデータ内の対応するデータ要素の複数の対を比較する代わりに、一部の命令は多数のデータ要素比較を遂行してよい。諸例は、ベクトルコンフリクト命令およびストリング処理命令である。1つのアプローチは、このような複雑な演算を完全にハードウェアで実装することである。しかし、多くの場合、必要とされるハードウェアの量は膨大になる傾向を有し得、これは、製造コスト、ダイサイズ、および電力消費を増大させる傾向を有し得る。別のアプローチは、このような複雑な演算を少なくとも一部、マイクロコードで実装することである。マイクロコードの使用は、このような複雑な演算の実装に必要なハードウェアの量を削減する助けとなってよく、および/または一部の既存のハードウェアを再利用することを可能にする助けとなってよい。しかし、プロセッサによっては、マイクロコードを用いないものがある(例えば、命令セットのいかなる命令の実装にもマイクロコードを用いない)。
実施形態によっては、比較的より複雑な命令が1つ以上の比較的より単純な命令を用いてエミュレートされてよい。用語「より複雑」および「より単純」は、互いに相対的である、相対的な用語であり、絶対的な用語ではない。有利には、これは潜在的に、より複雑な命令の実装に必要なハードウェアの量を削減する助けとなってよく、および/またはより複雑な命令のエミュレートに用いられる1つ以上の命令によって用いられる既存のハードウェアの再利用を可能にする助けとなってよい。たとえ、実施形態によっては、プロセッサがマイクロコードを用いるように構成されていない場合があり、および/またはより複雑な命令を実装するためにマイクロコードを用いるように構成されていない場合があっても、実施形態によっては、より複雑な命令のマイクロコード的実装を提供するために、より単純な1つ以上の命令を用いた、より複雑な命令のエミュレーションが利用されてよい。
図2は、プロセッサ内で命令をエミュレートする方法230の一実施形態のブロックフロー図である。実施形態によっては、図2の演算および/または方法は、図1のプロセッサによって、および/またはその内部で遂行されてよい。図1のプロセッサについて本明細書に記載されている構成要素、特徴、および特定の任意追加の細部は、図2の演算および/または方法にも任意選択で適用される。代替的に、図2の演算および/または方法は、同様のまたは全く異なるプロセッサによって、ならびに/あるいはその内部で遂行されてもよい。さらに、図1のプロセッサは、図2のものと同様のまたは異なる演算および/または方法を遂行してよい。
本方法は、ブロック231において、第1の命令を受信することを含む。実施形態によっては、第1の命令はデコーダにおいて受信されてよい。本方法は、ブロック232において、第1の命令をエミュレートすると決定することを含む。実施形態によっては、デコーダが、第1の命令のオペコードは、エミュレートされるべき命令のための1つ以上のオペコードのセットのうちの1つであると判定することによって、第1の命令をエミュレートすると決定してよい。本方法は、ブロック233において、第1の命令をエミュレートするために用いられる1つ以上の命令のセットを受信することを含む。実施形態によっては、命令のセットは、デコーダにおいて、オンダイエミュレーション論理、またはオフダイエミュレーション論理、あるいはそれらの組み合わせから受信されてよい。実施形態によっては、セットの命令の各々は、第1の命令と同じ命令セットのものであってよい。本方法は、ブロック234において、エミュレーションモードの時には、セットの命令から派生した1つ以上の制御信号を、エミュレーションモードでない時とは異なるように処理することを含む。
これは、実施形態によって異なる面で行われてよい。実施形態によっては、セットの命令の処理中に遭遇した例外条件が異なるように処理されてよい。実施形態によっては、セットの命令の処理は、エミュレーションモード内で行われなければ同じ命令(すなわち、同じオペコードを有する命令)が他の方法では利用不可能であろう情報および/またはリソースへのアクセスを可能にしてよい。
図3は、命令(例えば、複雑な命令)304を、1つ以上の命令(例えば、より単純な命令)314によってエミュレートするための論理301の一実施形態を示すブロック図である。実施形態によっては、図3の論理は図1のプロセッサおよび/またはコンピュータシステム内に含まれてよい。代替的に、図3の論理は、同様のまたは異なるプロセッサまたはコンピュータシステム内に含まれてもよい。さらに、図1のプロセッサおよび/またはコンピュータシステムは、図3のものと同様のまたは異なる論理を含んでよい。
エミュレートされるべきである命令(例えば、複雑な命令)304がデコード論理305に提供されてよい。デコード論理は、命令304を検出するための、例えば、命令304のオペコードは、エミュレートされるべきである命令のオペコードのセットの中の1つであることを検出するための、論理319を含んでよい。図示のように、実施形態によっては、プロセッサはマイクロコード330を有しなくてもよい。デコード論理はエミュレーションモード信号316をエミュレーション論理315に提供してよい。種々の実施形態において、エミュレーション論理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つ以上の命令によって用いられる既存のハードウェアの再利用を可能にする助けとなってよい。本明細書に開示されているエミュレーションのさらに別の利用法が、当業者および本開示の利益を得る者には明らかであろう。
図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はデコード命令406を受信してよい。デコード後命令処理論理はエミュレーションモード認識例外条件ハンドラ論理420を含む。エミュレーションモード認識例外条件ハンドラ論理は、エミュレーションモードを認識した方法で例外条件に対処する/それを処理してもよい。本明細書で使用するとき、用語「例外条件」は、命令を処理する際に生じ得る様々な種類の例外条件を幅広く指す。このような例外条件の例としては、例外、割り込み、障害、トラップ等が挙げられるが、これらに限定されない。多くの場合、例外、割り込み、障害、およびトラップの用語は、当諸技術分野において種々の意味で使われる。特権違反、特権例外、ページフォールト、メモリ保護違反、ゼロ除算、違法オペコードの実行の試み、および他のこのような例外条件に応答したハンドラルーチンへの自動発生制御移行を指すために、用語「例外」が恐らく、より一般的に使われている。
実施形態によっては、プロセッサがエミュレーションモード418で動作していない時に、所与の命令の第1インスタンス403−1が処理されている最中に特権違反、ページフォールト、メモリ保護違反、ゼロ除算、違法オペコードの実行の試み、または他の例外条件が生じると、このとき、プロセッサは例外条件の実質的に従来の対処を遂行してよい。例えば、実施形態によっては、例外条件は直接受け取られてよく440、この場合には、制御が例外条件ハンドラルーチン441に移行される。通常、例外条件ハンドラルーチンは、オペレーティングシステム、仮想マシンモニタ、または他の特権ソフトウェアの一部であってよい。このようなハンドラルーチンの例としては、ページフォールトハンドラ、エラーハンドラ、割り込みハンドラ等が挙げられるが、これらに限定されない。
対照的に、実施形態によっては、プロセッサがエミュレーションモード418で動作している時に、所与の命令の第2インスタンス403−2が処理されている最中に特権違反、ページフォールト、メモリ保護違反、ゼロ除算、違法オペコードの実行の試み、または他の例外条件が生じると、このとき、プロセッサは例外条件の実質的に非従来型の対処を遂行してよい。例えば、実施形態によっては、例外条件は直接受け取られなくてもよい。実施形態によっては、論理420は、さもなければ例外条件から生じるであろう、例外条件ハンドラルーチンへのさもなければ自動的な制御移行を抑制するための機構を含んでよい。制御はエミュレーションプログラムから例外条件ハンドラルーチン441へ直接移行されなくてもよい。むしろ、実施形態によっては、エミュレーションモード認識例外条件ハンドラ論理420は例外条件ハンドラ441への制御移行を一時的に抑制し、例外条件を間接的に報告してよい(442)。実施形態によっては、エミュレーションモード認識例外条件ハンドラ論理420は、1つ以上のエミュレーション通信レジスタ443を通じて例外条件を間接的に報告してよい。1つ以上の通信レジスタは、エミュレーション論理と、エミュレートされている元の命令を有するプログラムとの間で情報を通信するために用いられてよい。
実施形態によっては、エミュレーションモード418の時に例外条件が生じるのに応答して、エミュレーションモード認識例外条件ハンドラ論理420は、例外条件の指示を、例外条件またはエラーステータスフラグ、フィールド、またはレジスタ444内に格納してよい。例えば、単一のビットまたはフラグが、例外条件が生じたことを指示するための第1の値(例えば、2進値の1にセットされる)を有してよく、または例外条件が生じなかったことを指示するための第2の値(例えば、2進値のゼロにクリアされる)を有してよい。実施形態によっては、エミュレーションモード418の時に例外条件が生じるのに応答して、エミュレーションモード認識例外条件ハンドラ論理420は、例外条件のためのエラーコードをエラーコードフィールドまたはレジスタ445内に格納してよい。エラーコードは、例えば、エラーの種類、および任意選択で、例外条件の性質の伝達を助けるための追加の詳細等の、エラーに関する追加情報を提供してよい。代替的に、通信レジスタを用いる代わりに、情報は別の方法により信号で送られるかまたは提供されてもよい(例えば、メモリ内に格納される、電気信号を通じて報告される、等)。
実施形態によっては、エミュレーションモード認識例外条件ハンドラ論理420は、エミュレートされている命令(すなわち、第2インスタンス403−2がデコード論理405に送られる原因になったもの)のアドレスの指示(例えば、命令ポインタ)を提供してもよい。例えば、実施形態によっては、エミュレートされている命令のアドレス446はスタック447の最上部の上に格納されてよい。所与の命令のエミュレートに用いられている命令の1つでなく、エミュレートされている所与の命令のアドレスをスタック上に格納すると、例外ハンドラからの復帰を、エミュレート命令のエミュレートに用いられている命令の1つでなく、エミュレート命令へ復帰させることができる。もしそうでなく、例外ハンドラからの復帰が、その命令のエミュレートに用いられている命令の1つへなされると、これは場合によっては問題を生じさせる可能性がある。例えば、ソフトウェア(例えば、アプリケーション、オペレーティングシステム等)は、その所与の命令のエミュレートに用いられている命令について知識がない場合があり、対応付けられたアドレスを認知しない場合がある。オペレーティングシステムは、制御フローが、未知の、違法な、危険な、または許可されていない位置に移行されようとしていると理解する可能性があり、場合によっては、移行を阻止しようと試みる可能性がある。
実施形態によっては、命令のセット414はエラーステータス444および/またはエラーコード445を監視してよい。例えば、実施形態によっては、命令414は、例外条件の有無および例外条件の内容を知るために、エミュレーション通信レジスタ443からエラーステータス444およびエラーコード445を読み出してよい。エラーステータス444が例外条件を指示していれば、実施形態によっては、命令のセット414は例外条件449を受け取ってよい。例えば、エラーステータスをチェックし、エラーが指示されていれば制御を例外条件ハンドラに移行するために、命令414の1つ以上が実行されてよい。実施形態によっては、これは、命令のセット414が制御を例外条件ハンドラ441に移行することを含んでよい。実施形態によっては、例外条件に関する情報(例えば、エラーコード445)が例外条件ハンドラ441に提供されてよい。また、実施形態によっては、エミュレート命令アドレス446が例外条件ハンドラ441に提供されてもよく、および/またはスタックの最上部の上に少なくとも保存されてよい。エミュレート命令アドレス446は、例外条件への対処からの復帰時に例外条件ハンドラ441によって利用されてよい。有利なことに、エミュレートされている命令のアドレスをスタック上に格納することによって、オペレーティングシステムまたは他のエラーハンドラルーチンは、エラーを生じさせたのは、エミュレートされている命令であると考えることができる。
実施形態によっては、エミュレーション論理は、命令内のメモリアクセスは正しく動作するかどうか、または生じ得る例外条件の種類を検査し、報告するための論理を含んでよい。例えば、メモリアドレスは有効であるのかどうか(例えば、ページは存在しているのかどうか)、およびプログラムは、そのメモリ位置を読み出し、および/または変更するために十分なアクセス権を有しているのかどうかを判断するべく、エミュレートされたアクセス権を用いてメモリアドレスを検査するための特殊命令が含まれてよい。いずれかの検査が不合格になれば、エミュレーション論理は、エミュレートされている命令があたかも制御を例外ハンドラに直接渡したかのように、制御を復帰アドレスとともに適当な割り込みハンドラに渡してよい。別の例として、状態機械が、メモリ操作は有効になるかどうかを指示する条件付きメモリトランザクションを遂行してもよい。これは、いつメモリ操作が、例外が生じないことを前提として遂行され得るのかを判定するために用いられてよい。これは、何バイトの命令ストリーム、または命令情報のストリングが、例外を生じず安全に読み出され得るのかを判定するために用いられてもよい。例えば、これは、命令長が読み出され得るか否か、またはその命令長の一部はページフォールトを生じさせるかどうかを検査し、判定するために用いられてよい。エミュレーション論理は、複数のページにわたる命令、および/またはページがメモリ内にないときの命令を扱うための論理を含んでよい。
実施形態によっては、エミュレーション論理は、エミュレーションの実行が中間点において停止し、後で再開するように、中間実行割り込みステータスを提供するための論理を含んでよい。これは、長い持続期間または実行時間を伴う命令をエミュレートする際に特に有利となり得る。実施形態によっては、特定の種類の命令(例えば、ストリング移動命令、収集命令、および長い演算を有する他のもの)のエミュレートに用いられる命令のセットは、現在の進捗レベルを反映するために、エミュレートされている命令を有するソフトウェアの実行状態を更新してよい。例えば、演算が中間点において割り込まれてよく、エミュレーションに用いられている命令のセットが、例外条件ハンドラによって(例えば、プロセッサステータスレジスタ内に)保管された機械状態内のフラグまたはステータスビットをセットしてよい。それにより、復帰時に、エミュレーションコードはフラグまたはステータスビットを検査し、それは中間状態から実行を再開することになっていると判定するとしてもよい。フラグまたはステータスビットは、実行が割り込まれたことを指示してよい。このようにして、例外条件が対処された後、例外条件ハンドラから復帰すると、プログラムは、それが中断した中間進捗レベルにおいて実行を再開し得る。場合によっては、命令(例えば、ストリング移動命令)が、演算の中間状態を反映するようにレジスタを変更してよく、それにより、割り込みの後、実行が中間状態から再開され得るようにする。
図5は、エミュレーションモードの時には、プロセッサリソースおよび/または情報に、エミュレーションモードでない時とは異なるようにアクセスすることを可能にするための論理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に対応するデコード命令506を受信してよい。デコード後命令プロセッサ論理はエミュレーションモード認識アクセス制御論理520を含む。エミュレーションモード認識アクセス制御論理は、エミュレーションモードを認識した方法で1つ以上のリソースおよび/または情報550へのアクセスを制御する。実施形態によっては、プロセッサがエミュレーションモードで動作していない時には、デコード後命令プロセッサ論理507は、リソースおよび/または情報550への実質的に従来のアクセスを用いて所与の命令の第1インスタンス503−1を処理してよい。図示のように、実施形態によっては、エミュレーションモードでない時には、所与の命令の第1インスタンス503−1を処理する最中に、リソースおよび/または情報550へのアクセスが阻止されてよい(551)。エミュレーションモードでない時にリソースおよび/または情報へのアクセスを阻止することは、種々考えられるあらゆる理由で適切となり得る。例えば、所与の命令は一般的にそれらのリソースおよび/または情報にアクセスする必要がなく、自分は必要な場合にのみリソースおよび/または情報を提供したいため、あるいは他の理由で、情報および/またはリソースのセキュリティを保護するという理由などである。
対照的に、実施形態によっては、エミュレーションモード518で動作している時に、所与の命令の第2インスタンス503−2が処理されている最中には、デコード後命令プロセッサ論理は、リソースおよび/または情報550への実質的に非従来型の(例えば、非エミュレーションモード時とは異なる方法の)アクセスを用いてよい。例えば、図示の実施形態に示されているように、エミュレーションモード518の時には、所与の命令の第2インスタンス503−2を処理する最中に、リソースおよび/または情報550へのアクセスが許可されてよい(552)。例として、エミュレーションモード518は、エミュレーションモードの時には、その所与の命令のために情報および/またはリソースへの選択的アクセスを許可する特殊なハードウェア状態を論理507および/または論理520が有することを可能にしてよい。例えば、1つ以上のアクセス特権ビットが提供され、エミュレーションモード時には、情報に選択的にアクセスすることを状態機械に許可するように構成されてよい。
様々な種類の情報および/またはリソース550が企図されている。好適なリソースおよび/または情報の例としては、セキュリティ関連リソースおよび/または情報(例えば、セキュリティ論理)、暗号化および/または解読関連リソースおよび/または情報(例えば、暗号化論理および/または解読論理)、乱数発生器リソースおよび/または情報(例えば、乱数発生器論理)、オペレーティングシステムおよび/または仮想マシンモニタに対応する特権またはリングレベルのために確保されるリソースおよび/または情報、ならびに同様のものが挙げられるが、これらに限定されない。
好適なリソースおよび/または情報の別の例としては、デコード後命令プロセッサ論理507を有する物理プロセッサまたは論理プロセッサとは異なる物理プロセッサまたは論理プロセッサ内のリソースおよび/または情報(例えば、コア、ハードウェアスレッド、スレッドコンテキスト等)が挙げられるが、これらに限定されない。異なる物理または論理プロセッサは、同じまたは異なるソケット内にあってよい。例として、エミュレーションモードの時には、エミュレーションモード認識制御論理520が、エミュレーションモードでない時にはデコード後命令プロセッサ論理507は利用不可能であろう別のソケット内の別のコアの情報および/またはリソースにアクセスすることができてよい(例えば、コアのステータスを問い合わせる)。
有利には、エミュレーションモード認識アクセス制御論理520は、エミュレーションモードの時に、命令514の少なくとも一部に、エミュレーションモードでない時には命令セットの同じ命令は通常利用不可能であろう特定のリソースおよび/または情報への選択的アクセスを許可することを助けてよい。エミュレーション論理はオンダイであり、かつ/またはメモリの保護部分内にあってよいため、セキュリティはなおも維持されてよい。
実施形態によっては、一部の実行レベル、例えばセキュリティ実行状態は、このようなエミュレーションを用いてこれらのリソースおよび/または情報にアクセスすることを禁止してもよい。例えば、エミュレートされたオペコードを用いることを全ての実行状態が許可されなくてもよい。このような割り込みまたは下位レベルの実行が許されると、特殊なセキュリティ実行状態は、保証可能なほど安全ではなくなる可能性がある。その代わり、このような実行レベルまたはセキュリティ実行状態が同様のアクセスを必要とする場合には、それらは代わりに、エミュレーションソフトウェアが利用可能なハードウェア基本命令を用いることによってそれを実施してもよい。
実施形態によっては、命令の所与のオペコードに異なる意味を提供することを助けるために、命令エミュレーションが用いられてもよい。命令セットのマクロ命令、機械語命令、および他の命令は演算コードすなわちオペコードをたいてい含む。オペコードは、命令に応答して遂行されるべき特定の命令および/または演算を指定するために用いられる命令の部分を一般的に表す。例えば、パックド乗算命令のオペコードはパックド加算命令のオペコードとは異なってよい。一般的に、オペコードは、物理的ではないとしても論理的にグループ化してまとめられる1つ以上のフィールド内に数ビットを含む。多くの場合、所望の数の命令/演算を可能にしつつ、オペコードを比較的短い長さ、または可能な限り短い長さに維持しようと試みることが望ましい。比較的長いオペコードはデコーダのサイズおよび/または複雑性を増大させる傾向があり、一般的に、命令をより長くする傾向もある。オペコード内のビット数が固定されている場合には、一般的に、固定数の、異なる命令/演算しか識別し得ない。例えば、エスケープコード等を用いることによって、オペコードを最大限に活用しようと試みるための当技術分野において周知の方略が種々存在する。それにもかかわらず、オペコードを用いて一意に識別することができる命令の数は一般的に、しばしば望まれるよりも限定される。一般的に、利用可能なオペコードを最終的にどこかの時点で使い果たすことなく、プロセッサのオペコード空間に新しい命令を追加し続けることはできない。
作業負荷は時が経つにつれて変化する。同様に、所望の命令および所望の命令機能は時が経つにつれて変化する。通常、プロセッサには新しい命令機能が継続的に追加されていく。同様に、一部の命令/演算は、時が経つにつれて比較的有用性が低くなり、および/または使用頻度が低くなり、および/または重要性が低くなる。場合によっては、命令/演算が有する有用性または重要性が十分にわずかなほどしかなくなれば、それらは非推奨(deprecated)とされてよい。非推奨とは、当諸技術分野においてよく使われる用語であり、構成要素、機構、特徴、または手法に適用されるステータスであって、多くの場合、それは、放棄もしくは代替される過程にあり、および/または将来、利用不可能になるかまたはサポートされなくなり得るため、それは一般的に避けるべきものであること指示するステータスに言及するために使われる用語である。
通常、このような命令/演算は、すぐに削除されるのではなく、一時的な後方互換性の提供を助けるために(例えば、既存またはレガシーコードが引き続き走ることを可能にするために)、非推奨とされてよい。これにより、コードが後継の命令/演算に準拠される時間が与えられて、および/または既存もしくはレガシーコードが廃止される時間が与えられてよい。多くの場合、命令/演算を命令セットから非推奨とするには、古いプログラムを十分に排除する時間を与えるために、例えば、数十年とは言わないまでも、何年ものオーダの、長い時間がかかる。従来、一般的に、非推奨命令/演算のオペコードの値は、これほど長い期間が経過するまで、異なる命令/演算のために再獲得し、再利用することができなかった。さもなければ、レガシーソフトウェアを走らせると、そのオペコード値を有する命令は、意図された非推奨演算ではなく、後継の演算をプロセッサに遂行させる場合があり、このため、誤った結果が生じ得る。
実施形態によっては、命令の所与のオペコードに異なる意味を提供することを助けるために、命令エミュレーションが用いられてよい。実施形態によっては、命令の所与のオペコードは異なる意味で解釈されてよい。実施形態によっては、所与のオペコードのために複数のオペコード定義がサポートされてよい。例えば、所与のオペコードは、命令を有するソフトウェアプログラムが意図する意味で解釈されてよい。例として、実施形態によっては、古いまたはレガシーソフトウェアプログラムは、所与のオペコードを有する命令は、古い、レガシー、または非推奨の意味を有するべきであることを指示してよく、新しいソフトウェアプログラムは、所与のオペコードを有する命令は新しい意味を有するべきであることを指示してよい。実施形態によっては、古いまたは非推奨の意味はエミュレートされてよく、それに対して、新しい意味は制御信号にデコードされ、プロセッサパイプライン上で直接実行されてよい。有利には、実施形態によっては、これは、性能の向上を助けるために、古いプログラムが非推奨オペコードによって依然として走ることを可能にする後方互換性をなおも提供し、それと同時に、非推奨オペコードを、異なる意味を有する新しいプログラムのために用いることも可能にしつつ、非推奨となっているオペコードのより早期の再獲得および再利用を可能にする助けとなり得る。
図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の意味は、非推奨でないオペコードの意味、比較的新しいオペコードの意味、比較的使用頻度の高いオペコードの意味、性能により強く影響を与えるオペコードの意味、または同様のものに用いられてよい。
逆に、ブロック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インスタンス703−1が第1ソフトウェアモジュール711−1からデコーダ705に提供されることを考える。第1ソフトウェアモジュールは、モジュール771が記憶位置774内に保存してよい、所与のオペコードのために第1の意味を用いるための指示772を含む。デコーダは、所与のオペコードのために第1の意味を用いるべきであるのか、それとも第2の意味を用いるべきであるのかについての指示775をチェックするための、記憶位置774と結合されるチェック論理776を含む。チェック論理は記憶位置にアクセスするかまたはそれを読み出し、第1ソフトウェアモジュールからの命令の第1インスタンスを処理する時には、第1の意味が所与のオペコードのために用いられるべきであると判定し得る。実施形態によっては、記憶位置774は、異なるオペコードに各々対応する複数の指示を格納するために、複数の異なる記憶位置を含んでよい。それに応じて、デコーダのデコード論理777が、所与のオペコードの第1の意味を前提として命令をデコードしてよい。1つ以上のデコード命令706または1つ以上の他の制御信号がデコーダからデコード後命令処理論理707に提供されてよく、デコード後命令処理論理707がそれらを処理してよい。
同じ所与のオペコードを持つ命令の第2インスタンス703−2が第2ソフトウェアモジュール711−2からデコーダ705に提供されてもよい。第2ソフトウェアモジュールは、モジュール771が記憶位置774内に保存してよい、所与のオペコードのために第2の意味を用いるための指示773を含む。チェック論理776は、指示775をチェックし、第2ソフトウェアモジュールからの命令の第2インスタンスを処理する時には、第2の意味が所与のオペコードのために用いられるべきであると判定し得る。それに応じて、エミュレーション誘起論理778が命令703−2の第2インスタンスのエミュレーションを誘起してよい。例えば、エミュレーション誘起論理はエミュレーショントラップを遂行するか、または別の方法でエミュレーションモード718を合図してよい。第2の意味を持つ所与のオペコードを有する命令の第2インスタンスをエミュレートするために用いられる1つ以上の命令のセット714が、エミュレーション論理715からデコーダに提供されてよい。エミュレーション論理は、オンダイ、オフダイ、あるいは一部オンダイおよび一部オフダイであってよい。エミュレーション論理715は、エミュレーション論理について本明細書の他の箇所で説明されている任意追加の特徴のいずれのものを有してもよい。
実施形態によっては、命令714は、所与のオペコードを有する命令と同じ命令セットであってよい。実施形態によっては、デコーダはこれらの命令の各々をデコードし、それらをデコード命令706または他の制御信号としてデコード後命令処理論理に提供してよい。実施形態によっては、デコード後命令処理論理は、本明細書の他の箇所で説明されているもの(例えば、図1または3〜5のいずれかのもの)と同様または同じであってよい、エミュレーションモード認識命令プロセッサ論理720を含んでもよい。図示のように、実施形態によっては、エミュレーションモード認識命令処理論理はエミュレーションモード718と結合されるか、または別の方法でそれを認識してよい。さらに、エミュレーションモード認識命令処理論理はエミュレーション論理の記憶位置721と結合されてよく、それに対してデータの読み出しおよび書き込みを行ってよい。
実施形態によっては、記憶位置774内の指示775に基づいてプロセッサ特徴識別レジスタ795を更新するための論理796が含まれてもよい。好適なプロセッサ特徴識別レジスタの例としては、CPU識別(CPU IDentification、CPUID)に用いられるものが挙げられる。論理796は記憶位置774およびプロセッサ特徴識別レジスタ795と結合されてよい。プロセッサ特徴識別レジスタは、プロセッサの命令セットのプロセッサ特徴識別命令(例えば、CPUID命令)によって可読であってよい。ソフトウェアは、プロセッサ特徴識別命令を実行することによってプロセッサ特徴識別レジスタからオペコードの意味の指示を読み出してよい。
実施形態によっては、特権レベルおよび/またはリングレベル論理794がデコーダ705と結合されてもよく、デコーダに、特権レベルおよび/またはリングレベルに基づくオペコードの所与の意味を強制的に使わせるかまたは別の方法でそれをさせてもよい。例えば、これは、第1の意味は新しい意味であり、第2の意味は非推奨の意味である諸実施形態において有用となり得る。オペレーティングシステムは通例、ユーザアプリケーションのものとは異なる特定の特権レベルおよび/またはリングレベルで動作する。さらに、オペレーティングシステムは、それらは一般的に頻繁に更新されるため、通例、所与のオペコードの古い意味ではなく、所与のオペコードの新しい意味を用いる。このような場合には、特権レベルおよび/またはリングレベル論理794は、オペレーティングシステムのものに対応する特権またはリングレベルの時には、デコーダに所与のオペコードの新しい意味を使わせてよい。
説明を簡単にするために、本明細書においては、オペコードの2つの異なる意味が典型的に記載されている。しかし、他の実施形態は、所与のオペコードのために3つ以上の異なる意味を用いてもよいことを理解されたい。例として、記憶位置774は、複数のこのような異なる意味のうちのどれを所与のオペコードのために用いるべきであるのかを指示するための2つ以上のビットを含んでよい。同様に、プロセッサ特徴識別レジスタは、所与のオペコードのための多数のこのような意味を反映してよい。
図8は、オペレーティングシステムモジュールによって遂行されてよい方法880の一実施形態のブロックフロー図である。実施形態によっては、本方法はプログラムローダモジュールによって遂行されてよい。
本方法は、ブロック881において、所与のオペコードを有する第1の命令は、ソフトウェアプログラムからプロセッサによって実行される時に、第1の意味の代わりに第2の意味を有するべきであると判定することを含む。これは、実施形態によって異なる方法で行われてよい。実施形態によっては、ソフトウェアプログラムは、所与のオペコードのための所与の意味を用いるための指示を指定してよい。例えば、オペレーティングシステムモジュールはソフトウェアプログラムのメタデータを調べてよい。例えば、どの意味を用いるべきであるのかを指示するフラグがオブジェクトモジュールフォーマット内に存在してよい。他の実施形態では、例えばレガシーソフトウェアの場合には、ソフトウェアプログラムは、どの意味を用いるべきであるのかについての指示を明示的に指定しなくてもよい。実施形態によっては、オペレーティングシステムモジュールは、どの意味を用いるべきであるのかを推測するための論理を含んでもよい。これは様々な方法で行われてよい。実施形態によっては、これは、ソフトウェアプログラムの特徴リストを調べることを含んでよい。場合によっては、特徴リストは、命令のどのリビジョンが期待されているのかを指定してよい。実施形態によっては、これは、ソフトウェアプログラムの作成日付を調べることを含んでよい。所定の日付、例えば新しい後継の意味の命令の日付、よりも古い作成日付は、ソフトウェアプログラムは古いまたは非推奨の意味を用いるとの指示として推測されてよい。実施形態によっては、これは、ソフトウェアプログラムのフォーマットを調べることを含んでよい。例えば、所定のレベル以前の一部のリビジョンのプログラムフォーマットが、古いまたは非推奨の意味を推測するために用いられてもよい。実施形態によっては、これは、所定の意味を用いると知られているソフトウェアプログラムの明示的リスト(例えば、例外リスト)を調べることを含んでもよい。例として、リストは履歴情報に基づいて更新されてよい(例えば、一方の意味からエラーが生じれば、他方の意味がリストに追加されてよい)。これは単なる一例に過ぎない。意味を推測する他の方法も企図されている。
本方法は、ブロック882において、所与のオペコードを有する第1の命令は第1の意味ではなく第2の意味を有するべきであるとの指示をプロセッサの状態内に格納することも含む。例えば、オペレーティングシステムモジュールは、本明細書の他の箇所で説明されているように、デコーダと結合された記憶位置内のビットを変更してよい。
図9は、ソフトウェアライブラリ983の1つ以上の関数、サブルーチン、または他の部分のセットであって、それらを用いるソフトウェアにふさわしい所与のオペコードの意味を有するセットを選択する選択モジュール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チップ上のシステム。次に、例示的なコアアーキテクチャを説明し、その後、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
例示的なコアアーキテクチャ インオーダおよびアウトオブオーダコアブロック図 図10Aは、本発明の諸実施形態による例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図10Bは、本発明の諸実施形態によるプロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図10A〜10Bにおける実線の囲み線はインオーダパイプラインおよびインオーダコアを示し、一方、破線の囲み線の任意の追加はレジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであることを考慮し、アウトオブオーダの態様を説明する。
図10Aでは、プロセッサパイプライン1000が、フェッチステージ1002、長さデコードステージ1004、デコードステージ1006、アロケーションステージ1008、リネームステージ1010、スケジューリング(配付または発行としても知られる)ステージ1012、レジスタ読み出し/メモリ読み出しステージ1014、実行ステージ1016、書き戻し/メモリ書き込みステージ1018、例外処理ステージ1022、およびコミットステージ1024を含む。
図10Bは、実行エンジンユニット1050と結合されるフロントエンドユニット1030を含むプロセッサコア1090を示し、両者ともメモリユニット1070と結合されている。コア1090は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドあるいは代替的なコア形式であってよい。さらに別の選択物として、コア1090は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(general purpose computing graphics processing unit、GPGPU)コア、グラフィックスコア、あるいは同様のもの等の、専用コアであってよい。
フロントエンドユニット1030は、命令キャッシュユニット1034と結合される分岐予測ユニット1032を含み、命令キャッシュユニット1034は命令トランスレーションルックアサイドバッファ(translation lookaside buffer、TLB)1036と結合され、命令トランスレーションルックアサイドバッファ1036は命令フェッチユニット1038と結合され、命令フェッチユニット1038はデコードユニット1040と結合される。デコードユニット1040(またはデコーダ)は命令をデコードし、元の命令からデコードされるか、または別の方法でそれを反映するか、もしくはそれから派生する、1つ以上のマイクロオペレーション、マイクロコード入口点、マイクロ命令、他の命令、または他の制御信号を出力として生成してよい。デコードユニット1040は種々の異なる機構を用いて実装され得る。好適な機構の例としては、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(PLA)、マイクロコードリードオンリーメモリ(ROM)等が挙げられるが、これらに限定されない。一実施形態では、コア1090は、特定のマクロ命令のためのマイクロコードを格納するマイクロコードROMまたは他の媒体を(例えば、デコードユニット1040内、または別の方法でフロントエンドユニット1030内部に)含む。デコードユニット1040は実行エンジンユニット1050内のリネーム/アロケータユニット1052と結合される。
実行エンジンユニット1050は、リタイアメントユニット1054および1つ以上のスケジューラユニット1056の組と結合されるリネーム/アロケータユニット1052を含む。スケジューラユニット1056は、リザベーションステーション、中央命令ウィンドウ等を含む、任意の数の種々のスケジューラを表す。スケジューラユニット1056は物理レジスタファイルユニット1058と結合される。物理レジスタファイルユニット1058の各々は1つ以上の物理レジスタファイルを表す。物理レジスタファイルはそれぞれ、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)など等の、1つ以上の異なるデータ型を格納する。一実施形態では、物理レジスタファイルユニット1058は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供してよい。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る種々の方法を示すために(例えば、リオーダバッファならびにリタイアメントレジスタファイルを用いる方法、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いる方法、レジスタマップおよびレジスタのプールを用いる方法等)、物理レジスタファイルユニット1058はリタイアメントユニット1054によってオーバラップされている。リタイアメントユニット1054および物理レジスタファイルユニット1058は実行クラスタ1060と結合される。実行クラスタ1060は、1つ以上の実行ユニット1062の組および1つ以上のメモリアクセスユニット1064の組を含む。実行ユニット1062は種々の演算(例えば、シフト、加算、減算、乗算)を種々の型のデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して遂行してよい。一部の実施形態は特定の機能または機能セット専用の多数の実行ユニットを含んでよく、一方、他の実施形態は、全てが全機能を遂行する唯一の実行ユニットまたは複数の実行ユニットを含んでよい。スケジューラユニット1056、物理レジスタファイルユニット1058、および実行クラスタ1060は、場合により複数あるように示されている。これは、一部の実施形態は、一部の型のデータ/演算用に独立したパイプラインを作成するためである(例えば、独自のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを各々有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインである−ならびに、独立したメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット1064を有する特定の実施形態が実装される)。独立パイプラインが用いられる場合、これらのパイプラインのうちの1つ以上はアウトオブオーダ発行/実行であり、残りのものはインオーダであってよいことも理解されたい。
一組のメモリアクセスユニット1064はメモリユニット1070と結合される。メモリユニット1070は、レベル2(L2)キャッシュユニット1076と結合されるデータキャッシュユニット1074と結合される、データTLBユニット1072を含む。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がスケジュールステージ1012を遂行する、5)物理レジスタファイルユニット1058およびメモリユニット1070がレジスタ読み出し/メモリ読み出しステージ1014を遂行し、実行クラスタ1060が実行ステージ1016を遂行する、6)メモリユニット1070および物理レジスタファイルユニット1058が書き戻し/メモリ書き込みステージ1018を遂行する、7)種々のユニットが例外処理ステージ1022に関わり得る、ならびに8)リタイアメントユニット1054および物理レジスタファイルユニット1058がコミットステージ1024を遂行する。
コア1090は、本明細書に記載されている命令を含む、1つ以上の命令セット(例えば、x86命令セット(より新しいバージョンに追加されたいくつかの拡張を含む)、サニーベール(Sunnyvale)、CAのミップステクノロジーズ(MIPS Technologies)のMIPS命令セット、サニーベール、CAのARMホールディングス(ARM Holdings)のARM命令セット(NEON等の任意追加の拡張を含む))をサポートしてよい。一実施形態では、コア1090は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするための論理を含み、それにより、多くのマルチメディアアプリケーションによって用いられる演算を、パックドデータを用いて遂行することを可能にする。
コアはマルチスレッド(演算またはスレッドの2つ以上の並列セットを実行する)をサポートしてよく、タイムスライスマルチスレッド、同時マルチスレッド(単一の物理コアが、その物理コアが同時にマルチスレッド化しているスレッドの各々のための論理コアを提供する)、あるいはそれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディング技術におけるもの等のタイムスライスフェッチおよびデコードとその後の同時マルチスレッド)を含む、種々の方法でそれを行ってよいことを理解されたい。
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて用いられてもよいことを理解されたい。プロセッサの図示の実施形態は、独立した命令およびデータキャッシュユニット1034/1074および共有L2キャッシュユニット1076も含むが、代替実施形態は、例えば、レベル1(Level 1、L1)内部キャッシュ、または複数のレベルの内部キャッシュ等の、命令およびデータの双方のための単一の内部キャッシュを有してもよい。実施形態によっては、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、キャッシュは全てコアおよび/またはプロセッサの外部にあってもよい。
具体的な例示的インオーダコアアーキテクチャ 図11A〜11Bは、インオーダコアアーキテクチャであって、このコアはチップ内のいくつかの(同じ種類および/または異なる種類の他のコアを含む)論理ブロックの1つになるであろう、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。論理ブロックは、用途に応じて、何らかの固定機能論理、メモリI/Oインタフェース、および他の必要なI/O論理を用い、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて通信する。
図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は、L1キャッシュ1106のL1データキャッシュ1106A部分、ならびにベクトルユニット1110およびベクトルレジスタ1114に関するさらなる詳細を含む。具体的には、ベクトルユニット1110は、整数、単精度浮動小数、および倍精度浮動小数命令のうちの1つ以上を実行する、16幅ベクトル処理ユニット(vector processing unit、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)専用論理1208が統合グラフィックスおよび/または科学(スループット)論理(1つ以上のコアを含んでよい)であって、コア1202A〜Nが1つ以上の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その2つの組み合わせ)であるCPU、2)コア1202A〜Nが、主としてグラフィックスおよび/または科学(スループット)向けの多数の専用コアであるコプロセッサ、ならびに3)コア1202A〜Nが多数の汎用インオーダコアである、コプロセッサが挙げられ得る。それゆえ、プロセッサ1200は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、ハイスループットメニーインテグレーテッドコア(high−throughput many integrated core、MIC)コプロセッサ(30個以上のコアを含む)、組み込みプロセッサ等の汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは1つ以上のチップ上に実装されてよい。プロセッサ1200は、例えば、BiCMOS、CMOS、またはNMOS等、多数の処理技術の任意のものを用いた1つ以上の基板の一部であってよく、および/またはその上に実装されてよい。
メモリ階層は、コア内部の1つ以上のレベルのキャッシュ、1つ以上の共有キャッシュユニット1206の組、および一組の統合メモリコントローラユニット1214と結合される外部メモリ(不図示)を含む。一組の共有キャッシュユニット1206は、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ等の、1つ以上の中間レベルキャッシュ、ラストレベルキャッシュ(last level cache、LLC)、および/またはこれらの組み合わせを含んでよい。一実施形態では、環状ベースの相互接続ユニット1212が、統合グラフィックス論理1208、一組の共有キャッシュユニット1206、およびシステムエージェントユニット1210/統合メモリコントローラユニット1214を相互接続するが、代替実施形態は、このようなユニットを相互接続する周知の技術をいくつ用いてもよい。一実施形態では、1つ以上のキャッシュユニット1206とコア1202−A〜Nとの間においてコヒーレンシが維持される。
実施形態によっては、コア1202A〜Nのうちの1つ以上はマルチスレッドの能力を有する。システムエージェント1210は、コア1202A〜Nを調整および操作するそれらの構成要素を含む。システムエージェントユニット1210は、例えば、出力調整装置(power control unit、PCU)および表示ユニットを含んでよい。PCUは、コア1202A〜Nおよび統合グラフィックス論理1208の電力状態の調整に必要な論理および構成要素であるか、またはそれらを含んでよい。表示ユニットは、1つ以上の外部接続ディスプレイを駆動するためのものである。
コア1202A〜Nはアーキテクチャ命令セットに関して同種または異種であってよい。すなわち、コア1202A〜Nのうちの2つ以上は実行同じ命令セットの能力を有してよく、一方、他のものはその命令セットのサブセットのみまたは異なる命令セットを実行する能力を有してよい。
例示的なコンピュータアーキテクチャ 図13〜16は例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(digital signal processor、DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および種々の他の電子デバイス用の当技術分野において周知の他のシステム設計および構成も好適である。概して、本明細書に開示されている通りのプロセッサおよび/または他の実行論理を組み込む能力を有する多様なシステムまたは電子デバイスが一般的に好適である。
次に図13を参照すると、図示されているのは、本発明の一実施形態によるシステム1300のブロック図である。システム1300は、コントローラハブ1320と結合される、1つ以上のプロセッサ1310、1315を含んでよい。一実施形態では、コントローラハブ1320は、グラフィックスメモリコントローラハブ(graphics memory controller hub、GMCH)1390および入力/出力ハブ(Input/Output Hub、IOH)1350(独立したチップ上にあってよい)を含む。GMCH 1390は、メモリ1340およびコプロセッサ1345が結合されるメモリコントローラおよびグラフィックスコントローラを含む。IOH 1350が入力/出力(I/O)デバイス1360をGMCH 1390に結合する。代替的に、メモリコントローラおよびグラフィックスコントローラの一方または両方は(本明細書に記載されているように)プロセッサ内部に統合され、メモリ1340およびコプロセッサ1345は、プロセッサ1310と、IOH 1350を備える単一のチップ内のコントローラハブ1320とに直接結合される。
図13では、追加プロセッサ1315の任意追加性が破線で表されている。各プロセッサ1310、1315は、本明細書に記載されている処理コアのうちの1つ以上を含んでよく、プロセッサ1200をいくらか変形したものであってよい。
メモリ1340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(phase change memory、PCM)、またはその2つの組み合わせであってよい。少なくとも1つの実施形態のために、コントローラハブ1320は、フロントサイドバス(frontside bus、FSB)等のマルチドロップバス、クイックパスインターコネクト(QuickPath Interconnect、QPI)等のポイントツーポイントインタフェース、または同様の接続1395を介してプロセッサ1310、1315と通信する。
一実施形態では、コプロセッサ1345は、例えば、ハイスループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサである。一実施形態では、コントローラハブ1320は統合グラフィックスアクセラレータを含んでよい。
物理リソース1310、1315の間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性等を含む様々な利点のメトリクスに関して、種々の相違がある。
一実施形態では、プロセッサ1310は、一般型のデータ処理演算を制御する命令を実行する。命令内にはコプロセッサ命令が組み込まれていてよい。プロセッサ1310は、これらのコプロセッサ命令を、付加コプロセッサ1345によって実行すべき型のものであると認識する。それに応じて、プロセッサ1310は、コプロセッサバスまたは他の相互接続部上において、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ1345に発行する。コプロセッサ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はそのバスコントローラユニットの一部としてポイントツーポイント(point−to−point、P−P)インタフェース1476および1478も含み、同様に、第2プロセッサ1480はP−Pインタフェース1486および1488を含む。プロセッサ1470、1480は、P−Pインタフェース回路1478、1488を用い、ポイントツーポイント(P−P)インタフェース1450を介して情報を交換してよい。図14に示されるように、IMC 1472および1482はプロセッサをそれぞれのメモリ、すなわちメモリ1432およびメモリ1434、に結合する。それぞれのメモリは、それぞれのプロセッサにローカルに付加された主メモリの一部であってよい。
プロセッサ1470、1480は各々、ポイントツーポイントインタフェース回路1476、1494、1486、1498を用い、個々のP−Pインタフェース1452、1454を介してチップセット1490と情報を交換してよい。チップセット1490は、高性能インタフェース1439を介してコプロセッサ1438と情報を任意選択で交換してよい。一実施形態では、コプロセッサ1438は、例えば、ハイスループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサである。
共有キャッシュ(不図示)がどちらかのプロセッサ内に含まれるか、または両プロセッサの外部に、P−P相互接続を介してプロセッサとなお接続されて含まれてよく、それにより、プロセッサが低電力モードに置かれると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納されてよい。
チップセット1490はインタフェース1496を介して第1バス1416と結合されてよい。一実施形態では、第1バス1416は、周辺装置相互接続(Peripheral Component Interconnect、PCI)バス、あるいはPCIエクスプレスバスまたは別の第3世代I/O相互接続バス等のバスであってよい。ただし、本発明の範囲はそのように限定されるわけではない。
図14に示されるように、種々のI/Oデバイス1414が、第1バス1416を第2バス1420に結合するバスブリッジ1418とともに、第1バス1416に結合されてよい。一実施形態では、コプロセッサ、ハイスループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、あるいは任意の他のプロセッサ等の、1つ以上の追加プロセッサ1415が第1バス1416に結合される。一実施形態では、第2バス1420はローピンカウント(low pin count、LPC)バスであってよい。一実施形態では、例えば、キーボードおよび/またはマウス1422、通信デバイス1427、ならびに命令/コードおよびデータ1430を含んでよいディスクドライブまたは他の大容量記憶デバイス等の記憶ユニット1428を含む、種々のデバイスが第2バス1420に結合されてよい。さらに、オーディオI/O 1424が第2バス1420に結合されてよい。他のアーキテクチャがあり得ることに留意されたい。例えば、図14のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスまたは他のこのようなアーキテクチャを実装してよい。
次に図15を参照すると、図示されているのは、本発明の一実施形態による第2のより具体的な例示的システム1500のブロック図である。図14および15における同様の要素は同様の参照符合を有し、図14の一部の態様は、図15の他の態様を不明瞭にすることを回避するために、図15から省かれている。
図15は、プロセッサ1470、1480は統合メモリおよびI/O制御論理(control logic、「CL」)1472および1482をそれぞれ含んでよいことを示している。それゆえ、CL 1472、1482は統合メモリコントローラユニットを含み、I/O制御論理を含む。図15は、メモリ1432、1434がCL 1472、1482と結合されることだけではなく、I/Oデバイス1514が制御論理1472、1482と結合されることも示している。レガシーI/Oデバイス1515がチップセット1490と結合されている。
次に図16を参照すると、示されているのは、本発明の一実施形態によるSoC 1600のブロック図である。図12における同様の要素は同様の参照符合を有する。さらに、破線の囲み線は、より高度のSoC上の任意追加の特徴である。図16では、相互接続ユニット1602は、1つ以上のコア1202A〜Nの組、および共有キャッシュユニット1206を含むアプリケーションプロセッサ1610、システムエージェントユニット1210、バスコントローラユニット1216、統合メモリコントローラユニット1214、統合グラフィックス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含んでよい1つ以上のコプロセッサ1620の組み、スタティックランダムアクセスメモリ(static random access memory、SRAM)ユニット1630、直接メモリアクセス(direct memory access、DMA)ユニット1632、および1つ以上の外部ディスプレイと結合するための表示ユニット1640と結合されている。一実施形態では、コプロセッサ1620は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組み込みプロセッサ、あるいは同様のもの等の、専用プロセッサを含む。
本明細書に開示されている機構の諸実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはこのような実装アプローチの組み合わせの形で実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性および不揮発性メモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、ならびに少なくとも1つの出力デバイスを備えるプログラム可能システム上で実行するコンピュータプログラムまたはプログラムコードとして実装されてよい。
本明細書に記載されている機能を遂行し、出力情報を生成するための命令を入力するために、図14に示されているコード1430等のプログラムコードが適用されてよい。出力情報は周知の方法で1つ以上の出力デバイスに適用されてよい。この用途のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(application specific integrated circuit、ASIC)、またはマイクロプロセッサ等の、プロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高レベル手続き形またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、所望の場合には、アセンブリまたは機械言語で実装されてもよい。実際には、本明細書に記載されている機構はいかなる特定のプログラミング言語にも範囲を限定されない。いずれにせよ、言語はコンパイラ型またはインタープリタ型言語であってよい。
少なくとも1つの実施形態の1つ以上の態様は、機械によって読み込まれると、本明細書に記載されている技術を遂行するための論理を機械に作らせる、プロセッサ内の種々の論理を代表する機械可読媒体上に格納された代表命令によって実装されてよい。「IPコア」としても知られるこのような代表は、有形の機械可読媒体上に格納され、論理またはプロセッサを実際に作る製作機械内にロードするために種々の顧客または製造工場に供給されてよい。
このような機械可読記憶媒体としては、限定されるわけではないが、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリーメモリ(compact disk read−only memories、CD−ROM)、コンパクトディスクリライタブル(compact disk rewritable、CD−RW)、および磁気光ディスクを含む任意の他の種類のディスク、リードオンリーメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラム可能リードオンリーメモリ(erasable programmable read−only memories、EPROM)、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ(electrically erasable programmable read−only memories、EEPROM)、相変化メモリ(PCM)等の半導体デバイス、磁気または光カード、あるいは電子命令の格納に適した任意の他の種類の媒体を含む記憶媒体等の、機械またはデバイスによって製造または形成される非一時的な有形の物品の機構が挙げられる。
したがって、本発明の諸実施形態は、本明細書に記載されている構造、回路、装置、プロセッサおよび/またはシステムの特徴を定義する、ハードウェア記述言語(Hardware Description Language、HDL)等の、命令を包含するかまたは設計データを包含する非一時的な有形の機械可読媒体も含む。このような実施形態はプログラム製品と呼ばれてもよい。
エミュレーション(バイナリトランスレーション、コードモーフィング等を含む) 場合によっては、命令をソース命令セットからターゲット命令セットに変換するために、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアによって処理されるべき1つ以上の他の命令に翻訳するか(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて)、モーフィングするか、エミュレートするか、または別の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせの形で実装されてよい。命令コンバータは、プロセッサ上、プロセッサ外、あるいは一部プロセッサ上および一部プロセッサ外にあってよい。
図17は、本発明の諸実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比させるブロック図である。図示の実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェア、あるいはこれらの種々の組み合わせの形で実装されてもよい。図17は、少なくとも1つのx86命令セットコアを備えるプロセッサ1716によってネイティブに実行され得るx86バイナリコード1706を生成するために、ハイレベル言語1702のプログラムが、x86コンパイラ1704を用いてコンパイルされてよいことを示している。少なくとも1つのx86命令セットコアを備えるプロセッサ1716は、少なくとも1つのx86命令セットコアを備えるインテルプロセッサと実質的に同じ結果を達成するために、(1)インテルx86命令セットコアの命令セットの相当の部分、あるいは(2)少なくとも1つのx86命令セットコアを備えるインテルプロセッサ上で走ることを目的としたアプリケーションまたは他のソフトウェアの目的コードバージョンを互換的に実行するかまたは別の方法で処理することによって、少なくとも1つのx86命令セットコアを備えるインテルプロセッサと実質的に同じ機能を遂行することができる任意のプロセッサを表す。x86コンパイラ1704は、追加の連係処理を用いて、または用いずに、少なくとも1つのx86命令セットコアを備えるプロセッサ1716上で実行することができるx86バイナリコード1706(例えば、目的コード)を生成するコンパイラを表す。同様に、図17は、少なくとも1つのx86命令セットコアを備えないプロセッサ1714(例えば、サニーベール、CAのミップステクノロジーズのMIPS命令セットを実行し、かつ/またはサニーベール、CAのARMホールディングスのARM命令セットを実行するコアを備えるプロセッサ)によってネイティブに実行され得る代替命令セットバイナリコード1710を生成するために、ハイレベル言語1702のプログラムが、代替の命令セットコンパイラ1708を用いてコンパイルされてよいことを示している。命令コンバータ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の命令の方が、より多くの演算が遂行されることを伴うという点で、第1の命令の方がセットの各命令よりも複雑である。
実施例3は、実施例1または2に記載のプロセッサを含み、任意選択で、プロセッサが、命令セットのいずれの命令を実施するにもマイクロコードを用いない。
実施例4は、実施例1〜3のいずれかに記載のプロセッサを含み、任意選択で、1つ以上の命令のセットの各命令が、第1の命令と同じ命令セットのものである。
実施例5は、実施例1〜4のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識デコード後命令プロセッサ論理が、1つ以上の制御信号を処理する間に生じる例外条件をエミュレーション論理に報告するためのエミュレーションモード認識例外条件ハンドラ論理を含む。
実施例6は、実施例1〜5のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識例外条件ハンドラ論理が第1の命令のアドレスをスタック内に格納する。
実施例7、実施例1〜6のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識例外条件ハンドラ論理が、例外条件の指示、および例外条件のためのエラーコードを、エミュレーション論理と結合された1つ以上のレジスタ内に格納する。
実施例8は、実施例1〜7のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識例外条件ハンドラ論理が、例外条件に応答して制御を例外条件ハンドラに直接移行することを回避し、エミュレーション論理の1つ以上の命令が制御を例外条件ハンドラに移行する。
実施例9は、実施例1〜8のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識デコード後命令プロセッサ論理が、エミュレーションモードの時には、1つ以上の制御信号によるリソースおよび情報の少なくとも1つへのアクセスを、エミュレーションモードでない時とは異なるように制御するためのエミュレーションモード認識アクセス制御論理を含む。
実施例10は、実施例1〜9のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションモード認識アクセス制御論理が、エミュレーションモードの時にはリソースおよび情報の当該少なくとも1つへのアクセスを許可し、エミュレーションモードでない時にはリソースおよび情報の当該少なくとも1つへのアクセスを阻止する。
実施例11は、実施例1〜10のいずれかに記載のプロセッサを含み、任意選択で、リソースおよび情報の少なくとも1つが、セキュリティ論理、安全な情報、暗号化論理、解読論理、乱数発生器論理、オペレーティングシステムによるアクセスのために確保される論理、オペレーティングシステムによるアクセスのために確保されるメモリの部分、およびオペレーティングシステムによるアクセスのために確保される情報のうちの少なくとも1つを含む。
実施例12は、実施例1〜11のいずれかに記載のプロセッサを含み、任意選択で、リソースおよび情報の少なくとも1つが、別の論理プロセッサおよび別の物理プロセッサの1つの内部のリソースおよび情報の少なくとも1つを含む。
実施例13は、実施例1〜12のいずれかに記載のプロセッサを含み、任意選択で、1つ以上の命令のセットが少なくとも3つの命令を含む。
実施例14は、第1の命令を受信することと、第1の命令をエミュレートすると決定することと、を含むプロセッサ内の方法である。本方法は、第1の命令をエミュレートするために用いられるべき1つ以上の命令のセットを受信する段階も含む。本方法は、エミュレーションモードの時には、セットの命令から派生した1つ以上の制御信号を、エミュレーションモードでない時とは異なるように処理する段階も含む。
実施例15は、実施例14に記載の方法を含み、任意選択で、第1の命令を受信する段階が、1つ以上の命令のセットの各命令よりも複雑である第1の命令を受信する段階を含む。
実施例16は、実施例14または15に記載の方法を含み、任意選択で、1つ以上の命令のセットを受信する段階が、各々、第1の命令と同じ命令セットのものである1つ以上の命令を受信する段階を含む。
実施例17は、実施例14〜16のいずれかに記載の方法を含み、任意選択で、処理が、1つ以上の制御信号を処理している間に生じる例外条件をエミュレーション論理に報告する段階を含む。さらに、任意選択で、制御を例外条件ハンドラに移行するためのエミュレーション論理の1つ以上の命令を実行する段階を含む。
実施例18は、実施例15〜17のいずれかに記載の方法を含み、任意選択で、報告が、例外条件の指示を1つ以上のレジスタ内に格納する段階を含む。さらに、任意選択で、第1の命令のアドレスをスタック内に格納する段階を含む。
実施例19は、実施例15〜18のいずれかに記載の方法を含み、任意選択で、処理が、エミュレーションモードの時には、1つ以上の制御信号によるリソースおよび情報の少なくとも1つへのアクセスを、エミュレーションモードでない時とは異なるように制御する段階を含む。
実施例20は、実施例15〜19のいずれかに記載の方法を含み、任意選択で、アクセスを異なるように制御する段階が、エミュレーションモードの時にはリソースおよび情報の当該少なくとも1つへのアクセスを許可する段階を含む。さらに、任意選択で、エミュレーションモードでない時にはリソースおよび情報の当該少なくとも1つへのアクセスを阻止する段階を含む。
実施例21は、相互接続部と、この相互接続部と結合されるプロセッサと、を含む命令処理システムである。プロセッサは、第1の命令を受信し、第1の命令はエミュレートされるべきであると判定するためのデコード論理を含む。プロセッサは、デコード論理と結合されるエミュレーションモード認識デコード後命令プロセッサ論理も含む。エミュレーションモード認識デコード後命令プロセッサ論理は、エミュレーションモードの時には、第1の命令をエミュレートするために用いられる1つ以上の命令のセットの命令からデコードされた1つ以上の制御信号を、エミュレーションモードでない時とは異なるように処理する。システムは、相互接続部と結合されるダイナミックランダムアクセスメモリ(DRAM)も含む。
実施例22は、実施例21のシステムを含み、任意選択で、エミュレーションモード認識デコード後命令プロセッサ論理が、1つ以上の制御信号を処理する間に生じる例外条件をエミュレーション論理に報告するためのエミュレーションモード認識例外条件ハンドラ論理を含む。
実施例1は、所与のオペコードを有する第1の命令を受信するためのデコーダを含むプロセッサである。デコーダは、所与のオペコードは第1の意味を有するのか、それとも第2の意味を有するのかをチェックするためのチェック論理を含む。デコーダは、所与のオペコードが第1の意味を有する場合には、第1の命令をデコードし、1つ以上の対応する制御信号を出力するためのデコード論理も含む。デコーダは、所与のオペコードが第2の意味を有する場合には、第1の命令のエミュレーションを誘起するためのエミュレーション誘起論理も含む。
実施例2は、実施例1に記載のプロセッサを含み、任意選択で、第2の意味は第1の意味よりも古い。
実施例3は、実施例1または2に記載のプロセッサを含み、任意選択で、第2の意味が、非推奨となる過程にあるオペコード定義を含む。
実施例4は、実施例1〜3のいずれかに記載のプロセッサを含み、任意選択で、所与のオペコードは第1の意味を有するのか、それとも第2の意味を有するのかについての指示を格納するための、デコーダと結合される記憶位置をさらに含み、チェック論理が、指示を判定するために記憶位置をチェックする。
実施例5は、実施例1〜4のいずれかに記載のプロセッサを含み、任意選択で、記憶位置がプログラムローダモジュールにとって、このプログラムローダモジュールが指示を記憶位置内に格納することを可能にするべく、アクセス可能である。
実施例6は、実施例1〜5のいずれかに記載のプロセッサを含み、任意選択で、記憶位置からの指示をプロセッサ特徴レジスタに格納するための、記憶位置と結合される論理をさらに含み、プロセッサ特徴レジスタは第1の命令の命令セットのプロセッサ特徴識別命令によって可読である。
実施例7は、実施例1〜6のいずれかに記載のプロセッサを含み、任意選択で、複数の指示を格納するための、デコーダと結合される複数の記憶位置をさらに含み、複数の指示の各々は複数のオペコードのうちの異なるオペコードに対応し、複数の指示の各々は、各それぞれのオペコードは第1の意味を有するのか、それとも第2の意味を有するのかを指示する。
実施例8は、実施例1〜7のいずれかに記載のプロセッサを含み、任意選択で、エミュレーションを誘起するための論理が、エミュレーションモードを設定するための論理を含む。
実施例9は、実施例1〜8のいずれかに記載のプロセッサを含み、任意選択で、デコーダと結合されるエミュレーション論理をさらに含み、このエミュレーション論理は、所与のオペコードが第2の意味を有する場合には、エミュレーション誘起論理がエミュレーションを誘起するのに応答して、第1の命令をエミュレートするための1つ以上の命令のセットをデコーダに提供する。
実施例10は、実施例1〜9のいずれかに記載のプロセッサを含み、任意選択で、セットの各命令が、第1の命令と同じ命令セットのものである。
実施例11は、実施例1〜10のいずれかに記載のプロセッサを含み、任意選択で、プロセッサが、命令セットのいずれの命令を実施するにもマイクロコードを用いない。
実施例12は、実施例1〜11のいずれかに記載のプロセッサを含み、任意選択で、特権レベル論理およびリングレベル論理の一方がオペレーティングシステムモードを指示する時には、デコーダに、所与のオペコードのための非推奨の意味の代わりに新しい意味を強制的に使わせる論理をさらに含む。
実施例13は、所与のオペコードを有する第1の命令を受信する段階と、所与のオペコードは第1の意味の代わりに第2の意味を有すると判定する段階とを含むプロセッサ内の方法である。本方法は、所与のオペコードは第2の意味を有するとの判定に応答して第1の命令をエミュレートすると決定する段階も含む。
実施例14は、実施例13に記載の方法を含み、任意選択で、判定が、所与のオペコードは、第1の意味よりも古い第2の意味を有すると判定する段階を含み、第2の意味は非推奨となる過程にある。
実施例15は、実施例13または14に記載の方法を含み、任意選択で、判定する段階が、所与のオペコードは第2の意味を有するとの指示を記憶位置から読み出す段階を含む。
実施例16は、実施例13〜15のいずれかに記載の方法を含み、任意選択で、所与のオペコードは第2の意味を有するとの指示を、プロセッサの命令セットのプロセッサ特徴識別命令によって可読であるプロセッサ特徴レジスタ内に格納する段階をさらに含む。
実施例17は、実施例13〜16のいずれかに記載の方法を含み、任意選択で、所与のオペコードが第2の意味を有する場合には、第1の命令をエミュレートするために用いられる1つ以上の命令のセットをデコードする段階を含む第1の命令をエミュレートする段階をさらに含む。
実施例18は、実施例13〜17のいずれかに記載の方法を含み、任意選択で、命令のセットをデコードする段階が、第1の命令と同じ命令セットのものである1つ以上の命令をデコードする段階を含む。
実施例19は、実施例1〜18のいずれかに記載の方法を含み、任意選択で、命令セットのいずれの命令を実施するにもマイクロコードを用いないプロセッサ内で遂行される。
実施例20は、機械によって実行されると、機械に演算を遂行させる命令を格納する非一時的機械可読記憶媒体を含む製造品である。演算は、所与のオペコードを有する第1の命令は、ソフトウェアモジュールからプロセッサによって実行される時に、ソフトウェアモジュールのメタデータを調べることによって、第1の意味の代わりに第2の意味を有するべきであると判定する段階を含む。演算は、所与のオペコードを有する第1の命令は第2の意味を有するべきであるとの指示をプロセッサの状態内に格納する段階も含む。
実施例21は、実施例20に記載の製造品を含み、任意選択で、機械可読記憶媒体が、機械によって実行されると、機械に、所与のオペコードの第2の意味を用いるソフトウェアライブラリの部分を、所与のオペコードの第1の意味を用いるソフトウェアライブラリの別の部分の代わりに選択する段階と、第2の意味は非推奨の意味である、ソフトウェアライブラリの選択部分をソフトウェアモジュールに提供する段階とを含む演算を遂行させる命令をさらに格納する。
実施例22は、実施例20または21に記載の製造品を含み、任意選択で、機械可読記憶媒体が、機械によって実行されると、機械に、ソフトウェアモジュールの古さに基づいて所与のオペコードは第2の意味を有すると判定する段階を含む演算を遂行させる命令をさらに格納する。
実施例23は、実施例20〜22のいずれかに記載の製造品を含み、任意選択で、機械可読記憶媒体が、機械によって実行されると、機械に、オブジェクトモジュールフォーマット内のフラグを調べ、フラグ内の指示をプロセッサのレジスタ内に格納する段階を含む演算を遂行させる命令をさらに格納する。
実施例24は、相互接続部と、この相互接続部と結合されるプロセッサと、を含む命令処理システムである。プロセッサは、所与のオペコードを有する第1の命令を受信する。プロセッサは、所与のオペコードは第1の意味を有するのか、それとも第2の意味を有するのかをチェックするためのチェック論理を含む。プロセッサは、所与のオペコードが第1の意味を有する場合には、第1の命令をデコードし、1つ以上の対応する制御信号を出力するためのデコード論理を含む。プロセッサは、所与のオペコードが第2の意味を有する場合には、第1の命令のエミュレーションを誘起するためのエミュレーション誘起論理を含む。システムは、相互接続部と結合されるダイナミックランダムアクセスメモリ(DRAM)も含む。
実施例25は実施例24の主題を含み、任意選択で、所与のオペコードが第2の意味を有する場合には、第1の命令をエミュレートするために第1の命令と同じ命令セットの1つ以上の命令のセットをデコーダに提供するためのエミュレーション論理をさらに含む。
実施例26は、実施例13〜19のいずれか1つの方法を遂行するための装置を含む。
実施例27は、実施例13〜19のいずれか1つの方法を遂行するための手段を含む装置を含む。
実施例28は、実質的に本明細書に記載されている通りの方法を遂行するための装置を含む。
実施例29は、本明細書に記載されている通りの方法を遂行するための手段を含む装置を含む。
明細書および請求項では、用語「結合される(coupled)」および「接続される(connected)」がそれらの派生語とともに使用されている場合がある。これらの用語は互いに同義語として意図されているのではないことを理解されたい。むしろ、特定の実施形態では、「接続される」は、2つ以上の要素が互いに物理的または電気的に直接接触していることを指示するために使用されていてよい。「結合される」は、2つ以上の要素が物理的または電気的に接触していることを意味してよい。しかし、「結合される」は、2つ以上の要素が互いに直接接触してはいないが、それでもなお互いに協働または相互作用することを意味する場合もある。例えば、第1構成要素と第2構成要素とが介在構成要素を通じて互いに結合されてよい。図では、双方向接続および結合を示すために双方向矢印が用いられている。
明細書および請求項では、用語「論理」が使用されている場合がある。本明細書で使用するとき、論理は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせを含んでよい。論理の例としては、集積回路機構、特定用途向け集積回路、アナログ回路、デジタル回路、プログラム化論理デバイス、命令を含むメモリデバイス、等が挙げられる。実施形態によっては、ハードウェア論理は、場合によっては他の回路機構構成要素を伴うトランジスタおよび/またはゲートを含んでよい。
用語「および/または(and/or)」が使用されている場合がある。本明細書で使用するとき、用語「および/または」は、一方または他方あるいは両方を意味する(例えば、Aおよび/またはBは、AまたはBあるいはAおよびBの両方を意味する)。
上述の記載では、説明の目的で、本発明の諸実施形態の完全な理解を提供するために数多くの特定の細部が説明された。しかし、1つ以上の他の実施形態は、これらの特定の細部の一部を用いずに実施されてもよいことは当業者には明らかであろう。上述の特定の実施形態は、本発明を限定するために提供されているのではなく、実施形態例を通してそれを説明するために提供されている。本発明の範囲は、具体例によって定まるのではなく、添付の請求項によってのみ定まる。他の例では、説明の理解を不明瞭にすることを回避するために、周知の回路、構造、デバイス、および演算はブロック図の形式で、または細部を有せずに示されている。
適切と考えられる場合には、別に指定されていない限り、または明白に分かるようでない限り、同様または同じ特性を任意選択的に有し得る対応または類似要素を指示するために、参照符合、または参照符合の末端部は図の間で繰り返されている。複数の構成要素が記載されている場合、一般的に、それらは単一の構成要素内に組み込まれてもよい。他の場合には、単一の構成要素が記載されている場合、一般的に、それは複数の構成要素に分割されてもよい。
種々の演算および方法が説明されている。フロー図では、方法の一部は比較的基本的な形で記載されているが、演算が方法に任意に追加されてもよく、および/またはそれらから削除されてもよい。加えて、フロー図は実施形態例による演算の特定の順序を示しているが、その特定の順序は例示的なものである。代替実施形態は、必要に応じて、異なる順序で演算を遂行する、一部の演算を組み合わせる、一部の演算を重複させるなどしてよい。
一部の実施形態は、機械可読媒体を含む製造品(例えば、コンピュータプログラム製品)を含む。媒体は、機械によって読み取り可能である形式で情報を提供する、例えば格納する、機構を含んでよい。機械可読媒体は、機械によって実行されると、および/または実行された時に、本明細書に開示されている1つ以上の演算、方法、または技術を機械に遂行させ、ならびに/あるいはそれらを遂行する機械をもたらす1つ以上の命令を提供するか、またはそれらをその上に格納させてよい。好適な機械の例としては、プロセッサ、命令処理装置、デジタル論理回路、集積回路等が挙げられるが、これらに限定されない。好適な機械のさらに別の例としては、このようなプロセッサ、命令処理装置、デジタル論理回路、または集積回路を組み込むコンピューティングデバイスおよび他の電子デバイスが挙げられる。このようなコンピューティングデバイスおよび電子デバイスの例としては、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータおよびスイッチ)、携帯インターネットデバイス(Mobile Internet device、MID)、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、およびビデオゲームコントローラが挙げられるが、これらに限定されない。
実施形態によっては、機械可読媒体は有形かつ/または非一時的機械可読記憶媒体を含んでよい。例えば、有形かつ/または非一時的機械可読記憶媒体としては、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、光学式データ記憶デバイス、CD−ROM、磁気ディスク、磁気光ディスク、リードオンリーメモリ(ROM)、プログラム可能ROM(PROM)、消去可能プログラム可能ROM(EPROM)、電気的消去可能プログラム可能ROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス、または同様のものが挙げられる。非一時的機械可読記憶媒体は一時的な伝播信号からなるものではない。
本明細書全体にわたる、例えば、「一実施形態」、「一実施形態」、または「1つ以上の実施形態」への言及は、特定の特徴が本発明の実施に含まれ得ることを意味することも理解されたい。同様に、本明細書では、本開示を合理化し、種々の本発明の態様を理解するのに役立つために、種々の特徴が時として単一の実施形態、図、またはその説明内にグループ化してまとめられていることを理解されたい。しかし、この開示方法は、本発明が各請求項において明示的に列挙されているよりも多くの特徴を必要とするという意図を反映するものと解釈されない。むしろ、添付の特許請求の範囲が反映している通り、本発明の態様は、単一の開示実施形態の全ての特徴よりも少なくてもよい。それゆえ、発明を実施するための形態に続く特許請求の範囲は、本明細書において、この発明を実施するための形態に明示的に組み込まれており、各請求項は本発明の別個の実施形態として自立している。