(57)【要約】対象プロセッサの正確なプログラム・カウンタ値およびレジスタ値を含む正確な対象状態に依拠する正確な例外処理。対象コード（１７）は、目標プロセッサ（１３）によって実行可能な目標コード（２１）に変換される。生成された目標コード（１７）は、障害を受けやすい対象コード命令（１７４）に関連する、対応する目標命令（２１４）を含む。さらに、対応する目標コード命令（２１４）の各々は回復情報（１９５）に関連付けられる。例外（例えば障害）が生じると、その回復情報（１９５）が取り出され、特に一般的なケースの目標コード（２１）を生成する最適化を考慮に入れて、正確な対象状態を回復するのに当該回復情報（１９５）が使用される。次に、その正確な対象状態を使用して例外が正確に処理される。
2008537245.tif 000002
【特許請求の範囲】
【請求項１】
対象コード（１７）から目標コード（２１）へのプログラム・コード変換において例外を正確に処理する方法であって、
（ａ）対象命令セット・アーキテクチャに従って対象プロセッサにより実行可能な前記対象コード（１７）を復号化するステップと、
（ｂ）前記対象コード（１７）から目標コード（２１）を生成するステップと、
（ｃ）目標命令セット・アーキテクチャに従って目標プロセッサ（１３）上で前記目標コード（２１）を実行するステップと、を備え、
前記ステップ（ａ）は、前記対象命令セット・アーキテクチャにおいて潜在的に障害を生じる、障害を受けやすい命令（１７４）を識別することを含み、
前記ステップ（ｂ）は、前記識別された障害を受けやすい対象命令から１つまたは複数の対応する目標命令（２１４）を生成し、該複数の対応する目標命令（２１４）または該複数の対応する目標命令（２１４）の各々に関連する回復情報（１９５）を格納することを含み、
当該方法は更に、
（ｄ）前記複数の対応する目標命令（２１４）または前記複数の対応する目標命令（２１４）の１つの実行中に障害が発生した場合に、
（ｉ）前記対応する目標命令（２１４）に関連する前記回復情報（１９５）を取得するステップと、
（ｉｉ）前記回復情報（１９５）を使用して前記障害時における対象プロセッサを正確に表現する正確な対象状態を回復するステップと、
（ｉｉｉ）前記正確な対象状態を使用して前記障害を正確に処理するステップと、
を実行することを含む、方法。
【請求項２】
前記目標コード（２１）を生成することは、１つまたは複数の最適化を実行することを含み、
前記回復情報（１９５）は、前記１つまたは複数の最適化に関する情報を含む、請求項１に記載の方法。
【請求項３】
前記目標コードを生成することは、前記１つまたは複数の対応する目標命令（２１４）において不正確な対象状態を残す１つまたは複数の最適化を実行することを含み、
前記回復情報（１９５）は、利用可能な前記不正確な対象状態から正確な対象状態を獲得可能にする、請求項１に記載の方法。
【請求項４】
前記正確な対象状態は、少なくとも正確な対象プログラム・カウンタを含む、請求項１に記載の方法。
【請求項５】
前記正確な対象状態は、前記対象プロセッサの対象レジスタを表現する少なくとも正確なレジスタ値を含む、請求項１に記載の方法。
【請求項６】
前記回復情報（１９５）を格納することは、前記生成された目標コード（２１）の直後に前記回復情報（１９５）を格納することを含む、請求項１に記載の方法。
【請求項７】
前記回復情報（１９５）を取得することは、
前記目標コード（２１）の走査を進めて、前記目標コード（２１）の後に続く前記回復情報（１９５）を探し出すステップと、
それぞれの前記対応する目標命令（２１４）に関連する前記回復情報（１９５）を取得するステップと、
を含む、請求項６に記載の方法。
【請求項８】
前記対象コード（１７）を複数のブロックに分割すること、
複数の目標コード（２１）のブロックを生成すること、
前記生成された複数の目標コード（２１）のブロック間にインタリーブされた回復情報（１９５）を格納すること、
をさらに備える請求項１に記載の方法。
【請求項９】
前記回復情報（１９５）から前記目標コード（２１）を分離するマーカー（１９６）を格納すること、
障害を示す前記対応する目標命令（２１４）から走査を行って前記マーカー（１９６）を探し出した後、前記マーカー（１９６）から走査を行って前記関連する回復情報（１９５）を探し出すことにより、前記回復情報（１９５）を取得すること、
をさらに備える請求項１に記載の方法。
【請求項１０】
前記関連する前記対応する目標命令（１２４）を表す目標プログラム・カウンタによって索引付けされた前記回復情報（１９５）を格納することをさらに備える請求項１に記載の方法。
【請求項１１】
前記正確な対象状態を回復することは、
前記取得された回復情報（１９５）を回復ハンドラ（２１５）に送ること、
現在利用可能な対象状態を獲得すること、
前記回復情報（１９５）を使用して前記現在利用可能な対象状態を変更することで前記正確な対象状態をもたらすこと、
を含む、請求項１に記載の方法。
【請求項１２】
前記回復情報（１９５）を回復ハンドラ（２１５）に送ること、
前記回復情報（１９５）に従って、前記回復ハンドラ（２１５）から１つまたは複数のネイティブ・コード回復ルーチンを呼び出すこと、
を更に備える請求項１に記載の方法。
【請求項１３】
前記回復情報（１９５）は、目標プログラム・カウンタ値（１９５ａ）と、対象プログラム・カウンタ値（１９５ｂ）とを含む、請求項１に記載の方法。
【請求項１４】
前記回復情報（１９５）は、前記対応する目標コード命令のポイントにおける最適化が未処理であることを表す回復標識セット（１９５ｃ）をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記回復情報（１９５）は、前記対応する目標命令（２１４）のポイントにおいて適用可能な抽象対象レジスタへの目標レジスタのマッピングを特定するマッピング・テンプレート（１９５ｄ）をさらに含む、請求項１３に記載の方法。
【請求項１６】
前記回復情報（１９５）は圧縮形態で格納される、請求項１に記載の方法。
【請求項１７】
前記回復情報（１９５）は、
フル・プログラム・カウンタ値が基本値として格納された目標コード・ブロック（２１）に関する第１の回復情報項目（１９５）と、
各々が前記基本値からのオフセットとしてのプログラム・カウンタ値を含む１つまたは複数の後続回復情報項目（１９５）と、
を含む、請求項１３に記載の方法。
【請求項１８】
前記目標コード（２１）の実行中、前記目標プロセッサ（１３）において割り込み信号を受信すると、前記複数の対応する目標命令（２１４）か、または前記複数の対応する目標命令（２１４）の１つが出現するまで、前記目標コード（２１）の実行を継続するステップと、
それぞれの前記対応する命令に関連する前記回復情報（１９５）を取得し、前記正確な対象状態を回復するステップと、
前記正確な対象状態を使用して、前記割り込みを正確に処理するステップと、
をさらに備える請求項１に記載の方法。
【請求項１９】
対象コード（１７）から目標コード（２１）へのプログラム・コード変換において例外を正確に処理する方法であって、
（ａ）対象プロセッサによって実行可能な前記対象コード（１７）を、目標プロセッサ（１３）によって実行可能な目標コード（２１）に変換するステップと、
（ｂ）前記目標プロセッサ（１３）上で前記目標コード（２１）を実行するステップと、を備え、
前記ステップ（ａ）が、
（ａ１）前記対象コード（１７）内において障害を受けやすい命令（１７４）を識別すること、
（ａ２）前記障害を受けやすい対象命令に対応する、１つまたは複数の対応する目標コード命令を生成すること、
（ａ３）前記複数の対応する目標命令（２１４）、または前記複数の対応する目標命令（２１４）の各々に関連する回復情報（１９５）を格納すること、
をさらに含み、
前記ステップ（ｂ）が、
（ｂ１）前記複数の対応する目標命令（２１４）、または前記複数の対応する目標命令（２１４）の１つに関する例外が生じたとき、前記障害が生じている前記対応する目標命令（２１４）に関連する前記回復情報（１９５）を探し出すこと、
（ｂ２）前記探し出された回復情報（１９５）に従って、前記対象プロセッサを表現する正確な対象状態に修正する回復ルーチンを実行すること、
（ｂ３）前記修正された正確な対象状態に関して前記例外を処理するよう例外ハンドラを呼び出すこと、
をさらに含むことを特徴とする方法。
【請求項２０】
対象コード（１７）から目標コード（２１）へのプログラム・コード変換において例外を正確に処理する方法であって、
前記対象コード（１７）内において潜在的に障害を生じる対象命令に対応する少なくとも１つの対応する目標命令（２１４）を含む目標コード（２１）を生成し、前記少なくとも１つの対応する目標命令（２１４）に関連する回復情報（１９５）を格納するステップと、
割り込みを受信したとき、前記少なくとも１つの対応する目標命令（２１４）が出現するまで、目標コード命令の実行を継続するステップと、
前記対応する目標命令（２１４）に到達したとき、前記関連する回復情報（１９５）を使用して正確な対象状態を回復するステップと、
前記回復された正確な対象状態を使用して、前記割り込みを正確に処理するステップと、
を備えることを特徴とする方法。
【請求項２１】
前記割り込みを受信したとき、前記目標コード命令を１つずつ実行することをさらに備える請求項２０に記載の方法。
【請求項２２】
前記目標プロセッサ（１３）における段階的モードを呼び出して前記目標命令を１つずつ実行することをさらに備える、請求項２１に記載の方法。
【請求項２３】
目標コード・インタプリタ（１９７）を呼び出して前記目標コード命令を１つずつ実行することをさらに備える、請求項２１に記載の方法。
【請求項２４】
対象コード（１７）から目標コード（２１）への動的バイナリ変換において例外を正確に処理する方法であって、
対象コード命令シーケンスから目標コード命令シーケンスを生成するステップと、
前記目標コード命令シーケンスを実行するステップと、を備え、
例外が生じた場合に、正確な対象状態を実現可能な目標コード命令が出現するまで前記目標コード命令シーケンスに沿って処理を進め、前記正確な対象状態を実現可能となるまで前記例外の処理を延期することを特徴とする方法。
【請求項２５】
対象コード（１７）から目標コード（２１）へのプログラム・コード変換を実行するように構成されたトランスレータ装置であって、
対象命令セット・アーキテクチャに従って対象プロセッサにより実行可能な対象コード（１７）を復号化する復号化ユニット（１９）と、前記対象コード（１７）から前記目標コード（２１）を生成する目標コード生成ユニット（１９２）とを有するトランスレータ・ユニット（１９）と、
目標命令セット・アーキテクチャに従って前記目標コード（２１）を実行する目標プロセッサ（１３）と、を備え、
前記復号化ユニット（１９）は、前記対象命令セット・アーキテクチャにおいて潜在的に障害を生じる、障害を受けやすい命令（１７４）を識別するように構成されており、
前記目標コード生成ユニット（１９２）は、前記識別された前記障害を受けやすい対象命令から１つまたは複数の対応する目標命令（２１４）を生成し、前記複数の対応する目標命令（２１４）かまたは前記複数の対応する目標命令（２１４）の各々に関連する回復情報（１９５）を格納するように構成されており、
当該装置は更に、
前記目標プロセッサ（１３）において前記複数の対応する目標命令（２１４）のそれぞれを実行しているときに障害が発生すると、前記１つまたは複数の対応する目標命令（２１４）のそれぞれに関連する前記回復情報（１９５）を取得し、前記回復情報（１９５）を使用して正確な対象状態を回復する回復ハンドラ・ユニット（２１５）と、
前記正確な対象状態を使用して前記障害を正確に処理する例外処理ユニット（１７０）とをさらに備える、装置。
【請求項２６】
対象コード（１７）から目標コード（２１）へのプログラム・コード変換を実行するように構成されたトランスレータ装置であって、
対象プロセッサによって実行可能な前記対象コード（１７）を、目標プロセッサ（１３）によって実行可能な目標コード（２１）に変換するトランスレータ・ユニット（１９）と、
前記目標コード（２１）を実行する目標プロセッサ（１３）と、を備え、
前記トランスレータ・ユニット（１９）は、前記対象コード（１７）内において障害を受けやすい命令（１７４）を識別し、前記障害を受けやすい対象命令に対応する１つまたは複数の対応する目標コード命令を生成し、前記１つまたは複数の対応する目標命令（２１４）かまたは前記１つまたは複数の対応する目標命令（２１４）の各々に関連する回復情報（１９５）を格納するように構成されており、
前記目標プロセッサ（１３）は、前記目標コード（２１）を実行し、前記１つまたは複数の対応する目標命令（２１４）の各々に関して例外が生じたとき、前記対応する目標命令（２１４）のそれぞれに関連する前記回復情報（１９５）を探し出し、前記探し出された回復情報（１９５）に従って、前記対象プロセッサを表現する正確な対象状態を修正する回復ルーチンを実行し、例外ハンドラ（１７０）を呼び出して、前記修正された正確な対象状態に関して前記例外を処理することを特徴とする装置。
【請求項２７】
対象コード（１７）から目標コード（２１）へのプログラム・コード変換を実行するように構成されたトランスレータ装置であって、
対象プロセッサによって実行可能な前記対象コード（１７）を、目標プロセッサ（１３）によって実行可能な目標コード（２１）に変換するトランスレータ・ユニット（１９）と、
前記目標コード（２１）を実行する目標プロセッサ（１３）と、を備え、
前記トランスレータ・ユニット（１９）は、前記対象コード（１７）内において潜在的に障害を生じる対象命令に対応する少なくとも１つの対応する目標命令（２１４）を含む前記目標コード（２１）を生成し、前記少なくとも１つの対応する目標命令（２１４）に関連する回復情報（１９５）を格納するように構成されており、
前記目標プロセッサ（１３）は、前記目標コード（２１）を実行するように構成されており、かつ、割り込みを受信すると、前記少なくとも１つの対応する目標命令（２１４）が出現するまで目標コード命令の実行を継続するように構成されており、
当該装置は更に、
前記少なくとも１つの対応する目標命令（２１４）が前記目標プロセッサ（１３）によって検出されたとき、前記関連する回復情報（１９５）を使用して正確な対象状態を回復する回復ハンドラと、
前記回復された正確な対象状態を使用して前記割り込みを処理する変換済対象例外ハンドラ（２７０）と、
をさらに備える、装置。
【請求項２８】
対象コード（１７）から目標コード（２１）へのプログラム・コード変換を実行するように構成されたトランスレータ装置であって、
対象コード命令シーケンスから目標コード命令シーケンスを生成するトランスレータ・ユニット（１９）と、
前記目標コード命令シーケンスを実行する目標プロセッサ（１３）と、を備え、
前記目標プロセッサ（１３）は、前記目標コード命令シーケンスを実行するように構成されており、かつ、例外が生じると、正確な対象状態を実現可能な目標コード命令が出現するまで前記目標コード命令シーケンスに沿って実行処理を続け、前記正確な対象状態を実現可能な目標コード命令が出現した時点で、例外ハンドラ（１７０）を呼び出して、前記正確な対象状態を使用して前記例外を処理するように構成されていることを特徴とする装置。
【請求項２９】
請求項１乃至請求項２４のいずれかに記載の方法を実現するようにコンピュータによって実行可能な命令が記録されたコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してコンピュータおよびコンピュータ・ソフトウェアの分野に関し、より詳細には、例えば、プログラム・コードを変換するコード・トランスレータやコード・エミュレータやコード・アクセラレータにおいて有用なプログラム・コード変換方法およびプログラム・コード変換装置に関する。
【背景技術】
【０００２】
組み込み型ＣＰＵと非組み込み型ＣＰＵの両方において存在する主なＩＳＡ（命令セット・アーキテクチャ）にあっては、関連するソフトウェアにトランスペアレントにアクセス可能であるとともに、パフォーマンスを「高速化」可能であり、かつ低コスト／高パフォーマンスの利点をもたらす多数の有能なプロセッサに「変換」可能な多くのソフトウェアが存在する。また、それらのＩＳＡに合わせて組み込まれ、パフォーマンスおよび市場範囲を発展させることができない優れたＣＰＵアーキテクチャも見られる。そのようなＣＰＵは、ソフトウェア指向のプロセッサ・コアーキテクチャの恩恵を受ける。
【０００３】
ＰＣＴ出願ＷＯ００／２２５２１は、そのような高速化能力、変換能力、および共通アーキテクチャ能力を促進するプログラム・コード変換方法およびプログラム・コード変換装置を開示する。
【０００４】
プログラム・コード変換を実行する場合は、対象プロセッサ上で対象プログラムをそのまま実行する場合と比べ、変換工程におけるオーバヘッドをもたらす。例外の処理と関係して、或る特定の困難が生じる。
【０００５】
例外とは、プログラムにおける制御の通常のフローを変える条件である。例外は、プロセッサに注意を促す条件であって、通常、処理を続行可能とするためにまず処理されなければならない条件がシステム内部のどこかで発生したことを示す。例外は、割り込み、障害、トラップ、または異常終了などの、様々な異なるタイプに細分化可能である。用語は種々のアーキテクチャ間において多様であり、特定のタイプまたはカテゴリの例外は特定のアーキテクチャにおいて固有である。
【０００６】
例外は、ハードウェアによって、またはソフトウェアによって生成（「発生」）可能である。ハードウェア例外には、リセット、割り込みのような信号、またはメモリ管理ユニットからの信号が含まれる。例外は、例えば、ゼロ除算などの数値エラーに関して、オーバフローまたはアンダフローに関して、あるいは特権命令、予約命令、トラップ命令、または未定義の命令などの命令復号化エラーに関して、演算論理装置または浮動小数点装置によって生成可能である。
【０００７】
ソフトウェア例外は、種々のソフトウェア・プログラムでそれぞれ異なり、プログラムの通常の動作を変化させる任意の種類のエラー検査に適用可能である。例示的な例として、１つのレジスタの値が第２のレジスタの値より大きい場合に、対象コード中の命令が、報告すべき例外を発生する。
【０００８】
例外ハンドラは、プログラムの実行中に例外が生じた際に要請される特別なコードである。対象プログラムが所与の例外に関するハンドラを提供しない場合、デフォルトのシステム例外ハンドラが呼び出され、通常、実行されているプログラムの異常終了がもたらされ、エラー指示が戻される。
【０００９】
例外信号は、多くのオペレーティング・システム上で例外を生成するための一般的な機構である。多くのオペレーティング・システム、特に、Ｕｎｉｘ（商標）のようなシステムが準拠するＰＯＳＩＸ（商標）標準は、この機構が、どのように振舞うべきかを指定して、例外信号が、多くのシステムにわたって広く類似するようにする。例外をトリガする最も一般的なイベントは、プログラムによって実行される工程が、（ｉ）マップされていないメモリ領域にアクセスしようとした場合、または（ｉｉ）正しい許可を有さないメモリ領域を操作しようとした場合である。例外信号をトリガする他の一般的なイベントは、（ｉｉｉ）別の工程から送信された信号の受信、（ｉｖ）実行する特権レベルを有さない命令工程の実行、または（ｖ）ハードウェアにおけるＩ／Ｏイベントである。
【００１０】
本発明は、正確な例外とも呼ばれる、例外を正確に処理することに特に関係する。正確な例外は、対象コード命令間の境界上で報告される。正確な例外が報告されると、先行するすべての対象命令の効果は完了し、例外は、実行されていない対象コードの最初の命令を指し示し、その対象命令または後続の任意の命令からの効果は、まだ全く生じていない。
【００１１】
バイナリ変換に関しては、目標命令が目標プロセッサ上で実行され、例外が報告されると、目標命令は、一般に、対象コードの中に書かれた例外ハンドラに正確な例外を報告するための諸条件を満たさないことが明白である。命令は、その殆どが、対象コードの対応するブロックの中の命令の順序とは異なる順序で、目標プロセッサ上で実行される。その理由は、第１に、対象コードが書かれた対象プロセッサの命令セットと、目標コードが実行される目標プロセッサとの違いに起因するため、第２に、プログラム・コード変換中において通常行われる最適化のためである。
【００１２】
１つの周知のアプローチは、変換または実行されているコードのセクションに入る時点で適用されていた諸条件に、仮想の対象マシンを戻す「回復ポイント」の使用、すなわち、変換または実行されている対象コード命令の現在のブロックに入るポイントで支配的であった条件に、仮想の対象マシンを戻すことである。
【００１３】
米国特許第５８３２２０５号明細書（ケリーら（Ｋｅｌｌｙ  ｅｔ  ａｌ））は、ゲート・ストア・バッファを使用することにより、後に、対象コードの各セクションの終わりに「正式な」仮想対象レジスタ・セットにコピーされる「作業」レジスタ・セットを使用するエミュレータを開示している。例外が生じた場合、そのことは、作業レジスタにだけ影響を及ぼし、仮想対象マシンの条件は、対象コードの、そのセクションに入ったポイントで、「正式な」レジスタから回復させることが可能である。しかし、「作業」レジスタと「正式な」レジスタの使用は、目標プロセッサにおけるエミュレーション工程のオーバヘッドを大幅に増加させる。
【００１４】
別の例として、ＰＣＴ出願公開ＷＯ−Ａ−００／６５４４０は、プログラム・コードの変換中に、Ａレジスタ・セットとＢレジスタ・セットとの間で交替して履歴回復ポイントを提供することを開示している。
【００１５】
ＰＣＴ出願公開ＷＯ−Ａ−２００５／００６１０６は、対象プログラム中の複数のタイプの命令のそれぞれに関して、様々なレベルの詳細を記録することにより、種々の正確な例外処理が適用される別のアプローチを開示している。つまり、記録されるべき情報の量およびタイプは、対象命令の性質に応じて多様である。好ましくは、それぞれの対象命令が４つのタイプのいずれかであると判定され、対応するレベルの詳細が記録される。第１のレベルは、全く状態を記録しない。第２のレベルは、最後に知られているスタック・フレームを使用して、正確でない（不正確な）状態情報を提供する。第３のレベルは、変換中、一時抽象レジスタ中に正確な対象プログラム・カウンタを記録し、そのカウンタが、その後、取り出されて、例外が処理される。第４のレベルは、さらなる目標コードを生成し、配置して、例外を生成した目標命令（特に、例外をトリガするトラップ・タイプの命令）の直前の正確な状態を修正する（すなわち、対象プログラム・カウンタを記録し、延滞または保留中の対象レジスタ値を修正する）。添付の特許請求の範囲の特徴を記述する部分は、この明細書に基づく。
【００１６】
これらの先行するアプローチは、前もって定義された回復ポイントにロールバックすることにより、またはそのポイントより前の対象状態を修正することにより、例外が生じたポイントにおける対象プロセッサの状態を正確に決定することのできる情報を記録することに依拠する。しかし、先行技術では、正確な例外処理のために正確な状態を獲得することは、依然として、プログラム・コード変換工程を制限し、相当なオーバヘッドおよび／または特定のハードウェア・サポートを伴う。
【発明の開示】
【発明が解決しようとする課題】
【００１７】
本発明の目的は、プログラム・コード変換を行う際のパフォーマンスを向上させることである。
本発明の好ましい目的は、プログラム・コード変換中の、最も詳細には、動的バイナリ変換中の例外の処理に関連するオーバヘッドを小さくすることである。
【００１８】
本発明の実施形態の別の好ましい目的は、例外の正確な処理のために、正確な対象状態を提供することに関連するオーバヘッドを小さくすることである。
【課題を解決するための手段】
【００１９】
本発明によれば添付の特許請求の範囲に記載する装置および方法が提供される。本発明の好ましい特徴は、従属請求項および以下の説明から明らかとなり得る。
以下は、本発明の各実施形態に従って実現可能な種々の態様および利点の要約である。以下は、当業者が詳細な設計の説明をより迅速に理解し得るように提供されるものであって、本明細書に添付する特許請求の範囲を限定することを意図したものではない。
【００２０】
本発明者らは、特に対象プログラム・コードの目標コードへの動的バイナリ変換を提供するランタイム・トランスレータに関連して特に有用であるプログラム・コード変換をスピードアップすることを目的とする方法を開発した。
【００２１】
本発明の第１態様では、対象コードから目標コードへのプログラム・コード変換において例外を正確に処理する方法が提供される。本方法は、障害を受けやすい対象コード命令から、対応する１つまたは複数の目標命令を含む目標コードを生成することを含む。対応する目標コード命令のそれぞれは回復情報に関連付けられる。目標コード命令の実行中に例外（例えば、障害）が生じた後、その回復情報が取り出され、正確な対象状態を修正するのに使用される。
【００２２】
好ましくは、回復情報は、目標コードの生成中に実行される最適化を考慮に入れる。好ましくは、回復情報は、障害を受けやすい対象コード命令のポイントにおける対象プロセッサを表す正確な対象状態を修正する回復ルーチンを実行するのに使用される。
【００２３】
好ましくは、当該方法は、生成された目標コードの直後に、１つまたは複数の回復情報項目を格納することを含む。回復情報を取得することは、目標コードの走査を進めて、当該目標コードに続く回復情報を探し出し、それぞれの障害が生じた対応する目標命令に関連する回復情報項目を取得することを含む。
【００２４】
好ましくは、目標コードと回復情報は、ブロック単位でインタリーブされる。
特に好ましい実施形態では、目標プログラム・カウンタが、回復情報に索引付けするのに使用される。
【００２５】
本発明の第２態様では、対象コードから目標コードへのプログラム・コード変換に関する例外を正確に処理する方法が提供される。当該方法は、対象コード中の潜在的に障害が生じる対象命令に対応する少なくとも１つの対応する目標命令を含む目標コードを生成するステップと、その少なくとも１つの対応する目標命令に関連する回復情報を格納するステップとを含む。割り込み信号が受信されると、目標コード命令の実行は、対応する目標命令の１つが出現するまで継続される。対応する目標命令に達すると、関連する回復情報が取り出され、正確な対象状態を回復するのに使用される。
【００２６】
好ましい実施形態では、格納された回復情報を使用して正確な対象状態が回復可能になるまで、例外が起こるポイントから正確な例外処理方法をロールフォワードする。好適には、目標コード命令の実行は、好ましくは目標コード・インタプリタを呼び出すことにより、または段階的目標プロセッサ・モードを呼び出すことにより、１つずつ続けられる。
【００２７】
また、本発明は、本明細書で定義する各種方法のいずれかを実行するように構成されたトランスレータ装置まで拡張される。また、本発明は、本明細書で定義する各種方法のいずれかを実現するように、コンピュータによって実行可能な命令が記録されたコンピュータ可読記憶媒体まで拡張される。
【００２８】
本明細書に援用され、本明細書の一部を成す添付の図面は、現在において好ましい実施形態を示し、以下で説明される。
【発明を実施するための最良の形態】
【００２９】
以下の説明は、当業者が本発明を形成及び使用するために提供され、本発明者らによって企図された、本発明を実行するための最良の形態を示す。しかし、種々の変形が可能であることを当業者は理解し得る。本発明の一般的な原理は、改良されたプログラム・コード変換の方法および装置を提供するように本明細書で定義される。
【００３０】
以下の用語において、対象プログラムは、対象プロセッサを含む対象コンピューティング・プラットフォーム上で実行されるものとされる。目標プロセッサを含む目標コンピューティング・プラットフォームは、動的プログラム・コード変換を実行するトランスレータを介して対象プログラムを実行するのに使用される。トランスレータは、目標コードが目標コンピューティング・プラットフォーム上で実行可能となるように、対象コードから目標コードへのコード変換を実行する。
【００３１】
図１は、複数の目標レジスタ１５と、複数のソフトウェア構成要素１７、１９、２０、２１、２７を格納するメモリ１８とを有する目標プロセッサ１３を含む例示的な目標コンピューティング・プラットフォームを示す。ソフトウェア構成要素には、オペレーティング・システム２０、対象コード１７、トランスレータ・コード１９、および、変換された目標コード２１が含まれる。
【００３２】
一実施形態では、トランスレータ・コード１９は、最適化を伴うか否かによらず、対象ＩＳＡ（命令セット・アーキテクチャ）を、別のＩＳＡにおける変換済目標コードに変換するエミュレータである。別の実施形態では、トランスレータ１９は、プログラム・コード最適化を実行することにより、対象コードを目標コードに変換するためのアクセラレータとして機能し、対象コードと目標コードはそれぞれ同一のＩＳＡである。
【００３３】
トランスレータ１９、すなわちトランスレータを実装するソース・コードのコンパイル済みバージョン、および、変換済コード２１、すなわちトランスレータ１９によって生成された対象コード１７の変換は、通常、マイクロプロセッサ、または他の適切なコンピュータである目標プロセッサ１３上で実行されるオペレーティング・システム２０と連携して実行される。
【００３４】
図１に示す構造は、単に例示的であり、例えば、本発明によるソフトウェア、方法、および工程は、オペレーティング・システム内部に、またはオペレーティング・システムの下に存在するコードで実装可能であることを理解し得る。対象コード１７、トランスレータ・コード１９、オペレーティング・システム２０、およびメモリ１８の格納機構は、当業者に知られている多種多様なタイプのいずれであることも可能である。
【００３５】
図１による装置では、プログラム・コード変換は、好ましくは実行時、すなわち目標コード２１が実行されている間に動的に実行される。トランスレータ１９は、変換済プログラム２１とインラインで実行される。トランスレータ１９は、好ましくは、目標アーキテクチャのためにコンパイルされたアプリケーションとして使用される。対象プログラム１７は、実行時にトランスレータ１９によって変換され、目標アーキテクチャ１４上で実行される。
【００３６】
トランスレータ１９を介して対象プログラム１７を実行することには、インタリーブされた形で実行される次の２つの異なるタイプのコードが関係する。すなわち、トランスレータ・コード１９および目標コード２１である。トランスレータ・コード１９は、トランスレータ１９の高レベルのソース・コード実装に基づき、実行時に先立って、コンパイラなどによって生成される。これに対して、目標コード２１は、変換済プログラムの格納された対象コード１７に基づき、実行時の期間中、トランスレータ・コード１９によって生成される。
【００３７】
対象プログラム１７は、対象プロセッサ（図示せず）上で実行される。一実施形態では、トランスレータ１９はエミュレータとして機能する。つまり、トランスレータ１９は、対象プログラム１７を目標プロセッサ１３上で目標コード２１として実際に実行しながら、対象プロセッサをエミュレートする。好ましい実施形態では、少なくとも１つのグローバル・レジスタ・ストア２７が設けられる（対象レジスタ・バンク２７または抽象レジスタ・バンク２７とも呼ばれる）。マルチプロセッサ環境では、対象プロセッサのアーキテクチャに従って複数の抽象レジスタ・バンク２７が任意に設けられる。対象プロセッサ状態の表現は、トランスレータ１９の構成要素、および目標コード２１によって与えられる。つまり、トランスレータ１９は、変数および／またはオブジェクトなどの、様々な明示的なプログラミング言語デバイスの中に対象プロセッサ状態を格納する。トランスレータ１９をコンパイルするのに使用されるコンパイラが、目標コードにおいて、どのように状態および動作が実装されるかを決定する。ちなみに、目標コード２１は、対象プロセッサ状態を、目標コード２１の目標命令によって操作される目標レジスタ１５およびメモリ・ロケーション１８の中で暗示的に提供する。例えば、グローバル・レジスタ・ストア２７の低レベル表現は、単に、割り当てられたメモリの領域である。しかし、トランスレータ１９のソース・コードにおいて、グローバル・レジスタ・ストア２７は、より高いレベルでアクセスされ、操作されることが可能なデータ・アレイまたはオブジェクトである。
【００３８】
図２は、プログラム・コード変換中の実行制御の好ましい方法を示す概略的な流れ図である。
図２に示すように、制御は、まず、トランスレータ制御ループ１９０に存在する。ステップ２０１で、制御ループ１９０が、トランスレータ・コード１９のコード生成ファンクション１９２を呼び出し、ファンクション１９２は、対象コード１７のブロックを、対応する変換済コード２１のブロックに変換する。次に、ステップ２０２で、その変換済コード２１のブロックが目標プロセッサ１３上で実行される。好適には、変換されたコード２１の各ブロックの終端は、制御を制御ループ２０１に戻す命令を含む。つまり、対象コードを変換するステップと実行するステップとが混合され、したがって、対象プログラム１７の各部分は順次変換され、次に実行される。
【００３９】
この場合、「基本ブロック」という用語は、当業者にはよく知られている。基本ブロックは、ブロック・コードを単一の制御パスに限定する、厳密には１つの入口点と、厳密には１つの出口点とを有するコードのセクションである。つまり、基本ブロックは、制御フローの有用な基本単位である。好ましくは、トランスレータ１９は、対象コード１７を複数の基本ブロックに分割し、各基本ブロックは、単一の入口点における最初の命令と、単一の出口点における最後の命令（ジャンプ命令、呼び出し命令、または分岐命令などの）との間の順次命令セットである。トランスレータは、それらの基本ブロックの１つだけを選択する（ブロック・モード）か、または基本ブロックのグループを選択する（グループ・ブロック・モード）ことができる。グループ・ブロックは、好ましくは、単一の単位として一緒に扱われるべき２つ以上の基本ブロックを含む。さらに、トランスレータは、異なる入口条件下で、対象コードの同一の基本ブロックを表すアイソブロックを形成することができる。
【００４０】
好ましい諸実施形態では、ＩＲ（中間表現）のツリーが、元の対象プログラム１７から目標コード２１を生成するステップの一環として、対象命令シーケンスに基づいて生成される。ＩＲツリーは、対象プログラムによって計算される式、および実行される演算の抽象表現である。その後に、目標コード２１が、ＩＲツリーに基づいて生成される。ＩＲノードの集合は、実際には、ＤＡＧ（有向非循環グラフ）であるが、口語的には、「ツリー」と呼ばれる。
【００４１】
当業者は理解し得るように、一実施形態では、トランスレータ１９は、Ｃ＋＋などのオブジェクト指向プログラミング言語を使用して実装される。例えば、ＩＲノードがＣ＋＋オブジェクトとして実装され、他のノードへのリファレンスがそれらの他のノードに対応するＣ＋＋オブジェクトに対するＣ＋＋リファレンスとして実装される。したがって、ＩＲツリーは、互いへの様々なリファレンスを含む、ＩＲノード・オブジェクトの集合として実装される。
【００４２】
さらに、本実施形態の説明では、ＩＲ生成は、対象プログラム１７の実行が意図されている、対象アーキテクチャの特定のフィーチャに対応する抽象レジスタ定義セットを使用する。例えば、対象アーキテクチャ上の各物理レジスタ（「対象レジスタ」）に関する固有の抽象レジスタ定義が存在する。このため、トランスレータにおける抽象レジスタ定義は、ＩＲノード・オブジェクトへのリファレンスを含むＣ＋＋オブジェクト（すなわち、ＩＲツリー）として実装可能である。抽象レジスタ定義セットによって参照されるすべてのＩＲツリーの集合は、作業ＩＲフォレスト（複数の抽象レジスタ・ルートを含み、その各々がＩＲツリーを参照するため、「フォレスト」である）と呼ばれる。それらのＩＲツリー、およびその他の工程は、好ましくは、トランスレータ・コード生成ファンクション１９２の一部を形成する。
【００４３】
（例外処理）
図３は、本発明の好ましい実施形態におけるプログラム・コード変換後の、対象プログラム中の命令と、目標プログラム中の命令との間の関係を示す概略図である。
【００４４】
この例では、対象命令Ｓ１〜Ｓ３が、機能的に均等な目標命令Ｔ１〜Ｔ３をもたらす。対象命令Ｓ１は、デッド・コード削除最適化などによって除去されており、生成された目標コード内において対応物を有さない。対象命令Ｓ２は、１つの均等な目標命令Ｔ３をもたらす。これに対して、対象命令Ｓ３は、２つの目標命令Ｔ１，Ｔ２をもたらす。目標コード命令と対象コード命令との間に、１対０、１対１、１対多、または多対１の関係が、存在可能である。
【００４５】
図３に示すように、別の一般的に使用される最適化は、目標コード中の命令シーケンスが、対象コードの中の元のシーケンスと均等でないコード再スケジューリングを実行することである。ここでは、第２の対象命令Ｓ２は、第３の目標命令Ｔ３として再スケジューリングされている。
【００４６】
また、図３は、対象例外ハンドラ１７０も示す。通常、対象環境は、１つまたは複数の特有の対象障害ハンドラ１７０ａ（すなわち、特定のタイプの例外に特有の）、および／または、１つまたは複数のデフォルトの例外ハンドラ１７０ｂ（いずれの特有の例外ハンドラも登録されていない場合に使用される）を提供する。
【００４７】
この例では、対象命令Ｓ１、Ｓ２、Ｓ３のいずれかが、対象例外ハンドラ１７０によって処理される必要がある例外を潜在的にもたらす。
変換済対象例外ハンドラ２７０は、目標プロセッサ上で実行される目標コードの中で、対象例外ハンドラ１７０をエミュレートする例外ハンドラを提供する。実際には、１つまたは複数の変換済対象特有例外ハンドラ２７０ａか、あるいは、１つまたは複数の変換済デフォルト例外ハンドラ２７０ｂが提供される。例外が処理されると、例外ハンドラ２７０は、通常、制御を目標コード２１に戻す。
【００４８】
変換済対象例外ハンドラ２７０は、例外を正確に処理するために、正確な対象状態を受け取ることを見込む。前述したとおり、正確な対象状態を再現することは、困難であるとともに、高い費用がかかる。第１に、対象状態を計算することや収集することに関連する実際の費用が存在する。例えば、延滞評価などのトランスレータ最適化は、対象レジスタ値の計算を、それらの値を計算するのに必要な基礎をなすデータを格納することにより、遅延させる可能性がある。例外に応答して対象状態を再現することは、それらの値が即時に修正される（すなわち、計算される）ことを要求する。対象レジスタが、前もって計算されている場合でさえ、それらのレジスタが、対象レジスタ・バンク２７などのメモリから取り出されなければならない。
【００４９】
第２に、対象プログラムの任意のポイントにおける正確な対象状態を計算する能力に関連する機会費用が存在する。コード再スケジューリングなどの動的バイナリ・トランスレータにおける多くの重要な最適化には、バイナリ互換性の厳密なモデルからの逸脱が伴う。バイナリ互換性とは、トランスレータが対象アーキテクチャの正確な状態を再現できることを意味する。厳密なモデルとは、変換されたプログラムの任意のポイントにおいて（すなわち、任意の対象命令において）、対象状態を再現可能なモデルである。実行の任意のポイントにおける対象状態を再現するのに必要な情報を保存するため、トランスレータは、通常、重要な最適化をあきらめなければならない。それらの最適化が使用されている場合、トランスレータは、対象コンテキストを正確に再現する方法を持たない。このため、正確な例外処理の現実の費用は、正確な対象状態を生成する作業だけではない。そもそも、対象状態を生成することができるために、コード変換工程に対する制約が存在する。
【００５０】
（障害）
最初に、障害として一般的に知られている特定のカテゴリの例外に集中することにより本発明を説明する。
【００５１】
障害とは、通常、エラー処理に関して使用される。多くの演算は、例外的な状況において、正しい結果をもたらすことができない。例えば、整数加算命令は、表現するには大きすぎる結果をもたらす可能性がある（結果のサイズが、入力のサイズと合致するものと想定すると）。プロセッサ・アーキテクチャ設計者は、そのような障害が示される場合に、どのように示されるかを決定する。通常の３つの設計オプションは、オーバフローをそのまま無視すること、内部プロセッサ状態（例えば、ステータス・フラグ）を変更することにより、エラーは示されるが後続の命令の実行に進むこと、または、オーバフロー例外を生成することである。特定のアーキテクチャは、特定の命令の障害を生じるバージョンと、障害を生じないバージョンとを提供することにより、それらのオプションの混合を提供することが可能である。
【００５２】
他の例として、一部の一般的な部類の障害は、算術例外、種々の形態のメモリ障害（無効なアドレス、保護違反、および整列チェック）、および、不正な形式または（現在の特権レベルにおいて）不正な命令障害である。
【００５３】
障害は、通常、同期した、強制的な例外である。その理由は、障害は、オペランド・データに関して、所与の命令の実行およびプロセッサ状態（メモリ割り当てなどを含む）に起因して生じるからである。障害は、命令内部で生じる。つまり、障害が生じた命令は、完了することができない。通常、対象プロセッサは、障害が生じた命令の開始時の状態にレジスタ状態を解決して、障害ハンドラがエラーを解決しようと試みることを可能にし、実行処理を再開可能にする。一部の状況では、そのような状態を解決することができない可能性があり、そのことが障害を致命的にする可能性がある。
【００５４】
回復可能な障害（通常、ＯＳレベル、またはＯＳより下位のレベルにおける）の例が、ページ・フォルトである。すなわち、メモリ・アクセスが、存在しない仮想メモリの中のページにアクセスしようと試みた場合に、例外が生成される。ページがマップされている場合、仮想メモリ・システムは、物理ページを割り当て、マッピングに従って物理ページを準備し（例えば、ファイルがそのアドレスにマップされている場合、データをロードする）、次に、それに応じてページ・テーブル構造を更新する。その後、プロセッサは、同一の命令で実行を再開し、その命令は、その時点で正しく完了可能となる。
【００５５】
一部の障害は、ユーザ・モード・アプリケーションからマスク可能であり得る。すなわち、例えば整列チェックは、不整列アクセスをサポートするアーキテクチャ上で、マスク可能な障害として一般的に利用可能であり、サポートしないアーキテクチャ上では、整列障害はマスク可能ではない。
【００５６】
対象命令セット・アーキテクチャにおける一部の命令は、障害を生じやすいことが知られているのに対して、他の命令はそうではない。つまり、ほとんどの命令セットは、障害を受けやすい命令（障害を生じる命令、または潜在的に障害を生じる命令とも呼ぶ）を、障害を生じず、障害を受けにくい命令と共に含む。
【００５７】
障害は、同期性であるので問題があり、通常、回復可能である。さらに、障害を受けやすい命令は、いずれの現実の対象プログラムにおいても、比較的頻繁に実行される傾向がある。このため、障害の処理の改良は、プログラム・コード変換において、特に、動的バイナリ変換において即時の利益がある。
【００５８】
（障害処理）
図４は、本発明の好ましい実施形態によるプログラム・コード変換中の目標マシンにおける例示的なプログラム・コード構造を示す。
【００５９】
図４では、対象コード１７の例示的なブロックは、対象命令ＳＣ１〜ＳＣ４を含む。それらの命令の１つ（ＳＣ３＊）は、障害を受けやすい命令１７４であるのに対して、残りの命令は、障害を受けにくい。
【００６０】
また、対応する目標コード２１のブロックが、均等の目標コード命令ＴＣ１〜ＴＣ６とともに示される。障害を受けやすい対象命令１７４（ＳＣ３）は、生成された目標コード２１中の１つまたは複数の対応する目標命令２１４（このケースでは、ＴＣ４＊）と関係する。
【００６１】
図４に示すように、対応する目標命令２１４のそれぞれを、回復情報項目１９５のそれぞれにリンクする回復マップ１９４が設けられる。つまり、障害を受けやすい対象命令１７４の各々は１つまたは複数の対応する目標コード命令２１４を有し、それぞれの命令２１４は、それぞれの目標特有回復情報項目１９５にマップされる。
【００６２】
回復情報１９５は、目標コード２１の実行中に行われる、例外（特に、障害）の正確な処理を可能にする。詳細には、回復情報１９５は、変換済対象例外ハンドラ２７０における例外の正確な処理のための正確な対象状態を作成するため、さらなるネイティブ・コード命令の実行を可能にする。
【００６３】
１つの好ましい実施形態では、回復ハンドラ２１５が設けられ、この回復ハンドラ２１５は、回復情報１９５を使用して正確な対象状態を修正し、例外ハンドラ２７０によって処理すべき例外を準備する。
【００６４】
図５は、本発明の好ましい実施形態による、障害タイプの例外の正確な処理を行うことができる目標コード２１を作成する方法の概略図である。
ステップ５０１で、対象コード１７の或るセクション、好ましくは基本ブロックが復号化される。復号化中、１つまたは複数の障害を受けやすい命令１７４が対象ＩＳＡの定義に従って識別される。
【００６５】
ステップ５０２で、対象コード１７を対応する目標コード２１のブロックに変換するプログラム・コード変換が実行される。任意に、プログラム・コード変換は、デッド・コード削除および／またはコード再スケジューリングなどの最適化を含む。生成された目標コード２１のブロックは、障害を受けやすい対象命令１７４のそれぞれに関する１つまたは複数の対応する目標命令２１４を含む。
【００６６】
ステップ５０３で、対応する目標命令２１４の各々に関する回復情報１９５が提供される。好ましくは、回復マッピング・テーブル１９４内で、対応する目標命令２１４のそれぞれを回復情報１９５のそれぞれにリンクするエントリが作成される。
【００６７】
ステップ５０４で、生成された目標コード２１のブロック中の命令が実行される。例外（障害）が全く生じなかった場合、実行は、ブロックの終わりまで続き、その後、制御は図２のトランスレータ実行ループを通るなどして、次のブロックを呼び出すように進む。
【００６８】
ステップ５０５で、対応する目標命令２１４の１つと関係する例外（障害）が生じた場合、各回復情報１９５が獲得され、正確な対象状態を修正するのに使用される。つまり、回復情報１９５は、さらなる回復コード命令セットを実行する（理想的には、回復ハンドラ２１５において）のに使用される。
【００６９】
回復ハンドラ２１５は、好ましくは、目標プロセッサによってそのまま実行可能なネイティブ・コードで書かれる（トランスレータ１９によって動的に生成される変換済目標コードとは対照的に）。
【００７０】
ステップ５０６で、例外は、例外ハンドラ２７０によって正確に処理される。つまり、ステップ５０５における回復は、例外ハンドラ２７０による正確な例外の処理の条件を満たす正確な対象状態をもたらす。通常、例外は好適に処理され、制御は実行プログラムに戻る。通常、制御は、現在のブロックの実行を完了させるように戻る。それ以外の場合、障害は致命的であり、プログラムは終了する。
【００７１】
（回復情報の格納）
図６は、目標コンピューティング・プラットフォーム上に回復情報１９５、および生成された目標コード２１を格納する、好ましい機構を示す。
【００７２】
前述した回復機構それ自体は、一部の費用をトランスレータ１９にもたらす。第１に、回復情報１９５を格納するのに、メモリ・スペースが要求される。さらに、対応する目標コード命令２１４のそれぞれを回復情報１９５のそれぞれにリンクする回復マップ１９４を格納するスペースが要求される。例外（障害）が生じた場合、妥当な回復情報１９５を迅速、かつ効率的に獲得することが所望される。
【００７３】
図６は、目標コード２１ａの生成されたブロックを格納する目標コンピューティング・プラットフォームの中のメモリの領域を示す。目標コード・ブロック２１ａは、対象コードの中の障害を受けやすい命令１７４に対応する１つまたは複数の対応する目標命令２１４を含む。
【００７４】
回復情報１９５は、メモリ内において、それぞれの目標コード・ブロック２１ａの直後に格納される。つまり、対応する目標命令２１４のそれぞれは、妥当な目標コード・ブロック２１ａの直後に格納される回復情報項目１９５を有する。
【００７５】
好ましくは、マーカ１９６は、目標コード・ブロック２１ａの終端と、回復情報１９５の先頭とを容易に区別するために設けられる。
さらに、図６に示すように、別の変換済目標コード・ブロック２１ｂがメモリ内に格納され、同様にその後に、それぞれの回復情報１９５およびマーカ１９６が続く。つまり、目標コード２１と回復情報１９５が、メモリ内でインタリーブされる。
【００７６】
特定の対応する目標命令２１４内で例外（障害）が生じた場合、それぞれの回復情報を獲得するために、以下のステップが実行される。
第１のステップは、目標コード・ブロックの終端まで走査を進めることである。好都合なことに、このステップは、マーカ１９６が識別されるまで、相次ぐ命令を読み取ることを含む。第２に、回復情報１９５のリストの走査を進めることにより、所望されるそれぞれの回復情報が識別される。
【００７７】
特に好ましい実施形態では、各回復情報１９５は、対応する目標命令２１４のプログラム・カウンタに従って索引付けされる。つまり、対応する目標コード命令２１４のプログラム・カウンタ値は、回復情報１９５のリストの中の索引を形成する。例外が生じた場合、目標プログラム・カウンタは、目標プロセッサの中で直ちに利用可能である。第１に、マーカ１９６を求めてメモリを走査し、第２に、目標プログラム・カウンタを求めて回復情報のリストの中を走査することにより、それぞれの回復情報１９５が効率的に探し出される。
【００７８】
図７は、図６のメモリ・レイアウトを使用して回復情報を獲得する好ましい方法を示す。
実際的な実施形態では、各基本ブロックは、通常、およそ１２の命令を含む。したがって、かかわる距離が比較的短いので、現在の目標コード・ブロックの終端まで走査することは、比較的迅速である。好ましい実施形態では、各対象ブロックは、例えば１００または２００の命令という最大サイズに制限される。比較的長い目標ブロックなどの稀なケースでも、走査は、依然、効果的であり、費用の低い機構である。
【００７９】
図８は、回復情報１９５の特に好ましい実施形態を示す。
図８の例では、回復情報１９５には、目標プログラム・カウンタ１９５ａ、対象プログラム・カウンタ１９５ｂ、回復標識セット１９５ｃ、およびマッピング・テンプレート１９５ｄが含まれる。
【００８０】
回復情報１９５は、回復ハンドラ２１５により正確な対象状態を修正することを可能にする。特に、正確な対象状態は、対象プログラム・カウンタ値（１９５ｂ）と、対象レジスタ値とを含む。
【００８１】
好ましくは、回復ハンドラ２１５は、回復情報を使用して、対象プログラム・カウンタを修正する（対象プログラム・カウンタが既に利用可能ではない場合）。この例では、回復情報１９５は、各目標ＰＣ１９５ａに関する正確な対象ＰＣ１９５ｂを格納する。対象ＰＣは、格納された回復情報の中で、そのフィールド１９５ｂを読み取ることによって修正される。
【００８２】
マッピング・テンプレート１９５ｄは、対応する目標命令２１４のポイントにおいて適用可能な、適切なレジスタ・マッピングを識別する。回復ハンドラ２１５は、対象プロセッサ・レジスタ値を修正する。一実施形態では、レジスタ値は、メモリの中の抽象レジスタ・バンク２７に修正される。代替として、メモリ・ストアが、目標レジスタの中に残される。ここでは、回復ハンドラ２１５は、格納されたマッピング・テンプレート１９５ｄを使用してレジスタ・マッピングを設定し、これにより、対象レジスタが物理目標レジスタにマップされる。
【００８３】
図８に示すように、好ましくは格納された回復情報１９５には、特定の目標コード命令のポイントにおける最適化が未処理であることを表す回復標識（最適化フラグ）セット１９５ｃが含まれる。この例では、フラグＦ１、Ｆ２、Ｆ３、Ｆ４として設定された４つの回復標識が存在する。好ましくは、回復ハンドラ２１５は１つまたは複数のネイティブ・コード回復ルーチン２１６を呼び出して、回復標識Ｆ１〜Ｆ４に基づき、未処理の最適化を実行する。
【００８４】
詳細には、回復ハンドラは、例外が生じたポイントで延期されていた、延滞した作業を実行する。例えば、多くのプロセッサは条件コード・フラグ・セットを提供する。好ましい最適化は、条件コード・フラグの正しい状態を必要に応じて修正可能とする基礎情報（underlying information ）を代わりに格納することにより、条件コード・フラグの修正を遅延させることである。回復ルーチン２１６は、格納された基礎をなす情報から延滞条件コード・フラグ評価を実行する。
【００８５】
図９は、格納された回復情報の別の特に好ましい実施形態を示す。
回復情報１９５は、理想的には、圧縮された形態で格納される。有利には、回復情報のメモリ占有面積は小さくされる。一部の実施形態では、トランスレータ１９は、他の多くのステップと共に、コンピューティング・プラットフォーム上で動作し、トランスレータ１９のオーバヘッドによって消費されるメモリの量を少なくすることが望ましい。
【００８６】
図９に示すように、第１の目標ＰＣ１９５ａおよび第１の対象ＰＣ１９５ｂは、フル値（full values）として格納される。後続のＰＣはそれぞれ、それらの基本値からのオフセットとして格納される。好ましくは、目標コード２１ａ、２１ｂの各ブロックの中の第１の回復情報１９５は基本値としてのフルＰＣ値で格納され、後続の各回復情報１９５は、プログラム・カウンタ値を基本値からのオフセットとして格納する。代替として、ブロックの中の第１の目標コード命令に関するＰＣなどの基本ＰＣが、その命令が対応する目標命令２１４であるか否かにかかわらず、ブロックに関して定義される。
【００８７】
（例１  ＰＰＣ−ｘ８６変換）
対象コード１７の例示的なシーケンスの例を以下に示す。例示的な対象コード１７は、ＰＰＣ（ＰｏｗｅｒＰＣ）タイプのプロセッサに適切である。
【００８８】
対象コード（ＰＰＣ）
０ｘ０００１００３ｃ：．．．
０ｘ０００１００４０：ａｄｄ．ｒ３，ｒ３，６８
０ｘ０００１００４４：ｌｄ  ｒ３，０（ｒ３）
０ｘ０００１００４８：．．．
例示的なＰＰＣ対象コードは、定数値６８をレジスタ「ｒ３」に加え、次に、そのアドレスからｒ３にロードする。この加算は、ＰＰＣドット付き加算命令で実行され、当該命令は、ＰＰＣ条件フィールド・レジスタのフィールド０の中でフラグを設定する。ロード障害が生じた場合、例外の正確な処理のため、そのロード命令のプログラム・カウンタ値（０ｘ０００１００４４）が報告されなければならず、ｒ３は、加算演算が実行された後の値を含まなければならず、条件フィールド０は、更新されていなければならない。
【００８９】
プログラム・コード変換の後、以下の例示的な目標コード２１が生成される。この例では、目標コードは、ｘ８６タイプのプロセッサによって実行可能である。
目標コード（ｘ８６）
０ｘ４００８３２００：ｍｏｖ  １２（％ｅｂｐ），％ｅａｘ
０ｘ４００８３２０３：ａｄｄ  ＄６８，％ｅａｘ
０ｘ４００８３２０６：ｍｏｖ  （％ｅａｘ），％ｅｃｘ
０ｘ４００８３２０８：ｍｏｖ  ％ｅｃｘ，１２（％ｅｂｐ）
目標コードは、対象レジスタｒ３に関する値（この場合、抽象レジスタ・バンク２７を指し示すｅｂｐレジスタからのオフセット１２に存在する）をレジスタｅａｘにロードする。目標コードは、次に、６８をｅａｘに加え、その後、そのアドレスからｅｃｘにロードする。最後に、その結果が、抽象レジスタ・バンクの中の対象レジスタｒ３に再び格納される。
【００９０】
この例では、回復情報１９５の例示的なインスタンスは、以下のとおりである。すなわち、
０ｘ４００８３２０６：
ｓｕｂｊ＿ａｄｄｒ＝０ｘ０００１００４４，
ｆｌａｇｓ＝ｃｒ０＿ｌａｚｙ１＿ｃｍｐ０，
ｒｅｇｉｓｔｅｒ＿ｍａｐ＝［ｌａｚｙ１（％ｅａｘ），ｒ３（％ｅａｘ）］
ターゲットＰＣ（０ｘ４００８３２０６）は、回復情報に索引付けをするのに使用される。このケースでは、目標ｍｏｖ命令は、潜在的に障害を生じる対象ロード命令に対応する目標命令である。正確な対象ＰＣが記録される（０ｘ０００１００４４）。「ｌａｚｙ１」と呼ばれる特別な対象レジスタ内の値の０との比較に基づいて条件レジスタ・フィールド０を修正する必要があることを示すのに、フラグが使用される。また、回復情報は、対象レジスタｌａｚｙ１およびｒ３の値が、目標レジスタｅａｘ（加算目標命令０ｘ４００８３２０３によって生成された値）内に入っていることを示す。回復を行うため、ｅａｘからの値は、適切な対象レジスタに溢れさせられ、条件フィールドは、その時点でｌａｚｙ１に溢れさせられた値を使用して適切な比較を実行することにより、その時点で修正されることが可能であり、適切なＰＣを報告可能である。
【００９１】
要するに、回復情報は、作業を必要とする場合にだけ実行可能にする。つまり、作業は、例外が生じた例外的なケースにおいてだけ実行される。大抵、通常の実行では、正確な対象状態は要求及び修正されない。ここで説明する回復機構は、生成された目標コードの通常の実行中に、作業が延期または全く実行されないことを可能にする。その結果、目標コードの通常の実行が、より高速になり、より効率的になる。しかし、例外が生じた場合、回復情報１９５は、依然として正確な対象状態を修正可能とし、例外を正確に処理可能とする。回復作業は、正確な対象状態を修正するために、例外が生じた後に実行される。
【００９２】
（割り込み）
割り込みの正確な処理と関係する、本情報のさらなる好ましい態様を詳細に説明する。
割り込みは、通常、ハードウェア・デバイス・サポートのために使用される。プロセッサ外部のハードウェア・デバイスにおいてイベントが生じると、そのイベントをプロセッサに通知する信号が送信される。例は、Ｉ／Ｏデバイスからのデータの利用可能性である。外部デバイスは、割り込みに対処するルーチンを呼び出すために、プロセッサを通る命令の現在のフローに割り込みをかける。割り込みの使用により、システムがデバイスに絶えずポーリングを行ってデバイスが対処を必要としているかどうかを調べる必要性が軽減される。別の例は、所定の間隔でユーザ・アプリケーションに割り込みがかけられることを可能にするタイマ割り込みであり、制御は、通常、オペレーティング・システムに移される。規則的な割り込みは、マルチタスク・システムにおいてプロセッサ・リソースの共有を実施する便利な機構である。
【００９３】
割り込みは、プロセッサ内部における特定の命令の実行にではなく、外部デバイスにおけるイベントに反応して駆動されるという点で、非同期の例外である。このため、割り込みは、命令ストリームにおける不定のポイントで生じる可能性がある。割り込みは、実行されている現在の命令ストリームとは無関係であり、実行は、例外に対処が行われると、再開する。
【００９４】
図１０は、割り込みの処理を示す例示的な目標コード・シーケンスを示す。
目標コード２１ａのブロックは、命令ＴＣ１〜ＴＣ６を含む。この例では、割り込みは、プロセッサが命令ＴＣ２を実行している間に生じる。現在の命令（ＴＣ２）の実行が完了する。また、回復情報１９５に関連する、対応する目標命令２１４（このケースでは、命令ＴＣ４）が出現するまで、０、または１つ以上のさらなる命令が実行される（ＴＣ３）。つまり、目標コード命令の実行は、正確な対象状態が実現可能である次のポイントまでロールフォワードされる。
【００９５】
プロセッサが、回復情報１９５に関連する次の対応する目標命令２１４に到達すると、回復情報は、正確な対象状態を修正するために、回復ハンドラ２１５に送られる。次に、正確な対象状態が適切な例外ハンドラ２７０に送られる。このハンドラ２７０は、好ましくは対象割り込みハンドラである。
【００９６】
図１１は、目標コンピューティング・プラットフォーム内で割り込みを処理する３つの好ましい実装形態を示す。
第１の好ましい実施形態では、割り込みタイプの例外が生じると、目標コード・インタプリタ１９７が呼び出される。目標コード・インタプリタ１９７は、回復情報１９５を有する対応する命令２１４に到達するまで、目標コード命令を１つずつ実行する。
【００９７】
第２の実施形態では、ステップ・プロセッサ・モードが呼び出される。つまり、目標プロセッサ１３は、対応する命令２１４に到達するまで、目標コード命令を１つずつ実行するステップ・プロセッサ・モードに入るように制御される。
【００９８】
第３の好ましい実施形態では、回復情報１９５を有する対応する命令２１４に到達するまで、命令による目標コード命令を実行するように、チェック基準が呼び出される。
目標コード・ブロック２１ａ内で、障害を受けやすい対応する目標命令２１４が全く出現しなかった場合、実行は、好ましくはブロックの終端まで続けられる。好ましい実施形態では、正確な対象状態はブロック境界で修正される。
【００９９】
（トラップ）
トラップは、通常、明示的、かつ無条件に、ユーザによって要求された例外である。対象命令がトラップ・タイプの例外を生成した場合、トランスレータ１９は、そのトラップ・イベントを処理するのに要求される動作を直接に実行する、その命令に関する目標コードを生成する。
【０１００】
単一ステップ・トラップや条件付きトラップ（例えば、ＩＡ−３２アーキテクチャにおけるＩＮＴＯ命令）などの一部の命令セット・アーキテクチャは、さらなる特別な処理を要求するトラップを定義する。一般的なケースは、例外が生成されないことである、条件付きトラップは、好ましくは前述した障害と同様に処理される。このようにして、一般的なケースにおける作業が最小限に抑えられる。例外的なケースでは、要求されるさらなる作業は、回復ハンドラを介して呼び出される。
【０１０１】
（異常終了）
異常終了は、通常、回復可能でないイベントであるが、様々な特性を有することが可能である。異常終了は、通常、重大なシステム障害を管理するのに使用される。内部プロセッサ状態の不整合などのハードウェア障害、またはオペレーティング・システムの重要な領域内の誤りなどの深刻なソフトウェア障害を検出すると、プロセッサは、そのエラーを無視して、実行を続けようと試みる、安全のために停止もしくは再起動しようと試みることが可能であり、あるいはそのエラーをオペレーティング・システムに知らせる例外を生成することが可能である。障害と同様に、異常終了は命令内部で生じる。異常終了は、しばしば致命的である。異常終了は、通常、ユーザによるマスクが可能でない。
【０１０２】
マシン・チェック・エラーなどの異常終了が、障害が起きると予期されていない命令の実行内で生じた場合、その異常終了する命令における正確な対象状態を完全に再現するのは困難である。一般に、動的バイナリ変換に関して異常終了を正確に処理するのは、非常に費用がかかる。
【０１０３】
以上の説明から理解されるように、本明細書で説明する例外処理機構は、多くの利点を有する。特に、可能であれば、作業が一般的なケースから取り除かれ、プログラムの通常の実行中、稀にしか生じない例外的なケースにおいてだけ、作業が実行される。しかし、要求される場合、正確な対象状態が実現される。また、正確な対象状態を実現するオーバヘッドが最小限に抑えられる。
【０１０４】
種々の好ましい実施形態を図示して説明したが、添付の特許請求の範囲で定義される本発明の範囲を逸脱することなく、種々の変更および変形が可能であることが、当業者には理解し得る。
【０１０５】
本明細書（添付の特許請求の範囲、要約書、および図面を含む）で開示する特徴のすべて、および／またはそのように開示する方法またはステップのすべては、そのような特徴および／またはステップの少なくともいくつかが互いに相容れない組合せを除き、任意の組合せで組み合わせ可能である。
【０１０６】
本明細書（添付の特許請求の範囲、要約書、および図面を含む）で開示する各特徴は、特に明記しない限り、同一の目的、均等の目的、または同様の目的を果たす代替の特徴によって置き換えられてもよい。このため、特に明記しない限り、開示する各特徴は、一連の一般的な均等の特徴、または同様の特徴の一例に過ぎない。
【０１０７】
本発明は、以上の実施形態の詳細に限定されない。本発明は、本明細書（添付の特許請求の範囲、要約書、および図面を含む）で開示する特徴の任意の新たな１つ、または任意の新たな組合せにまで、あるいはそのように開示する方法またはステップの任意の新たな１つ、または任意の新たな組合せにまで拡張される。
【図面の簡単な説明】
【０１０８】
【図１】本発明の実施形態の装置を示すブロック図。
【図２】プログラム・コード変換中の実行制御の好ましい方法を示す概略流れ図。
【図３】プログラム・コード変換後の対象命令と目標命令の間の関係を示す概略図。
【図４】本発明の好ましい実施形態によるプログラム・コード変換中の目標マシンにおける例示的なプログラム・コード構造を示す図。
【図５】本発明の好ましい実施形態による、正確な例外のために目標コードを作成する方法の概略図。
【図６】回復情報および生成済目標コードを格納する好ましい機構を示す概略図。
【図７】回復情報を獲得する好ましい方法の概略図。
【図８】本発明の好ましい実施形態で使用される回復情報の概略図。
【図９】本発明の別の好ましい実施形態で使用される回復情報の概略図。
【図１０】割り込み処理を示す例示的な目標コード・シーケンスを示す図。
【図１１】目標コンピューティング・プラットフォーム内で割り込みを処理する好ましい実装形態を示す概略図。
【図１】
2008537245.tif 000003
【図２】
2008537245.tif 000004
【図３】
2008537245.tif 000005
【図４】
2008537245.tif 000006
【図５】
2008537245.tif 000007
【図６】
2008537245.tif 000008
【図７】
2008537245.tif 000009
【図８】
2008537245.tif 000010
【図９】
2008537245.tif 000011
【図１０】
2008537245.tif 000012
【図１１】
2008537245.tif 000013
【国際調査報告】
2008537245.tif 000014
2008537245.tif 000015