JP2000132408A - コンピュ―タア―キテクチャエミュレ―ションシステム - Google Patents

コンピュ―タア―キテクチャエミュレ―ションシステム

Info

Publication number
JP2000132408A
JP2000132408A JP11299576A JP29957699A JP2000132408A JP 2000132408 A JP2000132408 A JP 2000132408A JP 11299576 A JP11299576 A JP 11299576A JP 29957699 A JP29957699 A JP 29957699A JP 2000132408 A JP2000132408 A JP 2000132408A
Authority
JP
Japan
Prior art keywords
branch
instruction
compiler
interpreter
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP11299576A
Other languages
English (en)
Other versions
JP3553834B2 (ja
Inventor
Richard A Lethin
エー.レティン リチャード
Joseph A Bank
エー.バンク ジョセフ
Charles D Garrett
ディー.ガレット チャールズ
Mikayo Wada
美加代 和田
Mitsuo Sakurai
三男 櫻井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2000132408A publication Critical patent/JP2000132408A/ja
Application granted granted Critical
Publication of JP3553834B2 publication Critical patent/JP3553834B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

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

Abstract

(57)【要約】 【課題】 変換元オペレーティングシステム上で最適化
を実行しつつターゲットオブジェクトコードの動的コン
パイル及び変換を実行する。 【解決手段】 ターゲットコードのコンパイル及び最適
化は、実時間で動的に実施される。コンパイラは、32
ビットと言った大きいオーダーの命令を処理するホスト
プロセッサが、16ビット、18ビットと言った、より
小さいオーダーの命令を処理するターゲットプロセッサ
をエミュレートできるように、テンプレートベースの変
換及び解釈に関するエミュレーションを改善する分析及
び最適化を行う。プログラム実行の間、変換プログラム
はブランチ動作を記録する。ブランチ動作が実行された
回数が閾値を越えたとき、ブランチの変換先はコンパイ
ルのためのシードとなり、シードとシードの間のコード
部分はセグメントとして定義される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、第2のオペレーテ
ィングシステムをエミュレートするため、ホスト処理シ
ステム上で動作するオブジェクトコード変換プログラム
の技術に関し、更に詳しくは、ホストプロセッサオブジ
ェクトコード命令セットを有するホストプロセッサの実
行時に、オリジナルオブジェクトコード命令セットの分
析及び計算を実時間で行う動的オブジェクトコード変換
プログラムの技術に関する。
【0002】
【従来の技術】オブジェクトコード変換プログラムの分
野では、1つのコンピュータ用に開発されたオブジェク
トコードを、異なるコンピュータアーキテクチャを有す
る別のコンピュータ用に変換することが必要になる。そ
うしたオブジェクトコード変換方法には、“静的オブジ
ェクトコード変換方法”と称する従来の方法があり、こ
の方法では、命令文はその実行以前に、先ず第2のコン
ピュータアーキテクチャのオブジェクトコードに変換さ
れる。また、第2の従来方法としては、“動的オブジェ
クトコード変換方法”と称する方法があり、この方法で
は、命令を実行する間に、第1のオブジェクトコードを
第2のオブジェクトコードに変換する。
【0003】静的オブジェクトコード変換方法の技術で
は、実行時間は変換に要する時間による影響を受けな
い。しかし、静的オブジェクトコード変換の実行に当た
っては、変換されたオブジェクトコードの物理サイズは
大きくなる。言い換えれば、静的オブジェクトコード変
換方法では、変換されたオブジェクトコードの操作ステ
ップ数の増加は避けられない。その結果、変換されたオ
ブジェクトコードのパフォーマンスは悪くなり、非能率
となる問題がある。
【0004】他方、動的オブジェクトコード変換方法で
は、静的オブジェクトコード変換方法に較べて、変換さ
れたオブジェクトコードの物理サイズは相対的に小さく
なる。しかし、この従来型の動的オブジェクトコード変
換方法は、まれにしか使用しないオブジェクトコードも
含めて、全てのオブジェクトコードが変換されてしまう
と言う問題を抱えている。言い換えれば、従来型動的オ
ブジェクトコード変換方法は、何回も実行されるオブジ
ェクトコードの効率的な認識ができず、効率を犠牲にし
て、オリジナルオブジェクトコードの変換に必要な時間
を増加せしめている。
【0005】
【発明が解決しようとする課題】したがって、本発明の
目的は、従来技術の諸問題に取り組むと共に、変換され
たオブジェクトコードの動的最適化を行うオブジェクト
コード変換プログラムを提供することにある。
【0006】また、本発明の他の目的は、コンパイラが
コンパイルを完了するまで、主要プログラムをプロファ
イルすることである。コンパイラはこのプロファイルを
用いて、主要プラグラムをコンパイルし、かつ最適化す
る。
【0007】また、本発明の更に他の目的は、動的最適
化及びコンパイル時に、変換されてないコードから変換
されたコードへのジャンプ動作を可能にすることであ
る。
【0008】また、本発明の更に他の目的は、コンパイ
ラに送られた変換要求数と変換完了数との差を計算する
ソフトウェアフィードバックを備えた動的最適化オブジ
ェクトコード変換プログラムを提供することである。
【0009】また、本発明の更に他の目的は、1つのマ
シン語表現によるコンピュータプログラムをその実行時
に、他のマシン語表現によるコンピュータプログラムに
動的に変換することである。
【0010】更にまた、本発明の目的は、変換元オブジ
ェクトコードのブランチ(分岐)に対応する複数のシー
ドから変換用のセグメントを決定する動的オブジェクト
コード変換プログラムを提供することである。
【0011】
【課題を解決するための手段】本発明の目的は、変換先
コンピュータアーキテクチャシステムに関して、変換元
コンピュータアーキテクチャをエミュレートするコンピ
ュータアーキテクチャエミュレーションシステムによっ
て達成される。このシステムは、変換元オブジェクトコ
ードを対応する変換されたオブジェクトコードにそれぞ
れ変換し、変換元オブジェクトコードのブランチ命令の
実行数を決定するインタプリタと、対応するブランチ命
令の実行数が閾値を越えたとき、変換元オブジェクトコ
ードの命令をセグメントにグループ化し、このセグメン
トを動的にコンパイルするコンパイラとを含んでいる。
【0012】更に、本発明の目的は、変換先コンピュー
タアーキテクチャシステムに関して、変換元コンピュー
タアーキテクチャをエミュレートするコンピュータアー
キテクチャエミュレーションシステムによって達成され
る。このシステムは、変換元オブジェクトコードを、対
応する変換されたオブジェクトコードに、それぞれ変換
すると共に、それぞれが変換されたオブジェクトコード
命令の実行の間に、実時間で変換元オブジェクトコード
のブランチ情報をプロファイルする複数のインタプリタ
と、これら複数のインタプリタの何れかからの変換元オ
ブジェクトコード命令を、変換元オブジェクトコードに
於ける対応するブランチ命令に基づいてセグメントにグ
ループ化すると共に、対応するブランチ命令の実行数が
閾値より大きいとき、変換元オブジェクトコードのセグ
メントを動的にコンパイルするコンパイラと、を含んで
いる。
【0013】また更に、本発明の目的は、変換先コンピ
ュータアーキテクチャシステムに関して、変換元コンピ
ュータアーキテクチャをエミュレートするコンピュータ
アーキテクチャエミュレーションシステムによって達成
される。このシステムは、変換元オブジェクトコードを
対応する変換されたオブジェクトコードにそれぞれ変換
すると共に、変換元オブジェクトコードのブランチ命令
を、各ブランチ命令に関する実行数を記憶し、その実行
数を閾値と比較することによってプロファイルし、閾値
を越えたブランチ命令をシードとするインタプリタと、
このシードに基づいて、変換元オブジェクトコードの命
令をセグメントにグループ化し、上記インタプリタによ
る変換及びプロファイリングの間に、変換元オブジェク
トコードのセグメントを動的にコンパイルするコンパイ
ラと、を含んでいる。
【0014】また更に、本発明の目的は、多重タスキン
グ変換先コンピュータアーキテクチャに関して、変換元
コンピュータアーキテクチャをエミュレートする多重タ
スキングコンピュータアーキテクチャエミュレーション
システムによって達成される。このシステムは、変換元
オブジェクトコードを対応する変換されたオブジェクト
コードにそれぞれ変換し、変換元オブジェクトコードの
ブランチ命令の実行数を決定するインタプリタタスク
と、対応するブランチ命令の実行数が閾値を越えたと
き、変換元オブジェクトコードの命令をセグメントにグ
ループ化し、このセグメントを動的にコンパイルする多
重タスキング転送先コンピュータアーキテクチャの上記
インタプリタと共に動作するコンパイラタスクと、を含
んでいる。
【0015】本発明のこれら及びその他の目的、並びに
その利点は、添付図面を参照して以下に述べる本発明の
好適実施形態の説明から容易に理解されよう。
【0016】
【発明の実施の形態】好適実施形態の詳細な説明 添付図面にその例を示す本発明の好適実施形態について
詳細に説明する。尚、添付図面中、同一参照番号は同一
要素を示すものとする。
【0017】本発明の第1実施形態I. システムの概観 本発明は全体として最適化オブジェクトコード変換プロ
グラム(optimizing object code translator) (以下、
“OOCT" と言う)に関し、プログラムはコンピュータア
ーキテクチャエミュレーションシステムの一部として、
マイクロプロセッサ命令セットの動的コンパイルを実行
する。実行時以前には、アプリケーション命令セットへ
の単純なアクセスもないから、コンパイルは動的であ
る。オブジェクトコード変換システムの一部としてコン
パイラを使用することによって、このシステムはテンプ
レートベースの変換及びテンプレートベースの解釈(int
erpretation)に関するエミュレーション性能を改善する
分析及び最適化を行うことができる。
【0018】エミュレーション用のホストプロセッサ
は、例えばインテル社のPentium Pro等、市場で入手可
能なものが好ましい。Pentium Pro の命令セットアーキ
テクチャは、サイズの異なるデータを容易に操作できる
ので、16ビット及び18ビットのオブジェクトコード
命令両者のエミュレーションが楽に行える。16ビット
及び18ビットオブジェクトコード命令は、第2のプロ
セッサ、例えば富士通社のK−シリーズプロセッサ側の
オリジナルアプリケーションに対して設計することもで
きる。
【0019】意味のあるコンパイラ型最適化の実施は、
命令のフローグラフに関する情報が有る時に、はじめて
可能になる。伝統的なコンパイラでは、最適化を開始す
る以前に、全ルーチンが完全に解析されるから、フロー
グラフが与えられ、そして十分に定義される。OOCTの場
合はこれとは違って、プログラムを走らせる前には、メ
モリイメージに於ける命令の記憶場所は未知である。こ
のことは、命令はその長さを種々変化すると共に、非命
令データセットを任意に介在させているからである。全
ての結合点が命令中にあるため、命令の記憶場所は未知
となる。
【0020】それ故、フローグラフを決めるには、プロ
グラムを走らさなければならない。初めに、インタプリ
タがプログラムを走らせる。インタプリタはプログラム
の実行に当たって、1つのブランチオペレーションを実
行する毎に、それに関する情報をOOCTに報告する。この
情報ロギング(記録)から、幾つかの命令及び幾つかの
結合点が識別される。プログラムの進行につれて、フロ
ーグラフに関する情報は全体として決して完全とは言え
ないまでも、より完全になって行く。OOCTシステムは、
フローグラフについての部分情報によっても動作するよ
うに設計されている。即ち、システムは最適化を潜在性
のある不完全なフローグラフで実行し、より多くの情報
が利用可能になったとき、最適化コードをそれと交換で
きるように構成されている。
【0021】動的コンパイルは、インタプリタによって
収集されたプロファイリング情報に基づいて、テキスト
のどの部分を最適化すべきかを選択する。或るブランチ
の実行回数が閾値を越えた時、そのブランチの変換先が
コンパイル用のシード(seed)となる。このシードは、1
つのユニットとしてコンパイルされるK命令の一部分を
解析するための始点である。このユニットをセグメント
と呼ぶ。
【0022】セグメントは、シードからオリジナルプロ
セッサ命令を最適化した結果生じるホストプロセッサ命
令を含んでいる。セグメントは1つのユニットとして導
入されたり、導入されなかったりする。インタプリタが
OOCTをコールして、ブランチについて報告すると、OOCT
はその報告に変換先コードが在れば、制御をセグメント
に移行すること選択する。同様に、セグメントは制御を
インタプリタへ返却移行するためのコードを含んでい
る。
【0023】セグメント自身は、オリジナルプログラム
からの可能なフロー経路のサブセットを表すだけの不完
全なものであっても良い。しかし、この不完全な代表性
は、エミュレーションの正確な動作を妨げるものではな
い。オリジナルコードを介して新たな予想外のフロー経
路が生じた場合には、制御フローはインタプリタに戻
り、その後、同セグメントは新たな制御フローのために
置き換えられる。
【0024】II. OOCTコードの構造 本発明の実施形態によれば、OOCTは従来のオペレーティ
ングシステム環境、例えばウインドウズ環境下で動作す
る。しかし、本発明の第2実施形態によれば、第2のオ
ペレーティングシステム、例えば富士通社のKOI オペレ
ーティングシステムのエミュレーションファームウエア
とリンクして構成することもできる。
【0025】III. アーキテクチャ 図1は、OOCTシステム100の高レベルアーキテクチャ
を示す。また、図1は、2つのタスク、即ちインタプリ
タ110及びコンパイラ104を示す。多重タスクオペ
レーティングシステムの下では、インタプリタ110及
びコンパイラ104は同時に動作する。2つのタスクは
共にブランチロガー112によってブランチログにアク
セスすることができ、またコンパイルされたコードセグ
メント108にもアクセスすることができる。更に、イ
ンタプリタ110はコンパイラに対してコンパイル要求
を送ることができる。2つのタスク間に於ける通信に関
しては、以下の通信に関する項でより完全な説明を行
う。
【0026】コンパイル制御フロー 図2は、オリジナルコードの1つのセクションをコンパ
イルするための制御フローと共に、OOCT100の主要構
成要素を示す。主なOOCT処理段階は以下の通りである。
先ず、インタプリタ110はブランチロガー112と交
信して、ブランチ情報をプロファイルする。次いで、ブ
ランチロガー112はシード選択法を用いて、どのシー
ドをコンパイラ104に送るかを決定する。次に、ブロ
ックピッカ114はシードとブランチプロファイル情報
を用いて、コンパイルするオリジナルコードの1つのセ
クションを選択する。次いで、ブロックピッカ114
は、コンパイルするオリジナル命令を描く制御フローグ
ラフ(CFG) を生成し、このCFG をブロックレイアウトユ
ニット116に渡す。
【0027】次いで、ブロックレイアウトユニット11
6は、制御フローグラフを命令の線形リストに単層化す
る。最適化コード発生ユニット118は、オリジナル命
令を実際にコンパイルし、変換コードセグメント命令を
生成する。この生成された変換コードは最終的には、変
換されるセグメントに関する情報と共に、セグメント導
入ユニット120に渡される。このユニット120は、
このコードをインタプリタ110が利用できるようにす
る。
【0028】OOCT実行時の制御フロー 図3は、OOCTの通常実行時に於ける制御フローを示す。
インタプリタ110がコードを実行している間に、或る
命令を実行する際には、OOCTはブランチロガー112に
入ることができる。ブランチロガー112は、インタプ
リタ110に戻るか、或いはブランチの変換先が既にコ
ンパイルされている場合には、コンパイルされたコード
の導入されたセグメントの1つに入ることができる。こ
のコンパイルされたコードから、セグメントからセグメ
ントへの遷移をするか、又はインタプリタ110へ戻る
ことができる。コンパイルされたコードは、インタプリ
タ110をコール(呼出)して単一オリジナル命令を実
行するか、又はインタプリタ110にジャンプして全て
の制御をインタプリタ110に渡すことができる。
【0029】本願の第1実施形態に関する説明は、以下
の各項に分けて行う。第1の項では、インタプリタ11
0とコンパイラ104のインタフェースについて述べ
る。第2の項では、OOCT用のインタプリタ110につい
て実施した修正について述べる。第3の項では、コンパ
イラ104について述べる。そして最後の項では、ウィ
ンドウズのテスト環境について説明する。
【0030】本発明の第2実施形態から第9実施形態ま
での説明は、第1実施形態の説明の後に続けて行う。
【0031】IV. 通 信(共通ユニット) インタプリタ110とコンパイラ104は、幾つかの方
法で相互に通信を行う。インタプリタ110は、ブラン
チロガー112と交信することによって、ブランチ情報
をブランチログに記録する。また、コンパイラ104は
ブランチログを読むことが可能である。コンパイラ10
4はコンパイルされたコードセグメントを生成し、それ
らを変換テーブル中のそれぞれのエントリポイントに格
納する。インタプリタ110は変換テーブルを読むこと
ができる。また、インタプリタ110はコンパイラ10
4に対し、バッファを介してシードアドレスを送る。こ
の交信にコンパイラ104及びインタプリタ110両者
が用いる変換元コードは、共通ディレクトリにある。こ
の項では、如何に通信が行われるかについて述べる。
【0032】共用OOCTバッファ コンパイラ104とインタプリタ110との間の全ての
通信は、大きな共用メモリ領域であるOOCTバッファを介
して行われる。また、或る通信では、インタプリタ11
0とコンパイラ104の間でメッセージのやりとりをす
るのに、システムコールを用いる。
【0033】以下に述べるテーブル1は、OOCTバッファ
の静的割当(配分)部分を示す。バッファの残りの部分
は、異なるデータ構造用として以下のテーブル2に示す
ように動的に割当られる。OOCTバッファの静的割当部分
の中の或るフィールドは、動的割当部分のデータ構造を
指す。これらのポインタは、それらが何を指しているか
を示す上付数字を有している。例えば、静的割当部分の
ゾーンフィールドは数字2を有し、そしてゾーンフィー
ルドは、数字2を有する動的割当部分のゾーンメモリデ
ータ構造を指す。
【0034】
【表1】
【0035】
【表2】
【0036】
【表3】
【0037】
【表4】
【0038】
【表5】
【0039】
【表6】
【0040】OOCTバッファの動的割当部分に於いては、
データ構造のサイズは幾つかの変数に依存する。その1
つは、オリジナルプロセッサのためのオペレーティング
システム、例えば富士通社のASPが使用するシステム
ページの数である。変換対象となる命令を含むASPア
ドレススペースの各ページに対して、変換テーブルには
1つの変換されたページがある。もう1つの変数は、シ
ステムが記録(ログ)することを予想するブランチ命令
の数である。現在、BRANCH RECORDアレイ及びブランチ
ヘッダテーブルのサイズに影響を与えるブランチ命令数
は、220と予想する。各タスク毎に1つのキャシュがあ
るから、インタプリタ110の数は、L1ブランチロガ
ーキャシュのサイズに影響を与える。
【0041】図4は、各種変数を設定した時のOOCTバッ
ファの概略図である。この図4に於いて、ASPのペー
ジ数はASP命令について10MB、インタプリタ11
0の数は4、そしてOOCTバッファ全体のサイズは128
MBでる。
【0042】
【表7】
【0043】ブランチログ(ブランチロガー112) ブランチログデータ構造は、BRANCH RECORDアレイ、ブ
ランチヘッダテーブル、及びブランチL1キャシュから
成っている。ブランチロガー112の動作説明について
は、以下に述べるインタプリタ修正に関する項を参照さ
れたい。この項では、インタプリタ110からコンパイ
ラ104への情報通信に関して、ブランチログがどの様
に使われるかを説明する。
【0044】図4は、初期化の後のOOCTバッファを示
す。種々の領域のサイズは基準化して示してある。例え
ば、OOCTバッファのサイズは128MB、ASPページ
数は2560、インタプリタ110の数は2、及びブラ
ンチ命令の予想数は220として示してある。
【0045】コンパイラ104は、ブランチログから、
条件付きブランチ命令が何回実行され、また何回実行さ
れなかったかを読み取る。コンパイラは、この情報を2
つの方法で使用する。第1に、コンパイラ104が命令
を解析するとき、コンパイラは、最も頻繁に実行された
命令だけの解析する。条件付きブランチ命令が発生した
場合、コンパイラは、それが何回分岐したか、何回分岐
しなかったかをチェックする。第2に、コンパイラ10
4がコードを発生するとき、コンパイラはブランチ命令
の直ぐ後に条件付きブランチの最も相応しいサクセサ
(後継)命令を置く。これによって発生コードの高速実
行を可能にする。どのサクセサが最も相応しいかを決め
るのに、コンパイラ104はブランチログ情報を利用す
る。詳細については、以下に述べるコンパイラ情報を参
照されたい。
【0046】BRANCH Get Record(ooct/compiler/bra
nch.c) コンパイラ104がブランチログ情報を読み取る際、コ
ンパイラはブランチ命令のアドレスを用いてBRANCH Ge
t Record手続きをコールする。この手続きは、ブラン
チログ内のブランチを参照し、BRANCH RECORDアレイの
要素の1つにポインタを戻す。斯うして、コンパイラ1
04は、ブランチ命令が何回実行されたか、何回分岐さ
れたか、そして実行も、分岐もされなかったか回数を知
ることができる。
【0047】変換テーブル(TRANS UNIT) 変換テーブルは、ASPアドレススペースの全ての命令
に関する情報を含んでいる。変換テーブルは、命令がブ
ランチの変換先であるか否か(JOIN)、命令がコンパイラ
104にシードとして送られたか否か(BUFFERED)、及び
セグメントに対するコンパイルされたコードのエントリ
ポイントがあるか否かを記録する(ENTRY) 。OOCTが初期
化されると、変換テーブルはクリヤされる。ブランチ情
報が記録されると、それらの変換先がJOINポイントとし
て記録される。もしブランチが閾値より多くの回数実行
すると、変換先はコンパイラ104にシードとして送ら
れ、変換テーブルエントリはBUFFEREDとマークされる。
コンパイラ104が変換されたバージョンをコンパイル
し終わった後、コンパイラは、変換テーブルのエントリ
ポイントのアドレスを記憶し、それらをENTRY として記
録する。
【0048】図5(a)、(b)及び(c)は、本発明
の好適実施形態による変換テーブルの構造を示す。図5
(a)に示すように、ASPアドレスは2つの部分に分
かれている。高位20ビットはページ番号、そして低位
12ビットはページオフセットである。
【0049】図5(b)は、ページ番号が第1レベル変
換テーブルに於いてインデックスとして利用されること
を示している。ASPが作用するページは第1レベルペ
ージである。ASPが使用しないページは、そのページ
番号を持つ命令が決してないから、ポインタを有するこ
とはない。ポインタは第2レベルの変換テーブルを指
す。ページオフセットをポインタに加えることによっ
て、変換テーブルのエントリが与えられる。
【0050】図5(c)が示すように、各エントリは3
2ビットの長さを持ち、そのフィールドは図の底部に示
されている。第1ビットは、ASP命令がジョインポイ
ントか否かを示す。第2ビットは、命令のためのセグメ
ントエントリポイントがあるか否かを示す。第3ビット
は、命令がコンパイラ104に対してシードとして送ら
れたか否かを示す。変換テーブルエントリの他のビット
は、もし1で有れば命令にに関するエントリポイントの
アドレスであり、エントリポイントがなければゼロであ
る。
【0051】Kマシンアーキテクチャは可変長命令を有
しているから、変換テーブルは命令中央にあるアドレス
及びデータアドレスを含む全てのASPアドレスに対す
るエントリを有している。このことはテーブルを非常に
大きくするが、アドレスに対して変換テーブルエントリ
を位置づける仕事を簡単にする。変換テーブルの構造は
図5(a)、(b)及び(c)に示されている。上記の
ように、第2レベルの変換テーブルは、全てのASPア
ドレスに対して32ビットのエントリを有している。そ
れ故、ASPが10MBのスペースを使用する場合に
は、第2レベル変換テーブルは40MBを使用する。変
換テーブルのエントリを読み取り、書き込みする手続き
及びマクロは幾つかある。即ち、
【0052】TRANS Set Entry Flag(ooct/common/
trcommon.h) TRANS Set Entry Flagマクロは、変換テーブルエ
ントリのフラグの1つ、JOIN、ENTRY 又はBUFFEREDをo
nにする。このマクロはロックプレフィックス(lock pr
efix) を持つアセンブリ言語命令を使用して、ビットを
最小単位に(atomically)セットする。
【0053】TRANS Reset Entry Flag(ooct/commo
n/trcommon.h) TRANS Reset Entry Flagマクロは、変換テーブル
エントリのフラグの1つ、JOIN、ENTRY 又はBUFFEREDを
offにする。このマクロは、ロックプレフィックスを
持つアセンブリ言語命令を使用してビットを最小単位に
リセットする。
【0054】TRANS Entry FlagP(ooct/common/trcom
mon.h) TRANS Entry FlagP マクロは、変換テーブルエント
リのフラグの1つ、JOIN、ENTRY 又はBUFFEREDの状態を
読み取り、そして戻す。
【0055】TRANS Test And Set Entry Flag
(ooct/common/trcommon.h) TRANS Test And Set Entry Flag手続きは、フ
ラグの1つ、JOIN、ENTRY 又はBUFFEREDの状態を最小単
位で読み取り、それが既にonされていなければon
し、手続きをコールする前のフラグの状態に戻す。
【0056】TRANS Set Entry Address(ooct/comm
on/trcommon.h) TRANS Set Entry Address 手続きは、変換テーブ
ルエントリのエントリポイントアドレスを書き込む。こ
の手続きでは、ロックプレフィックスを持つアセンブリ
言語命令を使用してアドレスを最小単位で書き込む。セ
グメントロッキングがない場合、エントリポイントアド
レスはターゲット命令のアドレスであるが、セグメント
ロックキングがある場合には、SEGMENT GATEデータ構造
のアドレスであることに注意。
【0057】TRANS Get Entry Address(ooct/comm
on/trcommon.h) TRANS Get Entry Address 手続きは、変換テーブ
ルエントリのエントリポイントアドレスを読み取り、そ
して戻す。セグメントロッキングがない場合、エントリ
ポイントアドレスはターゲット命令のアドレスである
が、セグメントロックキングがある場合には、 SEGMENT
GATEデータ構造のアドレスであることに注意。
【0058】セグメント セグメントは、KOI システムが実行するコンパイルされ
たコードの単位である。以下に述べるコンパイラ104
のマテリアルは、どの様にしてセグメントが生成され、
そして削除されるかについて説明する。この項では、コ
ンパイラ104はセグメントについて、どの様にインタ
プリタ110に告げるか、インタプリタ110はどの様
にしてセグメントに入り、其処から出るか、及びコンパ
イラ104はインタプリタ110に対して、1つのセグ
メントの使用を停止し、他のセグメントに切り換えるよ
う、どの様に命令するか、について説明する。
【0059】セグメントが生成されると、インタプリタ
110が入ることが可能な幾つかのASP命令アドレス
がある。これらアドレスの各々に対して、コンパイラ1
04はセグメントへのエントリポイントを生成する。エ
ントリポイントはセグメントに於ける特別な点であっ
て、インタプリタ110は其処にジャンプすることがで
きる。セグメント内の他の点では、コンパイルされたコ
ードは或る値がレジスタにあると想定するので、其処に
ジャンプすることは安全ではない。これらエントリポイ
ントが何処にあるかをインタプリタ110に知らせるた
め、コンパイラ104は各n番目の TRANS Get Entr
y Address について、 TRANS Set Entry Addres
s をコールする。
【0060】インタプリタ110は、コンパイルされた
コードがブランチロガー112に入る時、コンパイルさ
れたコードに関してチェックを行う。コンパイルコード
は TRANS Entry FlagP をコールし、現在のASPア
ドレスがエントリポイントを持っているかを調べる。も
し持っていれば、 TRANS Get Entry Address をコ
ールして、アドレスを読み取る。セグメントロッキング
がonの場合には、コンパイルされたコードはセグメン
トをロックする(以下参照)。もしoffであれば、コ
ンパイルされたコードは、エントリポイントにジャンプ
する。コンパイルされたコードは、何時ブランチロガー
から出るかを決定する。通常、この決定は、同じセグメ
ントの部分ではない命令を実行する必要があるときに起
こり、決定後、インタプリタ110にジャンプする。
【0061】コンパイラ104は、1つのコンパイルさ
れたコードセグメントを削除し、もう1つ他のコンパイ
ルされたコードセグメントを使用するよう、インタプリ
タ110に命令することができる。コンパイラ104
は、変換テーブルエントリのENTRY ビットをoffに
し、エントリポイントアドレスを変更し、再度ENTRY ビ
ットをonにする。
【0062】セグメントロッキング セグメントロッキングは、OOCTシステムの任意選択の機
能である。システムの稼働と共にブランチロガー112
はより多くの情報を得るから、コンパイラ104は古い
セグメントよりも更に良い新たなバージョンのセグメン
トを作成することができる。コンパイラ104はセグメ
ントロッキングによって、古いセグメントを新しいセグ
メントに換え、古いセグメントが使用したメモリを再生
使用することができる。しかし、生憎なことに、セグメ
ントロッキングはブランチロガー112及びコンパイル
されたコードを低速化してしまう。そこで、OOCTコード
を実行する時間と、それに使用するスペースとの間には
トレードオフ(交換)がある。この項では、セグメント
ロッキングの動作について説明する。
【0063】セグメントロッキングコードは2つの主要
な部分を有している。第1の部分はセグメントロッキン
グ実施部分を除くOOCTシステム全ての部分に対するイン
タフェースである。このインタフェースは、セグメント
が4つの明確な状態の1つにだけ入ることができ、明確
な方法でそれらの状態を変更することを保証する。第2
の部分はセグメントロッキング自身の実施部分であっ
て、上記インタフェースによる保証を満足する。
【0064】設 計セグメントが取ることのできる状態
はテーブル3に示されている。セグメントは到達可能
か、又は到達不能かの何れかの状態を取ると共に、ロッ
ク又アンロックの状態を取る。セグメントは、変換テー
ブルに1つ以上のエントリポイントがあるとき到達可能
であり、変換テーブルにセグメントへのエントリポイン
トがないとき到達不能である。エントリポイントは、ロ
ック及び命令アドレスを含む構造である。1つ以上のイ
ンタプリタ110によって同時に使用されるロックは、
幾つのインタプリタ110がエントリポイント及びそれ
を含むセグメントを使用したかをカウントする。セグメ
ントの1つ以上のエントリポイントがロックされたと
き、セグメントはロックされ、セグメントの全てのエン
トリポイントがアンロックされたとき、セグメントはア
ンロックされる。
【0065】コンパイラ104は、セグメントが到達不
能、且つアンロックの状態にあれば、セグメントの再生
使用及び削除ができるが、セグメントが到達可能又はロ
ックの状態にあれば、セグメントの再生使用はできな
い。コンパイラ104がセグメントを生成すると、全て
のセグメントは状態U/Uにある。コンパイラ104が
変換テーブルにエントリポイントを書き込むと、セグメ
ントは状態R/Uに移動する。インタプリタ110のセ
グメントへの入出に応じて、セグメントは状態R/Lに
移動し、また状態R/Uに戻る。コンパイラ104は、
古いセグメントと同じ命令を変換する新たなセグメント
を生成することができる。この場合、コンパイラは変換
テーブルに古いセグメントのエントリポイントを上書き
し、そのセグメントを到達不能とする。コンパイラ10
4がセグメントの最終エントリを上書きするとき、イン
タプリタ110がそれを使用している場合には、セグメ
ントは状態R/LからU/Lに移動し、使用していない
場合には、セグメントは状態R/UからU/Uに移動す
る。結局、セグメントを使用する全てのインタプリタ1
10はロックを解放し、セグメントは状態U/Uを取
る。このとき、何れのインタプリタ110もセグメント
を使用しておらず、そこにも入れないから、コンパイラ
104はセグメントの再生使用もできるし、またセグメ
ントの削除もできる。
【0066】
【表8】
【0067】図6は、本発明の実施形態によって、イン
タプリタ110がセグメント122に入り、其処から出
るまでを示す図である。図中央のセグメント122は、
コンパイラ104によって作られたコードの単位であ
る。セグメント122は、インタプリタ110によって
使用される際には、常時ロックされていなければならな
い。従って、ロックカウンタ(図示せず)は、インタプ
リタがセグメント122にはいる以前には増分(加算)
され、セグメント122から出た後は減分(減算)され
る。インタプリタ110は、エントリポイントをルック
アップできず、エントリポイントを最小単位にロックす
るから、ロック後にエントリポイントが変化しなかった
かを決定しなければならない。
【0068】図7は、コンパイラがセグメントを生成
し、インタプリタ110によるセグメントへの到達を可
能にし、古いセグメントへの到達を不能にし、そして古
いセグメントを削除する方法を示す。ステップS200
に於いて、コンパイラ104は新しいセグメントを生成
し、関連するエントリポイントを変換テーブルに加え
る。エントリポイントがステップS200に加えられる
と、古いエントリポイントは書き換えられる。これによ
って、古いエントリポイントは到達不能となり、従って
タスク(例えば、インタプリタ110又はコンパイラ1
04)がそれをロックオン状態に保持していなければ、
再利用できる。古いエントリポイントは再生使用リスト
(図示せず)に書き込まれる。
【0069】ステップS202は、コンパイラ104が
どの様に再生使用リストを使用するかを示す。ステップ
S202はエントリポイントがロックされているか否か
をチェックする。エントリポイントがロックされていな
ければ、エントリポイントはどのインタプリタ110に
よっても使用されておらず、それ故、このエントリポイ
ントを有するセグメントから取り除くことができる。し
かし、そのセグメントが最早エントリポイントを持って
いなければ、セグメントはタスク(例えば、インタプリ
タ110又はコンパイラ104)によって使用されず、
如何なるタスクもそのセグメントには入れない。それ
故、そのセグメントは削除することができる。
【0070】セグメントロッキングインタフェースは、
OOCTの殆どの部分が同期に関する詳細を無視することを
許す。その理由は、セグメントは常に明確な状態にあ
り、そして全ての状態遷移は最小単位で起きるからであ
る。しかし、セグメントロッキングコード内部では、イ
ンテルターゲットは、ハードウェアに於けるそうした複
雑な動作を支持しないから、遷移は最小単位で起きては
いない。それ故、セグメントロッキングコードは遷移を
自動的にさせる。
【0071】実 施 インタプリタ101及びコンパイラ104の実行手続き
は、図6及び図7にそれぞれ図示されている。これら2
つの手続きは、確実に遷移が自動的に行われるように共
働する。以下の説明に於ける括弧内の参照番号は、図6
及び図7を参照する。
【0072】セグメントインタフェースの4つの状態の
間には、6つの可能な遷移があり、それらは4つのグル
ープに分かれる。第1の遷移は、コンパイラ104がセ
グメントのエントリポイントを変換テーブルに書き込む
ことによって、セグメントを到達可能にしたときのもの
で、U/UからR/Uへの遷移である(*6 )。コンパ
イラ104は変換テーブルに書き込みができる唯一のタ
スクであるから、この遷移を自動的にするのに如何なる
同期も必要ない。
【0073】第2の遷移グループは、R/UからU/U
の遷移と、R/LからU/Lへの遷移である。これらの
遷移は、コンパイラ104がセグメントの最終エントリ
ポイントを変換テーブルに上書きした時に起こる(*30
6 )。コンパイラ104は変換テーブルに新たなエント
リポイントを書き込むことができるが、インタプリタ1
10はエントリポイントを最小単位に読み取ることがで
きず、それをロックする(*301 、*302 )。従って、
インタプリタ110は、1つの動作でエントリポイント
を読み取り、もう1つの動作でそれをロックしなければ
ならない。もしインタプリタ110が、変換テーブルか
ら古いエントリポイントを読み取り、次いでコンパイラ
104が新たなエントリポイントを書き込み、そしてイ
ンタプリタ110が古いエントリポイントをロックする
としたら、これは潜在的問題を露呈することになる。こ
の場合、コンパイラ104は、エントリポイントは到達
不能であるが、インタプリタ110はセグメントに入れ
ると想定する。これは誤りである。この問題を防止する
ため、インタプリタ110は変換テーブルがロッキング
後、同じエントリポイントを含んでいるかをチェックす
る(*303 )。変換テーブルが同じエントリポイントを
含んでいれば、エントリポイントは到達可能であり、安
全にセグメントには入れる。変換テーブルが同じエント
リポイントを含んでいなければ、インタプリタ110は
そのロックを解かなければならず、セグメントに入って
はならない。
【0074】第3の遷移グループは、R/UからR/L
への遷移と、その反対のR/LからR/Uへの遷移であ
る。前者の遷移は、インタプリタが変換テーブルからエ
ントリポイントを読み込み、それをロックしたときに起
こる(*302 )。後者の遷移は、インタプリタ110が
セグメントのexit(*304 )に於いてセグメントか
ら離れて、アンロック手続き(*305 )に移行するとき
に起こる。ロッキング及びアンロッキング命令は、それ
自体セグメントには無く、セグメントは如何なる時もア
ンロック状態にあるから、コンパイラ104がそれを削
除できる(*3011)ことは重要である。
【0075】第4の遷移は、U/LからU/Uへの遷移
である。この遷移もインタプリタ110がセグメントを
離れて(*304 )、アンロック手続き(*305 )に移行
するときに起こる。この遷移が起こった後、セグメント
はアンロックされ、コンパイラ104は2つのテストを
通り(*309 、*3010)、そしてセグメントを削除する
(*3011)。
【0076】インタプリタ110は任意の時間期間、セ
グメントのロックを保持できるから、コンパイラ104
をそのロック時間待たせることは非効率である。それ
故、コンパイラ104は、インタプリタ110がエント
リポイントを使うのを防止するため、エントリポイント
のロックを行わない。その代わり、コンパイラはセグメ
ントを到達不能とし、後でロックが解放されたか否かを
チェックする(*309 )。一旦ロックが解かれれば、エ
ントリポイントはフリーとなり、再利用することができ
る。
【0077】モニタメッセージ待ち行列 インタプリタ110は、コンパイラ104に対してシー
ドアドレスを送る。このシードアドレス送信には、2つ
のメッセージ待ち行列が使用される。第1の待ち行列は
シード送受信のため、KOI システムコール ScMsgSnd 及
び ScMsgRcv を使用する。第2の待ち行列は、OOCTバッ
ファの共用メモリ領域を使用する。この共用領域は、br
anch Seed Bufferと呼ばれる。
【0078】2つの待ち行列を使用する理由は、それら
各々が1つの利点と、1つの不利な点を持っているから
である。KOI システムコールは、インタプリタ110が
使用するには費用が掛かり、そう頻繁には使用すべきで
はない。しかし、KOI システムコールは、コンパイルす
るシードがないとき、コンパリラ104がブロックする
ことを許す。このことは、KOI システムがコンパイラ1
04を使ってCPUが何か他の仕事をすることを許すこ
とになる。共用メモリ領域の利点は、インタプリタ11
0がそれを非常に安価に使用できる点であるが、その不
利な点はシードがない時、ブロックできない点である。
【0079】これら両方の待ち行列を用いることによっ
て、OOCTはこれら2つの方法の利点を得ることができ
る。コンパイラ104が非動作状態にあるとき、ScMsRc
v をコールしてブロックする。この場合、インタプリタ
110は ScMsgSnd コールを用いて次のシードを送り、
コンパイラ104を起こす。コンパイラ104が動作状
態にあるときは、高速のbranch Seed Buffer領域を介
してシードを送る。コンパイラ104は1つのコンパイ
ル動作を終了した後、 sch Seed Buffer領域をチェッ
クする。もし何か他にシードがあれば、コンパイラはそ
れらをコンパイルする。全てのシードのコンパイルが完
了したとき、コンパリラは再度 ScMsgRvcをコールし、
ブロックする。
【0080】V. インタプリタの修正(EXECユニッ
ト) OOCTの設計は、インタプリタ110に対する三種類の修
正を含んでいる。その第1は、OOCTをインタプリタ11
0によって初期化できるようにするための修正、第2は
インタプリタ110がブランチロギングを使用できるよ
うにするための修正、最後はインタプリタ110がコン
パイルされたコードへの遷移及び其処からの遷移ができ
るようにするための修正である。ここでは、これら修正
の詳細について述べる。
【0081】OOCTのインタプリタコードは、2つのモー
ド、OOCT PERFORMANCE MODE及びOOCT DEBUG MODE
で実行することができる。ここでは、OOCT PERFORMANC
E MODEの全ての特徴を説明すると共に、OOCT DEBUG M
ODEと何処が違うかについて述べる。
【0082】初期化 OOCTがコードをコンパイルし又はブランチをログする前
に、インタプリタ110はOOCT INITをコールして、OO
CTデータ構造の初期化を行う。OOCT INIT及びそれがコ
ールする手続きは、以下のステップを実行する。
【0083】変換テーブルを初期化する。MCD命令は
OOCTにシステムアドレススペースのページ数を告げる。
手続き TRANS Execution Initは、システムページに
関するエントリが、第2レベルの変換テーブルアレイを
指すように第1レベル変換テーブルを生成する。これら
アレイは、初期化の時にゼロにされる。変換テーブルに
ついての更なる詳細は通信に関する項を参照。
【0084】ブランチロガー112を初期化する。手続
きBRANCH Execution Initは、幾つかのデータ構造の
ためにOOCT bufferのメモリを初期化する。これらの構
造としては、第1にブランチ命令についてのプロファイ
ル情報を含むブランチログ自身がある。第2には、ブラ
ンチロガー112を高速動作させるレベル1(L1)キ
ャッシュがある。第3に、ブランチロガー112からコ
ンパイラ104に送られるシードを含むシードバッファ
がある。第4に、コンパイルされたコードがコールする
幾つかの大域機能(global functions)がある。これらの
アドレスは、BRANCH Execution Initの実行中に、OO
CT bufferに記憶される。ブランチログ及びレベル−1
キャシュに関する更なる情報については、上記ブランチ
ロガー112に関する項を参照。
【0085】コンパイラ104のスタックメモリへの割
当。コンパイラ104は、OOCT bufferに割当られた特
に大きいスタックを使用する。 1.コンパイラ104のゾーンメモリへの割当。コンパ
イラ104はコンパイル中、OOCT bufferのこのメモリ
を使用する。 2.コンパイルされたセグメントメモリの割当。コンパ
イルされたコードはOOCT bufferのこの領域に置かれ
る。 3.統計的情報をゼロ化。OOCTが初期化される際、OOCT
の統計的領域に於ける殆どの情報がリセットされる。
【0086】ブランチロガー インタプリタを有するインタフェース インタプリタ110がシステムコードで書いたブランチ
命令を実行し、OOCTモードビットが設定されると、イン
タプリタ110は下記のルーチンの1つを介して、ブラ
ンチロガー112をコールする。
【0087】 declspec(naked)OOCT Log Unconditio
nal Fixed Branch() ブランチを有するインタプリタによってコールされる。 増補: exc: ブランチ命令のアドレス 復帰: 復帰せず(IC FETCHO2 へのジャンプのように
作用する)
【0088】 declspec(naked)OOCT Log Unconditio
nal Non Fixed Branch() ブランチを有するインタプリタによってコールされる。 増補: exc: ブランチ命令のアドレス 復帰: 復帰せず(IC FETCHO2 へのジャンプのように
作用する)
【0089】 declspec(naked)OOCT Log Conditiona
l Fixed Branch Taken() ブランチを有するインタプリタによってコールされる。 増補: exc: ブランチ命令のアドレス 復帰: 復帰せず(IC FETCHO2 へのジャンプのように
作用する)
【0090】 declspec(naked)OOCT Log Conditiona
l Fixed Branch Not Taken() ブランチを有するインタプリタによってコールされる。 増補: exc: ブランチ命令のアドレス 復帰: 復帰せず(IC FETCHO2 へのジャンプのように
作用する)
【0091】これら4つのルーチンは、変換先アドレス
に対するコンパイルされたコードエントリポイントをチ
ェックし、もし在ればそのエントリポイントにジャンプ
する。もしなければ、ルーチンは、branch L1 Touch
(次の項を参照)をコールして、ブランチログを更新
し、インタプリタ110の取り出し(fetch )ルーチン
へジャンプする。
【0092】ブランチログテーブル更新 図8は、本発明の好適実施形態によるBRANCH RECORDの
構造を示す。
【0093】ブランチロギングコードは、ブランチが何
回実行したかをカウントする。ブランチロガー112が
カウントの記憶に使用するデータ構造は2つ在る。その
1つはブランチログであって、これは多重プロセッサシ
ステムに於いて、全ての模擬的プロセッサによって共用
される。もう1つは、多重プロセッサの各模擬的プロセ
ッサに対する1つのレベル1(L1)キャシュである。
ブランチ実行カウントは、先ずキャシュに書き込まれ、
次いでブランチログに書き込まれる。この項ではL1キ
ャシュ及びブランチログの構造について説明する。ま
た、ブランチロガー112がどの様にしてそれらを使用
するかについても説明する。
【0094】各ブランチに関する情報は、BRANCH RECO
RDと称する構造に記憶される。この構造は、ブランチの
アドレス、ブランチの変換先、ブランチに続くフォール
スルー(fall through)命令、ブランチが実行した大凡の
回数、及びブランチが取られた(taken) 大凡の回数を含
む。BRANCH RECORDの最終フィールドは、もう1つ他の
BRANCH RECORDに対するポインタであって、連結リスト
にBRANCH RECORDを接続するのに使用される。
【0095】ハッシュテーブルは、連結リストのアレイ
として構成される。
【0096】図9は、ブランチログの構造を示す。それ
はBRANCH RECORDを記憶する大きなハッシュテーブルで
ある。各インタプリタ110は、可変 local branch
header table 自身のコピーを持っているが、それら全
てはOOCTバッファ領域に於ける同じアレイを指す。 loc
al branch header table の要素は、BRANCH RECORD
のリストに対するポインタである。ブランチに関するる
BRANCH RECORDの探索手続きは以下の3ステップであ
る。 1.変換先アドレスをハッシュする。(index =BRANCH
HASH(destination address)% BRANCH TABLE SIZE)
。 2.リストのヘッドを取得する。(list =local branch
header table[index]) 3.同じブランチアドレスを持つ記録が見つかるまで探
索する。(while(list-> branch address! =branch ad
dres)list = list->next)
【0097】図9は特に、可変 local branch header
table が、リストに対するポインタアレイであること
を示している。各リストは同じ変換先アドレスを有する
BRANCH RECORDを含んでいる。リストがない場合、 loc
al branch header tableのポインタは空である。
【0098】ブランチログはブランチに関する情報の全
てを含んでいるが、2つの問題を抱えている。その1つ
は、BRANCH RECORDの探索及び挿入動作が遅い点であ
る。インタプリタ110が常時ブランチの記録を取るに
は遅すぎる。もう1つの問題は、全てのインタプリタ1
10が同じブランチログを使用する点である。BRANCH RE
CORDのリストを一貫して矛盾無く保つために、一度に1
つのExecだけしかブランチログにアクセスできない。こ
のことは、単一のプロセッサシステムの場合はもとよ
り、多重プロセッサシステムの動作を更に減速させる。
この問題を解決するために、各インタプリタ110に
は、1つのL1キャシュがある。このL1キャシュには
高速でアクセスができると共に、インタプリタ110は
これと平行に、それらのL1キャシュにアクセスするこ
とができる。各L1キャシュは、BRANCH L1 RECORD構
造の2次元アレイとして構成される。このアレイのベー
ス(基底、基準)アドレスは可変branch L1 table に
記憶される。
【0099】図10はL1キャシュの構造を示す。L1
キャシュは、BRANCH L1 RECORDの2次元アレイであ
る。第1次元はBRANCH L1 SETS(現在32)であり、
第2次元はBRANCH L1 SETSIZE (現在4)である。ア
レイの各行は1つのセットである。同じブランチ命令
は、常にキャシュの同じセットを使用するが、それは異
なる場所に於いても可能である。
【0100】図10に示すように、L1キャシュは複数
のセットで構成される。ブランチに対するセット数は、
(branch address + branch destination )% BRANCH
L1 SETSに等しい。セットの4つの要素は同じセット数
の4つの最新ブランチを保持する。これは4−ウェイセ
ット連想法(4-way set associativity) と言われる。同
じセット数を有し、ほぼ同時に実行される幾つかのブラ
ンチが在るとき、キャシュの性能は改善される。
【0101】図11は、本発明の実施形態によるインタ
プリタ110によって、L1キャシュの動作を実行させ
る方法を示す。即ち、図11はL1キャシュを用いたブ
ランチロギング方法を示す。
【0102】最適化オブジェクトコード変換方法は、コ
ンパイル未了ブランチを記録するのに、2つの形のメモ
リを利用する。即ち、 1.記録されたブランチの数に比例する動的可変サイズ
を有するブランチログ、及び 2.限られた数のコンパイル未了の記録されたブランチ
が、アクセスを高める順序に従って記録される、L1キ
ャシュと称するブランチキャシュ、を利用する。これら
ブランチログ及びL1キャシュは、オペレーティングシ
ステムによって管理される仮想記憶位置を表す。それ
故、ここでの用語“L1キャシュ”は、コンパイル未了
ブランチを記憶するキャシュに任意に与えられる用語で
あって、一般に、Pentium Pro 等のプロセッサに見られ
る“L1キャシュ”と混同してはならない。
【0103】本発明による最適化オブジェクトコード変
換プログラムは、インタプリタ110が複数の異なるブ
ランチルーチンをコールすることができるようにする。
しかし、各ブランチロギングルーチン自身は、コンパイ
ルされたコードへジャンプするか、又はブランチ命令を
記録するかを決めるサブルーチンをコールする。図11
は、このサブルーチンを詳しく示している。
【0104】上記説明を考慮しつつ、L1キャシュを使
用したブランチロギング方法を実行するため、先ずステ
ップS400からこの方法を始める。ステップS401
において、インタプリタ110は、ブランチの変換先に
対するコンパイルされたコードのエントリポイントをチ
ェックする(即ち、問題のセグメントが事前にコンパイ
ルされているか否かをチェックする)。もしエントリポ
イントが在れば、即ち“yes”ならば、コンパイルさ
れたセグメントが在り、直ちにコンパイルされたコード
セグメントを実行するためステップS402へジャンプ
する。このコンパイルされたコードセグメントの実行
は、エンドフラグに到達するまで続けられ、これが終了
すると、次のセグメント実行に戻る。勿論、ブランチが
既にコンパイルされているので、ブランチはブランチロ
グに記録されない。
【0105】ステップS401で、エントリポイントが
なければ、即ち“no”ならば、ブランチ命令に対応す
るコンパイルされたセグメントはなく、ステップS40
4に移り、インタプリタ110はL1キャシュを調べ
て、L1キャシュに記憶された複数のブランチに一致す
るブランチがあるか否かを決定する。
【0106】ステップS404は、L1キャシュに記憶
された複数のブランチに一致するブランチがあるか否か
を決定する。L1キャシュは複数のセットに分かれてお
り、各セットは固有のセット番号によって指定されてい
る。本発明の実施形態では、各セットは4つのブランチ
を含んでいる。
【0107】ステップS404は、最初に現在のブラン
チアドレスに対応するキャシュセットの数“S”を決め
る。ここで、S=(branch address + branch destin
ation )% BRANCH L1 SETSである。次に、branch L1
table[S]の各要素は、現在のブランチのアドレス及び
変換先に関して順次チェックされる。もし一致するブラ
ンチが検出されると、即ち“yes”ならば、ステップ
S406に進み、フィールド“encountered sub co
unt ”(何回ブランチに出合ったかを示すフィールド)
及び“taken sub count ”(何回ブランチが取られ
たかを示すフィールド)が更新され、次にステップS4
07に進む。
【0108】ステップS407では、現在のブランチア
ドレスが、所定の閾値より大きいか否かが決定される。
好適な閾値は1000ビットのオーダーである。こうし
て、フィールド encountered sub count は、ステッ
プ407で閾値と比較される。もしそれが閾値を越えて
いれば、即ち“yes”ならば、ステップS410に進
み、このブランチに関するキャシュされた情報は、ブラ
ンチログに書き戻される。他方、閾値を越えていなけれ
ば、即ち“no”ならば、ステップS412に進む。ス
テップS412は、IC-FETCHO2へジャンプする現在のサ
ブルーチンの終わりであり、即ちインタプリタ110の
エントリポイントである。
【0109】もし正しいブランチがキャシュになけれ
ば、即ちステップS404で“no”ならば、ステップ
S408に進んで、上記“S”によって指定されたセッ
トの1つBRANCH L1 RECORD(即ち、 encountered su
b count 、及び taken sub count 等の更新可能な全
てのフィールドを含む記録)はL1キャシュから除か
れ、ブランチログに書き込まれる。次に、現在のブラン
チ情報は“S”よって指定されるセットに書き込まれ
る。更に、現在のブランチ記録をセット“S”に書込み
中、この現在のブランチ記録はセットの第1要素として
置かれる。これは、同じブランチが再度実行される可能
性があり、これによってシステムの性能及び効率が上が
るからである。言い換えれば、ステップS404は高速
で実行される。ブランチがキャシュに在る時でさえ、即
ち“yes”の場合、もしそのブランチが何回も何回も
実行されたとしても、最終的にフラッシュされるので、
そのブランチをブランチログにコピーしておくこともで
きる。
【0110】L1キャシュを使用する際、ステップの順
序は大凡常に、S400、S404、S406、S40
7、そしてS412の順である。従って、本発明はそれ
らのステップを出来るだけ高速にすることを求める。現
在のブランチ情報がセットの第1要素に入力されると、
インタプリタ110は同じブランチを再度実行するよう
になるから、そのブランチ情報がステップS404を高
速化する。
【0111】上記のブランチロギング方法は、前もって
コンパイルされたコードを実行し、そしてコンパイルの
閾値レベルに達していないブランチ命令へのアクセスを
高めることによって、プロセッサへの負担を軽減する。
この点について、OOCTの主目的は、ステップS400が
殆ど常に分岐“yes”を取るようにすることである。
ブランチを頻繁に実行する場合には、その変換先に関す
るコンパイルされたコードセグメントがなければならな
い。
【0112】第2の目的は、ステップS401に続く経
路“no”を高速化し、まだコンパイルされてないブラ
ンチがプログラムの実行速度を目立って落とさないよう
にすることである。この経路“no”の最も遅い部分を
“フラッシュ”と呼ぶ。両ステップS408及びS41
0では、ブランチ情報はL1キャシュから“フラッシ
ュ”され、ブランチログに書き込まれる。シードをコン
パイラに送るには、ブランチ情報をフラッシュすること
が必要になり、このことがコンパイルされたコードを発
生させ、ステップS400がやがて、このブランチに対
し“yes”と応えるようにさせる。
【0113】しかし、コンパイル未了のブランチアドレ
スを実行するたびに、ブランチの情報をフラッシュする
必要はない。100回乃至はそれ以下の実行毎にフラッ
シュを掛ければ良い。それ故、本発明はフラッシュを含
まないステップS400、S404、S406、S40
7及びS412の実行速度を上げることを求める。従っ
て、二者択一状態が起こらない限り、より高速な経路を
常に選択するようにする。ステップS404では、ブラ
ンチ情報がセットに見つからない可能性がある。そこ
で、ステップS408への経路“no”を取る。ステッ
プS407で、もしブランチが“閾値”回数以上に実行
されるようであれば、フラッシュを含むステップS41
0へ経路“yes”を取る。
【0114】OOCT DEBUG MODEでも、L1キャシュ方
法が使用されるが、キャシュをフラッシュするための閾
値は1にセットされ、情報はブランチの実行毎にブラン
チログに書き込まれる。これは、OOCT DEBUG MODEを
更に遅くする。
【0115】シード選択 ブランチ命令が頻繁に実施されるとき、ブランチロガー
112は、その変換先アドレスをコンパイラ104に送
る。このアドレスは“シード”と呼ばれ、そしてシード
の選択はOOCTシステムの非常に重要な部分である。
【0116】シードは、手続きの開始又はループのヘッ
ドに於けるアドレスでなければならない。それ故、ブラ
ンチロガー112は無条件ブランチの変換先であるシー
ドを送るだけである。シードは頻繁に実行されるアドレ
スでなければならない。従って、 encountered count
フールドが閾値より大きい場合にだけ、ブランチの変換
先がシードとなる。閾値は、seed production thresh
old と称するフィールドのOOCTバッファに記憶される。
閾値は時間を切り換えることができる。これについて
は、次の項で説明する。
【0117】閾値設定 シードを送るか否かを決めるのに固定閾値を使用するこ
とについては、2つの欠点がある。その第1は、コンパ
イラ104が遊休状態(idle)にある間、固定閾値が高す
ぎる嫌いがある。この場合、コンパイラ104には為す
べき有効な作業があるが、ブランチロガー112はコン
パイラ104に対して、何をすべきかを指示しない。ま
た、第2として、メッセージ待ち行列が一杯の状態にあ
る間、固定閾値が低すぎる嫌いがある。この場合、ブラ
ンチロガー112は、たとえシードが待ち行列に適合し
なくても、シードを送ろうとする。これは時間の浪費に
繋がる。
【0118】幸いなことに、これら2つの状態、即ちコ
ンパイラ104の遊休状態及びメッセージ待ち行列の満
杯状態は検出することができ、そして閾値を変えること
ができる。ブランチロガー112は、OOCTバッファの n
um monitor seed messagesと称するフィールドを読
み取ることによって、コンパイラ104が手続きbranch
Update Entry に於いて遊休していることを検出す
る。このフィールドが0の場合、コンパイラ104は、
送られてきた全てのシードを完了している。閾値が高す
ぎると、ブランチロガー112はそれを下げる。ブラン
チロガー112がシードを送ろうとして、手続きbranch
Send Seedで満杯のメッセージシードを検出すると、
ブランチロガーはメッセージが送れなかったことを示す
エラーコードを受け取る。閾値が低すぎると、ブランチ
ロガー112はそれを上げる。
【0119】OOCT DEBUG MODEでは、閾値は決して変
化しない。この場合、その値はOOCT INIT手続きの第3引
数にセットされる。
【0120】多重タスキング処理 OOCTは複数のインタプリタ110を有する多重プロセッ
サ上で作動する。これらのタスクは個々にブランチL1
キャシュを有しているが、同じブランチログテーブルを
使用する。ブランチ情報がL1キャシュからブランチロ
グテーブルにフラッシュされると、インタプリタ110
は、如何なる他のExecとも競合しないログをテーブル上
で入手する。ブランチログロックに関するコンテンショ
ン(競合)を扱うには2つの方法がある。第1の方法
は、ロックが使用可能になるまでインタプリタ110を
待機させ、次いでロック使用が可能になったら、そのブ
ランチ情報を書き込む方法である。この方法は、インタ
プリタ110の実行速度をより遅くするが、ブランチロ
グをより正確にする。また、第2の方法は、もしインタ
プリタ110がロックを得られなければ、ブランチ情報
を書き込まずにあきらめる方法である。この方法は、イ
ンタプリタ110を高速にするが、或るブランチロギン
グ情報を失うことになる。インタプリタ110のスピー
ドは、ブランチログの正確さより重要なので、OOCTは第
2の方法を使用する。ブランチログ情報は、システムが
うまく機能する程度に大凡の正確さを持っていることが
必要なだけである。
【0121】OOCTが複数のインタプリタ110と共に動
作する際、複数タスクの1つは、OOCTバッファ及びブラ
ンチロギングデータ構造を初期化するために、OOCT IN
ITをコールする特別なマスタータスクである。その他の
タスクは、幾つかのローカル変数及びそれらのブランチ
L1キャシュを初期化しなければならないだけの従属タ
スクである。従属タスクは、マスタータスクがOOCT bu
fferの初期化を完了した後に、 SlaveOOCT Initをコー
ルする。マスタータスクと従属タスクとの間の同期を取
るには下記の方法を使用する。即ち、
【0122】マスタータスクに対する方法 1.MCD命令を実行してOOCTをonする。 2.OOCTバッファ及びブランチロギングデータ構造を初
期化するOOCT INITをコールする。 3.従属タスクを作動させる。 4.インタプリタへジャンプする。
【0123】従属タスクに対する方法 1.休眠状態に入る。マスタータスク(上記ステップ
3)の実行により作動開始。 2.タスク個々のブランチL1キャシュを初期化する S
laveOOCT Initをコールする。 3.インタプリタへジャンプする。
【0124】ユーザ/システムスペース変換 OOCTシステムはASPアドレススペースのシステムペー
ジからの命令をコンパイルするだけであって、ユーザペ
ージは無視する。インタプリタ110の個々の領域のOO
CTSTS ビットは、ブランチロガー112をコールするか
否かを制御する。このバットは、二つのマクロNEXT CO
及びNEXT OUN によって主として制御される。しかし、
OOCTコードがこのビットをセットしなければならない場
合が1つある。コンパイルされたコードセグメントが非
固定ブランチ命令で終わるとき、OOCTコードは PSW IA
をシステムスペースからユーザスペースに移動させ、OO
CTSTS を0にセットする。それ故、非固定ブランチ命令
で終わるコンパイルされたコードセグメントは、変換先
アドレスをチックしすると共に、OOCTSTS ビットを正し
くセットするルーチンbranch Exit Log にジャンプす
る。
【0125】コンパイルされたコードインフェース コンパイルされたコードへ/からの遷移 インタプリタ110がブランチロガールーチンをコール
するとき、実行をコンパイルされたコードに移行し、ブ
ランチの変換先向けにコンパイルされたセグメントを見
つける(図11参照)。セグメントロッキングがoff
の時、インタプリタ110はエントリポイントへ直接ジ
ャンプする。セグメントロッキングがonの時、インタ
プリタ110は、エントリポイントへジャンプする前
に、セグメントのロックを試さなければならない。セグ
メントをロックできたら、インタプリタ110はエント
リポイントへジャンプする。もしできなければ、インタ
プリタ110へジャンプバックする。
【0126】制御がコンパイルされたコードセグメント
から出るための実行方法には幾つかある。これをテーブ
ル4に示す。これら全ての場合、制御がインタプリタ1
10に戻るとき、ESI及びEDIレジスタは正しい値
を持ち、インタプリタ110の個々の領域は完全なK状
態を持っている。
【0127】
【表9】
【0128】セグメントロッキングがonの時、インタ
プリタ110はコンパイルされたコードを実行する間、
コンパイルされたコードセグメントのロックを保持す
る。インタプリタ110はセグメントを出た後、このロ
ックを解除しなければならないから、コンパイルされた
コードは、ロックを解除し、インタプリタ110へジャ
ンプするブランチロガー112の幾つかの手続きをコー
ルする。
【0129】割り込み コンパイルされたコードの実行中にできる割り込みに
は、入出力(IO)割り込み、又はMCHK割り込み等の幾つか
のものがある。コンパイルされたコードは個々の領域の
INTINFフィールドをチェックして、割り込みが起こった
かを検出する。コンパイルされたコードはできる限り無
限ループのこのフィールド内部をチェックし、常に確実
に割り込みを見逃さないようにする。割り込みが起きた
場合には、コンパイルされたコードは、完全なK状態に
あるインタプリタ110のルーチンIU OINTCHK をコー
ルする。それはインタプリタ110がコンパイルされた
コードに戻ることを期待する。
【0130】インタプリタコールバック K演算コードの或るものは、OOCTによって変換されな
い。その代わり、コンパイルされたコードはインタプリ
タ110のサブルーチンIC OOCTをコールし、その演算
コードを変換してコンパイルされたコードに戻す。コン
パイルされたコードは、IC OOCTをコールする前に、E
SI及びEDIレジスタが正しい値を有すること、及び
個々の領域が完全なK状態を有していることを確認す
る。
【0131】インタプリタ110は、サブルーチンIC
OOCTを実行中にエラーを検出した場合には、手続きOOCT
EXCPをよびだし、コンパイルされたコードには戻らな
い。セグメントロッキングがonの場合、OOCT EXCPは
セグメントロックを解除する。
【0132】例 外(異常) 変換された演算コードが、マスクを外した(unmasked)例
外、例えば演算異常、即ちゼロ除数異常等を有している
場合、コンパイルされたコードはインタプリタのサブル
ーチンIC PGMxx をコールする。ここで、xxは01hと
21hとの間のエラーコード番号である。インタプリタ
110は例外を処理して、戻ろうとする。インタプリタ
110が戻れない場合、如何なるセグメントロックも解
除するOOCT EXCPをコールする。
【0133】大域機能の利用 K演算コードの或るもの、例えば文字処理用演算コード
は、多数のターゲット演算コードに変換される。これら
演算コードの多重変換は、コンパイルされたコードがこ
れら演算コードを実行するためにコールする大域機能と
称するサブルーチンに関するセグメントメモリを多量に
使用する。これら大域機能は、それらがコンパイルされ
たコードからコールされ、コンパイルされたコードに戻
るように特別に書かれている点を除けば、丁度、K演算
コードを実行するインタプリタ110のサブルーチンの
ようなものである。5つの演算コードSBE、CC、M
V、TS、及びCについて大域機能がある。実験によれ
ば、大域機能はインタプリタ110のIC OOCTエントリ
ポイントをコールするよりも遥かに高速であり、また演
算コードをターゲット命令に複数回コンパイルする場合
に較べて、遥かにメモリの使用量が少なくなることが示
されている。
【0134】VI. コンパイラ 概観 コンパイル動作の詳細について調べる前に、コンパイラ
104の主要目的及びその構造を十分に理解することが
重要である。コンパイラ104の目的は、現在実行中の
プログラムの多量に実行された部分を最適化ターゲット
コードに変換し、実行に当たって、インタプリタ110
がこのコードを利用できるようにすることである。
【0135】図12はコンパイラ104の全体構造を詳
しく示す。コンパイラ104は上記ブランチロガー11
2からシードを受け取り、コンパイル動作を開始する。
このシードは、現在実行中のプログラムに於いて多くの
ブランチのターゲット(目標)であったオリジナル命令
のアドレスである。このことは、現在実施中のプログラ
ムの多量実行部分を探索するための始点を与える。ブロ
ックピッカ114はこのシードを、ブランチロガー11
2によって与えられるその他の情報と併せて使用し、コ
ンパイルされるプログラム部分を取り出す。
【0136】コンパイル対象のオリジナルコードが選択
されると、それは3つの主要段階を経て実行される。第
1段階では、K演算コードを、コンパイラ104の残り
によって使用される中間言語(IL)に変換する。中間
言語は、IL発生器124によって発生される。第2段
階では、ILに関する種々の解析及び最適な変換が上記
の最適化方法を使用して実施される。この段階は、オプ
ティマイザ(最適化器)126として図示されている。
第3段階、即ち最終段階では、ILを再配置可能なマシ
ン語に変換する。この段階は、最適化コード発生ユニッ
ト118として図示されている。
【0137】コンパイラ104の最終の仕事は、インタ
プリタ110が最適化コードを利用できるようにするこ
とである。セグメントデータ構造は、セグメント導入ユ
ニットを用いて、最適化コードのコピーによって生成さ
れる。次いで、セグメントはOOCTバッファ(図示せず)
内の共用領域に導入される。変換テーブルは最終的には
更新されるので、コンパイルされたKコードに対するイ
ンタプリタ110による如何なるブランチも、この新た
なオブジェクトコードを代わりに使用する。
【0138】この項の残りの部分では、上記コンパイラ
104のそれぞれの段階を追って詳しく説明する。ま
た、その他種々多くの実施段階の詳細については、この
項の終わりで説明する。
【0139】ブロックピッキング コンパイラ104は単一シードアドレスを受けて、コン
パイル動作を開始する。コンパイラは手続き本体らしき
ものを読むまで、オリジナル命令を読み取る。次いで、
コンパイラは104は次の段階であるIL発生器に、こ
のオリジナル命令セットを送る。コンパイラ104が読
んだ命令単位は、基本ブロックと呼ばれ、それ故、この
段階をブロックピッカ、即ちブロックピッカ114と言
う。
【0140】この基本ブロックは、制御が最初の命令に
しか入れず、また最後の命令からしか出られない一連の
命令である。このことは、最初の命令だけがブランチの
ターゲットであって、最後の命令だけがブランチ命令で
あることを意味する。また、このことはブロックの最初
の命令が実行されると、全ての命令が実行されることを
意味する。
【0141】ブロックピッカ 図13は本発明の一実施形態によるブロックピッカ11
4の一例を示す。手続きOOCT ParseFrom はブロックピ
ッカ114を具体化する。ブロックピッカは、一度に1
つの基本ブロックを読取る。基本ブロックは次の5つの
理由の1つに該当するとき終了する。 1.もしパーザ(parser:構文解析系)がブランチ命令
を読み取ると、基本ブロックはそのブランチで終了す
る。 2.もし次の命令が既に構文解析されていると、K演算
コードは、1つのセグメントに一度しか現れないから、
基本ブロックは現在の命令で終了する。 3.もし次の命令が結合点であれば、結合点は基本ブロ
ックの最初になければならないから、基本ブロックは現
在の命令で終了する。 4.もし現在の命令が演算対象となる因子(ファクタ)
でって、命令の代わりにデータを伴うことが出来ると、
基本ブロックは現在の命令で終了する。 5.もし現在の命令が違法命令であれば、基本ブロック
は現在の命令で終了する。
【0142】ブロックピッカ114は各ブロックを読ん
だ後、そのブロックの終わり方によって、次に取るべき
動作を決める。以下、これら可能な動作をテーブル5に
示す。
【0143】
【表10】
【0144】一例を図13に示す。ブロックピッカ11
4はシード命令、即ちLB命令で動作を開始する。その
命令は終了命令のブランチ又は因子でもないので、ブロ
ックピッカは次の命令に進む。その命令は、条件付きブ
ランチであるTH命令である。ブロックピッカ114
は、それが条件付きブランチであるため、それを読むの
を停止する。次に、ブロックピッカはLH及びLF両命
令に於いて新たなブロックの読取りを継続する。ブロッ
クピッカがSVC命令を読むと、SVCは終了命令の因
子であるから、そのブロックを終了する。ブロックピッ
カはGO命令を読むと、GOはブランチ命令であるか
ら、そのブロックを終了する。L8命令はブランチ変換
先命令であるから、ブロックピッカはL8命令に於ける
読みを継続する。ST8命令を読んだ後、ブロックピッ
カ114は次の命令を既に読んであるので、そのブロッ
クを終了する。
【0145】ブロックピッカ114が読む命令の数には
上限がある。この制限の目的は、コンパイラ104が変
換元命令のコンパイルの間に、メモリを使い果たすのを
防止するためである。この制限は、OOCT trace.c の定
数 MAX KINST NUM によって設定される。現在の例で
は500に設定されている。
【0146】ブロックピッカ114が命令を読もうとす
るとき、ページフォールトが起こることがある。もしこ
のページフォールトが起きると、ブロックピッカ114
は現在のブロックを読むことを停止しするが、まだ試し
てない何れかのブランチ変換先から読む動作を継続す
る。このことは、たとえブロックピッカが、シードから
到達できる全ての命令を解析できない場合でも、コンパ
イラ104がセグメントを生成することを可能にする。
【0147】ブロックレイアウト ブロックピッカとなる基本ブロックを選択した後、手続
きOOCT GenerateILをコールし、コンパイラ104の残
りが使用するIL命令を生成する。この時、ブロックの
順序を再配置することが出来る。これはブロックレイア
ウトを呼ばれ、フォワード条件付きブランチを取らない
場合には、Pentium Pro は高速で走行するから、コンパ
イラ104が、Pentium Pro プロセッサにとって更に良
いコードを作成する助けとなる。
【0148】図13の例について考えてみる。この例は
1つの条件付きブランチ、即ちTH命令を有している。
オリジナル命令に於いて、フォールスルー基本ブロック
はLHで始まるブロックであり、変換先ブロックはLF
で始まるブロックである。条件付きブランチが時間の7
5%をを占める場合、LF基本ブロックをフォールスル
ー位置に置き、LH基本ブロックをブランク取り込み位
置に置けば、条件付きブランチは更に速く走行する。
【0149】OOCT GenerateILはブランチログの情報に
従ってブロックを配置する。OOCT GenerateILは可能な限
り、条件付きブランチの最も一般的なサクセサをフォー
ルスルー位置に置いて行く。この手続きによって、コン
パイラ104の最適化段階に渡されるIL命令のリスト
が作成される。
【0150】中間言語(IL)の発生 この項では、K演算子に関するコンパイラ104の中間
言語(IL)表現の発生過程を説明する。ILが如何に
発生されるかを直接説明する前に、ILの概要を述べ、
ILの理解に重要なデータ構造を説明する。
【0151】ILの概容 コンパイラ104の主な解析及び変換パスは、特別なマ
シン独立命令セットである中間言語を用いて実施され
る。中間言語の使用は、2つの主な理由から、標準的な
コンパイラ104の技術である。その理由の第1は、I
Lが解析及び変換を簡単にする典型的な構造を有してい
ること。その第2は、ILによって多くの異なる変換元
言語が同じ最適化及びコード発生段階を用いることがで
き、また異なるプラットフォーム対する再対象化を容易
にするからである。
【0152】OOCTが使用するIL(以下、単にILと言
う)は、ここではテーブル6に掲げた40の演算コード
から構成される。これらの命令は3つの主なカテゴリに
分類される。その第1は、標準マシン演算コードへの簡
単なマッピング機能を有するADD及びLOAD等の機
能演算コードである。第2は、LABEL及びCGOT
O等の制御の流れを扱う演算コードである。そして最後
は、バックエンドによって発生されるコードに直接に対
応しない、コンパイラ104が特別なマーカとして使用
する多くの特別コードである。これら特別マーカコード
については、別の項で説明する。ILは仮想マシン(仮
想計算機)を表すから、更に機能が要求される場合はI
Lに対する他の演算コードの追加は簡単である。
【0153】ILは命令から構成され、それぞれ命令は
演算コードの1つ、形式、及び多数の擬似レジスタ引数
を特定する。コンパイラ104が支持する形式は符号付
及び符号なしの8ビット、16ビット及び32ビット値
である。SET演算コードによって用いられる即時値、
及びLOAD演算コードによってメモリからロードされ
る値は別として、全ての引数は擬似レジスタに渡され
る。この擬似レジスタは、単にILマシンのレジスタで
ある。コンパイラ104は任意の数の擬似レジスタを許
容し、これらレジスタはそれぞれ所定のサイズ(例え
ば、16ビット)を有している。各擬似レジスタは特定
の記憶場所に直接対応している。OOCTに関して、これら
記憶場所は、個々の領域のOOCT特別部分にある。記憶場
所への擬似レジスタのマッピングには2つの利点が有
る。その第1は、ILを連続的に流す。共通使用の値を
一時的にロードし、それらをメモリに戻して記憶する、
と言ったIL動作は必要がなくなる。第2に、コンパイ
ラ104は共通使用の値をマシンレジスタに頻繁に割り
当てることが出来るので、余分なロード又は記憶動作を
省くことが出来る。
【0154】
【表11】
【0155】
【表12】
【0156】特別IL演算コード OOCTのILは特別なオブジェクトを持った幾つかの演算
コードを含んでいる。殆どのIL演算コードは、バック
エンドで発生されるコードに対応する。その代わり、こ
れら特別命令は、何か特別なことが起きたことをコンパ
イラ104に知らせる信号として作用する。ILは次の
特別演算コード、ENTRY 、SYNC、EXTMOD、及びOASSIGN
を含んでいる。この項では、これら演算コードの最初の
3つについて説明する。OASSIGN については、上記テー
ブルで十分に説明されている。
【0157】ENTRY 演算コードは<制御がフローグラフ
に入れる点をマークする。OOCTによって発生されるコー
ドは、外部結合点を表す複数の外部エントリポイントを
有することができる。各外部エントリポイントは、対応
するENTRY IL命令を有している。ENTRY 命令はコードの
終わりで発生し、その直ぐ後にコードの主本体内のラベ
ルにジャンプするGOTO命令が続いている。ラベルに直接
ジャンプする外部エントリジャンプを持つ代わりにエン
トリを使用する理由は、ENTRY とラベルへのジャンプと
の間に、コード発生器によるフィル(fill)挿入を可能に
するためである。
【0158】図14は、ENTRY 命令とGOTO命令との間
に、フィルを挿入した2つの外部エントリポイントを持
つコードの概略を示す。即ち、図14は本発明の実施形
態によるエントリの例を特に示した図である。
【0159】SYNIC 演算コードは、擬似レジスタの1つ
の範囲がメモリにフラッシュされたことを保証するのに
用いる。特に、OOCTはSYNCを用いて、インタプリタ11
0が全てのKレジスタを見出せると期待する記憶場所
に、全てのKレジスタがあることを保証する。SYNCはレ
ジスタのアロケータに対するディレクティブ(指示)と
して作用し、修正されたマシンレジスタにある擬似レジ
スタをフラッシュすべきことを示す。また、SYNCは、K
レジスタを修正する効果しか持たないコードを除去する
デッド(不動作)コードから、コンパイラ104を保護
する如何なるライブ(生)データも使用する。
【0160】EXTMOD演算コードは、擬似レジスタが修正
されたが、コンパイラ104はその修正の詳細は持って
いないことを示す。従って、EXTMODは2つの効果を有す
る。その第1は、定数畳込み、又はコピー伝播等の最適
化に対する障壁として作用する。第2には、擬似レジス
タの次の使用前に、コンパイラ104のレジスタアロケ
ータにフィル挿入を実行させる。OOCTに於いて、EXTMOD
命令はインタプリタ110にコールバックした後、どの
Kレジスタが修正されたかを指示するのに用いられる。
【0161】ILデータ構造 ILがどの様にしてK演算コードから構成されるかを説
明する前に、コンパイラ104で使用される主なデータ
構造に親しんでおくのは有効である。
【0162】ZONE(compiler/zone.[h,c]) コンパイラ104に於けるメモリの割付は、ZONEと称す
る抽象化(論理化)によって取り扱われる。ZONE抽象化
は効率的なメモリの割付方法であって、一挙に割付解除
もできる。ZONE抽象化によって割付は高速化すると共
に、ZONEの破壊は用いた全てのメモリを再利用するの
で、プログラマはメモリのリークを心配する必要がな
い。
【0163】コンパイラ104に於いて、ZONEは生成さ
れ、メモリを割り付ける全てのコール(即ち、通常 mal
loc calls )は、初期に生成されたZONEを用いてZONE A
LLOCをコールする。コンパイラ104が実行されると、
コンパイラは、全ZONEを割り当て解除するZONE Destro
y をコールする(即ち、全てのメモリの割当解除と同等
のことをする)。
【0164】ZONEの基本的実施では、メモリの“チャン
ク(chunk :大きな塊)”を使用する。例えばZONEを生
成するとき、サイズが0x2000バイトのブロックをマロッ
ク(malloc)する。ZONE Allocに対するコールは、メモ
リのその“チャンク”を使い切るまで使用する。最初の
0x2000バイトでは、ZONE Allocの要求に応える余裕が
ない場合には、新たな“チャンク”が生成される。そし
て、ZONE Allocはその“チャンク”を使い切るまで使
用する。
【0165】コンパイラ104の場合、メモリは全て事
前に割り付けられているため、事態は些か複雑になり、
そのためマロックをコールすることが不可能である。其
処で、代わりとして特別なZONEアロケータユニット(即
ち、ZALLOCユニット)を使用する。ZONEアロケータは大
きなメモリプール(例えば、0x10000 バイト)によって
初期化される。この初期化によって、メモリはZONEが割
付に使用する同サイズのチャンクに分割され、自由なチ
ャンクのリストが保持される。従って、“マロック”要
求は、メモリの自由な“チャンク”を返すZALLOC get
chunk に対するコールによって置き換えられる。同様
に、ZONE Destroy の“free”へのコールは、ZALLOC
free chunk へのコールによって置き換えられる。現在
の実施形態では、ZONE Alloc が扱う最大割付サイズ
は、初期チャンクサイズである。この制限は、単に1つ
のサイズを扱う代わりに、可変サイズの割付を扱うよう
にZALLOCユニットを変更することによって、“固定化”
することができる(この種のアロケータの例について
は、セグメントアロケーションユニットを参照)。ここ
で上記のような変更をしなかったのには、2つの理由が
ある。その第1は、可変サイズアロケータは更に複雑で
あって、記憶領域の断片化等の問題を生成するからであ
る。第2は、チャックサイズは不利な影響なしに大きく
できるものではないからである。チャックサイズが十分
に大きい場合、もしコンパイラ104がメモリを越えて
走っても、コンパイラ104はチャックサイズより大き
い単一割付を要求するだけである。従って、可変サイズ
の割付を扱うためにZALLOCユニットを一般化することに
何ら現実的利益はない。
【0166】IL CTXT(compiler/oc common/include/i
l internal.h) コンパイラ104は、コンパイル動作の現状トラックを
保持する単一データ構造IL CTXTを維持している。この
IL CTXTデータ構造は、現在コンパイルされているコー
ドを表すIL NODEの連結リストに対するポインタを記憶
している。また、IL CTXTは、ZONE及びIL FRAME 構造
等、コンパイル処理を通して用いられる種々のフィール
ドを数多く記憶している。コンパイラ104の各段階
は、引数としてのIL CTXTを有し、そのデータ構造に対
して、例えば多くの段階がIL NODEを追加又は削除する
等の修正を行う。
【0167】IL NODE(compiler/oc common/include/i
l internal.h) IL NODEデータ構造は、K演算コードから変換されるコ
ンパイラ104の中間言語の単一抽象命令を表す。
【0168】K演算コードから発生されるIL NODEは、
二重連結リストに保持される。このリストの最初と最後
の要素に対するポインタは、IL CTXTに保持される。こ
のリストはコンパイラ104が現在動作しているコード
を表す。コンパイラ104の各パスはこのリストを横断
し、リストのコードに関する情報を発生するか、又はリ
ストを変換する。
【0169】各LI NODEは命令の基本性質を示す演算フ
ィールド“op”を含んでいる。また各LI NODEは命令
のオペランドを表すオペランドフィールドのベクトルを
含んでいる。オペランドフィールドの解釈は命令の演算
形式に依存している。演算及びオペランドフィールドに
加えて、全てのIL NODEは、全てのノード形式によって
共用される多くのフィールド、例えばノードを変換する
命令のK pc、ノードのために発生されたターゲット
マシンコードの開始アドレス等を含むんでいる。
【0170】ノードに於けるオペランドフィールドの数
は、演算形式によって変化する。事実、場合によって
は、同じ形式の2つのノードが異なる数のオペランドを
持つこともある。例えば、コール動作のためのオペンラ
ンド数は、ターゲット方法に対してパスされた引数の数
に依存する。このオペンランド数の変化は、IL NODEが
一貫したサイズではなく、オペランドベクトルがIL NO
DE構造に於ける最終項であることを意味する。オペラン
ドベクトルは一エントリ長さであると宣言され、そして
IL NODEは、共通フィールド及びオペランドフィールド
に必要な全記憶量を計算/割り付けし、割り付けられた
メモリをIL NODEポインタにキャストすること(castin
g) によって割り付けされる。
【0171】全てではないが殆どの場合、各オペランド
は、オペランドベクトルに関して、2つの連続したエン
トリを実際に要求する。オペランドは、擬似レジスタの
エントリオペランド[i] に見出される。もしオペランド
が変換先オペランドであれば、オペランド[i+1] は、こ
の演算によって定義される値を用いるノードリストを指
し、もしオペランドが変換元オペランドであれば、オペ
ランド[I+1] は、値に関する定義を含むノードリストを
指す。
【0172】もし演算が変換先オペランドを持っていれ
ば、そのオペランドは常にオペランド[0] 及びオペラン
ド[1] に記憶される。
【0173】もしオペランド[i] が変換元(入力又は使
用)オペランドであれば、オペランド[i+2] もまた変換
元オペランドである。即ち、全ての変換元レジスタはオ
ペランドリストの終わりに来なければならない。
【0174】ノード中のオペランドフィールドには直接
アクセスはできない。むしろ、アクセスはILOP xxx(N)
形の大きなマクロセットによって行われる。ここで、N
はIL NODEに対するポインタである。これらマクロは、種
々の命令形式全てに関して、如何に種々のオペランドが
オペランドベクトルに記憶されているかを知っている。
【0175】ノード形式のいくつかを以下に示す(この
リストは、全てを含むものではない)。
【0176】単項演算 これらは、割当を含む種々の簡単な単項(1変換元オペ
ランド)命令を表す。 形式:演算の形式 ILOP DEST(N) 結果が向かう変換先レジスタ ILOP DEST use(N) 変換先レジスタを使う命令のリスト ILOP SRC(N) 変換元レジスタ ILOP SRC def(N) 変換元を定義する命令のリスト
【0177】2進演算 多くの2進(2変換元オペランド)命令はこのカテゴリ
によって表される。 形式:演算の形式 ILOP DEST(N) 結果が向かう行く先レジスタ ILOP DEST use(N) 変換先レジスタを使う命令のリスト ILOP SRC1(N) 第1変換元レジスタ ILOP SRC1 def(N) 第1変換元を定義する命令のリスト ILOP SRC2(N) 第2変換元レジスタ ILOP SRC2 def(N) 第2変換元を定義する命令のリスト ILOP DIVEX(N):このオペランドは、DIV 及びREM 演算
にのみ現れ、もしゼロによる除算例外が在ればその開始
を表すノードを含む(単独)リストを指す。
【0178】LABEL LABEL命令は、コード内のポイントを表し、このポ
イントに向かってブランチは分岐する。この命令は、以
下のオペランドを含む。 ILOP LABEL(N) ラベルを識別する固有の整数 ILOP LABEL refs(N) このラベルを参照する命令のリスト ILOP LABEL live(N) 何れのレジスタがこのレベルで活性であるかを示すBITS
ET ILOP LABEL rd(N) このラベルに到達する各レジスタの定義リストのベクト
ル ILOP LABEL misc(N) このレベルに関する専用情報(private info)を掛ける(h
ang)ための何れかのパスの場所
【0179】GOTO GOTO命令は、ラベルへの無条件ブランチを表す。 ILOP LABEL(N) ターゲットラベルを識別する固有の整数 ILOP LABEL refs(N) このターゲットLABEL 命令の単独リスト
【0180】CGOTO CGOTO命令は、ラベルへの条件付ブランチを表し、
GOTO命令と同じオペランドを含むと共に、幾つかの
追加オペランドを含む。 ILOP COND(N) レジスタは分岐するための条件を含んでいる。このレジ
スタはブール形式の値を含む。この分岐は条件がTRUEで
あるときに行われる。 ILOP COND defs(N) このレジスタを定義する命令のリスト ILOP COND live(N) 分岐が行われない場合、何れのレジスタが活性であるか
を示すBITSET
【0181】特殊な命令マクロILOPに加えて、何れ
の命令にも使用できる多くの汎用マクロがある。 ILOP HasDEST 命令が変換先レジスタを有していれば、TRUEを返す。こ
の場合、ILOP DEST及びILOP DEST use マクロは、こ
の命令に関して使用できる。 IL OP START 、 IL OP DONE 、IL OP NEXT 命令の変換元レジスタを介したくり返し動作に用いられ
る。IL OP START は第1のそうした変換元レジスタを
参照して、IL OP INDEX に帰り、IL OP DONEはIL
OP INDEX をテストして、変換元レジスタを参照したか
否かを調べ、IL OP NEXTは次の変換元レジスタに進むの
に使用される。 IL OP 、IL OP def これらは、与えられたIL OP NEXTに対して特定の変換
元レジスタ及びそれに関する定義リストを返す。これら
5つのマクロは、一般に、以下の形のループで使用され
る。 for(op=IL OP START(n);!IL OP DONE(n,op);o
p=IL OP NEXT(n,op)) }use IL OP (n,IL FRAME(co
mpiter/oc common/include/il frame.h, compiler/
OOCT Frame.c)。
【0182】IL FRAME データ構造はコンパイルされた
コードが実行する文脈に関する情報を与えるのに使用さ
れる。フレームは、各擬似レジスタに関するサイズ及び
記憶場所、擬似レジスタが他の擬似レジスタと如何に重
なり合うか、レジスタアロケータで使用するのに何れの
マシンレジスタが正当であるかを決める。更にIL FRAM
E 構造はコードをコンパイルする上で、Cスタックフレ
ームが必要か否かを決める。OOCTでは、Cスタックフレ
ームは使用しない。
【0183】コンパイラ104では、IL FRAME 構造は
OOCT Frame.c の機能によって初期化される。これらの
機能は、Kレジスタ及びPSW場所に対応する各擬似レ
ジスタを準備する。更にコンパイラ104の一時的擬似
レジスタは、インタプリタ110の作業空間領域に対応
するように設定される。また如何にKレジスタが重なり
合うかについての情報も準備される。
【0184】NL LIST(compiler/oc common/[include,
src]/nl nodelist.h) コンパイラ104がIL NODEのリストを使用する多くの
場所で、NL LISTデータ構造は、これらノードリスト操
作のための抽象化(論理化)を与える。例えば、上述の
UseDef解析は、与えられた定義を用いるIL NODEのリス
ト、及び与えられた使用に対する定義であるIL NODEの
リストを生成する。NL LISTは簡明であって、ノードリ
ストに関する生成、加算、削除、検索、並びに反復等の
能力を与える。
【0185】K演算コードのIL変換 上述のブロックピッカ114が、何れのK演算コードを
コンパイルするかを選択した後、K演算コードのILへ
の変換は3つの主な段階を含んでいる。第1の段階は、
そのコードが基本ブロックに対して発生される順番を決
める段階である。ブロックレイアウト法については先に
述べた通りである。第2段階は、K演算コードの基本ブ
ロックがブロックレイアウト法によって選択された時、
その演算コードを調べて、それらが“論理演算コード”
と組合せ可能か否かを決定する段階である。最後の第3
段階は、K演算コード及びその引数に基づいて、IL発
生手続きをコールする段階である。
【0186】Opcode Combination(compiler/ooct opco
de combine.c) K演算コードの幾つかのシーケンスは、単一の“論理”
コードとして書くことができる。例えば、2つのTR命
令からなるシーケンスを用いて、32ビットレジスタ対
の値を、それら命令の各半分をテストすることによって
テストすることにした。これら2つのTR命令は、Kア
ーキテクチャでは利用できない論理32ビットのテスト
演算コードを表す。IL形成手続きが2つのTR命令に
関して生成するコードは、多かれ少なかれ、このパター
ンが認識された場合に生成されるコードに較べて能率的
である。幸い、OOCTはソフトウエアであるから、新たな
演算コードを加え、パターンを認識する特別なユニット
を具備し、能率的なIL発生を代行させることは容易で
ある。
【0187】与えられた演算コードに対して標準ILを
発生する前に、OOCT opcode combine ルーチンがコー
ルされる。このルーチンは、定義された全てのパターン
について、“論理”演算コードを使用することが適当か
どうかを繰り返し試す。現在、2つのパターンだけが定
義されているが、追加の組合せを定義することは簡単で
ある。パターンの1つが一致すれば、その論理演算コー
ドのIL形成手続きは、IL命令の生成に使用され、OO
CT opcode combine は通常のIL形成手続きをコール
する必要がないことを示す“真”を返してくる。
【0188】IL形成手続き(compiler/ooct il buil
d.c) 各K演算コード対して、特定のIL形成手続きがある。
IL形成手続きは2種類の引数、命令のアドレス、及び
オリジナル命令のフィールドである引数リストを採る。
また、IL形成手続きは、ILを発生する間に、擬似レ
ジスタ及びラベルのトラックを保持するのに使用される
共用大域変数global gen state を使用する。各IL
形成手続きは、IL命令をIL CTXT構造に加える。コン
パイル時に検出される例外のチェックを取り扱う、数少
ない特別な場合を除けば、ラベルの識別子(ラベルがも
う1つ別のオリジナル命令のターゲットでなければ、ラ
ベルは最適化過程で早期に削除される)は、一般に最適
化を実施しようとせず、それを後段のコンパイラ104
の段階に残すので、全てのIL発生ルーチンは、オリジ
ナル命令のアドレスを有する LABEL IL NODE を生成す
る。
【0189】IL形成手続きの殆どは、コードが発生さ
れるIL及びオリジナル命令が一旦分かれば簡単であ
る。このコードの理解を助ける幾つかのヒントがある。
【0190】ILの形成は与えられた演算コードのコン
パイル動作がデバッギングに際して、容易にoffでき
るように設計されてきた。これは主として、REALLY CO
MPILE マクロ及び COMPILE SECTION XXマクロによっ
て制御される。REALLY COMPILE がoffされると、全
てのIL形成ルーチンは、簡単にインタプリタ110へ
のコールバック(又はジャンプ)を形成する。 COMPILE
SECTION X がoffされると、区画番号Xの演算コ
ードに対する全てのIL形成ルーチンは、簡単にインタ
プリタ110へのコールバック(又はジャンプ)を形成
する。
【0191】ILには所定の形式があるから、正しい形
式を持った正しいサイズの擬似レジスタを使うことが重
要である。例えば、16ビットの値を32ビットのレジ
スタにロードするには、先ず初めに16ビットロードを
16ビットレジスタに対して実施し、次いでCVT演算
を用いて16ビットの値を32ビットの値にキャストす
る(LOAD CVT32 マクロがこの動作を行う)。
【0192】インタプリタへのコールバック又はジャン
プを挿入する際には何時でも、インタプリタ110がK
レジスタに対して正しい値を持っていることを確かめる
ため、SYNCを追加しなければならない。コンパイルされ
たコードは、ESIレジスタの値をそのままに保とうと
はしない(事実、それは他の値を保持するのに用いられ
る)。それ故、発生したコードはインタプリタ110を
コール又はそれにジャンプする前に、正しい値をESI
に入れなければならない。またコールバックをする場
合、コードはコールバックによって修正された全ての擬
似レジスタに対するEXTMOD命令を含んでいなければなら
ない(MODIFIES REG マクロがこれを実行する)。
【0193】例外条件(例えば、オーバフロー)を扱う
コードはインラインには設けられていない。その代わ
り、コードはIL命令リストの終わりで発生される。斯
うして共通ケースをフォールスルーとしてコンパイルす
ることができ、発生されたコードの性能が典型的に改善
される。
【0194】エントリポイント、割り込みポイント ブロックピッカ114によって選択された各K演算コー
ドに対して発生されるILに加えて、ILはエントリポ
イント、割り込みチェックに対しても発生される。
【0195】最適化動作をより多く起こすために、全て
のブランチ変換先は外部エントリポイントとして含まれ
てはいない(外部エントリポイントは最適化動作に対し
てバリアとして作用する)。特に、外部エントリポイン
トの中へ作られる変換先だけが、セグメントの外側から
のジャンプの対象となる変換先である。与えられたセグ
メントをコンパイルするとき、何れの変換先がブランチ
ログに於るこの基準に適合するかについての部分情報は
利用可能である(ブランチログに関する情報については
先の説明を参照)。コンパイラ104はこの情報を使っ
て、何れの基本ブロックが外部エントリを持っているか
を選択する。これらエントリの各々に対して、ENTRY IL
NODEは、エントリオリジナル命令に対して発生された
ILにジャンプするGOTO IL NODEと共に発生される。
【0196】OOCTスペックは、コンパイラ104が如何
なるループにも割り込みチェックを挿入すべきことを指
示する。ILを発生する際、セグメント内の逆方向ブラ
ンチに対し計算されたジャンプ命令以前に、割り込みチ
ェックを入れることによって、保守的概算を行う。割り
込みチェックは、基本ブロックの最終オリジナル命令に
対するラベルの後に入れられる。他の例外条件の場合、
割り込みのためのILコードはラインから発生されるか
ら、通常の場合は条件付きブランチの簡単なフォールス
ルーである。
【0197】コンパイラのミドルエンドに関する説明 ミドルエンドの概容 コンパイラ104の“ミドルエンド”の主な目的はコー
ド発生の段階で、更に良好なコードが発生するように、
ILの品質を改善することである。コンパイラ104の
残りの部分は、ILの解析又はILを修正する変換の何
れか1つを実施する一連のパスとして構成される。これ
らのパスの間には或る依存性があるが、それらは複数回
適用できる。この点から、コンパイラの残りの部分はK
命令について何ら特別な情報を持たず、ただILを処理
するだけである。
【0198】この項の残りの部分を以下のように分け
る。第1部では、OASSIGN 挿入を実施する段階について
述べる。また、第2部では、コンパイラ104の解析パ
スについて述べる。最終部では、コンパイラ104の変
換パス(主な最適化を実施する)について述べる。
【0199】OASSIGN 挿入(compiler/ooct add over
lap defs.c) 図15はOASSIGN 挿入の一例を示す。OASSIGN 演算コー
ドは、擬似レジスタ間のエイリアシング(aliasing)を明
確にする特別なマーカ命令である。OOCTに於いて、或る
K演算コードは16ビットのレジスタを使用し、一方で
は、他の演算が16ビットレジスタとは別の32ビット
のレジスタを使用するので、OASSIGN に対する必要性が
生じてくる。OOCTでは、16ビット及び32ビットのレ
ジスタ全てに対して別々の擬似レジスタが使用される。
それ故、擬似レジスタの或るものは、互いに暗黙の重な
りを形成する。その結果、2つの問題が起こってくる。
先ず、第1の問題は不正確な変換を実行する最適化パス
の問題である。各擬似レジスタの定義に関して、コンパ
イラ104はその定義を使って命令のトラックを保持
し、そして各擬似レジスタの使用に関しては、コンパイ
ラ104はその定義のトラックを保持する。この情報は
use/def 情報と呼ばれる。コンパイラ104は、例えば
Constant Foldingパス等のパスではこのuse/def 情報を
使用する。擬似レジスタが互いに別物である場合には、
use/def 計算とその情報を使うコンパイラ104のパス
が要求されるため、事態は更に複雑となる。擬似レジス
タの重なりから起こる第2の問題はレジスタの割当問題
である。レジスタアロケータが2つの重なり合う擬似レ
ジスタを同時にマシンレジスタに割り当てる場合、1つ
のレジスタに対する修正は他のレジスタを無効にするこ
とを要求する。一般に、情報トラックの保持は非常に困
難で、不必要な複雑さを惹起する。
【0200】これらの難問に取りくみ、それらをコンパ
イラ104の複雑さに加える代わりに、コンパイラ10
4が問題を無視できるような、特別マーカのOASSIGN 命
令の挿入方法が設計された。この方法によれば、IL発
生直後、特別コンパイラはこのOASSIGN を挿入する。こ
のコンパイラ104のパスの後、他の解析パスは擬似レ
ジスタと重なりを持っていないと仮定することができる
(use/def 解析に関して)。更に、レジスタ割り当ては
OASSIGN を用いて全く容易に取り扱われる。レジスタア
ロケータがOASSIGN に到達すると、アロケータはその定
義に於いて変換元を除いて、OASSIGN の後に変換先を入
れる。この方法は別のメモリを使用して、重なり定義の
如何なる使用も、正しい値を使用していることを保証す
る。
【0201】OASSIGN 挿入は2つの段階で取り扱われ
る。その第1はUseDef解析の特別バージョンが実行され
る段階である。UseDefのこのバージョンは擬似レジスタ
の重なりに気付いて、重なり擬似レジスタを含む使用リ
スト及び定義リストを生成する。コンパイラ104の残
りの部分は、重なり擬似レジスタを含むuse/def リスト
を取り扱うようには用意されていないため、Use/Def に
対するこのオプションは、一般には使用されるべきでは
ない。この解析が行われた後、手続きOOCT Add Overlap
DefsはOASSIGN を実際に挿入する。OASSIGN は重な
り定義(即ち、使用擬似レジスタと重なる擬似レジスタ
を定める定義)を持つ全ての使用、及びラベルに於ける
重なり到達定義に関して挿入される。
【0202】図15はOASSIGN が挿入される場合の例を
示す。この例では、擬似レジスタGRPAIR1とGR1 が重な
り合っているので、コードの第1ラインのGRPAIR1 に対
する割付は、GR1 の暗黙の修正である。OASSIGN はこれ
を明確にする。
【0203】解析パス UseDef(compiler/oc common/src/oc usedef.c) 与えられた定義の使用、及び与えられた使用に対する潜
在的定義の計算は、最も基本的なコンパイラ104解析
の1つである。全てのコンパイラ104の最適化パスは
use/def 情報を使用する。各IL命令は(a dest)に書き
込まれる1つの擬似レジスタ引数、及び(a src) から読
み込まれる1つ又はそれ以上の擬似レジスタ引数を有し
ている。Use/Def 解析の後、各destはその解析に関連
し、その値(du chainと呼ぶ)を使用する全IL命令に
対するポインタを記憶するリストを有する。同様に、各
src はその解析に関連し、その値(ud chainと呼ぶ)を
定義する全IL命令を記憶するリストを有する。use/de
f 情報を計算する方法を以下に述べる。この方法は、固
定点への到達を試みる反復方法(即ち、繰り返しても変
化が起こらなくなるまで繰り返す方法)である。
【0204】如何なるラベルに於いても、到達定義に変
化が起こらなくなるまで、以下のステップを繰り返す。
regdefs (擬似レジスタによって指標付けしたNL LIST
s 配列)に於ける各擬似レジスタに関する定義リストを
クリヤする。静的プログラム順にIL NODEs を繰り返
す。もし命令が擬似レジスタを使用していれば、擬似レ
ジスタの定義をregdefs からオペランドのud chainにコ
ピーする。もし命令がブランチであればregdefs をブラ
ンチのLABEL に記憶されている到達定義と組み合わせ
る。到達定義の変更によって、全ループが繰り返され
る。もし命令がLABEL であれば、regdefs を既にLABEL
に在る到達定義と組み合わせる。もし命令が擬似レジス
タを定義していれば、regdefs の定義リストがこの命令
だけを含むようにセットする。もし命令が無条件ブラン
チであれば、regdefs 配列を次のLABEL に記憶されてい
る到達定義のセットに変える。これは、次の理由から実
行される。即ち、命令はそれらの静的順に処理され、そ
して無条件ブランチへの到達定義は、その静的サクセサ
に到達する定義とは同じではないからである。
【0205】ライブ変数解析(compiler/oc common/src
/oc usedef.c) もう1つの解析の形は、ライブ変数情報に対するもので
ある。ライブ変数解析は主にレジスタの割付に用いられ
るが、誘導変数変換及びデッドコード削除にも使用でき
る。擬似レジスタは、もしそれが再定義される以前に実
行経路に沿って用いられる場合には、プログラムの特定
の点に於いてライブ変数と考えられる。またライブ変数
解析は与えられた擬似レジスタの最終使用をマークする
(擬似レジスタの再定義以前に、擬似レジスタが使用さ
れる可能性のある実行経路がなければ、その使用が最終
使用となる)。ライブ変数情報の計算に用いる基本的な
方法を以下に述べる。この方法は固定点に到達するま
で、コードに関する逆方向パスを繰り返し実行する。
【0206】如何なるラベルに於いても、到達定義に変
化が起こらなくなるまで、以下のステップを繰り返す。
ライブ変数をクリヤする(擬似レジスタのbitset)。逆
静的プログラム順にIL NODEs を繰り返す。もし命令が
擬似レジスタを使用していてかつそれを最終使用として
マークする以前にライブでなければ、擬似レジスタのビ
ットをライブ変数にセットする。もし命令がブランチで
あれば、ライブ変数をブランチのLABEL に記憶されてい
るライブレジスタと組み合わせる。ライブレジスタの変
更によって、全ループが繰り返される。もし命令がLABE
L であれば、ライブ変数を既にLABEL に在るライブ擬似
レジスタと組み合わせる。もし命令が擬似レジスタを定
義していれば、擬似レジスタをライブ状態からクリヤす
る。もし命令が無条件ブランチであれば、ライブ状態を
クリヤする。これは、次の理由から実行される。すなわ
ち、命令をそれらの逆静的順で処理するため、無条件ブ
ランチに於けるライブ変数はそのサクセサのものとは同
じではないからである。
【0207】レジスタの割付(compiler/oc common/src
/oc regalloc.c) コンパイラ104に於けるレジスタの割付は二段階で実
施される。第1段階ではコードの解析を行って、ターゲ
ットマシンの高レベルモデルに基づいて一組の推奨レジ
スタ割付セットを決定する。第2段階では、物理レジス
タを使用するために、第1段階に於ける解析結果を更に
抽象性の少ないマシンモデルと共に用いて、実際にコー
ドを修正する。この項では、第1段階について説明す
る。
【0208】レジスタ割付方法はグラフ着色を用いる伝
統的技術に基づいて行われる。“グラフ”のノードは、
重なり合うライブ範囲の間にあるエッジを持つ擬似レジ
スタのライブ範囲である。N個のカラーによるグラフ着
色は、各ノードに対してN個のカラーの1つを割り当て
る。従って2つの連結したノードが同じカラーを持つこ
とはない。もしライブ範囲のグラフがN個のカラーで着
色できれば(N:利用可能な物理レジスタの数)、レジ
スタは各ライブ範囲に割り付けられる。しかし、不幸な
ことに、このグラフ着色にはNP困難(NP-hard) 問題
(即ち、それは指数的時間を要求する)があるため、実
際には、発見的(試行錯誤的)方法が用いられる。
【0209】レジスタ割付は複雑な多重ステップ処理で
構成されている。これらのステップを以下に詳しく説明
する。
【0210】1.独立ライブ範囲の分割、及びREGINFO
構造の割付 これらの処理は、ComputeRegInfo機能によって行われ
る。この機能は各擬似レジスタを独立なライブ範囲に分
割し、その各々に対してREGINIFO構造を割り当てる。RE
GINFO 構造はレジスタ割付に用いられる問題のライブ範
囲に関する情報を保持するのに使用され、最終的には
“ターゲット”レジスタ(ライブ範囲に割り当てられる
物理レジスタ)を保持する。擬似レジスタライブ範囲
(論理構造)とREGINFO 構造との間には1対1の対応が
あるので、REGINFO 項はライブ範囲とデータ構造の両者
を参照するのに屡々使用される。
【0211】ComputeRegInfoは、REGINFO 構造を割り付
ける際の殆ど副次的効果としてライブ範囲の分割を行
う。ComputeRegInfoは、未だREGINFO を持たない定義か
ら始めて、それに対して新たなREGINFO を生成し、次い
で繰り返しその使用の全て及びそれらの定義の全て(及
びそれらの使用の全て...)を調べて、新たなREGINF
O を到達可能な全ての定義及び使用と組み合わせる。
【0212】一旦、全てのREGINFO が生成されると、そ
れらは“簡単な”ものと、“複雑な”ものとに分けられ
る。“簡単な”REGINFO は、正確に1つの定義と1つの
使用を有している。使用は定義の直ぐ後に続く。使用は
BINOP (ターゲット特別要件)の第2オペランドではな
い。
【0213】その他のREGINFO は全て複雑である。各RE
GINFO には固有のIDが与えられる。複雑なREGINFO
は、 [0..c->ri complex)の範囲にあり、簡単なもの
は、[c->ri complex..c->ri total)の範囲にある。こ
の分割の目的は、全てのREGINFOにBITSETとして記憶さ
れているコンフリクト(競合)マトリックスを保持する
メモリを節約することである。
【0214】2.コンフリクトと互換性の計算 次のステップは、REGINFO 構造のコンフリクトグラフを
計算するステップである。2つのREGINFO は、それらの
ライブ範囲が重なり合うとコンフリクトを起こす。しか
し、もしそれらがコピーで接続されていれば互換性を持
つ。コンフリクトするREGINFO は同じレジスタには割り
当てられない。何故なら、それらは同時に生きているか
らである。2つの互換可能なREGINFO は出来れば同じレ
ジスタに割り付けすべきである。そうすればコピーは削
除される。
【0215】コンフリクトはグラフ(各REGINFO に対す
るノード、及び各REGINFO ノードとそれとコンフリクト
する各その他のノードを結ぶ無向性エッジ−−これはグ
ラフ着色法によって用いられる視点である)として、又
は対称2進マトリックスとして考えられる。後者の形は
コンフリクトが実際に記憶される仕方により近い。
【0216】各REGINFO はコンフリクトマトリックスの
一行(部分)である単一BITSETを含んでいる。2つの簡
単なREGINFO はコンフリクトしないから、マトリックス
の下部右4分画は全て0である。また、マトリックスは
対称であるから、上部右4分画は下部左の入れ換えであ
る。結果として、マトリックスの左側は全て記憶される
必要がある。従って、コンフリクトBITSETは、 c->ri
total の代わりに、それぞれ c->ri complex ビットだ
けである。
【0217】2つのREGINFO 、A及びB、がBITSETとコ
ンフリクトしているか否かを決めるには、先ずそれらが
簡単か又は複雑かを見るためのテスト(idと c->ri co
mplex との比較)が必要である。もし何れかが複雑であ
れば、そのIDに対応するビットを、他のREGINFO のコ
ンフリクトBITSETに於いて調べる。もし両者が複雑であ
れば、何れかのビットを調べる;それらは同じでなけれ
ばならない。もし何れも複雑でなければ、それらはコン
フリクトしない。
【0218】コンフリクトはIL(ComputeLive によっ
て発生される)に記憶されたライブ情報から計算され
る。ComputeConflictsはILコードに関して単一パスを
実行し、現在点に於けるセット擬似レジスタライブか
ら、その点に於ける複雑なREGINFO のBITSETを発生す
る。各複雑なREGINFO はライブセットに加えられるか
ら、それは既にライブセットにある全てのREGINFO とコ
ンフリクトしている、とマークされる。各簡単なREGINF
O に出合うと、それは現在のライブセットとコンフリク
トしている、とマークされる。
【0219】3.“レジスタ優先順位”関するREGINFO
の分類 OC SortRIは、種々の調整可能なパラメータに基づい
て、REGINFO 構造に順位を付ける。ウエイト(重み付
け)パラメータは相互に関連にしているから、それら全
てに定数を掛けても何らの影響も持たない。 OC RegAllocConfictWeight :これはコンフリクトグラ
フのグラフ着色に置くウエイトであって、このパラメー
タを高く設定すれば、より多くの異なるREGINFO をレジ
スタに置く割付にとって有利となる。その場合、それら
REGINFO が実際にどの程度の頻度で使用されるかは関係
ない。殆ど使用しないREGINFO は短命になる傾向にあ
り、長命なREGINFO には、おそらく有利に働くことに注
意されたい。 OC RegAllocDefWeight :これは定義に置くウエイトで
あって、この値が高ければ、多くの異なる定義のIL文
を有するREGINFO にとって有利となる。 OC RegAllocUseWeight :これは使用に置くウエイトで
あって、OC RegAllocDefWeight 及びOC RegAllocUseW
eight の両者は、長命でなおかつ多くのuses/defs を持
つREGINFO (但し、長い時間、使用しないで、ただ“ぶ
ら下がっている”REGINFO ではない)に有利に働く傾向
がある。 OC RegAllocResortRate:このパラメータは、良好な着
色を得るのに、どの位多くの分類をするかを制御する。
OC RegAllocConfictWeight が0の場合、このパラメー
タは無関係であり、0(==無限)となるべきである。
この値が小さいとき(>0)は、より多くの時間が費や
され、良好な着色が得られたことを意味する。
【0220】4.レジスタの選択 一連の制約条件が一度はREGINFO に適用される。最初の
幾つかの制約条件は必須条件であって、それを適用した
後、もしレジスタが残っていなければ、REGINFO はレジ
スタに割り当てられない(ターゲット=−1)。残りの
制約条件は望ましいが、必須条件ではない。もし与えら
れた制約条件の何れかによって、可能なレジスタセット
が空になれば、その条件は飛ばす。一旦、全ての制約条
件を適用したら、レジスタセットから最も低い番号のレ
ジスタを選んで、それを使用する。
【0221】TYPE [必須] :この形式(マシンモデルか
らのinfo)の値を保持するレジスタを選択しなければな
らない。 INUSE[必須] :コンフリクトするREGINFO (又はそれと
重なり合うもの)に既に割り当てられているレジスタを
選択することは出来ない。 BASEREGS [必須] :フレームがある種のフレーム/スタ
ック/ベースポインタとして確保するレジスタを使用す
ることは出来ない。 CLOBBERED :REGINFO の寿命期間中に誰かによって修復
されたレジスタを使おうとしてはならない。 DEF CONSTRAINTS :このREGINFO を定義する各ILに対
するマシンモデルからのDEST制約条件に合うレジスタの
使用を試みる。 USE CONSTRAINTS :このREGINFO を定義する各ILに対
するマシンモデルからのSRC 制約条件に合うレジスタの
使用を試みる。 COMPATIBILITY :既にレジスタに割り当てられた互換性
リスト中のもう1つ他のREGINFO と互換可能なレジスタ
の使用を試みる。
【0222】一旦、全てのREGINFO のレジスタに対する
割付が完了(又は失敗)したら、互換性制約条件を介し
て変化するレジスタを探すREGINFO (即ち、このREGINF
O の後に割れ付けられる互換可能なREGINFO であって、
ある理由から同じレジスタには入れないREGINFO )に関
してもう1つのパスを実行する。
【0223】変換(最適化)パス 変換パスは最適化コンパイラ104の心臓部にある。各
パスはコードの意味を残すようにし、かつ生成された最
終コードが高速で走行するようにして、コードの一部書
き換えを試みる。変換パスの或るものは、それ自身では
コードを改良しない代わりに、他のパスにコードの改善
を行わせる。それ故、変換パスは組合せによって最良の
仕事をする傾向があり、単独では効果が薄い。斯うした
理由から、多くのパス、例えばDead Code Elimination
パスが繰り返し実行される。
【0224】Dead Code Elimination (compiler/oc co
mmon/src/oc usedef.c) Dead Code Elimination パス (OC ElimDeadCode) は、
データフロー情報及び制御フロー情報の両者に基づい
て、デッド(不動作)コードの全てを除去する。データ
フロー情報は何ら副次的効果を持たず、その結果が使用
されないIL NODEを消去するのに用いられる。また制御
フロー情報は、決して実行されない全てIL NODE(不到達
コード)を除去するのに使用される。更に或るブランチ
の再対象化が実施される。使用方法を以下に説明する。
【0225】変化が生じなくなるまで、以下のステップ
を反復する。 1.静的プログラム順序でIL NODEに関して繰り返す。 a)もし命令が不到達であれば、それを除去する。もし
命令が他の何れかの命令のターゲットではないLABEL で
あるか、又は次の命令へのGOTO又はCGOTO であるか、又
は無条件ブランチの直後に在って、LABEL ではなけれ
ば、その命令は不到達である。 b)もし命令が副次的効果を持たず、それ自身以外によ
る使用がなければ、それを削除する。 c)もし固定ブランチ命令が、無条件ブランチへのジャ
ンプであれば、その命令を再対象とする(例えば、a GO
TO to a GOTO)。 d)他の何処か(L2)へのブランチが続く次の命令へ
の条件付きブランチをチェックする。この場合、条件を
逆にし、L2を条件付きブランチの再対象とする。
【0226】図16は、Dead Code Elimination 及びAd
dress Check Elimination(compiler/ooct elim achk.
c)の例を特に示す図である。このアドレスチェック消去
パスは、Dataflow解析技術を用いて不要なアドレス配列
チェックを消去する。このコードは偶奇数代数に関する
値の推論を実行する。言い換えれば、このコードを解析
することによって、擬似レジスタが与えられた点に於い
て、偶数値、奇数値又は未知数値を保持しているかどう
かを決定する。この解析は大域的に実行され、ブランチ
を越えて働く。このことは、この解析がループ対して働
き、また他の制御フローを介しても働き、ループの単一
展開を実行する場合に特に良く働くことを意味する。使
用する方法を以下に説明する。この方法は、保守的固定
点への到達を試みる反復方法である。値の推論は主とし
て3つの方法によって行われる。第1の方法では、擬似
レジスタが定数に割り付けられたときに値を推論でき
る。第2に、擬似レジスタが既知の引数による演算結果
であるとき、値を推論できる。例えば、2つの偶数の和
はもう1つの偶数を与える。最後に、条件付きブランチ
は、擬似レジスタの値について情報を与える。例えば、
擬似レジスタを均等性に関してテストすれば、1つのブ
ランチに沿って、それが偶数であることがわかり、他の
ブランチに沿って、それが奇数であることがわかる。
【0227】何れかのラベルに於いて、推論値に変化が
なくなるまで、以下のステップを繰り返す。 1.infvals (擬似レジスタによって指標付けしたINFV
AL配列)に於ける各擬似レジスタに対する定義リストを
クリアする。 2.静的プログラム順序でIL NODEに関して繰り返す。 a)もし命令が簡単化でき、現在既知の推論値が与えら
れるならば、その命令をより簡単なバージョンのものと
置き換える。命令の変化によって全ループが反復され
る。 b)現在の命令の実行に基づいてinfvals を更新する。 i)もし命令が条件付きであって、その命令に関して値
が推論できるのであれば、ターゲットLABEL 及びCGOTO
に記憶されている推論値を適当な推論値によって更新す
る。 ii)もし命令が無条件であって、擬似レジスタを定義し
ているなら、infvals に於けるその擬似レジスタの値を
更新する。この値は、演算がSET であるか、又は特別な
場合、例えば2つの偶数の和でなければ、未知である。 c)もし命令がLABEL であれば、infvalと既にラベルに
ある推論値とを組み合わせる。 d)もし命令がブランチであれば、infvalとブランチの
LABERLに記憶されている推論値とを組み合わせる。infv
alの変化によって全ループは反復される。 e)もし命令が条件付きブランチであれば、その条件か
らの何れかの値推論はinfvalと組み合わされる。 f)もし命令が無条件ブランチであれば、infval配列を
次のLABEL に記憶されている推論値に変える。これは、
それらの静的順序に従って命令を処理するために行わ
れ、無条件ブランチに於ける推論値は、その静的サクセ
サに於けるものと同じではない。
【0228】図17は、Address Check Elimination の
例を特に示す図である。解析の性能を改善するため、擬
似レジスタは単純にODD 、EVEN、又はUNKOWNよりは、そ
の他の値を取ることができる。擬似レジスタは他の擬似
レジスタ、又は2つの擬似レジスタの2進演算に対し
て、EQUIVANLENNTとしてマークすることができる。これ
によって、1つの擬似レジスタに関する情報を、他の擬
似レジスタに伝播することが可能になる。例えば、擬似
レジスタR1と擬似レジスタR2が等価だと分かったと
する。もしこの方法がR1は偶数であることを示すこと
ができれば(例えば、ブランチテスト結果を介して)、
R2もまた偶数であるに違いない。
【0229】この方法は保守的方法であって、推論値は
単調に増加しなければならないことに注意されたい。言
い換えれば、もしこの方法がその実行中、値がプログラ
ムの一点に於いて、常にEVENであると決定するならば、
その値が現実にEVENである場合に違いない。この方法
は、1つの繰り返し操作中に、擬似レジスタがEVENであ
ることを示したり、また他の繰り返し操作中に、擬似レ
ジスタがUNKNOWN であると示したりすることは決してな
い。この特性から方法の終了を推論することは簡単であ
る。
【0230】ホイスチング(compiler/oc common/src/o
c hoist.c) このホイスチング (hoisting:引き上げ) は、一般には
ループ不変量コードモーションと言われ、ループに関し
て一定である計算を、そのループの外へ移動する処理で
ある。この処理では、コードを各ループの繰り返しに対
して一回実行する代わりに、単一時間で実行するので、
有効なスピードアップが得られる。 1.ILの番号を付け直す(idは整列される)。 2.各逆方向ブランチ(即ち、潜在的ループ)に関し
て、物事(things)のホイストを試みる。 a)もしループに対し他のエントリがあれば、このルー
プからホイストされるものは何もない。 b)ループ内でIL NODEを静的順序で繰り返す。 i)ノードが以下の条件を満足すれば、それをホイスト
することができる: (a)ノードは“実際のレジスタ”を使用又は定義しな
い。 (b)ノードはループ内の擬似レジスタセットを使用し
ない。 (c)ノードは副次的効果を持たない。 ii)ホイストできる何れかの演算(op)に関して、そ
れが定義する何れの擬似レジスタも再命名する。 iii)ループの上にIL NODEを移動する。 iv)全てのIL NODEの番号を付け直す。 v)もしブランチを検出したら、ブランチのターゲット
へ飛び越える(そのブランチが実行されているか否か
は、判定できないから、コードをホイストできない)。
【0231】ホイスチングパスはOOCTにとって必ずしも
有効ではない。その主な理由は、多くのループはエント
リポイントでもあるから、それらはループへの複数のエ
ントリを持ち、ホイスチングパスによっては調べられな
いからである。この問題は、ループのターゲットとして
使用される新たなラベルが生成される“ラベル分割”を
実行することによって解決できる。次に、ホイストされ
た演算はオリジナルラベルと、新たに生成されたラベル
との間にリフトすることができる。これは直ちに実行さ
れる。
【0232】共通式削除(CSE)(complier/oc comm
on/src/oc cse.c) 共通式削除(Common Subexpression Elimination)は冗長
な計算の削除を目的とする技術である。コンパイラ10
4は大域共通式削除(CSE)方法を使用する。
【0233】その基本的方法を図18の例と共に以下に
説明する。 1.変換先(図示例のライン1)を有する各IL NODEに
関して、変更が行われている間に、以下を実施する: i)変換先全ての使用をペア(対)単位でチックし、一
方が他方を支配しているか(Bへ行くのに、Aを通らね
ば行けない時、AはBを支配していると言う)を調べ、
斯うした各AB(ライン2及び4)ペアに関して、以下
を実行する。 ii)AとBが“一致”しているかを調べ、もし一致して
いれば、次の式のペアには行かない。AとBは“共通
式”である。 iii)以下の方法で、AとBから始まるより大きい共通
式を見つける。AとBが変換先を持ち、Bの変換先が独
特の使用C(ライン5)を持っていれば、Aの変換先が
Cを支配すると共に、Cと一致するような使用D(ライ
ン3)を持っているかをチェックする。もし持っていれ
ば、DとCを共通式に加え、A=D、B=Cである更に
大きい式を探す。 iv)2つの共通式A(ライン2、3)及びB(ライン
4、5)を持ったので、コードをBの使用がAの代わり
となるように書き換える。もしAの変換先がBによって
使用以前に変えられれば、新たな擬似レジスタに対して
コピーが用いられる。
【0234】図18は、特に共通式の削除(“CS
E”)の例を示す。 コピー伝播(compiler/oc common/src/oc copyprop.
c) コピー伝播(Copy Propagation) は、割当ターゲットの
使用を割当の変換元による置き換えを試みる変換であ
る。コピー伝播はそれ自身では、コードの品質を改善し
ないから、割当結果が最早使用されないコードを屡々生
成してしまう。コピー伝播方法を以下に説明する。
【0235】1.各ASSIGN演算のためには: a)もしASSIGNの変換元が単一定義を有し、その定義の
唯一の使用がASSIGNであって、そのASSIGNの変換先がそ
の定義とASSIGNの間で、修正も使用もされない場合に
は、その定義を修正してASSIGNの変換先に向かう定義と
し、そのASSIGNを除去する。 b)ASSIGNの変換先の各使用について、ASSIGNはその使
用だけの定義かをテストすると共に、ASSIGNの変換元が
ASSIGNと使用との間で、ライブであると共に有効である
かをテストする。もし両テストが真であれば、変換先の
使用を変換元の使用に置き換える。
【0236】図19はコピー伝播の例を特に示す。図2
0は定数畳込みの例を特に示す。 定数畳込み(Compiler/oc common/src/oc cfold.c) 定数畳込み(constant folding)は、コンパイル時に定数
に関する演算を評価する変換である。例えば、ILが2
つの定数を加算する場合、定数畳込みはそれらIL命令
を、加算の変換先を2つの定数和に割り当てる単一SET
命令によって置き換える。
【0237】定数畳込みパス方法は非常に簡単である。
各IL命令は順番に検査される。各算術及び論理演算
(ADD 、SUB 、BAND、BOR 等) について、その引数の全
てが定数である場合には、IL演算は変換先擬似レジス
タを定引数に関する演算値にセットするSET 演算によっ
て置き換えられる。
【0238】パターン整合(Compiler/oc common/src/o
c pattern.c) コンパイラ104は、IL命令の既知のパターンを、更
に効率的バージョンのものに置き換えるパターン整合最
適化パスを有している。現在は、OOCTによって発生され
るILパターンと共通に整合するパターンはない。従っ
て、パターン整合パスは実行されない。
【0239】ターゲットコードの発生 ILが発生され、そのコードの品質を完全するための変
換が実施されたあと、コンパイラ104の3つの主なパ
スが、コード発生のために用いられる。この点までは、
IL及び変換パスはマシン独立であったが、これら3つ
のパスはターゲットアーキテクチャに強く依存してい
る。
【0240】命令の畳込み(Compiler/oc common/src/i
x86 ifold.c) OOCTのILはRISCの様なアーキテクチャであり、修正な
しでは効率的なターゲットアーキテクチャへのマッピン
グを行わない。特に、全てのIL命令に対しターゲット
命令を発するには、OOCTのILは次善のものである。タ
ーゲットアーキテクチャはCISCアーキテクチャであるか
ら、複数のIL命令は屡々それらを組み合わせて、単一
ターゲット命令とすることができる。命令の畳込みパス
は、組み合わせて単一命令にすることのできるIL命令
グループを作ることによって問題を解く様に設計され
る。
【0241】命令畳込みパスは、予め定められた多くの
異なる命令の組合せの1つを検索する動作を行う。この
場合、以下の組合せが用いられる。 ・定数がADD 、SUB 等の種々の演算に畳み込まれる組合
せ。 ・SETCC 命令が、条件コードに基づいて設定する命令に
畳み込まれる組合せ。 ・同じ引数を持つDIV 、REM 対が一緒に畳み込まれる組
合せ。 ・ADD 、SUB 及びASL 演算を組み合わせて、単一“lea
”演算、或いはLOAD又はSTORE のアドレス計算にでき
る組合せ。 ・16ビットのBSWAP 、STORE の組合わせが、2つの別
々な8ビットの記憶に畳み込まれる組合せ。 ・LOAD演算の結果が第2引数をとして用いられるとき、
LOAD演算が種々の演算に畳み込まれる組合せ。
【0242】命令畳み込みパスは、命令を畳み込むべき
か否かを簡単に決定するが、実際に畳み込みを行うので
はなく、畳み込みはマシンコード発生パスに任せる。命
令畳み込みパスは、2つの方法で畳み込まれる命令をマ
ークする。その第1は、ノードの各オペランドに“fol
d”ビットを用いてマークすることができる。第2に、
その使用の全てを他の命令に畳み込ませた命令に、IL
COMBINE フラグ、及び命令の畳み込まれ方に関する情報
を与えるmmFoldフィールドを用いてマークする。レジス
タアロケータ及びマシンコード発生は、正しく動作する
ためにこれらのフィールドを用いる。
【0243】ターゲットレジスタ割当(Compiler/oc co
mmon/src/ix86 regalloc.c) レジスタアロケータ(RegAlloc)が可能なREGINOFOの全て
に対するレジスタを選ぶと、それらの物理レジスタを擬
似レジスタの代わりに使用するためには、コードを調
べ、それを修正する必要がある。更にアセンブラがそれ
ら命令のためのコードを発生できるように、実レジスタ
に幾つかの追加擬似レジスタを一時的に入れる必要があ
る。この場合、一般に、RegAllocがそれらレジスタに置
いた値を保管及び回復するため、スピル及びフィルコー
ド(spill and fill code) の挿入が必要になる。これを
するためには、OC RegUseAlloc は制約アロケータ(Get
Reg)を用い、スピル及びフィルコードを挿入してレジス
タを再使用する。
【0244】OC RegUseAlloc は、コードに関して単一
パスを実行し、“スタット(stat)”配列した物理レジス
タの状態のトラックを修正及び保持する。このスタット
配列は、如何なる瞬間も、各レジスタに在る(又は在る
べき)もの、及びレジスタ又はスピル場所(又は両方)
が正しいか否かを記録する。OC RegUseAlloc はその各
々が現在処理されている命令に対して、特定の修正を行
う一連の段階として働く。複数のIL命令が命令畳込み
パスによって一括畳み込まれた場合には、それらは単一
命令として扱われる。それらの段階は以下の通りであ
る。
【0245】1.もし命令が物理レジスタを直接使用し
たら、この使用後、レジスタにフィルが発生したかを確
かめ、RegAlloc解析によって擬似レジスタに割り当てら
れたレジスタを使用するように命令を修正し、全てのレ
ジスタをロックして、再利用されないようにする。 2.GetReg対する前の命令のコールによって、一時的に
割り当てられたレジスタを使用するように命令を修正
し、これら全てのレジスタをロックする。 3.命令が修復したレジスタを表すスタット配列の状態
情報をクリヤして、必要なスピルを挿入する。変換先レ
ジスタを、RegAllocによって割り当てられたレジスタが
もし在れば、それに変える(但し、このレジスタは、必
要に応じてsrcを保持できるから、ロックする必要はな
い)。 4.ターゲットコード発生を必要とするレジスタに、変
換元を入れるようにコードを修正する。これは、レジス
タに存在する必要のある変換元オペランドのために Get
Reg をコールすることを含む。 5.ロックされた全てのレジスタを開錠する。 6.ターゲットコードに必要な実レジスタを使用するた
めの変換先を固定する。これはGetRegのコールを必要と
する。 7.この演算の結果を表すスタット配列を完了させ、全
ての使用レジスタを固定し、それらの“前の”場所を次
の命令にセットする(従って、如何なるスピル/フィル
も、この完了した命令の後に置かれる)。
【0246】このスタット配列は、理解する上で重要で
ある。これは物理レジスタ(MM NumReg以下のレジスタ
は全て物理レジスタである)によって指標付けしたデー
タ構造の配列であって、与えられた物理レジスタ状態を
示す。このデータ構造は以下のフィールドを含んでい
る。 1.ri:現在、この実レジスタと関連する擬似レジスタ
を識別するREGINFO 構造(無関連を示す場合は0)。こ
れはRegAllocによってこのレジスタに割り当てられた擬
似レジスタか、又はGetRegによって一時的に割り当てら
れた擬似レジスタである。 2. alt ri:このレジスタに在る追加擬似レジスタを
識別するREGINFO 構造。これは、GetRegが擬似レジスタ
を物理レジスタに割り当て、RegAllocがもう1つ別の擬
似レジスタを此処(ri)に入れるときに使用される。 3.flags :レジスタの状態を識別するフラグである。
例えば、RegValidは、レジスタの値が有効であることを
示すのに使用される。もしRegValidがセットされていな
い場合には、使用する前にレジスタをフィルしなければ
ならない。可能なフラグの完全な説明については、ix86
regallocを参照。 4.before:このレジスタにスピル又はフィルを置くべ
き命令。
【0247】マシンコードの発生 ターゲットに対するマシンコードは2つのパスで発生さ
れる。その第1パスは、ブランチオフセットが計算でき
るように、命令のサイズを決めるのに用いられる。ま
た、第2のパスは実際のコード発生を行う。2つのパス
は、第1のパスがコードをスクラッチバッファに発生
し、正しいブランチオフセットを持っていないことを除
けば同じであるから、全てのコードは共用される。
【0248】両パスは、順にIL命令を通る単一パスか
らなっている。各命令に対して、演算コードとその形式
によって指標付けされたテーブルは、コード発生機能を
検索するのに使用される。これらコード発生機能は、タ
ーゲットの詳細を熟知する必要なしに、一般化されたタ
ーゲット発生法であるEMITマクロを使用する(ix86 Asm
Emit.[h,c]参照)。これらのマクロは、ターゲットア
ドレシングモードの何れをも使用する命令のアセンブリ
を容易にする。
【0249】セグメント管理 OOCTによってコンパイルされるコードは、SEGMENT デー
タ構造に記憶される。セグメント管理には、これに関連
する多くの重要な問題がある。そこで、第1に、セグメ
ント記憶を扱う特別なメモリアロケータについて説明す
る。第2に、如何にセグメントを発生し、システムに導
入するかを説明する。第3に如何にセグメントが削除さ
れるか(このオプションがonの場合)を説明する。そ
して最後に、セグメント削除がonの場合に用いられる
セグメントロッキングについて説明する。
【0250】セグメントアロケータ (compiler/SegAllo
c.[h,c]) OOCTに於けるセグメントに関する記憶管理は、特別なア
ロケータによって取り扱われる。OOCT初期化の際、セグ
メントアロケータ(SegAlloc)は、メモリの大きいチャン
クによって初期化される。次いで、SegAllocユニット
は、可変サイズメモリの不使用チャンクに対して、前に
割当てられたメモリチャンクの開放を要求すると共に、
現在のメモリ使用に関する統計を要求する能力を提供す
る。
【0251】SegAllocは、可変サイズ割当を取り扱わね
ばならないため、ZONEアロケータより複雑である。SegA
llocは全く標準的な割当方法を使用する。このアロケー
タは、チャンクの分類されたフリーリストを維持し、割
り当てられたブロックに関して、32ビットのヘッダを
用いてそのサイズを示す。メモリのチャンクを割り当て
るため、要求サイズに合ったチャンクに関し、そのフリ
ーリストを検索する。もしチャンクの残りが最小サイズ
より大きい場合には、それを分割して、その残りをフリ
ーリストに加える。チャンクを開放するには、それをフ
リーリストに加える。自由化メモリのスピードは重要な
因子ではないから、フリーリストは、単一フリーブロッ
クに組み合わされた隣接フリーブロックに関して検索さ
れる。
【0252】セグメントの生成及び導入(compiler/ooct
trace.c,compiler/SegMgr.[h,c]) コンパイルの主要段階が完了した後、最終結果は再配置
可能なターゲットコードを含むメモリのブロックであ
る。次のステップは、そのコードに対するセグメントを
生成し、セグメント用に割り当てられたスペースにその
セグメントを導入することである。OOCT Install がこ
の機能を果たす。最初、このセグメントのための場所は
ZONEメモリ領域に割り当てられる。セグメントは、ブロ
ックピッカ114によって選択された基本ブロックのリ
スト(それ故、セグメントが与えられたオリジナル命令
を含んでいるか否かを調べるため、後で検索することが
できる)、及び発生されたコードによって初期化され
る。SEGMGR Install に対するコールは、セグメントを
メモリの連続ブロックに変え、そしてそれを、SegAlloc
ユニットを使用するセグメント用に割り当てられたスペ
ースにコピーする。
【0253】セグメントを生成し、それをセグメント割
当スペースに移動した後、何れのオリジナル命令が、そ
れらのためにコードをコンパイルさせたかを示す変換テ
ーブルは、更新されねばならない。外部エントリである
各オリジナル命令について、変換テーブルはそのエント
リに対して発生されたコードの正しいアドレスによって
更新される。更に、変換テーブルは、K命令が有効なエ
ントリを有していることを示す TRANS ENTRY FLAGに
よってマークされる。
【0254】セグメント削除(compiler/ooct trace.c,
compiler/SegDel.[h,c]) コンパリラ104が変換テーブルにエントリを書き込む
とき、既に其処にあった古いエントリに上書きすること
ができる。インタプリタ110は古いエントリを読むこ
とも、また古いセグメントにジャンプすることもできな
い。セグメントが変換テーブルへのエントリを持たず、
そのセグメントを使用するインタプリタ110がない場
合、そのセグメントを削除することができ、そのメモリ
は他のセグメントのために使用することができる。この
項では、コンパイラが如何にしてセグメントの削除可能
を検出し、そしてそれを削除するかを説明する。また、
通信の項では、セグメントロッキング及びセグメント削
除について詳細に説明する。
【0255】コンパイラ104が変換テーブルのエント
リポイントを上書きする際、コンパイラは古いエントリ
ポイントを削除リストに置く。新たなセグメントを導入
後、コンパイラ104はSEGDEL TryDeletionsをコール
する。この手続きは削除リストの各エントリポイントを
チェックする。もしインタプリタがエントリポイントを
使用していなければ、そのエントリポイントがその後、
再使用されないように削除する。
【0256】全てのセグメントはエントリポイントカウ
ンタを有している。エントリポイントが削除されると、
コンパイラ104はセグメントのエントリポイントカウ
ンタを減算カウントさせる。セグメントのエントリポイ
ントカウンタが0になったとき、インタプリタ110は
セグメントを使用しておらず、新たなインタプリタ11
0がそれにジャンプすることはできない。コンパイラ1
04はセグメントを削除し、そのメモリを解放して他の
セグメントがそれを使用できるようにする。
【0257】セグメントロッキング セグメントに対する各エントリポイントは、そのエント
リポイントに関してロックとして作用するカウンタを有
している。このカウンタは、エントリポイントを使用す
るインタプリタ110の数を記録する。そのカウンタ値
が0より大きい間、エントリポイントとそのセグメント
はロックされ、コンパイラ104はそれを削除すること
はできない。エントリポイントロックの最も重要な特徴
は、セグメントをロック及びアンロックする命令が、セ
グメント自身の一部ではないことである。このことは、
インタプリタ104がロックを保持しない限り、セグメ
ントについて如何なる命令も実施できないようにしてい
る。コンパイラ104及ぶインタプリタ110に関する
文書は、セグメントロッキング機構について詳細に説明
している。
【0258】他の問題 コンパイラ104については、他の項で述べるには相応
しくないが、理解する上で重要な幾多の問題がある。
【0259】スタックラッピング(common/ooct warp.
[c,h]) コンパイラ104は最初、動的には拡大しない小さなス
タックを割り当てられる。しかし、都合の悪いことに、
コンパイラ104は多くの再帰的手続きを用いるので、
それが必要とするスタックのサイズが、用意されたもの
より大きくなることが屡々起こる。GranPower に関する
プログラムを実行している間に、コンパイラ104が回
復させられないページフォールトが、スタックオーバフ
ローに起因して起こる状態が見られる。コンパイラ10
4のセクションを書き換えたり、又はスタックオーバフ
ローによるページフォールトの正しい取り扱い方を決め
てみたりする代わりに、OOCT bufferから割り当てられ
たものより更に大きいスタックが用いられる。このスタ
ックのサイズは、それが決して制限因子(ZONEサイズの
ような他の因子は大きな制限となる)とはならないよう
に選択された。斯うしたスタックを使用するため、クリ
ーンなインタフェースOOCT Warp Stack が設計され
た。このインタフェースは、OOCTの大きなスタックスペ
ースを用いる機能をコールすることができる。OOCT Wa
rp Stack から帰ったときも、スタックポインタは変化
されない。従って、コンパイラ104がシードをコンパ
イルするために、ooct Compile Seedを介して主要な
エントリポイントに入っても、それはOOCT Warp Stac
k を使用したと見なされる。
【0260】表 明(coomon/assert.[c,h]) コンパイラ104のコードは、沢山の表明(ASSERTION)
文を有している。この表明文は一貫性の制約及びその他
エラー状態をチェックするために、コンパイラ104の
至る所で使用される。表明文は2つ主要な役割をする。
デバッギング環境では、表明不履行は、問題を調べて見
つけるのに有効な情報を表示又は記憶する間、プログラ
ムを停止させる。また、本番(コンパイル)環境では、
表明はエラー状態をキャッチするのに使用され、そうし
た状態が発生した時には、コンパイル動作から安全に抜
け出すのに使用される。例えば、もしコンパイラ104
がメモりを使い切ったら、コンパイラ104によるその
シードコンパイルを停止させる。
【0261】サービスルーチン (common/service.h) サービスユニットは、KOI モニタによっては提供されな
いprintf及びmemset等の標準Cライブラリに於いて典型
的に提供されるサービスを提供する。このユニットはこ
れらシステムコールを、ウィンドウズ及びファームウェ
ア構造に於いて、違った扱いをする必要性を取り除くこ
とを意図している。これらサービスルーチンの基本的実
行対象は2つ有って、1つはウィンテスト(Wintest) プ
ロジェクトに対してであり、他の1つはファームウェア
構造に対してである。
【0262】VIII. ウィンドウズのテスト環境 ウィンドウズのテスト環境は、OOCTシステムの高速開発
及びテストに於いて、大きな役割を果たす。ウィンドウ
ズを用いた開発によって、標準デバッギングツールがMS
VCのもとに用意されている。更にプロファイラ(profile
r)等の有効なツールが利用可能となっている。テストを
目的として、テストスピードを上げかつその適用範囲を
広げる特別なテスト方法がウィンドウズを使って開発さ
れた。
【0263】この項では、まず模擬的Granpower 環境に
ついて説明し、次いで進歩したテスト技術の殆どを実行
する比較ユニットについて説明し、最後にコンパイラ1
04のコードダンプについて説明する。
【0264】模擬的 GRANPOWER環境 OOCTの初期テスト、更に進歩したテスト、及び性能解析
を実行するため、ウィンドウズ環境下で走行するインタ
プリタが必要であった。インタプリタ110自身は修正
を必要としなかったが、GranPower に供給される初期化
コール及びAOIシステムコールを書き込む必要があっ
た。OOCTがウィンドウズ環境下で走行するためには、コ
ンパイラ104がインタプリタ110から個別タスクと
して走行するから、多重“タスク”の実行が必要とされ
た。
【0265】初期化 ウインドウのもとで模擬環境を生成する第1の段階は、
KOI データ構造を正しく初期化するコードを生成し、OO
CTタスク用のKOI の初期化API を模擬化することであっ
た。インタプリタ110は何れのコードも実行できるよ
うに、多くのデータ構造が適当に初期化されることを期
待する。更に或るデータ構造の要素は、OOCTを使用する
かどうかを制御する。我々は初期化コードの基礎をファ
ームウェアの初期化処理に置くことによって、インタプ
リタ110を走行させるための正しい初期化をシミュレ
ートすると共に、その動作を制御した。同様に、KOI の
初期化API は、OOCTタスクを実行するため、ファームウ
ェアが使用するコードに基礎を置いた。これは標準ウィ
ンドウズのデバッギング環境下で働くインタプリタ11
0(例えば、OOCT Initに対するコール)間に於けるイ
ンタフェースの初期書込み及びテストを可能にする。ま
たこれはインタフェースの変更及びテストを簡単にす
る。
【0266】AOIシステムコール (wintest/MiscStub
s.c, wintest/MsgStubs.c) インタプリタ110は、利用可能なAOI システムコール
の全てを持つ環境下での実行を期待する。実行可能なも
のをコンパイル及びリンクするためには、AOIシステム
コール用スタブ(stub) を生成する必要がある。システ
ムコールの多くは、ウィンドウズ環境下でシステムテス
トを実施している間は意味を持たないので、それらコー
ルは単に空(empty) 機能として(単にリンケージ目的だ
けに)残される。AOI システムコールはタイミング(ScG
tmSet, ScGtmRef)及びメッセージ(messgAlc, ScMsgSnd,
ScMsgRcv)のために用意され、実施される。
【0267】OOCTは、Execとコンパイラ104によるプ
ロセス間通信のためのメッセージ受け渡しシステムに大
きく依存する。ウィンドウズ環境下では、それらAOI シ
ステムコールのダミーバージョンは、同じタスク内のス
レッド(thread)が通信(上記の)することを可能にす
る。メッセージシステムコールのウィンドウズバージョ
ンは、ロッキング及びメッセージ待ち行列を使用するシ
ステムコールの仕様を完全実施する。
【0268】Compiler/EXEC 用分離スレッド ウィンドウズ環境下での実施及びデバッギングを簡単に
するため、分離処理の代りに、コンパイラ104及びイ
ンタプリタ110に対し分離スレッドを用いた。スレッ
ドを用いることによって、2つの“タスク”間に於ける
メッセージ受け渡しは簡単に実行される。またデバッギ
ングは2つの理由から更に容易になる。即ち、デバッガ
はそれぞれ単独で両方のタスク(インタプリタ110と
コンパイラ104)に使用できること、そしてデバッガ
は複数スレッドに使用できるように設計されているから
である(我々は多重処理をデバッギングするツールを備
えたデバッガを知らない)。
【0269】比較ユニット OOCTは非常に価値があると証明された独特のテスト方法
を使用する。OOCTのコンパイルされたコードは、インタ
プリタ110の結果と正確に同じ結果を生まなくてはな
らないから、それらの結果を直接比較する方法が生成さ
れた。ウィンドウズのテスト環境下では、OOCTとインタ
プリタ110の両者のもとでプログラムを走らせ、中間
結果を最小単位で比較する能力が内蔵されている。これ
らの比較は、命令毎にチェックするように任意に細かく
分けることができる。プログラムの動作を比較する能力
と共に、自動テスト発生器が書き込まれている。このテ
スト発生器は、実行され、比較される“ランダム”コー
ドを生成する。この自動テスト発生及び比較は、OOCTが
正しく動作していることを確かめる極めて大きなプログ
ラムの組を用意する。更に、自動比較はコンパイルされ
たコードとインタプリタ110が最初に異なる場所を指
摘するから、発生したバグをピンポイントで指摘する極
めて価値のある方法を提供する。
【0270】この項では、比較ユニットを2つの段階に
分けて説明する。第1段階では、コンパイルされたコー
ドの結果と、インタプリタ110の結果とを比較するイ
ンフラストラクチャについて説明する。第2段階では、
テストで使用するランダムコードの発生について説明す
る。
【0271】比較インフラストラクチャ 比較インフラストラクチャは、同じKプログラムの2つ
のバージョン実行するという考えに基づいている。そこ
では模擬Kマシン(レジスタ及びメモリ)のマシン状態
を特定の回数だけ、チェックポイントで検査する。次い
で、それらチェックポイントでの検査の結果を比較し、
コンパイルされたバージョンと解釈された(interprete
d) バージョンが同じ結果を与えているかを決定する。
【0272】図21は本発明の実施形態による比較イン
フラストラクチャを有する上記処理の例を特に示す。実
際には、この比較テストは2つのウィンドウズ処理とし
て実行される。親(主)処理はブランチロギング及びコ
ンパイルを持つ完全なOOCTシステムを実行し、子(副)
処理はKOI の解釈されたバージョンだけを実行する。こ
れら両処理はそれらのチェックポイントログをメモり
(子は共用メモリ)に書き込み、模擬Kマシン状態への
両処理の効果(影響)を記録する。親処理はチェックポ
イントログ内のデータを比較し、何れかの矛盾(不一
致)が在ればそれを報告する。
【0273】コード発生 比較テスト用のランダムコード発生は3つのユニットに
よって行われる。先ず、KアセンブラはC機能コールを
用いて、Kマシンコードを作る機構を用意する。第2の
ユニットはK演算コードの種々の基本ブロックを生成す
るために設けられる。そして、最後はランダム制御フロ
ーユニットで、多くの異なる形式の制御フローを持つコ
ードを発生させる。
【0274】Kアセンブラ (wintest/OOCT Assemble.
[h,c]) KアセンブラはCプログラムからKコードを発生するた
めの簡単な機構を用意する。各K演算コードはその演算
コードに対する命令を特別にアセンブルするのに使用す
る機能を有する。個々の命令は引数として、コードを何
処に記憶するかを指定するポインタ、ラベル(多分空)
の名称、及び命令に使用されている各フィールドに対す
る引数を取る。この機能はフィールドをそれらの正しい
場所と組合せ、コードをバッファに書き込む。ラベルに
対するブランチはラベルの定義以前に起こるから、コー
ドに関する第2パスはブランチの変換先を分析するのに
使用される。
【0275】ランダムK演算コード生成ユニット (wint
est/GenArith.c, wintest/GenCassiest.c, Wintest/Gen
Misc.C) 種々の形式の命令をテストするため、それら形式の命令
を含む基本ブロック(ストレートラインコード)を発生
する各ユニットが生成される。特に、算術及びシフト演
算、Cアシスト命令、及びOOCTによって実行される他の
全ての命令を発生するユニットが生成される。これらユ
ニットに対する主要インタフェースは、FillBasicBlock
ルーチンを介している。このルーチンは引数としてメモ
りバッファ及び多数の命令を取り、与えられた多数の命
令(ランダムに選ばれた)をバッファに書込む。FillBa
sicBlockルーチンは機能発生命令配列からランダムに選
んで、命令を加える。ユニットは発生できるK演算コー
ド毎に、1つの命令発生機能を含んでいる。この命令発
生機能は、アセンブラに対する引数として適当なランダ
ムな値を選び、命令をアセンブルする。命令は完全にラ
ンダムには発生されない。その代わり、ある制限のもの
に発生される。例えば、レジスタをランダムに選んで変
換先とする場合、決してベースレジスタを使用しない。
また、コードが前もって決められた多くのメモリ場所を
使うことも制限される。我々のテストでは、これらの制
限は非常に重要であるとは示されなかった。もし将来、
それが重要であると分かれば、更に複雑な処理を用いて
その制限の幾つかを緩和することはできる。
【0276】ランダムテストは多くの異なる命令間の相
互作用をテストするので重要であり、OOCTのようなコン
パイラ104にとって特に重要である。OOCTに於いて、
命令をコンパイルすることによって作られるコードは、
実質的に周囲の命令に依存して異なることができる。
【0277】図22は、異なる周囲命令に対して同じ命
令のためのコードを発生するコード発生例を特に示す。
更にランダムテストは、プログラマがテストしない多く
の場合をテストする。
【0278】ランダムK演算コード生成ユニットは、あ
る種のテストに対してそれ自身で有効である。例えば、
新たな演算コードを実施するとき、このユニットは、そ
の演算コードを用いる命令の基本ブロックを実行する簡
単なループを生成する非常に有効な方法であることを立
証している。個々のユニットが有効であるとは言え、コ
ンパイラ104の幾つかの特徴を完全にテストするに
は、もっと複雑な制御フローが必要である。
【0279】ランダム制御フロー生成ユニット(wintest
/Gdom control flow creation unit(GenControl)) は、
ストレートラインコードより更に複雑な形式の制御フロ
ーを用いるテストを生成するのに使用される。GenContr
olは単一基本ブロックから始めて、幾つかの変換(ラン
ダムに選んだ)を実施する。現在実施されている変換は
下記の通りである。基本ブロックは2つの基本ブロック
に分割できる。基本ブロックはダイヤモンドによって置
き換えることができる。これは条件付きブランチを表
し、其処では2つの経路が結合し直して一緒になる。基
本ブロックはループによって置き換えることができる。
基本ブロックは3つの基本ブロックによって置き換える
ことができ、其処では第2の基本ブロックに対して機能
コールが行われ、第3基本ブロックに戻る。
【0280】基本ブロックに関して、特定数の変換が実
行された後、命令で満たす必要があるランダム発生の制
御フローグラフが存在する。これは2つの部分からなっ
ている。第1の部分では、基本ブロック自体に対するコ
ードを発生するため、前項で説明したランダムK演算コ
ード生成ユニットが使用される。第2の部分では、命令
を満たしてブランチ及びループを実行する。ループは固
定回数繰り返す所定のテンプレートを使用する。条件付
きブランチに対しては、ランダムテスト命令が使用され
る。
【0281】コンパイラコードダンプ デバッギング及び最適化を目的として、多くのダンピン
グ機構がウィンドウズ環境下のOOCTで使用される。主な
ダンピング機構は2つある。その1つはコンパイルされ
たK演算コード、IL、及びターゲットコード(もし発
生されていれば)を含むコードリストを、コンパイルの
間にダンプすることができる。第2の形式のダンピング
機構は、テストを目的として、再コンパイル及びリンク
することができるアセンブリ形にターゲットコードをダ
ンプするものである。
【0282】幾つかの段階の後、ILコードのコピーを
ダンプすることによって、与えられたコンパイラ104
の最適化パス効果の正確性及び有効性を検査することが
できる。更に、作られた最終コードを検査することによ
って、コンパイラ104による各K演算コードのILへ
の変換の善し悪し、及び各IL命令に対して作られたタ
ーゲットコード及びK演算コードの品質をマニュアルで
検査することができる。これらのコードダンプは、OOCT
Optimize IL And Gen Code(compiler/ooct tr
ace.c 参照) に於けるコンパイラ104のパス間に挿入
されたCOMBDUMPマクロを用いて制御される。このマクロ
は、K演算コード及びIL命令に関して繰り返すOOCT
Combdump手続き(ooct combdump.c参照)をコールす
る。
【0283】ウィンドウズ用の現在のプロファイリング
ツールは、動的に発生されたコードを正しく取り扱わな
い。それ故、第2の形式のダンプを用いて、1つの実行
からの動的コードが、もう1つの実行からの静的コード
として使用でき、そして正しくプロファイルできるよう
にする。これは2段階で達成される。第1段階では、再
コンパイル可能なフォーマットを持つファイルに、コン
パイルされる各K演算コードのトレースを記録し、そし
てコードをダンプする。第2段階では、プログラムをコ
ンパイルして、それをOC USEDUMP フラグ(compiler/oo
ct dump.h参照) によって実行し、静的バージョンを使
う代わりに前にコンパイルされたコードに対する動的コ
ンパイルをoffする。プログラムのこのバージョン
は、コードの品質に関する統計を記録するプロファイラ
によって実行することができる。
【0284】本発明の第2実施形態 動的最適化オブジェクトコード変換 第2実施形態の概容 アーキテクチャエミュレーションは、オリジナルアーキ
テクチャで使用するマシンコードを修正なしで実行でき
るように、1つのコンピュータアーキテクチャを他の異
なるコンピュータアーキテクチャによって模倣すること
である。オブジェクトコード変換は1つのコンピュータ
アーキテクチャ用マシンコードを、他のコンピュータア
ーキテクチャ用マシンコードに変換する処理である。こ
こで述べる動的最適化オブジェクトコード変換システム
はコンパイラ最適化技術を用いて、アーキテクチャエミ
ュレーションのためのテンプレートベースのオブジェク
トコード変換より高いオブジェクトコード変換性能を達
成する。
【0285】第2実施形態に関する図の説明 図23は本発明の第2実施形態による動的最適化オブジ
ェクトコード変換に用いるシステム構成を示す。図23
はプログラム解釈の実行と同時発生の動的変換を示す概
略図である。各インタプリタはコンパイラに対し変換要
求を送ることができる。次いでコンパイラはインタプリ
タタスクにとって利用可能な変換されたコードを作る。
多重実行ユニットを持つマシンでは、全ての処理が同時
に実行される。
【0286】第2実施形態の詳細な説明 動的最適化オブジェクトコード変換システムは1つの命
令セットの動的コンパイルを、もう1つ他の命令セット
に対して実施し、テンプレートベースの変換又は解釈さ
れたエミュレーションに関する性能改善を行う。動的最
適化オブジェクトコード変換システムは、実行コードを
プロファイルする任意の数のインタプリタを別の最適化
コンパイラに組み合わせる。最適化コンパイラは実行コ
ードからのプロファイリング情報を使用して、頻繁に実
行されたコード部分を決定する。次いで、これらのコー
ド部分はコンパイルされ、インタプリタに与えられる。
このシステムの全体構造を図23に示す。
【0287】有意味のコンパイラ形式の最適化は、命令
フローグラフに関する情報によってはじめて実行が可能
になる。伝統的なコンパイラでは、最適化が始まる前
に、全ルーチンが完全に解析されるので、フローグラフ
は明瞭に定義されて与えられる。アーキテクチャエミュ
レーションシステムの場合、コンパイルされるコード
は、それが実際に実行される前には利用可能ではない。
更に命令及びデータは、実際にプログラムを走行させな
ければ、一般には区別することはできない。
【0288】それ故、フローグラフを決めるには、プロ
グラムを実行しなければならない。インタプリタは最初
にプログラムを走行させるのに使用される。インタプリ
タがプログラムを実行するとき、インタプリタはブラン
チ演算を行うことを動的コンパイラにその都度報告す
る。この情報のロギングは、幾つかの命令及び幾つかの
接合点を識別する。プログラムが走行すると、フローグ
ラフに関する情報はより完全にはなるが、全く完全とは
言えない。システムはフローグラフに関する部分的情報
によっても作動するように設計されている。この場合、
最適化は潜在的に不完全なフローグラフに基づいて実施
されるが、より多くの情報が利用可能になったとき、シ
ステムはその最適化コードを入れ替えられるように設計
されている。
【0289】動的コンパイルは、インタプリタによって
集められたプロファイリング情報に基づいて、テキスト
のどの部分を最適化すべきかを選択する。或るブランチ
を実行した回数が閾値を越えたとき、ブランチの変換先
はコンパイルのシードになる。シードは、1単位として
コンパイルされる変換元命令の部分を解析する始点であ
る。この単位をセグメントという。
【0290】セグメントは、シードから変換元命令を最
適化した結果得られた命令を含んでいる。セグメントは
1単位として導入及び非導入される。インタプリタがコ
ンパイラをコールして、コンパイラにブランチについて
知らせると、もし変換先コードが在れば、コンパイラは
制御をセグメントに移すことを選択する。同様に、セグ
メントは制御をインタプリタに移し返すためのコードを
含んでいる。
【0291】セグメントが不完全で、変換元プログラム
から可能なフロー経路のサブセットしか表していない場
合もある。しかし、この不完全な表現は正しいエミュレ
ーション動作と干渉はしない。もしオリジナルコードを
介して、新たに予想外のフロー経路が生じた場合には、
制御フローはジャンプしてインタプリタに戻る。後で、
同じセグメントは新たな制御のはがれを説明するために
置き換えられる。
【0292】第2実施形態の特別目的 本発明は、アーキテクチャエミュレーションシステムに
於ける性能改善のために最適化オブジェクトコード変換
を使用する。
【0293】第2実施形態の要約 ここで述べた動的最適化オブジェクトコード変換システ
ムは、アーキテクチャエミュレーションのため、コンパ
イラ最適化技術を用いて、テンプレートベースのオブジ
ェクトコード変換より高いオブジェクトコード変換性能
を達成する。本発明は、アーキテクチャエミュレーショ
ンシステムに於ける性能改善のために最適化オブジェク
トコード変換を使用する。
【0294】本発明の第3実施形態 同時動的変換 第3実施形態の概容 動的変換は、1つのマシン語で書いたコンピュータプロ
グラムを、そのプログラムの実行中に、他のマシン語で
書いたものに変換する動作である。ここで述べる同時動
的変換システムは、プログラム解釈の実行と同時に変換
を行う。
【0295】第3実施形態に関する図の説明 図24は本発明の第3実施形態による同時動的変換に用
いるシステム構成を示す。図24はプログラム解釈の実
行と同時の動的変換を示す概略図である。各インタプリ
タはコンパイラタスクに対し変換要求を送ることができ
る。次いで、コンパイラタスクはインタプリタタスクに
とって利用可能な変換されたコードを作る。多重実行ユ
ニットを持つマシンでは、全ての処理が同時に実行され
る。
【0296】図25は、例えば1つのタスクとして実行
する間、インタプリタとコンパイラを組み合わせること
と、また例えば、本発明の第4実施形態に従って、異な
るタスクとしてそれらを分離することとの違いを示す。
図25は、インタプリタとコンパイラタスクを組み合わ
せた時の待ち時間と、分離した時の待ち時間の概略を示
す図である。
【0297】第3実施形態の詳細な説明 同時動的変換の目的は、インタプリタが実行状態にある
間に、実行プログラムを更に効率的な形にコンパイルす
ることによって、インタプリタの性能向上を図ることで
ある。インタプリタの実行と同時に動的変換を行うた
め、コンパイラは多重実行ユニットを有するシステムに
関して分離タスクとして実行される。コンパイラタスク
は、或る命令を変換する要求を受け、一定の変換された
コードによってその要求に応えるサーバである。分離タ
スクとしてコンパイラサーバを置くことには、幾つかの
利点がある。即ち、その第1は1つ以上のインタプリタ
タスクが、同じサーバに対して要求することができる。
第2に、インタプリタタスクは、先に進む前に、コンパ
イル要求の結果を待つ必要がない。第3に、インタプリ
タ及びコンパイラは、それぞれのタスクに於ける故障か
ら隔離される。そして、第4に、インタプリタ及びコン
パイラは利用可能なプロセッサの数に応じて、仕事がよ
り平均化するようにスケジュールを組むことができる。
これらそれぞれの利点ついては以下の詳述する。
【0298】分離コンパイラタスクを持たない動的変換
システムは幾つか現存している。サンマイクロシステム
ズ(Sun Microsystems)社のジャバ仮想マシン(Java virt
uralmachine) はその一例である[2] 。この仮想マシン
は手続きを呼び出すことによって動的変換要求を発する
ことができる。しかし、このシステムでは、インタプリ
タはプログラムの実行を継続する前に、変換要求が完了
するのを待たなければならない。もう1つの例は、富士
通社の一挙に命令ページを変換するOCT 動的変換システ
ムである[1] 。このOCT システムでは、プログラムの実
行を継続する前に、変換要求が完了するのを待たなけれ
ばならない。
【0299】また、ジャバの変換元コードをジャババイ
トコードに静的変換するのに利用できる変換サーバがあ
る[3] 。これらのサーバはジャバのプログラムが走行し
ている間は動作しないので、動的変換ではなく、静的変
換のための分離コンパイラタスクの利益を提示してい
る。
【0300】分離コンパイラタスク構成の第1の利点
は、複数のインタプリタタスクが同一サーバに対して変
換要求をすることができる点にある。それらの変換要求
は、それらの実行可能なイメージに、それを更に小さく
するコンパイラコードを含まなくてもよく、インタプリ
タ命令とコンパイラ命令との間、或いはインタプリタデ
ータデータとコンパイラデータとの間にキャシュ競合を
起こさない。効率的キャシュの使用は、殆ど全てのモダ
ンなプロセッサにとって重要であるから、これは大きな
利点である。
【0301】分離コンパイラタスク構成の第2の利点
は、インタプリタがコンパイラの待ち時間を見なくて済
む点である。図25は待ち時間の差を示している。イン
タプリタとコンパイラの組合せタスクでは、インタプリ
タはコンパイラが命令変換を完了するまでは、命令を実
行しない。分離タスクの場合は、インタプリタは、コン
パイラが動作している間に、直ちに命令実行を再開す
る。分離タスクによって為される全仕事量は、変換要求
をしてその回答を受けるから大きくなるが、待ち時間が
小さいと言うことは、コンパイラが働いている間、シス
テムユーザが休止時間を持たなくて済むことを意味す
る。また、コンパイラが働いている間も、インタプリタ
タスクは割り込み等の外部事象に応答することができ
る。これは組合せタスク構成では不可能である。実際、
組合せ構成に於いて、インタプリタがコンパイラの待ち
時間を経験するという事実は、コンパイラの複雑さ及び
変換されたコードの品質に制限を置くことになる。例え
ば、ジャバのJust-In-Timeコンパイラはジャバシステム
と対話しているユーザが休止を経験しないような十分な
高速でしなければならない。これは複雑な最適化を禁止
することになる。同様に、OCT システムはコンパイル時
間を減少させるため、1つの変換された命令を最適化す
るだけである。分離コンパイラタスクは、複数の命令に
わたって最適化の実施を可能にする。
【0302】分離コンパイラタスクの第3の利点は、イ
ンタプリタタスクとコンパイラタスクに於ける故障が互
いに隔離される点にある。このことは、もしコンパイラ
がアドレス例外や、その他の例外状態に遭遇しても、イ
ンタプリタタスクは影響を受けないことを意味する。コ
ンパイラは故障の後、それ自身をリセットし、次の変換
要求に関する仕事を続ける。インタプリタタスクは、変
換要求を終了するのにコンパイラを待つことはないか
ら、コンパイラの故障を知らずに済む。
【0303】分離コンパイラタスクの第4の利点は、コ
ンパイラタスクとインタプリタタスクに対する負荷のバ
ランスを取ることができる点である。動的変換システム
では、インタプリタタスクが非常に忙しく、コンピュー
タのCPUの全てを必要とする時期があり、またインタ
プリタタスクが遊休状態で、CPUが使用されていない
時期もある。インタプリタとコンパイラの組合せ構成で
は、コンパイラはインタプリタが実行時にコールされる
だけだから、コンパイルの仕事の殆どはインタプリタの
実行時に行われる。従って、これは遊休CPUサイクル
の利点を使用しない。分離コンパイラタスク構成では、
コンパイラはインタプリタが遊休状態にあるときでも動
作を継続する。コンパイラはインタプリタが将来使うか
もしれない変換されたコードを作成する。
【0304】第3実施形態の特別目的 本発明の第3実施形態は、より小さな実行可能なイメー
ジサイズを与え、キャシュ競合を低減し、インタプリタ
実行の待ち時間を短縮し、故障を隔離し、更に良い負荷
のバランスをとる複数の物理的実行ユニット有するシス
テムに於いて、複数インタプリタの実行と同時に動的変
換を行うことを目的とする。
【0305】第3実施形態の要約 ここで述べた動的変換システムはプログラム解釈の実行
と同時の変換を行う。このシステムはインタプリタタス
クの実行に重大な影響を与えないように、分離コンパイ
ラを使用する。本発明は、より小さな実行可能なイメー
ジサイズを与え、キャシュ競合を低減し、インタプリタ
実行の待ち時間を短縮し、故障を隔離し、更に良い負荷
のバランスをとる複数の物理的実行ユニット有するシス
テムに於いて、複数インタプリタの実行と同時の動的変
換を用いる。
【0306】本発明の第4実施形態 エミュレータに関するプロファイリングの負担を低減す
る動的変換実行中のエミュレーション 第4実施形態の概容 アーキテクチャエミュレーションは、オリジナルアーキ
テクチャ用マシンコードが修正なしで実行できるよう
に、1つのコンピュータアーキテクチャを他の異なるコ
ンピュータアーキテクチャによって正確に模倣すること
である。オブジェクトコード変換は、1つのコンピュー
タアーキテクチャ用マシンコードを異なるコンピュータ
アーキテクチャ用マシンコードに変換する処理である。
ここで述べる動的最適化オブジェクトコード変換システ
ムは、コンパイラ最適化技術を用いて、アーキテクチャ
エミュレーションのためのテンプレートベースのオブジ
ェクトコード変換より高いオブジェクトコード変換性能
を達成する。しかし、動的最適化オブジェクトコード変
換を実現するにはプロファイリングが必要である。ここ
では、プロファイリング負担を低減する方法について説
明する。
【0307】第4実施形態に関する図の説明 図26は本発明の第4実施形態に従って、どの命令が変
換可能であり、どの命令が変換不能であるかを記録する
のに使用する変換テーブルを示す。図26はどのプログ
ラムが変換可能であり、どのプログラムが変換不能であ
るかを示す変換テーブルである。この場合、プログラム
はIバイトの単位で測られる。エミュレータは、どのエ
ントリにブランチサクセサが対応するかをチェックし、
変換可能なプログラムにジャンプするか否かを決定す
る。
【0308】図27は、本発明の第4実施形態による方
法が、エミュレータに関するプロファイリング負担を如
何に低減するかを示す。図27は、エミュレータがどの
様にして変換可能なプログラムに関してロギングをon
し、変換不能プログラムに関してそれをoffするかを
示す流れ図である。トリガ*1 命令及びトリガ*2 命令
は、両者ともログされねばならないが、トリガ*1 命令
は変換可能プログラムと変換不能プログラムの間にジャ
ンプしなくても良い。トリガ*2 だけがそれらの間にジ
ャンプすることができる。ログフラグはエミュレータが
変換可能プログラムで走行しているか又は変換不能プロ
グラムで走行しているかを覚えている。従って、トリガ
*1 命令では、エミュレータは変換テーブルをチェック
したり、又はログフラグを変えたりしなくても良い。従
って、エミュレータはブランチサクセサ命令が既にコン
パイルされているかどうかだけをチェックし、直ちにコ
ンパイルされたコードにジャンプする。トリガ命令*1
は、最も多く実行された命令を表すから、このアルゴリ
ズムはエミュレーションに関するプロファイリングの負
担を低減する。
【0309】第4実施形態の詳細な説明 動的最適化オブジェクトコード変換は、更に高速な命令
を作ることによって高い性能を実現できるが、それには
メモリ及び時間の点から見てコストが伴う。それ故、ア
ーキテクチャエミュレーションでは、動的オブジェクト
コード変換とエミュレーションの両方を一緒に用いる。
この変換は最も多く実行され、高性能を必要とするメジ
ャープログラムに対して用いられる。そして、エミュレ
ータは変換プログラムがコンパイルを完了するまで、マ
イナープログラム及びメジャープログラムのプロファイ
リングのために作動する。変換プログラムはプロファイ
ルを用いてプログラムのコンパイル及び最適化を実施す
る。
【0310】未変換コードから変換されたコードにジャ
ンプする命令をトリガ命令と言う。もしトリガ命令がマ
イナープログラムからメジャープルログラムへ、又はそ
の反対にジャンプする場合、その命令をトリガ*2 命令
と言う。もしトリガ命令がマイナープログラム内、又は
メジャープログラム内だけでジャンプする場合、その命
令をトリガ*1 命令と言う。変換プログラムはマイナー
プログラムでは動作しないから、マイナープログラムに
於いてトリガ*1 命令をプロファイルする必要はない。
メジャープログラムの一部分は、他の部分がまだ変換さ
れていない間に変換されるから、メジャープログラムに
於いてトリガ*1 命令をプロファイルする必要がある。
トリガ*2 命令はメジャープログラムへジャンプするか
ら、マイナー及びメジャープログラムの両方でプロファ
イルする必要がある。
【0311】エミュレーションは、トリガ*2 命令を実
行した後に、3つの命令を実行する(図27参照)。先
ず、変換プログラムがonしているかをチェックする。
もしonしていれば、トリガ*2 命令のサクセサが変換
可能か否かをチェックする。もしサクセサが変換可能で
あれば、エミュレーションはロギングフラグを真にセッ
トし、そしてサクセサが変換されたかをチェックし、も
し変換されたバージョンが在れば、それにジャンプす
る。
【0312】エミュレーションは、トリガ*1 命令を実
行した後に、2つの命令を実行する(図27参照)。先
ず、ロギングフラグがonか、offかをチェックす
る。フラグがoffなら、この命令はマイナープログラ
ムにあり、プロファイルする必要はない。フラグがon
ならば、エミュレーションはサクセサが変換されたか否
かをチェックする。
【0313】メジャー及びマイナー両プログラムは、そ
れらのメモリアドレスによって区別される(図26参
照)。エミュレータは変換テーブルを用いて、変換可能
及び変換不能プログラムアドレスの関係を記録する。変
換可能プログラムと変換不能プログラムの間を決して移
動しないトリガ*1 命令に関しては、ロギングフラグが
既にその情報を持っているから、エミュレータは変換テ
ーブルにアクセスしなくても良い。
【0314】トリガ*1 命令及びトリガ*2 命令に対す
るエミュレータの動作を分離することによって、エミュ
レーションに関するプロファイリング負担は低減され
る。
【0315】第4実施形態の特別目的 本発明の第4実施形態はエミュレータに関するプロファ
イリング負担を低減する方法を目指している。この方法
は、変換可能な命令へ、又はそれからジャンプすること
ができ、ブランチサクセサが変換可能か否かをチェック
するコードをトリガ命令の後に置き、そして単にフラグ
をチェックして、ブランチサクセサが変換可能か否かを
調べるコードを他の全てのトリガ命令の後に置くことに
よって構成される。
【0316】第4実施形態の要約 動的オブジェクトコードをエミュレーションと一緒に用
いることは効果的ではあるが、変換プログラムを案内す
るプロファイリング命令のコストはエミュレーションの
負担となる。形式の異なるプロファイリング命令を区別
することによって、この負担を低減することが可能であ
る。本発明は、エミュレータに関するプロファイリング
負担を低減する方法であって、この方法は、変換可能な
命令へ、又はそれからジャンプすることができ、ブラン
チサクセサが変換可能か否かをチェックするコードをト
リガ命令の後に置き、そして単にフラグをチェックし
て、ブランチサクセサが変換可能か否かを調べるコード
を他の全てのトリガ命令の後に置くことによって構成さ
れる。
【0317】本発明の第5実施形態 動的変換のためのソフトウェアフィードバック 第5実施形態の概容 動的変換は、1つのマシン語で書いたコンピュータプロ
グラムを、そのプログラムの実行中に、他のマシン語で
書いたものに変換するする動作である。ある種の動的変
換システムでは、プログラムを実行するインタプリタと
呼ばれるタスクと、コンパイラと呼ばれるプログラムを
変換するタスクとが、相互に分離される。インタプリタ
がコンパイラに対して要求を送る割合は、コンパイラが
その要求を完成する割合に一致しなければならない。ま
た、インタプリタが要求を送る割合がゼロに落ちてはな
らない。ソフトウェアフィードバックは、これら2つの
割合を同じにする方法を提供する。
【0318】第5実施形態に関する図の説明 図28は本発明の第5実施形態によりインタプリタとコ
ンパイラを分離した動的変換システムの全体構造を示
す。図28は動的変換システムの構造図である。インタ
プリタはコンパイラに対して要求を送る。これに応答し
て、コンパイラは変換されたコードをインタプリタに送
り返す。このシステムが最も効率的な動作をするには、
これら要求と応答の割合が等しくなければならない。
【0319】図29は本発明の第5実施形態によるソフ
トウェアフィードバック機構の構成要素を示す。図29
はソフトウェアフィードバックシステムの構成要素を示
す図である。比較手続きは完成数から要求数を減算す
る。要求割合手続きはその差に基づいて割合を設定す
る。要求送付手続きは、現在の割合によって要求を送
る。
【0320】第5実施形態の詳細な説明 動的変換システムでは、インタプリタタスクはコンパイ
ラタスクに要求を送る。この要求には、プログラムのど
の区画を変換するかをコンパイラに告げる情報が含まれ
ている。要求を何時送るかを決める問題は、スケジュー
リング問題の一例である。インタプリタタスクが要求す
る割合は、コンパイラタスクがその要求を完了する割合
に一致しなければならない。それ故、コンパイラは遊休
状態になったり、或いは要求過多状態になったりはしな
い。
【0321】ソフトウェアフィードバックは、そうした
2つの事象の割合を等しくする方法である[1] 。動的変
換システムでは、この方法は変換要求割合を変えて、変
換完了割合に等しくする。図29に示すように、ソフト
ウェアフィードバックシステムは3つの主要部分を有し
ている。その第1は、変換要求数と変換完了数とを比較
する手続きである。第2は、この比較に基づいて変換要
求の割合を変更する手続きである。第3は、変換要求が
第2の手続きの出力に依存するようにする手続きであ
る。
【0322】動的変換システムに於いて、インタプリタ
タスクは、どの様な頻度でブランチ命令が特定の変換先
アドレスにジャンプしたかをカウントする。このカウン
トが閾値を過ぎると、インタプリタはその変換先アドレ
スを含む変換要求を送る。この閾値はソフトウェアフィ
ードバックによって設定される重要なパラメータであ
る。閾値が殆どの実行カウントより低い場合には、変換
要求割合は高くなる。閾値が殆どの実行カウントより高
い場合には、変換要求割合は低くなる。実行カウントの
典型的サイズは解釈されるプログラムによって変化する
から、インタプリタの動作に自動的に適応するソフトウ
ェアフィードバックは、閾値設定には理想的な方法であ
る。
【0323】動的変換システムにおいて、ソフトウェア
フィードバックシステムの比較手続きは、非常に簡単で
ある。それは、コンパイラに対して送られる変換要求数
と変換完了数との差を計算する。
【0324】要求割合手続きは、比較手続きによって計
算された差に基づいて閾値を変える。もしその差がゼロ
であれば、閾値が高すぎるので、インタプリタによる変
換要求送付は阻止される。その場合、要求割合手続きは
閾値から一定値を減算する。もしその差がその最大許容
値であれば、閾値が低すぎるので、インタプリタによる
過剰な変換要求送付が行われる。その場合、要求割合手
続きは閾値に一定値を加算する。
【0325】要求送付手続きは、インタプリタがブラン
チ命令を実行する際にコールされる。もしブランチ命令
が同じ変換先アドレスに、閾値以上にジャンプした場合
には、インタプリタは変換先アドレスを含む変換要求を
送る。
【0326】第5実施形態の特別目的 本発明は、インタプリタタスクとコンパイラタスクとが
分離された動的変換システムに於いてソフトウェアフィ
ードバック機構を用いて、コンパイラが遊休状態に入ら
ないようにしながら、インタプリタによる変換要求送付
割合とコンパイラによる変換完了割合とを等しくする。
最小閾値の使用によって、コンパイラは停止する。
【0327】第5実施形態の要約 インタプリタタスクとコンパイラタスクとが分離された
動的変換システムに於いて、インタプリタがコンパイラ
に対して要求を送る割合は、コンパイラがその要求を完
成する割合に一致しなければならない。また、インタプ
リタが要求を送る割合がゼロに落ちてはならない。本発
明は、インタプリタタスクとコンパイラタスクとが分離
された動的変換システムに於いてソフトウェアフィード
バック機構を用いて、コンパイラが遊休状態に入らない
ようにして、インタプリタによる変換要求送付割合とコ
ンパイラによる変換完了割合とを等しくする。
【0328】本発明の第6実施形態 動的変換のためのキューイング(待ち行列作成)要求 第6実施形態の概容 動的変換は、1つのマシン語で書いたコンピュータプロ
グラムを、そのプログラムの実行中に、他のマシン語で
書いたものに変換するする動作である。変換されるプロ
グラムの各片に関して、システムは動的変換プログラム
に対して要求をする。動的変換プログラムの使用中に行
われる要求は待ち行列に入れられ、変換プログラムが遊
休状態になったとき、それに引き渡される。待ち行列の
実施は、その低減を計るため、システムコールと共用メ
モリ通信とを組み合わせて実施する。
【0329】第6実施形態に関する図の説明 図30は本発明の第6実施形態に従って、変換タスク作
動中に、如何に待ち行列を用いて変換要求を保持するか
を示す。図31は本発明の第6実施形態に従って、如何
にOOCT要求の待ち行列が、安価で済む共用メモリ要求
と、システムコール要求とを組み合わせるかを示す。
【0330】第6実施形態の詳細な説明 要求待ち行列の基本機能は、図30に示すように、動的
変換プログラムが作動中に為された要求を覚えておくこ
とである。何れの変換システムに於いても、同時に発生
することが可能な変換の数には制限がある。典型的に
は、この制限は1回につき1変換と言うものである。し
かし、出される要求の総数又は要求の割合には制限がな
い。それ故、既に変換プログラムが作動している間に、
1つの変換要求が行われる可能性がある。要求待ち行列
を用いれば、変換要求は待ち行列に入れられ、その要求
を繰り返す必要がなくなる。変換プログラムは待ち行列
からその要求を取って、変換を実行する。
【0331】OOCTに於いて、動的変換システムは複数の
タスク持っている。即ち、1つは要求を取り扱う動的変
換タスクであり、他の1つは、変換要求をする実行タス
クである。OOCTの待ち行列作成実施は、図31に示すよ
うに、安価で済む共用メモリと、システムコールメッセ
ージとを一緒に用いて要求待ち行列を形成することによ
って、単純な待ち行列に改良を加える。未処理の要求が
ない場合、シードを実行タスクから変換タスクに伝え、
変換タスクを遊休状態又はブロック状態にするには、シ
ステムコール単独で十分である。しかし、システムコー
ルは高価につく。共用メモリを使って、要求メッセージ
を実行タスクから変換タスクに伝えることはできるが、
変換タスクはそれらのメッセージをブロックすることは
できない。それ故、変換タスクは、簡単な共用メモリ待
ち行列からメッセージを連続的に受け取るように動作し
なければならない。
【0332】OOCTの実施に当たっては、システムコール
及び共用メモリの各機構の最良の特徴を利用する。即
ち、変換タスクが既に作動している場合、OOCTは変換タ
スクがシステムコールメッセージを待つのをブロックで
きるが、共用メモリを介して要求を伝えるようにする。
【0333】図31に示すように、OOCTの要求待ち行列
は実行タスクと変換タスクとの間で、2種類のメッセー
ジを使用すると共に、両タスクによってアクセスされる
共用メモリバッファを加える。最初のメッセージは、変
換タスクから実行タスクに送られる。このメッセージ
は、実行タスクに、次の要求を送るにはシステムコール
を使うよう告げる。このメッセージは、実行タスクに、
変換タスクが共用メモリバッファを空にし、ブロックし
ようとしていることを報告する。従って、実行タスクは
システムコールを使って要求を送る。変換タスクはメッ
セージを受け取り、変換を開始する。システムコールを
使って1つの要求を送った後、実行タスクは変換タスク
が作動中であることを知ると、その後の要求を直に共用
メモリバッファに送る。これはシステムコールを使用す
るより、遥かに安価で済む。変換タスクは1つの要求を
片づけると、共用メモリバッファを調べる。もしバッフ
ァに要求があれば、その要求は取り出されて、変換され
る。共用メモリバッファが空の場合には、変換タスクは
実行タスクに再度、システムコールを使用するよう告げ
る。
【0334】OOCTの要求待ち行列の利点は、実行タスク
の要求送付割合が高いとき、実行タスクは共用モリを使
うことができる点と、また、変換タスクに対し要求がゆ
っくりした割合では入って来るときは、変換タスクはブ
ロックすることができる点である。
【0335】第6実施形態の特別目的 以下のクレームは日本における富士通の特許の翻訳に1
節を加えたものである。すなわち、本発明は、頻繁に分
岐される命令の変換を始めている間も、変換タスクにメ
ッセージを送ることによって解釈を続行し、変換処理が
既に進行している時には、変換タスクに対するメッセー
ジを待ち行列に入れ、システムコール及び共用メモリの
両機構を用いて、変換要求メッセージの送付性能を改善
する方法である。
【0336】第6実施形態の要約 ここで述べた変換要求の待ち行列は、変換要求を集める
一方で、他の変換を実行する機構である。この待ち行列
によって、実行タスクは1つの要求を送った後、直ちに
その動作を継続することができる。共用メモリとシステ
ムコールを併せて使用することによって、変換待ち行列
の効率を改善することができる。本発明は、頻繁に分岐
される命令の変換を始めている間も、変換タスクにメッ
セージを送ることによって解釈を続行し、変換処理が既
に進行している時には、変換タスクに対するメッセージ
を待ち行列に入れ、システムコール及び共用メモリの両
機構を用いて、変換要求メッセージの送付性能を改善す
る方法である。
【0337】本発明の第7実施形態 動的変換のためのページフォールト回復 第7実施形態の概容 動的変換は、1つのマシン語で書いたコンピュータプロ
グラムを、そのプログラムの実行中に、他のマシン語で
書いたものに変換するする動作である。動的変換プログ
ラムは変換元マシン命令をターゲットマシン命令に変換
する前に、それらを読まなければならない。変換元マシ
ン命令を読んでいる間、変換プログラムはページアウト
したメモリから読むことによって、ページフォールトを
起こす可能性があるが、その場合、メモリ(実記憶装
置)にページを移す(page in :ページインする)こと
は効率的ではない。ここに述べる変換プログラムは、ペ
ージアウトデータを読むことなしに、ページフォールト
から回復し、変換処理を継続する。
【0338】第7実施形態に関する図の説明 図32は本発明の第7実施形態に従って、変換元命令の
通常実行時には起きないページフォールトを、如何にし
て動的変換プログラムがそれを起こす可能性があるかを
示す。図33は変換処理中にページフォールトから回復
し、変換処理を続行するための本発明の第7実施形態に
よるアルゴリズムを示す。
【0339】第7実施形態の詳細な説明 動的変換プログラムは、実際に実行される命令のサクセ
サだけではなく、命令の可能なサクセサの全てを読むか
ら、物理メモリへのコピーに際して、悪い対象であるペ
ージにアクセスする可能性がある。例えば、図32に示
すように、条件付きブランチ命令は2つのサクセサ、即
ちフォールスルーサクセサとブランチテイクンサクセサ
(branch taken successor)を有している。CPUが条
件付きブランチ命令を実行するとき、もしブランチが取
られてなければ、ブランチテイクンサクセサがロードさ
れることは決してない。それ故、ページフォールトは起
こらない。動的変換プログラムがブランチ命令を読む
際、変換プログラムはどちらのサクセサが実際に実行さ
れるかを知らずに、フォールスルー及びブランチテイク
ンサクセサの両方を読もうとする。たとえブランチサク
セサが決して実行されなくても、それを読むことがペー
ジフォールトを引き起こす可能性がある。
【0340】ページフォールトを扱う通常の方法は、要
求されたメモリにページインし、ソフトウエアでメモり
アクセスを行い、それから欠陥命令の後に実行を継続す
る。この方法は2つのコストを伴う。第1は、時間が掛
かる。即ち、物理メモリから1つのページを補助記憶に
移し、別のページを補助記憶から物理メモリに移し、そ
れからメモりアクセスを行うのに時間が掛かる。第2
に、ページインされるメモリのページセットを変えるこ
とになる。物理メモリにコピーされるページは、それが
再度ページアウトされるまでは、頻繁にはアクセスされ
ないかもしれない。このことは、それを物理メモリにコ
ピーすることが悪い考えであったことを意味する。
【0341】動的変換プログラムは頻繁にページフォー
ルトを起こす可能性があるから、それらページフォール
トに掛かる費用を低減することは有益である。動的変換
プログラムは、新たなページを物理メモリにコピーしな
いこと、そして既に物理メモリにあるページを取り去ら
ないようにすることで、余分なページフォールトに掛か
る費用を最小にする。こうすることによって、コピー時
間を節約し、また、まれにしか参照されないページをコ
ピーすることが確実になくなる。ページをコピーする代
わりに、ページフォールトハンドラは、変換プログラム
に於ける現在の命令の流れを中断し、制御を変換プログ
ラムの指定するチェックポイントに戻す。
【0342】変換プログラムは基本ブロックと言う単位
から変換元命令を読み取る。もし1つの基本ブロックを
読んでいる間にページフォールトが起きたら、変換プロ
グラムはそのブロックを無視し、他の何れかのブロック
の変換を続行する。基本ブロックの全てを読んだ後、そ
れらは一組のターゲット命令に変換される。ページフォ
ールトを起こしたブロックを無視する方法を図33に示
す。基本ブロックを読む前に、変換プログラムはチェッ
クポイントを作る。チェックポイント以前の基本ブロッ
クの読取りは全て安全で、チェックポイントの後で起こ
るページフォールトによる影響を何ら受けることはな
い。変換プログラムは次の基本ブロックを読みに掛か
る。もしそこでページフォールトが起きたら、直ちにチ
ェックポイントにジャンプする。こうして、その基本ブ
ロックをスキップして、次の基本ブロックを読むように
する。
【0343】第7実施形態の特別目的 本発明の第7実施形態は、メモリアクセスが不首尾の
際、ページを物理メモリにコピーすることを止める一方
で、変換を続けさせ、動的変換に於けるメモリアクセス
コストを低減する方法である。
【0344】第7実施形態の要約 ここで述べたページフォールト回復機構は、非物理的に
マッピングしたメモリにアクセスする際の、動的変換コ
ストを低減する方法である。この方法は、ページフォー
ルトのために、変換元マシン命令の全てを読むことがで
きない時でさえ、動的変換の継続を可能にする。この発
明は、メモリアクセスが不首尾の際、ページを物理メモ
リにコピーすることを止める一方で、変換を続けさせ、
動的変換に於けるメモリアクセスコストを低減する方法
である。
【0345】本発明の第8実施形態 動的変換のための変換されたコードからの出口記録 第8実施形態の概容 動的変換は、1つのマシン語で書いたコンピュータプロ
グラムを、そのプログラムの実行中に、他のマシン語で
書いたものに変換する動作である。動的変換プログラム
は命令の実行中にその命令をプロファイリングすること
によって、命令を選択し、変換する。頻繁に実行された
命令は変換されるが、たまにしか実行されないものは変
換されない。変換された命令は、プロファイラによる幾
つかの命令の見落とし、即ち、頻繁に解釈実行された命
令の見落しを起こす可能性がある。変換されたコードか
らの特定の出口を記録することによって、頻繁に実行さ
れた命令の全てをプロファイルし、それら命令を全て確
実に変換することができる。
【0346】第8実施形態に関する図の説明 図34は本発明の第8実施形態によるブランチプロファ
イラを有する動的変換システムに於ける制御フローのパ
ターンを示す。
【0347】第8実施形態の詳細な説明 “動的変換のためのブランチロガー”と題して記載した
たように、動的変換システムは、オリジナルプログラム
のブランチ命令を解釈する際、それらをプロファイル
し、どの命令が頻繁に実行され、どの命令が頻繁には実
行されないかを決定する。ブランチロガーはブランチ命
令を単にプロファイルするだけで、全ての頻繁に実行さ
れる命令は、頻繁に実行されるブランチを介して到達可
能であると仮定する。或る場合には、プロファイルされ
たブランチを実行せずに、制御フローが変換された命令
から解釈された命令に戻されるから、動的変換プログラ
ム自身、この仮定を真ではないとする。変換プログラム
はこうした場合を識別することができ、この制御フロー
を、それがあたかもブランチであるかのようにプロファ
イルする特定の変換された命令を生成する。
【0348】図34は、制御がどの様にして解釈された
命令から変換された命令に流れ、そしてまた、その逆に
流れるかを示す。制御が変換された命令から出るときは
何時でも、変換プログラムは出口があたかもブランチ命
令であるかのようにプロファイルされていることを確か
める。制御が変換された命令から解釈された命令に流れ
る場合が幾つかある。
【0349】その第1は、非固定変換先へのブランチが
ある場合である。変換プログラムは、そのブランチの後
で、どの命令が実行されるかを知らないので、その命令
を同じ変換ユニットにブランチとして組み合わせること
ができない。その代わりに、変換プログラムは、変換さ
れたコードから解釈されたコードに戻る出口を生成す
る。
【0350】第2は、変換中のページフォールトのため
に、読むことができない命令がある場合である。“動的
変換のためのページフォールト回復”と題して記載した
ように、変換プログラムは、ページフォールトのために
読むことのできない命令ブロックを無視する。変換され
たプログラムは、それらのブロックに到達したとき、ジ
ャンプして解釈された命令に戻らなければならない。
【0351】第3は、変換が行われているときに、たま
にしか実行されない命令が幾つかある場合である。“動
的変換のためのブロックピッキング閾値”と題して記載
したように、そうした命令はたまにしか実行されないか
ら、変換されない。しかし、それらの命令は将来、頻繁
に実行されるかもしれない。そこで、変換プログラムは
それら命令に対する出口を記録しなければならない。こ
の特徴によって、動的変換システムは、頻繁に実行され
る命令の分布を変える実行パターンの変更に適応するこ
とができるようになる。
【0352】変換されたコードからの出口が記録される
ので、より多くの命令が変換される。このことは、命令
の変換されたバージョンが存在する機会を増加させる。
それ故、動的変換システムを長時間実行した後、1つの
変換されたユニットからの出口の殆どが、解釈されたコ
ードへ戻すジャンプの代わりに、他の変換されたユニッ
トへジャンプを起こす。このことは、高速変換された命
令をより頻繁に使用することからくる直接利益と共に、
ブランチロギング命令を頻繁には実行しないことによる
間接利益も持っている。
【0353】第8実施形態の特別目的 本発明の第8実施形態は、変換されたユニットの可能な
出口をプロファイリングすることによって、たとえ頻繁
に実行される命令がプロファイルされた何れのブランチ
を通しても到達されない場合でも、それを確実に変換す
る方法を目指している。
【0354】第8実施形態の要約 動的変換システムは、頻繁に実行される命令の全てを探
して変換しなければならない。これは、ブランチ命令を
プロファイリングすることによって完成される。しか
し、命令の変換は、プロファイルされたブランチを含ま
ない命令への経路を生成する。それ故、プロファイリン
グは変換された命令からの出口を含むように広げられ
る。この発明は、変換されたユニットの可能な出口をプ
ロファイリングすることによって、たとえ頻繁に実行さ
れる命令がプロファイルされた何れのブランチを通して
も到達されない場合においても、それを確実に変換する
方法である。
【0355】本発明の第9実施形態 動的変換のためのブロックピッキング閾値 第9実施形態の概容 動的変換は、1つのマシン語で書いたコンピュータプロ
グラムを、そのプログラムの実行中に、他のマシン語で
書いたものに変換する動作である。動的変換プログラム
は、頻繁に実行される変換元プログラム部分を全て変換
し、たまにしか実行されない部分の全てを無視しなけれ
ばならない。このことを達成するため、変換システムは
ブランチ命令をプロファイルし、実行確率が特定の閾値
以下の命令に関しては変換を行わない。
【0356】第9実施形態に関する図の説明 図35は、本発明の第9実施形態に従って、動的変換プ
ログラムが如何にブランチプロファイル情報を用いて、
基本ブロックの実行確率を計算するかを示す。
【0357】第9実施形態の詳細な説明 動的変換プログラムの目的は、1つのコンピュータプロ
グラムのオリジナル変換元言語命令を、さらに効率の良
いターゲット言語命令に変換することによって、そのコ
ンピュータ全体の実行速度を改善することである。動的
変換の利点はオリジナルプログラムを実行するための合
計時間を、そのプログラムの変換に要する時間と変換さ
れたプログラムの実行時間の和と比較することによって
計られる。プログラムのどの部分を変換するにしても、
その変換に要する時間はほぼ一定であるから、1部を変
換することの利益は、基本的にその部分を使用する回数
によって決まる。頻繁に実行される命令は変換する価値
があるが、まれにしか実行されない命令はその価値はな
い。
【0358】異なる命令の実行頻度を計るために、動的
変換システムはブランチ命令をプロファイルすることが
できる。このプロファイル情報を用いれば、頻繁に実行
される命令を選択することができ、その点で変換するこ
とができる。初期命令の後、変換プログラムは、たまに
しか実行されないサクセサ命令を読まないようにして、
できるだけ多くの頻繁に実行されるサクセサ命令を読も
うとする。ブロックピッキング閾値は、サクセサ命令が
頻繁に実行されているか、又はたまにしか実行されてい
ないかを決定するのに使用される。
【0359】動的変換プログラムは、基本ブロックと称
する単位で命令を読む。1つの基本ブロックでは、全て
の命令は同じ回数だけ実行される。従って、命令は、そ
の全てが頻繁に実行されるか、又はその全てがたまにし
か実行されないかの何れかとなる。
【0360】動的変換プログラムはブランチ命令からの
情報を用いて、基本ブロックが頻繁に実行されるか、た
まにしか実行されないかを決定する。この処理を図35
に示す。変換プログラムは、実行経路が第1の変換され
た命令から、与えられた基本ブロックに向けて取られる
確率を計算する。第1の基本ブロックは、第1の命令を
含むから、それには100%の確率が与えられる。もし
この現在のブロックがサクセサだけしか持っていなけれ
ば、そのサクセサは現在のブロックと同じ実行確率を持
っている。もし現在のブロックが条件付きブランチに終
わっていれば、現在のブロックの確率は、ブランチプロ
ファイル情報に従って2つのサクセサに分けられる。例
えば、現在のブロックの実行確率が50%であって、ブ
ランチ命令で40回実行され、10回取られて終われ
ば、ブランチテイクンサクセサの確率は 50%*25%=12.5
、フォールスルーサクセサの確率は 50%*75%=37.5%
となる。
【0361】ブロックピッキング閾値と呼ばれる可変閾
値は、頻繁に実行されるブロックを選択するのに使用さ
れる。もしブロックの実行確率がこの閾値より大きい
か、又は等しければ、そのブロックは高い頻度で使用さ
れると考えて、変換される。またもしブロックの実行確
率がこの閾値未満であれば、そのブロックは低い頻度で
しか使用されないと考えて、変換さない。
【0362】このブロックピッキング方法の1つの重要
な特性は、選択されたブロックセットが接続されること
である。この実行確率を計算する方法として、更に複雑
な方法、例えば全ての手続きからの確率を加算する等の
方法がある。しかし、この方法では、ブロックセットは
不連続なものとなる。不連続なブロックセットを変換す
ることは可能だが、もしそれらが全て接続されていれ
ば、変換されたコードを最適化するもっと多くの機会が
得られる。
【0363】第9実施形態の特別目的 本発明の第9実施形態は、変換に当たって、たまにしか
実行されないブロックから頻繁に実行されるブロックを
分離する実行確率の閾値を用いて、頻繁に実行される命
令のブロックを選択すると共に、たまにしか実行されな
い命令のブロックを無視することによって、動的変換効
率を改善する方法を目指す。
【0364】第9実施形態の要約 動的変換システムのコストは、変換された命令の数に比
例すると共に、その利益は変換された命令が実行される
回数に比例する。それ故、頻繁に実行される命令だけを
変換し、たまにしか実行されない命令を無視することが
最も効率的である。本発明は、変換に当たって、たまに
しか実行されないブロックから頻繁に実行されるブロッ
クを分離する実行確率の閾値を用いて、頻繁に実行され
る命令のブロックを選択すると共に、たまにしか実行さ
れない命令のブロックを無視することによって、動的変
換効率を改善する方法である。
【0365】これまで、本発明に関する幾つかの好適実
施形態について、それらを図示し、説明してきたが、こ
れら実施形態について、本発明の原理及び精神から逸脱
することなく変更が可能であることは、当業者の理解す
るところであろう。本発明の範囲は、請求の範囲の記載
及びそれと均等なものにある。
【0366】以上の説明により本発明は次のような特徴
を有する。 (1)変換先コンピュータアーキテクチャシステム上で
変換元コンピュータアーキテクチャをエミュレートする
コンピュータアーキテクチャエミュレーションシステム
であって、変換元オブジェクトコードを対応する変換さ
れたオブジェクトコードにそれぞれ変換し、該変換元オ
ブジェクトコードのブランチ命令の実行数を決定するイ
ンタプリタと、対応するブランチ命令の実行数が閾値を
越えたときに該変換元オブジェクトコードの命令をセグ
メントにグループ化し、該セグメントを動的にコンパイ
ルするコンパイラと、を具備するコンピュータアーキテ
クチャエミュレーションシステム。
【0367】(2)コンパイルされないセグメントに対
応するブランチ命令は、メモリに記憶される、前記
(1)に記載のコンピュータアーキテクチャエミュレー
ションシステム。
【0368】(3)該閾値を越えなかったブランチ命令
に対応するセグメントは、コンパイルされない、前記
(2)に記載のコンピュータアーキテクチャエミュレー
ションシステム。
【0369】(4)前記インタプリタが、該変換された
オブジェクトコード命令を実行している間に、コンパイ
ルされないブランチ命令に対応するセグメントは、メモ
リに記憶される、前記(1)に記載のコンピュータアー
キテクチャエミュレーションシステム。
【0370】(5)前記インタプリタ及び前記コンパイ
ラは、実時間でマルチタスキングオペレーティングシス
テムにて同時に動作するタスクである、前記(1)に記
載のコンピュータアーキテクチャエミュレーションシス
テム。
【0371】(6)前記インタプリタによって決定され
たブランチ命令のブランチプロファイル情報を記憶する
ブランチロガーを更に具備する、前記(1)に記載のコ
ンピュータアーキテクチャエミュレーションシステム。
【0372】(7)前記ブランチプロファイル情報は、
ブランチアドレス、ブランチサクセサ、非ブランチサク
セサ、ブランチ実行カウント、及びブランチテイクンカ
ウントを含み、前記ブランチプロファイル情報は、ブラ
ンチ命令エミュレーションの間に前記インタプリタによ
って記録される、前記(6)に記載のコンピュータアー
キテクチャエミュレーションシステム。
【0373】(8)変換可能な命令へのジャンプ又はそ
れからのジャンプを実行するブランチ命令の後にコード
フラグが置かれ、該対応するコードフラグを参照するこ
とにより、該対応するブランチ命令に対するサクセサ命
令が変換可能か否かを決定すべくチェックされる、前記
(1)に記載のコンピュータアーキテクチャエミュレー
ションシステム。
【0374】(9)ブランチ命令に対するサクセサ命令
の実行数が対応する閾値を上回ったとき、該ブランチ命
令の最初の変換が実行される、前記(1)に記載のコン
ピュータアーキテクチャエミュレーションシステム。
【0375】(10)頻繁にブランチされる命令に対応
するセグメントの変換を開始するため、前記インタプリ
タが変換元オブジェクトコードのエミュレーションを継
続している間、前記インタプリタと前記コンパイラとが
通信する、前記(1)に記載のコンピュータアーキテク
チャエミュレーションシステム。
【0376】(11)変換されるべきセグメントを記憶
する待ち行列が所定の容量に達したとき、閾値を上げる
ことによって、コンパイルされるべきセグメントのコン
パイル率が制御される、前記(1)に記載のコンピュー
タアーキテクチャエミュレーションシステム。
【0377】(12)前記コンパイラは、コンパイルが
開始されたアドレスに対応するプロファイルを使用し
て、メモリに記憶されている各命令を順次追跡する間
に、最適化されたオブジェクトコードを生成する、前記
(1)に記載のコンピュータアーキテクチャエミュレー
ションシステム。
【0378】(13)前記コンパイラは、ブロックが起
こしたページフォールトを検出した際にはブロックをコ
ンパイルせず、ブランチロガーにブランチ情報を記録す
るためのオブジェクトコードを作成する、前記(12)
に記載のコンピュータアーキテクチャエミュレーション
システム。
【0379】(14)命令実行処理が所定の実行率でタ
イムリーに実行されていない場合、前記コンパイラは、
プロファイルを用いて実行状態を追跡し、ブランチカウ
ントが所定数を下回っているか否かをチェックし、ブラ
ンチ情報を記録するためオブジェクトコードを作成す
る、前記(13)に記載のコンピュータアーキテクチャ
エミュレーションシステム。
【0380】(15)実行数を含む変換元オブジェクト
コードにおけるブランチ命令のプロファイル情報を記憶
するとともに、頻繁に実行されるブランチ命令のプロフ
ァイル情報を記録するキャシュと、頻繁には実行されな
いブランチ命令のプロファイル命令を記憶するブランチ
ログと、を含むブランチロガー、を更に具備する、前記
(1)に記載のコンピュータアーキテクチャエミュレー
ションシステム。
【0381】(16)プロファイル情報は、ブランチア
ドレス情報とブランチ変換先情報とを組み合わせてキャ
シュに組織される、前記(15)に記載のコンピュータ
アーキテクチャエミュレーションシステム。
【0382】(17)キャッシュに組織されるプロファ
イル情報は複数のグループに記憶され、各グループはプ
ロファイル情報のエントリの降順にそれぞれのグループ
内に組織される、前記(16)に記載のコンピュータア
ーキテクチャエミュレーションシステム。
【0383】(18)各ブランチ命令はシードであり、
前記コンパイラは、変換元オブジェクトコードのセグメ
ントを選択して、該シード及び該ブランチのプロファイ
ル情報に基づいてコンパイルするブロックピッカと、該
セグメントを命令の線形リストへと平坦化するブロック
レイアウトユニットと、オリジナル命令を変換されたコ
ードセグメント命令に実際にコンパイルする最適化コー
ド発生ユニットと、を更に含む、前記(1)に記載のコ
ンピュータアーキテクチャエミュレーションシステム。
【0384】(19)ブロックピッカは、オリジナル命
令を記述する制御フローグラフを生成してコンパイル
し、該制御フローグラフをブロックレイアウトユニット
に渡す、前記(18)に記載のコンピュータアーキテク
チャエミュレーションシステム。
【0385】(20)変換先コンピュータアーキテクチ
ャシステム上で変換元コンピュータアーキテクチャをエ
ミュレートするコンピュータアーキテクチャエミュレー
ションシステムであって、変換元オブジェクトコード
を、対応する変換されたオブジェクトコードに、それぞ
れ変換すると共に、それぞれが変換されたオブジェクト
コード命令の実行の間に、実時間で変換元オブジェクト
コードのブランチ情報をプロファイルする複数のインタ
プリタと、前記複数のインタプリタの何れかからの変換
元オブジェクトコード命令を、変換元オブジェクトコー
ドに於ける対応するブランチ命令に基づいてセグメント
にグループ化し、対応するブランチ命令の実行数が閾値
より大きいとき、変換元オブジェクトコードのセグメン
トを動的にコンパイルするコンパイラと、を具備するコ
ンピュータアーキテクチャエミュレーションシステム。
【0386】(21)前記複数のインタプリタの各々
は、ブランチ命令をプロファイルすると共に、閾値を越
えなかったブランチ命令を、ブランチロガーをコールし
て記憶する、前記(20)に記載のコンピュータアーキ
テクチャエミュレーションシステム。
【0387】(22)変換先コンピュータアーキテクチ
ャシステム上で変換元コンピュータアーキテクチャをエ
ミュレートするコンピュータアーキテクチャエミュレー
ションシステムであって、変換元オブジェクトコードを
対応する変換されたオブジェクトコードにそれぞれ変換
するインタプリタであって、変換元オブジェクトコード
のブランチ命令を、各ブランチ命令に関する実行数を記
憶すると共にその実行数を閾値と比較することによっ
て、プロファイルし、閾値を越えたブランチ命令をシー
ドとして指定するインタプリタと、該シードに基づい
て、変換元オブジェクトコード命令をセグメントにグル
ープ化し、前記インタプリタによる変換及びプロファイ
リングの間に、変換元オブジェクトコードのセグメント
を動的にコンパイルするコンパイラと、を具備するコン
ピュータアーキテクチャエミュレーションシステム。
【0388】(23)各セグメントは、対応するシード
に基づいて変換元オブジェクトコードを最適化した結果
得られた命令を含み、各セグメントは、単位として導入
及び非導入される、前記(22)に記載のコンピュータ
アーキテクチャエミュレーションシステム。
【0389】(24)コンパイルされないセグメントに
対応するブランチ命令はメモリに記憶され、閾値を越え
ないブランチ命令に対応するセグメントはコンパイルさ
れない、前記(23)に記載のコンピュータアーキテク
チャエミュレーションシステム。
【0390】(25)前記インタプリタによって決定さ
れたブランチ命令のブランチプロファイル情報を記憶す
るブランチロガーを更に具備し、該ブランチプロファイ
ル情報は、ブランチアドレス、ブランチサクセサ、非ブ
ランチサクセサ、ブランチ実行カウント、及びブランチ
テイクンカウントを含むとともに、ブランチ命令のエミ
ュレーションの間に、前記インタプリタによって記録さ
れる、前記(23)に記載のコンピュータアーキテクチ
ャエミュレーションシステム。
【0391】(26)変換可能な命令へのジャンプ又は
それからのジャンプを実行するブランチ命令の後にコー
ドフラグが置かれ、対応するコードフラグを参照して、
対応するブランチ命令が変換可能か否かを決定するため
に、サクセサ命令がチェックされる、前記(23)に記
載のコンピュータアーキテクチャエミュレーションシス
テム。
【0392】(27)ブランチ命令に対するサクセサ命
令の実行数が閾値を上回ったときにブランチ命令が最初
に変換される、前記(23)に記載のコンピュータアー
キテクチャエミュレーションシステム。
【0393】(28)変換されるべきセグメントを記憶
する待ち行列が所定の容量に達したとき、閾値を上げる
ことによって、セグメントのコンパイル率が、コンパイ
ルされるべく制御される、前記(23)に記載のコンピ
ュータアーキテクチャエミュレーションシステム。
【0394】(29)命令実行処理が所定の実行率でタ
イムリーに実行されていない場合に、前記コンパイラ
は、プロファイルを用いて実行状態を追跡し、ブランチ
カウントが所定数を下回っているか否かをチェックし、
ページフォールトのようなブランチ情報を記録するため
のオブジェクトコードを作成する、前記(23)に記載
のコンピュータアーキテクチャエミュレーションシステ
ム。
【0395】(30)実行数を含む変換元オブジェクト
コードにおけるブランチ命令のプロファイル情報を記憶
するブランチロガーであって、頻繁に実行されるブラン
チ命令のプロファイル情報を記憶するキャシュと、頻繁
には実行されないブランチ命令のプロファイル命令を記
憶するブランチログと、を含むブランチロガー、を更に
具備し、プロファイル情報は、ブランチアドレス情報と
ブランチ変換先情報とを組み合わせてキャシュに組織さ
れるとともに、該プロファイル情報は、複数のグループ
に、該グループへのエントリの降順に記憶される、前記
(23)に記載のコンピュータアーキテクチャエミュレ
ーションシステム。
【0396】(31)前記コンパイラは、変換元オブジ
ェクトコードのセグメントを選択し、該シード及び該ブ
ランチのプロファイル情報に基づいてコンパイルするブ
ロックピッカであって、オリジナル命令を記述する制御
フローグラフを生成し、そのグラフをコンパイルするブ
ロックピッカと、該制御フローグラフを命令の線形リス
トへと平坦化するブロックレイアウトユニットと、オリ
ジナル命令を変換されたコードセグメント命令に実際に
コンパイルする最適化コード発生ユニットと、を更に含
む、前記(23)に記載のコンピュータアーキテクチャ
エミュレーションシステム。
【0397】(32)多重タスキング変換先コンピュー
タアーキテクチャ上で変換元コンピュータアーキテクチ
ャをエミュレートする多重タスキングコンピュータアー
キテクチャエミュレーションシステムであって、変換元
オブジェクトコードを対応する変換されたオブジェクト
コードにそれぞれ変換し、変換元オブジェクトコードの
ブランチ命令の実行数を決定するインタプリタタスク
と、多重タスキング変換先コンピュータアーキテクチャ
上で前記インタプリタタスクと共に動作するコンパイラ
タスクであって、対応するブランチ命令の実行数が閾値
を越えたとき変換元オブジェクトコードの命令をセグメ
ントにグループ化し、このセグメントを動的にコンパイ
ルするコンパイラタスクと、を具備する多重タスキング
コンピュータアーキテクチャエミュレーションシステ
ム。
【0398】(33)前記多重タスキングコンピュータ
アーキテクチャエミュレーションシステムは動的変換シ
ステムであり、前記多重タスキングコンピュータアーキ
テクチャシステムは、前記インタプリタタスクによって
送られるコンパイル要求の率と、前記コンパイラタスク
によって完成されるコンパイルの率とを、閾値を変える
ことによってコンパイラタスクが遊休状態に入らないよ
うにしつつ、等しくするソフトウェアフィードバック、
を更に具備する、前記(32)に記載の多重タスキング
コンピュータアーキテクチャエミュレーションシステ
ム。
【0399】(34)前記コンパイラタスクによってコ
ンパイルされるべきセグメントを記憶する待ち行列を更
に具備し、閾値は前記コンパイラタスクをon又はof
fする最小閾値と比較される、前記(33)に記載の多
重タスキングコンピュータアーキテクチャエミュレーシ
ョンシステム。
【図面の簡単な説明】
【図1】本発明の好適実施形態によるOOCTシステムの高
レベルアーキテクチャを示すブロック図である。
【図2】最適化オブジェクトコード変換の主要構成要素
を、オリジナルコードの1つのセクションをコンパイル
するための制御フローと共に示す流れ図である。
【図3】通常の実行時に於ける最適化オブジェクトコー
ド変換の制御フローを示す流れ図である。
【図4】各種変数を設定した時のOOCTバッファの概略図
である。
【図5】(a)、(b)及び(c)は変換テーブルの構
造を示す概略図である。
【図6】インタプリタがセグメントに入り、そして其処
から出る過程を示すブロック図である。
【図7】セグメントを生成し、インタプリタによるセグ
メントへの到達を可能とし、旧セグメントには到達不能
とし、そして旧セグメントを削除するコンパイル方法を
示すブロック図である。
【図8】BRANCH_RECORDの構造を示すブロック図であ
る。
【図9】BRANCH_RECORDs を記憶する大きいハッシュテ
ーブルの一部としてのブランチログの構造を示す概略図
である。
【図10】BRANCH_L1_RECORDs の2次元配列であるL
1キャッシュを示す概略図である。
【図11】インタプリタによるL1キャッシュの動作を
実行する方法を示す概略図である。
【図12】本発明の実施形態によるコンパイラの全体構
造を示す概略図である。
【図13】本発明の実施形態によるブロックピッカの例
を示す概略図である。
【図14】ENTRY 命令とGOTO命令の間にフィルを挿入し
た2つの外部入力点を備えたコードアウトラインを示す
ブロック図である。
【図15】OASSIGN 挿入例を示すブロック図である。
【図16】デッドコード削除及びアドレスチェック削除
の例を示すブロック図である。
【図17】アドレスチェック削除の例を示すブロック図
である。
【図18】共通部分式削除(“CSE")の例を示すブロッ
ク図である。
【図19】コピー伝播の例を示すブロック図である。
【図20】定数の畳込み例を特に示す。
【図21】本発明の実施形態による比較インフラストラ
クチャをを有する上記処理の例を特に示す。
【図22】異なる周囲命令に対して同じ命令のためのコ
ードを発生するコード発生例を特に示す。
【図23】本発明の第2実施形態による動的最適化オブ
ジェクトコード変換に用いるシステム構成を示す。
【図24】本発明の第3実施形態による同時動的変換に
用いるシステム構成を示す。
【図25】本発明の第3実施形態に従ってインタプリタ
とコンパイラを、例えば1つのタスク実行に際して結合
する場合と、例えばそれらを異なるタスク実行に際して
分離する場合との差を示す。
【図26】本発明の第4実施形態に従って、どの命令が
変換可能であり、どの命令が変換不能であるかを記録す
るのに使用する変換テーブルを示す。
【図27】本発明の第4実施形態による方法が、エミュ
レータに関するプロファイリング負担を如何に低減する
かを示す。
【図28】本発明の第5実施形態によりインタプリタと
コンパイラを分離した動的変換システムの全体構造を示
す。
【図29】本発明の第5実施形態によるソフトウエアフ
ィードバック機構の構成要素を示す。
【図30】本発明の第6実施形態によって、変換タスク
実行中に、如何に待ち行列を用いて変換要求を保持する
かを示す。
【図31】本発明の第6実施形態によって、如何にOOCT
が要求する待ち行列が、安価な共用メモリ要求と、シス
テムコール要求とを組み合わせるかを示す。
【図32】本発明の第7実施形態によって、変換元命令
の通常実行時には起きないページフォールトを、如何に
して動的変換プログラムがそれを起こす可能性があるか
を示す。
【図33】変換処理中にページフォールトから回復し、
変換処理を続行するための本発明の第7実施形態による
アルゴリズムを示す。
【図34】本発明の第8実施形態によるブランチプロフ
ァイラを有する動的変換システムに於ける制御フローの
パターンを示す。
【図35】本発明の第9実施形態によって、動的変換プ
ログラムが如何にブランチプロファイル情報を用いて、
基本ブロックの実行確率を計算するかを示す。
【符号の説明】
100…OOCTシステム 104…コンパイラ 108…コンパイルされたコードセグメント 110…インタプリタ 112…ブランチロガー 114…ブロックピッカ 116…ブロックレイアウトユニット 118…最適化コード発生ユニット 120…セグメント導入ユニット 124…IL(中間言語)発生器 126…オプティマイザ 128…コード発生器
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ジョセフ エー.バンク アメリカ合衆国,ニューヨーク 10016, ニューヨーク,イースト トゥエンティエ イス ストリート 114,ナンバー2シー (72)発明者 チャールズ ディー.ガレット アメリカ合衆国,ワシントン 98115,シ アトル,ブルックリン アベニュ ノース イースト 6320 (72)発明者 和田 美加代 神奈川県川崎市中原区上小田中4丁目1番 1号 富士通株式会社内 (72)発明者 櫻井 三男 神奈川県川崎市中原区上小田中4丁目1番 1号 富士通株式会社内

Claims (12)

    【特許請求の範囲】
  1. 【請求項1】 変換先コンピュータアーキテクチャシス
    テム上で変換元コンピュータアーキテクチャをエミュレ
    ートするコンピュータアーキテクチャエミュレーション
    システムであって、 変換元オブジェクトコードを対応する変換されたオブジ
    ェクトコードにそれぞれ変換し、該変換元オブジェクト
    コードのブランチ命令の実行数を決定するインタプリタ
    と、 対応するブランチ命令の実行数が閾値を越えたときに該
    変換元オブジェクトコードの命令をセグメントにグルー
    プ化し、該セグメントを動的にコンパイルするコンパイ
    ラと、 を具備するコンピュータアーキテクチャエミュレーショ
    ンシステム。
  2. 【請求項2】 前記インタプリタ及び前記コンパイラ
    は、実時間でマルチタスキングオペレーティングシステ
    ムにて同時に動作するタスクである、請求項1に記載の
    コンピュータアーキテクチャエミュレーションシステ
    ム。
  3. 【請求項3】 変換先コンピュータアーキテクチャシス
    テム上で変換元コンピュータアーキテクチャをエミュレ
    ートするコンピュータアーキテクチャエミュレーション
    システムであって、 変換元オブジェクトコードを、対応する変換されたオブ
    ジェクトコードに、それぞれ変換すると共に、それぞれ
    が変換されたオブジェクトコード命令の実行の間に、実
    時間で変換元オブジェクトコードのブランチ情報をプロ
    ファイルする複数のインタプリタと、 前記複数のインタプリタの何れかからの変換元オブジェ
    クトコード命令を、変換元オブジェクトコードに於ける
    対応するブランチ命令に基づいてセグメントにグループ
    化し、対応するブランチ命令の実行数が閾値より大きい
    とき、変換元オブジェクトコードのセグメントを動的に
    コンパイルするコンパイラと、 を具備するコンピュータアーキテクチャエミュレーショ
    ンシステム。
  4. 【請求項4】 前記複数のインタプリタの各々は、ブラ
    ンチ命令をプロファイルすると共に、閾値を越えなかっ
    たブランチ命令を、ブランチロガーをコールして記憶す
    る、請求項3に記載のコンピュータアーキテクチャエミ
    ュレーションシステム。
  5. 【請求項5】 変換先コンピュータアーキテクチャシス
    テム上で変換元コンピュータアーキテクチャをエミュレ
    ートするコンピュータアーキテクチャエミュレーション
    システムであって、 変換元オブジェクトコードを対応する変換されたオブジ
    ェクトコードにそれぞれ変換するインタプリタであっ
    て、変換元オブジェクトコードのブランチ命令を、各ブ
    ランチ命令に関する実行数を記憶すると共にその実行数
    を閾値と比較することによって、プロファイルし、閾値
    を越えたブランチ命令をシードとして指定するインタプ
    リタと、 該シードに基づいて、変換元オブジェクトコード命令を
    セグメントにグループ化し、前記インタプリタによる変
    換及びプロファイリングの間に、変換元オブジェクトコ
    ードのセグメントを動的にコンパイルするコンパイラ
    と、 を具備するコンピュータアーキテクチャエミュレーショ
    ンシステム。
  6. 【請求項6】 各セグメントは、対応するシードに基づ
    いて変換元オブジェクトコードを最適化した結果得られ
    た命令を含み、 各セグメントは、単位として導入及び非導入される、 請求項5に記載のコンピュータアーキテクチャエミュレ
    ーションシステム。
  7. 【請求項7】 前記インタプリタによって決定されたブ
    ランチ命令のブランチプロファイル情報を記憶するブラ
    ンチロガーを更に具備し、該ブランチプロファイル情報
    は、ブランチアドレス、ブランチサクセサ、非ブランチ
    サクセサ、ブランチ実行カウント、及びブランチテイク
    ンカウントを含むとともに、ブランチ命令のエミュレー
    ションの間に、前記インタプリタによって記録される、
    請求項6に記載のコンピュータアーキテクチャエミュレ
    ーションシステム。
  8. 【請求項8】 命令実行処理が所定の実行率でタイムリ
    ーに実行されていない場合に、前記コンパイラは、プロ
    ファイルを用いて実行状態を追跡し、ブランチカウント
    が所定数を下回っているか否かをチェックし、ページフ
    ォールトのようなブランチ情報を記録するためのオブジ
    ェクトコードを作成する、請求項6に記載のコンピュー
    タアーキテクチャエミュレーションシステム。
  9. 【請求項9】 実行数を含む変換元オブジェクトコード
    におけるブランチ命令のプロファイル情報を記憶するブ
    ランチロガーであって、頻繁に実行されるブランチ命令
    のプロファイル情報を記憶するキャシュと、頻繁には実
    行されないブランチ命令のプロファイル命令を記憶する
    ブランチログと、を含むブランチロガー、を更に具備
    し、 プロファイル情報は、ブランチアドレス情報とブランチ
    変換先情報とを組み合わせてキャシュに組織されるとと
    もに、該プロファイル情報は、複数のグループに、該グ
    ループへのエントリの降順に記憶される、 請求項6に記載のコンピュータアーキテクチャエミュレ
    ーションシステム。
  10. 【請求項10】 前記コンパイラは、 変換元オブジェクトコードのセグメントを選択し、該シ
    ード及び該ブランチのプロファイル情報に基づいてコン
    パイルするブロックピッカであって、オリジナル命令を
    記述する制御フローグラフを生成し、そのグラフをコン
    パイルするブロックピッカと、 該制御フローグラフを命令の線形リストへと平坦化する
    ブロックレイアウトユニットと、 オリジナル命令を変換されたコードセグメント命令に実
    際にコンパイルする最適化コード発生ユニットと、 を更に含む、請求項6に記載のコンピュータアーキテク
    チャエミュレーションシステム。
  11. 【請求項11】 多重タスキング変換先コンピュータア
    ーキテクチャ上で変換元コンピュータアーキテクチャを
    エミュレートする多重タスキングコンピュータアーキテ
    クチャエミュレーションシステムであって、 変換元オブジェクトコードを対応する変換されたオブジ
    ェクトコードにそれぞれ変換し、変換元オブジェクトコ
    ードのブランチ命令の実行数を決定するインタプリタタ
    スクと、 多重タスキング変換先コンピュータアーキテクチャ上で
    前記インタプリタタスクと共に動作するコンパイラタス
    クであって、対応するブランチ命令の実行数が閾値を越
    えたとき変換元オブジェクトコードの命令をセグメント
    にグループ化し、このセグメントを動的にコンパイルす
    るコンパイラタスクと、 を具備する多重タスキングコンピュータアーキテクチャ
    エミュレーションシステム。
  12. 【請求項12】 前記多重タスキングコンピュータアー
    キテクチャエミュレーションシステムは動的変換システ
    ムであり、前記多重タスキングコンピュータアーキテク
    チャシステムは、 前記インタプリタタスクによって送られるコンパイル要
    求の率と、前記コンパイラタスクによって完成されるコ
    ンパイルの率とを、閾値を変えることによってコンパイ
    ラタスクが遊休状態に入らないようにしつつ、等しくす
    るソフトウェアフィードバック、 を更に具備する、請求項11に記載の多重タスキングコ
    ンピュータアーキテクチャエミュレーションシステム。
JP29957699A 1998-10-21 1999-10-21 コンピュータアーキテクチャエミュレーションシステム Expired - Lifetime JP3553834B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/176112 1998-10-21
US09/176,112 US6463582B1 (en) 1998-10-21 1998-10-21 Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method

Publications (2)

Publication Number Publication Date
JP2000132408A true JP2000132408A (ja) 2000-05-12
JP3553834B2 JP3553834B2 (ja) 2004-08-11

Family

ID=22643028

Family Applications (1)

Application Number Title Priority Date Filing Date
JP29957699A Expired - Lifetime JP3553834B2 (ja) 1998-10-21 1999-10-21 コンピュータアーキテクチャエミュレーションシステム

Country Status (4)

Country Link
US (2) US6463582B1 (ja)
JP (1) JP3553834B2 (ja)
CN (1) CN1308818C (ja)
DE (1) DE19945992B4 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002073345A (ja) * 2000-08-25 2002-03-12 Fujitsu Ltd 情報処理装置及び記録媒体
JP2004062858A (ja) * 2002-07-29 2004-02-26 Arm Ltd データ処理装置内のアプリケーション・コードのコンパイル
JP2004355277A (ja) * 2003-05-28 2004-12-16 Matsushita Electric Ind Co Ltd プログラム実行制御装置、プログラム実行制御方法
JP2018014142A (ja) * 2011-12-23 2018-01-25 ザ アリゾナ ボード オブ リージェンツ オン ビハーフ オブ ザ ユニバーシティー オブ アリゾナ データベース管理システムにおけるマイクロ特化の方法

Families Citing this family (416)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11296381A (ja) * 1998-04-08 1999-10-29 Matsushita Electric Ind Co Ltd 仮想マシン及びコンパイラ
US6199201B1 (en) * 1998-08-03 2001-03-06 Xerox Corporation Software constructs that facilitate partial evaluation of source code
JP4573189B2 (ja) * 1998-10-10 2010-11-04 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムコード変換方法
EP0997815A3 (en) * 1998-10-29 2004-05-26 Texas Instruments Incorporated Interactive translation system and method
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US7941647B2 (en) 1999-01-28 2011-05-10 Ati Technologies Ulc Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
US8121828B2 (en) 1999-01-28 2012-02-21 Ati Technologies Ulc Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US7275246B1 (en) * 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
US6826748B1 (en) * 1999-01-28 2004-11-30 Ati International Srl Profiling program execution into registers of a computer
JP4088379B2 (ja) * 1999-01-29 2008-05-21 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法及び装置、並びにスタック・トレース方法及び装置
US6662354B1 (en) * 1999-01-29 2003-12-09 Unisys Corporation Determining destinations of a dynamic branch
US7058932B1 (en) * 1999-04-19 2006-06-06 Unisys Corporation System, computer program product, and methods for emulation of computer programs
US6779107B1 (en) 1999-05-28 2004-08-17 Ati International Srl Computer execution by opportunistic adaptation
JP2001005675A (ja) * 1999-06-21 2001-01-12 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
CA2279222C (en) * 1999-07-30 2002-07-16 Ibm Canada Limited-Ibm Canada Limitee Direct call threaded code
US6772106B1 (en) * 1999-08-20 2004-08-03 Hewlett-Packard Development Company, L.P. Retargetable computer design system
US6629312B1 (en) * 1999-08-20 2003-09-30 Hewlett-Packard Development Company, L.P. Programmatic synthesis of a machine description for retargeting a compiler
WO2001022228A1 (en) 1999-09-17 2001-03-29 Nortel Networks Limited System and method for producing a verification system for verifying procedure interfaces
US6714904B1 (en) * 1999-10-13 2004-03-30 Transmeta Corporation System for using rate of exception event generation during execution of translated instructions to control optimization of the translated instructions
US6880152B1 (en) * 1999-10-13 2005-04-12 Transmeta Corporation Method of determining a mode of code generation
US7761857B1 (en) * 1999-10-13 2010-07-20 Robert Bedichek Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts
JP3608993B2 (ja) * 1999-11-10 2005-01-12 富士通株式会社 コンパイラ装置及びコンパイラプログラムを記録した記録媒体
JP3356742B2 (ja) * 1999-11-17 2002-12-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム実行方法
GB2364579A (en) * 1999-11-30 2002-01-30 Sgs Thomson Microelectronics An assembler using a descriptor file that contains information descriptive of the instruction set of a target microprocessor
US6681387B1 (en) * 1999-12-01 2004-01-20 Board Of Trustees Of The University Of Illinois Method and apparatus for instruction execution hot spot detection and monitoring in a data processing unit
DE19963832A1 (de) * 1999-12-30 2001-07-05 Ericsson Telefon Ab L M Programmprofilierung
US7100164B1 (en) * 2000-01-06 2006-08-29 Synopsys, Inc. Method and apparatus for converting a concurrent control flow graph into a sequential control flow graph
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
US20020066081A1 (en) * 2000-02-09 2002-05-30 Evelyn Duesterwald Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator
US6594821B1 (en) 2000-03-30 2003-07-15 Transmeta Corporation Translation consistency checking for modified target instructions by comparing to original copy
US6862565B1 (en) * 2000-04-13 2005-03-01 Hewlett-Packard Development Company, L.P. Method and apparatus for validating cross-architecture ISA emulation
US6862730B1 (en) * 2000-04-26 2005-03-01 Lucent Technologies Inc. Register allocation in code translation between processors
JP2001325111A (ja) * 2000-05-16 2001-11-22 Hitachi Ltd 投機機構向けコンパイル方法
US20020170034A1 (en) * 2000-06-16 2002-11-14 Reeve Chris L. Method for debugging a dynamic program compiler, interpreter, or optimizer
US6615300B1 (en) * 2000-06-19 2003-09-02 Transmeta Corporation Fast look-up of indirect branch destination in a dynamic translation system
SE0002440D0 (sv) * 2000-06-28 2000-06-28 Virtutech Ab Interpreter
US20020062476A1 (en) * 2000-07-14 2002-05-23 Saxe James Benjamin Case-reduced verification condition generation system and method by use of dynamic single assumption and assigning labels to variables at control join points
US6701518B1 (en) * 2000-08-03 2004-03-02 Hewlett-Packard Development Company, L.P. System and method for enabling efficient processing of a program that includes assertion instructions
US6868434B1 (en) * 2000-08-07 2005-03-15 Sun Microsystems, Inc. System and method for testing server latencies using multiple concurrent users in a computer system
US7124407B1 (en) * 2000-08-16 2006-10-17 Sun Microsystems, Inc. Method and apparatus for caching native code in a virtual machine interpreter
US6691306B1 (en) * 2000-12-22 2004-02-10 Lsi Logic Corporation Use of limited program space of general purpose processor for unlimited sequence of translated instructions
US6721943B2 (en) * 2001-03-30 2004-04-13 Intel Corporation Compile-time memory coalescing for dynamic arrays
US7099970B1 (en) * 2001-04-03 2006-08-29 Electronic Label Technology, Inc. Apparatus and method to enhance a one-wire bus
US7356673B2 (en) * 2001-04-30 2008-04-08 International Business Machines Corporation System and method including distributed instruction buffers for storing frequently executed instructions in predecoded form
CA2346762A1 (en) * 2001-05-07 2002-11-07 Ibm Canada Limited-Ibm Canada Limitee Compiler generation of instruction sequences for unresolved storage devices
US6993751B2 (en) * 2001-05-14 2006-01-31 Microsoft Corporation Placing exception throwing instructions in compiled code
US6851110B2 (en) * 2001-06-07 2005-02-01 Hewlett-Packard Development Company, L.P. Optimizing an executable computer program having address-bridging code segments
US7110525B1 (en) 2001-06-25 2006-09-19 Toby Heller Agent training sensitive call routing system
US6880154B2 (en) * 2001-06-29 2005-04-12 Intel Corporation Alias-free test for dynamic array structures
US20030033593A1 (en) * 2001-08-08 2003-02-13 Evelyn Duesterwald Dynamic execution layer interface for explicitly or transparently executing application or system binaries
US6966053B2 (en) * 2001-08-10 2005-11-15 The Boeing Company Architecture for automated analysis and design with read only structure
US7207035B2 (en) * 2001-08-23 2007-04-17 International Business Machines Corporation Apparatus and method for converting an instruction and data trace to an executable program
US6857119B1 (en) * 2001-09-25 2005-02-15 Oracle International Corporation Techniques for modifying a compiled application
CA2359862A1 (en) * 2001-10-24 2003-04-24 Ibm Canada Limited - Ibm Canada Limitee Using identifiers and counters for controlled optimization compilation
US6976249B1 (en) * 2001-11-12 2005-12-13 Apple Computer, Inc. Method for embedding object codes in source codes
US6738969B2 (en) 2001-11-14 2004-05-18 Sun Microsystems, Inc. Non-intrusive gathering of code usage information to facilitate removing unused compiled code
US20030093774A1 (en) * 2001-11-14 2003-05-15 Ronald Hilton State-specific variants of translated code under emulation
US20030101439A1 (en) * 2001-11-29 2003-05-29 Giuseppe Desoli System and method for supporting emulation of a computer system through dynamic code caching and transformation
US7251594B2 (en) * 2001-12-21 2007-07-31 Hitachi, Ltd. Execution time modification of instruction emulation parameters
DE10204345A1 (de) * 2002-02-01 2003-08-14 Systemonic Ag Verfahren zur Befehlsbearbeitung
GB0202728D0 (en) * 2002-02-06 2002-03-27 Transitive Technologies Ltd Condition code flag emulation for program code conversion
US7331040B2 (en) * 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
US7134115B2 (en) * 2002-02-07 2006-11-07 Matsushita Electric Industrial Co., Ltd. Apparatus, method, and program for breakpoint setting
US20030167457A1 (en) * 2002-03-01 2003-09-04 Thompson Carol L. System and method for providing an optimizer display tool
KR100591117B1 (ko) 2002-03-20 2006-06-19 리서치 인 모션 리미티드 이동 장치에서의 안전 가비지 수집 시스템 및 방법
US8086438B2 (en) * 2002-03-27 2011-12-27 Synopsys, Inc. Method and system for instruction-set architecture simulation using just in time compilation
US7506321B1 (en) * 2002-06-11 2009-03-17 Unisys Corporation Computer emulator employing direct execution of compiled functions
JP2004021425A (ja) * 2002-06-13 2004-01-22 Hitachi Ltd コンパイラにおけるメモリ配置方式
JP3956113B2 (ja) * 2002-06-13 2007-08-08 インターナショナル・ビジネス・マシーンズ・コーポレーション データ処理装置及びプログラム
EP1377034A1 (en) * 2002-06-27 2004-01-02 Thomson Licensing S.A. Data processing device and method for interactive television
US7926032B2 (en) * 2002-07-18 2011-04-12 International Business Machines Corporation Two meta-level modeling approach for mapping typed data
US7219328B2 (en) * 2002-08-28 2007-05-15 Honeywell International Inc. Model-based composable code generation
US7953588B2 (en) * 2002-09-17 2011-05-31 International Business Machines Corporation Method and system for efficient emulation of multiprocessor address translation on a multiprocessor host
US9043194B2 (en) * 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency
US7146607B2 (en) * 2002-09-17 2006-12-05 International Business Machines Corporation Method and system for transparent dynamic optimization in a multiprocessing environment
US7496494B2 (en) * 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US8108843B2 (en) 2002-09-17 2012-01-31 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US7124237B2 (en) * 2002-10-03 2006-10-17 Seagate Technology Llc Virtual machine emulation in the memory space of a programmable processor
US6775810B2 (en) * 2002-10-08 2004-08-10 Sun Microsystems, Inc. Boosting simulation performance by dynamically customizing segmented object codes based on stimulus coverage
US7603664B2 (en) * 2002-10-22 2009-10-13 Sun Microsystems, Inc. System and method for marking software code
US20040095348A1 (en) * 2002-11-19 2004-05-20 Bleiweiss Avi I. Shading language interface and method
US7194736B2 (en) * 2002-12-10 2007-03-20 Intel Corporation Dynamic division optimization for a just-in-time compiler
US7143025B2 (en) * 2002-12-13 2006-11-28 Sun Microsystems, Inc. Web simulator
US7533012B2 (en) * 2002-12-13 2009-05-12 Sun Microsystems, Inc. Multi-user web simulator
US20040117778A1 (en) * 2002-12-16 2004-06-17 Sehr David C. Optimization of software code using N-bit pointer conversion
US7930490B2 (en) * 2002-12-23 2011-04-19 Siemens Industry, Inc. Method for utilizing a memory device for a programmable logic controller (PLC)
US7188062B1 (en) * 2002-12-27 2007-03-06 Unisys Corporation Configuration management for an emulator operating system
US7111287B2 (en) * 2003-01-10 2006-09-19 International Business Machines Corporation Global processor resource assignment in an assembler
US7100154B2 (en) * 2003-01-16 2006-08-29 International Business Machines Corporation Dynamic compiler apparatus and method that stores and uses persistent execution statistics
US7389501B1 (en) * 2003-02-18 2008-06-17 Microsoft Corporation System and method for register allocation using SSA construction
US7310723B1 (en) 2003-04-02 2007-12-18 Transmeta Corporation Methods and systems employing a flag for deferring exception handling to a commit or rollback point
GB0307805D0 (en) * 2003-04-04 2003-05-07 Intuwave Ltd A method of enabling source code to be used to generate a first and a second software application,each compatible with a different operating system
GB0309056D0 (en) * 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
US7308682B2 (en) * 2003-04-25 2007-12-11 Intel Corporation Method and apparatus for recovering data values in dynamic runtime systems
US7284100B2 (en) 2003-05-12 2007-10-16 International Business Machines Corporation Invalidating storage, clearing buffer entries, and an instruction therefor
US7159122B2 (en) * 2003-05-12 2007-01-02 International Business Machines Corporation Message digest instructions
US20040243379A1 (en) * 2003-05-29 2004-12-02 Dominic Paulraj Ideal machine simulator with infinite resources to predict processor design performance
US7219329B2 (en) * 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
US7260815B1 (en) * 2003-06-30 2007-08-21 Vmware, Inc. Method and apparatus for managing registers in a binary translator
GB0316531D0 (en) * 2003-07-15 2003-08-20 Transitive Ltd Method and apparatus for performing native binding
US20050028132A1 (en) * 2003-07-31 2005-02-03 Srinivasamurthy Venugopal K. Application specific optimization of interpreters for embedded systems
US20050028148A1 (en) * 2003-08-01 2005-02-03 Sun Microsystems, Inc. Method for dynamic recompilation of a program
US7318222B2 (en) * 2003-08-27 2008-01-08 Sun Microsystems, Inc. Methods for execution control acquistion of a program and for executing an optimized version of a program
US7207038B2 (en) * 2003-08-29 2007-04-17 Nokia Corporation Constructing control flows graphs of binary executable programs at post-link time
DE10344847A1 (de) * 2003-09-26 2005-04-14 Philips Intellectual Property & Standards Gmbh Verfahren zum Compilieren eines Quellcode-Programms in ein maschinenlesbares Zielobjekt-Programm in einer Netzwerkumgebung
US7051301B2 (en) * 2003-10-01 2006-05-23 Hewlett-Packard Development Company, L.P. System and method for building a test case including a summary of instructions
US7584455B2 (en) * 2003-10-23 2009-09-01 Microsoft Corporation Predicate-based test coverage and generation
US20050166192A1 (en) * 2003-11-06 2005-07-28 Polcha Michael P. Run time compiler system and method
US20050149913A1 (en) * 2003-12-29 2005-07-07 Yun Wang Apparatus and methods to optimize code in view of masking status of exceptions
US7747659B2 (en) * 2004-01-05 2010-06-29 International Business Machines Corporation Garbage collector with eager read barrier
US20050154573A1 (en) * 2004-01-08 2005-07-14 Maly John W. Systems and methods for initializing a lockstep mode test case simulation of a multi-core processor design
JP4701611B2 (ja) * 2004-01-15 2011-06-15 株式会社日立製作所 動的変換方式のエミュレータ向けメモリ管理方法
US7478374B2 (en) * 2004-03-22 2009-01-13 Intel Corporation Debug system having assembler correcting register allocation errors
US8677312B1 (en) 2004-03-30 2014-03-18 Synopsys, Inc. Generation of compiler description from architecture description
US8689202B1 (en) 2004-03-30 2014-04-01 Synopsys, Inc. Scheduling of instructions
US7665070B2 (en) * 2004-04-23 2010-02-16 International Business Machines Corporation Method and apparatus for a computing system using meta program representation
CN1294495C (zh) * 2004-05-20 2007-01-10 北京大学 模拟器构造方法
JP4178278B2 (ja) * 2004-05-25 2008-11-12 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、最適化方法、コンパイラプログラム、及び記録媒体
US9280326B1 (en) 2004-05-26 2016-03-08 Synopsys, Inc. Compiler retargeting based on instruction semantic models
CN100359470C (zh) * 2004-06-30 2008-01-02 中国科学院计算技术研究所 动静结合二进制翻译中静态信息不完备的处理方法及装置
US20060037005A1 (en) * 2004-08-15 2006-02-16 Russell Paul F Method and apparatus for increasing computer security
US7747992B2 (en) * 2004-08-23 2010-06-29 Intel Corporation Methods and apparatus for creating software basic block layouts
US20060048106A1 (en) * 2004-08-27 2006-03-02 International Business Machines Corporation Link-time profile-based method for reducing run-time image of executables
US7784039B2 (en) * 2004-09-22 2010-08-24 Panasonic Corporation Compiler, compilation method, and compilation program
US20060070042A1 (en) * 2004-09-24 2006-03-30 Muratori Richard D Automatic clocking in shared-memory co-simulation
US7624384B2 (en) * 2004-11-30 2009-11-24 Intel Corporation Apparatus, system, and method of dynamic binary translation with translation reuse
US20060195732A1 (en) * 2005-02-11 2006-08-31 Joerg Deutschle Method and system for executing test cases for a device under verification
US7913239B2 (en) * 2005-03-08 2011-03-22 International Business Machines Corporation Method and apparatus for a programming framework for pattern matching and transformation of intermediate language expression trees
US7565217B2 (en) * 2005-04-01 2009-07-21 International Business Machines Corporation Traversal of empty regions in a searchable data structure
US7805708B2 (en) * 2005-05-13 2010-09-28 Texas Instruments Incorporated Automatic tool to eliminate conflict cache misses
US7770152B1 (en) * 2005-05-20 2010-08-03 Oracle America, Inc. Method and apparatus for coordinating state and execution context of interpreted languages
US8413162B1 (en) 2005-06-28 2013-04-02 Guillermo J. Rozas Multi-threading based on rollback
US20070006189A1 (en) * 2005-06-30 2007-01-04 Intel Corporation Apparatus, system, and method of detecting modification in a self modifying code
JP4778286B2 (ja) * 2005-09-28 2011-09-21 パナソニック株式会社 コンパイラ装置
US20070169012A1 (en) * 2005-11-14 2007-07-19 Microsoft Corporation Asynchronous just-in-time compilation
FR2895103B1 (fr) * 2005-12-19 2008-02-22 Dxo Labs Sa Procede et systeme de traitement de donnees numeriques
US20070150881A1 (en) * 2005-12-22 2007-06-28 Motorola, Inc. Method and system for run-time cache logging
US9830174B2 (en) * 2005-12-22 2017-11-28 Synopsys, Inc. Dynamic host code generation from architecture description for fast simulation
US7813909B2 (en) * 2006-05-03 2010-10-12 Sony Computer Entertainment Inc. Register mapping in emulation of a target system on a host system
US7770050B2 (en) * 2006-05-03 2010-08-03 Sony Computer Entertainment Inc. Method and apparatus for resolving clock management issues in emulation involving both interpreted and translated code
US7792666B2 (en) * 2006-05-03 2010-09-07 Sony Computer Entertainment Inc. Translation block invalidation prehints in emulation of a target system on a host system
US8266605B2 (en) * 2006-02-22 2012-09-11 Wind River Systems, Inc. Method and system for optimizing performance based on cache analysis
US8615743B2 (en) * 2006-02-27 2013-12-24 Microsoft Corporation Adaptive compiled code
US7873952B2 (en) * 2006-03-09 2011-01-18 Oracle America, Inc. Code transformation to optimize fragments that implement constant loading
US7904894B2 (en) * 2006-03-29 2011-03-08 Microsoft Corporation Automatically optimize performance of package execution
US8099538B2 (en) 2006-03-29 2012-01-17 Intel Corporation Increasing functionality of a reader-writer lock
US7870544B2 (en) * 2006-04-05 2011-01-11 International Business Machines Corporation Insuring maximum code motion of accesses to DMA buffers
US7568189B2 (en) * 2006-05-03 2009-07-28 Sony Computer Entertainment Inc. Code translation and pipeline optimization
JP4884297B2 (ja) * 2006-05-26 2012-02-29 パナソニック株式会社 コンパイラ装置、コンパイル方法およびコンパイラプログラム
GB0613409D0 (en) * 2006-07-06 2006-08-16 Imperas Inc Technique for fast simulation of multi-processor systems with transactional coherence and consistency
US9658849B2 (en) * 2006-07-06 2017-05-23 Imperas Software Ltd. Processor simulation environment
US8301870B2 (en) * 2006-07-27 2012-10-30 International Business Machines Corporation Method and apparatus for fast synchronization and out-of-order execution of instructions in a meta-program based computing system
JP2008097249A (ja) * 2006-10-11 2008-04-24 Internatl Business Mach Corp <Ibm> プログラム中の命令列をより高速な命令に置換する技術
US7934208B2 (en) * 2006-10-13 2011-04-26 International Business Machines Corporation Method for transparent on-line dynamic binary optimization
US7739256B2 (en) * 2006-12-07 2010-06-15 Norman Powell Method for selling custom business software and software exchange marketplace
US8799581B2 (en) * 2007-01-05 2014-08-05 International Business Machines Corporation Cache coherence monitoring and feedback
US8671248B2 (en) * 2007-01-05 2014-03-11 International Business Machines Corporation Architecture support of memory access coloring
US8214813B2 (en) 2007-01-12 2012-07-03 Microsoft Corporation Code optimization across interfaces
MX2009007876A (es) * 2007-01-24 2009-07-31 Ibm Metodo para emular eficientemente configuraciones de codigos de condiciones de arquitectura de computadora.
US7890939B2 (en) * 2007-02-13 2011-02-15 Microsoft Corporation Partial methods
US8443029B2 (en) 2007-03-01 2013-05-14 International Business Machines Corporation Round for reround mode in a decimal floating point instruction
US7934073B2 (en) * 2007-03-14 2011-04-26 Andes Technology Corporation Method for performing jump and translation state change at the same time
US8245202B2 (en) * 2007-04-18 2012-08-14 Sony Computer Entertainment Inc. Processor emulation using speculative forward translation
US8146065B2 (en) * 2007-08-13 2012-03-27 International Business Machines Corporation Running time of short running applications by effectively interleaving compilation with computation in a just-in-time environment
US20090113403A1 (en) * 2007-09-27 2009-04-30 Microsoft Corporation Replacing no operations with auxiliary code
US8527976B2 (en) * 2007-11-14 2013-09-03 Nec Laboratories America, Inc. System and method for generating error traces for concurrency bugs
US7991962B2 (en) * 2007-12-10 2011-08-02 International Business Machines Corporation System and method of using threads and thread-local storage
US8108868B2 (en) * 2007-12-18 2012-01-31 Microsoft Corporation Workflow execution plans through completion condition critical path analysis
US8060356B2 (en) 2007-12-19 2011-11-15 Sony Computer Entertainment Inc. Processor emulation using fragment level translation
US8117417B2 (en) 2008-01-11 2012-02-14 International Business Machines Corporation Dynamic address translation with change record override
US8041923B2 (en) * 2008-01-11 2011-10-18 International Business Machines Corporation Load page table entry address instruction execution based on an address translation format control field
US8677098B2 (en) 2008-01-11 2014-03-18 International Business Machines Corporation Dynamic address translation with fetch protection
US8417916B2 (en) 2008-01-11 2013-04-09 International Business Machines Corporation Perform frame management function instruction for setting storage keys and clearing blocks of main storage
US7895419B2 (en) 2008-01-11 2011-02-22 International Business Machines Corporation Rotate then operate on selected bits facility and instructions therefore
US7734900B2 (en) 2008-01-11 2010-06-08 International Business Machines Corporation Computer configuration virtual topology discovery and instruction therefore
US8335906B2 (en) * 2008-01-11 2012-12-18 International Business Machines Corporation Perform frame management function instruction for clearing blocks of main storage
US8037278B2 (en) 2008-01-11 2011-10-11 International Business Machines Corporation Dynamic address translation with format control
US8082405B2 (en) * 2008-01-11 2011-12-20 International Business Machines Corporation Dynamic address translation with fetch protection
US8019964B2 (en) * 2008-01-11 2011-09-13 International Buisness Machines Corporation Dynamic address translation with DAT protection
US7739434B2 (en) * 2008-01-11 2010-06-15 International Business Machines Corporation Performing a configuration virtual topology change and instruction therefore
US8041922B2 (en) * 2008-01-11 2011-10-18 International Business Machines Corporation Enhanced dynamic address translation with load real address function
US8151083B2 (en) * 2008-01-11 2012-04-03 International Business Machines Corporation Dynamic address translation with frame management
US8103851B2 (en) * 2008-01-11 2012-01-24 International Business Machines Corporation Dynamic address translation with translation table entry format control for indentifying format of the translation table entry
US8086811B2 (en) 2008-02-25 2011-12-27 International Business Machines Corporation Optimizations of a perform frame management function issued by pageable guests
US8176280B2 (en) 2008-02-25 2012-05-08 International Business Machines Corporation Use of test protection instruction in computing environments that support pageable guests
US8095773B2 (en) 2008-02-26 2012-01-10 International Business Machines Corporation Dynamic address translation with translation exception qualifier
US8291397B2 (en) * 2008-04-02 2012-10-16 International Business Machines Corporation Compiler optimized function variants for use when return codes are ignored
US8453129B2 (en) * 2008-04-24 2013-05-28 International Business Machines Corporation Using hardware interrupts to drive dynamic binary code recompilation
US8407681B2 (en) * 2008-05-23 2013-03-26 International Business Machines Corporation System and method for changing variables at runtime
US8281296B2 (en) * 2008-08-12 2012-10-02 Oracle America, Inc. Cross-ISA inlining in a system virtual machine
GB2463942B (en) * 2008-10-03 2012-08-08 Icera Inc Disassembling an executable to analyse function calls to minimise cache misses
US20100125554A1 (en) * 2008-11-18 2010-05-20 Unisys Corporation Memory Recovery Across Reboots of an Emulated Operating System
US8387026B1 (en) * 2008-12-24 2013-02-26 Google Inc. Compile-time feedback-directed optimizations using estimated edge profiles from hardware-event sampling
KR20100082185A (ko) * 2009-01-08 2010-07-16 삼성전자주식회사 플래시 메모리, 캐시 메모리, 그리고 제어기를 포함하는 사용자 장치
US8308185B2 (en) * 2009-01-30 2012-11-13 Weaver Danny C Pin-engaging drawbar and lock plate assembly
US10152504B2 (en) 2009-03-11 2018-12-11 Actian Netherlands B.V. Column-store database architecture utilizing positional delta tree update system and methods
US8438558B1 (en) 2009-03-27 2013-05-07 Google Inc. System and method of updating programs and data
US8949103B2 (en) * 2009-05-01 2015-02-03 Microsoft Corporation Program code simulator
US8677329B2 (en) 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
US9117071B2 (en) 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
US8527969B2 (en) * 2009-07-14 2013-09-03 Unisys Corporation Systems, methods, and computer programs for dynamic binary translation in an interpreter
US8650240B2 (en) * 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8577950B2 (en) * 2009-08-17 2013-11-05 International Business Machines Corporation Matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8752008B2 (en) * 2009-09-02 2014-06-10 Advanced Micro Devices, Inc. Lightweight service based dynamic binary rewriter framework
US8447583B2 (en) * 2009-09-18 2013-05-21 International Business Machines Corporation Self initialized host cell spatially aware emulation of a computer instruction set
US8428930B2 (en) * 2009-09-18 2013-04-23 International Business Machines Corporation Page mapped spatially aware emulation of a computer instruction set
US8949106B2 (en) * 2009-09-18 2015-02-03 International Business Machines Corporation Just in time compiler in spatially aware emulation of a guest computer instruction set
US9158566B2 (en) 2009-09-18 2015-10-13 International Business Machines Corporation Page mapped spatially aware emulation of computer instruction set
US8301434B2 (en) 2009-09-18 2012-10-30 International Buisness Machines Corporation Host cell spatially aware emulation of a guest wild branch
US8617049B2 (en) * 2009-09-18 2013-12-31 Ethicon Endo-Surgery, Inc. Symmetrical drive system for an implantable restriction device
US8510511B2 (en) * 2009-12-14 2013-08-13 International Business Machines Corporation Reducing interprocessor communications pursuant to updating of a storage key
US8918601B2 (en) * 2009-12-14 2014-12-23 International Business Machines Corporation Deferred page clearing in a multiprocessor computer system
US8930635B2 (en) * 2009-12-14 2015-01-06 International Business Machines Corporation Page invalidation processing with setting of storage key to predefined value
US8806179B2 (en) 2009-12-15 2014-08-12 International Business Machines Corporation Non-quiescing key setting facility
US8418156B2 (en) * 2009-12-16 2013-04-09 Intel Corporation Two-stage commit (TSC) region for dynamic binary optimization in X86
US8505034B2 (en) 2009-12-17 2013-08-06 Amazon Technologies, Inc. Automated service interface optimization
US8516230B2 (en) 2009-12-29 2013-08-20 International Business Machines Corporation SPE software instruction cache
US8438340B2 (en) * 2010-02-18 2013-05-07 International Business Machines Corporation Executing atomic store disjoint instructions
US8850166B2 (en) * 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
US8914619B2 (en) 2010-06-22 2014-12-16 International Business Machines Corporation High-word facility for extending the number of general purpose registers available to instructions
US8504754B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Identification of types of sources of adapter interruptions
US8918573B2 (en) 2010-06-23 2014-12-23 International Business Machines Corporation Input/output (I/O) expansion response processing in a peripheral component interconnect express (PCIe) environment
US9213661B2 (en) 2010-06-23 2015-12-15 International Business Machines Corporation Enable/disable adapters of a computing environment
US8468284B2 (en) 2010-06-23 2013-06-18 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US8650335B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Measurement facility for adapter functions
US8478922B2 (en) 2010-06-23 2013-07-02 International Business Machines Corporation Controlling a rate at which adapter interruption requests are processed
US9342352B2 (en) 2010-06-23 2016-05-17 International Business Machines Corporation Guest access to address spaces of adapter
US8621112B2 (en) 2010-06-23 2013-12-31 International Business Machines Corporation Discovery by operating system of information relating to adapter functions accessible to the operating system
US8645606B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Upbound input/output expansion request and response processing in a PCIe architecture
US8683108B2 (en) 2010-06-23 2014-03-25 International Business Machines Corporation Connected input/output hub management
US8639858B2 (en) 2010-06-23 2014-01-28 International Business Machines Corporation Resizing address spaces concurrent to accessing the address spaces
US8645767B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Scalable I/O adapter function level error detection, isolation, and reporting
US8510599B2 (en) 2010-06-23 2013-08-13 International Business Machines Corporation Managing processing associated with hardware events
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US8505032B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Operating system notification of actions to be taken responsive to adapter events
US9195623B2 (en) 2010-06-23 2015-11-24 International Business Machines Corporation Multiple address spaces per adapter with address translation
US8745292B2 (en) 2010-06-23 2014-06-03 International Business Machines Corporation System and method for routing I/O expansion requests and responses in a PCIE architecture
US8615622B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Non-standard I/O adapters in a standardized I/O architecture
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8549182B2 (en) 2010-06-23 2013-10-01 International Business Machines Corporation Store/store block instructions for communicating with adapters
US8566480B2 (en) 2010-06-23 2013-10-22 International Business Machines Corporation Load instruction for communicating with adapters
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8626970B2 (en) 2010-06-23 2014-01-07 International Business Machines Corporation Controlling access by a configuration to an adapter function
US8650337B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Runtime determination of translation formats for adapter functions
US8595469B2 (en) 2010-06-24 2013-11-26 International Business Machines Corporation Diagnose instruction for serializing processing
US9851969B2 (en) 2010-06-24 2017-12-26 International Business Machines Corporation Function virtualization facility for function query of a processor
US8407701B2 (en) 2010-06-24 2013-03-26 International Business Machines Corporation Facilitating quiesce operations within a logically partitioned computer system
US10521231B2 (en) 2010-06-24 2019-12-31 International Business Machines Corporation Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor
US8522225B2 (en) 2010-06-25 2013-08-27 International Business Machines Corporation Rewriting branch instructions using branch stubs
US9459851B2 (en) 2010-06-25 2016-10-04 International Business Machines Corporation Arranging binary code based on call graph partitioning
US20110320786A1 (en) 2010-06-25 2011-12-29 International Business Machines Corporation Dynamically Rewriting Branch Instructions in Response to Cache Line Eviction
US8631225B2 (en) 2010-06-25 2014-01-14 International Business Machines Corporation Dynamically rewriting branch instructions to directly target an instruction cache location
US9600281B2 (en) 2010-07-12 2017-03-21 International Business Machines Corporation Matrix multiplication operations using pair-wise load and splat operations
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US20120124555A1 (en) * 2010-11-11 2012-05-17 Codekko Software, Inc. Optimization of Compiled Control Objects
US9063743B2 (en) * 2010-11-23 2015-06-23 Sap Se Model-based programming, configuration, and integration of networked embedded devices
US20120198458A1 (en) * 2010-12-16 2012-08-02 Advanced Micro Devices, Inc. Methods and Systems for Synchronous Operation of a Processing Device
KR20120083803A (ko) * 2011-01-18 2012-07-26 삼성전자주식회사 가상머신을 위한 추가코드 생성장치 및 방법
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103209A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103245A2 (en) * 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
US9495136B2 (en) * 2011-01-28 2016-11-15 International Business Machines Corporation Using aliasing information for dynamic binary optimization
CN103493015A (zh) * 2011-04-20 2014-01-01 飞思卡尔半导体公司 生成资源高效的计算机程序代码的方法和装置
US8533714B2 (en) 2011-05-03 2013-09-10 International Business Machines Corporation Dynamic virtual machine domain configuration and virtual machine relocation management
US8782645B2 (en) * 2011-05-11 2014-07-15 Advanced Micro Devices, Inc. Automatic load balancing for heterogeneous cores
US9032526B2 (en) 2011-05-12 2015-05-12 Microsoft Technology Licensing, Llc Emulating mixed-code programs using a virtual machine instance
US9037907B2 (en) 2011-06-10 2015-05-19 International Business Machines Corporation Operator message commands for testing a coupling facility
US9116789B2 (en) 2011-06-10 2015-08-25 International Business Machines Corporation Chaining move specification blocks
US9021180B2 (en) 2011-06-10 2015-04-28 International Business Machines Corporation Clearing blocks of storage class memory
US9116788B2 (en) 2011-06-10 2015-08-25 International Business Machines Corporation Using extended asynchronous data mover indirect data address words
US9116634B2 (en) 2011-06-10 2015-08-25 International Business Machines Corporation Configure storage class memory command
US9058243B2 (en) 2011-06-10 2015-06-16 International Business Machines Corporation Releasing blocks of storage class memory
US9058275B2 (en) 2011-06-10 2015-06-16 International Business Machines Corporation Data returned responsive to executing a start subchannel instruction
US9021179B2 (en) 2011-06-10 2015-04-28 International Business Machines Corporation Store storage class memory information command
US8689240B2 (en) 2011-06-10 2014-04-01 International Business Machines Corporation Transmitting operator message commands to a coupling facility
US9021226B2 (en) 2011-06-10 2015-04-28 International Business Machines Corporation Moving blocks of data between main memory and storage class memory
US8918797B2 (en) 2011-06-10 2014-12-23 International Business Machines Corporation Processing operator message commands
US9323668B2 (en) 2011-06-10 2016-04-26 International Business Machines Corporation Deconfigure storage class memory command
US8799522B2 (en) 2011-06-10 2014-08-05 International Business Machines Corporation Executing a start operator message command
US8560737B2 (en) 2011-06-10 2013-10-15 International Business Machines Corporation Managing operator message buffers in a coupling facility
US8549094B2 (en) 2011-06-30 2013-10-01 International Business Machines Corporation Facilitating communication between isolated memory spaces of a communications environment
US9116685B2 (en) 2011-07-19 2015-08-25 Qualcomm Incorporated Table call instruction for frequently called functions
JP2013061810A (ja) * 2011-09-13 2013-04-04 Fujitsu Ltd 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム
US8600727B2 (en) * 2011-10-11 2013-12-03 Unisys Corporation Streamlined execution of emulated code using block-based translation mode
US8806452B2 (en) * 2011-11-10 2014-08-12 International Business Machines Corporation Transformation of computer programs and eliminating errors
US20130132061A1 (en) * 2011-11-18 2013-05-23 Michael J. Rieschl Just-in-time static translation system for emulated computing environments
US10365900B2 (en) 2011-12-23 2019-07-30 Dataware Ventures, Llc Broadening field specialization
US9329861B2 (en) 2011-12-29 2016-05-03 International Business Machines Corporation Convert to zoned format from decimal floating point format
US9335993B2 (en) 2011-12-29 2016-05-10 International Business Machines Corporation Convert from zoned format to decimal floating point format
US9110878B2 (en) 2012-01-18 2015-08-18 International Business Machines Corporation Use of a warning track interruption facility by a program
US9104508B2 (en) 2012-01-18 2015-08-11 International Business Machines Corporation Providing by one program to another program access to a warning track facility
US8850450B2 (en) 2012-01-18 2014-09-30 International Business Machines Corporation Warning track interruption facility
DE112013000453B4 (de) 2012-01-31 2023-05-17 International Business Machines Corporation Hauptverzweigungsanweisungen mit Transaktionsspeicher
RU2491615C1 (ru) 2012-02-24 2013-08-27 Закрытое акционерное общество "Лаборатория Касперского" Система и способ формирования записей для обнаружения программного обеспечения
US9268566B2 (en) 2012-03-15 2016-02-23 International Business Machines Corporation Character data match determination by loading registers at most up to memory block boundary and comparing
US9459867B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a specified memory boundary indicated by the instruction
US9454367B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Finding the length of a set of character data having a termination character
US9715383B2 (en) 2012-03-15 2017-07-25 International Business Machines Corporation Vector find element equal instruction
US9459864B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Vector string range compare
US9454366B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Copying character data having a termination character from one memory location to another
US9459868B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a dynamically determined memory boundary
US9710266B2 (en) 2012-03-15 2017-07-18 International Business Machines Corporation Instruction to compute the distance to a specified memory boundary
US9588762B2 (en) 2012-03-15 2017-03-07 International Business Machines Corporation Vector find element not equal instruction
US9280347B2 (en) 2012-03-15 2016-03-08 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
US9922090B1 (en) 2012-03-27 2018-03-20 Actian Netherlands, B.V. System and method for automatic vertical decomposition of a table for improving input/output and memory utilization in a database
CN103365931B (zh) * 2012-04-10 2016-12-14 南京中兴新软件有限责任公司 性能分析工具中快速定位函数性能记录的方法及装置
US9367292B2 (en) * 2012-06-11 2016-06-14 Empire Technology Development Llc Modulating dynamic optimizations of a computer program
US8682877B2 (en) 2012-06-15 2014-03-25 International Business Machines Corporation Constrained transaction execution
US9336046B2 (en) 2012-06-15 2016-05-10 International Business Machines Corporation Transaction abort processing
DE102013210160A1 (de) 2012-06-15 2013-12-19 International Business Machines Corporation Erleichtern der Ausführung einer Transaktion nach wiederholten Abbrüchen der Transaktion
US10656945B2 (en) 2012-06-15 2020-05-19 International Business Machines Corporation Next instruction access intent instruction for indicating usage of a storage operand by one or more instructions subsequent to a next sequential instruction
US9772854B2 (en) 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
DE102013210839B4 (de) 2012-06-15 2023-06-07 International Business Machines Corporation Einschränken der Verarbeitung innerhalb eines Prozessors zum Erleichtern der Ausführung einer Transaktion
US9384004B2 (en) 2012-06-15 2016-07-05 International Business Machines Corporation Randomized testing within transactional execution
US9361115B2 (en) 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US9317460B2 (en) 2012-06-15 2016-04-19 International Business Machines Corporation Program event recording within a transactional environment
US8880959B2 (en) 2012-06-15 2014-11-04 International Business Machines Corporation Transaction diagnostic block
US9436477B2 (en) 2012-06-15 2016-09-06 International Business Machines Corporation Transaction abort instruction
US9182984B2 (en) 2012-06-15 2015-11-10 International Business Machines Corporation Local clearing control
US20130339680A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Nontransactional store instruction
US9442737B2 (en) 2012-06-15 2016-09-13 International Business Machines Corporation Restricting processing within a processor to facilitate transaction completion
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US8688661B2 (en) 2012-06-15 2014-04-01 International Business Machines Corporation Transactional processing
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US9367323B2 (en) 2012-06-15 2016-06-14 International Business Machines Corporation Processor assist facility
US8966324B2 (en) 2012-06-15 2015-02-24 International Business Machines Corporation Transactional execution branch indications
US10437602B2 (en) 2012-06-15 2019-10-08 International Business Machines Corporation Program interruption filtering in transactional execution
US9098308B2 (en) * 2012-06-26 2015-08-04 Marvell World Trade Ltd. Method and apparatus for code performance analysis based on execution trace information
US9027006B2 (en) 2012-08-09 2015-05-05 Apple Inc. Value profiling for code optimization
JP5998764B2 (ja) * 2012-09-04 2016-09-28 富士通株式会社 情報処理装置、ログ出力方法およびログ出力プログラム
US9063721B2 (en) 2012-09-14 2015-06-23 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9069782B2 (en) 2012-10-01 2015-06-30 The Research Foundation For The State University Of New York System and method for security and privacy aware virtual machine checkpointing
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9047403B2 (en) * 2013-02-11 2015-06-02 International Business Machines Corporation Debugger with previous version feature
US11507574B1 (en) 2013-03-13 2022-11-22 Actian Netherlands B.V. Adaptive selection of a processing method based on observed performance for improved and robust system efficiency
US9201629B2 (en) 2013-03-14 2015-12-01 International Business Machines Corporation Instruction for performing a pseudorandom number seed operation
US8873750B2 (en) 2013-03-14 2014-10-28 International Business Machines Corporation Instruction for performing a pseudorandom number generate operation
CN105122206B (zh) 2013-03-15 2018-11-09 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
US9582279B2 (en) 2013-03-15 2017-02-28 International Business Machines Corporation Execution of condition-based instructions
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US9396097B2 (en) * 2013-03-17 2016-07-19 Typemock Ltd. Methods, circuits, devices, systems and associated computer executable code for testing software code
US10089218B2 (en) * 2013-03-17 2018-10-02 Typemock Ltd. Methods circuits apparatuses systems and associated computer executable code for generating a software unit test
US9513924B2 (en) 2013-06-28 2016-12-06 Globalfoundries Inc. Predictor data structure for use in pipelined processing
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9361144B2 (en) 2013-06-28 2016-06-07 Globalfoundries Inc. Predictive fetching and decoding for selected return instructions
US9372695B2 (en) 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
EP3058456A4 (en) * 2013-10-18 2018-01-24 Marvell World Trade Ltd. Systems and methods for register allocation
US9600256B2 (en) * 2013-10-18 2017-03-21 Microsoft Technology Licensing, Llc Incrementally compiling software artifacts from an interactive development environment
US10318299B2 (en) 2013-10-31 2019-06-11 International Business Machines Corporation Reading a register pair by writing a wide register
US9201635B2 (en) * 2013-12-30 2015-12-01 Unisys Corporation Just-in-time dynamic translation for translation, compilation, and execution of non-native instructions
US8893294B1 (en) 2014-01-21 2014-11-18 Shape Security, Inc. Flexible caching
CN103838616B (zh) * 2014-03-05 2017-04-05 北京工业大学 基于树型程序分支的计算机程序即时编译方法
US9558032B2 (en) 2014-03-14 2017-01-31 International Business Machines Corporation Conditional instruction end operation
US10120681B2 (en) 2014-03-14 2018-11-06 International Business Machines Corporation Compare and delay instructions
US9454370B2 (en) 2014-03-14 2016-09-27 International Business Machines Corporation Conditional transaction end instruction
US9582295B2 (en) 2014-03-18 2017-02-28 International Business Machines Corporation Architectural mode configuration
US9916185B2 (en) 2014-03-18 2018-03-13 International Business Machines Corporation Managing processing associated with selected architectural facilities
US9588774B2 (en) 2014-03-18 2017-03-07 International Business Machines Corporation Common boot sequence for control utility able to be initialized in multiple architectures
US9558096B2 (en) * 2014-03-21 2017-01-31 Marvell World Trade Ltd. Method and apparatus for supporting performance analysis
US9569115B2 (en) 2014-03-31 2017-02-14 International Business Machines Corporation Transparent code patching
US9256546B2 (en) 2014-03-31 2016-02-09 International Business Machines Corporation Transparent code patching including updating of address translation structures
US9858058B2 (en) 2014-03-31 2018-01-02 International Business Machines Corporation Partition mobility for partitions with extended code
US9734083B2 (en) 2014-03-31 2017-08-15 International Business Machines Corporation Separate memory address translations for instruction fetches and data accesses
US9715449B2 (en) 2014-03-31 2017-07-25 International Business Machines Corporation Hierarchical translation structures providing separate translations for instruction fetches and data accesses
US9824021B2 (en) 2014-03-31 2017-11-21 International Business Machines Corporation Address translation structures to provide separate translations for instruction fetches and data accesses
US9720661B2 (en) 2014-03-31 2017-08-01 International Businesss Machines Corporation Selectively controlling use of extended mode features
US9483295B2 (en) 2014-03-31 2016-11-01 International Business Machines Corporation Transparent dynamic code optimization
CN104049949B (zh) * 2014-05-30 2016-10-05 南阳理工学院 一种面向bswap指令的窥孔优化方法
EP3012764A1 (en) * 2014-10-24 2016-04-27 Thomson Licensing Control flow graph flattening device and method
US10897616B2 (en) * 2014-12-08 2021-01-19 Harmonic, Inc. Dynamic allocation of CPU cycles vis-a-vis virtual machines in video stream processing
US10284646B2 (en) * 2014-12-17 2019-05-07 International Business Machines Corporation Application multi-versioning in a traditional language environment
US9495303B2 (en) * 2015-02-03 2016-11-15 Intel Corporation Fine grained address remapping for virtualization
EP3259664B1 (en) * 2015-04-10 2022-07-06 Google LLC Binary translation on shared object level
WO2016162720A1 (en) * 2015-04-10 2016-10-13 Google Inc. Binary translation into native client
EP3106982B1 (en) * 2015-06-18 2021-03-10 ARM Limited Determination of branch convergence in a sequence of program instructions
US10048952B2 (en) * 2015-11-11 2018-08-14 Oracle International Corporation Compiler optimized data model evaluation
US10733099B2 (en) 2015-12-14 2020-08-04 Arizona Board Of Regents On Behalf Of The University Of Arizona Broadening field specialization
US9971581B1 (en) * 2015-12-28 2018-05-15 Wells Fargo Bank, N.A. Programming language conversion
CN107665125B (zh) * 2016-07-29 2021-03-09 北京小米移动软件有限公司 执行操作指令的方法及装置
US9965374B2 (en) * 2016-08-26 2018-05-08 Qualcomm Incorporated Profile guided indirect function call check for control flow integrity
CN106775913B (zh) * 2016-12-16 2019-07-09 华东师范大学 一种目标代码控制流图生成方法
US10114573B1 (en) * 2017-04-26 2018-10-30 International Business Machines Corporation Dynamic reduction of stack-overflow errors in a recursive data-serialization algorithm
US10089235B1 (en) 2017-07-28 2018-10-02 Citrix Systems, Inc. Dynamic trim processing with disk caching
US10474442B2 (en) * 2017-09-29 2019-11-12 Intel Corporation Methods and apparatus to perform region formation for a dynamic binary translation processor
US10491524B2 (en) 2017-11-07 2019-11-26 Advanced Micro Devices, Inc. Load balancing scheme
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
US10698668B1 (en) * 2018-05-29 2020-06-30 Amazon Technologies, Inc. Custom code transformations during compilation process
JP7163697B2 (ja) * 2018-09-28 2022-11-01 富士通株式会社 生成プログラム,情報処理装置及び生成方法
US10970073B2 (en) * 2018-10-02 2021-04-06 International Business Machines Corporation Branch optimization during loading
CN109491918B (zh) * 2018-11-22 2020-05-01 中国人民解放军战略支援部队信息工程大学 一种汇编冗余指令的检测方法及装置
CN111435309A (zh) * 2019-01-11 2020-07-21 中标软件有限公司 一种寄存器分配优化实现方法
US11455153B2 (en) * 2019-03-18 2022-09-27 Advanced Micro Devices, Inc. Dynamic instances semantics
CN109918132B (zh) * 2019-03-26 2021-04-16 龙芯中科技术股份有限公司 一种指令安装方法、装置、电子设备及存储介质
CN111026398B (zh) * 2019-10-28 2023-08-11 贝壳技术有限公司 基于缓存的数据集成的构建方法与构建系统
CN112785482A (zh) 2019-11-07 2021-05-11 英特尔公司 用于将可执行对象适配到处理单元的系统和方法
US11216257B1 (en) * 2020-07-02 2022-01-04 Intrado Corporation Automated conference sessions generated to manage application development
US11677574B1 (en) 2020-07-02 2023-06-13 Intrado Corporation Automated conference sessions generated to manage application development
CN111966397A (zh) * 2020-07-22 2020-11-20 哈尔滨工业大学 一种异构并行程序自动移植和优化方法
US11526336B2 (en) * 2021-03-15 2022-12-13 Fujitsu Limited Community-oriented, cloud-based digital annealing platform
CN113377378A (zh) * 2021-07-02 2021-09-10 北京百度网讯科技有限公司 用于小程序的处理方法、装置、设备及存储介质
US20230305992A1 (en) * 2022-03-25 2023-09-28 Nokia Solutions And Networks Oy Processor using target instructions

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2240861A (en) 1990-02-09 1991-08-14 Hewlett Packard Co Apparatus and method for adapting computer program from one operating environment to another
JPH06282437A (ja) 1993-03-30 1994-10-07 Hitachi Ltd オブジェクト属性のアクセス方式
US5757982A (en) * 1994-10-18 1998-05-26 Hewlett-Packard Company Quadrantal scaling of dot matrix data
US5751982A (en) 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
US5761477A (en) * 1995-12-04 1998-06-02 Microsoft Corporation Methods for safe and efficient implementations of virtual machines
US6115809A (en) * 1998-04-30 2000-09-05 Hewlett-Packard Company Compiling strong and weak branching behavior instruction blocks to separate caches for dynamic and static prediction
US6158047A (en) * 1998-07-08 2000-12-05 Hewlett-Packard Company Client/server system for fast, user transparent and memory efficient computer language translation

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002073345A (ja) * 2000-08-25 2002-03-12 Fujitsu Ltd 情報処理装置及び記録媒体
JP2004062858A (ja) * 2002-07-29 2004-02-26 Arm Ltd データ処理装置内のアプリケーション・コードのコンパイル
JP2004355277A (ja) * 2003-05-28 2004-12-16 Matsushita Electric Ind Co Ltd プログラム実行制御装置、プログラム実行制御方法
US7958499B2 (en) 2003-05-28 2011-06-07 Panasonic Corporation Program execution control device, program execution control method, control program, and recording medium
JP4713820B2 (ja) * 2003-05-28 2011-06-29 パナソニック株式会社 プログラム実行制御装置、プログラム実行制御方法
JP2018014142A (ja) * 2011-12-23 2018-01-25 ザ アリゾナ ボード オブ リージェンツ オン ビハーフ オブ ザ ユニバーシティー オブ アリゾナ データベース管理システムにおけるマイクロ特化の方法

Also Published As

Publication number Publication date
JP3553834B2 (ja) 2004-08-11
US20020147969A1 (en) 2002-10-10
DE19945992B4 (de) 2004-12-09
CN1308818C (zh) 2007-04-04
DE19945992A1 (de) 2000-05-04
CN1270348A (zh) 2000-10-18
US6463582B1 (en) 2002-10-08

Similar Documents

Publication Publication Date Title
JP3553834B2 (ja) コンピュータアーキテクチャエミュレーションシステム
US6966057B2 (en) Static compilation of instrumentation code for debugging support
US7725883B1 (en) Program interpreter
US8127280B2 (en) Method and system for dynamic memory management
US6968546B2 (en) Debugging support using dynamic re-compilation
Shao et al. A type-based compiler for Standard ML
Chambers et al. Iterative type analysis and extended message splitting; optimizing dynamically-typed object-oriented programs
US5966539A (en) Link time optimization with translation to intermediate program and following optimization techniques including program analysis code motion live variable set generation order analysis, dead code elimination and load invariant analysis
US6199095B1 (en) System and method for achieving object method transparency in a multi-code execution environment
US6226789B1 (en) Method and apparatus for data flow analysis
US7036118B1 (en) System for executing computer programs on a limited-memory computing machine
JP2002527811A (ja) オンスタックリプレースメントを伴うことなくバーチャルコールを直接にインライン化する方法
Brandis et al. The Oberon system family
Shao Compiling Standard ML for efficient execution on modern machines
Elsman et al. An optimizing backend for the ML Kit using a stack of regions
Chambers et al. Iterative type analysis and extended message splitting: Optimizing dynamically-typed object-oriented programs
US7290176B2 (en) Method and system for generating stacked register dumps from backing-store memory
Keppel Runtime code generation
Wimmer Automatic object inlining in a Java virtual machine
Altman et al. DAISY dynamic binary translation software
Diwan Understanding and improving the performance of modern programming languages
Song An accurate prefetching policy for object oriented systems
Kalogeropulos Identifying the available parallelism using static analysis
Chevalier-Boisvert et al. Removing Dynamic Type Tests with Context-Driven Basic Block Versioning
Reig Galilea Compiler architecture using a portable intermediate language

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040116

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20040330

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040430

R150 Certificate of patent or registration of utility model

Ref document number: 3553834

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20080514

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20090514

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20090514

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20100514

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20100514

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20110514

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20120514

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20130514

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20140514

Year of fee payment: 10

EXPY Cancellation because of completion of term