(57)【特許請求の範囲】
【請求項１】
コンピュータ命令の流れの中の複数の分岐命令を予測する分岐命令予測機構であって、
メモリ中の命令アドレスを識別し、１組の分岐目標バッファ・セット・アドレス・ビット、および分岐目標バッファ・タグ・アドレス・ビットのセットを有する命令ポインタと、
複数の分岐セット・エントリを備える分岐目標バッファ・キャッシュであって、前記分岐セット・エントリはそれぞれ分岐命令エントリのセットを備え、各分岐命令エントリは、メモリ・ブロックでの位置を含む関連する分岐命令に関する情報を記憶し、特定の分岐セット・エントリ内のすべての分岐命令エントリは、同じ分岐目標バッファ・セット・アドレス・ビットを有する分岐命令を記憶する分岐目標バッファ・キャッシュと、
前記命令ポインタを受け、前記１組の前記命令ポインタの分岐目標バッファ・セット・アドレス・ビットで前記分岐目標バッファ・キャッシュを索引して、分岐セット・エントリを選択し、前記命令ポインタの前記分岐目標バッファ・タグ・アドレス・ビットを使用して、前記分岐セット・エントリ内で少なくとも１つの分岐命令エントリを選択する分岐目標バッファ回路、とを備える分岐命令予測機構。
【請求項２】
分岐目標バッファ・キャッシュ更新方法であって、
分岐命令を実行して、前記分岐命令に対する最終的分岐結論、および最終的分岐目標アドレスを決定するステップと、
前記分岐命令の最後のバイトのアドレスを使用して前記分岐目標バッファを索引することによって、前記分岐目標バッファ・キャッシュ内で分岐セット・エントリを見つけるステップと、
前記分岐セット・エントリ内で前記分岐命令に関連付けられた分岐命令エントリを見つけるステップと、
前記最終的分岐目標アドレスを使用して、前記分岐命令に関連付けられた前記分岐命令エントリ中の分岐目標アドレスを更新するステップと、
前記分岐命令が条件分岐命令であるとき、前記分岐目標バッファ内の前記分岐セット・エントリに関連付けられた分岐パターン・テーブルを更新するステップと、
前記分岐命令が条件分岐命令であるとき、前記分岐命令エントリに関連付けられた分岐歴を更新するステップと、
前記分岐命令の最後のバイトの前記アドレスからの最も有効なビットのサブセットを、前記分岐エントリ中のタグ・フィールドと突き合わせるステップと、
からなる分岐目標バッファ・キャッシュの更新方法。
【請求項３】
分岐目標バッファ・キャッシュ内に分岐命令エントリを作成して、発見された分岐命令に関する情報を記憶する方法であって、前記分岐目標バッファ・キャッシュは複数の分岐セット・エントリに編成され、各分岐セット・エントリは、分岐命令エントリのセットを備え、前記方法は
前記発見された分岐命令を実行して、前記発見された分岐命令に対する最終的分岐結論および最終的分岐目標アドレスを決定するステップと、
前記最終的分岐結論および前記最終的分岐目標アドレスを、予測される分岐結論および予測される分岐目標アドレスと比較することによって、前記発見された分岐命令が誤って予測されたかどうかを判定するステップと、
前記発見された分岐命令が誤って予測された場合、または前記発見された分岐命令の前記最終的分岐結論が「採択」された場合、前記分岐目標バッファ・キャッシュに分岐命令エントリを割り当てるステップと、からなり、
前記分岐命令エントリを割り当てるステップが、
分岐セット・エントリに関連付けられたフィールドで最も以前に置き換えられたフィールドから、最も以前に置き換えられた値を読み出すサブステップと、
前記第１の分岐エントリが一致するタグ・アドレス・フィールドを有さない場合、前記最も以前に置き換えられた値によって指定される分岐命令エントリを置き換えるサブステップと、
前記分岐エントリが一致するタグ・アドレス・フィールドを有する場合、前記最も以前に置き換えられた値を実施し、すべての分岐命令エントリを調べるまで前記最も以前に置き換えられた値を実施し、前記ステップを繰り返すサブステップと、
すべての分岐命令エントリが一致するタグ・アドレス・フィールドを有する場合、前記最も以前に置き換えられたフィールドから本来読み出された、前記最も以前に置き換えられた値が指す分岐命令エントリを置き換えるサブステップとからなる、分岐目標バッファ・キャッシュ内に分岐命令エントリを作成して、発見された分岐命令に関する情報を記憶する方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はマイクロプロセッサ・アーキテクチャの分野に関し、特に命令の流れの中の分岐命令を予測する分岐目標バッファ回路に関する。
【０００２】
【従来の技術】
初期のマイクロプロセッサは一般に命令を一時に１つ処理していた。各命令は次の４つの連続した段階を用いて処理されていた。すなわち、命令のフェッチ、命令の解読、実行及び結果の書き込みである。このようなマイクロプロセッサでは、別々の専用の論理ブロックがそれぞれ異なった処理段階を実行していた。各論理ブロックは動作開始前に、全ての前段の論理ブロックが動作を終了するまで待っていた。
【０００３】
効率を向上させるため、設計者はマイクロプロセッサがいくつかの命令を同時に実行できるように、フェッチ、解読、実行、書き込みの論理段階を重複して行えるようにした。
動作中、フェッチ、解読、実行、書き込みの論理段階は異なった命令を同時に処理する。各クロック・サイクルで各処理段階の結果は次の処理段階へ送られる。フェッチ、解読、実行、書き込み段階を重複させる技術を使用したマイクロプロセッサは、「パイプライン化した」マイクロプロセッサとして知られている。ある種のマイクロプロセッサは更に各処理段階を小段階に分割して更に効率の向上を計っている。このようなプロセッサは「深くパイプライン化した」マイクロプロセッサと云われる。
【０００４】
パイプライン化したマイクロプロセッサが効率よく動作するために、パイプラインの先頭にある命令フェッチ・ユニットがマイクロプロセッサ命令の流れをパイプラインに連続的に供給しなければならない。しかし、命令の流れの中にある条件命令のために、命令フェッチ・ユニットが次の命令を分岐条件が完全に分析されるまでフェッチすることができない。パイプライン化されたマイクロプロセッサにおいて、分岐条件はその分岐命令がマイクロプロセッサ・パイプラインの終わりに近い命令実行段階に到達するまで完全には分析されない。従って、命令フェッチ・ユニットは、分岐条件が未分析のため、次にどの命令をフェッチしたら良いかが分からず立ち往生してしまう。
【０００５】
この問題を多少とも解決するために、多くのパイプライン化したマイクロプロセッサは、命令の流れにおいて分岐命令の存在と結論を予測する分岐予測機構を使用している。命令フェッチ・ユニットは、次の命令をフェッチするために分岐予測を使用する。例えば、イェー（Ｙｅｈ）及びパット（Ｐａｔｔ）は高精度２段階適用の分岐予測を導入した。（Ｔｓｅ  Ｙｕ  Ｙｅｈ  及びＹａｌｅ  Ｎ．  Ｐａｔｔ  による「Ｔｗｏ  ｌｅｖｅｌ  Ａｄａｐｔｉｖｅ  Ｂｒａｎｃｈ  Ｐｒｅｄｉｃｔｉｏｎ」第２４回ＡＣＭ／ＩＥＥＥマイクロ・アーキテクチャに関する国際シンポジュウム及びワークショップ（１９９１年１１月、５１頁ー６１頁）参照）。イェーとパットの分岐予測機構は、収集した２段階の分岐歴に基づいて分岐予測を行う。
【０００６】
分岐予測機構が分岐命令の結論を予測し、マイクロプロセッサがその予測された経路に沿って次の命令を実行するとき、そのマイクロプロセッサは予測された命令経路に沿って「推論的に実行した」と云われる。推論的な実行を行っている間、マイクロプロセッサは、もし分岐予測が正しく行われれば、有効な処理を実行する。しかし、もし分岐予測機構が間違って分岐命令を予測すると、マイクロプロセッサは推論実行の命令をまちがった経路で実行することになり、従って何も達成しないことになる。マイクロプロセッサが最終的に誤って予測された分岐を検出したとき、そのマイクロプロセッサは、推論で実行した全ての命令を無視し、正しいアドレスで実行を再スターとしなければならない。分岐命令がまちがって予測された場合、マイクロプロセッサは何も達成しないことになるので、正確に分岐命令の予測をすることが望ましい。このことは特に、誤った分岐予測がなされる度毎に長いパイプライン命令が無視される深くパイプライン化したマイクロプロセッサに関してうなずけるのである。
【０００７】
【発明が解決しようとする課題】
従って、本発明の目的は、命令の流れにおいて分岐命令の存在を正確に予測する分岐予測機構を提供することである。
本発明の別の目的は、命令の流れの中で予測された全ての分岐命令の分岐結論を正確に予測することである。
更に本発明の別の目的は、「採択」と予測された全ての分岐命令に関する分岐目標アドレスを正確に予測することである。
【０００８】
【課題を解決するための手段】
これらの目的及びその他の目的は本発明の分岐目標バッファ回路によって達成される。本発明の分岐目標バッファ回路は、分岐目標バッファ・キャッシュを備えている。分岐目標バッファ・キャッシュは、前に実行された分岐命令に関する情報を記憶する。分岐目標バッファ・キャッシュに格納された分岐情報は各分岐命令の最後のバイトによってアドレスされる。命令フェッチ・ユニットが命令のブロックをフェッチするとき、命令フェッチ・ユニットは分岐目標バッファ回路に命令ポインタを送る。この命令ポインタに基づいて、分岐目標バッファ回路は、分岐目標バッファ・キャッシュの中を見て、フェッチされるブロックの中に分岐命令があるかどうか調べる。分岐目標バッファ回路が分岐目標バッファ・キャッシュの中にやがて現れる分岐命令を見つけると、分岐目標バッファ回路は命令フェッチを担当する命令フェッチ・ユニットに対して知らせる。
【０００９】
【実施例】
コンピュータ・プロセッサにおける分岐目標バッファ回路を実現する方法と装置が開示される。以下の記述において、説明の目的で本発明の充分な理解のために特定の術語が使われている。しかし、当業者には、これらの具体的詳細は本発明を実施するために必要ないことは明白である。更に、本発明を不必要に不明瞭にしないために、良く知られた回路や装置はブロック・ダイアグラムの形で示されている。
【００１０】
パイプライン化したスーパースカラ・マイクロプロセッサ
深くパイプライン化したプロセッサにおいて、命令フェッチ、命令解読、命令実行等の主段階は、各処理段階がパイプライン化されるように異なったいくつかの小段階に分割される。これは長い命令パイプラインにおいて生ずる。例えば、図１は１つの特定の深くパイプライン化したプロセッサを定義する１組のパイプライン段階を示す。図１の命令パイプラインにおいて、命令処理は、１１のパイプライン段階に分割されている。
【００１１】
図１を参照すると、最初の２段階のパイプライン段階は、命令をフェッチするために使われている。パイプ段階３は、命令長解読（ＩＬＤ）を実行する。個々のマイクロプロセッサ命令は、パイプ段階４及び５で解読される。次の３段階のパイプライン段階（レジスタ・リネーム、スケジューリング、分配）は実行のための命令を準備する。最後に、マイクロプロセッサは命令をパイプライン段階９で実行する。最後の２段階のパイプライン段階は、実行された命令を撤収する。
【００１２】
マイクロプロセッサを効率良く動作させるために、図１の２段階の命令フェッチ・パイプライン段階は、マイクロプロセッサ命令の流れを連続的にフェッチしなければならない。各フェッチされた命令は、その命令がパイプライン段階９（すなわち実行段階）に到達するまで完全には実行されない。命令の流れの中にある分岐命令は、しばしば、分岐目標アドレスと呼ばれる連続しないアドレスでマイクロプロセッサに命令を実行するように仕向ける。パイプライン化したマイクロプロセッサが分岐命令に出会うと、その分岐命令はまだ解読されないか或いは実行されてないので、命令フェッチ段階は直ちにその分岐に対して反応することができない。従って、分岐命令は、マイクロプロセッサが推論的に実行した命令を後で捨て去り、訂正されたアドレスで再スタートしなければならないような、まちがった経路での推論的実行をマイクロプロセッサにさせる可能性がある。
【００１３】
このような状況を防止するため、多くのパイプライン化したマイクロプロセッサは、命令の流れの中の分岐命令を予測する分岐予測機構を採用している。更に、このような分岐予測機構は、分岐命令の結論と分岐目標アドレスを予測する。図１に示すパイプラインのような深いパイプラインを有するマイクロプロセッサにおいて分岐命令を予測するため、本発明は、命令の流れの中で分岐命令の存在を予測する分岐目標バッファ回路を備えている。本発明の分岐目標バッファ回路は、深くパイプライン化したスーパースカラ・マイクロプロセッサの状況の中で開示されている。しかし、開示された分岐目標バッファ回路の個々の機構が異なったアーキテクチャの別のマイクロプロセッサにおいても実現できることは、当業者には明らかであろう。
【００１４】
図２は、図１に示す深いパイプラインを実現する深くパイプライン化したスーパースカラ・マイクロプロセッサの主な論理回路をブロック・ダイアグラムの形で表している。図２に示すマイクロプロセッサの概略を説明し、続いて命令の流れの中で分岐命令の存在を予測する分岐目標バッファ回路４０について詳しく説明する。
【００１５】
図２のブロック・ダイアグラムの一番上にメモリ及びバス論理３５がある。メモリ及びバス論理３５は、情報をマイクロプロセッサへ入力し、マイクロプロセッサから情報を出力することを担当する。メモリ及びバス論理３５は、通常先ず高速キャッシュ・メモリへ入力或いは高速キャッシュ・メモリから格納しようとする。もしキャッシュ・メモリが使えなければ（恐らくキャッシュ・ミスによる）、メモリ及びバス論理３５は代わって外部バスを通して主メモリをアクセスする。
【００１６】
メモリ及びバス論理３５には命令フェッチ・ユニット３０が結合されている。この命令フェッチ・ユニット３０は、実行のため連続して新しいマイクロプロセッサ命令（マイクロ命令とも呼ばれる）とオペランドをフェッチすることを担当する。命令フェッチ・ユニット３０は、命令ポインタ（ＩＰ）を使って現在のフェッチ・アドレスを維持する。フェッチされたマイクロプロセッサ命令は命令パイプラインの先頭に供給される。
【００１７】
命令の流れの中の単純な無条件分岐命令は、命令フェッチ・ユニット３０が連続経路に沿って単純に命令をフェッチすることを防止する。更に、命令の流れの中の条件分岐命令は、分岐条件が分析され、フェッチ経路が決定されなければならないので、命令フェッチ・ユニット３０が所定の経路に沿って単純に命令をフェッチすることを防止する。正しい命令のフェッチを支援するため、命令フェッチ・ユニット３０は分岐目標バッファ回路４０に問い合わせる。分岐目標バッファ回路４０は、命令の流れの中の分岐命令の存在を予測し、予測された分岐命令の結論を予測する。分岐目標バッファ回路４０は、分岐予測情報を、命令フェッチ・ユニット３０が適切な命令をフェッチできるように、命令フェッチ・ユニット３０に返送する。
【００１８】
命令フェッチ・ユニット３０が各マイクロプロセッサ命令をフェッチした後、命令フェッチ・ユニット３０は、各マイクロプロセッサ命令を命令解読器６０に渡す。もし、分岐目標バッファ回路４０が命令に関する分岐予測を行うと、命令フェッチ・ユニット３０はまた、その命令に関する分岐目標バッファ回路の分岐予測を命令解読器６０に渡す。
【００１９】
命令解読器６０は、どのタイプのマイクロプロセッサ命令を受け取ったかを判定し、マイクロプロセッサ命令を関連するオペランドと共に１つ以上のマイクロ演算（以後マイクロ・オペという）に分解する。マイクロプロセッサ命令に対応する１つ以上のマイクロ・オペは、対応するマイクロプロセッサ命令の機能を実行する。
【００２０】
もし命令解読器６０が、受け取ったマイクロプロセッサ命令が分岐命令であると判定すると、命令解読器６０は、その分岐命令を記述する情報を特別の処理を行うために分岐アドレス計算器５０へ送る。もし分岐目標バッファ回路４０が、その分岐命令に対して分岐予測を行っていたとすれば、分岐アドレス計算器５０は、できれば命令解読器６０から受け取った分岐情報を使ってその分岐予測を検証する。もし分岐目標バッファ回路４０が、その分岐命令に対して分岐予測を行っていなければ、分岐アドレス計算器５０は、命令解読器６０から受け取った分岐情報を使ってその分岐命令に対する分岐予測を行う。分岐アドレス計算器５０が分岐命令の処理を完了した後、分岐アドレス計算器５０は処理された分岐情報を命令解読器６０に返す。
【００２１】
命令解読器６０がマイクロプロセッサ命令を１組のマイクロ・オペに分解した後、命令解読器６０はそのマイクロ・オペと関連オペランドをアロケータ７０へ送る。アロケータ７０は、各マイクロ・オペを実行するのに必要なプロセッサ資源を割り当てる。
【００２２】
本実施例において、マイクロプロセッサは元のプログラムの順序からはずれてマイクロ・オペを実行できるスーパースカラ・プロセッサである。しかし、適切にそのコンピュータ・プログラムを実行するために、実行されたマイクロ・オペは、最終的には元のプログラムの順序に戻されなければならない。元のプログラム順序を維持するため、マイクロプロセッサはマイクロ・オペの結果データを元のプログラム順序で格納するリオーダ・バッファ８３を使用する。
【００２３】
図３はリオーダ・バッファ８３を示す。図３のリオーダ・バッファ８３は、ｎ個の記述欄を有する循環バッファからなっており、各記述欄は、実行されたマイクロ・オペの結果を格納するために使われる。リオーダ・バッファ８３の各記述欄は、マイクロ・オペの結果データを物理的に格納する行き先を提供するので、リオーダ・バッファの各記述欄は物理的行き先（ｐＤｓｔ）と呼ばれる。リオーダ・バッファ８３内のｐＤｓｔは、０からｎ−１までの番号が付けられている。図３を参照すると、リオーダ・バッファ８３のｐＤｓｔは、マイクロ・オペの結果が有効かどうかを示す有効ビット、マイクロ・オペの結果、マイクロ・オペによって影響された１組のフラグ、フラグに対するマスク、結果が何を意味するかを示すコード及び誤りデータを含む。
【００２４】
各マイクロ・オペに関して、マイクロ・オペの結果を格納するため、アロケータ７０は、リオーダ・バッファ８３に次に使用可能なｐＤｓｔを割り当てる。マイクロ・オペを受け取ったのと同じ順序でリオーダ・バッファ８３内に連続してｐＤｓｔを割り当てることによって、マイクロ・オペの結果の元のプログラム順序が維持される。
【００２５】
アロケータ７０がｐＤｓｔを分岐命令に関する分岐マイクロ・オペに対してリオーダ・バッファ８３内に割り当てるとき、同様に分岐目標バッファ回路４０にある分岐ＩＰテーブル（ＢＩＴ）４３と呼ばれる照合入力欄がバッファ内に割り当てられる。命令解読器６０は、それから分岐目標バッファ回路４０に対して、分岐命令の直ぐ後に続く命令のアドレスとプロセッサの状態値を送る。分岐目標バッファ回路４０は、分岐命令の直ぐ後に続く命令のアドレスとプロセッサの状態値を分岐ＩＰテーブル（ＢＩＴ）４３に書き込む。分岐ＩＰテーブル（ＢＩＴ）４３に格納されたこの情報は、分岐実行ユニットが分岐マイクロ・オペを実行した後で使われる。
【００２６】
アロケータ７０はまた、各マイクロ・オペに関するマイクロ・オペ命令とオペランド・データを格納する予約ステーション（ＲＳ）８１に１つの記述欄を割り当てる。各予約ステーション８１の記述欄は、その予約ステーション８１の記述欄が有効かどうかを示す有効ビット、マイクロ・オペ命令コード、２つのソース・データ・フィールド、ソース・データ・フィールドに対する２つの有効ビット、もしソース・データが有効でないときそのソース・データがどこから来たかを示す２つの物理的ソース・フィールド、及びマイクロ・オペの結果の物理的行き先を格納する。アロケータ７０が予約ステーションの記述欄とリオーダ・バッファ８３のｐＤｓｔを割り当てた後、各マイクロ・オペは予約ステーション８１の記述欄でマイクロ・オペが実行されるのを待つ。
【００２７】
予約ステーション８１の記述欄にある各マイクロ・オペは、マイクロ・オペを実行するのに必要な全てのソース・データが得られ、マイクロ・オペを実行する実行ユニットが用意できるまで予約ステーション８１の入力欄に止まっている。マイクロ・オペに関して必要な全てのソース・データが用意でき、実行ユニットが使用可能になったとき、予約ステーション８１は、マイクロ・オペを実行論理回路９０の中の実行ユニットへ分配する。本実施例において、実行論理回路９０内に４つの実行ユニット（ＥＵ１  ９１、ＥＵ２  ９２，ＥＵ３  ９３及びＥＵ４  ９４）がある。実行ユニットがマイクロ・オペを実行した後、その実行ユニットは、結果データ、アーキテクチャ上のフラグ、及び誤り情報をアロケータ７０がそのマイクロ・オペに対して割り当てたリオーダ・バッファ８３のｐＤｓｔに書き込む。
【００２８】
本実施例において、実行ユニット９２は分岐実行ユニットとして指定されている。分岐実行ユニット９２は、各分岐マイクロ・オペに関して最終的分岐決定の結論と最終的分岐目標アドレスを決定する。分岐実行ユニット９２は、この最終分岐結論及び分岐目標アドレスとを予測された分岐結論及び目標アドレスと比較する。もし分岐実行ユニット９２が分岐予測の誤りを検出すると、分岐実行ユニット９２は、分岐予測誤りを訂正する１組の行動を開始する。従って、分岐実行ユニット９２は分岐分析機構の第３の段階を有する。
【００２９】
最後に、撤収回路８５は、リオーダ・バッファ８３のｐＤｓｔに格納されている結果を各実行されたマイクロ・オペから撤収する。撤収回路８５は、リオーダ・バッファ８３のｐＤｓｔを順番に調べて、アロケータ７０がｐＤｓｔを割り当てたときと同じ順序でリオーダ・バッファ８３のｐＤｓｔを撤収させる。撤収回路８５は、現在約束されたアーキテクチャ上の状態を格納する実レジスタ・ファイル（ＲＲＦ）８４へマイクロ・オペの結果を転送することによってｐＤｓｔを撤収させる。アロケータ７０が、リオーダ・バッファ８３のｐＤｓｔを元のプログラム順に割り当て、撤収回路８５がリオーダ・バッファ８３のｐＤｓｔのマイクロ・オペの結果を同じ順序で撤収するので、仮にマイクロ・オペが元のプログラム順序からはずれて実行されたとしても元のプログラム順序は維持される。
【００３０】
図３を参照すると、マイクロ・オペを撤収させるために、撤収回路はリオーダ・バッファのｐＤｓｔ記述欄の有効ビット２０１をテストし、そのｐＤｓｔが実行されたマイクロ・オペの有効な結果を持っているかどうか調べる。もしそのｐＤｓｔの有効ビット２０１がセットされていれば、撤収回路はｐＤｓｔの誤りフィールド２０６をチェックして誤りを処理しなければならないかどうか調べる。もしリオーダ・バッファのｐＤｓｔ記述欄が有効なマイクロ・オペ実行結果を持っており、誤り問題がなければ実行されたマイクロ・オペの結果は、実レジスタ・ファイル（ＲＲＦ）８４の永久アーキテクチャ状態に入れられる。
【００３１】
撤収回路８５が分岐マイクロ・オペを撤収しようとするとき、撤収回路８５はｐＤｓｔ記述欄の誤りフィールド２０６をテストし、分岐マイクロ・オペが誤って予測されたかどうか調べる。もし撤収回路が、マイクロ・オペが誤って予測されたことを検出すると、撤収回路８５は、リオーダ・バッファ８３にある残りの命令を捨て去る。これは、これらの命令は誤った分岐予測が行われた後フェッチされたためである。
【００３２】
分岐目標バッファ回路の概観
前述のマイクロ・プロセッサ概観の節で述べたように、命令フェッチ・ユニット３０は、命令をマイクロ・プロセッサへフェッチしてくることを担当する。図２のマイクロ・プロセッサの命令フェッチ・ユニット３０は、メモリ・アドレス空間を命令フェッチ・ユニット３０が命令とオペランドを１６バイトのブロックでフェッチする整列した１６バイト・ブロックの集合とみなす。図４は、アドレス空間が整列した１６バイト・ブロックに分割されたメモリ・マップを示す。命令フェッチ・ユニット３０は、命令ポインタを使って現在のフェッチ・アドレスを維持する。コード中に分岐命令がない場合、命令フェッチ・ユニット３０は、隣接した１６バイト・ブロックを順次フェッチすることによって、命令及ぶオペランドをフェッチする。
【００３３】
命令の流れの中で分岐命令の存在を予測するために、図２のマイクロプロセッサは分岐目標バッファ回路４０を採用している。分岐目標バッファ回路４０は、マイクロプロセッサが前に実行した分岐命令に関する情報を有する分岐目標バッファ・キャッシュ４１を備えている。分岐目標バッファ回路４０は、その分岐目標バッファ・キャッシュ４１の情報を使って分岐命令を認識し、分岐命令の結論を予測する。
【００３４】
分岐目標バッファ回路４０はまた、現在マイクロプロセッサ内にある分岐命令に関する情報を有する分岐ＩＰテーブル（ＢＩＴ）４３を有する。分岐ＩＰテーブル４３の情報は、誤って予測された分岐命令を訂正し、分岐命令が実行された後分岐目標バッファ・キャッシュ４１を維持するために使われる。
【００３５】
図５は、どのように分岐目標バッファ回路４０が、図２のマイクロプロセッサの他の主な論理回路と相互に作用するかを示すブロック・ダイアグラムである。命令フェッチ・ユニット３０は、命令ポインタを分岐目標バッファ回路４０に送ることによって分岐目標バッファ回路４０から到達すべき分岐命令に関する情報を要求する。分岐目標バッファ回路４０へ送られる命令ポインタは、命令フェッチ・ユニット３０によって現在フェッチされているメモリ・ブロックを指す。
【００３６】
分岐目標バッファ回路４０は、分岐目標バッファ・キャッシュ４１をサーチし、命令フェッチ・ユニット３０によって現在フェッチされているメモリ・ブロックにある分岐命令に関する情報を探す。分岐目標バッファ回路４０は、分岐目標バッファ・キャッシュ４１内で見つかった命令フェッチ・ユニット３０によって現在フェッチされているメモリ・ブロック内にある分岐命令に関する分岐予測を行う。分岐目標バッファ回路４０は、分岐予測情報を命令フェッチ・ユニット３０へ送り、命令フェッチ・ユニット３０に対して、現在命令フェッチ・ユニット３０によってフェッチされているメモリ・ブロック内にある分岐命令について知らせる。
分岐目標バッファ・キャッシュ４１及び分岐ＩＰテーブル４３を維持するために、分岐目標バッファ回路４０は、マイクロプロセッサ内の他のいくつかの論理回路から情報を受け取る。
【００３７】
図５を参照すると、命令解読器６０は分岐情報を分岐目標バッファ回路４０へ送る。命令解読器６０から送られる分岐情報は、その分岐命令の直ぐ後に続く命令のアドレスを含む。分岐目標バッファ回路４０は、後で使うため、分岐命令の直ぐ後に続く命令のアドレスを分岐ＩＰテーブル４３に格納する。
【００３８】
分岐アドレス計算器５０は、分岐目標バッファ回路４０によって行われた分岐予測を検証する。もし分岐アドレス計算器５０が、分岐目標バッファ回路４０が存在しない分岐について予測したと判定すれば、分岐アドレス計算器５０は分岐目標バッファ回路４０に対して、存在しない分岐命令を含む分岐目標バッファ・キャッシュ４１の記述欄を取り除くように指示する。
【００３９】
アロケータ７０は、リオーダ・バッファ８３を各マイクロ・オペに対して割り当てるのを担当する。アロケータ７０が、分岐マイクロ・オペに関してリオーダ・バッファ８３のｐＤｓｔ記述欄を割り当てるとき、アロケータ７０は、ｐＤｓｔの記述欄番号を分岐目標バッファ回路４０に提供する。分岐目標バッファ回路４０は、ｐＤｓｔ記述欄番号を、分岐ＩＰテーブル４３の対応する記述欄を割り当てるために使用する。分岐ＩＰテーブル４３の対応する記述欄は、分岐マイクロ・オペがマイクロプロセッサ内に存在する間、その分岐マイクロ・オペについての情報を記憶する。
【００４０】
予約ステーション８１は、実行を待っているマイクロ・オペを記憶し、用意ができたマイクロ・オペをマイクロプロセッサ内の実行ユニットへ分配する。予約ステーション８１が分岐マイクロ・オペを実行ユニット９２へ分配するとき、予約ステーション８１は、分岐目標バッファ回路に対して分岐マイクロ・オペに関するｐＤｓｔ記述欄について知らせる。分岐目標バッファ回路４０は、分岐ＩＰテーブル４３の分岐命令に関する対応する記述欄を読み出すことによって応答する。分岐ＩＰテーブル４３の記述欄から読み出された情報は、分岐マイクロ・オペが実行した後で使われる。
【００４１】
分岐実行ユニット９２は、マイクロプロセッサに関する分岐マイクロ・オペを実行する。分岐実行ユニット９２が分岐マイクロ・オペを実行するとき、分岐実行ユニット９２は、分岐分析情報を分岐目標バッファ回路４０に提供する。分岐目標バッファ回路４０は、分岐分析情報を使って、分岐目標バッファ・キャッシュ４１の既存の記述欄を更新するか或いは、分岐目標バッファ・キャッシュ４１に新しい記述欄を割り当てる。
【００４２】
分岐目標バッファ・キャッシュ
分岐目標バッファ回路４０は、分岐目標バッファ・キャッシュ４１を維持し、命令の流れの中の分岐命令の存在とこれら分岐命令の結論を予測する。分岐目標バッファ・キャッシュ４１は、マイクロプロセッサが前に実行した分岐命令に関する情報を有する。図６は、分岐目標バッファ・キャッシュ４１の構成を示す。
【００４３】
分岐目標バッファ・キャッシュ４１は、メイン・メモリに配置された分岐命令についての情報を記憶するセット・アソシアティブ・キャッシュである。本実施例において、分岐目標バッファ・キャッシュ４１は、分岐命令についての情報を分岐情報の１２８個の別々の「セット」で記憶する。分岐目標バッファ・キャッシュ４１の分岐情報の各セットは、４個の分岐エントリを有し、各分岐エントリは、マイクロプロセッサが前に実行した単一の分岐命令についての情報を保有する。
【００４４】
分岐目標バッファ・キャッシュ４１内の分岐エントリの各セットはまた、分岐パターン・テーブル４２１及び一対の疑似最近置換（Ｐｓｅｕｄｏ−Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｒｅｐｌａｃｅｄ（ＰＬＲＲ））ビット４２０を含む。分岐目標バッファ回路４０は、分岐エントリのセットの中の条件分岐命令の結論を予測するために分岐パターン・テーブル４２１を使う。分岐目標バッファ回路４０は、疑似最近置換（ＰＬＲＲ）ビット４２０を使って、新しい分岐についての情報が分岐エントリのセットに書かれるときに分岐エントリを選択する。
【００４５】
図７は、分岐目標バッファ・キャッシュ４１のセットの各分岐エントリ内に格納された分岐情報を示す。図７に示すように、各分岐エントリは、短縮タグ・アドレス４０１、ブロック・オフセット４０２、分岐タイプ４０３、真の分岐歴４０４、推論分岐歴４０５、推論ビット４０６、有効ビット４０７及び分岐目標アドレス４０８を含む。
【００４６】
短縮タグ・アドレス４０１及びブロック・オフセット４０２は、分岐エントリと関連する分岐命令のメモリ・アドレスを識別するために使われる。短縮タグ・アドレス４０１は、分岐命令の最上位２１ビットの圧縮された９ビット表現である。
【００４７】
ブロック・オフセット値４０２は、分岐命令の最後のバイトの１６バイト・メモリ・ブロック・アドレスの中のバイト・オフセットを表す。分岐命令は最後のバイトで索引され、ブロックの境界分岐命令の全てのバイトが分岐予測を行う前にフェッチされる。例えば、図４のメモリ・マップを再び参照すると、４バイト長の分岐命令がヘキサデシマル・アドレス１Ｅないし２１で示されている。実行後、４バイトの分岐命令は分岐目標バッファ・キャッシュ４１内の記述欄に置かれ、ヘキサデシマル・アドレス２１と関連される。従って、その分岐命令に対する分岐エントリのブロック・オフセット４０２は１にセットされる。
【００４８】
逆に、もし分岐命令が最初のバイト（ヘキサデシマル１Ｅ）で索引されるとすると、分岐目標バッファ回路４０は命令フェッチ・ユニット３０に対して分岐命令を構成する全てのバイトがフェッチされる前に分岐目標アドレスからフェッチするように指示する。従って命令解読器６０及び分岐実行ユニット９２は、全体の分岐命令がフェッチされないので、分岐命令を検証することができない。
【００４９】
各分岐エントリの分岐タイプ・フィールド４０３は、どのタイプの分岐命令を分岐エントリが識別するかを指定する。表１は異なったタイプの分岐命令をリストしたものである。
【００５０】
0003548255.tif 000002
【００５１】
分岐目標バッファ回路４０は、異なった分岐命令に対しては異なった分岐予測機構が使われるので、分岐予測をするとき分岐タイプ・フィールド４０３を使う。例えば、分岐目標バッファ回路４０は、分岐命令歴に基づいて条件分岐命令の結論を予測する。分岐目標バッファ回路４０は、無条件分岐命令を常に「採択」と予測する。
【００５２】
図７の真の分岐歴フィールド４０４は、分岐実行ユニット９２によって決定された「採択（ｔａｋｅｎ）」か「不採択（ｎｏｔ−ｔａｋｅｎ  ）」かの分岐命令歴を維持する。真の分岐歴フィールド４０４は、最後の４回の分岐命令の履歴を４ビットを使って記憶する。この４ビットは、それぞれ「０」のとき「不採択」、「１」のとき「採択」を示す。４ビットの「採択」（ｔａｋｅｎ  ）、「不採択」（ｎｏｔ−ｔａｋｅｎ  ）の履歴は、分岐予測を計算するとき、パターン状態テーブルを索引するのに使われる。これは分岐実行における分岐結論に基づく。
【００５３】
推論ビット４０６及び推論的分岐歴フィールド４０５は、分岐命令の実行を待たずに分岐命令の予測を行うのに使われる。図７の推論的分岐歴フィールド４０５は、分岐目標バッファ回路４０によって行われた最後の４回の分岐予測に関する分岐命令の推論的「採択」（ｔａｋｅｎ  ）、「不採択」（ｎｏｔ−ｔａｋｅｎ  ）の履歴を維持する。推論ビット４０６は、推論的分岐歴フィールド４０５が有効推論歴を含むときセットされる。推論的分岐歴４０５の４ビットは、分岐予測を計算するときパターン状態テーブルを索引するのに使われ、推論ビット４０６がセットされる。推論的分岐歴を使った分岐命令の予測に関する詳細については、１９９３年５月１４日出願の米国特許出願第０８／０６２，０１２号「分岐目標バッファにおける推論歴機構を参照されたい。」
【００５４】
有効ビット４０７は、分岐エントリが有効分岐情報を含むかどうかを示す。分岐目標バッファ回路４０が、分岐エントリを割り当て、記入するとき、分岐目標バッファ回路４０は、そのエントリに対する有効ビット４０７をセットし、そのエントリが有効分岐情報を有することを示す。後で、分岐アドレス計算器５０がその分岐エントリを取り除くとき、取り除かれるエントリの有効ビットはクリアされる。
【００５５】
図７の分岐目標アドレス・フィールド４０８は、分岐命令がサブルーチンからの戻り命令以外の場合、分岐命令に対する分岐目標アドレスを記憶する。もし分岐目標バッファ回路４０が、分岐エントリに関する分岐命令が「採択」であると予測すると、分岐目標アドレス・フィールド４０８のアドレスは命令フェッチ・ユニット３０に送って、命令フェッチ・ユニット３０に次の命令をどこからフェッチすれば良いかを知らせる。（しかし、分岐目標アドレス・フィールド４０８は常に目標アドレスを予測するために使われるわけではない）。分岐目標アドレス・フィールド４０８の上位２８ビットは、もし分岐が行われれば命令フェッチ・ユニット３０がフェッチすべき１６バイト・ブロックを選択する。分岐目標アドレス・フィールド４０８の最下位４ビットは、マイクロプロセッサが実行を再開すべきフェッチされたブロックの中のバイトを選択する。
【００５６】
分岐目標バッファ・キャッシュを用いた分岐命令の予測
命令フェッチ・ユニット３０は、命令ポインタを分岐目標バッファ回路４０に送ることによって、やがて現れる分岐命令についての情報を要求する。図８は、やがて現れる分岐命令に関する分岐目標バッファ・キャッシュ４１をサーチするとき、分岐目標バッファ回路４０によって実行されるステップを示している。ステップ１０１で、分岐目標バッファ回路４０は、命令フェッチ・ユニット３０から命令ポインタを受け取る。
【００５７】
ステップ１０２で、分岐目標バッファ回路４０は、命令ポインタを使って分岐目標バッファ・キャッシュ４１から４つの分岐エントリのセットを読み出す。分岐目標バッファ回路４０がどのように命令ポインタを使うかを明確にするため、図９（ａ）は分岐目標バッファ・キャッシュ４１が分岐命令のアドレスを識別するのに使う３２ビットの命令ポインタ・アドレスの個々のビットを示している。アドレスの上位２８ビットはメモリ・ブロックを識別する。アドレスの最下位４ビットは１６バイト・ブロックのオフセット位置を示す。分岐目標バッファ・キャッシュ４１において、各エントリは、１６バイト・ブロック内で関連する分岐命令の最後のバイトを突き止めるブロック・オフセットを含む。
【００５８】
メモリ・ブロックを識別するアドレスの上位２８ビットは、２つの別々のセクションに分割される。最上位２１ビット（ビット１１から３１まで）は、分岐目標バッファ・キャッシュ４１における各分岐エントリに関連するタグを表す。残りの７ビット（ビット４から１０まで）は、分岐目標バッファ・キャッシュ４１内の分岐エントリのセットを識別する「セット・ビット」である。
【００５９】
分岐目標バッファ回路４０は、命令ポインタの７ビット（ビット４から１０まで）を使って分岐目標バッファ・キャッシュ４１を索引し、分岐エントリのセットを選択する。分岐目標バッファ回路４０は、それから選択された分岐エントリのセットを読み出す。
【００６０】
ステップ１０３で、分岐目標バッファ回路４０は、選択されたセット内の４つの分岐エントリを検査し、４つの分岐エントリのどれかが、命令ポインタによって指定された１６バイト・ブロックの中に分岐命令に関する情報を含んでいるかどうか判定する。具体的には、分岐目標バッファ回路４０は、命令ポインタ・アドレスの上位２１ビットの９ビット圧縮バージョンを各分岐エントリの短縮タグ・フィールド４０１と比較し、合致しない分岐エントリを除外する。
【００６１】
分岐目標バッファ・キャッシュ４１を構成するのに必要なダイ領域を削減するため、分岐目標バッファ・キャッシュ４１の各分岐エントリは、圧縮されたタグ・アドレスを記憶する。望ましい実施例において、正規の２１ビット・タグ値は、タグを９ビットに削減する短縮機構を通される。タグ・アドレスの圧縮はいくらかの情報を失い、エイリアシングを引き起こすことがある。圧縮タグによって起こったエイリアシングは、たまに分岐予測誤りを起こすことがある。しかし、分岐予測誤りは、最終的には、マイクロプロセッサの分岐アドレス計算器５０又は分岐実行ユニット９２によって治される。
【００６２】
本発明の分岐目標バッファ回路４０は、２つの異なった短縮機構を使ってタグ・アドレスを圧縮する。両方の短縮機構は、正規の２１ビット・タグ・アドレスを９ビットの短縮タグに縮める。マイクロプロセッサの機械固有レジスタ（ＭＳＲ）は、２つのタイプの短縮機構のうちから１つを選択する。
【００６３】
図９（ｂ）は、第１の短縮機構の動作を示す。第１の短縮機構は、正規のタグ・アドレスの最上位２ビット（ビット３０及び３１）と正規のタグ・アドレスの最下位７ビット（ビット１１から１７まで）を連結して９ビットの短縮タグを生成する。この第１の短縮機構は、通常下位７ビットが有用である極所的ジャンプを行い、たまに最上位２ビットが有用となる遠くオペレーティング・システム・ルーチンへジャンプするプログラムに関してうまく働く。
【００６４】
図９（ａ）は、第２の短縮機構の動作を示す。第２の短縮機構は、正規のタグ・アドレスの最上位２ビット（ビット３０及び３１）、正規のタグ・アドレスの次の１６ビット（ビット１４から２９まで）の４ビット排他的論理和（ＸＯＲ）の組み合わせ及び正規のタグ・アドレスの最下位３ビット（ビット１１から１３まで）を連結して９ビット短縮タグを生成する。４ビット排他的論理和（ＸＯＲ）組み合わせは、中間の１６ビット（ビット１４から２９まで）を図９（ｃ）に示すように４つのグループにまとめて組み合わせることによって生成される。この第２の短縮機構は、全てのタグ・ビットが考慮されているので、どこへでもジャンプするプログラムに対してうまく働く。最上位２ビット（ビット３０及び３１）は、現アドレスから遠くはなれたオペレーティング・システム・ルーチンに対する呼び出し（ｃａｌｌ）を検出するため、そのまま保持されることに留意されたい。
【００６５】
分岐目標バッファ・キャッシュ４１を検査するとき、分岐目標バッファ回路４０は、現命令ポインタの上位２１ビットを短縮機構に通し、短縮命令ポインタ値を選択されたセットの４つの分岐エントリにある短縮タグ・フィールド４０１と比較する。分岐目標バッファ回路４０は、現短縮命令ポインタの値と一致しない短縮タグ・フィールド４０１を有する分岐エントリを除外する。
【００６６】
ステップ１０４で、分岐目標バッファ回路４０は、現命令ポインタよりも前にある分岐命令を識別する選択されたセットの分岐エントリを除外する。例えば、図４のメモリ・マップを参照すると、４バイト長の分岐命令がヘキサデシマル・アドレス１Ｅ〜２１に示されている。ヘキサデシマル・アドレス１Ｅから２１の分岐命令は、分岐目標バッファ・キャッシュ４１の分岐エントリに置かれており、ヘキサデシマル・アドレス２１と関連している。これはヘキサデシマル・アドレス２１がその分岐命令の最後のアドレスであるからである。従って分岐エントリのブロック・オフセット・フィールド４０２は１にセットされる。もし現命令ポインタがヘキサデシマル・アドレス２３を指しているとすれば、分岐目標バッファ回路４０は、ブロック・オフセット・フィールド４０２の３未満の値を有する全ての分岐エントリを除外し、ヘキサデシマル・アドレス２１の分岐命令に関する分岐エントリはもはや考慮されない。
【００６７】
残りの分岐エントリは、現分岐ポインタによって指定された１６バイト・ブロック内の分岐命令を記述し、現分岐ポインタの後にある。ステップ１０５で、分岐目標バッファ回路４０は、残りの分岐エントリのブロック・オフセット・フィールド４０２を使って残りの分岐エントリを整理する。分岐目標バッファ回路４０は、もし「採択された」分岐命令があれば、残りの整理された分岐エントリから最初の「採択された」分岐命令を選択する。
残りの整理された分岐エントリから最初の「採択された」分岐命令を選択するため、分岐目標バッファ回路４０は、選択されたセットの中の全ての残りの分岐エントリに対して分岐結論予測を行わなければならない。
【００６８】
分岐結論及び分岐目標アドレスの予測
各エントリに対する分岐結論予測を行うために、分岐目標バッファ回路４０は、先ず分岐タイプ・フィールド４０３を読む。分岐目標バッファ回路４０は、どのタイプの分岐命令が予測されるのかによって異なった分岐予測を行う。
【００６９】
分岐タイプ・フィールドは、予測される分岐命令が条件分岐、無条件分岐、サブルーチンの呼び出し分岐、或いはサブルーチンからの戻り分岐のどれであるかを示す。サブルーチン呼び出し及びサブルーチンからの戻り分岐命令は、無条件分岐命令の特定のタイプだが、これらは２つの異なったタイプとしてマークされている。分岐目標バッファ回路４０は、サブルーチン呼び出し及びサブルーチンからの戻り分岐命令を、これら２つのタイプの分岐命令が予測されると分岐目標バッファ回路４０が特別の動作を行うので、異なったタイプとしてマークする。
【００７０】
表２は分岐目標バッファ回路４０がどのようにして分岐目標バッファ・キャッシュ４１に記憶された４つのタイプの分岐命令に対する分岐結論と目標アドレスを予測するかをまとめたものである。
【００７１】
0003548255.tif 000003
【００７２】
表２で述べたように、条件分岐命令以外の全ての分岐命令は、「採択」と予測される。条件分岐命令の結論を予測するため、分岐目標バッファ回路４０は、イェ−及びパットの２段階適用分岐予測機構を使う（Ｔｓｅ  Ｙｕ  Ｙｅｈ  及びＹａｌｅ  Ｎ．  Ｐａｔｔ  による「２段階適用分岐予測」（１９９１年１１月第２４回ＡＣＭ／ＩＥＥマイクロ・アーキテクテャに関する国際シンポジュウム及びワークショップ）５１頁から６１頁を参照）。イェー及びパットの２段階分岐予測機構は、２段階の分岐歴をダイナミックに維持する。
【００７３】
２段階の分岐予測機構において維持される第１段階の分岐歴は、各分岐エントリ内に記憶された「採択」、「不採択」の履歴である。例えば、「不採択」、「採択」、「採択」、「不採択」の分岐歴は、「０１１０」で表される。本実施例では、２つのバージョンの分岐歴が記憶される。すなわち、真の分岐歴及び推論的分岐歴である。真の分岐歴は、分岐実行ユニット９２の決定に従って分岐命令の最後の４つの結論を記憶する。推論的分岐歴は、分岐目標バッファ回路４０の予測に従って分岐命令の最後の４つの結論を記憶する。推論歴は、真の分岐歴が充分迅速に更新されないと考えられるので、小さな（または「きつい」）ループ内の分岐命令を予測する問題を解決するために使われる。本明細書は真の分岐歴に傾中するけれども、推論的分岐歴についての追加情報は、１９９３年５月１４日出願の米国特許出願第０８／０６２，０１２号「分岐目標バッファにおける推論歴機構」に見られる。
【００７４】
２段階適用分岐予測機構に維持される第２段階の分岐歴は分岐パターン歴である。分岐パターン歴は、同じ分岐歴を有する分岐命令の前の分岐結論に基づいた分岐命令の有望な結論を示す。分岐パターン歴は、各可能な分岐歴パターンに対して２ビットの状態値として記憶される。本実施例では、４ビットの分岐歴が記憶されるので、図１０（ａ）に示すように、１６の可能な分岐歴パターンに対して１６の状態値がある。２ビットの状態値は、分岐パターンを図１０（ｂ）に示すように強く「採択」、弱く「採択」、弱く「不採択」、強く「不採択」に分類する。
【００７５】
分岐パターン歴は、同じ分岐パターンが前に発生していた場合に生成される。毎回条件分岐命令が分析されると、分岐パターン・テーブルは、図１０（ｂ）の状態移行矢印で示すようにリー及びスミス（Ｌｅｅ  ＆  Ｓｍｉｔｈ  ）の飽和上／下カウンタを使って更新される。
【００７６】
１つの分岐予測例が図１０（ａ）を参照して与えられている。図１０（ａ）を参照すると、条件分岐命令に対する４ビットの分岐歴が「不採択」、「採択」、「採択」、「不採択」（０１１０）パターンを記憶している。４ビットの分岐パターンは、各分岐パターンに関する分岐パターン歴状態値を記憶する分岐パターン・テーブルの索引に使われる。図１０（ａ）において、「０１１０」の分岐パターンは、「弱く採択」の状態を表す「１０」状態値を索引する。分岐予測機構は、従って分岐が「採択」されると予測する。分岐命令が分岐実行ユニット９２によって分析されると、分岐実行ユニット９２は、分岐に関する分岐歴及び分岐パターン・テーブルの適当な状態値の記述欄を更新する。
【００７７】
分岐目標バッファ回路４０が、整理されたセットの中の全ての条件分岐命令に関する分岐結論を決定した後、分岐目標バッファ回路４０は、最初に採択された分岐命令をサーチする。もし分岐命令が「採択」される予測が何もなければ命令フェッチ・ユニット３０は、次の連続したメモリ・ブロックをフェッチする。しかし、選択されたセットの中に「採択」される分岐命令があると、分岐目標バッファ回路４０は最初の「採択」された分岐命令に対する分岐目標アドレスを予測する。
【００７８】
表２は、どのようにして分岐目標バッファ回路４０が、分岐命令が採択されると予測されたとき分岐タイプ・フィールド４０３に示すような各タイプの分岐命令に対する分岐目標アドレスを予測するかを記述している。表２で述べたように、分岐目標バッファ回路４０は、分岐目標バッファ・キャッシュ４１の分岐目標アドレス・フィールド４０８に与えられたアドレスへの分岐を予測することによって無条件、条件付き、及びサブルーチンへジャンプする分岐命令を処理する。しかしサブルーチンからの戻り命令は異なって処理される。
【００７９】
分岐目標バッファ回路４０がサブルーチンからの戻り命令を予測したとき、分岐目標バッファ回路４０は、戻りレジスタ又は分岐アドレス計算器５０の戻りスタック・バッファから戻りアドレスを予測する。サブルーチンからの戻り命令に対する戻りアドレスの予測についてのより多くの情報は、    年    月出願の米国特許出願          号「コンピュータ・プロセッサにおけるサブルーチンからの戻り命令を分析する方法と装置」に見られる。
【００８０】
分岐目標バッファ回路４０は、予測された分岐目標アドレスを命令フェッチ・ユニット３０に送る。命令フェッチ・ユニット３０は、予測された分岐目標アドレスを使って次のメモリ・ブロックをフェッチする。
【００８１】
分岐命令ポインタ・テーブル
分岐目標バッファ・キャッシュ４１に加えて、分岐目標バッファ回路４０は、分岐命令ポインタ（ＩＰ）テーブル４３と呼ばれる別のキャッシュを維持する。分岐ＩＰテーブル４３は、現在マイクロプロセッサ内にある全ての未解決の分岐マイクロ・オペを記憶する。各マイクロ・オペが実行された後、分岐ＩＰテーブル４３に記憶された情報が読み出され、分岐目標バッファ・キャッシュ４１を更新するか又は分岐予測誤りの場合はマイクロプロセッサを再スタートさせる。
【００８２】
図１１に本発明の分岐ＩＰテーブル４３を示す。分岐ＩＰテーブル４３はｎ個の分岐エントリを有するバッファを備えている。ここでｎはリオーダ・バッファ８３のエントリの数に等しい。分岐ＩＰテーブル４３内の各分岐情報記述欄は、次の線形命令ポインタ（ＮＬＩＰ）アドレス・フィールド及びプロセッサ状態情報フィールドから構成される。
【００８３】
次の線形命令ポインタ（ＮＬＩＰ）アドレス・フィールドは、分岐マイクロ・オペに関連する分岐命令の直ぐ後に続く命令のアドレスを記憶する。命令フェッチ・ユニット３０は、その分岐が誤って「採択」と予測され、その分岐が「採択」されるべきでなかったとき、次の線形命令ポインタ（ＮＬＩＰ）アドレスを使う。
【００８４】
次の線形命令ポインタ（ＮＬＩＰ）アドレスはまた、新しい分岐エントリを割り当てるとき又は既存の分岐エントリの分岐歴情報を更新するとき分岐目標バッファ・キャッシュ４１を索引するのに使われる。新しい分岐エントリを割り当てるとき又は既存の分岐エントリを更新するとき、次の線形命令ポインタ（ＮＬＩＰ）アドレスは１減分され、分岐命令の最後のバイトのアドレスを生成する。分岐命令の最後のバイトのアドレスは、分岐目標バッファ・キャッシュ４１を索引するため分岐目標バッファ回路４０によって使われる。
【００８５】
プロセッサ状態情報フィールドは、分岐予測を行った後マイクロプロセッサが推論的実行を開始するときに変造されるかも知れない状態情報を記憶するのに使われる。もしマイクロプロセッサが、分岐予測誤りによって間違った経路で推論的に実行を行うと、予測誤りが検出されたとき、状態情報は分岐ＩＰテーブル４３から復帰させることができる。本実施例において、マイクロプロセッサ状態情報フィールドは、分岐アドレス計算器５０の戻りスタック・バッファに対するスタック・ポインタを記憶する。
【００８６】
マイクロプロセッサ概観において述べたように、アロケータ７０が分岐マイクロ・オペに対するリオーダ・バッファ８３のｐＤｓｔ記述欄を割り当てるとき、分岐ＩＰテーブル４３の対応する記述欄が割り当てられる。命令解読器６０は、分岐目標バッファ回路４０に割り当てられたｐＤｓｔ記述欄、プロセッサ状態情報及び次の線形命令ポインタ（ＮＬＩＰ）アドレスについて知らせる。分岐目標バッファ回路４０は、プロセッサ状態情報及び次の線形命令ポインタ（ＮＬＩＰ）アドレスを対応する分岐ＩＰテーブル４３の記述欄に書く。分岐ＩＰテーブル４３についてのより多くの情報は    年    月出願の米国特許出願第        号「分岐命令ポインタ・テーブルに関する方法と装置」に見られる。
【００８７】
分岐目標バッファ・キャッシュの更新
図２を参照すると、各分岐マイクロ・オペは、その分岐マイクロ・オペを実行するのに必要な全てのソース・データが得られ、分岐実行ユニット９２が使用可能になるまで予約ステーション８１の記述欄に止まっている。分岐マイクロ・オペを実行するのに必要なソース・データがそろったとき、予約ステーション８１は分岐マイクロ・オペを分岐実行ユニット９２へ送る。
【００８８】
分岐目標バッファ回路４０は、マイクロ・オペを予約ステーション８１から分岐実行ユニット９２へ送るバスを監視する。予約ステーション８１が分岐マイクロ・オペを分岐実行ユニット９２へ送るのが分かると、分岐目標バッファ回路４０は、リオーダ・バッファのどのｐＤｓｔ記述欄番号が分岐マイクロ・オペの結果を格納するのに使われるかに注目する。分岐実行ユニット９２が分岐マイクロ・オペを実行する際、分岐目標バッファ回路４０は、リオーダ・バッファ８３のｐＤｓｔ記述欄と同じ記述欄番号を有する分岐ＩＰテーブル４３の記述欄を読み出す。このようにして、分岐マイクロ・オペが分析されるとき、実行される分岐マイクロ・オペに関連する記憶された分岐情報が利用可能になる。
【００８９】
分岐実行ユニット９２は、最終的分岐目標アドレス及び最終的分岐結論（「採択」又は「不採択」）を決定することによって分岐マイクロ・オペを実行する。分岐実行ユニット９２は、最終分岐結論を予測された分岐結論と比較して、分岐予測が正しかったかどうか調べる。もし分岐予測が正しければ、プロセッサは予測された経路に沿って続行する。もし分岐予測が誤っていれば、分岐実行ユニット９２は、マイクロプロセッサ・パイプラインのフロント・エンドを捨て去り、マイクロプロセッサを正しいアドレスから再スタートさせなければならない。もし分岐命令が「採択」と予測され、最終分岐結論がこれに反して「不採択」であった場合、マイクロプロセッサはその分岐命令の直ぐ後に続く命令のアドレスから実行を再開しなければならない。分岐実行ユニット９２は、この状況をマイクロプロセッサ・パイプラインのフロント・エンドを捨て去り、命令フェッチ・ユニット３０に対して分岐ＩＰテーブル４３によって与えられた次の線形命令ポインタ（ＮＬＩＰ）のアドレスから実行を再開するように指示することによって処理する。
【００９０】
分岐実行ユニット９２が分岐マイクロ・オペを実行した後、分岐目標バッファ回路４０は、分岐目標バッファ・キャッシュ４１において新しい記述欄を割り当てるか又は既存の記述欄を更新しなければならない。分岐目標バッファ・キャッシュ４１の適切なセットをアクセスするため、分岐目標バッファ回路４０は分岐命令の最後のバイトのアドレスを持っていなければならない。分岐命令の最後のバイトを計算するため、分岐目標バッファ回路４０は、分岐ＩＰテーブル４３から得られた次の線形命令ポインタ（ＮＬＩＰ）アドレスを減分する。
【００９１】
分岐目標バッファ・キャッシュ４１を更新するための情報を提供するため、分岐実行ユニット９２は、分析された分岐命令の情報を分岐目標バッファ回路４０へ送る。具体的には、分岐実行ユニット９２は、分岐目標バッファ回路４０にどのタイプの分岐命令が実行され、分岐が「採択」されたかされないか、及び分岐目標アドレスを知らせる。分岐目標バッファ回路４０は、分析された分岐情報を使って分岐目標バッファ・キャッシュ４１を更新する。
【００９２】
図１２は、分岐目標バッファ回路４０が分岐目標バッファ・キャッシュ４１を更新するときに実行するステップを示す。ステップ３０１で、分岐目標バッファ回路４０は、分岐ＩＰテーブル４３から読まれた次の線形命令ポインタ（ＮＬＩＰ）・アドレスを減分し、分岐命令の最後のバイトのアドレスを計算する。分岐目標バッファ回路４０は、分岐命令の最後のバイトのアドレスを使って分岐目標バッファ・キャッシュ４１を索引する。
【００９３】
ステップ３０２で、分岐目標バッファ回路４０は、分岐目標バッファ・キャッシュ４１を索引し、その分岐命令に対する分岐エントリが分岐目標バッファ・キャッシュ４１に既に存在するかどうか調べる。具体的には、分岐目標バッファ回路４０は、分岐エントリに関する計算された命令アドレス・ブロックのセット・ビットを使って分岐目標バッファ・キャッシュ４１を索引し、短縮タグ・フィールド４０１とブロック・オフセット・フィールド４０２をマッチングさせて分岐エントリを探す。
【００９４】
もし分岐目標バッファ回路４０が、その分岐命令に関して分岐エントリを分岐目標バッファ・キャッシュ４１の中に見つけることができなければ、分岐目標バッファ回路４０は、割り当て手段を使ってその分岐命令が分岐目標バッファ・キャッシュ４１に追加されるべきかどうか決定する。割り当て手段については本明細書で後述する。逆にもし分岐目標バッファ回路４０がその分岐命令に関して分岐エントリを分岐目標バッファ・キャッシュ４１の中に見つけると、分岐目標バッファ回路４０は、ステップ３１０から始めて分岐エントリを更新する。
【００９５】
分岐目標バッファ・キャッシュにおける既存の分岐エントリの更新
分岐目標バッファ・キャッシュ４１における既存の分岐エントリの更新の全処理は、３マシン・サイクル必要である。分岐目標バッファ・キャッシュ４１における既存の分岐エントリの更新は、その分岐エントリは更新すべきでないと判断されると、分岐目標バッファ回路４０によって中断させられる。
【００９６】
図１２のステップ３１０を参照すると、分岐がサブルーチンからの戻り命令でなければ分岐目標バッファ回路４０は、分岐エントリの分岐目標アドレスを分岐実行ユニット９２によって計算された分岐目標アドレスと比較する。もし２つの目標アドレスが一致しなければ、分岐実行ユニット９２はステップ３１１で分岐目標アドレスを更新する。
【００９７】
図１２のステップ３１２を参照すると、分岐目標バッファ回路４０は、分岐実行ユニット９２によって与えられた分岐タイプを調べる。もし分岐タイプが無条件分岐命令であれば、分岐目標バッファ回路４０は、分岐エントリの更新を完了する。もし分岐命令が条件分岐命令であれば、分岐目標バッファ回路４０は分岐パターン・テーブルの分岐歴を更新する。
【００９８】
ステップ３１６で、分岐目標バッファ回路４０は、その分岐エントリを含んでいるセットに関する分岐パターン・テーブル４２１を更新する。分岐パターン・テーブル４２１は、既存の真の分岐歴４０４を使い、図１０（ｂ）に示す状態移行テーブルに従った最近の分岐結果を使って状態値を変えて分岐パターン・テーブル４２１を索引することによって更新される。分岐パターン・テーブル４２１は、真の分岐歴フィールド４０４における現在の履歴が分岐パターン・テーブル４２１を索引する必要があるので、真の分岐フィールド４０４が更新さる前に更新されなければならない。
【００９９】
ステップ３１６で分岐パターン・テーブルを更新した後、分岐目標バッファ回路４０は、ステップ３１８で真の分岐歴フィールド４０４を更新する。分岐目標バッファ回路４０は、分岐実行ユニット９２によって計算された条件分岐命令の最新の分岐結論を真の分岐歴フィールド４０４へシフトすることによって真の分岐歴フィールド４０４を更新する。これによって条件分岐命令に関する分岐エントリの更新が完了する。
【０１００】
分岐目標バッファ回路４０は、分岐実行ユニット９２が分岐命令に関連した分岐マイクロ・オペを実行してから２サイクル後に分岐目標バッファ・キャッシュ４１の各分岐エントリを更新する。しかし、分岐目標バッファ回路４０を有するマイクロプロセッサは、マイクロ・オペを元のプログラム順序からはずされた順序で実行できるので、分岐目標バッファ回路４０は、分岐目標バッファ・キャッシュ４１を元のプログラム順序とは異なる順序で更新することがある。
【０１０１】
多くの場合、分岐目標バッファ・キャッシュ４１を元のプログラム順序とは異なる順序で更新することは特に問題ない。しかし、分岐実行ユニットが、後の分岐がすでに実行された後に、分岐実行中に分岐予測誤りを検出したとき、後の分岐は無効な履歴で更新されてしまっているであろう。この状況を矯正するため、分岐目標バッファ回路４０は、もし分岐目標バッファ回路４０が次の２サイクル以内に、分岐が実行されてはならなかったのだと云うことを知れば、分岐エントリの更新を中断する。この状況の１例が図１３を参照して説明される。
【０１０２】
４つの分岐命令Ｂｒ０、Ｂｒ１、Ｂｒ２及びＢｒ３がこの順序でコンピュータ・プログラムに現れる場合を考える。図２に示すマイクロプロセッサにおいて、関連する分岐マイクロ・オペは、如何なる順序でも実行され得る。図１３において、４つの分岐命令はＢｒ３、Ｂｒ１、Ｂｒ２及び最後にＢｒ０の順に実行される。
【０１０３】
図１３のパイプｘを参照すると、分岐実行ユニットはＢｒ３を分析する。次のパイプ  ｘ＋１で、分岐実行ユニットはＢｒ１を分析し、分岐目標バッファ回路４０はＢｒ３の分岐エントリの更新を開始する。パイプｘ＋２で、分岐実行ユニットはＢｒ１を分析し、一方同時に分岐目標バッファ回路４０はＢｒ１の分岐エントリの更新を開始し、Ｂｒ３の分岐エントリの更新を継続する。パイプｘ＋３で、分岐ユニットはＢｒ０を分析し、一方同時に分岐目標バッファ回路４０はＢｒ２の分岐エントリの更新を開始し、Ｂｒ１の分岐エントリの更新を継続し、Ｂｒ３の分岐エントリの更新を終了する。
【０１０４】
もし分岐実行ユニットがＢｒ０は予測誤りであったと判定すると、マイクロプロセッサは誤った経路で推論的に実行しているので、次の分岐命令は実行されてはならなかったことになる。もっと重要なことは、分岐命令Ｂｒ１、Ｂｒ２及びＢｒ３は、実行されてはならなかったのであるから、これらの分岐命令に関する分岐エントリは更新されてはならないのであり、新しい分岐歴は誤りであるということである。分岐実行ユニットが予測誤りを検出したとき、分岐実行ユニットは、分岐目標バッファ回路４０に対して現在処理中の全ての更新を中断するように指示する。従って分岐目標バッファ回路４０は、図１３に示すように分岐命令Ｂｒ１及びＢｒ２の更新を中断する。予測誤りが検出されたとき、Ｂｒ３の更新は既に完了しているので、更新を防止できない。しかし、更新完了前の２サイクル内に分岐エントリの中断をする能力は、このようなケースの大半を処理する。
【０１０５】
分岐目標バッファ・キャッシュにおける分岐エントリの割り当て
図１２のステップ３０２を参照すると、もし分岐目標バッファ回路４０が分岐命令に関して分岐目標バッファ・キャッシュ４１の中に既存の分岐エントリを見つけなかった場合、分岐目標バッファ回路４０は分岐目標バッファ・キャッシュ４１の中に新らしい分岐エントリが割り当てられるかどうか判定しなければならない。分岐エントリを割り当てるかどうかを判定するため、マイクロプロセッサは分岐エントリ割り当て手段を働かせる。ステップ３０３及びステップ３０５は分岐目標バッファ・キャッシュ４１の割り当て手段を実行している。簡単に云えば、本発明の分岐エントリ割り当て手段は、分岐アドレス計算器５０によって誤って予測された全ての分岐命令と全ての「採択された」分岐命令の分岐エントリを割り当てるためのものである。
【０１０６】
図２を参照すると、分岐アドレス計算器５０は、分岐目標バッファ回路４０によって予測されない分岐命令の静的予測を行う。静的予測は、分岐命令自身の中でコード化された情報にのみ基づき、分岐アドレス計算器５０が常に所定の分岐命令に関して同じ予測を行う。従って、分岐アドレス計算器５０が分岐命令を誤って予測すると、同じ予測誤りがくり返し行われる（分岐結論が変わるまで）。この状況を防止するため、分岐アドレス計算器５０によって誤って予測された全ての分岐命令は分岐目標バッファ・キャッシュ４１に割り当てられる。従って図１２のステップ３０３で、分岐目標バッファ回路４０は、その分岐命令が誤って予測されたかどうかテストする。もし分岐が誤って予測されると、分岐目標バッファ回路４０は、その分岐命令の分岐エントリを分岐目標バッファ・キャッシュ４１内に割り当てる。
【０１０７】
もし分岐アドレス計算器５０が、分岐命令が「採択されない」と予測し、その分岐予測が正しいと、遅れは起こらない。一方、もし分岐アドレス計算器５０が、分岐命令が「採択される」と予測すると、分岐アドレス計算器５０は、やはりマイクロプロセッサのフロント・エンドを捨て、命令フェッチ・ユニット３０のフェッチを分岐目標アドレスから開始しなければならない。従って、もし分岐命令が「採択」されると、分岐アドレス計算器５０が正しく分岐命令の結論を予測するかしないかによって５サイクルの遅れがある。この状況が再発するのを防止するため、分岐目標バッファ回路４０は、全ての「採択」分岐命令に対して分岐目標バッファ・キャッシュ内に分岐エントリを割り当てる。図１２のステップ３０５を参照すると、分岐目標バッファ回路４０は分岐命令が「採択」されたかどうかテストする。もし分岐命令が「採択」された場合、分岐目標バッファ回路４０は、その分岐命令の分岐エントリを分岐目標バッファ・キャッシュ４１内に割り当てる。
【０１０８】
分岐目標バッファ・キャッシュ４１において選択されたセットから１つの分岐エントリを選択するため、分岐目標バッファ回路４０は、分岐目標バッファ・キャッシュ４１のセットの中の一対の疑似最近置換（ＰＬＲＲ）ビット４２０を使う。疑似最近置換（ＰＬＲＲ）ビット４２０はセットの中のどの分岐エントリが一番先に置き換えられたかを示す。選択されたセットの中の分岐エントリを選択するため、分岐目標バッファ回路４０は、選択されたセットの疑似最近置換（ＰＬＲＲ）ビット４２０を読み、図１４に示す分岐エントリ割り当て手段に従う。分岐エントリ割り当て手段は、現メモリ・ブロック内の分岐命令に対する既存の分岐エントリを破壊しないように試みる。
【０１０９】
ステップ５０１で、分岐目標バッファ回路４０は、カウンタをゼロにセットする。ステップ５０３で、分岐目標バッファ回路４０は、分岐エントリをテストし、その短縮タグ・フィールド４０１が割り当てられる分岐命令の短縮タグと同じかどうか調べる。もしこの２つの短縮タグが一致しなければ、分岐目標バッファ回路４０は、ステップ５０５へ進み、分岐エントリを置き換える。分岐エントリを置き換えた後、分岐目標バッファ回路４０は、ステップ５０７で疑似最近置換（ＰＬＲＲ）ビット４２０を増分し、増分された疑似最近置換（ＰＬＲＲ）ビットをセットの中に書き戻す。
【０１１０】
もし２つの短縮タグが一致すれば、分岐目標バッファ回路４０は、ステップ５１１へ進み、そこで分岐目標バッファ回路４０は、カウンタをテストし、全ての４つの分岐エントリがテストされたかどうか調べる。もし全ての４つの分岐エントリがテストされたら、分岐目標バッファ回路４０はステップ５０５へ進み、疑似最近置換（ＰＬＲＲ）ビット４２０によって指示された分岐エントリを分岐セットから元々読まれたように置き換える。ステップ５１１を参照すると、もし全ての４つの分岐エントリがテストされていなければ、分岐目標バッファ回路４０はステップ５１３へ進み、カウンタ及び疑似最近置換（ＰＬＲＲ）ビットが増分される。
【０１１１】
ステップ５１３の後で、分岐目標バッファ回路４０はステップ５０３に戻り次の分岐エントリをテストする。分岐目標バッファ・キャッシュ４１の分岐エントリが選択された後、分岐目標バッファ回路４０は選択された分岐エントリのデータ・フィールドに書き込む。
【０１１２】
もし分岐命令が「採択」であったら、分岐目標バッファ回路４０は真の履歴フィールド４０４を「１０１１」とセットする。その他の場合、すなわち分岐が「不採択」であったら、分岐目標バッファ回路４０は、真の履歴フィールドを「０１００」とセットする。
【０１１３】
推論ビット４０６はリセットされ、その分岐エントリに関して推論歴はまだ存在しないことを示す。推論歴フィールド４０５は、後に推論歴が生成されたときセットされるので、分岐エントリ割り当て中は変更されない。
【０１１４】
短縮タグ・フィールド４０１及びブロック・オフセット・フィールド４０２は、分岐命令の最後のバイトを指示するアドレスを使ってセットされる。短縮タグ・フィールド４０１は、分岐命令の最後のバイトを指示するアドレスの最上位２１ビットを選択された短縮機構へ通すことによってセットされる。ブロック・オフセット・フィールド４０２は、分岐アドレスの最下位４ビットを使ってセットされる。
【０１１５】
分岐目標バッファ回路４０は、分岐タイプ・フィールド４０３を分岐実行ユニット９２から受け取った分岐タイプ情報を使ってセットする。分岐目標バッファ回路４０は、分岐目標アドレス・フィールド４０８を分岐実行ユニット９２によって計算された分岐命令の目標アドレスを使ってセットする。
【０１１６】
最後に、分岐エントリの有効ビット４０７がセットされ、分岐エントリが分岐命令に関する有効情報を有することを示す。将来発生する分岐命令は、分岐目標バッファ回路４０によって予測される。
【０１１７】
分岐目標バッファ・キャッシュからの分岐エントリの取り外し
図２を参照すると、分岐アドレス計算器５０は、分岐目標バッファ回路４０によって予測された全ての分岐命令の存在を検証する。有効な分岐命令を指示しない分岐目標バッファ・キャッシュ４１の記述欄は、分岐目標バッファ回路４０に存在しない分岐命令を予測させることになる。
【０１１８】
分岐目標バッファ・キャッシュ４１の分岐エントリが有効な分岐命令を指示しないいくつかの理由がある。自己修正コードが分岐命令を変更でき、分岐目標バッファ・キャッシュ４１の記述欄が正確でなくなる。更に、短縮タグ・フィールド４０１がエイリアシングを起こし、複数のアドレスが各分岐エントリにマップされる。
【０１１９】
分岐アドレス計算器５０が、分岐目標バッファ回路４０が存在しない分岐命令を予測したと判断すると、分岐目標バッファ・キャッシュ４１の不正確な分岐エントリは取り外さなければならない。分岐アドレス計算器５０が、存在しない分岐命令の分岐予測を検出すると、分岐アドレス計算器５０は分岐目標バッファ回路４０に非分岐命令の最初のバイトに対するポインタを送る。にせの分岐エントリを取り外すため、分岐目標バッファ回路４０は、送られたポインタによって定義されたセットの全ての分岐エントリ及び次の分岐エントリのセットを取り外す。送られたポインタで定義されたセット及び次の分岐エントリのセットは、分岐命令（最後のバイトのアドレスによって分岐目標バッファ・キャッシュ４１に置かれた）が２つのセットの分岐エントリのどちらかに存在するかも知れないので取り外さなければならない。１つのセットの分岐エントリを取り外すために、分岐目標バッファ回路４０は、分岐エントリの全ての有効ビット４０７をリセットする。
【０１２０】
命令の流れの中の分岐命令を予測する分岐目標バッファ回路４０を実施するいくつかの方法と装置を説明した。本発明の範囲から逸脱することなく、本発明の器材及び構成に対して当業者によって変更及び修正が加えられることが予期される。
【図面の簡単な説明】
【図１】マイクロプロセッサ命令を処理するための深いマイクロプロセッサ・パイプラインのブロック・ダイアグラムを示す図。
【図２】図１に示す深いパイプラインを実現するマイクロプロセッサの異なった回路ブロックのブロック・ダイアグラムを示す図。
【図３】実行されたマイクロ・オペの結果を格納するリオーダ・バッファの図。
【図４】アドレス空間が１６バイトのメモリ・ブロックに分割されたメモリ・マップの図。
【図５】図２に示すマイクロプロセッサにおいて、どのように分岐目標バッファ回路が他の論理回路と相互に作用するかを示す図。
【図６】分岐目標バッファ回路の中の分岐目標バッファ・キャッシュの内容を示す図。
【図７】分岐目標バッファ・キャッシュの中の各分岐のエントリの内容を示す図。
【図８】分岐予測をするため、分岐目標バッファ・キャッシュをサーチするとき、分  岐目標バッファ回路によって実行されるステップを説明する図。
【図９】（ａ）は、分岐目標バッファ・キャッシュをアクセスするとき、どのように分岐目標バッファ回路がアドレスを使うかを示す図。
（ｂ）は、２１ビット・タグを９ビットの短縮タグに縮める第１の短縮メカ  ニズムを示す図。
（ｃ）は、２１ビット・タグを９ビットの短縮タグに縮める第２の短縮メカ  ニズムを示す図。
【図１０】（ａ）は、各記述欄が２ビットの状態値である１６項目の記入パターン・テーブルを指示する４ビットの分岐歴を示す図。
（ｂ）は、分岐パターン・テーブルにおける各２ビットの状態値に関する状態変化を示す状態図。
【図１１】分岐目標バッファ回路における分岐ＩＰテーブル（ＢＩＴ）の内容を示す図。
【図１２】分岐目標バッファ・キャッシュを更新するとき、分岐目標バッファ回路によって実行されるステップを記載したフローチャート。
【図１３】どのようにして分岐目標バッファ回路に対する３サイクル更新が中止されるかを示す図。
【図１４】分岐エントリを新しい分岐命令に対して割り当てるとき、どのようにして分岐目標バッファ回路がセットの中の分岐エントリを選ぶかを説明するフローチャート。
【符号の説明】
３０…命令フェッチ・ユニット、３５…メモリ及びバス論理、４０…分岐目標バッファ回路、４１…分岐目標バッファ・キャッシュ、４３…分岐ＩＰテーブル、５０…分岐アドレス計算器。
【図１】
0003548255.tif 000004
【図２】
0003548255.tif 000005
【図３】
0003548255.tif 000006
【図４】
0003548255.tif 000007
【図５】
0003548255.tif 000008
【図６】
0003548255.tif 000009
【図７】
0003548255.tif 000010
【図８】
0003548255.tif 000011
【図９】
0003548255.tif 000012
【図１０】
0003548255.tif 000013
【図１１】
0003548255.tif 000014
【図１２】
0003548255.tif 000015
【図１３】
0003548255.tif 000016
【図１４】
0003548255.tif 000017