(57)【要約】プロセッサ（１２０）は、分岐予測のために２つ以上の分岐ターゲットバッファ（ＢＴＢ）テーブル（３０１、３０２）を含み、各ＢＴＢテーブルは異なるターゲットサイズもしくは幅のエントリを格納する、または異なる分岐タイプのエントリを格納する。各ＢＴＢエントリは、少なくともタグ及びターゲットアドレスを含む。いくつかのターゲットアドレスビットのみを必要とする、ある特定の分岐タイプについて、それぞれのＢＴＢテーブルは、より狭くなることによって、分岐命令タイプごとにそれぞれのＢＴＢテーブルに分けられる、プロセッサ内でより多くのＢＴＢエントリを可能にする。プロセッサ内の同じスペース、またはそれより少ないスペースに格納される、利用可能なＢＴＢエントリの数が増加することによって、命令処理の速度が上がる。いかなるターゲットアドレスをも格納せず、復号ユニットに依存するＢＴＢテーブルを定義し、それを提供することができる。【選択図】図３
2021530782.tif 000002
【特許請求の範囲】
【請求項１】
命令実行パイプライン（１００）と、
第一数の第一分岐ターゲットバッファ（ＢＴＢ）テーブルエントリを含む第一ＢＴＢテーブル（３０１）であって、前記第一ＢＴＢテーブルエントリのそれぞれは第一タグ（３０７）及び第一ターゲットアドレス（３１３）を含み、前記第一ターゲットアドレスのそれぞれは第一幅を有する、前記第一ＢＴＢテーブルと、
第二数の第二ＢＴＢテーブルエントリを含む第二ＢＴＢテーブル（３０２）であって、前記第二ＢＴＢテーブルエントリのそれぞれは第二タグ（３０８）及び第二ターゲットアドレス（３１４）を含み、前記第二ターゲットアドレスのそれぞれは前記第一幅とは異なる第二幅を有する、前記第二ＢＴＢテーブルと、
所与の予測アドレスについて予測されたターゲットアドレスを提供するように構成される分岐予測器（２０３）と、
を含む、プロセッサ（１２０）であって、
前記プロセッサは分岐命令の分岐特性に基づいて、前記第一ＢＴＢテーブルの第一ＢＴＢテーブルエントリか、前記第二ＢＴＢテーブルの第二ＢＴＢテーブルエントリかのいずれかに前記第一ターゲットアドレスを含む分岐記述子を格納するように構成される、プロセッサ。
【請求項２】
前記分岐特性は、分岐ターゲットアドレスサイズである、請求項１に記載のプロセッサ。
【請求項３】
前記分岐特性は分岐タイプである、請求項１に記載のプロセッサ。
【請求項４】
前記第一ＢＴＢテーブルエントリは、ジャンプ分岐命令、呼び出し分岐命令、戻り分岐命令、及び条件分岐命令のうちの少なくとも１つについて構成される、請求項３に記載のプロセッサ。
【請求項５】
前記分岐特性は前記ＢＴＢエントリに格納される分岐の数である、請求項１に記載のプロセッサ。
【請求項６】
前記分岐特性は前記ＢＴＢエントリのスレッド識別子である、請求項１に記載のプロセッサ。
【請求項７】
第一メモリレベルキャッシュ及び第二メモリレベルキャッシュ、をさらに含み、
前記第一ＢＴＢテーブル及び前記第二ＢＴＢテーブルは前記プロセッサの同じメモリレベルキャッシュに含まれる、請求項１に記載のプロセッサ。
【請求項８】
前記第一ＢＴＢテーブルの前記第一ＢＴＢテーブルエントリは、予測ルックアップについてＮウェイアソシアティブであり、
前記第二ＢＴＢテーブルの前記第二ＢＴＢテーブルエントリは、予測ルックアップについてＭウェイアソシアティブであり、
前記Ｍ及び前記Ｎは１以上であり、前記Ｍは前記Ｎとは異なる、請求項１に記載のプロセッサ。
【請求項９】
前記第一数の前記第一ＢＴＢテーブルエントリは、前記第二数の前記第二ＢＴＢテーブルエントリとは異なる、請求項１に記載のプロセッサ。
【請求項１０】
前記ＢＴＢテーブルエントリのそれぞれは、前記ＢＴＢエントリのそれぞれを、セット内で最近最も使用された（ＭＲＵ）ステータス、及び最近最も使用されていない（ＬＲＵ）ステータスのうちの１つとしてマーク付けする最近使用されたステータスビットを含み、
前記プロセッサは、前記最近使用されたステータスビットの状態に基づいて置き換えポリシーに従い前記セット内のＢＴＢエントリをエビクトするように構成される、請求項１に記載のプロセッサ。
【請求項１１】
分岐命令についての誤予測によって引き起こされるリダイレクトに基づいて分岐ターゲットバッファ（ＢＴＢ）エントリの分岐タイプを決定することと、
前記ＢＴＢエントリの前記決定された分岐タイプに基づいて、
プロセッサの第一分岐ターゲットバッファ（ＢＴＢ）テーブル（３０１）の第一エントリであって、前記第一エントリは前記ＢＴＢエントリの第一分岐タイプに対応する第一ターゲットアドレス幅を有する、前記第一エントリ、及び
前記プロセッサの第二ＢＴＢテーブル（３０２）の第二エントリであって、前記第二エントリは前記第一分岐タイプとは異なる第二分岐タイプに対応する、前記第一ターゲットアドレス幅とは異なる第二ターゲットアドレス幅を有する、前記第二エントリ、
のうちの１つに前記ＢＴＢエントリを格納することと、を含む、方法。
【請求項１２】
前記分岐タイプは、分岐ターゲットアドレスサイズである、請求項１１に記載の方法。
【請求項１３】
前記ＢＴＢエントリの前記格納は、前記プロセッサの予測トレーナーユニットによって実行される、請求項１１に記載の方法。
【請求項１４】
セット内で最近最も使用された（ＭＲＵ）ステータス、及び最近最も使用されていない（ＬＲＵ）ステータスのうちの１つとしてＢＴＢエントリをマーク付けする最近使用されたステータスビットに基づいて、前記第一ＢＴＢテーブルまたは前記第二ＢＴＢテーブルの前記ＢＴＢエントリを識別することと、
前記第一ＢＴＢテーブルまたは前記第二ＢＴＢテーブルの前記識別されたＢＴＢエントリを、前記第一ＢＴＢテーブルまたは前記第二ＢＴＢテーブルに前記エントリを格納する前にエビクトすることと、をさらに含む、請求項１１に記載の方法。
【請求項１５】
前記第一ＢＴＢテーブル及び前記第二ＢＴＢテーブルは、前記プロセッサの同じメモリレベルキャッシュに含まれる、請求項１１に記載の方法。
【請求項１６】
前記ＢＴＢエントリを格納する前に、前記分岐命令の命令タグに基づいて、前記第一ＢＴＢテーブル及び前記第二ＢＴＢテーブルのうちの少なくとも１つを検索することと、
前記ＢＴＢエントリを格納する前に、前記ＢＴＢエントリが前記第一ＢＴＢテーブル及び前記第二ＢＴＢテーブルのうちの前記少なくとも１つにおいて見つからないことを識別することと、をさらに含む、請求項１１に記載の方法。
【請求項１７】
前記ＢＴＢエントリの前記ターゲットアドレスのサイズが前記第一ＢＴＢテーブルまたは前記第二ＢＴＢテーブルのそれぞれのＢＴＢエントリについてのアドレスサイズを上回るときに、オーバーフローＢＴＢテーブルに前記ＢＴＢエントリの前記ターゲットアドレスのオーバーフロービットを格納すること、をさらに含む、請求項１１に記載の方法。
【請求項１８】
プロセッサの分岐ターゲットバッファ（ＢＴＢ）の複数のＢＴＢテーブルをルックアップすることによって、現在予測されたブロックの終了アドレス、及び次に予測されたブロックの開始アドレスを予測することであって、前記ＢＴＢは現在の予測アドレスにおいて第一ＢＴＢテーブル及び第二ＢＴＢテーブルを含む、前記予測することと、
前記予測された終了アドレス、及び前記予測された開始アドレスのうちの少なくとも１つに基づいて、前記プロセッサにおける実行のための命令の部分として予測を提供することと、を含む、方法。
【請求項１９】
前記第一ＢＴＢテーブルのＢＴＢエントリは、前記第二ＢＴＢテーブルのＢＴＢエントリのターゲットアドレスフィールドの第二幅よりも小さい第一幅のターゲットアドレスフィールドを含む、請求項１７に記載の方法。
【請求項２０】
前記現在の予測アドレスは、プログラムカウンタに関連している、請求項１７に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
プロセッサにおける命令パイプラインは、命令ストリームのさまざまな命令を並行して実行することができる複数のパイプラインステージにおいて命令を処理することにより、命令実行スループットを向上させる。このようなパイプラインは、命令をフェッチ、復号、マッピング、及び実行することに続いて、結果をレジスタなどの別のユニットに書き込むための別個のユニットを含むことが多い。パイプラインの命令フェッチユニットは、プロセッサパイプラインの次のステージに命令ストリームを提供する。一般に、命令フェッチユニットは、パイプラインの残りの部分に命令を継続的に供給し続けるために、命令キャッシュを使用する。
【０００２】
パイプラインにおける実行ステージにおいて分岐を解消するまでプロセッサが待機してから、命令フェッチステージにおいて次の命令をフェッチする場合に、命令ストリーム内の分岐命令は、パイプラインストールをもたらす場合がある。分岐予測器は、条件分岐が成立、または不成立であるかどうかを予測しようとし得る。一部の実施態様では、分岐予測器は、分岐命令自体を復号して実行することによって分岐命令を計算する前に、分岐ターゲット予測を使用して、成立した条件または無条件分岐のターゲットを予測する。分岐ターゲットは、計算されたアドレスからのオフセット、またはレジスタを介した間接参照に基づき得る。
【０００３】
従来、分岐ターゲットバッファ（ＢＴＢ）は、予測された分岐ターゲットを含む分岐情報を格納するプロセッサ内の単一の小さなメモリキャッシュである。予測は、命令アドレスを、ＢＴＢに格納されている以前に実行された命令アドレスと比較することを含む。通常、予測が成功することにより、プロセッサがターゲットアドレスを取得するステップの実行をスキップすることができるため、予測は処理時間を節約する。プロセッサは、ＢＴＢ内で実行の次のステップについてのアドレスをルックアップすることにより、時間を節約する。したがって、ＢＴＢがターゲットアドレスについてのヒットを生成する頻度は、プロセッサが命令を実行することができる速度に直接影響する。多くの場合、実行速度は、ＢＴＢが格納することができるエントリ数に直接関係している。
【０００４】
本開示は、より良好に理解され得、その多くの特徴及び利点は、添付図を参照することによって、当業者に明らかになる。異なる図面で同じ参照記号を使用することは、類似または同一の要素ということを意味する。
【図面の簡単な説明】
【０００５】
【図１】いくつかの実施形態による命令パイプラインアーキテクチャのブロック図である。
【図２】一部の実施形態による処理システムのブロック図である。
【図３】いくつかの実施形態による、ターゲットサイズに基づいて複数の分岐ターゲットバッファ（ＢＴＢ）テーブルを含むプロセッサのブロック図である。
【図４】いくつかの実施形態による、分岐タイプに基づいて複数のＢＴＢテーブルを含むプロセッサのブロック図である。
【図５】いくつかの実施形態による、異なるレベルのメモリ内に複数のＢＴＢテーブルを含むプロセッサのブロック図である。
【図６】いくつかの実施形態によるＢＴＢテーブルについてのＢＴＢエントリのブロック図である。
【図７】いくつかの実施形態による、ＢＴＢテーブルについてのＢＴＢエントリのブロック図である。
【図８】いくつかの実施形態による、ＢＴＢテーブルについてのＢＴＢエントリのブロック図である。
【図９】いくつかの実施形態による、複数のＢＴＢテーブルのうちの１つにターゲットアドレスサイズごとに分岐ターゲットアドレスを格納する方法を示す流れ図である。
【図１０】いくつかの実施形態による、複数のＢＴＢテーブルのうちの１つに分岐タイプごとに分岐ターゲットアドレスを格納する方法を示す流れ図である。
【発明を実施するための形態】
【０００６】
プロセッサにおいて分岐ターゲットバッファ（ＢＴＢ）またはＢＴＢテーブルを使用して分岐情報を格納することにより、プロセッサの速度は実質的に向上する。従来、ＢＴＢにおいてエントリ数を増加させる唯一の方法は、バッファサイズを増大させることであった。ただし、ＢＴＢなどの一部のコンポーネントについてのローカルストレージを増加させることにより、プロセッサにおける速度及び物理スペースの点で他のコンポーネントが犠牲になるため、ＢＴＢ容量への制限を含む、プロセッサ内のストレージ要素数への制限がある。さらに、プロセッサのアーキテクチャを設計するときに、バランスを保つためのトレードオフ、及び考慮する要因がある。例えば、実際には、ＢＴＢへのいくつかの変更により、プロセッサが動作しているときにプロセッサの速度が低下した。他の状況では、ＢＴＢが大きいほど、プロセッサの動作中の消費電力が全体的に高くなり、これは望ましくない。
【０００７】
従来のＢＴＢの一般的なサイズは、１０２４個のエントリであり、各エントリは、例えば、ターゲットアドレスに対して２０ビットを含む。ただし、すべてのＢＴＢエントリに、保存されるアドレスに対して同じビット数が必要なわけではない。例えば、分岐予測器は、ある特定のアドレスに対して利用可能な２０ビットのうちの５〜１０ビットのみを必要とする場合があるが、ターゲットアドレスの最上位ビットの一部が予測アドレスから変更されていないものとして分岐情報において符号化されることができることから、他のアドレスに対して全２０ビットを必要とする場合がある。ＢＴＢの容量及びユーティリティを増大させ、プロセッサ内のＢＴＢのフットプリントをほぼ同じに保つために、少なくとも１つの実施形態では、ＢＴＢは、２つ以上のバッファまたはテーブルに分割される。ある特定の実施形態によれば、第一バッファは、短いメモリアドレス、例えば６、８、または他の数のビットを含むこれらのアドレス用にサイズ設定され、指定される。第二バッファは、より長いメモリアドレス、例えば１４、１６、１８、または２０ビットを含むこれらのメモリアドレス用にサイズ設定され、指定される。一部の実施態様は、第三バッファを利用し、この第三バッファは、さまざまなメモリアドレス長、例えば６、８、１０、１２、１４、１６、１８、または２０ビットを含むこれらのメモリアドレス長用にサイズ設定され、指定される。また、各ＢＴＢエントリは、タグフィールド及び、いくつかの実施形態では、ＢＴＢエントリ内の１つ以上の別個のフィールドに配置される他の情報を含む。
【０００８】
他の実施形態によれば、プロセッサの設計者及びアーキテクトは、１つ以上のタイプの命令分岐に基づいて複数のＢＴＢテーブルを作成して指定することによって、それぞれのタイプの分岐ターゲットに対してＢＴＢテーブルを作成する。各ＢＴＢエントリは、ＢＴＢエントリが追跡する分岐を探索するコストに関連する値を含む。無条件分岐は、プロセッサ復号器によってプロセッサパイプラインにおいて早期に探索されることができるが、条件分岐は、実行時まで探索されない場合がある。プロセッサのいくつかの実施形態は、１サイクル中に、２つ以上の分岐予測、そのため２つの分岐ターゲットアドレスを送達する。これらの複数の分岐は、単一のＢＴＢエントリに格納される。ＢＴＢエントリのさまざまな値を説明するために、第一ＢＴＢは、例えば無条件分岐用に作成されて指定され、第二ＢＴＢは、例えば単一の条件分岐用に作成されて指定され、第三ＢＴＢは、例えば複数の分岐を記録するエントリ用に作成される。第一、第二、及び第三ＢＴＢテーブルのそれぞれは、異なるターゲットアドレスサイズ、したがって異なる全体のＢＴＢテーブル幅を有することにより、単一のＢＴＢが、ある特定の固定幅、及びある特定の固定長（エントリ数）のものであった以前の設計と比較して、プロセッサ内のＢＴＢテーブルのフットプリント全体を減少させるメカニズムを提供し得る。ＢＴＢエントリを２つ以上のＢＴＢテーブルに分割する、または配置するというこの利点により、プロセッサ設計者は、１つ以上のＢＴＢテーブルの長さを、相互に、または単一の従来のＢＴＢの従来の長さに比べて増加させる、または減少させることができる。３つのＢＴＢシステムについて、第一、第二、及び第三ＢＴＢテーブルは、第一ＢＴＢ、第二ＢＴＢ、及び第三ＢＴＢのそれぞれの中のエントリに収まらない大きなターゲットアドレスに対して追加のアドレスビット数を提供するために、各ＢＴＢエントリが指すことができる別個のターゲットテーブルによって補完され得る。動作中に、そしていくつかの実施態様によれば、プロセッサ内のＢＴＢルックアップは、各ＢＴＢルックアップについてのすべてのＢＴＢバッファ間で実行されることにより、単一の従来のＢＴＢバッファと同様のパフォーマンスを提供する。
【０００９】
ある特定の実施態様では、ＢＴＢテーブルは、単一のメモリタイプ内に含まれるか、または、一方で他の実施態様では、ＢＴＢテーブルは、プロセッサコアに関するマルチレベルメモリ階層の、複数のメモリ、複数のメモリタイプ、または複数のメモリレベル間で分散される。説明を簡単にするために、本明細書では、プロセッサコアに対する、またはプロセッサに対するメモリのレベルまたは配置にそれぞれ対応する、レベル１のＢＴＢ、レベル２のＢＴＢなどを参照する。各ＢＴＢレベルは、単一のＢＴＢテーブル、または複数のＢＴＢテーブルを含んでもよい。他の実施態様では、１つ以上のＢＴＢテーブルは、単一のプロセッサコアについての単一のメモリキャッシュまたはメモリレベルに組み込まれる。さらに他の実施態様では、ＢＴＢテーブルは、プロセッサコアまたはプロセッサ操作間で共有される。特定の実施形態では、複数のＢＴＢレベルのうちの１つは、複数のプロセッサコアによって共有され、プロセッサコアのそれぞれは、それ自体に１つ以上のＢＴＢテーブルを含む。特定のコアに関連するこれらのＢＴＢテーブルを最初に使用してもよく、必要に応じてＢＴＢエントリを共有ＢＴＢテーブルにエビクトしてもよい。プロセッサコア間で共有される１つ以上のＢＴＢテーブルを含むプロセッサの利点は、検索速度、全体的なプロセッサ速度、及び全体的なプロセッサ操作における低下によって相殺されることができる。したがって、高速実装のために、マルチコアプロセッサの別個のプロセッサコアごとに複数のＢＴＢテーブルを提供してもよい。
【００１０】
動作中に、最近最も使用されていない（ＬＲＵ）ものなどの下位の値のＢＴＢエントリは、第一ＢＴＢまたは第一ＢＴＢレベルから、同じレベルまたは別のレベルのメモリ内のＢＴＢなどの別のＢＴＢまたはＢＴＢレベルに最初にエビクトされる。第二ＢＴＢから第三ＢＴＢへのエビクションもＬＲＵベースで行われる。ＢＴＢテーブルには、さまざまなタイプの連想度を使用してもよい。例として、第一ＢＴＢテーブルは、４ウェイセットアソシアティブである。別のＢＴＢテーブルは、８ウェイセットアソシアティブのプロセッサキャッシュの形式を取り、各ウェイはウェイあたり５１２、１０２４、２０４８、またはある他の数のエントリを格納する。一般に、第一ＢＴＢテーブルは、Ｎウェイセットアソシアティブであることができ、第二ＢＴＢテーブルは、Ｍウェイセットアソシアティブであることができ、Ｎ及びＭは互いに同じ、または異なる整数である。他の実施形態では、１つ以上のＢＴＢテーブルはフルアソシアティブである。連想度のレベルは、特定のプロセッサについて所望の消費電力レベル、プロセッサが動作するシステム、ならびに特定のプロセッサについての処理負荷の所期のタイプ及び量に応じて選択される。
【００１１】
一部の実施態様では、ＢＴＢテーブルは、下位レベルのＢＴＢテーブルからの条件分岐に対して最近エビクトされたエントリが投入される限られたエントリ数を含むビクティムバッファとして機能する。所与の領域についてのこのようなビクティムバッファのエントリ数を最大にするために、分岐予測器は、ＢＴＢテーブルにいかなるターゲットアドレスも記録しない。分岐予測器がビクティムバッファにおいて分岐を見つけ、条件分岐予測器によって決定されたとおりに分岐が取得されると予測するときに、分岐予測器は、分岐位置に関する情報を復号ユニットに送信し、復号ユニットは、復号操作が完了すると利用可能なターゲットアドレスへのリダイレクトをトリガし、予測される位置が実際に条件分岐であることを確認する。
【００１２】
図１は、いくつかの実施形態による、アウトオブオーダー命令実行を実装するプロセッサ１２０の命令パイプラインアーキテクチャ１００のブロック図である。プロセッサ１２０の少数の要素のみを示す。命令キャッシュ１０１は、命令フェッチユニット１０３によってアクセスされる。データキャッシュ１０２は、ロード／ストアユニット１１０によってアクセスされる。命令キャッシュ１０１の命令は、データキャッシュ１０２からのデータを含むデータ上で動作する。命令フェッチユニット１０３は、１つ以上の分岐ターゲットバッファ（ＢＴＢ）テーブル（一般にＢＴバッファ及びＢＴＢとも称される）１０５に格納される、または提供される分岐ターゲットアドレスを生成する分岐予測器１０４を含む。いくつかの実施形態によれば、分岐ターゲットアドレスは、プログラムカウンタ１１３に関連している。ＢＴＢテーブル１０５は、図１の分岐予測器１０４の内部に示されており、ＢＴＢテーブル１０５は、分岐予測器１０４または命令フェッチユニット１０３のある特定の要素に近接してプロセッサ１２０内に位置していても、位置していなくてもよい。復号器１０６は、命令キャッシュ１０１からの命令を含む命令をプロセッサ制御信号に変換する。
【００１３】
リオーダバッファ１０７は、リザベーションステーション１０９などのプロセッサの他のコンポーネントによってアクセスされるレジスタ１０８に命令を、それらの元のフェッチ順序で格納する。リザベーションステーション１０９は、レジスタ１０８などのレジスタをリネームし、動的命令スケジューリングを容易にする。リザベーションステーション１０９は、データがレジスタに格納されて再読み出しされるのを待機するのではなく、データがフェッチされ次第、または計算され次第すぐに、プロセッサがデータをフェッチして再利用することを可能にする。分岐予測器１０４によってＢＴＢテーブル１０５に格納される予測アドレスが正しくない、または命令ストリームに回復不可能な例外が発生する場合、すべての命令のリオーダバッファ１０７はクリアされ、リザベーションステーション１０９は再初期化される。リオーダバッファ１０７は、分岐ターゲットアドレスの誤予測のロールバック制御のためのメカニズムを提供する。リザベーションステーション１０９は、ロード／ストアユニット１１０、ならびに算術論理演算装置（ＡＬＵ）、浮動小数点演算装置（ＦＰＵ）、及び整数演算装置（ＩＵ）などの１つ以上の機能ユニット１１１に情報を提供する。合わせて、命令フェッチユニット１０３、復号器１０６、リオーダバッファ１０７、リザベーションステーション１０９、ロード／ストアユニット１１０、及び関連するレジスタは、命令実行パイプラインの一実施形態である。
【００１４】
図２は、一部の実施形態による処理システム２００のブロック図である。処理システム２００は、図１の命令パイプラインアーキテクチャ１００及びＢＴＢテーブル１０５の一部分の一実施例である。処理システム２００は、分岐検出器２０２、条件分岐予測器２０３、戻りアドレス予測器２０４、及び分岐予測トレーナー２０５を有する分岐予測器２０１を含む。処理システム２００は、当業者によって理解されるように、算術ユニット、スケジューラ、テーブルウォーカーなどの他の図示されていない要素を含む。
【００１５】
現在のアドレスごとに、分岐予測器２０１は、現在のアドレスから開始してフェッチされるバイトのブロックの終了アドレス、予測されたブロック内の分岐タイプ、及び次の予測の開始アドレスを含む予測ウィンドウを提供する。どの分岐が予測ウィンドウの一部分であるかを決定するために、分岐検出器２０２は、すべてのウェイにわたって、例えばＢＴＢテーブル１  ２０６からＢＴＢテーブルＮ  ２０７として表される複数のＢＴＢテーブルのうちの１つ以上にわたって、すべてのＢＴＢテーブルをルックアップする。所与のＢＴＢエントリ上でのタグマッチングは、エントリに記録される１つ以上の分岐が予測ウィンドウに存在することを示す。各ＢＴＢエントリは分岐の位置及びタイプを含む。誤予測された分岐に対してリダイレクトが発生するときに、ＢＴＢには分岐予測トレーナー２０５が投入される。
【００１６】
図３は、いくつかの実施形態による、複数のＢＴＢテーブルを含むプロセッサのブロック図である。プロセッサ３００は、追加の構造及び機能を有する、図１のプロセッサ１２０及びＢＴＢテーブル１０５の特定の実施例である。プロセッサ３００は、第一指定領域３０６内に複数のプロセッサコアのうちの第一プロセッサコア３０５を含む。第一プロセッサコア３０５は、分岐予測器３０４によって使用される第一ＢＴＢテーブル３０１、第二ＢＴＢテーブル３０２、及び第三ＢＴＢテーブル３０３を含むＢＴＢテーブルと相互運用する。いくつかの実施形態によれば、各プロセスサイクルにおいて、分岐予測器３０４は、１つ以上の分岐命令からの１つまたは２つの予測を提供する。
【００１７】
各ＢＴＢテーブル３０１、３０２、３０３は、それぞれ、エントリが属する予測アドレスを識別するために使用されるタグフィールド３０７、３０８、３０９、１つまたは複数の分岐のターゲットを格納するために使用されるターゲットアドレスフィールド３１０、３１１、３１２、ならびに予測ウィンドウ内の分岐位置、及び分岐タイプを格納するために使用される情報フィールド３１６、３１７、３１８を含む。図２の分岐予測トレーナー２０５などの分岐トレーナーは、それぞれのＢＴＢテーブルに投入され、ＢＴＢエントリが第一ＢＴＢテーブル３０１、第二ＢＴＢテーブル３０２、または第三ＢＴＢテーブル３０３に記録されているかどうかを、トレーニングされているＢＴＢエントリごとに決定する。
【００１８】
ＢＴＢテーブル３０１〜３０３のそれぞれは、異なるサイズまたは幅３１３、３１４、３１５（特に示されない限り、「サイズ」及び「幅」は本明細書では交換可能に使用される）のターゲットアドレスフィールド３１０、３１１、３１２を含む。例えば、第二ＢＴＢテーブル３０２は、第二アドレスサイズ３１４のアドレス３１１を含む。いくつかの実施形態によれば、第二アドレスサイズ３１４は、第一アドレスサイズ３１３よりも小さい。第二アドレスサイズ３１４は、第三ＢＴＢテーブル３０３のターゲットアドレスフィールド３１２の第三アドレスサイズ３１５よりも大きい。ある特定の実施形態では、例えば、第一ＢＴＢテーブル３０１のＢＴＢエントリの第一セットにおけるＢＴＢエントリ数と比較して、第三ＢＴＢテーブル３０３のＢＴＢエントリの第三セットには、より多くのＢＴＢエントリがある。これが可能であるのは、ターゲットアドレスフィールド３１２についてのビット数または幅３１５を減らすことにより、その他のフィールド３０９、３１８のサイズを一定に保つときに、第三ＢＴＢテーブル３０３についてより多くのエントリが可能であることからである。すなわち、各ＢＴＢテーブル３０１、３０２、３０３についての同じ量のプロセッサフットプリントに対して、幅３１５が縮小されることにより、第三ＢＴＢテーブル３０３は、指定領域３０６の固定サイズに対してより多くのエントリを含むことが可能である。他の実施形態では、すべてのターゲットアドレスに対して一定幅のターゲットアドレスフィールドを有する単一のＢＴＢテーブルを含む以前の実施形態と比較して、より小さな指定領域３０６が可能である。したがって、この実施例では、第三ＢＴＢテーブル３０３は、その他のＢＴＢテーブル３０１、３０２よりも小さなフットプリントをプロセッサ３００及び指定領域３０６では占めてもよいが、第二ＢＴＢテーブル３０２及び第一ＢＴＢテーブル３０１よりもサイズ（エントリ）が大きいと見なされる。
【００１９】
第三ＢＴＢテーブル３０３におけるエントリの第三アドレス３１２、または第二ＢＴＢテーブル３０２におけるエントリの第二アドレス３１１のような、アドレスビットを保持するために追加のビットが必要とされる場合に、追加のアドレステーブル（図３には示されていない）は、第一、第二、及び第三ＢＴＢテーブル３０１、３０２、３０３の間で共有される。アドレスフィールドのビットに格納されるアドレス値の代わりに、追加のアドレステーブルが使用されるときに、複数のアドレスビットは、追加のアドレステーブル内のエントリにインデックス付けされる。すなわち、追加のアドレステーブルのエントリへのポインタは、分岐ターゲットアドレスフィールド３１０、３１１、３１２のうちの対応する１つに指定されるＢＴＢエントリの少なくとも一部分に格納される。
【００２０】
図４は、いくつかの実施形態による、分岐タイプに基づいてＢＴＢテーブルを含むプロセッサ４００のブロック図である。分岐タイプに基づくＢＴＢテーブル構成は、テーブルを異なる値のＢＴＢエントリに割り当て、テーブルのサイズを適切に設定して、さらなるスペースを高位の値のエントリに割り当てることにより、向上したパフォーマンスを提供する。プロセッサ４００は、追加の構造及び機能を有する、図１のプロセッサ１２０及びＢＴＢテーブル１０５の特定の実施例である。プロセッサ４００は、第一指定領域４０６内に複数のプロセッサコアのうちの第一プロセッサコア４０５を含む。第一プロセッサコア４０５は、分岐予測器４０４によって使用される第一ＢＴＢテーブル４０１、第二ＢＴＢテーブル４０２、及び第三ＢＴＢテーブル４０３を含むＢＴＢテーブルと相互運用する。いくつかの実施形態によれば、各プロセスサイクルにおいて、分岐予測器４０４は、１つ以上の分岐命令からの１つまたは２つの予測を提供する。
【００２１】
各ＢＴＢテーブル４０１、４０２、４０３は、エントリが属する予測アドレスを識別するために使用されるタグフィールド４０７、４０８、４０９、１つまたは複数の分岐のターゲットを格納するために使用されるターゲットアドレスフィールド４１０、４１１、４１２、ならびに予測ウィンドウ内の分岐位置、及び分岐タイプを格納するために使用される情報フィールド４１６、４１７、４１８を含む。図２の分岐予測トレーナー２０５などの分岐トレーナーは、それぞれのＢＴＢテーブルに投入され、ＢＴＢエントリが第一ＢＴＢテーブル４０１、第二ＢＴＢテーブル４０２、または第三ＢＴＢテーブル４０３に記録されているかどうかを、トレーニングされているＢＴＢエントリごとに決定する。さらに、ＢＴＢテーブル４０１〜４０３のそれぞれは、それぞれの分岐タイプについてターゲットアドレスフィールド４１０、４１１、４１２を含む。ＢＴＢテーブル４０１〜４０３のそれぞれは、そこに格納される分岐アドレスのそれぞれ１つ以上のタイプに典型的なターゲットアドレスサイズに基づいて、異なるサイズまたは幅４１３、４１４、４１５のターゲットアドレスフィールド４１０、４１１、４１２を含んでもよい。ＢＴＢテーブル４０１、４０２、４０３のそれぞれは、１つ以上の分岐タイプに指定される。例えば、第二ＢＴＢテーブル４０２は、第一ＢＴＢテーブル４０１のエントリとは異なる分岐タイプについてのアドレス４１１を格納する。ある特定の実施形態では、例えば、第三ＢＴＢテーブル４０３内のエントリのタイプが、ＢＴＢエントリに関して正しく予測するときに節約されるサイクル数の観点から、プロセッサ４００の運用効率にとってより有益であるため、第二ＢＴＢテーブル４０２のＢＴＢエントリのセット内のＢＴＢエントリの数と比較して、第三ＢＴＢテーブル４０３のＢＴＢエントリの第三セット内により多くのＢＴＢエントリがある。それぞれのＢＴＢテーブル４０１〜４０３のサイズ（エントリ数）は選択され、ＢＴＢテーブル４０１〜４０３は、そこに格納される分岐アドレスタイプ、及びそれらの相互の運用効率に基づいて構築される。一実施形態では、各ＢＴＢエントリは、それぞれのフィールドに少なくともタグ及びターゲットアドレスを含む。各エントリは、スレッドＩＤ、及び共有インジケータまたはフラグなどの他の情報も含んでもよい。
【００２２】
図５は、いくつかの実施形態による、異なるレベルのメモリ内に複数のＢＴＢテーブルを含むプロセッサのブロック図である。プロセッサ５００は、分岐命令を処理する分岐予測器５０２を有するプロセッサコア５０１を含む。分岐予測器５０２は、レベル１のＢＴＢテーブル５０３、１セットのレベル２のＢＴＢテーブル５０４、５０５、５０６、及びレベル３のＢＴＢテーブル５０７を含むさまざまな構造を有し、それらと相互運用する。レベル１のＢＴＢテーブル５０３は、第一レベルのメモリ５０８にある。レベル２のＢＴＢテーブル５０４、５０５、５０６は、第二レベルのメモリ５０９にある。レベル３のＢＴＢテーブル５０７は、第三レベルのメモリ５１０にある。いくつかの実施形態によれば、１セットのレベル１のＢＴＢテーブル５０３がフルである場合、またはＢＴＢエントリのすべてのセットがフルである場合、ＢＴＢエントリは、レベル１のＢＴＢテーブル５０３から、複数の、または１セットのレベル２のＢＴＢテーブル５０４〜５０６のうちの１つに上書きされる、またはエビクトされる。レベル２のＢＴＢテーブル５０４〜５０６のそれぞれは、特定のターゲットアドレスサイズ、もしくはターゲットアドレスサイズの範囲に対して、または他の図に関連して説明されているような特定の分岐命令タイプに対して作成される。
【００２３】
レベル２のＢＴＢテーブル５０４、５０５、５０６のうちの１つがフルである場合、プロセッサ５００は、そこにＢＴＢエントリを上書きする、またはそこからＢＴＢエントリを第三レベルのメモリ５１０内のレベル３のＢＴＢテーブル５０７にエビクトする。いくつかの実施形態では、最下位のエントリなどのＢＴＢエントリは上書きされる。他の実施形態では、ＢＴＢエントリは、図示されていない１つ以上のＢＴＢテーブルのうちの１つにエビクトされる。そのような他のＢＴＢテーブルは、別のレベルのメモリ５０８〜５１０内のＢＴＢテーブルなどの同じ、もしくは別のメモリに、またはプロセッサ内の別の位置に、またはプロセッサコア５０１の外部のメモリに、またはバスもしくはブリッジによってプロセッサ５００に結合されるメモリ内などのプロセッサ５００自体にあってもよい。例えば、エビクションは、レベル２のメモリ５０９内のオーバーフローＢＴＢテーブルに対するものである。いくつかの実施形態によれば、分岐タイプまたは分岐ターゲットアドレスサイズに基づいて、１サブセットのＢＴＢエントリのみ、例えば、ＢＴＢテーブル５０４、５０５、５０６のうちの１つの中のそれらのＢＴＢエントリのみをエビクトすることが可能である。
【００２４】
例示的な実施形態によれば、レベル２のＢＴＢテーブル５０４、５０５、５０６のそれぞれは、レベル２のメモリ５０９にある。いくつかの実施形態では、ＢＴＢテーブル５０４、５０５、５０６のそれぞれは、４ウェイアソシアティブである１，０２４個のエントリを含む。各ＢＴＢエントリは、サイズが６８ビット（６８ｂ）であり、最大３７ビットのターゲットサイズを記録することができる。３７ビットよりも大きいサイズのターゲットは、間接レベルを介して別のテーブルに記録されることができる。本明細書に記載されるサイズは、図３のＢＴＢテーブル３０１〜３０３、図４のＢＴＢテーブル４０１〜４０３、及び図５のＢＴＢテーブル５０３〜５０７などに可能なさまざまなサイズの例示である。いくつかの実施形態では、ＢＴＢテーブルは、仮想フェッチアドレスのハッシュを使用してインデックス付け及びタグ付けされる。
【００２５】
いくつかの実施形態によれば、ＢＴＢテーブルは、分岐予測サイクルあたり最大２つの分岐の予測をサポートする。他の実施形態では、プロセスサイクルまたは分岐予測サイクルあたり１つの分岐のみが評価される。好ましくは、ＢＴＢテーブルは、すべての分岐タイプ及びターゲットサイズをサポートする。各ＢＴＢエントリ、例えば図５のレベル１のＢＴＢテーブル５０３内のそれらのエントリは、予測アドレスから開始し、アライメントされた６４Ｂの終了、または第一静的分岐の終了、または予測ウィンドウ内の「最後ではない」（ＮＬＩＰＷ）第一動的分岐もしくは分岐対のいずれか早い方の終了まで延びる予測ブロックに関する、最大２つのターゲット、及び付随する分岐情報を格納する。
【００２６】
いくつかの実施形態によれば、プロセッサ設計に応じて、ＢＴＢテーブル内の各エントリは、ある特定のフィールドを含む。説明するために、図６は、いくつかの実施形態によるＢＴＢテーブルについてのＢＴＢエントリ６００のブロック図である。図６では、以下は、ＢＴＢテーブルについての６８ビットエントリに関するＢＴＢエントリ６００内のそれぞれの位置ビットでのフィールドの記述であり、各ＢＴＢエントリ６００は、ゼロ（０）から６７までインデックス付けされる６８ビットを含む。ビットのサイズまたは数は一例に過ぎず、他のサイズ及びビット分布は本明細書に提供されるガイドラインを使用して実装されてもよい。ＡＵＸＰＲＥＤＥＮ６０１は、位置［６７］における１ビットであり、補助予測器の有効化を示す。ＳＨＲＤ６０２は、位置［６６］における１ビットであり、エントリがスレッド間で共有されているか、共有可能であるかを示す。ＴＩＤ６０３は、位置［６５］における１ビットであり、スレッド識別子（ＩＤ）を示す。ＴＡＧ６０４は、位置［６４：５２］に位置している１３ビットであり、分岐エントリについてのタグを格納する。ＬＥ６０５は、位置［５１：５０］における２ビットであり、符号長または「レングス符号化」を示す。ＬＥ６０５の状態は、これらの値１，１と１，０と０，１に関する状態を含む。ＰＡＩＲ６０６は、位置［４９］における１ビットであり、オーバーフローアドレスバッファと対になることを示す。ＢＲＴＹＰＥ６０７は、位置［４８：４４］内にある５ビットであり、以下でより詳細に説明されるように、分岐タイプの符号化を示す。ＢＲ１ＥＮＤ６０８は、位置［４３：３８］にある６ビットであり、［５：０］の範囲に関して１インクリメントされ得るＢｒａｎｃｈ１のエンドポインタを示す。
【００２７】
ＬＥ６０５及びＰＡＩＲ６０６の状態は、合わせて、各（第一レベルまたは第二レベルの）ＢＴＢエントリの位置［３７：０］におけるビットがどのように使用されるかを示す。ＵＳＥＯＶＥＲＦＬＯＷ（ＵＳＥＯＡ）６０９は、位置［３７］における１ビットであり、オーバーフローアドレスバッファの使用を示す。例えば、位置［４８：３２］にあるターゲットは、オーバーフローアドレス識別子ＯＡＩＤＸ６１０（以下を参照）として示されるオーバーフローアドレスバッファのエントリからのものであり、ＰＡＩＲ＝０の場合に使用される。ＯＡＩＤＸ６１０は、位置［３６：３２］にある５ビットであり、オーバーフローアドレスバッファのインデックスを示す。ＯＡＩＤＸ６１０は、ＰＡＩＲ＝０及びＵＳＥＯＡ＝１の場合に使用される。ＢＲ０ＥＮＤ６１１は、位置［３７：３２］における６ビットの代替の割り当て６１２であり、［５：０］の範囲に関して１インクリメントされ得るＢｒａｎｃｈ０のエンドポインタを示す。
【００２８】
ＢＲ０ＴＧＴ６１３は、インデックス（Ｘ＋１）から３１までの第一範囲６１５にわたるＢｒａｎｃｈ０ターゲット、または第一分岐ターゲットアドレスであり、ここでＸは整数であり、第一分岐ターゲットアドレスはＬＥ６０５の２ビットの状態に応じて可変長のものである。例えば、ＢＲ０ＴＧＴ６１３は、ＬＥ＝１，１についての位置［３１：２０］における１２ビットであり、ＢＲ０ＴＧＴ６１３は、ＬＥ＝１，０についての位置［３１：１６］における１６ビットであり、そしてＢＲ０ＴＧＴ６１３は、ＬＥ＝０，１についての位置［３１：１２］における２０ビットである。ＬＥ＝０，０の場合、ＢＲ０ＴＧＴ６１３は、有効ではない、または使用されない。
【００２９】
ＢＲ１ＴＧＴ６１４は、位置インデックス［０］から位置インデックス［Ｘ］までの第二範囲６１６にわたるＢｒａｎｃｈ１ターゲット、または第二分岐ターゲットアドレスであり、ここでＸは整数である。例えば、ＢＲ１ＴＧＴ６１４は、ＰＡＩＲ＝０及びＵＳＥＯＡ＝０の場合に位置［３６：０］において３７ビットであり、ＢＲ１ＴＧＴ６１４は、ＰＡＩＲ＝０及びＵＳＥＯＡ＝１の場合に位置［３１：０］において３２ビットであり、ＢＲ１ＴＧＴ６１４は、ＰＡＩＲ＝１及びＬＥ＝１，１の場合（ＢＲ０ＴＧＴ６１３は上記のように１２ビットである場合）に位置［１９：０］において２０ビットであり、ＢＲ１ＴＧＴ６１４は、ＰＡＩＲ＝１及びＬＥ＝１，０の場合（ＢＲ０ＴＧＴ６１３は上記のように１６ビットである場合）に位置［１５：０］において１６ビットであり、そしてＢＲ１ＴＧＴ６１４は、ＰＡＩＲ＝１及びＬＥ＝０，１の場合（ＢＲ０ＴＧＴ６１３は上記のように２０ビットである場合）に位置［１１：０］において１２ビットである。このようにして、ＢＴＢテーブルの各レベル１、レベル２、またはレベル３のＢＴＢエントリは、いくつかの実施形態による、２つの分岐ターゲットアドレスＢＲ０ＴＧＴ６１３及びＢＲ１ＴＧＴ６１４を格納することができる。
【００３０】
分岐タイプ符号化に関して、いくつかの実施形態によれば、５ビット分岐タイプは、Ｂｒａｎｃｈ１の以下の特性を示す。５ビット分岐タイプの最初の２ビットに対して、各分岐命令についての分岐タイプは、位置［１：０］において次の、値０，０に関する第一状態が無効に対応し、値０，１に関する第二状態がＪＭＰ（ジャンプタイプ）に対応し、値１，０に関する第三状態がＣＡＬＬ（呼び出しタイプ）に対応し、値１，１に関する第四状態がＲＥＴ（戻りタイプ）に対応するように指定される。５ビット分岐タイプの位置［２］において、１ビットは、値０についての固定ターゲット、及び値１についての可変ターゲットを指定する。分岐は、デフォルトによって固定ターゲットとしてインストールされ、これらの分岐がたとえＢＴＢエントリに最初にインストールされたものとは異なるターゲットを取得しても、間接分岐のみが可変ターゲットに変換される。
【００３１】
５ビット分岐タイプの最後の２ビットに対して、方向性ステータスは、次のスキームに従って位置［４：３］に提供される。直接固定分岐及び間接固定分岐は、位置［４：３］を見ることによって区別される。０，０の値は、ＤＥ（復号）リダイレクトを介して見つかる無条件直接（ＵＤ）に対応する。いくつかの実施形態によれば、ＵＤは静的であり、定義によって固定される。分岐が属しているレベル２のＢＴＢのテーブルを知るために、ＵＤには区別が必要とされる。位置［４：３］における１，０の値は、ＵＤではなく静的に対応する。これらの分岐は、デフォルトによる方向に関して静的としてインストールされ、条件分岐が不成立としてリダイレクトされる場合、条件分岐のみが動的方向に変換される。
【００３２】
位置［４：３］における１，１の値は、「ＵＤではなく、動的で、予測ウィンドウ内の最後（ＬＩＰＷ）」の状態に対応する。ＬＩＰＷは、プロセッサが６４Ｂキャッシュライン内の最後の分岐として識別するいずれかの分岐に設定される。このステータスは、ＢＴＢエントリではどの分岐も成立ではない場合に、ＢＴＢ読み出しロジックが次のフェッチアドレス（ＦＡ）を決定するのに役立つ。本来であれば、次のＦＡは、ＢＴＢエントリ内の最後の分岐の直後の命令アドレスであるが、ＬＩＰＷが設定されている（そしてどの分岐も成立ではないと仮定する）場合、次のＦＡは、シーケンシャルキャッシュラインアドレスである。位置［４：３］における０，１の値の状態は、「ＵＤではなく、動的ＮＬＩＰＷ」に対応する。
【００３３】
第一分岐が不成立であると予測されることができる場合にのみ、分岐ターゲットが対になる値を含むことから、Ｂｒａｎｃｈ０は、動的な固定ＪＭＰタイプの分岐のみであることができる。一実施形態では、分岐ターゲット対は、以下の特性を有する。対あたり１つの分岐のみが、可変ターゲットのものであることができる。これらの対は、Ｃａｌｌ／Ｃａｌｌ、Ｃａｌｌ／Ｒｅｔ、Ｒｅｔ／Ｃａｌｌ、またはＲｅｔ／Ｒｅｔを含むことができない。これらの対は、前述のように、複数のターゲットサイズの組み合わせをサポートする。対になることが可能であるかどうか、そしてどの組み合わせを使用するべきかを知るために、単一のタイプは、短い分岐予測ターゲット、中間の分岐予測ターゲット、及び長い分岐予測ターゲットの間で区別する。この区別も使用して、別のＢＴＢテーブルからオーバーフローレベル２のＢＴＢテーブルまたはレベル３のＢＴＢテーブルなどに、分岐ターゲットアドレスをビクティムにする、またはエビクトするときに、これらのＢＴＢテーブルのうちのどのＢＴＢテーブルを使用するべきかを選択する。
【００３４】
以下の説明は、例示的な一実施形態による、図４のＢＴＢテーブル４０１、４０２、４０３、及び図５のＢＴＢテーブル５０３〜５０７などの第一ＢＴＢテーブルの第一ＢＴＢ分岐ターゲットアドレスビットに関してさらなる詳細を提供する。いくつかの実施形態によれば、ターゲットアドレス相当の２つの分岐を格納し、分岐タイプなどに基づいて、これら２つの分岐に可能なケースの多くをカバーするために、ターゲットフィールドに３２ビットが必要とされる。必要なターゲットサイズは、直接分岐全体で１ビットから４９ビットまで変わるが、戻りタイプの分岐は、いかなるターゲットビットをも必要としない。可変ターゲット分岐について、発生した第一ターゲットは、本明細書でさらに説明されるようにＢＴＢにおいてトレーニングされ、他のターゲットは、間接ターゲット予測器においてトレーニングされる。
【００３５】
ターゲットフィールドは、ターゲット間で共有され、それぞれは、エントリが２つの分岐ターゲットアドレスを格納する場合に、通常、異なる長さを有する。可変長分岐を実装することにはタイミングの観点からコストがかかりすぎるため、ターゲットを格納する、より最適化されたアプローチは、２つの分岐に対して３つのターゲット長のバリエーションを使用し、図４のＢＴＢテーブル４０１、４０２、４０３、及び図５のＢＴＢテーブル５０４、５０５、５０６などのそれぞれのＢＴＢテーブルにおいて、ジャンプタイプ、呼び出しタイプ、戻りタイプなどの分岐タイプを使用して符号化することである。分岐ターゲットが大きすぎて、第二分岐のターゲットと並べて収めることができないケースがある。このようなケースでは、分岐は完全なターゲットアドレスまたはターゲットビットを格納するために独自のＢＴＢエントリを必要とする。２つのケースがあり、（１）その他の分岐タイプのフィールド及び終了フィールド（上記のとおり）がターゲットビットとして再利用される、エントリストレージあたりの単一の分岐、というケースがある。このメカニズムにより、３７ビットのターゲットアドレスにサポートが可能である。そして（２）ＯＡＩＤＸフィールドが指すオーバーフローアドレスエントリによって上位ビットが提供される、３７ビットより長いターゲット、というケースがある。第一ＢＴＢにヒットした後にオーバーフローアドレス構造を必要とするターゲットアドレスについてのリダイレクトは、追加のリダイレクトペナルティを負う。ＢＴＢ置き換えポリシーについての例として、いくつかの実施形態によれば、第一ＢＴＢテーブル４０１またはＢＴＢテーブル５０３は、置き換えポリシーの一部分としてラウンドロビンスキームを使用する。第一ＢＴＢテーブル内の２５６セットのそれぞれは、２ビットのラウンドロビン（ＲＲ）カウンタを含む。
【００３６】
図１の命令パイプラインアーキテクチャ１００、図４のプロセッサ４００、または図５のプロセッサ５００などにおける、パイプラインに関して、ＢＴＢテーブルは、省電力のために読み出しが抑制されない限り、すべての予測フローについて読み出される。いくつかの実施形態によれば、第一ＢＴＢ読み出しは、ＢＰ０と指定される第一ステップで開始される。後続のステージは、予測パイプラインにおけるステージのようなＢＰ１、ＢＰ２などとして設計される。ＢＴＢテーブルは、ＢＰ２からＢＰ０にリダイレクトする。
【００３７】
図４のプロセッサ４００、及び図５のプロセッサ５００などのプロセッサのいくつかの実施形態によれば、上記のように、ＢＴＢテーブル４０１、４０２、４０３、及びテーブル５０４、５０５、５０６に具現化されるような３つの論理テーブルがある。ＢＴＢテーブルの各テーブルは、図４のような分岐タイプ、または図３のようなターゲットサイズのサブセットをサポートする。ＢＴＢテーブル４０１〜４０３、５０３〜５０７に具現化される、そのようなマルチテーブルＢＴＢは、いくつかの利点を提供する。例えば、そのような配置は、プロセッサでは面積効率がよい。各ＢＴＢテーブル４０１〜４０３、５０４〜５０６は、その分岐タイプまたはターゲットサイズのサブセットについてストレージ容量のみを有する。いくつかの実施形態では、各ＢＴＢテーブルは高い連想度を提供するが、ある特定の実施形態では、各ＢＴＢテーブル４０１〜４０３、５０４〜５０６はフルＬＲＵを実装することができる。高い実際の連想度を使用することは、実装するのにコストがかかる。複数のＢＴＢテーブルの使用は、より高い値の分岐（例えば、対になった分岐、及び動的分岐）を他の分岐と区別する。複数のＢＴＢテーブル３０１〜３０３、４０１〜４０３、５０３〜５０７は、無制限の分岐ターゲットサイズをサポートするが、複数のＢＴＢテーブル３０１〜３０３、４０１〜４０３のうちの１つのＢＴＢテーブルのみが全分岐ターゲットアドレスサイズをサポートする必要がある。複数のＢＴＢテーブルの使用は、プロセッサフロアプランの柔軟性を向上させる。例えば、ＢＴＢテーブル４０１〜４０３のうちの２つのみが、動的分岐をサポートする必要がある。したがって、これらのＢＴＢテーブルは、条件予測器の近くに配置されることができる。動作中に、プロセッサの特定の実施形態によれば、ＢＴＢテーブルのうちの２つのみが、著しい数のターゲットアドレスビットを駆動する。
【００３８】
以下は、例示的なＢＴＢ構成及びサイズ設定スキームに関するさらなる詳細を提供する。第一ＢＴＢテーブル４０１などの第一ＢＴＢテーブル（インデックス０）は、小さなエントリを格納する。第二ＢＴＢテーブル４０２などの第二ＢＴＢテーブル（インデックス１）は、ＤＥリダイレクトを通して探索される分岐（例えば、これらの分岐は低いリダイレクトペナルティを有する）を格納する。第三ＢＴＢテーブル４０３などの第三ＢＴＢテーブル（インデックス２）は、すべての他のタイプを格納する。例えば、分岐タイプは次のように割り振られる。第一ＢＴＢテーブルは、単一のＲＥＴ分岐タイプ、及び単一の静的固定条件付きＪＭＰの短い分岐タイプについてのアドレスを格納する。第二ＢＴＢテーブルは、「超長」分岐タイプではない単一の静的固定無条件直接呼び出し、及び超長分岐タイプではない単一の静的固定無条件直接ジャンプを格納する。第三ＢＴＢテーブルは、すべての他の分岐タイプを格納する。他の数のＢＴＢテーブル、ならびに他のタイプ及びターゲットサイズの割り振りは、図３〜５に関連して説明されるものを超えることができる。
【００３９】
ＢＴＢテーブルの容量の一実施例は、合計５，６３２個のＢＴＢエントリを含む例示的実施態様では次の通りである。第一ＢＴＢテーブルは、合計２，０４８個のＢＴＢエントリについて、５１２セット及び４ウェイを含む。第一ＢＴＢエントリは、小計７３，７２８ビットについて、エントリあたり３６ビットを含む。第二ＢＴＢテーブルは、合計１，０２４個のＢＴＢエントリについて、２５６セット及び４ウェイを含む。第二ＢＴＢエントリは、小計６５，５３６ビットについて、エントリあたり６４ビットを含む。第三ＢＴＢテーブルは、合計２，５６０個のＢＴＢエントリについて、５１２セット及び５ウェイを含む。第三ＢＴＢエントリは、小計１８４，３２０ビットについて、エントリあたり７２ビットを含む。合計では、ＢＴＢテーブルのセットは、１３ウェイ、５，６３２個のエントリを含み、図４の指定領域４０６などの１つ以上の指定領域内の要素などの３２３，５８４ビットを必要とする。
【００４０】
この実施例では、マルチテーブルのＢＴＢテーブルについて、オーバーフローアドレスバッファは、図４の複数のＢＴＢテーブル４０１〜４０３のセット、または図５のＢＴＢテーブル５０４〜５０６のセットの間で共有される。分岐タイプ符号化は、第一ＢＴＢテーブル４０１、５０４、第二ＢＴＢテーブル４０２、５０５、及び第三ＢＴＢテーブル４０３、５０６の間で異なる。ただし、｛ＬＥ、ＰＡＩＲ、ＴＹＰＥ｝に従って定義されたＢＴＢ分岐タイプと、｛ＴａｂｌｅＮｕｍｂｅｒ、ＬＥ、ＰＡＩＲ、ＴＹＰＥ｝に従って記述されたＢＴＢテーブル分岐タイプとの間には直接マッピングがある。これらのＢＴＢ記述（フィールド）は、スワップ及びＢＴＢエビクション中に使用される。
【００４１】
他の実施形態によれば、図４の第一ＢＴＢテーブル４０１などの第一ＢＴＢテーブル内のＢＴＢエントリに対するフィールド及び位置ビットについて、これらのフィールド及び位置ビットは、位置［３５：３４］における２ビットに関するＵＮＵＳＥＤ、位置［３３］における１ビットに関するＳＨＲＤ、位置［３２］における１ビットに関するＴＩＤ、位置［３１：２０］における１２ビットに関するＴＡＧ、位置［１９：１４］における６ビットに関するＢＲＥＮＤ、位置［１３：１２］における２ビットに関するＢＲＴＹＰＥ、位置［１１：０］における１２ビットに関するＢＲＴＧＴを含む。ＵＮＵＳＥＤフィールドは、対応するマクロ位置に未使用のビットがあるかどうかを示す。ＳＨＲＤフィールドは、ＢＴＢエントリがスレッド間で共有されるか、共有可能であるかを示す。ＴＩＤフィールドはスレッドＩＤである。ＢＲＥＮＤフィールドは、［５：０］の範囲に関して１インクリメントされ得る、分岐エンドポインタである。ＢＲＴＹＰＥフィールドは、分岐タイプ符号化を示す。いくつかの実施形態によれば、第一ＢＴＢテーブル４０１は、ＲＥＴ（戻り）タイプの分岐、及び少なくとも１つのタイプのＪＭＰ分岐を含むいくつかのタイプの分岐に関する情報を含む。いくつかの実施形態によれば、ＢＲＴＹＰＥフィールドは、戻りタイプについての全分岐タイプを記録する位置［４：０］におけるＢＲＴＧＴに関して、以下の、状態０，Ｘ（Ｘは０または１であることができる）が無効状態に対応し、値１，０に関する状態がＪＵＭＰに対応し、値１，１に関する状態がＲＥＴに対応するように符号化される。
【００４２】
図７は、いくつかの実施形態による、第二ＢＴＢテーブルについてのＢＴＢエントリ７００のブロック図である。以下は、図４の第二ＢＴＢテーブル４０２、または図５の第二ＢＴＢテーブル５０５などの第二ＢＴＢテーブル内のＢＴＢエントリについてのフィールド及び位置ビットの記述である。図７の各ＢＴＢエントリ７００は、図６のＢＴＢエントリ６００よりも短い、６４ビット幅である。図７では、ＢＴＢエントリ７００は、以下の、位置［６３］における１ビットに関するＳＨＲＤ７０１、位置［６２］における１ビットに関するＴＩＤ７０２、位置［６１：４９］における１３ビットに関するＴＡＧ７０３、位置［４８：４７］における２ビットに関するＬＥ７０４、位置［４６：４５］における２ビットに関するＢＲＴＹＰＥ７０５、位置［４４：３９］における６ビットに関するＢＲＥＮＤ７０６、位置［３８：０］における３９ビットに関するＢＲＴＧＴ７０７というフィールドを含む。ＳＨＲＤ７０１は、ＢＴＢエントリがスレッド間で共有されるか、共有可能であるかを示す。ＴＩＤ７０２はスレッドＩＤである。ＬＥ７０４は、レングス符号化を指し、第一ＢＴＢテーブル４０１などの第一ＢＴＢテーブルのＬＥ６０５についてのものと同じ符号化を用いる。ＢＲＴＹＰＥ７０５は、分岐タイプ符号化を示す。いくつかの実施形態によれば、第二分岐タイプＢＴＢは、無条件直接分岐のみなど、ただ１つの分岐タイプに関する情報を含む。このフィールドは、ＪＭＰ、ＣＡＬＬ、及び無効の間の区別を符号化するためのものである。いくつかの実施形態による第二分岐タイプのＢＴＢについてのＢＲＴＹＰＥは、以下の、値０，０に関する状態が無効状態に対応し、値０，１に関する状態がＪＭＰ（ジャンプ）分岐タイプに対応し、値１，０に関する状態がＣＡＬＬ分岐タイプに対応し、値１，１に関する状態が別の不正状態に対応するように符号化される。第二ＢＴＢエントリ７００についてのＢＲＥＮＤ７０６は、［５：０］の範囲に関して１インクリメントされる分岐エンドポインタである。ＢＲＴＧＴ７０７は、第一ＢＴＢエントリ６００についてのものと同じまたは同様のフォーマットに従った分岐ターゲットである。オーバーフローアドレスバッファに利用可能なアドレスの追加のビットを必要とする分岐は、図８のＢＴＢエントリ８００などでの第三分岐タイプのＢＴＢに割り当てられる。したがって、１ビットのＵＳＥＯＡフィールドは、アドレスの追加のビットについての必要性に対応するために、いくつかの実施形態による第二分岐タイプのＢＴＢに含まれない。本明細書で言及されるように、ＯＡは、オーバーフローアドレス、またはその中の特定のフィールド、ビット、もしくはフラグを指す。
【００４３】
図８は、いくつかの実施形態による、第三ＢＴＢテーブルについての第三ＢＴＢエントリ８００のブロック図である。以下は、図４の第三ＢＴＢテーブル４０３、または図５の第三ＢＴＢテーブル５０６内のＢＴＢエントリなどについての、第三分岐タイプのＢＴＢエントリ８００内のエントリについてのフィールド及び位置ビットの記述である。各ＢＴＢエントリ８００は、ゼロ（０）から７１までインデックス付けされた７２ビット幅であり、以下の、位置［７１］における１ビットに関するＵＮＵＳＥＤ８０１、位置［７０］における１ビットに関するＡＵＸＰＲＥＤＥＮ８０２、位置［６９］における１ビットに関するＳＨＲＤ８０３、位置［６８］における１ビットに関するＴＩＤ８０４、位置［６７：５６］における１２ビットに関するＴＡＧ８０５、位置［５５：５４］における２ビットに関するＬＥ８０６、位置［５３：５２］における２ビットに関するＢＲ１ＬＢＩＡＳ８０７、位置［５１］における１ビットに関するＰＡＩＲ８０８、位置［５０：４６］における５ビットに関するＢＲＴＹＰＥ８０９、位置［４５：４０］における６ビットに関するＢＲ１ＥＮＤ８１０、及び位置［３９：３８］における２ビットに関するＢＲ０ＬＢＩＡＳ８１１というフィールドを含む。フィールド｛ＢＲＥＮＤ８１２，ＢＲＴＧＴ８１４｝のグループは、位置［３７：０］においてそれぞれの可変長範囲８１３、８１５にわたって分散される。例えば、ＢＲＥＮＤ８１２は、（Ｙ＋１）から３７に置かれており、ＢＲＴＧＴ８１４は、０から（Ｙ）に置かれており、ここでＹは整数である。ＵＮＵＳＥＤ８０１は、対応するマクロ位置に未使用のビットがあるかどうかを示す。ＡＵＸＰＲＥＤＥＮ８０２は、ループ出口予測器などの補助予測器の有効化を示す。ＳＨＲＤ８０３は、ＢＴＢエントリがスレッド間で共有されるか、共有可能であるかを示す。ＴＩＤ８０４はスレッドＩＤである。ＬＥ８０６は、レングス符号化を指し、第一ＢＴＢテーブル４０１などの第一ＢＴＢテーブルの同じＬＥフィールドについてのもの、及び図６のＬＥ６０５に関して上述されるようなものと、同じ符号化を使用する。図８では、ＢＲ１ＬＢＩＡＳ８０７は、Ｂｒａｎｃｈ１についてローカルバイアスがあるかどうかを示す。ＰＡＩＲ８０８は、本明細書の他の箇所でさらに説明されるように使用される。いくつかの実施形態による第三分岐タイプのＢＴＢエントリ８００についてのＢＲＴＹＰＥ８０９は、第一ＢＴＢエントリ６００などの他のＢＴＢテーブルに関するＢＲＴＹＰＥについて説明されるように符号化される。第三分岐タイプのＢＴＢエントリ８００についてのＢＲ１ＥＮＤ８１０は、［５：０］の範囲に関して１インクリメントされるＢｒａｎｃｈ１についての分岐エンドポインタである。ＢＲ０ＬＢＩＡＳ８１１は、Ｂｒａｎｃｈ０についてローカルバイアスがあるかどうかを示す。ＢＲＥＮＤ８１２及びＢＲＴＧＴ８１４は、第一ＢＴＢテーブル４０１などの第一ＢＴＢテーブルからのフィールドＵＳＥＯＡ、ＯＡＩＤＸ、ＢＲ０ＥＮＤ、ＢＲ１ＴＧＴ、及びＢＲ０ＴＧＴに関連して、それぞれ、Ｂｒａｎｃｈ０及びＢｒａｎｃｈ１について１つまたは２つの分岐ターゲットを格納するために使用される。第一、第二、及び第三分岐タイプのＢＴＢテーブル４０１〜４０３、及びそれぞれのＢＴＢエントリ６００、７００、８００を参照して記述されるビット（幅）及び位置の数は、一例に過ぎない。プロセッサまたはシステムに複数のＢＴＢテーブルを実装する場合、記述されたフィールド、または他の変数もしくはフィールドについてのビット及び位置の他の数が可能である。
【００４４】
例示的な複数のＢＴＢテーブル置き換えポリシーに関して、いくつかの可能な実施形態の１つとして以下が提供される。この実施形態では、第一のレベル１のＢＴＢテーブルは、１セットのエントリのうちの１つ以上がフルになるまで、すべてのＢＴＢエントリを最初に許容し、この実施例でのセットは、エントリのセット関連グループのセットを指す。別の実施例では、第一のレベル１のＢＴＢテーブルは、レベル１のＢＴＢテーブルがフルになるまで、すべてのＢＴＢエントリを最初に許容する。次に、プロセッサまたはプロセッサコアが動作すると、ＢＴＢエントリは、複数のレベル２のＢＴＢテーブルのうちの１つにエビクトされ、これら複数のレベル２のＢＴＢテーブルは、図３のＢＴＢテーブル３０１〜３０３、及び図４のＢＴＢテーブル４０１〜４０３などの、ターゲットアドレスサイズまたは分岐タイプに基づいてそれぞれ設計される。例えば、置き換えポリシーは、図３のＢＴＢテーブル３０１〜３０３、及び図４のＢＴＢテーブル４０１〜４０３などの各レベル２のＢＴＢテーブルについてのフルＬＲＵである。分岐タイプのＢＴＢ置き換えポリシーは、最近最も使用されていない（ＬＲＵ）か、最近最も使用された（ＭＲＵ）かいずれかとしてエントリをマーク付けすることをサポートする。セットのウェイは、ウェイがクリアされた後にＬＲＵとしてマーク付けされることにより、次回、そのセットに新しいＢＴＢエントリが書き込まれ、空いたエントリが置き換えられ、有効なエントリは上書きされない。ウェイがインストールされた後、ウェイはＭＲＵとしてマーク付けされることにより、ウェイは置き換えのためにキューの最後に移動する。以下の表１は、レベル１がレベル１のメモリを指すケース、レベル２がレベル２のメモリを指すケースなどを詳述する。
【表１】
2021530782.tif 000003
【００４５】
以下の記述は、いくつかの実施形態によるパイプライン操作に関連するさらなる詳細を提供する。分岐タイプのＢＴＢは、パワーフィルタによってキャンセルされない限り、予測フローごとに読み出される。読み出しは、第一位置ＢＰ０で開始され、ＢＰ４からＢＰＮ１にリダイレクトされ、ここでＮは後続のサイクルを指す。レベル１のＢＴＢはミスする／レベル２のＢＴＢはヒットするというスワップケースのパイプラインタイミングを以下の表２に示す。レベル１のＢＴＢからのビクティムウェイと、レベル２のＢＴＢからのヒットウェイとの両方が記録される。ビクティムウェイは、特別な配慮を必要とする、ヒットウェイとは異なるレベル２のＢＴＢテーブル及びバンクを含むことができる。例えば、レベル２のビクティムバンクは、ＬＲＵ状態に基づいて選択され、上書きされる。レベル１のＢＴＢ、及びレベル２のＢＴＢへの書き込みは、実際の書き込みが位置ＢＰ５にありながら、ＢＰ４にアサートされる書き込みイネーブル（ＷｒＥｎ）信号によって発生する。
【表２】
2021530782.tif 000004
【００４６】
以下の記述は、いくつかの実施形態による、図４のプロセッサ４００などのプロセッサにおけるレベル２のＢＴＢ物理構成に関するさらなる詳細を提供する。第一のレベル２のＢＴＢテーブルは、４ウェイに関する５１２セット、エントリあたり３６ビット、セットあたり２個のマクロ、７２ｂのマクロタイプ、及び合計８個のマクロを含む。第二のレベル２のＢＴＢテーブルは、４ウェイに関する２５６セット、エントリあたり６４ビット、セットあたり４個のマクロ、６４ｂのマクロタイプ、及び合計８個のマクロを含む。第三のレベル２のＢＴＢテーブルは、５ウェイに関する５１２セット、エントリあたり７２ビット、セットあたり５個のマクロ、７２ｂのマクロタイプ、及び合計２０個のマクロを含む。
【００４７】
インデックスの１つ以上の上位ビットは、読み出しイネーブルとして使用されるため、１つのマクロの半分だけが第一のレベル２のＢＴＢテーブルについてのウェイあたりの読み出しであり、１つのマクロが第二及び第三のレベル２のＢＴＢテーブルについてのウェイあたりの読み出しである。第一及び第三のレベル２のＢＴＢテーブルが図４のレベル１のＢＴＢテーブル４０１などのレベル１のＢＴＢテーブルの２倍多いセットを含むことから、タグの下位ビットは、これらのＢＴＢテーブルについてのインデックスの最上位ビット（ＭＳＢ）として使用されるので、ＢＴＢテーブルは、１２ビットのタグのみを格納する必要がある。
【００４８】
比較的小型のクライアントデバイスまたは携帯電話用のプロセッサの実施形態では、複数の分岐タイプのＢＴＢテーブルの使用は、パフォーマンスに比べて高い電力コストを有するため、消費電力を減らす追加の方法を実行することができる。例えば、静的な方法は、一部またはすべての時間についてのレベル２のＢＴＢテーブルのパワーゲーティングと、一部またはすべての時間についてのレベル２のＢＴＢテーブルのクロックゲーティングを含む。各ステップでは、ＢＩＯＳまたはヒューズなどによってレベル２のＢＴＢイネーブル機能を構成することができる。消費電力を減らす動的な方法は、特定のレベル２のＢＴＢテーブルがいつ必要になるかを認識する追加の制御によって適応的にレベル２のＢＴＢテーブルをパワーゲーティングすることを含む。別の動的な方法は、アプリケーションによる電力の好ましい使用に応じて、またはアプリケーションがアクティブであるオペレーティングシステム、ファームウェア、もしくはデバイスの電力設定に応じて、アプリケーションがレベル２のＢＴＢテーブルのその使用を適応させるように、オペレーティングシステム、ファームウェアなどによって実行されるアプリケーションを適応させることを含む。
【００４９】
以下の記述は、図３の第一ＢＴＢテーブル３０１、第二ＢＴＢテーブル３０２、及び第三ＢＴＢテーブル３０３、ならびに図４の対応する類似のテーブルなどの複数のＢＴＢテーブルによる使用のためのオーバーフローアドレスバッファに関するさらなる詳細を提供する。予測構造にすべてのビットを格納する必要なしに、最大４９ビットのターゲットサイズの分岐をサポートするために、オーバーフローアドレスバッファは、プロセッサに提供される。オーバーフローアドレスバッファを使用して、ある特定のビット数、例えば分岐ターゲットアドレスの先頭の、または１セットの１７ビットなどを格納する。いくつかの実施形態によれば、ＢＴＢテーブルなどの予測器構造によって参照される先頭の１７ビットがポインタを介してオーバーフローアドレスバッファにあることによって、ＢＴＢテーブル内のストレージスペースを節約する。オーバーフローアドレスバッファは、多数のターゲットアドレスビットを格納するために必要とされる場合に使用される。テストによれば、トレース分析は、所与のトレースについて、フェッチアドレスの先頭の１７ビットが、１セットの命令内のさまざまな分岐に対して限られた数の値のみを取ることを示す。
【００５０】
いくつかの実施形態によれば、オーバーフローアドレス（ＯＡ）バッファは、３２個のエントリを含み、各エントリは、本明細書で説明されるように、位置［４８：３２］におけるＢＴＢエントリ内の位置に仮想アドレスについての単一のフィールドを含む。各オーバーフローアドレスバッファのエントリは、スレッド間で共有される。予測時に、オーバーフローアドレスバッファは、ＢＴＢが提供する５ビットのポインタに基づいて、アドレスの先頭の１７ビットをＢＴＢに提供する。ポインタが予測器の１つに記録されたことから、予測時に使用されたオーバーフローアドレスバッファのエントリが上書きされた可能性がある。このような場合には、予測は、誤っており、リダイレクトされることにより、予測器が訂正させられる。異なる予測器は、予測パイプの異なるステージにおいてオーバーフローアドレスバッファを読み出すため、オーバーフローアドレスバッファからの複数の同時読み出しを必要とする。
【００５１】
オーバーフローアドレスバッファは、ＢＴＢのトレーニング中に次のように割り振られる。分岐ターゲットが範囲［４８：３２］についての現在のアドレスと異なるかどうかをトレーニングが最初に判定する場合には、オーバーフローアドレスバッファが必要とされる。オーバーフローアドレスバッファが必要とされる場合、現在のオーバーフローアドレスバッファのエントリを、位置［４８：３２］におけるターゲットアドレスと比較して、オーバーフローアドレスバッファのエントリが位置［４８：３２］における所望のターゲットアドレスをすでに含むかどうかを判定する。マッチング時に、マッチングするオーバーフローアドレスバッファのインデックスは、予測器のＢＴＢテーブルに記録される。オーバーフローアドレスバッファのエントリが位置［４８：３２］におけるターゲットにマッチングしない場合、フルＬＲＵ置き換えポリシーを使用して、オーバーフローアドレスバッファに新しいエントリが割り振られる。いくつかの実施形態によれば、書き込みをトレーニングすることは、投機的であり、いくつかのオーバーフローアドレスバッファのエントリは、不適切なパス上にありながら割り振られたために、全く有用ではないものが割り振られる場合がある。
【００５２】
以下の記述は、ＢＴＢトレーニングに関連するさらなる詳細を提供する。予測がリダイレクトされる（予測パイプラインの復号及び実行ステージなどにおいて）ときに、ＢＴＢテーブルをトレーニングアルゴリズムによって更新し、この予測がプログラムシーケンス中に再度発生するときに、予測アドレスでの予測精度を向上させる。リダイレクトを受信するときに、リダイレクトソースからのリダイレクトタイプ、分岐ターゲット、及びＥｎｄＡｄｄｒを、予測履歴バッファからの予測分岐タイプ、分岐ターゲット、ＥｎｄＡｄｄｒ、及び他の状態とともに使用して、どの種類のトレーニング／更新アクションが必要とされるかを決定する。
【００５３】
次のリダイレクトのケースは、１つのＢＴＢテーブル、または１セットのＢＴＢテーブルをトレーニングする必要がある。ケース１：成立と予測された分岐がいかなる分岐ともマッチングしなかったことは、予測に使用されたＢＴＢエントリを無効にすることに対応する。ケース２：予測された分岐がないことは、ＢＴＢで新しく見つかった分岐をトレーニングにすることに対応する。ケース３：リダイレクトされた分岐ＥｎｄＡｄｄｒは、いずれかの予測された分岐のＥｎｄＡｄｄｒにマッチングせず、ＢＴＢで新しく見つかった分岐をトレーニングすることに対応する。ケース４：リダイレクトされた分岐ＥｎｄＡｄｄｒは、予測された分岐のＥｎｄＡｄｄｒにマッチングするが、Ｔｙｐｅにはマッチングせず、ＢＴＢで分岐タイプを更新することに対応する。この４番目のケースは、分岐を動的または可変としてマーク付けするために分岐タイプを変更する必要がある場合のケースを含む。
【００５４】
ＢＴＢトレーニングプロセスは、トレーニングパイプを介して行われる。各スレッドは、スレッドについて最後に確認されたリダイレクトに関する情報を捕捉し、ＢＴＢ更新が要求されているかどうかを示す誤予測レジスタに関連付けられる。トレーニングパイプは、要求に基づいて２つのスレッド間で選択し、両方のスレッドがＢＴＢトレーニングを同時に要求するときに発生する要求競合の場合に、ラウンドロビンを介して調停する。一般に、一方のスレッドについてのトレーニングは、他方のスレッドがすでにトレーニングパイプにある間に開始することができる。ただし、他方のスレッドが同じＢＴＢインデックスについて現在トレーニングされており、この同じインデックスでの第二トレーニングによって可視であるＢＴＢテーブルを時間内に更新しない場合、スレッドは選択されることができない。ＢＴＢトレーニングは、投機的に起こり、誤ったパスでリダイレクトが発生することにより、ＢＴＢを更新させる可能性がある。ただし、誤予測レジスタが上書きされる場合、スレッドに対して進行中のトレーニングはキャンセルされる。
【００５５】
トレーニングパイプは、トレーニング要求が与えられるサイクルＢＴＮ２で開始し、サイクルＢＴＮ１、サイクルＢＴ０、サイクルＢＴ１、サイクルＢＴ２、サイクルＢＴ３、サイクルＢＴ４が続き、ＢＴＢが書き込まれるサイクルＢＴ５で完了する。いくつかの実施形態によれば、図４の第一ＢＴＢテーブル４０１などの第一ＢＴＢテーブルのみが、新しいエントリ、または変更されたエントリによって更新される。トレーニングパイプは、１サイクルの間、予測パイプをストールするｔｒａｉｎ−ｃｈｅｃｋ−ｒｅａｄ（ＴＣＲ）プロセスを開始する。ＴＣＲプロセスの１つの目的は、エントリがトレーニングルックアップ位置において現在、レベル１のＢＴＢに存在するか、レベル２のＢＴＢテーブルのうちの１つに存在するかを確認することである。マッチングがレベル２のＢＴＢテーブルで見つかる場合、ＴＣＲプロセスは、レベル２のＢＴＢと、レベル１のＢＴＢとの間にスワップをトリガした後に、トレーニングフローを繰り返す。
【００５６】
レベル２のＢＴＢにヒットしないＴＣＲプロセスに続いて、さまざまなトレーニングタスクが次のように処理される。無効化は、ＴＣＲがヒットする場合にのみ実行される。新しい書き込み及び更新について、ＢＴＢ更新トレーニングは、誤予測された分岐をＢＴＢエントリヒットとマージする、新しいＢＴＢエントリを作成する、またはこれら両方のアクションを実行する。さまざまなシナリオは次のとおりである。ＴＣＲプロセスがレベル１のＢＴＢでミスするときに、置き換えポリシーに基づいてウェイを選択すること、及び該当する場合には選択されたエントリをレベル２のＢＴＢにエビクトすることなどによって、ルックアップアドレスに新しいＢＴＢエントリを作成する。いくつかの実施形態では、ＴＣＲプロセスは、本明細書に記載されるようにミスを考慮し、後続のステップを実行するときに、ＢＴＢテーブルの３つのレベルのうちの３つすべてのエントリをチェックする。
【００５７】
ＴＣＲプロセスがＢＴＢテーブルでヒットするなど、レベル１のＢＴＢでヒットするときに、ルックアップアドレスには既存のＢＴＢエントリがある、すなわち、このＢＴＢエントリにはすでに１つまたは２つの分岐がある。トレーニングタスクが更新である場合、誤予測ＥｎｄＡｄｄｒは、見つかった分岐のうちの１つにマッチングする。それ以外は、新しい分岐を導入する必要がある。ＢＴＢに書き戻される必要がある、最大３つの分岐がある。これらの分岐は、ＥｎｄＡｄｄｒに基づいて順序付けされ、Ｐｏｓ０、Ｐｏｓ１及びＰｏｓ２とラベル付けされる。次のケースは、以下のとおりに処理される。ケース１は、Ｐｏｓ０のみが有効である場合に発生する。次に、ＴＣＲルックアップアドレスにおいて、Ｐｏｓ０分岐をトレーニングすることを実行する。ケース２は、Ｐｏｓ０及びＰｏｓ１のみが有効である場合に発生する。Ｐｏｓ０及びＰｏｓ１の分岐を対にすることができる場合、この対をトレーニングすることを、ＴＣＲルックアップアドレスで実行する。それ以外は、Ｐｏｓ１が誤予測された分岐である場合、ＴＣＲルックアップアドレスではＰｏｓ０のみを、予測ウィンドウ内の「最後ではない」（ＮＬＩＰＷ）としてトレーニングし、Ｐｏｓ１に対して新しいトレーニングフローをＰｏｓ０ＥｎｄＡｄｄｒ＋１ルックアップアドレスで開始する。Ｐｏｓ１が誤予測された分岐ではない場合、トレーニングはドロップされる。ケース３は、Ｐｏｓ０、Ｐｏｓ１及びＰｏｓ２が有効である場合に発生する。Ｐｏｓ０分岐及びＰｏｓ１分岐を対にすることができる場合、この対をＴＣＲルックアップアドレスではＮＬＩＰＷとしてトレーニングし、Ｐｏｓ２が誤予測された分岐である場合、Ｐｏｓ２に対して新しいトレーニングフローをＰｏｓ１ＥｎｄＡｄｄｒ＋１ルックアップアドレスで開始する。Ｐｏｓ２が誤予測された分岐ではない場合、トレーニングはドロップされる。それ以外は、Ｐｏｓ０のみをＴＣＲルックアップアドレスではＮＬＩＰＷとしてトレーニングする。Ｐｏｓ０が誤予測された分岐ではない場合、誤予測された分岐に対して新しいトレーニングフローをＰｏｓ０ＥｎｄＡｄｄｒ＋１ルックアップアドレスで開始する。ここでも、Ｐｏｓ１、Ｐｏｓ２、またはＰｏｓ１及びＰｏｓ２の両方をドロップする。
【００５８】
上記のトレーニングプロセスは、誤予測された分岐の前のすべての分岐を保持しようとし、誤予測された分岐をＴＣＲフローによってインストールしようとする。各リダイレクトは、２つ以下のトレーニングフローをトリガするように制限されているため、誤予測された分岐をトレーニングすることが保証されない。ただし、エントリをＮＬＩＰＷとマーク付けすることにより、次の予測を引き起こし、予測ウィンドウをいくつかの予測に分割するため、新しい分岐を最終的にトレーニングすることができる。各ルックアップアドレスでのＴＣＲフローは、レベル１／レベル２のＢＴＢスワップをトリガし、ＴＣＲフローをリプレイさせる。その結果、所与のリダイレクトに対して最大４つのＴＣＲフローが発生することができる。
【００５９】
図９は、いくつかの実施形態による、複数のＢＴＢテーブルのうちの１つにターゲットアドレスサイズごとに分岐ターゲットアドレスを格納する方法９００である。方法９００は、図１に示される命令パイプラインアーキテクチャ１００のいくつかの実施形態、図２に示される処理システム２００のいくつかの実施形態、及び図３のプロセッサ３００のいくつかの実施形態において実施される。図示された実施形態では、プロセッサ命令は、図３に示されるプロセッサ３００内のプロセッサコア３０５などの処理システム内の１つ以上のプロセッサコア上での実行のために、行われているか、割り振られているか、スケジュールされている。本明細書に考察されるように、プロセッサ命令は分岐命令を含む。
【００６０】
ブロック９０１では、ＢＴＢトレーニングロジックは、ターゲットアドレスを分岐命令の予測アドレスと比較することによって、命令ターゲットアドレスサイズを決定する。この方法は、ターゲットアドレスサイズに基づいて、予測されたターゲットアドレスを格納する複数のサイズベースのＢＴＢテーブルのうちの１つを決定する、または選択することを含む。例えば、ブロック９０２では、プロセッサは、ターゲットサイズが第一サイズ「サイズ１」以下であるかどうかを決定する。そうである場合、ブロック９０３では、プロセッサは、図３の第一ＢＴＢテーブル３０１などのサイズベースのＢＴＢテーブルの第一サイズベースのＢＴＢエントリにＢＴＢエントリを格納する。そうでない場合、ブロック９０４では、プロセッサは、ターゲットアドレスサイズが、３つのサイズのＢＴＢシステムについての第二サイズ「サイズ２」以下であるかどうかを決定する。そうである場合、ブロック９０５では、プロセッサは、分岐ターゲットを第二サイズベースのＢＴＢテーブルに格納する。例えば、ターゲットアドレスは、図３の第二ＢＴＢテーブル３０２に格納されている。ブロック９０４では、分岐命令タイプが第二サイズ「サイズ２」以下でない場合、ブロック９０６では、プロセッサは、第三サイズベースのＢＴＢに分岐ターゲットを格納する。
【００６１】
図１０は、いくつかの実施形態による、複数のＢＴＢテーブルのうちの１つに分岐タイプごとに分岐ターゲットアドレスを格納する方法を示す方法１０００である。方法１０００は、図１に示される命令パイプラインアーキテクチャ１００のいくつかの実施形態、図２に示される処理システム２００のいくつかの実施形態、図４のプロセッサ４００、及び図５のプロセッサ５００において実施される。図示された実施形態では、プロセッサ命令は、図４のプロセッサ４００内のプロセッサコア４０５などの処理システム内の１つ以上のプロセッサコア上での実行のために、行われているか、割り振られているか、スケジュールされている。本明細書に考察されるように、プロセッサ命令は分岐命令を含む。
【００６２】
方法１０００は、３つのＢＴＢテーブルシステムの例示的なコンテキストに記述される。ブロック１００１では、プロセッサは、条件命令についてのＢＴＢエントリタイプを決定する。分岐命令タイプに基づいて、ブロック１００２では、プロセッサは、分岐命令タイプがＢＴＢテーブルシステムについて高い値のＢＴＢエントリであるかどうかを決定する。そうである場合、ブロック１００３では、プロセッサは、図４のＢＴＢテーブル４０１などの第一ＢＴＢテーブルにＢＴＢエントリを格納する。そうでない場合、ブロック１００４では、プロセッサは、分岐命令タイプが中間の値のＢＴＢエントリであるかどうかを決定する。そうである場合、ブロック１００５では、プロセッサは、図４のＢＴＢテーブル４０２などの第二ＢＴＢテーブルにＢＴＢエントリを格納する。そうでない場合、ブロック１００６では、プロセッサは、アドレスを含むＢＴＢエントリを、図４のＢＴＢテーブル４０３などの第三ＢＴＢテーブルのエントリに格納する。
【００６３】
高い値、中間の値などに関して、ある特定のタイプである条件分岐命令は、高い値、中間の値、または他のタイプのＢＴＢエントリであってもよい。例えば、ジャンプタイプは高い値のエントリであってもよく、戻りタイプの命令は中間の値のエントリであってもよい。いくつかの実施形態によれば、エントリの値は、エントリを保持しないことと比較して、またはＢＴＢもしくはＢＴＢテーブルにセーブされ得る他の可能なエントリと比較して、複数のプロセッササイクルをセーブするエントリに対応する。分岐命令が今後のプロセスサイクルに有用であるなどの価値がある場合、プロセッサは、分岐ターゲットをＢＴＢテーブルに格納する。例えば、ターゲットアドレスは、図４のこのタイプのＢＴＢテーブル４０１〜４０３のうちの１つに格納されている。分岐命令タイプが有用な分岐タイプでない場合、プロセッサは、ターゲットアドレスをＢＴＢテーブルのエントリに格納しない。
【００６４】
本明細書に開示されるように、いくつかの実施形態では、プロセッサは、命令実行パイプラインと、第一分岐ターゲットバッファ（ＢＴＢ）テーブルのエントリの第一数を含む第一ＢＴＢテーブルであって、各第一ＢＴＢテーブルのエントリは第一タグ及び第一ターゲットアドレスを含み、各第一ターゲットアドレスは第一幅を有する、第一ＢＴＢテーブルと、第二ＢＴＢテーブルのエントリの第二数を含む第二ＢＴＢテーブルであって、各第二ＢＴＢテーブルのエントリは第二タグ及び第二ターゲットアドレスを含み、各第二ターゲットアドレスは第一幅とは異なる第二幅を有する、第二ＢＴＢテーブルと、所与の予測アドレスに対して予測されたターゲットアドレスを提供するように構成される分岐予測器とを含み、プロセッサは、分岐命令の分岐特性に基づいて、第一ＢＴＢテーブルの第一ＢＴＢテーブルエントリか、第二ＢＴＢテーブルの第二ＢＴＢテーブルエントリかいずれかに第一ターゲットアドレスを含む分岐記述子を格納するように構成される。一態様では、分岐特性は、分岐ターゲットアドレスサイズである。別の態様では、分岐特性は分岐タイプである。さらに別の態様では、第一ＢＴＢテーブルのエントリは、ジャンプ分岐命令、呼び出し分岐命令、戻り分岐命令、及び条件分岐命令のうちの少なくとも１つに対して設定される。
【００６５】
一態様では、分岐特性は、ＢＴＢエントリに格納される分岐の数である。別の態様では、分岐特性は、ＢＴＢエントリのスレッド識別子である。さらに別の態様では、プロセッサは、第一メモリレベルキャッシュ及び第二メモリレベルキャッシュを含み、第一ＢＴＢテーブル及び第二ＢＴＢテーブルは、プロセッサの同じメモリレベルキャッシュに含まれる。さらに別の態様では、第一ＢＴＢテーブルの第一ＢＴＢテーブルエントリは、予測ルックアップに対してＮウェイアソシアティブであり、第二ＢＴＢテーブルの第二ＢＴＢテーブルエントリは、予測ルックアップに対してＭウェイアソシアティブであり、Ｍ及びＮは１以上であり、ＭはＮとは異なる。
【００６６】
別の態様では、第一ＢＴＢテーブルエントリの第一数は、第二ＢＴＢテーブルエントリの第二数とは異なる。さらに別の態様では、各ＢＴＢテーブルエントリは、それぞれのＢＴＢエントリを、セット内の最近最も使用された（ＭＲＵ）ステータス、及び最近最も使用されていない（ＬＲＵ）ステータスのうちの１つとしてマーク付けする、最近使用されたステータスビットを含み、プロセッサは、最近使用されたステータスビットの状態に基づく置き換えポリシーに従って、セット内のＢＴＢエントリをエビクトするように設定される。
【００６７】
本明細書に開示されるように、いくつかの実施形態では、方法は、分岐命令に対する誤予測によって引き起こされるリダイレクトに基づいて、分岐ターゲットバッファ（ＢＴＢ）エントリの分岐タイプを決定することと、ＢＴＢエントリの決定された分岐タイプに基づいて、プロセッサの第一分岐ターゲットバッファ（ＢＴＢ）テーブルの第一エントリであって、この第一エントリはＢＴＢエントリの第一分岐タイプに対応する第一ターゲットアドレス幅を有する、第一エントリ、及びプロセッサの第二ＢＴＢテーブルの第二エントリであって、第二エントリは第一分岐タイプとは異なる第二分岐タイプに対応する、第一ターゲットアドレス幅とは異なる第二ターゲットアドレス幅を有する、第二エントリのうちの１つにＢＴＢエントリを格納することとを含む。一態様では、分岐タイプは、分岐ターゲットアドレスサイズである。別の態様では、ＢＴＢエントリの格納は、プロセッサの予測トレーナーユニットによって実行される。
【００６８】
一態様では、この方法は、セット内で最近最も使用された（ＭＲＵ）ステータス、及び最近最も使用されていない（ＬＲＵ）ステータスのうちの１つとしてＢＴＢエントリをマーク付けする最近使用されたステータスビットに基づいて第一ＢＴＢテーブルまたは第二ＢＴＢテーブルのＢＴＢエントリを識別することと、そこにエントリを格納する前に、第一ＢＴＢテーブルまたは第二ＢＴＢテーブルの識別されたＢＴＢエントリをエビクトすることとを含む。別の態様では、第一ＢＴＢテーブル及び第二ＢＴＢテーブルは、プロセッサの同じメモリレベルキャッシュに含まれる。さらに別の態様では、この方法は、ＢＴＢエントリを格納する前に、分岐命令の命令タグに基づいて、第一ＢＴＢテーブル及び第二ＢＴＢテーブルのうちの少なくとも１つを検索することと、ＢＴＢエントリを格納する前に、ＢＴＢエントリが第一ＢＴＢテーブル及び第二ＢＴＢテーブルのうちの少なくとも１つに見つからないことを識別することとを含む。さらに別の態様では、この方法は、ＢＴＢエントリのターゲットアドレスのサイズが第一ＢＴＢテーブルまたは第二ＢＴＢテーブルのそれぞれのＢＴＢエントリについてのアドレスサイズを上回る場合に、ＢＴＢエントリのターゲットアドレスのオーバーフロービットをオーバーフローＢＴＢテーブルに格納することを含む。
【００６９】
本明細書に開示されるように、いくつかの実施形態では、方法は、プロセッサのＢＴＢの複数の分岐ターゲットバッファ（ＢＴＢ）テーブルをルックアップすることによって、現在予測されたブロックの終了アドレス、及び次の予測されたブロックの開始アドレスを予測することであって、ＢＴＢは現在の予測アドレスでは第一ＢＴＢテーブル及び第二ＢＴＢテーブルを含む、予測することと、予測された終了アドレス、及び予測された開始アドレスのうちの少なくとも１つに基づいて、プロセッサでの実行のための命令の一部分として予測を提供することとを備える。一態様では、第一ＢＴＢテーブルのＢＴＢエントリは、第二ＢＴＢテーブルのＢＴＢエントリのターゲットアドレスフィールドの第二幅よりも小さい第一幅のターゲットアドレスフィールドを含む。別の態様では、現在の予測アドレスは、プログラムカウンタに関連している。
【００７０】
いくつかの実施形態では、前述の装置及び技法は、図１〜７を参照して前述されたシステム、プロセッサ、及びＢＴＢテーブルなど、１つ以上の集積回路（ＩＣ）デバイス（集積回路パッケージまたはマイクロチップとも称される）を含むシステムに実装される。電子設計自動化（ＥＤＡ）及びコンピュータ支援設計（ＣＡＤ）ソフトウェアツールは、これらのＩＣデバイスの設計及び製作で使用され得る。それらの設計ツールは典型的には、１つ以上のソフトウェアプログラムとして表される。１つ以上のソフトウェアプログラムは、１つ以上のＩＣデバイスの回路を表すコード上で作動して、回路を製造するための製造システムを設計するかまたは適応させるためのプロセスの少なくとも一部を実行するようにコンピュータシステムを操作するためにコンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、または命令及びデータの組み合わせを含むことができる。設計ツールまたは製作ツールを表すソフトウェア命令は、典型的には、コンピューティングシステムにアクセス可能なコンピュータ可読記憶媒体に格納される。同様に、ＩＣデバイスの設計または製造の１つ以上の段階を表すコードは、同じコンピュータ可読記憶媒体または異なるコンピュータ可読記憶媒体に格納され、そこからアクセスされ得る。
【００７１】
コンピュータ可読記憶媒体は、命令及び／またはデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによりアクセス可能な任意の非一時的記憶媒体、または非一時的記憶媒体の組み合わせを含み得る。このような記憶媒体には、光学媒体（例えばコンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイディスク）、磁気媒体（例えばフロッピーディスク、磁気テープ、または磁器ハードドライブ）、揮発性メモリ（例えばランダムアクセスメモリ（ＲＡＭ）またはキャッシュ）、不揮発性メモリ（例えば読み出し専用メモリ（ＲＯＭ）またはフラッシュメモリ）、または微小電気機械システム（ＭＥＭＳ）ベース記憶媒体が含まれ得るが、これらに限定されない。コンピュータ可読記憶媒体は、コンピューティングシステムに組み込まれてもよく（例えば、システムＲＡＭまたはＲＯＭ）、コンピューティングシステムに固定して取り付けられてもよく（例えば、磁気ハードドライブ）、コンピューティングシステムに取り外し可能に取り付けられてもよく（例えば、光学ディスクまたはユニバーサルシリアルバス（ＵＳＢ）ベースフラッシュメモリ）、または有線もしくは無線ネットワークを介してコンピュータシステムに結合されてもよい（例えば、ネットワークアクセス可能ストレージ（ＮＡＳ））。
【００７２】
いくつかの実施形態において、上述される技法の特定の態様は、ソフトウェアを実行する処理システムの１つ以上のプロセッサにより実施され得る。ソフトウェアは、非一時的なコンピュータ可読記憶媒体上に、格納される、またはその他の方法により有形に具現化される、実行可能命令の１つ以上のセットを含む。ソフトウェアが１つ以上のプロセッサによって実行されるときに、１つ以上のプロセッサを操作して、上記の技法の１つ以上の態様を実行する命令及び特定のデータを、ソフトウェアは含むことができる。非一時的なコンピュータ可読記憶媒体には、例えば、磁気ディスクまたは光ディスクの記憶デバイス、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）などのソリッドステート記憶デバイス、またはその他の単一または複数の不揮発性メモリデバイスなどが含まれ得る。非一時的なコンピュータ可読記憶媒体上に格納される実行可能な命令は、１つ以上のプロセッサにより、解釈される、またはその他の方法により実行可能である、ソースコード、アセンブリ言語コード、オブジェクトコード、または他の命令フォーマットにあってもよい。
【００７３】
一般的な記述の中で上述されるすべてのアクティビティまたは要素が必要なわけではなく、特定のアクティビティまたはデバイスの一部が必要ではない場合があり、記述されるそれらに加えて、１つ以上のさらなるアクティビティが実行され得る、または１つ以上のさらなる要素が含まれてもよい。さらに、アクティビティがリストにされている順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して記載された。しかしながら、当業者は、下記の特許請求の範囲に記載されるように本開示の範囲から逸脱することなく、さまざまな変更及び変形を行うことが可能であることを理解する。したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味で考えられるべきであり、すべてのこれらの変更形態は、本開示の範囲内に含まれることが意図される。
【００７４】
利益、他の利点、及び問題に対する解決策を、具体的な実施形態に関して、上記にて説明してきた。しかしながら、課題に対する利点、長所、解決策、及び何らかの利点、長所または解決策を生じさせ得る、もしくは顕著にし得る特徴（複数可）は、いずれかまたはすべての請求項の、重要であるか、必要であるか、または本質的特徴として解釈されるというわけではない。さらに、開示された発明の主題が本明細書に教示の利益を有する当業者へ明らかである、異なるが均等な方式において変更され、実施され得るように、上記に開示される特定の実施形態は、例示に過ぎない。下記の特許請求の範囲に記述される以外の、本明細書に示される構成または設計の詳細への制限を意図しない。したがって、上記に開示される特定の実施形態が変更、または修正されてもよく、すべてのこれらのような変形形態が開示された発明の主題の範囲内にあるとみなされる。その結果、本明細書に求められる保護は、下記の特許請求の範囲内に記載されるようなものである。
【図１】
2021530782.tif 000005
【図２】
2021530782.tif 000006
【図３】
2021530782.tif 000007
【図４】
2021530782.tif 000008
【図５】
2021530782.tif 000009
【図６】
2021530782.tif 000010
【図７】
2021530782.tif 000011
【図８】
2021530782.tif 000012
【図９】
2021530782.tif 000013
【図１０】
2021530782.tif 000014
【手続補正書】
【提出日】令和3年3月22日(2021.3.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
命令実行パイプライン（１００）と、
第一数の第一分岐ターゲットバッファ（ＢＴＢ）テーブルエントリを含む第一ＢＴＢテーブル（３０１）であって、前記第一ＢＴＢテーブルエントリのそれぞれは第一タグ（３０７）及び第一ターゲットアドレス（３１３）を含み、前記第一ターゲットアドレスのそれぞれは第一幅を有する、前記第一ＢＴＢテーブルと、
第二数の第二ＢＴＢテーブルエントリを含む第二ＢＴＢテーブル（３０２）であって、前記第二ＢＴＢテーブルエントリのそれぞれは第二タグ（３０８）及び第二ターゲットアドレス（３１４）を含み、前記第二ターゲットアドレスのそれぞれは前記第一幅とは異なる第二幅を有する、前記第二ＢＴＢテーブルと、
所与の予測アドレスについて予測されたターゲットアドレスを提供するように構成される分岐予測器（２０３）と、
を含む、プロセッサ（１２０）であって、
前記プロセッサは分岐命令の分岐特性に基づいて、前記第一ＢＴＢテーブルの第一ＢＴＢテーブルエントリか、前記第二ＢＴＢテーブルの第二ＢＴＢテーブルエントリかのいずれかに前記第一ターゲットアドレスを含む分岐記述子を格納するように構成される、プロセッサ。
【請求項２】
前記分岐特性は、分岐ターゲットアドレスサイズである、請求項１に記載のプロセッサ。
【請求項３】
前記分岐特性は分岐タイプである、請求項１に記載のプロセッサ。
【請求項４】
前記第一ＢＴＢテーブルエントリは、ジャンプ分岐命令、呼び出し分岐命令、戻り分岐命令、及び条件分岐命令のうちの少なくとも１つについて構成される、請求項３に記載のプロセッサ。
【請求項５】
前記分岐特性は前記ＢＴＢエントリに格納される分岐の数である、請求項１に記載のプロセッサ。
【請求項６】
前記分岐特性は前記ＢＴＢエントリのスレッド識別子である、請求項１に記載のプロセッサ。
【請求項７】
第一メモリレベルキャッシュ及び第二メモリレベルキャッシュ、をさらに含み、
前記第一ＢＴＢテーブル及び前記第二ＢＴＢテーブルは前記プロセッサの同じメモリレベルキャッシュに含まれる、請求項１から６のいずれか１項に記載のプロセッサ。
【請求項８】
前記第一ＢＴＢテーブルの前記第一ＢＴＢテーブルエントリは、予測ルックアップについてＮウェイアソシアティブであり、
前記第二ＢＴＢテーブルの前記第二ＢＴＢテーブルエントリは、予測ルックアップについてＭウェイアソシアティブであり、
前記Ｍ及び前記Ｎは１以上であり、前記Ｍは前記Ｎとは異なる、請求項１から７のいずれか１項に記載のプロセッサ。
【請求項９】
前記第一数の前記第一ＢＴＢテーブルエントリは、前記第二数の前記第二ＢＴＢテーブルエントリとは異なる、請求項１から８のいずれか１項に記載のプロセッサ。
【請求項１０】
前記ＢＴＢテーブルエントリのそれぞれは、前記ＢＴＢエントリのそれぞれを、セット内で最近最も使用された（ＭＲＵ）ステータス、及び最近最も使用されていない（ＬＲＵ）ステータスのうちの１つとしてマーク付けする最近使用されたステータスビットを含み、
前記プロセッサは、前記最近使用されたステータスビットの状態に基づいて置き換えポリシーに従い前記セット内のＢＴＢエントリをエビクトするように構成される、請求項１から９のいずれか１項に記載のプロセッサ。
【請求項１１】
分岐命令についての誤予測によって引き起こされるリダイレクトに基づいて分岐ターゲットバッファ（ＢＴＢ）エントリの分岐タイプを決定することと、
前記ＢＴＢエントリの前記決定された分岐タイプに基づいて、
プロセッサの第一分岐ターゲットバッファ（ＢＴＢ）テーブル（３０１）の第一エントリであって、前記第一エントリは前記ＢＴＢエントリの第一分岐タイプに対応する第一ターゲットアドレス幅を有する、前記第一エントリ、及び
前記プロセッサの第二ＢＴＢテーブル（３０２）の第二エントリであって、前記第二エントリは前記第一分岐タイプとは異なる第二分岐タイプに対応する、前記第一ターゲットアドレス幅とは異なる第二ターゲットアドレス幅を有する、前記第二エントリ、
のうちの１つに前記ＢＴＢエントリを格納することと、を含む、方法。
【請求項１２】
前記分岐タイプは、分岐ターゲットアドレスサイズである、請求項１１に記載の方法。
【請求項１３】
前記ＢＴＢエントリの前記格納は、前記プロセッサの予測トレーナーユニットによって実行される、請求項１１または１２に記載の方法。
【請求項１４】
セット内で最近最も使用された（ＭＲＵ）ステータス、及び最近最も使用されていない（ＬＲＵ）ステータスのうちの１つとしてＢＴＢエントリをマーク付けする最近使用されたステータスビットに基づいて、前記第一ＢＴＢテーブルまたは前記第二ＢＴＢテーブルの前記ＢＴＢエントリを識別することと、
前記第一ＢＴＢテーブルまたは前記第二ＢＴＢテーブルの前記識別されたＢＴＢエントリを、前記第一ＢＴＢテーブルまたは前記第二ＢＴＢテーブルに前記エントリを格納する前にエビクトすることと、をさらに含む、請求項１１から１３のいずれか１項に記載の方法。
【請求項１５】
前記ＢＴＢエントリの前記ターゲットアドレスのサイズが前記第一ＢＴＢテーブルまたは前記第二ＢＴＢテーブルのそれぞれのＢＴＢエントリについてのアドレスサイズを上回るときに、オーバーフローＢＴＢテーブルに前記ＢＴＢエントリの前記ターゲットアドレスのオーバーフロービットを格納すること、をさらに含む、請求項１１から１４のいずれか１項に記載の方法。
【国際調査報告】
2021530782.tif 000015
2021530782.tif 000016