(57)【要約】  分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）は、各キャッシュライン中に少なくとも２つの分岐ターゲットアドレスを記憶する。ＢＴＡＣは、切り捨てられた命令アドレスによりインデックス付けされる。分岐ターゲットアドレスのどれが予測分岐ターゲットアドレスとしてとられるかを、分岐予測オフセットテーブルから取得されるオフセットが決定する。いくつかの方法でオフセットテーブルをインデックス付けしてもよく、それらの方法は、分岐履歴によるもの、分岐履歴のハッシュおよび分岐命令アドレスの一部によるもの、ｇｓｈａｒｅ値によるもの、ランダムによるもの、ラウンドロビン順序によるもの、または他の方法によるものを含んでもよい。【選択図】      図２
2008535063.tif 000002
【特許請求の範囲】
【請求項１】
分岐命令に対する分岐ターゲットアドレスを予測する方法において、
命令アドレスの少なくとも一部を記憶することと、
少なくとも２つの分岐ターゲットアドレスを、前記記憶された命令アドレスと関係付けることと、
分岐命令をフェッチする際に、前記分岐命令に対する予測ターゲットアドレスとして前記分岐ターゲットアドレスのうちの１つを選択することとを含む方法。
【請求項２】
命令アドレスの少なくとも一部を記憶することは、キャッシュ中のインデックスとして前記命令アドレスの少なくとも一部を書き込むことを含む請求項１記載の方法。
【請求項３】
少なくとも２つの分岐ターゲットアドレスを命令アドレスと関係付けることは、前記少なくとも２つの分岐命令のそれぞれを実行する際に、前記インデックスによりインデックス付けされたキャッシュライン中のデータとして、前記各分岐命令の前記分岐ターゲットアドレスを書き込むことを含む請求項２記載の方法。
【請求項４】
分岐予測オフセットテーブルにアクセスしてオフセットを取得することをさらに含み、
前記予測ターゲットアドレスとして分岐ターゲットアドレスのうちの１つを選択することは、前記オフセットに対応する前記分岐ターゲットアドレスを選択することを含む請求項１記載の方法。
【請求項５】
分岐予測オフセットテーブルにアクセスすることは、分岐履歴により前記分岐予測オフセットテーブルにインデックス付けすることを含む請求項４記載の方法。
【請求項６】
分岐予測オフセットテーブルにアクセスすることは、分岐履歴と前記命令アドレスとのハッシュ関数により前記分岐予測オフセットテーブルにインデックス付けすることを含む請求項４記載の方法。
【請求項７】
分岐予測オフセットテーブルにアクセスすることは、前記分岐予測オフセットテーブルにランダムにインデックス付けすることを含む請求項４記載の方法。
【請求項８】
分岐予測オフセットテーブルにアクセスすることは、前記分岐予測オフセットテーブルにインクリメント的にインデックス付けして、ラウンドロビン選択を発生させることを含む請求項４記載の方法。
【請求項９】
分岐命令評価が分岐成立のとき前記分岐予測オフセットテーブルに対するオフセットを書き込むことをさらに含み、
前記オフセットは、前記少なくとも２つの分岐ターゲットアドレスのどれが前記分岐成立した分岐命令と関係付けられているかを示す請求項４記載の方法。
【請求項１０】
命令アドレスの少なくとも一部を記憶することは、少なくとも１つのビットだけ前記命令アドレスを切り捨て、それにより前記切り捨てられた命令アドレスがｎ個の命令のブロックを参照することを含む請求項１記載の方法。
【請求項１１】
分岐ターゲットアドレスを予測する方法において、
切り捨てられた命令アドレスにより参照されたｎ個のシーケンシャルな命令のブロックをフェッチすることと、
評価が分岐成立である前記ブロック中の各分岐命令に対する分岐ターゲットアドレスをキャッシュ中に記憶させ、それによりｎ個までの分岐ターゲットアドレスが、前記切り捨てられた命令アドレスによりインデックス付けされることとを含む方法。
【請求項１２】
前記ブロック中の分岐命令のうちの１つをその後フェッチする際に、前記キャッシュから分岐ターゲットアドレスを選択することをさらに含む請求項１１記載の方法。
【請求項１３】
前記キャッシュから分岐ターゲットアドレスを選択することは、
オフセットテーブルからオフセットを取得することと、
前記切り捨てられた命令アドレスにより前記キャッシュにインデックス付けすることと、
前記オフセットにしたがって、前記ｎ個までの分岐ターゲットアドレスのうちの１つを選択することとを含む請求項１２記載の方法。
【請求項１４】
オフセットテーブルからオフセットを取得することは、分岐履歴により前記オフセットテーブルにインデックス付けすることを含む請求項１３記載の方法。
【請求項１５】
プロセッサにおいて、
切り捨てられた命令アドレスによりインデックス付けされ、キャッシュライン当り２つ以上の分岐ターゲットアドレスを記憶するように動作する分岐ターゲットアドレスキャッシュと、
複数のオフセットを記憶するように動作する分岐予測オフセットテーブルと、
切り捨てられた命令アドレスにより前記キャッシュにインデックス付けし、前記オフセットテーブルから取得されたオフセットに応答して前記インデックス付けされたキャッシュラインから分岐ターゲットアドレスを選択するように動作する命令実行パイプラインとを具備するプロセッサ。
【請求項１６】
ｎ個の命令の命令フェッチ帯域幅を有する命令キャッシュをさらに具備し、前記切り捨てられた命令アドレスは、ｎ個の命令のブロックをアドレス指定する請求項１５記載のプロセッサ。
【請求項１７】
前記分岐ターゲットアドレスは、キャッシュライン当りｎ個までの分岐ターゲットアドレスを記憶するように動作する請求項１６記載のプロセッサ。
【請求項１８】
複数の条件分岐命令の条件評価の表示を記憶するように動作する分岐履歴レジスタをさらに具備し、前記分岐履歴レジスタのコンテンツが前記分岐予測オフセットテーブルにインデックス付けして、前記インデックス付けされたキャッシュラインから分岐ターゲットアドレスを選択するためのオフセットを取得する請求項１５記載のプロセッサ。
【請求項１９】
前記分岐履歴レジスタのコンテンツは、前記分岐予測オフセットテーブルにインデックス付けする前に前記切り捨てられた命令アドレスと結合される請求項１８記載のプロセッサ。
【発明の詳細な説明】
【背景】
【０００１】
本発明は、一般にプロセッサの領域に関し、詳細には、インデックス当り２つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュに関する。
【０００２】
マイクロプロセッサは、広範囲のさまざまなアプリケーション中で計算タスクを実行する。強化されたソフトウェアを通して、より速い動作および／または増加された機能を実現することにより製品の改良をするために、プロセッサの性能を向上させることは永遠の設計目標である。ポータブル電子デバイスのような多くの組み込まれたアプリケーションにおいて、節電することおよびチップサイズを減少させることは、一般にプロセッサの設計および実現における目標である。
【０００３】
多くの最近のプロセッサはパイプラインアーキテクチャを使用し、パイプラインアーキテクチャでは、複数の実行ステップをそれぞれ有するシーケンシャルな命令が、実行においてオーバーラップされている。シーケンシャルな命令ストリーム中の命令間で並列処理を活用するこの能力は、プロセッサの性能の向上に大いに貢献することができる。ある条件下で、いくつかのプロセッサは、実行サイクルごとに命令を完了することができる。
【０００４】
命令間のデータ依存（データハザード）、分岐のような制御依存（制御ハザード）、プロセッサリソース割当てコンフリクト（構造ハザード）、割り込み、キャッシュミス、およびこれらに類するものを含むさまざまな要因のため、実際にはこのような理想的な条件はほとんど実現されない。したがって、プロセッサ設計の共通の目標はこれらのハザードを回避し、パイプラインを“フル”に保持することである。
【０００５】
実世界のプログラムは一般に条件分岐命令を含み、命令がパイプライン中で深く評価されるまで、条件分岐命令の実際の分岐ふるまいは分からないかもしれない。分岐命令の次にどの命令をフェッチすればよいのかがプロセッサに分からず、条件分岐命令が評価されるまで分からないため、この分岐の不確実性はパイプラインをストールする制御ハザードを発生させることがある。一般に最新のプロセッサはさまざまな形態の分岐予測を使用し、それによって条件分岐命令の分岐ふるまいはパイプライン中で早期に予測され、分岐予測に基づいてプロセッサは推論的に命令をフェッチして実行し、この結果パイプラインをフルに保持する。予測が正しい場合、性能は最大化され、電力消費は最小化される。分岐命令が実際に評価されるときに、分岐が誤って予測された場合、推論的にフェッチされた命令をパイプラインからフラッシュして、正しい分岐ターゲットアドレスから新しい命令をフェッチしなければならない。誤って予測された分岐はプロセッサの性能および電力消費に悪影響を与える。
【０００６】
通常の分岐予測には２つの構成要素があり、それは条件評価および分岐ターゲットアドレスである。条件評価は２分決定であり、それは、分岐が、異なるコードシーケンスに実行をジャンプさせる分岐成立か、または分岐不成立かのどちらかであり、分岐不成立のケースにおいては、分岐命令に続く次のシーケンシャルな命令をプロセッサは実行する。分岐が成立するとして評価される場合、分岐ターゲットアドレスは次の命令のアドレスである。いくつかの分岐命令は、命令演算コード中に分岐ターゲットアドレスを含み、またはそれによって分岐ターゲットアドレスを容易に計算することができるオフセットを含む。他の分岐命令に対しては、（分岐が成立するとして条件評価が予測される場合）分岐ターゲットアドレスを予測しなければならない。
【０００７】
分岐ターゲットアドレス予測の１つの知られている技術は、分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）である。ＢＴＡＣは一般に、完全に連想キャッシュであり、分岐命令アドレス（ＢＩＡ）によりインデックス付けされ、それぞれのデータ位置（すなわちキャッシュ“ライン”）が単一の分岐ターゲットアドレス（ＢＴＡ）を含んでいる。パイプライン中で分岐が成立するとして分岐命令が評価されて、その実際のＢＴＡが計算されるとき、ＢＩＡおよびＢＴＡが（例えば、ライトバックパイプラインステージ中に）ＢＴＡＣに対して書き込まれる。新しい命令をフェッチするとき、ＢＴＡＣは命令キャッシュ（すなわち、Ｉ−キャッシュ）と並列にアクセスされる。命令アドレスがＢＴＡＣ中でヒットする場合、その命令が分岐命令であることをプロセッサは知り（これはＩ−キャッシュからフェッチされた命令がデコードされるより前である）、予測されたＢＴＡが提供され、それは分岐命令の以前の実行の実際のＢＴＡである。分岐が成立するとして分岐予測回路が分岐を予測する場合、命令フェッチは予測されたＢＴＡから始まる。分岐が成立しないとして分岐を予測する場合、命令フェッチはシーケンシャルに継続する。用語ＢＴＡＣはまた、飽和カウンタをＢＩＡと関係付けるキャッシュを示すために技術的に使用されるということに注意すべきであり、したがって条件評価予測（すなわち、分岐が成立、または分岐が不成立）だけを提供する。
【０００８】
高性能プロセッサは、Ｉ−キャッシュから一時に１つより多い命令をフェッチするかもしれない。例えば、例えば４つの命令を含むかもしれない全体のキャッシュラインは、命令フェッチバッファにフェッチされてもよく、命令フェッチバッファは、パイプラインにそれらの命令をシーケンシャルに送る。４つすべての命令に関する分岐予測のためにＢＴＡＣを使用することは、ＢＴＡＣ上に４つの読み取り部分を必要とする。これは、大規模で複雑なハードウェアを必要とし、電力消費を非常に増大させるであろう。
【概要】
【０００９】
分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）は、各キャッシュライン中に少なくとも２つの分岐ターゲットアドレスを記憶する。ＢＴＡＣは、切り捨てられた命令アドレスによりインデックス付けされる。分岐ターゲットアドレスのどれが予測分岐ターゲットアドレスとしてとられるかを、分岐予測オフセットテーブルから取得されるオフセットが決定する。いくつかの方法でオフセットテーブルをインデックス付けしてもよく、それらの方法は、分岐履歴によるもの、分岐履歴のハッシュおよび分岐命令アドレスの一部によるもの、ｇｓｈａｒｅ値によるもの、ランダムによるもの、ラウンドロビン順序によるもの、または他の方法によるものを含んでもよい。
【００１０】
１つの実施形態は、分岐命令に対して分岐ターゲットアドレスを予測する方法に関係する。命令アドレスの少なくとも一部が記憶される。少なくとも２つの分岐ターゲットアドレスが、記憶された命令アドレスに関係付けられる。分岐命令をフェッチする際に、分岐ターゲットアドレスのうちの１つが、分岐命令に対する予測ターゲットアドレスとして選択される。
【００１１】
別の実施形態は分岐ターゲットアドレスを予測する方法に関係する。ｎ個のシーケンシャルな命令のブロックがフェッチされ、最初の命令アドレスから始まる。ｎ個までの分岐ターゲットアドレスが最初の命令アドレスの一部によりインデックス付けされるように、分岐が成立するとして評価される、ブロック中の各分岐命令に対する分岐ターゲットアドレスがキャッシュ中に記憶される。
【００１２】
別の実施形態はプロセッサに関係する。命令アドレスの一部によりインデックス付けされる分岐ターゲットアドレスキャッシュをプロセッサは含み、プロセッサはキャッシュライン当り２つ以上の分岐ターゲットアドレスを記憶するように動作する。複数のオフセットを記憶するように動作する分岐予測オフセットテーブルをプロセッサはさらに含む。命令アドレスによりキャッシュにインデックス付けし、オフセットテーブルから得られるオフセットに応答して、インデックス付けされたキャッシュラインから分岐ターゲットアドレスを選択するように動作する命令実行パイプラインをプロセッサはさらに含む。
【詳細な説明】
【００１３】
図１は、プロセッサ１０の機能のブロック図を描写する。制御ロジック１４にしたがって命令実行パイプライン１２中で、プロセッサ１０は命令を実行する。いくつかの実施形態において、パイプライン１２は、複数の並列パイプラインを有するスーパースケーラ設計であってもよい。パイプステージ中に構成されるさまざまなレジスタまたはラッチ１６、および１つ以上の算術ロジックユニット（ＡＬＵ）１８をパイプライン１２は含む。汎用目的レジスタ（ＧＰＲ）ファイル２０は、メモリ階層構造のトップを構成するレジスタを提供する。
【００１４】
命令サイド変換ルックアサイドバッファ（ＩＴＬＢ）２４により管理されるメモリアドレス変換および許可により、パイプライン１２は、命令キャッシュ（Ｉ−キャッシュ）２２から命令をフェッチする。並行して、パイプライン１２は、分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）２５に対して命令アドレスを提供する。命令アドレスがＢＴＡＣ２５中でヒットする場合、ＢＴＡＣ２５はＩ−キャッシュ２２に対して分岐ターゲットアドレスを提供して、予測分岐ターゲットアドレスからの命令フェッチを直ちに開始してもよい。以下でより完全に記述するように、複数の潜在的予測分岐ターゲットアドレスのうちのどれがＢＴＡＣ２５により提供されるかは、分岐予測オフセットテーブル（ＢＰＯＴ）２３からのオフセットにより決定される。ＢＰＯＴ２３への入力は、１つ以上の実施形態において、分岐履歴と分岐命令アドレスと他の制御入力とを含むハッシュ関数２１を含んでもよい。分岐履歴が分岐履歴レジスタ（ＢＨＲ）２６により提供されてもよく、分岐履歴レジスタ（ＢＨＲ）２６は、複数の分岐命令に対する分岐条件評価結果（例えば、分岐が成立、または分岐が不成立）を記憶する。
【００１５】
主変換ルックアサイドバッファ（ＴＬＢ）２８により管理されるメモリアドレス変換および許可により、データがデータキャッシュ（Ｄ−キャッシュ）２６からアクセスされる。さまざまな実施形態において、ＩＴＬＢはＴＬＢの一部のコピーを含んでいてもよい。代わりに、ＩＴＬＢとＴＬＢとを統合してもよい。同様に、プロセッサ１０のさまざまな実施形態において、Ｉ−キャッシュ２２とＤ−キャッシュ２６とを統合、または一体化してもよい。メモリインターフェイス３０の制御の下、Ｉ−キャッシュ２２および／またはＤ−キャッシュ２６におけるミスは、メイン（オフチップ）メモリ３２に対するアクセスを生じさせる。
【００１６】
さまざまな周辺デバイス３６に対するアクセスを制御する入力／出力（Ｉ／Ｏ）インターフェイス３４を、プロセッサ１０は含んでいてもよい。プロセッサ１０の多数のバリエーションが可能であることを当業者は認識するだろう。例えば、ＩおよびＤキャッシュ２２、２６のどちらかまたは両方に対して、プロセッサ１０は２次（Ｌ２）キャッシュを含んでもよい。さらに、プロセッサ１０中に描写される１つ以上の機能のブロックを、特定の実施形態から省略してもよい。
【００１７】
条件分岐命令は、ほとんどのコードにおいて共通であり、ある評価によると５つの命令中１つ程度が分岐であるかもしれない。しかしながら、分岐命令は一様に分散されない傾向がある。むしろ、ｉｆ−ｔｈｅｎ−ｅｌｓｅ決定パス、ｐａｒａｌｌｅｌ（“ｃａｓｅ”）分岐、およびこれに類するもののような論理構造体を実現するために、それらは集中発生することが多い。例えば、次のコード断片は２つのレジスタのコンテンツを比較し、比較の結果に基づいてターゲットＰまたはＱに分岐する。
【００１８】
ＣＭＰ      ｒ７、ｒ８        ＧＰＲ７とＧＰＲ８とのコンテンツを比較して、比較の結果を反映する条件コードまたはフラグをセットする
ＢＥＱ      Ｐ                コードラベルＰに等しい場合分岐する
ＢＮＥ      Ｑ                コードラベルＱに等しくない場合分岐する
高性能プロセッサ１０はＩ−キャッシュ２２から一時に複数の命令をフェッチすることが多く、コード内に集中発生する分岐命令の傾向のため、所定の命令フェッチが分岐命令を含む場合、それはまた付加的な分岐命令を含む確率が高い。１つ以上の実施形態にしたがうと、分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）２５中に複数の分岐ターゲットアドレス（ＢＴＡ）が記憶され、単一の命令アドレスに関係付けられる。ＢＴＡＣ２５中でヒットする命令フェッチの際に、さまざまな方法でインデックス付けすることができる分岐予測オフセットテーブル（ＢＰＯＴ）２３により提供されるオフセットにより、ＢＴＡのうちの１つが選択される。
【００１９】
図２は、さまざまな実施形態にしたがった、ＢＴＡＣ２５およびＢＰＯＴ２３の機能のブロック図を描写する。ＢＴＡＣ２５中の各のエントリは、インデックスまたは命令アドレス領域４０を含む。各エントリはまた、２つ以上のＢＴＡ領域（図２はＢＴＡ０−ＢＴＡ３と示された４つを描写する）を包含するキャッシュライン４２を含む。Ｉ−キャッシュ２２からフェッチされている命令アドレスがＢＴＡＣ２５中でヒットするとき、キャッシュライン４２の複数のＢＴＡ領域のうちの１つが、マルチプレクサ４４として図２中で機能的に描写されているオフセットにより選択される。さまざまな実施において、選択機能はＢＴＡＣ２５に対して内部、またはマルチプレクサ４４により描写するように外部にあってもよいことに注意すべきである。オフセットはＢＰＯＴ２３により提供される。以下でより完全に記述するように、状況の特定の設定の下で最後に分岐が成立したＢＴＡを、キャッシュライン４２のうちのどのＢＴＡ領域が含むかに関するインジケータをＢＰＯＴ２３は記憶してもよい。
【００２０】
特に、図２中で描写したＢＴＡＣ２５の状態は、以下の例示的なコード（ここで、Ａ−Ｃは切り捨てられた命令アドレスであり、Ｔ−Ｚは分岐ターゲットアドレスである）のさまざまな繰り返しから生じてもよい。
【００２１】
ＢＥＱ      Ｚ
ＡＤＤ      ｒ１、ｒ３、ｒ４
Ａ：
ＢＮＥ      Ｙ
ＡＤＤ      ｒ６、ｒ３、ｒ７
ＢＥＱ      Ｘ
ＢＮＥ      Ｗ
Ｂ：
ＢＧＥ      Ｖ
Ｂ          Ｕ
ＣＭＰ      ｒ１２、ｒ４
ＢＮＥ      Ｔ
Ｃ：
ＡＤＤ      ｒ３、ｒ８、ｒ９
ＡＮＤ      ｒ２、ｒ３、ｒ６
命令アドレスから１つ以上のＬＳＢを切り捨てることにより、コードは論理的にｎ個の命令ブロック（描写した例においては、ｎ＝４）に分割される。ブロック中のいずれかの分岐命令が、分岐が成立するとして評価される場合、ＢＴＡＣ２５のエントリが書き込まれ、切り捨てられた命令アドレスがインデックス領域４０中に記憶され、 “分岐が成立する”分岐命令のＢＴＡがキャッシュライン４２の対応するＢＴＡ領域中に記憶される。例えば、図２を参照すると、さまざまな時間において、切り捨てられたアドレスＡを有する４つの命令のブロックが実行された。それぞれの分岐は少なくとも１度分岐が成立するとして評価され、実際のそれぞれのＢＴＡはキャッシュライン４２に対して書き込まれ、命令アドレスのＬＳＢを使用してＢＴＡｎ領域（例えば、ＢＴＡ０およびＢＴＡ２）が選択される。領域ＢＴＡ１とＢＴＡ３とに対応する命令は分岐命令ではないので、キャッシュライン４２のそれらの領域に記憶されるデータはない（例えば、これらの領域に関係付けられる“有効”ビットは０でもよい）。それぞれのＢＴＡがＢＴＡＣ２５に対して書き込まれる時に（例えば、分岐が成立するとして評価された、対応する分岐命令のライトバックパイプステージにおいて）、ＢＰＯＴ２３が更新されて、キャッシュライン４２の関連するＢＴＡ領域を示すオフセットが記憶される。この例においては、ＢＥＱ Ｚ分岐が実行されたとき０の値が記憶され、ＢＮＥ Ｙ分岐が実行されたとき２の値が記憶された。以下でより完全に記述するように、その時のプロセッサの状態により決定されるＢＰＯＴ２３内の位置に、これらのオフセット値が記憶されてもよい。
【００２２】
同様に、切り捨てられた命令アドレスＢを共有する４つの命令のブロック−このケースにおいてそれぞれの命令は分岐命令である−も多数回実行された。それぞれの分岐は少なくとも１度分岐が成立するとして評価され、切り捨てられたアドレスＢによりインデックス付けされた、キャッシュライン４２の対応するＢＴＡ領域に対して、最近の実際のＢＴＡが書き込まれた。キャッシュライン４２の４つのＢＴＡ領域のすべてが有効であり、それぞれがＢＴＡを記憶する。ＢＰＯＴ２３中のエントリはそれに応じて、関連するＢＴＡＣ２５のＢＴＡ領域を示すように更新された。別の例として、図２はＢＴＡＣ２５中に記憶された、切り捨てられたアドレスＣとＢＴＡであるＴとを描写し、これは例示的なコードのブロックＣ中のＢＮＥ Ｔ命令に対応する。ｎ個の命令のこのブロックは、分岐命令から始まらないことに注意すべきである。
【００２３】
これらの例が実証するように、１からｎまでのＢＴＡをＢＴＡＣ２５中に記憶させてもよく、それらは単一の切り捨てられた命令アドレスによりインデックス付けされる。次の命令フェッチにおいて、ＢＴＡＣ２５中でヒットすると、予測ＢＴＡとしてｎ個までのＢＴＡのうちの１つが選択されなければならない。さまざまな実施形態にしたがうと、所定のキャッシュライン４２に対するｎ個までのＢＴＡのうちの１つを選択するオフセットのテーブルをＢＰＯＴ２３は維持する。ＢＴＡがＢＴＡＣ２５に対して書き込まれるのと同時に、オフセットがＢＰＯＴ２３に対して書き込まれる。オフセットが書き込まれるＢＰＯＴ２３内の位置は、オフセットが書き込まれる時のプロセッサの現在のおよび／または最近の過去の、条件または状態に依存してもよく、ロジック回路２１およびその入力により決定される。ロジック回路２１およびその入力は、いくつかの形態をとってもよい。
【００２４】
１つの実施形態において、プロセッサは分岐履歴レジスタ（ＢＨＲ）２６を維持する。ＢＨＲ２６は、簡単な形態において、シフトレジスタを構成していてもよい。条件分岐命令がパイプライン１２中で評価されるときに、条件分岐命令の条件評価をＢＨＲは記憶する。すなわち、分岐命令が、分岐が成立した（Ｔ）であるか、または分岐が成立しなかった（Ｎ）であるかをＢＨＲ２６は記憶する。ＢＨＲ２６のビット幅は、維持される分岐評価履歴の時間的な長さを決める。
【００２５】
１つの実施形態にしたがうと、ＢＰＯＴ２３はＢＨＲ２６の少なくとも一部により直接インデックス付けされてオフセットが選択される。すなわち、この実施形態において、ＢＨＲ２６だけがロジック回路２１に対する入力であり、ロジック回路２１は単に“通過”回路である。例えば、ブロックＡ中の分岐命令ＢＥＱが実際に分岐が成立するとして評価され、Ｚの実際のＢＴＡが発生した時に、ＢＨＲ２６はＮＮＮ（すなわち、以前の３つの条件分岐がすべて“分岐不成立”と評価された）の（少なくともＬＳＢビット位置における）値を含んでいた。このケースにおいて、切り捨てられた命令アドレスＡによりインデックス付けされたキャッシュライン４２の領域ＢＴＡ０に対応する０は、ＢＰＯＴ２３中の対応する位置（図２中で描写した例において最上の位置）に書き込まれた。同様に、分岐命令ＢＮＥが実行されたとき、ＢＨＲ２６は値ＮＮＴを含んでいて、（切り捨てられた命令アドレスＡによりインデックス付けされたキャッシュライン４２のＢＴＡ２領域に書き込まれたＢＴＡのＹに対応する）ＢＰＯＴ２３の第２の位置に対して２が書き込まれた。
【００２６】
Ａブロック中のＢＥＱ命令が次にフェッチされるとき、それはＢＴＡＣ中でヒットするだろう。その時のＢＨＲ２６の状態がＮＮＮである場合、オフセット０がＢＰＯＴ２３により提供され、キャッシュライン４２のＢＴＡ０領域のコンテンツは−ＢＴＡのＺであり−予測ＢＴＡとして提供される。代わりに、フェッチの時にＢＨＲ２６がＮＮＴである場合、ＢＰＯＴ２３は２のオフセットを提供し、ＢＴＡ２のコンテンツすなわちＹが予測ＢＴＡになるだろう。後者のケースはエイリアシングの例であり、エイリアシングでは、最近の分岐履歴が、異なる分岐命令に対するＢＴＡが書き込まれたときに実在するものと偶然一致するとき、誤ったＢＴＡが１つの分岐命令に対して予測される。
【００２７】
別の実施形態において、ロジック回路２１はハッシュ関数を含んでもよく、ハッシュ関数はＢＨＲ２６の出力の少なくとも一部を命令アドレスの少なくとも一部と結合させて、エイリアシングを防ぎ、または減少させる。これは、ＢＰＯＴ２３のサイズを増加させるだろう。１つの実施形態において、命令アドレスビットをＢＨＲ２６の出力と連結して、分岐条件評価予測に関連するとして技術的に知られているｇｓｅｌｅｃｔ予測器に類似したＢＰＯＴ２３インデックスを発生させてもよい。別の実施形態において、命令アドレスビットをＢＨＲ２６の出力と排他的論理和演算してもよく、これは、結果としてｇｓｈａｒｅタイプのＢＰＯＴ２３インデックスとなる。
【００２８】
１つ以上の実施形態において、ロジック回路２１に対する１つ以上の入力は、分岐履歴または命令アドレスに対して無関係であってもよい。例えば、ＢＰＯＴ２３に対してインクリメント的にインデックス付けして、ラウンドロビンインデックスを発生させてもよい。代わりに、インデックスはランダムであってもよい。例えば、パイプライン制御ロジック１４により発生される１つ以上のこれらのタイプの入力は、上述したインデックスを発生させる１つ以上の技術と組み合わされてもよい。
【００２９】
ここで記述した１つ以上の実施形態にしたがって、ＢＴＡＣ２５キャッシュライン４２中のＢＴＡｎ領域の数をＩ−キャッシュ２２キャッシュライン中の命令の数と一致させることにより、ＢＴＡＣ２５に対するアクセスが、Ｉ−キャッシュからの命令フェッチと歩調が合うようにしてもよい。予測ＢＴＡとして、ｎ個までの起こり得るＢＴＡのうちの１つを選択するために、最近の分岐履歴のようなプロセッサの条件と、ＢＴＡがＢＴＡＣ２５中に書き込まれた時に実在するものとを比較してもよい。ＢＴＡの選択用のオフセットを発生させるためにＢＰＯＴ２３にインデックス付けするさまざまな実施形態は、ツールの豊富なセットを提供し、ツールの豊富なセットは特定のアーキテクチャまたはアプリケーションに対して最適化してもよい。
【００３０】
本発明は、特定の機能、観点および実施形態に関してここで記述したが、多数のバリエーション、修正、および他の実施形態が本発明の広い範囲内で可能であり、したがって、あらゆるバリエーション、修正および実施形態が本発明の範囲内のものであると考えるべきことが明らかであろう。それゆえに本実施形態は、すべての観点において実例的なものであって限定的なものでないとして解釈すべきであり、添付した特許請求の範囲の意味および均等の範囲内に入るすべての変更は、その中に包含すべきであることが意図されている。
【図面の簡単な説明】
【００３１】
【図１】図１は、プロセッサの機能のブロック図である。
【図２】図２は、分岐ターゲットアドレスキャッシュおよびその付随回路の機能のブロック図である。
【図１】
2008535063.tif 000003
【図２】
2008535063.tif 000004
【国際調査報告】
2008535063.tif 000005
2008535063.tif 000006
2008535063.tif 000007