JPH06502269A - プログラムコードの交差像参照方法 - Google Patents

プログラムコードの交差像参照方法

Info

Publication number
JPH06502269A
JPH06502269A JP4511619A JP51161992A JPH06502269A JP H06502269 A JPH06502269 A JP H06502269A JP 4511619 A JP4511619 A JP 4511619A JP 51161992 A JP51161992 A JP 51161992A JP H06502269 A JPH06502269 A JP H06502269A
Authority
JP
Japan
Prior art keywords
program
computer program
call
input point
calling
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
JP4511619A
Other languages
English (en)
Other versions
JPH0762827B2 (ja
Inventor
シテス リチャード エル
Original Assignee
ディジタル イクイプメント コーポレイション
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 ディジタル イクイプメント コーポレイション filed Critical ディジタル イクイプメント コーポレイション
Publication of JPH06502269A publication Critical patent/JPH06502269A/ja
Publication of JPH0762827B2 publication Critical patent/JPH0762827B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Television Signal Processing For Recording (AREA)

Abstract

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

Description

【発明の詳細な説明】 ブ0グラムコードの交差像参照方法 本発明は、デジタルコンピュータのためのプログラムコードの変換に係り、より 詳細には、変換されるべき全てのプログラムコードの位置がそのプログラムコー ドを実際に実行するまで分からない場合にそのプログラムコードをある言語から 別の言語に変換することに係る。
2、公知技術の説明 コンピュータ言語の変換プログラムとしては、パスカルやフォートランやコボル やPL/l又はCのような高レベル言語をマシン言語に変換するものが良く知ら れている。これらの言語の場合、プログラムは英語のようなスタイルでコード化 される。コンパイラ−と称する言語変換プログラムは、高レベル言語のプログラ ム(ソースプログラムと称する)を読み取って、それをマシン言語プログラム( 目的プログラムと称する)に変換する。
高レベル言語の1つの主な利点は、アルゴリズムを表現する容易さに加えて、マ シン独立なことである。それらは、ハードウェアマシン及び命令セットの特性を 秘めている。しかしながら、マシン言語のプログラミングが所望されるアプリケ ーションは多数ある。プログラムの実行速度を高めるために、繰り返し実行され る手順のコードをマシン言語で書き込み、その手順を実行するに必要なマシンサ イクルの数を最小限に抑えることがしばしば望まれる。又、多くのコンピュータ ンステムでは、特定コンピュータの特定ハードウェア特徴を直接的に制御するた めにマシン言語のプログラミングが必要とされる。例えば、メモリ及び入力/出 力装置を管理するオペレーティングシステムの部分は、しばしばマシン言語で書 かれる。
マシン言語のプログラムは、通常、2進コードではなくてアッセンブリー言語の コードで書かれている。アッセンブリーを詔では、プログラマ−がメモリ位置及 び命令に対して記号名を用いてマシンのオペレーン3ンを指定することができる 。アッセンブリーと称するプログラムは、アッセンブリー言語のプログラムを2 進のマシンコードに変換する。アッセンブリーは、記号の値及びデータエレメン トのアドレスを記憶する全ての作業を実行する。しかしながら、高レベル言語と は異なり、各アッセンブリー言語命令は厳密に1つのマシン命令に対応している 。
近年、ある種のコンピュータのためのマシン言語を別の種層のコンピュータのた めのマシン言語に変換する必要性か生じている。この必要性は、コスト効率のよ り高い新規なコンピュータアーキテクチャ−を生み出したコンピュータハードウ ェアの急速な進歩によって生じたものである。特に、ここ10年間以上にわたり 、最も性能の高い汎用のコンピュータは、 「コンプレックス命令セットアーキ テクチャ−(complex 1nstruction set archit ecture)J (Cl5C)を用いており、これは命令セット中に非常に多 数の命令を有することを特徴とするもので、複雑なメモリアクセスモードを伴う 可変長さ命令及びメモリ対メモリ命令をしばしば含んでいる。このcrscの主 な例が、VAX (登録量’[)命令セットであり、これに用いられる命令は、 lないし2バイトのOPコードと、0ないし6のオペランド指定子とを育し、各 々のオペランド指定子は1バイトないし18バイトの長さである。オペランド指 定子のサイズは、アドレスモード、変位のサイズ(バイト、ワード又はロングワ ード)等々に基づいている。オペランド指定子の第4バイトはそのオペランドの ためのアドレスモードを記述し、一方、OPコードはオペランドの数Oから6を 指定する。しかしながら、OPコード自体は常に命令の全長を決定するものでは ない。というのは、異なった長さのオペランド指定子と共に多数のOPフードを 使用できるからである。VAX命令セットの別の#徴は、りオドワード又はロン グワードレファレンスに加えて、バイト又はバイトストリングのメモリレファレ ンスを使用することにあり、即ちメモリレファレンスは、非整列バイトレファレ ンスを含んで1バイトから多ワードまで可変長さのものである。
crscアーキテクチャ−は、コードをコンパクトにすると共に、アッセンブリ ー言語のプログラミングを容易なものにした。中央処理ユニット(CPU)かメ モリよりも非常に高速度であった時代には、1命令当たりにより多くの作業を行 うことが効果的であった。というのは、さもなくば、CPUはメモリか命令を送 りだすのを待って著しい時間を費やしてしまうからである。しかしながら、近年 、メモリ速度の進歩と、オン・チップキャッシュやハイアラーキーキャッシュの ような技術により、crscアーキテクチャ−の主たる利点かなくなってしまっ た。それ故、命令アーキテクチャ−の選択は、今や、合理的なコストで最大の実 行速度を得るためにCPUに要求される複雑さ1こよって決められている。これ らのことから、簡易な命令セットアーキテクチャ−(RrSC)が優れた性能と コスト効率を存することか示される。
簡易命令セット即ちRISCのプロセッサは、命令の数が少なくて簡単にデコー ドできることを特徴とすると共に、全ての演算/論理オペレーションをレジスタ 対レジスタで行わねばならないことを特徴とする。もう1つの特徴としては、複 雑なメモリアクセスが許されず、即ち全てのメモリアクセスはレジスタのロード /記憶オペレーションであり、そして少数の比較的簡単なアドレスモードしかな く、ひいてはオペランドアドレスを指定する方法が若干しかない。命令は1つの 長さしかなく、メモリアクセスは、通常は整列された標準データ巾のものである 。命令の実行は、マイクロコードと異なり直接固定布線型のものである。命令の サイクルタイムは固定で、命令は1つの短いサイクル(平均で、というのは、パ イプライン動作により実際の実行は数サイクルに分散されるので)に全て実行す るように比較的簡単に定められる。
不都合なことに、既に確立された命令アーキテクチャ−に対しておびただしい量 のコンピュータソフトウェアがこれまでに書かれており、これらソフトウェアの 多くは、高レベル言語のコンパイラ−から生じたものではないマシン言語のプロ グラムを含んでいる。これらの場合、新たな命令アーキテクチャ−に対して畜か れたコンパイラ−を用いてソースコードをコンパイルし直すという通常の方法に よりソフトウェアをその新たなコンピュータアーキテクチャ−に「移行」するこ とはできない。
ある場合には、既存のコンピュータソフトウェアのマシン言語プログラムに対し てアッセンブリー言語コードか存在する。それ故、各々のアッセンブリー言語命 令を、同じ基本機能を行う新たな命令アーキテクチャ−の1つ以上のマシン命令 に変換するために変換プログラムを書くことができねばならない。このような直 接的な変換を実施できるかどうかは、新たな命令アーキテクチャ−のコンパチビ リティによって工右される。例えば、VAX命令を含むCl5CコードをRIS Cコードに変換する場合に、この変換を実施できるかどうかは、RISCCPU ハードウェア及びRISC命令セットの革新によって著しく改善される。これに ついては、参考としてここに取り上げる1990年6月29日出願のr高性能プ ロセッサにおける分岐予想(Branch Prediction in Hi gh−Performance Processor) Jと題するリチャード ・L・サイト及びリチャード・T・ライチク氏の米国特許出願071547,5 89に開示されている。
多くの場合、既存のコンピュータソフトウェアは、高レベル即ちアッセンブリー 言語のソースコードの完全なセット即ちコヒレントなセットか存在しないような 2進マシン言語フードを含んでいる。これでは、変換すべき全ての2進マシンコ ードを探索するという非常に困難な問題か生じる。通常の場合、プログラムの中 の2進マシンコードの一部分はその実行時間までに探すことかできない。という のは、このコードは計算された行き先アドレスを有する「ジャンプJや「コール 」命令のような少なくとも1つの実行転送命令を含んでいるからである。実行時 間の際に、行き先アドレスか計算さ托実行がその命令から「欠落」コードへと転 送される。
例外的な場合には、プログラム中の2進マシンコードの幾つがか実行時間まで形 成されない。これらの例外的な場合というのは一般的にプログラミング技術か不 充分なことによるものであるが、実行時間には、例えば機密保持の目的で「ライ センスチェック」ルーチンの一部としてコードがしばしば形成される。「ライセ ンスチェックノル−チンでは、例えば、一連の命令かスクラッチメモリエリアへ 書き込まれそして一連の命令か実行される。ライセンスルーチンを欺くためには 、スクラッチエリアに書き込まれた一連の命令からルーチンの動作モードを見分 けねばならない。しかし、一連の命令は、実行時間まで存在しないので、プログ ラムの通常のプリントアウトやダンプ動作では得られない。
オリジナルプログラムの中の全てのマシンコードを探索するという問題がある場 合には、コードか実行時間に解読される。インタープリタ−の変換プロセスはア ッセンブリーHPのトランスレータ−と同様であるか、実行時間の際の解読には 変換されたコートの実行よりも約2桁も時間かがかる。というのは、各々のマシ ン命令を解読するためにインタープリタ−プログラムの中の多数の命令を実行し なければならないからである。不完全な変換を使用できるようにするために、新 たな命令アーキテクチャ−を用いたCPUにオリジナルプログラムを送るときに は、インタープリタ−プログラムと、オリジナルプログラムのコピーと、アドレ ス変換情報か、変換されたコードと共に与えられる。変換されたコードの実行が 、変換されないコードに対するオリジナルプログラム中の実行転送に対応するポ イントに達したときに、CPUはその実行をインタープリタ−プログラムに転送 し、オリジナルプログラムの中の変換されないコードを解読する。インタープリ タ−は各々の変換されないマシン命令を新たなアーキテクチャ−に対するIっ以 上のマシン命令に次々に変換し、それを実行する。インタープリタ−は、アドレ ス変換情報を用いてその実行を適当な時間に変換されたプログラムへ転送して戻 す。しかし、変換されないコードが存在すると、実行時間までにほとんど全ての 命令を探索して変換することができない限り、性能に著しい影響が及ぶ。
発明の要旨 プログラムはサブルーチンや手順を含む個別の像にしばしば層成されるが、これ らは呼び出しの規定により相互依存性をもっことになる。この相互依存性は、プ ログラム内の命令を探索したり変換したりするプロセスとしばしば干渉する。
特に、復帰ポイントは適切に接続しなければならず、これには、呼び出されてい る像に関する情報か必要である。
本発明の重要な特徴によれば、傷内の各々の使用できる入カポインドを呼び出す 作用に関する情報か決定され、メモリに記録される。各像に関する情報は、像を 変換するときに決定され、各像に割り当てられたファイルのようなデータ構造体 に記録されるのか好ましい。像を変換するときには、別の像の入カポインドへの 呼び出しが、その入カポインドを呼び出す作用について記録された情報を用いる ことにより変換される。像によってなされた外部呼び出しに関する情報もファイ ルに記録され、呼び出された傷内の命令を探索するのに使用される。
しかしながら、相互依存性は、第2の傷内の入カポインドを呼び出す作用が第1 の像に依存し、第1の像を変換するまで分からないような状態を生み出す。しか し、第1の像の変換には、第2の傷内の入カポインドを呼び出す作用に関する情 報が必要である。このような矛盾する相互依存性は、例えば、第1の像か第2の 傷内の入カポインドを呼び出しそして第1の傷内の手順のアドレスを識別する手 順パラメータを通すが、第2の像が次いで第4の像の手順ヘコールバックするよ うな場合に生じる。第1の像を変換するためには、第2の像の入カポインドを呼 び出す作用に関する情報、例えば、第2の像が第1の像をコールバックするとい うような情報が分からねばならない。しかしながら、この情報は、第1の像を検 査するだけでは決定できない。第2の像を変換するためには、第4の像を呼び出 すことに関する情報、例えば、第1の像へのコールバック中に通される手順−パ ラメータの1組の考えられる値と、この手順パラメータの各々の考えられる値に 対するコールバックの作用とが分からねばならない。しかしながら、この情報は 、第2の像を検査するのでは決定できない。それ故、各々の像を、互いに池の像 か変換のために全ての必要な情報を持つ前に、変換しなければならないような場 合に、矛盾する状態を招く。
本発明の別の特徴によれば、相互依存性による矛盾は、多数の変換及びチェック される仮定によって解決される。第1の像の変換中に、トランスレータ−は、第 2の像がまだ変換されていないために、!!2の像の入カポインドを呼び出す作 用に関する情報がないことか分かる。それ故、トランスレータ−は、ノーマル復 帰やコールバックなしといった第2像の入カポインドへの呼び出しに関するデフ オールド仮定をする。第2の像が変換されるとき、トランスレータ−は、第2の 像かこのデフす一ルト仮定に反してコールバックをもつと決定し、それ故、この デフす−ルト仮定に基づいて手前の変換を発見するために更にチェックを行う。
第1像の変換を含むこれら手前の変換は、第2像の入カポインドを呼び出す作用 に関して更新された情報を用いて繰り返される。例えば、第1像の再変換により 更に別のプログラムコードか探索され、それ故、第4像を呼び出す作用に関する 情報、例えば、第2像からのコールバックの作用に関する情報が変化する。この 場合、この情報に基づく手前の変換−一部2像の変換を含む−一か、第1像を呼 び出す作用に関する更新された情報を用いて繰り返される。
多数の変換及びチェックされた仮定についてのこのプロセスは、何回も繰り返さ れるか、最終的には常にコンバージェンス(収斂)状態となる。多くの場合、こ のプロセスは、各像か正確に記述されるとコンバージェンス状態になり、それ以 上の再変換は不要となる。例えば、実行時間ライブラリーは、典型的に、とりわ け相互依存性をもつ像の収集体を含むが、これらは、指定の入カポインドにおい てユーザプログラムによって呼び出さね、ユーザプログラムとの相互依存性はも たない。この場合、多数の変換及びチェックされた仮定のプロセスは、指定の入 カポインドにおける各像の呼び出し作用に関する完全な情報を含む各像の正確な 記述に基づいてコンバージェンス状態となる。この情報を含むファイルをユーザ プログラムの変換に使用することができ、実行時間ライブラリー像の再変換は必 要とされない。
図1は、複雑(コンプレックス)命令を処理するように特に構成されたパイプラ イン式処理ユニットを育するCl5Cデジタルコンピユータシステムのブロック 図である。
図2は、多数の命令に対して異なったタスクを同時に実行するときの図1のパイ プライン処理ユニットの状態を示す図である。
図3は、複雑な命令セットからの可変長さ命令の好ましいフォーマットを示す図 である。
図4は、ロングワード間の加算を行うための特定の可変長さの命令を示す図であ る。
g5は、指定子の第1バイトに含まれたモード情報のデコードを示すテーブルで ある。
図6は、RISCデジタルコンピュータシステムのブロック図である。
図7は、RISC命令セットの中の好ましい命令フォーマットを示すブロック図 である。
図8は、オリジナルのCl5Cプログラムを、RISC命令をもつ変換プログラ ムに変換するためのアナライザー及びRISCコードジェネレータを含むトラン スレーターのブロック図である。
図9は、オリジナルcrscプログラムの部分RISC変換と、そのオリジナル crscプログラムの非変換部分を解読するインタープリタ−との間で実行か分 担されるときのRISCコンピュータからのデータ及びプログラム入力と、デー タ出力とを示すブロック図である。
図1Oは、図9に使用されたインタープリタ−を呼び出す図8のRISCフード ジェネレータのステップを示すフローチャートである。
図11は、図9に示す部分RISC変換とで実行か分担されるときのインタープ リタ−及びその動作を示すフローチャートである。
図12は、いつ実行がインタープリタ−から部分RISC変換へ移行するかを決 定するアドレスチェックルーチンのフローチャートである。
図13は、図8のトランスレータ−の動作を示すフローチャートである。
図14は、図8のトランスレータ−により発生される概要ページであって、変換 されたオリジナルのCl5Cプログラムのメモリマツプを含む概要ページを示す 回である。
図15は、オリジナルのCl5Cプログラムのフローチャートである。
図16は、オリジナルのCl5Cプログラムのエラー特存の流れ図である。
図]7は、マシンコードから流れ図を自動的に発生するためにトランスレータ− のアナライザーによって使用されるデータ構造を示すブロック図である。
図18は、マシンコードから流れ図を自動的に発生するためにアナライザーによ って使用される手順を示すフローチャートである。
図19は、マシンコードから流れ図を自動的に発生する間に実行転送命令からの 経路を検査するためにアナライザーによって使用される手順を示すフローチャー トである。
図20は、手前のプログラム実行における計算行き先アドレスの値を見つけよう とする試みにおいて後方記号実行を行うためにアナライザーによって使用される 手順のフローチャートである。
図21は、一定の変位を含む行き先アドレスと、特定の汎用レジスタと、直接又 は間接メモリアクセスの指示とに対する記号表現において項目の固定フォーマッ トを示した図である。
図22は、一定の変位を含む行き先アドレスと、特定の汎用「ベース」レジスタ と、特定の汎用「インデックス」レジスタと、一定のオフセットと、直接又は間 接メモリアクセスの指示とに対する記号表現において項目の固定フォーマットを 示した図である。
図23は、メインプログラムルーチンの流れを示す概略図で、破線で示す実行転 送経路を含んだ間接的なプログラムループを示す図である。
図24は、所与の記号表面のための値を見つける試みにおいて基本ブロックをサ ーチするために後方記号実行に用いられる手順のフローチャートである。
図25は、所与の記号表現を命令を通して後方に押しやってその記号表現を変更 し、プログラムの実行中に、命令実行の直後にその所与の記号表現で表わされる であろうものと同じ値を命令実行の直前にその変更した表現で表すようにするた めに、後方記号実行に使用される手順を示すフローチャートである。
図26は、記号表現を命令を通して後方に押しやる助けをするために各々の命令 OPコードに対して予め決定することのできるデータのフォーマットを示す図図 27は、記号表現を命令を通して押しやることによりその表現がコンピュータプ ログラムの一定アドレスを表すフォーマットに変換されたか又はコンピュータの オペレーティングシステムの一定アドレスを表すフォーマットに変換されたかを チェックすると共に、そのアドレスがプログラム実行転送のための許容できる行 き先を表すかとうかをチェックするためのルーチンを示すフローチャートである 。
図28及び29は、プログラムメモリの未知のフードエリアにおいて巧みなプロ グラムコードを見つけるための3つのスキャニングモードを含む手順を示すフロ ーチャートである。
図30は、プログラムの実行中に解読された非変換プログラムコードの位置を識 別する実行ログファイルの利点を取り入れてオリジナルプログラムを繰り返し変 換することによりプログラム変換及び維持を行う一般的な手順を示すフローチャ ートである。
図31は、2つの相互に従属するプログラムを交互に変換及び再変換しそして2 つのプログラムを容易に合体できないもしくは同時に変換できない状態において コンバージェンスをテストするための手順を示すフローチャートである。
図32は、2つの相互に従属するプログラムの像情報ファイルを示すと共に、フ ァイル間のリンケージを示すブロック図である。
図33は、2つの相互に従属するプログラムの情報ファイル間のリンケージを利 用して、これらプログラムか交互に変換及び再変換されるときに迅速にコンバー ジェンスを得るための手順を示すフローチャートである。
本発明は、種々の形態で実施できるが、その特定の実施例を図示して以下に詳細 に説明する。しかしなから、本発明は、ここに開示する特定の形態に限定される ものではなく、請求の範囲に規定した本発明の精神及び範囲内に入る全ての変更 、修正及び等動物も包含するものとする。
実施例の詳細な説明 本発明の好ましい実施例は、複雑命令セットフンピユータ(CISC)用のプロ グラムコードを簡易命令セットコンピュータ(RrSC)用のプログラムコード に変換するために効果的に使用される。先ず、図1を参照すれば、そこに示され た複雑命令セットのデジタルコンピュータ20は、中央処理ユニット21と、入 力/出カニニット22と、メインメモリ23とを備えている。
データ及びこれを処理するための命令は、メインメモリ23内のアドレス可能な 記憶位置に記憶される。命令は、CPUにより実行されるへきオペレーションを コートの形態で指定するオペレージコンコード(OPコード)と、オペランドを 探索するための情報を与えるオペランド指定子とを含んでいる。輿望的なC■S C命令アーキテクチャ−においては、各命令の最初のバイトかOPコードを含み 、それに続くバイトかオペランド指定子を含む。命令は可変長さであるのか好ま しく、種々の形式の指定子を同じOFコードと共に使用することができる。これ については、参考としてここに取り上げる1980年12月23日付けのストレ ッカー氏等の米国特許第4.241,397号に開示されている。
メインメモリ23は、多数の記憶位置を含み、それ故、安価ではあるが比較的低 速の記憶装置、例えば、ダイナミック・ランダム・アクセス(DRAM)メモリ チップで構成される。CPU21は、メインメモリのアクセスタイムよりも高速 度で命令を実行するので、比較的記憶容量の小さい高速キャッシュメモリにデー タ及び命令の一部分のコピーを保持するメモリアクセスユニット24を備えてい る。通常、CPUは、データ及び命令をメモリアクセスユニット24のキャッシ ュメモリから得ることか必要であるが、このキャッシュメモリに必要な命令及び データが見つからないときには、メモリアクセスユニットがメインメモリユニッ ト23をアクセスし、必要な命令又はデータをキャッシュメモリに「再装填」す る。
又、メモリアクセスユニット24は、命令に使用される「仮想」アドレスをメイ ンメモリ23に使用される「物理」アドレスに変換するための変換バッファのよ うな手段も備えている。この技術により、プログラマ−は、メインメモリ23に 設けられる以上に多数のアドレス可能なメモリ位置を含む「仮想アドレススペー ス」を参照することかできる。それ故、プログラマ−は、メインメモリ23の制 限された記憶容量によってあまり制約を受けることがない。
より速いデータアクセスを与えるために、命令は、マルチポートレジスタファイ ル25に含まれた限定された数の汎用レジスタを参照することができる。これら 汎用レジスタの幾つかには特定のファンクションを指定することができ、例えば 、1つの汎用レジスタは典型的にrプログラムカウンタJとして使用され、ソー スオペランドとして参照されたときにデコードされる命令のアドレスを与えるか 、或いは行き先オペランドとして参照されたときにデコードされるべき次の命令 のアドレスを指定する。
個々の命令の実行は、各々のバイブラインファンクションユニットによって行わ れる多数のサブタスクに分割される。これらのパイプラインファンクションユニ ットは、メモリから命令をフェッチするための命令バッファ26と、このフェッ チされた命令をデコードするための命令デコーダ27と、ソースオペランド指定 子によって識別されたソースオペランドをフェッチするためのオペランドユニッ ト28と、ソースオペランドに基づいて演算、論理及び特殊なオペレーションを 実行して結果を得るための実行ユニット29と、行き先オペランド指定子によっ て識別されたメモリ位置又はレジスタに結果を記憶するためのりタイヤユニツト 30とを備えている。
複雑命令セントのデジタルコンピュータ20の好ましい構造に関する詳細につい ては、参考としてここに取り上げる1989年2月3日出願のファイト氏等の「 可変長さ命令アーキテクチャ−における多数の指定子のデコーディング(Dec oding Multiple 5pec山ers in a Variabl e Length 1nstruction Architec狽浮窒■j」 と題する米国特許出願07/307.347を参照されたい。
図2は、デジタルコンピュータ(図1の20)か1サイクル当た引命令という平 均的な速度で命令を実行するような理想的な状態に対するパイプラインファンク ションユニット(図1の26ないし30)の状態を示す図である。一般に、各命 令の実行中にはバイブラインユニット26ないし30の各々により次の段階か実 行される。即ち、命令フェッチ、命令デコード、オペランドフェッチ、実行及び 結果の記憶である。
1つのサイクルは、各ファンクソヨンユニットかそのサブタスクを実行するため の最小の時間である。所与のファンクソヨンユニットは、例えば、メモリアクセ スユニット(図1の24)か「再装填Jオペレーションを実行しているときには 、そのメモリアクセスユニットの競合により1つのサイクル内にそのサブタスク を実行しないことかある。更に、特に複雑な命令を実行しているときには、命令 か複雑であるために、所与のファンクソヨンユニットかそのサブタスクを実行す るのに2サイクル以上を要することかある。いずれの場合にも、専用のノλ−ド ウエア段を使用することにより、これらのステップをパイプラインオペレーンヨ ンにおいである程度オーバーラツプさせて、全命令スループ・ノドを高めること かできる。
図3は、IIIに示す中央処理ユニット(CPU)+こよって処理することのて きる典型的な命令40を示している。この命令は、参考としてここに取り上げる デジタル・イクイップメント社のレビー及びエクノ為つス二世著の「コンピュー タプログラミング及びアーキテクチャ−1VAX−l1J (1980年)に記 載されたVAX (登録商標)可変長さ命令アーキテクチャ−に対応する。この 命令40は、1又は2バイトのオペレーションコード4Iを含んでいる。第1ノ くイト42かFD(+6進)の値を有する場合には、これかダブルバイトのオペ レーションコードとして認識される。さもなくば、命令デコーダ(図1の27) かそのオペレーションコードを1バイトしか含まないものとして認識する。命令 40は、更に、オペレーションコートの後に6個までの指定子を含む。
オペレーションコードは、命令内にいかに多数の指定子か含まれるかを指示する 。所与のオペレーションコードに関連して使用される指定子は、種々のアトリビ ュート及び種々の長さをもつことかできる。特定の指定子のアトリビュートはそ の指定子の第1バイトのアドレスモードによって少なくとも部分的に決定される 。しかしなから、指定子の許容できるアトリビュートは、オペレーションコート によって制限を受けることが時々ある。更に、[即座のアドレッシング」として 知られている特定種類のアドレスモードについては、指定子情報の長さかその指 定子によって指定された「データタイプJにより決定される。
特定の可変長さの命令か図4に示されている。アブセンブラー表示では、この命 令がrADDL3 RO,#4.L103 (R2)Jと書き表される。マシン コートでは、命令か8バイトを含み、一般に45で示されている。第1のバイト は、23(16進)のオペレーションコートであり、これはアッセンブタ一二ュ ーモニノクrADDL3」に対応する。このオペレーションコードは、第1のロ ングワードオペランドを第2のロングワードオペランドに加算しそしてロングワ ードの結果を行き光位置に記憶すべきであることを指示する。オペレーションコ ードに続いて、50(16進)の値をもつ「レジスタ指定子」がある。16進数 の5は、指定子かレジスタ指定子であることを示し、そして16進数0は、指定 されたレジスタがCPU内のROK用レジスタであることを示している。それ故 、レジスタ指定子は、第1のソースオペランドか汎用レジスタROの内容である ことを指定する。
レジスタ指定子に続いて、04(16進)の値を有する「類リテラル指定子」が ある。この類リテラル指定子は、第2のソースオペランドとして値4を指定する 。
類リテラル指定子に続いて、加算オペレーションの行き先を指定する「複雑指定 子Jの第1バイトかある。16進数のEは、「ロングワード変位」アドレスモー ドを指示し、この場合、それに続く4つのバイトは、複雑指定子により指定され たアドレスを得るためにペースレジスタの内容の値に加算されるべき32ビツト のアドレス変位として解読される。16進数の2は、汎用レジスタR2をペース レジスタとして使用すべきであることを指示する。それ故、複雑指定子は、オペ ランドコードによって指示されたロングワード加算の和即ち結果を、汎用レジス タR2の内容に203(+6進)の値を加算することにより計算したメモリ内の アドレスに記憶すべきであることを指示する。
図5には、分岐変位ではないオペランド指定子の第4バイトをデコードするため のデコードテーブルか示されている。オペランド指定子の第1バイトの最上位2 ビツトかどちらも0である場合には、そのオペランド指定子か単一の第1バイト より成り、そしてこのバイトの下位6ビツトは、 「類リテラル」と称する6ビ ノト値を指定するものとして解読もしくはデコードされる。
オペランド指定子の第1バイトの最上位2ビツトかOでない場合には、そのバイ トか分岐変位の一部分でないと仮定すれば、そのバイトは、CPU内の16個の 汎用レジスタROないしR15の指定の1つに関連した12のレジスタアドレス モートのうちの特定の1つとしてデコードされる。このバイトの最上位4ビツト (レジスタモードフィールドを構成する)は、アドレスモードを指示するように デコードされ、そして最下位4ビツト(汎用レジスタアドレスフィールドを構成 する)は、16個の汎用レジスタのうちの特定の1つをアドレスするのに使用さ れる。
レジスタモードフィールドが値4(■6道)をもつ場合には、 rインデックス モードJが指定され、レジスタアドレスフィールドによってアドレスされた汎用 レジスタの内容の値にオペランドのバイトのサイズ(例えば、バイト、ワード、 ロングワード、りオドワード、又はオクタワードのデータ形式に対して各々11 2.4.8又は16)か乗算ぎ顛その和がその直後の複雑指定子について実行さ れるアドレス計算に項として含まれ、次のバイトは、6ないしF(16進)の値 のレジスタモードフィールドと、複HWI定子に対してペースレジスタをアドレ スするレジスタアドレスフィールドとを育していなければならない。
レジスタモードフィールドか値5(16進)をもつ場合には、指定子が「レジス タ指定子」であって、レジスタアドレスフィールドによって指示された汎用レジ スタにオペランドの値か見い出されるか、或いは指定子が命令の行き先に対する ものである場合には、その指定子は、レジスタアドレスフィールドによって指示 された汎用レジスタに結果を記憶すべきであることを指定する。
レジスタモード6.7及び8の各々については、指示されたレジスタがオペラン ドに対するメモリアドレスを含んでいる。ソースオペランドについては、このメ モリアドレスからオペランドの値が読み出され、そして行き先オペランドについ ては、このメモリアドレスに結果か書き込まれる。モード6においては、指示さ れたレジスタかオペランドのアドレスを含む。レジスタモード7においては、指 示された汎用レジスタの内容が、先ず、アドレス計算の前に減少さね、モード8 においては、指示された汎用レジスタの内容か、このレジスタを用いてアドレス を計算した後に増加される。レジスタモード9はレジスタモード8と同様である が、指示された汎用レジスタの内容は、オペランド自体ではなくてオペランドア ドレスが見い出されるメモリ内のアドレスを指定する。
モード10ないし15は、種々の形式のr変位Jモードである。変位モードにお いては、モードl0112及び14の場合に各々バイト、ワード又はロングワー ドを構成する変位値か指定の汎用レジスタの内容に加えられ、オペランドアドレ スか得られる。オペランドはモード11,13及び15においても同様に決定さ れるが、変位値と汎用レジスタの内容との和は、オペランドのアドレスを見つけ ることのできるメモリアドレスを識別する。
モード8ないし15においては、オペランド指定子の第1バイトのレジスタアド レスフィールドは、プログラムカウンタであるレジスタR15を含む汎用レジス タのいずれかを指定することができる。モード8及び9の場合に、プログラムカ ウンタかアドレスされたとすれば、プログラムカウンタ自体の値か増加され、プ ログラムの実行は命令流に置かれたオペランドデータ又はオペランドアドレスを ジャンプさせられる。モード8において、この特殊なケースは「即時」のアドレ スモードとして知られており、モード9については、「絶対Jアドレスモードと して知られている。特に、汎用レジスタ0ないし14のいずれかについてモード 8及び9がデコードされたときには、モード及び汎用レジスタを示すバイトの直 後に次の指定子又は次のオペランドコードが現れる。しかしながら、この即座の モードについては、即時データの多数のバイトか現れ、バイトの数は指定子のデ ータ形式によって決定される。
VAX (登録開襟)可変長さ命令は種々のものかあって複雑であるから、図1 のデジタルコンピュータ20は、1サイクル当たり1つのVAX可変長さ命令を 実行するという理想に近い性能を得るために非常に複雑なものである。しかしな から、半導体処理技術及びメモリアーキテクチャ−の近年の進歩により、単純な 命令のみを実行するときにそれに匹敵する性能を有した単一チップの中央処理ユ ニットを製造することか可能となった。それに匹敵する性能を得るために、いわ ゆる「簡易命令セントコンピュータJ (RrSC)か1サイクル当たり1つの 命令を実質的に越える速度で単純な命令を実行する。この性能は、全ての演算/ 論理オペレーンコンをレジスタ対レジスタで実行するという条件を課することに よりハードウェアの複雑さを最小限にして得ることかできる。更に、複雑なメモ リアクセスは許されず、即ち全てのメモリアクセスはレジスタロード/記憶オペ レーションであり、少数の比較的簡単なアドレスモードしがなく、即ち若干のオ ペランドアドレス指定方法しかない。命令は1つの長さしかなく、メモリアクセ スは、通常整列された漂準データ巾のものである。命令の実行は、マイクロコー ドとは異なり直接固定布線型のものである。
図6には、簡易命令セット(RISC)コンピュータ50がブロック因で示され ている。このRISCコンピュータ50は、中央処理ユニット51と、入力/出 カニニット52と、メインメモリ53とを含んでいる。中央処理ユニット51は 、メモリアクセスユニット54と、レジスタファイル55と、多数のファンクシ ョンユニット、即ち命令ユニット56、アドレスユニット57、整数・論理実行 ユニット58及びフロティングポイント実行ユニット59とを含んでいる。全て の演算/論理オペレーションはレジスタ対レジスタで行われるので、実行ユニッ ト58.59はメモリユニット54を直接アクセスしない。メモリからレジスタ へのロードオペレーンコン及びレジスタからメモリへの記憶オペレーションはア ドレスユニット57によって実行される。
lサイクル当たり1つの命令を実質的に越える速度で命令を実行するために、命 令ユニット56は、リソースを使用できるときに少なくとも2つの命令を同時に フェッチしてデコードすることかでき、アドレスユニット57、整数・論理実行 ユニット58及びフローティングポイント実行ユニット59は、3つの異なる命 令を同時に実行することかできる。好ましい実施例では、例えば、1つの命令か カラムAからでそして第2の命令がカラムBからのものであるときに、2つの命 令を同時にデコードし発生することができる。
カラムA カラムB 整数オペレーション フローティングオペレージタンフローティングロード/記 憶 整数ロード/記憶フローティング分岐 整数分岐 SR 図6のRTSCコンピュータ50に関するそれ以上の詳細については、参考とし てここに取り上げる1990年6月29日出願の前記リチャード・L・サイト及 びリチャード・T・ライチク氏の「高性能プロセッサにおける分岐予想(Bra nch Prediction in High−Performance P rocessor) Jと題する米国特許出願071547.589を参照され たい。
図7には、図6のコンピュータ50によって実行されるRISC命令セットの命 令の種々の形式の好ましいフォーマットか示されている。各命令は、32ビツト の固定長さを有する。
メモリ命令70は、ビット<31 : 26>における6ビツトOPコードと、 ビット<25:21>及び<20:16>における2つの5ビツトレジスタアド レスフイールドRa及びRbと、ビット<+5:O>における16ビツトの符号 変位とを含んでいる。この命令は、レジスタファイルとメモリとの間でデータを 転送し、レジスタファイル内のレジスタに有効アドレスをロードし、そしてサブ ルーチンジャンプを行うように使用される。変位フィールド<+5:O>はバイ トオフセットであり、即ちこれは符号拡張されてレジスタRbの内容に加えら托 仮想アドレスを形成する。仮想アドレスは、特定の命令に基づいてメモリロード /記憶アドレス又は結果の値として用いられる。
分岐命令71は、ビット<31:26>における6ビツトOPコードと、ビット <25:21>における5ビツトアドレスフイールドと、ビット<20:O>に おける21ビツトの符号分岐変位とを含んでいる。この変位は、ロングワードオ フセントとして処理され、これは、左へ2ビツトシフトされ(ロングワードの境 界をアドレスするために)、64ビツトに符号拡張さね、PC33の更新された 内容に加えられて、ターゲット仮想アドレスを形成する(オーツく−フローは無 視される)。
オペレーション命令は2つの異なるフォーマット72及び73を存している。
フォーマット72は3つのレジスタオペランドを有し、そしてフォーマ・ソト7 3は2つのレジスタオペランドとリテラルとを育している。このオペレーション フす−マットは、レジスタファイル43に2つのソースオペランドと1つの行き 先オペランドとを許容する整数レジスタオペレーションを実行する命令に対して 使用される。ソースオペランドの1つは、リテラル定数である。ビ・ソト12は 、オペレーション命令が2つのソースレジスタオペレーションに対するものであ るか又は1つのノースレジスタ及びリテラルに対するものであるかを定める。ビ ット<31:26>の6ビツト○Pコードに加えて、オペレーションフォーマッ トはビット<II:5>に7ビツトのファンクソヨンフィールドを存しており、 演算及び論理オペレーションに対して広範囲の選択を行えるようになっている。
ソースレジスタRaは、いずれの場合にも、ビット<25:21>に指定されそ して行き先レジスタRcはビット<4 、 Q>に指定される。ビット12が0 の場合には、ソースレジスタRbがビット<20 : 16>に定められ、一方 、ビット12か1の場合には、8ビツト0拡張のリテラル定数か命令のビ・ソト <20 : 13>によって形成される。このリテラルは、0から255までの 範囲の正の整数として解読され、64ビツトへとゼロ拡張される。
又、図8には、フローティングポイントレジスタからフローティングポイントレ ジスタへのオペレーションを実行する命令に対して使用されるフローテイングポ イントオペレーソヨン命令フォーマット74も示されている。フローテイングポ イントオペレーション命令は、前記したようにビット<31:26>に6ビ・ノ ドの○Pコートを含むと共に、ビット<15:5>に11ビツトのファンクノヨ ンフィールドを含んでいる。3つのオペランドフィールドFa、Fb及びFcか あって、その各々は、命令によって定められた整数又はフローティングポイント のオペランドを指定し、レジスタ13のみはFa、Fb及びFcによって指定さ れるか、これらのレジスタは整数値又はフローティングポイント値のいずれを含 むこともてきる。リテラルはサポートされない。フローティングポイント変換は フローティングポイントオペレーションフォーマット74のサブセットを使用し ており、レジスタ対レジスタの変換オペレーションを実行する。Fbオペランド はソースを指定し、そしてFaオペランドはreg−31(全て0)となるはず である。
最後の命令フォーマット75は、拡張プロセッサファンクションを指定する特権 アーキテクチャ−ライブラリー(PAL又はPALcode)命令のためのもの である。この命令では、6ビツトの○Pコードが前記のようにビットく31:2 6〉に存在し、そして26ビツトのPALcodeファンクションフィールド< 25:0>がオペレーションを指定する。PALcode命令に対するソース及 び行き先オペランドは、個々の命令の定義において指定された固定のレジスタで 供給される。
図4の命令フォーマントの6ビツトOPコードフイールド<31 : 26>は 、2′即ち64個の異なった命令しかコード化することができない。従って、命 令セットは64に限定される。しかしながら、命令フォーマット72.73及び 74の「ファンクション」フィールドは、ビット<31:26>に同じOPコー ドを有する種々の命令を許す。
本発明の好ましい実施例は、より詳細には、図1のCl5Cコンピユータ20の プログラムを図6のRTSCコンピュータ50のプログラムに変換するためのト ランスレータ−に関する。このトランスレータ−によって向けられねばならない 主な問題は、オリジナルのcrscプログラムにおける全ての命令を常に変換で きるものではないことである。常に変換が可能でない1つの理由は、crscア ーキテクチャ−ではcrscプログラムを「読み取り一書き込み」メモリエリア から実行することかでき、従って、プログラムは実行中にそれ自身を変更するこ とがあるからである。しかし、RrSCアーキテクチャ−では、 「リードオン リコメモリエリアからプログラムを実行することが要求される。「読み取り一書 き込みJメモリエリアから実行されるべきCl5Cプログラム命令は、crsc 命令に変換てきないか、実行時間中にRrSCコンピュータで解読することはで きる。しかし、実行速度にかなり影響か出る。好都合なことに、Cl5Cプログ ラムは実行中にそれ自身を変更することはほとんどない。例えば、 [読み取り 一書き込みjメモリエリアにプログラム命令を育する多くのcrscプログラム は実際にはそれ自身を変更しない。
全てのCl5Cプログラムを変換できない更に一般的な理由は、変換すべき全て の(、ISC命令を見つけることか困難だからである。crscプログラムを走 らせるためには、プログラムのスタートアドレスを知るたけでよい。スタートア ドレスで開始される命令は分かるか、crscプログラムは、通常、計算された 行き先アドレスを存する「ジャンプ」や「コール」命令のような少なくとも1つ の実行転送命令を含んでいる。この行き先アドレスは実行時間に容易に計算され るか、これは、例えば、変換時間においては完全に中間的なものである。という のは、行き先アドレスは、プログラム入力データに基づいて計算されるからであ る。しかしながら、一般的な場合に、本発明は、変換時間に計算行き先アドレス のほとんとをめる技術を提供する。
図8には、Cl5C−RISC)ランスレータ−80と、それに関連した入力・ 出力像及びデータ構造体かブロック図で示されている。トランスレータ−80は 、Cl5C命令を有するオリジナルプログラム81を受け取り、それに対応して 変換されてRISC命令を存するプログラム82を発生する。変換されたプログ ラム82に関連して、トランスレータ−80は、アドレス変換清報96も発生し 、これはオリジナルプログラムにおけるCl5C命令のアドレスを変換されたプ ログラムにおけるRTSC命令のアドレスに相関させる。
RISCコードジェネレータ83に加えて、トランスレータ−80はプログラム アナライザー84を備えており、これは、オリジナルプログラム81を分析して 命令をデータから分離すると共に、プログラムの流れをトレースしてRTSCコ ートを最適なものにし、そしてRISC命令アーキテクチャ−によって再現でき ない特性を指定するc rsc命令を検出する。
プログラムアナライザー84は、補足人力85を参照して、オリジナルプログラ ムにおける命令の位置を探索する。補足人力85は、例えば、多数の像コンポー ネントをリンクすることによりオリジナルプログラム81か形成されたときに発 生されたリンカ−マツプファイル86を含むことかできる。この場合、リンカ− マツプは、オリジナルプログラムの命令に対する入カポインドを識別し、その入 カポインドの名称を与える。これらの名称は、トランスレータ−のメツセージ及 び他の出力を読み易くするのに有用である。
補足人力85は、プログラムカウンタ(PC)サンプリングヒストグラムファイ ル87を含み、これは、オリジナルプログラムの頻繁に実行される命令を識別す るために発生されたものである。PCサンプリングヒストグラムファイルを使用 できる場合には、プログラムアナライザーはこれを使用して、0より大きいサン プリング周波数をもつプログラムカウンタアドレスごとに、即ちPCサンプリン グヒストグラムファイルが発生されたときに実行されていた命令に対応するプロ グラムカウンタアドレスごとに、Cl5C命令を変換する試みを確実に行うよう にする。
又、補足人力85は実行ログファイル88も含み、これは、以前の変換動作で変 換されなかったが以前に変換されたプログラムの実行中にインタープリタ−によ って解読された命令のオリジナルプログラムにおけるアドレスを含んでいる。
図9及び11について以下で説明するように、この実行ログファイルは、例えば 以前に変換されなかったコードの解読中に発生さ札これは、変換されなかったコ ードへ実行を転送する命令のオリジナルプログラムにおけるオリジナルアドレス と、変換されなかったコードが置かれたオリジナルプログラムにおける行き先ア ドレスとを対で含んでいる。トランスレータ−は、オリジナルアドレス及び行き 先アドレスの対を識別する情報を使用して、オリジナルプログラムの以前に変換 されなかった命令を変換する。オリジナルアドレスは、オリジナルプログラムの 手前の変換中に発見されなかった実行経路を識別するのに用いられる。以下で述 べるように、これらの実行経路の識別により、プログラムアナライアザ−84は 、以前に変換されたプログラムの実行中又はオリジナルプログラムの変換されな かった部分の解読中に取り上げられなかった付加的な実行経路を発見することか できる。実行から再変換へこのように情報をフィードバックすることは、変換さ れたプログラムの各実行の後に行われて、オリジナルプログラムにおける実質上 全ての命令か最終的に探索されて変換されるのか好ましい。
又、プログラムアナライザー84はオーディット出力89も発生し、これは、エ ラー、警報及び情報メツセージ90と、見い出された命令の領域及び入カポイン ドの位置を識別するオリジナルプログラム81のメモリマツプを示す概要ベージ 91と、オリジナルプログラム81の変換された部分のフローチャートを定める 流れ図言語ファイル92と、オリジナルプログラムの出力像情報ファイル93と を含んでいる。
像情報ファイルは、像における予め定められた入カポインドのインターフェイス 特性に関する情報を含んでいる。トランスレータ−80は、オリジナルプログラ ム81か最初に変換されるときにそのオリジナルプログラムのための出力像情報 ファイル89を発生する。再変換中に、オリジナルプログラムの情報入力ファイ ルは入力ファイル94として使用することができ、これは、再変換中に、プログ ラムアナライザー84によって発見された付加的な命令及び実行転送経路に基づ いて更新される。
像情報ファイルは、池の像に対するレファレンスを分析し適当なリンケージを発 生するようにプログラムアナライザー84によって使用される。例えば、オリジ ナルプログラム81がライブラリールーチンを呼び出すときには、補足人力85 かこれらの共存ライブラリールーチンに対する像情報ファイル95を含んでいな ければならない。好ましくは、像情報ファイルは、プログラマ−か情報を追加し たり修正したりするように容易に編集できるASCIIファイルである。図9に は、RTSCコンピュータ50で変換されたプログラム82を実行するときに使 用される像及びデータファイルかブロック図で示されている。変換されたプログ ラム82及びそれに関連したアドレス変換情報96に加えて、RISCコンピュ ータ50は、オリジナルプログラム81のコピーと、Cl5C命令を解読するた めにRISCコードで書かれたインタープリタ−101と、オリジナル及び変換 されたプログラムのためのデータ入力102とを入力として使用する。インター プリタ−101は、オリジナルプログラム81における変換されない命令を解読 するために呼び出さ托オリジナルプログラム8】はインタープリタ−のデータ入 力として働く。アドレス変換情報96は、インタープリタ−101のデータ入力 として働き、インタープリタ−は、実行を適当な時間に変換されたプログラムへ 戻すときにこの情報を使用する。RISCコンピュータからのデータ出力はオリ ジナル及び変換されたプログラムからの出力データ+03と、インタープリタ− からの出力データである実行ログファイル88とを含む。
図10は、Cl5C命令か実行時間までに変換されないときにインタープリタ− へ呼び出しを発生するRISCコードジェネレータ83の動作ステップを示すフ ローチャートである。上記したように、「読み取り一書き込み」メモリエリアの コートは通常は変換されてはならない。というのは、プログラムか実行中にコー ドを変更することがあるからである。しかしながら、ユーザは、プログラムか実 行中にコードを変更することはないと信じており、従って、ユーザはコートの解 読に関連した著しい性能影響を回避するために読み取り一書き込みメモリ内のコ ードを変換しようとする。それ故、ユーザはソフトウェアオーバーライドスイッ チをセットし、ステップ111において、RISCコードジェネレータ83はこ のオーバーライドスイッチをテストして「読み取り一書き込みJメモリエリア内 のcrsc命令を変換すべきかどうかを判断する。オーバーライドスイッチかセ ットされていない場合には、ステップ112において、RISCコードジェネレ ータ83はそのCl5C命令か読み取り一書き込みメモリエリアにあるかどうか をチェックする。そのような場合には、コードジェネレータがステップ113に おいてメツセージを発生し、Cl5C命令を解読しなければならないことをユー ザに警告し、それ故、性能上の影響が生じる。ステップ114においては、コー ドジェネレータかRISCコードを発生してインタープリタ−を呼び出し、Cl 5C命令アドレスをパラメータとして通す。最後に、ステップ115では、コー ドジェネレータか「読み取りのみJのメモリエリアで見い出された次のCl5C 命令へ進み、インタープリタ−への呼び出し中に解読されるであろうCl5C命 令が変換されないようにする。
RISCコードジェネレータは、オリジナルプログラム内に見つけることのでき ないCl5C命令のコードを発生することができない。しかしながら、RISC コートジェネレータは、計算行き先アドレスをめなかったオリジナルプログラム の実行転送命令を認識することかでき、従って、実行時間に変換されていないc ysc命令を解読するようにインタープリタ−を呼び出すRISCフートを発生 する。ステップ116では、RTSCコードジェネレータは、crsc命令か非 分析の計算行き先アドレスを育するかどうかをチェックする。もしそうであれば 、ステップ!17において、ユーザは、変換されていないcrsc命令を解読す るためにインタープリタ−を呼び出さねばならないことか警告され、ステップ1 18において、コードジェネレータは、行き先アドレスを計算してインタープリ タ−を呼び出すためにRTSCコードを発生し、CTSC実行転送命令のアドレ スと計算行き先アドレスとをパラメータとして通す。
ステップ+19では、コードジェネレータは、非分析の計算行き先アドレスをも たないCl5C命令のためのRrSCコードを発生する。これは、Cl5C命令 を、これと同じ効果を有する1つ以上のRISC命令に変換することにより行わ れる。このコード変換は、プログラム内の実行転送及びレジスタの使用に関する ブ0グラムアナライザー(図8の84)からの情報を使用することによって効率 的に行われる。例えば、RISCコンピュータ(図6の50)は、指定の汎用レ ジスタにおける復帰アドレスを参照するサブルーチン呼び出し及び復帰命令を存 しており、RISCコンピュータは非常に多数の汎用レジスタを備えている。
それ故、crscサブルーチン呼び出し及び復帰命令を、レジスタを使用できる 場合にスタックオペレーションをエミューレートするRISC命令に変換するこ とは効率的でない。
又、プログラムカウンタを直接ソースオペランドとして参照するようなCl5C 命令の変則的なケースもある。RTSCコンピュータの好ましい構造においては 、プログラムカウンタをソースオペランドとして直接的に参照することはできな いか、サブルーチン呼び出し命令によって与えられた復帰アドレスを減少するこ とによりプログラムカウンタの値を計算することかできる。しかしながら、この 場合のプログラムカウンタの値は、RISCコードを参照したRISCコンピュ ータのプログラムカウンタであり、Cl5Cコードを参照したCl5Cコンピユ ータのプログラムカウンタではない。crscプログラムカウンタに対応する一 定に変換する値を汎用レジスタに維持するには著しい量のオーバーヘッドか必要 とされる。それ故、プログラムアナライザー(図8の84)は、プログラム内の 相対ジャンプに間して実行転送に対するプログラムカウンタのレファレンスを分 析しようとするか、他の目的でプログラムカウンタの値を使用するコートを変換 しようとはしない。
図11には、インタープリタ−と、変換されたプログラムの実行との対話とかフ ローチャートで示されている。ステップ!31において、変換されたプログラム 82の命令(又は変換されたプログラムによって呼び出されたオペレーティング システムルーチン)は、インタープリタ−が呼び出されるまで実行される。図示 されたように、インタープリタ−は、計算行き先アドレスにおけるCl5C命令 を解読するために呼び出されたときには第1の入カポインド132に入り、そし てメモリの「読み取り一書き込み」エリアにおけるcrsc命令を解読するため に呼び出されたときには第2の入カポインド133に入る。
計算行き先アドレスは、必ずしもオリジナルプログラムの非変換部分にない。
それ故、ステップ134では、計算アドレスがチェックされ、インタープリタ− において実行を継続すべきであるか或いは又は変換されたプログラムの入カポイ ンド又はその他の場所に実行を戻すべきかを判断する。
計算行き先アドレスがオリジナルプログラム内にあるが、変換されたプログラム の入カポインドに対応しないときには、その行き先アドレスを存する実行転送命 令のアドレスと共に、その行き先アドレスを実行ログファイル(図8の88)に 記録することが所望される。これは、ステップ135において行われる。再変換 の間に、プログラムアナライザー 変換されたcrsc命令に対応しない場合には実行ログファイルの情報を読み取 って、変換されないコードを探索し、或いは計算行き先アドレスが変換されたC ■SC命令に対応するか変換されたプログラム内の入カポインドには対応しない 場合には、変換されたプログラム内の新たな実行転送経路を識別する。
ステップ136においては、インタープリタ−がオリジナルプログラムのアドレ スにおいてcrsc命令を解読する。RISCコンピュータの汎用レジスタはC l5Cコンピユータの対応するレジスタの内容を再現するように割り当てられる 。この1組の割り当てられたレジスタは、c rscコンピュータの状態のモデ ルを定める。インタープリタ−プログラムは、crsc命令のOPコードを読み 取り、テーブルのルックアップを行って、デコードすべき指定子の数と、そのO Pコードに対するプログラムルーチンのアドレスとを決定する。次いで、インタ ープリタ−は、各指定子をデコートする。リテラル及びレジスタソースオペラン ドは、ソースオペランドレジスタとして割り当てられた汎用レジスタへ転送され る。複雑な指定子かデコードさ札そして指定されたオペランドがメモリからフェ ッチされて、ソースオペランドレジスタとして割り当てられた汎用レジスタへ転 送される。次いで、OPコードに対するプログラムルーチンか実行される。最後 に、行き先指定子かデコードされ、その結果が指定の行き先へ転送される。
ステップ!37では、オリジナルプログラムにおける次のcrsc命令のアドレ スか計算される。この計算は、ステップ136て解読された命令に基づく。次の crsc命令は、手前の命令か実行を転送しない限り、手前のc rsc命令に 続くものであり、この場合に、次のcrsc命令のアドレスは手前の命令の行き 先アドレスである。
ステップ138では、計算されたアドレスがチェックされ、インタープリタ−に おいて実行を続けるべきか或いは変換されたプログラムにおける入カポインド又 は他の場所に実行を戻すべきかを判断する。インタープリタ−における実行はス テップ136で続けられる。更に、ステップ136は入カポインド133からの 最初のステップである。
図]2には、図11のステップ134及び138に使用されるアドレスチェック ルーチンがフローチャートで示されている。ステップ141では、計算されたア ドレスかオリジナルプログラムの開始及び終了アドレスと比較され、それかオリ ジナルプログラムにあるかどうかの判断かなされる。行き先アドレスかオリジナ ルプログラムにない場合には、計算された行き先アドレスは、例えば、Cl5C コンピユータ(図1の20)のオペレーティングシステムに対するオペレーティ ングシステムルーチンの入カポインドとなる。RISCコンピュータ(図6の5 0)のオペレーティングシステムは、対応するルーチンを有していてもよいし育 していなくてもよい。それ故、ステップ142では、計算された行き先アドレス は、例えば、RISCオペレーティングシステムに対応入カポインドを有するc rsc行き先アドレスのテーブルをルックア・ノブすることにより確認される。
二の計算行き先アドレスか無効である場合には、エラーか報告され、実行かステ ップ+43で終わりとなる。さもなくば、ステップ144において、計算行き先 アドレスに対応するRISCオペレーティングシステムルーチンの入カポインド に転送される。
ステップ141で計算行き先アドレスがオリジナルプログラムにあると判断され たときには、その計算行き先アドレスはオリジナルプログラムにおける変換され たcrsc命令に対応すると考えられる。しかし、この場合でさえ、crsc命 令を解読することが所望される。というのは、crscプログラムはある予め定 められた入カポインドのみを育していて、トランスレータ−が個々の命令ではな くてcrsc命令のブロックを変換して最適なRISCコードを発生できると仮 定することが変換にとって望ましいからである。いずれにせよ、インタープリタ −は、そこから変換されたプログラムへ実行を戻し続ける場合には、crsc命 令アドレスと、変換されたプログラムにおける対応する入カポインドとの対応を 知らねばならない。この対応は、変換されたプログラムに関連したアドレス変換 情報(図8の96)によって与えられる。このアドレス変換情報は、crscア ドレスの変換テーブルと、変換されたプログラムにおける対応する入カポインド とによって与えられるのか好ましい。それ故、ステップ!45において、インタ ープリタ−は、例えば、変換テーブルをルックアップすることにより、計算行き 先アドレスか変換されたプログラムの入カポインドに対応するかどうかをチェッ クする。計算行き先アドレスが変換されたプログラムの入カポインドに対応する ときには、インタープリタ−は、ステップ146においてアドレス変換情報を使 用して、計算されたcrscアドレスをRTSC入カポイカポインドアドレスす る。これは、例えば、変換テーブルから対応するRISC入カポイカポインドア ドレス取ることによって行われる。ステップ+47では、実行か変換されたプロ グラムの入カポインドへ復帰する。さもなくば、ステップ+48において、実行 かインタープリタ−へ復帰する。
図13には、トランスレータ−80によって実行されるステップのフローチャー トか示されている。第」ステップ161では、オリジナルプログラム及び補足入 力ファイルかメモリに読み込まれる。次いで、ステップ162では、トランスレ ータ−かオリジナルプログラムの入カポインドをサーチする。これは、図14に 示すオリジナルプログラム構成の特定例を参照して以下に詳細に述へる。
ステップ163では、トランスレータ−は、入カポインドからの実行の流れをた とり、オリジナルプログラムにおける命令を探索すると共に、プログラムの流れ 図を発生する。この流れ図は、命令の「基本ブロック」と、これら基本ブロック を相互に接続する実行経路とを識別する。各基本ブロックは、その基本ブロック の開始部に単一の既知の入カポインドを育する一連の連続する命令である。実行 は、基本ブロックの開始部のみへ転送され、そして基本ブロックの終了部のみか ら転送される。流れ図の発生については、図18及び19を参照して以下に詳細 に述へる。
ステップ164では、トランスレータ−は、オリジナルプログラムをブラウンプ ルコードについてスキャンする。このスキャンの結果は、オリジナルプログラム におけるブラウンプル命令の数を定量化し、トランスレータ−によって探索され た命令の数と比較するのに有用である。この比較の結果は、例えば、「見つけた コードの割合」を推定するもので、これは、既知のコードのバイトの100倍を 、既知のコードのバイトとブラウンプルコードのバイトとの和で除算したものと して計算される。この推定値は、システムの分析者かオリジナルプログラムに対 する移行戦略を選択したり、又はトランスレータ−の性能を監視又は増大するの に使用できる。トランスレータ−か命令の大部分を変換できない場合には、シス テム分析者は、変換されたプログラムに基づいて多数のテストケースを実行しそ して実行から再変換への情報のフィードバックを用いて、変換されていないコー ドの指示された推定値を減少した後に、変換されたプログラムを一般使用に解放 する。結局、システム分析者は、オリジナルプログラマ−によってトキュメンテ ーンコンをサーチするか、又はブラウンプル命令を含むものとして指示されたア ドレス位置においてコートを検査し、その推定値を確認すると共に、変換された プログラムを一般使用として解放するか或いはトランスレータ−に指示を発して 変換されていない命令を含むと考えられるブラウンプルコードを変換させるかの 判断を行うように試みる。ブラウンプルコードをスキャンする好ましい方法は図 29を参照して以下に説明する。
ステップ165ては、流れ図を分析し、典型的なプログラミングの習慣及び標準 的な規定からのずれによって指示されるエラーか見つけられる。典型的なプログ ラムにおいては、例えば、データ項目をスタックにブツシュし、いかに多数の他 のデータ項目かブツシュされるかに関わりなく後でポツプオフできるようにする と共に、介在命令によってスタックからポツプオフできるようにする。ブツシュ の回数か介在命令におけるポツプの回数を打ち消さない場合には、介在するプッ シュ及びポツプ命令のプログラミングか不適当であることによりエラーが生じる 。介在命令か介在ノードで分岐したり再接合したりする個々の経路を含みそして それらの経路の1つにおいて不適切なプログラミングが生じた場合には、その不 適切なプログラミングにより、2つの経路が中間ノードにおいて接合するときに 計算されたスタック深さがその2つの経路で異なることになる。これは、ノート かRSBサブルーチン復帰命令である場合に特にエラーを生じ易い。それ故、流 れ図の助けで行われるエラーチェックの1つは、オリジナルプログラムのメイン 入カポインドからの全ての経路においてスタックの深さを計算し、そしてこれら 経路か再接合するときにその計算されたスタック深さか同じであるかどうかをチ ェックすることである。もしそうでなければ、トランスレータ−は、 「全ての 入力経路上でVA=%Xにおいてスタックの深さか一致しない」ことを示す警報 メツセージを発生する。ここで、VAはオリジナルプログラムにおけるノードの 仮想アドレスである。
又、流れ図は、Cl5C命令アーキテクチャ−の典型的なプログラミング規定に 合致することについても分析される。例えば、VAX (登録開襟)アーキテク チャ−の場合に、 「復帰マスクJは、復帰中にどのレジスタにロードするかを 指示するために手順呼び出しくCALLS及びCALLG命令)に関連して使用 される。復帰マスクが復帰命令に対し経路に基づいて異なる場合には、おそらく プログラミングエラーか生じている。トランスレータ−は、「復帰マスクが全て の入力経路VA=%X上で合致しない」という警報を発する。更に、異なった復 帰マスクで実行されてもよいRET命令が見つかった場合には、その命令をイン タープリタ−への呼び出しとして変換し、インタープリタ−は復帰マスクを検査 して、復帰中にロードすべき特定のレジスタを決定しなければならない。
手順呼び出しに関連したもう1つの呼び出し規定は、レジスタ及び条件コートピ ットを、それらか手順に使用される前に手順によってセットすることであり、呼 び出しルーチンによってセットされるレジスタの値又は条件コードを用いるので はない。この呼び出し規定からのずれか見つかった場合に、トランスレータ−は 、 「呼び出し入力VA=%Xにおける初期化されないあり得べき変数・%SJ という警報を発する。このメツセージの[%SJは、見つかったあり得べき非初 期化変数のリストを意味する。VAX命令アーキテクチャ−のコード規定からの 他の相違には、ロングワード境界上でのスタックの整列ずれ(RISCコードに 対し著しい性能上の影響をもたらす)と、RET命令を用いてJSBから復帰す ることと、RSB命令を用いてCALLS又はCALLGから復帰することとか 含むまれる。トランスレータ−は、これらの相違に対する流れ図を分析して、特 定の相違及びそれに対応するアドレスを識別する警報メツセージを発生する。
流れ図を通しての必要なサーチの量を減少するために、あり得るエラーに対する 流れ図の分析では、各基本ブロックに使用されるリソースの伝播も実行する。
各基本ブロックは、スタック、汎用レジスタ及び条件コードといった種々のリソ ースを使用している。サブルーチンの特性を推定するため、これらリソースの使 用かそれらの呼び出しルーチンへ伝播して戻される。この情報を用いて、CAL LS又はCALLG命令により呼び出されたサブルーチンに使用されたレジスタ をセントするためのサーチか終了されると共に、この情報を後でRJSCマシン コード発生中に(ステップ168)使用して、決して使用されることのない条件 コード又はレジスタ値の不必要な発生か回避される。更に、基本ブロックのリソ ースを比較することにより一貫性のチェックを実行することができる。例えば、 基本ブロックか2つ以上の基本ブロックを手前に有していてこれら先行基本ブロ ックの復帰マスクか異なるときには「復帰マスク」警報か発生さ托そして基本ブ ロックが2つ以上の基本ブロックを手前に育していてそのスタック深さ変更が異 なる場合には「スタック深さj警報が発せられる。全ての基本ブロックに対する 最終的なスキャンを用いて、ロングワード境界上でのスタックの整列し損ない( 即ち、4バイトで分割できない基本ブロックのスタック変更)と、RET命令を 用いてJSBから復帰することと、R5B命令を用いてCALLS又はCALL Gから復帰することとか明らかにされる。
ステップ166では、各基本ブロックに使用されたリソースについての情報を使 用して、オリジナルプログラムに対する像情報ファイルが形成される。この像情 報ファイルは、例えば、記述される像の名称及びそのバージョンを識別する像ヘ ッダと、それに続く一連の像特性記録(ライン当たりに1つ)であってその各々 かその像におけるオフセットに対する特定の特性を付随しているような記録とて 構成される。各特性記録は、像オフセット及びそれに続く特性芯と、それに続く オプションであるアトリビュート値についてのコンマで境界を定めたリストとで 構成される。これらのアトリビュート値は、特定の特性にとって独特のものであ る。像オフセットは、その特性を適用する像におけるオフセットを表すものであ る。これは、記号(他の像情報ファイル記録によって定めることのできる)±の 16進オフセツト値で構成される。記号名又はオフセット値のいずれを省略して もよい(両方ではない)。
これらの特性及びそれらの定められたアトリビュートは、好ましくは、次のも指 定する 入カポインドに対する システムサポート jmTlentry 記号名 JMP入カポインド及び名称を定める callback パラメータ番号 手順パラメータへのCALLを定める callentry 記号名 CA[、[、入カポインド及び名称を定める caselimit II数 ケース最大数を定めるクポインタの変更を定 める 1[Ilage 識別 像情報ファイルが述べる像を識別する JmpbaCk t<ラメータ番号 手順パラメータへのJMPを定める jsbentrY 記号名 JSBS六入インド及び名称を定める no 5tandard return 非標準復帰を定める5ets レジス タのリスト ルーチンによりレジスタセットを定める symbol 記号名 記号名をオフセットに取り付ける uses レジスタのリスト ルーチンにより使用するレジスタを指定する 像情報ファイルのシンタックスの情報表示は、以下に示す通りである。
<Wl([TESP、ACε〉:=:タブ及びスペースの非ゼロシーケンス<C OMMA> :==[<WHITESPACE>] ’、’ [<WH[TES PACE>]<NL> : ==ニューライン <C0IIDent l1ne> :=:′;’ いずれかのテキスト<NL> <coMMA> <VERSION> <NL> <IMAGE PROPERT[ES> :== <I!1tAGE 0FFS ET> <PROPERTY>[<ATTRIBUTε〉。
コメント記録(’:’ で始まるライン)はファイル内のとこで生じてもよく、 トランスレータ−によって無視される。
像情報ファイルの一例を、’ VAXCRTL“と称する像について以下に示す 。
:coanents image VAXCRTL、 ”VO5−001”+000000 jsbe ntry ″C$MAIN’十ooooooは−AP FP SP l?sEl ”を使用+oooooo バーRORI R2R3R4R5R6R7R8R9R IOAP SP N Z V C”をセットこの像情報ファイルは、“VAXC RTL″について以下の情報をトランスレータ−に与える。
VAXCRTL+0 (即ち像の開始からゼロのオフセットにある像の第4メモ リ位、flりは、”C$MA[N”という名称のJSB入力としてマークされる 。この情報から、トランスレータ−はJSBか適切であることを確認し、VAX CRTL:C$MArNという名称を流れ図に挿入することができる。又、VA XCRTL+oは、VAX (登録商標)レジスタAP、FP及びSPと、VA X命令R3Bとを用いてマークされる。この最後の情報部分から、トランスレー タ−は、呼び出し像における呼び出し命令の直後に復帰ポイントにおいてVAX 命令の説明を正当に続けることができる。
又、VAXCRTL+Ol;!、VAX (登録商標)レジ7.9RO,、、R IOlAP及びSPと、VへX条件コードビットNZVCとをセットするものと してもマークされる。この情報から、トランスレータ−は、例えば、呼び出し命 令後のROのテストかC$1MINによりROに残されている値を参照するので あって、呼び出し像自体によってROに入れられた手前の値を参照するのではな いことを推定することかできる。
次の例は、多数の入カポインドを存するライブラリーファイルLIBRTLに対 する像情報ファイルを示している。
;col&nts rrmge LIBR丁り、VO5−000+000000 jsbentry  LIB$AB ASCEBC+oooooo jsbentry LIB$A B EBCASC+000200 jsbentry LrB$AB [IPC ASE+0O0400callentry L[B$5IGNAL十〇004F 8 callentry LIB$5TOP+000508 callentr y L[B$5KPC図13のステップ167では、変換されたプログラムに対 して流れ図の言語ファイルか形成される。この流れ図の言語ファイルは、変換さ れたプログラムの流れ図を描くためにレーザープリンターへコマンドを発生する 流れ図プログラムの入力として使用することができる。又、流れ図のプログラム は、例えば、プリントされる流れ図のサイズを制御するオプションのスケールパ ラメータと、接続される他のブロックと共にページにプリントされるべき特定コ ードブロックのアドレスを指定するオプションの「コードブロック」パラメータ も受け取ることかできる。流れ図は、異なった種類又は形状のブロックと、これ らブロックを相互接続する弧と、各ブロックにアラセンブラー表示でプリントさ れた命令とで構成される。トランスレータ−によって見い出された命令の各基本 ブロックは、フローチャートに対応するブロックを有している。
流れ図言語ファイルは、流れ図におけるブロックの種類の定義と、ブロック間の 相互接続と、各ブロックへ進む命令(ASCIIのアラセンブラー表示で)とを 含んでいる。流れ図言語ファイルは、トランスレータ−によって見い出された命 令の各基本ブロックを定めるデータブロック又は記録を含む内部2進データ構造 体から形成される。各データブロック又は記録は、命令の基本ブロックのスター トアドレス(オリジナルプログラムにおける)と、基本ブロックの長さくバイト )と、ブロックの種類と、ブロックか特定のサーチに含まれているかどうかを指 示するのに用いる「エポック番号」アトリビュートと、 「後続」データブロッ クのアドレスのリストと、 「先行」データブロックのアドレスのリストとを含 んでいる。データブロックはダイナミックに形成することかでき、そしてその後 続及び先行ブロックにデータブロックのレファレンスを挿入したり削除したりす ることによりデータ構造体に容易に挿入したり除去したりすることかでき、デー タ構造体は、その後続又は先行ブロックに対する次々のレファレンスにより前方 又は後方に容易にサーチ又はスキャンされる。
流れ図に使用されるブロックには5種票かあり、各種類のブロックは別々の形状 を存している。ブロックの種類は、CALLx入力と、JSB入力と、 「ノー マル」ブロックと、CALLxプレースホルダーと、JSBプレースホルダーと を備えている。rCALLXJは、VAX命令アーキテクチャ−においてCAL LS又はCALLG命令によって行われる手順呼び出しを参照する。
プリントされた流れ図において、CALLX入カブロツカブロックであり、ブロ ックの名称と、もし分かれば手順の名称と、呼び出しマスク(16進)とを含ん でいる。ブロックの名称は、16通でのブロックの第1バイトのアドレス(オリ ジナルプログラムにおける)と、それに続< r CALLJとで構成される。
CALLx入カブロツカブロックLLS又はCALLG命令を介して到達する。
VAX命令アーキテクチャ−においては、オリジナルプログラムのメイン入カポ インドかCALLx入カブロツカブロックこのメイン入カポインドはプログラム を走らせるためにオペレーティングシステムによって呼び出される。
プリントされた流れ図において、JSB入カツカブロック円であり、ブロックの 名称と、もし分かればサブルーチンの名称とを含んでいる。ブロックの名称は1 6進でのブロックの第1バイトのアドレス(オリジナルプログラムにおける)と 、それに続<rJSBJとで構成される。JSBS六入インドにはJSB。
BSBB又はBSBW命令を介して到達する。JSB入力は典型的にマクロコー ドに使用されるものである。
プリントされた流れ図において、ノーマルブロックは長方形であり、ブロックの 名称と、ブロック内の全ての命令とを含んでいる。ブロックの名称は16進での ブロックの第1バイトのアドレス(オリジナルプログラムにおける)である。
ノーマルブロックには、ノーマルな実行の流れを介して到達するか、又は分岐、 ケース、ジャンプ又は復帰命令からの実行転送を介して′BI達する。
プリントされた流れ図において、CALLxプレースホルダーブロックは、破線 の六角形であり、ブロックの名称と、もし分かれば呼び出された手順の名称とを 含んでいる。ブロックの名称は、16進での呼び出された手順の第1バイトのア ドレス(オリジナルプログラムにおける)(もし分かれば変換時間における、さ もなくばゼロ)と、これに続く”−“と、呼び出された手順に対するプレースホ ルダーの“呼び出し番号2とで構成される。CALLxプレースボルダ−ブロッ クは、手順に入ったり出たりする流れと、その手順の各呼び出しに対して記録さ れた副次的な作用とを表す。5つの異なる場所から手順か呼び出された場合には 、これらの呼び出しに対し5つの異なる呼び出し番号をもつ5つの異なるプレー スホルダーブロックがある(その手順に対するCALLx人カブロツカブロック )。
プリントされた流れ図において、JSBブレースホルダーブロックは、破線の楕 円であり、ブロックの名称と、もし分かればサブルーチンの名称とを含む。ブロ ックの名称は、16進でのサブルーチンの第1バイトのアドレス(オリジナルプ ログラムにおける)(もし分かれば変換時間における、さもなくばゼロ)と、そ れに続く−″と、呼び出されたサブルーチンに対するプレースボルダ−の独特の ″呼び出し番号”とて構成される。JSBプレースボルダ−ブロックは、サブル ーチンに入ったり出たりする流れと、そのサブルーチンの各呼び出しに対して記 録された副次的な作用とを表す。
流れ図言語の好ましい形態においては、3つの基本的なオペレータ、即ちグラフ (G)と、ブロック(B)と、弧(A)とかある。流れ図言語ファイルの各ライ ンは、次のすベレータのうちの1っでスタートする。即ち、ラインにコメントか 含まれることを指示するセミコロンと、ブロックオペレータを存する手前のライ ンにより定められたブロックにラインのアルファニューメリックデータか含まれ ることを指示するブランクと、H及びこれに続くブロック名であって、その名前 の付いたブロックか強調されるべきであることを示すものと、C及びこれに続く 2つのブロックの名称であって、その2つのブロックを巾の拾い破線に接続して 例えばエラーを含む経路を強調すべきであることを指示するものとである。
オペレータGて始まるラインは新たなグラフの境界を定め、そのグラフのヘッダ としてプリントされるアルファニューメリックテキストを含んでいる。
又、オペレータBで始まるラインは、フードのブロックに対する名称(16進)  アドレスのような)を含む(D=CALLxプレースホルダー、E=JSBプ レースホルダー)。オペレータBの直後にオプションの倍率数字が続く。
オペレータAで始まるラインは、第1の名称のブロックから第2の名称のブロッ クへ向けられた弧を指定し、2つのブロック名称の後に、レターコードがその弧 のスタイル(例えば、A=実線で描かれた通常の分岐、B=破線で描かれた真の 分岐)を指示する。
図15の流れ図をプリントするための流れ図言語ファイルを一例として以下に示 す。
ask:0000 A 2EOOCALL 2EO2A 82EO2A E02 SUB2 #08.5P VAXCRTL:ClJJAIN AO12972C12EOBA 82EOB A 2ε0B CALLS #OO,0OO00006(PC)A 2EOB 2E18 +2 9花41ArocO A 2EI8 1297E4 12EI2 A82EI2 A E12 CV蘭、 10001. RO ら命令の基本ブロックを受け取り、それに対応するRISCマシンコードを発生 する。Cl5C命令は一度に1つづつRISC命令に変換され、このRISC命 令は同じ結果及び条件コードを再現するものである。各Cl5C命令は、4つの 命令グループを順次に含むRISC命令の対応するシーケンスに変換される。第 1のグループは、ソースオペランドをフェッチして一時的な記憶位置に入れる命 令を存している。第2グループの命令は、ソースオペランドに基づいて動作して 一時的な記憶位置に結果を入れる。第3グループの命令は、メモリ又はレジスタ の内容を更新し、考えられる例外を受ける。最後に、第4グループの命令は、メ モリ又はレジスタの内容を更新するもので、考えられる例外はない。crsc命 令をRISC命令に変換することに関連したこれ以上の詳細については、 「変 換されたプログラムコードに対する命令グラニュラリティを保持する改良された システム及び方法(Irnproved 5ystetn and Metho d of Preserving In5truction fran ularity for Translated Program Code) Jと題するスコツト・ロビンソ〉及びリチヤード・サイト氏の前期関連特許出願 を参照されたい。
図13のステップ169ては、トランスレータ−は、RISCマシンコートをR ISCコンピュータのオペレーティングシステムか認識するプログラム像フォー マントに入れることにより変換されたプログラムを形成する。この変換されたプ ログラム像に関連して、トランスレータ−は、オリジナルプログラムにおけるc rsc命令の各基本ブロックのアドレスと、変換されたプログラムにおけるRI SC命令の対応基本ブロックのアドレスとの間のマツピングも発生する。
図13のステップ170において、トランスレータ−は、変換されたコードがプ ログラム像に配置された場所をグラフで示す概要ページを発生する。この概要ペ ージは図14を参照して以下で詳細に述べる。
最後に、図]3のステップ171において、トランスレータ−は、プログラム流 れ図の分析中にステップ165で見つかったエラーをもつサブルーチンの流れ図 をプリントするために流れ図言語ファイルを形成する。エラー向は流れ図の一例 か図16に示されている。エラー向けの流れ因は、エラーかトレースされる経路 に沿って大きなブロック210.211及び212を有し、そしてエラーがトレ ースされた経路に対する弧に沿って太い破線2I4を育する。図16に示された エラーは、手順に使用される非初期化変数(汎用レジスタR3)である。太い破 線214は、手順の始めのブロック210を、その非初期化変数が最初に使用さ れるブロック213へ接続する。このエラーは、トランスレータ−によって明ら かになるまで発見されない。というのは、オリジナルプログラムの実行中には実 行かあきらかにブロック215のまわりに指示されたエラー経路をたどらないか らである。
図14を参照すれば、図」3のステップ170で発生された種類の概要ページか 示されている。図14に示されたように、この概要ページは、オリジナルプログ ラムのメモリマツプ181を含んでいる。メモリマツプの上部には、プログラム 名182と、オリジナルプログラムか形成されたときのデータ183と、変換中 に見つかったコードの割合184とを含む表示かある。
メモリマツプ181は、VAX命令アーキテクチャ−及びVMS (登録商標) オペレーティングシステムを用いた典型的なプログラムの編成を示している。こ のプログラムは、ヘッダ185と、読み取り/書き込み像セクション186と、 多数のリードオンリセフシコン187と、固定のベクターセクション188と、 デバッグ記号テーブル(DST)189と、デバッグモジュールテーブル(DM リントされ、そしてメモリマツプ内の全部で193個のディスクブロックかメモ リマツプの右下にプリントされる。この例では、ライン当たり1つのディスクブ ロックかあり、全部で12のディスクブロックがある。変換されたコードは、リ ードオンリセクション187内の狭いバンド194.195及び196によって 指示される。これらの狭いバンドは、変換されたコードの各バイトごとに短い垂 直の線で形成される。ブラウンプルコードは広いバンド197で指示される。
メモリマツプ181の右では、概要ページがオリジナルプログラムの像フ1−マ ットによって定められた100までの人カポインドをリストする。図」3のステ ップ161の間に、トランスレータ−は、スイッチのコマンドラインと、オリジ ナルプログラムの開始にあるファイル名とを説明し、オリジナルプログラムをメ モリに読み込む。図13のステップ+62では、トランスレータ−はオリジナル プログラムの像フォーマットにより定められた入カポインドをサーチする。トラ ンスレータ−は、第1のディスクブロックの最初の若干のバイト及び最後の若干 のバイトを探し、それが変換可能なVAX/VMSプログラム像のヘッダである かどうかを調べる。もしそうであれば、トランスレータ−は、ヘッダの残り部分 を説明し、像セクション記述子(TSD)を探し、ディスクブロックを図14の メモリマツプ+81に示された像セクション+85−191のような所望の像セ クションへと編成する。VAX/VMS固定ベクトルか存在する場合には、トレ ンスレータ−は、他の像に対する間接的なレファレンスであるオリジナルプログ ラムのアドレスを決定するようにそれを説明する。
オリジナルプログラムの像フォーマットによって定められた入カポインドを見つ けるために、トランスレータ−は入カポインドに対する像ヘッダ185をスキャ ンするか、デバッガ人カポインドは無視する。次いで、トランスレータ−は、デ バッグ記号テーブル(DST)+89か存在するときにこれをスキャンし、そし てグローバル記号テーブル(GST)+ 91が存在するときにこれをスキャン して、CALL入力及びSYMBOL人力を見つける。CALLマスクか有効で あり、マスクの後に法律コードかありそしてそのコードか特権命令を含んでいな いことを確かめることにより、各々の考えられるCALL人カポインドに対して 有効性のチェックが行われる。法律コードチェックは、呼び出しマスクから3層 の基本ブロックを通してコードをデコートする。SYMBOL入力は、記号かリ ンカ−により絶対レファレンスとしてフラッグ付けされたときには絶対レファレ ンスは典型的に定数であるから、無視される。さもなくば、SYMBOL入力は JSBS大入インドであるか、又は誤って表示されたCALL入カポインドであ る。入カポインドからのコードはデコードされ、そして上記した法律コートチェ ックは入カポインドかCALL入力であるとして実行さべこの法律コードチェッ クにバスした場合には、その入カポインドがCALL入力であると思われる。
法律コードチェックにパスしない場合には、同様の法律コードチェックを行って 入カポインドかJSB入力であるかどうかテストする。
図14の概要ページには、オリジナルプログラムの像フォーマットによって定め られた100までの入カポインド198かりストされる。プログラムコード内の 入カポインドの位置を示すために、入カポインド194の各々からメモリマツプ 181内の対応する位置へと弧201が描かれる。入カポインドのリストの下で は、概要ページは、トランスレータ−からのメツセージの概要199を致命的か ら情報的まで過酷さか減少する順序でリストして含んでいる。各メツセージか与 えられる回数はかっこ内に示されている。更に、概要ページの右上の角では、ト ランスレータ−がAからFまでの変換のレターグレードを与え、これは、完全変 換から、警報付き変換、部分変換、おそらく甚だしいエラーを伴う部分変換、ラ ンタイム機能を失った部分変換、そして全く不首尾な変換までの質を示す。
オリジナルプログラム内のほとんとの命令を探索するためには、オリジナルプロ グラムの像フォーマットによって定められた人カポインドからの実行の経過をた どることが必要である。実行の経過に続いて、各入カポインドで始まる命令ソー ケンスのデコードか行われ、命令かデコードされるにつれて流れ図か形成される 。流れ図を形成するために、各命令がデコードされてその長さを決定すると共に 、シーケンス内の次の命令が決定される。命令の長さは、各OPコードに対する 指定子の数を与えるテーブルを参照しそして指定子を検査して長さを決めること によって決定される。
RTSCコードを発生するためにもCl5C命令をデコードしなければならない ので、トランスレータ−は、流れ図を形成するためにデコードの結果をセーブす る。これらの結果は中間二一ドフす一マットであり、これは、流れ図の助けによ りエラーチェック中に命令の分析を簡単にすると共に、RISCコードの発生を 簡単にする。この中間コードフォーマットは、オペランド指定子か容易にアクセ スできるメモリ位置に入るように同様の命令に対して一定のデータフォーマット を与える。又、一定のデータフt−マットは、効率的なRISCコードの発生を 助けるアトリビュートを与えると共に、必要に応じて、インタープリタ−への呼 び出しを与える。使用することのできる1種の中間コードフォーマットを添付資 料Aについて述べる。しかしなから、メモリスペースに限界があるために、長い プログラム用の中間コード表示の使用は除外する。
図17には、流れ図を形成するのに使用されるデータ構造体が示されている。
流れ図のデータ構造体221については上記したか、これは、その全ての後続及 び先行ブロックへ各々リンクされる基本ブロック記述子のリストである。
流れ図の発生及び分析の助けとなるようにするため、多数の補助データ構造体2 23を参照しそして維持することが望ましい。例えば、流れ図データ構造体22 1の形成中及びその後のブラウンプルコードのスキャン中には、所与のアドレス が([)デコードされた命令のアドレスでもブロックの開始のアドレスでもない か、(2)基本ブロックの開始のアドレス(以下、「ブロック入カポインド」と 称する)であるか、(3)ブロックの中間にあるデコードされた命令のアドレス であるか、或いは(4)デコードされた命令の中間にあるバイトのアドレスであ るかを素早く知ることか望まれる。このため、補助データ構造体223は、C■ SC命令アドレスによって指示されたテーブル224を含んでいる。
例えば、テーブル224の入力は、上記の各Cl5Cアドレスの相互に排他的な 4つの状態をエンコードする16対のビットかバックされたロングワードである 。第」レジスタの所与のCl5Cアドレスに対して、最下位4ビツトがセットさ れたマスクか第2レジスタにロードされ、アドレスの最下位4ビツトか第1及び 第2レジスタの論理アンドによって第2レジスタへ転送され、そして第2レソス タか1ビツト位置だけ左へソフトさ托シフトカウントを与える。第2レジスタは 、4ビツト位置だけ右ヘンフトされてテーブル224にインデックスか与えられ ると共に、テーブルからの入力か第2レジスタにロードされる。次いて、π■レ ジスタは、シフトカウントによって指示されたビット位置数だけ回転され、所与 のcrscアドレスに対してビット対か正しいと判断される。次いで、このビッ ト対は、最下位2ビツトかセットされたマスクにより第2レジスタとの論理アン ドによりマスクされる。
流れ図を形成するときには、最後の命令へたどりついていない他の経路かあるこ とか分かっていても、一度に1つの経路をたどることが必要である。更に、ある ときには、たどっている経路か部分的にたどった経路に合流することかある。
それ故、補助データ構造体223は、デコードされないブロックの基本ブロック 記述子に対しポインタのりスト225を含むことか望ましい。例えば、流れ図の 形成を開始するときには、デコードされないブロックの基本ブロック記述子かオ リジナルプログラムの既知の各入カポインドごとに形成される。これらの既知の 入カポインドは、流れ図を形成する前にリスト226に集められる。
VAX/VMSプログラムの場合には、既知のプログラム入カポインドかCAL Lx手順呼び出しの入カポインドであり、従って、流れ図においてCALLx基 本ブロック記述子によって表される。CALLx基本ブロック記述子は、各プロ グラム入カポインドに対して形成される。リスト225には、プログラム入カポ インドのCALLX基本ブロック記述子に対するポインタが最初にロードされる 。更に、プログラム入カポインドに対するテーブル224の入力は、基本ブロッ クの開始を指示するように最初にセットされる。
テーブルのルックアップにより所与のcrscアドレスがブロック又はブロック 内のデコードされた命令のスタート点であることか指示されたときには、そのブ ロックの基本ブロック記述子を速やかに見つけることがしばしば所望される。
メモリスペースに制限かない場合には、crscアドレスにより指示された基本 ブロック記述子に対するポインタのテーブルによりこれを行うことができる。し かしながら、メモリスペースには制限かあるので、流れ図のデータ構造体221 内の基本ブロック記述子に対するポインタの簡易リスト228としてハツシュテ ーブル227を使用するのか好ましい。更に、例えば、ブロック内の第1命令の アドレスの最下位16ビツトにより、このハツシュテーブルをインデックスする のが望ましい。例えば、所与のcrscアドレスでスタートする基本ブロックに 対する基本ブロック記述子を見つけるために、所与のCl5Cアドレスの最下位 16ビツトによってハッンユテーブル227をインデックスし、基本ブロック記 述子に対するポインタの簡易リスト228の1つとしてポインタが得られる。こ の簡易リスト内の各ポインタごとに、そのポインタを用いて基本ブロック記述子 のスタートアドレスアトリビュートをフェッチし、このスタートアドレスか所与 のCl5Cアドレスと比較される。アドレス間の一致か得られると、所望の基本 ブロック記述子が見つかる。所与のアドレス(基本ブロックの中間にある命令の アドレスのような)を見つけるために、ブロックの開始アドレスか見つかるまで テーブル224かアドレス数字か減少する方向にスキャンされ、そしてこのブロ ック開始アドレスを用い、ハッンユテーブル227と、基本ブロック記述子に対 するポインタの簡易リスト228とを参照して、基本ブロック記述子が見つけら れる。
新たに形成された基本ブロックに対し基本ブロック記述子が割り当てられるたび に、アドレステーブル224、ハツシュテーブル227及び簡易リスト+18の 1つか更新される。例えば、ロングワードを辱るようにテーブルをインデックス しそしてそのロングワードの2ビツト人力をマスク動作によってセットすること により、ブロックのスタートを指示する2ビツト入力かテーブル224に書き込 まれる。マスク動作のためのマスクは、例えば、基本ブロックのスタートのCl 5Cアドレスの最下位4ビツトでマスクのテーブルをインデックスすることによ り得られる。次いで、基本ブロックのスタートのCl5Cアドレスの最下位16 ビツトでハツシュテーブル227をインデックスすることにより、ポインタの簡 易リスト228の1つに対するポインタか得られる。最後に、新たなブロックの 基本ブロック記述子に対するポインタか、ハツシュテーブル227をインデック スすることにより得たポインタで指示された簡易リストに加えられる。
図18には、流れ図データ構造体を形成するための手順のフローチャートか示さ れている。第1ステツプ229では、リストの頭部にあるデコードされない基本 ブロック(図17の225)かりストから除去され、流れ図データ構造体の基本 ブロック記述子(図17の224)か割り当てられ、そしてまだめられていない 入カポインドに等しいブロック入カポインドと、まためられていない入カポイン ドの先行点に等しい先行屯とを指示するように基本ブロック記述子かセントされ る。次いで、ステップ230において、ブロック入カポインドで開始する基本ブ ロック内の次の命令かデコードされ、そしてアドレステーブル(図17の224 )が更新される。次いで、ステップ231において、命令デコード中に、アドレ ステーブル(図17の224)がインデックスさね、デコードされている命令か 既にデコードされた命令にオーバーラツプするかどうか決定される。もしそうで あれば、次いで、ステップ232において、エラーメツセージが発生されそして 経路か放棄さね、ステップ238のテストで、デコードされていない基本ブロッ クのリスト(図17の225)が空でないこと分かった場合には、別の経路がサ ーチされる。又、ステップ233において、アドレステーブル(図17の224 )をルックアップすることにより、デコードされた命令がデコードされない基本 ブロックにオーバーラツプするかどうか指示される。もしそうならば、デコード されない基本ブロックのブロック入カポインドが命令の中間にあることになるの で、エラーとなる。この場合、ステップ234でエラーが報告され請求められな かったブロック入力かエラーであるという仮定のもとで、デコードされていない 基本ブロックに対するポインタのリスト(図I7の225)からデコードされて いない基本ブロックが取り除かれる。この点において、流れ図に1つの命令が加 えられている。
実行転送命令は、常に、基本ブロックを終わらせる。この状態はステップ235 においてチェックされる。実行転送命令が見つかったときには、命令のあり得べ き実行経路の各々に対する次の命令がステップ236で検査される。既にデコー ドされている命令へ戻る経路は既存ブロックの入カポインドへリンクさね、或い は経路か既存ブロックの中間に向けられたときには、既存ブロックが2つのブロ ックに分割され、経路が常にブロック入カポインドで終わるようにされる。さも なくば、検査の結果、経路を終了させるか経路をたどるべきであるという結論に なる。2つ以上の経路をたどるべきである場合には、最も優先順位の高い経路が 「継続経路」として選択さね、他の経路をたどるべきアドレスはデコードされな い基本ブロックとして待ち行列に入れられ、実行転送命令に対する基本ブロック 記述子が、デコードされていない基本ブロックの各基本ブロック記述子における 先行屯のリストに加えられる。例えば、条件分岐命令の場合には、アドレスソー ケンスの実行経路(即ち、まっすぐな経路)が最も優先順位の高い「継続」経路 となり、実行転送の行き先アドレス、即ち「真の分岐」が待ち行列に入れられる 。考えられる各々の実行経路をステップ236において検査する方法を図19に ついて以下に詳細に述べる。ステップ237でチェックして継続すべき実行経路 が全くない場合には、ステップ238において、デコードされていない基本ブロ ックのリストかチェックされ、たどるべき他の経路かあるかどうかの判断かなさ れる。もしなければ、流れ因は終了となる。さもなくば、実行ループかステップ 229へ戻6t’L、デコードされていない基本ブロックのリスト(図〕7の2 25)における次のデコードされていない基本ブロックのブロック入カポインド からの経路をたどり始める。ステップ237において継続経路があると判断され た場合には、ステップ239において実行の分岐か行われ、その経路がデコード されていない基本ブロック内で続いている場合にはステップ246へ分岐され、 さもなくば、ステップ240へ分岐される。(図19のステップ263では、以 下で述へるように、デコードされた基本ブロック内で経路が継続するかどうか既 にチェックされており、ステップ240に到達するのは、経路かデコードされな い命令へ続くときだけである。)ステップ240ては、次の命令に対して新たな 基本ブロックか形成さね、新たな基本ブロックに対する先行ブロックのリストは 、実行転送命令を含む基本ブロックに対するポインタを最初に含むようにセット され、新たな基本ブロックに対するポインタは、実行転送命令を含む基本ブロッ クの基本ブロック記述子内の後続ブロックのリストに加えられる。ステップ24 6では、実行転送命令を含む基本ブロックに対するポインタか、デコードされて いない基本ブロックに対する先行ブロックのリストに加えられ、デコードされて いない基本ブロックに対するポインタか実行転送命令を含む基本ブロックに対す る後続ブロックのリストに加えられ、デコードされていない基本ブロックに対す るポインタかデコードされていない基本ブロックのリストから取り去られ、デコ ードされていない基本ブロックに対しステップ230でデコードか開始さね、次 の命令のデコードが首尾良く行われた場合には、デコードされていない基本ブロ ックの基本ブロック記述子が更新され、それがデコートされたことを指示する。
ステップ235でブロック内の命令か実行転送命令でないことか分かった場合に は、アドレスシーケンスの次の命令へ至る経路をたどるようにする。この経路は 、予め定められた命令メモリエリアから外れているので、終了すべきであること か考えられる。ユーザの選択により、予め定められた命令メモリエリアはり一ト オンリメモリエリアとして定められてもよいし、場合によっては、全オリジナル 変換プログラムに対して割り当てられたメモリエリアに限定されてもよい。それ 故、ステップ241では、実行がステップ242へ分岐し、そこでエラーが報告 され、経路か切断される。次いで、ステップ238において実行か継続され、た とるべき新たな経路か見つけられる。
又、基本ブロックは、アドレスシーケンスにおける次の命令が後続ブロックであ る別の基本ブロックへと延びるときに終了となる。この状態は、アドレステーブ ル(図17の224)を次の命令のアドレスでインデックスすることによりステ ップ243においてチェックされる。ステップ244では、後続ブロックの基本 ブロック記述子がアクセスされ、その後続ブロックかデコードされている基本ブ ロックであるかデコードされていない基本ブロックであるか判断される。デコー ドされていない後続ブロックの場合には、ステップ246において、デコードさ れている最後の命令を含む基本ブロックに対するポインタがデコードされていな い基本ブロックに対する先行ブロックのリストに加えられ、デコードされていな い基本ブロックに対するポインタがデコードされている最後の命令を含む基本ブ ロックに対する先行ブロックのリストに加えられ、デコードされていない基本ブ ロックに対するポインタがデコードされていない基本ブロックのリストから取り 去られ、デコードされていない基本ブロックに対してステップ230でデコード か開始される。次の命令に対するデコードが首尾良く行われた場合には、デコー ドされていない基本ブロックの基本ブロック記述子が更新さね〜デコードされた ことを指示する。さもなくば、後続ブロックがデコードされたブロックである場 合には、ステップ246において、後続ブロックに対するポインタが、デコード された最後の命令を含むブロックの基本ブロック記述子における後続ブロックの リストに加えられ、デコードされた最後の命令を含むブロックに対するポインタ が後続ブロックの基本ブロック記述子における先行ブロックのリストに加えられ る。次いて、ステップ238において実行か継続さt′L、たとるべき新たな経 路か見つけられる。
図19には、実行転送命令からの1つの経路で次の命令を検査するために図18 のステップ236においてたどる手順のフローチャートが示されている。図19 の第1ステツプ251では、実行転送命令か検査されて、計算された行き先アド レスを有するかとうかの判断がなされる。もしそうであれば、ステップ252に おいて、後方記号実行のプロセスが行われて、行き先かめられる。このプロセス は、手順及びサブルーチン呼び出しをめるのに特に青用である。ステップ253 でチェックして行き先がめられていない場合には、経路の検査か終了となる。と いうのは、実行時間にインタープリタ−か呼び出されるまでその経路の次の命令 か分からず決定されないからである。後方記号実行のプロセスでは、実行転送命 令から流れ図を通して後方サーチを行うことにより計算行き先アドレスかめられ 、プログラムの命令のアドレスに関して固定であるアドレス値に対し計算行き先 アドレスをめるのに使用した少なくとも1つの手前の命令が見い出される。後方 記号実行のプロセスは図20について以下で詳細に説明する。
ステップ254に続き、検査されている経路は既知の行き先アドレスをもつ。
この行き先アドレスは、オリジナルプログラムに割り当てられたメモリの限界と 比較され、この限界を外れている場合には、その行き先がオペレーティングシス テムのような外部レファレンスであると考えられる。ステップ255において、 外部レファレンスについての情報を含む像情報ファイルに対してサーチか行われ る。このような像情報ファイルか使用できる場合には、ステップ256でその外 部レファレンスから経路が続く行き先を決定するために検査か行われる。外部レ ファレンスが手順又はサブルーチンである場合には、サブルーチン又は手順呼び 出しの特性に関する情報を保持するために「プレースホルダー」ブロックを形成 することか所望される。サブルーチン又は手順は、復帰しなかったり、4 (S P)へ復帰したり、又は発呼者のレジスタを変更したりというアブノーマルな特 性を有することがある。このアブノーマルな特性は、像情報ファイルに指示され ねばならず、そしてもし可能であれば、外部プログラムからの復帰経路を決定す るために使用しなければならない。これに加えて、オリジナルプログラムに対す る像情報に、呼び出しに関する情報、例えば、外部行き先アドレス、呼び出しの 形式、パラメータの個数及びパラメータとしての一定数値を記録することか所望 される。
パラメータとしての一定数値は、例えば、呼び出し命令からの後方記号実行によ って見つけられる。呼び出しについてのこの情報は、図31ないし33を参照し て以下に述べるように、多数のプログラムの反復変換のプロセスに使用すること かできる。
外部レファレンスに対して像情報ファイルが見つからない場合には、ステップ2 57において、実行転送命令のOPコードが検査され、外部レファレンスかサブ ルーチンであるか手順であるかの判断かなされる。外部転送命令がサブルーチン でも手順の呼び出してもない場合には、ステップ258において、外部レファレ ンスに対して復帰かとられないことを指示する警報が発せられ、呼び出しに対す る情報かオリジナルプログラムに対する像情報ファイルに記録されそして経路を たどれないという結論で経路の検査が終わりとなる。実行転送命令がサブルーチ ン又は手順の呼び出しである場合には、ステップ259において、外部レファレ ンスに対して探準復帰がとられることを指示する警報が発せられ、呼び出しに対 する情報かオリジナルプログラムに対する像情報ファイルに記録される。又、サ ブルーチン呼び出しの作用に対してとられる情報を保持するためにこの時点で流 れ図に「プレースホルダー」ブロックを形成することが所望される。経路の行き 先か実行転送命令に続くアドレスシーケンスの次の命令であることを仮定して経 路の検査か続けられる。
ステップ260では、検査されている経路の行き先か、オリジナルプログラムに 割り当てられたメモリエリア内の行き先であると分析されている。ステップ26 0では、行き先が、オリジナルプログラムの命令に対して割り当てられたメモリ エリアの限界と比較される。通常の場合には、オリジナルプログラムの命令に割 り当てられたメモリエリアは、図14のメモリマツプ181に示されたエリア1 87のようなリードオンリメモリエリアである。行き先がこのメモリエリア以外 である場合には、ステップ261においてエラーメツセージが発生され、経路が 放棄される。
ステップ262では、行き先か既にデコードされている命令内であって終了でき るところかもしれない。この状態をチェックするために、テーブル(図17の2 24)が行き先でインデックスさね、テーブル入力か検査されて、アドレスか既 にデコードされた命令の中間にあるか、或いはアドレスか既にデコートされた命 令のアドレスであるか基本ブロックの開始部の命令のアドレスであるかが調べら れ、もしそうでなければ、行き先は既存ブロックの中間にある。これらのオペレ ーションは、図19のステップ262.263及び264のテストを行う。
ステップ262で行き先が既存ブロックの中間にあると判断された場合には、ス テップ265において、既存のブロックを先行ブロックとして有する新たなブロ ックと、実行転送命令を含むブロックとを形成することにより、既存のブロック か2つのブロックに分割される。更に、既存のブロックの全ての後続プロ・ツク は新たなブロックに転送さ札既存ブロックの基本ブロック記述子は短いプロ・ツ ク長さを表すように更新され、新たなブロックに対するポインタが、実行転送命 令を含むブロックの基本ブロック記述子における後続ブロックのリストに加えら れ、そして命令アドレスのテーブルが、既存ブロックの変更を表すように更新さ れる。次いで、ステップ266において、新たなブロック及びその後続プロ、ツ クのライン内のブロックにおける計算行き先アドレスに対して後方記号実行か再 び繰り返され、検査されている経路を通しての後方記号実行によって更に別の行 き先をめる試みがなされる。これにより、経路の検査が完了する。
ステップ263で行き先がデコードされたブロックの開始部であると判断された 場合には、ステップ267において、実行転送命令を含むブロックに対するポイ ンタか既存ブロックの基本ブロック記述子における先行ブロックのリストに加え られ、そして既存ブロックに対するポインタが、実行転送命令を含むブロックの 基本ブロック記述子における後続ブロックのリストに加えられる。ステップ26 6において、検査されている経路を通しての後方記号実行か、既存プロ・ツク及 びそこからの後続ブロックのラインにおける計算行き先アドレスに対して再び繰 り返される。これで経路の検査は終了である。
ステップ264で行き先が既存の命令の中間にあると判断された場合には、ステ ップ268でエラーメツセージが発生さ托経路の検査か終わりとなる。
ステップ264で行き先か既存の命令の中間にないと決定された場合には、ステ ップ269において、実行転送命令のOPコードが検査され、それが手順である かサブルーチン呼び出しであるかが決定される。もしそうであれば、ステ・ツブ 270において、手順又はサブルーチンへの経路をたどることになる。サブル− チンかまだ変換されていない場合には、変換される。いずれの場合にも、特定の 手順又はサブルーチン呼び出しの作用についての情報を記憶するために「プレー スホルダー」ブロックか流れ図に形成される。サブルーチンがまだ変換されてい ない場合には、スタック上の復帰アドレス又はセーブレジスタを変更しないよう にするためその手順又はサブルーチンが分析される。図24のステ・ツブ372 及び373について以下で詳細に述べるように、この分析により[コールツク・ ツクJの存在か明らかになる。ステップ269で見つかったサブルーチン呼び出 しが、コールバックを注目すべき入カポインドに対して生じる場合には、後方記 号実行(図24のステップ374について以下で説明する)を試みて、ルーチン のアドレスを発見し、それを変換しなければならない。
ステップ271において、実行転送命令のOPコードが再び検査されて、検査さ れている経路か条件分岐であるかどうか判断される。もしそうでなければ、その 経路をたどる。さもなくば、ステップ272において、条件分岐命令の実行転送 の行き先アドレスに対してデコードされないブロックが形成され、この新たなブ ロックの基本ブロック記述子に対するポインタがデコードされないプロ・ツクの リストに入れられる。
VAX命令セットは、条件分岐命令よりも複雑な特別のrcAsEJ命令を含ん でいる。理論的には、行き先の数が実行時間にしか分からないようなCASE命 令をもつことはできるか、このような命令は変換不能であり、それ故、アナライ ザーはこれを「変換不能」とマークし、コードジェネレーターかこのCASE命 令を解読するようにインタープリタ−への呼び出しを発生するようにしなければ ならない。通常の状態においては、CASE命令に対する行き先の数は変換時間 に分かる。これら行き先の1つを除く全てを図48のステ・ツブ236で待ち行 列に入れることかでき、一方、経路は残りの行き先から続けることかできる。し かしながら、CASE命令に対して指定された多数の行き先の1つか、実行中( こ取り上げられることかないので、不適切であるという問題がときどき発生する 。
この状態においては、その不適切な行き先に対する変位か通常はぜ口である。そ れ故、図18のステップ236においては、CASEのOPコード及びゼロ変位 経路に対して特殊なテストを行わねばならない。この状態か見つかった場合は、 そのCASEターゲットか「変換不能」とマークされ、これか実行時間に解読さ れる。CASE命令で発生するもう1つの問題は、不適切な経路がアドレスモー ケンスの次の命令へ至る「フォール・スルー」経路になることかときときあるこ とである。この状態では、この「フォール・スルー」経路は変換可能なコートを 含まないことかあり、図18のステップ230において説明及び変換エラーを招 くことになる。説明及び変換エラーか生しると、トランスレータ−はエラーメツ セージを発生し、経路をたとらないよう切断しなければならない(ステップ23 8において実行を続けることにより)。エラーメツセージを公式に表すために、 トランスレータ−は、その説明又は変換エラーか生じた命令に先行するCASE ステートメントを探索し、それか見つかったときに、そのエラーかおそら<CA SEステートメントによるものであると診断する。更に、CASEステートメン トに伴うこれらの問題は、見つかった時点で、オリジナルプログラムに対してト ランスレータ−によって発生された像情報ファイルに記録される。
図18ないしI9の手順によって発生された流れ図か図]5に示されている。
DHRYSTONE”という名称のプログラムでは、初期入カポインドか<ma in>であり、これはオリジナルプログラムに2E00のアドレスを有している 。最初の2つのバイトはVAX呼び出しマスク0000であり、“DHRYST ONE’か呼び出されたときにセーブすべき余分なレジスタかないことを指定す ると共に、例外イネーブルビットIV及びDV(整数及び10進オーバーフロー )がオフになるへきである(Cプログラムに対するデフィート)ことを指定して いる。[15ては、手順呼び出しのための六角形記号301によって表された最 初の基本ブロックにこの情報か含まれる。
次の9バイトは、2つの命令、即ち5UBL2 (ロングワード減算)とそれに 続<JSB(サブルーチンへのジャンプ)とで構成された単一の基本ブロックで ある。[g+5では、 「ノーマル」ブロックのためめ長方形302で表された 第2の基本ブロックにこの情報か示されている。
JSB命令に遭遇すると、トランスレータ−は、像情報ファイルのルックアップ を行い、レファレンスを像VAXCRTLのオフセット0にし、そしてオフセッ ト0に関連した情報をファイル内で探す。トランスレータ−は、ノーマルな復帰 と、レジスタの使用及びセツティングとを見つける。この情報に基づいて、トラ ンスレータ−は、JSBプレースホルダーについて破線の楕円303で示された プレースホルダーブロックを確立しそして(使用JSB特性により)そのプレー スホルダーを、アドレス2EOBにおいてJSB命令の直後にスタートする新た な基本ブロックに接続する。この基本ブロックは、単一のCALLS命令より成 り、長方形304によって表される。トランスレータ−は、行き先アドレスを2 E18と計算し、それか”DHI?YSTONε″像内の手順(Proc傷内で あるがまだ検査されていないことを見つける。トランスレータ−は、流れ図に破 線の六角形305で示された手順呼び出しのためのプレースホルダーを形成する 。この手順はまだ検査されていないので、トランスレータ−は、アドレス2E1 8で開始して手順内の命令の説明を続ける。最終的に、トランスレータ−は、手 順内のRETをデコードし、これはメインルーチンのアドレス2E12へのノー マル復帰であることを指示する。
トランスレータ−は、2E12で始まる説明を続番九CVTWL (ワードをロ ングワードに変換する)命令と、RET (復帰)命令とを見つける。これらは 、流れ図において長方形306で示された基本ブロックに含まれるものである。
RET命令はメインルーチンを終了し、従って、トランスレータ−は、DHRY STONEプログラムの他の何らかの入カポインドで続けねばならない。
図20を参照すれば、後方記号実行を行う手順のフローチャートが示されている 。後方記号実行のプロセスにおいては、実行転送命令の行き先アドレスが記号実 行によって表さね、各々の手前の命令の作用を表すように式が次々に変更される 。例えば、実行転送命令が”JMP R6+4″であるとする。これは、汎用レ ジスタR6の内容に4を加えることにより計算した絶対アドレスに実行を転送す るものである。計算された行き先アドレスは、例えば、’ R6+4”という記 号で表される。プログラムを通して後方にR6を参照する次の命令は、’ MO VAB 4 (R5)、R6”であり、これは、汎用レジスタR5の内容に4を 加えそしてその和をR6に入れるものである。従って、記号式″R6+4”は、 その手前のMOVAB 4 (R5)、R6″命令を通して押し戻さね、変更さ れた式” R5+8″を得る。この変更された式は、その記号式が手前の命令の 後に存するものと同じ値をその手前の命令の前に有している。
後方記号実行のプロセスは、計算行き先アドレスが絶対アドレス又は像関連アド レスとしてめられるか、或いは計算行き先アドレスの値に影響するか後方記号実 行を許さないような手前の命令に到達するまで、続けられる。例えば、後方記号 実行で計算行き先アドレスをめることか不可能であるかめられないような幾つか の命令(XORB2 R1,R2のような)の場合に、後方記号実行は許されな い。この場合には、計算行き先アドレスを「未知」の記号値へ減少し、欠落コー ドのおそれを指示するのか便利である。しかしなから、限定された組の命令(例 えば、汎用レジスタを伴う加算、減算、ロード及び記憶)のみに対して記号実行 を許すことにより、典型的なプログラムで見い出される計算行き先実行の大部分 をめることかできる。
図19のステップ252て呼び出されると、後方記号実行は図20のステップ3 21で開始される。このステップ321では、実行転送命令の計算された行き先 (図18のステップ235で確認された)を行き先アドレスの記号表示の所定の フォーマットに変換する試みかなされる。例えば、実行転送命令の計算された行 き先オペランドは、アラセンブラー表示により、対応するアドレッシングモード の名称と共に以下のテーブルに示された次の形態を少なくとも存することかでき る。
計算行き先アドレスに対する行き先オペランド1、 (Rn) デファーしたレ ジスタ2、−(Rn) 自動減少 3、 (Rn)+ 自動増加 4、 @(Rn)+ デファーした自動増加5、 disp(Rn) バイト/ ワード/ロングワード変位6、 disp(PC) バイト/ワード/ロングワ ード相対的7、 @disp(Rn) デファーしたバイト/ワード/ロングワ ード変位8、Nisρ(PC) デファーしたバイト/ワード/ロングワード相 対9、 (Rn)[Rxl デファーし、指示されたレジスタ10、−(Rn) [Rxl 指示された自動減少11、 (Rn)+[Rxl 指示された自動増 加12、6(Rn)+[Rxl デフ7−し、指示された自動増加13、6is p(Rn)+[Rxl 指示されたバイト/ワード/ロングワード変位14、初 1sp(Rn)+[Rxl デファーし、指示されたバイト/ワード/ロングワ ード変位 指示されたアドレス方法は、テーブル及びアレイをアドレスするのに一般に使用 されるものであるが、実行転送の行き先アドレスを指定するのに一般に使用され るものではない。それ故、記号表現のための1つの好ましいフォーマットは、指 示されたアドレッシングモード以外の全てのものを表すことのできるフォーマッ トで行き先アドレスを表示する。このようなフォーマットが図21に示されてい る。これは、デファーしたアドレッシングを指示するメモリアクセスフラグ32 6と、レジスタ番号327と、ロングワード変位328とを含む。又、このフォ ーマットは、レジスタ番号327が有効であることを指示するようにセットする ことができるレジスタフラグ329を含み、従って、このフォーマットはロング ワード定数を表すこともできる。レジスタフラグは、例えば、図20のステップ 321の間にセットさね、そして後方記号実行のプロセスでレジスタ番号により 指示されたレジスタの内容の値が見つかってその値がロングワード変位に加えら れた場合及びそのようなときにリセットされる。図21のフォーマットで指示さ れるアドレス値は、レジスタフラグがセットされたときにレジスタの内容に変位 を加えることによって得た値であるか、或いはレジスタフラグがセットされない ときの変位の値であり、そしてメモリアクセスフラグがセットされたときは、そ の和の値がアドレスとして使用されて、メモリからアドレス値がフェツチされる 。
図22には、計算行き先アドレスに関連した全てのアドレスモードを表すことの できる記号表示のための更に複鰭なフす−マットが示されている。このフォーマ ットは、メモリアクセスフラグ331と、インデックスレジスタフラグ332と 、インデックスレジスタ番号333と、倍率定数334と、ペースレジスタフラ グ335と、ペースレジスタ番号336と、ロングワード変位337とを含んで いる。この複雑なフす−マットにより指示されたアドレス値は、変位の値に、ペ ースレジスタフラグかセクトされたときにはペースレジスタの値を加え、インデ ックスレジスタフラグがセットされたときにはインデックスレジスタの値に倍率 定数を掛けた値を加えたものであり、メモリアクセスフラグかセットされたとき には、その和かアドレスとして使用されてメモリからアドレス値がフェッチされ る。図22のより複雑なフォーマットは、指示されたアドレッシングモードを使 用しない実行転送命令のための行き先アドレスを見つける場合に後方記号実行を 改善するものである。というのは、命令セットにおけるより多くのOPコードの 作用を考慮するように記号実行のプロセスを行えるからである。例えば、図21 のフナ−マットは、レジスタ番号によって指定されたレジスタに基づいて補数命 令の作用を表すことはできない。しかし、図21のフォーマットは、符号付きの オフセット番号を使用することかでき、インデックスレジスタ番号で指定された インデックスレジスタに基づく補数命令の作用を、そのオフセット番号の補数を とることにより考慮することができる。
非常に多数の命令オペレーションの作用を考慮するために、記号表示は、1つ以 上の定数を含むアルファニュメリック文字列、RLR2、R3,、、R15とい った各汎用レジスタの内容を指示するための1つ以上のレジスタ指示体、+及び 本といった演算オペレーション、及びアドレスXにおけるメモリの内容を表すメ モリアクセスファンクション@(X)のような可変長さフォーマントを使用する ことができ、これにより、記号表示の値は、代数の法則を適用することにより表 される値となる。
それ故、@7 (R1)(R4)のようなデファーしたロングワード変位の指定 子は、@ (4)kR4+RI+7)と表される。インデックスレジスタR4に 対するオフセット定数4は、指定子のロングワードモードによって決定され、オ フセット定数は、ワードモードの場合2であり、バイトモードの場合lである。
しかしながら、オフセット定数1は、文字列に含ませる必要はない。簡単化のた めの他の代数法則が次のように適用される。即ち、x+A十B (但し、A及び Bは定数である)は、x+C(但し、C=A+B)と簡単化さね、x+Ry+R yは、x+2*Ryと簡単化され、そして@ (z)+@ (z) 十xは、2 本@ (z)+Xと簡単化される。
ステップ321においては、行き先指定子を検査することにより実行転送命令の ための行き先アドレスをめる試みかなされる。これは、相対的なアドレッシング モード及び相対的なデフ7−したアドレッシングモードに対して行うことかでき る。相対的なアドレッシングモードにおいては、次の命令のアドレス(即ちプロ グラムカウンタの更新した値)か変位に加えられて、所望の行き先アドレスか与 えられる。相対的なデファーしたアドレッシングモードにおいては、次の命令の アドレスが変位に加えられて絶対アドレスが得られ、そしてこの絶対アドレスに あるメモリの内容(これは図14の固定メモリエリア188になければならない )がフェッチされて、所望の行き先アドレスが与えられる。ステップ322にお いて、行き先アドレスをめたときには、図18のステップ237において経路を たどるように実行分岐が続けられる。
ステップ321において行き先アドレスかめられないときには、ステップ323 において、実行転送命令に対する行き先指定子を、命令の開始に評価したときに 行き先アドレスの値を表す記号表示へと変換するための試みがなされる。これは 、命令の終わりに生じる行き先指定子自体の評価と対照的である。
自動減少モードを除く全ての場合に、行き先指定子に対するアッセンブリ言語表 示は、記号表示の項目に一致することによって直接変換をする。自動減少モード の場合には、ペースレジスタの内容が行き先指定子の評価に使用される前に、ペ ースレジスタの内容か命令OPコードのデータ形式に基づいて■、2.4.8又 は16だけ減少される。それ故、自動減少行き先指定子が変換されるときは、記 号表示における変位定数が実行転送命令のOPコードのデータ形式に基づいて− 1,−2、−4、−8又は−16となる。更に、命令アーキテクチャ−が実行転 送命令において自動減少ソース指定子を許す場合には、行き先指定子に含まれた レジスタと同じペースレジスタを用いた各々の自動減少ソース指定子に対し、記 号表示の変位定数は、各々のこのような自動減少指定子の作用を考慮するために 、実行転送命令のOPコードのデータ形式に基づいて、−1、−2、−4、−8 又は−16だけ減少する必要がある。
ステップ324において、行き先指定子を記号表示に変換できないときには実行 がステップ325へと分岐する。これは、例えば、図21の固定フォーマントか 記号表示に使用されそして行き先指定子が指示されたアドレッシングモードを育 するときに生じる。ステップ325では、実行転送命令が未知の行き先を有する ことを指示する警報か発せられる。
行き先指定子が記号表示に変換されるときには、ステップ341においである変 数か初期化され、後方記号実行を行って、記号表示に対して考えられる行き先優 がサーチされる。一定の値を受け入れるためのリストかクリアされ、少なくとも 1つの未知の値の存在を指示するフラグがクリアされる。更に、 「エポック」 番号が増加される。
このエポック番号は、記号実行がパスした各ブロックをマークして流れ図を通る 無限ループができるのを防止するのに用いられる。無限ループの可能性は、図2 3に示された流れ図によって示されている。この流れ図はハイアラーキデータ構 造体として描かれたものである。この流れ図は、例えば、メイン入カポインド3 42を育し、そして実行はターミナルブロック343,344の復帰命令で終了 する。いずれのブロックについてもその終了部から開始部へ直接的に延びるルー プはないが、経路345及び346か中間ブロック347及び348を相互接続 しており、ハイアラーキ式のサーチ中に無限ループを生じさせることがある。
例えば、前方のハイアラーキサーチは、ブロックのサーチをその開始部において 開始するルーチンを呼び出すことにより典型的に実行され、ブロックの終了部に 到達した場合及びそのときに、ルーチンはそのブロックの各後続ブロックに対し てそれ自身を繰り返し呼び出し、これに対して、後方のハイアラーキ式サーチは ブロックのサーチをその終了部から開始するルーチンを呼び出すことによって典 型的に実行され、ブロックの開始部に到達した場合及びそのときに、ルーチンは そのブロックの各先行ブロックに対してそれ自身を呼び出す。経路345及び3 46の存在によりこれらのサーチルーチンのいずれかが無限ループに捕まること になる。というのは、中間ブロック347.348が交互に且つ繰り返しサーチ されるからである。
前方又は後方のサーチ中に無限のループかできるのを防止するために「エポック 番号」がサーチの前に増加さね、ブロックに対してサーチルーチンに入るたびに 、 「エポック番号Jかそのブロックに対する「エポック番号アトリビュートJ と比較される。 [エポック番号」と「エポック番号アトリビュート」とが一致 することは、そのサーチ中にそのブロックに既に到達しており、従って、繰り返 してはならないことを指示する。
図20に戻ると、ステップ351において、記号表示の考えられる値に対し、以 下で述べるように図24のサーチルーチンを呼び出すことにより、後方サーチか 開始される。次いで、ステップ352において、「未知」のフラグが検査されそ してもしこれかセットされていれば、その記号表示に対し未知の値が考えられる ことを警告するためにステップ353で警報メツセージが発生される。ステップ 354において、一定値のリストが検査され、それか空である場合には、実行転 送命令からの経路の終了部に達しており、図18のステップ237及び238に おいて実行が続けられて、別の経路をたどる試みがなされる。さもなくば、ステ ップ355において、リスト内の各一定値がステップ254ないし264につい て既に述べたようにテストされ、有効な行き先であることが確かめられる。しか しなから、図27について上記したように、これらテストの幾つかは、一定値を リストに入れる前に行うことかでき、従って、テストの際に一定値を得た特定の 方法を考慮に入れることができる。次いで、ステップ356において、リスト内 の一定値が有効であるかどうかチェックされる。もし有効でなければ、実行転送 命令からの経路の終端に到達しており、図18のステップ237及び238にお いて実行か継続され、別の経路をたどる試みがなされる。さもなくば、ステップ 357において、2つ以上の有効な行き先をリストが含むかどうかのチェックが 行われる。もしそうであれば、1つを除く全てがデコードされていないブロック のリスト(図17の225)に入れられ、IN+8のステップ237及び239 において残りの有効行き先で始まる経路が続けられる。
図24には、図20のステップ351で呼び出された後方サーチルーチンのフロ ーチャートが示されている。このルーチンは2つの入カポインドを育する。第1 の入カポインド361は、指定のブロックにおける指定の命令アドレスで新たな 後方サーチを開始するために呼び出される。第2の入カポインド362は、指定 のブロックの終了部で始まる後方サーチを続けるために呼び出される。
第1の入カポインド361は、図20のステップ351て呼び出されて、実行転 送命令の命令アドレスで新たな後方サーチを開始し、この場合、第1のステップ 363は、新たなサーチに対するエポック番号に等しい実行転送命令を含む現在 ブロックのエポック番号アトリビュートをセットする。次いで、ステップ364 において、現在ブロックのサーチは、現在命令アドレスがブロック内の第1命令 のアドレスである場合に終了となり、これはブロックが実行転送命令のみて構成 される場合に生じる。さもなくば、ステップ365において、現在命令アドレス か手前の命令の命令アドレスに変更される。これら最後の2つのステップ364 .365は、テーブル(図17の224)をインデックスすることにより容易に 行われる。
指定されたブロックの終了部でサーチを続けるように第2の入カポインド362 か呼び出されたときには、ステップ366において、エポック番号がブロックの エポック番号アトリビュートと比較される。新たなブロックを形成するときには 、新たなブロックのエポック番号アトリビュートが、新たなサーチの始めに増加 されたエポック番号の現在値に等しくなるようセットされる。更に、エポック番 号は、例えばロングワードであって、これが増加されるたびに、所与のプログラ ムの変換中に各サーチに対して独特の値を与える。それ故、ステップ366では 、現在ブロックか現在サーチに既に含まれている場合にのみ、現在サーチのエポ ック番号か現在ブロックのエポック番号アトリビュートに等しくなる。サーチプ ロセスに無限ループかできるのを防止するために、そして何らかの付加的な値を 見つけるおそれが減少することから、現在ブロックが現在サーチに既に含まれて いる場合には、現在ブロックのサーチか終了となる。
ステップ366からサーチを続けるべき場合には、現在ブロックのエポック番号 アトリビュートかステップ368においてエポック番号に等しくなるようにセン トされる。次いで、ステップ369において、現在命令のアドレスかそのブロッ ク内の最後の命令のアドレス1こ等しくなるようにセットされる。この点におい て、図24のサーチプロセスは、サーチルーチンか第1人カポインド361から 呼び出されたものであるか第2人カポインド362から呼び出されたものである かに関わりなく同じとなる。
ステップ370において、表示か現在命令を通して後方に「ブツシュ」さ托図2 5について以下で詳細に述べるように、その表示かめられる。ステップ37】で テストして、その表示がめられた場合には、後方サーチルーチンから復帰するこ とにより現在ブロックのサーチが終わりとなる。その表示がめられなかった場合 には、ステップ364.365.370及び371を繰り返し、表示かめられる まで又はブロックの開始部に到達するまで、ブロック内の命令を通して後方に表 示を次々にブツシュする。
ステップ364において、表示かブロックの開始部までブツシュされたと分かっ た場合には、ステップ372でその表示かサブルーチンアーギュメントを表して いるかどうかチェックされる。VAXアーキテクチャ−の場合には、定数をCと して、式’ @ (R12+C)”であるときに、表示がサブルーチンアーギュ メントを表す。サブルーチンのアーギュメントによって指定されたアドレスに対 する呼び出しは、一般に、手順又はファンクションパラメータに対する呼び出し である「コールバック」として知られている。この「コールバック」は、より詳 細には、実行転送命令のOPコードに基づいて、コールバックjsbback又 はjmpbackと称される。「コールバック」が見つかったときには、ステッ プ373においてその特性がオリジナルプログラムの像情報ファイルに記入さね へこれは、図31ないし33を参照して以下で述べるように、異なったプログラ ム間の相互依存性による矛盾を解決するために後で使用される。例えば、VMS システムサービスルーチン及びコンパイルされたBASrCプログラムでは著し い数のコールバックが見つけられている。
更に、ステップ374では、記号表示に対して考えられる値のサーチが、現在ブ ロックの先行ブロックをサーチすることによって続けられる。先行ブロックがプ ログラム入カポインド(即ち、外部像からの呼び出いとして定められる場合には 、記号表示に対する値が発呼プログラムによって決定されるかどうかを検査する ために、少なくとも1つの発呼プログラム像からのパラメータ値に関する情プロ グラム入カポインドへ通されるパラメータ値に関する情報に対してサーチされる 。
先行ブロックがプレースホルダーである場合には、手順又はサブルーチン呼び出 しの作用に関するプレースホルダー情報を参照し、これらの作用によって記号表 示かめられるかとうかを判断しm−この場合には、先行ブロックのそれ以上のサ ーチは不要である一一或いは手順又はサブルーチン呼び出しか記号表示に対して 何の作用もしないか又は既知の作用を及ぼすかを判断するm−この場合は、プレ ースホルダーの先行ブロックまで後方記号実行を続けることかできる。しかしな がら、プレースホルダー情報i報は、サブルーチンか未知の方法で記号表示1こ 作用することを指示する。この場合に、後方記号実行は、プレースホルダーによ り定められた入カポインドから続くライン内にあるサブルーチンの各々の考えら れる復帰点から始めて実行することができる。
先行ブロックか億円の呼び出しステートメントからのサブルーチン呼び出しであ るときには、ステップ373において「コールバック」特性か記入されたときだ け発呼ルーチンにおいてサーチがなされる。VAX/VMSプログラムの場合に は、CALLS手順の呼び出しに対してこのサーチを行うのが特に望ましい。
というのは、このような場合には、スタックにコールバックパラメータをブツシ ュする命令から記号表示か容易にめられるからである。又、発呼ルーチンに対す るサーチの有効性は、記号表示がアッセンブタ表示法で@(R12+N)“又は @N (AP)である場合のコールバックパラメータ番号Nを、CALLSステ ートメントによってスタックに実際に入れられたパラメータ番号Mと比較するこ とによりチェックでき、この番号Mは、CALLS#r今の類リテラル指定子で ある。CA L L Sステートメントの直前に、手順パラメータは、スタック 上でメモリ位置(N−4)SPにある。それ故、表示かCALLS命令を通して ブソソユされたとき、SPをAPと取り替え、表示変位から4を減算することに より、記号表示に対するCALLSオペレーションの作用か考慮される。CAL LS命令のアドレスにおいて請求めるへき記号表示は、−@ (R14+(N− 4))“である。サーチは、図24の後方サーチルーチンの第2人カポインド3 62に対する繰り返し呼び出しによって開始されるか、これは、実行復帰の際に 池の先行ブロックのサーチを続けるために後方サーチによって必要とされる情報 をセーブした後である。呼び出し及び復帰は、次のようにコード化される。
(IF CALLBACK THEN PTR2) IF CALLING BLOCK(LAST [N5TR)=CALLS T l(EN(PLISH(BLOCK、 EXPR,PTRl、 PRED BL OCK。
PTR2) PTR2)) εLSE SET tJNKNOWN FLAG先行ブロックかノーマルなブロ ックである場合には、次のように繰り返しサーチすることかてきる。
IF PRED BLOCK (TYPE)−NORMAL醒PUSH(BLO CK、 EXPR,PTRI)CALL BACKWARD 5EARCHPO P(BLOCK、 EXPli、 PTl?I)全ての先行ブロックか検査又は サーチされた後に、後方サーチルーチンが終了となり、実行復帰する。
図25には、記号表示を手前の命令を通して後方に「ブツシュJして、手前の命 令の後に記号表示か育していたものと同じ値をその命令の前に育するような変更 した表示を得るためのルーチンのフローチャートか示されている。このルーチン は、例えば、図24のステップ370で呼び出される。このプロセスは、命令O Pコードに大きく依存している。プログラムカウンタ以外のメモリ又は汎用レジ スタの内容に直接作用しないような命令OPコードは、定数、レジスタ指定子及 びメモリアクセスファンクションのみを含む記号表示の値に影響しない。通常の 場合にプログラムカウンタの変化する値は、記号表示の値に影響しない。という のは、表示をブツシュする前には、表示かプログラムカウンタを指定するレジス タ指定子を有しておらず、表示を通して命令をブツシュするプロセスかプログラ ムカウンタを指定するレジスタ指定子を表示に加えようとする場合には、一定の アドレス値に置き換えることによりそれか除去されるからである。汎用レジスタ 又はメモリの内容に直接影響しないか不定の仕方で影響すると分かっている命令 OPコードは、「未知」の記号値を見つけてプロセスを終了させる。
OPコードは汎用レジスタ及びメモリの内容に複雑な仕方で影響するので、各O Pコードの作用に関するtW報を、OPコードによってアドレスされたデコード テーブルに予め記憶することか所望される。このデコードテーブルは、各OPコ ードに対して書かれた別々のルーチンのスタートアドレスを含むことができる。
しかしなから、説明上、以下では同様の機能を実行するOPコードのルーチンの 共通の特徴について述べることにする。それ故、UjJ26のデコードテーブル 構成は、種々の経路に沿って分岐して各OPコードに対して特定の動作を実行す るようにより一般的な手順によって使用することのできる多数のルーチン及びO Pコート情報を備えている。このような一般的な手順は、各OPコードに対する 一般的なルーチンに取り入れられる経路を考慮することにより各OPフードに対 する別々なルーチンへと拡張できることを理解されたい。
図25のフローチャートの第4ステツプ381では、テーブルの入力を得るよう にデコードテーブルがアドレスされる。ステップ382では、その入力かゼロと 比較され、命令か、そのOPコードのみにより、許容できる記号表示の値に対し て何らかのあり得へき作用をもつことかできないかどうか判断する。もしてきな ければ、その実行は表示か分析されないまま復帰となる。
デコードテーブルに対して考えられるフォーマントか図26に示されている。
ロングワードテーブル入力386にエンコードされるのは、通常ないような作用 を有するOPコードのための特殊な分析ルーチンに対する変位と、OPコードの ためのメモリレファレンス分析ルーチンに対する変位387と、OPコードのた めのレジスタ分析ルーチンに対する変位388と、OPコードが意味するデータ 形式及びオペランドに関するエンコードされた情報389とである。OPコード のためのエンコードされたデータは、例えば、含意ルジスタ行き先コード391 と、データ形式コード392と、スタックポインタの含意自動減少を指示するフ ラグ393と、含意メモリオペレーションを指示するフラグ394と、スタック ポインタの含意自動増加を指示するフラグ395とを含む。含意レジスタフード は、例えば、通常の場合には値Oを育し、RO及びR1か影響を受けることを指 示するために値lを育し、ROないしR3か影響を受けることを指示するために 値2を育し、そしてROないしR5か影響を受けることを指示するために値3を 有する。データ形式コードは、バイト、ワード、ロングワード、りオドワード又 はオクトワードのいずれかを指示する。
図25のフローチャートに戻ると、命令に対する一連の中間オペレーションを通 して後方に表示かブツシュされる。これらの中間オペレーションは、逆の順序で 、自動増加、OPコードオペレーション及び自動減少である。ステップ382に おいて、自動増加指定子に対して命令がスキャンされる。表示において指示され たレジスタRxを使用する各々の表現及び含意自動増加指定子に対し、その表示 におけるレジスタ指定子Rxは、Rx+Cと置き換えられ、ここでCは、OPコ ードデータ形式がバイトであるかワードであるかロングワードであるかりオドワ ードであるか又はオクトワードであるかに基づいて各々1,2.4.8又は16 となり、そしてもし可能であれば、定数の乗算及び加算によって表示が簡単化さ れる。例えば、表示か@ (R1+R7+4)+@ (R3+3)+RI+R6 +7“であり、命令が自動増加指定子’(R1)十″を含み、モしてOPコード データ形式がりオドワードである場合には、表示か’@(R1+R7++2)+ @ (R3+3)+R1+R6+15″に変更される。
ステップ402において、デコードテーブルからのデータの値が負でないときに 、実行はステップ403の特殊なレジスタ分析ルーチンへ分岐する。この特殊な 分析ルーチンヘジャンプするために、例えば、次のコートを使用することかでき る。
MOVE 3(R1)、R2:R1contains TABLE+4零〇PC ODE卸DL PC,R2,R2 MP R2 特殊なレジスタ分析ルーチンの例は、ステップ374について上記したCALL Sに対するルーチンであり、N5M本4の場合(ここで、MはCALLS命令に よって指定されたパラメータの数である)、RI4−4″が表示“@(R12+ N)”におけるRI2の発生に置き換えられ、そして表示か簡単化されて、”  @ (R14+ (N−4))“が得ら札さもなくば、 「未知」の値に復帰さ れる。
ステップ404において、表示がメモリアクセスオペレーションであるときに実 行はステップ405へ分岐する。ステップ405において、各メモリアクセスフ ァンクションのアーギュメントを命令に対する表現又は含意メモリ行き先指定子 のアドレスl二合致させる試みがなされる。合致を生じさせてメモリアクセスオ ペレーションの値に影響を与えることかできる場合には、実行かステップ406 へ分岐する。ステップ406において、実行は命令OPコードに対するメモリ分 析ルーチンへジャンプし、特定のOPコードのためのメモリ分析ルーチンに対す る変位は、例えば、デコードテーブルにおける[メモリ分析ルーチンのための変 位」 (図26の387)となる。
メモリ分析ルーチンは、含意メモリ行き先を伴うOPコードのためのルーチンと 、表現メモリ行ぎ先結果指定子を使用するOPコードのためのルーチンとを含ん でいる。含意メモリ行き先を伴うOPコードは、例えば、PUSHAB及びPU SHLを含み、これは各々アドレス又はロングワードをスタックに対してブツシ ュする。PUSHABx又はPUSHLxに対する含意メモリ行き先指定子は0 (SP)であり、これは、式’R+4”のメモリレファレンスアーギュメントに 確実に合致する行き先アドレスを指定する。合致か確実な場合には、記号表示に おいて次のような置き換えが行われる。即ち、合致する’@(R14)“項にX を置き換え、そして全てのRI4レジスタ指定子に’R14−4”を置き換える 。
表現メモリ行き先指定子を有する命令に見い出されるOPコードの例は、MOV EL x、yのようなデータ転送命令であり、ここでyはメモリ行き先指定子で ある。この場合に、命令の結果Xは、表示の各合致するメモリレファレンスアー ギュメントにおいてyと置き換えられる。例えば、命令がMOVE R1,8( R2)でありそして表示が’ @ (R2+8)+R1+7である場合には、表 示か2*RI+7に変更される。
表現メモリ行き先指定子とメモリファンクションアーギュメントとの合致は、O Pコードのデータ形式によっても左右される。例えば、りオドワード又はオクト ワードデータ形式を育する命令は、2つ以上のロングワードに合致する。例えば 、命令CLRQ (Rx)は、りオドワードデータ形式であり、そのメモリ行き 先指定子は、”@ (Rx)″及び”@ (Rx+4)”に合致し、各々の場合 にメモリファンクションはゼロに減少される。又、ロングワードアドレス境界か らのアドレス不整列かあるときにあり得る合致も重要であり、この状態は、例え ば、命令CLRL (Rx)ど@ (Rx+1)”との合致であり、この場合は 、所望のロングワードアドレスの1バイトのみが一定値0に分析される。
表示内のメモリオペレーションのアーギュメントに合致するようにメモリ行き先 指定子によって指定されたアドレスについて考えられはするが確かではないとき にステップ406において設計の選択が生じる。この状態は、例えば、メモリ行 き先指定子が(R1)であって、表示がメモリアクセスファンクション@(R2 )を育する場合であり、即ち、手前の命令がMOVE R1,R2の場合に合致 か生じる。メモリ行き先指定子は、メモリ行き先指定子によって指定されたメモ リ行き先アドレスを表す別の記号表示に変換することができ、後方記号実行を行 って、上記他の記号表示を、表示内のメモリオペレージ3ンのアーギュメントに 確実に合致するか又は合致しない形態に変換するよう試みることができる。しか しながら、異なった行き先アドレスを表す多数の表示に対して後方記号実行を同 時に行うと、異なった行き先アドレスの各々に対して付加的なエポック番号とエ ポック番号アトリビュートとか必要となるので、サーチが複雑なものになる。
それ故、多数の記号表示に対するサーチの程度を制限することが所望される。こ れは、例えば、サーチを】つの付加的な記号表示に制限するか、又は現在ブロッ ク及びこれとは異なる先行ブロックにおける1つの付加的な記号表示に制限する ことによって行われる。いずれにせよ、合致か考えられるか合致か確実ではない という結論に達する場合には、図25のステップ406の結果は、それを分析す るが、一定の値に分析するのではない。それ故、実行はステップ407において ステップ、S 08に分岐し、そこで「未知」のフラグかセットされ、実行か復 帰する。
又、記号表示は「未知」の結果にも分析され、この場合には、記号表示のフォー マットで命令の作用を表すことか困難又は不可能である。この状態の→1は、排 他的オアオペレーンコンである。手前の命令か2つのレジスタの内容をスワップ するものでない限り、排他的オペレーションの作用は不定となる。例えば、レジ スタR1とR2とのスワップは次のようにフード化することかできる。
X0RL2 R1,R2; R2←RI XORR2XDRL2 R2,R1;  R1←R2XORRIXORL2 R1,R2: R2−RI XORR2ス テップ409においては、ステップ406で表示か一定値に分析されるかどうか に基ついて実行か分岐される。プログラムカウンタ指定子を除く全てのレジスタ 指定子か表示から削除されるときに表示を一定値に分析することかできる。
それ故、レジスタ指定子か除去されるか又は分析ルーチンにおいて変更されたと きには、表示を一定値へ分析する試みかなされる。これは、図27について以下 に述べるようなルーチンを呼び出すことにより行うことかてきる。
ステップ404において表示かメモリアクセスファンクションを含まないと決定 されたとき、又はステップ405において合致のおそれのあるメモリ行き先指定 子を命令かもたないと決定されたときに、命令か汎用レジスタの内容に影響する ことか考えられる。通常の場合には、命令か表現レジスタ直接行き先指定子を存 するとき又はある含意レジスタ直接行き先指定子を有するときに、命令か汎用レ ジスタの内容に影響を与える。しかしなから、命令か表現レジスタ直接行き先指 定子を育するときには、OPコードデータ形式がりオドワード又はオクトワード であれば、表現指定されたレジスタ以外のレジスタに影響を与える。
レジスタの内容は命令によって若干複雑に影響されるので、OPコードレジスタ 使用、データ形式及び行き先レジスタ番号の種々の考えられる組み合わせに対し てレジスタ使用マスクか予め記憶されるようなデコードテーブルを使用すること かできる。レジスタ使用マスクは命令に対してフェッチすることができ、これを 用いて、命令か記号表示に影響を及ぼし得るかどうかを速やかに判断することか できる。例えば、図26に示すOPコードレジスタ使用情報389をエンコード する場合には、レジスタブフードテーブルのアドレスをOPフードレジスタ使用 のバイトから形成することかできる。これは、レジスタ直接行き先か命令に対し て指定されるかどうかをチェックし、もしそうならば、行き先レジスタ番号をデ ータ形式に添付させて、レジスタ使用マスクのテーブルに対するインデックスを 形成することにより行われる。各々のレジスタ使用マスクは、影響を受けるレジ スタを指示するようにセットされるビットと、命令によって影響されないレジス タを指示するようにクリアされるビットとを存するワードである。又、ステップ 410において、記号表示に使用されるレジスタ指定子を指示するビットをセッ トすることにより、記号表示に対するレジスタ使用マスクがワードから形成され る。例えば、最上位ビット位置がセット又はクリアされてR15の存在を指示し 、そして最下位ビット位置がセット又はクリアされてROの存在を指示すると仮 定すれば、表示”@ (R3+4)+R12+R4+3”に対するレジスタ使用 マスクは、00010000000011002となる。
ステップ411では、命令の行き先レジスタマスクと記号表示のレジスタ使用マ スクとの間で論理アンドか計算さ江命令によって影響される表示におけるレジス タ指定子を示すレジスタ競合マスクか得られる。ステップ412では、このレジ スタ競合マスクかゼロと比較さL特定の命令OPコードに対するレジスタ分析ル ーチンを使用すべきかどうか判断される。もしそうならば、ステップ413にお いて、レジスタ分析ルーチンは、命令OPコードの作用を考慮しておそらく表示 を一定値へ分析するために記号表示を変更すべきであるか、或いはその作用か不 定であって表示を「未知」の値へ分析すべきであるかどうかを判断する。
例えば、命令かCLRLであるか又はCLRQ命令である場合には、レジスタ競 合マスクによって指示された各レジスタ指定子の各発生が記号表示から除去され る。MOVE Rx、Ry命令の場合には、レジスタRxに対するレジスタ指定 子か記号表示におけるレジスタ指定子の各発生に置き換えられる。しかし、MO VQ Rx、Ry命令の場合には、レジスタ競合マスクによって指示された各レ ジスタRzかレジスタ指定子R(z+y−XJに置き換えられる。換言すれば、 RxはRyi:fitき換えられるが、Rx+1もRy+Iに置き換えられる。
分析ルーチンの1つによって表示か分析されない場合には、ステップ414にお いて、記号表示で指定されたレジスタに影響を与える自動減少オペレーションを 通して記号表示か「ブツシュ」される。記号表示で指定されたレジスタRxを用 いた各表現及び含意自動減少指定子については、その表示内のレジスタ指定子R xかRx+Cに置き換えられ、ここて、Cは、○Pコードデータ形式が)\イト であるか、ワードであるか、ロングワードであるか、クオドワードであるか又は オクタワードであるかに基づいて、各々、−1、−2、−4、−8又は−I6で あり、そして表示は、もし可能であれば、定数の乗算及び加算によって簡単化さ れる。
命令を通しての表示の「ブツシュ」を複雑な表示フォーマット及び複雑な命令に 対して一般的に述へたか、後方記号実行のプロセスは、VAX/VMSプログラ ムにおいて計算行き先アドレスを分析するのに非常に有効であることか分かった 。これは、たとえ、図21の簡単な表示フォーマットか使用されても、そして分 析ルーチンにより「未知」の値を分析しても、命令かMOVAB、PUSHAB 、MOVL、PUSHL、CLRL、CLRQ又はCALLSでない限り、そう である。
図27は、記号表示内の項目を分析するためのルーチンのフローチャートである 。この項目は、例えば、図21の固定フォーマットで示されている。
第1ステツプ421では、レジスタフラグかセットされた場合に実行かステップ 422へ分岐し、さもなくば、実行かステップ423へ続く。ステ、tブ423 ては、レジスタ番号か15と比較される。レジスタ番号か15でなく、従って、 プログラムカウンタの更新した値を指示しない限り、表示を分析することかでき ない。それ故、レジスタ番号か15でないときには実行か復帰し、さもなくば、 実行かステップ424へ続く。
ステップ424では、行き先アドレスか変位と更新されたPCの値との和として 計算される。VAX命令アーキテクチャ−では、現在命令がPCを指定するレジ スタ直接モードの表現ソース指定子を有するときに、記号実行のプロセスにより PCレジスタ指定子R+5か記号表示に加えられる。この場合、更新されたPC の値は、現在命令においてPCを指定した指定子の直後のバイトのアドレスであ る。
ステップ425ては、メモリアクセスフラグが検査される。メモリアクセスフラ グかセットされない場合には、アドレスかオリジナルプログラムにおける実行転 送命令の考えられる行き先となるべきである。VAX/VMSプログラムの場合 には、このようなPC相対アドレスがプログラムの命令メモリエリア(図14の 187)になければならない。これはステップ426においてチェックされ、ア ドレスが命令エリア内にあることか分かると、そのアドレスはステップ427に おいて行き先のリストに入れられ、表示が分析された状態で実行が復帰する。
さもなくば、ステップ428において警報メツセージが発せられる。更に、命令 メモリアドレス以外のアドレスは無効と考えられるので、行き先リストには加え られない。そうてはなくて、 「未知Jのフラグがステップ429においてセッ トされ、記号表示か分析された状態で実行が復帰する。
行き先かPC相対間接アドレスであるとき実行はステップ430に分岐する。
VAX/VMSプログラムでは、PC相対間接アドレスは、プログラムメモリの 固定ベクトルエリア(図14の188)に含まれた固定ベクトルであるときだけ 有効であると考えられる。ステップ424で計算されたアドレスがプログラムメ モリの固定ベクトルエリアに入り、定義された固定ベクトルのリスト又はテーブ ルに含まれる場合には、ステップ423においてアドレスされた固定ベクトルか メモリから読み出され、そしてステップ433において固定ベクトルが行き先の リストに入れられ、記号表示か分析された状態で実行が復帰する。ステップ42 4で計算されたアドレスがプログラムメモリの固定のベクトルエリアに入らない か、又は定義された固定ベクトルのリスト又はテーブルに見つからない場合は、 ステップ431て警報か発せら托ステップ429で「未知」のフラグかセyhさ れ、記号表示か分析された状態で実行が復帰する。
ステップ421においてレノスタフラグかクリアされたことか分かりそしてメモ リアクセスフラグもクリアされたことが分かった場合には、行き先か絶対アドレ スとなる。VAX/VMSプログラムの場合には、絶対アドレスは、予め定めら れたシステムベクトル入カポインドであるときだけ有効であると考えられる。
それ故、ステップ434ては、予め定められたシステムベクトル入カポインドの リスト又はテーブルにおいてルックアップか実行される。アドレスか予め定めら れたシステムベクトル入カポインドである場合には、ステップ427においてこ れか行き先のリストに加えら札記号表示が分析された状態で実行か復帰する。
さもなくば、ステップ435において警報が発せられ、ステップ429において 「未知」のフラグかセットされそして記号表示か分析された状態で実行が復帰す る。
ステップ422てメモリフラグがセットされたことか分かると、記号表示によっ て指示された行き先か絶対間接アドレスとなる。VAX/VMSプログラムにお いては、このようなアドレスが無効であると考えられる。それ故、ステップ43 6において警報が発せらね、ステップ429において「未知」のフラグかセント され、そして記号表示が分析された状態で実行か復帰する。
図28及び29は、図13のステップ164を参照することにより上記したブラ ウンプルコードと、図」4のプログラムメモリマツプ181の命令メモリエリア +87とに対してスキャンを実行する手順のフローチャートである。このスキャ ンの結果は、命令メモリエリア(図14の187)における「プラウシブルコー ドJエリア(図14の197)を識別することである。特に、図28及び29の 手順は、命令メモリエリア(図14の187)の中のエリアで、流れ図のブロッ クに含まれるデコートされた命令を含むメモリのエリア(194,195,19 6)を含まないようなエリアをスキャンする。流れ図のブロックに含まれたデコ ードされた命令は、簡単に「既知のコード」と称する。命令メモリエリア(図1 4の187)の中のエリアで、既知のフードを含まないエリアは、 「未知のコ ードエリア」と称する。それ故、図28及び29の手順は、[未知のコードエリ ア」をスキャンして、 「ブラウンプルコード」を見つける。ブラウンプルコー ドのスキャン中に、ブラウンプルコードの流れ図が形成される。図28の最終ス テップ499に3いてブラウンプルコードのスキャンか終了すると、既知のコー ド(KNOWN C0DE)の全バイト数か、既知のコートの流れ図における全 ての基本ブロックに対して基本ブロック記述子の「バイト長さ」アトリビュート の値を加算することにより計算さね、そしてブラウンプルコード(PLAUSI BLE C0DE)の全バイト数か、ブラウンプルコードの流れ図における全て の基本ブロックに対して基本ブロック記述子の「バイト長さ」アトリビュートの 値を加算することにより計算される。次いで、見つかったコードの割合か次のよ うに計算される。
% C0DE FOL、’ND = KNO謝 C0DE / (囮0鼎 C0 DE + PLAUSIBLE C0DE)ブラウンプルコードのスキャンは、 プログラム内の可変数のアドレス可能なメモリ位置に含まれた命令を含む可変長 さ命令セットにおいて法律命令を確認し、3つの異なったスキャンモード間で切 り換えを行うのか好ましい。第1のスキャンモード(図28のステップ500な いし510)においては、未知のコードエリア内の各々のアドレス可能なメモリ 位置でスタートする法律命令に対して未知のコートエリアをスキャンする。第1 のスキャンモードにおいて法律命令が見つかったときには、スキャンが第2のス キャンモード(図28のステップ511ないし518)へ切り換わり、第1スキ ヤンモードで見つかった法律命令の直後のアドレス可能なメモリ位置を検査する 。第2のスキャンモードは、実行転送命令までを含む一連の連続する法律命令を 有する1つの完全な命令ブロックをサーチする。この第2のスキャンモード中に 法律命令が見つかった場合には、スキャンか第1のスキャンモードに切り換わり 、第1のスキャンモードにおいて既に見つかっている法律命令の第1のアドレス 可能なメモリ位置の直後にあるアドレス可能なメモリ位置からスタートする。こ の第2のスキャンモード中に法律命令が見つからなかった場合には、スキャンか 第3のスキャンモード(図29のステップ521ないし536)に切り換わり、 全ブロックの終わりに実行転送命令に対する既知の有効行き先アドレスかあるか どうかチェックされ、もしあれば、その既知の有効行き先アドレスで始まる有効 命令かあるかどうかチェックされる。既知の行き先アドレスは、これがプログラ ムのアドレス範囲を越えるとき、又はプログラムの既に見つかった命令の中間に あるときには、無効であると考えられる。
第3のスキャンモートにおいて既知の有効行き先アドレスで始まる有効命令かあ るという結論を得た場合には、ブロック全体かブラウンプルコードであると考え られる。
図28の第1ステツプ500において、第1スキヤンモードのスキャンポインタ は、メモリの命令エリアにおける最小のアドレスにセットされ、変数P L A  USIBLE C0DE及びKNOWN C0DEかクリアされる。次いて、 スキャンかステップ501て始まる。スキャンポインタによってテーブル(図1 7の224)か指示され、スキャンポインタか既知のコードを指すかどうか判断 される。もしそうてあれば、スキャンポインタかステップ503において次々に 増加され、やがて、ポインタかメモリの命令エリア外に出たことかステップ50 4でテストされて終了すべきブラウンプルコードのサーチか行なわれるか、又は スキャンポインタが未知のコードを指すことになる。スキャンポインタか未知の コードを指したときには、ステップ505において実行か続けられる。
ステップ505では、スキャンポインタによってアドレスされたメモリ位置の内 容がフェッチされ、発見的テーブルに対するインデックスとして使用される。
このテーブルの入力は、ゼロと比較され、第1スキヤンモードがスキャンポイン タによりアドレスされたメモリ位置をスキップすべきであるかどうかの判断か行 われる。例えば、VAX命令をスキャンするときには、各々のアドレス可能な位 置かデータのバイトを保持し、この場合、発見的テーブルは、256個の異なる 入力を含む。
発見的テーブルは、特定の命令アーキテクチャ−1典梨的なデータ構造体及びプ ログラムに関連したシステムアーキテクチャ−の特性及び特徴に基づいて予めプ ログラムされる。
命令アーキテクチャ−がユーザモードプログラムで許可されない特権命令を有す る場合には、これらの特権命令がステップ506においてスキップされる(さも なくば、これらが発見的テーブルのルックアップによって検出できない場合には 、単一のアドレス可能なメモリ位置の内容によって独特に識別できないので、ス テップ510において非法律的とみなされる)。
命令を含まないプログラムのデータ構造体及び他のエリアは、しばしばクリアさ れる。この場合に、第1スキヤンモートでのスキャンは、全てのゼロを含むアド レス可能なメモリ位置に対してスキップしなければならない。
可変長さの命令アーキテクチャ−が非常に複雑な場合には、単一のアドレス可能 なメモリ位置に命令が含まれることはめったにない。VAX命令アーキテクチャ −はこれに相当する。この場合に、第1スキヤンモードでのスキャンは、単一の アドレス可能なメモリ位置に含まれためったにない命令として識別された内容を 有するアドレス可能なメモリ位置をスキップしなければならない。
はとんとの文字データが、命令アーキテクチャ−にも使用されるコードによって プログラムに表示される場合には、第1のスキャンモードは、命令ではなくて一 連の文字データを表すことの多いコードをスキップしなければならない。第1の スキャンモードは、一連の少なくとも4つのプリント可能なASCII文字をス キップするのか好ましい。一連のプリント可能なASCI I文字に対するこの テストはステップ502で行われる。このような一連の文字が見つかった場合に は、ステップ503においてスキャンポインタか増加さ沃さもなくば、ステップ 507において実行か続けられる。ステップ502では、例えば、スキャンポイ ンタにより指示されたプログラムアドレスと、スキャンポインタに1,2及び3 を加えたアドレスとに含まれたデータが、プリント可能なASCII文字を指示 するようにセットされたフラグを含むテーブルをインデックスするのに用いられ 、さもなくば、クリアされる。これら4つのプログラムアドレスの各々に含まれ たデータかプリント可能なASCI I文字であるときには、一連の文字が見つ かると、実行をステップ507へ続けるのではなく、ステップ503へ分岐させ る。それ故、ステップ502は、次のようにコード化することができる。
IF X、 NE、 OTHEN GOTO5TEP 503GOTO5TEP  507 メモリ位置をスキップするときには、ステップ503においてスキャンポインタ か1アドレス位置だけ増加される。おそらく、これはスキャンポインタをメモリ の未知のフードエリア外へ進める。これは、ステップ504において、スキャン ポインタを命令メモリエリアの最大限界と比較することによりテストされ、スの コードへ進んだかどうか判断される。スキャンポインタが命令メモリエリア外へ 進んだ場合には、ブラウンプルコートに対するスキャンか終了となり、見つかっ たフードの割合が最終ステップ499において計算される。スキャンポインタか 既知のコードにある場合には、実行ループかステップ503へ戻り、スキャンポ インタを1メモリ位置だけ増加し、既知のコードにわたってスキャンさせる。
スキャンポインタが未知のコードにある場合には、実行かステップ505へ戻っ て、次の未知のコードメモリ位置の内容か検査される。
未知のコードがステップ506においてスキップしないときには、ステップ50 7において命令デコードポインタがスキャンポインタにセットされ、ステップ5 08において、命令をデコードする試みがなされる。ステップ509ては、例え ば、命令のOPコードかフェッチさt′LS指定子の数を保持すると共にOPコ ートに対するデータをデコードするためのテーブルに対してインデックスとして 使用され、そして各指定子かフェッチされ、デコードされる。ステップ509に おいては、命令デコードポインタかデコート中に増加されるときにステップ50 2及び504と同様にテストされ、命令デコードポインタかメモリの未知のコー ドエリア外に進められたかどうか判断される。もしそうならば、実行はステップ 503へ分岐し、さもなくば、ステップ510において、非法律命令OFコート 又は非法律指定子かデコード中に検出された場合にステップ503へ分岐する。
ステップ508ないし510で法律命令をデコートするときには、実行ルーチン かステップ511で始まる第2のスキャンモードで継続される。ステップ511 では、アドレステーブル(図」7の224)の1つ又は複数の入力が、デコート された命令のアドレス位置によってインデックスされ、これらのテーブル入力は 、ブラウンプルコート命令の開始部及びデコードされた命令の中間部を指示する ようにマークされる。次いで、ステップ512では、デコードされた命令に続く アドレスでアドレステーブルかインデックスされ、既にデコードされた命令のア ドレスであるかどうか判断され、もしそうであれば、それはデコードされた基本 ブロックの開始部であり、この場合、ブラウンプルコートのスキャンか図29の ステップ535において続けられる。さもなくば、ブラウンプルコードのスキャ ンは図28のステップ513において続けられる。
ステップ513では、命令デコードポインタが増加さね、別の命令をデコードす る試みかなされる。しかしながら、ステップ514でテストされて命令デコード ポインタか未知のコードメモリエリア外へ進められたとき、或いはステップ51 6でテストされて非法律OPコード又は指定子が見つかったときには、デコード プロセスか終了となる。ステップ514又は516でデコードプロセスか終了と なると、テーブル(図17の224)かステップ517でクリアさね、デコード された命令かスキャンポインタのアドレスまで戻されることを指示すると共に実 行ループはステップ503まで戻り、第」のスキャンモードでスキャンを続ける 。
第2のスキャンモードのステップ516で法律命令がデコードされると、ステッ プ518において、実行転送命令かデコードされない限り、実行がステップ51 1へ分岐して戻さ托実行命令までを含む付加的な命令をデコードする試みがなさ れる。ステップ518において実行転送命令が見つかると、ブラウンプルコート に対する第3のスキャンモードか図29のステップ521で始まる。
図29を参照すれば、ステップ521において、テーブル(図17の224)の 1つ又は複数の人力が実行転送命令のアドレス位置によってインデックスされそ してこれらテーブル入力は、ブラウンプルコート命令の開始部及び命令の中間部 を指示するようにマークされる。ステップ522ては、行き先指定子がテストさ れて、計算行き先アドレスであるかどうか判断され、もしそうであれば、ステッ プ523において、後方記号実行がスキャンポインタへ戻るよう試みられ、行き 先として一定値が得られる。ステップ524でテストされて、未知の値が得られ た場合には、実行か図28のステップ517へ分岐し、スキャンポインタまでの 全フードブロックがリジェクトされると共に、第」スキャンモードでスキャンか 続けられる。
ステップ525ては、行き先アドレスか、図27に示したように、例えば、絶対 アドレス、絶対間接アドレス、相対アドレス又は相対間接アドレスであるかに基 ついて、その有効性がチェックされる。又、行き先アドレスは、テーブル(図1 7の224)をインデックスすることにより示されるように、メモリの命令エリ ア内にあるが既にデコードされた既知の命令又はブタウシブル命令の中間にある 場合には、無効とみなされる。行き先アドレスが無効の場合には、実行か図28 のステップ517へ分岐し、スキャンポインタまでの全コードブロックかリジェ クトされると共に、第1スキヤンモードでスキャンが続けられる。
ステップ526では、変数END OF BLOCKが命令デコードポインタに 等しくセットされる。ステップ527では、有効な行き先が外部アドレスである 場合に、実行がステップ528へ分岐する。ステップ529においては、テーブ ル(図17の224)をインデックスすることにより示されるように、有効な行 き先か既にデコードされた命令のアドレスである場合に実行かステップ528へ 分岐する。ステップ528に達すると、スキャンポインタまで戻る全コードブロ ックかブラウンプルコードとして有効化される。それ故、ステップ528におい て、ブラウンプルコートのブロックに対してブロック記述子か形成される。この 基本ブロック記述子に含まれるのは、ブロック内のバイト数にセットされたアト リビュートrバイト長さ」であり、これはスキャンポインタとEND 0FBL OCKとの差に1を加えたものとして計算される。
ステ、・ブ527において有効行き先アドレスが内部アドレスであると決定され そしてステップ529においてその内部アドレスか既にデコードされた命令にな いと決定されたときには、行き先アドレスは、既にデコードされた命令ではない 命令メモリのエリアになければならない。行き先アドレスから始めて命令をデコ ードできる場合には、既にデコードされた全コードブロックかブラウンプルコー トであると考えられ、さもな(ば、既にデコードされた全コードブロックはブラ ウンプルコートとはみなされない。それ故、ステップ531において、命令デコ ードポインタは行き先アドレスにセットされそして命令をデコードする試みかな される。ステップ532及び533において、命令デコードポインタか既にデコ ートされた命令へ進められるか、或いは非法律OPコート又は指定子かデコード される場合は、デコードプロセスが不首尾に終わると考えられる。さもなくば、 法律命令かデコードされたときに、実行がステップ528へ続けられ、スキャン ポインタから図28のステップ518で見つかった実行転送命令のアドレスまで の基本コートブロックに対してブロック記述子が形成される。
ステップ530では、ブラウンプルコードの流れ図を形成し続ける試みがなされ 、これは、図28のステップ518で見つかった実行転送命令の行き先において 開始される。これは、ステップ236で始めて図18の流れ図形数ルーチンを呼 び出すことによって行われる。しかしながら、ブラウンプルコートの流れ図は既 知の流れ図と混同しないのが好ましく、従って、既知のコードのみが変換される 。例えば、ブラウンプルコートのブロックは、既知のコードのブロックに対する 後続及び先行ブロックのリストに加えられず、そして既知のコードのブロックは 、未知のコードのブロックに対する後続及び先行ブロックのリストに加えられな い。いずれにせよ、基本ブロック記述子は、基本ブロックを既知のコート又はブ ラウンプルコートとして識別するアトリビュートを有する。
ブラウンプルコートの流れ図の形成か終了するときには、流れ図構成プロセスに より何らかのブラウンプルコートが見い出せなかったことか依然として考えられ る。それ故、ステップ530では、スキャンポインタがEND OF BLOC Kにセットされる。更に、図28のステップ512において、ブラウンプルコー トからの実行経路か既知のコードのブロックに延びることが分かると、ブラウン プルコートのスキャンを続けて更に別のブラウンプルコートを見つけなければな らない。この場合に、ステップ535において、END OF BLOCKか命 令デコートポインタにセットされ、そしてステップ536において、スキャンポ インタからEND OF BLOCKまでのブタウノブルコードブロソクに対し ブロック記述子か形成されるか、流れ図形数ステップ530はスキップされ、ス テップ536の後にステップ534か実行される。
この点にどいて、第3のスキャンモードか終了され、図28のステップ503に おいて第」スキャンモートでスキャンか続けられる。
図30を参照すれば、実行ログファイル(図9の88)を用いてオリジナルプロ グラム内の変換されていない命令を探索する助けとする方法かフローチャートで 示されている。上記したように、そして図30のステップ541に示したように 、オリジナルプログラムが変換され、トランスレータ−はプログラムに対する像 情報ファイルを発生する。次いで、ステップ542において、変換されたプログ ラムか(図9のRTSCコンピュータ50により)インタープリタ−及びオリジ ナルプログラムに関連して実行される。この実行中に、変換されたプログラムか らインタープリタ−へ実行か切り換わるときに情報か実行ログファイルに記録さ れ、インタープリタ−は変換されないコードに対して計算行き先アドレスを決定 する。インタープリタ−は、例えば、計算行き先アドレスかめられていない実行 転送命令のオリジナルプログラムにおける原点アドレスを識別する情報と、オリ ジナルプログラムにおけるその行き先アドレスに対して計算された値とを記録す る。好ましくは、この情報はオリジナルプログラムにおける原点アドレスと行き 先アドレスの対の形態である。
ステップ542において変換されたプログラムを実行した後に、ステップ543 において実行ログファイルか検査され、インタープリタ−か呼び出されて変換さ れていないコードの位置を決定したかどうかの判断かなされる。もしそうであれ ば、ステップ544において、プログラムの像情報ファイル及び実行ログファイ ルを用いてオリジナルプログラムが変換される。例えば、流れ図を形成する前に 、実行ログファイルの行き先アドレスかデコードされていないブロックのりスト 225に加えられる。流れ図を形成した後に、分析されていない入カポインドで 始まるブロックの先行ブロックか検査されて、各原点アドレスを含むブロックを 備えているかどうかの判断かなされ、もし備えていなければ、先行ブロックへの リンクが加えられ、これらの新しいリンクを通して後方記号実行か再び繰り返さ れる。それ故、トランスレータ−は原点アドレス及び行き先アドレスを用いてオ リジナルプログラム内で考えられる実行経路を検査し、これらの経路は、オリジ ナルプログラムの第1の変換中に発見されなかったもので、且つ変換されたプロ グラムの実行中又はオリジナルプログラムの変換されなかった部分の解読中に取 り上iぞられなかったものである。
プログラムの次々の再変換を助けるために、流れ図データ構造体(図17の21 1)及び変換されたプログラムのテーブル224をファイルに記憶することかで きる。この場合、再変換は、オリジナル流れ図の形成か終了したところで開始す ることかできる。流れ図を形成し続けるために、テーブル224かオリジナルア ドレスでインデックスされ、それらを含むブロックが見つけられる。次いで、実 行ログファイルからの行き先アドレスが、各々のオリジナルアドレスを含むブロ ックを備えた先行ブロックのリスと共に待ち行列(図17の225)にロードさ れる。次いで、流れ図の形成か図」8の第1ステツプ229において再開される 。 。
オリジナルプログラムかステップ544において再変換された後に、その再変換 されたプログラムかステップ542において実行される。実行から再変換までの 情報のこのフィードバックは、変換されたプログラムを各々実行した後に行なっ て、実際に探索されたオリジナルプログラムにおける全ての命令が変換されるよ うにすることか好ましい。
図31には、プログラムを同時に変換することか望ましくないか又は不可能であ るような状態、例えば、図17に示すデータ構造体か変換を行うコンピュータの ランダムアクセスメモリの容量を遥に越えるような状態において、相互に依存す るプログラムを変換するための手順か示されている。2つのプログラムは、それ らか互いに呼び出し合うときに相互に依存する。これらの相互依存性は、プログ ラム内の命令を探索して変換するプロセスにしばしば干渉する。特に、復帰ポイ ントを適切に接続しなければならず、これには、呼び出されている像に関する情 報か必要である。
上記したように、オリジナルプログラムの変換中に発生又は更新された像情報フ ァイルは、プログラム内の各々の使用できる入カポインドを呼び出す作用に関す る情報を記憶するのに用いられる。像を変換するときには、別の億円の入カポイ ンドへの呼び出しが、その入カポインドを呼び出す作用について記録された情報 を使用することにより変換される。
しかしなから、相互依存性は、第2の億円の入カポインドを呼び出す作用か第1 の像に依存し、第1の像か変換されるまで分からないような状態を生み出す。
しかし、第」の像の変換には、第2の億円の入カポインドを呼び出す作用に関す る情報か必要である。このように矛盾する相互依存性は、例えば、第1の像か第 2の億円の入カポインドを呼び出しそして第1の億円の手順のアドレスを識別す る手順パラメータを通すか、次いで、第2の像か第1の像の手順をコールバック するような場合に生じる。第1の像を変換するためには、第2の億円の入カポイ ンドを呼び出す作用に関する情報、例えば、第2の像か第1の像をコールバック するといった情報か分からねばならない。しかしながら、この情報は、第1の像 を検査することによって決定できない。第2の像を変換するためには、第1の像 を呼び出すことに関連した情報、例えば、第」の像のコールバック中に通された 手順パラメータの1組の考えられる値や、その手順パラメータの各考えられる値 に対するコールバックの作用といったff報が分からねばならない。しかし、こ の情報は、第2の像を検査することにより決定できない。それ故、各情報を、互 いに池の情報か変換のために必要な全てのt#報をもつ前に変換しなければなら ない場合に、矛盾する状態が生じる。
図31に示すように、相互依存性l二よる矛盾は、多数の変換によって分析され る。ステ5.ブ551ての第1プログラム(PROGRAM#I)の変換中に、 トランスレータ−は、第2プログラム(PROGRAM#2)の入カポインドを 呼び出す作用に間する情報がないことか分かる。というのは、第2のプログラム かまだ変換されていないからである。それ故、トランスレータ−は、第2プログ ラムの入カポインドへの呼び出しに関して、例えば、ノーマル復帰や、コールバ ックなしといったデフオールド仮定をする。ステップ552において第2プログ ラムか変換されると、トランスレータ−は、そのデフオールド仮定とは逆に、第 2の像かコールバンクを育すると判断する。
図31のステップ553ないし557に示されたように、像情報ファイルを用い て、あるプログラムの手前の変換中に発見された新たな情報を他のプログラムの 再変換へ通すような繰り返し再変換のプロセスを使用することかできる。ステッ プ555及び556では、厳密なコンバージェンス状態か生じたときに繰り返し の再変換プロセスか終了となる。厳密なコンバージェンス状態は、像情報ファイ ルにおいて変化か生しなくなるまで2つのプログラムの各々か交互のシーケンス で再変換されるときに生じる。しかしながら、このコンバージェンス状態は、少 数の変換であっても、像情報ファイルに関連変化か生じないときを感知すること によって確かめることができる。
厳密なコンバージェンス状態を簡単にテストする背景となる仮定は、個々のプロ グラムかその最初の変換中に生じた像情報ファイルで再変換されるときに、その 個々のプログラムの第2の変換で変化か生じないことである。この仮定では、第 2のプログラムの変換によって第1のプログラムの再変換に作用か及ぶのは、第 2プログラムに関する像情報か第1プログラムの変換に関連した仕方で変化する 場合だけであるという結論に達する。図32には、第1プログラムの最初の変換 及び第2プログラムの最初の変換の直後に得られる第4プログラムの像情報ファ イル561及び第2プログラムの像情報ファイル562が示されている。第1プ ログラムの像情報ファイル561は、第1プログラムの最初の変換中に検査され た第1プログラム入カポインド(ENTRY A、ENTRY B、ENTRY  C,ENTRY D191.)に関する情報を含む。この情報は、各入カポイ ンドに対し、入カポインドのアドレスと、その入カポインドに関連したコールバ ックパラメータとを含み、これらは、図24のステップ372で発見されて、変 換中に図24のステップ373で像情報ファイル561に記録されたものである 。更に、像情報ファイル561は、第1プログラムから他のプログラムの外部入 カポインドへの呼び出しくCALL Q、CALL S、CALL Y、CAL L Z)に関する情報564を含み、これは、変換中に図19のステップ256 .258又は259において像情報ファイル561に記録されたものである。
例えば、この情報は、呼び出しの外部行き先アドレス、呼び出しの形式(CAL LSやCALLGのような)、呼び出しに関連したパラメータの数、及びパラメ ータの一定値を含む。パラメータの一定値は、例えば、呼び出し命令からの後方 記号実行によって得られる。同様に、第2プログラムは、第2プログラムから他 のプログラムの外部入カポインドへの呼び出しくCALL A、CALL B。
CALL H,CALL K)に関する情報565、及び第2プログラムの最初 の変換中に得たプログラム入カポインド(ENTRY Q、ENTRY R,E NTRY S)に関する情報566とを含んでいる。
第1プログラムか第2プログラムの像情報ファイル562内の情報によって再変 換された場合に、この第1プログラムか変化するかどうかについて考える。第1 プログラムに対する情報ファイル561内のプログラム入カポインドのアドレス を、第2プログラムに対する像情報ファイル562内の外部呼び出しのアドレス に合致させ、そしてmlプログラムに対する像情報ファイル561内の外部呼び 出しのアドレスを、第2プログラムに対する情報ファイル562内のプログラム 入カポインドのアドレスに合致させることにより、第2プログラムに対する像情 報ファイル562内の関連外部呼び出し及び入カポインドか識別される。第2プ ログラムに対する像情報ファイル562内のこれら外部呼び出し及びプログラム 入カポインドについての情報か、上記のデフオールド仮定から、第1プログラム の再変換に影響を及ぼすように異なる場合には、第」プログラムを再変換しなけ ればならない。更に、像情報ファイル562が、第1プログラム内の変換されて いないコード位置を呼び出すようなプログラム#1への外部呼び出しく図32の CALL Kのような)を育する場合には、その変換されていない呼び出し位置 のアトしスを最初の分析されていないブロック入カポインドとして使用して第1 プログラムを再変換しなければならない。再変換を考慮しているプログラムの変 換されていない部分への外部呼び出しに加えて、特に関連した変化としては、再 変換を考慮しているプログラム内の入カポインドへの外部呼び出しに対する呼び 比しパラメータの新たな一定値か含まれる。というのは、これらの一定値は、再 変換中に、他のプログラム内の変換されていないコードへの行き先アドレスを分 析するために後方記号実行によって使用されるからである。更に、上記の5!l 連した変化には、再変換を考慮中のプログラムにより呼び出されたプログラム入 カポインドに対する新たなコールバンクパラメータも含まれる。というのは、再 変換中にこれらのコールバックパラメータの後方記号実行か分析されて、再変換 を考慮中のプログラム内の変換されていないコードにおける新たなプログラム入 カポインドの値かめられるからである。
図33には、2つのオリジナルプログラムの交互に繰り返す変換に対する手順で あって、一方のプログラムの再変換を、他方のプログラムの像情報ファイルの内 容に関連する変化か生じた後にのみ実行することによって迅速なコンバージェン スを得る手順のフローチャートが示されている。第4ステツプ571及び第2ス テツプ572は、図31の手順の第1ステツプ551及び第2ステツプ552と 同じである。しかしながら、図33の第3ステツプ573では、第2プログラム の像情報ファイル(図32の562)における関連入力が、図32について上記 したように、第1プログラムの再変換におそらく影響を及ぼすであろうデフオー ルド仮定からの変化について検査される。このような変化が発見されると、第1 プログラムはステップ574において再変換され、さもなくば、第1プログラム の再変換も、第2プログラムの再変換も不要である。
ステップ574における第1プログラムの再変換中に、その第1プログラムの像 情報ファイルにおける外部呼び出し及びプログラム入カポインド情報に対してな された変化は、例えば、その変化した入力に対してフラグを立てそして古い入力 のコピーを保持するか、或いは新たな入力に対してフラグを立てることにより注 目される。第」プログラムの再変換の後に、ステップ575において、第1プロ グラムの像情報ファイル(図32の561)における関連変化入力か、図33に ついて上記したように、第2プログラムの再変換におそらく影響するであろう変 化について検査される。このような変化が見つかると、ステップ576において 第2プログラムが再変換され、さもなくば、第1プログラムの再変換も、第2プ ログラムの再変換も不要である。
ステップ577における第2プログラムの再変換中に、その第2プログラムの像 情報ファイルにおける外部呼び出し及びプログラム入カポインド情報に対してな された変化は、例えば、その変化した入力にフラグを立てそして古い入力のコピ ーを保持するか、或いは新たな入力に対してフラグを立てることにより注目され る。第2プログラムの再変換の後に、ステップ577において、第2プログラム の像情報ファイル(図32の562)における関連変化入力が、図32について 上記したように、第4プログラムの再変換におそらく影響するであろう変化につ いて検査される。このような変化が見つかると、ステップ574において第4プ ログラムか再変換され、さもなくば、第4プログラムの再変換も、第2プログラ ムの再変換も不要である。
多数の変換及びチェックされた仮定についてのこのプロセスは、何回も繰り返さ れるか、最終的にこのプロセスはフンバージエンス状態となる。多くの場合、こ のプロセスは各像か正確に記述された際にフンバージエンス状態になり、それ以 上の再変換は不要となる。例えば、実行時間ライブラリーは、典型的に、とりわ け相互依存性を有する像の収集体を含むか、これらは、指定された入カポインド においてユーザプログラムによって呼び出され、ユーザプログラムとの相互依存 性はもたない。この場合、多数の変換及びチェックされた仮定のプロセスは、各 像か正確に記述された際にm−指定の入カポインドにおいて各像を呼び出す作用 に関する完全な情報を含む一一フンバージエンス状態に達する。この情報を含む ファイルは、実行時間ライブラリー像の再変換を必要とせずに、ニーサブログラ ムの変換に使用することかできる。
本発明は、Cl5C−RISCコードトランスレータ−について説明したか、あ るプログラミング言語のcrscコートを別のプログラミング言語のCl5Cコ ードに変換するのにも非常に有用であり、例えば、ある種のデジタルコンピュー タのプログラムを別の種類のデジタルコンピュータのプログラムにトランスポー トシたり、或いはある種のオペレーティングシステムのプログラムを別の種類の オペレーティングシステムにトランスポートしたりするのにも存用である。更に 、本発明の分析及びエラーチェック特徴は、プログラムを変換せずにテストした りデバッグしたりするのに使用することかできる。
1、LITREF (リテラル) リテラルの値は、LITREFタプルで表され、そのレファレンスアトリビュー トは記号テーブルのリテラルノードを指す。ノードは、名前の付けられたリテラ ル(SYM$LOFFSETのような)、又はOやlのような定数に対するもの である。
LrTREFはソースオペランドとしてのみ現れる。
例: と 中間表示 、WORD I Lot: 1itref [#1]LO2: data、un it!6 (Lot)push #512 LOI: 1itref [#51 2]LO2: 1nstr [pushl](LOI) 2、REGREF (レジスタ) 直接レジスタレファレンスは、REGREFタプルて表される。これらは、レジ スタ番号アトリビュートしか含まず、ソース又は行き先オペランドとして直接使 用することができる。
タプルにおいては、レジスタ番号がソースに使用されるレジスタ番号ではなく、 RISCコンピュータレジスタRO−R31,AP、FP及びSPについて定義 されたmtu reg k *定数のセットのうちの1つである。
REGREFタプルは、記号名称をこのレジスタの場合と関連付けるのに使用で きる記号ノードアトリビュートを育している。又、コードジェネレータによって 使用されるアトリビュートも有している。
例。
ヱニヱ 中間表示 pushl rOLot: regref [rO]LO2: 1nstr [ pushl](Lot) popl rOLOI: regref [rOILO2: 1nstr [p opl] (101)3、MEMREF/FETCH(非記号メモリレファレン ス)マクロコードのほとんとのオペランドはレジスタを通してのメモリレファレ ンスである。
MEMREFタプルは、これらを表すのに使用され、ペースレジスタオペランド 及びオブンコンのオフセットオペランドの2つの成分を有している。ベースレジ スタオペランドは、常に、REGREFタプルのアドレスである。オフセットオ ペランドは、もしあれば、L ITREF、SYMREF又はCOMP OPタ プルのいずれかを指すポインタである。オフセントオペランドか指定されない場 合には、オフセット0かとられる。
MEMREFダブルの値は、指定されたメモリ位置のアドレスである。ソースオ ペランド内のメモリを参照するために、FETCHタプルを使用して、その位置 の値か必要とされることを指示しなければならない。MEMREFは、行き先オ ペランドとして直接使用することかできるし、或いはM○VAX又は同様の命令 におけるソースとして直接使用することもできる。これは、マクロコンパイラ− の前端かアドレスコンチクストレファレンスを値コンチクストレファレンスから 区別する必要かあることを意味し、これは、命令の形式及びオペランド番号に基 づく単純なテーブルルックアップである。INCL命令の指定のような変更オペ ランドの場合は、アドレスコンチクスト形態を使用しなければならない。
FETCHは、以下に述べるIDXREF及びSYMREFダブルにも使用され る。
MEMREFタプルは、レファレンスを更に定質化するようにセットされる3つ のフラグを含んでいる。
・ デフアート:これは、間接についての追加レベルを指示する。例えば、@o ffset(Rn)である。
・ 自動増加:これは、ペースレジスタの事後増加を指示する。
・ 自動減少:これは、ペースレジスタの事前減少を指示する。これは、デフア ートや自動増加では指定てきない。
5PSFP及びAP系のレファレンスは、全てMEMREFオペランドとして表 示される。
MEMREFタプルは、記号名称をこのメモリ位置に関連付けるのに使用できる 記号ノードアトリビュートを育している。又、同じベース位置に対する何回もの レファレンスを最適に行うためにコードジェネレータによって使用できるアトリ ビュートも育している。
例。
ヱユ各 中間表示 pushl (ro) LOI: regref [rO]LO2: llll emref (LOI)LO3: fetch (LO2) LO4: 1nstr [pushll(LO3) pushl @(ro)+ LOI: regref fry]LO2: ae rnref (deferred、 autoinc]LO3: fetch  (LOI) LO4: 1nstr [pushll(LO2) popl 4(rO) LOI: 1itref [#4]LO2: regr ef [rO] LO3: 111ewef (LO2,LO3)LO4: 1nstr [po pH(LO3)pushl @foo(sp) LOI : symref [ foo]LO2: regref [5pl LO3: aewef [deferred](LO2,LOI) LO4: fetch (L63) LO5: lN5TR[pushll (LO4) 4、SYMREF (記号テーブルレファレンス)SYMREFタプルは、記号 名称をもつ項目へのレファレンスを表すのに使用される。名称rSYMREFJ は、rsYMbol node REFerence Jではなくて、rsYM bol table REFerence」を意味するものと理解されたい。と いうのは、それか指す記号テーブルノードは、記号ノードであるか、外部ノード であるか、ラベルノードであるか又はルーチンノードだからである。
タプルの値は記号の値である。記号ノートの場合に、これは、記号の値を得るの にFETCHが使用されないことを意味する。記号ノードは、この点につ(1て はり子ラルノードと同じてあり、あるコンノ(イル一時間値につUて単fiる記 号名称である。
外部、ラベル及びルー千万−ドの場合は、フンチクストに基づいてFETCHか 要求される。アドレス又は中間モードレファレンスは、FETCHを必要としな い。(中間モードレファレンスは外部に対する法律に過ぎなり為。)値のレファ レンスに場合には、S YMRE FのFETCHか必要とされる。例え(f、 外部、ラベル又はルーチンへの分岐はS YMRE Fを直接使用する。例えば 、あるラベルの値のMOVEL命令は、S YMRE FのFETCHを使用す る。
S YMRE FタプルにおけるDEFERREDフラグは、間接を指示するの に使用することかできる。このフラグは、外部及びラベルノードのS YMRE  Fにのみ使用できる。
例。
LO2: data、addr (Lot)し02: fetch (LOI) LO3: 1nstr [pushll(LOI) LO2: branch (LOI) LO3: calls (LO2,LOl)external LO2: 1nstr [pushll(Lot) ラベル及び入カポインドタプル LABELタプルは、ルーチン内の分岐ターゲットを表す。参照されるラベル記 号は、分岐タプルのターゲットオペランドとして使用されるSYMREFタプル によっても指示される。
ソースのUNWIND TARGETディレクティブでデクレアされるラベルは 、ノーマルラベルタプルで表される。しかしなから、UNWTND TARGE Tフラグは、このタプルにおいてセットされる。
例・ ツユろ 中間表示 foo: pushl SOLOI: 1abel [foo]LO2: 1i tref [ao] LO3: 1nstr [pushll(LO2) foo: 、unwind target LOI: 1abel [foo、 unwind target]2、JSB ENTRY%CALL ENTRY 、10 INTERRUPT−ENTRYSEXCEPTION ENTRY入 力ポイ入力ポイントディレクティブタプルス内のJSB ENTRY、CALL  ENTRY、I○−TNTERRUPT ENTRY又はEXCEPTION  ENTRYディレクティブのうちの■つでデクレアされたルーチンのスタート にフラグを立てる。タプルは、デクレアされたルーチンのMTU人カフカソード す。
MTU入カフカノートソースディレクティブに指定されたレジスタ使用及び他の 情報を含んでいる。
例・ ヱユ各 中間表示 (oo: 、Jsb entry LOI: Jsb entry [fool #I画湾流タプ ル、BRANCH BRANCHタプルは、特定ターゲットラベルへの分岐を指定するか、又はメモ リ位置を通しての間接分岐を指定する。第4のオペランドは、ラベル記号ノード を識別するSYMREFタプルか又は分岐アドレスを指定する値発生ダブルかの いずれかのアドレスでなければならない(REGREF又はFETCH)。
分岐タプルは、BRB、BRW及びJMP命令に使用される。
間接分岐の場合には、コードジェネレータは分岐ではなくてJSBを発生するこ とに注意されたい。
例。
ご 中間表示 brb foo LOf : 5yvef (faa)LO2: branch  (LOI) jmp bar LOI : sywef [barlLO2: branch  (LOI) jmp 4(RIO) Lot: 1itref [#4]102: regr ef [rlO] LO3: oxmref (LOl、 LO2)し04: fetch (LO 3) 105: branch (LO4) 2、CALLS/CALLG CALLS及びCALLGタプルは、記号又はメモリレファレンスである第1オ ペランドで指定されたルーチンへのVAX呼び出し命令に対応する。第2のオペ ランドは、パラメータカウント(CALLSの場合)であるか、或いはCALL Gのためのパラメータリストのアドレスである。
例 ヱニ各 中間表示 calls #2.foo Lot: 1itref [#2]LO2: sy mref [foo] LO3: calls (LO2,LOl)callg (ap)、(rlo)  LOI: regref [ap]LO2: regref [r101 LO3: vmref (LOI) LO4: mmref (LO2) 105: callg (LO4,LO3)3、RETURN RETURNタプルは、VAX復帰命令に対応する。
アナライザーは、復帰しつつあるルーチンに対する記号ノードと、復帰をエミュ レートするためにインタープリタ−を呼び出さねばならないかどうかを指示する フラグとでRETURNタプルにタグ付けを行う。 ゛例: ヱニろ 中間表示 ret LOI: return 4、JSB JSBタプルは、VAXのJSB又はBSBx命令に対応する。これは、記号ノ ードアドレスを指すSYMREFであるか又は間接的JSBターゲツトを表す値 発生タプルかのいずれかである単一のオペランドを育している。
例: ヱニ各 中間表示 bsbw foo Lot: symref [foo]LO2: jsb ( LOI) jsb (rlo) Lot: regref [rlO]し02: tnem ref (LOI)LO3: jsb (LO2) 5、R3B/REI RSB及びREIタプルは、各々、VAXのRSB及びRET命令に対応しれら のタプルを更に注意する。
例。
ソース 中間表示 rsb Lot: RSB 6、C0NDBR CONDBRタプルはVAXの全ての条件分岐命令を表すのに使用される。
このダブルは、(VAX分岐OPコードを指定する)OPコードアトリビュート と、記号ノードを指すSYMREFタプルであるか又は間接的行き先を表す値発 生タプルかのいずれかのアドレスである行き先オペランドとを有している。オプ ションの追加オペランドの存在は条件分岐の形式によって左右される。例えば、 BLEQは追加オペランドをもたず、一方、BLBCはテストされるべき項目を 指定するオペランドを存し、BBSは2つの追加オペランドを存する。
以下のテーブルは、条件分岐の形式と、必要な追加パラメータを示す。形式の欄 は、オペランドとして許されたオペランドの形式を指示し、 rValueJは 、L ITREF、SYMREF (コンパイル時間記号の)、COM OP、 REGREF及びFETCH(SYMREF、MEMREF又はIDXREFの )つ−許されたことを示し、一方、 rAddrJは、REGREFS SYM REF、ME〜IREF及びIDXREFが許されたことを示す。オペランドI は常に分岐行き先である。
分岐 OP2 形式 OP3 形式 OP4 形式 コメント(CBx Lim 1t Value Addend Value [ndex AddrAOBm  Lim1t Value Index AddrB(cc) BBEQ Bar Pos Value Ba5e AddrBBXX POS Valu e Ba5e Addr BBSSBBXX[PO3Value Ba5e A ddr BBSSI/’BLBX Src Value SOBXXX Index 4ddr 例 ヱニ玉 中間表示 acbl #IO,#1.r0.10$ LOI: l1tref [#10] LO2: IHref [61] LO3: regref [rO] LO4: symref [10$1 LO5: condbr [acb1](LO4,LOl、LO2)aoble q #IO,4(ro)、]0$ LOI: l1tref [#IO]102 : 1itref [#4] LO3: memref [rO] (LO2)104: symref [1 0$] LO5: condbr [aobleq](LO4,LOl、 LO2) bleq Lot Lot : sYwef [10$]102: condb r rbleql (LOl)blbc g″foo$flag、(rO)10 1: symref [foo$flag]LO2: fetch (101) LO3: regref [rO] LO4: condbr [blbcl (LO3,LO2)bbs #<ba se+bit、、ro、4(rlo)Lot : sywef [baselL O2: symref [bit] LO3: comp op [add] CLOl、LO2)LO4: reg ref [rO] LO5: 1itref [#4] LO6: regref [rlO] LO7: mmref (LO6,LO5)LO8: fetch (LO7) 105: condbr [bbsl (LO8,LO3,LO4)命令ダブル lN5TRタプルは、他の全てのマクロ命令を表示する方法である。その命令ア トリビュートはOPコートを表す定数であり、そのオペランドは命令オペラ許さ れたオペランド形式のセットは、命令依存である。一般に、LITREF、SY MREF、COMP OP、REGREF及びFETCH(SYMREFSME MREF又はIDXREFの)オペレータは、値か使用されるオペランドに対し て許さね、一方、REC;REF、SYMREF、MEMREF及び[)XRE Fは、アドレスか使用されるオペランドに対して許される。rINCXJ命令の 行き先のような「変更」式のオペランドの場合は、アドレスの形部を使用しなけ ればならない。
lN5TRタプルは、アナライザーによって計算されたこの情報をコートジェネ レータに与える条件コード使用フラグを有している。これらは、N及びZ、C及 び/又はVビット値を、現在命令によって発生されたコードによりシュミレート シなければならないかどうかを指定する。付加的な「ローカルNZJ ビットは 、N/Zの唯一の使用かその直後の1つ以上の条件分岐命令によるものである場 合にセットされる。これにより、コードジェネレータは、ある場合に、結果の値 を直接使用することかできる。
例・ ノース 中間表示 1ncl 4(ro) LOI: 1itref [月]LO2: regre f (rO] LO3: tyewef (LO2,LOI)LO4: 1nstr [1nc llJ (LO3)LOI: regref [rO] LO2: symref [foo$I value]LO3: fetch  (102) LO4: regref [spl し05: vmref [autoinclementlLO6: 1nstr  [add13] (LOl、LO3,LO5)movc5 (rO)、4(r o)、#32.foo$w buf len、foo$r bufferLOI : regref (rO] LO2呪mref (LOI) LO3: fetch (LO2) LO4: l1tref [#4] 105: regref [rO] し06: memref (LO5,LO4)LO7: fetch (LO6 ) LO8: 1itref [#32] LO9: symref [foo$w buf 1enlLIO: fetc h (LO9) Lll: symref [foo$r bufferlL12: 1nstr  [movc5](LO3,LO7,LO8,LIO) insque 8(ro)、foo!q headLOI: 1itref [ #8] LO2: refref [rO]* LO3: IIX!Mef (LO2,Lot)し04: symref [f oo$q headlLO5: 1nstr [1nsquel(LO3,LO 4) 浄t(内容に変更なし) N 浄書(内容に変更なし) FIG、B 浄書(内容に変更なし) FIG、11 浄書(内容に変更なし) FIG、12 浄書(内容に変更なし) DHRYSTONLSHR 浄書(内容に変更なし) 浄2.汽容に変更なし) 浄書(内容に変更なし) 浄:(内容に変更なし) 浄!(内容に変更なし) 浄t(内容に変更なし) 浄N+内容に変更なし) FIG、27 浄f″r内容に変更なし) 浄;(内容に変更なし) S嘗(内容に変更なし) FIG、30 浄書(内容に変更なし) FIG、31 浄:(内容に変更なし) 手続補正書(方式) %式%:2 2、発明の名称 プログラムコードの交差像参照方法3、補正をする者 事件との関係 出 願 人 名 称 ディジタル イタイプメント コーボレイシコン図面の翻訳文の浄書  (内容に変更なし)国際調査報告 、、、、−、、、−= PCT/US 92/C1831国際調査報告

Claims (32)

    【特許請求の範囲】
  1. 1.複数のコンピュータプログラムを分析するようにデジタルコンピュータを動 作する方法において、上記コンピュータプログラムは、第1コンピュータプログ ラムと、第2コンピュータプログラムとを備えており、上記第1コンピュータプ ログラムは、上記第2コンピュータプログラムの入力ポイントを呼び出すための 呼び出し命令を含み、上記第2コンピュータプログラムは、上記第1コンピュー タプログラムの入力ポイントを呼び出すための呼び出し命令を含み、上記第1コ ンピュータプログラムの上記入力ポイントを呼び出す作用の決定が、上記第2コ ンピュータプログラムの上記入力ポイントを呼び出す幾つかの作用に基づいて行 われ、そして上記第2コンピュータプログラムの上記入力ポイントを呼び出す作 用の決定が、上記第1コンピュータプログラムの上記入力ポイントを呼び出す幾 つかの作用に基づいて行われ、上記方法は、(a)上記第2コンピュータプログ ラムの入力ポイントを呼び出す上記幾つかの作用に関する仮定に基づいて上記第 1コンピュータプログラムの上記入力ポイントを呼び出す作用を決定し、 (b)上記段階(a)で決定された上記第1コンピュータプログラムの上記入力 ポイントを呼び出す作用に基づいて上記第2コンピュータプログラムの上記入力 ポイントを呼び出す作用を決定し、そして(c)上記段階(b)で決定された上 記第2コンピュータプログラムの上記入力ポイントを呼び出す作用に基づいて上 記第1コンピュータプログラムの上記入力ポイントを呼び出す作用を再決定する 、という段階を備えたことを特徴とする方法。
  2. 2.上記段階(b)で決定された上記第2コンピュータプログラムの上記入力ポ イントを呼び出す作用が上記仮定と異なるかどうかをチェックする段階を更に備 えた請求項1に記載の方法。
  3. 3.上記段階(c)は、上記チェック段階により、上記段階(b)で決定された 上記第2コンピュータプログラムの上記入力ポイントを呼び出す作用が上記仮定 と異なることが分かったときに実行され、そして上記段階(c)は、上記チェッ ク段階により、上記段階(b)で決定された上記第2コンピュータプログラムの 上記入力ポイントを呼び出す作用が上記仮定と異ならないことが分かったときは 実行されない請求項2に記載の方法。
  4. 4.上記第1コンピュータプログラムの上記入力ポイントを呼び出す上記の再決 定された作用に基づいて上記第2コンピュータプログラムの上記入力ポイントを 呼び出す作用を再決定する段階(d)を更に備えた請求項2に記載の方法。
  5. 5.上記第1コンピュータプログラムの上記入力ポイントを呼び出す作用の再決 定が、上記第2プログラムの上記入力ポイントを呼び出す作用の再決定に影響を 及ぼすように上記第1コンピュータプログラムの上記入力ポイントの呼び出しに ついて決定される作用を変更させるかどうかをチェックする段階を更に備え、上 記段階(d)は、上記チェック段階により、上記第1コンピュータプログラムの 上記入力ポイントを呼び出す作用の再決定が、上記第2プログラムの上記入力ポ イントを呼び出す作用の再決定に影響を及ぼすように上記第1コンピュータプロ グラムの上記入力ポイントの呼び出しについて決定される作用を変更させると分 かったときに実行され、そして上記段階(d)は、上記チェックにより、上記第 1コンピュータプログラムの上記入力ポイントを呼び出す作用の再決定が、上記 第2プログラムの上記入力ポイントを呼び出す作用の再決定に影響を及ぼすよう に上記第1コンピュータプログラムの上記入力ポイントの呼び出しについて決定 される作用を変更しないと分かったときには実行されない請求項3に記載の方法 。
  6. 6.上記段階(a)は、上記第1コンピュータプログラムの各入力ポイントを呼 び出すことについて決定された作用を上記第1コンピュータプログラムの像情報 ファイルに記録することを含み、そして上記段階(b)は、上記第2コンピュー タプログラムの各入力ポイントを呼び出すことについて決定された作用を上記第 2コンピュータプログラムの像情報ファイルに記録することを含む請求項1に記 載の方法。
  7. 7.上記段階(a)は、上記第2プログラムに対し上記第1プログラムで行われ た各呼び出すに関する情報を上記第1コンピュータプログラムの上記像情報ファ イルに記録することを含み、そして上記段階(b)は、上記第1プログラムに対 し上記第2プログラムで行われた各呼び出すに関する情報を上記第2コンピュー タプログラムの上記像情報ファイルに記録することを含む請求項6に記載の方法 。
  8. 8.上記段階(a)は、上記第2プログラムに対し上記第1プログラムで行われ た各呼び出しに関する情報と、上記第1コンピュータプログラムの各入力ポイン トを呼び出すことについての決定された作用とを記録することを含み、そして上 記段階(b)は、上記第1プログラムに対し上記第2プログラムで行われた各呼 び出しに関する情報と、上記第2コンピュータプログラムの各入力ポイントを呼 び出すことについての決定された作用とを記録することを含む請求項1に記載の 方法。
  9. 9.各呼び出しに関する上記情報は、各呼び出しの行き先アドレスを含む請求項 8に記載の方法。
  10. 10.各呼び出しに関する上記情報は、各呼び出しに対する呼び出し形式情報を 含む請求項8に記載の方法。
  11. 11.各呼び出しに関する上記情報は、幾つかの呼び出しに対し、呼び出しによ って送られたパラメータの値を含む請求項8に記載の方法。
  12. 12.上記仮定は、各呼び出しから実行が復帰しそしてコールバックが生じない という仮定を含む請求項1に記載の方法。
  13. 13.上記入力ポイントを呼び出す作用の上記決定は、各入力ポイントごとに実 行が呼び出しルーチンに復帰するかしないかを決定することを含む請求項1に記 載の方法。
  14. 14.上記入力ポイントを呼び出す作用の上記決定は、呼び出しルーチンによっ て入力ポイントへ通されたパラメータによって決定された行き先へ実行が復帰す るかしないかを各入力ポイントごとに決定することを含む請求項1に記載の方法 。
  15. 15.上記入力ポイントを呼び出す作用の上記決定は、レジスタ使用情報の決定 を含む請求項1に記載の方法。
  16. 16.第1コンピュータプログラムを変換するようにデジタルコンピュータを動 作する方法において、上記第1コンピュータプログラムは、第2コンピュータプ ログラムのプログラム入力ポイントを含む外部入力ポイントを呼び出すための呼 び出し命令を含み、上記第2コンピュータプログラムは、上記第1コンピュータ プログラムのプログラム入力ポイントを含む外部入力ポイントを呼び出すための 呼び出し命令を含み、上記第2コンピュータプログラムにより上記第1コンピュ ータプログラムの上記プログラム入力ポイントを呼び出す作用の決定は、上記第 1コンピュータプログラムにより上記第2コンピュータプログラムの上記プログ ラム入力ポイントを呼び出す幾つかの作用に基づいており、そして上記第1コン ピュータプログラムにより上記第2コンピュータプログラムの上記プログラム入 力ポイントを呼び出す作用の決定は、上記第2コンピュータプログラムにより上 記第1コンピュータプログラムの上記プログラム入力ポイントを呼び出す幾つか の作用に基づいており、上記方法は、(a)上記第1コンピュータプログラムに よる各々の外部呼び出しごとに、その呼び出しに関する情報を記録し、上記第1 コンピュータプログラムの各プログラム入力ポイントごとに、上記第1コンピュ ータプログラムから第2コンピュータプログラムのプログラム入力ポイントヘの 外部呼び出しに関する仮定に基づいてプログラム入力ポイントを呼び出す作用を 決定し、そしてプログラム入力ポイントの呼び出しについての決定された作用に 関する情報を記録し、(b)上記第2コンピュータプログラムによる各々の外部 呼び出しことに、その呼び出しに関する情報を記録し、上記第2コンピュータプ ログラムの各プログラム入力ポイントごとに、上記第1コンピュータプログラム のプログラム入力ポイントを呼び出す上記第2コンピュータプログラムの決定さ れた作用について記録された情報に基づきプログラム入力ポイントを呼び出す作 用を決定し、そしてプログラム入力ポイントの呼び出しについての決定された作 用に関する情報を記録し、 (c)上記第1コンピュータプログラムから第2コンピュータプログラムのプロ グラム入力ポイントヘの各外部呼び出しに対し、上記の仮定と、上記第1コンピ ュータプログラムにより呼び出された第2コンピュータプログラムのプログラム 入力ポイントを呼び出す決定された作用に関して上記段階(b)で記録された情 報との間に相違があるかどうかをチェックし、そして相違が見つかってその相違 が上記第1コンピュータプログラムの変換に影響を及ぼすときには、上記段階( b)で記録された情報に基づいて上記第1コンピュータプログラムの上記プログ ラム入力ポイントを呼び出す作用を再決定し、(d)上記第1コンピュータプロ グラムを変換する、という段階を備えたことを特徴とする方法。
  17. 17.各呼び出しについての上記情報は、各呼び出しごとの行き先アドレスと呼 び出し形式情報とを含む請求項16に記載の方法。
  18. 18.各呼び出しについての上記情報は、更に、幾つかの呼び出しに対し、呼び 出しによって通されるパラメータの値を含む請求項17に記載の方法。
  19. 19.上記仮定は、各呼び出しから実行が復帰しそしてコールバックが生じない という仮定を含む請求項16に記載の方法。
  20. 20.上記入力ポイントを呼び出す作用の上記決定は、各々の入力ポイントごと に、実行が呼び出しルーチンに復帰するかしないかを決定することと、呼び出し ルーチンにより入力ポイントに通されたパラメータによって決定された行き先へ 実行が復帰するかしないかを決定することを含む請求項16に記載の方法。
  21. 21.第1コンピュータプログラム及び第2コンピュータプログラムを分析する ようにデジタルコンピュータを動作する方法において、上記第2コンピュータプ ログラムは、上記第1コンピュータプログラムのプログラム入力ポイントを含む 外部入力ポイントを呼び出すための呼び出し命令を含み、上記方法は、(a)上 記第1コンピュータプログラムの各プログラム入力ポイントごとにそのプログラ ム入力ポイントを呼び出す作用を決定し、そしてそのプログラム入力ポイントを 呼び出す決定された作用に関する情報を記録し、そして(b)上記第2コンピュ ータプログラムの各呼び出し命令ごとに、上記記録された情報を読み出し、そし てその記録された情報を用いて、上記第1コンピュータプログラムのプログラム 入力ポイントを呼び出す上記第2コンピュータプログラムの各呼び出し命令の作 用を分析する、という段階を備えたことを特徴とする方法。
  22. 22.上記プログラム入力ポイントを呼び出す作用の上記決定は、各々の入力ポ イントごとに、実行が呼び出しルーチンに復帰するかしないかを決定することと 、呼び出しルーチンによりプログラム入力ポイントに通されたパラメータによっ て決定された行き先へ実行が復帰するかしないかを決定することを含む請求項2 1に記載の方法。
  23. 23.上記プログラム入力ポイントを呼び出す作用の上記決定は、レジスタ使用 情報を決定することを含む請求項21に記載の方法。
  24. 24.上記第1コンピュータプログラムは、上記第2プログラムのプログラム入 力ポイントを含む外部入力ポイントを呼び出すための呼び出し命令を含み、上記 段階(a)は、更に、外部入力ポイントを呼び出す上記第1コンピュータプログ ラムの各呼び出し命令に対し、その呼び出し命令に関する情報を記録することを 含み、そして上記段階(b)は、更に、上記第1プログラムの上記呼び出し命令 の1つによって呼び出された上記第2プログラムの各プログラム入力ポイントに 対し、上記第2プログラムの上記各プログラム入力ポイントを呼び出す呼び出し 命令に関する上記の記録された情報を読み出して、上記各プログラム入力ポイン トを呼び出す呼び出し命令の作用を分析することを含む請求項21に記載の方法 。
  25. 25.各呼び出し命令に関する上記情報は、各呼び出しに対する行き先アドレス と呼び出し形式情報とを含む請求項24に記載の方法。
  26. 26.各呼び出し命令に関する上記情報は、幾つかの呼び出し命令に対しその呼 び出し命令により通されたパラメータの値を含む請求項24に記載の方法。
  27. 27.上記第1コンピュータプログラムの上記プログラム入力ポイントを呼び出 す上記作用の決定は、上記第2コンピュータプログラムの上記プログラム入力ポ イントを呼び出す上記第1プログラムの呼び出し命令の幾つかの作用に基づいて おり、そして上記段階(a)は、更に、上記第2コンピュータプログラムのプロ グラム入力ポイントを呼び出す上記第1プログラムの呼び出し命令の上記幾つか の作用に関する仮定に基づいて上記第1プログラムの上記プログラム入力ポイン トを呼び出す上記作用を決定することを含む請求項21に記載の方法。
  28. 28.上記仮定は、各呼び出しから実行が復帰しそしてコールバックが生じない という仮定を含む請求項27に記載の方法。
  29. 29.上記段階(a)で記録された情報を既に記録されている情報と比較し、上 記段階(a)で記録された情報と既に記録されている情報との間に差があって上 記第2コンピュータプログラムの呼び出し命令に影響を及ぼすときには、上記段 階(b)において上記分析を行い、そして上記段階(a)で記録された情報と既 に記録されている情報との間に上記第2プログラムの呼び出し命令に影響を及ぼ す差がないときには、上記段階(b)の上記分析を禁止するという段階を更に備 えた請求項21に記載の方法。
  30. 30.上記の情報は、ASCIIファイルに記録される請求項21に記載の方法 。
  31. 31.複数のコンピュータプログラムを分析するためのデジタルコンピュータシ ステムにおいて、上記コンピュータプログラムは、第1コンピュータプログラム と、第2コンピュータプログラムとを備えており、上記第1コンピュータプログ ラムは、上記第2コンピュータプログラムの入力ポイントを呼び出すための呼び 出し命令を含み、上記第2コンピュータプログラムは、上記第1コンピュータプ ログラムの入力ポイントを呼び出すための呼び出し命令を含み、上記第1コンピ ュータプログラムの上記入力ポイントを呼び出す作用の決定が、上記第2コンピ ュータプログラムの上記入力ポイントを呼び出す幾つかの作用に基づいて行われ 、そして上記第2コンピュータプログラムの上記入力ポイントを呼び出す作用の 決定が、上記第1コンピュータプログラムの上記入力ポイントを呼び出す幾つか の作用に基づいて行われ、上記デジタルコンピュータシステムは、(a)上記第 2コンピュータプログラムの入力ポイントを呼び出す上記幾つかの作用に関する 仮定に基づいて上記第1コンピュータプログラムの上記入力ポイントを呼び出す 作用を決定するための第1手段と、(b)上記第1手段で決定された上記第1コ ンピュータプログラムの上記入力ポイントを呼び出す作用に基づいて上記第2コ ンピュータプログラムの上記入力ポイントを呼び出す作用を決定するための第2 手段と、(c)上記第2手段で決定された上記第2コンピュータプログラムの上 記入力ポイントを呼び出す作用に基づいて上記第1コンピュータプログラムの上 記入力ポイントを呼び出す作用を再決定する第3手段とを具備することを特徴と するデジタルコンピュータシステム。
  32. 32.上記第2手段で決定された上記第2コンピュータプログラムの上記入力ポ イントを呼び出す作用が上記仮定と異なるかどうかをチェックする手段を更に備 えた請求項31に記載のデジタルコンピュータシステム。
JP4511619A 1991-03-07 1992-03-04 プログラムコードの交差像参照方法 Expired - Lifetime JPH0762827B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/666,223 US5317740A (en) 1991-03-07 1991-03-07 Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
PCT/US1992/001831 WO1992015932A2 (en) 1991-03-07 1992-03-04 Cross-image referencing of program code

Publications (2)

Publication Number Publication Date
JPH06502269A true JPH06502269A (ja) 1994-03-10
JPH0762827B2 JPH0762827B2 (ja) 1995-07-05

Family

ID=24673321

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4511619A Expired - Lifetime JPH0762827B2 (ja) 1991-03-07 1992-03-04 プログラムコードの交差像参照方法

Country Status (7)

Country Link
US (1) US5317740A (ja)
EP (1) EP0531522A1 (ja)
JP (1) JPH0762827B2 (ja)
AU (1) AU653626B2 (ja)
CA (1) CA2082065C (ja)
IE (1) IE920741A1 (ja)
WO (1) WO1992015932A2 (ja)

Families Citing this family (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3105197B2 (ja) 1991-06-24 2000-10-30 株式会社日立製作所 除算回路及び除算方法
JP2984463B2 (ja) * 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
US6735685B1 (en) * 1992-09-29 2004-05-11 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
JP3644959B2 (ja) * 1992-09-29 2005-05-11 セイコーエプソン株式会社 マイクロプロセッサシステム
US5560010A (en) * 1993-10-28 1996-09-24 Symantec Corporation Method for automatically generating object declarations
US6425124B1 (en) * 1993-11-08 2002-07-23 Matsushita Electric Industrial Co. Ltd. Resource allocation device for reducing the size and run time of a machine language program
US5694539A (en) * 1994-08-10 1997-12-02 Intrinsa Corporation Computer process resource modelling method and apparatus
US5608874A (en) * 1994-12-02 1997-03-04 Autoentry Online, Inc. System and method for automatic data file format translation and transmission having advanced features
JP3505266B2 (ja) * 1995-06-15 2004-03-08 三洋電機株式会社 プログラム実行装置
JP3290567B2 (ja) * 1995-08-24 2002-06-10 富士通株式会社 プロファイル計装方法
US5752062A (en) * 1995-10-02 1998-05-12 International Business Machines Corporation Method and system for performance monitoring through monitoring an order of processor events during execution in a processing system
US5797019A (en) * 1995-10-02 1998-08-18 International Business Machines Corporation Method and system for performance monitoring time lengths of disabled interrupts in a processing system
US5691920A (en) * 1995-10-02 1997-11-25 International Business Machines Corporation Method and system for performance monitoring of dispatch unit efficiency in a processing system
US5949971A (en) * 1995-10-02 1999-09-07 International Business Machines Corporation Method and system for performance monitoring through identification of frequency and length of time of execution of serialization instructions in a processing system
US5729726A (en) * 1995-10-02 1998-03-17 International Business Machines Corporation Method and system for performance monitoring efficiency of branch unit operation in a processing system
US5748855A (en) * 1995-10-02 1998-05-05 Iinternational Business Machines Corporation Method and system for performance monitoring of misaligned memory accesses in a processing system
US5751945A (en) * 1995-10-02 1998-05-12 International Business Machines Corporation Method and system for performance monitoring stalls to identify pipeline bottlenecks and stalls in a processing system
US5802373A (en) * 1996-01-29 1998-09-01 Digital Equipment Corporation Method for providing a pipeline interpreter for a variable length instruction set
US6535903B2 (en) 1996-01-29 2003-03-18 Compaq Information Technologies Group, L.P. Method and apparatus for maintaining translated routine stack in a binary translation environment
US6226789B1 (en) 1996-01-29 2001-05-01 Compaq Computer Corporation Method and apparatus for data flow analysis
US6000028A (en) * 1996-01-29 1999-12-07 Digital Equipment Corporation Means and apparatus for maintaining condition codes in an unevaluated state
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
US5842017A (en) * 1996-01-29 1998-11-24 Digital Equipment Corporation Method and apparatus for forming a translation unit
US5930509A (en) * 1996-01-29 1999-07-27 Digital Equipment Corporation Method and apparatus for performing binary translation
US5742802A (en) * 1996-02-16 1998-04-21 International Business Machines Corporation Method and system for efficiently mapping guest instruction in an emulation assist unit
US5805893A (en) * 1996-03-01 1998-09-08 Electronic Data Systems Corporation Assembly language program converter
US5754860A (en) * 1996-07-23 1998-05-19 Digital Equipment Corporation Method and apparatus for software testing using a differential testing technique to test compilers
US6052530A (en) * 1996-10-09 2000-04-18 Hewlett-Packard Co. Dynamic translation system and method for optimally translating computer code
US5812759A (en) * 1996-11-08 1998-09-22 Allen Bradley Company, Inc. Fault handling with loaded functions
US6314564B1 (en) * 1997-11-17 2001-11-06 Agere Systems Guardian Corp. Method for resolving arbitrarily complex expressions at link-time
US6407739B1 (en) 1998-08-19 2002-06-18 James C. Wen Article and method for displaying a graphical history list
JP4158239B2 (ja) * 1998-09-08 2008-10-01 ソニー株式会社 情報処理装置および方法、並びに記録媒体
US6449711B1 (en) 1999-02-04 2002-09-10 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs
US6564374B1 (en) * 1999-04-22 2003-05-13 International Business Machines Corporation Method and apparatus for employing cognitive compares in compare statement sequences
US6463521B1 (en) * 1999-06-23 2002-10-08 Sun Microsystems, Inc. Opcode numbering for meta-data encoding
US6795962B1 (en) * 1999-12-30 2004-09-21 Microsoft Corporation Machine independent debugger
US6654952B1 (en) 2000-02-03 2003-11-25 Sun Microsystems, Inc. Region based optimizations using data dependence graphs
US6687807B1 (en) 2000-04-18 2004-02-03 Sun Microystems, Inc. Method for apparatus for prefetching linked data structures
SE0002440D0 (sv) 2000-06-28 2000-06-28 Virtutech Ab Interpreter
US6675372B1 (en) 2000-10-31 2004-01-06 Sun Microsystems, Inc. Counting speculative and non-speculative events
US7251811B2 (en) * 2002-01-02 2007-07-31 Intel Corporation Controlling compatibility levels of binary translations between instruction set architectures
JP3900485B2 (ja) * 2002-07-29 2007-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体
US8020148B2 (en) * 2002-09-23 2011-09-13 Telefonaktiebolaget L M Ericsson (Publ) Bi-directional probing and testing of software
US6986110B1 (en) * 2003-01-02 2006-01-10 Hewlett-Packard Development Company, L.P. Automated method and system for backtracing of instruction parameters from specified instruction in test cases
US8195694B1 (en) * 2004-04-26 2012-06-05 Oracle America Inc. Resolving conflicts between actions that target elements of a hierarchical data structure
US7496901B2 (en) * 2004-06-22 2009-02-24 International Business Machines Corporation Method for boundary trace with reproduction facility
US8185868B1 (en) * 2004-12-20 2012-05-22 The Mathworks, Inc. System and method for cell-based code editing and publishing
US20090178032A1 (en) * 2005-03-03 2009-07-09 Rongzhen Yang Mining for performance data for systems with dynamic compilers
US7805708B2 (en) * 2005-05-13 2010-09-28 Texas Instruments Incorporated Automatic tool to eliminate conflict cache misses
US7900193B1 (en) * 2005-05-25 2011-03-01 Parasoft Corporation System and method for detecting defects in a computer program using data and control flow analysis
US7975257B2 (en) * 2006-06-13 2011-07-05 Microsoft Corporation Iterative static and dynamic software analysis
US7865882B2 (en) * 2006-08-18 2011-01-04 International Business Machines Corporation Fast correctly rounding floating point conversion and identifying exceptional conversion
US7810073B2 (en) * 2006-09-05 2010-10-05 International Business Machines Corporation Method of translating n to n instructions employing an enhanced extended translation facility
US7908474B2 (en) * 2006-09-22 2011-03-15 International Business Machines Corporation Method for improved key management for ATMs and other remote devices
US7950003B1 (en) * 2006-12-07 2011-05-24 Sony Computer Entertainment Inc. Heads-up-display software development tool for analyzing and optimizing computer software
US9013494B2 (en) 2006-12-07 2015-04-21 Sony Computer Entertainment Inc. Heads-up-display software development tool
US9645915B2 (en) 2006-12-27 2017-05-09 The Mathworks, Inc. Continuous evaluation of program code and saving state information associated with program code
US8762956B1 (en) 2007-01-31 2014-06-24 The Mathworks, Inc. Generating a report document from code
US8099719B2 (en) 2007-06-19 2012-01-17 Microsoft Corporation Transactional debugger for a transactional memory system and detecting conflicts
US8381192B1 (en) * 2007-08-03 2013-02-19 Google Inc. Software testing using taint analysis and execution path alteration
US8316448B2 (en) * 2007-10-26 2012-11-20 Microsoft Corporation Automatic filter generation and generalization
US8122436B2 (en) * 2007-11-16 2012-02-21 Microsoft Corporation Privacy enhanced error reports
US8209356B1 (en) * 2008-01-14 2012-06-26 Marvell International Ltd. Direct command line parser
US8566797B2 (en) * 2008-02-27 2013-10-22 Red Hat, Inc. Heuristic backtracer
US9594670B2 (en) * 2008-07-03 2017-03-14 International Business Machines Corporation Managing software dependencies during software testing and debugging
US8468499B2 (en) * 2009-03-16 2013-06-18 Ntt Docomo, Inc. Directed testing for property violations
US8504997B2 (en) * 2009-03-19 2013-08-06 Fujitsu Limited Environment data refinement based on static analysis and symbolic execution
JP5102823B2 (ja) * 2009-12-21 2012-12-19 インターナショナル・ビジネス・マシーンズ・コーポレーション 総テスト時間を最小にするようにテストシナリオを最適化するテスト支援装置、テスト装置、テスト支援方法及びコンピュータプログラム
US8479171B2 (en) * 2010-05-24 2013-07-02 Fujitsu Limited Generating test sets using intelligent variable selection and test set compaction
US9075916B1 (en) * 2013-10-22 2015-07-07 The Mathworks, Inc. Undoing/redoing program code execution
US9064052B1 (en) * 2013-10-22 2015-06-23 The Mathworks, Inc. Providing intermediate results of evaluating program code that includes a compound statement
US9047411B1 (en) * 2013-10-22 2015-06-02 The Mathworks, Inc. Programming environment for executing program code despite errors and for providing error indicators
US9053235B1 (en) * 2013-10-22 2015-06-09 The Mathworks, Inc. Program code interface for providing program code and corresponding results of evaluating the program code
US9053228B1 (en) 2013-10-22 2015-06-09 The Mathworks, Inc. Determining when to evaluate program code and provide results in a live evaluation programming environment
US10628140B2 (en) * 2016-11-17 2020-04-21 Mitsubishi Electric Corporation Program code generation apparatus
US10235190B2 (en) 2016-12-14 2019-03-19 International Business Machines Corporation Executing instructions to store context information based on routine to be executed
US20180165073A1 (en) 2016-12-14 2018-06-14 International Business Machines Corporation Context information based on type of routine being called

Family Cites Families (7)

* 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
US4992934A (en) * 1986-12-15 1991-02-12 United Technologies Corporation Reduced instruction set computing apparatus and methods
US5005119A (en) * 1987-03-02 1991-04-02 General Electric Company User interactive control of computer programs and corresponding versions of input/output data flow
US5210874A (en) * 1988-03-22 1993-05-11 Digital Equipment Corporation Cross-domain call system in a capability based digital data processing system
WO1990001738A1 (en) * 1988-07-29 1990-02-22 Hunter Systems Software, Inc. Machine process for translating programs in binary machine language into another binary machine language
US5313614A (en) * 1988-12-06 1994-05-17 At&T Bell Laboratories Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems
US5148528A (en) * 1989-02-03 1992-09-15 Digital Equipment Corporation Method and apparatus for simultaneously decoding three operands in a variable length instruction when one of the operands is also of variable length

Also Published As

Publication number Publication date
US5317740A (en) 1994-05-31
EP0531522A1 (en) 1993-03-17
CA2082065A1 (en) 1992-09-08
WO1992015932A2 (en) 1992-09-17
WO1992015932A3 (en) 1992-10-15
IE920741A1 (en) 1992-09-09
AU2256692A (en) 1992-10-06
AU653626B2 (en) 1994-10-06
CA2082065C (en) 1996-09-03
JPH0762827B2 (ja) 1995-07-05

Similar Documents

Publication Publication Date Title
JPH06502269A (ja) プログラムコードの交差像参照方法
JPH05508503A (ja) 後方記号実行による分岐分析
US5287490A (en) Identifying plausible variable length machine code of selecting address in numerical sequence, decoding code strings, and following execution transfer paths
US5652889A (en) Alternate execution and interpretation of computer program having code at unknown locations due to transfer instructions having computed destination addresses
US5307492A (en) Mapping assembly language argument list references in translating code for different machine architectures
US5339238A (en) Register usage tracking in translating code for different machine architectures by forward and reverse tracing through the program flow graph
US5598560A (en) Tracking condition codes in translation code for different machine architectures
US5301325A (en) Use of stack depth to identify architechture and calling standard dependencies in machine code
US6243864B1 (en) Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths
JP2004272922A (ja) エミュレーションコンピュータ技術を実行する直接命令
EP1899859B1 (en) Translating expressions in a computing environment
EP0735464B1 (en) Method and apparatus for computer code processing in a code translator
CA2302306A1 (en) Meta-language for c++ business applications
Kicinski et al. Xdp hardware offload: Current work, debugging and edge cases
Matthews The Poly and ML System: Abstract Machine and Realisation