JPH05508503A - 後方記号実行による分岐分析 - Google Patents

後方記号実行による分岐分析

Info

Publication number
JPH05508503A
JPH05508503A JP4508277A JP50827792A JPH05508503A JP H05508503 A JPH05508503 A JP H05508503A JP 4508277 A JP4508277 A JP 4508277A JP 50827792 A JP50827792 A JP 50827792A JP H05508503 A JPH05508503 A JP H05508503A
Authority
JP
Japan
Prior art keywords
instruction
execution
address
program
instructions
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
JP4508277A
Other languages
English (en)
Other versions
JPH0727464B2 (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 JPH05508503A publication Critical patent/JPH05508503A/ja
Publication of JPH0727464B2 publication Critical patent/JPH0727464B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Error Detection And Correction (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

【発明の詳細な説明】 本発明は、デジタルコンピュータのためのプログラムコードの変換に係り、より 詳細には、変換されるべき全てのプログラムコードの位置がそのプログラムコー ドを実際に実行するまで分からない場合にそのプログラムコードをある言語から 別の言語に変換することに係る。
2、公知技術の説明 コンピュータ言語の変換プログラムとしては、パスカルやフ1−hランやコボル やPL/T又はCのような高レベル言語をマシン言語に変換するものが良く知ら れている。これらの言語の場合、プログラムは英語のようなスタイルでコード化 される。コンパイラ−と称する言語変換プログラムは、高レベル言語のプログラ ム(ソースプログラムと称する)を読み取って、それをマシン言語プログラム( 目的プログラムと称する)に変換する。
高レベル言語の1つの主な利点は、アルゴリズムを表現する容易さに加えて、マ シン独立なことである。それらは、ハードウェアマシン及び命令セットの特性を 秘めている。しかしながら、マシン言語のプログラミングが所望されるアプリケ ーションは多数ある。プログラムの実行速度を高めるために、繰り返し実行され る手順のコードをマシン言語で書き込み、その手順を実行するに必要なマシンサ イクルの数を最小限に抑えることがしばしば望まれる。又、多くのコンピュータ システムでは、特定コンピュータの特定ハードウェア特徴を直接的に制御するた めにマシン言語のプログラミングが必要とされる。例えば、メモリ及び入力/出 力装置を管理するオペレーティングシステムの部分は、しばしばマシン言語で書 かれる。
マシン言語のプログラムは、通常、2進コードではなくてアッセンブリー言語の コードで書かれている。アッセンブリー詣では、プログラマ−がメモリ位置及び 命令に対して記号名を用いてマシンのオペレーションを指定することができ−る 。アラセンブラーと称するプログラムは、アッセンブリー言語のプログラムを2 進のマシンコードに変換する。アラセンブラーは、記号の値及びデータエレメン トのアドレスを記憶する全ての作業を実行する。しかしながら、高レベル言語と は異なり、各アッセンブリー言語命令は厳密に1つのマシン命令に対応している 。
近年、ある種のコンピュータのためのマシン言語を別の種類のコンピュータのた めのマシン言語に変換する必要性が生じている。この必要性は、コスト効率のよ り高い新規なコンピュータアーキテクチャ−を生み出したコンピュータフ1−ド ウエアの急速な進歩によって生じたものである。特に、ここlO年間以上にわた り、最も性能の高い汎用のコンピュータは、「コンプレックス命令セットアーキ テクチャ−(complex 1nstruction set archit ecture)J (CI SC)を用いており、これは命令セット中に非常に 多数の命令を有することを特徴とするもので、複雑なメモリアクセスモードを伴 う可変長さ命令及びメモリ対メモリ命令をしばしば含んている。このCl5Cの 主な例が、VAX (登録商標)命令セットであり、これに用いられる命令は、 1ないし2バイトのOPコードと、0ないし6のオペランド指定子とを存し、各 々のオペランド指定子は1バイトないし18バイトの長さである。オペランド指 定子のサイズは、アドレスモード、変位のサイズ(バイト、ワード又はロングワ ード)等々に基づいている。オペランド指定子の第1バイ)・はそのオペランド のためのアドレスモードを記述し、一方、OPコードはオペランドの数Oから6 を指定する。しかしながら、OPコード自体は常に命令の全長を決定するもので はない。というのは、異なった長さのオペランド指定子と共に多数のoPコード を使用できるからである。VAX命令セットの別の特徴は、クオドワード又はロ ングワードレファレンスに加えて、バイト又はバイトストリングのメモリレファ レンスを使用することにあり、即ちメモリレファレンスは、非整列バイトレファ レンスを含んで1バイトから多ワードまで可変長さのものである。
Cl5Cアーキテクチャ−は、コードをコンパクトにすると共に、アッセンブリ ー言語のプログラミングを容易なものにした。中央処理ユニット(CPU)がメ モリよりも非常に高速度であった時代には、l命令当たりにより多くの作業を行 うことが効果的であった。というのは、さもな(ば、CPUはメモリか命令を送 りだすのを待って著しい時間を費やしてしまうからである。しかしながら、近年 、メモリ速度の進歩と、オン・チップキャッシュやハイアラーキ−キャッシュの ような技術により、Cl5Cアーキテクチャ−の主たる利点かなくなってしまっ た。それ故、命令アーキテクチャ−の選択は、今や、合理的なコストで最大の実 行速度を得るためにCPUに要求される複雑さによって決められている。これら のことから、簡易な命令セットアーキテクチャ−(RrSC)が優れた性能とコ スト効率を有することが示される。
簡易命令セット即ちRISCのプロセッサは、命令の数が少なくて簡単にデコー ドできることを特徴とすると共に、全ての演算/論理オペレーションをレジスタ 対レジスタで行わねばならないことを特徴とする。もう1つの特徴としては、複 雑なメモリアクセスが許されず、即ち全てのメモリアクセスはレジスタのロード /記憶オペレーションであり、そして少数の比較的簡単なアドレスモードしがな く、ひいてはオペランドアドレスを指定する方法が若干しかない。命令は1つの 長さしかなく、メモリアクセスは、通常は整列された標準データ巾のものである 。命令の実行は、マイクロコードと異なり直接固定布線型のものである。命令の サイクルタイムは固定で、命令は1つの短いサイクル(平均で、というのは、バ イブライン動作により実際の実行は数サイクルに分散されるので)に全て実行す るように比較的簡単に定められる。
不都合なことに、既に確立された命令アーキテクチャ−に対しておびただしい量 のコンピュータソフトウェアがこれまでに書かれており、これらソフトウェアの 多くは、高レベル言語のコンパイラ−から生じたものではないマシン言語のプロ グラムを含んでいる。これらの場合、新たな命令アーキテクチャ−に対して書か れたコンパイラ−を用いてソースコードをコンパイルし直すという通常の方法に よりソフトウェアをその新たなコンピュータアーキテクチャ−にr移行」するこ とはできない。
ある場合には、既存のコンピュータソフトウェアのマシン言語プログラムに対し てアッセンブリー言語コードが存在する。それ故、各々のアッセンブリー言語命 令を、同じ基本機能を行う新たな命令アーキテクチャ−の1つ以上のマシン命令 に変換するために変換プログラムを書くことができねばならない。このような直 接的な変換を実施できるかどうかは、新たな命令アーキテクチャ−のコンパチビ リティによって左右される。例えば、VAX命令を含むcrscコードをRIS Cコードに変換する場合に、この変換を実施できるかどうかは、RISCCPU ハードウェア及びRrSC命令セットの革新によりて著しく改善される。これに ついては、参考としてここに取り上げる1990年6月29日出願のF高性能プ ロセッサにおける分岐予想(Branch Prediction in Hj gh−Performance Processor) Jと題するリチャード ・L・サイト及びリチャード・T・ライチク氏の米国特許出願071547,5 89に開示されている。
多くの場合、既存のコンピュータソフトウェアは、高レベル即ちアッセンブリー 言語のソースコードの完全なセット即ちコヒレントなセットが存在しないような 2進マシン言語コードを含んでいる。これでは、変換すべき全ての2進マシンコ ードを探索するという非常に困難な問題が生じる。通常の場合、プログラムの中 の2進マシンコードの一部分はその実行時間までに探すことができない。という のは、このコードは計算された行き先アドレスを有する「ジャンプ」や「コール 」命令のような少な(とも1つの実行転送命令を含んでいるからである。実行時 間の際に、行き先アドレスが計算され、実行がその命令から「欠落」コードへと 転送される。
例外的な場合には、プログラム中の2進マシンコードの幾つかが実行時間まで形 成されない。これらの例外的な場合というのは一般的にプログラミング技術が不 充分なことによるものであるが、実行時間には、例えば機密保持の目的で「ライ センスチェック」ルーチンの一部としてコードがしばしば形成される。「ライセ ンスチェック」ルーチンでは、例えば、一連の命令がスクラッチメモリエリアへ 書き込まれそして一連の命令が実行される。ライセンスルーチンを欺くためには 、スクラッチエリアに書き込まれた一連の命令からルーチンの動作モードを見分 けねばならない。しかし、一連の命令は、実行時間まで存在しないので、プログ ラムの通常のプリントアウトやダンプ動作では得られない。
オリジナルプログラムの中の全てのマシンコードを探索するという問題がある場 合には、コードか実行時間に解読される。インタープリタ−の変換プロセスはア ッセンブリー言語のトランスレータ−と同様であるが、実行時間の際の解読には 変換されたコードの実行よりも約2桁も時間がかかる。というのは、各々のマシ ン命令を解読するためにインタープリタ−プログラムの中の多数の命令を実行し なければならないからである。不完全な変換を使用できるようにするために、新 たな命令アーキテクチャ−を用いたCPUにオリジナルプログラムを送るときに は、インタープリタ−プログラムと、オリジナルプログラムのコピーと、アドレ ス変換情報が、変換されたコードと共に与えられる。変換されたコードの実行が 、変換されないコードに対するオリジナルプログラム中の実行転送に対応するポ イントに達したときに、CPUはその実行をインタープリタ−プログラムに転送 し、オリジナルプログラムの中の変換されないコードを解読する。インタープリ タ−は各々の変換されないマシン命令を新たなアーキテクチャ−に対する1つ以 上のマシン命令に次々に変換し、それを実行する。インタープリタ−は、アドレ ス変換情報を用いてその実行を適当な時間に変換されたプログラムへ転送して戻 す。しかし、変換されないコードが存在すると、実行時間までにほとんど全ての 命令を探索して変換することができない限り、性能に著しい影響が及ぶ。
発明の要旨 上記で説明したように、プログラムコードは、計算された行き先アドレスを有す る実行転送命令を含んでいるので、通常の場合には探索することができない。
本発明の重要な特徴によれば、実行転送命令からプログラムを通して後方サーチ を行って、プログラム内の命令のアドレスに関して固定のアドレス値に対して計 算行き先アドレスをめるのに用いた少なくとも1つの手前の命令を見つけること により、計算行き先アドレスがめられる。それ故、その計算行き先アドレスをめ たアドレス値においてそのプログラムの少なくとも1つの追加の命令が見つけら れる。
好ましくは、複数の手前の命令を用いて、後方記号実行のプロセスにより計算行 き先アドレスがめら札このプロセスでは、実行転送命令の行き先アドレスが記号 表現によって示されそして各々の手前の命令の作用を表すようにこの表現が次々 に変更される。例えば、実行転送命令をrJMP R6+4Jとする。これは、 汎用レジスタR6の内容に4を加えることにより計算した絶対アドレスに実行を 転送するものである。この計算行き先アドレスは、例えば、 rR6+4Jとい う記号で表される。それより後方のプログラム中でR6を参照する次の命令がr MOVAB 4 (R5)、R6J であるとする。これは、汎用レジスタR5 の内容に4を加えてその和をR6に入れるものである。記号表現rR6+4Jは 手前のrMOVAB 4 (R5)、R6J命令を通して押し戻され、変更した 表−現rR5+8」を得る。この変更した表現は、手前の命令の後に記号表現が 育していたものと同じ値をその手前の命令の前に有している。
後方記号実行のプロセスは、計算行き先アドレスか絶対アドレスもしくは像関連 アドレスに対してめられるまでか、或いはその計算行き先アドレスの値に影響す るが後方記号実行を許さないような手前の命令に到達するまで続けられる。
この後方記号実行は、例えば、後方記号実行で計算行き先アドレスをめられない か又はめることがほとんどないような幾つかの命令(例えば、X0RB2RE、 R2)については、許可されない。この場合には、計算行き先アドレスを「未知 (LNIGIOWN)Jの記号値へ減少して欠落コードの可能性を指示するのが 好都合である。しかしながら、限定された命令セット(例えば、汎用レジスタを 伴う加算、減算、ロード及び記憶)のみについて記号実行を許すことにより、典 型的なプログラムに見られる計算行き先アドレスのほとんどの部分をめることが できるようになる。
好ましくは、計算行き先アドレスをめるための後方記号実行は、プログラムに対 して見い出される命令の流れ図を構成しながら実行される。この流れ図はプログ ラムに対して見い出された命令の基本的なブロックを相互接続する実行経路を含 むものである。各基本的なブロックは、一連の連続する命令で、基本ブロックの 開始部に単一の既知の入口ポイントを育しそしてブロックの終了部に単一の出口 ポイントを有する。実行は基本ブロックの開始部のみへ転送さね、そして基本ブ ロックの終了部のみから転送される。
所与の実行転送命令の計算行き先アドレスに対する後方記号実行が基本ブロック の入口ポイントに到達すると、後方記号実行は、その所与の実行転送命令に対し てまだ検査されていない各々の手前のブロックに向かって後方に進められる。
この最後の条件付けは、後方記号実行に無限のループができるのを回避する。こ の目的で、例えば、計算行き先アドレスを有する別々の所与の実行転送命令ごと に後方記号実行か開始されるたびに「エポック・ナンバー」が増加さね、そして 後方記号実行か各ブロックを通して実行されるときに各ブロックのエポック・ナ ンバーアトリビュートにその値のエポック・ナンバーが指定される。
後方記号実行は、1つの基本ブロックの入口ポイントから複数の他のブロックの 終了部へと進められるので、所与の実行転送命令の計算行き先アドレスは複数の 異なった値に対してめられることが考えられる。又、後方記号実行のプロセスは 、基本ブロックとして識別された一連の連続する命令を2つの基本ブロックとし て識別し直すことも考えられる。これは、計算行き先アドレスが、基本ブロック においてその基本ブロック内の第1命令のアドレス以外のコードのアドレスであ るとされたときに生じる。
計算行き先アドレスの新たな値をめるときには、追加命令が探索されるか、又は 既に探索された命令に対して新たな実行転送経路が発見される。既に探索された 命令に対して新たな実行転送経路が発見されたときには、既に探索された命令か らその新たな経路に沿った後方記号実行により、その既に探索された命令に続く 実行転送命令における計算行き先アドレスに対し1つ以上の追加の値がめられる ことが考えられる。それ故、この場合は、後方記号実行が繰り返される。
後方記号実行の繰り返しにより、既に探索された命令に対し追加の実行転送経路 か探索されて、後方記号実行を更に繰り返すこともあるが、最終的には追加の実 行転送経路は見つからず、プロセスは終了となる。
図1は、複雑(コンプレックス)命令を処理するように特に構成されたバイブラ イン式処理ユニットを有するCl5Cデジタルコンピユータシステムのブロック 図である。
図2は、多数の命令に対して異なったタスクを同時に実行するときの図1のバイ ブライン処理ユニットの状態を示す図である。
図3は、複雑な命令セットからの可変長さ命令の好ましいフす一マットを示す図 である。
図4は、ロングワード間の加算を行うための特定の可変長さの命令を示す図であ る。
図5は、指定子の第1バイトに含まれたモード情報のデコードを示すテーブルで ある。
図6は、RISCデジタルコンピュータシステムのブロック図である。
図7は、RISC命令セットの中の好ましい命令フォーマットを示すブロック図 である。
図8は、オリジナルのCl5Cプログラムを、RISC命令をもつ変換プログラ ムに変換するためのアナライザー及びRISCコードジェネレータを含むトラン スレータ−のブロック図である。
図9は、オリジナルcrscプログラムの部分RISC変換と、そのオリジナル Cl5Cプログラムの非変換部分を解読するインタープリタ−との間で実行が分 担されるときのRISCコンピュータからのデータ及びプログラム入力と、デー タ出力とを示すブロック図である。
図10は、図9に使用されたインタープリタ−を呼び出す図8のRISCコード ジェネレータのステップを示すフローチャートである。
図11は、図9に示す部分RISC変換とで実行が分担されるときのインタープ リタ−及びその動作を示すフローチャートである。
図12は、いつ実行がインタープリタ−から部分RISC変換へ移行するかを決 定するアドレスチェックルーチンのフローチャートである。
図13は、図8のトランスレータ−の動作を示すフローチャートである。
図14は、図8のトランスレータ−により発生される概要ページであって、変換 されたオリジナルのCl5Cプログラムのメモリマツプを含む概要ページを示す 図である。
図15は、オリジナルのcrscプログラムのフローチャートである。
図I6は、オリジナルのCl5Cプログラムのエラー特有の流れ図である。
図17は、マシンコードから流れ図を自動的に発生するためにトランスレータ− のアナライザーによって使用されるデータ構造を示すブロック図である。
図18は、マシンコードから流れ図を自動的に発生するためにアナライザーによ って使用される手順を示すフローチャートである。
図19は、マシンコードから流れ図を自動的に発生する間に実行転送命令からの 経路を検査するためにアナライザーによって使用される手順を示すフローチャー トである。
図20は、手前のプログラム実行における計算行き先アドレスの値を見つけよう とする試みにおいて後方記号実行を行うためにアナライザーによって使用される 手順のフローチャートである。
図21は、一定の変位を含む行き先アドレスと、特定の汎用レジスタと、直接又 は間接メモリアクセスの指示とに対する記号表現において項目の固定フォーマッ トを示した図である。
図22は、一定の変位を含む行き先アドレスと、特定の汎用「ベース」レジスタ と、特定の汎用「インデックス」レジスタと、一定のオフセットと、直接又は間 接メモリアクセスの指示とに対する記号表現において項目の固定フォーマットを 示した図である。
図23は、メインプログラムルーチンの流れを示す概略図で、破線で示す実行転 送経路を含んだ間接的なプログラムループを示す図である。
図24は、所与の記号表面のための値を見つける試みにおいて基本ブロックをサ ーチするために後方記号実行に用いられる手順のフローチャートである。
図25は、所与の記号表現を命令を通して後方に押しやってその記号表現を変更 し、プログラムの実行中に、命令実行の直後にその所与の記号表現で表わされる であろうものと同じ値を命令実行の直前にその変更した表現で表すようにするた めに、後方記号実行に使用される手順を示すフローチャートである。
図26は、記号表現を命令を通して後方に押しやる助けをするために各々の命令 OPコードに対して予め決定することのできるデータのフォーマットを示す図で ある。
図27は、記号表現を命令を通して押しやることによりその表現がコンピュータ プログラムの一定アドレスを表すフォーマットに変換されたか又はコンピュータ のオペレーティングシステムの一定アドレスを表すフォーマットに変換されたる 行き先を表すかどうかをチェックするためのルーチンを示すフローチャートであ る。
図28及び29は、プログラムメモリの未知のコードエリアにおいて巧みなプロ グラムコードを見つけるための3つのスキャニングモードを含む手順を示すフロ ーチャートである。
図30は、プログラムの実行中に解読された非変換プログラムコードの位置を識 別する実行ログファイルの利点を取り入れてオリジナルプログラムを繰り返し変 換することによりプログラム変換及び維持を行う一般的な手順を示すフローチャ ートである。
図31は、2つの相互に従属するプログラムを交互に変換及び再変換しそして2 つのプログラムを容易に合体できないもしくは同時に変換できない状態において コンバージェンスをテストするための手順を示すフローチャートである。
図32は、2つの相互に従属するプログラムの像情報ファイルを示すと共に、フ ァイル間のリンケージを示すブロック図である。
図33は、2つの相互に従属するプログラムの情報ファイル間のリンケージを利 用して、これらプログラムが交互に変換及び再変換されるときに迅速にコンバー ジェンスを得るための手順を示すフローチャートである。
本発明は、種々の形態で実施できるが、その特定の実施例を図示して以下に詳細 に説明する。しかしながら、本発明は、ここに開示する特定の形態に限定される ものではなく、請求の範囲に規定した本発明の精神及び範囲内に入る全ての変更 、修正及び等動物も包含するものとする。
実施例の詳細な説明 本発明の好ましい実施例は、複雑命令セットコンピュータ(CISC)用のプロ グラムコードを簡易命令セットコンピュータ(RISC)用のプログラムコード に変換するために効果的に使用される。先ず、図1を参照すれば、そこに示され た複雑命令セットのデジタルコンピュータ20は、中央処理ユニット21と、入 力/出カニニット22と、メインメモリ23とを備えている。
データ及びこれを処理するための命令は、メインメモリ23内のアドレス可能な 記憶位置に記憶される。命令は、CPUにより実行されるべきオペレーションを コードの形態で指定するオペレーションコード(OPコード)と、オペランドを 探索するための情報を与えるオペランド指定子とを含んでいる。典型的なCl5 C命令アーキテクチャ−においては、各命令の最初のバイトがOPコードを含み 、それに続くバイトがオペランド指定子を含む。命令は可変長さであるのか好ま しく、種々の形式の指定子を同じOPコードと共に使用することができる。これ については、参考としてここに取り上げる1980年12月23日付けのストレ ッカー氏等の米国特許第4,241.397号に開示されている。
メインメモリ23は、多数の記憶位置を含み、それ故、安価ではあるが比較的低 速の記憶装置、例えば、ダイナミック・ランダム・アクセス(DRAM)メモリ チップで構成される。CPU21は、メインメモリのアクセスタイムよりも高速 度で命令を実行するので、比較的記憶容量の小さい高速キャッシュメモリにデー タ及び命令の一部分のコピーを保持するメモリアクセスユニット24を備えてい る。通常、CPUは、データ及び命令をメモリアクセスユニット24のキャッシ ュメモリから得ることが必要であるが、このキャッシュメモリに必要な命令及び データか見つからないときには、メモリアクセスユニットがメインメモリユニッ ト23をアクセスし、必要な命令又はデータをキャッシュメモリに「再装填」す る。
又、メモリアクセスユニット24は、命令に使用される「仮想」アドレスをメイ ンメモリ23に使用される「物理」アドレスに変換するための変換バッファのよ うな手段も備えている。この技術により、プログラマ−は、メインメモリ23に 設けられる以上に多数のアドレス可能なメモリ位置を含む「仮想アドレススペー ス」を参照することができる。それ故、プログラマ−は、メインメモリ23の制 限された記憶容量によってあまり制約を受けることがない。
より速いデータアクセスを与えるために、命令は、マルチボートレジスタファら 汎用レジスタの幾つかには特定のファンクションを指定することができ、例えば 、1つの汎用レジスタは典型的に「プログラムカウンタ」として使用さね、ソー スオペランドとして参照されたときにデコードされる命令のアドレスを与えるか 、或いは行き先オペランドとして参照されたときにデコードされるべき次の命令 のアドレスを指定する。
個々の命令の実行は、各々のバイブラインファンクションユニットによって行わ れる多数のサブタスクに分割される。これらのバイブラインファンクシコンユニ ットは、メモリから命令をフェッチするための命令バッファ26と、このフェッ チされた命令をデコードするための命令デコーダ27と、ソースオペランド指定 子によって識別されたソースオペランドをフェッチするためのオペランドユニッ ト28と、ソースオペランドに基づいて演算、論理及び特殊なオペレーションを 実行して結果を得るための実行ユニット29と、行き先オペランド指定子によっ て識別されたメモリ位置又はレジスタに結果を記憶するためのりタイヤユニット 30とを備えている。
複雑命令セットのデジタルコンピュータ20の好ましい構造に関する詳細につい ては、参考としてここに取り上げる1989年2月3日出願のファイト氏等の[ 可変長さ命令アーキテクチャ−における多数の指定子のデコーディング(Dec oding Multiple 5pecifiers in a Varia ble Length In5truction Archit■モ狽浮窒■j J と題する米国特許出願07/307,347を参照されたい。
図2は、デジタルコンピュータ(図1の20)が1サイクル当たりI命令という 平均的な速度で命令を実行するような理想的な状態に対するパイプラインファン クションユニット(図1の26ないし30)の状態を示す図である。一般に、各 命令の実行中にはバイブラインユニット26ないし30の各々により次の段階か 実行される。即ち、命令フェッチ、命令デコード、オペランドフェッチ、実行及 び結果の記憶である。
1つのサイクルは、各ファンクションユニットがそのサブタスクを実行するため の最小の時間である。所与のファンクションユニットは、例えば、メモリアクセ スユニット(図1の24)が「再装填」オペレーションを実行しているときには 、そのメモリアクセスユニットの競合により1つのサイクル内にそのサブタスク を実行しないことがある。更に、特に複雑な命令を実行しているときには、命令 か複雑であるために、所与のファンクションユニットがそのサブタスクを実行す るのに2サイクル以上を要することがある。いずれの場合にも、専用のノ1−ド ウエア段を使用することにより、これらのステップをバイブラインオペレーショ ンにおいである程度オーバーラツプさせて、全命令スルーブツトを高めることが できる。
図3は、図〕に示す中央処理ユニット(CPU)によって処理することのできる 典型的な命令40を示している。この命令は、参考としてここに取り上げるデジ タル・イクイップメント社のレビー及びエフハウス二世著の[コンピュータプロ グラミング及びアーキテクチャ−1VAX−11」 (1980年)に記載され たVAX (登録商標)可変長さ命令アーキテクチャ−に対応する。この命令4 0は、l又は2バイトのオペレーションコード41を含んでいる。第1バイト4 2がFD(16進)の値を有する場合には、これがダブルバイトのオペレーショ ンコードとして認識される。さもなくば、命令デコーダ(図1の27)がそのオ ペレーションコードを1バイトしか含まないものとして認識する。命令40は、 更に、オペレーションコードの後に6個までの指定子を含む。
オペレーションコードは、命令内にいかに多数の指定子が含まれるかを指示する 。所与のオペレーションコードに関連して使用される指定子は、種々のアトリビ ュート及び種々の長さをもつことができる。特定の指定子のアトリビュートはそ の指定子の第1バイトのアドレスモードによって少なくとも部分的に決定される 。しかしながら、指定子の許容できるアトリビュートは、オペレーションコード によって制限を受けることが時々ある。更に、「即座のアドレッシング」として 知られている特定種類のアドレスモードについては、指定子情報の長さがその指 定子によって指定された[データタイプ」により決定される。
特定の可変長さの命令が図4に示されている。アラセンブラー表示では、この命 令がrADDL3 RO,#4.L“203(R2)Jと書き表される。マシン コードでは、命令が8バイトを含み、一般に45で示されている。第4のバイト は、23(16進)のオペレーションコードであり、これはアッセンブラ一二ュ ーモニックrADDL3Jに対応する。このオペレーションコードは、第1のロ ングワードオペランドを第2のロングワードオペランドに加算しそしてロングワ ードの結果を行き光位置に記憶すべきであることを指示する。オペレーションコ ードに続いて、50(16進)の値をもつ「レジスタ指定子」がある。16進数 の5は、指定子がレジスタ指定子であることを示し、そして16進数Oは、指定 されたレジスタかCPU内のRO汎用レジスタであることを示している。それ故 、レジスタ指定子は、第1のソースオペランドが汎用レジスタROの内容である ことを指定する。
レジスタ指定子に続いて、04(16道)の値を有する「短リテラル指定子j  ′かある。この短リテラル指定子は、第2のソースオペランドとして値4を指定 する。
短リテラル指定子に続いて、加算オペレーションの行き先を指定するC複雑指定 子Jの第1バイトがある。16進数のEは、rロングワード変位」アドレスモー ドを指示し、この場合、それに続く4つのバイトは、複雑指定子により指定され たアドレスを得るためにペースレジスタの内容の値に加算されるべき32ビツト のアドレス変位として解読される。16進数の2は、汎用レジスタR2をペース レジスタとして使用すべきであることを指示する。それ故、複雑指定子は、オペ ランドコードによって指示されたロングワード加算の和即ち結果を、汎用レジス タR2の内容に203(16進)の値を加算することにより計算したメモリ内の アドレスに記憶すべきであることを指示する。
図5には、分岐変位ではないオペランド指定子の第1バイトをデコードするため のデコードテーブルが示されている。オペランド指定子の第1バイトの最上位2 ビツトがどちらも0である場合には、そのオペランド指定子が単一の第4バイト より成り、そしてこのバイトの下位6ビツトは、 「類リテラル」と称する6ビ ツト値を指定するものとして解読もしくはデコードされる。
オペランド指定子の第」バイトの最上位2ビツトが0でない場合には、そのバイ トか分岐変位の一部分でないと仮定すれば、そのバイトは、CPU内の16個の 汎用レジスタROないしR15の指定の1つに関連した12のレジスタアドレス モードのうちの特定の1つとしてデコードされる。このバイトの最上位4ビツト (レジスタモードフィールドを構成する)は、アドレスモードを指示するように デコードさね、そして最下位4ビツト(汎用レジスタアドレスフィールドを構成 する)は、168の汎用レジスタのうちの特定の1つをアドレスするのに使用モ ード」か指定され、レジスタアドレスフィールドによってアドレスされた汎用レ ジスタの内容の値にオペランドのバイトのサイズ(例えば、バイト、ワード、ロ ングワード、クオドワード、又はオクタワードのデータ形式に対して各々l、2 .4.8又は16)が乗算され、その和かその直後の複雑指定子について実行さ れるアドレス計算に項として含1狐次のバイトは、6ないしF(16進)の値の レジスタモードフィールドと、複雑指定子に対してペースレジスタをアドレスす るレジスタアドレスフィールドとを有していなければならない。
レジスタモードフィールドが値5(16進)をもつ場合には、指定子が「レジス タ指定子」であって、レジスタアドレスフィールドによって指示された汎用レジ スタにオペランドの値が見い出されるか、或いは指定子が命令の行き先に対する ものである場合には、その指定子は、レジスタアドレスフィールドによって指示 された汎用レジスタに結果を記憶すべきであることを指定する。
レジスタモード6.7及び8の各々については、指示されたレジスタがオペラン ドに対するメモリアドレスを含んでいる。ソースオペランドについては、このメ モリアドレスからオペランドの値が読み出さね、そして行き先オペランドについ ては、このメモリアドレスに結果が書き込まれる。モード6においては、指示さ れたレジスタがオペランドのアドレスを含む。レジスタモード7においては、指 示された汎用レジスタの内容が、先ず、アドレス計算の前に減少され、モード8 においては、指示された汎用レジスタの内容が、このレジスタを用いてアドレス を計算した後に増加される。レジスタモード9はレジスタモード8と同様である が、指示された汎用レジスタの内容は、オペランド自体ではなくてオペランドア ドレスが見い出されるメモリ内のアドレスを指定する。
モード10ないしI5は、種々の形式の「変位ノモードである。変位モードにお いては、モード1O112及び14の場合に各々バイト、ワード又はロングワー ドを構成する変位値か指定の汎用レジスタの内容に加えられ、オペランドアドレ スが得られる。オペランドはモード11、I3及び15においても同様に決定さ れるが、変位値と汎用レジスタの内容との和は、オペランドのアドレスを見つけ ることのできるメモリアドレスを識別する。
モード8ないし15においては、オペランド指定子の第エバイトのレジスタアド レスフィールドは、プログラムカウンタであるレジスタR15を含む汎用レジス タのいずれかを指定することができる。モード8及び9の場合に、プログラムカ ウンタがアドレスされたとすれば、プログラムカウンタ自体の値が増加さね、プ ログラムの実行は命令流に置かれたオペランドデータ又はオペランドアドレスを ジャンプさせられる。モード8において、この特殊なケースは「即時」のアドレ スモードとして知られており、モード9については、 「絶対」アドレスモード として知られている。特に、汎用レジスタ0ないし14のいずれかについてモー ド8及び9がデコードされたときには、モード及び汎用レジスタを示すバイトの 直後に次の指定子又は次のオペランドコードが現れる。しかしながら、この即座 のモードについては、即時データの多数のバイトが現わ〜バイトの数は指定子の データ形式によって決定される。
VAX (登録開襟)可変長さ命令は種々のものがあって複雑であるから、図1 のデジタルコンピュータ20は、■サイクル当たり1つのVAX可変長さ命令を 実行するという理想に近い性能を得るために非常に複雑なものである。しかしな がら、半導体処理技術及びメモリアーキテクチャ−の近年の進歩により、単純な 命令のみを実行するときにそれに匹敵する性能を有した単一チップの中央処理ユ ニットを製造することが可能となった。それに匹敵する性能を得るために、いわ ゆる「簡易命令セットコンピュータJ (RISC)が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のRISCコンピュータ50に関するそれ以上の詳細については、参考とし てここに取り上げる1990年6月29日出願の前記リチャード・L・サイト及 びリチャード・T・ライチク氏の「高性能プロセッサにおける分岐予想(Bra nch Prediction in H4gh−Performance P rocessor) Jと題する米国特許出願071547.589を参照され たい。
図7には、図6のコンピュータ50によって実行されるRISC命令セットの命 令の種々の形式の好ましいフォーマットが示されている。各命令は、32ビツト の固定長さを有する。
メモリ命令70は、ビット<31 + 26>における6ビツトOPコードと、 ビート<25:21>及び<20:16>における2つの5ビツトレジスタアド レスフイールドRa及びRbと、ビット<15:Q>における16ビツトの符号 変位とを含んでいる。この命令は、レジスタファイルとメモリとの間でデータを 転送し、レジスタファイル内のレジスタに有効アドレスをロードし、そしてサブ ルーチンジャンプを行うように使用される。変位フィールド<15 : 0>は ノくイトオフセットであり、即ちこれは符号拡張されてレジスタRbの内容に加 えられ、仮想アドレスを形成する。仮想アドレスは、特定の命令に基づいてメモ リロード/記憶アドレス又は結果の値として用いられる。
分岐命令71は、ビット<31:26>における6ビツトOPコードと、ビ・ソ ト<25:21>における5ビツトアドレスフイールドと、ビット<20 :  0>における21ビツトの符号分岐変位とを含んでいる。この変位は、ロングワ ードオフセットとして処理され〜これは、左へ2ビツトシフトされ(ロングワー ドの境界をアドレスするために)、64ビツトに符号拡張さtL、PC33の更 新された内容に加えられて、ターゲット仮想アドレスを形成する(オーバーフロ ーは無視される)。
オペレーション命令は2つの異なるフォーマット72及び73を有している。
フォーマット72は3つのレジスタオペランドを存し、そしてフォーマット73 は2つのレジスタオペランドとリテラルとを育している。このオペレーションフ ォーマットは、レジスタファイル43に2つのソースオペランドと1つの行き先 オペランドとを許容する整数レジスタオペレーションを実行する命令に対して使 用される。ソースオペランドの1つは、リテラル定数である。ビット12は、オ ペレーション命令が2つのソースレジスタオペレーションに対するものであるか 又は1つのソースレジスタ及びリテラルに対するものであるかを定める。ビット <31:26>の6ビツトOPコードに加えて、オペレーションフォーマットは ビット<11:5>に7ビツトのファンクションフィールドを有しており、演算 及び論理オペレーションに対して広範囲の選択を行えるようになっている。ソー スレジスタRaは、いずれの場合にも、ビット<25:21>に指定されそして 行き先レジスタRcはビット<4 : Q>に指定される。ビット12がOの場 合には、ソースレジスタRbがビット<20 : 16>に定めら札一方、ビッ ト12が1の場合には、8ビツト0拡張のリテラル定数が命令のビット<20: 13>によって形成される。このリテラルは、0から255までの範囲の正の整 数として解読され、64ビツトへとゼロ拡張される。
又、図8には、フローティングポイントレジスタからフローティングポイントレ ジスタへのオペレーションを実行する命令に対して使用されるフローティングポ イントオペレーション命令フォーマット74も示されている。フローティングポ イントオペレーション命令は、前記したようにビット<31:26>に6ビツト のOPコードを含むと共に、ビット<15:5>に11ビツトのファンクション フィールドを含んでいる。3つのオペランドフィールドFaSFb及びFcがあ って、その各々は、命令によって定められた整数又はフローティングポイントの オペランドを指定し、レジスタ13のみはFa、Fb及びFcによって指定され るか、これらのレジスタは整数値又はフローティングポイント値のいずれを含む こともできる。リテラルはサポートされない。フローティングポイント変換はフ ローティングポイントオペレーションフォーマット74のサブセットを使用して おり、レジスタ対レジスタの変換オペレーションを実行する。Fbオペランドは ソースを指定し、そしてFaオペランドはreg−31(全て0)となるはずで ある。
最後の命令フォーマット75は、拡張プロセッサファンクションを指定する特権 アーキテクチャ−ライブラリー(PAL又はPALcode)命令のためのもの である。この命令では、6ビツトのOPコードが前記のようにビットく31:2 6〉に存在し、そして26ビツトのPAL c o d eファンクシコンフィ ールド<25:O>がオペレーションを指定する。PALcode命令に対する ソース及び行き先オペランドは、個々の命令の定義において指定された固定のレ ジスタで供給される。
図7の命令フォーマットの6ビツトOPコードフイールド<31+26>は、2 喀即ち64個の異なった命令しかコード化することができない。従って、命令セ ットは64゛に限定される。しかしながら、命令フォーマット72.73及び7 4の「ファンクション」フィールドは、ビット<31:26>に同じOPコード を有する種々の命令を許す。
本発明の好ましい実施例は、より詳細には、図1のCl5Cコンピュータ20の プログラムを図6のRISCコンピュータ50のプログラムに変換するためのト ランスレータ−に関する。このトランスレータ−によって向けられねばならない 主な問題は、オリジナルのCl5Oプログラムにおける全ての命令を常に変換で きるものではないことである。常に変換が可能でない1つの理由は、Cl5Cア ーキテクチャ−ではcrscプログラムを「読み取り一書き込み」メモリエリア から実行することができ、従つて、プログラムは実行中にそれ自身を変更するこ とがあるからである。しかし、RfSCアーキテクチャ−では、 [リードオン リ」メモリエリアからプログラムを実行することか要求される。[読み取り一書 き込み」メモリエリアから実行されるべきCl5Cプログラム命令は、Cl5C 命令に変換できないが、実行時間中にRISCコンピュータで解読することはで きる。しかし、実行速度にかなり影響が出る。好都合なことに、Cl5Cプログ ラムは実行中にそれ自身を変更することはほとんどない。例えば、[読み取り一 書き込み」メモリエリアにプログラム命令を有する多くのCl5Cプログラムは 実際にはそれ自身を変更しない。
全てのCl5Cプログラムを変換できない更に一般的な理由は、変換すべき全て のCl5C命令を見つけることが困難だからである。Cl5Cプログラムを走ら せるためには、プログラムのスタートアドレスを知るだけでよい。スタートアド レスで開始される命令は分かるが、Cl5Cプログラムは、通常、計算された行 き先アドレスを育するFジャンプJやFコールJ命令のような少なくとも1つの 実行転送命令を含んでいる。この行き先アドレスは実行時間に容易に計算される が、これは、例えば、変換時間においては完全に中間的なものである。というの は、行き先アドレスは、プログラム入力データに基づいて計算されるからである 。しかしながら、一般的な場合に、本発明は、変換時間に計算行き先アドレスの ほとんとをめる技術を提供する。
図8には、Crsc−RISC)ランスレータ−80と、それに関連した入力・ 出力像及びデータ構造体がブロック図で示されている。トランスレータ−80は 、Cl5C命令を有するオリジナルプログラム81を受け取り、それに対応して 変換されてRISC命令を育するプログラム82を発生する。変換されたプログ ラム82に関連して、トランスレータ−80は、アドレス変換情報96も発生し 、これはオリジナルプログラムにおけるCl5C命令のアドレスを変換されたプ ログラムにおけるRrSC命令のアドレスに相関させる。
RISCコードジェネレータ83に加えて、トランスレータ−80はプログラム アナライザー84を備えており、これは、オリジナルプログラム81を分析して 命令をデータから分離すると共に、プログラムの流れをトレースしてRISCコ ードを最適なものにし、そしてRISC命令アーキテクチャ−によって再現でき ない特性を指定するCl5C命令を検出する。
プログラムアナライザー84は、補足人力85を参照して、オリジナルプログラ ムにおける命令の位置を探索する。補足人力85は、例えば、多数の像コンポー ネントをリンクすることによりオリジナルプログラム81か形成されたときに発 生されたリンカ−マツプファイル86を含むことができる。この場合、リンカ− マツプは、オリジナルプログラムの命令に対する入カポインドを識号1し、その 入カポインドの名称を与える。これらの名称は、トランスレータ−のメツセージ 及び他の出力を読み易くするのに有用である。
補足人力85は、プログラムカウンタ(PC)サンプリングヒストグラムファイ ル87を含み、これは、オリジナルプログラムの頻繁に実行される命令を識別す るために発生されたものである。PCサンプリングヒストグラムファイルを使用 できる場合には、プログラムアナライザーはこれを使用して、0より大きいサン プリング周波数をもつプログラムカウンタアドレスごとに、即ちPCサンプリン グヒストグラムファイルが発生されたときに実行されていた命令に対応するプロ グラムカウンタアドレスごとに、Cl5C命令を変換する試みを確実に行うよう にする。
又、補足人力85は実行ログファイル88も含み、これは、以前の変換動作で変 換されなかったが以前に変換されたプログラムの実行中にインタープリタ−によ って解読された命令のオリジナルプログラムにおけるアドレスを含んでいる。
図9及び11について以下で説明するように、この実行ログファイルは、例えば 以前に変換されなかったコードの解読中に発生8t’L、これは、変換されなか ったコードへ実行を転送する命令のオリジナルプログラムにおけるオリジナルア ドレスと、変換されなかったコードか置かれたオリジナルプログラムにおける行 き先アドレスとを対で含んでいる。トランスレータ−は、オリジナルアドレス及 び行き先アドレスの対を識別する情報を使用して、オリジナルプログラムの以前 に変換されなかった命令を変換する。オリジナルアドレスは、オリジナルプログ ラムの手前の変換中に発見されなかった実行経路を識別するのに用いられる。以 下で “述べるように、これらの実行経路の識別により、プログラムアナライア ザ−84は、以前に変換されたプログラムの実行中又はオリジナルプログラムの 変換されなかった部分の解読中に取り上げられなかった付加的な実行経路を発見 することができる。実行から再変換へこのように情報をフィードバックすること は、変換されたプログラムの各実行の後に行われて、オリジナルプログラムにお ける実質1全ての命令が最終的に探索されて変換されるのが好ましい。
又、プログラムアナライザー84はオーデイット出力89も発生し、これは、エ ラー、警報及び情報メツセージ90と、見い出された命令の領域及び入カポイン ドの位置を識別するオリジナルプログラム81のメモリマツプを示す概要ページ 91と、オリジナルプログラム81の変換された部分のフローチャートを定める 流れ図言語ファイル92と、オリジナルプログラムの出力像情報ファイル93と を含んでいる。
像情報ファイルは、像における予め定められた入カポインドのインターフェイス 特性に関する情報を含んでいる。トランスレータ−80は、オリジナルプログラ ム81か最初に変換されるときにそのオリジナルプログラムのための出力像情報 ファイル89を発生する。再変換中に、オリジナルプログラムの情報入力ファイ ルは入力ファイル94として使用することができ、これは、再変換中に、プログ ラムアナライザー84によって発見された付加的な命令及び実行転送経路に基づ いて更新される。
像情報ファイルは、他の像に対するレファレンスを分析し適当なリンケージを発 生するようにプログラムアナライザー84によって使用される。例えば、オリジ ナルプログラム81がライブラリールーチンを呼び出すときには、補足人力85 がこれらの共有ライブラリールーチンに対する像情報ファイル95を含んでいな ければならない。好ましくは、像情報ファイルは、プログラマ−が情報を追加し たり修正したりするように容易に編集できるASCIIファイルである。図9に は、RISCコンピュータ50で変換されたプログラム82を実行するときに使 用される像及びデータファイルがブロック図で示されている。変換されたプログ ラム82及びそれに関連したアドレス変換情報96に加えて、RISCコンピュ ータ50は、オリジナルプログラム81のコピーと、Cl5C命令を解読するた めにRISCコードで書かれたインタープリタ−1O1と、オリジナル及び変換 されたプログラムのためのデータ人力102とを入力として使用する。インター プリタ−101は、オリジナルプログラム81における変換されない命令を解読 するために呼び出され、オリジナルプログラム8Iはインタープリタ−のデータ 入力として働く。アドレス変換情報96は、インタープリタ−101のデータ入 力として働き、インタープリタ−は、実行を適当な時間に変換されたプログラム へ戻すときにこの情報を使用する。RISCコンピュータからのデータ出力はオ リジナル及び変換されたプログラムからの出力データ103と、インタープリタ −からの出力データである実行ログファイル88とを含む。
図1Oは、Cl5C命令が実行時間までに変換されないときにインタープリタ− へ呼び出しを発生するRISCコードジェネレータ83の動作ステップを示すフ ローチャートである。上記したように、「読み取り一書き込み」メモリエリアの コードは通常は変換されてはならない。というのは、プログラムが実行中にコー ドを変更することがあるからである。しかしながら、ユーザは、プログラムが実 行中にコードを変更することはないと信じており、従って、ユーザはコードの解 読に関連した著しい性能影響を回避するために読み取り一書き込みメモリ内のコ ードを変換しようとする。それ故、ユーザはソフトウェアオーバーライドスイッ チをセットし、ステップ111において、RISCコードジェネレータ83はこ のオーバーライドスイッチをテストして[読み取り一書き込みツメモリエリア内 のCl5C命令を変換すべきかどうかを判断する。オーバーライドスイッチがセ ットされていない場合には、ステップ112において、RISCコードジェネレ ータ83はそのCl5C命令が読み取り一書き込みメモリエリアにあるかどうか をチェックする。そのような場合には、コードジェネレータがステップ113に おいてメツセージを発生し、Cl5C命令を解読しなければならないことをユー ザに警告し、それ故、性能上の影響が生じる。ステップ114においては、コ− ドジェネレータがRISCコードを発生してインタープリタ−を呼び出し、Cl 5C命令アドレスをパラメータとして通す。最後に、ステップ!15では、コー ドジェネレータが「読み取りのみ」のメモリエリアで見い出された次のCl5C 命令へ進み、インタープリタ−への呼び出し中に解読されるであろうCl5C命 令が変換されないようにする。
RISCコードジェネレータは、オリジナルプログラム内に見つけることのでき ないCl5C命令のコードを発生することができない。しかしながら、RISC コードジェネレータは、計算行き先アドレスをめなかったオリジナルプログラム の実行転送命令を認識することができ、従って、実行時間に変換されていないc rsc命令を解読するようにインタープリタ−を呼び出すRISCコードを発生 する。ステップ116では、RISCコードジェネレータは、crsc命令が非 分析の計算行き先アドレスを有するかどうかをチェックする。もしそうであれば 、ステップ117において、ユーザは、変換されていないCl5C命令を解読す るためにインタープリタ−を呼び出さねばならないことが警告さLステップ11 8において、コードジェネレータは、行き先アドレスを計算してインタープリタ −を呼び出すためにRISCコードを発生し、Cl5C実行転送命令のアドレス と計算行き先アドレスとをパラメータとして通す。
ステップ119では、コードジェネレータは、非分析の計算行き先アドレスをも たないCl5C命令のためのRISCコードを発生する。これは、Cl5C命令 を、これと同じ効果を育する1つ以上のRISC命令に変換することにより行わ れる。このコード変換は、プログラム内の実行転送及びレジスタの使用に関する プログラムアナライザー(図8の84)からの情報を使用することによって効率 的に行われる。例えば、RISCコンピュータ(図6の50)は、指定の汎用レ ジスタにおける復帰アドレスを参照するサブルーチン呼び出し及び復帰命令を有 しており、RISCコンピュータは非常に多数の汎用レジスタを備えている。
それ故、Cl5Cサブルーチン呼び出し及び復帰命令を、レジスタを使用できる 場合にスタックオペレーションをエミューレートするRISC命令に変換するこ とは効率的でない。
又、プログラムカウンタを直接ソースオペランドとして参照するようなCl5C 命令の変則的なケースもある。RISCコンピュータの好ましい構造においては 、プログラムカウンタをソースオペランドとして直接的に参照することはできな いが、サブルーチン呼び出し命令によって与えられた復帰アドレスを減少するこ とによりプログラムカウンタの値を計算することができる。しかしながら、この 場合のプログラムカウンタの値は、RISCコードを参照したRISCコンピュ ータのプログラムカウンタであり、Cl5Cコードを参照したCl5Cコンピユ ータのプログラムカウンタではない。Cl5Cプログラムカウンタに対応する一 定に変換する値を汎用レジスタに維持するには著しい量のオーバーヘッドが必要 とされる。それ故、プログラムアナライザー(図8の84)は、プログラム内の 相対ジャンプに関して実行転送に対するプログラムカウンタのレファレンスを分 析しようとするが、他の目的でプログラムカウンタの値を使用するコードを変換 しようとはしない。
図11には、インタープリタ−と、変換されたプログラムの実行との対話とがフ ローチャートで示されている。ステップ131において、変換されたプログラム 82の命令(又は変換されたプログラムによって呼び出されたオペレーティング システムルーチン)は、インタープリタ−が呼び出されるまで実行される。図示 されたように、インタープリタ−は、計算行き先アドレスにおけるcrsc命令 を解読するために呼び出されたときには第1の入カポインド132に入り、そし てメモリの「読み取り一書き込み」エリアにおけるCr5C命令を解読するため に呼び出されたときには第2の入カポインド133に入る。
計算行き先アドレスは、必ずしもオリジナルプログラムの非変換部分にない。
それ故、ステップ134では、計算アドレスがチェックさね、インタープリタ− において実行を継続すべきであるか或いは又は変換されたプログラムの入カポイ ンド又はその他の場所に実行を戻すべきかを判断する。
計算行き先アドレスがオリジナルプログラム内にあるが、変換されたプログラム の入カポインドに対応しないときには、その行き先アドレスを有する実行転送命 令のアドレスと共に、その行き先アドレスを実行ログファイル(図8の88)に 記録することが所望される。これは、ステップ135において行われる。再変変 換されたcrsc命令に対応しない場合には実行ログファイルの情報を読み取っ て、変換されないコードを探索し、或いは計算行き先アドレスが変換されたC■ SC命令に対応するが変換されたプログラム内の入カポインドには対応しない場 合には、変換されたプログラム内の新たな実行転送経路を識別する。
ステップ136においては、インタープリタ−がオリジナルプログラムのアドレ スにおいてCl5C命令を解読する。RISCコンピュータの汎用レジスタはc rscコンピュータの対応するレジスタの内容を再現するように割り当てられる 。この1組の割り当てられたレジスタは、Cl5Cコンピユータの状態のモデル を定める。インタープリタ−プログラムは、crsc命令のOPコードを読み取 り、テーブルのルックアップを行って、デコードすべき指定子の数と、そのOP コードに対するプログラムルーチンのアドレスとを決定する。次いで、インター プリタ−は、各指定子をデコードする。リテラル及びレジスタソースオペランド は、ソースオペランドレジスタとして割り当てられた汎用レジスタへ転送される 。複雑な指定子がデコードされ、そして指定されたオペランドがメモリからフェ ッチされて、ソースオペランドレジスタとして割り当てられた汎用レジスタへ転 送される。次いで、OPコードに対するプログラムルーチンが実行される。最後 に、行き先指定子がデコードさね、その結果が指定の行ぎ先へ転送される。
ステップ!37では、オリジナルプログラムにおける次のCl5O命令のアドレ スか計算される。この計算は、ステップ136で解読された命令に基づく。次の crsc命令は、手前の命令が実行を転送しない限り、手前のCl5C命令に続 くものであり、この場合に、次のCl5C命令のアドレスは手前の命令の行き先 アドレスである。
ステップ138では、計算されたアドレスがチェックさね、インタープリタ−に おいて実行を続けるべきか或いは変換されたプログラムにおける入カポインド又 は他の場所に実行を戻すべきかを判断する。インタープリタ−における実行はス テップ136で続けられる。更に、ステップ136は入カポインド133からの 最初のステップである。
図12には、図11のステップ134及び138に使用されるアドレスチェック ルーチンがフローチャートで示されている。ステップ141では、計算されたア ドレスがオリジナルプログラムの開始及び終了アドレスと比較aLそれがオリジ ナルプログラムにあるかどうかの判断がなされる。行き先アドレスがオリジナル プログラムにない場合には、計算された行き先アドレスは、例えば、Cl5Cコ ンピユータ(図1の20)のオペレーティングシステムに対するオペレーティン グシステムルーチンの入カポインドとなる。RISCコンピュータ(図6の50 )のオペレーティングシステムは、対応するルーチンを育していてもよいし有し ていなくてもよい。それ故、ステップ142では、計算された行き先アドレスは 、例えば、RISCオペレーティングシステムに対応入カポインドを有するCl 5C行き先アドレスのテーブルをルックアップすることにより確認される。
この計算行き先アドレスが無効である場合には、エラーが報告され〜実行がステ ップ143で終わりとなる。さもなくば、ステップ144において、計算行き先 アドレスに対応するRISCオペレーティングシステムルーチンの入カポインド に転送される。
ステップ141で計算行き先アドレスがオリジナルプログラムにあると判断され たときには、その計算行き先アドレスはオリジナルプログラムにおける変換され たCl5C命令に対応すると考えられる。しかし、この場合でさえ、Cl5C命 令を解読することが所望される。というのは、Cl5Cプログラムはある予め定 められた入カポインドのみを有していて、トランスレータ−が個々の命令ではな くてcrsc命令のブロックを変換して最適なRISCコードを発生できると仮 定することが変換にとって望ましいからである。いずれにせよ、インタープリタ −は、そこから変換されたプログラムへ実行を戻し続ける場合には、crsc命 令アドレスと、変換されたプログラムにおける対応する入カポインドとの対応を 知らねばならない。この対応は、変換されたプログラムに関連したアドレス変換 情報(図8の96)によって与えられる。このアドレス変換情報は、crscア ドレスの変換テーブルと、変換されたプログラムにおける対応する入カポインド とによって与えられるのが好ましい。それ故、ステップ145において、インタ ープリタ−は、例えば、変換テーブルをルックアップすることにより、計算行き 先アドレスが変換されたプログラムの入カポインドに対応するかどうかをチェッ クする。計算行き先アドレスが変換されたプログラムの入カポインドに対応する ときには、インタープリタ−は、ステップ146においてアドレス変換情報を使 用して、計算されたCl5CアドレスをRISC入カポイカポインドアドレスす る。これは、例えば、変換テーブルから対応するRISC入カポイカポインドア ドレス取ることによって行われる。ステップ147では、実行が変換されたプロ グラムの入カポインドへ復帰する。さもなくば、ステップ148において、実行 がインタープリタ−へ復帰する。
図13には、トランスレータ−80によって実行されるステップのフローチャー トが示されている。第1ステツプ161では、オリジナルプログラム及び補足入 力ファイルがメモリに読み込まれる。次いで、ステップ162では、トランスレ ータ−かオリジナルプログラムの入カポインドをサーチする。これは、図14に 示すオリジナルプログラム構成の特定例を参照して以下に詳細に述べる。
ステップ163では、トランスレータ−は、入カポインドからの実行の流れをた どり、オリジナルプログラムにおける命令を探索すると共に、プログラムの流れ 図を発生する。この流れ図は、命令の[基本ブロック」と、これら基本ブロック を相互に接続する実行経路とを識別する。各基本ブロックは、その基本ブロック の開始部に単一の既知の入カポインドを有する一連の連続する命令である。実行 は、基本ブロックの開始部のみへ転送され〜そして基本ブロックの終了部のみか ら転送される。流れ図の発生については、図18及び19を参照して以下に詳細 に述べる。
ステップ]64では、トランスレータ−は、オリジナルプログラムをブラウシブ ルコードについてスキャンする。このスキャンの結果は、オリジナルプログラム におけるブラウシブル命令の数を定量化し、トランスレータ−によって探索され た命令の数と比較するのに育用である。この比較の結果は、例えば、「見つけた コードの割合」を推定するもので、これは、既知のコードのバイトの100倍を 、既知のコードのバイトとブラウシブルコードのバイトとの和で除算したものと して計算される。この推定値は、システムの分析者がオリジナルプログラムに対 する移行戦略を選択したり、又はトランスレータ−の性能を監視又は増大するの に使用できる。トランスレータ−が命令の大部分を変換できない場合には、シス テム分析者は、変換されたプログラムに基づいて多数のテストケースを実行しそ して実行から再変換への情報のフィードバックを用いて、変換されていないコー ドの指示された推定値を減少した後に、変換されたプログラム←般使用に解放す る。結局、システム分析者は、オリジナルプログラマ−によってドキュメンテー ションをサーチするか、又はブラウシブル命令を含むものとして指示されたアド レス位置においてコードを検査し、その推定値を確認すると共に、変換されたプ ログラムを一般使用として解放するか或いはトランスレータ−に指示を発して変 換されていない命令を含むと考えられるブラウシブルコードを変換させるかの判 断を行うように試みる。ブラウシブルコードをスキャンする好ましい方法は図2 9を参照して以下に説明する。
ステップ165では、流れ図を分析し、典型的なプログラミングの習慣及び標準 的な規定からのずれによって指示されるエラーが見つけられる。典型的なプログ ラムにおいては、例えば、データ項目をスタックにブツシュし、いかに多数の他 のデータ項目がブツシュされるかに関わりなく後でポツプオフできるようにする と共に、介在命令によってスタックからポツプオフできるようにする。ブツシュ の回数が介在命令におけるポツプの回数を打ち消さない場合には、介在するブツ シュ及びポツプ命令のプログラミングが不適当であることによりエラーが生じる 。介在命令が介在ノードで分岐したり再接合したりする個々の経路を含みそして それらの経路の1つにおいて不適切なプログラミングが生じた場合には、その不 適切なプログラミングにより、2つの経路が中間ノードにおいて接合するときに 計算されたスタック深さがその2つの経路で異なることになる。これは、ノード がR3Bサブルーチン復帰命令である場合に特にエラーを生じ易い。それ故、流 れ図の助けで行われるエラーチェックの1つは、オリジナルプログラムのメイン 入カポインドからの全ての経路においてスタックの深さを計算し、そしてこれら 経路か再接合するときにその計算されたスタック深さが同じであるかどうかをチ ェックすることである。もしそうでなければ、トランスレータ−は、 [全ての 入力経路上でVA=%Xにおいてスタックの深さが一致しないJことを示す警報 メツセージを発生する。ここで、VAはオリジナルプログラムにおけるノードの 仮想アドレスである。
又、流れ図は、crsc命令アーキテクチャ−の典型的なプログラミング規定に 合致することについても分析される。例えば、VAX (登録量’l1l)アー キテクチャ−の場合に、 「復帰マスク」は、復帰中にどのレジスタにロードす るかを指示するために手順呼び出しくCALLS及びCALLG命令)に関連し て使用される。復帰マスクが復帰命令に対し経路に基づいて異なる場合には、お そらくプルログラミングエラーか生じている。トランスレータ−は、「復帰マス クが全ての入力経路VA=%X上で合致しない」という警報を発する。更に、異 なった復帰マスクで実行されてもよいRET命令が見つかった場合には、その命 令をインタープリタ−への呼び出しとして変換し、インタープリタ−は復帰マス クを検査して、復帰中にロードすべき特定のレジスタを決定しなければならない 。
手順呼び出しに関連したもう1つの呼び出し規定は、レジスタ及び条件コードビ ットを、それらが手順に使用される前に手順によってセットすることであり、呼 び出しルーチンによってセットされるレジスタの値又は条件コードを用いるので はない。この呼び出し規定からのずれが見つかった場合に、トランスレータ−は 、「呼び出し入力VA=%Xにおける初期化されないあり得べき変数:%S」と いう警報を発する。このメツセージの「%S」は、見つかったあり得べき非初期 化変数のリストを意味する。VAX命令アーキテクチャ−のコード規定からの他 の相違には、ロングワード境界上でのスタックの整列ずれ(RISCコードに対 し著しい性能上の影響をもたらす)と、RET命令を用いてJSBから復帰する ことと、R3B命令を用いてCALLS又はCALLGから復帰することとが含 むまれる。トランスレータ−は、これらの相違に対する流れ図を分析して、特定 の相違及びそれに対応するアドレスを識別する警報メツセージを発生する。
流れ図を通しての必要なサーチの量を減少するために、あり得るエラーに対する 流れ図の分析では、各基本ブロックに使用されるリソースの伝播も実行する。
各基本ブロックは、スタック、汎用レジスタ及び条件コードといった種々のリソ ースを使用している。サブルーチンの特性を推定するため、これらリソースの使 用がそれらの呼び出しルーチンへ伝播して戻される。この情報を用いて、CAL LS又はCALLG命令により呼び出されたサブルーチンに使用されたレジスタ をセットするためのサーチが終了されると共に、この情報を後でRTSCマシン コード発生中に(ステップ168)使用して、決して使用されることのない条件 コード又はレジスタ値の不必要な発生が回避される。更に、基本ブロックのリソ ースを比較することにより一貫性のチェックを実行することができる。例えば、 基本ブロックが2つ以上の基本ブロックを手前に有していてこれら先行基本ブロ ックの復帰マスクが異なるときには「復帰マスク」警報が発生さね、そして基本 ブロックが2つ以上の基本ブロックを手前に有していてそのスタック深さ変更が 異なる場合には「スタック深さ」警報が発せられる。全ての基本ブロックに対す る最終的なスキャンを用いて、ロングワード境界上でのスタックの整列し損ない (即ち、4バイトで分割できない基本ブロックのスタック変更)と、RET命令 を用いてJSBから復帰することと、R3B命令を用いてCALLS又はCAL LGから復帰することとが明らかにされる。
ステップ166では、各基本ブロックに使用されたリソースについての情報を使 用して、オリジナルプログラムに対する像情報ファイルが形成される。この像情 報ファイルは、例えば、記述される像の名称及びそのバージョンを識別する像ヘ ッダと、それに続く一連の像特性記録(ライン当たりに1つ)であってその各々 かその像におけるオフセットに対する特定の特性を付随しているような記録とて 構成される。各特性記録は、像オフセット及びそれに続く特性名と、それに続く オプションであるアトリビュート値についてのコンマで境界を定めたリストとで 構成される。これらのアトリビュート値は、特定の特性にとって独特のものであ る。像オフセットは、その特性を適用する像におけるオフセットを表すものであ る。これは、記号(他の像情報ファイル記録によって定めることのできる)土の 16進オフセツト値で構成される。記号名又はオフセット値のいずれを省略して もよい(iili方ではない)。
これらの特性及びそれらの定められたアトリビュートは、好ましくは、次のもの を含む。
インターフェイス特性 指定する 入カポインドに対する システムサポート jmpentrY 記号名 肥大カポインド及び名称を定める callback パラメータ番号 手順パラメータへのCALLを定める cattentry 記号名 CALL入カポインド及び名称を定める caselimit 整数 ケース最大数を定めるae+ta sp 整数 ル ーチンによるスタックポインタの変更を定 める image 識別 像情報ファイルか述べる像を識別する jmpback パラメータ番号 手順パラメータへのJMPを定める jsbentry 記号名 JSB入カポインド及び名称を定める no 5tanaara return 非標準復帰を定める5ets レジス タのリスト ルーチンによりレジスタセットを定める symbol 記号名 記号名をオフセットに取り付ける uses レジスタのリスト ルーチンにより使用す像情報ファイルのシンタッ クスの情報表示は、以下に示す通りである。
<WHITESPACE> :==タブ及びスペースノ非ゼロシーケンス<CO MMA> :==[<WHrTESPAGE>] ’、’ [<W)IITEs PAcE!>]<NL> : ==ニューライン <coaeent 1ine> :” ;’ いずれかのテキスト〈吊〉<CO MMA> <VERSION> <NL> <IMAGE PROPERTIES> : := <IMAGE 0FFSE T> <PROPERTY>[<Aπ訂BLrrE>。
コメント記録ぐ:′で始まるライン)はファイル内のどこで生じてもよく、トラ ンスレータ−によって無視される。
像情報ファイルの一例を、”VAXCRTL’と称する像について以下に示す。
:cOW!ents ioige VAXCRTL、 ”VO5−001″+oooooo jsbe ntry ″C雛IN”+ooooooは”AP FP SP R3B″を使用 +00001)Oit ”RORI R2R3R4R5R6R7R8R9RIO AP SP N Z V C−ヲセy トこの像情報ファイルは、”VAXCR Tじについて以下の情報をトランスレータ−に与える。
VAXCRTL+0 (即ち像の開始からゼロのオフセットにある像の第1メモ リ位置)はごC$MAIN−という名称のJSB入力としてマークされる。この 情報から、トランスレータ−はJSBが適切であることを確認し、VAXCRT L:C$MA(Nという名称を流れ図に挿入することができる。又、VAXCR TL+Oは、VAX (登録商11りレジスの情報部分から、トランスレータ− は、呼び出し像における呼び出し命令の直後に復帰ポイントにおいてVAX命令 の説明を正当に続けることができる。
又、VAXCRTL+o l;!、VAX (登録商標)レジス9RO,,,R IO1AP及びSPと、VAX条件コードビットNZVCとをセットするものと してもマークされる。この情報から、トランスレータ−は、例えば、呼び出し命 令後のROのテス)・がC$MAINによりROに残されている値を参照するの であって、呼び出し像自体によってROに入れられた手前の値を参照するのでは ないことを推定することができる。
次の例は、多数の入カポインドを有するライブラリーファイルLIBRTLに対 する像情報ファイルを示している。
+como)ents image LrBRTL、 VO5−000+000400 callent ry LIB$5fGNAL+0004F8 callentry LrB$5 TOP+0O0508callentry LIB$5KPC図13のステップ 167では、変換されたプログラムに対して流れ図の言語ファイルか形成される 。この流れ図の言語ファイルは、変換されたプログラムの流れ図を描くためにレ ーザープリンターへコマンドを発生する流れ図プログラムの入力として使用する ことができる。又、流れ図のプログラムは、例えば、プリントされる流れ図のサ イズを制御するオプションのスケールパラメータと、接続される他のブロックと 共にページにプリントされるべき特定コードブロックのアドレスを指定するオプ ションの「コードブロック」パラメータも受け取ることができる。流れ図は、異 なった種類又は形状のブロックと、これらブロックを相互接続する弧と、各ブロ ックにアラセンブラー表示でプリントされた命令とで構成される。トランスレー タ−によって見い出された命令の各基本ブロックは、フローチャートに対応する ブロックを有している。
流れ図言語ファイルは、流れ図におけるブロックの種類の定義と、ブロック間の 相互接続と、各ブロックへ進む命令(ASCIIのアラセンブラー表示で)とを 含んでいる。流れ図言語ファイルは、トランスレータ−によって見い出された命 令の各基本ブロックを定めるデータブロック又は記録を含む内部2進データ構造 体から形成される。各データブロック又は記録は、命令の基本ブロックのスター トアドレス(オリジナルプログラムにおける)と、基本ブロックの長さくバイト )と、ブロックの種類と、ブロックが特定のサーチに含まれているかどうかを指 示するのに用いる「エポック番号」アトリビュートと、「後続」データブロック のアドレスのリストと、 「先行」データブロックのアドレスのリストとを含ん でいる。データブロックはダイナミックに形成することができ、そしてその後続 及び先行ブロックにデータブロックのレファレンスを挿入したり削除したりする ことによりデータ構造体に容易に挿入したり除去したりすることができ、データ 構造体は、その後続又は先行ブロックに対する次々のレファレンスにより前方又 は後方に容易にサーチ又はスキャンされる。
流れ図に使用されるブロックには5種類があり、各種類のブロックは別々の形状 を育している。ブロックの種類は、CALLX入力と、JSB入力と、 「ノー マル」ブロックと、CALLxプレースホルダーと、JSBプレースホルダーと を備えている。rcALLx」は、VAX命令アーキテクチャ−においてCAL LS又はCALLG命令によって行われる手順呼び出しを参照する。
プリントされた流れ図において、CALLx入カブロツカブロックであり、ブロ ックの名称と、もし分かれば手順の名称と、呼び出しマスク(16進)とを含ん でいる。ブロックの名称は、16進でのブロックの第1バイトのアドレス(オC ALLx入カブロックにはCALLS又はCALLG命令を介して到達する。
VAX命令アーキテクチャ−においては、オリジナルプログラムのメイン入カポ インドがCALLx入カブロツカブロックこのメイン入カポインドはプログラム を走らせるためにオペレーティングシステムによって呼び出される。
プリントされた流れ図において、JSB入カフカブロック円であり、ブロックの 名称と、もし分かればサブルーチンの名称とを含んでいる。ブロックの名称はI 6進でのブロックの第1バイトのアドレス(オリジナルプログラムにおける)と 、それに続< r JSBJとで構成される。JSB入カポインドにはJSB、 BSBB又はBSBW命令を介して到達する。JSB入力は典型的にマクロコー ドに使用されるものである。
プリントされた流れ図において、ノーマルブロックは長方形であり、ブロックの 名称と、ブロック内の全ての命令とを含んでいる。ブロックの名称は16進での ブロックの第4バイトのアドレス(オリジナルプログラムにおける)である。
ノーマルブロックには、ノーマルな実行の流れを介して到達するか、又は分岐、 ケース、ジャンプ又は復帰命令からの実行転送を介して到達する。
プリントされた流れ図において、CALLxプレースホルダーブロックは、破線 の六角形であり、ブロックの名称と、もし分かれば呼び出された手順の名称とを 含んでいる。ブロックの名称は、16進での呼び出された手順の第1バイトのア ドレス(オリジナルプログラムにおける)(もし分かれば変換時間における、さ もなくばゼロ)と、これに続(”ごと、呼び出された手順に対するプレースホル ダー〇′呼び出し番号″とで構成される。CALLxプレースボルダ−ブロック は、手順に入ったり出たりする流れと、その手順の各呼び出しに対して記録され た副次的な作用とを表す。5つの異なる場所から手順が呼び出された場合には、 これらの呼び出しに対し5つの異なる呼び出し番号をもつ5つの異なるプレース ホルダーブロックがある(その手順に対するCALLx入カブロツカブロック) 。
プリントされた流れ図において、JSBプレースホルダーブロックは、破線の楕 円であり、ブロックの名称と、もし分かればサブルーチンの名称とを含む。ブロ ックの名称は、16進でのサブルーチンの第1バイトのアドレス(オリジナルプ ログラムにおける)(もし分かれば変換時間における、さもなくばゼロ)と、ブ ルーチンに入ったり出たりする流れと、そのサブルーチンの各呼び出しに対して 記録された副次的な作用とを表す。
流れ同言語の好ましい形態においては、3つの基本的なオペレータ、即ちグラフ (G)と、ブロック(B)と、弧(A)とがある。流れ同言語ファイルの各ライ ンは、次のオペレータのうちの1つでスタートする。即ち、ラインにコメントが 含まれることを指示するセミコロンと、ブロックオペレータを有する手前のライ ンにより定められたブロックにラインのアルファニューメリックデータが含まれ ることを指示するブランクと、H及びこれに続くブロック名であって、その名前 の付いたブロックが強調されるべきであることを示すものと、C及びこれに続く 2つのブロックの名称であって、その2つのブロックを巾の拾い破線に接続して 例えばエラーを含む経路を強調すべきであることを指示するものとである。
オペレータGで始まるラインは新たなグラフの境界を定め、そのグラフのヘッダ としてプリントされるアルファニューメリックテキストを含んでいる。
又、オペレータBで始まるラインは、コードのブロックに対する名称(16道ア ドレスのような)を含む(D=CALLxプレースホルダー、E=JSBプレー スホルダー)。オペレータBの直後にオプションの倍率数字が続く。
オペレータAで始まるラインは、第1の名称のブロックから第2の名称のブロッ クへ向けられた弧を指定し、2つのブロック名称の後に、レターコードがその弧 のスタイル(例えば、A=実線で描かれた通常の分岐、B=破線で描かれた真の 分岐)を指示する。
図15の流れ図をプリントするための流れ同言語ファイルを一例として以下に示 す。
msk:0000 A 2EOOCALL 2EO2A 82EO2A E02 SUB2 #08,5P JSB @0000063D(PC) VAXCRTL:C$MA[N AO12972C12EOBA B 2EOB A EOB CALLS ft00.00000006(PC)rocO A 2E1.8 1297E4 12EI2 A82E12 A E12 cvrwt、 tooot、R。
ET 図]3のステップ168では、トランスレータ−は、オリジナルプログラムから 命令の基本ブロックを受け取り、それに対応するRISCマシンコードを発生す る。Cl5C命令は一度に1つづつRrSC命令に変換されへこのRISC命令 は同じ結果及び条件コードを再現するものである。各Cl5C命令は、4つの命 令グループを順次に含むRISC命令の対応するシーケンスに変換される。第1 のグループは、ソースオペランドをフェッチして一時的な記憶位置に入れる命令 を有している。第2グループの命令は、ソースオペランドに基づいて動作して一 時的な記憶位置に結果を入れる。第3グループの命令は、メモリ又はレジスタの 内容を更新し、考えられる例外を受ける。最後に、第4グループの命令は、メモ リ又はレジスタの内容を更新するもので、考えられる例外はない。Cl5C命令 をRISC命令に変換することに関連したこれ以上の詳細については、[変換さ れたプログラムコードに対する命令グラニュラリティを保持する改良されたシス テム及び方法(Improved System and Method of  Preserving In5truction Gr≠■ ularity for Translated PrograIIICode )J と題するスコット−ロビンソン及びリチヤード・サイト氏の前期関連特許 出願を参照されたい。
図13のステップ169では、トランスレータ−は、RISCマシンコードをR ISCコンピュータのオペレーティングシステムが認識するプログラム像フォー マットに入れることにより変換されたプログラムを形成する。この変換されたプ ログラム像に関連して、トランスレータ−は、オリジナルプログラムにおけるC l5C命令の各基本ブロックのアドレスと、変換されたプログラムにおけるRI SC命令の対応基本ブロックのアドレスとの間のマツピングも発生する。
図」3のステップ170において、トランスレータ−は、変換されたコードがプ ログラム像に配置された場所をグラフで示す概要ページを発生する。この概要ベ ージは図工4を参照して以下で詳細に述べる。
最後に、図〕3のステップ171において、トランスレータ−は、プログラム流 れ図の分析中にステップ165で見つかったエラーをもつサブルーチンの流れ図 をプリントするために流れ同言語ファイルを形成する。エラー向は流れ図の一例 が図16に示されている。エラー向けの流れ図は、エラーがトレースされる経路 に沿って大きなブロック210.211及び212を有し、そしてエラーがトレ ースされた経路に対する弧に沿って太い破線214を有する。図46に示された エラーは、手順に使用される非初期化変数(汎用レジスタR3)である。太い破 1に214は、手順の始めのブロック210を、その非初期化変数が最初に使用 されるブロック213へ接続する。このエラーは、トランスレータ−によって明 らかになるまで発見されない。というのは、オリジナルプログラムの実行中には 実行があきらかにブロック215のまわりに指示されたエラー経路をたどらない からである。
図14を参照すれば、図13のステップ170で発生された種類の概要ページが 示されている。図14に示されたように、この概要ページは、オリジナルプログ ラムのメモリマツプ181を含んでいる。メモリマツプの上部には、プログラム 名182と、オリジナルプログラムが形成されたときのデータ183と、変換中 に見つかったコードの割合184とを含む表示がある。
メモリマツプ181は、VAX命令アーキテクチャ−及びVMS C登録商標) オペレーティングシステムを用いた典型的なプログラムの編成を示している。こ のプログラムは、ヘッダ185と、読み取り/書き込み像セクション186と、 多数のリードオンリセクション187と、固定のベクターセクション188と、 デバッグ記号テーブル(DST)1.89と、デバッグモジュールテーブル(D MT)190と、グローバル記号テーブル(GST)191とを含んでいる。メ モリマツプのライン当たり192個のディスクブロックがメモリマツプの左上に プリントされ、そしてメモリマツプ内の全部で193個のディスクブロックがメ モリマツプの右下にプリントされる。この例では、ライン当たり1つのディスク ブロックがあり、全部で12のディスクブロックがある。変換されたコードは、 リードオンリセクション1.87内の狭いバンド194.195及び196によ って指示される。これらの狭いバンドは、変換されたコードの各バイトごとに短 い垂直の線で形成される。ブラウシブルコードは広いバンド197で指示される 。
メモリマツプ18]の右では、概要ページがオリジナルプログラムの像フォーマ ットによって定められた100までの入カポインドをリストする。図13のステ ップ161の間に、トランスレータ−は、スイッチのコマンドラインと、オリジ ナルプログラムの開始にあるファイル名とを説明し、オリジナルプログラムをメ モリに読み込む。図13のステップ162では、トランスレータ−はオリジナル プログラムの像フォーマットにより定められた入カポインドをサーチする。トラ ンスレータ−は、第1のディスクブロックの最初の若干のバイト及び最後の若干 のバイトを探し、それが変換可能なVAX/VMSプログラム像のヘッダである かどうかを調べる。もしそうであれば、トランスレータ−は、ヘッダの残り部分 を説明し、像セクション記述子(ISD)を探し、ディスクブロックを図14の メモリマツプ181に示された像セクション185−191のような所望の像セ クションへと編成する。VAX/VMS固定ベクトルか存在する場合には、トレ ンスレータ−は、他の像に対する間接的なレファレンスであるオリジナルプログ ラムのアドレスを決定するようにそれを説明する。
オリジナルプログラムの像フォーマットによって定められた入カポインドを見つ けるために、トランスレータ−は入カポインドに対する像ヘッダ185をスキャ ンするが、デバッガ入カポインドは無視する。次いで、トランスレータ−は、デ バッグ記号テーブル(DST)189が存在するときにこれをスキャンし、そし てグローバル記号テーブル(GST)l 91が存在するときにこれをスキャン して、CALL入力及びSYMBOL入力を見つける。CALLマスクが有効で あり、マスクの後に法律コードがありそしてそのコードが特権命令を含んでいな いことを確かめることにより、各々の考えられるCALL入カポインドに対して 有効性のチェックが行われる。法律コードチェックは、呼び出しマスクから3層 の基本ブロックを通してコードをデコードする。SYMBOL入力は、記号がリ ンカ−により絶対レファレンスとしてフラッグ付けされたときには絶対レファレ ンスは典型的に定数であるから、無視される。さもなくば、SYMBOL入力は JSB入カポインドであるか、又は誤って表示されたCALL入カポインドであ る。入カポインドからのコードはデコードさ托そして上記した法律コードチェッ クは入カポインドがCALL入力であるとして実行さね、この法律コードチェッ クにパスした場合には、その入カポインドがCALL入力であると思われる。
法律コードチェックにパスしない場合には、同様の法律コードチェックを行って 入カポインドがJSB入力であるかどうかテストする。
゛ 図14の概要ページには、オリジナルプログラムの像フォーマットによって 定められた100までの入カポインド+98がリストされる。プログラムコード 内の入カポインドの位置を示すために、入カポインド194の各々からメモリマ ツプ181内の対応する位置へと弧201が描かれる。入カポインドのリストの 下では、概要ページは、トランスレータ−からのメツセージの概要199を致命 的から情報的まで過酷さが減少する順序でリストして含んでいる。各メツセージ が与えられる回数はかっこ内に示されている。更に、概要ページの右上の角では 、トランスレータ−がAからFまでの変換のレターグレードを与え、これは、完 全変換から、警報付き変換、部分変換、おそらく甚だしいエラーを伴う部分変換 、ランタイム機能を失った部分変換、そして全く不首尾な変換までの質を示す。
オリジナルプログラム内のほとんどの命令を探索するためには、オリジナルプロ グラムの像フォーマットによって定められた入カポインドからの実行の経過をた どることが必要である。実行の経過に続いて、各入カポインドで始まる命令シー ケンスのデコードが行われ、命令がデコードされるにつれて流れ図が形成される 。流れ図を形成するために、各命令がデコードされてその長さを決定すると共に 、シーケンス内の次の命令が決定される。命令の長さは、各OPコードに対する 指定子の数を与えるテーブルを参照しそして指定子を検査して長さを決めること によって決定される。
RISCコードを発生するためにもcrsc命令をデコードしなければならない ので、トランスレータ−は、流れ図を形成するためにデコードの結果をセーブす る。これらの結果は中間コード7す−マットであり、これは、流れ図の助けによ りエラーチェック中に命令の分析を簡単にすると共に、RISCコードの発生を 簡単にする。この中間コードフォーマットは、オペランド指定子が容易にアクセ スできるメモリ位置に入るように同様の命令に対して一定のデータフォーマット を与える。又、一定のデータフォーマットは、効率的なRISCコードの発生を 助けるアトリビュートを与えると共に、必要に応じて、インタープリタ−への呼 び出しを与える。使用することのできる1種の中間コードフォーマットを添付資 料へについて述べる。しかしながら、メモリスペースに限界があるために、長い プログラム用の中間コード表示の使用は除外する。
図17には、流れ図を形成するのに使用されるデータ構造体が示されている。
流れ図のデータ構造体221については上記したが、これは、その全ての後続及 び先行ブロックへ各々リンクされる基本ブロック記述子のリストである。
流れ図の発生及び分析の助けとなるようにするため、多数の補助データ構造体2 23を参照しそして維持することが望ましい。例えば、流れ図データ構造体22 1の形成中及びその後のブラウシブルコードのスキャン中には、所与のアドレス が(1)デコードされた命令のアドレスでもブロックの開始のアドレスでもない か、(2)基本ブロックの開始のアドレス(以下、 「ブロック入カポインド」 と称する)であるか、(3)ブロックの中間にあるデコードされた命令のアドレ スであるか、或いは(4)デコードされた命令の中間にあるバイトのアドレスで あるかを素早く知ることが望まれる。このため、補助データ構造体223は、C l5C命令アドレスによって指示されたテーブル224を含んでいる。
例えば、テーブル224の入力は、上記の各Cl5Cアドレスの相互に排他的な 4つの状態をエンコードする16対のビットがバックされたロングワードである 。第ルジスタの所与のcrscアドレスに対して、最下位4ビツトがセットされ たマスクが第2レジスタにロードさね、アドレスの最下位4ビツトが第1及び第 2レジスタの論理アンドによって第2レジスタへ転送され〜そして第2レジスタ が1ビツト位置だけ左へシフトさね、シフトカウントを与える。第ルジスタは、 4ビツト位置だけ右ヘシフトされてテーブル224にインデックスが与えられる と共に、テーブルからの入力が第2レジスタにロードされる。次いで、第ルジス タは、シフトカウントによって指示されたビット位置数だけ回転され、所与のc rscアドレスに対してビット対が正しいと判断される。次いで、このビット対 は、最下位2ビツトがセットされたマスクにより第2レジスタとの論理アンドに よりマスクされる。
流れ図を形成するときには、最後の命令へたどりついていない他の経路があるこ とが分かっていても、一度に1つの経路をたどることが必要である。更に、ある ときには、たどっている経路が部分的にたどった経路に合流することがある。
それ故、補助データ構造体223は、デコードされないブロックの基本ブロック 記述子に対しポインタのりスト225を含むことが望ましい。例えば、流れ図の 形成を開始するときには、デコードされないブロックの基本ブロック記述子がオ リジナルプログラムの既知の各入カポインドごとに形成される。これらの既知の 入カポインドは、流れ図を形成する前にリスト226に集められる。
VAX/VMSプログラムの場合には、既知のプログラム入カポインドがCAL Lx手順呼び出しの入カポインドであり、従って、流れ図においてCALLx基 本ブロック記述子によって表される。CALLx基本ブロック記述子は、各プロ グラム入カポインドに対して形成される。リスト225には、プログラム入カポ インドのCALLx基本ブロック記述子に対するポインタが最初にロードされる 。更に、プログラム入カポインドに対するテーブル2240入力は、基本ブロッ クの開始を指示するように最初にセットされる。
テーブルのルックアップにより所与のCl5Cアドレスがブロック又はブロック 内のデコードされた命令のスタート点であることが指示されたときには、そのブ ロックの基本ブロック記述子を速やかに見つけることがしばしば所望される。
メモリスペースに制限がない場合には、Cl5Cアドレスにより指示された基本 ブロック記述子に対するポインタのテーブルによりこれを行うことができる。し かしながら、メモリスペースには制限があるので、流れ図のデータ構造体221 内の基本ブロック記述子に対するポインタの簡易リスト228としてハツシュテ ーブル227を使用するのが好ましい。更に、例えば、ブロック内の第1命令の アドレスの最下位16ビツトにより、このハツシュテーブルをインデックスする のが望ましい。例えば、所与のciscアドレスでスタートする基本ブロックに 対する基本ブロック記述子を見つけるために、所与のCl5Cアドレスの最下位 16ビツトによってハツシュテーブル227をインデックスし、基本ブロック記 述子に対するポインタの簡易リスト228の1つとしてポインタか得られる。こ の簡易リスト内の各ポインタごとに、そのポインタを用いて基本ブロック記述子 のスタートアドレスアトリビュートをフェッチし、このスタートアドレスか所与 のCl5Cアドレスと比較される。アドレス間の一致が得られると、所望の基本 ブロック記述子か見つかる。所与のアドレス(基本ブロックの中間にある命令の アドレスのような)を見つけるために、ブロックの開始アドレスが見つかるまで テーブル224かアドレス数字か減少する方向にスキャンさね、そしてこのブロ ック開始アドレスを用い、ハツシュテーブル227と、基本ブロック記述子に対 するポインタの簡易リスト228とを参照して、基本ブロック記述子が見つけら れる。
新たに形成された基本ブロックに対し基本ブロック記述子が割り当てられるたび に、アドレステーブル224、ハツシュテーブル227及び簡易リスト118の 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でエラーか報告され請求め −ら れなかりたブロック入力がエラーであるという仮定のもとで、デコードされてい ない基本ブロックに対するポインタのリスト(図17の225)からデコードさ れていない基本ブロックが取り除かれる。この点において、流れ図に1つの命令 が加えられている。
実行転送命令は、常に、基本ブロックを終わらせる。この状態はステップ235 においてチェックされる。実行転送命令が見つかったときには、命令のあり得べ き実行経路の各々に対する次の命令かステップ236で検査される。既にデコー ドされている命令へ戻る経路は既存ブロックの入カポインドへリンクさ托或いは 経路が既存ブロックの中間に向けられたときには、既存ブロックが2つのブロッ クに分割さ托経路が常にブロック入カポインドで終わるようにされる。さもなく ば、検査の結果、経路を終了させるか経路をたどるべきであるという結論になる 。2・つ以上の経路をたどるべきである場合には、最も優先順位の高い経路が「 継続経路」として選択さね、他の経路をたどるべきアドレスはデコードされない 基本ブロックとして待ち行列に入れられ、実行転送命令に対する基本ブロック記 述子が、デコードされていない基本ブロックの各基本ブロック記述子における先 行点のリストに加えられる。例えば、条件分岐命令の場合には、アドレスシーケ ンスの実行経路(即ち、まっすぐな経路)が最も優先順位の高い「継続」経路と なり、実行転送の行き先アドレス、即ち「真の分岐jが待ち行列に入れられる。
考えられる各々の実行経路をステップ236において検査する方法を図」9につ いて以下に詳細に述べる。ステップ237でチェックして継続すべき実行経路が 全くない場合には、ステップ238において、デコードされていない基本ブロッ クのリストがチェックさね、たどるべき他の経路があるかどうかの判断がなされ る。もしなければ、流れ図は終了となる。さもなくば、実行ループがステップ2 29へ戻され、デコードされていない基本ブロックのリスト(図17の225) における次のデコードされていない基本ブロックのブロック入カポインドからの 経路をたどり始める。ステップ237において継続経路があると判断された場合 には、ステップ239において実行の分岐が行われ、その経路かデコードされて いない基本ブロック内で続いている場合にはステップ246へ分岐さね、さもな くば、ステップ240へ分岐される。(図19のステップ263では、以下で述 べるように、デコードされた基本ブロック内で経路が継続するかどうか既にチェ ックされており、ステップ240に到達するのは、経路がデコードされない命令 へ続くときだけである。)ステップ240では、次の命令に対して新たな基本ブ ロックが形成され、新たな基本ブロックに対する先行ブロックのリストは、実行 転送命令を含む基本ブロックに対するポインタを最初に含むようにセットされ、 新たな基本ブロックに対するポインタは、実行転送命令を含む基本ブロックの基 本ブロック記述子内の後続ブロックのリストに加えられる。ステップ246では 、実行転送命令を含む基本ブロックに対するポインタが、デコードされていない 基本ブロックに対する先行ブロックのリストに加えられ、デコードされていない 基本ブロックに対するポインタが実行転送命令を含む基本ブロックに対する後続 ブロックのリストに加えられ、デコードされていない基本ブロックに対するポイ ンタがデコードされていない基本ブロックのリストから取り去られ、デコードさ れていない基本ブロックに対しステップ230でデコードか開始さtL、次の命 令のデコードが首尾良く行われた場合には、デコードされていない基本ブロック の基本ブロック記述子が更新されへそれがデコードされたことを指示する。
ステップ235でブロック内の命令か実行転送命令でないことが分かった場合に は、アドレスシーケンスの次の命令へ至る経路をたどるようにする。この経路は 、予め定められた命令メモリエリアから外れているので、終了すべきであること が考えられる。ユーザの選択により、予め定められた命令メモリエリアはり一ド オンリメモリエリアとして定められてもよいし、場合によっては、全オリジナル 変換プログラムに対して割り当てられたメモリエリアに限定されてもよい。それ 故、ステップ241では、実行がステップ242へ分岐し、そこでエラーか報告 さ托経路が切断される。次いで、ステップ238において実行か継続か顛たどる べき新たな経路が見つけられる。
又、基本ブロックは、アドレスシーケンスにおける次の命令か後続ブロックであ る別の基本ブロックへと延びるときに終了となる。この状態は、アドレステーブ ル(図17の224)を次の命令のアドレスでインデックスすることによりステ ップ243においてチェックされる。ステップ244では、後続ブロックの基本 ブロック記述子がアクセスさね、その後続ブロックがデコードされている基本ブ ロックであるかデコードされていない基本ブロックであるか判断される。デコー ドされていない後続ブロックの場合には、ステップ246において、デコードさ れている最後の命令を含む基本ブロックに対するポインタがデコードされていな い基本ブロックに対する先行ブロックのリストに加えられ、デコードされていな い基本ブロックに対するポインタがデコードされている最後の命令を含む基本ブ ロックに対する先行ブロックのリストに加えられ、デコードされていない基本ブ ロックに対するポインタがデコードされていない基本ブロックのリストから取り 去られヘデコードされていない基本ブロックに対してステップ230でデコード が開始される。次の命令に対するデコードが首尾良く行われた場合には、デコー ドされていない基本ブロックの基本ブロック記述子が更新され、デコードされた ことを指示する。さもなくば、後続ブロックがデコードされたブロックである場 合には、ステップ246において、後続ブロックに対するポインタが、デコード された最後の命令を含むブロックの基本ブロック記述子における後続ブロックの リストに加えられ、デコードされた最後の命令を含むブロックに対するポインタ が後続ブロックの基本ブロック記述子における先行ブロックのリストに加えられ る。次いで、ステップ238において実行が継続さ托たどるべき新たな経路か見 つけられる。
図19には、実行転送命令からの1つの経路で次の命令を検査するために図18 のステップ236においてたとる手順のフローチャートが示されている。図19 の第1ステツプ251では、実行転送命令か検査されて、計算された行き先アド レスを存するかどうかの判断がなされる。もしそうであれば、ステップ252に おいて、後方記号実行のプロセスが行われて、行き先かめられる。このプロセス は、手順及びサブルーチン呼び出しをめるのに特に有用である。ステップ253 でチェックして行き先かめられていない場合には、経路の検査が終了となる。と いうのは、実行時間にインタープリタ−が呼び出されるまでその経路の次の命令 が分からず決定されないからである。後方記号実行のプロセスでは、実行転送命 令から流れ図を通して後方サーチを行うことにより計算行き先アドレスがめられ 、プログラムの命令のアドレスに関して固定であるアドレス値に対し計算行き先 アドレスをめるのに使用した少なくとも1つの手前の命令が見い出される。後方 記号実行のプロセスは図20について以下で詳細に説明する。
ステップ254に続き、検査されている経路は既知の行き先アドレスをもつ。
この行き先アドレスは、オリジナルプログラムに割り当てられたメモリの限界と 比較さLこの限界を外れている場合には、その行き先がオペレーティングシステ ムのような外部レファレンスであると考えられる。ステップ255において、外 部レファレンスについての情報を含む像情報ファイルに対してサーチが行われる 。このような像情報ファイルが使用できる場合には、ステップ256でその外部 レファレンスから経路が続く行き先を決定するために検査が行われる。外部レフ ァレンスが手順又はサブルーチンである場合には、サブルーチン又は手順呼び出 しの特性に関する情報を保持するために「プレースホルダー」ブロックを形成す ることが所望される。サブルーチン又は手順は、復帰しなかったり、4 (SP )へ復帰したり、又は発呼者のレジスタを変更したりというアブノーマルな特性 を存することがある。このアブノーマルな特性は、像情報ファイルに指示されね ばならず、そしてもし可能であれば、外部プログラムからの復帰経路を決定する ために使用しなければならない。これに加えて、オリジナルプログラムに対する 像情報に、呼び出しに関する情報、例えば、外部行き先アドレス、呼び出しの形 式、パラメータの個数及びパラメータとしての一定数値を記録することが所望さ れる。パラメータとしての一定数値は、例えば、呼び出し命令からの後方記号実 行によって見つけられる。呼び出しについてのこの情報は、図31ないし33を 参照して以下に述べるように、多数のプログラムの反復変換のプロセスに使用す ることかできる。
外部レファレンスに対して像情報ファイルが見つからない場合には、ステップ2 57において、実行転送命令のOPコードが検査側限外部レファレンスがサブル ーチンであるか手順であるかの判断がなされる。外部転送命令がサブルーチンス に対して復帰がとられないことを指示する警報が発せら托呼び出しに対する情報 がオリジナルプログラムに対する像情報ファイルに記録されそして経路をたどれ ないという結論で経路の検査が終わりとなる。実行転送命令がサブルーチン又は 手順の呼び出しである場合には、ステップ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コードが検査さね、それが手順である かサブルーチン呼び出しであるかが決定される。もしそうであれば、ステップ2 70において、手順又はサブルーチンへの経路をたどることになる。サブルーチ ンがまだ変換されていない場合には、変換される。いずれの場合にも、特定の手 順又はサブルーチン呼び出しの作用についての情報を記憶するために「プレース ホルダー」ブロックが流れ図に形成される。サブルーチンがまだ変換されていな い場合には、スタック上の復帰アドレス又はセーブレジスタを変更しないように するためその手順又はサブルーチンが分析される。図24のステップ372及び 373について以下で詳細に述べるように、この分析により「コールバック」の 存在か明らかになる。ステップ269で見つかったサブルーチン呼び出しが、コ ールバックを注目すべき入カポインドに対して生じる場合には、後方記号実行( 図24のステップ374について以下で説明する)を試みて、ルーチンのアドレ スを発見し、それを変換しなければならない。
ステップ271において、実行転送命令のOPコードが再び検査されて、検査さ れている経路が条件分岐であるかどうか判断される。もしそうでなければ、その 経路をたどる。さもなくば、ステップ272において、条件分岐命令の実行転送 の行き先アドレスに対してデコードされないブロックが形成さね、・この新たな ブロックの基本ブロック記述子に対するポインタがデコードされないブロックの リストに入れられる。
VAX命令セットは、条件分岐命令よりも複雑な特別のrCASEJ命令を含ん でいる。理論的には、行き先の数が実行時間にしか分からないようなCASE命 令をもつことはできるが、このような命令は変換不能であり、それ故、アナライ ザーはこれを「変換不能」とマークし、コードジェネレーターがこのCASE命 令を解読するようにインタープリタ−への呼び出しを発生するようにしなければ ならない。通常の状態においては、CASE命令に対する行き先の数は変換時間 に分かる。これら行き先の1つを除く全てを図18のステップ236で待ち行列 に入れることができ、一方、経路は残りの行き先から続けることができる。しか しながら、CASE命令に対して指定された多数の行き先の1つが、実行中に取 り上げられることがないので、不適切であるという問題がときどき発生する。
この状態においては、その不適切な行き先に対する変位が通常はゼロである。そ れ故、図18のステップ236においては、CASHのOPコード及びゼロ変位 経路に対して特殊なテストを行わねばならない。この状態が見つかった場合は、 そのCASEターゲットか「変換不能」とマークされ、これが実行時間に解読さ れる。CASE命令で発生するもう1つの問題は、不適切な経路がアドレスシー ケンスの次の命令へ至る「フォール・スルー」経路になることがときどきあるこ とである。この状態では、この「フォール・スルー」経路は変換可能なコードを 含まないことがあり、図18のステップ230において説明及び変換エラーを招 くことになる。説明及び変換エラーが生じると、トランスレータ−はエラーメツ セージを発生し、経路をたどらないよう切断しなければならない(ステップ23 8において実行を続けることにより)。エラーメツセージを公式に表すために、 トランスレータ−は、その説明又は変換エラーが生じた命令に先行するCAS  Eステートメントを探索し、それが見つかったときに、そのエラーがおそら<C ASEステートメントによるものであると診断する。更に、CASEステートメ ントに伴うこれらの問題は、見つかった時点で、オリジナルプログラムに対して トランスレータ−によって発生された像情報ファイルに記録される。
図18ないし19の手順によって発生された流れ図が図15に示されている。
“DHRYSTONB″という名称のプログラムでは、初期入カポインドが<m ain>であり、これはオリジナルプログラムに2E00のアドレスを有してい る。最初の2つのバイトはVAX呼び出しマスク0000であり、’DHRYS TONE“が呼び出されたときにセーブすべき余分なレジスタがないことを指定 すると共に、例外イネーブルビットIV及びDV(整数及び10進オーバーフロ ー)がオフになるべきである(Cプログラムに対するデフィート)ことを指定し ている。図15では、手順呼び出しのための六角形記号301によって表された 最初の基本ブロックにこの情報が含まれる。
次の9バイトは、2つの命令、即ち5UBL2 (ロングワード減算)とそれに 続<JSB(サブルーチンへのジャンプ)とで構成された単一の基本ブロックで ある。図15では、 「ノーマル」ブロックのための長方形302で表された第 2の基本ブロックにこの情報が示されている。
JSB命令に遭遇すると、トランスレータ−は、像情報ファイルのルックアップ を行い、レファレンスを像VAXCRTLのオフセット0にし、そしてオフセッ トOに関連した情報をファイル内で探す。トランスレータ−は、ノーマルな復帰 と、レジスタの使用及びセツティングとを見つける。この情報に基づいて、トラ ンスレータ−は、JSBプレースホルダーについて破線の楕円303で示された プレースホルダーブロックを確立しそして(使用JSB特性により)そのプレー スホルダーを、アドレス2EOBにおいてJSB命令の直後にスタートする新た な基本ブロックに接続する。この基本ブロックは、単一のCALLS命令より成 り、長方形304によって表される。トランスレータ−は、行き先アドレスを2 E18と計算し、それが”DHRYSTONB”像内の手順(ProcO)であ るがまだ検査されていないことを見つける。トランスレータ−は、流れ図に破線 の六角形305で示された手順呼び出しのためのプレースホルダーを形成する。
この手順はまだ検査されていないので、トランスレータ−は、アドレス2E18 で開始して手順内の命令の説明を続ける。最終的に、トランスレータ−は、手順 内のRE −Tをデコードし、これはメインルーチンのアドレス2E12へのノ ーマル復帰であることを指示する。
トランスレータ−は、2E12で始まる説明を続け、CVTWL (ワードをロ ングワードに変換する)命令と、RET (復帰)命令とを見つける。これらは 、流れ図において長方形306で示された基本ブロックに含まれるものである。
RET命令はメインルーチンを終了し、従って、トランスレータ−は、DHRY STONEプログラムの他の何らかの入カポインドで続けねばならない。
図20を参照すれば、後方記号実行を行う手順のフローチャートが示されている 。後方記号実行のプロセスにおいては、実行転送命令の行き先アドレスが記号実 行によって表され、各々の手前の命令の作用を表すように式か次々に変更される 。例えば、実行転送命令か′″JMP R6+4”であるとする。これは、汎用 レジスタR8の内容に4を加えることにより計算した絶対アドレスに実行を転送 するものである。計算された行き先アドレスは、例えば、”R6+4”という記 号で表される。プログラムを通して後方にR6を参照する次の命令はごMOVA B 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、6isp(PC) バイト/ワード/ロングワー ド相対的7 、 @disp(Rn) デファーしたバイト/ワード/ロングワ ード変位8、 @disp(PC) デファーしたバイト/ワード/ロングワー ド相対9、 (Rn)[Rxl デファーし、指示されたレジスタ10、−(R n)[Rxl 指示された自動減少11 、 (Ra)+[Rx7 指示された 自動増加12、 @(Rn)+[Rxl デファーし、指示された自動増加13 、 djsp(Rn)+[Rxl 指示されたバイト/ワード/ロングワード変 位14.1!disp(Rn)+[Rx) デファ−・し、指示されたバイト/ ワード/ロングワード変位 指示されたアドレス方法は、テーブル及びアレイをアドレスするのに一般に使用 されるものであるが、実行転送の行き先アドレスを指定するのに一般に使用され るものではない。それ故、記号表現のための1つの好ましいフォーマットは、指 示されたアドレッシングモード以外の全てのものを表すことのできるフォーマッ トで行き先アドレスを表示する。このようなフォーマットが図21に示されてい る。これは、デファーしたアドレッシングを指示するメモリアクセスフラグ32 6と、レジスタ番号327と、ロングワード変位328とを含む。又、このフォ ーマットは、レジスタ番号327が有効であることを指示するようにセットする ことかできるレジスタフラグ329を含み、従って、このフォーマットはロング ワード定数を表すこともできる。レジスタフラグは、例えば、図20のステップ 321の間にセットさ托そして後方記号実行のプロセスでレジスタ番号により指 示されたレジスタの内容の値が見つかってその値がロングワード変位に加えられ た場合及びそのようなときにリセットされる。図21のフォーマットで指示され るアドレス値は、レジスタフラグがセットされたときにレジスタの内容に変位を 加えることによって得た値であるか、或いはレジスタフラグかセットされないと きの変位の値であり、そしてメモリアクセスフラグがセットされたときは、その 和の値がアドレスとして使用されて、メモリからアドレス値かフェッチされる。
図22には、計算行き先アドレスに関連した全てのアドレスモードを表すことの できる記号表示のための更に複雑なフォーマットが示されている。このフす一マ ットは、メモリアクセスフラグ331と、インデックスレジスタフラグ332と 、インデックスレジスタ番号333と、倍率定数334と、ペースレジスタフラ グ335と、ペースレジスタ番号336と、ロングワード変位337とを含んで いる。この複雑なフォーマットにより指示されたアドレス値は、変位の値に、ペ ースレジスタフラグかセットされたときにはペースレジスタの値を加え、インデ ックスレジスタフラグがセットされたときにはインデックスレジスタの値に倍率 定数を掛けた値を加えたものであり、メモリアクセスフラグかセットされたとき には、その和がアドレスとして使用されてメモリからアドレス値かフェッチされ る。図22のより複雑なフォーマットは、指示されたアドレッシングモードを使 用しない実行転送命令のための行き先アドレスを見つける場合に後方記号実行を 改善するものである。というのは、命令セットにおけるより多くのOPコードの 作用を考慮するように記号実行のプロセスを行えるからである。例えば、図21 のフォーマットは、レジスタ番号によって指定されたレジスタに基づいて補数命 令の作用を表すことはできない。しかし、図21のフォーマットは、符号付きの オフセット番号を使用することができ、インデックスレジスタ番号で指定された インデックスレジスタに基づく補数命令の作用を、そのオフセット番号の補数を とることにより考慮することができる。
非常に多数の命令オペレーションの作用を考慮するために、記号表示は、1つ以 上の定数を含むアルファニュメリック文字列、R1,R2、R3,、、R15と いった各汎用レジスタの内容を指示するための1つ以上のレジスタ指示体、+及 び*といった演算オペレーション、及びアドレスXにおけるメモリの内容を表す メモリアクセスファンクション@(X)のような可変長さフォーマットを使用す ることができ、これにより、記号表示の値は、代数の法則を適用することにより 表される値となる。
それ故、@7 (R1)(R4)のようなデファーしたロングワード変位の指定 子は、@ (4*R4+R1+7)と表される。インデックスレジスタR4に対 するオフセット定数4は、指定子のロングワードモードによって決定さ托オフセ ット定数は、ワードモードの場合2であり、バイトモードの場合1である。しか しながら、オフセット定数1は、文字列に含ませる必要はない。簡単化のための 他の代数法則が次のように適用される。即ち、x+A+B (但し、A及びBは 定数である)は、x+C(但し、C=A+B)と簡単化さね、X+Ry+Ryは 、x+2*Ryと簡単化さね、そして@ (Z)+@ (Z)+Xは、2*@  (z) 十Xと簡単化される。
ステップ321においては、行き先指定子を検査することにより実行転送命令の ための行き先アドレスをめる試みかなされる。これは、相対的なアドレッシング モード及び相対的なデファーしたアドレッシングモードに対して行うことができ る。相対的なアドレッシングモードにおいては、次の命令のアドレス(即ちプロ グラムカウンタの更新した値)が変位に加えられて、所望の行き先アドレスか与 えられる。相対的なデファーしたアドレッシングモードにおいては、次の命スに あるメモリの内容(これは図14の固定メモリエリア188になければならない )がフェッチされて、所望の行き先アドレスが与えられる。ステップ322にお いて、行き先アドレスをめたときには、図18のステップ237において経路を たどるように実行分岐か続けられる。
ステップ321において行き先アドレスがめられないときには、ステップ323 において、実行転送命令に対する行き先指定子を、命令の開始に評価したときに 行き先アドレスの値を表す記号表示へと変換するための試みかなされる。これは 、命令の終わりに生じる行き先指定子自体の評価と対照的である。
自動減少モードを除く全ての場合に、行き先指定子に対するアッセンブリ言語表 示は、記号表示の項目に一致することによって直接変換をする。自動減少モード の場合には、ペースレジスタの内容が行き先指定子の評価に使用される前に、ペ ースレジスタの内容が命令OPコードのデータ形式に基づいて1,2.4.8又 は16だけ減少される。それ故、自動減少行き先指定子が変換されるときは、記 号表示における変位定数が実行転送命令のOPコードのデータ形式に基づいて− 1、−2、−4、−8又は−16となる。更に、命令アーキテクチャ−か実行転 送命令において自動減少ソース指定子を許す場合には、行き先指定子に含まれた レジスタと同じペースレジスタを用いた各々の自動減少ソース指定子に対し、記 号表示の変位定数は、各々のこのような自動減少指定子の作用を考慮するために 、実行転送命令のOPコードのデータ形式に基づいて、−1,−2、−4、−8 又は−16だけ減少する必要がある。
ステップ324において、行き先指定子を記号表示に変換できないときには実行 かステップ325へと分岐する。これは、例えば、図21の固定フォーマットが 記号表示に使用されそして行き先指定子が指示されたアドレッシングモードを有 するときに生じる。ステップ325では、実行転送命令が未知の行き先を有する ことを指示する警報が発せられる。
行き先指定子が記号表示に変換されるときには、ステップ341においである変 数が初期化さね、後方記号実行を行って、記号表示に対して考えられる行き先値 がサーチされる。一定の値を受け入れるためのリストがクリアさね、少なくと番 号が増加される。
このエポック番号は、記号実行がパスした各ブロックをマークして流れ図を通る 無限ループかできるのを防止するのに用いられる。無限ループの可能性は、図2 3に示された流れ図によって示されている。この流れ図はハイアラーキデータ構 造体として描かれたものである。この流れ図は、例えば、メイン入カポインド3 42を有し、そして実行はターミナルブロック343.344の復帰命令で終了 する。いずれのブロックについてもその終了部から開始部へ直接的に延びるルー プはないが、経路345及び346が中間ブロック347及び348を相互接続 しており、ハイアラーキ式のサーチ中に無限ループを生じさせることがある。
例えば、前方のハイアラーキサーチは、ブロックのサーチをその開始部において 開始するルーチンを呼び出すことにより典型的に実行さね、ブロックの終了部に 到達した場合及びそのときに、ルーチンはそのブロックの各後続ブロックに対し てそれ自身を繰り返し呼び出し、これに対して、後方のハイアラーキ式サーチは ブロックのサーチをその終了部から開始するルーチンを呼び出すことによって典 型的に実行され、ブロックの開始部に到達した場合及びそのときに、ルーチンは そのブロックの各先行ブロックに対してそれ自身を呼び出す。経路345及び3 46の存在によりこれらのサーチルーチンのいずれかが無限ループに捕まること になる。というのは、中間ブロック347.348が交互に且つ繰り返しサーチ されるからである。
前方又は後方のサーチ中に無限のループができるのを防止するためにrエポック 番号」かサーチの前に増加さね、ブロックに対してサーチルーチンに入るたびに 、 「エポック番号」がそのブロックに対する「エポック番号アトリビュート」 と比較される。 「エポック番号」と「エポック番号アトリビュート」とが一致 することは、そのサーチ中にそのブロックに既に到達しており、従って、繰り返 してはならないことを指示する。
図20に戻ると、ステップ351において、記号表示の考えられる値に対し、以 下で述べるように図24のサーチルーチンを呼び出すことにより、後方サーチか 開始される。次いで、ステップ352において、「未知」のフラグか検査されそ してもしこれがセットされていれば、その記号表示に対し未知の値が考えられる ことを警告するためにステップ353で警報メツセージが発生される。ステップ 354において、一定値のリストが検査さね、それが空である場合には、実行転 送命令からの経路の終了部に達しており、図18のステップ237及び238に おいて実行が続けられて、別の経路をたどる試みがなされる。さもな(ば、ステ ップ355において、リスト内の各一定値がステップ254ないし264につい て既に述べたようにテストさね−有効な行き先であることが確かめられる。しか しながら、図27について上記したように、これらテストの幾つかは、一定値を リストに入れる前に行うことができ、従って、テストの際に一定値を得た特定の 方法を考慮に入れることができる。次いで、ステップ356において、リスト内 の一定値が有効であるかどうかチェックされる。もし有効でなければ、実行転送 命令からの経路の終端に到達しており、図18のステップ237及び238にお いて実行が継続さ沃別の経路をたどる試みがなされる。さもなくば、ステップ3 57において、2つ以上の有効な行き先をリストが含むかどうかのチェックが行 われる。もしそうであれば、1つを除く全てがデコードされていないブロックの りスト(図17の225)に入れられ、図18のステップ237及び239にお いて残りの有効行き先で始まる経路が続けられる。
図24には、図20のステップ351で呼び出された後方サーチルーチンのフロ ーチャートか示されている。このルーチンは2つの入カポインドを有する。第1 の入カポインド361は、指定のブロックにおける指定の命令アドレスで新たな 後方サーチを開始するために呼び出される。第2の入カポインド362は、指定 のブロックの終了部で始まる後方サーチを続けるために呼び出される。
第1の入カポインド361は、図20のステップ351で呼び出されて、実行転 送命令の命令アドレスで新たな後方サーチを開始し、この場合、第1のステップ 363は、新たなサーチに対するエポック番号に等しい実行転送命令を含む現在 ブロックのエポック番号アトリビュートをセットする。次いで、ステップ364 において、現在ブロックのサーチは、現在命令アドレスがブロック内の第4命令 のアドレスである場合に終了となり、これはブロックが実行転送命令のみて構成 される場合に生じる。さもなくば、ステップ365において、現在命令アドレス か手前の命令の命令アドレスに変更される。これら最後の2つのステップ364 .365は、テーブル(図17の224)をインデックスすることにより容易に 行われる。
指定されたブロックの終了部でサーチを続けるように第2の入カポインド362 が呼び出されたときには、ステップ366において、エポック番号がブロックの エポック番号アトリビュートと比較される。新たなブロックを形成するときには 、新たなブロックのエポック番号アトリビュートが、新たなサーチの始めに増加 されたエポック番号の現在値に等しくなるようセットされる。更に、エポック番 号は、例えばロングワードであって、これが増加されるたびに、所与のプログラ ムの変換中に各サーチに対して独特の値を与える。それ故、ステップ366では 、現在ブロックが現在サーチに既に含まれている場合にのみ、現在サーチのエポ ック番号が現在ブロックのエポック番号アトリビュートに等しくなる。サーチプ ロセスに無限ループができるのを防止するために、そして何らかの付加的な値を 見つけるおそれが減少することから、現在ブロックが現在サーチに既に含まれて いる場合には、現在ブロックのサーチが終了となる。
ステップ366からサーチを続けるべき場合には、現在ブロックのエポック番号 アトリビュートがステップ368においてエポック番号に等しくなるようにセッ トされる。次いで、ステップ369において、現在命令のアドレスがそのブロッ ク内の最後の命令のアドレスに等しくなるようにセットされる。この点において 、図24のサーチプロセスは、サーチルーチンか第1入カポインド361から呼 び出されたものであるか第2人カポインド362から呼び出されたものであるか に関わりなく同じとなる。
ステップ370において、表示が現在命令を通して後方に「ブツシュJされ、図 25について以下で詳細に述べるように、その表示がめられる。ステップ371 でテストして、その表示がめられた場合には、後方サーチルーチンから復帰する ことにより現在ブロックのサーチが終わりとなる。その表示がめられなかった場 合には、ステップ364.365.370及び371を繰り返し、表示がめられ るまで又はブロックの開始部に到達するまで、ブロック内の命令を通して後方に 表示を次々にブツシュする。
ステップ364において、表示がブロックの開始部までブツシュされたと分かっ た場合には、ステップ372でその表示かサブルーチンアーギュメントを表して いるかどうかチェックされる。VAXアーキテクチャ−の場合には、定数をCと して、式“@ (R12+C)”であるときに、表示がサブルーチンアーギュメ ンI・を表す。サブルーチンのアーギュメントによって指定されたアドレスに対 する呼び出しは、一般に、手順又はファンクションパラメータに対する呼び出し である「コールバック」として知られている。この「コールバック」は、より詳 細には、実行転送命令のOPコードに基づいて、コールバックjsbback又 はjmpbackと称される。「コールバックJが見つかったときには、ステッ プ373においてその特性かオリジナルプログラムの像情報ファイルに記入され 、これは、図31ないし33を参照して以下で述べるように、異なったプログラ ム間の相互依存性による矛盾を解決するために後で使用される。例えば、VMS システムサービスルーチン及びコンパイルされたBAICプログラムでは著しい 数のコールバックが見つけられている。
更に、ステップ374では、記号表示に対して考えられる値のサーチが、現在ブ ロックの先行ブロックをサーチすることによって続けられる。先行ブロックかプ ログラム入カポインド(即ち、外部像からの呼び出し)として定められる場合に は、記号表示に対する値が発呼プログラムによって決定されるかどうかを検査す るために、少なくとも1つの発呼プログラム像からのパラメータ値に関する情報 か必要とされる。それ故、トランスレータ−に使用できる像情報ファイルは、プ ログラム入カポインドへ通されるパラメータ値に関する情報に対してサーチされ る。
先行ブロックがプレースホルダーである場合には、手順又はサブルーチン呼び出 しの作用に関するプレースホルダー情報を参照し、これらの作用によって記号表 示がめられるかどうかを判断しm−この場合には、先行ブロックのそれ以上のサ ーチは不要である一一或いは手順又はサブルーチン呼び出しが記号表示に対して 何の作用もしないか又は既知の作用を及ぼすかを判断するm−この場合は、プレ ースホルダーの先行ブロックまで後方記号実行を続けることができる。しかしな がら、プレースホルダー情報は、サブルーチンが未知の方法で記号表示に作用す ることを指示する。この場合に、後方記号実行は、プレースホルダーにより定め られた入カポインドから続くライン内にあるサブルーチンの各々の考えられる復 帰点から始めて実行することができる。
先行ブロックが像内の呼び出しステートメントからのサブルーチン呼び出しであ るときには、ステップ373において「コールバック」特性が記入されたときだ け発呼ルーチンにおいてサーチがなされる。VAX/VMSプログラムの場合に は、CALLS手順の呼び出しに対してこのサーチを行うのが特に望ましい。
というのは、このような場合には、スタックにコールバックパラメータをブツシ ュする命令から記号表示が容易にめられるからである。又、発呼ルーチンに対す るサーチの有効性は、記号表示がアッセンブラ表示法で@(R12+N)”又は @N (AP)である場合のコールバックパラメータ番号Nを、CALLSステ ートメントによってスタックに実際に入れられたパラメータ番号Mと比較するこ とによりチェックでき、この番号Mは、CALLS命令の類リテラル指定子であ る。CALLSステートメントの直前に、手順パラメータは、スタック上でメモ リ位置(N−4)SPにある。それ故、表示がCALLS命令を通してブツシュ されたとき、SPをAPと取り替え、表示変位から4を減算することにより、記 号表示に対するCALLSオペレーションの作用が考慮される。CALLS命令 のアドレスにおいて請求めるべき記号表示は、”@ (R14+ (N−4)) ″である。サーチは、図24の後方サーチルーチンのwc2人カポインド362 に対する繰り返し呼び出しによって開始されるが、これは、実行復帰の際に他の 先行ブロックのサーチを続けるために後方サーチによって必要とされる情報をセ ーブした後である。呼び出し及び復帰は、次のようにコード化される。
(IF CALLBACK T)tENF’rR2) CPU5H(BLOCK、 EXPR,PTRl、 PRED BL[)CK。
PT[?2) PTR2)) ELSE SET UNKNOWN FLAG先行ブロックがノーマルなブロッ クである場合には、次のように繰り返しサーチすることができる。
[F PRED BLOCK (TYPE)=NORMAL TH關PUSH( BLOCK、 EXPR,PTRI)CALL BACKWARD 5EARC HPOP(BLOCK、 EXPR,PTRI)全ての先行ブロックが検査又は サーチされた後に、後方サーチルーチンが終了となり、実行復帰する。
図25には、記号表示を手前の命令を通して後方に「ブツシュ」して、手前の命 令の後に記号表示が育していたものと同じ値をその命令の前に有するような変更 した表示を得るためのルーチンのフローチャートが示されている。このルーチン は、例えば、図24のステップ370で呼び出される。このプロセスは、命令O Pコードに大きく依存している。プログラムカウンタ以外のメモリ又は汎用レジ スタの内容に直接作用しないような命令OPコードは、定数、レジスタ指定子及 びメモリアクセスファンクションのみを含む記号表示の値に影響しない。通常の 場合にプログラムカウンタの変化する値は、記号表示の値に影響しない。という のは、表示をブツシュする前には、表示がプログラムカウンタを指定するレジス タ指定子を有しておらず、表示を通して命令をブツシュするプロセスがプログラ ムカウンタを指定するレジスタ指定子を表示に加えようとする場合には、一定の アドレス値に置き換えることによりそれが除去されるからである。汎用レジスタ 又はメモリの内容に直接影響しないが不定の仕方で影響すると分かっている命令 OPコードは、「未知」の記号値を見つけてプロセスを終了させる。
OPコードは汎用レジスタ及びメモリの内容に複雑な仕方で影響するので、各O Pコードの作用に関する情報を、OPコードによってアドレスされたデコードテ ーブルに予め記憶することが所望される。このデコードテーブルは、各OPカー ドに対して書かれた別々のルーチンのスタートアドレスを含むことができる。
しかしながら、説明上、以下では同様の機能を実行するOPコードのルーチンの 共通の特徴について述べることにする。それ故、図26のデコードテーブル構成 は、種々の経路に沿って分岐して各OPコードに対して特定の動作を実行するよ うにより一般的な手順によって使用することのできる多数のルーチン及びOPコ ード情報を備えている。このような一般的な手順は、各OPコードに対する一般 的なルーチンに取り入れられる経路を考慮することにより各OPコードに対する 別々なルーチンへと拡張できることを理解されたい。
図25のフローチャートの第1ステツプ381では、テーブルの入力を得るよう にデコードテーブルがアドレスされる。ステップ382では、その入力がゼロと 比較され、命令が、そのOPコードのみにより、許容できる記号表示の値に対し て何らかのあり得べき作用をもっことができないかどうか判断する。もしできな ければ、その実行は表示が分析されないまま復帰となる。
デコードテーブルに対して考えられるフォーマットが図26に示されている。
ロングワードテーブル入力386にエンコードされるのは、通常ないような作用 を存するOPコードのための特殊な分析ルーチンに対する変位と、OPコードの ためのメモリレファレンス分析ルーチンに対する変位387と、OPコードのた めのレジスタ分析ルーチンに対する変位388と、OPコードが意味するデータ 形式及びオペランドに関するエンコードされた情報389とである。OPコード のためのエンコードされたデータは、例えば、含意レジスタ行き先コード391 と、データ形式コード392と、スタックポインタの含意自動減少を指示するフ ラグ393と、含意メモリオペレーションを指示するフラグ394と、スタック ポインタの含意自動増加を指示するフラグ395とを含む。含意レジスタコード は、例えば、通常の場合には値Oを有し、RO及びR1が影響を受けることを指 示するために値1を有し、ROないしR3が影響を受けることを指示するために 値2を育し、そしてROないしR5が影響を受けることを指示するために値3を 育する。データ形式コードは、バイト、ワード、ロングワード、りオドワード又 はオクトワードのいずれかを指示する。
図25のフローチャートに戻ると、命令に対する一連の中間オペレーションを通 して後方に表示がブツシュされる。これらの中間オペレーションは、逆の順序で 、自動増加、○Pコードオペレーション及び自動減少である。ステップ382に おいて、自動増加指定子に対して命令がスキャンされる。表示において指示され たレジスタRxを使用する各々の表現及び含意自動増加指定子に対し、その表示 におけるレジスタ指定子Rxは、Rx+Cと置き換えらね、ここでCは、OPフ ードデータ形式がバイトであるかワードであるかロングワードであるかクオドワ ードであるか又はオクトワードであるかに基づいて各々1.2.4.8又はI6 となり、そしてもし可能であれば、定数の乗算及び加算によって表示か簡単化さ れる。例えば、表示が一@(R1+R7+4)十@(R3+3)+Rx+Rs十 7′であり、命令が自動増加指定子” (R1)十”を含み、そしてOFコード データ形式かクオドワードである場合には、表示が’@(R1+R7+12)+ @ (R3+3)+R1+R6+15“に変更される。
ステップ402において、デコードテーブルからのデータの値が負でないときに 、実行はステップ403の特殊なレジスタ分析ルーチンへ分岐する。この特殊な 分析ルーチンヘジャンブするために、例えば、次のコードを使用することができ る。
MOVE 3(R1)、R2;R1contains TABLE+4本〇PC ODEADDL PC,R2,R2 MP R2 特殊なレジスタ分析ルーチンの例は、ステップ374について上記したCALL Sに対するルーチンであり、N≦M*4の場合(ここで、MはCA、LLS命令 によって指定されたパラメータの数である)、R14−4″か表示”@(R12 +N)“におけるR1.2の発生に置き換えらね、そして表示か簡単化されて、 ”@ (R14+ (N−4))“が得ら札さもなくば、「未知」の値に復帰さ れる。
ステップ404において、表示がメモリアクセスオペレーションであるときに実 行はステップ405へ分岐する。ステップ405において、各メモリアクセスフ ァンクションのアーギュメントを命令に対する表現又は含意メモリ行き先指定子 のアドレスに合致させる試みがなされる。合致を生じさせてメモリアクセスオペ レーションの値に影響を与えることができる場合には、実行かステップ406− \分岐する。ステップ406において、実行は命令OPコードに対するメモリ分 析ルーチンヘジャンブし、特定のOPコードのためのメモリ分析ルーチンに対す る変位は、例えば、デコードテーブルにおける「メモリ分析ルーチンのための変 位」 (図26の387)となる。
メモリ分析ルーチンは、含意メモリ行き先を伴うOPコードのためのルーチンと 、表現メモリ行ぎ先結果指定子を使用するOPコードのためのルーチンとを含ん でいる。含意メモリ行き先を伴うOPコードは、例えば、PUSHAB及びPU SHLを含み、これは各々アドレス又はロングワードをスタックに対してブツシ ュする。PUSHABx又はPUSHLxに対する含意メモリ行き先指定子は0  (SP)であり、これは、弐″″R14”のメモリレファレンスアーギュメン トに確実に合致する行き先アドレスを指定する。合致が確実な場合には、記号表 示において次のような置き換えが行われる。即ち、合致する”@ (R14)“ 項にXを置き換え、そして全てのR14レジスタ指定子に”R14−4”を置き 換える。
表現メモリ行き先指定子を有する命令に見い出されるOPコードの例は、MOV EL x、yのようなデータ転送命令であり、ここでyはメモリ行き先指定子で ある。この場合に、命令の結果Xは、表示の各合致するメモリレファレンスアー ギュメントにおいてyと置き換えられる。例えば、命令がMOVE R1,8( R2)でありそして表示が@ (R2+8)+R1+7である場合には、表示が 2*R1+7に変更される。
表現メモリ行き先指定子とメモリファンクションアーギュメントとの合致は、O Pコードのデータ形式によっても左右される。例えば、クオドワード又はオクト ワードデータ形式を有する命令は、2つ以上のロングワードに合致する。例えば 、命令CLRQ (Rx)は、クオドワードデータ形式であり、そのメモリ行き 先指定子は、”@ (Rx)’及び”@(Rx+4)”に合致し、各々の場合に メモリファンクシタンはゼロに減少される。又、ロングワードアドレス境界から のアドレス不整列があるときにあり得る合致も重要であり、この状態は、例えば 、命令CLRL (Rx)と”@(Rx+1)”との合致であり、この場合は、 所望のロングワードアドレスの1バイトのみが一定値0に分析される。
表示内のメモリオペレーションのアーギュメントに合致するようにメモリ行き先 指定子によって指定されたアドレスについて考えられはするが確かではないとき にステップ406において設計の選択が生じる。この状態は、例えば、メモリ行 き先指定子が(R1)であって、表示がメモリアクセスファンクション@(R2 )を育する場合であり、即ち、手前の命令がMOVE R1,R2の場合に合致 か生じる。メモリ行き先指定子は、メモリ行き先指定子によって指定されたメモ リ行き先アトL/スを表す別の記号表示に変換することができ、後方記号実行を 行って、上記性の記号表示を、表示内のメモリオペレーションのアーギュメント に確実に合致するか又は合致しない形態に変換するよう試みることができる。し かしながら、異なった行き先アドレスを表す多数の表示に対して後方記号実行を 同時に行うと、異なった行き先アドレスの各々に対して付加的なエポック番号と エポック番号アトリビュートとが必要となるので、サーチが複雑なものになる。
それ故、多数の記号表示に対するサーチの程度を制限することが所望される。こ れは、例えば、サーチを1つの付加的な記号表示に制限するか、又は現在ブロッ ク及びこれとは異なる先行ブロックにおける1つの付加的な記号表示に制限する ことによって行われる。いずれにせよ、合致が考えられるが合致が確実ではない という結論に達する場合には、図25のステップ406の結果は、それを分析す るか、一定の値に分析するのではない。それ故、実行はステップ407において ステップ408に分岐し、そこで「未知」のフラグがセットされ、実行か復帰す る。
又、記号表示は「未知」の結果にも分析さ汰この場合には、記号表示のフォーマ ットで命令の作用を表すことか困難又は本可能である。この状態の一例は、排他 的オアオペレーションである。手前の命令が2つのレジスタの内容をスワップす るものでない限り、排他的オペレーションの作用は不定となる。例えば、レジス タR1とR2とのスワップは次のようにコード化することができる。
X0RL2 R1,R2; ’R2−RI XORR2X0RL2R2,R1; R1−R2X0RRIXORL2 R1,R2、舵←RI XORR2ステップ 409においては、ステップ406で表示が一定値に分析されるかどうかに基づ いて実行が分岐される。プログラムカウンタ指定子を除く全てのレジスタ指定子 が表示から削除されるときに表示を一定値に分析することができる。
それ故、レジスタ指定子が除去されるか又は分析ルーチンにおいて変更されたと きには、表示←定値へ分析する試みがなされる。これは、図27について以下に 述べるようなルーチンを呼び出すことにより行うことができる。
ステップ404において表示がメモリアクセスファンクションを含まないと決定 されたとき、又はステップ405において合致のおそれのあるメモリ行き先指定 子を命令がもたないと決定されたときに、命令か汎用レジスタの内容に影響する ことが考えられる。通常の場合には、命令が表現レジスタ直接行き先指定子を有 するとき又はある含意レジスタ直接行き先指定子を育するときに、命令が汎用レ ジスタの内容に影響を与える。しかしながら、命令か表現レジスタ直接行き先指 定子を有するときには、OPコードデータ形式がクオドワード又はオクトワード であれば、表現指定されたレジスタ以外のレジスタに影響を与える。
レジスタの内容は命令によって若干複雑に影響されるので、OPコードレジスタ 使用、データ形式及び行き先レジスタ番号の種々の考えられる組み合わせに対し てレジスタ使用マスクが予め記憶されるようなデコードテーブルを使用すること ができる。レジスタ使用マスクは命令に対してフェッチすることができ、これを 用いて、命令が記号表示に影響を及ぼし得るかどうかを速やかに判断することか できる。例えば、図26に示すOPコードレジスタ使用情報389をエンコード する場合には、レジスタデコードテーブルのアドレスをOPコードレジスタ使用 のバイトから形成することができる。これは、レジスタ直接行き先が命令に対し て指定されるかどうかをチェックし、もしそうならば、行き先レジスタ番号をデ ータ形式に添付させて、レジスタ使用マスクのテーブルに対するインデックスを 形成することにより行われる。各々のレジスタ使用マスクは、影響を受けるし・ ジスタを指示するようにセットされるビットと、命令によって影響されないレジ スタを指示するようにクリアされるビットとを有するワードである。又、ステ・ ツブ410において、記号表示に使用されるレジスタ指定子を指示するビットを セットすることにより、記号表示に対するレジスタ使用マスクがワードから形成 される。例えば、最上位ビット位置がセット又はクリアされてR15の存在を指 示し、そして最下位ビット位置がセット又はクリアされてROの存在を指示する と仮定すれば、表示”@ (R3+4)+R12+R4+3’に対するレジスタ 使用マスクは、0001000000001100.となる。
ステップ411では、命令の行き先レジスタマスクと記号表示のレジスタ使用マ スクとの間で論理アンドか計算され、命令によって影響される表示におけるレジ スタ指定子を示すレジスタ競合マスクか得られる。ステップ412では、このレ ジスタ競合マスクがゼロと比較さねへ特定の命令OPコードに対するレジスタ分 析ルーチンを使用すべきかどうか判断される。もしそうならば、ステップ413 において、レジスタ分析ルーチンは、命令OPコードの作用を考慮しておそらく 表示を一定値へ分析するために記号表示を変更すべきであるか、或いはその作用 が不定であって表示を「未知」の値へ分析すべきであるかどうかを判断する。
例えば、命令がCLRLであるか又はCLRQ命令である場合には、レジスタ競 合マスクによって指示された各レジスタ指定子の各発生が記号表示から除去され る。MOVE Rx、Ry全命令場合には、レジスタRxに対するレジスタ指定 子か記号表示におけるレジスタ指定子の各発生に置き換えられる。しかし、MO VQ Rx、、Ry全命令場合には、レジスタ競合マスクによって指示された各 レジスタRzがレジスタ指定子R(z+y−XJに置き換えられる。換言すれば 、RxftRytitき換えられるが、Rx+1もRx+1に置き換えられる。
分析ルーチンの1つによって表示が分析されない場合には、ステップ414にお いて、記号表示で指定されたレジスタに影響を与える自動減少オペレーションを 通して記号表示が「ブツシュ」される。記号表示で指定されたレジスタRxを用 いた各表現及び含意自動減少指定子については、その表示内のレジスタ指定子R xがRx十Cに置き換えらね、ここで、Cは、OPコードデータ形式が)くイト であるか、ワードであるか、ロングワードであるか、クオドワードであるか又は オクタワードであるかに基づいて、各々、−1、−2、−4、−8又は−16で あり、そして表示は、もし可能であれば、定数の乗算及び加算によって簡単化さ れる。
命令を通しての表示の「ブツシュ」を複雑な表示フォーマット及び複雑な命令に 対して一般的に述べたが、後方記号実行のプロセスは、VAX/VMSプログラ ムにおいて計算行き先アドレスを分析するのに非常に有効であることが分かった 。これは、たとえ、図21の簡単な表示フォーマットが使用されても、そして分 析ルーチンにより「未知」の値を分析しても、命令がMOVAB、PUSHAB 、MOVL、PUSHL、CLRL、CLRQ又1icALLsでない限り、そ うである。
図27は、記号表示内の項目を分析するためのルーチンのフローチャートである 。この項目は、例えば、図21の固定フォーマットで示されている。
第1ステツプ421では、レジスタフラグがセットされた場合に実行がステップ 422へ分岐し、さもなくば、実行がステップ423へ続く。ステップ423で は、レジスタ番号が15と比較される。レジスタ番号が15でなく、従うで、プ ログラムカウンタの更新した値を指示しない限り、表示を分析することができな い。それ故、レジスタ番号が15でないときには実行が復帰し、さもなくば、実 行がステップ424へ続く。
ステップ424では、行き先アドレスが変位と更新されたPCの値との和として 計算される。VAX命令アーキテクチャ−では、現在命令がPCを指定するレジ スタ直接モードの表現ソース指定子を有するときに、記号実行のプロセスにより PCレジスタ指定子R15が記号表示に加えられる。この場合、更新されたPC の値は、現在命令においてPCを指定した指定子の直後のバイトのアドレスであ る。
ステップ425では、メモリアクセスフラグが検査される。メモリアクセスフラ グかセットされない場合には、アドレスがオリジナルプログラムにおける実行転 送命令の考えられる行き先となるべきである。VAX/VMSプログラムの場合 には、このようなPC相対アドレスがプログラムの命令メモリエリア(図〕4の 187)になければならない。これはステップ426においてチェックさね、ア ドレスが命令エリア内にあることが分かると、そのアドレスはステップ427に おいて行き先のリストに入れられ、表示が分析された状態で実行が復帰する。
さもなくば、ステップ428において警報メツセージが発せられる。更に、命令 メモリアドレス以外のアドレスは無効と考えられるので、行き先リストには加え られない。そうではなくて、「未知」のフラグがステップ429においてセット されへ記号表示が分析された状態で実行が復帰する。
行き先がPC相対間接アドレスであるとき実行はステップ430に分岐する。
VAX/VMSプログラムでは、PC相対間接アドレスは、プログラムメモリの 固定ベクトルエリア(図14の188)に含まれた固定ベクトルであるときだけ 有効であると考えられる。ステップ424で計算されたアドレスがプログラムメ モリの固定ベクトルエリアに入り、定義された固定ベクトルのリスト又はテーブ ルに含まれる場合には、ステップ423においてアドレスされた固定ベクトルが メモリから読み出さ托そしてステップ433において固定ベクトルが行き先のリ ストに入れられ、記号表示が分析された状態で実行が復帰する。ステップ424 で計算されたアドレスがプログラムメモリの固定のベクトルエリアに入らないか 、又は定義された固定ベクトルのリスト又はテーブルに見つからない場合は、ス テップ431で警報が発せら札ステップ429で「未知」のフラグがセットされ 、記号表示が分析された状態で実行が復帰する。
ステップ421においてレジスタフラグがクリアされたことが分かりそしてメモ リアクセスフラグもクリアされたことか分かった場合には、行き先か絶対アドレ スとなる。VAX/VMSプログラムの場合には、絶対アドレスは、予め定めら れたシステムベクトル入カポインドであるときだけ有効であると考えられる。
それ故、ステップ434では、予め定められたシステムベクトル入カポインドの リスト又はテーブルにおいてルックアップが実行される。アドレスが予め定めら れたシステムベクトル入カポインドである場合には、ステップ427においてこ れか行き先のリストに加えられ、記号表示が分析された状態で実行が復帰する。
さもなくば、ステップ435において警報が発せられ、ステップ429において 「未知」のフラグがセットされそして記号表示か分析された状態で実行が復帰す る。
ステップ422でメモリフラグがセットされたことが分かると、記号表示によっ て指示された行き先が絶対間接アドレスとなる。VAX/VMSプログラムにお いては、このようなアドレスが無効であると考えられる。それ故、ステップ43 6において警報が発せられ、ステップ429において「未知」のフラグがセット さね、そして記号表示が分析された状態で実行が復帰する。
図28及び29は、図13のステップ164を参照することにより上記したブラ ウシブルコードと、図14のプログラムメモリマツプ181の命令メモリエリア 187とに対してスキャンを実行する手順のフローチャートである。このスキャ ンの結果は、命令メモリエリア(図14の187)における「ブラウシブルコー ド」エリア(図14の197)を識別することである。特に、図28及び29の 手順は、命令メモリエリア(図14の187)の中のエリアで、流れ図のブロッ クに含まれるデコードされた命令を含むメモリのエリア(194,195,19 6)を含まないようなエリアをスキャンする。流れ図のブロックに含まれたデコ ードされた命令は、簡単に「既知のコード」と称する。命令メモリエリア(図1 4の187)の中のエリアで、既知のコードを含まないエリアは、「未知のコー ドエリア」と称する。それ故、図28及び29の手順は、[未知のコードエリア 」をスキャンして、 「ブラウシブルコード」を見つける。ブラウシブルコード のスキャン中に、ブラウシブルコードの流れ図が形成される。図28の最終ステ ップ499においてブラウシブルコードのスキャンが終了すると、既知のコード (KNOWN C0DE)の全バイト数が、既知のコードの流れ図における全て の基本ブロックに対して基本ブロック記述子のrバイト長さ」アトリビュートの 値を加算することにより計算さね、そしてブラウシブルコード(PLAUSIB LE C0DE)の全バイト数が、ブラウシブルコードの流れ図における全ての 基本ブロックに対して基本ブロック記述子のrバイト長さ」アトリビュートの値 を加算することにより計算される。次いで、見つかったコードの割合が次のよう に計算される。
%−CODE FOUND = KNOWN C0DE / (KNO耐−CO 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の第4ステツプ500において、第4スキヤンモードのスキャンポインタ は、メモリの命令エリアにおける最小のアドレスにセットされ、変数PLAUS IBLE C0DE及びKNOWN C0DEがクリアされる。次いで、スキャ ンがステップ501で始まる。スキャンポインタによってテーブル(図17の2 24)か指示さね、スキャンポインタが既知のコードを指すかどうか判断される 。もしそうであれば、スキャンポインタがステップ503において次々に増加さ ね、やがて、ポインタがメモリの命令エリア外に出たことがステップ504でテ ストされて終了すべきブラウシブルコードのサーチが行なわれるか、又はスキャ ンポインタが未知のコードを指すことになる。スキャンポインタが未知のコード を指したときには、ステップ505において実行が続けられる。
ステップ505では、スキャンポインタによってアドレスされたメモIノ位置の 内容がフェッチされ、発見的テーブルに対するインデックスとして使用される。
このテーブルの入力は、ゼロと比較され、第1スキヤンモードがスキャンポイン タによりアドレスされたメモリ位置をスキップすべきであるかどうかの判断カベ 行われる。例えば、VAX命令をスキャンするときには、各々のアドレス可能な 位置がデータのバイトを保持し、この場合、発見的テーブルは、256個の異な る入力を含む。
発見的テーブルは、特定の命令アーキテクチャ−1典型的なデータ構造体及びプ ログラムに関連したシステムアーキテクチャ−の特性及び特徴に基づいて予めプ ログラムされる。
命令アーキテクチャ−がユーザモードプログラムで許可されない特権命令を有す る場合には、これらの特権命令がステップ506においてスキップされる(さも なくば、これらが発見的テーブルのルックアップによって検出できない場合には 、単一のアドレス可能なメモリ位置の内容によって独特に識別できないので、ス テップ510において非法律的とみなされる)。
命令を含まないプログラムのデータ構造体及び他のエリアは、しばしばクリアさ れる。この場合に、第1スキヤンモードでのスキャンは、全てのゼロを含むアド レス可能なメモリ位置に対してスキップしなければならない。
可変長さの命令アーキテクチャ−が非常に複雑な場合には、単一のアドレス可能 なメモリ位置に命令が含まれることはめったにない。VAX命令アーキテクチャ −はこれに相当する。この場合に、第1スキヤンモードでのスキャンは、単一の アドレス可能なメモリ位置に含まれためったにない命令として識別された内容を 有するアドレス可能なメモリ位置をスキップしなければならない。
はとんどの文字データが、命令アーキテクチャ−にも使用されるコードによって プログラムに表示される場合には、第1のスキャンモードは二命令ではなくて一 連の文字データを表すことの多いコードをスキップしなければならなし)。第1 のスキャンモードは、一連の少なくとも4つのプリント可能なASCII文字を スキップするのが好ましい。一連のプリント可能なASCII文字に対するこの テストはステップ502で行われる。このような一連の文字が見つかった場合に は、ステップ503においてスキャンポインタが増加さね、さもなくば、ステッ プ507において実行が続けられる。ステップ502では、例えば、スキャンポ インタにより指示されたプログラムアドレスと、スキャンポインタに1.2及び 3を加えたアドレスとに含まれたデータが、プリント可能なASC11文字を指 示するようにセットされたフラグを含むテーブルをインデックスするのに用いら 托さもなくば、クリアされる。これら4つのプログラムアドレスの各々に含まれ たデータがプリント可能なASC[文字であるときには、一連の文字が見つかる と、実行をステップ507へ続けるのではなく、ステップ503へ分岐させる。
それ故、ステップ502は、次のようにコード化することができる。
GOTO5TEP 507 メモリ位置をスキップするときには、ステップ503においてスキャンポインタ が1アドレス位置だけ増加される。おそらく、これはスキャンポインタをメモリ の未知のコードエリア外へ進める。これは、ステップ504において、スキャン ポインタを命令メモリエリアの最大限界と比較することによりテストされ、スキ ャンポインタが命令メモリエリア内にある場合には、ステップ501でテーブル (図17の224)をインデックスすることにより、スキャンポインタが既知の コードへ進んだかどうか判断される。スキャンポインタが命令メモリエリア外へ 進んだ場合には、ブラウシブルコードに対するスキャンが終了となり、見っかっ たコードの割合が最終ステップ499において計算される。スキャンポインタが 既知のコードにある場合には、実行ループがステップ503へ戻り、スキャンポ インタを1メモリ位置だけ増加し、既知のコードにわたってスキャンさせる。
スキャンポインタが未知のコードにある場合には、実行がステップ505へ戻っ て、次の未知のコードメモリ位置の内容が検査される。
未知のコードがステップ506においてスキップしないときには、ステップ50 7において命令デコードポインタがスキャンポインタにセットさね、ステップ5 08において、命令をデコードする試みがなされる。ステップ509では、例え ば、命令のOPコードがフェッチさね、指定子の数を保持すると共にOPコード に対するデータをデコードするためのテーブルに対してインデックスとして使用 さね、そして各指定子がフェッチさね、デコードされる。ステップ509におい ては、命令デコードポインタがデコード中に増加されるときにステップ502及 び504と同様にテストか一命令デコードポインタがメモリの未知のコードエリ ア外に進められたかどうか判断される。もしそうならば、実行はステップ503 へ分岐し、さもなくば、ステップ510において、非法律命令OPコード又は非 法律指定子がデコード中に検出された場合にステップ503へ分岐する。
ステップ508ないし510で法律命令をデコードするときには、実行ルーチン かステップ511で始まる第2のスキャンモードで継続される。ステップ511 では、アドレステーブル(図17の224)の1つ又は複数の入力が、デコード された命令のアドレス位置によってインデックスさね−これらのテーブル入力は 、ブラウシブルコード命令の開始部及びデコードされた命令の中間部を指示する ようにマークされる。次いで、ステップ512では、デコードされた命令に続く アドレスでアドレステーブルがインデックスさね、既にデコードされた命令のア ドレスであるかどうか判断され、もしそうであれば、それはデコードされた基本 ブロックの開始部であり、この場合、ブラウシブルコードのスキャンが図29の ステップ535において続けられる。さもなくば、ブラウシブルコードのスキャ ンは図28のステップ513において続けられる。
ステップ513では、命令デコードポインタが増加され、別の命令をデコードす る試みかなされる。しかしながら、ステップ514でテストされて命令デコード ポインタが未知のコードメモリエリア外へ進められたとき、或いはステップ51 6でテストされて非法律OPコード又は指定子が見つかったときには、デコート プロセスが終了となる。ステップ514又は516でデコードプロセスか終了と なると、テーブル(図17の224)がステップ517でクリアさね、デコード された命令かスキャンポインタのアドレスまで戻されることを指示すると共に実 行ループはステップ503まで戻り、第4のスキャンモードでスキャンを続ける 。
第2のスキャンモードのステップ516で法律命令がデコードされると、ステッ プ518において、実行転送命令がデコードされない限り、実行がステップ51 1へ分岐して戻され〜実行命令までを含む付加的な命令をデコードする試みがな される。ステップ518において実行転送命令が見つかると、ブラウシブルコー ドに対する第3のスキャンモードが図29のステップ521で始まる。
図29を参照すれば、ステップ521において、テーブル(図17の224)の 1つ又は複数の入力か実行転送命令のアドレス位置によってインデックスされそ してこれらテーブル入力は、ブラウシブルコード命令の開始部及び命令の中間部 を指示するようにマークされる。ステップ522では、行き先指定子がテストさ れて、計算行き先アドレスであるかどうか判断さね、もしそうであれば、ステッ プ523において、後方記号実行がスキャンポインタへ戻るよう試みられ、行き 先として一定値か得られる。ステップ524でテストされて、未知の値が得られ た場合には、実行か図28のステップ517へ分岐し、スキャンポインタまでの 全コードブロックかリジェクトされると共に、第1スキヤンモードでスキャンか 続けられる。
ステップ525では、行き先アドレスが、図27に示したように、例えば、絶対 アドレス、絶対間接アドレス、相対アドレス又は相対間接アドレスであるかに基 づいて、その有効性がチェックされる。又、行き先アドレスは、テーブル(図1 7の224)をインデックスすることにより示されるように、メモリの命令エリ ア内にあるが既にデコードされた既知の命令又はブラウシブル命令の中間にある 場合には、無効とみなされる。行き先アドレスが無効の場合には、実行か図28 のステップ5】7へ分岐し、スキャンポインタまでの全コードブロックがリジェ クトされると共に、第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にお いて第4スキヤンモードでスキャンが続けられる。
図30を参照すれば、実行ログファイル(図9の88)を用いてオリジナルプロ グラム内の変換されていない命令を探索する助けとする方法がフローチャートで 示されている。上記したように、そして図30のステップ541に示したように 、オリジナルプログラムか変換され、トランスレータ−はプログラムに対する像 情報ファイルを発生する。次いで、ステップ542において、変換されたプログ ラムが(図9のRISCコンピュータ50により)インタープリタ−及びオリジ ナルプログラムに関連して実行される。この実行中に、変換されたプログラムか らインタープリタ−へ実行が切り換わるときに情報が実行ログファイルに記録さ れ、インタープリタ−は変換されないコードに対して計算行き先アドレスを決定 する。インタープリタ−は、例えば、計算行き先アドレスがめられていない実行 転送命令のオリジナルプログラムにおける原点アドレスを識別する情報と、オリ ジナルプログラムにおけるその行き先アドレスに対して計算された値とを記録す る。好ましくは、この情報はオリジナルプログラムにおける原点アドレスと行き 先アドレスの対の形態である。
ステップ542において変換されたプログラムを実行した後に、ステップ543 において実行ログファイルが検査され、インタープリタ−が呼び出されて変換さ れていないコードの位置を決定したかどうかの判断がなされる。もしそうであれ ば、ステップ544において、プログラムの像情報ファイル及び実行ログファイ ルを用いてオリジナルプログラムが変換される。例えば、流れ図を形成する前に 、実行ログファイルの行き先アドレスがデコードされていないブロックのりスト 225に加えられる。流れ図を形成した後に、分析されていない入カポインドで 始まるブロックの先行ブロックが検査されて、各原点アドレスを含むブロックを 備えているかどうかの判断がなさね、もし備えていなければ、先行ブロックへの リンクか加えられ、これらの新しいリンクを通して後方記号実行が再び繰り返さ れる。それ故、トランスレータ−は原点アドレス及び行き先アドレスを用いてオ リジナルプログラム内で考えられる実行経路を検査し、これらの経路は、オリジ ナルプログラムの第4の変換中に発見されなかったもので、且つ変換されたプロ グラムの実行中又はオリジナルプログラムの変換されなかった部分の解読中に取 り上げられなかったものである。
プログラムの次々の再変換を助けるために、流れ図データ構造体(図17の21 1)及び変換されたプログラムのテーブル224をファイルに記憶することがで きる。この場合、再変換は、オリジナル流れ図の形成が終了したところて開始す ることかできる。流れ図を形成し続けるために、テーブル224がオリジナルア ドレスでインデックスさね、それらを含むブロックが見つけられる。次いで、実 行ログファイルからの行き先アドレスが、各々のオリジナルアドレスを含むブロ ックを備えた先行ブロックのリスと共に待ち行列(図17の225)にロードさ れる。次いで、流れ図の形成か図18の第1ステツプ229において再開されオ リジナルプログラムがステップ544において再変換された後に、その再変換さ れたプログラムがステップ542において実行される。実行から再変換までの情 報のこのフィードバックは、変換されたプログラムを各々実行した後に行なって 、実際に探索されたオリジナルプログラムにおける全ての命令が変換されるよう にすることが好ましい。
図31には、プログラムを同時に変換することが望ましくないか又は不可能であ るような状態、例えば、図17に示すデータ構造体が変換を行うコンピュータの ランダムアクセスメモリの容量を遥に越えるような状態において、相互に依存す るプログラムを変換するための手順が示されている。2つのプログラムは、それ らか互いに呼び出し合うときに相互に依存する。これらの相互依存性は、プログ ラム内の命令を探索して変換するプロセスにしばしば干渉する。特に、復帰ポイ ントを適切に接続しなければならず、これには、呼び出されている像に関する情 報が必要である。
上記したように、オリジナルプログラムの変換中に発生又は更新された像情報フ ァイルは、プログラム内の各々の使用できる入カポインドを呼び出す作用に関す る情報を記憶するのに用いられる。像を変換するときには、別の億円の入カポイ ンドへの呼び出しが、その入カポインドを呼び出す作用について記録された情報 を使用することにより変換される。
しかしながら、相互依存性は、第2の億円の入カポインドを呼び出す作用が第1 の像に依存し、第1の像が変換されるまで分からないような状態を生み出す。
しかし、第1の像の変換には、第2の億円の入カポインドを呼び出す作用に関す る情報が必要である。このように矛盾する相互依存性は、例えば、第1の像が第 2の億円の入カポインドを呼び出しそして第1の億円の手順のアドレスを識別す る手順パラメータを通すが、次いで、第2の像が第1の像の手順をコールバック するような場合に生じる。第1の像を変換するためには、第2の億円の入カポイ ンドを呼び出す作用に関する情報、例えば、第2の像が第1の像をコールバック するといった情報が分からねばならない。しかしながら、この情報は、第1の像 を検査することによって決定できない。第2の像を変換するためには、第1の像 を呼び出すことに関連した情報、例えば、第1の像のコールバック中に通された 手順パラメータの1組の考えられる値や、その手順パラメータの各考えられる値 に対するコールバックの作用といった情報が分からねばならない。しかし、この 情報は、第2の像を検査することにより決定できない。それ故、各情報を、互い に他の情報が変換のために必要な全ての情報をもつ前に変換しなければならない 場合に、矛盾する状態が生じる。
図31に示すように、相互依存性による矛盾は、多数の変換によって分析される 。ステップ551での第1プログラム(PROGRAM#1)の変換中に、トラ ンスレータ−は、第2プログラム(PROGRAM#2)の入カポインドを呼び 出す作用に関する情報がないことが分かる。というのは、第2のプログラムがま だ変換されていないからである。それ故、トランスレータ−は、第2プログラム の入カポインドへの呼び出しに関して、例えば、ノーマル復帰や、コールバック なしといったデフオールド仮定をする。ステップ552において第2プログラム が変換されると、トランスレータ−は、そのデフオールド仮定とは逆に、第2の 像がコールバックを有すると判断する。
図31のステップ553ないし557に示されたように、像情報ファイルを用い て、あるプログラムの手前の変換中に発見された新たな情報を他のプログラムの 再変換へ通すような繰り返し再変換のプロセスを使用することができる。ステッ プ555及び556では、厳密なコンバージェンス状態が生じたときに繰り返し の再変換プロセスが終了となる。厳密なコンバージェンス状態は、像情報ファイ ルにおいて変化が生じなくなるまで2つのプログラムの各々が交互のシーケンス で再変換されるときに生じる。しかしながら、このコンバージェンス状態は、少 数の変換であっても、像情報ファイルに関連変化が生じないときを感知すること によって確かめることができる。
厳密なコンバージェンス状態を簡単にテストする背景となる仮定は、個々のプロ グラムがその最初の変換中に生じた像情報ファイルで再変換されるときに、その 個々のプログラムの第2の変換で変化が生じないことである。この仮定では、第 2のプログラムの変換によって第1のプログラムの再変換に作用が及ぶのは、第 2プログラムに関する像情報が第1プログラムの変換に関連した仕方で変化する 場合だけであるという結論に達する。図32には、第1プログラムの最初の変換 及び第2プログラムの最初の変換の直後に得られる第1プログラムの像情報ファ イル561及び第2プログラムの像情報ファイル562が示されている。第1プ ログラムの像情報ファイル561は、第1プログラムの最初の変換中に検査され た第1プログラム入カポインド(ENTRY A、ENTRY B、ENTRY  C5ENTRY D、、、、)に関する情報を含む。この情報は、各入カポイ ンドに対し、入カポインドのアドレスと、その入カポインドに関連したコールバ ックパラメータとを含み、これらは、図24のステップ372で発見されて、変 換中に図24のステップ373で像情報ファイル561に記録されたものである 。更に、像情報ファイル561は、第1プログラムから他のプログラムの外部入 カポインドへの呼び出しくCALL Q、CALL S、CALL Y、CAL L Z)に関する情報564を含み、これは、変換中に図19のステップ256 .258又は259において像情報ファイル561に記録されたものである。例 えば、この情報は、呼び出しの外部行き先アドレス、呼び出しの形式(CALL SやCALLGのような)、呼び出しに関連したパラメータの数、及びパラメー タの一定値を含む。パラメータの一定値は、例えば、呼び出し命令からの後方記 号実行によって得られる。同様に、第2プログラムは、第2プログラムから他の プログラムの外部入カポインドへの呼び出しくCA、LL A、CALLBSC ALL HSCALL K)に関する情報565、及び第2プログラムの最初の 変換中に得たプログラム入カポインド(ENTRY Q、ENTRYR,ENT RY S)に関する情報566とを含んでいる。
第1プログラムが第2プログラムの像情報ファイル562内の情報によって再変 換された場合に、この第1プログラムが変化するかどうかについて考える。第1 プログラムに対する情報ファイル561内のプログラム入カポインドのアドレス を、第2プログラムに対する像情報ファイル562内の外部呼び出しのアドレス に合致させ、そして第1プログラムに対する像情報ファイル561内の外部呼び 出しのアドレスを、第2プログラムに対する情報ファイル562内のプログラム 入カポインドのアドレスに合致させることにより、第2プログラムに対する像情 報ファイル562内の関連外部呼び出し及び入カポインドが識別される。第2プ ログラムに対する像情報ファイル562内のこれら外部呼び出し及びプログラム 入カポインドについての情報が、上記のデフオールド仮定から、第1プログラム の再変換に影響を及ぼすように異なる場合には、第1プログラムを再変換しなけ ればならない。更に、像情報ファイル562が、第1プログラム内の変換されて いないコード位置を呼び出すようなプログラム#lへの外部呼び出しく図32の CALL Kのような)を育する場合には、その変換されていない呼び出し位置 のアドレスを最初の分析されていないブロック入カポインドとして使用して第1 プログラムを再変換しなければならない。再変換を考慮しているプログラムの変 換されていない部分への外部呼び出しに加えて、特に関連した変化としては、再 変換を考慮しているプログラム内の入カポインドへの外部呼び出しに対する呼び 出しパラメータの新たな一定値が含まれる。というのは、これらの一定値は、再 変換中に、他のプログラム内の変換されていないコードへの行き先アドレスを分 析するために後方記号実行によって使用されるからである。更に、上記の関連し た変化には、再変換を考慮中のプログラムにより呼び出されたプログラム入カポ インドに対する新たなコールバックパラメータも含まれる。というのは、再変換 中にこれらのコールバックパラメータの後方記号実行が分析されて、再変換を考 慮中のプログラム内の変換されていないコードにおける新たなプログラム入カポ インドの値がめられるからである。
図33には、2つのオリジナルプログラムの交互に繰り返す変換に対する手順で あって、一方のプログラムの再変換を、他方のプログラムの像情報ファイルの内 容に関連する変化が生じた後にのみ実行することによって迅速なコンバージェン スを得る手順のフローチャートが示されている。第1ステツプ571及び第2ス テツプ572は、図31の手順の第1ステツプ551及び第2ステツプ552と 同じである。しかしながら、図33の第3ステツプ573では、第2プログラム の像情報ファイル(図32の562)における関連入力が、図32について上記 したように、第1プログラムの再変換におそらく影響を及ぼすであろうデフオー ルド仮定からの変化について検査される。このような変化が発見されると、第1 プログラムはステップ574において再変換され、さもなくば、第1プログラム の再変換も、第2プログラムの再変換も不要である。
ステップ574における第1プログラムの再変換中に、その第1プログラムの像 情報ファイルにおける外部呼び出し及びプログラム入カポインド情報に対してな された変化は、例えば、その変化した入力に対してフラグを立てそして古い入力 のコピーを保持するか、或いは新たな入力に対してフラグを立てることにより注 目される。第1プログラムの再変換の後に、ステップ575において、第1プロ グラムの像情報ファイル(図32の561)における関連変化入力が、図33に ついて上記したように、!!2プログラムの再変換におそらく影響するであろう 変化について検査される。このような変化が見つかると、ステップ576におい て第2プログラムが再変換さね、さもなくば、第1プログラムの再変換も、第2 プログラムの再変換も不要である。
ステップ577における第2プログラムの再変換中に、その第2プログラムの像 情報ファイルにおける外部呼び出し及びプログラム入カポインド情報に対してな された変化は、例えば、その変化した入力にフラグを立てそして古い入力のコピ ーを保持するか、或いは新たな入力に対してフラグを立てることにより注目され る。第2プログラムの再変換の後に、ステップ577において、第2プログラム の像情報ファイル(図32の562)における関連変化入力が、図32について 上記したように、第1プログラムの再変換におそらく影響するであろう変化につ いて検査される。このような変化か見つかると、ステップ574において第1プ ログラムか再変換され、さもなくば、第1プログラムの再変換も、第2プログラ ムの再変換も不要である。
多数の変換及びチェックされた仮定についてのこのプロセスは、何回も繰り返さ れるか、最終的にこのプロセスはコンバージェンス状態となる。多くの場合、こ のプロセスは各像が正確に記述された際にコンバージェンス状態になり、それ以 上の再変換は不要となる。例えば、実行時間ライブラリーは、典型的に、とりわ け相互依存性を有する像の収集体を含むが、これらは、指定された入カポインド においてユーザプログラムによって呼び出さt”Lsユーザプログラムとの相互 依存性はもたない。この場合、多数の変換及びチェックされた仮定のプロセスは 、各像が正確に記述された際にm−指定の入カポインドにおいて各像を呼び出す 作用に関する完全な情報を含むm−コンバージエンス状態に達する。この情報を 含むファイルは、実行時間ライブラリー像の再変換を必要とせずに、ユーザプロ グラムの変換に使用することかできる。
本発明は、Cl5C−RISCコードトランスレータ−について説明したが、あ るプログラミング言語のCl5Cコードを別のプログラミング言語のCl5Cコ ードに変換するのにも非常に有用であり、例えば、ある種のデジタルコンピュー タのプログラムを別の種類のデジタルコンピュータのプログラムにトランスポー トシたり、或いはある種のオペレーティングシステムのプログラムを別の種類の オペレーティングシステムにトランスポートしたりするのにも有用である。更に 、本発明の分析及びエラーチェック特徴は、プログラムを変換せずにテストした りデバッグしたりするのに使用することができる。
1、LITREF (リテラル) リテラルの値は、LITREFタプルで表さね、そのレファレンスアトリビュー トは記号テーブルのリテラルノードを指す。ノードは、名前の付けられたリテラ ル(SYM$LOFFSETのような)、又は0や1のような定数に対するもの である。
LITREFはソースオペランドとしてのみ現れる。
例: 王 中間表示 、WORD I Lot: 1itref [#1]LO2: data、un it16 (LOI)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 [ pushll(LOI) popl rOLOI: regref [rO]LO2+ 1nstr rp opl] (101)3、MEMREF/FETCH(非記号メモリレファレン ス)マクロコードのほとんどのオペランドはレジスタを通してのメモリレファレ ンスである。
MEMR,EFタプルは、これらを表すのに使用され、ペースレジスタオペラン ド及びオプションのオフセットオペランドの2つの成分を育している。ペースレ ジスタオペランドは、常に、REGREFタプルのアドレスである。オフセット オペランドは、もしあれば、LITREF、SYMREF又はCOMP OPタ プルのいずれかを指すポインタである。オフセットオペランドが指定されない場 合には、オフセット0がとられる。
MEMREFタプルの値は、指定されたメモリ位置のアドレスである。ソースオ ペランド内のメモリを参照するために、FETCHタプルを使用して、その位置 の値か必要とされることを指示しなければならない。MEMREFは、行き先オ ペランドとして直接使用することができるし、或いはMOVAX又は同様の命令 におけるソースとして直接使用することもできる。これは、マクロコンパイラ− の前端がアドレスコンチクストレファレンスを値コンチクストレファレンスから 区別する必要があることを意味し、これは、命令の形式及びオペランド番号に基 づく単純なテーブルルックアップである。INCL命令の指定のような変更オペ ランドの場合は、アドレスコンチクスト形態を使用しなければならない。
FETCHは、以下に述べるIDXREF及びSYMREFタプルにも使用され る。
MEMREFタプルは、レファレンスを更に定質化するようにセットされる3つ のフラグを含んでいる。
・ デフアート:これは、間接についての追加レベルを指示する。例えば、@o ffset(Rn)である。
・ 自動増加:これは、ペースレジスタの事後増加を指示する。
・ 自動減少:これは、ペースレジスタの事前減少を指示する。これは、デフア ートや自動増加では指定できない。
SP%FP及びAP系のレファレンスは、全てMEMREFオペランドとして表 示される。
MEMREFタプルは、記号名称をこのメモリ位置に関連付けるのに使用できる 記号ノードアトリビュートを有している。又、同じペース位置に対する何回もの レファレンスを最適に行うためにコードジェネレータによって使用できるアトリ ビュートも有している。
例。
ノニ匹 中間表示 pushl (rO) LOI: regref [rO]LO2: mmre f (LOI) LQ3: fetch (LO2) LO4: 1ostr [pushll(LO3) pushl @(ro)+ LOI: regref (rOJLO2: me mref [deferred、autoinclし03: fetch (L OI) し04: 1nstr [pushll(LO2) popl 4(rO) LOI: 1itref [#4]LO2: regr ef [rO) LO3: memref (LO2,LO3)LO4: 1nstr [pop il (LO3)pushl @foo(sp) LOI: symref [ foo]LO2: regref [5pl LO3: fflemref Edeferredl(LO2ル01) LO4: fetch (LO3) LO5: [N5TR[pushll (LO4) 4、SYMREF (記号テーブルレファレンス)SYMREFタプルは、記号 名称をもつ項目へのレファレンスを表すのに使用される。名称rSYMREFJ は、rsYMbol node REFerence Jではなくて、rsY& Jbol table REFerenceJを意味するものと理解されたい。
というのは、それか指す記号テーブルノードは、記号ノードであるか、外部ノー ドであるか、ラベルノードであるか又はルーチンノードだからである。
タプルの値は記号の値である。記号ノードの場合に、これは、記号の値を得るの にFETC)1が使用されないことを意味する。記号ノードは、この点について はリテラルノードと同じであり、あるコンパイル一時間値について単なる記号名 称である。
外部、ラベル及びルーチンノードの場合は、コンチクストに基づいてFETCH が要求される。アドレス又は中間モードレファレンスは、FETCHを必要とし ない。(中間モードレファレンスは外部に対する法律に過ぎない。)値のレファ レンスに場合には、SYMREFのFETCHが必要とされる。例えば、外部、 ラベル又はルーチンへの分岐はSYMREFを直接使用する。例えば、あるラベ ルノ値(7)MOVEL命令は、SYMREF(7)FETCHを使用する。
SYMREFタプルにおけるDEFERREDフラグは、間接を指示するのに使 用することができる。このフラグは、外部及びラベルノードのS YMRE F にのみ使用できる。
例: LO2: data、addr (Lot)pushl foo 1abel  LOI: sy+aref [foo 1abellLO2: fetch ( LOI) LO3: 1nstr [pushll(LOI) brb foo 1abel LOI: 5yyef Efoo 1abel] LO2: branch (LOI) calls #1.foo rout LOI: 1itref [#1]LQ 2: 5yllref [foo routlLO3: calls (LO2 ,LOl)pushl #foo val LOI: swef [foova l]Iexternai LO2: 1nstr [pushll(LOI) ラベル及び入カポインドタプル 1、LABEL LABELタプルは、ルーチン内の分岐ターゲットを表す。参照されるラベル記 号は、分岐タプルのターゲットオペランドとして使用されるSYMREFタプル によりでも指示される。
ソースのUNWIND TARGETディレクティブでデクレアされるラベルは 、ノーマルラベルタプルで表される。しかしながら、UNWIND TARGE Tフラグは、このタプルにおいてセットされる。
王 中間表示 foo: push目OLOI+ 1abel [toolLO2: 1itr ef [#01 し03: 1nstr [pushl](LO2) 2、JSB ENTRYSCALL ENTRY、To INTERRUPT− ENTRY、EXCEPTION ENTRY入力ポイ入力ポイントディレクテ ィブタプルス内のJSB ENTRY、Cタートにフラグを立てる。ダブルは、 デクレアされたルーチンのMTU人カフカソードす。
MTU人カフカソードソースディレクティブに指定されたレジスタ使用及び他の 情報を含んでいる。
例: 1、、BRANCH BRANCHタプルは、特定ターゲットラベルへの分岐を指定するか、又はメモ リ位置を通しての間接分岐を指定する。第1のオペランドは、ラベル記号ノード を識別するSYMREFタプルか又は分岐アドレスを指定する値発生タプルかの いずれかのアドレスでなければならない(REGREF又はFETCH)。
分岐タプルは、BRB、BRW及びJMP命令に使用される。
間接分岐の場合には、コードジェネレータは分岐ではな(てJSBを発生するこ とに注意されたい。
例: ソース 中間表示 brb foo LOI: sywef [foo]LO2: branch  (LOI) jmp bar Lot: 5y11ref [barlLO2: branc h (LOI) jmp 4(RiO) LOI: 1itref [#4]LO2二 regr ef [rlOI LO3: mearef (LOl、LO2)LO4: fetch (LO3 ) LO5: branch (LO4) 2、CALLS/CALLG CALLS及びCALLGタプルは、記号又はメモリレファレンスである第1オ ペランドで指定されたルーチンへのVAX呼び出し命令に対応する。第2のオペ ランドは、パラメータカウント(CALLSの場合)であるか、或いはCALL Gのためのパラメータリストのアドレスである。
例: 2二玉 中間表示 calls #2.foo LOI: 1itref [#2]LO2: sy wef [fool LO3: calls (LOZLOりcal1g (ap)、(rlO) L OI: regref [aplLO2: regref [rlO] LO3: mcyef (L(H) LO4: memref (LO2) LO5: cal Ig (LO4,LO3)3、RETURN RETURNタプルは、VAX復帰命令に対応する。
アナライザーは、復帰しつつあるルーチンに対する記号ノードと、復帰をエミュ レートするためにインタープリタ−を呼び出さねばならないかどうかを指示する フラグとでRETURNタプルにタグ付けを行か例: ソース 中間表示 ret LOf: return 4、 JSB JSBタプルは、VAXのJSB又はBSBx命令に対応する。これは、記号ノ ードアドレスを指すSYMREFであるか又は間接的JSBターゲットを表す値 発生タプルかのいずれかである単一のオペランドを有している。
例: ソース 中間表示 bsbw foo Lot : symref [foolLO2: jsb  (LOI) jsb (rlo) LOI: regref [r101LO2: rIIe mref (LOI)LO3: jsb (LO2) 5、R3B/REI RSB及びREIタプルは、各々、VAXのRSB及びREI命令に対応しアナ ライザーは、復帰しつつあるルーチンの記号ノードを指すポインタでこれらのタ プルを更に注意する。
例: ヱニ玉 中間表示 rsb LOI: RSB 6、C0NDBR CONDBRタプルはVAXの全ての条件分岐命令を表すのに使用される。
このタプルは、(VAX分岐OPコードを指定する)OPコードアトリビュート と、記号ノードを指すSYMREFタプルであるか又は間接的行き先を表す値発 生タプルかのいずれかのアドレスである行き先オペランドとを有している。オプ ションの追加オペランドの存在は条件分岐の形式によって左右される。例えば、 BLEQは追加オペランドをもたず、一方、BLBCはテストされるべき項目を 指定するオペランドを育し、BBSは2つの追加オペランドを育する。
以下のテーブルは、条件分岐の形式と、必要な追加パラメータを示す。形式の欄 は、オペランドとして許されたオペランドの形式を指示し、 rVa 1 u  eJは、LITREF、SYMREF (コンパイル時間記号の)、COM O P、REGREF及びFETCH(SYMREF、MEMREF又はIDXRE Fの)が許されたことを示し、一方、 rAddrJは、REGREF、SYM REF。
MEMREF及びrDXREFが許されたことを示す。オペランドlは常に分岐 行き先である。
分岐 OP2 形式 OP3 形式 OP4 形式 コメントACt3x Li m1t Value Addend Value Index AddrAOB XXX Lim1t Value Index AddrB(cc) BBEQ BBx Pos Value Ba5e AddrBBXX PO3Value  Ba5e Addr BBSSBBXXI PO3Value Ba5e A ddr BBSSI/BLBx Src Value SOBXXX Index Addr 例: ソース 中間表示 acbl #10.#1.rO,IO$ LOI: 1itref [1101 LO2: 1jtref [#1] LO3: regref [r01 LO4: sywef [IO$] LO5: condbr [acb1](LO4,LOl、LO2)aoble q #10,4(ro)、10$ LOI: 1itref [#IO]LO2 : l1tref [#4] LO3: l1lefllref [rO] (LO2)LO4: symre f [10$] LO5: condbr [aobleql(LO4,Lot、 LO2) bleq ]0$ LOI: symraf [108]LO2: condb r [bleql (LOI)blbc g″foo$flag、(rO)LO I: symref [foo$flaglLO2: fetch (LOI) LO3: regref [rO] LO4: condbr [blbcl (LO3,LO2)bbs #<ha se+bit、、rO,4(rlo)LOI : sywef [baselL O2: symref [bit] LO3: comp op [addl (LOI、LO2)LO4: reg ref [rO] LO5: 1itref [#4] LO6: regref [rlOI LO7: memref (LO6,LO5)LO8: fetch (LO7 ) LO5: condbr [bbs] (LO8,LO3,LO4)命令タプル 1、lN5TR INSTRタプルは、他の全てのマクロ命令を表示する方法である。その命令ア トリビュートは○Pコードを表す定数であり、そのオペランドは命令オペランド を表す。
OPコード定数は、通常は、VAXのOPコードを表すmtu vax k許さ れたオペランド形式のセットは、命令依存である。一般に、LTTREF%ME MREF又はIDXREFの)オペレータは、値が使用されるオペランドに対し て許さね、一方、REGREF、SYMREF、MEMREF及びIDXREF は、アドレスが使用されるオペランドに対して許される。 rlNcXJ命令の 行き先のような「変更3式のオペランドの場合は、アドレスの形態を使用しなけ ればならない。
lN5TRタプルは、アナライザーによって計算されたこの情報をコードジェネ レータに与える条件コード使用フラグを有している。これらは、N及びZlC及 び/又はVビット値を、現在命令によって発生されたコードによりシュミレート シなければならないかどうかを指定する。付加的な「ローカルNZJ ビットは 、N/Zの唯一の使用がその直後の1つ以上の条件分岐命令によるものである場 合にセットされる。これにより、コードジェネレータは、ある場合に、結果の値 を直接使用することができる。
例: ヱニ玉 中間表示 1ncl 4(ro) LOI: 1itref [#4]し02: regr ef [rO] LO3: memref (LO2,LOI)LO4: 1nstr [1na ll] (LO3)addl3 rO,foo$1 value、(sp)十L OI: regref [rO] LO2: symref [foo$1 value]LO3: fetch  (LO2) LO4: regref [5p) LO5: 製aIref [autoinclement]LO6: 1nst r [add13] (LOl、LO3,LO5)movc5 (rO)、4( ro)、#32、foo$w buf len、foo$r bufferLO I: regref [rO] LO2: memref (LOI) LO3: fetch (LO2) LO4: 1itref [#41 LO5: regref [rO) LO6: rnelIlref (LO5,LO4)LO7: fetch ( LO6) LO8: 1itref [#32] LO9: symref [foo$w buf len]LIO: fetc h (LO9) Lll: symref [foo$r buffer]L12: 1nstr  [movc5](LO3,LO7,LO8,LIO) insque 8(rO)、foo$q headLot: 1itref [ #8] LO2: refref [rO]京 LO3: rnemref (LO2,Lot)LO4: sy+mref [ foo$q headJし05: 1nstr [ir+5que](LO3, LO4) 浄書(内容に変更ない 浄書(内容に変更なし) FIG、8 浄書r内容に変更なし) FIG、11 浄書(内容に変更なしΣ FIG、12 浄書(内容に変更なし) FIG、15 ℃ 浄書(内容に変更なし) 浄書(内容に変更なし) 浄書(内容に変更な1−) 浄書(内容に変更なし] 浄書(内容に変更なし) 浄書(内容に変更なし) 浄書(内容に変更なし) FIG、27 浄書(内容に変更なし) #i1(内容に変更なし) 浄書(内容に変更なし〕 浄書(内容に変更なし) FIG、31 浄書(内容に変更、なし) 要 約 書 実行転送命令の計算された行き先アドレスに対する可能な値が、プログラムの流 れ図を通じた後方サーチによって発見される。このサーチの間、行き先アドレス に対する記号表示は連続的に変更され、記号表示が絶対若しくはプログラムカウ ンタ相対アドレスを表示するまで、若しくは、サーチをもはや継続し得なくなる まで、各従前の命令の影響を反映する。このサーチは、例えば、命令が表示の値 に不確定な方法て影響を与えるようになったときには、もはや継続することがで きない。後方記号実行が流れ図のブロックのエントリポイントに到達すると、後 方記号実行は、実行転送命令のために、まだ検査されていない各前ブロックに向 けて後方に進む。故に、多数の確定値が「未知」の値と同様に、計算された行き 先アドレスのために発見され得る。付加的な命令のロケーションを発見するため 、後方記号実行は好ましくは流れ図の構成中に実行される。付加的な命令が発見 されると、新たなブロックとブロック間の新たな経路が流れ図に付加される。後 方記号実行は、新たな経路が計算された行き先アドレスに関する付加的な値を与 え得る場合に反復される。
***、E*<y;、> 昏 5.8.19 平成 年 月 日

Claims (34)

    【特許請求の範囲】
  1. 1.コンピュータプログラムの一連の命令を分析するようにデジタルコンピュー タを動作する方法であって、上記命令の各々は上記コンピュータプログラムに各 々のプログラムアドレスを有しており、上記コンピュータプログラムは、指定の アドレスへ実行を転送する命令であって上記命令のプログラムアドレスと共に上 記命令の実行シーケンスを定めるような命令を含み、上記命令は、指定のメモリ アドレスにおいてメモリの内容を変更するオペレーションを指定する命令と、指 定の汎用レジスタの内容を変更するオペレーションを指定する命令とを含み、更 に、上記プログラムは、上記汎用レジスタのうちの指定の汎用レジスタの内容か ら決定された上記プログラム内の行き先アドレスヘプログラム実行の転送を指定 する少なくとも1つの実行転送命令を含んでおり、上記の方法は、プログラム実 行の前に上記行き先アドレスとして少なくとも1つの値をサーチすることを含み 、これは、 a)上記汎用レジスタのうちの指定の汎用レジスタがプログラムの実行中にもつ であろう内容に関して上記行き先アドレスの表示を形成し、b)上記実行転送命 令に先行する上記実行シーケンス内の命令を上記実行シーケンスとは逆の順序で 検査し、そして 1)その検査された命令が、上記表示に示された汎用レジスタの内容の変更を指 定するが、上記表示が上記検査された命令のアドレスに対して一定の値を表すよ うな変更を指定しないときには、その指定された変更を考慮するように上記表示 を変更して、プログラムの実行が上記検査された命令のプログラムアドレスに到 達したときに、上記表示に示された少なくとも1つの汎用レジスタがプログラム の実行中にもつであろう内容に関して上記表示が上記行き先アドレスを表すよう にし、そして 2)上記検査された命令が上記表示に示された汎用レジスタの内容の変更を指定 し、上記検査された命令のアドレスに対して一定の値を上記表示が表すときには 、上記表示から上記行き先アドレスとしての上記値を決定する、という段階によ って行うことを特徴とする方法。
  2. 2.上記表示は、メモリアクセスアーギュメント表示によって指定されたメモリ アドレスにおけるメモリの内容に関して上記行き先アドレスを表すメモリアクセ スファンクションを含み、上記方法は、更に、検査された命令が指定のメモリア ドレスにおけるメモリの内容を変更するときにはメモリアクセスアーギュメント 表示をその検査された命令内のメモリアドレス指定子に合致させるよう試み、そ して合致が生じたときには、上記表示内のメモリアクセスファンクションを、指 定のメモリアドレスにおけるメモリの変更された内容の表示と置き換えるという 段階を含んでいる請求項1に記載の方法。
  3. 3.上記表示のメモリアクセスアーギュメントをその検査された命令内のメモリ アドレス指定子に合致させるよう試みる上記段階は、上記検査された命令に先行 する命令をサーチして、上記メモリアクセスアーギュメント表示に合致する表示 形態に上記メモリアドレス指定子をセットする命令を見つけることを含む請求項 2に記載の方法。
  4. 4.上記表示を、サブルーチン呼び出しオペレーション中にサブルーチンへ通さ れるサブルーチンアーギュメントに対する所定の表示フォーマットに合致させる よう試み、そして合致が生じたときに、上記実行転送命令から上記サブルーチン アーギュメントへコールバックが生じることを記録する段階を更に含む請求項1 に記載の方法。
  5. 5.検査される命令のアドレスがサブルーチン呼び出し命令の行き先アドレスで あるときには、上記表示を、サブルーチン呼び出し命令のサブルーチンアーギュ メントに対する所定の表示フォーマットに合致させるよう試み、そして合致が見 つかったときには、上記サブルーチン呼び出し命令に先行する上記実行シーケン ス内の命令を上記実行シーケンスとは逆の順序で検査することにより上記サーチ を続けるという段階を更に含む請求項1に記載の方法。
  6. 6.上記サブルーチンアーギュメントは、スタックレジスタの内容によって指示 されたメモリアドレスを有するメモリ内のスタックに記憶され、上記サブルーチ ン呼び出し命令は、アーギュメントポインタレジスタに、サブルーチンアーギュ メントのメモリアドレスを示す値をセットし、そして上記表示は、スタックレジ スタの行き先をアーギュメントポインタレジスタの行き先と置き換えることによ りサブルーチン呼び出し命令の作用を考慮するように変更される請求項5に記載 の方法。
  7. 7.上記サブルーチン呼び出し命令は、多数のサブルーチンアーギュメントを通 し、そしてサブルーチンアーギュメントの数を指定する指定子を含んでおり、更 に、上記サブルーチンのアーギュメントに対する所定の表示フォーマットは、サ ブルーチンアーギュメントの上記指定の数によって決まる請求項5に記載の方法 。
  8. 8.上記表示から上記行き先アドレスとしての値を決定する上記段階は、検査さ れた命令がプログラムカウンタレジスタを指定するレジスタ指定子を含むときに その検査された命令のプログラムアドレスから行き先アドレスを計算する段階を 含む請求項1に記載の方法。
  9. 9.上記表示は、メモリアクセスファンクションフラグ、レジスタ指定番号及び 変位定数を含む固定のフォーマットで記憶される請求項1に記載の方法。
  10. 10.上記表示は、所定の1組のレジスタ指示子、演算子及び定数から選択され た一連の文字を含む可変長さのフォーマットで記憶される請求項1に記載の方法 。
  11. 11.上記演算子は、加算、乗算及びメモリアクセスオペレーションを含む請求 項10に記載の方法。
  12. 12.上記表示を変更する段階は、上記検査された命令のレジスタ指定子により 指定されたレジスタを示すレジスタ指示子が発生するたびに新たな表示を上記表 示に置き換え、そして代数簡易化の法則を適用することにより上記表示を簡易化 することを含む請求項10に記載の方法。
  13. 13.上記表示は、これが絶対又はプログラムカウンタ相対プログラムアドレス に簡易化されるときに上記検査される命令のアドレスに対して一定の値を表す請 求項12に記載の方法。
  14. 14.上記行き先アドレスとしての値が上記表示から決定された後にその値を有 効化する段階を更に備え、この有効化段階では、上記行き先アドレスのアクセス モードが、絶対、絶対間接、プログラムカウンタ相対、又はプログラムカウンタ 相対間接のいずれであるかをテストし、そして各アクセスモードに対し、各々の 所定の1組の有効アドレス内に入らないものを無効行き先アドレスとして拒絶す る請求項1に記載の方法。
  15. 15.上記命令は、OPコード、自動増加指定子及び自動減少指定子を有する命 令を含み、そして上記汎用レジスタのうちの指定の汎用レジスタの内容に対する 指定の変更を考慮するように上記表示を変更する段階は、次のような一連の段階 を含み、即ち、 i)表示に示された自動増加レジスタを指定する命令内の各自動増加指定子に対 し、表示に示された自動増加レジスタに関連した表示内の変位を増加し、ii) 命令内のOPコードにより指定される各オペレーションで、上記表示に示された 汎用レジスタの内容を変更するか、又は表示内のメモリアクセスアーギュメント により指示されたメモリ位置を変更するような各オペレーションに対して、OP コードによる変更を考慮するように上記表示を変更し、そしてiii)表示に示 された自動減少レジスタを指定する命令内の各自動減少指定子に対し、表示に示 された自動減少レジスタに関連した表示内の変位を減少する、段階を含む請求項 1に記載の方法。
  16. 16.上記検査段階は、更に、 3)検査された命令が上記表示に示された汎用レジスタの内容の変更を指定する が、この変更は上記表示を所定の仕方で変更することによって考慮できないよう な所定の種類の変更であるときには、上記表示に対して「未知」の値を決定し、 そして上記検査された命令に先行する命令の検査を終了させることを含む請求項 1に記載の方法。
  17. 17.上記検査段階は、更に、 3)検査された命令が、上記汎用レジスタのうちの指定のレジスタの内容の変更 を指定し、そしてその検査された命令が、命令OPコードの所定のサブセットに おいて、上記表示の変更が許されないようなOPコードを有するときには、上記 表示に対して「未知」の値を決定し、そして上記検査された命令に先行する命令 の検査を終了させることを含む請求項1に記載の方法。
  18. 18.上記検査段階は、更に、 3)検査された命令が、命令OPコードの所定のサブセットにおいて、汎用レジ スタの内容もアドレス可能なメモリ位置の内容も変更しないようなOPコードを 有しているときには、命令の作用を考慮するように上記表示を変更せず且つ上記 検査された命令から上記行き先アドレスとしての値を決定せずに、命令の検査を 中断させることを含む請求項1に記載の方法。
  19. 19.上記実行シーケンスは、上記実行転送命令の前に上記シーケンスに複数の 実行経路を含んでおり、そして上記検査段階は、上記実行経路の各々を通して後 方に逆の順序で命令を検査して、上記行き先アドレスとしての複数の値を決定す ることを含み、これら値は、上記実行シーケンスとは逆の順序で上記経路の各々 を通して命令を検査することにより得た上記行き先アドレスに対する値を含んで いる請求項1に記載の方法。
  20. 20.上記実行経路の少なくとも1つはそれ自身ヘループして戻り、上記実行経 路の各々を通して後方に逆の順序で命令を検査する上記段階は、上記実行経路の 各々がそれ自身ヘループして戻るかどうかをチェックし、そしてそれ自身へ戻る ときには上記実行経路の各々における命令の検査を終了させる段階を含む請求項 19に記載の方法。
  21. 21.上記命令の連続するものをブロックにグループ分けし、各ブロックの命令 がプログラムアドレスシーケンスで実行されると共に、上記実行転送経路が上記 ブロックの1つにおける最後の命令から上記ブロックの1つにおける最初の命令 へと生じるようにし、更に、各ブロックことに、上記各ブロックヘの実行転送経 路が始まるところの先行ブロックのリストと、上記各ブロックからの実行転送経 路が延びていくところの後続ブロックのリストとを形成し、そして上記実行経路 の各々を通して後方に逆の順序で命令を検査する上記段階は、実行転送命令を含 むブロックを透ると共に、実行転送命令を含む上記ブロックの先行ブロックで始 まる先行ブロックのラインを通して後方に逆の順序で命令を検査することを含む 請求項19に記載の方法。
  22. 22.上記ブロックの各々はエポック番号アトリビュートを有し、そして上記行 き先アドレスの少なくとも1つの値に対する上記サーチにはエポック番号が指定 され、各々のブロックは上記行き先アドレスの値に対して1回より多くサーチさ れることがなく、これは、ブロックのサーチ時に上記各ブロックのエポック番号 アトリビュートをエポック番号に等しくセットし、そしてそのエポック番号をブ ロックのエポック番号アトリビュートと比較することにより上記各ブロックを2 回目にサーチしょうとする試みを検出することにより行う請求項21に記載の方 法。
  23. 23.上記コンピュータプログラムは、上記実行転送命令に対して見つかった行 き先アドレスで始まる命令シーケンスを含み、上記実行転送命令に対して見つか った行き先アドレスで始まるこの命令シーケンスは、上記実行シーケンス内の上 記実行転送命令に先行する上記プログラム内の命令までループバックする実行転 送経路を定め、そして更に、上記方法は、上記実行転送命令の上記行き先アドレ スで始まる上記命令シーケンスをデコードして、上記実行シーケンス内の上記実 行転送命令に先行する上記プログラム内の上記命令へ至る上記実行転送経路を見 つけ、そしてその際に、上記実行シーケンスにおいて上記ループバックする実行 転送経路に先行するデコードされた命令を、上記実行シーケンスとは逆の順序で 検査することにより、上記実行転送命令の上記行き先アドレスの値を再びサーチ するという段階を備えている請求項19に記載の方法。
  24. 24.オリジナルコンピュータプログラムの命令をサーチし、その見い出した命 令を変換して、変換されたプログラムを発生するようにデジタルコンピュータを 動作する方法であって、上記命令の各々は上記コンピュータプログラムに各々の プログラムアドレスを有しており、上記コンピュータプログラムは、指定のアド レスへ実行を転送する命令であって上記命令のプログラムアドレスと共に上記命 令の実行シーケンスを定めるような命令を含み、上記実行シーケンスは上記プロ グラムの入力ポイントアドレスで始まり、上記命令は、指定のメモリアドレスに おいてメモリの内容を変更するオペレーションを指定する命令と、指定の汎用レ ジスタの内容を変更するオペレーションを指定する命令とを含み、上記プログラ ムは、上記汎用レジスタのうちの指定の汎用レジスタの内容から決定された上記 プログラム内の行き先アドレスヘプログラム実行の転送を指定する少なくとも1 つの実行転送命令を含んでおり、上記方法は、a)上記入力ポイントアドレスか ら始めて命令をデコードし、上記命令をデコードするときには、上記実行転送命 令が上記汎用レジスタのうちの指定のレジスタの内容によって決定された行き先 アドレスを有することを確認し、そしてその際に、上記行き先アドレスの少なく とも1つの値をサーチし、このサーチは、1)上記汎用レジスタのうちの指定の 汎用レジスタがプログラムの実行中にもつであろう内容に関して上記行き先アド レスの表示を形成し、2)上記実行転送命令に先行する上記実行シーケンス内の 命令を上記実行シーケンスとは逆の順序で検査し、そしてi)その検査された命 令が、上記表示に示された汎用レジスタの内容の変更を指定するが、上記表示が 上記検査された命令のアドレスに対して一定の値を表すような変更を指定しない ときには、その指定された変更を考慮するように上記表示を変更して、プログラ ムの実行が上記検査された命令のプログラムアドレスに到達したときに、少なく とも1つの指定の汎用レジスタがプログラムの実行中にもつであろう内容に関し て上記表示が上記行き先アドレスを表すようにし、そして ii)上記検査された命令が上記表示に示された汎用レジスタの内容の変更を指 定し、上記検査された命令のアドレスに対して一定の値を上記表示が表すときに は、上記表示から上記行き先アドレスとしての上記値を決定し、b)実行転送命 令に対して見つかった行き先アドレスで始めて命令をデコードし、そして c)上記デコードされた命令を変換して、上記の変換されたプログラムを発生す る、 という段階を備えたことを特徴とする方法。
  25. 25.上記表示は、メモリアクセスアーギュメント表示により指定されたメモリ アドレスにおけるメモリの内容に関して上記行き先アドレスを表すメモリアクセ スファンクションを含み、上記方法は、更に、検査された命令が指定のメモリア ドレスにおけるメモリの内容を変更するときにはメモリアクセスアーギュメント 表示をその検査された命令内のメモリアドレス指定子に合致させるよう試み、そ して合致が生じたときには、上記表示内のメモリアクセスファンクションを、指 定のメモリアドレスにおけるメモリの変更された内容の表示と置き換えるという 段階を含んでいる請求項24に記載の方法。
  26. 26.上記表示のメモリアクセスアーギュメントをその検査された命令内のメモ リアドレス指定子に合致させるよう試みる上記段階は、上記検査された命令に先 行する命令をサーチして、上記メモリアクセスアーギュメント表示に合致する表 示形態に上記メモリアドレス指定子をセットする命令を見つけることを含む請求 項25に記載の方法。
  27. 27.上記表示を、サブルーチン呼び出しオペレーション中にサブルーチンへ通 されるサブルーチンアーギュメントに対する所定の表示フォーマットに合致させ るよう試み、そして合致が生じたときに、上記実行転送命令から上記サブルーチ ンパラメータへコールバックが生じることを記録する段階を更に含む請求項24 に記載の方法。
  28. 28.検査される命令のアドレスがサブルーチン呼び出し命令の行き先アドレス であるときには、上記表示を、サブルーチン呼び出し命令のサブルーチンアーギ ュメントに対する所定の表示フォーマットに合致させるよう試み、そして合致が 見つかったときには、上記サブルーチン呼び出し命令に先行する上記実行シーケ ンス内の命令を上記実行シーケンスとは逆の順序で検査することにより上記サー チを続けるという段階を更に含む請求項24に記載の方法。
  29. 29.上記実行シーケンスは、上記実行転送命令の前に上記シーケンスに複数の 実行経路を含んでおり、そして上記検査段階は、上記実行経路の各々を通して後 方に逆の順序で命令を検査して、上記行き先アドレスとしての複数の値を決定す ることを含み、これら値は、上記実行シーケンスとは逆の順序で上記経路の各々 を通して命令を検査することにより得た上記行き先アドレスに対する値を含んで いる請求項24に記載の方法。
  30. 30.上記実行経路の少なくとも1つはそれ自身ヘループして戻り、上記実行経 路の各々を通して後方に逆の順序で命令を検査する上記段階は、上記実行経路の 各々がそれ自身ヘループして戻るかどうかをチェックし、そしてそれ自身へ戻る ときには上記実行経路の各々における命令の検査を終了させる段階を含む請求項 29に記載の方法。
  31. 31.上記命令の連続するものをブロックにグループ分けし、各ブロックの命令 がプログラムアドレスシーケンスで実行されると共に、上記実行転送経路が上記 ブロックの1つにおける最後の命令から上記ブロックの1つにおける最初の命令 へと生じるようにし、更に、各ブロックごとに、上記各ブロックヘの実行転送経 路が始まるところの先行ブロックのリストと、上記各ブロックからの実行転送経 路が延びていくところの後続ブロックのリストとを形成し、そして上記実行経路 の各々を通して後方に逆の順序で命令を検査する上記段階は、実行転送命令を含 むブロックを通ると共に、実行転送命令を含む上記ブロックの先行ブロックで始 まる先行ブロックのラインを通して後方に逆の順序で命令を検査することを含む 請求項19に記載の方法。
  32. 32.上記コンピュータプログラムは、上記実行転送命令に対して見つかった行 き先アドレスで始まる命令シーケンスを含み、この命令シーケンスは、上記実行 シーケンス内の上記実行転送命令に先行する上記プログラム内の命令までループ バックする実行転送経路を定め、そして更に、上記実行転送命令の上記行き先ア ドレスで始まる命令の上記デコード動作では、上記実行シーケンス内の上記実行 転送命令に先行する上記プログラム内の上記命令へ至る上記実行転送経路を見つ け、そしてその際に、上記実行シーケンスにおいて上記ループバックする実行転 送経路に先行するデコードされた命令を、上記実行シーケンスとは逆の順序で検 査することにより、上記実行転送命令の上記行き先アドレスの別の値をサーチし 始める請求項19に記載の方法。
  33. 33.オリジナルコンピュータプログラムの命令をサーチし、その見い出した命 令を変換して、変換されたプログラムを発生するためのデジタルコンピュータシ ステムであって、上記命令の各々は上記コンピュータプログラムに各々のプログ ラムアドレスを有しており、上記コンピュータプログラムは、指定のアドレスへ 実行を転送する命令であって上記命令のプログラムアドレスと共に上記命令の実 行シーケンスを定めるような命令を含み、上記実行シーケンスは上記プログラム の入力ポイントアドレスで始まり、上記命令は、指定のメモリアドレスにおいて メモリの内容を変更するオペレーションを指定する命令と、指定の汎用レジスタ の内容を変更するオペレーションを指定する命令とを含み、更に、上記プログラ ムは、上記汎用レジスタのうちの指定の汎用レジスタの内容から決定された上記 プログラム内の行き先アドレスヘプログラム実行の転送を指定する少なくとも1 つの実行転送命令を含んでおり、上記デジタルコンピュータシステムは、a)上 記入力ポイントアドレスから始めて命令をデコードし、その命令デコード時に、 上記実行転送命令が上記汎用レジスタのうちの指定のレジスタの内容により決定 された行き先アドレスを有することを確認しそしてその際に上記行き先アドレス の少なくとも1つの値をサーチする手段を具備し、このサーチでは、1)上記汎 用レジスタのうちの指定の汎用レジスタがプログラムの実行中にもつであろう内 容に関して上記行き先アドレスの表示を形成し、2)上記実行転送命令に先行す る上記実行シーケンス内の命令を上記実行シーケンスとは逆の順序で検査し、そ してi)その検査された命令が、上記表示に示された汎用レジスタの内容の変更 を指定するが、上記表示が上記検査された命令のアドレスに対して一定の値を表 すような変更を指定しないときには、その指定された変更を考慮するように上記 表示を変更して、プログラムの実行が上記検査された命令のプログラムアドレス に到達したときに、上記表示に示された少なくとも1つの指定の汎用レジスタが プログラムの実行中にもつであろう内容に関して上記表示が上記行き先アドレス を表すようにし、そして ii)上記検査された命令が上記表示に示された汎用レジスタの内容の変更を指 定し、上記検査された命令のアドレスに対して一定の値を上記表示が表すときに は、上記表示から上記行き先アドレスとしての上記値を決定し、b)更に、実行 転送命令に対して見つかった行き先アドレスで始めて命令をデコードする手段と 、 c)上記デコードされた命令を変換して、上記の変換されたプログラムを発生す る手段とを具備することを特徴とするデジタルコンピュータシステム。
  34. 34.上記実行転送命令に対して見つけた上記行き先アドレスで始めて上記命令 をデコードする上記手段は、上記実行シーケンス内の上記実行転送命令に先行す る上記プログラム内の上記命令へ至る実行転送経路を見つけ、その際に、上記シ ーケンスにおいて上記実行転送命令に先行する上記プログラム内の命令に対して 、上記実行シーケンスにおいて上記実行転送経路に先行するデコードされた命令 を上記実行シーケンスとは逆の順序で検査することにより、上記実行転送命令の 上記行き先アドレスの追加の値をサーチし始めるための手段を備えている請求項 33に記載のデジタルコンピュータシステム。
JP4508277A 1991-03-07 1992-03-03 後方記号実行による分岐分析 Expired - Fee Related JPH0727464B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/666,070 US5428786A (en) 1991-03-07 1991-03-07 Branch resolution via backward symbolic execution
US666070 1991-03-07

Publications (2)

Publication Number Publication Date
JPH05508503A true JPH05508503A (ja) 1993-11-25
JPH0727464B2 JPH0727464B2 (ja) 1995-03-29

Family

ID=24672699

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4508277A Expired - Fee Related JPH0727464B2 (ja) 1991-03-07 1992-03-03 後方記号実行による分岐分析

Country Status (8)

Country Link
US (1) US5428786A (ja)
EP (1) EP0529059B1 (ja)
JP (1) JPH0727464B2 (ja)
AU (1) AU656577B2 (ja)
CA (1) CA2082070C (ja)
DE (1) DE69224338T2 (ja)
IE (1) IE920740A1 (ja)
WO (1) WO1992015938A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966514A (en) * 1995-05-31 1999-10-12 Matsushita Electric Industrial Co., Ltd. Microprocessor for supporting reduction of program codes in size
JP2001504957A (ja) * 1996-09-26 2001-04-10 トランスメタ・コーポレーション 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0721033A (ja) * 1993-07-07 1995-01-24 Nec Corp 言語処理装置及びその方法
US5615369A (en) * 1994-07-25 1997-03-25 Hewlett-Packard Company Automated detection and correction of uninitialized variables
EP0703532B1 (en) * 1994-09-22 2001-11-28 Sun Microsystems, Inc. Embedded program flow information for object code manipulation
US5745897A (en) * 1994-11-21 1998-04-28 Bay Networks Group, Inc. Method and system for compiling management information base specifications
JP3569014B2 (ja) * 1994-11-25 2004-09-22 富士通株式会社 マルチコンテキストをサポートするプロセッサおよび処理方法
US5854932A (en) * 1995-08-17 1998-12-29 Microsoft Corporation Compiler and method for avoiding unnecessary recompilation
US5956478A (en) * 1995-09-11 1999-09-21 Digital Equipment Corporation Method for generating random test cases without causing infinite loops
US5802373A (en) * 1996-01-29 1998-09-01 Digital Equipment Corporation Method for providing a pipeline interpreter for a variable length instruction set
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
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
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
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
US6438740B1 (en) * 1997-08-21 2002-08-20 Compaq Information Technologies Group, L.P. System and method for dynamically identifying free registers
US6233733B1 (en) * 1997-09-30 2001-05-15 Sun Microsystems, Inc. Method for generating a Java bytecode data flow graph
US5956758A (en) * 1997-10-31 1999-09-21 Digital Equipment Corporation Method for determining target address of computed jump instructions in executable programs
US5966541A (en) 1997-12-04 1999-10-12 Incert Software Corporation Test protection, and repair through binary-code augmentation
US6150724A (en) * 1998-03-02 2000-11-21 Motorola, Inc. Multi-chip semiconductor device and method for making the device by using multiple flip chip interfaces
US6295640B1 (en) * 1998-05-08 2001-09-25 Apple Computer, Inc. Method and apparatus for distinguishing reference values from non-reference values in a runtime environment
KR20010072477A (ko) * 1998-08-13 2001-07-31 썬 마이크로시스템즈, 인코포레이티드 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치
US6308321B1 (en) 1998-12-11 2001-10-23 Incert Software Corporation Method for determining program control flow
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6662354B1 (en) * 1999-01-29 2003-12-09 Unisys Corporation Determining destinations of a dynamic branch
US6353924B1 (en) 1999-02-08 2002-03-05 Incert Software Corporation Method for back tracing program execution
GB2348305A (en) * 1999-03-24 2000-09-27 Int Computers Ltd Instruction execution mechanism
US6990658B1 (en) 1999-10-13 2006-01-24 Transmeta Corporation Method for translating instructions in a speculative microprocessor featuring committing state
US6745383B1 (en) * 1999-12-29 2004-06-01 Veritas Operating Corporation Early warning mechanism for enhancing enterprise availability
US6804814B1 (en) 1999-12-29 2004-10-12 Veritas Operating Corporation Method for simulating back program execution from a traceback sequence
US6748584B1 (en) * 1999-12-29 2004-06-08 Veritas Operating Corporation Method for determining the degree to which changed code has been exercised
US6922830B1 (en) * 2000-03-10 2005-07-26 International Business Machines Corporation Skip list data storage during compilation
JP2001273138A (ja) * 2000-03-24 2001-10-05 Fujitsu Ltd プログラム変換装置および方法
SE0002440D0 (sv) * 2000-06-28 2000-06-28 Virtutech Ab Interpreter
US7251811B2 (en) * 2002-01-02 2007-07-31 Intel Corporation Controlling compatibility levels of binary translations between instruction set architectures
US7370296B2 (en) * 2004-05-25 2008-05-06 International Business Machines Corporation Modeling language and method for address translation design mechanisms in test generation
US7594223B2 (en) * 2005-06-27 2009-09-22 Hewlett-Packard Development Company, L.P. Straight-line post-increment optimization for memory access instructions
US8019944B1 (en) 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7987342B1 (en) 2005-09-28 2011-07-26 Oracle America, Inc. Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US7953961B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder
US8037285B1 (en) 2005-09-28 2011-10-11 Oracle America, Inc. Trace unit
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US8015359B1 (en) 2005-09-28 2011-09-06 Oracle America, Inc. Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit
US8051247B1 (en) 2005-09-28 2011-11-01 Oracle America, Inc. Trace based deallocation of entries in a versioning cache circuit
US7937564B1 (en) * 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US8370576B1 (en) 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US7676634B1 (en) 2005-09-28 2010-03-09 Sun Microsystems, Inc. Selective trace cache invalidation for self-modifying code via memory aging
US8010745B1 (en) 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
US8136091B2 (en) * 2007-01-31 2012-03-13 Microsoft Corporation Architectural support for software-based protection
US9235390B1 (en) * 2008-03-31 2016-01-12 Symantec Corporation Application optimization for use based on feature popularity
US8090692B2 (en) * 2008-09-10 2012-01-03 Infinite Memory Ltd Method for using an OTP storage device
EP2519876A1 (en) 2009-12-28 2012-11-07 Hyperion Core, Inc. Optimisation of loops and data flow sections
JP5987501B2 (ja) * 2012-06-29 2016-09-07 富士通株式会社 分岐アドレス管理プログラム、方法、及び装置
GB2521367A (en) * 2013-12-17 2015-06-24 Ibm Adaptable and extensible runtime and system for heterogeneous computer systems
US10467390B1 (en) * 2016-08-18 2019-11-05 Snap Inc. Cyclically dependent checks for software tamper-proofing
US10360134B2 (en) * 2017-10-31 2019-07-23 Commissariat A L'energie Atomique Et Aux Energies Alternatives System, method and computer program product for detecting infeasible events in dynamic programs

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0372835A2 (en) * 1988-12-06 1990-06-13 AT&T Corp. Translation technique

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US4951195A (en) * 1988-02-01 1990-08-21 International Business Machines Corporation Condition code graph analysis for simulating a CPU processor
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0372835A2 (en) * 1988-12-06 1990-06-13 AT&T Corp. Translation technique

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966514A (en) * 1995-05-31 1999-10-12 Matsushita Electric Industrial Co., Ltd. Microprocessor for supporting reduction of program codes in size
US6253305B1 (en) 1995-05-31 2001-06-26 Matsushita Electric Industrial Co., Ltd. Microprocessor for supporting reduction of program codes in size
JP2001504957A (ja) * 1996-09-26 2001-04-10 トランスメタ・コーポレーション 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置

Also Published As

Publication number Publication date
CA2082070C (en) 1998-02-17
EP0529059B1 (en) 1998-02-04
DE69224338D1 (de) 1998-03-12
CA2082070A1 (en) 1992-09-08
DE69224338T2 (de) 1998-10-01
WO1992015938A1 (en) 1992-09-17
EP0529059A1 (en) 1993-03-03
AU656577B2 (en) 1995-02-09
AU1581792A (en) 1992-10-06
IE920740A1 (en) 1992-09-09
JPH0727464B2 (ja) 1995-03-29
US5428786A (en) 1995-06-27

Similar Documents

Publication Publication Date Title
JPH05508503A (ja) 後方記号実行による分岐分析
EP0528028B1 (en) Automatic flowgraph generation for program analysis and translation
US5317740A (en) Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
US5287490A (en) Identifying plausible variable length machine code of selecting address in numerical sequence, decoding code strings, and following execution transfer paths
US5598560A (en) Tracking condition codes in translation code for different machine architectures
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
US5450575A (en) Use of stack depth to identify machine code mistakes
US5301325A (en) Use of stack depth to identify architechture and calling standard dependencies in machine code
NO304459B1 (no) Forbedret feilrapportering for utf°relse av oversatt kode
EP0731409B1 (en) Method and apparatus for computer code processing in a code translator
JP3672207B2 (ja) プログラム変換装置
Lee et al. Object-Oriented Programming
JPS62205437A (ja) 情報処理装置
Fjeld The Movitz development platform
JPS62205436A (ja) 情報処理装置

Legal Events

Date Code Title Description
R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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

Free format text: PAYMENT UNTIL: 20090329

Year of fee payment: 14

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

Free format text: PAYMENT UNTIL: 20100329

Year of fee payment: 15

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

Free format text: PAYMENT UNTIL: 20100329

Year of fee payment: 15

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

Free format text: PAYMENT UNTIL: 20110329

Year of fee payment: 16

LAPS Cancellation because of no payment of annual fees