(57)【要約】  本発明は、一般的なデータ値の問題に関するものであり、特に、ソースコード表現（１０）からターゲットコード表現（３０）に変換されたプログラムコードを実行する場合のコンピュータシステムにおける常駐問題に関するものである。本発明の基本的な概念は、プログラムコード変換中にターゲットコードのターゲットデータ値コンテナ（４０）に対する参照をソースコードのオリジナルデータ値コンテナ（２０）の対応するアドレス情報と関連付け、オリジナルソースコード表現のデータ値の表示（５０）を維持するためにターゲットコードの実行時にオリジナルデータ値コンテナの関連するアドレス情報と共にターゲットコード命令に関する情報を記憶することである。このように、ターゲットシステムにおける変換されたターゲットコード（３０）の実行時にオリジナルソースコード（１０）のデータ値を追跡することは、高い効率的な方法でサポートされる。【選択図】  なし
2008536236.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムにおいて、ターゲットコードとして参照される変換された形式のオリジナルソースコードの実行時に、オリジナルソースコードのデータ値の追跡をサポートする方法であって、
プログラムコードの変換中に、ターゲットコード命令におけるターゲットデータ値コンテナに対する参照を前記オリジナルソースコードのオリジナルデータ値コンテナのアドレス情報に関連付けるステップと、
ターゲットコードの実行時に、オリジナルソースコード表現のデータ値の表示を維持するために、前記オリジナルソースコードのオリジナルデータ値コンテナのアドレス情報と共にターゲットコード命令に関する情報を記憶するステップと
を備えることを特徴とする方法。
【請求項２】
前記関連付けるステップは、前記オリジナルソースコードの対応するオリジナルデータ値コンテナのアドレス情報で、ターゲットコード命令にタグを付加するステップを含んでいる
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記ターゲットコード命令に関する情報は、
対応するターゲット命令アドレス情報と、
ターゲットデータ値コンテナを参照せずにオリジナルデータ値コンテナの値を追跡することを可能にするための、対応する命令オペランド値と
の少なくとも一方を含んでいる
ことを特徴とする請求項１に記載の方法。
【請求項４】
前記記憶するステップは、前記オリジナルソースコードのオリジナルデータ値コンテナのアドレス情報と共に前記ターゲットコード命令に関する情報をゴーストレジスタファイルに書き込むステップを含んでいる
ことを特徴とする請求項１に記載の方法。
【請求項５】
前記オリジナルソースコードのオリジナルデータ値コンテナのアドレス情報を、前記ゴーストレジスタファイル内の第１のゴーストレジスタから第２のゴーストレジスタへ移動するステップを更に備える
ことを特徴とする請求項４に記載の方法。
【請求項６】
ターゲットコード命令で表現されるターゲットデータ値コンテナのアドレス情報は、前記ゴーストレジスタファイルにインデックスを付加する
ことを特徴とする請求項４に記載の方法。
【請求項７】
ターゲットシステムにおいてオリジナルデータ値コンテナの常駐性を一貫して反映するために、読出待ち時間に対処するための複数のパイプレジスタに基づいて、ゴーストレジスタファイル動作の一連の一貫性を維持するステップを更に備える
ことを特徴とする請求項４に記載の方法。
【請求項８】
ゴーストレジスタファイル動作を選択的に変換するための動作ストリーム処理を更に備える
ことを特徴とする請求項４に記載の方法。
【請求項９】
前記ターゲットコード命令は、前記オリジナルソースコードのオリジナルデータ値コンテナの割当を示す少なくとも１つのターゲットコード命令を含んでいる
ことを特徴とする請求項１に記載の方法。
【請求項１０】
前記オリジナルソースコードのオリジナルデータ値コンテナは、オリジナルレジスタセットに対応し、
前記ターゲットコードのターゲットデータ値コンテナは、ターゲットレジスタセットに対応し、
前記記憶するステップは、前記オリジナルソースコードのレジスタ表示を維持するためのゴーストレジスタファイルに前記情報を書き込み、前記オリジナルレジスタセットと前記ターゲットレジスタセット間のレジスタコヒーレンスをサポートするステップを備える
ことを特徴とする請求項１に記載の方法。
【請求項１１】
前記オリジナルソースコードは、オリジナルコンピュータシステムに対して適合されていて、
前記ターゲットコードは、前記オリジナルコンピュータシステムとは異なるターゲットコンピュータシステムに対して適合されている
ことを特徴とする請求項１に記載の方法。
【請求項１２】
前記データ値コンテナは、汎用高レベルプログラミング言語におけるメモリを割り当てられた変数に対応する
ことを特徴とする請求項１に記載の方法。
【請求項１３】
オリジナルプログラムコードと、ターゲットコードとして参照される、変換された形式の前記オリジナルプログラムコード間のデータ値の整合性をサポートするためのシステムであって、
前記ターゲットコードの実行時に、前記オリジナルプログラムコードのデータ値の表示を維持するために、前記オリジナルプログラムコードにおけるオリジナルデータ値コンテナの割当を示す少なくとも１つのターゲットコード命令に関する情報と共に、関連する前記オリジナルデータ値コンテナのアドレス情報を記憶する手段を備える
ことを特徴とするシステム。
【請求項１４】
プログラムコードの変換中に、ターゲットコード命令におけるターゲットデータ値コンテナに対する参照を前記オリジナルプログラムコードのオリジナルデータ値コンテナの対応するアドレス情報に関連付ける手段を更に備える
ことを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記ターゲットコード命令に関する情報は、
対応するターゲット命令アドレス情報と、
ターゲットデータ値コンテナを参照せずにオリジナルデータ値コンテナの値を追跡することを可能にするための、対応する命令オペランド値と
の少なくとも一方を含んでいる
ことを特徴とする請求項１３に記載のシステム。
【請求項１６】
前記記憶する手段は、前記オリジナルデータ値コンテナのアドレス情報と共に少なくとも１つの前記ターゲットコード命令に関する情報をゴーストレジスタファイルに書き込む手段を備えている
ことを特徴とする請求項１３に記載のシステム。
【請求項１７】
前記オリジナルプログラムコードのオリジナルデータ値コンテナのアドレス情報を、前記ゴーストレジスタファイル内の第１のゴーストレジスタエントリから第２のゴーストレジスタエントリへ移動する手段を更に備える
ことを特徴とする請求項１６に記載のシステム。
【請求項１８】
ターゲットコード命令で表現されるターゲットデータ値コンテナのアドレス情報は、前記ゴーストレジスタファイルにインデックスを付加する
ことを特徴とする請求項１６に記載のシステム。
【請求項１９】
読出待ち時間に対処するための複数のパイプレジスタに基づいて、ゴーストレジスタファイル動作の一連の一貫性を維持するロジックを更に備える
ことを特徴とする請求項１６に記載のシステム。
【請求項２０】
前記ゴーストレジスタファイル上の動作は、割当、移動、記憶及びｎｏｐ動作を含み、
ゴーストレジスタファイル動作を選択的に変換するための動作ストリーム処理ロジックを更に備える
ことを特徴とする請求項１６に記載のシステム。
【請求項２１】
前記記憶されている情報に基づいて、オリジナルプログラムコードのデバッグ及びトレース解析の少なくとも一方を実行するためのデバッグユーティリティを更に備える
ことを特徴とする請求項１３に記載のシステム。
【請求項２２】
前記オリジナルプログラムコードのオリジナルデータ値コンテナは、オリジナルレジスタセットに対応し、
前記ターゲットコードのターゲットデータ値コンテナは、ターゲットレジスタセットに対応し、
前記記憶する手段は、前記オリジナルプログラムコードのレジスタ表示を維持するためのゴーストレジスタファイルに前記情報を書き込み、前記オリジナルレジスタセットと前記ターゲットレジスタセット間のレジスタコヒーレンスをサポートする手段を備える
ことを特徴とする請求項１３に記載のシステム。
【請求項２３】
前記オリジナルソースコードは、オリジナルコンピュータシステムに対して適合されていて、
前記ターゲットコードは、前記オリジナルコンピュータシステムとは異なるターゲットコンピュータシステムに対して適合されている
ことを特徴とする請求項２２に記載のシステム。
【請求項２４】
前記データ値コンテナは、汎用高レベルプログラミング言語におけるメモリを割り当てられた変数に対応する
ことを特徴とする請求項１３に記載のシステム。
【請求項２５】
オリジナルプログラムコードと、ターゲットコードとして参照される、変換された形式の前記オリジナルプログラムコード間のデータ値の整合性をサポートするためのシステムであって、
前記ターゲットコードの実行時にオリジナルプログラムコードのオリジナルデータ値コンテナの表示の提供を可能にするために、プログラムコード変換中に、前記オリジナルプログラムコードのオリジナルデータ値コンテナの対応するアドレス情報で、ターゲットコード命令におけるターゲットデータ値コンテナに対する参照にタグを付加する手段を備える
ことを特徴とするシステム。
【請求項２６】
コンピュータシステム上の対応する変換されたターゲットコードの実行時に、オリジナルソースコードのオリジナルデータ値コンテナの表示を維持するための装置であって、
いくつかのゴーストレジスタエントリを有するゴーストレジスタファイルを含み、
前記ゴーストレジスタエントリそれぞれは、
ｉ）前記オリジナルソースコードのオリジナルデータ値コンテナの割当を示すターゲットコード表現に関する情報に対する、少なくとも１つのフィールドと、
ｉｉ）前記オリジナルソースコードのオリジナルデータ値コンテナに関連付けられているアドレス情報に対するフィールドとを含む
ことを特徴とする装置。
【請求項２７】
ターゲットコード命令に関する情報に対する、前記少なくとも１つのフィールドは、
対応するターゲット命令アドレス情報に対するフィールドと、
対応する命令オペランド値に対する値フィールドと
の少なくとも１つを含んでいる
ことを特徴とする請求項２６に記載の装置。
【請求項２８】
前記ゴーストレジスタエントリのそれぞれは、更に、ターゲットデータ値コンテナを参照せずにオリジナルデータ値コンテナの値を追跡する際に、命令オペランド値を対応するターゲットデータ値コンテナから消去する場合に、前記ゴーストレジスタで、前記命令オペランド値が保持されるべきであるかどうかを示すための排除フィールドを含んでいる
ことを特徴とする請求項２６に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の技術分野
本発明は、一般に、コンピュータ技術の分野に関するものであり、より詳しくは、コンピュータマイクロアーキテクチャ、コンパイラ技術及びデバッグ技術、及び、特に、プログラムコードを変換する時のコンピュータシステムにおけるデータ値の整合性の問題に関するものである。
【０００２】
本発明の背景
コンピュータマイクロアーキテクチャの分野は、計算モデルをサポートするためにコンピュータの内部構造の設計に関与している。コンパイラ技術は、１つの形式から別の形式へのコンピュータプログラムコードの変換をサポートする技術である。また、デバッグ技術は、一般的には、デバッグする技術であり、あるいは、換言すれば、コンピュータプログラムにおける誤りを検出する技術である。
【０００３】
コードを１つの形式から別の形式に変換する場合、コードの位置及びデータ値の整合性の損失が問題である。これは、ソースコードを高レベル言語からターゲット形式（target format：ターゲット形式）に変換する場合、及びコードを１つの「ターゲット」形式から別の「ターゲット」形式に変換する場合の両方の場合において発生する。ソースコードは、１つ以上のステップでターゲットコードに変換される。後者の場合、任意の中間コード形式が、「ソース」形式及び「ターゲット」形式の少なくとも一方として考えられても良い。各変換ステップでは、ソース形式及びターゲット形式が存在するが、所定の変換ステップのソース形式が従前の変換ステップにおいてターゲット形式である場合がある。
【０００４】
高レベル言語で表現されるソースコードがターゲットコードへの変換中に変換及び最適化される場合、ターゲットレジスタとソース変数との間の直接的なマッピングは維持することはできない。変換処理は、変数値に対して動作する命令を移動及び削除するからである。また、変換処理は、変換されたプログラムの異なるポイントにおける変数の値を保持するために異なるレジスタまたはメモリ位置を使用することができる。他の変数が同一のレジスタまたはメモリ位置に値を保持するのと同時に、値を保持するためにレジスタを使用することもできる。更に、変換処理は、変数の存在区間（live range）中に値を保持するレジスタを除去することができ、定数のロードでレジスタを置換する、あるいは上述のように他の変数（群）から１つ以上の値を保持するレジスタを使用する。変数の常駐性を報告すること、即ち、変数が常駐するレジスタあるいはメモリ位置及びある特定のプログラムポイントにおいて変数が有する値を報告することは、技術的に問題がある。更に、現在の値だけでなく、実行している時にある特定のプログラムポイントにおける変数の期待値を報告することは問題である。
【０００５】
特に、１つの種類のマシンまたはシステム上で実行するターゲットであるバイナリコードが別の種類のマシンまたはシステムに対して変換及び最適化される場合、元（オリジナル）のバイナリコードのある特定のレジスタに記憶された値は、結果として得られるコードの他のレジスタに記憶されることになる。ターゲットアーキテクチャに対する最適化及び適応の後に元（オリジナル）のアーキテクチャの状態（レジスタのコンテンツ等）を提供することは、コンピュータ技術の分野における特有の問題である。
【０００６】
整合性の損失の一般的な問題は、以下の主な問題に分類される。
【０００７】
・ターゲットコード表現の命令アドレスを、どのようにしてソースコード表現の命令アドレスにマップするか？
・ターゲットコード表現のレジスタまたはメモリ変数等のデータ値コンテナに対するアドレスを、どのようにしてソースコード表現のデータ値コンテナのアドレスにマップするか？
・ターゲットコード表現のデータ値コンテナアドレスの複数のアクティブなインスタンスを、どのようにしてソースコード表現の正確なデータ値アドレスにマップするか？
第１の問題は、コードの位置の問題を示している。残りの２つの問題は、データ値の問題に関するものである。
【０００８】
データ値の問題は、時には、ある特定のプログラムポイントにおいて期待されるオリジナル（元の：original）レジスタ（または汎用高レベル言語の場合においては変数）の期待値を報告または追跡する問題として示される。
【０００９】
オリジナルレジスタまたは変数が割り当てられたレジスタにおいてアクセス可能であるかを判定する問題は、典型的には、文献［１］に概略が示されるように常駐問題と呼ばれる。
【００１０】
文献［１］は、変数の常駐性を保守的に検出するために、変数の存在区間、即ち、レジスタに対する変数の割当から別の命令においてレジスタを最後に使用した時までのコードにおける範囲を使用することが十分であることを観測する。但し、別の値が変数の値を含むレジスタを割り当てられるまで常駐し続けても良い。そのプログラムポイントは、変数の排除（eviction）ポイントである。文献［１］において、変数の排除ポイントの検出は、デバッガにおいて最適化コードにデータフロー解析を適用することにより実行される。
【００１１】
関連技術
文献［２］は、デバッグの効率を向上するために複数の汎用コンピュータにおいてマルチプロセッサシミュレーション環境を実現するビルトインデバッグサポートデバイスに関するものである。
【００１２】
文献［３］は、マイクロプロセッサに対するソフトウェアデバッグポートに関するものである。オンチップトレースキャッシュと共に使用される場合、ソフトウェアデバッグポートは、プロセッサにおいて命令実行フローを再構築するためのトレース情報を提供し、プロセッサの動作を停止することなくレジスタコンテンツを検査することができる。
【００１３】
文献［４］は、デバッグ例外制御部分を有するデバッグサポートデバイスに関するものである。デバッグ例外制御部分は、ＣＰＵコアからデバッグ例外の生成命令が受信される場合のレジスタの状態を保存し、かつ回復命令が受信される場合に、プログラムカウンタをデバッグ例外ハンドラのアドレスに変更しかつデバッグ生成の前の状態にレジスタを戻す。
【００１４】
文献［５］は、複数のトレースデータ記憶素子を有するコンパクトトレースレコード記憶装置とのデバッグインタフェースを開示している。この記憶素子は、トレース情報の種類を示すトレースコードフィールド、及びトレース情報データの種類を示すトレースデータフィールドを含む形式を有している。
【００１５】
文献［６］は、埋込内部ノードの論理状態を観測及び制御する機能を提供するプログラム可能論理デバイス（ＰＬＤ）に関するものである。このＰＬＤは、論理素子レジスタ、メモリセル及びＩ／Ｏレジスタ等の内部ノードに対するシャドウ記憶装置を提供する。サンプル／ロードデータパスは、論理状態を観測する内部ノードのサンプリング及び論理状態を制御する内部ノードのロードを容易にするシフトレジスタ及び両方向データバスを含んでいる。
【００１６】
本発明の要約
本発明の一般的な目的は、データ値の問題に対する一般的な解決策を可能にし、かつサポートすることである。
【００１７】
特定の目的は、ソースコード表現からターゲットコード表現に変換されるプログラムコードを実行する場合のコンピュータシステムにおける、いわゆる常駐問題に対する解決策を提供することである。
【００１８】
特に、オリジナルソースコードと変換されたターゲットコードとの間のデータ値の整合性をサポートするメカニズムを提供することが望ましい。
【００１９】
本発明の特定の目的は、コンピュータシステム上で変換されたターゲットコードを実行する際に、オリジナルソースコードのデータ値を追跡することをサポートする方法を提供することである。
【００２０】
本発明の別の特定の目的は、コンピュータシステム上で対応する変換されたターゲットコードを実行する場合に、オリジナルソースコードのレジスタまたはメモリ変数等のデータ値コンテナの表示を維持するデバイスまたはモジュールを提供することである。
【００２１】
特定の目的は、オリジナルレジスタとターゲットレジスタとの間のレジスタコヒーレンス（整合性）をサポートすることである。
【００２２】
特に、１つの目的は、特に元のシステム上で実行するターゲットであるバイナリコードがターゲットシステムに対して変換及び最適化される場合、異なるコンピュータシステムに対してプログラムコードを最適化及び適応させた後に、元のコンピュータシステムのデータ値の表示を維持することである。
【００２３】
上記目的及び他の目的は、添付の請求の範囲で定義される本発明により達成される。
【００２４】
上述のように、本発明は、一般的なデータ値の問題に関するものであり、特に、ソースコード表現からターゲットコード表現に変換されるプログラムコードを実行する場合のコンピュータシステムにおける常駐問題に関するものである。
【００２５】
本発明の基本的な概念は、プログラムコードの変換中にターゲットコードにおけるターゲットデータ値コンテナに対する参照をソースコードのオリジナルデータ値コンテナの対応するアドレス情報に関連付け、オリジナルソースコード表現のデータ値の表示を維持するためにターゲットコードの実行時にオリジナルデータ値コンテナの関連するアドレス情報と共にターゲットコード命令に関する情報を記憶することである。このように、ターゲットシステムにおける変換されたターゲットコードの実行時にオリジナルソースコードのデータ値を追跡することは、より高い効率的な方法でサポートされる。
【００２６】
データ値コンテナの例には、通常のマイクロコンピュータレジスタ及び高レベルプログラミング言語におけるメモリを割り当てられた変数が含まれる。従って、レジスタの場合、本発明は、ソースコードのオリジナルレジスタセットとターゲットコードのターゲットレジスタセットとの間のレジスタコヒーレンスに対するサポートを提供する。メモリ変数に関わる例は、より一般的なデータ値常駐性問題に対する解決策を与える。
【００２７】
本発明は、異なるコンピュータシステムに対してプログラムコードを最適化及び適応させた後、元のコンピュータシステムのデータ値の表示を維持することを可能にする。
【００２８】
本発明の好適な実施形態において、ターゲットコード命令は、データ値の整合性に対してコード変換中にタグが付加され、ターゲットコードのターゲットデータ値コンテナ（ターゲットレジスタまたはターゲット変数等）とソースコードのオリジナルデータ値コンテナとの間の関連付けを提供する。
【００２９】
ターゲットコードの実行時に関連するオリジナルデータ値コンテナと共に記憶されている情報は、対応するターゲット命令アドレス情報及び対応する命令オペランド値の少なくとも一方を含んでいるが好ましい。後者の場合、ターゲットデータ値コンテナを参照せずにオリジナルデータ値コンテナの値を追跡することが可能である。
【００３０】
上述の追跡情報は、以下においてゴーストレジスタファイルと呼ばれる特別に設計された追加のレジスタファイルに書き込まれることが有利であり、マイクロコンピュータアーキテクチャにおけるハードウェアレジスタファイルとして実現されることが好ましい。
【００３１】
タグが付加されたターゲット命令は、ソースコードにおける変数またはレジスタ等のオリジナルデータ値コンテナの割当を示す１つ以上のターゲット命令を含んでいる。追跡を完全にサポートするために、オリジナルソースコードのデータ値コンテナのアドレス情報は、ゴーストレジスタファイルにおいて１つのエントリ（またはレジスタ）から別のエントリ（またはレジスタ）に移動され得る。このように、本質的に本発明は、異なるオリジナルレジスタ（または変数）値が利用される実行パスに依存してターゲットレジスタ（または変数）を割り当てられる例をサポートする。これは、オリジナルレジスタ（または変数）の異なるインスタンスがターゲットレジスタの並列インスタンスに変換される場合にも当てはまる。
【００３２】
ターゲットシステムにおいてオリジナルデータ値コンテナの常駐性を一貫して反映するために、本発明は、ゴーストレジスタファイル動作の一連の整合性を維持するためのロジックを含むんでいることが好ましい。
【００３３】
更に本発明は、ゴーストレジスタファイル動作を選択的に変換する動作ストリーム処理を提供することが好ましい。典型的には、動作処理ロジックは、プロセッサの通常の動作ストリームを流用した動作を追加のレジスタファイルを対象とする割当、移動、記憶及びｎｏｐ動作に変換する。通常、変換は、追加のレジスタファイルのいわゆる読出待ち時間ウィンドウにおいて元の通常の動作及び先に変換された動作により管理される。
【００３４】
ターゲットコードの命令語の追加のフィールド、追加のレジスタファイル及び動作処理ロジックにより、ターゲットデータ値コンテナの状態に加え、オリジナルソースコードのデータ値コンテナの状態は、ターゲットコード実行時に維持され、また、必要に応じて、２つの異なるコンピュータアーキテクチャの状態も維持される。
【００３５】
本発明は、ゴーストレジスタファイルまたは同等のメモリ素子に加え、「コンパイル時」及び「実行時」の個々の構成要素、並びに総合システムのそのような個々の構成要素の組み合わせを提供する。例として、いわゆるタグ付加を実行するように動作可能なコンパイル時の構成要素及びゴーストレジスタファイルに関連情報を記憶するように動作可能な実行時の構成要素を含んでいる。
【００３６】
本発明は、以下の利点を提供する：
＞変数及びレジスタの両方のデータ値常駐問題に対する解決策
＞コンピュータシステムにおけるデータ値の整合性のサポート
＞効率的なデバッグ及びトレース解析に対する改善された機能
＞変換されたターゲットコードの実行時にオリジナルソースコードのデータ値の追跡を可能にすること
＞対応する変換されたターゲットコードを実行する場合に、オリジナルソースコード表現のデータ値の表示を維持する可能性
＞レジスタコヒーレンスのサポート
＞異なるコンピュータシステムにおいて実行するためにプログラムコードを最適化及び適応させた後、元のコンピュータシステムのデータ値の追跡をサポートすること
本発明により提供される他の利点は、本発明の実施形態の以下の説明を読むことにより理解されるだろう。
【００３７】
発明の実施形態の詳細な説明
図中、同一の参照符号は対応する要素または同様の要素に対して使用する。
【００３８】
データ値の問題は、これまでに完全に対処または解決されていない。特に、コード変換の最適化が行なわれるコンピュータシステムにおいてオリジナルデータ値コンテナの値を追跡するためのハードウェアサポートは、マイクロプロセッサ業界及び学会により対処されていない。そのようなサポートにより、そのようなシステム上でのコンピュータプログラムのデバッグは非常に改善されるだろう。
【００３９】
まず、一般的な状況において、データ値常駐性問題に対する一般的な解決策として本発明を説明する。その後、高レベル言語におけるメモリ変数の追跡及びレジスタコヒーレンスのサポートに関して本発明を例示する。
【００４０】
図１は、本発明の好適な実施形態に従って、オリジナルソースコードとターゲットコードとの間のデータ値の整合性をサポートするメカニズムを示す概略図である。このプログラムコードは、単にソースコード１０と呼ばれるオリジナルソースコード表現で与えられ、レジスタまたはメモリ変数等のデータ値コンテナ２０のセットに対して動作する。オリジナルソースコードのデータ値コンテナは、オリジナルデータ値コンテナと呼ばれる。ソースコード１０は、単にターゲットコード３０と呼ばれるターゲットコード表現に変換される。ターゲットコード３０は、データ値コンテナ４０の別のセットに対して動作する。ターゲットコードのデータ値コンテナは、ターゲットデータ値コンテナと呼ばれる。一般に、コード変換は、コード変換、最適化、並びに静的変数の割当及びレジスタ割当を含んでいる。しかしながら、本発明に従えば、プログラムコード変換中の追加のタスクは、ターゲットコード命令のターゲットデータ値コンテナに対する参照（リフェレンス）をソースコードのオリジナルデータ値コンテナの対応するアドレス情報と関連付けることである。これは、オリジナルデータ値コンテナに関する関連情報でターゲットコード命令にタグを付加するすることにより達成されることが好ましい。例えば、タグ付加（tagging）処理は、オリジナルコンテナのアドレス／名前を使用して命令のデスティネーションコンテナにマークを付加（またはタグを付加）しても良い。ターゲットコード実行時間中に、タグ付ターゲットコード３０を実行する場合、命令オペランド値は、ターゲットデータ値コンテナに割り当てられ、また、通常、異なるターゲットコンテナの間で移動される。加えて、本発明に従えば、ターゲットコード命令に関する情報は、オリジナルデータ値コンテナの関連アドレス情報と共に、いわゆる「ゴースト」または「シャドウ」データ値コンテナ５０のセットに記憶される。このように、オリジナルソースコード表現のデータ値の表示はターゲットコード実行時に維持または維持され、デバッグ及びトレース解析の少なくとも一方を非常に容易にする。
【００４１】
オリジナルソースコードのデータ値の表示を維持するデータ値コンテナ５０は、マイクロコンピュータアーキテクチャにおいて「ゴースト」レジスタファイルに実現されることが好ましいが、別の実現例では、通常のトランザクションメモリの使用を含んで存在する。この「ゴースト」データ値コンテナ５０は、高レベルプログラミング言語の変数に割り当てられたメモリ位置であっても良い。
【００４２】
図２は、デバッグ及びトレース解析の少なくとも一方を含む、対応するターゲットコードの実行時にオリジナルソースコードのデータ値を追跡する好適な方法全体を概略的に示すフローチャートである。コード変換フェーズにおいて、ターゲットコード命令は、ターゲットコードのターゲットデータ値コンテナ（ターゲットレジスタまたはターゲット変数等）とソースコードのオリジナルデータ値コンテナとの間の関連付けを提供するために、データ値の整合性に対してタグが付加されることが好ましい（Ｓ１）。ターゲットコードの実行時、ターゲット命令アドレス情報等の情報及び対応する命令オペランド値の少なくとも一方は、関連するオリジナルデータ値コンテナのアドレスと共に記憶される（Ｓ２）。デバッグフェーズにおいて、オリジナルソースコードは、記憶された追跡情報に基づいて解析され得る。後述するように、ターゲット命令アドレス情報及びオリジナルデータ値コンテナアドレスが追跡情報として記憶される場合、デバッグユーティリティは、ターゲット命令アドレス情報を使用して、最適化されたターゲットコードのアクティブな値を再生成することができる。命令オペランド値自体が記憶される場合、オリジナルデータ値コンテナの値の追跡は、ターゲットデータ値コンテナを参照せずに行なうことができる。
【００４３】
典型的には、通常は、コンパイラであるコードアナライザ及びトランスレータ（変換部）はコードを解析して、結果として得られるターゲットコードの実行中に、後で使用されるオリジナルソースコードのデータ値コンテナ情報を選択された実行時情報と共に提供し、オリジナルソースコードのデータ値コンテナの表示を提供する。
【００４４】
本発明は、データ値常駐性問題、及び、特に、変数値（高レベル言語変換の場合）またはオリジナルレジスタ値（バイナリ変換の場合）が変換された最適化コードにより設定された時に、それらの値を報告する問題及びトレース／ブレークポイントにおいてそれら値が常駐するターゲットレジスタを報告する問題の少なくとも一方についてのソリューションを提供する。
【００４５】
レジスタコヒーレンス
以下では、オリジナルコードのオリジナルレジスタ及びターゲットコードのターゲットレジスタに関して、データ値の問題の詳細な解析を行なう。
【００４６】
レジスタコヒーレンスの種々の問題を示すために、２つの基本的なコード例を以下に与える。オリジナルアーキテクチャのレジスタには、オリジナルレジスタＯＲＥＧと名前を付ける。ターゲットアーキテクチャに関係するレジスタには、ターゲットレジスタｔｒｅｇ：ｓと名前を付ける。
【００４７】
例１：
ld tregB, ADDR0;      //ターゲットレジスタｔｒｅｇＢは、アドレスＡＤＤＲ０にお                        //いてメモリから値を得る
mv tregA, tregB;      //ターゲットレジスタｔｒｅｇＢの値は、ｔｒｅｇＡに移動さ                        //れる
ld tregB, ADDR1;      //ｔｒｅｇＢは新規の値を得る
...
st tregA, ADDR2;      //ｔｒｅｇＢの先の値は、アドレスＡＤＤＲ２においてメモリ                        //にスピル（spill）する
...
ld tregC, ADDR2;      //ｔｒｅｇＢの先の値は、レジスタｔｒｅｇＣにリロードされ                        //る
conditional_jump L1;
mv tregC, tregD;      //ｔｒｅｇＤの値は、ＴＲＥＧＣにロードされる
L1)
mv tregE, tregC;      //ｔｒｅｇＤの値またはｔｒｅｇＢの先の値は、ｔｒｅｇＥの                        //割当において使用される
ｔｒｅｇＢは最初にＡＤＤＲ０においてメモリセルからオリジナルレジスタＯＲＥＧ１の値を得て（即ち、第１のオリジナル命令がＯＲＥＧ１をＡＤＤＲ０からロードした）、ｔｒｅｇＤはＯＲＥＧ２の値を含んでいたとすると、ｔｒｅｇＥがＬ１において得た値は何であるか？この問題に対する解答は、実行されるコードが通過するパス及びコンパイラが割当に関して与えることができる情報に依存する。これは、動的情報及び静的情報が使用される場合の問題に対する解決策を示している。
【００４８】
最適化処理は、オリジナルコードの異なる時間ポイントのオリジナルレジスタの値をターゲットコードの同一の時間ポイントに配信することができる。これは、例２で示される。
【００４９】
例２：
LD OREGA, ADDR1;      //メモリアドレスＡＤＤＲ１の値をＯＲＥＧＡにロードする
...                   //ＯＲＥＧＡの値に基づく計算チェーン
...                   //ＯＲＥＧＢの結果を仮定する
ST OREGB, ADDR1       //新規の値をメモリに記憶する
LD OREGA, ADDR2       //別の値をＯＲＥＧＡにロードする
...                   //新規の値に基づく別の計算チェーン
...                   //ＯＲＥＧＣの結果を仮定する
ST OREGC, ADDR2       //次の新規の値をメモリに記憶する
ここで、ＯＲＥＧＡレジスタは異なる時間の値に対して使用される。ＶＬＩＷ（超長命令語）マシン等のより広範囲の発行マシンにおいて、２つの計算チェーンが並列化されている。
【００５０】
//ＯＲＥＧＡの２つのインスタンスは、ｔｒｅｇ１７及びｔｒｅｇ１９に保持される２  //つの並列インスタンスに変換されている
ld treg17, addr1; ld treg19, addr2; nop; nop;
//２つの計算チェーンは、ＶＬＩＷマシン機能性ユニットを介して並列化される
...
//記憶は並列化され、ｇｒ２１及びｇｒ２３を結果として得る
st treg21, addr1, st treg23, addr2
これは、どの値がＯＲＥＧＡのどのインスタンスを構成するかをデバッガ及びトレースユーティリティの少なくとも一方が理解する必要があるため問題を生じる。
【００５１】
本発明の方法において、ターゲットシステムにおける動的な計算は、どのオリジナルレジスタ（バイナリ変換の場合）または変数（高レベル変換の場合）がどのターゲットレジスタに割り当てられるかに対して通常利用される。この情報は、「ゴースト」レジスタファイルに維持されることが好ましい。つまり、所定のポイントにおいて、オリジナルレジスタ（または変数）の常駐性は、「ゴースト」レジスタファイルを探索することにより判定される。そこで検出されるオリジナルレジスタ（または変数）は常駐しており、また、検出されないオリジナルレジスタ（または変数）は常駐していない。
【００５２】
ソースコードにおけるオリジナルレジスタまたは変数に対する変換システムの常駐問題の場合、［１］と比較される本発明の方法は、ある特定の割当におけるオリジナルレジスタによるコンパイラの命令のタグ付加と組み合わされる比較的単純なハードウェア実装とデバッガのデータフロー計算を交換する。
【００５３】
この方法の利点は、排除したオリジナルレジスタ（または変数値）が別のオリジナルレジスタ（または変数）値により排除されない限り依然として報告されることである。
【００５４】
以下では、ソース命令アドレスは、コンパイル中に対応するターゲット命令に与えられると考えられ、適切な方法でトレース／デバッグユーティリティに提示されると仮定する。
【００５５】
好適な実施形態において、ＶＬＩＷまたはＲＩＳＣ基本命令（プリミティブ）等のターゲット命令の基本命令におけるデスティネーション（宛先）レジスタの符号化は、オリジナルレジスタアドレスに対する追加のフィールドを有する。このフィールドが有効なオリジナルレジスタアドレスを有する場合、動作の結果は、オリジナルレジスタセットの整合性を維持するゴーストレジスタに書き込まれることになる。このゴーストレジスタセットは、トレース及びデバッグの目的以外で読み出されることはない。従って、ゴーストレジスタファイルに対する長い動作待ち時間（レイテンシ）の許容範囲（トレーランス）が存在する。これは、ゴーストレジスタファイルがクリティカルパスから外れ、かつそのゴーストレジスタファイルへのアクセスがタイミング要求を満たすためにパイプライン化されることを意味し、また、ゴーストレジスタファイルは、チップ上のいずれかの場所に配置することができる。「ターゲットレジスタのオリジナルレジスタ値」の追跡がサポートされる場合、ゴーストレジスタファイルは、通常は、エミュレートされたレジスタタグをゴーストレジスタ素子間で転送する。これは、移動動作が「オリジナルレジスタ値のみ」の追跡がサポートされる場合にタグが付加されているオリジナルレジスタでない場合に当てはまる。このような場合、移動動作が読出及び書込の組み合わせであるため、典型的には、ゴーストレジスタからの読出が必要である。移動動作は、ＧＲＦ待ち時間に起因する隣接するＧＲＦ動作への依存性を推測する。これは、長いＧＲＦ動作待ち時間の許容範囲を利用することにより対処することができる。以下に、これについての詳細を更に示す。
【００５６】
オリジナルレジスタセットからターゲットレジスタセットへのマッピングを認識しているコンパイラは、命令がソースコードのオリジナルレジスタの割当を表現している場合、オリジナルレジスタのアドレス／名前で命令のデスティネーションレジスタにタグを付加する。上記例において、これは以下のことを意味する：
例１：
ld tregB(OREG1), ADDR0      //オリジナルレジスタＯＲＥＧ１の値は、ｔｒｅｇＢに                              //ロードされる
mv tregA(OREG1), tregB;     //オリジナルレジスタＯＲＥＧ１の値は、ｔｒｅｇＡに                              //移動される
ld tregB, ADDR1;            //ｔｒｅｇＢは新規の値を取得する
...
st tregA, ADDR2;            //ＯＲＥＧ１の値は、アドレスＡＤＤＲ１においてメモ                              //リにスピルする
...
ld tregC(OREG1), ADDR1      //ＯＲＥＧ１の値は、レジスタｔｒｅｇＣにリロードさ                              //れる
conditional_jump L1;
mv tregC(OREG2), tregD;     //ＯＲＥＧ２の値は、ｔｒｅｇＣにロードされる
L1)
mv tregE, tregC;            //ＯＲＥＧ１またはＯＲＥＧ２の値は、ｔｒｅｇＥの割                              //当において使用される
ｔｒｅｇＥに割り当てられる値がオリジナルレジスタＯＲＥＧ１の値であるかまたはＯＲＥＧ２の値であるかはＬ１の命令文への到達方法に依存するため、コンパイラはこれを推定できない。動的な情報なしでは、ＯＲＥＧ１またはＯＲＥＧ２の値がｔｒｅｇＥに割り当てられるかを識別することは不可能である。しかしながら、推定できることは、他の値がタグＯＲＥＧ１を有するターゲットレジスタを割り当てられていないため、ＯＲＥＧ１の最新の値がＡＤＤＲ０からの値であることである。同様に、ＯＲＥＧ２の最新の値はｔｒｅｇＤの値である（ここで、ＯＲＥＧ１と同様に、ｔｒｅｇＤは先にメモリから値を取得できている）。
【００５７】
例（１）は、オリジナルレジスタの最新の値を保持するためには、コンパイル／リンク時にオリジナルデスティネーションレジスタによりターゲットデスティネーションレジスタにタグを付加し、実行時にゴーストレジスタに値を書き込むだけで十分であることを示している。プログラムの各ポイントでオリジナルレジスタ値が常駐する場所を常時監視するために、利用される実行パスに依存して異なるオリジナルレジスタ値がターゲットレジスタに割り当てられてもよい場合に対して、ゴーストレジスタファイルにおける実行時のサポートを有する必要がある。以下に説明するように、これはゴーストレジスタファイル内で情報を移動する特定のゴーストレジスタ動作の種類により達成されることがが好ましい。
【００５８】
例２：
//ＯＲＥＧＡの２つのインスタンスは、ｇｒ１７及びｇｒ１９に保持される２つの並列  /インスタンスに変換されている。
【００５９】
ld treg 17(OREGA), addr1; ld treg 19(OREGA), addr2; nop; nop;
ターゲット命令語の追加のフィールド、追加のレジスタファイル及び動作処理ロジックにより、オリジナルソースコード及び変換されたターゲットコードの両方のデータ値コンテナの状態は、ターゲットコード実行時に維持され、また、必要に応じて、ターゲットコードが元の（オリジナルの）システムとは異なるターゲットシステム上での実行に対して最適化される場合には２つの異なるコンピュータアーキテクチャの状態も保持することができる。
【００６０】
図３は、本発明の特定の実施形態に従う好適なプロセッサ環境におけるゴーストレジスタを示す図である。単純化された図において、好適なプロセッサ１００は、命令フェッチ１１０、復号化１２０、実行１３０及びコミット１４０の４つの段階を有する。プロセッサシステムは、通常のレジスタファイル４０及びゴーストレジスタファイル５０を更に有している。ゴーストレジスタ動作は、復号化段階１２０において通常のコードストリームから復号化され、メモリ及び通常のアーキテクチャレジスタファイル４０に対する通常の命令動作がコミットされる場合にゴーストレジスタ５０に対してコミットされる。ゴーストレジスタファイルからメモリへの書込データパスは、通常のメモリ書込データパスを使用する。ゴーストレジスタファイル５０は、読出待ち時間に対処するために実行パイプから離れて複数のパイプステップに常駐することが好ましい。実際の数は、実装を容易にするように選択される。メモリ読出データパスは、データ読出アドレスバス及び命令アドレスバス等の他の必要な共通構造と共に省略される。
【００６１】
ゴーストレジスタファイル（ＧＲＦ）５０に記憶される追跡情報は、オリジナルソースコードのデバッグ及びトレース解析の少なくとも一方を実行するためのデバッグユーティリティ２００により読み出すことができる。当然、デバッグユーティリティは、通常のレジスタファイル４０から情報を読み出し、ターゲットコードデバッグをサポートしても良い。デバッグユーティリティは、メモリに記憶されたＧＲＦのスナップショットを読み出す。実際には、通常のレジスタファイルが（通常の）記憶動作によりメモリに記憶されるのと同様に、ＧＲＦのスナップショットは、通常は、ゴースト記憶動作を実行することでＧＲＦのコンテンツをメモリに順序付けることにより取得される。ゴースト記憶動作の実際の符号化は、オペコードフィールドまたはアドレスフィールドで行われ得る。
【００６２】
本発明の特定の実施形態において、コンパイラ／リンカの観点から、命令がレジスタ書込先をレジスタに書き込むことができる方法が３つ存在する：
１）ターゲットレジスタのみ（ＯＮＬＹ）への書込
２）ターゲットレジスタへの書込及び（ＡＮＤ）ゴーストレジスタへの書込
３）ゴーストレジスタのみ（ＯＮＬＹ）への書込
例えば、ゴーストレジスタセットは、３つの書込モードに基づいていても良い。書込モードは、レジスタに書き込む命令の中にレジスタ書込先の異なるセットを含んでいる。
【００６３】
第１の書込モードは、レジスタコヒーレンス（整合性）の情報が書き込まれない例１の場合である。レジスタ書込先の例１のみが、このモードにおいて命令の中から検出される。
【００６４】
第２の書込モードは、標準のレジスタコヒーレンスサポートである例２の場合である。即ち、オリジナルレジスタを割り当てる除去されない命令文のデスティネーションレジスタのみにタグが付加される。レジスタ書込先の例１及び２は、このモードにおいて命令の中から検出され得る。即ち、オリジナルレジスタによりタグが付加されないデスティネーションレジスタを含む命令はターゲットレジスタに書き込まれることになり、オリジナルレジスタによりタグが付加されるデスティネーションレジスタを含む命令はターゲットレジスタ及びゴーストレジスタの両方に書き込まれることになる。
【００６５】
第３の書込モードは、追加のレジスタコヒーレンスサポートである例３の場合である。即ち、実際の割当が最適化において除去されているが、コンパイラは、デスティネーションレジスタがオリジナルレジスタタグ及び書込先３タグによりタグが付加される「ゴースト」割当命令文を保持する。この書込モードにおいて、全てのレジスタ書込先の例が命令の中から検出される。これは、レジスタ書込先の例１及び２（第２の書込モード）に加え、レジスタ書込先の例３がこのモードにおいて命令の中から検出されることを意味する。レジスタ書込先３を含む命令は、最適化中にコンパイラにより除去されている命令を示している。
【００６６】
レジスタ割当は、ゴーストレジスタの割当をターゲットレジスタと分離できないので、即ち、レジスタ割当が除去された命令を介して割当を行なうので、第３の書込モードの殆どの理論的な関心はレジスタコヒーレンスに関してである。コードにおいてゴーストのみの割当が存在することにより、レジスタの使用量及びスピルに影響を与える（レジスタファイルのサイズに依存する）。１つ以上のオリジナルレジスタに対して第３の書込モードのみを使用すること、ターゲットレジスタセット（十分に大きい場合）を２つのセット（一方の大きい方は実際の割当に対するものであり、他方の小さい方はゴーストの割当に対するものである）に分割すること、あるいは「オリジナルレジスタ値のみの追跡」と関連付けて第３の書込モードのみを使用すること等の上記問題に対する対応策が存在し得る。
【００６７】
書込モードは、使用される場合、プロセッサ制御レジスタにおいて指定される。
【００６８】
デバッガ／トレースユーティリティは、ゴーストレジスタのセット及び各ゴーストレジスタが書き込まれた命令アドレスに対するアクセスを有する。また、デバッガ／トレースユーティリティはレジスタ書込先識別を有することになるので、ゴーストレジスタがどのようにして書き込まれたかを推定することができる。これにより、ユーティリティは、最適化されたターゲットコードにおいてアクティブであるオリジナルレジスタ値を再生成することができる。
【００６９】
一般に、ゴーストレジスタファイルは、ターゲットアーキテクチャのレジスタ数と同数のエントリを含み、更に、スピル領域を含んでいることが好ましい。このスピル領域がターゲットレジスタセットと同一の大きさである場合、全てのゴーストレジスタは容易にスピルすることができる。各エントリは、レジスタが書き込まれる及びデータ値が記憶されていることの少なくとも一方である、命令アドレスと共にオリジナルレジスタ番号を含んでいることが好ましい。
【００７０】
特定の好適な実装において、各エントリが以下のフィールドを含むように、追加のオプションの情報が追加されることが好ましい。
【００７１】
【表１】
2008536236.tif 000003
【００７２】
・ＯＲ−オリジナルレジスタ番号
・ＲＷＤ−レジスタ書込先（通常１ビットであり、例２及び３を符号化する）
・ＴＭＩＡ−ターゲットマシン命令アドレス
・Ｅ−排除された値（通常１ビット）
・Ｖ−値
ターゲットレジスタにおいてオリジナルレジスタ値を追跡する場合、値が対応するターゲットレジスタにおいて検出されるので、値フィールド（Ｖ）は必要ない。
【００７３】
オリジナルレジスタ値のみを追跡する場合、ターゲットレジスタは新規の値を割り当てられ、その場合に、古い値（群）はターゲットレジスタから排除されるため、値フィールド（Ｖ）は必要である。
【００７４】
典型的には、ＲＷＤフィールドは、第２の書込先（第１の書込先は、ゴーストレジスタに存在することはない）に対してプロセッサ制御レジスタのモード値により生成される。プロセッサが第３の書込モードであり、かつターゲット及びターゲットデスティネーションレジスタが無効として定義される場合、第３の書込先はＲＷＤフィールドを割り当てられる。ターゲットレジスタ未変更動作の符号化は、オペコードまたはモードビットフィールドの１ビット及びターゲットデスティネーションレジスタの１ビットを介して行なわれ得る。レジスタ書込先２のみが必要である場合、ＲＷＤフィールドは省略され得る。
【００７５】
別のオプション（命令ビットを保存するための）は、レジスタアドレスマップの１つのレジスタエントリを無効マーカとして使用することである。このレジスタエントリへの書込は、そのコンテンツを変更しない。このレジスタエントリは、使用される場合は常にゼロを生成するために使用され得る。
【００７６】
Ｅビットがセットされる場合、値（Ｖ）は、オリジナルレジスタ値ではないレジスタ値によりＴＭＩＡのターゲットレジスタから排除される。
【００７７】
図４及び図５は、それぞれ「一連コード（sequential code）」及び「並列コード（parallel code）」の場合のゴーストレジスタファイルに対する好適な動作を示している。ゴーストレジスタファイル及びターゲットレジスタファイルは、隣接するように示されている。一般的には、これは、ターゲットレジスタファイルのルーティング及びターゲットレジスタファイルの周囲の配置に干渉しないようにする場合には当てはまらない。図は、論理的な図を与えているだけである。図４及び図５は、上述の例１）及び２）に対応する。
【００７８】
図４の例１）は、「ターゲットレジスタにおけるソースレジスタ値の追跡」が可能であり、かつ「ソースレジスタのみの値の追跡」が可能である場合に、ゴーストレジスタファイルの異なる用途を示すために使用される。明確にするために、Ｖフィールドは両方の場合において存在する。例１）は一連コードとして提供される。即ち、例１）は、例えば、ＶＬＩＷ命令語に並列化されていない。ゴーストレジスタの用途は、ＲＩＳＣ命令語から書き込まれるかまたはＶＬＩＷ命令語から書き込まれるかに関わらず同一である。
【００７９】
図４の実線の矢印は、ソースレジスタの値を追跡する場合の動作を示していて、破線の矢印は、ターゲットレジスタのソースレジスタ値を追跡する場合の追加の動作を示している。例えば、ターゲット命令ＩＡにおいて実行されるＡＤＤＲ０の値をターゲットレジスタｔｒｅｇＢにロードする動作「ld tregB(OREG1), ADDR0」は、情報[OREG1, 2, IA, [ADDR0]]がゴーストレジスタ「ghost tregB」に書き込まれることを示している。ここで、ＯＲはＯＲＥＧ１であり、ＲＷＤは２であり、ターゲットマシン命令アドレスはＩＡであり、値ＶはＡＤＤＲ０のメモリ位置から取得される。ｔｒｅｇＢの値をｔｒｅｇＡに移動する動作「move tregA(OREG1), tregB」は、ｔｒｅｇＢの値をゴーストレジスタｇｈｏｓｔ  ｔｒｅｇＡに割り当てるゴースト動作にマップされる。ここで、ＯＲはＯＲＥＧ１であり、ＲＷＤは２であり、移動動作の命令アドレスはｇｈｏｓｔ  ｔｒｅｇＡにも書き込まれる：[OREG1, 2, IA, tregB]。
【００８０】
例１）において、移動動作は、静的に推定される場合にオリジナルレジスタアドレスを使用してコンパイラによりタグが付加される。別の例において、移動動作にタグを付加しないで（初期割当またはロード動作のみタグを付加しない）、ゴースト移動動作がゴーストソースレジスタ値（ＯＲ、ＲＷＤ、ＴＭＩＡ、Ｅ、Ｖ）をゴーストデスティネーションレジスタに常にコピーする。この別の例は、ゴーストレジスタファイル動作の記載及び以下のコンパイラの記載において仮定される。
【００８１】
プロセッサ制御レジスタの制御ビット（ＥＶＩＣＴ）は、タグが付加されていないターゲットレジスタの割当（即ち、ゴーストレジスタフィールドにおける非有効レジスタアドレス）がゴーストレジスタにおけるオリジナルレジスタアドレス（ＯＲ）の先の割当を無効化すべきであるかを定義する。これにより、２つの異なる用途が可能になる。ターゲットレジスタのオリジナルレジスタ値が追跡されるべきである場合、ＥＶＩＣＴは常に設定されるべきである。オリジナルレジスタ値が対象となっている場合にのみ、ＥＶＩＣＴ制御ビットは重要である。クリアされる場合、オリジナルレジスタ値は、ターゲットレジスタに存在しない場合でも保持され、オリジナルレジスタによりタグが付加されている命令によってのみ上書きされる。設定される場合、オリジナルレジスタ値は、タグが付加されていない割当によりゴーストレジスタファイルから排除され得る。これは、以下の表２において要約される。
【００８２】
【表２】
2008536236.tif 000004
【００８３】
スナップショットまたはポストモーテム（post-mortem：事後分析）解析が実行される場合、トレースは不可能であり、ゴーストレジスタメモリは、ゴーストレジスタダンプルーチンを介して読み出され、かつメインメモリに書き込まれる。
【００８４】
ゴーストレジスタダンプルーチンにトラップを挿入することにより、元（オリジナル）のアーキテクチャレジスタセットのスナップショットまたはチェックポイントは後の解析のために保存される。
【００８５】
図５の例２）は、「一連の」ターゲットレジスタがいくつかの並列（パラレル）「インスタンス」を有するように一連のコードでターゲットレジスタが並列化される場合のゴーストレジスタファイルの用途を示すために使用される。
【００８６】
ゴーストレジスタファイルの内部構造
ゴーストレジスタファイル（スピル領域を含む）は、オリジナルソースコードのレジスタの表示またはターゲットアーキテクチャ上にエミュレートされている元のアーキテクチャを保持するスクラッチパッドである。このスクラッチパッドは、２つの基本的な種類の動作により制御される。
【００８７】
ゴーストレジスタ動作の種類
１つの動作は、実行パイプにおける算術またはロード命令の副作用である割当動作である。これら算術またはロード命令は、オリジナルレジスタデスティネーションフィールドの対応するオリジナルレジスタ名を明示的に指示している。
【００８８】
他の動作は、移動動作である。この移動動作は、実行パイプの移動命令から発生する。相違点は、この動作がゴーストレジスタファイルに書き込むために明示的に名前を示されるオリジナルレジスタを有さないことである。移動動作は、移動動作ソースターゲットレジスタ番号によりインデックスが付加されるゴーストレジスタエントリのＯＲフィールドを移動動作デスティネーションターゲットレジスタ番号によりインデックスが付加されたゴーストレジスタエントリにコピーしなければならない。
【００８９】
ターゲットレジスタファイルの全ての移動動作が、ゴーストレジスタファイルの移動動作を招くわけではない。例えば、排除されない場合にＯＲのタグが付加されない移動命令は、ゴーストレジスタに到達する場合にＮＯＰとなる。ＯＲのタグが付加されている移動動作は、ゴーストレジスタ割当動作に変換されることになる。
【００９０】
ゴースト記憶動作は、ゴーストレジスタコンテンツをメモリに書き込むために使用される。ゴースト記憶動作は、コードストリームの観測ポイントにおいてゴーストレジスタコンテンツのスナップショットを取得する場合に使用される。ゴースト記憶命令を含むコードは、必要とする観測のセットアップ方法に依存して、例外または割込ルーチンのコードかまたは通常のコードとなり得る。それらの観測スナップショットは、解析デバッグソフトウェアに対する入力として使用される。
【００９１】
ＮＯＰ命令は、ゴーストレジスタファイルに対して動作しない空動作である。
【００９２】
ゴースト移動動作は、ＯＲ値をゴーストレジスタファイルに書き込むことをできるようにするために、ゴーストレジスタファイルから読み出す必要がある。割当動作は、ゴーストレジスタファイルに対してのみ書き込む必要がある。割当動作は、コンパイラからゴーストレジスタファイルへのＯＲ情報の静的な搬送をサポートする。移動動作は、ゴーストレジスタファイルのＯＲ情報の実行に依存する動的な搬送をサポートする。
【００９３】
移動動作及び割当動作をサポートするために、好適な解決策は、アクティブな機能性プロセッサユニット毎に、即ち、プロセッサ内のアクティブな動作生成エンティティ毎に１つの書込ポート及び１つの読出ポートをゴーストレジスタファイルに提供することである。換言すれば、発行スロット毎に１つの読出ポート及び１つの書込ポートを提供することである。
【００９４】
ゴーストレジスタ動作の一連の一貫性
読出動作が完了前に待ち時間を有するため、動作ストリームにおいて一連の一貫性を維持するための追加のロジックが必要である。読み出された移動動作の結果は、ストリームにおける後の他の動作が移動動作のデスティネーションエントリを読み出すかまたは書き込む前に書き込まれなければならない。この一貫性が維持されない場合、ゴーストレジスタファイルは、コンパイラにより指定される割当動作及び移動動作、並びにターゲットマシンの動的実行パスに従って、元のアーキテクチャのレジスタ状態を表現することはない。実行パイプラインの状態におけるデータハザードに関する一般的な説明については、文献［７］を参照。
【００９５】
複雑なデバッグに対しては、ゴーストレジスタファイルは、一貫性を保証するためのロジックを必要とする。ゴーストレジスタファイル動作の一連の一貫性を保証するためのゴーストレジスタファイルパイプステップロジックの一例を示す（１つの動作ストリームを示す）図６を使用してこれを説明する。
【００９６】
ゴーストレジスタファイル５０がマシン中の機能性ユニットと同数の動作ストリームをサポートする必要があるため、このロジックは二重化される。図６は、簡単にするために、ＲＷＤ及びＴＭＩＡ要素の転送及び書込を省略する。メモリへの記憶パス、即ち、実行パイプへのデータパス及び記憶アドレスパスも省略される。
【００９７】
この例において、複数のパイプレジスタ（Ｐ１、Ｐ２、Ｐ３、．．．）が導入される。これらレジスタは、ＲＷＤフラグ、ＴＭＩＡ値（図６においては、両方とも省略される）、デスティネーションターゲットレジスタ番号（ｄｔｒｅｇ）、オリジナルレジスタ番号（動作が割当の場合、ｏｒｅｇ）またはソースターゲットレジスタ（動作が移動の場合、ｔｒｅｇ）及び動作指示器（インジケータ）（割当または移動）を含んでいる。
【００９８】
転送／書込制御ユニット６０は、パイプレジスタデータを監視することが好ましい。移動動作が検出される場合、転送／書込制御ユニット６０は、移動動作が最後のパイプ段階にある場合に書き込むためのレジスタファイルからのデータ（ＯＲ値）を有するように、ソースターゲットレジスタ番号（ｓｔｒｅｇ）を読出アドレスポートに転送する。
【００９９】
移動動作ソースに対する１つ以上の割当がパイプにおいて検出される場合、移動前の最後のＯＲ割当は、移動書込において書き込まれるデータとしてセットアップされることになる。この場合、配信された古いＯＲ値は無視されることになる。
【０１００】
このことは、最後のパイプステップレジスタデスティネーションターゲットレジスタ番号（ゴーストファイルへの書込インデックス）を先のパイプステップレジスタソースターゲットレジスタ番号と比較することにより実行されることが好ましい（パイプレジスタが移動動作を含んでいる場合）。これら２つのターゲットレジスタインデックスが合致（マッチ）する場合、ゴーストファイルからのＯＲ値の配信を待機するレジスタは、最後のパイプレジスタのＯＲ値でロードされる。ゴーストファイルからのＯＲ配信（古い値）は次のサイクルでは無視され、かつ移動のソースレジスタに書き込まれる新規のＯＲ値が使用されることになる。
【０１０１】
この例示のロジックは、以下の擬似コードによって説明される。必要とされる記憶構造（レジスタ）は、ポートインタフェース構造の要素としてゴーストレジスタファイル前の最後のパイプステップであるＰ０と呼ばれる。尚、コードは取消フラグ処理を省略するな等、完全ではないことに留意されたい。記憶動作処理も省略される。記憶動作はＧＲＦ読出であるが、記憶動作はＧＲＦではなくメモリへの書込を行なう。記憶前の全ての動作は、移動ソースアドレス転送を介して一貫性を維持する。擬似コードは、ロジックをより理解するために概略図として提供される。
【０１０２】
P0.radr;      //移動アドレスの転送のために使用されるアドレスの読出
P0.rdata;     //移動動作がゴーストファイルにおいて完了される場合、移動先に書き                //込まれる移動元から、ＯＲ値であるデータの読出
P0.we;        //書込可能
P0.rdati;     //ゴーストレジスタファイルからのデータが無視される場合、取消（無                //視）フラグを読み出す
P0.wadr;      //移動動作の最後の部分及び割当動作において使用される書込アドレス                //であるアドレスの書込
P0.wdata      //割当動作からのＯＲ値または移動動作からのＯＲ値であるデータの書                //込。移動動作のＯＲ値は、ゴーストファイルの読出または移動動作の                //ソースへの割当動作の書込データから発生する
P0.wadr       //割当または移動動作デスティネーションであるアドレスの書込
転送及び書込制御ユニットにおける最後のパイプステップに対する入力データは、先のパイプステップＰ１、Ｐ２、Ｐ３のデータとなる。
【０１０３】
{P3-P1}.dtreg;  //デスティネーションターゲットレジスタ番号、ゴーストレジスタフ                  //ァイルへのインデックスの書込
{P3-P1}.streg   //ソースターゲットレジスタ、インデックスをゴーストレジスタファイルに読み込む。動作が移動である場合に有効な番号
{P3-P1}.oreg;   //オリジナルレジスタ番号、ＯＲデータ値。動作が割当である場合に                  //有効な番号
{P3-P1}.op;     //ｎｏｐ、移動または割当のいずれかの動作
//移動動作がパイプに存在する場合、
//移動動作は読出アドレスの転送をトリガする
IF(P4.op == 'move')
THEN
P0.radr := streg;
P0.rdati := FALSE;  //配信されるデータの受付
ENDIF
IF(P1.op == 'assignment')
//実行対象の動作が
//割当である場合
THEN
//.. load write addr. w/dest. treg.
P0.wadr := P1.dtreg;
//..書込対象の明示的なＯＲ値
P0.wdata := P1.oreg;
P0.we := TRUE;
ELSE
IF(P1.op == 'move')
//実行対象の動作が
//移動である場合
THEN
//..load write addr. w/dest. treg.
P0.wadr := P1.dtreg;
//ゴーストレジスタファイルからロードされたＯＲ値
P0.wdata := P0.rdata;
P0.we := TRUE;
ELSE
IF(P1.op == 'nop')
//動作がｎｏｐである場合、
//書込不能にする
THEN
P0.we := FALSE
END
//移動動作ソースを更新する動作によって、
//移動が行なわれる場合
IF(P2.op == 'move' AND P2.streg == P1.dtreg)
THEN
IF(P1.op == 'assignment')
//先行する動作（ｏｐ）が割当
THEN
//先行する動作（ｏｐ）のＯＲ値を
//データレジスタのＯＲ値にロードする
P0.rdata := P1.oreg;
//古い値を無視
P0.rdati := TRUE;
ELSE
IF(P1.op == 'move')
//先行する動作（ｏｐ）が移動である場合
THEN
//先行する移動のフェッチされた
//ＯＲ値を再利用する
P0.rdata := P0.rdata;
//ゴーストファイルからの
//移動の値を無視する
P0.rdati := TRUE;
ENDIF  //動作がＮＯＰである場合、何も行なわない
ENDIF
より長い読出待ち時間は、より多くのパイプステップにより対処することができる。移動動作のソースコンテンツの先の更新の転送及び制御に対処することは、先の動作数の増加に伴ってある程度複雑になる。
【０１０４】
上記例は、１つの動作ストリームのみを示すために簡略化されている。他の動作ストリームからの先行する動作は、動作を変更する移動ソースに対してチェックされなければならない。複数の移動動作がチェックされなければならないように、レジスタメモリを介する待ち時間は短くなるように選択されている。複数の移動動作が転送ウィンドウに存在することにより、可能な複数の変更値に対して必要な記憶装置の数は増加することになる。
【０１０５】
ゴーストレジスタファイルに対する動作の完了は任意の適切な数のサイクルを有するアクティビティを生成する動作に後続することができるため、ゴーストレジスタファイル５０はクリティカルパスを外れる。これにより、ゴーストレジスタファイル及びそのサポートロジックの小さなセットをチップ上のいずれかの位置に配置することは容易になる。位置及びルートタイミングの問題が存在する場合は、複数のパイプステップを動作転送パスに追加するだけである。
【０１０６】
ゴーストレジスタ動作ストリーム処理
図７は、ゴーストレジスタファイル動作を選択的に変換する動作ストリーム処理ロジックの一例を示している。先行する動作の解析は、ゴーストレジスタファイル５０から逆方向に移動することで、十分な解析時間を保証することができる。動作ストリーム処理ロジック７０は、機能性ユニット（ＦＵ：ｓ）からの無関係の命令コードをゴーストレジスタファイルｎｏｐ：ｓに対してフィルタリングする。更に、動作ストリーム処理ロジック７０は、転送された移動動作読出アドレスを詰め、移動の前にソース変更動作が行なわれる場合、移動動作を割当動作と置換しても良い。新しい割当動作は、先行するソース変更動作からデスティネーションレジスタ値を取得する。
【０１０７】
動作ストリーム処理は、いくつかの移動動作をｎｏｐ：ｓ及び割当動作に変換することになる（上記ゴーストレジスタ動作の種類の説明を参照）。また、動作ストリーム処理は、いくつかのロード及び記憶（スピル及びリロード）を移動動作に変換してもよい（以下のレジスタ割当の説明と比較する）。
【０１０８】
動作ストリームの処理７０は、任意の位置に配置することができ、かつゴーストレジスタファイル５０に向かう。ゴーストレジスタファイル５０及び動作処理７０は隣接する必要はない。
【０１０９】
デバッガ／トレースユーティリティ解析
ユーティリティは、ゴーストレジスタデータをメモリから読み出す。利用される各スナップショットは、通常は、以下のデータを含むことになる：
・ターゲットマシン命令アドレス（スナップショットが発生する場合）
・ゴーストレジスタファイルコンテンツ
ユーティリティは、スナップショットのターゲットマシン命令アドレスを使用して、ユーティリティ自体をターゲットマシンコードにインデックスとして付加する。従って、ユーティリティは、各々がオリジナルコードの命令アドレスによるものである複数のターゲットマシン（例えば、ＶＬＩＷ）基本命令を検出することになる。
【０１１０】
これらのオリジナルコードの命令アドレスにより、ユーティリティはオリジナルコードにマップされる。
【０１１１】
コンパイラ
この方式におけるコンパイラのタスクは、オリジナルレジスタ値をターゲットレジスタに割り当てる命令のデスティネーションレジスタにタグを付加することである。これは、まずコンパイラの変換フェーズで行なわれ、ここで、各ソース命令文は１つ以上のターゲット命令文に変換される。ソース命令文がオリジナルレジスタを割り当てる場合、少なくとも１つのターゲット命令文は、この時点ではオリジナルレジスタを示す仮想またはシンボリックレジスタに値を割り当てる。
【０１１２】
しかし、コンパイラのタスクは変換フェーズにおいて通常は停止しない。コンパイラは、リンカ及びオブジェクト形式に情報を最終的に渡すまで、最適化及びレジスタ割当フェーズを通して仮想レジスタ上にタグを維持しなければならない。
【０１１３】
以下において、「標準」または「追加」の整合性（上記書込モード２及び３に関して）は、オプションとしてコンパイラに与えられていると仮定する。整合性が与えられない場合、通常のコンパイルが実行される。
【０１１４】
変換フェーズ
変換フェーズは、ソース命令が一連の１つ以上のターゲット命令に変換されるコンパイラにおけるフェーズである。通常、これは、ソースプログラムまたはオブジェクトを示す中間形式からターゲットプログラムまたはオブジェクトを示す中間形式に変換することにより行なわれる。一般に、変換は、サイズに制限のないシンボリックまたは仮想レジスタセットに対して行なわれる。換言すると、変換フェーズは、ターゲットレジスタをターゲット命令に割り当てる必要がない。以下において、ターゲットレジスタと言う場合、レジスタ割当フェーズまでは仮想ターゲットレジスタを意味する。
【０１１５】
表現「変換」は、コード全体の変換またはターゲットコードへのソースコードの変換を含んでいて、これは、最適化及びレジスタ割当を含むことが理解されるべきである。
【０１１６】
この方式において、変換段階におけるコンパイラのタスクは、変換された命令毎に、オリジナルデスティネーションレジスタを示す番号または名前でターゲットデスティネーションレジスタにタグを付加することである。通常、このタグは、ターゲットプログラムを示す中間形式の属性として保持される。更に詳細には、タグは変換された命令を示すデータ構造内に保持される。
【０１１７】
コンパイラは、ターゲット命令の順番で、ターゲットデスティネーションレジスタへのオリジナルレジスタ値のロードを実行するソース命令を示すターゲット命令にタグを付加することを選択する。
【０１１８】
これは、全てのターゲットロード命令がオリジナルデスティネーションレジスタによりタグが付加されるわけではないことを意味する。例えば、アドレス計算命令、一時的な計算命令、インデックスまたはポインタチェック、あるいは他の実行時間チェック命令は、ロードまたはオリジナルレジスタを表さないので、当然タグが付加されることはない。これにより、オリジナルレジスタ値ではないレジスタ値が割り当てられるターゲットレジスタに存在するオリジナルレジスタ値を無効化しないまたは無効化するオプションが提供される（上述を参照）。
【０１１９】
最適化フェーズ
最適化フェーズは、通常は、中間形式で示されるターゲットプログラムが特定のターゲットシステムに適合するようにオプションで解析、変換及び調整されるフェーズである。後述するレジスタ割当及び命令スケジューラは、最適化フェーズであると考えられる。
【０１２０】
一般に、最適化フェーズのコンパイラのタスクは、変換中にオリジナルレジスタ値をロードする命令のターゲットデスティネーションレジスタ上にオリジナルレジスタタグ（変換フェーズが設定する）を保持することである。
【０１２１】
種々の例が発生する：
・タグが付加されている命令は除去される−オプションの「追加」の整合性がコンパイラに与えられる場合、その命令は除去されないが、「ゴーストレジスタのみへの書込」という命令であると考えられる。オプションの「標準」の整合性が与えられる場合、その命令は除去される。
【０１２２】
・タグが付加されている命令は置換される−デスティネーションレジスタ上のタグは、古い命令を置換する命令においてデスティネーションレジスタに移動される。
【０１２３】
・タグが付加されている命令は採用または除去される−未変更のデスティネーションレジスタ上のタグを含むターゲット命令は採用または除去される。
【０１２４】
レジスタ割当
レジスタ割当は、コード中の仮想またはシンボリックレジスタの無制限のセットのインスタンスがターゲットアーキテクチャから物理レジスタ名を割り当てられる場合を説明する。制限された数の物理レジスタがマシンに存在するので、レジスタアロケータ（allocator：割当器）は、メモリに対して及びレジスタ間でレジスタ値をロード、記憶及び移動する命令を挿入及び除去する場合がある。あるプログラムポイントにおいてフリー物理レジスタの制限された可用性に起因するメモリに対するレジスタ値の記憶及びロードは、「レジスタのスピル」と呼ばれる。仮想レジスタの１つのインスタンスは、物理レジスタの１つのインスタンスに必ずしもマップされるとは限らない。
【０１２５】
レジスタアロケータのタスクは、他のフェーズと同様に、レジスタ割当の種々の段階におけるターゲットレジスタの種々の中間表現に関わらず、レジスタ割当フェーズを通してターゲットデスティネーションレジスタ上にオリジナルレジスタタグを保持することである。
【０１２６】
追跡モードが「ソースレジスタ値のみ」である場合、割当においてタグを維持することのみを考慮しなければならない。その結果、ゴーストレジスタファイルには、実行時のゴーストレジスタの値が割り当てられる。
【０１２７】
追跡モードが「ターゲットレジスタ値のオリジナルレジスタ値の追跡」である場合、ゴーストレジスタファイルの移動動作はレジスタ間の値の追跡を考慮することになる。しかしながら、メモリにスピルされ、かつリロードされるオリジナルレジスタ値を追跡することを可能にするために、レジスタアロケータのスピルコードジェネレータは、静的に推定することができる場合、オリジナルレジスタ名または番号で挿入されたロード命令のデスティネーションレジスタにタグを付加しなければならない。静的に推定することができない場合、スピルコードは、スピルしたレジスタからゴーストレジスタファイルのスピル領域へのゴーストレジスタの移動を含まなければならず、リロードコードは、ゴーストレジスタファイルスピル領域からターゲットレジスタセットに対応するゴーストレジスタファイルの領域への移動を含まなければならない。
【０１２８】
動的な場合、以下の方法で符号化されてもよい：
スピル記憶は、ゴーストレジスタファイルに到達するようにコンパイラによりマークが付加される。ゴーストレジスタファイルの処理ロジックは、スピル記憶を移動に変換する。この移動は、ゴーストレジスタデータをスピル領域に転送する。
【０１２９】
リロードのロード命令は、ゴーストレジスタファイルの処理ロジックがそのロード命令をスピル領域からターゲットレジスタセットに対応するゴーストレジスタファイルの領域への移動に変換するように、コンパイラによりマークが付加される（ゴーストレジスタファイルに到達する通常のロードは割当に変換される）。リロードのロードのＯＲ値はコンパイラによりスピルしたターゲットレジスタ番号を割り当てられ、これはゴーストレジスタ移動動作におけるソースレジスタオペランドとして使用される。
【０１３０】
これは、以下の表３で示され、かつ図８に示される。
【０１３１】
【表３】
2008536236.tif 000005
【０１３２】
図８は、「動的」な場合のゴーストレジスタファイル５０のスピル及びリロード動作の例を示している。
【０１３３】
追跡モードがプロセッサの状態であるので、両方の追跡モードをサポートするコンパイラは、可能である場合には、リロードコードにタグを付加しなければならない、あるいはゴーストレジスタファイルのスピル領域に対する移動を導入しなければならない。
【０１３４】
命令スケジューラ
命令スケジューラは、マシンのマイクロアーキテクチャが効率的に利用されるように、また待ち時間及びハードウェアリソースの制約がコードによって破れられ、かつ当然プログラムの意味論（シマンテック）が保存されるように、命令がコードストリームに配置されるフェーズである。
【０１３５】
この結果、命令は一連のコードストリームに移動され、ＶＬＩＷシステムに対しては、このフェーズはＶＬＩＷ語への命令の並列化を意味することになる。
【０１３６】
この方式において、命令スケジューラは、命令上にオリジナルレジスタタグを保持する。
【０１３７】
リンカ
リンカは、再配置可能なアドレスが物理アドレスに分解されるフェーズである。レジスタについては言及しないが、リンク時間の最適化が存在する場合、同一のルールがコンパイラにおける最適化に関して当てはまる。
【０１３８】
上述のように、ゴーストレジスタの動作（割当、ｎｏｐ、移動）は、通常のトランザクションメモリに対して指示され得る。逆方向の解析は、トレースデータのオフロード後の解析段階（ＳＷにおいて実現される）またはデバッガにより行なわれる。ここでは、データの圧縮は無駄になる。ゴーストレジスタファイルのサポートロジックは、データ（動作トランザクション）のより大きなセット及びゴーストレジスタイメージのオフラインマルチパス再構成と交換される。トレースは、全てのターゲットレジスタを定義する動作に対応するために十分な大きさでなければならず、その定義は、ゴーストレジスタファイルが存在する場合は常に直接アクセス可能となる。
【０１３９】
一般的な高レベルの場合のメモリを割り当てられた変数の値の追跡
変数の値を追跡する場合、上述のようなゴーストレジスタ語の符号化は異なる。オリジナルレジスタ番号を保持するＯＲフィールドの代わりに、ＯＲフィールドはある特定の状況における１つの変数を示している。符号化は、プログラムアドレス範囲の各生存変数が固有の符号化番号を有するように変換システム（コンパイラ／リンカ）により行なわれる。この変数の符号化のフィールドは、変数の符号化（ＶＥ）と呼ばれる。
【０１４０】
符号化は、変換システムからの出力としてデバッガ／トレースシステムに提供されなければならない。ＴＭＩＡは、ＴＭＩＡと関連付けられるＶＥに対して固有の変数アイデンティティを常に有するアドレス範囲に常に含まれるので、ＴＭＩＡフィールドは、変数の符号化の解決に対して重要なものである。
【０１４１】
コンパイラは、変数の符号化番号を有する変数からレジスタをロードする各ターゲット命令にタグを付加する。これは、レジスタコヒーレンスの場合と同様に、ゴーストレジスタファイルまたは同等のモジュールにおける割当を結果としてもたらす。変数値がターゲットレジスタ間で移動される場合は、これは、レジスタコヒーレンスの場合と同様に、ゴーストレジスタファイルにおける移動動作を結果としてもたらす。
【０１４２】
尚、変数値を保持するレジスタが常に変数のメモリ一にスピルされるので、ゴーストレジスタファイルのスピル領域は変数値追跡時には必要とされないことに注意するべきである。当然、コンパイラは、変数をターゲットレジスタファイルにリロードする命令にタグを付加しなければならない。
【０１４３】
この方法は、レジスタに存在する変数の現在の値及び常駐性を示している。
【０１４４】
上述の実施形態は例として与えられているにすぎず、本発明はそれらに限定されないことが理解されるべきである。開示され、かつ請求項で定義される基本原理を保持する更なる変形、変更及び改善は本発明の範囲内である。
【０１４５】
参考文献
［１］「Evicted Variables and the Interaction of Global Register Allocation and Symbolic Debugging」Ali-Reza Adl Tabatabai, Thomas Gross, Proceeding of the 20th ACM symposium on Principles of Programming Languages
［２］特許第８，２２１，２９６号公報
［３］米国特許第６，１８５，７３２号公報
［４］特許公開第２０００−１８１７４６号公報
［５］米国特許第６，０９４，７２９号公報
［６］米国特許第６，２４３，３０４号公報
［７］「Computer Architecture, A Quantitative Approach」John L. Hennessy, David A. Patterson, Morgan Kaufmann Publishers, chapter 3.4「Data Hazards」
【図面の簡単な説明】
【０１４６】
【図１】本発明の好適な実施形態に従う、オリジナルソースコードとターゲットコードとの間のデータ値の整合性をサポートする機構を示す概略図である。
【図２】デバッグ及びトレース解析の少なくとも一方を含み、対応するターゲットコードの実行時にオリジナルソースコードのデータ値を追跡する好適な方法全体を概略的に示すフローチャートである。
【図３】本発明の特定の実施形態に従う好適なプロセッサ環境におけるゴーストレジスタファイルを示す図である。
【図４】ゴーストレジスタファイルの異なる用途の例を示すターゲットレジスタファイル及びゴーストレジスタファイルを示す概略図である。
【図５】一連のターゲットレジスタがいくつかの並列インスタンスを有するように、一連のコードのターゲットレジスタが並列化される場合のゴーストレジスタファイルの用途の一例を示すターゲットレジスタファイル及びゴーストレジスタファイルの概略図である。
【図６】ゴーストレジスタファイル動作の一連の整合性を保証するゴーストレジスタファイルパイプステップロジックの一例を示す図である。
【図７】ゴーストレジスタファイル動作を選択的に変換する動作ストリーム処理ロジックの一例を示す図である。
【図８】本発明の好適な実施形態に従うゴーストレジスタファイルのスピル及びリロード動作の例を示す図である。
【図１】
2008536236.tif 000006
【図２】
2008536236.tif 000007
【図３】
2008536236.tif 000008
【図４】
2008536236.tif 000009
【図５】
2008536236.tif 000010
【図６】
2008536236.tif 000011
【図７】
2008536236.tif 000012
【図８】
2008536236.tif 000013
【国際調査報告】
2008536236.tif 000014
2008536236.tif 000015
2008536236.tif 000016