(57)【要約】【課題】条件コードプラグのエミュレーション方法およびエミュレーション装置を提供すること。【解決手段】エミュレータ（３０）によって、サブジェクトプロセッサ（１４）と条件コードフラグ（１６）とを有するサブジェクトプロセッサ（１２）用に書き込まれたコード（１０）が、互換性のないコンピュータ処理環境（２）で実行可能にされる。エミュレータ（３０）はサブジェクト条件コードフラグ（１６）の状態に作用するサブジェクトコード（１０）のうちの命令パラメータを特定し、かつ記憶する。次に、分岐または飛び越しのような、判断を下すためにフラグ状態を用いるサブジェクトコード（１０）内の命令に遭遇すると、フラグ状態は記録された命令パラメータから解明される。有利には、エミュレーションのオーバーヘッドは大幅に低減する。【選択図】　　　図１
2004038923.tif 000002
【特許請求の範囲】
【請求項１】
プログラムコード変換中に条件コードフラグをエミュレートする方法であって、
（ａ）一連のサブジェクトコード命令からフラグ作用命令を特定するステップと、
（ｂ）特定されたフラグ作用命令のパラメータを記録するステップと、
（ｃ）一連のサブジェクトコード命令からフラグ使用命令を検出するステップと、
（ｄ）記録されたパラメータに対するフラグ状態を解明するステップとを含む方法。
【請求項２】
ステップ（ｄ）が、１つ、または複数のサブジェクト条件コードフラグに対する特定されたフラグ作用命令の作用をエミュレートすることによって、フラグ状態を明示的に計算するステップを含む請求項１に記載の方法。
【請求項３】
ステップ（ｂ）が、パラメータが記録されたことを表示するために、フラグ状態インジケータを保留状態に設定するステップを含み、ステップ（ｄ）がフラグ状態が明示的に計算されたことを表示するために、フラグ状態インジケータを正規化された状態に設定するステップを含む請求項２に記載の方法。
【請求項４】
ステップ（ｄ）が、記録されたパラメータを基準としてフラグ状態を暗黙のうち決定するステップを含む請求項１に記載の方法。
【請求項５】
ステップ（ｃ）は検出されたフラグ使用命令の種類を基準にしてフラグ使用の種類を決定するステップを含むと共に、ステップ（ｄ）はフラグ状態の明示的な計算によって、またはフラグ状態の暗黙の決定によって、決定されたフラグ使用の種類に従ってフラグ状態を解明するステップを含む請求項１に記載の方法。
【請求項６】
ステップ（ａ）が、一連のサブジェクトコード命令から第２のフラグ特定命令を特定するステップを含み、ステップ（ｂ）が、記録されたパラメータを第２のフラグ作用命令に置換えるステップを含む請求項１に記載の方法。
【請求項７】
ステップ（ａ）が、ある種類のフラグ作用命令を複数の所定の種類の１つとして特定するステップを含み、ステップ（ｂ）が、各種類のフラグ作用命令ごとにパラメータを記録するステップを含む請求項１に記載の方法。
【請求項８】
所定の種類が、フルセットの条件コードフラグに作用する第１の種類の命令と、フルセットの条件コードフラグのうちのサブセットに作用する第２の種類の命令とを含む請求項７に記載の方法。
【請求項９】
ステップ（ｄ）が、記録された第１の種類のパラメータに対するフルセットの条件コードフラグについてのフラグ状態を解明するステップと、記録された第２の種類のパラメータに対するサブセットの条件コードフラグに関するフラグ状態を解明するステップとを含む請求項８に記載の方法。
【請求項１０】
ステップ（ｄ）が、記録された第１の種類のパラメータからフラグ状態を明示的に決定するステップと、記録された第２の種類のパラメータから明示的に決定されたフラグ状態を修正するステップとを含む請求項９に記載の方法。
【請求項１１】
所定の種類が、複数セットの条件コードフラグのうちのある条件コードフラグのセットにそれぞれ作用する命令の種類を含む請求項７に記載の方法。
【請求項１２】
記録されるパラメータが、命令の種類パラメータと、１つまたは複数の命令オペランドパラメータとを含む請求項１に記載の方法。
【請求項１３】
命令オペランドパラメータを記録するステップが、オペランドを含む記憶域への参照を記憶するステップを含む請求項１２に記載の方法。
【請求項１４】
命令オペランドパラメータを記録するステップが、元の記憶域でオペランドが未修正の状態で利用可能なままであることを決定するステップと、元の記憶域への参照を命令オペランドパラメータとして記憶するか、あるいはオペランドを元の記憶域から専用のオペランドパラメータ記憶域へとコピーするステップとを含む請求項１２に記載の方法。
【請求項１５】
サブジェクトプロセッサのレジスタに表す複数の抽象レジスタを提供するステップと、各々がオペランドを命令オペランドパラメータとして記憶する１つまたは複数の追加レジスタの抽象を補足するステップとを含む請求項１２に記載の方法。
【請求項１６】
プログラムコード変換中に条件コードフラグをエミュレートする方法であって、
一連のサブジェクトコード命令を選択するステップと、
一連のサブジェクトコード命令の中で、サブジェクトプロセッサのサブジェクト条件コードフラグに作用するオペレーションを指定するフラグ作用命令を特定するステップと、
命令種類パラメータと１つまたは複数のオペランドパラメータとを含む、特定されたフラグ作用命令のパラメータを記録するステップと、
一連のサブジェクトコード命令の中で、１つまたは複数のサブジェクト条件コードフラグのフラグ状態を基準にオペレーションを指定するフラグ使用命令を検出するステップと、
フラグ使用命令の検出に応答して、記録されたパラメータに対する１つまたは複数のサブジェクト条件コードフラグのフラグ状態を解明するステップとを含む方法。
【請求項１７】
一連のサブジェクトコード命令の中で新たなフラグ作用命令に遭遇したとき、記録されたパラメータを更新するステップを含む請求項１６に記載の方法。
【請求項１８】
複数のフラグ作用命令ごとにパラメータを記録するステップを含む請求項１６に記載の方法。
【請求項１９】
複数のフラグ作用命令がそれぞれ、様々なセットのサブジェクト条件コードフラグに関連付けられる請求項１８に記載の方法。
【請求項２０】
（ａ）記録されたフラグ作用命令の作用をエミュレートすることによって１つまたは複数のサブジェクト条件コードフラグの状態を明示的に計算すること、または（ｂ）記録されたパラメータを用いてフラグ使用命令を暗黙のうち表すこと、または（ｃ）フラグ使用命令の種類に従って（ａ）と（ｂ）の選択肢から選択すること、の少なくとも１つによってフラグ状態を解明するステップを含む請求項１６に記載の方法。
【請求項２１】
記録されたパラメータが、少なくとも１つの命令オペランドパラメータを含み、命令オペランドパラメータを記録するステップが、（ａ）所定の記憶域にオペランドをコピーすること、または（ｂ）オペランドを含む元の記憶域への参照を記憶すること、または（ｃ）、（ａ）または（ｂ）を選択的に実行すること、の少なくとも１つを含む請求項１６に記載の方法。
【請求項２２】
サブジェクトコンピュータ処理環境に適したサブジェクトコードを変換するとき、サブジェクトコンピュータ処理環境のサブジェクトプロセッサをエミュレートして、ターゲットコンピュータ処理環境に適したターゲットコードを生成するために、ターゲットコンピュータ処理環境で使用されるエミュレータ装置であって、
一連のサブジェクトコード命令の中でフラグ作用命令を特定する手段と、
特定されたフラグ作用命令のパラメータを記録する命令パラメータ記憶装置と、
一連のサブジェクトコード命令の中でフラグ使用命令を検出する手段と、
命令パラメータ記憶装置に記録された命令パラメータに対するフラグ状態を解明する手段と、を含む装置。
【請求項２３】
請求項２２に記載のエミュレータ装置を備えたコンピュータプラットフォーム。
【請求項２４】
請求項１に記載の方法を実行するためのプログラムコード命令を含む、コンピュータによる読み出しが可能な記録媒体。
【請求項２５】
請求項１６に記載の方法を実行するためのプログラムコード命令を含む、コンピュータによる読み出しが可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラムコード変換の分野に関する。詳細には、本発明は条件コードフラグのエミュレーション方法およびエミュレーション装置に関する。
【０００２】
【従来の技術】
コンピュータ処理の分野では、第１の種類のコンピュータプロセッサ（“サブジェクト”プロセッサ）用に書かれたプログラムコードを第２の種類のプロセッサ（“ターゲット”プロセッサ）で実行することが望ましいことが多い。この場合、サブジェクトプログラムをターゲットプロセッサで実行できるように、プログラムコード変換を行うためにエミュレータが使用される。エミュレータは、サブジェクトプロセッサをエミュレートすることにより、サブジェクトプログラムがあたかもネイティブにサブジェクトプロセッサで実行されるかのような仮想環境を提供する。
【０００３】
従来形のほとんどのコンピュータプロセッサは、プロセッサと密接に関連付けられた少数の高速記憶域である一組のレジスタを備えている。レジスタは、プロセッサから離れていて、速度は遅いが容量は大幅に大きい汎用のランダムアクセスメモリと対比することができる。典型的には、現代のプロセッサは３２から１４４個程度のレジスタを含んでいる。レジスタのサイズが限定され、かつ高速であるため、レジスタはほとんど全てのコンピュータ・アーキテクチャにおける最も重要な資源の１つである。
【０００４】
レジスタは通常は条件コードフラグのセットで増補される。条件コードフラグは、例えばプロセッサ内での命令の実行に応答して設定、またはクリヤされ、様々なオペレーションの結果を表すために使用される。１つまたは複数の条件コードフラグの値は、一連の命令の実行中に判断の基準として用いられる場合が多い。したがって、プログラムコード変換の状況では、条件コードフラグを正確にエミュレートすることが肝要である。
【０００５】
サブジェクトプロセッサの条件コードフラグのセットと、ターゲットプロセッサの条件コードフラグのセットとはある程度重複する傾向があるが、ほとんど全ての場合、２セットのフラグ間に厳密な対応関係は存在しない。したがって、サブジェクト条件コードフラグを正確にエミュレートすることはコストのかかるオペレーションになってしまう。フラグのエミュレーションが変換プロセスの効率に及ぼす影響の程度は、サブジェクトプロセッサのアーキテクチャとターゲットプロセッサのアーキテクチャとの互換性によって異なるが、一般にサブジェクト条件コードフラグのエミュレーションはオペレーション全体の相当の比率を占める。
【０００６】
プロセッサアーキテクチャの中には本来極めて互換性がないものがあるので、別の問題が生ずる。ある種のプロセッサは条件コードフラグの使用に大きく依存するのに対して、ある種の別のプロセッサは条件コードフラグを全く備えていない。例えば、条件コードフラグを使用するサブジェクトプロセッサ用に書き込まれたサブジェクトコードを、条件コードフラグがないターゲットプロセッサで動作するように変換できるエミュレータを提供することは極めてコストがかかることになる。
【０００７】
【発明が解決しようとする課題】
本発明の目的は、先行技術の問題点、特に上記の問題点に対処する、条件コードフラグをエミュレートする方法を提供することである。
本発明の好適な目的は、効率的で、プログラムコード変換の全体的なコストを節減する、条件コードフラグをエミュレートする方法を提供することである。
【０００８】
【課題を解決するための手段】
本発明の第１の態様では、（ａ）一連のサブジェクトコード命令からフラグ作用命令を特定するステップと、（ｂ）特定されたフラグ作用命令のパラメータを記録するステップと、（ｃ）一連のサブジェクトコード命令からフラグ使用命令を検出するステップと、（ｄ）記録されたパラメータに対するフラグ状態を解明するステップとを含むプログラムコード変換中に条件コードフラグをエミュレートする方法が提供される。
【０００９】
第１の好適な実施形態では、好適にはステップ（ｄ）は１つ、または複数のサブジェクト条件コードフラグに対する特定されたフラグ作用命令の作用をエミュレートすることによって、フラグ状態を明示的に計算するステップを含んでいる。ステップ（ｂ）はパラメータが記録されたことを表示するために、フラグ状態インジケータを保留状態に設定するステップを含んでおり、またはステップ（ｄ）はフラグ状態が明示的に計算されたことを示すために、フラグ状態インジケータを正規化された状態に設定するステップを含んでいることが好ましい。
【００１０】
第２の好適な実施形態では、ステップ（ｄ）は記録されたパラメータを基準としてフラグ状態を暗黙のうち決定するステップを含んでいることが好ましい。
【００１１】
第１の好適な実施形態と第２の好適な実施形態とを組み合わせて用いることができる。ステップ（ｃ）は検出されたフラグ使用命令の種類を基準にしてフラグ使用の種類を決定するステップを含み、またステップ（ｄ）はフラグ状態の明示的な計算によって、またはフラグ状態の暗黙の決定によって、決定されたフラグ使用の種類に従ってフラグ状態を解明するステップを含んでいることが好ましい。
【００１２】
ステップ（ａ）は一連のサブジェクトコード命令から第２のフラグ特定命令を特定するステップを含み、またステップ（ｂ）は記録されたパラメータを第２のフラグ作用命令に置き換えるステップを含んでいることが好ましい。この場合、記録されたパラメータは、各新たなフラグ作用命令に遭遇したとき置換される。あるいは、複数の命令についてパラメータが記録される。
【００１３】
ステップ（ａ）はある種類のフラグ作用命令を複数の所定の種類の１つとして特定するステップを含み、またステップ（ｂ）は各種類のフラグ作用命令ごとにパラメータを記録するステップを含んでいることが好ましい。
【００１４】
一実施形態では、所定の種類にはフルセットの条件コードフラグに作用する第１の種類の命令と、フルセットの条件コードフラグのうちのサブセットに作用する第２の種類の命令とを含んでいることが好ましい。ステップ（ｄ）は記録された第１の種類のパラメータに対するフルセットの条件コードフラグについてのフラグ状態を解明し、かつ記録された第２の種類のパラメータに対するサブセットの条件コードフラグに関するフラグ状態を解明するステップを含んでいることが好ましい。ステップ（ｄ）は記録された第１の種類のパラメータからフラグ状態を明示的に決定し、かつ記録された第２の種類のパラメータから明示的に決定されたフラグ状態を修正するステップを含んでいることが好ましい。
【００１５】
第２の実施形態では、好適には、所定の種類には、複数セットの条件コードフラグのうちのある条件コードフラグのセットにそれぞれ作用する命令の種類が含まれる。
【００１６】
好適には、記録されるパラメータには命令の種類パラメータと、１つまたは複数の命令オペランドパラメータとが含まれる。一実施形態では、主メモリ内の所定の記憶域のような専用の記憶域に記録される。パラメータはこのような記憶域に適切にコピーされる。しかし、命令オペランドパラメータの記録には、オペランドを含む記憶域への参照を記憶するステップを含めてもよい。この場合、命令オペランドパラメータを記録するステップには、元の記憶域でオペランドが未修正の状態で利用可能なままであることを決定するステップと、元の記憶域への参照を命令オペランドパラメータとして記憶するか、あるいはオペランドを元の記憶域から専用のオペランドパラメータ記憶域へとコピーするステップとが含まれる。好適には、この方法には、サブジェクトプロセッサのレジスタに相当する複数の抽象レジスタを提供し、かつ各々がオペランドを命令オペランドパラメータとして記憶するための１つまたは複数の追加の抽象レジスタを補足するステップが含まれる。
【００１７】
本発明の第２の態様では、一連のサブジェクトコード命令を選択するステップと、一連のサブジェクトコード命令のうち、サブジェクトプロセッサのサブジェクト条件コードフラグに作用するオペレーションを指定する、フラグ作用命令を特定するステップと、命令種類パラメータと１つまたは複数のオペランドパラメータとを含む、特定されたフラグ作用命令のパラメータを記録するステップと、一連のサブジェクトコード命令から、１つまたは複数のサブジェクト条件コードフラグのフラグ状態を基準にオペレーションを特定するフラグ使用命令を検出するステップと、フラグ使用命令の検出に応答して、記録されたパラメータに対する１つまたは複数のサブジェクト条件コードフラグのフラグ状態を解明するステップと、を含む、プログラムコード変換中に条件コードフラグをエミュレートする方法が提供される。
【００１８】
この方法は、一連のサブジェクトコード命令のうち新たなフラグ作用命令に遭遇すると、記録されたパラメータを更新するステップを含んでいることが好ましい。パラメータは、複数のフラグ作用命令について記録することができる。一実施形態では、複数の命令は異なるセットのサブジェクト条件コードフラグにそれぞれ関連している。
【００１９】
この方法は、（ａ）記録されたフラグ作用命令の作用をエミュレートすることによって１つまたは複数のサブジェクト条件コードフラグの状態を明示的に計算すること、または（ｂ）記録されたパラメータを用いてフラグ使用命令を暗黙のうち表すこと、または（ｃ）フラグ使用命令の種類に従って（ａ）と（ｂ）の選択肢から選択すること、の少なくとも１つによってフラグ状態を解明するステップを含んでいることが好ましい。好適には、記録されたパラメータは少なくとも１つの命令オペランドパラメータを含んでおり、また、命令オペランドパラメータを記録するステップは（ａ）所定の記憶域にオペランドをコピーすること、または（ｂ）オペランドを含む元の記憶域への参照を記憶すること、または（ｃ）（ａ）または（ｂ）を選択的に実行すること、の少なくとも１つを含んでいる。
【００２０】
本発明の第３の態様では、一連のサブジェクトコード命令からフラグ作用命令を特定する手段と、特定されたフラグ作用命令のパラメータを記録する命令パラメータ記憶装置と、一連のサブジェクトコード命令からフラグ使用命令を検出する手段と、命令パラメータ記憶装置に記録された命令パラメータに対するフラグ状態を解明する手段と、を含む、サブジェクトコンピュータ処理環境に適したサブジェクトコードを変換する際にサブジェクトコンピュータ処理環境のサブジェクトプロセッサをエミュレートして、ターゲットコンピュータ処理環境に適したターゲットコードを生成するために、ターゲットコンピュータ処理環境で使用されるエミュレータ装置が提供される。
【００２１】
本発明は更に、本明細書に記載の方法を実行するためにエミュレータ装置を組入れ、および／または構成されたコンピュータプラットフォームにも拡張される。コンピュータプラットフォームは、例えばネットワーク化されたコンピュータシステム、サーバコンピュータ、デスクトップコンピュータ、または携帯用計算機のような適切な任意の形式のものでよい。本発明は更に、本明細書に記載のいずれかの方法を実行するためのプログラムコード命令を含むコンピュータによって読み出し可能な記録媒体にも拡張される。
【００２２】
【発明の実施の形態】
本発明をより明解に理解し、かつ本発明の実施形態を実行に移す方法を示すために、一例として添付の概略図を参照する。
【００２３】
図１を参照すると、サブジェクトコンピュータ処理環境１と、ターゲットコンピュータ処理環境２とを含むコンピュータ処理環境の例が示されている。サブジェクト環境１では、サブジェクトコード１０をサブジェクトプロセッサ１２で固有に実行可能である。サブジェクトプロセッサ１２はサブジェクトレジスタ１４のセットと、サブジェクト条件コードフラグ１６のセットとを含んでいる。この場合、サブジェクトコード１０は、当業者にはよく知られているように、サブジェクトコード１０とサブジェクトプロセッサ１２との間の中間層（例えばコンパイラ）を用いて任意の適切な言語で表されるものでよい。
【００２４】
サブジェクトコード１０はターゲットコンピュータ処理環境２で実行することが望ましく、この環境はターゲットレジスタ２４のセットとターゲット条件コードフラグ２６のセットとを使用するターゲットプロセッサ２２を備えている。典型的な例として、サブジェクトプロセッサ１２はＩｎｔｅｌ（登録商標）Ｘ８６系のプロセッサであり、ターゲットプロセッサ２２はＰｏｗｅｒＰＣ（登録商標）系のプロセッサである。これらの２種類のプロセッサは本来互換性がない。第１に、これらの２つのプロセッサは異なる命令セットを使用する。第２に、Ｘ８６プロセッサは、この系統のプロセッサ独自であり、ＰｏｗｅｒＰＣ（登録商標）系のアーキテクチャには備えられていない２つのフラグ（補助フラグおよびパリティフラグ）を使用する。したがって、サブジェクトコード１０をその非互換性の環境で実行するために、ターゲットコンピュータ処理環境２にエミュレータ３０が備えられる。
【００２５】
エミュレータ３０はサブジェクトコード１０で変換プロセスを実行し、変換されたターゲットコード２０をターゲットプロセッサ２２に供給する。エミュレータ３０は適切にバイナリ変換を実行し、サブジェクトプロセッサ１２に適応して実行可能なバイナリコードの形式のサブジェクトコード１０は、ターゲットプロセッサ２２に適応して実行可能なバイナリコードへと変換される。
【００２６】
変換は静的に、または動的に行うことができる。静的変換の場合は、変換されたプログラムがターゲットプロセッサで実行される前にプログラム全体が変換される。これには著しい遅延が含まれる。したがって、ターゲットプロセッサ２２で即座に実行できるようにサブジェクトコード１０の小部分を動的に変換するエミュレータが既に開発されている。これは、サブジェクトコード１０の大部分が実際には使用されず、または稀にしか使用されないのではるかに効果的である。本発明の好適な実施形態は、特にサブジェクトコード１０をターゲットプロセッサ２２で実行可能なターゲットコード２０へと動的にバイナリ変換するエミュレータ３０と共に使用することを意図している。
【００２７】
実行可能な形式では、サブジェクトコード１０はサブジェクトレジスタ１４とサブジェクト条件コードフラグ１６とを直接的、または間接的に利用する命令を与える。したがって、サブジェクトコード１０を正確に変換するために、これらの命令の作用をエミュレートすることが望ましい。しかし、ターゲット条件コードフラグ２６はサブジェクト条件コードフラグ１６と直接的な互換性がないので、ターゲットコンピュータ処理環境におけるサブジェクト条件コードフラグ１６のエミュレーションは時間と資源の双方に関してコストがかかる。
【００２８】
ターゲットプロセッサでのコスト効率が高いように条件コードフラグのエミュレーションを行うことが望ましい。更に、エミュレーション方法を多くの異なる種類のターゲットプロセッサで効率的に実行できることが望ましい。理想的には、条件コードフラグを備えていないターゲットプロセッサでも効率的なエミュレーションができることが望ましい。
【００２９】
図２は条件コードフラグをエミュレートする方法の第１の好適な実施形態を示している。ステップ２１０で、フラグ設定命令のパラメータが記録される。好都合には、ある命令は１つまたは複数の条件コードフラグに作用することが分かっており、一方、他の命令は条件コードフラグに作用しないことが分かっている。したがって、サブジェクトコード１０内の一連の命令を変換する際に、フラグの設定に作用する可能性がある命令が特定される。次にこのフラグ作用命令のパラメータが後に利用できるように記憶される。
【００３０】
ステップ２２０では、フラグ使用が検出される。すなわち、例えば条件コードフラグの値に基づいて分岐または飛び越しの決定を行うために、サブジェクトコード１０の命令セットのうちのある命令が、１つまたは複数のサブジェクト条件フラグ１６を使用したことが判明する。この時点で、これらのフラグの実際値が判明することが望ましい。
【００３１】
ステップ２３０は、フラグ作用命令の記録されたパラメータから、少なくとも使用されたことが検出された１つまたは複数のフラグについて、条件コードフラグの値を解明するステップである。
【００３２】
この方法では、可能な最後の瞬間までフラグのエミュレーションを遅らせる。フラグに作用する可能性がある命令について命令パラメータが記憶される。次に、フラグが判断の基準として用いられる場合のように、フラグをエミュレートする必要がある場合は、記録された命令パラメータを用いて、その時点で必要なフラグ（１つまたは複数）が解明される。この場合、フラグ作用命令は、その命令がサブジェクト条件コードフラグに及ぼす作用の明示的なエミュレーションを含めてエミュレートされる。しかし、完全なフラグのエミュレーションはフラグ使用命令に遭遇した場合だけ実行されるので、フラグのエミュレーションに関連するオーバーヘッドは大幅に節減され、エミュレータの性能はかなり増強される。
【００３３】
フラグの値が解明された後で、これらの値は新たなフラグ作用命令に遭遇するまで有効である。その時点で、フラグ作用命令のパラメータは、例えばステップ２１０で再び記録される。好適には、エミュレートされた条件コードフラグは正規化され、明示的に計算された状態にあるか、あるいは記録されたフラグ作用命令を基準にして解明されるべき保留状態にあるものとしてマークされる。
【００３４】
図３は図２の方法を説明するための２つの命令シーケンスの例を示している。簡単な第１の例では、１行目の命令はサブジェクト条件コードフラグ“ｚ”、“ｓ”、および“ｏ”に作用し、引き続いて、“ｚ”フラグは２行目の条件分岐命令によって利用される。この例では、第１の命令（Ｓｕｂ）はレジスタＲ１内の値からレジスタＲ２内の値を減算し、その結果がゼロに等しい場合は分岐（Ｂｅｚ）が行われる。１行目の命令のパラメータが記録され、これらのパラメータは次に、２行目の命令のフラグ“ｚ”の値を決定するために用いられる。第２の、より複雑な例では、２行目の命令（Ｂｌｅ）は、減算の結果がゼロ未満、またはゼロに等しい場合に分岐し、この判断は一例である条件コードフラグ“ｚ”、“ｓ”、および“ｏ”を基準にして行われる。
【００３５】
この第１の方法を向上するものとして、ほとんどのフラグ使用命令について、各フラグの値を明示的に計算する必要がないことが判明している。すなわち、フラグ作用命令の記憶されたパラメータを基準にして、フラグの値を暗黙のうち決定することができる。
【００３６】
図３のコードの例を参照すると、２行目の分岐決定は１行目の先行のフラグ作用命令のパラメータに基づいて簡単に行うことができる。すなわち、フラグ値“ｚ”を記録された命令パラメータに基づいて暗黙のうち決定することができ、フラグ値“ｚ”を明示的に決定する必要がない。したがって、ステップ２２０は有利には、フラグ使用を決定し、フラグ使用の種類を決定するステップからなる。次に、ステップ２３０はフラグ値を明示的に決定するか、あるいは決定されたフラグ使用の種類に基づいて、記録された命令パラメータからフラグ値を暗黙のうち決定するステップである。
【００３７】
図３に示したものと同様の命令の組合わせは極めて頻繁に行われる。したがって、これを最適化することには著しい効果がある。図３に示した命令シーケンスの例は、フラグ作用命令（Ｓｕｂ）およびその直後に続くフラグ使用命令（ＢｅｚまたはＢｌｅ）を含んでいる。しかし、関連するフラグ（１つまたは複数）に作用せず、またはこれを使用しない１つまたは複数の介在するステライル命令が例の１行目と２行目との間に存在することもある。
【００３８】
ここで図４を参照すると、前端３１とコア３２と後端３３とから構成された好適な実施形態のエミュレータ３０がより詳細に示されている。前端３１はエミュレートされるサブジェクトプロセッサ１２向けに特有に構成されている。前端３１はサブジェクトコード１０の所定の部分を取り、総称的な中間表現のブロック（“ＩＲブロック”）を備えている。
【００３９】
コア３２は、ここでは詳細に説明する必要がない未使用コード削除のような最適化技術を用いて、前端３１によって生成される各々のＩＲブロックを最適化する。
【００４０】
後端３３はコア３２から最適化されたＩＲブロックを取り、ターゲットプロセッサ２２によって実行可能なターゲットコードを生成する。
【００４１】
好適には、前端３１はサブジェクトコード１０を基本ブロックに分割する。その際、各基本ブロックとは一意的な入口ポイントでの最初の命令と、一意的な出口ポイントでの最後の命令との間の一連の命令セット（例えば飛び越し、呼び出し、または分岐命令）である。コア３２は単一のユニットとして共通に処理される２つ、またはそれ以上の基本ブロックからなるグループブロックを選択してもよい。更に、前端３１は異なるエントリ条件でサブジェクトコードの同じ基本ブロックを呈するｉｓｏブロックを形成してもよい。
【００４２】
使用時には、サブジェクトコード１０の基本ブロックのような第１の所定の部分が特定され、かつ変換モードでターゲットプロセッサ２２で動作するエミュレータ３０によって変換される。ターゲットプロセッサ２２は次に対応するターゲットコード２０の最適化をされ、変換されたブロックを実行する。
【００４３】
好適なエミュレータ３０はコア３２内に適切に備えられた複数個の抽象レジスタを含んでおり、これらはサブジェクトコード１０を実行するためにサブジェクトプロセッサ１２内で使用される物理的サブジェクトレジスタ１４である。抽象レジスタはサブジェクトプロセッサレジスタに対するサブジェクトコード命令の予期される作用を表すことによって、エミュレートされているサブジェクトプロセッサ１２の状態を規定する。
【００４４】
図４は更に前述の基本的なエミュレータのアーキテクチャで使用するのに適したフラグエミュレーション方法の好適な実現をも示している。フラグ作用命令がサブジェクトコード１０から特定されると、その命令のパラメータが命令パラメータ記憶装置２００に記録される。最も利便には、記憶された命令パラメータは命令の種類２０１と、１つまたは複数の命令オペランド２０２が含まれている。例えば、ｘ８６型のプロセッサの場合、各命令は２つのオペランドの最大限まで動作可能であり、従って、２つのオペランドパラメータ２０２ａと２０２ｂが記録される。命令種類パラメータ２０１は１つまたは複数のオペランドパラメータ２０２と共に、明示的または暗黙のうち解明されるべくエミュレートされたサブジェクト条件コードフラグ１６の各々についての充分な情報を供給する。
【００４５】
１つまたは複数のオペランドパラメータ２０２は適切には、エミュレートされたサブジェクトレジスタ１４のセットに加えて、１つまたは複数の抽象レジスタとして表される。すなわち、ターゲットコンピュータ処理環境２のエミュレータ３０は、抽象レジスタを使用することによってサブジェクトレジスタのセットをエミュレートし、かつこの抽象レジスタのセットを１つまたは複数の追加のレジスタで補足して、命令オペランドパラメータを記憶する。したがって、動的な量のオペランドパラメータをターゲットプロセッサ１２の高速記憶域内で利用でき、サブジェクト条件コードフラグ１６の値を、例えば適切な動的ターゲットコードを介した場合と同様に迅速かつ低コストで解明できる。静的に決定できる量である命令種類パラメータ２０１は、例えば主メモリの場合のようなターゲットコンピュータ処理環境のより低速の、またはより離間した記憶域に適切に記憶され、基本ブロックのような対応するコード部分と関連している。
【００４６】
図４に示すように、この第１の好適な実施形態では、最新のフラグ作用命令だけが記憶される。サブジェクトコード１０内の命令シーケンスで各々の新たなフラグ作用命令に遭遇すると、最後に遭遇したフラグ作用命令のパラメータが記録されたパラメータに上書きされる。すなわち、各々の新たなフラグ作用命令に遭遇すると、新たなフラグ作用命令のパラメータが命令パラメータに上書きされる。
【００４７】
本発明の好適な実施形態を更に説明するため、図５は６行のサブジェクトコード例を示している。ある命令（Ｓｕｂ）はフルセットの条件コードフラグｏ，ｓ，ｚ，ａ，ｐ，およびｃに作用し、他の命令（Ｉｎｃ）はサブセットの条件コードフラグだけに作用する。第３列は命令の種類を記録し、一方、第４列と最後の列はその命令によって参照された２つのオペランドＡおよびＢを記憶する。この例では、“正規化”とはフラグ値の正規化された状態を意味し、一方“Ｓｕｂｌｏｎｇ”は命令の種類、すなわちＸ８６型プロセッサの例では長い（３２ビット）の減算を意味する。ＥＡＸ、ＥＢＸ、ＥＣＸ、およびＥＤＸはサブジェクトレジスタの例である。
【００４８】
使用時には、エミュレータは基本ブロックのようなサブジェクトコードの所定の部分を形成し、１つの基本ブロックから他の基本ブロックへと移行する際のエミュレーションの状態を示すエントリ条件を記憶する。すなわち、エミュレータは新たな基本ブロックへの入口でのエミュレーションの現行の状態を定義するために用いられる。これらのエントリ条件には例えば、各抽象レジスタの状態、および条件コードフラグの状態が含まれる。図５では、サブセットのフラグに作用する２行目と４行目の“Ｉｎｃ”命令はフラグが明示的に決定されることを要求し、状態は正規化された状態として示される。一方、“Ｓｕｂ”命令はフラグを保留状態にし、そのフラグ作用命令のパラメータが記録される。６行目で飛び越し“ＪＡ”命令の場合は、５行目の“Ｓｕｂ”命令の記録されたパラメータから間接的に導出されて、条件コードフラグがエミュレートされる。
【００４９】
図６はサブジェクトコードをターゲットコードへと変換中の好適なエミュレーション方法を示している。第１列には、一対の命令の例が示されており、この場合は比較（Ｃｍｐ）命令および、ゼロではない場合は飛び越し（Ｊｎｅ）命令である。エミュレータ３０の前端３１はこれらの命令が基本ブロックからの命令であることを決定する。第２列は、コア３２内の標準化された中間表現として記載された同じ命令を示している。第３列は後端３３によって生成される、結果として生じたターゲットコードを示している。この例はＭＩＰＳプロセッサによってエミュレートされるｘ８６型プロセッサに適したサブジェクトコードを示している。ＭＩＰＳプロセッサのアーキテクチャはターゲット条件コードフラグを備えていない。Ｘ８６型プロセッサの条件コードフラグはフラグなしのＭＩＰＳプロセッサ内でエミュレートするには従来から極めてコストが高いので、この例は最悪の実際的な状況を示している。図６の４列目は、中間表現から生成された２行のターゲットコードを、エミュレータによる最適化段階の間に大域的な未使用コードの削除によって除去できることを示している。したがって、第１列の２行のサブジェクトコードから第３列の単一の行のターゲットコードが生ずる。
【００５０】
図６の簡単な例で示すように、ここに記載しているエミュレーション方法は極めて互換性がない環境でも効果的に実施することができる。命令の大部分、すなわちステライル命令（ｓｔｅｒｉｌｅ　ｉｎｓｔｒｕｃｔｉｏｎ）についてはフラグのエミュレーションは全く必要ない。更に、多くの場合、記録された命令パラメータからフラグ状態を暗黙のうち導き出すことができる。ソースコードのうちの僅かな比率の命令だけが、サブジェクト条件コードフラグの完全に正規化されたエミュレーションを必要とする。実際例として、例えばＸ８６型サブジェクトプロセッサ用に書き込まれたソースコードに頻繁に出現する減算（Ｓｕｂ）、または比較（Ｃｍｐ）またはテスト（Ｔｓｔ）のような命令は、サブジェクト条件コードフラグを明示的に解明する必要なくエミュレートすることができる。
【００５１】
前述の実施形態では、各オペランドを表すために追加の抽象レジスタを使用することによって、最後のフラグ作用命令が簡単かつ容易に記録される。このアーキテクチャでは、追加の抽象レジスタは可能性がある各々のオペランドごとに備えられている。ｘ８６型プロセッサの例では、各命令は最大２つのオペランドに作用することができ、したがって２つの追加のオペランドパラメータレジスタが使用されている。しかし、場合によっては、後述するように追加の命令パラメータを記録することが有利なこともある。
【００５２】
図７は複数セットの命令パラメータを記録するための好適な実施形態を示している。この例では、２セットの命令パラメータ、すなわちインスト（ｉｎｓｔ）＿１およびインスト（ｉｎｓｔ）＿２が備えられている。
【００５３】
ある種のプロセッサの場合、サブセットのサブジェクト条件コードフラグだけに作用する命令と、フルセットのサブジェクト条件コードフラグに作用する他の命令とがある。１つの選択肢として、この問題点は最後のフルセットのフラグ作用命令からフルセットのフラグ値を明示的に決定し、次に、サブセットに作用する命令によって作用されるサブセットのフラグ値を暗黙のうち決定することによって解消される。次に、フルセットのフラグに作用する最後の命令の明示的に決定されたフラグ値と、新たに遭遇したサブセットに作用する命令とを組合せることによって、フルセットのフラグ値を決定することができる。
【００５４】
図８は、図７の記録された第１と第２の命令パラメータの使用を説明するために４行のサブジェクトコードを示している。１行目の加算命令（ａｄｄ）は完全なセットのフラグに作用し、一方、３行目の減分命令（ｄｅｃ）はサブセットのフラグだけに作用する。上記の実施形態では、先ず１行目用に記録された命令パラメータを基準にしてフラグを正規化することによって３行目のフラグを明示的に定義する必要があろう。しかし、図７に示すように２セットの命令パラメータを備えることによって、１行目および３行目の双方の命令を、各ポイントでフラグを正規化する必要なく記録することができる。４行目でフラグを使用する飛び越し命令に遭遇した場合は、記憶された２セットの命令パラメータから条件コードフラグの値を明示的に、または暗黙のうち解明することができる。
【００５５】
図９および図１０は幾つかの同一のフラグセットを使用するＰｏｗｅｒＰＣ（登録商標）系のようなプロセッサで使用するためのエミュレーション方法の別の好適な実施形態を示している。
【００５６】
図９は各々が４つのフラグ、すなわち未満（ＬＴ）、以上（ＧＴ）、等しい（ＥＱ）、およびオーバーフロー一覧（ＳＯ）を含む８つの４ビット条件フィールド（ＣＦ）を用いて、代表的なＰｏｗｅｒＰＣプロセッサで使用される条件レジスタを示している。このプロセッサアーキテクチャでは、フラグ設定オペレーションによって８セットのフラグの１つを選択的に修正することが可能である。更に、ほとんどの命令は特性されたフラグセット内の全てのフラグを設定するが、オペレーションには特定のフラグの状態に作用するものもある。したがって、従来のエミュレーションシステムでは、この性質のプロセッサをエミュレートするには比較的コストが高い。
【００５７】
条件レジスタ内の条件コードフラグに対する修正のほとんどは、２つの値の符号付きの、または符号なしの比較を行う比較命令によって開始される。特定の比較フィールド（ＬＴｎ、ＧＴｎ、またはＥＱｎ、但しｎ＝０．．．７）内の３つの比較フラグの１つが設定され、同時に他の２つはクリヤされる。この比較的複雑なサブジェクト条件コードフラグのセットをエミュレートするには、命令パラメータが各々の条件フィールドごとに記録されるように記録された命令のセットを備えることが便利である。この例では、図１０に示すように、最後のフラグ作用命令を各条件フィールドごとに記録できるように、命令パラメータが“ｎ”個の命令ごとに記録される。必要ならば、図１０の実施形態を図８の実施形態と組み合わせて、各条件フィールドごとに複数の記録された命令を備えるようにすることができる。
【００５８】
図１１はエミュレーションの効率を高めるための更に別の好適な選択肢を示している。上記の実施形態では、フラグ状態を解明する必要がある場合に利用できるように、フラグ作用命令のオペランドはオペランドレジスタへとコピーされる。しかし、場合によっては、代わりにそのオペランドの元のソース記憶域を参照することによって前記のコピーを省くことができる。すなわち、オペランド値が例えばエミュレートされたサブジェクトレジスタ内に妥当に記録される。このサブジェクトレジスタ内の値が不変のままに留まっているならば、サブジェクトレジスタ自体をそのオペランド値のソースとして利用することができる。
【００５９】
この例で図１１はＰｏｗｅｒＰＣプロセッサのアーキテクチャ向けに適応化されている。各オペランドＡ０−ｎ、Ｂ０−ｎごとに、２つの制御フィールドが記録される。第１の制御フィールドは、オペランド値が専用のオペランドレジスタ２０２へとコピーされたか否かを示し、あるいは第２のフィールドが前記オペランドの値を含む記憶域を指定することを示す。すなわち、第２の制御フィールドは、所望のオペランドパラメータ値を含むサブジェクトレジスタ（すなわちエミュレータによって保存される抽象レジスタの１つ）への参照として用いられる。この場合、第１の制御フィールドは単一ビットの長さであり、一方、第２のフィールドは長さが５ビットであり、これはこのプロセッサの例で利用できるサブジェクトレジスタに対応するのに充分な長さである。
【００６０】
別の好適な実施形態では、記録されたオペランドのパラメータはフラグ作用命令によって用いられるオペランドレジスタのサブセットであるに過ぎない。第１に、フラグ作用命令が可逆的な変換を行い、フラグ状態を解明したい場合に、このオペレーションの結果を依然として利用できる場合は、結果は第１のオペランドと共に第２のオペランドを推測するために利用できる。第２に、フラグ作用オペレーションが複製のパラメータを有している場合は、これらのパラメータのうちの１つだけを記録するだけで充分である。これらの特殊なケースのフラグ作用命令によって、ターゲットコードの最適化が強化され、更に条件コードフラグのエミュレーションに関連するオーバーヘッドが低減する。
【００６１】
本発明の好適な実施形態を、互換性がないコンピュータ処理環境間での変換の目的で、プログラムコード変換を行うエミュレータの状況で記載してきた。しかし、本発明の原理は最適化の目的のためのプログラムコード変換のような、サブジェクトプロセッサとターゲットプロセッサが互換的なアーキテクチャを有する分野にも応用できる。
【００６２】
ここに記載したエミュレーション方法は、この方法を実施するための演算処理プログラムとして、コンピュータにより読み出し可能な記録媒体に記録されるのに適している。本発明は更に、エミュレーション方法を実施するためのエミュレータ装置、およびコンピュータ・プラットフォームにも拡張される。
【００６３】
本発明は上記の説明から明らかであるように、またこの方法を実施する当業者には明らかであるように、多くの利点を有している。特に、フラグのエミュレーションは、互換性が極めて乏しいサブジェクトプロセッサとターゲットプロセッサの環境でも、効率的に、かつ高いコスト効率で実施される。
【図面の簡単な説明】
【図１】サブジェクトコンピュータ処理およびターゲットコンピュータ処理の環境を含むコンピュータ処理環境の例を示す。
【図２】条件コードフラグをエミュレートする好適な方法の概略を示す。
【図３】サブジェクトプログラムコードの２つの例を示す。
【図４】好適なエミュレータを示す。
【図５】記録された命令パラメータと共にサブジェクトプログラムコードの例を示す。
【図６】サブジェクト環境からターゲット環境への変換中のプログラムコードを示す。
【図７】命令パラメータを記憶するための好適な構成を示す。
【図８】サブジェクトプログラムコードの例を示す。
【図９】サブジェクトプロセッサの例での条件コードフラグの条件レジスタを示す。
【図１０】命令パラメータを記憶するための好適な構成を示す。
【図１１】命令パラメータを記憶するための別の好適な構成を示す。
【符号の説明】
１　サブジェクトコンピュータ処理環境
２　ターゲットコンピュータ処理環境
１０　サブジェクトコード
１２　サブジェクトプロセッサ
１４　サブジェクトレジスタ
１６　サブジェクト条件コードフラグ
２０　変換されたターゲントコード
２２　ターゲットプロセッサ
２４　ターゲットレジスタ
２６　ターゲット条件コードフラグ
３０　エミュレータ
３１　前端
３２　コア
３３　後端
【図１】
2004038923.tif 000003
【図２】
2004038923.tif 000004
【図３】
2004038923.tif 000005
【図４】
2004038923.tif 000006
【図５】
2004038923.tif 000007
【図６】
2004038923.tif 000008
【図７】
2004038923.tif 000009
【図８】
2004038923.tif 000010
【図９】
2004038923.tif 000011
【図１０】
2004038923.tif 000012
【図１１】
2004038923.tif 000013
【外国語明細書】
2004038923.tif 000014
2004038923.tif 000015
2004038923.tif 000016
2004038923.tif 000017
2004038923.tif 000018
2004038923.tif 000019
2004038923.tif 000020
2004038923.tif 000021
2004038923.tif 000022
2004038923.tif 000023
2004038923.tif 000024
2004038923.tif 000025
2004038923.tif 000026
2004038923.tif 000027
2004038923.tif 000028
2004038923.tif 000029
2004038923.tif 000030
2004038923.tif 000031
2004038923.tif 000032
2004038923.tif 000033
2004038923.tif 000034
2004038923.tif 000035
2004038923.tif 000036
2004038923.tif 000037
2004038923.tif 000038
2004038923.tif 000039
2004038923.tif 000040
2004038923.tif 000041
2004038923.tif 000042
2004038923.tif 000043
2004038923.tif 000044
2004038923.tif 000045
2004038923.tif 000046
2004038923.tif 000047
2004038923.tif 000048
2004038923.tif 000049
2004038923.tif 000050
2004038923.tif 000051
2004038923.tif 000052
2004038923.tif 000053
2004038923.tif 000054
2004038923.tif 000055
2004038923.tif 000056