JPH05508504A - プログラム翻訳方法 - Google Patents

プログラム翻訳方法

Info

Publication number
JPH05508504A
JPH05508504A JP4508765A JP50876592A JPH05508504A JP H05508504 A JPH05508504 A JP H05508504A JP 4508765 A JP4508765 A JP 4508765A JP 50876592 A JP50876592 A JP 50876592A JP H05508504 A JPH05508504 A JP H05508504A
Authority
JP
Japan
Prior art keywords
instruction
program
block
address
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
JP4508765A
Other languages
English (en)
Other versions
JPH07122854B2 (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 JPH05508504A publication Critical patent/JPH05508504A/ja
Publication of JPH07122854B2 publication Critical patent/JPH07122854B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Machine Translation (AREA)

Abstract

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

Description

【発明の詳細な説明】 プログラム解析及び翻訳のための自動フローグラフ生成又」L旦」(皇 ]、光肌二北野 本発明は、デジタル・コンピューター用のプログラム・コードの翻訳に関し、特 に、プログラム・コードが実際に実行されるまでは、翻訳されるべきプログラム ・コードの全体の記憶場所が分からない場合の一つの言語から他の言語へのプロ グラム・コードの翻訳に関する。
2・!見芝丘二脱ユ バスカル、フォートラン、コボル、PL/I又はC言語などの高等言語を機械言 語に翻訳するためのコンピューター言語翻訳プログラムがよく知られている。
これらの言語のために、プログラムは英語的なスタイルにコード化される。コン パイラと呼ばれる言語翻訳プログラムは、高等言語プログラム(ソース・プロゲ ラふと呼ばれる)を読んで、それを機械言語プログラム(目的プログラムと呼ば れる)に翻訳する。
高等言語の主な利点の一つは、アルゴリズムを表現するのが容易であることは別 として、その機械独立性である。それらは、ハードウェア機械及び命令集合の詳 細を隠す。けれども、機械言語プログラミングが望ましいアプリケーシヨンが幾 つかある。プログラムの実行速度を高めるには、手順を実行するのに必要な機械 量イクルの数を最小にするために、繰り返し実行される手順についてのコードを 機械言語で書くことがしばしば望ましい0機械言語プログラミングは、特定のコ ンピューターの特別のハードウェア特徴を直接制御するために多くのコンピュー ター・システムにおいて必要とされる1例えば、メモリー及び入出力装置を管理 するオペレーティング・システムの部分は、しばしば機械言語で書かれる。
機械言語プログラミングは、普通は2進コードの代わりにアッセンブリ言語で書 かれる。アッセンブリ言語は、プログラマ−が記憶場所及び命令についての記号 名を用いて機械の動作を指定することを可能にする。アッセンブリと呼ばれるプ ログラムは、アッセンブリ言語プログラムを2進機械コードに翻訳する。アッセ ンブリは、記号の値とデータ要素のアドレスとを記憶する作業の全てを行う。
しかし、高等言語とは異なって、各アッセンブリ言語命令は、正確に一機械命令 に対2する。
最近、1種類のコンピューターについての機械言語を他の種類のコンピューター についての機械言語に翻訳する必要が生じている。この必要は、新しいコンピュ ーター・アーキテクチャをよりコスト効率的にしたコンビエータ−・ハードウェ アにおける急速な進歩に起因して生じた。特に、10年間以上にわたって一般目 的アブリケーシゴン用の殆どの高性能コンピューターは、しばしば可変長命令と 、複合メモリー・アクセス動作モードでのメモリー・ツー・メモリー命令(me mory−to−memory 1nstructions)を含む多数の命令 を命令セット中に有することを特徴とする「複合命令セント・アーキテクチ+  (complex 1nstruction 5etarchjtecture  (CI S C) ) Jを用いた。VAX”命令セットは、Cl5Cの主要 な例であって、1〜2バイト・オプコードと0〜6個のオペランド指定子とを有 する命令を採用し、ここで各オペランド指定子の長さは1バイトないし18バイ トである。オペランド指定子の大きさは、アドレス指定モード、変位の大きさく バイト、ワード又はロングワード)、等々による。オペランド指定子の11バイ トは、そのオペランドについてのアドレス指定モードを記述し、オプコードはオ ペランドの数(0〜6)を定義する。しかし、長さの異なるオペランド指定子と 共に多数のオプコードを用いることが出来るので、オプコード自体が命令の全長 を常に決定するわけではない、VAX”命令セットの他の特徴は、カントワード 参照 (quadword reference)又はロングワード参照(lo ngllord reference)に加えて、バイト参照又はバイト・スト リング・メモリー参照を使用することである。即ち、メモリー参照は、不整合バ イト参照を含み、1バイトないし複数ワードまで可変の長さのものである。
crscアーキテクチャは、コードをコンパクト化すると共に、アッセンブリ言 語プログラミングをより容易にした。中央処理装置(CP U)がメモリーより 遥かに高速であったときには、命令当たりにより多量の仕事を行うのが有利であ った。それは、さもなければ、メモリーが命令を配送するのを待つ間にCPUが 過度の時間を費やすことになるからである。しかし、近時、メモリー速度の進歩 は、オン・チップ・キャッシュ及び階層キャッシュなどの技術の進歩と共に、c rscアーキテクチャの主な利点を無(した、従って、適度のコストで実行速度 を最大にするためにCPUを複雑化する必要があるために、命令アーキテクチャ の選択が今や必要である。これらの考慮事項は、縮小句会セットアーキテクチャ (RI S C)が優れた性能及びコスト利点を有することを示唆している。
縮小命令セット又はRISCプロセッサは、解読しゃすい少数の命令と、全ての 算術/論理動作をレジスターからレジスターへと実行する必要があるということ とを特徴とするものである。#iの特徴は、複合メモリー・アクセスが許されな いことである。全てのメモリー・アクセスはレジスター・ロード/記憶動作であ り、少数の比較的に単純なアドレス指定モード、即ち、オペランド・アドレスを 指定する数個の方法があるだけである。命令は僅か1の長さであり、メモリー・ アクセスは、標準データ幅であり、普通は整合している。命令実行は、マイクロ コーディングとは別の、ダイレクト・ハードワイヤ型のものである。固定された 命令サイクル時間があり、命令は比較的に単純であるように定義されるので、( バイプライニングは実際の実行を数個のサイクルに分散させるので、平均で)そ れらは全て1シ曹−ト・サイクルで実行する。
残念なことに、確立した命令アーキテクチャのために既に書かれた大量のコンビ エータ−・ソフトウェアがあり、そのソフトウェアの多くは、高等言語のコンパ イルに由来しない機械言語プログラミングを包含している。これらの場合に、新 しい命令アーキテクチャのために書かれたコンパイラを用いてソース・コードを 再コンパイルする普通の方法によってソフトウェアを新しいコンビエータ−・ア ーキテクチャに「ボート」することは出来ない。
ある場合には、既存のコンピューター・ソフトウェアの機械言語プログラミング のためのアッセンブリ言語コードが存在する。従って、同じ基本機能を行う新し い命令アーキテクチャにおいて各アッセンブリ言語命令を1個以上の機械命令に 翻訳するための翻訳プログラムを書くことが出来るべきである。この様な直接翻 訳に実用性は、新しい命令アーキテクチャの両立性に依存する。リチャード・L 、サイ7及びリチャードT、ウィテク1990年6月29日出願の米国特許出願 第071547,589号、r高性能プロセッサにおけるブランチ予測」、に更 に説明されているように、VA、XTX命令を含むCl5CコードをRISCコ ードに翻訳するために、例えば、RISCCPUハードウェアとRTSC命令セ 命令セフ台ける革新によって翻訳の実用性が改善される。これを参照により本書 に組み入れるものとする。
多くの場合に既存のコンピューター・ソフトウェアは、高等又はアッセンブリ言 語ソース・コードの完全な又はコヒーレントなセットが存在しないような2進機 械言語コードを含んでいる。これは、翻訳すべき2進機械コードの全部の位置決 めするという非常に困難な問題を生じさせる。普通の場合には、プログラム中の 2進機械コードは実行時間前には発見され得ない、それは、そのコードは、計算 された宛先アドレスを有する「ジャンプ」や「呼出」命令などの少なくとも一つ の実行転送命令を含んでいるからである。実行時には、宛先アドレスが計算され 、実行は、その命令からr欠」コードへ転送される。
もっと異常な場合、プログラム中の2進機械コードの一部は、実行時までは作ら れない、これらの異常な場合は代表的には貧弱なプログラミング技術に起因する ものであるが、コードはしばしば例えば「ライセンス・チェック」ルーチンの一 部として保安機密保護のために実行時に作られる。「ライセンス・チェック」ル ーチンは、例えば、命令の系列をスクラッチ・メモリー領域に書き込んで、次に その命令の系列を実行する。ライセンシング・ルーチンを迂回するには、該ルー チンの動作モードを、スクラッチ領域に書き込まれた命令の系列から識別しなけ ればならない、けれども、命令の系列は、実行時までは存在しないのて、プログ ラムの普通のプリントアウトやダンプからは欠けている。
オリジナル・プログラム中の全ての機械コードの位置決めする問題があるとき、 そのコードは実行時には解釈されている。インタープワタ−の翻訳プロセスは、 アッセンプワ言語翻訳機構と似ているが、インタープリタ−・プログラム中の多 数の命令が各機械命令を翻訳するために実行されなければならないという事実の 故に、実行時における解釈は翻訳されるコードの実行よりは約2桁も低速である 。
不完全な翻訳を用いることを可能にするために、新しい命令アーキテクチャを用 いてオリジナル・プログラムをCPUにポートする時にインタープリタ−・プロ グラム、オリジナル・プログラムのコピー、及びアドレス変換情報が、翻訳され るコードと共に提供される。翻訳されるコードの実行が、翻訳されないコードへ のオリジナル・プログラム中の実行転送に対応する点に達したとき、CPUは、 代わりに実行をインタープリタ−・プログラムに転送して、オリジナル・プログ ラム中の翻訳されないコードを解釈させる。インタープリタ−は、各々の翻訳さ れない機械命令を新しいアーキテクチャのための1M1以上の機械命令に次々に 翻訳し、それらを実行する。インタープリタ−は、アドレス変換情報を用いて、 翻訳されたプログラムに実行を適時に転送する。しかし、翻訳されていないコー ドの存在は、命令の殆ど全てが実行時より前に位置決めされ翻訳されることが出 来なければ、動作に相当の衝撃を与える。
3コL皇」L! 要約すると、本発明の重要な面に従って、フローグラフを自動的に生成し、その フローグラフを用いてプログラムを解析して該フローグラフ中の命令のブロック に関する情報を設け、それから該フローグラフと命令のブロックに関する情報と を用いて、翻訳された命令を生成することによって、プログラムは翻訳される。
動作のために最適化された翻訳されたコードを生成するために、フローグラフ中 の命令のブロックは、翻訳された命令の対応するプo7りに変換され、翻訳され ていない命令の解釈時のインタープリタ−からのリターンは、各ブロック中の第 1命令である入口点を遮断させられる。翻訳されたコードは、翻訳されるすべて の命令の挙動ではな(て各ブロックの機能を再生させることによって、最適化さ れる。
翻訳されるべきプログラムの長さに応じて、オリジナル・プログラム中の命令は 、フローグラフが生成されろときに1回だけ解読される必要がある。フローグラ フが生成されるときに命令を中間コード表示に変換することによって、解析又は 翻訳のために再び解読を行う必要は無くなる。
命令のプロ、りに関する情報の収集及び記憶と、フローグラフ中の経路における 情報の一貫性についての検査とを制御するために、フローグラフはプログラムの 解析時に用いられる。各ブロックについての情報は、例えば、レジスター使用、 スタック使用、条件コード使用、リターン・マスク使用、及び非標準リターンの 発生を含む、この情報は、入来経路全部では釣り合わないスタック深さ、入来経 路全部にわたってブロックに調和しないリターン・マスク、非初期化レジスター 又は条件コードの使用、ロングワード境界でのスタックの整合の失敗、手順パラ メーターへのコールバックなどの非標準リターン、等々の、あり得るエラーや翻 訳上の困難を検出するために使われる。
本発明の他の面によると、分析中に発見されたエラーは、そのエラーに関連する 命令の経路及びブロックが指示されているエラー固有のフローグラフを生成する ことによって、報告される。そのエラー固有フローグラフは、例えば、拡大され たブロックと、そのエラーが検出された経路に沿って強調されたアークとを有す る。
Δ1匡」1」螢肢皿 本発明の他の目的及び利点は、以下の詳細な説明を続み、図面を参照すれば明ら かとなろうや 図面において、図1は、特に複合命令のために構成されたパイプライン処理装置 を有するCl5Cデジタルコンピユーターシステムのブロック図である。
図2は、数個の命令について真なるタスクを同時に実行しているときに図1のパ イプライン処理装置の状態を示す図である。
図3は、複合命令セットからの可変長命令の好ましいフォーマットを示す図であ る。
図5は、指定子の第1バイト中のモード情報の解読を示す表である。
図6は、RISCデジタルコンビエータ−システムのブロック図である。
図7は、RISC命令セット中の命令についての好ましい命令フォーマットのブ ロック図である。
図8は、オリジナルCl5Cプログラムを、R15e命令を有する翻訳プログラ ムに翻訳するためのアナライザー及びRISCコードジェネレータを育する翻訳 機構のブロック図である。
図9は、オリジナルCl5Cプログラムの部分的RXSC翻訳と、オリジナルc rscプログラムの翻訳されていない部分を翻訳するためのインタープリタとの 間で実行が共有されるときのRISCコンピューターからのデータ及びプログラ ム入力とデータ出力とを示すブロック図である。
rgJIOは、図9で用いられるインタープリタを呼び出す図8のRISCコー ド・ジェネレーターにおけるステップのフローチャートである。
図11は、図9に示されている部分的RISC翻訳と実行が共有されるときのイ ンタープリタ及びその動作のフローチャートである。
図12は、実行がインタープリタから部分的RTSC翻訳へ渡されるときを決定 するアドレス検査ルーチンのフローチャートである。
図13は、図8の翻訳機構の動作のフローチャートである。
図14は、図8の翻訳機構により生成され、翻訳されたオリジナルCl5Cプロ グラムのメモリー・マツプを包含している要約ページである。
図15は、オリジナルcrscプログラムのフローグラフである。
図16は、オリジナルCl5Cプログラムのエラー固有フローグラフである。
図17は、機械コードからのフローグラフの自動的生成のための翻訳機構のアナ ライザーにより用いられるデータ構造のブロック図である。
図18は、機械コードからのフローグラフの自動的生成のためのアナライザーに より用いられる手順のフローチャートである。
図19は、機械コードからのフローグラフの自動生成時に実行転送命令から経路 を調査するためのアナライザーにより用いられる手順のフローチャートである。
図20は、プログラム実行前に、計算された宛先アドレスの値を発見する試みで 逆方向シンポリンク実行を行うためにアナライザーにより用いられる手順のフロ ーチャートである。
図21は、一定変位と、指定された汎用レジスターと、直接又は間接メモリー・ アクセスの指示とを含むことのある宛先アドレスについてのシンポリンク表式に おける項目の固定フォーマット表式である。
図22は、一定変位、指定された汎用rベース」レジスター、指定された汎用r インデックス」レジスター、一定オフセット、及び直接又は間接メモリー・アク セスの指示を包含することのある宛先アドレスについてのシンボリック表式にお ける項目の固定フォーマット表式である。
破線で示されている実行転送経路を含む間接プログラム・ループを示す主プログ ラム・ルーチンのフローグラフの概略表現である。
図24は、与えられたシンポリンク表式の値を発見する試みで基本ブロックを探 すための逆方向シンボリック実行に用いられる手順のフローチャートである。
図25は、修正された表式が、命令実行直後に与えられたシンボリック表式が表 現するのと同じ値を命令レベル実行直前にプログラム実行時に表現することとな るようにシンボリック表式を修正するために、与えられたシンボリック表式を命 令を通して逆方向に押し進めるために逆方向シンポリ7り実行に用いられる手順 のフローチャートである。
図26は、シンポリンク表式を命令を通して逆方向に押し進めるのに役立たせる ために可能な各命令オプコードについて予め決定されることの出来るデータのた めのフォーマットである。
図27は、命令を通してのシンポリンク表式の押し進めによって、コンピュータ ー・プログラム又はコンビエータ−のオペレーティング・システム中の明確なア ドレスを表す形式に該表式が変換されたか否か、そして、そのアドレスがプログ ラム実行の転送についての許容可能な宛先を表すか否か検査するためのルーチン のフローチャートである。
図28及び図29は、共に、プログラム・メモリーの未知コード領域における、 もっともらしいプログラム・コードを発見するための3つの走査モードを含む手 順のフローチャートを構成する。
図30は、実行ログ・ファイルが、プログラム実行中に解釈された未翻訳プログ ラム・コードの記憶場所を特定するという利点を伴う、オリジナル・プログラム を繰り返し翻訳し直すことによるプログラム変換及び保守のための一般手順のフ ローチャートである。
図31は、2つの相互に依存するプログラムを交互に翻訳、再翻訳すると共に、 2つのプログラムを容易に合併させ或いは同時に共に翻訳することが出来ない場 合に収斂性について試験するための手順のフローチャートである。
図32は、2つの相互に依存するプログラムのためのイメージ情報ファイルのブ ロック図であって、そのファイル間の繋がりを示す。
図33は、プログラムが交互に翻訳、再翻訳される時に迅速な収斂を得るために 2つの相互に依存するプログラムについての情報ファイル間の繋がりを利用する 手順のフローチャートである。
本発明には、種々の変形や代替形が可能であるが、その特別の実施例が図面に例 示されており、これについて詳細に説明をする。しかし、開示した特別の形に発 明を限定する意図はなく、反対に、本発明は、付属のクレームにより定義された 発明の全ての変形、同等物、及び代替物を包摂するものであることが理解される べきである。
ましい の 細な 本発明の好ましい実施例は、複合命令セット・コンピューター(CI S C) 用のプログラム・コードを縮小命令セット・コンピューター(RISC)用のプ ログラム・コードに翻訳するのに有利に使用される。
最初に図面の図1を参照すると、複合命令セット・デジタル・コンビエータ−2 0が示されており、これは、中央処理装置21、入出力装置22、及び主メモリ ー23を含む。
データと、データを処理するための命令との両方が主メモリー23内のアドレス 指定可能な記憶場所に記憶される。命令は、CPUにより実行されるべき動作を 符号化された形で指定するオペレージ四ン・コード(オプコード)と、オペラン ドを基地法めするための情報を提供するオペランド指定子とを含む0代表的CT SC命令アーキテクチャでは、各命令の第1バイトはオプコードを包含し、続く バイトはオペランド指定子を包含する。1980年12月23日に発せられたス トレッカー等の米国特許第4,241.397号(これを参照により本書に組み 入れるものとする)に開示されているように、命令は、好ましくは、可変長を有 し、種々の指定子を同じオプコードと共に用いることが出来る。
主メモリー23は、大量の記憶装置を包含しており、従って、ダイナミック・ラ ンダム・アクセス(DRAM)メモリー・チップなどの安価てはあるが比較的に 低速の記憶装置から構成される。CPU21は、主メモリーのアクセス時間より 高速で命令を実行するので、CPUは、比較的に小記憶容量の高速キャッシュ・ メモリー内にデータ及び命令の一部のコピーを維持するメモリー・アクセス装置 24を包含する。普通は、CPUは、自分が必要とするデータ及び命令をメモリ ー・アクセス装置24内のキャッシュ・メモリーから得るが、要求されている命 令又はデータがキャッシュ・メモリー内に発見されないときには、メモリー・ア クセス装置は主メモリー装置23にアクセスしてキャッシュ・メモリーを所要の 命令又はデータで「補充」する。
メモリー・アクセス装置24は、命令に使われる「仮想jアドレスを、主メモリ ー23に用いられる「物理的」アドレスに翻訳するための翻訳パフファーなどの 手段をも包含することが出来る。この技術は、主メモリー23に設けられている よりも多いアドレス指定可能な記憶場所を含む「仮想アドレス空間」をプログラ マ−が参照することを可能にする。従って、プログラマ−は、主メモリー23の 限られた記憶容量による制約を余り受けない。
データへのより高速のアクセスを提供するために、命令は、多ボート・レジスタ ー・ファイル25に含まれる限られた数の汎用レジスターを参照することが出来 る。これらの汎用レジスターのうちの成るものには特別の機能が割り当てられる が、例えば、一つの汎用レジスターは、代表的には「プログラム・カウンタ」と して使われて、ソース・オペランドとして参照されるときに解読される命令のア ドレスを提供するか、又は、宛先オペランドとして参照されるときに解読される べき次の命令のアドレスを指定する。
個々の命令の実行は、それぞれのパイプライン機能装置により実行される複数の サブタスクに分解される。これらのパイプライン機能装置は、メモリーから命令 を取り出すための命令バッファー26と、取り出された命令を解読するための命 令デコーダ27と、ソース・オペランド指定子により識別されるソース・オペラ ンドを取り出すためのオペランド装置28と、ソース・オペランドに対して算術 動作、論理動作及び特殊動作を行って結果を得るための実行装置29と、宛先オ ペランド指定子により識別されるメモリー記憶場所又はレジスターにその結果を 記憶させるためのりタイヤ装置30とを含む。
複合命令セント・デジタル・コンピューター20の好ましい構成に関して、更に 詳しくは、1989年2月3日出願のファイト等の米国特許出願率077307 .347号(参照により本書に組み入れるものとする)の「可変長命令アーキテ クチャにおける複数指定子の解読」を参照することが出来る。
図2を参照すると、デジタル・コンピューター(図1の20)が1サイクル当た り1命令の平均速度で命令を実行する理想的な場合についてのパイプライン機能 装置(図1の26〜30)の状態図が示されている。一般に、パイプライン装置 26〜30のそれぞれにより各命令の実行時に以下のステップ、即ち、命令取り 出し、命令解読、オペランド取り出し、実行、及び結果記憶、が行われる。
各機能単位がそのサブタスクを実行するのには1サイクルが最短時間である。
例えば、メモリー・アクセス装置が「補充」動作を行っているときなど、与えら れた機能装置がメモリー・アクセス装置(図1の24)における競合に起因して 単一のサイクルでそのサブタスクを実行できないことがある。更に、特別に複雑 な命令を実行するとき、与えられた機能装置は、命令の複雑さに起因してそのサ ブタスクを実行するのに1サイクルより多くを必要とすることがある。いずれに せよ、専用ハードウェア段を用いることにより、ステップ同士をパイプライン動 作で成る程度重ね合わせることが出来、これにより総命令処理量を増大させるこ とが出来る。
図3は、図1に示されている中央処理装置 (CPU)により処理されることの 出来る代表的な命令40を示す、この命令は、デジタル・エクイプメント・コー ポレーシ璽ンの、レヴイ及びエンクハウス・ジュニアの「コンビエータ−・プロ グラミング びアーキテクチャ、■AX−11J (1980)に記載されてい るVAX”可変長命令アーキテクチャに対応するが、それを参照により本書に組 み込むものとする。命令40は、1又は2バイトから成るオペレージロン・コー ド41を含む、第1バイト42が16進法FDの値を有するならば、それはダブ ルバイト・オペレージシン・コードとして認識される。さもなければ、命令デコ ーダ(図1の27)は、そのオペレーンロン・コードを、単一のバイトだけを含 むものと認識する。命令40は、更に、該オペレージジン・コードに続く6個に 及ぶ指定子を含むことが出来る。
オペレージノン・コードは、何個の指定子が命令に含まれているかを指示する。
与えられたオペレージジン・コードに関連して用いられる指定子は、種々の属性 及び異なる長さを持つことが出来る。特別の指定子の属性は、少なくとも部分的 にはその指定子の第1バイトにおいてアドレス指定モードにより決定される。し かし、指定子の許容可能な属性は時にはオペレージ菅ン・コードによってitさ れる。更に、rg値子アドレス指定と呼ばれる特別の種類のアドレス指定モード については、指定子情報の長さは、その指定子により指定される「データ・タイ プ」によって決まる。
特別の可変長命令が図4に示されている。アッセンプラ表記では、この命令はr ADDL3RO1#4.L“203(R2)Jと書かれる0機械コードでは、こ の命令は包括的に45で示す8バイトを含む、第1バイトは、アフセンブラ簡易 記号rADDL3Jに対応する16道法23のオペレージノン・コードである。
このオペレージシン・コードは、第10ングワード・オペランドを第20ングワ ード・オペランドに加え、そのロングワード結果を宛先に記憶させるべきことを 指示するものである。
このオペレージ覆ン・コードに続いて、16進法50の値を有する「レジスター 指定子Jがある。16進法の5の数字は指定子がレジスター指定子であることを 表示し、16進法の数字0は、指定されたレジスターがCPU内のRO汎用レジ スターであることを示す、従って、レジスター指定子は、第1ソース・オペラン ドが汎用レジスターROの内容であることを示す。
レジスター指定子に続いて、16進法04の値を有する「シ覆−ト・リテラル指 定子」がある、シ替−ト・リテラル指定子は、第2ソース・オペランドについて 4という値を指定する。
ショート・リテラル指定子に続いて、加算動作の宛先を指定するr複合指定子」 の第1バイトがある。16進法の数字Eはrロングワード変位」アドレス指定モ ードを指示し、このモードでは、続く4バイトは、複合指定子により指定される アドレスを得るためにベース・レジスターの内容の値に加算されるべき32ピン ト・アドレス変位と解釈されなければならない、16進法の数時2は、汎用レジ スターR2がベース・レジスターとして使われるべきことを指示する。従って、 複合指定子は、オペランド・コードにより示されるロングワード加算の合計又は 結果が、16進法203の値を汎用レジスターR2の内容に加算することにより 計算されるメモリーのアドレスに格納されるべきことを指定する。
ここで図5に戻ると、ブランチ変位ではないオペランド指定子の第1バイトを解 読するための解読テーブルが示されている。オペランド指定子の第1バイトの最 上位2ピントが共に0であるならば、オペランド指定子は単一の第1バイトから 成り、このバイトの最下位6ビントは「シシート・リテラル」と呼ばれる6ビツ トの値を指定するものとして解釈又は解読される。
オペランド指定子の第1バイトの始めの最上位2ビツトがOでなくて、このバイ トがブランチ変位の一部でないとすれば、このバイトはCPU内の16個の汎用 レジスターRO〜R15の中の指定された1つに関連する、12個の可能なレジ スター・アドレス指定モードの中の特定の1つとして解読される。バイトの最上 位4ビツト(レジスター・モード・フィールドを構成する)はアドレス指定モー ドラ指示するべく解読され、最下位4ピント(汎用レジスター・アドレス・フィ ールドを構成する)は16個の汎用レジスターの中の特定の一つをアドレス指定 するべく使われる。
若しレジスター・モード・フィールドが4という16進法の値を有するならば、 rインデックス・モード」が指定され、このモードでは、レジスター・アドレス ・フィールドによりアドレス指定される汎用レジスターの内容の値に、バイト数 で表したオペランドのサイズ(例えば、バイト、フード、ロングワード、カント ワード又はオクタワード・データ・タイプについて1.2.4.8または16) が乗じられ、和は、直後に続く複合指定子について行われるアドレス計算に項目 として包含される;次のバイトは、16進法の6〜Fの値のレジスター・モード ・フィールドと、複合指定子についてのベース・レジスターをアドレス指定する レジスター・アドレス・フィールドとを持たなければならない。
レジスター・モード・フィールドが16進法の5の値を冑するならば、指定子は 「レジスター指定子」であって、この指定子ではオペランド値はレジスター・ア ドレス・フィールドにより指示される汎用レジスターの中に見出され、或いは、 指定子が命令の宛先についての指定子であるならば、その指定子は、レジスター ・アドレス・フィールドにより指示される汎用レジスターに結果を格納するべき ことを指定する。
レジスター・モード6.7及び8の各々について、指名されたレジスターは、オ ペランドについてのメモリー・アドレスを内蔵する。ソース・オペランドについ ては、オペランド値はこのメモリー・アドレスから読み出され、宛先オペランド については、結果はこのメモリー・アドレスに畜き込まれる。モード6では、指 名されたレジスターはオペランドのアドレスを内蔵する。レジスター・モード7 では、指名された汎用レジスターの内容はアドレスの計算の前に最初にデクリメ ントされる;モード8では、指名された汎用レジスターの内容は、該レジスター がアドレスを計算するのに使われた後にインクリメントされる。レジスター・モ ード9は、レジスター・モード8に似ているが、指名された汎用レジスターの内 容が、オペランド自体ではなくてオペランド・アドレスが見出されることになる メモリー中のアドレスを指定するという点では異なっている。
モード10〜15は、種々の「変位モード」である、変位モードでは、変位値( これは、モード10.12及び14において、バイト、ワード、又はロングワー ドからそれぞれ構成される)が、オペランド・アドレスを得るために、指名ささ れた汎用レジスターの内容に加算される。オペランドはモード11.13及び1 5の場合と同様に決定されるけれども、変位値と汎用レジスターの内容との合計 が、オペランドのアドレスを見出すことの出来るメモリー・アドレスを特定する という点では異なっている。
モード8〜15では、オペランド指定子の第1バイトのレジスター・アドレス・ フィールドは、プログラム・カウンタであるレジスターR15を含む汎用レジス ターのいずれをも指名することが出来る。モード8及び9については、若しこの プログラム・カウンタがアドレス指定されれば、該プログラム・カウンタ自体の 値はインクリメントされ、これによりプログラム実行は、命令ストリーム中に配 置されたオペランド・データ又はオペランド・アドレスを飛び越す、モード8で は、この特別の場合は’!p4t」アドレス指定モードとして知られ、モード9 については、それはr絶対」アドレス指定モードとして知られている。詳しく言 えば、モード8及び9が汎用レジスター0〜14のいずれかについて解読される とき、次の指定子又は次のオペレージロン・コードは、該モードと該汎用レジス ターとを指名するバイトの直後に現れる。しかし、!p値モードについては、! p値データの数個のバイトが現れ、そのバイトの数は指定子のデータ・タイプに よって決まVAX”可変長命令の多様性及び複雑さの故に、図1のデジタル・コ ンピューター20は、1サイクル当たりにIVAX”可変長命令が実行されると いう理想に近い動作を達成するには非常に複雑である。しかし、半導体処理技術 及び命令アーキテクチャにおける近時の進歩により、単純な命令だけを実行する ときには同等の性能を有する単チツプ中央処理装置を製造出来るようになった。
同等の性能を達成するために、いわゆる「縮小命令セット・コンビエータ−J  (RrSC)は単純な命令を、1サイクル当たり1命令を実質的に上回る速度で 実行する。この性能は、全ての算術/論理動作がレジスターからレジスターへと 行われなければならないという要求を課すことによって、最小限のハードウェア 複雑さで得られる。また、複雑なメモリー・アクセスは許容されない;全てのメ モリー・アクセスはレジスター・ロード/格納動作であり、少数の比較的に単純 なアドレス指定モード、即ち、オペランド・アドレスを指定する数個の方法があ るに過ぎない。
命令は僅か1の長さであり、メモリー・アクセスは標準データ幅であり、普通は 整合している。命令実行は、マイクロコーディングとは別の、ダイレクト・ハー ドワイヤド・タイプである。
ここで図6を参照すると、縮小命令セット(RISC)コンビエータ−50のブ ロック図が示されている。RTSCコンビエータ−50は、中央処理装置51、 入出力装置52、及び主メモリー53を包含する。中央処理装置51は、メモリ ー・アクセス装置54、レジスター・ファイル55、及び数個の機能装置を包含 し、それは、命令装置56、アドレス指定装置57、整数及び論理実行装置58 、及び浮動小数点実行装置59を含む、全ての算術/論理動作は、レジスターか らレジスターへと行われるので、実行装置58.59は直接にはメモリー装置5 4にアクセスしない、メモリーからレジスターへのロード動作とレジスターから メモリーへの格納動作とはアドレス指定装置57によって行われる。
1サイクル当たり1を実質的に上回る速度で命令を実行するために、命令装置5 6は、資源が使用可能であるときに少なくとも2個の命令を同時に取り出して解 読することが出来、アドレス指定装置57、整数及び論理実行装置58、及び浮 動小数点実行袋W59は3個の異なる命令を同時に実行することが出来る。例え ば、好ましい実施例では、一つの命令がコラムAからの命令で第2の命令がコラ ムBからの命令であるときには2個の命令を同時に解読し発することが出来る: コラムA コラムB 浮動小数点ロード/格納 整数ロード/格納浮動小数点ブランチ 整数ブランチ SR 図6のRISCコンピューター50に関して、更に詳しくは、上記のリチャード ・L、サイン及びリチャードT、ウィテクの1990年6月29日出願の米国特 許出願第071547,589号、「高性能プロセッサにおけるブランチ予測j を参照することが出来、これを参照により本書に組み入れるものとする。
図7を参照すると、図6のコンピューター50により実行されるRrSC命令セ ットの種々の命令の好ましいフォーマットが示されている。各命令は32ビツト の一定長さを有する。
メモリー命令70は、ビット<31:26>に6ビツト・オフコードを、とフ) <25:21>及び<20:16>に2個の5ピント・レジスター・アドレス・ フィールドRa及びRhを、ビット<15:O>に16ビツト符号付き変位を含 む、この命令は、データをレジスター・ファイルとメモリーとの間で転送し、サ ブルーチン・ジャンプのために、実効アドレスをレジスター・ファイル中のレジ スターにロードするために使われる。変位フィールド<15:O>はバイト・オ フセントである:それは、符号拡張されてレジスターRbの内容に加えられて仮 想アドレスを形成する。この仮想アドレスは、命令によってメモリー・ロード/ 格納アドレス又は結果値として用いられる。
ブランチ命令71は、ビット<31:26>に6ビツト・オフコードを、ビア1 −<25:21>に5ビツト・アドレス・フィールドを、ビット<20 + O >に21ビット符号付きブランチ変位を包含している。変位は、ロングワード・ オフセットとして処理され、それが左に2ビツトシフトされて(ロングワード境 界をアドレス指定するため)、64ビツトに符号拡張されてPC33の更新され た内容に加えられて標的の仮想アドレスを形成する(桁あふれは無視される)。
操作命令は、2つの異なるフォーマット72及び73を有する。フォーマット7 2は3つのレジスター・オペランドを有し、フォーマット73は2つのレジスタ ー・オペランドとリテラルとを有する。1作フォーマットは、整数レジスター操 作を行う命令のために使われ、レジスター・ファイル43に2つのソース・オペ ランドと1つの宛先オペランドを許容する。ソース・オペランドの1つは、リテ ラル定数であることが出来る。ビット−12は、操作命令が2ソース・レジスタ ー操作であるか或いは1ソース・レジスター及びリテラルであるかを定義する。
ビット<31:26>における6ビツト・オフコードに加えて、算術及び論理操 作のために広範な選択肢を許容するために操作フォーマットはビット〈11:5 >に7ビツト機能フィールドを有する。ソース・レジスターRaは、いずれの場 合にもビット<25:21>において指定され、宛先レジスターRcは<4 、  Q>において指定される。ビット12がゼロであれば、ソース・レジスターR bはビン)<20:16>で定義されるが、若しビット12が1であれば、8ビ ツトのゼロ拡張リテラル定数が命令のビット<20:13>によって形成される 。このリテラルは、範囲0−255内の正の整数と解釈され、64ビツトにゼロ 拡張される。
図8は、浮動小数点レジスターから浮動小数点レジスターへの操作を行う命令に ついて用いられる浮動小数点操作命令フォーマット74も示す、浮動小数点操作 命令は、前の様にビット<31:26>に6ビツト・オフコードを包含すると共 に、11ビツト機能フィールドをビット<15:5>に包含する。3つのオペラ ンド・フィールドFa、Fb及びFcがあり、命令により定義された通りに整数 又は浮動小数点オペランドを各々指定するニレシスター13だけがFa、Fb及 びFcにより指定されるが、これらのレジスターは整数又は浮動小数点の値を内 蔵することが出来る。リテラルは支援されない、浮動小数点変換は、浮動小数点 操作フォーマット74のサブセットを使用して、レジスターからレジスターへの 変換操作を行う、Fbオペランドはソースを指定し、F aオペランドはreg  −31(全部ゼロ)であるべきである。
最後の命令フォーマット75は、特権アーキテクチャ・ライブラリー(PAL又 はPLAコード)命令について用いられるが、これは拡張プロセッサ機能を指定 する。これらの命令において6ビツト・オフコードが前の様にビット<31:2 6〉に存在し、26ビツトPALコ一ド機能フィールド<25 : o>は操作 を指定する。PALコード命令についてのソース及び宛先オペランドは、個々の 命令定義において指定される固定レジスターにおいて供給される。
図7の命令フォーマット中の6ビツト・オフコード・フィールド<31:26> は、26即ち64個の異なる命令を符号化することを可能にするに過ぎない、従 って、命令セットは64に限定される。しかし、命令フォーマット72.73及 び74中の「機能」フィールドはビット<31:26>に同じオフコードを有す る命令の変化を許容する。
本発明の好ましい実施例は、図1のCl5Cコンピユーター20用のプログラム を図6のRISCコンピューター50用のプログラムに翻訳するための翻訳機構 に特に関連する。該翻訳機構により提出されなければならない主な困難は、オリ ジナルCl5Cプログラム中の全ての命令を翻訳することが常に可能であるとは 限らないということである。翻訳が常に可能であるとは限らない理由の一つは、 Cl5CアーキテクチヤはCl5Cプログラムが「読み書き」メモリー領域から 実行されることを可能にするのでプログラムが実行中に自己を修正出来ることに ある。しかし、RISCアーキテクチャは、プログラムが「読み書き」メモリー 領域から実行されるべきことを要求する。「読み書き」メモリー領域から実行さ れるべきCl5Cプログラム命令は、Cl5C命令に翻訳され得ないけれども、 実行速度を酷く犠牲にして、実行時にRISCコンピューターで解釈されること が出来る。幸いなことに、実行中に自己を修正するCl5Cプログラムは非常に 稀である。!P4えば「読み書き」メモリー領域にプログラム命令を有する多く のCl5Cプログラムは、実際には自己を修正しない。
ciscプログラムの全部を翻訳出来ない代表的な理由は、翻訳されるべきCl 5C命令の全部を発見するのが困難であることである。C[SCプログラムを走 らせるには、該プログラムの開始アドレスだけを知ればよい、開始アドレスから 始まる命令を分解出来るけれども、Cl5Cプログラムは、普通は、計算された 宛先アドレスを有する「ジャンプ」や「呼出jなどの少なくとも1つの実行転送 命令を包含している。宛先アドレスは、実行時に容易に計算されるけれども、例 えば宛先アドレスはプログラム入力データに基づいて計算されるので翻訳時には 完全に不定である。しかし、代表的な場合には、本発明は、計算された宛先アド レスの大半を翻訳時に分解するための技術を提供する。
v!J8を参照すると、CCl5C−RISC訳機構80と、それに付随する入 力及び出力イメージ及びデータ構造とのブロック図が示されている。翻訳機構8 0は、Cl5C命令を有するオリジナル・プログラム81を受け取って、RIS C命令を有する対応する翻訳済みプログラム82を生成する。H訳済みプログラ ム82と関連して、翻訳機構80はアドレス変換情報96を生成するが、これは 、オリジナル・プログラム中のCl5C命令のアドレスを翻訳済みプログラム中 のRISC命令のアドレスに関係付ける。
RISCコード生成!83に加えて、翻訳機構80はプログラム・アナライザー 84を包含しており、これは、オリジナル・プログラム81を分析して命令をデ ータから分離し、RISCコード最適化のためにプログラムの流れを追跡し、R ISC命令アーキテクチャによって再生され得ない挙動を指定するCl5C命令 を検出する。
プログラム・アナライザー84は、オリジナル・プログラム中の命令の位置を発 見するために補足人力85を参照することが出来る。補足人力85は、例えば、 数個の成分イメージを互いに結合させることによりオリジナル・プログラム81 が作られたときに生成されたリンカ−・マツプ・ファイル86を含むことが出来 る。この場合、リンカ−・マツプは、オリジナル・プログラム中の命令への入口 点を特定し、その入口点の名称を提供する。これらの名称は、翻訳機構のメツセ ージ及びその他の出力をより読みやすくするのに役立つ。
補足人力85は、オリジナル・プログラム中の頻繁に実行される命令を特定する ために生成されることのあるプログラム・カウンタ(PC)サンプリング・ヒス トグラム・ファイル87を含むことが出来る。PCサンプリング・ヒストグラム ・ファイルが使用可能であるならば、プログラム・アナライザーは、ゼロより大 きいサンプリング周波数を有する全てのプログラム・カウンタ・アドレス、即ち 、PCサンプリング・ヒストグラム・ファイルが生成された時に実行された命令 に対応する全てのプログラム・カウンタ・アドレス、においてCl5C命令を翻 訳する試みが行われることを保証するために、それを用いることが出来る。
補足人力85は、先の翻訳では翻訳されなかったけれども、先に翻訳されたプロ グラムの実行中にインタープリタによって解釈された命令のオリジナル・プログ ラムにおけるアドレスを内蔵する実行ログ・ファイル88をも包含することが出 来る0図9及び11に関連して以下に更に説明するように、その実行ログ・ファ イルは、例えば、先に翻訳されていなかうたコードの解釈中に生成され、実行を その未翻訳コードへ転送する命令のオリジナル・プログラムにおける原点アドレ スの対と、その未翻訳コードが位置するオリジナル・プログラム中の宛先アドレ スとを包含している。翻訳機構は、原点及び宛先アドレスの対を特定する情報を 使って、オリジナル・プログラム中の前に翻訳されていなかった命令を翻訳する 。原点アドレスは、オリジナル・プログラムの前の翻訳の際には発見されなかっ た実行経路を特定するために使われる。以下に説明するように、これらの実行経 路の特定により、プログラム・アナライザー84は、前に翻訳されたプログラム の実行又はオリジナル・プログラムの未翻訳部分の解釈の際に取られなかった付 加的な実行経路を発見できることとなる。好ましくは、実行から再翻訳への情報 のこのフィードバックは、翻訳されたプログラムの各々の実行の後に行われるの で、オリジナル・プログラム中の命令の実際上全部が結局は位置決めされて翻訳 される。
プログラム・アナライザー84は、エラー、警告及び情報メツセージ90を含む 検査出力89と;発見された命令の領域と入口点の位置とを特定するオリジナル ・プログラム81のメモリー・マツプを示す要約ページ91と;オリジナル・プ ログラム81の翻訳された部分のフローチャートを定義するフローグラフ言語フ ァイル92と:オリジナル・プログラムのための出力イメージ情報ファイル93 とをも生成する。
イメージ情報ファイルは、イメージ中のあらかじめ定義された入口点のインター フェース特徴又は性質についての情報を内蔵する。翻訳機構80は、オリジナル ・プログラムが最初に翻訳されるときにオリジナル・プログラム81についての 出力イメージ情報ファイル89を生成する。再翻訳時に、オリジナル・プログラ ムについての情報入力ファイルは入力ファイル94として使われることが出来て 、付加的な命令と、プログラム・アナライザー84により発見された実行転送経 路とに基づいて再翻訳時に更新されることになる。
イメージ情報ファイルは、他のイメージへの参照を分解すると共に適切な連係( リンケージ)を生成するためにプログラム・アナライザー84により使われる。
例えば、オリジナル・プログラム81がライブラリー・ルーチンを呼び出すとき 、補足人力85は、これらの共有されるライブラリー・ルーチンについてのイメ ージ情報ファイル95を包含しているべきである。好ましくは、イメージ情報フ ァイルは、情報を付加したり訂正したりするためにプログラマ−が容易に編集す ることのできるASCIIファイルである。
ここで図9に転じると、翻訳プログラム82をRISCコンビエータ−50で実 行するときに使われるシメージ及びデータ・ファイルのブロック図が示されてい る。翻訳されたプログラム82と、それに付随するアドレス変換情報96とに加 えて、RISCコンピューター50は、入力として、オリジナル・プログラム8 1のコピーと、Cl5C41令を解釈するためにRISCコードに書かれている インタープリタ101と、オリジナル・プログラム及び翻訳済みプログラムのた めのデータ入力102とを使う、インタープリタ−101は、オリジナル・プロ グラム81中の未翻訳命令を解釈するために要求されるので、オリジナル・プロ グラム81はインタープリタ−のためのデータ入力として役立つ、アドレス変換 情報96もインタープリタ−101へのデータ入力として役立ち、インタープリ タ−は、適切な時に実行を翻訳済みプログラムへ戻すときに、この情報を使う。
R15Cコンピユーターからのデータ出力は、オリジナル・プログラム及び翻訳 済みプログラムからの出力データ103と、実効ログ・ファイル88とを包含し ており、これはインタープリタ−からの出力データである。
ここで図10に転じると、Cl5C命令が実行時より前に翻訳されないときにイ ンタープリタ−への呼出を生成するRISCコード生成ra83におけるステッ プのフローチャートが示されている。上記したように、r読み書き」メモリー領 域中のコードは普通は翻訳されるべきではないが、それは、実行中にプログラム がそのコードを修正するかもしれないからである。しかし、ユーザーは、プログ ラムが実行中にコードを修正しないと信じるかもしれないので、ユーザーは、コ ード解釈に伴う厳しい性能低下を避けるために翻訳された読み書きメモリー中に コードを持つことを希望することが出来る。従って、ユーザーはソフトウェア・ オーバーライド・スイッチをセットすることが出来、ステップ111においてR ISCコード生成器83は、オーバーライド・スイッチを試験して、「読み書き 」メモリー領域内のCl5C命令を翻訳するべきか否かを決定する。若しオーバ ーライド・スイッチがセットされなければ、ステップ112においてRISCコ ード生成!S83は、Cl5C命令が読み書きメモリー領域にあるか否かチェッ クする。この場合、該コード生成器はCl5C命令が解釈されなければならない ことをユーザーに警告するメツセージをステップ113で発し、従って性能低下 が生じる0次にステップ114においてコード生成器はRISCコードを生成し てインタープリタ−を呼出し、crsc命令アドレスをパラメーターとして通す 。
最後に、ステップ115において、インタープリタ−への呼出時に解釈されるC l5C命令を翻訳するのを避けるために、コード生成器は、「読み書き」メモリ ー領域に見出される次のcrsc命令へ進む。
RISCコード生成器は、オリジナル・プログラム中に位置決めされることの出 来ないcrsc命令についてのコードを生成すること出来ない、しかし、RIS Cコード生成器は、未分解の計算済み宛先アドレスを有するオリジナル・プログ ラム中の実行転送命令を認識することが出来、従って、実行時に未翻訳Cl5C 命令を解釈するためにインタープリタ−を呼び出すRISCコードを生成するこ とが出来る。ステップ116においてRISCコード生成器は、Cl5C命令が 未分解の計算済み宛先アドレスを有するか否かチェックする。若しそうならば、 ステップ117において未翻訳crsc命令を解釈するためにインタープリタ− が呼び出されなければならないことがユーザーに警告され、ステップ118にお いて、宛先アドレスを計算してインタープリタ−を呼び出してCl5C実行転送 命令のアドレスと計算された宛先アドレスとをパラメーターとして渡すためにに コード生成器はRISCコードを生成する。
ステップ119において、コード生成器は、未分解の計算済み宛先アドレスを持 たないCl5C命令についてのRISCコードを生成する。これは、Cl5C命 令を、Cl5C命令と同じ効果を有する1つ以上のRISC命令に翻訳すること によって行われる。このコード翻訳は、実行転送とプログラムにおけるレジスタ ー使用とについてのプログラム・アナライザー(図8の84)からの情報を使う ことによって、より効率的にされる。RISCコンビエータ−(図6の50)は 、例えば、好ましくはサブルーチン呼出と、指定された汎用レジスター中のリタ ーン・アドレスを参照するリターン命令とを有し、RISCコンピューターは多 数の汎用レジスターを提供する。従って、crscサブルーチン呼出命令とリタ ーン命令とを、代わりにレジスターを使うことが出来る場合にスタック操作をエ ミユレートするRISC命令に翻訳するのは非能率的である。
プログラム・カウンタを直接にソース・オペランドとして参照する変則的なCl 5C命令の場合がある。RISCコンピューターの好ましい構成では、プログラ ム・カウンタはソース・オペランドとして直接参照されることは出来ないけれど も、サブルーチン呼出命令により提供されるリターン・アドレスをデクリメント することによりプログラム・カウンタ値を計算することが出来る。しかし、この 場合のプログラム・カウンタ値は、RISCコードに参照されるRISCコンピ ューターのプログラム・カウンタであって、Cl5Cコードに参照されるCl5 Cコンピユーターのプログラム・カウンタではない、Cl5Cプログラム・カウ ンタに対応する定常的に変化する値を汎用レジスター中に維持するために過剰な 量のオーバーヘッドが必要とされることになろう、従って、プログラム・アナラ イザー(図8の84)は、プログラムにおける相対的ジャンプに関して実行転送 のためにプログラム・カウンタへの参照を分解しようと試みるが、他の目的のた めにプログラム・カウンタの値を使うコードを翻訳しようとは試みない。
ここで図11に転じると、インタープリタ−と、翻訳されたプログラムの実行と の相互作用とのフローチャートが示されている。ステップ131において、翻訳 されたプログラム82(又は、翻訳されたプログラムにより呼び出されるオペレ ーティング・システム・ルーチン)中の命令は、インタープリタ−が呼び出され るまで実行される0図示のように、インタープリタ−は、計算された宛先アドレ スにおけるCl5C命令を解釈するために呼び出されたときには第1人口点13 2に入れられ、メモリーの「読み書き」領域におけるCl5C命令を解釈するた めに呼び出されたときには第2の入口点133に入れられる。
計算された宛先アドレスは、必ずしもオリジナル・プログラムの未翻訳部分にあ るとは限らない、従って、ステップ134において、実行がインタープリタ−で 継続するべきか否か、或いは実行は翻訳されたプログラム中の入口点又はその他 の何処かに戻るべきか否かを決定するために、計算されたアドレスがチェックさ れる。
計算された宛先アドレスがオリジナル・プログラム中にあるが、翻訳されたプロ グラム中の入口点には対応しないときには、宛先アドレスを有する実行転送命令 のアドレスと共に宛先アドレスを実行ログ・ファイル(図8の88)にログする ことが望ましい、これはステップ135で行われる。再翻訳時に、プログラム・ アナライザー(図8の84)は、実行ログ・ファイル中の情報を読んで、計算さ れた宛先アドレスが翻訳されたCl5C命令に対応しない場合については未翻訳 コードを位置決めし、計算された宛先アドレスが翻訳されたCl5C命令には対 応するけれども翻訳されたプログラム中の入口点には対応しない場合については 翻訳されたプログラム中の新しい実行転送経路を特定する。
ステップ136において、インタープリタ−はオリジナル・プログラム中のアド レスにおけるCl5C命令を解釈する。RISCコンビエータ−中の汎用レジス ターが、Cl5Cコンピユーター中の対応するレジスターの内容を再生するため に割り振られる0割り振られたレジスターのこのセットは、ciscコンピュー ターの状態のモデルを定義する。インタープリタ−・プログラムは、Cl5C命 令のオプコードを読んで、テーブル探索を行って、解読するべき指定子の数と該 オプコードについてのプログラム・ルーチンのアドレスとを決定する。その後、 インタープリタ−は各指定子を解読する。リテラル及びレジスター・ソース・オ ペランドが、ソース・オペランド・レジスターとして割り振られた汎用レジスタ ーへ転送される。複合指定子が解読され、指定されたオペランドがメモリーから 取り出されて、ソース・オペランド・レジスターとして割り振られた汎用レジス ターへ転送される。その後、該オプコードについてのプログラム・ルーチンが実 行される。最後に、宛先指定子が解読され、結果が指定された宛先へ転送される 。
ステップ137において、オリジナル・プログラム中の次のCl5C命令のアド レスが計算される。この計算は、ステップ136で解釈された命令に基づく。
前の命令が実行を転送しなければ次のCl5C命令が前のCl5C命令に続き、 その場合には次のcrsc命令のアドレスは前の命令の宛先アドレスである。
ステップ138において、実行がインタープリタ−において継続するべきか否か 、或いは実行は翻訳されたプログラム中の入口点又はその他の何処かに戻るべき か否かを決定するために、計算されたアドレスがチJ、7りされる。インタープ リタ−における実行はステップ136で継続する。また、ステップ136は入口 点 133からの最初のステップである。
ここで図12に転じると、図11のステップ134及び138に用いられるアド レス・チェック・ルーチンのフローチャートが示されている。ステップ141に おいて、計算されたアドレスは、それがオリジナル・プログラム中にあるか否か を決定するために、オリジナル・プログラムの開始アドレス及び終了アドレスと 比較される。若し宛先アドレスがオリジナル・プログラムの外にあれば、計算さ れた宛先アドレスは、例えば、Cl5Cコンピユーター(図1の20)のオペレ ーティング・システムのためのオペレーティング・システム・ルーチンの入口点 であり得る。RISCコンピューター(図6の50)のオペレーティング・シス テムは、対応するルーチンを持つことも持たないこともある。従って、ステップ 142において、計算された宛先アドレスは、例えば、RISCオペレーティン グ・システム中に対応する入口点を有するCl5C宛先アドレスのテーブルにお ける榛常によって妥当性検査される。若し計算された宛先アドレスが妥当でなけ れば、エラーが報告され、実行はステップ143で終了する。さもなければ、ス テップ144において、実行は、計算された宛先アドレスに対応するRISCオ ペレーティング・システムの入口点へ転送される。
計算された宛先アドレスがオリジナル・プログラム中にあるとステップ1.41 が判定したときには、計算された宛先がオリジナル・プログラム中の翻訳済みC l5C命令に対応することがあり得る。しかし、この場合でも、最適のRISC コードを生成するために個々の命令ではなくてCl5C命令のブロックを翻訳機 構が翻訳出来るように、Cl5Cプログラムが成る予め定義された入口点だけを 有すると翻訳が仮定することが望ましいかもしれないので、Cl5C命令を解釈 するのが望ましいであろう、いずれにせよ、若し実行が常にインタープリタ−か ら翻訳されたプログラムへ戻るべきならば、インタープリタ−は、crsc命令 アドレスと、翻訳されたプログラム中の対応する入口点との間の対応関係を知ら なければならない、この対応関係は、翻訳されたプログラムに関連するアドレス 変換情報(図8の96)により与えられる。好ましくは、このアドレス変換情報 は、Cl5Cアドレスと、翻訳されたプログラム中の対応する入口点との変換テ ーブルにより与えられる。従って、ステップ145において、インタープリタ− は、例えば、変換テーブルにおける探索によって、計算された宛先アドレスが翻 訳されたプログラム中の入口点に対応するか否かチェックする。計算された宛先 アドレスが翻訳されたプログラム中の入口点に対応するときには、インタープリ タ−はアドレス変換情報を使って、例えば、対応するRISC入口点アドレスを 変換テーブルから読み出すことによって、計算されたCl5Cアドレスをステッ プ146においてRrSC入口点アドレスに変換する。ステップ147において 、実行は、翻訳されたプログラム中の入口点へ戻る。さもなければ、ステップ1 48において、実行はインタープリタ−へ戻る。
ここで図13へ転じると、翻訳機構80により実行されるステップのフローチャ ートが示されている。第1ステツプ161において、オリジナル・プログラムと 補足入力ファイルとがメモリーに読み込まれる0次にステップ162において、 翻訳機構はオリジナル・プログラムの入口点を探す、これについては、図14に 示されているオリジナル・プログラム構成の特別の例を参照して以下に更に説明 をする。
ステップ163において、オリジナル・プログラム中の命令を位置決めし、該プ ログラムのフローグラフを生成するために、翻訳機構は入口点からの実行の筋道 をたどる。該フローグラフは、命令の「基本ブロック」と、基本ブロックを相互 に結合させる実行経路とを特定する。各基本ブロックは、該基本ブロックの始め に単一の既知の入口点を有する隣接する命令の系列である。実行は基本ブロック の始めにだけ転送され、実行は基本ブロックの終わりからだけ転送される。フロ ーグラフの生成について、図18及び19を参照して以下に更に説明をする。
ステップ164において、翻訳機構は、もっともらしいコード(plauSib lecode )をめてオリジナル・プログラムを走査する。この様な走査の結 果は、翻訳機構により位置決めされる命令の数との比較のために、オリジナル・ プログラム中のもっともらしい命令の数を定めるのに役立つ、この比較の結果は 、例えば、既知のコードのバイト数を、既知コードのバイト数と、もっともらし いコードのバイト数との和で除して得た値の100倍として計算される「発見さ れたコードのパーセンテージ」の見積もりである。この見積もりは、オリジナル ・プログラムのための又は翻訳機構の動作を監視又は増大させるためのボーティ ング戦略を選ぶ際にシステム・アナリストにより使用されることが出来る。若し 翻訳機構が命令の高い割合を翻訳出来なければ、システム・アナリストは、幾つ かのテスト・ケースを翻訳済みプログラム上で走らせて、実行から再翻訳への情 報のフィードバックを使用して、翻訳済みプログラムを一般使用のために解放す る前に未翻訳コードの指示された見積もりを減少させることが出来る。最後の手 段として、システム・アナリストは、見積もりを確認して、翻訳済みプログラム を一般使用のために解放するべきか、又は未翻訳命令を内蔵すると考えられるも っともらしいコードを翻訳するように翻訳機構に指令するべきか判断しようとし て、オリジナル・プログラマ−により文書を探すか又はもっともらしい命令を内 蔵すると指示されたアドレス位置のコードを検査しなければならないことがある 。もっともらしいコードをめて走査する好ましい方法について、図29及び29 を参照して以下に更に説明をする。
ステップ165において、代表的プログラミング慣習及び標準的規則からの偏差 により指示される可能なエラーを発見するためにフローグラフが分析される。
例えば、代表的プログラムにおいて、どれほどの数の他のデータ項目が押されて 介在する命令によりスタックからポツプ・オフされるかに関わらず、データ項目 が、後にポンプ・オフされ得るようにスタック上に押される。若しブツシュの数 が介在する命令におけるポツプの数を相殺しなければ、介在するブツシュ及びポ ツプ命令の不適切なプログラミングによりエラーが引き起こされることになろう 。
若し介在する命令が、分岐して、間のノードで再結合する別々の経路を含んでい て、不適切なプログラミングが該経路の一つで発生したならば、不適切なプログ ラミングは、その2経路が中間のノードで結合するときに計算されたスタック深 度を該2経路について異ならしめる。若しノードがR3Bサブルーチン・リター ン命令であるならば、これは特にエラーを生じさせそうである1、従って、フロ ーグラフの助けで実行されるエラー・チェックの1つは、オリジナル・プログラ ムの主入口点からのすべての経路でのスタック深度を計算し、計算されたスタッ ク深度が、これらの経路が再結合するときに同じであるか否かをチェックするこ とである。若しそうでなければ、翻訳機構は「スタック深度はVA−%Xで全て の入来経路で釣り合わないJという警告メツセージを発するが、ここでVAはオ リジナル・プログラム中のノードの仮想アドレスである。
フローグラフは、Cl5C命令アーキテクチヤの代表的プログラミング規則に従 うか否かについても解析される。VAX”にアーキテクチ+については、例えば 、リターン時にどのレジスターがロードするべきかを指示する手順呼出(CAL LS及びCALLG命令)と関連してrリターン・マスク」が使われる。若しリ ターン・マスクがリターン命令への経路に依存して異なるならば、おそらくプロ グラミング・エラーがあった。翻訳機構は、rリターン・マスクは全ての入来経 路VA≧%Xで釣り合わない」という警告を発する。また、異なるリターン・マ スつて実行されることのあるRET命令が発見されたならば、その命令はインタ ープリタ−への呼出として翻訳されなければならないので、インタープリタ−は リターン・マスクを検査して、リターン時にロードするべき特定のレジスターを 決定する。
手順呼出に関連する他の呼出規則は、呼出ルーチンによりセットされることのあ るレジスター値又は条件コードを用いるのではなくて、レジスター及び条件コー ド・ビットが、その手順で使われる前に該手順によりセントされなければならな いということである。この呼出規則からの逸脱が発見されたならば、翻訳機能は 「呼出入口に未初期化変数があり得るVA−%X:%S」という警告を発する。
このメツセージ中のr%SJは、発見されたあり得る未初期化変数のリストを表 す。VAX”命令アーキテクチャの符号解釈規則からの他の逸脱は、ロングワー ド境界でスタックを整合させ擾なうこと(これはRISCコードについて厳しい 動作劣化を引き起こす)、JSBから戻るべきRET命令の使用、CALLS又 はCALLGから戻るべきR3B命令の使用を含む、翻訳機構は、これらの逸脱 についてフローグラフを分析し、特定の逸脱と、対応するアドレスとを特定する 警告メツセージを発する。
フローグラフの所要検索量を減らすために、あり得るエラーについてのフローグ ラフの分析は、各基本ブロックにおいて使われる資源の伝播も行う、各基本ブロ ックは、スタック、汎用レジスター、及び条件コードなどの種々の資源を使う。
サブルーチンの挙動を推定するために、その資源使用は、その呼出ルーチンへ伝 播され戻される。この情報は、CALLS又はCALLG命令により呼び出され るサブルーチンで使われるレジスターのセツティングについての検索を終わらせ るために使われると共に、この情報は、後に、RISC機械コード生成時に(ス テップ168)、決して使われない条件コード又はレジスター値の不要な生成を 避けるためにも使われる。更に、一貫性チェックは、基本ブロックのための資源 を比較することによって、実行されることが出来る0例えば、「リターン・マス ク」警告は、基本ブロックが2個以上の先行基本ブロックを有すると共にその先 行基本ブロックについてのリターン・マスクが異なるときに生成され、「スタッ ク深度」警告は、そのスタック深度変化が異なる2個以上の先行基本ブロックを をするときに発せられる。基本ブロックの全部にわたる最終走査は、ロングワー ド境界でスタックを整合させ損なうこと(即ち、4バイトで割り切れない基本ブ ロックについてのスタック変化)、JSBから戻るべきRET*令の使用、及び 、CALLS又はCALLGから戻るべきR3B命令の使用をむきだしにするた めに使われる。
ステップ166において、各基本ブロックで使われる資源に関する情報を使って 、オリジナル・プログラムについてのイメージ情報ファイルが作られる。イメー ジ情報ファイルは、例えば、イメージ・ヘッダから成り、これはイメージ名と、 記述されるイメージのバージボンとを特定し、これに続いてイメージ特性レコー ドの系列があり(ライン当たり1つ)、その各々は特別の特性をそのイメージに おけるオフセントに付する。各特性レコードは、イメージオフセットから成り、 それに続いて特性名があり、随意に、これに続いて属性値のコンマ区切りリスト がある#I属性値、特性に固有のものである。イメージ・オフセットは、特性が 適用されるイメージ中のオフセットの表示である。それは、記号(これは他のイ メージ情報ファイル・レコードにより定義され得る)+/−1.6進法オフセン ト値から成る。記号名又はオフセット値(両方ではない)を省略することが出来 る。
特性及びその定義された属性は好ましくは、下記のものを含む。
インターフェース グ・システム支援を指定する。
jIlpentry 記号名 JMP入口点及び名称を定義する。
callback パラメータ一番号 手順パラメーターへのCALLを定義す る。
ca 11 an try 記号名 CALL入口点及び名称を定義する。
casel imi t 整数 ケースの最大数を指定する。
delta sp 整数 ルーチンによりスタック・ポインタにおける変化を指 定する。
image a別 イメージ情報ファイルが記述するイメージを特定する。
四ρback パラメータ一番号 手順パラメーターへのJMPを定義する。
jsbentry 記号名 JSB入口点及び名称を定義する。
no 5tandard return 標準リターンを指定しない。
se ts レジスターの ルーチンによりレジスター・セントを指リスト 定 する。
sy+1bol 記号名 記号名をオフセントに付する。
uses レジスターの ルーチンにより使われるレジスターを指イメージ情報 ファイルの構文の非公式表示を以下に示す。
<WHITESPACE> ニー鯰タブ及びスペースの非ゼロ系列<C0MM>  、夕(<WHITESPACE>) ”。
(<WHITESPACE>) <NL> 、=細断ライン <comment 1ine>:xw ’; ’テキスト<NL><IIF f ile> ニー−<IMAGE ID><IMAGE−<IMAGE ID>  : =璽<WHITESPACE>’imags’<IMAGE NAME>< COMMA><VER3ION><NL> <rMAc;E PROPERTIES>:”<IMAGE 0FFSET>< PROPERTY> (<ATTRIBUTE>。
、、、、)<NL> <IMAGE−〇FF5ET>:== (<SYMBOL>) (’+ ”−’ )(<0FFSET>3 コメント・レコード(“; ゛で始まるライン)は、ファイル中の何処にでも生 じることがあり、翻!!!機構には無視される。
イメージ情報ファイルの例が、”VAXCRTL’という名のイメージについて 、以下に示されている。
:コメント イメージVAXCRTL、” VO5−001”+oooooo jsbent ry ” C3MAIN”+oooooo 使用する ”AP FP SP R 3B″+oooooo セットする ”RORI R2R,3R4R5R6R7 R8R9RIOAP SP N Z V Caこのイメージ情報ファイルは、V AXCRTLに関する以降の情報を翻訳機構に与える。
VAXCRTL+0 (即ち、イメージの始めからゼロのオフセットの、イメー ジ中の最初の記憶場所)は、C3MAINという名のJSM入口としてマークさ れる。この情報から、翻訳機構はJSBが適切であると確認することが出来、V AXCRTL : SCMAINという名をフローグラフに挿入することが出来 る。
VAXCRTL+Oも、VAXT″レジスターAP、FP、及びSPと、VAX ”命令R3Bとを用いるものとしてマークされる。この最後の情報から、翻訳機 構は、呼出イメージにおける呼出し命令の直後に、リターン点におけるVAX命 令を合法的に分解し続けることが出来る。
VAXCRTL+O1’!、VAXTPILtジスI−RO,、、RIO,AP 、及びSPと、VAX条件コード・ビットNZVCとをセットするものとしても マークされる。この情報から、翻訳機構は、例えば、呼出し命令後のROのテス トが、呼出しイメージ事態によりROに入れられた先の値ではなくて、C3MA INによりROに残された値を指すと推論することが出来る。
以下の例は、多数の入口点を有するライブラリー・ファイルLIBRTLについ てのイメージ情報ファイルを示す。
:コメント イメージLIBRTL、VO5−000+oooooo jsbentry L IB$AB ASCEBC+0OOOOOjsbentry LIB$AB E BCASC+000200 jsbentry LIB$AB UPCASE+ 0O0300callentry LIB$ANALYZE 5DES+0O0 4FOcallenLry LIB$5IGNAL+0O04F8 calle ntry LIB$5TOPLIB$5TOP no 5tandard re turn+ooosoo callentry LIB$SIG To RET +0O0508callentry LIB$5KPC図13のステップ167 において、翻訳されたプログラムについてフローグラフ言語ファイルが作られる 。このフローグラフ言語ファイルは、翻訳済みプログラムのフローグラフを描か せるコマンドをレーザー・プリンタに送るフローグラフ゛・プログラムへの入力 として使われることが出来る。フローグラフ・プログラムは、例えば、印刷され るフローグラフのサイズを制御する随意のスケール・パラメーターと、それと結 合されている他のブロックと共にページ上に印刷されるべきコードの特別のブロ ックのアドレスを指定することの出来る随意の「コード・ブロック」パラメータ ーとをも受け取ることが出来る。フローグラフは、異なる種類または形状のブロ ックと、該ブロックを相互に結合させるアークと、各ブロックにアッセンブラ表 示で印刷される命令とから成る。翻訳機構に発見された命令の各基本ブロックは 、フローチャート中に対応するブロックを有する。
フローグラフ言語ファイルは、フローグラフ中のブロックの種類と、ブロック間 の相互連絡と、各ブロックに行く命令(ASCIIにおいては、アフセンブラ表 記)との定義を含む、フローグラフ言語ファイルは、翻訳機構に発見される命令 の各基本ブロックを定義するデータ・ブロック又はレコードを包含する内部2進 データ構造から作られる。各データ・ブロック又はレコードは、命令の基本ブロ ックの開始アドレス(オリジナル・プログラムにおける)と、バイト数で表した 基本ブロックの長さと、ブロックの種類と、該ブロックが特定やサーチに含まれ ているか否かを示すのに使われる「エポック数」属性と、「後続」データ・ブロ ックのアドレスのリストと、「前任」データ・ブロックのアドレスのリストとを 内蔵する。データ・ブロックは、その後続ブロック及び前任ブロックにおけるデ ータ・ブロックへの参照を挿入し又は削除することによって動的に且つ容易にデ ータ構造に挿入し又は削除することが出来、データ構造は、後続又は前任への連 続する参照によって前進的に又は逆方向に容易に検索又は走査される。
フローグラフに用いられることのあるブロックは5種類あり、各種類のブロック が特有の形状を有する。ブロックの種類には、CALLx項目、JSB項目、「 ノーマル」ブロック、CALLxプレースホルダー、及びJSBプレースホルダ ーが含まれる。’CALLXJは手順呼出しを指し、これはVAX”命令アーキ テクチャにおけるCALLS又はCALLG命令により作られる。
印刷されたフローグラフでは、CALLx項目ブロックは16進法であって、ブ ロックの名称と、若し既知ならば手順の名称と、hexでの呼出しマスクとを内 蔵する。ブロックの名称は、hexでのブロックの第1バイトのアドレス(オリ ジナル・プログラムにおける)と、これに続<rcALLJとから成る。
CA、LLx項目ブロックは、CALLS又はCALLG命令を介して到達され る。
VA、X”命令アーキテクチャでは、オリジナル・プログラムの主入口点はCA LLx項目プロ7りである;この主入口点は、プログラムを走らせるためにオペ レーティング・システムに呼び出される。
印刷されたフローグラフでは、JSB項目ブロックは楕円形であり、ブロックの 名称と、若し既知ならばサブルーチンの名称とを内蔵する。ブロックの名称はh exでのブロックの第1バイトのアドレス(オリジナル・プログラムにおける) と、こhに続< ’ JSBJ とから成る。JSB項目点は、JSB、BSB B。
又はBSBW命令を介して到達される。JSB項目は代表的にはマクロ・コード で使われる。
印刷されたフローグラフでは、通常ブロックは長方形であって、該ブロックの名 称と、該ブロック内の命令の全てとを内蔵する。ブロックの名称は、hexでの 該ブロックの第1バイトのアドレス(オリジナル・プログラムにおける)である 8通常ブロックは、実行の通常の流れを介して、又はブランチ、ケース、ジャン プ、又はリターン命令からの実行転送を介して、到達される。
印刷されたフローグラフでは、CALLxプレースホルダー・ブロックは破線六 角形であって、該ブロックの名称と、若し既知ならば呼び出される手順の名称と を内蔵する。ブロックの名称は、(若し翻訳時に既知ならば、さもなければゼロ )hexでの呼び出される手順の第1バイトのアドレス(オリジナル・プログラ ムにおける)と、これに続<「−」と、呼び出される手順についてのプレースホ ルダーの「呼出し番号」とから成る。Ca1lxプレースホルダー・ブロックは 、手順の内外での流れと、その手順の各呼出しについての記録されているサイド 効果とを表す、若し手順が5個の異なる場所から呼び出されるならば、(該手順 についてのCALLx項目プロ7りに加えて)それらの呼出しについての5個の 異なる呼出し番号と共に5個の異なるプレースホルダー・ブロックがある。
印刷されたフローグラフでは、JSBプレースホルダー・ブロックは、破線楕円 形であって、該ブロックの名称と、若し既知ならばサブルーチンの名称とを内蔵 する。該ブロックの名称は、(若し翻訳時に既知ならば、さもなければゼロ)h exでのサブルーチンの第1バイト(オリジナル・プログラムにおける)アドレ スと、それに続<r−Jと、呼出されるサブルーチンについてのプレースホルダ ーの独自の「呼出し番号」とから成る。JSBプレースホルダー・ブロックは、 サブルーチンの内外での流れと、そのサブルーチンの各呼出しについての記録さ れたサイド効果とを表す。
フローグラフ言語の好ましい形では、3個の基本的オペレータ、即ちグラフ(G )、ブロック(b)及びアーク(A)、がある、フローグラフ言語ファイルの各 ラインは、これらのオペレータのうちの一つから始まる:そのラインがコメント を含むことを示すセ4コロン;ブロック・オペレータを有する前のラインにより 定義されるブロックに該ライン中の文字数字データが含まれるべきことを示すブ ランク;命名されたブロックがハイライトで強調されるべきことを示す、ブロッ ク名を従えたH:又は例えばエラーを含む経路をハイライトで強調するために、 その2ブロツクが太い破線と結合されるべきことを示す、2ブロツクの名称を従 えたC。
オペレータGで始まるラインは、新しいグラフを画定し、そのグラフの見出しと して印刷される文字数字テキストを含むことが出来る。
オペレータBで始まるラインも、コードのブロックについての(hexアドレス などの)名称を含み、これに続いて、(例えば、A−ノーマル、B−CALLx 項目、C−JSB項目、D−CALLxプレースホルダー、E=JSBプレース ホルダーなど)該ブロックの種類及び形状を示す文字コードがある。随意の数字 スケール計数がオペレータBの直後に続くことが出来る。
オペレータAで始まるラインは、第1命名ブロックから第2命名プロ7りへの指 向アークを指定し、この2ブロツク名の後で、文字コードが該アークのスタイル を指示する(例えば、八−実線で描かれたノーマル・ブランチ、B−破線で描か れた真のブランチ)。
下記のものは、図15のフローグラフを印刷するためのフローグラフ言語ファD HRYSTONE SHRについてのフローグラフ言語ファイルG DHRYS TONE 5HR B 2EOOCALL B Transfer address rr+ask+ooo。
A 2E00 CALL 2EO2A SUB2 #08. 5P JSB @00000630 (PC)A 2EO2012972CI A B O12972CI E o 12972CI VAXCRTL:C3MAIN A O12972CI 2EOB A B ZEOB A CALLS #QO,00000006(Pc)A 2EQB 2E18 12 97E4 L AB 2E18 1297E4 1 D 2B18 1297E4 1 A 2E18 1297E4 1 2E12 ACVTWL #0OO1,RO 図13のステップ168において、a駅機構はオリジナル・プログラムから命令 の基本ブロックを受け取り、対応するRISC機械コードを生成する。 czs c命令は、一度に一つずつ、同じ結果と条件コードとを再生するRISC命令に 翻訳される。好ましくは各Cl5C命令は、順に4グループの命令を含むRIS C命令の対応する系列に翻訳される。第1グループは、ソース・オペランドを取 り出して、それらを一時記憶装置に置く命令を有する。第2グループ中の命令は 、ソース・オペランドに作用して結果を一時記憶装置中に生じさせる。第3グル ープログラム・コードのための命令細分性を保存する改良されたシステム及び方 法」という題名の上記した関連出社を参照することが出来る。
図13のステップ169において、翻訳機構は、RISC機械コードを、 RI S(:コンピューターのオペレーティング・システムにより認識されるプログラ ム・イメージ・フォーマット中に置くことによって、翻訳済みプログラムを作る 。このRISC命令の対応する基本ブロックのアドレスとの間のマツピングをも 生成すは翻訳されたコードがプログラム・イメージ中の何処に位置するかをグラ フで示す、この要約ページについて、図14を参照して以下に更に説明をする。
最後に、図13のステップ171において、H駅機構は、ステップ165におい てプログラム・フローグラフの解析時に突き止められたエラーを有するサブルー チンのフローグラフを印刷するためにフローグラフ言語ファイルを作ることがこ こで図14に転じると、図13のステップ170において生成される種類のプロ グラム名182と、オリジナル・プログラムが作られた日付183と、翻訳中に 見出されるコードの割合184とを含む配性がある。 −メモリー・マツプ18 1は、VAX”命令アーキテクチャとVMS”オペレーティングたりのディスク ・ブロックの数192はメモリー・マツプの上方側に印マツプ181に示されて いるイメージ・セクシ1ン185−191などの、記述されているイメージ・セ クシ曽ンに編成する。若しVAX”/VMS”フィクスアップ・ベクトルが存在 するならば、翻訳機構は、それを分解して、他のイメージへの間接的参照である オリジナル・プログラム中のアドレスを決定する。
オリジナル・プログラムのイメージ・フォーマントにより定義される入口点を発 見するために、翻訳機構は入口点をめてイメージ・ヘッダ185を走査するが、 デバッガ−人口点を無視する。それから翻訳機構は、CALL項目とSY?1B OL項目とを発見するために、存在するときにはデバッグ・シンボル・テーブル (DST)189を走査すると共に、存在するときには総合シンボル・テーブル (GST)191を走査する。CALLマスクは妥当である、該マスクに合法的 コードが続いている、該コードは特権命令を含んでいないことを保証するなど、 各々のあり得るCALL入口点について妥当性検査が行われる0合法的コード検 査は、読み出しマスクから3層の基本ブロックを通して該コードを解読している 。
絶対参照は一般的には定数であるので、シンボルがリンカ−によって絶対参照で あるとフラグされたときにはSYMBOL項目は無視される。そうでなければ、 SYMBOL項目はJSB入口点であるか又は誤ってラベルを付されたCALL 入口点である。m入口点からのコードは解読され、該入口点がCALLJI目で あるとすれば、今説明した合法的コード検査が行われ、若しこの合法的コード検 査に合格すれば、該入口点はCALL項目であるとみなされる。若し合法的コー ド検査に合格しなければ、該入口点がJSB項目であるか否か試験するために同 様の合法的コード検査が行われる。
図14の要約ページは、オリジナル・プログラムのイメージ・フォーマットによ り定義される100に及ぶ入口点198を列挙している。プログラム・コード中 の入口点の位置を示すために、入口点194の各々からメモリー・マツプ181 中の対応する位置へアーク201が引かれる。入口点のリストの下に、要約ペー ジは、翻訳機構からのメツセージの要約199を含んでおり、それは、致命的な ものから情報的なものまで、厳しさが低下する順に、列挙されている。各メソセ ージが与えられる回数は、カッコの中に示されている。最後に、要約ページの上 右側隅において、翻訳機構は、AからFまてにわたる翻訳の文字等級を与えるが 、それは、充全翻駅から、警告付き翻訳、部分翻訳、厳しいエラーがあるかも知 れない部分翻訳、欠けている実行時間機構のある部分翻訳、完全に不成功の翻訳 までにわたる品質を示す。
オリジナル・プログラム中の命令の殆どの位置を突き止めるために、オリジナル ・プログラムのイメージ・フォーマットにより定義される入口点からの実行の筋 道をたどる必要がある。各入口点から始まる命令の系列を解読して、命令が解読 されるに従ってフローグラフを構築することによって、実行の筋道がたどられる 。フローグラフを構築するために、各命令が解読されて、その長さを判定すると 共に、系列中の次の命令を判定する。命令の長さは、各オプコードについての指 定子の数を与えるテーブルを参照し、次に該指定子を調査して、それらの長さを 判定することにより、判定される。
Cl5C命令はRISCコードを生成するために解読されなければならないので 、翻訳機構は、フローグラフを構築するために解読の結果を保存することが出来 る。これらの結果は中間コード・フォーマットとされることが出来るが、それは 、フローグラフの助けによるエラー検査時の命令の解析をm純化すると共に、R TSCコードの生成を単純化する。その中間コード・フォーマットは、類似の命 令についての固定されたデータ・フォーマットを提供することが出来るので、オ ペランド指定子は、容易にアクセス可能な記憶場所にある。その固定されたデー タ・フォーマットは、効率的なRISCコードと、必要なときには、インタープ リタ−への呼出しとの生成に役立つ属性も提供する。使用可能な中間コード・フ ォーマットの一つの種類について、本明細書の付録Aで下に説明をする。しかし 、メモリーのスペースの制限から、長いプログラムについては中間コード表示の 使用が不可能となることがある。
ここで図17に転じると、フローグラフを構築するために使われるデータ構造が 示されている。フローグラフデータ構造221については前記した。それは基本 ブロック記述子のリストであり、その各々はその前任者及び後続者の全てにリン クされている。
フローグラフの生成及び解析を助けるために、数個の補助データ構造223を参 照し維持することが望ましい、フローグラフデータ・構造221の構築時と、後 の、もっともらしいコードについての走査の時とに、与えられたアドレスが、( 1)解読された命令のアドレスでもプロ7りの始めでもないか;又は(2)基本 ブロックの始めのアドレスか(以降、「ブロック入口点Jと称する):又は(3 )ブロックの中間部にある解読済み命令のアドレスか:又は(4)解読済み命令 の中央のバイトのアドレスか、を迅速に知ることが望ましい、この目的のために 、補助データ構造223は、Cl5C命令アドレスにより指標付けされるテーブ ル224を含む。
テーブル224中の項目は、例えば、今言及した各Cl5Cアドレスの4個の相 互に排他的な状態を符号化する16対のビットが詰め込まれているロングワード である。第2レジスター中の与えられたCl5Cアドレスについて、その4つの 最下位ビットがセットされているマスクが第2レジスターにロードされ、該アド レスの4つの最下位ビットは第1及び第2のレジスターの論理ANDによって該 第2レジスターへ転送され、該第2レジスターは、シフト・カウントを提供する ために1ビツト位置だけ左シフトされる。*第2レジスターは、テーブル224 へのインデックスを提供するために4ビツト位置だけ右シフトされ、該テーブル からの項目は該第ルジスターにロードされる0次に該第ルジスターは、与えられ たcrscアドレスについてのビットの対を右方位置11I整するために、該シ フト・カウントにより指示されるビット位置の数だけ回転させられる0次にその ピントの対は、第2レジスターと、その最下位2ビツトがセットされているマス クとの論理ANDによりマスク・アウトされる。
フローグラフを構築するとき、末端の命令までたどられていない他の経路がある ことが知られているときでも、一度に1つの経路をたどる必要がある。更に、時 には、たどられつつある経路が、部分的にたどられた経路と合併する。従って、 補助データ構造223は、未解読ブロックの基本ブロック記迷子へのポインタの りスト225を含むことが望ましい、フローグラフ構築開始時に、例えば、オリ ジナル・プログラムの既知の入口点の各々について未解読ブロックの基本ブロッ ク記述子が作られる。これらの既知の入口点は、フローグラフ構築前にリスト2 26に集められる。
VAX/VMS”プログラムについては、既知のプログラム入口点はCALLx 手順呼出しについての入口点であるので、それらはフローグラフにおいてCAL Lx基本ブロック記述子によって表される。CALLx基本ブロック記述子は、 各プログラム入口点について作られる。リスト225には、プログラム入口点の CALLx基本ブロック記述子へのポインタが最初にロードされる。更に、プロ グラム入口点についてのテーブル224中の項目は、基本ブロックの始めを指示 するために最初にセットされる。
該テーブルの探索によって、与えられたCl5Cアドレスがブロック又はブロッ クにおける解読済み命令のスタートであることが示されたときには、該ブロック の基本ブロック記述子を迅速に発見するのが好ましいことがしばしばある。メモ リースペースに制限が無ければ、これは、ciscアドレスにより指標付けされ る基本ブロック記述子へのポインタのテーブルによって行われることが出来る。
しかし、メモリースペースの制限に起因して、フローグラフ・データ構造221 における基本ブロック記迷子へのポインタ228のシ碧−ト・リストに対するハ フシェテーブル227を使うことが好ましい、更に、ハッシェテーブルは、例え ば、該ブロック中の第1の命令のアドレスの最下位16ビツトによって指標付け されることが望ましい、与えられたCl5Cアドレスから始まる基本ブロックに ついての基本ブロック記述子を発見するために、儒えば、基本ブロック記述子へ のポインタのシ普−ト・リスト223の一つへのポインタを得るべく、ハフシェ テーブル227は与えられたCTSCアドレスの最下位16ビツトにより指標付 けされる。このシシート・リスト中の各ポインタについて、該ポインタは基本プ ロ7り記述子の開始アドレス属性を取り出すために使われ、この開始アドレスは 与えられたCl5Cアドレスと比較される。該アドレス同土間に一致が生じれば 、所望の基本ブロック記述子が見出される。(基本ブロックの中央の命令のアド レスなどの)与えられたアドレスを含む基本ブロック記述子を発見するために、 該ブロックの始めのアドレスが発見されるまでテーブル224はアドレス数が低 下する方向に走査され、次にハッシェテーブル227と、基本ブロック記迷子へ のポインタのシロート・リスト228とを参照して基本ブロック記述子を発見す るために該ブロックの始めのアドレスが使用される。
基本ブロック記述子が新たに作られた基本ブロックについて割り振られる毎に、 アドレス・テーブル224と、ハッシェテーブル227と、及びシ習−ト・リス ト22日の一つとが更新される0例えばロングワードを得るために該テーブルを ?111付けし、マスキング動作によって該ロングワード中の2ピント項目をセ ントすることによって、該ブロックのスタートを指示する2ピント項目がテーブ ル224に書き込まれる。そのマスキング動作のためのマスクは、例えば、基本 ブロックのスタートのcxscアドレスの最下位4ピントでマスクのテーブルを 指標付けすることによって得られる0次に、基本ブロックのスタートのCl5C アドレスの最下位16ビツトでハッシェテーブル227を指標付けすることによ って、ポインタ228のシ奮−ト・リストの一つへのポインタが得られる。最後 に、新しいブロックの基本プロ、り記述子へのポインタがハフシェテーブル22 7を指標付けすることによって得られるポインタにより指示されるシ覆−ト・リ ストに加えられる。
ここで図18に転じると、フローグラフ・データ構造を構築するための手順のフ ローチャートが示されている。第1ステツプ229では、リスト(図17の22 5)の頭に成る未解読基本ブロックが該リストから除去され、フローグラフ・デ ータ構造中の基本ブロック記述子が割り振られ、該基本ブロック記述子は、未分 解入口点に等しい基本ブロック入口点と、未分解入口点の前任者に等しい前任者 とを指示するべくセットされる0次に、ステップ230において、ブロック入口 点から始まる、基本ブロック中の次の命令が解読され、アドレス・テーブル(図 17の224)が更新される0次にステップ231において、該命令の解読時に 、解読される命令が前に解読された命令と重なり合うか否か判定するためにアド レス・テーブル(図17の224)が指標付けされる。若しそうならば、ステッ プ232において、エラー・メツセージが生成され、該経路は放棄され、若しス テップ238で試験された通りに未解読基本ブロックのリスト(図17の225 )が空でなければ、他の経路が探索される。ステップ133において、アドレス ・テーブル(図17の224)における探索は、解読された命令が未解読基本ブ ロックと重なり合うか否かを示す、若しそうならば、未解読基本ブロックのブロ ック入口点は命令の中央にあるから、エラーがある。この場合、エラーはステッ プ234で報告され、未分解ブロック項目が誤っているという仮定のもとに未解 読基本ブロックは未解読基本ブロックへのポインタのリスト(図17の225) から除去される。この点で1つの命令がフローグラフに加えられている。
実行転送命令は常に基本ブロックを終わらせる。この状態はステップ235でチ ェックされる。実行転送命令が発見されたとき、該命令の可能な実行経路の各々 についての次の命令がステップ236で調査される。前に解読された命令へ戻る 経路は既存のブロックの入口点までリンクされ、或いは、経路が既存のブロック の中央へ向けられているときには、既存のブロックは2ブロツクに分割され、該 経路は常にブロック入口点で終わることになる。さもなければ、調査は、該経路 が終結させられるべきであるか又はたどられるべきであると結論する。たどられ るべき経路が2つ以上あるならば、最高優先順位経路が「継続経路」として選択 され、他の経路がたどられるべきアドレスは未解読基本ブロックとして待機させ られ、実行転送命令について基本ブロック記述子が未解読基本ブロックの基本ブ ロック記述子の各々における前任者のリストに加えられるや条件付きブランチ命 令については、例えば、アドレス・シーケンスにおける実行経路(即ち、直線経 路)は高優先順位「継続経路」であり、実行転送又はr真のブランチJの宛先ア ドレスは待機させられる。ステップ236において各々の可能な実行経路が調査 される方法について、図19と関連して以下に更に説明をする。ステップ237 でチェックされた通りに、可能な実行経路のいずれもが続けられない場合には、 ステップ238において、たどるべき経路が他にあるか否か判定するために未解 読基本ブロックのリストがチェックされる。若しそうでなければ、フローグラフ は終わりになる。さもなければ、実行は、ステップ229に戻って、未解読基本 ブロックのリスト(図17の225)中の次の未解読基本ブロックのブロック入 口点からの経路をたどってスタートする。続く経路があるとステップ237が決 定したならば、ステップ239において、実行は、若し該経路が未解読基本ブロ ックにおいて続くならばステップ246に分岐し、そうでなければステップ24 0へ分岐する。(後述する図19のステップ263は、経路が解読済み基本ブロ ックにおいて続くか否か既にチェックしているので、経路が未解読命令へ続くと きに限ってステップ240に到達する。)ステップ240において次の命令につ いての新しい基本ブロックが作られ、その新しい基本ブロックについての前任者 のリストが、実行転送命令を内蔵する基本ブロックへのポインタを最初に含むよ うにセットされ、新基本ブロックへのポインタが、実行転送命令を内蔵する基本 ブロックの基本ブロック記述子中の後任者のリストに加えられる。ステップ24 6において、実行転送命令を内蔵する基本ブロックへのポインタが未解読基本ブ ロックについての前任者のリストに加えられ、未解読基本ブロックへのポインタ は、実行転送命令を内蔵する基本ブロックについての後任者リストに加えられ、 未解読基本ブロックへのポインタは未解読基本ブロックのリストから削除され、 未解読基本ブロックについての解読がステップ230で始まる:若し次の命令の 解読が成功すれば、未解読基本ブロックの基本ブロック記述子は、解読されてい ることを示すように更新される。
ブロック中の命令が実行転送命令でないことをステップ235が発見したならば 、該経路はアドレス・シーケンスにおいて次の命令へたどられる。この経路は、 予め画定された命令メモリー領域の外に出てゆくので、終わらせなければならな いことがあり得る。ユーザーの選択により、その所定の命令メモリー領域は読み 出し専用メモリー領域として画定されることが出来、或いは、いずれにせよ、所 定命令メモリー領域は、オリジナル翻訳済みプログラムの全体について割り振ら れたメモリー領域に限定される。従って、ステップ241において、実行はステ ップ242へ分岐し、ここでエラーが報告され、経路は打ち切られる0次に実行 はステップ238において継続して、たどるべき新しい経路を探す。
アドレス・シーケンスで次の命令が他の基本ブロックに走り込むときに基本ブロ ックは終わるが、それは後任者ブロックである0次の命令のアドレスでアドレス ・テーブル(図16の224)を指標付けることにより、この状態がステップ2 43でチェックされる。ステップ244において、後任者ブロックが解読済み基 本ブロックであるか未解読基本ブロックであるか判定するために後任者ブロック の基本ブロック記述子がアクセスされる。それが若し未解読基本ブロックであれ ば、ステップ246において、最後に解読された命令を内蔵する基本ブロックへ のポインタが未解読基本ブロックについての前任者リストに加えられ、未解読基 本ブロックへのポインタが、最後に解読された命令を内蔵する基本ブロックにつ いての後任者リストに加えられ、未解読基本ブロックへのポインタが未解読基本 ブロックのリストから削除され、未解読基本ブロックについての解読がステップ 230で始まる;若し次の命令の解読が成功すれば、未解読基本ブロックの基本 ブロック記述子は、それが解読済みであることを示すように更新される。さもな ければ、若し後任者ブロックが解読済みブロックであれば、ステップ246にお いて、後任者ブロックへのポインタが、最後に解読された命令を内蔵するブロッ クの基本ブロック記述子における後任者のリストに加えられ、最後に解読された 命令を内蔵するブロックへのポインタが、後任者ブロックの基本ブロック記述子 における前任者のリストに加えられる0次に実行はステップ238において継続 した、たどるべき新しい経路を探す。
ここで図19に転じると、実行転送命令からの経路の一つにおける次の命令を調 査するために図18のステップ236でたどられる手順のフローチャートが示さ れている0図19の第1ステツプ251において、それが計算済み宛先アドレス を有するか否か判定するために実行転送命令が調査される。若しそうならば、ス テップ252において、宛先を解明するために逆方向シンボリック実行のプロセ スが行われる。このプロセスは、手順及びサブルーチン呼出しを解明するのに特 に有益である。ステップ253においてチェックされたように、若し宛先が解明 されなければ、該経路中の次の命令が不明であって、実行時にインタープリタ− が呼び出されるまでは決定されないので、該経路の調査は終わる。逆方向シンボ リック実行のプロセスにおいて、計算された宛先アドレスを、プログラム中の命 令のアドレスに関して固定されているアドレス値に変換するのに使われる少なく とも1つの先の命令を発見するためにフローグラフを通る実行転送命令からの逆 方向サーチによって、計算された宛先アドレスが解明される。逆方向シンポ1ノ ック実行のプロセスについて、図20に関して以下にさらに説明をする。
ステップ254で続けて、調査されている経路は既知の宛先アドレスを有する。
この宛先アドレスは、オリジナル・プログラムに割り振られたメモリーの限界と 比較され、若しそれがその限界の外側にあるならば、その宛先は、オペレーティ ング・システム・ルーチンなどの外部参照であるとみなされる。ステップ255 において、外部参照についての情報を含むイメージ情報ファイルに対してサーチ が行われる。若しそのようなイメージ情報ファイルが使用可能であるならば、そ れは、該経路が該外部参照から続いている宛先を判定するためにステフプ256 で調査される。若し外部参照が手順又はサブルーチンであれば、サブルーチン又 は手順呼出しの挙動に関する状方を保持する「プレースホルダーノブロックを作 ることが望ましい、サブルーチン又は手順は、例えば戻らない、4 (SP)へ 戻る、又は呼出し者のレジスターを修正する、などの異常な挙動を有することが ある。この異常な挙動は、イメージ情報ファイルにおいて指示されるべきてあり 、若し可能ならば、外部プログラムからの復帰経路を判定するために使われる。
また、外部宛先アドレス、呼出しタイプ、パラメーターの数、及び該パラメータ ーについての明確な値などの、呼出しに関する情報を、オリジナル・プログラム についてのイメージ情報ファイルに記録することが望ましい、該パラメーターに ついての明確な値は、例えば、呼出し命令からの逆方向シンボリック実行により 発見されることがある8図31ないし33を参照して以下に説明するように、呼 出しに関するこの情報を多数のプログラムの反復翻訳プロセスに用いることが出 来る。
外部参照についてイメージ情報ファイルが発見されなければ、ステップ257に おいて、外部参照がサブルーチンであるか又は手順であるか決定するために実行 転送命令のオプコードが調査される。若し実行転送命令がサブルーチンでも手順 呼出しでもなければ、ステップ258において、その外部参照についてノー・リ ターンが仮定されたことを指示する警告が発せられ、該呼出しに関する情報はオ リジナル・プログラムについてのイメージ情報ファイルに記録され、該経路の調 査は、該経路をたどることは出来ないという結論をもって終わる。若し実行転送 命令がサブルーチン又は手順呼出しであれば、ステップ259において、外部参 照について標準リターンが仮定されていることを指示する警告が発せられ、該呼 出しに関する情報がオリジナル・プログラムについてのイメージ情報ファイルに 記録される。サブルーチン呼出しの効果に関して仮定された情報を保持するため にフローグラフ中のこの点に「プレースホルダー」ブロックを作ることも望まし い、該経路の宛先は該実行転送命令から続くアドレス・シーケンスにおいて次の 命令であると仮定して、該経路の調査が続けられる。
ステップ260において、調査されている経路の宛先は、オリジナル・プログラ ムに割り振られたメモリー領域の中の宛先であると解明されている。ステップ2 60において、宛先は、オリジナル・プログラム中の命令に割り振られたメモリ ー領域の限界と比較される。普通の場合には、オリジナル・プログラム中の命令 に割り振られるメモリー領域は、例えば図14のメモリー・マツプ181に示さ れている領域187などの、読み出し専用メモリー領域である。若し宛先がこの メモリー領域の外側にあるならば、エラー・メツセージがステップ261で発せ られて、該経路は放棄される。
ステップ262において、宛先は、前に解読された命令の中にある可能性があり 、ここで、それは終わる可能性がある。この状態についてチェックするために、 テーブル(図17の224)は該宛先で指標付けされ、該アドレスが前に解読さ れた命令の中央にあるか否か、或いは該アドレスが前に解読された命令のアドレ スであるか又は基本ブロックの始めにある命令であるか調べるために、テーブル 項目が検査される;若しそうでなければ、該宛先は既存のブロックの中央にある 。
これらの動作は、図19のステップ262.263、及び264の試験を行うも のである。
宛先が既存のブロックの中央にあるとステップ262が判定すれば、ステップ2 65において、その既存のブロックは、前任者としてその既存のブロックと、実 行転送命令を内蔵するブロックとを有する新しいブロックの創成によって2ブロ ツクに分割される。また、その既存のブロックの後任者の全部が新しいブロック へ転送され、該既存ブロックの基本ブロック記述子も、より短いブロック長さを 示すために更新され、その新しいブロックへのポインタが、該実行転送命令を内 蔵するブロックの基本ブロック記述子中の後任者のリストに加えられ、その既存 ブロックの変化を反映するように命令アドレスのテーブルが更新される0次に、 ステップ266において、調査される経路を逆向きに通しての逆方向シンボリッ ク実行によって付加的な命令を解明しようと試みるために、新しいブロックと、 新しいブロックの後任者のラインの中のブロックとにおける計算された宛先アド レスについて逆方向シンボリック実行が再反復される。これにより、経路の調査 が完了する。
宛先が解読済みブロックの始めにあるとステップ263が判定すれば、ステップ 267において、実行転送命令を含むブロックへのポインタが既存のブロックの 基本ブロック記迷子中の前任者のリストに加えられ、該既存ブロックへのポイン タが、該実行転送命令を含むブロックの基本ブロック記述子中の後任者のリスト に加えられる。既存のブロックと、該既存ブロックからの後任者のラインとにお ける計算済み宛先アドレスについて、調査されている経路を逆向きに通しての逆 方向シンボリック実行がステップ266において再反復される。これにより、該 経路の調査は完了する。
宛先が既存の命令の中央にあるとステップ264が判定すると、エラー・メツセ ージがステップ268で発せられ、該経路の調査が終わる。
宛先が既存の命令の中央にあるとステップ264が判定しなければ、ステップ2 69において、実行転送命令のオプコードが検査されて、それが手順又はサブル ーチン呼出しであるか判定される。若しそうならば、ステップ270において該 経路は該手順又はサブルーチンの中までたどられる。若し該サブルーチンがまだ 翻訳されていなければ、それは翻訳される。いずれにせよ、その特定の手順又は サブルーチン呼出しの効果に関する情報を記憶するために「プレースホルダー」 ブロックがフローグラフ中に作られる。若しそのサブルーチンがまだ翻訳されて いなければ、その手順またはサブルーチンは、それがリターン・アドレス又はス タック上に保存されているレジスターを修正しないことを保証するために、解析 される。その解析により、図24のステップ372及び373に関して以下に更 に説明するように、「コールバック」の存在が明らかになることがある。ステッ プ269で発見されたサブルーチン呼出しが、それについてコールバックが記さ れているところの入口点に起これば、該ルーチンのアドレスを発見して、それを 翻訳するために逆方向シンボリック実行(図24のステップ374を参照して以 下に説明する)が試みられるべきである。
ステップ271において、調査される経路が条件付きブランチであるか否か判定 するために実行転送命令のオプコードが再び検査される。若しそうでなければ、 該経路はたどられる。さもなければ、ステップ272において、条件付きブラン チ命令について実行転送の宛先アドレスについて未解読ブロックが作られ、新し いブロックの基本ブロック記迷子へのポインタが該未解読ブロックのリスト中に 置かれる。
VAxT′″命令セットは、条件付きブランチ命令より複雑な独特のrcAsE 」命令を包含する。その宛先の数が実行時間でのみ知られるCASE命令を持つ ことは理論上は可能であるが、その様な命令は翻訳不能である:従って、コード ・ジェネレータがCASE命令を解釈するインタープリタ−への呼出しを生成す ることになるようにアナライザーはそれを「翻訳不能」とマークするべきである 。
普通の状況では、CASE命令についての宛先の数は翻訳実行に知られる。これ らの宛先は、1つを除いて、図18のステップ236において待機させられるこ とが出来、該経路は、その残りの宛先からたどられることが出来る。しかし、繰 り返される問題は、CASE命令について指定される多数の宛先のうちの1つは 、実行時に決して取られないので、無関係であるということである。この場合に は、その無関係の宛先についての変位は普通はゼロである。従って、図18のス テップ236において、特別の試験がCASEオプコード及びゼロ変位経路に対 して行われるべきである。若しこの状態が発見されれば、そのCASEターゲッ トはr翻訳不能」とマークされるので、それは実行時に解釈される。CASE命 令で繰り返される他の問題は、ときには無関係な経路がアドレス・シーケンスに おいて次の命令への「フォールスルー」経路であるということである。この場合 には「フォールスルー」経路は翻訳可能なコードを内蔵していないかも知れず、 これは図18のステップ230において分解及び変換エラーを引き起こす、若し 分解及び変換エラーが起これば、翻訳機構はエラー・メツセージを発して、(ス テップ238において実行を続けることによって)その筋道をたどるのを中止す るべきである。該エラー・メツセージを公式化するために、翻訳機構は、それに ついて分解又は変換エラーが発生したところの命令に先行するCASEステート メントを探し、若し発見されたならば、そのエラーを恐らくは@CASEステー トメントに起因すると診断することが出来る。更に、発見されたとき、CASE ステートメントに伴うこれらの問題は、オリジナル・プログラムについて翻訳機 構によって生成されたイメージ情報ファイルに記録されることが出来る。
図18−19の手順で生成されたフローグラフが図15に示されている。
rDHRYsTONE」という名のプログラムについては、最初の入口点は<m ajn>にあるが、これはオリジナル・プログラムにおいて2E00のアドレス を有する。始めの2バイトはVAX”呼出しマスクoooであり、DHRYST ONEが呼び出されるときには余分のレジスターを保存しなくてもよいこと、及 び、例外イネーブル・ビットI■及びDV([数及び小数桁あふれ)がオフであ るべきこと(Cプログラムについての省略)を指摘する0図15において、この 情報は、手順呼出しについての六角形記号301により表される第1基本ブロッ クに含まれている。
次の9バイトは、2個の命令と、5UBL2 (減算ロングワード)と、これに 続<JSB(サブルーチンへのジャンプ)とから成る単一の基本ブロックである 。
図15において、この情報は、「ノーマルコブロックについての長方形302に より表される第2基本ブロック中に示されている。
JSB命令に出会ったとき、翻訳機構は、イメージ情報ファイルの探索を行い、 参照をイメージVAXCRTLにおいてオフセット0に転じさせ、オフセット0 に関連する情報をめて該ファイルを覗き込む、翻訳機構は、ノーマル・リターン と、レジスターの使用及びセツティングとを見出す。この情報を用いて、翻訳機 構は、JSBプレースホルダーについては破線楕円303により表されるプレー スホルダ〜・ブロックを構築し、(使用JSB特性のゆえに)該プレースボルダ −を、アドレス2EOBでJSB命令の直後からスタートする新しい基本ブロッ クに結合させる。該基本プロ、りは、単一のCALLS命令から成り、長方形3 04により表される。翻訳機構は、宛先アドレスを2E1Bと計算し、それがD HRYSTONEイメードの中の手順(Proc O)であることを発見するが 、該手順は未だ試験されていない、翻訳機構は、フローグラフにおいて破線六角 形305として表される手順呼出しについてのプレースホルダーを作る。結局、 翻訳機構は、該手順中のRETを解読し、主ルーチン中のアドレス2E】2への ノーマル・リターンを指示する。
翻訳機構は、2E12から始まる分解を続け、CVTWL (ワードをロングワ ードに変換する)命令とRET (リターン)命令とを発見するが、これらは、 フローグラフにおいて長方形306により表される基本ブロックに含まれる。R ET命令は主ルーチンを終結させるので、翻訳機構はDHRYSTONEプログ ラム中の他の入口点で続けなければならない。
ここで図20に転じると、逆方向シンボリック実行を行うための手順のフローチ ャートが示されている。逆方向シンボリック実行のプロセスにおいて、実行転送 命令についての宛先アドレスはシンボリック表示により表され、その表示は、各 々の先の命令の効果を反映するように順次に修正される0例えば、実行転送命令 が、汎用レジスターR6の内容に4を加えることによって計算される絶対アドレ スへ実行を転送するrJMP R6+4Jであると仮定する。計算された宛先ア ドレスは、例えば、rR6+4Jと記号で表される。プログラムを逆方向に通る とき、R6を参照する次の命令はrMOVAB4 (R5)、R6J t’、コ レハ汎用レジスターR5の内容に4を加えて和をR6に入れると仮定する。記号 表示rR6+4」は前のrMOVAB4 (R5)、R6J命令を逆向きに通さ れて、修正された表示rR5+84が得られる。修正された表示は、前の命令の 後に該記号表示が持つのと同じ値を前の命令の前に持つ。
逆方向シンボリック実行のプロセスは、計算された宛先アドレスが絶対アドレス 又はイメージ相対アドレスに変形されるか、又は、計算された宛先アドレスの値 に影響を与えるけれども、それについて逆方向シンボリック実行が許容されない ような前の命令に到達するまで続く、逆方向シンボリック実行は、例えば、それ に対しては逆方向シンポリ7り実行が出来ないか又は計算済み宛先アドレスを変 形しそうもないようなある命令(XORB2 R1,R2)については、許容さ れない、この場合には、計算済み宛先アドレスをrUNKNOWNjという記号 値に還元して、欠けているコードがある可能性を指示するのが好都合である。
しかし、(加算、減算、ロード、及び、汎用レジスターを必要とする格納など) 命令の限られたセットだけについてシンボリック実行を許容すれば、代表的プロ グラムに見出される計算済み宛先アドレスの多くの部分の解明が可能となる。
図19のステップ252で呼び出されたとき、逆方向シンボリック実行は図20 のステップ321で始まる。ステップ321において、(図18のステップ23 5で認識される)実行転送命令の計算済み宛先を宛先アドレスの記号表示の所定 フォーマットに変換する試みが行われる。実行転送命令の計算済み宛先オペラン ドは、例えば少な(とも下記のフオームを持つことが出来るが、それは以下のテ ーブルにおいてそれらのアフセンブラ表示で、それらの対応するアドレス指定モ ードの名称と共に、示される。
計 された アドレスについての オペランド1、(Rn) 据え置きレジスタ ー 2、 −(Rn) オートデクリメント3、(Rn)十 オートインクリメント 4.6(Rn)十 据え置きオートインクリメント5、disp(Rn) バイ ト/ワード/ロングワード変位6、disp(PC> バイト/ワード/ロング ワード相対7、@disp (Rn ) バイト/ワード/ロングワード変位据 え置き8、@disp(PC) バイト/ワード/ロングワード相対据え置き9 、(Rn ) (Rx ) レジスター据え置き指標付き1.0.− (Rn) (Rx) オートインク+J / :/ トー指標付き11、(Rn)+ (R x) オートインクリメント据え置き12、6 (Rn) + (Rx) オー トインクリメント据え置き指標付き13、 dfsp (Rn) (Rx) バ イト/ワード/ロングワード変位指標付き+4. @disp (Rn) CR x’J バイト/ワード/ロングワード変位据え置き指標付き 指標付きアドレス指定は、テーブル及びアレーをアドレス指定するために一般的 に使われるけれども、実行転送のための宛先アドレスを指定するためには一般的 には使われない、従って、記号表示のための一つの好ましいフォーマットは、指 標付きアドレス指定モードを除いて全てを表すことの出来るフォーマ7)で宛先 アドレスを表す、その様なフォーマットが図21に示されている。これは、据え 置きアドレス指定、レジスタ一番号327、ロングワード変位328を指示する ためのメモリー・アクセス・フラグ326を含む、該フォーマントは、レジスタ 一番号327が妥当であることを示すようにセットさせることの出来るレジスタ ー・フラグ329をも含んでいるので、該フォーマットはロングワード定数を表 すことも出来る。レジスター・フラグは、例えば、!N2(lのステップ321 のときにセントされ、逆方向シンボリック実行のプロセスが、該レジスタ一番号 により指示されたレジスターの内容について成る値を発見して、その値をロング ワード変位に加えるときにリセットされる0図21の)t−マットにより指示さ れるアドレス値は、レジスター・フラグがセットされるときには該レジスターの 内容にm変位を加えることにより得られる値であり、或いは、レジスター・フラ グがセットされないときにはvi変位の値であり、メモリー・アクセス・フラグ がセットされるときには、その和又は値がアドレス値をメモリーから取り出すた めにアドレスとして使用される。
計算された宛先アドレスに関連するアドレス指定モードの全てを表すことの出来 る記号表示についてのより複雑なフォーマットが図22に示されている。このフ ォーマットは、メモリー・アクセス・フラグ33工、インデックス・レジスター ・フラグ332、インデックス・レジスタ一番号333、スケーリング定数33 4、ベース・レジスター・フラグ335、ベース・レジスタ一番号336、及び ロングワード変位337を含む、このより複雑なフォーマントにより指示される アドレス値は、変位の値に、ベース・レジスター・フラグがセットされるときに はベース・レジスターの値を加え、インデックス・レジスター・フラグがセット されるときにはインデックス・レジスターの値にスケーリング定数を乗じた値を 加えた値であり、メモリー・アクセス・フラグがセットされるときには、和が、 アドレス値をメモリーから取り出すためにアドレスとして使われる0図22のよ り複雑なフォーマットは、指標付きアドレス指定モードを使わない実行転送命令 についての宛先アドレスを発見するために逆方向シンボリック実行を改善するも のであるが、それは、これが命令セット中のより多くのオプコードの効果をシン ボリック実行のプロセスが生み出すことを可能にするからである1例えば、図2 1のフォーマントは、レジスタ一番号により指定されるレジスターに対する補数 命令の効果を表すことが出来ない、しかし、図21のフォーマットは、符号付き オフセント数を使うことが出来、インデックス・レジスタ一番号により指定され るインデックス・レジスターに対する補数命令の効果は、該オフセット数の補数 を取ることにより、説明されることが出来る。
もつと多数の命令オペレージ碧ンの効果を生じさせるために、記号表示は、1つ 以上の定数を含む文字数字ストリング:R1、R2、R3、・・・、R15など の各汎用レジスターの内容を指示する1フ以上のレジスター・デジグネーター: +及び本などの算術オペレータ;及び、アドレスXのメモリーの内容を表すメモ リー・アクセス機能@(X)などの可変長フォーマントを使うことが出来るので 、該表示の値は、代数学の規則を適用することによって表される値となる。従っ て、@7 (R1)(R4)などのロングワード変位据え置き指定子は、@(4 *R4+R1+7)と表される。インデックス・レジスターR4についての4と いうオフセット定数は、該指定子のロングワード・モードによって決定される; オフセント定数は、ワード・モードについては2であり、バイト・モードについ ては1である。しかし、1というオフセット定数は、文字ストリングに含まれる 必要はないであろう、単純化についての他の代数学の規則も適用される0例えば 、X+A+B (ここでA及びBは数値定数である)はx+Cに単純化されるべ きであり、ここでC−A+Bである; x+Ry+RyはX+2*R3/に単純 化されるべきである;そして、@ (z)+@ (z)+xは2*@(z)+x に単純化されるべきである。
ステップ321において、実行転送命令の宛先アドレスを、その宛先指定子を調 べることによって解明しようとする試みが行われる。これは、相対アドレス指定 モード及び相対据え置きアドレス指定モードについて行われ得る。相対アドレス 指定モードでは、次の命令のアドレス(即ち、プログラム・カウンタの更新され たM)が変位に加えられて所望の宛先アドレスを提供する。相対据え置きアドレ ス指定モードでは、絶対アドレスを得るために次の命令のアドレスが変位に加え られ、この絶対アドレスのメモリーの内容(これは図14のフィクスアップ・メ モリー領域188にあるべきである)が取り出されて所望の宛先アドレスを提供 する。ステップ322において、宛先アドレスが解明されたとき、実行は逆方向 に分岐して、図18のステップ237の経路をたどり続ける。
宛先アドレスがステップ321で解明されなかったときには、ステップ323に おいて実行転送命令についての宛先指定子を、命 の めに評価されたときに竺 宛先アドレスの値を表す記号表示に変換しようとする試みが行われる。これは、 宛先指定子自体の評価とは対照的であるが、これは命令の終わりに行われる。
オートデクリメントを除いて、他の全てについて、宛先指定子についてのアッセ ンブリ言語表示は、記号表示中の項と突き合わせによって直接変換する。オート デクリメント・モードについては、宛先指定子を評価する際にベース・レジスタ ーの内容が使われる前に命令・オプコードのデータ・タイプに依存してベース・ レジスターの内容は1,2.4.8又は16だけデクリメントされる。従って、 オートデクリメント宛先指定子が変換されるときには、記号表示における変位定 数は、実行転送命令のオプコードのデータ・タイプに依存して−1、−2、−4 、−8、又は−16である。更に、若し命令アーキテクチャが実行転送命令にお けるオートデクリメント・ソース指定子を許容するならば、宛先指定子に含まれ るレジスターと同じベース・レジスターを使う各オートデクリメント・ソース指 定子について、記号表示中の変位定数は、その様な各オートデクリメント指定子 の効果を生じさせるために実行転送命令のオプコードのデータ・タイプに依存し て−1、−2、−4、−8又は−16だけデクリメントされる必要があろう。
ステップ324において、宛先指定子が記号表示に変換され得ないときには実行 はステップ325へ分岐する。これは、例えば、図21の固定フォーマットが記 号表示に使われ、宛先指定子が指標付きアドレス指定モードを有するときに、行 われる。ステップ325において、実行転送命令が未知の宛先を有することを指 示する警告が発せられる。
宛先指定子が記号表示に変換されるとき、記号表示についての可能な宛先値をめ て探索をする逆方向シンボリック実行を行うために成る変数はステップ341で 初期化される。定数値を受け取るためのリストがクリアされ、少なくとも1つの 未知数の存在を指示するフラグがクリアされる。また、rエポックj数がインク リメントされる。
フローグラフを通る無限ループを防止するために、それについてシンボリック実 行が通ったところの各ブロックをマークするためにエポック数が使われる。無限 ループの可能性がフローグラフにより図23に示されている。フローグラフは、 階層データ構造として描かれている。フローグラフは、例えば、主入口点342 を有し、実行は末端ブロック343.344におけるリターン命令で終わる。終 わりから、いずれか1つのブロックの始めへの直接ループは無いけれども、中間 ブロック347及び348を相互に結合させる経路345及び346があり、こ れは、階層サーチ中に無限ループを生じさせることがある。)lW方向階層サー チは、例えば、典型的にはブロックをその始めからサーチし始めるルーチンを呼 び出すことによって実行され、そのブロックの終わりに達したならば該ルーチン は該ブロックの各後任者についてそれ自身を回帰的に呼び出す;逆に、逆方向階 層サーチは典型的にはブロックをその終わりからサーチし始めるルーチンを呼び 出すことによって実行され、そのブロックの始めに達したときには、該ルーチン は該ブロックの各前任者についてそれ自身を呼び出す、中間のブロック347. 34Bは交互に繰り返しサーチされるので、経路345及び346の存在は、こ れらのサーチ・ルーチンのいずれをも無限ループに捉えさせることになる。
順方向又は逆方向サーチ時の無限ループを防止するために、「エポック数」が号 −チの前にインクリメントされ、ブロックについてサーチ・ルーチンに入る毎に 、「エポック数」は該ブロックについての「エポック数属性」と比較される。
「エポック数」と「エポック数属性」との一致は、該ブロックがそのサーチ中に 既に到達されたことを、従って反復されるべきでないことを、示す。
ここで図20に戻ると、以下に更に説明するように、図24のサーチ・ルーチン を呼び出すことによって記号表示の可能な値についてステップ351で逆方向サ ーチが開始される0次にステップ352においてr未知」フラグが検査され、若 しそれがセットされているならば、該記号表示に未知数がある可能性を警告する ためにステップ353で警告メツセージが発せられる。ステップ354で定数値 のリストが検査される;若しそれが空であれば、実行転送命令からの経路の終わ りに到達しており、実行は、他の経路をたどろうとして図18のステップ237 及び238において継続する。さもなければ、ステップ355において、該リス ト中の各定数値は、それが妥当な宛先であることを保証するためにステップ25 4〜264について前述した様にして試験される。しかし、図27に関連して上 記したように、これらの試験のうちの成るものは、該定数値が該リスト上に置か れる前に行われることが出来るので、該試験は、該定数値が得られた方法を考慮 することが出来る0次にステップ356は、該リスト中の定数値が妥当であるか 否かチェックする。若し否であれば、実行転送命令からの経路の終わりに到達し ており、実行は、他の経路をたどろうとして図18のステップ237及び238 で継続する。さもなければ、ステップ357は、該リストが2つ以上の妥当な宛 先を含んでいるか否かチェックする。若しそうならば、1つを除いて他の全てが 未解読ブロックのリスト中に置かれ(図17の225)、M経路は、図18のス テップ237及び239において残りの妥当な宛先から始まって続けられる。
ここで図24に転じると、図20のステップ351で呼び出される逆方向サーチ ・ルーチンのフローチャートが示されている。このルーチンには2つの入口点が ある。第1の入口点361は、指定されたブロックにおいて指定された命令アド レスから新しい逆方向サーチを始めるために呼び出される。第2人口点362は 、指定されたブロックの終わりから始まる逆方向サーチを続けるために呼び出さ れる。
第1人口点361は、実行転送命令の命令アドレスから新しい逆方向サーチを始 めるために図20のステップ351により呼び出される;この場合、第1ステツ プ363は、実行転送命令を内蔵する現行のブロックのエポック数属性を新しい サーチについてのエポック数に等しくセントする0次にステップ364において 現行のブロックでのサーチは、現行の命令アドレスが該ブロック中の第1命令の アドレスであるならば終結させられるが、これは、若し該ブロックが実行転送命 令だけから成る場合に起こる。さもなければ、ステップ365において、現行の 命令アドレスは、先行する命令の命令アドレスに変更される。これら最後の2つ のステップは、テーブル(図17の224)を指標付けすることによって容易、 に行われる。
指定されたブロックの終わりからサーチを続けるために第2人口点362が呼び 出されるとき、エポック数はステップ366において該ブロックのエポック数属 性と比較される。新しいブロックが作られるとき、新しいブロックのエポック数 厘性は該エポック数の現行の値に等しくセットされるが、これは新しいサーチの 始めにインクリメントされる。更に、エポック数は、例えばロングワードである ので、それがインクリメントされる毎に、それは、与えれたプログラムの翻訳時 に各サーチについて独特の値を提供する。従って、ステップ366において、現 行のサーチのエポック数は、現行のブロックが現行のサーチに既に含まれている 場合に限って、現行のブロックのエポック数属性に等しい、サーチ・プロセスに おいて無限ループを避けるために、付加的な可能な値を発見する可能性が少なく なっているので、現行のブロックのサーチは、若し現行のブロックが現行のサー チに既に含まれているならば、終結させられる。
サーチがステップ366から続(べきであるときには、現行のブロックのエポッ ク数属性はステップ368においてエポック数に等しくセットされる0次にステ ップ369において、現行の命令アドレスは該ブロック中の最後の命令のアドレ スに等しくセットされる。この点で、図24のサーチ・プロセスは、該サーチ・ ルーチンが第1入ロ点361から呼び出されたか、それとも第2人口点362か ら呼び出されたかに関わらず、同一である。
ステップ370において、該表示は、図25を参照して2下に更に説明するよう に、該表示を解明する試みで現行の命令を通して「押し」戻される。ステップ3 71で試験されるように若し該表示が解明されれば、逆方向サーチ・ルーチンか ら戻ることによって現行のブロックのサーチは終結する。若し該表示が解明され なければ、ステップ364.365.370及び371は、該ブロックの始めに 到達するまで該表示が解明されるまで該表示を該ブロック中の命令を通して連続 的に押し戻すために反復される。
該表示が該ブロックの始めまで押されたことをステップ364が発見したとき、 ステップ372は、該表示がサブルーチン・アーギュメントを表すか否かチェッ クする。VAX”アーキテクチャについては、表示は、@(R12+C)の形の ときにはサブルーチン・アーギュメントを表すが、ここでCは定数である。サブ ルーチンのアーギュメントにより指定されるアドレスへの呼出しは、一般に「コ ールバック」として知られているが、これは手順または機能パラメーターへの呼 出しである。「コールバック」は、特に、実行転送命令のすプコードに応じてコ ールバック、jsbバンク、又はjmpバックと呼ばれる。「コールバック」が 発見されたとき、ステップ373において、図31〜33を参照して以下に説明 するように、異なるプログラム同上の間の相互依存性に起因するコンフリクトを 解明するために後に用いられるためにオリジナル・プログラムについてのイメー ジ情報ファイルに特性が記される。多数のコールバックが、例えばVMS”シス テム・サービス・ルーチンとコンパイルされたベーシック・プログラムとに発見 されている。
最後に、ステップ374において、記号表示の可能な値についてのサーチは、現 行のブロックの前任者を探すことにより続けられる。若し該前任者がプログラム 入口点(IIち、外部イメージからの呼出し)と定義されれば、記号表示の値が 該呼出しプログラムにより決定されるか否か調査するために少なくとも1つの呼 出しプログラム・イメージからのパラメーター値に関する情報が要求される。従 って、翻訳機構にとって使用可能なイメージ情報ファイルは、該プログラム入口 点へ渡されるパラメーター値に関する情報についてサーチされる。
該前任者がプレースホルダーであるならば、手順またはサブルーチン呼出しの効 果に関するプレースホルダー情報が参照されて、それらの効果が該記号表示を解 明するか否かが判定され(その場合には該前任者のそれ以上のサーチは不要であ り)、又は、該手順またはサブルーチン呼出しが該記号表示に対して何らの効果 も持たないか或いは既知の効果を有するか判定される(その場合には逆方向シン ポリンク実行は該プレースホルダーの前任者まで続けられ得る)、シかし、プレ ースホルダー情報は、該サブルーチンが該記号表示に未知の方法で影響を与える ことを示すことがある。この場合には、逆方向シンポリ7り実行は、該プレース ホルダーにより定義される入口点から連続するライン中にある該サブルーチン中 の各々の可能なリターンから始まって実行されることが出来る。
前任者がイメージ中の呼出しステートメントからのサブルーチン呼出しであると きには、「コールバック」特性がステップ373で記されたときに限って呼出し ルーチンにおいてサーチが行われる。VAX/VMS”プログラムにフいては、 CALLS手順呼出しについてこのサーチを行うのが特に望ましいが、それは、 その様な場合にはコールバック・パラメーターをスタック上に押す命令から記号 表示が容易に解明されることがあるからである。また、呼出しルーチンに対する サーチの妥当性は、コールバック・パラメーター数N(ここで記号表示はアフセ ブラ表示法で@(R12+N)又は@N (AP)である)を、CALLSステ ートメントによりスタック上に実際に置かれたパラメーターMの数と比較するこ とによりチェックされることが出来る:この数Mは、CALLS命令のシ1−ト ・リテラル指定子であり得る。CALLSステートメントの直前に、手順パラメ ーターは(N4)SPの記憶場所でスタ7り上にある。従って、記号表示に対す るCALLSオペレージ「ンの効果は、A、PにSPを代用して、該表示がCA LLS命令を通して押されるときに該表示変位から4を引くことによって生じる 。CALLS命令のアドレスで、解明するべき記号表示は@(R14+(N 4 ))である。実行が復帰するときに他の前任者のサーチを続けるために逆方向サ ーチにより必要とされる情報を保存した後、サーチは、図24の逆方向サーチ・ ルーチンの第2人口点362への回帰的呼出しにより開始され得る。該呼出し及 びリターンは、次のように符号化されることが出来るコ(IF CALLBAC K TIIEN(FOI? BACHPI?BDBCESSOROF Pl?E fl Bl、OCK:CALLING BLO(J 4−PRBDBCESSO R5(PRED BLOCK、 PTR2)IF CALLING BLOCK (LAST lN5TII)−CALl、s Tl(EN(PUSH(BLOI J、 EXPR,PTIIl、 Pl?ED BLOCK、PRT2)POP( BLOCK、 EXPR,PTRl、 PREI) BLOCK、 PTR2) ELSE SET [NO縁N FLAG)若し前任者がノーマル・ブロックで あれば、それは次のように回帰的にサーチされることが出来る: IF PRED BLOCK(TYPE)、1lOR?lAL THENPtl S[((BLQCK、BXPR,PTRI)CALL BACK賀ARD 5E ARCHPOP(BLOCK、 EXPR,PTRI)前任者ブロックの全てが 点検またはサーチされた後、逆方向サーチ・ルーチンは終了し、実行は復帰する 。
ここで図25に転じると、記号表示が前の命令の後に持つのと同じ値を該命令の 前に有する修正済み表示を得るために前の命令を通して逆方向に記号表示をr押 す」ためのルーチンのフローチャートが示されている。このルーチンは、例えば 、図24のステップ370で呼び出される。このプロセスは、命令・オプコード に高度に依存する。プログラム・カウンタ以外のメモリー又は汎用レジスターの 内容に直接には影響を与えない命令オプコードは、定数、レジスター・デジグネ ーター、及びメモリー・アクセス機能のみを含む記号表示の値に影響を与えない 、普通の場合のプログラム・カウンタの変化する値は記号表示の値に影響を与え ないが、それは、該表示を押す前に該表示はプログラム・カウンタを指定するレ ジスター・デジグネーターを持っていないからであり、そして、若し該表示を通 して該命令を押すプロセスが、該プログラム・カウンタを指定するレジスター・ デジグネーターを該表示に加えるのに役立つならば、それは、明確なアドレス値 を代入することによって除去される。汎用レジスター又はメモリーの内容に直接 影響を与えることが知られているけれども、それらに対して曖昧な方法で影響を 与える命令オプコードは、rUNKNOWN」という記号値の発見で該プロセス を終わらせる。
オプコードが汎用レジスター及びメモリーの内容に影響を与える方法は複雑であ るので、各オプコードの効果に関する情報を該オプコードによりアドレス指定さ れる解読テーブル中に予め格納することが望ましい、該解読テーブルは、各オプ コードについて書かれた独立のルーチンの開始アドレスを含むことが出来る。
しかし、例解のために、以下の記述は、類似の機能を行うオプコードについての ルーチンの共通面を示し、従って、図26の解読テーブル構成は、各オプコード について特別の動作を行うべく種々の経路に沿って分岐するより一般的な手順に より使われることの出来る数層のルーチン及びオプコードの情報を包含する。そ の様な一般的手順は、各オプコードについて一般的ルーチンにおいて取られる経 路を考慮することによって各オブコードについて独立のルーチンに拡張されるこ とが出来る。
図25のフローチャートの第1ステツプ381において、該テーブル中の項目を 得るために該解読テーブルはアドレス指定される。ステップ382において、該 命令が、そのオプコードだけのために、許容可能な記号表示の値に対して如何な る効果も持ち得ないか否か判定するために、該項目はゼロに比較される。若しそ うでなければ、実行は、未解明表示と共に復帰する。
解読テーブルの可能なフォーマットが図26に示されている。ロングワード・テ ーブル項目386に解読されるのは、異常な効果を有するオプコードについての 特別の解明ルーチンへの数位と、該オプコードについてのメモリー参照解明ルー チンへの変位387と、該オプコードについてのレジスタ解明ルーチンへの変位 388と、該オプコードが意味するデータ・タイプ及びオペランドに関する符号 化された情報389とである。該オプコードについての符号化されたデータは、 例えば、暗示されたレジスター宛先コード391と、データ・タイプ・コード3 92と、スタック・ポインタの暗示されたオートデクリメントを指示するフラグ 393と、暗示されたメモリー・オペレージロンを指示するフラグ394と、ス タック・ポインタの暗示されたオートインクリメントを指示するフラグ395と を包含する。暗示されたレジスター・コードは、例えば、畳通の場合には0の値 と、RO及びR1が影響を受けることを示す1の値と、RO〜R3が影響を受け ることを示す2の値と、RO〜Rが影響を受けることを示す3の値とを有する。
データ・タイプ・コードは、バイト、ワード、ロングワード、カッドワード、又 はオクタワードを指示する。
ここで図25のフローチャートに戻ると、該表示は、該命令についての中間動作 のシーケンスを通して逆方向に押される。逆順において、これらの中間動作はオ ートインクリメント、オブコード動作、及びオートデクリメントである。ステッ プ382において、該命令は、オートインクリメント指定子について走査される 。該表示において指定されるレジスターRxを使う各々のエクスプレス及び暗示 オートインクリメント指定子について、該表示中のレジスター・デジグネーター RxはRx+Cと置換されるが、ここでCは、オプコードのデータ・タイプがバ イトか、ワードか、ロングワードか、カントワードか、それともオクタワードで あるかにより、それぞれ1.2.4.8または16であり、該表示は、可能な場 合には、定数の乗算及び加算により単純化される0例えば、若し、該表示が@( R1+R7+R4)+6 (R3+3)+R1+R6+7であり、該命令がオー トインクリメント指定子r(R,1)+」を含んでおり、且つ該オプコードのデ ータ・タイプがカッドワードであるならば、該表示は@ (R1+R7+12) +@ (R3+3)+R1+R6+15に変えられる。
ステップ402において、解読テーブルからのデータの値が負でないときには、 実行はステップ403で特別レジスター解明ルーチンへ分岐する。該特別解明ル ーチンヘジャンプするために、例えば、以下のコードを使うことが出来る二MO VB 3(R1)、R2;R1はTABLE+4*0PCODEを含むADDL  PC,R2,R2 JMP R2 特別レジスター解明ルーチンの例は、ステップ374に関して上記したCALL Sについてのルーチンである:若しN≦M*4で、MがCALLS命令により指 定されるパラメーターの数であるならば、表示r@ (R12+N)Jの中のR 12にrRL4−4Jが代入され、該表示は単純化されてr@(R14+(N  4)Jが得られ、さもなければ「未知(unknown) Jの値が戻される。
ステップ404において、該表示がメモリー・アクセス動作を有するときには実 行はステップ405へ分岐する。ステップ405において、各メモリー・アクセ ス機能のアーギュメントを、該命令についてのエクスプレス又は暗示メモリー宛 先指定子のアドレスと突き合わせる試みが行われる。若し、メモリー・アクセス 動作の値が影響を受けるように一致が起これば、実行はステップ406へ分岐す る。ステップ406において、実行は、該命令オプコードについての命令解明ル ーチンへジャンプする:特定のオプコードについての命令解明ルーチンへの変化 は、例えば、解読テーブル中の「命令解明ルーチンについての変位」 (図26 の387)である。
命令解明ルーチンは、暗示メモリー宛先を伴うオプコードについてのルーチンと 、エクスプレス・メモリー宛先結果指定子を使うことのあるオプコードについて のルーチンとを含む、暗示メモリー宛先を伴うプログラム・コードは、例えば、 PUSHABとPUSHL、とを含むが、これはアドレス又はロングワードを、 それぞれ、スタック上に押す、PUSHAB x 又はPUSHL χ につい ての暗示メモリー宛先指定子はO(SP)であり、これは、rR14」の形のメ モリー参照アーギュメントと確実に一致する宛先アドレスを指定する。一致が確 実であるときには、次のような置換が記号表示で行われる、即ち、一致する「@ (R14)J項にχを代入し、全てのR14レジスター宛先にrR144Jを代 入する。
エクスプレス・メモリー宛先指定子を有する命令に見出されることのあるオプコ ードの例は、MOVL x、yなどのデータ転送命令であり、ここでyはメモリ ー宛先指定子である。この場合には該命令の結果Xは、該表示における各々の一 致する命令参照アーギュメントにおいてyに代入される0例えば、若し該命令が MOVL R1,8(R2)’t”、表示がr@ (R28)+R1+7Jであ れば、該表示は2*R1+7に変更される。
エクスプレス・メモリー宛先指定子のメモリー機能アーギュメントへの突き合わ せもオプコードのデータ・タイプに依存する0例えば、カッドワード又はフタワ ード・データ・タイプを有する命令は、2つ以上のロングワードと一致すること がある0例えば、命令CLRQ (Rx)はカッドワード・データ・タイプを有 し、そのメモリー宛先指定子は@(Rx)及び@(Rx+4)と一致し、メモリ ー機能は各々の場合にゼロに還元される。ロングワード・アドレス境界からのア ドレスの整合ミスがあるときにも、可能な一致は興味あるものである:この状況 の例は、命令CLRL (Rx)のr@(Rx+1)」との一致であり、この場 合には所望のロングワード・アドレスの1バイトだけがゼロの定数値に変換され る。
メモリー宛先指定子により指定されるアドレスが該表示中のメモリー動作のアー ギュメントを突き合わせることが可能であるけれども確実ではないときには設計 選択肢がステップ406で生じる。メモリー宛先指定子が(R1)で、該表示が メモリー・アクセス機能@(R2)を有する場合に、この状況の例がある:前の 命令がMOVL R1,R2であったならば一致が起こる。メモリー宛先指定子 は、該メモリー宛先指定子により指定されるメモリー宛先アドレスを表す他の記 号表示に変換されることが出来、この他の記号表示を、該表示中のメモリー動作 のアーギュメントに確実に一致し又は一致しないフオームに変換する試みで逆方 向シンポリンク実行が行われることが出来る。しかし、各々の異なる宛先アドレ スについて付加的なエポック数とエポック数属性とが要求されるので、異なる宛 先アドレスを表す多数の表示について逆方向シンポリンク実行を同時に行うこと はサーチを複雑にする。従って、多数の記号表示についてのサーチの範囲を、そ れを1個の付加的な記号表示に限定することにより、又は、現行のブロックと、 その現行のブロックとは異なるその前任者とにおける1個の付加的な記号表示に サーチを限定することにより、限定することが望ましいであろう、いずれの場合 にも、一致が可能ではあるけれども、その一致が確実ではないと結論されたなら ば、図25のステップ406の結果は、結果を解明するはずであるが、定数値へ 解明するのではない、従って、実行はステップ407においてステップ408へ 分岐し、ここで「未知(unknown) Jフラグがセットされ、実行は復帰 する。
記号表示のフォーマットにおける命令の効果を表すことが困難であるか又は不可 能である場合には記号表示は「未知」の結果に解明されることがある。この状態 の例は排他的OR演算である。前の命令が2つのレジスターの内容の交換を行っ ているのでなければ、その排他演算の効果は不定である0例えば、レジスターR 1及びR2の交換は、次のように符号化されることが出来る:X0RL2 R1 ,R2; R2←RI XORR2X0RL2 R2,R1; R1−R2XO RR2X0RL2 R1,R2; R2−RI XORR2ステップ409にお いて、ステップ406が表示を定数値に解明するか否かにより、実行は分岐する 。プログラム・カウンタ・デジグネーターを例外として、全てのレジスター・デ ジグネーターが該表示から消去されるときには、表示は定数値に変換されること が出来る。従って、レジスター指定が解明ルーチンにおいて除去または変更され るときには、該表示を定数値に変換する試みが行われる。
これは、図27を参照して以下に説明するルーチンなどのルーチンを呼び出すこ とによって行われ得る。
ステップ404が、該表示がメモリー・アクセス機能を含んでいないと判定した とき、又は、ステップ405が、該命令が、一致する可能性のあるメモリー宛先 指定子を有しないと判定したとき、該命令が汎用レジスターの内容に影響を与え る可能性がある。普通の場合には、命令は、エクスプレス・レジスター指令宛先 指定子を有するとき、又は成る暗示レジスター指令宛先指定子を有するとき、汎 用レジスターの内容に影響を与えることがある。しかし、命令がエクスプレス・ レジスター指令宛先指定子を有するときには、それは、オプコード・データ・タ イプがカッドワード又はオクタワードであるときに明白に指定されたレジスター 以外のレジスターに影響を与えることがある。
レジスターの内容が命令により影響を受ける方法は、どちらかと言えば複雑であ るので、オプコード・レジスター使用、データ・タイプ及び宛て先レジスタ一番 号の種々の可能な組み合わせについてレジスター使用マスクが予め格納されてい る解読テーブルを使うことが出来る。レジスター使用マスクは、命令について取 り出されて、該命令が記号表示に影響を与える可能性があるか否か迅速に判定す るために使用されることが出来る0例えば、図26に示されているオプコード・ レジスター使用情報389の符号化のために、レジスタ指令宛先が該命令につい て指定されているか否かチェックし、若しそうならば、宛先レジスタ一番号をデ ータ・タイプに付加してレジスター使用マスクのテーブルのインデックスを形成 することによって、レジスター解読テーブルについてのアドレスをオプコード・ レジスター使用のバイトから形成することが出来る。各レジスター使用マスクは 、影響を受けるレジスターを指示するようにセントされたビットと、該命令の影 響を受けないレジスターを指示するようにクリアされたビットとを有するワード である。またステップ410において、記号表示についてのレジスター使用マス クは、該記号表示に使われるレジスター・デジグネーターを指示するようにビッ トをセントすることによってワードから形成され得る0例えば、最上位ピント位 置がR15の存在を示すためにセット又はクリアされ、最下位ビット位置がRO の存在を示すためにセント又はクリアされると仮定すると、表示r@(R3+4 )+R12+R4+3」についてのレジスター使用マスクはrOOOloooo oooollooz Jとなる。
ステップ411において論理ANDが命令の宛先レジスター・マスクと記号表示 についてのレジスター使用マスクとの間で計算されて、該命令の影響を受けるこ とのある表示におけるレジスター・デジグネーターを指示するレジスタ・コンフ リクト−マスクとなる。ステップ412において、その特定の命令オプコードに ついてのレジスター解明ルーチンが使われるべきか否か決定するために、このレ ジスター・コンフリクト・マスクはゼロと比較される。若しそうならば、ステッ プ413において、レジスター解明ルーチンは、該表示をあるいは定数値に変換 するかもしれない該命令オプコードの効果を生じさせるべく該記号表示を修正す るべきか否か、又は、該効果が不定であるので該表示をr未知」の値に変換する べきか否か決定する。Nえば、命令がCLRL又はCLRQ命令であるならば、 レジスタ・コンフリクト・マスクにより指示された各レジスター・デジグネータ ーが記号表示から除去される。MOVL Rx、Ry命令については、レジスタ ーRxについてのレジスター・デジグネーターは、記号表示中のレジスター・デ ジグネーターRyの各々と置換される。しかし、MOVQ Rx、Ry命令につ いては、レジスター・コンフリクト・マスクにより指示される各レジスターRz は、レジスター・デジグネーターR(z+y+z)と置換される。換言すれば、 RxはRyに代用されるが、Rx+ 1もRy+lに代用される。
若し該表示が解明ルーチンの1つにより解明されなければ、ステップ414にお いて記号表示は、該記号表示において指示されているレジスターに影響を与える かもしれないオートデグリメント動作を通して「押されるJ、1F表示において 指示されるレジスターRxを使う各々のエクスプレス及び暗示オートデクリメン ト指定子について、該表示中のレジスター・デジグネーターRxはRx+Cと置 換されるが、このCは、オプコード・データ・タイプがバイトか、ワードか、ロ ングワードか、カッドワードか、又はオクタワードかにより、それぞれ、1.2 、−4、−8又は−16であり、可能な場合には定数の乗算及び加算により該表 示は単純化される。
命令を通しての表示「押し」について一般的に複合表示フォーマット及び複合命 令と関連させて説明したけれども、図21の単純な表示フォーマットが使われ、 解明ルーチンが「未知」の値を解明するにしても、命令がMOVAB、 PUS HAB。
MOVL、PtJSHL、CLRL、CLRQ、又はCALLSでなければ、逆 方向シンポリ7り実行のプロセスは、VAX/VMS”プログラムにおいて計算 された宛先アドレスを解明するのに非常に有益であることが見出されている。
ここで図27に転じると、記号表示における項目を解明するためのルーチンのフ ローチャートが示されている。例えば、項目は、図21の固定フォーマ、トで表 示される。
第1ステツプ421において、若しレジスター・フラグがセントされていれば実 行はステップ422へ分岐する;さもなければ実行はステップ423へ続く。
ステップ423においてレジスタ一番号は15と比較される。レジスタ一番号が 15ではなくて、従ってプログラム・カウンタの更新された値を指示していれば 、該表示は解明され得ない。従うて、レジスタ一番号が15でないときには実行 は復帰する;さもなければ、実行はステップ424へ続く。
ステップ424において、宛先アドレスは、変位と、更新されたPCの値との和 として計算される。VAX’に命令アーキテクチャにおいては、現行の実行が、 該PCを指定するレジスター指令モードのエクスプレス・ソース指定子を有する ときには、シンボリック実行のプロセスは、PCレジスター・デジグネーターR 15を記号表示に加えることがある。この場合には、更新されたPCの値は、現 行の命令においてPCを指定した指定子の直後のバイトのアドレスである。
ステップ425において、メモリー・アクセス・フラグが検査される。若しメモ リー・アクセス・フラグがセットされていなければ、アドレスは、オリジナル・ プログラム中の実行転送命令の可能な宛先であるべきである。VAX/VMS” プログラムについては、その様なPC相対アドレスはプログラムの命令メモリー 領域(図14の187)中にあるべきである。これはステップ426でチェック され、若し該アドレスが命令領域内にあることが見出されたならば、該アドレス はステップ427において宛先のリスト上に置かれ、実行は、解明された表示で 復帰する。さもなければ、警告メツセージがステップ428で発せられる。また 、命令メモリーアドレスの外側のアドレスは無効と見なされるので、それは宛先 のリストには加えられない、むしろ、「未知」フラグがステップ429でセット され、実行は、解明された記号表示で復帰する。
宛先がPC相対間接アドレスであるときには実行はステップ430へ分岐する。
VAX/VMS”プログラムでは、PC相対間接アドレスは、それが、プログラ ム・メモリーのフィクスアンプ・ベクトル領域(図14の188)に含まれるフ ィクスアップ・ベクトルであるときに限って、妥当と見なされる。若しステップ 424で計算されたアドレスがプログラム・メモリーのフィクスアップ・ベクト ル領域内にあって、且つ、定義されたフィクスアップ・ベクトルのリスト又はテ ーブルに含まれているならば、ステップ432においてアドレス指定されたフィ クスアップ・ベクトルがメモリーから呼び出され、ステップ433において該フ ィクスアップ・ベクトルは宛先のリスト中に置かれ、実行は、解明された記号表 示で復帰する。ステップ424で計算されたアドレスがプログラム・メモリーの フィクスアップ・ベクトル領域に属さないか又は予め定義されたフィクスアンプ ・ベクトルのリスト又はテーブル中に見出されないならば、警告がステップ43 1で発せられ、「未知」フラグがステップ429でセントされ、実行は、解明さ れた記号表示て復帰する。
若しレジスター・フラグがステップ421でクリアであると分かり、且つ、メモ リー・アクセス・フラグもクリアであると分かったならば、宛先は絶対アドレス である。VAX/VMS”プログラムについては、絶対アドレスi、それが予め 定義されたシステム・ベクトル入口点であるときに限って、妥当と見なされる。
従って、ステップ434において、予め定義されたシステム・ベクトル入口点の リスト又はテーブルで探索が行われる。若し該アドレスが予め定義されたシステ ム・ベクトル入口点てあれば、ステップ427において、それは宛先のリストに 加えられ、実行は解明された記号表示で復帰する。そもなければ、ステップ43 5において警告が発せられ、ステップ439において「未知」フラグがセットさ れ、実行は、解明された記号表示で復帰する。
若しステ7プ422が、メモリー・フラグがセントされていることを発見すれば 、記号表示により指示される宛先は絶対間接アドレスである。V A X /V MS”プログラムでは、この様なアドレスは無効と見なされる。従って、ステッ プ436において警告が発せられ、ステップ439において「未知」フラグがセ ントされ、実行は、解明された記号表示で復帰する。
ここで図28及び29に転じると、■13のステップ164を参照して前に紹介 したもっともらしいコードと、図14のプログラム・メモリー・マツプ181の 命令メモリー領域187とに対して走査を行う手順の70−チャートが示されて いる、この走査の結果は、命令メモリー領域(図14の187)において「もっ ともらしいコード」領域(図14の197)を特定するべきものである。特に、 図28及び29の手順は、フローグラフのブロックに含まれる解読済み命令を含 むメモリー領域(194,195,196)を含まない命令メモリー領域(図1 4の187)の領域を走査する。フローグラフのプロ7りに含まれる解読済み命 令は、より簡潔に「既知コードJと呼ばれる。既知コードを含まない命令メモリ ー領域(図14の187)の領域は、「未知コード領域」と呼ばれる。従って、 図28及び29の手順は、「未知コード領域」を走査して「もっともらしいコー ド」を発見する。もっともらしいコードを探す走査の際に、もっともらしいコー ドのフローグラフが構築される。もっともらしいコードを探す走査が終わったと き、図28の最終ステップ499において、既知コードのフローグラフ中の基本 ブロックの全てについての基本ブロック記述子中のrバイト長さ」属性の値を加 え合わせることによって既知コード(KNOWN C0DE)のバイトの総数が 計算され、もっともらしいコードのフローグラフ中の全ての基本ブロックについ て基本ブロック記述子の「バイト長さ」属性の値を加え合わせることによって、 もっともらしいコード(PLAUSIBLE C0DE)のバイトの総数が計算 される。このとき、発見されるコードの割合は、下記に従って計算される:%− CODE FOUND KNOWN C0DE/(KNOWN C0DE+PL AU]BLE C0DE) 好ましくは、もっともらしいコードについての走査は、プログラム中の可変数の アドレス指定可能な記憶場所に内蔵される命令を含む可変長命令セット中の合法 的命令を認識し、該走査は3つの異なる走査モード間を切り替わる。第1走査モ ードでは(図28のステップ500〜510)では、未知コード領域は、該未知 コード領域中の各々の、全てのアドレス指定可能な記憶場所から始まる合法的命 令について操作される。合法的命令が第1走査モードで発見されたとき、走査は 、第1走査モードで発見された合法的命令の直後に続くアドレス指定可能な記憶 場所を検査する第2走査モードに切り替わる(図28のステップ511〜518 )。
第2走査モードは、実行転送命令まで(該実行転送命令を含む)の一連の連続す る合法的命令を有する命令のブロック全体についてサーチを行う、この第2走査 モード中に違法な命令が発見されたならば、走査は第1走査モードに戻り、該第 1走査モードで直ぐ前に発見されていた合法的命令の第1のアドレス指定可能な 記憶場所の直後のアドレス指定可能な記憶場所から開始する。若し違法な命令が この第2走査モード中に発見されれば、走査は第3走査モードに切り替わり、( 図29のステップ521〜536)、このモードは、該ブロック全体の終わりに 該実行転送命令についての既知の妥当な宛先アドレスがあるか否かチェックし、 且つ、若しそうならば、その既知の妥当な宛先アドレスから始まる妥当な命令が あるか否かチェックする。既知の宛先アドレスは、それがプログラムのアドレス 範囲の外側にある時、又は、それが、プログラムの中の前に発見されていた命令 の中央にあるとき、無効と見なされる。若し第3走査モードが、該既知の妥当な 宛先アドレスから始まる妥当な命令があると結論すれば、該ブロック全体はもっ ともらしいコードであると見なされる。
図28の第1ステツプ500において、第1走査モードについての走査ポインタ はメモリーの命令領域中の最小のアドレスにセットされ、変数PLAUSIBL E−CODEとKNOWN C0DEとはクリアされる0次に走査はステップ5 01で始まる0wi走査ポインタが既知コードを指すか否か判定するために該走 査ポインタによつてテーブル(図17の224)が指標付けされる。若しそうな らば、該ポインタが、ステップ504で試験されるようにメモリーの命令領域外 に出て、もっともらしいコードについてのサーチを終了させるまで、又は、該走 査ポインタが未知コードを指すまで、ステップ503において該走査ポインタは 連続的にインクリメントされる。走査がポインタが未知コードを指すとき、実行 はステップ505で続く。
ステップ505において、該走査ポインタによりアドレス指定される記憶場所の 内容が取り出されて、該走査ポインタによりアドレス指定される記憶場所を第1 走査モードが飛び越すべきか否か判定するためにゼロと比較される項目を有する ヒエ−リスティクス・テーブルへのインデックスとして使われる0例えば、VA X”命令について走査しているとき、各々のアドレス指定可能な記憶場所はデー タのバイトを保持し、この場合には該ヒユーリスティクス−テーブルは256個 の異なる項目を含む。
該ヒエ−リスティクス・テーブルは、プログラムに関連する特別の命令アーキテ クチャ、典型的データ構造、及びシステム・アーキテクチャの性質及び特徴に基 づいて予めプログラミングされる。
若しユーザー・モード・プログラムで許容されない特権命令を該命令アーキテク チャが有するならば、その特権命令はステップ506で飛び越される(さもなけ れば、単一のアドレス指定可能な記憶場所の内容によってそれらが一意的に特定 され得ないので、該ヒエ−リスティクス・テーブルの探索によって若しそれらが 検出され得なければ、ステップ510で違法と見なされる)。
データ構造と、命令を含まないプログラムの他の領域とはしばしばクリアされる 。この場合、第1走査モードの走査は、全部ゼロを内蔵する如何なるアドレス指 定可能な記憶場所も飛び越すべきである。
若し可変長命令アーキテクチャが高度に複雑であれば、命令が単一のアドレス指 定可能記憶場所に内蔵される可能性は小さい、VAX”命令アーキテクチャはそ の様な場合である。この場合、第1走査モードでの走査は、単一のアドレス指定 可能な記憶場所に内蔵される、ありそうもない命令として特定される内容を有す るアドレス指定可能記憶場所を飛び越すべきである。
若し文字データの殆どが、該プログラムにおいて命令アーキテクチャでも使われ るコードによって表されるならば、第1走査モードは、命令の代わりに文字デー タのストリングを表しそうなコードを飛び越すべきである。好ましくは、第1走 査モードは、少なくとも4つの印刷可能なASCII文字のストリングを飛び越 す、この、印刷可能なASCII文字のストリングについての試験は、ステップ 502で行われる。若しその様な文字ストリングが発見されれば、走査ポインタ がステップ503でインクリメントされ:さもなければ実行はステップ507で 続(6例えば、ステップ502で、走査ポインタにより指示されるプログラム・ アドレスと、1.2、及び3プラス該走査ポインタとに内蔵されるデータは、印 刷可能なASC[1文字を指示するようにセントされたフラグを含むテーブルを 指標付けるために使われ、さもなければクリアされる。これら4つのプログラム ・アドレスの全てに内蔵されているデータが印刷可能なASCII文字であると き、文字ストリングが発見され、実行は、ステップ507で続(代わりにステッ プ503へ分岐する。従って、ステップ502は次の通りに符号化されることが 出来る: X−CHARACTERTABLE(PROGRAM 5CAN−POINTE R)) IF X、FQ、OTHEN Go To 5TEP 507X←CHARAC TERTABLE (PROGRAM (SCAN POINTEI?+1)) IF X、FQ、OTHEN Go To 5TEP 507IF X、EQ、 OTHEN Go To 5TEP 507IF X、NE、OTHEN Go  To 5TEP 503Go To 5TEP 507 記憶場所が飛び越されるとき、走査ポインタはステップ503において1アドレ ス位置だけインクリメントされる。これにより走査ポインタがメモリーの未知コ ード領域外へ進み出ることもある。ステップ504においては、これは、走査ポ インタを命令メモリー領域の最大限界と比較することによって試験され、そして 、若し走査ポインタが命令メモリー領域内にあれば、ステップ501においてテ ーブル(図17の224)を指標付けることによって、走査ポインタが既知コー ドの中へ進み入ったか否か判定する。若し走査ポインタが命令メモリー領域外へ 進み出たならば、もっともらしいコードについての走査は終わり、発見されたコ ードの割合が最終ステップ499で計算される。走査ポインタが既知のコードで あれば、実行はステップ503に回帰して走査ポインタを1記憶場所だけインク リメントし、該既知コード上を走査する。若し走査ポインタが未知のコードであ れば、実行はステップ505に回帰して、次の未知コード記憶場所の内容を検査 する。
未知のコードがステップ506で飛び越されないときには、ステップ507にお いて命令解読ポインタが走査ポインタにセットされ、ステップ508において命 令を解読する試みが行われる。ステップ509において、例えば、命令のオプコ ードが取り出されて、指定子の数と該オプコードについての解読データとを保持 するテーブルへのインデックスとして使われ、各指定子が取り出され解読される 。ステップ509において、命令解読ポインタは、該命令解読ポインタがメモリ ーの未知コード領域の外へ進められたか否か判定するために解読中にそれがイン クリメントされたときにステップ502及び504と同様にして試験される。
若しそうならば、実行はステップ503へ分岐する;さもなければ、ステ7プ5 10においても、若し解読中に違法な命令オプコード又は違法な指定子が検出さ れれば、実行はステップ503へ分岐する。
ステップ508〜51.0が違法な命令を解読したとき、実行は、ステップ51 1で始まって第2走査モードで続く、ステップ511において、解読された命令 のアドレス位置とテーブル項目とによって指標付けされるアドレス・テーブル( 図17の224)の項目は、もっともらしいコード命令の始めと、解読済み命令 の中央部分とを示すようにマークされる6次にステップ512において、アドレ ス・テーブルは、解読済み命令に続くアドレスで指標付けされて、それが既に解 読された命令のアドレスであるか否か判定される;若しそうならば、それは解読 済み基本ブロックの始めであるべきであり、その場合にはもっともらしいコード についての走査は図29のステップ535で続く、さもなければ、もっともらし いコードについての走査は図28のステップ513で続く。
ステップ513において、命令解読ポインタがインクリメントされ、他の命令を 解読する試みが行われる。しかし、ステップ514で試験されるように命令解読 ポインタが未知コード・メモリー領域の外へ進められたとき、又はステップ51 6で試験されるように違法なオプコード又は指定子が発見されたとき、該解読プ ロセスは終わる。該解読プロセスがステップ514又は516で終わったとき、 該走査ポインタのアドレスまでを含む解読済み命令の指示がステップ517にお いてテーブル(図17の224)から−掃され、実行はステップ502へ回帰し て走査を第1走査モードで続ける。
合法的命令が第2走査モードのステップ516で解読されるとき、ステップ51 8において、若し実行命令を含むまでの付加的命令を解読しようとして実行転送 命令が解読されなければ、実行はステップ511へ逆方向に分岐する。実行転送 命令がステップ518で発見されたときには、もっともらしいコードについての 第3モードの走査が図29のステップ521で始まる。
図29に転じて、ステップ521において、実行転送命令のアドレス位置により 指標付けされたテーブル(図17の224)中の項目と、テーブル項目とは、も っともらしいコード命令の始めと、該命令の中央部分とを指示するようにマーク される。ステップ522において宛先指定子が試験されて、それが計算されたア ドレスであるか否か判定される:若しそうならば、ステップ523において、該 宛先について定数値を得ようとして走査ポインタまで逆方向シンポリンク実行が 試みられる。ステップ524で試験されるように、若し未知の値が得られれば、 実行は図28のステップ517へ分岐して、走査ポインタまでのコードのブロッ ク全体を排除して第1走査モードで走査を継続する。
ステップ525において、例えば、図27で上に説明したように、それが絶対ア ドレスか、絶対間接アドレスか、相対アドレスか、又は相対間接アドレスかによ り、宛先アドレスが妥当性検査される。また、宛先アドレスは、指標付はテーブ ル(図17の224)により指示されるように、それがメモリーの命令領域中に あるけれども前に解読された既知の又はもっともらしい命令の中央にある場合に は、無効であると見なされる。若し宛先アドレスが無効であれば、実行は図28 のステップ517へ分岐して、走査ポインタまでのコードのブロック全体を排除 して第1走査モードで走査を継続するやステップ526において、変数END  OF BLOCKは命令解読ポインタに等しくセットされる。ステップ527に おいて、妥当な宛先が外部アドレスであれば、実行はステップ528へ分岐する 。ステップ529においても、指標付はテーブル(図17の224)により指示 されるように、妥当な宛先が前に解読された命令のアドレスにあるならば、実行 はステップ528へ分岐する。ステ7プ528に達したとき、走査ポインタへ戻 るコードのブロック全体がもっともらしいコードと確認される。従って、ステッ プ528において、もっともらしいコードのブロックについてブロック記述子が 作られる。この基本ブロック記述子には、該ブロック中のバイトの数にセントさ れた属性「バイト長さ」が含まれており、これは、1に、走査ポインタとEND  OF BLOCKとの差を加えた値として計算される。
ステップ527が、妥当な宛先アドレスが内部アドレスであると判定し、且つ、 ステップ529が、該内部アドレスが前に解読された命令にはないと判定したと きには、該宛先アドレスは、前に解読された命令ではない命令メモリー領域中に なければならない、若し命令が該宛先アドレスから解読されることが出来れば、 コードの、前に解読されたブロック全体は、もっともらしいコードであると見な される;さもなければ、コードの、前に解読されたブロック全体は、もっともら しいコードとは見なされない、従って、ステ、プ531において、該命令解読ポ インタは宛先アドレスにセットされ、命令を解読する試みが行われる。ステップ 532及び533において、若し該命令解読ポインタが、前に解読された命令へ 進められるか、又は、若し違法なオプコード又は指定子が解読されれば、解読プ ロセスは失敗と見なされる。さもなければ、合法的命令が解読されるとき、実行 はステップ528へ続き、ここで図28のステップ518で発見された実行転送 命令のアドレスへの走査ポインタからコードの基本ブロックについてブロック記 述子が作られる。
図28のステップ518で発見された実行転送命令の宛先から始めて、もっとも らしいコードのフローグラフを構築し続ける試みがステップ530で行われる。
これは、ステップ236から始めて、図48のフローグラフ構築テーブルを呼び 出すことによって行われる。しかし、好ましくは、もっともらしいコードのフロ ーグラフは既知のフローグラフと混合されないのて、既知のコードだけが翻訳さ れる0例えば、もっともらしいコードのブロックは、既知のコードのブロックに ついての後任者及び前任者のリストに加えられず、既知のコードのブロックは、 未知のコードのブロックについての前任者及び後任者のリストに加えられない。
いずれの場合にも、基本ブロック記述子は、基本ブロックを既知のコード又はも っともらしいコードとして特定する属性を有する。
もっともらしいコードのフローグラフの構築が終わるとき、何らかのもつともら しいコードがフローグラフ構築プロセスにより発見されなかった可能性がなおあ る。従って、ステップ531において、走査ポインタはE N D OF BL OCKにセットされる。また、図28のステップ512が、もっともらしいコー ドからの実行経路が既知のコードのブロックに走り込むことを発見したときには 、もっともらしいコードについての走査は、それ以上のもっともらしいコードを 発見するためにも続かなければならない、この場合、ステップ535においてE ND−りについてブロック記述子が作られるが、フローグラフ構築ステップ53 0は飛び越される;ステップ534はステップ536の後に行われる。
この点で第3走査モードは終わり、走査は図28のステップ503において第1 走査モードで続けられる。
ここで図30に転じると、オリジナル・プログラム中の未解読命令を突き止める のに役立つ実行ログ・ファイル(図9の88)を用いる方法のフローチャートが 示されている。前に紹介したように、また図30のステップ541に示されてい るように、オリジナル・プログラムが翻訳され、翻訳機構は該プログラムについ てのイメージ情報ファイルを生成する1次にステップ542において、翻訳され たプログラムは、インタープリタ−とオリジナル・プログラムとに関連して(図 9のRISCコンピューター50により)実行される。この実行中に、インター プリタ−が未翻訳コードへの計算済み宛先アドレスを決定するために実行が翻訳 済みプログラムからインタープリタ−へ切り替わるときに情報が実行ログ・ファ イルに記録される。インタープリタ−は、例えば、未解明計算済み宛先アドレス を有する実行転送命令のオリジナル・プログラムにおける原点アドレスと、オリ ジナル・プログラム中のその宛先アドレスについて計算された値とを特定する情 報を記録する。好ましくは、この情報は、オリジナル・プログラム中の原点アド レス及び宛先アドレスの対の形である。
ステップ542における翻訳済みプログラムの実行後に、ステップ543で、イ ンタープリタ−が呼び出されたか否か判定し、未翻訳コードの位置を判定するた めに実行ログ・ファイルが検査される。若しそうならば、ステップ544におい て該プログラムについてのイメージ情報ファイルと、実行ログ・ファイルとを使 ってオリジナル・プログラムが再翻訳される。フローグラフを構築する前に、例 えば、実行ログ・ファイル中の宛先アドレスが未解読ブロックの225のリスト に加えられる。フローグラフ構築後に、未解明入口点から始まるブロックの前任 者が検査されて、それらが、それぞれの原点アドレスを含むブロックを包含する か否か判定される;若し否であれば、前任者へのリンケージが加えられ、逆方向 シンボリック実行が、これらの新しいリンケージを通して再反復される。従って 、翻訳機構は、原点アドレスを宛先アドレスと同じく使用して、オリジナル・プ ログラムの最初の翻訳時には発見されなくて翻訳済みプログラムの実行のとき又 はオリジナル・プログラムの未翻駅部分の解釈のときに取られなかった経路を含 むオリジナル・プログラム中の可能な実行経路を調査することが出来る。
プログラムの連続する再翻訳を助けるために、フローグラフ・データ構造(図1 7の211)と、変換済みプログラム中のテーブル224とをファイルに格納す ることが出来る。この場合、再翻訳は、オリジナル・フローグラフの構築が終わ った場所から始まることが出来る。フローグラフの構築を続けるために、テーブ ル224は、それらを含むブロックを発見するために原点アドレスで指標付けさ れる0次に実行ログ・ファイルからの宛先アドレスが、それぞれの原点アドレス を含むブロックを包含する前任者のリストと共にキュー(図17の225)にロ ードされる1次にフローグラフの構築が図18の第1ステツプ229で再開され る。
ステップ544でオリジナル・プログラムが再翻訳された後、再翻訳済みプログ ラムがステップ542で実行される。好ましくは、実行から再翻訳への情報のこ のフィードバックは、翻訳済みプログラムの各実行後に行われるので、実際に突 き止められたオリジナル・プログラム中の全ての命令が翻訳されることになる。
ここで図31に転じると、例えば、図17に示されているデータ構造が、翻訳を 実行するコンピューター中のランダムアクセスメモリーの能力を大きく上面る様 な場合などの、相互に依存し合うプログラムを同時に翻訳することが望ましくな いか又は不可能である場合に、該プログラムを翻訳する手順が示されている。
2つのプログラムは、互いを呼出し合うときには、相互に依存している。これら の相互依存性は、しばしば、プログラム中の命令を突き止めて翻訳するプロセス を妨げる。特に、復帰点同士は適切に結合されなければならず、これには、呼出 されるイメージに関する情報が要求される。
前に紹介したように、オリジナル・プログラムの翻訳時に生成又は更新されたイ メージ情報ファイルは、該プログラム中の使用可能な各入口点を呼び出すことの 効果に関する情報を格納するために使われる。イメージを翻訳するとき、他のイ メージ中の入口点への呼出しは、その入口点を呼び出すことの効果に関して記録 された情報を使って翻訳される。
しかし、相互依存性は、第2のイメージ中の入口点を呼び出すことの効果が第1 イメージに依存していて且つ該第1イメージが翻訳されるまでは未知である様な 状況を創り出すことがある。しかし、第1イメージの翻訳には、第2イメージ中 の入口点を呼び出すことの効果に関する情報が要求されることがある0例えば、 第1イメージが第2イメージ中の入口点を呼出し、第1イメージ中の手順のアド レスを特定する手順パラメーターを渡すが、第2イメージが次に第1イメージの 手順に呼び掛ける場合に、この様な矛盾する相互依存性が生じる。第1イメージ を翻訳するために、例えば第2イメージが第1イメージを呼び戻すという事実な どの、第2イメージ中の入口点を呼び出すことの効果に関する情報が知られるべ きである。しかし、この情報は、第1イメージを調べることによっては決定され 得ない、第2イメージを翻訳するために、第1イメージへの呼び戻し時に渡され る手順パラメーターの可能な値のセット、及び、該手順パラメーターの各々の可 能な値についての呼び戻しの効果などの、第1イメージを呼び出すことに関する 情報が知られるべきである。しかし、この情報は、第2イメージを調べることに よっては決定され得ない、従って、所要の情報の全てを持つために各イメージが 翻訳のための他のイメージより前に翻訳されるべき場合には、矛盾する事態が発 生する。
図31に示すように、相互依存による矛盾は、連続変換によって解決される。
第一のプログラム(プログラム1)をステップ551で変換している間に、トラ ンスレータは、第二のプログラム(プログラム2)の入口点を呼出すことによる 影響を示す情報は、何もないことを知る。影響がないのは、第ニブログラムが、 まだ変換されていないからである。トランスレータは、第ニブログラムの入口点 への呼び出しについて省略時解釈をし、正常復帰とか呼び返し無しなどと判断す る。ステップ552で第ニブログラムを変換して、トランスレータは、第二の画 像に呼び返しが存在すると判断する。この判断は、省略時解釈による判断に反す る。
図31のステップ553〜557に示すように、画像情報ファイルを使用して、 一方のプログラムを変換したときに発見した新しい情報を、他方のプログラムの 再変換処理に渡す場合に、反復再変換プロセスを利用できる。ステップ555と 556とて、反復再変換プロセスが終了する。この時、重度収束状態となる0画 像情報ファイルに変化が起こらなくなるまで、二つのプログラム各々を交互に再 変換すると、重度の収束が発生する。しかし、画像情報ファイルに変化が起きた かどうかを検出し、起きていないと判断したときに、変換回数を減らせば、収束 を保証できる。
重度の収束の検査を簡略化は、各プログラムの最初の変換中に作成された画像情 17アイルを使って、そのプログラムを再変換する場合、二度目の変換では、何 も変化しないとの仮定に基づく、この仮定から、第ニブログラムの画像情報が、 第一プログラムの変換によって変化する場合のみ、第ニブログラムの変換が、第 一プログラムの再変換に影響を与えると考えられる。
IIIJ32に戻る0図32には、第一プログラムの最初の変換と第ニブログラ ムの最初の変換の終了後の、第一プログラムの画像情報ファイル561と第ニブ ログラムの画像情報ファイル562とを示す、第一プログラムの画像情報ファイ ル561には、第一のプログラムの最初の変換の間に探索された第一プログラム の人口点(入口A、入口B、入口C1人口りなど)に関する情報が存在する。こ の情報は、入口点毎に、入口点のアドレスと、変換中に図24のステップ372 で発見され、因24のステップ373で画像情報ファイル561に記録された、 その入口点に対応付けられた呼り返しパラメータとで構成される0wa情報ファ イル561には、更に、第一プログラムから他のプログラムの外部入口点への呼 び出しく呼び出しC1呼び出しS、呼び出しY、呼び出しZ)に関する情報56 4が存在する。この情報は、変換中に図19のステ7プ256.258もしくは 259て画像情報ファイル561に記録されたものであり、例えば、呼び出しの 外部行先アドレスと、呼び出しの種類(例えば、呼び出しSとか呼び出しG)と 、その呼び出しに対応付けられたパラメータの数と、それらパラメータの定数値 とで構成される。パラメータの定数値は、例えば、呼び出し命令からの逆方向記 号実行によってめられる。同様に、第ニブログラムの画像情報ファイルには、第 ニブログラムから他のプログラムの外部入口点への呼び出しく呼び出しA1呼び 出しB1呼び出しR1呼び出しK)に関する情報565と、第ニブログラムの最 初の変換中に得られたプログラム入口点(入口Q、入口R1人口S)に関する情 報566とが存在する。
次に、第ニブログラムの画像情報ファイル562内の情報を使って、第一プログ ラムを再変換する場合に、第一プログラムが変化するかどうかについて考える。
第一プログラムの情報ファイル561内のプログラム入口点のアドレスを、第ニ ブログラムの画像情報ファイル562内の外部呼び出しのアドレスに一致させる ことによって、また、第一プログラムの画像情報ファイル561内の外部呼び出 しのアドレスを第ニブログラムの画像情報ファイル°562内のプログラム入口 点のアドレスに一致させることによって、第ニブログラムのIiga、情報ファ イル562内の対応する外部呼び出しと入口点とが、認識される。第ニブログラ ムのm像情報ファイル562内のこれらの外部呼び出しとプログラム入口点とに 関する情報が、第一プログラムの再変換に影響を与える省略時解釈と何等かの点 において異なる場合、第一プログラムは、再変換される。!l像情報ファイル5 62に、プログラム1への外部呼び出しく例えば、図32のCA、LL K)が 存在し、第一プログラム内の未変換コード位置を呼出す場合も、未変換コード位 置が、最初の未処理ブロックの入口点として使用されて、第一プログラムは、再 変換される。再変換の対象となるプログラムの未変換部分への外部呼び出しの他 に、再変換の対象となるプログラム内の入口点への外部呼び出しの呼び出しパラ メータの新しい定数値も変化する。これらの定数値は、逆方向記号実行による再 変換中に、行先アドレスを他のプログラムの未変換コードへ変換するために使用 されることがあるからである。更に、再変換の対象となるプログラムによって呼 出されるプログラムの入口点の新しい呼び返しパラメータも変化する。これは、 再変換中にこれらの呼び返しパラメータの逆方向記号実行を行うことによって、 新しいプログラムの入口点の値が、再変換の対象となるプログラムの未変換コー ドに変換されるからである。
図33に戻る。この流れ図は、元となる二個のプログラムを交互に反復変換する ための処理手順を示す、すなわち、一方のプログラムの再変換を、他方のプログ ラムの画像情報ファイルの内容に変化がある場合にのみ実行して、高速収束を計 るものである。第一ステップ571と第ニステップ572は、図31の手順の第 一ステップ551と第ニステップ552と同じである0図33の第三ステップ5 73において、図32を参照して先に説明したように、第ニブログラムのIi像 情報ファイル(図32では562)内の対応する入口を調べて、第一プログラム の再変換に影響を与える可能性のある省略時解釈からの変化があるかどうかを判 断する。g化が発見された場合、ステップ574で第一プログラムが、再変換さ れる0発見されなければ、第一プログラムも第ニブログラムも再変換の必要はな い。
ステップ574での第一プログラムの再変換中に、第一プログラムの画像情報フ ァイル内の外部呼び出しとプログラム入口点の情報に変化が生じたことは、例え ば、変化した入口にフラグを立てて、古い入口のコピーを取ることによって、あ るいは、新しい入口にフラグを立てることによって、表示される。第一プログラ ムの再変換後、ステップ575で、図33を参照して先に説明したように、第一 プログラムの!i像情報ファイル(図32では561)内の変化した入口を調べ て、第ニブログラムの再変換に影響を与える可能性のある変化があったかどうか を判断する。変化が見つかった場合、ステップ576で第ニブログラムが、再変 換される。見つからなければ、第一プログラムも第ニブログラムも再変換の必要 はない。
ステップ577での第ニブログラムの再変換中に、第ニブログラムの画像情報フ ァイル内の外部呼び出しとプログラム入口点の情報に変化が生じたことは、例え ば、変化が生じた入口にフラグを立て、古い入口のコピーを取ることによって、 あるいは、新しい入口にフラグを立てることによって、表示される。第ニブログ ラムの再変換後、ステ、プ577で、図32を参照して先に説明したように、第 ニブログラムのWi像情報ファイル(図32の562)内の変化が生じた入口を 調べて、第一プログラムの再変換に影響を与える可能性のある変更があったかど うかを判断する。変化が見つかうた場合、ステップ574で第一プログラムが、 再変換される。見つからなければ、第一プログラムも第ニブログラムも再変換の 必要はない。
この連続変換と解釈点検のプロセスは、多数回反復されることもあるが、最終的 には収束される。たいていの場合、画像が正確に描出され次第、このプロセスは 収束する。その後、更に再変換を行う必要はない、実行時ライブラリには、例え ば、相互に依存する画像であるが、特定の入口点でユーザプログラムから呼び出 され、ユーザプログラムとは相互依存しないamの集合が存在する。この場合、 特定の入口点で画像を呼び出すことによる影響を示す情報と共に、画像が、正確 に描出され次第、連続変換と解釈点検プロセスは収束する。この情報を格納した ファイルを使って、ユーザプログラムを変換できる。この場合、実行時ライブラ リ画像を再変換する必要はない。
Cl5CRISCコード変換に関連づけて本発明について述べてきたが、あるプ ログラミング言語のCl5Cコードを別のプログラミング言語のCl5Cコード へ変換する場合にも、本発明は有用である0例えば、プログラムをある種のデジ タルコンビエータから別の種類のデジタルコンピュータへ移行したり、プログラ ムをある種のオペレーティングシステムから別の種類のオペレーティングシステ ムへ移行したりする場合に有効なのである。更に、本発明の分析機構とエラー検 査機構とを使用すれば、プログラムを変換することなく検査しデバッグできる。
仕−並一へ 主薗二二上盈丞 データアクセス組 1、LITREF(リテラル) リテラル値は、L ITREF組で表される。この参照属性は、記号テーブル内 のリテラルノードを示す、ノードは、指定されたリテラル(例、SYM$LOF FSET)もしくは、例えばゼロか1の定数に対応する。
LITREFは、原始オペランドとしてのみ存在する。
例: ヱニ五 主M考玉 、WORD L LOI: 1itref [111]LO2: data、u nit16 (LOI)pushl !512 LOI: 1ttref [1 512]LO2: 1nstr [pushll (LOI)2、REGREF  (レジスタ) 直接レジスタ参照は、REGREF組で表される。この組は、レジスタ番号属性 のみで構成され、原始オペランドあるいは行先オペランドとして直接使用される 。
この組では、レジスタ番号は、ソース内で使用されるレジスタ番号ではな(、R ISCコンピュータレジスタRh、R31,AP、BP、 およびSPに対して 定義されるmtu reg k’定数である。
REFREF組には、記号名を上記のレジスタに対応づけるために使用される記 号ノード工性が存在する。更に、コード発生器が使用する属性も存在する。
例; ヱニ困 生型l丞 pushl ro LOI: refref [rO]LO2: 1nstr  [pushll (Lot)popl ro LOI: regref [rO ]LO2: 1ostr [popH(LOI)3、MEMREF/FETCH (非記号メモリ参照)MACROコードのオペランドは、たいてい、レジスタ経 由のメモリ参照を指定する。
MEMREF組は、これらの参照を表すために使用される。また、構成要素は、 基底レジスタオペランドとオプシ冒ンのオフセットオペランドの二個である。基 底レジスタオペランドは、常に、REGREF組のアドレスを示す、設定されれ ば、オフセットオペランドは、LITREF組、SYMREF組、あるいはCO MP OP組を指すポインタとして存在する。設定されな0場舎、オフセットは ゼロと解釈される。
MEMREF組の値は、特定のメモリ位置のアドレスを示す、原始オペランドに 指定されたメモリを参照するには、FETCH組を使用して、その位置の値が必 要であるこを表示する。MEMREFは、直接行先オペランドとして、あるいは MOVAxなどの命令に指定するソースとして使用できる。従って、MARGO コンパイラ前置プロセッサは、アドレス索引参照を値索引参照から識別する必要 がある。すなわち、直接に表検索を行って命令の種類やオペランド番号を知るの である。INCL命令の行先オペランドなどのオペランドを修正するには、アド レス索引形式を使用する。
FETC)(は、次に述べるように、TDXREF組やSYMREF組上でも使 用される: MEMREF組には、参照を更に明瞭に識別するために設定されるフラグが三個 存在するニ ーDEFERRED、これは、間接アドレス指定の追加レベルを示す0例、@o ffs@t (Rn)。
−AUTOINCREMBNT、、:れは、基底レジスタの後増分を示す。
−AUTODECREMENT、これは、基底レジスタの前減分を示す。
DEFERREDやAUTOINCREMENTと同時に指定することはできな い。
SP基底付き参照、FP基底付き参照、およびAP基底付き参照は全て、MEM REFオペランドで表される。
MEMREF&lには、記号ノード属性が存在する。この記号ノード属性を使用 して、記号名をメモリ位置に対応づけることができる。また、複数の参照を同一 の基底位置に設定して最適化を計るためにコード発生器が使用する属性も存在す る。
例; ヱニ五 主肌稟丞 pushl、 (rO) LOI: refref [rO]し02: mem ref (LOI) LO3: fetch (LO2) LO4: 1nstr [pushll (LO3)pushl @(ro)+  LOI: regref [rO]LO2: memref [deferr ed、autoinclLO3: fetch (LOI) LO4: 1nstr [pushll (LQ2)pushl 4(ro)  LOI: regref [14]LO2: mea+ref [rO] LO3: fetch (LO2,LOl)LO4: 1nstr [push ll (LO3)pushl @foo(sp) LOI: symref [ foo]LO2: rsgref [apl LO3: +Iemref [deferredl(LO2,LOI)LO4:  fetch (LO3) LO5: lN5TR[pushll (LO4)4、SYMREF (記号テ ーブル参照)SYMREF組は、記号名で項目の参照を表すために使用される0 名称のSYMREFは、記号ノード参照(SYMbol node REFer ence)ではなく記号テーブル参照(SYMbal table REFer ence)に由来する。この組が指す記号テーブルノードは、記号ノード、外部 ノード、ラベルノード、あるいはルーチンノードである。
記号の値が、この組の値となる。記号ノードの場合、FBTCHを使用して記号 の値を得ることは出来ない、記号ノードは、この8味において、リテラルノード に類似している。すなわち、コンパイル時間値の記号名に過ぎないのである。
外部ノード、ラベルノードおよびルーチンノードの場合、索引によっては、FE TCHが必要である。アドレス参照や即時モード参照は、FETCHを必要とし ない、(11時モード参照は、外部ノード上でのみ正当である。)値参照の場合 、SYMREFのFETCHが必要である0例えば、外部、ラベル、あるいはル ーチンへの分岐には、SYMRBFを直接使用する。あるラベルノードの値に対 するMOVL命令には、SYMREFのFETCHを使用する。
SYMREF組のDEFERREDフラグを使用して、間接アドレス指定を設定 できる。このフラグは、外部ノードとラベルノード各々のSYMRBF上でのみ 使用可能である。
ヱニ玉 生固盈丞 、ADDRESS foo 1abel LOI: 5yaref [foo  1abellLO2: data、addr(LOI)pushl foo 1 abel LOI: symref 1foo 1abel]LO2: fet ch (LOI) LO3: fnstr [pushll (LOI)calls $1.foo  rout LOI: 1itref IjllLO2: sy@ref (f oo routlLO3: calls (LO2,LOI)pushl 1f oo val LOI: symref [foo vall(externa lLO2: 1nstr [pushll(LOI)ユニ上朧旦ム旦点員 1、LABEL LABEL組は、ルーチン内の分岐目標を表す、この組が参照するラベル記号も やはり、分岐組の目標オペランドとして使用されるSYMREF組によって指定 される。
ソース内のUNWIND TARGET指示文で宣言されたラベルは、通常のL ABEL組で表される。但しUNWIND TARGETフラグをその岨中に設 定する。
例: ヱニム 生Ml玉 foo: pushl SQ LOI: 1abel [foolLO2: 1 itref (10) LO3: 1nstr [pushll (LO2)foo:: unwind  target LOI: 1abel [foo、unwind−targe t12、JSB ENTRY、CALL ENTRY、10 INTERRUP T−ENTRY、EXCEPTION ENTRY入口点指入口点指示−ス内の JSB ENTRY、CALL ENTRY。
10 INTERRUPT ENTRYおよびEXCEPTION ENTRY 指示文のうちのどれか一つで宣言されたルーチンの開始をフラグで知らせる。
また、宣言されたルーチンに対してMTU人ロノロノード定する。
MTU人ロノロノード、ソース指示文に設定されたレジスタ使用度などの情報が 存在する。
例: ヱニ五 中間表示 food: 、jsb entry LOI: 、jsb entry (fo o)food: 、call entry LOb 、call entry  [fool!!處艶蓋 1、 8RAMCH BRANCH組は、特定の目標ラベルへの分岐あるいはメモリ位置経由の間接分 岐を指定する。第一オペランドは、ラベル記号ノードを同定するSYMFRF組 あるいは分岐アドレス(REGREFかFBTCH)を指定する値生成組のアド レスでなければならない。
BRANCH組は、BRB命令、BRW命令、およびJMP命令に使用される。
間接分板の場合、コード発生器は、分岐ではなくJSBを生成する。
例: ヱニλ 生型l丞 brb foo LOI: symref [foolLO2: branch  (LOI) jmp bar LOI: symref [barlLO2: branch  (LOI) jmp 4(RIO) LOI: Ittref [14]LO2:regre f(rlo) LO3: wmref (LOI、LO2)LO4: fetch (LO3) LO5: branch (LO4) 2、CA、LLS/CA、LLG CALLS組とCA、 L L G組とは、第一オペランドに設定されたルーチ ンへのVAX”呼び出し命令に対応する。この呼び出し命令は、記号参照もしく はメモリ参照である。第二オペランドは、(ACLLSのンパラメータ数あるい はCALLGのパラメータリストのアドレスを示す。
例: calls t2.foo LOI: IHref E#2]LO2: sym ref [fool LO3: cans (LO2,LOl)callg (ap)、(rlO)  LOI: regref [aplLQ2: ragref [rlO] LO3: −earer (LOI) LO4: memref (LO2) LO5: callg (LO4,LO3)3、 RETURN RETURN組は、VAX?にの復帰命令に対応する。
アナライザは、RETURN組内に、記号ノードでその記号ノードから復帰する ルーチンのタグをっけたり、インタプリタを呼出して復帰をエミユレートするか どうかを示すフラグを立てたりする。
例: ヱニ五 生回盈丞 ret LOI : return 4、JSB JSB組は、VAX”+7)JSB命令かBSBx命令に対応する。JSBには 、オペランドが一つだけ存在する。記号ノードアドレスを示すS YMRE F か間接JSB目標を表す値Ii成組かのどちらかである。
例: ヱニ五 生間点玉 bsbw foo LOI: sywaref [foolLO2: jsb  (LOI) jsb (rlO) LOl:regref [rlO]LO2:memref (LOI) LO3: jsb (LO2) 5、R3B/REI R3B組とREI組とは、VAX”(’)R3B命令とREI命令とに対応する 。
アナライザは、これらの組内に、記号ノードでその記号ノードから復帰するルー チンを指すポインタを設定する。
例: 6、C0NDBR C0NDBR組は、あらゆるVAX”の条件付き分岐命令を表すために使用され る。この組には、(VAX”分岐演算コードを指定する)演算コード属性と、記 号ノードを指すSYMREF組あるいは間接行き先を表す値生成組のアドレスを 指定する行先オペランドとが存在する。オプシヲンの追加オペランドの存在は、 条件付き分岐の種類によって異なる0例えば、ELEQには追加オペランドはな いが、BLBCには被検査項目を指定するオペランドがあり、BBSには追加オ ペランドがニーある。
次の表は、条件付き分岐の種類と必要な追加パラメータを示す0種類の欄は、オ ペランドに対して許容されるオペランドの種類を示す、「値」は、LITl?E F、(コンパイル時記号の)SYMREF、COMP OP、REGREF、お よび(SYMREFSMEMREFもしくはI DXREFの)FETCHが許 容されることを示す、「アドレス」は、REGREF、SYMREF、、MEM REF。
およびrDXREFが許容されることを示す、オペランド1は、常に、分岐先を 示す。
fkX L5iJL!l t’3 MM 也JLIL 底版ACBχ 限度 値  加数 値 索引 アドレスAOBxxx 限度 値 索引 アドレスB (c c) BBEQ BBx Pos 値 基底 アドレス BBxx Pos 値 基底 アドレス BBSSBBXXI PO3値 基底  アドレス BBSS IBLBx Src値 5OBXXX 索引 アドレス 例: ヱニ五 生回皇丞 acb1 1110.#1.R0,108LOI: l1tref fljIO ]LO2: l1tref rlll LO3: regref (rO] LO4: sytmref [108]LO5: condbr [abc1] (LO4,LOl、L02ン−aobleq 110,4(ro)、10$ L OI: l1tref [110jLO2: 1itref [1141 LO3: wxemrlIf [rOI (LO2)LO4: condbr  [aobleql(LO4,LOl、LObleq 108 LOI: sym ref [10$]LO2: condbr [bleql (LOI)blb c g−foo$flag+(ro) LOl: sywrref [foo$ flag]LO2: fetch (LOI) LO3: regref [rOl LO4: condbr [blbc] (LO3,LO2)bbs $<ba se+bit、、ro、4(rlo)LOI: sy曽ref [basalL O2: symref (bi t)LO3: camp op [addl( LOI、102)LO4: regref [rOl LO5: 1itref [@4] LO6: regref [rlOI LO7: memref (LO6,LO5)LO8: fetch (LO7 ) LO5: condbr [bbs] (LO8,LO3,LO4)皇皇員 1、1NSTR INSTR組を使えば、他のMACRO命令全てを表すことができる。命令属性 は、演算コードを指定する定数であり、オペランドは、命令オペランドである。
演算コード定数は、通常、VAX”演算コードを表すmtu vax k S値 である。また、mtu vax ks値をとることもある。この場合は、RIS C固有演算コードの組込み対象物を表す。
許容されるオペランドの種類は、命令によって異なる。一般的には、LIFRE F演算子、SYMREF演算子、COM OP演算子、REGREF演算子、お よび(SYMREFか、MEMREFか、IDXR,EFの)FETCH演算子 が、値を使用するオペランドに指定される。REGREF、SYMREF、?I E門REF、およびIDXREFが、アドレスを使用するオペランドに指定され る。rlNcxj命令中の行き先など[修正Jオペランドの場合、アドレス形式 が採用される。
lN5TR組には、コード発生器にアナライザが演算した情報を供給するための 状態コード使用度フラグが存在する。このフラグは、NとZビット値、Cビット 値、■ビット値の全部もしくはどれか一つを、現在の命令で発生させたコードに よってシミユレートするかどうかを指定する。すぐ後に続く一つ以上の状態分岐 命令によって、NとZののみの使用が指定された場合、追加ビットのr局所NZ 」が設定される。これによって、コード発生器は、場合によっては、得られた値 を直接使用することができる。
例; 笠二五 生M盈丞 1ncl 4(rO) LOI: 1itref [141LO2: regr ef [rOI LO3: se+wref (LO2,LOl)LO4: 1nstr [1n all (LO3)addl3 ro、foo$1−value、(go)+L OI: regref [rOl LO2: symref [foo$l valuelLO3: fetch  (LO2) LO4: regref [5pl LO5: memref [autoincrementl (LO4)LO6 : 1nstr [add13](LOI、LO3,LO5@ovc5 (ro )、4(ro)、$32.foo$w−buf−1en、 foo$r−buf ferLOI: regref [r01 LO2: me+++ref (LO2)−LO3: fetch (LO2) LO4: 1itref 114] LO5: regref [rOl LO6: semref (LO5,LO4)LO7: fetch (LO6 ) LO8: 1itref [$321 LO9: symref [foo$w−buf−1enlLIO: fetc h (LO9) Lll: symref [foo$r−bufferlL12: jnstr  [醜ovc5](L03.LO7,LO8,LIO。
1nsque 8(ro)、foo$q−head LOI: 1Jtref  [$8]LO2: regref [rOl” LO3: aemref (LO2,’LOI)LO4: symraf [f oo$q−head]LO5: 1nstr [1nsquel(LO3,LO 4)浄書(内容に変更なし) 7“6“5’ 4” !’ 2” 1’ O浄書(内容に変更なし; FIG、8 浄書(内容に変更なし) FIG、II 浄書(内容に変更なし) FIG、12 浄書(内容に変更なし) DI−IRYSTONE=SHR ℃ 浄書(内容に変更なし) 浄書(内容に変更なし) 浄書(内容に変更ない 浄書(内容に変更な−) 浄書C内容に変更なし) 浄書(内容に変更なL1 浄書(内容に変更なし) FIG、27 浄書(内容に変更なし) 浄書(内容に変更なし) 浄書(内容に変更なし) FIG、30 浄書(内容に変更なし) FIG、 31 浄書(内容に変更なし) 要約書 自動的にフローグラフを生成し、このフローグラフを使用して、プログラムを解 析して、フローグラフ中の命令のブロックに関する情報を提供し、それからフロ ーグラフと命令のブロックに関する情報とを使用して、翻訳された命令を生成す ることにより、プログラムが翻訳される。命令のブロックに関する情報の収集及 び記憶及びフローグラフ内の経路に渡って情報の一貫性についての検査とを制御 するために、フローグラフはプログラム解析中に使用される。上記情報は、入来 経路全部では釣り合わないスタック深さ、入来経路全部にわたってブロックに調 和(、ないリターン・マスク、非初期化レジスター又は条件コードの使用、ロン グワード境界でのスタックの整合の失敗、手順パラメータへのコールバックなど の非標準リターン、等々の、あり得るエラーや翻訳上の困難を検出するためのに 使用される。解析中に発見されたエラーは、例えば、そのエラーに関連する命令 の経路及びブロックが指示されているエラー固有のフロープログラムを生成する ことによって、報告される。
平成 年 月 日

Claims (1)

  1. 【特許請求の範囲】 1.元となるコンピュータプログラムを変換して、変換プログラムを求めるため のデジタルコンピュータ操作法において、(a)前記元となるコンピュータプロ グラム内に命令の流れグラフを自動的に作成する段階であって、前記流れグラフ は、前記命令のブロックとそのブロック間の実行経路とで構成される段階と、( b)前記流れグラフを使用して、前記元となるコンピュータプログラムを解析し 命令ブロックに関する情報を前記流れグラフ中に設定する段階と、(c)前記流 れグラフと前記命令ブロックに関する情報とを使用して、前記変換プログラムの 命令を生成する段階とで構成されることを特徴とする操作法。 2.前記変換プログラムの対応する命令ブロックは、前記流れグラフ中の命令ブ ロック毎に生成されることを特徴とする請求の範囲第1項に記載の操作法。 3.前記変換プログラムの対応する命令ブロックは、前記元となるコンピュータ プログラム内の前記ブロック毎に指定された機能を設定するが、前記変換プログ ラムには、前記元となるプログラム内の命令毎に指定された習性を示す命令は存 在しないことを特徴とする請求の範囲第2項に記載の操作法。 4.前記元となるコンピュータプログラムには、前記段階(a)の時点では未変 換命令の位置が不明であるため、前記流れグラフ中のブロックには存在しない未 変換命令が存在し、また、前記操作法は、更に、前記変換プログラムをインタプ リタの助けを借りて実行し、実行を前記インタプリタに移行して未変換命令を解 釈し、前記変換プログラムの実行に復帰する段階で構成され、前記変換プログラ ムの実行では、常に、前記変換プログラム内の前記命令ブロック中の第一の命令 に復帰することを特徴とする請求の範囲第3項に記載の操作法。 5.前記段階(a)には、更に、元となるコンピュータプログラム内の命令を復 号して中間コードを求めることが含まれ、前記段階(b)と(c)では、前記中 間コード表示を使用して、元となるコンピュータプログラム内の前記命令によっ て指定された処理を判断することを特徴とする請求の範囲第1項に記載の操作法 。 6.前記段階(b)と(o)とでは、元となるプログラム内の命令を復号しない ことを特徴とする請求の範囲第5項に記載の操作法。 7.前記ブロックに関する前記情報には、レジスタ使用度が含まれることを特徴 とする請求の範囲第1項に記載の操作法。 8.前記ブロックに関する情報には、スタック使用度が含まれることを特徴とす る請求の範囲第1項に記載の操作法。 9.前記ブロックに関する情報には、コード使用度が含まれることを特徴とする 請求の範囲第1項に記載の操作法。 10.前記ブロックに関する情報には、非標準復帰の発生が含まれていることを 特徴とする請求の範囲第1項に記載の操作法。 11.前記ブロックに関する情報は、起こり得るエラーと変換障害を検出するた めに前記段階(b)で使用されることを特徴とする請求の範囲第1項に記載の操 作法。 12.前記エラーには、前記流れグラフ中の命令ブロックへ至る全経路で一致し ないスタック深度が含まれることを特徴とする請求の範囲第11項に記載の操作 法。 13.前記エラーには、前記流れグラフ中の命令ブロックへ至る全経路で一致し ない復帰マスクが含まれることを特徴とする請求の範囲第11項に記載の操作法 。 14.前記エラーには、未初期化レジスタの使用が含まれることを特徴とする請 求の範囲第11項に記載の操作法。 15.前記エラーには、未初期化状態コードの使用が含まれることを特徴とする 請求の範囲第11項に記載の操作法。 16.更に、前期エラーの一つに係わる命令の経路とブロックが示されているエ ラー流れグラフを作成することによって、前記エラーの一つを知らせる段階で構 成されることを特徴とする請求の範囲第11項に記載の操作法。 17.前記エラー流れグラフは、人間に対して表示されることを特徴とする請求 の範囲第16項に記載の操作法。 18.前記エラー流れグラフは、前記エラーの一つに係わる前記経路に沿ってブ ロックを拡大した状態で表示されることを特徴とする請求の範囲第17項に記載 の操作法。 19.前記段階(a)には、前記元となるプログラム内の命令を復号することと 、前記元となるプログラム内の命令のプログラムアドレスの索引を表に付けるこ とが含まれ、前記表には、プログラムアドレスが、(1)複合された命令のでも ブロックの先頭アドレス位置のでもないアドレス、(2)ブロックの先頭アドレ スの位置、(3)ブロックの中間アドレス位置に存在する復号された命令のアド レス、あるいは(4)複合された命令の中間アドレスであることを示す入口が存 在することを特徴とする請求の範囲第1項に記載の操作法。 20.コンピュータプログラム内のエラーを分析し知らせるためのデジタルコン ピュータ操作法において、 (a)前記コンピュータプログラム内に命令流れグラフを自動的に作成する段階 であって、前記流れグラフは、前記命令のブロックとそのブロック間の実行経路 とで構成される段階と、 (b)前記流れグラフを使用して、前記コンピュータプログラムを分析し前記エ ラーとそのエラーに係わる前記流れグラフ中の経路とブロックとを検出する段階 と、 (c)前記エラーに係わる命令の経路とブロックが記されたエラー流れグラフを 作成することによって、前記エラーを知らせる段階とで構成されることを特徴と する操作法。 2.前記エラー流れグラフは、人間に対して表示されることを特徴とする請求の 範囲第20項に記載の操作法。 22.前記エラー流れグラフは、前記エラーに係わる経路に沿ってブロックを拡 大した状態で表示されることを特徴とする請求の範囲第21項に記載の操作法。 23.元となるコンピュータプログラムを変換して変換プログラムを求めるため のデジタルコンピュータシステムにおいて、(a)前記元となるコンピュータプ ログラム内に命令の流れグラフを自動的に作成するための第一の手段であって、 前記流れグラフは、前記命令のブロックとそのブロック間の実行経路とで構成さ れている手段と、(b)前記流れグラフを使用して、前記元となるコンピュータ プログラムを解析し前記流れグラフ中に命令ブロックに関する情報を設定するた めの第二の手段と、 (c)前記流れグラフと前記流れグラフ中の命令ブロックに関する情報とを使用 して、前記変換プログラムの命令を生成するための第三の手段とで構成されるこ とを特徴とするデジタルコンピュータシステム。 24.前記第二の手段は、前記ブロックに関する情報を使用して、起こりうるエ ラーと変換障害とを検出するための手段を備えていることを特徴とする請求の範 囲第23項に記載のデジタルコンピュータシステム。 25.更に、前起エラーの一つに係わる命令の経路とブロックとが記されたエラ ー流れグラフを作成することによって、前記エラーの一つを知らせるための手段 で構成されることを特徴とする請求の範囲第24項に記載のデジタルコンピュー タシステム。
JP4508765A 1991-03-07 1992-03-05 プログラム翻訳方法 Expired - Lifetime JPH07122854B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US666,196 1991-03-07
US07/666,196 US5507030A (en) 1991-03-07 1991-03-07 Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses
PCT/US1992/001741 WO1992015937A1 (en) 1991-03-07 1992-03-05 Automatic flowgraph generation for program analysis and translation

Publications (2)

Publication Number Publication Date
JPH05508504A true JPH05508504A (ja) 1993-11-25
JPH07122854B2 JPH07122854B2 (ja) 1995-12-25

Family

ID=24673220

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4508765A Expired - Lifetime JPH07122854B2 (ja) 1991-03-07 1992-03-05 プログラム翻訳方法

Country Status (8)

Country Link
US (3) US5507030A (ja)
EP (1) EP0528028B1 (ja)
JP (1) JPH07122854B2 (ja)
AU (1) AU656964B2 (ja)
CA (1) CA2081978C (ja)
DE (1) DE69230122T2 (ja)
IE (1) IE920749A1 (ja)
WO (1) WO1992015937A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001504957A (ja) * 1996-09-26 2001-04-10 トランスメタ・コーポレーション 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置

Families Citing this family (148)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5438668A (en) 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
JPH0721033A (ja) * 1993-07-07 1995-01-24 Nec Corp 言語処理装置及びその方法
KR960706125A (ko) * 1994-09-19 1996-11-08 요트.게.아. 롤페즈 다수의 마이크로 콘트롤러의 동작을 실행하기 위한 마이크로 콘트롤러 시스템(A microcontroller system for performing operations of multiple microcontrollers)
EP0703532B1 (en) * 1994-09-22 2001-11-28 Sun Microsystems, Inc. Embedded program flow information for object code manipulation
US5608874A (en) * 1994-12-02 1997-03-04 Autoentry Online, Inc. System and method for automatic data file format translation and transmission having advanced features
JPH08212075A (ja) * 1995-01-31 1996-08-20 Nec Corp 情報処理装置
US5751982A (en) * 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
US5956478A (en) * 1995-09-11 1999-09-21 Digital Equipment Corporation Method for generating random test cases without causing infinite loops
US5867164A (en) * 1995-09-29 1999-02-02 Apple Computer, Inc. Interactive document summarization
US5819064A (en) * 1995-11-08 1998-10-06 President And Fellows Of Harvard College Hardware extraction technique for programmable reduced instruction set computers
US5890174A (en) * 1995-11-16 1999-03-30 Microsoft Corporation Method and system for constructing a formula in a spreadsheet
US5812823A (en) * 1996-01-02 1998-09-22 International Business Machines Corporation Method and system for performing an emulation context save and restore that is transparent to the operating system
JP2795244B2 (ja) * 1996-01-17 1998-09-10 日本電気株式会社 プログラムデバッグシステム
US5802373A (en) * 1996-01-29 1998-09-01 Digital Equipment Corporation Method for providing a pipeline interpreter for a variable length instruction set
US6226789B1 (en) 1996-01-29 2001-05-01 Compaq Computer Corporation Method and apparatus for data flow analysis
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
US6000028A (en) * 1996-01-29 1999-12-07 Digital Equipment Corporation Means and apparatus for maintaining condition codes in an unevaluated state
US5930509A (en) * 1996-01-29 1999-07-27 Digital Equipment Corporation Method and apparatus for performing binary translation
US5842017A (en) * 1996-01-29 1998-11-24 Digital Equipment Corporation Method and apparatus for forming a translation unit
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
JP3201716B2 (ja) * 1996-02-22 2001-08-27 シャープ株式会社 コンピュータ装置
US6330691B1 (en) * 1996-02-23 2001-12-11 Institute For The Development Of Emerging Architectures Llc Use of dynamic translation to provide breakpoints in non-writeable object code
US5805893A (en) * 1996-03-01 1998-09-08 Electronic Data Systems Corporation Assembly language program converter
US5872905A (en) * 1996-03-14 1999-02-16 Matsushita Electric Industrial Co., Ltd. Recording area management method, error recovery processing method, and storage apparatus
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
US5901318A (en) * 1996-05-06 1999-05-04 Hewlett-Packard Company Method and system for optimizing code
JP3159113B2 (ja) * 1996-06-19 2001-04-23 セイコーエプソン株式会社 画像形成方法及び画像形成装置
JPH1021083A (ja) * 1996-07-02 1998-01-23 Hitachi Ltd ネットワーク接続された計算機システムにおけるデータ処理方法
US5958061A (en) * 1996-07-24 1999-09-28 Transmeta Corporation Host microprocessor with apparatus for temporarily holding target processor state
AU3666697A (en) * 1996-08-20 1998-03-06 Idea Corporation A method for identifying hard-to-predict branches to enhance processor performance
US5854933A (en) * 1996-08-20 1998-12-29 Intel Corporation Method for optimizing a computer program by moving certain load and store instructions out of a loop
US6199152B1 (en) 1996-08-22 2001-03-06 Transmeta Corporation Translated memory protection apparatus for an advanced microprocessor
US5815686A (en) * 1996-09-12 1998-09-29 Silicon Graphics, Inc. Method and apparatus for address space translation using a TLB
US6052530A (en) * 1996-10-09 2000-04-18 Hewlett-Packard Co. Dynamic translation system and method for optimally translating computer code
US5893105A (en) * 1996-11-12 1999-04-06 Micrografx, Inc. Executable flowchart
US5887159A (en) * 1996-12-11 1999-03-23 Digital Equipment Corporation Dynamically determining instruction hint fields
US5889996A (en) * 1996-12-16 1999-03-30 Novell Inc. Accelerator for interpretive environments
US5896522A (en) * 1996-12-31 1999-04-20 Unisys Corporation Selective emulation interpretation using transformed instructions
US5983310A (en) 1997-02-13 1999-11-09 Novell, Inc. Pin management of accelerator for interpretive environments
US5933640A (en) * 1997-02-26 1999-08-03 Digital Equipment Corporation Method for analyzing and presenting test execution flows of programs
US6064818A (en) * 1997-04-10 2000-05-16 International Business Machines Corporation Straight path optimization for compilers
CA2283772C (en) * 1997-07-11 2002-10-15 Transmeta Corporation Host microprocessor with apparatus for temporarily holding target processor state
CN1107909C (zh) * 1997-07-11 2003-05-07 全斯美达有限公司 带临时保存目标处理器状态的装置的主处理器
US6049667A (en) * 1997-08-15 2000-04-11 International Business Machines Corporation Computer system, method of compiling and method of accessing address space with pointer of different width therefrom
US6865735B1 (en) * 1997-10-07 2005-03-08 University Of Washington Process for rewriting executable content on a network server or desktop machine in order to enforce site specific properties
US5956758A (en) * 1997-10-31 1999-09-21 Digital Equipment Corporation Method for determining target address of computed jump instructions in executable programs
US6314564B1 (en) * 1997-11-17 2001-11-06 Agere Systems Guardian Corp. Method for resolving arbitrarily complex expressions at link-time
US6071317A (en) * 1997-12-11 2000-06-06 Digits Corp. Object code logic analysis and automated modification system and method
US6631514B1 (en) * 1998-01-06 2003-10-07 Hewlett-Packard Development, L.P. Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
EP0938045A1 (en) * 1998-02-19 1999-08-25 IMEC vzw Method and apparatus for efficient verification using a generalised partial order analysis
US6614934B1 (en) 1998-03-06 2003-09-02 Divio, Inc. Method and apparatus for concatenating bits of odd-length words
US6512852B1 (en) * 1998-03-06 2003-01-28 Divio, Inc. Method and apparatus for concatenating bits of odd-length words
US6141732A (en) * 1998-03-24 2000-10-31 Novell, Inc. Burst-loading of instructions into processor cache by execution of linked jump instructions embedded in cache line size blocks
US6578193B1 (en) 1998-03-24 2003-06-10 Novell, Inc. Endian-neutral loader for interpretive environment
US6356996B1 (en) 1998-03-24 2002-03-12 Novell, Inc. Cache fencing for interpretive environments
US6075942A (en) * 1998-05-04 2000-06-13 Sun Microsystems, Inc. Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers
US6407739B1 (en) 1998-08-19 2002-06-18 James C. Wen Article and method for displaying a graphical history list
DE19840029C1 (de) * 1998-09-02 2000-04-20 Siemens Ag Verfahren zum Linken von in einen Arbeitsspeicher eines Prozessors nachgeladenen Programmodulen auf einer Chipkarte
JP4158239B2 (ja) * 1998-09-08 2008-10-01 ソニー株式会社 情報処理装置および方法、並びに記録媒体
US6163764A (en) * 1998-10-12 2000-12-19 Intel Corporation Emulation of an instruction set on an instruction set architecture transition
AU775431B2 (en) * 1998-10-16 2004-07-29 Computer Associates Think, Inc. Accessing a hierarchical data store through an SQL input
WO2000028415A2 (de) * 1998-11-11 2000-05-18 Fujitsu Siemens Computers Gmbh Verfahren zum dynamischen umsetzen und ausführen von objektcode
US6862635B1 (en) * 1998-11-13 2005-03-01 Cray Inc. Synchronization techniques in a multithreaded environment
US6480818B1 (en) 1998-11-13 2002-11-12 Cray Inc. Debugging techniques in a multithreaded environment
US6952827B1 (en) * 1998-11-13 2005-10-04 Cray Inc. User program and operating system interface in a multithreaded environment
US6314471B1 (en) 1998-11-13 2001-11-06 Cray Inc. Techniques for an interrupt free operating system
GB2344907A (en) * 1998-12-19 2000-06-21 Int Computers Ltd Instruction translation and execution mechanism
US6230313B1 (en) * 1998-12-23 2001-05-08 Cray Inc. Parallelism performance analysis based on execution trace information
US6430676B1 (en) 1998-12-23 2002-08-06 Cray Inc. Method and system for calculating instruction lookahead
US6415433B1 (en) * 1998-12-23 2002-07-02 Cray Inc. Method and system for identifying locations to move portions of the computer program
US6353829B1 (en) 1998-12-23 2002-03-05 Cray Inc. Method and system for memory allocation in a multiprocessing environment
US6665688B1 (en) 1998-12-23 2003-12-16 Cray Inc. Method and system for automatically regenerating data on-demand
US6792597B1 (en) * 1999-03-04 2004-09-14 Wysdom Wireless, Inc. Automatic consistency checking of computer programs
GB2348305A (en) * 1999-03-24 2000-09-27 Int Computers Ltd Instruction execution mechanism
US6370683B1 (en) * 1999-05-07 2002-04-09 Arnold Sobers Computer software for generating flowchart images of a source program
US7146354B1 (en) * 1999-06-18 2006-12-05 F5 Networks, Inc. Method and system for network load balancing with a compound data structure
US6393606B1 (en) * 1999-06-25 2002-05-21 Agilent Technologies, Inc. Inverse assembler
US7734457B2 (en) * 1999-10-16 2010-06-08 Computer Associates Think, Inc. Method and system for generating dynamic comparison models
JP3356742B2 (ja) * 1999-11-17 2002-12-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム実行方法
US6748584B1 (en) * 1999-12-29 2004-06-08 Veritas Operating Corporation Method for determining the degree to which changed code has been exercised
US6804814B1 (en) 1999-12-29 2004-10-12 Veritas Operating Corporation Method for simulating back program execution from a traceback sequence
US6745383B1 (en) * 1999-12-29 2004-06-01 Veritas Operating Corporation Early warning mechanism for enhancing enterprise availability
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
DE10101346B4 (de) * 2000-03-08 2009-12-24 International Business Machines Corp. Verfahren zum automatischen Umsetzen von Daten, die in einem bestimmten Laufzeitcodierungssystem erzeugt wurden, für die Verarbeitung in einem anderen Laufzeitcodierungssystem
US6968469B1 (en) 2000-06-16 2005-11-22 Transmeta Corporation System and method for preserving internal processor context when the processor is powered down and restoring the internal processor context when processor is restored
US20020129336A1 (en) * 2000-12-19 2002-09-12 Bolding Joe D. Automatic symbol table selection in a multi-cell environment
EP1308838A3 (en) * 2001-10-31 2007-12-19 Aplix Corporation Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code
ATE381059T1 (de) * 2001-10-31 2007-12-15 Aplix Corp System zum ausführen von zwischenkode, methode zum ausführen von zwischenkode, und computerprogrammprodukt zum ausführen von zwischenkode
US6876996B2 (en) * 2001-11-14 2005-04-05 Sun Microsystems, Inc. Method and apparatus for using a shared library mechanism to facilitate sharing of metadata
JP4044756B2 (ja) * 2001-12-11 2008-02-06 松下電器産業株式会社 プログラム変換装置、プログラム変換方法、及び当該プログラム変換装置を実現するプログラム
US7251811B2 (en) * 2002-01-02 2007-07-31 Intel Corporation Controlling compatibility levels of binary translations between instruction set architectures
US7000226B2 (en) * 2002-01-02 2006-02-14 Intel Corporation Exception masking in binary translation
WO2004002044A2 (en) * 2002-02-01 2003-12-31 John Fairweather A system for exchanging binary data
US7331040B2 (en) * 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
GB0202728D0 (en) * 2002-02-06 2002-03-27 Transitive Technologies Ltd Condition code flag emulation for program code conversion
GB0215035D0 (en) * 2002-06-28 2002-08-07 Critical Blue Ltd Code generation method
US7024663B2 (en) * 2002-07-10 2006-04-04 Micron Technology, Inc. Method and system for generating object code to facilitate predictive memory retrieval
US7107580B2 (en) * 2003-01-07 2006-09-12 Intel Corporation Binary translation of self-modifying code
US7058938B2 (en) * 2003-03-05 2006-06-06 Intel Corporation Method and system for scheduling software pipelined loops
US7536682B2 (en) * 2003-04-22 2009-05-19 International Business Machines Corporation Method and apparatus for performing interpreter optimizations during program code conversion
US7543284B2 (en) * 2003-04-22 2009-06-02 Transitive Limited Partial dead code elimination optimizations for program code conversion
GB2400938B (en) * 2003-04-22 2005-07-06 Transitive Ltd Method and apparatus for performing lazy byteswapping optimizations during program code conversion
GB0309056D0 (en) * 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
US20040268326A1 (en) * 2003-06-26 2004-12-30 Hong Wang Multiple instruction set architecture code format
WO2005015389A1 (en) * 2003-07-11 2005-02-17 Computer Associates Think, Inc. Adding user-defined objects to a modeling tool
US7434209B2 (en) * 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code
US7543270B1 (en) * 2004-01-23 2009-06-02 The Math Works, Inc. Tracing output descriptions generated from corresponding input descriptions
US20050235272A1 (en) * 2004-04-20 2005-10-20 General Electric Company Systems, methods and apparatus for image annotation
US7721271B2 (en) * 2004-04-22 2010-05-18 Microsoft Corporation Language localization and intercepting data using translation tables
US7765539B1 (en) 2004-05-19 2010-07-27 Nintendo Co., Ltd. System and method for trans-compiling video games
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
US20070006178A1 (en) * 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US20070089097A1 (en) * 2005-10-13 2007-04-19 Liangxiao Hu Region based code straightening
JP4712512B2 (ja) * 2005-10-14 2011-06-29 富士通株式会社 プログラム変換プログラム、プログラム変換装置、プログラム変換方法
US7743370B1 (en) * 2005-10-17 2010-06-22 Unisys Corporation System and methods for determination of independence of sub-graphs in a graph-based intermediate representation of program instructions
US7813909B2 (en) * 2006-05-03 2010-10-12 Sony Computer Entertainment Inc. Register mapping in emulation of a target system on a host system
US7770050B2 (en) * 2006-05-03 2010-08-03 Sony Computer Entertainment Inc. Method and apparatus for resolving clock management issues in emulation involving both interpreted and translated code
US7792666B2 (en) * 2006-05-03 2010-09-07 Sony Computer Entertainment Inc. Translation block invalidation prehints in emulation of a target system on a host system
US8751946B2 (en) * 2006-04-05 2014-06-10 International Business Machines Corporation Enhanced display of properties for a program object
US8812556B2 (en) * 2006-04-06 2014-08-19 International Business Machines Corporation Storing modification data for recreating modifications
US7716653B2 (en) * 2006-04-06 2010-05-11 International Business Machines Corporation Configurable importers and resource writers for converting data into another format
EP2013680B1 (en) * 2006-05-03 2018-08-08 Sony Interactive Entertainment Inc. Method and apparatus for resolving clock management issues in emulation involving both interpreted and translated code
US8413121B2 (en) * 2006-07-17 2013-04-02 Ca, Inc. Method and system for storing trace events in a database table
US8245202B2 (en) * 2007-04-18 2012-08-14 Sony Computer Entertainment Inc. Processor emulation using speculative forward translation
US8166279B2 (en) * 2007-05-03 2012-04-24 International Business Machines Corporation Method for predictive decoding of a load tagged pointer instruction
US8051411B2 (en) * 2007-08-08 2011-11-01 National Tsing Hua University Method for copy propagations for a processor with distributed register file design
DE102007038763A1 (de) * 2007-08-16 2009-02-19 Siemens Ag Verfahren und Vorrichtung zur Sicherung eines Programms gegen eine Kontrollflussmanipulation und gegen einen fehlerhaften Programmablauf
US8060356B2 (en) 2007-12-19 2011-11-15 Sony Computer Entertainment Inc. Processor emulation using fragment level translation
US8423968B2 (en) * 2008-02-11 2013-04-16 International Business Machines Corporation Template-based vertical microcode instruction trace generation
US7996686B2 (en) * 2008-07-07 2011-08-09 International Business Machines Corporation Branch trace methodology
US8261243B2 (en) * 2008-08-12 2012-09-04 International Business Machines Corporation Selective execution of trace mechanisms for applications having different bit structures
US20100218171A1 (en) * 2009-02-26 2010-08-26 Computer Measurement Laboratory, Inc. Computer bus monitoring for the adaptive control of executing software processes
US8561033B2 (en) * 2010-07-30 2013-10-15 International Business Machines Corporation Selective branch-triggered trace generation apparatus and method
US9104508B2 (en) 2012-01-18 2015-08-11 International Business Machines Corporation Providing by one program to another program access to a warning track facility
US9110878B2 (en) * 2012-01-18 2015-08-18 International Business Machines Corporation Use of a warning track interruption facility by a program
US8850450B2 (en) 2012-01-18 2014-09-30 International Business Machines Corporation Warning track interruption facility
JP5987501B2 (ja) * 2012-06-29 2016-09-07 富士通株式会社 分岐アドレス管理プログラム、方法、及び装置
US9323536B2 (en) * 2013-05-02 2016-04-26 Arm Limited Identification of missing call and return instructions for management of a return address stack
US9298433B2 (en) * 2013-05-02 2016-03-29 Facebook, Inc. Optimizing intermediate representation of script code for fast path execution
US9141383B2 (en) * 2013-08-09 2015-09-22 Oracle International Corporation Subprocess definition and visualization in BPEL
US9524178B2 (en) * 2013-12-30 2016-12-20 Unisys Corporation Defining an instruction path to be compiled by a just-in-time (JIT) compiler
JP2015133031A (ja) * 2014-01-15 2015-07-23 株式会社日立製作所 プログラム分析装置及びプログラム分析方法
WO2015141150A1 (ja) * 2014-03-19 2015-09-24 日本電気株式会社 ソースコード生成装置、ソースコード生成方法、及び、記録媒体
US11265202B2 (en) 2015-12-04 2022-03-01 Vmware, Inc. Integrated automated application deployment
US20170161101A1 (en) * 2015-12-04 2017-06-08 Vmware, Inc. Modularized automated-application-release-management subsystem
US20170177358A1 (en) * 2015-12-20 2017-06-22 Intel Corporation Instruction and Logic for Getting a Column of Data
US10628167B2 (en) 2018-02-21 2020-04-21 International Business Machines Corporation Runtime detection of code modification
US10901698B2 (en) * 2018-11-30 2021-01-26 International Business Machines Corporation Command tool development using a description file

Family Cites Families (6)

* 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
JPH0668724B2 (ja) * 1988-02-01 1994-08-31 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン シミユレーシヨン方法
WO1990001738A1 (en) * 1988-07-29 1990-02-22 Hunter Systems Software, Inc. Machine process for translating programs in binary machine language into another binary machine language
US5313614A (en) * 1988-12-06 1994-05-17 At&T Bell Laboratories Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems
US5175828A (en) * 1989-02-13 1992-12-29 Hewlett-Packard Company Method and apparatus for dynamically linking subprogram to main program using tabled procedure name comparison

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001504957A (ja) * 1996-09-26 2001-04-10 トランスメタ・コーポレーション 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置

Also Published As

Publication number Publication date
US5652889A (en) 1997-07-29
AU1667692A (en) 1992-10-06
JPH07122854B2 (ja) 1995-12-25
US5507030A (en) 1996-04-09
WO1992015937A1 (en) 1992-09-17
AU656964B2 (en) 1995-02-23
CA2081978A1 (en) 1992-09-08
EP0528028A1 (en) 1993-02-24
DE69230122T2 (de) 2000-06-15
CA2081978C (en) 1998-05-19
EP0528028B1 (en) 1999-10-13
IE920749A1 (en) 1992-09-09
DE69230122D1 (de) 1999-11-18
US5649203A (en) 1997-07-15

Similar Documents

Publication Publication Date Title
JPH05508504A (ja) プログラム翻訳方法
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
AU656577B2 (en) Branch resolution via backward symbolic execution
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
US5301325A (en) Use of stack depth to identify architechture and calling standard dependencies in machine code
US5450575A (en) Use of stack depth to identify machine code mistakes
JPH06501583A (ja) 多言語最適化コンパイラ内のフォールディングメカニズムを構成する方法
EP0735464B1 (en) Method and apparatus for computer code processing in a code translator
Wielemaker SWI-Prolog 5.1
Wielemaker SWI-Prolog 4.0
George A framework for install-time optimization of binary dynamic-link libraries