JP3237693B2 - 言語処理装置および言語処理方法 - Google Patents
言語処理装置および言語処理方法Info
- Publication number
- JP3237693B2 JP3237693B2 JP23721196A JP23721196A JP3237693B2 JP 3237693 B2 JP3237693 B2 JP 3237693B2 JP 23721196 A JP23721196 A JP 23721196A JP 23721196 A JP23721196 A JP 23721196A JP 3237693 B2 JP3237693 B2 JP 3237693B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- size
- pattern
- module file
- object module
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
【0001】
【発明が属する技術分野】本発明は、言語処理装置およ
び言語処理方法に関し、特にプログラム作成者が指定し
たコードサイズの範囲内で実行速度の速いオブジェクト
を生成することができる言語処理装置及び言語処理方法
に関する。
び言語処理方法に関し、特にプログラム作成者が指定し
たコードサイズの範囲内で実行速度の速いオブジェクト
を生成することができる言語処理装置及び言語処理方法
に関する。
【0002】
【従来の技術】言語処理プログラムが入力したソースプ
ログラムを翻訳し、その結果として生成したファイルを
オブジェクト・モジュール・ファイル(以下、オブジェ
クトと呼ぶ)と言う。
ログラムを翻訳し、その結果として生成したファイルを
オブジェクト・モジュール・ファイル(以下、オブジェ
クトと呼ぶ)と言う。
【0003】マイクロコンピュータ、特にシングルチッ
プマイクロコンピュータにおいては、コストの低減を図
るため、性能面で制限が生じる傾向にある。従って、言
語処理プログラムにおいては、言語処理を行った結果で
あるオブジェクトの実行速度(以下、単に実行速度と呼
ぶ)が速いこと、及びオプジェクトのサイズ(以下、コ
ードサイズと呼ぶ)が小さいことが望まれている。
プマイクロコンピュータにおいては、コストの低減を図
るため、性能面で制限が生じる傾向にある。従って、言
語処理プログラムにおいては、言語処理を行った結果で
あるオブジェクトの実行速度(以下、単に実行速度と呼
ぶ)が速いこと、及びオプジェクトのサイズ(以下、コ
ードサイズと呼ぶ)が小さいことが望まれている。
【0004】従来の言語処理装置では、入力されたソー
スプログラムに対して、コードサイズと実行速度のどち
らかを重視した最適化を行ったオブジェクトの出力を行
っている。
スプログラムに対して、コードサイズと実行速度のどち
らかを重視した最適化を行ったオブジェクトの出力を行
っている。
【0005】図10に従来の言語処理装置の構成を示
す。
す。
【0006】図10において、言語処理装置82は、入
力したソース・プログラム・ファイル81を構文解析部
83で解析する。構文解析の終了後、コード生成部84
に制御を移し、解析された結果およびプログラム作成者
の指定に基づいて命令を選択して出力コードを生成す
る。コード生成の終了後、オブジェクト出力部85に制
御を移し、オブジェクト・モジュール・ファイル86を
出力する。
力したソース・プログラム・ファイル81を構文解析部
83で解析する。構文解析の終了後、コード生成部84
に制御を移し、解析された結果およびプログラム作成者
の指定に基づいて命令を選択して出力コードを生成す
る。コード生成の終了後、オブジェクト出力部85に制
御を移し、オブジェクト・モジュール・ファイル86を
出力する。
【0007】コード生成部84において、言語処理装置
82が複数の出力コードパターンを生成し、いずれかの
出力コードパターンを選択できる場合には、プログラム
作成者の選択により出力コードパターンの選択を行う。
すなわち、コードサイズを優先する出力を指定した場合
には、コードサイズ優先コード生成部841に制御を移
し、コードサイズが小さくなるようにコード生成を行
う。コードサイズ優先コード生成部841では、実行速
度の向上よりもコードサイズの縮小を優先するため、生
成されたオブジェクトの実行速度が遅くなることがあり
得る。一方、プログラム作成者が実行速度を優先する出
力を指定した場合には、実行速度優先コード生成部84
2に制御を移し、実行速度が速くなるようにコード生成
を行う。実行速度優先コード生成部842では、コード
サイズの縮小よりも実行速度の向上を優先するため、コ
ードサイズが増大することがあり得る。
82が複数の出力コードパターンを生成し、いずれかの
出力コードパターンを選択できる場合には、プログラム
作成者の選択により出力コードパターンの選択を行う。
すなわち、コードサイズを優先する出力を指定した場合
には、コードサイズ優先コード生成部841に制御を移
し、コードサイズが小さくなるようにコード生成を行
う。コードサイズ優先コード生成部841では、実行速
度の向上よりもコードサイズの縮小を優先するため、生
成されたオブジェクトの実行速度が遅くなることがあり
得る。一方、プログラム作成者が実行速度を優先する出
力を指定した場合には、実行速度優先コード生成部84
2に制御を移し、実行速度が速くなるようにコード生成
を行う。実行速度優先コード生成部842では、コード
サイズの縮小よりも実行速度の向上を優先するため、コ
ードサイズが増大することがあり得る。
【0008】次に、図11を参照して従来の処理のアル
ゴリズムを説明する。
ゴリズムを説明する。
【0009】従来の言語処理方式では、まず、プログラ
ム作成者が入力したソースプログラム・ファイルの構文
解析を行う(ステップ901)。次に、プログラム作成
者がコードサイズを優先する指定をしたか、または実行
速度を優先する指定をしたかを判断し(ステップ90
2)、コードサイズを優先する指定があった場合には、
コード生成で複数の出力コードパターンを選択できると
ころで、コードサイズが小さくなるように出力コードを
生成する(ステップ903)。一方、実行速度を優先す
る指定があった場合には、コード生成で複数の出力コー
ドパターンを選択できるところで、実行速度が速くなる
ように出力コードを生成する(ステップ904)。そし
て、出力コードの生成が終了した後、オブジェクトを出
力する(ステップ905)。
ム作成者が入力したソースプログラム・ファイルの構文
解析を行う(ステップ901)。次に、プログラム作成
者がコードサイズを優先する指定をしたか、または実行
速度を優先する指定をしたかを判断し(ステップ90
2)、コードサイズを優先する指定があった場合には、
コード生成で複数の出力コードパターンを選択できると
ころで、コードサイズが小さくなるように出力コードを
生成する(ステップ903)。一方、実行速度を優先す
る指定があった場合には、コード生成で複数の出力コー
ドパターンを選択できるところで、実行速度が速くなる
ように出力コードを生成する(ステップ904)。そし
て、出力コードの生成が終了した後、オブジェクトを出
力する(ステップ905)。
【0010】このような従来技術の例として、例えば文
献「マイクロソフトC オプティマイジング コンパイ
ラ ユーザーズガイド」(1988年マイクロソフト株
式会社)に開示された技術がある。同文献には、言語処
理装置実行時のオプションにより、オブジェクトのコー
ドサイズを優先する出力を行うか、オブジェクトの実行
速度を優先する出力を行うかを選択して出力コードを生
成する技術が記載されている。
献「マイクロソフトC オプティマイジング コンパイ
ラ ユーザーズガイド」(1988年マイクロソフト株
式会社)に開示された技術がある。同文献には、言語処
理装置実行時のオプションにより、オブジェクトのコー
ドサイズを優先する出力を行うか、オブジェクトの実行
速度を優先する出力を行うかを選択して出力コードを生
成する技術が記載されている。
【0011】
【発明が解決しようとする課題】上述した従来の言語処
理技術では、プログラム作成者がオブジェクトに対して
コードサイズの縮小と実行速度の向上とを同時に望んだ
場合に、コードサイズと実行速度の両方に対してプログ
ラム作成者が望む条件を十分に満たすオブジェクトを出
力することが困難であるという問題点があった。その理
由は、上記従来の技術では、コードサイズの縮小を優先
するか、実行速度の向上を優先するかの二者択一の選択
しかできず、コードサイズを優先する指定では実行速度
が遅くなる場合があり、実行速度を優先する指定ではコ
ードサイズが大きくなってしまう場合があるためであ
る。コードサイズ及び実行速度は命令コードに依存する
が、最小かつ最速の命令が常に存在するとは限らない。
従って、コードサイズを最小にすると実行速度が遅くな
ることがあり、実行速度を最速にするとコードサイズが
大きくなることがある。
理技術では、プログラム作成者がオブジェクトに対して
コードサイズの縮小と実行速度の向上とを同時に望んだ
場合に、コードサイズと実行速度の両方に対してプログ
ラム作成者が望む条件を十分に満たすオブジェクトを出
力することが困難であるという問題点があった。その理
由は、上記従来の技術では、コードサイズの縮小を優先
するか、実行速度の向上を優先するかの二者択一の選択
しかできず、コードサイズを優先する指定では実行速度
が遅くなる場合があり、実行速度を優先する指定ではコ
ードサイズが大きくなってしまう場合があるためであ
る。コードサイズ及び実行速度は命令コードに依存する
が、最小かつ最速の命令が常に存在するとは限らない。
従って、コードサイズを最小にすると実行速度が遅くな
ることがあり、実行速度を最速にするとコードサイズが
大きくなることがある。
【0012】本発明の目的は、プログラム作成者が指定
したコードサイズで、実行速度の速いオブジェクトを生
成することができる言語処理装置および言語処理方法を
提供することである。
したコードサイズで、実行速度の速いオブジェクトを生
成することができる言語処理装置および言語処理方法を
提供することである。
【0013】本発明の他の目的は、プログラム作成者自
身がオブジェクトのコードサイズを自由に決定できる言
語処理装置および言語処理方法を提供することである。
身がオブジェクトのコードサイズを自由に決定できる言
語処理装置および言語処理方法を提供することである。
【0014】
【課題を解決するための手段】上記の目的を達成するた
め、本発明の言語処理装置は、ソースプログラムを入力
して解析する構文解析部と、解析された結果に基づいて
命令コードを生成するコード生成部と、生成された命令
コードをオブジェクト・モジュール・ファイルに出力す
るオブジェクト出力部とを備える言語処理装置におい
て、前記オブジェクト・モジュール・ファイルのサイズ
を小さくすることを優先した場合の生成コードと、前記
オブジェクト・モジュール・ファイルの実行速度を速く
することを優先した場合の生成コードとで異なるコード
を出力するパターンについて、それぞれのコード生成方
法、コード生成によるコードサイズの差を登録しておく
コードパターン登録部と、前記オブジェクト・モジュー
ル・ファイルのサイズを小さくすることを優先してコー
ド生成を行った場合の前記オブジェクト・モジュール・
ファイルのサイズと、前記オブジェクト・モジュール・
ファイルの実行速度を速くすることを優先してコード生
成を行った場合の前記オブジェクト・モジュール・ファ
イルのサイズとを測定し、かつ生成された命令コード中
で、前記コードパターン登録部に登録されている出力コ
ードの各パターンを使用した回数を測定するコードサイ
ズ測定部と、前記コードサイズ測定部の測定結果と前記
コードパターン登録部の登録内容を参照し、プログラム
作成者が指定した前記オブジェクト・モジュール・ファ
イルのコードサイズ内に収まるように、前記オブジェク
ト・モジュール・ファイルの実行速度を優先した生成コ
ードの一部または全部を、前記オブジェクト・モジュー
ル・ファイルのサイズを優先した生成コードに置き換え
るコードパターン選択部とを備え 、 前記コードパターン
登録部が、前記オブジェクト・モジュール・ファイルの
実行速度の劣化を抑え、前記オブジェクト・モジュール
・ファイルのサイズをより小さくすることができる順番
にコードパターンを登録することを特徴とする。
め、本発明の言語処理装置は、ソースプログラムを入力
して解析する構文解析部と、解析された結果に基づいて
命令コードを生成するコード生成部と、生成された命令
コードをオブジェクト・モジュール・ファイルに出力す
るオブジェクト出力部とを備える言語処理装置におい
て、前記オブジェクト・モジュール・ファイルのサイズ
を小さくすることを優先した場合の生成コードと、前記
オブジェクト・モジュール・ファイルの実行速度を速く
することを優先した場合の生成コードとで異なるコード
を出力するパターンについて、それぞれのコード生成方
法、コード生成によるコードサイズの差を登録しておく
コードパターン登録部と、前記オブジェクト・モジュー
ル・ファイルのサイズを小さくすることを優先してコー
ド生成を行った場合の前記オブジェクト・モジュール・
ファイルのサイズと、前記オブジェクト・モジュール・
ファイルの実行速度を速くすることを優先してコード生
成を行った場合の前記オブジェクト・モジュール・ファ
イルのサイズとを測定し、かつ生成された命令コード中
で、前記コードパターン登録部に登録されている出力コ
ードの各パターンを使用した回数を測定するコードサイ
ズ測定部と、前記コードサイズ測定部の測定結果と前記
コードパターン登録部の登録内容を参照し、プログラム
作成者が指定した前記オブジェクト・モジュール・ファ
イルのコードサイズ内に収まるように、前記オブジェク
ト・モジュール・ファイルの実行速度を優先した生成コ
ードの一部または全部を、前記オブジェクト・モジュー
ル・ファイルのサイズを優先した生成コードに置き換え
るコードパターン選択部とを備え 、 前記コードパターン
登録部が、前記オブジェクト・モジュール・ファイルの
実行速度の劣化を抑え、前記オブジェクト・モジュール
・ファイルのサイズをより小さくすることができる順番
にコードパターンを登録することを特徴とする。
【0015】請求項2の本発明の言語処理装置は、前記
コードパターン選択部が、各コードパターンの使用回数
のうち、オブジェクトのサイズを優先するコード生成を
行う回数を決定することを特徴とする。
コードパターン選択部が、各コードパターンの使用回数
のうち、オブジェクトのサイズを優先するコード生成を
行う回数を決定することを特徴とする。
【0016】また、上記の目的を達成する本発明の言語
処理方法は、ソースプログラムを入力して解析する第1
のステップと、解析された結果に基づいて命令コードを
生成する第2のステップと、生成された命令コードをオ
ブジェクト・モジュール・ファイルに出力する第3のス
テップとを有する言語処理方法において、前記ソースプ
ログラムを解析する第1のステップと命令コードを生成
する第2のステップとの間に、前記オブジェクト・モジ
ュール・ファイルのサイズを小さくすることを優先した
場合の生成コードと、前記オブジェクト・モジュール・
ファイルの実行速度を速くすることを優先した場合の生
成コードとで異なるコードを出力するパターンについ
て、それぞれのコード生成方法、コード生成によるコー
ドサイズの差を登録しておく第4のステップと、前記オ
ブジェクト・モジュール・ファイルのサイズを小さくす
ることを優先してコード生成を行った場合の前記オブジ
ェクト・モジュール・ファイルのサイズと、前記オブジ
ェクト・モジュール・ファイルの実行速度を速くするこ
とを優先してコード生成を行った場合の前記オブジェク
ト・モジュール・ファイルのサイズとを測定し、かつ生
成された命令コード中で、登録されている出力コードの
各パターンを使用した回数を測定する第5のステップ
と、前記コードパターンを登録する第4のステップによ
る登録内容および前記コードサイズを測定する第5のス
テップによる測定結果を参照して、プログラム作成者が
指定した前記オブジェクト・モジュール・ファイルのコ
ードサイズ内に収まるように、前記オブジェクト・モジ
ュール・ファイルの実行速度を優先した生成コードの一
部または全部を、前記オブジェクト・モジュール・ファ
イルのサイズを優先した生成コードに置き換える第6の
ステップとを含み 、 前記コードパターンを登録する第4
のステップが、前記オブジェクト・モジュール・ファイ
ルの実行速度の劣化を抑え、前記オブジェクト・モジュ
ール・ファイルのサイズをより小さくすることができる
順番にコードパターンを登録するステップを含むことを
特徴とする。
処理方法は、ソースプログラムを入力して解析する第1
のステップと、解析された結果に基づいて命令コードを
生成する第2のステップと、生成された命令コードをオ
ブジェクト・モジュール・ファイルに出力する第3のス
テップとを有する言語処理方法において、前記ソースプ
ログラムを解析する第1のステップと命令コードを生成
する第2のステップとの間に、前記オブジェクト・モジ
ュール・ファイルのサイズを小さくすることを優先した
場合の生成コードと、前記オブジェクト・モジュール・
ファイルの実行速度を速くすることを優先した場合の生
成コードとで異なるコードを出力するパターンについ
て、それぞれのコード生成方法、コード生成によるコー
ドサイズの差を登録しておく第4のステップと、前記オ
ブジェクト・モジュール・ファイルのサイズを小さくす
ることを優先してコード生成を行った場合の前記オブジ
ェクト・モジュール・ファイルのサイズと、前記オブジ
ェクト・モジュール・ファイルの実行速度を速くするこ
とを優先してコード生成を行った場合の前記オブジェク
ト・モジュール・ファイルのサイズとを測定し、かつ生
成された命令コード中で、登録されている出力コードの
各パターンを使用した回数を測定する第5のステップ
と、前記コードパターンを登録する第4のステップによ
る登録内容および前記コードサイズを測定する第5のス
テップによる測定結果を参照して、プログラム作成者が
指定した前記オブジェクト・モジュール・ファイルのコ
ードサイズ内に収まるように、前記オブジェクト・モジ
ュール・ファイルの実行速度を優先した生成コードの一
部または全部を、前記オブジェクト・モジュール・ファ
イルのサイズを優先した生成コードに置き換える第6の
ステップとを含み 、 前記コードパターンを登録する第4
のステップが、前記オブジェクト・モジュール・ファイ
ルの実行速度の劣化を抑え、前記オブジェクト・モジュ
ール・ファイルのサイズをより小さくすることができる
順番にコードパターンを登録するステップを含むことを
特徴とする。
【0017】請求項4の本発明の言語処理方法は、前記
コードパターン選択ステップが、各コードパターンの使
用回数のうち、前記オブジェクト・モジュール・ファイ
ルのサイズを優先するコード生成を行う回数を決定する
ステップを含むことを特徴とする。
コードパターン選択ステップが、各コードパターンの使
用回数のうち、前記オブジェクト・モジュール・ファイ
ルのサイズを優先するコード生成を行う回数を決定する
ステップを含むことを特徴とする。
【0018】
【0019】
【0020】
【発明の実施の形態】以下、本発明の実施例について図
面を参照して詳細に説明する。
面を参照して詳細に説明する。
【0021】図1は、本発明の第1の実施例による言語
処理装置の構成を示すブロック図である。
処理装置の構成を示すブロック図である。
【0022】図示のように、言語処理装置12は、ソー
ス・プログラム・ファイル11を入力して内容を解析す
る構文解析部13と、構文解析の結果を元にコード生成
を行うコード生成部17と、コード生成部17で生成さ
れたコードをオブジェクト・モジュール・ファイル19
として出力するオブジェクト出力部18を備えると共
に、コードサイズを優先する時と実行速度を優先する時
とで出力コードが異なるコードパターンの情報が登録し
てあるコードパターン登録部16と、コードサイズを測
定しコードパターン登録部16に登録してあるコードパ
ターンの使用回数を測定するコードサイズ測定部14
と、出力コードをプログラム作成者の指定したコードサ
イズ以内にするため出力コードパターンを選択するコー
ドパターン選択部15とを備える。以上の構成におい
て、構文解析部13とコード生成部17とオブジェクト
出力部18の機能は、従来のものと同様である。
ス・プログラム・ファイル11を入力して内容を解析す
る構文解析部13と、構文解析の結果を元にコード生成
を行うコード生成部17と、コード生成部17で生成さ
れたコードをオブジェクト・モジュール・ファイル19
として出力するオブジェクト出力部18を備えると共
に、コードサイズを優先する時と実行速度を優先する時
とで出力コードが異なるコードパターンの情報が登録し
てあるコードパターン登録部16と、コードサイズを測
定しコードパターン登録部16に登録してあるコードパ
ターンの使用回数を測定するコードサイズ測定部14
と、出力コードをプログラム作成者の指定したコードサ
イズ以内にするため出力コードパターンを選択するコー
ドパターン選択部15とを備える。以上の構成におい
て、構文解析部13とコード生成部17とオブジェクト
出力部18の機能は、従来のものと同様である。
【0023】コードパターン登録部16は、コードサイ
ズを優先した場合と実行速度を優先した場合とでコード
生成が異なる部分に関して、コードサイズを優先した場
合のコードパターンと、実行速度を優先した場合のコー
ドパターンと、コードサイズを優先した場合のコードパ
ターンと実行速度を優先した場合のコードパターンとの
コードサイズの差とを登録しておく。コードサイズを優
先した場合と実行速度を優先した場合とでオブジェクト
のコードサイズが異なる場合は、コードパターン登録部
16に登録されたコードパターンが少なくとも1つは存
在し、登録されたコードパターンによって生成コードの
違いが生じることになる。生成コードの違いが生じる
と、コードサイズを優先した場合と実行速度を優先した
場合とのオブジェクトのコードサイズに差が生じ、一般
に、実行速度を優先した場合のコードサイズが大きくな
る。
ズを優先した場合と実行速度を優先した場合とでコード
生成が異なる部分に関して、コードサイズを優先した場
合のコードパターンと、実行速度を優先した場合のコー
ドパターンと、コードサイズを優先した場合のコードパ
ターンと実行速度を優先した場合のコードパターンとの
コードサイズの差とを登録しておく。コードサイズを優
先した場合と実行速度を優先した場合とでオブジェクト
のコードサイズが異なる場合は、コードパターン登録部
16に登録されたコードパターンが少なくとも1つは存
在し、登録されたコードパターンによって生成コードの
違いが生じることになる。生成コードの違いが生じる
と、コードサイズを優先した場合と実行速度を優先した
場合とのオブジェクトのコードサイズに差が生じ、一般
に、実行速度を優先した場合のコードサイズが大きくな
る。
【0024】コードサイズ測定部14は、コードサイズ
を優先した場合のオブジェクトのコードサイズ、および
実行速度を優先した場合のオブジェクトのコードサイズ
を測定する。コードサイズの測定は、コード生成部17
と同様の処理方法で実現可能である。測定した2つのコ
ードサイズ値はコードパターン選択部15の処理におい
て使用される。
を優先した場合のオブジェクトのコードサイズ、および
実行速度を優先した場合のオブジェクトのコードサイズ
を測定する。コードサイズの測定は、コード生成部17
と同様の処理方法で実現可能である。測定した2つのコ
ードサイズ値はコードパターン選択部15の処理におい
て使用される。
【0025】コードサイズ測定部14によるコードサイ
ズ測定処理と並行して、コードパターン登録部16に登
録されたコードパターンが、それぞれ何回使用されたか
を測定し、コードパターン登録部16に各コードパター
ンの使用回数を保存する。コードパターン登録部16に
保存された各コードパターンの使用回数は、コードパタ
ーン選択部15の処理において使用される。
ズ測定処理と並行して、コードパターン登録部16に登
録されたコードパターンが、それぞれ何回使用されたか
を測定し、コードパターン登録部16に各コードパター
ンの使用回数を保存する。コードパターン登録部16に
保存された各コードパターンの使用回数は、コードパタ
ーン選択部15の処理において使用される。
【0026】コードパターン選択部15は、コードパタ
ーン登録部16に保存された各コードパターンに対し
て、コードサイズを優先するコード生成を行うか実行速
度を優先するコード生成を行うかを選択するための情報
を設定する。設定した情報を参照することによって、オ
ブジェクトのコードサイズがプログラム作成者の指定し
たコードサイズ以内に収まるように、実行速度を優先し
た場合のオブジェクトの生成コードの一部または全部
を、コードサイズを優先した場合の生成コードに置き換
えることができる。
ーン登録部16に保存された各コードパターンに対し
て、コードサイズを優先するコード生成を行うか実行速
度を優先するコード生成を行うかを選択するための情報
を設定する。設定した情報を参照することによって、オ
ブジェクトのコードサイズがプログラム作成者の指定し
たコードサイズ以内に収まるように、実行速度を優先し
た場合のオブジェクトの生成コードの一部または全部
を、コードサイズを優先した場合の生成コードに置き換
えることができる。
【0027】コード生成部17は、コードパターン選択
部15による選択結果にしたがって、コードサイズ優先
コード生成部171または実行速度優先コード生成部1
72においてコード生成を行う。コードサイズ優先コー
ド生成部171では、コードサイズが小さくなるように
コード生成を行い、実行速度優先コード生成部172で
は、実行速度が速くなるようにコード生成を行う。コー
ド生成部17でのコード生成は、コードサイズを優先し
たコード生成と、実行速度を優先したコード生成が混在
することになる。コード生成の終了後は、オブジェクト
出力部18に制御を移し、オブジェクトを出力する。
部15による選択結果にしたがって、コードサイズ優先
コード生成部171または実行速度優先コード生成部1
72においてコード生成を行う。コードサイズ優先コー
ド生成部171では、コードサイズが小さくなるように
コード生成を行い、実行速度優先コード生成部172で
は、実行速度が速くなるようにコード生成を行う。コー
ド生成部17でのコード生成は、コードサイズを優先し
たコード生成と、実行速度を優先したコード生成が混在
することになる。コード生成の終了後は、オブジェクト
出力部18に制御を移し、オブジェクトを出力する。
【0028】次に、図2及び図3のフローチャートを参
照して本実施例の処理の詳細を説明する。
照して本実施例の処理の詳細を説明する。
【0029】まず、プログラム作成者が希望するコード
サイズを指定する(図2、ステップ201)。指定した
値は、メモリ上の特定された領域(「user」と称
す)に格納される。
サイズを指定する(図2、ステップ201)。指定した
値は、メモリ上の特定された領域(「user」と称
す)に格納される。
【0030】プログラム作成者が希望するコードサイズ
を指定すると、構文解析部13が、ソース・プログラム
・ファイル11の内容を構文解析する(ステップ20
2)。構文解析が終了すると、コードサイズ測定部14
が、コードサイズを優先した場合のオブジェクトのコー
ドサイズを測定する(ステップ203)。ステップ20
3のコードサイズ測定処理と並行して、コードパターン
登録部16に登録されているコードパターンの使用回数
を測定する(ステップ204)。
を指定すると、構文解析部13が、ソース・プログラム
・ファイル11の内容を構文解析する(ステップ20
2)。構文解析が終了すると、コードサイズ測定部14
が、コードサイズを優先した場合のオブジェクトのコー
ドサイズを測定する(ステップ203)。ステップ20
3のコードサイズ測定処理と並行して、コードパターン
登録部16に登録されているコードパターンの使用回数
を測定する(ステップ204)。
【0031】図4はコードパターン登録部16の登録内
容の例である。コードパターン登録部16には、コード
サイズを優先した場合の生成コード1A、2A、・・
・、実行速度を優先した場合の生成コード1B、2B、
・・・、コードサイズを優先した場合の生成コードと実
行速度を優先した場合の生成コードとのコードサイズ差
d[1]、d[2]、・・・、及びコードパターンの使
用回数cnt[1]、cnt[2]、・・・がそれぞれ
メモリ上の領域として確保されている。k番目のコード
パターンについては、コードサイズを優先した場合の生
成コードkA、実行速度を優先した場合の生成コードk
B、kAとkBとのコードサイズ差d[k]が登録され
ている。kAとkBとは生成コードは違うが、同じ動作
をするコードである。ステップ204で測定した使用回
数は、領域cnt[k]に設定される。
容の例である。コードパターン登録部16には、コード
サイズを優先した場合の生成コード1A、2A、・・
・、実行速度を優先した場合の生成コード1B、2B、
・・・、コードサイズを優先した場合の生成コードと実
行速度を優先した場合の生成コードとのコードサイズ差
d[1]、d[2]、・・・、及びコードパターンの使
用回数cnt[1]、cnt[2]、・・・がそれぞれ
メモリ上の領域として確保されている。k番目のコード
パターンについては、コードサイズを優先した場合の生
成コードkA、実行速度を優先した場合の生成コードk
B、kAとkBとのコードサイズ差d[k]が登録され
ている。kAとkBとは生成コードは違うが、同じ動作
をするコードである。ステップ204で測定した使用回
数は、領域cnt[k]に設定される。
【0032】ステップ203のコードサイズ測定により
得られたコードサイズは、メモリ上の領域(「cod
e」と称す)に格納される(ステップ205)。
得られたコードサイズは、メモリ上の領域(「cod
e」と称す)に格納される(ステップ205)。
【0033】ステップ205が終了すると、コードサイ
ズ測定部14が、構文解析部11での構文解析の結果を
再度参照し、実行速度を優先した場合のオブジェクトの
コードサイズを測定する(ステップ206)。ステップ
206のコードサイズ測定により得られたコードサイズ
は、メモリ上の領域(「speed」と称す)に格納さ
れる(ステップ207)。
ズ測定部14が、構文解析部11での構文解析の結果を
再度参照し、実行速度を優先した場合のオブジェクトの
コードサイズを測定する(ステップ206)。ステップ
206のコードサイズ測定により得られたコードサイズ
は、メモリ上の領域(「speed」と称す)に格納さ
れる(ステップ207)。
【0034】ステップ207の終了後は、コードパター
ン選択部15に制御を移す。まず、出力予定のオブジェ
クトのコードサイズの初期設定を行い、メモリ上の領域
(「size」と称す)に格納する(ステップ20
8)。初期設定値は、実行速度を優先した場合のコード
サイズ「speed」とする。
ン選択部15に制御を移す。まず、出力予定のオブジェ
クトのコードサイズの初期設定を行い、メモリ上の領域
(「size」と称す)に格納する(ステップ20
8)。初期設定値は、実行速度を優先した場合のコード
サイズ「speed」とする。
【0035】ステップ208の終了後は、コードパター
ン登録部16に登録されている各コードパターンについ
て、メモリ上の領域flag[1]、flag[2]、
・・・を「0」に初期化する(ステップ209)。fl
ag[1]、flag[2]、・・・とは、コードサイ
ズを優先するコード生成を行うか実行速度を優先するコ
ード生成を行うかを判断するためのフラグを表す。フラ
グflag[k]は、コードパターン登録部16のk番
目に登録されているコードパターンについてのフラグを
表す。フラグflag[]は、「0」のときにフラグが
隆りた状態を示し、「0」以外のときにフラグが立った
状態を示すものとする。コード生成では、それぞれのコ
ードパターンに対し、フラグが立っているならばコード
サイズを優先するコード生成を行い、フラグが降りてい
るならば実行速度を優先するコード生成を行うことにな
る。ステップ209のフラグflag[]の初期化後
は、フラグflag[]はすべて降りた状態になるの
で、このままコード生成を行ったと仮定すると、複数の
コード生成が可能なすべての記述において、実行速度を
優先したコード生成を行うことになる。
ン登録部16に登録されている各コードパターンについ
て、メモリ上の領域flag[1]、flag[2]、
・・・を「0」に初期化する(ステップ209)。fl
ag[1]、flag[2]、・・・とは、コードサイ
ズを優先するコード生成を行うか実行速度を優先するコ
ード生成を行うかを判断するためのフラグを表す。フラ
グflag[k]は、コードパターン登録部16のk番
目に登録されているコードパターンについてのフラグを
表す。フラグflag[]は、「0」のときにフラグが
隆りた状態を示し、「0」以外のときにフラグが立った
状態を示すものとする。コード生成では、それぞれのコ
ードパターンに対し、フラグが立っているならばコード
サイズを優先するコード生成を行い、フラグが降りてい
るならば実行速度を優先するコード生成を行うことにな
る。ステップ209のフラグflag[]の初期化後
は、フラグflag[]はすべて降りた状態になるの
で、このままコード生成を行ったと仮定すると、複数の
コード生成が可能なすべての記述において、実行速度を
優先したコード生成を行うことになる。
【0036】ステップ209のフラグflag[]の初
期化が終了すると、プログラム作成者が指定したコード
サイズ「user」とコードサイズを優先した場合のコ
ードサイズ「code」とを比較する(図3、ステップ
210)。プログラム作成者が指定したコードサイズ
「user」が、コードサイズを優先した場合のコード
サイズ「code」以下である場合は、コードサイズを
優先するコード生成を行うフラグflag[1]、fl
ag[2]、・・・をすべて立て(ステップ211)、
コード生成部17に制御を移し、ステップ217以降の
コード生成処理を行う。
期化が終了すると、プログラム作成者が指定したコード
サイズ「user」とコードサイズを優先した場合のコ
ードサイズ「code」とを比較する(図3、ステップ
210)。プログラム作成者が指定したコードサイズ
「user」が、コードサイズを優先した場合のコード
サイズ「code」以下である場合は、コードサイズを
優先するコード生成を行うフラグflag[1]、fl
ag[2]、・・・をすべて立て(ステップ211)、
コード生成部17に制御を移し、ステップ217以降の
コード生成処理を行う。
【0037】ステップ210において、プログラム作成
者が指定したコードサイズ「user」が、コードサイ
ズを優先した場合のコードサイズ「code」よりも大
きい場合は、コードパターン登録部16に登録されてい
るコードパターンの登録番号を表すメモリ上の領域
「i」を「1」に初期化し(ステップ212)、プログ
ラム作成者が指定したコードサイズ「user」と出力
予定のオブジェクトのコードサイズ[user]を比較
する(ステップ213)。プログラム作成者が指定した
コードサイズ「user」、出力予定のオブジェクトの
コードサイズ[user]よりも小さい場合は、フラグ
flag[i]を立て、コードパターン登録部16に登
録されているi番目のコードパターンについて、すべて
の使用箇所でコードサイズ優先のコード生成を行うこと
にする(ステップ214)。
者が指定したコードサイズ「user」が、コードサイ
ズを優先した場合のコードサイズ「code」よりも大
きい場合は、コードパターン登録部16に登録されてい
るコードパターンの登録番号を表すメモリ上の領域
「i」を「1」に初期化し(ステップ212)、プログ
ラム作成者が指定したコードサイズ「user」と出力
予定のオブジェクトのコードサイズ[user]を比較
する(ステップ213)。プログラム作成者が指定した
コードサイズ「user」、出力予定のオブジェクトの
コードサイズ[user]よりも小さい場合は、フラグ
flag[i]を立て、コードパターン登録部16に登
録されているi番目のコードパターンについて、すべて
の使用箇所でコードサイズ優先のコード生成を行うこと
にする(ステップ214)。
【0038】ステップ214において、一部のコード生
成が実行速度を優先するコード生成からコードサイズを
優先するコード生成に代わることにより、出力予定のオ
ブジェクトのコードサイズは、コードパターン登録部1
6のi番目に登録されているコードサイズ差d[i]と
使用回数cnt[i]との積の分だけ小さくなるので、
出力予定のオブジェクトのコードサイズ「size」か
らd[i]とcnt[i]の積を減算した値を、出力予
定のオブジェクトのコードサイズ「size」として再
設定する(ステップ215)。
成が実行速度を優先するコード生成からコードサイズを
優先するコード生成に代わることにより、出力予定のオ
ブジェクトのコードサイズは、コードパターン登録部1
6のi番目に登録されているコードサイズ差d[i]と
使用回数cnt[i]との積の分だけ小さくなるので、
出力予定のオブジェクトのコードサイズ「size」か
らd[i]とcnt[i]の積を減算した値を、出力予
定のオブジェクトのコードサイズ「size」として再
設定する(ステップ215)。
【0039】ステップ215における出力予定のオブジ
ェクトのコードサイズ「size」の再設定が終了する
と、コードパターン登録部16のコードパターンの登録
番号「i」の内容に「1」を加え(ステップ216)、
ステップ213に戻って、プログラム作成者が指定した
コードサイズ「user」と再設定した出力予定のオブ
ジェクトのコードサイズ「size」とを比較する。
ェクトのコードサイズ「size」の再設定が終了する
と、コードパターン登録部16のコードパターンの登録
番号「i」の内容に「1」を加え(ステップ216)、
ステップ213に戻って、プログラム作成者が指定した
コードサイズ「user」と再設定した出力予定のオブ
ジェクトのコードサイズ「size」とを比較する。
【0040】ステップ213において、プログラム作成
者が指定したコードサイズ「user」が、出力予定の
オブジェクトのコードサイズ「size」以上である場
合には、コード生成部17に制御を移し、ステップ21
7以降のコード生成処理を行う。
者が指定したコードサイズ「user」が、出力予定の
オブジェクトのコードサイズ「size」以上である場
合には、コード生成部17に制御を移し、ステップ21
7以降のコード生成処理を行う。
【0041】コード生成部17では、コード生成が終了
したか否かを判断する(ステップ217)。コード生成
が終了していない場合は、複数の生成コードが存在する
か否かを判断する(ステップ218)。これは従来の処
理と同じである。生成コードが1つしかない場合は、従
来の方法と同様にコード生成を行う(ステップ21
9)。複数の生成コードが存在する場合は、コードパタ
ーン登録部16の何番目に登録されたコードパターンで
あるかを判断する(ステップ220)。ステップ220
で求めたコードパターンの登録番号を「k」とする。
したか否かを判断する(ステップ217)。コード生成
が終了していない場合は、複数の生成コードが存在する
か否かを判断する(ステップ218)。これは従来の処
理と同じである。生成コードが1つしかない場合は、従
来の方法と同様にコード生成を行う(ステップ21
9)。複数の生成コードが存在する場合は、コードパタ
ーン登録部16の何番目に登録されたコードパターンで
あるかを判断する(ステップ220)。ステップ220
で求めたコードパターンの登録番号を「k」とする。
【0042】この後、コードパターン登録部16のk番
目に登録されているコードパターンに対して、フラグf
lag[k]が立っているか否かを判断する(ステップ
221)。フラグflag[k]が立っていれば、コー
ドサイズ優先コード生成部171に制御を移し、コード
サイズを優先するコードパターンでコード生成を行う
(ステップ222)。また、フラグflag[k]が降
りていれば、実行速度優先コード生成部172に制御を
移し、実行速度を優先するコードパターンでコード生成
を行う(ステップ223)。ステップ219、ステップ
222、またはステップ223においてコード生成を行
った後は、ステップ217に戻り、コード生成が終了し
たか否かを判断する。コード生成が終了していなければ
次のコード生成を行う。すべてのコード生成が終了した
ならば、オブジェクト出力部18に制御を移し、オブジ
ェクト・モジュール・ファイル19を出力する。
目に登録されているコードパターンに対して、フラグf
lag[k]が立っているか否かを判断する(ステップ
221)。フラグflag[k]が立っていれば、コー
ドサイズ優先コード生成部171に制御を移し、コード
サイズを優先するコードパターンでコード生成を行う
(ステップ222)。また、フラグflag[k]が降
りていれば、実行速度優先コード生成部172に制御を
移し、実行速度を優先するコードパターンでコード生成
を行う(ステップ223)。ステップ219、ステップ
222、またはステップ223においてコード生成を行
った後は、ステップ217に戻り、コード生成が終了し
たか否かを判断する。コード生成が終了していなければ
次のコード生成を行う。すべてのコード生成が終了した
ならば、オブジェクト出力部18に制御を移し、オブジ
ェクト・モジュール・ファイル19を出力する。
【0043】以上の処理を、具体的な例を挙げて説明す
る。図5は、コードパターン登録部16の登録内容の一
例である。図示のように、この例では、コードサイズの
単位をbyte、実行速度の単位をclockとし、6
パターンのコードパターンが登録されていたものとす
る。コードパターンの使用回数cnt[1]、cnt
[2]、・・・は、ステップ204の処理において設定
される。
る。図5は、コードパターン登録部16の登録内容の一
例である。図示のように、この例では、コードサイズの
単位をbyte、実行速度の単位をclockとし、6
パターンのコードパターンが登録されていたものとす
る。コードパターンの使用回数cnt[1]、cnt
[2]、・・・は、ステップ204の処理において設定
される。
【0044】所定のソース・プログラム・ファイルにつ
いて、コードサイズ測定部14におけるコードサイズの
測定により、プログラム作成者が指定したオブジェクト
のコードサイズ「user」が1500byte、コー
ドサイズを優先した場合のオブジェクトのコードサイズ
「code」が1200byte、実行速度を優先した
場合のオブジェクトのコードサイズ「speed」が1
600byteであるものとする。また、コードパター
ン登録部16に登録されているコードパターンの使用回
数cnt[]が、登録番号順に22回、26回、34
回、52回、40回、68回であるものとする。
いて、コードサイズ測定部14におけるコードサイズの
測定により、プログラム作成者が指定したオブジェクト
のコードサイズ「user」が1500byte、コー
ドサイズを優先した場合のオブジェクトのコードサイズ
「code」が1200byte、実行速度を優先した
場合のオブジェクトのコードサイズ「speed」が1
600byteであるものとする。また、コードパター
ン登録部16に登録されているコードパターンの使用回
数cnt[]が、登録番号順に22回、26回、34
回、52回、40回、68回であるものとする。
【0045】以上の条件で、ステップ208において、
出力予定のオブジェクトのコードサイズ「size」
は、実行速度を優先した場合のオブジェクトのコードサ
イズ「speed」と同じ1600byteに設定され
る。
出力予定のオブジェクトのコードサイズ「size」
は、実行速度を優先した場合のオブジェクトのコードサ
イズ「speed」と同じ1600byteに設定され
る。
【0046】ステップ209において、複数の生成コー
ドが存在する場合にコードサイズを優先するコード生成
を行うかどうかを判断するためのフラグflag[]の
すべてを「0」に初期化する。
ドが存在する場合にコードサイズを優先するコード生成
を行うかどうかを判断するためのフラグflag[]の
すべてを「0」に初期化する。
【0047】ステップ210におけるコードサイズ「u
ser」(1500byte)とコードサイズ「cod
e」(1200byte)との比較で、コードサイズ
「user」はコードサイズ「code」より大きいの
で、ステップ212に処理を移してコードパターン登録
部16のコードパターンの登録番号を表すメモリ上の領
域「i」を「1」に初期化する。
ser」(1500byte)とコードサイズ「cod
e」(1200byte)との比較で、コードサイズ
「user」はコードサイズ「code」より大きいの
で、ステップ212に処理を移してコードパターン登録
部16のコードパターンの登録番号を表すメモリ上の領
域「i」を「1」に初期化する。
【0048】ステップ213におけるコードサイズ「u
ser」(1500byte)とコードサイズ「siz
e」(1600byte)との比較において、コードサ
イズ「user」はコードサイズ「size」より小さ
いので、ステップ214で、フラグflag[1]を立
てる。図5から、コードサイズ差d[1]は1byt
e、コードパターン使用回数cnt[1]は22回なの
で、ステップ215において、コードサイズ「siz
e」は(1*22)byte減って1678byteと
なり、ステップ216において、コードパターンの登録
番号「i」は「2」となる。
ser」(1500byte)とコードサイズ「siz
e」(1600byte)との比較において、コードサ
イズ「user」はコードサイズ「size」より小さ
いので、ステップ214で、フラグflag[1]を立
てる。図5から、コードサイズ差d[1]は1byt
e、コードパターン使用回数cnt[1]は22回なの
で、ステップ215において、コードサイズ「siz
e」は(1*22)byte減って1678byteと
なり、ステップ216において、コードパターンの登録
番号「i」は「2」となる。
【0049】ステップ216の処理が終了すると、ステ
ップ213に戻って、再びコードサイズ「user」
(1500byte)とコードサイズ「size」(1
578byte)とを比較する。コードサイズ「siz
e」はコードサイズ「user」より大きいので、ステ
ップ214においてフラグflag[2]を立てる。図
5から、コードサイズ差d[2]は2byte、コード
パターン使用回数cnt[2]は26回なので、ステッ
プ215において、コードサイズ「size」は(2*
26)byte減って1626byteとなり、ステッ
プ216において、コードパターンの登録番号「i」は
「3」となる。
ップ213に戻って、再びコードサイズ「user」
(1500byte)とコードサイズ「size」(1
578byte)とを比較する。コードサイズ「siz
e」はコードサイズ「user」より大きいので、ステ
ップ214においてフラグflag[2]を立てる。図
5から、コードサイズ差d[2]は2byte、コード
パターン使用回数cnt[2]は26回なので、ステッ
プ215において、コードサイズ「size」は(2*
26)byte減って1626byteとなり、ステッ
プ216において、コードパターンの登録番号「i」は
「3」となる。
【0050】ステップ213に戻って、コードサイズ
「user」(1500byte)とコードサイズ「s
ize」(1526byte)とを比較すると、コード
サイズ「size」はコードサイズ「user」より大
きいので、ステップ214において、フラグflag
[3]を立てる。図5から、コードサイズ差d[3]は
1byte、コードパターン使用回数cnt[3]は3
4回なので、ステップ215において、コードサイズ
「size」は(1*34)byte減って1492b
yteとなり、ステップ216において、コードパター
ンの登録番号「i」は「4」となる。
「user」(1500byte)とコードサイズ「s
ize」(1526byte)とを比較すると、コード
サイズ「size」はコードサイズ「user」より大
きいので、ステップ214において、フラグflag
[3]を立てる。図5から、コードサイズ差d[3]は
1byte、コードパターン使用回数cnt[3]は3
4回なので、ステップ215において、コードサイズ
「size」は(1*34)byte減って1492b
yteとなり、ステップ216において、コードパター
ンの登録番号「i」は「4」となる。
【0051】ステップ213に戻って、コードサイズ
「user」(1500byte)とコードサイズ「s
ize」(1492byte)とを比較すると、コード
サイズ「size」はコードサイズ「user」以下と
なるので、ステップ217以降のコード生成に処理を移
す。
「user」(1500byte)とコードサイズ「s
ize」(1492byte)とを比較すると、コード
サイズ「size」はコードサイズ「user」以下と
なるので、ステップ217以降のコード生成に処理を移
す。
【0052】コード生成においては、コードパターン登
録部16に登録されているコードパターンについて、登
録番号が1〜3のコードパターンはフラグflag[]
が立っているので、コードサイズを優先するコード生成
を行い、登録番号が4〜6のコードパターンはフラグf
lag[]が降りているので、実行速度を優先するコー
ド生成を行う。そして、すべてのコード生成が終了した
後、オブジェクトを出力する。
録部16に登録されているコードパターンについて、登
録番号が1〜3のコードパターンはフラグflag[]
が立っているので、コードサイズを優先するコード生成
を行い、登録番号が4〜6のコードパターンはフラグf
lag[]が降りているので、実行速度を優先するコー
ド生成を行う。そして、すべてのコード生成が終了した
後、オブジェクトを出力する。
【0053】出力されたオブジェクトは、コードサイズ
が1492byteとなり、プログラム作成者の希望す
るオブジェクトのコードサイズ1500byte以下と
いう条件を満たしている。また、実行速度を優先するコ
ードパターンが含まれているために、コードサイズを優
先した場合のオブジェクトに比して実行速度が速くな
る。
が1492byteとなり、プログラム作成者の希望す
るオブジェクトのコードサイズ1500byte以下と
いう条件を満たしている。また、実行速度を優先するコ
ードパターンが含まれているために、コードサイズを優
先した場合のオブジェクトに比して実行速度が速くな
る。
【0054】次に、本発明の第2の実施例について図面
を参照して詳細に説明する。
を参照して詳細に説明する。
【0055】上記の第1の実施例では、コードパターン
登録部16に登録されている各コードパターンについ
て、フラグflag[]が立っているか否かによって、
コードサイズを優先するコード生成か実行速度を優先す
るコード生成かを決定し、決定後はそのコードパターン
を使用する箇所では常に同じコード生成を行っていた。
また、第1の実施例で登録されているコードパターンに
は、登録順番についての規則を設けていないため、実行
速度を優先するコード生成からコードサイズを優先する
コード生成に置き換える順番に関する効率は考慮してい
ない。本実施例では、実行速度の劣化をより抑えたコー
ド生成を行うために、2つの改善を行っている。第1の
改善は、登録されている各コードパターンに対して、生
成コードの置き換えに関する優先順位を持たせることで
ある。第2の改善は、登録されている各コードパターン
に対して、コードサイズを優先するコード生成と実行速
度を優先するコード生成とを混在させることによって、
出力予定のオブジェクトのサイズをプログラム作成者に
よって指定されたコードサイズ以内にするための、生成
コードの置き換えを最小限に留めることである。
登録部16に登録されている各コードパターンについ
て、フラグflag[]が立っているか否かによって、
コードサイズを優先するコード生成か実行速度を優先す
るコード生成かを決定し、決定後はそのコードパターン
を使用する箇所では常に同じコード生成を行っていた。
また、第1の実施例で登録されているコードパターンに
は、登録順番についての規則を設けていないため、実行
速度を優先するコード生成からコードサイズを優先する
コード生成に置き換える順番に関する効率は考慮してい
ない。本実施例では、実行速度の劣化をより抑えたコー
ド生成を行うために、2つの改善を行っている。第1の
改善は、登録されている各コードパターンに対して、生
成コードの置き換えに関する優先順位を持たせることで
ある。第2の改善は、登録されている各コードパターン
に対して、コードサイズを優先するコード生成と実行速
度を優先するコード生成とを混在させることによって、
出力予定のオブジェクトのサイズをプログラム作成者に
よって指定されたコードサイズ以内にするための、生成
コードの置き換えを最小限に留めることである。
【0056】本実施例の言語処理装置の構成は、コード
パターン登録部16に追加登録する項目があること以外
は、図1に示した第1の実施例の言語処理装置の構成と
同様であるため、全体の構成の説明は省略する。
パターン登録部16に追加登録する項目があること以外
は、図1に示した第1の実施例の言語処理装置の構成と
同様であるため、全体の構成の説明は省略する。
【0057】図8は、本実施例のコードパターン登録部
16の登録内容である。コードパターン登録部16に
は、図4に示した第1の実施例の登録内容に加え、実行
速度を優先した場合の生成コードとコードサイズを優先
した場合の生成コードとの実行速度差c[1]、c
[2]、・・・がメモリ上の領域として確保され、登録
されている。c[k]はコードパターン登録部16のk
番目に登録された生成コードkAと生成コードkBとの
実行速度差を表す。
16の登録内容である。コードパターン登録部16に
は、図4に示した第1の実施例の登録内容に加え、実行
速度を優先した場合の生成コードとコードサイズを優先
した場合の生成コードとの実行速度差c[1]、c
[2]、・・・がメモリ上の領域として確保され、登録
されている。c[k]はコードパターン登録部16のk
番目に登録された生成コードkAと生成コードkBとの
実行速度差を表す。
【0058】第1の実施例では、コードパターン登録部
16に登録されているコードパターンの登録順番には規
則がなかったが、本実施例では登録順番に優先順位を付
け、優先順位の高いコードパターンから順番に登録して
おく。優先順位の高いコードパターンとは、実行速度を
優先するコード生成からコードサイズを優先するコード
生成に置き換えた場合に、実行速度の劣化が少なく、か
つコードサイズの縮小に効果的なコードパターンであ
る。コードパターン登録部16に登録されたコードサイ
ズ差d[]から実行速度差c[]を減算した値d[]−
c[]を優先基準とし、d[]−c[]の値が大きいコ
ードパターンを優先し、値が同じものについては実行速
度差c[]が小さいコードパターンを優先する。優先順
位を付けることにより、コードパターン選択部15は、
実行速度を優先するコード生成からコードサイズを優先
するコード生成への置き換えを、実行速度の劣化が少な
いコードパターンから順番に行うことが可能となる。
16に登録されているコードパターンの登録順番には規
則がなかったが、本実施例では登録順番に優先順位を付
け、優先順位の高いコードパターンから順番に登録して
おく。優先順位の高いコードパターンとは、実行速度を
優先するコード生成からコードサイズを優先するコード
生成に置き換えた場合に、実行速度の劣化が少なく、か
つコードサイズの縮小に効果的なコードパターンであ
る。コードパターン登録部16に登録されたコードサイ
ズ差d[]から実行速度差c[]を減算した値d[]−
c[]を優先基準とし、d[]−c[]の値が大きいコ
ードパターンを優先し、値が同じものについては実行速
度差c[]が小さいコードパターンを優先する。優先順
位を付けることにより、コードパターン選択部15は、
実行速度を優先するコード生成からコードサイズを優先
するコード生成への置き換えを、実行速度の劣化が少な
いコードパターンから順番に行うことが可能となる。
【0059】また、本実施例ではコードパターン選択部
15の処理が前記だい1の実施例の場合と異なる。第1
の実施例では、フラグflag[1]、flag
[2]、・・・によって、コードサイズを優先するコー
ド生成を行うか実行速度を優先するコード生成を行うか
を判断していた。本実施例では、コードパターン登録部
16に登録されている各コードパターンに対して、コー
ドサイズを優先するコード生成を行う回数を設定し、設
定した回数だけコードサイズを優先するコード生成を行
い、残りの回数は実行速度を優先するコード生成を行
う。
15の処理が前記だい1の実施例の場合と異なる。第1
の実施例では、フラグflag[1]、flag
[2]、・・・によって、コードサイズを優先するコー
ド生成を行うか実行速度を優先するコード生成を行うか
を判断していた。本実施例では、コードパターン登録部
16に登録されている各コードパターンに対して、コー
ドサイズを優先するコード生成を行う回数を設定し、設
定した回数だけコードサイズを優先するコード生成を行
い、残りの回数は実行速度を優先するコード生成を行
う。
【0060】以下、図6及び図7のフローチャートを参
照して本実施例の処理の詳細を説明する。
照して本実施例の処理の詳細を説明する。
【0061】まず、図2に図示された、コードパターン
選択部16によるステップ208までの処理を行う。処
理内容は第1の実施例と同様であるため説明を省略す
る。
選択部16によるステップ208までの処理を行う。処
理内容は第1の実施例と同様であるため説明を省略す
る。
【0062】ステップ208までの処理が終了すると、
コードパターン登録部16に登録されている各コードパ
ターンについて、コードサイズを優先するコードパター
ンの使用回数を表すメモリ上の領域use[1]、us
e[2]、・・・を「0」に初期化する(図7、ステッ
プ501)。use[k]は、コードパターン登録部1
6のk番目に登録されているコードパターンについて
の、コードサイズを優先するコードパターンの使用回数
を表す。
コードパターン登録部16に登録されている各コードパ
ターンについて、コードサイズを優先するコードパター
ンの使用回数を表すメモリ上の領域use[1]、us
e[2]、・・・を「0」に初期化する(図7、ステッ
プ501)。use[k]は、コードパターン登録部1
6のk番目に登録されているコードパターンについて
の、コードサイズを優先するコードパターンの使用回数
を表す。
【0063】ステップ501の初期化が終了すると、プ
ログラム作成者が指定したコードサイズ「user」と
コードサイズを優先した場合のコードサイズ「cod
e」とを比較する(ステップ502)。プログラム作成
者が指定したコードサイズ「user」が、コードサイ
ズを優先した場合のコードサイズ「code」以下であ
る場合は、コードサイズを優先するコードパターンの使
用回数use[]に、コードパターンの使用回数cnt
[]の値を設定する(ステップ503)。コードパター
ン登録部16のk番目に登録されているコードパターン
に関しては、コードサイズを優先するコードパターンの
使用回数use[k]に、コードパターンの使用回数c
nt[k]の値が設定される。ステップ503の設定に
より、すべてのコードパターンにおいてコードサイズを
優先するコード生成を行うことになる。ステップ503
の処理が終了すると、コード生成部17に制御を移し、
ステップ511以降のコード生成処理を行う。
ログラム作成者が指定したコードサイズ「user」と
コードサイズを優先した場合のコードサイズ「cod
e」とを比較する(ステップ502)。プログラム作成
者が指定したコードサイズ「user」が、コードサイ
ズを優先した場合のコードサイズ「code」以下であ
る場合は、コードサイズを優先するコードパターンの使
用回数use[]に、コードパターンの使用回数cnt
[]の値を設定する(ステップ503)。コードパター
ン登録部16のk番目に登録されているコードパターン
に関しては、コードサイズを優先するコードパターンの
使用回数use[k]に、コードパターンの使用回数c
nt[k]の値が設定される。ステップ503の設定に
より、すべてのコードパターンにおいてコードサイズを
優先するコード生成を行うことになる。ステップ503
の処理が終了すると、コード生成部17に制御を移し、
ステップ511以降のコード生成処理を行う。
【0064】ステップ502において、プログラム作成
者が指定したコードサイズ「user」が、コードサイ
ズを優先した場合のコードサイズ「code」よりも大
きい場合は、コードパターン登録部16に登録されてい
るコードパターンの登録番号を表すメモリ上の領域
「i」を「1」に初期化し(ステップ504)、プログ
ラム作成者が指定したコードサイズ「user」と出力
予定のオブジェクトのコードサイズ「size」を比較
する(ステップ505)。プログラム作成者が指定した
コードサイズ「user」が、出力予定のオブジェクト
のコードサイズ「size」以上である場合は、コード
生成部17に制御を移し、ステップ511以降のコード
生成処理を行う。
者が指定したコードサイズ「user」が、コードサイ
ズを優先した場合のコードサイズ「code」よりも大
きい場合は、コードパターン登録部16に登録されてい
るコードパターンの登録番号を表すメモリ上の領域
「i」を「1」に初期化し(ステップ504)、プログ
ラム作成者が指定したコードサイズ「user」と出力
予定のオブジェクトのコードサイズ「size」を比較
する(ステップ505)。プログラム作成者が指定した
コードサイズ「user」が、出力予定のオブジェクト
のコードサイズ「size」以上である場合は、コード
生成部17に制御を移し、ステップ511以降のコード
生成処理を行う。
【0065】ステップ505において、プログラム作成
者が指定したコードサイズ「user」が、出力予定の
オブジェクトのコードサイズ「size」より小さい場
合は、出力予定のオブジェクトのコードサイズ「siz
e」から、コードパターン登録部16のi番目に登録さ
れているコードサイズ差d[i]と使用回数cnt
「i」との積を減算した値と、プログラム作成者が指定
したオブジェクトのコードサイズ「user」とを比較
する(ステップ506)。ステップ506において比較
に用いられる値size−d[i]*cnt「i」は、
コードパターン登録部16のi番目のコードパターンを
使用しているすべての箇所で、実行速度を優先するコー
ド生成からコードサイズを優先するコード生成に置き換
えた場合の出力予定のオブジェクトのコードサイズであ
る。
者が指定したコードサイズ「user」が、出力予定の
オブジェクトのコードサイズ「size」より小さい場
合は、出力予定のオブジェクトのコードサイズ「siz
e」から、コードパターン登録部16のi番目に登録さ
れているコードサイズ差d[i]と使用回数cnt
「i」との積を減算した値と、プログラム作成者が指定
したオブジェクトのコードサイズ「user」とを比較
する(ステップ506)。ステップ506において比較
に用いられる値size−d[i]*cnt「i」は、
コードパターン登録部16のi番目のコードパターンを
使用しているすべての箇所で、実行速度を優先するコー
ド生成からコードサイズを優先するコード生成に置き換
えた場合の出力予定のオブジェクトのコードサイズであ
る。
【0066】ステップ506において、プログラム作成
者が指定したコードサイズ「user」が、size−
d[i]*cnt[i]以下である場合は、コードパタ
ーン登録部10のi番目に登録されているコードパター
ンに関して、コードサイズを優先するコードパターンの
使用回数use[i]にコ−ドパターンの使用回数cn
t[i]の値を設定し(ステップ507)、出力予定の
オブジェクトのコードサイズ「size」に、size
−d[i]*cnt[i]を再設定する(ステップ50
8)。ステップ508における出力予定のオブジェクト
のコードサイズ「size」の再設定が終了すると、コ
ードパターン登録部16のコードパターンの登録番号
「i」の内容に「1」加え(ステップ509)、ステッ
プ505に戻って、プログラム作成者が指定したコード
サイズ「user」と再設定した出力予定のオブジェク
トのコードサイズ「size」とを比較する。
者が指定したコードサイズ「user」が、size−
d[i]*cnt[i]以下である場合は、コードパタ
ーン登録部10のi番目に登録されているコードパター
ンに関して、コードサイズを優先するコードパターンの
使用回数use[i]にコ−ドパターンの使用回数cn
t[i]の値を設定し(ステップ507)、出力予定の
オブジェクトのコードサイズ「size」に、size
−d[i]*cnt[i]を再設定する(ステップ50
8)。ステップ508における出力予定のオブジェクト
のコードサイズ「size」の再設定が終了すると、コ
ードパターン登録部16のコードパターンの登録番号
「i」の内容に「1」加え(ステップ509)、ステッ
プ505に戻って、プログラム作成者が指定したコード
サイズ「user」と再設定した出力予定のオブジェク
トのコードサイズ「size」とを比較する。
【0067】ステップ506において、プログラム作成
者が指定したコードサイズ「user」が、size−
d[i]*cnt[i]より大きい場合は、コードパタ
ーン登録部16のi番目に登録されているコードパター
ンに関して、出力予定のオブジェクトのコードサイズ
「user」以下になるような、コードサイズを優先す
るコードパターンの使用回数を計算し、use[i]に
設定する(ステップ510)。ステップ510でuse
[i]に設定する値は、(user−size)/d
[i]以上の最小の整数値である。ステップ510にお
けるuse[i]の設定が終了すると、コード生成部1
7に制御を移し、ステップ511以降のコード生成処理
を行う。
者が指定したコードサイズ「user」が、size−
d[i]*cnt[i]より大きい場合は、コードパタ
ーン登録部16のi番目に登録されているコードパター
ンに関して、出力予定のオブジェクトのコードサイズ
「user」以下になるような、コードサイズを優先す
るコードパターンの使用回数を計算し、use[i]に
設定する(ステップ510)。ステップ510でuse
[i]に設定する値は、(user−size)/d
[i]以上の最小の整数値である。ステップ510にお
けるuse[i]の設定が終了すると、コード生成部1
7に制御を移し、ステップ511以降のコード生成処理
を行う。
【0068】コード生成部17では、コード生成が終了
したか否かを判断する(図7、ステップ511)。コー
ド生成が終了していない場合は、複数の生成コー・・・
亨存在するか否かを判断する(ステップ512)。これ
は従来の処理と同じである。生成コードが1つしかない
場合は、従来の方法と同様にコード生成を行う(ステッ
プ513)。複数の生成コードが存在する場合は、コー
ドパターン登録部16の何番目に登録されたコードパタ
ーンであるかを判断する(ステップ514)。ステップ
514で求めたコードパターンの登録番号をkとする。
したか否かを判断する(図7、ステップ511)。コー
ド生成が終了していない場合は、複数の生成コー・・・
亨存在するか否かを判断する(ステップ512)。これ
は従来の処理と同じである。生成コードが1つしかない
場合は、従来の方法と同様にコード生成を行う(ステッ
プ513)。複数の生成コードが存在する場合は、コー
ドパターン登録部16の何番目に登録されたコードパタ
ーンであるかを判断する(ステップ514)。ステップ
514で求めたコードパターンの登録番号をkとする。
【0069】コードパターン登録部16のk番目に登録
されているコードパターンに対して、コードサイズを優
先するコードパターンの使用回数use[k]が「0」
か否かを調べ(ステップ515)、use[k]が
「0」であるならば、実行速度優先コード生成部172
に制御を移し、実行速度を優先するコードパターンでコ
ード生成を行う(ステップ516)。use[k]が
「0」でなければ、コードサイズ優先コード生成部17
1に制御を移し、コードサイズを優先するコードパター
ンでコード生成を行い(ステップ517)、use
[k]の内容から「1」を引く(ステップ518)。ス
テップ513、ステップ516、またはステップ51
7、518においてコード生成を行った後は、ステップ
511に戻り、コード生成が終了したか否かを判断し、
終了していなければ次のコード生成を行う。そして、す
べてのコード生成が終了した後、オブジェクト出力部1
8に制御を移し、オブジェクト・モジュール・ファイル
19を出力する。
されているコードパターンに対して、コードサイズを優
先するコードパターンの使用回数use[k]が「0」
か否かを調べ(ステップ515)、use[k]が
「0」であるならば、実行速度優先コード生成部172
に制御を移し、実行速度を優先するコードパターンでコ
ード生成を行う(ステップ516)。use[k]が
「0」でなければ、コードサイズ優先コード生成部17
1に制御を移し、コードサイズを優先するコードパター
ンでコード生成を行い(ステップ517)、use
[k]の内容から「1」を引く(ステップ518)。ス
テップ513、ステップ516、またはステップ51
7、518においてコード生成を行った後は、ステップ
511に戻り、コード生成が終了したか否かを判断し、
終了していなければ次のコード生成を行う。そして、す
べてのコード生成が終了した後、オブジェクト出力部1
8に制御を移し、オブジェクト・モジュール・ファイル
19を出力する。
【0070】以上の処理を、具体的な例を挙げて説明す
る。図9は、コードパターン登録部16の登録内容の一
例である。図示のように、この例では、コードサイズの
単位をbyte、実行速度の単位をclockとする。
図9に登録されているコードパターンは、図5と同じも
のであるが、実行速度を優先するコード生成からコード
サイズを優先するコード生成に置き換えた場合に、実行
速度の劣化が少なく、かつコードサイズの縮小に効果的
なコードパターンから順に登録されている。優先基準と
しては、コードサイズ差d[]から実行速度差c[]を
引いた値が大きいコードパターンを優先し、値が同じも
のについては、実行速度差c[]が小さいコードパター
ンを優先する。コードパターンの使用回数cnt
[1]、cnt[2]、・・・については、ステップ2
04において設定される。
る。図9は、コードパターン登録部16の登録内容の一
例である。図示のように、この例では、コードサイズの
単位をbyte、実行速度の単位をclockとする。
図9に登録されているコードパターンは、図5と同じも
のであるが、実行速度を優先するコード生成からコード
サイズを優先するコード生成に置き換えた場合に、実行
速度の劣化が少なく、かつコードサイズの縮小に効果的
なコードパターンから順に登録されている。優先基準と
しては、コードサイズ差d[]から実行速度差c[]を
引いた値が大きいコードパターンを優先し、値が同じも
のについては、実行速度差c[]が小さいコードパター
ンを優先する。コードパターンの使用回数cnt
[1]、cnt[2]、・・・については、ステップ2
04において設定される。
【0071】所定のソース・プログラム・ファイルにつ
いて、コードサイズ測定部14におけるコードサイズの
測定により、プログラム作成者が指定したオブジェクト
のコードサイズ「user」が1500byte、コー
ドサイズを優先した場合のオブジェクトのコードサイズ
「code」が1200byte、実行速度を優先した
場合のオブジェクトのコードサイズ「speed」が1
600byteであるものとする。また、コードパター
ン登録部16に登録されているコードパターンの使用回
数cnt[]が、登録番号順に52回、68回、40
回、22回、26回、34回であるものとする。
いて、コードサイズ測定部14におけるコードサイズの
測定により、プログラム作成者が指定したオブジェクト
のコードサイズ「user」が1500byte、コー
ドサイズを優先した場合のオブジェクトのコードサイズ
「code」が1200byte、実行速度を優先した
場合のオブジェクトのコードサイズ「speed」が1
600byteであるものとする。また、コードパター
ン登録部16に登録されているコードパターンの使用回
数cnt[]が、登録番号順に52回、68回、40
回、22回、26回、34回であるものとする。
【0072】ステップ208において、出力予定のオブ
ジェクトのコードサイズ「size」は、実行速度を優
先した場合のオブジェクトのコードサイズspeedと
同じ1600byteに設定される。
ジェクトのコードサイズ「size」は、実行速度を優
先した場合のオブジェクトのコードサイズspeedと
同じ1600byteに設定される。
【0073】ステップ501において、コードサイズを
優先するコードパターンの使用回数use[]のすべて
を「0」に初期化する。
優先するコードパターンの使用回数use[]のすべて
を「0」に初期化する。
【0074】ステップ502におけるコードサイズ「u
ser」(1500byte)とコードサイズ「cod
e」(1200byte)との比較で、コードサイズ
「user」はコードサイズ「code」より大きいの
で、ステップ504に処理を移してコードパターン登録
部16のコードパターンの登録番号を表すメモリ上の領
域「i」を「1」に初期化する。
ser」(1500byte)とコードサイズ「cod
e」(1200byte)との比較で、コードサイズ
「user」はコードサイズ「code」より大きいの
で、ステップ504に処理を移してコードパターン登録
部16のコードパターンの登録番号を表すメモリ上の領
域「i」を「1」に初期化する。
【0075】ステップ505におけるコードサイズ「u
ser」(1500byte)とコードサイズ「siz
e」(1600byte)との比較で、コードサイズ
「user」はコードサイズ「size」より小さいの
で、ステップ506に処理を移す。図9から、コードサ
イズ差d[1]は2byte、コードパターン使用回数
cnt[1]は52回なので、ステップ506におい
て、コードサイズuser」(1500byte)とコ
ードサイズsize−d[1]*cnt[1]((16
00−2*52)byte)を比較する。
ser」(1500byte)とコードサイズ「siz
e」(1600byte)との比較で、コードサイズ
「user」はコードサイズ「size」より小さいの
で、ステップ506に処理を移す。図9から、コードサ
イズ差d[1]は2byte、コードパターン使用回数
cnt[1]は52回なので、ステップ506におい
て、コードサイズuser」(1500byte)とコ
ードサイズsize−d[1]*cnt[1]((16
00−2*52)byte)を比較する。
【0076】コードサイズ「user」はコードサイズ
size−d[1]*cnt[1]より大きいので、ス
テップ510に処理を移して、use[1]に(use
r−size)/d[1]以上の最小の整数値を設定す
る。(1600−1500)/2=50であることか
ら、use[1]には50を設定する。即ち、1番目に
登録されているコードパターンの使用回数52回のう
ち、50回はコードサイズを優先するコード生成を行
い、残りの2回は実行速度を優先するコード生成を行う
ことになる。
size−d[1]*cnt[1]より大きいので、ス
テップ510に処理を移して、use[1]に(use
r−size)/d[1]以上の最小の整数値を設定す
る。(1600−1500)/2=50であることか
ら、use[1]には50を設定する。即ち、1番目に
登録されているコードパターンの使用回数52回のう
ち、50回はコードサイズを優先するコード生成を行
い、残りの2回は実行速度を優先するコード生成を行う
ことになる。
【0077】1番目のコードパターンについてのコード
生成を行う場合は、use[1]の値が「0」になるま
で、ステップ517に処理を移して、コードサイズを優
先するコード生成を行い、ステップ518においてus
e[1]の内容から「1」を引く。use[1]の値が
「0」になったならば、ステップ516に処理を移し
て、実行速度を優先するコード生成を行う。2番目以降
のコードパターンについては、use[]の値が「0」
であるので、ステップ516に処理を移して、実行速度
を優先するコード生成を行う。そして、すべてのコード
生成が終了した後、オブジェクトを出力する。
生成を行う場合は、use[1]の値が「0」になるま
で、ステップ517に処理を移して、コードサイズを優
先するコード生成を行い、ステップ518においてus
e[1]の内容から「1」を引く。use[1]の値が
「0」になったならば、ステップ516に処理を移し
て、実行速度を優先するコード生成を行う。2番目以降
のコードパターンについては、use[]の値が「0」
であるので、ステップ516に処理を移して、実行速度
を優先するコード生成を行う。そして、すべてのコード
生成が終了した後、オブジェクトを出力する。
【0078】出力されたオブジェクトはコードサイズが
1500byteとなり、プログラム作成者の希望する
オブジェクトのコードサイズ1500byte以下とい
う条件を満たしている。また、実行速度を優先したコー
ドパターンが含まれているために、コードサイズを優先
した場合のオブジェクトよりも実行速度が速くなる。さ
らに、実行速度の劣化を抑えた生成コードの置き換えを
行っているので、第1の実施例よりも実行速度が速くな
っている。
1500byteとなり、プログラム作成者の希望する
オブジェクトのコードサイズ1500byte以下とい
う条件を満たしている。また、実行速度を優先したコー
ドパターンが含まれているために、コードサイズを優先
した場合のオブジェクトよりも実行速度が速くなる。さ
らに、実行速度の劣化を抑えた生成コードの置き換えを
行っているので、第1の実施例よりも実行速度が速くな
っている。
【0079】以上のように、本発明では、コードサイズ
を優先した場合のコードサイズおよび登録したコードパ
ターンの使用回数、実行速度を優先した場合のコードサ
イズを測定し、実行速度を優先した場合の生成コードの
一部または全部を、プログラム作成者が指定したコード
サイズ以内に収まるまで、コードサイズを優先した場合
の生成コードに置き換えてオブジェクトを出力する。こ
のため、従来のコードサイズを優先した場合の生成コー
ドと、実行速度を優先した場合の生成コードとの間の任
意のサイズのコードを生成することができ、結果とし
て、プログラム作成者が指定したコードサイズ以内で、
実行速度の速いオブジェクトを出力することができる。
を優先した場合のコードサイズおよび登録したコードパ
ターンの使用回数、実行速度を優先した場合のコードサ
イズを測定し、実行速度を優先した場合の生成コードの
一部または全部を、プログラム作成者が指定したコード
サイズ以内に収まるまで、コードサイズを優先した場合
の生成コードに置き換えてオブジェクトを出力する。こ
のため、従来のコードサイズを優先した場合の生成コー
ドと、実行速度を優先した場合の生成コードとの間の任
意のサイズのコードを生成することができ、結果とし
て、プログラム作成者が指定したコードサイズ以内で、
実行速度の速いオブジェクトを出力することができる。
【0080】以上好ましい実施例をあげて本発明を説明
したが、本発明は必ずしも上記実施例に限定されるもの
ではない。
したが、本発明は必ずしも上記実施例に限定されるもの
ではない。
【0081】
【発明の効果】以上説明したように、本発明の言語処理
装置及び言語処理方法によれば、実行速度を優先するコ
ード生成の一部を、コードサイズを優先するコード生成
に置き換えることにより、実行速度の劣化を抑えると共
にオブジェクトのコードサイズの調整ができるため、オ
ブジェクトの実行速度をあまり損なわずに、コードサイ
ズの短縮ができるという効果がある。
装置及び言語処理方法によれば、実行速度を優先するコ
ード生成の一部を、コードサイズを優先するコード生成
に置き換えることにより、実行速度の劣化を抑えると共
にオブジェクトのコードサイズの調整ができるため、オ
ブジェクトの実行速度をあまり損なわずに、コードサイ
ズの短縮ができるという効果がある。
【0082】これにより、実行速度を優先するコード生
成を行ったオブジェクトが、プログラム作成者の希望す
るコードサイズに収まらなかった場合にプログラム作成
者自身がオブジェクトを書き換えてオブジェクトのコー
ドサイズを調整するといったプログラム作成者の手間を
省くことができるという効果がある。
成を行ったオブジェクトが、プログラム作成者の希望す
るコードサイズに収まらなかった場合にプログラム作成
者自身がオブジェクトを書き換えてオブジェクトのコー
ドサイズを調整するといったプログラム作成者の手間を
省くことができるという効果がある。
【0083】また、オブジェクトのコードサイズを調節
して、実行速度を向上することができるため、コードサ
イズを優先するコード生成を行ったオブジェクトが、プ
ログラム作成者の希望するコードサイズよりずっと小さ
くなった場合に、オブジェクトのコードサイズをプログ
ラム作成者の希望するコードサイズまで増やすことによ
って、より実行速度の速いオブジェクトを作成すること
ができるという効果がある。
して、実行速度を向上することができるため、コードサ
イズを優先するコード生成を行ったオブジェクトが、プ
ログラム作成者の希望するコードサイズよりずっと小さ
くなった場合に、オブジェクトのコードサイズをプログ
ラム作成者の希望するコードサイズまで増やすことによ
って、より実行速度の速いオブジェクトを作成すること
ができるという効果がある。
【図1】 本発明の第1の実施例による言語処理装置の
構成を示すブロック図である。
構成を示すブロック図である。
【図2】 第1の実施例によるコードサイズ測定部から
コード生成部までの動作を示すフローチャートである。
コード生成部までの動作を示すフローチャートである。
【図3】 第1の実施例によるコードサイズ測定部から
コード生成部までの動作を示すフローチャートである。
コード生成部までの動作を示すフローチャートである。
【図4】 第1の実施例による言語処理装置のコードパ
ターン登録部の登録内容を示す図である。
ターン登録部の登録内容を示す図である。
【図5】 第1の実施例による言語処理装置のコードパ
ターン登録部の登録内容の具体例を示す図である。
ターン登録部の登録内容の具体例を示す図である。
【図6】 本発明の第2の実施例によるコードパターン
選択部からコード生成部までの動作を示すフローチャー
トである。
選択部からコード生成部までの動作を示すフローチャー
トである。
【図7】 本発明の第2の実施例によるコードパターン
選択部からコード生成部までの動作を示すフローチャー
トである。
選択部からコード生成部までの動作を示すフローチャー
トである。
【図8】 第2の実施例による言語処理装置のコードパ
ターン登録部の登録内容を示す図である。
ターン登録部の登録内容を示す図である。
【図9】 第2の実施例による言語処理装置のコードパ
ターン登録部の登録内容の具体例を示す図である。
ターン登録部の登録内容の具体例を示す図である。
【図10】 従来の言語処理装置の構成を示すブロック
図である。
図である。
【図11】 従来の言語処理装置の動作を示すフローチ
ャートである。
ャートである。
11 ソースプログラムファイル 12 言語処理装置 13 構文解析部 14 コードサイズ測定部 15 コードパターン選択部 16 コードパターン登録部 17 コード生成部 18 オブジェクト出力部 19 オブジェクトモジュールファイル 171 コードサイズ優先コード生成部 172 実行速度優先コード生成部
Claims (4)
- 【請求項1】 ソースプログラムを入力して解析する構
文解析部と、解析された結果に基づいて命令コードを生
成するコード生成部と、生成された命令コードをオブジ
ェクト・モジュール・ファイルに出力するオブジェクト
出力部とを備える言語処理装置において、前記オブジェクト・モジュール・ファイル のサイズを小
さくすることを優先した場合の生成コードと、前記オブ
ジェクト・モジュール・ファイルの実行速度を速くする
ことを優先した場合の生成コードとで異なるコードを出
力するパターンについて、それぞれのコード生成方法、
コード生成によるコードサイズの差を登録しておくコー
ドパターン登録部と、前記オブジェクト・モジュール・ファイル のサイズを小
さくすることを優先してコード生成を行った場合の前記
オブジェクト・モジュール・ファイルのサイズと、前記
オブジェクト・モジュール・ファイルの実行速度を速く
することを優先してコード生成を行った場合の前記オブ
ジェクト・モジュール・ファイルのサイズとを測定し、
かつ生成された命令コード中で、前記コードパターン登
録部に登録されている出力コードの各パターンを使用し
た回数を測定するコードサイズ測定部と、 前記コードサイズ測定部の測定結果と前記コードパター
ン登録部の登録内容を参照し、プログラム作成者が指定
した前記オブジェクト・モジュール・ファイルのコード
サイズ内に収まるように、前記オブジェクト・モジュー
ル・ファイルの実行速度を優先した生成コードの一部ま
たは全部を、前記オブジェクト・モジュール・ファイル
のサイズを優先した生成コードに置き換えるコードパタ
ーン選択部とを備え 、 前記コードパターン登録部が、前記オブジェクト・モジ
ュール・ファイルの実行速度の劣化を抑え、前記オブジ
ェクト・モジュール・ファイルのサイズをより小さくす
ることができる順番にコードパターンを登録すること を
特徴とする言語処理装置。 - 【請求項2】 前記コードパターン選択部が、各コード
パターンの使用回数のうち、オブジェクトのサイズを優
先するコード生成を行う回数を決定することを特徴とす
る請求項1に記載の言語処理装置。 - 【請求項3】 ソースプログラムを入力して解析する第
1のステップと、解析された結果に基づいて命令コード
を生成する第2のステップと、生成された命令コードを
オブジェクト・モジュール・ファイルに出力する第3の
ステップとを有する言語処理方法において、 前記ソースプログラムを解析する第1のステップと命令
コードを生成する第2のステップとの間に、 前記オブジェクト・モジュール・ファイルのサイズを小
さくすることを優先した場合の生成コードと、前記オブ
ジェクト・モジュール・ファイルの実行速度を速くする
ことを優先した場合の生成コードとで異なるコードを出
力するパターンについて、それぞれのコード生成方法、
コード生成によるコードサイズの差を登録しておく第4
のステップと、 前記オブジェクト・モジュール・ファイルのサイズを小
さくすることを優先してコード生成を行った場合の前記
オブジェクト・モジュール・ファイルのサイズと、前記
オブジェクト・モジュール・ファイルの実行速度を速く
することを優先してコード生成を行った場合の前記オブ
ジェクト・モジュール・ファイルのサイズとを測定し、
かつ生成された命令コード中で、登録されている出力コ
ードの各パターンを使用した回数を測定する第5のステ
ップと、 前記コードパターンを登録する第4のステップによる登
録内容および前記コードサイズを測定する第5のステッ
プによる測定結果を参照して、プログラム作成者が指定
した前記オブジェクト・モジュール・ファイルのコード
サイズ内に収まるように、前記オブジェクト・モジュー
ル・ファイルの実行速度を優先した生成コードの一部ま
たは全部を、前記オブジェクト・モジュール・ファイル
のサイズを優先した生成コードに置き換える第6のステ
ップとを含み 、 前記コードパターンを登録する第4のステップが、前記
オブジェクト・モジュール・ファイルの実行速度の劣化
を抑え、前記オブジェクト・モジュール・ファイルのサ
イズをより小さくすることができる順番にコードパター
ンを登録するステップを含むことを特徴とする言語処理
方法 。 - 【請求項4】 前記コードパターン選択ステップが、各
コードパターンの使 用回数のうち、前記オブジェクト・
モジュール・ファイルのサイズを優先するコード生成を
行う回数を決定するステップを含むことを特徴とする請
求項3に記載の言語処理方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP23721196A JP3237693B2 (ja) | 1996-08-19 | 1996-08-19 | 言語処理装置および言語処理方法 |
DE69712687T DE69712687T2 (de) | 1996-08-19 | 1997-08-18 | Sprachbearbeitende Einheit und Verfahren zur Übersetzung eines Quellprogrammes in einer Objektmoduldatei |
EP97114206A EP0825531B1 (en) | 1996-08-19 | 1997-08-18 | A language processing unit and a language processing method to translate a source program and generate an object module file |
US08/914,856 US6014519A (en) | 1996-08-19 | 1997-08-19 | Language processing unit and a language processing method to translate a source program and generate an object module file |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP23721196A JP3237693B2 (ja) | 1996-08-19 | 1996-08-19 | 言語処理装置および言語処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH1063508A JPH1063508A (ja) | 1998-03-06 |
JP3237693B2 true JP3237693B2 (ja) | 2001-12-10 |
Family
ID=17012038
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP23721196A Expired - Fee Related JP3237693B2 (ja) | 1996-08-19 | 1996-08-19 | 言語処理装置および言語処理方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6014519A (ja) |
EP (1) | EP0825531B1 (ja) |
JP (1) | JP3237693B2 (ja) |
DE (1) | DE69712687T2 (ja) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69933323T2 (de) * | 1998-04-01 | 2007-01-11 | Matsushita Electric Industrial Co., Ltd., Kadoma | Kompiler |
JP2000076113A (ja) * | 1998-08-31 | 2000-03-14 | Kano Densan Hongkong Yugenkoshi | ファイル制御システム、ファイル更新方法、携帯情報端末装置、パーソナルコンピュータ装置および記憶媒体 |
JP3494376B1 (ja) * | 2002-12-05 | 2004-02-09 | 株式会社システムズ | プログラム解析装置およびプログラム |
US20050028132A1 (en) * | 2003-07-31 | 2005-02-03 | Srinivasamurthy Venugopal K. | Application specific optimization of interpreters for embedded systems |
KR100678912B1 (ko) * | 2005-10-18 | 2007-02-05 | 삼성전자주식회사 | 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템 |
JP2008015963A (ja) * | 2006-07-10 | 2008-01-24 | Oki Electric Ind Co Ltd | コンパイラ |
US8706477B1 (en) | 2008-04-25 | 2014-04-22 | Softwin Srl Romania | Systems and methods for lexical correspondence linguistic knowledge base creation comprising dependency trees with procedural nodes denoting execute code |
US8484630B2 (en) * | 2008-12-23 | 2013-07-09 | International Business Machines Corporation | Code motion based on live ranges in an optimizing compiler |
US8370294B2 (en) * | 2009-05-06 | 2013-02-05 | Microsoft Corporation | File stashing for storage media |
US8762131B1 (en) | 2009-06-17 | 2014-06-24 | Softwin Srl Romania | Systems and methods for managing a complex lexicon comprising multiword expressions and multiword inflection templates |
US8762130B1 (en) | 2009-06-17 | 2014-06-24 | Softwin Srl Romania | Systems and methods for natural language processing including morphological analysis, lemmatizing, spell checking and grammar checking |
GB2505564B (en) * | 2013-08-02 | 2015-01-28 | Somnium Technologies Ltd | Software development tool |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02133825A (ja) * | 1988-11-15 | 1990-05-23 | Nec Corp | コンパイル方式 |
CA2010067C (en) * | 1990-02-14 | 1993-10-26 | Steven Murray Hoxey | Reducing pipeline delays in compilers by code hoisting |
JP3190773B2 (ja) * | 1993-09-30 | 2001-07-23 | 日本電気株式会社 | 言語処理プログラムのコンパイル処理方法 |
JP2755154B2 (ja) * | 1994-02-23 | 1998-05-20 | 日本電気株式会社 | プログラム変換処理装置およびプログラム変換処理方法 |
US5764686A (en) * | 1994-05-05 | 1998-06-09 | Sanconix, Inc. | Enhanced time of arrival method |
US5734908A (en) * | 1995-05-31 | 1998-03-31 | Silicon Graphics, Inc. | System and method for optimizing a source code representation as a function of resource utilization |
US5740443A (en) * | 1995-08-14 | 1998-04-14 | International Business Machines Corporation | Call-site specific selective automatic inlining |
US5787285A (en) * | 1995-08-15 | 1998-07-28 | International Business Machines Corporation | Apparatus and method for optimizing applications for multiple operational environments or modes |
US5842017A (en) * | 1996-01-29 | 1998-11-24 | Digital Equipment Corporation | Method and apparatus for forming a translation unit |
JP2870514B2 (ja) * | 1996-12-16 | 1999-03-17 | 日本電気株式会社 | 半導体装置 |
-
1996
- 1996-08-19 JP JP23721196A patent/JP3237693B2/ja not_active Expired - Fee Related
-
1997
- 1997-08-18 EP EP97114206A patent/EP0825531B1/en not_active Expired - Lifetime
- 1997-08-18 DE DE69712687T patent/DE69712687T2/de not_active Expired - Fee Related
- 1997-08-19 US US08/914,856 patent/US6014519A/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP0825531B1 (en) | 2002-05-22 |
DE69712687T2 (de) | 2003-01-02 |
JPH1063508A (ja) | 1998-03-06 |
EP0825531A1 (en) | 1998-02-25 |
DE69712687D1 (de) | 2002-06-27 |
US6014519A (en) | 2000-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3237693B2 (ja) | 言語処理装置および言語処理方法 | |
US6192516B1 (en) | Interpreter generation and implementation utilizing interpreter states and register caching | |
US8271960B2 (en) | Obtaining profile data for use in optimizing computer programming code | |
US8286135B2 (en) | Performance visualization including hierarchical display of performance data | |
US20050193184A1 (en) | Configurable processor design apparatus and design method, library optimization method, processor, and fabrication method for semiconductor device including processor | |
US8677336B2 (en) | Block count based procedure layout and splitting | |
US20090089767A1 (en) | Method and system for implementing a just-in-time compiler | |
US20010039654A1 (en) | Compiler processing system for generating assembly program codes for a computer comprising a plurality of arithmetic units | |
JPH0721033A (ja) | 言語処理装置及びその方法 | |
US6330714B1 (en) | Method and computer program product for implementing redundant lock avoidance | |
JPH0934725A (ja) | 言語処理装置及び言語処理方法 | |
JP5576605B2 (ja) | プログラム変換装置およびプログラム変換方法 | |
JP2904099B2 (ja) | コンパイル装置およびコンパイル方法 | |
JP2008250838A (ja) | ソフトウェア生成装置、方法、およびプログラム | |
JP2004118367A (ja) | コンピュータ装置及びプログラム実行方法 | |
US20080177524A1 (en) | Simulation execution apparatus, method and computer readable medium | |
JPH07105013A (ja) | レジスタ割り付け方式 | |
JP2002041310A (ja) | クラス動的バインドシステムおよび方法 | |
JP2002073369A (ja) | オブジェクト指向プログラム性能改善支援装置、記録媒体及びプログラム | |
JP3327634B2 (ja) | プログラム変換装置、およびプログラム変換方法 | |
JP3566602B2 (ja) | コンパイル方法、および、コンパイル用プログラムを記録した記録媒体 | |
DE102004036293A1 (de) | Assembler, der zur Verringerung der Größe des Zielcodes fähig ist, und Prozessor zum Ausführen des Zielcodes | |
JP2005228047A (ja) | 言語処理装置及び言語処理プログラム | |
JP2004139369A (ja) | 定数アドレス領域を指示するポインタ解析方法 | |
JPH06242942A (ja) | ソースコードレベルデバッグ装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |