(57)【要約】ターゲットコンピューティングシステム（１０）は、レジスタウインドウアーキテクチャをサポートするように適合させられており、特に、自システムとは異なるアークテクチャのサブジェクトコード（１７）を、ターゲットプロセッサ（１３）によって実行されるターゲットコード（２１）に変換する際に、用いられる。メモリにおける、サブジェクトレジスタスタックデータ構造（「ＳＲスタック」）（４００）は、複数のフレーム（４１０）を有し、複数のフレーム（４１０）の各々は、サブジェクトプロセッサ（３）における、一つのレジスタウインドウ（５１０）のサブジェクトレジスタ（５０２）のサブセットに対応するエントリ（４０１）の１セットを含む。ＳＲ（１０）スタック（４００）は、ターゲットプロセッサ（１３）上で実行される、ターゲットコード（２１）によってアクセスされる。ＳＲスタック（４００）は、このような複数のフレーム４１０を多数、記憶して、それによって、サブジェクトアーキテクチャのウインドウ表示されたレジスタファイルからの、モデリングオートマチックスピルや充てん動作などのオーバーヘッドを回避する。一実施形態において、１６個の汎用ワーキングレジスタを有するターゲットコンピューティングシステム（１０）は、数十個、あるいは数百個のサブジェクトレジスタ（５０２）を含むレジスタファイル（１５）に依存して、レジスタウインドウアーキテクチャをサポートするように適合させられる。
2010506250.tif 000002
【特許請求の範囲】
【請求項１】
レジスタウインドウアーキテクチャをサポートするように適合されたコンピューティングシステムであって、レジスタウインドウに基づくサブジェクトコンピューティングアーキテクチャのサブジェクトプロセッサによって実行可能なサブジェクトコードとともに用いられ、前記レジスタウインドウが、ウインドウ表示されたレジスタファイルから、サブジェクトプロセッサのサブジェクトレジスタの選択されたサブセットを明確にするように設けられ、前記サブジェクトコードは、レジスタウインドウに影響を与えるウインドウに基づいた命令と、前記レジスタウインドウにおけるサブジェクトレジスタに対するリファレンスを含むレジスタに基づいた命令を含み、前記コンピューティングシステムは、
前記サブジェクトコードを復号化して、前記ウインドウに基づく命令から、レジスタウインドウの動きについての情報を導き出し、且つ前記レジスタに基づく命令から、一つ以上のウインドウ表示されたサブジェクトレジスタリファレンスを導き出すように構成されているデコーダユニットと、
複数のエントリを記憶するように設けられた、スタックデータ構造を有するメモリと、
前記デコーダユニットによって復号化された前記サブジェクトコードからターゲットコードを生成するように構成されているエンコーダユニットと、
前記ターゲットコードを実行して、前記メモリにおける前記スタックデータ構造の先頭に関連したスタックポインタを設定し、前記レジスタウインドウの動きについての情報を参照して、前記スタックポインタを調整し、前記ウインドウ表示されたサブジェクトレジスタリファレンスの各々について決定された変位と組み合わされた前記スタックポインタを参照して、前記スタックデータ構造内のエントリにアクセスするように構成されたターゲットプロセッサと、
を備える、コンピューティングシステム。
【請求項２】
前記デコーダユニットは、少なくとも前記レジスタウインドウのＳＡＶＥおよびＲＥＳＴＯＲＥタイプの動きを引き起こす前記サブジェクトコードにおいて、前記ウインドウに基づく命令のうち、一つ以上を識別し、前記ウインドウに基づく命令から、少なくともＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報を導き出すように構成されている、請求項１に記載のコンピューティングシステム。
【請求項３】
前記ターゲットプロセッサは、前記各ＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、前記スタックポインタを調整するように構成されている、請求項２に記載のコンピューティングシステム。
【請求項４】
前記ターゲットプロセッサは、前記各ＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のオフセットによって、前記スタックポインタを調整するように構成されている、請求項３に記載のコンピューティングシステム。
【請求項５】
前記ターゲットプロセッサは、前記各ＳＡＶＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のオフセットによって、前記スタックポインタを増分し、且つ前記各ＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のオフセットによって、前記スタックポインタを減分するか、または前記各ＳＡＶＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のオフセットによって、前記スタックポインタを減分し、且つ前記各ＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のオフセットによって、前記スタックポインタを増分するように構成されている、請求項４に記載のコンピューティングシステム。
【請求項６】
前記所定のオフセットは、前記ウインドウ表示されたサブジェクトレジスタリファレンスのアドレス指定可能なセットの大きさに対応する、請求項５に記載のコンピューティングシステム。
【請求項７】
前記ターゲットプロセッサは、前記ウインドウ表示されたサブジェクトレジスタリファレンスのアドレス指定可能なセット内において、前記各ウインドウ表示されたサブジェクトレジスタリファレンスの位置について、前記ウインドウ表示されたサブジェクトレジスタリファレンスごとに、変位を決定するように構成されている、請求項６に記載のコンピューティングシステム。
【請求項８】
前記エンコーダユニットは、前記調整されたスタックポインタを前記決定された変位に組み合わせることによって、前記ターゲットプロセッサに、前記スタックデータ構造の選択されたエントリにアクセスさせる、少なくとも一つのターゲットコード命令を発するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項９】
前記ターゲットプロセッサは、前記レジスタウインドウの動きに関する情報にしたがって、所定の数のエントリによって、前記スタックポインタを調整するようにフレームオフセットを決定し、前記決定されたフレームオフセットと前記決定された変位とにしたがって、前記スタックデータ構造から選択されたエントリにアクセスするように、前記スタックポインタを調整するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項１０】
前記デコーダユニットは、前記レジスタウインドウの動きに関する情報が導き出される前記サブジェクトコードにおいて、前記ウインドウに基づく命令にしたがって、前記サブジェクトコードを、複数のブロックに分割するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項１１】
前記サブジェクトコードは、被呼び出し部分に対して関数呼び出しを行う、少なくとも一つの呼び出し部分を含み、且つ前記エンコーダユニットは、前記被呼び出し部分を、前記呼び出し部分にインライン化するターゲットコードの単一のブロックを生成するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項１２】
前記エンコーダユニットは、前記ターゲットプロセッサによって、
ｉ）前記ウインドウ表示されたサブジェクトレジスタリファレンス及び前記スタックポインタから導き出された前記変位を参照して、前記サブジェクトコードの前記呼び出し部分において識別された、前記ウインドウ表示されたサブジェクトレジスタリファレンスにしたがって、前記スタックデータ構造から選択されたエントリにアクセスし、
ｉｉ）前記サブジェクトコードの前記呼び出し部分から導き出された、前記レジスタウインドウの動きに関する情報にしたがって、前記スタックデータ構造の所定の数のエントリに等価なフレームオフセットを増加し、
ｉｉｉ）ウインドウ表示されたサブジェクトレジスタリファレンスから導き出された前記変位と、フレームオフセットにしたがって調整されたスタックポインタを参照して、サブジェクトコードの前記被呼び出し部分において識別された、ウインドウ表示されたサブジェクトレジスタリファレンスにしたがって、前記スタックデータ構造から選択されたエントリにアクセスし、
ｉｖ）サブジェクトコードの前記被呼び出し部分から導き出された、前記レジスタウインドウの動きに関する情報にしたがって、前記フレームオフセットを減少させる
ように、実行される前記ターゲットコード命令を生成するように構成されている、請求項１１に記載のコンピューティングシステム。
【請求項１３】
前記メモリはさらに、前記サブジェクトコードの実行用に、実行スタックをエミュレートするように構成された、エミュレート実行スタックを備え、
前記デコーダユニットは、前記サブジェクトコードを復号化して、少なくともＳＡＶＥタイプおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報を識別するように構成され、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行された前記ターゲットコードを生成して、識別されたレジスタウインドウの動きごとにカウンタをアップデートさせるように構成され、前記アップデートは、ＳＡＶＥごとにカウンタを増加させることと、ＲＥＳＴＯＲＥごとにカウンタを減分させることを含み、それによって、前記カウンタは、各フレームがスタックデータ構造上に記憶された所定の数のエントリを含む、フレームの数をカウントし、
前記デコーダユニットは、前記サブジェクトコードにおいて前記レジスタに基づいた命令から導き出された、前記ウインドウ表示されたサブジェクトレジスタリファレンスにおいて保持される、データの値の流出を要求するような前記サブジェクトコードにおいて、ＳＰＩＬＬタイプの命令を識別するように構成され、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行された前記ターゲットコードを生成して、前記スタックデータ構造におけるエントリから、メモリ内で前記エミュレートされた実行スタック上に割り当てられた対応するエントリに、データの値をコピーするように構成され、ここで、前記エントリは、カウンタによって決定されるような多数のフレーム内に存在し、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行される前記ターゲットコードを生成して、前記スタックデータ構造内に、エントリの有効なフレームがないことを示す、デフォルト値に前記カウンタをリセットするように構成され、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行される前記ターゲットコードを生成して、前記メモリ内の前記エミュレートされた実行スタックにおける前記エントリ内に記憶された、前記データの値をアドレス指定するように構成されている、
請求項１に記載のコンピューティングシステム。
【請求項１４】
前記デコーダユニットはさらに、前記メモリ内の前記エミュレートされた実行スタックにおける前記エントリに保持された、データの値の充てんを要求する、前記サブジェクトコードにおいて、ＦＩＬＬタイプの命令を識別するように構成され、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行された前記ターゲットコードを生成して、前記デフォルト値について前記カウンタをテストするように構成され、
ｉ）ここで、前記カウンタをテストすることは、前記スタックデータ構造に一つ以上のエントリの有効なフレームが存在することを示し、識別されたＦＩＬＬ命令にしたがって、前記カウンタをアップデートして、
ｉｉ）ここで、前記カウンタをテストすることは、前記スタックデータ構造にエントリの有効な先行するフレームが存在しないことを示し、前記スタックデータ構造におけるエントリのカレントフレームとして、前記メモリにおける前記エミュレートされた実行スタックのエントリのフレームから、前記メモリ内の前記スタックデータ構造にデータの値をコピーする、
請求項１３に記載のコンピューティングシステム。
【請求項１５】
前記デコーダユニットは、前記サブジェクトコードを複数のサブジェクトコードブロックに分割するように構成され、且つ前記エンコーダユニットは、前記ターゲットプロセッサによる前記ターゲットコードのブロックの実行によってインタリーブされた、対応する複数のターゲットコードブロックとして、前記ターゲットコードを生成するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項１６】
前記サブジェクトコードは、実行可能なバイナリコードであって、前記ターゲットコードは、実行可能なバイナリコードである、請求項１に記載のコンピューティングシステム。
【請求項１７】
レジスタウインドウアーキテクチャをサポートするように適合されたコンピューティングシステムを制御する方法であって、
（ａ）レジスタウインドウに基づくサブジェクトコンピューティングアーキテクチャのサブジェクトプロセッサによって実行可能な、サブジェクトコードを復号化する工程であって、レジスタウインドウが、ウインドウ表示されたレジスタファイルから、サブジェクトレジスタの選択されたサブセットを明確にするように位置決めされ、
（ａ１）前記サブジェクトコードにおける命令から、ウインドウ表示されたサブジェクトレジスタリファレンスを識別する工程であって、前記ウインドウ表示されたサブジェクトリファレンスが、前記レジスタウインドウにおける前記サブジェクトレジスタのうちの一つに対するリファレンスを含む、前記識別する工程と、
（ａ２）前記レジスタウインドウの動きを発生させる前記サブジェクトコードにおける命令から、レジスタウインドウの動きに関する情報を導き出す工程と
を含む、前記工程（ａ）と、
（ｂ）前記コンピューティングシステムのメモリ内において、複数のエントリを記憶させるように構成されたスタックデータ構造を提供して、前記メモリ内で、前記スタックデータ構造の先頭を指示するスタックポインタを設定する工程と、
（ｃ）前記サブジェクトコードをターゲットコードに変換して、前記コンピューティングシステムのターゲットプロセッサ上で前記ターゲットコードを実行する工程であって、それにより
（ｃ１）前記識別されたレジスタウインドウの動きについての情報を参照して、前記スタックポインタを調整する工程と、
（ｃ２）前記ウインドウ表示されたサブジェクトレジスタリファレンスから決定された変位と組み合わされた前記スタックポインタを参照して、前記スタックデータ構造内のエントリのうちの少なくとも一つにアクセスする工程と
を実行する、前記工程（ｃ）と
を備える、方法。
【請求項１８】
前記（ａ２）の工程は、前記レジスタウインドウの少なくともＳＡＶＥおよびＲＥＳＴＯＲＥタイプの動きを発生させる、前記サブジェクトコードにおいて、一つ以上の命令を識別して、それによって、少なくともＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報を導き出すことを含み、
前記（ｃ１）の工程は、前記各ＳＡＶＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のフレームオフセットによって、前記スタックポインタを増分し、且つ前記各ＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のフレームオフセットによって、前記スタックポインタを減分するか、または前記各ＳＡＶＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のフレームオフセットによって、前記スタックポインタを減分し、且つ前記各ＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のフレームオフセットによって、前記スタックポインタを増分することを含む、
請求項１７に記載の方法。
【請求項１９】
前記スタックデータ構造における前記エントリの各々が、前記サブジェクトコード内の前記レジスタに基づく命令における、ウインドウ表示されたサブジェクトレジスタリファレンスのセットのうち一つに対応する方法であって、
前記ステップ（ｃ１）において、前記フレームオフセットは、前記セットの大きさに対応する前記スタックデータ構造上における多数のエントリによって、前記スタックポインタを調整し、
前記ステップ（ｃ２）において、前記変位は、セット内の前記ウインドウ表示されたサブジェクトレジスタリファレンスの相対位置にしたがって、多数のスタックデータ構造上のエントリによって、前記スタックポインタを変位させる、
請求項１８に記載の方法。
【請求項２０】
レジスタウインドウの動きに関する情報が導き出される命令の位置にしたがって、前記サブジェクトコードを、複数のブロックに分割する工程をさらに含み、このようなブロックごとに、前記サブジェクトコードブロック内のサブジェクトコード命令について、前記工程（ａ）、（ｂ）、および（ｃ）を行う、請求項１７に記載の方法。
【請求項２１】
前記サブジェクトコードは、被呼び出し部分に対して関数呼び出しを行う、少なくとも一つの呼び出し部分を含み、前記工程（ｃ）はさらに、被呼び出し部分を、呼び出し部分にインライン化する、前記ターゲットコードの単一のブロックを供給することを含む、請求項１７に記載の方法。
【請求項２２】
第一の値を有する前記スタックポインタを提供し、一つ以上のターゲットコード命令を実行して、ウインドウ表示されたサブジェクトレジスタリファレンスから導き出された変位と、前記スタックポインタの第一の値とを参照して、サブジェクトコードの前記呼び出し部分において識別された、ウインドウ表示されたサブジェクトレジスタリファレンスにしたがって、前記スタックデータ構造から選択されたエントリにアクセスする工程と、
サブジェクトコードの前記呼び出し部分から導き出された前記レジスタウインドウの動きに関する情報にしたがって、所定の数のエントリによって、フレームオフセットを増加させる工程と、
ウインドウ表示されたサブジェクトレジスタリファレンスから導き出された変位と、フレームオフセットにしたがって調整されるようなスタックポインタとを参照して、サブジェクトコードの被呼び出し部分において識別された、ウインドウ表示されたサブジェクトレジスタリファレンスにしたがって、前記スタックデータ構造から選択されたエントリにアクセスするように、一つ以上のターゲットコード命令を実行する工程と、
前記サブジェクトコードの被呼び出し部分から導き出された、レジスタウインドウの動きに関する情報にしたがって、フレームオフセットを減少させる工程と
を含む、請求項２１に記載の方法。
【請求項２３】
前記コンピューティングシステムの前記メモリにおいてエミュレートされた実行スタックを提供して、サブジェクトコードの実行に関する実行スタックをエミュレートする工程と、
少なくとも前記ＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報を識別する、前記サブジェクトコードを復号化する工程と、
ＳＡＶＥごとにカウンタを増分し、ＲＥＳＴＯＲＥごとにカウンタを減分することを含み、これによって、前記カウンタは、スタックデータ構造上に記憶されたエントリの多数のフレームをカウントする、ＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報ごとに、カウンタをアップデートする工程と、
前記サブジェクトコードによって、実行スタックにアドレス指定された、ウインドウ表示されたサブジェクトレジスタ内に保持されたデータの値の流出を要求する、前記サブジェクトコードにおける、ＳＰＩＬＬタイプの命令を識別する工程と、
エントリの多数のフレームからのデータの値を、前記スタックデータ構造から、前記エミュレートされた実行スタック上に割り当てられた対応する空間にコピーする工程であって、エントリのフレームの数はカウンタによって決定される、前記コピーする工程と、
前記スタックデータ構造内にエントリの有効なフレームが存在しないことを示す、デフォルト値に、カウンタをリセットする工程と、
ターゲットコードを生成して、エミュレートされた実行スタック上に記憶されたデータの値をアドレス指定する工程と
をさらに備える、請求項１８に記載の方法。
【請求項２４】
実行スタックにおいて保持されたデータの値を、サブジェクトコードによってアドレス指定された、ウインドウ表示されたサブジェクトレジスタ内に充てんすることを要求する、前記サブジェクトコードにおける、ＦＩＬＬタイプの命令を識別する工程と、
デフォルト値について、カウンタをテストする工程と、
をさらに備え、
前記カウンタをテストする工程は、一つ以上のエントリの有効なフレームが、スタックデータ構造内に存在することを示し、識別されたＦＩＬＬ命令にしたがって、カウンタをアップデートして、
前記カウンタをテストする工程は、エントリの先行する有効なフレームが、スタックデータ構造内に存在しないことを示し、エミュレートされた実行スタックからのデータの値のフレームを、エントリのカレントフレームとして使用するための、スタックデータ構造にコピーする
請求項２３に記載の方法。
【請求項２５】
実行されたときに、レジスタウインドウアーキテクチャをサポートするようにコンピューティングシステムを適合させる、コンピュータで実行可能な命令が記録された、コンピュータで読み取り可能な記憶媒体であって、
（ａ）レジスタウインドウに基づいたサブジェクトコンピューティングアーキテクチャのサブジェクトプロセッサによって実行可能なサブジェクトコードを復号化するように構成されたコードユニットであって、カレントレジスタウインドウは、ウインドウ表示されたレジスタファイルから、サブジェクトレジスタの選択されたサブセットを明らかにするように位置決めされ、サブジェクトコード内の命令から、ウインドウ表示されたサブジェクトレジスタリファレンスを識別することを含み、前記ウインドウ表示されたサブジェクトレジスタリファレンスは、レジスタウインドウ内の前記サブジェクトレジスタのうちの一つに対するリファレンスを含み、レジスタウインドウの動きを発生させる、サブジェクトコード内の命令から、レジスタウインドウの動きについての情報を導き出す、前記コードユニットと、
（ｂ）複数のエントリを記憶させるように構成されたコンピューティングシステムのメモリ内にスタックデータ構造を提供して、前記メモリ内で、スタックデータ構造の先頭を指示するスタックポインタを設定するように構成されたコードユニットと、
（ｃ）サブジェクトコードをターゲットコードに変換して、コンピューティングシステムのプロセッサ上で、このターゲットコードを実行させ、識別されたレジスタウインドウの動きについての情報を参照して、スタックポインタを調整し、また、ウインドウ表示されたサブジェクトレジスタリファレンスから決定された変位と組み合わされた調整されたスタックポインタを参照して、スタックデータ構造内のエントリのうちの少なくとも一つにアクセスするように構成されたコードユニットと、
を備える、コンピュータで読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、コンピュータおよびコンピュータシステムの分野に関連する。さらに詳細には、本発明は、レジスタウインドウアーキテクチャをサポートするように適合したコンピュータシステムおよびレジスタウインドウアーキテクチャをサポートするようにコンピュータシステムを適合させる方法に関する。
【背景技術】
【０００２】
中央処理装置（ＣＰＵ）あるいはプロセッサは、すべての近代的なコンピュータシステムの中心部に位置している。プロセッサは、コンピュータプログラムの命令を実行し、このようにして、コンピュータに有益な作業を行わせることを可能にする。ＣＰＵは、パソコン、ノート型パソコン、およびＰＤＡなどの専用コンピュータマシンのみでなく、現代生活におけるあらゆる種類のデジタル機器において普及している。近代のマイクロプロセッサは、自動車から、洗濯機、子供の玩具にわたり、あらゆる分野において見られる。
【０００３】
あるタイプのプロセッサによって実行可能であるプログラムコードは、他のタイプのプロセッサによっては実行不可能である場合が多い点に問題がある。第一に、各タイプのプロセッサは、それ独自の命令セットアーキテクチャ（ＩＳＡ）を有している。第二に、多くの場合、プロセッサは、他のタイプのプロセッサには存在しない、独自のハードウエアの特徴を有している。したがって、自動的に、一つのタイプのプロセッサに関して書き込まれたプログラムコードを、他のタイプのプロセッサによって実行可能なコードに変換するか、あるいは、旧式で無効なコードを、同じタイプのプロセッサに関するより新しい、またより速いバージョンに最適化するように、プログラムコード変換の分野が発展した。すなわち、組み込まれたＣＰＵおよび組み込まれていないＣＰＵの両方において、パフォーマンスが「加速されうる」あるいは、より良いコスト／パフォーマンスによる利益をもたらす他のプロセッサに「変換されうる」、大量のソフトウエアが既に存在する主要なＩＳＡがある。また、それらのＩＳＡに合わせて時間内にロックされて、パフォーマンスあるいは市場参入において発展することが不可能な、主要なＣＰＵアーキテクチャも認識されている。この問題は、スタンドアロンのポケットサイズの装置から、数十個、あるいは数百個の高性能のコンピュータを有する大型ネットワークにいたるまで、電子産業のあらゆるレベルにおいて当てはまる。
【０００４】
このプログラムコード変換の分野における、背景技術としては、「プログラムコード変換」と題された国際出願公開公報第２０００／２２５２１号明細書、「プログラムコード変換中においてインタープリタの最適化を実行する方法および装置」と題された国際出願公開公報第２００４／０９５２６４号明細書、発明の名称、「プログラムコード変換に関して中間表現を生成するための改良されたアーキテクチャ」と題された国際出願公開公報第２００４／０９７６３１号明細書、「調整可能で正確な例外処理を実行するための方法および装置」と題された国際出願公開第２００５／００６１０６号明細書、および「プログラムコード変換中における正確な例外処理のための方法および装置」と題された国際出願公開代２００６／１０３３９５号明細書が挙げられる。これらはすべて、参照により本明細書に組み込まれ、本明細書において説明される実施形態の例で用いられうる、プログラムコード変換能力を促進させる方法および装置を開示している。
【０００５】
最も近代的なプロセッサは、あるタイプの高速アクセスメモリとして、レジスタを１セット含む。プロセッサは、レジスタを用いて、一時的な値を維持する一方、コンピュータプログラムにおいて、一連の命令を実行する。プロセッサのハードウエアは、これらのレジスタを有限数含み、また、用いられる際には、プログラムの実行によって、ただちに、すべての利用可能なレジスタを、一時的なデータ値で満たす。これによって、プロセッサがコードのあるセクションから他のセクションに移動するにつれて、利用可能なレジスタ間で競争が起こる。なぜなら、コードの各セクションは一時的な値を生成して、それらの一時的なデータ値を保存するために、プロセッサにおいてレジスタを活用する必要があるからである。
【０００６】
この困難性に応じて、プロセッサは、レジスタウインドウアーキテクチャによって発展してきた。例えば、１９９０年代初頭のバークリーＲＩＳＣの設計に基づいた、レジスタウインドウアーキテクチャは、ハードウエアレジスタ（レジスタファイル）の大きいセットを提供するが、コードのカレントセクションによってアクセスされるこれらのレジスタ（レジスタウインドウ）については、小さいサブセットのみが可能となる。レジスタウインドウのカレント位置の外側に存在するレジスタファイル中の他のレジスタは、コンピュータプログラムのカレントセクションによってアクセス可能ではない。例えば、任意のある時間においては、合計で６４個のレジスタのレジスタファイルのうち、８個のレジスタのみが視認できる。プロセッサがコードのあるセクションから他のセクションに移動するとき、例えば、手続き呼び出しが実行されるようなときには、レジスタウインドウは、レジスタファイル内でその位置を移動させて、コードの新しいセクションに関して、レジスタの異なるサブセットを露出させる。これらの動きは一般的に、ＳＡＶＥタイプの動きを発生させるものとして分類されるか、あるいは、ＲＥＳＴＯＲＥタイプの動きを発生させるものとして分類される。ここで、ＳＡＶＥタイプの動きとは、レジスタウインドウが、前もって使用されていない位置に移動して、何も記憶されていないハードウエアレジスタのセットを、実行中のサブジェクトコードに提供することであり、ＲＥＳＴＯＲＥタイプの動きとは、レジスタウインドウを、前もって露出させた位置にまで戻し、このようにして、前もって使用したレジスタの１セットを実行コードに対して示すことによって、これらのレジスタ内に維持されるデータ値に対するアクセスを復元することである。しかしながら、最終的には、レジスタファイル内における有限数のハードウエアレジスタは、プログラムを実行することによって呼び出される、手続き呼び出しレベルの数に応じていっぱいになる。ここで、ＳＰＩＬＬ動作が実行されることによって、レジスタ内のデータの値は、プロセッサの外部にある二階層のメモリなどの安全な位置にまで移動する。その後、ＦＩＬＬ動作は、プロセッサがコードの関連するセクションの実行を継続的に行えるように、これらのデータの値をハードウエアレジスタに戻す。
【０００７】
このレジスタウインドウアーキテクチャは、特に、プロセッサが頻繁に、コードのあるセクションから他のセクションに移動して、それから、第一のセクションに戻る（すなわち、手続き呼び出しを実行する）場合に、コンピュータプログラムの大部分に関する、コストおよび時間のかかるレジスタの流出および充てん動作を避けることによって、コンピューティングシステムが早急に、実行できるようにさせることを目的としている。
【０００８】
このレジスタウインドウアーキテクチャは、大商業規模で、ＳＰＡＲＣ、ＡＭＤ２９０００、およびインテルｉ９６０などのプロセッサに採用されている。このため、これらのアーキテクチャ上でのみ実行されるように、コードの大部分が既に書き込まれている。また、任意の他のタイプのプロセッサによってコードの大部分を実行することはできない。
【０００９】
これらの市販されているプロセッサのうち、ＳＰＡＲＣは特に、普及している。ＳＰＡＲＣレジスタウインドウアーキテクチャについてのさらなる背景情報は、例えば、ＳＰＡＲＣ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｍａｎｕａｌ，Ｖｅｒｓｉｏｎ  ８，Ｓｅｃｔｉｏｎ  ４．１，“Ｒｅｇｉｓｔｅｒｓ”およびＳＰＡＲＣ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｍａｎｕａｌ，Ｖｅｒｓｉｏｎ  ９，Ｓｅｃｔｉｏｎ  ５．１，“Ｒｅｇｉｓｔｅｒｓ”（ＳＰＡＲＣ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｉｎｃ  ｏｆ  Ｓａｎ  Ｊｏｓｅ，Ｃａｌｉｆｏｒｎｉａ）において認められる。この開示は、参照により本明細書に組み込まれる。
【００１０】
実施例として、図１は、従来技術のｖ９  ＳＰＡＲＣアーキテクチャにおけるレジスタウインドウの使用を示している。このｖ９  ＳＰＡＲＣアーキテクチャは、複数のコントロール／ステータスレジスタと、多数の汎用（「ｒ」）レジスタを提供する。汎用レジスタは、８個恒久的なのビジブルグローバルレジスタ（およびさらに、８個のグローバルの代替物）と、８個の「イン」レジスタ、８個の「ローカル」レジスタ、および８個の「アウト」レジスタに分割された、移動可能な２４個のレジスタウインドウを含む。全体的なレジスタファイルへのカレントウインドウは、コントロール／ステータスレジスタの一つにおいて維持される、カレントウインドウポインタ（ＣＷＰ）によって付与される。このＣＷＰは、「復元」命令が実行されるたびに、増加して、また、「保存」命令に対して、あるいはトラップが発生するときに減少する。この実施例において、一つのウインドウ位置の８個の「アウト」レジスタが、隣接するウインドウの位置における８個の「イン」レジスタと重複するように、２４−レジスタウインドウは、部分的に、隣接するウインドウの位置と重複する。その一方、ローカルレジスタは、ウインドウ位置ごとに固有のものである。すなわち、ウインドウ位置ＣＷＰ＋１の「アウト」レジスタもまた、カレントウインドウＣＷＰの「イン」レジスタとしてアドレス可能である。また、カレントウインドウＣＷＰの「アウト」レジスタは、次のウインドウＣＷＰ−１の「イン」レジスタと等価である。ｖ９  ＳＰＡＲＣアーキテクチャは、特定のハードウエアの実行に依存して、最小限の３個のウインドウ位置から、最大限の３２個のウインドウ位置までをサポートする。このため、永久的に視認可能なグローバルレジスタとともに、ｖ９  ＳＰＡＲＣアーキテクチャは、６４個から５２８個の汎用ハードウエアレジスタ（８個のグローバルレジスタ、８個の代替グローバル、およびウインドウ位置ごとに１６個のレジスタ）を必要とする。
【００１１】
図２は、ｖ９  ＳＰＡＲＣアーキテクチャの実施例における、ウインドウ表示されたレジスタファイルの円形の性質を示している。ハードウエアレジスタの数は有限であり、本実施例において、８個のレジスタウインドウ位置に対応して、１２８個のウインドウ表示されたハードウエアレジスタが存在する。図２は、カレントウインドウ（ＣＷＰ＝０）として、ウインドウ位置Ｗ０を示している。カレントウインドウ位置Ｗ０を用いる手順が、ＲＥＳＴＯＲＥを実行する場合、その後、ウインドウ位置Ｗ７は、カレントウインドウ（ＣＷＰ＝＋１）となるであろう。また、位置Ｗ０における手続きがＳＡＶＥを実行する場合、ウインドウ位置Ｗ１はカレントウインドウとなる。すべてのレジスタウインドウ位置が消費されたときに、ウインドウオーバーフロウトラップが発生する。すなわち、これらのレジスタは既に、以前のプログラムコードのセクションを実行することから、有効なデータを含んでおり、上書きされるべきではないからである。ｖ９アーキテクチャの実施例において、ウインドウオーバーフロウは、ＣＷＰにリンクされたＣＡＮＳＡＶＥコントロール／ステータスレジスタを用いて検出される。この時点で、レジスタの内容は、レジスタファイルに保存された有効なデータを上書きすることなく、実行し続けられるようにするために、主要なサブジェクトメモリ８における実行スタックなどの、メモリのより遅いアクセス領域に流出される。プログラムが最終的に、元のレジスタ値が、再度必要とされる時点に対してＲＥＳＴＯＲＥの指示を複数行うと、充てん動作によって、スタックから、レジスタファイルのハードウエアレジスタにレジスタ値を充てんする。ここで、ウインドウアンダーフロウトラップは、ＣＡＮＲＥＳＴＯＲＥコントロール／ステータスレジスタを参照して、レジスタウインドウの無効な復元移動を防ぐ。
【００１２】
この実施例において、元のプログラムコード（ここでは「サブジェクトコード」と称する）は、レジスタウインドウアーキテクチャを有する、特別なタイプのサブジェクトハードウエアに依存する。しかしながら、本発明のプログラムコード変換の分野において、今度は、サブジェクトコードはターゲットコードに変換され、ターゲットコンピューティングシステムによって実行される。すなわち、レジスタウインドウアーキテクチャに基づいたより旧式のサブジェクトコンピュータシステムを、今回は、より新しいターゲットコンピュータシステムに置き換えることが望ましいが、依然として、サブジェクトコンピュータシステムのレジスタウインドウアーキテクチャをサポートする、ターゲットコンピュータシステムを有していることが望ましい。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
本発明の目的は、レジスタウインドウアーキテクチャをサポートするように適合された、コンピューティングシステムを提供することにある。例示的な実施形態は、コンピュータシステムを、他システムのアーキテクチャであって、自システムのアーキテクチャとは異なる、レジスタウインドウアーキテクチャをサポートするように適合させることを目的としている。
【課題を解決するための手段】
【００１４】
本発明によれば、コンピューティングシステム、コンピュータシステムを適合させる方法、および、添付の特許請求の範囲に記載されているような、コンピュータ読取可能な記憶媒体が提供される。本発明の他の特徴は、従属請求項から明白である。これについての説明を以下に述べる。
【００１５】
本発明のある例示的な態様において、少なくとも一つのデコーダユニット、エンコーダユニット、メモリ、およびターゲットプロセッサを備えるコンピューティングシステムを提供する。前記デコーダユニットは、サブジェクトコンピューティングアーキテクチャに応じて、レジスタウインドウのサブジェクトプロセッサによって実行可能な、サブジェクトコードを復号化するように構成されている。ここで、カレントレジスタウインドウは、ウインドウ表示されたレジスタファイルから、サブジェクトレジスタの選択されたサブセットを明らかにするように設けられている。サブジェクトコードは、レジスタファイルに関連して、レジスタウインドウの位置に影響を与える、ウインドウに基づいた命令と、レジスタウインドウ内のレジスタのリファレンスを含む、レジスタに基づいた命令を含む。デコーダユニットはさらに、レジスタウインドウの動作を発生させることを意図した、サブジェクトコード内におけるウインドウに基づく命令を識別して、このウインドウに基づく命令から、レジスタウインドウの動きについての情報を導き出すように構成されている。さらにまた、デコーダユニットは、サブジェクトコード内におけるレジスタに基づく命令を識別して、このレジスタに基づく命令から、一つ以上のウインドウ表示されたサブジェクトレジスタリファレンスを導き出すように構成されている。メモリは、複数のエントリを記憶するように設けられた、スタックデータ構造を含む。エンコーダユニットは、デコーダユニットによって復号化されたサブジェクトコードからターゲットコードを生成するように構成されている。ターゲットプロセッサは、エンコーダユニットによって生成されたターゲットコードを実行するように構成されている。ターゲットプロセッサ上でのターゲットコードの実行は、スタックデータ構造の先頭に関連したスタックポインタを設定して、デコーダユニットによって導き出されたレジスタウインドウの動きについての情報を参照して、スタックポインタを調整し、デコーダユニットによって導き出されたウインドウ表示されたサブジェクトレジスタリファレンスの各々から決定された変位と組み合わされたスタックポインタを参照して、スタックデータ構造内のエントリにアクセスする。
【００１６】
本発明の他の例示的な態様において、レジスタウインドウアーキテクチャをサポートするようにコンピューティングシステムを適合させる方法が提供される。本方法は、レジスタウインドウに基づいたサブジェクトコンピューティングアーキテクチャのサブジェクトプロセッサによって実行可能な、サブジェクトコードを復号化することを含む。ここで、レジスタウインドウは、ウインドウ表示されたレジスタファイルから、サブジェクトレジスタの選択されたサブセットを明らかにするように位置決めされている。また、本方法は、サブジェクトコード内の命令から、レジスタウインドウ内の前記サブジェクトレジスタのうちの一つに対するリファレンスを含む、ウインドウ表示されたサブジェクトレジスタリファレンスを識別すること、レジスタウインドウの動きを発生させる、サブジェクトコード内の命令から、レジスタウインドウの動きについての情報を導き出すこと、コンピューティングシステムのメモリ内において、複数のエントリを記憶させるように構成されたスタックデータ構造を提供して、前記メモリ内で、スタックデータ構造の先頭を指示するスタックポインタを設定すること、サブジェクトコードをターゲットコードに変換して、コンピューティングシステムのターゲットプロセッサ上でターゲットコードを実行することと、識別されたレジスタウインドウの動きについての情報を参照して、スタックポインタを調整することと、ウインドウ表示されたサブジェクトレジスタリファレンスから決定された変位と組み合わされたスタックポインタを参照して、スタックデータ構造内のエントリのうちの少なくとも一つにアクセスすることを含む。
【００１７】
本発明のさらに他の例示的な態様において、実行されたときに、レジスタウインドウアーキテクチャをサポートするようにコンピューティングシステムを適合させる、コンピュータで実行可能な命令が記録された、コンピュータで読み取り可能な記憶媒体を提供する。ここで、前記コンピュータで読み取り可能な記憶媒体は、レジスタウインドウに基づいたサブジェクトコンピューティングアーキテクチャのサブジェクトプロセッサによって実行可能なサブジェクトコードを復号化するように設けられたコードユニットを備える。ここで、カレントレジスタウインドウは、ウインドウ表示されたレジスタファイルから、サブジェクトレジスタの選択されたサブセットを明らかにするように位置決めされている。また本記憶媒体は、サブジェクトコード内の命令から、ウインドウ表示されたサブジェクトレジスタリファレンスを識別することを含む。ここで、前記ウインドウ表示されたサブジェクトレジスタリファレンスは、レジスタウインドウ内の前記サブジェクトレジスタのうちの一つに対するリファレンスを含む。また本記憶媒体は、レジスタウインドウの動きを発生させる、サブジェクトコード内の命令から、レジスタウインドウの動きについての情報を導き出すことと、複数のエントリを記憶させるように構成されたコンピューティングシステムのメモリ内にスタックデータ構造を提供して、前記メモリ内で、スタックデータ構造の先頭を示すスタックポインタを設定するように構成されたコードユニットと、サブジェクトコードをターゲットコードに変換して、コンピューティングシステムのプロセッサ上で、このターゲットコードを実行させて、識別されたレジスタウインドウの動きについての情報を参照して、スタックポインタを調整して、また、ウインドウ表示されたサブジェクトレジスタリファレンスから決定された変位と組み合わされた調整されたスタックポインタを参照して、スタックデータ構造内のエントリのうちの少なくとも一つにアクセスするように構成されたコードユニットとを含む。
【００１８】
本発明の例示的な実施形態は、サブジェクトコンピューティングシステムのサブジェクトプロセッサに関するサブジェクトコードを、次に、ターゲットコンピューティングシステム上のターゲットプロセッサによって実行されるターゲットコードに変換する場合に、特に適用可能となる、レジスタウインドウアーキテクチャをサポートするようにコンピューティングシステムを適合させるメカニズムに関する。このメカニズムは、ターゲットコンピューティングシステムのメモリ内に、スタックデータ構造（「ＳＲスタック」）を提供する。このＳＲスタックは、複数のフレームを有している。ＳＲスタックの各フレームは、サブジェクトコードによってアドレス指定されるように、レジスタウインドウのサブジェクトレジスタのウインドウ表示されたサブセットに対応する、１セットのエントリを記憶する。ＳＲスタックはその後、ターゲットコンピューティングアーキテクチャ上におけるターゲットコードの実行によってアクセスされる。ＳＲスタックは、このようなフレームを多量に記憶することが可能であり、サブジェクトアーキテクチャのウインドウ表示されたレジスタファイルからのモデリングオートマチックスピルや充てん動作などの高額な経費を回避する。
【００１９】
例示的な一実施形態において、ワーキングレジスタを１６個のみ有するコンピューティングシステムは、数十個、あるいは数百個のハードウエアレジスタに依存して、ウインドウ表示されたレジスタファイルを表す、レジスタウインドウアーキテクチャをサポートするように適合される。さらに、例示的な本実施形態は、ターゲットコンピューティングシステムの有効な動作を可能にし、本システムが、レジスタウインドウアーキテクチャをサポートするように適合させられた場合でさえも、特に、処理速度において、ターゲットコンピューティングシステムの有効な動作を可能にする。
【図面の簡単な説明】
【００２０】
【図１】従来技術のサブジェクトコンピューティングアーキテクチャの一例における、レジスタファイルの一部を示す図である。
【図２】従来技術のサブジェクトコンピューティングアーキテクチャの一例における、レジスタファイルをさらに示す図である。
【図３】本発明の例示的な実施形態によって採用されるような、装置を示すブロック図である。
【図４】本発明の例示的な実施形態によって採用されるような、プログラムコードの変換プロセスの概略概観図である。
【図５】本発明の例示的な実施形態によって提供されるような、レジスタウインドウエミュレーションメカニズムの概略概観図である。
【図６】図５のレジスタウインドウエミュレーションメカニズムのさらに詳細な概略図である。
【図７】図５および図６のレジスタウインドウエミュレーションのメカニズムの実施形態の例をさらに示す表である。
【図８】ＡおよびＢは図５および図６のレジスタウインドウエミュレーションのメカニズムの他の実施形態の例をさらに示す表である。
【図９】本発明の例示的な実施形態による、レジスタウインドウアーキテクチャをサポートするようにコンピューティングシステムを適合させる方法を示す、概略的なフローチャートである。
【図１０】本発明の例示的な実施形態による、コンピューティングシステム内のメモリの選択された部分を示す概略図である。
【図１１】本発明の例示的な実施形態による、転送メカニズムを実行する実施例による方法を示す概略的なフローチャート図である。
【図１２Ａ】さらに詳細な転送メカニズムを示す概略図である。
【図１２Ｂ】さらに詳細な転送メカニズムを示す概略図である。
【発明を実施するための形態】
【００２１】
本発明をより良く理解するために、また、本発明の実施形態がどのようにして、効果的に実施されうるかを示すために、一例として、ここに添付する図表を参照することにする。
【００２２】
以下の説明は、当業者が本発明を作成して用いることが可能となるように提供されており、また、本発明を実施する発明者らによって検討された最良の形態を記載するものである。しかしながら、改良されたプログラムコード変換方法および装置を提供するために、本発明の一般的な原理が、ここで明確に定義されているため、種々の変形例は、当業者にとって容易に自明であり続ける。
【００２３】
図３を参照すると、サブジェクトプログラム１７は、サブジェクトプロセッサ３を有するサブジェクトコンピューティングプラットフォーム１上で実行されることが意図されている。ここで、サブジェクトコンピューティングプラットフォーム１は、任意の形態の電子装置であってもよい。この装置は、これを操作するサブジェクトプロセッサ３におけるコンピューティングオペレーションに依存する。しかしながら、ターゲットコンピューティングプラットフォーム１０は、プログラムコード変換を実行するトランスレータユニット１９を介して、サブジェクトプログラム１７を実行するために用いられる。ここで、トランスレータユニット１９は、サブジェクトコード１７をターゲットコード２１に変換して、その結果、ターゲットコード２１はその後、ターゲットコンピューティングプラットフォーム１０によって実行されることが可能となる。
【００２４】
当業者にとって周知となるように、サブジェクトプロセッサ３は、１セットのサブジェクトレジスタ５を有している。サブジェクトメモリ８は、とりわけ、サブジェクトプログラム１７およびサブジェクトオペレーティングシステム２を保持している。同様に、図３における例示されたターゲットコンピューティングプラットフォーム１０は、複数のターゲットレジスタ１５を有するターゲットプロセッサ１３、および、ターゲットオペレーティングシステム２０と、サブジェクトコード１７と、トランスレータコード１９と、変換されたターゲットコード２１とを含む複数のオペレーションの構成要素を記憶するメモリ１８とを備える。ターゲットコンピューティングプラットフォーム１０は、典型的に、マイクロプロセッサに基づくコンピュータあるいは他の適切なコンピュータである。
【００２５】
一実施形態において、トランスレータコード１９は、最適化を用いたり用いなかったりして、サブジェクト命令セットアーキテクチャ（ＩＳＡ）のサブジェクトコードを、他のＩＳＡの変換されたターゲットコードに変換するエミュレータである（「ディストゥザット（ｔｈｉｓ−ｔｏ−ｔｈａｔ）」トランスレータとして知られる）。他の実施形態において、トランスレータ１９は、プログラムコードの最適化を行うことによって、サブジェクトコードを、各々が同一のＩＳＡのターゲットコードであるターゲットコードに変換するように機能する（「ディストゥザット」のトランスレータ、あるいは「アクセラレータ」として知られる）。
【００２６】
トランスレータコード１９は、適切に、トランスレータを実行するソースコードのコンパイルされたバージョンであり、ターゲットプロセッサ１３上のオペレーティングシステム２０と連動して動作する。図３に示される構造は、一例にすぎないため、例えば、本発明の実施形態による、ソフトウエア、方法およびプロセスは、オペレーティングシステム２０の中あるいは下に存在するコードで実行されてもよいことが理解されよう。サブジェクトコード１７、トランスレータコード１９、オペレーティングシステム２０、メモリ１８の記憶メカニズムは、当業者にとって既知であるように、多種多様のタイプのうちの任意のタイプであってもよい。
【００２７】
図３による装置において、ターゲットコード２１の動作中に、プログラムコード変換が、ランタイムで動的に実施され、ターゲットアーキテクチャ１０上で実行される。すなわち、トランスレータ１９は、変換されたターゲットコード２１に沿って動作する。トランスレータ１９を介するサブジェクトプログラム１７の動作は、交互的な方法で実行する二つの異なるタイプのコード、すなわち、トランスレータコード１９とターゲットコード２１とを含む。ここで、ターゲットコード２１は、ランタイムを通して、変換されつつあるプログラムの記憶されたサブジェクトコード１７に基づいて、トランスレータコード１９によって生成される。
【００２８】
一実施形態において、トランスレータユニット１９は、サブジェクトプロセッサ３、特にサブジェクトレジスタ５などの、サブジェクトアーキテクチャ１の関連部分をエミュレートする。その一方で、ターゲットプロセッサ１３上のターゲットコード２１として、サブジェクトプログラム１７を実際に、実行する。好適な実施形態において、少なくとも一つのグローバルレジスタストア２７（サブジェクトレジスタバンク２７あるいは理論レジスタバンク２７とも称される）が提供される。マルチプロセッサ環境において、任意に、一つ以上の理論レジスタバンク２７が、検討中のサブジェクトプロセッサのアーキテクチャにしたがって提供される。サブジェクトの状態は、トランスレータ１９と、ターゲットコード２１との構成要素によって描写される。すなち、トランスレータ１９は、変数および／またはオブジェクトなどの、種々の明示的なプログラミング言語装置に、このサブジェクトの状態を記憶する。変換されたターゲットコード２１は、比較すると、ターゲットコード２１のターゲット命令によって操作された、ターゲットレジスタ１５およびメモリ位置１８にサブジェクトプロセッサ状態を暗黙のうちに提供する。例えば、グローバルレジスタストア２７の低レベルの描写は単に、割り当てられたメモリの領域である。しかしながら、トランスレータ１９のソースコードにおいて、グローバルレジスタストア２７は、高レベルでアクセスされ、操作されることが可能な、データアレイあるいはオブジェクトである。ターゲットコード２１を実行することによって、サブジェクトコード１７の期待された作業が行われ、また、サブジェクトプロセッサ３のエミュレートされたモデルを更新する。その結果、トランスレータ１９は、エミュレートされた実行コンテキスト（サブジェクト状態）を決定することが可能となり、それに応じて、ターゲットコードとしてのサブジェクトプログラムの適切なブロックを動的に選択して、変換して、実行するために、実行の流れを正確に制御することが可能となる。
【００２９】
「基本ブロック」という用語は、当業者にとっては周知のものである。基本ブロックは、そのブロックコードを単一の制御パスに限定する、厳密に一つのエントリポイントおよび厳密に一つのエグジットポイントを備えた、コードのセクションである。このため、基本ブロックは、制御フローの有益な基礎的なユニットである。適切に、トランスレータ１９は、サブジェクトコード１７を、複数の基礎ブロックに分割する。ここで、各基礎ブロックは、単一のエントリポイントにおける第一の命令と、（ジャンプ、呼び出し、あるいは分岐命令などの）単一のエグジットポイントにおける最後の命令間における、一連の命令のセットである。トランスレータ１９は、これらの基礎ブロック（ブロックモード）を一つだけ選択してもよい、あるいは、基礎ブロック（グループブロックモード）のグループを選択してもよい。グループブロックは、適切に、単一のユニットとして、ともに処理されることになる、二つ以上の基礎ブロックを備える。さらに、トランスレータは、サブジェクトコードの同一の基礎ブロックを示してはいるが、異なるエントリ条件下にある、ｉｓｏブロックを形成してもよい。
【００３０】
好適な実施形態において、中間表現（ＩＲ）のツリーは、元のサブジェクトコード１７からターゲットコード２１を生成する過程の一部として、サブジェクト命令シーケンスに基づいて生成される。ＩＲツリーは、計算された式と、サブジェクトプログラムによって実行された操作の理論的な描写である。後に、ターゲットコード２１が、ＩＲツリーに基づいて生成（「植え付けられる」）される。ＩＲノードの収集は、実際には、有向非循環グラフ（ＤＡＧ）であるが、口語的には「ツリー」と称されている。
【００３１】
当業者は、一実施形態において、トランスレータ１９が、Ｃ＋＋などのオブジェクト指向プログラミング言語を用いて実施されることを理解している。例えば、ＩＲノードは、Ｃ＋＋オブジェクトとして実施され、他のノードに対する参照は、これらの他のノードに対応する、Ｃ＋＋オブジェクトに対する、Ｃ＋＋リファレンスとして実施される。したがって、ＩＲツリーは、お互いに対する種々のリファレンスを含む、ＩＲノードオブジェクトの収集として実施される。
【００３２】
さらに、検討中の実施形態において、ＩＲ生成は、サブジェクトプログラム１７がその上で動作することが意図された、サブジェクトアーキテクチャの特定の特徴に対応する、レジスタ定義の１セットを用いる。例えば、サブジェクトアーキテクチャ上で、物理的なレジスタごとに、固有のレジスタ定義がある（すなわち、図３のサブジェクトレジスタ５）。このように、トランスレータにおけるレジスタ定義は、ＩＲノードオブジェクト（すなわち、ＩＲツリー）に対するリファレンスを含むＣ＋＋オブジェクトとして実施されてもよい。レジスタ定義の１セットによって参照されるすべてのＩＲツリーの集合は、ワーキングＩＲフォレスト（「フォレスト」とは、それが、複数の理論レジスタルーツを含み、そのルーツの各々がＩＲツリーを参照するからである）と称される。これらのＩＲツリーおよび他のプロセスは、適切に、トランスレータ１９の一部を形成する。
【００３３】
図３はさらに、ターゲットアーキテクチャ１０のメモリ１８における、ネイティブコード２８を示している。サブジェクトコード１７のランタイム変換から生じるターゲットコード２１と、ターゲットアーキテクチャに関して、書き込まれる、あるいは直接コンパイルされる、ネイティブコード２８との間に区別がある。いくつかの実施形態において、ネイティブバインディングは、それが、それに関してサブジェクトコードのネイティブバージョンが存在する、サブジェクトライブラリなどの、サブジェクトコード１７のセクションに、制御のサブジェクトプログラムの流れが入ることを検出したときに、トランスレータ１９によって実施される。サブジェクトコードを変換することよりむしろ、トランスレータ１９は、同等のネイティブコード２８が、ターゲットプロセッサ１３上で実施されるようにさせる。実施形態において、トランスレータ１９は、参照してここに組み込まれる、公開されたＰＣＴ出願、ＷＯ２００５／００８４７８号においてさらに詳細に記載されているように、ネイティブコードあるいはターゲットコードの呼び出しスタブなどの、定義されたインターフェースを用いて、生成されたターゲットコード２１を、ネイティブコード２８に対してバインドする。
【００３４】
図４は、ターゲットコンピューティングプラットフォーム１０上で動作する場合のトランスレータ１９を、さらに詳細に示している。上記のように、トランスレータ１９の前端は、サブジェクトプログラム１７の現在必要とされるセクションを復号化するデコーダユニット１９１を含み、複数のサブジェクトコードブロック１７ａ、１７ｂ、および１７ｃ（これらは、通常、各々がサブジェクトコードの一つの基礎ブロックを含む）を提供し、各サブジェクトブロックと、トランスレータ１９の後の動作を支援するであろう、そこに含まれるサブジェクト命令とに関連して、デコーダ情報１７１も提供してもよい。いくつかの実施形態において、トランスレータ１９のコア１９２におけるＩＲユニットは、復号化されたサブジェクト命令から、中間表現（ＩＲ）を生成して、最適化は、中間表現に関連して、適切に実行される。トランスレータ１９の後端の一部としてのエンコーダ１９３は、ターゲットプロセッサ１３によって実行可能なターゲットコード２１を生成（植え込み）する。この単純な実施例において、三つのターゲットコードブロック２１ａから２１ｃが生成されて、サブジェクトプラットフォーム１上でサブジェクトコードブロック１７ａから１７ｃを実行することに相当する、ターゲットプラットフォーム１０上に作用する。また、エンコーダ１９３は、ターゲットブロックが動作して、適切な場合には、制御をトランスレータ１９に戻すような環境を設定するような機能を実行する、ターゲットコードブロック２１ａから２１ｃのうちのいくつか、あるいはすべてに関して、ヘッダコードおよび／またはフッタコード２１１を生成してもよい。一実施形態において、トランスレータ１９は、それに関して、ターゲットコード２１ａから２１ｃが既に生成されている、サブジェクトコードブロック１７ａから１７ｃの記録を維持している。このように、サブジェクトコードの同一のブロックがプログラムにおいて、後に、再び遭遇されるときに、前もって生成されたターゲットコードはフェッチされて、再利用されることが可能である。しかしながら、本発明の他の実施形態は、他の特定なメカニズムを利用して、動的に、サブジェクトコードを、生成されたターゲットコードに整合させてもよい。
【００３５】
図４において、サブジェクトコード１７は、適切に、トランスレータ１９によって変換されてターゲットシステム上で動作するようになる、アプリケーションプログラムである。一般的な実施例として、このアプリケーションプログラム１７は、特に、ウェブサーバ、デジタルコンテンツサーバ（例えば、ストリーミングオーディオ、あるいはストリーミングビデオサーバ）、ワードプロセッサ、スプレッドシートエディタ、グラフィックイメージ編集ツール、あるいはデータベースアプリケーションなどの複雑なプログラムである。しかしながら、他の実施例においては、サブジェクトコード１７は、コンピューティングシステムが、電子装置の有益な作業と制御動作とを実行することを可能にさせる、任意の種類のプログラムである。オペレーティングシステム２０とトランスレータ１９とに関連したこのようなタスクなどの他のタスクに加えて、ターゲットコンピューティングプラットフォーム１０は、多くの場合、このような多くのプログラムを同時に動作させることが要求される。
【００３６】
実施形態において、サブジェクトコード１７は、サブジェクトアーキテクチャ１に固有に作成された（例えば、コンパイルされた）バイナリに実行可能な形態を取る。サブジェクトコード１７に関して、人間が介入する、あるいは再調査する機会はない。その代わり、ターゲットコンピューティングプラットフォーム１０は、ターゲットコンピューティングプラットフォーム１０上でバイナリに実行されるように、トランスレータ１９を介して、自動的に、サブジェクトコード１７を、ターゲットコード２１に変換する。このように、例示的な実施形態において、トランスレータ１９は、サブジェクトＩＳＡのバイナリに実行可能なコードとしてのサブジェクトコード１７を、ターゲットＩＳＡのバイナリに実行可能なコードとしてのターゲットコードに変換する、バイナリトランスレータである。さらに、トランスレータ１９は、ターゲットコード２１のブロックの実行によって、変換をインタリーブする、動的なバイナリトランスレータである。
【００３７】
図５は、本発明の実施形態に採用されるような、ターゲットコンピューティングプラットフォーム１０において、レジスタウインドウアーキテクチャを有するサブジェクトプロセッサ３の主要な構成要素をエミュレートするメカニズムを示している。上記のように、サブジェクトプロセッサのこれらの構成要素をエミュレートすることによって、トランスレータ１９は、サブジェクトコード１７の予想される挙動を忠実に模倣する、ターゲットコード２１を生成することが可能となる。以下の実施形態において、ターゲットプロセッサ１３のアーキテクチャは、レジスタウインドウを提供しないか、あるいは、サブジェクトプロセッサ１３と比較して、異なる形状のレジスタウインドウを用いる。したがって、サブジェクトコード１７は、ターゲットプロセッサ１３上では動作することができない。実施例として、トランスレータ１９は、１６個の汎用ハードウエアレジスタのみを有する、６４ビットのｘ８６タイプのプロセッサ上のターゲットコードとして動作する６４ビットの汎用ハードウエアレジスタを、少なくとも６４個、さらに典型的には数百個有する、ｖ９  ＳＰＡＲＣプロセッサ上での実行を意図した、サブジェクトコードを変換するように構成される。この例によって示されるように、サブジェクトプロセッサ３およびターゲットプロセッサ１３は、利用可能なレジスタの数およびタイプに関して、また、各プロセッサにおいてレジスタが構成される方法に関して、基本的には互換性がない場合がある。
【００３８】
サブジェクトプロセッサ３の一般的な構造と動作は当業者にとっては周知のものとなるはずであるが、ターゲットシステムによってエミュレートされる、サブジェクトプロセッサのこれらの構成要素を示して、説明するために、ここで、それらについて簡単に検討してみる。ここで説明された実施形態において、サブジェクトプロセッサ３は、一般的に、図１および図２を参照して、上記に説明された、ｖ９  ＳＰＡＲＣアーキテクチャの例にしたがって、レジスタウインドウの配置を採用する。この場合、レジスタウインドウの位置は重複し、回転構造を有している。しかしながら、本発明の実施形態は、重複しない、および／または回転しない構造などの、他の特定の構造を有する、レジスタウインドウアーキテクチャについても実施されてよいことが理解されよう。このレジスタウインドウアーキテクチャについての、いくつかの従来技術の説明は、複数のレジスタウインドウに言及しており、それらのうちの一つだけが、カレントウインドウである（すなわち、各々が固定位置を有し、そのうちの一つだけがどの時期においても開かれる、多くのウインドウが存在する）。一貫性を保つために、以下の説明は、異なるレジスタウインドウの位置に移動する、単一のカレントウインドウについて検討しているが、当業者は、本発明が、複数の固定されたウインドウに関して定義されたアーキテクチャにも同等に利用可能であることを容易に理解するであろう。
【００３９】
図５は、サブジェクトプロセッサ３内に設けられた、多数の汎用ハードウエアレジスタ５を示している。説明を明確にかつ簡単にするために、コントロール／ステータスレジスタと、サブジェクトプロセッサ３の他の多くの部分は示されていない。これらのサブジェクトレジスタ５は、サブジェクトコード１７のすべてのセクションに対して静的であり、視認可能である、グローバリに視認可能なレジスタ５０１の小さなセット（「グローバルサブジェクトレジスタ」）と、複数のレジスタウインドウ位置５１１のうちの一つに移動する、カレント「レジスタウインドウ」５１０として、サブジェクトコード１７の現在実行中の部分にとって、このレジスタファイルのうちの一つのサブセットのみが視認可能であるように、ウインドウ表示された、レジスタ５０２の大きなファイル（「ウインドウ表示されたサブジェクトレジスタ」）を含む。このように、レジスタウインドウ５１０の現在位置の下に存在する、ウインドウ表示されたサブジェクトレジスタ５０２のサブセットのみが、任意の時期にコードを実行することによってアクセス可能となる。
【００４０】
多数のレジスタがサブジェクトハードウエア内に設けられてはいるものの、サブジェクトコード１７は、どの時期においても、３２個の視認可能な汎用レジスタすなわち、８個のグローバルサブジェクトレジスタ５０１（ｇ０からｇ７）と、２４個のレジスタウインドウ５１０を、ウインドウ表示されたサブジェクトレジスタ５０２（ｉ０からｉ７、Ｉ０からＩ７、ｏ０からｏ７）にアドレス指定することのみが可能である。したがって、サブジェクトコードは、この３２個の、視認可能なレジスタ名のセットに関して、書き込まれる。
【００４１】
ターゲットコンピューティングプラットフォーム１０の検討に戻ると、サブジェクトコード１７は、ターゲットシステムのメモリ１８における利用可能な領域にサブジェクトコード１７をロードすることなどによって提供され、ブロックごとに、サブジェクトコード１７は、ターゲットコード２１として変換され、実行される。上記のように、トランスレータ１９が、最初に、サブジェクトコードのブロックに遭遇したとき、デコーダユニット１９１は、サブジェクト命令を復号化する。この復号化プロセスは、サブジェクトアーキテクチャの汎用サブジェクトレジスタに対する、サブジェクトコード命令内のリファレンスを識別することを含み、特に、ウインドウ表示されたサブジェクトレジスタ５０２およびグローバルサブジェクトレジスタ５０１に対するリファレンスを含む。第二に、サブジェクトコード命令が識別されて、カレントレジスタウインドウの、新しい位置へのＳＡＶＥおよびＲＥＳＴＯＲＥタイプの動きを引き起こす。ここで、例示されたｖ９  ＳＰＡＲＣハードウエアに関する命令セットアーキテクチャは、少なくとも「保存」および「復旧」の命令を含み、これらの命令は、サブジェクトプラットフォーム上で、カレントレジスタウインドウ５１０を、位置５１１の他の一方に移動させる。レジスタリファレンスおよびデコーダ１９１によって取得されたレジスタウインドウの動きに関する情報は、コア１９２に渡され、エンコーダ１９３内で、ターゲットコード２１を生成するために用いられる。
【００４２】
初期段階において、トランスレータ１９は、後に、サブジェクトプロセッサをエミュレートするために用いられる、種々のメモリ構造を提供する。特に、トランスレータ１９は、上記するように、理論レジスタバンク２７すなわち、グローバルサブジェクトレジスタ５０１とウインドウ表示されたサブジェクトレジスタ５０２とを含む、サブジェクトプロセッサ３のレジスタ５内に保持されている値を記憶するために用いられるデータ構造を提供する。ここで、メモリ領域４２０は、８個の静的な位置４２１のセットを有するターゲットメモリ１８において、８個のグローバルサブジェクトレジスタ５０１に関連する、理論レジスタバンク２７の静的な部分を形成するように定義される。グローバルサブジェクトレジスタ５０１に対するリファレンスが、デコーダユニット１９１によって復号化されるサブジェクトコード命令において識別される場合、等価ターゲットコード命令が、メモリ領域４２０内のこれらの静的な位置４２１に対する適切なリファレンスによって生成される。すなわち、これらのサブジェクトグローバルレジスタ５０１のコンテンツを表現しているデータの値は、最も一般的には、静的な位置４２１からのデータを、ターゲットプロセッサ１３のワーキングレジスタ１５にロードして、それから、ターゲットコードの実行中に適切なものとなるように、結果を、これらのメモリ位置４２１に戻して記憶させることにより、ターゲットコード２１によって用いられる。このように、ターゲットコード２１は、グローバルサブジェクトレジスタ５０１に依存する、サブジェクトコード１７のこれらの命令の挙動をエミュレートする。
【００４３】
ウインドウ表示されたサブジェクトレジスタ５０２は、上記のように、動的なウインドウ表示される構成において機能し、ここで、分離メカニズムが、ターゲットプラットフォーム内に提供されて、これらのサブジェクトレジスタをエミュレートする。図５に示されるように、このレジスタウインドウメカニズムを実施するために、トランスレータ１９は、ターゲットプラットフォーム１０のメモリ１８内に、スタックデータ構造を提供する。これは、「ＳＲスタック」４００として後述される。当業者にとって周知であるように、スタックは、最も一般的に利用可能なコンピューティングアーキテクチャにおいて有効に作成され、管理される、ＬＩＦＯ（後入れ先出し）タイプのメモリ構造である。典型的には、スタックは、所定の基準アドレス（開始アドレス）においてメモリ内に存在し、データがスタックに付加される、あるいはスタックから除去されるにつれて、メモリ内に下方に（あるいは上方に）成長する。スタックのトップ（先頭）のカレント位置は、スタックポインタに対するリファレンスによって決定され、このスタックポインタは、通常は、メモリ位置に関するアカウントにアップデートされる。メモリ位置は、データがスタック上に押し出されるときに消費され、逆に、データがスタックから飛び出すときに、開放される。一般的に、スタック上のデータは、スタックポインタに関連するメモリをアドレス指定することによって操作可能となる。以下の例では、ＳＲスタック４００は、ターゲットメモリ１８内の所定の基準アドレスＳＲ＿ＢＡＳＥから、下方に（すなわち、徐々に減少するメモリアドレスを用いて）成長し、スタックポインタＳＲ＿ＳＰが用いられて、ＳＲスタックのカレントヘッドを決定する。
【００４４】
ＳＲスタック４００が用いられて、サブジェクトコード１７によって参照されるように、各々がウインドウ表示された、サブジェクトレジスタ５０２の一つのコンテンツを表現する、データの値を記憶する。すなわち、サブジェクトコード１７の復号化によって、サブジェクトコード１７によってアクセスされる、ウインドウ表示されたサブジェクトレジスタ５０２が、実行中に明らかになり、サブジェクトコードにおいて用いられたデータの値が、今度は、ＳＲスタック４００内のエントリ４０１として、記憶される。ターゲットコード２１が生成されて、ＳＲスタック４００上のこれらのデータの値を、ターゲットメモリ１８に記憶させ、これらのデータの値を、ターゲットコード２１の必要に応じて、ターゲットプロセッサ１３のワーキングレジスタ１５にロードして、ターゲットコードの実行中、必要に応じて、その結果をＳＲスタック４００に戻して記憶する。ＳＲスタック４００は、このように、理論レジスタバンク２７の一部を形成して、ウインドウ表示されたサブジェクトレジスタ５０２をエミュレートして、ターゲットコード２１が、ウインドウ表示されたサブジェクトレジスタ５０２に依存する、サブジェクトコード命令の実行をエミュレートすることを可能にする。
【００４５】
図５に示されるような、実施形態において、ＳＲスタック４００は、複数のフレーム４１０に分割される。ここで、各フレーム４１０は、１セットのデータエントリ４０１を、含んでいる。この例において、２４個のウインドウ表示されたサブジェクトレジスタ５０２のアドレス可能なセットは、サブジェクトコード１７によって、「ｉ０からｉ７」、「Ｉ０からＩ７」、「ｏ０からｏ７」と（あるいは、ｒ〔８〕からｒ〔３１〕であっても同じである）称される。したがって、サブジェクトコードにおけるレジスタ定義およびレジスタリファレンス（ここでは、まとめて「レジスタリファレンス」と称する）は、サブジェクトコード１７の観点から、このアドレス指定可能なレジスタ名のセットによって表現される。ここで説明されるエミュレーションメカニズムにおいて、サブジェクトコード１７によってサブジェクトレジスタ５０２内に存在するように要求されるこれらのデータの値は、ＳＲスタック４００上の２４個のエントリ４０１の一つのフレーム４１０内に記憶される。
【００４６】
第二に、サブジェクトプロセッサ３において、サブジェクトコード１７が、カレントレジスタウインドウ５１０を新しい位置５１１に移動させる場合、本エミュレーションメカニズムにおいて、エントリ４０１の新しいフレーム４１０が、ＳＲスタック４００上に提供される。ウインドウ表示されたサブジェクトレジスタ５０２の重複する性質によって、この実施形態は、フレーム４１０ごとに、ＳＲスタック４００上に１６個の新しいエントリ４０１を提供する。一方、８個の旧式なエントリ（前述のフレーム４１０の「ｏ０からｏ８」に対応する）は、カレントフレームの「ｉ０からｉ８」のレジスタリファレンスに関して、データの値を付与する。
【００４７】
図６は、ここで説明される、レジスタウインドウエミュレーションメカニズムのさらに詳細な概略図であり、ＳＲスタックのアドレス指定に関するメカニズムの例を示す。下記の説明において、代表的な擬似コード命令は、サブジェクトコード１７ａ、１７ｂ、およびターゲットコード２１ａ、２１ｂのセクションとして提供され、命令は、ここでは、明確にするために、簡略化されたアセンブラタイプの擬似コードとして示されている。サブジェクトコードの例は、一般的に、ＳＰＡＲＣ  ｖ９  ＩＳＡ（すなわち、オペレーションソース、デスティネーション）に基づいているが、遅延スロットおよび特定の命令引数などの詳細な部分は、明確にするために省略されている。同様に、ターゲットコードの例は、一般的に、インテル構文（すなわち、オペレーションデスティネーション、ソース）を用いた、Ｌｉｎｕｘアセンブリ言語に基づく、アセンブラタイプの擬似コードとして示されている。もちろん、動的なバイナリトランスレータに関連する、本発明の実施形態は、サブジェクトコード１７を、バイナリマシンコードとして受け取り、ターゲットコードを、バイナリマシンコードとして生成するが、説明を簡単にするために、アセンブラタイプの擬似コードが提供された。図６における代表的な擬似コード命令もまた、図７および図８に関して、さらに詳細に述べられるであろう。
【００４８】
図６に示すように、トランスレータ１９のデコーダユニット１９１は、第一および第二のサブジェクトコードブロック１７ａおよび１７ｂにおいて、命令を復号化する。好都合なことに、この第一の実施形態は、サブジェクトコードを、「保存」および「復旧」のサブジェクト命令の位置にしたがって、第一および第二のブロックに分割する。実施形態において、サブジェクトコード１７ａおよび１７ｂの各ブロックは、典型的に、およそ１０個の命令を含むが、およそ１００個までの命令を含むこともあるであろう。
【００４９】
デコーダ１９１は、ウインドウ表示されたサブジェクトレジスタ５０２に対する、サブジェクトコードリファレンス１７５を識別して、レジスタウインドウの動きに関する情報１７６を導き出す。この代表的な擬似コードにおいて、第一のサブジェクトブロック１７ａは、二つの「移動」命令と、ウインドウ表示されたサブジェクトレジスタ「Ｉ７」、「Ｉ３」、および「ｏ６」（すなわち、ローカル３、ローカル７、および出力６）に対するリファレンス１７５を含む一つの「追加」命令を含む。レジスタウインドウの動きに関する情報１７６に関して、「保存」命令は、ここで、ＳＡＶＥタイプの動きを起こすこととして識別される。同様に、第二のコードセクション１７ｂは、「Ｉ３」（ローカル３）に対する他のリファレンス１７５を識別するように復号化され、また、「復旧」命令は、ＲＥＳＴＯＲＥタイプのレジスタウインドウの動き１７６を誘導するように識別される。この代表的な擬似コードにおける「戻す」は、この図には示されていない、サブジェクトコードの他のいくつかの呼び出し側セクションに戻る。
【００５０】
この場合、トランスレータ１９によって生成されるターゲットコード２１は、ターゲットコードブロック２１ａおよび２１ｂによって図示されている。ここで、トランスレータ１９は、ターゲットコードの命令を生成して、少なくとも部分的に、識別されたサブジェクトレジスタリファレンスに基づいて、関連するエントリ４０１を、ＳＲスタック４００上にアドレス指定する。
【００５１】
この第一の実施形態において、関連するＳＲスタックエントリ４０１は、識別された、ウインドウ表示されたサブジェクトレジスタリファレンス１７５を検討することによって、スタックポインタＳＲ＿ＳＰについてアドレス指定される。スタックポインタＳＲ＿ＳＰは、好都合に、各サブジェクトブロックの端部で認識された、識別されたレジスタウインドウの動きに関する情報１７６に応じて、各ターゲットブロックの端部でアップデートされる。すなわち、ターゲットコード２１が生成されて、デコーダ１９１によって取得された、ＳＡＶＥおよびＲＥＳＴＯＲＥのレジスタウインドウの動きに関する情報１７６に応じて、ＳＲスタックの先頭のカレント位置を追跡するように、ＳＲスタックポインタＳＲ ＳＰをアップデートする。
【００５２】
ここで、生成されたターゲットコード２１は、ＳＲスタックポインタＳＲ＿ＳＰを、識別されたＳＡＶＥタイプの動きごとに、１６個の６４ビットのエントリ４０１によって、ＳＲスタック４００に向かって下方に進むようにアップデートさせる、あるいは、識別されたＲＥＳＴＯＲＥタイプの動きごとに、１６個のエントリによって、後退するようにアップデートさせる、ターゲット命令を含む。ここで、スタックポインタは、各フレーム４１０内で、「ｉ」（入力）および「ｏ」（出力）を表現するエントリの重複のために、２４個のエントリのフルフレームではなく、１６個のエントリによってアップデートされる。図６の例によって示されるように、ＳＲ＿ＳＰは、第一のフレーム４１０ａに関する、第一のターゲットコードブロック２１ａについて、第一の値「ＳＲ＿ＳＰ１」に対して設定され、また、第二のターゲットコードブロック２１ｂが、第二のフレーム４１０ｂにおけるエントリ４０１を参照するように、第二の値「ＳＲ＿ＳＰ２」にアップデートされる。
【００５３】
また図６に示されるように、第一の実施形態において、要求されたＳＲスタックエントリ４０１が、スタックポインタＳＲ＿ＳＰのカレント値によって参照されるように、ＳＲスタック４００の先頭に設けられた、２４個のエントリ４０１のカレントフレーム４１０において認識される。ここで、各レジスタリファレンス１７５は、スタックポインタＳＲ ＳＰのカレント値に関する、所定の変位を決定する。簡易な実施例として、「ｏ０」に関するエントリを０の変位を有するように取ることによって、（すなわち、スタックポインタＳＲ＿ＳＰは、スタック上の第一のエントリとして、「ｏ０」を参照する）、「ｏ１」および「ｏ２」に関するエントリは、＋２３の６４ビットのワードでの「ｉ７」に関するエントリまで、＋１および＋２の６４ビットのワード分の変位などをそれぞれ有するようになる。ここで、ターゲットコード２１は、スタックポインタのカレント値を、要求された変位と組み合わせることによって、スタック上で、要求されたエントリのアドレスを計算する。
【００５４】
好適に、ターゲットレジスタ１３の一つが、スタックポインタＳＲ＿ＳＰを保持するように選択され、コンテキストを、ターゲットコードに渡すときに、スタックポインタのカレント値をロードしている。代表的な６４ビット  ｘ８６のターゲットアーキテクチャ上で、スタックポインタは、ｒｂｐなどの一時的なレジスタの一つに好都合にロードされる。すなわち、一つの選択肢として、スタックポインタＳＲ＿ＳＰが、ターゲットコード２１ａの図示された第一のセクションの呼び出しに先立ち、トランスレータ１９のランループにおいて、ターゲットレジスタｒｂｐにロードされる。あるいは、好都合に、ｒｂｐは、ヘッダコード２１１（図４に示される）の一部としてロードされる。このように、スタックポインタＳＲ＿ＳＰはその後、レジスタｒｂｐから、ターゲットコード２１ａおよび２１ｂのセクションにおいて、用いられることが可能となる。この動作を行う代表的な命令が下記に示される。ここで、「ｆｓ：ＳＲ＿ＳＰ」は、トランスレータ１９によって保持される、サブジェクト状態の一部として、コンテキストの切替中、スタックポインタを記憶する、メモリ位置に対するリファレンスである。すなわち、
ｍｏｖ  ｒｂｐ、（ｆｓ：ＳＲ＿ＳＰ）
以下の例は、ＳＲスタック上での変位の計算を示している。ここで、サブジェクトコードにおいて、サブジェクトグローバルサブジェクトレジスタ「ｇ１」の一つが、ローカルのウインドウ表示されたサブジェクトレジスタ「Ｉ５」（ローカルＩ５）にロードされる。ここで、「Ｉ５」エントリは、「＋１３」の変位に設けられる、すなわち、１３個の６４ビットのワード（これは、１３＊８＝１０４、８ビットバイトにおいてアドレス指定を有するいくつかのアーキテクチャにおいて、８ビットバイトとして好都合に表現される）。ターゲットコードにおいて、「ｇ１」に関する値が、既に、メモリ領域４２０から、利用可能なターゲットレジスタｒａｘにロードされていると仮定することができる。すなわち、
サブジェクトコード  ターゲットコード
ｍｏｖ  ｇ１、Ｉ５  ｍｏｖ（ｒｂｐ＋１３）、ｒａｘ
識別されたＳＡＶＥの動き１７６に応じて、ｒｂｘに保持されたカレントスタックポインタ値ＳＲ＿ＳＰは、ＳＲスタック４００上で、１６個の６４ビットのエントリによって前進させられる。これは、１６個の新たなエントリ４０１を、ＳＲスタックに付加するか、あるいは、カレントフレーム４１０を、前もって占有された位置にまで移動させるであろう。こうして、これらのメモリ位置において記憶された、データの値を明らかにする。第二に、これは別々に行うことが可能ではあるものの、この時点で、ｆｓ：ＳＲ＿ＳＰにおけるメモリ内に保持された、ＳＲ＿ＳＰのバージョンをアップデートすることも有益である。
【００５５】
スタックポインタＳＲ＿ＳＰは、以下のターゲット命令などによって、各ＳＡＶＥタイプの動きに関する情報１７６に応じて、メモリ内で下方に（この例では、１６個の６４ビットのワード分だけ）前進させられる。すなわち、
ａｄｄ  ｒｂｐ、−１６
ｍｏｖ（ｆｓ：ＳＲ＿ＳＰ）、ｒｂｐ
反対に、スタックポインタＳＲ＿ＳＰは、以下のターゲット命令などによって、各ＲＥＳＴＯＲＥタイプの動きに関する情報１７６に応じて、メモリ内で上方に遅らせられて、その後、特定の変位が、ＳＲスタック４００上で、エントリ４０１の前もって遭遇したフレーム４１０を参照できるようにする。すなわち、
ａｄｄ  ｒｂｐ、＋１６
ｍｏｖ（ｆｓ：ＳＲ＿ＳＰ）、ｒｂｐ
図７は、上記の図６における実施形態をさらに詳細に示した表である。すなわち、図７は、上記のように、サブジェクトコードブロック１７ａおよび１７ｂを示している。また、図７は、サブジェクトコード命令を復号化することによって識別された、識別サブジェクトレジスタリファレンス１７５を示しており、また、識別されたリファレンス１７５ごとに、関連する変位１７７を示している。さらに、図７に示されるように、サブジェクトコード１７の復号化によって、識別されたレジスタウインドウの動きに関する情報１７６が導き出される。最終的に、図７は、レジスタリファレンス１７５およびレジスタウインドウの動きに関する情報１７６を参照して、サブジェクトコード命令から生成される、ターゲットコードブロック２１ａおよび２１ｂを示している。
【００５６】
図７に示されるように、第一のターゲットコードブロック２１ａは、ヘッダコード２１１から始まる。この例において、ヘッダコード２１１は、スタックポインタＳＲ＿ＳＰを、一時的なターゲットレジスタｒｂｐ内にロードする命令（図示せず）を含む。この点において、ｒｂｐが、値「ＳＲ＿ＳＰ１」を保持して、図６のフレーム４１０ａを参照すると仮定することができる。次に、ターゲットレジスタｒａｘおよびｒｂｐは、定数「１０」および「３」をロードされており、これらの値も、レジスタリファレンス１７５から導き出された変位１７７について参照された、ＳＲスタック４００上のエントリ内に記憶されている。このように、ＳＲスタック４００上の関連エントリは、参照されたレジスタ「Ｉ７」および「Ｉ３」におけるサブジェクトコードによって期待された、データの値を保持している。これらのターゲットレジスタｒａｘおよびｒｂｘが、その後、用いられて、代表的な「付加」サブジェクト命令と均等な作業を実行して、その結果は、「ｏ６」のリファレンスに関連したエントリ４０１に記憶される。この実施形態における「保存」サブジェクト命令は、第一のサブジェクトブロック１７ａを終了させる。また、この「保存」から導き出されたレジスタウインドウの動きに関する情報１７６に応じて、ターゲットコード２１ａが生成されて、ｒｂｐ内に保持されたスタックポインタＳＲ＿ＳＰを、ＳＲスタック４００上で１６個のエントリ分、進むように修正する。この結果、ＳＲ＿ＳＰは、値「ＳＲ＿ＳＰ２」を有するようになり、図６におけるフレーム４１０ｂを参照する。この第一のターゲットブロック２１ａにおけるフッタコード２１１は、変換されたターゲットコードとして実行するサブジェクトコードの次のブロックを選択するために、制御をトランスレータ１９に渡すこと、あるいは、生成済みのターゲットコードの次のブロックに直接、制御を渡すことなどの、次の行動を決定する。この例において、フッタコード２１１は、実行の制御を、トランスレータ１９に戻すことなく、第二のターゲットコードブロック２１ｂに直接、渡す。
【００５７】
第二のターゲットコードブロック２１ｂにおけるヘッダコード２１１は、適切に、このブロックのためのコンテキストを準備する。大部分の場合、これは、ｆｓ：ＳＲ＿ＳＰにおけるメモリから、ｒｂｐに、ＳＲ＿ＳＰをロードさせることを含む。この例においては、ターゲットコードの最適化は、既にｒｂｐにある値が、ブロック２１ａから単純に前に移動されるようにさせる。次に、ターゲットコードは、サブジェクトブロック１７ｂからのサブジェクト「追加」命令の作業を実行する。ｒｂｐにおけるＳＲ＿ＳＰのアップデートされた値のために、「Ｉ３」（ローカル３）に対するレジスタリファレンスは、第一のサブジェクトコードブロック１７ａにおいてのように、ＳＲスタック４００内の同一エントリ４０１に分解されないことに留意されたい。すなわち、サブジェクトブロック１７ａにおける、「Ｉ３」に対するリファレンスは、フレーム４１０ａ内のエントリに分解されるのに対して、サブジェクトブロック１７ｂにおける、「Ｉ３」に対するリファレンスは、フレーム４１０ｂ内のエントリに分解される。このように、ＳＲスタック４００は、サブジェクトプロセッサにおけるレジスタウインドウの期待された挙動をエミュレートする。最終的に、サブジェクトブロック１７ｂ内の最終的な「復旧」からのレジスタウインドウの動きに関する情報１７６に応じて、ターゲットコード２１ｂが生成され、ｒｂｐ内でＳＲ＿ＳＰの値をアップデートして、１６個のエントリ分、スタックポインタを遅らせる。それによって、スタックポインタは、再度、図６のフレーム４１０ａを参照することになる。また、サブジェクト「復旧」命令は、この第二のサブジェクトブロック１７ｂの終端点を選択するように作用する。大部分の場合、この「復旧」命令は、トランスレータに、サブジェクトブロック１７ｂを終了させる。しかしながら、この実施例において、サブジェクトブロックは、実際には、「復旧」の後に、「戻す」においてただちに終了する。この点で、ｒｂｐからｆｓ：ＳＲ＿ＳＰに戻された、アップデートされたスタックポインタＳＲ＿ＳＰを保存して、フッタコード２１１が、この場合、サブジェクトプログラムの実行を継続する「ｆｕｎｃ１」として、第一のサブジェクトブロック１７ａを呼び出したサブジェクトコード（図示せぬ）に制御を戻すような、トランスレータ１９に実行制御を戻すなどの、次の動作を決定することが適切である。
【００５８】
図８は、図６および図７の上記の例に類似した、他の表であり、ＳＲスタック４００をアドレス指定するための、第二の代表的なメカニズムである。
トランスレータ１９のデコーダユニット１９１は、上記のように、ウインドウ表示されたサブジェクトレジスタリファレンス１７５およびレジスタウインドウの動き１７６を識別する。さらに、識別されたレジスタウインドウの動きに関する情報１７６は、スタックポインタＳＲ＿ＳＰからのフレームオフセットとして、ターゲットコード２１において表現される、フレームオフセット１７８を導き出すために用いられる。それから、レジスタリファレンス１７５の各々は、このフレームオフセット１７８から変位１７７を提供して、ＳＲスタック４００内の関連するエントリ４０１をアドレス指定する。このため、スタックポインタＳＲ＿ＳＰは、エントリ４０１の二つ以上のフレーム４１０が、ブロック中で検討中であるにもかかわらず、ターゲットコードブロック２１ａを通して一定であり続ける。図８に示された第二の実施形態は、特に、トランスレータが、リーフ関数をターゲットコードの単一のブロック内にインライン化することを可能にさせる。ここで、リーフ関数とは、それ自体は、他の機能を呼び出さない機能である。その機能は、呼び出し側と、呼び出される側の両方のサブジェクトコード命令を、単一のブロックサブジェクトコード１７ａとして処理して、そこから、ターゲットコード２１ａの対応する単一のブロックを作成することによって、インライン化される。図８のこの簡易な例においては、リーフ関数はないが、後記の動作が、同様に、この目的に当てはまる。
【００５９】
さらなる実施形態において、デコーダ１９１が、サブジェクトコード１７のセクションが、所定の数より多いＳＡＶＥあるいはＲＥＳＴＯＲＥを含んでいることを検出して、それから、その時点で、ブロックの復号化が停止され（中止され）、新しいブロックが、デフォルト値（「ｆ０」）に戻りつつあるフレームオフセットによって作成される。すなわち、サブジェクトコードのセクションは、ＳＡＶＥあるいはＲＥＳＴＯＲＥを所定の数より多く含み、サブジェクトコードのこのセクションは、付加的なサブジェクトコードブロックを作成することによって、２以上のより小さいセクションに再分割される。この制限は、他の比較的長いブロックを中止させるためには好都合である。
【００６０】
図８Ａに示されるように、識別されたレジスタウインドウの動き１７６は、仮定された開始位置から、ＳＡＶＥおよびＲＥＳＴＯＲＥ方向の上方、あるいは下方に、フレームオフセット１７８を調整する。好適に、フレームオフセット１７８は、復号化された各ブロックの開始位置で、「０」に設定され、連続ＳＡＶＥの動きごとに、「−１」、「−２」などまで１カウントだけ、調整される。逆に、フレームオフセットは、識別されたＲＥＳＴＯＲＥタイプの動きごとに、１カウントだけ増加する。こうして、フレームオフセットは、そのブロック中に遭遇された、識別されたレジスタウインドウの動きに関する情報１７６に基づいて、デフォルトの開始位置から、カレント累積オフセットを提供する。例えば、「０」のデフォルトから、ＳＡＶＥは、そのフレームオフセット１７８を、「−１」にまで調整する。その後、第二のＳＡＶＥは、オフセットを「−２」にまで調整する。しかしながら、ＲＥＳＴＯＲＥは、オフセットを「−１」にまで戻す調整をして、第二のＲＥＳＴＯＲＥは、オフセットを「０」にまで戻す調整をして、さらに、さらなるＲＥＳＴＯＲＥは、オフセットを「＋１」にまで調整するなどをする。図８における表は、識別されたレジスタリファレンス１７５と、識別されたレジスタウインドウの動き１７６とを示している。また、この表は、変位１７７と、そこから導き出されたフレームオフセット１７８とを示している。さらに、この表は、フレームオフセット１７８と、変位１７７とを組み合わせて、ＳＲスタック４００上の種々の異なるフレーム４１０に存在する個々のエントリ４０１をアドレス指定する、代表的なターゲットコード２１を示している。すなわち、カレントオフセット１７８および変位１７７は、ターゲットコードを生成して、植え込むときに、コア１９２およびエンコーダユニット１９３によって用いられる。エンコーダ１９３は、こうして、「ベースプラスオフセット」タイプのアドレス指定を可能にすることによって、ＳＲスタック内でのアドレス指定を単純化する、ターゲットコード２１を植え込むことが可能となる。
【００６１】
図８Ａに示されるように、ターゲットコードブロック２１ａは、前述の例において示されたように、適切に、スタックポインタＳＲ＿ＳＰをターゲットレジスタｒｂｐにロードする、ヘッダコード２１１から開始する。この例においては、ｒｂｐにおける値が、図６のフレーム４１０ａを参照することが仮定される。次に、ターゲットコードは、上記のように、代表的な「移動」および「付加」サブジェクト命令に相当する作業を実行する。「保存」から導き出されたレジスタウインドウの動きに関する情報１７６に応じて、フレームオフセット１７８は、１カウントだけ減少して、ターゲットコードが生成されて、ＳＲスタック４００上で１６個のエントリだけ前進するように、ｒｂｐに保持されたスタックポインタＳＲ＿ＳＰを一時的に修正する。その結果、ＳＲ＿ＳＰは、図６における後続のフレーム４１０ｂを参照するようになる。「保存」サブジェクト命令は、ここでサブジェクトブロックを終了させないことに留意されたい。すなわち、ヘッダおよびフッタコードのオーバーヘッドは要求されない。図８におけるターゲットコードは、ｒａｘを用いて、ただちに、第二のサブジェクト「付加」命令の作業を実行する。「復旧」から導き出されたレジスタウインドウの動きに関する情報１７６に応じて、ターゲットコードが生成されて、新しいオフセット１７８によって、ｒｂｐ内でＳＲ＿ＳＰの値をアップデートして、１６個のエントリ分だけ、スタックポインタを遅らせる。それによって、スタックポインタは、再度、図６のフレーム４１０ａを参照することになる。また、最終的なサブジェクト「復旧」命令は、このサブジェクトブロック１７ａの終端点を選択するように作用する。フッタ２１１は、こうして、ｒｂｐからｆｓ：ＳＲ＿ＳＰに戻された、アップデートされたスタックポインタＳＲ＿ＳＰを保存する。上記の図７に関するように、サブジェクトブロック１７ａの端において、「戻す」は、サブジェクトブロック１７ａを「ｆｕｎｃ１」として呼び出したサブジェクトコード（図示せず）に戻るようなトランスレータに、実行制御を戻してもよい。
【００６２】
図８Ｂは、ＳＲアドレス指定メカニズムにおける、さらなる最適化を示している。ここで、オフセット１７８は、ターゲットコードを生成するより前に、変位１７７と組み合わせられて、その結果、ｒｂｐにおいてＳＲ＿ＳＰの値を一時的に調整する作業が回避されることになる。すなわち、図８Ａの端部における、三個のターゲット命令、「付加」、「移動」、および「付加」は、好適に、図８Ｂに示されるように、単一の「付加」命令に組み合わされる。オフセット１７８および変位１７７は、この場合は−１６＋１１＝−５によって組み合わされて、ｒｂｐの元の値から、−５の組み合わされた調整を付与する。ここで、レジスタリファレンス１７５と関連する変位１７７を、レジスタウインドウの動きに関する情報１７６と関連するフレームオフセット１７８とともに識別して、サブジェクトコードの作業の実行と、そのサブジェクトコードの動作に関連したサブジェクトプロセッサの重要な構成要素のエミュレートとの両方を行う、有効な最適化されたターゲットコードが、インライン化されるようにさせる。
【００６３】
図８における、上記のアドレス指定メカニズムは、トランスレータ１９に、ターゲットコードの単一のブロック内で、サブジェクトコードの、複数の「保存」および／または「復旧」命令の効果をエミュレートする、ターゲット命令を含む、ターゲットコードの単一のブロックを提供させる。このメカニズムはまた、トランスレータ１９に、サブジェクト関数、特に、リーフ命令を、ターゲットコードに埋め込むことが理解されよう。すなわち、手続き呼び出しを実行するために用いられるサブジェクト「呼び出し」と「戻す」命令は、レジスタウインドウ５１０の同一のＳＡＶＥおよびＲＥＳＴＯＲＥタイプの動きを伴い、ターゲットコードにおいて、関数呼び出しを要求することなく、達成されることができる。
【００６４】
図９は、ここで説明される、レジスタウインドウエミュレーションメカニズムの実行方法の概略的なフローチャートである。ステップ９０１において、サブジェクトコード１７のブロックが選択されて、復号化される。サブジェクトプロセッサ３のサブジェクトレジスタ５に対するこのサブジェクトコード１７のブロックにおけるリファレンス１７５は、ステップ９０２で識別される。とりわけ、リファレンス１７５は、ウインドウ表示されたサブジェクトレジスタ５０２のファイルに関連している。また、レジスタウインドウ５１０の動きを起こすサブジェクトコード１７内の命令１７６は、ステップ９０３において識別される。ステップ９０４において、ＳＲスタック４００は、上記のように、スタックポインタＳＲ＿ＳＰを参照して、ターゲットコンピューティングプラットフォーム１０上に提供される。
【００６５】
ステップ９０５において、ターゲットコード２１は、ＳＲスタック４００とスタックポインタＳＲ＿ＳＰに関連して生成される。すなわち、ターゲットコード２１の各ブロックは、ＳＲスタック４００上のエントリ４０１としてのデータの値を記憶して取り出す、ターゲットコード命令によって、生成される。ここで、ステップ９０６において、識別されたレジスタウインドウの動きに関する情報１７６から導き出されたターゲットコードは、スタックの新しい先頭を参照するようにスタックポインタＳＲ＿ＳＰをただちにアップデートすることによって、あるいは、一時的なフレームオフセット１７８を調整することによって、スタックポインタＳＲ＿ＳＰを調整する。ステップ９０７において、識別されたレジスタリファレンス１７５から導き出されたターゲットコード２１は、調整されたスタックポインタＳＲ＿ＳＰからの関連する変位１７６を用いることによって、ＳＲスタックのフレーム４１０内で、所望のエントリ４０１にアクセスする。
【００６６】
有利なことに、ＳＲスタックメカニズム４００は、それが同時に記憶することが可能なフレーム４０１の数に関して制限はない。図５に戻って、サブジェクトプロセッサ３のこの代表的なハードウエアの実施は、８個のレジスタウインドウ位置５１１のみを提供して、定義によって、ＳＰＡＲＣハードウエアは、最大、３２個のレジスタウインドウ位置を提供することのみが可能であることに留意されたい。レジスタウインドウ位置５１１の各々が、いったん、有効なデータを含んでしまうと、任意の付加的なＳＡＶＥは、スピルオペレーションを課して、ウインドウ表示されたレジスタファイル５０２を空にして、新しい一時的な作業スペースを開放させる。対照的に、当該エミュレートされたレジスタウインドウメカニズムは、サブジェクトアーキテクチャの自動的なスピルおよびフィルオペレーションを検出して、実行することに関する、かなりのオーバーヘッドを回避する。すなわち、当該レジスタウインドウメカニズムは、このような有限のハードウエア制限によって束縛されることはなく、ＳＲスタック４００は、ＳＡＶＥごとに、必要な付加的なエントリ４０１を含むことが要求されるとおり、延長する。サブジェクトコンピューティングアーキテクチャが、最大有限数ｎ個のレジスタウインドウ位置を備えている場合、ＳＲスタックは、実行プログレスとして、複数のｍ個のフレーム４１０を有してもよい。ここで、ｍおよびｎは、ともに、正の整数であり、ｍはｎより大きい。ＳＲスタック４００は相対的に大きく、所定の有限な大きさではない。ほとんどのターゲットコンピューティングプラットフォームにおいて、メモリ１８は、ＳＲスタック４００が、無限のリソースとしてトランスレータ１９で見られるのには十分な大きさである。最終的に、ＳＲスタック４００は大きさが制限されてはいるが、実際には、論理的に最大の大きさのスタックが、任意の現実的な実施（例えば、１６個の６４ビットのエントリごとに１Ｋｂ）に対して必要な大きさをはるかに上回っている。このため、ＳＲスタックは、無限のリソースとして処理されてもよい（すなわち、数百個のフレーム４１０が、ＳＲスタック４００によって容易に記憶される）。
【００６７】
図１０は、ターゲットコンピューティングアーキテクチャのメモリ内で、複数のスタックデータ構造を示し、本発明のさらなる態様を説明する概略図である。
図１０は、上記のような、ＳＲスタック４００を示す。この場合も、図は垂直に下方に伸びている。また、当業者にとって周知であるように、多数の他のスタックが、ターゲットコンピューティングアーキテクチャ１０のメモリ１８内に定義される。図示されたスタックは、特に、サブジェクトスタック４５０、ターゲットスタック４６０、およびトランスレータスタック４７０を含む。ここで、サブジェクトスタック４５０は、サブジェクトコードの実施のために、サブジェクトアーキテクチャ内に提供されるであろうように、実施スタック（制御スタックあるいは関数スタックとも称される）をエミュレートする。すなわち、サブジェクトコードからターゲットコードへのプログラムコード変換のプロセスの一部は、ターゲットアーキテクチャ上のサブジェクトスタック４５０の作成および操作をともなう。ターゲットスタック４６０は、ターゲットコード２１の実施のために用意されたスタックである。トランスレータスタック４７０は、トランスレータ１９の実行のために用意されたスタックである。これらのスタックの各々と、他のスタックは、ターゲットアーキテクチャのメモリ１８内に同時に存在して、典型的には、トランスレータコード１９とターゲットコード２１などとともに、ターゲットオペレーティングシステム２０によって管理される。
【００６８】
サブジェクトアーキテクチャ１において、レジスタスピルオペレーションは、サブジェクトシステムのメモリ８内に提供されるような、ウインドウ表示されたハードウエアサブジェクトレジスタ５０２からサブジェクトスタックへレジスタ値を転送させるために、サブジェクトスタック４５０は、特に興味深いものとなっている。逆に、サブジェクトアーキテクチャにおけるフィルオペレーションは、サブジェクトスタックからウインドウ表示されたハードウエアサブジェクトレジスタ５０２へレジスタ値を転送させる。代表的なＶ９  ＳＰＡＲＣアーキテクチャにおいて、各ＳＡＶＥタイプのレジスタの動きによって、スピルオペレーションが行われると、各レジスタウインドウ位置５１１においてレジスタ５０２からレジスタ値が充てんされるであろう実行スタック上に、空間が蓄えられるようになる。すなわち、図１０に示されるように、サブジェクトコード１７（ここでは、ターゲットコード２１に変換されている）は、当然、要求されたデータの値が、所定の状況においては、サブジェクトスタック４５０のエミュレートされたバージョンの割り当てられた空間内に表れるようになることを仮定してもよい。しかしながら、このようなデータの値は、ＳＲスタック４００からエミュレートされたサブジェクトスタック４５０へ実際にコピーされていない限り、データの値は期待されるようには表れてこないであろう。
【００６９】
図１０は、ＳＲスタック４００上における、代表的なエントリのフレームの１セットを示している。ここで、フレーム４１０には、Ｆ０からＦ８までの符号が付されている。図５に示されるように、フレームは互いに重複しているが、明確にするために、図１０においては重複しているようには示されていない。さらに、個々のエントリ４０１は、図１０において、やはり明確にするために示されていない。サブジェクトプラットフォームの挙動をエミュレートするため、新しいフレーム４１０のＦ０からＦ８の各々が、ＳＲスタック４００に付加されるように、空間が、エミュレートされた実行スタック４５０上に蓄えられる。また、サブジェクトコード１７を実行することによって、サブジェクトスタック上で、効果をエミュレートすることが要求されるとおり、エミュレートされたサブジェクトスタック４５０には、一時的な値、関数呼び出し、および戻しパラメータなどの他のデータが散在している。
【００７０】
特に、サブジェクトレジスタからサブジェクトスタックへのデータの転送に影響を与える、所定のサブジェクトコード命令が存在する。ここに記載されたｖ９  ＳＰＡＲＣの例において、「ｆｌｕｓｈｗ」命令は、カレントウインドウ位置を除いて、反復されるスピルトラップを実行することによって、ウインドウ表示されたハードウエアサブジェクトレジスタ５０２から、サブジェクト実行スタックへ、すべてのレジスタ５０２をフラッシュ表示する。この「ｆｌｕｓｈｗ」命令は、（カレントレジスタウインドウ位置以外の）任意のレジスタウインドウ位置が、有効なコンテンツを有している場合に、スピルトラップを発生させることによって実行される。サブジェクトアーキテクチャ上で、有効なコンテンツを有するウインドウ位置の数は、ＣＡＮＳＡＶＥ制御／状態レジスタを参照して計算される。
【００７１】
また、プログラミング言語Ｃは、特定のサブジェクトコンピューティングプラットフォームに、固有にコンパイルされたネイティブコードライブラリを含んでもよい。このＣプログラミング言語は、「ｓｅｔｊｍｐ」および「ｌｏｎｇｊｍｐ」などの命令を含む。これらの命令は、現在は、一般的には、時代遅れであり、また、実行が非常に困難であると考えられているものの、現実的には多くのサブジェクトプログラム、特に、レガシープログラムにおいて表現することが可能である。「ｓｅｔｊｍｐ」および「ｌｏｎｇｊｍｐ」命令は典型的に、ローカルではない出口あるいは、ソフトウエアの例外的な処置のための、Ｃプログラミング言語において用いられる。ｓｅｔｊｍｐ関数は、ｓｅｔｊｍｐ関数に対する呼び出しが、サブジェクトコード内に表れる時点で、実行環境についての情報を保存することによって、戻しポイントを識別する。サブジェクトプログラムの実行は、実行制御が、ｓｅｔｊｍｐが呼び出されるポイントまで戻って転送されることになるように、通常は、ｓｅｔｊｍｐに対する呼び出しの後に、いくつかの後のポイントで、ｌｏｎｇｊｍｐの呼び出し側が、この戻しポイントに対して出口を発生させるまで、続く。ｓｅｔｊｍｐルーチンは典型的には、サブジェクトレジスタからサブジェクトスタックまでレジスタ値をコピーすることを含み、また、ｌｏｎｇｊｍｐ関数は典型的には、これらの値をスタックからサブジェクトレジスタへ復旧させる。
【００７２】
他の実施例として、プログラミング言語Ｃは、信号処理あるいはユーザのマルチスレッディングにおいて用いられるために、コンテキストを作成し、保存し、復旧する関数の、プロセッサファミリスペシフィックインプリテーションを、アセンブリにおいて含んでもよい。いくつかのＣライブラリは、このようなルーチンを、「ｇｅｔｃｏｎｔｅｘｔ」、「ｓｅｔｃｏｎｔｅｘｔ」、および「ｍａｋｅｃｏｎｔｅｘｔ」という名の元に供給する。コンテキスト関数は、ネイティブＣライブラリの一部のように提供されるが、ＡＲＭ、ＰｏｗｅｒＰＣ、ＳＰＡＲＣおよびｘ８６などの特定のハードウエアのために、特定の実行によって提供されるものである。
【００７３】
さらなる実施の例として、より高いレベルのプログラミング言語Ｃ＋＋は、具体的には、ソフトウエアの除外を取り扱うような命令を供給する。これらのＣ＋＋の除外を取り扱う命令は、サブジェクトプログラムの実行中に遭遇する例外的な状況を取り扱うことを第一に、意図しているが、これらの命令はまた、それら自体において、好都合なプログラミング構造を有しており、また、さらに典型的な「ｉｆ」タイプの命令と比較して、プログラムのアルゴリズムを単純化するために頻繁に用いられている。具体的には、Ｃ＋＋の除外の命令は、「ｔｒｙ」、「ｃａｔｃｈ」、および「ｔｈｒｏｗ」命令を含む。サブジェクトプロセッサによって実行可能な、バイナリサブジェクトコードにおけるこれらの命令を実行することは、このように、サブジェクトレジスタとサブジェクトスタックとの間のデータ転送をともなう。
【００７４】
例えば、それによって、サブジェクトプログラムが実行スタックにまで引き戻るスタックの巻き戻しを含むデータのこのような転送を要求する、他の多くの状況が存在し、このために、実行スタック上に存在する、有効なサブジェクト値を要求する。
【００７５】
図１１は、ウインドウ表示されたサブジェクトレジスタ５０２をエミュレートするために用いられるＳＲスタック４００と、サブジェクトプラットフォームの実行スタックをエミュレートするために用いられるサブジェクトスタック４５０との間でデータの値を転送するメカニズムを示す、概略フローチャートであり、逆もまた同様である。
【００７６】
ステップ１１０１において、サブジェクトコード１７は復号化されて、とりわけ、上記のように、ＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動き１７６を識別する。ステップ１１０２において、ＣＲカウンタは、識別されたレジスタウインドウの動き１７６ごとに、アップデートされる。適切に、各ＳＡＶＥは、＋１を、ＣＲカウンタに付加して、各ＲＥＳＴＯＲＥは、ＣＲカウンタから−１を減少させる。このように、サブジェクトプログラムが進行するにつれて、ＣＲカウンタは、ＳＲスタック４００上で、エントリ４０１のフレーム４１０の数をカウントする。また、ステップ１１０３において、サブジェクト命令は、そのサブジェクトアーキテクチャにおいて、ウインドウ表示されたサブジェクトレジスタ５０２において保持されるデータの値が、サブジェクト実行スタックに対して保存されるように要求するものとして識別される。この命令はここでは、ＳＰＩＬＬタイプ命令と称される。ＳＰＡＲＣサブジェクトアーキテクチャの特定の例として、「ｆｌｕｓｈｗ」サブジェクト命令が識別される。ステップ１１０４において、図１０に示されるように、ターゲットコード２１が供給されて、エントリ４１０の決められた数のフレーム４１０を、ＳＲスタック４００から、エミュレートされたサブジェクトスタック４５０上に割り当てられた対応する空間にフラッシュ表示する。この図１０の図示された例において、ＳＲスタック４００は、Ｆ０からＦ８までの符号が付された９個のフレームのためのエントリを含んでいる。ここで、ＣＲカウンタは、先の８個のフレームＦ０からＦ７（すなわち、エントリＦ８のカレントフレームを含まない）が、ＳＲスタック４００から、サブジェクトスタック４００（ＣＲ＝８）までコピーされる必要があることを示す。ステップ１１０５において、この反復されるスピルオペレーションの後に、ＣＲカウンタが０までアップデートされて（リセットされて）、要求されたフレーム４１０のすべてが、ＳＲスタック４００からサブジェクトスタック４５０にコピーされたことを示す。
【００７７】
上記のように、サブジェクトアーキテクチャにおいて、「ｆｌｕｓｈｗ」命令は、カレント位置を除く、すべてのレジスタウインドウ位置５１１を無効にして、このように、サブジェクト実行スタックは、すべての先行するレジスタウインドウ位置に関して、サブジェクトレジスタ値の基準のバージョンを保持する。Ｃコンテキスト関数、ｓｅｔｊｍｐ／ｌｏｎｇｊｕｍｐ関数、およびＣ＋＋の除外などのいくつかのサブジェクトプログラムは、サブジェクトスタックに記憶されたデータの値を変更するであろう。このため、この図１０に示されたエミュレートされた環境において、ＳＲスタック４００上のエントリ４０１における（潜在的に無効化された）データよりはむしろ、エミュレートされたサブジェクト実行スタック４５０において保持された値を参照することが重要である。したがって、ステップ１１０６において、ターゲットコードが生成されて、適切な場合に、エミュレートされたサブジェクトスタック４５０上で、所望のデータの値にアクセスする。
【００７８】
ステップ１１０７は、サブジェクトアーキテクチャにおいて、レジスタの値を、サブジェクト実行スタックから、ウインドウ表示されたレジスタファイル５０２にロードされるようにさせるサブジェクトコード命令を識別することを含む。これはここでは、ＦＩＬＬタイプの命令と称される。代表的なＳＰＡＲＣサブジェクトアーキテクチャにおいて、これは、適切に、「復旧」命令である。ここに提供された、エミュレートされたメカニズムにおいて、ＣＲカウンタはステップ１１０８において試験される。ＣＲカウンタが非ゼロ（ＣＲ＞０）であって、一つ以上の有効なフレーム４１０が、ＳＲスタック４００において存在することを示す場合、ステップ１１０５において、ＣＲは、ＲＥＳＴＯＲＥ命令に応じて、アップデートされ（この場合、ＣＲ＝ＣＲ−１のように減少する）、サブジェクトスタック４５０からコピーされるデータはない。ここで、サブジェクト「復旧」は、スタックポインタＳＲ＿ＳＰを調整して、上記のように、ＳＲスタック上で異なるフレーム４１０を選択する。しかしながら、ＣＲカウンタがゼロ（ＣＲ＝０）であって、ＳＲスタック上に有効な先行するフレームが存在しないことを示す場合、ステップ１１０９において、フィルオペレーションが行われて、ＲＥＳＴＯＲＥに続く新しいカレントフレーム４１０として用いられるように、サブジェクトスタック４５０から、ＳＲスタック４００にデータの値のフレームをコピーする。サブジェクトスタック４５０からのデータの値のフレームは、サブジェクトプログラムによって修正されていてもよく、ここで、これらのデータの値の基準のバージョンは、サブジェクトプログラムにおいて引き続いて用いられるように、ＳＲスタック４００のエントリ４０１において再び、利用可能となる。特に、慣例による、ＳＰＡＲＣアーキテクチャは、サブジェクトスタックに関するスタックポインタを、サブジェクトレジスタｏ６（エイリアスｓｐによっても既知である）に記憶する。レジスタウインドウ位置５１１の重複によって、呼び出し側手順に関するスタックポインタは、サブジェクトレジスタｉ６においてもまた利用可能である。この先行するスタックポインタは、フレームポインタと称される（また、エイリアスｆｐを用いてアクセスされることが可能である）。記憶されたレジスタの値への修正は、典型的に、フレームポインタ（ｉ６／ｆｐ）および／またはスタックポインタ（ｏ６／ｓｐ）に関して、レジスタの値を変更することをともなう。このように、これらのデータの値が、ここで説明されたエミュレーションメカニズムによって、正確に維持されることが重要である。
【００７９】
図１２Ａは、代表的なスピルオペレーションをさらに詳細に示している。オペレーション「ｆｌｕｓｈｗ」は、符号を付されたフレーム、Ｆ０およびＦ１に関して先に行われ、このように、ＣＲカウンタをゼロにリセットする。そのポイントに続いて、（少なくとも）１７個のさらなるＳＡＶＥレジスタの動きがあって、ＣＲカウンタ（ＣＲ＝１７）によって留意されるように、ＳＲスタック４００上で、Ｆ２からＦ１９のフレームを形成する。ＳＰＩＬＬ命令（すなわち「ｆｌｕｓｈｗ」）は、サブジェクトコードにおいて識別される。このサブジェクトコードは、レジスタの値Ｆ１９からＦ２の１７個のフレームを、ＳＲスタック４００からサブジェクトスタック４５０までコピーされるようにして、ＣＲカウンタをゼロに戻す。フレームＦ２からＦ１８のすべてが無効となり、現在、アクティブなフレームＦ１９だけが、ＳＲスタック上で有効のままである。
【００８０】
図１２Ｂは、図１２Ａに示される状態以降の代表的なフィルオペレーションをさらに詳細に示している。ここで、現在アクティブなフレームＦ１９（ここでＣＲ＝０）からのＲＥＳＴＯＲＥは、レジスタの値のフレームを、サブジェクトスタック４５０からロードさせて、新しいカレントフレームを、ここではＦ１８で、形成して、ＳＲスタック上のそのフレームにおいて先に、（無効な）値を置き換える。新しいカレントフレームＦ１８にロードされたレジスタの値を使用して、実行は継続する。ＳＲスタックＳＲ＿ＳＲＳのスタックポインタはただちに、あるいはサブジェクトコードブロックの端部においてアップデートされて、このレジスタウインドウの動きを説明する。
【００８１】
この転送メカニズムの他の特定の実施形態もまた、検討される。特に、「ｆｌｕｓｈｗ」が、カレントウインドウ以外のすべてのレジスタウインドウを無効化するために、スピルオペレーション（「ｆｌｕｓｈｗ」）に続いて、ＳＲスタック上の任意の適切なポイントは、その後、新しいカレントフレームとして使用されてもよい。例えば、ＳＲスタックは除去されることが可能であり、各「ｆｌｕｓｈｗ」の後で完全に再生されたスタック空間、あるいはＳＲスタック上のデフォルトの位置は、スタックに関して割り当てられた空間の半分などの、新しいカレントフレームとして設定されてもよい。
【００８２】
本発明の少なくともいくつかの実施形態は、専用のハードウエアを用いて単独に構成されてもよく、ここで用いられる「モジュール」あるいは「ユニット」などの用語は、所定のタスクを実行する、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）あるいは特定用途向け集積回路（ＡＳＩＣ）などの、ハードウエア装置を含むがそれらに限定されない。また、本発明の構成要素は、アドレス指定可能な記憶媒体上に存在するように構成されてもよく、また、一つ以上のプロセッサ上で実行されるように構成されてもよい。このように、本発明の機能的な要素は、いくつかの実施形態において、例として、コンポーネント、例えば、ソフトウエアコンポーネント、オブジェクト指向ソフトウエアコンポーネント、クラスコンポーネント、およびタスクの構成要素、プロセス、関数、属性、サブルーチン、プログラムコードのセグメント、ドライバ、ファームウエア、マイクロコード、回路、データ、データベース、データ構造、テーブル、アレイ、および可変要素を含んでもよい。さらに、好適な実施形態は、ここに述べられている、コンポーネント、モジュール、およびユニットに関して記載されてはいるが、このような機能的な要素が組み合わされて、より少ない要素となってもよいし、あるいは付加的な要素に分割されてもよい。
【００８３】
いくつかの実施形態が示され、記載されているものの、添付の特許請求の範囲において定義されるような、本発明の範囲から逸脱していない限り、種々の変形および修正を行うことが可能であると当業者に理解されるであろう。
【００８４】
本願に関連して本明細書と同時にあるいはそれ以前に提出され、本明細書とともに公衆が閲覧できるように公開されたあらゆる文献や書類に注意が向けられており、これらの文献や書類すべての内容が、参照してここに組み込まれる。
【００８５】
本明細書（添付の特許請求の範囲、要約書、および図面を含む）に開示されたすべての特徴、および／または、同様に開示された方法あるいはプロセスのすべてのステップは、このような特徴および／またはステップの少なくともいくつかが相互排他的である場合の組み合わせをのぞいて、任意の組み合わせにおいて組み合わされてもよい。
【００８６】
本明細書（添付の特許請求の範囲、要約書、および図面を含む）に開示された各特徴は、別に明確に述べられていない限り、同一の、同等の、あるいは同様の目的を果たす代替的な特徴によって置き換えられてもよい。このように、別に明確に述べられていない限り、開示された各特徴は、同等の、あるいは同様の特徴の一般的なシリーズからなる一例にすぎない。
【００８７】
本発明は、上記の実施形態の詳細には限定されない。本発明は、本明細書（添付の特許請求の範囲、要約書、および図面を含む）に開示された特徴における、いかなる新しい特徴、あるいは新しい特徴の組み合わせ、あるいは、同様に開示されたいかなる方法あるいはプロセスのステップにおける、いかなる新しいステップ、あるいは新しいステップの組み合わせにまで発展する。
【図１】
2010506250.tif 000003
【図２】
2010506250.tif 000004
【図３】
2010506250.tif 000005
【図４】
2010506250.tif 000006
【図５】
2010506250.tif 000007
【図６】
2010506250.tif 000008
【図７】
2010506250.tif 000009
【図８】
2010506250.tif 000010
【図９】
2010506250.tif 000011
【図１０】
2010506250.tif 000012
【図１１】
2010506250.tif 000013
【図１２Ａ】
2010506250.tif 000014
【図１２Ｂ】
2010506250.tif 000015
【手続補正書】
【提出日】平成21年11月4日(2009.11.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
レジスタウインドウアーキテクチャをサポートするように適合されたコンピューティングシステムであって、レジスタウインドウに基づくサブジェクトコンピューティングアーキテクチャのサブジェクトプロセッサによって実行可能なサブジェクトコードとともに用いられ、前記レジスタウインドウが、ウインドウ表示されたレジスタファイルから、サブジェクトプロセッサのサブジェクトレジスタの選択されたサブセットを明確にするように設けられ、前記サブジェクトコードは、レジスタウインドウに影響を与えるウインドウに基づいた命令と、前記レジスタウインドウにおけるサブジェクトレジスタに対するリファレンスを含むレジスタに基づいた命令を含み、前記コンピューティングシステムは、
前記サブジェクトコードを復号化して、前記ウインドウに基づく命令から、レジスタウインドウの動きについての情報を導き出し、且つ前記レジスタに基づく命令から、一つ以上のウインドウ表示されたサブジェクトレジスタリファレンスを導き出すように構成されているデコーダユニットと、
複数のエントリを記憶するように設けられた、スタックデータ構造を有するメモリと、  前記デコーダユニットによって復号化された前記サブジェクトコードからターゲットコードを生成するように構成されているエンコーダユニットと、
前記ターゲットコードを実行して、前記メモリにおける前記スタックデータ構造の先頭に関連したスタックポインタを設定し、前記レジスタウインドウの動きについての情報を参照して、前記スタックポインタを調整し、前記ウインドウ表示されたサブジェクトレジスタリファレンスの各々について決定された変位と組み合わされた前記スタックポインタを参照して、前記スタックデータ構造内のエントリにアクセスするように構成されたターゲットプロセッサと、
を備える、コンピューティングシステム。
【請求項２】
前記デコーダユニットは、少なくとも前記レジスタウインドウのＳＡＶＥおよびＲＥＳＴＯＲＥタイプの動きを引き起こす前記サブジェクトコードにおいて、前記ウインドウに基づく命令のうち、一つ以上を識別し、前記ウインドウに基づく命令から、少なくともＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報を導き出すように構成されている、請求項１に記載のコンピューティングシステム。
【請求項３】
前記ターゲットプロセッサは、前記各ＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、前記スタックポインタを調整するように構成されている、請求項２に記載のコンピューティングシステム。
【請求項４】
前記ターゲットプロセッサは、前記各ＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のオフセットによって、前記スタックポインタを調整するように構成されている、請求項３に記載のコンピューティングシステム。
【請求項５】
前記エンコーダユニットは、前記調整されたスタックポインタを前記決定された変位に組み合わせることによって、前記ターゲットプロセッサに、前記スタックデータ構造の選択されたエントリにアクセスさせる、少なくとも一つのターゲットコード命令を発するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項６】
前記ターゲットプロセッサは、前記レジスタウインドウの動きに関する情報にしたがって、所定の数のエントリによって、前記スタックポインタを調整するようにフレームオフセットを決定し、前記決定されたフレームオフセットと前記決定された変位とにしたがって、前記スタックデータ構造から選択されたエントリにアクセスするように、前記スタックポインタを調整するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項７】
前記デコーダユニットは、前記レジスタウインドウの動きに関する情報が導き出される前記サブジェクトコードにおいて、前記ウインドウに基づく命令にしたがって、前記サブジェクトコードを、複数のブロックに分割するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項８】
前記サブジェクトコードは、被呼び出し部分に対して関数呼び出しを行う、少なくとも一つの呼び出し部分を含み、且つ前記エンコーダユニットは、前記被呼び出し部分を、前記呼び出し部分にインライン化するターゲットコードの単一のブロックを生成するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項９】
前記エンコーダユニットは、前記ターゲットプロセッサによって、
ｉ）前記ウインドウ表示されたサブジェクトレジスタリファレンス及び前記スタックポインタから導き出された前記変位を参照して、前記サブジェクトコードの前記呼び出し部分において識別された、前記ウインドウ表示されたサブジェクトレジスタリファレンスにしたがって、前記スタックデータ構造から選択されたエントリにアクセスし、
ｉｉ）前記サブジェクトコードの前記呼び出し部分から導き出された、前記レジスタウインドウの動きに関する情報にしたがって、前記スタックデータ構造の所定の数のエントリに等価なフレームオフセットを増加し、
ｉｉｉ）ウインドウ表示されたサブジェクトレジスタリファレンスから導き出された前記変位と、フレームオフセットにしたがって調整されたスタックポインタを参照して、サブジェクトコードの前記被呼び出し部分において識別された、ウインドウ表示されたサブジェクトレジスタリファレンスにしたがって、前記スタックデータ構造から選択されたエントリにアクセスし、
ｉｖ）サブジェクトコードの前記被呼び出し部分から導き出された、前記レジスタウインドウの動きに関する情報にしたがって、前記フレームオフセットを減少させる
ように、実行される前記ターゲットコード命令を生成するように構成されている、請求項８に記載のコンピューティングシステム。
【請求項１０】
前記メモリはさらに、前記サブジェクトコードの実行用に、実行スタックをエミュレートするように構成された、エミュレート実行スタックを備え、
前記デコーダユニットは、前記サブジェクトコードを復号化して、少なくともＳＡＶＥタイプおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報を識別するように構成され、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行された前記ターゲットコードを生成して、識別されたレジスタウインドウの動きごとにカウンタをアップデートさせるように構成され、前記アップデートは、ＳＡＶＥごとにカウンタを増加させることと、ＲＥＳＴＯＲＥごとにカウンタを減分させることを含み、それによって、前記カウンタは、各フレームがスタックデータ構造上に記憶された所定の数のエントリを含む、フレームの数をカウントし、
前記デコーダユニットは、前記サブジェクトコードにおいて前記レジスタに基づいた命令から導き出された、前記ウインドウ表示されたサブジェクトレジスタリファレンスにおいて保持される、データの値の流出を要求するような前記サブジェクトコードにおいて、ＳＰＩＬＬタイプの命令を識別するように構成され、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行された前記ターゲットコードを生成して、前記スタックデータ構造におけるエントリから、メモリ内で前記エミュレートされた実行スタック上に割り当てられた対応するエントリに、データの値をコピーするように構成され、ここで、前記エントリは、カウンタによって決定されるような多数のフレーム内に存在し、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行される前記ターゲットコードを生成して、前記スタックデータ構造内に、エントリの有効なフレームがないことを示す、デフォルト値に前記カウンタをリセットするように構成され、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行される前記ターゲットコードを生成して、前記メモリ内の前記エミュレートされた実行スタックにおける前記エントリ内に記憶された、前記データの値をアドレス指定するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項１１】
前記デコーダユニットはさらに、前記メモリ内の前記エミュレートされた実行スタックにおける前記エントリに保持された、データの値の充てんを要求する、前記サブジェクトコードにおいて、ＦＩＬＬタイプの命令を識別するように構成され、
前記エンコーダユニットは、前記ターゲットプロセッサによって実行された前記ターゲットコードを生成して、前記デフォルト値について前記カウンタをテストするように構成され、
ｉ）ここで、前記カウンタをテストすることは、前記スタックデータ構造に一つ以上のエントリの有効なフレームが存在することを示し、識別されたＦＩＬＬ命令にしたがって、前記カウンタをアップデートして、
ｉｉ）ここで、前記カウンタをテストすることは、前記スタックデータ構造にエントリの有効な先行するフレームが存在しないことを示し、前記スタックデータ構造におけるエントリのカレントフレームとして、前記メモリにおける前記エミュレートされた実行スタックのエントリのフレームから、前記メモリ内の前記スタックデータ構造にデータの値をコピーする、
請求項１０に記載のコンピューティングシステム。
【請求項１２】
前記デコーダユニットは、前記サブジェクトコードを複数のサブジェクトコードブロックに分割するように構成され、且つ前記エンコーダユニットは、前記ターゲットプロセッサによる前記ターゲットコードのブロックの実行によってインタリーブされた、対応する複数のターゲットコードブロックとして、前記ターゲットコードを生成するように構成されている、請求項１に記載のコンピューティングシステム。
【請求項１３】
前記サブジェクトコードは、実行可能なバイナリコードであって、前記ターゲットコードは、実行可能なバイナリコードである、請求項１に記載のコンピューティングシステム。
【請求項１４】
レジスタウインドウアーキテクチャをサポートするように適合されたコンピューティングシステムを制御する方法であって、
（ａ）レジスタウインドウに基づくサブジェクトコンピューティングアーキテクチャのサブジェクトプロセッサによって実行可能な、サブジェクトコードを復号化する工程であって、レジスタウインドウが、ウインドウ表示されたレジスタファイルから、サブジェクトレジスタの選択されたサブセットを明確にするように位置決めされ、
（ａ１）前記サブジェクトコードにおける命令から、ウインドウ表示されたサブジェクトレジスタリファレンスを識別する工程であって、前記ウインドウ表示されたサブジェクトリファレンスが、前記レジスタウインドウにおける前記サブジェクトレジスタのうちの一つに対するリファレンスを含む、前記識別する工程と、
（ａ２）前記レジスタウインドウの動きを発生させる前記サブジェクトコードにおける命令から、レジスタウインドウの動きに関する情報を導き出す工程と
を含む、前記工程（ａ）と、
（ｂ）前記コンピューティングシステムのメモリ内において、複数のエントリを記憶させるように構成されたスタックデータ構造を提供して、前記メモリ内で、前記スタックデータ構造の先頭を指示するスタックポインタを設定する工程と、
（ｃ）前記サブジェクトコードをターゲットコードに変換して、前記コンピューティングシステムのターゲットプロセッサ上で前記ターゲットコードを実行する工程であって、それにより
（ｃ１）前記識別されたレジスタウインドウの動きについての情報を参照して、前記スタックポインタを調整する工程と、
（ｃ２）前記ウインドウ表示されたサブジェクトレジスタリファレンスから決定された変位と組み合わされた前記スタックポインタを参照して、前記スタックデータ構造内のエントリのうちの少なくとも一つにアクセスする工程と
を実行する、前記工程（ｃ）と
を備える、方法。
【請求項１５】
前記（ａ２）の工程は、前記レジスタウインドウの少なくともＳＡＶＥおよびＲＥＳＴＯＲＥタイプの動きを発生させる、前記サブジェクトコードにおいて、一つ以上の命令を識別して、それによって、少なくともＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報を導き出すことを含み、
前記（ｃ１）の工程は、前記各ＳＡＶＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のフレームオフセットによって、前記スタックポインタを増分し、且つ前記各ＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のフレームオフセットによって、前記スタックポインタを減分するか、または前記各ＳＡＶＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のフレームオフセットによって、前記スタックポインタを減分し、且つ前記各ＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報に応じて、所定のフレームオフセットによって、前記スタックポインタを増分することを含む、
請求項１４に記載の方法。
【請求項１６】
前記スタックデータ構造における前記エントリの各々が、前記サブジェクトコード内の前記レジスタに基づく命令における、ウインドウ表示されたサブジェクトレジスタリファレンスのセットのうち一つに対応する方法であって、
前記ステップ（ｃ１）において、前記フレームオフセットは、前記セットの大きさに対応する前記スタックデータ構造上における多数のエントリによって、前記スタックポインタを調整し、
前記ステップ（ｃ２）において、前記変位は、セット内の前記ウインドウ表示されたサブジェクトレジスタリファレンスの相対位置にしたがって、多数のスタックデータ構造上のエントリによって、前記スタックポインタを変位させる、
請求項１５に記載の方法。
【請求項１７】
レジスタウインドウの動きに関する情報が導き出される命令の位置にしたがって、前記サブジェクトコードを、複数のブロックに分割する工程をさらに含み、このようなブロックごとに、前記サブジェクトコードブロック内のサブジェクトコード命令について、前記工程（ａ）、（ｂ）、および（ｃ）を行う、請求項１４に記載の方法。
【請求項１８】
前記サブジェクトコードは、被呼び出し部分に対して関数呼び出しを行う、少なくとも一つの呼び出し部分を含み、前記工程（ｃ）はさらに、被呼び出し部分を、呼び出し部分にインライン化する、前記ターゲットコードの単一のブロックを供給することを含む、請求項１４に記載の方法。
【請求項１９】
第一の値を有する前記スタックポインタを提供し、一つ以上のターゲットコード命令を実行して、ウインドウ表示されたサブジェクトレジスタリファレンスから導き出された変位と、前記スタックポインタの第一の値とを参照して、サブジェクトコードの前記呼び出し部分において識別された、ウインドウ表示されたサブジェクトレジスタリファレンスにしたがって、前記スタックデータ構造から選択されたエントリにアクセスする工程と、
サブジェクトコードの前記呼び出し部分から導き出された前記レジスタウインドウの動きに関する情報にしたがって、所定の数のエントリによって、フレームオフセットを増加させる工程と、
ウインドウ表示されたサブジェクトレジスタリファレンスから導き出された変位と、フレームオフセットにしたがって調整されるようなスタックポインタとを参照して、サブジェクトコードの被呼び出し部分において識別された、ウインドウ表示されたサブジェクトレジスタリファレンスにしたがって、前記スタックデータ構造から選択されたエントリにアクセスするように、一つ以上のターゲットコード命令を実行する工程と、
前記サブジェクトコードの被呼び出し部分から導き出された、レジスタウインドウの動きに関する情報にしたがって、フレームオフセットを減少させる工程と
を含む、請求項１８に記載の方法。
【請求項２０】
前記コンピューティングシステムの前記メモリにおいてエミュレートされた実行スタックを提供して、サブジェクトコードの実行に関する実行スタックをエミュレートする工程と、
少なくとも前記ＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報を識別する、前記サブジェクトコードを復号化する工程と、
ＳＡＶＥごとにカウンタを増分し、ＲＥＳＴＯＲＥごとにカウンタを減分することを含み、これによって、前記カウンタは、スタックデータ構造上に記憶されたエントリの多数のフレームをカウントする、ＳＡＶＥおよびＲＥＳＴＯＲＥタイプのレジスタウインドウの動きに関する情報ごとに、カウンタをアップデートする工程と、
前記サブジェクトコードによって、実行スタックにアドレス指定された、ウインドウ表示されたサブジェクトレジスタ内に保持されたデータの値の流出を要求する、前記サブジェクトコードにおける、ＳＰＩＬＬタイプの命令を識別する工程と、
エントリの多数のフレームからのデータの値を、前記スタックデータ構造から、前記エミュレートされた実行スタック上に割り当てられた対応する空間にコピーする工程であって、エントリのフレームの数はカウンタによって決定される、前記コピーする工程と、
前記スタックデータ構造内にエントリの有効なフレームが存在しないことを示す、デフォルト値に、カウンタをリセットする工程と、
ターゲットコードを生成して、エミュレートされた実行スタック上に記憶されたデータの値をアドレス指定する工程と
をさらに備える、請求項１５に記載の方法。
【請求項２１】
実行スタックにおいて保持されたデータの値を、サブジェクトコードによってアドレス指定された、ウインドウ表示されたサブジェクトレジスタ内に充てんすることを要求する、前記サブジェクトコードにおける、ＦＩＬＬタイプの命令を識別する工程と、
デフォルト値について、カウンタをテストする工程と、
をさらに備え、
前記カウンタをテストする工程は、一つ以上のエントリの有効なフレームが、スタックデータ構造内に存在することを示し、識別されたＦＩＬＬ命令にしたがって、カウンタをアップデートして、
前記カウンタをテストする工程は、エントリの先行する有効なフレームが、スタックデータ構造内に存在しないことを示し、エミュレートされた実行スタックからのデータの値のフレームを、エントリのカレントフレームとして使用するための、スタックデータ構造にコピーする
請求項２０に記載の方法。
【請求項２２】
実行されたときに、レジスタウインドウアーキテクチャをサポートするようにコンピューティングシステムを適合させる、コンピュータで実行可能な命令が記録された、コンピュータで読み取り可能な記憶媒体であって、
（ａ）レジスタウインドウに基づいたサブジェクトコンピューティングアーキテクチャのサブジェクトプロセッサによって実行可能なサブジェクトコードを復号化するように構成されたコードユニットであって、カレントレジスタウインドウは、ウインドウ表示されたレジスタファイルから、サブジェクトレジスタの選択されたサブセットを明らかにするように位置決めされ、サブジェクトコード内の命令から、ウインドウ表示されたサブジェクトレジスタリファレンスを識別することを含み、前記ウインドウ表示されたサブジェクトレジスタリファレンスは、レジスタウインドウ内の前記サブジェクトレジスタのうちの一つに対するリファレンスを含み、レジスタウインドウの動きを発生させる、サブジェクトコード内の命令から、レジスタウインドウの動きについての情報を導き出す、前記コードユニットと、
（ｂ）複数のエントリを記憶させるように構成されたコンピューティングシステムのメモリ内にスタックデータ構造を提供して、前記メモリ内で、スタックデータ構造の先頭を指示するスタックポインタを設定するように構成されたコードユニットと、
（ｃ）サブジェクトコードをターゲットコードに変換して、コンピューティングシステムのプロセッサ上で、このターゲットコードを実行させ、識別されたレジスタウインドウの動きについての情報を参照して、スタックポインタを調整し、また、ウインドウ表示されたサブジェクトレジスタリファレンスから決定された変位と組み合わされた調整されたスタックポインタを参照して、スタックデータ構造内のエントリのうちの少なくとも一つにアクセスするように構成されたコードユニットと、
を備える、コンピュータで読み取り可能な記憶媒体。
【国際調査報告】
2010506250.tif 000016
2010506250.tif 000017
2010506250.tif 000018