(57)【特許請求の範囲】
【請求項１】
コンパイラが生成した一次目的コードをシミュレーションするシミュレータを備えるマイクロプロセッサ用目的コードの最適化装置において、
前記シミュレータが、前記一次目的コードの命令コードを解析して前記命令コードを実行し、前記命令コード実行によるデータコードのアクセス回数、アドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報を生成し、前記データアクセス情報に基づいて選択したデータコードを、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成することを特徴とするマイクロプロセッサ用目的コードの最適化装置。
【請求項２】
前記シミュレータが、前記一次目的コード中のデータアクセス命令の解析を行い、前記データアクセス命令によりアクセスされるデータアクセスアドレス（以下アドレス）とデータアクセスサイズ（以下サイズ）、及びデータアクセス回数をデータアクセス情報として出力するデータアクセス情報生成部と、
前記データアクセス情報を参照してアドレス毎のアクセス頻度の降順にデータコードをソートし、同一アドレスでの最大サイズの前記データコードを選択データコードとして選択し、前記キャッシュ領域に前記アクセス頻度の降順に前記選択データコードを再配置し命令コードを補正するデータ再配置部と、
前記データ再配置部が再配置したデータ及び補正した命令コードを前記二次目的コードとして生成する二次目的コード生成部とを備えることを特徴とする請求項１記載のマイクロプロセッサ用目的コードの最適化装置。
【請求項３】
前記データアクセス情報生成部が、前記一次目的コード中の前記データアクセス命令の解析を行い、前記データアクセスアドレスとサイズを検出するデータアクセス命令解析部と、
前記データアクセス命令解析部で検出した前記データアドレスと前記データアクセスサイズとを前記データアクセス情報に出力するデータアクセス情報出力部とを備えることを特徴とする請求項２記載のマイクロプロセッサ用目的コードの最適化装置。
【請求項４】
前記データ再配置部が、前記データアクセス情報を参照しアドレス毎にアクセス頻度の降順にデータコードをソートして最大サイズのデータコードを選択し、前記キャッシュ領域にアクセス頻度の降順に再配置し、再配置後のアドレスを前記データアクセス情報にそれぞれ付加し再配置情報として出力するデータ再配置実行部と、
読み出した前記目的コードがデータコードアクセス命令でありかつそのアクセスアドレスが前記再配置情報の再配置前のアクセスアドレスと一致する場合に前記目的コードのアクセスアドレスを配置後のアクセスアドレスに置き換え命令コードを補正する命令コード補正部とを備えることを特徴とする請求項２記載のマイクロプロセッサ用目的コードの最適化装置。
【請求項５】
コンパイラが生成した一次目的コードをシミュレーションするシミュレータを備えるマイクロプロセッサ用目的コードの最適化装置による目的コードの最適化方法であって、
前記シミュレータが、前記一次目的コードの命令コードを解析して前記命令コードを実行し、前記命令コード実行によるデータコードのアクセス回数、アドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報を生成し、前記データアクセス情報に基づいて選択したデータコードを、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成することを特徴とするマイクロプロセッサ用目的コードの最適化方法。
【請求項６】
コンパイラが生成した一次目的コードをシミュレーションするシミュレータを備えるマイクロプロセッサ用目的コードの最適化装置による目的コードの最適化方法であって、
前記シミュレータが実行する処理ステップが、前記一次目的コードの命令コードの解析を行う命令コード解析ステップと、
解析した前記命令コードを実行する命令シミュレーションステップと、
前記命令コード中のデータアクセス命令の解析を行い、データのアクセスアドレスとアクセスサイズ、及びアクセス回数を検出してデータアクセス情報を生成するデータアクセス情報生成ステップと、
前記データアクセス情報生成ステップで生成した前記データコードのアクセス回数を前記アクセスアドレス及び前記アクセスサイズ毎に記録した前記データアクセス情報に基づいて選択したデータコードを、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置し命令コードを補正するデータ再配置ステップと、
前記データ再配置ステップで再配置したデータ及び補正した命令コードを二次目的コードとして生成する二次目的コード生成ステップとを有することを特徴とするマイクロプロセッサ用目的コードの最適化方法。
【請求項７】
前記命令コード解析ステップが、前記シミュレーションの入力となる前記目的コードが、前記コンパイルにより生成された前記一次目的コードであるか、前記シミュレーションにより生成された前記二次目的コードであるかの判定を行う一次／二次目的コード判定ステップと、前記一次／二次目的コード判定ステップで前記一次目的コードであれば、この一次目的コードの命令コードの解析を行う一次目的コード解析ステップと、
前記一次／二次目的コード判定ステップで前記二次目的コードであれば、この二次目的コードの命令コードの解析を行う二次目的コード解析ステップとを有することを特徴とする請求項６記載のマイクロプロセッサ用目的コードの最適化方法。
【請求項８】
前記データアクセス情報生成ステップが、前記命令コード中の前記データアクセス命令の解析を行い、このデータアクセス命令の前記データアクセスアドレスと前記アクセスサイズを検出するデータアクセス命令解析ステップと、
検出した前記データアクセスアドレスと前記アクセスサイズを前記データアクセス情報に出力し、前記データアクセス情報内のアクセス回数をインクリメントするデータアクセス情報出力ステップとを有することを特徴とする請求項６記載のマイクロプロセッサ用目的コードの最適化方法。
【請求項９】
前記データ再配置ステップが、前記データアクセス情報を参照して、アドレス毎にアクセス頻度の降順にデータコードをソートして最大アクセスサイズのデータコードを選択データコードとして選択し、この選択データコードを前記キャッシュ領域にアクセス頻度の降順に再配置し、再配置後のアドレスを前記データアクセス情報にそれぞれ付加し再配置情報として出力するデータ再配置実行ステップと、
前記目的コードを１命令コードずつ読み出し、前記目的コードがデータコードアクセス命令でありかつそのアクセスアドレスが前記再配置情報の再配置前のアクセスアドレスと一致する場合、一致したデータコードアクセス命令のアクセスアドレスを配置後のアクセスアドレスに置き換えて命令コードを補正する命令コード補正ステップとを有することを特徴とする請求項６記載のマイクロプロセッサ用目的コードの最適化方法。
【請求項１０】
前記データアクセス命令解析ステップが、前記命令コード中の前記データアクセス命令がデータアクセス命令であるか否かの判定を行い前記データアクセス命令でなければ命令コード終了判定ステップに進むデータアクセス命令判定ステップと、
前記データアクセス命令判定ステップで前記データアクセス命令であれば前記データアクセス命令中のデータアクセスアドレスと前記アクセスサイズの取り出しを行うアドレスサイズ取り出しステップと、
前記アドレスサイズ取り出しステップで取り出した前記データアクセスアドレスと前記アクセスサイズに該当する前記データアクセス情報中のエントリを検索する該当エントリ検索ステップと、
前記データアクセス情報に該当エントリがある場合、該当エントリアクセス回数インクリメントステップに進む該当エントリ有り判定ステップと、
前記該当エントリのアクセス回数をインクリメントする該当エントリアクセス回数インクリメントステップと、
前記該当エントリ有り判定ステップで前記データアクセス情報に前記該当エントリがない場合新規に、前記アドレスサイズ取り出しステップで取り出した前記データアクセスアドレスと前記アクセスサイズのエントリを前記データアクセス情報へ追加する新規エントリ追加ステップと、
命令コードの終了であるか否かの判定を行い、終了でなければ命令コード解析ステップへと戻り、終了であればデータ再配置ステップへ進む前記命令コード終了判定ステップとを有することを特徴とする請求項８記載のマイクロプロセッサ用目的コードの最適化方法。
【請求項１１】
前記データ再配置実行ステップが、前記データアクセス情報に基づきアドレス毎のアクセス頻度の降順に前記データコードをソートしソートデータを生成するデータソートステップと、
前記ソートデータからアクセス頻度の降順にデータコードを取り出すデータ取り出しステップと、取り出したアクセスアドレスと同一アドレスの前記データコードの中で最大アクセスサイズのデータコードを検索し選択データコードとして選択する最大サイズエントリ検索ステップと、
前記選択データコードを前記キャッシュ領域に移動するキャッシュ領域移動ステップと、前記データアクセス情報に配置後アドレスを付加し、再配置情報として出力する再配置情報出力ステップと、
前記キャッシュ領域の空領域が無いかの判定を行い前記キャッシュ領域の空領域がまだ残っている場合後述のデータ終了判定ステップへ進み、前記キャッシュ領域の空領域がなくなった場合、後述の非キャッシュ領域移動ステップへ進む空きキャッシュ領域無し判定ステップと、
前記ソートデータの全アドレスの終了であれば、前記命令コード補正ステップへ進み、全アドレス終了でなければ、前記データ取り出しステップへ戻り、以上の処理を繰り返す前記データ終了判定ステップと、
前記ソートデータの残りのアクセスアドレスのデータコードを低速でのアクセス可能なデータコード領域である非キャッシュ領域へ移動し、前記再配置情報へ前記再配置情報を出力し、前記命令コード補正ステップに進む前記非キャッシュ領域移動ステップとを有することを特徴とする請求項９記載のマイクロプロセッサ用目的コードの最適化方法。
【請求項１２】
前記命令コード補正ステップが、前記一次目的コードから１命令コードを取り出す１命令コード取り出しステップと、
前記命令コードを最後まで読み出したかの判定を行い、最後まで読み出したならば、終了し、まだ読み込むべき命令コードが残っていれば、後述のアクセス命令判定ステップへ進む命令コード終了判定ステップと、
前記１命令コード取り出しステップで読み出した前記命令コードが前記データコードアクセス命令でなければ、前記１命令コード取り出しステップへ戻り、前記命令コードが前記データコードアクセス命令であれば、次の一致検索ステップへ進む前記アクセス命令判定ステップと、
前記再配置情報内を検索し、前記データコードアクセス命令のアクセスアドレスと前記再配置情報内の配置前アドレスとが一致するエントリである一致エントリを探す前記一致検索ステップと、
前記一致検索ステップで前記一致エントリが見つかった場合、次の置換ステップへ進み、前記１命令コード取り出しステップへ戻り、以上の処理を反復し、前記一致検索ステップで前記一致エントリが見つからなかった場合、前記１命令コード取り出しステップへ戻り、以上の処理を反復する一致判定ステップと、
データコードアクセス命令のアドレスを前記一致エントリの配置後アドレスに置き換える前記置換ステップとを有することを特徴とする請求項９記載のマイクロプロセッサ用目的コードの最適化方法。
【請求項１３】
前記データ再配置実行ステップが、前記データアクセス情報に基づきアドレス毎のアクセス頻度の降順に前記データコードをソートしソートデータを生成するデータソートステップと、
前記ソートデータからアクセス頻度の降順にデータコードを取り出すデータ取り出しステップと、
取り出したアクセスアドレスと同一アドレスの前記データコードの中で最大アクセスサイズのデータコードを検索し選択データコードとして選択する最大サイズエントリ検索ステップと、
前記キャッシュ領域の空領域が無いかの判定を行い前記キャッシュ領域の空領域がまだ残っている場合後述のキャッシュ領域移動ステップへ進み、前記キャッシュ領域の空領域がなくなった場合、後述の非キャッシュ領域移動ステップへ進む空きキャッシュ領域無し判定ステップと、
前記選択データコードを前記キャッシュ領域に移動するキャッシュ領域移動ステップと、前記ソートデータの残りのアクセスアドレスのデータコードを低速でのアクセス可能なデータコード領域である非キャッシュ領域へ移動する前記非キャッシュ領域移動ステップと、
前記データアクセス情報に配置後アドレスを付加し、再配置情報として出力する再配置情報出力ステップと、
前記ソートデータの全アドレスの終了であれば、前記命令コード補正ステップへ進み、全アドレス終了でなければ、前記データ取り出しステップへ戻り、以上の処理を繰り返す前記データ終了判定ステップとを有することを特徴とする請求項９記載のマイクロプロセッサ用目的コードの最適化方法。
【請求項１４】
前記命令コード補正ステップが、前記再配置情報から１エントリを取り出す再配置情報取り出しステップと、
前記再配置情報の終わりまで検索したか否かの判定を行い、前記再配置情報の終わりであれば終了し、前記再配置情報の終わりでなければ次の第１の１命令コード取り出しステップへ進む再配置情報終了判定ステップと、
前記一次目的コードから１命令コードを取り出す前記第１の１命令コード取り出しステップと、
前記１命令コード取り出しステップで読み出した前記命令コードが前記データコードアクセス命令でなければ、前記１命令コード取り出しステップへ戻り、前記命令コードが前記データコードアクセス命令であれば、次の配置後アドレス置換ステップへ進むアクセス命令判定ステップと、
前記再配置情報内を検索し、前記データコードアクセス命令のアクセスアドレスと前記再配置情報内の配置前アドレスとが一致する一致エントリを探し、前記一致エントリの配置後アドレスへの置換処理を行う前記配置後アドレス置換ステップと、
前記一次目的コードから１命令コードを取り出す第２の１命令コード取り出しステップと、
前記命令の終了か否かの判定を行い、終了でなければ前記アクセス命令判定ステップへ戻り、以下の処理を反復し、終了であれば前記再配置情報取り出しステップへ戻り以下の処理を反復する命令コード終了判定ステップとを有することを特徴とする請求項９記載のマイクロプロセッサ用目的コードの最適化方法。
【請求項１５】
コンパイラが生成した一次目的コードをシミュレーションするシミュレータを備えるマイクロプロセッサ用目的コードの最適化装置によって目的コードを最適化するためのプログラムを記録した記録媒体であって、
前記シミュレータを、前記一次目的コードの命令コードを解析して前記命令コードを実行し、前記命令コード実行によるデータコードのアクセス回数をアドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報を生成し、前記データアクセス情報に基づきデータコードを選択し、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成する手段として機能させるためのマイクロプロセッサ用目的コードの最適化プログラムを記憶した記憶媒体。
【請求項１６】
コンパイラが生成した一次目的コードをシミュレーションするシミュレータを備えるマイクロプロセッサ用目的コードの最適化装置による目的コード最適化するためのプログラムを記録した記録媒体であって、
前記シミュレータに、前記一次目的コードの命令コードの解析を行う命令コード解析ステップと、
解析した前記命令コードを実行する命令シミュレーションステップと、
前記命令コード中のデータアクセス命令の解析を行い、データのアクセスアドレスとアクセスサイズ、及びアクセス回数を検出してデータアクセス情報を生成するデータアクセス情報生成ステップと、
前記データアクセス情報生成ステップで生成した前記データコードのアクセス回数を前記アクセスアドレス及び前記アクセスサイズ毎に記録した前記データアクセス情報に基づき前記データコードを選択し、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置し命令コードを補正するデータ再配置ステップと、
前記データ再配置ステップで補正した前記目的コードを二次目的コードとして生成する二次目的コード生成ステップとを実行させるためのマイクロプロセッサ用目的コードの最適化プログラムを記憶した記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロプロセッサ用目的コードの最適化装置、最適化方法及び最適化プログラムを記録した記録媒体に関し、特にマイクロプロセッサ用目的コードの最適化処理を行うコンパイラが生成した一次目的コードの命令コードを解析して１命令でアクセス可能な命令コードを生成するための二次目的コードを生成するマイクロプロセッサ用目的コードの最適化装置、最適化方法及び最適化プログラムを記録した記録媒体に関する。
【０００２】
【従来の技術】
従来、この種のマイクロプロセッサ用目的コードの最適化処理は、データ処理装置によるコンパイル用プログラム又はコンパイラの読み取り実行により実現され、ソースプログラムのコード（コンパイラが生成した一次目的コード）を入力し、マイクロプロセッサに対応してプログラムの実行速度を高める目的コード（二次目的コード）を出力するために用いられている。
【０００３】
ここで、コンパイラが生成した一次目的コードとは、Ｃ言語、ＦＯＲＴＲＡＮ，ＣＯＢＯＬなどの高級プログラミング言語を、目的とするＣＰＵ上の機械語命令コード及びデータコードに翻訳したものを意味する。
【０００４】
例えば、パイプライン方式のマイクロプロセッサにおいて、命令間のコンフリクトを回避させつつプログラムの実行速度を高めるために、互いに依存関係のない複数の命令に関しては、コンパイラによって、他の命令の結果を待っている遅延時間が短い命令を自動的に前に配置するようにした命令コードのスケジューリング方式が提案されている。
【０００５】
また、現在、マイクロプロセッサは、ＣＰＵと主メモリとの間に高速、小容量のキャッシュメモリを配置し、主メモリに置かれたデータコードへのアクセスの高速化を図っているものが一般的となっている。しかし、必要なデータコードがキャッシュ上に存在しないキャッシュミスに起因する実行速度低下が依然として残っており、この実行速度低下を低減するために、コンパイラにより、命令実行時のキャッシュミス・ペナルティを小さくするための命令スケジューリングを行う方式が考案されている。
【０００６】
特開平１０−３３３９１６号公報記載の従来のマイクロプロセッサ用目的コードの最適化装置であるコンパイル装置をブロックで示す図１３（Ａ）を参照すると、この従来のマイクロプロセッサ用目的コードの最適化装置は、記録媒体に記録されたコンパイル用プログラムである入力コードＦ５をプロファイルデータＦ２を用いてコンパイルして目的コードＦ１００を生成するコンパイル部２と、目的コードＦ１００をシミュレーションしプロファイルデータＦ２を生成するマシン又はシミュレータであるシミュレータ１００とを備える。
【０００７】
入力コードＦ５は、例えば、Ｃ言語、ＪＡＶＡ言語、ＦＯＲＴＲＡＮ言語などの高級言語で記述したものである。
【０００８】
コンパイル部２は、入力コードＦ５の実行を行うソフトウェア機能手段として、入力コードＦ５の供給を受けこの入力コードＦ５の字句解析及び構文解析を行うフロントエンド２１と、後述するバックエンド２２とを備える。
【０００９】
バックエンド２２は、目的コードＦ１００のシミュレーション結果であるプロファイルデータＦ２を基にキャッシュミスペナルティをできるだけ小さくするために命令コードのスケジューリングを行うコードスケジューリング部２２１と、コードスケジューリング部２２１のコードスケジューリング結果に基づきシミュレータ１００上で実行可能な目的コードＦ１００を生成する目的コード生成部２２２とを備える。
【００１０】
シミュレータ１００の構成例をブロックで示す図１３（Ｂ）を参照すると、このシミュレータ１００は、コンパイル部２が生成した目的コードである一次目的コードＦ１００の命令コードの解析を行う命令コード解析部１１と、解析した命令コードの実行を行う命令シミュレーション部１２と、プロファイルデータの生成を行いプロファイルデータＦ２に格納するプロファイルデータ生成部１３とを備える。
【００１１】
次に、図１３（Ａ），（Ｂ）を参照して、従来のマイクロプロセッサ用目的コードの最適化装置の動作について説明すると、まず、コンパイル部２のフロントエンド２１は、入力コードＦ５の供給を受けこの入力コードＦ５の字句解析及び構文解析を行い、解析結果をバックエンド２２に供給する。
【００１２】
次に、バックエンド２２のコードスケジューリング部２２１は、有効設定された場合に、プロファイルデータＦ２を基にキャッシュミスペナルティをできるだけ小さくするために命令コードのスケジューリングを行う。無効設定された場合は不動作となり、何も実行しない。
【００１３】
有効設定の場合、まず、コードスケジューリング部２２１は、目的コードＦ１００をシミュレータ１００で実行して得たＣＰＵ動作の記録であるプロファイルデータＦ２を解析しキャッシュミスペナルティ発生部分を検出するとともにコードスケジューリング実行部２２４で利用するためのキャッシュ動作情報を生成する。次に、このキャッシュ動作情報に基づき検出したキャッシュミスペナルティを軽減するための命令コードの再スケジューリングを行う。
【００１４】
ここで、キャッシュ動作情報とは、キャッシュミスしたデータを主記憶からキャッシュに読み込む動作が各動作クロックで行われている否かを表わす情報である。
【００１５】
目的コード生成部２２２は、コードスケジューリング部２２１の命令コードの再スケジューリング結果を受け、シミュレータ１００上で実行可能な目的コードを生成し、目的コードＦ１００に出力する。
【００１６】
シミュレータ１００は、まず、命令コード解析部１１において、コンパイル部２が生成した一次目的コードである目的コードＦ１００の命令コード（以下一次命令コード）の解析を行う。次に、命令シミュレーション部１２において、解析した一次命令コードの実行を行う。最後に、プロファイルデータ生成部１３において、プロファイルデータの生成を行い、プロファイルデータＦ２へ出力する。
【００１７】
このように従来技術では、シミュレータ１００上で実行して得られるプロファイルデータＦ２を基に、実行速度を低下させるキャッシュミスペナルティを解析し、キャッシュミスペナルティをできるだけ小さくするために目的コードＦ１００を再スケジューリングするコードスケジューリング処理を行い、目的コード生成部２２２により、最終的な目的コードＦ１００を生成し、その実行速度を向上させていた。
【００１８】
マイクロプロセッサは、一般的に、機械語命令のデータコードアクセス命令において、アクセスできるデータコードのディスプレースメント（オフセット）に制限があり、例えば、ディスプレースメントとして１６ビットの値までしかとることができない。このため、従来のマイクロプロセッサ用目的コードの最適化装置においては、データコード領域の任意の位置にポインタを設定し、そのポインタをポインタ専用のレジスタに格納することにより、そのレジスタからのオフセット（ディスプレースメント）を用いてデータコード領域をアクセスする。そのポインタの近辺にサイズの小さいデータコードをできるだけ多く配置することにより、できるだけ多くのデータコードを１命令のデータコードアクセス命令でアクセスし、実行速度を向上させるという技術がある。
【００１９】
しかし、依然として、アクセスできるデータコードのディスプレースメントの範囲外にあるデータコード（以下、ディスプレースメント範囲外データコード）においては、１命令でアクセスすることができず、複数命令でアクセスしなければならないため、ディスプレースメント範囲外データコードへのアクセス頻度が高いプログラムにおいては、実行速度が低下するという問題がある。
【００２０】
次に、データコードアクセス命令がディスプレースメントとして１６ビットの値までしかとることができない（以下、１６ビットディスプレースメント）マイクロプロセッサに対するデータコード領域を説明図で示す図１４（Ａ）及び命令コードの例を示す図１４（Ｂ），（Ｃ）を参照して、上記問題が生じる理由について説明する。
【００２１】
図１４（Ａ）を参照すると、この図に示すポインタＰ１は、データコード領域を高速にアクセスするためのデータコード領域の任意の位置を示すポインタを示し、このポインタＰ１から１６ビットディスプレースメントでアクセスできるデータコード領域９０１に「Ｓｄａｔａ」が配置されている。このため、「Ｓｄａｔａ」は、図１４（Ｂ）に示すように、データコードアクセス命令ｌｄ．ｗにより１命令でアクセスすることができ、このデータコードアクセス命令ｌｄ．ｗは、図１４（Ａ）のポインタを示す［ｇｐ］からのディスプレースメント＄Ｓｄａｔａに格納されているＳｄａｔａの値を取り出し、汎用レジスタｒ２０へ格納している。
【００２２】
しかし、図１４（Ａ）中の「Ｄａｔａ」，「Ｄａｔａ１」は、ポインタＰ１から１６ビットディスプレースメントでアクセスできないデータコード領域９００，９０１にそれぞれ配置されており、図１４（Ｃ）に示すように、データコードアクセス命令の１６ビットディスプレースメント指定では表現できないため、２命令を必要とする。まず、命令ｍｏｖｈｉにより、Ｄａｔａの上位１６ビットを取り出し、汎用レジスタｒ１に格納し、次に、データコードアクセス命令ｌｄ．ｗにより、前記のＤａｔａの下位１６ビットと前記の汎用レジスタｒ１で３２ビットのディスプレースメントを表現し、Ｄａｔａの値を取り出して汎用レジスタｒ２０に格納している。このため、１６ビットディスプレースメントでアクセスできないデータコード領域９００，９０１に配置されているデータコードへのアクセス頻度が高いプログラムにおいては、実行速度が低下する。
【００２３】
また、従来技術において、データコード領域のどこにどのデータコードを配置するかを指定することが可能な技術が存在するが、データコードのアクセス頻度を知る手段がないため、効率的にアクセス頻度の高いデータコードを１６ビットディスプレースメントでアクセス可能なデータコード領域に配置することが困難であった。
【００２４】
【発明が解決しようとする課題】
上述した従来のマイクロプロセッサ用目的コードの最適化装置、最適化方法及び最適化プログラムを記録した記録媒体は、コンパイル部が生成した一次目的コードの命令コード（以下一次命令コード）の解析を行い、次に、解析した一次命令コードの実行を行い、最後に、プロファイルデータの生成を行っており、シミュレータ上で実行して得られるプロファイルデータを基に、実行速度を低下させるキャッシュミスペナルティを解析し、キャッシュミスペナルティをできるだけ小さくするために目的コードを再スケジューリングするコードスケジューリング処理を行い、目的コード生成部により、最終的な目的コードを生成し、その実行速度を向上させていたが、アクセスできるデータコードのディスプレースメントの範囲外にあるデータコード（以下、ディスプレースメント範囲外データコード）においては、１命令でアクセスすることができず、複数命令でアクセスしなければならないため、ディスプレースメント範囲外データコードへのアクセス頻度が高いプログラムにおいては、実行速度が低下するという欠点があった。
【００２５】
本発明の目的は、ディスプレースメント範囲外データコードであっても、目的コード中のデータコードを再配置し、プログラムの実行速度を向上させるマイクロプロセッサ用目的コードの最適化装置、最適化方法及び最適化プログラムを記録した記録媒体を提供することにある。
【００２６】
【課題を解決するための手段】
請求項１記載の発明のマイクロプロセッサ用目的コードの最適化装置は、記録媒体に記録されたコンパイル用プログラムである入力コードをプロファイルデータを用いてコンパイルして一次目的コードを生成するコンパイル部と、前記一次目的コードをシミュレーションし前記プロファイルデータを生成するシミュレータとを備えるマイクロプロセッサ用目的コードの最適化装置において、
前記シミュレータが、前記コンパイル部が生成した前記一次目的コードの命令コードを解析してこの命令コード対応処理の実行である命令コード実行を行い、前記命令コード実行によるデータコードのアクセス回数をアドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報に基づきアクセス頻度の高いデータコードを検出し、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成し、前記二次目的コードの命令コードを解析して前記命令コード実行を行うことにより、高速のシミュレーション実行を可能とすることを特徴とするものである。
【００２７】
また、請求項２記載の発明は、請求項１記載のマイクロプロセッサ用目的コードの最適化装置において、前記シミュレータが、前記コンパイル部で生成した目的コードである一次目的コード又は前記シミュレータが生成した目的コードである二次目的コードのいずれか一方（以下目的コード）の命令コードの解析を行う命令コード解析部と、
解析した前記命令コードの実行を行う命令シミュレーション部と、
前記命令コードの実行の結果に基づき前記プロファイルデータを生成するプロファイルデータ生成部と、
前記一次目的コード中のデータアクセス命令の解析を行い、このデータアクセスアドレス（以下アドレス）とデータアクセスサイズ（以下サイズ）をデータアクセス情報に出力するデータアクセス情報生成部と、
前記データアクセス情報を参照してアドレス毎のアクセス頻度の降順にデータコードをソートし、同一アドレスでの最大サイズの前記データコードを選択データコードとして選択し、前記キャッシュ領域に前記アクセス頻度の降順に前記選択データコードを再配置し命令コードを補正するデータ再配置部と、
前記データ再配置部が再配置したデータ及び補正した命令コードを前記二次目的コードとして生成する二次目的コード生成部とを備えて構成されている。
【００２８】
また、請求項３記載の発明は、請求項２記載のマイクロプロセッサ用目的コードの最適化装置において、前記データアクセス情報生成部が、前記一次目的コード中の前記データアクセス命令の解析を行い、前記データアクセスアドレスとサイズを検出するデータアクセス命令解析部と、
前記データアクセス命令解析部で検出した前記データアドレスと前記データアクセスサイズとを前記データアクセス情報に出力するデータアクセス情報出力部とを備えて構成されている。
【００２９】
また、請求項４記載の発明は、請求項２記載のマイクロプロセッサ用目的コードの最適化装置において、前記データ再配置部が、前記データアクセス情報を参照しアドレス毎にアクセス頻度の降順にデータコードをソートして最大サイズのデータコードを選択し、前記キャッシュ領域にアクセス頻度の降順に再配置し、再配置後のアドレスを前記データアクセス情報にそれぞれ付加し再配置情報として出力するデータ再配置実行部と、
読み出した前記目的コードがデータコードアクセス命令でありかつそのアクセスアドレスが前記再配置情報の再配置前のアクセスアドレスと一致する場合に前記目的コードのアクセスアドレスを配置後のアクセスアドレスに置き換え命令コードを補正する命令コード補正部とを備えて構成されている。
【００３０】
請求項５記載の発明のマイクロプロセッサ用目的コードの最適化方法は、記録媒体に記録されたコンパイル用プログラムである入力コードをプロファイルデータを用いてコンパイルして一次目的コードを生成し、前記一次目的コードをシミュレーションし前記プロファイルデータを生成するマイクロプロセッサ用目的コードの最適化方法において、
前記シミュレーションが、前記コンパイルにより生成した前記一次目的コードの命令コードを解析してこの命令コード対応処理の実行である命令コード実行を行い、前記命令コード実行によるデータコードのアクセス回数をアドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報に基づきアクセス頻度の高いデータコードを検出し、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成し、前記二次目的コードの命令コードを解析して前記命令コード実行を行うことにより、高速のシミュレーション実行を可能とすることを特徴とするものである。
【００３１】
請求項６記載の発明のマイクロプロセッサ用目的コードの最適化方法は、記録媒体に記録されたコンパイル用プログラムである入力コードをプロファイルデータを用いてコンパイルして一次目的コードを生成し、前記一次目的コードをシミュレーションし前記プロファイルデータを生成するマイクロプロセッサ用目的コードの最適化方法において、
前記一次目的コードの命令コードの解析を行う命令コード解析ステップと、
解析した前記一次命令コードの実行を行う命令シミュレーションステップと、前記一次命令コードの実行の結果に基づき前記プロファイルデータの生成を行うプロファイルデータ生成ステップと、
前記命令コード中のデータアクセス命令の解析を行い、データのアクセスアドレスとアクセスサイズを検出し、検出したデータの前記アクセスアドレスと前記アクセスサイズをデータアクセス情報に格納するデータアクセス情報生成ステップと、
前記データアクセス情報生成ステップで生成した前記データコードのアクセス回数を前記アクセスアドレス及び前記アクセスサイズ毎に記録した前記データアクセス情報に基づきアクセス頻度の降順に前記データコードを検出して１命令でアクセス可能なデータコード領域であるキャッシュ領域に前記アクセス頻度の降順に再配置し命令コードを補正するデータ再配置ステップと、
前記データ再配置ステップで補正した前記目的コードを二次目的コードとして生成する二次目的コード生成ステップとを有することを特徴とするものである。
【００３２】
また、請求項７記載の発明は、請求項５記載のマイクロプロセッサ用目的コードの最適化方法において、前記命令コード解析ステップが、前記シミュレーションの入力となる前記目的コードが、前記コンパイルにより生成された前記一次目的コードであるか、前記シミュレーションにより生成された前記二次目的コードであるかの判定を行う一次／二次目的コード判定ステップと、
前記一次／二次目的コード判定ステップで前記一次目的コードであれば、この一次目的コードの命令コードの解析を行う一次目的コード解析ステップと、
前記一次／二次目的コード判定ステップで前記二次目的コードであれば、この二次目的コードの命令コードの解析を行う二次目的コード解析ステップとを有することを特徴とするものである。
【００３３】
また、請求項８記載の発明は、請求項６記載のマイクロプロセッサ用目的コードの最適化方法において、前記データアクセス情報生成ステップが、前記命令コード中の前記データアクセス命令の解析を行い、このデータアクセス命令の前記データアクセスアドレスと前記アクセスサイズを検出するデータアクセス命令解析ステップと、
検出した前記データアクセスアドレスと前記アクセスサイズを前記データアクセス情報に出力し、前記データアクセス情報内のアクセス回数をインクリメントするデータアクセス情報出力ステップとを有することを特徴とするものである。
【００３４】
また、請求項９記載の発明は、請求項６記載のマイクロプロセッサ用目的コードの最適化方法において、前記データ再配置ステップが、前記データアクセス情報を参照して、アドレス毎にアクセス頻度の降順にデータコードをソートして最大アクセスサイズのデータコードを選択データコードとして選択し、この選択データコードを前記キャッシュ領域にアクセス頻度の降順に再配置し、再配置後のアドレスを前記データアクセス情報にそれぞれ付加し再配置情報として出力するデータ再配置実行ステップと、
前記目的コードを１命令コードずつ読み出し、前記目的コードがデータコードアクセス命令でありかつそのアクセスアドレスが前記再配置情報の再配置前のアクセスアドレスと一致する場合、一致したデータコードアクセス命令のアクセスアドレスを配置後のアクセスアドレスに置き換えて命令コードを補正する命令コード補正ステップとを有することを特徴とするものである。
【００３５】
また、請求項１０記載の発明は、請求項８記載のマイクロプロセッサ用目的コードの最適化方法において、前記データアクセス命令解析ステップが、前記命令コード中の前記データアクセス命令がデータアクセス命令であるか否かの判定を行い前記データアクセス命令でなければ命令コード終了判定ステップに進むデータアクセス命令判定ステップと、
前記データアクセス命令判定ステップで前記データアクセス命令であれば前記データアクセス命令中のデータアクセスアドレスと前記アクセスサイズの取り出しを行うアドレスサイズ取り出しステップと、
前記アドレスサイズ取り出しステップで取り出した前記データアクセスアドレスと前記アクセスサイズに該当する前記データアクセス情報中のエントリを検索する該当エントリ検索ステップと、
前記データアクセス情報に該当エントリがある場合、該当エントリアクセス回数インクリメントステップに進む該当エントリ有り判定ステップと、
前記該当エントリのアクセス回数をインクリメントする該当エントリアクセス回数インクリメントステップと、
前記該当エントリ有り判定ステップで前記データアクセス情報に前記該当エントリがない場合新規に、前記アドレスサイズ取り出しステップで取り出した前記データアクセスアドレスと前記アクセスサイズのエントリを前記データアクセス情報へ追加する新規エントリ追加ステップと、
命令コードの終了であるか否かの判定を行い、終了でなければ命令コード解析ステップへと戻り、終了であればデータ再配置ステップへ進む前記命令コード終了判定ステップとを有することを特徴とするものである。
【００３６】
また、請求項１１記載の発明は、請求項９記載のマイクロプロセッサ用目的コードの最適化方法において、前記データ再配置実行ステップが、前記データアクセス情報に基づきアドレス毎のアクセス頻度の降順に前記データコードをソートしソートデータを生成するデータソートステップと、
前記ソートデータからアクセス頻度の降順にデータコードを取り出すデータ取り出しステップと、
取り出したアクセスアドレスと同一アドレスの前記データコードの中で最大アクセスサイズのデータコードを検索し選択データコードとして選択する最大サイズエントリ検索ステップと、
前記選択データコードを前記キャッシュ領域に移動するキャッシュ領域移動ステップと、
前記データアクセス情報に配置後アドレスを付加し、再配置情報として出力する再配置情報出力ステップと、
前記キャッシュ領域の空領域が無いかの判定を行い前記キャッシュ領域の空領域がまだ残っている場合後述のデータ終了判定ステップへ進み、前記キャッシュ領域の空領域がなくなった場合、後述の非キャッシュ領域移動ステップへ進む空きキャッシュ領域無し判定ステップと、
前記ソートデータの全アドレスの終了であれば、前記命令コード補正ステップへ進み、全アドレス終了でなければ、前記データ取り出しステップへ戻り、以上の処理を繰り返す前記データ終了判定ステップと、
前記ソートデータの残りのアクセスアドレスのデータコードを低速でのアクセス可能なデータコード領域である非キャッシュ領域へ移動し、前記再配置情報へ前記再配置情報を出力し、前記命令コード補正ステップに進む前記非キャッシュ領域移動ステップとを有することを特徴とするものである。
【００３７】
また、請求項１２記載の発明は、請求項９記載のマイクロプロセッサ用目的コードの最適化方法において、前記命令コード補正ステップが、前記一次目的コードから１命令コードを取り出す１命令コード取り出しステップと、
前記命令コードを最後まで読み出したかの判定を行い、最後まで読み出したならば、終了し、まだ読み込むべき命令コードが残っていれば、後述のアクセス命令判定ステップへ進む命令コード終了判定ステップと、
前記１命令コード取り出しステップで読み出した前記命令コードが前記データコードアクセス命令でなければ、前記１命令コード取り出しステップへ戻り、前記命令コードが前記データコードアクセス命令であれば、次の一致検索ステップへ進む前記アクセス命令判定ステップと、
前記再配置情報内を検索し、前記データコードアクセス命令のアクセスアドレスと前記再配置情報内の配置前アドレスとが一致するエントリである一致エントリを探す前記一致検索ステップと、
前記一致検索ステップで前記一致エントリが見つかった場合、次の置換ステップへ進み、前記１命令コード取り出しステップへ戻り、以上の処理を反復し、前記一致検索ステップで前記一致エントリが見つからなかった場合、前記１命令コード取り出しステップへ戻り、以上の処理を反復する一致判定ステップと、
データコードアクセス命令のアドレスを前記一致エントリの配置後アドレスに置き換える前記置換ステップとを有することを特徴とするものである。
【００３８】
また、請求項１３記載の発明は、請求項９記載のマイクロプロセッサ用目的コードの最適化方法において、前記データ再配置実行ステップが、前記データアクセス情報に基づきアドレス毎のアクセス頻度の降順に前記データコードをソートしソートデータを生成するデータソートステップと、
前記ソートデータからアクセス頻度の降順にデータコードを取り出すデータ取り出しステップと、
取り出したアクセスアドレスと同一アドレスの前記データコードの中で最大アクセスサイズのデータコードを検索し選択データコードとして選択する最大サイズエントリ検索ステップと、
前記キャッシュ領域の空領域が無いかの判定を行い前記キャッシュ領域の空領域がまだ残っている場合後述のキャッシュ領域移動ステップへ進み、前記キャッシュ領域の空領域がなくなった場合、後述の非キャッシュ領域移動ステップへ進む空きキャッシュ領域無し判定ステップと、
前記選択データコードを前記キャッシュ領域に移動するキャッシュ領域移動ステップと、
前記ソートデータの残りのアクセスアドレスのデータコードを低速でのアクセス可能なデータコード領域である非キャッシュ領域へ移動する前記非キャッシュ領域移動ステップと、
前記データアクセス情報に配置後アドレスを付加し、再配置情報として出力する再配置情報出力ステップと、
前記ソートデータの全アドレスの終了であれば、前記命令コード補正ステップへ進み、全アドレス終了でなければ、前記データ取り出しステップへ戻り、以上の処理を繰り返す前記データ終了判定ステップとを有することを特徴とするものである。
【００３９】
また、請求項１４記載の発明は、請求項９記載のマイクロプロセッサ用目的コードの最適化方法において、前記命令コード補正ステップが、前記再配置情報から１エントリを取り出す再配置情報取り出しステップと、
前記再配置情報の終わりまで検索したか否かの判定を行い、前記再配置情報の終わりであれば終了し、前記再配置情報の終わりでなければ次の第１の１命令コード取り出しステップへ進む再配置情報終了判定ステップと、
前記一次目的コードから１命令コードを取り出す前記第１の１命令コード取り出しステップと、
前記１命令コード取り出しステップで読み出した前記命令コードが前記データコードアクセス命令でなければ、前記１命令コード取り出しステップへ戻り、前記命令コードが前記データコードアクセス命令であれば、次の配置後アドレス置換ステップへ進むアクセス命令判定ステップと、
前記再配置情報内を検索し、前記データコードアクセス命令のアクセスアドレスと前記再配置情報内の配置前アドレスとが一致する一致エントリを探し、前記一致エントリの配置後アドレスへの置換処理を行う前記配置後アドレス置換ステップと、
前記一次目的コードから１命令コードを取り出す第２の１命令コード取り出しステップと、
前記命令の終了か否かの判定を行い、終了でなければ前記アクセス命令判定ステップへ戻り、以下の処理を反復し、終了であれば前記再配置情報取り出しステップへ戻り以下の処理を反復する命令コード終了判定ステップとを有することを特徴とするものである。
【００４０】
請求項１５記載の発明のマイクロプロセッサ用目的コードの最適化プログラムを記録した記録媒体は、コンパイル用プログラムである入力コードをプロファイルデータを用いてコンパイルして一次目的コードを生成し、前記一次目的コードをシミュレーションし前記プロファイルデータを生成するマイクロプロセッサ用目的コードの最適化プログラムを記録した記録媒体において、
前記シミュレーションが、前記コンパイルにより生成した前記一次目的コードの命令コードを解析してこの命令コード対応処理の実行である命令コード実行を行い、前記命令コード実行によるデータコードのアクセス回数をアドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報に基づきアクセス頻度の高いデータコードを検出し、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成し、前記二次目的コードの命令コードを解析して前記命令コード実行を行うことにより、高速のシミュレーション実行を可能とすることを特徴とするものである。
【００４１】
請求項１６記載の発明のマイクロプロセッサ用目的コードの最適化プログラムを記録した記録媒体は、コンパイル用プログラムである入力コードをプロファイルデータを用いてコンパイルして一次目的コードを生成し、前記一次目的コードをシミュレーションし前記プロファイルデータを生成するマイクロプロセッサ用目的コードの最適化プログラムを記録した記録媒体において、
前記一次目的コードの命令コードの解析を行う命令コード解析ステップと、
解析した前記一次命令コードの実行を行う命令シミュレーションステップと、前記一次命令コードの実行の結果に基づき前記プロファイルデータの生成を行うプロファイルデータ生成ステップと、
前記命令コード中のデータアクセス命令の解析を行い、データのアクセスアドレスとアクセスサイズを検出し、検出したデータの前記アクセスアドレスと前記アクセスサイズをデータアクセス情報に格納するデータアクセス情報生成ステップと、
前記データアクセス情報生成ステップで生成した前記データコードのアクセス回数を前記アクセスアドレス及び前記アクセスサイズ毎に記録した前記データアクセス情報に基づきアクセス頻度の降順に前記データコードを検出して１命令でアクセス可能なデータコード領域であるキャッシュ領域に前記アクセス頻度の降順に再配置し命令コードを補正するデータ再配置ステップと、
前記データ再配置ステップで補正した前記目的コードを二次目的コードとして生成する二次目的コード生成ステップとを有することを特徴とするものである。
【００４２】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００４３】
本実施の形態のマイクロプロセッサ用目的コードの最適化装置及び最適化方法は、記録媒体に記録されたコンパイル用プログラムである入力コードをプロファイルデータを用いてコンパイルして一次目的コードを生成するコンパイル部と、上記一次目的コードをシミュレーションし上記プロファイルデータを生成するシミュレータとを備えるマイクロプロセッサ用目的コードの最適化装置において、上記シミュレータが、上記コンパイル部が生成した上記一次目的コードの命令コードを解析してこの命令コード対応処理の実行である命令コード実行を行い、上記命令コード実行によるデータコードのアクセス回数をアドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報に基づきアクセス頻度の高いデータコードを検出し、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成し、この二次目的コードの命令コードを解析して上記命令コード実行を行うことにより、高速のシミュレーション実行を可能とすることを特徴とするものである。
【００４４】
ここで、コンパイラが生成した一次目的コードとは、Ｃ言語、ＦＯＲＴＲＡＮ，ＣＯＢＯＬなどの高級プログラミング言語を、目的とするＣＰＵ上の機械語命令コード及びデータコードに翻訳したものを意味する。
【００４５】
また、１命令でアクセス可能なデータコード領域、すなわち、キャッシュ領域とは、一般的なキャッシュメモリ（以下キャッシュ）だけではなく、例えば、従来技術の図４で説明したポインタＰ１の１６ビットディスプレースメント範囲の領域９０１のようなデータコード記憶領域を意味する。
【００４６】
次に、本発明の実施の形態を図１３と共通の構成要素には共通の参照文字／数字を付して同様にブロックで示す図２（Ａ）を参照すると、この図に示す本実施の形態のマイクロプロセッサ用目的コードの最適化装置は、記録媒体に記録されたコンパイル用プログラムである入力コードＦ５をプロファイルデータＦ２を用いてコンパイルして一次目的コードＦ１を生成するコンパイル部２と、一次目的コードＦ１をシミュレーションしプロファイルデータＦ２を生成するとともに二次目的コードＦ４を生成するマシン又はシミュレータであるシミュレータ１とを備える。
【００４７】
シミュレータ１は、一次目的コードＦ１から読み出した一次命令コードを解析してこの一次命令コードの命令コード実行をシミュレーションしてプロファイルデータＦ１を生成し、命令コード実行に伴うデータコードのアクセス回数をアドレス及びアクセスサイズ毎に記録したデータアクセス情報Ｆ３を生成し、このデータアクセス情報Ｆ３に基づきアクセス頻度の高いデータコードを検出し、１命令でアクセス可能なデータコード領域に再配置し、二次目的コードＦ４を生成する。
【００４８】
入力コードＦ５は、例えば、Ｃ言語、ＪＡＶＡ言語、ＦＯＲＴＲＡＮ言語などの高級言語で記述したものである。
【００４９】
コンパイル部２は、入力コードＦ５の実行を行うソフトウェア機能手段として、入力コードＦ５の供給を受けこの入力コードＦ５の字句解析及び構文解析を行うフロントエンド２１と、後述するバックエンド２２とを備える。
【００５０】
バックエンド２２は、一次目的コードＦ１／二次目的コードＦ４のシミュレーション結果であるプロファイルデータＦ２を基にキャッシュミスペナルティをできるだけ小さくするために命令コードのスケジューリングを行うコードスケジューリング部２２１と、コードスケジューリング部２２１のコードスケジューリング結果に基づきシミュレータ１上で実行可能な一次目的コードＦ１を生成する目的コード生成部２２２とを備える。
【００５１】
コードスケジューリング部２２１の構成例をブロックで示す図２（Ｂ）を参照すると、このコードスケジューリング部２２１は、一次目的コードＦ１のシミュレーション結果であるプロファイルデータＦ２を解析しキャッシュミスペナルティ発生部分を検出するとともにコードスケジューリング実行部２２４で利用するためのキャッシュ動作情報を出力するプロファイルデータ解析部２２３と、上記キャッシュ動作情報に基づき検出したキャッシュミスペナルティ軽減のための命令コードの再スケジューリングを行うコードスケジューリング実行部２２４とを備える。
【００５２】
ここで、このキャッシュ動作情報とは、キャッシュミスしたデータを主記憶からキャッシュに読み込む動作が各動作クロックで行われている否かを表わす情報である。
【００５３】
本実施の形態を特徴付けるシミュレータ１の構成を図１３（Ｂ）と共通の構成要素には共通の参照文字／数字を付して同様にブロックで示す図１（Ａ）を参照すると、従来と共通のコンパイル部２で生成した目的コードである一次目的コードＦ１又はシミュレータ１が生成した二次目的コードＦ４（以下、一次又は二次目的コードの両方を指す場合を目的コードＦＸと呼ぶ）の命令コードの解析を行う命令コード解析部１１と、解析した命令コードの実行を行う命令シミュレーション部１２と、プロファイルデータの生成を行いプロファイルデータファイルＦ２（以下特記ない限りファイルを省略し、例えばプロファイルデータＦ２等と呼ぶ）に格納するプロファイルデータ生成部１３とに加えて、コンパイル部２で生成した一次目的コードＦ１中のデータアクセス命令の解析を行い、このデータアクセスアドレス（以下アドレス）とデータアクセスサイズ（以下サイズ：データアクセスアドレスとデータアクセスサイズをデータアドレスとサイズと省略）をデータアクセス情報Ｆ３に出力するデータアクセス情報生成部１４と、データアクセス情報Ｆ３を参照してアドレス毎のアクセス頻度の高い順（降順）にデータコードをソートし、同一アドレスでの最大サイズのデータコードを選択データコードとして選択し、１命令でアクセス可能なデータコード領域（以下キャッシュ領域）にアクセス頻度の降順に選択データコードを再配置し命令コードを補正するデータ再配置部１５と、データ再配置部１５が再配置したデータ及び補正した命令コードを二次目的コードＦ４として生成する二次目的コード生成部１６とを備える。
【００５４】
データアクセス情報生成部１４の構成をブロックで示す図１（Ｂ）を参照すると、このデータアクセス情報生成部１４は、コンパイル部２で生成した一次目的コード中のデータアクセス命令の解析を行い、アドレス及びサイズを検出するデータアクセス命令解析部１４１と、データアクセス命令解析部で検出したデータアドレスとサイズをデータアクセス情報Ｆ３に出力するデータアクセス情報出力部１４２とを備える。
【００５５】
データ再配置部１５の構成をブロックで示す図１（Ｃ）を参照すると、このデータ再配置部１５は、データアクセス情報Ｆ３を参照しアドレス毎にアクセス頻度の降順にデータコードをソートして最大サイズのデータコードを選択し、キャッシュ領域にアクセス頻度順に再配置し、再配置後のアドレスをデータアクセス情報Ｆ３にそれぞれ付加し再配置情報として出力するデータ再配置実行部１５１と、読み出した目的コードＦＸがデータコードアクセス命令でありかつその（目的コードＦＸの）アドレスが再配置情報の再配置前のアドレスと一致する場合に目的コードのアクセスを配置後のアドレスに置き換え命令コードを補正する命令コード補正部１５２とを備える。
【００５６】
次に、図１、図２、及び本実施の形態のシミュレータ１の処理をフローチャートで示す図３を参照して本実施の形態の動作について説明すると、まず、コンパイル部２のフロントエンド２１は、入力コードＦ５の供給を受けこの入力コードＦ５の字句解析及び構文解析を行い、解析結果をバックエンド２２に供給する。
【００５７】
次に、バックエンド２２のコードスケジューリング部２２１は、有効設定された場合に、プロファイルデータＦ２を基にキャッシュミスペナルティをできるだけ小さくするために命令コードのスケジューリングを行う。無効設定された場合は不動作となり、何も実行しない。
【００５８】
有効設定の場合、まず、コードスケジューリング部２２１のプロファイルデータ解析部２２３は、目的コードＦＸをシミュレータ１で実行して得たＣＰＵ動作の記録であるプロファイルデータＦ２を解析しキャッシュミスペナルティ発生部分を検出するとともにコードスケジューリング実行部２２４で利用するためのキャッシュ動作情報を出力し、コードスケジューリング実行部２２４に供給する。次に、コードスケジューリング実行部２２４は、供給を受けたキャッシュ動作情報に基づきプロファイルデータ解析部２２３で検出したキャッシュミスペナルティを軽減するための命令コードの再スケジューリングを行う。
【００５９】
目的コード生成部２２２は、コードスケジューリング実行部２２４の命令コードの再スケジューリング結果を受け、シミュレータ１上で実行可能な目的コードを生成し、一次目的コードＦ１に出力する。
【００６０】
シミュレータ１では、まず、命令コード解析部１１が、コンパイル部２が生成した一次目的コードＦ１の命令コード（以下一次命令コード）の解析を行う（命令コード解析ステップＳ１）。次に、命令シミュレーション部１２が、解析した一次命令コードの実行を行う（命令シミュレーションステップＳ２）。次に、プロファイルデータ生成部１３が、一次命令コードの実行結果に基づきプロファイルデータの生成を行い、プロファイルデータＦ２へ出力する（プロファイルデータ生成ステップＳ３）。ここまでは、従来と同様の処理である。
【００６１】
次に、データアクセス情報生成部１４は、命令コード中のデータアクセス命令の解析を行い、データのアドレスとサイズを検出し、検出したデータのアドレスとサイズをデータアクセス情報Ｆ３に格納する（データアクセス情報生成ステップＳ４）。
【００６２】
まず、データアクセス命令解析部１４１は、有効設定された場合、命令コード中のデータアクセス命令の解析を行い、このデータアクセス命令のデータアドレスとサイズを検出する（データアクセス命令解析ステップＳ４１）。次に、データアクセス情報出力部１４２は、有効設定された場合、データアクセス命令解析部１４１で検出したデータアドレスとサイズをデータアクセス情報Ｆ３に出力し、データアクセス情報Ｆ３内のアクセス回数をインクリメントする（データアクセス情報出力ステップＳ４２）。
【００６３】
データアクセス情報生成部１４で生成されるデータアクセス情報Ｆ３の内容例を説明図で示す図７（Ａ）を参照すると、このデータアクセス情報は、「アドレス」、「アクセスサイズ」、「アクセス回数」とから構成されている。ここで、「アドレス」は、アクセス時のデータコードの格納アドレスを示し、「アクセスサイズ」は、アクセス時のデータコードのサイズを示し、「アクセス回数」は、データコードのアクセス回数を示す。
【００６４】
データ再配置部１５は、有効設定された場合、データアクセス情報生成部１４が生成したデータコードのアクセス回数をアドレス及びアクセスサイズ毎に記録したデータアクセス情報Ｆ３に基づき、アクセス頻度の高い順、すなわち降順にデータコードを検出して１命令でアクセス可能なデータコード領域、すなわち、キャッシュ領域にアクセス頻度の降順に再配置し命令コードを補正する（データ再配置ステップＳ５）。
【００６５】
このデータ再配置ステップＳ５は、まず、データ再配置実行部１５１で、データアクセス情報Ｆ３を参照して、アドレス毎にアクセス頻度の降順にデータコードをソートして最大アクセスサイズのデータコードを選択データコードとして選択し、この選択データコードをキャッシュ領域にアクセス頻度の降順に再配置し、再配置後のアドレスをデータアクセス情報Ｆ３にそれぞれ付加し再配置情報として出力する（データ再配置実行ステップＳ５１）。図７（Ｂ）は再配置情報の記述例を示す。
【００６６】
次に、命令コード補正部１５２で、目的コードＦＸを１命令コードずつ読み出し、この目的コードＦＸがデータコードアクセス命令でありかつそのアドレスが再配置情報の再配置前のアドレスと一致する場合、一致したデータコードアクセス命令のアドレスを配置後のアドレスに置き換えて命令コードを補正する（命令コード補正ステップＳ５２）。
【００６７】
二次目的コード生成部１６は、命令コード補正部１５により補正された目的コードを二次目的コードＦ４として生成する（二次目的コード生成ステップＳ６）。
【００６８】
データアクセス命令解析部１４１のデータアクセス命令解析ステップＳ４１とデータアクセス情報出力部１４２のデータアクセス情報出力ステップＳ４２の各々の処理をそれぞれフローチャートで示す図４を併せて参照してデータアクセス情報生成ステップＳ４の詳細処理について説明すると、データアクセス命令解析ステップＳ４１は、まず、データアクセス命令判定ステップＳ４１１で、命令シミュレーション部１２が実行した命令コードがデータアクセス命令であるか否かの判定を行う。データアクセス命令であれば次のアドレスサイズ取り出しステップＳ４１２へと進む。データアクセス命令でなければ命令コード終了判定ステップＳ４２５へと進む。
【００６９】
次に、アドレスサイズ取り出しステップＳ４１２において、データアクセス命令中のデータアドレスとサイズの取り出しを行う。
【００７０】
次に、該当エントリ検索ステップＳ４２１において、アドレスサイズ取り出しステップＳ４１２において取り出したデータアドレスとサイズに該当する装置内部の直接アクセス記憶データであるデータアクセス情報Ｆ３中のエントリを検索する。
【００７１】
次に、該当エントリ有り判定ステップＳ４２２で直接アクセス記憶データであるデータアクセス情報Ｆ３に該当エントリがある場合、該当エントリアクセス回数インクリメントステップＳ４２３へと進む。該当エントリアクセス回数インクリメントステップＳ４２３で、該当エントリのアクセス回数をインクリメントする。該当エントリ有り判定ステップＳ４２２でデータアクセス情報に該当エントリがない場合新規エントリ追加ステップＳ４２４へと進み、新規に、アドレスサイズ取り出しステップＳ４１２で取り出したデータアドレスとサイズのエントリをデータアクセス情報Ｆ３へ追加する。
【００７２】
最後に、命令コード終了判定ステップＳ４２５で、命令コードの終了であるか否かの判定を行い、終了でなければ命令コード解析ステップＳ１へと戻る。終了であればデータ再配置ステップＳ５へと進む。
【００７３】
次に、データ再配置実行部１５１のデータ再配置実行ステップＳ５１と命令コード補正部１５２の命令コード補正ステップＳ５２の各々の処理をそれぞれフローチャートで示す図５，図６を併せて参照してデータ再配置ステップＳ５の詳細処理について説明すると、まず、データ再配置実行ステップＳ５１は、データソートステップＳ５１１で、データアクセス情報Ｆ３を基に、アドレス毎のアクセス頻度の高い順（降順）にデータコードをソートし、ソートデータＦ６に出力する。
【００７４】
次に、データ取り出しステップＳ５１２で、ソートデータＦ６からアクセス頻度の降順にデータコードを取り出し、最大サイズエントリ検索ステップＳ５１３で、取り出したアドレスと同一アドレスのデータコードの中で最大アクセスサイズのデータコードを検索選択し、このデータコードをキャッシュ領域移動ステップＳ５１４で１命令でアクセス可能なデータ領域であるキャッシュ領域に移動し、再配置情報出力ステップＳ５１５でデータアクセス情報に配置後アドレスを付加し、再配置情報Ｆ７として出力する。図７（Ｂ）は、この再配置情報Ｆ７の例を示す説明図である。
【００７５】
次に、空きキャッシュ領域無し判定ステップＳ５１６で、キャッシュ領域の空領域がまだ残っている場合、データ終了判定ステップＳ５１８へ進み、ソートデータの全アドレスの終了であれば、命令コード補正ステップＳ５２へ進み、全アドレス終了でなければ、データ取り出しステップＳ５１２へ戻り、以上の処理を繰り返す。
【００７６】
また、空きキャッシュ領域無し判定ステップＳ５１６で、キャッシュ領域の空領域がなくなった場合、残りデータ移動ステップＳ５１７へ進み、ソートデータの残りのアドレスのデータコードを低速にしかアクセスできないデータコード領域である非キャッシュ領域へ移動し、再配置情報Ｆ７へ再配置情報を出力し、命令コード補正ステップＳ５２に進む。
【００７７】
命令コード補正ステップＳ５２では、まず、１命令コード取り出しステップＳ５２１で、一次目的コードＦ１から１命令コードを取り出す。
【００７８】
次に、命令コード終了判定ステップＳ５２２において、命令コードを最後まで読み出したかの判定を行い、最後まで読み出したならば、この命令コード補正ステップＳ５２を終了し、二次目的コード生成ステップＳ６へ進む。
【００７９】
命令コード終了判定ステップＳ５２２で、まだ読み込むべき命令コードが残っていれば、アクセス命令判定ステップＳ５２３へ進む。
アクセス命令判定ステップＳ５２３において、１命令コード取り出しステップＳ５２１で読み出した命令コードがデータコードアクセス命令でなければ、１命令コード取り出しステップＳ５２１へ戻り、次の命令コードを読み出す。命令コードがデータコードアクセス命令であれば、一致検索ステップＳ５２４へと進み、再配置情報Ｆ７内を検索し、データコードアクセス命令のアドレスと再配置情報Ｆ７内の配置前アドレスとが一致するエントリを探す。
【００８０】
最後に、一致判定ステップＳ５２５にて、一致検索ステップＳ５２４で一致するエントリである一致エントリが見つかった場合、置換ステップＳ５２６へ進み、データコードアクセス命令のアドレスを上記一致エントリの配置後アドレスに置き換え、１命令コード取り出しステップＳ５２１へ戻り、以上の処理を反復する。また、一致検索ステップＳ５２４で一致エントリが見つからなかった場合、１命令コード取り出しステップＳ５２１へ戻り、以上の処理を反復する。
【００８１】
例えば、本実施形態のマイクロプロセッサ用目的コードの最適化装置において、図１２（Ａ）に示すようなＣ言語における共用体のコード例のように、アクセスサイズが異なるが同一データ領域をアクセスする入力コードをコンパイルする場合、データアクセス情報Ｆ３は、図１２（Ｂ）に示すようになり、同一アドレスのデータコードにおいて、小さいサイズのデータコードのアクセス回数が、大きいサイズのデータコードのアクセス回数より多い場合がある。
【００８２】
この場合、データ再配置ステップＳ５において、アクセス頻度の高いデータコードを優先して再配置を行うため、番号２の２バイトのデータコードが再配置の対象となるが、この番号２のデータコード領域は番号１の４バイトのデータコードでもアクセスされているため、４バイトのデータコードが分断されないように、最大のアクセスサイズである番号１の４バイトのデータコードを再配置の対象として選択する。つまり、同一データ領域をアクセスしているがアクセスサイズが異なる場合、より大きなアクセスサイズでアクセスされているデータコードを１つの単位としてデータコード領域の再配置を行う。
【００８３】
以上説明したように、本実施の形態を特徴付けるシミュレータ１は、データアクセス情報生成部１４がデータアクセス情報Ｆ３を生成し、データ再配置部１５が、高アクセス頻度のデータをキャッシュ領域に再配置処理するため、二次目的コード生成部６が生成した目的コードを再度シミュレータ１上で実行する場合、高アクセス頻度のデータコード領域へのアクセスが高速化し、プログラムの実行速度が向上する。
【００８４】
特に、データコード領域内のデータコードに対してループ処理を行う場合、著しい効果がある。例えば、あるデータコード領域内の値を０に初期化するため１００回のループを必要とするプログラム例において、データコード領域が２命令でなく１命令でアクセス可能な目的コードの場合、１００命令分の実行時間だけ、プログラムの実行速度が向上する。
【００８５】
次に、本発明の第２の実施の形態を特徴付けるデータアクセス情報生成ステップＳ４Ａの処理を図４と共通の構成要素には共通の参照文字／数字を付して同様にフローチャートで示す図８を参照すると、この図に示す本実施の形態のデータアクセス情報生成ステップＳ４Ａの前述の第１の実施の形態のデータアクセス情報生成ステップＳ４との相違点は、内部の直接アクセス記憶データであるデータアクセス情報Ｆ３の代わりに外部記憶装置である外部データアクセス情報Ｆ３Ａを有し、該当エントリ検索ステップＳ４２１の代わりに外部データアクセス情報Ｆ３Ａを検索する該当エントリ検索ステップＳ４２１Ａを有することである。
【００８６】
図８を参照して本実施の形態のデータアクセス情報生成ステップＳ４Ａの処理について第１の実施の形態との相違点を重点的に説明すると、データアクセス命令解析ステップＳ４１１及びアドレスサイズ取り出しステップＳ４１２は第１の実施の形態と同一の処理を行う。すなわち、ステップＳ４１１でデータアクセス命令であるか否かの判定を行い、ステップＳ４１２でデータアクセス命令中のアドレスとサイズの取り出しを行う。
【００８７】
次に、該当エントリ検索ステップＳ４２１Ａで、取り出したデータアドレスとサイズに該当する外部記憶データである外部データアクセス情報Ｆ３Ａ中のエントリを検索する。
【００８８】
以下、該当エントリ有り判定ステップＳ４２２、該当エントリアクセス回数インクリメントステップＳ４２３、新規エントリ追加ステップＳ４２４及び命令コード終了判定ステップＳ４２５は第１の実施の形態と同一の処理を行う。
【００８９】
次に、本発明の第３の実施の形態を特徴付けるデータ再配置実行ステップＳ５１Ａの処理を図５と共通の構成要素には共通の参照文字／数字を付して同様にフローチャートで示す図９を参照すると、この図に示す本実施の形態のデータ再配置実行ステップＳ５１Ａの前述の第１の実施の形態のデータ再配置実行ステップＳ５１との相違点は、最大サイズエントリ検索ステップＳ５１３の次に、空きキャッシュ領域無し判定ステップＳ５１６と、空きキャッシュ領域無し判定ステップＳ５１６で空きキャッシュ領域がある場合はキャッシュ領域にデータを移動するキャッシュ領域移動ステップＳ５１４と、空きキャッシュ領域がない場合キャッシュ領域以外の領域である非キャッシュ領域にデータを移動する非キャッシュ領域移動ステップＳ５１７とを行い、ャッシュ領域移動ステップＳ５１４と非キャッシュ領域移動ステップＳ５１７の処理後再配置情報出力ステップＳ５１５と、データ終了判定ステップＳ５１７を行うことである。
【００９０】
図９を参照して本実施の形態のデータ再配置実行ステップＳ５１Ａの処理について第１の実施の形態との相違点を重点的に説明すると、まず、データソートステップＳ５１１で、データアクセス情報Ｆ３に基づきアドレス毎のアクセス頻度の降順にデータコードをソートし、ソートデータＦ６に出力する。次に、データ取り出しステップＳ５１２で、ソートデータＦ６からアクセス頻度の降順にデータコードを取り出し、最大サイズエントリ検索ステップＳ５１３で、取り出したアドレスと同一アドレスのデータコード中で最大アクセスサイズのデータコードを検索選択する。
【００９１】
次に、空きキャッシュ領域無し判定ステップＳ５１６で、空きキャッシュ領域がまだ残っている場合、キャッシュ領域移動ステップＳ５１４へと進み、このキャッシュ領域移動ステップＳ５１４で、最大サイズエントリ検索ステップＳ５１３で選択したデータコードをキャッシュ領域へ移動する。空きキャッシュ領域が無い場合、非キャッシュ領域移動ステップＳ５１７へと進み、非キャッシュ領域移動ステップＳ５１７において選択したデータコードを非キャッシュ領域に移動する。
【００９２】
以下第１の実施の形態と同様に、再配置情報出力ステップＳ５１５で、データアクセス情報に配置後アドレスを付加し、再配置情報として出力し、データ終了判定ステップＳ５１８で終了判定を行う。
【００９３】
次に、本発明の第４の実施の形態を特徴付ける命令コード補正ステップＳ５２Ａの処理を図６と共通の構成要素には共通の参照文字／数字を付して同様にフローチャートで示す図１０を参照して第１の実施の形態との相違点を重点的に説明すると、この図に示す本実施の形態の命令コード補正ステップＳ５２Ａは、まず、再配置情報取り出しステップＳ５２７で再配置情報Ｆ７から１エントリを取り出す。
【００９４】
次に、再配置情報終了判定ステップＳ５２８で、再配置情報Ｆ７の終わりまで検索したか否かの判定を行い、再配置情報Ｆ７の終わりであれば終了し、二次目的コード生成ステップＳ６へ進む。再配置情報Ｆ７の終わりでなければ１命令コード取り出しステップＳ５２１へ進む。
【００９５】
次に、１命令コード取り出しステップＳ５２１において、一次目的コードＦ１の先頭から１命令コードを取り出す。
【００９６】
次に、アクセス命令判定ステップＳ５２３で、１命令コード取り出しステップＳ５２１で読み出した命令コードがデータコードアクセス命令でなければ、１命令コード取り出しステップＳ５２１へと戻り、次の命令コードを読み出す。命令コードがデータコードアクセス命令であれば、配置後アドレス置換ステップＳ５３０へと進み、再配置情報内を検索し、データコードアクセス命令のアクセスアドレスと再配置情報内の配置前アドレスとが一致する一致エントリを探し、この一致エントリの配置後アドレスへの置換処理を行う。
【００９７】
次に、１命令コード取り出しステップＳ５３１において、一次目的コードから次の１命令を取り出す。
【００９８】
最後に、命令コード終了判定ステップＳ５２２において、命令の終了か否かの判定を行い、終了でなければ、アクセス命令判定ステップＳ５２３へ戻り、以下の処理を繰り返す。命令の終了であれば、再配置情報取り出しステップＳ５２７へ戻り以下の処理を繰り返す。
【００９９】
次に、本発明の第５の実施の形態を特徴付ける命令コード解析ステップＳ１の処理をフローチャートで示す図１１を参照すると、この命令コード解析ステップＳ１は、シミュレータ１の入力（シミュレーションの入力）となる目的コードが、コンパイル部２によるコンパイルの結果から生成された一次目的コードＦ１であるか、シミュレータ１により生成された二次目的コードＦ４であるかの判定を行う（一次／二次目的コード判定ステップＳ１１）。
【０１００】
次に、コンパイル部２から生成された一次目的コードＦ１であれば、一次目的コード解析ステップＳ１２へ進み、この一次目的コードＦ１の命令コードの解析を行う。
【０１０１】
また、シミュレータ１から生成された二次目的コードＦ４であれば、一次目的コード解析ステップＳ１３へ進み、この二次目的コードＦ４の命令コードの解析を行う。
【０１０２】
【発明の効果】
以上説明したように、本発明のマイクロプロセッサ用目的コードの最適化装置、最適化方法及び最適化プログラムを記録した記録媒体は、本発明を特徴付けるシミュレータが、コンパイル部が生成した一次目的コードの命令コードを解析してこの命令コード対応処理の実行である命令コード実行を行い、この命令コード実行によるデータコードのアクセス回数をアドレス及びアクセス対象のデータコードのサイズ毎に記録したデータアクセス情報に基づきアクセス頻度の高いデータコードを検出し、１命令でアクセス可能なデータコード領域であるキャッシュ領域に再配置して二次目的コードを生成し、この二次目的コードの命令コードを解析して上記命令コード実行を行うことにより、高アクセス頻度のデータコード領域へのアクセスを高速化でき、プログラムの実行速度が向上するという効果がある。
【０１０３】
特に、データコード領域内のデータコードに対してループ処理を行う場合、著しい効果がある。例えば、あるデータコード領域内の値を０に初期化するため１００回のループを必要とするプログラム例において、データコード領域が２命令でなく１命令でアクセス可能な目的コードの場合、１００命令分の実行時間だけ、プログラムの実行速度が向上する。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態のマイクロプロセッサ用目的コードの最適化装置を特徴付けるシミュレーション装置を示すブロック図である。
【図２】本実施の形態のマイクロプロセッサ用目的コードの最適化装置を示すブロック図である。
【図３】本実施の形態のシミュレーション装置の処理動作であるシミュレーション方法の一例を示すフローチャートである。
【図４】図３のデータアクセス命令解析処理の詳細処理を示すフローチャートである。
【図５】図３のデータ再配置部１５によるデータ再配置処理の詳細処理を示すフローチャートである。
【図６】データ再配置部によるデータ再配置処理の詳細処理を示すフローチャートである。
【図７】再配置情報の一例を示す説明図である。
【図８】本発明の第２の実施の形態を特徴付けるデータアクセス情報生成部の詳細処理を示すフローチャートである。
【図９】本発明の第３の実施の形態を特徴付けるデータアクセス情報解析部の詳細処理を示すフローチャートである。
【図１０】本発明の第４の実施の形態を特徴付けるコード補正処理部の詳細処理を示すフローチャートである。
【図１１】本発明の第５の実施の形態を特徴付ける命令コード解析部の詳細処理を示すフローチャートである。
【図１２】Ｃ言語における共用体のコードのデータアクセス情報の一例を示す説明図である。
【図１３】従来のマイクロプロセッサ用目的コードの最適化装置の一例を示すブロック図である。
【図１４】データコードアクセス命令のディスプレースメントとして１６ビットの値までしかとることができないマイクロプロセッサに対するデータコード領域，命令コードの例を示す説明図である。
【符号の説明】
１，１００    シミュレータ
２    コンパイル部
１１    命令コード解析部
１２    命令シミュレーション部
１３    プロファイルデータ生成部
１４    データアクセス情報生成部
１５    データ再配置部
１６    二次目的コード生成部
２１    フロントエンド
２２    バックエンド
１４１    データアクセス命令解析部
１４２    データアクセス情報出力部
１５１    データ再配置実行部
１５２    命令コード補正部
２２１    コードスケジューリング部
２２２    目的コード生成部
２２３    プロファイルデータ解析部
２２４    コードスケジューリング実行部
Ｆ１    一次目的コード
Ｆ２    プロファイルデータ
Ｆ３，Ｆ３Ａ    データアクセス情報
Ｆ４    二次目的コード
Ｆ５    入力コード
Ｆ６    ソートデータ
Ｆ７    配置情報
Ｆ１００    目的コード
【図１】
0003758984.tif 000002
【図２】
0003758984.tif 000003
【図３】
0003758984.tif 000004
【図４】
0003758984.tif 000005
【図５】
0003758984.tif 000006
【図６】
0003758984.tif 000007
【図７】
0003758984.tif 000008
【図８】
0003758984.tif 000009
【図９】
0003758984.tif 000010
【図１０】
0003758984.tif 000011
【図１１】
0003758984.tif 000012
【図１２】
0003758984.tif 000013
【図１３】
0003758984.tif 000014
【図１４】
0003758984.tif 000015