JPH0727464B2 - 後方記号実行による分岐分析 - Google Patents
後方記号実行による分岐分析Info
- Publication number
- JPH0727464B2 JPH0727464B2 JP4508277A JP50827792A JPH0727464B2 JP H0727464 B2 JPH0727464 B2 JP H0727464B2 JP 4508277 A JP4508277 A JP 4508277A JP 50827792 A JP50827792 A JP 50827792A JP H0727464 B2 JPH0727464 B2 JP H0727464B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- execution
- address
- program
- display
- 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.)
- Expired - Fee Related
Links
- 238000004458 analytical method Methods 0.000 title description 23
- 238000000034 method Methods 0.000 claims description 152
- 238000012546 transfer Methods 0.000 claims description 134
- 238000006073 displacement reaction Methods 0.000 claims description 37
- 230000008859 change Effects 0.000 claims description 31
- 230000006870 function Effects 0.000 claims description 22
- 230000000694 effects Effects 0.000 claims description 20
- 230000002441 reversible effect Effects 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 13
- 238000007689 inspection Methods 0.000 claims description 8
- 230000009466 transformation Effects 0.000 claims description 8
- 238000012986 modification Methods 0.000 claims description 5
- 230000004048 modification Effects 0.000 claims description 5
- 230000001419 dependent effect Effects 0.000 claims description 4
- 230000004075 alteration Effects 0.000 claims 1
- 230000000977 initiatory effect Effects 0.000 claims 1
- 230000000063 preceeding effect Effects 0.000 claims 1
- 230000009467 reduction Effects 0.000 claims 1
- 238000006243 chemical reaction Methods 0.000 description 43
- 230000008569 process Effects 0.000 description 34
- 238000010586 diagram Methods 0.000 description 25
- 238000013519 translation Methods 0.000 description 24
- 230000014616 translation Effects 0.000 description 23
- 238000004364 calculation method Methods 0.000 description 16
- 238000012360 testing method Methods 0.000 description 16
- 239000013598 vector Substances 0.000 description 13
- 230000009471 action Effects 0.000 description 11
- 238000007667 floating Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 10
- 238000007792 addition Methods 0.000 description 6
- 230000015572 biosynthetic process Effects 0.000 description 6
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 description 6
- 230000036961 partial effect Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 230000000153 supplemental effect Effects 0.000 description 4
- 238000000844 transformation Methods 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 3
- 101100138677 Arabidopsis thaliana NPF8.1 gene Proteins 0.000 description 2
- 101150059273 PTR1 gene Proteins 0.000 description 2
- 101100262635 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) UBR1 gene Proteins 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006386 memory function Effects 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- ZKEHTYWGPMMGBC-XUXIUFHCSA-N Ala-Leu-Leu-Ser Chemical compound C[C@H](N)C(=O)N[C@@H](CC(C)C)C(=O)N[C@@H](CC(C)C)C(=O)N[C@@H](CO)C(O)=O ZKEHTYWGPMMGBC-XUXIUFHCSA-N 0.000 description 1
- 101100112084 Arabidopsis thaliana CRT2 gene Proteins 0.000 description 1
- 101100263760 Caenorhabditis elegans vms-1 gene Proteins 0.000 description 1
- 101100235014 Capsicum annuum LCY1 gene Proteins 0.000 description 1
- 206010011878 Deafness Diseases 0.000 description 1
- 102100034004 Gamma-adducin Human genes 0.000 description 1
- 101000799011 Homo sapiens Gamma-adducin Proteins 0.000 description 1
- 101150066014 PUP1 gene Proteins 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 244000309464 bull Species 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 230000003750 conditioning effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000009969 flowable effect Effects 0.000 description 1
- 208000017482 infantile neuronal ceroid lipofuscinosis Diseases 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- VLCQZHSMCYCDJL-UHFFFAOYSA-N tribenuron methyl Chemical compound COC(=O)C1=CC=CC=C1S(=O)(=O)NC(=O)N(C)C1=NC(C)=NC(OC)=N1 VLCQZHSMCYCDJL-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Charge And Discharge Circuits For Batteries Or The Like (AREA)
- Secondary Cells (AREA)
- Battery Mounting, Suspending (AREA)
- Error Detection And Correction (AREA)
- Debugging And Monitoring (AREA)
Description
ードの変換に係り、より詳細には、変換されるべき全て
のプログラムコードの位置がそのプログラムコードを実
際に実行するまで分からない場合にそのプログラムコー
ドをある言語から別の言語に変換することに係る。
やフォートランやコボルやPL/I又はCのような高レベル
言語をマシン言語に変換するものが良く知られている。
これらの言語の場合、プログラムは英語のようなスタイ
ルでコード化される。コンパイラーと称する言語変換プ
ログラムは、高レベル言語のプログラム(ソースプログ
ラムと称する)を読み取って、それをマシン言語プログ
ラム(目的プログラムと称する)に変換する。
する容易さに加えて、マシン独立なことである。それら
は、ハードウェアマシン及び命令セットの特性を秘めて
いる。しかしながら、マシン言語のプログラミングが所
望されるアプリケーションは多数ある。プログラムの実
行速度を高めるために、繰り返し実行される手順のコー
ドをマシン言語で書き込み、その手順を実行するに必要
なマシンサイクルの数を最小限に抑えることがしばしば
望まれる。又、多くのコンピュータシステムでは、特定
コンピュータの特定ハードウェア特徴を直接的に制御す
るためにマシン言語のプログラミングが必要とされる。
例えば、メモリ及び入力/出力装置を管理するオペレー
ティングシステムの部分は、しばしばマシン言語で書か
れる。
てアッセンブリー言語のコードで書かれている。アッセ
ンブリー言語では、プログラマーがメモリ位置及び命令
に対して記号名を用いてマシンのオペレーションを指定
することができる。アッセンブラーと称するプログラム
は、アッセンブリー言語のプログラムを2進のマシンコ
ードに変換する。アッセンブラーは、記号の値及びデー
タエレメントのアドレスを記憶すう全ての作業を実行す
る。しかしながら、高レベル言語とは異なり、各アッセ
ンブリー言語命令は厳密に1つのマシン命令に対応して
いる。
種類のコンピュータのためのマシン言語に変換する必要
性が生じている。この必要性は、コスト効率のより高い
新規なコンピュータアーキテクチャーを生み出したコン
ピュータハードウェアの急速な進歩によって生じたもの
である。特に、ここ10年間以上にわたり、最も性能の高
い汎用のコンピュータは、「コンプレックス命令セット
アーキテクチャー(complex instruction set architec
ture)」(CISC)を用いており、これは命令セット中に
非常に多数の命令を有することを特徴とするもので、複
雑なメモリアクセスモードを伴う可変長さ命令及びメモ
リ対メモリ命令をしばしば含んでいる。このCISCの主な
例が、VAX(登録商標)命令セットであり、これに用い
られる命令は、1ないし2バイトのOPコードと、0ない
し6のオペランド指定子とを有し、各々のオペランド指
定子は1バイトないし18バイトの長さである。オペラン
ド指定子のサイズは、アドレスモード、変位のサイズ
(バイト、ワード又はロングワード)等々に基づいてい
る。オペランド指定子の第1バイトはそのオペランドの
ためのアドレスモードを記述し、一方、OPコードはオペ
ランドの数0から6を指定する。しかしながら、OPコー
ド自体は常に命令の全長を決定するものではない。とい
うのは、異なった長さのオペランド指定子と共に多数の
OPコードを使用できるからである。VAX命令セットの別
の特徴は、クオドワード又はロングワードレファレンス
に加えて、バイト又はバイトストリングのメモリレファ
レンスを使用することにあり、即ちメモリレファレンス
は、非整列バイトレファレンスを含んで1バイトから多
ワードまで可変長さのものである。
共に、アッセンブリー言語のプログラミングを容易なも
のにした。中央処理ユニット(CPU)がメモリよりも非
常に高速度であった時代には、1命令当たりにより多く
の作業を行うことが効果的であった。というのは、さも
なくば、CPUはメモリが命令を送りだすのを待って著し
い時間を費やしてしまうからである。しかしながら、近
年、メモリ速度の進歩と、オン・チップキャッシュやハ
イアラーキーキャッシュのような技術により、CISCアー
キテクチャーの主たる利点がなくなってしまった。それ
故、命令アーキテクチャーの選択は、今や、合理的なコ
ストで最大の実行速度を得るためにCPUに要求される複
雑さによって決められている。これらのことから、簡易
な命令セットアーキテクチャー(RISC)が優れた性能と
コスト効率を有することが示される。
なくて簡単にデコードできることを特徴とすると共に、
全ての演算/論理オペレーションをレジスタ対レジスタ
で行わねばならないことを特徴とする。もう1つの特徴
としては、複雑なメモリアクセスが許されず、即ち全て
のメモリアクセスはレジスタのロード/記憶オペレーシ
ョンであり、そして少数の比較的簡単なアドレスモード
しかなく、ひいてはオペランドアドレスを指定する方法
が若干しかない。命令は1つの長さしかなく、メモリア
クセスは、通常は整列された標準データ巾のものであ
る。命令の実行は、マイクロコードと異なり直接固定布
線型のものである。命令のサイクルタイムは固定で、命
令は1つの短いサイクル(平均で、というのは、パイプ
ライン動作により実際の実行は数サイクルに分散される
ので)に全て実行するように比較的簡単に定められる。
に対しておびただしい量のコンピュータソフトウェアが
これまでに書かれており、これらソフトウェアの多く
は、高レベル言語のコンパイラーから生じたものではな
いマシン言語のプログラムを含んでいる。これらの場
合、新たな命令アーキテクチャーに対して書かれたコン
パイラーを用いてソースコードをコンパイルし直すとい
う通常の方法によりソフトウェアをその新たなコンピュ
ータアーキテクチャーに「移行」することができない。
ン言語プログラムに対してアッセンブリー言語コードが
存在する。それ故、各々のアッセンブリー言語命令を、
同じ基本機能を行う新たな命令アーキテクチャーの1つ
以上のマシン命令に変換するために変換プログラムを書
くことができねばならない。このような直接的な変換を
実施できるかどうかは、新たな命令アーキテクチャーの
コンパチビリティによって左右される。例えば、VAX命
令を含むCISCコードをRISCコードに変換する場合に、こ
の変換を実施できるかどうかは、RISC CPUハードウェア
及びRISC命令セットの革新によって著しく改善される。
これについては、参考としてここに取り上げる1990年6
月29日出願の「高性能プロセッサにおける分岐予想(Br
anch Prediction in High-Performance Processor)」
と題するリチャード・L・サイト及びリチャード・T・
ウイテク氏の米国特許出願07/547,589に開示されてい
る。
ベル即ちアッセンブリー言語のソースコードの完全なセ
ット即ちコヒレントなセットが存在しないような2進マ
シン言語コードを含んでいる。ここでは、変換すべき全
ての2進マシンコードを探索するという非常に困難な問
題が生じる。通常の場合、プログラムの中の2進マシン
コードの一部分はその実行時間までに探すことができな
い。というのは、このコードは計算された行き先アドレ
スを有する「ジャンプ」や「コール」命令のような少な
くとも1つの実行転送命令を含んでいるからである。実
行時間の際に、行き先アドレスが計算され、実行がその
命令から「欠落」コードへと転送される。
幾つかが実行時間まで形成されない。これらの例外的な
場合というのは一般的にプログラミング技術が不充分な
ことによるものであるが、実行時間には、例えば機密保
持の目的で「ライセンスチェック」ルーチンの一部とし
てコードがしばしば形成される。「ライセンスチェッ
ク」ルーチンでは、例えば、一連の命令がスクラッチメ
モリエリアへ書き込まれそして一連の命令が実行され
る。ライセンスルーチンを欺くためには、スクラッチエ
リアに書き込まれた一連の命令からルーチンの動作モー
ドを見分けねばならない。しかし、一連の命令は、実行
時間まで存在しないので、プログラムの通常のプリント
アウトやダンプ動作では得られない。
するという問題がある場合には、コードが実行時間に解
読される。インタープリターの変換プロセスはアッセン
ブリー言語のトランスレーターと同様であるが、実行時
間の際の解読には変換されたコードの実行よりも約2桁
も時間がかかる。というのは、各々のマシン命令を解読
するためにインタープリタープログラムの中の多数の命
令を実行しなければならないからである。不完全な変換
を使用できるようにするために、新たな命令アーキテク
チャーを用いたCPUにオリジナルプログラムを送るとき
には、インタープリタープログラムと、オリジナルプロ
グラムのコピーと、アドレス変換情報が、変換されたコ
ードと共に与えられる。変換されたコードの実行が、変
換されないコードに対するオリジナルプログラム中の実
行転送に対応するポイントに達したときに、CPUはその
実行をインタープリタープログラムに転送し、オリジナ
ルプログラムの中の変換されないコードを解読する。イ
ンタープリターは各々の変換されないマシン命令を新た
なアーキテクチャーに対する1つ以上のマシン命令に次
々に変換し、それを実行する。インタープリターは、ア
ドレス変換情報を用いてその実行を適当な時間に変換さ
れたプログラムへ転送して戻す。しかし、変換されない
コードが存在すると、実行時間までにほとんど全ての命
令を探索して変換することができない限り、性能に著し
い影響が及ぶ。
た行き先アドレスを有する実行転送命令を含んでいるの
で、通常の場合には探索することができない。本発明の
重要な特徴によれば、実行転送命令からプログラムを通
して後方サーチを行って、プログラム内の命令のアドレ
スに関して固定のアドレス値に対して計算行き先アドレ
スを求めるのに用いた少なくとも1つの手前の命令を見
つけることにより、計算行き先アドレスが求められる。
それ故、その計算行き先アドレスを求めたアドレス値に
おいてそのプログラムの少なくとも1つの追加の命令が
見つけられる。
のプロセスにより計算行き先アドレスが求められ、この
プロセスでは、実行転送命令の行き先アドレスが記号表
現によって示されそして各々の手前の命令を作用を表す
ようにこの表現が次々に変更される。例えば、実行転送
命令を「JMP R6+4」とする。これは、汎用レジスタR6
の内容に4を加えることにより計算した絶対アドレスに
実行を転送するものである。この計算行き先アドレス
は、例えば、「R6+4」という記号で表される。それよ
り後方のプログラム中でR6を参照する次の命令が「MOVA
B 4(R5),R6」であるとする。これは、汎用レジスタR5
の内容に4を加えてその和をR6に入れるものである。記
号表現「R6+4」は手前の「MOVAB 4(R5),R6」命令を
通して押し戻され、変更した表現「R5+8」を得る。こ
の変更した表現は、手前の命令の後に記号表現が有して
いたものと同じ値をその手前の命令の前に有している。
アドレスもしくは像関連アドレスに対して求められるま
でか、或いはその計算行き先アドレスの値に影響するが
後方記号実行を許さないような手前の命令に到達するま
で続けられる。この後方記号実行は、例えば、後方記号
実行で計算行き先アドレスを求められないか又は求める
ことがほとんどないような幾つかの命令(例えば。XORB
2 R1,R2)については、許可されない。この場合には、
計算行き先アドレスを「未知(UNKNOWN)」の記号値へ
減少して欠落コードの可能性を指示するのが好都合であ
る。しかしながら、限定された命令セット(例えば、汎
用レジスタを伴う加算、減算、ロード及び記憶)のみに
ついて記号実行を許すことにより、典型的なプログラム
に見られる計算行き先アドレスのほとんどの部分を求め
ることができるようになる。
号実行は、プログラムに対して見い出される命令の流れ
図を構成しながら実行される。この流れ図はプログラム
に対して見い出された命令の基本的なブロックを相互接
続する実行経路を含むものである。各基本的なブロック
は、一連の連続する命令で、基本ブロックの開始部に単
一の既知の入口ポイントを有しそしてブロックの終了部
に単一の出口ポイントを有する。実行は基本ブロックの
開始部のみへ転送され、そして基本ブロックの終了部の
みから転送される。
記号実行が基本ブロックの入口ポイントに到達すると、
後方記号実行は、その所与の実行転送命令に対してまだ
検査されていない各々の手前のブロックに向かって後方
に進められる。この最後の条件付けは、後方記号実行に
無限のループができるのを回避する。この目的で、例え
ば、計算行き先アドレスを有する別々の所与の実行転送
命令ごとに後方記号実行が開始されるたびに「エポック
・ナンバー」が増加され、そして後方記号実行が各ブロ
ックを通して実行されるときに各ブロックのエポック・
ナンバーアトリビュートにその値のエポック・ナンバー
が指定される。
ら複数の他のブロックの終了部へと進められるので、所
与の実行転送命令の計算行き先アドレスは複数の異なっ
た値に対して求められることが考えられる。又、後方記
号実行のプロセスは、基本ブロックとして識別された一
連の連続する命令を2つの基本ブロックとして識別し直
すことも考えられる。これは、計算行き先アドレスが、
基本ブロックにおいてその基本ブロック内の第1命令の
アドレス以外のコードのアドレスであるとされたときに
生じる。
命令が探索されるか、又は既に探索された命令に対して
新たな実行転送経路が発見される。既に探索された命令
に対して新たな実行転送経路が発見されたときには、既
に探索された命令からその新たな経路に沿った後方記号
実行により、その既に探索された命令に続く実行転送命
令における計算行き先アドレスに対し1つ以上の追加の
値が求められることが考えられる。それ故、この場合
は、後方記号実行が繰り返される。後方記号実行の繰り
返しにより、既に探索された命令に対し追加の実行転送
経路が探索されて、後方記号実行を更に繰り返すことも
あるが、最終的には追加の実行転送経路は見つからず、
プロセスは終了となる。
の詳細な説明から明らかとなろう。
特に構成されたパイプライン式処理ユニットを有するCI
SCデジタルコンピュータシステムのブロック図である。
行するときの図1のパイプライン処理ユニットの状態を
示す図である。
いフォーマットを示す図である。
長さの命令を示す図である。
コードを示すテーブルである。
図である。
トを示すブロック図である。
つ変換プログラムに変換するためのアナライザー及びRI
SCコードジェネレータを含むトランスレーターのブロッ
ク図である。
そのオリジナルCISCプログラムの非変換部分を解読する
インタープリターとの間で実行が分担されるときのRISC
コンピュータからのデータ及びプログラム入力と、デー
タ出力とを示すブロック図である。
図8のRISCコードジェネレータのステップを示すフロー
チャートである。
ときのインタープリター及びその動作を示すフローチャ
ートである。
へ移行するかを決定するアドレスチェックルーチンのフ
ローチャートである。
ャートである。
ページであって、変換されたオリジナルのCISCプログラ
ムのメモリマップを含む概要ページを示す図である。
である。
れ図である。
めにトランスレーターのアナライザーによって使用され
るデータ構造を示すブロック図である。
めにアナライザーによって使用される手順を示すフロー
チャートである。
に実行転送命令からの経路を検査するためにアナライザ
ーによって使用される手順を示すフローチャートであ
る。
レスの値を見つけようとする試みにおいて後方記号実行
を行うためにアナライザーによって使用される手順のフ
ローチャートである。
用レジスタと、直接又は間接メモリアクセスの指示とに
対する記号表現において項目の固定フォーマットを示し
た図である。
用「ベース」レジスタと、特定の汎用「インデックス」
レジスタと、一定のオフセットと、直接又は間接メモリ
アクセスの指示とに対する記号表現において項目の固定
フォーマットを示した図である。
で、破線で示す実行転送経路を含んだ間接的なプログラ
ムループを示す図である。
いて基本ブロックをサーチするために後方記号実行に用
いられる手順のフローチャートである。
てその記号表現を変更し、プログラムの実行中に、命令
実行の直後にその所与の記号表面で表わされるであろう
ものと同じ値を命令実行の直前にその変更した表現で表
すようにするために、後方記号実行に使用される手順を
示すフローチャートである。
するための各々の命令OPコードに対して予め決定するこ
とのできるデータのフォーマットを示す図である。
の表現がコンピュータプログラムの一定アドレスを表す
フォーマットに変換されたか又はコンピュータのオペレ
ーティングシステムの一定アドレスを表すフォーマット
に変換されたかをチェックすると共に、そのアドレスが
プログラム実行転送のための許容できる行き先を表すか
どうかをチェックするためのルーチンを示すフローチャ
ートである。
において巧みなプログラムコードを見つけるための3つ
のスキャニングモードを含む手順を示すフローチャート
である。
ラムコードの位置を識別する実行ログファイルの利点を
取り入れてオリジナルプログラムを繰り返し変換するこ
とによりプログラム変換及び維持を行う一般的な手順を
示すフローチャートである。
及び再変換しそして2つのプログラムを容易に合体でき
ないもしくは同時に変換できない状態においてコンバー
ジェンスをテストするための手順を示すフローチャート
である。
イルを示すと共に、ファイル間のリンケージを示すブロ
ック図である。
ル間のリンケージを利用して、これらプログラムが交互
に変換及び再変換されるときに迅速にコンバージェンス
を得るための手順を示すフローチャートである。
例を図示して以下に詳細に説明する。。しかしながら、
本発明は、ここに開示する特定の形態に限定されるもの
ではなく、請求の範囲に規定した本発明の精神及び範囲
内に入る全ての変更、修正及び等効物も含包するものと
する。
タ(CISC)用のプログラムコードを簡易命令セットコン
ピュータ(RISC)用のプログラムコードに変換するため
に効果的に使用される。先ず、図1を参照すれば、そこ
に示された複雑命令セットのデジタルコンピュータ20
は、中央処理ユニット21と、入力/出力ユニット22と、
メインメモリ23とを備えている。
23内のアドレス可能な記憶位置に記憶される、命令は、
CPUにより実行されるべきオペレーションをコードの形
態で指定するオペレーションコード(OPコード)と、オ
ペランドを探索するための情報を与えるオペランド指定
子とを含んでいる。典型的なCISC命令アーキテクチャー
においては、各命令の最初のバイトがOPコードを含み、
それに続くバイトがオペランド指定子を含む。命令は可
変長さであるのが好ましく、種々の型式の指定子を同じ
OPコードと共に使用することができる。これについて
は、参考としてここに取り上げる1980年12月23日付けの
ストレッカー氏等の米国特許第4,241,397号に開示され
ている。
価ではあるが比較的低速の記憶装置、例えば、ダイナミ
ック・ランダム・アクセス(DRAM)メモリチップで構成
される。CPU21は、メインメモリのアクセスタイムより
も高速度で命令を実行するので、比較的記憶容量の小さ
い高速キャッシュメモリにデータ及び命令の一部分のコ
ピーを保持するメモリアクセスユニット24を備えてい
る。通常、CPUは、データ及び命令をメモリアクセスユ
ニット24のキャッシュメモリから得ることが必要である
が、このキャッシュメモリに必要な命令及びデータが見
つからないときには、メモリアクセスユニットがメイン
メモリユニット23をアクセスし、必要な命令又はデータ
をキャッシュメモリに「再装填」する。
「仮想」アドレスをメインメモリ23に使用される「物
理」アドレスに変換するための変換バッファのような手
段も備えている。この技術により、プログラマーは、メ
インメモリ23に設けられる以上に多数のアドレス可能な
メモリ位置を含む「仮想アドレススペース」を参照する
ことができる。それ故、プログラマーは、メインメモリ
23の制限された記憶容量によってあまり制約を受けるこ
とがない。
チポートレジスタファイル25に含まれた限定された数の
汎用レジスタを参照することができる。これら汎用レジ
スタの幾つかには特定のファンクションを指定すること
ができ、例えば、1つの汎用レジスタは典型的に「プロ
グラムカウンタ」として使用され、ソースオペランドと
して参照されたときにデコードされる命令のアドレスを
与えるか、或いは行き先オペランドとして参照されたと
きにデコードされるべき次の命令のアドレスを指定す
る。
ンユニットによって行われる多数のサブタスクに分割さ
れる。これらのパイプラインファンクションユニット
は、メモリから命令をフェッチするための命令バッファ
26と、このフェッチされた命令をデコードするための命
令デコーダ27と、ソースオペランド指定子によって識別
されたソースオペランドをフェッチするためのオペラン
ドユニット28と、ソースオペランドに基づいて演算、論
理及び特殊なオペレーションを実行して結果を得るため
の実行ユニット29と、行き先オペランド指定子によって
識別されたメモリ位置又はレジスタに結果を記憶するた
めのリタイヤユニット30とを備えている。
造に関する詳細については、参考としてここに取り上げ
る1989年2月3日出願のファイト氏等の「可変長さ命令
アーキテクチャーにおける多数の指定子のデコーディン
グ(Decoding Multiple Specifiers in a Variable Len
gth Instruction Architecture)」と題する米国特許出
願17/307,347を参照されたい。
ル当たり1命令という平均的な速度で命令を実行するよ
うな理想的な状態に対するパイプラインファンクション
ユニット(図1の26ないし30)の状態を示す図である。
一般に、各命令の実行中にはパイプラインユニット26な
いし30の各々により次の段階が実行される。即ち、命令
フェッチ、命令デコード、オペランドフェッチ、実行及
び結果の記憶である。
ブタスクを実行するための最小の時間である。所与のフ
ァンクションユニットは、例えば、メモリアクセスユニ
ット(図1の24)が「再装填」オペレーションを実行し
ているときには、そのメモリアクセスユニットの競合に
より1つのサイクル内にそのサブタスクを実行しないこ
とがある。更に、特に複雑な命令を実行しているときに
は、命令が複雑であるために、所与のファンクションユ
ニットがそのサブタスクを実行するのに2サイクル以上
を要することがある。いずれの場合にも、専用のハード
ウェア段を使用することにより、これらのステップをパ
イプラインオペレーションにおいてある程度オーバーラ
ップさせて、全命令スループットを高めることができ
る。
処理することのできる典型的な命令40を示している。こ
の命令は、参考としてここに取り上げるデジタル・イク
イップメント社のレビー及びエクハウス二世著の「コン
ピュータプログラミング及びアーキテクチャー、VAX−1
1」(1980年)に記載されたVAX(登録商標)可変長さ命
令アーキテクチャーに対応する。この命令40は、1又は
2バイトのオペレーションコード41を含んでいる。第1
バイト42がFD(16進)の値を有する場合には、これがダ
ブルバイトのオペレーションコードとして認識される。
さもなくば、命令デコーダ(図1の27)がそのオペレー
ションコードを1バイトしか含まないものとして認識す
る。命令40は、更に、オペレーションコードの後に6個
までの指定子を含む。
が含まれるかを指示する。所与のオペレーションコード
に関連して使用される指定子は、種々のアトリビュート
及び種々の長さをもつことができる。特定の指定子のア
トリビュートはその指定子の第1バイトのアドレスモー
ドによって少なくとも部分的に決定される。しかしなが
ら、指定子の許容できるアトリビュートは、オペレーシ
ョンコードによって制限を受けることが時々ある。更
に、「即座のアドレッシング」として知られている特定
種類のアドレスモードについては、指定子情報の長さが
その指定子によって指定された「データタイプ」により
決定される。
ブラー表示では、この命令が「ADDL3 R0,#4,L^203(R
2)」と書き表される。マシンコードでは、命令が8バ
イトを含み、一般に45で示されている。第1のバイト
は、23(16進)のオペレーションコードであり、これは
アッセンブラーニューモニック「ADDL3」に対応する。
このオペレーションコードは、第1のロングワードオペ
ランドを第2のロングワードオペランドに加算しそして
ロングワードの結果を行き先位置に記憶すべきであるこ
とを指示する。オペレーションコードに続いて、50(16
進)の値をもつ「レジスタ指定子」がある。16進数の5
は、指定子がレジスタ指定子であることを示し、そして
16進数0は、指定されたレジスタがCPU内のR0汎用レジ
スタであることを示している。それ故、レジスタ指定子
は、第1のソースオペランドが汎用レジスタR0の内容で
あることを指定する。
リテラル指定子」がある。この短リテラル指定子は、第
2のソースオペランドとして値4を指定する。
先を指定する「複雑指定子」の第1バイトがある。16進
数のEは、「ロングワード変位」アドレスモードを指示
し、その場合、それに続く4つのバイトは、複雑指定子
により指定されたアドレスを得るためにベースレジスタ
の内容の値に加算されるべき32ビットのアドレス変位と
して解読される。16進数の2は、汎用レジスタR2をベー
スレジスタとして使用すべきであることを指示する。そ
れ故、複雑指定子は、オペランドコードによって指示さ
れたロングワード加算の和即ち結果を、汎用レジスタR2
の内容に203(16進)の値を加算することにより計算し
たメモリ内のアドレスに記憶すべきであることを指示す
る。
イトをデコーダするためのデコードテーブルが示されて
いる。オペランド指定子の第1バイトの最上位2ビット
がどちらでも0である場合には、そのオペランド指定子
が単一の第1バイトより成り、そしてこのバイトの下位
6ビットは、「短リテラル」と称する6ビット値を指定
するものとして解読もしくはデコードされる。
ない場合には、そのバイトが分岐変位の一部分でないと
仮定すれば、そのバイトは、CPU内の16個の汎用レジス
タR0ないしR15の指定の1つに関連した12のレジスタア
ドレスモードのうちの特定の1つとしてデコードされ
る。このバイトの最上位4ビット(レジスタモードフィ
ールドを構成する)は、アドレスモードを指示するよう
にデコードされ、そして最下位4ビット(汎用レジスタ
アドレスフィールドを構成する)は、16個の汎用レジス
タのうちの特定の1つをアドレスするのに使用される。
は、「インデックスモード」が指定され、レジスタアド
レスフィールドによってアドレスされた汎用レジスタの
内容の値にオペランドのバイトのサイズ(例えば、バイ
ト、ワード、ロングワード、クオドワード、又はオクタ
ワードのデータ形式に対して各々1、2、4、8又16)
が乗算され、その和がその直後の複雑指定子について実
行されるアドレス計算に項として含まれ、次のバイト
は、6ないしF(16進)の値のレジスタモードフィール
ドと、複雑指定子に対してベースレジスタをアドレスす
るレジスタアドレスフィールドとを有していなければな
らない。
は、指定子が「レジスタ指定子」であって、レジスタア
ドレスフィールドによって指示された汎用レジスタにオ
ペランドの値が見い出されるか、或いは指定子が命令の
行き先に対するものである場合には、その指定子は、レ
ジスタアドレスフィールドによって指示された汎用レジ
スタに結果を記憶すべきであることを指定する。
れたレジスタがオペランドに対するメモリアドレスを含
んでいる。ソースオペランドについては、このメモリア
ドレスからオペランドの値が読み出され、そして行き先
オペランドについては、このメモリアドレスに結果が書
き込まれる。、モード6においては、指示されたレジス
タがオペランドのアドレスを含む。レジスタモード7に
おいては、指示された汎用レジスタの内容が、先ず、ア
ドレス計算の前に減少され、モード8においては、指示
された汎用レジスタの内容が、このレジスタを用いてア
ドレスを計算した後に増加される。レジスタモード9は
レジスタモード8と同様であるが、指示された汎用レジ
スタの内容は、オペランド自体ではなくてオペランドア
ドレスが見い出されるメモリ内のアドレスを指定する。
る。変位モードにおいては、モード10、12及び14の場合
に各々バイト、ワード又はロングワードを構成する変位
値が指定の汎用レジスタの内容に加えられ、オペランド
アドレスが得られる。オペランドはモード11、13及び15
においても同様に決定されるが、変位値と汎用レジスタ
の内容との和は、オペランドのアドレスを見つけること
のできるメモリアドレスを識別する。
バイトのレジスタアドレスフィールドは、プログラムカ
ウンタであるレジスタR15を含む汎用レジスタのいずれ
かを指定することができる。モード8及び9の場合に、
プログラムカウンタがアドレスされたとすれば、プログ
ラムカウンタ自体の値が増加され、プログラムの実行は
命令流に置かれたオペランドデータ又はオペランドアド
レスをジャンプさせられる。モード8において、この特
殊なケースは「即時」のアドレスモードとして知られて
おり、モード9については、「絶対」アドレスモードと
して知られている。特に、汎用レジスタ0ないし14のい
ずれかについてモード8及び9がデコードされたときに
は、モード及び汎用レジスタを示すバイトの直後に次の
指定子又は次のオペランドコードが現れる。しかしなが
ら、この即座のモードについては、即時データの多数の
バイトが現れ、バイトの数は指定子のデータ形式によっ
て決定される。
雑であるから、図1のデジタルコンピュータ20は、1サ
イクル当たり1つのVAX可変長さ命令を実行するという
理想に近い性能を得るために非常に複雑なものである。
しかしながら、半導体処理技術及びメモリアーキテクチ
ャーの近年の進歩により、単純な命令のみを実行すると
きにそれに匹敵する性能を有した単一チップの中央処理
ユニットを製造することが可能となった。それに匹敵す
る性能を得るために、いわゆる「簡易命令セットコンピ
ュータ((RISC)が1サイクル当たり1つの命令を実質
的に越える速度で単純な命令を実行する。この性能は、
全ての演算/論理オペレーションをレジスタ対レジスタ
で実行するという条件を課することによりハードウェア
の複雑さを最小限にして得ることができる。更に、複雑
なメモリアクセスは許されず、即ち全てのメモリアクセ
スはレジスタロード/記憶オペレーションであり、少数
の比較的簡単なアドレスモードしかなく、即ち若干のオ
ペランドアドレス指定方法しかない。命令は1つの長さ
しかなく、メモリアクセスは、通常整列された標準デー
タ巾のものである。命令の実行は、マイクロコードとは
異なり直接固定布線型のものである。
ロック図で示されている。このRISCコンピュータ50は、
中央処理ユニット51と、入力/出力ユニット52と、メイ
ンメモリ53とを含んでいる。中央処理ユニット51は、メ
モリアクセスユニット54と、レジスタファイル55と、多
数のファンクションユニット、即ち命令ユニット56、ア
ドレスユニット57、整数・論理実行ユニット58及びフロ
ティングポイント実行ユニット59とを含んでいる。全て
の演算/論理オペレーションはレジスタ対レジスタで行
われるので、実行ユニット58、59はメモリユニット54を
直接アクセスしない。メモリからレジスタへのロードオ
ペレーション及びレジスタからメモリへの記憶オペレー
ションはアドレスユニット57によって実行される。
令を実行するために、命令ユニット56は、リソースを使
用できるときに少なくとも2つの命令を同時にフェッチ
してデコードすることができ、アドレスユニット57、整
数・論理実行ユニット58及びフローティングポイント実
行ユニット59は、3つの異なる命令を同時に実行するこ
とができる。好ましい実施例では、例えば、1つの命令
がカラムAからでそして第2の命令がカラムBからのも
のであるときに、2つの命令を同時にデコードし発生す
ることができる。
いては、参考としてここに取り上げる1990年6月29日出
願の前記リチャード・L・サイト及びリチャード・T・
ウイテク氏の「高性能プロセッサにおける分岐予想(Br
anch Prediction in High-Performance Processor)」
と題する米国特許07/547,589を参照されたい。
SC命令セットの命令の種々の形式の好ましいフォーマッ
トが示されている。各命令は、32ビットの固定長さを有
する。
コードと、ビット<25:21>及び<20:16>における2つ
の5ビットレジスタアドレスフィールドRa及びRbと、ビ
ット<15:0>における16ビットの符号変位とを含んでい
る。この命令は、レジスタファイルとメモリとの間でデ
ータを転送し、レジスタファイル内のレジスタに有効ア
ドレスをロードし、そしてサブルーチンジャンプを行う
ように使用される。変位フィールド<15:0>はバイトオ
フセットであり、即ちこれは符号拡張されてレジスタRb
の内容に加えられ、仮想アドレスを形成する。仮想アド
レスは、特定の命令に基づいてメモリロード/記憶アド
レス又は結果の値として用いられる。
ードと、ビット<25:21>における5ビットアドレスフ
ィールドと、ビット<20:0>における21ビットの符号分
岐変位とを含んでいる。この変位は、ロングワードオフ
セットとして処理され、これは、左へ2ビットシフトさ
れ(ロングワードの境界をアドレスするために)、64ビ
ットに符号拡張され、PC33の更新された内容に加えられ
て、ターゲット仮想アドレスを形成する(オーバーフロ
ーは無視される。) オペレーション命令は2つの異なるフォーマット72及び
73を有している。フォーマット72は3つのレジスタオペ
ランドを有し、そしてフォーマット73は2つのレジスタ
オペランドとリテラルとを有している。このオペレーシ
ョンフォーマットは、レジスタファイル43に2つのソー
スオペランドと1つの行き先オペランドとを許容する整
数レジスタオペレーションを実行する命令に対して使用
される。ソースオペランドの1つは、リテラル定数であ
る。ビット12は、オペレーション命令が2つのソースレ
ジスタオペレーションに対するものであるか又は1つの
ソースレジスタ及びリテラルに対するものであるかを定
める。ビット<31:26>の6ビットOPコードに加えて、
オペレーションフォーマットはビット<11:5>に7ビッ
トのファンクションフィールドを有しており、演算及び
論理オペレーションに対して広範囲の選択を行えるよう
になっている。ソースレジスタRaは、いずれの場合に
も、ビット<25:21>に指定されそして行き先レジスタR
cはビット<4:0>に指定される。ビット12が0の場合に
は、ソースレジスタRbがビット<20:16>に定められ、
一方、ビット12が1の場合には、8ビット0拡張のリテ
ラル定数が命令のビット<20:13>によって形成され
る。このリテラルは、0から25までの範囲の正の整数と
して解読され、64ビットへとゼロ拡張される。
ローティングポイントレジスタへのオペレーションを実
行する命令に対して使用されるフローティングポイント
オペレーション命令フォーマット74も示されている。フ
ローティングポイントオペレーション命令は、前記した
ようにビット<31:26>に6ビットのOPコードを含むと
共に、ビット<15:5>に11ビットのファンクションフィ
ールドを含んでいる。3つのオペランドフィールドFa、
Fb及びFcがあって、その各々は、命令によって定められ
た整数又はフローティングポイントのオペランドを指定
し、レジスタ13のみはFa、Fb及びFcによって指定される
が、これらのレジスタは整数値又はフローティングポイ
ント値のいずれを含むこともできる。リテラルはサポー
トされない。フローティングポイント変換はフローティ
ングポイントオペレーションフォーマット74のサブセッ
トを使用しており、レジスタ対レジスタの変換オペレー
ションを実行する。Fbオペランドはソースを指定し、そ
してFaオペランドはreg−31(全て0)となるはずであ
る。
ションを指定する特権アーキテクチャーライブラリー
(PAL又はPALcode)命令のためのものである。この命令
では、6ビットのOPコードが前記のようにビット<31:2
6>に存在し、そして26ビットのPALcodeファンクション
フィールド<25:0>がオペレーションを指定する。PALc
ode命令に対するソース及び行き先オペランドは、個々
の命令の定義において指定された固定のレジスタで供給
される。
<31:26>は、26即ち64個の異なった命令しかコード化
することができない。従って、命令セットは64に限定さ
れる。しかしながら、命令フォーマット72、73及び74の
「ファンクション」フィールドは、ビット<31:26>に
同じOPコードを有する種々の命令を許す。
コンピュータ20のプログラムを図6のRISCコンピュータ
50のプログラムに変換するためのトランスレーターに関
する。このトランスレーターによって向けられねばなら
ない主な問題は、オリジナルのCISCプログラムにおける
全ての命令を常に変換できるものではないことである。
常に変換が可能でない1つの理由は、CISCアーキテクチ
ャーではCISCプログラムを「読み取り−書き込み」メモ
リエリアから実行することができ、従って、プログラム
は実行中にそれ自身を変更することがあるからである。
しかし、RISCアーキテクチャーでは、「リードオンリ」
メモリエリアからプログラムを実行することが要求され
る。「読み取り−書き込み」メモリエリアから実行され
るべきCISCプログラム命令は、CISC命令に変換できない
が、実行時間中にRISCコンピュータで解読することはで
きる。しかし、実行速度にかなり影響が出る。好都合な
ことに、CISCプログラムは実行中にそれ自身を変更する
ことはほとんどない。例えば、「読み取り−書き込み」
メモリエリアにプログラム命令を有する多くのCISCプロ
グラムは実際にはそれ自身を変更しない。
は、変換すべき全てのCISC命令を見つけることが困難だ
からである。CISCプログラムを走らせるためには、プロ
グラムのスタートアドレスを知るだけでよい。スタート
アドレスで開始される命令は分かるが、CISCプログラム
は、通常、計算された行き先アドレスを有する「ジャン
プ」や「コール」命令のような少なくとも1つの実行転
送命令を含んでいる。この行き先アドレスは実行時間に
容易に計算されるが、これは、例えば、変換時間におい
ては完全に中間的なものである。というのは、行き先ア
ドレスは、プログラム入力データに基づいて計算される
からである。しかしながら、一般的な場合に、本発明
は、変換時間に計算行き先アドレスのほとんどを求める
技術を提供する。
連した入力・出力像及びデータ構造体がブロック図で示
されている。トランスレーター80は、CISC命令を有する
オリジナルプログラム81を受け取り、それに対応して変
換されてRISC命令を有するプログラム82を発生する。変
換されたプログラム82に関連して、トランスレーター80
は、アドレス変換情報96も発生し、これはオリジナルプ
ログラムにおけるCISC命令のアドレスを変換されたプロ
グラムにおけるRISC命令のアドレスに相関させる。
80はプログラムアナライザー84を備えており、これは、
オリジナルプログラム81を分析して命令をデータから分
離すると共に、プログラムの流れをトレースしてRISCコ
ードを最適なものにし、そしてRISC命令アーキテクチャ
ーによって再現できない特性を指定するCISC命令を検出
する。
オリジナルプログラムにおける命令の位置を探索する。
補足入力85は、例えば、多数の像コンポーネントをリン
クすることによりオリジナルプログラム81が形成された
ときに発生されたリンカーマップファイル86を含むこと
ができる。この場合、リンカーマップは、オリジナルプ
ログラムの命令に対する入力ポイントを識別し、その入
力ポイントの名称を与える。これらの名称は、トランス
レーターのメッセージ及び他の出力を読み易くするのに
有用である。
ヒストグラムファイル87を含み、これは、オリジナルプ
ログラムの頻繁に実行される命令を識別するために発生
されたものである。PCサンプリングヒストグラムファイ
ルを使用する場合には、プログラムアナライザーはこれ
を使用して、0より大きいサンプリング周波数をもつプ
ログラムカウンタアドレスごとに、即ちPCサンプリング
ヒストグラムファイルが発生されたときに実行されてい
た命令に対応するプログラムカウンタアドレスごとに、
CISC命令を変換する試みを確実に行うようにする。
以前の変換動作で変換されなかったが以前に変換された
プログラムの実行中にインタープリターによって解読さ
れた命令のオリジナルプログラムにおけるアドレスを含
んでいる。図9及び11について以下で説明するように、
この実行ログファイルは、例えば以前に変換されなかっ
たコードの解読中に発生され、これは、変換されなかっ
たコードへ実行を転送する命令のオリジナルプログラム
におけるオリジナルアドレスと、変換されなかったコー
ドが置かれたオリジナルプログラムにおける行き先アド
レスとを対で含んでいる。トランスレーターは、オリジ
ナルアドレス及び行き先アドレスの対を識別する情報を
使用して、オリジナルプログラムの以前に変換されなか
った命令を変換する。オリジナルアドレスは、オリジナ
ルプログラムの手前の変換中に発見されなかった実行経
路を識別するのに用いられる。以下で述べるように、こ
れらの実行経路の識別により、プログラムアナライザー
84は、以前に変換されたプログラムの実行中又はオリジ
ナルプログラムの変換されなかった部分の解読中に取り
上げられなかった付加的な実行経路を発見することがで
きる。実行から再変換へこのように情報をフィールドバ
ックすることは、変換されたプログラムの各実行の後に
行われて、オリジナルプログラムにおける実質上全ての
命令が最終的に探索されて変換されるのが好ましい。
発生し、これは、エラー、警報及び情報メッセージ90
と、見い出された命令の領域及び入力ポイントの位置を
識別するオリジナルプログラム81のメモリマップを示す
概要ページ91と、オリジナルプログラム81の変換された
部分のフローチャートを定める流れ図言語ファイル92
と、オリジナルプログラムの出力像情報ファイル93とを
含んでいる。
ントのインターフェイス特性に関する情報を含んでい
る。トランスレーター80は、オリジナルプログラム81が
最初に変換されるときにそのオリジナルプログラムのた
めの出力像情報ファイル89を発生する。再変換中に、オ
リジナルプログラムの情報入力ファイルは入力ファイル
94として使用することができ、これは、再変換中に、プ
ログラムアナライザー84によって発見された付加的な命
令及び実行転送経路に基づいて更新される。
し適当なリンケージを発生するようにプログラムアナラ
イザー84によって使用される。例えば、オリジナルプロ
グラム81がライブラリールーチンを呼び出すときには、
補足入力85がこれらの共有ライブラリールーチンに対す
る像情報ファイル95を含んでいなければならない。好ま
しくは、像情報ファイルは、プログラマーが情報を追加
したり修正したりするように容易に編集できるASCIIフ
ァイルである。図9には、RISCコンピュータ50で変換さ
れたプログラム82を実行するときに使用される像及びデ
ータファイルがブロック図で示されている。変換された
プログラム82及びそれに関連したアドレス変換情報96に
加えて、RISCコンピュータ50は、オリジナルプログラム
81のコピーと、CISC命令を解読するためにRISCコードで
書かれたインタープリター101と、オリジナル及び変換
されたプログラムのためのデータ入力102とを入力とし
て使用する。インタープリター101は、オリジナルプロ
グラム81における変換されない命令を解読するための呼
び出され、オリジナルプログラム81はインタープリター
のデータ入力として働く。アドレス変換情報96は、イン
タープリター101のデータ入力として働き、インタープ
リターは、実行を適当な時間に変換されたプログラムへ
戻すときにこの情報を使用する。RISCコンピュータから
のデータ出力はオリジナル及び変換されたプログラムか
らの出力データ103と、インタープリターからの出力デ
ータである実行ログファイル88とを含む。
インタープリターの呼び出しを発生するRISCコードジェ
ネレータ83の動作ステップを示すフローチャートであ
る。上記したように、「読み取り−書き込み」メモリエ
リアのコードは通常は変換されてはならない。というの
は、プログラムが実行中にコードを変更することがある
からである。しかしながら、ユーザは、プログラムが実
行中にコードを変更することはないと信じており、従っ
て、ユーザはコードの解読に関連した著しい性能影響を
回避するために読み取り−書き込みメモリ内のコードを
変換しようとする。それ故、ユーザはソフトウェアオー
バーライドスイッチをセットし、ステップ111におい
て、RISCコードジェネレータ83はこのオーバーライドス
イッチをテストして「読み取り−書き込み」メモリエリ
ア内のCISC命令を変換すべきかどうかを判断する。オー
バーライドスイッチがセットされていない場合には、ス
テップ112において、RISCコードジェネレータ83はそのC
ISC命令が読み取り−書き込みメモリエリアにあるかど
うかをチェックする。そのような場合には、コードジェ
ネレータがステップ113においてメッセージを発生し、C
ISC命令を解読しなければならないことをユーザに警告
し、それ故、性能上の影響が生じる。ステップ114にお
いては、コードジェネレータがRISCコード発生してイン
タープリターを呼び出し、CISC命令アドレスをパラメー
タとして通す。最後に、ステップ115では、コードジェ
ネレータが「読み取りのみ」のメモリエリアで見い出さ
れた次のCISC命令へ進み、インタープリターへの呼び出
し中に解読されるであろうCISC命令が変換されないよう
にする。
見つけることのできないCISC命令のコードを発生するこ
とができない。しかしながら、RISCコードジェネレータ
は、計算行き先アドレスを求めなかったオリジナルプロ
グラムの実行転送命令を認識することができ、従って、
実行時間に変換されていないCISC命令を解読するように
インタープリターを呼び出すRISCコードを発生する。ス
テップ116では、RISCコードジェネレータは、CISC命令
が非分析の計算行き先アドレスを有するかどうかをチェ
ックする。もしそうであれば、ステップ117において、
ユーザは、変換されていないCISC命令を解読するために
インタープリターを呼び出さねばならないことが警告さ
れ、ステップ118において、コードジェネレータは、行
き先アドレスを計算してインタープリターを呼び出すた
めにRISCコードを発生し、CISC実行転送命令のアドレス
と計算行き先アドレスとをパラメータとして通す。
算行き先アドレスをもたないCISC命令のためのRISCコー
ドを発生する。これは、CISC命令を、これと同じ効果を
有する1つ以上のRISC命令に変換することにより行われ
る。このコード変換は、プログラム内の実行転送及びレ
ジスタの使用に関するプログラムアナライザー(図8の
84)からの情報を使用することによって効率的に行われ
る。例えば、RISCコンピュータ(図6の50)は、指定の
汎用レジスタにおける復帰アドレスを参照するサブルー
チンを呼び出し及び復帰命令を有しており、RISCコンピ
ュータは非常に多数の汎用レジスタを備えている。それ
故、CISCサブルーチン呼び出し及び復帰命令を、レジス
タを使用できる場合にスタックオペレーションをエミュ
ーレートするRISC命令に変換することは効率的でない。
参照するようなCISC命令の変則的なケースもある。RISC
コンピュータの好ましい構造においては、プログラムカ
ウンタをソースオペランドとして直接的に参照すること
はできないが、サブルーチン呼び出し命令によって与え
られた復帰アドレスを減少することによりプログラムカ
ウンタの値を計算することができる。しかしながら、こ
の場合のプログラムカウンタの値は、RISCコードを参照
したRISCコンピュータのプログラムカウンタであり、CI
SCコードを参照したCISCコンピュータのプログラムカウ
ンタではない。CISCプログラムカウンタに対応する一定
に変換する値を汎用レジスタに維持するには著しい量の
オーバーヘッドが必要とされる。それ故、プログラムア
ナライザー(図8の84)は、プログラム内の相対ジャン
プに関して実行転送に対するプログラムカウンタのレフ
ァレンスを分析しようとするが、他の目的でプログラム
カウンタの値を使用するコードを変換しようとはしな
い。
の実行との対話とがフローチャートで示されている。ス
テップ131において、変換されたプログラム82の命令
(又は変換されたプログラムによって呼び出されたオペ
レーティングシステムルーチン)は、インタープリター
が呼び出されるまで実行される。図示されたように、イ
ンタープリターは、計算行き先アドレスにおけるCISC命
令を解読するために呼び出されたときには第1の入力ポ
イント132に入り、そしてメモリの「読み取り−書き込
み」エリアにおけるCISC命令を解読するために呼び出さ
れたときには第2の入力ポイント133に入る。
の非変換部分にない。それ故、ステップ134では、計算
アドレスがチェックされ、インタープリターにおいて実
行を継続すべきであるか或いは又は変換されたプログラ
ムの入力ポイント又はその他の場所に実行を戻すべきか
を判断する。
が、変換されたプログラムの入力ポイントに対応しない
ときには、その行き先アドレスを有する実行転送命令の
アドレスと共に、その行き先アドレスを実行ログファイ
ル(図8の88)に記録することが所望される。これは、
ステップ135において行われる。再変換の間に、プログ
ラムアナライザー(図8の84)は、計算行き先アドレス
が変換されたCISC命令に対応しない場合には実行ログフ
ァイルの情報を読み取って、変換されないコードを探索
し、或いは計算行き先アドレスが変換されたCISC命令に
対応するが変換されたプログラム内の入力ポイントには
対応しない場合には、変換されたプログラム内の新たな
実行転送経路を識別する。
ルプログラムのアドレスにおいてCISC命令を解読する。
RISCコンピュータの汎用レジスタはCISCコンピュータの
対応するレジスタの内容を再現するように割り当てられ
る。この1組の割り当てられたレジスタは、CISCコンピ
ュータの状態のモデルを定める。インタープリタープロ
グラムは、CISC命令のOPコードを読み取り、テーブルの
ルックアップを行って、デコードすべき指定子の数と、
そのOPコードに対するプログラムルーチンのアドレスと
を決定する。次いで、インタープリターは、各指定子を
デコードする。リテラル及びレジスタソースオペランド
は、ソースオペランドレジスタとして割り当てられた汎
用レジスタへ転送される。複雑な指定子がデコードさ
れ、そして指定されたオペランドがメモリからフェッチ
され、ソースオペランドレジスタとして割り当てられた
汎用レジスタへ転送される。次いで、OPコードに対する
プログラムルーチンが実行される。最後に、行き先指定
子がデコードされ、その結果が指定の行き先へ転送され
る。
ISC命令のアドレスが計算される。この計算は、ステッ
プ136で解読された命令に基づく。次のCISC命令は、手
前の命令が実行を転送しない限り、手前のCISC命令に続
くものであり、この場合に、次のCISC命令のアドレスは
手前の命令の行き先アドレスである。
れ、インタープリターにおいて実行を続けるべきか或い
は変換されたプログラムにおける入力ポイント又は他の
場所に実行を戻すべきかを判断する。インタープリター
における実行はステップ136で続けられる。更に、ステ
ップ136は入力ポイント133からの最初のステップであ
る。
レスチェックルーチンがフローチャートで示されてい
る。ステップ141では、計算されたアドレスがオリジナ
ルプログラムの開始又は終了アドレスと比較され、それ
がオリジナルプログラムにあるかどうかの判断がなされ
る。行き先アドレスがオリジナルプログラムにない場合
には、計算された行き先アドレスは、例えば、CISCコン
ピュータ(図1の20)のオペレーティングシステムに対
するオペレーティングシステムルーチンの入力ポイント
となる。RISCコンピュータ(図6の50)のオペレーティ
ングシステムは、対応するルーチンを有していてもよい
し有していなくてもよい。それ故、ステップ142では、
計算された行き先アドレスは、例えば、RISCオペレーテ
ィングシステムに対応入力ポイントを有するCISC行き先
アドレスのテーブルをルックアップすることにより確認
される。この計算行き先アドレスが無効である場合に
は、エラーが報告され、実行がステップ143で終わりと
なる。さもなくば、ステップ144において、計算行き先
アドレスに対応するRISCオペレーティングシステムルー
チンの入力ポイントに転送される。
ラムにあると判断されたときには、その計算行き先アド
レスはオリジナルプログラムにおける変換されたCISC命
令に対応すると考えられる。しかし、この場合でさえ、
CISC命令を解読することが所望される。というのは、CI
SCプログラムはある予め定められた入力ポイントのみを
有していて、トランスレーターが個々の命令ではなくて
CISC命令のブロックを変換して最適なRISCコードを発生
できると仮定することが変換にとって望ましいからであ
る。いずれにせよ、インタープリターは、そこから変換
されたプログラムへ実行を戻し続ける場合には、CISC命
令アドレスと、変換されたプログラムにおける対応する
入力ポイントとの対応を知らねばならない。この対応
は、変換されたプログラムに関連したアドレス変換情報
(図8の96)によって与えられる。このアドレス変換情
報は、CISCアドレスの変換テーブルと、変換されたプロ
グラムにおける対応する入力ポイントとによって与えら
れるのが好ましい。それ故、ステップ145において、イ
ンタープリターは、例えば、変換テーブルをルックアッ
プすることにより、計算行き先アドレスが変換されたプ
ログラムの入力ポントに対応するかどうかをチェックす
る。計算行き先アドレスが変換されたプログラムの入力
ポイントに対応するときには、インタープリターは、ス
テップ146においてアドレス変換情報を使用して、計算
されたCISCアドレスをRISC入力ポイントアドレスに変換
する。これは、例えば、変換テーブルから対応するRISC
入力ポイントアドレスを読み取ることによって行われ
る。ステップ147では、実行が変換されたプログラムの
入力ポイントへ復帰する。さもなくば、ステップ148に
おいて、実行がインタープリターへ復帰する。
ップのフローチャートが示されている。第1ステップ16
1では、オリジナルプログラム及び補足入力ファイルが
メモリに読み込まれる。次いで、ステップ162では、ト
ランスレーターがオリジナルプログラムの入力ポイント
をサーチする。これは、図14に示すオリジナルプログラ
ム構成の特定例を参照して以下に詳細に述べる。
からの実行の流れをたどり、オリジナルプログラムにお
ける命令を探索すると共に、プログラムの流れ図を発生
する。この流れ図は、命令の「基本ブロック」と、これ
ら基本ブロックを相互に接続する実行経路とを識別す
る。各基本ブロックは、その基本ブロックの開始部に単
一の既知の入力ポイントを有する一連の連続する命令で
ある。実行は、基本ブロックの開始部のみへ転送され、
そして基本ブロックの終了部のみから転送される。流れ
図の発生については、図18及び19を参照して以下に詳細
に述べる。
ログラムをプラウシブルコードについてスキャンする。
このスキャンの結果は、オリジナルプログラムにおける
プラウシブル命令の数を定量化し、トランスレーターに
よって探索された命令の数と比較するのに有用である。
この比較の結果は、例えば、「見つけたコードの割合」
を推定するもので、これは、既知のコードのバイトの10
0倍を、既知のコードのバイトとプラウシブルコードの
バイトとの和で除算したものとして計算される。この推
定値は、システムの分析者がオリジナルプログラムに対
する移行戦略を選択したり、又はトランスレーターの性
能を監視又は増大するのに使用できる。トランスレータ
ーが命令の大部分を変換できない場合には、システム分
析者は、変換されたプログラムに基づいて多数のテスト
ケースを実行しそして実行から再変換への情報のフィー
ドバックを用いて、変換されていないコードの指示され
た推定値を減少した後に、変換されたプログラムを一般
使用に解放する。結局、システム分析者は、オリジナル
プログラマーによってドキュメンテーションをサーチす
るか、又はプラウシブル命令を含むものとして指示され
たアドレス位置においてコードを検査し、その推定値を
確認すると共に、変換されたプログラムを一般使用とし
て解放するか或いはトランスレーターに指示を発して変
換されていない命令を含むと考えられるプラウシブルコ
ードを変換させるかの判断を行うように試みる。プラウ
シブルコードをスキャンする好ましい方法は図29を参照
して以下に説明する。
ミングの習慣及び標準的な規定からのずれによって指示
されるエラーが見つけられる。典型的なプログラムにお
いては、例えば、データ項目をスタックにプッシュし、
いかに多数の他のデータ項目がプッシュされるかに関わ
りなく後でポップオフできるようにすると共に、介在命
令によってスタックからポップオフできるようにする。
プッシュの回数が介在命令におけるポップの回数を打ち
消さない場合には、介在するプッシュ及びポップ命令の
プログラミングが不適当であることによりエラーが生じ
る。介在命令が介在ノードで分岐したり再接合したりす
る個々の経路を含みそしてそれらの経路の1つにおいて
不適切なプログラミングが生じた場合には、その不適切
なプログラミングにより、2つの経路が中間ノードにお
いて接合するときに計算されたスタック深さがその2つ
の経路で異なることになる。これは、ノードがRSBサブ
ルーチン復帰命令である場合に特にエラーを生じ易い。
それ故、流れ図の助けで行われるエラーチェックの1つ
は、オリジナルプログラムのメイン入力ポイントからの
全ての経路においてスタックの深さを計算し、そしてこ
れら経路が再接合するときにその計算されたスタック深
さが同じであるかどうかをチェックすることである。も
しそうでなければ、トランスレーターは、「全ての入力
経路上でVA=%Xにおけるスタックの深さが一致しな
い」ことを示す警報メッセージを発生する。ここで、VA
はオリジナルプログラムにおけるノードの仮想アドレス
である。
ログラミング規定に合致することについても分析され
る。例えば、VAX(登録商標)アーキテクチャーの場合
に、「復帰マスク」は、復帰中にどのレジスタにロード
するかを指示するために手順呼び出し(CALLS及びCALLG
命令)に関連して使用される。復帰マスクが復帰命令に
対し経路に基づいて異なる場合には、おそらくプログラ
ミングエラーが生じている。トランスレーターは、「復
帰マスクの全ての入力経路VA=%X上で合致しない」と
いう警報を発する。更に、異なった復帰マスクで実行さ
れてもよいRET命令が見つかった場合には、その命令を
インタープリターへの呼び出しとして変換し、インター
プリターは復帰マスクを検査して、復帰中にロードすべ
き特定のレジスタを決定しなければならない。
ジスタ及び条件コードビットを、それらが手順に使用さ
れる前に手順によってセットすることであり、呼び出し
ルーチンによってセットされるレジスタの値又は条件コ
ードを用いるのではない。この呼び出し規定からのずれ
が見つかった場合に、トランスレーターは、「呼び出し
入力VA=%Xにおける初期化されないあり得べき変数:
%s」という警報を発する。このメッセージの「%s」
は、見つかったあり得べき非初期化変数のリストを意味
する。VAX命令アーキテクチャーのコード規定からの他
の相違には、ロングワード境界上でのスタックの整列ず
れ(RISCコードに対し著しい性能上の影響をもたらす)
と、RET命令を用いてJSBから復帰することと、RSB命令
を用いてCALLS又はCALLGから復帰することが含むまれ
る。トランスレーターは、これらの相違に対する流れ図
を分析して、特定の相違及びそれに対応するアドレスを
識別する警報メッセジを発生する。
あり得るエラーに対する流れ図の分析では、各基本ブロ
ックに使用されるリソースの伝播も実行する。各基本ブ
ロックは、スタック、汎用レジスタ及び条件コードとい
った種々のリソースを使用している。サブルーチンの特
性を推定するため、これらリソースの使用がそれらの呼
び出しルーチンへ伝播して戻される。この情報を用い
て、CALLS又はCALLG命令により呼び出されたサブルーチ
ンに使用されたレジスタをセットするためのサーチが終
了されると共に、この情報を後でRISCマシンコード発生
中に(ステップ168)使用して、決して使用されること
のない条件コード又はレジスタ値の不必要な発生が回避
される。更に、基本ブロックのリソースを比較すること
により一貫性のチェックを実行することができる。例え
ば、基本ブロックが2つ以上の基本ブロックを手前に有
していてこれら先行基本ブロックの復帰マスクが異なる
ときには「復帰マスク」警報が発生され、そして基本ブ
ロックが2つ以上の基本ブロックを手前に有していてそ
のスタック深さ変更が異なる場合には「スタック深さ」
警報が発せられる。全ての基本ブロックに対する最終的
なスキャンを用いて、ロングワード境界上でのスタック
の整列し損ない(即ち、4バイトで分割できない基本ブ
ロックのスタック変更)と、RET命令を用いてJSBから復
帰することと、RSB命令を用いてCALLS又はCALLGから復
帰することとが明らかにされる。
スについての情報を使用して、オリジナルプログラムに
対する像情報ファイルが形成される。この像情報ファイ
ルは、例えば、記述される像の名称及びそのバージョン
を識別する像ヘッダと、それに続く一連の像特性記録
(ライン当たりに1つ)であってその各々がその像にお
けるオフセットに対する特定の特性を付随しているよう
な記録とで構成される。各特性記録は、像オフセット及
びそれに続く特性名と、それに続くオプションであるア
トリビュート値についてのコンマで境界を定めたリスト
とで構成される。これらのアトリビュート値は、特定の
特性にとって独特のものである。像オフセットは、その
特性を適用する像におけるオフセットを表すものであ
る。これは、記号(他の像情報ファイル記録によって定
めることのできる)±の16進オフセット値で構成され
る。記号名又はオフセット値のいずれを省略してもよい
(両方ではない)。
は、好ましくは、次のものを含む。
す通りである。
ンス <COMMA>:==[<WHITESPACE>]‘,'[<WHITESPAC
E>] <NL>:==ニューライン <comment line>:==‘;'いずれかのテキスト<NL> <ILF file>:==<IMAGE_ID><IMAGE_PROPERTIES> <IMAGE_ID>:==<WHITESPACE>‘image'<IMAGE_NA
ME> <COMMA> <VERSION><NL> <IMAGE_PROPERTIES>:==<IMAGE_OFFSET><PROPER
TY> [<ATTRIBUTE>, ...]<NL> <IMAGE_OFFSET>:==[<SYMBOL>](‘+'|
‘−’)[<OFFSET>] <IMAGE_OFFSET>:==[<SYMBOL>](‘+'|
‘−’)[<OFFSET>] コメント記録(‘;'で始まるライン)はファイル内のど
こで生じてもよく、トランスレーターによって無視され
る。
以下に示す。
P N Z V C"をセット この像情報ファイルは、“VAXCRTL"について以下の情報
をトランスレーターに与える。
る像の第1メモリ位置)は、“C$MAIN"という名称のJ
SB入力としてマークされる。この情報から、トランスレ
ーターはJSBが適切であることを確認し、VAXCRTL:C$MA
INという名称を流れ図に挿入することができる。又、VA
XCRTL+0は、VAX(登録商標)レジスタAP、FP及びSP
と、VAX命令RSBとを用いてマークされる。この最後の情
報部分から、トランスレーターは、呼び出し像における
呼び出し命令の直後に復帰ポイントにおいてVAX命令の
説明を正当に続けることができる。
0、AP及びSPと、VAX条件コードビットNZVCとをセットす
るものとしてもマークされる。この情報から、トランス
レーターは、例えば、呼び出し命令後のR0のテストがC
$MAINによりR0に残されている値を参照するのであっ
て、呼び出し像自体によってR0に入れられた手前の値を
参照するのではないことを推定することができる。
ァイルLIBRTLに対する像情報ファイルを示している。
て流れ図の言語ファイルが形成される。この流れ図の言
語ファイルは、変換されたプログラムの流れ図を描くた
めにレーザープリンターへコマンドを発生する流れ図プ
ログラムの入力として使用することができる。又、流れ
図のプログラムは、例えば、プリントされる流れ図のサ
イズを制御するオプションのスケールパラメータと、接
続される他のブロックと共にページにプリントされるべ
き特定コードブロックのアドレスを指定するオプション
の「コードブロック」パラメータも受け取ることができ
る。流れ図は、異なった種類又は形状のブロックと、こ
れらブロックを相互接続する弧と、各ブロックにアッセ
ンブラー表示でプリントされた命令とで構成される。ト
ランスレーターによって見い出された命令の各基本ブロ
ックは、フローチャートに対応するブロックを有してい
る。
の定義と、ブロック間の相互接続と、各ブロックへ進む
命令(ASCIIのアッセンブラー表示で)とを含んでい
る。流れ図言語ファイルは、トランスレーターによって
見い出された命令の各基本ブロックを定めるデータブロ
ック又は記録を含む内部2進データ構造体から形成され
る。各データブロック又は記録は、命令の基本ブロック
のスタートアドレス(オリジナルプログラムにおける)
と、基本ブロックの長さ(バイト)と、ブロックの種類
と、ブロックが特定のサーチに含まれているかどうかを
指示するのに用いる「エポック番号」アトリビュート
と、「後続」データブロックのアドレスのリストと、
「先行」データブロックのアドレスのリストとを含んで
いる。データブロックはダイナミックに形成することが
でき、そしてその後続及び先行ブロックにデータブロッ
クのレファレンスを挿入したり削除したりすることによ
りデータ構造体に容易に挿入したり除去したりすること
ができ、データ構造体は、その後続又は先行ブロックに
対する次々のレファレンスにより前方又は後方に容易に
サーチ又はスキャンされる。
のブロックは別々の形状を有している。ブロックの種類
は、CALLx入力と、JSB入力と、「ノーマル」ブロック
と、CALLxプレースホルダーと、JBSプレースホルダーと
を備えている。「CALLx」は、VAX命令アーキテクチャー
においてCALLS又はCALLG命令によって行われる手順呼び
出しを参照する。
六角形であり、ブロックの名称と、もし分かれば手順の
名称と、呼び出しマスク(16進)とを含んでいる。ブロ
ックの名称は、16進でのブロックの第1バイトのアドレ
ス(オリジナルプログラムにおける)と、それに続く
「_CALL」とで構成される。CALLx入力ブロックにはCALL
S又はCALLG命令を介して到達する。VAX命令アーキテク
チャーにおいては、オリジナルプログラムのメイン入力
ポイントがCALLx入力ブロックであり、このメイン入力
ポイントはプログラムを走らせるためにオペレーティン
グシステムによって呼び出される。
円であり、ブロックの名称と、もし分かればサブルーチ
ンの名称とを含んでいる。ブロックの名称は16進でのブ
ロックの第1バイトのアドレス(オリジナルプログラム
における)と、それに続く「_JSB」とで構成される。JS
B入力ポイントにはJSB、BSBB又はBSBW命令を介して到達
する。JSB入力は典型的にマクロコードに使用されるも
のである。
方形であり、ブロックの名称と、ブロック内の全ての命
令とを含んでいる。ブロックの名称は16進でのブロック
の第1バイトのアドレス(オリジナルプログラムにおけ
る)である。ノーマルブロックには、ノーマルな実行の
流れを介して到達するか、又は分岐、ケース、ジャンプ
又は復帰命令からの実行転送を介して到達する。
ーブロックは、破線の六角形であり、ブロックの名称
と、もし分かれば呼び出された手順の名称とを含んでい
る。ブロックの名称は、16進での呼び出された手順の第
1バイトのアドレス(オリジナルプログラムにおける)
(もし分かれば変換時間における、さもなくばゼロ)
と、これに続く“_"と、呼び出された手順に対するプレ
ースホルダーの“呼び出し番号”とで構成される。CALL
xプレースホルダーブロックは、手順に入ったり出たり
する流れと、その手順の各呼び出しに対して記録された
副次的な作用とを表す。5つの異なる場所から手順が呼
び出された場合には、これらの呼び出しに対し5つの異
なる呼び出し番号をもつ5つの異なるプレースホルダー
ブロックがある(その手順に対するCALLx入力ブロック
に加えて)。
ブロックは、破線の楕円であり、ブロックの名称と、も
し分かればサブルーチンの名称とを含む。ブロックの名
称は、16進でのサブルーチンの第1バイトのアドレス
(オリジナルプログラムにおける)(もし分かれば変換
時間における、さもなくばゼロ)と、それに続く“_"
と、呼び出されたサブルーチンに対するプレースホルダ
ーの独特の“呼び出し番号”とで構成される。JSBプレ
ースホルダーブロックは、サブルーチンに入ったり出た
りする流れと、そのサブルーチンの各呼び出しに対して
記録された副次的な作用とを表す。
オペレータ、即ちグラフ(G)と、ブロック(B)と、
弧(A)とがある。流れ図言語ファイルの各ラインは、
次のオペレータのうちの1つでスタートする。即ち、ラ
インにコメントが含まれることを指示するセミコロン
と、ブロックオペレータを有する手前のラインにより定
められたブロックにラインのアルファニューメリックデ
ータが含まれることを指示するブランクと、H及びこれ
に続くブロック名であって、その名前の付いたブロック
が強調されるべきであることを示すものと、C及びこれ
に続く2つのブロックの名称であって、その2つのブロ
ックを巾の拾い破線に接続して例えばエラーを含む経路
を強調すべきであることを指示するものとである。
め、そのグラフのヘッダとしてプリントされるアルファ
ニューメリックテキストを含んでいる。
に対する名称(16進アドレスのような)を含む(D=CA
LLxプレースホルダー、E=JSBプレースホルダー)。オ
ペレータBの直後にオプションの倍率数字が続く。
から第2の名称のブロックへ向けられた弧を指定し、2
つのブロック名称の後に、レターコードがその円弧のス
タイル(例えば、A=実線で描かれた通常の分岐、B=
破線で描かれた真の分岐)を指示する。
を一例として以下に示す。
ナルプログラムから命令の基本ブロックを受け取り、そ
れに対応するRISCマシンコードを発生する。CISC命令は
一度に1つづつRISC命令に変換され、このRISC命令は同
じ結果及び条件コードを再現するものである。各CISC命
令は、4つの命令グループを順次に含むRISC命令の対応
するシーケンスに変換される。第1のグループは、ソー
スオペランドをフェッチして一時的な記憶位置に入れる
命令を有している。第2グループの命令は、ソースオペ
ランドに基づいて動作して一時的な記憶位置に結果を入
れる。第3のグループの命令は、メモリ又はレジスタの
内容を更新し、考えられる例外を受ける。最後に、第4
グループの命令は、メモリ又はレジスタの内容を更新す
るもので、考えられる例外はない。CISC命令をRISC命令
に変換することに関連したこれ以上の詳細については、
「変換されたプログラムコードに対する命令グラニュラ
リティを保持する改良されたシステム及び方法(Improv
ed System and Method of Preserving Instruction Gra
nularity for Translated Program Code)」と題するス
コット・ロビンソン及びリチャード・サイト氏の前期関
連特許出願を参照されたい。
シンコードをRISCコンピュータのオペレーティングシス
テムが認識するプログラム像フォーマットに入れること
により変換されたプログラムを形成する。この変換され
たプログラム像に関連して、トランスレーターは、オリ
ジナルプログラムにおけるCISC命令の各基本ブロックの
アドレスと、変換されたプログラムにおけるRISC命令の
対応基本ブロックのアドレスとの間のマッピングも発生
する。
換されたコードがプログラム像に配置された場所をグラ
フで示す概要ページを発生する。この概要ページは図14
を参照して以下で詳細に述べる。
ーは、プログラム流れ図の分析中にステップ165で見つ
かったエラーをもつサブルーチンの流れ図をプリントす
るために流れ図言語ファイルを形成する。エラー向け流
れ図の一例が図16に示されている。エラー向けの流れ図
は、エラーがトレースされる経路に沿って大きなブロッ
ク210、211及び212を有し、そしてエラーがトレースさ
れた経路に対する弧に沿って太い破線214を有する。図1
6に示されたエラーは、手順に使用される非初期化変数
(汎用レジスタR3)である。太い破線214は、手順の始
めのブロック210を、その非初期化変数が最初に使用さ
れるブロック213へ接続する。このエラーは、トランス
レーターによって明らかになるまで発見されない。とい
うのは、オリジナルプログラムの実行中には実行があき
らかにブロック215のまわりに指示されたエラー経路を
たどらないからである。
類の概要ページが示されている。図14に示されたよう
に、この概要ページは、オリジナルプログラムのメモリ
マップ181を含んでいる。メモリマップの上部には、プ
ログラム名182と、オリジナルプログラムが形成された
ときのデータ183と、変換中に見つかったコードの割合1
84とを含む表示がある。
(登録商標)オペレーティングシステムを用いた典型的
なプログラムの編成を示している。このプログラムは、
ヘッダ185と、読み取り/書き込み像セクション186と、
多数のリードオンリセクション187と、固定のベクター
セクション188と、デバック記号テーブル(DST)189
と、デバックモジュールテーブル(DMT)190と、グロー
バル記号テーブル(GST)191とを含んでいる。メモリマ
ップのライン当たり192個のディスクブロックがメモリ
マップの左上にプリントされ、そしてメモリマップ内の
全部で193個のディスクブロックがメモリマップの右下
にプリントされる。この例では、ライン当たり1つのデ
ィスクブロックがあり、全部で12のディスクブロックが
ある。変換されたコードは、リードオンリセクション18
7内の狭いバンド194、195及び196によって指示される。
これらの狭いバンドは、変換されたコードの各バイトご
とに短い垂直の線で形成される。プラウシブルコードは
広いバンド197で指示される。
ログラムの像フォーマットによって定められた100まで
の入力ポイントをリストする。図13のステップ161の間
に、トランスレーターは、スイッチのコマンドライン
と、オリジナルプログラムの開始にあるファイル名とを
説明し、オリジナルプログラムをメモリに読み込む。図
13のステップ162では、トランスレーターはオリジナル
プログラムの像フォーマットにより定められた入力ポイ
ントをサーチする。トランスレーターは、第1のディス
クブロックの最初の若干のバイト及び最後の若干のバイ
トを探し、それが変換可能なVAX/VMSプログラム像のヘ
ッダであるかどうかを調べる。もしそうであれば、トラ
ンスレーターは、ヘッダの残り部分を説明し、像セクシ
ョン記述子(ISD)を探し、ディスクブロックを図14の
メモリマップ181に示された像セクション185−191のよ
うな所望の像セクションへと編成する。VAX/VMS固定ベ
クトルが存在する場合には、トレンスレーターは、他の
像に対する間接的なレファレンスであるオリジナルプロ
グラムのアドレスを決定するようにそれを説明する。
れた入力ポイントを見つけるために、トランスレーター
は入力ポイントに対する像ヘッダ185をスキャンする
が、デバッガ入力ポイントは無視する。次いで、トラン
スレーターは、デバッグ記号テーブル(DST)189が存在
するときにこれをスキャンし、そしてグローバル記号テ
ーブル(GST)191が存在するときにこれをスキャンし
て、CALL入力及びSYMBOL入力を見つける。CALLマスクが
有効であり、マスクの後に法律コードがありそしてその
コードが特権命令を含んでいないことを確かめることに
より、各々の考えられるCALL入力ポイントに対して有効
性のチェックが行われる。法律コードチェックは、呼び
出しマスクから3層の基本ブロックを通してコードをデ
コードする。SYMBOL入力は、記号がリンカーにより絶対
レファレンスとしてフラッグ付けされたときには絶対レ
ファレンスは典型的に定数であるから、無視される。さ
もなくば、SYMBOL入力はJSB入力ポイントであるか、又
は誤って表示されたCALL入力ポイントである。入力ポイ
ントからのコードはデコードされ、そして上記した法律
コードチェックは入力ポイントがCALL入力であるとして
実行され、この法律コードチェックにパスした場合に
は、その入力ポイントがCALL入力であると思われる。法
律コードチェックにパスしない場合には、同様の法律コ
ードチェックを行って入力ポイントがJSB入力であるか
どうかテストする。
ーマットによって定められた100までの入力ポイント198
がリストされる。プログラムコード内の入力ポイントの
位置を示すために、入力ポイント194の各々からメモリ
マップ181内の対応する位置へと弧201が描かれる。入力
ポイントのリストの下では、概要ページは、トランスレ
ーターからのメッセージの概要199を致命的から情報的
まで過酷さが減少する順序でリストして含んでいる。各
メッセージが与えられる回数はかっこ内に示されてい
る。更に、概要ページの右上の角では、トランスレータ
ーがAからFまでの変換のレターグレードを与え、これ
は、完全変換から、警報付き変換、部分変換、おそらく
甚だしいエラーを伴う部分変換、ランタイム機能を失っ
た部分変換、そして全く不首尾な変換までの質を示す。
めには、オリジナルプログラムの像フォーマットによっ
て定められた入力ポイントからの実行の経過をたどるこ
とが必要である。実行の経過に続いて、各入力ポイント
で始まる命令シーケンスのデコードが行われ、命令がデ
コードされるにつれて流れ図が形成される。流れ図を形
成するために、各命令がデコードされてその長さを決定
すると共に、シーケンス内の次の命令が決定される。命
令の長さは、各OPコードに対する指定子の数を与えるテ
ーブルを参照しそして指定子を検査して長さを決めるこ
とによって決定される。
ければならないので、トランスレーターは、流れ図を形
成するためにデコードの結果をセーブする。これらの結
果は中間コードフォーマットであり、これは、流れ図の
助けによりエラーチェック中に命令の分析を簡単にする
と共に、RISCコードの発生を簡単にする。この中間コー
ドフォーマットは、オペランド指定子が容易にアクセス
できるメモリ位置に入るように同様の命令に対して一定
のデータフォーマットを与える。又、一定のデータフォ
ーマットは、効率的なRISCコードの発生を助けるアトリ
ビュートを与えると共に、必要に応じて、インタープリ
ターへの呼び出しを与える。使用することのできる1種
の中間コードフォーマットを添付資料Aについて述べ
る。しかしながら、メモリスペースに限界があるため
に、長いプログラム用の中間コード表示の使用は除外す
る。
体が示されている。流れ図のデータ構造体221について
は上記したが、これは、その全ての後続及び先行ブロッ
クへ各々リンクされる基本ブロック記述子のリストであ
る。
数の補助データ構造体223を参照しそして維持すること
が望ましい。例えば、流れ図データ構造体221の形成中
及びその後のプラウシブルコードのスキャン中には、所
与のアドレスが(1)デコードされた命令のアドレスで
もブロックの開始のアドレスでもないか、(2)基本ブ
ロックの開始のアドレス(以下、「ブロック入力ポイン
ト」と称する)であるか、(3)ブロックの中間にある
デコードされた命令のアドレスであるか、或いは(4)
デコードされた命令の中間にあるバイトのアドレスであ
るかを素早く知ることが望まれる。このため、補助デー
タ構造体223は、CISC命令アドレスによって指示された
テーブル224を含んでいる。
の相互に排他的な4つの状態をエンコードする16対のビ
ットがパックされたロングワードである。第1レジスタ
の所与のCISCアドレスに対して、最下位4ビットがセッ
トされたマスクが第2レジスタにロードされ、アドレス
の最下位4ビットが第1及び第2レジスタの論理アンド
によって第2レジスタへ転送され、そして第2レジスタ
が1ビット位置だけ左へシフトされ、シフトカウントを
与える。第1レジスタは、4ビット位置だけ右へシフト
されてテーブル224にインデックスが与えられると共
に、テーブルからの入力が第2レジスタにロードされ
る。次いで、第1レジスタは、シフトカウントによって
指示されたビット位置数だけ回転され、所与のCISCアド
レスに対してビット対が正しいと判断される。次いで、
このビット対は、最下位2ビットがセットされたマスク
により第2レジスタとの論理アンドによりマスクされ
る。
いない他の経路があることが分かっていても、一度に1
つの経路をたどることが必要である。更に、あるときに
は、たどっている経路が部分的にたどった経路に合流す
ることがある。それ故、補助データ構造体223は、デコ
ードされないブロックの基本ブロック記述子に対しポイ
ンタのリスト225を含むことが望ましい。例えば、流れ
図の形成を開始するときには、デコードされないブロッ
クの基本ブロック記述子がオリジナルプログラムの既知
の各入力ポイントごとに形成される。これらの既知の入
力ポイントは、流れ図を形成する前にリスト226に集め
られる。
ポイントがCALLx手順呼び出しの入力ポイントであり、
従って、流れ図においてCALLx基本ブロック記述子によ
って表される。CALLx基本ブロック記述子は、各プログ
ラム入力ポイントに対して形成される。リスト225に
は、プログラム入力ポイントのCALLx基本ブロック記述
子に対するポインタが最初にロードされる。更に、プロ
グラム入力ポイントに対するテーブル224の入力は、基
本ブロックの開始を指示するように最初にセットされ
る。
ロック又はブロック内のデコードされた命令のスタート
点であることが指示されたときには、そのブロックの基
本ブロック記述子を速やかに見つけることがしばしば所
望される。メモリスペースに制限がない場合には、CISC
アドレスにより指示された基本ブロック記述子に対する
ポインタのテーブルによりこれを行うことができる。し
かしながら、メモリスペースには制限があるので、流れ
図のデータ構造体221内の基本ブロック記述子に対する
ポインタの簡易リスト228としてハッシュテーブル227を
使用するのが好ましい。更に、例えば、ブロック内の第
1命令のアドレスの最下位16ビットにより、このハッシ
ュテーブルをインデックスするのが望ましい。例えば、
所与のCISCアドレスでスタートする基本ブロックに対す
る基本ブロック記述子を見つけるために、所与のCISCア
ドレスの最下位16ビットによってハッシュテーブル227
をインデックスし、基本ブロック記述子に対するポイン
タの簡易リスト228の1つとしてポインタが得られる。
この簡易リスト内の各ポインタごとに、そのポインタを
用いて基本ブロック記述子のスタートアドレスアトリビ
ュートをフェッチし、このスタートアドレスが所与のCI
SCアドレスと比較される。アドレス間の一致が得られる
と、所望の基本ブロック記述子が見つかる。所与のアド
レス(基本ブロックの中間にある命令のアドレスのよう
な)を見つけるために、ブロックの開始アドレスが見つ
かるまでテーブル224がアドレス数字が減少する方向に
スキャンされ、そしてこのブロック開始アドレスを用
い、ハッシュテーブル227と、基本ブロック記述子に対
するポインタの簡易リスト228とを参照して、基本ブロ
ック記述子が見つけられる。
子が割り当てられるたびに、アドレステーブル224、ハ
ッシュテーブル227及び簡易リスト118の1つが更新され
る。例えば、ロングワードを得るようにテーブルをイン
デックスしそしてそのロングワードの2ビット入力をマ
スク動作によってセットすることにより、ブロックのス
タートを指示する2ビット入力がテーブル224に書き込
まれる。マスク動作のためのマスクは、例えば、基本ブ
ロックのスタートのCISCアドレスの最下位4ビットでマ
スクのテーブルをインデックスすることにより得られ
る。次いで、基本ブロックのスタートのCISCアドレスの
最下位16ビットでハッシュテーブル227をインデックス
することにより、ポインタの簡易リスト228の1つに対
するポインタが得られる。最後に、新たなブロックの基
本ブロック記述子に対するポインタが、ハッシュテーブ
ル227をインデックスすることにより得たポインタで指
示された簡易リストに加えられる。
フローチャートが示されている。第1ステップ229で
は、リストの頭部にあるデコードされていない基本ブロ
ック(図17の225)がリストから除去され、流れ図デー
タ構造体の基本ブロック記述子(図17の224)が割り当
てられ、そしてまだ求められていない入力ポイントに等
しいブロック入力ポイントと、また求められていない入
力ポイントの先行点に等しい先行点とを指示するように
基本ブロック記述子がセットされる。次いで、ステップ
230において、ブロック入力ポイントで開始する基本ブ
ロック内の次の命令がデコードされ、そしてアドレステ
ーブル(図17の224)が更新される。次いで、ステップ2
31において、命令デコード中に、アドレステーブル(図
17の224)がインデックスされ、デコードされている命
令が既にデコードされた命令にオーバーラップするかど
うか決定される。もしそうであれば、次いで、ステップ
232において、エラーメッセージが発生されそして経路
が放棄され、ステップ238のテストで、デコードされて
いない基本ブロックのリスト(図17の225)が空でない
こと分かった場合には、別の経路がサーチされる。又、
ステップ233において、アドレステーブル(図17の224)
をルックアップすることにより、デコードされた命令が
デコードされない基本ブロックにオーバーラップするか
どうか指示される。もしそうならば、デコードされない
基本ブロックのブロック入力ポイントが命令の中間にあ
ることになるので、エラーとなる。この場合、ステップ
234でエラーが報告され、求められなかったブロック入
力がエラーであるという仮定のもとで、デコードされて
いない基本ブロックに対するポインタのリスト(図17の
225)からデコードされていない基本ブロックが取り除
かれる。この点において、流れ図に1つの命令が加えら
れている。
の状態はステップ235においてチェックされる。実行転
送命令が見つかったときには、命令のあり得べき実行経
路の各々に対する次の命令がステップ236で検査され
る。既にデコードされている命令へ戻る経路は既存ブロ
ックの入力ポイントへリンクされ、或いは経路が既存ブ
ロックの中間に向けられたときには、既存ブロックが2
つのブロックに分割され、経路が常にブロック入力ポイ
ントで終わるようにされる。さもなくば、検査の結果、
経路を終了させるか経路をたどるべきであるという結論
になる。2つ以上の経路をたどるべきである場合には、
最も優先順位の高い経路が「継続経路」として選択さ
れ、他の経路をたどるべきアドレスはデコードされない
基本ブロックとして待ち行列に入れられ、実行転送命令
に対する基本ブロック記述子が、デコードされていない
基本ブロックの各基本ブロック記述子における先行点の
リストに加えられる。例えば、条件分岐命令の場合に
は、アドレスシーケンスの実行経路(即ち、まっすぐな
経路)が最も優先順位の高い「継続」経路となり、実行
転送の行き先アドレス、即ち「真の分岐」が待ち行列に
入れられる。考えられる各々の実行経路をステップ236
において検査する方法を図19について以下に詳細に述べ
る。ステップ237でチェックして継続すべき実行経路が
全くない場合には、ステップ238において、デコードさ
れていない基本ブロックのリストがチェックされ、たど
るべき他の経路があるかどうかの判断がなされる。もし
なければ、流れ図は終了となる。さもなくば、実行ルー
プがステップ229へ戻され、デコードされていない基本
ブロックのリスト(図17の225)における次のデコード
されていない基本ブロックのブロック入力ポイントから
の経路をたどり始める。ステップ237において継続経路
があると判断された場合には、ステップ239において実
行の分岐が行われ、その経路がデコードされていない基
本ブロック内で続いている場合にはステップ246へ分岐
され、さもなくば、ステップ240へ分岐される。(図19
のステップ263では、以下で述べるように、デコードさ
れた基本ブロック内で経路が継続するかどうか既にチェ
ックされており、ステップ240に到達するのは、経路が
デコードされない命令へ続くときだけである。)ステッ
プ240では、次の命令に対して新たな基本ブロックが形
成され、新たな基本ブロックに対する先行ブロックのリ
ストは、実行転送命令を含む基本ブロックに対するポイ
ンタを最初に含むようにセットされ、新たな基本ブロッ
クに対するポインタは、実行転送命令を含む基本ブロッ
クの基本ブロック記述子内の後続ブロックのリストに加
えられる。ステップ246では、実行転送命令を含む基本
ブロックに対するポインタが、デコードされていない基
本ブロックに対する先行ブロックのリストに加えられ、
デコードされていない基本ブロックに対するポインタが
実行転送命令を含む基本ブロックに対する後続ブロック
のリストに加えられ、デコードされていない基本ブロッ
クに対するポインタがデコードされていない基本ブロッ
クのリストから取り去られ、デコードされていない基本
ブロックに対しステップ230でデコードが開始され、次
の命令のデコードが首尾良く行われた場合には、デコー
ドされていない基本ブロックの基本ブロック記述子が更
新され、それがデコードされたことを指示する。
ことが分かった場合には、アドレスシーケンスの次の命
令へ至る経路をたどるようにする。この経路は、予め定
められた命令メモリエリアから外れているので、終了す
べきであることが考えられる、ユーザの選択により、予
め定められた命令メモリエリアはリードオンリメモリエ
リアとして定められてもよいし、場合によっては、全オ
リジナル変換プログラムに対して割り当てられたメモリ
エリアに限定されてもよい。それ故、ステップ241で
は、実行がステップ242へ分岐し、そこでエラーが報告
され、経路が切断される。次いで、ステップ238におい
て実行が継続され、たどるべき新たな経路が見つけられ
る。
命令が後続ブロックである別の基本ブロックへと延びる
ときに終了となる。この状態は、アドレステーブル(図
17の224)を次の命令のアドレスでインデックスするこ
とによりステップ243においてチェックされる。ステッ
プ244では、後続ブロックの基本ブロック記述子がアク
セスされ、その後続ブロックがデコードされている基本
ブロックであるかデコードされていない基本ブロックで
あるか判断される。デコードされていない後続ブロック
の場合には、ステップ246において、デコードされてい
る最後の命令を含む基本ブロックに対するポインタがデ
コードされていない基本ブロックに対する先行ブロック
のリストに加えられ、デコードされていない基本ブロッ
クに対するポインタがデコードされている最後の命令を
含む基本ブロックに対する先行ブロックのリストに加え
られ、デコードされていない基本ブロックに対するポイ
ンタがデコードされていない基本ブロックのリストから
取り去られ、デコードされていない基本ブロックに対し
てステップ230でデコードが開始される。次の命令に対
するデコードが首尾良く行われた場合には、デコードさ
れていない基本ブロックの基本ブロック記述子が更新さ
れ、デコードされたことを指示する。さもなくば、後続
ブロックがデコードされたブロックである場合には、ス
テップ246において、後続ブロックに対するポインタ
が、デコードされた最後の命令を含むブロックの基本ブ
ロック記述子における後続ブロックのリストに加えら
れ、デコードされた最後の命令を含むブロックに対する
ポインタが後続ブロックの基本ブロック記述子における
先行ブロックのリストに加えられる。次いで、ステップ
238において実行が継続され、たどるべき新たな経路が
見つけられる。
検査するために図18のステップ236においてたどる手順
のフローチャートが示されている。図19の第1ステップ
251では、実行転送命令が検査されて、計算された行き
先アドレスを有するかどうかの判断がなされる。もしそ
うであれば、ステップ252において、後方記号実行のプ
ロセスが行われて、行き先が求められる。このプロセス
は、手順及びサブルーチン呼び出しを求めるのに特に有
用である。ステップ235でチェックして行き先が求めら
れていない場合には、経路の検査が終了となる。という
のは、実行時間にインタープリターが呼び出されるまで
その経路の次の命令が分からず決定されないからであ
る。後方記号実行のプロセスでは、実行転送命令から流
れ図を通して後方サーチを行うことにより計算行き先ア
ドレスが求められ、プログラムの命令のアドレスに関し
て固定であるアドレス値に対し計算行き先アドレスを求
めるのに使用した少なくとも1つ手前の命令が見い出さ
れる。後方記号実行のプロセスは図20について以下で詳
細に説明する。
先アドレスをもつ。この行き先アドレスは、オリジナル
プログラムに割り当てられたメモリの限界と比較され、
この限界を外れている場合には、その行き先がオペレー
ティングシステムのような外部レファレンスであると考
えられる。ステップ255において、外部レファレンスに
ついての情報を含む像情報ファイルに対してサーチが行
われる。このような像情報ファイルが使用できる場合に
は、ステップ256でその外部レファレンスから経路が続
く行き先を決定するために検査が行われる。外部レファ
レンスが手順又はサブルーチンである場合には、サブル
ーチン又は手順呼び出しの特性に関する情報を保持する
ために「プレースホルダー」ブロックを形成することが
所望される。サブルーチン又は手順は、復帰しなかった
り、4(SP)へ復帰したり、又は発呼者のレジスタを変
更したりというアブノーマルな特性を有することがあ
る。このアブノーマルな特性は、像情報ファイルに指示
されねばならず、そしてもし可能であれば、外部プログ
ラムからの復帰経路を決定するために使用しなければな
らない。これに加えて、オリジナルプログラムに対する
像情報に、呼び出しに関する情報、例えば、外部行き先
アドレス、呼び出しの形式、パラメータの個数及びパラ
メータとしての一定数値を記録することが所望される。
パラメータとしての一定数値は、例えば、呼び出し命令
からの後方記号実行によって見つけられる。呼び出しに
ついてのこの情報は、図31ないし33を参照して以下に述
べるように、多数のプログラムの反復変換のプロセスに
使用することができる。
い場合には、ステップ257において、実行転送命令のOP
コードが検査され、外部レファレンスがサブルーチンで
あるか手順であるかの判断がなされる。外部転送命令が
サブルーチンでも手順の呼び出してもない場合には、ス
テップ258において、外部レファレンスに対して復帰が
とられないことを指示する警報が発せられ、呼び出しに
対する情報がオリジナルプログラムに対する像情報ファ
イルに記録されそして経路をたどれないという結論で経
路の検査が終わりとなる。実行転送命令がサブルーチン
又は手順の呼び出しである場合には、ステップ259にお
いて、外部レファレンスに対して標準復帰がとられるこ
とを指示する警報が発せられ、呼び出しに対する情報が
オリジナルプログラムに対する像情報ファイルに記録さ
れる。又、サブルーチン呼び出しの作用に対してとられ
る情報を保持するためにこの時点で流れ図に「プレース
ホルダー」ブロックを形成することが所望される。経路
の行き先が実行転送命令に続くアドレスシーケンスの次
の命令であることを仮定して経路の検査が続けられる。
リジナルプログラムに割り当てられたメモリエリア内の
行き先であると分析されている。ステップ260では、行
き先が、オリジナルプログラムの命令に対して割り当て
られたメモリエリアの限界と比較される。通常の場合に
は、オリジナルプログラムの命令に割り当てられたメモ
リエリアは、図14のメモリマップ181に示されたエリア1
87のようなリードオンリメモリエリアである。行き先が
このメモリエリア以外である場合には、ステップ261に
おいてエラーメッセージが発生され、経路が放棄され
る。
令内であって終了できるところかもしれない。この状態
をチェックするために、テーブル(図17の224)が行き
先でインデックスされ、テーブル入力が検査されて、ア
ドレスが既にデコードされた命令の中間にあるか、或い
はアドレスが既にデコードされた命令のアドレスである
か基本ブロックの開始部の命令のアドレスであるかが調
べられ、もしそうでなければ、行き先は既存ブロックの
中間にある。これらのオペレーションは、図19のステッ
プ262、263及び264のテストを行う。
断された場合には、ステップ265において、既存ブロッ
クを先行ブロックとして有する新たなブロックと、実行
転送命令を含むブロックとを形成することにより、既存
のブロックが2つのブロックに分割される。更に、既存
のブロックの全ての後続ブロックは新たなブロックに転
送され、既存ブロックの基本ブロック記述子は短いブロ
ック長さを表すように更新され、新たなブロックに対す
るポインタが、実行転送命令を含むブロックの基本ブロ
ック記述子における後続ブロックのリストに加えられ、
そして命令アドレスのテーブルが、既存ブロックの変更
を表すように更新される。次いで、ステップ266におい
て、新たなブロック及びその後続ブロックのライン内の
ブロックにおける計算行き先アドレスに対して後方記号
実行が再び繰り返され、検査されている経路を通しての
後方記号実行によって更に別の行き先を求める試みがな
される。これにより、経路の検査が完了する。
部であると判断された場合には、ステップ267におい
て、実行転送命令を含むブロックに対するポインタが既
存ブロックの基本ブロック記述子における先行ブロック
のリストに加えられ、そして既存ブロックに対するポイ
ンタが、実行転送命令を含むブロックの基本ブロック記
述子における後続ブロックのリストに加えられる。ステ
ップ266において、検査されている経路を通しての後方
記号実行が、既存ブロック及びそこからの後続ブロック
のラインにおける計算行き先アドレスに対して再び繰り
返される。これで経路の検査は終了である。
された場合には、ステップ268でエラーメッセージが発
生され、経路の検査が終わりとなる。
された場合には、ステップ269において、実行転送命令
のOPコードが検査され、それが手順であるかサブルーチ
ン呼び出しであるかが決定される。もしそうであれば、
ステップ270において、手順又はサブルーチンへの経路
をたどることになる。サブルーチンがまだ変換されてい
ない場合には、変換される。いずれの場合にも、特定の
手順又はサブルーチン呼び出しの作用についての情報を
記憶するために「プレースホルダー」ブロックが流れ図
に形成される。サブルーチンがまだ変換されていない場
合には、スタック上の復帰アドレス又はセーブレジスタ
を変更しないようにするためその手順又はサブルーチン
が分析される。図24のステップ372及び373について以下
で詳細に述べるように、この分析により「コールバッ
ク」の存在が明らかになる。ステップ269で見つかった
サブルーチン呼び出しが、コールバックを注目すべき入
力ポイントに対して生じる場合には、後方記号実行(図
24のステップ374について以下で説明する)を試みて、
ルーチンのアドレスを発見し、それを変換しなければな
らない。
検査されて、検査されている経路が条件分岐であるかど
うか判断される。もしそうでなければ、その経路をたど
る。さもなくば、ステップ272において、条件分岐命令
の実行転送の行き先アドレスに対してデコードされない
ブロックが形成され、この新たなブロックの基本ブロッ
ク記述子に対するポインタがデコードされないブロック
のリストに入れられる。
ASE」命令を含んでいる。理論的には、行き先の数が実
行時間にしか分からないようなCASE命令をもつことはで
きるが、このような命令は変換不能であり、それ故、ア
ナライザーはこれを「変換不能」とマークし、コードジ
ェネレータがこのCASE命令を解読するようにインタープ
リターへの呼び出しを発生するようにしなければならな
い。通常の状態においては、CASE命令に対する行き先の
数は変換時間に分かる。これら行き先の1つを除く全て
を図18のステップ236で待ち行列に入れることができ、
一方、経路は残りの行き先から続けることができる。し
かしながら、CASE命令に対して指定された多数の行き先
の1つが、実行中に取り上げられることがないので、不
適切であるという問題がときどき発生する。この状態に
おいては、その不適切な行き先に対する変位が通常はゼ
ロである。それ故、図18のステップ236においては、CAS
EのOPコード及びゼロ変位経路に対して特殊なテストを
行わねばならない。この状態が見つかった場合は、その
CASEターゲットが「変換不能」とマークされ、これが実
行時間に解読される。CASE命令で発生するもう1つの問
題は、不適切な経路がアドレスシーケンスの次の命令へ
至る「フォール・スルー」経路になることがときどきあ
ることである。この状態では、この「フォール・スル
ー」経路は変換可能なコードを含まないことがあり、図
18のステップ230において説明及び変換エラーを招くこ
とになる。説明及び変換エラーが生じると、トランスレ
ーターはエラーメッセージを発生し、経路をたどらない
よう切断しなければならない(ステップ238において実
行を続けることにより)。エラーメッセージを公式に表
すために、トランスレーターは、その説明又は変換エラ
ーが生じた命令に先行するCASEステートメントを探索
し、それが見つかったときに、そのエラーがおそらくCA
SEステートメントによるものであると診断する。更に、
CASEステートメントに伴うこれらの問題は、見つかった
時点で、オリジナルプログラムに対してトランスレータ
ーによって発生された像情報ファイルに記録される。
示されている。“DHRYSTONE"という名称のプログラムで
は、初期入力ポイントが<main>であり、これはオリジ
ナルプログラムに2E00のアドレスを有している。最初の
2つのバイトはVAX呼び出しマスク0000であり、“DHRYS
TONE"が呼び出されたときにセーブすべき余分なレジス
タがないことを指定すると共に、例外イネーブルビット
IV及びDV(整数及び10進オーバーフロー)がオフになる
べきである(Cプログラムに対するデフィート)ことを
指定している。図15では、手順呼び出しのための六角形
記号301によって表された最初の基本ブロックにこの情
報が含まれる。
ド減算)とそれに続くJSB(サブルーチンへのジャン
プ)とで構成された単一の基本ブロックである。図15で
は、「ノーマル」ブロックのための長方形302で表され
た第2の基本ブロックにこの情報が示されている。
ァイルのルックアップを行い、レファレンスを像VAXCRT
Lのオフセット0にし、そしてオフセット0に関連した
情報をファイル内で探す。トランスレーターは、ノーマ
ルな復帰と、レジスタの使用及びセッティングとを見つ
ける。この情報に基づいて、トランスレーターは、JSB
プレースホルダーについて破線の楕円303で示されたプ
レースホルダーブロックを確立しそして(使用JSB特性
により)そのプレースホルダーを、アドレス2E0Bにおい
てJSB命令の直後にスタートする新たな基本ブロックに
接続する。この基本ブロックは、単一のCALLS命令より
成り、長方形304によって表わされる。トランスレータ
ーは、行き先アドレスを2E18と計算し、それが“DHRYST
ONE"像内の手順(Proc0)であるがまだ検査されていな
いことを見つける。トランスレーターは、流れ図に破線
の六角形305で示された手順呼び出しのためのプレース
ホルダーを形成する。この手順はまだ検査されていない
ので、トランスレーターは、アドレス2E18で開始して手
順内の命令の説明を続ける。最終的に、トランスレータ
ーは、手順内のRETをデコードし、これはメインルーチ
ンのアドレス2E12へのノーマル復帰であることを指示す
る。
(ワードをロングワードに変換する)命令と、RET(復
帰)命令とを見つける。これらは、流れ図において長方
形306で示された基本ブロックに含まれるものである。R
ET命令はメインルーチンを終了し、従って、トランスレ
ーターは、DHRYSTONEプログラムの他の何らかの入力ポ
イントで続けねばならない。
ャートが示されている。後方記号実行のプロセスにおい
ては、実行転送命令の行き先アドレスが記号実行によっ
て表され、各々の手前の命令の作用を表すように式が次
々に変更される。例えば、実行転送命令が“JMP R6+4"
であるとする。これは、汎用レジスタR6の内容に4を加
えることにより計算した絶対アドレスに実行を転送する
ものである。計算された行き先アドレスは、例えば“R6
+4"という記号で表される。プログラムを通して後方に
R6を参照する次の命令は、“MOVAB 4(R5),R6"であ
り、これは、汎用レジスタR5の内容に4を加えそしてそ
の和をR6に入れるものである。従って、記号式“R6+4"
は、その手前の“MOVAB 4(R5),R6"命令を通して押し
戻され、変更された式“R5+8"を得る。この変更された
式は、その記号式が手前の命令の後に有するものと同じ
値をその手前の命令の前に有している。
アドレス又は像関連アドレスとして求められるは、或い
は計算行き先アドレスの値に影響するが後方記号実行を
許さないような手前の命令に到達するまで、続けられ
る。例えば、後方記号実行で計算行き先アドレスを求め
ることが不可能であるか求められないような幾つかの命
令(XORB2 R1,R2のような)の場合に、後方記号実行は
許されない。この場合には、計算行き先アドレスを「未
知」の記号値へ減少し、欠落コードのおそれを指示する
のが便利である。しかしながら、限定された組の命令
(例えば、汎用レジスタを伴う加算、減算、ロード及び
記憶)のみに対して記号実行を許すことにより、典型的
なプログラムで見い出される計算行き先実行の大部分を
求めることができる。
図20のステップ321で開始される。このステップ321で
は、実行転送命令の計算された行き先(図18のステップ
235で確認された)を行き先アドレスの記号表示の所定
のフォーマットに変換する試みがなされる。例えば、実
行転送命令の計算された行き先オペランドは、アッセン
ブラー表示により、対応するアドレッシングモードの名
称と共に以下のテーブルに示された次の形態を少なくと
も有することができる。
レスするのに一般に使用されるものであるが、実行転送
の行き先アドレスを指定するのに一般に使用されるので
はない。それ故、記号表現のための1つの好ましいフォ
ーマットは、指示されたアドレッシングモード以外の全
てのものを表すことのできるフォーマットで行き先アド
レスを表示する。このようなフォーマットが図21に示さ
れている。これは、デファーしたアドレッシングを指示
するメモリアクセスフラグ326と、レジスタ番号327と、
ロングワード変位328とを含む。又、このフォーマット
は、レジスタ番号327が有効であることを指示するよう
にセットするとができるレジスタフラグ329を含み、従
って、このフォーマットはロングワード定数を表すこと
もできる。レジスタフラグは、例えば、図20のステップ
321の間にセットされ、そして後方記号実行のプロセス
でレジスタ番号により指示されたレジスタの内容の値が
見つかってその値がロングワード変位に加えられた場合
及びそのようなときにリセットされる。図21のフォーマ
ットで指示されるアドレス値は、レジスタフラグがセッ
トされたときにレジスタの内容に変位を加えることによ
って得た値であるか、或いはレジスタフラグがセットさ
れないときの変位の値であり、そしてメモリアクセスフ
ラグはセットされたときは、その和の値がアドレスとし
て使用されて、メモリからアドレス値がフェッチされ
る。
スモードを表すことのできる記号表示のための更に複雑
なフォーマットが示されている。このフォーマットは、
メモリアクセスフラグ331と、インデックスレジスタフ
ラグ332と、インデックスレジスタ番号333と、倍率定数
334と、ベースレジスタフラグ335と、ベースレジスタ番
号336と、ロングワード変位337とを含んでいる。この複
雑なフォーマットにより指示されたアドレス値は、変位
の値に、ベースレジスタフラグがセットされたときには
ベースレジスタの値を加え、インデックスレジスタフラ
グがセットされたときにはインデックスレジスタの値に
倍率定数を掛けた値を加えたものである、メモリアクセ
スフラグがセットされたときには、その和がアドレスと
して使用されてメモリからアドレス値がフェッチされ
る。図22のより複雑なフォーマットは、指示されたアド
レッシングモードを使用しない実行転送命令のための行
き先アドレスを見つける場合に後方記号実行を改善する
ものである。というのは、命令セットにおけるより多く
のOPコードの作用を考慮するように記号実行のプロセス
を行えるからである。例えば、図21のフォーマットは、
レジスタ番号によって指定されたレジスタに基づいて補
数命令の作用を表すことはできない。しかし、図21のフ
ォーマットは、符号付きのオフセット番号を使用するこ
とができ、インデックスレジスタ番号で指定されたイン
デックスレジスタに基づく補数命令の作用を、そのオフ
セット番号の補数をとることにより考慮することができ
る。
に、記号表示は、1つ以上の定数を含むアルファニュメ
リック文字例、R1、R2、R3...R15といった各汎用レジス
タの内容を指示するために1つ以上のレジスタ指示体、
+及び*といった演算オペレーション、及びアドレスx
におけるメモリの内容を表すメモリアクセスファンクシ
ョン@(x)のような可変長さフォーマットを使用する
ことができ、これにより、記号表示の値は、代数の法則
を適用することにより表される値となる。
ワード変位の指定子は、@(4*R4+R1+7)と表され
る。インデックスレジスタR4に対するオフセット定数4
は、指定子のロングワードモードによって決定され、オ
フセット定数は、ワードモードの場合2であり、バイト
モードの場合1である。しかしながら、オフセット定数
1は、文字例に含ませる必要はない。簡単化のための他
の代数法則が次のように適用される。即ち、x+A+B
(但し、A及びBは定数である)は、x+C(但し、C
=A+B)と簡単化され、x+Ry+Ryは、x+2*Ryと
簡単化され、そして@(z)+@(z)+xは、2*@
(z)+xと簡単化される。
により実行転送命令のための行き先アドレスを求める試
みがなされる。これは、相対的なアドレッシングモード
及び相対的なデファーしたアドレッシングモードに対し
て行うことができる。相対的なアドレッシングモードに
おいては、次の命令のアドレス(即ちプログラムカウン
タの更新した値)が変位に加えられて、所望の行き先ア
ドレスが与えられる。相対的なデファーしたアドレッシ
ングモードにおいては、次の命令のアドレスが変位に加
えられて絶対アドレスが得られ、そしてこの絶対アドレ
スにあるメモリの内容(これは図14の固定メモリエリア
188になければならない)がフェッチされて、所望の行
き先アドレスが与えられる。ステップ322において、行
き先アドレスを求めたときには、図18のステップ237に
おいて経路をたどるように実行分岐が続けられる。
きには、ステップ323において、実行転送命令に対する
行き先指定子を、命令の開始に評価したときに行き先ア
ドレスの値を表す記号表示へと変換するための試みがな
される。これは、命令の終わりに生じる行き先指定子自
体の評価と対照的である。
するアッセンブリ言語表示は、記号表示の項目に一致す
ることによって直接変換をする。自動減少モードの場合
には、ベースレジスタの内容が行き先指定子の評価に使
用される前に、ベースレジスタの内容が命令OPコードの
データ形式に基づいて1、2、4、8又16だけ減少され
る。それ故、自動減少行き先指定子が変換されるとき
は、記号表示における変位定数が実行転送命令のOPコー
ドのデータ形式に基づいて−1、−2、−4、−8又は
−16となる。更に、命令アーキテクチャーが実行転送命
令において自動減少ソース指定子を許す場合には、行き
先指定子に含まれたレジスタと同じベースレジスタを用
いた各々の自動減少ソース指定子に対し、記号表示の変
位定数は、各々のこのような自動減少指定子の作用を考
慮するために、実行転送命令のOPコードのデータ形式に
基づいて、−1、−2、−4、−8又は−16だけ減少す
る必要がある。
できないときには実行がステップ325へと分岐する。こ
れは、例えば、図21の固定フォーマットが記号表示に使
用されそして行き先指定子が指示されたアドレッシング
モードを有するときに生じる。ステップ325では、実行
転送命令が未知の行き先を有することを指示する警報が
発せられる。
プ341においてある変数が初期化され、後方記号実行を
行って、記号表示に対して考えられる行き先値がサーチ
される。一定の値を受け入れるためのリストがクリアさ
れ、少なくとも1つの未知の値の存在を指示するフラグ
がクリアされる。更に、「エポック」番号が増加され
る。
マークして流れ図を通る無限ループができるのを防止す
るのに用いられる。無限ループの可能性は、図23によっ
て示された流れ図によって示されている。この流れ図は
ハイアラーキデータ構造体として描かれたものである。
この流れ図は、例えば、メイン入力ポイント342を有
し、そして実行はターミナルブロック343、344の復帰命
令で終了する。いずれのブロックについてもその終了部
から開始部へ直接的に延びるループはないが、経路345
及び346が中間ブロック347及び348を相互接続してお
り、ハイアラーキ式のサーチ中に無限ループを生じさせ
ることがある。例えば、前方のハイアラーキサーチは、
ブロックのサーチをその開始部において開始するルーチ
ンを呼び出すことにより典型的に実行され、ブロックの
終了部に到達した場合及びそのときに、ルーチンはその
ブロックの各後続ブロックに対してそれ自身を繰り返し
呼び出し、これに対して、後方のハイアラーキ式サーチ
は、ブロックのサーチをその終了部から開始するルーチ
ンを呼び出すことによって典型的に実行され、ブロック
の開始部に到達した場合及びそのときに、ルーチンはそ
のブロックの各先行ブロックに対しそれ自身を呼び出
す。経路345及び346の存在によりこれらのサーチルーチ
ンのいずれかが無限ループに捕まることになる。という
のは、中間ブロック347、348が交互に且つ繰り返しサー
チされるからである。
止するために「エポック番号」がサーチの前に増加さ
れ、ブロックに対してサーチルーチンに入るたびに、
「エポック番号」がそのブロックに対する「エポック番
号アトリビュート」と比較される。「エポック番号」と
「エポック番号アトリビュート」とが一致することは、
そのサーチ中にそのブロックに既に到達しており、従っ
て、繰り返しではならないことを指示する。
られる値に対し、以下で述べるように図24のサーチルー
チンを呼び出すことにより、後方サーチが開始される。
次いで、ステップ352において、「未知」のフラグが検
査されそしてもしこれがセットされていれば、その記号
表示に対し未知の値が考えられることを警告するために
ステップ353で警報メッセージが発生される。ステップ3
54において、一定値のリストが検査され、それが空であ
る場合には、実行転送命令からの経路の終了部に達して
おり、図18のステップ237及び238において実行が続けら
れて、別の経路をたどる試みがなされる。さもなくば、
ステップ355において、リスト内の各一定値がステップ2
54ないし264について既に述べたようにテストされ、有
効な行き先であることが確かめられる。しかしながら、
図27について上記したように、これらテストの幾つか
は、一定値をリストに入れる前に行うことができ、従っ
て、テストの際に一定値を得た特定の方法を考慮に入れ
ることができる。次いで、ステップ356において、リス
ト内の一定値が有効であるかどうかチェックされる。も
し有効でなければ、実行転送命令からの経路の終端に到
達しており、図18のステップ237及び238において実行が
継続され、別の経路をたどる試みがなされる。さもなく
ば、ステップ357において、2つ以上の有効な行き先を
リストが含むかどうかのチェックが行われる。もしそう
であれば、1つを除く全てがデコードされていないブロ
ックのリスト(図17の225)に入れられ、図18のステッ
プ237及び239において残りの有効行き先で始まる経路が
続けられる。
チルーチンのフローチャートが示されている。このルー
チンは2つの入力ポイントを有する。第1の入力ポイン
ト361は、指定のブロックにおける指定の命令アドレス
で新たな後方サーチを開始するために呼び出される。第
2の入力ポイント362は、指定のブロックの終了部で始
まる後方サーチを続けるために呼び出される。
されて、実行転送命令の命令アドレスで新たな後方サー
チを開始し、この場合、第1のステップ363は、新たな
サーチに対するエポック番号に等しい実行転送命令を含
む現在ブロックのエポック番号アトリビュートとセット
する。次いで、ステップ364において、現在ブロックの
サーチは、現在命令アドレスがブロック内の第1命令の
アドレスである場合に終了となり、これはブロックの実
行転送命令のみで構成される場合に生じる。さもなく
ば、ステップ356において、現在命令アドレスが手前の
命令の命令アドレスに変更される、これら最後の2つの
ステップ364、365は、テーブル(図17の224)をインデ
ックスすることにより容易に行われる。
2の入力ポイント362が呼び出されたときには、ステッ
プ366において、エポック番号がブロックのエポック番
号アトリビュートと比較される。新たなブロックを形成
するときには、新たなブロックのエポック番号アトリビ
ュートが、新たなサーチの始めに増加されたエポック番
号の現在値に等しくなるようセットされる。更に、エポ
ック番号は、例えばロングワードであって、それが増加
されるたびに、所与のプログラムの変換中に各サーチに
対して独特の値を与える。それ故、ステップ366では、
現在ブロックが現在サーチに既に含まれている場合にの
み、現在サーチのエポック番号が現在ブロックのエポッ
ク番号アトリビュートに等しくなる。サーチプロセスに
無限ループができるのを防止するために、そして何らか
の付加的な値を見つけるおそれが減少することから、現
在ブロックが現在サーチに既に含まれている場合には、
現在ブロックのサーチが終了となる。
ロックのエポック番号アトリビュートがステップ368に
おいてエポック番号に等しくなるようにセットされる。
次いで、ステップ369において、現在命令のアドレスが
そのブロック内の最後の命令のアドレスに等しくなるよ
うにセットされる。この点において、図24のサーチプロ
セスは、サーチルーチンが第1入力ポイント361から呼
び出されたものであるか第2入力ポイント362から呼び
出されたものであるか関わりなく同じとなる。
「プッシュ」され、図25について以下で詳細に述べるよ
うに、その表示が求められる。ステップ371でテストし
て、その表示が求められた場合には、後方サーチルーチ
ンから復帰することにより現在ブロックのサーチが終わ
りとなる。この表示が求められなかった場合には、ステ
ップ364、365、370及び371を繰り返し、表示が求められ
るまで又はブロックの開始部に到達するまで、ブロック
内の命令を通して後方に表示を次々にプッシュする。
ッシュされたと分かった場合には、ステップ372でその
表示がサブルーチンアーギュメントを表わしているかど
うかチェックされる。VAXアーキテクチャーの場合に
は、定数をCとして、式“@(R12+C)”であるとき
に、表示がサブルーチンアーギュメントを表す。サブル
ーチンのアーギュメントによって指定されたアドレスに
対する呼び出しは、一般に、手順又はファンクションパ
ラメータに対する呼び出しである「コールバック」とし
て知られている。この「コールバック」は、より詳細に
は、実行転送命令のOPコードに基づいて、コールバック
isbback又はjmpbackと称される。「コールバック」が見
つかったときには、ステップ373においてその特性がオ
リジナルプログラムの像情報ファイルに記入され、これ
は、図31ないし33を参照して以下で述べるように、異な
ったプログラム間の相互依存性による矛盾を解決するた
めに後で使用される。例えば、VMSシステムサービスル
ーチン及びコンパイルされたBASICプログラムでは著し
い数のコールバックが見つけられている。
値のサーチが、現在ブロックの先行ブロックをサーチす
ることによって続けられる。先行ブロックがプログラム
入力ポイント(即ち、外部像からの呼び出し)として定
められる場合には、記号表示に対する値が発呼プログラ
ムによって決定されるかどうかを検査するために、少な
くとも1つの発呼プログラム像からのパラメータ値に関
する情報が必要とされる。それ故、トランスレーターに
使用できる像情報ファイルは、プログラム入力ポイント
へ通されるパラメータ値に関する情報に対してサーチさ
れる。
又はサブルーチン呼び出しの作用に関するプレースホル
ダー情報を参照し、これらの作用によって記号表示が求
められるかどうかを判断し−−この場合には、先行ブロ
ックのそれ以上のサーチは不要である−−或いは手順又
はサブルーチン呼び出しが記号表示に対して何の作用も
しないか又は既知の作用を及ぼすかを判断する−−この
場合は、プレースホルダーの先行ブロックまで後方記号
実行を続けることができる。しかしながら、プレースホ
ルダー情報は、サブルーチンが未知の方法で記号表示に
作用することを指示する。この場合に、後方記号実行
は、プレースホルダーにより定められた入力ポイントか
ら続くライン内にあるサブルーチンの各々の考えられる
復帰点から始めて実行することができる。
ブルーチン呼び出しであるときには、ステップ373にお
いて「コールバック」特性が記入されたときだけ発呼ル
ーチンにおいてサーチがなされる。VAX/VMSプログラム
の場合には、CALLS手順の呼び出しに対してこのサーチ
を行うのが特に望ましい。というのは、このような場合
には、スタックにコールバックパラメータをプッシュす
る命令から記号表示が容易に求められるからである。
又、発呼ルーチンに対するサーチの有効性は、記号表示
がアッセンブラ表示法で“@(R12+N)”又は@N(A
P)である場合のコールバックパラメータ番号Nを、CAL
LSステートメントによってスタックに実際に入れられた
パラメータ番号Mと比較することによりチェックでき、
この番号Mは、CALLS命令の短リテラル指定子である。C
ALLSステートメントの直前に、手順パラメータは、スタ
ック上でメモリ位置(N−4)SPにある。それ故、表示
がCALLS命令を通してプッシュされたとき、SPをAPとを
取り替え、表示変位から4を減算することにより、記号
表示に対するCALLSオペレーションの作用が考慮され
る。CALLS命令のアドレスにおいて、求めるべき記号表
示は、“@(R14+(N−4)”である。サーチは、図2
4の後方サーチルーチンの第2入力ポイント362に対する
繰り返し呼び出しによって開始されるが、これは、実行
復帰の際に他の先行ブロックのサーチを続けるために後
方サーチによって必要とされる情報をセーブした後であ
る。呼び出し及び復帰は、次のようにコード化される。
のように繰り返しサーチすることができる。
サーチルーチンが終了となり、実行復帰する。
シュ」して、手前の命令の後に記号表示が有していたも
のと同じ値をその命令の前に有するような変更した表示
を得るためのルーチンのフローチャートが示されてい
る。このルーチンは、例えば、図24のステップ370で呼
び出される。このプロセスは、命令OPコードに大きく依
存している。プログラムカウンタ以外のメモリ又は汎用
レジスタの内容に直接作用しないような命令OPコード
は、定数、レジスタ指定子及びメモリアクセスファンク
ションのみを含む記号表示の値に影響しない。通常の場
合にプログラムカウンタの変化する値は、記号表示の値
に影響しない。というのは、表示をプッシュする前に
は、表示がプログラムカウンタを指定するレジスタ指定
子を有しておらず、表示を通して命令をプッシュするプ
ロセスがプログラムカウンタを指定するレジスタ指定子
を表示に加えようとする場合には、一定のアドレス値に
置き換えることによりそれが除去されるからである。汎
用レジスタ又はメモリの内容に直接影響しないが不定の
仕方で影響すると分かっている命令OPコードは、「未
知」の記号値を見つけてプロセスを終了させる。
で影響するので、各OPコードの作用に関する情報を、OP
コードによってアドレスされたデコードテーブルに予め
記憶することが所望される。このデコードテーブルは、
各OPコードに対して書かれた別々のルーチンのスタート
アドレスを含むことができる。しかしながら、説明上、
以下では同様の機能を実行するOPコードのルーチンの共
通の特徴について述べることにする。それ故、図26のデ
コードテーブル構成は、種々の経路に沿って分岐して各
OPコードに対して特定の動作を実行するようにより一般
的な手順によって使用することのできる多数のルーチン
及びOPコード情報を備えている。このような一般的な手
順は、各OPコードに対する一般的なルーチンに取り入れ
られる経路を考慮することにより各OPコードに対する別
々なルーチンへと拡張できることを理解されたい。
ルの入力を得るようにデコードテーブルがアドレスされ
る。ステップ382では、その入力がゼロと比較され、命
令が、そのOPコードのみにより、許容できる記号表示の
値に対して何らかのある得べき作用をもつことができな
いかどうか判断する。もしできなければ、その実行は表
示が分析されないまま復帰となる。
26に示されている。ロングワードテーブル入力386にエ
ンコードされるのは、通常ないような作用を有するOPコ
ードのための特殊な分析ルーチンに対する変位と、OPコ
ードのためのメモリレファレンス分析ルーチンに対する
変位387と、OPコードのためのレジスタ分析ルーチンに
対する変位388と、OPコードが意味するデータ形式及び
オペランドに関するエンコードされた情報389とであ
る。OPコードのためのエンコードされたデータは、例え
ば、含意レジスタ行き先コード391と、データ形式コー
ド392と、スタックポインタの含意自動減少を指示する
フラグ393と、含意メモリオペレーションを指示するフ
ラグ394と、スタックポインタの含意自動増加を指示す
るフラグ395とを含む。含意レジスタコードは、例え
ば、通常の場合には値0を有し、R0及びR1が影響を受け
ることを指示するために値1を有し、R0ないしR3が影響
を受けることを指示するために値2を有し、そしてR0な
いしR5が影響を受けることを指示するために値3を有す
る。データ形式コードは、バイト、ワード、ロングワー
ド、クオドワード又はオクトワードのいずれかを指示す
る。
間オペレーションを通して後方に表示がプッシュされ
る。これらの中間オペレーションは、逆の順序で、自動
増加、OPコードオペレーション及び自動減少である。ス
テップ382において、自動増加指定子に対して命令がス
キャンされる。表示において指示されたレジスタRxを使
用する各々の表現及び含意自動増加指定子に対し、その
表示におけるレジスタ指定子Rxは、Rx+Cと置き換えら
れ、ここでCは、OPコードデータ形式がバイトであるか
ワードであるかロングワードであるかクオドワードであ
るか又はオクトワードであるかに基づいて各々1、2、
4、8又は16となり、そしてもし可能であれば、定数の
乗算及び加算によって表示が簡単化される。例えば、表
示が“@(R1+R7+4)+@(R3+3)+R1+R6+7"で
あり、命令が地蔵増加指定子“(R1)+”を含み、そし
てOPコードデータ形式がクオドワードである場合には、
表示が“@(R1+R7+12)+@(R3+3)+R1+R6+1
5"に変更される。
の値が負でないときに、実行はステップ403の特殊なレ
ジスタ分析ルーチンへ分岐する。この特殊な分析ルーチ
ンへジャンプするために、例えば、次のコードを使用す
ることができる。
いて上記したCALLSに対するルーチンであり、N≦M*
4の場合(ここで、MはCALLS命令によって指定された
パラメータの数である)、“R14−4"が表示“@(R12+
N)”におけるR12の発生に置き換えられ、そして表示
が簡単化されて、“@(R14+(N−4)”が得られ、
さもなくば、「未知」の値に復帰される。
ションであるときに実行はステップ405へ分岐する。ス
テップ405において、各メモリアクセスファンクション
のアーギュメントを命令に対する表現又は含意メモリ行
き先指定子のアドレスに合致させる試みがなされる。合
致を生じさせてメモリアクセスオペレーションの値に影
響を与えることができない場合には、実行がステップ40
6へ分岐する。ステップ406において、実行は命令OPコー
ドに対するメモリ分析ルーチンへジャンプし、特定のOP
コードのためのメモリ分析ルーチンに対する変位は、例
えば、デコードテーブルにおける「メモリ分析ルーチン
のための変位」(図26の387)となる。
ドのためのルーチンと、表現メモリ行き先結果指定子を
使用するOPコードのためのルーチンとを含んでいる。含
意メモリ行き先を伴うOPコードは、例えば、PUSHAB及び
PUSHLを含み、これは各々アドレス又はロングワードを
スタックに対してプッシュする。PUSHABx又はPUSHLxに
対する含意メモリ行き先指定子は0(SP)であり、これ
は、式“R14"のメモリレファレンスアーギュメントに確
実に合致する行き先アドレスを指定する。合致が確実な
場合には、記号表示において次のような置き換えが行わ
れる。即ち、合致する“@(R14)”項にxを置き換
え、そして全てのR14レジスタ指定子に“R14−4"を置き
換える。
コードの例は、MOVEL x,yのようなデータ転送命令であ
り、ここでyはメモリ行き先指定子である。この場合
に、命令の結果xは、表示の各合致するメモリレファレ
ンスアーギュメントにおいてyと置き換えられる。例え
ば、命令がMOVE R1,8(R2)でありそして表示が“@(R
2+8)+R1+7である場合には、表示が2*R1+7に
変更される。
ュメントとの合致は、OPコードのデータ形式によっても
左右される。例えば、クオドワード又はオクトワードデ
ータ形式を有する命令は、2つ以上のロングワードに合
致する。例えば、命令CLRQ(Rx)は、クオドワードデー
タ形式であり、そのメモリ行き先指定子は、“@(R
x)”及び“@(Rx+4)”に合致し、各々の場合にメ
モリファンクションがゼロに減少される。又、ロングワ
ードアドレス境界からのアドレス不整列があるときにあ
り得る合致も重要であり、この状態は、例えば、命令CL
RL(Rx)と“@(Rx+1)”との合致であり、この場合
は、所望のロングワードアドレスに1バイトのみが一定
値0に分析される。
するようにメモリ行き先指定子によって指定されたアド
レスについて考えられはするが確かではないときにステ
ップ406において設計の選択が生じる。この状態は、例
えば、メモリ行き先指定子が(R1)であって、表示がメ
モリアクセスファンクション@(R2)を有する場合であ
り、即ち、手前の命令がMOVE R1,R2の場合に合致が生じ
る。メモリ行き先指定子は、メモリ行き先指定子によっ
て指定されたメモリ行き先アドレスを表す別の記号表示
に変換することができ、後方記号実行を行って、上記他
の記号表示を、表示内のメモリオペレーションのアーギ
ュメントに確実に合致するか又は合致しない形態に変換
するよう試みることができる。しかしながら、異なった
行き先アドレスを表す多数の表示に対して後方記号実行
を同時に行うと、異なった行き先アドレスの各々に対し
て付加的なエポック番号とエポック番号アトリビュート
とが必要となるので、サーチが複雑なものになる。それ
故、多数の記号表示に対するサーチの程度を制限するこ
とが所望される。これは、例えば、サーチを1つの付加
的な記号表示に制限するか、又は現在ブロック及びこれ
とは異なる先行ブロックにおける1つの付加的な記号表
示に制限することによって行われる、いずれにせよ、合
致が考えられるが合致が確実ではないという結論に達す
る場合には、図25のステップ406の結果は、それを分析
するが、一定の値に分析するのではない。それ故、実行
はステップ407においてステップ408に分岐し、そこで
「未知」のフラグがセットされ、実行が復帰する。
には、記号表示のフォーマットで命令の作用を表すこと
が困難又は不可能である。この状態の一例は、排他的オ
アオペレーションである。手前の命令が2つのレジスタ
の内容をスワップするものでない限り、排他的オペレー
ションの作用は不定となる。例えば、レジスタR1とR2と
のスワップは次のようにコード化学することができる。
分析されるかどうかに基づいて実行が分岐される。プロ
グラムカウンタ指定子を除く全てのレジスタ指定子が表
示から削除されるときに表示を一定値に分析することが
できる。それ故、レジスタ指定子が除去されるか又は分
析ルーチンにおいて変更されたときには、表示を一定値
へ分析する試みがなされる。これは、図27について以下
に述べるようなルーチンを呼び出すことにより行うこと
ができる。
ョンを含まないと決定されたとき、又はステップ405に
おいて合致のおそれのあるメモリ行き先指定子を命令が
もたないと決定されたときに、命令が汎用レジスタの内
容に影響することが考えられる。通常の場合には、命令
が表現レジスタ直接行き先指定子を有するとき又はある
含意レジスタ直接行き先指定子を有するときに、命令が
汎用レジスタの内容に影響を与える。しかしながら、命
令が表現レジスタ直接行き先指定子を有するときには、
OPコードデータ形式がクオドワード又はオクトワードで
あれば、表現指定されたレジスタ以外のレジスタに影響
を与える。
で、OPコードレジスタ使用、データ形式及び行き先レジ
スタ番号の種々の考えられる組み合わせに対してレジス
タ使用マスクが予め記憶されるようなデコードテーブル
を使用することができる。レジスタ使用マスクは命令に
対してフェッチすることができ、これを用いて、命令が
記号表示に影響を及ぼし得るがどうかを速やかに判断す
ることができる。例えば、図26に示すOPコードレジスタ
使用情報389をエンコードする場合には、レジスタデコ
ードテーブルのアドレスをOPコードレジスタ使用のバイ
トから形成することができる。これは、レジスタ直接行
き先が命令に対して指定されるかどうかをチェックし、
もしそうならば、行き先レジスタ番号をデータ形式に添
付させて、レジスタ使用マスクのテーブルに対するイン
デックスを形成することにより行われる。各々のレジス
タ使用マスクは、影響を受けるレジスタを指示するよう
にセットされるビットと、命令によって影響されないレ
ジスタを指示するようにクリアされるビットとを有する
ワードである。又、ステップ410において、記号表示に
使用されるレジスタ指定子を指示するビットをセットす
ることにより、記号表示に対するレジスタ使用マスクが
ワードから形成される。例えば、最上位ビット位置がセ
ット又はクリアされてR15の存在を指示し、そして最下
位ビット位置がセット又はクリアされてR15の存在を指
示すると仮定すれば、表示“@(R3+4)+R12+R4+
3"に対するレジスタ使用マスクは、00010000000011002
となる。
表示のレジスタ使用マスクとの間で論理アンドが計算さ
れ、命令によって影響される表示におけるレジスタ指定
子を示すレジスタ競合マスクが得られる。ステップ412
では、このレジスタ競合マスクがゼロと比較され、特定
の命令OPコードに対するレジスタ分析ルーチンを使用す
べきかどうか判断される。もしそうならば、ステップ41
3において、レジスタ分析ルーチンは、命令OPコードの
作用を考慮しておそらく表示を一定値へ分析するために
記号表示を変更すべきであるか、或いはその作用が不定
であって表示を「未知」の値へ分析すべきであるかどう
かを判断する。例えば、命令がCIRLであるか又はCLRQ命
令である場合には、レジスタ競合マスクによって指示さ
れた各レジスタ指定子の各発生が記号表示から除去され
る。MOVE Rx,Ry命令の場合には、レジスタRxに対するレ
ジスタ指定子が記号表示におけるレジスタ指定子の発生
に置き換えられる。しかし、MOVQ Rx,Ry命令の場合に
は、レジスタ競合マスクによって指示された各レジスタ
Rzがレジスタ指定子R〔z+y−x〕に置き換えられ
る。換言すれば、RxはRyに置き換えられるが、Rx+1も
Ry+1に置き換えられる。
は、ステップ414において、記号表示で指定されたレジ
スタに影響を与える自動減少オペレーションを通して記
号表示が「プッシュ」される。記号表示で指定されたレ
ジスタRxを用いた各表現及び含意自動減少指定子につい
ては、その表示内のレジスタ指定子RxがRx+Cに置き換
えられ、ここで、Cは、OPコードデータ形式がバイトで
あるか、ワードであるか、ロングワードであるか、クオ
ドワードであるか又はオクタワードであるかに基づい
て、各々、−1、−2、−4、−8又は−16であり、そ
して表示は、もし可能であれば、定数の乗算及び加算に
よって簡略化される。
マット及び複雑な命令に対して一般的に述べたが、後方
記号実行のプロセスは、VAX/VMSプログラムにおいて計
算行き先アドレスを分析するのに非常に有効であること
が分かった。これは、たとえば、図21の簡単な表示フォ
ーマットが使用されても、そして分析ルーチンにより
「未知」の値を分析しても、命令がMOVAB、PUSHAB、MOV
L、PUSHL、CLRL、CLRQ又はCALLSでない限り、そうであ
る。
フローチャートである。この項目は、例えば、図21の固
定フォーマットで示されている。
場合に実行がステップ422へ分岐し、さもなくば、実行
がステップ423へ続く。ステップ423では、レジスタ番号
が15と比較される。レジスタ番号が15でなく、従って、
プログラムカウンタの更新した値を指示しない限り、表
示を分析することができない。それ故、レジスタ番号が
15でないときには実行が復帰し、さもなくば、実行がス
テップ424へ続く。
Cの値との和として計算される。VAX命令アーキテクチャ
ーでは、現在命令がPCを指定するレジスタ直接モードの
表現ソース指定子を有するときに、記号実行のプロセス
によりPDレジスタ指定子R15が記号表示に加えられる。
この場合、更新されたPCの値は、現在命令においてPCを
指定した指定子の直後のバイトのアドレスである。
る。メモリアクセスフラグがセットされない場合には、
アドレスがオリジナルプログラムにおける実行転送命令
の考えられる行き先となるべきである。VAX/VMSプログ
ラムの場合には、このようなPC相対アドレスがプログラ
ムの命令メモリエリア(図14の187)になければならな
い。これはステップ426においてチェックされ、アドレ
スが命令エリア内にあることが分かると、そのアドレス
はステップ427において行き先のリストに入れられ、表
示が分析された状態で実行が復帰する。さもなくば、ス
テップ428において警報メッセージが発せられる。更
に、命令メモリアドレス以外のアドレスは無効と考えら
れるので、行き先リストには加えられない。そうではな
くて、「未知」のフラグがステップ429においてセット
され、記号表示が分析された状態で実行が復帰する。
430に分岐する。VAX/VMSプログラムでは、PC相対間接ア
ドレスは、プログラムメモリの固定ベクトルエリア(図
14の188)に含まれた固定ベクトルであるときだけ有効
であると考えられる。ステップ424で計算されたアドレ
スがプログラムメモリの固定ベクトルエリアに入り、定
義された固定ベクトルのリスト又はテーブルに含まれる
場合には、ステップ423においてアドレスされた固定ベ
クトルがメモリから読み出され、そしてステップ433に
おいて固定ベクトルが行き先のリストに入れられ、前記
表示が分析された状態で実行が復帰する。ステップ424
で計算されたアドレスがプログラムメモリの固定のベク
トルエリアに入らないか、又は定義された固定ベクトル
のリスト又はテーブルに見つからない場合は、ステップ
431で警報が発せられ、ステップ429で「未知」のフラグ
がセットされ、記号表示が分析された状態で実行が復帰
する。
とが分かりそしてメモリアクセスフラグのクリアされた
ことが分かった場合には、行き先が絶対アドレスとな
る。VAX/VMSプログラムの場合には、絶対アドレスは、
予め定められたシステムベクトル入力ポイントであると
きだけ有効であると考えられる。それ故、ステップ434
では、予め定められたシステムベクトル入力ポイントの
リスト又はテーブルにおいてルックアップが実行され
る。アドレスが予め定められたシステムベクトル入力ポ
イントである場合には、ステップ427においてこれが行
き先のリストに加えられ、記号表示が分析された状態で
実行が復帰する。さもなくば、ステップ435において警
報が発せられ、ステップ429において「未知」のフラグ
がセットされそして記号表示が分析された状態で実行が
復帰する。
ると、記号表示によって指示された行き先が絶対間接ア
ドレスとなる。VAX/VMSプログラムにおいては、このよ
うなアドレスが無効であると考えられる。それ故、ステ
ップ436において警報が発せられ、ステップ429において
「未知」のフラグがセットされ、そして記号表示が分析
された状態で実行が復帰する。
り上記したプラウシブルコードと、図14のプログラムメ
モリマップ181の命令メモリエリア187とに対してスキャ
ンを実行する手順のフローチャートである。このスキャ
ンの結果は、命令メモリエリア(図14の187)における
「プラウシブルコード」エリア(図14の197)を識別す
ることである。特に、図28及び29の手順は、命令メモリ
アリア(図14の187)の中のエリアで、流れ図のブロッ
クに含まれるデコードされた命令を含むメモリのエリア
(194、195、196)を含まないようなエリアをスキャン
する。流れ図のブロックに含まれたデコードされた命令
は、簡単に「既知のコード」と称する。命令メモリエリ
ア(図14の187)の中のエリアで、既知のコードを含ま
ないエリアは、「未知のコードエリア」と称する。それ
故、図28及び図29の手順は、「未知のコードエリア」を
スキャンして、「プラウシブルコード」を見つける。プ
ラウシブルコードのスキャン中に、プラウシブルコード
の流れ図が形成される。図28の最終ステップ499におい
てプラウシブルコードのスキャンが終了すると、既知の
コード(KNOMN_CODE)の全バイト数が、既知のコードの
流れ図における全ての基本ブロックに対して基本ブロッ
ク記述子の「バイト長さ」アトリビュートの値を加算す
ることにより計算され、そしてプラウシブルコード(PL
AUSIBLE_CODE)の全バイト数が、プラウシブルコードの
流れ図における全ての基本ブロックに対して基本ブロッ
ク記述子の「バイト長さ」アトリビュートの値を加算す
ることにより計算される。次いで、見つかったコードの
割合が次のように計算される。
CODE) プラウシブルコードのスキャンは、プログラム内の可変
数のアドレス可能なメモリ位置に含まれた命令を含む可
変長さ命令セットにおいて法律命令を確認し、3つの異
なったスキャンモード間で切り換えを行うのが好まし
い。第1のスキャンモード(図28のステップ500ないし5
10)においては、未知のコードエリア内の各々のアドレ
ス可能なメモリ位置でスタートする法律命令に対して未
知のコードエリアをスキャンする。第1のスキャンモー
ドにおいて法律命令が見つかったときには、スキャンが
第2のスキャンモード(図28のステップ511ないし518)
へ切り換わり、第1スキャンモードで見つかった法律命
令の直後のアドレス可能なメモリ位置を検査する。第2
のスキャンモードは、実行転送命令までを含む一連の連
続する法律命令を有する1つの完全な命令ブロックをサ
ーチする。この第2のスキャンモード中に法律命令が見
つかった場合には、スキャンが第1のスキャンモードに
切り換わり、第1のスキャンモードにおいて既に見つか
っている法律命令の第1のアドレス可能なメモリ位置の
直後にあるアドレス可能なメモリ位置からスタートす
る。この第2のスキャンモード中に法律命令が見つから
なかった場合には、スキャンが第3のスキャンモード
(図29のステップ521ないし536)に切り換わり、全ブロ
ックの終わりに実行転送命令に対する既知の有効行き先
アドレスがあるかどうかチェックされ、もしあれば、そ
の既知の有効行き先アドレスで始まる有効命令があるか
どうかチェックされる。既知の行き先アドレスは、これ
がプログラムのアドレス範囲を越えるとき、又はプログ
ラムの既に見つかった命令の中間にあるときには、無効
であると考えられる。第3のスキャンモードにおいて既
知の有効行き先アドレスで始まる有効命令があるという
結論を得た場合には、ブロック全体がプラウシブルコー
ドであると考えられる。
のスキャンポインタは、メモリの命令エリアにおける最
小のアドレスにセットされ、変数PLAUSIBLE_CODE及びKN
OWN_CODEがクリアされ。次いで、スキャンがステップ50
1で始まる。スキャンポインタによってテーブル(図17
の224)が指示され、スキャンポインタが既知のコード
を指すかどうが判断される。もしそうであれば、スキャ
ンポインタがステップ503において次々に増加され、や
がて、ポインタがメモリの命令エリア外に出たことがス
テップ504でテストされて終了すべきプラウシブルコー
ドのサーチが行なわれるか、又はスキャンポインタが未
知のコードを指すことになる。スキャンポインタが未知
のコードを指したときには、ステップ505において実行
が続けられる。
されたメモリ位置の内容はフェッチされ、発見的テーブ
ルに対するインデックスとして使用される。このテーブ
ルの入力は、ゼロと比較され、第1スキャンモードがス
キャンポインタによりアドレスされたメモリ位置をスキ
ップすべきであるかどうかの判断が行われる。例えば、
VAX命令をスキャンするときには、各々のアドレス可能
な位置がデータのバイトを保持し、この場合、発見的テ
ーブルは、256個の異なる入力を含む。
的なデータ構造体及びプログラムに関連したシステムア
ーキテクチャーの特性及び特徴に基づいて予めプログラ
ムされる。
されない特権命令を有する場合には、これらの特権命令
がステップ506においてスキップされる(さもなくば、
これらが発見的テーブルのルックアップによって検出で
きない場合には、単一のアドレス可能なメモリ位置の内
容によって独特に識別できないので、ステップ510にお
いて非法律的とみなされる)。
アは、しばしばクリアされる。この場合に、第1スキャ
ンモードでのスキャンは、全てのゼロを含むアドレス可
能なメモリ位置に対してスキップしなければならない。
は、単一のアドレス可能なメモリ位置に命令が含まれる
ことはめったにない。VAX命令アーキテクチャーはこれ
に相当する。この場合に、第1スキャンモードでのスキ
ャンは、単一のアドレス可能なメモリ位置に含まれめっ
たにない命令として識別された内容を有するアドレス可
能なメモリ位置をスキップしなければならない。
使用されるコードによってプログラムに表示される場合
には、第1のスキャンモードは、命令ではなくて一連の
文字データを表すことの多いコードをスキップしなけれ
ばならない。第1のスキャンモードは、一連の少なくと
も4つのプリント可能なASCII文字をスキップするのが
好ましい。一連のプリント可能なASCII文字に対するこ
のテストはステップ502に行われる。このような一連の
文字が見つかった場合には、ステップ503においてスキ
ャンポインタが増加され、さもなくば、ステップ507に
おいて実行が続けられる。ステップ502では、例えば、
スキャンポインタにより指示されたプログラムアドレス
と、スキャンポインタに1、2及び3を加えたアドレス
とに含まれたデータが、プリント可能なASCII文字を指
示するようにセットされたフラグを含むテーブルをイン
デックスすのに用いられ、さもなくば、クリアされる。
これら4つのプログラムアドレスの各々に含まれたデー
タがプリント可能なASCII文字であるときには、一連の
文字が見つかると、実行をステップ507へ続けるのでは
なく、ステップ503へ分岐させる。それ故、ステップ502
は、次のようにコード化することができる。
1)) IF X.EQ.O THEN GO TO STEP_507 X←CHARACTER_TABLE(PROGRAM(SCAN_POINTERI+
2)) IF X.EQ.O THEN GO TO STEP_507 X←CHARACTER_TABLE(PROGRAM(SCAN_POINTERI+
3)) IF X.NE.O THEN GO TO STEP_503 GO TO STEP_507 メモリ位置をスキップするときには、ステップ503にお
いてスキャンポインタが1アドレス位置だけ増加され
る。おそらく、これはスキャンポインタをメモリの未知
のコードエリア外へ進める、これは、ステップ504にお
いて、スキャンポインタを命令メモリエリアの最大限界
と比較することによりテストされ、スキャンポインタが
命令メモリエリア内にある場合には、ステップ501でテ
ーブル(図17の224)をインデックスすることにより、
スキャンポインタが既知のコードで進んだかどうか判断
される。スキャンポインタが命令メモリエリア外へ進ん
だ場合には、プラウシブルコードに対するスキャンが終
了となり、見つかったコードの割合が最終ステップ499
において計算される。スキャンポインタが既知のコード
にある場合には、実行ルーチンがステップ503へ戻り、
スキャンポインタを1メモリ位置だけ増加し、既知のコ
ードにわたってスキャンさせる。スキャンポインタが未
知のコードにある場合には、実行がステップ505へ戻っ
て、次の未知のコードメモリ位置の内容が検査される。
きには、ステップ507において命令デコードポインタが
スキャンポインタにセットされ、ステップ508におい
て、命令をデコードする試みがなされる。ステップ509
では、例えば、命令のOPコードがフェッチされ、指定子
の数を保持すると共にOPコードに対するデータをデコー
ドするためのテーブルに対してインデックスとして使用
され、そして各指定子がフェッチされ、デコードされ
る。ステップ509においては、命令デコードポインタが
デコード中に増加されるときにステップ502及び504と同
様にテストされ、命令デコードポインタがメモリの未知
のコードエリア外に進められたかどうか判断される。も
しそうならば、実行はステップ503へ分岐し、さもなく
ば、ステップ510において、非法律命令OPコード又は非
法律指定子がデコード中に検出された場合にステップ50
3へ分岐する。
は、実行ルーチンがステップ511始まる第2のスキャン
モードで継続される。ステップ511では、アドレステー
ブル(図17の224)の1つ又は複数の入力が、デコード
された命令のアドレス位置によってインデックスされ、
これらのテーブル入力は、プラウシブルコード命令の開
始部及びデコードされた命令の中間部を指示するように
マークされる。次いで、ステップ512では、デコードさ
れた命令に続くアドレスでアドレステーブルがインデッ
クスされ、既にデコードされた命令のアドレスであるか
どうか判断され、もしそうであれば、それはデコードさ
れた基本ブロックの開始部であり、この場合、プラウシ
ブルコードのスキャンが図29のステップ535において続
けられる。さもなくば、プラウシブルコードのスキャン
は図28のステップ513において続けられる。
別の命令をデコードする試みがなされる。しかしなが
ら、ステップ514でテストされて命令デコードポインタ
が未知のコードメモリエリア外へ進められたとき、或い
はステップ516でテストされて非法律のOPコード又は指
定子が見つかったときには、デコードプロセスが終了と
なる。ステップ514又は516でデコードプロセスが終了と
なると、テーブル(図17の224)がステップ517でクリア
され、デコードされた命令がスキャンポインタのアドレ
スまで戻されることを指示すると共に実行ループはステ
ップ503まで戻り、第1のスキャンモードでスキャンを
続ける。
ードされると、ステップ518において、実行転送命令が
デコードされない限り、実行がステップ511へ分岐して
戻され、実行命令までを含む付加的な命令をデコードす
る試みがなされる。ステップ518において実行転送命令
が見つかると、プラウシブルコードに対する第3のスキ
ャンモードが図29のステップ521で始まる。
(図17の224)の1つ又は複数の入力が実行転送命令の
アドレス位置によってインデックスされそしてこれらテ
ーブル入力は、プラウシブルコード命令の開始部及び命
令の中間部を指示するようにマークされる。ステップ52
2では、行き先指定子がテストされて、計算行き先アド
レスであるかどうか判断され、もしそうであれば、ステ
ップ523において、後方記号実行がスキャンポインタへ
戻るよう試みられ、行き先として一定値が得られる。ス
テップ524でテストされて、未知の値が得られた場合に
は、実行が図28のステップ517へ分岐し、スキャンポイ
ンタまでの全コードブロックがリジェクトされると共
に、第1スキャンモードでスキャンが続けられる。
うに、例えば、絶対アドレス、絶対間接アドレス、相対
アドレス又は相対関接アドレスであるかに基づいて、そ
の有効性がチェックされる。又、行き先アドレスは、テ
ーブル(図17の224)をインデックスすることにより示
されるように、メモリの命令エリア内にあるが既にデコ
ードされた既知の命令又はプラウシブル命令の中間にあ
る場合には、無効とみなされる。行き先アドレスが無効
の場合には、実行が図28のステップ517へ分岐し、スキ
ャンポインタまでの全てのコードブロックがリジェクト
されると共に、第1スキャンモードでスキャンが続けら
れる。
インタに等しくセットされる。ステップ527では、有効
な行き先が外部アドレスである場合に、実行がステップ
528へ分岐する。ステップ529においては、テーブル(図
17の224)をインデックスすることにより示されるよう
に、有効な行き先が既にデコードされた命令のアドレス
である場合に実行がステップ528へ分岐する。ステップ5
28に達すると、スキャンポインタまで戻る全コードブロ
ックがプラウシブルコードとして有効化される。それ
故、ステップ528において、プラウシブルコードのブロ
ックに対してブロック記述子が形成される。この基本ブ
ロック記述子に含まれるのは、ブロック内のバイト数に
セットされたアトリビュート「バイト長さ」であり、こ
れはスキャンポインタとEND_OF_BLOCKとの差に1を加え
たものとして計算される。
スであると決定されそしてステップ529においてその内
部アドレスが既にデコードされた命令にないと決定され
たとき、行き先アドレスは、既にデコードされた命令で
はない命令メモリのエリアになければならない。行き先
アドレスから始めて命令をデコードできる場合には、既
にデコードされた全コードブロックがプラウシブルコー
ドであると考えられ、さもなくば、既にデコードされた
全コードブロックはプラウシブルコードとはみなされな
い。それ故、ステップ531において、命令デコードポイ
ンタは行き先アドレスにセットされそして命令をデコー
ドする試みがなされる。ステップ523及び533において、
命令デコードポインタが既にデコードされた命令へ進め
られるが、或いは非法律OPコード又は指定子がデコード
される場合は、デコードプロセスが不首尾に終わると考
えられる。さもなくば、法律命令がデコードされたと
き、実行がステップ528へ続けられ、スキャンポインタ
から図28のステップ518で見つかった実行転送命令のア
ドレスまでの基本コードブロックに対してブロック記述
子が形成される。
し続ける試みがなされ、これは、図28のステップ518で
見つかった実行転送命令の行き先において開始される。
これは、ステップ236で始めて図18の流れ図形成ルーチ
ンを呼び出すことによって行われる。しかしながら、プ
ラウシブルコードの流れ図は既知の流れ図と混同しない
のが好ましく、従って、既知のコードのみが変換され
る。例えば、プラウシブルコードのブロックは、既知の
コードのブロックに対する後続及び先行ブロックのリス
トに加えられず、そして既知のコードのブロックは、未
知のコードのブロックに対する後続及び先行ブロックの
リストに加えられない。いずれにせよ、基本ブロック記
述子は、基本ブロックを既知のコード又はプラウシブル
コードとして識別するアトリビュートを有する。
は、流れ図構成プロセスにより何らかのプラウシブルコ
ードが見い出せなかったことが依然として考えられる。
それ故、ステップ530では、スキャンポインタがEND_OF_
BLOCKにセットされる。更に、図28のステップ512におい
て、プラウシブルコードからの実行経路が既知のコード
のブロックに延びることが分かると、プラウシブルコー
ドのスキャンを続けて更に別のプラウシブルコードを見
つけなければならない。この場合に、ステップ535にお
いて、END_OF_BLOCKが命令デコードポインタにセットさ
れ、そしてステップ536において、スキャンポインタか
らEND_OF_BLOCKまでのプラウシブルコードブロックに対
してブロック記述子が形成されるが、流れ図形成ステッ
プ530はスキップされ、ステップ536の後にステップ534
が実行される。
28のステップ503において第1スキャンモードでスキャ
ンが続けられる。
いてオリジナルプログラム内の変換されていない命令を
検索する助けとする方法がフローチャートで示されてい
る。上記したように、そして図30のステップ541に示し
たように、オリジナルプログラムが変換され、トランス
レーターはプログラムに対する像情報ファイルを発生す
る。次いで、ステップ542において、変換されたプログ
ラムが(図9のRISCコンピュータ50により)インタープ
リター及びオリジナルプログラムに関連して実行され
る。この実行中に、変換されたプログラムからインター
プリターへ実行が切り換わるときに情報が実行ログファ
イルに記録され、インタープリターは変換されないコー
ドに対して計算行き先アドレスを決定する。インタープ
リターは、例えば、計算行き先アドレスが求められてい
ない実行転送命令のオリジナルプログラムにおける原点
アドレスを識別する情報と、オリジナルプログラムにお
けるその行き先アドレスに対して計算された値とを記録
する。好ましくは、この情報はオリジナルプログラムに
おける原点アドレスと行き先アドレスの対の形態であ
る。
後に、ステップ543において実行ログファイルが検査さ
れ、インタープリターが呼び出されて変換されていない
コードの位置を決定したかどうかの判断がなされる。も
しそうであれば、ステップ544において、プログラムの
像情報ファイル及び実行ログファイトを用いてオリジナ
ルプログラムが変換される。例えば、流れ図を形成する
前に、実行ログファイルの行き先アドレスがデコードさ
れていないブロックのリスト225に加えられる。流れ図
を形成した後に、分析されていない入力ポイントで始ま
るブロックの先行ブロックが検査されて、各原点アドレ
スを含むブロックを備えているかどうかの判断がなさ
れ、もし備えていなければ、先行ブロックへのリンクが
加えられ、これらの新しいリンクを通して後方記号実行
が再び繰り返される。それ故、トランスレーターは原点
アドレス及び行き先アドレスを用いてオリジナルプログ
ラム内で考えられる実行経路を検査し、これらの経路
は、オリジナルプログラムの第1の変換中に発見されな
かったもので、且つ変換されたプログラムの実行中又は
オリジナルプログラムの変換されなかった部分の解読中
に取り上げられなかったものである。
タ構造体(図17の211)及び変換されたプログラムのテ
ーブル224をファイルに記憶することができる。この場
合、再変換は、オリジナル流れ図の形成が終了したとこ
ろで開始することができる。流れ図を形成し続けるため
に、テーブル224がオリジナルアドレスでインデックス
され、それらを含むブロックが見つけられる。次いで、
実行ログファイルからの行き先アドレスが、各々のオリ
ジナルアドレスを含むブロックを備えた先行ブロックの
リスと共に待ち行列(図17の225)にロードされる。次
いで、流れ図の形成が図18の第1ステップ229において
再開される。
れた後に、その再変換されたプログラムがステップ542
において実行される。実行から再変換までの情報のこの
フィードバックは、変換されたプログラムを各々実行し
た後に行なって、実際に検索されたオリジナルプログラ
ムにおける全ての命令が変換されるようにすることが好
ましい。
ないか又は不可能であるような状態、例えば、図17に示
すデータ構造体が変換を行うコンピュータのランダムア
クセスメモリの容量を遥に越えるような状態において、
相互に依存するプログラムを変換するための手順が示さ
れている。2つのプログラムは、それらが互いに呼び出
し合うときに相互に依存する。これらの相互依存性は、
プログラム内の命令を検索して変換するプロセスにしば
しば干渉する。特に、復帰ポイントを適切に接続しなけ
ればならず、これには、呼び出されている像に関する情
報が必要である。
又は更新された像情報ファイルは、プログラム内の各々
の使用できる入力ポイントを呼び出す作用に関する情報
を記憶するのに用いられる。像を変換するときには、別
の像内の入力ポイントへの呼び出しが、その入力ポイン
トを呼び出す作用について記録された情報を使用するこ
とにより変換される。
トを呼び出す作用が第1の像に依存し、第1の像が変換
されるまで分からないような状態を生み出す。しかし、
第1の像の変換には、第2の像内の入力ポイントを呼び
出す作用に関する情報が必要である。このように矛盾す
る相互依存性は、例えば、第1の像が第2の像内の入力
ポイントを呼び出しそして第1の像内の手順のアドレス
を識別する手順パラメータを通すが、次いで、第2の像
が第1の像の手順をコールバックするような場合に生じ
る。第1の像を変換するためには、第2の像内の入力ポ
イントを呼び出す作用に関する情報、例えば、第2の像
が第1の像をコールバックするといった情報が分からね
ばならない。しかしながら、この情報は、第1の像を検
査することによって決定できない。第2の像を変換する
ためには、第1の像を呼び出すことに関連した情報、例
えば、第1の像のコールバック中に通された手順パラメ
ータの1組の考えられる値や、その手順パラメータの各
考えられる値に対するコールバックの作用といった情報
が分からねばならない。しかし、この情報は、第2の像
を検査することにより決定できない。それ故、各情報
を、互いに他の情報が変換のために必要な全ての情報を
もつ前に変換しなければならない場合に、矛盾する状態
が生じる。
換によって分析される。ステップ551での第1プログラ
ム(PROGRAM#1)の変換中に、トランスレーターは、
第2プログラム(PROGRAM#2)の入力ポイントを呼び
出す作用に関する情報がないことが分かる。というの
は、第2のプログラムがまだ変換されていないからであ
る。それ故、トランスレーターは、第2プログラムの入
力ポイントへの呼び出しに関して、例えば、ノーマル復
帰や、コールバックなしといったデフォールト仮定をす
る。ステップ552において第2プログラムが変換される
と、トランスレーターは、そのデフォールト仮定とは逆
に、第2の像がコールバックを有すると判断する。
ファイルを用いて、あるプログラムの手前の変換中に発
見された新たな情報を他のプログラムの再変換へ通すよ
うな繰り返し再変換のプロセスを使用することができ
る。ステップ555及び556では、厳密なコンバージェンス
状態は生じたときに繰り返しの再変換プロセスが終了と
なる。厳密なコンバージェンス状態は、像情報ファイル
において変化が生じなくなるまで2つのプログラムの各
々が交互のシーケンスで再変換されるときに生じる。し
かしながら、このコンバージェンス状態は、少数の変換
であっても、像情報ファイルに関連変化が生じないとき
を感知することによって確かめることができる。
なる仮定は、個々のプログラムがその最初の変換中に生
じた像情報ファイルで再変換されるときに、その個々の
プログラムの第2の変換で変化が生じないことである。
この仮定では、第2のプログラムの変換によって第1の
プログラムの再変換に作用が及ぶのは、第2プログラム
に関する像情報が第1プログラムの変換に関連した仕方
で変化する場合であるという結論に達する。図32には、
第1プログラムの最初の変換及び第2プログラムの最初
の変換の直後に得られる第1プログラムの像情報ファイ
ル561及び第2プログラムの像情報ファイル562が示され
ている。第1プログラムの像情報ファイル561は、第1
プログラムの最初の変換中に検査された第1プログラム
入力ポイント(ENTRY A、ENTRY B、ENTRY C、ENTRY
D、...)に関する情報を含む。この情報は、各入力ポイ
ントに対し、入力ポイントのアドレスと、その入力ポイ
ントに関連したコールバックパラメータとを含み、これ
らは、図24のステップ372で発見されて、変換中に図24
のステップ373で像情報ファイル561に記録されたもので
ある。更に、像情報ファイル561は、第1プログラムか
ら他のプログラムの外部入力ポイントへの呼び出し(CA
LL Q、CALL S、CALL Y、CALL Z)に関する情報564を含
み、これは、変換中に図19のステップ256、258又は259
において像情報ファイル561に記録されたものである。
例えば、この情報は、呼び出しの外部行き先アドレス、
呼び出しの型式(CALLSやCALLGのような)、呼び出しに
関連したパラメータの数、及びパラメータの一定値を含
む。パラメータの一定値は、例えば、呼び出し命令から
の後方記号実行によって得られる。同様に、第2プログ
ラムは、第2プログラムから他のプログラムの外部入力
ポイントへの呼び出し(CALL A、CALL B、CALL H、CALL
K)に関する情報565、及び第2プログラムの最初の変
換中に得たプログラム入力ポイント(ENTRY Q、ENTRY
R、ENTRY S)に関する情報566とを含んでいる。
内の情報によって再変換された場合に、この第1プログ
ラムが変化するがどうかについて考える。第1プログラ
ムに対する情報ファイル561内のプログラム入力ポイン
トのアドレスを、第2プログラムに対する像情報ファイ
ル562内の外部呼び出しのアドレスに合致させ、そして
第1プログラムに対する像情報ファイル561内の外部呼
び出しのアドレスを、第2プログラムに対する情報ファ
イル562内のプログラム入力ポイントのアドレスに合致
させることにより、第2プログラムに対する像情報ファ
イル562内の関連外部呼び出し入力ポイントが識別され
る。第2図プログラムに対する像情報ファイル562内の
これら外部呼び出し及びプログラム入力ポイントについ
ての情報が、上記のデフォールト仮定から、第1プログ
ラムの再変換に影響を及ぼすように異なる場合には、第
1プログラムを再変換しなければならない。更に、像情
報ファイル562が、第1プログラム内の変換されていな
いコード位置を呼び出すようなプログラム#1への外部
呼び出し(図32のCALL Kのような)を有する場合には、
その変換されていない呼び出し位置のアドレスを最初の
分析されていないブロック入力ポイントとして使用して
第1プログラムを再変換しなければならない。再変換を
考慮しているプログラムの変換されていない部分への外
部呼び出しに加えて、特に関連した変化としては、再変
換を考慮しているプログラム内の入力ポイントへの外部
呼び出しに対する呼び出しパラメータの新たな一定値が
含まれる。というのは、これらの一定値は、再変換中
に、他のプログラム内の変換されていないコードへの行
き先アドレスを分析するために後方記号実行によって使
用されるからである。さらに、上記の関連した変化に
は、再変換を考慮中のプログラムにより呼び出されたプ
ログラム入力ポイントに対する新たなコールバックパラ
メータも含まれる。というのは、再変換中にこれらのコ
ールバックパラメータの後方記号実行が分析されて、再
変換を考慮中のプログラム内の変換されていないコード
における新たなプログラム入力ポイントの値が求められ
るからである。
す変換に関する手順であって、一方のプログラムの再変
換を、他方のプログラムの像情報ファイルの内容に関連
する変化が生じた後にのみ実行することによって迅速な
コンバージェンスを得る手順のフローチャートが示され
ている。第1ステップ571及び第2ステップ572は、図31
の手順の第1ステップ551及び第2ステップ552と同じで
ある。しかしながら、図33の第3ステップ573では、第
2プログラムの像情報ファイル(図32の562)における
関連入力が、図32について上記したように、第1プログ
ラムの再変換におそらく影響を及ぼすであろうデフォー
ルト仮定からの変化について検査される。このような変
化が発見されると、第1プログラムはステップ574にお
いて再変換され、さもなくば、第1プログラムの再変換
も、第2プログラムの再変換も不要である。
第1プログラムの像情報ファイルにおける外部呼び出し
及びプログラム入力ポイント情報に対してなされた変化
は、例えば、その変化した入力に対してフラグを立てそ
して古い入力のコピーを保持するか、或いは新たな入力
に対してフラグを立てることにより注目される。第1プ
ログラムの再変換の後に、ステップ575において、第1
プログラムの像情報ファイル(図32の561)における関
連変化入力が、図33について上記したように、第2プロ
グラムの再変換におそらく影響するであろう変化につい
て検査される。このような変化が見つかると、ステップ
576において第2プログラムが再変換され、さもなく
ば、第1プログラムの再変換も、第2プログラムの再変
換も不要である。
の第2プログラムの像情報ファイルにおける外部呼び出
し及びプログラム入力ポイント情報に対してなされた変
化は、例えば、その変化した入力にフラグを立てそして
古い入力のコピーを保持するか、或いは新たな入力に対
してフラグを立てることにより注目される。第2プログ
ラムの再変換の後に、ステップ577において、第2プロ
グラムの像情報ファイル(図32の562)における関連変
化入力が、図32について上記したように、第1プログラ
ムの再変換におそらく影響するであろう変化につい検査
される。このような変化が見つかると、ステップ574に
おいて第1プログラムが再変換され、さもなくば、第1
プログラムの再変換も、第2プログラムの再変換も不要
である。
セスは、何回も繰り返されるが、最終的にこのプロセス
はコンバージェンス状態となる。多くの場合、このプロ
セスは各像が正確に記述された際にコンバージェンス状
態になり、それ以上の再変換は不要となる。例えば、実
行時間ライブラリーは、典型的に、とりわけ相互依存性
を有する像の収集体を含むが、これらは、指定された入
力ポイントにおいてもユーザプログラムによって呼び出
され、ユーザプログラムとの相互依存性はもたない。こ
の場合、多数の変換及びチェックされた仮定のプロセス
は、各像が正確に記述された際に−−指定の入力ポイン
トにおいて各像を呼び出す作用に関する完全な情報を含
む−−コンバージェンス状態に達する。この情報を含む
ファイルは、実行時間ライブラリー像の再変換を必要と
せずに、ユーザプログラムの変換に使用することができ
る。
説明したが、あるプログラミング言語のCISCコードを別
のプログラミング言語のCISCコードに変換するのにも非
常に有用であり、例えば、ある種のデジタルコンピュー
タのプログラムを別の種類のデジタルコンピュータのプ
ログラムにトランスポートしたり、或いはある種のオペ
レーティングシステムのプログラムを別の種類のオペレ
ーティングシステムにトランスポートしたりするのにも
有用である。更に、本発明の分析及びエラーチェック特
徴は、プログラムを変換せずにテストしたりデバックし
たりするのに使用することができる。
ンスアトリビュートは記号テーブルのリテラルノードを
指す。ノードは、名前の付けられたリテラル)SYM$LOF
FSETのような)、又は0や1のような定数に対するもの
である。
1] (L01) 2.REGREF(レジスタ) 直接レジスタレファレンスは、REGREFタプルで表され
る。これらは、レジスタ番号アトリビュートした含ま
ず、ソース又は行き先オペランドとして直接使用するこ
とができる。
レジスタ番号ではなく、RISCコンピュータレジスタR0−
R31、AP、FP及びSPについて定義されたmtu_reg_k_:定数
のセットのうちの1つである。
付けるのに使用できる記号ノードアトリビュートを有し
ている。又、コードジェネレータによって使用されるア
トリビュートも有している。
してのメモリレファレンスである。
ジスタオペランド及びオプションのオフセットオペラン
ドの2つの成分を有している。ベースレジスタオペラン
ドは、常に、REGREFタプルのアドレスである。オフセッ
トオペランドは、もしあれば、LITREF、SYMREF又はCOMP
−OPタプルのいずれかを指すポインタである。オフセッ
トオペランドが指定されない場合には、オフセット0が
とられる。
である。ソースオペランド内のメモリを参照するため
に、FETCHタプルを使用して、その位置の値が必要とさ
れることを指示しなければならない。MEMREFは、行き先
オペランドとして直接使用することができるし、或いは
MOVAX又は同様の命令におけるソースとして直接使用す
ることもできる、これは、マイクロコンパイラーの前端
がアドレスコンテクストレファレンスを値コンテクスト
レファレンスから圧別する必要があることを意味し、こ
れは、命令の形式及びオペランド番号に基づく単純なテ
ーブルルックアップである。INCL命令の指定のような変
更オペランドの場合は、アドレスコンテクスト形態を使
用しなければならない。
も使用される。
セットされる3つのフラグを含んでいる。
示する。例えば@offset(Rn)である。
する。
する。これは、デファードや自動増加では指定できな
い。
ドとして表示される。
るのに使用できる記号ノードアトリビュートを有してい
る。又、同じベース位置に対する何回ものレファレンス
を最適に行うためにコードジェネレータによって使用で
きるアトリビュートも有している。
を表すのに使用される。名称「SYMREF」は、「SYMbol n
ode REFerence」ではなくて、「SYMbol table REFerenc
e」を意味するもの理解されたい。というのは、それが
指す記号テーブルノードは、記号ノードであるか、外部
ノードであるか、ラベルノードであるか又はルーチンノ
ードだからである。
れは、記号の値の得るのにFETCHが使用されないことを
意味する。記号ノードは、この点についてはリテラルノ
ードと同じであり、あるコンパイル−時間値について単
なる記号名称である。
トに基づいてFETCHが要求される。アドレス又は中間モ
ードレファレンスは、FETCHを必要としない。(中間モ
ードレファレンスは外部に対する法律に過ぎない。)値
のレファレンスに場合には、SYMREFのFETCHは必要とさ
れる。例えば、外部、ラベル又はルーチンへの分岐はSY
MREFを直接使用する。例えば、あるラベルの値のMOVEL
命令は、SYMREFのFETCHを使用する。
るのに使用することができる、このフラグは、外部及び
ラベルノードのSYMREFにのみ使用できる。
参照されるラベルの信号は、分岐タプルのターゲットオ
ペランドとして使用されるSYMREFタプルによっても指示
される。
たラベルは、ノーマルラベルタプルで表される。しかし
ながら、UNWIND_TARGETフラグは、このタプルにおいて
セットされる。
TION_ENTRY 入力ポイントディレクディブタプルは、ソース内のJSB_
ENTRY、CALL_ENTRY、IO_INTERRUPT_ENTRY又はEXCEPTION
_ENTRYディレクティブのうちの1つでデクレアされたル
ーチンのスタートにフラグを立てる。タプルは、デクレ
アされたルーチンのMTU入力ノードを指す。
レジスタ使用及び他の情報を含んでいる。
するか、又はメモリ位置を通しての間接分岐を指定す
る。第1のオペランドは、ラベル記号ノードを識別する
SYMREFタプルか又は分岐アドレスの指定する値発生タプ
ルかのいずれかのアドレスでなければならない。(REGR
EF又はFETCH)。
くてJSBを発生することに注意されたい。
である第1オペランドで指定されたルーチンへのVAX呼
び出し命令に対応する。第2のオペランドは、パラメー
タカウント(CALLSの場合)であるか、或いはCALLGのた
めのパラメータリストのアドレスである。
1) callg (ap),(r10) L01: regref [ap] L02: regref [r10] L03: memref (L01) L04: memref (L02) L05: callg (L04,L0
3) 3.RETURN RETURNタプルは、VAX復帰命令に対応する。
ノードと、復帰をエミュレートするためにインタープリ
ターを呼び出さねばならないかどうかを指示するフラグ
とでRETURNタプルにタグ付けを行う。
は、記号ノードアドレスを指すSYMREFであるか又は間接
的JSBをターゲットを表す値発生タプルかのいずれかで
ある単一のオペランドを有している。
応している。アナライザーは、復帰しつつあるルーチン
の記号ノードを指すポインタでこれらのタプルを更に注
意する。
用される。このタプルは、(VAX分岐OPコードを指定す
る)OPコードアトリビュートと、記号ノードを指すSYMR
EFタプルであるか又は間接的行き先を表す値発生タプル
かのいずれかのアドレスである行き先オペランドとを有
している。オプションの追加オペランドの存在は条件分
岐の形式によって左右される。例えば、BLEQは追加オペ
ランドをもたず、一方、BLBCはテストされるべき項目を
指定するオペランドを有し、BBSは2つの追加オペラン
ドを有する。
メータを示す。形式の欄は、オペランドとして許された
オペランドの形式を指示し、「Value」は、LITREF、SYM
REF(コンパイル時間記号の)、COM_OP、REGREF及びFET
CH(SYMREF、MEMREF又はIDXREFの)が許されたことを示
し、一方、「Addr」は、REGREF、SYMREF、MEMREF又はID
XREFが許されたことを示す。オペランド1は常に分岐行
き先である。
である。その命令アトリビュートはOPコードを表す定数
であり、そのオペランドは命令オペランドを表す。
_k_*値のうちの1つである。又、RISC向けのOPコード
に対する構成を表すmtu_evax_k_*のうちの1つでもあ
る。
一般に、LITREF、SYMREF、COMP_OP、REGREF及びFETCH
(SYMREF、MEMREF又はIDXREF)オペレータは、値が使用
されるオペランドに対して許され、一方、REGREF、SYMR
EF、MEMREF及びIDXREFは、アドレスが使用されるオペラ
ンドに対して許される。「INCx」命令の行き先のような
「変更」式のオペランドの場合は、アドレスの形態を使
用しなければならない。
情報をコードジェネレータに与える条件コード使用フラ
グを有している。これらは、N及びZ、C及び/又はV
ビット値を、現在命令によって発生されたコードにより
シュミレートしなければならないかどうかを指定する。
付加的な「ローカルNZ」ビットは、N/Zの唯一の使用が
その直後の1つ以上の条件分岐命令によるものである場
合にセットされる。これにより、コードジェネレクター
は、ある場合に、結果の値を直接使用することができ
る。
Claims (34)
- 【請求項1】コンピュータプログラムの一連の命令を分
析するようにデジタルコンピュータを動作する方法であ
って、上記命令の各々は上記コンピュータプログラムに
各々のプログラムアドレスを有しており、上記コンピュ
ータプログラムは、指定のアドレスへ実行を転送する命
令であって上記命令のプログラムアドレスと共に上記命
令の実行シーケンスを定めるような命令を含み、上記命
令は、指定のメモリアドレスにおいてメモリの内容を変
更するオペレーションを指定する命令と、指定の汎用レ
ジスタの内容を変更するオペレーションを指定する命令
とを含み、更に、上記プログラムは、上記汎用レジスタ
のうちの指定の汎用レジスタの内容から決定された上記
プログラム内の行き先アドレスへプログラム実行の転送
を指定する少なくとも1つの実行転送命令を含んでお
り、上記の方法は、プログラム実行の前に上記行き先ア
ドレスとして少なくとも1つの値をサーチすることを含
み、これは、 a)上記汎用レジスタのうちの指定の汎用レジスタがプ
ログラムの実行中にもつであろう内容に関して上記行き
先アドレスの表示を形成し、 b)上記実行転送命令に先行する上記実行シーケンス内
の命令を上記実行シーケンスとは逆の順序で検査し、そ
して 1)その検査された命令が、上記表示に示された汎用レ
ジスタの内容の変更を指定するが、上記標示が上記検査
された命令のアドレスに対して一定の値を表すような変
更を指定しないときには、その指定された変更を考慮す
るように上記表示を変更して、プログラムの実行が上記
検査された命令のプログラムアドレスに到達したとき
に、上記表示に示された少なくとも1つの汎用レジスタ
がプログラムの実行中にもつであろう内容に関して上記
表示が上記行き先アドレスを表すようにし、そして 2)上記検査された命令が上記表示に示された汎用レジ
スタの内容の変更を指定し、上記検査された命令のアド
レスに対して一定の値を上記表示が表すときには、上記
表示から上記行き先アドレスとしての上記値を決定す
る、 という段階によって行うことを特徴とする方法。 - 【請求項2】上記表示は、メモリアクセスアーギュメン
ト表示によって指定されたメモリアドレスにおけるメモ
リの内容に関して上記行き先アドレスを表すメモリアク
セスファンクションを含み、上記方法は、更に、検査さ
れた命令は指定がメモリアドレスにおけるメモリの内容
を変更するときにはメモリアクセスアーギュメント表示
をその検査された命令内のメモリアドレス指定子に合致
させるよう試み、そして合致が生じたときには、上記表
示内のメモリアクセスファンクションを、指定のメモリ
アドレスにおけるメモリの変更された内容の表示と置き
換えるという段階を含んでいる請求項1に記載の方法。 - 【請求項3】上記表示のメモリアクセスアーギュメント
をその検査された命令内のメモリアドレス指定子に合致
させるよう試みる上記段階は、上記検査された命令に先
行する命令をサーチして、上記メモリアクセスアーギュ
メント表示に合致する表示形態に上記メモリアドレス指
定子をセットする命令を見つけることを含む請求項2に
記載の方法。 - 【請求項4】上記表示を、サブルーチン呼び出しオペレ
ーション中にサブルーチンへ通されるサブルーチンアー
ギュメントに対する所定の表示フォーマットに合致させ
るよう試み、そして合致が生じたときに、上記実行転送
命令から上記サブルーチンアーギュメントへコールバッ
クが生じることを記録する段階を更に含む請求項1に記
載の方法。 - 【請求項5】検査される命令のアドレスがサブルーチン
呼び出し命令の行き先アドレスであるときには、上記表
示を、サブルーチン呼び出し命令のサブルーチンアーギ
ュメントに対する所定の表示フォーマットに合致させる
よう試み、そして合致が見つかったときには、上記サブ
ルーチン呼び出し命令に先行する上記実行シーケンス内
の命令を上記実行シーケンスとは逆の順序で検査するこ
とにより上記サーチを続けるという段階を更に含む請求
項1に記載の方法。 - 【請求項6】上記サブルーチンアーギュメントは、スタ
ックレジスタの内容によって指示されたメモリアドレス
を有するメモリ内のスタックに記憶され、上記サブルー
チン呼び出し命令は、アーギュメントポインタレジスタ
に、サブルーチンアーギュメントのメモリアドレスを示
す値をセットし、そして上記表示は、スタックレジスタ
の行き先をアーギュメントポインタレジスタの行き先と
置き換えることによりサブルーチン呼び出し命令の作用
を考慮するように変更される請求項5に記載の方法。 - 【請求項7】上記サブルーチン呼び出し命令は、多数の
サブルーチンアーギュメントを通し、そしてサブルーチ
ンアーギュメントの数を指定する指定子を含んでおり、
更に、上記サブルーチンのアーギュメントに対する所定
の表示フォーマットは、サブルーチンアーギュメントの
上記指定の数によって決まる請求項5に記載の方法。 - 【請求項8】上記表示から上記行き先アドレスとしての
値を決定する上記段階は、検査された命令がプログラム
カウンタレジスタを指定するレジスタ指定子を含むとき
にその検査された命令のプログラムアドレスから行き先
アドレスを計算する段階を含む請求項1に記載の方法。 - 【請求項9】上記表示は、メモリアクセスファンクショ
ンフラグ、レジスタ指定番号及び変位定数を含む固定の
フォーマットで記憶される請求項1に記載の方法。 - 【請求項10】上記表示は、所定の1組のレジスタ指示
子、演算子及び定数から選択された一連の文字を含む可
変長さのフォーマットで記憶される請求項1に記載の方
法。 - 【請求項11】上記演算子は、加算、乗算及びメモリア
クセスオペレーションを含む請求項10に記載の方法。 - 【請求項12】上記表示を変更する段階は、上記検査さ
れた命令のレジスタ指定子により指定されたレジスタを
示すレジスタ指示子が発生するたびに新たな表示を上記
表示に置き換え、そして代数簡易化の法則を適用するこ
とにより上記表示を簡易化することを含む請求項10に記
載の方法。 - 【請求項13】上記表示は、これが絶対又はプログラム
カウンタ相対プログラムアドレスに簡易化されるときに
上記検査される命令のアドレスに対して一定の値を表す
請求項12に記載の方法。 - 【請求項14】上記行き先アドレスとしての値が上記表
示から決定された後にその値を有効化する段階を更に備
え、この有効化段階では、上記行き先アドレスのアクセ
スモードが、絶対、絶対間接、プログラムカウンタ相
対、又はプログラムカウンタ相対間接のいずれであるか
をテストし、その各アクセスモードに対し、各々の所定
の1組の有効アドレス内に入らないものを無効行き先ア
ドレスとして拒絶する請求項1に記載の方法。 - 【請求項15】上記命令は、OPコード、自動増加指定子
及び自動減少指定子を有する命令を含み、そして上記汎
用レジスタのうちの指定の汎用レジスタの内容に対する
指定の変更を考慮するように上記表示を変更する段階
は、次のような一連の段階を含み、即ち、 i)表示に示された自動増加レジスタを指定する命令内
の各自動増加指定子に対し、表示に示された自動増加レ
ジスタに関連した表示内の変位を増加し、 ii)命令内のOPコードにより指定される各オペレーショ
ンで、上記表示に示された汎用レジスタの内容を変更す
るか、又は表示内のメモリアクセスアーギュメントによ
り指示されたメモリ位置を変更するような各オペレーシ
ョンに対して、OPコードによる変更を考慮するように上
記表示を変更し、そして iii)表示に示された自動減少レジスタを指定する命令
内の各自動減少指定子に対し、表示に示された自動減少
レジスタに関連した表示内の変位を減少する、段階を含
む請求項1に記載の方法。 - 【請求項16】上記検査段階は、更に、 3)検査された命令が上記表示に示された汎用レジスタ
の内容の変更を指定するが、この変更は上記表示を所定
の仕方で変更することによって考慮できないような所定
の種類の変更であるときには、上記表示に対して「未
知」の値を決定し、そして上記検査された命令に先行す
る命令の検査を終了させることを含む請求項1に記載の
方法。 - 【請求項17】上記検査段階は、更に、 3)検査された命令が、上記汎用レジスタのうちの指定
のレジスタの内容の変更を指定し、そしてその検査され
た命令が、命令OPコードの所定のサブセットにおいて、
上記表示の変更が許されないようなOPコードを有すると
きには、上記表示に対して「未知」の値を決定し、そし
て上記検査された命令に先行する命令の検査を終了させ
ることを含む請求項1に記載の方法。 - 【請求項18】上記検査段階は、更に、 3)検査された命令が、命令OPコードの所定のサブセッ
トにおいて、汎用レジスタの内容もアドレス可能なメモ
リ位置の内容も変更しないようなOPコードを有している
ときには、命令の作用を考慮するように上記表示を変更
せず且つ上記検査された命令から上記行き先アドレスと
しての値を決定せずに、命令の検査を中断させることを
含む請求項1に記載の方法。 - 【請求項19】上記実行シーケンスは、上記実行転送命
令の前に上記シーケンスに複数の実行経路を含んでお
り、そして上記検査段階は、上記実行経路の各々を通し
て後方に逆の順序で命令を検査して、上記行き先アドレ
スとしての複数の値を決定することを含み、これら値
は、上記実行シーケンスとは逆の順序で上記経路の各々
を通して命令を検査することにより得た上記行き先アド
レスに対する値を含んでいる請求項1に記載の方法。 - 【請求項20】上記実行経路の少なくとも1つはそれ自
身へループして戻り、上記実行経路の各々を通して後方
に逆の順序で命令を検査する上記段階は、上記実行経路
の各々がそれ自身へループして戻るかどうかをチェック
し、そしてそれ自身へ戻るときには上記実行経路の各々
における命令の検査を終了させる段階を含む請求項19に
記載の方法。 - 【請求項21】上記命令の連続するものをブロックにグ
ループ分けし、各ブロックの命令がプログラムアドレス
シーケンスで実行されると共に、上記実行転送経路が上
記ブロックの1つにおける最後の命令から上記ブロック
の1つにおける最初の命令へと生じるようにし、更に、
各ブロックごとに、上記各ブロックへの実行転送経路が
始まるところの先行ブロックのリストと、上記各ブロッ
クからの実行転送経路が延びていくところの後続ブロッ
クのリストとを形成し、そして上記実行経路の各々を通
して後方に逆の順序で命令を検査する上記段階は、実行
転送命令を含むブロックを通ると共に、実行転送命令を
含む上記ブロックの先行ブロックで始まる先行ブロック
のラインを通して後方に逆の順序で命令を検査すること
を含む請求項19に記載の方法。 - 【請求項22】上記ブロックの各々はエポック番号アト
リビュートを有し、そして上記行き先アドレスの少なく
とも1つの値に対する上記サーチにはエポック番号が指
定され、各々のブロックは上記行き先アドレスの値に対
して1回より多くサーチされることがなく、これは、ブ
ロックのサーチ時に上記各ブロックのエポック番号アト
リビュートをエポック番号に等しくセットし、そしてそ
のエポック番号をブロックのエポック番号アトリビュー
トと比較することにより上記各ブロックを2回目にサー
チしようとする試みを検出することにより行う請求項21
に記載の方法。 - 【請求項23】上記コンピュータプログラムは、上記実
行転送命令に対して見つかった行き先アドレスで始まる
命令シーケンスを含み、上記実行転送命令に対して見つ
かった行き先アドレスで始まるこの命令シーケンスは、
上記実行シーケンス内の上記実行転送命令に先行する上
記プログラム内の命令までループバックする実行転送経
路を定め、そして更に、上記方法は、上記実行転送命令
の上記行き先アドレスで始まる上記命令シーケンスをデ
コードして、上記実行シーケンス内の上記実行転送命令
に先行する上記プログラム内の上記命令へ至る上記実行
転送経路を見つけ、そしてその際に、上記実行シーケン
スにおいて上記ループバックする実行転送経路に先行す
るデコードされた命令を、上記実行シーケンスとは逆の
順序で検査することにより、上記実行転送命令の上記行
き先アドレスの値を再びサーチするという段階を備えて
いる請求項19に記載の方法。 - 【請求項24】オリジナルコンピュータプログラムの命
令をサーチし、その見い出した命令を変換して、変換さ
れたプログラムを発生するようにデジタルコンピュータ
を動作する方法であって、上記命令の各々は上記コンピ
ュータプログラムに各々のプログラムアドレスを有して
おり、上記コンピュータプログラムは、指定のアドレス
へ実行を転送する命令であって上記命令のプログラムア
ドレスと共に上記命令の実行シーケンスを定めるような
命令を含み、上記実行シーケンスは上記プログラムの入
力ポイントアドレスで始まり、上記命令は、指定のメモ
リアドレスにおいてメモリの内容を変更するオペレーシ
ョンを指定する命令と、指定の汎用レジスタの内容を変
更するオペレーションを指定する命令とを含み、上記プ
ログラムは、上記汎用レジスタのうちの指定の汎用レジ
スタの内容から決定された上記プログラム内の行き先ア
ドレスへプログラム実行の転送を指定する少なくとも1
つの実行転送命令を含んでおり、上記方法は、 a)上記入力ポイントアドレスから始めて命令をデコー
ドし、上記命令をデコードするときには、上記実行転送
命令が上記汎用レジスタのうちの指定のレジスタの内容
によって決定された行き先アドレスを有することを確認
し、そしてその際に、上記行き先アドレスの少なくとも
1つの値をサーチし、このサーチは、 1)上記汎用レジスタのうちの指定の汎用レジスタがプ
ログラムの実行中にもつであろう内容に関して上記行き
先アドレスの表示を形成し、 2)上記実行転送命令に先行する上記実行シーケンス内
の命令を上記実行シーケンスとは逆の順序で検査し、そ
して i)その検査された命令が、上記表示に示された汎用レ
ジスタの内容の変更を指定するが、上記表示が上記検査
された命令のアドレスに対して一定の値を表すような変
更を指定しないときには、その指定された変更を考慮す
るように上記表示を変更して、プログラムの実行が上記
検査された命令のプログラムアドレスに到達したとき
に、少なくとも1つの指定の汎用レジスタがプログラム
の実行中にもつであろう内容に関して上記表示が上記行
き先アドレスを表すようにし、そして ii)上記検査された命令が上記表示に示された汎用レジ
スタの内容の変更を指定し、上記検査された命令のアド
レスに対して一定の値を上記表示が表すときには、上記
表示から上記行き先アドレスとしての上記値を決定し、 b)実行転送命令に対して見つかった行き先アドレスで
始めて命令をデコードし、そして c)上記デコードされた命令を変換して、上記の変換さ
れたプログラムを発生する、 という段階を備えたことを特徴とする方法。 - 【請求項25】上記表示は、メモリアクセスアーギュメ
ント表示により指定されたメモリアドレスにおけるメモ
リの内容に関して上記行き先アドレスを表すメモリアク
セスファンクションを含み、上記方法は、更に、検査さ
れた命令が指定のメモリアドレスにおけるメモリの内容
を変更するときにはメモリアクセスアーギュメント表示
をその検査された命令内のメモリアドレス指定子に合致
させるよう試み、そして合致が生じたときには、上記表
示内のメモリアクセスファンクションを、指定のメモリ
アドレスにおけるメモリの変更された内容の表示と置き
換えるという段階を含んでいる請求項24に記載の方法。 - 【請求項26】上記表示のメモリアクセスアーギュメン
トをその検査された命令内のメモリアドレス指定子に合
致させるよう試みる上記段階は、上記検査された命令に
先行する命令をサーチして、上記メモリアクセスアーギ
ュメント表示に合致する表示形態に上記メモリアドレス
指定子をセットする命令を見つけることを含む請求項25
に記載の方法。 - 【請求項27】上記表示を、サブルーチン呼び出しオペ
レーション中にサブルーチンへ通されるサブルーチンア
ーギュメントに対する所定の表示フォーマットに合致さ
せるよう試み、そして合致が生じたときに、上記実行転
送命令から上記サブルーチンパラメータへコールバック
が生じることを記録する段階を更に含む請求項24に記載
の方法。 - 【請求項28】検査される命令のアドレスがサブルーチ
ン呼び出し命令の行き先アドレスであるときには、上記
表示を、サブルーチン呼び出し命令のサブルーチンアー
ギュメントに対する所定の表示フォーマットに合致させ
るよう試み、そして合致が見つかったときには、上記サ
ブルーチン呼び出し命令に先行する上記実行シーケンス
内の命令を上記実行シーケンスとは逆の順序で検査する
ことにより上記サーチを続けるという段階を更に含む請
求項24に記載の方法。 - 【請求項29】上記実行シーケンスは、上記実行転送命
令の前に上記シーケンスに複数の実行経路を含んでお
り、そして上記検査段階は、上記実行経路の各々を通し
て後方に逆の順序で命令を検査して、上記行き先アドレ
スとしての複数の値を決定することを含み、これら値
は、上記実行シーケンスとは逆の順序で上記経路の各々
を通して命令を検査することにより得た上記行き先アド
レスに対する値を含んでいる請求項24に記載の方法。 - 【請求項30】上記実行経路の少なくとも1つはそれ自
身へループして戻り、上記実行経路の各々を通して後方
に逆の順序で命令を検査する上記段階は、上記実行経路
の各々がそれ自身へループして戻るかどうかをチェック
し、そしてそれ自身へ戻るときには上記実行経路の各々
における命令の検査を終了させる段階を含む請求項29に
記載の方法。 - 【請求項31】上記命令の連続するものをブロックにグ
ループ分けし、各ブロックの命令がプログラムアドレス
シーケンスで実行されると共に、上記実行転送経路が上
記ブロックの1つにおける最後の命令から上記ブロック
の1つにおける最初の命令へと生じるようにし、更に、
各ブロックごとに、上記各ブロックへの実行転送経路が
始まるところの先行ブロックのリストと、上記各ブロッ
クからの実行転送経路が延びていくところの後続ブロッ
クのリストとを形成し、そして上記実行経路の各々を通
して後方に逆の順序で命令を検査する上記段階は、実行
転送命令を含むブロックを通ると共に、実行転送命令を
含む上記ブロックの先行ブロックで始まる先行ブロック
のラインを通して後方に逆の順序で命令を検査すること
を含む請求項19に記載の方法。 - 【請求項32】上記コンピュータプログラムは、上記実
行転送命令に対して見つかった行き先アドレスで始まる
命令シーケンスを含み、この命令シーケンスは、上記実
行シーケンス内の上記実行転送命令に先行する上記プロ
グラム内の命令までループバックする実行転送経路を定
め、そして更に、上記実行転送命令の上記行き先アドレ
スで始まる命令の上記デコード動作では、上記実行シー
ケンス内の上記実行転送命令に先行する上記プログラム
内の上記命令へ至る上記実行転送経路を見つけ、そして
その際に、上記実行シーケンスにおいて上記ループバッ
クする実行転送経路に先行するデコードされた命令を、
上記実行シーケンスとは逆の順序で検査することによ
り、上記実行転送命令の上記行き先アドレスの別の値を
サーチし始める請求項19に記載の方法。 - 【請求項33】オリジナルコンピュータプログラムの命
令をサーチし、その見い出した命令を変換して、変換さ
れたプログラムを発生するためのデジタルコンピュータ
システムであって、上記命令の各々は上記コンピュータ
プログラムに各々のプログラムアドレスを有しており、
上記コンピュータプログラムは、指定のアドレスへ実行
を転送する命令であって上記命令のプログラムアドレス
と共に上記命令の実行シーケンスを定めるような命令を
含み、上記実行シーケンスは上記プログラムの入力ポイ
ントアドレスで始まり、上記命令は、指定のメモリアド
レスにおいてメモリの内容を変更するオペレーションを
指定する命令と、指定の汎用レジスタの内容を変更する
オペレーションを指定する命令とを含み、更に、上記プ
ログラムは、上記汎用レジスタのうちの指定の汎用レジ
スタの内容から決定された上記プログラム内の行き先ア
ドレスへプログラム実行の転送を指定する少なくとも1
つの実行転送命令を含んでおり、上記デジタルコンピュ
ータシステムは、 a)上記入力ポイントアドレスから始めて命令をデコー
ドし、その命令デコード時に、上記実行転送命令が上記
汎用レジスタのうちの指定のレジスタの内容により決定
された行き先アドレスを有することを確認しそしてその
際に上記行き先アドレスの少なくとも1つの値をサーチ
する手段を具備し、このサーチでは、 1)上記汎用レジスタのうちの指定の汎用レジスタがプ
ログラムの実行中にもつであろう内容に関して上記行き
先アドレスの表示を形成し、 2)上記実行転送命令に先行する上記実行シーケンス内
の命令を上記実行シーケンスとは逆の順序で検査し、そ
して i)その検査された命令が、上記表示に示された汎用レ
ジスタの内容の変更を指定するが、上記表示が上記検査
された命令のアドレスに対して一定の値を表すような変
更を指定しないときには、その指定された変更を考慮す
るように上記表示を変更して、プログラムの実行が上記
検査された命令のプログラムアドレスに到達したとき
に、上記表示に示された少なくとも1つの指定の汎用レ
ジスタがプログラムの実行中にもつであろう内容に関し
て上記表示が上記行き先アドレスを表すようにし、そし
て ii)上記検査された命令が上記表示に示された汎用レジ
スタの内容の変更を指定し、上記検査された命令のアド
レスに対して一定の値を上記表示が表すときには、上記
表示から上記行き先アドレスとしての上記値を決定し、 b)更に、実行転送命令に対して見つかった行き先アド
レスで始めて命令をデコードする手段と、 c)上記デコードされた命令を変換して、上記の変換さ
れたプログラムを発生する手段とを具備することを特徴
とするデジタルコンピュータシステム。 - 【請求項34】上記実行転送命令に対して見つけた上記
行き先アドレスで始めて上記命令をデコードする上記手
段は、上記実行シーケンス内の上記実行転送命令に先行
する上記プログラム内の上記命令へ至る実行転送経路を
見つけ、その際に、上記シーケンスにおいて上記実行転
送命令に先行する上記プログラム内の命令に対して、上
記実行シーケンスにおいて上記実行転送経路に先行する
デコードされた命令を上記実行シーケンスとは逆の順序
で検査することにより、上記実行転送命令の上記行き先
アドレスの追加の値をサーチし始めるための手段を備え
ている請求項33に記載のデジタルコンピュータシステ
ム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US666070 | 1991-03-07 | ||
US07/666,070 US5428786A (en) | 1991-03-07 | 1991-03-07 | Branch resolution via backward symbolic execution |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH05508503A JPH05508503A (ja) | 1993-11-25 |
JPH0727464B2 true JPH0727464B2 (ja) | 1995-03-29 |
Family
ID=24672699
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP4508277A Expired - Fee Related JPH0727464B2 (ja) | 1991-03-07 | 1992-03-03 | 後方記号実行による分岐分析 |
Country Status (8)
Country | Link |
---|---|
US (1) | US5428786A (ja) |
EP (1) | EP0529059B1 (ja) |
JP (1) | JPH0727464B2 (ja) |
AU (1) | AU656577B2 (ja) |
CA (1) | CA2082070C (ja) |
DE (1) | DE69224338T2 (ja) |
IE (1) | IE920740A1 (ja) |
WO (1) | WO1992015938A1 (ja) |
Families Citing this family (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0721033A (ja) * | 1993-07-07 | 1995-01-24 | Nec Corp | 言語処理装置及びその方法 |
US5615369A (en) * | 1994-07-25 | 1997-03-25 | Hewlett-Packard Company | Automated detection and correction of uninitialized variables |
DE69524170T2 (de) * | 1994-09-22 | 2002-05-29 | Sun Microsystems, Inc. | Eingebettete Programmablaufinformation zwecks Zielcodemanipulation |
US5745897A (en) * | 1994-11-21 | 1998-04-28 | Bay Networks Group, Inc. | Method and system for compiling management information base specifications |
JP3569014B2 (ja) * | 1994-11-25 | 2004-09-22 | 富士通株式会社 | マルチコンテキストをサポートするプロセッサおよび処理方法 |
US5966514A (en) * | 1995-05-31 | 1999-10-12 | Matsushita Electric Industrial Co., Ltd. | Microprocessor for supporting reduction of program codes in size |
US5854932A (en) * | 1995-08-17 | 1998-12-29 | Microsoft Corporation | Compiler and method for avoiding unnecessary recompilation |
US5956478A (en) * | 1995-09-11 | 1999-09-21 | Digital Equipment Corporation | Method for generating random test cases without causing infinite loops |
US5930509A (en) * | 1996-01-29 | 1999-07-27 | Digital Equipment Corporation | Method and apparatus for performing binary translation |
US6091897A (en) * | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US5802373A (en) * | 1996-01-29 | 1998-09-01 | Digital Equipment Corporation | Method for providing a pipeline interpreter for a variable length instruction set |
US5842017A (en) * | 1996-01-29 | 1998-11-24 | Digital Equipment Corporation | Method and apparatus for forming a translation unit |
US6000028A (en) * | 1996-01-29 | 1999-12-07 | Digital Equipment Corporation | Means and apparatus for maintaining condition codes in an unevaluated state |
US6535903B2 (en) | 1996-01-29 | 2003-03-18 | Compaq Information Technologies Group, L.P. | Method and apparatus for maintaining translated routine stack in a binary translation environment |
US5926832A (en) * | 1996-09-26 | 1999-07-20 | Transmeta Corporation | Method and apparatus for aliasing memory data in an advanced microprocessor |
US6438740B1 (en) * | 1997-08-21 | 2002-08-20 | Compaq Information Technologies Group, L.P. | System and method for dynamically identifying free registers |
US6233733B1 (en) * | 1997-09-30 | 2001-05-15 | Sun Microsystems, Inc. | Method for generating a Java bytecode data flow graph |
US5956758A (en) * | 1997-10-31 | 1999-09-21 | Digital Equipment Corporation | Method for determining target address of computed jump instructions in executable programs |
US5966541A (en) * | 1997-12-04 | 1999-10-12 | Incert Software Corporation | Test protection, and repair through binary-code augmentation |
US6150724A (en) * | 1998-03-02 | 2000-11-21 | Motorola, Inc. | Multi-chip semiconductor device and method for making the device by using multiple flip chip interfaces |
US6295640B1 (en) * | 1998-05-08 | 2001-09-25 | Apple Computer, Inc. | Method and apparatus for distinguishing reference values from non-reference values in a runtime environment |
KR20010072477A (ko) * | 1998-08-13 | 2001-07-31 | 썬 마이크로시스템즈, 인코포레이티드 | 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치 |
US6308321B1 (en) | 1998-12-11 | 2001-10-23 | Incert Software Corporation | Method for determining program control flow |
JP3470948B2 (ja) * | 1999-01-28 | 2003-11-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ |
US6662354B1 (en) * | 1999-01-29 | 2003-12-09 | Unisys Corporation | Determining destinations of a dynamic branch |
US6353924B1 (en) | 1999-02-08 | 2002-03-05 | Incert Software Corporation | Method for back tracing program execution |
GB2348305A (en) * | 1999-03-24 | 2000-09-27 | Int Computers Ltd | Instruction execution mechanism |
US6990658B1 (en) | 1999-10-13 | 2006-01-24 | Transmeta Corporation | Method for translating instructions in a speculative microprocessor featuring committing state |
US6745383B1 (en) * | 1999-12-29 | 2004-06-01 | Veritas Operating Corporation | Early warning mechanism for enhancing enterprise availability |
US6804814B1 (en) | 1999-12-29 | 2004-10-12 | Veritas Operating Corporation | Method for simulating back program execution from a traceback sequence |
US6748584B1 (en) * | 1999-12-29 | 2004-06-08 | Veritas Operating Corporation | Method for determining the degree to which changed code has been exercised |
US6922830B1 (en) * | 2000-03-10 | 2005-07-26 | International Business Machines Corporation | Skip list data storage during compilation |
JP2001273138A (ja) * | 2000-03-24 | 2001-10-05 | Fujitsu Ltd | プログラム変換装置および方法 |
SE0002440D0 (sv) | 2000-06-28 | 2000-06-28 | Virtutech Ab | Interpreter |
US7251811B2 (en) * | 2002-01-02 | 2007-07-31 | Intel Corporation | Controlling compatibility levels of binary translations between instruction set architectures |
US7370296B2 (en) * | 2004-05-25 | 2008-05-06 | International Business Machines Corporation | Modeling language and method for address translation design mechanisms in test generation |
US7594223B2 (en) * | 2005-06-27 | 2009-09-22 | Hewlett-Packard Development Company, L.P. | Straight-line post-increment optimization for memory access instructions |
US8037285B1 (en) | 2005-09-28 | 2011-10-11 | Oracle America, Inc. | Trace unit |
US8032710B1 (en) | 2005-09-28 | 2011-10-04 | Oracle America, Inc. | System and method for ensuring coherency in trace execution |
US7949854B1 (en) | 2005-09-28 | 2011-05-24 | Oracle America, Inc. | Trace unit with a trace builder |
US7953961B1 (en) | 2005-09-28 | 2011-05-31 | Oracle America, Inc. | Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder |
US8024522B1 (en) | 2005-09-28 | 2011-09-20 | Oracle America, Inc. | Memory ordering queue/versioning cache circuit |
US7676634B1 (en) | 2005-09-28 | 2010-03-09 | Sun Microsystems, Inc. | Selective trace cache invalidation for self-modifying code via memory aging |
US8051247B1 (en) | 2005-09-28 | 2011-11-01 | Oracle America, Inc. | Trace based deallocation of entries in a versioning cache circuit |
US8499293B1 (en) | 2005-09-28 | 2013-07-30 | Oracle America, Inc. | Symbolic renaming optimization of a trace |
US8015359B1 (en) | 2005-09-28 | 2011-09-06 | Oracle America, Inc. | Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit |
US7987342B1 (en) | 2005-09-28 | 2011-07-26 | Oracle America, Inc. | Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer |
US8370576B1 (en) | 2005-09-28 | 2013-02-05 | Oracle America, Inc. | Cache rollback acceleration via a bank based versioning cache ciruit |
US7966479B1 (en) | 2005-09-28 | 2011-06-21 | Oracle America, Inc. | Concurrent vs. low power branch prediction |
US7877630B1 (en) | 2005-09-28 | 2011-01-25 | Oracle America, Inc. | Trace based rollback of a speculatively updated cache |
US7937564B1 (en) * | 2005-09-28 | 2011-05-03 | Oracle America, Inc. | Emit vector optimization of a trace |
US8019944B1 (en) | 2005-09-28 | 2011-09-13 | Oracle America, Inc. | Checking for a memory ordering violation after a speculative cache write |
US7870369B1 (en) | 2005-09-28 | 2011-01-11 | Oracle America, Inc. | Abort prioritization in a trace-based processor |
US8010745B1 (en) | 2006-09-27 | 2011-08-30 | Oracle America, Inc. | Rolling back a speculative update of a non-modifiable cache line |
US8370609B1 (en) | 2006-09-27 | 2013-02-05 | Oracle America, Inc. | Data cache rollbacks for failed speculative traces with memory operations |
US8136091B2 (en) * | 2007-01-31 | 2012-03-13 | Microsoft Corporation | Architectural support for software-based protection |
US9235390B1 (en) * | 2008-03-31 | 2016-01-12 | Symantec Corporation | Application optimization for use based on feature popularity |
US8090692B2 (en) * | 2008-09-10 | 2012-01-03 | Infinite Memory Ltd | Method for using an OTP storage device |
WO2011079942A1 (en) * | 2009-12-28 | 2011-07-07 | Hyperion Core, Inc. | Optimisation of loops and data flow sections |
JP5987501B2 (ja) * | 2012-06-29 | 2016-09-07 | 富士通株式会社 | 分岐アドレス管理プログラム、方法、及び装置 |
GB2521367A (en) * | 2013-12-17 | 2015-06-24 | Ibm | Adaptable and extensible runtime and system for heterogeneous computer systems |
US10467390B1 (en) * | 2016-08-18 | 2019-11-05 | Snap Inc. | Cyclically dependent checks for software tamper-proofing |
US10360134B2 (en) * | 2017-10-31 | 2019-07-23 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | System, method and computer program product for detecting infeasible events in dynamic programs |
Family Cites Families (4)
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 |
EP0428560A4 (en) * | 1988-07-29 | 1992-04-01 | 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 |
-
1991
- 1991-03-07 US US07/666,070 patent/US5428786A/en not_active Expired - Lifetime
-
1992
- 1992-03-03 WO PCT/US1992/001776 patent/WO1992015938A1/en active IP Right Grant
- 1992-03-03 EP EP92908486A patent/EP0529059B1/en not_active Expired - Lifetime
- 1992-03-03 JP JP4508277A patent/JPH0727464B2/ja not_active Expired - Fee Related
- 1992-03-03 CA CA002082070A patent/CA2082070C/en not_active Expired - Fee Related
- 1992-03-03 AU AU15817/92A patent/AU656577B2/en not_active Ceased
- 1992-03-03 DE DE69224338T patent/DE69224338T2/de not_active Expired - Fee Related
- 1992-03-06 IE IE074092A patent/IE920740A1/en not_active Application Discontinuation
Non-Patent Citations (1)
Title |
---|
ヨーロッパ特許公開372835 |
Also Published As
Publication number | Publication date |
---|---|
AU656577B2 (en) | 1995-02-09 |
AU1581792A (en) | 1992-10-06 |
CA2082070A1 (en) | 1992-09-08 |
EP0529059B1 (en) | 1998-02-04 |
US5428786A (en) | 1995-06-27 |
CA2082070C (en) | 1998-02-17 |
JPH05508503A (ja) | 1993-11-25 |
EP0529059A1 (en) | 1993-03-03 |
DE69224338T2 (de) | 1998-10-01 |
DE69224338D1 (de) | 1998-03-12 |
IE920740A1 (en) | 1992-09-09 |
WO1992015938A1 (en) | 1992-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH0727464B2 (ja) | 後方記号実行による分岐分析 | |
US5317740A (en) | Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies | |
US5649203A (en) | Translating, executing, and re-translating a computer program for finding and translating program code at unknown program addresses | |
US5287490A (en) | Identifying plausible variable length machine code of selecting address in numerical sequence, decoding code strings, and following execution transfer paths | |
US5339238A (en) | Register usage tracking in translating code for different machine architectures by forward and reverse tracing through the program flow graph | |
US5307492A (en) | Mapping assembly language argument list references in translating code for different machine architectures | |
US5598560A (en) | Tracking condition codes in translation code for different machine architectures | |
US5301325A (en) | Use of stack depth to identify architechture and calling standard dependencies in machine code | |
US5450575A (en) | Use of stack depth to identify machine code mistakes | |
EP0735464B1 (en) | Method and apparatus for computer code processing in a code translator |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090329 Year of fee payment: 14 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100329 Year of fee payment: 15 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100329 Year of fee payment: 15 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110329 Year of fee payment: 16 |
|
LAPS | Cancellation because of no payment of annual fees |