JPH04322329A - 多機種対応型情報処理システム、および、方法 - Google Patents

多機種対応型情報処理システム、および、方法

Info

Publication number
JPH04322329A
JPH04322329A JP3091980A JP9198091A JPH04322329A JP H04322329 A JPH04322329 A JP H04322329A JP 3091980 A JP3091980 A JP 3091980A JP 9198091 A JP9198091 A JP 9198091A JP H04322329 A JPH04322329 A JP H04322329A
Authority
JP
Japan
Prior art keywords
program
instruction
abstract
register
machine
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.)
Granted
Application number
JP3091980A
Other languages
English (en)
Other versions
JP3602857B2 (ja
Inventor
Shinobu Koizumi
小泉 忍
Ichiro Kushima
久島 伊知郎
Hiroshi Watanabe
坦 渡辺
Toshiaki Jinno
神野 俊昭
Nobuyoshi Doumen
信義 堂免
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.)
Hitachi Ltd
Original Assignee
Hitachi 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
Priority to JP09198091A priority Critical patent/JP3602857B2/ja
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to DE69230707T priority patent/DE69230707T2/de
Priority to EP97121170A priority patent/EP0834803A3/en
Priority to EP97121157A priority patent/EP0838754A3/en
Priority to EP92106888A priority patent/EP0510616B1/en
Priority to US07/872,773 priority patent/US5586323A/en
Publication of JPH04322329A publication Critical patent/JPH04322329A/ja
Priority to US09/080,241 priority patent/US20020026633A1/en
Priority to US09/222,954 priority patent/US6343373B1/en
Priority to US10/762,373 priority patent/US20040154007A1/en
Application granted granted Critical
Publication of JP3602857B2 publication Critical patent/JP3602857B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】電子計算機における、ソースプロ
グラムから機械語プログラムへの翻訳方式であって、複
数機種の計算機に共通の中間形式(オブジェクトプログ
ラム)を用いる方式に関する。
【0002】
【従来の技術】高級言語で記述されたプログラムを計算
機上で実行する方法を大別すると、一般に、コンパイラ
方式、インタプリタ方式と呼ぶ、以下の2つに分けられ
る。
【0003】(コンパイラ方式)高級言語で記述された
プログラムを、実行すべき計算機の機械語プログラムに
変換した上で、変換後の機械語プログラムを直接実行す
る。
【0004】(インタプリタ方式)実行する計算機の機
械語とは別の言語(中間語)を設定し、    実行す
べき計算機上で中間語を解釈実行する別のプログラム(
インタプリタ)    を予め用意しておく。高級言語
で記述されたプログラムを中間語プログラム    に
変換し、変換後の中間語プログラムをインタプリタを用
いて実行する。
【0005】インタプリタ方式に対するコンパイラ方式
の利点は、以下の理由によるプログラム実行の高速性に
ある。
【0006】(1)インタプリタ方式では、中間語に相
当する機械語の実行以外に、各中間語に対応する処理へ
の振り分けやオペランドのアドレス計算等が必要である
。一方コンパイラ方式では直接に機械語を実行するので
、これらが不要である。
【0007】(2)コンパイラ方式ではプログラムの文
脈と実行する計算機の特性とを考慮した処理の省略(最
適化)が可能である。一方、インタプリタ方式では、イ
ンタプリタ自身は中間語プログラムに対して汎用性を持
つので、インタプリタは中間語プログラムをそのまま実
行するのみで、プログラムの文脈を考慮した処理の省略
ができない。また、中間語プログラムにも実行する計算
機の特性が反映されていないので、例えば、高級言語で
記述された特定の変数を目標計算機のレジスタにマッピ
ングし、処理の高速化を図ることも不可能である。
【0008】一つのプログラムを繰返し実行する際のプ
ログラムの運用形態という視点から見ると、従来の方法
では、(運用方法1)コンパイラ方式を採用し、変換後
の機械語プログラムを保存し繰返し直接実行する。
【0009】(運用方法2)インタプリタ方式を採用し
、中間語プログラムを保存しインタプリタによって繰返
し実行する。
【0010】のいずれかであった。
【0011】一つのプログラムを繰返し実行する場合に
は、それぞれの実行時間の短縮という観点からコンパイ
ラ方式を採用する場合が圧倒的に多いが、以下のような
デメリットも生じている。
【0012】(デメリット1)ソースプログラムを機械
語プログラムに変換するコンパイラが機種ごとに必要で
あり、コンパイラの開発量が大きくなる他、保守や拡張
をそれぞれの機種に対応のして行なう必要があり、保守
・拡張のオーバヘッドが大きくなる。
【0013】(デメリット2)同一プログラムを複数機
種で実行する場合、機種ごとにコンパイル(ソースプロ
グラムから機械語プログラムへの変換)が必要であり、
機械語プログラムの管理のオーバヘッドが大きい。
【0014】(デメリット3)複数機種がネットワーク
で接続されている環境において、同一のプログラムに対
する機械語プログラムが機種対応に複数必要となり、バ
ージョン管理やディスクスペースに問題があるほか、同
一プログラムの分散実行が困難である。
【0015】(デメリット4)実際に運用されているシ
ステムのなかには、ソースプログラムがなく、機械語プ
ログラムのみで運用されている場合がある。このような
システムでは、構成機種の移行・変更が困難である。ま
た、ハードウェア技術の進歩により計算機アーキテクチ
ャの高度化が容易となっているが、機械語プログラム財
産の継承のため、アーキテクチャの変更に強い制限が課
せられしまう。
【0016】上記でデメリットを解消するためには、保
存運用の形態としては特定の計算機に依存しない中間語
プログラムを採用し、中間語プログラムを実行するに際
して高速化のために目標計算機の機械語プログラムに変
換するという、コンパイラ方式とインタプリタ方式のそ
れぞれの利点のみを採った方式を採用すればよい。しか
し、現在のところ、そのような方式を採用した具体的な
システムは見当らない。
【0017】なお、コンパイラ方式並びにインタプリタ
方式に関しては、” A.Aho, R.Seti,a
nd J.Ullman: Compilers. p
ronciples,Techniques and 
Tools, Addison−Wesly1986 
”に詳しい。
【0018】
【発明が解決しようとする課題】特定の計算機に依存し
ない中間語プログラムを、繰返し実行するプログラムの
保存運用形態として採用するためには、実行速度が従来
のコンパイル方式による機械語プログラムと同等のレベ
ルになることが必要である。
【0019】即ち、上記を実現するためには、(1)保
存運用形態の中間語プログラムをインタプリタによって
実行するのではなく、実行の直前において機械語プログ
ラムに変換し実行すること (2)上記機械語プログラムへの変換において、実行す
べき計算機の特性を考慮した最適化を実施することが不
可欠である。
【0020】本発明の課題は、上記を実現するシステム
全体を与えること、即ち、保存運用のための中間語の具
体的な形式を与え、それを実行開始時点で機械語プログ
ラムに変換し最適化を実施する具体的な方法を設定する
ことにある。
【0021】さて、インタプリタ方式用に設計された中
間語は、以下の理由により上記を実現するための中間語
として利用することができない。
【0022】(1)インタプリタ方式のための中間語形
式には、インタプリタによる最適化を前提としていない
ので、機械語プログラムに変換する際に実施すべき最適
化に必要な情報を含んでいない。
【0023】(2)計算機は、有限個のレジスタを備え
レジスタ上での演算を主体としたレジスタマシンと、演
算スタックを備えスタック上での演算を主体にしたスタ
ックマシンに大別できる。現状では、世の中に実存する
計算機の大半はレジスタマシンである。インタプリタ方
式の中間語では、中間語およびインタプリタ設計の容易
さから、スタック上の演算を想定したものが多い。スタ
ック上の演算をレジスタ間の演算に変換することは不可
能ではないが、スタック上の値は使い捨てを想定したも
のであり、一方レジスタを効率的に活用するためには、
レジスタ上の値をできるだけ繰返し利用することが必要
である。即ち、スタックマシン的な中間語プログラムか
らレジスタマシンの効率的な機械語プログラムに変換す
ることは非常に困難な部分がある。
【0024】従って、特定の計算機に依存しない中間語
プログラムを保存運用形態とし実行直前に機械語プログ
ラムに変換する方式では、以下の要件を満たすことが必
要である。
【0025】(1)目標計算機として、レジスタマシン
に重点を置き、中間語プログラムレベルでレジスタの存
在を意識したプログラムのシーケンスとなっていること
。また、中間語プログラムまでの変換時点で、実施可能
な最適化が実施されていること。
【0026】(2)機械語プログラムへの変換時にレジ
スタの利用方法の最適化が実施可能であること。即ち、
レジスタへの値のロード、レジスタからの値のストアの
各命令の発行回数を最小化するように、レジスタの利用
を決定し、それら命令が不要ならば削除できること。ま
た、それら最適化に必要な情報を中間語プログラムから
得られること。
【0027】(3)目標計算機に特有の命令によって、
中間語プログラムの特定のシーケンス(複数命令)を代
替できることがある。このような場合、一般に、機械語
1命令で実現した方が効率的である。中間語複数命令に
対応する機械語命令が目標計算機に存在するならば、そ
れを利用した機械語プログラムを生成できること。
【0028】なお、以下では、保存運用の形式の(中間
語)プログラムを、従来のコンパイラ方式に習って、オ
ブジェクトプログラムと呼ぶ。
【0029】
【課題を解決するための手段】1.システムの構成本発
明では、ソースプログラムを実行計算機の機械語プログ
ラムに変換するシステムを、次の3つのサブシステムに
より構成する。
【0030】(1)コンパイラ:ソースプログラムから
、目標計算機の機種に依存しない形式のオブジェクトプ
ログラム(抽象オブジェクトプログラム)を生成するサ
ブシステム (2)リンカ:コンパイラにより生成された複数の抽象
オブジェクトプログラムを、一つの抽象オブジェクトプ
ログラムに結合するサブシステム (3)インストーラ:リンカにより結合された抽象オブ
ジェクトプログラムを、実行計算機の機械語プログラム
に変換するサブシステム。
【0031】2.オブジェクトプログラムの形式オブジ
ェクトプログラムを共通化するため、本発明では、複数
のレジスタを持つ抽象計算機(Abstruct Re
gister Machine、以下ARMと呼ぶ)を
設定し、その命令列を共通のオブジェクトプログラム(
以下、抽象オブジェクトプログラムと呼ぶ)の基本部分
として利用する。
【0032】ARMの特徴は以下の通りである。
【0033】(1)複数の抽象レジスタを持つ。(レジ
スタ数は、概念上無限であるが、実用上は抽象オブジェ
クトプログラムの形式により制限される)(2)命令機
能として、レジスタ−メモリ間のデータ転送、レジスタ
上の演算(四則演算、論理演算、シフト演算、比較)、
実行制御(無条件分岐、条件分岐、副プログラム呼び出
し/復帰)を持つ。
【0034】(3)メモリアドレスは、数値ではなく、
記号名称で表現される。
【0035】ここで、レジスタを持つ抽象計算機の命令
列をオブジェクトプログラムの基本部分とした理由は、
以下の通りである。
【0036】(理由1)オブジェクトプログラムから個
々の実行計算機の機械語プログラムへの変換を高速にす
るには、オブジェクトプログラムと機械語プログラムの
意味的ギャップをできるだけ小さくすることが望ましい
。現在広く用いられている計算機は、複数個のレジスタ
を持つレジスタマシンであり、一般のレジスタマシンの
持つ命令セットの意味的な共通部分を命令セットとして
持つARMを設定することで、意味変換のオーバヘッド
をなくし機械語プログラムへの変換を高速にする。
【0037】(理由2)レジスタマシンにおいて、機械
語プログラムの実行の高速化の鍵の一つは、レジスタの
有効利用である。ARMをコンパイラの目標計算機とす
ることにより、コンパイラはレジスタを最大限に利用し
た命令列を生成することができる。
【0038】また、抽象オブジェクトプログラムは次の
ものにより構成する。
【0039】(a)ARMの命令語列 (b)擬似コード(ラベル(分岐、入口、変数、定数)
定義、最適化のための埋め込み情報、ソースレベルデバ
ッグのための埋め込み情報) (c)生成制御指示子(抽象レジスタの割当て/解放の
指示、抽象レジスタの割当て状態によるARM命令語列
の選択) (d)ソースレベルデバッグのための変数名、及び、手
続き名の辞書 抽象レジスタに対しては、生成制御指示子によりレジス
タの種別を指定するが、具体的な計算機でそれが何に対
応するかまでは指定しない。このようにすることにより
、抽象オブジェクトプログラムの中で、レジスタを機種
に依存しない形で表面化する。
【0040】3.実行計算機仕様 抽象オブジェクトプログラムから実行計算機の機械語プ
ログラムを生成するために次の2つをインストーラに設
定する。
【0041】(i)実行計算機のレジスタ用途指定(使
用可能なレジスタの種別と数) (ii)ARMの命令語列パターンから実行計算機命令
語列パターンへの変換規則なお、上記において、ARM
の命令語列パターンと実行計算機の命令語列パターンは
、それぞれ、複数個の命令から構成される。
【0042】ここで、ARM命令と実行計算機の命令と
を1対1に対応させない理由は以下による。
【0043】(理由1)ARMの命令セットは、実際の
マシンの命令セットの厳密な意味での共通部分ではない
。従って、実行計算機の命令中にARMの対応命令が存
在しないことがある。この場合、1ARM命令を、実行
計算機の数命令で実現する必要がある。
【0044】(理由2)上記とは逆に、ARMの数命令
の命令列に対応する命令を実行計算機が備えている場合
がある。(例:レジスタ−メモリ演算命令等)一般に、
実行計算機の命令数を減らしたほうが実行速度が向上す
るため、このような場合は1命令で実現する。
【0045】4.抽象オブジェクトプログラムから実行
計算機の機械語プログラムへの変換方法インストーラは
、ARMの抽象レジスタと実行計算機の実レジスタとの
対応を管理するテーブル(以下、レジスタ管理テーブル
)を持ち、以下の様に動作する。
【0046】(1)抽象オブジェクトプログラム中の抽
象レジスタ割当て指示により、抽象レジスタと実レジス
タの対応付けを試みる。実行計算機仕様のレジスタ用途
指定に記述された範囲で、他の抽象レジスタと対応して
いない実レジスタ、即ち、空いていないレジスタが存在
すれば、当該実レジスタと指示された抽象レジスタとを
対応させる。
【0047】(2)抽象オブジェクトプログラム中のレ
ジスタ解放の指示により、抽象レジスタと実レジスタと
の対応付けを解除する。
【0048】(3)抽象オブジェクトプログラム中の生
成制御指示子により、抽象レジスタが実レジスタと対応
しているか否かを検査し、ARM命令語列を選択する。
【0049】(4)(3)で選択されたARM命令語列
に対し、実行計算機仕様におけるARMの命令語列パタ
ーンから実行計算機命令語列パターンへの変換規則を適
用し、実行計算機の命令語列の生成と、抽象レジスタ番
号の実レジスタ番号への置換とを実施する。
【0050】(5)(4)で生成された実行計算機の命
令語列において、メモリアドレスを記号名称から数値番
地へ変換する。
【0051】
【作用】コンパイラは、従来のコンパイラ技術を応用し
、ソースプログラムを抽象オブジェクトプログラムに翻
訳する。また、この時に、ソースプログラムレベルの最
適化、及び、レジスタの利用を前提としたARM命令語
レベルの最適化を行なう。
【0052】インストーラは、実行計算機仕様に基づき
、上記の方法により抽象オブジェクトプログラムから実
行計算機の機械語プログラムを生成する。
【0053】以上の結果、本システムが生成する実行計
算機の機械語プログラムは、(1)コンパイラによりソ
ースプログラムレベルの最適化とレジスタの利用に関す
る最適化が実施される、(2)インストーラの実レジス
タ割当て機能により、実行計算機が備える実レジスタを
最大限に利用することができる、(3)インストーラの
命令語列パターン置換機能により、例えば、連続するA
RMの複数命令語列を実行計算機の対応する1命令語に
置き換えることができ、    実行計算機が備える高
機能命令を生かすことができる、ので、従来の(コンパ
イラ方式)によって生成される機械語プログラムと同等
程度の実行速度性能を維持したまま、複数機種間でオブ
ジェクトプログラムを共有することができる。
【0054】
【実施例】以下、本発明における実施例を図を用いて説
明する。
【0055】図1は、本発明におけるソースプログラム
から機械語プログラムへの翻訳システムの構成の一例を
示している。
【0056】翻訳システムは、コンパイラ1001、リ
ンカ1002、インストーラ1003の各サブシステム
からなる。
【0057】コンパイラ1001は、ソースプログラム
1004を入力し、構文解析、意味解析、および後述す
るソースプログラムレベルでの最適化等を行ない、抽象
オブジェクトプログラムである ArmCodeプログ
ラム1005を出力する。なお、 ArmCodeは、
本発明の特徴の一つであるので、 ArmCodeの仕
様については図4〜図12を用いて後で詳細に説明する
。また、これに関連して、コンパイラの構成については
図2により、コンパイラにおける最適化処理については
、図13〜図22により後述する。
【0058】リンカ1002は、ソースプログラム10
04からコンパイラが生成した ArmCodeプログ
ラム1005、他のソースプログラム1006から同様
にコンパイラが生成した ArmCodeプログラム1
007、及び、 ArmCodeプログラムライブラリ
1008を入力し、各プログラム間のルーチン参照関係
の解決、変数・定数参照関係の解決、データ領域の統合
、及び、命令領域の統合を行ない、結合済 ArmCo
deプログラム1009を出力する。リンカ自身の機能
は、ArmCodeを通常の機械語とみなした従来のオ
ブジェクトプログラムのリンケージエディタの機能の一
部と同等であり、以下では詳細に述べない。
【0059】インストーラ1003は、結合済 Arm
Codeプログラム1009を入力し、個別の目標計算
機の仕様情報1010であるレジスタ用途指定1019
および機械命令選択規則1020を用いて、実レジスタ
割付、機械命令選択、機種依存最適化を行ない、機械語
プログラム1011を計算機A1012のメモリ上に展
開する。インストーラにおける処理も本発明の特徴であ
り、これについては図23〜図30を用いて後で詳細に
説明する。
【0060】計算機A1012は、上記で生成された機
械語プログラム1011を実行する。
【0061】コンパイラ1001により、ソースプログ
ラム1013から生成された ArmCodeプログラ
ム1014が、他の ArmCodeプログラムや A
rmCodeプログラムライブラリ1008との結合を
必要としない場合、インストーラ1003は、 Arm
Codeプログラム1014を直接入力し、機械語プロ
グラムに展開することができる。
【0062】インストーラ1003は、計算機A用の機
械語プログラムを生成するが、インストーラ1015は
、計算機Bの仕様情報1018を用いて計算機B101
7用の機械語プログラムを生成する。従って、本システ
ムでは、同一の結合済 ArmCodeプログラム10
09から、複数の計算機(計算機A1012、計算機B
1017)の機械語プログラム(機械語プログラム10
11、機械語プログラム1016)を生成し、それぞれ
の計算機で当該プログラムを実行することができる。
【0063】なお、同一の ArmCodeプログラム
から、異なる仕様の複数の計算機の機械語プログラムを
生成した例については、図31〜図35によって後述す
る。
【0064】図2は本発明における抽象レジスタマシン
コンパイラの一つの実施例を示すものである。ソースプ
ログラム3102は、まずコンパイラ3100の構文・
意味解析部3104によって構文解析、意味解析されて
中間語3106に変換され、ソースプログラムで使われ
ている各種の記号の情報が記号表3108に記載される
。その中間語3106に対して、中間語最適化部311
0によって制御フロー解析・データフロー解析して大域
的最適化を行い、抽象レジスタマシン命令の列としての
最適化前の ArmCode(Abstract re
gister machine Code)列3112
を生成する。その後、抽象レジスタ命令の最適化処理3
114を行って、最適化された抽象レジスタマシン命令
列としての抽象オブジェクトプログラム3116を生成
する。構文解析、意味解析、制御フロー解析、データフ
ロー解析、大域的最適化の方法については、A. V.
 Aho, R. Sethi,J. D. Ullm
an 著、Compilers Principles
, Techniques, and Tools (
Addison−Wesley Publishing
 Co., 1986) 等で述べられている。 抽象レジスタ命令の最適化処理については後で説明する
【0065】本発明の特徴の一つは、抽象レジスタマシ
ン命令 ArmCode の構成にある。ArmCod
e は、本発明で目的とする処理、すなわちオブジェク
トプログラムをロード時に対象機種に合わせた機械命令
に高速に変換する処理に適した構成と内容を有している
【0066】この抽象レジスタマシン命令の体系は、多
くの縮小命令セット計算機すなわちRISCマシンに共
通に適用できるものであり、ArmCode−R(Ab
stract RegisterMachine Co
de for RISC machines)と呼ぶ。
【0067】これは以下の特徴を持つ計算機に適してい
る。
【0068】(1)演算はレジスタの間でのみ行う。
【0069】(2)メモリアクセスは Load/St
ore型命令でのみ行う。
【0070】(3)ベースレジスタを持つ。
【0071】(4)演算に使えるレジスタの数は少なく
ない(16かそれ以上ある)。
【0072】(5)埋め込み定数(immediate
 constant)を持つ。
【0073】(6)すべての命令は1語(32ビット)
で表現される。
【0074】ArmCode−R の各命令は、特定の
計算機の機械命令そのものではないが、それに容易に変
換できるものであり、命令の表現形式には次の特徴があ
る。
【0075】(1)レジスタは、物理レジスタでなく、
抽象レジスタとして表現される。
【0076】(2)メモリは、数値による番地でなく、
記号名称によって表現される。
【0077】(3)メモリはバイト単位で番地付けされ
る。
【0078】(4)命令の長さは固定長である。
【0079】以下で単に ArmCode という場合
、それは ArmCode−R を表す。
【0080】図3は、図1における ArmCodeプ
ログラムと具体計算機の機械語プログラムとの対応関係
を示したものである。ソ−スプログラム2910は、既
に述べたように、コンパイラとリンカ2912で翻訳・
結合されて、抽象オブジェクトプログラム2920に変
換される。この抽象オブジェクトプログラムは、抽象レ
ジスタマシンの命令である  ArmCode  の列
として表される。
【0081】抽象レジスタマシンの命令は、現在の多く
の計算機に共通的なモデル計算機の命令であり、その個
々の命令に含まれる代表的項目は、抽象オペレ−タ29
21と抽象レジスタ指定2923、メモリ/定数指定2
925である。抽象オペレ−タは、メモリとレジスタ間
のデ−タ転送を指示するロ−ド、ストアや、算術演算と
しての加減算など、多くの計算機に普遍的に備わってい
る命令を表す。抽象レジスタ指定は、抽象レジスタマシ
ンのレジスタを表すものであり、実在のレジスタにおけ
るような使用個数の制限はないものとする。メモリや定
数の指定2924は、番地や値の大きさに制限のない点
以外は、実在の計算機におけるメモリや定数と同様の扱
いができるものとする。
【0082】抽象レジスタマシン命令列2920は、各
々の機種に合わせて作られたインスト−ラによって、対
象機種の機械語命令列に変換される。たとえば、図10
0の抽象レジスタマシン命令列2920は、機種A用イ
ンスト−ラ2930を使うと機種A用の機械語命令列2
950に変換され、機種C用インスト−ラ2940を使
うと機種C用の機械語命令列2960に変換される。抽
象レジスタマシンの命令と具体計算機の命令は、必ずし
も1対1に対応するのではなく、一般には抽象レジスタ
マシンのm個の命令からなる命令列が具体計算機のn個
の命令からなる命令列に変換される。各々の機械語命令
に含まれるオペレ−タやレジスタ指定、メモリ/定数指
定は、その機種固有のものである。例えば、機種A用の
機械語プログラム2950のオペレ−タ2951やレジ
スタ指定2953、メモリ/定数指定2955は、機種
A固有のものであり、機種B用の機械語プログラム29
60のオペレ−タ2961やレジスタ指定2963、メ
モリ/定数指定2965は、機種B固有のものである。
【0083】抽象レジスタマシン命令ArmCode 
には、計算機が実際に実行する命令とその構造を記述す
る機械語生成命令と、機械語生成を制御する生成制御文
が含まれる。例えば次のような形をとる。
【0084】 alloc(Ar10,RcArith,alc10,
5,0,0xc0000000);if (alc10
) { Load RegMd Ar10 Vbase OdD
isp v;}Add  RegCon Ar11 N
oreg OdCi 6;機械語生成命令には下記の種
類のものがあり、抽象オブジェクトプログラムではそれ
らをセミコロンで区切って書き並べる。
【0085】(1)機械語対応命令 (Load4, Store4, Add, Sub,
 他)(2)プログラムの構造を表す疑似命令(Sta
rt/Pend, Block/End, Stmt,
 他)(3)記号名称を指示する疑似命令 (Entry, External, Label, 
Name, 他)(4)メモリを指定する疑似命令 (Dword, Dconst, Daddr, 他)
(5)デバッガ等むけの記号情報を指定する疑似命令(
Sinf, 他) 生成制御文は、図4に示すように、条件文3120と代
入文3122、関数参照文3124からなり、その中で
は定数と単純変数を含む式が使える。生成制御関数とし
ては、3124に示すように、次のものが使える。
【0086】(1)alloc(抽象レジスタ名, レ
ジスタ種別,判定変数, 命令番号, 温存個数,優先
度)第1引数で指定した抽象レジスタに対して、第2引
数で指定した種別の物理レジスタの割付を要求する。命
令番号は割付要求に先行するレジスタ使用命令の順序番
号であり、温存個数は割付後も温存すべきレジスタの個
数を表す。優先度はレジスタ割付の優先度である。第3
引数の判定変数の値は、割要求時点で物理レジスタが割
り付けできれば1となり、割り付けできなければ0とな
る。
【0087】(2)free(抽象レジスタ名)引数で
指定した抽象レジスタに対する物理レジスタを解放する
【0088】レジスタ割付の優先度はビットベクトルで
表す。抽象レジスタ使用命令に一連番号をつけておき、
現地点よりp個先で使われるものには pー1個の0の
後に1が一つあるベクトルを対応させる。優先度はビッ
トベクトルを符号無しの整数値と見て大きいものの方が
高いとする。従って、すぐ次で使われる抽象レジスタの
優先度は、それより後ろで使われるものより高い。複数
箇所で使われるときは、それらのビットベクトルをOR
したベクトルを対応させる。現地点が一つすすむとその
ビットベクトルは一つ左へシフトされる。左シフトの際
、左へあふれたビットは捨てられ,右端には0が補われ
る。従って、抽象レジスタの優先度は、使用位置の直前
で最も高くなり使用位置を過ぎると下がる。
【0089】優先度を表すビットベクトルは、1命令に
1ビットと限定しているのではない。抽象レジスタを使
う命令の列、あるいは機械語対応命令の列を固定長の区
間に区切り、その各々の区間ごとに一つのビットを対応
させ、注目している抽象レジスタがその区間で使われて
いれば1とし、使われていなければ0とすることにして
もよい。このようにすれば、短いビットベクトルで長い
命令列のレジスタ使用状況を表現できる。区間の長さを
1とすれば上で述べた対応関係となる。
【0090】ループを通して使われるレジスタは、その
ループの長さ(の数分の1)の距離でまた使われるとし
て、その長さ(の数分の1)の調整数だけ右へシフトし
たビットベクトルを算術加算し、それを優先度を表すビ
ットベクトルとする。
【0091】抽象レジスタに物理レジスタを割り付ける
 alloc 関数ではこの優先度を指定し、その優先
度が使用可能な物理レジスタの個数の内にあれば割付を
行い、なければ割付しない。以前割り付けた抽象レジス
タの優先度は、使用位置が近ずいていれば上がり、過ぎ
ていれば下がるので、割付地点での他レジスタの優先度
と比較して割り付けるか否かを決める。優先度が低くて
あふれた抽象レジスタはメモリに割り付けされる。優先
度については、後ほど図9でさらに詳しく説明する。
【0092】ArmCode−Rの命令形式を図5に示
す。ArmCode−R の各命令3130は、オペレ
−タ3132、アドレスモ−ド3134、第1オペラン
ド3136、第2オペランド3138、第3オペランド
3140で構成される。それらは以下の内容を表す。
【0093】 オペレ−タ            命令の名称アドレ
スモ−ド        オペランド形態の区分第1オ
ペランド        レジスタ R1、リテラル 
c1または ArmCode番地 c1 第3オペランド        メモリ番地,ディスプ
レースメント d3、リテラル c3、ラベル c3、
ArmCode番地 c3、他 ここで、各オペランド3136、3138、3140は
図4に示す通り、次のように表現される(機械語生成命
令の仕様参照): レジスタ      抽象レジスタ番号メモリ番地  
  絶対番地、または変数名を表す記号表の位置、また
はメモリ内の番地を表す抽象レジスタ番号デイスプレ−
スメント    ベ−スレジスタに対する変位を表す数
値 リテラル      整定数(演算対象としての数値、
文字コ−ド、または文字列表や注釈表の位置)ラベル 
       レベル表 LBL の項目番号ArmC
ode番地   ArmCode の一つの命令の位置
第3オペランドは、オペランドの型を示す小項目とオペ
ランドを表す小項目の組合せとして、次のように表現さ
れる。
【0094】Odsym  s3    記号表記載項
目 s3OdLab  c3    ラベル表(LBL
)記載項目 c3Odci   c3    命令内ス
カラ定数 c3OdCL   c3    c3 で示
されるメモリ内スカラ定数OdCS   c3    
ストリング定数 c3OdGvar s3    コン
パイラで生成された一時変数 s3OdDisp c3
    ディスプレ−スメント c3OdNo   N
ull  第3オペランドのないことを表現第1オペラ
ンド3136は、ロ−ド系や演算系の命令では結果の格
納先を示し、ストア系の命令ではストアすべきデ−タを
保持しているレジスタを示し、条件分岐命令では、条件
判定の対象デ−タを保持しているレジスタを示す。
【0095】アドレスモ−ド3134は、有効なオペラ
ンドの個数とその役割を示す。
【0096】図6は、図5のアドレスモード3134と
、第1オペランド(オペランド1)3136、第2オペ
ランド(オペランド2)3138、第3オペランド(オ
ペランド3)3140の可能な組み合わせを示すもので
あり、RegReg, RegMI 等の各々のアドレ
スモード3170に対して、オペランド1(3172)
、オペランド2(3174)、オペランド3(3176
)がどんな役割を持つかを示している。空白の部分はそ
のオペランドが有効でないことを示す。オペランドが単
なるレジスタなら、そのレジスタの値を利用ないし設定
する。オペランドが定数なら、その値を利用する。オペ
ランドがアドレスレジスタなら、そのアドレスレジスタ
の内容をメモリ番地とみなしてオペランドをアクセスす
る。オペランドがベ−スレジスタとディスプレ−スメン
トで指定されていれば、ベ−スレジスタの内容とディス
プレ−スメントを加算した数をオペランドのメモリ番地
としてアクセスする。アドレスモ−ド RegRCC 
では、定数 c3 と c4 は 255 以下の正の
整数であるとして、第3オペランドの中に詰合せていれ
る。
【0097】機械語生成命令の仕様を図7から図12に
示す。そこで使う記号の意味は下記の通りである。
【0098】a  : 番地または定数 a。番地を表
す時、a は絶対番地を表す数値 c でも記号表の位
置を表す数値 s でも良い。
【0099】 [a]: 番地が a のレジスタまたはメモリの内容
a^ : 番地 a の内容でポイントされる(aの内
容を番地とする)レジスタまたはメモリ ( ): 括弧内を一つの記号として扱う−> : 右
のレジスタや変数への代入<− : 左のレジスタや変
数への代入ロ−ド命令3210には次のものがある。(
図7)Load      オペランド2、3で示され
る1語のデ−タをオペランド1のレジスタにロ−ド。
【0100】LoadB     オペランド2、3で
示される1バイトのデ−タをオペランド1のレジスタに
右詰めでロ−ド。
【0101】モ−ド別処理: RegReg    R1 <− [R2]RegMI
     R1 <− [R2^]RegMR    
 R1 <− [([R2]+d)^]RegMD  
   R1 <− [d]RegCon    R1 
<− c3RegAdr    R1 <− [R2]
+dストア命令3220には次のものがある。(図7)
Store     オペランド1の1語のデ−タをオ
ペランド2、3で示す場所にストア。
【0102】StoreB    オペランド1の右端
1バイトのデ−タをオペランド2、3で示す場所にスト
ア。
【0103】モ−ド別処理: RegReg    [R1] −> R2RegMI
     [R1] −> R2^RegMR    
 [R1] −> ([R2]+d)^RegMD  
   [R1] −> d整数型2項算術演算命令32
30には、次のものがある。 (図7) Add       オペランド1にオペランド2を加
算し、結果をオペランド1にいれる。
【0104】あふれの有無に合わせてcarry が1
か0になる。
【0105】Sub       オペランド1からオ
ペランド2を減算し、結果をオペランド1にいれる。
【0106】carry はオペランド2がオペランド
1より大なら1となり、そうでなければ0となる。
【0107】Mult      オペランド1にオペ
ランド2を乗算し、結果をオペランド1にいれる。
【0108】Div       オペランド1をオペ
ランド2で除算し、商をオペランド1にいれる。
【0109】UnsAdd    符号なしで計算する
こと以外はAdd と同じ。
【0110】UnsSub    符号なしで計算する
こと以外はSub と同じ。
【0111】AddC      carry と合わ
せて加算すること以外は Add と同じ。
【0112】SubB      borrowと合わ
せて減算すること以外は Sub と同じ。
【0113】モ−ド別処理: RegReg    ([R1] op [R2]) 
−> R1RegCon    ([R1] op c
3) −> R1ここで、op は演算子 実数型2項算術演算命令3240には、次のものがある
。 (図8) AddR      オペランド1にオペランド2を加
算し、結果をオペランド1にいれる。
【0114】SubR      オペランド1からオ
ペランド2を減算し結果をオペランド1にいれる。
【0115】MultR     オペランド1にオペ
ランド2を乗算し、結果をオペランド1にいれる。
【0116】DivR      オペランド1をオペ
ランド2で除算し、商をオペランド1にいれる。
【0117】モ−ド別処理: RegReg    ([R1] op [R2]) 
−> R1RegCon    ([R1] op c
3) −> R1ここで、op は演算子。
【0118】2項論理演算命令3250には次のものが
ある。(図8) And       オペランド1にオペランド2を 
and し、結果をオペランド1にいれる。
【0119】Or        オペランド1にオペ
ランド2を or  し、結果をオペランド1にいれる
【0120】Xor       オペランド1にオペ
ランド2を xor し、結果をオペランド1にいれる
【0121】モ−ド別処理: RegReg    ([R1] op [R2]) 
−> R1RegCon    ([R1] op c
3) −> R1ここで、op は演算子。
【0122】単項演算命令3260には次のものがある
。 (図8) Negate    オペランド1を符号反転し、結果
をオペランド1にいれる。
【0123】Not       オペランド1をビッ
ト反転し、結果をオペランド1にいれる。
【0124】モ−ド別処理: Reg1      オペランド1の内容に対して演算
し、結果をオペランド1に残す。
【0125】比較命令3270には次のものがある。(
図8) Compar    オペランド1と2の内容を比較し
、条件コ−ドを設定。
【0126】モ−ド別処理: RegReg    [R1]>[R2] なら Gt
, [R1]=[R2] なら Eq, [R1]<[
R2] なら Lt。
【0127】RegCon    [R1]>c3  
 なら Gt, [R1]=c3 なら Eq, [R
1]<c3   なら Lt。
【0128】条件テスト命令3280には次のものがあ
る。 (図8) TZero モ−ド Reg1    0なら条件コー
ドを Eqとし、そうでなければ Ne とする。
【0129】TBit  モ−ド RegCon  [
R1]の第3オペランド c3 の示すビット位置が、
0なら条件コードをEq とし、1なら Ne とする
【0130】条件分岐命令3290には次のものがある
。 (図9) BrEq      条件コ−ドが Eq なら、オペ
ランドで指定された位置に跳ぶ。
【0131】BrNe      条件コ−ドが Eq
 でなければ、オペランドで指定された位置に跳ぶ。
【0132】BrGt      条件コ−ドが Gt
 なら、オペランドで指定された位置に跳ぶ。
【0133】BrGe      条件コ−ドが Gt
 または Eqなら、オペランドで指定された位置に跳
ぶ。
【0134】BrLe      条件コ−ドが Lt
 または Eqなら、オペランドで指定された位置に跳
ぶ。
【0135】BrLt      条件コ−ドが Lt
 なら、オペランドで指定された位置に跳ぶ。
【0136】上記のいずれの場合も、条件に合わなけれ
ば直後の命令に進む。
【0137】モ−ド Const     ラベル表 LBL[C3] の示
す位置が跳び先の命令番地。
【0138】RegR      [R2]+d が跳
び先の命令番地。
【0139】無条件分岐命令3300は次の機能を持つ
。 (図9) Jump      オペランドで指定された位置に跳
ぶ。
【0140】モ−ド別処理 Const     ラベル表 LBL[C3] の示
す位置が跳び先の命令番地。
【0141】RegR      [R2]+d が跳
び先の命令番地。
【0142】副プログラム参照命令3310は次の機能
をもつ。(図9) Call      戻り番地を記録した後、オペラン
ドで指定された副プログラムへ跳ぶ。
【0143】モ−ド別処理 RegMR     戻り番地を R1 にいれ、[R
2]+d 番地へ跳ぶ。
【0144】RegMD     戻り番地を R1 
にいれ、LBL[c3] の示す副プログラム番地へ跳
ぶ。
【0145】Reg1      戻り番地をスタック
した後、[R1]番地へ跳ぶ。
【0146】Return命令3320は次の機能を持
つ。(図9) Return    オペランドで指定した副プログラ
ムから、Callで記録した戻り番地へ跳ぶ。
【0147】モ−ド別処理 Reg1      R1 に記録されている戻り番地
へ跳ぶ。
【0148】Reg0      Callでスタック
した戻り番地置をLIFO方式で取り出してそこへ跳ぶ
【0149】シフト命令3330には次のものがある。 (図10)いずれも第1オペランド R1 の内容を、
第2または第3オペランドで示された個数 n だけ、
左または右へシフトする。
【0150】ShiftL    R1 を n ビッ
ト左シフトする。 右の n ビットは 0 となる。
【0151】ShiftR    R1 を n ビッ
ト右シフトする。 左の n ビットは 0 となる。
【0152】モ−ド別処理 RegCon    R1 は は対象レジスタ、c3
 はシフトビット数。
【0153】RegReg    R1 は は対象レ
ジスタ、[R2] はシフトビット数。
【0154】回転命令3340には次のものがある。(
図10)いずれも第1オペランド R1 の内容を、第
2または第3オペランドで示された個数 n だけ、左
または右へ回転する。
【0155】RotL      R1 を n ビッ
ト左へ回転する。
【0156】RotR      R1 を n ビッ
ト右へ回転する。
【0157】モ−ド別処理 RegCon    R1 は は対象レジスタ、c3
 は回転ビット数。
【0158】RegReg    R1 は は対象レ
ジスタ、[R2] は回転ビット数。
【0159】ビット操作命令3350には次のものがあ
る。 (図10) GetBit  RegCC   R1 の c2 ビ
ットから始まる c3 ビットのデ−タを右詰めでR1
 にいれる。R1の左部分は0となる。
【0160】GetBit  RegRCC  R2 
の c2 ビットから始まる c3 ビットのデ−タを
右詰めでR1 にいれる。R1の左部分は0となる。
【0161】PutBit  RegRCC  R1 
の 右 c4 ビット長のデ−タをR2 の c3 ビ
ットから始まるc4 ビット長のフィ−ルドにいれる。 他のビットフィールドの内容は不変である。
【0162】データ変換命令3360には次のものがあ
る。 (図10) ItoR   RegReg   R1 の内容を、整
数から実数に変換して R2 にいれる。
【0163】RtoI   RegReg   R1 
の内容を、実数から整数に変換して R2 にいれる。
【0164】ItoD   RegReg   R1 
の内容を、整数から長精度実数に変換して R2 にい
れる。
【0165】DtoI   RegReg   R1 
の内容を、長精度実数から整数に変換して R2 にい
れる。
【0166】状態切り換え命令3370には次のものが
ある。(図11) SaveSt  RegMR   その時点でのプロセ
ッサの状態をメモリに待避する。
【0167】(待避情報:プログラムカウンタ、状態コ
ード、マスク、他) LoadSt  RegMR   メモリに格納されて
いる情報に従って、プロセッサの状態を回復する。
【0168】無操作命令3380は次のものである。(
図11) Nop     Reg0    何もしない。機械命
令としては1語を占める。
【0169】プログラム構造を表す疑似命令3390に
は次のものがある。(図11) Start Cont1 OdSym  s3 の示す
(記号表の)名前をもつオブジェクト開始疑似命令 SubP  Cont1 Odsym  s3 で示さ
れる副プログラムの開始を示す。
【0170】Block   Cont0   ブロッ
ク開始End     Cont0   ブロック終了
Loops Cont1 OdLab  LBL[c3
] で示されるラベルを反復開始点とするループ文の先
頭を示す。
【0171】Loope Cont1 OdLab  
LBL[c3] で示されるラベルを反復開始点とする
ループ文の末尾を示す。
【0172】Pend    Cont0   副プロ
グラム又はユニットの終わり(End の後ろに De
fine Storage や Define Con
stant が続き、最後に Pend が付く)St
mt  Cont1 OdCi  c3 を文番号とす
る文の開始位置を示す。
【0173】記号名称を指定する疑似命令3400には
次のものがある。(図11) Entry Cont1 OdSym  s3 の示す
(記号表の)名前を入り口名として示す疑似命令 Extern Cont1 OdSym  s3 の示
す(記号表の)名前が外部名であることを示す疑似命令 Label Cont1 OdLab  c3 が記号
表を持つ LBL表番号(ユ−ザラベル)の時、その記
号表の名前をラベル名として定義する疑似命令。
【0174】c3 が記号表を持たない LBL表番号
(生成ラベル)の n 時、その生成ラベル名¥nをラ
ベル名として定義する疑似命令。
【0175】Label Cont1 OdCL  c
3 がメモリ定数を表す LRG表番号 m の時、定
数名 ¥¥Cm をラベル名として定義する疑似命令。
【0176】Label Cont1 OdGvar 
 s3 が生成変数を表す記号表番号 k の時、生成
変数名 ¥¥Tk をラベル名として定義する疑似命令
【0177】Name  Cont1 OdSym  
s3 の示す(記号表の)名前を直前のOpLabel
の名前とEQUする命令メモリを指定する疑似命令34
10には次のものがある。 (図12) Dconst Cont1 OdCi  c3 を整定
数値とする定数定義Dconst Cont1 OdC
S  c3 を1語の文字列とみなす定数定義 Dconst Cont1 OdCS  c3 を1語
の文字列定数とする定数定義 Dword  Cont1 OdCi  c3 語のメ
モリをとる Define Storage 命令 Daddr  Cont1 OdSym  s3 の示
す(記号表の)名前に対する Define Addr
ess MCode  Cont1 OdCi  c3 の指す
機械語 MRT[c3] を生成する命令 デバッガ等向けの記号情報を指定する疑似命令3420
には次のものがある。(図12) PInf  Cont1 OdCi  c3 の示す位
置にあるプログラム特性情報表の情報を示す。
【0178】SInf  Cont1 OdCi  c
3 の示す位置にある記号情報を示す。
【0179】図13は図2に示したコンパイラの入力と
なるソースプログラム3102の一つの例である。これ
は大域的変数を指定する宣言文3610や、関数名称の
指定3614、関数内の局所的変数の宣言3616、及
び、3620から始まる実行文の列等で構成されている
。3610の文頭にある1や3620の文頭にある10
等の番号は、それぞれの文の文番号を表す。図14から
図16は、このソースプログラムを ArmCode 
の列に変換した例である。これではまだ最適化処理を行
っていない。
【0180】記号情報を指定する疑似命令3700はソ
ースプログラムの宣言文3610に対応するものであり
、3702は同じく3616に対応するものである。3
710から始まるArmCodeの列は、ソースプログ
ラムの3620から始まる実行文の列に対応するもので
ある。
【0181】図14から図18を用いてレジスタの優先
度について具体的に説明する。このArmCode で
抽象レジスタを使っている命令は、先頭に*印をつけた
3720、3722等の命令である。3710の al
loc 命令は Vbase という抽象レジスタに物
理レジスタの割付要求をしているものであるが、その優
先度として 0x62489700+0x002248
97 を指定している。Vbase というレジスタは
 3722, 3734, 3758, 3770, 
3790,3828, 3846, 3850, 38
56, 3860 の命令で使われているが、これらを
 alloc のある位置 3710 からみて何番目
の抽象レジスタ使用命令かと数え、使っているところを
1、使っていないところを0としたビットベクトルを作
ってみると、図17の3910に示すように 0110
0010010010001001011100000
000 となる。これを16進数で表現したものが37
10の 0x62489700である。図14から図1
6のプログラムでは、 3868 の命令から3728
 の命令へ戻るループがあり、その中には抽象レジスタ
を使う命令が23個ある。この実施例では、ループ内の
抽象レジスタ使用命令の個数を3で割って余りがあれば
切り上げたものをループに対する優先度の調整数として
いる。ループ内で使われている Vbase のビット
ベクトルは3910の第2ビットを0にした 0010
0010010010001001011100000
000 であり、これを23を3で割って切り上げた数
8だけ右へずらすと3912のように 0000000
0001000100100100010010111
 となる。これを16進数で表現したものが 0x00
224897 である。従って、Vbase の割付要
求時の優先度は、図14の3710に示すように、両者
を符号無し整数として加算した数 0x6248970
0+0x00224897 となる。同様にして、37
18 の Ar5 等に対する優先度が3918、39
20で示すように算出されている。
【0182】レジスタ割付の優先度は固定されたもので
はなく、既に述べたように、注目している命令の位置が
進むとともに左へシフトされてゆく。従って、ループの
先頭部の 3732 の位置では、レジスタ使用命令を
ふたつ越ているので、Vbase と Ar5のレジス
タ優先度は図17の3914と3918に示すように、
2つ左へシフトされ、Vbase の優先度は 0x8
9225C00+0x0089225C となり、Ar
5の優先度は3922と3924に示すように 0x4
4110000+0x00441100 となる。これ
が 3732 で割付要求される Ar6 の優先度 
0xE0000000 と比較されるのである。
【0183】図18は上記のレジスタ割り付けの優先度
ビットベクトルを作成する手順を示すフロ−チャ−トで
ある。レジスタrの優先度ビットベクトルをPrで表す
と、まずそれをリセットする(ステップ3930)。そ
して、次のArmCode を取りだし(ステップ39
32)、それがル−プの開始でなければ(ステップ39
34)、レジスタ使用命令か否かを調べ(ステップ39
36)、レジスタ使用命令であればrの優先度ビットベ
クトルを1ビット左へずらし(ステップ3938)、レ
ジスタrを使っていれば(ステップ3940)、Prの
右端1ビットを1にし(ステップ3942)、レジスタ
rを使っていなければPrの右端1ビットを0にする(
ステップ3943)。次の ArmCode 命令がル
−プの終了またはレジスタrの開放命令であればrに対
する優先度ビットベクトルの算出を終了させ(ステップ
3944)、そうでなければ次の ArmCode 命
令の取りだしから繰り返す。
【0184】取りだした ArmCode がル−プ開
始命令であれば(ステップ3934)、レジスタrのそ
のル−プ内の優先度ビットベクトルをLrで表すことに
して、Lrをステップ3930からステップ3944ま
でと同じ手順で算出する。このようにして求めたLrに
対して、ル−プ内の抽象レジスタ使用命令数を3で割っ
て余りがあれば切り上げた数だけLrを左へずらす等の
調整を行い(ステップ3947)、その結果をそのル−
プを含む命令列の優先度ビットベクトルPrに加算する
(ステップ3948)。このようにして、一つの抽象レ
ジスタrに対する割り付け優先度ビットベクトルPrを
算出する。この処理を各々の抽象レジスタに対して実行
する。
【0185】図19は、抽象レジスタマシン命令 Ar
mCode の実行時の効率を向上させるオブジェクト
最適化の一つの段階を示す実施例である。ArmCod
e の列をまず、制御の流入点や分岐点で区切り、多く
の基本ブロックに分割する(ステップ3952)。各基
本ブロックは、先頭の命令から最後の命令まで、常に一
直線に実行されるという特徴を持つ。図14から図16
では、3712から3722、3724から3748、
3750から3778等がそれぞれ一つの基本ブロック
であり、各々の先頭にはそれらの接続関係を示す生成制
御命令 bblock がついている。ある基本ブロッ
クbが実行されるのは必ず他の基本ブロックaが実行さ
れた直後である場合、基本ブロックaの後ろにbを接続
してゆくことを繰り返してできる基本ブロックの列を拡
張基本ブロックと呼ぶことにする。3724 から始ま
る基本ブロックと 3750 から始まる基本ブロック
、3780 から始まる基本ブロックでは、後ろのもの
は前のものが実行された直後に実行されるので、この3
つの基本ブロックをつないだものは拡張基本ブロックで
ある。3840 から始まる基本ブロックのように、先
行する基本ブロックや後続する基本ブロックが一意に確
定できないため拡張できない基本ブロックは、それ単独
で一つの拡張基本ブロックとする。次に、この拡張基本
ブロック内で共通式の削除を行う。そのため、第一の拡
張基本ブロックからはじめて(ステップ3954)、そ
の拡張基本ブロック内での共通式を摘出し(ステップ3
956)、後続の共通式を既出の共通式の結果を表すレ
ジスタや変数で置き換える(ステップ3958)。これ
を最後の拡張基本ブロックに到達するまで繰り返す(ス
テップ3960,3962)。この処理は、前掲の A
ho, Sethi, Ullman の著書に述べら
れている方法を ArmCode に適用することによ
って実現できる。
【0186】図20から図21は、図14から図16の
命令列をこのような処理や後で述べる最適化処理を行っ
て変換した抽象レジスタ命令列である。図14から図1
6、および図20、図21を使って、上記の最適化処理
を具体例で説明する。図14から図16の抽象レジスタ
 Ar8 の値の算出命令列3758,3760とAr
12 の算出命令列3790,3792、Ar15 の
算出命令列3828,3830は、 Ar6 の算出命
令列3734,3736と同じであり、Ar9 を求め
る命令3764は は Ar7 を求める命令3740
と同じである。同様に、Ar13 は Ar11、Ar
15 と Ar16 は Ar5 と同じである。従っ
て、図20、図21では、4098でAR6とAR11
を再使用し、4076でAR7を再使用し、4108と
4110,4112でAR5を再使用するというように
、これらの抽象レジスタは同じ値を持つ抽象レジスタで
置き換えており、AR8とAR12、AR15、AR9
、AR13、AR15、AR16の値を求める命令列を
削除している。この置き換えに伴い、抽象レジスタの使
用頻度と使用位置が変わるので、各抽象レジスタの割付
優先順位も変わる。図20、図21の4028等のal
loc命令はこれをも示している。
【0187】図20と図21では、図14から図16の
 ArmCode に対して、さらにループ内不変式を
ループ外に移動するとともに、分岐最適化を行っている
。図22は、その過程を示すフローチャートである。フ
ロー解析によってループを検出したあと(ステップ42
02)、内側のループからはじめて(ステップ4204
)、ループ内不変式を検出し(ステップ4206)、そ
れをループ開始直前に移動して(ステップ4208)、
ループ内で同じ計算を何度も行うことを回避している。 これを一番外側のループに至るまで繰り返す(ステップ
4210,4212)。図14から図16の Ar10
と Ar11、Ar17 は3728で始まり3874
で終わるループの中では値が変わらないので、それを算
出する命令列3770と3786、3860をループの
前に移動してある。それらが図20から図21の403
8と4044、4050である。
【0188】図14から図16では、3778にある 
BrGe での分岐先 L3(3806)には L5 
への無条件分岐命令(3808)があるので、この B
rGe の分岐先を L5 とすることにより、L3 
での無条件分岐命令(3808)を削除できる。また、
3802の Jump の跳び先 L4(3812) 
にも L5 への無条件分岐命令(3814)があるの
で、この Jump の分岐先を L5 とすることに
より、L4 での無条件分岐命令(3814)も削除で
きる。このようにして、実行効率を向上させるために抽
象レジスタマシンでの命令列効率化を行った結果が図2
0と図21に示す ArmCode である。
【0189】次に、このようにして作った抽象レジスタ
命令列(ArmCode−R の命令列)から実際の計
算機の機械命令列を生成する方法について説明する。
【0190】図23は、ある機種Aにおける物理レジス
タの種別を示したものである。4260は算術演算の用
途 RcArith として使える物理レジスタが8番
から23番までのレジスタであることを示している。同
様にして、4262の RcAddr は番地計算用に
使えるレジスタを示し、4264の RcSect は
セクションの開始位置を示すのに使えるレジスタを示し
、4266の RcReturn は 副プログラムか
らの復帰に使うレジスタ、4268の RcFuncv
al は関数値を入れるのに使えるレジスタ、4270
の RcParmは引数を入れるのに使えるレジスタ、
4272の RcNosave は副プログラム参照時
に待避・回復されないレジスタ、4274の RcTe
mpは一時的に使うレジスタ、4276のRcFixe
d は用途の固定されたレジスタ、4278の RcA
ny はレジスタ割付の対象となるすべてのレジスタを
表す。
【0191】図24は、機種Aの物理レジスタと抽象レ
ジスタとの対応関係の一部を示したものである。抽象レ
ジスタ4280は、任意個数使えるものとしているが、
機種Aの物理レジスタ4282の数は32個に限定され
ている。 関数値を入れる抽象レジスタ4284を Funcva
l0, Funcval1 で表すと、それを物理レジ
スタ2と3に対応付ける(4290、4291)。引数
を入れる抽象レジスタ4285として Param0,
 Param1, ... Param p が使われ
ているとすると、それらを物理レジスタ4から7に対応
付ける(4291、4292)。算術演算の抽象レジス
タ4286として Ar0, Ar1, ... Ar
 q が使われているすると、それらを物理レジスタ8
から23までに対応付ける(4292、4294)。番
地計算用の抽象レジスタ4287として Addr0,
 Addr1, ... Addr r が使われてい
るとすると、それらを物理レジスタ16から23に対応
付ける(4293、4296)。セクション開始位置を
示す抽象レジスタ4288として Sect0, Se
ct1, ... Sect s が使われているとす
ると、それらを物理レジスタ20から23に割り付ける
(4295、4297)。ここで、引数用抽象レジスタ
の数 p+1 や、算術演算用抽象レジスタの数q+1
 等は、物理レジスタの数に拘束されることなく、ソ−
スプログラムで要求される数だけ使っている。この抽象
レジスタをどのようにして対象機種の物理レジスタに割
り付けるかは、後で図26から図29で説明する。
【0192】図25は、機械語生成をパタン照合で行う
方式を示す図である。この方式では、パタン照合を行う
部分4556と、機械命令選択規則の表4630を持ち
、それに抽象レジスタマシン命令列4640を与えると
、機械語プログラム4650を生成する。機械命令選択
規則の表4630には、入力パタンとそれに対する出力
パタンが対応付けて入れてある。抽象レジスタマシンの
命令列4640から一つの命令4602を取り出したと
すると、機械命令生成規則の入力パタンでそれに合致す
るものを探す。この例では、第i番目の生成規則463
2の入力パタンiが合致するので、それに対応する生成
パタンiに従って置き換えを行い、機械命令4652を
生成する。この際、抽象レジスタを物理レジスタに置き
換えるとか、前後の状況に合わせて生成仕方を変える等
の処理を行うが、それについては、後で図29から図3
5で説明する。
【0193】図26は、機種A向けの機械命令選択規則
の一部を示したものである。これは、4300や431
2等に示す抽象レジスタマシンの命令列の後ろに、{}
で囲んで、それに対応する機械語命令の生成仕方をC言
語に近い形で示す形態をとる。4312や4316等の
先頭にある|記号は、命令列の場合分けを示す記号であ
る。抽象レジスタマシンのオペランド Reg1 や 
C, V 等は{}の中では$記号をつけて $Reg
1,$C, $V 等のように表されている。
【0194】具体的に説明すると、先頭の4300は、
定数をロードする抽象レジスタマシン命令に対する機種
Aの機械命令の生成仕方を、4302で始まる{}内の
文の列で示すものである。そこでは、定数が0かそれよ
り大きく 65536 未満であれば4304の指定に
従って機械命令を生成し、そうでなければ4308と4
310の指定に従って機械命令を生成することを表して
いる。この規則を図20の命令4030に適用して生成
されたのが図28の機械命令4500である。この例で
は、レジスタ割付の結果として、図27の4400に示
すように、抽象レジスタ Ar5 には物理レジスタ 
$08, Ar6には $17 等と、それぞれの種別
に対応する物理レジスタが割り付けられている。
【0195】要求された数だけの物理レジスタがないと
きには、alloc による要求時には物理レジスタを
割り付けず、それが実際に使われる時に再度割付処理を
行う。 図20の4046で抽象レジスタ Ar17 に物理レ
ジスタ割付要求を出しているが、ここでは割付後にも温
存しておくべきレジスタの数を2と指定しており、優先
度もあまり高くないので、この時点では割付ができなか
ったとすると、4048の条件が満たされないので、4
050ではロード命令は生成されず、Ar17 が変数
nの値を表すことが記録される。Ar17 を使う41
12の比較命令のところでは、まだ物理レジスタが割り
付けられていないので、この抽象レジスタ命令を処理す
る時にレジスタ割付処理が再度実行され、この時点では
 Ar17 の優先度は最も高くなっているので割付が
実行され、その値を設定するロード命令も生成される。 この例で Ar17 に物理レジスタ$09が割り付け
られたとすると、4046での記録に従って、そこに変
数nの値をロードする命令が生成される。その結果、4
526の sub $24,$08,$12 の命令の代わりに lw  $09,n($16) sub $24,$08,$09 の2命令が生成される。このように物理レジスタが割り
付けられていない抽象レジスタを使うときにそれに物理
レジスタを割り付けてそこに値を設定するのは、図26
の機械命令選択規則の4304等で使われている関数g
enの中で行う。
【0196】機種A用のインストーラは、このようにし
て、抽象オブジェクトプログラムから機種A用の機械語
プログラムを生成する。その際、対象計算機に合わせて
、最適な命令系列の選択や、物理レジスタの最適利用を
図る。この例では、図26の生成規則4302で定数の
大きさに合わせて生成する命令系列を変えるとか、使え
る物理レジスタの種類と数に合わせて抽象レジスタとの
対応付けを行い、一度値を設定した $11 等の物理
レジスタはできるかぎり何度も利用するようにしている
。機械語に変換したあと、機種固有の表現に伴って生ず
る共通式があれば、その再計算を削除する等の最適化処
理を行なうが、その処理内容は、図19で述べたのと同
様である。
【0197】図29は、機械語生成の処理過程を示すフ
ローチャートである。初期設定(ステップ4552)の
あと、抽象オブジェクトプログラムを構成するArmC
ode命令を一つ取り出し(ステップ4554)、図2
6に示すような機械語選択規則に書かれた ArmCo
de列のパタンのどれに適合するかを調べるパタン照合
(ステップ4556)を行う。読んだ部分に適合するパ
タンがなければその時の照合状態を記録し(ステップ4
560)、次のArmCode命令取り出しへと進む。 適合するパタンがあれば、そのパタンに対する機械語生
成の記述に従って、生成処理の準備を行い(ステップ4
562)、記述された内容がレジスタ割付を要求するも
のならばその処理を行い(ステップ4564)、メモリ
割付を要求するものならばその処理を行い(ステップ4
566)、具体的な機械命令の生成を要求するものなら
ばその処理を行い(ステップ4568)、デバッグ情報
等に関する制御情報の付加を要求するものならばそれら
を機械語プログラムに付加し(ステップ4570)、レ
ジスタ割付やメモリ割付、あるいは生成すべき命令の選
択等に関する生成制御情報の設定を要求するものならば
それらの設定を行う(ステップ4572)。そして、機
械語生成の記述に記された次の文へ進むことを繰り返し
(ステップ4576)、そこに記された動作の終わりに
達すれば(ステップ4574)、このパタンに対する生
成処理の後始末を行い(ステップ4578)、照合状態
を現状に合うよう変更して(ステップ4580)、パタ
ン照合処理に戻る。抽象オブジェクトプログラムが全部
処理されたことがわかれば機械語生成を終了させる(ス
テップ4582)。
【0198】図30は、ArmCode から上記のよ
うにして機械語を生成するインスト−ラの内部構造を示
す図である。インスト−ラ4530は、ArmCode
 の列4531とその機種の機械命令生成規則4532
から機械語4549を生成する。照合は基本的には状態
遷移表を利用する形をとる。そのため、状態遷移表作成
プログラム4533によって、機械命令生成規則453
2を一旦状態遷移表4535に変換する。この状態遷移
表4535は、入力としての個々の ArmCodeと
状態番号の組合せに対し、実行すべきアクションと次に
遷移すべき状態番号を示す表である。状態遷移に基づく
パタン照合を行う部分では、入力される ArmCod
eとその時の状態から状態遷移表によってアクションル
−チン4538の内の適切なル−チンを選択し実行する
。そのときの状態遷移経歴を記録するのが状態スタック
4544である。対象機種固有のレジスタ用途指定を記
載しておくのがレジスタ用途指定表4546であり、処
理中のプログラムにおける抽象レジスタと物理レジスタ
の対応関係を記録するのがレジスタ対応表4548であ
る。
【0199】図31は、前述の機種Aとは命令体系の異
なるある機種Bにおける物理レジスタの種別を示したも
のである。4600は算術演算の用途 RcArith
 として使える物理レジスタが1番から7番までと16
番から23番までのレジスタであることを示している。 同様にして、4602の RcAddr は番地計算用
に使えるレジスタを示し、4614の RcTemp 
は一時的に使うレジスタを示すというように、第23図
に示す機種Aの場合とは異なった物理レジスタの使い方
が指定されている。
【0200】図32は、機種Bの物理レジスタと抽象レ
ジスタとの対応関係の一部を図示したものである。機種
Aの場合と同様に、抽象レジスタ4620は、任意個数
使えるものとしているが、機種Bの物理レジスタ462
2の数は32個に限定されている。関数値を入れる抽象
レジスタ4624を Funcval0, Funcv
al1 で表すと、それを物理レジスタ8と9に対応付
ける(4631、4632)。引数を入れる抽象レジス
タ4625としてParam0, Param1, .
.. Param p が使われているとすると、それ
らを物理レジスタ24から29に対応付ける(4633
、4634)。算術演算の抽象レジスタ4626として
 Ar0, Ar1, ... Ar q が使われて
いるすると、それらを物理レジスタ1から7までと16
から23までに対応付ける(4635、4636、46
37、4638)。番地計算用の抽象レジスタ4627
としての Addr0, Addr1, ... Ad
dr r も同様に、物理レジスタ1から7までと16
から23までに対応付ける(4639、4640、46
41、4642)。
【0201】図33は、機種B向けの機械命令選択規則
の一部を示したものである。4700は定数をロードす
るArmCode命令に対する機械命令の生成仕方を示
し、4712はメモリからのロードに対する機械命令、
4716はレジスタReg1とReg2を加えた結果を
Reg3に入れるArmCode命令列に対する機械命
令の生成仕方を示すというように、図20から図21の
抽象オブジェクトプログラムの機械語プログラムへの変
換に必要な機械命令選択規則を表している。図34は、
図20から図21のプログラムにおける抽象レジスタに
対する機種Bの物理レジスタの対応関係を4780等で
示したものであり、alloc、free等の生成制御
命令によってレジスタ割付を行った結果である。
【0202】図33の規則4700を図20の命令40
30に適用して生成されたのが図35の機械命令480
0であり、規則4722を図20の4032に適用して
得られたのが図35の機械命令4802である。このよ
うにして、機種B用のインストーラでは、図20から図
21の抽象オブジェクトプログラムに図33の規則を適
用してゆくことにより、図35の機種B用の機械語プロ
グラムを生成する。
【0203】上述のようにして、同一の抽象オブジェク
トプログラムから、機種A用のインストーラは機種A用
の機械語プログラムを生成し、機種B用のインストーラ
は機種B用の機械語プログラムを生成する。本実施例で
は、2つのインスト−ラの間では、機械命令選択規則と
物理レジスタ用途指定は異なるが、図29に示す処理内
容は同じである。
【0204】本実施例によれば、大域的最適化やレジス
タ割付に関する最適化の処理の大部分が対象機種に依存
しないコンパイラで行なわれ、かつ、コンパイラでのフ
ロ−解析やレジスタ割付等に関する情報がインスト−ラ
に渡されるので、インスト−ラでは、あまり複雑な処理
をしなくても、実行効率のよい機械語プログラムを生成
できる。従って、プログラムを起動するたびに、インス
ト−ラによって、機種非依存な抽象オブジェクトプログ
ラムから対象機種向けの機械語プログラムを生成しても
、実行効率やインスト−ラによる処理時間が問題となる
ことはない。
【0205】本実施例の抽象オブジェクトプログラムの
形式でソフトウェアを配布すれば、複数の機種に対して
同一の抽象オブジェクトプログラムを配布すればよくな
り、機種ごとにソフトウェアを調整またはコンパイルし
なおす必要はないので、保守と管理が著しく容易となる
【0206】また、本実施例によれば、抽象オブジェク
トプログラムは、ソ−スプログラムに比べて、処理操作
が細かいレベルに分解されており、その構造と記述順序
も異なるので、抽象オブジェクトプログラムからソ−ス
プログラムを復元することはほとんど不可能である。従
って、抽象オブジェクトプログラムの形でソフトウェア
を利用者に配布すれば、ソ−スプログラムに含まれるソ
フトウェアの実現方式やアルゴリズムを秘匿したまま、
同一プログラムを複数の機種で実行することや、使用機
種を変更することを利用者側で実現できる。
【0207】本発明のインストーラを用いれば、複数機
種システムで、同一のソースレベルデバッグシステムが
利用可能となる。以下、その実施例について図36から
図45を用いて説明する。
【0208】図36は、本発明のインストーラを適用し
たデバッグシステムのブロック図である。デバッガ51
00は、ソースプログラム5101をコンパイルしてで
きた抽象オブジェクトプログラム5102をデバッグす
るのに用いられる。インストーラ5103は、抽象オブ
ジェクトプログラムを機械語プログラム5107に変換
するのに用いられる。 主記憶装置5104は、機械語プログラム5107およ
びデバッグ情報テーブル5108を格納するのに用いら
れる。表示装置5105は結果をユーザに表示するのに
、入力装置5106はユーザからの入力を受け付けるの
にそれぞれ使われる。
【0209】図37は、デバッガの動作を示すフローチ
ャートである。まず、抽象オブジェクトプログラム51
02を読み込む(ステップ5120)。抽象オブジェク
トプログラムにはソースプログラム上での位置等を示す
ソース情報が含まれているので、次に、これに基づいて
ソース・抽象オブジェクト対応テーブルを作成する(ス
テップ5121)。次に、読み込んだ抽象オブジェクト
プログラムを入力としてインストーラを実行し、機械語
プログラムを主記憶装置上に作成する(ステップ512
2)。その際、抽象オブジェクトプログラムと機械語プ
ログラムの対応をとるための、抽象オブジェクト・機械
語対応テーブルを作成する(ステップ5123)。なお
、本実施例では、ソース・抽象オブジェクト対応テーブ
ルと、抽象オブジェクト・機械語対応テーブルは合わせ
て1つのテーブル(ソース・抽象オブジェクト・機械語
対応テーブル)として構成する。このテーブルはデバッ
グ情報テーブル5108に含まれる。次に、ユーザが、
必要なデバッグ用コマンドを入力するので(ステップ5
124)、そのコマンドの種類に従って分岐をする(ス
テップ5125)。表示コマンドの場合は表示処理を行
い(ステップ5126)、ブレークポイント設定コマン
ドの場合はブレークポイント設定処理を行い(ステップ
5127)、実行コマンドの場合は実行処理を行い(ス
テップ5128)、その処理が終了した後、ステップ5
125から繰り返す。これらのコマンド処理については
図38から図43を用いて詳しく説明する。入力コマン
ドが終了コマンドであった場合は終了する。
【0210】図38は表示コマンドの例である。この例
は変数iの値を表示するコマンドであり、表示コマンド
名5131と、変数名5132とからなる。
【0211】図39は、表示処理のフローチャートであ
り、図37のステップ5126の処理を詳しくしたもの
である。まず、表示コマンド内の変数名を取りだす(ス
テップ5133)。次に、ソース・抽象オブジェクト・
機械語対応テーブル(以降、単に対応テーブルと呼ぶこ
ともある)を用いて、その変数の内容が格納されている
主記憶上のアドレスに変換する(ステップ5134)。 次に、ステップ5134で得られたアドレスの内容を主
記憶から読み出し(ステップ5135)、読み出した内
容を、変数のデータ型に従って変換し、表示装置上に表
示する(ステップ5136)。
【0212】図40はブレークポイント設定コマンドの
例である。この例はソースプログラムの文番号10の文
にブレイクポイントを設定するコマンドであり、コマン
ド名5141と、文番号5142とからなる。
【0213】図41は、ブレークポイント設定処理のフ
ローチャートであり、図37のステップ5127の処理
を詳しくしたものである。まず、コマンド内の文番号を
取り出す(ステップ5143)。そして、対応テーブル
内の、その文番号にブレークポイントが設定されている
ことを示すフラグを、オンにする(ステップ5144)
【0214】図42は実行コマンドの例である。これは
プログラムの実行を行うコマンドであり、コマンド名5
151だけからなる。
【0215】図43は、実行処理のフローチャートであ
り、図37のステップ5128の処理を詳しくしたもの
である。まず、1命令だけを実行する(ステップ515
2)。これは、命令を1つだけ実行するごとに、トラッ
プがかかって制御がデバッガに戻るようなモードでCP
Uを走らせることによって可能である。次に、命令のア
ドレスを取り出す(ステップ5153)。これはプログ
ラムカウンタ等の内容を読み出すことによって可能であ
る。最後に取りだしたアドレスにブレークポイントが設
定されているかを、対応テーブルを使って調べ、設定さ
れていなければステップ5152から繰り返し、設定さ
れていれば終了する(ステップ5154)。
【0216】図44はデバッグの対象となるソースプロ
グラム例である。ここでは、各文の文番号5160と、
その文のソースプログラムの記述5161を示している
。文番号は、実際のソースプログラムの中には含まれな
い。なお、本実施例の以降の説明では、このソースプロ
グラムを例として用いる。
【0217】図45はソース・抽象オブジェクト・機械
語対応テーブルの一例を示した図である。対応テーブル
は、(a)文情報テーブルと(b)変数情報テーブルと
からなる。文情報テーブルは、ソースプログラム文番号
5170と、抽象オブジェクトプログラム命令アドレス
5171と、機械語プログラム命令アドレス5172お
よびブレークポイント設定フラグ5173の4つのフィ
ールドを持つ。例えばエントリ5174は、ソースプロ
グラムの文番号10の文が、抽象オブジェクトプログラ
ムでは、「000060」というアドレスに位置する命
令となり、機械語プログラムでは「000040」とい
うアドレスに位置する命令となり、さらにその文にはブ
レークポイントが設定されていることを示している。
【0218】変数情報テーブルは、変数名5175と、
変数種別5176と、型5177と、行番号5178、
および機械語アドレス5179の5つのフィールドを持
つ。変数名5175はソースプログラムにおける変数名
、変数種別5176は局所変数/大域変数の区別、型5
177はその変数のデータ型、文番号5178はその変
数が宣言されたソースプログラム上の位置を表す。機械
語アドレス5179はその変数の機械語プログラム上で
のアドレス情報を示すもので、局所変数の場合はフレー
ムポインタからのオフセットを、大域変数の場合は変数
領域ベースアドレスからのオフセットを表す。例えばエ
ントリ5180は、変数iが、局所変数であり、型はi
ntで、ソースプログラムの文番号4に位置し、機械語
プログラム上ででフレームポインタからのオフセットが
−4であることを示している。
【0219】以上の説明からわかるように、本実施例の
デバッグシステムは、機種に依存しない抽象オブジェク
トプログラムを実行可能な機械語プログラムに変換する
インストーラを備えているので、同一の抽象オブジェク
トプログラムが複数機種システム上でデバッグできると
いう効果がある。
【0220】本発明のインストーラを用いれば、ICカ
ードまたはCD−ROM等で抽象オブジェクトプログラ
ムを供給し、マシンに依存せずに即実行可能なシステム
が提供できる。例えば、ゲームプログラムをICカード
に内蔵し、インストーラを個々のマシンに内蔵すること
により、同一のゲームを異なるマシン(ICカード装置
)で実行することができる。以下ではそのような実施例
を図46から図50を用いて説明する。
【0221】図46は、本発明のインストーラを内蔵し
たICカード装置のブロック図である。本ICカード装
置は、制御装置5000、主記憶装置5002、ICカ
ード読み取り/書き込み装置5005、キーボード50
06、表示装置5007よりなる。制御装置5000は
CPU5001を内蔵している。また、主記憶装置50
02はインストーラ5003を内蔵している。ICカー
ド5008はICカード読み取り/書き込み装置500
5を通じて、ICカード装置と接続される。また、IC
カード内のプログラムは、インストーラによって、機械
語プログラム5004として主記憶装置内に格納される
【0222】図47は、ICカード装置の外観図である
。ユーザからの入力は、キーボード5006を通して行
われ、また、ユーザへの応答は表示装置5007に表示
される。ICカードはICカード挿入口5009から挿
入される。
【0223】図48は、ICカード5008の平面図で
ある。接点5010を通してICカードとICカード読
み取り/書き込み装置とデータをやりとりする。記憶素
子5011には、ICカード装置で実行されるべき抽象
オブジェクトプログラム5012と、データ5013が
記憶されている。
【0224】図49は、ICカードに内蔵された抽象オ
ブジェクトプログラムを実行するフローチャートである
。まず、ICカード5008をICカード挿入口500
9に挿入し(ステップ5020)、ICカードに内蔵さ
れている抽象オブジェクトプログラムとデータを読み出
す(ステップ5021)。次に制御部5000が、読み
込まれた抽象オブジェクトプログラムを入力としてイン
ストーラを起動する(ステップ5022)。その結果、
実行可能な機械語プログラム5004が主記憶装置内に
できるので、そのプログラムを実行する(ステップ50
23)。実行の結果、必要ならば結果データをICカー
ドに書き込み(ステップ5024)、カードを返却し(
ステップ5025)、終了する。
【0225】図50は、異なるCPUを持つICカード
装置の間で、同一のICカード内の抽象オブジェクトプ
ログラムを実行する場合の様子を示した図である。ここ
では、互いに異なる命令体系を持つCPU−A5038
とCPU−B5039をそれぞれ制御装置内に含む、I
Cカード装置AとICカード装置Bを例として用いる。 ICカード5008内の抽象オブジェクトプログラムは
、ICカード装置Aで使用する場合には、インストーラ
A5034によってCPU−Aの機械語からなる機械語
プログラムA5036に変換される。一方、ICカード
装置Bで使用される場合には、インストーラB5035
によってCPU−Bの機械語からなる機械語プログラム
B5037に変換される。
【0226】本実施例では、抽象オブジェクトプログラ
ムを記憶する媒体としてICカードを用いたが、本発明
はそれに限定されるものではなく、CD−ROMやフロ
ッピーディスクを用いたシステムにも適用できる。
【0227】図51は、ネットワ−ク結合された異機種
計算機上での ArmCodeプログラムの共有を示す
実施例である。
【0228】ネットワ−ク媒体1101には、ファイル
サーバ1102、及び、実行計算機システム(ここでは
、計算機システムA1103、及び、計算機システムB
1104)が接続されている。
【0229】ファイルサーバにはディスク装置1105
が接続されており、ファイルサーバ1102は実行計算
機に対してディスク装置1105上のファイルを提供す
る。
【0230】各実行計算機システムは、それぞれ自分の
リモートファイル管理プログラム(1106、1107
)を用いてディスク装置1105上のファイルにアクセ
スする。また、それぞれの実行計算機システムは、 A
rmCodeプログラムをそれぞれの機種の機械語プロ
グラムに変換するインストーラ(1108、1109)
を備えている。
【0231】ディスク装置1105上の ArmCod
eプログラム1110を各実行計算機システムで実行す
る場合、計算機システムA1103では、リモートファ
イル管理プログラム1106を通じて得られる Arm
Codeプログラム1110をインストーラ1108に
より機械語プログラム1111に変換し、これを実行す
る。計算機システムBにおいても同様に機械語プログラ
ム1112を生成し、これを実行する。
【0232】以上の様にして、同一の ArmCode
プログラム1110をネットワ−ク上の複数機種の計算
機で実行することができ、オブジェクトプログラムの共
通化が実現される。
【0233】従来のシステムでは、異機種間でオブジェ
クトプログラムの共通化ができず、同一機能を持つオブ
ジェクトプログラムを機種毎に保持する必要があった。 ある機能に関して、機種毎に必要であったオブジェクト
プログラムファイルを上記の様に ArmCodeプロ
グラムファイルに一本化することにより、以下のメリッ
トが生じる。
【0234】(1)ネットワ−ク全体としてのファイル
容量が削減される。
【0235】(2)バグ修正や機能拡張は ArmCo
deプログラムに対してのみ実施すればよく、これを複
数のオブジェクトプログラムに対して同時に実施する必
要がないので、オブジェクトプログラムのバージョン管
理の手間が大幅に軽減される。
【0236】図52は、 ArmCodeプログラムに
より運用していた計算機システムを、他の計算機システ
ムにリプレースする実施例である。
【0237】計算機システムA1201では、その上で
稼働する機械語プログラムに対するディスク装置120
2上の保存形式として ArmCodeを用いている。 即ち、計算機システムA1201で、ある機能を実現す
る場合、その機能に対応するディスク装置1202上の
ArmCodeプログラム1204を、インストーラ1
203により機械語プログラム1205に変換し、実行
している。
【0238】このような計算機システムは、インストー
ラを備えた他の計算機システムに、容易にリプレースす
ることができる。
【0239】計算機システムB1206はインストーラ
1208を備えており、ディスク装置1207上の A
rmCodeプログラムを機械語プログラムに変換して
実行できる。計算機システムA1201を計算機システ
ムB1206にリプレースするには、ディスク装置12
02上のArmCodeプログラム1204をディスク
装置1207に複写するだけでよい。即ち、計算機シス
テムB1206において、計算機システムA1201で
実現されていたある機能を実現する場合には、その機能
に対応するディスク装置1207上の複写された Ar
mCodeプログラム1204を、インストーラ120
8により機械語プログラム1209に変換し、実行する
【0240】このように、ディスク上のプログラム保存
形式として ArmCodeを用いることにより、以下
のメリットが生じる。
【0241】(1)ユーザにとり、ソースプログラムの
再コンパイルやプログラムの再作成などの計算機の移行
時の手間を削減でき、移行のための時間が短縮される。
【0242】(2)メーカにとり、移行性を意識するこ
となく機械語を設定することができ、システムとしての
性能を最大化する方向で計算機システムの設計が可能と
なる。
【0243】
【発明の効果】(1)コンパイラによる抽象レジスタ利
用の最適化とインストーラの実レジスタ割当て機能によ
り、実行計算機のレジスタを有効利用した機械語命令列
を生成できる、(2)インストーラの命令語パターン置
換機能により、実行計算機が備える高機能命令を利用で
きる。
【図面の簡単な説明】
【図1】本発明におけるソースプログラムから機械語プ
ログラムへの翻訳システムの一実施例の構成を示す図で
ある。
【図2】ソ−スプログラムから、抽象レジスタマシン命
令の列としての抽象オブジェクトプログラムを生成する
コンパイラの構成を示す図である。
【図3】抽象レジスタマシン命令と機械語の関係を表わ
す図である。
【図4】抽象レジスタマシン命令に含まれる生成制御文
の種類を示す図である。
【図5】個々の抽象レジスタマシン命令の形式を示す図
である。
【図6】抽象レジスタマシン命令のアドレスモ−ドとオ
ペランドの関係を示す図である。
【図7】抽象レジスタマシン命令に含まれる機械語生成
命令の仕様を示す図(その1)である。
【図8】抽象レジスタマシン命令に含まれる機械語生成
命令の仕様を示す図(その2)である。
【図9】抽象レジスタマシン命令に含まれる機械語生成
命令の仕様を示す図(その3)である。
【図10】抽象レジスタマシン命令に含まれる機械語生
成命令の仕様を示す図(その4)である。
【図11】抽象レジスタマシン命令に含まれる機械語生
成命令の仕様を示す図(その5)である。
【図12】抽象レジスタマシン命令に含まれる機械語生
成命令の仕様を示す図(その6)である。
【図13】図2のコンパイラの入力となるソ−スプログ
ラムの一つの例を示す図である。
【図14】図13のソ−スプログラムに対応する抽象オ
ブジェクトプログラムの生成例であり、まだ最適化処理
をしていないものを示す図(その1)である。
【図15】図13のソ−スプログラムに対応する抽象オ
ブジェクトプログラムの生成例であり、まだ最適化処理
をしていないものを示す図(その2)である。
【図16】図13のソ−スプログラムに対応する抽象オ
ブジェクトプログラムの生成例であり、まだ最適化処理
をしていないものを示す図(その3)である。
【図17】図14から図16の抽象オブジェクトプログ
ラムでのレジスタ割付の優先度の算出過程を例示する図
である。
【図18】図2のコンパイラにおける優先度ビットベク
トル作成手順を示したフロ−チャ−トである。
【図19】図2のコンパイラにおける最適化処理のうち
、共通式削除の過程を示したフロ−チャ−トである。
【図20】図13のソ−スプログラムに対応する抽象オ
ブジェクトプログラムの例であり、最適化処理を行なっ
た後の抽象レジスタマシン命令列示す図(その1)であ
る。
【図21】図13のソ−スプログラムに対応する抽象オ
ブジェクトプログラムの例であり、最適化処理を行なっ
た後の抽象レジスタマシン命令列示す図(その2)であ
る。
【図22】最適化処理のうち、ル−プ内不変式の移動を
行なう処理のフロ−チャ−トである。
【図23】機種Aでの各々の物理レジスタの用途を表す
図である。
【図24】抽象レジスタと物理レジスタの対応付けを表
す図である。
【図25】パタン照合による機械語への変換を表す図で
ある。
【図26】機種A向けの機械命令選択規則の一部を表す
図である。
【図27】図20から図21の抽象オブジェクトプログ
ラムに対する機種Aでの物理レジスタ割付状況を示す図
である。
【図28】図20から図21の抽象オブジェクトプログ
ラムから機種A用のインスト−ラによって生成された機
械語プログラムの例を示す図である。
【図29】インスト−ラの内部処理過程を表すフロ−チ
ャ−トである。
【図30】インスト−ラの構成と入出力を表す図である
【図31】図は機種Bでの各々の物理レジスタの用途を
表す図である。
【図32】図20から図21の抽象オブジェクトプログ
ラムに対する機種Bでの物理レジスタ割付状況を示す図
である。
【図33】機種B向けの機械命令選択規則の一部を表す
図である。
【図34】図19から図20の抽象オブジェクトプログ
ラムに対する機種Bでの物理レジスタ割付状況を示す図
である。
【図35】図19から図20の抽象オブジェクトプログ
ラムから機種B用のインスト−ラによって生成された機
械語プログラムの例を示す図である。
【図36】本発明のインストーラを適用したデバックシ
ステムのブロック図である。
【図37】デバッガの動作を示すフローチャートである
【図38】表示コマンド例を示す図である。
【図39】表示処理のフローチャートである。
【図40】ブレークポイント設定コマンド例を示す図で
ある。
【図41】ブレークポイント設定処理のフローチャート
である。
【図42】実行コマンド例を示す図である。
【図43】実行処理のフローチャートである。
【図44】デバッグの対象となるソースプログラムの例
を示す図である。
【図45】ソース・抽象オブジェクト・機械語対応テー
ブルの一例を示す図である。
【図46】本発明のインストーラを内蔵したICカード
装置のブロック図である。
【図47】ICカード装置の外観図である。
【図48】ICカードの平面図である。
【図49】ICカードに内蔵された抽象オブジェクトプ
ログラムを実行するフローチャートである。
【図50】異なるCPUを持つICカード装置の間で同
一のICカード内のプログラムを実行する場合の様子を
示した図である。
【図51】ネットワ−ク結合された異機種計算機上での
ArmCodeプログラムの共有を示す一例を示す図で
ある。
【図52】ArmCodeプログラムにより運用してい
た計算機システムを、他の計算機システムにリプレース
する一例を示す図である。
【符号の説明】
1001  コンパイラ 1002  リンカ 1003  計算機Aのインストーラ 1004,1006,1013  ソースプログラム1
005,1007,1014  ArmCodeプログ
ラム(抽象オブジェクトプログラム) 1008  ArmCodeプログラムライブラリ10
09  結合済ArmCodeプログラム1010  
計算機Aの仕様情報 1011  計算機Aの機械語プログラム1012  
計算機A 1015  計算機Bのインストーラ 1016  計算機Bの機械語プログラム1017  
計算機B 1018  計算機Bの仕様情報 3100  コンパイラ 3102  ソ−スプログラム 3104  構文・意味解析部 3106  中間語 3108  記号表 3110  中間語最適化部 3112  最適化前のArmCode3114  抽
象レジスタ命令最適化部3116  抽象レジスタマシ
ン命令列としての抽象オブジェクトプログラム

Claims (26)

    【特許請求の範囲】
  1. 【請求項1】ソースプログラムを抽象オブジェクトプロ
    グラムに変換するコンパイラと、複数の抽象オブジェク
    トプログラムを一つの抽象オブジェクトプログラムに結
    合するリンカと、抽象オブジェクトプログラムを具体計
    算機の機械語プログラムに変換するインストーラと備え
    た情報処理システムであって、該抽象オブジェクトプロ
    グラムは、抽象レジスタマシンの命令語列からなり、該
    抽象レジスタマシンは、複数個のレジスタと、レジスタ
    とメモリとの間の転送命令と、レジスタ上の演算命令と
    、命令実行の順序を制御する分岐命令とを持ち、該イン
    ストーラは、命令仕様の異なる複数機種の具体計算機に
    対応して複数備えており、あるソースプログラムから該
    コンパイラにより変換された同一の抽象オブジェクトプ
    ログラムを、それぞれの機種のインストーラを用いて複
    数機種の具体計算機に対してそれぞれの機械語プログラ
    ムに変換し実行することを特徴とする情報処理システム
  2. 【請求項2】請求項1における抽象オブジェクトプログ
    ラムは、対象計算機における機械命令列を表す機械語対
    応命令の他に、機械語の生成仕方を制御する生成制御命
    令、叉はプログラムの構造を表す疑似命令、叉はプログ
    ラムの命令の位置と記号名称を対応づける疑似命令、叉
    はプログラムで使うメモリの位置あるいは大きさと記号
    名称を対応づける疑似命令、叉はデバッグ情報指定用の
    疑似命令を含むことを特徴とする情報処理システム。
  3. 【請求項3】請求項2における抽象オブジェクトプログ
    ラムは、機械語対応命令に対する具体計算機の機械語の
    生成位置をレジスタの割付状況に合わせて選択する指示
    を含むことを特徴とする情報処理システム。
  4. 【請求項4】請求項1における抽象オブジェクトプログ
    ラムは、レジスタの割付指示または開放指示を含むこと
    を特徴とする情報処理システム。
  5. 【請求項5】請求項1における抽象オブジェクトプログ
    ラムは、レジスタの種別、またはレジスタの割付優先度
    、または温存レジスタ数の指示を含むことを特徴とする
    情報処理システム。
  6. 【請求項6】請求項5のレジスタの割付優先度は、抽象
    レジスタの使用頻度又は使用位置に依存させることを特
    徴とする情報処理システム。
  7. 【請求項7】請求項1におけるコンパイラは、抽象レジ
    スタマシン命令列における命令実行の重複を回避するた
    めの命令列の変換を行い、命令の削除、叉は変更、又は
    移動を行った結果としての抽象オブジェクトプログラム
    を生成する機能を有することを特徴とする情報処理シス
    テム。
  8. 【請求項8】請求項1におけるインストーラは、抽象オ
    ブジェクトプログラムにおけるレジスタに対して具体計
    算機の物理レジスタを割り付ける機能を有すること、叉
    は抽象オブジェクトプログラムにおけるメモリ指定疑似
    命令の指示に合致するようにメモリ割付を行う機能を有
    すること、抽象オブジェクトプログラムから具体計算機
    の機械語プログラムを生成することを特徴とする情報処
    理システム。
  9. 【請求項9】請求項1におけるインスト−ラは、抽象レ
    ジスタマシンのレジスタに対する具体計算機における物
    理レジスタの割付を即座に行うか即座には行わないかを
    選択できる機能を有すること、叉は物理レジスタを割付
    けできたか否かを告知する機能を有することを特徴とす
    る情報処理システム。
  10. 【請求項10】請求項1におけるインスト−ラは、抽象
    レジスタマシンのレジスタに対する具体計算機の物理レ
    ジスタの割付優先度を、割付指示のあった後も記録する
    機能を有することを特徴とする情報処理システム。
  11. 【請求項11】請求項1におけるインスト−ラは、抽象
    レジスタマシンのレジスタである抽象レジスタに対して
    、具体計算機の物理レジスタの割付優先度を、割付優先
    度の指定後であっても、処理下の抽象レジスタマシン命
    令の位置叉は該抽象レジスタを使う抽象レジスタマシン
    命令の位置に合わせて変化させる機能を有することを特
    徴とする情報処理システム。
  12. 【請求項12】請求項1におけるインストーラは、同一
    形式の抽象レジスタマシン命令列であっても、対応する
    機械語命令列を前後の命令列の構成に合わせて変えた形
    で、機械語プログラムを生成することを特徴とする情報
    処理システム。
  13. 【請求項13】請求項12におけるインストーラは、同
    一形式の抽象レジスタマシン命令列であっても、対応す
    る機械語命令列を具体計算機の物理レジスタの割付状況
    に合わせて変えた形で、機械語プログラムを生成するこ
    とを特徴とする情報処理システム。
  14. 【請求項14】請求項12におけるインストーラは、具
    体計算機の特性に合わせた機械語プログラム最適化機能
    を有することを特徴とする情報処理システム。
  15. 【請求項15】請求項1におけるインストーラは、抽象
    レジスタマシン命令の列に対する機械語命令生成規則に
    従って、抽象オブジェクトプログラムから機械語プログ
    ラムを生成することを特徴とする情報処理システム。
  16. 【請求項16】請求項14におけるインストーラは、抽
    象レジスタマシン命令の列に対する機械語命令生成規則
    を対象機種に合わせて変えることにより、同一の抽象オ
    ブジェクトプログラムから、異なる機械語プログラムを
    対象機種に合わせて生成することを特徴とする情報処理
    システム。
  17. 【請求項17】ソースプログラムをオブジェクトプログ
    ラムに変換するコンパイラと、オブジェクトプログラム
    の指示に従って演算を実行する対象計算機を有する情報
    処理システムにおいて、該オブジェクトプログラムは、
    対象計算機における機械命令列を表す機械語対応命令の
    他に、レジスタの割付・解放を制御する生成制御命令、
    叉はソ−スプログラムの構造を表す疑似命令、叉はプロ
    グラムの命令の位置と記号名称を対応づける疑似命令、
    叉はプログラムで使うメモリの位置あるいは大きさと記
    号名称を対応づける疑似命令、叉はデバッグ情報指定用
    の疑似命令を含むことを特徴とする情報処理システム。
  18. 【請求項18】ソースプログラムを機械語対応命令列を
    含む抽象オブジェクトプログラムに変換するコンパイラ
    、または複数の抽象オブジェクトプログラムを結合して
    結合済みの抽象オブジェクトプログラムを生成するリン
    カ、並びに、いずれかの該抽象オブジェクトプログラム
    を機械語プログラムに整えて具体計算機のメモリ内に格
    納するインストーラを有し、該機械語プログラムは何等
    の変換なしに具体計算機で実行できる機械命令列で構成
    される機械語プログラム生成システムにおいて、相異な
    る命令体系を持つ複数機種の各機種毎に該インストーラ
    を備えることにより、同一の抽象オブジェクトプログラ
    ムで指定された処理操作を複数機種の各々の具体計算機
    の上で実行させることを特徴とする機械語プログラム生
    成システム。
  19. 【請求項19】高級言語で書かれたソースプログラムと
    、上記ソースプログラムを翻訳してできた抽象オブジェ
    クトプログラムとを入力とするデバッグシステムであっ
    て、上記抽象オブジェクトプログラムは、複数のレジス
    タを持ち、レジスタとメモリの間の転送命令、レジスタ
    上の演算命令、命令の順序をを制御する命令を持つ抽象
    レジスタマシンの命令語列からなり、さらに、上記デバ
    ッグシステムは、上記抽象オブジェクトプログラムを実
    行可能な機械語プログラムに変換する手段を備えている
    ことを特徴とする、デバッグシステム。
  20. 【請求項20】同一の抽象オブジェクトプログラムを複
    数の機種で実行させる請求項18のデバッグシステム。
  21. 【請求項21】同一のデバッグシステムを複数の機種で
    実行させる請求項18のデバッグシステム。
  22. 【請求項22】可搬型記憶媒体と、前記可搬型記憶媒体
    が装着され、前記可搬型記憶媒体と情報の授受を行う情
    報処理装置とを有する情報処理システムにおいて、上記
    可搬型記憶媒体は、抽象オブジェクトプログラムを内蔵
    し、上記抽象オブジェクトプログラムは、複数のレジス
    タを持ち、レジスタとメモリの間の転送命令、レジスタ
    上の演算命令、命令の順序をを制御する命令を持つ抽象
    レジスタマシンの命令語列からなり、さらに、上記情報
    処理装置は、上記抽象オブジェクトプログラムを読みだ
    し、実行可能な機械語プログラムに変換する手段を備え
    ていることを特徴とする、情報処理システム。
  23. 【請求項23】上記可搬型記憶媒体がICカードである
    、請求項21の情報処理システム。
  24. 【請求項24】上記可搬型記憶媒体がCD−ROMであ
    る、請求項21の情報処理システム。
  25. 【請求項25】複数機種の計算機をネットワークで結合
    したネットワーク計算機システムであって、該ネットワ
    ーク上の少なくとも一つの計算機は、請求項1に記載さ
    れた抽象オブジェクトプログラムを備えたサーバであり
    、該ネットワーク上のそれぞれの計算機は、サーバの持
    つ該抽象オブジェクトプログラムにアクセスする手段と
    、請求項1に記載されたインストーラとを備え、該ネッ
    トワーク上のそれぞれの計算機において、サーバにより
    提供される抽象オブジェクトプログラムを、それぞれの
    インストーラにより、それぞれの機械語プログラムに変
    換し実行することを特徴とするネットワーク計算機シス
    テム。
  26. 【請求項26】請求項1に記載された抽象オブジェクト
    プログラムとインストーラとを用いて運用している計算
    機システムを、請求項1に記載されたインストーラを備
    えた他の計算機システムで置き換え、置き換え前の抽象
    オブジェクトプログラムを、置き換え後の計算機システ
    ムで実行することを特徴とする計算機システムリプレー
    ス方法。
JP09198091A 1991-04-23 1991-04-23 多機種対応型情報処理システム、および、方法 Expired - Fee Related JP3602857B2 (ja)

Priority Applications (9)

Application Number Priority Date Filing Date Title
JP09198091A JP3602857B2 (ja) 1991-04-23 1991-04-23 多機種対応型情報処理システム、および、方法
EP97121170A EP0834803A3 (en) 1991-04-23 1992-04-22 Computer with program installer
EP97121157A EP0838754A3 (en) 1991-04-23 1992-04-22 Program installer
EP92106888A EP0510616B1 (en) 1991-04-23 1992-04-22 Retargetable information processing system
DE69230707T DE69230707T2 (de) 1991-04-23 1992-04-22 An das Ziel anpassbares Informationsverarbeitungssystem
US07/872,773 US5586323A (en) 1991-04-23 1992-04-23 Compilier system using an intermediate abstract form and machine-specific installers
US09/080,241 US20020026633A1 (en) 1991-04-23 1998-05-18 Retargetable information processing system
US09/222,954 US6343373B1 (en) 1991-04-23 1998-12-30 Retargetable information process system
US10/762,373 US20040154007A1 (en) 1991-04-23 2004-01-23 Retargetable information processing system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP09198091A JP3602857B2 (ja) 1991-04-23 1991-04-23 多機種対応型情報処理システム、および、方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP11301898A Division JPH10254712A (ja) 1998-04-23 1998-04-23 多機種対応型情報処理システム、および、方法

Publications (2)

Publication Number Publication Date
JPH04322329A true JPH04322329A (ja) 1992-11-12
JP3602857B2 JP3602857B2 (ja) 2004-12-15

Family

ID=14041646

Family Applications (1)

Application Number Title Priority Date Filing Date
JP09198091A Expired - Fee Related JP3602857B2 (ja) 1991-04-23 1991-04-23 多機種対応型情報処理システム、および、方法

Country Status (4)

Country Link
US (4) US5586323A (ja)
EP (3) EP0510616B1 (ja)
JP (1) JP3602857B2 (ja)
DE (1) DE69230707T2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6021225A (en) * 1996-10-03 2000-02-01 Nec Corporation Image processing apparatus
US6305013B1 (en) 1998-04-01 2001-10-16 Nec Corporation Compiling method for generating target program in accordance with target processor type, compiling device, recording medium with compiling program recorded therein and recording medium with conversion table used in compiling recorded therein
JP2002527815A (ja) * 1998-10-10 2002-08-27 ヴィクトリア・ユニバーシティ・オブ・マンチェスター プログラムコード変換方法
JP2012088909A (ja) * 2010-10-19 2012-05-10 Tokyo Univ Of Agriculture & Technology 変換器及び変換方法
JP2017021752A (ja) * 2015-07-15 2017-01-26 富士通株式会社 プログラムの最適化装置、最適化プログラム、及び、最適化されたプログラムの製造方法

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3602857B2 (ja) * 1991-04-23 2004-12-15 株式会社日立製作所 多機種対応型情報処理システム、および、方法
US5715460A (en) * 1993-06-14 1998-02-03 International Business Machine Corp. Template based facility for formatting compiler output
DE69434845T2 (de) * 1993-07-22 2007-05-16 Koninklijke Philips Electronics N.V. Multimedia-System zur interaktiven Darstellung von Benutzerinformation und Massenspeicher zum Gebrauch mit einem solchem System
FR2721468B1 (fr) * 1994-06-17 1996-07-26 Alcatel Mobile Comm France Procédé de partage de ressources physiques et dispositif d'interface pour la mise en Óoeuvre du procédé.
EP0731971A1 (en) * 1994-09-30 1996-09-18 Koninklijke Philips Electronics N.V. Multimedia system receptive for presentation of mass data comprising an application program inclusive of a multiplatform interpreter, and a platform subsystem arranged for interaction with said multiplatform interpreter, and mass memory for use with such system or subsystem
US6748586B1 (en) * 1994-09-30 2004-06-08 Koninklijke Philips Electronics N.V. Data processing system receptive for presentation of data comprising an application program and a multiplatform interpreter, and a platform subsystem arranged for interaction with said multiplatform interpreter, and memory for use with such system or subsystem
US5590331A (en) * 1994-12-23 1996-12-31 Sun Microsystems, Inc. Method and apparatus for generating platform-standard object files containing machine-independent code
US5860006A (en) * 1995-09-15 1999-01-12 Apple Computer, Inc. Processor independent network operating system loadable modules
US6151618A (en) * 1995-12-04 2000-11-21 Microsoft Corporation Safe general purpose virtual machine computing system
GB9526129D0 (en) * 1995-12-21 1996-02-21 Philips Electronics Nv Machine code format translation
JP3720442B2 (ja) * 1995-12-25 2005-11-30 株式会社ハドソン デバッグ機能付きromカートリッジ
US5761512A (en) * 1995-12-27 1998-06-02 International Business Machines Corporation Automatic client-server complier
US6199095B1 (en) * 1996-01-29 2001-03-06 Compaq Computer Corporation System and method for achieving object method transparency in a multi-code execution environment
US6091897A (en) * 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
GB9613450D0 (en) * 1996-06-27 1996-08-28 Europay Int Sa Payment system
DE69714752C5 (de) * 1996-10-25 2015-08-13 Gemalto Sa Verwendung einer hohen programmiersprache in einem mikrokontroller
US6086632A (en) * 1996-10-31 2000-07-11 Nec Corporation Register optimizing compiler using commutative operations
US7077312B2 (en) * 1998-10-27 2006-07-18 Diebold, Incorporated Automated banking machine system and method
JP3816961B2 (ja) * 1997-10-02 2006-08-30 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ バーチャルマシン命令を処理するためのデータ処理装置
DE69836902T2 (de) * 1997-10-02 2007-10-18 Koninklijke Philips Electronics N.V. Auf variable instruktionen eingestellter computer
DE19751955A1 (de) * 1997-11-24 1999-06-02 Biotechnolog Forschung Gmbh Virtueller Roboter
JPH11327879A (ja) * 1998-05-15 1999-11-30 Fujitsu Ltd 変数検索装置及び方法並びに変数検索プログラムを記録したコンピュータ読取り可能な記録媒体
US6829759B1 (en) * 1998-10-29 2004-12-07 Texas Instruments Incorporated System and method for generating a translation display
FR2794543B1 (fr) * 1999-06-04 2001-08-24 Gemplus Card Int Migration de differents langages sources vers un support d'execution
US6889260B1 (en) * 1999-06-10 2005-05-03 Ec Enabler, Ltd Method and system for transferring information
US6802056B1 (en) * 1999-06-30 2004-10-05 Microsoft Corporation Translation and transformation of heterogeneous programs
US6625807B1 (en) * 1999-08-10 2003-09-23 Hewlett-Packard Development Company, L.P. Apparatus and method for efficiently obtaining and utilizing register usage information during software binary translation
GB9920676D0 (en) * 1999-09-01 1999-11-03 Tao Group Ltd Translating and executing object-oriented computer programs
US6754892B1 (en) * 1999-12-15 2004-06-22 Transmeta Corporation Instruction packing for an advanced microprocessor
AR033549A1 (es) 2000-08-07 2003-12-26 Diebold Inc Maquina automatica para operaciones bancarias, metodos para operarla y medio legible por computadora
US20040015820A1 (en) * 2000-09-25 2004-01-22 Edward Balassanian Method and system for dynamic delivery of beads
US20070016692A1 (en) * 2000-10-16 2007-01-18 Edward Balassanian Method and system for dynamic delivery of beads
US6907446B1 (en) * 2000-10-16 2005-06-14 Implicit Networks, Inc. Method and system for dynamic delivery of beads
EP1211598A1 (en) * 2000-11-29 2002-06-05 Texas Instruments Incorporated Data processing apparatus, system and method
US20020116699A1 (en) * 2000-12-18 2002-08-22 Armin Amrhein Apparatus and method for checking the status of control systems
US6934709B2 (en) 2001-03-26 2005-08-23 Matrixone, Inc. Interface definition language compiler
US6721943B2 (en) * 2001-03-30 2004-04-13 Intel Corporation Compile-time memory coalescing for dynamic arrays
US7140010B2 (en) * 2001-03-30 2006-11-21 Sun Microsystems, Inc. Method and apparatus for simultaneous optimization of code targeting multiple machines
US20030009750A1 (en) * 2001-07-09 2003-01-09 Robert Hundt Optimizing an executable computer program having linkage functions
US7117488B1 (en) 2001-10-31 2006-10-03 The Regents Of The University Of California Safe computer code formats and methods for generating safe computer code
EP1369778A3 (en) * 2002-01-09 2004-01-02 Matsushita Electric Industrial Co., Ltd. Program distribution system
US7331040B2 (en) * 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
GB0202728D0 (en) * 2002-02-06 2002-03-27 Transitive Technologies Ltd Condition code flag emulation for program code conversion
US7117484B2 (en) * 2002-04-16 2006-10-03 International Business Machines Corporation Recursive use of model based test generation for middleware validation
US7703077B2 (en) 2002-04-30 2010-04-20 Microsoft Corporation Programming model to detect deadlocks in concurrent programs
JP4153732B2 (ja) * 2002-06-19 2008-09-24 株式会社東芝 ハードウェア動作記述変換方法及びそのためのプログラム
JP4080809B2 (ja) * 2002-08-01 2008-04-23 松下電器産業株式会社 データの記憶領域への配置を決定するコンパイラ装置及び配置決定方法
US7603332B2 (en) * 2002-08-06 2009-10-13 Siemens Energy & Automation, Inc. Devices, systems, and methods for mediated rule-based translation system configuration information
US20040078781A1 (en) * 2002-10-16 2004-04-22 Novy Ronald Stephen Algorithm for creating and translating cross-platform compatible software
TWI244184B (en) * 2002-11-12 2005-11-21 Siliconware Precision Industries Co Ltd Semiconductor device with under bump metallurgy and method for fabricating the same
US9910653B2 (en) * 2003-02-07 2018-03-06 Nokia Technologies Oy Software distribution
GB2411990B (en) * 2003-05-02 2005-11-09 Transitive Ltd Improved architecture for generating intermediate representations for program code conversion
US7685581B2 (en) * 2003-06-27 2010-03-23 Microsoft Corporation Type system for representing and checking consistency of heterogeneous program components during the process of compilation
US7086041B2 (en) * 2003-06-27 2006-08-01 Microsoft Corporation Extensible type system for representing and checking consistency of program components during the process of compilation
US7559050B2 (en) * 2003-06-30 2009-07-07 Microsoft Corporation Generating software development tools via target architecture specification
US7707566B2 (en) 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7788652B2 (en) * 2003-06-27 2010-08-31 Microsoft Corporation Representing type information in a compiler and programming tools framework
US7698539B1 (en) 2003-07-16 2010-04-13 Banning John P System and method of instruction modification
US7606997B1 (en) 2003-07-18 2009-10-20 Guillermo Rozas Method and system for using one or more address bits and an instruction to increase an instruction set
US7526750B2 (en) * 2003-10-15 2009-04-28 Microsoft Corporation Object-based systematic state space exploration of software
US7797669B1 (en) * 2004-02-13 2010-09-14 Microsoft Corporation Analysis of distributed software systems via specification substitution
JP2005309841A (ja) * 2004-04-22 2005-11-04 Fujitsu Ltd インストール制御プログラム、インストール方法およびインストール装置
US7589719B2 (en) 2004-07-15 2009-09-15 The Regents Of The University Of California Fast multi-pass partitioning via priority based scheduling
US7996833B2 (en) * 2004-07-31 2011-08-09 Hewlett-Packard Development Company, L.P. Method and system for replacing instructions and instruction blocks in computer code
US7950010B2 (en) * 2005-01-21 2011-05-24 Sap Ag Software deployment system
US7533373B2 (en) * 2005-01-25 2009-05-12 Taiwan Semiconductor Manufacturing Co., Ltd Method for prevention of system execution malfunction
KR101332911B1 (ko) 2005-05-11 2013-11-26 퀄컴 인코포레이티드 분산 처리 시스템 및 방법
US20060265387A1 (en) * 2005-05-20 2006-11-23 International Business Machines Corporation Method and apparatus for loading artifacts
US9455844B2 (en) * 2005-09-30 2016-09-27 Qualcomm Incorporated Distributed processing system and method
US8286158B2 (en) 2006-02-06 2012-10-09 Imation Corp. Method and system for installing portable executable applications
JP2008097249A (ja) * 2006-10-11 2008-04-24 Internatl Business Mach Corp <Ibm> プログラム中の命令列をより高速な命令に置換する技術
US7720931B2 (en) 2006-10-13 2010-05-18 International Business Machines Corporation System and method of remotely managing and loading artifacts
US7761559B2 (en) * 2006-10-13 2010-07-20 International Business Machines Corporation System and method of remotely managing and loading artifacts
EP1927956A1 (en) * 2006-11-30 2008-06-04 Incard SA Multi-applications IC Card with secure management of applications
US8209662B2 (en) 2006-12-04 2012-06-26 Microsoft Corporation Application retargeting
US8930909B1 (en) * 2007-07-13 2015-01-06 The Mathworks, Inc. Debugging using presentation layer representations of objects
US20090063623A1 (en) * 2007-08-31 2009-03-05 International Business Machines Corporation Determining connection information to use to access an artifact from an application on a remote server
US7895462B2 (en) * 2008-02-25 2011-02-22 International Business Machines Corporation Managing recovery and control of a communications link via out-of-band signaling
US8762125B2 (en) * 2008-02-25 2014-06-24 International Business Machines Corporation Emulated multi-tasking multi-processor channels implementing standard network protocols
JP2009211190A (ja) * 2008-02-29 2009-09-17 Hitachi Ltd 情報処理装置
US8341607B2 (en) * 2008-03-13 2012-12-25 International Business Machines Corporation Condensing pattern matcher generation for intermediate language patterns
US8904366B2 (en) * 2009-05-15 2014-12-02 International Business Machines Corporation Use of vectorization instruction sets
US9134977B2 (en) * 2010-02-26 2015-09-15 Red Hat, Inc. Compiler operation for handling conditional statements
US8375373B2 (en) * 2010-04-19 2013-02-12 Microsoft Corporation Intermediate language support for change resilience
US9081626B2 (en) * 2010-05-03 2015-07-14 Renesas Electronics America Inc. Method and apparatus for converting software
US20120124555A1 (en) * 2010-11-11 2012-05-17 Codekko Software, Inc. Optimization of Compiled Control Objects
US8464232B2 (en) 2010-12-27 2013-06-11 Aleksandr F. Urakhchin Compiler compiler system with syntax-controlled runtime and binary application programming interfaces
US9098317B2 (en) * 2011-03-16 2015-08-04 Microsoft Technology Licensing Llc Optional retargeting of library references
US8789026B2 (en) * 2011-08-02 2014-07-22 International Business Machines Corporation Technique for compiling and running high-level programs on heterogeneous computers
US9043766B2 (en) * 2011-12-16 2015-05-26 Facebook, Inc. Language translation using preprocessor macros
US9274772B2 (en) 2012-08-13 2016-03-01 Microsoft Technology Licensing, Llc. Compact type layouts
US9569184B2 (en) * 2012-09-05 2017-02-14 Microsoft Technology Licensing, Llc Generating native code from intermediate language code for an application
CN110554875B (zh) * 2018-05-30 2021-01-15 北京三快在线科技有限公司 代码转换方法及装置、电子设备、存储介质
JP6950634B2 (ja) * 2018-07-03 2021-10-13 オムロン株式会社 制御装置および制御方法
CN111091612B (zh) * 2019-10-09 2023-06-02 武汉凌久微电子有限公司 一种抽象目标码架构的着色语言机器码生成方法及装置
US11294649B1 (en) * 2021-01-13 2022-04-05 Amazon Technologies, Inc. Techniques for translating between high level programming languages

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
US5151989A (en) * 1987-02-13 1992-09-29 International Business Machines Corporation Directory cache management in a distributed data processing system
JPH0391980A (ja) 1989-09-04 1991-04-17 Matsushita Electric Ind Co Ltd 波長可変レーザ装置
US5187789A (en) * 1990-06-11 1993-02-16 Supercomputer Systems Limited Partnership Graphical display of compiler-generated intermediate database representation
US5339419A (en) * 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
US5280613A (en) * 1990-06-25 1994-01-18 Hewlett-Packard Company ANDF installer using the HPcode-Plus compiler intermediate language
US5276881A (en) * 1990-06-25 1994-01-04 Hewlett-Packard Company ANDF producer using the HPcode-Plus compiler intermediate language
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information
JP3602857B2 (ja) * 1991-04-23 2004-12-15 株式会社日立製作所 多機種対応型情報処理システム、および、方法
JPH06250633A (ja) * 1993-02-26 1994-09-09 Fujitsu Ltd 多階調フォント生成方法及び多階調フォント生成装置
JP3405890B2 (ja) 1996-10-15 2003-05-12 株式会社クボタ 水田作業機

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6021225A (en) * 1996-10-03 2000-02-01 Nec Corporation Image processing apparatus
US6305013B1 (en) 1998-04-01 2001-10-16 Nec Corporation Compiling method for generating target program in accordance with target processor type, compiling device, recording medium with compiling program recorded therein and recording medium with conversion table used in compiling recorded therein
JP2002527815A (ja) * 1998-10-10 2002-08-27 ヴィクトリア・ユニバーシティ・オブ・マンチェスター プログラムコード変換方法
US8006237B2 (en) 1998-10-10 2011-08-23 International Business Machines Corporation Program code conversion
US8037461B2 (en) 1998-10-10 2011-10-11 International Business Machines Corporation Program code conversion
JP2012088909A (ja) * 2010-10-19 2012-05-10 Tokyo Univ Of Agriculture & Technology 変換器及び変換方法
JP2017021752A (ja) * 2015-07-15 2017-01-26 富士通株式会社 プログラムの最適化装置、最適化プログラム、及び、最適化されたプログラムの製造方法

Also Published As

Publication number Publication date
EP0834803A3 (en) 1999-02-17
EP0838754A3 (en) 2006-06-07
US20040154007A1 (en) 2004-08-05
EP0510616A2 (en) 1992-10-28
JP3602857B2 (ja) 2004-12-15
EP0838754A2 (en) 1998-04-29
US5586323A (en) 1996-12-17
DE69230707D1 (de) 2000-04-06
US20020026633A1 (en) 2002-02-28
DE69230707T2 (de) 2000-11-16
EP0510616B1 (en) 2000-03-01
EP0510616A3 (en) 1993-06-16
EP0834803A2 (en) 1998-04-08
US6343373B1 (en) 2002-01-29

Similar Documents

Publication Publication Date Title
JPH04322329A (ja) 多機種対応型情報処理システム、および、方法
Schwarz et al. Plto: A link-time optimizer for the Intel IA-32 architecture
Leupers et al. Retargetable compiler technology for embedded systems: tools and applications
US5481708A (en) System and methods for optimizing object-oriented compilations
Van Put et al. Diablo: a reliable, retargetable and extensible link-time rewriting framework
JP5036801B2 (ja) 高級プログラミング言語におけるプログラムをハイブリッド計算プラットフォームの統一された実行可能要素に変換するためのプロセス
JP5851396B2 (ja) 処理方法
JP4050764B2 (ja) コンパイルシステム
US8423976B2 (en) Extreme pipeline and optimized reordering technology
JP4403080B2 (ja) 再構成可能なハードウェアエミュレーションによる制御データフローグラフを用いたデバッグ
US5966539A (en) Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis
US7530061B2 (en) Programmatic access to the widest mode floating-point arithmetic supported by a processor
JP2006505056A (ja) 制御フローグラフ表現を制御データフローグラフ表現に変換するためのシステムおよび方法
Blickstein et al. The GEM optimizing compiler system
Moona Processor models for retargetable tools
Souza et al. ISAMAP: instruction mapping driven by dynamic binary translation
Leupers LANCE: AC compiler platform for embedded processors
JPH10254712A (ja) 多機種対応型情報処理システム、および、方法
JP2004348759A (ja) 多機種対応型情報処理システム、および、方法
Spink et al. Efficient dual-ISA support in a retargetable, asynchronous dynamic binary translator
Harris A just-in-time Java bytecode compiler
Scheller Retargeting a C Compiler to the HAPRA/FAPRA Architecture
Molnar et al. A microprogramming support tool for pipelined architectures
Edition HP Fortran Programmer's Guide
Hohenauer et al. Assembler Optimizer

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040721

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040830

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040927

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081001

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091001

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees