JPH1124939A - プログラム変換方法 - Google Patents
プログラム変換方法Info
- Publication number
- JPH1124939A JPH1124939A JP18377897A JP18377897A JPH1124939A JP H1124939 A JPH1124939 A JP H1124939A JP 18377897 A JP18377897 A JP 18377897A JP 18377897 A JP18377897 A JP 18377897A JP H1124939 A JPH1124939 A JP H1124939A
- Authority
- JP
- Japan
- Prior art keywords
- program
- function
- instruction
- programs
- functions
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】 複数のソースプログラム11をコンパイラ1
2でオブジェクトプログラム13に翻訳した後、リンケ
ージエディタ14で最終の実行ロードモジュール15に
組込むときに、できるだけ多くの関数をインライン展開
処理する。 【解決手段】 各コンパイラ12は、ソースプログラム
11に含まれる関数を検出すると、該当関数のプログラ
ム長が規定長以下の場合及び他の関数の呼出命令がない
場合、該当関数を自己のワークレジスタ17のみを使用
した命令列に展開し、その後、このワークレジスタ18
内に展開された関数をオブジェクトプログラムに翻訳す
る。また、リンケージエディタ14は、各オブジェクト
プログラムに規定長以下及び他の関数の呼出命令がない
関数を検出すると、該当オブジェクトプログラムのワー
クレジスタ内に展開された該当関数のオブジェクトプロ
グラムをインライン展開処理で実行ロードモジュールに
編集する。
2でオブジェクトプログラム13に翻訳した後、リンケ
ージエディタ14で最終の実行ロードモジュール15に
組込むときに、できるだけ多くの関数をインライン展開
処理する。 【解決手段】 各コンパイラ12は、ソースプログラム
11に含まれる関数を検出すると、該当関数のプログラ
ム長が規定長以下の場合及び他の関数の呼出命令がない
場合、該当関数を自己のワークレジスタ17のみを使用
した命令列に展開し、その後、このワークレジスタ18
内に展開された関数をオブジェクトプログラムに翻訳す
る。また、リンケージエディタ14は、各オブジェクト
プログラムに規定長以下及び他の関数の呼出命令がない
関数を検出すると、該当オブジェクトプログラムのワー
クレジスタ内に展開された該当関数のオブジェクトプロ
グラムをインライン展開処理で実行ロードモジュールに
編集する。
Description
【0001】
【発明の属する技術分野】本発明は複数のソースプログ
ラムをそれぞれオブジェクトプログラムに翻訳して、さ
らに一つの実行ロードモジュールに編集するプログラム
変換方法に関する。
ラムをそれぞれオブジェクトプログラムに翻訳して、さ
らに一つの実行ロードモジュールに編集するプログラム
変換方法に関する。
【0002】
【従来の技術】複雑な制御や業務を実行するコンピュー
タに組込むためのプログラムを作成する場合、最初から
全ての業務処理を含んだプログラを作成するのではなく
て、例えば図6に示すように、それぞれの単位業務を実
行するそれぞれ独立した複数のソースプログラム1を作
成する。作成した各ソースプログラム1をそれぞれ個別
にコンパイラ2でオブジェクトプログラム3へ翻訳す
る。
タに組込むためのプログラムを作成する場合、最初から
全ての業務処理を含んだプログラを作成するのではなく
て、例えば図6に示すように、それぞれの単位業務を実
行するそれぞれ独立した複数のソースプログラム1を作
成する。作成した各ソースプログラム1をそれぞれ個別
にコンパイラ2でオブジェクトプログラム3へ翻訳す
る。
【0003】そして、最後に、各オブジェクトプログラ
ム3をリンケージエディタ4を用いてコンピュータが実
行可能な形式である一つの実行ロードモジュール5に編
集する。そして、この実行ロードモジュール5の形式で
前記コンピュータにインストールする。
ム3をリンケージエディタ4を用いてコンピュータが実
行可能な形式である一つの実行ロードモジュール5に編
集する。そして、この実行ロードモジュール5の形式で
前記コンピュータにインストールする。
【0004】一般に、上述した各ソースプログラムには
プログラム自体が冗長になるのを防止するために、同一
処理内容を一つの関数として定義して、この関数を必要
に応じて、ソースプログラムで呼出すようにしている。
プログラム自体が冗長になるのを防止するために、同一
処理内容を一つの関数として定義して、この関数を必要
に応じて、ソースプログラムで呼出すようにしている。
【0005】図7は図6に示す複数のソースプログラム
1のうちの一つのソースプログラム1aを示す図であ
る。このソースプログラム1a内には複数の関数の定義
6a〜6dや関数に対する呼出命令が組込まれている。
そして、この各関数の定義6a〜6d内に別の関数に対
する呼出命令が含まれることもある。
1のうちの一つのソースプログラム1aを示す図であ
る。このソースプログラム1a内には複数の関数の定義
6a〜6dや関数に対する呼出命令が組込まれている。
そして、この各関数の定義6a〜6d内に別の関数に対
する呼出命令が含まれることもある。
【0006】そして、この呼出すべき関数の定義は、同
一のソースプログラム1aに内に存在する場合と、他の
ソースプログラム1や外部のシステムライブラリに存在
する場合もある。ここで、同一のソースプログラム1a
に定義が存在する関数を内部関数と称し、他のソースプ
ログラム1やシステムライブラリに定義が存在する関数
を外部関数と称する。
一のソースプログラム1aに内に存在する場合と、他の
ソースプログラム1や外部のシステムライブラリに存在
する場合もある。ここで、同一のソースプログラム1a
に定義が存在する関数を内部関数と称し、他のソースプ
ログラム1やシステムライブラリに定義が存在する関数
を外部関数と称する。
【0007】このような関数を含むソースプログラム1
aの実行に際して、プログラムの進行に際して関数の呼
出命令が存在すれば、該当関数がソースプログラムやシ
ステムライブラリで定義されている場合においては、プ
ログラム実行動作を中断して途中結果を一旦退避させ
て、ソースプログラムやシステムライブラリの該当関数
に対応する部分を呼出して処理実行する。そして関数処
理が終了すると、退避していた元の途中結果を復帰さ
せ、かつ元のソースプログラムの中断部分から処理を再
開する。
aの実行に際して、プログラムの進行に際して関数の呼
出命令が存在すれば、該当関数がソースプログラムやシ
ステムライブラリで定義されている場合においては、プ
ログラム実行動作を中断して途中結果を一旦退避させ
て、ソースプログラムやシステムライブラリの該当関数
に対応する部分を呼出して処理実行する。そして関数処
理が終了すると、退避していた元の途中結果を復帰さ
せ、かつ元のソースプログラムの中断部分から処理を再
開する。
【0008】したがって、プログラムを効率的に実行す
るためには、できるたけ関数の呼出処理を実施すること
なく、自己の関数の範囲内で処理することが望ましい。
よって、最終的に実行ロードモジュール5に組込まれた
編集後のオブジェクトプログラムにおいても、プログラ
ム内に含まれる各種の関数を効率的に処理できるように
プログラム変換されるのが望ましい。
るためには、できるたけ関数の呼出処理を実施すること
なく、自己の関数の範囲内で処理することが望ましい。
よって、最終的に実行ロードモジュール5に組込まれた
編集後のオブジェクトプログラムにおいても、プログラ
ム内に含まれる各種の関数を効率的に処理できるように
プログラム変換されるのが望ましい。
【0009】このように、関数を自己のプログラムの範
囲内で処理可能とするように関数の中身(定義)を自己
のプロクラム内に組込む(挿入)ことをインライン展開
すると呼ばれている。したがって、図6に示す各ソース
プログラム1を最終的に実行ロードモジュール5に組込
む場合に、各関数がインライン展開できることが望まし
い。
囲内で処理可能とするように関数の中身(定義)を自己
のプロクラム内に組込む(挿入)ことをインライン展開
すると呼ばれている。したがって、図6に示す各ソース
プログラム1を最終的に実行ロードモジュール5に組込
む場合に、各関数がインライン展開できることが望まし
い。
【0010】
【発明が解決しようとする課題】しかしながら、現状の
コンパイラ2やリンケージエディタ4においては、自己
のプログラム内に定義された関数(内部関数)しかイン
ライン展開処理できる機能を有していない。
コンパイラ2やリンケージエディタ4においては、自己
のプログラム内に定義された関数(内部関数)しかイン
ライン展開処理できる機能を有していない。
【0011】したがって、最終的に実行ロードモジュー
ル5に組込まれたオブジェクトプログラムには多数の関
数の呼出命令が残留することになり、その都度、他の関
数へ実行プログラム制御が移動して、この移動に伴うデ
ータの退避や復帰等を含むオーバヘッドの発生頻度が多
くなり、この実行ロードモジュール5をコンピュータに
組込んだ場合、プログラムの実行効率が低下する問題が
ある。
ル5に組込まれたオブジェクトプログラムには多数の関
数の呼出命令が残留することになり、その都度、他の関
数へ実行プログラム制御が移動して、この移動に伴うデ
ータの退避や復帰等を含むオーバヘッドの発生頻度が多
くなり、この実行ロードモジュール5をコンピュータに
組込んだ場合、プログラムの実行効率が低下する問題が
ある。
【0012】本発明はこのような事情に鑑みてなされた
ものであり、ソースプログラムに含まれる関数を自己の
プログラム内に定義された関数のみならず、他のソース
プログラムやシステムライブラリに定義された関数の一
部も自己のワークレジスタのみを使用した命令列に展開
することによって、できるだけ多くの関数をインライン
展開処理でき、プログラムの実行効率を大幅に向上でき
るプログラム変換方法を提供することを目的とする。
ものであり、ソースプログラムに含まれる関数を自己の
プログラム内に定義された関数のみならず、他のソース
プログラムやシステムライブラリに定義された関数の一
部も自己のワークレジスタのみを使用した命令列に展開
することによって、できるだけ多くの関数をインライン
展開処理でき、プログラムの実行効率を大幅に向上でき
るプログラム変換方法を提供することを目的とする。
【0013】
【課題を解決するための手段】本発明は、複数のソース
プログラムを各プログラム毎に個別のコンパイラでそれ
ぞれオブジェクトプログラムに翻訳して、さらにこの複
数のオブジェクトプログラムをリンケージエディタで一
つの実行ロードモジュールに編集するプログラム変換方
法に適用される。
プログラムを各プログラム毎に個別のコンパイラでそれ
ぞれオブジェクトプログラムに翻訳して、さらにこの複
数のオブジェクトプログラムをリンケージエディタで一
つの実行ロードモジュールに編集するプログラム変換方
法に適用される。
【0014】そして、上記課題を解消するために、本発
明においては、各コンパイラは、ソースプログラムをオ
ブジェクトプログラムに翻訳するに際して、ソースプロ
グラムに含まれる関数を検出すると、該当関数のプログ
ラム長が規定長以下の場合及び当該関数自信のプログラ
ムの中に他の関数の呼出命令がない場合、該当関数を自
己のワークレジスタのみを使用した命令列に展開し、そ
の後、このワークレジスタのみを使用した命令列に展開
された関数をオブジェクトプログラムに翻訳する。
明においては、各コンパイラは、ソースプログラムをオ
ブジェクトプログラムに翻訳するに際して、ソースプロ
グラムに含まれる関数を検出すると、該当関数のプログ
ラム長が規定長以下の場合及び当該関数自信のプログラ
ムの中に他の関数の呼出命令がない場合、該当関数を自
己のワークレジスタのみを使用した命令列に展開し、そ
の後、このワークレジスタのみを使用した命令列に展開
された関数をオブジェクトプログラムに翻訳する。
【0015】また、リンケージエディタは、各オブジェ
クトプログラムを実行ロードモジュールに編集する際
に、前記各オブジェクトプログラムに規定長以下の関数
及び他の関数の呼出命令がない関数を検出すると、該当
オブジェクトプログラムのワークレジスタのみを使用し
た命令列に展開された該当関数のオブジェクトプログラ
ムをインライン展開処理で実行ロードモジュールに編集
する。
クトプログラムを実行ロードモジュールに編集する際
に、前記各オブジェクトプログラムに規定長以下の関数
及び他の関数の呼出命令がない関数を検出すると、該当
オブジェクトプログラムのワークレジスタのみを使用し
た命令列に展開された該当関数のオブジェクトプログラ
ムをインライン展開処理で実行ロードモジュールに編集
する。
【0016】このように構成されたプログラム変換方法
において、前述したように、各ソースプログラムに自己
のプログラム内に定義された関数(以下内部関数と呼
ぶ)の他に、他のソースプログラムやシステムライブラ
リに定義された外部関数の呼出命令が含まれる。
において、前述したように、各ソースプログラムに自己
のプログラム内に定義された関数(以下内部関数と呼
ぶ)の他に、他のソースプログラムやシステムライブラ
リに定義された外部関数の呼出命令が含まれる。
【0017】関数を自己のプログラム内に組込むために
は一旦自己のワークレジスタを用いる必要がある。ここ
で、インライン展開が可能な関数とは、展開後の各命令
の記憶領域(レジスタ)が他のレジスタに対する重複
(衝突)を避けるために、該当関数自身のプログラム内
に他の関数の呼出命令が含まれず、かつレジスタの使用
を自己のワークジスタのみに限るとする関数である。
は一旦自己のワークレジスタを用いる必要がある。ここ
で、インライン展開が可能な関数とは、展開後の各命令
の記憶領域(レジスタ)が他のレジスタに対する重複
(衝突)を避けるために、該当関数自身のプログラム内
に他の関数の呼出命令が含まれず、かつレジスタの使用
を自己のワークジスタのみに限るとする関数である。
【0018】すなわち、関数の定義を示すプログラムが
短い場合でかつ該当プログラムに他の関数の呼出命令が
ない場合は、自己のワークレジスタのみを使用した命令
列に展開可能である。
短い場合でかつ該当プログラムに他の関数の呼出命令が
ない場合は、自己のワークレジスタのみを使用した命令
列に展開可能である。
【0019】したがって、各コンパイラは、各ソースプ
ログラムの各命令をオブジェクトプログラムの各命令に
翻訳する過程で、関数を検出すると、この関数が自己の
プログラム内に定義されていた内部関数の場合、その定
義のプログラム(内容)をワークレジスタのみを使用し
た命令例に展開する。
ログラムの各命令をオブジェクトプログラムの各命令に
翻訳する過程で、関数を検出すると、この関数が自己の
プログラム内に定義されていた内部関数の場合、その定
義のプログラム(内容)をワークレジスタのみを使用し
た命令例に展開する。
【0020】また、検出された関数が呼出命令で指定さ
れる外部関数の場合は、該当関数の定義のプログラム長
を調べて、このプログラム長が規定長以下の場合及び関
数自信のプログラムの中に他の関数の呼出命令がない場
合は、このプログラムをオブジェクトプログラムに翻訳
する。
れる外部関数の場合は、該当関数の定義のプログラム長
を調べて、このプログラム長が規定長以下の場合及び関
数自信のプログラムの中に他の関数の呼出命令がない場
合は、このプログラムをオブジェクトプログラムに翻訳
する。
【0021】一方、検出された外部関数のプログラム長
が規定長を越える場合及び関数自信のプログラムの中に
他の関数の呼出命令がある場合は、ワークレジスタの範
囲を越える懸念があるので、該当外部関数のプログラム
をワークレジスタ内に展開することなく、該当外部関数
に対する呼出命令をそのままオブジェクトプログラムに
翻訳する。
が規定長を越える場合及び関数自信のプログラムの中に
他の関数の呼出命令がある場合は、ワークレジスタの範
囲を越える懸念があるので、該当外部関数のプログラム
をワークレジスタ内に展開することなく、該当外部関数
に対する呼出命令をそのままオブジェクトプログラムに
翻訳する。
【0022】このように、可能な限り多くの関数がワー
クレジスタ内に展開されたオブジェクトプログラムにお
いては、リンケージエディタにおいて、複数のオブジェ
クトプログラムを一つの実行ロードモジュールに編集す
る場合に、ワークレジスタ内に展開された各関数の定義
を示すオブジェクトプログラムをインライン展開処理で
実行ロードモジュール内に組込む。
クレジスタ内に展開されたオブジェクトプログラムにお
いては、リンケージエディタにおいて、複数のオブジェ
クトプログラムを一つの実行ロードモジュールに編集す
る場合に、ワークレジスタ内に展開された各関数の定義
を示すオブジェクトプログラムをインライン展開処理で
実行ロードモジュール内に組込む。
【0023】その結果、最終的にコンピュータにインス
トールされる実行ロードモジュールにおいては、プログ
ラムの実行過程で他のプログラムやシステムライブラリ
に定義された外部関数を参照しにいく回数が減少してプ
ログラムの実行効率が向上する。
トールされる実行ロードモジュールにおいては、プログ
ラムの実行過程で他のプログラムやシステムライブラリ
に定義された外部関数を参照しにいく回数が減少してプ
ログラムの実行効率が向上する。
【0024】
【発明の実施の形態】以下本発明の一実施形態を図面を
用いて説明する。図1は、実施形態のプログラム変換方
法を説明するための模式図である。この図1は図6で示
す複数のソースプログラムをそれぞれオブジェクトプロ
グラムに翻訳して、その後一つの実行ロードモジュール
に編集する場合における、一つのソースプログラム及び
一つのオブジェクトプログラムを取出して示す図であ
る。
用いて説明する。図1は、実施形態のプログラム変換方
法を説明するための模式図である。この図1は図6で示
す複数のソースプログラムをそれぞれオブジェクトプロ
グラムに翻訳して、その後一つの実行ロードモジュール
に編集する場合における、一つのソースプログラム及び
一つのオブジェクトプログラムを取出して示す図であ
る。
【0025】各ソースプログラム11は、対応するコン
パイラ12によって、それぞれ個別にオブジェクトプロ
グラム13に翻訳される。それぞれ翻訳されたオブジェ
クトプログラム13はリンケージエディタ14でもって
一つの実行ロードモジュール15へ編集される。
パイラ12によって、それぞれ個別にオブジェクトプロ
グラム13に翻訳される。それぞれ翻訳されたオブジェ
クトプログラム13はリンケージエディタ14でもって
一つの実行ロードモジュール15へ編集される。
【0026】各ソースプログラム11内には、自己のプ
ログラム内に定義された関数(内部関数)の他に、他の
ソースプログラム11aやシステムライブラリ16にお
いて定義された関数(外部関数)に対する呼出命令が含
まれる。
ログラム内に定義された関数(内部関数)の他に、他の
ソースプログラム11aやシステムライブラリ16にお
いて定義された関数(外部関数)に対する呼出命令が含
まれる。
【0027】このような複数の関数を含むソースプログ
ラム11が入力される各コンパイラ12は図2に示す流
れ図に従って入力されたソースプログラム11に含まれ
る各命令やデータをオブジェクトプログラムの各命令や
データに翻訳する。
ラム11が入力される各コンパイラ12は図2に示す流
れ図に従って入力されたソースプログラム11に含まれ
る各命令やデータをオブジェクトプログラムの各命令や
データに翻訳する。
【0028】S1にて、ソースプログラム11を取込
み、S2にて該当ソースプログラム11で定義された一
つの関数がインライン展開可能か否かを判断する。すな
わち、図3(c)に示すように、関数のプログラム長が
規定長を越える場合及び当該関数自信のプログラムの中
に他の関数の呼出命令が含まれる場合は、インライン展
開不可能と判断して、該当関数を通常の手法で対応する
オブジェクト命令(命令列)に変換(翻訳)する(S
3)。そして、S4にて、ソースプログラム11にまだ
関数が存在する場合はS2へ捩り次の関数を読出す。
み、S2にて該当ソースプログラム11で定義された一
つの関数がインライン展開可能か否かを判断する。すな
わち、図3(c)に示すように、関数のプログラム長が
規定長を越える場合及び当該関数自信のプログラムの中
に他の関数の呼出命令が含まれる場合は、インライン展
開不可能と判断して、該当関数を通常の手法で対応する
オブジェクト命令(命令列)に変換(翻訳)する(S
3)。そして、S4にて、ソースプログラム11にまだ
関数が存在する場合はS2へ捩り次の関数を読出す。
【0029】また、S2でその関数のプログラム長が規
定長以下の場合及び当該関数自信のプログラムの中に他
の関数の呼出命令が含まれない場合、インライン展開可
能と判断して、S5へ進み、図3(a)に示すように、
該当関数を定義するプログラム17を該当ソースプログ
ラムのワークレジスタ18のみを使用した命令列に展開
する。そして、この展開されたプログラム17をオブジ
ェクトプログラムに変換(翻訳)する。
定長以下の場合及び当該関数自信のプログラムの中に他
の関数の呼出命令が含まれない場合、インライン展開可
能と判断して、S5へ進み、図3(a)に示すように、
該当関数を定義するプログラム17を該当ソースプログ
ラムのワークレジスタ18のみを使用した命令列に展開
する。そして、この展開されたプログラム17をオブジ
ェクトプログラムに変換(翻訳)する。
【0030】そして、この場合、図3(a)に示すよう
に、このプログラム17の途中にプログラムの制御を該
当関数の呼出元のプログラム11へ戻るリターン命令1
9が含まれる場合は(S6)、図3(b)に示すよう
に、このリターン命令19を、移動先をプログラム17
の最終位置とした分岐命令19aに変更する(S7)。
に、このプログラム17の途中にプログラムの制御を該
当関数の呼出元のプログラム11へ戻るリターン命令1
9が含まれる場合は(S6)、図3(b)に示すよう
に、このリターン命令19を、移動先をプログラム17
の最終位置とした分岐命令19aに変更する(S7)。
【0031】なお、この場合、レジスタの退避や復帰命
令は作成しない。そして、S8にて該当関数のプログラ
ム17を構成する全ての命令に対するリターン命令19
に対する処理が終了すると、該当関数のプログラム17
をワークレジスタ18内に展開したことを示すフラグを
シンボルテーブル内に該当関数に設定する(S9)。
令は作成しない。そして、S8にて該当関数のプログラ
ム17を構成する全ての命令に対するリターン命令19
に対する処理が終了すると、該当関数のプログラム17
をワークレジスタ18内に展開したことを示すフラグを
シンボルテーブル内に該当関数に設定する(S9)。
【0032】S4にて、入力されたソースプログラム1
1の各命令やデータに対するオブジェクトの各命令への
翻訳処理が終了すると、入力されたソースプログラム1
1に対する一連の翻訳処理を終了する。
1の各命令やデータに対するオブジェクトの各命令への
翻訳処理が終了すると、入力されたソースプログラム1
1に対する一連の翻訳処理を終了する。
【0033】各コンパイラ12から出力された各オブジ
ェクトプログラム13は、リンケージエディタ14へ入
力される。リンケージエディタ14には、前記各オブジ
ェクトプログラム13が入力されるとともに、オブジェ
クトデータに変換された状態のシステムライブラリ16
aが接続されている。
ェクトプログラム13は、リンケージエディタ14へ入
力される。リンケージエディタ14には、前記各オブジ
ェクトプログラム13が入力されるとともに、オブジェ
クトデータに変換された状態のシステムライブラリ16
aが接続されている。
【0034】そして、前記リンケージエディタ14は図
4に示す流れ図に従って、各オブジェクトプログラム1
3を一つの実行ロードモジュール15への編集処理を実
行する。
4に示す流れ図に従って、各オブジェクトプログラム1
3を一つの実行ロードモジュール15への編集処理を実
行する。
【0035】Q1にて、各オブジェクトブログラム13
及びシステムライブラリ16aの読込みを実施する。そ
して、Q2にて、オブジェクトプログラム13を構成す
る一つの命令,データを取出して、該当命令やデータが
外部関数20の呼出命令でない場合は、Q3にて通常の
オブジェクトを生成する。そして、Q4へ進み、オブジ
ェクトプログラム13にまだ読出すべき命令が存在する
場合はQ2へ捩り次の命令を読出す。
及びシステムライブラリ16aの読込みを実施する。そ
して、Q2にて、オブジェクトプログラム13を構成す
る一つの命令,データを取出して、該当命令やデータが
外部関数20の呼出命令でない場合は、Q3にて通常の
オブジェクトを生成する。そして、Q4へ進み、オブジ
ェクトプログラム13にまだ読出すべき命令が存在する
場合はQ2へ捩り次の命令を読出す。
【0036】Q2にて、読出した命令が外部関数20の
呼出指令の場合、Q5へ進み、前述したシンボルテーブ
ルに該当外部関数20に対してワークレジスタ18にプ
ログラム17をワークメモリ18内に展開したことを示
すフラグが設定されていない場合は、該当外部関数20
のプログラム17はワークレジスタ18内に展開されて
いないので、Q6へ進み、該当外部関数20の呼出命令
のオブジェクトを設定する。
呼出指令の場合、Q5へ進み、前述したシンボルテーブ
ルに該当外部関数20に対してワークレジスタ18にプ
ログラム17をワークメモリ18内に展開したことを示
すフラグが設定されていない場合は、該当外部関数20
のプログラム17はワークレジスタ18内に展開されて
いないので、Q6へ進み、該当外部関数20の呼出命令
のオブジェクトを設定する。
【0037】また、Q5にて、シンボルテーブルに該当
外部関数20に対してフラグが設定されていた場合は、
該当外部関数20のプログラム17はワークレジスタ1
8内に既に展開されているので、Q7へ進み、元のオブ
ジェクトブログラム13に該当プログラム17の命令列
を組込むインライン展開処理を実施する。
外部関数20に対してフラグが設定されていた場合は、
該当外部関数20のプログラム17はワークレジスタ1
8内に既に展開されているので、Q7へ進み、元のオブ
ジェクトブログラム13に該当プログラム17の命令列
を組込むインライン展開処理を実施する。
【0038】次に、Q8にて、外部関数20のプログラ
ム17が組込まれた元のオブジェクトプログラム13の
該当部分近傍及び該当関数を構成するプログラムの全て
の命令をチエックする。そして、Q9において、命令列
を組込んだ関数内で展開位置を跨ぐ自番地相対アクセス
命令及び関数内相対アクセス命令が存在すれば、Q10
にて、命令のアクセス位置を補正する。Q11にて、該
当外部関数20のプログラム17を構成する各命令に対
するチエックが終了すると、該当外部関数20に対する
インライン展開処理を終了して、Q4へ進む。
ム17が組込まれた元のオブジェクトプログラム13の
該当部分近傍及び該当関数を構成するプログラムの全て
の命令をチエックする。そして、Q9において、命令列
を組込んだ関数内で展開位置を跨ぐ自番地相対アクセス
命令及び関数内相対アクセス命令が存在すれば、Q10
にて、命令のアクセス位置を補正する。Q11にて、該
当外部関数20のプログラム17を構成する各命令に対
するチエックが終了すると、該当外部関数20に対する
インライン展開処理を終了して、Q4へ進む。
【0039】Q9における相対アクセスでかつアクセス
が展開位置を跨ぐ例を図5の具体例を用いて説明する。
図5(a)は外部関数20のプログラム17を元のオブ
ジェクトブログラム13に組込む前の状態を示す。命令
22は12バイト先の命令24へ分岐する命令である。
そして、この分岐命令22と命令24との間に12バイ
トの命令列23が存在している。
が展開位置を跨ぐ例を図5の具体例を用いて説明する。
図5(a)は外部関数20のプログラム17を元のオブ
ジェクトブログラム13に組込む前の状態を示す。命令
22は12バイト先の命令24へ分岐する命令である。
そして、この分岐命令22と命令24との間に12バイ
トの命令列23が存在している。
【0040】そして、この12バイトの命令列23内に
外部関数20を読出す命令が存在した場合は、図5
(b)に示すように、ワークレジスタ18内に展開され
た該当外部関数20の32バイトのプログラム17(オ
ブジェクトプログラム)が12バイトの命令列23の中
に挿入される。そして、12バイトの命令列23は2つ
の命列23a,23bに分割される。
外部関数20を読出す命令が存在した場合は、図5
(b)に示すように、ワークレジスタ18内に展開され
た該当外部関数20の32バイトのプログラム17(オ
ブジェクトプログラム)が12バイトの命令列23の中
に挿入される。そして、12バイトの命令列23は2つ
の命列23a,23bに分割される。
【0041】この場合、32バイトのプログラム17が
挿入されたことによって、12バイト先の命令24へ分
岐する分岐命令22は目的とする命令24へ分岐せず
に、32バイトのプログラム17内へ分岐する不都合が
発生する。
挿入されたことによって、12バイト先の命令24へ分
岐する分岐命令22は目的とする命令24へ分岐せず
に、32バイトのプログラム17内へ分岐する不都合が
発生する。
【0042】このような事態を防ぐために、展開位置
(プログラム17)を跨ぐ分岐命令22の分岐先を44
バイトに修正した分岐命令22aを設定する。このよう
に構成されたプログラム変換方法においては、複数のソ
ースプログラム11を各コンパイラ12でそれそれ対応
したオブジェクトプログラム13へ翻訳し、その後、各
オブジェクトプログラム13をリンケージエディタ14
で一つの実行ロードモジュール15に編集する過程にお
いて、各ソースプログラム11内に組込まれた各関数
は、最終的な実行ロードモジュール15に編集された状
態においては、呼出命令で指定される外部関数20であ
ってかつ該当外部関数20の定義を示すプログラム17
の長さLが規定長を越えるもの以外は、呼出元のオブジ
ェクトプログラム13内に直接組込まれるインライン展
開処理される。
(プログラム17)を跨ぐ分岐命令22の分岐先を44
バイトに修正した分岐命令22aを設定する。このよう
に構成されたプログラム変換方法においては、複数のソ
ースプログラム11を各コンパイラ12でそれそれ対応
したオブジェクトプログラム13へ翻訳し、その後、各
オブジェクトプログラム13をリンケージエディタ14
で一つの実行ロードモジュール15に編集する過程にお
いて、各ソースプログラム11内に組込まれた各関数
は、最終的な実行ロードモジュール15に編集された状
態においては、呼出命令で指定される外部関数20であ
ってかつ該当外部関数20の定義を示すプログラム17
の長さLが規定長を越えるもの以外は、呼出元のオブジ
ェクトプログラム13内に直接組込まれるインライン展
開処理される。
【0043】具体的には、ソースプログラム11をコン
パイラ12で翻訳する過程で、規定長以下のプログラム
で定義される外部関数20は、その関数のプログラム1
7はそのままワークレジスタ18内に展開される。そし
て、展開された各関数のプログラム17はオブジェクト
プログラム13に翻訳される。なお、規定長を越えるプ
ログラム長の外部関数20は従来と同様に、呼出命令が
使用される。
パイラ12で翻訳する過程で、規定長以下のプログラム
で定義される外部関数20は、その関数のプログラム1
7はそのままワークレジスタ18内に展開される。そし
て、展開された各関数のプログラム17はオブジェクト
プログラム13に翻訳される。なお、規定長を越えるプ
ログラム長の外部関数20は従来と同様に、呼出命令が
使用される。
【0044】このように、規定長を越えるプログラム長
の外部関数以外の各関数のプログラム17がそれぞれワ
ークレジスタ18内に展開された状態でオブジェクトプ
ログラム13が作成される。そして、このオブジェクト
プログラム13を一つの実行ロードモジュール15に編
集する過程で、ワークレジスタ18内に展開された各関
数のプログラム17が呼出元のオブジェクトプログラム
13内に直接組込まれる。
の外部関数以外の各関数のプログラム17がそれぞれワ
ークレジスタ18内に展開された状態でオブジェクトプ
ログラム13が作成される。そして、このオブジェクト
プログラム13を一つの実行ロードモジュール15に編
集する過程で、ワークレジスタ18内に展開された各関
数のプログラム17が呼出元のオブジェクトプログラム
13内に直接組込まれる。
【0045】このように、各ソースプログラム11に含
まれる各種の関数のうち、自己のソースプログラム11
内で定義された内部関数のみならず、他のソースプログ
ラム11やシステムライブラリ16内に定義され外部関
数20のうち定義のプログラム17の長さが短いものも
実行ロードモジュール15に組込む時点でインライン展
開処理を実施している。したがつて、実行ロードモジュ
ール15内において、外部関数20を読出して実行する
回数が大幅に減少して、この実行ロードモジュール15
がインストールされたコンピュータにおけるプログラム
の実行処理効率を向上できる。
まれる各種の関数のうち、自己のソースプログラム11
内で定義された内部関数のみならず、他のソースプログ
ラム11やシステムライブラリ16内に定義され外部関
数20のうち定義のプログラム17の長さが短いものも
実行ロードモジュール15に組込む時点でインライン展
開処理を実施している。したがつて、実行ロードモジュ
ール15内において、外部関数20を読出して実行する
回数が大幅に減少して、この実行ロードモジュール15
がインストールされたコンピュータにおけるプログラム
の実行処理効率を向上できる。
【0046】
【発明の効果】以上説明したように、本発明のプログラ
ム変換方法においては、ソースプログラムに含まれる関
数を自己のプログラム内に定義された関数のみならず、
他のソースプログラムやシステムライブラリに定義され
た関数の一部もワークレジスタのみを用いた命令列に展
開して、最終的にこのワークレジスタ内に展開したプロ
グラムを呼出元のプログラムにインライン展開処理して
いる。
ム変換方法においては、ソースプログラムに含まれる関
数を自己のプログラム内に定義された関数のみならず、
他のソースプログラムやシステムライブラリに定義され
た関数の一部もワークレジスタのみを用いた命令列に展
開して、最終的にこのワークレジスタ内に展開したプロ
グラムを呼出元のプログラムにインライン展開処理して
いる。
【0047】したがって、外部関数を呼出して実行する
回数が大幅に減少して、この実行ロードモジュールがイ
ンストールされたコンピュータにおけるプログラムの実
行処理効率を向上できる。
回数が大幅に減少して、この実行ロードモジュールがイ
ンストールされたコンピュータにおけるプログラムの実
行処理効率を向上できる。
【図1】 本発明の一実施形態のプログラム変換方法を
説明するための模式図
説明するための模式図
【図2】 同プログラム変換方法におけるコンパイラの
翻訳処理動作を示す流れ図
翻訳処理動作を示す流れ図
【図3】 同コンパイラの翻訳処理動作の具体的処理を
説明するための図
説明するための図
【図4】 同プログラム変換方法におけるリンケージエ
ディタの編集処理動作を示す流れ図
ディタの編集処理動作を示す流れ図
【図5】 同リンケージエディタの編集処理動作の具体
的処理を説明するための図
的処理を説明するための図
【図6】 一般的なプログラム変換方法を示す模式図
【図7】 複数の関数が組込まれたソースプログラムを
示す図
示す図
11…ソースプログラム 12…コンパイラ 13…オブジェクトプログラム 14…リンケージエディタ 15…実行ロードモジュール 16…システムナライブラリ 17…プログラム 18…ワークレジスタ 19…リターン命令 22,22a…分岐命令 20…外部関数
Claims (1)
- 【請求項1】 複数のソースプログラムを各プログラム
毎に個別のコンパイラでそれぞれオブジェクトプログラ
ムに翻訳して、さらにこの複数のオブジェクトプログラ
ムをリンケージエディタで一つの実行ロードモジュール
に編集するプログラム変換方法において、 前記各コンパイラは、 前記ソースプログラムを前記オブジェクトプログラムに
翻訳するに際して、前記ソースプログラムに含まれる関
数を検出すると、該当関数のプログラム長が規定長以下
の場合及び当該関数自信のプログラムの中に他の関数の
呼出命令がない場合、該当関数を自己のワークレジスタ
のみを使用した命令列に展開し、 その後、このワークレジスタのみを使用した命令列に展
開された関数をオブジェクトプログラムに翻訳し、 前記リンケージエディタは、 前記各オブジェクトプログラムを実行ロードモジュール
に編集する際に、前記各オブジェクトプログラムに前記
規定長以下の関数及び他の関数の呼出命令がない関数を
検出すると、該当オブジェクトプログラムのワークレジ
スタのみを使用した命令列に展開された該当関数のオブ
ジェクトプログラムをインライン展開処理で前記実行ロ
ードモジュールに編集することを特徴とするプログラム
変換方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP18377897A JPH1124939A (ja) | 1997-07-09 | 1997-07-09 | プログラム変換方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP18377897A JPH1124939A (ja) | 1997-07-09 | 1997-07-09 | プログラム変換方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH1124939A true JPH1124939A (ja) | 1999-01-29 |
Family
ID=16141788
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP18377897A Pending JPH1124939A (ja) | 1997-07-09 | 1997-07-09 | プログラム変換方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH1124939A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009129327A (ja) * | 2007-11-27 | 2009-06-11 | Fuji Electric Holdings Co Ltd | プログラム開発支援装置、プログラム開発支援方法およびプログラム開発支援プログラム |
US9852872B2 (en) | 2013-08-29 | 2017-12-26 | Toshiba Hokuto Electronics Corporation | Magnetron |
-
1997
- 1997-07-09 JP JP18377897A patent/JPH1124939A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009129327A (ja) * | 2007-11-27 | 2009-06-11 | Fuji Electric Holdings Co Ltd | プログラム開発支援装置、プログラム開発支援方法およびプログラム開発支援プログラム |
US9852872B2 (en) | 2013-08-29 | 2017-12-26 | Toshiba Hokuto Electronics Corporation | Magnetron |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6243864B1 (en) | Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths | |
US6367067B1 (en) | Program conversion apparatus for constant reconstructing VLIW processor | |
JP2666847B2 (ja) | 異種言語間連絡方式 | |
JPH0638234B2 (ja) | 変換されたプログラムコードのソース命令不可分性を保持するためのシステムおよび方法 | |
JPH1124939A (ja) | プログラム変換方法 | |
JPS62226231A (ja) | プロセツサ | |
US5568623A (en) | Method for rearranging instruction sequence in risc architecture | |
JPH0683615A (ja) | 命令セットエミュレーションを行う計算機 | |
Barnard et al. | Hierarchic syntax error repair for LR grammars | |
JP3267550B2 (ja) | デグレードチェック装置 | |
US5819081A (en) | Method of executing a branch instruction of jumping to a subroutine in a pipeline control system | |
EP0633525B1 (en) | Method for compilation of programming languages | |
JP2000231494A (ja) | ソフトウェア実行システム及びソフトウェア実行方法 | |
JPH086797A (ja) | 定数参照最適化処理装置 | |
JP2606658B2 (ja) | 論理シミュレータおよび制御方法 | |
JPH04365133A (ja) | プレロード命令実行装置及びプログラム修正装置 | |
JPH09114655A (ja) | 高水準言語レベルでのパッチ作成・運用方式 | |
JPS6220032A (ja) | 情報処理装置 | |
JP2573391B2 (ja) | プログラマブルコントローラ | |
JPH01267731A (ja) | セグメントオーバレイプログラムの作成方式 | |
JPS6126692B2 (ja) | ||
JPS6132143A (ja) | フア−ムウエア支援システム | |
JPH0535493A (ja) | アセンブラにおける汎用逆アセンブラ処理方式 | |
JPH05100865A (ja) | コンパイル方式 | |
JPH10232772A (ja) | プログラム変更装置 |