JPH11175351A - プログラム変換装置、高級言語プログラム内アセンブラ表現方法および記録媒体 - Google Patents

プログラム変換装置、高級言語プログラム内アセンブラ表現方法および記録媒体

Info

Publication number
JPH11175351A
JPH11175351A JP33967297A JP33967297A JPH11175351A JP H11175351 A JPH11175351 A JP H11175351A JP 33967297 A JP33967297 A JP 33967297A JP 33967297 A JP33967297 A JP 33967297A JP H11175351 A JPH11175351 A JP H11175351A
Authority
JP
Japan
Prior art keywords
operand
resource
assembler
program
unit
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
Application number
JP33967297A
Other languages
English (en)
Inventor
Hirohisa Tanaka
裕久 田中
Akira Tanaka
旭 田中
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP33967297A priority Critical patent/JPH11175351A/ja
Publication of JPH11175351A publication Critical patent/JPH11175351A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 (修正有) 【課題】 高級言語プログラム中に記述したアセンブラ
命令のオペランドに変数を指定し、効率的に資源割り付
けを行なうプログラム変換装置を提供する。 【解決手段】 アセンブラ命令処理部8により、ソース
プログラム中のアセンブラ命令記述文を読み込み、アセ
ンブラ命令記述文のオペランドに指定されている変数の
解析を行なう。資源割付部4のアセンブラ命令解析部に
おいて、アセンブラ命令記述文のオペランドに指定され
ている変数に対して優先的に資源割付処理を行なう。こ
れにより、アセンブラ命令記述文に対して効率的に資源
が割り付けられるため、アセンブラ命令の高速動作を可
能にする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、高級言語プログラ
ムを機械語プログラムに変換するプログラム変換装置
と、高級言語プログラム内アセンブラ表現方法と、プロ
グラム変換装置が出力する機械命令列が記録された記録
媒体に関するものである。
【0002】
【従来の技術】近年、組み込み機器におけるプログラム
開発においても、プログラムの規模が加速的に増大して
いる。それに伴って、プログラムの開発効率を高めるた
め、あるいはプログラムの再利用化を図るために、従来
行なわれていた機械語あるいはアセンブラによるプログ
ラム開発に代わり、C言語などの高級プログラミング言
語によるプログラム開発が盛んに行なわれるようになっ
た。
【0003】高級プログラミング言語を用いれば、プロ
グラマはプログラム中の数値の保持、演算、転送等の処
理を、変数を被演算子とした演算(ステップ)で表現で
きる。この変数はプログラマによって任意に定義され、
また必要な個数だけ用いられるため、プログラマは自由
にプログラムを記述できる。また、記述されたプログラ
ム(ソースプログラムと称す)は、コンパイルされるこ
とにより、コンピュータが理解可能な機械語プログラム
となる。当該機械語プログラム中の機械語命令は、レジ
スタ、メモリ、即値等を被演算子とし、上記変数はレジ
スタあるいはメモリに割り付けられる。
【0004】このように、高級プログラミング言語によ
るプログラム開発では、プログラマにわかりやすい表現
でプログラムを自由に記述することができる。さらにプ
ログラマは、プログラム中のどの変数が機械語プログラ
ムにおけるレジスタあるいはメモリに対応するのかを意
識することなくプログラムを記述することができ、汎用
性にすぐれている。
【0005】高級プログラミング言語によるプログラム
開発では、以上のような利点がある一方、高級プログラ
ミング言語によって記述されたプログラムからコンピュ
ータが理解可能な機械語プログラムに変換する際に、冗
長な命令が生成されることがあり、コードサイズおよび
プログラムの実行速度に影響を及ぼす場合がある。
【0006】組み込み機器においては、コストパフォー
マンスを上げるため、プロセッサの能力を最大限に稼働
させることが要求される。このように高速動作が要求さ
れるような所では、冗長な命令が許されない。なぜな
ら、冗長な命令が即プロセッサの性能低下につながるか
らである。
【0007】従って、高速動作が要求される部分につい
ては、従来と同じくアセンブラによるプログラミングが
行なわれる場合がある。
【0008】コンパイラによっては、これらのアセンブ
ラ命令をC言語などの高級言語プログラム中で記述し
て、そのアセンブラ命令を直接出力することが出来る。
その記述例として、Free Software Fo
undationのC言語コンパイラGCCを図18に
示す。
【0009】図18(a)には、C言語プログラムをア
センブラプログラムに変換するコンパイラの構成図を示
す。また図18(b)には、C言語プログラムをGCC
を使ってコンパイルする際に、C言語プログラム中にア
センブラ命令を直接記述する際の記述法を示している。
【0010】先頭の文字列asmは、以下の記述文がア
センブラ命令の直接記述であることを示しており、その
直後の’(’から末尾の;の直前の’)’までにアセン
ブラ命令に関する記述を行なう。次の”から”までの間
の文字列は、アセンブラ命令名およびオペランドを表し
ている。図18(b)の例では、最初のswapがアセ
ンブラ命令名を表し、次の%0、%1がオペランドを表
している。%の後ろの数字は何番目に記述された変数に
対応しているかを表している。文字列の後の:で区切ら
れた領域にはC言語プログラム中の変数名および割り付
けたいハードウェア資源の種類を設定する。例えば、a
の部分はfromという名前の変数をレジスタ(r)に
割り付けることを表している。従って、図18(b)の
記述例が表している意味は、アセンブラ命令はswap
命令で、その第一オペランドはレジスタに割り付けられ
た変数from、第二オペランドはレジスタに割り付け
られた変数toを表していることになる。
【0011】この例のように、”から”の間の文字列に
%が記述されている場合、文字列の後ろにC言語プログ
ラム中の変数を記述することが出来る。このような記述
をした場合、swap命令に割り当てられるハードウェ
ア資源をあらかじめ指定しておく必要はなく、コンパイ
ラの処理中に変数に割り当てられたハードウェア資源を
自動的に設定する。そのため、コンパイラの最適化や変
数のハードウェア資源への割り付けに関して制約が少な
くなるため、より効率の良いコードを出力することが出
来る。
【0012】
【発明が解決しようとする課題】しかしながら、上記従
来技術のプログラム変換装置においては、アセンブラ命
令記述文で指定されている変数に、効率良くハードウェ
ア資源が割り付けられない場合がある。そのソースプロ
グラム例を図19に示す。図19では、関数func1
内に自動変数が多く宣言されており、宣言された自動変
数の数がレジスタ資源の数よりも多いとする。図19の
プログラムにおいて、アセンブラ命令記述文では、第
一、第二オペランドとして共にレジスタを割り付けられ
ることが指定されている。更に、関数内の自動変数の数
よりもレジスタ数の方が少ないので、アセンブラ記述文
で指定されている変数に対してレジスタが割り当てられ
ない場合がある。この場合の対処法として、以下の2通
りの方法がある。
【0013】まず一つめの方法は、全てのレジスタに自
動変数を割り付けられるだけ割り付け、アセンブラ命令
記述文でレジスタが必要となった場合に、いずれかのレ
ジスタの内容をメモリに退避し、アセンブラ命令記述文
でレジスタを使用した後に、再びメモリに退避した内容
をレジスタに復元させる方法である。この方法で資源割
り付けした結果を図20(1)に示す。この例ではレジ
スタの数は4本としている。矢印Pがこの方法によって
生成された退避、復元の転送命令である。
【0014】しかしこの方法では、アセンブラ命令記述
文が出現するたびに、レジスタの内容を退避、復元する
転送命令が生成される可能性がある。特にアセンブラ命
令記述文が直接記述されているような部分は、プログラ
ムの高速動作が要求されている場合が多いので、これら
の転送命令の生成によって性能の低下を招いてしまうと
いう欠点がある。
【0015】二つめの方法は、レジスタの一部を作業用
レジスタとして確保しておき、アセンブラ命令記述文で
レジスタが必要になったときに、このレジスタに変数の
内容を転送し、アセンブラ命令記述文で利用する方法で
ある。この方法で資源割り付けした結果を図20(2)
に示す。この例ではレジスタの数は4本としており、作
業用レジスタとしてR2、R3を確保しているものとす
る。矢印Qがこの方法によって生成された転送命令であ
り、メモリに割り付けられた変数の内容を作業用レジス
タに転送している。
【0016】しかしこの方法では、レジスタの一部を作
業用レジスタとして利用しており、この作業用レジスタ
に変数を割り付けることが出来ないため、変数の値を保
持しておくために利用できるレジスタ数が少なくなり、
多くの変数がメモリに割り付けられることになる。その
結果、変数の演算を行なうたびにメモリからレジスタへ
の転送命令が多く出現し、プログラムの性能低下を招い
てしまうという欠点がある。
【0017】
【課題を解決するための手段】この課題を解決するため
に、本発明の請求項1記載のプログラム変換装置は、高
級言語プログラムをアセンブラプログラムに変換するプ
ログラム変換装置において、前記プログラム変換装置は
前記高級言語プログラムの文法を解析する構文解析部
と、前記高級言語プログラムを前記プログラム変換装置
内部のデータ形式の中間コードを生成する中間コード生
成部と、前記中間コードに対して最適化処理を行なう最
適化部と、前記高級言語プログラム内の変数をレジスタ
やメモリ等のハードウェア資源に割当を行なう資源割付
部と、前記中間コードからアセンブラプログラムを生成
するコード生成部と、高級言語プログラム内でのアセン
ブラ命令記述の解析を行ない、中間コードを生成するア
センブラ命令処理部とを備え、前記資源割付部は、前記
アセンブラ命令処理部によって生成された中間コードに
対して、前記中間コードの内容を解析し、前記中間コー
ドに対して優先的に資源割り付けを行なうアセンブラ命
令解析部を備えたものである。
【0018】また、本発明の請求項2記載のプログラム
変換装置は、請求項1記載のアセンブラ命令処理部に対
して、該アセンブラ命令処理部の入力アセンブラ命令記
述からアセンブラ命令名を取得するオペコード指定部
と、前記入力アセンブラ命令記述からオペランドを取得
するオペランド指定部を備え、前記オペランド指定部
は、前記入力アセンブラ命令記述のオペランドに対応す
る前記高級言語プログラム中の変数を取得するオペラン
ド変数指定部を備え、前記アセンブラ命令解析部は、前
記オペランド変数指定部で取得した変数に割り当てられ
た資源要素を前記アセンブラ命令のオペランドとするよ
うにしたものである。
【0019】また、本発明の請求項3記載のプログラム
変換装置は、請求項2記載のアセンブラ命令解析部に対
して、前記オペランド変数指定部で指定された変数に対
して、資源要素の割付順序の優先度を高くするオペラン
ド変数割付優先手段を備え、前記割付手段は前記オペラ
ンド変数割付優先手段によって設定された優先度に基づ
いて、順に資源要素の割付処理を行なうようにしたもの
である。
【0020】また、本発明の請求項4記載のプログラム
変換装置は、請求項2または3記載のアセンブラ命令解
析部に対して、前記オペランド変数指定部で指定された
変数を一時変数に置き換える一時変数置換手段を備え、
前記割付手段は、前記一時変数置換手段によって置き換
えられた一時変数を前記入力アセンブラ命令記述のオペ
ランドであると解釈し、一時変数への資源要素の割付処
理を行なうようにしたものである。
【0021】また、本発明の請求項5記載のプログラム
変換装置は、請求項2から4のいずれか記載のオペラン
ド指定部に対して、前記入力アセンブラ命令のオペラン
ドに割り付けられるべき資源要素を取得するオペランド
資源指定部を備え、前記アセンブラ命令解析部は、前記
オペランド資源属性指定部で取得した資源要素を前記ア
センブラ命令のオペランドとして割り付けるようにした
ものである。
【0022】また、本発明の請求項6記載のプログラム
変換装置は、請求項2から4のいずれか記載のオペラン
ド指定部に対して、前記入力アセンブラ命令のオペラン
ドに割り付けられるべき資源要素の種類を取得するオペ
ランド資源属性指定部を備え、前記アセンブラ命令解析
部は、前記オペランド資源属性指定部で取得した種類の
資源要素を前記アセンブラ命令のオペランドとして割り
付けるようにしたものである。
【0023】また、本発明の請求項7記載のプログラム
変換装置は、請求項6記載のオペランド資源属性指定部
に対して、レジスタ資源を指定するレジスタ資源指定部
とメモリ資源を指定するメモリ資源指定部を備えるよう
にしたものである。
【0024】また、本発明の請求項8記載のプログラム
変換装置は、請求項7記載のレジスタ資源指定部に対し
て、アドレスレジスタ資源を指定するアドレスレジスタ
資源指定部と、データレジスタ資源を指定するデータレ
ジスタ資源指定部を備えるようにしたものである。
【0025】また、本発明の請求項9記載のプログラム
変換装置は、高級言語プログラムをアセンブラプログラ
ムに変換するプログラム変換装置において、前記プログ
ラム変換装置は前記高級言語プログラムの文法を解析す
る構文解析部と、前記高級言語プログラムを前記プログ
ラム変換装置内部のデータ形式の中間コードを生成する
中間コード生成部と、前記中間コードに対して最適化処
理を行なう最適化部と、資源要素に割付済みの割付対象
の生存区間と、次に割り付ける資源要素との関係を解析
して、次に割り付ける割付対象にどの資源要素が適切か
を示す得失値を、各資源要素について計算する得失値計
算手段と、前記得失値計算手段により計算された得失値
を前記資源要素について正規化する得失値正規化手段
と、前記得失値正規化手段によって正規化された得失値
の大きさに応じて、割付対象にいずれかの資源要素を割
り付ける割付手段とを含み、前記高級言語プログラム内
の変数をレジスタやメモリ等のハードウェア資源に割当
を行なう資源割付部と、前記中間コードからアセンブラ
プログラムを生成するコード生成部とを備えるようにし
たものである。
【0026】また、本発明の請求項10記載のプログラ
ム変換装置は、請求項1記載のプログラム変換装置に対
して、高級言語プログラム内でのアセンブラ命令記述の
解析を行ない、中間コードを生成するアセンブラ命令処
理部を備え、前記資源割付部は、前記アセンブラ命令処
理部によって生成された中間コードに対して、前記中間
コードの内容を解析し、前記中間コードに対して優先的
に資源割り付けを行なうアセンブラ命令解析部を備える
ようにしたものである。
【0027】また、本発明の請求項11記載の高級言語
プログラム内アセンブラ表現方法は、アセンブラ命令の
オペコードを表すオペコード表記部分と、前記アセンブ
ラ命令のオペランドを表す少なくとも1つのオペランド
表記部分とからなるフォーマット表記部分と、高級言語
プログラム中の変数を表し、前記オペランド表記部分と
同数の変数表記部分とからなり、前記オペランド表記部
分で表されるオペランドと前記変数表記部分で表される
変数との対応関係がそれぞれの記載の順序で決定される
ようにしたものである。
【0028】また、本発明の請求項12記載のプログラ
ム変換装置は、請求項1記載のプログラム変換装置に対
して、前記アセンブラ命令処理部は、アセンブラ命令の
オペコードを表すオペコード表記部分と、前記アセンブ
ラ命令のオペランドを表す少なくとも1つのオペランド
表記部分とからなるフォーマット表記部分と、高級言語
プログラム中の変数を表し、前記オペランド表記部分と
同数の変数表記部分とからなり、前記オペランド表記部
分で表されるオペランドと前記変数表記部分で表される
変数との対応関係がそれぞれの記載の順序で決定される
高級言語プログラム内アセンブラ表現方法によって記述
されたアセンブラ命令記述を解析するようにしたもので
ある。
【0029】また、本発明の請求項13記載の記録媒体
は、高級言語プログラムをアセンブラプログラムに変換
するプログラム変換装置が出力し、複数のレジスタを含
む資源要素を有するプロセッサによって実行される機械
命令列が記録された記録媒体であって、前記高級言語プ
ログラム中に記載されたアセンブラ命令記述に対応する
第1の機械命令と、前記第1の機械命令に前置して配置
され、前記第1の機械命令が指定するオペランドに割り
当てられた資源要素の全てに値を設定する1つまたは複
数の機械命令とを含み、前記第1の機械命令の直前にお
いて、前記レジスタの全てが前記第1の機械命令に前置
して配置される機械命令列中の機械命令が指定するオペ
ランドに割り当てられているようにしたものである。
【0030】
【発明の実施の形態】以下、本発明のプログラム変換方
式およびプログラム変換装置の一実施形態について図面
を参照しながら説明する。
【0031】図1は本発明におけるプログラム変換装置
の構成図を表している。図1において、このプログラム
変換装置は、構文解析部1、中間コード生成部2、最適
化部3、資源割付部4、コード生成部5、アセンブラ命
令処理部8から構成される。
【0032】構文解析部1は、高級言語で記述されたプ
ログラム記憶部6に格納されているソースプログラムを
入力として受けとり、高級言語プログラムが正しい文法
で記述されているかどうかを判定する。
【0033】中間コード生成部2は、構文解析部1で正
しいと判定されたソースプログラムに対して、プログラ
ム変換装置の内部のデータ形式でソースプログラムに対
応する中間コードを生成する。プログラム変換装置内で
中間コード生成部2以降の処理は、中間コード生成部2
において生成された中間コードに対して行なう。
【0034】最適化部3は、中間コード生成部2におい
て生成された中間コードに対して、プログラムの処理の
流れや、変数への値の設定・参照位置の解析などを行な
い、プログラム変換装置の出力であるアセンブラプログ
ラムのコードサイズの縮小や、実行時間の短縮を図るた
めにさまざまな最適化処理を行なう。
【0035】資源割付部4は、ソースプログラム中にお
ける変数への値の設定・参照位置の解析を行ない、変数
への値の設定位置からその変数が最後に参照される位置
までの区間、即ち変数の値が有効となる生存区間を、全
ての変数について解析する。その生存区間の解析結果に
基づいて、各々の変数にレジスタやメモリなどのハード
ウェア資源を割り当てる。
【0036】コード生成部5は、資源割付部4までの処
理を行なった中間コードに対して、その中間コードに対
応するアセンブラコードを生成し、生成コード記憶部7
に格納する。
【0037】プログラム記憶部6は、高級言語で記述さ
れたソースプログラムを格納し、プログラム変換装置に
対して、ソースプログラムを入力する。
【0038】生成コード記憶部7は、プログラム変換装
置によって生成されたアセンブラプログラムを格納す
る。
【0039】アセンブラ命令処理部8は、構文解析部1
において、入力がアセンブラ命令であると判定された時
に実行され、アセンブラ命令の命令、オペランド、およ
び各々のオペランドで使用する変数名、後の資源割付部
4で利用する情報であるオペランド資源属性の設定を行
なう。
【0040】なお、構文解析部1、中間コード生成部
2、最適化部3、コード生成部5については、本発明の
主眼ではないので、詳細な説明は省略する。
【0041】次に、アセンブラ命令処理部8の構成を図
2(a)に示す。アセンブラ命令処理部8はオペコード
指定部11、オペランド資源属性指定部12、オペラン
ド変数指定部13から構成され、更にオペランド資源属
性指定部12はレジスタ資源指定部14およびメモリ資
源指定部15から構成されている。また、レジスタ資源
指定部14は、アドレスレジスタ資源指定部16および
データレジスタ資源指定部17から構成されている。
【0042】オペコード指定部11は、アセンブラ命令
処理部8の入力であるアセンブラ記述からアセンブラ命
令名を取得し、中間コードの情報として設定する。
【0043】オペランド資源属性指定部12は、入力ア
センブラ記述文からアセンブラ命令のオペランド領域を
解析し、対応するオペランドにどのハードウェア資源を
割り当てることが指定されているかを解析して、そのハ
ードウェア資源の属性を中間コードの情報として設定す
る。
【0044】オペランド変数指定部13は、オペコード
指定部11で取得されたアセンブラ命令で使用されるオ
ペランドに対応する変数名を取得し、中間コードの情報
として設定する。
【0045】また、オペランド資源属性指定部12の構
成を図2(b)に示す。オペランド資源属性指定部12
は、レジスタ資源指定部14およびメモリ資源指定部1
5から構成されている。
【0046】レジスタ資源指定部14は、オペランド資
源属性指定部12でレジスタ資源が指定された時に実行
され、指定されたオペランドがプログラム変換装置の資
源割付部4でレジスタに割り付けられることを表す情報
を中間コードに設定する。レジスタ資源指定部14は指
定されたレジスタ属性がアドレスレジスタである時には
アドレスレジスタ資源指定部16を、指定されたレジス
タ属性がデータレジスタである時にはデータレジスタ資
源指定部17をそれぞれ起動する。
【0047】メモリ資源指定部15は、オペランド資源
属性指定部12でメモリ資源が指定された時に実行さ
れ、指定されたオペランドがプログラム変換装置の資源
割付部4でメモリに割り付けられることを表す情報を中
間コードに設定する。
【0048】更に、レジスタ資源指定部14の構成を図
2(c)に示す。レジスタ資源指定部14は、アドレス
レジスタ資源指定部16およびデータレジスタ資源指定
部17から構成されている。
【0049】アドレスレジスタ資源指定部16は、レジ
スタ資源指定部14でアドレスレジスタ資源が指定され
た時に実行され、指定されたオペランドがプログラム変
換装置の資源割付部4でアドレスレジスタに割り付けら
れることを表す情報を中間コードに設定する。
【0050】データレジスタ資源指定部17は、レジス
タ資源指定部14でデータレジスタ資源が指定された時
に実行され、指定されたオペランドがプログラム変換装
置の資源割付部4でデータレジスタに割り付けられるこ
とを表す情報を中間コードに設定する。
【0051】以下に、アセンブラ命令処理部8の処理に
ついて、図6を参照しながら説明する。以下記号の順に
説明していく。
【0052】ステップa1では、アセンブラ命令処理部
8への入力がアセンブラ命令であるかどうかを判定す
る。Yesと判定された場合、ステップa2へと処理を
移行し、Noと判定された場合はアセンブラ命令処理部
8の処理を終了する。
【0053】ステップa2では、入力されたアセンブラ
命令からアセンブラ記述に関する文字列を取得する。
【0054】ステップa3では、ステップa2で取得さ
れた文字列からアセンブラ命令の名前を取得し、中間コ
ードのオペコード情報に取得した命令名を設定する。
【0055】ステップa4からステップa7では、ステ
ップa2で取得した文字列に、オペランド資源属性を表
す区切り文字である%が含まれている間、ステップa5
からステップa6までの処理を繰り返す。
【0056】ステップa5では、オペランド資源属性を
表す区切り文字である%に続く文字列について、後述の
オペランド資源属性設定処理を行なう。
【0057】ステップa6では、ステップa5で設定さ
れたオペランド情報を中間コードに追加する。
【0058】ステップa7では、ステップa4の処理に
戻り、ループ1の処理を繰り返す。文字列に%が含まれ
なくなった時、ループ1の処理を終了し、次のステップ
a8に処理を移行する。
【0059】ステップa8では、ループ1の処理で追加
されたオペランド情報のうち、先頭のオペランド情報を
中間コードから取得する。
【0060】ステップa9からステップa13では、中
間コードにオペランド情報が存在する間、ステップa1
0からステップa12までの処理を繰り返す。
【0061】ステップa10では、アセンブラ命令処理
部の入力アセンブラ記述から、変数名を読み込む。
【0062】ステップa11では、オペランド情報のオ
ペランド変数情報にステップa10で読み込んだ変数を
設定する。
【0063】ステップa12では、中間コードから次の
オペランド情報を取得する。ステップa13では、ステ
ップa9の処理に戻り、ループ2の処理を繰り返す。中
間コードにオペランド情報が存在しなくなった時、ルー
プ2の処理を終了し、アセンブラ命令処理部8の処理を
終了する。
【0064】次に、オペランド資源属性設定処理につい
て、図7を参照しながら説明する。以下記号の順に説明
していく。
【0065】まず、ステップb1で、オペランド資源属
性を表す区切り文字である%に続く文字列が”M”かど
うかの判定を行なう。Yesと判定された場合、ステッ
プb2へと処理を移行し、Noと判定された場合、ステ
ップb3へと処理を移行する。
【0066】ステップb2では、オペランド情報のオペ
ランド資源属性をメモリにし、オペランド資源属性設定
処理を終了する。
【0067】ステップb3では、区切り文字%に続く文
字列が”AR”かどうかの判定を行なう。Yesと判定
された場合、ステップb4へと処理を移行し、Noと判
定された場合、ステップb5へと処理を移行する。
【0068】ステップb4では、オペランド情報のオペ
ランド資源属性をアドレスレジスタにし、オペランド資
源属性設定処理を終了する。
【0069】ステップb5では、区切り文字%に続く文
字列が”DR”かどうかの判定を行なう。Yesと判定
された場合、ステップb6へと処理を移行し、Noと判
定された場合、オペランド資源属性設定処理を終了す
る。
【0070】ステップb6では、オペランド情報のオペ
ランド資源属性をデータレジスタにし、オペランド資源
属性設定処理を終了する。
【0071】図8にアセンブラ命令の記述例と、これら
を中間コードで表現した時のオペコード情報、オペラン
ド情報の例を示す。
【0072】図8(a)はアセンブラ命令の記述例を、
(b)は(a)をアセンブラ命令処理部8において処理
後に中間コードが保持している情報を表したものであ
る。
【0073】以下に、図8(a)の(1)のアセンブラ
命令記述の意味を説明する。まず最初の文字列”as
m”は、この文がアセンブラ命令記述であることを表し
ている。直後の”(”から文末の”;”の直前の”)”
までがアセンブラ命令記述の内容である。
【0074】”()”内の””で囲まれた部分はアセン
ブラ命令の出力フォーマットである。この例では、この
出力フォーマットは、C言語における標準ライブラリ関
数のprintf関数のフォーマットと類似した形式で
記述しており、C言語プログラマにとって理解しやすい
形式になっている。
【0075】出力フォーマット中の先頭の文字列”mo
v”はアセンブラ命令のオペコードを表している。この
例では、このアセンブラ命令は転送命令であることを示
している。
【0076】次の%Mはアセンブラ命令”mov”の第
一オペランドを表している。ここで、”%”はオペラン
ドとして固定のハードウェア資源を持つものではなく、
後述する変数に割り当てられたハードウェア資源を設定
することを意味している。この命令は第一オペランドと
してメモリ資源を割り当てられることを示している。
【0077】その次のコンマはオペランドの区切り文字
であり、コンマの後に続く%ARはアセンブラ命令”m
ov”の第二オペランドである。この命令は第二オペラ
ンドとして、アドレスレジスタを割り当てられることを
示している。
【0078】更に””に続くコンマは出力フォーマット
と変数名の区切り文字である。このコンマ以降に続く変
数名は、出力フォーマットオペランドに%が指定されて
いる時、その変数名に割り当てられたハードウェア資源
を、出力フォーマット中に%で指定されたオペランドと
して設定するために用いられる。
【0079】また、ここで記述されている変数は、出力
フォーマット中で%で指定されているオペランドと左側
から順に対応している。即ち(1)の例では、最初の”
%M”で指定されたオペランドには、最初の変数xが、
次の”%AR”で指定されたオペランドには、次の変数
yがそれぞれ対応していることになる。
【0080】同様に(2)の例では、アセンブラ命令”
mov”の第一オペランドに変数aに割り当てられたデ
ータレジスタを、第二オペランドに変数bに割り当てら
れたデータレジスタを持つことを示している。
【0081】次に、図8(a)のアセンブラ命令記述例
が中間コードとして表された場合に、中間コードが保持
する情報を同図(b)に示す。図8(a)の(1)が
(b)の(1)に対応している。
【0082】まず、左端に”OPASM”は中間コード
の種類を表しており、この中間コードが、アセンブラ命
令を表す中間コードであることを表している。
【0083】次に上の段に、オペコード情報が示されて
おり、そのアセンブラ命令のオペコードを表している。
この場合、アセンブラ命令のオペコードは”mov”で
あることがわかる。
【0084】その下の段に、オペランド情報が示されて
おり、そのアセンブラ命令の第一オペランドのオペラン
ド変数情報およびオペランド資源属性情報を表してい
る。この場合、オペランド変数情報は変数x、オペラン
ド資源属性情報はメモリであることがわかる。
【0085】更にその下の段にもオペランド情報が示さ
れており、アセンブラ命令の第二オペランドのオペラン
ド変数情報およびオペランド資源属性情報を表してい
る。この場合、オペランド変数情報は変数y、オペラン
ド資源属性情報はアドレスレジスタであることがわか
る。
【0086】同様に、(2)の例では、アセンブラ命令
のオペコードが”mov”、第一オペランドのオペラン
ド情報は、オペランド変数情報が変数a、オペランド資
源属性情報がデータレジスタであり、第二オペランドの
オペランド情報は、オペランド変数情報が変数b、オペ
ランド資源属性情報がデータレジスタであることがわか
る。
【0087】ここで、図8(a)の(1)のアセンブラ
命令記述に対してアセンブラ命令処理部8およびオペラ
ンド資源属性設定処理を適用した場合の処理例を以下に
示す。
【0088】まず図6のステップa1において、入力が
アセンブラ記述文かどうかを判定する。入力の先頭の文
字列が”asm”となっているので、この入力はアセン
ブラ記述文であることがわかり、Yesと判定されてス
テップa2へと処理を移行する。
【0089】次に、ステップa2において、出力フォー
マットの取得を行なう。ここで、”で囲まれた文字列”
mov %M,%AR”が得られる。
【0090】更に、ステップa3において、出力フォー
マットからアセンブラ命令のオペコード”mov”を取
得し、中間コードのオペコード情報に設定する。
【0091】次に、ステップa4からステップa7まで
のループ1を、出力フォーマット内に”%”が含まれる
間繰り返す。出力フォーマット内には”%”が含まれる
ので、ステップa5以降のループ処理を行なう。
【0092】ステップa5では、オペランド資源属性設
定処理を行ない、図7のステップb1へと処理を移行す
る。
【0093】ステップb1では、”%”に続く文字列
が”M”かどうかを判定する。この場合、文字列”M”
が続くので、Yesと判定され、ステップb2へと処理
を移行する。
【0094】ステップb2では、オペランド情報のオペ
ランド資源属性をメモリにして、オペランド資源属性設
定処理を終了する。
【0095】次に、ステップa6へと処理を移行し、ス
テップa5で設定したオペランド情報を中間コードに追
加する。
【0096】ステップa7では、ステップa4へと戻
る。ステップa4では、出力フォーマット中に”%”が
まだ含まれているので、更にステップa5以降の処理を
繰り返す。
【0097】ステップa5では、オペランド資源属性設
定処理を行ない、図7のステップb1へと処理を移行す
る。
【0098】ステップb1では、”%”に続く文字列
が”M”かどうかを判定する。この場合、文字列”A
R”が続くので、Noと判定され、ステップb3へと処
理を移行する。
【0099】ステップb3では、”%”に続く文字列
が”AR”かどうかを判定する。この場合、文字列”A
R”が続くのでYesと判定され、ステップb4へと処
理を移行する。
【0100】ステップb4では、オペランド情報のオペ
ランド資源属性をアドレスレジスタにして、オペランド
資源属性設定処理を終了する。
【0101】次に、ステップa6へと処理を移行し、ス
テップa5で設定したオペランド情報を中間コードに追
加する。
【0102】ステップa7では、ステップa4へと戻
る。ステップa4では、出力フォーマット中に”%”は
もう含まれていないので、ループ1の処理を終了し、ス
テップa8の処理へと移行する。ここまでの処理によっ
て設定された情報を図8(c)に示す。
【0103】ステップa8では、中間コードから先頭の
オペランド情報を取得する。この場合、図8(c)の矢
印Aのオペランド情報が選択される。
【0104】次に、資源割付部4の説明を以下に示す。
資源割付部4は、基本的には特開平8−59446号の
資源割付装置と同様の処理を行い、アセンブラ命令記述
文に記述されている変数に対して効率的に資源割り付け
が行なわれるよう、より改良を行なっている。更に後述
の得失計算ルーチンにおいて、各資源毎の得失値の重み
付けが均等になるよう、得失値の正規化を行なうことに
よって、より改良を行なっている。以下では、特開平8
−59446号の資源割付装置との相違点を中心に説明
していく。
【0105】資源割付部4の構成を図3に示す。資源割
付部4は割付対象保持部21、割付対象生成部22、生
存区間重複割付対象検出部23、資源継承割付対象検出
部24、割付優先度計算部25、アセンブラ命令解析部
26、割付資源要素決定部27および資源割付制御部2
8から構成されている。
【0106】割付対象保持部21は、割付対象生成部2
2で生成された割付対象と、割付対象の情報とからなる
割付情報テーブルを保持し、また割付状況テーブルを保
持する。
【0107】割付対象生成部22は、データフロー解析
の結果や制御フロー解析の結果を元に割付対象を生成す
る。またこのとき生存区間や使用中間命令、生存区間の
開始点、終了点も検出される。更に、割付処理の前に割
り付けることが必要な割付対象はここで資源要素を割り
付ける。生成された割付対象は割付対象保持部21に格
納される。
【0108】生存区間重複割付対象検出部23は、割付
対象同士の生存区間の重なりを調べる。つまり任意の割
付対象xと生存区間が重なる割付対象の集合である割付
対象集合Ov(x)を求める。Ov(x)の内容は割付
対象保持部21に格納される。
【0109】資源継承割付対象検出部24は、割付対象
保持部21に保持されている割付対象に関して資源継承
関係にある全ての割付対象を検出する。即ち任意の割付
対象xと資源継承関係にある割付対象の集合である割付
対象集合Rs(x)を求める。Rs(x)の内容は割付
対象保持部21に保持される。
【0110】割付優先度計算部25は、割付対象保持部
21に保持されている割付対象xについての割付優先度
を計算する。割付優先度とは資源要素への割付をどの割
付対象から行なうかを示す優先度である。ここでは、以
下の計算式を使用して求める。
【0111】割付優先度=(xの使用中間命令が存在す
るループレベルの総和)/xの生存区間の長さアセンブ
ラ命令解析部26は、アセンブラ命令の中間コードに保
持されている変数について効率的に資源割付を行なうた
めに、図11(2)に示すようにアセンブラ命令記述文
に記述された変数を一時変数に置き換える。これは、ア
センブラ命令記述文に記述された変数は、オペランド資
源属性指定部12によって、割り付けられるべきハード
ウェア資源の種類が指定されているため、割付処理での
束縛が大きい。そのため、この変数を図11の矢印Eお
よび矢印Fに示すように一時変数に置き換えることによ
って束縛が大きい変数の生存区間を短くすることがで
き、割付処理での自由度が向上し、効率の良い資源割付
が行なわれるからである。この時生成した一時変数に対
して効率的に優先的に資源割付を行なうことによってア
センブラ命令記述文で記述されている変数に効率的に資
源割付が行なわれる。これを実現するため、割付優先度
計算部25で求められた割付優先度の最大値よりも大き
い値の優先度を、この一時変数に設定する。
【0112】割付資源要素決定部27は、割付情報テー
ブルの内容に基づいて割付対象に資源要素を割り付け
る。
【0113】資源割付制御部28は、割付処理全体を制
御する。割付対象保持部21、割付対象生成部22、生
存区間重複割付対象検出部23、資源継承割付対象検出
部24、資源割付制御部28については、特開平8−5
9446号と同様であるので、詳細な説明については特
開平8−59446号を参照のこと。
【0114】割付資源要素決定部27の構成を図4に示
す。割付資源要素決定部27は割付候補資源要素保持部
31、割付可能資源要素検出部32、使用コスト計算部
33、使用コスト保持部34、推定利得計算部35、利
得保持部36、資源要素決定制御部37、資源別コスト
計算部38、資源別コスト保持部39および評価資源保
持部40から構成されている。
【0115】割付候補資源要素保持部31は、割付対象
xについての割付加納資源要素を保持する。
【0116】割付可能資源要素検出部32は、割付可能
資源要素を検出する。割付可能資源要素検出部32によ
って求められた割付可能資源要素の集合は割付候補資源
要素保持部31に格納される。
【0117】使用コスト計算部33は、使用コストを算
出することで割付候補資源要素保持部31に保持されて
いる各資源要素を割付対象xに割り付けた場合に割付対
象xの使用中間命令に対応する機械語命令がどれくらい
のメモリサイズまたは実行時間数を費やすかを見積も
り、各資源要素の選考を行なう。また使用コスト計算部
33は見積もり結果として算出したコスト値を各資源要
素毎に使用コスト保持部34に保持させる。
【0118】使用コスト保持部34は、算出された使用
コスト計算部33の計算結果を保持する。
【0119】推定利得計算部35は、使用コスト計算部
33がメモリサイズまたは実行時間を見積もるのに対
し、得失値を算出することで割付対象xに各資源要素を
割り付けると、どれだけ転送命令が削除できるかを見積
もり、各資源要素の選考を行なう。
【0120】利得保持部36は、推定利得計算部35に
よって算出された得失値の累計である利得値を保持す
る。
【0121】資源要素決定制御部37は、割付資源決定
の処理全体を制御する。資源別コスト計算部38は、推
定利得計算部35によって算出された利得値が複数の資
源について最大であった場合、後順コスト値の計算を行
なう。
【0122】資源別コスト保持部39は、資源別コスト
計算部38の計算結果である後順コスト値を資源毎に保
持する。
【0123】評価資源保持部40は、資源別コスト計算
部38の計算によって有効であることが判明した資源を
保持する。
【0124】割付候補資源要素保持部31、割付可能資
源要素検出部32、使用コスト計算部33、使用コスト
保持部34、利得保持部36、資源要素決定制御部3
7、資源別コスト計算部38、資源別コスト保持部39
および評価資源保持部40については、特開平8−59
446号と同様であるので、詳細な説明については特開
平8−59446号を参照のこと。
【0125】推定利得計算部35の構成を図5に示す。
推定利得計算部35は推定利得制御部41、追跡対象保
持部42、処理済割付対象保持部43、既損失割付対象
保持部44、重複割付対象保持部45および得失保持部
46から構成されている。
【0126】推定利得制御部41は、割付対象xについ
ての利得値を計算するよう、処理制御を行なう。
【0127】追跡対象保持部42は、得失計算ルーチン
の処理対象として生成された複数個の追跡対象を保持す
る。
【0128】処理済割付対象保持部43は、得失計算ル
ーチンの処理を完了することになる追跡対象を保持す
る。特に処理済割付対象保持部43の役割は資源継承関
係が直接または間接的に循環している場合、得失計算ル
ーチンの処理を無限に繰り返すことを防ぐためである。
【0129】既損失割付対象保持部44は、得失計算ル
ーチンの過程で同じ割付対象に対して得失値を減ずる処
理を2回以上行なわないようにするため、損失要因とし
て一度選択された割付対象を保持する。このように既損
失割付対象保持部44が設けられているのは損失要因の
極端な見積もりを避けるためである。
【0130】重複割付対象保持部45は、割付対象xと
生存区間が重なりかつ、未だ資源要素を割り付けていな
い割付対象を保持する。
【0131】得失保持部46は、得失計算ルーチンの実
行によって算出された得失値を各資源要素毎に保持す
る。
【0132】次に、アセンブラ命令解析部26の処理に
ついて、図9を参照しながら説明する。以下記号の順に
説明していく。
【0133】ます、ステップc1で全ての中間コードに
ついて、ステップc2からステップc11までの処理を
繰り返す。
【0134】ステップc2において、現在の中間コード
がアセンブラ命令の中間コードであるかどうかを判定す
る。アセンブラ命令の中間コードである場合、Yesと
判定され、ステップc3へと処理を移行する。Noと判
定された場合、ステップc12へと処理を移行し、ルー
プ1の処理を繰り返す。
【0135】次にステップc3で、現在の中間コードの
全てのオペランド情報について、ステップc4からステ
ップc10までの処理を繰り返す。
【0136】ステップc4では、オペランド情報にオペ
ランド変数情報が設定されているかどうかを判定する。
オペランド情報にオペランド変数情報が設定されている
場合、Yesと判定され、ステップc5へと処理を移行
する。Noと判定された場合、ステップc11へと処理
を移行し、ループ2の処理を繰り返す。
【0137】ステップc5では、一時変数を新たに生成
し、オペランド情報のオペランド変数情報に設定されて
いる変数を生成した一時変数に代入する中間コードを生
成する。
【0138】ステップc6では、ステップc5で生成し
た中間コードを、現在の中間コードであるアセンブラ命
令の中間コードの直前に挿入する。
【0139】ステップc7では、オペランド情報のオペ
ランド変数情報に設定されている変数に一時変数を代入
する中間コードを生成する。
【0140】ステップc8では、ステップc7で生成し
た中間コードを、現在の中間コードであるアセンブラ命
令の中間コードの直後に挿入する。
【0141】ステップc9では、オペランド情報のオペ
ランド変数情報に生成した一時変数を再設定する。
【0142】更にステップc10において、一時変数に
対して優先的に資源割付が行なわれるように、一時変数
の割付優先度を(割付優先度の最大値+1)に設定す
る。
【0143】ステップc11では、ステップc3の処理
に戻り、ループ2の処理を繰り返す。
【0144】ステップc12では、ステップc1の処理
に戻り、ループ1の処理を繰り返す。
【0145】全ての中間コードについてループ1の処理
を終了すると、アセンブラ命令解析部26の処理を終了
する。
【0146】ここで、図11(1)の中間コード列に対
してアセンブラ命令解析部26の処理を適用した場合の
処理例を以下に示す。簡単のため、図11(1)の中間
コード列にはアセンブラ命令の中間コードが矢印Bの一
つだけ含まれているとする。
【0147】まずステップc1およびステップc2にお
いて、アセンブラ命令の中間コードが現れるまで、中間
コードを進めていく処理を行なう。矢印Bの中間コード
が現れた時、ステップc2でYesと判定され、ステッ
プc3へと処理を移行する。
【0148】ステップc3において、矢印Bの中間コー
ド内に含まれる全てのオペランド情報についてステップ
c4以降の処理を繰り返す。まず矢印Cのオペランド情
報について処理を行なう。
【0149】ステップc4において、オペランド情報に
オペランド変数情報が設定されているかどうかを判定す
る。矢印Cのオペランド情報にはオペランド変数情報に
変数aが設定されているので、Yesと判定され、ステ
ップc5へと処理を移行する。
【0150】ステップc5において、一時変数t1を新
たに生成し、一時変数t1にオペランド変数情報の変数
aを代入する中間コードを生成する。
【0151】ステップc6において、生成した中間コー
ドを矢印Bの中間コードの直前に挿入する。その結果、
矢印Eのような中間コードが中間コード列に挿入され
る。
【0152】ステップc7において、オペランド変数情
報の変数aに一時変数t1を代入する中間コードを生成
する。
【0153】ステップc8において、生成した中間コー
ドを矢印Bの中間コードの直後に挿入する。その結果、
矢印Kのような中間コードが中間コード列に挿入され
る。
【0154】次に、ステップc9において、オペランド
変数情報に一時変数t1を設定する。その結果、矢印G
のようにオペランド変数情報が再設定される。
【0155】更に、ステップc10において、矢印Lに
示すように一時変数t1に、割付優先度の最大値+1で
ある3を設定する。
【0156】ステップc11において、ステップc3へ
と戻りループ2を繰り返し、次のオペランド情報(矢印
D)についてステップc4以降の処理を行なう。
【0157】ステップc4において、オペランド情報に
オペランド変数情報が設定されているかどうかを判定す
る。矢印Dのオペランド情報にはオペランド変数情報に
変数bが設定されているので、Yesと判定され、ステ
ップc5へと処理を移行する。
【0158】ステップc5において、一時変数t2を新
たに生成し、一時変数t2にオペランド変数情報の変数
bを代入する中間コードを生成する。
【0159】ステップc6において、生成した中間コー
ドを矢印Bの中間コードの直前に挿入する。その結果、
矢印Fのような中間コードが中間コード列に挿入され
る。
【0160】ステップc7において、オペランド変数情
報の変数bに一時変数t2を代入する中間コードを生成
する。
【0161】ステップc8において、生成した中間コー
ドを矢印Bの中間コードの直後に挿入する。その結果、
矢印Jのような中間コードが中間コード列に挿入され
る。
【0162】次に、ステップc9において、オペランド
変数情報に一時変数t2を設定する。その結果、矢印H
のようにオペランド変数情報が再設定される。
【0163】更に、ステップc10において、矢印Mに
示すように一時変数t2に、割付優先度の最大値+1で
ある4を設定する。
【0164】ステップc11において、ステップc3へ
と戻るが、矢印Bの中間コードに設定されているオペラ
ンド情報は全て処理済みなのでループ2の処理を抜け、
ステップc12へと移行し、ループ1の処理を繰り返
す。
【0165】以上のように全ての中間コードについてル
ープ1の処理を繰り返した結果、図11(2)に示すよ
うな中間コード列、および割付優先度が得られる。
【0166】次に、推定利得計算部35の処理につい
て、図10を参照しながら説明する。以下記号の順に説
明していく。なお、本発明の推定利得計算部35は、特
開平8−59446号の推定利得計算部35とステップ
d5およびステップd18において異なっており、その
他のステップのより詳細な説明については特開平8−5
9446号を参照のこと。
【0167】図10のステップd1では、推定利得制御
部41は利得保持部36および得失保持部46の各資源
要素に対応する内容をゼロにする。
【0168】ステップd2では、追跡対象保持部42、
処理済割付対象保持部43、既損失割付対象保持部44
を空にする。
【0169】ステップd3では、割付対象xに対して追
跡対象A(x)を生成し、A(x)の各項目を 追跡対象A(x)の割付対象 = A(x).ASO = x 追跡対象A(x)の生存区間長の和 = A(x).LNS = 1 追跡対象A(x)の資源要素集合 = A(x).RES = 割付候補資源要素保持部31に保持されている資源要素
の集合に設定し、生成した追跡対象A(x)を追跡対象保持
部42に格納する。
【0170】ステップd4では、得失計算ルーチンを呼
び出し、得失計算を行ない、各資源要素毎の計算結果を
得失保持部46に算出する。得失計算ルーチンに関する
詳細な説明は特開平8−59446号を参照のこと。
【0171】ステップd5では、ステップd4の得失計
算ルーチンの計算結果に対して、全ての資源要素の得失
値の最小値が負の値であった場合、その資源要素の得失
値がゼロになるよう、全ての資源要素の得失値にその値
を加算し、その後各資源要素の得失値を、全ての資源要
素の得失値の最大値で除算することによって得失値の正
規化を行なう。
【0172】ステップd6では、各資源要素毎に得失保
持部46に格納されている値を利得保持部36に格納す
る。
【0173】ステップd7では、割付候補資源要素保持
部31に格納されている資源要素であり且つ利得保持部
36に格納されている値が最大の資源要素の集合RSを
求める。
【0174】ステップd8では、集合RSの要素数が複
数個であるかどうかを判定する。Yesと判定された場
合、ステップd9へと処理を移行する。Noと判定され
た場合、推定利得計算部35の処理を終了する。
【0175】ステップd9では、割付対象xと生存区間
が重なり且つ未割り付けの割付対象が存在するかどうか
を判定する。Yesと判定された場合、ステップd10
へと処理を移行する。Noと判定された場合、推定利得
計算部35の処理を終了する。
【0176】ステップd10では、割付候補資源要素保
持部31を一旦空にし、新たに集合RSの資源要素を全
て格納する。
【0177】ステップd11では、利得保持部36の各
資源要素に対応する内容をゼロにし、追跡対象保持部4
2を空にする。
【0178】ステップd12では、割付対象xと生存区
間が重なり且つ未割り付けの割付対象のみを重複割付対
象保持部45に格納する。
【0179】ステップd13では、重複割付対象保持部
45が空になるまでステップd14からステップd19
までの処理を繰り返す。空になったら推定利得計算部3
5の処理を終了する。
【0180】ステップd14では、重複割付対象保持部
45から割付対象yを一つ取り出し、重複割付対象保持
部45から削除する。
【0181】ステップd15では、得失保持部46の各
資源要素に対応する内容をゼロにし、処理済割付対象保
持部43、既損失割付対象保持部44を空にする。
【0182】ステップd16では、割付対象yに対して
追跡対象B(y)を生成し、B(y)の各項目を 追跡対象B(y)の割付対象 = B(y).ASO = y 追跡対象B(y)の生存区間長の和 = B(y).LNS = 1 追跡対象B(y)の資源要素集合 = B(y).RES = 割付候補資源要素保持部31に保持されている資源要素
の集合に設定し、生成した追跡対象B(y)を追跡対象保持
部42に格納する。
【0183】ステップd17では、得失計算ルーチンを
呼び出し、得失計算を行ない、各資源要素毎の計算結果
を得失保持部46に算出する。得失計算ルーチンに関す
る詳細な説明は特開平8−59446号を参照のこと。
【0184】ステップd18では、ステップd17の得
失計算ルーチンの計算結果に対して、全ての資源要素の
得失値の最小値が負の値であった場合、その資源要素の
得失値がゼロになるよう、全ての資源要素の得失値にそ
の値を加算し、その後各資源要素の得失値を、全ての資
源要素の得失値の最大値で除算することによって得失値
の正規化を行なう。
【0185】この正規化処理の意味は、全ての重複割付
対象間の得失値の重み付けを均等化することである。例
えば図12に示すように、割付対象xに対する利得を計
算し、最適な資源要素を割り当てようとしたとき、割付
対象xと生存区間が重なる重複割付対象yおよび重複割
付対象zがあったとする。
【0186】得失値を正規化しない場合、推定利得計算
処理によって得られる得失値は図12(a)のようにな
り、利得値計算の結果、レジスタR1が最大の利得値と
なり、割付対象xにはR1が選択される。これは、重複
割付対象yの得失保持部の値が示すように、重複割付対
象yにレジスタR0を割り付けた場合の得失値が大きい
ため、この影響が利得計算に及んだためであり、割付対
象xにレジスタR1を割り付け、重複割付対象yにレジ
スタR0を割り付けることになる。しかし、割付対象間
の影響を均等にした方が、割付対象により適切な資源要
素を割り付けることが出来る。
【0187】そこで、得失値を正規化した場合、同図
(b)に示すように、それぞれの得失値は正規化され
る。この時、得失値が負の値である時、負の値を持つ資
源要素の得失値がゼロになるように、各々の得失値に負
の値の絶対値を加算する。利得値を計算した結果、割付
対象xにはレジスタR0あるいはレジスタR1が選択さ
れ、最終的にコスト計算によっていずれかのレジスタが
割り付けられる。
【0188】これによって、全ての重複割付対象間の得
失値の重み付けが均等化され、割付対象xと生存区間が
重なっている全ての重複割付対象が、割付対象xに及ぼ
す影響をより正確に推定することが出来る。
【0189】ステップd19では、各資源要素毎に得失
保持部46に格納されている値に割付対象yの割付優先
度を乗じた値を利得保持部36から減じてステップd2
0へと処理を移行する。
【0190】ステップd20では、ステップd13の処
理に戻り、ループ1の処理を繰り返す。
【0191】本発明のプログラム変換装置に対して、図
13に示すソースプログラムを適用する場合を考える。
この例で考えるプロセッサは、レジスタを4本保持して
おり、その内訳はデータレジスタD0、D1の2本、ア
ドレスレジスタA0、A1の2本とする。
【0192】まず、アセンブラ命令処理部8において、
ソースプログラム中に記述されたアセンブラ命令記述文
をアセンブラ命令の中間コードへと変換する。このソー
スプログラムにはアセンブラ記述文が1つ含まれてお
り、このアセンブラ記述文を中間コードに変換したもの
を図14(1)の中間コード列に示す。図14(1)の
中間コード列ではアセンブラ記述文の中間コードは”O
PASM”で表され、それに続く文字列”swap”が
アセンブラ命令名を表すオペコード情報であり、その後
の変数cおよび変数dがアセンブラ命令のオペランド情
報を表している。また、この時の各変数の生存区間を同
図(2)に示す。
【0193】割付優先度計算部25によって図13のソ
ースプログラムの中間コードに対して、各変数に対応す
る割付優先度を計算する。その結果を図14(3)に示
す。
【0194】次にアセンブラ命令解析部において、アセ
ンブラ命令の中間コードにおいて、新たに一時変数を導
入し、オペランド情報に設定されている変数を一時変数
に置き換える中間コードを中間コード列に挿入し、更に
置き換えた一時変数をオペランド情報に再設定する処理
を行なう。また同時に新たに生成した一時変数の割付優
先度を、それまでに設定されていた割付優先度の最大値
+1として設定する。図14(1)の中間コード列に対
して一時変数を導入し、オペランド情報に設定されてい
る変数を一時変数に置き換える中間コードを挿入した中
間コード列を図15(1)に示す。また、この時の各変
数の生存区間を同図(2)に、一時変数を付け加えた割
付優先度を同図(3)に示す。
【0195】次に割付優先度の最も高い割付対象、即ち
t2に対して、割付資源要素決定部27によって各資源
要素に対する利得計算を行ない、割付対象t2に割り付
ける資源要素を決定する。図15(2)に示すように、
割付対象t2は、t1、i、g、f、e、t11および
t10と生存区間が重複している。この時、割付対象t
2に対して特開平8−59446号の得失計算処理を行
ない、正規化した結果、それぞれの重複割付対象の得失
値は図16(1)に示すようになる。各々の得失値に割
付優先度を乗じて、割付対象t2の利得値を計算する
と、図16(2)の様になる。この図が示すように、割
付対象t2にはデータレジスタD0あるいはD1を割り
付けるのが良いことがわかる。そこで、資源別コスト計
算部38により、割付対象t2の資源要素としてレジス
タD0を割り付ける。更に、特開平8−59446号の
資源割付処理に示すように、割付対象t2とdに同じ資
源要素を割り付けることが出来るので、割付対象dもレ
ジスタD0となり、中間コードt2=d、およびd=t
2に伴う転送命令は生成されなくなる。
【0196】次に割付優先度の最も高い割付対象、即ち
t1に対して、同様に割付資源要素決定部27によって
各資源要素に対応する利得計算を行ない、割付対象t1
に割り付ける資源要素を決定する。この時、レジスタD
0は既に割り付け済みであるので、割り付け可能な資源
要素から削除する。図15(2)に示すように割付対象
t1は、i、g、f、e、t11およびt10と生存区
間が重複している。この時、割付対象t1に対して特開
平8−59446号の得失計算処理を行ない、正規化し
た結果、それぞれの重複割付対象の得失値は図16
(3)に示すようになる。各々の得失値に割付優先度を
乗じて、割付対象t1の利得値を計算すると、図16
(4)の様になる。この図が示すように、割付対象t1
にはデータレジスタD1を割り付けるのが良いことがわ
かる。従って、アセンブラ命令のオペランドにはそれぞ
れレジスタD1およびレジスタD0が割り付けられるこ
とになる。更に、特開平8−59446号の資源割付処
理に示すように、割付対象t1とcに同じ資源要素を割
り付けることが出来るので、割付対象cもレジスタD1
となり、中間コードt1=c、およびc=t1に伴う転
送命令は生成されなくなる。
【0197】同様に上記処理を繰り返し、最終的に割付
対象cおよびt1にはレジスタD1、割付対象dおよび
t2にはレジスタD0、割付対象iにはレジスタA0、
割付対象gにはレジスタA1、その他の割付対象にはメ
モリが割り付けられることになり、図13のソースプロ
グラムをアセンブラコードに変換した結果、図17のよ
うなコードが出力される。
【0198】この出力コードを図20の出力コードと比
較すると、図20(1)の場合、ループ内の命令ステッ
プ数はそれぞれ7であり同じである。しかし、アセンブ
ラ記述文が複数個指定されると、従来の方式ではそれぞ
れのアセンブラ記述文でメモリへの退避、復元の転送命
令が発生することになり、ステップ数は増加することに
なる。図20(2)の場合、ループ内のステップ数は従
来の方式では9、本発明の方式では7であり、ステップ
数が減少していることがわかる。
【0199】なお、上記実施形態において、アセンブラ
命令記述でオペランド資源属性を表すための区切り文字
を%としているが、%である必要はなく、区切り文字と
して利用できる文字であれば、その文字で代用してもよ
い。
【0200】また、オペランド資源属性設定処理で、オ
ペランド資源属性を表す区切り文字%の後に続く文字
が”M”、”AR”、”DR”の時に、対応するオペラ
ンド資源属性はそれぞれメモリ、アドレスレジスタ、デ
ータレジスタとしているが、メモリ、アドレスレジス
タ、データレジスタを表す文字列はそれぞれ”M”、”
AR”、”DR”である必要はなく、各々の属性を特定
できる文字列であれば、その文字列で代用してもよい。
【0201】また、オペランド資源属性設定処理で、オ
ペランド資源属性を表す区切り文字%の後に続く文字列
として”R”を指定することによってアドレスレジス
タ、データレジスタを総称したレジスタを表現するとし
てもよい。更にアドレスレジスタ、データレジスタを総
称したレジスタを表現する文字列は”R”である必要は
なく、レジスタを特定できる文字列であればその文字列
で代用してもよい。
【0202】また、オペランド資源属性を”%D0”な
どと指定して、データレジスタD0を指定するようにし
てもよい。同様にして、直接レジスタやメモリの番地を
指定してもよい。この場合、対応する変数には指定した
レジスタあるいはメモリが優先的に割り付けられる。
【0203】また、アセンブラ命令解析部26において
生成した一時変数に対して優先的に資源割付が行なわれ
るように、一時変数の割付優先度を(割付優先度の最大
値+1)としたが、一時変数の割付優先度が既存の変数
の割付優先度よりも大きくなれば良いので、割付優先度
の最大値に加える値は1である必要はなく、適当な正の
値で代用してもよい。
【0204】また、本発明のプログラム変換装置によっ
て生成された出力コードを、フロッピーディスクや半導
体メモリなどの記録媒体に記録してもよい。
【0205】
【発明の効果】以上のように本発明の請求項1記載のプ
ログラム変換装置は、高級言語プログラムをアセンブラ
プログラムに変換するプログラム変換装置において、前
記プログラム変換装置は前記高級言語プログラムの文法
を解析する構文解析部と、前記高級言語プログラムを前
記プログラム変換装置内部のデータ形式の中間コードを
生成する中間コード生成部と、前記中間コードに対して
最適化処理を行なう最適化部と、前記高級言語プログラ
ム内の変数をレジスタやメモリ等のハードウェア資源に
割当を行なう資源割付部と、前記中間コードからアセン
ブラプログラムを生成するコード生成部と、高級言語プ
ログラム内でのアセンブラ命令記述の解析を行ない、中
間コードを生成するアセンブラ命令処理部とを備え、前
記資源割付部は、前記アセンブラ命令処理部によって生
成された中間コードに対して、前記中間コードの内容を
解析し、前記中間コードに対して優先的に資源割り付け
を行なうアセンブラ命令解析部を備えたものである。こ
の構成によれば、高級言語プログラム中に記述されたア
センブラ記述に対して優先的に資源割付処理を行なうこ
とができ、不必要な転送命令の出現を抑えることができ
る。
【0206】また、本発明の請求項2記載のプログラム
変換装置は、請求項1記載のアセンブラ命令処理部に対
して、該アセンブラ命令処理部の入力アセンブラ命令記
述からアセンブラ命令名を取得するオペコード指定部
と、前記入力アセンブラ命令記述からオペランドを取得
するオペランド指定部を備え、前記オペランド指定部
は、前記入力アセンブラ命令記述のオペランドに対応す
る前記高級言語プログラム中の変数を取得するオペラン
ド変数指定部を備え、前記アセンブラ命令解析部は、前
記オペランド変数指定部で取得した変数に割り当てられ
た資源要素を前記アセンブラ命令のオペランドとしたも
のである。この構成によれば、プログラマはハードウェ
ア資源を意識することなくプログラムを作成することが
でき、更に資源割付部はアセンブラ命令記述に対して、
特定のハードウェア資源を割り当てることを強要されな
いため、より効率の良い資源割付処理を行なうことが出
来る。
【0207】また、本発明の請求項3記載のプログラム
変換装置は、請求項2記載のアセンブラ命令解析部に対
して、前記オペランド変数指定部で指定された変数に対
して、資源要素の割付順序の優先度を高くするオペラン
ド変数割付優先手段を備え、前記割付手段は前記オペラ
ンド変数割付優先手段によって設定された優先度に基づ
いて、順に資源要素の割付処理を行なうようにしたもの
である。この構成によれば、アセンブラ命令記述のオペ
ランドとして指定された変数に対して、優先的に資源割
付処理が行なわれ、アセンブラ命令のオペランドに効率
の良い資源割付処理を行なうことが出来る。
【0208】また、本発明の請求項4記載のプログラム
変換装置は、請求項2または3記載のアセンブラ命令解
析部に対して、前記オペランド変数指定部で指定された
変数を一時変数に置き換える一時変数置換手段を備え、
前記割付手段は、前記一時変数置換手段によって置き換
えられた一時変数を前記入力アセンブラ命令記述のオペ
ランドであると解釈し、一時変数への資源要素の割付処
理を行なうようにしたものである。この構成によれば、
アセンブラ命令記述で指定された変数の生存区間を短く
することができ、資源割付処理の自由度が上がり、効率
の良い資源割付処理を行なうことが出来る。
【0209】また、本発明の請求項5記載のプログラム
変換装置は、請求項2から4のいずれか記載のオペラン
ド指定部に対して、前記入力アセンブラ命令のオペラン
ドに割り付けられるべき資源要素を取得するオペランド
資源指定部を備え、前記アセンブラ命令解析部は、前記
オペランド資源属性指定部で取得した資源要素を前記ア
センブラ命令のオペランドとして割り付けるようにした
ものである。この構成によれば、資源割付部に対して、
アセンブラ命令のオペランドとして割り付けて欲しい資
源要素を指定することができ、プログラマのより詳細な
要求を満たすことが出来る。
【0210】また、本発明の請求項6記載のプログラム
変換装置は、請求項2から4のいずれか記載のオペラン
ド指定部に対して、前記入力アセンブラ命令のオペラン
ドに割り付けられるべき資源要素の種類を取得するオペ
ランド資源属性指定部を備え、前記アセンブラ命令解析
部は、前記オペランド資源属性指定部で取得した種類の
資源要素を前記アセンブラ命令のオペランドとして割り
付けるようにしたものである。この構成によれば、資源
割付部に対して、アセンブラ命令のオペランドとして割
り付けて欲しい資源要素の種類を指定することができ、
プログラマのより詳細な要求を満たすことが出来る。
【0211】また、本発明の請求項7記載のプログラム
変換装置は、請求項6記載のオペランド資源属性指定部
に対して、レジスタ資源を指定するレジスタ資源指定部
とメモリ資源を指定するメモリ資源指定部を備えるよう
にしたものである。この構成によれば、資源割付部に対
して、アセンブラ命令のオペランドとしてレジスタ資源
あるいはメモリ資源を指定することができ、プログラマ
のより詳細な要求を満たすことが出来る。
【0212】また、本発明の請求項8記載のプログラム
変換装置は、請求項7記載のレジスタ資源指定部に対し
て、アドレスレジスタ資源を指定するアドレスレジスタ
資源指定部と、データレジスタ資源を指定するデータレ
ジスタ資源指定部を備えるようにしたものである。この
構成によれば、資源割付部に対して、アセンブラ命令の
オペランドとしてアドレスレジスタ資源あるいはデータ
レジスタ資源を指定することができ、プログラマのより
詳細な要求を満たすことが出来る。
【0213】また、本発明の請求項9記載のプログラム
変換装置は、高級言語プログラムをアセンブラプログラ
ムに変換するプログラム変換装置において、前記プログ
ラム変換装置は前記高級言語プログラムの文法を解析す
る構文解析部と、前記高級言語プログラムを前記プログ
ラム変換装置内部のデータ形式の中間コードを生成する
中間コード生成部と、前記中間コードに対して最適化処
理を行なう最適化部と、資源要素に割付済みの割付対象
の生存区間と、次に割り付ける資源要素との関係を解析
して、次に割り付ける割付対象にどの資源要素が適切か
を示す得失値を、各資源要素について計算する得失値計
算手段と、前記得失値計算手段により計算された得失値
を前記資源要素について正規化する得失値正規化手段
と、前記得失値正規化手段によって正規化された得失値
の大きさに応じて、割付対象にいずれかの資源要素を割
り付ける割付手段とを含み、前記高級言語プログラム内
の変数をレジスタやメモリ等のハードウェア資源に割当
を行なう資源割付部と、前記中間コードからアセンブラ
プログラムを生成するコード生成部とを備えるようにし
たものである。この構成によれば、各割付対象に対応す
る得失値の最大値、最小値が等しくなるため、割付対象
間の影響度合を均等に取り扱うことが出来、より正確に
資源割付処理を行なうことが出来る。
【0214】また、本発明の請求項10記載のプログラ
ム変換装置は、請求項1記載のプログラム変換装置に対
して、高級言語プログラム内でのアセンブラ命令記述の
解析を行ない、中間コードを生成するアセンブラ命令処
理部を備え、前記資源割付部は、前記アセンブラ命令処
理部によって生成された中間コードに対して、前記中間
コードの内容を解析し、前記中間コードに対して優先的
に資源割り付けを行なうアセンブラ命令解析部を備える
ようにしたものである。この構成によれば、アセンブラ
命令処理部およびアセンブラ命令解析部を備えるプログ
ラム変換装置に対して、各割付対象に対応する得失値の
最大値、最小値が等しくなるため、割付対象間の影響度
合を均等に取り扱うことが出来、より正確に資源割付処
理を行なうことが出来る。
【0215】また、本発明の請求項11記載の高級言語
プログラム内アセンブラ表現方法は、アセンブラ命令の
オペコードを表すオペコード表記部分と、前記アセンブ
ラ命令のオペランドを表す少なくとも1つのオペランド
表記部分とからなるフォーマット表記部分と、高級言語
プログラム中の変数を表し、前記オペランド表記部分と
同数の変数表記部分とからなり、前記オペランド表記部
分で表されるオペランドと前記変数表記部分で表される
変数との対応関係がそれぞれの記載の順序で決定される
ようにしたものである。この構成によれば、オペランド
表現方法に記述された順番に変数表現方法に変数を指定
することによって自動的にオペランドと変数を対応させ
ることができるので、プログラミングの労力を節約する
ことが出来る。
【0216】また、本発明の請求項12記載のプログラ
ム変換装置は、請求項1記載のプログラム変換装置に対
して、前記アセンブラ命令処理部は、アセンブラ命令の
オペコードを表すオペコード表記部分と、前記アセンブ
ラ命令のオペランドを表す少なくとも1つのオペランド
表記部分とからなるフォーマット表記部分と、高級言語
プログラム中の変数を表し、前記オペランド表記部分と
同数の変数表記部分とからなり、前記オペランド表記部
分で表されるオペランドと前記変数表記部分で表される
変数との対応関係がそれぞれの記載の順序で決定される
高級言語プログラム内アセンブラ表現方法によって記述
されたアセンブラ命令記述を解析するようにしたもので
ある。この構成によれば、アセンブラ命令処理部および
アセンブラ命令解析部を備えるプログラム変換装置に対
して、オペランド表現方法に記述された順番に変数表現
方法に変数を指定することによって自動的にオペランド
と変数を対応させることができるので、プログラミング
の労力を節約することが出来る。
【0217】また、本発明の請求項13記載の記録媒体
は、高級言語プログラムをアセンブラプログラムに変換
するプログラム変換装置が出力し、複数のレジスタを含
む資源要素を有するプロセッサによって実行される機械
命令列が記録された記録媒体であって、前記高級言語プ
ログラム中に記載されたアセンブラ命令記述に対応する
第1の機械命令と、前記第1の機械命令に前置して配置
され、前記第1の機械命令が指定するオペランドに割り
当てられた資源要素の全てに値を設定する1つまたは複
数の機械命令とを含み、前記第1の機械命令の直前にお
いて、前記レジスタの全てが前記第1の機械命令に前置
して配置される機械命令列中の機械命令が指定するオペ
ランドに割り当てられているようにしたものである。こ
の構成によれば、高級言語プログラム中に記述されたア
センブラ命令記述に対して優先的に資源割付処理が行な
われ、不必要な転送命令の出現が抑えられている。
【図面の簡単な説明】
【図1】本発明の実施形態におけるプログラム変換装置
の構成図
【図2】(a)本発明の実施形態におけるアセンブラ命
令処理部の構成図 (b)同実施形態におけるオペランド資源属性指定部の
構成図 (c)同実施形態におけるレジスタ資源指定部の構成図
【図3】本発明の実施形態における資源割付部の構成図
【図4】本発明の実施形態における割付資源要素決定部
の構成図
【図5】本発明の実施形態における推定利得計算部の構
成図
【図6】アセンブラ命令処理部8の処理を表すフローチ
ャート
【図7】オペランド資源属性設定処理を示すフローチャ
ート
【図8】(a)本発明の実施形態におけるアセンブラ命
令の記述例を示す図 (b)同実施形態におけるアセンブラ命令の中間コード
表現を示す図 (c)同実施形態におけるアセンブラ命令処理部8の処
理過程の途中経過を表す図
【図9】アセンブラ命令解析部26の処理を表すフロー
チャート
【図10】推定利得計算部35の処理を表すフローチャ
ート
【図11】(1)アセンブラ命令解析処理開始時の中間
コード、変数の生存区間および割付優先度を表す図 (2)アセンブラ命令解析処理終了時の中間コード、変
数の生存区間および割付優先度を表す図
【図12】(a)従来の利得計算による割付資源要素の
選択の様子を表す図 (b)本発明の利得計算による割付資源要素の選択の様
子を表す図
【図13】本発明の実施形態における入力ソースプログ
ラム例を示す図
【図14】(1)アセンブラ命令解析処理前の中間コー
ド列を示す図 (2)アセンブラ命令解析処理前の各割付対象の生存区
間を示す図 (3)アセンブラ命令解析処理前の各割付対象の割付優
先度を示す図
【図15】(1)アセンブラ命令解析処理後の中間コー
ド列を示す図 (2)アセンブラ命令解析処理後の各割付対象の生存区
間を示す図 (3)アセンブラ命令解析処理後の各割付対象の割付優
先度を示す図
【図16】(1)割付対象t1に関する得失保持部の内
容を示す図 (2)割付対象t1に関する利得保持部の内容を示す図 (3)割付対象t2に関する得失保持部の内容を示す図 (4)割付対象t2に関する利得保持部の内容を示す図
【図17】本発明の実施形態における出力アセンブラプ
ログラムを示す図
【図18】(a)従来のプログラム変換装置の構成図 (b)従来のアセンブラ記述文の記述法を示す図
【図19】従来のプログラム変換装置における入力ソー
スプログラム例を示す図
【図20】(1)レジスタが不足した場合にレジスタの
内容をメモリに退避するような従来の資源割付方式例を
示す図 (2)特定レジスタを作業用レジスタとして確保してお
くような従来の資源割付方式例を示す図
【符号の説明】
1 構文解析部 2 中間コード生成部 3 最適化部 4 資源割付部 5 コード生成部 6 プログラム記憶部 7 生成コード記憶部 8 アセンブラ命令処理部 11 オペコード指定部 12 オペランド資源属性指定部 13 オペランド変数指定部 14 レジスタ資源指定部 15 メモリ資源指定部 16 アドレスレジスタ資源指定部 17 データレジスタ資源指定部 21 割付対象保持部 22 割付対象生成部 23 生存区間重複割付対象検出部 24 資源継承割付対象検出部 25 割付優先度計算部 26 アセンブラ命令解析部 27 割付資源要素決定部 28 資源割付制御部 31 割付候補資源要素保持部 32 割付可能資源要素検出部 33 使用コスト計算部 34 使用コスト保持部 35 推定利得計算部 36 利得保持部 37 資源要素決定制御部 38 資源別コスト計算部 39 資源別コスト保持部 40 評価資源保持部 41 推定利得制御部 42 追跡対象保持部 43 処理済割付対象保持部 44 既損失割付対象保持部 45 重複割付対象保持部 46 得失保持部

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 高級言語プログラムをアセンブラプログ
    ラムに変換するプログラム変換装置において、 前記プログラム変換装置は前記高級言語プログラムの文
    法を解析する構文解析部と、 前記高級言語プログラムを前記プログラム変換装置内部
    のデータ形式の中間コードを生成する中間コード生成部
    と、 前記中間コードに対して最適化処理を行なう最適化部
    と、 前記高級言語プログラム内の変数をレジスタやメモリ等
    のハードウェア資源に割当を行なう資源割付部と、 前記中間コードからアセンブラプログラムを生成するコ
    ード生成部と、 高級言語プログラム内でのアセンブラ命令記述の解析を
    行ない、中間コードを生成するアセンブラ命令処理部と
    を備え、 前記資源割付部は、前記アセンブラ命令処理部によって
    生成された中間コードに対して、前記中間コードの内容
    を解析し、前記中間コードに対して優先的に資源割り付
    けを行なうアセンブラ命令解析部を備えることを特徴と
    するプログラム変換装置。
  2. 【請求項2】 前記アセンブラ命令処理部は、該アセン
    ブラ命令処理部の入力アセンブラ命令記述からアセンブ
    ラ命令名を取得するオペコード指定部と、 前記入力アセンブラ命令記述からオペランドを取得する
    オペランド指定部を備え、 前記オペランド指定部は、前記入力アセンブラ命令記述
    のオペランドに対応する前記高級言語プログラム中の変
    数を取得するオペランド変数指定部を備え、 前記アセンブラ命令解析部は、前記オペランド変数指定
    部で取得した変数に割り当てられた資源要素を前記アセ
    ンブラ命令のオペランドとすることを特徴とする請求項
    1記載のプログラム変換装置。
  3. 【請求項3】 前記アセンブラ命令解析部は、 前記オペランド変数指定部で指定された変数に対して、
    資源要素の割付順序の優先度を高くするオペランド変数
    割付優先手段を備え、 前記割付手段は前記オペランド変数割付優先手段によっ
    て設定された優先度に基づいて、順に資源要素の割付処
    理を行なうことを特徴とする請求項2記載のプログラム
    変換装置。
  4. 【請求項4】 前記アセンブラ命令解析部は、 前記オペランド変数指定部で指定された変数を一時変数
    に置き換える一時変数置換手段を備え、 前記割付手段は、前記一時変数置換手段によって置き換
    えられた一時変数を前記入力アセンブラ命令記述のオペ
    ランドであると解釈し、一時変数への資源要素の割付処
    理を行なうことを特徴とする請求項2または3記載のプ
    ログラム変換装置。
  5. 【請求項5】 前記オペランド指定部は、 前記入力アセンブラ命令のオペランドに割り付けられる
    べき資源要素を取得するオペランド資源指定部を備え、 前記アセンブラ命令解析部は、前記オペランド資源属性
    指定部で取得した資源要素を前記アセンブラ命令のオペ
    ランドとして割り付けることを特徴とする請求項2から
    4のいずれか記載のプログラム変換装置。
  6. 【請求項6】 前記オペランド指定部は、 前記入力アセンブラ命令のオペランドに割り付けられる
    べき資源要素の種類を取得するオペランド資源属性指定
    部を備え、 前記アセンブラ命令解析部は、前記オペランド資源属性
    指定部で取得した種類の資源要素を前記アセンブラ命令
    のオペランドとして割り付けることを特徴とする請求項
    2から4のいずれか記載のプログラム変換装置。
  7. 【請求項7】 前記オペランド資源属性指定部は、 レジスタ資源を指定するレジスタ資源指定部とメモリ資
    源を指定するメモリ資源指定部を備えることを特徴とす
    る請求項6記載のプログラム変換装置。
  8. 【請求項8】 前記レジスタ資源指定部は、アドレスレ
    ジスタ資源を指定するアドレスレジスタ資源指定部と、 データレジスタ資源を指定するデータレジスタ資源指定
    部を備えることを特徴とする請求項7記載のプログラム
    変換装置。
  9. 【請求項9】 高級言語プログラムをアセンブラプログ
    ラムに変換するプログラム変換装置において、 前記プログラム変換装置は前記高級言語プログラムの文
    法を解析する構文解析部と、 前記高級言語プログラムを前記プログラム変換装置内部
    のデータ形式の中間コードを生成する中間コード生成部
    と、 前記中間コードに対して最適化処理を行なう最適化部
    と、 資源要素に割付済みの割付対象の生存区間と、次に割り
    付ける資源要素との関係を解析して、次に割り付ける割
    付対象にどの資源要素が適切かを示す得失値を、各資源
    要素について計算する得失値計算手段と、前記得失値計
    算手段により計算された得失値を前記資源要素について
    正規化する得失値正規化手段と、前記得失値正規化手段
    によって正規化された得失値の大きさに応じて、割付対
    象にいずれかの資源要素を割り付ける割付手段とを含
    み、前記高級言語プログラム内の変数をレジスタやメモ
    リ等のハードウェア資源に割当を行なう資源割付部と、 前記中間コードからアセンブラプログラムを生成するコ
    ード生成部とを備えることを特徴とするプログラム変換
    装置。
  10. 【請求項10】 前記プログラム変換装置は、高級言語
    プログラム内でのアセンブラ命令記述の解析を行ない、
    中間コードを生成するアセンブラ命令処理部を備え、 前記資源割付部は、前記アセンブラ命令処理部によって
    生成された中間コードに対して、前記中間コードの内容
    を解析し、前記中間コードに対して優先的に資源割り付
    けを行なうアセンブラ命令解析部を備えることを特徴と
    する請求項9記載のプログラム変換装置。
  11. 【請求項11】 アセンブラ命令のオペコードを表すオ
    ペコード表記部分と、 前記アセンブラ命令のオペランドを表す少なくとも1つ
    のオペランド表記部分とからなるフォーマット表記部分
    と、 高級言語プログラム中の変数を表し、前記オペランド表
    記部分と同数の変数表記部分とからなり、前記オペラン
    ド表記部分で表されるオペランドと前記変数表記部分で
    表される変数との対応関係がそれぞれの記載の順序で決
    定されることを特徴とする高級言語プログラム内アセン
    ブラ表現方法。
  12. 【請求項12】 前記アセンブラ命令処理部は、 アセンブラ命令のオペコードを表すオペコード表記部分
    と、前記アセンブラ命令のオペランドを表す少なくとも
    1つのオペランド表記部分とからなるフォーマット表記
    部分と、 高級言語プログラム中の変数を表し、前記オペランド表
    記部分と同数の変数表記部分とからなり、前記オペラン
    ド表記部分で表されるオペランドと前記変数表記部分で
    表される変数との対応関係がそれぞれの記載の順序で決
    定される高級言語プログラム内アセンブラ表現方法によ
    って記述されたアセンブラ命令記述を解析することを特
    徴とする請求項1記載のプログラム変換装置。
  13. 【請求項13】 高級言語プログラムをアセンブラプロ
    グラムに変換するプログラム変換装置が出力し、複数の
    レジスタを含む資源要素を有するプロセッサによって実
    行される機械命令列が記録された記録媒体であって、 前記高級言語プログラム中に記載されたアセンブラ命令
    記述に対応する第1の機械命令と、 前記第1の機械命令に前置して配置され、前記第1の機
    械命令が指定するオペランドに割り当てられた資源要素
    の全てに値を設定する1つまたは複数の機械命令とを含
    み、前記第1の機械命令の直前において、前記レジスタ
    の全てが前記第1の機械命令に前置して配置される機械
    命令列中の機械命令が指定するオペランドに割り当てら
    れていることを特徴とする記録媒体。
JP33967297A 1997-12-10 1997-12-10 プログラム変換装置、高級言語プログラム内アセンブラ表現方法および記録媒体 Pending JPH11175351A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP33967297A JPH11175351A (ja) 1997-12-10 1997-12-10 プログラム変換装置、高級言語プログラム内アセンブラ表現方法および記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP33967297A JPH11175351A (ja) 1997-12-10 1997-12-10 プログラム変換装置、高級言語プログラム内アセンブラ表現方法および記録媒体

Publications (1)

Publication Number Publication Date
JPH11175351A true JPH11175351A (ja) 1999-07-02

Family

ID=18329717

Family Applications (1)

Application Number Title Priority Date Filing Date
JP33967297A Pending JPH11175351A (ja) 1997-12-10 1997-12-10 プログラム変換装置、高級言語プログラム内アセンブラ表現方法および記録媒体

Country Status (1)

Country Link
JP (1) JPH11175351A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001290652A (ja) * 2000-04-04 2001-10-19 Matsushita Electric Ind Co Ltd プログラム変換装置、プログラム変換方法及び記録媒体
JP2011181114A (ja) * 2011-06-23 2011-09-15 Panasonic Corp プログラム変換装置、プログラム変換方法及び記録媒体

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001290652A (ja) * 2000-04-04 2001-10-19 Matsushita Electric Ind Co Ltd プログラム変換装置、プログラム変換方法及び記録媒体
JP2011181114A (ja) * 2011-06-23 2011-09-15 Panasonic Corp プログラム変換装置、プログラム変換方法及び記録媒体

Similar Documents

Publication Publication Date Title
Chow et al. The priority-based coloring approach to register allocation
US6023583A (en) Optimized variable allocation method, optimized variable allocation system and computer-readable memory containing an optimized variable allocation program
US6718541B2 (en) Register economy heuristic for a cycle driven multiple issue instruction scheduler
US5761514A (en) Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system
JP6275819B2 (ja) ユーザに指向されかつプロファイル主導の最適化用のフレームワーク
JP3311462B2 (ja) コンパイル処理装置
US8522222B2 (en) Tracing just-in-time compilation with pointers to local variables
US7725883B1 (en) Program interpreter
JP3337174B2 (ja) コンパイル方法
JP4745341B2 (ja) 依存性チェーン処理のためのシステム、方法及び装置
US6072952A (en) Method and apparatus for coalescing variables
US20120198427A1 (en) Ensuring Register Availability for Dynamic Binary Optimization
JP5583514B2 (ja) バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
US6925639B2 (en) Method and system for register allocation
US8056061B2 (en) Data processing device and method using predesignated register
US6360360B1 (en) Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects
JP3763518B2 (ja) コンパイラ、そのコンパイル方法およびプログラム
Leopoldseder et al. Fast-path loop unrolling of non-counted loops to enable subsequent compiler optimizations
US7356812B2 (en) Passing parameters by implicit reference
US6584611B2 (en) Critical path optimization—unload hard extended scalar block
US7240341B2 (en) Global constant pool to allow deletion of constant pool entries
US20040123072A1 (en) Method and system for modeling non-interlocked diversely bypassed exposed pipeline processors for static scheduling
JPH11175351A (ja) プログラム変換装置、高級言語プログラム内アセンブラ表現方法および記録媒体
JP2003216442A (ja) プログラム変換方法、これを用いたコンピュータ装置及びプログラム
JP3638171B2 (ja) 資源割付装置