(57)【要約】各命令の長さが最小命令長さ粒度の倍数である可変長命令セットにおいて、成立した分岐命令の最後の粒度（すなわち末尾）を示すインジケーションが、分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）内に格納される。もしＢＴＡＣ内で後にヒットする分岐命令が予測され成立すると、以前フェッチされた命令は、示された分岐命令の末尾を過ぎた直後から、パイプラインからフラッシュされる。この技術は、ＢＴＡＣ内の分岐命令の長さを格納する必要を回避することによってＢＴＡＣ空間を節約し、フラッシュをどこから開始するかを（分岐命令の長さに基づいて）計算する必要性を取り除くことによって性能を改善する。
2010501913.tif 000002
【特許請求の範囲】
【請求項１】
各命令の長さが最小命令長さ粒度の倍数である可変長命令セットからの命令を実行する方法であって、
成立すると評価された分岐命令の分岐ターゲットアドレス（ＢＴＡ）を分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）内に格納することと、
前記ＢＴＡとともに、前記分岐命令の最後の粒度を示すインジケータを格納することと、
その後、前記ＢＴＡＣ内でヒットすると、ヒットしている分岐命令の最後の粒度を過ぎてフェッチされた全ての命令をフラッシュすることと
を備える方法。
【請求項２】
請求項１に記載の方法であって、
前記分岐命令はフェッチグループでフェッチされ、前記ＢＴＡを含む前記ＢＴＡＣエントリは、前記フェッチグループ内の第１の命令のアドレスによってインデクスされる方法。
【請求項３】
請求項２に記載の方法において、
前記分岐命令の最後の粒度を示すインジケータは、前記フェッチグループ内での前記分岐命令の最後の粒度の末尾の相対位置を示す方法。
【請求項４】
請求項１に記載の方法において、
前記分岐命令は命令のブロックに関連付けられ、前記ＢＴＡを含む前記ＢＴＡＣエントリは、前記ブロック内の全ての命令の共通アドレスビットによってインデクスされる方法。
【請求項５】
請求項４に記載の方法において、
前記分岐命令の最後の粒度を示すインジケータは、前記命令のブロック内での前記分岐命令の最後の粒度の末尾の相対位置を示す方法。
【請求項６】
請求項１に記載の方法において、
その後、前記ＢＴＡＣ内でヒットすると、ヒットしている分岐命令の最後の粒度を示すインジケータに少なくとも部分的に基づいて、分岐履歴テーブル（ＢＨＴ）にアクセスすることを更に備える方法。
【請求項７】
請求項１に記載の方法において、
前記ヒットしている分岐命令の最後の粒度を過ぎてフェッチされた全ての命令のフラッシュ後、前記ＢＴＡで始まる命令をフェッチすることを更に備える方法。
【請求項８】
各命令の長さが最小命令長さ粒度の倍数である可変長命令セットからの命令を実行するプロセッサであって、
複数の命令を格納する命令キャッシュと、
分岐ターゲットアドレス（ＢＴＡ）と、以前成立すると評価された分岐命令の最後の粒度を示すインジケータとを格納する分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）と、
現在の分岐命令が、成立すると評価するか成立しないと評価するかを予測する分岐予測ユニット（ＢＰＵ）と、
命令を実行する命令実行パイプラインと、
現在の命令アドレスを用いて、前記命令キャッシュと前記ＢＴＡＣとに同時にアクセスするように動作し、更に、以前評価された分岐命令の最後の粒度を示すインジケータと、成立した分岐予測とに応答して、分岐命令後フェッチされた全ての命令を前記パイプラインからフラッシュするように動作する、１つ又は複数の制御回路と
を備えるプロセッサ。
【請求項９】
請求項８に記載のプロセッサにおいて、
前記ＢＴＡＣは、以前成立すると評価された分岐命令を含むフェッチグループ内の第１の命令のアドレスによってインデクスされるスライドウインドウＢＴＡＣであるプロセッサ。
【請求項１０】
請求項９に記載のプロセッサにおいて、
前記以前成立すると評価された分岐命令の最後の粒度を示すインジケータは、前記フェッチグループ内での前記分岐命令の最後の粒度の相対位置を示すプロセッサ。
【請求項１１】
請求項８に記載のプロセッサにおいて、
前記ＢＴＡＣは、以前成立すると評価された分岐命令を含む命令のブロック内の全ての命令の共通アドレスビットによってインデクスされるブロックベースのＢＴＡＣであるプロセッサ。
【請求項１２】
請求項１１に記載のプロセッサにおいて、
前記以前成立すると評価された分岐命令の最後の粒度を示すインジケータは、前記命令のブロック内での前記分岐命令の最後の粒度の相対位置を示すプロセッサ。
【請求項１３】
請求項８に記載のプロセッサにおいて、
前の分岐評価情報を格納する分岐履歴テーブル（ＢＨＴ）を更に備え、前記ＢＨＴは少なくとも部分的に、前記以前成立すると評価された分岐命令の最後の粒度を示すインジケータによってインデクスされるプロセッサ。
【請求項１４】
請求項１３に記載のプロセッサにおいて、
前記分岐予測は、前記ＢＨＴの出力に少なくとも部分的に基づくプロセッサ。
【請求項１５】
各々がタグによってインデクスされ、分岐ターゲットアドレス（ＢＴＡ）と、以前成立すると評価された分岐命令の最後の粒度を示すインジケータとを格納する複数のエントリを備える分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）。
【請求項１６】
請求項１５に記載のＢＴＡＣにおいて、
前記タグは、以前成立すると評価された分岐命令を含むフェッチグループ内の第１の命令のアドレスを備えるＢＴＡＣ。
【請求項１７】
請求項１６に記載のＢＴＡＣにおいて、
前記以前成立すると評価された分岐命令の最後の粒度を示すインジケータは、前記フェッチグループ内での前記分岐命令の最後の粒度の相対位置を示すＢＴＡＣ。
【請求項１８】
請求項１５に記載のＢＴＡＣにおいて、
前記タグは、以前成立すると評価された分岐命令を含む命令のブロック内の命令の共通アドレスビットを備えるＢＴＡＣ。
【請求項１９】
請求項１８に記載のＢＴＡＣにおいて、
前記以前成立すると評価された分岐命令の最後の粒度を示すインジケータは、前記命令のブロック内での前記分岐命令の最後の粒度を示すＢＴＡＣ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、可変長命令セットプロセッサの分野に関し、特に、成立した分岐命令の最後の粒度を示すインジケータを格納する分岐ターゲットアドレスキャッシュに関する。
【背景技術】
【０００２】
マイクロプロセッサは、広く様々なアプリケーションにおいて計算タスクを実行する。高度なソフトウェアによる高速な動作及び／又は増加した機能を実現することによって製品改良を進めるために、プロセッサ性能の改善は永遠の設計目標である。例えばポータブル電子デバイスのような多くの組立式アプリケーションにおいて、電力の節約及びチップサイズの低減もまた、プロセッサ設計及び実現における重要な目標である。
【０００３】
大抵の最近のプロセッサは、各々が複数の実行ステップを有する連続命令が実行中オーバラップする、パイプライン化されたアーキテクチャを用いる。連続命令ストリーム内の命令間で並列処理を用いるこの能力は、プロセッサ性能の改善に著しく貢献する。パイプラインを埋める簡単な初期処理の後、１サイクルで各パイプステージを完了するプロセッサにおいて理想的な状態では、命令が全てのサイクルで実行を完了することができる。
【０００４】
このような理想的な状態は、命令間のデータ依存（データハザード）、例えば分岐のような制御依存（制御ハザード）、プロセッサリソース割当競合（構成ハザード）、割込み、キャッシュミス等を含む様々な要因によって、実際には決して実現されない。プロセッサ設計の主要な目標は、これらのハザードを回避すること、及びパイプラインを「一杯」に保つことである。
【０００５】
全ての現実世界のプログラムは、無条件分岐命令又は条件付分岐命令を備えうる分岐命令を含む。分岐命令の実際の分岐挙動は、命令がパイプライン内深くにおいて評価されるまでしばしば知られない。これにより、プロセッサは分岐命令後に何れの命令をフェッチするかを知らず、分岐命令が評価するまで知らないので、パイプラインを停止する制御ハザードが生まれる。大抵の最近のプロセッサは、様々な形式の分岐予測を用い、それによって条件付分岐命令の分岐挙動及び分岐ターゲットアドレスがパイプラインの初期に予測され、プロセッサは、分岐予測に基づいて命令を推測的にフェッチ及び実行するので、パイプラインは一杯に保たれる。もし予測が正しければ、性能は最大化され、電力消費は最小化される。分岐命令が実際に評価された時、もし分岐が誤予測されていれば、推測的にフェッチされた命令はパイプラインからフラッシュされなければならず、正しい分岐ターゲットアドレスから新たな命令がフェッチされなければならない。誤予測された分岐は、プロセッサ性能及び電力消費に悪影響を及ぼす。
【０００６】
分岐予測には、条件評価と分岐ターゲットアドレスとの２つの構成要素がある。（条件付分岐命令にのみ関係がある）条件評価は、分岐が何れか成立し、異なるコードシーケンスへ実行をジャンプさせるか、あるいは成立せず、条件付分岐命令に続く次の連続命令をプロセッサに実行させるかの二分決定である。分岐ターゲットアドレス（ＢＴＡ）は、成立したと評価する無条件分岐命令又は条件付分岐命令の何れかの分岐を制御するためのアドレスである。いくつかの分岐命令は、命令演算コード内にＢＴＡを含む、あるいは、それによってＢＴＡが容易に計算されうるオフセットを含む。他の分岐命令の場合、パイプラインの深くまでＢＴＡが計算されないので、ＢＴＡを予測しなければならない。
【０００７】
ＢＴＡ予測の１つの周知技術は、分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）を用いる。従来技術において知られているようなＢＴＡＣは、ＢＴＡを含む各データ場所（又はキャッシュ「ライン」）を用いて、分岐命令アドレス（ＢＩＡ）によってインデクスされる。分岐命令がパイプライン内で成立すると評価し、その実際のＢＴＡが計算されると、ＢＩＡは、ＢＴＡＣ内のコンテンツアドレス指定可能メモリ（ＣＡＭ）構造へ書き込まれ、ＢＴＡは、（例えば書き戻しパイプラインステージ中）ＢＴＡＣ内の関連するＲＡＭ場所へ書き込まれる。新たな命令をフェッチする場合、ＢＴＡＣのＣＡＭは、命令キャッシュと並行してアクセスされる。もし命令アドレスがＢＴＡＣ内でヒットすれば、プロセッサは、（復号されている命令キャッシュから命令がフェッチされる前に）命令が分岐命令であることを知り、分岐命令の以前の実行の実際のＢＴＡである予測されたＢＴＡが、ＢＴＡＣのＲＡＭから提供される。もし分岐予測回路が、分岐が成立すると予測すれば、予測されたＢＴＡで、推測的な命令のフェッチが開始する。もし分岐が成立しないと予測されれば、命令のフェッチは連続して継続する。
【０００８】
ＢＴＡＣという用語は、当該技術において、飽和カウンタをＢＩＡと関連付け、それによって条件評価予測（すなわち成立するかしないか）のみを提供するキャッシュを示すためにも用いられることを留意されたい。これは、この用語の本明細書で用いられるような意味ではない。
【０００９】
高性能プロセッサは、本明細書でフェッチグループと称されるグループで、複数の命令を同時に命令キャッシュからフェッチすることができる。フェッチグループは、命令キャッシュラインと関連しうるが、必ずしも関連するわけではない。例えば４つの命令からなるフェッチグループは、それらを連続してパイプライン内へ送り込む命令フェッチバッファ内にフェッチされることができる。
【００１０】
本願の譲受人に譲渡され、参照によって本願に組み込まれた米国特許出願第１１／３８２５２７号、“Block-Based Branch Target Address Cache”は、各エントリが命令のブロックに関連付けられた複数のエントリを格納するブロックベースのＢＴＡＣであって、ブロック内の命令のうちの１つ又は複数が、評価され成立した分岐命令であるＢＴＡＣを開示する。ＢＴＡＣエントリは、関連するブロック内の何れの命令が成立した分岐命令であるかと、成立した分岐のＢＴＡとを示すインジケータを含む。ＢＴＡＣエントリは、ブロック内の全ての命令に共通のアドレスビットによって（すなわちブロック内の命令を選択する下位アドレスビットを切り捨てることによって）インデクスされる。従って、ブロックサイズ及び関連するブロック境界が決定される。
【００１１】
本願の譲受人に譲渡され、参照によって本願に組み込まれた米国特許出願第１１／４２２１８６号“Sliding-Window, Block-Based Branch Target Address Cache”は、各ＢＴＡＣエントリがフェッチグループに関連付けられ、フェッチグループ内の第１の命令のアドレスによってインデクスされる、ブロックベースのＢＴＡＣを開示する。フェッチグループは異なる方法（例えば分岐のターゲットから開始）によって形成されうるので、各ＢＴＡＣエントリによって表される命令のグループは決定されない。各ＢＴＡＣエントリは、フェッチグループ内の何れの命令が成立した分岐命令であるかと、成立した分岐のＢＴＡとを示すインジケータを含む。
【００１２】
分岐命令がＢＴＡＣ内でヒットし、予測され成立すると、既にフェッチされた（例えば同じフェッチグループの一部である）分岐命令に続く連続命令がパイプラインからフラッシュされ、ＢＴＡＣから検索されたＢＴＡで始まる命令が、分岐命令に続いてパイプライン内に推測的にフェッチされる。上述したように、ＢＴＡＣエントリが複数の分岐命令に関連付けられている場合、ブロック又はグループ内の何れの命令が成立した分岐命令であるかを示す何らかのインジケータが、各ＢＴＡＣエントリの一部として格納され、それによって、分岐命令後の命令はフラッシュされうる。分岐命令の開始が十分であることを示すインジケータを格納している、全ての命令が同じ長さである命令セットの場合、命令は、分岐命令の命令アドレスを過ぎた次の命令アドレスからフラッシュされる。
【００１３】
しかし可変長命令セットの場合、分岐命令の長さを示すいくつかのインジケーション自体も格納されなければならず、そのため、分岐命令後の第１の命令のアドレスが計算されうる。これによって、ＢＴＡＣ内の記憶空間を浪費し、また、どこからフラッシュを開始するかを決定するための計算が必要であるので、サイクル時間を限定し、性能に悪影響を及ぼす。
【発明の概要】
【００１４】
１つ又は複数の実施形態によると、可変長命令セットにおいて、成立した分岐命令の末尾を示すインジケーションが、分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）内に格納される。限定しない例として、ＡＲＭ命令セットアーキテクチャのいくつかのバージョンは、３２ビットＡＲＭモード分岐命令と１６ビットＴｈｕｍｂモード分岐命令との両方を含む。本発明によると、この場合は、成立した分岐命令の後半のハーフワード（例えば１６ビット）のインジケーションが各ＢＴＡＣエントリ内に格納される。これは、１６ビット分岐命令の分岐命令アドレス（ＢＩＡ）と、３２ビット分岐命令の後半のハーフワードとに対応する。何れの場合においても、もしＢＴＡＣ内でヒットする分岐命令が予測され成立すれば、以前フェッチされた命令は、命令長さに関わらず、示されたハーフワードを過ぎた直後から、パイプラインからフラッシュされることができる。
【００１５】
１つの実施形態は、各命令が最小命令長さ粒度(granularity)の倍数である可変長命令セットからの命令を実行する方法に関する。成立したと評価する分岐命令の分岐ターゲットアドレスが、分岐ターゲットアドレスキャッシュ内に格納される。分岐命令の最後の粒度のアドレスを示すインジケータが、分岐ターゲットアドレスとともに格納される。分岐ターゲットアドレスキャッシュ内で実質的にヒットすると、ヒットしている分岐命令の最後の粒度を過ぎてフェッチされた全ての命令は、フラッシュされる。
【００１６】
別の実施形態は、各命令が最小命令長さ粒度の倍数である可変長命令セットからの命令を実行するプロセッサに関する。プロセッサは、複数の命令を格納する命令キャッシュと、分岐ターゲットアドレス及び以前成立したと評価された分岐命令の最後の粒度を示すインジケータを格納する分岐ターゲットアドレスキャッシュとを含む。プロセッサはまた、現在の分岐命令が成立すると評価するか又は成立しないと評価するかを予測する分岐予測ユニットと、命令を実行する実行パイプラインとを含む。プロセッサは更に、現在の命令アドレスを用いて、命令キャッシュと分岐ターゲットアドレスキャッシュとに同時にアクセスするように動作し、更に、成立した分岐予測と、以前評価された分岐命令の最後の粒度を示すインジケータとに応答して分岐命令後にフェッチされた全ての命令をパイプラインからフラッシュするように動作する１つ又は複数の制御回路を含む。
【００１７】
また別の実施形態は、各々がタグによってインデクスされ、分岐ターゲットアドレスと、以前成立したと評価した分岐命令の最後の粒度を示すインジケータとを格納する複数のエントリを備える分岐ターゲットアドレスキャッシュに関する。
【図面の簡単な説明】
【００１８】
【図１】図１は、プロセッサの機能ブロック図である。
【図２】図２は、プロセッサのフェッチステージの機能ブロック図である。
【図３】図３は、ＢＴＡＣの機能ブロック図である。
【図４】図４は、命令の実行を示すレジスタコンテンツのサイクル図と、３つのプロセッサ命令とを示す。
【発明を実施する形態】
【００１９】
図１は、プロセッサ１０の機能ブロック図を示す。プロセッサ１０は、命令ユニット１２と、１つ又は複数の実行ユニット１４とを含む。命令ユニット１２は、命令フローの集中制御を実行ユニット１４に提供する。命令ユニット１２は、命令側変換索引バッファ（ＩＴＬＢ）１８によって管理されるメモリアドレス変換及び許可を用いて、命令キャッシュ（命令キャッシュ）１６から命令をフェッチする。
【００２０】
実行ユニット１４は、命令ユニット１２によってディスパッチされた命令を実行する。実行ユニット１４は、汎用レジスタ（ＧＰＲ）２０からの読出し及びＧＰＲ２０への書込みを行い、主要変換索引バッファ（ＴＬＢ）２４によって管理されるメモリアドレス変換及び許可を用いて、データキャッシュ２４からのデータにアクセスする。様々な実施形態において、ＩＴＬＢ１８は、ＴＬＢ２４の一部のコピーを備えることができる。あるいは、ＩＴＬＢ１８とＴＬＢ２４とは統合することができる。同様に、プロセッサ１０の様々な実施形態において、命令キャッシュ１６とデータキャッシュ２２とは、統合又は一体化することができる。命令キャッシュ１６及び／又はデータキャッシュ２２内のミスは、一体化命令及びデータキャッシュ２６として図１に示された、第２レベル、すなわちＬ２キャッシュ２６へのアクセスを招く。しかし他の実施形態は、個別のＬ２キャッシュを含むことができる。Ｌ２キャッシュ２６内のミスは、メモリインタフェース３０の制御下で、主要（オフチップ）メモリ２８へのアクセスを招く。
【００２１】
命令ユニット１２は、プロセッサ１０パイプラインのフェッチステージ３４及び復号ステージ３６を含む。フェッチステージ３２は、命令を検索するために命令キャッシュ１６のアクセスを実行する。これは、もし所望の命令が命令キャッシュ１６又はＬ２キャッシュ２６内に存在していなければ、Ｌ２キャッシュ２６及び／又はメモリ２８のアクセスをそれぞれ含むことができる。復号ステージ２８は、検索した命令を復号する。命令ユニット１２は更に、復号ステージ２８によって復号された命令を格納するための命令キュー３８と、キューにされた命令を適切な実行ユニット１４へディスパッチするための命令割当ユニット４０とを含む。
【００２２】
分岐予測ユニット（ＢＰＵ）４２は、条件付分岐命令の実行挙動を予測する。フェッチステージ３２内の命令アドレスは、命令キャッシュ１６からの命令のフェッチと並行して、分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）４４及び分岐履歴テーブル（ＢＨＴ）４６にアクセスする。ＢＴＡＣ４４内のヒットは、以前成立したと評価された分岐命令を示し、ＢＴＡＣ４４は、分岐命令の最後の実行の分岐ターゲットアドレス（ＢＴＡ）を提供する。ＢＨＴ４６は、解決された分岐命令に対応する分岐予測記録を保持する。この記録は、知られている分岐が、以前に成立したと評価されたか、あるいは成立していないと評価されたかを示す。ＢＨＴ４６は例えば、分岐命令の以前の評価に基づいて、分岐が成立するか成立しないかの弱い予測から強い予測を提供する飽和カウンタを含むことができる。ＢＰＵ４２は、分岐予測を定式化するために、ＢＴＡＣ４４からのヒット／ミス情報と、ＢＨＴ４６からの分岐履歴情報とを査定する。
【００２３】
図２は、命令ユニット１２の分岐予測回路及びフェッチステージ３２をより詳細に示す機能ブロック図である。図２の点線は、機能的アクセス関係を示し、必ずしも接続を示すのではないことを留意されたい。フェッチステージ３２は、様々なソースから命令アドレスを選択するキャッシュアクセスステアリングロジック４８を含む。サイクル毎に１つの命令アドレスが、命令フェッチパイプライン内へランチされる。この実施形態において命令フェッチパイプラインは、フェッチ１ステージ５０と、フェッチ２ステージ５２と、フェッチ３ステージ５４との３つのステージを備える。
【００２４】
キャッシュアクセスステアリングロジック４８は、命令アドレスを選択し、様々なソースからフェッチパイプライン内へランチする。本明細書に特に関連のある２つの命令アドレスソースは、フェッチ１パイプラインステージ５０の出力において動作するインクリメンタ５６によって生成された命令フェッチグループアドレス、命令ブロック、又は次の連続命令、及び、ＢＰＵ４２からの分岐予測に応答して推測的にフェッチされた非連続分岐ターゲットアドレスを含む。その他の命令アドレスソースは、例外ハンドラ、割込みベクトルアドレス等を含む。
【００２５】
フェッチ１ステージ５０及びフェッチ２ステージ５２は、命令キャッシュ１６、ＢＴＡＣ４４、及びＢＨＴ４６への同時の並列２ステージアクセスを実行する。特に、フェッチ１ステージ５０内の命令アドレスは、アドレスに関連する命令が命令キャッシュ１６内に存在するかを（命令キャッシュ１６内のヒット又はミスによって）確かめ、知られている分岐命令が命令アドレスに関連付けられているかを（ＢＴＡＣ４４内のヒット又はミスによって）確かめるために、第１のキャッシュアクセスサイクル中、命令キャッシュ１６及びＢＴＡＣ４４にアクセスする。続く第２のキャッシュアクセスサイクルで、命令アドレスはフェッチ２ステージ５２へ移動し、もし命令アドレスがキャッシュ１６内でヒットすれば、命令キャッシュ１６からの命令が利用可能であり、もし命令アドレスがキャッシュ４４内でヒットすれば、ＢＴＡＣ４４からの分岐ターゲットアドレス（ＢＴＡ）が利用可能である。
【００２６】
もし命令アドレスが命令キャッシ１６内でミスすれば、命令アドレスは、Ｌ２キャッシュ２６のアクセスをランチするために、フェッチ３ステージ５４へ進む。当業者は、フェッチパイプラインが、例えば命令キャッシュ１６及びＢＴＡＣ４４のアクセスタイミングに依って、図２に示す実施形態より多い又は少ないレジスタステージを備えることができることを容易に理解するであろう。
【００２７】
ＢＴＡＣ４４の１つの実施形態の機能ブロック図が図３に示される。ＢＴＡＣ４４は、ＣＡＭ構成６０とＲＡＭ構成６２とを備える。典型的なエントリにおいて、ＣＡＭ構成６０は、状態情報６４と、アドレスタグ６０と、有効ビット６８とを含むことができる。上述したように、また参照によって組み込まれた出願で述べられたように、１つの実施形態におけるタグ６６は、単一の分岐命令アドレス（ＢＩＡ）を備えることができる。本明細書でブロックベースのＢＴＡＣ４４と称される別の実施形態において、タグ６６は、命令のブロック又はグループの（最下位ビットが切り捨てられた）共通アドレスビットを備えることができる。本明細書でスライドウインドウＢＴＡＣ４４と称される別の実施形態において、タグ６６は、命令フェッチグループ内の第１の命令のアドレスを備えることができる。
【００２８】
ＢＴＡＣ４４が構成されるが、タグ６６は、以前成立したと評価された分岐命令に対応し、ヒット（すなわちフェッチ１ステージ５４内のアドレスとタグ６６との間の一致）は、ブロック又はフェッチグループ内の命令が分岐命令であることを示す。ＣＡＭ６０内のヒットに応答して、対応するヒットビット７０が、同じＢＴＡＣ４４エントリのＲＡＭ構成内に設定される。いくつかの実施形態において、ヒットビット７０は、例えば０キャッチャ、１キャッチャ、又はジャムラッチのような非クロック単調記憶デバイスを備えることができる。キャッシュ設計の詳細は、本発明の説明には関係がないので、本明細書ではこれ以上説明されない。
【００２９】
第２のキャッシュアクセスサイクル中、ヒットビット７０によって識別されるＢＴＡＣ４４エントリからのデータが、ＲＡＭ構成６２から読み出される。これらのデータは、分岐ターゲットアドレス（ＢＴＡ）７２を含み、例えば命令がリンクスタックユーザであるかを示すリンクスタックビット７４、及び／又は無条件分岐命令を示す無条件ビット７６のような、分岐命令に関する追加情報を含むことができる。任意の特定のアプリケーションのために必要又は所望であれば、他のデータもＢＴＡＣ４４ＲＡＭ６２内に格納することができる。
【００３０】
関連する分岐命令の最後の粒度を示す位置ビット７８もまた、ＢＴＡＣ４４エントリ内に格納される。各タグ６６がただ１つのＢＩＡに関連付けられるＢＴＡＣ４４の場合、位置ビット７８は、例えばＢＩＡからのオフセットによって、分岐命令の末尾を識別する。この場合、位置ビット７８は本質的に、分岐命令長さを特定する。ブロックベースのＢＴＡＣ４４又はスライドウインドウＢＴＡＣ４４の場合、つまりタグ６６が複数の命令に関連付けられている場合、位置ビット７８は、ＢＴＡ７２に関連する選択された分岐命令の最後の粒度の命令ブロック又はフェッチグループ内での位置を識別する。つまり、位置ビット７８は、命令ブロック又はフェッチグループ内での分岐命令の末尾位置を識別する。
【００３１】
図４は、３つの命令を備える例示的なコード断片を示す。３つの命令のうちの１つは、以前成立したと評価された３２ビットの条件付分岐命令である。この例において、フェッチパイプラインレジスタは、各々が４ハーフワードを有する。図４は更に、命令キャッシュ１６から命令がフェッチされると、これら各レジスタ内の命令アドレスを、示す。第１のサイクルで、フェッチ１ステージ５０は、命令アドレス０８００、０８０２、０８０４、及び０８０６を有する。アドレス０８００は、スライドウインドウＢＴＡＣ４４の場合、命令キャッシュ１６及びＢＴＡＣ４４に適用され、ブロックベースＢＴＡＣ４４の場合、２つの最下位ビットがＢＴＡＣ４４ルックアップ前に切り捨てられる。第１のサイクルの最後に、ＢＴＡＣ４４はヒットを報告し、分岐命令がブロック又はグループ内に存在することと、それが以前に成立したと評価されたこととを示す。第２のサイクル中、ＢＴＡ（この例ではアドレスＢ）及び位置ビット７８がＢＴＡＣ４４から検索される。一方、アドレス０８００乃至０８０６はフェッチ２ステージ５２内へドロップされ、次の連続アドレス０８０８乃至０８０Ｅがフェッチ１ステージ５０内へ（インクリメンタ５６を経由して）ロードされる。
【００３２】
命令キャッシュ１６とＢＴＡＣ４４とがルックアップするのと同時に、ＢＨＴ４６がアクセスされ、関連する分岐命令の過去の分岐評価挙動を分岐予測ユニット（ＢＰＵ）４２に提供する。ＢＴＡＣ４４及びＢＨＴ４６から検索した情報に基づいて、ＢＰＵ４２は、現在の命令アドレスに関連する分岐命令が成立すると評価するか成立しないと評価するかを予測する。もしＢＰＵ４２が、分岐命令は成立しないと評価すると予測すれば、連続アドレス（例えば０８０８乃至０８０Ｅ）は、フェッチステージ３２を流れ、０８０８による命令キャッシュ１６及びＢＴＡＣ４４のアクセスをもたらす。一方、もしＢＰＵ４２が、分岐命令が成立するものと評価すると予測すれば、分岐命令後の全ての命令アドレスは、フェッチパイプラインレジスタ５０、５２、及び、命令キャッシュ１６とＢＴＡＣ４４との次のアクセスの代わりに用いられるＢＴＡＣ４４から検出されたＢＴＡからフラッシュされなければならない。
【００３３】
位置ビットは、従来、ブロック又はグループ内での分岐命令の開始の位置、例えば（アドレスがレジスタ内で右から左へインクリメントすると仮定すると）４’ｂ００１０を示す。しかし、分岐命令の開始は、その後、命令の末尾の位置を計算することのみに用いられ、命令の長さ（例えば１６又は３２ビット）に関する情報を必要とする。更に、この計算は、追加の論理レベルを必要とし、これはサイクル時間を増加させ、性能に悪影響を及ぼす。本明細書に開示した１つ又は複数の実施形態によると、位置ビット７８は、ブロック又はグループ内の分岐命令の最後の命令長さ粒度を示す。現在の例において、位置ビット７８は、ブロック又はグループ内での最後のハーフワードの位置、例えば４’ｂ０１００、を示す。これは、分岐命令の長さに関する情報を格納する必要をなくし、何れの命令アドレスをパイプラインからフラッシュするかを決定するための計算を回避する。
【００３４】
再び図４を参照すると、（ＢＰＵ４２からの成立した分岐予測に応答する）第３のサイクルにおいて、フェッチ３ステージ５４は、命令アドレス０８００乃至０８０４を含む。アドレス０８０４は、位置ビット７８の値４’ｂ０１００によって、分岐命令の末尾として識別された。アドレス０８０６の命令は、フェッチ３ステージ５４からフラッシュされる。アドレス０８０８乃至０８０Ｅは、フェッチステージ５２からフラッシュされる。サイクル２でＢＴＡＣ４４から検索されたＢのＢＴＡは、その位置から命令を推測的にフェッチするために、フェッチ１ステージ５０内へロードされる。
【００３５】
上述したように、ＢＨＴ４６は、命令キャッシュ１６とＢＴＡＣ４４とに並行してアクセスされる。１つの実施形態において、ＢＨＴ４６は、例えば各々が分岐命令に関連付けられた２ビットの飽和カウンタのアレイを備える。１つの実施形態において、カウンタは、分岐命令が成立すると評価されるごとにインクリメントされ、分岐命令が成立しないと評価される場合デクリメントされる。カウンタ値はその後、（最上位ビットのみを考慮することによる）予測と、以下のような予測の強度又は信頼性との両方を示す。  
１１−成立すると強く予測される  
１０−成立すると弱く予測される  
０１−成立しないと弱く予測される  
００−成立しないと強く予測される
ＢＨＴ４６は、分岐命令アドレス（ＢＩＡ）の一部によってインデクスされうる。例えば、ＢＴＡＣ４４がヒットを示し、命令を、以前評価され成立した分岐命令であると識別する場合、フェッチ１ステージ５０内の命令アドレスの一部によってインデクスされうる。精度を高め、ＢＨＴ４６をより効率的に用いるために、一部のＢＩＡは、ＢＨＴ４６のインデクス前に、最近のグローバル分岐評価履歴（ｇｓｅｌｅｃｔ又はｇｓｈａｒｅ）と論理的に結合することができる。
【００３６】
ＢＨＴ４６の設計に関する１つの問題が、分岐命令が異なる長さを有しうる可変長命令セットから発生する。１つの周知の解決策は、ＢＨＴ４６の大きさを、最も小さい命令長さに基づいて対処するのではなく、最も大きい命令長さに基づいて決めることである。この解決策は、アドレス指定が分岐命令の開始に基づいている場合、大部分のテーブル空きや、長分岐命令に関連する二重エントリを残す。分岐命令の末尾に関する情報を用いてＢＨＴ４６をインデクスすることによって、ＢＨＴ４６は、効率的に増加される。分岐命令の長さに関わらず、単一のＢＨＴ４６エントリのみがアクセスされる。
【００３７】
本明細書で用いられるように、可変長命令セットの粒度又は細粒は、命令長さが異なりうる最小の量であり、一般に、最小命令長さでもありうる。本発明は、特定の特徴、局面、及びその実施形態に関して本明細書で説明されたが、多くの変形例、改良例、及び他の実施形態が本発明の広い範囲内で可能であることが明らかであるだろう。従って、全ての変形例、改良例、及び実施形態は、本発明の範囲内であると見なされる。本実施形態は、ゆえに、全ての局面において限定的ではなく例示的であると解釈され、特許請求の範囲の意味及び均等物の範囲内で発生する全ての変更は、本明細書に包括されるように意図されている。
【図１】
2010501913.tif 000003
【図２】
2010501913.tif 000004
【図３】
2010501913.tif 000005
【図４】
2010501913.tif 000006