(57)【要約】      （修正有）【課題】事前変換する際の飛び先アドレスの事前予測を効率的に行えるターゲットコード事前変換方法を提供する。【解決手段】ターゲットコードを基本ブロックに分割し、基本ブロックごとに、ターゲットコードの命令を解析し、レジスタからの読み込み命令、レジスタへの書き込み命令、メモリからの読み込み命令、メモリへの書き込み命令および算術論理命令を検出した場合には、当該命令に対応するノードや辺とするとともに、あるレジスタにロードされる値の、他のレジスタや直値あるいはメモリ内容との依存関係を表現した依存グラフを作成し、メモリへの読み書きアクセスがあった際に利用され、メモリ読み込み内容及びメモリ書き込み内容とアドレス値とを対応づけるメモリ参照テーブルを作成し、依存グラフとメモリ参照テーブルを連携させ、分岐命令の事前変換に際し、飛び先アドレスとして可能性のある全てのアドレス値をエントリポイントとしてリスト化する。【選択図】図２
2012159936.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットコードを実行前にホストコードに変換するターゲットコード事前変換方法であって、
前記ターゲットコードを、分岐命令もしくは分岐命令からの流入が起こらない命令群の最小単位である基本ブロックに分割し、
前記基本ブロックごとに、前記ターゲットコードの命令を解析し、レジスタからの読み込み命令、レジスタへの書き込み命令、メモリからの読み込み命令、メモリへの書き込み命令および算術論理命令を検出した場合には、当該命令に対応するノードや辺とするとともに、あるレジスタにロードされる値の、他のレジスタや直値あるいはメモリ内容との依存関係を表現した依存グラフを作成し、
メモリへの読み書きアクセスがあった際に利用され、メモリ読み込み内容及びメモリ書き込み内容とアドレス値とを対応づけるメモリ参照テーブルを作成し、
前記依存グラフと前記メモリ参照テーブルを連携させ、
分岐命令の事前変換に際し、飛び先アドレスとして可能性のある全てのアドレス値をエントリポイントとしてリスト化するターゲットコード事前変換方法。
【請求項２】
前記ターゲットコードを１命令づつデータの集合体に変換して命令を解析した後、アーキテクチャ非依存の中間コードを生成する請求項１記載のターゲットコード事前変換方法。
【請求項３】
前記ターゲットコードに対応する前記中間コードについて、ホストコードに変換する請求項１記載のターゲットコード事前変換方法。
【請求項４】
前記依存グラフにおける前記依存関係は、命令の実行順序により、実行結果が変化する可能性が有る関係である請求項１記載のターゲットコード事前変換方法。
【請求項５】
前記依存グラフの作成において、レジスタ値を利用する側の命令、分岐命令、条件判定命令、制御命令のいずれかの命令では、ノードあるいは辺を作成しない請求項１記載のターゲットコード事前変換方法。
【請求項６】
前記メモリ参照テーブルは、
前記ターゲットコードからメモリへの書き込みがあった場合には、「書き込んだ値」と「データ長」から成るメモリ書き込みリストにメモリへのアクセスを記録し、
前記ターゲットコードが行うメモリからの読み込みがあった場合には、「データ長」と「依存グラフの始点及びターゲット頂点」から成るメモリ読み込みリストにメモリへのアクセスを記録する請求項１記載のターゲットコード事前変換方法。
【請求項７】
前記依存グラフと前記メモリ参照テーブルの連携は、
前記ターゲットの命令解析時にメモリへの書き込みあるいは読み込みアクセスがあった場合、前記メモリ参照テーブルへの記録を行う際、前記メモリ参照テーブルにすでに記録された全てのメモリへの書き込みあるいは読み込みアクセスを走査し、前記依存グラフを含んでいれば、当該前記依存グラフを再度探索する請求項１記載のターゲットコード事前変換方法。
【請求項８】
請求項３項記載のターゲットコード事前変換方法で得られたホストコードをロードして使用するエミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ターゲットコード事前変換方法及びエミュレーション方法に関する。
【背景技術】
【０００２】
社会システム事業を中心に、昔から利用しているソフトウェア資産を無修正で使用し続けたい、というニーズがある。ところが、ハードウェアの老朽化・生産終了に伴い、ソフトウェアを動かすハードウェアがなくなりつつある。また、ソフトウェア資産も顧客単位で機能がカスタマイズされる等の多様化のため、移植も難しい。 
一方、仮想化技術を利用して、多くのアーキテクチャマシンをソフトウェアエミュレーションすることでソフトウェア資産を延命できる可能性がある。
【０００３】
ＱＥＭＵに代表される仮想化エミュレータは、ターゲットコードを実行させながらホストコードへ変換する（動的変換）するもので、リアルタイム性に乏しく、応答性能・起動時間の予測が困難であり、組み込み機器には向かない。
【０００４】
仮想化技術の高速化の一環として行われる静的事前変換・動的事前変換に関しては、提案がなされている。
【０００５】
例えば、マルチコア環境において、静的解析結果と動的解析結果を組み合わせて利用し、精度良く重要度の高いプログラムブロックの事前コンパイルを行い、プログラムを高速化することが提案されている（例えば、特許文献１参照。）。
【０００６】
また、ターゲットコードの変換において、静的実行ないしは動的実行の分岐時の速度性能を高める提案がなされている（例えば、特許文献２参照。）。
【０００７】
しかしながら、応答性能・起動時間を安定させるため、ターゲットコード変換を事前に行う場合、以下の問題があった。 すなわち、ターゲットコードの動的変換が前提の現状の仮想マシンエミュレータでは、基本ブロックのエントリポイントが分からなくなることがある。 また、間接アドレス指定による分岐・サブルーチンコールやメモリ上に書き込まれた値を用いた分岐・サブルーチンコールでは、分岐発生時のジャンプ先アドレスの同定が困難なことがある。 
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００７−３３４６４３号公報
【特許文献２】特開２００８−１０７９１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明が解決しようとする課題は、事前変換する際の飛び先アドレスの事前予測を効率的に行えるターゲットコード事前変換方法及びエミュレーション方法を提供することである。
【課題を解決するための手段】
【００１０】
実施形態のターゲットコード事前変換方法は、前記ターゲットコードを、分岐命令もしくは分岐命令からの流入が起こらない命令群の最小単位である基本ブロックに分割し、前記基本ブロックごとに、前記ターゲットコードの命令を解析し、レジスタからの読み込み命令、レジスタへの書き込み命令、メモリからの読み込み命令、メモリへの書き込み命令および算術論理命令を検出した場合には、当該命令に対応するノードや辺とするとともに、あるレジスタにロードされる値の、他のレジスタや直値あるいはメモリ内容との依存関係を表現した依存グラフを作成し、メモリへの読み書きアクセスがあった際に利用され、メモリ読み込み内容及びメモリ書き込み内容とアドレス値とを対応づけるメモリ参照テーブルを作成し、前記依存グラフと前記メモリ参照テーブルを連携させ、分岐命令の事前変換に際し、飛び先アドレスとして可能性のある全てのアドレス値をエントリポイントとしてリスト化する。
【図面の簡単な説明】
【００１１】
【図１】本実施形態に係るターゲットコード事前変換方法が適用されるターゲットコード変換装置の構成例を示す図である。
【図２】依存グラフの作成を説明する図である。
【図３】依存グラフの探索を説明する図である。
【図４】メモリへのアクセスがジャンプ先のアドレスの特定に影響する場合を説明する図である。
【図５】メモリ参照テーブルの作成を説明する図である。
【図６】依存グラフとメモリ参照テーブルの連携について説明する図である。
【図７】依存グラフとメモリ参照テーブルの連携について説明する図である。
【図８】依存グラフとメモリ参照テーブルの連携について説明する図である。
【図９】本実施形態に係るターゲットコード変換方法の一連の流れを模式化した図である。
【発明を実施するための形態】
【００１２】
以下、本発明の一実施の形態について、図面を参照して説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
【００１３】
（第１の実施形態）
まず、本実施形態で用いる主要な用語について説明する。
【００１４】
「ＱＥＭＵ」とは、異なるコンピュータアーキテクチャをソフトウェア的に模擬することができるエミュレータをいう。
【００１５】
「ターゲットコード」とは、ＱＥＭＵ上で動作させる、変換対象となるコードをいう。
【００１６】
「ホストコード」とは、ＱＥＭＵが動作しているＣＰＵにて解釈および実行ができるコードをいう。
【００１７】
「基本ブロック」とは、仮想化環境上で動作させたいターゲットコードにおいて、分岐命令もしくは分岐命令からの流入が起こらない命令群の最小単位をいう。基本ブロックの開始点には、他のコードからジャンプすることができる。基本ブロックの終了点は、他のコードへのジャンプ命令あるいはジャンプの一つ前の命令である。
【００１８】
「エントリポイント」とは、基本ブロックの実行を開始するアドレスをいう。分岐命令の飛び先はエントリポイントである。
【００１９】
本実施形態に係るターゲットコード事前変換方法は、分岐命令の事前変換に際し、飛び先アドレスとして可能性のある全てのアドレス値をエントリポイントとしてリスト化しておくものである。
【００２０】
図1は、本実施形態に係るターゲットコード事前変換方法が適用されるターゲットコード変換装置の構成例を示す図である。
【００２１】
ターゲットコード変換装置１００は、変換対象となるターゲットコードを読み込み、変換および実行するための装置である。ターゲットコード変換装置１００は、ターゲットコード格納部２００、ホストコード格納部３００と接続している。ターゲットコード変換装置１００は、例えば、ターゲットコードロード部１０、エントリポイントロード部１１、ターゲットコードパース部１２、中間コード生成部１３、基本ブロック分割部１４、依存グラフ作成部１５、中間コード格納部１６、ホストコード生成部１７、依存グラフ評価部１８、メモリ参照テーブル読み込みアクセス登録部１９、書き込み値評価部２０、メモリ参照テーブル書き込みアクセス登録部２１、依存グラフ再評価部２２、依存グラフ格納部２３、メモリ参照テーブル格納部２４、エントリポイント確定部２５、エントリポイント格納部２６から構成されている。このうち、ターゲットコードロード部１０、エントリポイントロード部１１、ターゲットコードパース部１２、中間コード生成部１３、基本ブロック分割部１４、依存グラフ作成部１５、ホストコード生成部１７、依存グラフ評価部１８、メモリ参照テーブル読み込みアクセス登録部１９、書き込み値評価部２０、メモリ参照テーブル書き込みアクセス登録部２１、依存グラフ再評価部２２、エントリポイント確定部２５の各部は、例えば各処理プログラムの形態として構築することができる。
【００２２】
まず、各部を簡潔に説明する。ターゲットコードロード部１０は、ターゲットコードの実行形式イメージファイルをターゲットコード変換装置１００に読み込み、メモリ上に展開するものである。
【００２３】
エントリポイントロード部１１は、ターゲットコード内で、次に変換対象となる基本ブロックの開始位置（エントリポイント）をロードする。エントリポイントがなくなるまで順次エントリポイントをロードする。
【００２４】
ターゲットコードパース部１２は、エントリポイントロード部１１からロードしたエントリポイントから始まるターゲットコードを１命令ずつパース（構文解析などによりデータの集合体に変換）し、命令の意味を解析するものである。
【００２５】
中間コード生成部１３は、ターゲットコードパース部１２で解析された命令について、ターゲットコード変換装置１００内部のみで通用するアーキテクチャ非依存のコード（中間コード）を生成するものである。
【００２６】
基本ブロック分割部１４は、ターゲットコードパース部１２で解析しているターゲットコードについて、分岐命令や特殊レジスタ値の有無を確認し、基本ブロックに分割するものである。
【００２７】
依存グラフ作成部１５は、ターゲットコードパース部１２で解析された命令について、レジスタ／メモリのロード・ストア命令および算術論理命令が発見された際に、その命令１つに対応する依存グラフのノードや辺を作成するものである。依存グラフの詳細は、後述する。
【００２８】
中間コード格納部１６は、中間コード生成部１３で生成された中間コードを一時的に格納するものである。
【００２９】
ホストコード生成部１７は、基本ブロック分割部１４において分割されたターゲットコードに対応する中間コードについて、ホストコードに変換するものである。
【００３０】
依存グラフ評価部１８は、依存グラフ作成部１５において基本ブロック単位で生成された依存グラフについて、次にホストコードへの変換候補とするべきターゲットコードのエントリポイントを求めるために依存グラフのノードを探索するものである。
【００３１】
メモリ参照テーブル読み込みアクセス登録部１９は、依存グラフ作成部１５において、メモリからの読み込みアクセス（メモリからのロード）を発見した際に、メモリ参照テーブルへその読み込みおよび対応する依存グラフを登録するものである。メモリ参照テーブルは、メモリへの読み書きアクセス（メモリからのロード、ストア）があった際に利用される、メモリ読み込み・書き込み内容とアドレス値とを対応づけるテーブルである。
【００３２】
書き込み値評価部２０は、メモリ参照テーブルに書き込みアクセスとして登録された値について、読み込みアクセス側の依存グラフを評価するものである。
【００３３】
メモリ参照テーブル書き込みアクセス登録部２１は、依存グラフ作成部１５において、メモリへの書き込みアクセス（メモリへのストア命令）を発見した際に、メモリ参照テーブルへその書き込みを登録するものである。
【００３４】
依存グラフ再評価部２２は、メモリ参照テーブル読み込みアクセス登録部１９において、メモリ参照テーブルに登録した依存グラフを再評価するものである。
【００３５】
依存グラフ格納部２３は、依存グラフを格納するものである。
【００３６】
メモリ参照テーブル格納部２４は、メモリ参照テーブルを格納するものである。
【００３７】
エントリポイント確定部２５は、依存グラフ評価部１８、依存グラフ再評価部２２、書き込み値評価部２０において候補値として確定したジャンプ先アドレスをエントリポイントとして確定するものである。
【００３８】
エントリポイント格納部２６は、確定したエントリポイントを格納するものである。
【００３９】
次に、以上のように構成されたターゲットコード変換装置１００によるターゲットコード変換方法について説明する。本実施形態に係るターゲットコード事前変換方法は、（１）依存グラフの作成 、（２）メモリ参照テーブルの作成 、（３）依存グラフとメモリ参照テーブルの連携の３つの処理を行うことにより、効率的な事前変換の飛び先アドレス推定と飛び先を事前に蓄えておくものである。具体的には、レジスタへのロードを伴う処理，メモリのロード命令，ストア命令を監視し、登録するデータ構造を新規に作成することで、対象レジスタ又はメモリに書き込まれた可能性のある値を全て取り出せるようにする。
【００４０】
（依存グラフの作成）
次に、依存グラフの作成について説明する。図２は、依存グラフの作成を説明する図である。ここで、依存グラフとは、あるレジスタにロードされる値の、他のレジスタや直値あるいはメモリ内容との依存関係を表現したグラフをいう。また、依存関係とは、実行順序により、実行結果が変化する可能性が有る関係をいう。依存グラフは、基本ブロック一つにつき、 一つ作成する。基本ブロックは、分岐命令や特殊レジスタ値の有無によって基本ブロック分割部１４で分割される。依存グラフは、レジスタへの値のロードが発生するたび、すなわち、ロード命令，ストア命令，算術論理命令の度にノードを作成する。依存グラフでは、値のロードに依存するレジスタ及び直値のノードに向けての有向辺を作成していく。
【００４１】
図２では、ターゲットコードが、
ｍｏｖ  ａｘ，0x4000
ｍｏｖ  ｃｘ，２
ａｄｄ  ａｘ，ｃｘ
の場合を示している。
【００４２】
まず、ｍｏｖ命令として、ａｘレジスタに、直値「0x4000」を持ってくるので、ａｘレジスタのノードから直値を管理する直値リストのノードに向かう有向辺が描かれている。すなわち、矢印（→）はａｘレジスタが直値「0x4000」に依存している関係を表わしている。同様に、ｍｏｖ命令として、ｃｘレジスタに、直値「２」を持ってくるので、ｃｘレジスタのノードから直値を管理する直値リストのノードに向かう有向辺が描かれている。
【００４３】
次に、ａｄｄ命令として、ａｘレジスタの値とｃｘレジスタの値の和を、新たなａｘレジスタの値とするので、新たなａｘレジスタのノードから、前のａｘレジスタのノード及びｃｘレジスタのノードに向かう有向辺が描かれている。すなわち、新たなａｘレジスタは、前のａｘレジスタの値及びｃｘレジスタの値に依存している関係が表わされている。
【００４４】
グラフノード管理リストは、各レジスタが依存グラフ作成過程でどのような値をとっていったかを把握するもので、各レジスタのグループを管理するリストである。グラフノード管理リストによれば、最新のレジスタの値が直ちにわかる。
【００４５】
依存グラフの作成に関して、ノードあるいは辺を作成する命令は、ロード命令，ストア命令（ｍｏｖ命令）， 算術・論理演算命令（ａｄｄ命令,ｓｕｂ命令,ａｎｄ命令,ｏｒ命令, ｘｏｒ命令など）である。一方、ノードあるいは辺を作成しない命令は、レジスタ値を利用する側の命令、もしくは分岐命令そのもので、条件判定文（ｃｍｐ命令, ｊｃｃ命令）やｒｅｔ命令, ｉｒｅｔ命令,ｈｌｔ命令などの制御命令である。これは、制御命令の場合、戻りアドレスは呼び出し側が知っているからである。 
（依存グラフの探索）
次に、依存グラフの探索によるジャンプ先アドレスの特定について説明する。図３は、依存グラフの探索を説明する図である。
【００４６】
ジャンプ先のアドレスを特定するには、基本ブロック内で、間接アドレス指定が出現したとき、そのアドレス指定に使用するレジスタについての最新のノードに注目する。すなわち、注目したノードを依存グラフの始点として、有向グラフをたどっていく。ターゲットコード上では、命令を逆走していくことになる。探索は、深さ優先探索をしていき、最終的に残った値をジャンプ先アドレスとする。 
図３に示す例では、ターゲットコードが、
ｊｍｐ  ａｘ
の場合を示している。
【００４７】
最新のａｘレジスタは、次のジャンプ先アドレスを決定するレジスタであるが、依存グラフから前のａｘレジスタ、ｃｘレジスタに依存していることがわかる。さらに、前のａｘレジスタ値は、有向グラフをたどっていくことにより、その値を特定することができる。ここの例では、直値0x4000である。同様に、ｃｘレジスタ値は、有向グラフをたどっていくことにより、その値を特定することができる。ここの例では、直値２である。よって、最新のａｘレジスタ値は、0x4002と特定することができる。
【００４８】
このようにして、依存グラフを探索することにより、次のジャンプ先のアドレスが特定するが、依存グラフだけでは、次のジャンプ先のアドレスが特定できないケースがある。メモリへのアクセスがジャンプ先のアドレスの特定に影響する場合である。図４は、メモリへのアクセスがジャンプ先のアドレスの特定に影響する場合を説明する図である。
【００４９】
図４では、ターゲットコードが、
ｍｏｖ  ａｘ，[0x4000]
ｍｏｖ  ｃｘ，２
ａｄｄ  ａｘ，ｃｘ
ｊｍｐ  ａｘ
の場合を示している。
【００５０】
図４に示す例では、
最新のａｘレジスタは、次のジャンプ先アドレスを決定するレジスタ（始点）で、依存グラフから前のａｘレジスタ、ｃｘレジスタに依存していることがわかる。ｃｘレジスタ値は、有向グラフをたどっていくことにより、その値を特定することができる。ここの例では、直値２として確定する。一方、前のａｘレジスタ値は、有向グラフをたどっていくことにより、その値を特定したいが、直値として管理されているのは、アドレス値としての[0x4000]である。したがって、依存グラフの探索だけでは、次のジャンプ先のアドレスを確定することができない。
【００５１】
（メモリ参照テーブルの作成）
次に、メモリ参照テーブルの作成について説明する。図５は、メモリ参照テーブルの作成を説明する図である。
【００５２】
上述のように、メモリへのアクセスがジャンプ先のアドレスの特定に影響する場合には、メモリ参照テーブルを利用する。メモリ参照テーブルは、基本ブロック内で、メモリの参照（メモリへのアクセス）が行われた場合に、そのことを記録するために作成されるものである。具体的には、ターゲットコードパース部１２において、依存グラフ作成中に次の命令セットを発見した場合、依存グラフ作成部１５が作成する。
【００５３】
メモリからのロード命令  (例：ｍｏｖ   ax, [0xXXXX]）
メモリへのストア命令   （例：ｍｏｖ   [0xXXXX] , ax)
メモリ参照テーブルは、ターゲットコードからメモリへの書き込みがあった場合には、メモリ書き込みリストにメモリへのアクセスを記録する。メモリ書き込みリストの要素としては、「書き込んだ値」と「データ長」である。図５は、メモリ書き込みリストに、「書き込んだ値」と「データ長」が１組となって、リストに加えられていくことを表わしている。同様に、ターゲットコードが行うメモリからの読み込みがあった場合には、メモリ読み込みリストにメモリへのアクセスを記録する。メモリ読み込みリストの要素としては、「データ長」と「依存グラフの始点及びターゲット頂点」である。図５は、メモリ読み込みリストに、「データ長」と「依存グラフの始点及びターゲット頂点」が１組となって、リストに加えられていくことを表わしている。
【００５４】
図５に示す例では、メモリアドレスについては、ターゲットコードのアクセス先アドレスに従い、テーブル要素へポイントする、言わばページテーブルに似た構造でメモリアドレスを管理している。メモリアドレスを上位ビット，下位ビットと分けて、ターゲットコードが扱える最大データ長分は、同じテーブル要素となるようにするのが好適である。
【００５５】
（依存グラフとメモリ参照テーブルの連携）
次に、依存グラフとメモリ参照テーブルの連携について説明する。図６乃至図８は、依存グラフとメモリ参照テーブルの連携について説明する図である。図６では、メモリからの読み込みを伴うことが、パース時に判明した場合、依存グラフとメモリ参照テーブルの連携を行うことを説明している。メモリからの読み込みを伴う場合には、メモリ参照テーブルの読み込みリストに、データ長とともに、依存グラフの始点ノード及びターゲットノード(頂点)の組を、新規分として作成する。
【００５６】
図６では、メモリ参照テーブルにメモリアドレス値として[0x4000]を登録するとともに、[0x4000]に対応する要素として、メモリ参照テーブルのメモリ読み込みリストにデータ長、依存グラフの始点ノード及びターゲットノード(頂点)の組を、記録することを表わしている。係るメモリ参照テーブルへの記録をもって、一旦、依存グラフの評価は終了する。
【００５７】
図７では、メモリへの書き込みが、主に別の基本ブロック内の命令パース中に判明した場合、依存グラフとメモリ参照テーブルの連携を行うことを説明している。メモリへの書き込みを伴う場合には、メモリ参照テーブルの書き込みリストに、書き込んだ値及びデータ長の組を、新規分として作成する。読み込みリストの全要素を考慮しつつ、依存グラフを再度評価する。
【００５８】
図７に示す例では、ターゲットコードが、
ｍｏｖ  ａｘ，0x2000
ｍｏｖ  [0x4000]，ａｘ
の場合、
メモリ参照テーブルにメモリアドレス値として[0x4000]を登録するとともに、[0x4000]に対応する要素として、メモリ参照テーブルのメモリ書き込みリストに、アドレス[0x4000]、値0x2000及びデータ長を、記録することを表わしている。
【００５９】
図８に示す例では、ターゲットコードが、
ｍｏｖ  ａｘ，[0x4000]
ｍｏｖ  ｃｘ，２
ａｄｄ  ａｘ，ｃｘ
ｊｍｐ  ａｘ
の場合を示している。読み込みリストの全要素を考慮しつつ、ノードをたどることによって、依存グラフを再度評価する。
【００６０】
図８に示す例では、メモリアドレス値[0x4000]が未確定であったものが、メモリ書き込みリストに追加された値＝0x2000であるとして確定する。したがって、始点ノードとして0x2002という結果が得られる。得られたジャンプ先アドレスは、新たなエントリポイントとして、エントリポイントリストに追加して記録される。
【００６１】
図９は、本実施形態に係るターゲットコード変換方法の一連の流れを模式化した図である。まず、ターゲットコード格納部２００から、ターゲットコードロード部１０によってターゲットコードをロードする。続いて、エントリポイント格納部２６から、エントリポイントロード部１１によってエントリポイントをロードする。ターゲットコード変換の初期段階では、マシン毎に所定の初期アドレス値のみが、エントリポイント格納部２６に格納されている。続いて、ターゲットコードパース部１２によって、命令解釈される。次に、ターゲットコードは基本ブロック分割部１４で、基本ブロックに分割される。分割後、中間コード生成部１３での中間コードの生成と、依存グラフ作成部１５での依存グラフの作成が並行して行われる。生成された中間コードは、一旦、中間コード格納部１６に格納される。中間コード格納部１６に格納された中間コードは、ホストコード生成部１７に送られ、ホストコードが生成される。
【００６２】
作成された依存グラフは、一旦、依存グラフ格納部２３に格納される。依存グラフの作成に際して、メモリからの読み込みアクセスが有る場合には、メモリ参照テーブル読み込みアクセス登録部１９によって、メモリ参照テーブル格納部２４へその読み込み及び対応する依存グラフを登録する。メモリ参照テーブルには、メモリ読み込み内容とアドレス値とを対応づけるテーブルが記録されているので、書き込み値評価部２０ではメモリ参照テーブルに書き込みアクセスとして登録された値について読み込みアクセス側の依存グラフを評価する。書き込み値評価部２０での評価は、ジャンプ先アドレスの候補値としてエントリポイント確定部２５で確定することによりエントリポイントとしてエントリポイント格納部２６に新規登録される。
【００６３】
一方、メモリへの書き込みが有る場合には、メモリ参照テーブル書き込みアクセス登録部２１によって、メモリ参照テーブル格納部２４へその書き込みを登録する。続いて、依存グラフ再評価部２２によって、メモリ参照テーブル読み込みアクセス登録部１９においてメモリ参照テーブルに登録した依存グラフを再評価する。依存グラフ再評価部２２での評価は、ジャンプ先アドレスの候補値としてエントリポイント確定部２５で確定することによりエントリポイントとしてエントリポイント格納部２６に新規登録される。
【００６４】
さらに、依存グラフに間接アドレス指定が有る場合には、依存グラフ評価部１８において、次にホストコードへの変換候補とするべきターゲットコードのエントリポイントを求めるために依存グラフのノードを探索する。探索結果は、ジャンプ先アドレスの候補値としてエントリポイント確定部２５で確定することによりエントリポイントとしてエントリポイント格納部２６に新規登録される。
【００６５】
このようにして、ターゲットコードを事前変換することにより、基本ブロックと全てのエントリポイントのリストが関係付けられて得られる。
【００６６】
本実施形態によれば、安定した応答性能及びリアルタイム性を高めたＣＰＵエミュレーションを実現することができるので、組み込み機器のような実行時間に制限制約を持つプロセスや製品でも実行性能の品質保証が得られるようになる。
【００６７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６８】
１００・・・ターゲットコード変換装置、
１０・・・ターゲットコードロード部、
１１・・・エントリポイントロード部、
１２・・・ターゲットコードパース部、
１３・・・中間コード生成部、
１４・・・基本ブロック分割部、
１５・・・依存グラフ作成部、
１６・・・中間コード格納部、
１７・・・ホストコード生成部、
１８・・・依存グラフ評価部、
１９・・・メモリ参照テーブル読み込みアクセス登録部、
２０・・・書き込み値評価部、
２１・・・メモリ参照テーブル書き込みアクセス登録部、
２２・・・依存グラフ再評価部、
２３・・・依存グラフ格納部、
２４・・・メモリ参照テーブル格納部、
２５・・・エントリポイント確定部、
２６・・・エントリポイント格納部、
２００・・・ターゲットコード格納部、
３００・・・ホストコード格納部。
【図１】
2012159936.tif 000003
【図２】
2012159936.tif 000004
【図３】
2012159936.tif 000005
【図４】
2012159936.tif 000006
【図５】
2012159936.tif 000007
【図６】
2012159936.tif 000008
【図７】
2012159936.tif 000009
【図８】
2012159936.tif 000010
【図９】
2012159936.tif 000011