(57)【要約】      （修正有）【課題】間接分岐アドレスの事前通知を行なうための装置および方法を実現するプロセッサを提供する。【解決手段】命令によって作られたターゲットアドレスは、自動的に特定される。次のプログラムアドレスは、最新のターゲットアドレスを利用する間接分岐命令ＢＸがスペキュレイティブに実行される前に、最新のターゲットアドレスに基づいて準備される。装置は、プログラムによって指定された命令メモリアドレスを、間接分岐命令における最新の間接アドレスとして保持するためのレジスタ５０８を用いる。間接分岐命令をスペキュレイティブに実行する際に用いるための次のプログラムアドレスとして、レジスタから最新の間接アドレスを選択するネクストプログラムアドレスカウンタ５２０を用いる。【選択図】図５
2014222529.tif 000002
【特許請求の範囲】
【請求項１】
第１の命令によってターゲットレジスタとして特定されたレジスタからプログラムによって特定されたターゲットアドレスの現在の値を取り出すステップであって、前記ターゲットレジスタは、命令セットアーキテクチャにおいて指定された複数の異なる命令によってアクセス可能なプログラムであるとともに、前記ターゲットアドレスの現在の値は、前記ターゲットレジスタへ書き込んだ現在の実行サイクル以前の実行ステータスの履歴に基づいて判定される、ステップと、
第２の命令が見つかった後に、前記ターゲットレジスタから受信された前記プログラム指定されたターゲットアドレスへスペキュレイティブ実行のフローを変更するステップであって、前記第２の命令は、間接分岐命令であると動的に決定される、ステップとを含む、
プログラムのシーケンシャルフローを変更する方法。
【請求項２】
前記第１の命令の前記ターゲットレジスタは、次の間接分岐命令において特定される前記ターゲットレジスタであるとともに、前記ターゲットレジスタは、汎用レジスタファイル内の複数のレジスタから選択されたレジスタである、請求項１に記載の方法。
【請求項３】
コードシーケンスにおいて、間接分岐より少なくともＮ個のプログラム命令だけ前に、第１の命令を挿入するステップであって、前記Ｎ個のプログラム命令が、プロセッサパイプラインにおける、前記間接分岐命令を受信するパイプラインステージと前記第１の命令によって特定された前記レジスタを承認するパイプラインステージとの間のパイプラインステージの数に対応している、ステップをさらに含む、請求項１に記載の方法。
【請求項４】
前記ターゲットアドレスは、前記第１の命令の実行結果として、分岐ターゲットアドレスレジスタに記憶される、請求項１に記載の方法。
【請求項５】
前記分岐ターゲットアドレスレジスタに記憶された前記値が有効命令アドレスであることを決定するステップと、
フェッチする次のアドレスを特定するために間接分岐をデコードする際に、前記分岐ターゲットアドレスレジスタからの前記値を選択するステップと、
をさらに含む、本願請求項４に記載の方法。
【請求項６】
分岐ターゲットアドレスを決定するために前記間接分岐命令を実行するステップと、
前記決定された分岐ターゲットアドレスを前記プログラム指定されたターゲットアドレスと比較するステップと、
前記決定された分岐ターゲットアドレスが前記プログラム指定されたターゲットアドレスと同じでない場合に、プロセッサパイプラインをフラッシュするステップと、
をさらに含む請求項１に記載の方法。
【請求項７】
前記第１の命令が見つかった後に分岐予測回路を無効にするステップをさらに含む、請求項１に記載の方法。
【請求項８】
コード部分の実行中に見つかった分岐をトラッキングするために利用される、ハードウェアリソースを有する分岐履歴予測回路を有するプロセッサパイプラインにおいて、前記第１の命令をノーオペレーションとして処理するステップと、
前記分岐履歴予測回路にとって利用可能な前記ハードウェアリソースを超えるコード部分に対する前記第１の命令をイネーブルにするステップと、
をさらに含む、請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してプロセッサパイプラインにおいて命令を処理するための技術に関し、より詳細には、間接分岐命令のターゲットアドレスを早めに指示するための技術に関する。
【背景技術】
【０００２】
携帯電話、ラップトップコンピュータ、携帯情報端末（ＰＤＡ）などの多くのポータブル製品では、通信およびマルチメディアのアプリケーションをサポートするプログラムを実行するプロセッサの使用が必要である。このような製品用のプロセッシングシステムには、プロセッサ、命令のソース、入力オペランドのソース、および、実行結果を記憶するための記憶空間が含まれる。例えば、命令と入力オペランドは、命令キャッシュ、データキャッシュ、およびシステムメモリなどを含む、汎用レジスタとマルチレベルのキャッシュとからなる階層的なメモリ構成体に記憶することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
プロセッサは、プログラムを実行する際に高い性能をもたらすために、通常はパイプラインで命令を実行する。また、プロセッサは、スペキュレイティブ実行を用いて、予測された分岐ターゲットアドレスで始まる命令をフェッチして実行することができる。分岐が予測ミスされると、スペキュレイティブに実行された命令はパイプラインからフラッシュされなければならず、パイプラインは、正しいパスアドレスで再度開始される必要がある。多くのプロセッサ命令セットには、レジスタの内容から得られるプログラムのデスティネーションアドレスに分岐する命令がしばしばある。このような命令は、一般に間接分岐命令と呼ばれている。レジスタの内容に対する間接分岐の依存性により、分岐ターゲットアドレスを予測することは通常困難であるが、これは、間接分岐命令が実行されるたびにレジスタが異なる値を有する可能性があるためである。予測ミスされた間接分岐を訂正する際には、正しい分岐パスにおける命令をフェッチして実行するために、間接分岐命令へのバックトラッキングが一般に必要となり、それによってプロセッサの性能が低下する可能性がある。また、予測ミスは、プロセッサが誤ってスペキュレイティブにフェッチして間違った分岐パスにおける命令の処理を開始し、それによって、使われない命令を処理することと、それらの命令をパイプラインからフラッシュすることとの両方によって電力の増加が引き起こされることを示す。
【課題を解決するための手段】
【０００４】
本発明では、いくつかの態様の中で、プロセッサシステムにおいて性能を向上させ、また電力要件を下げるために、命令を実行する際に起こり得る予測ミスの数を最少にすることが有利である点が認識されている。このような目的に対して、本発明の実施形態は、プログラムのシーケンシャルフローを変更するための方法に該当する。この方法は、命令セットアーキテクチャで定義され、第１の命令によって特定されたレジスタから、プログラム指定されたターゲットアドレスを取り出す。スペキュレイティブ実行のフローは、間接分岐命令であると動的に決定される第２の命令が見つかった後に、上記プログラム指定されたターゲットアドレスに変更される。
【０００５】
本発明における別の実施形態は、間接分岐アドレスの事前通知を行なうための方法に対処している。命令のシーケンスは、命令のシーケンスにおけるターゲットアドレス変更命令によって作られた最新のターゲットアドレスを特定するために分析される。次のプログラムアドレスは、最新のターゲットアドレスを利用する間接分岐命令がスペキュレイティブに実行される前に、最新のターゲットアドレスに基づいて準備される。
【０００６】
本発明における別の態様は、間接分岐ターゲットアドレスの事前通知を行なうための装置に対処している。この装置は、プログラムによって指定された命令メモリアドレスを、間接分岐命令における事前通知（ＡＤＶＮ）間接アドレスとして保持するためのレジスタを用いる。また、この装置は、上記レジスタを対象とする命令を監視するネクストプログラムアドレス選択器回路であって、間接分岐命令をスペキュレイティブに実行する際に次のプログラムアドレスとして用いるために、間接分岐命令に出くわす前に、上記レジスタからＡＤＶＮ間接アドレスとして最新のターゲットアドレスを監視された命令に基づいて選択するネクストプログラムアドレス選択器回路を用いる。
【０００７】
本発明におけるさらに十分な理解と、本発明におけるさらなる特徴および利点とは、以下の詳細な説明と添付図面より明らかとなろう。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施形態を有利に用いることができる例示的なワイヤレス通信システムのブロック図である。
【図２】本発明による、間接分岐命令の分岐ターゲットアドレスをサポートするプロセッサ複合体の機能ブロック図である。
【図３Ａ】本発明による、間接分岐ターゲットアドレス値を有するレジスタを指定する３２ビットの事前通知（ＡＤＶＮ）命令の概略フォーマットを示す図である。
【図３Ｂ】本発明による、間接分岐ターゲットアドレス値を有するレジスタを指定する１６ビットのＡＤＶＮ命令の概略フォーマットを示す図である。
【図４Ａ】本発明による、前の間接分岐の実行の履歴を用いる間接分岐予測に対する手法のためのコード例を示す図である。
【図４Ｂ】本発明による、間接分岐ターゲットアドレスの事前通知を行なうための、図３ＡのＡＤＶＮ命令を用いる間接分岐事前通知に対する手法のためのコード例を示す図である。
【図５】本発明による例示的な第１の間接分岐ターゲットアドレス（ＢＴＡ）事前通知回路を示す図である。
【図６】本発明による、間接分岐ターゲットアドレスの事前通知を行なうための、自動的間接ターゲット推測方法を用いる手法のためのコード例を示す図である。
【図７】本発明による、間接分岐命令の分岐ターゲットアドレスに対して好適に利用される第１の間接分岐事前通知（ＡＤＶＮ）プロセスを示す図である。
【図８Ａ】例示的なターゲットトラッキングテーブル（ＴＴＴ）を示す図である。
【図８Ｂ】本発明による、間接分岐命令の分岐ターゲットアドレスの事前通知を行なうために好適に利用される第２の間接分岐事前通知（ＡＤＶＮ）プロセスを示す図である。
【図９Ａ】本発明による例示的な第２の間接分岐ターゲットアドレス（ＢＴＡ）事前通知（ＡＤＶＮ）回路を示す図である。
【図９Ｂ】本発明による例示的な第３の間接分岐ターゲットアドレス（ＢＴＡ）事前通知（ＡＤＶＮ）回路を示す図である。
【図１０Ａ】本発明による、間接分岐ターゲットアドレスの事前通知を決定するための、ソフトウェアコードのプロファイリング方法を用いる手法のためのコード例を示す図である。
【図１０Ｂ】本発明による、間接分岐ターゲットアドレスの事前通知を決定するための、ソフトウェアコードのプロファイリング方法を用いる手法のためのコード例を示す図である。
【発明を実施するための形態】
【０００９】
次に、本発明におけるいくつかの実施例が示されている添付図面を参照して、本発明をさらに十分に説明する。しかし、本発明は、様々な形態で実施されてもよく、本明細書に明記された実施形態に限定されるように解釈されるべきではない。むしろ、これらの実施態様は、本開示が十分で完全なものとなり、本発明の範囲を当業者に十分に伝えることになるように提供されている。
【００１０】
本発明の教示に基づいて動作するか、もしくは本発明の教示に従う動作を実行するコンピュータプログラムコードまたは「プログラムコード」は、Ｃ、Ｃ＋＋、ＪＡＶＡ（登録商標）、ＳｍａｌｌＴａｌｋ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）、ＴＳＱＬ、Ｐｅｒｌなどの高レベルのプログラミング言語、または、様々な他のプログラミング言語で最初は書かれてもよい。これらの言語の１つで書かれたプログラムは、高レベルプログラムのコードをネイティブアセンブラプログラムに変換することによって、ターゲットプロセッサのアーキテクチャにコンパイルされる。また、ターゲットプロセッサのアーキテクチャのためのプログラムは、ネイティブアセンブラ言語で直接書かれてもよい。ネイティブアセンブラプログラムでは、マシンレベルのバイナリ命令における、命令のニーモニック表現が用いられる。本明細書で用いられる場合、プログラムコードまたはコンピュータ可読媒体は、プロセッサがフォーマットを理解できる、オブジェクトコードなどのマシン言語コードを指す。
【００１１】
図１は、本発明の実施形態を有利に用いることができる例示的なワイヤレス通信システム１００を示す。図１は、説明のために、３つの遠隔ユニット１２０、１３０、および１５０、ならびに、２つの基地局１４０を示す。一般的なワイヤレス通信システムは、より多くの遠隔ユニットおよび基地局を有し得ることが理解されよう。コンポーネント１２５Ａ、１２５Ｃ、１２５Ｂ、および１２５Ｄでそれぞれ表されるハードウェアコンポーネント、ソフトウェアコンポーネント、またはその両方を含む遠隔ユニット１２０、１３０、１５０、および基地局１４０は、さらに後で論じるように、本発明を実施するように適合している。図１は、基地局１４０から遠隔ユニット１２０、１３０、および１５０への順方向リンク信号１８０、ならびに、遠隔ユニット１２０、１３０、および１５０から基地局１４０への逆方向リンク信号１９０を示している。
【００１２】
図１では、遠隔ユニット１２０は移動電話として示され、遠隔ユニット１３０はポータブルコンピュータとして示され、遠隔ユニット１５０は、ワイヤレスローカルループシステムにおける固定位置遠隔ユニットとして示されている。例として、遠隔ユニットは、代替的には、セルフォン、ページャ、ウォーキートーキー、ハンドヘルド個人通信システム（ＰＣＳ）ユニット、携帯情報端末などのポータブルデータユニット、またはメータ読取り機器などの固定位置データユニットでもよい。図１は、本開示の教示による遠隔ユニットを示すが、本開示は、これらの例示的に示されたユニットに限定されない。本発明の実施形態は、間接分岐命令を有する任意のプロセッサシステムにおいて好適に用いることができる。
【００１３】
図２は、本発明に従って間接分岐命令の分岐ターゲットアドレスの事前通知の準備をサポートするプロセッサ複合体２００の機能ブロック図である。このプロセッサ複合体２００は、プロセッサパイプライン２０２、汎用レジスタファイル（ＧＰＲＦ）２０４、制御回路２０６、Ｌ１命令キャッシュ２０８、Ｌ１データキャッシュ２１０、およびメモリ階層２１２を含む。制御回路２０６は、命令フェッチステージ２１４を含むプロセッサパイプライン２０２を制御するための、以下でより詳細に説明されるように相互に作用するプログラムカウンタ（ＰＣ）２１５と分岐ターゲットアドレスレジスタ（ＢＴＡＲ）２１９とを含む。プロセッサ複合体につながることができる周辺デバイスは、説明を簡潔にするために図示されていない。プロセッサ複合体２００は、Ｌ１データキャッシュ２１０に記憶された、メモリ階層２１２と関連づけられたデータを利用して、Ｌ１命令キャッシュ２０８に記憶されたプログラムコードを実行するために、図１のハードウェアコンポーネント１２５Ａ〜１２５Ｄにおいて好適に用いることができる。プロセッサパイプライン２０２は、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向けプロセッサ（ＡＳＰ）等において動作可能である。プロセッサ複合体２００における様々なコンポーネントは、特定用途向け集積回路（ＡＳＩＣ）の技術、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）の技術、または他のプログラマブルロジック、ディスクリートゲートもしくはトランジスタロジック、または意図されるアプリケーションに適した任意の他の利用可能な技術を用いて実現することができる。
【００１４】
プロセッサパイプライン２０２は、命令フェッチステージ２１４と、デコードおよび事前通知（ＡＤＶＮ）ステージ２１６と、ディスパッチステージ２１８と、リードレジスタ（ｒｅａｄ  ｒｅｇｉｓｔｅｒ）ステージ２２０と、実行ステージ２２２と、ライトバック（ｗｒｉｔｅ  ｂａｃｋ）ステージ２２４とである、６つの主要ステージを含む。単一のパイプライン２０２が図示されているが、本発明の間接分岐ターゲットアドレス事前通知を有する命令の処理は、スーパースカラの設計、および、並列パイプラインを実装している他のアーキテクチャに適用可能である。例えば、高いクロックレート用に設計されたスーパースカラプロセッサは、２つ以上の並列パイプラインを有することができ、それぞれのパイプラインは、命令フェッチステージ２１４と、ＡＤＶＮロジック回路２１７を有するデコードおよびＡＤＶＮステージ２１６と、ディスパッチステージ２１８と、リードレジスタステージ２２０と、実行ステージ２２２と、ライトバックステージ２２４とを、２つ以上のパイプライン化されたステージに分割して、高いクロックレートをサポートするために全体的なプロセッサパイプラインの深さ（ｏｖｅｒａｌｌ  ｐｒｏｃｅｓｓｏｒ  ｐｉｐｅｌｉｎｅ  ｄｅｐｔｈ）を増すことができる。
【００１５】
プロセッサパイプライン２０２における第１のステージで始めると、プログラムカウンタ（ＰＣ）２１５と関連する命令フェッチステージ２１４は、後段のステージによる処理のためにＬ１命令キャッシュ２０８から命令をフェッチする。Ｌ１命令キャッシュ２０８において命令フェッチがミスする場合、これは、フェッチされる命令がＬ１命令キャッシュ２０８に存在しないことを意味し、命令は、レベル２（Ｌ２）のキャッシュなどのマルチレベルのキャッシュとメインメモリとを含み得るメモリ階層２１２からフェッチされる。命令は、ブートリードオンリーメモリ（ＲＯＭ）、ハードドライブ、光ディスクなどの他のソース、または、インターネットなどの外部インターフェースからメモリ階層２１２にロードすることができる。次いで、フェッチされた命令は、ＡＤＶＮロジック回路２１７を有するデコードおよびＡＤＶＮステージ２１６においてデコードされ、以下でより詳細に説明される間接分岐ターゲットアドレス値の事前通知のためのさらなる能力を提供する。図２に示されているように制御回路２０６に配置され得る分岐ターゲットアドレスレジスタ（ＢＴＡＲ）２１９は、このような配置に限定されないが、ＡＤＶＮロジック回路２１７と関連づけられている。ＢＴＡＲ２１９は、例えばデコードおよびＡＤＶＮステージ２１６の中に好適に配置されてもよい。
【００１６】
ディスパッチステージ２１８は、デコードされた１つまたは複数の命令を受け取り、それらの命令を、例えば、スーパースカラプロセッサまたはマルチスレッドプロセッサなどで利用される１つまたは複数の命令パイプラインにディスパッチする。リードレジスタステージ２２０は、ＧＰＲＦ２０４からデータオペランドをフェッチするか、または、フォワーディングネットワーク２２６からデータオペランドを受信する。フォワーディングネットワーク２２６は、実行ステージから結果オペランドが利用できるようになるとすぐにそれらの結果オペランドを提供するように、ＧＰＲＦ２０４の周辺の高速パスを提供する。フォワーディングネットワークを用いても、深い実行パイプラインからの結果オペランドは、３つ以上の実行サイクルを要する場合がある。これらのサイクルの間、実行パイプラインからの結果オペランドデータを要するリードレジスタステージ２２０の命令は、結果オペランドが利用可能になるまで待つ必要がある。実行ステージ２２２は、ディスパッチされた命令を実行し、ライトバックステージ２２４は、結果をＧＰＲＦ２０４に書き込み、また、結果が以降の命令で使われる場合には、フォワーディングネットワーク２２６を通じてリードレジスタステージ２２０に結果を送り戻すこともできる。結果は、プログラムの順序に比べると、アウトオブオーダーでライトバックステージ２２４において受信され得るため、ライトバックステージ２２４は、結果をＧＰＲＦ２０４に書き込む場合には、プロセッサの機能を使ってプログラムの順序を保つ。間接分岐命令のターゲットアドレスの事前通知を行なうためのプロセッサパイプライン２０２に関するより詳細な説明は、詳細なコード例を用いて以下で行なわれる。
【００１７】
プロセッサ複合体２００は、コンピュータ可読記憶媒体に記憶されたプログラムにおける制御のもとで命令を実行するように構成することができる。例えば、コンピュータ可読記憶媒体は、Ｌ１データキャッシュ２１０およびメモリ階層２１２から得られるデータに基づく動作に向けて、プロセッサ複合体２００とローカルに直接関連づけられていてもよく、例えば、Ｌ１命令キャッシュ２０８から利用可能なものでもよく、または、例えば、入力／出力インターフェース（図示せず）を介するものでもよい。また、プロセッサ複合体２００は、プログラムの実行時にはＬ１データキャッシュ２１０とメモリ階層２１２からデータにアクセスする。コンピュータ可読記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、動的ランダムアクセスメモリ（ＤＲＡＭ）、同期動的ランダムアクセスメモリ（ＳＤＲＡＭ）、フラッシュメモリ、リードオンリーメモリ（ＲＯＭ）、プログラマブルリードオンリーメモリ（ＰＲＯＭ）、消去可能プログラマブルリードオンリーメモリ（ＥＰＲＯＭ）、電気消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）、コンパクトディスク（ＣＤ）、デジタルビデオディスク（ＤＶＤ）、他のタイプのリムーバブルディスク、または任意の他の好適な記憶媒体を含み得る。
【００１８】
図３Ａは、間接分岐ターゲットアドレス値を保持している、プログラマーまたはソフトウェアツールによって特定されたレジスタを、本発明に従って指定する３２ビットのＡＤＶＮ命令３００のための概略フォーマットである。このＡＤＶＮ命令３００は、特定されたレジスタを指定する、入ってくる間接分岐命令に先立って、特定されたレジスタに記憶されている実際の分岐ターゲットアドレスをプロセッサ複合体２００に通知する。以下でより詳細に説明されるように、事前通知を行なうことによってプロセッサの性能を向上させることができる。ＡＤＶＮ命令３００は、指定された１つまたは複数のフラグに基づいて命令が無条件に実行されるか、または条件付きで実行されるかどうかを指定するための、複数の命令セットアーキテクチャ（ＩＳＡ）によって利用されるコンディションコードフィールド３０４と共に図示されている。オペコード３０５は、少なくとも１つの分岐ターゲットアドレスレジスタフィールドＲｍ３０７を有する分岐ＡＤＶＮ命令として命令を特定する。命令固有フィールド３０６は、オペコードの拡張と、命令固有の他のエンコーディングとを可能にする。命令における指定されたコンディションコードフィールドに従って条件付きで実行する命令を有するこのようなＩＳＡを有するプロセッサでは、分岐ターゲットアドレスレジスタＲｍに影響を及ぼす最後の命令のコンディションフィールドが、ＡＤＶＮ命令のコンディションフィールドとして通常用いられることになるが、このような仕様に限定されない。
【００１９】
本発明の教示は、様々な命令フォーマットとアーキテクチャ仕様に適用可能である。例えば、図３Ｂは、本発明による、間接分岐ターゲットアドレス値を有するレジスタを指定する１６ビットのＡＤＶＮ命令３５０のための概略フォーマットである。この１６ビットのＡＤＶＮ命令３５０は、オペコード３５５、分岐ターゲットアドレスレジスタフィールドＲｍ３５７、および命令固有ビット３５６を有し、３２ビットのＡＤＶＮ命令３００と類似している。さらに、ＡＤＶＮ命令をエンコードするために、他のビットフォーマットと命令の幅とが利用可能であることに留意されたい。
【００２０】
例えば、レジスタＲｘに基づく分岐（ＢＸ）、ａｄｄ  ＰＣ、ｍｏｖｅ  Ｒｘ  ＰＣなどの間接分岐型命令における概略フォームは、プロセッサパイプライン２０２において有利に用いられて実行されてもよい。本発明を説明するために、以下でさらに説明されるコードシーケンス例では、間接分岐命令であるＢＸ  Ｒｘフォームが用いられている。
【００２１】
命令指定の分岐ターゲットアドレス（ＢＴＡ）を有する分岐命令、命令指定のオフセットアドレスとベースアドレスレジスタとの合計として計算されるＢＴＡを有する分岐命令などの、他のフォームの分岐命令がＩＳＡにおいて一般に提供されることに留意されたい。このような分岐命令のサポートでは、プロセッサパイプライン２０２は、例えば前の分岐命令の実行における条件付き実行のステータス等をトラッキングすることと、これらの命令における以降の実行を予測する際に用いるために、このような実行のステータスを記憶することとに基づく分岐履歴予測技術を利用することができる。プロセッサパイプライン２０２は、このような分岐履歴予測技術をサポートすることができ、それに加えて、間接分岐ターゲットアドレスの事前通知を行なうためにＡＤＶＮ命令の使用をサポートすることができる。例えば、プロセッサパイプライン２０２は、ＡＤＶＮ命令が見つかるまで分岐履歴予測技術を用いることができる。次いで、ＡＤＶＮ命令は、本明細書で説明されるＡＤＶＮ機能によって分岐ターゲット履歴予測技術に優先する。
【００２２】
本発明における他の実施形態では、プロセッサパイプライン２０２は、ＡＤＶＮ命令を使用することにおける精度を監視するように構成されてもよく、ＡＤＶＮ特定のターゲットアドレスが１回または複数回にわたって間違っていた場合には、同じ間接分岐における以降の出現に対してＡＤＶＮ命令を無視するように構成されてもよい。さらに、ＡＤＶＮ命令を有するＩＳＡをサポートするプロセッサにおける特定の実装形態に対しては、プロセッサは、見つかったＡＤＶＮ命令をノーオペレーション（ＮＯＰ）命令として処理してもよく、または、検出されたＡＤＶＮ命令について未定義としてフラグを立ててもよいことに留意されたい。さらに、ＡＤＶＮ命令は、コード部分の実行中に見つかった分岐をトラッキングするのに十分なハードウェアリソースを有する動的分岐履歴予測回路を有するプロセッサパイプラインにおいてはＮＯＰとして処理され、動的分岐履歴予測回路に利用可能なハードウェアリソースを超えるコード部分に対しては、以下で説明されるＡＤＶＮ命令を可能としてもよい。また、ＡＤＶＮ命令は、間接分岐ターゲットアドレスを予測することに対して動的分岐履歴予測回路が不十分な結果を有する場合には、間接分岐ターゲットアドレスの事前通知を行なうために動的分岐履歴予測回路と共に用いられてもよい。例えば、動的分岐履歴予測回路から生成された、予測された分岐ターゲットアドレスは、ＡＤＶＮ命令の使用を通じて提供されるターゲットアドレスによって優先されてもよい。さらに、以下で説明される間接分岐ターゲットアドレスの事前通知を行なうために、有利な自動的間接ターゲット推測方法が提供される。
【００２３】
図４Ａは、本発明によるＡＤＶＮ命令が見つからない場合に、間接分岐実行を予測するために一般的な履歴手法を用いる間接分岐予測に対する手法のためのコード例４００である。プロセッサ複合体２００を参照して、コード例４００の実行を説明する。４０１〜４０４の命令Ａ〜Ｄは、４０１〜４０４の命令Ａ〜Ｄの分析に基づき、ＧＰＲＦ２０４のレジスタＲ０に影響を及ぼすことのない、本例のための一組のシーケンシャルな算術命令でもよい。レジスタＲ０は、４０６の間接分岐命令ＢＸ  Ｒ０のために、４０５のｌｏａｄ  Ｒ０命令によってターゲットアドレスをロードされる。この例では、命令４０１〜４０６のそれぞれは、無条件に実行されるように指定されている。また、ｌｏａｄ  Ｒ０命令４０５は、Ｌ１命令キャッシュ２０８によって使用可能であり、それによって、４０１の命令Ａが実行ステージ２２２で実行を完了するときには、フェッチステージ２１４でｌｏａｄ  Ｒ０命令４０５がフェッチされていることが想定される。次いで、ｌｏａｄ  Ｒ０命令４０５がデコードおよびＡＤＶＮステージ２１６でデコードされる間に４０６の間接分岐命令ＢＸ  Ｒ０がフェッチされる。次のパイプラインステージでは、ｌｏａｄ  Ｒ０命令４０５が実行に向けてディスパッチされるように準備され、ＢＸ  Ｒ０命令４０６がデコードされる。また、デコードおよびＡＤＶＮステージ２１６では、ＢＸ  Ｒ０命令４０６が行なわれるか否かの予測が、以前の間接分岐実行の履歴に基づいて行なわれ、さらに間接分岐のターゲットアドレスも予測される。この例の場合、ＢＸ  Ｒ０命令４０６は、無条件に「行なわれる」ように指定されており、ＡＤＶＮロジック回路２１７は、間接分岐ターゲットアドレスをアドレスＸとして予測することを単に必要とされている。この予測に基づいて、プロセッサパイプライン２０２は、アドレスＸから始まる命令のスペキュレイティブなフェッチの開始を指示され、与えられた「行なわれる」というステータスは、概して現在の命令アドレッシングのリダイレクションである。また、プロセッサパイプライン２０２は、４０６の間接分岐命令ＢＸ  Ｒ０に続くパイプラインの任意の命令がアドレスＸで始まる命令と関連していない場合には、それらの任意の命令をフラッシュする。プロセッサパイプライン２０２は、予測されたアドレスＸが正しく予測されたかどうかが実行ステージで判定され得るまで命令のフェッチを続ける。
【００２４】
命令を処理する間、例えばｌｏａｄ  Ｒ０命令４０５の実行によって起こり得るストール状況が見つかる場合がある。Ｌ１データキャッシュにヒット（ｈｉｔ）がある場合には、ｌｏａｄ  Ｒ０命令４０５の実行によって、Ｌ１データキャッシュ２１０から値が遅延なく戻され得る。しかし、Ｌ１データキャッシュ２１０にミス（ｍｉｓｓ）があると、ｌｏａｄ  Ｒ０命令４０５の実行によって著しい数のサイクルが必要となる場合がある。ｌｏａｄ命令は、ベースアドレスを提供し、次いで実行ステージ２２２でベースアドレスに即値を加えて実効アドレスを生成するためにＧＰＲＦ２０４のレジスタを用いることができる。この実効アドレスは、データパス２３２を介してＬ１データキャッシュ２１０に送られる。Ｌ１データキャッシュ２１０にミスがある場合、データは、例えばＬ２キャッシュおよびメインメモリを含み得るメモリ階層２１２からフェッチされる必要がある。さらに、データは、Ｌ２キャッシュでミスする可能性があり、これはメインメモリからのデータのフェッチにつながる。例えば、Ｌ１データキャッシュ２１０におけるミス、メモリ階層２１２のＬ２キャッシュにおけるミス、および、メインメモリへのアクセスは、データをフェッチするために数百回のＣＰＵサイクルを必要とする場合がある。Ｌ１データキャッシュのミスの後にデータをフェッチするのに要するサイクルの間、ＢＸ  Ｒ０命令４０６は、インフライトオペランド（ｉｎ  ｆｌｉｇｈｔ  ｏｐｅｒａｎｄ）が利用可能になるまでプロセッサパイプライン２０２においてストールする。ストールは、リードレジスタステージ２２０において、または、実行ステージ２２２の始まりにおいて起こると考えることができる。
【００２５】
複数の命令パイプラインを有するプロセッサでは、ｌｏａｄ  Ｒ０命令４０５のストールは、任意の他のパイプラインで行なわれるスペキュレイティブな動作をストールしない可能性があることに留意されたい。Ｌ１データキャッシュ２１０におけるミスに基づくストールの長さに起因して、著しい数の命令がスペキュレイティブにフェッチされることがあり、そのことは、間接分岐ターゲットアドレスにおける誤った予測があった場合には、性能と電力使用に著しい影響を及ぼす恐れがある。ストールは、図２の制御回路２０６の一部であるホールド回路の使用によって、プロセッサパイプラインの中で生じ得る。ホールド回路は、例えばパイプラインにおいて命令をストールするためにゲートパイプラインステージレジスタに対して用いられる場合のあるホールド信号を生成する。図２のプロセッサパイプライン２０２の場合、ホールド信号は、例えば、すべての入力が使用可能でないときにリードレジスタステージでアクティブになる場合があり、それによってパイプラインがホールドされ、命令の実行を完了するのに必要な入力の受信を保留する。ホールド信号は、必要なすべてのオペランドが利用可能になると解除される。
【００２６】
ミスの解決時には、ロードデータが、パス２４０を介してライトバックステージ２２４の一部としてのライトバック動作部に送られる。次いでオペランドがＧＰＲＦ２０４に書き込まれ、また、上記のフォワーディングネットワーク２２６に送られる場合がある。Ｒ０の値は、スペキュレイティブにフェッチされた命令がフラッシュされる必要があるか否かを判定するために、予測されたアドレスＸと比較されてもよい。分岐ターゲットアドレスを記憶するために用いられるレジスタは、間接分岐命令が実行されるたびに異なる値を有する可能性があるため、現行の予測手法を用いてスペキュレイティブにフェッチされた命令は、フラッシュされることになる可能性が高い。
【００２７】
図４Ｂは、本発明に従って間接分岐ターゲットアドレスの事前通知を行なうための、図３ＡのＡＤＶＮ命令を用いる間接分岐事前通知に対する手法のためのコード例４２０である。図４Ａにおける４０１〜４０４の命令Ａ〜Ｄが分岐ターゲットアドレスレジスタＲ０に影響を及ばさないという上記で示された分析に基づいて、ｌｏａｄ  Ｒ０命令４０５は、例えば図４Ｂのコード例における４２１の命令Ａの後に配置されるように、命令シーケンスにおいて繰り上げられてもよい。さらに、図３ＡのＡＤＶＮ命令３００などのＡＤＶＮ  Ｒ０命令４２３が、４２７の間接命令ＢＸ  Ｒ０に向けた分岐ターゲットアドレスの事前通知のための予測の助けとして、ｌｏａｄ  Ｒ０命令４２２の直後に配置される。
【００２８】
図４Ｂにおける新しい命令シーケンス４２１〜４２７は、プロセッサパイプライン２０２を通って流れるため、ｌｏａｄ  Ｒ０命令４２２が実行ステージにある場合、ＡＤＶＮ  Ｒ０命令４２３はリードステージ２２０にあることになり、また４２６の命令Ｄは、フェッチステージ２１４にあることになる。ｌｏａｄ  Ｒ０命令４２２がＬ１データキャッシュ２１０でヒットする状況の場合には、Ｒ０の値は、ｌｏａｄ  Ｒ０の実行の終わりまでには知られ、このＲ０の値は、フォワーディングネットワーク２２６を介してリードステージに高速転送され、このＲ０の値はまた、リードステージ２２０の終わりにおいて、またはＡＤＶＮ  Ｒ０命令の実行ステージの始まりまでに知られる。デコードおよびＡＤＶＮステージ２１６に入る間接分岐命令に先立つＲ０値の決定は、ＡＤＶＮロジック回路２１７が、いかなる追加のサイクルディレイも有さず、決定されたＲ０値を分岐ターゲットアドレスとしてＢＸ  Ｒ０命令４２７のために選択することを可能にする。ＢＸ  Ｒ０命令４２７は、パイプラインにおいて動的に特定されることに留意されたい。一般に、このコード例におけるＲ０などの、ＡＤＶＮ指定されたレジスタは、間接分岐指定されたターゲットアドレスレジスタと同じアドレスを保持することになる一方で、例外が見つかる場合がある。このようなアドレスの例外に対する手法の１つでは、ＡＤＶＮ指定されたレジスタの値は、見つかった次の、間接分岐命令指定されたレジスタの値と比較されず、間違ったターゲットアドレスが選択された場合には、パイプラインにおいてエラーが後で検出され、パイプラインをフラッシュするなどの適切な措置がとられる。別の手法では、ＡＤＶＮ指定されたレジスタの値は、見つかった次の、間接分岐命令指定されたレジスタの値と比較され、一致が見出されるまでスペキュレイティブ実行による変更は行なわれない。これは、一般的なケースである。一致が見出されなかった場合には、パイプラインは、ＡＤＶＮ命令が見つからなかった場合と同じように動作することになる。
【００２９】
プロセッサパイプライン２０２に対しては、ｌｏａｄ  Ｒ０命令およびＡＤＶＮ  Ｒ０命令は、Ｌ１データキャッシュ２１０にヒットがある場合には、どのようなさらなる遅延を引き起こすこともなく、命令Ｂの後に配置されていてもよいことに留意されたい。しかし、Ｌ１データキャッシュにミスがあると、ストール状況が引き起こされることになる。このＬ１データキャッシュ２１０におけるミスの場合には、ｌｏａｄ  Ｒ０命令およびＡＤＶＮ  Ｒ０命令は、可能な場合には、適切な数のミスディレイサイクルで、あらゆるさらなる遅延を引き起こすことを避けるために、パイプラインの深さに基づいてＢＸ  Ｒ０命令の前に配置されている必要がある。
【００３０】
一般に、コードシーケンスにおけるＡＤＶＮ命令の配置は、ＢＸ命令の前にＮ個の命令があることが好ましい。プロセッサパイプラインの場合には、Ｎは、例えば命令フェッチステージ２１４と実行ステージ２２２とである、間接分岐命令を受信するステージと、ＡＤＶＮ指定された分岐ターゲットアドレスを認識するステージとの間のステージの数を表す。フォワーディングネットワーク２２６を用いる例示的なプロセッサパイプライン２０２では、Ｎは２であり、フォワーディングネットワーク２２６を用いない場合には、Ｎは３である。例えばフォワーディングネットワークを用いるプロセッサパイプラインの場合、ＡＤＶＮ命令の前で２に等しいＮ個の命令がＢＸ命令に先行すると、ＡＤＶＮターゲットアドレスレジスタＲｍの値は、フォワーディングネットワーク２２６によってリードレジスタステージ２２０の終わりの所で判別される。ＡＤＶＮ命令の使用に向けてフォワーディングネットワーク２２６を用いないプロセッサパイプラインに対する代替の実施形態では、例えば、ＡＤＶＮ命令の前で３に等しいＮ個の命令がＢＸ命令に先行すると、ＡＤＶＮターゲットアドレスレジスタＲｍの値は、ＢＸ命令がデコードおよびＡＤＶＮステージ２１６に入るときに実行ステージ２２２の終わりの所で判別される。また、命令の数Ｎは、例えば命令フェッチステージ２１４における遅延による上側パイプラインのストール、スーパースカラプロセッサで出される最大Ｋ個の命令まで変化し得る命令発行幅（ｉｎｓｔｒｕｃｔｉｏｎ  ｉｓｓｕｅ  ｗｉｄｔｈ）、および、ＡＤＶＮ命令とＢＸ命令との間で生じる中断を例えば含むさらなる要因に依存してもよい。概して、ＩＳＡでは、このような要因の影響を最少にするために、ＡＤＶＮ命令ができるだけ早く予定されることが推奨され得る。
【００３１】
図４Ｂは単一のＡＤＶＮ  Ｒ０命令で示されているが、あらゆる間接分岐に出くわす前に複数のＡＤＶＮ命令をインスタンス化することができる。複数のＡＤＶＮ命令は、例えばスタック装置（ｓｔａｃｋ  ａｐｐａｒａｔｕｓ）の使用によって得られるＦＩＦＯ方式で、次に見つかる間接分岐に適用される。一般に、次に見つかる間接分岐命令は、プログラム順における次の間接分岐命令と等しいことに留意されたい。この原則に対して例外の原因となり得るコードは、複数のＡＤＶＮ命令の使用が適切であるかどうかを判定する前に評価することができる。
【００３２】
図５は、本発明による例示的な第１の間接分岐ターゲットアドレス（ＢＴＡ）事前通知回路５００を示す。この第１の間接ＢＴＡ事前通知回路５００は、ＡＤＶＮ実行回路５０４、分岐ターゲットアドレスレジスタ（ＢＴＡＲ）回路５０８、ＢＸデコード回路５１２、選択回路５１６、および、ＰＣアドレスの生成に影響を及ぼす入力に応答するためのネクストプログラムカウンタ（ＰＣ）回路５２０を含む。ＡＤＶＮ実行回路５０４においてＡＤＶＮ  Ｒｘ命令が実行されると、Ｒｘの値はＢＴＡＲ回路５０８にロードされる。ＢＸデコード回路５１２でＢＸ命令がデコードされ、選択回路５１６によって選択されるＢＴＡＲが有効になると、ＢＴＡＲ回路５０８のＢＴＡの値は、ネクストＰＣ回路５２０による次のフェッチアドレスとして使用される。また、ＢＴＡＲの有効指示は、有効なＢＴＡＲがアクティブである間にフェッチを止めるために用いられ、それによって、間違ったアドレスにおけるフェッチ命令に関連する電力を節約してもよい。
【００３３】
図６は、本発明に従って間接分岐ターゲットアドレスの事前通知を行なうための、自動的間接ターゲット推測方法を用いる手法のためのコード例６００である。このコードシーケンス６０１〜６０７では、６０１の命令Ａ、６０３の命令Ｂ、６０４の命令Ｃ、および６０６の命令Ｄは、前に説明したものと同じであるため、分岐ターゲットアドレスレジスタに影響を及ぼさない。ｌｏａｄ  Ｒ０命令６０２と、ａｄｄ  Ｒ０，  Ｒ７，  Ｒ８命令６０５との２つの命令は、この例における分岐ターゲットレジスタＲ０に影響を及ぼす。６０７の間接分岐命令ＢＸ  Ｒ０は、図４Ａおよび図４Ｂにおける前の例で用いられたものと同じである。このコード例６００では、ｌｏａｄ  Ｒ０命令６０２と、ａｄｄ  Ｒ０，  Ｒ７，  Ｒ８命令６０５との両方がＢＴＡレジスタＲ０に影響を及ぼすものの、ａｄｄ  Ｒ０，  Ｒ７，  Ｒ８命令６０５が、ＢＴＡレジスタＲ０の内容に影響を及ぼす最後の命令である。
【００３４】
自動的間接ターゲット推測方法の回路は、コードシーケンス６００の実行パターンをトラッキングすることによって、ＢＸ  Ｒ０命令６０７がデコードおよびＡＤＶＮステージ２１６に入るときの、Ｒ０における最後の値がＡＤＶＮ  ＢＴＡとして用いられる必要があるかどうかの事前通知を妥当な精度で提供することができる。一実施形態では、ＢＸ  Ｒ０命令がデコードおよびＡＤＶＮステージ２１６に入る際には、Ｒ０に書き込まれた最後の値が、ＢＸ  Ｒ０命令のための値として用いられることになる。この実施形態は、このＢＸ  Ｒ０命令と関連するコードシーケンスの場合、Ｒ０に書き込まれた最後の値が、時間における高い割合で正しい値であると推定され得るという評価に基づいている。
【００３５】
図７は、本発明に従って間接分岐命令の分岐ターゲットアドレスの事前通知を行なうために好適に利用される第１の間接分岐事前通知（ＡＤＶＮ）プロセス７００である。この第１の間接分岐ＡＤＶＮプロセス７００は、レジスタファイル番号によってアドレス指定可能であるか、またはインデックス指定されるラストライタテーブル（ｌａｓｔｗｒｉｔｅｒ  ｔａｂｌｅ）を利用しており、そのため、Ｒ０からＲ３１の３２個のエントリを有するレジスタファイルと関連づけられたラストライタテーブルは、０〜３１のインデックス値によってアドレス指定可能となる。同様に、レジスタファイルが、例えばＲ０〜Ｒ１３の１４個のエントリである、より少ないエントリを有する場合には、ラストライタテーブルは、０〜１３のインデックス値によってアドレス指定可能となる。ラストライタテーブルにおけるエントリのそれぞれは、命令アドレスを記憶する。また、第１の間接分岐ＡＤＶＮプロセス７００は、命令アドレスによってアクセスされ、エントリごとの有効ビットを含むエントリを有する分岐ターゲットアドレスレジスタアップデータ連想メモリ（ＢＴＡＲＵ）を利用する。ラストライタテーブルは、第１の間接分岐ＡＤＶＮプロセス７００に入る前に、間接分岐ＡＤＶＮコードシーケンスの命令アドレスが通常見つからず、ＢＴＡＲＵのエントリが無効状態に初期化される場合、ゼロなどの無効命令アドレスに初期化される。
【００３６】
第１の間接分岐ＡＤＶＮプロセス７００は、フェッチされた命令のストリーム７０２で始まる。判定ブロック７０４では、間接分岐命令のターゲットレジスタでもよい任意のレジスタＲｍに書き込む命令が受信されたかどうかの判断がなされる。例えば、Ｒ０〜Ｒ１３のレジスタを有する１４エントリレジスタファイルを有するプロセッサでは、間接分岐命令における可能性のあるターゲットレジスタとしてのレジスタＲ０〜Ｒ１３のいずれかに書き込む命令が、追跡されることになる。間接分岐命令を有するコード部分における複数のパス（ｐａｓｓ）を監視する技術の場合、特定のＲｍは、第１のパスにおける間接分岐命令を特定することによって求められる。例えば、２つ以上のＲｍ変更命令を有するコードのシーケンスは、同じＲｍを指定する間接分岐に出くわす前に受信される。このようなコードのシーケンスは、プロセス７００を通る複数のパスによって処理される。プロセス７００における第１のパスでは、ラストライタテーブルにおいて、インデックス指定されたＲｍアドレスに最後のＲｍ変更命令のアドレスが記憶され、間接分岐命令が見つかる前に、前のＲｍ変更命令のアドレスを上書きする。ＢＴＡＲは、第１のパスでは間接分岐命令が見つかる後まで更新されないが、これは、いつ最後のＲｍ変更命令が受信されたかが第１のパスではわからないためである。見つかった間接分岐命令は、指定されたＲｍを変更した最後の命令が、指定されたＲｍに記憶されたターゲットアドレスの事前通知に用いられる有効な命令であることを示すために有効ビットをアサートする。プロセス７００を通る第２のパスでは、最後のＲｍ変更命令は、ＢＴＡＲの更新をもたらし、例えばデコードステージで特定された間接分岐命令が見つかると、ＢＴＡＲは、分岐ターゲットアドレスの事前通知に用いることができる。
【００３７】
ブロック７０４に戻ると、受信された命令がＲｍに影響を及ぼさない場合、第１の間接分岐ＡＤＶＮプロセス７００は判定ブロック７０６に進む。判定ブロック７０６では、受信された命令がＢＸ  Ｒｍ命令などの間接分岐命令であるかどうかの判断がなされる。受信された命令が間接分岐命令でない場合、第１の間接分岐ＡＤＶＮプロセス７００は、次の受信命令を評価するために判定ブロック７０４に進む。
【００３８】
ブロック７０４に戻ると、受信された命令がＲｍに影響を及ぼす場合、第１の間接分岐ＡＤＶＮプロセス７００は、ブロック７０８、７１０、および７１２を通る第１のパスにおけるブロック７０８に進む。ブロック７０８では、Ｒｍに影響を及ぼす命令のアドレスがラストライタテーブルのＲｍアドレスにおいてロードされる。ブロック７１０では、ＢＴＡＲＵが命令アドレスにおける有効ビットに対してチェックされる。判定ブロック７１２では、アサートされた有効ビットがＢＴＡＲＵにおける命令アドレスエントリで見つかったかどうかの判断がなされる。ブロック７０８、７１０、および７１２を通る第１のパスにおいて生じ得るように、アサートされた有効ビットが見つからなかった場合、第１の間接分岐ＡＤＶＮプロセスは、次の受信命令を評価するために判定ブロック７０４に戻る。
【００３９】
判定ブロック７０６に戻ると、ＢＸ  Ｒｍ命令などの間接分岐命令が受信されると、第１の間接分岐ＡＤＶＮプロセス７００はブロック７１４に進む。ブロック７１４では、ラストライタテーブルが、アドレスＲｍにおける有効命令アドレスに対してチェックされる。判定ブロック７１６では、有効命令アドレスがＲｍアドレスで見つかったかどうかの判断がなされる。有効命令アドレスが見つからない場合、第１の間接分岐ＡＤＶＮプロセス７００はブロック７１８に進む。ブロック７１８では、命令アドレスにおけるＢＴＡＲＵのビットエントリが無効となるように設定され、第１の間接分岐ＡＤＶＮプロセス７００は、次の受信命令を評価するために判定ブロック７０４に戻る。
【００４０】
判定ブロック７１６に戻ると、有効命令アドレスが見つかると、第１の間接分岐ＡＤＶＮプロセス７００はブロック７２０に進む。保留中の更新があると、第１の間接分岐ＡＤＶＮプロセス７００は、その保留中の更新が解決されるまでストールする場合がある。ブロック７２０では、命令アドレスにおけるＢＴＡＲＵのビットエントリが有効となるように設定され、第１の間接分岐ＡＤＶＮプロセス７００は判定ブロック７２２に進む。判定ブロック７２２では、分岐ターゲットアドレスレジスタ（ＢＴＡＲ）が有効アドレスを有するかどうかの判断がなされる。ＢＴＡＲが有効アドレスを有する場合、第１の間接分岐ＡＤＶＮプロセス７００はブロック７２４に進む。ブロック７２４では、記憶されたＢＴＡＲの値を用いて間接分岐命令の事前通知Ｒｍが行なわれ、第１の間接分岐ＡＤＶＮプロセス７００は、次の受信命令を評価するために判定ブロック７０４に戻る。判定ブロック７２２に戻ると、ＢＴＡＲが有効アドレスを有していないと判断されると、第１の間接分岐ＡＤＶＮプロセス７００は、次の受信命令を評価するために判定ブロック７０４に戻る。
【００４１】
判定ブロック７０４に戻ると、受信された命令が間接分岐命令のＲｍに影響を及ぼす場合、第１の間接分岐ＡＤＶＮプロセス７００を通る第２のパスにおいて生じ得るように第１の間接分岐ＡＤＶＮプロセス７００は、ブロック７０８、７１０、および７１２を通る第２のパスにおけるブロック７０８に進む。ブロック７０８では、Ｒｍに影響を及ぼす命令のアドレスがラストライタテーブルのＲｍアドレスにおいてロードされる。ブロック７１０では、ＢＴＡＲＵが命令アドレスにおける有効ビットに対してチェックされる。判定ブロック７１２では、アサートされた有効ビットがＢＴＡＲＵにおける命令アドレスエントリで見つかったかどうかの判断がなされる。処理ブロック７０８、７１０、および７１２を通る第２のパスにおいて生じ得るように、アサートされた有効ビットが見つかった場合、第１の間接分岐ＡＤＶＮプロセス７００は、ブロック７２６に進む。ブロック７２６では、図２のＢＴＡＲ２１９などの分岐ターゲットアドレスレジスタ（ＢＴＡＲ）は、Ｒｍに記憶される、命令を実行するＢＴＡＲアップデータの結果で更新される。次いで、第１の間接分岐ＡＤＶＮプロセス７００は、次の受信命令を評価するために判定ブロック７０４に戻る。
【００４２】
図８Ａおよび図８Ｂに示されている別の自動的な間接分岐ターゲットアドレスプロセスでは、間接分岐命令がデコーディングステージに入るときにプログラムレジスタに記憶されている最後の値が、分岐ターゲットアドレス（ＢＴＡ）の事前通知として用いられる必要があるかどうかが判断される。図８Ａは、エントリ有効ビット８０４、タグフィールド８０５、レジスタＲｍアドレス８０６、データ有効ビット８０７、アップ／ダウンカウンタ値８０８、およびＲｍデータフィールド８０９を含む６つのフィールドを有するトラッキングターゲットテーブル（ＴＴＴ）エントリ８０２を有する例示的なＴＴＴ８００を示す。ＴＴＴ８００は、デコードおよびＡＤＶＮステージ２１６と、プロセッサパイプライン２０２における他のパイプステージとによってアクセス可能な、例えば制御回路２０６の中のメモリに記憶されてもよい。例えば、実行ステージ２２２などの下側のパイプステージでは、ＲｍデータがＲｍデータフィールド８０９に書き込まれる。以下でより詳細に説明されるように、間接分岐命令は、フェッチされる際にＴＴＴエントリを配置するが、ＴＴＴテーブルにおいてすでに有効なマッチングタグを有していない。タグフィールド８０５は、完全な命令アドレスでもよく、またはその一部でもよい。レジスタの値に影響を及ぼす命令は、Ｒｍアドレス８０６で指定されるマッチングＲｍフィールドに対して、ＴＴＴ８００における有効エントリをチェックする。一致が見られる場合には、そのＲｍで指定されたアドレスに対する間接分岐命令は、ＴＴＴテーブル８００におけるＴＴＴエントリ８０２などの確立されたエントリを有している。
【００４３】
図８Ｂは、本発明に従って間接分岐命令における分岐ターゲットアドレスの事前通知を行なうために好適に利用される第２の間接分岐事前通知（ＡＤＶＮ）プロセス８５０である。第２の間接分岐ＡＤＶＮプロセス８５０は、フェッチされた命令のストリーム８５２で始まる。判定ブロック８５４では、間接分岐（ＢＸ  Ｒｍ）命令が受信されたかどうかの判断がなされる。ＢＸ  Ｒｍ命令が受信されない場合、第２の間接分岐ＡＤＶＮプロセス８５０は、判定ブロック８５６に進む。判定ブロック８５６では、受信された命令がＲｍレジスタに影響を及ぼすかどうかの判断がなされる。ここでなされる判断は、ＢＸ  Ｒｍ命令によって潜在的に用いられる可能性のある任意のレジスタを、受信された命令が更新することになるか否かである。概して、間接分岐命令によって指定され得るレジスタＲｍに影響を及ぼす任意の命令は、以下でより詳細に説明されるように、チェックされる可能性のある候補命令としてハードウェアによって示される。受信された命令がＲｍレジスタに影響を及ぼさない場合、第２の間接分岐ＡＤＶＮプロセス８５０は、次の受信命令を評価するために判定ブロック８５４に進む。
【００４４】
判定ブロック８５６に戻ると、受信された命令がＲｍレジスタに影響を及ぼす場合、第２の間接分岐ＡＤＶＮプロセス８５０はブロック８５８に進む。ブロック８５８では、ＢＸ命令が必要とすることになるレジスタを、受信した命令が実際に変更するかどうかを調べるために、ＴＴＴ８００が有効エントリに対してチェックされる。判定ブロック８６０では、一致する任意のＲｍがＴＴＴ８００で見つかったかどうかの判断がなされる。少なくとも１つの一致するＲｍがＴＴＴ８００で見つからなかった場合、第２の間接分岐ＡＤＶＮプロセス８５０は、次の受信命令を評価するために判定ブロック８５４に戻る。しかし、少なくとも１つの一致するＲｍがＴＴＴ８００で見つかった場合、第２の間接分岐ＡＤＶＮプロセス８５０はブロック８６２に進む。ブロック８６２では、エントリに関連するアップ／ダウンカウンタがインクリメントされる。このアップ／ダウンカウンタは、特定のＲｍを変更することになるどれだけ多くの命令がフライト中（ｉｎ  ｆｌｉｇｈｔ）であるかを示す。Ｒｍ変更命令が実行する場合、エントリのアップ／ダウンカウンタ値８０８がデクリメントされ、データ有効ビット８０７がセットされ、また実行におけるＲｍデータの結果がＲｍデータフィールド８０９に書き込まれることに留意されたい。レジスタ変更命令がアウトオブオーダーで実行する場合、プロセッサ状態を変更する実行結果が引き渡されると、プログラム順における最後のレジスタ変更命令は、Ｒｍデータフィールドへのプログラム順の古い命令の書き込みをキャンセルし、それによってライトアフターライトハザード（ｗｒｉｔｅ  ａｆｔｅｒ  ｗｒｉｔｅ  ｈａｚａｒｄ）が防止される。非分岐条件命令を有するプロセッサ命令セットアーキテクチャ（ＩＳＡ）の場合には、非分岐条件命令は、非実行状態について評価する条件を有し得る。すなわち、エントリのアップ／ダウンカウンタ値８０８を評価するために、非実行について評価する非分岐条件命令のターゲットレジスタＲｍは、ソースオペランドとして読み込まれる場合がある。読み込まれるＲｍの値は、最新のターゲットレジスタＲｍの値を有する。そうすれば、一致する有効タグを有するＲｍを有する非分岐条件命令が実行されない場合でも、最新の値でＲｍデータフィールド８０９を更新することができ、それによってアップ／ダウンカウンタ値８０８がデクリメントされる。次いで、第２の間接分岐ＡＤＶＮプロセス８５０は、次の受信命令を評価するために判定ブロック８５４に戻る。
【００４５】
判定ブロック８５４に戻ると、受信された命令がＢＸ  Ｒｍ命令である場合、第２の間接分岐ＡＤＶＮプロセス８５０はブロック８６６に進む。ブロック８６６では、ＴＴＴ８００が有効エントリに対してチェックされる。判定ブロック８６８では、一致するタグがＴＴＴ８００で見つかったかどうかの判断がなされる。一致するタグが見つからなかった場合、第２の間接分岐ＡＤＶＮプロセス８５０はブロック８７０に進む。ブロック８７０では、新しいエントリ有効ビット８０４を有効な指示値に設定することと、ＢＸのＲｍをＲｍフィールド８０６に配置することと、データ有効ビット８０７をクリアすることと、新しいエントリに関連するアップ／ダウンカウンタをクリアすることとを含む新しいエントリが、ＴＴＴ８００において確立される。次いで、第２の間接分岐ＡＤＶＮプロセス８５０は、次の受信命令を評価するために判定ブロック８５４に戻る。
【００４６】
判定ブロック８６８に戻ると、一致するタグが見つかると、第２の間接分岐ＡＤＶＮプロセス８５０は判定ブロック８７２に進む。判定ブロック８７２では、エントリのアップ／ダウンカウンタがゼロであるかどうかの判断がなされる。エントリのアップ／ダウンカウンタがゼロでない場合は、依然としてフライト中であるＲｍ変更命令が存在し、第２の間接分岐ＡＤＶＮプロセス８５０はステップ８７４に進む。ステップ８７４では、ＢＸ命令は、エントリのアップ／ダウンカウンタがゼロにデクリメントされるまで、プロセッサパイプラインにおいてストールする。ブロック８７６では、Ｒｍデータへの最後の変更であるＴＴＴエントリのＲｍデータが、間接分岐ＢＸ命令のターゲットとして用いられる。次いで、第２の間接分岐ＡＤＶＮプロセス８５０は、次の受信命令を評価するために判定ブロック８５４に戻る。
【００４７】
判定ブロック８７２に戻ると、エントリのアップ／ダウンカウンタがゼロに等しい場合、第２の間接分岐ＡＤＶＮプロセス８５０は判定ブロック８７８に進む。判定ブロック８７８では、エントリのデータ有効ビットが１に等しいかどうかの判断がなされる。エントリのデータ有効ビットが１に等しい場合、第２の間接分岐ＡＤＶＮプロセス８５０はブロック８７６に進む。ブロック８７６では、ＴＴＴエントリのＲｍデータが、間接分岐ＢＸ命令のターゲットとして用いられる。次いで、第２の間接分岐ＡＤＶＮプロセス８５０は、次の受信命令を評価するために判定ブロック８５４に戻る。
【００４８】
判定ブロック８７８に戻ると、エントリのデータ有効ビットが１に等しくない場合、第２の間接分岐ＡＤＶＮプロセス８５０は、次の受信命令を評価するために判定ブロック８５４に戻る。プロセス８５０のこの点においては、受信されたＢＸ命令への応答に対する複数の代替形態が存在する。第１の代替形態では、ＴＴＴエントリのＲｍデータは、間接分岐ＢＸ命令のターゲットとして用いられてもよいが、これは、ＢＸのＲｍタグが有効エントリに一致し、アップ／ダウンカウンタの値がゼロであるためである。第２の代替形態では、プロセッサパイプライン２０２は、間違ったパスにおけるフェッチを避けるために、とられていないパス（ｎｏｔ  ｔａｋｅｎ  ｐａｔｈ）に従って命令をフェッチするように指示される。Ｒｍデータフィールドにおけるデータが有効でないため、Ｒｍデータが、実行可能なメモリ、または、アクセスを許可されたメモリを示すことすら保証はない。とられていないパスであるシーケンシャルパスにおけるフェッチは、アクセスが許可されたメモリに対して最も可能性が高い。初めの２つの代替形態のどちらかに対して起こり得る誤ったシーケンスは、プロセッサパイプラインにおける後段のステージで見つけられて処理される。第３の代替形態では、プロセッサパイプライン２０２は、電力を節約するためにＢＸ命令の後のフェッチを止め、フェッチ動作を再度確立するためにＢＸの訂正シーケンスを待つように指示される。
【００４９】
図９Ａは、本発明による例示的な第２の間接分岐ターゲットアドレス（ＢＴＡ）事前通知（ＡＤＶＮ）回路９００を示す。ＢＴＡ  ＡＤＶＮ回路９００は、プロセッサパイプライン２０２と、図２のプロセッサ複合体２００における制御回路２０６とに関連づけられており、第２の間接分岐ＡＤＶＮプロセス８５０に従って動作する。第２の間接ＢＴＡ  ＡＤＶＮ回路９００は、回路間に示されている基本制御信号パスと共に、デコード回路９０２、検出回路９０４、事前通知（ＡＤＶＮ）回路９０６、および訂正回路９０８から構成されている。ＡＤＶＮ回路９０６は、決定回路９１０、トラック１回路９１２、および最新ＢＴＡ回路９１４を含む。訂正回路９０８は、トラック２回路９２０および訂正パイプ回路９２２を含む。
【００５０】
デコード回路９０２は、図２の命令フェッチステージ２１４から入ってくる命令をデコードする。検出回路９０４は、デコードされた命令を、間接分岐命令またはＲｍ変更命令に関して監視する。最初に間接分岐命令が検出されると、ＡＤＶＮ回路９０６は、図８ＡのＴＴＴエントリ８０２などの新しいターゲットトラッキングテーブル（ＴＴＴ）のエントリを確立し、図８Ｂのブロック８７０で示されているように、検出された間接分岐命令によって指定される分岐ターゲットアドレス（ＢＴＡ）のレジスタを特定する。有効なＴＴＴエントリと、一致するＲｍ値とに関連するＲｍ変更命令が検出されると、アップ／ダウンカウンタ値８０８がインクリメントされ、Ｒｍ変更命令が実行されると、アップ／ダウンカウンタ値８０８がブロック８６２に従ってデクリメントされる。間接分岐命令を連続して検出すると、ＡＤＶＮ回路９０６は、図８Ｂのブロック８７２〜８７８で説明された動作に従う。訂正回路９０８は、誤ったＢＴＡの事前通知に基づいてパイプラインをフラッシュする。
【００５１】
ＡＤＶＮ回路９０６において、最新ＢＴＡ回路９１４は、例えば、ＢＸ  Ｒ０命令６０７などの間接分岐命令に対してＢＴＡの事前通知を行なうために、図８ＡのＴＴＴエントリ８０２などのＴＴＴエントリを用いる。ＡＤＶＮ  ＢＴＡは、プロセッサパイプライン２０２をリダイレクトして、スペキュレイティブ実行のためにＡＤＶＮ  ＢＴＡで始まる命令をフェッチするために用いることができる。
【００５２】
訂正回路９０８において、トラック２回路９２０は、ＢＸ  Ｒ０命令６０７の実行状態に関してプロセッサパイプライン２０２における実行ステージ２２２を監視する。ＡＤＶＮ  ＢＴＡが正しく提供された場合、スペキュレイティブにフェッチされた命令は、プロセッサパイプラインにおいて継続することを許可される。ＡＤＶＮ  ＢＴＡが正しく提供されなかった場合には、スペキュレイティブにフェッチされた命令は、プロセッサパイプラインからフラッシュされ、そのパイプラインは、正しい命令シーケンスにリダイレクトされて戻される。また、検出回路９０４は、誤ったＡＤＶＮのステータスを知らされ、このステータスに応じて、事前通知のための、この特定の間接分岐命令の識別を停止するようにプログラムされてもよい。さらに、ＡＤＶＮ回路９０６は、誤ったＡＤＶＮのステータスを知らされ、このステータスに応じて、ＴＴＴ８００における特定のエントリに対する事前通知を可能とするためにのみプログラムされてもよい。
【００５３】
図９Ｂは、本発明による例示的な第３の間接分岐ターゲットアドレス（ＢＴＡ）事前通知（ＡＤＶＮ）回路９５０を示す。この第３の間接ＢＴＡ  ＡＤＶＮ回路９５０は、ネクストプログラムカウンタ（ＰＣ）回路９５２、デコード回路９５４、実行回路９５６、およびターゲットトラッキングテーブル（ＴＴＴ）回路９５８を含み、デコード回路９５４に転送される命令をフェッチするために、図２のＬ１命令キャッシュ２０８などの命令キャッシュをアドレス指定する様子を示す。第３の間接ＢＴＡ  ＡＤＶＮ回路９５０は、第２の間接分岐ＡＤＶＮプロセス８５０に従って動作する。例えば、デコード回路９５４は、ＢＸ命令またはＲｍ変更命令などの間接分岐を検出し、ＢＸ命令またはＲｍ変更命令が検出されたことをＴＴＴ回路９５８に通知し、ＢＸ命令のＲｍ値などの適切な情報を提供する。また、ＴＴＴ回路９５８は、アップ／ダウンカウンタ値８０８を提供するために、図８Ｂのブロック８６２で説明されたようにインクリメントまたはデクリメントするアップ／ダウンカウンタを含む。実行回路９５６は、Ｒｍ変更命令の実行時に、Ｒｍデータの値を提供し、またデクリメント指示を行なう。さらに、実行回路９５６は、事前通知の成功または失敗のステータスに応じて分岐訂正アドレスを提供する。ブロック８７６で説明されたように、ＴＴＴ回路９５８におけるエントリが選択され、選択されたエントリにおけるＲｍデータフィールドが、ターゲットアドレスの一部としてネクストＰＣ回路９５２に提供される。
【００５４】
図１０Ａは、本発明に従って間接分岐ターゲットアドレスの事前通知を決定するための、ソフトウェアコードのプロファイリング方法を用いる手法のためのコード例１０００である。このコードシーケンス１００１〜１００７では、１００１の命令Ａ、１００３の命令Ｂ、１００４の命令Ｃ、および１００５の命令Ｄは、前に説明されたものと同じであるため、分岐ターゲットアドレスレジスタに影響を及ぼさない。命令１００２は、Ｍｏｖｅ  Ｒ０，  ＴａｒｇｅｔＡ命令１００２であり、この命令は、ＴａｒｇｅｔＡからレジスタＲ０に値を無条件に移動する。命令１００６は、条件付きのＭｏｖｅ  Ｒ０，  ＴａｒｇｅｔＢ命令１００６であり、この命令は、時間における約１０％の割合で条件付きで実行する。命令の実行を決定するために用いられる条件は、様々な算術命令、ロジック命令、および、命令セットアーキテクチャで通常指定される他の機能命令の実行時にプロセッサによってセットされるコンディションフラグより生じ得る。これらのコンディションフラグは、プログラムステータスレジスタの一部でもよい、制御ロジック２０６に配置されたプログラム可読フラグレジスタまたはコンディションコード（ＣＣ）レジスタに記憶することができる。１００７の間接分岐命令ＢＸ  Ｒ０は、図４Ａおよび図４Ｂにおける前の例で用いられたものと同じである。
【００５５】
コード例１０００では、条件付きのｍｏｖｅ  Ｒ０，  ｔａｒｇｅｔＢ命令１００６は、この命令が実行するか否かに応じて、ＢＴＡレジスタＲ０に影響を及ぼす可能性がある。次のテーブルに示されている、可能性のある２つの状況が考えられる。
【００５６】
【表１】
2014222529.tif 000003
【００５７】
コードシーケンス１０００では、間接ＢＴＡに影響を及ぼす可能性のある最後の命令は、条件付きのｍｏｖｅ  Ｒ０，  ｔａｒｇｅｔＢ命令１００６であり、この命令が実行すると、上記テーブルのライン２となり、ｍｏｖｅ  Ｒ０，  ｔａｒｇｅｔＡ命令１００２の結果は、実行された条件付きのｍｏｖｅ  Ｒ０，  ｔａｒｇｅｔＢ命令１００６の結果によって上書きされることになる。図１０Ｂのコードシーケンス１０５０に示されているように、プロファイリングコンパイラなどのソフトウェアコードのプロファイリングツールは、ｍｏｖｅ  Ｒ０，  ｔａｒｇｅｔＡ命令１０５２の直後に、依存関係を有さずに実行する第１のフォーマットでエンコードされた、図３ＡのＡＤＶＮ命令３００などのＡＤＶＮ  Ｒ０命令１０５３を挿入することができる。この第１のフォーマットのＡＤＶＮ  Ｒ０命令１０５３が実行ステージに入ると、そのときのターゲットアドレスレジスタＲ０の値は、ＢＸ  Ｒ０命令の間接アドレスとして用いられ、それによって、時間における約９０％の割合で正しいことになるスペキュレイティブなフェッチが可能となる。
【００５８】
あるいは、ＡＤＶＮ  Ｒ０命令１０５３は、Ｃｏｎｄ  ｍｏｖｅ  Ｒ０，  ｔａｒｇｅｔ命令１０５７などの、ＡＤＶＮ  Ｒ０命令に続く条件付きのターゲットアドレス変更命令に応じて、自らの実行を一時停止するようにエンコードされてもよい。一時停止の、エンコードされたＡＤＶＮ  Ｒ０命令１０５３が実行ステージに入ると、そのときのターゲットアドレスレジスタＲ０の値は決定されず、間接分岐命令が見つかったときのスペキュレイティブなフェッチは、条件付きのターゲットアドレス変更命令が実行されるまで一時停止される。条件付きのターゲットアドレス変更命令がターゲットアドレスを変更する場合、更新された間接分岐ターゲットアドレスがスペキュレイティブなフェッチに用いられる。ターゲットアドレス変更命令がターゲットアドレスを変更しない場合には、Ｒ０に記憶された最後の間接分岐ターゲットアドレス値がスペキュレイティブなフェッチに用いられる。ＡＤＶＮ命令におけるこのような動作をエンコードするために、ＡＤＶＮ命令フォーマット３００におけるコンディションコードフィールド３０４、または他のビットフィールドが使用され得ることに留意されたい。条件付きのｍｏｖｅ  Ｒ０，  ｔａｒｇｅｔ命令１０５７の実行割合が、９０％の非実行と、１０％の実行とである場合、依存関係を有さずに実行するＡＤＶＮ  Ｒ０命令１０５３をエンコードすることは有利であり得るが、これは、この状況の場合には、ＡＤＶＮ  Ｒ０命令１０５３を、プログラム命令ストリームにおいて間接分岐命令１０５８の前に十分に早く配置することができ、それによって性能が有利に向上するためである。あるいは、実行割合が、５０％と５０％など、異なるように予想される場合には、ＡＤＶＮ  Ｒ０命令に続く条件付きのターゲットアドレス変更命令からの結果の決定に応じて、ＡＤＶＮ  Ｒ０命令の実行を一時停止するようにＡＤＶＮ  Ｒ０命令をエンコードすることが、より有利であり得る。
【００５９】
あるいは、第２の間接ＢＴＡ  ＡＤＶＮ回路９００は、レジスタＲ０に影響を及ぼす最後の命令に自動的に応答する。例えば、９０％の時間、ｍｏｖｅ  Ｒ０，  ｔａｒｇｅｔＡ命令１００２の結果が用いられ、１０％の時間、条件付きのｍｏｖｅ  Ｒ０，  ｔａｒｇｅｔ命令１００６の結果が用いられる。この９０％と１０％の実行割合は例示であり、他のプロセッサの動作によって影響され得ることに留意されたい。誤った事前通知の場合には、図９Ａの訂正回路９０８は、誤った事前通知に応答するように動作することができる。
【００６０】
本発明が、プロセッサシステムにおいて使用するための例示的な実施形態の場合において開示されたが、上記の説明および添付の特許請求の範囲と矛盾することのない非常に様々な実装形態が当業者によって利用され得ることが理解されよう。例えば、間接分岐ターゲットアドレスの事前通知を行なうための、第２の間接ＢＴＡ  ＡＤＶＮ回路９００などの、ＡＤＶＮ命令手法および自動的間接ターゲット推測方法の両方は、一緒に用いられてもよい。ＡＤＶＮ命令は、プログラマー、または、プロファイリングコンパイラなどのソフトウェアツールによってコードシーケンスに挿入されてもよく、ソフトウェアツールの場合には、このソフトウェア手法によって、間接分岐ターゲットアドレス通知における高い信頼度が得られる。自動的間接ターゲット推測方法の回路は、ＡＤＶＮ命令を有するコードシーケンスによって、ＡＤＶＮ命令の検出時に優先される。
【符号の説明】
【００６１】
２００  プロセッサ複合体
２０２  プロセッサパイプライン
２０４  汎用レジスタファイル
２０６  制御回路
２０８  Ｌ１命令キャッシュ
２１０  Ｌ１データキャッシュ
２１２  メモリ階層
２１４  命令フェッチステージ
２１５  プログラムカウンタ
２１６  デコードおよび事前通知（ＡＤＶＮ）ステージ
２１８  ディスパッチステージ
２１９  分岐ターゲットアドレスレジスタ
２２０  リードレジスタステージ
２２２  実行ステージ
２２４  ライトバックステージ
２２６  フォワーディングネットワーク
３００  ３２ビットのＡＤＶＮ命令
３０７  分岐ターゲットアドレスレジスタフィールド
３５０  １６ビットのＡＤＶＮ命令
３５７  分岐ターゲットアドレスレジスタフィールド
５００  第１の間接分岐ターゲットアドレス（ＢＴＡ）事前通知（ＡＤＶＮ）回路
５０４  ＡＤＶＮ実行回路
５０８  分岐ターゲットアドレスレジスタ（ＢＴＡＲ）回路
５１２  ＢＸデコード回路
５１６  選択回路
５２０  ネクストプログラムカウンタ回路
８００  ターゲットトラッキング（ＴＴＴ）テーブル
８０２  ターゲットトラッキング（ＴＴＴ）エントリ
８０４  エントリ有効ビット
８０５  タグフィールド
８０６  レジスタアドレス
８０７  データ有効ビット
８０８  アップ／ダウンカウンタ値
８０９  Ｒｍデータフィールド
９００  第２の間接分岐ターゲットアドレス（ＢＴＡ）事前通知（ＡＤＶＮ）回路
９０２  デコード回路
９０４  検出回路
９０６  事前通知（ＡＤＶＮ）回路
９０８  訂正回路
９１０  決定回路
９１２  トラック１回路
９１４  最新ＢＴＡ回路
９２０  トラック２回路
９２２  訂正パイプ回路
９５０  第３の間接分岐ターゲットアドレス（ＢＴＡ）事前通知（ＡＤＶＮ）回路
９５２  ネクストプログラムカウンタ回路
９５４  デコード回路
９５６  実行回路
９５８  トラッキングテーブル（ＴＴＴ）回路
【図１】
2014222529.tif 000004
【図２】
2014222529.tif 000005
【図３Ａ】
2014222529.tif 000006
【図３Ｂ】
2014222529.tif 000007
【図４Ａ】
2014222529.tif 000008
【図４Ｂ】
2014222529.tif 000009
【図５】
2014222529.tif 000010
【図６】
2014222529.tif 000011
【図７】
2014222529.tif 000012
【図８Ａ】
2014222529.tif 000013
【図８Ｂ】
2014222529.tif 000014
【図９Ａ】
2014222529.tif 000015
【図９Ｂ】
2014222529.tif 000016
【図１０Ａ】
2014222529.tif 000017
【図１０Ｂ】
2014222529.tif 000018