(57)【要約】分岐ターゲットバッファ（ＢＴＢ）動作を改善する技術である。圧縮ＢＴＢは、非圧縮ＢＴＢと共に分岐予測ユニット内に含まれている。サイクル毎に最大２つの分岐命令の予測をサポートするために、非圧縮ＢＴＢは、最大２つの分岐予測に関するデータをそれぞれ記憶するエントリを含む。圧縮ＢＴＢは、単一の分岐命令を非圧縮ＢＴＢに記憶することがそのバッファ内のスペースを無駄にするような状況のために、当該単一の分岐命令のみに関するデータを記憶するエントリを含む。サイクル毎に２つの分岐ルックアップをサポートするために、２つの分岐に関する予測データが、単一のエントリに共に記憶されるために共通する特定の機能（キャッシュラインアドレス等）を有する必要があるという事実に起因して、非圧縮ＢＴＢ内のスペースが無駄になる。【選択図】図３
2019526873.tif 000002
【特許請求の範囲】
【請求項１】
分岐ターゲットバッファデータを操作する方法であって、
ルックアップタグを圧縮分岐ターゲットバッファ及び非圧縮分岐ターゲットバッファに提供することであって、前記非圧縮分岐ターゲットバッファは、２つ以上の分岐に関するデータを含むエントリを記憶するように構成されており、前記圧縮分岐ターゲットバッファは、単一の分岐のみに関するデータをそれぞれ含むエントリを記憶するように構成されている、ことと、
前記ルックアップタグに基づいて、前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファの一方又は両方から分岐ターゲットバッファエントリを識別することと、
分岐を予測するために、前記分岐ターゲットバッファエントリに対応するデータを分岐予測ロジックに出力することと、を含む、
方法。
【請求項２】
前記ルックアップタグは、分岐予測のために検査されたキャッシュラインのキャッシュラインアドレスに関連する値を含み、
前記非圧縮分岐ターゲットバッファは、同じキャッシュラインアドレスを共有する分岐に関するエントリを記憶するように構成されている、
請求項１の方法。
【請求項３】
前記圧縮分岐ターゲットバッファは、１つ以上の属性が圧縮されているエントリを記憶するように構成されており、
前記非圧縮分岐ターゲットバッファは、属性が圧縮されていないエントリを記憶するように構成されている、
請求項１の方法。
【請求項４】
前記非圧縮分岐ターゲットバッファのエントリは、第１属性フィールドに対する第１属性値を含み、
前記圧縮分岐ターゲットバッファのエントリは、前記第１属性フィールドに対する属性値を含まず、
前記圧縮分岐ターゲットバッファの全てのエントリは、前記第１属性フィールドに対して同じ値を有する、
請求項１の方法。
【請求項５】
前記非圧縮分岐ターゲットバッファのエントリについての第１属性フィールドは、エントリがキャッシュライン内で最後に予測された分岐である分岐に関するデータを含むかどうかを示すラストインキャッシュラインフィールドを含み、
前記圧縮分岐ターゲットバッファの全てのエントリは、キャッシュライン内で最後に予測された分岐である分岐に関するデータを記憶するが、前記ラストインキャッシュラインフィールドを含まないように構成されている、
請求項１の方法。
【請求項６】
前記分岐ターゲットバッファエントリを識別することは、
前記圧縮分岐ターゲットバッファ又は前記非圧縮分岐ターゲットバッファ内の複数の分岐ターゲットバッファエントリが前記ルックアップタグとタグを共有していることを検出することを含み、
前記方法は、出力のために、前記複数の分岐ターゲットバッファエントリのうち１つを選択することをさらに含む、
請求項１の方法。
【請求項７】
前記１つ以上の分岐ターゲットバッファエントリのうち１つが選択される第１サイクルに続く処理サイクルにおいて、出力のために、前記複数の分岐ターゲットバッファエントリのうち第２分岐ターゲットバッファエントリを選択することをさらに含む、
請求項６の方法。
【請求項８】
単一の分岐のみに関するデータをそれぞれ含むエントリを記憶するように構成された圧縮分岐ターゲットバッファと、
２つ以上の分岐に関するデータを含むエントリを記憶するように構成された非圧縮分岐ターゲットバッファと、を備え、
前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファの両方は、
提供されたルックアップタグに基づいて、１つ以上の分岐ターゲットバッファエントリを識別することと、
分岐を予測するために、識別された前記１つ以上の分岐ターゲットバッファエントリに対応するデータを予測ロジックに出力することと、
を行うように構成されている、
分岐予測ユニット。
【請求項９】
前記ルックアップタグは、分岐予測のために検査されたキャッシュラインのキャッシュラインアドレスに関連する値を含み、
前記非圧縮分岐ターゲットバッファは、同じキャッシュラインアドレスを共有する分岐に関するエントリを記憶するように構成されている、
請求項８の分岐予測ユニット。
【請求項１０】
前記圧縮分岐ターゲットバッファは、１つ以上の属性が圧縮されているエントリを記憶するように構成されており、
前記非圧縮分岐ターゲットバッファは、属性が圧縮されていないエントリを記憶するように構成されている、
請求項８の分岐予測ユニット。
【請求項１１】
前記非圧縮分岐ターゲットバッファのエントリは、第１属性フィールドに対する第１属性値を含み、
前記圧縮分岐ターゲットバッファのエントリは、前記第１属性フィールドに対する属性値を含まず、
前記圧縮分岐ターゲットバッファの全てのエントリは、前記第１属性フィールドに対して同じ値を有する、
請求項８の分岐予測ユニット。
【請求項１２】
前記非圧縮分岐ターゲットバッファのエントリについての第１属性フィールドは、エントリがキャッシュライン内で最後に予測された分岐である分岐に関するデータを含むかどうかを示すラストインキャッシュラインフィールドを含み、
前記圧縮分岐ターゲットバッファの全てのエントリは、キャッシュライン内で最後に予測された分岐である分岐に関するデータを記憶するが、前記ラストインキャッシュラインフィールドを含まないように構成されている、
請求項８の分岐予測ユニット。
【請求項１３】
前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、前記圧縮分岐ターゲットバッファ又は前記非圧縮分岐ターゲットバッファ内の複数の分岐ターゲットバッファエントリが前記ルックアップタグとタグを共有していることを検出することによって、前記１つ以上の分岐ターゲットバッファエントリを識別することを行うように構成されており、
前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、出力のために、前記複数の分岐ターゲットバッファエントリのうち１つを選択するように構成されている、
請求項８の分岐予測ユニット。
【請求項１４】
前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、前記１つ以上の分岐ターゲットバッファエントリのうち１つが選択される第１サイクルに続く処理サイクルにおいて、出力のために、前記複数の分岐ターゲットバッファエントリのうち第２分岐ターゲットバッファエントリを選択することをさらに行うように構成されている、
請求項１３の分岐予測ユニット。
【請求項１５】
分岐予測結果を出力するように構成された分岐予測ユニットと、
前記分岐予測結果に基づいて、実行するための命令を出力するように構成された命令フェッチユニットと、
前記命令フェッチユニットから出力された命令を実行するように構成された命令実行パイプラインと、を備え、
前記分岐予測ユニットは、
単一の分岐のみに関するデータをそれぞれ含むエントリを記憶するように構成された圧縮分岐ターゲットバッファと、
２つ以上の分岐に関するデータを含むエントリを記憶するように構成された非圧縮分岐ターゲットバッファと、を備え、
前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファの両方は、
提供されたルックアップタグに基づいて、１つ以上の分岐ターゲットバッファエントリを識別することと、
分岐を予測するために、識別された前記１つ以上の分岐ターゲットバッファエントリに対応するデータを予測ロジックに出力することと、
を行うように構成されている、
プロセッサ。
【請求項１６】
前記ルックアップタグは、分岐予測のために検査されたキャッシュラインのキャッシュラインアドレスに関連する値を含み、
前記非圧縮分岐ターゲットバッファは、同じキャッシュラインアドレスを共有する分岐に関するエントリを記憶するように構成されている、
請求項１５のプロセッサ。
【請求項１７】
前記圧縮分岐ターゲットバッファは、１つ以上の属性が圧縮されているエントリを記憶するように構成されており、
前記非圧縮分岐ターゲットバッファは、属性が圧縮されていないエントリを記憶するように構成されている、
請求項１５のプロセッサ。
【請求項１８】
前記非圧縮分岐ターゲットバッファのエントリは、第１属性フィールドに対する第１属性値を含み、
前記圧縮分岐ターゲットバッファのエントリは、前記第１属性フィールドに対する属性値を含まず、
前記圧縮分岐ターゲットバッファの全てのエントリは、前記第１属性フィールドに対して同じ値を有する、
請求項１５のプロセッサ。
【請求項１９】
前記非圧縮分岐ターゲットバッファのエントリについての第１属性フィールドは、エントリがキャッシュライン内で最後に予測された分岐である分岐に関するデータを含むかどうかを示すラストインキャッシュラインフィールドを含み、
前記圧縮分岐ターゲットバッファの全てのエントリは、キャッシュライン内で最後に予測された分岐である分岐に関するデータを記憶するが、前記ラストインキャッシュラインフィールドを含まないように構成されている、
請求項１５のプロセッサ。
【請求項２０】
前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、前記圧縮分岐ターゲットバッファ又は前記非圧縮分岐ターゲットバッファ内の複数の分岐ターゲットバッファエントリが前記ルックアップタグとタグを共有していることを検出することによって、前記１つ以上の分岐ターゲットバッファエントリを識別することを行うように構成されており、
前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、出力のために、前記複数の分岐ターゲットバッファエントリのうち１つを選択するように構成されている、
請求項１５のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年８月３０日に出願された米国特許出願第１５／２５２，１６４号の利益を主張し、その内容は、完全に記載されているかのように、参照により本明細書に組み込まれる。
【背景技術】
【０００２】
マイクロプロセッサでは、命令は、分岐が発生するまで順次実行するためにフェッチされる。分岐は、命令がフェッチされるアドレスの変更を生じさせ、命令フェッチスループットの遅延に関連する場合がある。例えば、分岐が成立するかどうかを判別すると共に分岐先を判別するために当該分岐の評価を要する場合がある。しかしながら、分岐が実際に命令実行パイプラインに入るまで当該分岐を評価することができない。分岐の遅延は、分岐がフェッチされる時間と、その分岐の結果を判別し、これにより何れの命令が次にフェッチされる必要があるかを判別するために分岐を評価する時間と、の間の差に関連している。
【０００３】
分岐予測は、命令アドレス及び分岐評価履歴に基づいて分岐命令の存在及び結果を予測することによって、この遅延を軽減するのに役立つ。分岐予測技術は、分岐条件付き判別（例えば、成立する又は成立しない）のグローバル履歴及び最新のプログラムカウンタ値を使用して、分岐が存在するかどうか及び分岐が成立するかどうかの予測を行う。分岐ターゲットバッファは、プログラムカウンタアドレスを分岐ターゲットと関連付ける情報を記憶する。分岐ターゲットバッファ内にエントリが存在することは、当該エントリに関連するプログラムカウンタに分岐が存在することを暗黙的に示している。分岐予測子は、分岐予測判別を行うために、グローバル履歴及び分岐ターゲットバッファデータを使用することができる。分岐命令に関連する遅延のために、効率的な分岐予測及び好適に設計された分岐予測ロジックが、マイクロプロセッサ設計において重要である。
【０００４】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【０００５】
【図１】１つ以上の開示された実施形態を実施することができる例示的なデバイスのブロック図である。
【図２】図１のプロセッサ内に配置された命令実行パイプラインのブロック図である。
【図３】例示的な分岐予測ユニットを示すブロック図である。
【図４】一例による、非圧縮分岐ターゲットバッファ及び圧縮分岐ターゲットバッファの両方のエントリを示す図である。
【図５】一例による、圧縮分岐ターゲットバッファ及び非圧縮分岐ターゲットバッファを使用して分岐ターゲット予測データを取得する方法のフロー図である。
【図６】一例による、非圧縮分岐ターゲットバッファ及び圧縮分岐ターゲットバッファを更新する方法のフロー図である。
【発明を実施するための形態】
【０００６】
圧縮分岐ターゲットバッファは、非圧縮分岐ターゲットバッファと共に分岐予測ユニットに含まれる。サイクル毎に最大２つの分岐命令の予測をサポートするために、非圧縮分岐ターゲットバッファは、最大２つの分岐予測に関するデータをそれぞれ記憶するエントリを含む。圧縮分岐ターゲットバッファは、単一の分岐命令を非圧縮分岐ターゲットバッファに記憶することが当該バッファ内のスペースを無駄にするような状況のために、単一の分岐命令のみに関するデータを記憶するエントリを含む。２つの分岐に関する予測データが、単一のエントリに共に記憶されるために共通する特定の機能（キャッシュラインアドレス等）を有する必要があるという事実に起因して、非圧縮分岐ターゲットバッファ内のスペースが無駄になる。ある分岐が他の分岐とかかる機能を共有していない場合、当該分岐は、非圧縮分岐ターゲットバッファ内に独自のエントリを必要とする。代わりに、その分岐は、圧縮分岐ターゲットバッファに記憶される。
【０００７】
図１は、本開示の態様が実施される例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージデバイス１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。また、デバイス１００は、入力ドライバ１１２及び出力ドライバ１１４をオプションで含むことができる。デバイス１００は、図１に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
【０００８】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサを含み、各プロセッサコアはＣＰＵ又はＧＰＵである。メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ若しくはキャッシュ等の揮発性又は不揮発性メモリを含む。
【０００９】
ストレージデバイス１０６は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定又は取り外し可能なストレージデバイスを含む。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含む。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバック装置、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含む。
【００１０】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信することを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信することを可能にする。入力ドライバ１１２及び出力ドライバ１１４は、オプションのコンポーネントであり、デバイス１００は、入力ドライバ１１２及び出力ドライバ１１４が存在しない場合であっても同様に動作することに留意されたい。
【００１１】
図２は、図１のプロセッサ１０２内に配置された命令実行パイプライン２００のブロック図である。命令実行パイプライン２００は、データをメモリに出力し、命令実行パイプライン２００内の要素（例えば、レジスタファイル２１８内のレジスタ等）の状態を変更する命令をメモリから取り出して実行する。
【００１２】
命令実行パイプライン２００は、命令キャッシュ２０２を介してシステムメモリ（メモリ１０４等）から命令をフェッチするように構成された命令フェッチユニット２０４と、フェッチされた命令をデコードするように構成されたデコーダ２０８と、命令を処理するための計算を実行するように構成された機能ユニット２１６と、データキャッシュ２２０を介してシステムメモリからデータをロードし、システムメモリにデータを記憶するように構成されたロード／ストアユニット２１４と、命令に対する作業データを記憶するレジスタを含むレジスタファイル２１８と、を含む。リオーダ（reorder）バッファ２１０は、現在インフライトの命令を追跡し、インフライトの間にアウトオブオーダの実行を許容するにも関わらず命令のインオーダリタイアメントを保証する。「インフライト」命令は、リオーダバッファ２１０によって受信されたが、プロセッサのアーキテクチャの状態にコミットされた結果（例えば、レジスタファイルに書き込まれた結果等）を未だ有していない命令を指す。予約ステーション２１２は、インフライト命令を維持し、命令オペランドを追跡する。全てのオペランドが特定の命令の実行のために準備されている場合に、予約ステーション２１２は、命令を、実行するために機能ユニット２１６又はロード／ストアユニット２１４に送信する。完了した命令は、リオーダバッファ２１０へのリタイアメント（退避）のためにマークされ、リオーダバッファキュー２１０の先頭にある場合にリタイアされる。リタイアメントは、命令の結果をプロセッサのアーキテクチャの状態にコミットする動作を指す。例えば、加算命令によって、加算結果をレジスタに書き込むことと、ロード命令によって、ロードされた値をレジスタに書き込むことと、又は、分岐命令によって、命令フローを新たな位置にジャンプさせることと、の全ては、命令のリタイアメントの例である。
【００１３】
命令実行パイプライン２００の様々な要素は、共通データバス２２２を介して通信する。例えば、機能ユニット２１６及びロード／ストアユニット２１４は、依存命令の実行のために予約ステーション２１２によって読み出され得る結果であって、実行が終了したインフライト命令の最終的な処理結果としてリオーダバッファ２１０によって読み出され得る結果を、共通データバス２２２に書き込む。また、ロード／ストアユニット２１４は、共通データバス２２２からデータを読み出す。例えば、ロード／ストアユニット２１４は、完了した命令の結果を共通データバス２２２から読み出し、ストア命令に対して、当該結果を、データキャッシュ２２０を介してメモリに書き込む。
【００１４】
通常、命令フェッチユニット２０４は、メモリ内の命令をシーケンシャルフェッチする。シーケンシャル制御フローは、命令パイプライン２００に非シーケンシャルアドレスから命令をフェッチさせる分岐命令によって中断されることがある。分岐命令は、条件付きであってもよく、特定の条件が満たされる場合にのみ分岐を生じさせてもよいし、条件付きでなくてもよく、ターゲットを直接又は間接的に指定してもよい。直接的なターゲットは、命令バイト自体の定数によって指定され、間接的なターゲットは、何等かの計算によって指定される。直接的な分岐及び間接的な分岐は、条件付きであってもよいし、条件付きでなくてもよい。
【００１５】
命令のシーケンシャルフェッチは、命令実行パイプライン２００にとって比較的単純である。命令フェッチユニット２０４は、実行のために連続して記憶された命令の大部分をシーケンシャルフェッチする。しかしながら、分岐命令は、いくつかの理由でかかるフェッチを中断することがある。より具体的には、分岐命令のタイプに応じて、命令デコーダ２０８が、命令が実際には分岐命令であると判別することと、機能ユニット２１６が、分岐命令のターゲットを計算することと、機能ユニット２１６が、分岐命令の条件を評価することと、のうち何れか又は全てが分岐命令の実行に関して行われてもよい。命令フェッチユニット２０４による実行のために分岐命令がフェッチ及び発行されるときと、分岐命令が命令実行パイプライン２００によって実際に実行されるときと、の間に遅延が存在するので、命令フェッチユニット２０４は、分岐予測ユニット２０６を含む。
【００１６】
分岐予測ユニット２０６は、フェッチされる命令のアドレスに基づいて分岐条件付き予測（例えば、成立する又は成立しない）及び分岐ターゲット予測を生成する。分岐予測ユニット２０６は、様々な既知の技術の何れかを介して維持及び操作された分岐条件付き履歴と、命令プログラムカウンタを分岐ターゲットアドレスと相関させる分岐ターゲット履歴と、を使用することができる。分岐予測ユニット２０６は、予測された分岐を検出し、予測された分岐の予測されたターゲットアドレスを識別し、ターゲットパスが成立したと予測すると、予測されたターゲットアドレスからの命令のフェッチを命令フェッチユニット２０４に開始させる。したがって、分岐予測ユニット２０６は、分岐命令の結果として生じる遅延を減らすのに役立つ。
【００１７】
分岐は、分岐予測ユニット２０６によって予測されるが、このような予測は不正確である可能性がある。したがって、分岐命令は、依然として、実行のために残りの命令実行パイプライン２００に送信される。分岐予測が正確であると判別されると、プロセッサ命令フローは修正されない。しかしながら、分岐予測が不正確（予測ミス）であると判別されると、命令実行パイプライン状態をリセットすることと、分岐予測ユニット２０６によって記憶された分岐予測データを修正することと、を含む是正措置がもたらされる。
【００１８】
より具体的には、命令実行パイプライン２００が分岐命令を実行し、その結果を分岐予測と比較することによって、予測ミスが検出される。命令実行パイプライン２００は、分岐が予測ミスであるという判別を行うと、プログラムカウンタを含むプロセッサ状態を修正し、この修正されたプログラムカウンタに基づいて命令のフェッチを開始する。プロセッサ状態を修正することは、予測ミスの分岐命令に関連する制御フローパスからのインフライト命令をフラッシュすることと、予測ミスの制御フローパスに関連する命令を把握するために他のパイプライン状態データを元に戻すことと、を含む場合があり、性能が大幅に低下する可能性がある。このため、正確な分岐予測は、全体的な処理性能を向上させる。
【００１９】
図３は、例示的な分岐予測ユニット２０６を示すブロック図である。図示するように、分岐予測ユニット２０６は、条件付き予測器３０４と、非圧縮分岐ターゲットバッファ（ＢＴＢ）３１０と、圧縮ＢＴＢ３１２と、グローバル履歴メモリ３０８と、予測器３０６と、を含む。圧縮ＢＴＢ３１２及び非圧縮ＢＴＢ３１０は、共にＢＴＢ３０２を含む。
【００２０】
分岐予測ユニット２０６のユニットは、協働して、検査中の分岐命令の結果を予測し、予測された分岐結果に基づいて、命令フェッチのために予測されたアドレスを命令フェッチユニット２０４に提供する。予測器３０６から出力された予測情報は、次の命令をフェッチするための予測アドレスと、条件付き分岐が成立するか否かを表す予測条件付き判別と、を含む。予測器３０６は、更なる予測のために、アドレス及び条件付き判別を、グローバル履歴メモリ３０８と、条件付き予測器３０４と、非圧縮ＢＴＢ３１０と、圧縮ＢＴＢ３１２と、に提供する。グローバル履歴３０８は、予測情報に基づいて分岐予測履歴の内部記憶を更新し、グローバル履歴値を条件付き予測器３０４に出力する。また、条件付き予測器３０４は、条件付き予測を提供するために、予測された次のアドレスを予測器３０６から受信する。条件付き予測器３０４は、任意の既知の技術に従って条件付き予測を提供してもよい。一例では、条件付き予測器３０４は、ＢＴＢ３１２内のエントリに基づいて、特定の命令が分岐命令であると予測されることを識別し、グローバル履歴メモリ３０８からグローバル分岐履歴ビット値を取得し、予測アルゴリズムに基づいてグローバル分岐履歴ビット値のビットを処理し、処理されたビットに基づいて予測結果を取得する。また、予測された次のアドレスは、命令ストリーム内の分岐命令の識別及びこれらの分岐命令の予測されたターゲットアドレスの判別のために、非圧縮ＢＴＢ３１０及び圧縮ＢＴＢ３１２にも並列に提供される。
【００２１】
非圧縮ＢＴＢ３１０は、高い予測スループットをサポートするために、サイクル毎に最大２つの分岐のルックアップを可能にする。この機能は、最大２つの分岐についてのデータを、非圧縮ＢＴＢ３１０の各エントリに含めることによって実現される。より具体的には、非圧縮ＢＴＢ３１０内のエントリは、命令キャッシュラインアドレスによってタグ付けされる。よって、単一の提供された命令キャッシュラインアドレスに対するヒットは、最大２つの予測された分岐ターゲット及び分岐命令であると予測された２つの命令がサイクル毎に提供されることを可能にする。しかしながら、非圧縮ＢＴＢ３１０内の単一のエントリが、２つ以上の予測された分岐命令についてのデータを記憶することができない状況が存在する場合がある。例えば、キャッシュラインが１つの分岐命令のみを含む場合、（キャッシュラインアドレスによってタグ付けされた）ＢＴＢエントリは、１つの分岐命令についてのデータのみを含むことができる。このような状況では、第２の予測された分岐命令に対応するエントリ内の追加のスペースが無駄になる。
【００２２】
したがって、圧縮ＢＴＢ３１２も含まれる。圧縮ＢＴＢ３１２は、単一の分岐予測ターゲットのみについてのデータサイズのエントリを含む。したがって、圧縮ＢＴＢ３１２内のエントリは、非圧縮ＢＴＢ３１０内のエントリ全体を満たすのに十分な分岐ターゲット予測データが特定のキャッシュラインに対して存在しない場合に使用されてもよい。圧縮ＢＴＢ３１２内のエントリは、非圧縮ＢＴＢ３１０と同様に、分岐予測が実行されているキャッシュラインのキャッシュラインアドレスを使用してルックアップされる。
【００２３】
非圧縮ＢＴＢ３１０に記憶されることになる分岐属性データの１つ以上の項目を圧縮することによって、圧縮ＢＴＢ３１２内のエントリにおける追加のスペースを節約することができる。いくつかの例では、この圧縮は、特定の属性についての「一般的な場合（common case）」の値を想定することによって達成される。一般的な場合と一致しない全ての分岐命令を圧縮ＢＴＢ３１２内に記憶することができず、圧縮ＢＴＢ３１２内の対応するエントリを有する全ての分岐命令は、一般的な場合の値を有すると想定される。また、圧縮は、特定の数のビットを必要とする値を、より少ないビットを必要とする他の値に置き換えることによって、又は、２つ以上の独立した属性フィールドを、２つ以上の独立した属性フィールドの共通の組み合わせを示す共有フィールドに変換することによって、より複雑な方法で実現することができる。ここで、共有フィールドは、独立した属性フィールドよりも少ないビットを有する。「一般的」とみなされる属性値のみを圧縮ＢＴＢ３１２に記憶することが許可され、一般的でない（非一般的な）属性値を有する分岐の分岐予測データは、非圧縮ＢＴＢ３１０に記憶される。単一の圧縮ＢＴＢ３１２のみが示されているが、分岐予測ユニット２０６は、代替的に、それぞれ異なる圧縮スキームを有する複数の圧縮ＢＴＢを含んでもよい。例えば、１つの圧縮ＢＴＢ内のエントリの属性は、１つの特定の値を有すると想定することができ、別の圧縮ＢＴＢ内のエントリの属性は、異なる特定の値を有すると想定することができる。圧縮スキームは、他の点で異なっていてもよい。
【００２４】
「非一般的な属性値」を有するために圧縮することができないエントリに加えて、他のタイプの１つのエントリを圧縮ＢＴＢ３１２に記憶することができない。より具体的には、いくつかの分岐ターゲットバッファエントリは、「ラージ（large）」分岐ターゲットバッファエントリとみなされる。ラージエントリは、短縮されたターゲットアドレスではなく、完全な長さのターゲットアドレスを含むエントリである。より具体的には、分岐命令は、通常、分岐命令自体のアドレスに比較的近いターゲットを有する。したがって、分岐命令のターゲットは、フルアドレスサイズよりも少ないビット数で分岐ターゲットバッファに記憶することができる。しかしながら、分岐命令が分岐命令のアドレスから十分に離れたターゲットを有する場合、分岐ターゲットバッファは、より多数のアドレスビットを記憶する必要がある。記憶に必要なビット数が多いので、このようなタイプの分岐命令は、非圧縮ＢＴＢ３１０に記憶され、圧縮ＢＴＢ３１２に記憶することができない。
【００２５】
圧縮ＢＴＢ３１２及び非圧縮ＢＴＢ３１０は、分岐予測の目的で現在検査されているキャッシュラインのキャッシュラインアドレスによってインデックスされたキャッシュとして具現化することができる。一例では、圧縮ＢＴＢ３１２及び非圧縮ＢＴＢ３１０は、ｎウェイのアソシアティブキャッシュを形成し、ｎウェイの第１の番号は、圧縮ＢＴＢ３１２を含み、ｎウェイの別の番号は、非圧縮ＢＴＢ３１０を含む。よって、キャッシュラインアドレスをタグとして提供し、更なる処理のために非圧縮ＢＴＢ３１２又は圧縮ＢＴＢ３１０の何れかから一致するエントリを識別することによって、非圧縮ＢＴＢ３１０及び圧縮ＢＴＢ３１２上で並行してルックアップを実行することができる。所定のタグに対して複数のエントリが存在する場合、競合するルックアップは、分岐予測のために単一のエントリからのデータの選択及び出力をもたらす。最新のすっくアップの全ての分岐が成立しないと予測される場合、残りのデータを取得するために、次のサイクルで同じキャッシュラインがルックアップされる。このシーケンシャルルックアップは、所定のキャッシュラインに対して更なるエントリが存在しなくなるまで、別のキャッシュラインへの分岐が発生すると予測されるまで、又は、ＰＣ若しくは予測されたＰＣが何らかの理由で変更するまで続く。
【００２６】
図４は、一例による、非圧縮ＢＴＢ３１０及び圧縮ＢＴＢ３１２の両方のエントリを示す図である。シングル分岐（圧縮）ＢＴＢエントリ４０２と、ダブル分岐（非圧縮）ＢＴＢエントリ４０４と、シングル分岐ラージターゲット（非圧縮）ＢＴＢエントリ４０６と、が示されている。
【００２７】
シングル分岐（圧縮）ＢＴＢエントリ４０２は、タグと、圧縮属性と、タイプと、オフセットと、ターゲットと、を含む。タグは、分岐命令が見つかったキャッシュラインのアドレスである。圧縮属性は、圧縮属性値を含む。上述したように、属性データを省略することによっていくつかの属性を圧縮することができるので、圧縮ＢＴＢ３１２内の何れかのエントリについての対応する属性は、その属性について特定の値を有すると想定される。属性に対応するビット数を減らし、特定の属性値を有する予測された分岐に対応する分岐予測データを圧縮ＢＴＢ３１２に記憶するのを可能にすることのみによって、他の属性を圧縮することができる。２つの属性フィールドを、２つの異なる属性に対する値の特定の組み合わせに対応する値を有する共有属性フィールドに組み合わせることによって、更に他の属性を圧縮することができる。
【００２８】
タイプフィールドは、分岐のタイプを記憶する。タイプフィールドのいくつかの例は、分岐が非条件付きジャンプ、条件付きジャンプ、間接呼び出し、呼び出し、リターン、又は、間接ジャンプであることの指標を含む。
【００２９】
オフセットフィールドは、分岐命令が見つかったキャッシュライン内の位置を示す。ターゲットフィールドは、分岐命令の予測されたターゲットアドレスを示す。上記のように、ターゲットフィールドは、分岐が通常近くにターゲットを有しているので、ターゲットのフルアドレスよりも短くてもよい。実際に、圧縮ＢＴＢ３１２内の全てのエントリは、このような短縮されたターゲットを記憶する。エントリが、短くないターゲットフィールド（すなわち、「ラージターゲット」である）を必要とする場合、当該エントリは、ラージターゲットＢＴＢエントリ４０６として非圧縮ＢＴＢ３１０に記憶される。
【００３０】
ダブル分岐ＢＴＢエントリ４０４は、２つの分岐についてのデータを含む。ダブル分岐ＢＴＢエントリ４０４には１つのタグのみが存在するので、これらの２つの分岐は、両方とも同じキャッシュライン内で見つかることに留意されたい。また、ダブル分岐ＢＴＢエントリ４０４内のデータは、非圧縮方式で記憶される。より具体的には、各属性のデータは明示的に記憶され、タイプフィールドは圧縮されず、圧縮ＢＴＢ３１２内で圧縮される他のデータは圧縮されない。また、ダブル分岐ＢＴＢエントリ４０４は、２つの記憶された分岐ターゲット毎に１つのタイプフィールド及び１つのオフセットフィールドを含む。
【００３１】
よって、圧縮ＢＴＢ３１２内のエントリから省略されるビットが含まれ、圧縮される値が非圧縮方式で記憶され、共有フィールドが個々のフィールドに分割される。圧縮ＢＴＢ３１２内で圧縮又は共有することができるタイプフィールドは、ダブル分岐ＢＴＢエントリ４０４では圧縮されていない。
【００３２】
ラージターゲットＢＴＢエントリ４０６は、シングル分岐ターゲットについてのタグと、属性と、タイプフィールドと、シングルラージターゲットフィールドと、を全て非圧縮方式で記憶する。ラージターゲットＢＴＢエントリ４０６は、ラージターゲットＢＴＢエントリ４０６が、１つの分岐のみについてのデータを含み、ターゲット値がダブル分岐ＢＴＢエントリ４０４内のターゲットフィールドよりも大きく、多くのビットを含むことを除いて、ダブル分岐ＢＴＢエントリ４０４と同様である。
【００３３】
いくつかの例示的な属性圧縮について説明する。これらの圧縮のいくつかが、「属性」フィールドに加えて「タイプ」フィールドを含んでもよいことに留意されたい。圧縮することができる属性の一例は、ラストインキャッシュラインフィールド（ＬＩＣフィールド）である。このフィールドは、特定のエントリが、特定のキャッシュライン内の最後の分岐である分岐についてのデータを記憶しているかどうかを示している。このフィールドの目的は、特定のＢＴＢエントリを取得した後に、次のサイクルで分岐についての特定のキャッシュラインをスキャンし続けるかどうか、又は、当該特定のキャッシュラインに更なる分岐が残っていないことを理由に、次のサイクルで次のキャッシュラインに進むかどうかを分岐予測ユニット２０６に知らせるのを可能にすることである。
【００３４】
一般的な場合では、特定のキャッシュラインに多数の分岐があることは稀であることから、ＬＩＣフィールドの値は、特定の分岐がキャッシュラインの最後の分岐であることを示している。よって、圧縮ＢＴＢ内のエントリは、キャッシュライン内の最後の分岐命令であるという、この一般的な場合であると想定される。ＢＴＢエントリがラストインキャッシュライン分岐を含まない場合、当該ＢＴＢエントリは、非圧縮ＢＴＢエントリとして非圧縮ＢＴＢ３１０に記憶される必要がある。しかしながら、エントリがラストインキャッシュライン分岐である分岐を含み、そうでなければ当該エントリを圧縮ＢＴＢ３１２に記憶することができる場合、圧縮ＢＴＢ３１２に対してこのようなエントリが生成され、ＬＩＣフィールドには値が含まれない。圧縮ＢＴＢ３１２内の全てのエントリは、ラストインキャッシュライン分岐を包むと想定される。（「ラストインキャッシュライン」という用語は、キャッシュライン内の最後に予測された分岐を意味することに留意されたい）。
【００３５】
別の例示的な圧縮技術は、有効フィールドを圧縮し、タイプフィールド内の特定の値を使用して無効エントリを示すことである。分岐のタイプを示すタイプフィールドは、複数の値のうち１つの値を有することができる。特定の分岐タイプは、レアであるとみなされる。圧縮ＢＴＢ３１２では、１つのレアタイプを示す代わりに、１つのレアタイプの値を有するタイプフィールドが、当該エントリが無効であることを代わりに示す。レアタイプを有する分岐を、圧縮ＢＴＢ３１２に記憶することができず、代わりに、非圧縮ＢＴＢ３１０に記憶する必要がある。
【００３６】
よって、有効フィールドは、圧縮ＢＴＢエントリ内で完全に省略されてもよい。より具体的には、非圧縮ＢＴＢエントリでは、有効フィールドは、予測された分岐データの１つのセットのみが有効であるかどうか、両方のセットが有効であるかどうか、エントリがラージターゲット分岐に対するものであるかどうか、又は、エントリ全体が無効であるかどうかを示すことができる。圧縮ＢＴＢエントリが２つの分岐についてのデータを記憶することができず、ラージターゲット分岐についてのデータも記憶することができないので、これらのエントリタイプの「有効フィールド」の符号化は不要である。圧縮ＢＴＢエントリに対して行う必要がある唯一の差は、有効と無効との間である。上記のように、無効エントリは、特定のタイプフィールド符号化によって示される。よって、無効フィールドを示さないタイプフィールド符号化は、エントリが有効であることを示す。このため、圧縮ＢＴＢエントリに対して別の有効フィールドが必要とされない。有効フィールド符号化は、上述した共有フィールド圧縮の一例であり、タイプフィールド及び有効フィールドが単一の共有タイプ／有効フィールドに圧縮されることに留意されたい。
【００３７】
圧縮可能なフィールドの別の例は、スレッド間共有フィールドである。非圧縮ＢＴＢ３１０では、スレッド間共有フィールドは、特定のエントリが命令実行パイプライン２００内で実行中の２つのスレッド間で共有されていることを示すために使用される。実行中、実行パイプライン２００は、異なるスレッドからの命令を処理し、当該命令（分岐を含む）が何れのスレッドに属しているかを追跡してもよい。共有実行モードでは、２つのスレッドが協働して、同じ命令セットを実行することができる。分岐予測ユニット２０６では、共有実行モードで実行している２つのスレッドがＢＴＢエントリを共有し、これにより、エントリが２つのスレッドについて重複しない。共有実行が一般的ではないので、スレッド間共有フィールドが圧縮ＢＴＢ３１２内で圧縮されてもよい。よって、圧縮ＢＴＢ３１２内のエントリに対して共有ビットが記憶されない。代わりに、圧縮ＢＴＢ３１２内の全てのエントリは、非共有であると想定される。共有分岐のエントリは、非圧縮ＢＴＢ３１０に記憶される。
【００３８】
上記の圧縮は一例に過ぎない。本明細書で説明する技術の異なる実装形態は、他の属性を圧縮してもよいし、及び／又は、上記の属性を異なる方法で圧縮してもよい。
【００３９】
データを圧縮ＢＴＢ３１２に書き込むために、属性ビットを圧縮又は除去するロジックが分岐予測ユニット２０６に含まれる。同様に、圧縮ＢＴＢ３１２からデータを読み出すために、属性ビットを復元又は圧縮解除するロジックが分岐予測ユニット２０６に含まれる。
【００４０】
タグがキャッシュラインアドレスであると説明したが、これは、タグのフォーマットの一例に過ぎない。タグは、キャッシュラインアドレスの一部のみを含んでもよいし、データがＢＴＢに記憶される予測された分岐のキャッシュラインアドレスに関連するか関連しない他の何等かの値であってもよい。
【００４１】
図５は、一例による、圧縮及び非圧縮分岐ターゲットバッファを使用して分岐ターゲット予測データを取得する方法５００のフロー図である。図１〜図４に関して示されたシステムに関して説明したが、技術的に実行可能な順序で方法を実行するように構成された任意のシステムが本開示の範囲内にあることを理解されたい。
【００４２】
図示するように、方法５００は、ステップ５０２において開始し、予測器３０６は、ルックアップのために次のアドレスを識別する。この次のアドレスは、分岐予測を検査するために次のキャッシュラインのキャッシュラインアドレスを含む。予測器３０６は、前の分岐予測演算に基づいて、このキャッシュラインアドレスを識別する。例えば、予測器３０６が、分岐が成立したと以前に予測し、当該分岐についての予測されたターゲットアドレスを取得した場合、予測器３０６は、分岐ターゲットのキャッシュラインに対応するキャッシュラインを提供する。予測器３０６が、分岐が成立していないと以前に予測していた場合、予測器３０６は、予測のために検査される次の順次キャッシュラインのアドレスを提供する。圧縮ＢＴＢ３１２及び非圧縮ＢＴＢ３１０内の単一のキャッシュラインについて複数のヒットがあるために、現在のキャッシュラインが依然として予測について検査されている場合、予測器３０６は、現在のキャッシュラインのアドレスを提供する。
【００４３】
ステップ５０４において、非圧縮ＢＴＢ３１０及び圧縮ＢＴＢ３１２は、予測器３０６からキャッシュラインアドレスを受信する。キャッシュラインアドレスは、圧縮ＢＴＢ３１２及び非圧縮ＢＴＢ３１０内のエントリをルックアップするためのタグとして機能する。ステップ５０６において、非圧縮ＢＴＢ３１０及び圧縮ＢＴＢ３１２は、タグと一致するエントリを識別し、更なる処理のために当該エントリを予測器３０６に提供する。上述したように、非圧縮ＢＴＢ３１０及び圧縮ＢＴＢ３１２は、非圧縮ＢＴＢ３１０及び圧縮ＢＴＢ３１２によって共に構成されるｎウェイアソシアティブキャッシュの異なるウェイに対応する。よって、タグを、同じサイクルにおいて、非圧縮ＢＴＢ３１０及び圧縮ＢＴＢ３１２の両方に並列して提供することができる。ヒットが発生しない場合、非圧縮ＢＴＢ３１０も圧縮ＢＴＢ３１２もルックアップされているキャッシュラインに対する予測された一致を示さない。単一のヒットが圧縮ＢＴＢ３１２又は非圧縮ＢＴＢ３１０の何れかで発生した場合、ヒットが発生したＢＴＢは、予測された分岐データを、予測のために予測器３０６に提供する。複数のヒットが発生した場合、圧縮ＢＴＢ３１２又は非圧縮ＢＴＢ３１０は、データを、予測のために単一のエントリから予測器３０６に提供する。ステップ５０８に関して以下に説明するように、この状況では、圧縮ＢＴＢ３１２及び非圧縮ＢＴＢ３１０は、そのキャッシュラインの分岐予測データが依然として存在しているので、次のサイクルで同じキャッシュラインアドレスで別のルックアップを実行する。一例では、圧縮ＢＴＢ３１２及び非圧縮ＢＴＢ３１０は、予測データが未だ予測器３０６に提供されていない現在のキャッシュライン内の「最も早い」（すなわち、最も低いＰＣ）エントリに対応するエントリを選択する。
【００４４】
ステップ５０８において、圧縮ＢＴＢ３１２及び非圧縮ＢＴＢ３１０は、同じキャッシュラインアドレスに対応する追加のエントリが存在するかどうかを判別する。追加のこのようなエントリが存在する場合、方法５００は、ステップ５０４に戻り、同じタグが、同じキャッシュラインアドレスの追加のエントリをルックアップするために再度提供される。このような追加のエントリが存在しない場合、方法５００は、ステップ５０２に戻り、予測器３０６は、予測のために別のキャッシュラインアドレスを取得する。
【００４５】
ＢＴＢをルックアップするためにキャッシュラインアドレスをタグとして提供することは一例に過ぎず、他のタグタイプを使用することができる。例えば、タグは、代わりに、キャッシュラインアドレスの一部のみを含んでもよいし、キャッシュラインアドレス又はその一部から導出された何等かの値を含んでもよいし、データがＢＴＢに記憶された予測された分岐のキャッシュラインアドレスに関連する又は関連しない何等かの値であってもよい。
【００４６】
図６は、一例による、非圧縮ＢＴＢ３１０及び圧縮ＢＴＢ３１２を更新する方法６００のフロー図である。図１〜図４に関して示されたシステムに関して説明したが、技術的に実行可能な順序で方法を実行するように構成された任意のシステムが本開示の範囲内にあることを理解されたい。
【００４７】
図示するように、方法６００は、ステップ６０２において開始し、分岐予測ユニット２０６は、非圧縮ＢＴＢ３１０、圧縮ＢＴＢ３１２、又は、これらの両方に対する変更が実行されると判別する。分岐予測ユニット２０６は、分岐予測ミスが発生したことを検出すると、このような判別をする。分岐予測ミスは、誤った方向（例えば、成立／不成立の判別が誤って予測されている）、誤ったターゲット（ＢＴＢに記憶されたターゲットアドレスが誤っている）、誤ったタイプの分岐予測（予測された分岐タイプが誤っている）、又は、分岐ではない（分岐として予測された命令が分岐でないことが判明した）場合がある。命令実行パイプライン２００は、分岐命令を実行し、実行された分岐命令の結果を以前に発生した分岐予測と比較することによって、分岐予測ミスを検出する。予測と実行の違いは、分岐予測ミスが発生したことを意味する。命令実行パイプライン２００は、予測ミスに関する情報を分岐予測ユニット２０６に提供して、将来の分岐予測の精度が向上するようにその内部状態を修正する。
【００４８】
ステップ６０４において、圧縮ＢＴＢ３１２、非圧縮ＢＴＢ３１０、又は、これらの両方が変更されるという指示を受信したことに応じて、分岐予測ユニット２０６は、変更される１つ以上のエントリを識別する。変更は、特定の分岐命令に関するデータの削除、分岐命令に関するデータの変更、又は、分岐命令に関するデータの追加を含むことができる。また、分岐予測ユニット２０６は、キャッシュラインアドレスに基づいて、同じキャッシュラインについて他の分岐予測データが既に存在しているかどうかに基づいて、及び、分岐予測データを圧縮することができるかどうかに基づいて、圧縮ＢＴＢ３１２又は非圧縮ＢＴＢ３１０内のエントリを識別する。削除及び変更のために、分岐予測ユニット２０６は、問題の分岐のキャッシュラインアドレス及び問題の分岐の当該キャッシュラインのオフセットと一致するタグを有するエントリを識別する。
【００４９】
分岐データを削除する場合、分岐予測ユニット２０６は、分岐命令のアドレスに基づいて、既存のＢＴＢエントリを、無効又は変更されるエントリとして識別する。
【００５０】
分岐データを変更する場合、分岐予測ユニット２０６は、分岐命令のアドレスに基づいて既存のエントリを識別し、エントリを圧縮できなくする変更等の理由や他の理由のために、変更されたエントリを圧縮ＢＴＢ３１２と非圧縮ＢＴＢ３１０との間で移動する必要があるかどうかに応じて、他のエントリを識別することができる。
【００５１】
ステップ６０６において、分岐予測ユニット２０６は、要求された変更に対応するために、１つ以上の識別されたエントリを変更する。変更が圧縮ＢＴＢ３１２又は非圧縮ＢＴＢ３１０から分岐に関するデータを削除することを要求する場合、分岐予測ユニット２０６は、ＢＴＢエントリ全体を削除する。
【００５２】
変更が特定のエントリ内に記憶された特定の分岐に関するデータを変更することを必要とする場合、分岐予測ユニット２０６は、変更されたエントリを圧縮することができるかどうかにおける変更に起因して、変更されたエントリが、圧縮ＢＴＢ３１２から非圧縮ＢＴＢ３１０に移動されるかどうかを判別する。例えば、変更される場合に、圧縮されたエントリを圧縮することができない場合、分岐予測ユニット２０６は、エントリを、圧縮ＢＴＢ３１２から非圧縮ＢＴＢ３１０に移動させる。このような変更が行われない場合、分岐予測ユニット２０６は、エントリ内のデータを単に規定通りに変更する。このような変更が行われた場合、分岐予測ユニット２０６は、対応するデータを移動させ、元のエントリを無効にし、新たなエントリを宛先に書き込む。
【００５３】
変更が、圧縮ＢＴＢ３１２又は非圧縮ＢＴＢ３１０に以前に記憶されていない分岐に関するデータを追加することを必要とする場合、分岐予測ユニット２０６は、分岐に関するデータを、他の分岐に関するデータと共にダブル分岐ＢＴＢエントリ４０４に記憶することができるかどうかを判別する。追加される分岐に関するデータを他の分岐に関するデータと共に記憶することができる場合であって、他の分岐が圧縮ＢＴＢ３１２に記憶される場合、分岐予測ユニット２０６は、他の分岐に関するシングル分岐ＢＴＢエントリ４０２を無効にし、両方の分岐に関するデータを記憶する新たなダブル分岐ＢＴＢエントリ４０４を生成する。分岐がキャッシュラインアドレスを共有し、分岐がラージターゲットＢＴＢエントリ４０６を必要としない場合、２つの分岐に関するデータが共に記憶されてもよい。
【００５４】
追加される分岐に関するデータを他の分岐に関するデータと共に記憶することができないが、圧縮することができる場合、分岐予測ユニット２０６は、新たなシングル分岐ＢＴＢエントリ４０２を圧縮ＢＴＢ３１２内に生成し、新たな分岐に関するデータを当該エントリに記憶する。追加される分岐に関するデータを他の分岐に関するデータと共に記憶することができず、圧縮することもできない場合、分岐予測ユニット２０６は、新たなエントリを非圧縮ＢＴＢ３１０内に生成し、新たな分岐に関するデータを当該新たなエントリに記憶する。データの属性が、図３及び図４に関して上述したように分岐の「一般的な場合」と一致する場合、及び、データがラージターゲットＢＴＢエントリ４０６を必要としない場合に、当該データを圧縮することができる。
【００５５】
本明細書で説明した技術は、コンピュータプロセッサにおける分岐予測動作を改善する。より具体的には、並行して検索することができる圧縮及び非圧縮ＢＴＢを提供することによって、未使用の分岐データスペースに関連するスペースを大きく無駄にすることなく、サイクル毎の最大２つの分岐についての予測データを取得することができる。
【００５６】
本明細書における開示に基づいて多くの変形が可能であることを理解されたい。上記では、特徴及び要素が特定の組み合わせで説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で使用されてもよいし、他の特徴及び要素を伴って又は伴わずに様々な組み合わせで使用されてもよい。
【００５７】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令（このような命令は、コンピュータ可読媒体に記憶することが可能である）の結果及びネットリストを含む他の中間データを用いて製造プロセスを構成することによって製造され得る。このようなプロセスの結果は、実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００５８】
本明細書で提供された方法又はフロー図は、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、例えば読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク、リムーバブルディスク等の磁気媒体、光磁気記憶媒体、例えばＣＤ−ＲＯＭディスク及びデジタル多用途ディスク（ＤＶＤ）等の光学媒体が含まれる。
【図１】
2019526873.tif 000003
【図２】
2019526873.tif 000004
【図３】
2019526873.tif 000005
【図４】
2019526873.tif 000006
【図５】
2019526873.tif 000007
【図６】
2019526873.tif 000008
【国際調査報告】
2019526873.tif 000009
2019526873.tif 000010