命令セットアーキテクチャで定義され、第1の命令によって特定されたレジスタから、プログラム指定されたターゲットアドレスを取り出すステップと、間接分岐命令であると動的に決定される第2の命令が見つかった後に、前記プログラム指定されたターゲットアドレスにスペキュレイティブ実行のフローを変更するステップとを含む、プログラムのシーケンシャルフローを変更するための方法。前記間接分岐命令が、前記第1の命令の後の、次に見つかった間接分岐命令である、請求項1に記載の方法。前記間接分岐命令が、前記第1の命令によって特定されたレジスタと一致するターゲットレジスタを指定する、次に見つかった間接分岐命令である、請求項1に記載の方法。前記第1の命令を、コードシーケンスにおいて、前記間接分岐よりも少なくともN個のプログラム命令だけ前に挿入するステップであって、前記N個のプログラム命令が、前記間接分岐を受信するパイプラインステージと、前記第1の命令によって特定された前記レジスタを認識するパイプラインステージとの間のパイプラインステージの数に対応している、ステップをさらに含む、請求項1に記載の方法。前記間接分岐を受信するパイプラインステージがフェッチステージであり、前記第1の命令によって特定されたレジスタを認識するパイプラインステージが実行ステージである、請求項4に記載の方法。複数の事前通知命令を、対応する複数の間接分岐命令を見つける前に受信するステップであって、前記第1の命令がADVN命令である、ステップと、複数のADVN命令と、見つけられた対応する複数の間接分岐命令との間の対応関係をファーストインファーストアウトスタックを用いてトラッキングするステップとをさらに含む、請求項1に記載の方法。分岐ターゲットアドレスレジスタに記憶された値が有効命令アドレスであることを決定するステップと、フェッチする次の命令アドレスを特定するために間接分岐をデコードする際に、前記分岐ターゲットアドレスレジスタからの値を選択するステップとをさらに含む、請求項1に記載の方法。分岐ターゲットアドレスを定める間接分岐を実行するステップと、前記定められた分岐ターゲットアドレスを、前記プログラム指定されたターゲットアドレスと比較するステップと、前記定められた分岐ターゲットアドレスが、前記プログラム指定されたターゲットアドレスと同じでない場合に、プロセッサパイプラインをフラッシュするステップとをさらに含む、請求項1に記載の方法。前記第1の命令が見つかった後に分岐予測回路を無効にするステップをさらに含む、請求項1に記載の方法。コード部分の実行中に見つかった分岐をトラッキングするために利用される、ハードウェアリソースを有する分岐履歴予測回路を有するプロセッサパイプラインにおいて、前記命令をノーオペレーションとして処理するステップと、前記分岐履歴予測回路にとって利用可能なハードウェアリソースを超えるコード部分に対する前記命令をイネーブルにするステップとをさらに含む、請求項1に記載の方法。命令のシーケンスにおけるターゲットアドレス変更命令によって作られた最新のターゲットアドレスを特定するために、前記命令のシーケンスを分析するステップと、前記最新のターゲットアドレスを利用する間接分岐命令がスペキュレイティブに実行される前に、前記最新のターゲットアドレスに基づいて次のプログラムアドレスを準備するステップとを含む、間接分岐アドレスの事前通知を行なうための方法。コード部分を通る第1のパスに基づいて間接分岐命令のターゲットアドレスレジスタを自動的に特定するステップであって、前記特定されたターゲットアドレスレジスタが、命令によって作られた最新のターゲットアドレスを自動的に特定するために用いられる、ステップをさらに含む、請求項11に記載の方法。間接分岐命令がデコードされる際に次のプログラムアドレスが準備される、請求項11に記載の方法。前記命令のシーケンスにおいて、間接分岐命令よりも少なくともN個のプログラム命令だけ前である、前記命令のシーケンスにおける位置に前記ターゲットアドレス変更命令を移動するステップであって、Nが、前記間接分岐を受信するパイプラインステージと、前記ターゲットアドレス変更命令によって特定された前記レジスタを認識するパイプラインステージとの間のパイプラインステージの数と一致する、ステップをさらに含む、請求項11に記載の方法。前記間接分岐を受信するパイプラインステージがフェッチステージであり、前記ターゲットアドレス変更命令によって特定されたレジスタを認識するパイプラインステージが実行ステージである、請求項14に記載の方法。間接分岐命令によって指定されたターゲットアドレスレジスタエントリに最新のターゲットアドレスを生成した命令の命令アドレスを第1のテーブルにロードするステップをさらに含む、請求項11に記載の方法。命令アドレスにおける有効ビットの連想メモリで、アサートされた有効ビットをチェックするステップと、アサートされた有効ビットに応じて、前記第1のテーブルによって特定された命令を実行することによって得られる値を分岐ターゲットアドレスレジスタにロードするステップとをさらに含む、請求項16に記載の方法。前記分岐ターゲットアドレスレジスタに記憶された値を用いて分岐ターゲットアドレスを提供するステップをさらに含む、請求項17に記載の方法。プログラムによって指定された命令メモリアドレスを、間接分岐命令の事前通知間接アドレスとして保持するためのレジスタと、前記レジスタを対象とする命令を監視するネクストプログラムアドレス選択器回路であって、間接分岐命令をスペキュレイティブに実行する際に次のプログラムアドレスとして用いるために、間接分岐命令を見つける前に、前記レジスタからADVN間接アドレスとして最新のターゲットアドレスを前記監視された命令に基づいて選択するネクストプログラムアドレス選択器回路とを備える、間接分岐ターゲットアドレスの事前通知を行なうための装置。前記レジスタに記憶される分岐ターゲットアドレスを特定するために、プログラム命令をデコードするためのデコーダをさらに備える、請求項19に記載の装置。前記間接分岐命令を受信するステージと、前記最新のターゲットアドレスを認識するステージとの間のN個のステージを有するプロセッサパイプラインであって、前記ネクストプログラムアドレス選択器回路が、前記間接分岐よりも少なくとも前記N個のステージだけ前の前記ADVN間接アドレスを選択する、プロセッサパイプラインをさらに備える、請求項19に記載の装置。間接分岐命令を受信するパイプラインステージがフェッチステージであり、最新のターゲットアドレスを認識するパイプラインステージが実行ステージである、請求項21に記載の装置。前記ADVN間接アドレスが、間接分岐命令の分岐ターゲットアドレスに影響を及ぼす現在の実行サイクルに先立つ、プログラムにおける命令の実行ステータスを記憶するトラッキングテーブルに基づいている、請求項19に記載の装置。プロセッサは、プログラムを実行する際に高い性能をもたらすために、通常はパイプラインで命令を実行する。また、プロセッサは、スペキュレイティブ実行を用いて、予測された分岐ターゲットアドレスで始まる命令をフェッチして実行することができる。分岐が予測ミスされると、スペキュレイティブに実行された命令はパイプラインからフラッシュされなければならず、パイプラインは、正しいパスアドレスで再度開始される必要がある。多くのプロセッサ命令セットには、レジスタの内容から得られるプログラムのデスティネーションアドレスに分岐する命令がしばしばある。このような命令は、一般に間接分岐命令と呼ばれている。レジスタの内容に対する間接分岐の依存性により、分岐ターゲットアドレスを予測することは通常困難であるが、これは、間接分岐命令が実行されるたびにレジスタが異なる値を有する可能性があるためである。予測ミスされた間接分岐を訂正する際には、正しい分岐パスにおける命令をフェッチして実行するために、間接分岐命令へのバックトラッキングが一般に必要となり、それによってプロセッサの性能が低下する可能性がある。また、予測ミスは、プロセッサが誤ってスペキュレイティブにフェッチして間違った分岐パスにおける命令の処理を開始し、それによって、使われない命令を処理することと、それらの命令をパイプラインからフラッシュすることとの両方によって電力の増加が引き起こされることを示す。本発明では、いくつかの態様の中で、プロセッサシステムにおいて性能を向上させ、また電力要件を下げるために、命令を実行する際に起こり得る予測ミスの数を最少にすることが有利である点が認識されている。このような目的に対して、本発明の実施形態は、プログラムのシーケンシャルフローを変更するための方法に該当する。この方法は、命令セットアーキテクチャで定義され、第1の命令によって特定されたレジスタから、プログラム指定されたターゲットアドレスを取り出す。スペキュレイティブ実行のフローは、間接分岐命令であると動的に決定される第2の命令が見つかった後に、上記プログラム指定されたターゲットアドレスに変更される。本発明における別の実施形態は、間接分岐アドレスの事前通知を行なうための方法に対処している。命令のシーケンスは、命令のシーケンスにおけるターゲットアドレス変更命令によって作られた最新のターゲットアドレスを特定するために分析される。次のプログラムアドレスは、最新のターゲットアドレスを利用する間接分岐命令がスペキュレイティブに実行される前に、最新のターゲットアドレスに基づいて準備される。本発明における別の態様は、間接分岐ターゲットアドレスの事前通知を行なうための装置に対処している。この装置は、プログラムによって指定された命令メモリアドレスを、間接分岐命令における事前通知間接アドレスとして保持するためのレジスタを用いる。また、この装置は、上記レジスタを対象とする命令を監視するネクストプログラムアドレス選択器回路であって、間接分岐命令をスペキュレイティブに実行する際に次のプログラムアドレスとして用いるために、間接分岐命令に出くわす前に、上記レジスタからADVN間接アドレスとして最新のターゲットアドレスを監視された命令に基づいて選択するネクストプログラムアドレス選択器回路を用いる。本発明におけるさらに十分な理解と、本発明におけるさらなる特徴および利点とは、以下の詳細な説明と添付図面より明らかとなろう。次に、本発明におけるいくつかの実施例が示されている添付図面を参照して、本発明をさらに十分に説明する。しかし、本発明は、様々な形態で実施されてもよく、本明細書に明記された実施形態に限定されるように解釈されるべきではない。むしろ、これらの実施態様は、本開示が十分で完全なものとなり、本発明の範囲を当業者に十分に伝えることになるように提供されている。本発明の教示に基づいて動作するか、もしくは本発明の教示に従う動作を実行するコンピュータプログラムコードまたはプログラムコードは、C、C、JAVA、SmallTalk、JavaScript、VisualBasic、TSQL、Perlなどの高レベルのプログラミング言語、または、様々な他のプログラミング言語で最初は書かれてもよい。これらの言語の1つで書かれたプログラムは、高レベルプログラムのコードをネイティブアセンブラプログラムに変換することによって、ターゲットプロセッサのアーキテクチャにコンパイルされる。また、ターゲットプロセッサのアーキテクチャのためのプログラムは、ネイティブアセンブラ言語で直接書かれてもよい。ネイティブアセンブラプログラムでは、マシンレベルのバイナリ命令における、命令のニーモニック表現が用いられる。本明細書で用いられる場合、プログラムコードまたはコンピュータ可読媒体は、プロセッサがフォーマットを理解できる、オブジェクトコードなどのマシン言語コードを指す。図1は、本発明の実施形態を有利に用いることができる例示的なワイヤレス通信システム100を示す。図1は、説明のために、3つの遠隔ユニット120、130、および150、ならびに、2つの基地局140を示す。一般的なワイヤレス通信システムは、より多くの遠隔ユニットおよび基地局を有し得ることが理解されよう。コンポーネント125A、125C、125B、および125Dでそれぞれ表されるハードウェアコンポーネント、ソフトウェアコンポーネント、またはその両方を含む遠隔ユニット120、130、150、および基地局140は、さらに後で論じるように、本発明を実施するように適合している。図1は、基地局140から遠隔ユニット120、130、および150への順方向リンク信号180、ならびに、遠隔ユニット120、130、および150から基地局140への逆方向リンク信号190を示している。図1では、遠隔ユニット120は移動電話として示され、遠隔ユニット130はポータブルコンピュータとして示され、遠隔ユニット150は、ワイヤレスローカルループシステムにおける固定位置遠隔ユニットとして示されている。例として、遠隔ユニットは、代替的には、セルフォン、ページャ、ウォーキートーキー、ハンドヘルド個人通信システムユニット、携帯情報端末などのポータブルデータユニット、またはメータ読取り機器などの固定位置データユニットでもよい。図1は、本開示の教示による遠隔ユニットを示すが、本開示は、これらの例示的に示されたユニットに限定されない。本発明の実施形態は、間接分岐命令を有する任意のプロセッサシステムにおいて好適に用いることができる。図2は、本発明に従って間接分岐命令の分岐ターゲットアドレスの事前通知の準備をサポートするプロセッサ複合体200の機能ブロック図である。このプロセッサ複合体200は、プロセッサパイプライン202、汎用レジスタファイル204、制御回路206、L1命令キャッシュ208、L1データキャッシュ210、およびメモリ階層212を含む。制御回路206は、命令フェッチステージ214を含むプロセッサパイプライン202を制御するための、以下でより詳細に説明されるように相互に作用するプログラムカウンタ215と分岐ターゲットアドレスレジスタ219とを含む。プロセッサ複合体につながることができる周辺デバイスは、説明を簡潔にするために図示されていない。プロセッサ複合体200は、L1データキャッシュ210に記憶された、メモリ階層212と関連づけられたデータを利用して、L1命令キャッシュ208に記憶されたプログラムコードを実行するために、図1のハードウェアコンポーネント125A~125Dにおいて好適に用いることができる。プロセッサパイプライン202は、汎用プロセッサ、デジタル信号プロセッサ、特定用途向けプロセッサ等において動作可能である。プロセッサ複合体200における様々なコンポーネントは、特定用途向け集積回路の技術、フィールドプログラマブルゲートアレイの技術、または他のプログラマブルロジック、ディスクリートゲートもしくはトランジスタロジック、または意図されるアプリケーションに適した任意の他の利用可能な技術を用いて実現することができる。プロセッサパイプライン202は、命令フェッチステージ214と、デコードおよび事前通知ステージ216と、ディスパッチステージ218と、リードレジスタステージ220と、実行ステージ222と、ライトバックステージ224とである、6つの主要ステージを含む。単一のパイプライン202が図示されているが、本発明の間接分岐ターゲットアドレス事前通知を有する命令の処理は、スーパースカラの設計、および、並列パイプラインを実装している他のアーキテクチャに適用可能である。例えば、高いクロックレート用に設計されたスーパースカラプロセッサは、2つ以上の並列パイプラインを有することができ、それぞれのパイプラインは、命令フェッチステージ214と、ADVNロジック回路217を有するデコードおよびADVNステージ216と、ディスパッチステージ218と、リードレジスタステージ220と、実行ステージ222と、ライトバックステージ224とを、2つ以上のパイプライン化されたステージに分割して、高いクロックレートをサポートするために全体的なプロセッサパイプラインの深さを増すことができる。プロセッサパイプライン202における第1のステージで始めると、プログラムカウンタ215と関連する命令フェッチステージ214は、後段のステージによる処理のためにL1命令キャッシュ208から命令をフェッチする。L1命令キャッシュ208において命令フェッチがミスする場合、これは、フェッチされる命令がL1命令キャッシュ208に存在しないことを意味し、命令は、レベル2のキャッシュなどのマルチレベルのキャッシュとメインメモリとを含み得るメモリ階層212からフェッチされる。命令は、ブートリードオンリーメモリ、ハードドライブ、光ディスクなどの他のソース、または、インターネットなどの外部インターフェースからメモリ階層212にロードすることができる。次いで、フェッチされた命令は、ADVNロジック回路217を有するデコードおよびADVNステージ216においてデコードされ、以下でより詳細に説明される間接分岐ターゲットアドレス値の事前通知のためのさらなる能力を提供する。図2に示されているように制御回路206に配置され得る分岐ターゲットアドレスレジスタ219は、このような配置に限定されないが、ADVNロジック回路217と関連づけられている。BTAR219は、例えばデコードおよびADVNステージ216の中に好適に配置されてもよい。ディスパッチステージ218は、デコードされた1つまたは複数の命令を受け取り、それらの命令を、例えば、スーパースカラプロセッサまたはマルチスレッドプロセッサなどで利用される1つまたは複数の命令パイプラインにディスパッチする。リードレジスタステージ220は、GPRF204からデータオペランドをフェッチするか、または、フォワーディングネットワーク226からデータオペランドを受信する。フォワーディングネットワーク226は、実行ステージから結果オペランドが利用できるようになるとすぐにそれらの結果オペランドを提供するように、GPRF204の周辺の高速パスを提供する。フォワーディングネットワークを用いても、深い実行パイプラインからの結果オペランドは、3つ以上の実行サイクルを要する場合がある。これらのサイクルの間、実行パイプラインからの結果オペランドデータを要するリードレジスタステージ220の命令は、結果オペランドが利用可能になるまで待つ必要がある。実行ステージ222は、ディスパッチされた命令を実行し、ライトバックステージ224は、結果をGPRF204に書き込み、また、結果が以降の命令で使われる場合には、フォワーディングネットワーク226を通じてリードレジスタステージ220に結果を送り戻すこともできる。結果は、プログラムの順序に比べると、アウトオブオーダーでライトバックステージ224において受信され得るため、ライトバックステージ224は、結果をGPRF204に書き込む場合には、プロセッサの機能を使ってプログラムの順序を保つ。間接分岐命令のターゲットアドレスの事前通知を行なうためのプロセッサパイプライン202に関するより詳細な説明は、詳細なコード例を用いて以下で行なわれる。プロセッサ複合体200は、コンピュータ可読記憶媒体に記憶されたプログラムにおける制御のもとで命令を実行するように構成することができる。例えば、コンピュータ可読記憶媒体は、L1データキャッシュ210およびメモリ階層212から得られるデータに基づく動作に向けて、プロセッサ複合体200とローカルに直接関連づけられていてもよく、例えば、L1命令キャッシュ208から利用可能なものでもよく、または、例えば、入力出力インターフェースを介するものでもよい。また、プロセッサ複合体200は、プログラムの実行時にはL1データキャッシュ210とメモリ階層212からデータにアクセスする。コンピュータ可読記憶媒体は、ランダムアクセスメモリ、動的ランダムアクセスメモリ、同期動的ランダムアクセスメモリ、フラッシュメモリ、リードオンリーメモリ、プログラマブルリードオンリーメモリ、消去可能プログラマブルリードオンリーメモリ、電気消去可能プログラマブルリードオンリーメモリ、コンパクトディスク、デジタルビデオディスク、他のタイプのリムーバブルディスク、または任意の他の好適な記憶媒体を含み得る。図3Aは、間接分岐ターゲットアドレス値を保持している、プログラマーまたはソフトウェアツールによって特定されたレジスタを、本発明に従って指定する32ビットのADVN命令300のための概略フォーマットである。このADVN命令300は、特定されたレジスタを指定する、入ってくる間接分岐命令に先立って、特定されたレジスタに記憶されている実際の分岐ターゲットアドレスをプロセッサ複合体200に通知する。以下でより詳細に説明されるように、事前通知を行なうことによってプロセッサの性能を向上させることができる。ADVN命令300は、指定された1つまたは複数のフラグに基づいて命令が無条件に実行されるか、または条件付きで実行されるかどうかを指定するための、複数の命令セットアーキテクチャによって利用されるコンディションコードフィールド304と共に図示されている。オペコード305は、少なくとも1つの分岐ターゲットアドレスレジスタフィールドRm307を有する分岐ADVN命令として命令を特定する。命令固有フィールド306は、オペコードの拡張と、命令固有の他のエンコーディングとを可能にする。命令における指定されたコンディションコードフィールドに従って条件付きで実行する命令を有するこのようなISAを有するプロセッサでは、分岐ターゲットアドレスレジスタRmに影響を及ぼす最後の命令のコンディションフィールドが、ADVN命令のコンディションフィールドとして通常用いられることになるが、このような仕様に限定されない。本発明の教示は、様々な命令フォーマットとアーキテクチャ仕様に適用可能である。例えば、図3Bは、本発明による、間接分岐ターゲットアドレス値を有するレジスタを指定する16ビットのADVN命令350のための概略フォーマットである。この16ビットのADVN命令350は、オペコード355、分岐ターゲットアドレスレジスタフィールドRm357、および命令固有ビット356を有し、32ビットのADVN命令300と類似している。さらに、ADVN命令をエンコードするために、他のビットフォーマットと命令の幅とが利用可能であることに留意されたい。例えば、レジスタRxに基づく分岐、addPC、moveRxPCなどの間接分岐型命令における概略フォームは、プロセッサパイプライン202において有利に用いられて実行されてもよい。本発明を説明するために、以下でさらに説明されるコードシーケンス例では、間接分岐命令であるBXRxフォームが用いられている。命令指定の分岐ターゲットアドレスを有する分岐命令、命令指定のオフセットアドレスとベースアドレスレジスタとの合計として計算されるBTAを有する分岐命令などの、他のフォームの分岐命令がISAにおいて一般に提供されることに留意されたい。このような分岐命令のサポートでは、プロセッサパイプライン202は、例えば前の分岐命令の実行における条件付き実行のステータス等をトラッキングすることと、これらの命令における以降の実行を予測する際に用いるために、このような実行のステータスを記憶することとに基づく分岐履歴予測技術を利用することができる。プロセッサパイプライン202は、このような分岐履歴予測技術をサポートすることができ、それに加えて、間接分岐ターゲットアドレスの事前通知を行なうためにADVN命令の使用をサポートすることができる。例えば、プロセッサパイプライン202は、ADVN命令が見つかるまで分岐履歴予測技術を用いることができる。次いで、ADVN命令は、本明細書で説明されるADVN機能によって分岐ターゲット履歴予測技術に優先する。本発明における他の実施形態では、プロセッサパイプライン202は、ADVN命令を使用することにおける精度を監視するように構成されてもよく、ADVN特定のターゲットアドレスが1回または複数回にわたって間違っていた場合には、同じ間接分岐における以降の出現に対してADVN命令を無視するように構成されてもよい。さらに、ADVN命令を有するISAをサポートするプロセッサにおける特定の実装形態に対しては、プロセッサは、見つかったADVN命令をノーオペレーション命令として処理してもよく、または、検出されたADVN命令について未定義としてフラグを立ててもよいことに留意されたい。さらに、ADVN命令は、コード部分の実行中に見つかった分岐をトラッキングするのに十分なハードウェアリソースを有する動的分岐履歴予測回路を有するプロセッサパイプラインにおいてはNOPとして処理され、動的分岐履歴予測回路に利用可能なハードウェアリソースを超えるコード部分に対しては、以下で説明されるADVN命令を可能としてもよい。また、ADVN命令は、間接分岐ターゲットアドレスを予測することに対して動的分岐履歴予測回路が不十分な結果を有する場合には、間接分岐ターゲットアドレスの事前通知を行なうために動的分岐履歴予測回路と共に用いられてもよい。例えば、動的分岐履歴予測回路から生成された、予測された分岐ターゲットアドレスは、ADVN命令の使用を通じて提供されるターゲットアドレスによって優先されてもよい。さらに、以下で説明される間接分岐ターゲットアドレスの事前通知を行なうために、有利な自動的間接ターゲット推測方法が提供される。図4Aは、本発明によるADVN命令が見つからない場合に、間接分岐実行を予測するために一般的な履歴手法を用いる間接分岐予測に対する手法のためのコード例400である。プロセッサ複合体200を参照して、コード例400の実行を説明する。401~404の命令A~Dは、401~404の命令A~Dの分析に基づき、GPRF204のレジスタR0に影響を及ぼすことのない、本例のための一組のシーケンシャルな算術命令でもよい。レジスタR0は、406の間接分岐命令BXR0のために、405のloadR0命令によってターゲットアドレスをロードされる。この例では、命令401~406のそれぞれは、無条件に実行されるように指定されている。また、loadR0命令405は、L1命令キャッシュ208によって使用可能であり、それによって、401の命令Aが実行ステージ222で実行を完了するときには、フェッチステージ214でloadR0命令405がフェッチされていることが想定される。次いで、loadR0命令405がデコードおよびADVNステージ216でデコードされる間に406の間接分岐命令BXR0がフェッチされる。次のパイプラインステージでは、loadR0命令405が実行に向けてディスパッチされるように準備され、BXR0命令406がデコードされる。また、デコードおよびADVNステージ216では、BXR0命令406が行なわれるか否かの予測が、以前の間接分岐実行の履歴に基づいて行なわれ、さらに間接分岐のターゲットアドレスも予測される。この例の場合、BXR0命令406は、無条件に行なわれるように指定されており、ADVNロジック回路217は、間接分岐ターゲットアドレスをアドレスXとして予測することを単に必要とされている。この予測に基づいて、プロセッサパイプライン202は、アドレスXから始まる命令のスペキュレイティブなフェッチの開始を指示され、与えられた行なわれるというステータスは、概して現在の命令アドレッシングのリダイレクションである。また、プロセッサパイプライン202は、406の間接分岐命令BXR0に続くパイプラインの任意の命令がアドレスXで始まる命令と関連していない場合には、それらの任意の命令をフラッシュする。プロセッサパイプライン202は、予測されたアドレスXが正しく予測されたかどうかが実行ステージで判定され得るまで命令のフェッチを続ける。命令を処理する間、例えばloadR0命令405の実行によって起こり得るストール状況が見つかる場合がある。L1データキャッシュにヒットがある場合には、loadR0命令405の実行によって、L1データキャッシュ210から値が遅延なく戻され得る。しかし、L1データキャッシュ210にミスがあると、loadR0命令405の実行によって著しい数のサイクルが必要となる場合がある。load命令は、ベースアドレスを提供し、次いで実行ステージ222でベースアドレスに即値を加えて実効アドレスを生成するためにGPRF204のレジスタを用いることができる。この実効アドレスは、データパス232を介してL1データキャッシュ210に送られる。L1データキャッシュ210にミスがある場合、データは、例えばL2キャッシュおよびメインメモリを含み得るメモリ階層212からフェッチされる必要がある。さらに、データは、L2キャッシュでミスする可能性があり、これはメインメモリからのデータのフェッチにつながる。例えば、L1データキャッシュ210におけるミス、メモリ階層212のL2キャッシュにおけるミス、および、メインメモリへのアクセスは、データをフェッチするために数百回のCPUサイクルを必要とする場合がある。L1データキャッシュのミスの後にデータをフェッチするのに要するサイクルの間、BXR0命令406は、インフライトオペランドが利用可能になるまでプロセッサパイプライン202においてストールする。ストールは、リードレジスタステージ220において、または、実行ステージ222の始まりにおいて起こると考えることができる。複数の命令パイプラインを有するプロセッサでは、loadR0命令405のストールは、任意の他のパイプラインで行なわれるスペキュレイティブな動作をストールしない可能性があることに留意されたい。L1データキャッシュ210におけるミスに基づくストールの長さに起因して、著しい数の命令がスペキュレイティブにフェッチされることがあり、そのことは、間接分岐ターゲットアドレスにおける誤った予測があった場合には、性能と電力使用に著しい影響を及ぼす恐れがある。ストールは、図2の制御回路206の一部であるホールド回路の使用によって、プロセッサパイプラインの中で生じ得る。ホールド回路は、例えばパイプラインにおいて命令をストールするためにゲートパイプラインステージレジスタに対して用いられる場合のあるホールド信号を生成する。図2のプロセッサパイプライン202の場合、ホールド信号は、例えば、すべての入力が使用可能でないときにリードレジスタステージでアクティブになる場合があり、それによってパイプラインがホールドされ、命令の実行を完了するのに必要な入力の受信を保留する。ホールド信号は、必要なすべてのオペランドが利用可能になると解除される。ミスの解決時には、ロードデータが、パス240を介してライトバックステージ224の一部としてのライトバック動作部に送られる。次いでオペランドがGPRF204に書き込まれ、また、上記のフォワーディングネットワーク226に送られる場合がある。R0の値は、スペキュレイティブにフェッチされた命令がフラッシュされる必要があるか否かを判定するために、予測されたアドレスXと比較されてもよい。分岐ターゲットアドレスを記憶するために用いられるレジスタは、間接分岐命令が実行されるたびに異なる値を有する可能性があるため、現行の予測手法を用いてスペキュレイティブにフェッチされた命令は、フラッシュされることになる可能性が高い。図4Bは、本発明に従って間接分岐ターゲットアドレスの事前通知を行なうための、図3AのADVN命令を用いる間接分岐事前通知に対する手法のためのコード例420である。図4Aにおける401~404の命令A~Dが分岐ターゲットアドレスレジスタR0に影響を及ばさないという上記で示された分析に基づいて、loadR0命令405は、例えば図4Bのコード例における421の命令Aの後に配置されるように、命令シーケンスにおいて繰り上げられてもよい。さらに、図3AのADVN命令300などのADVNR0命令423が、427の間接命令BXR0に向けた分岐ターゲットアドレスの事前通知のための予測の助けとして、loadR0命令422の直後に配置される。図4Bにおける新しい命令シーケンス421~427は、プロセッサパイプライン202を通って流れるため、loadR0命令422が実行ステージにある場合、ADVNR0命令423はリードステージ220にあることになり、また426の命令Dは、フェッチステージ214にあることになる。loadR0命令422がL1データキャッシュ210でヒットする状況の場合には、R0の値は、loadR0の実行の終わりまでには知られ、このR0の値は、フォワーディングネットワーク226を介してリードステージに高速転送され、このR0の値はまた、リードステージ220の終わりにおいて、またはADVNR0命令の実行ステージの始まりまでに知られる。デコードおよびADVNステージ216に入る間接分岐命令に先立つR0値の決定は、ADVNロジック回路217が、いかなる追加のサイクルディレイも有さず、決定されたR0値を分岐ターゲットアドレスとしてBXR0命令427のために選択することを可能にする。BXR0命令427は、パイプラインにおいて動的に特定されることに留意されたい。一般に、このコード例におけるR0などの、ADVN指定されたレジスタは、間接分岐指定されたターゲットアドレスレジスタと同じアドレスを保持することになる一方で、例外が見つかる場合がある。このようなアドレスの例外に対する手法の1つでは、ADVN指定されたレジスタの値は、見つかった次の、間接分岐命令指定されたレジスタの値と比較されず、間違ったターゲットアドレスが選択された場合には、パイプラインにおいてエラーが後で検出され、パイプラインをフラッシュするなどの適切な措置がとられる。別の手法では、ADVN指定されたレジスタの値は、見つかった次の、間接分岐命令指定されたレジスタの値と比較され、一致が見出されるまでスペキュレイティブ実行による変更は行なわれない。これは、一般的なケースである。一致が見出されなかった場合には、パイプラインは、ADVN命令が見つからなかった場合と同じように動作することになる。プロセッサパイプライン202に対しては、loadR0命令およびADVNR0命令は、L1データキャッシュ210にヒットがある場合には、どのようなさらなる遅延を引き起こすこともなく、命令Bの後に配置されていてもよいことに留意されたい。しかし、L1データキャッシュにミスがあると、ストール状況が引き起こされることになる。このL1データキャッシュ210におけるミスの場合には、loadR0命令およびADVNR0命令は、可能な場合には、適切な数のミスディレイサイクルで、あらゆるさらなる遅延を引き起こすことを避けるために、パイプラインの深さに基づいてBXR0命令の前に配置されている必要がある。一般に、コードシーケンスにおけるADVN命令の配置は、BX命令の前にN個の命令があることが好ましい。プロセッサパイプラインの場合には、Nは、例えば命令フェッチステージ214と実行ステージ222とである、間接分岐命令を受信するステージと、ADVN指定された分岐ターゲットアドレスを認識するステージとの間のステージの数を表す。フォワーディングネットワーク226を用いる例示的なプロセッサパイプライン202では、Nは2であり、フォワーディングネットワーク226を用いない場合には、Nは3である。例えばフォワーディングネットワークを用いるプロセッサパイプラインの場合、ADVN命令の前で2に等しいN個の命令がBX命令に先行すると、ADVNターゲットアドレスレジスタRmの値は、フォワーディングネットワーク226によってリードレジスタステージ220の終わりの所で判別される。ADVN命令の使用に向けてフォワーディングネットワーク226を用いないプロセッサパイプラインに対する代替の実施形態では、例えば、ADVN命令の前で3に等しいN個の命令がBX命令に先行すると、ADVNターゲットアドレスレジスタRmの値は、BX命令がデコードおよびADVNステージ216に入るときに実行ステージ222の終わりの所で判別される。また、命令の数Nは、例えば命令フェッチステージ214における遅延による上側パイプラインのストール、スーパースカラプロセッサで出される最大K個の命令まで変化し得る命令発行幅、および、ADVN命令とBX命令との間で生じる中断を例えば含むさらなる要因に依存してもよい。概して、ISAでは、このような要因の影響を最少にするために、ADVN命令ができるだけ早く予定されることが推奨され得る。図4Bは単一のADVNR0命令で示されているが、あらゆる間接分岐に出くわす前に複数のADVN命令をインスタンス化することができる。複数のADVN命令は、例えばスタック装置の使用によって得られるFIFO方式で、次に見つかる間接分岐に適用される。一般に、次に見つかる間接分岐命令は、プログラム順における次の間接分岐命令と等しいことに留意されたい。この原則に対して例外の原因となり得るコードは、複数のADVN命令の使用が適切であるかどうかを判定する前に評価することができる。図5は、本発明による例示的な第1の間接分岐ターゲットアドレス事前通知回路500を示す。この第1の間接BTA事前通知回路500は、ADVN実行回路504、分岐ターゲットアドレスレジスタ回路508、BXデコード回路512、選択回路516、および、PCアドレスの生成に影響を及ぼす入力に応答するためのネクストプログラムカウンタ回路520を含む。ADVN実行回路504においてADVNRx命令が実行されると、Rxの値はBTAR回路508にロードされる。BXデコード回路512でBX命令がデコードされ、選択回路516によって選択されるBTARが有効になると、BTAR回路508のBTAの値は、ネクストPC回路520による次のフェッチアドレスとして使用される。また、BTARの有効指示は、有効なBTARがアクティブである間にフェッチを止めるために用いられ、それによって、間違ったアドレスにおけるフェッチ命令に関連する電力を節約してもよい。図6は、本発明に従って間接分岐ターゲットアドレスの事前通知を行なうための、自動的間接ターゲット推測方法を用いる手法のためのコード例600である。このコードシーケンス601~607では、601の命令A、603の命令B、604の命令C、および606の命令Dは、前に説明したものと同じであるため、分岐ターゲットアドレスレジスタに影響を及ぼさない。loadR0命令602と、addR0R7R8命令605との2つの命令は、この例における分岐ターゲットレジスタR0に影響を及ぼす。607の間接分岐命令BXR0は、図4Aおよび図4Bにおける前の例で用いられたものと同じである。このコード例600では、loadR0命令602と、addR0R7R8命令605との両方がBTAレジスタR0に影響を及ぼすものの、addR0R7R8命令605が、BTAレジスタR0の内容に影響を及ぼす最後の命令である。自動的間接ターゲット推測方法の回路は、コードシーケンス600の実行パターンをトラッキングすることによって、BXR0命令607がデコードおよびADVNステージ216に入るときの、R0における最後の値がADVNBTAとして用いられる必要があるかどうかの事前通知を妥当な精度で提供することができる。一実施形態では、BXR0命令がデコードおよびADVNステージ216に入る際には、R0に書き込まれた最後の値が、BXR0命令のための値として用いられることになる。この実施形態は、このBXR0命令と関連するコードシーケンスの場合、R0に書き込まれた最後の値が、時間における高い割合で正しい値であると推定され得るという評価に基づいている。図7は、本発明に従って間接分岐命令の分岐ターゲットアドレスの事前通知を行なうために好適に利用される第1の間接分岐事前通知プロセス700である。この第1の間接分岐ADVNプロセス700は、レジスタファイル番号によってアドレス指定可能であるか、またはインデックス指定されるラストライタテーブルを利用しており、そのため、R0からR31の32個のエントリを有するレジスタファイルと関連づけられたラストライタテーブルは、0~31のインデックス値によってアドレス指定可能となる。同様に、レジスタファイルが、例えばR0~R13の14個のエントリである、より少ないエントリを有する場合には、ラストライタテーブルは、0~13のインデックス値によってアドレス指定可能となる。ラストライタテーブルにおけるエントリのそれぞれは、命令アドレスを記憶する。また、第1の間接分岐ADVNプロセス700は、命令アドレスによってアクセスされ、エントリごとの有効ビットを含むエントリを有する分岐ターゲットアドレスレジスタアップデータ連想メモリを利用する。ラストライタテーブルは、第1の間接分岐ADVNプロセス700に入る前に、間接分岐ADVNコードシーケンスの命令アドレスが通常見つからず、BTARUのエントリが無効状態に初期化される場合、ゼロなどの無効命令アドレスに初期化される。第1の間接分岐ADVNプロセス700は、フェッチされた命令のストリーム702で始まる。判定ブロック704では、間接分岐命令のターゲットレジスタでもよい任意のレジスタRmに書き込む命令が受信されたかどうかの判断がなされる。例えば、R0~R13のレジスタを有する14エントリレジスタファイルを有するプロセッサでは、間接分岐命令における可能性のあるターゲットレジスタとしてのレジスタR0~R13のいずれかに書き込む命令が、追跡されることになる。間接分岐命令を有するコード部分における複数のパスを監視する技術の場合、特定のRmは、第1のパスにおける間接分岐命令を特定することによって求められる。例えば、2つ以上のRm変更命令を有するコードのシーケンスは、同じRmを指定する間接分岐に出くわす前に受信される。このようなコードのシーケンスは、プロセス700を通る複数のパスによって処理される。プロセス700における第1のパスでは、ラストライタテーブルにおいて、インデックス指定されたRmアドレスに最後のRm変更命令のアドレスが記憶され、間接分岐命令が見つかる前に、前のRm変更命令のアドレスを上書きする。BTARは、第1のパスでは間接分岐命令が見つかる後まで更新されないが、これは、いつ最後のRm変更命令が受信されたかが第1のパスではわからないためである。見つかった間接分岐命令は、指定されたRmを変更した最後の命令が、指定されたRmに記憶されたターゲットアドレスの事前通知に用いられる有効な命令であることを示すために有効ビットをアサートする。プロセス700を通る第2のパスでは、最後のRm変更命令は、BTARの更新をもたらし、例えばデコードステージで特定された間接分岐命令が見つかると、BTARは、分岐ターゲットアドレスの事前通知に用いることができる。ブロック704に戻ると、受信された命令がRmに影響を及ぼさない場合、第1の間接分岐ADVNプロセス700は判定ブロック706に進む。判定ブロック706では、受信された命令がBXRm命令などの間接分岐命令であるかどうかの判断がなされる。受信された命令が間接分岐命令でない場合、第1の間接分岐ADVNプロセス700は、次の受信命令を評価するために判定ブロック704に進む。ブロック704に戻ると、受信された命令がRmに影響を及ぼす場合、第1の間接分岐ADVNプロセス700は、ブロック708、710、および712を通る第1のパスにおけるブロック708に進む。ブロック708では、Rmに影響を及ぼす命令のアドレスがラストライタテーブルのRmアドレスにおいてロードされる。ブロック710では、BTARUが命令アドレスにおける有効ビットに対してチェックされる。判定ブロック712では、アサートされた有効ビットがBTARUにおける命令アドレスエントリで見つかったかどうかの判断がなされる。ブロック708、710、および712を通る第1のパスにおいて生じ得るように、アサートされた有効ビットが見つからなかった場合、第1の間接分岐ADVNプロセスは、次の受信命令を評価するために判定ブロック704に戻る。判定ブロック706に戻ると、BXRm命令などの間接分岐命令が受信されると、第1の間接分岐ADVNプロセス700はブロック714に進む。ブロック714では、ラストライタテーブルが、アドレスRmにおける有効命令アドレスに対してチェックされる。判定ブロック716では、有効命令アドレスがRmアドレスで見つかったかどうかの判断がなされる。有効命令アドレスが見つからない場合、第1の間接分岐ADVNプロセス700はブロック718に進む。ブロック718では、命令アドレスにおけるBTARUのビットエントリが無効となるように設定され、第1の間接分岐ADVNプロセス700は、次の受信命令を評価するために判定ブロック704に戻る。判定ブロック716に戻ると、有効命令アドレスが見つかると、第1の間接分岐ADVNプロセス700はブロック720に進む。保留中の更新があると、第1の間接分岐ADVNプロセス700は、その保留中の更新が解決されるまでストールする場合がある。ブロック720では、命令アドレスにおけるBTARUのビットエントリが有効となるように設定され、第1の間接分岐ADVNプロセス700は判定ブロック722に進む。判定ブロック722では、分岐ターゲットアドレスレジスタが有効アドレスを有するかどうかの判断がなされる。BTARが有効アドレスを有する場合、第1の間接分岐ADVNプロセス700はブロック724に進む。ブロック724では、記憶されたBTARの値を用いて間接分岐命令の事前通知Rmが行なわれ、第1の間接分岐ADVNプロセス700は、次の受信命令を評価するために判定ブロック704に戻る。判定ブロック722に戻ると、BTARが有効アドレスを有していないと判断されると、第1の間接分岐ADVNプロセス700は、次の受信命令を評価するために判定ブロック704に戻る。判定ブロック704に戻ると、受信された命令が間接分岐命令のRmに影響を及ぼす場合、第1の間接分岐ADVNプロセス700を通る第2のパスにおいて生じ得るように第1の間接分岐ADVNプロセス700は、ブロック708、710、および712を通る第2のパスにおけるブロック708に進む。ブロック708では、Rmに影響を及ぼす命令のアドレスがラストライタテーブルのRmアドレスにおいてロードされる。ブロック710では、BTARUが命令アドレスにおける有効ビットに対してチェックされる。判定ブロック712では、アサートされた有効ビットがBTARUにおける命令アドレスエントリで見つかったかどうかの判断がなされる。処理ブロック708、710、および712を通る第2のパスにおいて生じ得るように、アサートされた有効ビットが見つかった場合、第1の間接分岐ADVNプロセス700は、ブロック726に進む。ブロック726では、図2のBTAR219などの分岐ターゲットアドレスレジスタは、Rmに記憶される、命令を実行するBTARアップデータの結果で更新される。次いで、第1の間接分岐ADVNプロセス700は、次の受信命令を評価するために判定ブロック704に戻る。図8Aおよび図8Bに示されている別の自動的な間接分岐ターゲットアドレスプロセスでは、間接分岐命令がデコーディングステージに入るときにプログラムレジスタに記憶されている最後の値が、分岐ターゲットアドレスの事前通知として用いられる必要があるかどうかが判断される。図8Aは、エントリ有効ビット804、タグフィールド805、レジスタRmアドレス806、データ有効ビット807、アップダウンカウンタ値808、およびRmデータフィールド809を含む6つのフィールドを有するトラッキングターゲットテーブルエントリ802を有する例示的なTTT800を示す。TTT800は、デコードおよびADVNステージ216と、プロセッサパイプライン202における他のパイプステージとによってアクセス可能な、例えば制御回路206の中のメモリに記憶されてもよい。例えば、実行ステージ222などの下側のパイプステージでは、RmデータがRmデータフィールド809に書き込まれる。以下でより詳細に説明されるように、間接分岐命令は、フェッチされる際にTTTエントリを配置するが、TTTテーブルにおいてすでに有効なマッチングタグを有していない。タグフィールド805は、完全な命令アドレスでもよく、またはその一部でもよい。レジスタの値に影響を及ぼす命令は、Rmアドレス806で指定されるマッチングRmフィールドに対して、TTT800における有効エントリをチェックする。一致が見られる場合には、そのRmで指定されたアドレスに対する間接分岐命令は、TTTテーブル800におけるTTTエントリ802などの確立されたエントリを有している。図8Bは、本発明に従って間接分岐命令における分岐ターゲットアドレスの事前通知を行なうために好適に利用される第2の間接分岐事前通知プロセス850である。第2の間接分岐ADVNプロセス850は、フェッチされた命令のストリーム852で始まる。判定ブロック854では、間接分岐命令が受信されたかどうかの判断がなされる。BXRm命令が受信されない場合、第2の間接分岐ADVNプロセス850は、判定ブロック856に進む。判定ブロック856では、受信された命令がRmレジスタに影響を及ぼすかどうかの判断がなされる。ここでなされる判断は、BXRm命令によって潜在的に用いられる可能性のある任意のレジスタを、受信された命令が更新することになるか否かである。概して、間接分岐命令によって指定され得るレジスタRmに影響を及ぼす任意の命令は、以下でより詳細に説明されるように、チェックされる可能性のある候補命令としてハードウェアによって示される。受信された命令がRmレジスタに影響を及ぼさない場合、第2の間接分岐ADVNプロセス850は、次の受信命令を評価するために判定ブロック854に進む。判定ブロック856に戻ると、受信された命令がRmレジスタに影響を及ぼす場合、第2の間接分岐ADVNプロセス850はブロック858に進む。ブロック858では、BX命令が必要とすることになるレジスタを、受信した命令が実際に変更するかどうかを調べるために、TTT800が有効エントリに対してチェックされる。判定ブロック860では、一致する任意のRmがTTT800で見つかったかどうかの判断がなされる。少なくとも1つの一致するRmがTTT800で見つからなかった場合、第2の間接分岐ADVNプロセス850は、次の受信命令を評価するために判定ブロック854に戻る。しかし、少なくとも1つの一致するRmがTTT800で見つかった場合、第2の間接分岐ADVNプロセス850はブロック862に進む。ブロック862では、エントリに関連するアップダウンカウンタがインクリメントされる。このアップダウンカウンタは、特定のRmを変更することになるどれだけ多くの命令がフライト中であるかを示す。Rm変更命令が実行する場合、エントリのアップダウンカウンタ値808がデクリメントされ、データ有効ビット807がセットされ、また実行におけるRmデータの結果がRmデータフィールド809に書き込まれることに留意されたい。レジスタ変更命令がアウトオブオーダーで実行する場合、プロセッサ状態を変更する実行結果が引き渡されると、プログラム順における最後のレジスタ変更命令は、Rmデータフィールドへのプログラム順の古い命令の書き込みをキャンセルし、それによってライトアフターライトハザードが防止される。非分岐条件命令を有するプロセッサ命令セットアーキテクチャの場合には、非分岐条件命令は、非実行状態について評価する条件を有し得る。すなわち、エントリのアップダウンカウンタ値808を評価するために、非実行について評価する非分岐条件命令のターゲットレジスタRmは、ソースオペランドとして読み込まれる場合がある。読み込まれるRmの値は、最新のターゲットレジスタRmの値を有する。そうすれば、一致する有効タグを有するRmを有する非分岐条件命令が実行されない場合でも、最新の値でRmデータフィールド809を更新することができ、それによってアップダウンカウンタ値808がデクリメントされる。次いで、第2の間接分岐ADVNプロセス850は、次の受信命令を評価するために判定ブロック854に戻る。判定ブロック854に戻ると、受信された命令がBXRm命令である場合、第2の間接分岐ADVNプロセス850はブロック866に進む。ブロック866では、TTT800が有効エントリに対してチェックされる。判定ブロック868では、一致するタグがTTT800で見つかったかどうかの判断がなされる。一致するタグが見つからなかった場合、第2の間接分岐ADVNプロセス850はブロック870に進む。ブロック870では、新しいエントリ有効ビット804を有効な指示値に設定することと、BXのRmをRmフィールド806に配置することと、データ有効ビット807をクリアすることと、新しいエントリに関連するアップダウンカウンタをクリアすることとを含む新しいエントリが、TTT800において確立される。次いで、第2の間接分岐ADVNプロセス850は、次の受信命令を評価するために判定ブロック854に戻る。判定ブロック868に戻ると、一致するタグが見つかると、第2の間接分岐ADVNプロセス850は判定ブロック872に進む。判定ブロック872では、エントリのアップダウンカウンタがゼロであるかどうかの判断がなされる。エントリのアップダウンカウンタがゼロでない場合は、依然としてフライト中であるRm変更命令が存在し、第2の間接分岐ADVNプロセス850はステップ874に進む。ステップ874では、BX命令は、エントリのアップダウンカウンタがゼロにデクリメントされるまで、プロセッサパイプラインにおいてストールする。ブロック876では、Rmデータへの最後の変更であるTTTエントリのRmデータが、間接分岐BX命令のターゲットとして用いられる。次いで、第2の間接分岐ADVNプロセス850は、次の受信命令を評価するために判定ブロック854に戻る。判定ブロック872に戻ると、エントリのアップダウンカウンタがゼロに等しい場合、第2の間接分岐ADVNプロセス850は判定ブロック878に進む。判定ブロック878では、エントリのデータ有効ビットが1に等しいかどうかの判断がなされる。エントリのデータ有効ビットが1に等しい場合、第2の間接分岐ADVNプロセス850はブロック876に進む。ブロック876では、TTTエントリのRmデータが、間接分岐BX命令のターゲットとして用いられる。次いで、第2の間接分岐ADVNプロセス850は、次の受信命令を評価するために判定ブロック854に戻る。判定ブロック878に戻ると、エントリのデータ有効ビットが1に等しくない場合、第2の間接分岐ADVNプロセス850は、次の受信命令を評価するために判定ブロック854に戻る。プロセス850のこの点においては、受信されたBX命令への応答に対する複数の代替形態が存在する。第1の代替形態では、TTTエントリのRmデータは、間接分岐BX命令のターゲットとして用いられてもよいが、これは、BXのRmタグが有効エントリに一致し、アップダウンカウンタの値がゼロであるためである。第2の代替形態では、プロセッサパイプライン202は、間違ったパスにおけるフェッチを避けるために、とられていないパスに従って命令をフェッチするように指示される。Rmデータフィールドにおけるデータが有効でないため、Rmデータが、実行可能なメモリ、または、アクセスを許可されたメモリを示すことすら保証はない。とられていないパスであるシーケンシャルパスにおけるフェッチは、アクセスが許可されたメモリに対して最も可能性が高い。初めの2つの代替形態のどちらかに対して起こり得る誤ったシーケンスは、プロセッサパイプラインにおける後段のステージで見つけられて処理される。第3の代替形態では、プロセッサパイプライン202は、電力を節約するためにBX命令の後のフェッチを止め、フェッチ動作を再度確立するためにBXの訂正シーケンスを待つように指示される。図9Aは、本発明による例示的な第2の間接分岐ターゲットアドレス事前通知回路900を示す。BTAADVN回路900は、プロセッサパイプライン202と、図2のプロセッサ複合体200における制御回路206とに関連づけられており、第2の間接分岐ADVNプロセス850に従って動作する。第2の間接BTAADVN回路900は、回路間に示されている基本制御信号パスと共に、デコード回路902、検出回路904、事前通知回路906、および訂正回路908から構成されている。ADVN回路906は、決定回路910、トラック1回路912、および最新BTA回路914を含む。訂正回路908は、トラック2回路920および訂正パイプ回路922を含む。デコード回路902は、図2の命令フェッチステージ214から入ってくる命令をデコードする。検出回路904は、デコードされた命令を、間接分岐命令またはRm変更命令に関して監視する。最初に間接分岐命令が検出されると、ADVN回路906は、図8AのTTTエントリ802などの新しいターゲットトラッキングテーブルのエントリを確立し、図8Bのブロック870で示されているように、検出された間接分岐命令によって指定される分岐ターゲットアドレスのレジスタを特定する。有効なTTTエントリと、一致するRm値とに関連するRm変更命令が検出されると、アップダウンカウンタ値808がインクリメントされ、Rm変更命令が実行されると、アップダウンカウンタ値808がブロック862に従ってデクリメントされる。間接分岐命令を連続して検出すると、ADVN回路906は、図8Bのブロック872~878で説明された動作に従う。訂正回路908は、誤ったBTAの事前通知に基づいてパイプラインをフラッシュする。ADVN回路906において、最新BTA回路914は、例えば、BXR0命令607などの間接分岐命令に対してBTAの事前通知を行なうために、図8AのTTTエントリ802などのTTTエントリを用いる。ADVNBTAは、プロセッサパイプライン202をリダイレクトして、スペキュレイティブ実行のためにADVNBTAで始まる命令をフェッチするために用いることができる。訂正回路908において、トラック2回路920は、BXR0命令607の実行状態に関してプロセッサパイプライン202における実行ステージ222を監視する。ADVNBTAが正しく提供された場合、スペキュレイティブにフェッチされた命令は、プロセッサパイプラインにおいて継続することを許可される。ADVNBTAが正しく提供されなかった場合には、スペキュレイティブにフェッチされた命令は、プロセッサパイプラインからフラッシュされ、そのパイプラインは、正しい命令シーケンスにリダイレクトされて戻される。また、検出回路904は、誤ったADVNのステータスを知らされ、このステータスに応じて、事前通知のための、この特定の間接分岐命令の識別を停止するようにプログラムされてもよい。さらに、ADVN回路906は、誤ったADVNのステータスを知らされ、このステータスに応じて、TTT800における特定のエントリに対する事前通知を可能とするためにのみプログラムされてもよい。図9Bは、本発明による例示的な第3の間接分岐ターゲットアドレス事前通知回路950を示す。この第3の間接BTAADVN回路950は、ネクストプログラムカウンタ回路952、デコード回路954、実行回路956、およびターゲットトラッキングテーブル回路958を含み、デコード回路954に転送される命令をフェッチするために、図2のL1命令キャッシュ208などの命令キャッシュをアドレス指定する様子を示す。第3の間接BTAADVN回路950は、第2の間接分岐ADVNプロセス850に従って動作する。例えば、デコード回路954は、BX命令またはRm変更命令などの間接分岐を検出し、BX命令またはRm変更命令が検出されたことをTTT回路958に通知し、BX命令のRm値などの適切な情報を提供する。また、TTT回路958は、アップダウンカウンタ値808を提供するために、図8Bのブロック862で説明されたようにインクリメントまたはデクリメントするアップダウンカウンタを含む。実行回路956は、Rm変更命令の実行時に、Rmデータの値を提供し、またデクリメント指示を行なう。さらに、実行回路956は、事前通知の成功または失敗のステータスに応じて分岐訂正アドレスを提供する。ブロック876で説明されたように、TTT回路958におけるエントリが選択され、選択されたエントリにおけるRmデータフィールドが、ターゲットアドレスの一部としてネクストPC回路952に提供される。図10Aは、本発明に従って間接分岐ターゲットアドレスの事前通知を決定するための、ソフトウェアコードのプロファイリング方法を用いる手法のためのコード例1000である。このコードシーケンス1001~1007では、1001の命令A、1003の命令B、1004の命令C、および1005の命令Dは、前に説明されたものと同じであるため、分岐ターゲットアドレスレジスタに影響を及ぼさない。命令1002は、MoveR0TargetA命令1002であり、この命令は、TargetAからレジスタR0に値を無条件に移動する。命令1006は、条件付きのMoveR0TargetB命令1006であり、この命令は、時間における約10の割合で条件付きで実行する。命令の実行を決定するために用いられる条件は、様々な算術命令、ロジック命令、および、命令セットアーキテクチャで通常指定される他の機能命令の実行時にプロセッサによってセットされるコンディションフラグより生じ得る。これらのコンディションフラグは、プログラムステータスレジスタの一部でもよい、制御ロジック206に配置されたプログラム可読フラグレジスタまたはコンディションコードレジスタに記憶することができる。1007の間接分岐命令BXR0は、図4Aおよび図4Bにおける前の例で用いられたものと同じである。コード例1000では、条件付きのmoveR0targetB命令1006は、この命令が実行するか否かに応じて、BTAレジスタR0に影響を及ぼす可能性がある。次のテーブルに示されている、可能性のある2つの状況が考えられる。コードシーケンス1000では、間接BTAに影響を及ぼす可能性のある最後の命令は、条件付きのmoveR0targetB命令1006であり、この命令が実行すると、上記テーブルのライン2となり、moveR0targetA命令1002の結果は、実行された条件付きのmoveR0targetB命令1006の結果によって上書きされることになる。図10Bのコードシーケンス1050に示されているように、プロファイリングコンパイラなどのソフトウェアコードのプロファイリングツールは、moveR0targetA命令1052の直後に、依存関係を有さずに実行する第1のフォーマットでエンコードされた、図3AのADVN命令300などのADVNR0命令1053を挿入することができる。この第1のフォーマットのADVNR0命令1053が実行ステージに入ると、そのときのターゲットアドレスレジスタR0の値は、BXR0命令の間接アドレスとして用いられ、それによって、時間における約90の割合で正しいことになるスペキュレイティブなフェッチが可能となる。あるいは、ADVNR0命令1053は、CondmoveR0target命令1057などの、ADVNR0命令に続く条件付きのターゲットアドレス変更命令に応じて、自らの実行を一時停止するようにエンコードされてもよい。一時停止の、エンコードされたADVNR0命令1053が実行ステージに入ると、そのときのターゲットアドレスレジスタR0の値は決定されず、間接分岐命令が見つかったときのスペキュレイティブなフェッチは、条件付きのターゲットアドレス変更命令が実行されるまで一時停止される。条件付きのターゲットアドレス変更命令がターゲットアドレスを変更する場合、更新された間接分岐ターゲットアドレスがスペキュレイティブなフェッチに用いられる。ターゲットアドレス変更命令がターゲットアドレスを変更しない場合には、R0に記憶された最後の間接分岐ターゲットアドレス値がスペキュレイティブなフェッチに用いられる。ADVN命令におけるこのような動作をエンコードするために、ADVN命令フォーマット300におけるコンディションコードフィールド304、または他のビットフィールドが使用され得ることに留意されたい。条件付きのmoveR0target命令1057の実行割合が、90の非実行と、10の実行とである場合、依存関係を有さずに実行するADVNR0命令1053をエンコードすることは有利であり得るが、これは、この状況の場合には、ADVNR0命令1053を、プログラム命令ストリームにおいて間接分岐命令1058の前に十分に早く配置することができ、それによって性能が有利に向上するためである。あるいは、実行割合が、50と50など、異なるように予想される場合には、ADVNR0命令に続く条件付きのターゲットアドレス変更命令からの結果の決定に応じて、ADVNR0命令の実行を一時停止するようにADVNR0命令をエンコードすることが、より有利であり得る。あるいは、第2の間接BTAADVN回路900は、レジスタR0に影響を及ぼす最後の命令に自動的に応答する。例えば、90の時間、moveR0targetA命令1002の結果が用いられ、10の時間、条件付きのmoveR0target命令1006の結果が用いられる。この90と10の実行割合は例示であり、他のプロセッサの動作によって影響され得ることに留意されたい。誤った事前通知の場合には、図9Aの訂正回路908は、誤った事前通知に応答するように動作することができる。本発明が、プロセッサシステムにおいて使用するための例示的な実施形態の場合において開示されたが、上記の説明および添付の特許請求の範囲と矛盾することのない非常に様々な実装形態が当業者によって利用され得ることが理解されよう。例えば、間接分岐ターゲットアドレスの事前通知を行なうための、第2の間接BTAADVN回路900などの、ADVN命令手法および自動的間接ターゲット推測方法の両方は、一緒に用いられてもよい。ADVN命令は、プログラマー、または、プロファイリングコンパイラなどのソフトウェアツールによってコードシーケンスに挿入されてもよく、ソフトウェアツールの場合には、このソフトウェア手法によって、間接分岐ターゲットアドレス通知における高い信頼度が得られる。自動的間接ターゲット推測方法の回路は、ADVN命令を有するコードシーケンスによって、ADVN命令の検出時に優先される。