説明

ターゲットコード事前変換方法、エミュレーション方法

【課題】事前変換する際の飛び先アドレスの事前予測を効率的に行えるターゲットコード事前変換方法を提供する。
【解決手段】ターゲットコードを基本ブロックに分割し、基本ブロックごとに、ターゲットコードの命令を解析し、レジスタからの読み込み命令、レジスタへの書き込み命令、メモリからの読み込み命令、メモリへの書き込み命令および算術論理命令を検出した場合には、当該命令に対応するノードや辺とするとともに、あるレジスタにロードされる値の、他のレジスタや直値あるいはメモリ内容との依存関係を表現した依存グラフを作成し、メモリへの読み書きアクセスがあった際に利用され、メモリ読み込み内容及びメモリ書き込み内容とアドレス値とを対応づけるメモリ参照テーブルを作成し、依存グラフとメモリ参照テーブルを連携させ、分岐命令の事前変換に際し、飛び先アドレスとして可能性のある全てのアドレス値をエントリポイントとしてリスト化する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、ターゲットコード事前変換方法及びエミュレーション方法に関する。
【背景技術】
【0002】
社会システム事業を中心に、昔から利用しているソフトウェア資産を無修正で使用し続けたい、というニーズがある。ところが、ハードウェアの老朽化・生産終了に伴い、ソフトウェアを動かすハードウェアがなくなりつつある。また、ソフトウェア資産も顧客単位で機能がカスタマイズされる等の多様化のため、移植も難しい。
一方、仮想化技術を利用して、多くのアーキテクチャマシンをソフトウェアエミュレーションすることでソフトウェア資産を延命できる可能性がある。
【0003】
QEMUに代表される仮想化エミュレータは、ターゲットコードを実行させながらホストコードへ変換する(動的変換)するもので、リアルタイム性に乏しく、応答性能・起動時間の予測が困難であり、組み込み機器には向かない。
【0004】
仮想化技術の高速化の一環として行われる静的事前変換・動的事前変換に関しては、提案がなされている。
【0005】
例えば、マルチコア環境において、静的解析結果と動的解析結果を組み合わせて利用し、精度良く重要度の高いプログラムブロックの事前コンパイルを行い、プログラムを高速化することが提案されている(例えば、特許文献1参照。)。
【0006】
また、ターゲットコードの変換において、静的実行ないしは動的実行の分岐時の速度性能を高める提案がなされている(例えば、特許文献2参照。)。
【0007】
しかしながら、応答性能・起動時間を安定させるため、ターゲットコード変換を事前に行う場合、以下の問題があった。 すなわち、ターゲットコードの動的変換が前提の現状の仮想マシンエミュレータでは、基本ブロックのエントリポイントが分からなくなることがある。 また、間接アドレス指定による分岐・サブルーチンコールやメモリ上に書き込まれた値を用いた分岐・サブルーチンコールでは、分岐発生時のジャンプ先アドレスの同定が困難なことがある。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2007−334643号公報
【特許文献2】特開2008−107913号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
本発明が解決しようとする課題は、事前変換する際の飛び先アドレスの事前予測を効率的に行えるターゲットコード事前変換方法及びエミュレーション方法を提供することである。
【課題を解決するための手段】
【0010】
実施形態のターゲットコード事前変換方法は、前記ターゲットコードを、分岐命令もしくは分岐命令からの流入が起こらない命令群の最小単位である基本ブロックに分割し、前記基本ブロックごとに、前記ターゲットコードの命令を解析し、レジスタからの読み込み命令、レジスタへの書き込み命令、メモリからの読み込み命令、メモリへの書き込み命令および算術論理命令を検出した場合には、当該命令に対応するノードや辺とするとともに、あるレジスタにロードされる値の、他のレジスタや直値あるいはメモリ内容との依存関係を表現した依存グラフを作成し、メモリへの読み書きアクセスがあった際に利用され、メモリ読み込み内容及びメモリ書き込み内容とアドレス値とを対応づけるメモリ参照テーブルを作成し、前記依存グラフと前記メモリ参照テーブルを連携させ、分岐命令の事前変換に際し、飛び先アドレスとして可能性のある全てのアドレス値をエントリポイントとしてリスト化する。
【図面の簡単な説明】
【0011】
【図1】本実施形態に係るターゲットコード事前変換方法が適用されるターゲットコード変換装置の構成例を示す図である。
【図2】依存グラフの作成を説明する図である。
【図3】依存グラフの探索を説明する図である。
【図4】メモリへのアクセスがジャンプ先のアドレスの特定に影響する場合を説明する図である。
【図5】メモリ参照テーブルの作成を説明する図である。
【図6】依存グラフとメモリ参照テーブルの連携について説明する図である。
【図7】依存グラフとメモリ参照テーブルの連携について説明する図である。
【図8】依存グラフとメモリ参照テーブルの連携について説明する図である。
【図9】本実施形態に係るターゲットコード変換方法の一連の流れを模式化した図である。
【発明を実施するための形態】
【0012】
以下、本発明の一実施の形態について、図面を参照して説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
【0013】
(第1の実施形態)
まず、本実施形態で用いる主要な用語について説明する。
【0014】
「QEMU」とは、異なるコンピュータアーキテクチャをソフトウェア的に模擬することができるエミュレータをいう。
【0015】
「ターゲットコード」とは、QEMU上で動作させる、変換対象となるコードをいう。
【0016】
「ホストコード」とは、QEMUが動作しているCPUにて解釈および実行ができるコードをいう。
【0017】
「基本ブロック」とは、仮想化環境上で動作させたいターゲットコードにおいて、分岐命令もしくは分岐命令からの流入が起こらない命令群の最小単位をいう。基本ブロックの開始点には、他のコードからジャンプすることができる。基本ブロックの終了点は、他のコードへのジャンプ命令あるいはジャンプの一つ前の命令である。
【0018】
「エントリポイント」とは、基本ブロックの実行を開始するアドレスをいう。分岐命令の飛び先はエントリポイントである。
【0019】
本実施形態に係るターゲットコード事前変換方法は、分岐命令の事前変換に際し、飛び先アドレスとして可能性のある全てのアドレス値をエントリポイントとしてリスト化しておくものである。
【0020】
図1は、本実施形態に係るターゲットコード事前変換方法が適用されるターゲットコード変換装置の構成例を示す図である。
【0021】
ターゲットコード変換装置100は、変換対象となるターゲットコードを読み込み、変換および実行するための装置である。ターゲットコード変換装置100は、ターゲットコード格納部200、ホストコード格納部300と接続している。ターゲットコード変換装置100は、例えば、ターゲットコードロード部10、エントリポイントロード部11、ターゲットコードパース部12、中間コード生成部13、基本ブロック分割部14、依存グラフ作成部15、中間コード格納部16、ホストコード生成部17、依存グラフ評価部18、メモリ参照テーブル読み込みアクセス登録部19、書き込み値評価部20、メモリ参照テーブル書き込みアクセス登録部21、依存グラフ再評価部22、依存グラフ格納部23、メモリ参照テーブル格納部24、エントリポイント確定部25、エントリポイント格納部26から構成されている。このうち、ターゲットコードロード部10、エントリポイントロード部11、ターゲットコードパース部12、中間コード生成部13、基本ブロック分割部14、依存グラフ作成部15、ホストコード生成部17、依存グラフ評価部18、メモリ参照テーブル読み込みアクセス登録部19、書き込み値評価部20、メモリ参照テーブル書き込みアクセス登録部21、依存グラフ再評価部22、エントリポイント確定部25の各部は、例えば各処理プログラムの形態として構築することができる。
【0022】
まず、各部を簡潔に説明する。ターゲットコードロード部10は、ターゲットコードの実行形式イメージファイルをターゲットコード変換装置100に読み込み、メモリ上に展開するものである。
【0023】
エントリポイントロード部11は、ターゲットコード内で、次に変換対象となる基本ブロックの開始位置(エントリポイント)をロードする。エントリポイントがなくなるまで順次エントリポイントをロードする。
【0024】
ターゲットコードパース部12は、エントリポイントロード部11からロードしたエントリポイントから始まるターゲットコードを1命令ずつパース(構文解析などによりデータの集合体に変換)し、命令の意味を解析するものである。
【0025】
中間コード生成部13は、ターゲットコードパース部12で解析された命令について、ターゲットコード変換装置100内部のみで通用するアーキテクチャ非依存のコード(中間コード)を生成するものである。
【0026】
基本ブロック分割部14は、ターゲットコードパース部12で解析しているターゲットコードについて、分岐命令や特殊レジスタ値の有無を確認し、基本ブロックに分割するものである。
【0027】
依存グラフ作成部15は、ターゲットコードパース部12で解析された命令について、レジスタ/メモリのロード・ストア命令および算術論理命令が発見された際に、その命令1つに対応する依存グラフのノードや辺を作成するものである。依存グラフの詳細は、後述する。
【0028】
中間コード格納部16は、中間コード生成部13で生成された中間コードを一時的に格納するものである。
【0029】
ホストコード生成部17は、基本ブロック分割部14において分割されたターゲットコードに対応する中間コードについて、ホストコードに変換するものである。
【0030】
依存グラフ評価部18は、依存グラフ作成部15において基本ブロック単位で生成された依存グラフについて、次にホストコードへの変換候補とするべきターゲットコードのエントリポイントを求めるために依存グラフのノードを探索するものである。
【0031】
メモリ参照テーブル読み込みアクセス登録部19は、依存グラフ作成部15において、メモリからの読み込みアクセス(メモリからのロード)を発見した際に、メモリ参照テーブルへその読み込みおよび対応する依存グラフを登録するものである。メモリ参照テーブルは、メモリへの読み書きアクセス(メモリからのロード、ストア)があった際に利用される、メモリ読み込み・書き込み内容とアドレス値とを対応づけるテーブルである。
【0032】
書き込み値評価部20は、メモリ参照テーブルに書き込みアクセスとして登録された値について、読み込みアクセス側の依存グラフを評価するものである。
【0033】
メモリ参照テーブル書き込みアクセス登録部21は、依存グラフ作成部15において、メモリへの書き込みアクセス(メモリへのストア命令)を発見した際に、メモリ参照テーブルへその書き込みを登録するものである。
【0034】
依存グラフ再評価部22は、メモリ参照テーブル読み込みアクセス登録部19において、メモリ参照テーブルに登録した依存グラフを再評価するものである。
【0035】
依存グラフ格納部23は、依存グラフを格納するものである。
【0036】
メモリ参照テーブル格納部24は、メモリ参照テーブルを格納するものである。
【0037】
エントリポイント確定部25は、依存グラフ評価部18、依存グラフ再評価部22、書き込み値評価部20において候補値として確定したジャンプ先アドレスをエントリポイントとして確定するものである。
【0038】
エントリポイント格納部26は、確定したエントリポイントを格納するものである。
【0039】
次に、以上のように構成されたターゲットコード変換装置100によるターゲットコード変換方法について説明する。本実施形態に係るターゲットコード事前変換方法は、(1)依存グラフの作成 、(2)メモリ参照テーブルの作成 、(3)依存グラフとメモリ参照テーブルの連携の3つの処理を行うことにより、効率的な事前変換の飛び先アドレス推定と飛び先を事前に蓄えておくものである。具体的には、レジスタへのロードを伴う処理,メモリのロード命令,ストア命令を監視し、登録するデータ構造を新規に作成することで、対象レジスタ又はメモリに書き込まれた可能性のある値を全て取り出せるようにする。
【0040】
(依存グラフの作成)
次に、依存グラフの作成について説明する。図2は、依存グラフの作成を説明する図である。ここで、依存グラフとは、あるレジスタにロードされる値の、他のレジスタや直値あるいはメモリ内容との依存関係を表現したグラフをいう。また、依存関係とは、実行順序により、実行結果が変化する可能性が有る関係をいう。依存グラフは、基本ブロック一つにつき、 一つ作成する。基本ブロックは、分岐命令や特殊レジスタ値の有無によって基本ブロック分割部14で分割される。依存グラフは、レジスタへの値のロードが発生するたび、すなわち、ロード命令,ストア命令,算術論理命令の度にノードを作成する。依存グラフでは、値のロードに依存するレジスタ及び直値のノードに向けての有向辺を作成していく。
【0041】
図2では、ターゲットコードが、
mov ax,0x4000
mov cx,2
add ax,cx
の場合を示している。
【0042】
まず、mov命令として、axレジスタに、直値「0x4000」を持ってくるので、axレジスタのノードから直値を管理する直値リストのノードに向かう有向辺が描かれている。すなわち、矢印(→)はaxレジスタが直値「0x4000」に依存している関係を表わしている。同様に、mov命令として、cxレジスタに、直値「2」を持ってくるので、cxレジスタのノードから直値を管理する直値リストのノードに向かう有向辺が描かれている。
【0043】
次に、add命令として、axレジスタの値とcxレジスタの値の和を、新たなaxレジスタの値とするので、新たなaxレジスタのノードから、前のaxレジスタのノード及びcxレジスタのノードに向かう有向辺が描かれている。すなわち、新たなaxレジスタは、前のaxレジスタの値及びcxレジスタの値に依存している関係が表わされている。
【0044】
グラフノード管理リストは、各レジスタが依存グラフ作成過程でどのような値をとっていったかを把握するもので、各レジスタのグループを管理するリストである。グラフノード管理リストによれば、最新のレジスタの値が直ちにわかる。
【0045】
依存グラフの作成に関して、ノードあるいは辺を作成する命令は、ロード命令,ストア命令(mov命令), 算術・論理演算命令(add命令,sub命令,and命令,or命令, xor命令など)である。一方、ノードあるいは辺を作成しない命令は、レジスタ値を利用する側の命令、もしくは分岐命令そのもので、条件判定文(cmp命令, jcc命令)やret命令, iret命令,hlt命令などの制御命令である。これは、制御命令の場合、戻りアドレスは呼び出し側が知っているからである。
(依存グラフの探索)
次に、依存グラフの探索によるジャンプ先アドレスの特定について説明する。図3は、依存グラフの探索を説明する図である。
【0046】
ジャンプ先のアドレスを特定するには、基本ブロック内で、間接アドレス指定が出現したとき、そのアドレス指定に使用するレジスタについての最新のノードに注目する。すなわち、注目したノードを依存グラフの始点として、有向グラフをたどっていく。ターゲットコード上では、命令を逆走していくことになる。探索は、深さ優先探索をしていき、最終的に残った値をジャンプ先アドレスとする。
図3に示す例では、ターゲットコードが、
jmp ax
の場合を示している。
【0047】
最新のaxレジスタは、次のジャンプ先アドレスを決定するレジスタであるが、依存グラフから前のaxレジスタ、cxレジスタに依存していることがわかる。さらに、前のaxレジスタ値は、有向グラフをたどっていくことにより、その値を特定することができる。ここの例では、直値0x4000である。同様に、cxレジスタ値は、有向グラフをたどっていくことにより、その値を特定することができる。ここの例では、直値2である。よって、最新のaxレジスタ値は、0x4002と特定することができる。
【0048】
このようにして、依存グラフを探索することにより、次のジャンプ先のアドレスが特定するが、依存グラフだけでは、次のジャンプ先のアドレスが特定できないケースがある。メモリへのアクセスがジャンプ先のアドレスの特定に影響する場合である。図4は、メモリへのアクセスがジャンプ先のアドレスの特定に影響する場合を説明する図である。
【0049】
図4では、ターゲットコードが、
mov ax,[0x4000]
mov cx,2
add ax,cx
jmp ax
の場合を示している。
【0050】
図4に示す例では、
最新のaxレジスタは、次のジャンプ先アドレスを決定するレジスタ(始点)で、依存グラフから前のaxレジスタ、cxレジスタに依存していることがわかる。cxレジスタ値は、有向グラフをたどっていくことにより、その値を特定することができる。ここの例では、直値2として確定する。一方、前のaxレジスタ値は、有向グラフをたどっていくことにより、その値を特定したいが、直値として管理されているのは、アドレス値としての[0x4000]である。したがって、依存グラフの探索だけでは、次のジャンプ先のアドレスを確定することができない。
【0051】
(メモリ参照テーブルの作成)
次に、メモリ参照テーブルの作成について説明する。図5は、メモリ参照テーブルの作成を説明する図である。
【0052】
上述のように、メモリへのアクセスがジャンプ先のアドレスの特定に影響する場合には、メモリ参照テーブルを利用する。メモリ参照テーブルは、基本ブロック内で、メモリの参照(メモリへのアクセス)が行われた場合に、そのことを記録するために作成されるものである。具体的には、ターゲットコードパース部12において、依存グラフ作成中に次の命令セットを発見した場合、依存グラフ作成部15が作成する。
【0053】
メモリからのロード命令 (例:mov ax, [0xXXXX])
メモリへのストア命令 (例:mov [0xXXXX] , ax)
メモリ参照テーブルは、ターゲットコードからメモリへの書き込みがあった場合には、メモリ書き込みリストにメモリへのアクセスを記録する。メモリ書き込みリストの要素としては、「書き込んだ値」と「データ長」である。図5は、メモリ書き込みリストに、「書き込んだ値」と「データ長」が1組となって、リストに加えられていくことを表わしている。同様に、ターゲットコードが行うメモリからの読み込みがあった場合には、メモリ読み込みリストにメモリへのアクセスを記録する。メモリ読み込みリストの要素としては、「データ長」と「依存グラフの始点及びターゲット頂点」である。図5は、メモリ読み込みリストに、「データ長」と「依存グラフの始点及びターゲット頂点」が1組となって、リストに加えられていくことを表わしている。
【0054】
図5に示す例では、メモリアドレスについては、ターゲットコードのアクセス先アドレスに従い、テーブル要素へポイントする、言わばページテーブルに似た構造でメモリアドレスを管理している。メモリアドレスを上位ビット,下位ビットと分けて、ターゲットコードが扱える最大データ長分は、同じテーブル要素となるようにするのが好適である。
【0055】
(依存グラフとメモリ参照テーブルの連携)
次に、依存グラフとメモリ参照テーブルの連携について説明する。図6乃至図8は、依存グラフとメモリ参照テーブルの連携について説明する図である。図6では、メモリからの読み込みを伴うことが、パース時に判明した場合、依存グラフとメモリ参照テーブルの連携を行うことを説明している。メモリからの読み込みを伴う場合には、メモリ参照テーブルの読み込みリストに、データ長とともに、依存グラフの始点ノード及びターゲットノード(頂点)の組を、新規分として作成する。
【0056】
図6では、メモリ参照テーブルにメモリアドレス値として[0x4000]を登録するとともに、[0x4000]に対応する要素として、メモリ参照テーブルのメモリ読み込みリストにデータ長、依存グラフの始点ノード及びターゲットノード(頂点)の組を、記録することを表わしている。係るメモリ参照テーブルへの記録をもって、一旦、依存グラフの評価は終了する。
【0057】
図7では、メモリへの書き込みが、主に別の基本ブロック内の命令パース中に判明した場合、依存グラフとメモリ参照テーブルの連携を行うことを説明している。メモリへの書き込みを伴う場合には、メモリ参照テーブルの書き込みリストに、書き込んだ値及びデータ長の組を、新規分として作成する。読み込みリストの全要素を考慮しつつ、依存グラフを再度評価する。
【0058】
図7に示す例では、ターゲットコードが、
mov ax,0x2000
mov [0x4000],ax
の場合、
メモリ参照テーブルにメモリアドレス値として[0x4000]を登録するとともに、[0x4000]に対応する要素として、メモリ参照テーブルのメモリ書き込みリストに、アドレス[0x4000]、値0x2000及びデータ長を、記録することを表わしている。
【0059】
図8に示す例では、ターゲットコードが、
mov ax,[0x4000]
mov cx,2
add ax,cx
jmp ax
の場合を示している。読み込みリストの全要素を考慮しつつ、ノードをたどることによって、依存グラフを再度評価する。
【0060】
図8に示す例では、メモリアドレス値[0x4000]が未確定であったものが、メモリ書き込みリストに追加された値=0x2000であるとして確定する。したがって、始点ノードとして0x2002という結果が得られる。得られたジャンプ先アドレスは、新たなエントリポイントとして、エントリポイントリストに追加して記録される。
【0061】
図9は、本実施形態に係るターゲットコード変換方法の一連の流れを模式化した図である。まず、ターゲットコード格納部200から、ターゲットコードロード部10によってターゲットコードをロードする。続いて、エントリポイント格納部26から、エントリポイントロード部11によってエントリポイントをロードする。ターゲットコード変換の初期段階では、マシン毎に所定の初期アドレス値のみが、エントリポイント格納部26に格納されている。続いて、ターゲットコードパース部12によって、命令解釈される。次に、ターゲットコードは基本ブロック分割部14で、基本ブロックに分割される。分割後、中間コード生成部13での中間コードの生成と、依存グラフ作成部15での依存グラフの作成が並行して行われる。生成された中間コードは、一旦、中間コード格納部16に格納される。中間コード格納部16に格納された中間コードは、ホストコード生成部17に送られ、ホストコードが生成される。
【0062】
作成された依存グラフは、一旦、依存グラフ格納部23に格納される。依存グラフの作成に際して、メモリからの読み込みアクセスが有る場合には、メモリ参照テーブル読み込みアクセス登録部19によって、メモリ参照テーブル格納部24へその読み込み及び対応する依存グラフを登録する。メモリ参照テーブルには、メモリ読み込み内容とアドレス値とを対応づけるテーブルが記録されているので、書き込み値評価部20ではメモリ参照テーブルに書き込みアクセスとして登録された値について読み込みアクセス側の依存グラフを評価する。書き込み値評価部20での評価は、ジャンプ先アドレスの候補値としてエントリポイント確定部25で確定することによりエントリポイントとしてエントリポイント格納部26に新規登録される。
【0063】
一方、メモリへの書き込みが有る場合には、メモリ参照テーブル書き込みアクセス登録部21によって、メモリ参照テーブル格納部24へその書き込みを登録する。続いて、依存グラフ再評価部22によって、メモリ参照テーブル読み込みアクセス登録部19においてメモリ参照テーブルに登録した依存グラフを再評価する。依存グラフ再評価部22での評価は、ジャンプ先アドレスの候補値としてエントリポイント確定部25で確定することによりエントリポイントとしてエントリポイント格納部26に新規登録される。
【0064】
さらに、依存グラフに間接アドレス指定が有る場合には、依存グラフ評価部18において、次にホストコードへの変換候補とするべきターゲットコードのエントリポイントを求めるために依存グラフのノードを探索する。探索結果は、ジャンプ先アドレスの候補値としてエントリポイント確定部25で確定することによりエントリポイントとしてエントリポイント格納部26に新規登録される。
【0065】
このようにして、ターゲットコードを事前変換することにより、基本ブロックと全てのエントリポイントのリストが関係付けられて得られる。
【0066】
本実施形態によれば、安定した応答性能及びリアルタイム性を高めたCPUエミュレーションを実現することができるので、組み込み機器のような実行時間に制限制約を持つプロセスや製品でも実行性能の品質保証が得られるようになる。
【0067】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0068】
100・・・ターゲットコード変換装置、
10・・・ターゲットコードロード部、
11・・・エントリポイントロード部、
12・・・ターゲットコードパース部、
13・・・中間コード生成部、
14・・・基本ブロック分割部、
15・・・依存グラフ作成部、
16・・・中間コード格納部、
17・・・ホストコード生成部、
18・・・依存グラフ評価部、
19・・・メモリ参照テーブル読み込みアクセス登録部、
20・・・書き込み値評価部、
21・・・メモリ参照テーブル書き込みアクセス登録部、
22・・・依存グラフ再評価部、
23・・・依存グラフ格納部、
24・・・メモリ参照テーブル格納部、
25・・・エントリポイント確定部、
26・・・エントリポイント格納部、
200・・・ターゲットコード格納部、
300・・・ホストコード格納部。

【特許請求の範囲】
【請求項1】
ターゲットコードを実行前にホストコードに変換するターゲットコード事前変換方法であって、
前記ターゲットコードを、分岐命令もしくは分岐命令からの流入が起こらない命令群の最小単位である基本ブロックに分割し、
前記基本ブロックごとに、前記ターゲットコードの命令を解析し、レジスタからの読み込み命令、レジスタへの書き込み命令、メモリからの読み込み命令、メモリへの書き込み命令および算術論理命令を検出した場合には、当該命令に対応するノードや辺とするとともに、あるレジスタにロードされる値の、他のレジスタや直値あるいはメモリ内容との依存関係を表現した依存グラフを作成し、
メモリへの読み書きアクセスがあった際に利用され、メモリ読み込み内容及びメモリ書き込み内容とアドレス値とを対応づけるメモリ参照テーブルを作成し、
前記依存グラフと前記メモリ参照テーブルを連携させ、
分岐命令の事前変換に際し、飛び先アドレスとして可能性のある全てのアドレス値をエントリポイントとしてリスト化するターゲットコード事前変換方法。
【請求項2】
前記ターゲットコードを1命令づつデータの集合体に変換して命令を解析した後、アーキテクチャ非依存の中間コードを生成する請求項1記載のターゲットコード事前変換方法。
【請求項3】
前記ターゲットコードに対応する前記中間コードについて、ホストコードに変換する請求項1記載のターゲットコード事前変換方法。
【請求項4】
前記依存グラフにおける前記依存関係は、命令の実行順序により、実行結果が変化する可能性が有る関係である請求項1記載のターゲットコード事前変換方法。
【請求項5】
前記依存グラフの作成において、レジスタ値を利用する側の命令、分岐命令、条件判定命令、制御命令のいずれかの命令では、ノードあるいは辺を作成しない請求項1記載のターゲットコード事前変換方法。
【請求項6】
前記メモリ参照テーブルは、
前記ターゲットコードからメモリへの書き込みがあった場合には、「書き込んだ値」と「データ長」から成るメモリ書き込みリストにメモリへのアクセスを記録し、
前記ターゲットコードが行うメモリからの読み込みがあった場合には、「データ長」と「依存グラフの始点及びターゲット頂点」から成るメモリ読み込みリストにメモリへのアクセスを記録する請求項1記載のターゲットコード事前変換方法。
【請求項7】
前記依存グラフと前記メモリ参照テーブルの連携は、
前記ターゲットの命令解析時にメモリへの書き込みあるいは読み込みアクセスがあった場合、前記メモリ参照テーブルへの記録を行う際、前記メモリ参照テーブルにすでに記録された全てのメモリへの書き込みあるいは読み込みアクセスを走査し、前記依存グラフを含んでいれば、当該前記依存グラフを再度探索する請求項1記載のターゲットコード事前変換方法。
【請求項8】
請求項3項記載のターゲットコード事前変換方法で得られたホストコードをロードして使用するエミュレーション方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2012−159936(P2012−159936A)
【公開日】平成24年8月23日(2012.8.23)
【国際特許分類】
【出願番号】特願2011−17989(P2011−17989)
【出願日】平成23年1月31日(2011.1.31)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】