(57)【要約】【課題】対象コードを解析して、シミュレーション対象のコードのみを変換して連続配置し、メモリ容量の縮小とシミュレーション速度の向上を図る。【解決手段】検査対象の命令コードの中で実行されない命令を検出する不要コード検出部５０と、この検出された不要コードを削除し、これら削除後の命令コード列を所定の規則でアドレス移動して再配置する命令コード再配置部７０とを備えた。【選択図】        図１
2004265344.tif 000002
【特許請求の範囲】
【請求項１】
検査対象の命令コードの中で実行されない命令を検出する不要コード検出部と、
上記検出された不要コードを削除し、該削除後の命令コード列を所定の規則でアドレス移動して再配置する命令コード再配置部とを備えたことを特徴とするプロセッサ・シミュレータ。
【請求項２】
不要コード検出部は、不要コード情報テーブルを備えて、初期値として未検出フラグをセットし、検査対象の命令コードを実行する段階で上記不要コード情報テーブルの該当命令コードのフラグを実行と書き換え、実行不可能な命令コードのフラグを不要と書き換えて、全検査対象の命令コードをホスト計算機のコードに書き換えた段階で上記書き換え後の不要コード情報テーブルに記載の上記不要フラグに基づいて不要コードを削除するようにしたことを特徴とする請求項１記載のプロセッサ・シミュレータ。
【請求項３】
不要コードの削除は、全検査対象の命令コードをホスト計算機コードに変換後に不要コード情報テーブルのフラグを見て、不要と書かれたフラグの命令を削除し、対応するアドレスを修正するようにしたことを特徴とする請求項２記載のプロセッサ・シミュレータ。
【請求項４】
不要コードの再配置は、不要とされた検査対象の命令コードの長さを読み取り、該読み取った長さに基づいて移動サイズを保持して、該保持サイズに基づいてアドレスを詰めて命令コードの領域を再編成して順次、配置するようにしたことを特徴とする請求項１記載のプロセッサ・シミュレータ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ターゲットＣＰＵの動作をホストＣＰＵ上でシミュレートする技術に関するものである。
【０００２】
【従来の技術】
従来ではプロセッサ・シュレータにおいて、ターゲットＣＰＵが命令コードとして参照するアドレス領域中に命令コードとして使わないデータが混在していても、それに影響されずに命令コードをシミュレーションの為のホストＣＰＵの命令列に正しく変換し、ターゲットＣＰＵの動作をホストＣＰＵ上で支障なくシミュレートできるようにしている。即ち、ホストＣＰＵ上でターゲットＣＰＵの動作をシミュレーションする前段階において、バイナリコード変換部を設けて、ターゲットＣＰＵが命令コードとして参照するアドレス領域のバイナリデータを命令コードの配置が可能な全ての番地を基点として命令コードに解釈する。そしてこの解釈した命令コードを、シミュレーションするホストＣＰＵの命令列と、解釈された命令コードの次にターゲットＣＰＵが実行する命令コードのシミュレーションを行うホストＣＰＵの命令列に制御を移す命令列とから構成されたシミュレーション命令列に変換する。
【０００３】
従来装置の構成を示す図１６と、その処理フローを示す図１７を用いて、従来装置の動作を説明する。
ターゲットＣＰＵの命令コードを含むバイナリデータ９０をホストＣＰＵ上でシミュレーションする前に、バイナリコード変換部９７０はホストＣＰＵの命令コードに変換しバイナリ変換した変換コードを変換コード保持部９６０に格納する。バイナリ変換を実行する際、命令コードの配置が可能な全てのアドレスを基点として命令コードに解釈し、解釈されたターゲットＣＰＵの命令コードを、それをシミュレーションするホストＣＰＵの命令列と、命令順序を合わせるために解釈された命令コードの次にターゲットＣＰＵが実行する命令列に制御を移す命令列とを併せて構成されたシミュレーション命令列に変換する。
またバイナリコード変換部９７０は上述のような変換コードを生成すると同時にターゲットＣＰＵの命令コードを含むバイナリデータ９０の各番地を指標とし、シミュレーション命令列９６１等の各アドレスを値にもつアドレス変換テーブル９７０を生成する（図１７のＳ１）。
【０００４】
バイナリ変換が完了するとホストＣＰＵ上でシミュレーションが可能になる。ターゲットＣＰＵのプログラムカウンタが０番地だとすると（図１７のＳ２で０番地が設定されたとする）、０番地を指標にしてアドレス変換テーブル９７０からエントリ９７１を取得し（図１７のＳ３）、そのエントリ中のアドレスＡＤＤＲＥＳＳ０が指し示すシミュレーション命令列９６１から実行を開始する。変換コード９６１中の命令コード９０１をシミュレーションするホストＣＰＵの命令列を実行することにより、命令コード９０１をシミュレーションし（図１７のＳ４）、次いでその変換コード９６１中の、命令コード９０１の次にターゲットＣＰＵが実行する命令コード９０２のシミュレーションを行うホストＣＰＵの変換コードに制御を移す命令列を実行することにより、命令コード９０２のターゲットＣＰＵ上でのアドレスである２番地を指標にしてアドレス変換テーブル９７０からエントリ９７３を取得し、そのエントリ中のアドレスＡＤＤＲＥＳＳ２が指し示すシミュレーション命令列９６３に制御を移す（図１７のＳ５）。以下同様に各変換コードの実行によりターゲットＣＰＵの命令コードを含むバイナリデータ９０中の各命令コードの動作をシミュレーションし、シミュレーションした命令コードの次の命令コードに対応したシミュレーション命令列に制御を移すといった動作を繰り返し、ターゲットＣＰＵの動作をホストＣＰＵ上でシミュレーションする。
【０００５】
【特許文献１】
特開平６−３２４８８３号公報
【特許文献２】
特開平６−２０２９０３号公報
【特許文献３】
特開平６−２５０８７４号公報
【０００６】
【発明が解決しようとする課題】
従来のプロセッサ・シミュレータは対象コードの内容を調べられず、上記のように構成、実行されるので、全ての対象コードが変換されて、変換後に必要とされる主メモリ、キャッシュメモリの容量が大きくなるという課題がある。また使用される変換後のコードが離散的に配置されるので、キャッシュメモリの使用効率が低下して実行速度が低下するという課題もある。
【０００７】
この発明は上記の課題を解決するためになされたもので、対象コードを解析して、シミュレーション対象のコードのみを変換して連続配置し、メモリ容量の縮小とシミュレーション速度の向上を図る。
【０００８】
【課題を解決するための手段】
この発明に係るプロセッサ・シミュレータは、検査対象の命令コードの中で実行されない命令を検出する不要コード検出部と、この検出された不要コードを削除し、これら削除後の命令コード列を所定の規則でアドレス移動して再配置する命令コード再配置部とを備えた。
【０００９】
【発明の実施の形態】
実施の形態１．
図１は本発明の実施の形態１におけるＣＰＵシミュレータの概略構成を示す図である。図に示すように本シミュレータは、シミュレーション対象であるターゲットＣＰＵの命令コードを含むバイナリコード表１による入力を受けて、ターゲットＣＰＵの命令コードを読み込みホストＣＰＵの命令コードに変換するバイナリコード変換部２、バイナリコード変換部２によって変換されたホストＣＰＵの命令コード（変換コード）を格納する変換コード保持部３とアドレス変換テーブル６１０の他に、新規な構成要素として、変換コード保持部３に格納されている変換コードの中から実際には実行されることのないコード（不要コード）を検出する不要コード検出部５０、不要コード検出部によって検出された不要コードを削除する不要コード削除部６０、不要コード削除部６０によって削除された不要コードの領域に実際に実行されるコード（実行コード）を再配置する命令コード再配置部７０とで構成される。
【００１０】
図２は図１の不要コード検出部５０の詳細構成を示す図である。図に示すように、ターゲットＣＰＵの命令の変換コードが実行されたコードであるか、実行されたことのないコードであるか、実行されたかまたは実行されなかったか不明で未検出を示す検査フラグと、ターゲットＣＰＵの命令アドレスを対にして保持する不要コード情報テーブル５０１、ターゲットＣＰＵの命令アドレスと、そのアドレスが配置されているターゲットＣＰＵの命令長とを対にして保持するターゲット命令長テーブル５０２、不要コード検出のための検査アドレスとして変換コード実行部４からターゲットＣＰＵのプログラムカウンタを読み込む検査アドレス読み込み部５１９、読み込んだ検査アドレスを保持する検査アドレス保持部５１６、検査アドレス保持部５１６に格納されている検査アドレスに対するターゲットＣＰＵの命令長をターゲット命令長テーブルから読み込む検査命令長読み込み部５１８、読み込んだ検査命令長を保持する検査命令長保持部５１７、検査アドレスからのオフセットをカウントする命令アドレスカウンタ５１１、命令アドレスカウンタ５１１に値をセットまたはクリアする命令アドレスカウンタ制御部５１２、命令アドレスカウンタ５１１に格納されている値と、検査命令長保持部５１７に格納されている値を比較する命令アドレスカウンタ比較部５１３とで不要コード検出部５０は構成されている。
【００１１】
図３は図１の不要コード削除部６０の詳細構成を示す図である。図に示すように、ターゲットＣＰＵの命令アドレスと、その命令コードをバイナリ変換した変換コードの配置されているアドレスとを対にして保持するアドレス変換テーブル６１０、不要コード情報テーブル５０１からターゲットＣＰＵの命令アドレスと検査フラグの対のエントリを読み込む不要情報読み込み部６０３、不要情報読み込み部６０３で読み込んだターゲットＣＰＵの命令アドレスを格納する削除命令アドレス保持部６０１、不要情報読み込み部６０３で読み込んだ検査フラグを格納する削除検査フラグ保持部６０２、削除検査フラグに格納されているフラグ値が”実行”か”不要”か”未検出”かを判定する削除検査フラグ判定部６０６、削除命令アドレス保持部６０１に保持されているターゲットＣＰＵのアドレスに対する削除検査フラグ保持部６０２のフラグが”不要”である場合にアドレス変換テーブルの変換コードアドレスの値を修正するアドレス変換テーブル修正部６０７、不要コード情報テーブルで検索しているエントリアドレスを保持する不要コード情報ポインタ値記憶メモリ６０４、不要コード情報ポインタの値により不要コード情報テーブルの検索終了を判定する削除終了判定部６０５とで不要コード削除部６０は構成されている。
【００１２】
図４は図１の命令コード再配置部７０の詳細構成を示す図である。図に示すように、変換コードにおける不要コードのアドレスと、その不要コードのサイズの対を保持する不要コードサイズテーブル７０１、不要コード情報テーブル５０１とアドレス変換テーブル６１０の情報から不要コードのアドレスとその不要コードのサイズとを対として不要コードサイズテーブルに格納する不要コードサイズテーブル設定部７１１、検索する不要コードサイズテーブル７０１のエントリのアドレスを保持する不要コードサイズテーブル検索ポインタ値記憶メモリ７１３、不要コードサイズテーブル検索ポインタ値記憶メモリ７１３に検索するエントリのアドレスをセットする不要コードサイズテーブル検索部７１２、不要コードサイズテーブル検索ポインタ値記憶メモリ７１３に記憶された不要コードサイズテーブル７０１のエントリを読み込む不要コードサイズテーブル読み込み部７１４、不要コードサイズテーブル読み込み部７１４が読み込んだ不要コードサイズテーブルのエントリの変換コードアドレスを変換コードの再配置先アドレスとして保持する移動先アドレス保持部７１７、不要コードサイズテーブル読み込み部７１４が読み込んだ不要コードサイズテーブルのエントリの変換コードサイズを再配置時に移動するサイズとして保持する移動サイズ保持部７１９、順次インクリメントしていく再配置先のアドレスを保持する再配置アドレスカウンタ７１５、再配置アドレスカウンタ７１５に再配置先のアドレスを設定する再配置アドレスカウンタ設定部７１６、再配置アドレスカウンタ７１５に保持されている再配置先のアドレスと移動サイズ保持部に保持されている再配置時に移動するサイズの値から再配置するコードが変換コード内にあるかないかを判定する再配置コード判定部７２０、再配置アドレスカウンタに保持されているアドレスと移動サイズ保持部７１９に保持されているアドレスを加算したアドレスに配置されている変換コードを移動先アドレス保持部に保持されているアドレスに再配置する変換コード再配置実行部７２１、変換コード再配置後にアドレス変換テーブル６１０の変換コードアドレスの値を更新するアドレス変換テーブル更新部７１８とで命令コード再配置部７０は構成されている。
【００１３】
次に図１の装置の動作を全体動作フローを示す図５に基いて説明する。
ターゲットＣＰＵの命令コードを含むバイナリデータ（命令コード表）１をホストＣＰＵ上でシミュレーションする前に、バイナリコード変換部２はホストＣＰＵの命令コードに変換しバイナリ変換した変換コードを変換コード保持部３に格納する（図５のＳ１０１）。ターゲットＣＰＵの命令コードをホストＣＰＵの命令コードに変換する際、ターゲットＣＰＵシステムで定義された命令コードの配置が可能な全ての番地に変換を行う。たとえば、ターゲットＣＰＵシステムで定義されている命令長が２バイト、４バイト、６バイトの３種類で命令コードの配置が２バイト境界（さかい目）に配置される場合は、２バイト単位で変換を行う。またターゲットＣＰＵシステムで定義されている命令長が１バイト、２バイト、３バイトであれば１バイト単位で変換を行う。また、読み込まれたバイナリデータが命令コードのエリアであっても、データエリア（オペランドエリア）であっても、同様に変換を行う。データエリアから読み出したデータや命令の途中から読み出した命令コードであっても、命令の先頭から読み出したものとして、変換を行う。読み出したデータあるいは命令コードが未定義命令に相当する場合には、ターゲットＣＰＵでの未定義命令実行の命令列に変換する。
【００１４】
ターゲットＣＰＵの命令コードからホストＣＰＵの命令コードに変換するときにバイナリコード変換部２は、アドレス変換テーブル６１０と、ターゲット命令長テーブル５０２と、不要コード情報テーブル５０１の初期化を行う。アドレス変換テーブル６１０には図６に示すようにターゲットＣＰＵの命令アドレスとそのアドレスの命令を変換した変換コードのアドレスの対を設定する。なお、ターゲット命令長テーブル５０２には図８に示すようにターゲットＣＰＵの命令アドレスとそのアドレスの命令の命令長を設定する。不要コード情報テーブル５０１には図７に示すようにターゲットＣＰＵの命令アドレスとそのアドレスに対応する検査フラグに初期値として”未検出”を示す値を設定する。アドレス変換テーブル６１０と、不要コード情報テーブル５０１と、ターゲット命令長テーブル５０２はすべてターゲットＣＰＵの命令アドレスを保持しているので、３つのテーブルをマージして一つのテーブルとして保持してもよい。
【００１５】
ターゲットＣＰＵの命令コードからホストＣＰＵの命令コードへの変換が完了するとターゲットＣＰＵのプログラムカウンタを設定するが（図５のＳ１０２）、プログラムカウンタが設定された時点でそのアドレスを命令の先頭として変換した変換コードは実行コードであることがわかる。そこでたとえばターゲットＣＰＵシステムで定義されている命令長が２バイト、４バイト、６バイトの３種類で命令コードの配置が２バイト境界に配置される場合を例にすると、プログラムカウンタの値が０番地、０番地に配置された命令の命令長が４バイトであったとすると、２番地は０番地の命令の途中になるので２番地を命令の先頭として読み出した命令コードを変換した変換コードは実行されることのない不要コードであることがわかる。これは、正常動作では途中の番地を指定することはないが、もし実行されたとすると、それは不要コードのアドレスである。４番地は別の命令、例えば０番地の命令の次の命令が配置されている可能性があるためその命令の実行時に実行コード、不要コードの判断をする。そしてたとえば４番地に命令長４バイトの命令が配置されているとすると、同様に６番地は４番地の命令の途中になるので６番地を命令の先頭として読み出した命令コードを変換した変換コードは実行されることのない不要コードであることがわかる。また同様に８番地は別の命令が配置されている可能性があるためその命令の実行時に実行コード、不要コードの判断する。このようにして不要コードを検出することができる（図５のＳ１０３）。
【００１６】
図９の不要コード検出フローを例に詳細動作を説明する。
検査アドレス読み込み部５１９は変換コード実行部４からターゲットＣＰＵのプログラムカウンタを読み込み検査アドレス保持部５１６にセットする（図９のＳ２０１）。
検査フラグ比較部５１５は検査アドレス保持部５１６に保持されている検査アドレスに対応する検査フラグと”未検出”を示すフラグ値とを比較し、等しくなければ不要コード検出処理を終了し、等しければ以下に示す不要コード検出処理を行う（図９のＳ２０２）。
検査命令長読み込み部５１８はターゲット命令長テーブル５０２から検査アドレスに対応するターゲットＣＰＵの命令長を読み込み、検査命令長保持部５１７にセットする（図９のＳ２０３）。
検査アドレス保持部５１６に保持している検査アドレスは、ターゲットＣＰＵのプログラムカウンタ値で指示されている。そして、実行される命令コードのアドレスを示すため、検査フラグ設定部５１４は不要コード情報テーブル５０１の検査アドレスに対応する検査フラグに”実行”を示すフラグ値をセットする（図９のＳ２０４）。
【００１７】
次に不要コードのアドレスを検出する。
たとえばターゲットＣＰＵシステムで定義されている命令長が２バイト、４バイト、６バイトの３種類で命令コードの配置が２バイト境界に配置される場合を例にする。
まず命令アドレスカウンタ制御部５１２は命令アドレスカウンタ５１１に２をセットする（図９のＳ２０５）。
プログラムカウンタの値が０番地で、０番地に配置された命令の命令長が４バイトであったとすると、検査アドレス保持部５１６に保持されている検査アドレスの値にに命令アドレスカウンタ５１１の値を加算した結果は、求められるターゲットＣＰＵのアドレスである２番地が０番地の命令の途中になるので、２番地を命令の先頭として読み出した命令コードを変換した変換コードは実行されることのない不要コードであることがわかる。また例えば０番地の命令が６バイトであった場合は同様に命令の配置が可能な２番地、４番地が０番地の命令の途中になるので、２番地、４番地を命令の先頭として読み出した命令を変換した変換コードは不要コードである。
【００１８】
このようにして不要コードを検出する。プログラムカウンタの値が０番地で、０番地に配置された命令の命令長が４バイトでる場合を例にすると、命令アドレスカウンタ比較部５１３は命令アドレスカウンタ５１１（この場合値は２）と検査命令長保持部５１７に保持している検査命令長の値（この場合値は４）を比較し、命令アドレスカウンタ５１１の値の方が小さくなければ不要コード検出処理を終了し、命令アドレスカウンタ５１１の値の方が小さければ以下に示す不要コードのアドレスの検出処理が行われる（図９のＳ２０６）。例えば、命令アドレスカウンタ５１１の値が２で検査命令長の値が４の場合は、検査命令長の方が大きいので不要コードのアドレスの検出処理を行う。
検査フラグ設定部５１４は不要コード情報テーブル５０１の検査アドレスと命令アドレスカウンタの値を加算したアドレス（この場合２番地）に対応する検査フラグに”不要”を示す値をセットする（図９のＳ２０７）。
図１０に検査フラグ設定後の不要コード情報テーブルの例を示す。ターゲットＣＰＵの命令アドレスがＡ０、Ａ２、Ａ４、Ａ７から始まる命令コードは実際に実行される命令コードであり、その検査フラグには”実行”を示す値が設定されている。ターゲットＣＰＵの命令アドレスがＡ１、Ａ３、Ａ５、Ａ６から始まる命令コードは実際には実行されることのない命令コードであり、その検査フラグには”不要”を示す値が設定されている。
【００１９】
命令アドレスカウンタ制御部５１２は、命令アドレスカウンタ５１１の値を２バイト分インクリメントする（図９のＳ２０８）。この値は命令コードの配置が可能な番地の単位分インクリメントする。この例の場合は２バイト単位で命令コードの配置が可能であるため、２バイトをインクリメントしている。１バイト単位であればインクリメントする値は１である。
次に命令アドレスカウンタ比較部５１３は命令アドレスカウンタ５１１（この場合値は４）と検査命令長保持部５１７に保持している検査命令長の値（この場合値は４）を比較すると命令アドレスカウンタ５１１の値は検査命令長保持部５１７に保持されている値より小さくないので不要コード検出処理が終了する（図９のＳ２０６）。
Ｓ２０６〜Ｓ２０８を繰り返すことによりターゲットＣＰＵの１命令あたりで発生する不要コードの命令アドレスを検出することができ、ターゲットＣＰＵの命令を１命令シミュレートする毎に上記Ｓ２０１〜Ｓ２０８の処理を行うことにより連続して不要コードのアドレスを検出することができる。
【００２０】
変換コード実行部４は、設定されたプログラムカウンタで指示されたバイナリ変換後コードがあるアドレスを読み込み（図５のＳ１０４）、そのアドレスから変換コードを実行する（図５のＳ１０５）。命令実行処理が完了するとターゲットＣＰＵのプログラムカウンタを更新する（図５のＳ１０６）。ここで変換コード実行部４は、例えばタイマによる割込み処理を受け付けたタイミングで、不要コードの削除や変換コードの再配置を起動し（図５のＳ１０７）、不要コードの削除や変換コードの再配置完了後にタイマによる割込み処理を行う。不要コードの削除、変換コードの再配置を起動する条件は、タイマによる割込みのほかに実行した命令数をカウントした場合や、特定の割込み処理が発生した場合でもよいし、外部からトリガをかける方式でもよい。不要コードの削除、変換コードの再配置を起動しない場合は、引き続きターゲットＣＰＵのシミュレーションが行われる。
この不要コードの削除、変換コードの再配置は、シミュレーションするターゲットＣＰＵの命令の切れ目で行われ、不要コードの削除、変換コードの再配置処理が完了してからシミュレーションが再開される。このため正確にターゲットＣＰＵの命令コードをシミュレーションすることができる。
【００２１】
図１１の不要コード削除のフローを例に詳細に説明する。
不要情報読み込み部６０３は、不要コード情報ポインタ６０４の値として不要コード情報テーブル５０１の先頭のエントリを指示するように設定する（図１１のＳ３０１）。
不要情報読み込み部６０３は、不要コード情報ポインタ６０４が指示するエントリの命令アドレスを読み込み削除命令アドレス保持部６０１にセットする（図１１のＳ３０２）。
不要情報読み込み部６０３は、不要コード情報ポインタ６０４が示すエントリの検査フラグを読み込み削除検査フラグ保持部６０２にセットする（図１１のＳ３０３）。
削除検査フラグ判定部６０６は削除検査フラグ保持部６０２の値と、”不要”を示すフラグ値を比較する（図１１のＳ３０４）。
検査フラグ値が”不要”を示すフラグ値の場合、アドレス変換テーブル修正部６０７はアドレス変換テーブル６１０における削除命令アドレス保持部６０１に保持しているアドレスに対応する変換コードアドレスの値を例えば逐次実行処理を行うシミュレーション命令コードのアドレスに修正する（図１１のＳ３０５）。この場合、例外などで期待していないターゲットＣＰＵの命令アドレスから命令を実行しても逐次実行処理が実行されるので、正確にターゲットＣＰＵ命令コードのシミュレーションができる。
【００２２】
図１２に図１０の不要コード情報テーブルの例を基に変換コードアドレスを修正したアドレス変換テーブルの例を示す。Ａ０、Ａ２、Ａ４、Ａ７から始まるターゲットＣＰＵの命令コードは実行コードであるため、変換コードのアドレスは変更しない。Ａ１、Ａ３、Ａ５、Ａ６から始まるターゲットＣＰＵの命令コードは不要コードであるため変換コードアドレスの値を例えば逐次実行処理を行うアドレスＤＥＬ＿ＡＤＤに修正する。
検査フラグ値が”不要”を示すフラグ値でない場合は図１１のＳ３０５の処理は行わず、次の図１１のＳ３０６の処理を行う。
不要情報読み込み部６０３は不要コード情報ポインタ６０４を不要コード情報テーブル５０１の次のエントリを示すように設定する（図１１のＳ３０６）。
削除終了判定部６０５は不要コード情報テーブル５０１に不要コード情報ポインタ６０４の示すエントリがない場合は、不要コード削除処理を終了し、不要コード情報ポインタ６０４の示すエントリがある場合は、そのエントリの検査フラグを読みこむ（図１１のＳ３０３）。
以下、図１１のＳ３０３からＳ３０７の不要コード削除処理を繰り返す。
以上により変換コード保持部の検出された不要コードの領域は削除することができる。
【００２３】
不要コードの削除が完了すると、命令コード再配置部７０は不要コード削除部６０により削除された不要コードの領域にその領域以降に配置されている実行コードを順につめて変換コードの再配置を行う（図５のＳ１０９）。
Ｓ１０９の詳細動作を図１３に示す変換コード再配置のフローを用いて説明する。
まず不要コードサイズテーブル設定部７１１は、不要コードである変換コードのアドレスと、算出した不要コードのサイズとを対にして保持する不要コードサイズテーブル７０１を設定する。そして不要コードサイズのエントリである変換コードのアドレスと、不要コードのサイズとは、ＣＰＵシミュレータ初期化時にあらかじめ全て“０”に初期化しておく。
【００２４】
例えば不要コードサイズテーブル７０１の検査フラグの値が”不要”である不要コードのターゲットＣＰＵの命令アドレスを検索し、検出したアドレスに対応する変換コードのアドレスをアドレス変換テーブル６１０から求める。またそのターゲットＣＰＵにおける”不要”である次の命令アドレスに対応する変換コードのアドレスを求め、不要コードのアドレスとの差をとることで不要コードサイズを算出し、その算出結果を不要コードサイズテーブル７０１に設定する。このようにして不要コードサイズテーブル７０１が設定される（図１３のＳ４０１）。不要コードサイズテーブルのエントリである変換コードのアドレスも、不要コードのサイズのそれも、どちらの値も“０”の場合は、そのエントリは無効であるとする。
図１４に不要コードサイズテーブルと、変換コードの内容の例を示す。図１４の変換コード保持部の例において、変換コードアドレスがＡ４からＡ８、Ａ１５からＡ１８は不要コードであることがわかっているとすると、不要コードサイズテーブルの不要コードアドレスの項目にはＡ４とＡ１５が設定され、それぞれに対応する不要コードサイズにはＡ４からＡ８までの命令コードのサイズの和とＡ１５からＡ１８までの命令コードのサイズの和が設定される。
【００２５】
次に変換コードの再配置を行う。
まず不要コードサイズテーブル検索部７１２は不要コードサイズテーブル検索ポインタ７１３に不要コードサイズテーブル７０１の先頭のエントリアドレスを格納する（図１３のＳ４０２）。
不要コードサイズテーブル検索部７１２は不要コードサイズテーブル検索ポインタ７１３が示すエントリの変換コードアドレスと、変換コードサイズがともに０か、ともに０でないかを確認し、ともに０である場合は削除された変換コードがないので（図１３のＳ４０３）、変換コード再配置処理を行わず、図１３のＳ４１０以降の処理を実行する。
不要コードアドレスと不要コードサイズがともに０でない場合は不要で削除されたコードがあるので、以下に続く変換コード再配置処理を実行する。
不要コードサイズテーブル読み込み部７１４は、不要コードサイズテーブル検索ポインタ７１３が示すエントリの不要コードのアドレスを、読み込み移動先アドレス保持部７１７に格納する（図１３のＳ４０４）。
不要コードサイズテーブル読み込み部７１４は、不要コードサイズテーブル検索ポインタ７１３が示すエントリの不要コードサイズを、読み込み移動サイズ保持部７１９に格納する（図１３のＳ４０５）。
再配置アドレスカウンタ設定部７１６は再配置アドレスカウンタ７１５に移動先アドレスの値をセットする（図１３のＳ４０６）。
【００２６】
再配置コード判定部７２０は、再配置アドレスカウンタ７１５と、移動サイズ保持部７１９に保持されている移動サイズを加算し、その結果が変換コードの領域内であるかを確認する。変換コードの領域外であることは再配置する変換コードがないことを意味し、次の削除領域の検索を行う（図１３のＳ４０７）。
移動先アドレスと移動サイズを加算した結果が変換コードの領域内である場合は再配置する変換コードが存在することを意味し、変換コード再配置実行部７２１は再配置アドレスカウンタ７１５と移動サイズ保持部７１９に保持されている移動サイズを加算したアドレスの変換コードが示す値を１Ｂだけ再配置アドレスカウンタ７１５のアドレスに移動する（図１３のＳ４０８）。
再配置アドレスカウンタ設定部７１６は再配置アドレスカウンタを１Ｂだけインクリメントする（図１３のＳ４０９）。
図１３のＳ４０７からＳ４０９の処理を繰り返すことにより一つの不要な変換コードについて再配置を行うことができる。
【００２７】
アドレス変換テーブル更新部７１８は、不要コードを削除し、その空きを詰めて再配置を行う。これを詳述すると、アドレス変換テーブル６１０の変換コードのアドレスが移動先アドレス保持部７１７に保持されている移動先アドレス以降のエントリについて各変換コードのアドレスの値から移動サイズ保持部７１９に保持されている移動サイズだけ減算した値をアドレス変換テーブル６１０の変換コードのアドレスに設定する（図１３のＳ４１０）。
一つの不要な変換コードについて再配置が完了すると、Ｓ４０８の処理対象となる移動すべき変換コードがなくなるので、不要コードサイズテーブル検索部７１２は不要コードサイズテーブル検索ポインタとして不要コードサイズテーブル７０１の次のエントリアドレスをセット（更新）する（図１３のＳ４１１）。
図１３のＳ４０３からＳ４１１の処理を繰り返すことにより全ての変換コード領域について変換コードの再配置を行うことができる。
全ての変換コード領域について変換コードの再配置が完了すると、不要コードサイズテーブル７０１のエントリ検索が完了し（図１３のＳ４０３）、以下の処理を行う。
図１５に図１４の不要コードサイズテーブルと変換コードをもとに再配置した後の変換コードの例を示す。変換コードのアドレスがＡ４からＡ８の変換コードは不要コードなので変換コードのアドレスがＡ４以降の領域に実行コードであるＡ９からＡ１４の変換コードが再配置される。
【００２８】
再配置が完了すると更新されたターゲットＣＰＵのプログラムカウンタにしたがってこれまでに説明した上記処理を繰り返し行うことによりターゲットＣＰＵのシミュレーションを行う。
以上のように設定されたターゲットＣＰＵのプログラムカウンタをもとに不要コードの検出を行い、適当なタイミングで不要コードの削除、再配置を行うことで、シミュレーション処理への影響を小さく保ちながら実行コードの配置される領域を小さくすることでホストＣＰＵのキャッシュ効率を向上することができる。
【００２９】
【発明の効果】
以上のようにこの発明によれば、検査対象の命令コードの中で実行されない命令を検出する不要コード検出部と、検出された不要コードを削除して後の命令コード列を所定の規則でアドレス移動して再配置する命令コード再配置部とを備えたので、変換後のホスト計算機におけるメモリ量を削減でき、かつこの削減以上にキャシュメモリ有効使用によるシミュレーション実行速度を向上できる効果がある。
【図面の簡単な説明】
【図１】この発明の実施の形態１におけるプロセッサ・シミュレータの概略構成を示す図である。
【図２】実施の形態１における不要コード検出部の詳細構成を示す図である。
【図３】実施の形態１における不要コード削除部の詳細構成を示す図である。
【図４】実施の形態１における不要コード再配置部の詳細構成を示す図である。
【図５】実施の形態１におけるプロセッサ・シミュレータの全体動作フローを示す図である。
【図６】実施の形態１におけるアドレス変換テーブルの初期値を示す図である。
【図７】実施の形態１における不要コード情報テーブルの初期値を示す図である。
【図８】実施の形態１におけるターゲット命令長テーブルの初期値を示す図である。
【図９】実施の形態１における不要コード検出動作フローを示す図である。
【図１０】実施の形態１における全変換後の不要コード情報テーブルの例を示す図である。
【図１１】実施の形態１における不要コード削除動作フローを示す図である。
【図１２】実施の形態１における全変換後のアドレス変換テーブルの例を示す図である。
【図１３】実施の形態１における変換コードの再配置動作フローを示す図である。
【図１４】実施の形態１における変換コード保持部が行なう動作を説明する図である。
【図１５】実施の形態１における再配置後の変換コード列の例を示す図である。
【図１６】従来のプロセッサ・シミュレータの概略構成を示す図である。
【図１７】従来のプロセッサ・シミュレータの動作を示すフロー図である。
【符号の説明】
１  対象プロセッサの命令コード表、２  バイナリコード変換部、３  変換コード保持部、４  変換コード実行部、５０  不要コード検出部、６０  不要コード削除部、７０  命令コード再配置部、５０１  不要コード情報テーブル、５０２  ターゲット命令長テーブル、５１４  検査フラグ設定部、６０７  アドレス変換テーブル修正部、６１０  アドレス変換テーブル、７０１  不要コードサイズテーブル、７１９  移動サイズ保持部、７２１  変換コード再配置実行部。
【図１】
2004265344.tif 000003
【図２】
2004265344.tif 000004
【図３】
2004265344.tif 000005
【図４】
2004265344.tif 000006
【図５】
2004265344.tif 000007
【図６】
2004265344.tif 000008
【図７】
2004265344.tif 000009
【図８】
2004265344.tif 000010
【図９】
2004265344.tif 000011
【図１０】
2004265344.tif 000012
【図１１】
2004265344.tif 000013
【図１２】
2004265344.tif 000014
【図１３】
2004265344.tif 000015
【図１４】
2004265344.tif 000016
【図１５】
2004265344.tif 000017
【図１６】
2004265344.tif 000018
【図１７】
2004265344.tif 000019