(57)【要約】【課題】  実時間性能を改善することが可能なレガシーマイクロプロセッサ命令のエミュレーションシステム及び方法を提供する。【解決手段】  本発明は、Ｃ／Ｃ＋＋のような高水準コンパイラ言語を実行するレガシーマイクロプロセッサの命令をエミュレートする方法及びシステムであって、コンパイルコードがデータを構造化させかつ命令セグメントが分離される。前記システムの実時間性能を改善するため、レガシー命令は、可能であればホストプロセッサの等価命令に直接的に変換される。付加的な技術がシステムの実時間性能をさらに向上させるために選択的に用いられる。ホスト命令に対してレガシー命令の直接変換を用いることにより、本発明に従ったエミュレーションシステムは、関連したモデムのＲＩＳＣマイクロプロセッサのために実時間性能の向上を提供する。【選択図】          図１
2004272922.tif 000002
【特許請求の範囲】
【請求項１】
（ａ）１以上のレガシー命令のオブジェクトコードを、リング０命令を定義する等価関数で１以上のホストプロセッサ命令のオブジェクトコードに変換するステップと、
（ｂ）レガシー命令を前記リング０命令に置き換えるステップとを含む、ホストマイクロプロセッサを備えたレガシーマイクロプロセッサの命令のエミュレート方法。
【請求項２】
ホストレジスタに対応する前記レガシー命令に関連したレジスタを再変換するステップとをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
複数のホスト命令を利用するステップをさらに含み、当該複数のホスト命令は、前記１以上のレガシー命令と置き換えられるために一緒に実行されてリング１命令を定義する１つのレガシー命令と同じ機能を果たすことを特徴とする請求項１に記載の方法。
【請求項４】
複数のホスト命令を利用するステップをさらに含み、当該複数のホスト命令は、前記１以上のレガシー命令と置き換えられるために一緒に実行されて１つのスクラッチパッドレジスタと同じ機能を果たすが、リング２命令を定義する１以上のスクラッチパッドレジスタの使用を要求することを特徴とする請求項３に記載の方法。
【請求項５】
高水準言語でエミュレートされることのみが可能な、リング３命令を定義するレガシー命令をエミュレートするステップをさらに含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記リング１命令のための命令ハンドラーを供給することをさらに含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記リング２命令のための命令ハンドラーを供給することをさらに含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記リング３命令のための命令ハンドラーを供給することをさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記命令ハンドラーは、前記リング０命令からアドレス空間を分離するために変換されることを特徴とする請求項８に記載の方法。
【請求項１０】
前記エミュレートされた命令は、リング０命令及び無条件分岐命令を含む命令ストリームを、前記リング１、リング２、及びリング３命令のための命令ハンドラーへ形成することを特徴とする請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レガシー（legacy）マイクロプロセッサの命令をエミュレート（emulate：模倣）するための方法及び装置に関し、さらに詳しくは、３２ビットマイクロプロセッサのようなレガシーマイクロプロセッサのためのエミュレーションシステムに関するものである。それは、Ｃ／Ｃ＋＋のような高水準コンパイラ言語を実行し、例えば縮小命令セット・コンピュータ（ＲＩＳＣ）マイクロプロセッサにおいてそうであるように、データ及び命令セグメントが構造化されるのと同様に、コンパイルコードが構造化される。この場合、可能であれば、システムの実時間性能を改善するために、レガシー命令がホストプロセッサの等価命令に直接的に変換される。
【背景技術】
【０００２】
マイクロプロセッサは、(コンピュータチップの)命令セットアーキテクチャ（ＩＳＡ）で構成されることが知られている。このＩＳＡは特定のマイクロプロセッサ用の命令セットを判断する。アプリケーションプログラムはマイクロプロセッサによって実行され、比較的高いレベルの言語で書かれるのが普通である。次に、それは、特定のマイクロプロセッサ用の命令セットと互換性のある機械語にコンパイルされる。
【０００３】
現存する多数のマイクロプロセッサが経年によって陳腐化し、そしてこれに対応する処理速度の遅れのため、時代遅れの現マイクロプロセッサ（以下、レガシーマイクロプロセッサと称する）を新しいマイクロプロセッサ（以下、ホストマイクロプロセッサと称する）に置換えたいという要望がしばしばある。残念ながら、殆どの場合、ホストマイクロプロセッサの命令セットは、特定のアップグレードに依存していることからレガシーマイクロプロセッサの命令セットと互換性がない。
【０００４】
この問題を解決する１つの方法は、現存のアプリケーションプログラムをホストマイクロプロセッサの命令セットを考慮に入れて書き直すことである。このような手法は相当に厄介であるとともにかなり高価になる。命令セットの非互換性を避けて機能させるために、レガシーマイクロプロセッサの命令をエミュレートするソフトウェアが知られている。このようなシステムはしばしばエミュレーションシステムと称される。最新で高速なホストマイクロプロセッサによって実行されるレガシーマイクロプロセッサ用の命令セット語で書かれたアプリケーションプログラムを利用できるようにするため、このエミュレーションシステムは、レガシーマイクロプロセッサの命令セットをエミュレートすることが知られている。
【０００５】
多くの既知なエミュレーションシステムでは、レガシー命令がホストマイクロプロセッサによって取り出されると、次に、レガシー命令を解釈するルックアップ・テーブルが使用される。各レガシー命令がこのようなルックアップ・テーブルを使用するエミュレーションシステムで解釈されなければならないことから、キャッシュメモリを組み込んだシステムが、かなり高い可能性で起きるキャッシュミスに悩まされていることが知られていて、このキャッシュミスはシステムのスループット全体を減少させている。
【０００６】
エミュレーションシステムのスループットまたは速度を改善するため、普通に所有された米国特許Ｎｏ．６,０４１,４０２号は、ダイレクトベクトル型レガシー命令セットのためのエミュレーションシステムを開示している。レガシー命令を取り出して、ソフトウェア命令に解釈することよりもむしろ、前記ダイレクトベクトル型レガシー命令セットのエミュレーションシステムが、レガシー命令をエミュレートするソフトウェアルーチンに対してダイレクトベクトルを取り出している。前記ダイレクトベクトルを取り出すことによって、レガシー命令を解釈するためのルックアップ・テーブルを要求することを除去している。ルックアップ・テーブルへのアクセスがこのようなシステムで除去されることから、キャッシュミスの可能性が大いに減少し、その結果、システムのスループットが増加する。残念ながら、このダイレクトレガシー命令セットのエミュレーションは、３２ビットマイクロプロセッサのような最新のマイクロプロセッサの場合、相当に大きな実行オーバヘッドを要求する。したがって、既知のエミュレーションシステムと比較して、実時間性能を改善することが可能なレガシーマイクロプロセッサ命令のエミュレート用エミュレーションシステム及び方法に対する要求がある。
【０００７】
（発明の概要）
簡潔にいうと、本発明は、Ｃ／Ｃ＋＋のようなコンパイル型の高水準言語を実行する、レガシーマイクロプロセッサ命令を解釈するための方法及びシステムに関するものであり、コンパイルされたコードは、例えば、縮小命令セット・コンピュータ（ＲＩＳＣ）マイクロプロセッサにおいてそうであるように、データ及び命令セグメントが分離されるように構成される。システムの実時間性能を改善するため、レガシー命令はホストプロセッサの等価命令に直接的に変換される。システムの実時間性能をさらに上げるため、付加的な手法が選択的に用いられる。レガシー命令とホストプロセッサ命令との間で１対１の正確な整合を行うことができないとき、命令ハンドラー（handler）は、置き換えられたレガシー命令と同じ機能を結局は実行する２以上のホストプロセッサ命令で変換する。１つのホスト命令でエミュレートされることができないレガシー命令のために、これらの命令は、幾つかのホスト命令を含み、かつスクラッチパッド（作業用）レジスタの使用を組み込んだ命令ハンドラーによってエミュレートされる。ホストプロセッサのアセンブリ言語では容易に処理することができないレガシーマイクロプロセッサのアーキテクチャ構造を含むレガシー命令のために、命令ハンドラーは、Ｃ／Ｃ＋＋コードのような高水準言語で形成される。ホスト命令に対するレガシー命令の直接変換、及び１またはそれ以上の前述したエミュレーション手法を用いることにより、本発明に関するエミュレーションシステムは、最新のＲＩＳＣマイクロプロセッサの実時間性能を向上させることを提供する。
【０００８】
（発明の詳細）
本発明は、Ｃ／Ｃ＋＋、Ｆｏｒｔｒａｎ、またはＡＤＡのようなコンパイル型高水準言語を実行する特有なカテゴリーのレガシーマイクロプロセッサ命令をエミュレートするための方法及び装置に関するものである。このコンパイルされたコードは、データ及び命令セグメントが分離されるように構造化されるのが典型的である。また、コンパイルされたコードは、呼び出し及び連結規則、並びにレジスタ使用規則の手続きのような事項を記述する他のプラットフォームの特定アプリケーションバイナリーインタフェース（ＡＢＩ）と一致する。
【０００９】
本発明は、他の３２ビットＲＩＳＣマイクロプロセッサを用いる３２ビットＲＩＳＣマイクロプロセッサのエミュレーションに関する。ここでのホストマイクロプロセッサは、エミュレーションプログラムを実行するプロセッサを表す。レガシープロセッサという用語はエミュレートされるプロセッサを特定するために用いられる。
【００１０】
以下の４つのカテゴリーのうちの１以上に類別されるレガシー命令を使用できるようにするため、本発明に従ったエミュレーション手法は、ホストプロセッサ及びレガシープロセッサ間の類似性を仮定する：
・リング０−ここでのレガシー命令は、同じ機能を果たす単一ホストプロセッサ命令に置き換えられることができる。命令の操作コードを修正すること、及び命令フィールドを並べ替えることは、一般的に、すべてがこのカテゴリーにとって必須である。
・リング１−本タイプのレガシー命令は、同じ機能を果たす２以上のホストプロセッサ命令と置き換えられることができ、かつ演算を行う１以上のスクラッチパッド（作業用）レジスタを要求しない。
・リング２−ここでのレガシー命令は、同じ機能を果たす２以上のホストプロセッサ命令と置き換えられることができるが、演算を行う１以上のスクラッチパッドレジスタを要求する。
・リング３−ここでのレガシー命令は、一般的にレガシーマイクロプロセッサの高度なアーキテクチャ機構に関係し、さらに、あまりに複雑すぎてホストプロセッサのアセンブリ言語のみを利用して実行されることが不可能な命令に関係している。これらの命令はＣ／Ｃ＋＋のような高水準言語でほぼ完全に処理される。
【００１１】
レガシープロセッサで書かれたプログラムを実行するホストプロセッサを利用できるようにするため、レガシープロセッサのバイナリー命令は、前述した４つのカテゴリーの１つのホストプロセッサバイナリー命令に解釈されなければならない。単純な算術（すなわち、加算、減算、乗算）、論理演算（すなわち、論理的なａｎｄ、ｏｒ、ｎｏｔ）、及びデータ移動（すなわち、ロード及びストア）のようなすべてのマイクロプロセッサによって実行される多数の演算がある。これら命令の多くは非常に類似し、かつＲＩＳＣマイクロプロセッサの異なる銘柄及び／または型の間で同一であり、かつ多くのアプリケーションプログラム中で頻繁にあらわれる傾向がある。このため、ホストマイクロプロセッサとレガシーマイクロプロセッサ間の命令セットにおける類似性の利点を用いるとともに、リング０のカテゴリーにおいて説明するような直接変換を利用することによって、可能なときはいつでもシステムの実時間性能が大幅に改善されるだろう。
【００１２】
正確な整合が行われないときは、例えば、リング１及びリング２として類別されたレガシー命令であるような、置き換えられたレガシー命令と同じ機能を結局は実行する２以上のホストマイクロプロセッサ命令から成り立つレガシー命令ハンドラーに対して、そのレガシー命令が無条件分岐命令に置き換えられる。ホストマイクロプロセッサの分岐予測能力が優れていることから、無条件分岐の使用はシステムの性能を維持することを助ける。レガシーマイクロプロセッサの高度な機構を含む場合や、またはホストプロセッサのアセンブリ言語で容易に処理することができない高度な命令のために、リング３のカテゴリーにある命令はＣ／Ｃ＋＋のような高水準言語に拡張され、高水準な演算を行う。
【００１３】
リング０、リング１、及びリング２の性能が優れていることを維持するためと、レガシーマイクロプロセッサとホストマイクロプロセッサの間でレガシー使用規則が異なることのために、レガシーレジスタはホストレジスタと等価な対応した機能に再変換される。例えば、パワーＰＣのホストマイクロプロセッサ用のスタックポインタはｒ１であり、一方で、ＭＩＰＳ  Ｒ４４００マイクロプロセッサ用のスタックポインタはｒ２９である。
公知のエミュレーションシステムが、メモリ内のレガシーレジスタを維持するものとして知られているが、それはレガシーレジスタ値を演算するためにメモリアクセス及び付加的なホスト命令を要求し、これにより実時間性能が実質的に減少してしまう。このため、レガシーレジスタをホストプロセッサレジスタに再変換することにより、公知のエミュレーションシステムと較べて実時間性能を向上させている。
【００１４】
前記発明は、レガシープロセッサ及びパワーＰＣホストプロセッサ（http://www/Motorola.com/powerpc）として、ＭＩＰＳテクノロジー社（http://www.mips.com）による３２ビットＲ４４００ＲＩＳＣマイクロプロセッサの項に記載されている。しかしながら、前述したように、本発明の原理は、ホストプロセッサ命令に直接的に変換されることが可能なレガシープロセッサ命令において、互換性があるどのマイクロプロセッサにも適用できることを特徴とするものである。互換性のあるホスト／レガシープロセッサの組み合わせでは、命令間での１：１整合の数が相当大きいことが知られている。
【００１５】
（システムの概要）
本発明に従ったエミュレーションシステム及び方法の上位概念でのブロック図が図１に示されており、その全体は符号２０として特定されている。前述したように、本発明に従ったエミュレーションシステム及び方法は、ボックス２２及びボックス２４によって示されるような、命令及びデータが分離されるレガシーマイクロプロセッサが使用される場合に大きな影響を及ぼす。ファイルローダ２６は、その全体が符号２８で特定されているレガシープログラムを突き止める。ファイルローダは、本技術分野において公知なものである。ファイルローダ２６は、レガシーファイルのフォーマットを読み出し、そのレガシーバイナリファイルを取り出す。図１に示すように、ファイルローダ２６は、レガシーデータファイル２４とともにレガシー命令２２の両方を取り出す。これらのレガシー命令及びデータファイル２２，２４は、ディスク、読出し専用記憶素子に含まれたり、ネットワーク上で取り出されたりする。前記レガシーデータ２４が静的な場合、それはホストマイクロプロセッサプログラムに関連したレガシーデータメモリ空間３０に単純に複写される。あるいはまた、プログラム実行時に動的に生成されるデータ部のためのレガシーデータが生成されかつ初期化される。
【００１６】
レガシー命令２２が、ファイルローダ２６によってクラック変換オブジェクト３２へ供給される。クラック変換オブジェクト３２は、詳細は後述するが、レガシー及びホスト命令セットアーキテクチャに固有である。また詳細は後述するが、クラック変換オブジェクト３２は、各レガシー命令２２を解析し、かつ前述した典型的な４つのカテゴリー（すなわち、リング０、リング１、リング２、及びリング３）に従ってその命令を類別する。図１に示すように、リング１−３命令は、リング０メモリ空間から分離したハンドラーメモリ空間に置かれる。このリング０命令は、クラック変換オブジェクト３２によってホストプロセッサメモリ空間３４に直接的に変換される。他のすべての命令は、命令ハンドラー３６へ変換される。
【００１７】
（クラック変換オブジェクト）
クラック変換オブジェクト３２は、ファイルローダ２６から受信した各レガシーバイナリ命令を１以上のホストプロセッサ命令へ変換する。前述したように、ここで述べられかつ図示されたクラック変換オブジェクト３２は、パワーＰＣＧ３／Ｇ４プロセッサの方法により、レガシーＭＩＰＳ  Ｒ４４００ＲＩＳＣマイクロプロセッサの命令をエミュレートするためのものである。
【００１８】
図２に示すように、クラック変換オブジェクト３２は、ステップ４０及び４２で、各レガシー命令２２を取り出しかつ読み出す。次に、各レガシー命令はステップ４４及び４６で、その操作コードに基づいて解読（デコード）される。特に、以下に示すテーブル１及び２に示すように、各レガシー命令は、他のデータフィールドと一緒にレガシー操作コードに対応付けられルックアップ・テーブル内に列挙される。詳細は後述するが、これらのルックアップテーブルは、各レガシー命令２２のための前記リングカテゴリーを含んでいる。したがって、クラック変換オブジェクト３２は、ステップ４８で確認して前記命令がリング０カテゴリーに入るものか否かを判断する。前記命令がリング０カテゴリーにある場合、クラック変換オブジェクト３２は、操作コードを解釈することによってレガシー命令２２をホスト命令へ直接的に変換する。詳細はステップ５０で行われる。次に、ステップ５２で、この解釈されたホスト命令がアプリケーションプログラムの命令ストリームに書かれる。
【００１９】
これに対して、レガシー命令２２がリング０カテゴリーにない場合、ステップ５４で、命令ストリームにおける次のハンドラーに対する無条件分岐命令が命令ストリームに挿入される。次に、前記システムは、ステップ５６、５８及び６０で確認して、レガシー命令がリング１カテゴリー、リング２カテゴリー、及びリング３カテゴリーに入るかどうかを特定する。
【００２０】
ステップ５６で判断されるように、レガシー命令２２がリング１カテゴリーにある場合、命令ハンドラー３６（図１参照）への命令がステップ５８Ｂで書き込まれ、そしてステップ６０Ａで、戻り分岐命令が命令ハンドラー３６の終わりに挿入される。また、ステップ５８Ａで判断されるように、前記命令がリング２カテゴリー命令にあるものとして特定される場合、クラック変換オブジェクト３２は、スクラッチパッド（作業用）レジスタからのデータを保存するためにコードを挿入し、かつその後、ステップ６４で、命令ハンドラー空間３６（図１参照）に命令を書き込む。
【００２１】
前述したように、レガシー命令に等価な機能を供給するため、リング２カテゴリー命令は、スクラッチパッドレジスタに一致する複数のホストプロセッサ命令を要求する。前記命令がひとたびエミュレートされると、リング２命令に関連したスクラッチパッドレジスタがステップ６６で再記憶される。次に、前記システムはステップ６０Ａに戻り、ハンドラーの終わりに命令ストリームに戻る分岐を挿入する。
【００２２】
前記命令がリング３カテゴリー命令であると判断された場合、ステップ６０Ｂで、機器状態を保存するための命令コードが、命令ハンドラー３６に挿入される。引き続き、ステップ６８で、命令ハンドラーは、例えば、Ｃ／Ｃ＋＋のような高水準言語プログラムにジャンプし、等価な機能をレガシー命令に供給する。コンパイラー方法による高水準言語は、命令ハンドラー３６に対する戻りを制御し、ステップ７０に進むとここで機器状態を保存する。そして、前記システムはハンドラーの終わりで戻り分岐命令を挿入することによって、命令主画面に戻る。
【００２３】
図１４、及び１５に示すように、その全体が符号７２として識別されるホストプロセッサプログラムは、命令ストリームとして表示され、命令ハンドラー３６（図１参照）はリング０型命令及び無条件分岐を含む。リングカテゴリー１−３命令をリング０空間３４から続く分離ハンドラー空間３６に置き、かつ無条件分岐をリング１−３命令ハンドラー空間３６（図１参照）への分岐に用いるこのような構成は、命令間の距離を維持するのに用いられる。さらに詳しくは、あらゆるプログラムは、ジャンプ及び／または分岐の命令を含むことが予想されているのである。命令間の空間が維持されない場合、多くの命令が相対形式で動作し、そして絶対宛先アドレスを用いるよりむしろ現在の位置から所定の距離だけ前または後にジャンプしていることから、このジャンプ及び分岐は、結局は間違った位置決めになってしまう。この結果、１：１整合が実現されないときには、図１４及び１５に示すように、レガシー命令の代わりに単一の無条件分岐が用いられる。レガシー命令をエミュレートするため、無条件分岐命令が命令ハンドラー空間３６（図１参照）に向けられる。前記ハンドラーがその機能を完了するとき、図１４及び１５に示すように、それは無条件分岐に従う命令に戻る。
【００２４】
図３は、相対アドレスに基づいて前に進む条件分岐の一例を示している。さらに詳しくは、アドレス１００４での命令実行中に、プログラムカウンタはアドレス１００８で次の命令を指し示す。図３に示すように、命令ＢＥＱは条件分岐命令である。条件分岐命令は、分岐される場合には、１０１０の宛先アドレスに到達するため現在のアドレスを８増加する。１００８または１００Ｃでの命令の何れかが１：１変換されず、かつ付加的コードが行に挿入される場合、分岐は不正確な宛先アドレスを指し示すだろう。その代わりとして、例えば、命令ストリーム７２（図１４及び１５参照）に挿入された無条件分岐のような無条件分岐が命令ハンドラーへの分岐に用いられる場合、その距離は同じままである。
【００２５】
この手法は、”branch folding（畳み込み分岐）”と称される多くのＲＩＳＣプロセッサの特徴に依存し、それは、殆ど何もロスのない性能状態のプロセッサによって、無条件分岐が命令ストリームから自動的に除去されることを許可する。分岐が無条件なとき、それは行われなければならない。プロセッサは新たなパスの下にある前処理の取り出し命令を単に開始し、そして名目上の性能不利益（performance penalties）が分岐に関連付けられる。他方、前処理の取り出し命令はどのパスが処理されるかわかるまで生じることができないので、条件分岐は、重大な性能不利益を課することが可能である。
【００２６】
（レジスタ変換）
本発明の一態様によれば、ホストプロセッサとレガシープロセッサ間に矛盾が生じないようにするためにレジスタ変換が用いられる。例えば、ＭＩＰＳ  Ｒ４４００マイクロプロセッサでは、全体レジスタ２９がスタックポインタである。しかしながら、パワーＰＣマイクロプロセッサでは、スタックポインタはレジスタ１である。この矛盾を避けるため、レガシー命令のレジスタフィールドがホストプロセッサレジスタに再変換される。ＭＩＰＳ  Ｒ４４００マイクロプロセッサ命令のレガシー命令がパワーＰＣ命令に変換される例の場合、レガシー命令のレジスタ２９は、ホストプロセッサのレジスタ１に再変換され、かつレガシー命令のレジスタ１がホストプロセッサのレジスタ２９に再変換される。これは、ホストプロセッサ番号を含む配列へのインデックスが、与えられたレガシーレジスタ番号のために用いられるようにレガシーレジスタ番号を処理することで達成される。
【００２７】
（命令解釈）
リング０命令は、単一のホストプロセッサ命令に置き換えられることができるレガシープロセッサ命令である。対応するホストプロセッサ命令がレガシープロセッサ命令として同じ機能を実行するのであるが、レガシー命令のバイナリー再編成（すなわち、オブジェクトコードの解釈）には多くの時間が必要となる。
【００２８】
図４〜７は、３２ビットパワーＰＣ  ＲＩＳＣマイクロプロセッサの等価命令に対する３２ビットＭＩＰＳ  Ｒ４４００  ＲＩＳＣプロセッサ命令の変換例を示している。この例の場合、パワーＰＣがホストプロセッサであるのに対し、ＭＩＰＳプロセッサはレガシープロセッサである。
【００２９】
リング０命令用に、操作コード（op code）がホストプロセッサの適切な命令に整合するよう変換される。いくつかのケースでは、サブ操作コードフィールドが解釈されなければならない。レジスタ及び直接データ値フィールドは、必要であれば移動される。いくつかのケースでは、ホストプロセッサビットフィールドが非活動状態にセットされる。図に示していないが、レガシーレジスタ変換は、レガシー／ホストプロセッサ組み合わせに依存して行われる。
【００３０】
図４は、最も単純なバイナリー表現でのＭＩＰＳ  ＡＤＤＵ（add unsigned instruction：符号なし命令の加算）の一例を示している。このＡＤＤＵレガシー命令を等価なホストＡＤＤ命令に変換するため、レジスタフィールドと同様に、操作コード及び様々なサブ操作コードのフィールドが、図４に示されているように変換される。また、ホスト命令は、レガシー命令のために使用されない２つの追加的な単一ビットオプションフィールド（すなわち、ビット０及びビット１０）を有している。これらのフィールドは簡単に消去される。
【００３１】
図４に示すように、前記ＡＤＤＵレガシー命令は、レジスタｒｓ及びｒｔの値を加算し、その結果をレジスタｒｄに格納する。図にあるように、レガシーサブ操作コードは、00000100001であり、それはレガシー命令の０〜１０ビットに一致する。このバイナリー値00000100001は、１０進の３３に一致する。対応のホストプロセッサ命令はＡｄｄ命令である。
【００３２】
このケースにおいて、ホスト命令はレジスタｒＡ及びｒＢの値を加算し、その結果をレジスタｒＴに格納する。ホストプロセッサ命令の形式は、対応するレガシー命令の形式とはわずかに異なっている。さらに、ホスト命令は、ＲＣ（record condition：記録状況）ビット及びＯＥ（overflow enable：オーバフローの可能性）ビットを、３２ビット命令のうちの０及び１０目のビットとして含んでいる。これらのオプションは、レガシーＭＩＰＳプロセッサでは使用可能でない。前述したように、これらのビットは、簡単に消去される。０及び１０ビットを消去した後は、ホストＡｄｄ命令の等価なサブ操作コードが100001010である。このため、この場合、レガシー操作コード00000100001は、前述したように100001010に解釈され、かつレジスタが再変換される。特に、レガシーレジスタｒｄは、ホストレジスタｒＴに変換される。レガシーレジスタｒｓがホストレジスタｒＡに変換され、最後にレガシーレジスタｒｔがホストレジスタｒＢに変換される。加えて、レガシー命令の２６〜３１ビットがホスト命令用の適切な操作コードに解釈される。示したように、000000として示される２６〜３１ビットでの操作コードは、011111に解釈される。
【００３３】
図５及び６は、直接変換の他の例を示している。例えば、図５は、レガシーＬＨＵ（load halfword unsigned：符号なし半語のロード）命令、及びＳＲＡ（shift right algebraic：右シフト演算）命令の直接変換を示す。ＬＨＵ命令の場合、直接データはホストプロセッサ命令に変換される。このＳＲＡ命令は直接５ビットシフトカウントフィールドを含んでいる。最後に、図７は引数のないレガシー同期命令を示している。対応のホストプロセッサ同期命令は、同様に引数を有していない。この場合、操作コード及びサブ操作コードが、図７に示すように変換される。
【００３４】
（リング１命令）
前述したように、リング１カテゴリーのレガシー命令は、単一のホストプロセッサ命令に直接的に変換されることができない。それゆえ、前述したように無条件分岐命令が命令ストリーム７２（図１４、１５参照）内に挿入される。エミュレートされたレガシー命令の振る舞いを模倣（エミュレート）するために、この分岐は複数のホストプロセッサ命令を使用する命令ハンドラーへの実行を指し示す。かなり単純な模倣（エミュレート）用のリング１命令は、付加的なスクラッチレジスタが要求されないことを許可する。
【００３５】
図８は、レガシーＬＢ（load byte：バイトのロード）用のアセンブリ・ニーモニック（簡略記号）言語、及びＬＢレガシー命令用のホスト命令ハンドラーを示している。ロードされたバイトの符号に基づいて宛先レジスタの符号ビットを大きくする符号拡張がレガシー命令により実行されるので、レガシーＬＢ命令はリング１命令として類別される。付加的なホストプロセッサ命令が、符号拡張を実行するために要求される。さらに詳しくは、図８に示すように、５つのワードがこの命令を処理するために要求される。第１のワードはレガシーバイナリ命令そのものである。次のワードは、同一命令を異なるオペランド（演算）で処理する他のハンドラーへのポインタである。これは既に生成されているハンドラーを再利用することを許可するために行われている。１つに結合されたリストは、整合のための検索用メカニズムを提供する。第３のワードはレガシー命令のホストプロセッサハンドラーを開始する。このように、任意の数のホストプロセッサ命令が表現される。最後に、主命令ストリームに戻るため、ホストプロセッサのサブルーチン戻り命令が挿入される。
【００３６】
図９は、レガシーＢＥＱ（branch if equal instruction：命令に等しい場合は分岐）、及びこの命令をエミュレートするホスト命令ハンドラーを示している。この場合、レガシーＢＥＱ命令は１命令で比較と分岐とを兼ねて実行するので、ＢＥＱレガシー命令がリング１命令として類別される。ホストプロセッサ命令は、１命令で分岐する比較を許可しない。むしろ、ホストプロセッサ用の命令は、比較が別々に行われ、かつその結果が状況コードレジスタに格納されなければならないことを要求する。次に、分岐をするかどうかを決定する際に、状況分岐はこの格納された状況コードを使用する。
【００３７】
レガシーターゲットの場合、ホストハンドラーは等価命令の分岐に従って直接レガシー命令を組み入れる。なぜなら、宛先アドレスを計算する間にレガシープロセッサがそれを実行するためである。図示していないが、ハンドラーはこれを上手く調節することができる。特に図１０に示すように、リング１が幾つかのリング０命令を備えた命令ストリームの中に示されている。リング１命令が実行されるときはいつでも、無条件の分岐及びリンク命令が、２つのワードヘッダに従った命令で開始する命令ハンドラーへの実行に向けられるために用いられる。図１０に示すように、命令ハンドラーの終わりで、本実行が命令ストリームへ戻り、かつ分岐に従って直接リンクアドレスを指定する。
【００３８】
（リング２命令）
リング２命令は、動作を実行するのに１以上のスクラッチレジスタが必要とされることを除き、リング１命令と類似している。これは１以上のホストプロセッサレジスタを保存すること、次にレガシー命令画面に戻る前にそれらを再記憶することを要求する。
【００３９】
図１１は、リング２命令の一例である。特に、図１１はレガシーＳＬＴ（set if less than instruction:命令を下回る場合の集合）及びこの命令を処理するためのホスト命令ハンドラーを示している。レガシー命令は比較を実行し、不等号用の零及び等号用の零を指定されたレジスタに格納する。この場合、ホストプロセッサ、パワーＰＣプロセッサは、対応した命令を有していない。このため、ホストプロセッサがその代わりとして比較を実行し、次に比較の結果を状況コードレジスタから抽出する。次に、その値が正しい位置に交代されなければならない。これらの動作は、ハンドラーが完了するときに、割り当てられ、保存され、再生されるように作用するスクラッチレジスタを要求する。
【００４０】
図１２は、その対応したホストプロセッサの命令ハンドラーに一致したレガシーＭＴＣ１命令の他の例を示している。このＭＴＣ１命令は、コプロセッサ１命令への転送であり、汎用のレジスタからレガシープロセッサ−コプロセッサ１である浮動小数点レジスタへ値を移動させる。ホストマイクロプロセッサ（すなわち、パワーＰＣマイクロプロセッサ）の場合、汎用レジスタから浮動小数点レジスタまで直接的に値を移動させる命令が存在しない。したがって、命令ハンドラーは、メモリバッファのアドレスを構築するスクラッチレジスタを使用しなければならない。図１２に全体的に示されているように、汎用レジスタの値はメモリに格納され、そして次に浮動小数点ロード命令がそれを浮動小数点レジスタへ入れるために使用される。
【００４１】
適切なレジスタ資源を備えたホストプロセッサが選択される場合、リング２命令を無効にすることができることが予想される。ＭＩＰＳ  Ｒ４４００レガシーマイクロプロセッサ及びパワーＰＣホストプロセッサの場合、それぞれは３２ビット汎用レジスタ及び３２ビット浮動小数点レジスタを有している。これは、メモリを介したレジスタを保存し、かつ１以上のスクラッチレジスタが要求される際にそれらを再記憶する要求を強制する。
【００４２】
（リング３命令）
リング３命令は複雑な演算、及びホストプロセッサまたはアセンブリ言語を用いてエミュレートすることが容易でないレガシープロセッサの高度なアーキテクチャ上の特徴を含んでいる。したがって、リング３命令はその代わりにＣ／Ｃ＋＋のような高水準言語を用いて処理される。ホストのアセンブリ言語ハンドラーはこれらの命令のためにセットアップされるが、その関数は要求されたときに高水準言語の構成要素を呼び出している。
【００４３】
図１３Ａは、ＭＩＰＳ  ＳＹＳＣＡＬＬ（システムコール）命令及びそのホストハンドラーを示している。図に示すように、高水準言語の呼び出しがされる前に機器の状態が保存され、そしてこのハンドラーからの戻りの際に機器の状態が復帰及び再記憶される。高水準言語における関数の呼び出し要求は、前記ホストプロセッサのアプリケーションバイナリーインタフェース（ＡＢＩ）によってうまく文書化される。このようなＡＢＩは任意に与えられるアーキテクチャ用の正確なプログラム命令を保証することが許可されなければならない規則を含んでいる。したがって、特定の要件がホストプロセッサの選択により指示される。このとき、リング３命令用のハンドラーは、高水準言語の構成要素を呼び出すのにどんなコードも必要とする。
【００４４】
図１３Ｂは、典型的なパワーＰＣアセンブリ言語及び典型的なリング３ＣＦＣｚ命令用のハンドラーを示している。この命令ハンドラーはパワーＰＣ機器コードで生成される。しかしながら、コメント化されたアセンブリが説明のために用いられている。
【００４５】
エミュレートされるレガシー命令はＣＦＣｚ命令であり、それはレガシーコプロセッサレジスタから汎用レガシーへ３２ビット値を移動させる。ＭＩＰＳ  ＲＩＳＣ  Ｒ４４００マイクロプロセッサの場合、レガシーマイクロプロセッサは１つのコプロセッサが浮動小数点ユニットである４つまでのコプロセッサを許可する。命令ハンドラーは機器状態を保存し、ハンドラーの頂上からレガシー命令を取り出し、それからコプロセッサのレジスタ番号、汎用レジスタ番号、及びコプロセッサ番号から成る３つの引数を抽出する。
【００４６】
2004272922.tif 000003
【００４７】
セクションのセットアップにおいて、前記引数がホスト、すなわちパワーＰＣ、レジスタｒ３、及びレジスタｒ４へ置かれる。これは、Ｃ関数を呼び出すパワーＰＣアプリケーションバイナリインタフェース仕様を満たしている。Execute_CFCzの呼び出しは指定されたＣ関数であり、ＣＦＣｚ命令を処理するために用いられる。この関数の一例を以下に示す。
【００４８】
2004272922.tif 000004
【００４９】
以下はコプロセッサ動作を処理するＣ＋＋クラスのために典型的なクラス仕様である。
【００５０】
2004272922.tif 000005
【００５１】
以下は前述したクラスで定義されたコプロセッサ読み出しレジスタ関数の典型的な具体例である。
【００５２】
2004272922.tif 000006
【００５３】
（ルックアップ・テーブル）
前述したように、テーブル１及び２は、ＭＩＰＳ  Ｒ４４００ＲＩＳＣレガシーマイクロプロセッサのレガシー命令用の各レガシー命令のために、レガシー命令を識別しかつ特定のリングカテゴリーを識別するクラック変換オブジェクト３２によって用いられるルックアップ・テーブルを表している。
【００５４】
2004272922.tif 000007
2004272922.tif 000008
2004272922.tif 000009
2004272922.tif 000010
【００５５】
テーブル図に示すように、テーブル１は典型的な１０フィールドを含んでいる。最初のフィールドは命令フィールドとして識別され、そして各レガシー命令のためのアセンブリ言語”ニーモニック（簡略記号）”を識別する。ｏｐ_ｃｏｄｅフィールドは、レガシー命令の操作コードを表す。整数命令フォーマット及び浮動小数点命令フォーマットの両命令のため、functionフィールドがレジスタ型命令として用いられる。例えば、図１６〜２０は、ＭＩＰＳマイクロプロセッサのための整数及び浮動小数点バイナリー命令フォーマットを示している。レジスタ型命令のために、前記functionフィールドがサブ操作コードとして用いられ、そして例えば図４においてビット０からビット１０（図４参照）に関して述べたようなホストプロセッサのための関数フィールドに移動させる。この結果、示すように、ＡＤＤＵ命令ではサブ操作コードの１０進の値（すなわち、ビット０から１０）が３３となる。ＡＤＤＵ命令の場合の値３３は、functionフィールドで識別される。
【００５６】
この型フィールドは、例えば図１６〜２０に示すように命令タイプに関係する。また、テーブル１及び２はringフィールドを含んでいる。このringフィールドは前述したようにリングカテゴリーに対応している。ＲＳ、ＲＴ、及びＲＤフィールドはレガシーレジスタに関係し、そしてレジスタｒｓ、ｒｔ、及びｒｄに関連したレジスタ数を識別する。immediateフィールドは、例えば図１６に示すような直接型命令のために用いられる。最後に、”Shamt”フィールドは図１７に示すようなレガシー命令の例に関連するシフト量に関係する。
【００５７】
テーブル２は、ＭＩＰＳ  Ｒ４４００ＲＩＳＣマイクロプロセッサ用の３２ビット浮動小数点命令をリストしたものである。”instruction”、”op”、”code”、”function”、”type”、”ring”フィールドはテーブル１と同じである。”FT/base”及び”offset”フィールドは、例えば図１９に示すように、直接型浮動小数点命令用として用いられる。ＦＴ、ＦＳ、及びＦＤフィールドは浮動小数点命令のためのレジスタ数を参照する。
【００５８】
formatフィールドは、浮動小数点値のサイズとフォーマットを表示する。テーブル３は、単長語及び倍長語の固定小数点値と同様に、指定された短精度及び倍精度のＩＥＥＥ７５４浮動小数点値のための有効なフォーマットコードを示している。このformatフィールドには他の値が可能だが、デコード命令のみに用いられている。
【００５９】
2004272922.tif 000011
【００６０】
明らかに、本発明に関する多くの変更及びバリエーションが前述した教示の観点において可能である。したがって、添付の特許請求の範囲の視野内で、本発明が前述した特定の内容以外にも実現され得ることを理解されたい。
【図面の簡単な説明】
【００６１】
本発明に関するこれら及び他の利点は、発明の詳細な説明及び添付の図面を参照することで容易に理解されるだろう。
【図１】本発明に従ったエミュレーションシステムにおける高レベルのブロック図である。
【図２】本発明に従って用いられる命令クラッキング処理のソフトウェアフロー図である。
【図３】本発明の一態様によるメモリ変換を示すメモリ部の図である。
【図４】ホストＡＤＤ命令に対する典型的なレガシーＡＤＤＵ（符号なし加算）命令の操作コードに関する直接変換の一例を示す典型的な図である。
【図５】図４に類似するが、ホスト命令への典型的なレガシーＬＨＵ（load half word unsigned 符号なし１／２語のロード）変換を示している。
【図６】図４に類似するが、ホスト命令への典型的なレガシーＳＲＡ（shift right algebraic 代数的な右シフト）変換を示している。
【図７】図４に類似するが、ホスト命令への典型的なレガシーＳＹＮＣ命令変換を示している。
【図８】典型的なレガシーＬＢ（load byte）命令用の典型的なホスト命令ハンドラーを示す図である。
【図９】図８に類似するが、典型的なレガシーＢＥＱ（等しいかどうかの分岐）命令用を示す図である。
【図１０】多数の直接変換型命令を含む命令ストリームを示す図であり、例えば、図４〜７に示すように、ホスト命令に直接的に変換されることができないレガシー命令用の命令ハンドラーへの無条件分岐を示す。
【図１１】ＭＩＰＳ  ＳＬＴ（set of less than）命令用のスクラッチパッド（作業用）レジスタをパワーＰＣハンドラーへ要求する複数のホスト命令によって、十分にエミュレートされた典型的なレガシー命令のエミュレーションの一例を示す図である。
【図１２】典型的なＭＴＣ１（コプロセッサー１への移動）命令へのエミュレーションを示すことを除き、図１１に類似する図である。
【図１３Ａ】より高レベルな命令より形成された命令ハンドラーによってエミュレーションを要求するレガシーリング３ ＳＹＳＣＡＬＬ命令のエミュレーションの一例を示す図である。
【図１３Ｂ】図１３Ａに類似するが、リング３ ＣＦＣｚレガシー命令用を示す図である。
【図１４】様々なレガシー命令及び対応するハンドラーメモリ空間を含んだ命令ストリームを示す図である。
【図１５】本発明に従ったエミュレーションプログラムの実行を示す図である。
【図１６】ＭＩＰＳ型ＲＩＳＣマイクロプロセッサ用の様々な命令フォーマットを示す図である。
【図１７】ＭＩＰＳ型ＲＩＳＣマイクロプロセッサ用の様々な命令フォーマットを示す図である。
【図１８】ＭＩＰＳ型ＲＩＳＣマイクロプロセッサ用の様々な命令フォーマットを示す図である。
【図１９】ＭＩＰＳ型ＲＩＳＣマイクロプロセッサ用の様々な命令フォーマットを示す図である。
【図２０】ＭＩＰＳ型ＲＩＳＣマイクロプロセッサ用の様々な命令フォーマットを示す図である。
【図１】
2004272922.tif 000012
【図２】
2004272922.tif 000013
【図３】
2004272922.tif 000014
【図４】
2004272922.tif 000015
【図５】
2004272922.tif 000016
【図６】
2004272922.tif 000017
【図７】
2004272922.tif 000018
【図８】
2004272922.tif 000019
【図９】
2004272922.tif 000020
【図１０】
2004272922.tif 000021
【図１１】
2004272922.tif 000022
【図１２】
2004272922.tif 000023
【図１３Ａ】
2004272922.tif 000024
【図１３Ｂ】
2004272922.tif 000025
【図１４】
2004272922.tif 000026
【図１５】
2004272922.tif 000027
【図１６】
2004272922.tif 000028
【図１７】
2004272922.tif 000029
【図１８】
2004272922.tif 000030
【図１９】
2004272922.tif 000031
【図２０】
2004272922.tif 000032
【外国語明細書】
2004272922.tif 000033
2004272922.tif 000034
2004272922.tif 000035
2004272922.tif 000036
2004272922.tif 000037
2004272922.tif 000038
2004272922.tif 000039
2004272922.tif 000040
2004272922.tif 000041
2004272922.tif 000042
2004272922.tif 000043
2004272922.tif 000044
2004272922.tif 000045
2004272922.tif 000046
2004272922.tif 000047
2004272922.tif 000048
2004272922.tif 000049
2004272922.tif 000050
2004272922.tif 000051
2004272922.tif 000052
2004272922.tif 000053
2004272922.tif 000054
2004272922.tif 000055
2004272922.tif 000056
2004272922.tif 000057
2004272922.tif 000058
2004272922.tif 000059
2004272922.tif 000060
2004272922.tif 000061
2004272922.tif 000062
2004272922.tif 000063
2004272922.tif 000064
2004272922.tif 000065
2004272922.tif 000066
2004272922.tif 000067
2004272922.tif 000068
2004272922.tif 000069
2004272922.tif 000070
2004272922.tif 000071
2004272922.tif 000072