(57)【要約】【課題】Ｓｅｔ  Ｔａｂｌｅ  ｏｆ  Ｃｏｎｔｅｎｔｓ（ＴＯＣ）Ｒｅｇｉｓｔｅｒ命令を提供する。【解決手段】ＴＯＣなどの参照データ構造へのポインタを与える命令が、プロセッサによって取得され、実行される。実行することは参照データ構造へのポインタについての値を決定することと、命令によって指定された場所（例えば、レジスタ）にその値を格納することとを含む。【選択図】図３９
2020534596.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を促進するためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品は、
処理回路によって可読であり、方法を実施するための命令を記憶する、コンピュータ可読記憶媒体を備え、
前記方法は、
プロセッサによって参照データ構造へのポインタを与えるための実行する命令を取得することと、
前記命令を実行することであって、前記実行することは、
前記参照データ構造への前記ポインタについての値を決定することと、
前記命令によって指定された場所に前記値を格納することと
を含む、前記実行することと
を含む、コンピュータ・プログラム製品。
【請求項２】
前記値を決定することは、前記値を決定するためにデータ構造のルックアップを実施することを含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記データ構造は、参照データ構造ポインタ・キャッシュを備える、請求項２に記載のコンピュータ・プログラム製品。
【請求項４】
前記データ構造は、参照データ構造ポインタ値でポピュレートされるテーブルを備える、請求項２に記載のコンピュータ・プログラム製品。
【請求項５】
前記場所は、前記命令によって指定されるレジスタを含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項６】
前記値を決定することは、
前記値を含むエントリについて参照データ構造ポインタ・キャッシュをチェックすることと、
前記エントリを見つけることに基づいて前記格納することを実施することと
を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項７】
前記値を決定することは、
前記プロセッサによって、前記参照データ構造ポインタ・キャッシュ内に位置していない前記値に基づいてハンドラへのトラップを発生させることと、
前記ハンドラによって、参照データ構造ポインタ値でポピュレートされたデータ構造から前記値を取得することと、
前記ハンドラによって前記格納することを実施することと
をさらに含む、請求項６に記載のコンピュータ・プログラム製品。
【請求項８】
前記方法は、前記値を前記参照データ構造ポインタ・キャッシュ内に格納することをさらに含む、請求項７に記載のコンピュータ・プログラム製品。
【請求項９】
前記値を決定することは、前記値を決定し、前記値を格納するために、前記参照データ構造ポインタ・キャッシュ内に配置されていない前記値に基づいて、キャッシュ・ミス・ハンドリングを実施することをさらに含む、請求項６に記載のコンピュータ・プログラム製品。
【請求項１０】
前記方法は、
前記プロセッサによって、前記命令を取得することに基づいてハンドラへのトラップを発生させることと、
前記ハンドラによって、前記決定することおよび前記格納することを実施することと
をさらに含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項１１】
コンピューティング環境内の処理を促進するためのコンピュータ・システムであって、前記コンピュータ・システムは、
メモリと、
前記メモリと通信するプロセッサと
を備え、前記コンピュータ・システムは方法を実施するように構成され、前記方法は、
前記プロセッサによって参照データ構造へのポインタを与えるための実行する命令を取得することと、
前記命令を実行することであって、前記実行することは、
前記参照データ構造への前記ポインタについての値を決定することと、
前記命令によって指定された場所に前記値を格納することと
を含む、前記実行することと
を含む、コンピュータ・システム。
【請求項１２】
前記場所は、前記命令によって指定されるレジスタを含む、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記値を決定することは、
前記値を含むエントリについて参照データ構造ポインタ・キャッシュをチェックすることと、
前記エントリを見つけることに基づいて前記格納することを実施することと
を含む、請求項１１に記載のコンピュータ・システム。
【請求項１４】
前記値を決定することは、
前記プロセッサによって、前記参照データ構造ポインタ・キャッシュ内に位置していない前記値に基づいてハンドラへのトラップを発生させることと、
前記ハンドラによって、参照データ構造ポインタ値でポピュレートされたデータ構造から前記値を取得することと、
前記ハンドラによって前記格納することを実施することと
をさらに含む、請求項１３に記載のコンピュータ・システム。
【請求項１５】
前記方法は、
前記プロセッサによって、前記命令を取得することに基づいてハンドラへのトラップを発生させることと、
前記ハンドラによって、前記決定することおよび前記格納することを実施することと
をさらに含む、請求項１１に記載のコンピュータ・システム。
【請求項１６】
コンピューティング環境内の処理を促進するコンピュータ実装方法であって、前記コンピュータ実装方法は、
プロセッサによって参照データ構造へのポインタを与えるための実行する命令を取得することと、
前記命令を実行することであって、前記実行することは、
前記参照データ構造への前記ポインタについての値を決定することと、
前記命令によって指定された場所に前記値を格納することと
を含む、前記実行することと
を含む、コンピュータ実装方法。
【請求項１７】
前記場所は、前記命令によって指定されるレジスタを含む、請求項１６に記載のコンピュータ実装方法。
【請求項１８】
前記値を決定することは、
前記値を含むエントリについて参照データ構造ポインタ・キャッシュをチェックすることと、
前記エントリを見つけることに基づいて前記格納することを実施することと
を含む、請求項１６に記載のコンピュータ実装方法。
【請求項１９】
前記値を決定することは、
前記プロセッサによって、前記参照データ構造ポインタ・キャッシュ内に位置していない前記値に基づいてハンドラへのトラップを発生させることと、
前記ハンドラによって、参照データ構造ポインタ値でポピュレートされたデータ構造から前記値を取得することと、
前記ハンドラによって前記格納することを実施することと
をさらに含む、請求項１８に記載のコンピュータ実装方法。
【請求項２０】
前記プロセッサによって、前記命令を取得することに基づいてハンドラへのトラップを発生させることと、
前記ハンドラによって、前記決定することおよび前記格納することを実施することと
をさらに含む、請求項１６に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【０００１】
１つまたは複数の態様は、一般にコンピューティング環境内の処理に関し、詳細にはそのような処理を促進することに関する。
【背景技術】
【０００２】
多くのコンピューティング・システムは、ソース・コード内の変数をポピュレートするために、Ｇｌｏｂａｌ  Ｏｆｆｓｅｔ  Ｔａｂｌｅ（ＧＯＴ）（グローバル・オフセット・テーブル）またはＴａｂｌｅ  ｏｆ  Ｃｏｎｔｅｎｔｓ（ＴＯＣ）（目次）を使用する。例えば、コンパイラは、コード／データの最終的なアドレスまたはディスプレースメントを知ることなくソース・コードからオブジェクト・コードを生成する。特に、コンパイラは、データ構造の最終的なサイズまたは様々なデータ・セクションのオフセット／アドレスを知ることなく、変数値についての可変のアドレス参照データ構造（例えば、Ｇｌｏｂａｌ  Ｏｆｆｓｅｔ  ＴａｂｌｅまたはＴａｂｌｅ  ｏｆ  Ｃｏｎｔｅｎｔｓ）にアクセスするオブジェクト・コードを生成する。この情報についてのプレースホルダはオブジェクト・コード内に残され、リンカによって更新される。
【０００３】
ＧＯＴまたはＴＯＣにアクセスするためには、ポインタが使用される。ポインタは、典型的には命令のシーケンスによって計算される。これらの命令は、プロセッサ内でいつでもすぐに利用可能というわけではない計算されるレジスタにしばしば依存する。結果的に、ＴＯＣ（すなわち、ローカル変数以外の変数）に依存する変数へのアクセスが遅延することがある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
したがって、当技術分野において、前述の問題に対処する必要がある。
【課題を解決するための手段】
【０００５】
コンピューティング環境内の処理を促進するためのコンピュータ・プログラム製品の提供を通じて、先行技術の欠点は克服され、さらなる利点が提供される。コンピュータ・プログラム製品は、処理回路によって可読であり、方法を実施するための命令を記憶する、コンピュータ可読記憶媒体を含む。方法は、例えば、プロセッサによって参照データ構造へのポインタを与えるための命令を取得することを含む。命令は実行され、実行することは、参照データ構造へのポインタについての値を決定することと、命令によって指定された場所にその値を格納することとを含む。ポインタ値を提供するための命令の使用により、処理が促進され、計算されるレジスタ値の待機中に起こり得る遅延を限定することによってパフォーマンスを改善する。
【０００６】
一実施形態において、値を決定することは、値を決定するためにデータ構造のルックアップを実施することを含む。データ構造は、例として、参照データ構造ポインタ・キャッシュまたは参照データ構造ポインタ値でポピュレートされたテーブルを含む。さらには、一例において、場所は命令によって指定されるレジスタを含む。
【０００７】
別の実施形態において、値を決定することは、値を含むエントリについて参照データ構造ポインタ・キャッシュをチェックすることと、エントリを見つけることに基づいて格納することを実施することとを含む。さらには、参照データ構造キャッシュに配置されていない値に基づいて、プロセッサによりハンドラへのトラップが発生する。ハンドラは参照データ構造ポインタ値でポピュレートされたデータ構造から値を取得し、格納することを実施する。値は、また、一実施形態において、参照データ構造ポインタ・キャッシュに格納される。
【０００８】
さらなる実施形態において、値を決定し、値を格納するために、参照データ構造ポインタ・キャッシュ内に配置されていない値に基づいて、キャッシュ・ミス・ハンドリングが実施される。
【０００９】
なおさらなる実施形態において、命令を取得することに基づいて、プロセッサによりハンドラへのトラップが発生し、決定すること、および格納することが、ハンドラによって実施される。
【００１０】
１つまたは複数の態様に関連するコンピュータ実装方法およびシステムがやはり、本明細書において説明され、特許請求される。さらには、１つまたは複数の態様に関連するサービスがやはり説明され、本明細書において特許請求され得る。
【００１１】
追加的な特徴および利点は、本明細書において説明される技法を通じて実現される。他の実施形態および態様は、本明細書において詳細に説明され、特許請求される態様の一部とみなされる。
【００１２】
１つまたは複数の態様は、本明細書の結末部における請求項で例として特に示され明確に特許請求される。前述、ならびに１つまたは複数の態様の目的、特徴および利点は、添付の図面と併せて以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１３】
【図１】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例の図である。
【図２】本発明の１つまたは複数の態様による、図１のプロセッサのさらなる詳細の図である。
【図３】本発明の１つまたは複数の態様による、使用される命令実行パイプラインの一例のさらなる詳細の図である。
【図４】本発明の態様による、図１のプロセッサの一例のさらなる詳細の図である。
【図５】本発明の態様による、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ（ＳＴＲ）命令の一例の図である。
【図６】本発明の態様による、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令に関連付けられる処理の一例の図である。
【図７】本発明の態様による、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令に関連付けられる処理の別の例の図である。
【図８】本発明の態様による、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令に関連付けられる処理のさらに別の例の図である。
【図９】本発明の態様による、ＴＯＣレジスタ（本明細書ではＴＯＣポインタ・レジスタとも称される）の設定を検証する実施形態の図である。
【図１０】本発明の態様による、ＴＯＣレジスタ（本明細書ではＴＯＣポインタ・レジスタとも称される）の設定を検証する実施形態の図である。
【図１１】本発明の態様による、ＴＯＣレジスタの設定を検証する他の実施形態の図である。
【図１２】本発明の態様による、ＴＯＣレジスタの設定を検証する他の実施形態の図である。
【図１３】本発明の態様による、ＴＯＣポインタ値（本明細書ではＴＯＣ値とも称される）を決定する一実施形態の図である。
【図１４】本発明の態様による、サブルーチン分岐に応答してＴＯＣ値を予測することに関連付けられる処理の一例の図である。
【図１５】本発明の態様による、ＴＯＣ値チェック挿入ロジックの一例の図である。
【図１６】本発明の態様による、サブルーチン分岐に応答してＴＯＣ値を予測することに関連付けられる処理の別の例の図である。
【図１７】本発明の態様による、ＴＯＣ値チェック挿入ロジックの別の例の図である。
【図１８】本発明の態様による、ＴＯＣ値チェック挿入ロジックの別の例の図である。
【図１９】本発明の態様による、ＴＯＣポインタ・キャッシュ（本明細書ではＴＯＣキャッシュとも称される）の一例の図である。
【図２０】本発明の態様による、ＴＯＣキャッシュ挿入処理の一例の図である。
【図２１】本発明の態様による、動的に共有されるオブジェクトに割り当てられるＴＯＣ値の一例の図である。
【図２２】本発明の態様による、ＴＯＣキャッシュの別の例の図である。
【図２３】本発明の態様による、ＴＯＣキャッシュ挿入処理の別の例の図である。
【図２４】本発明の態様による、ＴＯＣ値をＴＯＣ追跡構造に格納する一例の図である。
【図２５】本発明の態様による、読み取り専用ＴＯＣレジスタによって参照されるＴＯＣの一例の図である。
【図２６】本発明の態様による、Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ命令の例の図である。
【図２７】本発明の態様による、Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ命令の例の図である。
【図２８】本発明の態様による、Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ命令の例の図である。
【図２９】本発明の態様による、Ｌｏａｄ  Ａｄｄｒｅｓｓ  ＴＯＣ−相対Ｌｏｎｇ命令の一例の図である。
【図３０】本発明の態様による、ＴＯＣ  ａｄｄ  ｉｍｍｅｄｉａｔｅ  ｓｈｉｆｔ命令の一例の図である。
【図３１】本発明の態様による、ａｄｄ  ＴＯＣ  ｉｍｍｅｄｉａｔｅ  ｓｈｉｆｔｅｄ命令の一例の図である。
【図３２】本発明の態様による、ＴＯＣオペランドを含み得る命令を処理する一実施形態の図である。
【図３３】本発明の態様による、命令用のＴＯＣオペランドを取得する実施形態の図である。
【図３４】本発明の態様による、命令用のＴＯＣオペランドを取得する実施形態の図である。
【図３５】本発明の態様による、命令用のＴＯＣオペランドを取得する実施形態の図である。
【図３６】本発明の態様による、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令を使用することに関連するコンパイル・フローの一例の図である。
【図３７】本発明の態様による、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令を使用することに関連する静的リンカ・フローの一例の図である。
【図３８】本発明の態様による、ＴＯＣ読み取り専用レジスタを使用することに関連するコンパイル・フローの一例の図である。
【図３９】本発明の態様による、コンピューティング環境内の処理を促進する一実施形態の図である。
【図４０】本発明の態様による、コンピューティング環境内の処理を促進する一実施形態の図である。
【図４１】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例の図である。
【図４２】図４１のメモリのさらなる詳細の図である。
【図４３】クラウド・コンピューティング環境の一実施形態の図である。
【図４４】抽象モデル・レイヤの一例の図である。
【発明を実施するための形態】
【００１４】
本発明の態様によると、Ｔａｂｌｅ  ｏｆ  Ｃｏｎｔｅｎｔｓ（ＴＯＣ）またはＧｌｏｂａｌ  Ｏｆｆｓｅｔ  Ｔａｂｌｅ（ＧＯＴ）などの参照データ構造へポインタを提供することが促進される。一例において、レジスタ（または他の定義された場所）にＴＯＣ（例えば、ポインタ値）へアクセスするために使用される値をロードする、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ（ＳＴＲ）命令が提供される。本明細書ではＴＯＣが例として参照されるが、本明細書で説明される態様、特徴および技法は、ＧＯＴまたは他の類似のタイプの構造に同じように適用可能である。
【００１５】
ＴＯＣポインタ値、ＴＯＣポインタ、ＴＯＣ値およびＴＯＣへのポインタは、例として、本明細書では互換的に使用される。ＴＯＣレジスタはＴＯＣポインタを保持するため、本明細書ではＴＯＣポインタ・レジスタまたはＴＯＣレジスタと称されることがある。
【００１６】
さらには、ＴＯＣポインタ・キャッシュ、ＴＯＣポインタ追跡構造、ＴＯＣポインタ・テーブルなどは、本明細書ではそれぞれＴＯＣキャッシュ、ＴＯＣ追跡構造、ＴＯＣテーブルなどとも称される。同様に、参照データ構造ポインタ・キャッシュおよび参照データ構造キャッシュは、本明細書では互換的に使用される。他の例があってもよい。
【００１７】
さらなる態様において、ＴＯＣレジスタをセットするために典型的に使用される命令のシーケンスは、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令によって置換される。例として、命令のシーケンスは１つまたは複数の命令を含む。さらには、ＴＯＣレジスタ値を検証するために検証演算が使用されてもよい。例えば、ＴＯＣレジスタは、アーキテクチャによって定義されるか、またはアプリケーション・バイナリ・インターフェース（ＡＢＩ：Ａｐｐｌｉｃａｔｉｏｎ  Ｂｉｎａｒｙ  Ｉｎｔｅｒｆａｃｅ）によって指定される汎用レジスタ（例えば、ｒ２、ｒ１２）などのハードウェア・レジスタ、またはアーキテクトされたレジスタであってもよい。他の例が可能である。
【００１８】
なおさらなる態様において、サブルーチンへ分岐することに応答してＴＯＣポインタ値が予測される。
【００１９】
よりさらなる態様において、ＴＯＣキャッシュの実施形態が処理を促進するために提供される。ＴＯＣキャッシュ（または他の参照データ構造キャッシュ）は、例えば、最近使用されたプログラム内の異なる場所／モジュールについて予測される様々なＴＯＣポインタ値を含む高速インプロセッサ・キャッシュである。
【００２０】
なおさらには、ＴＯＣポインタ値の予測のためのＴＯＣ追跡構造を準備および初期化するための態様が提供される。ＴＯＣ追跡構造は、例えばＴＯＣキャッシュ、または、プログラム内の異なる場所／モジュールについて予測されるＴＯＣポインタ値でポピュレートされたインメモリ・テーブルであってもよい。
【００２１】
さらなる態様において、疑似レジスタ（本明細書では読み取り専用ＴＯＣレジスタとも称される）は、ＴＯＣレジスタ・アドレッシング・モードでポインタ値を提供するために使用される。疑似レジスタはハードウェアまたはアーキテクトされたレジスタではなく、またそれに関連付けられる記憶装置を有しておらず、その代わりに、例えば、ＴＯＣキャッシュ（例えば、ＳＴＲによって生成されるであろう値）から取得されたＴＯＣポインタ値である。
【００２２】
また、さらなる態様において、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令で、または読み取り専用ＴＯＣレジスタを使用するために、あるいはその両方で、コードが生成されるか、またはコンパイルされるかあるいはその両方である。
【００２３】
様々な態様が本明細書で説明される。さらには、本発明の態様の思想から逸脱することなく、多くの変形形態が可能である。一貫性が失われない限り、本明細書で説明されるそれぞれの態様または特徴およびその変形形態は、あらゆる他の態様または特徴と組合せ可能であり得ることに留意すべきである。
【００２４】
本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態が図１を参照して説明される。一例において、コンピューティング環境は、インターナショナル・ビジネス・マシーンズ・コーポレーション（ニューヨーク州アーモンク）によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づいている。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の一実施形態は、その全体が参照により本明細書に組み込まれる「z/Architecture Principles of Operation」ＩＢＭ  Ｐｕｂｌｉｃａｔｉｏｎ、Ｎｏ．ＳＡ２２−７８３２−１０、２０１５年３月に記載されている。Ｚ／ＡＲＣＨＩＴＥＣＴＵＲＥ（Ｒ）は、インターナショナル・ビジネス・マシーンズ・コーポレーション（アメリカ合衆国ニューヨーク州アーモンク）の登録商標である。
【００２５】
別の一例において、コンピューティング環境は、インターナショナル・ビジネス・マシーンズ・コーポレーション（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づいている。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の一実施形態は、その全体が参照により本明細書に組み込まれる「Power ISA（商標）Version 2.07B」インターナショナル・ビジネス・マシーンズ・コーポレーション、２０１５年４月９日に記載されている。ＰＯＷＥＲ  ＡＲＣＨＩＴＥＣＴＵＲＥ（Ｒ）は、インターナショナル・ビジネス・マシーンズ・コーポレーション（アメリカ合衆国ニューヨーク州アーモンク）の登録商標である。
【００２６】
コンピューティング環境はまた、Ｉｎｔｅｌ（Ｒ）のｘ８６アーキテクチャを含むがそれに限定されない、他のアーキテクチャに基づくことができる。他の例もまた存在する。
【００２７】
図１に示すように、例えばコンピューティング環境１００は、例えば汎用コンピューティング・デバイスの形態で示されるコンピュータ・システム１０２を含む。コンピュータ・システム１０２は、１つまたは複数のプロセッサまたは処理ユニット１０４（例えば、中央処理装置（ＣＰＵ））、メモリ１０６（例としてメイン・メモリまたは記憶装置と称される）、および１つまたは複数の入力／出力（Ｉ／Ｏ）インターフェース１０８を含むことができ、１つもしくは複数のバスまたは他の接続１１０あるいはその組合せを介して互いに結合されるが、それに限定されない。
【００２８】
バス１１０は、バス構造のいくつかのタイプのうちの任意の１つまたは複数を表しており、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、およびプロセッサまたは様々なバス・アーキテクチャの任意のものを使用するローカル・バスを含む。限定ではなく例として、そのようなアーキテクチャはインダストリ・スタンダード・アーキテクチャ（ＩＳＡ）、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）、エンハンストＩＳＡ（ＥＩＳＡ）、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカル・バス、およびＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）を含む。
【００２９】
メモリ１０６は、プロセッサ１０４のローカル・キャッシュ１２２に結合することができる、例えば共有キャッシュなどのキャッシュ１２０を含むことができる。さらには、メモリ１０６は、１つまたは複数のプログラムまたはアプリケーション１３０、オペレーティング・システム１３２、および１つまたは複数のコンピュータ可読プログラム命令１３４を含むことができる。コンピュータ可読プログラム命令１３４は、本発明の態様の実施形態の機能を実行するように構成することができる。
【００３０】
コンピュータ・システム１０２はまた、例えばＩ／Ｏインターフェース１０８を介して１つもしくは複数の外部デバイス１４０、１つもしくは複数のネットワーク・インターフェース１４２、または１つもしくは複数のデータ記憶デバイス１４４あるいはその組合せと通信することができる。外部デバイスの例としては、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディスプレイなどが挙げられる。ネットワーク・インターフェース１４２により、コンピュータ・システム１０２は、ローカル・エリア・ネットワーク（ＬＡＮ）、一般的なワイド・エリア・ネットワーク（ＷＡＮ）、またはパブリック・ネットワーク（例えば、インターネット）あるいはその組合せなどの、１つまたは複数のネットワークと通信することができ、他のコンピューティング・デバイスまたはシステムとの通信を提供している。
【００３１】
データ記憶デバイス１４４は、１つまたは複数のプログラム１４６、１つまたは複数のコンピュータ可読プログラム命令１４８またはデータあるいはその組合せなどを記憶することができる。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成することができる。
【００３２】
コンピュータ・システム１０２は、リムーバブル／非リムーバブルの、揮発性／非揮発性のコンピュータ・システム記憶媒体を含むことができるか、またはそれらに結合することができるか、あるいはその両方である。例えば、非リムーバブルの、非揮発性の磁気媒体（典型的には「ハードドライブ」と呼ばれる）、リムーバブル、非揮発性の磁気ディスク（例えば、「フロッピー（Ｒ）・ディスク」）からの読み取りおよびそれへの書き込みのための磁気ディスク・ドライブ、またはＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭもしくは他の光学媒体などのリムーバブル、非揮発性の光学ディスクからの読み取りおよびそれへの書き込みのための光学ディスク・ドライブ、あるいはその組合せを含むことができるか、またはそれに結合することができるか、あるいはその組合せである。他のハードウェアまたはソフトウェアあるいはその両方のコンポーネントが、コンピュータ・システム１０２と併せて使用することができることが理解されるべきである。例として、マイクロコード、デバイス・ドライバ、冗長化処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ記憶装置システムなどが挙げられるが、それに限定されない。
【００３３】
コンピュータ・システム１０２は、多くの他の汎用または特殊目的の、コンピューティング・システム環境または構成で動作可能であり得る。コンピュータ・システム１０２の使用に適切であり得る良く知られているコンピューティング・システム、環境、または構成あるいはそれらの組合せの例は、パーソナル・コンピュータ（ＰＣ）システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップのデバイス、マルチ・プロセッサ・システム、マイクロ・プロセッサベースのシステム、セット・トップ・ボックス、プログラム可能家庭用電子機器、ネットワークＰＣ、ミニ・コンピュータ・システム、メインフレーム・コンピュータ・システム、および上記システムまたはデバイスなどの任意のものを含む分散クラウド・コンピューティング環境などを含むがそれに限定しない。
【００３４】
プロセッサ１０４の一例に関連するさらなる詳細が図２を参照して説明される。プロセッサ１０４は命令を実行するために使用される複数の機能的なコンポーネントを含む。これらの機能的なコンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント１５０、フェッチされた命令をデコードしてデコードされた命令のオペランドを取得するための命令デコード・ユニット１５２、デコードされた命令を実行するための命令実行コンポーネント１５４、必要であれば命令実行のためにメモリにアクセスするためのメモリ・アクセス・コンポーネント１５６、実行された命令の結果を与えるためのライト・バック・コンポーネント１６０を含む。これらのコンポーネントの１つまたは複数は、本発明の態様によると、Ｔａｂｌｅ  ｏｆ  Ｃｏｎｔｅｎｔｓ（ＴＯＣ）ポインタ処理１６６に関連付けられる１つまたは複数の命令または演算あるいはその両方を実行するために使用することができる。
【００３５】
プロセッサ１０４はまた、一実施形態において、機能的なコンポーネントの１つまたは複数によって使用される１つまたは複数のレジスタ１６８を含む。プロセッサ１０４は、本明細書で与えられる例と比べて、追加的な、より少ない、または他の、あるいはその組合せのコンポーネントを含むことができる。
【００３６】
プロセッサ１０４の実行パイプラインに関連するさらなる詳細が図３を参照して説明される。本明細書においてパイプラインの様々な処理工程が描かれ説明されるが、本発明の態様の思想から逸脱することなく、追加的な、より少ない、または他の、あるいはその組合せの工程が使用され得ることを理解されたい。
【００３７】
図３を参照すると、一実施形態において、命令キューから命令がフェッチされ１７０、その命令の分岐予測１７２またはデコード１７４あるいはその両方を実施することができる。デコードされた命令は、ともに処理されるように命令のグループに追加することができる１７６。グループ化された命令は、あらゆる依存関係を決定し、リソースを割り当て、適当な発行キューに命令／演算のグループをディスパッチする、マッパ１７８に与えられる。例として、分岐、ロード／ストア、浮動小数点、固定小数点、ベクトルなどを含む、様々なタイプの実行ユニットについての１つまたは複数の発行キューが存在する。発行工程１８０の間、命令／演算は適当な実行ユニットに発行される。あらゆるレジスタが読み取られ１８２、そのソースを検索し、実行工程１８４の間、命令／演算が実行する。示されるように、実行は例として、分岐、ロード（ＬＤ）もしくはストア（ＳＴ）、固定小数点演算（ＦＸ）、浮動小数点演算（ＦＰ）またはベクトル演算（ＶＸ）についてであることができる。あらゆる結果が、ライト・バック工程１８６の間、適当なレジスタに書き込まれる。その後、命令は完了する１８８。割り込みまたはフラッシュ１９０があると、処理は命令フェッチ１７０に戻ることができる。
【００３８】
さらには、一例において、デコード・ユニットに結合しているのは、レジスタ・リネーム・ユニット１９２であり、レジスタの保存／復元に使用することができる。
【００３９】
プロセッサに関連するさらなる詳細が図４を参照して説明される。一例において、プロセッサ１０４などのプロセッサは、例として、予測ハードウェア、レジスタ、キャッシュ、デコーダ、命令シーケンス・ユニット、および命令実行ユニットを含むことができるパイプライン化されたプロセッサである。予測ハードウェアは、例えば、ローカル分岐履歴テーブル（ＢＨＴ）１０５ａ、グローバル分岐履歴テーブル（ＢＨＴ）１０５ｂ、およびグローバル・セレクタ１０５ｃを含む。予測ハードウェアは、次の命令フェッチのためのアドレスを有する命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）１０７を介してアクセスされる。
【００４０】
同一のアドレスが、「フェッチ・グループ」と称される複数の命令をフェッチすることができる命令キャッシュ１０９にも与えられる。命令キャッシュ１０９に関連付けられるのは、ディレクトリ１１１である。
【００４１】
キャッシュおよび予測ハードウェアは、ほぼ同時に同一のアドレスでアクセスされる。予測ハードウェアがフェッチ・グループ内の命令について利用可能な予測情報を有している場合、その予測は、命令シーケンス・ユニット（ＩＳＵ）１１３に転送され、次いで実行のために実行ユニットに命令を発行する。予測は、分岐ターゲット算出１１５および分岐ターゲット予測ハードウェア（リンク・レジスタ予測スタック１１７ａおよびカウント・レジスタ・スタック１１７ｂなど）と併せてＩＦＡＲ１０７を更新するために使用することができる。どの予測情報も利用可能ではないが、１つまたは複数の命令デコーダ１１９がフェッチ・グループ内に分岐命令を発見する場合、そのフェッチ・グループについて予測が作成される。予測された分岐は分岐情報キュー（ＢＩＱ）１２５などの予測ハードウェアに記憶され、ＩＳＵ１１３に転送される
【００４２】
分岐実行ユニット（ＢＲＵ）１２１は、ＩＳＵ１１３によってそれに対して発行された命令に応答して動作する。ＢＲＵ１２１はコンディション・レジスタ（ＣＲ）ファイル１２３に対して、読み取りアクセスを有している。分岐実行ユニット１２１は、分岐予測の成功を判断するために、分岐情報キュー１２５内の分岐スキャン・ロジックによって記憶される情報にアクセスをさらに有しており、マイクロプロセッサによってサポートされる１つまたは複数のスレッドに対応する命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）１０７に動作可能に結合されている。少なくとも１つの実施形態によると、ＢＩＱエントリは、識別子、例えば分岐タグ、ＢＴＡＧに関連付けられ、かつそれによって識別される。ＢＩＱエントリに関連付けられる分岐が完了すると、そのようにマークされる。ＢＩＱエントリはキューの中で維持され、最も古いキューのエントリは、完了された分岐に関連付けられる情報を含むとしてマークされると順次解放される。ＢＲＵ１２１は、ＢＲＵ１２１が分岐の誤予測を見つけると、予測器を更新させるようさらに動作可能に結合される。
【００４３】
命令を実行する際、予測が間違っていればＢＲＵ１２１が検出する。その場合、予測は更新される。この目的のため、プロセッサはまた予測器更新ロジック１２７を含む。予測器更新ロジック１２７は分岐実行ユニット１２１からの更新指標に応答的であり、ローカルＢＨＴ１０５ａ、グローバルＢＨＴ１０５ｂ、およびグローバル・セレクタ１０５ｃの１つまたは複数の中のアレイ・エントリを更新するように構成される。予測器ハードウェア１０５ａ、１０５ｂ、および１０５ｃは、命令フェッチおよび予測動作によって使用される読み取りポートとは別個の書き込みポートを有してもよく、または単一の読み取り／書き込みポートが共有されてもよい。予測器更新ロジック１２７は、リンク・スタック１１７ａ、およびカウント・レジスタ・スタック１１７ｂにさらに動作可能に結合することができる。
【００４４】
次に、コンディション・レジスタ・ファイル（ＣＲＦ）１２３を参照すると、ＣＲＦ１２３はＢＲＵ１２１から読み取りアクセス可能であり、実行ユニットによって書き込むことができ、限定はしないが、固定小数点ユニット（ＦＸＵ）１４１、浮動小数点ユニット（ＦＰＵ）１４３、およびベクトル・マルチメディア拡張ユニット（ＶＭＸＵ：Ｖｅｃｔｏｒ  Ｍｕｌｔｉｍｅｄｉａ  Ｅｘｔｅｎｓｉｏｎ  Ｕｎｉｔ）１４５を含む。コンディション・レジスタ・ロジック実行ユニット（ＣＲＬ実行）１４７（ＣＲＵとも称される）、および特殊目的レジスタ（ＳＰＲ）ハンドリング・ロジック１４９は、コンディション・レジスタ・ファイル（ＣＲＦ）１２３に対して読み取りおよび書き込みアクセスを有している。ＣＲＵ１４７は、ＣＲＦファイル１２３に記憶されたコンディション・レジスタに対して論理演算を実施する。ＦＸＵ１４１は、ＣＲＦ１２３に書き込み更新を実施することができる。
【００４５】
プロセッサ１０４は、ロード／ストア・ユニット１５１、および様々なマルチプレクサ１５３、およびバッファ１５５、ならびにアドレス変換テーブル１５７および他の回路をさらに含む。
【００４６】
プロセッサ１０４は、変数を含むプログラム（アプリケーションとも称される）を実行する。変数は識別子（例えば、名称）を有しており、値（例えば、情報、データ）を含んでいる記憶場所を参照する。ランタイムの間、プログラムはＴＯＣを使用することにより、コンパイル時には未知であった変数のアドレスを決定する。
【００４７】
サブルーチンがコールされると、サブルーチンは自分自身のＴＯＣを確立するが、これはそれをコールした関数とは異なるモジュールにそれがある場合、それは自分自身のデータ・ディクショナリ（すなわち、ＴＯＣ）を有することになり、そのディクショナリへのポインタが確立されるからである。そのようなポインタを確立することは、高くつく。
【００４８】
ＴＯＣポインタを確立するために使用されるコードの一例を、例えば、Ｏｐｅｎ  ＰＯＷＥＲ  ＥＬＦｖ２  ＡＢＩなどの例ＡＢＩを参照して以下に示す。
【００４９】
そのような一実施形態によると、コーラは１つまたは複数のレジスタをコールされた関数のアドレスで、例えばＡＢＩにしたがって、初期化する。
【００５０】
以下の例において、２つのレジスタｒ１２、およびｃｔｒはコールされた関数のアドレスで初期化される。
・・・
ｌｄ          ｒ１２，＜・・・＞    ／／ｒ１２をロードする
ｍｔｃｔｒ    ｒ１２                ／／ｒ１２の値をＣＴＲに移動
ｂｃｔｒｌ                          ／／ＣＴＲに分岐する
ｎｏｐ
・・・
【００５１】
確立されたＡＢＩにしたがって、コールされた関数はＴＯＣポインタを初期化する。様々な実装形態が存在する。一実施形態において、レジスタ間接コールを介してアドレス関数がコールされると、コーラによって初期化された１つまたは複数のレジスタからのエントリ・アドレスが使用される。例えば、Ｏｐｅｎ  ＰＯＷＥＲ  ＥＬＦｖ２  ＡＢＩなどの例のＡＢＩによると、ＴＯＣポインタ・レジスタ、ｒ２は、「ｆｏｏ」という関数によるコーラによってｒ１２にロードされる、コールされた関数のエントリ・アドレスを使用して次のように初期化することができる。
＿ｆｏｏ：
／／＿ｆｏｏがローカル・モジュールからコールされる場合、次の２つの命令はスキップする
．ｌｏｃａｌｅｎｔｒｙ  ＿ｆｏｏ，２
／／＿ｆｏｏからＴＯＣポインタ値．ＴＯＣ．までの距離を加算する
ａｄｄｉｓ  ｒ２，ｒ１２，＃ｈｉｇｈａ（＿ｆｏｏ  −  ．ＴＯＣ．）
／／ｒ１２にオフセットの高位ビットを加算する
／／ｒ２に結果を格納
／／ｒ２はＴＯＣレジスタである
ａｄｄｉ  ｒ２，ｒ２，＃ｌｏｗ（＿ｆｏｏ  −  ．ＴＯＣ．）
／／ｒ２にオフセットの下位ビットを加算する
／／ｒ２に結果を格納
／／ローカル・エントリ・ポイントは、従来的な関数のプロローグの開始に一致する
・・・
【００５２】
本発明の態様によると、例えば、多くのマイクロプロセッサの実装形態において不経済である、上記のコードを使用してＴＯＣポインタを決定する代わりに、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ（ＳＴＲ）命令が使用される。Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令はレジスタ（または他の定義された場所）に、例えばプロセッサ内でルックアップを実施することにより、ＴＯＣへのポインタの値をロードする。ＴＯＣがモジュールの関数のすべて（またはあるセット）によって共有されるため、少数のＴＯＣレジスタ値だけが記憶され、アドレスの範囲に関連付けられる。例として、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令をアーキテクトされたハードウェア命令または内部演算として実装することができる。
【００５３】
Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ（ＳＴＲ）命令の一例が、図５を参照して説明される。一例において、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令２００は、ｓｅｔＴＯＣレジスタ演算を示す演算コードを含む演算コード（オペコード）フィールド２０２、およびＴＯＣポインタの値を受信するためのレジスタなどの場所を指定するターゲット・レジスタ（ＲＴ）フィールド２０４を含む。
【００５４】
この例では１つのオペコード・フィールドが示されているが、他の実施形態では複数のオペコード・フィールドがあってもよい。他の変形形態もまた可能である。
【００５５】
示したように、一例において、ターゲット・レジスタ・フィールド２０４は、ＴＯＣポインタ値がロードされるレジスタを識別する。ＳＴＲ命令は、現在のコード・シーケンスについてのＴＯＣポインタの値を、フィールド２０４によって指定されるレジスタにロードするが、この時コード・シーケンスはＳＴＲ命令のアドレスに続くコードに対応している。
【００５６】
例えば、ソフトウェア実装形態、ハードウェア支援の実装形態、およびハードウェア実装形態を含む、ＳＴＲ命令に関連付けられる処理の様々な可能な実装形態が存在する。ソフトウェア実装形態において、ＳＴＲ命令を実行することに基づいて、例外が発生し、ＴＯＣレジスタの設定がスーパバイザのコード（例えば、オペレーティング・システムまたはハイパーバイザ）によって、またはユーザモードの割り込みハンドラ（例えば、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の定義によるイベントベースの分岐機構を使用して）によってエミュレートされる。ハードウェア支援の実装形態において、ハードウェアはキャッシュ（例えば、最も頻繁に使用される値を格納するための小さいテーブル、または他のデータ構造）、または頻出の値およびソフトウェアへのトラップのための予測器を提供する。次いで、スーパバイザのコードまたはユーザモードの割り込みハンドラは、上述のように命令を処理する。ハードウェア実装形態において、ハードウェアは頻出の値について、キャッシュまたは予測器を提供し、キャッシュ内のミスに基づいてテーブル（またはソフトウェア内でＴＯＣポインタ値でポピュレートされている他のデータ構造）をルックアップする。実装形態の選択に関するさらなる詳細を、図６〜図８を参照して説明する。
【００５７】
ソフトウェア、例えば、スーパバイザのコードまたはユーザモードの割り込みハンドラを使用する一実装形態を、図６を参照して説明する。図６を参照すると、一例において、ＳＴＲ命令がプロセッサによって受信され、ＳＴＥＰ３００、スーパバイザ（例えば、オペレーティング・システム（ＯＳ）またはハイパーバイザ（ＨＶ））またはユーザモードの割り込みコードなどのハンドラ・ルーチンへのトラップが発生する、ＳＴＥＰ３１０。ハンドラ・ルーチンに入り、ＳＴＥＰ３２０、ハンドラは、例えば、キャッシュまたはテーブル内で、ＳＴＲ命令のアドレスに対応する関数についてのＴＯＣポインタ値をルックアップする、ＳＴＥＰ３３０。取得されたＴＯＣ値がＳＴＲ命令のターゲット・レジスタにロードされる、ＳＴＥＰ３４０。その後、処理はＳＴＲ命令の後のコードに戻り、取得されたＴＯＣ値で実行を続ける、ＳＴＥＰ３５０。
【００５８】
ハードウェア支援の実装形態が説明されている別の実装形態を、図７を参照して説明する。図７を参照すると、ＳＴＲ命令がプロセッサによって受信され、ＳＴＥＰ４００、ＴＯＣキャッシュ・ルックアップが実施され、ＳＴＲ命令を含む関数についてのＴＯＣ値を配置する、ＳＴＥＰ４０２。その関数についてのＴＯＣキャッシュ・エントリが見つかったかどうかについての判断がなされる、ＩＮＱＵＩＲＹ４０４。ＴＯＣキャッシュ・エントリが見つかると、次いでＳＴＲターゲット・レジスタにＴＯＣキャッシュ・ルックアップからの結果がロードされる、ＳＴＥＰ４０６。そうでなければ、上述のようなハンドラ・ルーチンへのトラップが発生する、ＳＴＥＰ４０８。例えば、ハンドラ・ルーチンに入り、ＳＴＥＰ４１０、例えばテーブル内で、ＳＴＲ命令のアドレスに対応する関数のＴＯＣ値についてルックアップが実施される、ＳＴＥＰ４１２。ＴＯＣキャッシュにＴＯＣ値がロードされ、ＳＴＥＰ４１４、ＳＴＲ命令のターゲット・レジスタに取得されたＴＯＣ値がロードされる、ＳＴＥＰ４１６。次に、処理はＳＴＲ命令の後の命令に戻り、取得されたＴＯＣ値で実行を続ける、ＳＴＥＰ４１８。
【００５９】
ハードウェアが処理を実施するさらなる実装形態を、図８を参照して説明する。図８を参照すると、ＳＴＲ命令が受信され、ＳＴＥＰ５００、ＴＯＣキャッシュ・ルックアップが実施され、ＳＴＲ命令を含む関数についてのＴＯＣ値を配置する、ＳＴＥＰ５０２。その関数についてのＴＯＣキャッシュ・エントリが見つかるかどうかについての判断がなされる、ＩＮＱＵＩＲＹ５０４。ＴＯＣキャッシュ・エントリが見つかると、次いでＳＴＲターゲット・レジスタにＴＯＣキャッシュ・ルックアップからの結果がロードされる、ＳＴＥＰ５０６。しかしながら、ＴＯＣキャッシュ・エントリが見つからなかった場合、ＴＯＣキャッシュ・ミス・ハンドリング・ロジックが実施される、ＳＴＥＰ５１０。これは、例えば、ルックアップ・テーブルの開始を決定することとＳＴＥＰ５１２、１つもしくは複数のテーブルまたは他のデータ構造において、ＳＴＲのアドレスに対応する関数についてのＴＯＣ値をルックアップすることを含む、ＳＴＥＰ５１４。ＴＯＣキャッシュに見つかったＴＯＣ値（例えば、アドレス）がロードされ、ＳＴＥＰ５１６、ＳＴＲのターゲット・レジスタに取得されたＴＯＣ値がロードされる、ＳＴＥＰ５１８。
【００６０】
上の例の１つまたは複数において、ＴＯＣキャッシュはいくつものやり方で実装することができる。例えば、隣接する関数は典型的には、例えばテーブルで３つの値（範囲開始（ｆｒｏｍ＿ｒａｎｇｅ）値、範囲終了（ｔｏ＿ｒａｎｇｅ）値、戻り値）を格納するＴＯＣを共有するため、それぞれのＳＴＲ命令のアドレスについて戻るための値に関連する一対（ＳＴＲアドレス、戻り値）を含むことができ、または指定された値を返すためのＳＴＲ命令のアドレスの範囲を含むことができる。ＴＯＣキャッシュに関するさらなる詳細を以下で説明する。
【００６１】
上述の実施形態では、ＳＴＲはＴＯＣ値をロードするために使用されるが、ＳＴＲはまたマジック・ナンバ（例えば、Ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  Ｌｉｎｋａｂｌｅ  Ｆｏｒｍａｔ（ＥＬＦ）における、例えば識別子）などの他の値、または、例えばコードの領域、指定のモジュール、もしくはＳＴＲ命令の特定の命令アドレスに関連付けられ得る他の値をロードするために使用することができる。多くの可能性が存在する。
【００６２】
さらなる態様において、ＴＯＣレジスタの値をセットする命令シーケンスを探してコードがスキャンされ、それらの命令シーケンスはＳｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令で置換される。なおさらなる態様において、ＴＯＣレジスタの値の予測を検証するために検証命令が与えられる。例として、命令シーケンスは１つまたは複数の命令を含む。
【００６３】
従来のコード生成技法によると、ＴＯＣ値はしばしば命令のシーケンスを使用して計算されるか、またはスタックからロードされる。
【００６４】
例えば、ＴＯＣ値は以下のようなシーケンスを使用して計算することができる。
ａｄｄｉｓ  ｒ２，ｒ１２，ｏｆｆｓｅｔ＠ｈ
／／即値シフトを加算；ｒ１２は
／／関数の開始である；ｒ２は
／／ＴＯＣ値を保持するためのレジスタ
／／である；オフセットの上位ビットは
／／関数の開始に加算され
／／その結果は
／／ｒ２に格納される
ａｄｄｉ  ｒ２，ｒ２，ｏｆｆｓｅｔ＠ｌ
／／即値を加算；オフセットの
／／下位ビットをｒ２の中の値に
／／加算；結果をｒ２に格納
【００６５】
別の例において、ＴＯＣ値はメモリ（例えば、スタック）からロードされる（ｌｄ）。
ｌｄ  ｒ２，ｓｐ，＜ｓｔａｃｋｏｆｆｓｅｔ  ｆｏｒ  ＴＯＣ＞
／／ｓｐは、スタック・ポインタ
【００６６】
これらのシーケンスは、それらが完了できるよりも前に、一般的にインターロック（例えば、ＴＯＣ値をストアすることを対象とした以前のストア命令が完了するのを待機する必要がある）を伴う。このタイプのインターロックは一般的にパフォーマンスの低下につながる。したがって、本発明の態様によると、プロセッサ命令デコード・ユニットはＴＯＣセット命令またはＴＯＣセット命令シーケンスあるいはその両方を認識し、それらをＳＴＲ命令で置換する。任意選択で、検証命令も与えられる。本明細書において使用する場合、ＴＯＣセット命令またはＴＯＣセット命令シーケンスあるいはその両方は、ＴＯＣレジスタをセットするためか、またはＴＯＣポインタ値を計算するために使用される１つまたは複数の命令を含む。
【００６７】
例えば、一実施形態において、以下の命令シーケンスがプロセッサ（例えば、プロセッサの命令デコード・ユニット）によって認識される。
ａｄｄｉｓ  ｒ２，ｒ１２，ｏｆｆｓｅｔ＠ｈ
ａｄｄｉ    ｒ２，ｒ２，ｏｆｆｓｅｔ＠ｌ
またシーケンスは（予測された）ＴＯＣ値をロードして、それをレジスタｒ１２と元々のコードにおいてｒ２を計算するために使用されたオフセットとの合計と比較することによって予測を検証するために以下の演算で置換される。
ＳＴＲ  ｒ２
ｖｅｒｉｆｙ  ｒ２，ｒ１２，ｏｆｆｓｅｔ
【００６８】
さらなる例において
ｌｄ  ｒ２，ｓｐ，＜ｓｔａｃｋｏｆｆｓｅｔ  ｆｏｒ  ＴＯＣ＞
は次で置換される
ＳＴＲ  ｒ２
ｌｏａｄ−ｖｅｒｉｆｙ  ｒ２，ｓｐ，＜ｓｔａｃｋｏｆｆｓｅｔ＞
【００６９】
ＳＴＲ命令の例を上で説明したが、検証演算を使用することに関するさらなる詳細を以下で説明する。例えば、ＳＴＲ検証内部演算（ｉｏｐ）、例えばｒｘ、ｒｙ、オフセットの検証を使用することに関連付けられるさらなる詳細を、図９を参照して説明する。
【００７０】
図９を参照して、例えばプロセッサによって実施される検証技法を説明する。初めに、検証内部演算（例えば、２つの例のレジスタ・オペランドおよび即値オペランドを伴う内部演算検証ｒｘ、ｒｙ、オフセット−本明細書上部の例のコードにおける、例の検証ｒ２、ｒ１２、オフセットなど）が受信される、ＳＴＥＰ６００。変数ａが、検証演算のオフセットを検証内部演算（例えば、ｒ１２）のベース・レジスタｒｙの値に加算することにより計算される、ＳＴＥＰ６０２。ターゲット・レジスタの中の値、検証内部演算（例えば、ｒ２）のｒｘが計算された値ａに等しいかどうかについての判断がなされる、ＩＮＱＵＩＲＹ６０４。ｒｘの値が計算された値ａに等しい場合、検証は完了し、ＳＴＥＰ６０６、成功である。
【００７１】
しかしながら、ｒｘの値がａに等しくない場合、ａはターゲット・レジスタｒｘに割り当てられ、ＳＴＥＰ６０８、リカバリが開始される、ＳＴＥＰ６１０。リカバリには、例えば、現在の命令の後に命令パイプラインからｒｘの誤った使用をフラッシュすること、または現在の命令の後にパイプライン内のすべての命令をフラッシュすることが含まれる。他の変形形態もまた可能である。
【００７２】
図１０に示されるように、さらなる実施形態において、計算された値（例えば、ＴＯＣポインタ・アドレスまたはアドレスとしても既知である、ＴＯＣポインタ）がＴＯＣキャッシュにロードされる、ＳＴＥＰ６２０。
【００７３】
例えばプロセッサによって実施される検証技法の他の例を、図１１〜図１２を参照して説明する。図１１を参照すると、一例においてロード−検証内部演算が受信される、ＳＴＥＰ７００。ある変数についての値が計算される。例えば、メモリ・アドレスｒｙでの（すなわち、スタック・ポインタでの）値にオフセットを加えたものが変数ａに割り当てられる、ＳＴＥＰ７０２。ベース・レジスタｒｘ（例えば、ｒ２）の値がａに等しいかどうかについての判断がなされる、ＩＮＱＵＩＲＹ７０４。ｒｘの値が計算された値ａに等しい場合、検証は完了され成功である、ＳＴＥＰ７０６。しかしながら、計算された値ａがｒｘの値に等しくない場合、ａはｒｘに割り当てられる、ＳＴＥＰ７０８。さらには、リカバリが開始される、ＳＴＥＰ７１０。リカバリには、例えば、ｒｘの誤った使用をフラッシュすること、または現在の命令の後にパイプライン内のすべての命令をフラッシュすることが含まれる。他の変形形態が可能である。
【００７４】
別の実施形態において、図１２を参照すると、計算された値（例えばＴＯＣポインタまたはアドレス）がＴＯＣキャッシュにロードされる、ＳＴＥＰ７２０。
【００７５】
さらなる実施形態において、ＴＯＣ値がＴＯＣキャッシュ内にあるかどうかによって異なる実行経路を取ることもできる。この処理の一例は、例えば、プロセッサによって実施され、図１３を参照して説明される。初めに、ＴＯＣ値を決定するために使用される命令シーケンスを置換する機会があるかどうかについての判断がなされる（例えば、複数の命令をｉｏｐシーケンスに融合する機会）、ＩＮＱＵＩＲＹ８００。すなわち、命令のシーケンスをＳＴＲで置換する、また任意選択で、命令のいくつか他の置換を、検証する、または実施する機会があるか？機会がない場合、従来の処理が実施されてＴＯＣ値が決定される（例えば、命令のシーケンスａｄｄｉｓ／ａｄｄｉ、またはロード命令を使用して）、ＳＴＥＰ８０２。しかしながら、ＴＯＣ値置換の機会がある場合、ＴＯＣキャッシュ内でＳＴＲを含むルーチンについての値がそこにあるかどうかを判断するためにルックアップが実施される、ＳＴＥＰ８０４。ＴＯＣキャッシュ・ヒットがあれば、ＳＴＲのターゲット・レジスタはＴＯＣ値で更新される、ＳＴＥＰ８０８。さらには、一例において検証が実施される、ＳＴＥＰ８１０。しかしながら、ＩＮＱＵＩＲＹ８０６に戻って、ＴＯＣキャッシュ・ヒットがない場合、例として計算命令のシーケンス（例えば、ａｄｄｉｓ、ａｄｄｉ）、またはロード命令のいずれかによって、ＴＯＣ値が生成される、ＳＴＥＰ８１２。計算された値はＴＯＣキャッシュにロードされ、ＳＴＥＰ８１４、ターゲット・レジスタが更新される、ＳＴＥＰ８１６。
【００７６】
他の実装形態および変形形態もまた可能である。
【００７７】
さらなる態様において、サブルーチンに入ることに基づいてＴＯＣ値が予測される。例えば、サブルーチン・コールが実施されると、ＴＯＣ値を計算すると信じられる命令のシーケンスが見つかるのを待機するのではなく、ＴＯＣ値は予測される。代わりに、サブルーチンに入るとＴＯＣ値は予測され、ＴＯＣ値を計算するコールされたルーチン内の命令のシーケンスに遭遇すると、ＴＯＣチェック命令（すなわち、予測されたＴＯＣ値をチェックまたは検証する命令）によって置換される。ＴＯＣチェック命令が失敗するか、または予測がチェックされないままＴＯＣ値がアクセスされると、リカバリを実施することができる。
【００７８】
一例として、プロセッサは以前観察されたアドレスに基づいてサブルーチンについてＴＯＣレジスタ（例えば、ｒ２）の値を予測する。予測されたＴＯＣ値は、例として、予測されたターゲット・アドレスと併せて、または別個のＴＯＣ予測アレイで、ターゲット・アドレス・レジスタ・アレイに入力される。
【００７９】
特定の実施形態において、ＴＯＣ値は例えば図７を参照して説明したハードウェア支援技法、または図８を参照して説明したハードウェア技法あるいはその両方を使用して予測することができる。さらなる実施形態において、ＴＯＣ値はＴＯＣ値を計算するためにレガシー・コード内の命令のシーケンスを使用すること、およびＴＯＣキャッシュを初期化することによって、取得される。他の可能性もある。
【００８０】
サブルーチン分岐に基づいてＴＯＣ値を予測する一実施形態を、図１４を参照して説明する。この処理は例えば、プロセッサによって実施される。図１４を参照すると、初めに、サブルーチン・コールがＴＯＣ値を予測するための候補となるかどうかについての判断がなされる、ＩＮＱＵＩＲＹ９００。例えば、サブルーチン・コールは、レジスタ間接分岐（アドレスそのものの代わりに、実行する次の命令のアドレスの場所が分岐命令内で指定される）か？他の実施形態において、ローカル・モジュール関数以外の分岐は候補と考えられるか、またはフィルタもしくは他のメカニズムが候補性を判断するために与えられ得る。候補にならない場合、従来の処理が実施される、ＳＴＥＰ９０２。しかしながら、サブルーチン・コールがＴＯＣ値を予測するための候補である場合、サブルーチン・コールが実施される、ＳＴＥＰ９０４。このコールは、ＴＯＣ値に加えて他のタイプの値の予測に結合することができる。追加的に、古いＴＯＣ値は例えばレジスタＴＯＣＲＥＣＯＶＥＲなどのリカバリ場所に保存される、ＳＴＥＰ  ９０６。さらには、ＴＯＣ値が予測される、ＳＴＥＰ９０８。本明細書で説明されるように、ＴＯＣ値を予測するために様々な技法が使用され得る。予測されたＴＯＣ値はＴＯＣポインタ・レジスタ（例えば、ｒ２）にロードされる、ＳＴＥＰ９１０。ＴＯＣレジスタの識別は例として、ハードコーディングされてもよく、または設定されてもよい。さらには、一例において、ＴＯＣ値の使用の前にＴＯＣチェック（例えば、ＴＯＣ値のチェック）が実施されることを示すために、選択された場所で維持されるフラグまたは他の指標が（例えば、１に）セットされる、ＳＴＥＰ９１２。
【００８１】
ＴＯＣチェックに関するさらなる詳細、特にＴＯＣチェック用の挿入ロジックを図１５を参照して説明する。一例において、このロジックはデコード・ユニットに統合される。初めに、命令が取得されデコードされる、ＳＴＥＰ１０００。ＴＯＣチェック・フラグがセットされているかどうかについての判断がなされる、ＩＮＱＵＩＲＹ１００２。セットされていない場合、この処理は完了される。しかしながら、ＴＯＣチェック・フラグが（例えば、１に）セットされている場合、現在の命令がＴＯＣセット命令（例えば、ＴＯＣ値を、例えばＴＯＣレジスタにセットする（例えば、ロードする、ストアする、与える、挿入する、格納する）ための１つまたは複数の命令のシーケンス；例えばロード命令、またはＴＯＣ値を計算するための命令のシーケンス）に対応しているかどうかについてさらなる判断がなされる、ＩＮＱＵＩＲＹ１００４。現在の命令がＴＯＣセット命令に対応する場合、ＴＯＣチェックがコードに挿入される、ＳＴＥＰ１００６。例えば、ＳＴＲ検証またはＳＴＲロード−検証命令が、ＴＯＣ値を計算するために使用されるコード内の１つまたは複数の命令を置換する。検証命令のパラメータは、例えば本明細書で上で示した例に基づいて、例えば置換される計算シーケンスから導出される。したがって、計算命令に基づく命令シーケンスを、計算命令に類似したアドレスを計算する検証命令で置換することができ、例えば１つまたは複数の加算命令を、対応する加算を使用して命令を検証計算することで置換する；またロード命令を、置換されたロード命令がＴＯＣレジスタをロードするであろう同一の場所から比較される値を取得するロード−検証命令で置換することができる。追加的に、ＴＯＣチェック・フラグがオフにされる（例えば、０にセットされる）、ＳＴＥＰ１００８。
【００８２】
ＩＮＱＵＩＲＹ１００４に戻ると、現在の命令がＴＯＣセット命令に対応しない場合、現在の命令がＴＯＣ使用命令（すなわち、ＴＯＣ値またはＴＯＣレジスタを使用するための命令のうち、１つまたは複数）に対応するかどうかについてさらなる判断がなされる、ＩＮＱＵＩＲＹ１０１０。対応しない場合、処理は完了される。そうでなければ、リカバリを実施することができる、ＳＴＥＰ１０１２。一実施形態において、これはＴＯＣＲＥＣＯＶＥＲの中の値をＴＯＣレジスタ（例えば、ｒ２）に複製し戻すことによって達成することができる。別の実施形態において、レジスタのリネームを使用することもできる。この実施形態において、予測されたＴＯＣ値は新しいリネーム・レジスタに格納され、リカバリの間、新しいリネーム・レジスタは無効にされるか、または古いＴＯＣ値が別のリネーム・レジスタから新しいリネーム・レジスタに複製される。他の実装形態または実施形態あるいはその両方もまた可能である。
【００８３】
サブルーチン分岐に基づいてＴＯＣ値を予測する別の実施形態を、図１６を参照して説明する。この処理は例えば、プロセッサによって実施される。図１６を参照すると、初めに、サブルーチン・コールがＴＯＣ値を予測するための候補となるかどうかについての判断がなされる、ＩＮＱＵＩＲＹ１１００。一実施形態において、レジスタ間接分岐が予測される。他の実施形態において、モジュール−ローカル関数は排除されるか、またはコールされたアドレスに基づいて、もしくはコーラのアドレスとコールされたアドレスとの対に基づいて、のいずれかでフィルタがさらに候補状態を抑制するか、あるいはその両方である。他の可能性もある。サブルーチン・コールが候補でない場合、従来の処理が実施される、ＳＴＥＰ１１０２。
【００８４】
ＩＮＱＵＩＲＹ１１００に戻ると、サブルーチン・コールがＴＯＣ値を予測するための候補である場合、サブルーチン・コールが行われる、ＳＴＥＰ１１０４。任意選択で、ＴＯＣ値に加え他の関連する値が予測され得る。さらには、古いＴＯＣ値は例えばリカバリ・レジスタ、ＴＯＣＲＥＣＯＶＥＲに保存される、ＳＴＥＰ１１０６。次に、ＴＯＣキャッシュを使用してＴＯＣ値を予測する試行がなされる、ＳＴＥＰ１１０８。ＴＯＣキャッシュ・ヒットがあったかどうかについての判断がなされる、ＩＮＱＵＩＲＹ１１１０。ＴＯＣキャッシュ・ヒットがあった場合、取得されたＴＯＣ値がＴＯＣポインタ・レジスタ（例えば、ｒ２）にロードされる、ＳＴＥＰ１１１２。さらには、ＴＯＣチェック・フラグが（例えば、１に）セットされＴＯＣ値のチェックが予測されたＴＯＣ値の使用に先立って実施されることを示し、一実施形態において、選択場所に位置するＴＯＣキャプチャ・フラグがオフにされる（例えば、０にセットされる）、ＳＴＥＰ１１１４。ＩＮＱＵＩＲＹ１１１０に戻ると、ＴＯＣキャッシュ・ミスがあると、ＴＯＣキャプチャ・フラグがＴＯＣ値を取得するためにＴＯＣキャプチャが実施されることを示すようにセットされ（例えば、１にセットされる）、ＴＯＣチェック・フラグがオフにされる（例えば、０にセットされる）、ＳＴＥＰ１１１６。他の変形形態もまた可能である。
【００８５】
図１６の実施形態についてチェック挿入ロジックに関する詳細を、図１７を参照して説明する。一実施形態において、このロジックはデコード・ユニットに統合される。初めに、命令が取得されデコードされる、ＳＴＥＰ１２００。現在の命令がＴＯＣセット命令に対応するかどうかについての判断がなされる、ＩＮＱＵＩＲＹ１２０２。ＴＯＣセット命令に対応していない場合、現在の命令がＴＯＣ使用命令に対応するかどうかの判断がなされる、ＩＮＱＵＩＲＹ１２０４。対応していない場合、処理は完了される。そうでなければ、ＴＯＣチェック・フラグがセットされているかどうかについてさらなる判断がなされる、ＩＮＱＵＩＲＹ１２０６。フラグがセットされていない場合、やはり処理は完了される。そうでなければ、リカバリを実施することができる、ＳＴＥＰ１２０８。一実施形態において、上述のように、リカバリにはＴＯＣＲＥＣＯＶＥＲレジスタ内の値をＴＯＣレジスタ（例えば、ｒ２）に複製し戻すことか、またはリネーム・レジスタを使用することが含まれる。他の変形形態が可能である。
【００８６】
ＩＮＱＵＩＲＹ１２０２に戻ると、現在の命令がＴＯＣセット命令に対応する場合、チェックがコードに挿入される、ＳＴＥＰ１２１０。例えば、ＳＴＲ検証またはＳＴＲロード−検証が、挿入される。次にＴＯＣチェック・フラグがオフにされる（例えば、０にセットされる）、ＳＴＥＰ１２１２。
【００８７】
ＴＯＣチェック挿入ロジックのさらなる実施形態を、図１８を参照して説明する。一例において、このロジックはデコード・ユニットに統合される。図１８を参照すると、命令が取得されデコードされる、ＳＴＥＰ１３００。現在の命令がＴＯＣセット命令に対応するかどうかについての判断がなされる、ＩＮＱＵＩＲＹ１３０２。現在の命令がＴＯＣセット命令に対応しない場合、現在の命令がＴＯＣ使用命令に対応するかどうかのさらなる判断がなされる、ＩＮＱＵＩＲＹ１３０４。対応しない場合、処理は終了する。そうでなければ、ＴＯＣキャプチャ・フラグがセットされているかどうかについて判断がなされる、ＩＮＱＵＩＲＹ１３０６。フラグがセットされていない場合、処理は完了される。そうでなければ、ＴＯＣキャプチャ・フラグがオフにされる（例えば０にセットされる）、ＳＴＥＰ１３０８。一実施形態において、この関数は新しいＴＯＣ値をＴＯＣキャッシュにロードしないこと、またはフィルタがＴＯＣキャッシュでＴＯＣ予測を抑制するために（例えば、Ｂｌｏｏｍフィルタ）示されることを記録することができる。他の変形形態もまた可能である。
【００８８】
ＩＮＱＵＩＲＹ１３０２に戻ると、現在の命令がＴＯＣセット命令に対応しない場合、チェックが挿入され、一例においてそれはリカバリ・アクションをトリガする検証命令を含み、ＳＴＥＰ１３１０、ＴＯＣキャプチャ・フラグがリセットされる（例えば、０にセットされる）、ＳＴＥＰ１３１２。
【００８９】
一実施形態において、ＴＯＣチェック・フラグおよびＴＯＣキャプチャ・フラグに関連付けられる処理を実施することができ、一例において、それらは並列に実施され得る。
【００９０】
次にＴＯＣキャッシュに関連するさらなる詳細が図１９を参照して説明される。一例において、ＴＯＣキャッシュ１４００は例えばＴＯＣセッタ・アドレス列１４０２、そのエントリのモジュールについてのＴＯＣ値を含むＴＯＣ値列１４０４、任意選択の関数初期化ＴＯＣ列１４０６、および任意選択の使用追跡列１４０８を含む複数の列を含む。ＴＯＣセッタ・アドレス列１４０２は、特定の使用事例に基づいて、ＳＴＲのアドレス、関数の開始、または他の値の数などのＴＯＣセッタ・アドレスを含む。１つまたは複数の実施形態において、ＴＯＣセッタ・アドレスによってアクセスされるセット関連性テーブルが提供される。関数初期化ＴＯＣ列１４０６は、ＴＯＣレジスタを初期化しない関数をキャプチャするために使用することができる。別の実施形態において、テーブル・エントリを使用することはあまりに不経済であることがあり、フィルタリングのメカニズム、例えばＢｌｏｏｍフィルタまたは他のフィルタリングのメカニズムを、ＴＯＣ値が予測されるべきではない関数を識別するために使用することができる。使用追跡は、テーブルがいっぱいになっており、かつ別のエントリが使用されようとする場合、除去されるエントリを選択するやり方を与える。例えばｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ、ｌｅａｓｔ  ｆｒｅｑｕｅｎｔｌｙ  ｕｓｅｄ、ＦＩＦＯ（先入先出）、ある時間当たりの使用回数などを含む様々な追跡スキームを使用することができる。少なくとも１つの実施形態において、列１４０８は、実装された置換ポリシについて適当な情報を記憶することに相当する使用情報を記憶するように構成される。
【００９１】
エントリをＴＯＣキャッシュに挿入する一実施形態を、図２０を参照して説明する。初めに、ＴＯＣキャッシュに入力される値の対（例えば、コールされる側、ＴＯＣ値）を受信する、ＳＴＥＰ１４５０。キャッシュ内のエントリは値の対を格納するために選択される、ＳＴＥＰ１４５２。例として、エントリを選択するためにインデックス・ビットを使用することができるか、または使用追跡情報を使用することができる。任意選択で、一実施形態において、エントリが追い出される場合、追い出されるエントリは例えば第２のレベルのＴＯＣキャッシュに保存される、ＳＴＥＰ１４５４。取得された値の対は、選択されたエントリに格納される、ＳＴＥＰ１４５６。他の変形形態が可能である。
【００９２】
一実施形態において、単一のＴＯＣポインタ値はモジュール全体に対応する、すなわち、あるモジュール内のすべての関数は同一のＴＯＣポインタ値を有する。したがって、本発明の態様によると、プロセッサはＴＯＣ値を、あるアドレスの範囲についてＴＯＣキャッシュに格納する。例として、同一のＴＯＣポインタ値に対応するアドレスの範囲は、例えばＴＯＣの新しく発見された値を以前から存在していた範囲と合体することによって動的に決定される。さらなる実施形態において、範囲の程度は動的ローダによって与えられ、予測されるＴＯＣ値はその範囲の値に関連付けられる。他の例もまた可能である。
【００９３】
さらなる例として、ＴＯＣはモジュールの一部分をカバーすることができ、アドレスの範囲はその一部分の範囲となる。他の変形形態も存在する。
【００９４】
ＴＯＣキャッシュは、上述のように使用することができるが、この態様においては、ＴＯＣキャッシュは図１９とは異なるフォーマット、ひいては異なるマネジメントを有している。これにより、ＴＯＣキャッシュのよりコンパクトかつ効率的な表現が可能となり、ＴＯＣ値の特性を活用できる。
【００９５】
図２１に示されるように、一例において、アプリケーション１５００は、メイン・プログラム１５０２、および共有ライブラリなどの１つまたは複数の動的に共有されるオブジェクト（ＤＳＯ）１５０４を含む複数のモジュールを含むことができる。それぞれのモジュールはＴＯＣ値１５０６に関連付けられており、ＴＯＣ値１５０６は例えば動的ローダによってそのモジュールがロードされているアドレス範囲内のコードに対応している。それぞれのモジュールがそれに関連付けられた自身のＴＯＣ値を有することができるため、ＴＯＣキャッシュはそのように示すよう実装することができる。例えば図２２に示されるように、ＴＯＣキャッシュ１６００は例えばＴＯＣ範囲ａｄｄｒｅｓｓ＿ｆｒｏｍ列１６０２およびＴＯＣ範囲ａｄｄｒｅｓｓ＿ｔｏ列１６０４を含む。ＴＯＣ範囲ａｄｄｒｅｓｓ＿ｆｒｏｍ列１６０２はＴＯＣ値についての特定のモジュールの開始を示し、ＴＯＣ範囲ａｄｄｒｅｓｓ＿ｔｏ列１６０４はＴＯＣ値についてのその特定のモジュールの終了を示す。そのモジュールについて、ＴＯＣ値がＴＯＣ値列１６０６に含められる。さらには、ＴＯＣキャッシュは使用追跡列１６０８を含むことができる。他のまたは異なるあるいはその両方の列も可能である。
【００９６】
そのようなＴＯＣキャッシュ内にエントリを挿入する一実施形態を、図２３を参照して説明する。このロジックは例えばプロセッサによって実施される。キャッシュに挿入される値の対（例えば、コールされる側、ＴＯＣ値）を受信する、ＳＴＥＰ１７００。示されたＴＯＣ値に基づいてＴＯＣ値を格納するためのエントリを選択する試行がなされる、ＳＴＥＰ１７０２。ＴＯＣ値についてＴＯＣキャッシュ内でエントリが見つかったかどうかの判断がなされる、ＩＮＱＵＩＲＹ１７０４。エントリが見つからない場合、ＴＯＣ値を格納するためにＴＯＣキャッシュ内のエントリが選択される、ＳＴＥＰ１７０６。このエントリは、空のエントリである場合があり、または他の情報を有するエントリである場合もある。使用しようとしているエントリ内に既に値がある場合、その情報は例えば第２のレベルのＴＯＣキャッシュ内に保存される、ＳＴＥＰ１７０８。受信された値は、選択されたエントリに格納される、ＳＴＥＰ１７１０。追加的に、ａｄｄｒｅｓｓ＿ｆｒｏｍおよびａｄｄｒｅｓｓ＿ｔｏの列はコールされる側のアドレスにセットされる。
【００９７】
ＩＮＱＵＩＲＹ１７０４に戻ると、エントリが見つかるとコールされる側のアドレスがａｄｄｒｅｓｓ＿ｆｒｏｍ列の中のアドレスより小さいかどうかについての判断がなされる、ＩＮＱＵＩＲＹ１７２０。コールされる側のアドレスがａｄｄｒｅｓｓ＿ｆｒｏｍ列より小さい場合、選択されたエントリのａｄｄｒｅｓｓ＿ｆｒｏｍ列は、コールされる側のアドレスに更新される、ＳＴＥＰ１７２２。そうでなければ、選択されたエントリのａｄｄｒｅｓｓ＿ｔｏ列がコールされる側のアドレスに更新される、ＳＴＥＰ１７２４。
【００９８】
上のフローは、見つかるエントリが複数ではないように、ＴＯＣ値あたり１つのエントリを仮定している。しかしながら、特定のモジュールについて複数のエントリが見つかることがある場合、そのような場合についてのチェックもなされる。
【００９９】
さらなる実施形態において、ＴＯＣ予測のための候補選択は、同一のモジュールへのコールがＴＯＣ予測を抑制するために実施されるかどうかを判断するために範囲を伴うＴＯＣテーブルを使用することができる。他の変形形態が可能である。
【０１００】
さらなる態様において、ＴＯＣ追跡構造がＴＯＣ予測のために準備され初期化される。一例として、リンカはプログラムをリンクし、リンカはＴＯＣ値を決定し、モジュールに対する絶対値、または例えばモジュールのロード・アドレスに対する相対的なオフセットのいずれかである。動的ローダはモジュールをロードし、最終的なＴＯＣ値を計算する。動的ローダはＴＯＣ値をＴＯＣ追跡構造にロードし、例えばＳｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令または別の予測命令と併せて使用される。
【０１０１】
例として、ＴＯＣ追跡構造はＴＯＣキャッシュそのものであることができるか、またはインメモリ・テーブルの表現であってもよい。他の例もまた可能である。さらには、ＴＯＣ値を追跡構造に格納することに関連する詳細を、図２４を参照して説明する。この処理は例えばローダによって実施される。
【０１０２】
図２４を参照すると、ローダはモジュールをロードする要求を受信し、ＳＴＥＰ１８００、ロードされたモジュールについて少なくとも１つのＴＯＣポインタを計算する、ＳＴＥＰ１８０２。そのＴＯＣ値はＴＯＣ追跡構造に、例えばモジュールがロードされているアドレス範囲と併せて格納される、ＳＴＥＰ１８０４。格納された値は、次に特定の関数に返されてもよく、または後の検索などのためにＴＯＣキャッシュに格納されてもよい。
【０１０３】
一実施形態において、追跡構造が例えばインメモリ構造であり、かつＴＯＣ値がＴＯＣキャッシュ内に見つからない場合、制御は例えば割り込みまたは分岐に基づくユーザモードのイベントを使用してソフトウェアに渡される。ソフトウェア・ハンドラは、例えばそれぞれのモジュールに対応するアドレス範囲およびＴＯＣ値を記憶するインメモリ構造をアクセスすることによって値をリロードする。別の実施形態において、インメモリのＴＯＣ構造はアーキテクチャ的に定義され、ハードウェア・ハンドラはＴＯＣキャッシュをインメモリ構造から直接ＴＯＣキャッシュをリロードする。一実施形態において、ソフトウェア・ハンドラは、モジュールをロードする際ＴＯＣキャッシュおよびインメモリ構造の両方をリロードする。他の変形形態が可能である。
【０１０４】
本発明のさらなる態様によると、読み取り専用ＴＯＣレジスタおよびＴＯＣアドレッシング・モードは命令セット・アーキテクチャ（ＩＳＡ）に含まれる。読み取り専用ＴＯＣレジスタは、例えば、所与のモジュール（例えばＴＯＣキャッシュまたはインメモリ・テーブルをアクセスすることによって）にＴＯＣ値を与える疑似的または仮想のレジスタである。すなわち、ハードウェアまたはアーキテクトされたレジスタではなく、またそれを支える記憶装置を有していないが、その代わりに例えば選択されたレジスタ番号が参照される際使用されるＴＯＣ値を与える。ＴＯＣ値は、例えばモジュール初期化に伴ってロードすることができるＴＯＣベースのテーブルに記憶された値から初期化される。ＴＯＣベースのテーブルは、図１９〜図２２のＴＯＣキャッシュのうちの１つもしくは複数、またはインメモリ構造に対応することができる。１つまたは複数の本発明の態様と併せて、さらに他のフォーマットを使用して、ＴＯＣベースの値を所与の命令アドレスに格納し与えることができる。
【０１０５】
読み取り専用ＴＯＣレジスタを使用する一例が、図２５を参照して説明される。示されるように、本明細書ではＴＯＣベースと称される読み取り専用ＴＯＣレジスタ１９００は、ＴＯＣ１９０２内のある場所へのポインタである。ＴＯＣ１９０２は、変数値１９０６を保持している対応する変数の場所を示している１つまたは複数の可変アドレス１９０４を含む。読み取り専用ＴＯＣレジスタ、ＴＯＣベースは、アドレッシング・モードによって参照されるか、または命令内でもしくはプリフィクスとして非明示的である。プロセッサは、ＴＯＣベースがアドレッシング・モード、またはアドレッシング・モードのレジスタとして指定されることに応答してＴＯＣ値ルックアップを実施し、取得されたＴＯＣ値が、ベース・レジスタとして指定された汎用レジスタによって与えられる値の代わりに使用される。
【０１０６】
一実施形態において、命令セット内の２ｎのレジスタをエンコードするためにｎビットが与えられる場合、２ｎレジスタの数のうちの１つはＴＯＣポインタの値を参照するように定義され、そのレジスタが指定されると、そのＴＯＣポインタの値がそのレジスタ用の値として使用される。
【０１０７】
さらなる態様において、読み取り専用のレジスタを使用することができる様々な命令が与えられる。例えば図２６〜図２８を参照して説明されるような様々なｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ命令が与えられ、また１つまたは複数のＬｏａｄ  Ａｄｄｒｅｓｓ  ＴＯＣ−相対Ｌｏｎｇ命令が与えられることがあり、その例が図２９を参照して説明される。他の例もまた可能である。
【０１０８】
図２６に示されるように、Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ命令２０００は、Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ（ＬＴＬ）演算を指定するオペコードを含む複数の演算コード（オペコード）フィールド２００２ａ、２００２ｂ；第１のオペランドの場所（例えば、レジスタ）を示すための第１のオペランド・フィールド（Ｒ１）２００４；即値フィールドであり、その内容がバイト、半ワード、ワード、ダブルワードなどのうちの１つを表す符号付きのバイナリ整数として使用され、現在の命令アドレスにおいてＴＯＣポインタの値に加算され、第２のオペランドのアドレスを記憶装置内に（ＴＯＣは、外部的な手段により−例えば、プログラム・ローダ、ＳＴＲ命令、ＴＯＣテーブル、ＴＯＣキャッシュなどを使用して、定義される）形成する、第２のオペランド・フィールド（ＲＩ２）２００８を含む。
【０１０９】
Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ命令の他の実施形態がまた、図２７〜図２８で描写されるように与えられる。それぞれＬｏａｄ  ＴＯＣ−相対Ｌｏｎｇ命令（ＬＧＴＬ）２０１０（図２７）およびＬＧＦＴＬ２０２０（図２８）は、オペコード・フィールド２０１２ａ、２０１２ｂ；２０２２ａ、２０２２ｂ；第１のオペランドの場所（例えば、レジスタ）を示すための第１のオペランド・フィールド（Ｒ１）２０１４、２０２４；即値フィールドであり、その内容がバイト、半ワード、ワード、ダブルワードなどのうちの１つを表す符号付きのバイナリ整数として使用され、現在の命令アドレスにおいてＴＯＣポインタの値に加算され、第２のオペランドのアドレスを記憶装置内に（ＴＯＣは、外部的な手段により−例えば、プログラム・ローダ、ＳＴＲ命令、ＴＯＣテーブル、ＴＯＣキャッシュなどを使用して、定義される）形成する、第２のオペランド・フィールド（Ｒ２）２０１８、２０２８を含む。
【０１１０】
第２のオペランドは、Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ（ＬＧＦＴＬ）に関しては符号拡張であることを除いて、第１のオペランドの場所に変わらず格納される。
【０１１１】
Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ（ＬＴＬ）について、オペランドは例えば３２ビットであり、またＬｏａｄ  ＴＯＣ−相対Ｌｏｎｇ（ＬＧＴＬ）について、オペランドは６４ビットである。Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ（ＬＧＦＴＬ）について、第２のオペランドは３２ビットの符号付きバイナリ整数として扱われ、第１のオペランドは６４ビットの符号付きバイナリ整数として扱われる。
【０１１２】
ＤＡＴがオンの場合、第２のオペランドは、命令をアクセスするために使用されるのと同一のアドレッシング空間モードを使用してアクセスされる。ＤＡＴがオフの場合、第２のオペランドは実アドレスを使用してアクセスされる。
【０１１３】
Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ（ＬＴＬ、ＬＧＦＴＬ）について、第２のオペランドはワード境界でアライメントされ、Ｌｏａｄ  ＴＯＣ−相対Ｌｏｎｇ（ＬＧＴＬ）については、第２のオペランドはダブルワード境界でアライメントされる。そうでなければ、仕様例外が認められることがある。
【０１１４】
Ｌｏａｄ  Ａｄｄｒｅｓｓ  ＴＯＣ相対Ｌｏｎｇ命令の一例が、図２９を参照して説明される。描かれるように、Ｌｏａｄ  Ａｄｄｒｅｓｓ  ＴＯＣ相対Ｌｏｎｇ命令２１００は、Ｌｏａｄ  Ａｄｄｒｅｓｓ  ＴＯＣ相対Ｌｏｎｇ演算を示すオペコードを含む複数の演算コード・フィールド２１０２ａ、２１０２ｂ；第１のオペランドの場所（例えば、レジスタ）を示すための第１のオペランド・フィールド（Ｒ１）２０１４；即値フィールドであり、その内容がバイト、半ワード、ワード、ダブルワードなどのうちの１つの数を指定する符号付きのバイナリ整数であり、現在の命令アドレスにおいてＴＯＣポインタの値に加算され、計算されたアドレスを生成する、第２のオペランド・フィールド（Ｒ２）２０１８を含む。
【０１１５】
ＲＩ２フィールドを使用して指定されたアドレスは、汎用レジスタＲ１に格納される。アドレスはＲＩ２フィールドを現在のアドレスでＴＯＣの値に加算することにより、取得される。
【０１１６】
２４ビットのアドレッシング・モードにおいて、アドレスはビット位置４０〜６３に格納され、ビット３２〜３９はゼロにセットされ、ビット０〜３１は変更のないままである。３１ビットのアドレッシング・モードにおいて、アドレスはビット位置３３〜６３に格納され、ビット３２はゼロにセットされ、ビット０〜３１は変更のないままである。６４ビットのアドレッシング・モードにおいて、アドレスはビット位置０〜６３に格納される。
【０１１７】
オペランドについては、記憶装置の参照は起こらず、アドレスはアクセス例外について検査されない。
【０１１８】
さらなる態様において、ＴＯＣ  ａｄｄ  ｉｍｍｅｄｉａｔｅ  ｓｈｉｆｔｅｄ（ｔｏｃａｄｄｉｓ）命令が与えられる（例えば、ＲＩＳＣスタイルのアーキテクチャ用）。図３０に描かれるように、一例において、ＴＯＣ  ａｄｄ  ｉｍｍｅｄｉａｔｅ  ｓｈｉｆｔｅｄ命令２２００は、ＴＯＣ  ａｄｄ  ｉｍｍｅｄｉａｔｅ  ｓｈｉｆｔｅｄ演算を指定するオペコードを含む演算コード・フィールド２２０２、ターゲットの戻り値を示すターゲット・リターン（ＲＴ）フィールド２２０４、およびＴＯＣ値に適用するシフト量を指定するシフト即値（ＳＩ）フィールド２２０６を含む。
【０１１９】
一例として、ｔｏｃａｄｄｉｓを以下のように定義する。
ｔｏｃａｄｄｉｓ  ＲＴ，ＳＩ
ＲＴ  ＜＝（ＴＯＣ）＋ＥＸＴＳ（ＳＩ｜｜１６０）
ＴＯＣ＋（ＳＩ｜｜０×００００）の合計をレジスタＲＴに格納する。ＥＸＴＳは拡張された符号を意味し、｜｜は連結を意味する。
【０１２０】
さらなる態様において、ＴＯＣが示すプリフィクス命令を与えることができる。例えば、ａｄｄ  ＴＯＣ  ｉｍｍｅｄｉａｔｅ  ｓｈｉｆｔｅｄ命令、次の命令についての情報を与えるプリフィクス命令である、ａｄｄｔｏｃｉｓ＋が与えられる。図３１を参照すると、一例において、ａｄｄ  ＴＯＣ  ｉｍｍｅｄｉａｔｅ  ｓｈｉｆｔｅｄ命令２３００は、例えば、ａｄｄ  ＴＯＣ  ｉｍｍｅｄｉａｔｅ  ｓｈｉｆｔｅｄ演算を指定するオペコードを有する演算コード・フィールド２３０２、結果を保持するターゲット・レジスタ（ＲＴ）フィールド２３０４、オペランド・フィールド（ＲＡ）２３０６、およびシフト即値（ＳＩ）フィールド２３０８を含む。
【０１２１】
例として、
ａｄｄｔｏｃｉｓ＋  ＲＴ，ＲＡ，ＳＩ
ｉｆ  ＲＡ  ＝  ０  ｔｈｅｎ  ＲＴ  ←  （ＴＯＣ）＋ＥＸＴＳ（ＳＩ｜｜１６０）  ｅｌｓｅ  ＲＴ  ←  （ＲＡ）＋ＥＸＴＳ（ＳＩ｜｜１６０）
（ＲＡ｜ＴＯＣ）＋（ＳＩ｜｜０×００００）の合計は、次のシーケンシャルな命令のためだけに、レジスタＲＴへの参照のためのソースとして与えられる。ａｄｄｔｏｃｉｓ＋は命令プリフィクスであり、ＲＴが指定される際、後続の命令を修飾してＲＴ用に計算された値を入力として使用する。命令は、次のシーケンシャルな命令が実行された後、ＲＴが使用されなくなり、その値が定義されなくなることを示している。ａｄｄｔｏｃｉｓ＋命令の後、かつ次のシーケンシャルな命令より前に実行に割り込みがあると、次の命令で実行を再開させて正しい結果を生成するやり方で状態が更新される（すなわち、ＲＴに書き込みがなされることになるか、または次のシーケンシャルな命令のＲＴソースを修飾することの効果を保持する別の実装形態定義の方法が、使用されることになる）。ＲＡ＝０の場合ａｄｄＴＯＣｉｓ＋はＴＯＣベースの値を使用するのであり、ＧＰＲ０の内容ではないことに留意されたい。
【０１２２】
プリフィクス命令は、追加的な即値ビットが使用されるかどうかを示すためのディスプレースメント指定子フィールドなどのさらなる選択肢を有することができる。追加的に、後続の命令のオペランドとともに（例えば、それに加算して、それとＯＲ演算して、など）用いられる値を含む１つまたは複数の追加的な即値フィールドを含むことができる。
【０１２３】
他のプリフィクスの選択肢は、ＴＯＣプリフィクス、またはオペランドのうちの選択可能な１つをオーバライドするための選択肢を有するＴＯＣプリフィクスあるいはその両方を含んで使用することができる。例えば、ＴＯＣ値が後続の命令のオペランドのうちの１つの代わりに使用されるべきであることを示すプリフィクス命令が提供され得る。一例において、オペランドは選択可能である。
【０１２４】
追加的に、プリフィクス命令（例えば、ａｄｄｔｏｃｉｓ）および後続の命令の態様は、処理を促進するために融合することができる。例えば、ディスプレースメントを伴うプリフィクス命令が指定され、後続の命令もディスプレースメントを含んでいる場合、ディスプレースメントが即値シフトおよび即値ディスプレースメントに対応することができる。他の可能性が存在する。
【０１２５】
ａｄｄｔｏｃｉｓを使用する特定の最適化の例を以下に示す。この例において、ｎ（例えば、３）個の命令候補シーケンスは例えば以下を含む。ａｄｄｔｏｃｉｓ＋  ｒ４，ｔｏｃ，ｕｐｐｅｒ；ａｄｄｉ  ｒ４，ｒ４，ｌｏｗｅｒ；およびｌｖｘ＊  ｖｒ２，ｒ０，ｒ４。このシーケンスは次のテンプレートで表現することができる。
ｉ１＝ａｄｄｔｏｃｉｓ＋＜ｒ１＞，＜ｒ２＞，＜ｕｐｐｅｒ＞
ｉ２＝ａｄｄｉ＜ｒ１＞，＜ｒ１＞，＜ｌｏｗｅｒ＞
ｉ３＝ｌｖｘ＊＜ｖｒｔ＞，ｒ０，＜ｒ１＞
−＞そして次の内部演算に最適化される
ｌｖｄ＜ｖｒｔ＞，ｔｏｃ＿ｏｒ＿ｇｐｒ（＜ｒ２＞），ｃｏｍｂｉｎｅｄ（＜ｕｐｐｅｒ＞，＜ｌｏｗｅｒ＞）
【０１２６】
ａｄｄｔｏｃｉｓ命令はａｄｄｉｓに似ているが、ＲＡフィールドが値０を有している場合、定数０ではなくＴＯＣの値を導入するものである。一例において、ｌｖｘ＊は、ベース・レジスタ（例えばこの例では４）を、命令の実行の後指定されていない値を有するものとして定義する命令形式である。一例において、ｌｖｘ＊は、少なくとも１つのレジスタの最近の使用を示すｌｖｘ（インデックス付きロード・ベクトル）命令の形式である（例えば、本明細書においてはテンプレートで＜ｒ１＞として示されるレジスタとして定義される）。Ｌｖｄは、実装された定義済みディスプレースメントを伴うロード・ベクトル演算である。ｔｏｃ＿ｏｒ＿ｇｐｒ関数は、ＴＯＣの特殊な場合を拡大することを扱っているが、そうでなければｌｖｄはすべての他のＲＡオペランドと同様にＲＡオペランドを、０を表す０値として、および論理レジスタを表す他のレジスタ値として扱うからである。
【０１２７】
ＴＯＣ命令またはＴＯＣ使用の命令を含む命令の複雑なシーケンスを減らして、シンプルな命令のシーケンスとするさらなる機会があり得る。
【０１２８】
ＴＯＣオペランドを管理するために使用される実行フローの一実施形態を、図３２を参照して説明する。一例において、プロセッサがこのロジックを実行する。
【０１２９】
図３２を参照すると、一例において命令が受信される、ＳＴＥＰ２４００。非ＴＯＣオペランド定義にしたがって、命令の任意の非ＴＯＣオペランドが取得される、ＳＴＥＰ２４０２。例えば、命令のオペランドが汎用レジスタを指定する場合、データはそのレジスタなどから取得される。
【０１３０】
ＴＯＣオペランドがその命令に存在するかどうかについての判断がなされる、ＩＮＱＵＩＲＹ２４０４。すなわち、ＴＯＣポインタを明示的にまたは非明示的に使用する命令内にオペランドがあるか？ＴＯＣオペランドが存在する場合、以下のようにＴＯＣオペランドが取得される、ＳＴＥＰ２４０６。その後、またはＴＯＣオペランドが存在しない場合、任意の取得されたオペランド値が命令の定義にしたがって使用される、ＳＴＥＰ２４０８。任意選択で、１つまたは複数の出力オペランドが書き込まれる、ＳＴＥＰ２４１０。
【０１３１】
一例において、図３３を参照して説明されるように、ＴＯＣオペランドはインメモリＴＯＣ構造から取得される。インメモリＴＯＣ追跡構造のアドレスが取得され、ＳＴＥＰ２５００、インメモリＴＯＣ構造から、命令を含むモジュールについてのＴＯＣ値が取得される、ＳＴＥＰ２５０２。そのＴＯＣ値は命令による使用のために与えられる、ＳＴＥＰ２５０４。
【０１３２】
別の例において、図３４を参照して説明されるように、ＴＯＣオペランドはインメモリ構造によって支えられるＴＯＣキャッシュから取得される。この例において、ＴＯＣキャッシュがアクセスされ、ＳＴＥＰ２６００、ＴＯＣキャッシュ・ヒットがあるかどうかについての判断がなされる、ＩＮＱＵＩＲＹ２６０２。すなわち、命令を含むモジュールについてのキャッシュ内にエントリがあるか？ＴＯＣキャッシュ・ヒットがない場合、ＴＯＣキャッシュがインメモリＴＯＣキャッシュ構造からリロードされる、ＳＴＥＰ２６０４。その後、またはＴＯＣキャッシュ・ヒットがある場合、命令を含むモジュールについてのＴＯＣ値がＴＯＣキャッシュから取得され、命令による使用のために与えられる、ＳＴＥＰ２６０６。
【０１３３】
インメモリ構造によって支えられるＴＯＣキャッシュからＴＯＣオペランドを取得するさらなる例が、図３５を参照して説明される。この例において、ＴＯＣキャッシュがアクセスされ、ＳＴＥＰ２７００、ＴＯＣキャッシュ・ヒットがあるかどうかについての判断がなされる、ＩＮＱＵＩＲＹ２７０２。ＴＯＣキャッシュ・ヒットがある場合、ＴＯＣ値は、命令を含むモジュールに対応するＴＯＣキャッシュ内のエントリから検索され、命令による使用のために与えられる、ＳＴＥＰ２７０４。しかしながら、ＴＯＣキャッシュ・ヒットがない場合、制御はソフトウェア・ハンドラに渡される、ＳＴＥＰ２７０６。ソフトウェア・ハンドラは、ソフトウェアを使用してＴＯＣ値を決定し（例えば、インメモリ追跡構造から取得する）、ＳＴＥＰ２７１０、決定されたＴＯＣ値をＴＯＣキャッシュにロードする、ＳＴＥＰ２７１２。ソフトウェア・ハンドラは終了し、命令が再開される、ＳＴＥＰ２７１４。
【０１３４】
ＴＯＣキャッシュをソフトウェアからロードするために、Ｌｏａｄ  ＴＯＣ  Ｃａｃｈｅ（ＬＴＣ）命令を使用することができる。例えば、ＬＴＣ  Ｒｆｒｏｍ、Ｒｔｏ、ＲＴＯＣを使用して＜ＭＯＤＵＬＥ．Ｒｆｒｏｍ，ＭＯＤＵＬＥ．Ｒｔｏ，ＭＯＤＵＬＥ．ＴＯＣ＞についてのエントリをロードすることができる。例えば、エントリはキャッシュ内に含められ、ａｄｄｒｅｓｓ＿ｆｒｏｍ列はＲｆｒｏｍを使用してポピュレートされ、ａｄｄｒｅｓｓ＿ｔｏ列はＲｔｏを使用してポピュレートされ、ＴＯＣ値はＲＴＯＣを使用してポピュレートされる。一実施形態において、エントリは特定の実装形態の置換ポリシにしたがって選択される。
【０１３５】
別の実施形態において、テーブル・エントリは複数の制御レジスタをロードすることによって、ロードされる。
【０１３６】
使用事例の一例を以下で説明する。
ｃｈａｒ  ｂａｒ［ＭＡＸ］；
ｃｈａｒ  ｆｏｏ（ｉｎｔ  ｉｄｘ）
｛
ｒｅｔｕｒｎ  ｂａｒ［ｉｄｘ］；
｝
【０１３７】
Ｃプログラミング言語の定義にしたがって、関数ｆｏｏは配列ｂａｒから文字を返し、この場合文字の位置は関数ｆｏｏへの引数ｉｄｘによって示される。
【０１３８】
本発明の一態様にしたがって、コンパイラはこのプログラムを以下の機械命令シーケンスに解釈する：
ｆｏｏ：
ＬＤＸ  Ｒ４，ＴＯＣｂａｓｅ，ｂａｒ＠ｔｏｃ
／／ｂａｒの開始アドレスをＴＯＣから
／／「ＴＯＣｂａｓｅ」レジスタによって指定される
／／ＴＯＣポインタを使用してロードする
ＬＢＺＸ  Ｒ３，Ｒ４，Ｒ３
／／ｂａｒ＋ｉｄｘからバイトをロード
ＢＬＲ
／／関数ｆｏｏから戻る
【０１３９】
本発明の１つまたは複数の態様によると、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令は、ＴＯＣ値でロードされるレジスタを効率的に初期化する。さらには、本発明の態様によると、Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令が効率的であるため、ＴＯＣレジスタ値はコンパイル済みコード内に保存およびリストアされない。むしろ、サブルーチンがコールされると、ＴＯＣレジスタ値は破棄される。コールされた関数が戻る際、ＴＯＣ値はロードされない。むしろ、新しいＳｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ命令がＴＯＣレジスタをロードするために生成される。
【０１４０】
上述のＣプログラミング言語の関数ｆｏｏに対応するＳＴＲ（Ｓｅｔ  ＴＯＣ  Ｒｅｇｉｓｔｅｒ）命令に基づいてＴＯＣポインタの正しい値を取得するためにコンパイラ生成のコードの一例は、以下の通りである。
ｆｏｏ：
ＳＴＲ  Ｒ４
ＬＤＸ  Ｒ４，ＴＯＣ，ｂａｒ＠ｔｏｃ
／／ＴＯＣからｂａｒの開始アドレスを
／／Ｒ４内のＴＯＣポインタを使用してロードする
ＬＢＺＸ  Ｒ３，Ｒ４，Ｒ３
／／ｂａｒ＋ｉｄｘからバイトをロード
ＢＬＲ
／／  関数ｆｏｏから戻る
【０１４１】
コンパイラによって実施されるようなＴＯＣポインタでレジスタを初期化する一実施形態を図３６を参照して説明する。初めに、関数がＴＯＣをアクセスするかどうかについて判断がなされる、ＩＮＱＵＩＲＹ２８００。アクセスしない場合、処理は完了される。しかしながら、関数がＴＯＣにアクセスする場合、レジスタは最初の使用に先立って例えばＳＴＲ命令を使用してＴＯＣポインタで初期化される、ＳＴＥＰ２８０２。例えばＳＴＲ命令は、コンパイルされるコードに追加され、ＴＯＣレジスタを初期化するために使用される。他の変形形態が可能である。
【０１４２】
さらなる例において、図３７を参照して説明されるように、静的リンカがＴＯＣを初期化することができる。この例において、サブルーチンが、ＴＯＣ値を有するレジスタを変更することができる関数に解決されるかどうかについての判断がなされる、ＩＮＱＵＩＲＹ２９００。解決しない場合、処理は完了される。そうでなければ、ＴＯＣポインタを保持するレジスタは例えばＳＴＲ命令で再初期化される、ＳＴＥＰ２９０２。例えば、ＳＴＲ命令はコンパイルされるコードに追加され、ＴＯＣレジスタを初期化するために使用される。他の変形形態が可能である。
【０１４３】
例示の使用事例は以下の通りである。このより効率的なコードは、本発明の態様にしたがって生成される。
ｆｕｎｃ（）
｛
ＳＴＲ  ｒ２        ／／ＴＯＣを計算する代わりに使用
・・・
・・・              ／／  ｒ２を使用
・・・
／／  スタック上にＴＯＣ値を保存する必要はない
・・・
ｇ（）；
・・・
ＳＴＲ  ｒ２        ／／スタックからリロードする代わりに
／／ＳＴＲ命令からＴＯＣを取得する
・・・
・・・              ／／    ｒ２を使用
・・・
【０１４４】
ＴＯＣセット命令を伴うコードを生成することに加えて、ＴＯＣ読み取り専用レジスタを使用してコードを生成することができる。これにより、ＧＰＲにＴＯＣをロードする必要性をさらに回避することができ、それによってレジスタの負荷、およびレジスタをロードすること、または関数コールの後レジスタをリロードすることのオーバヘッドを減らす。
【０１４５】
ＴＯＣ読み取り専用レジスタを使用するためのコンパイラ生成のコードの一例は、以下の通りである。
ｃｈａｒ  ｂａｒ［ＭＡＸ］；
ｃｈａｒ  ｆｏｏ（ｉｎｔ  ｉｄｘ）
｛
ｒｅｔｕｒｎ  ｂａｒ［ｉｄｘ］；
｝
【０１４６】
Ｃプログラミング言語の定義にしたがって、関数ｆｏｏは配列ｂａｒから文字を返し、この場合文字の位置は関数ｆｏｏへの引数ｉｄｘによって示される。
【０１４７】
本発明の一態様にしたがって、コンパイラはこのプログラムを以下の機械命令シーケンスに解釈する：
ｆｏｏ：
ＬＤＸ  Ｒ４，ＴＯＣｂａｓｅ，ｂａｒ＠ｔｏｃ
／／ｂａｒの開始アドレスをＴＯＣから
／／「ＴＯＣｂａｓｅ」レジスタによって指定される
／／ＴＯＣポインタを使用してロードする
ＬＢＺＸ  Ｒ３，Ｒ４，Ｒ３
／／ｂａｒ＋ｉｄｘからバイトをロード
ＢＬＲ
／／関数ｆｏｏから戻る
【０１４８】
ＴＯＣを参照するＴＯＣ読み取り専用レジスタを使用するためのコンパイルのフローの一例が、図３８を参照して説明される。この例において、ＴＯＣへの参照が要求されるかどうかについて判断がなされる、ＩＮＱＵＩＲＹ３０００。要求されない場合、処理は完了される。そうでなければ、ＴＯＣ読み取り専用レジスタはＴＯＣを参照するために使用される、ＳＴＥＰ３００２。例えば、演算（例えば、内部演算、命令など）はコンパイルされるコード内に含められ、ＴＯＣへのポインタを決定するために使用される。他の変形形態が可能である。
【０１４９】
例示の使用事例は以下の通りである。このより効率的なコードは、本発明の態様にしたがって生成される。
ｆｕｎｃ（）
｛
／／ｒ２にＴＯＣ値をロードする必要はない
・・・
ＬＴＬ・・・    ／／オペランドとしてＴＯＣベース・レジスタを使用
・・・
／／ＴＯＣ値を保存する必要はない
・・・
ｇ（）；
・・・
／／ｒ２のＴＯＣ値をリストアする必要はない
・・・
ＬＴＬ・・・          ／／オペランドとしてＴＯＣベース・レジスタを使用
・・・
【０１５０】
本発明の１つまたは複数の態様はコンピュータ技術に密接に結びついており、コンピュータ内の処理を促進し、そのパフォーマンスを改善する。本発明の１つまたは複数の態様に関し、コンピューティング環境内の処理を促進するための一実施形態のさらなる詳細を、図３９〜図４０を参照して説明する。
【０１５１】
図３９を参照すると、一実施形態において、参照データ構造へのポインタを与える命令がプロセッサによって取得される（３１００）。命令は実行され（３１０２）、実行することは、例えば、参照データ構造へのポインタについての値を決定することと（３１０４）、命令によって指定された場所（例えば、レジスタ）にその値を格納することとを含む（３１０６）。
【０１５２】
一例において、値を決定することは、値を決定するためにデータ構造（例えば、参照データ構造ポインタ・キャッシュ、または参照データ構造ポインタ値でポピュレートされたテーブル）のルックアップを実施することを含む（３１０８）。
【０１５３】
特定の例として、値を決定することは、例えば、値を含むエントリについて参照データ構造ポインタ・キャッシュをチェックすることと（３１１０）、エントリを見つけることに基づいて格納することを実施することとを含む（３１１２）。さらには、一例において、図４０を参照して、決定することは、プロセッサによって参照データ構造ポインタ・キャッシュ内に位置していない値に基づいてハンドラへのトラップを発生させること（３１２０）、ハンドラによって、参照データ構造ポインタ値でポピュレートされたデータ構造から値を取得すること（３１２２）、およびハンドラによって格納することを実施すること（３１２４）を含む。追加的に、値は参照データ構造ポインタ・キャッシュに格納される（３１２６）。
【０１５４】
別の例において、決定することは、値を決定し、値を格納するために、参照データ構造ポインタ・キャッシュ内に配置されていない値に基づいて、キャッシュ・ミス・ハンドリングを実施することをさらに含む（３１３０）。
【０１５５】
一実施形態において、命令を取得することに基づいて、プロセッサによりハンドラへのトラップが発生し（３１３２）、決定すること、および格納することが、ハンドラによって実施される（３１３４）。
【０１５６】
他の変形形態および実施形態が可能である。
【０１５７】
コンピューティング環境の他のタイプもまた本発明の１つまたは複数の態様を組み込んで使用することができ、エミュレーション環境を含むが、それに限定されず、その例を図４１を参照して説明する。この例において、コンピューティング環境２０は、例えば、ネイティブな中央処理装置（ＣＰＵ）２２、メモリ２４、および１つまたは複数の入力／出力デバイス、または、例えば１つもしくは複数のバス２８または他の接続あるいはその両方を介して互いに結合されるインターフェース２６、あるいはその組合せを含む。例として、コンピューティング環境２０は、インターナショナル・ビジネス・マシーンズ・コーポレーション（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒＰＣ（Ｒ）プロセッサまたはｐＳｅｒｉｅｓ（Ｒ）サーバ；またはインターナショナル・ビジネス・マシーンズ・コーポレーション、Ｉｎｔｅｌ、もしくは他の企業によって提供されるアーキテクチャに基づく他のマシンあるいはその組合せを含むことができる。
【０１５８】
ネイティブな中央処理装置２２は、その環境内の処理の間に使用される、１つもしくは複数の汎用レジスタ、または１つもしくは複数の特殊目的レジスタあるいはその両方などの、１つまたは複数のネイティブなレジスタ３０を含む。これらのレジスタは、あらゆる特定の時点における環境の状態を表す情報を含む。
【０１５９】
また、ネイティブな中央処理装置２２は、命令およびメモリ２４に記憶されるコードを実行する。特定の一例において、中央処理装置はメモリ２４に記憶されるエミュレータ・コード３２を実行する。このコードにより、あるアーキテクチャにおいて構成されたコンピューティング環境が、別のアーキテクチャをエミュレートすることができる。例えば、エミュレータ・コード３２によって、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）以外のアーキテクチャに基づくマシン、ＰｏｗｅｒＰＣ（Ｒ）プロセッサ、ｐＳｅｒｉｅｓ（Ｒ）サーバ、または他のサーバもしくはプロセッサなどが、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）をエミュレートすること、ならびにｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づいて開発されたソフトウェアおよび命令を実行することができる。
【０１６０】
エミュレータ・コード３２に関連するさらなる詳細を、図４２を参照して説明する。メモリ２４に記憶されるゲスト命令４０は、ネイティブなＣＰＵ２２のアーキテクチャ以外のアーキテクチャで実行されるよう開発されたソフトウェア命令（例えば機械命令に相関する）を含む。例えば、ゲスト命令４０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）のプロセッサで実行するように設計されていてもよいが、その代わりに例えばＩｎｔｅｌ（Ｒ）プロセッサであり得るネイティブなＣＰＵ２２上でエミュレートされる。一例において、エミュレータ・コード３２は、メモリ２４から１つまたは複数のゲスト命令４０を取得するための命令フェッチ・ルーチン４２を含み、任意選択で、取得された命令についてローカルのバッファリングを与える。また、取得されているゲスト命令のタイプを決定するため、およびゲスト命令を１つまたは複数の対応するネイティブな命令４６に解釈するための命令変換ルーチン４４を含む。この解釈には、例えばゲスト命令によって実施される関数を識別すること、およびその関数を実施するネイティブな命令を選ぶこと、が含まれる。
【０１６１】
さらには、エミュレータ・コード３２は、ネイティブな命令を実行させる、エミュレーション制御ルーチン４８を含む。エミュレーション制御ルーチン４８はネイティブなＣＰＵ２２に、１つまたは複数の以前に取得されたゲスト命令をエミュレートするネイティブな命令のルーチンを実行させることができ、そのような実行の最後に、制御をその命令フェッチ・ルーチンに戻して、次のゲスト命令またはゲスト命令のグループを取得することをエミュレートする。ネイティブな命令４６の実行は、データをメモリ２４からレジスタにロードすること、データをレジスタからメモリに格納し戻すこと、または解釈ルーチンによって決定されるようにいくつかのタイプの算術もしくは論理演算を実施することを含むことができる。
【０１６２】
それぞれのルーチンは、例えばソフトウェアに実装され、メモリに記憶されてネイティブな中央処理装置２２によって実行される。他の例において、ルーチンまたは演算の１つまたは複数は、ファームウェア、ハードウェア、ソフトウェアまたはそのいくつかの組合せに実装される。エミュレートされたプロセッサのレジスタは、ネイティブなＣＰＵのレジスタ３０を使用して、またはメモリ２４内の場所を使用して、エミュレートすることができる。一実施形態において、ゲスト命令４０、ネイティブな命令４６およびエミュレータ・コード３２は、同一のメモリに存在することができるか、または異なるメモリ・デバイス間に分散していてもよい。
【０１６３】
本明細書で使用される場合、ファームウェアには例えばマイクロコードまたはプロセッサのミリコードが含まれる。例えば、高次のマシン・コードの実装形態で使用されるハードウェアレベルの命令またはデータ構造あるいはその両方を含む。一実施形態において、例えば、典型的には信頼されたソフトウェアを含むマイクロコードとして提供されるプロプライエタリなコード、または基礎となるハードウェアに特有のマイクロコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【０１６４】
取得され、解釈され、実行されるゲスト命令４０は、例えば、本明細書で説明される命令の１つであることができる。あるアーキテクチャ（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ））の１つのものである、命令は、メモリからフェッチされ、解釈され、別のアーキテクチャ（例えば、ＰｏｗｅｒＰＣ（Ｒ）、ｐＳｅｒｉｅｓ（Ｒ）、Ｉｎｔｅｌ（Ｒ）など）のネイティブな命令４６のシーケンスとして表現される。次に、これらのネイティブな命令が実行される。
【０１６５】
１つまたは複数の態様は、クラウド・コンピューティングに関連することができる。
【０１６６】
本開示はクラウド・コンピューティングについての詳細な説明を含むが、本明細書で具陳される教示の実装形態はクラウド・コンピューティング環境に限定されないことを、前もって理解されたい。むしろ本発明の実施形態は、現在既知のまたは後に開発されるあらゆる他のタイプのコンピューティング環境と併せて実装することができる。
【０１６７】
クラウド・コンピューティングは、最小限の管理努力またはサービスのプロバイダとの対話で迅速にプロビジョニングおよびリリースされ得る、構成可能なコンピューティング・リソース（例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、記憶装置、アプリケーション、仮想マシン、およびサービス）の共有されるプールへの便利でオン・デマンドのネットワーク・アクセスを可能とするためのサービス提供のモデルである。このクラウド・モデルは、少なくとも５つの特徴、少なくとも３つのサービス・モデル、および少なくとも４つの展開モデルを含むことができる。
【０１６８】
特徴は以下の通りである：
オン・デマンド・セルフサービス：クラウド消費者は、サービスのプロバイダとの人間対話を要求することなく必要に応じて自動的に、サーバ時間およびネットワーク記憶装置などのコンピュータ機能を一方的にプロビジョニングすることができる。
幅広いネットワーク・アクセス：機能はネットワーク上で利用可能であり、異質なシンまたはシックなクライアントのプラットフォーム（例えば、携帯電話、ラップトップ、およびＰＤＡ）による使用を促進する標準的なメカニズムを通じてアクセスされる。
リソース・プール：プロバイダのコンピューティング・リソースは、マルチテナントのモデルを使用する複数の消費者にサービス提供するためにプールされ、異なる物理的および仮想的なリソースが要求にしたがって動的に割り当ておよび再割り当てされる。消費者が提供されるリソースの正確な場所についての制御または情報を一般的に持たない点で、場所の独立性の意味があるが、より高レベルの抽象化（例えば、国、州、またはデータセンタ）において場所を特定できることもある。
迅速な拡張性：機能は迅速かつ拡張可能にプロビジョニングすることができ、いくつかの場合において、自動的に、素早くスケール・アウトされ、迅速にリリースされて素早くスケール・インされる。消費者にとって、プロビジョニングのために利用可能な機能は、しばしば無制限なようで、いつでもいくらでも購入することができる。
サービスが計測される：クラウド・システムは、サービスのタイプ（例えば、記憶装置、処理、帯域幅、およびアクティブなユーザ・アカウント）に適当な抽象化のいくつかのレベルにおいて計測機能を活用することによりリソースの使用を自動的に制御し、かつ最適化する。リソースの使用は監視され、制御され、かつ報告され得、利用されるサービスのプロバイダおよび消費者の両方にとって透明性を与えている。
【０１６９】
サービス・モデルは以下の通りである：
ソフトウェアを提供するサービス（Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＳａａＳ））：消費者に提供される機能は、クラウド・インフラストラクチャで実行するプロバイダのアプリケーションを使用する。アプリケーションは、ウェブ・ブラウザなどのシン・クライアント・インターフェース（例えば、ウェブ・ベースの電子メール）を通じて様々なクライアント・デバイスからアクセス可能である。消費者は、ネットワーク、サーバ、オペレーティング・システム、記憶装置、またはさらには個々のアプリケーション機能を含む基礎となるクラウド・インフラストラクチャを管理または制御することはなく、例外として限定されたユーザ固有アプリケーションの構成設定が可能である。
プラットフォームを提供するサービス（Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ  （ＰａａＳ））：消費者に提供される機能は、プロバイダによって供給されるプログラミング言語およびツールを使用した消費者作成の、または取得されたアプリケーション作成のクラウド・インフラストラクチャに展開する。消費者は、ネットワーク、サーバ、オペレーティング・システム、または記憶装置を含む基礎となるクラウド・インフラストラクチャの管理または制御をしないが、展開されたアプリケーション、および場合によっては環境構成をホストするアプリケーションについての制御を有する。
インフラストラクチャを提供するサービス（Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＩａａＳ））：消費者に提供される機能は、消費者がオペレーティング・システムおよびアプリケーションを含み得る任意のソフトウェアを展開および実行することができる処理、記憶装置、ネットワーク、および他の基本的なコンピューティング・リソースをプロビジョニングする。消費者は、基礎となるクラウド・インフラストラクチャの管理または制御をしないが、オペレーティング・システム、記憶装置、展開されたアプリケーション、および場合によっては選択ネットワーク・コンポーネント（例えば、ホスト・ファイヤウォール）の限定された制御についての制御を有する。
【０１７０】
展開モデルは以下の通りである：
プライベート・クラウド：クラウド・インフラストラクチャはある組織のためだけに運用される。その組織またはサード・パーティによって管理され得、オンプレミスまたはオフプレミスで存在することができる。
コミュニティ・クラウド：クラウド・インフラストラクチャは、いくつかの組織によって共有され、共有される事案（例えば、ミッション、セキュリティ要件、ポリシ、およびコンプライアンス懸案事項）を有する特定のコミュニティをサポートする。その組織またはサード・パーティによって管理され得、オンプレミスまたはオフプレミスで存在することができる。
パブリック・クラウド：クラウド・インフラストラクチャは、一般公衆または大規模な業界団体に対して利用可能とされ、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド：クラウド・インフラストラクチャは、一意なエンティティのままである２つ以上のクラウド（プライベート、コミュニティ、またはパブリック）を組合せたものであるが、データおよびアプリケーションのポータビリティを可能にする標準化された、またはプロプライエタリな技術（例えば、クラウド間でロード・バランシングを行うためのクラウド・バースト）によって結合される。
【０１７１】
クラウド・コンピューティング環境は、無国籍、低い結合性、モジュール性、および意味論的な相互運用性に集中するサービス指向である。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
【０１７２】
次に図４３を参照すると、例示的なクラウド・コンピューティング環境５０が描写されている。示されるように、クラウド・コンピューティング環境５０は、例えば、携帯情報端末（ＰＤＡ）または携帯電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、または自動車コンピュータ・システム５４Ｎあるいはその組合せなどのクラウドの消費者によって使用されるローカルのコンピューティング・デバイスと通信することができる１つまたは複数のクラウド・コンピューティング・ノード１０を備える。ノード１０は互いに通信することができる。本明細書において上述のようなプライベート、コミュニティ、パブリック、もしくはハイブリッド・クラウドまたはその組合せなどの１つまたは複数のネットワークにおいて、それらは物理的または仮想的にグループ化することができる（図示せず）。これにより、クラウド・コンピューティング環境５０は、クラウドの消費者がローカルのコンピューティング・デバイスでリソースを維持する必要のない、インフラストラクチャ、プラットフォーム、またはソフトウェアあるいはその組合せをサービスとして与えることができる。図４３に示されるコンピューティング・デバイス５４Ａ〜Ｎのタイプは、図示的であることを意図されており、コンピューティング・ノード１０およびクラウド・コンピューティング環境５０は、あらゆるタイプのネットワーク上またはネットワーク・アドレス可能接続で（例えば、ウェブ・ブラウザを使用して）あるいはその両方で、あらゆるタイプのコンピュータ化されたデバイスと通信することができることが理解されよう。
【０１７３】
図４４を参照すると、クラウド・コンピューティング環境５０（図４３）によって提供される機能的な抽象化レイヤのセットが示されている。図４４に示されるコンポーネント、レイヤ、および機能は、図示的であることを意図されており、本発明の実施形態はそれに限定されないことがまず理解されるべきである。描写されるように、以下のレイヤおよび対応する機能が提供される。
【０１７４】
ハードウェアおよびソフトウェア・レイヤ６０は、ハードウェアおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例として、以下が挙げられる：メインフレーム６１、ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ（縮小命令セット・コンピュータ））アーキテクチャ・ベースのサーバ６２、サーバ６３、ブレード・サーバ６４、記憶デバイス６５、ならびにネットワークおよびネットワーク・コンポーネント６６。いくつかの実施形態において、ソフトウェア・コンポーネントはネットワーク・アプリケーション・サーバ・ソフトウェア６７、およびデータベース・ソフトウェア６８を含む。
【０１７５】
仮想化レイヤ７０は、仮想エンティティの以下の例を提供することができる抽象化レイヤを与える：仮想サーバ７１、仮想記憶装置７２、仮想プライベート・ネットワークを含む仮想ネットワーク７３、仮想アプリケーションおよびオペレーティング・システム７４、および仮想クライアント７５。
【０１７６】
一例において、管理レイヤ８０は以下で説明される機能を提供することができる。リソース・プロビジョニング８１は、クラウド・コンピューティング環境内でタスクを実施するために利用されるコンピューティング・リソースおよび他のリソースの動的な調達を提供する。計測および課金８２は、クラウド・コンピューティング環境内でリソースが利用される際の費用追跡、およびこれらのリソースの消費についての課金または請求書発行を提供する。一例において、これらのリソースはアプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド消費者およびタスクについての識別情報の検証、ならびにデータおよび他のリソースについての保護を提供する。ユーザ・ポータル８３はクラウド・コンピューティング環境へのアクセスを消費者およびシステム管理者に提供する。サービス水準管理８４は、要求されるサービス水準が満たされるように、クラウド・コンピューティング・リソースの割り当ておよび管理を提供する。サービス水準合意（ＳＬＡ）計画および遂行８５は、将来的な要求がＳＬＡにしたがって予期されるクラウド・コンピューティング・リソースについての事前申し合わせ、およびクラウド・コンピューティング・リソースの調達を提供する。
【０１７７】
ワークロード・レイヤ９０はクラウド・コンピューティング環境が利用され得る機能性の例を提供する。このレイヤからもたらされ得るワークロードおよび機能の例として以下が挙げられる：マッピングおよびナビゲーション９１、ソフトウェア開発およびライフサイクル管理９２、仮想授業教育配信９３、データ分析処理９４、トランザクション処理９５、およびｔａｂｌｅ  ｏｆ  ｃｏｎｔｅｎｔｓ（目次）ポインタ処理９６。
【０１７８】
本発明は、統合のあらゆる可能な技術的詳細レベルにおいてシステム、方法、またはコンピュータ・プログラム製品あるいはその組合せであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体を含むことができる。
【０１７９】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および記憶することができる有形のデバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイスまたは前述のあらゆる適切な組合せであってもよいが、それに限定はしない。コンピュータ可読記憶媒体のより具体的な例の非網羅的な列挙としては、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク、命令を記録されて有するパンチカードまたは溝に刻まれた構造などの機械的にエンコードされたデバイス、および前述のあらゆる適切な組合せを含む。本明細書において使用される場合、コンピュータ可読記憶媒体は、電波または他の自由に伝搬する電磁波、導波路もしくは他の送信媒体（例えば、光ファイバ・ケーブルを通過する光パルス）を介して伝搬する電磁波、または電線を介して送信される電気的信号など、一過性の信号そのものであると解釈されてはならない。
【０１８０】
本明細書において説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から、個別の計算／処理デバイスに、あるいは、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークもしくは無線ネットワークまたはその組合せなどのネットワークを介して、外部のコンピュータもしくは外部の記憶デバイスに、ダウンロードすることができる。ネットワークは、銅の送信ケーブル、光学送信ファイバ、無線送信、ルータ、ファイヤウォール、スイッチ、ゲートウェイ・コンピュータまたはエッジ・サーバあるいはその組合せを備えることができる。それぞれの計算／処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、個別の計算／処理デバイス内のコンピュータ可読記憶媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
【０１８１】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいはスモールトーク（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語などの手続き型プログラミング言語もしくは類似するプログラミング言語を含む１つまたは複数のプログラミング言語のあらゆる組合せで記述された、ソース・コードまたはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、すべてユーザのコンピュータ上で、一部はユーザのコンピュータ上でスタンドアロンのソフトウェア・パッケージとして、一部はユーザのコンピュータ上かつ一部は遠隔のコンピュータ上で、またはすべて遠隔のコンピュータ上もしくはサーバ上で、実行することができる。後者のシナリオにおいて、遠隔のコンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含むあらゆるタイプのネットワークを介してユーザのコンピュータに接続することができ、または接続は外部のコンピュータ（例えば、インターネット・サービス・プロバイダを使用するインターネットを介して）に対してなされてもよい。一部の実施形態において、例えば、プログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル論理アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して電子回路を個別化することができる。
【０１８２】
本発明の態様は本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照しながら本明細書において説明される。フローチャート図またはブロック図あるいはその両方のそれぞれのブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実装され得ることが理解されよう。
【０１８３】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／作用を実装する手段を作成すべく、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて機械を作るものであってよい。これらのコンピュータ可読プログラム命令はまた、命令を記憶して有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／作用の態様を実装するための命令を含む製造物品を備えるべく、コンピュータ、プログラマブル・データ処理装置、または他のデバイスあるいはその組合せに特定のやり方で機能するように指示することができるコンピュータ可読記憶媒体に記憶されてもよい。
【０１８４】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置、または他のデバイスで実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／作用を実装するべく、コンピュータ実装処理を作るために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作可能なステップを実施させるものであってもよい。
【０１８５】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態にしたがって、システム、方法、およびコンピュータ・プログラム製品の可能な実装形態の、アーキテクチャ、機能性、および動作を図示している。この点において、フローチャートまたはブロック図のそれぞれのブロックは、指定される論理機能を実装するための１つまたは複数の実行可能な命令を含む、命令のモジュール、セグメント、または部分を表現することができる。一部の代替的な実装形態において、ブロックにおいて示した機能は図面で示した順とは異なって発生してもよい。例えば、連続して示される２つのブロックは、実際には実質的に同時に実行されてもよく、またはブロックは関与する機能性によっては、時に逆の順で実行されてもよい。ブロック図またはフローチャート図あるいはその両方のそれぞれのブロック、およびブロック図またはフローチャート図あるいはその両方のブロックの組合せは、指定される機能もしくは作用を実施する、または特殊目的ハードウェアおよびコンピュータ命令の組合せを実行する、特殊目的ハードウェア・ベースのシステムによって実装され得ることにも留意されたい。
【０１８６】
上記に加え、１つまたは複数の態様が、顧客環境の管理を提供するサービス・プロバイダによって提供され得、提案され得、展開され得、管理され得、サービスなどされ得る。例えば、サービス・プロバイダは、１つまたは複数の顧客に１つまたは複数の態様を実施するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を、作成すること、維持すること、サポートすることなどができる。その見返りに、サービス・プロバイダは、例として購読または料金契約あるいはその両方の下で顧客から支払いを受け取ることができる。追加的に、または代替的に、サービス・プロバイダは、１つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ることができる。
【０１８７】
一態様において、アプリケーションは１つまたは複数の実施形態を実施するために展開することができる。一例として、アプリケーションを展開することは、１つまたは複数の実施形態を実施するよう動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０１８８】
さらなる態様として、コンピューティング・インフラストラクチャを、コンピュータ可読コードをコンピューティング・システムに統合することを含んで展開することができ、そこではコードをコンピューティング・システムと組合せて１つまたは複数の実施形態を実施することができる。
【０１８９】
なおさらなる態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャを統合するためのプロセスが提供され得る。コンピュータ・システムは、コンピュータ可読媒体を備え、そこではコンピュータ媒体は１つまたは複数の実施形態を含む。コードをコンピュータ・システムと組合せて１つまたは複数の実施形態を実施することができる。
【０１９０】
様々な実施形態を上で説明したが、これらはただの例である。例えば、他のアーキテクチャのコンピューティング環境は、１つまたは複数の実施形態を組み込んで使用するために使用することができる。さらには、異なる命令または演算を使用することができる。追加的に、異なるレジスタを使用することができるか、または他のタイプの指標（レジスタ番号以外）を指定することができるか、あるいはその両方である。多くの変形形態が可能である。
【０１９１】
さらには、他のタイプのコンピューティング環境が有益であり得、使用することができる。例として、プログラム・コードを記憶することまたは実行することあるいはその両方に適切なデータ処理システムが使用可能であり、直接的にまたは間接的にシステム・バスを介してメモリ要素に結合される少なくとも２つのプロセッサを含む。メモリ要素は、例えば、プログラム・コードの実際の実行の間に利用されるローカル・メモリ、バルク・ストレージ、および実行中にコードがバルク・ストレージから検索されなければならない回数を減らすために、少なくともいくつかのプログラム・コードの一時的な記憶装置を提供するキャッシュ・メモリを含む。
【０１９２】
入力／出力またはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、および他のメモリ媒体などを含むがそれに限定されない）は、直接的または仲介的なＩ／Ｏコントローラを通じてのいずれかで、システムに結合することができる。データ処理システムが仲介的なプライベートまたはパブリックなネットワークを通じて他のデータ処理システムまたはリモートのプリンタもしくは記憶デバイスに結合することができるようにするために、ネットワーク・アダプタをシステムに結合することもできる。利用可能なタイプのネットワーク・アダプタとしてはモデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードなどがある。
【０１９３】
本明細書で使用される用語は、特定の実施形態を説明するためだけのものであり、限定的であることを意図されていない。本明細書で使用される場合、コンテキストが明確にそうではないと指示しない限り、単数形「１つの（ａ）」、「１つの（ａｎ）」および「その（ｔｈｅ）」は複数形を同様に含むように意図されている。用語「含む（ｃｏｍｐｒｉｓｅ）」または「含んでいる（ｃｏｍｐｒｉｓｉｎｇ）」あるいはその両方は、本明細書で使用される場合、述べられた特徴、整数、ステップ、動作、要素、またはコンポーネントあるいはその組合せの存在を特定するが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、コンポーネントまたはそのグループあるいはその組合せの、存在または追加を排除しないことが、さらに理解されよう。
【０１９４】
以下の特許請求の範囲における、すべての機能付き手段（ミーンズ・プラス・ファンクション）または機能付き工程（ステップ・プラス・ファンクション）の要素の対応する構造、材料、作用、および等価物は、もしあれば、具体的に特許請求されるような他の特許請求される要素と組合せて機能を実施するために、あらゆる構造、材料、または作用を含むことを意図されている。例示および説明を目的として、１つまたは複数の実施形態の説明を提示してきたが、網羅的であること、または開示された形態に限定することは意図されていない。多くの修正形態および変形形態が当業者にとって明らかとなろう。実施形態は、様々な態様および実践的な用途を最良に説明するために選ばれ説明されたものであり、企図される特定の使用に適した様々な修正形態を伴う様々な実施形態を、当業者の他の者に理解させることができる。
【図１】
2020534596.tif 000003
【図２】
2020534596.tif 000004
【図３】
2020534596.tif 000005
【図４】
2020534596.tif 000006
【図５】
2020534596.tif 000007
【図６】
2020534596.tif 000008
【図７】
2020534596.tif 000009
【図８】
2020534596.tif 000010
【図９】
2020534596.tif 000011
【図１０】
2020534596.tif 000012
【図１１】
2020534596.tif 000013
【図１２】
2020534596.tif 000014
【図１３】
2020534596.tif 000015
【図１４】
2020534596.tif 000016
【図１５】
2020534596.tif 000017
【図１６】
2020534596.tif 000018
【図１７】
2020534596.tif 000019
【図１８】
2020534596.tif 000020
【図１９】
2020534596.tif 000021
【図２０】
2020534596.tif 000022
【図２１】
2020534596.tif 000023
【図２２】
2020534596.tif 000024
【図２３】
2020534596.tif 000025
【図２４】
2020534596.tif 000026
【図２５】
2020534596.tif 000027
【図２６】
2020534596.tif 000028
【図２７】
2020534596.tif 000029
【図２８】
2020534596.tif 000030
【図２９】
2020534596.tif 000031
【図３０】
2020534596.tif 000032
【図３１】
2020534596.tif 000033
【図３２】
2020534596.tif 000034
【図３３】
2020534596.tif 000035
【図３４】
2020534596.tif 000036
【図３５】
2020534596.tif 000037
【図３６】
2020534596.tif 000038
【図３７】
2020534596.tif 000039
【図３８】
2020534596.tif 000040
【図３９】
2020534596.tif 000041
【図４０】
2020534596.tif 000042
【図４１】
2020534596.tif 000043
【図４２】
2020534596.tif 000044
【図４３】
2020534596.tif 000045
【図４４】
2020534596.tif 000046
【国際調査報告】
2020534596.tif 000047
2020534596.tif 000048