(57)【要約】【課題】コード固有の関係のあるレジスタの予測を提供する。【解決手段】コードの単位が関係のあるレジスタの予測の候補であるかどうかに関する判定が、行われる。この判定することは、コードの単位に固有である、コード固有の指標を採用する。コードの単位が関係のあるレジスタの予測の候補であるということの決定に基づいて、関係のあるレジスタの指示が、選択された位置に読み込まれる。この読み込みに基づいて、投機的処理において、関係のあるレジスタが採用される。【選択図】図１１
2020531966.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品は、
処理回路によって読み取り可能な、方法を実行するための命令を格納しているコンピュータ可読記憶媒体を備えており、前記方法は、
コードの単位に関して、前記コードの単位が関係のあるレジスタの予測の候補であるかどうかを判定することであって、前記判定することが、前記コードの単位に固有である、コード固有の指標を採用する、前記判定することと、
前記コードの単位が関係のあるレジスタの予測の候補であるということの決定に基づいて、関係のあるレジスタの指示を、選択された位置に読み込むことと、
前記読み込みに基づいて、投機的処理において、前記関係のあるレジスタを採用することと
を含んでいる、コンピュータ・プログラム製品。
【請求項２】
コードの別の単位が、前記コードの別の単位が関係のあるレジスタの予測の候補であるかどうかを判定するために使用される、前記コードの別の単位に固有である別のコード固有の指標を有している、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記選択された位置が、マシン状態レジスタ、プログラム状態ワード、専用レジスタ、ページ・テーブル・エントリ、セグメント・テーブル・エントリ、および特定の制御レジスタから成る群から選択される、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記方法が、
コンテキスト切り替えが発生したことを決定することと、
前記コンテキスト切り替えに基づいて構成を更新することであって、前記構成が前記コード固有の指標を含んでいる、前記更新することと
をさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
前記方法が、
前記コード固有の指標が、前記コードの単位に具体的に結び付けられた位置にあるかどうかを判定することと、
前記コード固有の指標が、前記コードの単位に具体的に結び付けられていない位置にあるということの決定に基づいて、前記更新を実行することと
をさらに含んでいる、請求項４に記載のコンピュータ・プログラム製品。
【請求項６】
前記コードの単位に具体的に結び付けられた前記位置がページ・テーブル・エントリまたはセグメント・テーブル・エントリを含んでいる、請求項５に記載のコンピュータ・プログラム製品。
【請求項７】
前記コードの単位に具体的に結び付けられていない前記位置が制御レジスタを含んでいる、請求項５に記載のコンピュータ・プログラム製品。
【請求項８】
前記方法が、
ハードウェア例外が受け取られたことを決定することと、
前記ハードウェア例外に基づいて、構成情報を例外コンテキストに格納することであって、前記構成情報が前記コード固有の指標を含んでいる、前記格納することと
をさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記方法が、ハードウェア例外処理を終了することをさらに含んでおり、前記終了することが、
前記構成情報を前記例外コンテキストから取得することと、
前記構成情報を制御レジスタに格納することと
を含んでいる、請求項８に記載のコンピュータ・プログラム製品。
【請求項１０】
前記関係のあるレジスタが、ターゲット・アドレスの予測に基づいて、予測されたターゲット・アドレスを格納するために選択されたレジスタである、請求項１に記載のコンピュータ・プログラム製品。
【請求項１１】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムは、
メモリと、
前記メモリと通信するプロセッサと
を備えており、前記コンピュータ・システムは方法を実行するように構成されており、前記方法は、
コードの単位に関して、前記コードの単位が関係のあるレジスタの予測の候補であるかどうかを判定することであって、前記判定することが、前記コードの単位に固有である、コード固有の指標を採用する、前記判定することと、
前記コードの単位が関係のあるレジスタの予測の候補であるということの決定に基づいて、関係のあるレジスタの指示を、選択された位置に読み込むことと、
前記読み込みに基づいて、投機的処理において、前記関係のあるレジスタを採用することと
を含んでいる、コンピュータ・システム。
【請求項１２】
コードの別の単位が、前記コードの別の単位が関係のあるレジスタの予測の候補であるかどうかを判定するために使用される、前記コードの別の単位に固有である別のコード固有の指標を有している、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記方法が、
コンテキスト切り替えが発生したことを決定することと、
前記コンテキスト切り替えに基づいて構成を更新することであって、前記構成が前記コード固有の指標を含んでいる、前記更新することと
をさらに含んでいる、請求項１１に記載のコンピュータ・システム。
【請求項１４】
前記方法が、
前記コード固有の指標が、前記コードの単位に具体的に結び付けられた位置にあるかどうかを判定することと、
前記コード固有の指標が、前記コードの単位に具体的に結び付けられていない位置にあるということの決定に基づいて、前記更新を実行することと
をさらに含んでいる、請求項１３に記載のコンピュータ・システム。
【請求項１５】
前記方法が、
ハードウェア例外が受け取られたことを決定することと、
前記ハードウェア例外に基づいて、構成情報を例外コンテキストに格納することであって、前記構成情報が前記コード固有の指標を含んでいる、前記格納することと
をさらに含んでいる、請求項１１に記載のコンピュータ・システム。
【請求項１６】
コンピューティング環境内の処理を容易にするコンピュータ実装方法であって、前記コンピュータ実装方法は、
プロセッサによって、コードの単位に関して、前記コードの単位が関係のあるレジスタの予測の候補であるかどうかを判定することであって、前記判定することが、前記コードの単位に固有である、コード固有の指標を採用する、前記判定することと、
前記コードの単位が関係のあるレジスタの予測の候補であるということの決定に基づいて、関係のあるレジスタの指示を、選択された位置に読み込むことと、
前記読み込みに基づいて、投機的処理において、前記関係のあるレジスタを採用することと
を含んでいる、コンピュータ実装方法。
【請求項１７】
コードの別の単位が、前記コードの別の単位が関係のあるレジスタの予測の候補であるかどうかを判定するために使用される、前記コードの別の単位に固有である別のコード固有の指標を有している、請求項１６に記載のコンピュータ実装方法。
【請求項１８】
前記選択された位置が、マシン状態レジスタ、プログラム状態ワード、専用レジスタ、ページ・テーブル・エントリ、セグメント・テーブル・エントリ、および特定の制御レジスタから成る群から選択される、請求項１６に記載のコンピュータ実装方法。
【請求項１９】
コンテキスト切り替えが発生したことを決定することと、
前記コンテキスト切り替えに基づいて構成を更新することであって、前記構成が前記コード固有の指標を含んでいる、前記更新することと
をさらに含んでいる、請求項１６に記載のコンピュータ実装方法。
【請求項２０】
前記コード固有の指標が、前記コードの単位に具体的に結び付けられた位置にあるかどうかを判定することと、
前記コード固有の指標が、前記コードの単位に具体的に結び付けられていない位置にあるということの決定に基づいて、前記更新を実行することと
をさらに含んでいる、請求項１９に記載のコンピュータ実装方法。
【請求項２１】
前記コードの単位に具体的に結び付けられた前記位置がページ・テーブル・エントリまたはセグメント・テーブル・エントリを含んでいる、請求項２０に記載のコンピュータ実装方法。
【請求項２２】
前記コードの単位に具体的に結び付けられていない前記位置が制御レジスタを含んでいる、請求項２０に記載のコンピュータ実装方法。
【請求項２３】
ハードウェア例外が受け取られたことを決定することと、
前記ハードウェア例外に基づいて、構成情報を例外コンテキストに格納することであって、前記構成情報が前記コード固有の指標を含んでいる、前記格納することと
をさらに含んでいる、請求項１６に記載のコンピュータ実装方法。
【請求項２４】
前記方法が、ハードウェア例外処理を終了することをさらに含んでおり、前記終了することが、
前記構成情報を前記例外コンテキストから取得することと、
前記構成情報を制御レジスタに格納することと
を含んでいる、請求項２３に記載のコンピュータ実装方法。
【請求項２５】
前記関係のあるレジスタが、ターゲット・アドレスの予測に基づいて、予測されたターゲット・アドレスを格納するために選択されたレジスタである、請求項１６に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【０００１】
１つまたは複数の態様は、一般に、コンピューティング環境内の処理に関しており、特に、そのような処理を容易にすることに関している。
【背景技術】
【０００２】
多くのコンピューティング・システムは、アドレス自体の代わりに、次に実行する命令のアドレスの位置が分岐命令において指定される、レジスタ間接分岐を使用する。例えば、アドレスを含むレジスタの位置が指定される。
【０００３】
さらに、一般的に使用されるアプリケーション・バイナリ・インターフェイス（ＡＢＩ：application binary interfaces）に従って、最初に分岐アドレスが汎用レジスタ（ＧＰＲ：general purpose register）に読み込まれ、次に、専用制御レジスタ（ＳＰＲ：special purpose control register）に転送され、その後、レジスタ間接分岐を引き起こす。例えば、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒ命令セット・アーキテクチャで（ＩＳＡ：Instruction Set Architecture）は、分岐命令がカウンタ（ＣＴＲ）専用レジスタに分岐する。しかし、この専用レジスタは直接読み込まれず、汎用レジスタを介して読み込まれる。
【０００４】
カウンタ・レジスタは、読み取りが高価になる傾向がある。したがって、サブルーチン（ＢＣＴＲ）への分岐が実行されるときに、少なくとも１つのＡＢＩが、ＣＴＲの値が別のレジスタ（Ｒ１２など）に格納されるということを示し、呼び出される関数によって他のレジスタをベース・レジスタとして使用できるようにする。しかし、分岐予測が行われる場合、Ｒ１２の値が読み込まれる前に分岐アドレスが予測されることがあり、これが、データ・アクセスに応答して呼び出されるサブルーチンを停止させ、性能を制限する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March2015
【非特許文献２】“Power ISA(TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015
【発明の概要】
【発明が解決しようとする課題】
【０００６】
したがって、当技術分野において、前述の問題に対処する必要がある。
【課題を解決するための手段】
【０００７】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が克服され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するための命令を格納しているコンピュータ可読記憶媒体を備える。この方法は、例えば、コードの単位に関して、コードの単位が関係のあるレジスタの予測の候補であるかどうかを判定することを含む。この判定することは、コードの単位に固有である、コード固有の指標を採用する。コードの単位が関係のあるレジスタの予測の候補であるということの決定に基づいて、関係のあるレジスタの指示が、選択された位置に読み込まれる。この読み込みに基づいて、投機的処理において、関係のあるレジスタが採用される。
【０００８】
１つまたは複数の態様に関連するコンピュータ実装方法およびシステムも本明細書に記載され、請求される。さらに、１つまたは複数の態様に関連するサービスも本明細書に記載されており、請求されてよい。
【０００９】
１つの態様に従って、コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するための命令を格納しているコンピュータ可読記憶媒体を備える。この方法は、コードの単位に関して、コードの単位が関係のあるレジスタの予測の候補であるかどうかを判定することであって、この判定することが、コードの単位に固有である、コード固有の指標を採用する、判定することと、コードの単位が関係のあるレジスタの予測の候補であるということの決定に基づいて、関係のあるレジスタの指示を、選択された位置に読み込むことと、この読み込みに基づいて、投機的処理において、関係のあるレジスタを採用することとを含む。
【００１０】
別の態様に従って、コンピューティング環境内の処理を容易にするためのコンピュータ・システムが提供される。このコンピュータ・システムは、メモリと、このメモリと通信するプロセッサとを備えており、このコンピュータ・システムは方法を実行するように構成される。その方法は、コードの単位に関して、コードの単位が関係のあるレジスタの予測の候補であるかどうかを判定することであって、この判定することが、コードの単位に固有である、コード固有の指標を採用する、判定することと、コードの単位が関係のあるレジスタの予測の候補であるということの決定に基づいて、関係のあるレジスタの指示を、選択された位置に読み込むことと、この読み込みに基づいて、投機的処理において、関係のあるレジスタを採用することとを含む。
【００１１】
別の態様に従って、コンピューティング環境内の処理を容易にするためのコンピュータ実装方法が提供される。このコンピュータ実装方法は、プロセッサによって、コードの単位に関して、コードの単位が関係のあるレジスタの予測の候補であるかどうかを判定することであって、この判定することが、コードの単位に固有である、コード固有の指標を採用する、判定することと、コードの単位が関係のあるレジスタの予測の候補であるということの決定に基づいて、関係のあるレジスタの指示を、選択された位置に読み込むことと、この読み込みに基づいて、投機的処理において、関係のあるレジスタを採用することとを含む。
【００１２】
その他の特徴および利点が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、請求される態様の一部と見なされる。
【００１３】
１つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に指摘され、明確に請求される。前述の内容、ならびに１つまたは複数の態様の特徴および利点は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【００１４】
【図１】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例を示す図である。
【図２】本発明の１つまたは複数の態様に従って、図１のプロセッサの詳細をさらに示す図である。
【図３】本発明の１つまたは複数の態様に従って使用される命令実行パイプラインの一例の詳細をさらに示す図である。
【図４】本発明の態様に従って、図１のプロセッサの一例の詳細をさらに示す図である。
【図５】本発明の態様に従って、レジスタ間接分岐の予測に関連付けられた処理の一例を示す図である。
【図６】本発明の態様に従って、予測の正しさをチェックする一例を示す図である。
【図７】本発明の態様に従って、予測の正しさをチェックする別の例を示す図である。
【図８】本発明の態様に従って、レジスタ間接分岐および関係のあるレジスタの予測に関連付けられた処理の一例を示す図である。
【図９】本発明の態様に従って、予測の正しさをチェックする別の例を示す図である。
【図１０】本発明の態様に従って、関係のあるレジスタに関する予測の正しさをチェックする例を示す図である。
【図１１】本発明の態様に従って、外部から示された関係のあるレジスタの予測（ＥＩＡＲＰ：externallyindicated affiliated register prediction）に関連付けられた処理の一例を示す図である。
【図１２】本発明の態様に従って、コンテキスト切り替えおよび外部から示された関係のあるレジスタの予測に関連付けられた処理の一例を示す図である。
【図１３】本発明の態様に従って、ハードウェア例外／割り込み処理に移行することに関連付けられた処理の一例を示す図である。
【図１４】本発明の態様に従って、ハードウェア例外／割り込み処理を終了することに関連付けられた処理の一例を示す図である。
【図１５】本発明の態様に従って、レジスタ間接分岐の予測および外部から示された関係のあるレジスタの予測の使用に関連付けられた処理の一例を示す図である。
【図１６】本発明の態様に従って、レジスタ間接分岐の予測に関連付けられた処理および関係のあるレジスタを予測できるかどうかを予測するための処理の一例を示す図である。
【図１７】本発明の態様に従って、予測の正しさをチェックする別の例を示す図である。
【図１８】本発明の態様に従って、関係のあるレジスタに関する予測の正しさをチェックする別の例を示す図である。
【図１９】本発明の態様に従って、関係のあるレジスタに関する予測の正しさをチェックするさらに別の例を示す図である。
【図２０】本発明の態様に従って、レジスタ間接分岐予測に関連付けられた処理および予測できる関係のあるレジスタを動的に選択するための処理の一例を示す図である。
【図２１】本発明の態様に従って、関係のあるレジスタに関する予測の正しさをチェックして予測器を更新する例を示す図である。
【図２２】本発明の態様に従って、融合シーケンスを認識することに関連付けられた処理の一例を示す図である。
【図２３】本発明の態様に従って、外部から示された関係のあるレジスタの予測および融合に基づく関係シーケンスに関連付けられた処理の一例を示す図である。
【図２４】本発明の態様に従って、融合に基づく関係のあるシーケンスを含む分岐予測を実行することに関連付けられた処理の一例を示す図である。
【図２５】本発明の態様に従って、命令が関係の作成または破壊であるかどうかを判定することに関連付けられた処理の一例を示す図である。
【図２６】本発明の態様に従って、関係のある導出されたレジスタを予測することに関連付けられた処理の一例を示す図である。
【図２７】本発明の態様に従って、関係のある導出されたレジスタに関する予測の正しさをチェックする一例を示す図である。
【図２８】本発明の態様に従って、分岐予測および融合に基づく関係のある導出されたシーケンスに関連付けられた処理の一例を示す図である。
【図２９】本発明の態様に従って、コンピューティング環境内の処理を容易にする一実施形態を示す図である。
【図３０】本発明の態様に従って、コンピューティング環境内の処理を容易にする一実施形態を示す図である。
【図３１】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【図３２】図３１のメモリの詳細をさらに示す図である。
【図３３】クラウド・コンピューティング環境の一実施形態を示す図である。
【図３４】抽象モデル・レイヤの一例を示す図である。
【発明を実施するための形態】
【００１５】
１つまたは複数の態様に従って、レジスタ間接分岐に使用されるレジスタの内容の値（例えば、ターゲット・アドレス・レジスタのターゲット・アドレス）を予測することに基づいて、予測された値がレジスタ（例えば、ターゲット・アドレス・レジスタ、本明細書では予測されたレジスタとも呼ばれる）に格納される。その後、このレジスタは、将来使用するために使用可能である。例えば、ターゲット・アドレス・レジスタの内容が更新され、予測命令フェッチと共に使用可能になる。ターゲット・アドレスが予測された場合、そのターゲット・アドレスは、命令フェッチと、他のもの（例えば、他の命令または動作）にアクセスできるレジスタまたはその他の選択された位置への格納との両方に、同時に使用可能になる。これによって他のものは、予測された値を使用できるようになる。
【００１６】
一例として、予測されたレジスタまたは位置は、予測に基づいて自動的に更新されるプログラム・カウンタ以外のレジスタまたは位置である。例えば、予測されたレジスタまたは位置は、カウンタ（ＣＴＲ）レジスタまたはその他の選択されたレジスタ／位置などの、プログラム・カウンタに加えたレジスタまたは位置である。ターゲット・アドレスは、予測された場合、予測されたレジスタに同時に使用可能になり、１つの機能がレジスタ間接分岐を処理し、予測されたターゲット・アドレスを格納する。例えば、ターゲット・アドレスは、（例えば、ハードウェア／ソフトウェア・インターフェイスでの）１つの設計された命令の制約の範囲内である。値を予測されたレジスタ／位置にコピーまたは移動するために、別の設計された命令は不要である。
【００１７】
別の態様では、レジスタの内容の値を予測し、予測された値を予測されたレジスタに格納することに加えて、予測された値が別の位置（処理を容易にするために使用される別のレジスタなど）にも格納される。この他の位置またはレジスタは、本明細書では、他の命令によって使用される予測された値を格納する関係のある位置または関係のあるレジスタと呼ばれる。関係のあるレジスタは、予測されたレジスタに関連付けられたレジスタである。例えば、関係のあるレジスタは、別のレジスタ（例えば、予測されたレジスタ）との既知の関係を有しており、他のレジスタのコピーなどとして知られている。１つの特定の例では、両方のレジスタが命令によって参照されてよい。一例として、ＭＴＣＴＲ  Ｒ１２命令は、Ｒ１２の内容をＣＴＲレジスタに移動する。したがって、Ｒ１２はＣＴＲと関係がある。そのようなその他の例が存在する。
【００１８】
さらに別の態様では、関係のあるレジスタが予測において使用されるかどうかを指定するための制御が提供される。関係のあるレジスタが予測される場合、この制御は、関係のあるレジスタの指示（例えば、レジスタ番号）も提供する。この制御は、例えば、コードに固有であり、例として、コードの単位（アプリケーション、プロセス、関数、モジュール、または動的に共有されるオブジェクト（例えば、ライブラリ）など）ごとに有効化／無効化されてよい。
【００１９】
さらに別の態様では、処理をさらに容易にするために関係のある導出されたレジスタ（または他の位置）に格納される値を予測するために、予測された値が使用されてよい。関係のある導出されたレジスタは、その内容が関係のあるレジスタの内容から導出されるレジスタである。例えば、選択されたレジスタ（Ｒ２など）に格納される値を取得するために、Ｒ１２の内容がオフセットと共に使用されることがある。したがって、この例では、Ｒ２が関係のある導出されたレジスタである。その他の例も存在する。
【００２０】
さらに、１つまたは複数の態様では、レジスタ間接分岐において使用され、予測されることがある１つまたは複数のレジスタを指定する命令の特定のシーケンスが認識されてよく、それに基づいて、命令の特定のシーケンスの動作を実行する動作のシーケンスが、処理を容易にするために融合されてよい。すなわち、１つまたは複数の命令を動作の単一の複合プロセスに結合するために、融合プロセスが実行される。すなわち、命令のシーケンスが、全体として扱われる。
【００２１】
本明細書では、さまざまな態様が説明される。さらに、本発明の態様の思想を逸脱することなく、多くの変形が可能である。本明細書ではさまざまな態様および特徴が説明されており、特に矛盾がない限り、各態様および特徴が任意の他の態様または特徴と組み合わせられてよいということに、注意するべきである。
【００２２】
本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態が、図１を参照して説明される。１つの例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づく。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の一実施形態は、“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。Ｚ／ＡＲＣＨＩＴＥＣＴＵＲＥは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（米国ニューヨーク州アーモンク）の登録商標である。
【００２３】
別の例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づく。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の一実施形態は、“Power IS(TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。ＰＯＷＥＲ  ＡＲＣＨＩＴＥＣＴＵＲＥは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（米国ニューヨーク州アーモンク）の登録商標である。
【００２４】
コンピューティング環境は、Ｉｎｔｅｌ（Ｒ）  ｘ８６アーキテクチャを含むが、これに限定されない、他のアーキテクチャに基づいてもよい。その他の例も存在する。
【００２５】
図１に示されているように、コンピューティング環境１００は、例えば、汎用コンピューティング・デバイスの形態で示されるコンピュータ・システム１０２を含んでいる。コンピュータ・システム１０２は、１つまたは複数のバスまたはその他の接続１１０あるいはその両方を介して互いに結合された、１つもしくは複数のプロセッサまたはプロセッシング・ユニット１０４（例えば、中央処理装置（ＣＰＵ：central processing units））、メモリ１０６（例として、メイン・メモリまたはストレージと呼ばれる）、および１つまたは複数の入出力（Ｉ／Ｏ：input/output）インターフェイス１０８を含んでよいが、これらに限定されない。
【００２６】
バス１１０は、メモリ・バスもしくはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサもしくはローカル・バスを含む、任意の複数の種類のバス構造のうちの１つまたは複数を表す。例として、そのようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）、ＭＣＡ（MicroChannel Architecture）、ＥＩＳＡ（Enhanced ISA）、ＶＥＳＡ（Video Electronics Standards Association）ローカル・バス、およびＰＣＩ（Peripheral Component Interconnects）を含むが、これらに限定されない。
【００２７】
メモリ１０６は、例えば、プロセッサ１０４のローカル・キャッシュ１２２に結合されてよい、共有キャッシュなどのキャッシュ１２０を含んでよい。さらに、メモリ１０６は、１つもしくは複数のプログラムまたはアプリケーション１３０、オペレーティング・システム１３２、および１つまたは複数のコンピュータ可読プログラム命令１３４を含んでよい。コンピュータ可読プログラム命令１３４は、本発明の態様の実施形態の機能を実行するように構成されてよい。
【００２８】
コンピュータ・システム１０２は、例えばＩ／Ｏインターフェイス１０８を介して、１つもしくは複数の外部デバイス１４０、１つもしくは複数のネットワーク・インターフェイス１４２、または１つもしくは複数のデータ・ストレージ・デバイス１４４、あるいはその組み合わせと通信してもよい。外部デバイスの例としては、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディスプレイなどが挙げられる。ネットワーク・インターフェイス１４２は、コンピュータ・システム１０２が、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、一般的な広域ネットワーク（ＷＡＮ：wide area network）、またはパブリック・ネットワーク（例えば、インターネット）、あるいはその組み合わせなどの１つまたは複数のネットワークと通信できるようにし、他のコンピューティング・デバイスまたはシステムとの通信を実現する。
【００２９】
データ・ストレージ・デバイス１４４は、１つもしくは複数のプログラム１４６、１つもしくは複数のコンピュータ可読プログラム命令１４８、またはデータ、あるいはその組み合わせなどを格納してよい。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成されてよい。
【００３０】
コンピュータ・システム１０２は、取り外し可能／取り外し不可、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体を含むか、またはそのようなにコンピュータ・システム・ストレージ媒体に結合されるか、あるいはその両方であってよい。例えば、コンピュータ・システム１０２は、取り外し不可、不揮発性の磁気媒体（通常は、「ハード・ドライブ」と呼ばれる）、取り外し可能、不揮発性の磁気ディスク（例えば、「フロッピー・ディスク」）に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、またはＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、もしくはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブ、あるいはその組み合わせを含むか、またはこれらに結合されるか、あるいはその両方であってよい。その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム１０２と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【００３１】
コンピュータ・システム１０２は、他の多数の汎用もしくは専用のコンピューティング・システム環境または構成で運用されてよい。コンピュータ・システム１０２での使用に適した周知のコンピューティング・システム、環境、または構成、あるいはその組み合わせの例としては、パーソナル・コンピュータ（ＰＣ：personal computer）システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークＰＣ、マイクロコンピュータ・システム、メインフレーム・コンピュータ・システム、およびこれらの任意のシステムまたはデバイスを含む分散クラウド・コンピューティング環境などが挙げられるが、これらに限定されない。
【００３２】
さらに、プロセッサ１０４の一例に関する詳細が、図２を参照してさらに説明される。プロセッサ１０４は、命令を実行するために使用される複数の機能コンポーネントを含む。これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント１５０と、フェッチされた命令をデコードするため、およびデコードされた命令のオペランドを取得するための命令デコード・ユニット１５２と、デコードされた命令を実行するための命令実行コンポーネント１５４と、必要な場合に、命令を実行するためにメモリにアクセスするためのメモリ・アクセス・コンポーネント１５６と、実行された命令の結果を提供するための書き戻しコンポーネント１６０とを含む。これらのコンポーネントのうちの１つまたは複数は、本発明の１つまたは複数の態様に従って、下でさらに説明されているように、予測命令フェッチまたは処理あるいはその両方１６６に関連付けられた１つもしくは複数の命令または動作あるいはその両方を実行するために使用されてよい。
【００３３】
プロセッサ１０４は、一実施形態では、機能コンポーネントのうちの１つもしくは複数によって使用される１つまたは複数のレジスタ１６８も含む。プロセッサ１０４は、本明細書で提供されている例よりも多いコンポーネント、少ないコンポーネント、またはその他のコンポーネント、あるいはその組み合わせを含んでよい。
【００３４】
プロセッサ１０４の実行パイプラインに関する詳細が、図３を参照してさらに説明される。本明細書では、パイプラインのさまざまな処理段階が図に示されて説明されているが、本発明の態様の思想から逸脱することなく、追加の段階、より少ない段階、またはその他の段階、あるいはその組み合わせが使用されてよいということが理解されるであろう。
【００３５】
図３を参照すると、１つの実施形態では、命令が命令キューからフェッチされ（１７０）、命令の分岐予測１７２またはデコーディング１７４あるいはその両方が実行されてよい。デコードされた命令が、一緒に処理される命令のグループ１７６に追加されてよい。グループ化された命令がマッパー１７８に提供され、マッパー１７８が、依存関係を決定し、リソースを割り当て、命令／動作のグループを適切な発行キューにディスパッチする。例えば分岐、読み込み／格納、浮動小数点、固定小数点、ベクトルなどを含む、異なる種類の実行ユニットに対して、１つまたは複数の発行キューが存在する。発行段階１８０の間に、命令／動作が適切な実行ユニットに発行される。いずれかのレジスタが読み取られて（１８２）、そのソースを取り出し、実行段階１８４の間に命令／動作が実行される。示されているように、この実行は、分岐の場合、例えば、読み込み（ＬＤ）もしくは格納（ＳＴ）、固定小数点演算（ＦＸ）、浮動小数点演算（ＦＰ）、またはベクトル演算（ＶＸ）であってよい。書き戻し段階１８６の間に、いずれかの結果が適切なレジスタに書き込まれる。その後、命令が完了する（１８８）。割り込みまたはフラッシュ１９０が存在する場合、処理が命令フェッチ１７０に戻ってよい。
【００３６】
さらに、１つの例では、レジスタの保存／復元において使用されてよいレジスタ名変更ユニット１９２が、デコード・ユニットに結合される。
【００３７】
プロセッサに関するその他の詳細が、図４を参照して説明される。１つの例では、プロセッサ１０４などのプロセッサは、予測ハードウェア、レジスタ、キャッシュ、デコーダ、命令順序付けユニット、および命令実行ユニットを例として含んでよい、パイプライン型プロセッサである。予測ハードウェアは、例えば、ローカル分岐履歴テーブル（ＢＨＴ：branch history table）１０５ａ、グローバル分岐履歴テーブル（ＢＨＴ）１０５ｂ、およびグローバル・セレクタ１０５ｃを含む。予測ハードウェアは、次の命令フェッチのアドレスを有する命令フェッチ・アドレス・レジスタ（ＩＦＡＲ：instruction fetch address register）１０７を介してアクセスされる。
【００３８】
同じアドレスが、「フェッチ・グループ」と呼ばれる複数の命令をフェッチしてよい命令キャッシュ１０９にも提供される。ディレクトリ１１１が命令キャッシュ１０９に関連付けられる。
【００３９】
キャッシュおよび予測ハードウェアは、同じアドレスを使用してほぼ同時にアクセスされる。予測ハードウェアが、フェッチ・グループ内の命令に使用できる予測情報を含んでいる場合、その予測が命令順序付けユニット（ＩＳＵ：instruction sequencing unit）１１３に転送され、次に、命令順序付けユニットが、実行するための命令を実行ユニットに発行する。この予測は、分岐ターゲット計算１１５および分岐ターゲット予測ハードウェア（リンク・レジスタ予測スタック１１７ａおよびカウント・レジスタ・スタック１１７ｂなど）と連動してＩＦＡＲ１０７を更新するために使用されてよい。予測情報を使用できないが、１つまたは複数の命令デコーダ１１９がフェッチ・グループ内で分岐命令を検出した場合、そのフェッチ・グループに関する予測が作成される。予測された分岐が、分岐情報キュー（ＢＩＱ：branch information queue）１２５などの予測ハードウェアに格納され、ＩＳＵ１１３に転送される。
【００４０】
ＩＳＵ１１３によって分岐実行ユニット（ＢＲＵ：branch execution unit）１２１に発行された命令に応答して、分岐実行ユニット１２１が動作する。ＢＲＵ１２１は、条件レジスタ（ＣＲ：condition register）ファイル１２３に対する読み取りアクセス権限を有する。分岐実行ユニット１２１は、分岐スキャン論理（branch scan logic）によって分岐情報キュー１２５に格納された情報にアクセスして、分岐予測の成功を決定することができ、マイクロプロセッサによってサポートされる１つまたは複数のスレッドに対応する命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）１０７に、動作可能なように結合される。少なくとも１つの実施形態に従って、ＢＩＱエントリが識別子によって（例えば、分岐タグ（ＢＴＡＧ：branch tag）によって）関連付けられ、識別される。ＢＩＱエントリに関連付けられた分岐が完了したときに、そのことがＢＩＱエントリにマーク付けされる。ＢＩＱエントリはキュー内で維持され、それらが、完了した分岐に関連付けられた情報を含んでいるとしてキュー・エントリにマーク付けされるときに、最も古いキュー・エントリの割り当てが順次解除される。ＢＲＵ１２１は、ＢＲＵ１２１が分岐予測ミスを発見したときに予測器の更新を引き起こすように、動作可能なようにさらに結合される。
【００４１】
命令が実行されるときに、ＢＲＵ１２１が、予測が誤っているかどうかを検出する。予測が誤っている場合は、予測が更新される。この目的のために、プロセッサは予測器更新論理１２７も含んでいる。予測器更新論理１２７は、分岐実行ユニット１２１からの更新指示に応答して、ローカルＢＨＴ１０５ａ、グローバルＢＨＴ１０５ｂ、およびグローバル・セレクタ１０５ｃのうちの１つまたは複数に含まれる配列エントリを更新するように構成される。予測器ハードウェア１０５ａ、１０５ｂ、および１０５ｃは、命令フェッチおよび予測動作によって使用される、読み取りポートと異なる書き込みポートを有してよく、または単一の読み取り／書き込みポートが共有されてよい。予測器更新論理１２７は、リンク・スタック１１７ａおよびカウント・レジスタ・スタック１１７ｂに動作可能なようにさらに結合されてよい。
【００４２】
ここで条件レジスタ・ファイル（ＣＲＦ：condition register file）１２３を参照すると、ＣＲＦ１２３は、ＢＲＵ１２１によって読み取りアクセス可能であり、固定小数点ユニット（ＦＸＵ：fixed point unit）１４１、浮動小数点ユニット（ＦＰＵ：floating point unit）１４３、およびベクトル・マルチメディア拡張ユニット（ＶＭＸＵ：vector multimedia extension unit）１４５を含むが、これらに限定さない、実行ユニットによって書き込み可能である。条件レジスタ論理（ＣＲＬ：condition register logic）実行ユニット１４７（ＣＲＵとも呼ばれる）および専用レジスタ（ＳＰＲ：special purpose register）処理論理１４９は、条件レジスタ・ファイル（ＣＲＦ）１２３に対する読み取りおよび書き込みアクセス権限を有する。ＣＲＵ１４７は、ＣＲＦファイル１２３に格納された条件レジスタに対して論理演算を実行する。ＦＸＵ１４１は、ＣＲＦ１２３に対して書き込み更新を実行することができる。
【００４３】
プロセッサ１０４は、読み込み／格納ユニット１５１、ならびにさまざまなマルチプレクサ１５３およびバッファ１５５に加えて、アドレス変換テーブル１５７およびその他の回路をさらに含む。
【００４４】
プロセッサ１０４は、ハードウェア・レジスタを使用して情報を格納するプログラム（アプリケーションとも呼ばれる）を実行する。関数、サブルーチン、またはその他の種類のルーチンなどのルーチンを呼び出すプログラムは、呼び出し元（すなわち、ルーチンを呼び出すプログラム）によって使用されるレジスタを保存し、呼び出し先（呼び出されるルーチン）から戻ったときに、それらのレジスタを復元する責任を負う。同様に、呼び出し先は、下で提供されるコード例に示されているように、呼び出し先が使用するレジスタを保存／復元する責任を負う。
【００４５】
さらに、多くのコンピューティング・システムは、データまたはコードあるいはその両方のアドレスを指定するために、ベース・レジスタを使用する。例えば、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎによって提供されるＳｙｓｔｅｍ／３６０（Ｒ）（Ｓｙｓｔｅｍ  ｚ（Ｒ））は、分岐およびリンク・レジスタ（ＢＡＬＲ：branch and link register）命令およびＵＳＩＮＧディレクティブを使用して、データおよびコードのアドレスを指定するためのインデックスを作成する。別の例として、Ｐｏｗｅｒシステムは、分岐およびリンク（ＢＬ：branch and link）命令をオフセット（例えば、ＢＬ．  ＋４）と共に使用して、位置独立コード（ＰＩＣ：position independent code）においてデータのアドレス指定に使用するためのレジスタ内のプログラム・カウンタ（ＰＣ：program counter）アドレスを作成する。他のシステムも同様に、データおよびコードのアドレスを指定するためにベース・レジスタを使用する。
【００４６】
示されているように、アドレス指定能力を確立するために、異なるシーケンスが使用されている。例えば、呼び出し先関数においてプログラム・カウンタ（ＰＣ）値が読み込まれるか、または提供された関数呼び出しアドレスが使用されるシーケンスが使用されている。このシーケンスは、現在の命令アドレスによって表される既知の値を提供する能力を与えるが、高価なシーケンスを使用することがある。反対に、指定された関数エントリ・アドレスを使用すると、シーケンスがより単純になるが、エントリ・ポイント・アドレスを確立するために、長い依存関係の連鎖に依存する可能性がある。以下の例は、アドレス指定能力を確立するために前に使用されたシーケンスを表している。
【００４７】
Ｓｙｓｔｅｍ／３６０（Ｒ）（Ｓｙｓｔｅｍ  ｚ（Ｒ））のコードの一例が下に示されている。以下のＳｙｓｔｅｍ／３６０（Ｒ）のアセンブリ・コードは、Ｓｙｓｔｅｍ／３６０アーキテクチャに基づくメインフレーム・システム内でサブルーチンを呼び出すために一般に使用されるサブルーチン呼び出しの構造を示している。
…
ｌ        ｒ１５＝Ａ（ｓｕｂｒ）    ！サブルーチンｓｕｂｒのアドレスをｒ１５に読み込む
ｂａｌｒ        ｒ１４，ｒ１５    ！復帰アドレスをｒ１４に保存して、
…                                  ！ｐｃをｒ１５の内容に設定する
【００４８】
以下のＳｙｓｔｅｍ／３６０（Ｒ）（Ｓｙｓｔｅｍ  ｚ（Ｒ））のアセンブリ・コードは、Ｓｙｓｔｅｍ／３６０（Ｒ）アーキテクチャに基づくメインフレーム・システム内で呼び出されるサブルーチン呼び出しの構造を示している。
ｓｕｂｒ：
ｓｔｍ          ｒ１４，  ｒ１２，  １２  （ｒ１３）    ！複数のレジスタを呼び出し元の
！保存領域（ｒ１４、ｒ１５、ｒ０、…、ｒ１２）に格納する
ｂａｌｒ  ｒ１２，  ０    ！ベース・レジスタとして使用するために、アドレスをｒ１２に設定する
ｕｓｉｎｇ    ＊，  ｒ１２    ！ｒ１２を使用することをアセンブラに伝えるための疑似命令
ｌａ    ｒ１１，  ｓａｖｅａｒｅａ    ！自分の保存領域のアドレスを読み込む
ｓｔ    ｒ１３，  ｓａｖｅａｒｅａ＋４    ！呼び出し元の保存領域のアドレスを格納する
ｓｔ    ｒ１１，  ８  （ｒ１３）    ！自分の保存領域のアドレスを呼び出し元の保存領域に格納する
…サブルーチンの本体…
…ｒ０は、存在する場合、復帰コードに使用される…
ｌ    ｒ１３，  ｓａｖｅａｒｅａ＋４    ！呼び出し元の保存領域のアドレスを読み込む
ｌｍ    ｒ１４，  ｒ１２，  １２  （ｒ１３）    ！複数のレジスタを呼び出し元の保存領域
！（ｒ１４、ｒ１５、ｒ０、…、ｒ１２）から読み込む
ｂｒ    ｒ１４    ！呼び出し元に戻る
【００４９】
さらに、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づくシステムのコードの一例が下に示されている。以下のＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）のアセンブリ・コードは、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づくＰｏｗｅｒシステム内でサブルーチンを呼び出すために一般に使用されるサブルーチン呼び出しの構造を示している。
…
ｌｗｚ        ｒ１５＝Ａ（ｓｕｂｒ）    ！サブルーチンｓｕｂｒのアドレスをｒ１５に読み込む
ｍｔｃｔｒ    ｒ１５    ！ｃｔｒ  ＝  ｒ１５
ｂｃｔｒｌ    ！復帰アドレスをｌｒに保存して、
！ｐｃをｃｔｒの内容に設定する
…
【００５０】
以下のＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）のアセンブリ・コードは、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づくＰｏｗｅｒシステム内で呼び出されるサブルーチン呼び出しの構造を示している。
ｓｕｂｒ：
ｓｔｍｗ    ｒ１０，ｒ４，１２（ｒ１３）    ！複数のレジスタを呼び出し元の保存領域
！（ｒ１４、ｒ１５、ｒ０、…、ｒ１２）に格納する
ｍｆｌｒ    ｒ０    ！ｌｒを保存する
ｂｌ    ．＋４    ！ＰＣをＬＲに取得する
ｂａｓｅ：    ｍｆｌｒ    ｒ１２    ！ｒ１２内のアドレスをベース・レジスタとして使用する
ｍｔｌｒ    ｒ０    ！ＬＲを復元する
…サブルーチンの本体…
ｌｗｚ    ｒ１１，  （ｓａｖｅａｒｅａ−ｂａｓｅ）  ＠１，  ｒ１２    ！データを
！グローバル・オフセット・テーブル（ＧＯＴ：Global Offset Table）から読み込む
…ｒ０は、存在する場合、復帰コードに使用される…
ｂｌｒ    ！呼び出し元に戻る
【００５１】
上記の例のように、プログラム・カウンタをベースとして読み込むことは、オーバーヘッドを伴う。例えば、Ｓｙｓｔｅｍ／３６０（Ｒ）の場合、コードは余分なｂａｌｒ  ｒ１２，  ０命令を含み、Ｐｏｗｅｒシステムでは、ｍｆｌｒ／ｂｌ．＋４／ｍｆｌｒ／ｍｔｌｒを含んでいる余分な命令のセットが存在する。したがって、下に示されているように、１つのコード変換では、関数エントリ・ポイントもベースとして使用される。
【００５２】
ベースとして関数エントリ・ポイントを含んでいるＳｙｓｔｅｍ／３６０（Ｒ）のコードの一例は、次のとおりである。
…
ｌ        ｒ１２＝Ａ（ｓｕｂｒ）    ！サブルーチンｓｕｂｒのアドレスをｒ１２に読み込む
ｂａｌｒ        ｒ１４，  ｒ１２    ！復帰アドレスをｒ１４に保存して、
！ｐｃをｒ１２の内容に設定する
…
ｓｕｂｒ：
ｕｓｉｎｇ    ＊，  ｒ１２    ！ｒ１２をベースとして使用することをアセンブラに伝えるための疑似命令
ｓｔｍ    ｒ１４，  ｒ１２，  １２  （ｒ１３）    ！複数のレジスタを呼び出し元の保存領域
！（ｒ１４、ｒ１５、ｒ０、…、ｒ１２）に格納する
ｌａ    ｒ１１，  ｓａｖｅａｒｅａ    ！自分の保存領域のアドレスを読み込む
ｓｔ    ｒ１３，  ｓａｖｅａｒｅａ＋４    ！呼び出し元の保存領域のアドレスを格納する
ｓｔ   ｒ１１，  ８  （ｒ１３）    ！自分の保存領域のアドレスを呼び出し元の保存領域に格納する
…サブルーチンの本体…
…ｒ０は、存在する場合、復帰コードに使用される…
ｌ    ｒ１３，  ｓａｖｅａｒｅａ＋４    ！呼び出し元の保存領域のアドレスを読み込む
ｌｍ    ｒ１４，  ｒ１２，  １２  （ｒ１３）    ！複数のレジスタを呼び出し元の保存領域
！（ｒ１４、ｒ１５、ｒ０、…、ｒ１２）から読み込む
ｂｒ    ｒ１４    ！呼び出し元に戻る
【００５３】
Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づくコードの一例が下に示されている。
…
ｌｗｚ        ｒ１５＝Ａ（ｓｕｂｒ）    ！サブルーチンのアドレスをｒ１５に読み込む
ｍｔｃｔｒ    ｒ１５    ！ｃｔｒ＝ｒ１５
ｂｃｔｒｌ              ！復帰アドレスをｌｒに保存して、
！ｐｃをｃｔｒの内容に設定する
…
ｓｕｂｒ：
ｂａｓｅ：    ｓｔｍｗ          ｒ１０，  ｒ４，  １２  （ｒ１３）    ！複数のレジスタを呼び出し元の
！保存領域（ｒ１４、ｒ１５、ｒ０、…、ｒ１２）に格納する
ｍｆｃｔｒ    ｒ１２    ！ｃｔｒ内のアドレスをベース・レジスタとしてｒ１２に移動する
…サブルーチンの本体…
ｌｗｚ    ｒ１１，  （ｓａｖｅａｒｅａ−ｂａｓｅ）  ＠１，  ｒ１２    ！データを
！グローバル・オフセット・テーブル（ＧＯＴ）から読み込む
…ｒ０は、存在する場合、復帰コードに使用される…
ｂｌｒ    ！呼び出し元に戻る
【００５４】
上記の変換は、サブルーチンに入る分岐を実行するためにターゲット・アドレスを使用できるようにすることができるが、分岐予測の後に、ターゲット・アドレスが使用可能になって予測の妥当性を確認するときまでの投機的実行の間、このアドレスを使用できないことがある。例えば、予測の時点では、他の命令または動作によってアクセスできるレジスタまたはその他の選択された位置（プログラム・カウンタとは異なる）にあるアドレスを使用できない。したがって、本発明の態様に従って、分岐予測器がレジスタ間接分岐アドレスを予測することに基づいて、予測された値も、例えば設計されたレジスタにおいて、投機的値として使用可能になる。その後、予測が正しい場合、実行がより速く進む。予測が正しくない場合、予測ミスに基づいているため、回復が行われる。
【００５５】
図５を参照して、レジスタ間接分岐の予測手法に関する詳細がさらに説明される。１つの例では、プロセッサがこの処理を実行している。最初に、レジスタ間接分岐のターゲット・アドレスが予測され（ステップ２００）、命令フェッチが予測されたターゲット・アドレス（本明細書では予測されたアドレスとも呼ばれる）にリダイレクトされる（ステップ２０２）。さらに、１つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる（ステップ２０４）。すなわち、１つの実施形態では、レジスタ名の変更が回復に使用される。レジスタ名の変更を使用する場合、新しい名前変更レジスタが分岐時に割り当てられ、その新しい名前変更レジスタが、予測された値と共に読み込まれる。予測がチェックされ、予測が正しくない場合、前の名前のレジスタに戻ることによって回復が実行される。
【００５６】
示されているように、予測されたアドレスが割り当てられた名前変更レジスタにコピーされる（ステップ２０６）。ターゲット・アドレスを保持する名前変更レジスタが、使用可能としてマーク付けされる（ステップ２０８）。さらに、予測が正しいかどうかを判定するために、予測チェックが実行される（ステップ２１０）。予測チェックを発生させる方法は、分岐命令に提供されるターゲット・レジスタ値が使用可能になったときにチェックを実行する状態マシンを開始すること、チェックのための内部動作（ｉｏｐ：internal operation）を挿入すること、またはチェック・パイプラインへの分岐動作を発行することなどを含めて、複数存在する。
【００５７】
予測ミスが存在する場合、回復が実行される。使用できる回復の実装の選択肢は、正しい値を古いレジスタから新しいレジスタにコピーすること、または新しく割り当てられた名前変更レジスタが破棄され、名前変更マップ（rename map）が、正しく読み込まれた値を保持している前の物理レジスタを指す、名前変更の実装を使用することを含めて、複数存在する。例えばプロセッサによって実行される、例示的な回復の実装に関する詳細が、図６〜７を参照してさらに説明される。
【００５８】
最初に図６を参照すると、１つの実施形態では、分岐予測の正しさのチェックが実行される（ステップ３００）。このチェックは、予測されたアドレスを受け取り、そのアドレスを、それが使用可能になったときに分岐命令への入力として計算された実際のアドレスと比較することを含む。予測が正しい場合（照会３０１）、予測チェックが完了し（ステップ３０２）、回復は不要である。
【００５９】
しかし、予測が正しくない場合（照会３０１）、誤って予測された分岐の後の命令がフラッシュされる（ステップ３０４）。さらに、命令フェッチが、計算されたアドレスにリダイレクトされる（ステップ３０６）。さらに、正しい非投機的値が、ターゲット・アドレスを保持するレジスタに書き込まれる（ステップ３０８）。これを実現するための方法は、名前変更の設計でない設計において、アクティブ・レジスタに書き込むことを含めて、複数存在してよい。さらに、名前変更の設計において、既存の名前変更レジスタに書き込むこと、または新しい名前変更レジスタを割り当てることが存在してよい。ターゲット・アドレスを保持するレジスタが、使用可能としてマーク付けされる（ステップ３１０）。これによって、予測チェックの１つの例が完了する。
【００６０】
別の実施形態では、図７を参照すると、レジスタ名の変更を明示的に使用するレジスタ間接分岐の予測チェック手法が提供される。この例では、分岐予測の正しさのチェックが行われる（ステップ４００）。予測が正しい場合（照会４０１）、チェックが完了し（ステップ４０２）、回復は実行されない。しかし、予測が正しくない場合（照会４０１）、誤って予測された分岐の後の命令がフラッシュされ（ステップ４０４）、予測時に割り当てられた名前変更レジスタの割り当てが解除され、非投機的ターゲット・アドレスを含む前の名前変更レジスタを見えるようにする（ステップ４０６）。次に、命令フェッチが、計算されたアドレスにリダイレクトされる（ステップ４０８）。これによって、予測チェックの１つの例が完了する。
【００６１】
有利なことに、図７の手法は、多くのアウトオブオーダ・プロセッサにおいて現在実装されている分岐処理に対応しており、アウトオブオーダ・プロセッサでは、分岐命令の処理と共に割り当てられたレジスタが、分岐命令の実行後に割り当てられたレジスタとして扱われるという条件で、分岐命令の後に割り当てられたレジスタの割り当てが自動的に解除される。分岐命令と共に割り当てられたターゲット・レジスタが、分岐命令の後に割り当てられたとして扱われず、割り当て解除されない実施形態では、図６に従う実装は、投機的値を保持するために割り当てられた名前変更レジスタを正しい非投機的値で更新するように適応されてよい。
【００６２】
別の実施形態では、名前変更でない注釈が使用されてよく、例えば、ベースの２つのコピーが提供される。その後、予測時に、第２のコピーまたは新しいコピーへの切り替えが行われる。予測は、予測された値を新しいコピーにコピーし、その後の命令は、新しく有効化されたコピーを使用する。予測がチェックされ、予測ミスが存在する場合は、古いコピーが使用される。そのような１つの実装では、ターゲット・レジスタのアクティブなコピーを更新することによって、予測ミスの回復が実行され、すなわち、古い（予測でない）コピーが指され、次の予測時に、第２のコピーが次の新しいベース値としてアクティブにされる。その他の実装も可能である。
【００６３】
本明細書に記載されているように、レジスタ間接分岐に使用されるレジスタの内容（例えば、値、ターゲット・アドレス）を予測することに基づいて、予測に使用される予測された内容も、他の命令によって使用できるように、レジスタ間接分岐に使用されるレジスタに（例えば、同時に）格納される。これによって、処理を容易にする。
【００６４】
さらに別の態様では、ターゲット・アドレス・レジスタ（および、例えばプログラム・カウンタ）に書き込まれる予測された値も、関係のあるレジスタに書き込まれる。例えば、予測された値が、ターゲット・アドレス・レジスタであるカウンタ・レジスタ（ＣＴＲ：counter register）に書き込まれる場合、予測された値は、ＣＴＲレジスタと関係があるＲ１２、Ｒ１５、またはその他のレジスタなどの、別の選択されたレジスタにも書き込まれる。
【００６５】
一般的に使用されるＡＢＩなどでの特定の処理の場合、最初に分岐アドレスが汎用レジスタ（ＧＰＲ）に読み込まれ、次に、専用制御レジスタ（ＳＰＲ）に転送され、その後、レジスタ間接分岐を引き起こす。分岐アーキテクチャのそのような１つの例に従って、Ｐｏｗｅｒ  ＩＳＡはカウンタ（ＣＴＲ）専用レジスタに分岐する。しかし、この専用レジスタ（例えば、カウンタ・レジスタＣＴＲ）は直接読み込まれず、汎用レジスタを介して読み込まれる。
【００６６】
カウンタ・レジスタは読み取りが高価になることがあるため、１つの例示的なＡＢＩは、サブルーチンへの分岐（ＢＣＴＲ）が実行されるときに、ＣＴＲの値が選択されたレジスタ（例えば、Ｒ１２、Ｒ１５、またはその他のレジスタ）に格納されることをさらに示す。これにより、呼び出された関数によって、選択されたレジスタをベース・レジスタとして使用できるようにする。しかし、分岐予測が行われる場合、選択されたレジスタの値が読み込まれる前に分岐アドレスが予測されることがあり、これが、データ・アクセスに応答して呼び出されるサブルーチンを停止させる。
【００６７】
前に、選択されたレジスタ（この例では、Ｒ１２など）内の値を提供するために、ＣＴＲレジスタを読み取って結果をＲ１２に書き込む、ＣＴＲからＲ１２への移動（ＭＦＣＴＲ）が実行された。しかし、例えばＰｏｗｅｒ  ＥＬＦ  ｖ２  ＡＢＩなどのＡＢＩの１つの定義に従って、ＣＴＲ内の値が使用可能になった場合に、その値はＲ１２内でも使用可能になる。したがって、ＣＴＲレジスタ内のどんな値もＲ１２に書き込まれるということをソフトウェアがすでに示しているため、ＣＴＲからＲ１２への移動は不要であり、コピーを排除する。しかし、本発明の態様に従って、レジスタが予測される場合、そのレジスタの予測された値が、そのレジスタ内で使用可能になる。したがって、予測されたレジスタがＣＴＲである場合、ＣＴＲが同時に更新される。しかし、アプリケーションは、更新されていないＲ１２を読み取る必要があり、コピーが存在しないため、ＣＴＲ内の予測された値をＲ１２に取得するためのソフトウェアの経路は存在しない。Ｒ１２は関係のあるレジスタであり、関連しているが、必ずしもコード内で見られるコピーではない。したがって、本発明の態様に従って、ＣＴＲに対して予測され、ＣＴＲに書き込まれた値と同じ値が、Ｒ１２（または別の選択されたレジスタもしくは位置）にも書き込まれる。
【００６８】
このようにして、本発明の態様に従って、関係のあるレジスタが、１つまたは複数の種類のサブルーチンの分岐の分岐予測と共に、予測される。このことが、以下でさらに詳細に説明される。
【００６９】
図８を参照して、関係のあるレジスタも予測するレジスタ間接分岐の予測手法の一例が説明される。１つの例では、プロセッサがこの処理を実行している。最初に、レジスタ間接分岐のターゲット・アドレスが予測され（ステップ５００）、命令フェッチが予測されたターゲット・アドレスにリダイレクトされる（ステップ５０２）。さらに、１つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられ（ステップ５０４）、予測されたアドレスが割り当てられた名前変更レジスタにコピーされる（ステップ５０６）。ターゲット・アドレスを保持する名前変更レジスタが、使用可能としてマーク付けされる（ステップ５０８）。
【００７０】
さらに、本発明の態様に従って、新しい名前変更レジスタが、関係のあるレジスタにも割り当てられる（ステップ５１０）。予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ（ステップ５１２）、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる（ステップ５１４）。
【００７１】
さらに、分岐予測が正しいかどうかを判定するために予測チェックが実行され（ステップ５１６）、その一例が本明細書において説明される。さらに、関係のあるレジスタに対して予測チェックが実行される（ステップ５１８）。このチェックは、例えば、現在の命令が処理される（それに応答して、関係のあるレジスタが予測される）前の設計値の値を、この現在の命令によって予測された値と比較することを含む。このチェックは、状態マシンを開始すること、チェックのためのＩＯＰを挿入すること、またはチェック・パイプラインへの分岐動作を、関係のある値をチェックすることの指示と共に発行することによって、開始されてよい。多くの変形が可能である。
【００７２】
分岐予測チェックに関連付けられた詳細が、図９を参照してさらに説明され、関係のあるレジスタの予測をチェックするための予測チェックの詳細が、図１０を参照してさらに説明される。これらの例では、レジスタ名の変更が使用される。しかし、レジスタ名の変更を使用しないその他の実装も可能である。１つの例では、プロセッサがこの処理を実行している。
【００７３】
最初に図９を参照すると、１つの例では、分岐予測の正しさのチェックが行われる（ステップ６００）。分岐予測が正しい場合（照会６０１）、チェックが完了し（ステップ６０２）、回復は実行されない。しかし、分岐予測が正しくない場合（照会６０１）、回復が実行される。例えば、誤って予測された分岐の後の命令がフラッシュされる（ステップ６０４）。ステップ６０４は、関係のあるレジスタのチェックを含んでよい。さらに、予測時に割り当てられた名前変更レジスタ（例えば、ターゲット・アドレス・レジスタおよび関係のあるレジスタ）の割り当てが解除され、関係のあるレジスタ内の非投機的ターゲット・アドレスおよび元の値を含む前の名前変更レジスタを見えるようにする（ステップ６０６）。次に、命令フェッチが、計算されたアドレスにリダイレクトされる（ステップ６０８）。これによって、分岐予測チェックの１つの実装が完了する。
【００７４】
１つの例では、分岐予測のチェックとは別に、関係のあるレジスタの予測がチェックされてよい。したがって、例えばプロセッサによって、関係のあるレジスタの予測をチェックすることに関する詳細が、図１０を参照してさらに説明される。１つの例では、関係のあるレジスタの予測の正しさがチェックされる（ステップ７００）。関係のあるレジスタの予測が正しい場合（照会７０１）、チェックが完了し（ステップ７０２）、回復は実行されない。しかし、関係のあるレジスタの予測が正しくない場合（照会７０１）、回復が実行される。例えば、誤って予測された関係のあるレジスタの後の命令（または、誤って予測された関係のあるレジスタの第１のユーザ）がフラッシュされ（ステップ７０４）、予測時に関係のあるレジスタの割り当てられた名前変更レジスタの割り当てが解除され、予測ではない正しい関係のある値を含んでいる前の名前変更レジスタを見えるようにする（ステップ７０６）。次に、フラッシュの時点で実行が再開される（ステップ７０８）。これによって、関係のあるレジスタの予測チェックの１つの例が完了する。
【００７５】
予測のチェックの１つの態様では、チェックすることは、関係のあるレジスタの予測された値を、関係のあるレジスタの予測をトリガーする命令より前に計算された関係のあるレジスタの最新の値と比較する。少なくとも１つの実施形態では、その値が名前変更レジスタに格納される。
【００７６】
別の実施形態では、関係のあるレジスタの予測をトリガーする命令より前の関係のあるレジスタの値を、関係のあるレジスタの予測された値を保持するために割り当てられた名前変更レジスタにコピーすることによって、予測ミスの回復が実行される。少なくとも１つの実施形態では、名前変更レジスタの割り当て解除が、正しい値を割り当て済みの名前変更レジスタにコピーすることより高価である場合に、値を復元することによる回復が使用される。
【００７７】
本明細書に記載されているように、レジスタ間接分岐に使用されるレジスタの内容（例えば、値、ターゲット・アドレス）を予測することに基づいて、予測に使用される予測された内容も、他の命令によって値を使用できるように、（プログラム・カウンタに加えて）レジスタ間接分岐に使用されるレジスタならびに関係のあるレジスタに（例えば、同時に）格納される。これによって、処理を容易にする。
【００７８】
別の態様では、関係のあるレジスタが予測において使用されるかどうかを指定するための制御が提供される。さらに、関係のあるレジスタが使用されることが示された場合、この制御は、使用される関係のあるレジスタの指示（例えば、レジスタ番号）を含んでもよい。この制御は、例えば、コードに固有であり、例として、コードの単位（アプリケーション、プロセス、モジュール、関数、または動的に共有されるオブジェクト（例えば、ライブラリ）など）ごとに有効化／無効化されてよい。
【００７９】
１つの態様では、関係のあるレジスタを予測するための１つまたは複数の制御が提供され、この制御において、コードの単位の第１のセットが、関係のあるレジスタの値の予測から恩恵を受け、コードの単位の第２のセットは恩恵を受けない。多くの変形が可能である。
【００８０】
１つの例として、マシン状態レジスタ（ＭＳＲ：machine state register）において制御が提供される。オペレーティング・システムは、ある単位のコードに対してＭＳＲ制御を設定し、コードの別の単位に対してＭＳＲ制御を無効にする。別の実施形態では、ページ・テーブル・エントリ（ＰＴＥ：page table entry）制御が提供されてよい。例えば、ＰＴＥ内のビットは、分岐が存在するページ上の分岐に関して、関係のあるレジスタの予測または非予測を制御し、このページは、ＰＴＥによって変換されるアドレスを有するページに対応する。別の実施形態では、ＰＴＥ内のビットは、分岐のターゲット・アドレスのページに関するビットの設定に基づいて、分岐に関して、関係のあるレジスタの予測または非予測を制御し、分岐のターゲットのアドレスはＰＴＥによって変換される。さらに他の実施形態では、ハイブリッドの形態がサポートされ、例えば、ＭＳＲビットが、ＰＴＥ内で設定されたビットの考慮を有効にする。多くのその他の例が可能である。
【００８１】
ＰＴＥ制御の１つの例では、ＰＴＥ内のビットが、例えば、コードの特定のセグメントに使用されるＡＢＩレベルなどの、モジュールの特性を表すプログラム・モジュールのモジュール・レベルまたはページ・レベルの指示に基づいて、ダイナミック・ローダによって設定される。
【００８２】
少なくとも１つの実施形態では、関数が共通のＡＢＩレベルを使用する場合は、それらの関数を共通のページにグループ化し、関数が共通のＡＢＩレベルを使用しない場合は、それらの関数を別々のページに分離するように、スタティック・リンカがモジュールをリンクする。
【００８３】
別の実施形態では、モジュールがＡＢＩレベルを共有し、すなわち、単一のモジュール内のコードが同じＡＢＩレベルに対応し、この制御に関するレベルおよび暗黙の設定が、例えばＥＬＦ（Executable Linkable Format）マジック・ナンバーなどのモジュールのヘッダーによって提供される。多くの例および変形が可能である。本明細書に記載された例示的な制御は、単なる例である。
【００８４】
関係のあるレジスタの予測がコードの単位に使用されるかどうかを示すための制御の使用は、本明細書では、便宜上、外部から示された関係のあるレジスタの予測（ＥＩＡＲＰ）と呼ばれる。コードの単位に関する外部から示された関係のあるレジスタの予測を使用する１つの実施形態が、図１１を参照して説明される。１つの例では、この処理は、コンピューティング環境のプロセッサ上で実行されるオペレーティング・システムによって実行される。
【００８５】
図１１を参照すると、最初にオペレーティング・システムが、アプリケーション、プロセス、モジュール、関数、または動的に共有されるオブジェクトなどのコードの単位を読み込む（ステップ８００）。コードの単位（本明細書では、読み込まれたコードまたはコードと呼ばれる）がコードに固有の外部から示された関係のあるレジスタの予測の候補であるかどうかに関する判定が行われる（ステップ８０２）。この判定は、例えば、例としてコードのヘッダーまたはマジック・ナンバーで提供される、コードのＡＢＩのバージョンまたはＥＩＡＲＰ指標をチェックすることによって、決定されてよい。
【００８６】
コードが外部から示された関係のあるレジスタの予測の候補でない場合（照会８０４）、処理が完了する（ステップ８１０）。候補である場合、関係のあるレジスタの指示（例えば、レジスタ番号）が制御レジスタに読み込まれる（ステップ８０６）。例示的な制御レジスタの単にいくつかの例として、マシン状態レジスタ（ＭＳＲ）、プログラム状態ワード（ＰＳＷ：program status word）、専用レジスタ（ＳＰＲ）、ページごとのページ・テーブル・エントリ（ＰＴＥ）、またはセグメント・テーブル・エントリ（ＳＴＥ：segment table entry）が挙げられる。
【００８７】
さらに、読み込まれたコードに対してＥＩＡＲＰを有効にする制御（例えば、フラグまたはその他の指標）が設定されてよい（ステップ８０８）。１つの例では、フラグまたはその他の指標は、例えばＭＳＲ、ＰＳＷ、ＳＰＲ、ＰＴＥ、もしくはＳＴＥなどの、制御レジスタまたはその他の制御フィールドにおいて設定される。これによって、過度の予測ミスおよび回復のペナルティのリスクを減らす。
【００８８】
別の実施形態では、コードの特性（例えば、ＡＢＩレベル）に基づいてコードが関係のあるレジスタの予測の候補でないということを照会８０４が決定した場合に、コードの単位がＥＩＡＲＰの対象にならないということを示すように、制御が設定される。
【００８９】
他の実施形態では、プログラム・ローダ、ダイナミック・プログラム・ローダ（dynamic program loader）、共有ライブラリ・ローダ、ダイナミック・ライブラリ・ローダ（dynamic library loader）、またはコードを読み込むことに適応された別のシステム・コンポーネントのうちの１つによって、コードが読み込まれる。
【００９０】
１つの実施形態では、オペレーティング・システムのコンテキスト切り替えが存在する場合、コードに固有のＥＩＡＲＰを含めて、（例えば、オペレーティング・システムによって）構成が更新される。コンテキスト切り替えに起因するコードに固有のＥＩＡＲＰの更新は、例えば、コードの単位に特に結び付けられていないレジスタ内（ＭＳＲ、ＳＰＲ、またはＰＳＷ内など）に制御が存在する場合に、実行される。１つの例では、ＰＴＥがコードに結び付けられているため、ＥＩＡＲＰの構成を更新する必要がない。コードに固有のＥＩＡＲＰに関連付けられたコンテキスト切り替え論理の一実施形態が、図１２を参照して説明される。
【００９１】
図１２を参照すると、コンテキスト切り替えに基づいて、切り替えられるコンテキストの制御レジスタから値が取得され（ステップ９００）、コンテキスト切り替え構造に格納される（ステップ９０２）。その他の処理が実行されてよい（ステップ９０４）。さらに、切り替えられるコンテキストの新しい値が取得され（ステップ９０６）、切り替えられるコンテキストの制御レジスタに格納される（ステップ９０８）。
【００９２】
他の実施形態では、制御レジスタの値が、例えば図１１の手法の処理と連動して値が最初に確立されたときに、出願者のコンテキスト構造に格納され、コンテキスト切り替えプロセス中に、コードの設定を維持するためのステップ９００および９０２が省略される。その他の変形も可能である。
【００９３】
処理中に、プログラムがハードウェア例外（例えば、ページ・フォールト、浮動小数点例外など）を受け取り、割り込み処理を介してオペレーティング・システムに切り替わることがある。１つの実施形態では、オペレーティング・システムへの切り替えが存在する場合、図１３を参照して説明されるように、（例えば、オペレーティング・システムによって）構成設定が無効化されてよい。
【００９４】
１つの例では、切り替えられるコンテキストの制御レジスタの値が取得され（ステップ１０００）、例外コンテキストに格納される（ステップ１００２）。例示的な例外コンテキストの例としては、Ｓｙｓｔｅｍ  ｚのロー・メモリ内またはＰｏｗｅｒシステムの選択されたレジスタ（ＳＲＲ０／ＳＲＲ１…またはＨＳＲＲ０／ＨＳＲＲ１…）が挙げられる。例外コンテキストは、コードに固有のＥＩＡＲＰまたはその他の構成情報あるいはその両方を含んでよい。その他の処理が実行されてよい（ステップ１００４）。さらに、任意選択的に、スーパバイザの初期値が制御レジスタ（ＭＳＲ、ＳＰＲなど）に格納されてよい（ステップ１００６）。追加の処理またはその他の処理あるいはその両方が実行されてもよい。
【００９５】
例外の処理の後に、ハードウェア例外／割り込み処理が終了する。例えばプロセッサによって実行されるこの処理の一例が、図１４を参照して説明される。１つの例では、復元されるコードに固有のＥＩＡＲＰまたはその他の構成情報あるいはその両方が例外コンテキストから取得され（ステップ１１００）、選択された制御レジスタ（例えば、ＭＳＲ、ＳＰＲ、ＰＳＷなど）に格納される（ステップ１１０２）。
【００９６】
コードに固有のＥＩＡＲＰを分岐予測で使用することの詳細が、図１５を参照してさらに説明される。１つの例では、プロセッサがこの処理を実行している。１つの実施形態では、レジスタ間接分岐のターゲット・アドレスが予測され（ステップ１２００）、命令フェッチが予測されたターゲット・アドレスにリダイレクトされる（ステップ１２０２）。さらに、１つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる（ステップ１２０４）。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ（ステップ１２０６）、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる（ステップ１２０８）。
【００９７】
さらに、本発明の態様に従って、コードに対してＥＩＡＲＰが有効化されるかどうかに関する判定が行われる（照会１２１０）。この判定は、例えば、このコードに関して関係のあるレジスタが予測されるかどうかを示す制御をチェックすることによって、決定される。コードに対してＥＩＡＲＰが有効化されない場合、処理が続行して、分岐予測のチェックを発生させる（ステップ１２２０）。有効化される場合、新しい名前変更レジスタが、関係のあるレジスタにも割り当てられる（ステップ１２１２）。関係のあるレジスタのレジスタ番号が、例えばＥＩＡＲＰ構成情報によって決定される。さらに、予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ（ステップ１２１４）、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる（ステップ１２１６）。
【００９８】
関係のあるレジスタの予測が正しいかどうかを判定するために、関係のあるレジスタの予測のチェックが実行される（ステップ１２１８）。このチェックは、例えば、現在の命令が処理される（それに応答して、関係のあるレジスタが予測される）前の設計値の値を、この現在の命令によって予測された値と比較することを含む。
【００９９】
さらに、分岐予測のチェックが実行される（ステップ１２２０）。本明細書では、予測の正しさをチェックする論理の例が説明される。また、各例は、図１７〜１８を参照して以下で説明される。その他の例も可能である。
【０１００】
さらに別の態様では、関係のあるレジスタが予測されるかどうかに関する予測が行われる。この予測は、例えば、関係のあるレジスタ候補（例えば、分岐命令）に関する、関係の状態の動的予測決定に基づく。１つの例では、プロセッサは、関係のあるレジスタを含んでいることのある候補分岐サブルーチン命令ごとに、関係のあるレジスタの範囲を動的に決定する。分岐命令、特定の関係のあるレジスタ候補、および動的な関係の決定の有効化が、ＭＳＲビット、ＰＴＥビット、その他の制御レジスタ、またはこれらの組み合わせを含む、さまざまな制御レジスタによって制御されてよい。この制御は、関係の複数の候補を決定しながら、制御レジスタが関係の候補またはビットマスクを指定することをさらに含んでよい。
【０１０１】
１つまたは複数の態様に従って、候補が、関係があるとして予測され、予測器に基づいて予測が行われる。プロセッサにおいて、予測のチェックが実行される。予測が正しくなかった場合、関係のあるレジスタに関係がないため、その後の関係のある予測を抑制するように、動的予測器が更新される。
【０１０２】
新しい動的関係を検出するために採用されてよい複数の手法が存在する。そのような手法の１つの例としては、実際の変更された動作または別の分岐が優勢になった場合のエイリアシングに起因して変更された動作のいずれかを識別するための、予測器が（十分低い比率で）非関係を示す場合の関係のランダムな推測が挙げられる。別手法の例としては、オペレーティング・システムが、一定の間隔で、または提供された変更に応答して（例えば、さまざまな動的な実行時の監視およびフィンガープリント取得の手法を使用して決定されたときに）、新しい関係を予測するよう強制することを決定する、トレーニング期間が挙げられる。その他の手法も可能である。
【０１０３】
１つの態様では、定義された（例として、静的に定義されたか、またはＥＩＡＲＰ構成において定義された）レジスタが特定のインスタンス（例えば、特定の分岐）に関係があるかどうかに関して、予測が行われる。この態様では、コードの単位（例えば、分岐命令）が読み込まれ、定義されたレジスタ番号（例えば、Ｒ１２）が、ハードウェア内でハード配線されるか、あるいは構成レジスタまたは制御レジスタ（例えば、ＭＳＲ、ＰＳＷ、ＳＰＲ、ＰＴＥ、ＳＴＥなど）に読み込まれる。任意選択的に、コードの単位に対する予測を有効にするためのフラグも設定される。
【０１０４】
レジスタ番号が構成レジスタまたは制御レジスタに読み込まれ、ハード配線されない場合、各コードの単位が異なる構成情報を含むことがあるため、コンテキスト切り替えに基づいて処理が実行される。この処理の例が、図１２を参照して説明されている。
【０１０５】
同様に、ハードウェア例外が受け取られ、レジスタ番号がハード配線されない場合、１つの実施形態において図１３および１４を参照して説明されているように、例外処理が実行されてよい。
【０１０６】
図１６を参照して、定義されたレジスタが関係があるかどうかも予測するレジスタ間接分岐の予測手法の一例が説明される。１つの例では、プロセッサがこの処理を実行している。１つの例では、最初にレジスタ間接分岐のターゲット・アドレスが予測され（ステップ１３００）、命令フェッチが予測されたターゲット・アドレスにリダイレクトされる（ステップ１３０２）。さらに、１つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる（ステップ１３０４）。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ（ステップ１３０６）、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる（ステップ１３０８）。
【０１０７】
さらに、関係のある値を予測できるかどうかに関する判定が行われる（照会１３１０）。例えば、関係のあるレジスタを予測できるか？予測できない場合、処理が続行して、分岐予測チェックを発生させる（ステップ１３２０）。予測できる場合、１つの実施形態では、新しい名前変更レジスタが、予測された関係のあるレジスタに割り当てられる（ステップ１３１２）。関係のあるレジスタのレジスタ番号が、例えば、ハード配線されるか、またはＥＩＡＲＰ構成情報によって決定されてよい。
【０１０８】
予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ（ステップ１３１４）、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる（ステップ１３１６）。
【０１０９】
本明細書に記載されているように、予測が正しいかどうかを判定するための、関係のあるレジスタの予測のチェック（ステップ１３１８）に加えて、分岐予測のチェック（ステップ１３２０）が実行される。予測ミスが存在する場合、図１７〜１８を参照して説明されているように、回復が実行される。１つの例では、プロセッサがこの処理を実行している。
【０１１０】
１つまたは複数の実施形態では、照会１３１０は、新しい関係のあるレジスタを発見するための制御の無効化の対象になってよい。１つの実施形態では、照会１３１０は、トレーニング段階の間に、関係のあるレジスタを示すことを強制される。トレーニング段階は、例えば、アプリケーションが読み込まれた後の一定のサイクル数または構成可能なサイクル数に対応してよい。別の例では、トレーニング段階は、例えば、トレーニング段階を開始することの指示の後の一定のサイクル数または構成可能なサイクル数に対応してよい。１つの例では、トレーニング開始の指示は、一定の確率または構成可能な確率でランダムに生成された信号のうちの１つに対応してよい。別の例では、トレーニング開始の指示は、最後のトレーニング段階からの指定された間隔の経過（例えば、一定のまたは構成可能なサイクル数、あるいは一定のまたは構成可能なナノ秒数、マイクロ秒数、または別の時間単位の数）に対応してよい。別の実施形態では、照会１３１０は、第１の回数の分岐実行に関して、関係のあるレジスタの存在を示し、第１の回数は一定または構成可能である。さらに他の実施形態は、関係のあるレジスタの予測器をトレーニングするために、その他の既知の手法または将来の手法を採用してよい。
【０１１１】
ここで図１７を参照すると、この例では、定義によって、分岐予測ミスが存在する場合、関係のある値の予測または関係のある値に関連する予測も、誤って予測される。チェックが、例えば、分岐予測の正しさを決定することを含む（ステップ１４００）。分岐予測が正しい場合（照会１４０１）、チェックが完了し（ステップ１４０２）、回復は実行されない。しかし、分岐予測が正しくない場合（照会１４０１）、回復が実行される。例えば、誤って予測された分岐の後の命令がフラッシュされる（ステップ１４０４）。ステップ１４０４は、関係のあるレジスタのチェックをフラッシュすることを含んでよい。さらに、予測時に割り当てられた名前変更レジスタの割り当てが解除され、前の名前変更レジスタを見えるようにする（ステップ１４０６）。ステップ１４０６は、ターゲット・アドレス・レジスタおよび（ＥＩＡＲＰが有効化されている場合は）関係のあるレジスタの割り当てを解除し、関係のあるレジスタ内の非投機的ターゲット・アドレスおよび元の値を含む前の名前変更レジスタを見えるようにすることを含んでよい。次に、命令フェッチが、計算されたアドレスにリダイレクトされる（ステップ１４０８）。これによって、予測チェックの１つの実装が完了する。
【０１１２】
さらに、１つの実施形態では、ＥＩＡＲＰが有効化されている場合、図１８を参照して説明されているように、関係のあるレジスタの予測の正しさに関するチェックが呼び出されてよい。１つの実施形態では、関係のあるレジスタの予測の正しさのチェックが行われる（ステップ１５００）。関係のあるレジスタの予測が正しい場合（照会１５０１）、チェックが完了し（ステップ１５０２）、回復は実行されない。しかし、関係のあるレジスタの予測が正しくない場合（照会１５０１）、回復が実行される。例えば、誤って予測された関係のあるレジスタの後の命令がフラッシュされる（ステップ１５０４）。別の例では、誤って予測された関係のあるレジスタの第１のユーザがステップ１５０４でフラッシュされる。さらに、予測時に関係のあるレジスタに割り当てられた名前変更レジスタの割り当てが解除され、予測ではない正しい関係のある値を含んでいる前の名前変更レジスタを見えるようにする（ステップ１５０６）。次に、フラッシュの時点で実行が再開される（ステップ１５０８）。これによって、関係のあるレジスタの予測チェックの１つの例が完了する。
【０１１３】
さらに別の実施形態では、関係のある値（例えば、関係のあるレジスタ）を予測できるかどうかを予測するために予測器が使用される場合、図１９を参照して説明されているように、この予測に関連付けられた予測器の更新が実行されてもよい。１つの例では、プロセッサがこの処理を実行している。
【０１１４】
図１９を参照すると、１つの実施形態では、関係のあるレジスタの予測の正しさのチェックが行われる（ステップ１６００）。関係のあるレジスタを予測できるかどうかの予測が正しい場合（照会１６０１）、関係予測器が、正しい予測を示すように更新されてよく（ステップ１６０２）、回復は実行されない。別の例では、更新を実行する必要がない。
【０１１５】
しかし、関係のあるレジスタを予測できるかどうかの予測が正しくない場合（照会１６０１）、回復が実行される。例えば、誤って予測された関係のあるレジスタの後の命令がフラッシュされる（ステップ１６０４）。別の実施形態では、誤って予測された関係のあるレジスタの第１のユーザがステップ１６０４でフラッシュされる。さらに、予測時に関係のあるレジスタに割り当てられた名前変更レジスタの割り当てが解除され、予測ではない正しい関係のある値を含んでいる前の名前変更レジスタを見えるようにする（ステップ１６０６）。さらに、１つの例では、関係予測器が、正しくない予測を示すように更新される（ステップ１６０８）。次に、フラッシュの時点で実行が再開される（ステップ１６１０）。これによって、予測チェックの１つの実装が完了する。
【０１１６】
代替の実施形態では、名前変更レジスタの割り当てを解除する代わりに、正しくなく予測された関係のあるレジスタに格納された値が名前変更レジスタにコピーされる。その他の変形が可能である。
【０１１７】
別の態様では、レジスタが特定のインスタンスに関係があるかどうかに関する予測が行われ、レジスタ番号またはその他の識別に関する予測がさらに行われる。この処理の一例が、図２０を参照して説明されている。１つの例では、プロセッサがこの処理を実行している。
【０１１８】
図２０を参照すると、最初に、レジスタ間接分岐のターゲット・アドレスが予測され（ステップ１７００）、命令フェッチが予測されたターゲット・アドレスにリダイレクトされる（ステップ１７０２）。さらに、１つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる（ステップ１７０４）。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ（ステップ１７０６）、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる（ステップ１７０８）。
【０１１９】
さらに、１つの態様に従って、関係のある値を予測できるかどうかに関する判定が行われる（照会１７１０）。予測できない場合、処理が続行して、分岐予測チェックを発生させる（ステップ１７２６）。予測できる場合、新しいレジスタの識別（例えば、番号）が予測された関係のあるレジスタとして選択されるべきであるかどうかに関する判定が行われる（照会１７１２）。選択されるべきでない場合、例えば予測器によって示された、予測された関係のあるレジスタの指示が関係のあるレジスタとして選択され（ステップ１７１４）、選択されるべきである場合、別のレジスタ（例えば、他のレジスタ番号）が選択される（ステップ１７１６）。その後、新しい名前変更レジスタが、選択された（例えば、選択されたレジスタ番号を有する）関係のあるレジスタに割り当てられる（ステップ１７１８）。
【０１２０】
予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ（ステップ１７２０）、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる（ステップ１７２２）。
【０１２１】
本明細書に記載されているように、関係のあるレジスタに関連付けられた予測が正しいかどうかを判定するための、関係のあるレジスタの予測のチェック（ステップ１７２４）に加えて、分岐予測のチェック（ステップ１７２６）が実行される。
【０１２２】
少なくとも１つの実施形態では、照会１７１２は、予測信頼性がしきい値を超えるかどうかのテストに対応する。予測信頼性は、例えば、１以上のビットの既知の信頼値に対応することができる。このしきい値は、一定であるか、またはソフトウェアによって構成されてよい。
【０１２３】
図２１を参照して説明されているように、選択された関係のあるレジスタが正しいかどうかを判定するために、予測チェックが実行されてもよい。１つの例では、プロセッサがこの処理を実行している。１つの実施形態では、関係のあるレジスタの予測の正しさのチェックが行われる（ステップ１８００）。選択された関係のあるレジスタの予測が正しい場合（照会１８０１）、関係予測器が、関係のあるレジスタとして使用されているレジスタの正しい予測を示すように更新されてよく（ステップ１８０２）、回復は実行されない。別の実施形態では、予測器が更新されない。
【０１２４】
しかし、選択された関係のあるレジスタの予測が正しくない場合（照会１８０１）、回復が実行される。例えば、誤って予測された関係のあるレジスタの後の命令がフラッシュされる（ステップ１８０４）。別の実施形態では、誤って予測された関係のあるレジスタの第１のユーザがステップ１８０４でフラッシュされる。さらに、予測時に関係のあるレジスタに割り当てられた名前変更レジスタの割り当てが解除され、予測ではない正しい関係のある値を含んでいる前の名前変更レジスタを見えるようにする（ステップ１８０６）。さらに、１つの例では、関係予測器が、関係のあるレジスタとして使用される特定のレジスタの正しくない予測を示すように更新される（ステップ１８０８）。次に、フラッシュの時点で実行が再開される（ステップ１８１０）。これによって、関係のあるレジスタの予測チェックの１つの実装が完了する。
【０１２５】
別の態様に従って、命令のシーケンスを認識することによって、関係のあるレジスタが認識される。１つの例では、このシーケンスは、関係を作成するように適応された第１の命令およびサブルーチンの分岐を実行するように適応された第２の命令を含む。１つの例では、このシーケンスは以下を含む。
ｍｔｃｔｒ    Ｒ１２
ｂｃｔｒｌ
【０１２６】
このシーケンスは、関係作成の移動およびサブルーチン呼び出しの両方を実行するとして認識される。１つの実施形態では、関係作成シーケンスは、移動を実行し、関係予測を使用して分岐を作成する動作の融合シーケンスに、変換される。
【０１２７】
上記のシーケンス（または同様のシーケンス）を認識することに基づいて、移動および分岐を実行する動作の融合シーケンスが生成される。例として、例えばハード配線されたＲ１２またはＥＩＡＲＰを使用して、簡略化されたシーケンスが生成されてよく、あるいは予測された分岐アドレスのチェックを含む拡張融合シーケンスが生成されてよく、ＭＴＣＴＲ命令のコストを完全に取り除く。拡張シーケンスの一例が、図２２を参照して説明されている。１つの実施形態では、この処理はデコーダによって実行される。
【０１２８】
最初に、融合シーケンスの機会が認識されたかどうかに関する判定が行われる（照会１９００）。例えば、例としてデコーダがＭＴＣＴＲおよびそれに続くＢＣＴＲＬを認識したか？融合シーケンスの機会が認識されなかった場合、融合生成処理が完了する。認識された場合、融合生成処理が続行する。分岐ターゲット・アドレスが予測される（ステップ１９０２）。処理がターゲット・アドレスで実行を開始できるように、ターゲット・アドレスがプログラム・カウンタ（ＰＣ）に読み込まれる（ステップ１９０４）。さらに、予測されたターゲット・アドレスがＣＴＲレジスタに読み込まれる（ステップ１９０６）ことに加えて、関係のあるレジスタ（例えば、Ｒ１２）に読み込まれる（ステップ１９０８）。これはサブルーチン呼び出しであるため、復帰アドレスがリンク・レジスタ（ＬＲ：link register）に読み込まれる（ステップ１９１０）。さらに、予測されたターゲット・アドレスのチェックが実行される（ステップ１９１２）。１つの例では、チェックは、Ｒ１２の値である、ＭＴＣＴＲのソースに対するものである。
【０１２９】
１つの例では、関係のあるレジスタ番号（例えば、Ｒ１２）が、関係のあるレジスタとしてハード配線される。別の例では、関係のあるレジスタが、選択された制御レジスタ内などの、制御において示される。さらに別の例では、関係のあるレジスタが、命令のシーケンス（例えば、ＭＴＣＴＲの後に指定されたレジスタ番号）に基づいて動的に決定される。その他の例も可能である。上記のシーケンスでは、予測が値を上書きするため、ＭＴＣＴＲを実行する必要がなく、１つの例では、関係のあるレジスタおよび予測されたターゲット・アドレスが同時にチェックされる。その他の変形が可能である。
【０１３０】
１つの実施形態例では、図２２の手法の動作が、次のような例示的なｉｏｐシーケンスを生成することによって表されてよい。
ｍｔｃｔｒ  Ｒ１２
ｏｌｄ  ｃｔｒ＝ｃｔｒ
ｕｐｄａｔｅ＿ｌｒ＿ｆｒｏｍ＿ｉｎｓｔｒｕｃｔｉｏｎ＿ａｄｄｒｅｓｓ＋
ｐｒｅｄｉｃｔ＿ｉｎｄｉｒｅｃｔ＿ｃｔｒ＋
ｕｐｄａｔｅ＿ｐｃ＿ｆｒｏｍ＿ｐｒｅｄｉｃｔｉｏｎ＋
ｕｐｄａｔｅ＿ｃｔｒ＿ｆｒｏｍ＿ｐｒｅｄｉｃｔｉｏｎ＋
ｕｐｄａｔｅ＿ａｆｆｉｌｉａｔｅｄ＿ｒｅｇ＿ｆｒｏｍ＿ｐｒｅｄｉｃｔｉｏｎ  （Ｒ１２）
ｃｈｅｃｋ＿ｔａｒｇｅｔ＿ａｄｄｒｅｓｓ  （ｏｌｄ＿ｃｔｒ）
【０１３１】
別の実施形態では、Ｒ１２のコピーが抑制され、簡略化されたｉｏｐシーケンスが生成される。
ｏｌｄ＿ａｆｆｉｌｉａｔｅｄ＝Ｒ１２＋
ｕｐｄａｔｅ＿ｌｒ＿ｆｒｏｍ＿ｉｎｓｔｒｕｃｔｉｏｎ＿ａｄｄｒｅｓｓ＋
ｐｒｅｄｉｃｔ＿ｉｎｄｉｒｅｃｔ＿ｃｔｒ＋
ｕｐｄａｔｅ＿ｐｃ＿ｆｒｏｍ＿ｐｒｅｄｉｃｔｉｏｎ＋
ｕｐｄａｔｅ＿ｃｔｒ＿ｆｒｏｍ＿ｐｒｅｄｉｃｔｉｏｎ＋
ｕｐｄａｔｅ＿ａｆｆｉｌｉａｔｅｄ＿ｒｅｇ＿ｆｒｏｍ＿ｐｒｅｄｉｃｉｔｏｎ  （Ｒ１２）
ｃｈｅｃｋ＿ｔａｒｇｅｔ＿ａｄｄｒｅｓｓ  （ｏｌｄ＿ａｆｆｉｌｉａｔｅｄ）
【０１３２】
さまざまな実施形態では、予測ｉｏｐが、プログラム・カウンタ（すなわち、ＰＣ−命令がフェッチされるアドレス）、分岐ターゲット・レジスタ（この例では、ｃｔｒ）、および関係のあるレジスタ（この例では、Ｒ１２）を更新するために使用できる単一の予測を生成する。また、この特定の実施形態では、予測ｉｏｐは、例えばリンク・レジスタ（ＬＲ）内のサブルーチンの復帰アドレスを捕捉するために、予測を使用して更新する前に、ＰＣを捕捉するように適応される。別の実施形態では、リンク・レジスタ（ＬＲ）内のＰＣの捕捉は別のｉｏｐによって実行されてよい。
【０１３３】
これらの例では、単一のｉｏｐ内の複数の動作の実行を示すために、＋が使用されており、記述の構成要素が＋記号によって接続されている。例えば、ｕｐｄａｔｅ＿ｐｃ＿ｆｒｏｍ＿ｐｒｅｄｉｃｔｉｏｎは、予測器によって予測されたアドレスを使用してプログラム・カウンタ（ＰＣ）を更新する。
【０１３４】
外部から示された関係のあるレジスタを含む１つの実施形態では、融合シーケンスの認識は、構成レジスタ内で示されたレジスタを含むシーケンスを認識することに基づく。融合に基づく関係のあるシーケンスの検出の前に、制御レジスタを、認識される関係のあるレジスタのシーケンスの外部の指示に使用して、関係のあるレジスタが示される。例えばプロセッサによって実行されるこの処理の一例が、図２３を参照して説明される。別の実施形態では、関係のあるレジスタの関係を確立し、関係のあるレジスタ番号を含んでいるシーケンスは、プロセッサの論理内で固定され（または「ハード配線され」）ており、そのような実施形態では、図２３の手法が実行されない。
【０１３５】
図２３を参照すると、最初にコード（関係のあるレジスタの関係を確立する１つまたは複数の融合可能なシーケンスを含んでいるコードなど）が読み込まれる（ステップ２０００）。さらに、認識される関係生成シーケンスにおいて発生することがあるレジスタに対応するレジスタ番号が読み込まれる（ステップ２０１０）。さらに、任意選択的に、ＥＩＡＲＰを有効にするようにフラグが設定される（ステップ２０２０）。関係のあるレジスタの関係を確立するとして認識されたシーケンスのみが変換されるため、過度の予測ミスのリスクがなく、したがって、１つまたは複数の実施形態では、関係のあるレジスタの予測を有効または無効にする機能が存在しなくてよい。他の実施形態では、関係のあるレジスタの値の予測を有効または無効にするためのフラグが、例えば、関係のあるレジスタの予測論理の正しくない実装の場合に備えて、安全機能として提供されてよい。その他の変形も可能である。
【０１３６】
関係のあるレジスタとして使用されるレジスタがハード配線されず、代わりに制御において示される場合、関係のあるレジスタの指示を含む構成情報が、コンテキスト切り替えに基づく後の復元のために格納される。この処理の１つの実施形態が、図１２を参照して上で説明されている。同様に、ハードウェア例外が受け取られた場合、図１３〜１４を参照して説明されたように処理が実行される。しかし、レジスタ番号がハード配線された場合、この処理は任意選択的である。
【０１３７】
融合に基づく関係のあるシーケンスを含む分岐予測の１つの実施形態が、図２４を参照して説明される。１つの例では、プロセッサがこの処理を実行している。
【０１３８】
図２４を参照すると、融合の機会の検出ステップが実行される（ステップ２１００）。例えば、デコーダによって、ＭＴＣＴＲ  Ｒｘ／ＢＣＴＲＬのシーケンスに関してチェックが行われ、Ｒｘは、分岐ターゲット・アドレスとの関係が検出されることがあるレジスタに対応する。１つの例示的なシーケンスでは、レジスタＲｘはレジスタＲ１２に対応してよい。融合されてよい関係作成シーケンスの検出ステップを実行することに基づいて、そのような融合シーケンスの機会が検出されるかどうかに関する判定が行われる（照会２１０２）。すなわち、例として、ＭＴＣＴＲ  Ｒｘ／ＢＣＴＲＬのシーケンスがコード・ストリーム内に存在するか、およびＭＴＣＴＲのＲｘが、ハード配線された関係のあるレジスタ番号などの期待されるレジスタ番号または制御（例えば、ＥＩＡＲＰ制御）において提供された番号に一致するか？融合シーケンスの機会が検出されない場合、従来の処理が実行される（ステップ２１０４）。検出された場合、処理が続行して、レジスタ間接分岐のターゲット・アドレスを予測し（ステップ２１０６）、命令フェッチを、予測されたターゲット・アドレスにリダイレクトする（ステップ２１０８）。さらに、１つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる（ステップ２１１０）。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ（ステップ２１１２）、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる（ステップ２１１４）。
【０１３９】
さらに、新しい名前変更レジスタが関係のあるレジスタ（例えば、関係作成融合シーケンスにおいて指定されたレジスタＲｘ）に割り当てられる（ステップ２１１６）。予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ（ステップ２１１８）、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる（ステップ２１２０）。
【０１４０】
予測されたアドレスの予測が正しいかどうかを判定するために、この予測のチェックが実行される（ステップ２１２２）。このチェックは、例えば、ターゲット・アドレスを、融合シーケンスより前の関係のあるレジスタ（Ｒｘ）の値と（例えば、前の名前変更レジスタを使用して）比較することを含む。この予測が正しくない場合、本明細書に記載されているように、回復が実行される。そのような回復の一例が、図１７を参照して説明されている。
【０１４１】
別の実施形態では、関係のあるレジスタ番号が、ハード配線されるのでも、制御（すなわち、ＥＩＡＲＰ）によって提供されるのでもなく、シーケンス自体（例えば、ＭＴＣＴＲの後に指定されたレジスタ番号）によって決定される。そのような１つの実施形態例では、照会２１０２が、ＭＴＣＴＲ  ＲｘおよびＢＣＴＲＬのシーケンスがコード・ストリーム内に存在するかどうかをチェックする。このシーケンスが存在する場合、シーケンス内で指定された特定のレジスタＲｘが、関係のあるレジスタとして使用される。そのような１つの実施形態では、図１１または図２３などにおけるような、コード読み込みおよびＥＩＡＲＰ構成の手法は不要であり、関係のあるレジスタの予測が、従来のコード読み込み手法と共に動作してよい。さらに、少なくとも１つの実施形態では、コンテキスト切り替え時に関係のあるレジスタの情報を保存すること、またはハードウェア例外処理を実行すること、あるいはその両方が不要であり、関係のあるレジスタの予測が、従来のコンテキスト切り替えシーケンスおよびハードウェア例外処理と共に動作してよい。
【０１４２】
命令のシーケンスの上記の例では、ＭＴＣＴＲ命令およびＢＣＴＲＬ命令は、連続的な順序になっている。しかし、別の態様に従って、命令が連続的な順序になっていない場合でも、関係が予測される。例えば、以下のコードを仮定する。
ｍｔｃｔｒ    Ｒ１２
＜命令…＞
Ｂｃｔｒｌ
【０１４３】
上記のコードは、関係作成の移動およびサブルーチン呼び出しの両方を実行するとして認識される。このようにして、関係（例えば、ＭＴＣＴＲ）を作成する命令を認識することに基づいて、指標が設定される。この指標は、関係のあるレジスタの番号（またはその他の指示）をさらに指定してよい。次に、関係を破壊する動作（例えば、ＣＴＲの内容またはＭＴＣＴＲのソースだったレジスタのいずれかの変更）が認識されたときに、この指標がリセットされる。ＢＣＴＲＬが発生したときに、関係の指示がアクティブである場合、そのＢＣＴＲＬは、関係のあるレジスタを伴う分岐として示され、さらに任意選択的に、関係のあるレジスタ番号を示す。
【０１４４】
動的な実行時の制御解析に基づいて関係を決定することに関連付けられた処理の１つの実施形態が、図２５を参照して説明される。１つの例では、プロセッサがこの処理を実行している。図２５の手法は、分岐の分岐ターゲット・レジスタとのレジスタの関係を識別し、関係のあるレジスタおよび関係のあるレジスタのレジスタ番号が予測されるべきである分岐を識別するために、命令ストリームのシーケンスの各命令に対して実行される。関係が取り消されるか、またはレジスタ間接分岐が検出され、それと共に、関係のあるレジスタの値の予測が実行されるまで、検出された関係が、１つの命令に対する図２５の手法の実行から、次の命令に対するこの手法の実行に渡される。この処理は、１つの例では、命令デコーダによって実行される。
【０１４５】
図２５を参照すると、１つの実施形態では、命令が受信され（ステップ２２００）、デコードされる（ステップ２２０２）。命令がＭＴＣＴＲなどの関係作成命令であるかどうかに関する判定が行われる（照会２２０４）。命令が関係作成命令である場合、前の関係が取り消され、新しい関係が記録される（例えば、指標が設定される）（ステップ２２０６）。しかし、命令が関係作成命令でない場合、命令が関係破壊命令（例えば、関係のソースまたはターゲット（例えば、それぞれ、関係を確立したＭＴＣＴＲのソース・レジスタ、またはカウント・レジスタ（ＣＴＲ））のいずれかを上書きする命令）であるかどうかに関する判定がさらに行われる（照会２２０８）。命令が関係破壊命令である場合、関係が取り消される（例えば、指標がリセットされる）（ステップ２２１０）。
【０１４６】
命令が関係作成命令でも関係破壊命令でもない場合、この処理が照会２２１２を続行し、照会２２１２は、現在の命令がレジスタ間接分岐命令であり、関係が現在アクティブであるかどうかをテストする。照会２２１２が肯定的である場合、関係のあるレジスタを含むレジスタ間接分岐命令が検出されており、制御がステップ２２１４に渡される。肯定的でない場合、現在の命令に関して、この手法が終了する。
【０１４７】
ステップ２２１４で、レジスタ間接分岐のターゲット・レジスタ（カウンタ・レジスタ（ｃｔｒ）など）と別のレジスタの間の関係がアクティブである場合、レジスタ間接分岐命令が検出されている。検出された関係のあるレジスタの値の予測を容易にするために、分岐命令と共に、関係のあるレジスタの存在が示され、現在の分岐のための分岐処理と共に、関係のあるレジスタの値の予測を容易にするために、関係のあるレジスタのレジスタ番号が記録される。現在の命令に対する図２５の手法が終了する。
【０１４８】
プロセッサのために処理されている１つの命令に対して図２５の手法が完了した場合（例えば、ステップ２２０６、２２１０、２２１２、または２２１４の後に）、次のフェッチされた命令に対して、処理が実行される。記録された関係情報が、図２５の手法の１つの実行から、命令ストリーム内の次の命令に対する次の実行に渡される。
【０１４９】
ステップ２２１４に従って関係作成の移動およびその後の分岐のシーケンスを決定することに基づいて、それらが１つまたは複数の他の命令によって分離されていても、前述したように、関係作成の移動および分岐に基づいて、融合シーケンスが生成される。一例として、図１７を参照して説明されたように、回復に加えて、図２２および図２３〜２４の処理が実行されてよい。１つまたは複数の実施形態では、融合または予測分岐と共に説明された他の処理が実行されてもよい。
【０１５０】
本明細書に記載されているように、１つの実施形態では、カウンタ命令からの移動（（値をＣＴＲから選択されたレジスタ（例えば、Ｒ１２）に移動する）ＭＦＣＴＲ）を実行するコストを回避するために、ＣＴＲ値が予測された場合、本発明の態様に従って、関係のあるレジスタ（Ｒ１２など）を使用して呼び出される関数のアドレスを呼び出される関数に変換するＡＢＩ関数呼び出しシーケンスに対応するシーケンスが検出されたときに、ＡＢＩが汎用レジスタ（例えば、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の既知のＥＬＦｖ２  ＡＢＩに従って、レジスタＲ１２）内のＣＴＲの値の存在を指定してよく、予測された値が、プロセッサによってＣＴＲおよび選択されたレジスタ（例えば、Ｒ１２）に書き込まれる。
【０１５１】
この選択されたレジスタは、本明細書では関係のあるレジスタと呼ばれる。１つの例では、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）のＥＬＦ  ｖ２  ＡＢＩなどの一般に知られているＡＢＩ仕様に従って、テーブル・オブ・コンテンツ（ＴＯＣ：table of contents）またはグローバル・オフセット・テーブル（ＧＯＴ）へのポインタなどの別の値を決定するために、選択されたレジスタの値が使用される。この他の値は、Ｒ２などの選択された別のレジスタに格納される。例えば、他の選択されたレジスタ（Ｒ２）の値は、選択されたレジスタ（例えば、Ｒ１２）内の値にオフセットを加算することによって取得される。その後、他の選択されたレジスタ（例えば、Ｒ２）の値が、例えば、変数へのアクセスを提供するＴＯＣまたはＧＯＴへのポインタとして使用される。具体的には、コンパイラは、最終的なアドレスも、コード／データの置き換えも知らずに、ソース・コードからオブジェクト・コードを生成する。具体的には、コンパイラは、データ構造の最終的なサイズも、さまざまなデータ・セクションのオフセット／アドレスも知らずに、変数値の可変アドレス参照データ構造（例えば、グローバル・オフセット・テーブルまたはテーブル・オブ・コンテンツ（ＴＯＣ））にアクセスするオブジェクト・コードを生成する。この情報のプレースホルダがオブジェクト・コード内に残され、リンカによって更新される。
【０１５２】
関係のあるレジスタ（例えば、Ｒ１２）の値が予測されており、オフセットが既知または決定可能であるため、態様に従って、他の選択されたレジスタの値が、関係のある導出された値として予測される。
【０１５３】
１つの実装では、関係のある導出された値の構成および処理は、関係のある値の構成および処理に類似している。例えば、関係のある導出された値（例えば、Ｒ２などのレジスタ番号）の指示は、ハード配線されるか、あるいは制御レジスタまたはその他の制御フィールド（ＭＳＲ、ＳＰＲ、ＰＳＷ、ＰＴＥ、ＳＴＥなど）に格納されてよい。さらに、コードがＥＩＡＲＰの候補である場合、関係のある導出されたレジスタのレジスタ番号が読み込まれてよい（例えば、図１１のステップ８０６）。さらに例として、図１２を参照して１つの例において説明されたように、この値は、格納され、コンテキスト切り替えにおいて復元されてよく、図１３〜１４を参照して１つの例において説明されたように、例外処理に含められてよい。この値は、本明細書に記載された他の関係のあるレジスタまたはレジスタ間接分岐あるいはその両方の予測処理に含められてもよい。
【０１５４】
図２６を参照して、関係のある導出されたレジスタも予測するレジスタ間接分岐の予測手法の一例が説明される。１つの例では、プロセッサがこの処理を実行している。最初に、レジスタ間接分岐および関係のある値の予測に関連付けられた処理が実行される（ステップ２３００）。この処理は、例えば、図８を参照して１つの例において説明されたように、レジスタ間接分岐のターゲット・アドレスを予測することと、命令フェッチを予測されたターゲット・アドレスにリダイレクトすること、新しい名前変更レジスタを、ターゲット・アドレスを保持する論理レジスタに割り当てることと、予測されたアドレスを、割り当てられた名前変更レジスタにコピーすることと、ターゲット・アドレスを保持する名前変更レジスタに、使用可能としてマーク付けすることと、新しい名前変更レジスタを、関係のあるレジスタに割り当てることと、予測されたアドレスを、関係のあるレジスタに割り当てられた名前変更レジスタにコピーすることと、関係のあるレジスタの名前変更レジスタに、使用可能としてマーク付けすることと、１つまたは複数の予測チェックを実行することとを含む、複数の動作を含んでよい。
【０１５５】
上記の動作のうちの１つまたは複数が実行される上記の処理に加えて、予測器が関係のある導出されたレジスタを予測するかどうかに関する判定が行われる（照会２３０２）。１つの例では、この判定は、ＧＯＴの使用を表す命令のシーケンスを認識することに基づく。別の例では、制御レジスタ内の１つまたは複数の制御が、関係のある導出されたレジスタの値が予測されるかどうかを予測するために使用されてよい。その他の例も可能である。
【０１５６】
予測器が、関係のある導出されたレジスタを予測しない場合、この処理が完了する。１つの例では、コードが導出された値を計算するシーケンスに分岐する場合、実行中に、動的イディオム認識が実行される。導出された値を計算するシーケンスが、例えば、コードの実行中に動的に認識され、そのことを示すように予測器が更新される。
【０１５７】
その他の方法で、予測器が、関係のある導出された値を予測する場合、１つの例では、導出された値のオフセットが取得される（ステップ２３０４）。このオフセットは、例として、ルックアップ・テーブルを使用すること、命令ストリームにアクセスすること、または予測器を使用することを含む、さまざまな手法を使用して取得されてよい。多くの手法が可能である。さらに、関係のある導出されたレジスタの値が、例えば、ステップ２３００、ステップ２３０６で取得された関係のあるレジスタの予測された値にオフセットを追加することによって計算される。
【０１５８】
新しい名前変更レジスタが、関係のある導出されたレジスタに割り当てられる（ステップ２３０８）。計算された値が、関係のある導出されたレジスタに割り当てられた名前変更レジスタにコピーされ（ステップ２３１０）、関係のある導出されたレジスタの名前変更レジスタが使用可能としてマーク付けされる（ステップ２３１２）。
【０１５９】
関係のある導出されたレジスタの予測が正しいかどうかを判定するために、この予測のチェックが実行されてよい（ステップ２３１４）。関係のある導出されたレジスタの予測をチェックすることを含む予測チェックに関連付けられた詳細が、図２７を参照してさらに説明される。この予測チェックは、例として、分岐予測チェックまたは関係のあるレジスタの予測チェックあるいはその両方に加えて実行されてよい。１つの例では、プロセッサがこの処理を実行している。
【０１６０】
図２７を参照すると、１つの例では、関係のある導出された予測の正しさのチェックが行われる（ステップ２４００）。予測が正しい場合（照会２４０１）、チェックが完了し（ステップ２４０２）、回復は実行されない。しかし、予測が正しくない場合（照会２４０１）、回復が実行される。例えば、関数エントリの後の命令がフラッシュされる（ステップ２４０４）。さらに、関係のある導出された値の名前変更レジスタを含めて、予測時に割り当てられた名前変更レジスタの割り当てが解除される（ステップ２４０６）。さらに、命令フェッチがリダイレクトされ、関係のある導出されたレジスタ（例えば、Ｒ２）の計算およびその後の命令を再実行する（ステップ２４０８）。これによって、予測チェックの１つの実装が完了する。
【０１６１】
他の実装では、関係のある導出されたレジスタの指示（例えば、レジスタ番号）が予測されてよい。このようにして、本明細書に記載されているように、関係のあるレジスタに関して、指示を予測すること、予測を使用すること、例えば関係のある導出されたレジスタの予測された値を命令ストリームにおいて非予測的に値を計算する命令シーケンスによって計算された値と比較することによって、正しさをチェックすること、または予測から回復すること、あるいはその組み合わせを実行するための処理が実行される。多くの変形が可能である。
【０１６２】
さらに別の態様では、１つまたは複数の命令のシーケンスを検出することに応答して、関係のある導出されたレジスタの存在およびレジスタの特定のレジスタ番号が決定されてよい。例えば、デコード論理は、次のコード・シーケンスを認識する。
ｍｔｃｔｒ    Ｒｘ
ｂｃｔｒｌ
ａｄｄｉｓ    Ｒｙ，    Ｒｘ，    ＃ｈｉｇｈａ  （＿ｆｏｏ  −  ．ＴＯＣ．）
ａｄｄｉ    Ｒｙ，  Ｒｙ，    ＃ｌｏｗ  （＿ｆｏｏ  −  ．ＴＯＣ．）
【０１６３】
上記のコードにおいて、ａｄｄｉｓは、１つの実施形態例では、例えばＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の定義に従って、即値加算シフト（add immediate shift）であり、ａｄｄｉは、１つの実施形態例では、例えばＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の定義に従って、即値加算であり、Ｒｘは関係のあるレジスタ（例えば、Ｒ１２）であり、Ｒｙは関係のある導出されたレジスタ（例えば、Ｒ２）である。
【０１６４】
上記のシーケンスを認識することに基づいて（または、さまざまな実施形態例に従って、類似するシーケンス、異なるシーケンスが可能であり、ハードウェア実装が、可能性のあるシーケンスのうちの１つまたは複数を認識してよい）、移動、分岐、および導出された値の計算を実行する融合シーケンスが生成される。例として、例えば、関係のあるレジスタ（例えば、Ｒ１２）および関係のある導出されたレジスタ（例えば、Ｒ２）がハード配線されるか、または制御レジスタにおいて指定されて、簡略化された融合シーケンスが生成されてよく、あるいは元の関係のあるレジスタに対する予測された分岐アドレスのチェックを含む拡張融合シーケンスが生成されてよく、ＭＴＣＴＲのコストを完全に取り除く。１つの実施形態では、この処理はデコーダによって実行され、例えば以下を含む。
ターゲット・アドレスを予測する
ＰＣ  ＜＝  予測されたターゲット・アドレス
ＣＴＲ  ＜＝  予測されたターゲット・アドレス
Ｒｘ  ＜＝  予測されたターゲット・アドレス
Ｒｙ  ＜＝  予測されたターゲット・アドレス＋オフセット
アドレスを返す
予測されたターゲット・アドレスをＲｘに対してチェックする
【０１６５】
１つの例では、関係のあるレジスタ番号（例えば、Ｒ１２）または関係のある導出されたレジスタ番号（例えば、Ｒ２）あるいはその両方が、それぞれ、関係のあるレジスタおよび関係のある導出されたレジスタとしてハード配線される。別の例では、関係のあるレジスタ番号または関係のある導出されたレジスタ番号あるいはその両方が、選択された制御レジスタ内などの、制御において示される。さらに別の例では、それらのレジスタ番号が、命令のシーケンス（例えば、ＭＴＣＴＲの後に指定されたレジスタ番号またはａｄｄｉｓもしくはａｄｄｉにおいて提供されたレジスタ番号）に基づいて動的に決定される。その他の例も可能である。
【０１６６】
図２８を参照して、融合に基づく関係のある導出されたシーケンスを使用するレジスタ間接分岐の予測手法に関する詳細が、さらに説明される。１つの例では、プロセッサがこの処理を実行している。１つの実施形態では、融合の機会の検出ステップが実行される（ステップ２５００）。例えば、デコーダによって、ＭＴＣＴＲ  Ｒｘ／ＢＣＴＲＬ．／ＡＤＤＩＳ／ＡＤＤＩのシーケンスに関するチェックが行われる。検出ステップを実行することに基づいて、そのような融合シーケンスの機会が検出されるかどうかに関する判定が行われる（照会２５０２）。すなわち、例として、ＭＴＣＴＲ、ＢＣＴＲＬ、ＡＤＤＩＳ、およびＡＤＤＩのシーケンスがコード・ストリーム内に存在するか、およびＭＴＣＴＲのＲｘが、ハード配線された関係のあるレジスタ番号などの期待されるレジスタ番号または制御において提供された番号に一致するか？融合シーケンスの機会が検出されない場合、従来の処理が実行される（ステップ２５０４）。検出された場合、１つの例では、処理が続行して、レジスタ間接分岐のターゲット・アドレスを予測し（ステップ２５０６）、命令フェッチを予測されたターゲット・アドレスにリダイレクトする（ステップ２５０８）。さらに、１つの例では、新しい名前変更レジスタが、ターゲット・アドレスを保持する論理レジスタに割り当てられる（ステップ２５１０）。予測されたアドレスが、割り当てられた名前変更レジスタにコピーされ（ステップ２５１２）、ターゲット・アドレスを保持する名前変更レジスタが使用可能としてマーク付けされる（ステップ２５１４）。
【０１６７】
さらに、新しい名前変更レジスタが、関係のあるレジスタ（例えば、Ｒ１２などのＲｘ）にも割り当てられる（ステップ２５１６）。予測されたアドレスが、関係のあるレジスタに割り当てられた名前変更レジスタにコピーされ（ステップ２５１８）、関係のあるレジスタの名前変更レジスタが使用可能としてマーク付けされる（ステップ２５２０）。
【０１６８】
さらに、新しい名前変更レジスタが、関係のある導出されたレジスタ（例えば、Ｒ２などのＲｙ）にも割り当てられる（ステップ２５２２）。予測されたアドレスにオフセットが追加され、その結果が、関係のある導出されたレジスタに割り当てられた名前変更レジスタに格納される（ステップ２５２４）。関係のある導出されたレジスタの名前変更レジスタが、使用可能としてマーク付けされる（ステップ２５２６）。
【０１６９】
予測されたアドレスの予測が正しいかどうかを判定するために、この予測のチェックが実行される（ステップ２５２８）。このチェックは、例えば、ターゲット・アドレスを、融合シーケンスより前の関係のあるレジスタ（Ｒｘ）の値と（例えば、前の名前変更レジスタを使用して）比較することを含む。この予測が正しくない場合、１つの例では、本明細書に記載されているように、回復が実行される。これで、この処理の１つの実施形態が完了する。
【０１７０】
他の実施形態では、本明細書に記載されているように、その他の予測チェックが実行されてもよい。
【０１７１】
本発明の１つまたは複数の態様は、コンピュータ技術に密接に関係しており、コンピュータ内の処理を容易にし、その性能を改善する。コンピューティング環境内の処理が、本発明の１つまたは複数の態様に関連しているとき、それらを容易にする一実施形態の詳細が、図２９〜３０を参照してさらに説明される。
【０１７２】
図２９を参照すると、１つの実施形態では、コードの単位に関して、コードの単位が関係のあるレジスタの予測の候補であるかどうかの判定が行われる（２６００）。この判定することは、コードの単位に固有である、コード固有の指標を採用する（２６０２）。コードの単位が関係のあるレジスタの予測の候補であるということの決定に基づいて、関係のあるレジスタの指示が、選択された位置に読み込まれる（２６０４）。この読み込みに基づいて、投機的処理において、関係のあるレジスタが採用される（２６０６）。
【０１７３】
別の例では、コードの別の単位が、コードの別の単位が関係のあるレジスタの予測の候補であるかどうかを判定するために使用される、コードの別の単位に固有である別のコード固有の指標を有する（２６０８）。
【０１７４】
一例として、この選択された位置は、マシン状態レジスタ、プログラム状態ワード、専用レジスタ、ページ・テーブル・エントリ、セグメント・テーブル・エントリ、および特定の制御レジスタから成る群から選択される（２６１０）。
【０１７５】
別の実施形態では、コンテキスト切り替えが発生したことの決定が行われる（２６１２）。コンテキスト切り替えに基づいて、構成が更新され、この構成がコード固有の指標を含む（２６１４）。
【０１７６】
１つの実施形態では、コード固有の指標が、コードの単位に具体的に結び付けられた位置にあるかどうかに関する判定が行われ（２６１６）、コード固有の指標が、コードの単位に具体的に結び付けられていない位置にあるということの決定に基づいて、更新が実行される（２６１８）。
【０１７７】
例として、図３０を参照すると、コードの単位に具体的に結び付けられた位置は、ページ・テーブル・エントリまたはセグメント・テーブル・エントリを含み（２６２０）、コードの単位に具体的に結び付けられていない位置は、制御レジスタを含む（２６２２）。
【０１７８】
別の実施形態では、ハードウェア例外が受け取られたことの決定が行われる（２６２４）。ハードウェア例外に基づいて、構成情報が例外コンテキストに格納される（２６２６）。一例として、この構成情報は、コード固有の指標を含む（２６２８）。
【０１７９】
さらに、１つの実施形態では、ハードウェア例外処理が終了する（２６３０）。この終了することは、例えば、構成情報を例外コンテキストから取得することと（２６３２）、構成情報を制御レジスタに格納することと（２６３４）を含む。
【０１８０】
一例として、関係のあるレジスタは、ターゲット・アドレスの予測に基づいて、予測されたターゲット・アドレスを格納するために選択されたレジスタである（２６３６）。
【０１８１】
命令シーケンスを高速化するために、本発明の１つまたは複数の態様が有利に使用される。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の１つの実施形態に従って、下記に示されているシーケンスを効率的に実行することができ、このシーケンスでは、カウンタ間接分岐（counter-indirect branch）を介して関数に入ったときに、ＧＯＴのベースを初期化するために、カウンタ・レジスタが使用される。
【０１８２】
したがって、レジスタ間接呼び出しまたはモジュール外部呼び出しを実行するとき、および呼び出される関数のターゲット・レジスタと共にカウンタ（ＣＴＲ）レジスタが初期されたときに、以下に示されているように、呼び出し元がサブルーチンを呼び出してよい。
ｂｃｔｒｌ
【０１８３】
１つの実施形態に従って、ＡＢＩは、モジュールの外部の呼び出し元からのカウント・レジスタ（ｃｔｒ）間接呼び出し、ならびにＧＯＴポインタが初期化される場合、およびＧＯＴポインタが初期化されない場合のローカルの呼び出し元からの、レジスタ間接呼び出しのために、２つのエントリ・ポイントを有するように関数を定義する。
ｃａｌｌｅｅ＿ｃｔｒ＿ｉｎｄｉｒｅｃｔ＿ｅｎｔｒｙ：
ｍｆｃｔｒ  ｒ１２    ！ＣＴＲ値を取得する
ａｄｄｉｓ  ｒ２，  ｒ１２，  （．ＴＯＣ．−ｃａｌｌｅｅ＿ｃｔｒ＿ｉｎｄｉｒｅｃ＿ｅｎｔｒｙ）＠ｈａ
ａｄｄｉ  ｒ２．ｒ２，  （．ＴＯＣ．−ｃａｌｌｅｅ＿ｃｔｒ＿ｉｎｄｉｒｅｃｔ＿ｅｎｔｒｙ）＠１
ｃａｌｌｅ＿ｄｉｒｅｃｔ＿ｌｏｃａｌ＿ｅｎｔｒｙ：
…    ！サブルーチン本体
ｂｌｒ    ！呼び出し元に戻る
【０１８４】
有利なことに、カウント・レジスタの値を読み込むＭＦＣＴＲ命令は、ＣＴＲの予測された投機的値を直ちに提供することができ、ａｄｄｉｓおよびａｄｄｉのその後のシーケンスが、グローバル変数にアクセスするためのレジスタとしてＧＯＴポインタを計算できるようにし、その他の方法ではサブルーチン本体の処理を遅らせるグローバル変数のアクセスを進めることができるようにする。
【０１８５】
別の実施形態では、例えば、Ｓｙｓｔｅｍ／３６０（Ｒ）命令セットに従って、レジスタ間接呼び出しを使用してサブルーチン呼び出しが実行されてよく、単一のエントリ・ポイントのみが存在してよい。
【０１８６】
エミュレーション環境を含むが、これに限定されない、その他の種類のコンピューティング環境が、本発明の１つまたは複数の態様を組み込んで使用してもよく、その例が、図３１を参照して説明される。この例では、コンピューティング環境２０は例えば、例えば１つまたは複数のバス２８またはその他の接続あるいはその両方を介して互いに結合された、ネイティブ中央処理装置（ＣＰＵ）２２、メモリ２４、および１つまたは複数の入出力デバイスまたはインターフェイスあるいはその両方２６を含む。例として、コンピューティング環境２０は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒＰＣ（Ｒ）プロセッサもしくはＰｏｗｅｒサーバ、またはＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ、Ｉｎｔｅｌ（Ｒ）、もしくはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組み合わせを含んでよい。
【０１８７】
ネイティブ中央処理装置２２は、環境内で処理中に使用される１つもしくは複数の汎用レジスタまたは１つもしくは複数の専用レジスタあるいはその両方などの、１つまたは複数のネイティブ・レジスタ３０を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
【０１８８】
さらに、ネイティブ中央処理装置２２は、メモリ２４に格納された命令およびコードを実行する。１つの特定の例では、中央処理装置は、メモリ２４に格納されたエミュレータ・コード３２を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、別のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード３２は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）以外のアーキテクチャに基づくマシン（ＰｏｗｅｒＰＣ（Ｒ）プロセッサ、ｐＳｅｒｉｅｓ（Ｒ）サーバ、あるいはその他のサーバまたはプロセッサなど）が、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）をエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づいて開発されたソフトウェアおよび命令を実行できるようにする。
【０１８９】
エミュレータ・コード３２に関連する詳細が、図３２を参照してさらに説明される。メモリ２４に格納されたゲスト命令４０は、ネイティブＣＰＵ２２のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された（例えば、マシン命令と相互関係がある）ソフトウェア命令を含む。例えば、ゲスト命令４０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）プロセッサ上で実行するように設計されてよいが、代わりに、例えばＩｎｔｅｌ（Ｒ）プロセッサであってよい、ネイティブＣＰＵ２２上でエミュレートされる。１つの例では、エミュレータ・コード３２は、メモリ２４から１つまたは複数のゲスト命令４０を取得するため、および取得された命令のローカル・バッファリングを任意選択的に提供するための命令フェッチ・ルーチン４２を含む。エミュレータ・コード３２は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、１つまたは複数の対応するネイティブ命令４６に変換するための命令変換ルーチン４４も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
【０１９０】
さらに、エミュレータ・コード３２は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン４８を含む。エミュレーション制御ルーチン４８は、ネイティブＣＰＵ２２に、１つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令４６の実行は、データをメモリ２４からレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
【０１９１】
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置２２によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンもしくは動作のうちの１つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブＣＰＵのレジスタ３０を使用して、またはメモリ２４内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令４０、ネイティブ命令４６、およびエミュレータ・コード３２は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
【０１９２】
本明細書において使用されるとき、ファームウェアは、例えば、プロセッサのマイクロコードまたはミリコードを含む。ファームウェアは、例えば、上位レベルの機械コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。１つの実施形態では、ファームウェアは、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。
【０１９３】
取得され、変換されて実行されるゲスト命令４０は、例えば、本明細書に記載された命令のうちの１つであってよい。あるアーキテクチャ（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ））の命令が、メモリからフェッチされ、変換され、別のアーキテクチャ（例えば、ＰｏｗｅｒＰＣ（Ｒ）、ｐＳｅｒｉｅｓ（Ｒ）、Ｉｎｔｅｌ（Ｒ）など）のネイティブ命令４６のシーケンスとして表される。その後、これらのネイティブ命令が実行される。
【０１９４】
１つまたは複数の態様がクラウド・コンピューティングに関連してよい。
【０１９５】
本開示にはクラウド・コンピューティングの詳細な説明が含まれているが、本明細書において示された教示の実装は、クラウド・コンピューティング環境に限定されないということが、あらかじめ理解される。本発明の実施形態は、現在既知であるか、または今後開発される任意のその他の種類のコンピューティング環境と組み合わせて実装できる。
【０１９６】
クラウド・コンピューティングは、構成可能な計算リソース（例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス）の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス提供モデルであり、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。このクラウド・モデルは、少なくとも５つの特徴、少なくとも３つのサービス・モデル、および少なくとも４つのデプロイメント・モデルを含むことができる。
【０１９７】
特徴は、次のとおりである。
オンデマンドのセルフ・サービス：クラウドの利用者は、サーバの時間、ネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に応じて自動的にプロビジョニングすることができる。
幅広いネットワーク・アクセス：能力は、ネットワークを経由して利用可能であり、標準的なメカニズムを使用してアクセスできるため、異種のシン・クライアントまたはシック・クライアント・プラットフォーム（例えば、携帯電話、ラップトップ、およびＰＤＡ）による利用を促進する。
リソース・プール：プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供される。さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象レベルでは、場所（例えば、国、州、またはデータセンター）を指定できる場合がある。
迅速な順応性：能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、無制限であるように見え、任意の量をいつでも購入できる。
測定されるサービス：クラウド・システムは、計測機能を活用することによって、サービスの種類（例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント）に適した一部の抽象レベルで、リソースの使用を自動的に制御および最適化する。リソースの使用量は監視、制御、および報告することができ、利用されるサービスのプロバイダと利用者の両方に透明性が提供される。
【０１９８】
サービス・モデルは、次のとおりである。
ＳａａＳ（Software as a Service）：利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションの利用である。それらのアプリケーションは、Ｗｅｂブラウザ（例えば、Ｗｅｂベースの電子メール）などのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、またはさらには個々のアプリケーション機能を含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定を行う可能性を除き、管理することも制御することもない。
ＰａａＳ（Platform as a Service）：利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御することができる。
ＩａａＳ（Infrastructure as a Service）：利用者に提供される能力は、処理、ストレージ、ネットワーク、およびその他の基本的な計算リソースをプロビジョニングすることであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、オペレーティング・システム、ストレージ、およびデプロイされたアプリケーションを制御することができ、場合によっては、選択されたネットワーク・コンポーネント（例えば、ホスト・ファイアウォール）を限定的に制御できる。
【０１９９】
デプロイメント・モデルは、次のとおりである。
プライベート・クラウド：このクラウド・インフラストラクチャは、ある組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
コミュニティ・クラウド：このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事（例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項）を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
パブリック・クラウド：このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド：このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術（例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト）によって固有の実体を残したまま互いに結合された２つ以上のクラウド（プライベート、コミュニティ、またはパブリック）の複合である。
【０２００】
クラウド・コンピューティング環境は、ステートレス、疎結合、モジュール性、および意味的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心になるのは、相互接続されたノードのネットワークを備えるインフラストラクチャである。
【０２０１】
ここで図３３を参照すると、例示的なクラウド・コンピューティング環境５０が示されている。図示されているように、クラウド・コンピューティング環境５０は、クラウドの利用者によって使用されるローカル・コンピューティング・デバイス（例えば、携帯情報端末（ＰＤＡ：Personal Digital Assistant）もしくは携帯電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、または自動車コンピュータ・システム５４Ｎ、あるいはその組み合わせなど）が通信できる１つまたは複数のクラウド・コンピューティング・ノード１０を備える。ノード１０は、互いに通信することができる。ノード１０は、１つまたは複数のネットワーク内で、本明細書において前述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはこれらの組み合わせなどに、物理的または仮想的にグループ化されてよい（図示されていない）。これによって、クラウド・コンピューティング環境５０は、クラウドの利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないインフラストラクチャ、プラットフォーム、またはＳａａＳ、あるいはその組み合わせを提供できる。図３３に示されたコンピューティング・デバイス５４Ａ〜Ｎの種類は、例示のみが意図されており、コンピューティング・ノード１０およびクラウド・コンピューティング環境５０は、任意の種類のネットワークまたはネットワーク・アドレス可能な接続（例えば、Ｗｅｂブラウザを使用した接続）あるいはその両方を経由して任意の種類のコンピュータ制御デバイスと通信できるということが理解される。
【０２０２】
ここで図３４を参照すると、クラウド・コンピューティング環境５０（図３３）によって提供される機能的抽象レイヤのセットが示されている。図３４に示されたコンポーネント、レイヤ、および機能は、例示のみが意図されており、本発明の実施形態がこれらに限定されないということが、あらかじめ理解されるべきである。図示されているように、次のレイヤおよび対応する機能が提供される。
【０２０３】
ハードウェアおよびソフトウェア・レイヤ６０は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例としては、メインフレーム６１、ＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャベースのサーバ６２、サーバ６３、ブレード・サーバ６４、ストレージ・デバイス６５、ならびにネットワークおよびネットワーク・コンポーネント６６が挙げられる。一部の実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア６７およびデータベース・ソフトウェア６８を含む。
【０２０４】
仮想化レイヤ７０は、仮想サーバ７１、仮想ストレージ７２、仮想プライベート・ネットワークを含む仮想ネットワーク７３、仮想アプリケーションおよびオペレーティング・システム７４、ならびに仮想クライアント７５などの仮想的実体の例を提供できる抽象レイヤを備える。
【０２０５】
一例を挙げると、管理レイヤ８０は、以下で説明される機能を提供することができる。リソース・プロビジョニング８１は、クラウド・コンピューティング環境内でタスクを実行するために利用される計算リソースおよびその他のリソースの動的調達を行う。計測および価格設定８２は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡、およびそれらのリソースの利用に対する請求書の作成と送付を行う。一例を挙げると、それらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウドの利用者およびタスクのＩＤ検証を行うと共に、データおよびその他のリソースの保護を行う。ユーザ・ポータル８３は、クラウド・コンピューティング環境へのアクセスを利用者およびシステム管理者に提供する。サービス・レベル管理８４は、必要なサービス・レベルを満たすように、クラウドの計算リソースの割り当てと管理を行う。サービス水準合意（ＳＬＡ：Service Level Agreement）計画および実行８５は、今後の要求が予想されるクラウドの計算リソースの事前準備および調達を、ＳＬＡに従って行う。
【０２０６】
ワークロード・レイヤ９０は、クラウド・コンピューティング環境で利用できる機能の例を示している。このレイヤから提供されてよいワークロードおよび機能の例としては、マッピングおよびナビゲーション９１、ソフトウェア開発およびライフサイクル管理９２、仮想クラスルーム教育の配信９３、データ解析処理９４、トランザクション処理９５、およびレジスタ処理９６が挙げられる。
【０２０７】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいる１つまたは複数のコンピュータ可読記憶媒体を含んでよい。
【０２０８】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー・ディスク、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-onlymemory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【０２０９】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【０２１０】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは同様のプログラミング言語などの手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）もしくは広域ネットワーク（ＷＡＮ：wide area network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【０２１１】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【０２１２】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【０２１３】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
【０２１４】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャート図またはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、またはブロックは場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、あるいは専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【０２１５】
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、１つまたは複数の態様が提供されること、提示されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、１人または複数人の顧客のために１つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、１つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
【０２１６】
１つの態様では、１つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。１つの例として、アプリケーションのデプロイは、１つまたは複数の実施形態を実行するよう動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０２１７】
さらに別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・インフラストラクチャでは、コンピューティング・システムと組み合わせたコードが、１つまたは複数の実施形態を実行できる。
【０２１８】
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が１つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、１つまたは複数の実施形態を実行できる。
【０２１９】
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、１つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、さまざまな命令または動作が使用されてよい。さらに、さまざまなレジスタが使用されてよく、またはその他の種類の（レジスタ番号以外の）指示が指定されてよく、あるいはその両方が行われてよい。多くの変形が可能である。
【０２２０】
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも２つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
【０２２１】
入出力デバイスまたはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない）は、直接的に、または介在するＩ／Ｏコントローラを通じてのいずれかで、システムに結合できる。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
【０２２２】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える（ｃｏｍｐｒｉｓｅ）」または「備えている（ｃｏｍｐｒｉｓｉｎｇ）」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、１つもしくは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【０２２３】
下の特許請求の範囲内のすべての手段またはステップおよび機能要素の対応する構造、材料、動作、および等価なものは、もしあれば、具体的に請求されるとき、その他の請求される要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。１つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、または開示された形態に限定されない。多くの変更および変形が可能であるということは、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。
【図１】
2020531966.tif 000003
【図２】
2020531966.tif 000004
【図３】
2020531966.tif 000005
【図４】
2020531966.tif 000006
【図５】
2020531966.tif 000007
【図６】
2020531966.tif 000008
【図７】
2020531966.tif 000009
【図８】
2020531966.tif 000010
【図９】
2020531966.tif 000011
【図１０】
2020531966.tif 000012
【図１１】
2020531966.tif 000013
【図１２】
2020531966.tif 000014
【図１３】
2020531966.tif 000015
【図１４】
2020531966.tif 000016
【図１５】
2020531966.tif 000017
【図１６】
2020531966.tif 000018
【図１７】
2020531966.tif 000019
【図１８】
2020531966.tif 000020
【図１９】
2020531966.tif 000021
【図２０】
2020531966.tif 000022
【図２１】
2020531966.tif 000023
【図２２】
2020531966.tif 000024
【図２３】
2020531966.tif 000025
【図２４】
2020531966.tif 000026
【図２５】
2020531966.tif 000027
【図２６】
2020531966.tif 000028
【図２７】
2020531966.tif 000029
【図２８】
2020531966.tif 000030
【図２９】
2020531966.tif 000031
【図３０】
2020531966.tif 000032
【図３１】
2020531966.tif 000033
【図３２】
2020531966.tif 000034
【図３３】
2020531966.tif 000035
【図３４】
2020531966.tif 000036
【国際調査報告】
2020531966.tif 000037
2020531966.tif 000038