(57)【要約】      （修正有）【課題】正確、且つ、大きいメモリアレイで、方向予測情報を検索できる分岐予測器を提供する。【解決手段】分岐予測器１００は、命令キャッシュ１０２の命令バイトのブロック１２４へのアクセスに使用できるブロックアドレス及び命令バイトのブロック中の第一／第二バイトオフセットのブロックを有する。ハッシングロジック１０６は、分岐パターンと、ブロックアドレスと第一／第二バイトオフセットのそれぞれとから形成される第一／第二アドレスのそれぞれと、をハッシュして、第一／第二インデックスを生成する。条件付き分岐予測器１１２は第一／第二インデックスを受信し、第一／第二条件付き分岐命令の第一／第二方向予測のそれぞれを、命令バイトのブロック中に提供する。ＢＴＡＣ１０８は、静的・動的に予測方向と関連付けられるバイトオフセット及び第一／第二宛先アドレスを提供する。【選択図】図１
2018063684.tif 000002
【特許請求の範囲】
【請求項１】
分岐予測器であって、
プロセッサの命令キャッシュの命令バイトのブロックへのアクセスに使用可能なブロックアドレスと、
命令バイトの前記ブロック中の第一バイトオフセットと、
命令バイトの前記ブロック中の第二バイトオフセットと、
分岐パターンと、前記ブロックアドレスと前記第一バイトオフセットから形成される第一アドレスと、をハッシュして、第一インデックスを生成し、前記分岐パターンと、前記ブロックアドレスと前記第二バイトオフセットから形成される第二アドレスと、をハッシュして、第二インデックスを生成するハッシングロジックと、
前記第一インデックスと前記第二インデックスを受信するとともに、それに応じて、命令バイトの前記ブロック中で、第一条件付き分岐命令と第二条件付き分岐命令のそれぞれの第一方向予測と第二方向予測を提供する条件付き分岐予測器と、
を有することを特徴とする分岐予測器。
【請求項２】
さらに、前記ブロックアドレスに応答して、前記第一バイトオフセットと前記第二バイトオフセットを提供する分岐宛先アドレスキャッシュ(ＢＴＡＣ)を有することを特徴とする請求項１に記載の分岐予測器。
【請求項３】
さらに、前記ＢＴＡＣが、前記ブロックアドレスに応答して、さらに、前記第一バイトオフセットと前記第二バイトオフセットに対応する第一分岐宛先アドレス予測と第二分岐宛先アドレス予測を提供し、
当該分岐予測器は、静的に、前記条件付き分岐予測器により提供される前記第一方向予測と前記ＢＴＡＣにより提供される前記第一分岐宛先アドレス予測を関連付けるとともに、静的に、前記条件付き分岐予測器により提供される前記第二方向予測と前記ＢＴＡＣにより提供される前記第二分岐宛先アドレス予測を関連付けることを特徴とする請求項２に記載の分岐予測器。
【請求項４】
さらに、前記第一バイトオフセットと前記第二バイトオフセットは、それぞれＮビットで、前記Ｎはlog2Qで、Ｑは、前記ブロックアドレスに対応する前記命令キャッシュにより提供される命令バイトの前記ブロック中の命令バイトの数であることを特徴とする請求項２に記載の分岐予測器。
【請求項５】
さらに、前記条件付き分岐予測器が、前記プロセッサにより実行される条件付き分岐命令の正確に分離されたアドレスを用いて更新されることを特徴とする請求項２に記載の分岐予測器。
【請求項６】
さらに、前記第一バイトオフセットは第一所定値を有し、前記第二バイトオフセットは第二所定値を有し、前記第一所定値と前記第二所定値は異なることを特徴とする請求項１に記載の分岐予測器。
【請求項７】
さらに、前記ブロックアドレスに対応して、分岐宛先アドレス予測と対応するバイトオフセットを、前記第一条件付き分岐命令と前記第二条件付き分岐命令のそれぞれに提供する分岐宛先アドレスキャッシュ(ＢＴＡＣ)を有し、
当該分岐予測器は、どの前記ＢＴＡＣにより提供される前記バイトオフセットが小さい値を有し、どれが大きい値を有するか決定し、
当該分岐予測器は、動的に、前記条件付き分岐予測器により提供される前記第一方向予測と前記分岐宛先アドレス予測を関連づけ、その場合、前記ＢＴＡＣにより提供される対応するバイトオフセットは小さい値を有し、
当該分岐予測器はまた、動的に、前記条件付き分岐予測器により提供される前記第二方向予測と前記分岐宛先アドレス予測を関連付け、その場合、前記ＢＴＡＣにより提供される対応するバイトオフセットは大きい値を有することを特徴とする請求項６に記載の分岐予測器。
【請求項８】
さらに、同じクロック周期中、前記ＢＴＡＣは前記ブロックアドレスによりアクセスされ、前記条件付き分岐予測器は前記第一インデックスと前記第二インデックスによりアクセスされることを特徴とする請求項７に記載の分岐予測器。
【請求項９】
さらに、前記条件付き分岐予測器は、前記ハッシングロジックにより生成される前記第一インデックスと前記第二インデックスのひとつを用いて更新されることを特徴とする請求項６に記載の分岐予測器。
【請求項１０】
さらに、前記条件付き分岐予測器は、それぞれ、前記第一インデックスと前記第二インデックスを受信し、それぞれ、前記第一方向予測と前記第二方向予測を提供する第一ポートと第二ポートを有するメモリを有することを特徴とする請求項１に記載の分岐予測器。
【請求項１１】
さらに、前記条件付き分岐予測器は複数のメモリを有し、前記複数のメモリの各メモリは、第一インデックスと第二インデックスのそれぞれのペアを受信し、それぞれ、第一方向予測と第二方向予測を提供する第一ポートと第二ポートを有し、
前記ハッシングロジックは、異なる長さの前記分岐パターンと、前記ブロックアドレスと前記第一バイトオフセットおよび前記第二バイトオフセットから形成される前記第一アドレスおよび前記第二アドレスと、をハッシュして、前記複数のメモリのそれぞれに、前記第一インデックスおよび前記第二インデックスを生成することを特徴とする請求項１０に記載の分岐予測器。
【請求項１２】
さらに、前記ハッシングロジックは組み合わせロジックを有し、前記組み合わせロジックは、前記ブロックアドレス、前記分岐パターン、前記第一バイトオフセット、および前記第二バイトオフセットを受信するとともに、それに応じて、前記第一インデックスと前記第二インデックスを生成することを特徴とする請求項１に記載の分岐予測器。
【請求項１３】
分岐予測器を操作する方法であって、前記方法は、
ブロックアドレスを用いて、プロセッサの命令キャッシュの命令バイトのブロックにアクセスする工程と、
第一バイトオフセットと第二バイトオフセットを、命令バイトの前記ブロック中に提供する工程と、
分岐パターンと、前記ブロックアドレスと前記第一バイトオフセットから形成される第一アドレスと、をハッシュして、第一インデックスを生成し、前記分岐パターンと、前記ブロックアドレスと前記第二バイトオフセットから形成される第二アドレスと、をハッシュして、第二インデックスを生成する工程と、
前記第一インデックスと前記第二インデックスの受信に応答して、条件付き分岐予測器により、命令バイトの前記ブロック中の第一条件付き分岐命令と第二条件付き分岐命令のそれぞれの第一方向予測と第二方向予測を提供する工程と、
を有することを特徴とする方法。
【請求項１４】
さらに、前記ブロックアドレスに応答して、分岐宛先アドレスキャッシュ(ＢＴＡＣ)により、前記第一バイトオフセットと前記第二バイトオフセットを提供する工程を有することを特徴とする請求項１３に記載の方法。
【請求項１５】
さらに、前記ＢＴＡＣにより、前記ブロックアドレスに応じて、前記第一バイトオフセットと前記第二バイトオフセットに対応する第一分岐宛先アドレス予測と第二分岐宛先アドレス予測を提供する工程、および、
静的に、前記条件付き分岐予測器により提供される前記第一方向予測と前記ＢＴＡＣにより提供される前記第一分岐宛先アドレス予測を関連付け、静的に、前記条件付き分岐予測器により提供される前記第二方向予測と前記ＢＴＡＣにより提供される前記第二分岐宛先アドレス予測を関連付ける工程と、
を有することを特徴とする請求項１４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令ブロックフェッチアドレス、および、分岐パターンのハッシュにおいて、複数のバイトオフセットを用いて、条件付き分岐予測器インデックスを生成する分岐予測器に関する。
【背景技術】
【０００２】
プロセッサの設計技術において、分岐命令の予測正確さを増加する必要があることは周知のとおりである。プロセッサパイプライン長さ、キャッシュメモリレイテンシー、および、スーパースカラー命令幅の増加に伴い、この必要性がさらに大きくなる。分岐命令予測は、宛先アドレスの予測、および、条件付き分岐命令の場合に、方向、つまり、受け入れられるか否かを含む。
【０００３】
通常、命令は、比較的大きいブロックを単位として、命令キャッシュ、たとえば、１６バイトから同時にフェッチされる。それ故に、命令のフェッチされたブロック中に、複数の分岐命令が存在する。正確に、フェッチされたブロック中に存在する分岐命令を予測するとともに、それらの宛先アドレスとそれらの方向の両方を予測する必要がある。これは、ブロック中の分岐命令の位置が相対的にランダムであるから、難しいことである。これは、固定長さ命令にとってそうであるが、可変長さ、たとえば、x86あるいはARM(Advanced RISC Machine)の命令を許可する命令セットアーキテクチャにとっては特にそうである。たとえば、x86分岐命令は、命令キャッシュからフェッチされた命令バイトのブロックの任意のバイトオフセットに位置する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の課題は、従来よりも優れた分岐予測器を提供することである。
【課題を解決するための手段】
【０００５】
分岐予測器は、命令キャッシュの命令バイトのブロックへのアクセスに使用できるブロックアドレス、および、命令バイトのブロック中の第一バイトオフセットおよび第二バイトオフセットのブロックを有する。ハッシングロジックは、分岐パターンと、ブロックアドレスと第一バイトオフセットおよび第二バイトオフセットのそれぞれとから形成される第一アドレスおよび第二アドレスのそれぞれと、をハッシュして、第一インデックスおよび第二インデックスを生成する。条件付き分岐予測器は第一インデックスおよび第二インデックスを受信するとともに、それに応じて、第一条件付き分岐命令および第二条件付き分岐命令の第一方向予測および第二方向予測のそれぞれを、命令バイトのブロック中に提供する。一実施態様において、分岐宛先アドレスキャッシュ(ＢＴＡＣ)はバイトオフセットを提供し、且つ、第一方向予測および第二方向予測は、静的に、ＢＴＡＣにより提供される第一宛先アドレスおよび第二宛先アドレスと関連付けられる。あるいは、バイトオフセットは所定値で、且つ、第一方向予測および第二方向予測は、ＢＴＡＣにより提供されるバイトオフセットの相対サイズに基づいて、動的に、第一宛先アドレスおよび第二宛先アドレスと関連付けられる。
【発明の効果】
【０００６】
従来よりもさらに正確、且つ、大きいメモリアレイで、方向予測情報を検索することができるという潜在的利点がある。
【図面の簡単な説明】
【０００７】
【図１】本発明の分岐予測器を有するプロセッサを説明するブロック図である。
【図２】図１の分岐予測器の操作を説明するフローチャートである。
【図３】従来の分岐予測器を有するプロセッサを説明するブロック図である。
【図４】本発明の別の実施態様による分岐予測器を有するプロセッサを説明するブロック図である。
【図５】図４の分岐予測器の操作を説明するフローチャートである。
【発明を実施するための形態】
【０００８】
二つ以上のエンティティ、たとえば、アドレスと分岐パターンをハッシュすることは、二個以上のエンティティのそれぞれの一つ以上のビットで、一つ以上の演算および／または論理演算を実行して、二個以上のエンティティの最大のエンティティのビット数より小さいビット数を有するという結果を生成することを意味する。一つ以上の演算および／または論理演算は、これに限定されないが:エンティティの所定ビットの選択;排他的OR(XOR)、NAND、AND、OR、NOT、回転、シフトを含むブーリアン論理演算;および、加減乗除、モジュロを含む演算操作を含む。例により説明するため、１００ビットの分岐パターン、３２ビットのアドレス、且つ、結果が１０ビットインデックスであると仮定する。アドレス、および、分岐パターンのハッシュは、XORing（排他的OR）ビット[9:0]と分岐パターンのビット[19:10]および分岐命令アドレスのビット[9:0]を含む。
【０００９】
実施態様は、従来の分岐予測器よりさらに正確な表現の条件付き分岐命令のアドレスをハッシュして、インデックスを分岐予測器の条件付き分岐予測器部分に生成することにより、潜在的に、条件付き分岐予測方向の正確さを増加する分岐予測器を記述する。
【００１０】
図１は、分岐予測器１００を有するプロセッサ１０３のブロック図である。プロセッサ１０３は、フェッチユニット１０１、命令キャッシュ１０２、および、分岐予測器１００（あるいは、分岐予測ユニット１００）を有する。分岐予測器１００は、分岐パターン１０４、ハッシングロジック１０６、分岐宛先アドレスキャッシュ(ＢＴＡＣ)１０８、条件付き分岐予測器１１２、および、制御論理部１１４を有する。
【００１１】
フェッチユニット１０１は、命令キャッシュ１０２、ＢＴＡＣ１０８、および、ハッシングロジック１０６に提供されるブロックアドレス１２２を生成する。命令キャッシュ１０２は、ブロックアドレス１２２に対応するアーキテクチャ命令バイト１２４のブロックを提供する。一実施態様において、別の実施態様が検討されてもよいが、命令バイトブロック１２４は１６バイトを含む。命令バイトブロック１２４は、以下で詳細に討論されるように、複数のアーキテクチャ分岐命令を有する。制御論理部１１４は、宛先アドレス１２８（あるいは、最終結果１２８）を、フェッチユニット１０１に提供する場合、フェッチユニット１０１は、宛先アドレス１２８に基づいて、ブロックアドレス１２２を更新して、不連続のプログラム位置からフェッチし、これは、出力先変更と称される。そうでなければ、出力先変更が宛先アドレス１２８に欠けている状況下で、命令キャッシュ１０２から命令バイトブロック１２４をフェッチした後、フェッチユニット１０１はブロックアドレス１２２をインクリメントする。命令バイトブロック１２４は、プロセッサ１０３からパイプラインに提供される。
【００１２】
好ましくは、命令バイトブロック１２４は、命令キュー(図示しない)により受信される。命令バイトは、キューから、命令変換装置(図示しない)に提供され、命令変換装置は、命令バイトブロック（アーキテクチャ命令バイト）１２４を、実行パイプライン(図示しない)に提供されるマイクロ命令に変換して実行する。キューバッファの複数のブロック１２４は、命令変換装置へ提供される。キューバッファ中に、命令変換装置に出力される命令を有し、実行パイプラインに提供される限り、プロセッサは、実行パイプラインを効果的に利用する。よって、分岐予測器１００の目的は、命令キューが近くなるのを防止して、命令変換装置が十分な命令を有さずに変換して、実行パイプラインの良好な利用を維持することにある。
【００１３】
一実施態様において、実行パイプラインは、一つ以上のアーキテクチャレジスタファイル、レジスタリネームユニット、リコーダバッファ、予約ステーション、複数の実行ユニット、および、マイクロ命令のイシューを実行ユニットにスケジュールするスケジューラーを含むスーパースカラーアウトオブオーダー実行パイプラインである。実行ユニットは、一つ以上の以下の実行ユニットタイプ:整数ユニット、浮動小数点ユニット、媒体ユニット、単一命令マルチデータ(SIMD)ユニット、分岐実行ユニット、ロードユニット、および、保存ユニットを含む。好ましくは、プロセッサ１０３は、さらに、メモリ順序バッファ、トランスレーションルックアサイドバッファ、テーブルウォークエンジン、キャッシュメモリ階層、および、各種要求キュー、たとえば、一つ以上のロードキュー、保存キュー、充填(fill)キューおよび／またはスヌープキューを含むメモリサブシステムを有する。
【００１４】
フェッチされた命令バイトブロック１２４中で、分岐命令の存在、方向、および、宛先アドレスを予測する目的のため、ＢＴＡＣ１０８は、前もって実行される分岐命令についての分岐履歴情報をキャッシュする。ＢＴＡＣ１０８は、エントリーの一つ以上のメモリアレイを有する。好ましくは、以下で詳細に記述されるように、一つ以上のメモリアレイは、複数の方向の関連する多サイドの結合キャッシュとして設置される。各エントリーは、分岐命令に関連する分岐履歴情報を保留する。一実施態様において、ＢＴＡＣ１０８中の各エントリーは以下の領域、すなわち有効ビット、タグ、分岐型、バイトオフセット、ラップビット、および、宛先アドレスを含む。
【００１５】
分岐命令の方向は、分岐が受け入れられるか否かである。つまり、分岐命令が受け入れられない場合、プログラムは順序通り、すなわち、次の命令に進み、受け入れられない分岐命令のアドレス後のアドレスで、順序通り分岐命令に従う。しかし、分岐命令が受け入れられる場合、分岐命令は、プロセッサ１０３に指示して、通常の逐次プログラムフローを続行するのではなく、プログラムフローを宛先アドレスに転換する。無条件分岐命令の状況下、たとえば、呼び出し、リターンあるいは無条件ジャンプ命令の場合、方向は常に受け入れられる。条件付き分岐命令において、条件付き分岐命令により指定される条件が符合する場合、方向は受け入れられ;そうでなければ、条件付き分岐命令の方向は受け入れられない。条件は、通常、プロセッサのいくつかのアーキテクチャ状態、たとえば、アーキテクチャ条件フラグが基準、たとえば、大きい、小さい、等しい、負の、正の、繰り上げ、ゼロ、オーバーフロー等を満たすかどうかである。
【００１６】
宛先アドレスは、各種方式で指定される。復帰命令の場合において、宛先アドレス(あるいは、復帰アドレス)は、通常、復帰アドレスが、前もって実行される呼び出し命令に対応して、前もってプッシュされるスタックをポップする。通常、復帰アドレスは、呼出し命令後の次の逐次命令である。宛先アドレスは、さらに、分岐命令自身のアドレスに関連するサインオフセットとして指定される。宛先アドレスは、さらに、通常、間接分岐命令と称される分岐命令により指定されるアーキテクチャレジスタ中で保持される。
【００１７】
有効ビットは、エントリーが有効であるかどうか示す。分岐命令が、実行パイプラインにより実行されて、実行される分岐命令についての関連情報を分岐予測器１００に伝えるとき、分岐予測器１００は、分岐命令のエントリーが、すでに、ＢＴＡＣ１０８中に存在するかどうか判断する。そうでない場合、分岐予測器１００は、ＢＴＡＣ１０８中のエントリーを分岐命令に割り当てるとともに、有効ビットを設定して、割り当てられたエントリーの各種領域に追加する。対照的に、ＢＴＡＣ１０８のエントリーが、命令バイトブロック１２４中で、分岐命令の存在を予測するとともに、実行パイプラインが、分岐命令がもはや命令バイトブロック１２４にないと判断する場合、分岐予測器１００はエントリーを無効にする。これは、オペレーティングシステムが命令バイトブロック１２４に対応するメモリ位置に新しいプログラムをロードした、あるいは、自己書き換えコードが実行されたことで、発生し得る。一旦、分岐命令の有効なエントリーがＢＴＡＣ１０８中に存在すると、ＢＴＡＣ１０８は、その後フェッチされる命令バイトブロック１２４中で、分岐命令の存在に関連する予測を行い、同様に、フェッチされた分岐命令の方向、および、宛先アドレスの予測を行う。しかし、以下で詳細に記述されるように、ＢＴＡＣ１０８ではなく、条件付き分岐予測器１１２が頻繁に用いられて、条件付き分岐命令の方向を予測する。
【００１８】
タグ領域は、分岐命令のアドレスの上位ビットを保留する。ブロックアドレス１２２の下位ビットが、ＢＴＡＣ１０８中のインデックスに用いられて、一組のエントリーを選択する。ブロックアドレス１２２の上位ビットが、選択されたセット中のエントリーのタグと比較される。以下で詳細に記述されるように、有効なエントリーのタグが、ブロックアドレス１２２のタグビットに適合する場合、ＢＴＡＣ１０８は、適合エントリーのヒットを示すとともに、ヒット分岐命令の予測方向、宛先アドレス、および、バイトオフセットを提供する。
【００１９】
分岐型は、分岐命令、たとえば、呼び出し(たとえば、x86呼び出し命令)、リターン(たとえば、x86RET命令)、無条件ジャンプ(たとえば、x86JMP命令)、および、条件付きジャンプ(たとえば、x86Jcc命令)のタイプを示す。一実施態様において、エントリーは、さらに、バイアスビット、および、フォース(force)バイアスビット(図示しない)を有し、分岐型領域で符号化される。実行パイプラインが、初めて、分岐命令を実行するとき、フォースバイアスビットが設定され、バイアスビットは、第一実行で正確に分離された方向が追加される。分岐命令、つまり、分岐命令予測情報を保留するエントリー中のヒットを含む命令バイトブロック１２４の後続のフェッチにおいて、フォースバイアスビットが設定される場合、ＢＴＡＣ１０８は、バイアスビットで定められる方向を予測する。初めて、バイアスビットが、不正確に、分岐命令の方向を予測するとき、フォースバイアスビットが消去される。好ましくは、各ＢＴＡＣ１０８エントリーは、さらに、方向予測を行うのに用いられる別の領域を有する。一実施態様において、各エントリーは、分岐が受け入れられるたびに加算し、分岐が受け入れられないたびに減算する２ビット飽和アップダウンカウンターを有する。カウンターの上位ビットが設定される場合、ＢＴＡＣ１０８は、分岐命令が受け入れられると予測し;そうでなければ、ＢＴＡＣ１０８は受け入れられないと予測する。
【００２０】
バイトオフセットは、命令バイトブロック１２４中の分岐命令の位置を指定する。好ましくは、バイトオフセットは、命令バイトブロック１２４中の分岐命令の第一バイトの位置を指定する。一実施態様において、アーキテクチャ命令の長さは可変であり、且つ、特に、分岐命令は、異なる長さ、たとえば、x86命令セットアーキテクチャである。可変長さ命令セットアーキテクチャの場合においては、分岐命令は、開始の命令バイトブロック１２４を越えて、次の逐次命令バイトブロック１２４で終了する。このような状況下で、ラップビットは分岐命令のエントリーにある。
【００２１】
制御論理部１１４は、ヒット分岐命令のバイトオフセットを用いて、命令バイトブロック１２４中で、最初に見える、受け入れられる分岐命令(ある場合)を決定する。“最初に”というのは、プログラム順序の最初のことを意味する。“見える”というのは、現在のアーキテクチャ命令ポインター値が見えない前の分岐命令の事実のことである。よって、たとえば、出力先変更が、間もなくフェッチされる命令バイトブロック１２４内のバイトオフセット７を有する分岐ターゲット１２８に受け入れられる場合、ＢＴＡＣ１０８予測がフェッチされる命令バイトブロック１２４中に存在する任意の分岐命令が見られず、つまり、それらの予測が受け入れられても、それらは考慮されず、それらは、リダイレクトされるアドレス１２８で、命令の新しいスレッド中に出現しないからである。以下で詳細に記述されるように、図１の実施態様のハッシングロジック１０６は、有利に、ＢＴＡＣ１０８により予測される分岐命令のバイトオフセットを用いて、さらに正確なインデックスを条件付き分岐予測器１１２中に生成して、潜在的に、条件付き分岐予測器１１２の正確さを改善する。
【００２２】
宛先アドレスは、その実行履歴に基づいた分岐命令の宛先アドレスの予測である。好ましくは、実行パイプラインが分岐命令を実行するとき、分岐予測器１００は、正確に分離された宛先アドレスで、分岐命令のＢＴＡＣ１０８エントリーを更新する。一実施態様において、分岐予測器１００は、さらに、呼び出し／復帰スタック(図示しない)を有し、復帰命令の復帰アドレスを予測し、ＢＴＡＣ１０８が、分岐命令の分岐型が復帰命令であることを示す場合、制御論理部１１４は、ＢＴＡＣ１０８ではなく、呼び出し／復帰スタックにより提供される復帰アドレスを選択する。
【００２３】
好ましくは、ＢＴＡＣ１０８は、Ａサイド、および、Ｂサイドと称される二個の“サイド”として設置される。命令キャッシュ１０２からフェッチされる所定の命令バイトブロック１２４において、ＢＴＡＣ１０８の各サイドは、多くても、単一ヒット宛先アドレス／バイトオフセットペアだけを提供する。これは、命令キャッシュ１０２からフェッチされる命令バイトブロック１２４の所定ブロックにおいて、ＢＴＡＣ１０８を更新するロジックは、ＢＴＡＣ１０８の一サイド中の多くても一つのエントリーを許可し、すなわち、ＢＴＡＣ１０８は、ロジックを更新して、命令バイトのフェッチされたブロック中の単一の分岐命令だけに、各サイド中の一エントリーを有させるからである。故に、ＢＴＡＣ１０８の一サイドは結合性を有する、すなわち、複数の方向を有するが、更新ロジックは、そのサイドの複数の方向の一方向だけに、フェッチされた命令バイトブロック１２４中の分岐命令の有効なエントリーを有させる。一実施態様において、ＢＴＡＣ１０８は二サイドを有し、二サイドのそれぞれは、二方向で、それ自身のメモリアレイを有する。別の実施態様において、ＢＴＡＣ１０８は、四方向で、単一のメモリアレイを有し、且つ、二方向は一方のサイドにグループ化され、別の二方向は、別のサイドにグループ分けされる。同様に、条件付き分岐予測器１１２は、さらに、その一つ以上のメモリアレイ中で結合性を有し、命令キャッシュ１０２からフェッチされる命令バイトブロック１２４の所定ブロックにおいて、条件付き分岐予測器１１２は、サイドごとに、多くてもひとつの単一ヒット方向予測を提供する。これは、命令キャッシュ１０２からフェッチされる命令バイトの所定ブロックにおいて、条件付き分岐予測器１１２がロジックを更新し、条件付き分岐予測器１１２の一サイド中で、多くても一エントリーだけを許可し、つまり、条件付き分岐予測器１１２がロジックを更新して、命令バイトフェッチされたブロック中の単一の分岐命令だけに、各サイド中のエントリーを有させるからである。
【００２４】
ブロックアドレス１２２に応じて、ＢＴＡＣ１０８は、ヒットインジケーター１３２、Ａサイド宛先アドレス１４４、および、Ｂサイド宛先アドレス１４６(まとめて、宛先アドレス１４４／１４６と称する)、および、Ａサイドバイトオフセット１５４、および、Ｂサイドバイトオフセット１５６(まとめて、バイトオフセット１５４／１５６と称する)を出力し、すべてが、制御論理部１１４に提供される。好ましくは、ヒットインジケーター１３２は、ＢＴＡＣ１０８中のどの方向が、タグが、ブロックアドレス１２２のタグ部分に適合する選択された有効なエントリーを有するか示す。図示しないが、好ましくは、ＢＴＡＣ１０８は、さらに、制御論理部１１４に各サイドの方向予測を提供する。図１の実施態様において、さらに、有利に、バイトオフセット１５４／１５６は、ハッシングロジック１０６に提供される。
【００２５】
ブロックアドレス１２２、および、バイトオフセット１５４／１５６に加え、ハッシングロジック１０６は、分岐経路履歴１０４とも称される分岐パターン１０４を受信する。分岐パターン１０４がＮビットであると仮定し、分岐パターン１０４は、プログラム順序で、最後のＮ分岐命令のそれぞれの方向のグローバル履歴である。一実施態様において、対応する分岐命令が受け入れられる場合、分岐パターン１０４のビットが設定され、分岐命令が受け入れられない場合、分岐パターン１０４のビットがクリアされる。一実施態様において、Ｎは１００である。以下で示されるように、分岐パターン１０４は、分岐命令のアドレス(あるいは、図３と図４に関連して記述される実施態様に似ている)でハッシュされ、条件付き分岐予測器１１２中のインデックスを得て、問題視されている分岐命令の履歴だけでなく、周囲のその他の分岐命令のグローバル履歴を組み込んで、分岐命令の結果を予測する正確さを増加する。
【００２６】
一実施態様において、分岐パターン１０４は、分岐命令が回収されるたびに正しい方向で更新される。別の実施態様において、予測方向が推論であるにしても、分岐命令が予測されるたびに、分岐パターン１０４が予測方向で更新される。前の実施態様は、回収された分岐命令の情報だけを含み、予測されているが、実際には回収されていない分岐命令の情報を有さない事実に関してさらに正確であるという長所を有する。前の実施態様の欠点は、分岐命令Xのインスタンスが命令キャッシュ１０２からフェッチされるときと分岐命令Xのインスタンスが回収されるときの間に、数十のオーダーのクロック周期があることであり;それ故に、分岐命令Xのインスタンスがフェッチされた後、および、分岐命令Xのインスタンスが回収される前にフェッチされる分岐命令に行われる任意の予測は、分岐命令Xのインスタンスの方向を含むグローバル分岐履歴に役立たない。分岐パターン１０４中に含まれるいくつかの分岐命令が実際は回収されない欠点があるが、対照的に、後者の実施態様は、全Ｎ個の前の分岐命令を含むグローバル分岐パターン１０４を用いて、分岐命令に予測を行う長所を有する。
【００２７】
ハッシングロジック１０６は、ブロックアドレス１２２、バイトオフセット１５４／１５６、および、分岐パターン１０４を受信するとともに、それらをハッシュして、第一（Ａサイド）インデックス１６４、および、第二（Ｂサイド）インデックス１６６を生成する。さらに、特に、好ましくは、ハッシングロジック１０６は、Ａサイドバイトオフセット１５４とブロックアドレス１２２を結び付けて、命令バイトブロック１２４中で、第一条件付き分岐命令のメモリアドレスを形成し、分岐パターン１０４、および、第一条件付き分岐命令のアドレスをハッシュして、第一インデックス１６４を生成する。同様に、ハッシングロジック１０６は、Ｂサイドバイトオフセット１５６とブロックアドレス１２２を連結させて、命令バイトブロック１２４中で、第二条件付き分岐命令のメモリアドレスを形成し、分岐パターン１０４、および、第二条件付き分岐命令のアドレスをハッシュして、第二インデックス１６６を生成する。インデックス１６４／１６６が条件付き分岐予測器１１２に提供される。好ましくは、ハッシングロジック１０６は、合成された組み合わせロジックを有する。条件付き分岐予測器１１２の記述後に、ハッシングが以下で詳細に記述される。
【００２８】
条件付き分岐予測器１１２は、ハッシングロジック１０６から、インデックス１５４／１５６を受信し、フェッチユニット１０１からブロックアドレス１２２を受信するとともに、それに応じて、ヒットインジケーター１７２、Ａサイド方向予測１７４、および、Ｂサイド方向予測１７６を生成する。条件付き分岐予測器１１２は、情報を保持する少なくとも一つのメモリアレイを有して、条件付き分岐命令の方向予測を行う。一実施態様において、ＢＴＡＣ１０８のように、条件付き分岐予測器１１２は、ＡサイドとＢサイドの二サイドに配置される。好ましくは、条件付き分岐予測器１１２中の各エントリーは、方向予測ビットを含む。一実施態様において、方向予測ビットは、条件付き分岐命令が受け入れられるごとに増え、条件付き分岐命令が受け入れられないごとに減る飽和アップダウンカウンター(たとえば、３ビット)の最上位ビットである。別の実施態様において、方向予測ビットは、条件付き分岐予測器１１２が、条件付き分岐命令の方向を正確に予測されるかに基づいて、状態機械(state machine)に従って更新される一値(たとえば、３ビット)の最上位ビットである。
【００２９】
好ましくは、条件付き分岐予測器１１２メモリアレイは、Ａサイドインデックス／Ｂサイドインデックス１６４／１６６を受信し、それに応じて、Ａサイド方向予測／Ｂサイド方向予測１７４／１７６を提供する二ポート、一つはＡサイド、一つはＢサイドを有するデュアルポートメモリアレイである。一実施態様において、条件付き分岐予測器１１２の各エントリーはタグを有する。インデックス１６４／１６６により選択されるエントリーの組の各エントリーのタグは、ブロックアドレス１２２のタグの一部と比較されて、有効なエントリーヒットが発生するか判断する。一実施態様において、分岐命令アドレスの上位ビットを簡単にするのではなく、各タグは、分岐命令アドレスの上位ビットを有する分岐履歴パターンのハッシングビットにより生成される一値である。各サイドからのヒットエントリーの方向予測ビットは、ヒットインジケーター１７２とともに、制御論理部１１４に提供される個別の方向予測１７４／１７６として提供される。
【００３０】
一実施態様において、条件付き分岐予測器１１２は、テーブルとも称される複数のメモリアレイを有し、各サイドに対応する複数の方向予測を生成し、且つ、各サイドに対し、複数の方向予測の一つだけが方向予測１７４／１７６として選択される。このような実施態様において、ハッシングロジック１０６は、複数のペアのインデックス１６４／１６６を生成するとともに、それらを、条件付き分岐予測器１１２に提供する。たとえば、条件付き分岐予測器１１２が５テーブルを有する場合、ハッシングロジック１０６は、インデックス１６４／１６６の５ペアを、条件付き分岐予測器１１２に提供する。
【００３１】
一実施態様において、条件付き分岐予測器１１２はＴＡＧＥ(tagged geometric length)予測器である。ＴＡＧＥ予測器の実施態様において、複数のテーブルのそれぞれは、単一デュアルポートスタティックＲＡＭ(ＳＲＡＭ)である。このほか、テーブル中の各エントリーは、ブロックアドレス１２２のタグ部分と比較されるタグを含む。さらに、各テーブルは、ハッシングロジック１０６により生成されるインデックス１６４／１６６のそれ自身の明確なペアにより索引を付けられ、インデックスは、異なる長さの分岐パターン１０４を用いて生成される。さらに、特に、ＴＡＧＥ予測器の基本テーブルは、ブロックアドレス１２２とバイトオフセット１５４／１５６の連結により形成される条件付き分岐命令アドレスの下位ビットだけに索引を付けられ、すなわち、分岐パターン１０４によりハッシュされない。その一方、別のテーブルは、ハッシングロジック１０６から、それらのインデックスペア１６４／１６６を受信し、且つ、各テーブルのインデックスペア１６４／１６６は、その他のテーブルと異なるビット数の分岐パターン１０４を用いてハッシュされている。つまり、複数のテーブルのそれぞれにとって、ハッシングロジック１０６は、各条件付き分岐命令アドレスペアにより、最も近いビットの異なる数量のビットの分岐パターン１０４をハッシュして、異なるテーブルの異なるインデックス１６４／１６６を生成する。たとえば、各テーブルのインデックス１６４／１６６が１０ビット、分岐パターン１０４が１００ビットであると仮定する。第一テーブルにおいて、ハッシングロジック１０６は、分岐命令アドレスのビット[9:0]とともに、分岐パターン１０４のビット[9:0]で、ブーリアン排他的OR(XOR)演算を実行し;第二テーブルにおいて、ハッシングロジック１０６は、分岐パターン１０４のビット[19:10]と分岐命令アドレスのビット[9:0]とともに、分岐パターン１０４のビット[9:0]のXORを実行し;第三テーブルにおいて、ハッシングロジック１０６は、分岐パターン１０４のビット[19:10]、分岐パターン１０４のビット[29:20]、分岐パターン１０４のビット[39:30]、および、分岐命令アドレスのビット[9:0]とともに、分岐パターン１０４のビット[9:0]のXORを実行し、以下同様である。この実施態様は例示的目的で記述されており、その他の実施態様は、その他の演算方法を使用することができ、ハッシングロジック１０６は、分岐パターンおよび／または分岐命令アドレスの異なる組のビットを用いるとともに、XOR以外のその他の演算および／または論理演算を実行する。
【００３２】
制御論理部１１４は、ＢＴＡＣヒットインジケーター１３２、宛先アドレス１５４／１５６、バイトオフセット１５４／１５６、条件付き分岐予測器ヒットインジケーター１７２、および、方向予測１７４／１７６を受け入れるとともに、プログラム順序で、命令バイトブロック１２４中で、最初に有効、見える、受け入れられる分岐命令(ある場合)を決定する。このような分岐命令が見つかる場合、制御論理部１１４はフェッチユニット１０１に通知して、プログラムフローを制御論理部１１４により生成される最終結果１２８にリダイレクトし;そうでなければ、フェッチユニット１０１は、次の逐次ブロックアドレス１２２から、命令バイトブロック１２４をフェッチする。
【００３３】
図２は、図１の分岐予測器１００の操作を説明するフローチャートである。図２は、下向きの時間推移を示すと共に、水平に互いに平行なブロックで実行される動作が実質的に同時に並行して発生することを説明する。工程はブロック２０２から始まる。
【００３４】
ブロック２０２において、フェッチユニット１０１は、ブロックアドレス１２２を生成するとともに、それを、図１の命令キャッシュ１０２、ＢＴＡＣ１０８、および、ハッシングロジック１０６に提供する。工程は、ブロック２０４と２０６に平行に進む。
【００３５】
ブロック２０４においては、命令キャッシュ１０２は、命令バイトブロック１２４を出力する。その他の実施態様が検討されてもよいが、一実施態様において、命令キャッシュ１０２は、ブロックアドレス１２２がアサートされる時から、命令キャッシュ１０２が命令バイトブロック１２４を提供するまで、３クロック周期のレイテンシーを有する。工程は、ブロック２０８に進む。
【００３６】
ブロック２０６において、ＢＴＡＣ１０８は、予測される宛先アドレス１４４／１４６、バイトオフセット１５４／１５６、および、ヒットインジケーター１３２を、各サイド、つまり、ＡサイドとＢサイドに出力する。その他の実施態様が検討されてもよいが、一実施態様において、ＢＴＡＣ１０８は、ブロックアドレス１２２がアサートされる時間から、ＢＴＡＣ１０８がその出力を提供するまで、３クロック周期のレイテンシーを有する。工程は、ブロック２０８に進む。
【００３７】
ブロック２０８においては、ハッシングロジック１０６は、分岐パターン１０４により、ブロックアドレス１２２、および、バイトオフセット１５４／１５６から形成される二個の分岐命令アドレスのそれぞれをハッシュして、ＡサイドとＢサイドのインデックス１６４／１６６を生成する。工程は、ブロック２１２に進む。
【００３８】
ブロック２１２において、条件付き分岐予測器１１２はインデックス１６４／１６６を受信するとともに、それに応じて、ＡサイドとＢサイドの方向予測１７４／１７６、および、ヒットインジケーター１７２を生成する。工程は、ブロック２１４に進む。
【００３９】
ブロック２１４において、制御論理部１１４は、その入力から、ＢＴＡＣ１０８と条件付き分岐予測器１１２が、一緒に、命令バイトブロック１２４中に存在する有効、見える、受け入れられる分岐命令を予測するかどうか判断する。その場合、制御論理部１１４は最終結果１２８を出力し、最初の有効、見える、受け入れられる分岐命令を有するサイドの宛先アドレス１４４／１４６が、フェッチユニット１０１に提供されて、プログラムの流れを、選択された宛先アドレス１４４／１４６にリダイレクトする。工程は、ブロック２１４で終了する。
【００４０】
図１の分岐予測器１００の長所を理解するため、従来の分岐予測器３００が図３に関連して説明される。図３の従来の分岐予測器３００は図１の分岐予測器１００に類似する。しかし、図３のハッシングロジック３０６は、ＢＴＡＣ１０８からバイトオフセット１５４／１５６を受信せず、且つ、それらを用いて、各条件付き分岐命令のアドレスを形成しない。それどころか、図３のハッシングロジック３０６は、分岐パターン１０４と、ブロックアドレス１２２のハッシュ値を計算して、二個の分離したＡサイドとＢサイドの条件付き分岐予測器３１２Ａと３１２Ｂ両方に提供される単一インデックス３６４を生成する。さらに特に、各サイドは、分離したメモリアレイを有し、従来の分岐予測器３００は、予測情報がＢＴＡＣ１０８のＡサイド中に存在する条件付き分岐命令の実行に基づいて、Ａサイド条件付き分岐予測器３１２Ａを更新するとともに、予測情報がＢＴＡＣ１０８のＢサイド中に存在する条件付き分岐命令の実行に基づいて、Ｂサイド条件付き分岐予測器３１２Ｂを更新する。
【００４１】
理解できることは、図１の分岐予測器１００は、従来のハッシングロジック３０６が、ブロックアドレス１２２を用いてハッシュされるので、そのハッシングロジック１０６により生成されるインデックス１６４／１６６が、従来のハッシングロジック３０６により生成される単一インデックス３６４よりさらに正確である潜在的利点を有し、その一方、上述のように、図１の実施態様のハッシングロジック１０６は、条件付き分岐命令のバイトオフセット１５４／１５６を用いる長所を有するので、各条件付き分岐命令の正確なアドレスを用いてハッシュする。
【００４２】
更に理解できることは、図１の分岐予測器１００は、各インデックス１６４／１６６が、従来の分岐予測器３００より大きいメモリアレイで、方向予測情報を検索することができるという潜在的利点がある。つまり、図３の二個のアレイ３１２Ａと３１２Ｂのエントリーの組み合わせ数と同じ数量の図１の単一アレイ１１２中のエントリー数がＮ個であると仮定し、且つ、図３の二個のアレイ３１２Ａ、および、３１２Ｂが別々に更新されて、これにより異なる情報を含み、図１の実施態様の二個のインデックス１６４／１６６がそれぞれ、全部のＮ個のエントリーの検索を開始する。その一方、従来の分岐予測器３００は単一インデックス３６４を有して、図３の二個のアレイ３１２Ａ、および、３１２ＢのＮ個のエントリーの各半分を検索する。理解できることは、この潜在的利点は、図１の実施態様の単一アレイ１１２がデュアルポートであるが、図３の二個のアレイ３１２Ａ、および、３１２Ｂがそれぞれ、単一ポートであり、図１の実施態様の単一アレイ１１２がさらに大きいという事実のトレードオフとして得られることである。
【００４３】
上述のように、分岐予測器１００はレイテンシーを有し、すなわち、ブロックアドレス１２２、および、分岐パターン１０４を受信した後、複数のクロック周期で、フェッチユニット１０１を最終予測宛先アドレス１２８にリダイレクトする必要がある。分岐予測器１００のレイテンシーがＮ個のクロック周期であると仮定する。一実施態様において、フェッチユニット１０１がリダイレクトされるとき、フェッチユニット１０１は、宛先アドレス１２８で、命令バイトブロック１２４のフェッチを初期化するとともに、次のN-1クロック周期に対し、逐次、フェッチを初期化し、同時に、分岐予測器１００が、リダイレクトされた宛先アドレス１２８でフェッチされる命令バイトブロック１２４の予測を生成する。つまり、フェッチユニット１０１は分岐を受け入れないと仮定する。Ｎ個のクロック周期後、分岐予測器１００がリダイレクトし、その仮定が正しくないことを示す場合、逐次的に不正確にフェッチされるＮ-１個の命令バイトブロック１２４が無効になり、すなわち、命令キューから効果的に除去され、キューが十分な命令を命令変換装置に提供せず、実行パイプラインの良好な使用を維持する。
【００４４】
よって、さらに理解できることは、図１の実施態様の潜在的利点は、いくつかの実施態様における事実のトレードオフとして得られ、それは、以下のようである。ＢＴＡＣ１０８とハッシングロジック１０６のレイテンシーが十分に大きくて、分岐予測器１００が、従来の分岐予測器３００よりも追加のクロック周期を必要とし、これは、さらに頻繁に、キューが十分でないという結果を有する。しかし、特定の実行は、このトレードオフが、プロセス技術、クロック周期期間、および、ロジックゲートパス長さに基づくかどうかという問題を生じる。
【００４５】
今記述されている実施態様は、二個の明確な分岐命令アドレスを用いて、二個の異なるインデックスを生成することにより、条件付き分岐命令方向予測器の正確さを増加させる潜在的利点を有し、図１の実施態様で実施されているが、ＢＴＡＣ１０８がバイトオフセット１５４／１５６を生成して、ハッシングを実行し、インデックス１６４／１６６の生成に関する遅延が発生せず、これにより、分岐予測器１００全体のレイテンシーを増加させることがない。理解できることは、図１の実施態様よりも精度が悪い損失（分岐パターン１０４でハッシュされる二個の形成された条件付き分岐命令アドレスの精度が悪いので）で、第二長所が潜在的に得られ、以下で詳細に記述される。
【００４６】
図４は、別の実施態様による分岐予測器１００を有するプロセッサ１０３のブロック図である。図４の実施態様は、多くの方面で、図１の実施態様と類似する。しかし、図４のハッシングロジック４０６は、ＢＴＡＣ１０８からバイトオフセット１５４／１５６を受信するのではく、二個の所定値を受信して、分岐パターン１０４でハッシュされる二個の明確な分岐命令アドレスを形成し、条件付き分岐予測器１１２に提供されるＡサイドインデックス１６４とＢサイドインデックス１６６を生成する。図４に示される実施態様において、二個の所定値はゼロ(“０”)４５４と１(“１”)４５６である。好ましくは、ハッシングロジック１０６は、“０”値４５４とブロックアドレス１２２を連結することにより、第一分岐命令アドレスを形成し、“１”値４５６とブロックアドレス１２２を連結することにより、第二分岐命令アドレスを形成し、分岐パターン１０４を有するこれらの二個のアドレスのそれぞれをハッシュして、インデックス１６４／１６６を生成する。好ましくは、ハッシングロジック１０６は、その他のハッシュ実施態様が検討されてもよいが、図１に関して記述されるのと同じ方式で、二個のハッシュを実行する。
【００４７】
図１と図４の実施態様間の別の差異は、制御論理部１１４が、方向１７４をＡサイド宛先アドレス１４４およびＡサイドバイトオフセット１５４と関連付けるとともに、方向１７６をＢサイド宛先アドレス１４６およびＢサイドバイトオフセット１５６と関連付ける図１の実施態様と異なり、図４の実施態様の制御論理部４１４は、方向１７４を、二個のバイトオフセット１５４／１５６中の最小バイトオフセットを有する二個の宛先アドレス１４４／１４６の一サイドと関連付けるとともに、方向１７６を、二個のバイトオフセット１５４／１５６中の最大バイトオフセットを有する二個の宛先アドレス１４４／１４６の一サイドと関連づける。
【００４８】
図１と図４の実施態様間のさらに別の差異は、条件付き分岐命令の実際のアドレスが用いられて、条件付き分岐予測器１１２を更新する図１の実施態様と異なり、図４の実施態様は、さらに、ハッシングロジック１０６により計算されるインデックス１６４／１６６を保持するとともに、それらの適当な一つを用いて、条件付き分岐命令が実行された後、条件付き分岐予測器１１２を更新する。
【００４９】
図５は、図４の分岐予測器１００の操作を説明するフローチャートである。図２のように、図５は、下向きの時間推移を示すと共に、水平に互いに平行なブロックで実行される動作が実質的に同時に並行して発生することを説明する。工程はブロック２０２から始まる。
【００５０】
ブロック２０２において、フェッチユニット１０１はブロックアドレス１２２を生成するとともに、それを、図４の命令キャッシュ１０２、ＢＴＡＣ１０８、および、ハッシングロジック４０６に提供する。工程は、ブロック２０４、２０６と５０８に平行に進む。
【００５１】
ブロック２０４においては、命令キャッシュ１０２は命令バイトブロック１２４を出力する。工程はブロック５１４に進む。
【００５２】
ブロック２０６において、ＢＴＡＣ１０８は、予測された宛先アドレス１４４／１４６、バイトオフセット１５４／１５６、および、ヒットインジケーター１３２を、各サイド、つまり、ＡサイドとＢサイドに出力する。工程は、ブロック５１４に進む。
【００５３】
ブロック５０８において、ハッシングロジック４０６は、分岐パターン１０４により、ブロックアドレス１２２、“０”値４５４、および、“１”値４５６から形成される二個の分岐命令アドレスのそれぞれをハッシュして、ＡサイドとＢサイドのインデックス１６４／１６６を生成する。工程はブロック２１２に進む。
【００５４】
ブロック２１２において、条件付き分岐予測器１１２はインデックス１６４／１６６を受信するとともに、それに応じて、ＡサイドとＢサイドの方向予測１７４／１７６、および、ヒットインジケーター１７２を生成する。工程はブロック５１４に進む。
【００５５】
ブロック５１４において、制御論理部４１４は、バイトオフセット１５４／１５６を観察して、どれが小さくてどれが大きいのか判断する。制御論理部４１４は、Ａサイド方向予測１７４を、宛先アドレス１５４／１５６中の二個のバイトオフセット１５４／１５６の小さいほうを有するＢＴＡＣ１０８の一側と関連付けるとともに、Ｂサイド方向予測１７６を、宛先アドレス１５４／１５６中の二個のバイトオフセット１５４／１５６の大きいほうを有する一側と関連付ける。この基本に基づいて、制御論理部４１４は、ＢＴＡＣ１０８と条件付き分岐予測器１１２が、有効、見える、受け入れられる分岐命令が命令バイトブロック１２４中に存在するかを予測するかどうか一緒に判断する。そうである場合、制御論理部４１４は、最終結果１２８上で、フェッチユニット１０１に、最初の、有効、見える、受け入れられる分岐命令を有するサイドの宛先アドレス１４４／１４６を出力して、プログラムの流れを選択された宛先アドレス１４４／１４６にリダイレクトする。工程はブロック５１４で終了する。
【００５６】
図４の実施態様の潜在的利点は、条件付き分岐予測器１１２は、ＢＴＡＣ１０８により生成されるバイトオフセット１５４／１５６を使わず、これにより、ＢＴＡＣ１０８を待つ必要がなくそれらを生成するので、条件付き分岐予測器１１２が、ＢＴＡＣ１０８がその出力を生成するのと同じクロック周期中に、方向１７４／１７６(および、ヒットインジケーター１７２)を生成することである。それ故に、いくつかの実施において、図４の分岐予測器１００は、その最終結果１２８を、図１の分岐予測器１００より早いクロック周期にすることができる。分岐命令アドレスは、ＢＴＡＣ１０８により提供される実際のバイトオフセット１５４／１５６ではなく、コンスタントな“０”と“１”値を用いて形成されるので、ハッシングロジック４０６によりハッシュされる分岐命令アドレスの低精度のため、潜在的に低い分岐予測精度の欠点においてこの長所が高く評価されている。
【００５７】
このほか、新しい分岐命令がＢＴＡＣ１０８に割り当てられるとき、潜在的欠点において、この長所が高く評価される。上述のように、これは、図４の実施態様の制御論理部４１４が、それらの関連するバイトオフセット１５４／１５６の相対サイズに基づいて、方向１７４／１７６を、宛先アドレス１４４／１４６と関連付ける事実によるものである。さらに特に、新しい分岐命令は、代替される分岐命令のバイトオフセットと異なるバイトオフセットを有する。それ故に、ＢＴＡＣ１０８の別のサイド中の残りのバイトオフセットに比べて、命令バイトブロック１２４中の二個の分岐命令の相対位置に変化がある(つまり、小さい方からより大きいオフセットへの変化、あるいは、その逆)かもしれないので、分岐履歴情報が更新されるまで、分岐予測器１００は、二個の分岐命令の数インスタンス分の誤った予測情報を用いることがある。
【００５８】
本発明では好ましい実施態様を前述の通り開示したが、それらは例であり、この限りではないと理解されるべきである。関連のあるコンピュータ技術における当業者ならわかるように、本発明の精神と領域を脱しない範囲内で、構成と細部において各種変更が可能である。たとえば、ソフトウェアは、たとえば、ここで記述された装置と方法の機能、製造、モデリング、シミュレーション、記述および／またはテスティングを可能にする。これは、汎用プログラミング言語(たとえば、C,C++)、Verilog HDL,VHDLなどを含むハードウェア記述言語(HDL)、あるいは、その他の可用なプログラムの使用により達成される。このようなソフトウェアは、既知のコンピュータ可用媒体、たとえば、磁気テープ、半導体、磁気ディスク、あるいは、光学ディスク(たとえば、CD-ROM、DVD-ROMなど)、ネットワーク、有線、あるいは、その他の通信媒体中に設置される。ここで記述される装置と方法の実施態様は、半導体ＩＰコア、たとえば、プロセッサコア(たとえば、ＨＤＬで具体化あるいは定義される)中に含まれ、集積回路の製造において、ハードウェアに変換される。このほか、ここで記述される装置と方法は、ハードウェア、および、ソフトウェアの組み合わせとして具体化される。よって、本発明は、ここで記述される例示的な実施態様に制限されず、添付の請求項とそれらの等価物に基づいてのみ定義されるべきである。特に、本発明は、汎用コンピュータに用いられるプロセッサ装置中で実行される。最後に、当業者なら理解できるように、本発明の精神と領域を脱しない範囲内で各種の変更を加えることができ、従って本発明の保護範囲は、特許請求の範囲で定義された内容を基準とする。
【符号の説明】
【００５９】
１００…分岐予測器
１０３…プロセッサ
１０１…フェッチユニット
１０２…命令キャッシュ
１０４…分岐パターン
１０６…ハッシングロジック
１０８…分岐宛先アドレスキャッシュ(ＢＴＡＣ)
１１２…条件付き分岐予測器
１１４…制御論理部
１２２…ブロックアドレス
１２４…命令バイトブロック（アーキテクチャ命令バイト）
１２８…宛先アドレス（あるいは、最終結果）
１３２、１７２…ヒットインジケーター
１４４…Ａサイド宛先アドレス
１４６…Ｂサイド宛先アドレス
１５４／１５６…バイトオフセット
１６４／１６６…インデックス
１７４／１７６…方向予測
３００…従来の分岐予測器
３０６…ハッシングロジック
３１２Ａ、３１２Ｂ…条件付き分岐予測器
３６４…単一インデックス
４０６…ハッシングロジック
【図１】
2018063684.tif 000003
【図２】
2018063684.tif 000004
【図３】
2018063684.tif 000005
【図４】
2018063684.tif 000006
【図５】
2018063684.tif 000007