JP2001273150A - プログラム変換装置 - Google Patents
プログラム変換装置Info
- Publication number
- JP2001273150A JP2001273150A JP2000087626A JP2000087626A JP2001273150A JP 2001273150 A JP2001273150 A JP 2001273150A JP 2000087626 A JP2000087626 A JP 2000087626A JP 2000087626 A JP2000087626 A JP 2000087626A JP 2001273150 A JP2001273150 A JP 2001273150A
- Authority
- JP
- Japan
- Prior art keywords
- assembler
- template
- function
- code
- call
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000006870 function Effects 0.000 claims description 228
- 238000000034 method Methods 0.000 claims description 46
- 238000012545 processing Methods 0.000 claims description 22
- 238000006243 chemical reaction Methods 0.000 claims description 10
- 238000011156 evaluation Methods 0.000 claims description 9
- 238000001514 detection method Methods 0.000 claims description 5
- 238000013519 translation Methods 0.000 description 21
- 238000004364 calculation method Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 12
- 230000004913 activation Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 239000000047 product Substances 0.000 description 2
- 238000013468 resource allocation Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】 ソースプログラム中にアセンブラコードに展
開される記述形式であるアセンブラテンプレート関数の
呼出記述が含まれている場合に、呼出記述を最適なアセ
ンブラコードに変換するプログラム変換装置を提供す
る。 【解決手段】 制御部104がアセンブラテンプレート
関数の呼出記述を検出したとき、アセンブラテンプレー
ト選択部105は、呼出記述で呼び出されるアセンブラ
テンプレート関数に対応する複数の定義をアセンブラテ
ンプレート記憶部103から得て、呼出記述中における
引数が変数か定数かの別により各定義が使用可能か否か
を判断し、使用可能な各定義に対して定義で特定される
アセンブラコードの実行サイクル数を求め、実行サイク
ル数の最も小さい1つの定義を選択する。アセンブラ関
数呼出翻訳部107は選択された定義に基づいてアセン
ブラコードを生成して出力ファイル格納部108に出力
する。
開される記述形式であるアセンブラテンプレート関数の
呼出記述が含まれている場合に、呼出記述を最適なアセ
ンブラコードに変換するプログラム変換装置を提供す
る。 【解決手段】 制御部104がアセンブラテンプレート
関数の呼出記述を検出したとき、アセンブラテンプレー
ト選択部105は、呼出記述で呼び出されるアセンブラ
テンプレート関数に対応する複数の定義をアセンブラテ
ンプレート記憶部103から得て、呼出記述中における
引数が変数か定数かの別により各定義が使用可能か否か
を判断し、使用可能な各定義に対して定義で特定される
アセンブラコードの実行サイクル数を求め、実行サイク
ル数の最も小さい1つの定義を選択する。アセンブラ関
数呼出翻訳部107は選択された定義に基づいてアセン
ブラコードを生成して出力ファイル格納部108に出力
する。
Description
【0001】
【発明の属する技術分野】本発明は、高級言語で記述さ
れたソースプログラムを特定のプロセッサ用のアセンブ
ラコードに変換するプログラム変換装置に関し、特に、
別途定義してあるアセンブラコードに変換されるべき関
数呼出記述を含むソースプログラムを、変換対象とする
プログラム変換装置に関する。
れたソースプログラムを特定のプロセッサ用のアセンブ
ラコードに変換するプログラム変換装置に関し、特に、
別途定義してあるアセンブラコードに変換されるべき関
数呼出記述を含むソースプログラムを、変換対象とする
プログラム変換装置に関する。
【0002】
【従来の技術】一般にプログラム開発者等によるプログ
ラムの作成は、C言語、C++言語等の高級言語を用い
てなされ、高級言語を用いて作成されたプログラムは、
コンパイラ等のプログラム変換装置によってアセンブラ
コードに変換され最終的にはプロセッサが実行可能な機
械語命令列に変換され利用される。
ラムの作成は、C言語、C++言語等の高級言語を用い
てなされ、高級言語を用いて作成されたプログラムは、
コンパイラ等のプログラム変換装置によってアセンブラ
コードに変換され最終的にはプロセッサが実行可能な機
械語命令列に変換され利用される。
【0003】ところで近年、画像処理等のマルチメディ
ア処理を高速に行なうために積和演算、飽和演算等のデ
ジタル信号処理用の命令(以下、「DSP命令」とい
う。)をサポートするマイクロプロセッサが製造される
ようになり、このようなマイクロプロセッサが情報家電
機器やパーソナルコンピュータに搭載されている。しか
しながら、C言語、C++言語等の高級言語はDSP命
令を想定しておらずDSP命令に対応する演算子を備え
ていない。
ア処理を高速に行なうために積和演算、飽和演算等のデ
ジタル信号処理用の命令(以下、「DSP命令」とい
う。)をサポートするマイクロプロセッサが製造される
ようになり、このようなマイクロプロセッサが情報家電
機器やパーソナルコンピュータに搭載されている。しか
しながら、C言語、C++言語等の高級言語はDSP命
令を想定しておらずDSP命令に対応する演算子を備え
ていない。
【0004】従って、DSP命令を使用する処理を実行
するプログラムを作成するためには、DSP命令を使用
する処理の部分をアセンブラ言語で記述しなければなら
ない。従来のプログラム変換装置には、高級言語のソー
スプログラム中においてアセンブラコードにより実現さ
れる処理を記述するために、アセンブラテンプレート関
数に対する呼出記述を用いることができるようにしたも
のがある。例えばGAIOテクノロジ社のコンパイラで
ある。アセンブラテンプレート関数とは、アセンブラコ
ードを決定するために用いられる記述であり、形式的に
関数の形式をとるものである。このアセンブラテンプレ
ート関数の内容を、即ちアセンブラコードを決定するた
めの情報等を、定義したものをアセンブラテンプレート
という。つまりアセンブラテンプレートは、アセンブラ
テンプレート関数を定義するための記述、即ちアセンブ
ラテンプレート関数の内容を特定するための記述であ
る。
するプログラムを作成するためには、DSP命令を使用
する処理の部分をアセンブラ言語で記述しなければなら
ない。従来のプログラム変換装置には、高級言語のソー
スプログラム中においてアセンブラコードにより実現さ
れる処理を記述するために、アセンブラテンプレート関
数に対する呼出記述を用いることができるようにしたも
のがある。例えばGAIOテクノロジ社のコンパイラで
ある。アセンブラテンプレート関数とは、アセンブラコ
ードを決定するために用いられる記述であり、形式的に
関数の形式をとるものである。このアセンブラテンプレ
ート関数の内容を、即ちアセンブラコードを決定するた
めの情報等を、定義したものをアセンブラテンプレート
という。つまりアセンブラテンプレートは、アセンブラ
テンプレート関数を定義するための記述、即ちアセンブ
ラテンプレート関数の内容を特定するための記述であ
る。
【0005】このようなプログラム変換装置は、ソース
プログラム中にアセンブラテンプレート関数の呼出記述
が記述されている場合には、その呼出記述における引数
及び戻り値に即して、アセンブラテンプレート関数の内
容となるアセンブラコードを決定し、この決定したアセ
ンブラコードをそのアセンブラテンプレート関数の呼出
記述の部分の翻訳結果とする。即ち、このプログラム変
換装置により、アセンブラテンプレート関数の呼出記述
は、サブルーチンを呼び出す命令を含むアセンブラコー
ドに翻訳されるのではなく、その位置に直接置かれるア
センブラコードに翻訳される。
プログラム中にアセンブラテンプレート関数の呼出記述
が記述されている場合には、その呼出記述における引数
及び戻り値に即して、アセンブラテンプレート関数の内
容となるアセンブラコードを決定し、この決定したアセ
ンブラコードをそのアセンブラテンプレート関数の呼出
記述の部分の翻訳結果とする。即ち、このプログラム変
換装置により、アセンブラテンプレート関数の呼出記述
は、サブルーチンを呼び出す命令を含むアセンブラコー
ドに翻訳されるのではなく、その位置に直接置かれるア
センブラコードに翻訳される。
【0006】図10は、従来のアセンブラテンプレート
の内容例を示す図である。同図に示すようにアセンブラ
テンプレートの内容は、アセンブラテンプレート関数の
定義であり、各行の意味は以下の通りである。「asm
_template」はアセンブラテンプレートである
ことを表す。「fir」は、アセンブラテンプレート関
数の関数名を表す。なお、1つの関数名で特定されるア
センブラテンプレート関数の定義記述は1つのみであ
る。即ち、同一関数名で2以上のアセンブラテンプレー
ト関数の定義を行うことはできない。
の内容例を示す図である。同図に示すようにアセンブラ
テンプレートの内容は、アセンブラテンプレート関数の
定義であり、各行の意味は以下の通りである。「asm
_template」はアセンブラテンプレートである
ことを表す。「fir」は、アセンブラテンプレート関
数の関数名を表す。なお、1つの関数名で特定されるア
センブラテンプレート関数の定義記述は1つのみであ
る。即ち、同一関数名で2以上のアセンブラテンプレー
ト関数の定義を行うことはできない。
【0007】「$p1={p0,p1,p2,p3}」
は、「$p1」という仮想レジスタがアセンブラテンプ
レート関数の第1引数を表し、「{p0,p1,p2,
p3}」が第1引数の割り当て候補のレジスタを表す。
ここで、仮想レジスタとは、レジスタに変換される変数
をいう。プログラム変換装置は、ソースプログラムの翻
訳に際して、アセンブラテンプレート関数の呼出記述に
おける第1引数に対応するものとして、割り当て候補の
レジスタうちのいずれか1つのレジスタを決定して割り
当てることになり、結果的に第1引数の示す値はその決
定した1つのレジスタに格納されることになる。
は、「$p1」という仮想レジスタがアセンブラテンプ
レート関数の第1引数を表し、「{p0,p1,p2,
p3}」が第1引数の割り当て候補のレジスタを表す。
ここで、仮想レジスタとは、レジスタに変換される変数
をいう。プログラム変換装置は、ソースプログラムの翻
訳に際して、アセンブラテンプレート関数の呼出記述に
おける第1引数に対応するものとして、割り当て候補の
レジスタうちのいずれか1つのレジスタを決定して割り
当てることになり、結果的に第1引数の示す値はその決
定した1つのレジスタに格納されることになる。
【0008】「$p2={p4,p5,p6,p7}」
は、「$p2」という仮想レジスタがアセンブラテンプ
レート関数の第2引数を表し、「{p4,p5,p6,
p7}」が第2引数の割り当て候補のレジスタを表す。
「$p3={r0,r1,r2,r3}」は、「$p
3」という仮想レジスタがアセンブラテンプレート関数
の第3引数を表し、「{r0,r1,r2,r3}」が
第3引数の割り当て候補のレジスタを表す。
は、「$p2」という仮想レジスタがアセンブラテンプ
レート関数の第2引数を表し、「{p4,p5,p6,
p7}」が第2引数の割り当て候補のレジスタを表す。
「$p3={r0,r1,r2,r3}」は、「$p
3」という仮想レジスタがアセンブラテンプレート関数
の第3引数を表し、「{r0,r1,r2,r3}」が
第3引数の割り当て候補のレジスタを表す。
【0009】「$t1={a0,a1}」は、「$t
1」という仮想レジスタがアセンブラテンプレート関数
内で使用される1番目の一時資源を表し、「{a0,a
1}」が一時資源への割り当て候補のレジスタを表す。
なお一時資源は、一時的に使用するレジスタを意味す
る。「ret={$t1}」は、アセンブラテンプレー
ト関数内で使用される1番目の一時資源が関数の戻り値
とされることを表す。
1」という仮想レジスタがアセンブラテンプレート関数
内で使用される1番目の一時資源を表し、「{a0,a
1}」が一時資源への割り当て候補のレジスタを表す。
なお一時資源は、一時的に使用するレジスタを意味す
る。「ret={$t1}」は、アセンブラテンプレー
ト関数内で使用される1番目の一時資源が関数の戻り値
とされることを表す。
【0010】「kill={$p1,$p2}」は、第
1引数、第2引数の値が関数内で変更されることを表
す。「code={・・・}」は、アセンブラテンプレ
ート関数の定義の本体的な記述であり、引数及び一時資
源を用いて表されたアセンブラコードである。「rep
n $p3」は第3引数の回数だけ次の命令を繰り返す
という命令であり、「mac $t1,m($p1,
1),m($p2,1)」は第1引数であるアドレス値
の指し示すメモリの内容と第2引数であるアドレス値の
指し示すメモリの内容との積と一時資源との和を一時資
源に格納した後に、第1引数であるアドレス値及び第2
引数であるアドレス値をそれぞれ増加する命令である。
1引数、第2引数の値が関数内で変更されることを表
す。「code={・・・}」は、アセンブラテンプレ
ート関数の定義の本体的な記述であり、引数及び一時資
源を用いて表されたアセンブラコードである。「rep
n $p3」は第3引数の回数だけ次の命令を繰り返す
という命令であり、「mac $t1,m($p1,
1),m($p2,1)」は第1引数であるアドレス値
の指し示すメモリの内容と第2引数であるアドレス値の
指し示すメモリの内容との積と一時資源との和を一時資
源に格納した後に、第1引数であるアドレス値及び第2
引数であるアドレス値をそれぞれ増加する命令である。
【0011】即ち、この「fir」という関数名のアセ
ンブラテンプレート関数は、第1引数であるアドレスか
ら順にメモリに格納されている数値列と、第2引数であ
るアドレスから順にメモリに格納されている数値列との
内積を第3引数で示される要素数分だけ計算した結果の
総和を戻り値として返却する関数である。図6は、アセ
ンブラテンプレート関数の呼出記述を含むソースプログ
ラムの例を示す図である。
ンブラテンプレート関数は、第1引数であるアドレスか
ら順にメモリに格納されている数値列と、第2引数であ
るアドレスから順にメモリに格納されている数値列との
内積を第3引数で示される要素数分だけ計算した結果の
総和を戻り値として返却する関数である。図6は、アセ
ンブラテンプレート関数の呼出記述を含むソースプログ
ラムの例を示す図である。
【0012】同図に示すソースプログラムは、C言語で
記述されたものであり、「fir(v1,v2,n)」
及び「fir(v3,v4,10)」が上述した「fi
r」という関数名のアセンブラテンプレート関数の呼出
記述である。以下、図9を用いて、従来のプログラム変
換装置900について説明する。図9は、従来のプログ
ラム変換装置900の機能ブロック図である。
記述されたものであり、「fir(v1,v2,n)」
及び「fir(v3,v4,10)」が上述した「fi
r」という関数名のアセンブラテンプレート関数の呼出
記述である。以下、図9を用いて、従来のプログラム変
換装置900について説明する。図9は、従来のプログ
ラム変換装置900の機能ブロック図である。
【0013】なお、同図中にはプログラム変換装置の入
力ファイルの格納先であるソースファイル格納部901
及びアセンブラテンプレートファイル格納部902と、
出力ファイルの格納先である出力ファイル格納部907
をも示している。プログラム変換装置900は、ソース
プログラムをアセンブラコードに変換するもので、ハー
ドウェア的にはCPU、メモリ、ハードディスク装置等
を備えるパーソナルコンピュータで構成され、機能的に
はアセンブラテンプレート記憶部903と、制御部90
4と、アセンブラ関数呼出翻訳部905と、一般命令翻
訳部906とを備える。制御部904、アセンブラ関数
呼出翻訳部905及び一般命令翻訳部906は、メモリ
に格納された制御プログラムがCPUにより実行される
ことによりその機能が実現されるものである。
力ファイルの格納先であるソースファイル格納部901
及びアセンブラテンプレートファイル格納部902と、
出力ファイルの格納先である出力ファイル格納部907
をも示している。プログラム変換装置900は、ソース
プログラムをアセンブラコードに変換するもので、ハー
ドウェア的にはCPU、メモリ、ハードディスク装置等
を備えるパーソナルコンピュータで構成され、機能的に
はアセンブラテンプレート記憶部903と、制御部90
4と、アセンブラ関数呼出翻訳部905と、一般命令翻
訳部906とを備える。制御部904、アセンブラ関数
呼出翻訳部905及び一般命令翻訳部906は、メモリ
に格納された制御プログラムがCPUにより実行される
ことによりその機能が実現されるものである。
【0014】ここで、ソースファイル格納部901は、
アセンブラテンプレート関数の呼出記述を含むソースプ
ログラムを格納している記憶装置である。アセンブラテ
ンプレートファイル格納部902は、ソースプログラム
から呼び出されるアセンブラテンプレート関数の定義で
あるアセンブラテンプレートが記述されたアセンブラテ
ンプレートファイルを格納している記憶装置である。
アセンブラテンプレート関数の呼出記述を含むソースプ
ログラムを格納している記憶装置である。アセンブラテ
ンプレートファイル格納部902は、ソースプログラム
から呼び出されるアセンブラテンプレート関数の定義で
あるアセンブラテンプレートが記述されたアセンブラテ
ンプレートファイルを格納している記憶装置である。
【0015】アセンブラテンプレート記憶部903は、
アセンブラテンプレートファイル格納部902に格納さ
れたアセンブラテンプレートファイルからアセンブラテ
ンプレートを読み出して記憶するメモリ領域である。制
御部904は、ソースファイル格納部901からソース
プログラムを読み出し、ソースプログラムの各文に逐次
着目し、着目した文が、関数の呼出記述を意味する文で
ありかつその関数の名前がアセンブラテンプレート記憶
部903に記憶されていた場合には、アセンブラ関数呼
出翻訳部905を起動し、その他の場合には、一般命令
翻訳部906を起動する。ここで起動とは、起動対象に
機能処理の実行を開始させることをいう。
アセンブラテンプレートファイル格納部902に格納さ
れたアセンブラテンプレートファイルからアセンブラテ
ンプレートを読み出して記憶するメモリ領域である。制
御部904は、ソースファイル格納部901からソース
プログラムを読み出し、ソースプログラムの各文に逐次
着目し、着目した文が、関数の呼出記述を意味する文で
ありかつその関数の名前がアセンブラテンプレート記憶
部903に記憶されていた場合には、アセンブラ関数呼
出翻訳部905を起動し、その他の場合には、一般命令
翻訳部906を起動する。ここで起動とは、起動対象に
機能処理の実行を開始させることをいう。
【0016】アセンブラ関数呼出翻訳部905は、制御
部904により起動され、関数呼出記述で呼び出される
アセンブラテンプレート関数に対応する定義をアセンブ
ラテンプレート記憶部903から得て、その本体的な記
述である「code={・・・}」において使用されて
いる「$p1」、「$p2」、「$p3」、「$t1」
に対して、割り当て候補のレジスタのうちのいずれかを
割り当てて引数及び戻り値の設定のコードとレジスタの
退避及び復元のためのコードとを付加することによりア
センブラコードを生成して、生成したアセンブラコード
を出力ファイル907に出力する。
部904により起動され、関数呼出記述で呼び出される
アセンブラテンプレート関数に対応する定義をアセンブ
ラテンプレート記憶部903から得て、その本体的な記
述である「code={・・・}」において使用されて
いる「$p1」、「$p2」、「$p3」、「$t1」
に対して、割り当て候補のレジスタのうちのいずれかを
割り当てて引数及び戻り値の設定のコードとレジスタの
退避及び復元のためのコードとを付加することによりア
センブラコードを生成して、生成したアセンブラコード
を出力ファイル907に出力する。
【0017】一般命令翻訳部906は、制御部904に
より起動され、一般命令翻訳処理を行なう。即ち、一般
命令翻訳部906は、アセンブラテンプレート関数の呼
出記述を含む文以外の文を、文の内容に応じてアセンブ
ラコードに変換して出力ファイル格納部907に出力す
る。なお、プログラム変換装置900は、ソースファイ
ル格納部901及びアセンブラテンプレートファイル格
納部902からソースプログラム及びアセンブラテンプ
レートを読み出した後は、これらを処理効率のよい所定
の内部形式に変換し、これらをアセンブラコードへ翻訳
する処理を実行する。
より起動され、一般命令翻訳処理を行なう。即ち、一般
命令翻訳部906は、アセンブラテンプレート関数の呼
出記述を含む文以外の文を、文の内容に応じてアセンブ
ラコードに変換して出力ファイル格納部907に出力す
る。なお、プログラム変換装置900は、ソースファイ
ル格納部901及びアセンブラテンプレートファイル格
納部902からソースプログラム及びアセンブラテンプ
レートを読み出した後は、これらを処理効率のよい所定
の内部形式に変換し、これらをアセンブラコードへ翻訳
する処理を実行する。
【0018】図11は、図6に示したソースプログラム
を従来のプログラム変換装置900により変換した結果
として得られるアセンブラコードを示す図である。な
お、アセンブラテンプレートファイル格納部902に、
図10に示したアセンブラテンプレートが格納されてい
た場合に、図11に示すアセンブラコードが得られるこ
とになる。
を従来のプログラム変換装置900により変換した結果
として得られるアセンブラコードを示す図である。な
お、アセンブラテンプレートファイル格納部902に、
図10に示したアセンブラテンプレートが格納されてい
た場合に、図11に示すアセンブラコードが得られるこ
とになる。
【0019】図6に示したソースプログラムにおいて、
アセンブラテンプレート関数の1回目の使用については
全ての引数を変数とし、2回目の使用については第1引
数と第2引数とを変数とし第3引数を定数「10」とし
ている。しかし、このソースプログラムの変換結果とし
て生成されたアセンブラコードは、アセンブラテンプレ
ート関数の引数に変数を用いられたか定数を用いられた
かに関係なく、図11に示すように1回目の使用に相当
する部分も2回目の使用に相当する部分も形式的には同
じ命令列から構成されるものとなる。
アセンブラテンプレート関数の1回目の使用については
全ての引数を変数とし、2回目の使用については第1引
数と第2引数とを変数とし第3引数を定数「10」とし
ている。しかし、このソースプログラムの変換結果とし
て生成されたアセンブラコードは、アセンブラテンプレ
ート関数の引数に変数を用いられたか定数を用いられた
かに関係なく、図11に示すように1回目の使用に相当
する部分も2回目の使用に相当する部分も形式的には同
じ命令列から構成されるものとなる。
【0020】このように、従来のプログラム変換装置
は、同一のアセンブラテンプレート関数を使用する部分
についてはいずれも形式的に同じ命令列から構成される
アセンブラコードに変換する。
は、同一のアセンブラテンプレート関数を使用する部分
についてはいずれも形式的に同じ命令列から構成される
アセンブラコードに変換する。
【0021】
【発明が解決しようとする課題】上述した従来のプログ
ラム変換装置は、ソースプログラムを最適なアセンブラ
コードに変換する、即ち最適なアセンブラコードを生成
するという観点からは、以下に示す問題がある。プロセ
ッサが実行可能な命令セットには、処理対象がレジスタ
の内容であるか定数値であるかによって異なる命令が用
意されている場合があり、効果的に各命令を使い分ける
ことにより最適なアセンブラコードの生成は可能にな
る。このような異なる命令が用意されている場合におい
て、例えば定数を処理対象とする命令が利用できるにも
関わらず、定数をレジスタに格納した後にレジスタを処
理対象とする命令を利用したならば、最適なアセンブラ
コードの生成を行ったとはいえない。
ラム変換装置は、ソースプログラムを最適なアセンブラ
コードに変換する、即ち最適なアセンブラコードを生成
するという観点からは、以下に示す問題がある。プロセ
ッサが実行可能な命令セットには、処理対象がレジスタ
の内容であるか定数値であるかによって異なる命令が用
意されている場合があり、効果的に各命令を使い分ける
ことにより最適なアセンブラコードの生成は可能にな
る。このような異なる命令が用意されている場合におい
て、例えば定数を処理対象とする命令が利用できるにも
関わらず、定数をレジスタに格納した後にレジスタを処
理対象とする命令を利用したならば、最適なアセンブラ
コードの生成を行ったとはいえない。
【0022】従来のプログラム変換装置によれば、アセ
ンブラテンプレート関数の呼出記述は、どのような引数
を用いた記述であっても、形式的に同じ命令列から構成
されるアセンブラコードに変換されてしまい、引数が変
数であるか定数であるかに応じて最適なアセンブラコー
ドに変換されるのではない。また、機能的に同様な処理
を行なうもので関数名が異なる複数のアセンブラテンプ
レート関数を用意しておき、引数が変数であるか定数で
あるかといった状況に応じて、ソースプログラムの作成
者がどのアセンブラテンプレート関数を使用するかを選
択して関数の呼出記述を行なう方法が考えられるが、作
成者に選択の負担を課すため生産性の低下を招く上、作
成者が必ずしも最適な選択を行うとは限らないという問
題がある。
ンブラテンプレート関数の呼出記述は、どのような引数
を用いた記述であっても、形式的に同じ命令列から構成
されるアセンブラコードに変換されてしまい、引数が変
数であるか定数であるかに応じて最適なアセンブラコー
ドに変換されるのではない。また、機能的に同様な処理
を行なうもので関数名が異なる複数のアセンブラテンプ
レート関数を用意しておき、引数が変数であるか定数で
あるかといった状況に応じて、ソースプログラムの作成
者がどのアセンブラテンプレート関数を使用するかを選
択して関数の呼出記述を行なう方法が考えられるが、作
成者に選択の負担を課すため生産性の低下を招く上、作
成者が必ずしも最適な選択を行うとは限らないという問
題がある。
【0023】そこで、本発明は、かかる問題点に鑑みて
なされたものであり、アセンブラテンプレート関数の呼
出記述における引数が変数であるか定数であるか等の呼
出記述の内容に応じてアセンブラテンプレート関数の呼
出記述を最適なアセンブラコードに変換するプログラム
変換装置を提供することを目的とする。更に、本発明
は、アセンブラテンプレート関数の呼出記述の内容に応
じて最適化のために命令を使い分ける他に、コードサイ
ズの面や実行サイクル数の面のうちどの面について最適
化を図るかという設定に応じて命令を使い分けることに
より、アセンブラテンプレート関数の呼出記述を最適な
アセンブラコードに変換するプログラム変換装置を提供
することをも目的とする。
なされたものであり、アセンブラテンプレート関数の呼
出記述における引数が変数であるか定数であるか等の呼
出記述の内容に応じてアセンブラテンプレート関数の呼
出記述を最適なアセンブラコードに変換するプログラム
変換装置を提供することを目的とする。更に、本発明
は、アセンブラテンプレート関数の呼出記述の内容に応
じて最適化のために命令を使い分ける他に、コードサイ
ズの面や実行サイクル数の面のうちどの面について最適
化を図るかという設定に応じて命令を使い分けることに
より、アセンブラテンプレート関数の呼出記述を最適な
アセンブラコードに変換するプログラム変換装置を提供
することをも目的とする。
【0024】
【課題を解決するための手段】上記目的を達成するため
に、本発明に係るプログラム変換装置は、高級言語で記
述されたソースプログラムをアセンブラコードに変換す
るプログラム変換装置であって、アセンブラテンプレー
ト関数についての複数の定義を記憶するテンプレート記
憶手段と、前記ソースプログラムにおけるアセンブラテ
ンプレート関数の呼出記述を検出する呼出検出手段と、
前記呼出検出手段により前記呼出記述が検出された場合
に、当該呼出記述により呼び出されるアセンブラテンプ
レート関数についての複数の定義のうち、最適な1つを
選択する選択手段と、前記呼出検出手段により検出され
た前記呼出記述を、前記選択手段により選択されたアセ
ンブラテンプレート関数の定義に基づいてアセンブラコ
ードに変換する変換手段とを備えることを特徴とする。
に、本発明に係るプログラム変換装置は、高級言語で記
述されたソースプログラムをアセンブラコードに変換す
るプログラム変換装置であって、アセンブラテンプレー
ト関数についての複数の定義を記憶するテンプレート記
憶手段と、前記ソースプログラムにおけるアセンブラテ
ンプレート関数の呼出記述を検出する呼出検出手段と、
前記呼出検出手段により前記呼出記述が検出された場合
に、当該呼出記述により呼び出されるアセンブラテンプ
レート関数についての複数の定義のうち、最適な1つを
選択する選択手段と、前記呼出検出手段により検出され
た前記呼出記述を、前記選択手段により選択されたアセ
ンブラテンプレート関数の定義に基づいてアセンブラコ
ードに変換する変換手段とを備えることを特徴とする。
【0025】ここで、アセンブラテンプレート関数の定
義とは、アセンブラコードを特定する内容の情報をい
う。これにより、アセンブラテンプレート関数について
の複数の定義のうちの1つが選択されるので、このプロ
グラム変換装置を利用する場合に、1つのアセンブラテ
ンプレート関数に対して複数の定義を用意しておけば、
ソースプログラム中のアセンブラテンプレート関数の呼
出記述を、その記述内容等に応じて最適なアセンブラコ
ードに変換することや、コードサイズ又は実行サイクル
数の面から最適なアセンブラコードに変換することが可
能になる。例えば、ソースプログラム中のアセンブラテ
ンプレート関数の呼出記述における引数が変数か定数か
等に応じ、又は、変換をコードサイズ優先で行うか実行
サイクル数優先で行うか等の設定に応じて、アセンブラ
テンプレート関数の呼出記述を、コードサイズの小さい
又は実行サイクル数の少ないといった最適なアセンブラ
コードに変換することが可能になる。
義とは、アセンブラコードを特定する内容の情報をい
う。これにより、アセンブラテンプレート関数について
の複数の定義のうちの1つが選択されるので、このプロ
グラム変換装置を利用する場合に、1つのアセンブラテ
ンプレート関数に対して複数の定義を用意しておけば、
ソースプログラム中のアセンブラテンプレート関数の呼
出記述を、その記述内容等に応じて最適なアセンブラコ
ードに変換することや、コードサイズ又は実行サイクル
数の面から最適なアセンブラコードに変換することが可
能になる。例えば、ソースプログラム中のアセンブラテ
ンプレート関数の呼出記述における引数が変数か定数か
等に応じ、又は、変換をコードサイズ優先で行うか実行
サイクル数優先で行うか等の設定に応じて、アセンブラ
テンプレート関数の呼出記述を、コードサイズの小さい
又は実行サイクル数の少ないといった最適なアセンブラ
コードに変換することが可能になる。
【0026】
【発明の実施の形態】以下、本発明の実地の形態に係る
プログラム変換装置について、図面を用いて説明する。 <構成>図1は、本発明の実施の形態に係るプログラム
変換装置100の機能ブロック図である。
プログラム変換装置について、図面を用いて説明する。 <構成>図1は、本発明の実施の形態に係るプログラム
変換装置100の機能ブロック図である。
【0027】なお、図1にはソースファイル格納部10
1、アセンブラテンプレートファイル格納部102、出
力ファイル格納部108も併せて記載している。ここ
で、ソースファイル格納部101は、アセンブラテンプ
レート関数の呼出記述を含むC言語のソースプログラム
を格納している記憶装置である。アセンブラテンプレー
トファイル格納部102は、アセンブラテンプレート関
数の定義であるアセンブラテンプレートを複数記述した
アセンブラテンプレートファイルを格納している記憶装
置である。
1、アセンブラテンプレートファイル格納部102、出
力ファイル格納部108も併せて記載している。ここ
で、ソースファイル格納部101は、アセンブラテンプ
レート関数の呼出記述を含むC言語のソースプログラム
を格納している記憶装置である。アセンブラテンプレー
トファイル格納部102は、アセンブラテンプレート関
数の定義であるアセンブラテンプレートを複数記述した
アセンブラテンプレートファイルを格納している記憶装
置である。
【0028】また、出力ファイル格納部108は、プロ
グラム変換装置100により、ソースファイル格納部1
01に格納されたソースプログラムの変換結果として生
成されるアセンブラコードを格納するための記憶装置で
ある。プログラム変換装置100は、CPU、メモリ、
ハードディスク装置等を備えるパーソナルコンピュータ
で構成され、メモリに格納された制御プログラムがCP
Uにより実行されることによりソースプログラムをアセ
ンブラコードに変換する機能を実現するいわゆるコンパ
イラであり、機能的には、アセンブラテンプレート記憶
部103、制御部104、アセンブラテンプレート選択
部105、一般命令翻訳部106、アセンブラ関数呼出
翻訳部107から構成される。なお、ソースプログラム
をアセンブラコードに変換するとは、ソースプログラム
に基づいて、そのソースプログラムに記述された処理内
容をプロセッサに実行させるためのアセンブラコードを
生成することをいう。
グラム変換装置100により、ソースファイル格納部1
01に格納されたソースプログラムの変換結果として生
成されるアセンブラコードを格納するための記憶装置で
ある。プログラム変換装置100は、CPU、メモリ、
ハードディスク装置等を備えるパーソナルコンピュータ
で構成され、メモリに格納された制御プログラムがCP
Uにより実行されることによりソースプログラムをアセ
ンブラコードに変換する機能を実現するいわゆるコンパ
イラであり、機能的には、アセンブラテンプレート記憶
部103、制御部104、アセンブラテンプレート選択
部105、一般命令翻訳部106、アセンブラ関数呼出
翻訳部107から構成される。なお、ソースプログラム
をアセンブラコードに変換するとは、ソースプログラム
に基づいて、そのソースプログラムに記述された処理内
容をプロセッサに実行させるためのアセンブラコードを
生成することをいう。
【0029】アセンブラテンプレート記憶部103は、
アセンブラテンプレートファイル格納部102からアセ
ンブラテンプレートを読み出して記憶するメモリ領域で
あり、従来のプログラム変換装置900におけるアセン
ブラテンプレート記憶部903と同等である。制御部1
04は、ソースファイル格納部101からソースプログ
ラムを読み出し、ソースプログラムの各文に逐次着目
し、着目した文が、関数の呼出記述を意味する文であり
かつその関数の名前がアセンブラテンプレート記憶部1
03に記憶されていた場合には、アセンブラ関数呼出翻
訳部107を起動し、その他の場合には、一般命令翻訳
部106を起動する。なお、制御部104は、従来のプ
ログラム変換装置900における制御部904と同等で
ある。
アセンブラテンプレートファイル格納部102からアセ
ンブラテンプレートを読み出して記憶するメモリ領域で
あり、従来のプログラム変換装置900におけるアセン
ブラテンプレート記憶部903と同等である。制御部1
04は、ソースファイル格納部101からソースプログ
ラムを読み出し、ソースプログラムの各文に逐次着目
し、着目した文が、関数の呼出記述を意味する文であり
かつその関数の名前がアセンブラテンプレート記憶部1
03に記憶されていた場合には、アセンブラ関数呼出翻
訳部107を起動し、その他の場合には、一般命令翻訳
部106を起動する。なお、制御部104は、従来のプ
ログラム変換装置900における制御部904と同等で
ある。
【0030】アセンブラ関数呼出翻訳部905は、制御
部904により起動され、アセンブラテンプレート選択
部105を起動して、関数の呼出記述で呼び出されるア
センブラテンプレート関数に対応する定義をアセンブラ
テンプレート選択部105から受け取り、アセンブラテ
ンプレート関数の定義の本体的な記述において使用され
ている仮想レジスタに対して、割り当て候補のレジスタ
のうちのいずれかを割り当てて引数及び戻り値の設定の
コードとレジスタの退避及び復元のためのコードとを付
加することによりアセンブラコードを生成して、生成し
たアセンブラコードを出力ファイル格納部108に出力
する。
部904により起動され、アセンブラテンプレート選択
部105を起動して、関数の呼出記述で呼び出されるア
センブラテンプレート関数に対応する定義をアセンブラ
テンプレート選択部105から受け取り、アセンブラテ
ンプレート関数の定義の本体的な記述において使用され
ている仮想レジスタに対して、割り当て候補のレジスタ
のうちのいずれかを割り当てて引数及び戻り値の設定の
コードとレジスタの退避及び復元のためのコードとを付
加することによりアセンブラコードを生成して、生成し
たアセンブラコードを出力ファイル格納部108に出力
する。
【0031】アセンブラテンプレート選択部105は、
アセンブラ関数呼出翻訳部107により起動され、関数
呼出記述で呼び出されるアセンブラテンプレート関数に
対応する複数の定義、即ち複数のアセンブラテンプレー
トを、アセンブラテンプレート記憶部103から獲得
し、それぞれのアセンブラテンプレートのコストを計算
し、最小のコストのアセンブラテンプレートを選択し、
アセンブラ関数呼出翻訳部107に渡す。なお、コスト
とは、アセンブラテンプレートの選択に用いるための指
標値をいい、コストが低いことは、アセンブラテンプレ
ート関数の翻訳結果であるアセンブラコードのコードサ
イズが小さい又はそのアセンブラコードの実行サイクル
数が短いものであることを表す。
アセンブラ関数呼出翻訳部107により起動され、関数
呼出記述で呼び出されるアセンブラテンプレート関数に
対応する複数の定義、即ち複数のアセンブラテンプレー
トを、アセンブラテンプレート記憶部103から獲得
し、それぞれのアセンブラテンプレートのコストを計算
し、最小のコストのアセンブラテンプレートを選択し、
アセンブラ関数呼出翻訳部107に渡す。なお、コスト
とは、アセンブラテンプレートの選択に用いるための指
標値をいい、コストが低いことは、アセンブラテンプレ
ート関数の翻訳結果であるアセンブラコードのコードサ
イズが小さい又はそのアセンブラコードの実行サイクル
数が短いものであることを表す。
【0032】一般命令翻訳部106は、制御部104に
より起動され、アセンブラテンプレート関数の呼出記述
を含む文以外の文を、文の内容に応じてアセンブラコー
ドに変換して出力ファイル格納部108に出力する。な
お、一般命令翻訳部106は、従来のプログラム変換装
置900における一般命令翻訳部906と同等である。
より起動され、アセンブラテンプレート関数の呼出記述
を含む文以外の文を、文の内容に応じてアセンブラコー
ドに変換して出力ファイル格納部108に出力する。な
お、一般命令翻訳部106は、従来のプログラム変換装
置900における一般命令翻訳部906と同等である。
【0033】なお、プログラム変換装置100は、ソー
スファイル格納部101及びアセンブラテンプレートフ
ァイル格納部102からソースプログラム及びアセンブ
ラテンプレートを読み出した後は、一般のコンパイラが
ソースプログラムを内部形式に変換して翻訳処理するの
と同様に、ソースプログラム及びアセンブラテンプレー
トを処理効率のよい所定の内部形式に変換しておき、こ
れらをアセンブラコードへ翻訳する処理を実行する。 <データ内容>以下、アセンブラテンプレートファイル
格納部102に格納されている複数のアセンブラテンプ
レートについて説明する。
スファイル格納部101及びアセンブラテンプレートフ
ァイル格納部102からソースプログラム及びアセンブ
ラテンプレートを読み出した後は、一般のコンパイラが
ソースプログラムを内部形式に変換して翻訳処理するの
と同様に、ソースプログラム及びアセンブラテンプレー
トを処理効率のよい所定の内部形式に変換しておき、こ
れらをアセンブラコードへ翻訳する処理を実行する。 <データ内容>以下、アセンブラテンプレートファイル
格納部102に格納されている複数のアセンブラテンプ
レートについて説明する。
【0034】図7は、複数のアセンブラテンプレートの
内容例を示す図である。同図の例では、同一の関数名の
2つのアセンブラテンプレート関数の定義記述である2
つのアセンブラテンプレートを示している。まず、同図
中のテンプレート1、即ち1つ目のアセンブラテンプレ
ート関数の定義について説明する。
内容例を示す図である。同図の例では、同一の関数名の
2つのアセンブラテンプレート関数の定義記述である2
つのアセンブラテンプレートを示している。まず、同図
中のテンプレート1、即ち1つ目のアセンブラテンプレ
ート関数の定義について説明する。
【0035】「fir」は、アセンブラテンプレート関
数の関数名を表す。「$p1={p0,p1,p2,p
3}」は、「$p1」という仮想レジスタがアセンブラ
テンプレート関数の第1引数を表し、「{p0,p1,
p2,p3}」が第1引数の割り当て候補のレジスタを
表す。「$p2={p4,p5,p6,p7}」は、
「$p2」という仮想レジスタがアセンブラテンプレー
ト関数の第2引数を表し、「{p4,p5,p6,p
7}」が第2引数の割り当て候補のレジスタを表す。
数の関数名を表す。「$p1={p0,p1,p2,p
3}」は、「$p1」という仮想レジスタがアセンブラ
テンプレート関数の第1引数を表し、「{p0,p1,
p2,p3}」が第1引数の割り当て候補のレジスタを
表す。「$p2={p4,p5,p6,p7}」は、
「$p2」という仮想レジスタがアセンブラテンプレー
ト関数の第2引数を表し、「{p4,p5,p6,p
7}」が第2引数の割り当て候補のレジスタを表す。
【0036】「$p3={r0,r1,r2,r3}」
は、「$p3」という仮想レジスタがアセンブラテンプ
レート関数の第3引数を表し、「{r0,r1,r2,
r3}」が第3引数の割り当て候補のレジスタを表す。
「$t1={a0,a1}」は、「$t1」という仮想
レジスタがアセンブラテンプレート関数内で使用される
1番目の一時資源を表し、「{a0,a1}」が一時資
源への割り当て候補のレジスタを表す。
は、「$p3」という仮想レジスタがアセンブラテンプ
レート関数の第3引数を表し、「{r0,r1,r2,
r3}」が第3引数の割り当て候補のレジスタを表す。
「$t1={a0,a1}」は、「$t1」という仮想
レジスタがアセンブラテンプレート関数内で使用される
1番目の一時資源を表し、「{a0,a1}」が一時資
源への割り当て候補のレジスタを表す。
【0037】「ret={$t1}」は、アセンブラテ
ンプレート関数内で使用される1番目の一時資源が関数
の戻り値とされることを表す。「kill={$p1,
$p2}」は、第1引数、第2引数の値が関数内で変更
されることを表す。「code={・・・}」の内容と
して記述された「repn $p3」及び「mac $
t1,m($p1,1),m($p2,1)」は、アセ
ンブラテンプレート関数の定義の本体的な記述であり、
「$p1」、「$p2」、「$p3」、「$t1」とい
う仮想レジスタを用いて表されたアセンブラコードであ
る。
ンプレート関数内で使用される1番目の一時資源が関数
の戻り値とされることを表す。「kill={$p1,
$p2}」は、第1引数、第2引数の値が関数内で変更
されることを表す。「code={・・・}」の内容と
して記述された「repn $p3」及び「mac $
t1,m($p1,1),m($p2,1)」は、アセ
ンブラテンプレート関数の定義の本体的な記述であり、
「$p1」、「$p2」、「$p3」、「$t1」とい
う仮想レジスタを用いて表されたアセンブラコードであ
る。
【0038】「cost=2]は、コストが2であるこ
とを表す。次に、同図中のテンプレート2、即ち関数名
「fir」の2つ目のアセンブラテンプレート関数の定
義について、テンプレート1と異なる点についてのみ説
明する。「$p3={imm}」は、「$p3」という
仮想レジスタがアセンブラテンプレート関数の第3引数
を表し、「{imm}」が第3引数の割り当て候補は定
数値であることを表す。
とを表す。次に、同図中のテンプレート2、即ち関数名
「fir」の2つ目のアセンブラテンプレート関数の定
義について、テンプレート1と異なる点についてのみ説
明する。「$p3={imm}」は、「$p3」という
仮想レジスタがアセンブラテンプレート関数の第3引数
を表し、「{imm}」が第3引数の割り当て候補は定
数値であることを表す。
【0039】「code={・・・}」の内容として記
述された「macr $sp3,$t1,m($p1,
1),m($p2,1)」は、アセンブラテンプレート
関数の定義の本体的な記述であり、「$p1」、「$p
2」、「$p3」、「$t1」という仮想レジスタを用
いて表されたアセンブラコードである。「cost=
1]は、コストが1であることを表す。 <動作>以下、上述の構成を備えるプログラム変換装置
100の動作について、図6に示したC言語で記述され
たソースプログラムの変換を例として、説明する。
述された「macr $sp3,$t1,m($p1,
1),m($p2,1)」は、アセンブラテンプレート
関数の定義の本体的な記述であり、「$p1」、「$p
2」、「$p3」、「$t1」という仮想レジスタを用
いて表されたアセンブラコードである。「cost=
1]は、コストが1であることを表す。 <動作>以下、上述の構成を備えるプログラム変換装置
100の動作について、図6に示したC言語で記述され
たソースプログラムの変換を例として、説明する。
【0040】前提として、この変換対象となる図6に示
したソースプログラムがソースファイル格納部101に
格納されているものとし、図7に示した2つのアセンブ
ラテンプレート関数の定義、即ち2つのアセンブラテン
プレートが、アセンブラテンプレートファイル格納部1
02に格納されているものとする。図2は、プログラム
変換装置100の動作を示すフローチャートである。
したソースプログラムがソースファイル格納部101に
格納されているものとし、図7に示した2つのアセンブ
ラテンプレート関数の定義、即ち2つのアセンブラテン
プレートが、アセンブラテンプレートファイル格納部1
02に格納されているものとする。図2は、プログラム
変換装置100の動作を示すフローチャートである。
【0041】まず、プログラム変換装置100は、アセ
ンブラテンプレートファイル格納部102に格納されて
いる全てのアセンブラテンプレートを読み出してプログ
ラム変換装置の内部形式に変換して、アセンブラテンプ
レート記憶部103に格納する(ステップS201)。
アセンブラテンプレートを読み出した後に、プログラム
変換装置100は、ソースファイル格納部101に格納
されているソースプログラムを読み出してメモリに格納
する(ステップS202)。
ンブラテンプレートファイル格納部102に格納されて
いる全てのアセンブラテンプレートを読み出してプログ
ラム変換装置の内部形式に変換して、アセンブラテンプ
レート記憶部103に格納する(ステップS201)。
アセンブラテンプレートを読み出した後に、プログラム
変換装置100は、ソースファイル格納部101に格納
されているソースプログラムを読み出してメモリに格納
する(ステップS202)。
【0042】ソースプログラムがメモリに格納された後
に、制御部104は、ソースプログラム中の各文に逐次
着目して、その内容に応じて翻訳処理を行う(ステップ
S203〜S208)。即ち、制御部104は、ソース
プログラムの1文に着目し(ステップS203)、この
文が関数の呼出記述であるかを判断し(ステップS20
4)、関数の呼出記述である場合には次にアセンブラテ
ンプレート記憶部103にその呼び出す関数名が記憶さ
れているかを判断し(ステップS205)、記憶されて
いるときには、アセンブラ関数呼出翻訳部107を起動
して、アセンブラ関数呼出翻訳処理を実行させる(ステ
ップS206)。なお、アセンブラ関数呼出翻訳処理に
ついては、後に詳細に説明する。
に、制御部104は、ソースプログラム中の各文に逐次
着目して、その内容に応じて翻訳処理を行う(ステップ
S203〜S208)。即ち、制御部104は、ソース
プログラムの1文に着目し(ステップS203)、この
文が関数の呼出記述であるかを判断し(ステップS20
4)、関数の呼出記述である場合には次にアセンブラテ
ンプレート記憶部103にその呼び出す関数名が記憶さ
れているかを判断し(ステップS205)、記憶されて
いるときには、アセンブラ関数呼出翻訳部107を起動
して、アセンブラ関数呼出翻訳処理を実行させる(ステ
ップS206)。なお、アセンブラ関数呼出翻訳処理に
ついては、後に詳細に説明する。
【0043】図6に示すソースプログラム中の1つの文
である「result1=fir(v1,v2,n)」
は関数の呼出記述であり、かつ関数名「fir」はアセ
ンブラテンプレート記憶部103に格納されているので
(図7参照)、アセンブラ関数呼出翻訳処理が行われる
ことになる。また、制御部104は、着目した文が(ス
テップS203)、関数の呼出記述ではない場合か(ス
テップS204)、又は呼び出される関数の名前がアセ
ンブラテンプレート記憶部103に記憶されていない場
合には(ステップS205)、一般命令翻訳部106を
起動して、文の内容に応じてアセンブラコードに変換す
る一般命令翻訳処理を実行させる(ステップS20
7)。一般命令翻訳処理については、一般のコンパイラ
における翻訳処理と同様であるので、詳細な動作説明は
省略する。
である「result1=fir(v1,v2,n)」
は関数の呼出記述であり、かつ関数名「fir」はアセ
ンブラテンプレート記憶部103に格納されているので
(図7参照)、アセンブラ関数呼出翻訳処理が行われる
ことになる。また、制御部104は、着目した文が(ス
テップS203)、関数の呼出記述ではない場合か(ス
テップS204)、又は呼び出される関数の名前がアセ
ンブラテンプレート記憶部103に記憶されていない場
合には(ステップS205)、一般命令翻訳部106を
起動して、文の内容に応じてアセンブラコードに変換す
る一般命令翻訳処理を実行させる(ステップS20
7)。一般命令翻訳処理については、一般のコンパイラ
における翻訳処理と同様であるので、詳細な動作説明は
省略する。
【0044】アセンブラ関数呼出翻訳処理(ステップS
206)又は一般命令翻訳処理(ステップS207)が
終了した後に、制御部104は、ソースプログラム中に
未だ着目していない文があるか否かを判断し(ステップ
S208)、未だ着目していない文があるならば次の文
に着目すべくステップS203の処理に戻る。図6に示
すソースプログラム中にはまだ次の文「result2
=fir(v3,v4,10)」があるのでその文に着
目することになる(ステップS203)。この文も関数
呼び出しで(ステップS204)、関数名「fir」は
アセンブラテンプレート記憶部103に格納されている
ので(ステップS205)、アセンブラ関数呼出翻訳処
理がなされることになる(ステップS206)。
206)又は一般命令翻訳処理(ステップS207)が
終了した後に、制御部104は、ソースプログラム中に
未だ着目していない文があるか否かを判断し(ステップ
S208)、未だ着目していない文があるならば次の文
に着目すべくステップS203の処理に戻る。図6に示
すソースプログラム中にはまだ次の文「result2
=fir(v3,v4,10)」があるのでその文に着
目することになる(ステップS203)。この文も関数
呼び出しで(ステップS204)、関数名「fir」は
アセンブラテンプレート記憶部103に格納されている
ので(ステップS205)、アセンブラ関数呼出翻訳処
理がなされることになる(ステップS206)。
【0045】こうして、ステップS208の判断におい
て、未だ着目していない文がない場合、即ち、全ての文
を処理し終えた場合には、プログラム変換装置100
は、ソースプログラムの変換に関する動作を終了する。 <アセンブラ関数呼出翻訳処理>以下、アセンブラ関数
呼出翻訳部107が行なうアセンブラ関数呼出翻訳処理
について説明する。
て、未だ着目していない文がない場合、即ち、全ての文
を処理し終えた場合には、プログラム変換装置100
は、ソースプログラムの変換に関する動作を終了する。 <アセンブラ関数呼出翻訳処理>以下、アセンブラ関数
呼出翻訳部107が行なうアセンブラ関数呼出翻訳処理
について説明する。
【0046】図3は、アセンブラ関数呼出翻訳部107
が行なうアセンブラ関数呼出翻訳処理の内容を示すフロ
ーチャートである。アセンブラ関数呼出翻訳部107
は、メモリに格納されているソースプログラム中のアセ
ンブラテンプレート関数の呼出記述を参照するために必
要なメモリアドレス等の情報を制御部104から起動時
に渡される。図6に示すアセンブラテンプレート関数の
呼出記述である「result1=fir(v1,v
2,n)」を参照するための情報が渡されて、アセンブ
ラ関数呼出翻訳部107が起動される場合を例にして説
明する。
が行なうアセンブラ関数呼出翻訳処理の内容を示すフロ
ーチャートである。アセンブラ関数呼出翻訳部107
は、メモリに格納されているソースプログラム中のアセ
ンブラテンプレート関数の呼出記述を参照するために必
要なメモリアドレス等の情報を制御部104から起動時
に渡される。図6に示すアセンブラテンプレート関数の
呼出記述である「result1=fir(v1,v
2,n)」を参照するための情報が渡されて、アセンブ
ラ関数呼出翻訳部107が起動される場合を例にして説
明する。
【0047】アセンブラ関数呼出翻訳部107は、起動
されると、ソースプログラムに記述された変数に割り当
てないレジスタ、即ち退避及び復元なしで使用可能なレ
ジスタを求め(ステップS301)、その退避及び復元
なしで使用可能なレジスタを示す情報とアセンブラテン
プレート関数の呼出記述を示す情報とを渡して、アセン
ブラテンプレート選択部105を起動する。なお、変数
に割り当てないレジスタがどれであるか等は従来のコン
パイラにおいてなされている手法により求めることがで
きる。
されると、ソースプログラムに記述された変数に割り当
てないレジスタ、即ち退避及び復元なしで使用可能なレ
ジスタを求め(ステップS301)、その退避及び復元
なしで使用可能なレジスタを示す情報とアセンブラテン
プレート関数の呼出記述を示す情報とを渡して、アセン
ブラテンプレート選択部105を起動する。なお、変数
に割り当てないレジスタがどれであるか等は従来のコン
パイラにおいてなされている手法により求めることがで
きる。
【0048】アセンブラテンプレート選択部105は起
動されると、複数のアセンブラテンプレートから最適な
アセンブラテンプレートを選択するアセンブラテンプレ
ート選択処理を行い、ここでは、「result1=f
ir(v1,v2,n)」について「fir」というアセ
ンブラテンプレート関数の定義として図7に示したテン
プレート1を選択しアセンブラ関数呼出翻訳部107に
通知する(ステップS302)。このアセンブラテンプ
レート選択処理については後に詳細に説明する。
動されると、複数のアセンブラテンプレートから最適な
アセンブラテンプレートを選択するアセンブラテンプレ
ート選択処理を行い、ここでは、「result1=f
ir(v1,v2,n)」について「fir」というアセ
ンブラテンプレート関数の定義として図7に示したテン
プレート1を選択しアセンブラ関数呼出翻訳部107に
通知する(ステップS302)。このアセンブラテンプ
レート選択処理については後に詳細に説明する。
【0049】次に、アセンブラ関数呼出翻訳部107
は、アセンブラテンプレート選択部105により選択さ
れたアセンブラテンプレート関数の定義をアセンブラコ
ードに変換する際に引数と戻り値についての受渡しのコ
ードが必要か否かを判断する(ステップS303)。必
要である場合には、アセンブラ関数呼出翻訳部107
は、引数及び戻り値について必要な受渡しのコードを生
成する(ステップS304)。また、引数及び戻り値に
ついての受渡しのコードが必要でなければステップS3
04をスキップする。
は、アセンブラテンプレート選択部105により選択さ
れたアセンブラテンプレート関数の定義をアセンブラコ
ードに変換する際に引数と戻り値についての受渡しのコ
ードが必要か否かを判断する(ステップS303)。必
要である場合には、アセンブラ関数呼出翻訳部107
は、引数及び戻り値について必要な受渡しのコードを生
成する(ステップS304)。また、引数及び戻り値に
ついての受渡しのコードが必要でなければステップS3
04をスキップする。
【0050】ステップS304で、アセンブラ関数呼出
翻訳部107は、「result1=fir(v1,v
2,n)」に対して、引数「v1」、「v2」、「n」
についてはそれぞれ「mov$p1,v1」、「mov
$p2,v2」、「mov$p3,(n)」という受渡
しのコードを、戻り値result1については「mo
v(result1),$t1」という受渡しのコード
を生成する。
翻訳部107は、「result1=fir(v1,v
2,n)」に対して、引数「v1」、「v2」、「n」
についてはそれぞれ「mov$p1,v1」、「mov
$p2,v2」、「mov$p3,(n)」という受渡
しのコードを、戻り値result1については「mo
v(result1),$t1」という受渡しのコード
を生成する。
【0051】なお、アセンブラ関数翻訳部107は、引
数についての受渡しのコードは、アセンブラテンプレー
ト関数の定義の本体的記述に対応して生成するアセンブ
ラコードの前に挿入し、戻り値についての受渡しのコー
ドは本体的記述に対して生成するアセンブラコードの後
に挿入する。必要に応じて引数及び戻り値についての受
渡しのコードを生成した後に、アセンブラ関数呼出翻訳
部107は、アセンブラテンプレート中の割り当て候補
のレジスタについての記述を参照して、アセンブラテン
プレート関数の定義の本体的記述における仮想レジスタ
「$p3」、「$t1」、「$p1」及び「$p2」に
割り当てる現実のレジスタを決定し、これらの仮想レジ
スタを決定した現実のレジスタに置き換えることにより
アセンブラコードを生成する(ステップS305)。な
お、置き換える現実のレジスタの決定は、従来のプログ
ラム変換装置における手法と同様の手法で実現できるの
で、ここでは、説明を省略する。
数についての受渡しのコードは、アセンブラテンプレー
ト関数の定義の本体的記述に対応して生成するアセンブ
ラコードの前に挿入し、戻り値についての受渡しのコー
ドは本体的記述に対して生成するアセンブラコードの後
に挿入する。必要に応じて引数及び戻り値についての受
渡しのコードを生成した後に、アセンブラ関数呼出翻訳
部107は、アセンブラテンプレート中の割り当て候補
のレジスタについての記述を参照して、アセンブラテン
プレート関数の定義の本体的記述における仮想レジスタ
「$p3」、「$t1」、「$p1」及び「$p2」に
割り当てる現実のレジスタを決定し、これらの仮想レジ
スタを決定した現実のレジスタに置き換えることにより
アセンブラコードを生成する(ステップS305)。な
お、置き換える現実のレジスタの決定は、従来のプログ
ラム変換装置における手法と同様の手法で実現できるの
で、ここでは、説明を省略する。
【0052】ここでは、テンプレート1のパラメータで
ある仮想レジスタ「$p1」、「$p2」、「$p3」
及び「$t1」が、それぞれ実レジスタ「p0」、「p
4」、「r0」及び「a0」に置き換えられることとし
て説明する。次に、アセンブラ関数翻訳部107は、置
き換える現実のレジスタが、既にアセンブラコードに変
換済みの部分において使用されている場合は、関数の呼
出記述に関して変換する場合における従来のプログラム
変換装置における手法と同様の手法により、退避及び復
元のコードが必要か否かを判断する(ステップS30
6)。
ある仮想レジスタ「$p1」、「$p2」、「$p3」
及び「$t1」が、それぞれ実レジスタ「p0」、「p
4」、「r0」及び「a0」に置き換えられることとし
て説明する。次に、アセンブラ関数翻訳部107は、置
き換える現実のレジスタが、既にアセンブラコードに変
換済みの部分において使用されている場合は、関数の呼
出記述に関して変換する場合における従来のプログラム
変換装置における手法と同様の手法により、退避及び復
元のコードが必要か否かを判断する(ステップS30
6)。
【0053】退避及び復元が必要であると判断した場合
には、アセンブラ関数翻訳部107は、レジスタの退避
及び復元のアセンブラコードを生成し、アセンブラテン
プレート関数の定義の本体的記述に対応して生成された
アセンブラコードの前に退避のコードを挿入し、本体的
記述に対応して生成するアセンブラコードの後に復元の
コードを挿入する(ステップS307)。また、退避及
び復元が必要でないと判断した場合には、ステップS3
07をスキップする。
には、アセンブラ関数翻訳部107は、レジスタの退避
及び復元のアセンブラコードを生成し、アセンブラテン
プレート関数の定義の本体的記述に対応して生成された
アセンブラコードの前に退避のコードを挿入し、本体的
記述に対応して生成するアセンブラコードの後に復元の
コードを挿入する(ステップS307)。また、退避及
び復元が必要でないと判断した場合には、ステップS3
07をスキップする。
【0054】ここでは、「p0」、「p4」、「r0」
及び「a0」は退避及び復元の必要がなく、ステップS
307の処理は行なわれないこととして説明する。最後
に、アセンブラ関数翻訳部107は、アセンブラテンプ
レート関数の定義の本体的記述に対応して生成されたア
センブラコードを出力ファイル106に出力し(ステッ
プS308)、アセンブラ関数呼出翻訳処理を終了す
る。
及び「a0」は退避及び復元の必要がなく、ステップS
307の処理は行なわれないこととして説明する。最後
に、アセンブラ関数翻訳部107は、アセンブラテンプ
レート関数の定義の本体的記述に対応して生成されたア
センブラコードを出力ファイル106に出力し(ステッ
プS308)、アセンブラ関数呼出翻訳処理を終了す
る。
【0055】また、図6に示すアセンブラテンプレート
関数の呼出記述である「result2=fir(v
3,v4,10)」を参照するための情報が渡されて起
動された場合には、アセンブラ関数翻訳部107は、基
本的には上述した「result1=fir(v1,v
2,n)」が渡された場合と同様の動作を行うが、アセ
ンブラテンプレート選択部105によりなされるアセン
ブラテンプレート選択処理(ステップS302)におい
て、図7に示したテンプレート2が選択されるため、結
果的に「result1=fir(v1,v2,n)」
に対応して生成される命令列とは異なる命令列からなる
アセンブラコードを生成する。
関数の呼出記述である「result2=fir(v
3,v4,10)」を参照するための情報が渡されて起
動された場合には、アセンブラ関数翻訳部107は、基
本的には上述した「result1=fir(v1,v
2,n)」が渡された場合と同様の動作を行うが、アセ
ンブラテンプレート選択部105によりなされるアセン
ブラテンプレート選択処理(ステップS302)におい
て、図7に示したテンプレート2が選択されるため、結
果的に「result1=fir(v1,v2,n)」
に対応して生成される命令列とは異なる命令列からなる
アセンブラコードを生成する。
【0056】このようなアセンブラ関数呼出翻訳処理に
よって、図6に示したソースプログラムは図8に示すア
センブラコードに変換される。プログラム変換装置10
0は、「fir」というアセンブラテンプレート関数
を、最適なアセンブラコードに変換するため、その呼出
記述における引数に応じて、定義としてテンプレート1
又はテンプレート2を選択的に採用し、図8に示すよう
に、各呼出記述を「repn」と「mac」という命令
列を中心としたアセンブラコード又は「macr」とい
う命令を中心としたアセンブラコードに変換する。
よって、図6に示したソースプログラムは図8に示すア
センブラコードに変換される。プログラム変換装置10
0は、「fir」というアセンブラテンプレート関数
を、最適なアセンブラコードに変換するため、その呼出
記述における引数に応じて、定義としてテンプレート1
又はテンプレート2を選択的に採用し、図8に示すよう
に、各呼出記述を「repn」と「mac」という命令
列を中心としたアセンブラコード又は「macr」とい
う命令を中心としたアセンブラコードに変換する。
【0057】<アセンブラテンプレート選択処理>以
下、アセンブラテンプレート選択部105が行なうアセ
ンブラテンプレート選択処理について説明する。図4
は、アセンブラテンプレート選択部105が行なうアセ
ンブラテンプレート選択処理の内容を示すフローチャー
トである。
下、アセンブラテンプレート選択部105が行なうアセ
ンブラテンプレート選択処理について説明する。図4
は、アセンブラテンプレート選択部105が行なうアセ
ンブラテンプレート選択処理の内容を示すフローチャー
トである。
【0058】アセンブラテンプレート選択部105は、
アセンブラ関数翻訳部107に起動され、起動される際
に、退避及び復元なしで使用可能なレジスタを示す情報
とアセンブラテンプレート関数の呼出記述を示す情報と
を渡される。ここでは、図6に示すアセンブラテンプレ
ート関数の呼出記述である「result1=fir
(v1,v2,n)」が渡される場合と、「resul
t2=fir(v3,v4,10)」が渡される場合と
を例として説明する。
アセンブラ関数翻訳部107に起動され、起動される際
に、退避及び復元なしで使用可能なレジスタを示す情報
とアセンブラテンプレート関数の呼出記述を示す情報と
を渡される。ここでは、図6に示すアセンブラテンプレ
ート関数の呼出記述である「result1=fir
(v1,v2,n)」が渡される場合と、「resul
t2=fir(v3,v4,10)」が渡される場合と
を例として説明する。
【0059】アセンブラテンプレート選択部105は、
アセンブラテンプレート関数の呼出記述において呼出対
象とされた関数名を持つ複数のアセンブラテンプレート
関数の定義をアセンブラテンプレート記憶部103から
獲得する(ステップS401)。アセンブラテンプレー
ト選択部105は、「result1=fir(v1,
v2,n)」や「result2=fir(v3,v
4,n)」については図7に示した「fir」という関
数名のテンプレート1及びテンプレート2を獲得する。
アセンブラテンプレート関数の呼出記述において呼出対
象とされた関数名を持つ複数のアセンブラテンプレート
関数の定義をアセンブラテンプレート記憶部103から
獲得する(ステップS401)。アセンブラテンプレー
ト選択部105は、「result1=fir(v1,
v2,n)」や「result2=fir(v3,v
4,n)」については図7に示した「fir」という関
数名のテンプレート1及びテンプレート2を獲得する。
【0060】アセンブラテンプレート選択部105は、
獲得した複数のアセンブラテンプレート関数の定義のう
ち、コストが最小であるアセンブラテンプレート関数の
定義を選択するものであり、このためステップS402
からS407までの処理を行なう。アセンブラテンプレ
ート選択部105は、アセンブラテンプレート関数の1
つの定義に着目し(ステップS402)、アセンブラテ
ンプレート関数の呼出記述を変換するのに使用可能な定
義であるか否かを判断する(ステップS403)。
獲得した複数のアセンブラテンプレート関数の定義のう
ち、コストが最小であるアセンブラテンプレート関数の
定義を選択するものであり、このためステップS402
からS407までの処理を行なう。アセンブラテンプレ
ート選択部105は、アセンブラテンプレート関数の1
つの定義に着目し(ステップS402)、アセンブラテ
ンプレート関数の呼出記述を変換するのに使用可能な定
義であるか否かを判断する(ステップS403)。
【0061】アセンブラテンプレート選択部105は、
図7に示したテンプレート1に着目した場合、「res
ult1=fir(v1,v2,n)」に対する場合で
も「result2=fir(v3,v4,10)」に
対する場合でも、使用可能であると判断する。このよう
に判断するのは、引数が定数、即ち即値でないと使用で
きない旨の条件、つまり後述するimmを用いた記述
が、テンプレート1中に含まれていないからである。
図7に示したテンプレート1に着目した場合、「res
ult1=fir(v1,v2,n)」に対する場合で
も「result2=fir(v3,v4,10)」に
対する場合でも、使用可能であると判断する。このよう
に判断するのは、引数が定数、即ち即値でないと使用で
きない旨の条件、つまり後述するimmを用いた記述
が、テンプレート1中に含まれていないからである。
【0062】しかし、アセンブラテンプレート選択部1
05は、図7に示したテンプレート2に着目した場合、
テンプレート2の定義内の「$p3={imm}」は第
3引数が即値でなければならないことを示しているの
で、第3引数が即値である呼出記述では使用可能である
が、第3引数が即値でない呼出記述では使用可能でない
と判断する。従って、「result1=fir(v
1,v2,n)」に対する場合には、「fir」の第3
引数「n」が即値でないので使用可能でないと判断し、
「result2=fir(v3,v4,10)」に対
する場合には、「fir」の第3引数「10」が即値な
ので使用可能であると判断する。
05は、図7に示したテンプレート2に着目した場合、
テンプレート2の定義内の「$p3={imm}」は第
3引数が即値でなければならないことを示しているの
で、第3引数が即値である呼出記述では使用可能である
が、第3引数が即値でない呼出記述では使用可能でない
と判断する。従って、「result1=fir(v
1,v2,n)」に対する場合には、「fir」の第3
引数「n」が即値でないので使用可能でないと判断し、
「result2=fir(v3,v4,10)」に対
する場合には、「fir」の第3引数「10」が即値な
ので使用可能であると判断する。
【0063】アセンブラテンプレート選択部105は、
着目しているアセンブラテンプレート関数の定義が使用
可能であると判断した場合には、その定義についてのコ
ストを計算するコスト計算処理を行なう(ステップS4
04)。このコスト計算処理については後に詳細に説明
する。次に、計算結果であるコストが、過去に計算した
コストの中で最小のものであるか否かを判断し(ステッ
プS405)、最小のコストであると判断した場合に
は、着目しているアセンブラテンプレート関数の定義を
選択し(ステップS406)、未だ着目していないアセ
ンブラテンプレート関数の定義があるか否かの判断を行
う(ステップS407)。
着目しているアセンブラテンプレート関数の定義が使用
可能であると判断した場合には、その定義についてのコ
ストを計算するコスト計算処理を行なう(ステップS4
04)。このコスト計算処理については後に詳細に説明
する。次に、計算結果であるコストが、過去に計算した
コストの中で最小のものであるか否かを判断し(ステッ
プS405)、最小のコストであると判断した場合に
は、着目しているアセンブラテンプレート関数の定義を
選択し(ステップS406)、未だ着目していないアセ
ンブラテンプレート関数の定義があるか否かの判断を行
う(ステップS407)。
【0064】なお、ステップS406において、着目し
ているアセンブラテンプレート関数の定義を選択すると
きに、既にアセンブラテンプレート関数の定義が選択さ
れているならば、それに替えて、着目しているアセンブ
ラテンプレート関数の定義を新たに選択する。また、ス
テップS405において最小のコストでないと判断した
場合にはステップS406をスキップして、ステップS
407の判断を行う。
ているアセンブラテンプレート関数の定義を選択すると
きに、既にアセンブラテンプレート関数の定義が選択さ
れているならば、それに替えて、着目しているアセンブ
ラテンプレート関数の定義を新たに選択する。また、ス
テップS405において最小のコストでないと判断した
場合にはステップS406をスキップして、ステップS
407の判断を行う。
【0065】また、ステップS403において、着目し
ているアセンブラテンプレート関数の定義が使用可能で
ないと判断した場合には、ステップS404からステッ
プS406をスキップして、ステップS407の判断を
行う。ステップS407において、未だ着目していない
アセンブラテンプレート関数の定義があると判断した
ら、次のアセンブラテンプレート関数の定義に着目すべ
くステップS402の処理に戻り、全てのアセンブラテ
ンプレート関数の定義を処理し終えたならば、アセンブ
ラテンプレート選択処理を終了する。
ているアセンブラテンプレート関数の定義が使用可能で
ないと判断した場合には、ステップS404からステッ
プS406をスキップして、ステップS407の判断を
行う。ステップS407において、未だ着目していない
アセンブラテンプレート関数の定義があると判断した
ら、次のアセンブラテンプレート関数の定義に着目すべ
くステップS402の処理に戻り、全てのアセンブラテ
ンプレート関数の定義を処理し終えたならば、アセンブ
ラテンプレート選択処理を終了する。
【0066】こうして、「result1=fir(v
1,v2,n)」の場合は、選択候補が図7に示すテン
プレート1のみであるため、アセンブラテンプレート選
択部105により最終的に選択されるものはテンプレー
ト1となる。なお、使用可能な定義が1つしかない場合
においては、最小のコストのものを探すためのステップ
S404及びステップS405を行わない。
1,v2,n)」の場合は、選択候補が図7に示すテン
プレート1のみであるため、アセンブラテンプレート選
択部105により最終的に選択されるものはテンプレー
ト1となる。なお、使用可能な定義が1つしかない場合
においては、最小のコストのものを探すためのステップ
S404及びステップS405を行わない。
【0067】また、「result2=fir(v3,
v4,10)」の場合は、選択候補は図7に示すテンプ
レート1及びテンプレート2の両方であり、後述するコ
スト計算処理の結果として、図7に示すテンプレート1
のコストが6と計算され、テンプレート2のコストが4
と計算されるので、アセンブラテンプレート選択部10
5により最終的に選択されるものはテンプレート2とな
る。
v4,10)」の場合は、選択候補は図7に示すテンプ
レート1及びテンプレート2の両方であり、後述するコ
スト計算処理の結果として、図7に示すテンプレート1
のコストが6と計算され、テンプレート2のコストが4
と計算されるので、アセンブラテンプレート選択部10
5により最終的に選択されるものはテンプレート2とな
る。
【0068】<コスト計算処理>以下、コスト計算処理
について説明する。図5は、アセンブラテンプレート選
択部105が行うコスト計算処理の内容を示すフローチ
ャートである。コスト計算処理として、アセンブラテン
プレート選択部105は、例えば図7に示したテンプレ
ート1では「cost=2」というように、アセンブラ
テンプレート関数の定義において記述されているコスト
を得てこれをコスト計算値の初期値とし(ステップS5
01)、引数についての受渡しのコードが必要か否かを
判断する(ステップS502)。なお、この例では、
「cost」の数値は実行サイクル数を表すものとす
る。
について説明する。図5は、アセンブラテンプレート選
択部105が行うコスト計算処理の内容を示すフローチ
ャートである。コスト計算処理として、アセンブラテン
プレート選択部105は、例えば図7に示したテンプレ
ート1では「cost=2」というように、アセンブラ
テンプレート関数の定義において記述されているコスト
を得てこれをコスト計算値の初期値とし(ステップS5
01)、引数についての受渡しのコードが必要か否かを
判断する(ステップS502)。なお、この例では、
「cost」の数値は実行サイクル数を表すものとす
る。
【0069】アセンブラテンプレート選択部105は、
引数についての受渡しのコードが必要である場合には引
数についての受渡しのコードのコストをコスト計算値に
加算することにより新たにコスト計算値を求め(ステッ
プS503)、必要でない場合にはステップS503を
スキップし、次にレジスタの退避・復元のコードが必要
か否かを判断する(ステップS504)。
引数についての受渡しのコードが必要である場合には引
数についての受渡しのコードのコストをコスト計算値に
加算することにより新たにコスト計算値を求め(ステッ
プS503)、必要でない場合にはステップS503を
スキップし、次にレジスタの退避・復元のコードが必要
か否かを判断する(ステップS504)。
【0070】アセンブラテンプレート選択部105は、
レジスタの退避及び復元のコードが必要である場合には
レジスタの退避及び復元のコードのコストをコスト計算
値に加算することにより新たにコスト計算値を求め(ス
テップS505)、必要でない場合には、ステップS5
05をスキップし、コスト計算処理を終了する。つま
り、「テンプレート関数の定義の本体的記述部分のコス
ト」と「引数についての受渡しコードのコスト」と「レ
ジスタの退避及び復元のコードのコスト」との和が、ア
センブラテンプレート関数の定義についての最終的なコ
スト計算値となる。
レジスタの退避及び復元のコードが必要である場合には
レジスタの退避及び復元のコードのコストをコスト計算
値に加算することにより新たにコスト計算値を求め(ス
テップS505)、必要でない場合には、ステップS5
05をスキップし、コスト計算処理を終了する。つま
り、「テンプレート関数の定義の本体的記述部分のコス
ト」と「引数についての受渡しコードのコスト」と「レ
ジスタの退避及び復元のコードのコスト」との和が、ア
センブラテンプレート関数の定義についての最終的なコ
スト計算値となる。
【0071】このようなコスト計算処理により、「re
sult2=fir(v3,v4,10)」に関しての
図7に示したテンプレート1のコストは、2+4+0=
6と計算され、テンプレート2のコストは、1+3+0
=4と計算される。引数の受け渡しのコードやレジスタ
の退避及び復元のコードのコストについては、一般のプ
ログラム変換装置と同様の処理であるところの、各種変
数等をレジスタに割り付ける処理を実行した結果を踏ま
えて、特にアセンブラテンプレート関数の呼出記述を変
換する際に新たに必要となるコードのみを計算して求め
る。また、これらのコードのコストは、レジスタを利用
する数に応じて求めることができるように算出用の情報
を予め保持していることとしてもよい。例えば、引数と
して変数が3つあれば、1つの戻り値の分と合わせて、
コストを4とする。 <補足>以上、本発明に係るファイル転送システムにつ
いて、実施の形態に基づいて説明したが、本発明はこれ
らの実施の形態に限られないことは勿論である。即ち、 (1)本実施の形態では、プログラム変換装置はアセン
ブラコードを出力することとしたが、アセンブラコード
を機械語の形式に変換して出力することとしてもよい。 (2)ソースファイル格納部101、アセンブラテンプ
レートファイル格納部102及び出力ファイル格納部1
08は、それぞれ別個のハードディスク装置等の記憶装
置であっても、同一の記憶装置であってもよい。 (3)本実施の形態では、アセンブラテンプレート中に
「cost=」という記述形式でもって、コストを明示
する情報が含まれていることを表したが、このようにコ
ストを明示しなくても、用いうる全ての命令それぞれに
ついて、命令と、実行サイクル数、コードサイズ等のコ
ストを示す情報とを対応付けたテーブルを予めメモリ等
に記憶しておき、そのテーブルを参照することによりア
センブラテンプレートに基づき変換されるであろうアセ
ンブラコードについてのコストを算出することとしても
よい。このような方法で、アセンブラテンプレート関数
の複数の定義それぞれについて、コストを算出して比較
することによって、最もコストの小さい定義を選択し
て、その定義に従ってアセンブラテンプレート関数の呼
出記述をアセンブラコードに変換することとしてもよ
い。 (4)本実施の形態では、コストとして実行サイクル数
に着目した例に基づいてプログラム変換装置の動作につ
いて説明したが、実行サイクル数の代わりにコードサイ
ズをコストとして用いることとしてもよい。例えば「c
ost=」の記述がコードサイズを表すように予め記述
しておくこととしてもよい。
sult2=fir(v3,v4,10)」に関しての
図7に示したテンプレート1のコストは、2+4+0=
6と計算され、テンプレート2のコストは、1+3+0
=4と計算される。引数の受け渡しのコードやレジスタ
の退避及び復元のコードのコストについては、一般のプ
ログラム変換装置と同様の処理であるところの、各種変
数等をレジスタに割り付ける処理を実行した結果を踏ま
えて、特にアセンブラテンプレート関数の呼出記述を変
換する際に新たに必要となるコードのみを計算して求め
る。また、これらのコードのコストは、レジスタを利用
する数に応じて求めることができるように算出用の情報
を予め保持していることとしてもよい。例えば、引数と
して変数が3つあれば、1つの戻り値の分と合わせて、
コストを4とする。 <補足>以上、本発明に係るファイル転送システムにつ
いて、実施の形態に基づいて説明したが、本発明はこれ
らの実施の形態に限られないことは勿論である。即ち、 (1)本実施の形態では、プログラム変換装置はアセン
ブラコードを出力することとしたが、アセンブラコード
を機械語の形式に変換して出力することとしてもよい。 (2)ソースファイル格納部101、アセンブラテンプ
レートファイル格納部102及び出力ファイル格納部1
08は、それぞれ別個のハードディスク装置等の記憶装
置であっても、同一の記憶装置であってもよい。 (3)本実施の形態では、アセンブラテンプレート中に
「cost=」という記述形式でもって、コストを明示
する情報が含まれていることを表したが、このようにコ
ストを明示しなくても、用いうる全ての命令それぞれに
ついて、命令と、実行サイクル数、コードサイズ等のコ
ストを示す情報とを対応付けたテーブルを予めメモリ等
に記憶しておき、そのテーブルを参照することによりア
センブラテンプレートに基づき変換されるであろうアセ
ンブラコードについてのコストを算出することとしても
よい。このような方法で、アセンブラテンプレート関数
の複数の定義それぞれについて、コストを算出して比較
することによって、最もコストの小さい定義を選択し
て、その定義に従ってアセンブラテンプレート関数の呼
出記述をアセンブラコードに変換することとしてもよ
い。 (4)本実施の形態では、コストとして実行サイクル数
に着目した例に基づいてプログラム変換装置の動作につ
いて説明したが、実行サイクル数の代わりにコードサイ
ズをコストとして用いることとしてもよい。例えば「c
ost=」の記述がコードサイズを表すように予め記述
しておくこととしてもよい。
【0072】また、実行サイクル数とコードサイズとの
値を両方計算できるようにしておき、実行サイクル数と
コードサイズのいずれをコストとして用いるかをプログ
ラムの作成者その他の者による設定に従って決定しアセ
ンブラテンプレート関数の複数の定義のうちコストを最
小とする1つの定義を選択して、その定義に従ってアセ
ンブラテンプレート関数の呼出記述をアセンブラコード
に変換することとしてもよい。 (5)本実施の形態では、テンプレート2の定義内の
「$p3={imm}」により第3引数が即値でなけれ
ばならない旨の引数に関する条件が記述されていること
としたが、引数に関する条件は、引数である即値の大き
さに関する条件であってもよい。例えば、「$p3=
{0<=imm<256}」等といった記述で、第3引
数が0以上256未満の値であることを条件とする等、
引数が所定範囲内の数値であること条件としてもよい。 (6)各アセンブラテンプレート関数についての複数の
定義それぞれについて、その定義が選択候補となり得る
条件をどのような形式で記憶していてもよい。例えば、
引数が1つしかないアセンブラテンプレート関数Aにつ
いてのテンプレートA1とテンプレートA2という2つ
の定義がある場合に、引数が変数ならテンプレートA1
で引数が即値、即ち定数ならテンプレートA2を選択候
補とすることを示す選択用情報を記憶しておくこととし
てもよい。この場合は、選択用情報を参照してステップ
S403の判断を行うことになる。また、各定義につい
てのコストも、どのような形式で記憶していてもよい。 (7)本実施の形態では、退避及び復元のコードや引数
についての受渡しのコードをコスト計算において考慮す
ることとしたが、必ずしもこれらを考慮する必要はな
く、テンプレート関数の定義の本体的記述部分のコスト
のみをコスト計算の結果とすることとしてもよい。 (8)本実施の形態におけるプログラム変換装置の処理
手順(図2〜図5のフローチャートの手順)等を、汎用
のコンピュータ等に実行させるためのコンピュータプロ
グラムを、記録媒体に記録し又は各種通信路等を介し
て、流通させ頒布することもできる。このような記録媒
体には、ICカード、光ディスク、フレキシブルディス
ク、ROM等がある。流通、頒布されたコンピュータプ
ログラムは、コンピュータ等にインストール等されるこ
とにより利用に供され、コンピュータは、当該コンピュ
ータプログラムを実行して、本実施の形態で示したよう
なプログラム変換装置を実現する。
値を両方計算できるようにしておき、実行サイクル数と
コードサイズのいずれをコストとして用いるかをプログ
ラムの作成者その他の者による設定に従って決定しアセ
ンブラテンプレート関数の複数の定義のうちコストを最
小とする1つの定義を選択して、その定義に従ってアセ
ンブラテンプレート関数の呼出記述をアセンブラコード
に変換することとしてもよい。 (5)本実施の形態では、テンプレート2の定義内の
「$p3={imm}」により第3引数が即値でなけれ
ばならない旨の引数に関する条件が記述されていること
としたが、引数に関する条件は、引数である即値の大き
さに関する条件であってもよい。例えば、「$p3=
{0<=imm<256}」等といった記述で、第3引
数が0以上256未満の値であることを条件とする等、
引数が所定範囲内の数値であること条件としてもよい。 (6)各アセンブラテンプレート関数についての複数の
定義それぞれについて、その定義が選択候補となり得る
条件をどのような形式で記憶していてもよい。例えば、
引数が1つしかないアセンブラテンプレート関数Aにつ
いてのテンプレートA1とテンプレートA2という2つ
の定義がある場合に、引数が変数ならテンプレートA1
で引数が即値、即ち定数ならテンプレートA2を選択候
補とすることを示す選択用情報を記憶しておくこととし
てもよい。この場合は、選択用情報を参照してステップ
S403の判断を行うことになる。また、各定義につい
てのコストも、どのような形式で記憶していてもよい。 (7)本実施の形態では、退避及び復元のコードや引数
についての受渡しのコードをコスト計算において考慮す
ることとしたが、必ずしもこれらを考慮する必要はな
く、テンプレート関数の定義の本体的記述部分のコスト
のみをコスト計算の結果とすることとしてもよい。 (8)本実施の形態におけるプログラム変換装置の処理
手順(図2〜図5のフローチャートの手順)等を、汎用
のコンピュータ等に実行させるためのコンピュータプロ
グラムを、記録媒体に記録し又は各種通信路等を介し
て、流通させ頒布することもできる。このような記録媒
体には、ICカード、光ディスク、フレキシブルディス
ク、ROM等がある。流通、頒布されたコンピュータプ
ログラムは、コンピュータ等にインストール等されるこ
とにより利用に供され、コンピュータは、当該コンピュ
ータプログラムを実行して、本実施の形態で示したよう
なプログラム変換装置を実現する。
【0073】
【発明の効果】以上の説明から明らかなように、本発明
に係るプログラム変換装置は、高級言語で記述されたソ
ースプログラムをアセンブラコードに変換するプログラ
ム変換装置であって、アセンブラテンプレート関数につ
いての複数の定義を記憶するテンプレート記憶手段と、
前記ソースプログラムにおけるアセンブラテンプレート
関数の呼出記述を検出する呼出検出手段と、前記呼出検
出手段により前記呼出記述が検出された場合に、当該呼
出記述により呼び出されるアセンブラテンプレート関数
についての複数の定義のうち、最適な1つを選択する選
択手段と、前記呼出検出手段により検出された前記呼出
記述を、前記選択手段により選択されたアセンブラテン
プレート関数の定義に基づいてアセンブラコードに変換
する変換手段とを備えることを特徴とする。
に係るプログラム変換装置は、高級言語で記述されたソ
ースプログラムをアセンブラコードに変換するプログラ
ム変換装置であって、アセンブラテンプレート関数につ
いての複数の定義を記憶するテンプレート記憶手段と、
前記ソースプログラムにおけるアセンブラテンプレート
関数の呼出記述を検出する呼出検出手段と、前記呼出検
出手段により前記呼出記述が検出された場合に、当該呼
出記述により呼び出されるアセンブラテンプレート関数
についての複数の定義のうち、最適な1つを選択する選
択手段と、前記呼出検出手段により検出された前記呼出
記述を、前記選択手段により選択されたアセンブラテン
プレート関数の定義に基づいてアセンブラコードに変換
する変換手段とを備えることを特徴とする。
【0074】これにより、アセンブラテンプレート関数
についての複数の定義のうちの1つが選択されるので、
このプログラム変換装置を利用する場合に、1つのアセ
ンブラテンプレート関数に対して複数の定義を用意して
おけば、ソースプログラム中のアセンブラテンプレート
関数の呼出記述を、その記述内容等に応じた最適なアセ
ンブラコードに変換することが可能になる。
についての複数の定義のうちの1つが選択されるので、
このプログラム変換装置を利用する場合に、1つのアセ
ンブラテンプレート関数に対して複数の定義を用意して
おけば、ソースプログラム中のアセンブラテンプレート
関数の呼出記述を、その記述内容等に応じた最適なアセ
ンブラコードに変換することが可能になる。
【0075】また、前記呼出検出手段は、前記ソースプ
ログラム中の関数の呼出記述を検出して、当該呼出記述
により呼び出される関数についての定義が前記テンプレ
ート記憶手段に記憶されているか否かを判断し、定義が
記憶されている場合に当該呼出記述をアセンブラテンプ
レート関数の呼出記述として検出することとしてもよ
い。
ログラム中の関数の呼出記述を検出して、当該呼出記述
により呼び出される関数についての定義が前記テンプレ
ート記憶手段に記憶されているか否かを判断し、定義が
記憶されている場合に当該呼出記述をアセンブラテンプ
レート関数の呼出記述として検出することとしてもよ
い。
【0076】これにより、ソースプログラム上において
通常の関数の呼出記述と同様の形式でもって記述された
アセンブラテンプレート関数の呼出記述を検出して、最
適なアセンブラコードに変換することができるようにな
る。また、前記テンプレート記憶手段は、前記アセンブ
ラテンプレート関数の定義毎に、関数への引数について
の条件がある場合にはその条件を示す条件情報をも記憶
しており、前記選択手段は、前記条件情報に従い、前記
呼出記述に含まれる関数への引数の記述に応じて前記選
択を行うこととしてもよい。
通常の関数の呼出記述と同様の形式でもって記述された
アセンブラテンプレート関数の呼出記述を検出して、最
適なアセンブラコードに変換することができるようにな
る。また、前記テンプレート記憶手段は、前記アセンブ
ラテンプレート関数の定義毎に、関数への引数について
の条件がある場合にはその条件を示す条件情報をも記憶
しており、前記選択手段は、前記条件情報に従い、前記
呼出記述に含まれる関数への引数の記述に応じて前記選
択を行うこととしてもよい。
【0077】これにより、アセンブラテンプレート関数
の呼出記述において、変数を引数としているか、即値、
即ち定数を引数としているか等、引数の別に対応して、
アセンブラテンプレート関数の呼出記述をより最適なア
センブラコードに変換することができるようになる。ま
た、前記条件情報は、引数が即値でなければならない旨
を示す情報であり、前記選択手段は、前記条件情報に従
い、前記呼出記述に含まれる関数への引数の記述が即値
であるか否かに応じて前記選択を行うこととしてもよ
い。
の呼出記述において、変数を引数としているか、即値、
即ち定数を引数としているか等、引数の別に対応して、
アセンブラテンプレート関数の呼出記述をより最適なア
センブラコードに変換することができるようになる。ま
た、前記条件情報は、引数が即値でなければならない旨
を示す情報であり、前記選択手段は、前記条件情報に従
い、前記呼出記述に含まれる関数への引数の記述が即値
であるか否かに応じて前記選択を行うこととしてもよ
い。
【0078】これにより、アセンブラテンプレート関数
の呼出記述において、変数を引数としているか、定数を
引数としているかに応じて異なるアセンブラコードを生
成すること、即ちアセンブラテンプレート関数の呼出記
述をより最適なアセンブラコードに変換することができ
るようになる。また、前記条件情報は、引数が所定範囲
値内の即値でなければならない旨を示す情報であり、前
記選択手段は、前記条件情報に従い、前記呼出記述に含
まれる関数への引数の記述が所定範囲内の即値であるか
否かに応じて前記選択を行うこととしてもよい。
の呼出記述において、変数を引数としているか、定数を
引数としているかに応じて異なるアセンブラコードを生
成すること、即ちアセンブラテンプレート関数の呼出記
述をより最適なアセンブラコードに変換することができ
るようになる。また、前記条件情報は、引数が所定範囲
値内の即値でなければならない旨を示す情報であり、前
記選択手段は、前記条件情報に従い、前記呼出記述に含
まれる関数への引数の記述が所定範囲内の即値であるか
否かに応じて前記選択を行うこととしてもよい。
【0079】これにより、アセンブラテンプレート関数
の呼出記述において、定数を引数としていても、その定
数が所定の範囲の値であるか否かによって、生成するア
センブラコードを異なるものとすることができるように
なる。例えば、0から255まで等の1バイトで表せる
数値範囲の定数であれば、1バイトの即値が指定できる
命令が使えるが、256以上の数値の定数であれば、2
バイトの数値を指定する命令を使わなければならないと
いったような場合において、0から255までの数値の
定数を引数としたアセンブラテンプレート関数の呼出記
述を、2バイトの数値を指定する命令を含むアセンブラ
コードに変換するような無駄を防止することができるよ
うになる。
の呼出記述において、定数を引数としていても、その定
数が所定の範囲の値であるか否かによって、生成するア
センブラコードを異なるものとすることができるように
なる。例えば、0から255まで等の1バイトで表せる
数値範囲の定数であれば、1バイトの即値が指定できる
命令が使えるが、256以上の数値の定数であれば、2
バイトの数値を指定する命令を使わなければならないと
いったような場合において、0から255までの数値の
定数を引数としたアセンブラテンプレート関数の呼出記
述を、2バイトの数値を指定する命令を含むアセンブラ
コードに変換するような無駄を防止することができるよ
うになる。
【0080】また、前記テンプレート記憶手段は、前記
アセンブラテンプレート関数の定義毎に、最適なものを
選択するための基準となる評価値をも記憶しており、前
記選択手段は、前記各定義についての評価値に基づい
て、前記選択を行うこととしてもよい。これにより、ア
センブラテンプレート関数についての複数の定義のうち
最適な定義を高速に選択することが可能となり、プログ
ラムの変換が迅速に行えるようになる。
アセンブラテンプレート関数の定義毎に、最適なものを
選択するための基準となる評価値をも記憶しており、前
記選択手段は、前記各定義についての評価値に基づい
て、前記選択を行うこととしてもよい。これにより、ア
センブラテンプレート関数についての複数の定義のうち
最適な定義を高速に選択することが可能となり、プログ
ラムの変換が迅速に行えるようになる。
【0081】また、前記テンプレート記憶手段は、前記
定義毎に当該定義が特定するアセンブラコードについて
の実行サイクル数を示す情報を前記評価値として記憶し
ており、前記選択手段は、前記複数の定義のうち、実行
サイクル数が最小であるアセンブラコードに変換される
ことになる1つの定義を選択することとすることもでき
る。
定義毎に当該定義が特定するアセンブラコードについて
の実行サイクル数を示す情報を前記評価値として記憶し
ており、前記選択手段は、前記複数の定義のうち、実行
サイクル数が最小であるアセンブラコードに変換される
ことになる1つの定義を選択することとすることもでき
る。
【0082】これにより、アセンブラテンプレート関数
の呼出記述を実行速度の速いアセンブラコードに変換す
ることができるようになる。また、前記テンプレート記
憶手段は、前記定義毎に当該定義が特定するアセンブラ
コードについてのコードサイズを示す情報を前記評価値
として記憶しており、前記選択手段は、前記複数の定義
のうち、コードサイズが最小であるアセンブラコードに
変換されることになる1つの定義を選択することとして
もよい。
の呼出記述を実行速度の速いアセンブラコードに変換す
ることができるようになる。また、前記テンプレート記
憶手段は、前記定義毎に当該定義が特定するアセンブラ
コードについてのコードサイズを示す情報を前記評価値
として記憶しており、前記選択手段は、前記複数の定義
のうち、コードサイズが最小であるアセンブラコードに
変換されることになる1つの定義を選択することとして
もよい。
【0083】これにより、アセンブラテンプレート関数
の呼出記述をサイズの小さなアセンブラコードに変換す
ることができるようになる。また、前記選択手段は、前
記呼出記述を仮に前記定義それぞれにより特定されるア
センブラコードに変換するとした場合に、引数をレジス
タに設定するためのコード並びにレジスタ退避及び復元
のためのコードのうち必要となるコードがあればそのコ
ードをも含めて得られる変換結果のコードについての実
行サイクル数又はコードサイズに基づいて判断すること
により、前記選択を行うこととしてもよい。
の呼出記述をサイズの小さなアセンブラコードに変換す
ることができるようになる。また、前記選択手段は、前
記呼出記述を仮に前記定義それぞれにより特定されるア
センブラコードに変換するとした場合に、引数をレジス
タに設定するためのコード並びにレジスタ退避及び復元
のためのコードのうち必要となるコードがあればそのコ
ードをも含めて得られる変換結果のコードについての実
行サイクル数又はコードサイズに基づいて判断すること
により、前記選択を行うこととしてもよい。
【0084】これにより、コスト計算を厳密に行うこと
が可能となり、コストの最小となる最適な定義を選択す
ることができ、この結果として、アセンブラテンプレー
ト関数の呼出記述を最適なアセンブラコードに変換する
ことができるようになる。
が可能となり、コストの最小となる最適な定義を選択す
ることができ、この結果として、アセンブラテンプレー
ト関数の呼出記述を最適なアセンブラコードに変換する
ことができるようになる。
【図1】本発明の実施の形態に係るプログラム変換装置
100の機能ブロック図である。
100の機能ブロック図である。
【図2】プログラム変換装置100の動作を示すフロー
チャートである。
チャートである。
【図3】アセンブラ関数呼出翻訳部107が行なうアセ
ンブラ関数呼出翻訳処理の内容を示すフローチャートで
ある。
ンブラ関数呼出翻訳処理の内容を示すフローチャートで
ある。
【図4】アセンブラテンプレート選択部105が行なう
アセンブラテンプレート選択処理の内容を示すフローチ
ャートである。
アセンブラテンプレート選択処理の内容を示すフローチ
ャートである。
【図5】アセンブラテンプレート選択部105が行うコ
スト計算処理の内容を示すフローチャートである。
スト計算処理の内容を示すフローチャートである。
【図6】アセンブラテンプレート関数を呼び出す旨の記
述を含むソースプログラムの例を示す図である。
述を含むソースプログラムの例を示す図である。
【図7】アセンブラテンプレートの内容例を示す図であ
る。
る。
【図8】本発明に係るプログラム変換装置100により
図6に示すソースプログラムを変換した結果のアセンブ
ラコードを示す図である。
図6に示すソースプログラムを変換した結果のアセンブ
ラコードを示す図である。
【図9】従来のプログラム変換装置900の機能ブロッ
ク図である。
ク図である。
【図10】従来のアセンブラテンプレートの内容例を示
す図である。
す図である。
【図11】従来のプログラム変換装置900により図6
に示すソースプログラムを変換した結果のアセンブラコ
ードを示す図である。
に示すソースプログラムを変換した結果のアセンブラコ
ードを示す図である。
100 プログラム変換装置 101 ソースファイル格納部 102 アセンブラテンプレートファイル格納部 103 アセンブラテンプレート記憶部 104 制御部 105 アセンブラテンプレート選択部 106 一般命令翻訳部 107 アセンブラ関数呼出翻訳部 108 出力ファイル格納部
───────────────────────────────────────────────────── フロントページの続き (72)発明者 橋口 渉 大阪府門真市大字門真1006番地 松下電器 産業株式会社内 Fターム(参考) 5B081 CC21
Claims (10)
- 【請求項1】 高級言語で記述されたソースプログラム
をアセンブラコードに変換するプログラム変換装置であ
って、 アセンブラテンプレート関数についての複数の定義を記
憶するテンプレート記憶手段と、 前記ソースプログラムにおけるアセンブラテンプレート
関数の呼出記述を検出する呼出検出手段と、 前記呼出検出手段により前記呼出記述が検出された場合
に、当該呼出記述により呼び出されるアセンブラテンプ
レート関数についての複数の定義のうち、最適な1つを
選択する選択手段と、 前記呼出検出手段により検出された前記呼出記述を、前
記選択手段により選択されたアセンブラテンプレート関
数の定義に基づいてアセンブラコードに変換する変換手
段とを備えることを特徴とするプログラム変換装置。 - 【請求項2】 前記呼出検出手段は、前記ソースプログ
ラム中の関数の呼出記述を検出して、当該呼出記述によ
り呼び出される関数についての定義が前記テンプレート
記憶手段に記憶されているか否かを判断し、定義が記憶
されている場合に当該呼出記述をアセンブラテンプレー
ト関数の呼出記述として検出することを特徴とする請求
項1記載のプログラム変換装置。 - 【請求項3】 前記テンプレート記憶手段は、前記アセ
ンブラテンプレート関数の定義毎に、関数への引数につ
いての条件がある場合にはその条件を示す条件情報をも
記憶しており、 前記選択手段は、前記条件情報に従い、前記呼出記述に
含まれる関数への引数の記述に応じて前記選択を行うこ
とを特徴とする請求項1又は2記載のプログラム変換装
置。 - 【請求項4】 前記条件情報は、引数が即値でなければ
ならない旨を示す情報であり、 前記選択手段は、前記条件情報に従い、前記呼出記述に
含まれる関数への引数の記述が即値であるか否かに応じ
て前記選択を行うことを特徴とする請求項3記載のプロ
グラム変換装置。 - 【請求項5】 前記条件情報は、引数が所定範囲値内の
即値でなければならない旨を示す情報であり、 前記選択手段は、前記条件情報に従い、前記呼出記述に
含まれる関数への引数の記述が所定範囲内の即値である
か否かに応じて前記選択を行うことを特徴とする請求項
4記載のプログラム変換装置。 - 【請求項6】 前記テンプレート記憶手段は、前記アセ
ンブラテンプレート関数の定義毎に、最適なものを選択
するための基準となる評価値をも記憶しており、 前記選択手段は、前記各定義についての評価値に基づい
て、前記選択を行うことを特徴とする請求項1又は2記
載のプログラム変換装置。 - 【請求項7】 前記テンプレート記憶手段は、前記定義
毎に当該定義が特定するアセンブラコードについての実
行サイクル数を示す情報を前記評価値として記憶してお
り、 前記選択手段は、前記複数の定義のうち、実行サイクル
数が最小であるアセンブラコードに変換されることにな
る1つの定義を選択することを特徴とする請求項6記載
のプログラム変換装置。 - 【請求項8】 前記テンプレート記憶手段は、前記定義
毎に当該定義が特定するアセンブラコードについてのコ
ードサイズを示す情報を前記評価値として記憶してお
り、 前記選択手段は、前記複数の定義のうち、コードサイズ
が最小であるアセンブラコードに変換されることになる
1つの定義を選択することを特徴とする請求項6記載の
プログラム変換装置。 - 【請求項9】 前記選択手段は、前記呼出記述を仮に前
記定義それぞれにより特定されるアセンブラコードに変
換するとした場合に、引数をレジスタに設定するための
コード並びにレジスタ退避及び復元のためのコードのう
ち必要となるコードがあればそのコードをも含めて得ら
れる変換結果のコードについての実行サイクル数又はコ
ードサイズに基づいて判断することにより、前記選択を
行うことを特徴とする請求項1又は2記載のプログラム
変換装置。 - 【請求項10】 アセンブラテンプレート関数について
の複数の定義を記憶するメモリを備えるコンピュータ
に、高級言語で記述されたソースプログラムをアセンブ
ラコードに変換するプログラム変換処理を実行させるた
めの制御プログラムを記録した記録媒体であって、 前記プログラム変換処理は、 前記ソースプログラムにおけるアセンブラテンプレート
関数の呼出記述を検出する呼出検出ステップと、 前記呼出検出ステップにより前記呼出記述が検出された
場合に、前記メモリに記憶されており当該呼出記述によ
り呼び出されるアセンブラテンプレート関数についての
複数の定義のうち、最適な1つを選択する選択ステップ
と、 前記呼出検出ステップにより検出された前記呼出記述
を、前記選択ステップにより選択されたアセンブラテン
プレート関数の定義に基づいてアセンブラコードに変換
する変換ステップとを含むことを特徴とする記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000087626A JP2001273150A (ja) | 2000-03-27 | 2000-03-27 | プログラム変換装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000087626A JP2001273150A (ja) | 2000-03-27 | 2000-03-27 | プログラム変換装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001273150A true JP2001273150A (ja) | 2001-10-05 |
Family
ID=18603604
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000087626A Pending JP2001273150A (ja) | 2000-03-27 | 2000-03-27 | プログラム変換装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2001273150A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1313926C (zh) * | 2003-11-05 | 2007-05-02 | 松下电器产业株式会社 | 模板编译方法 |
US7284241B2 (en) | 2002-08-02 | 2007-10-16 | Matsushita Electric Industrial Co., Ltd. | Compiler, compiler apparatus and compilation method |
-
2000
- 2000-03-27 JP JP2000087626A patent/JP2001273150A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7284241B2 (en) | 2002-08-02 | 2007-10-16 | Matsushita Electric Industrial Co., Ltd. | Compiler, compiler apparatus and compilation method |
US8151254B2 (en) | 2002-08-02 | 2012-04-03 | Panasonic Corporation | Compiler, compiler apparatus and compilation method |
CN1313926C (zh) * | 2003-11-05 | 2007-05-02 | 松下电器产业株式会社 | 模板编译方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4130713B2 (ja) | プログラム変換装置 | |
US6820252B2 (en) | Selective conversion to native code using hardware translator, software translator, and software interpreter | |
US7367013B2 (en) | Method for integrating Linux kernel and application software packages and generating installation file list based on CML2 computer language | |
JP4026940B2 (ja) | プログラム変換装置 | |
US20040205697A1 (en) | Transferring data along with code for program overlays | |
US20050138612A1 (en) | Compilation method, compiler apparatus and compiler | |
JP5157534B2 (ja) | 動作合成装置、および、プログラム | |
US10310871B2 (en) | Non-transitory computer-readable recording medium storing control program, control device and control method | |
JP5777843B1 (ja) | プロセッサ、処理装置、プログラム作成方法 | |
CN114327497B (zh) | 一种代码处理方法、装置及设备 | |
US20060123198A1 (en) | Compiling method | |
US20030088865A1 (en) | Apparatus and method for incrementally performing remote loading | |
JP2007226784A (ja) | インラインされたメソッドの呼出方法およびそれを用いたジャバ仮想マシン | |
JP2001273150A (ja) | プログラム変換装置 | |
US20070011440A1 (en) | Processor and processing method | |
JP2000122876A (ja) | 情報処理装置 | |
JP2006301989A (ja) | 計算機言語によるプログラムをブロック図から自動生成する方法と装置とプログラム | |
JP3241214B2 (ja) | 分散処理装置及びプロセス実行方法 | |
CN118192952B (zh) | 着色器文件的生成方法、装置、存储介质及程序产品 | |
JPH11353164A (ja) | ソースプログラム生成システムおよびソースプログラム生成方法ならびにチャート生成システムおよびチャート生成方法 | |
CN114528007B (zh) | 组件处理方法、装置、电子设备及存储介质 | |
JP2009181558A (ja) | プログラム変換装置 | |
CN108170408A (zh) | Js对象定义的生成方法及装置 | |
TW480445B (en) | Method for downloading application programs on the compiler system platform of an electronic communication device | |
CN116301833A (zh) | 小程序模板的配置方法、装置、电子设备及存储介质 |