(57)【特許請求の範囲】
【請求項１】
少なくとも第１の最小の命令長を有する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する第２の命令セット実行モードで命令を実行する可変長の命令セットプロセッサにおける複数のカウンタを備える分岐履歴テーブル（ＢＨＴ）を動作させる方法であって、前記方法は、
前記第２の命令セット実行モードで、ＢＨＴアクセスの間、前記ＢＨＴの第１の半分および前記ＢＨＴの第２の半分の両方ともに電源を供給することと、
前記第１の命令セット実行モードで、任意の所与のＢＨＴアクセスの間、前記ＢＨＴの第１の半分のみあるいは前記ＢＨＴの第２の半分のみに電源を供給することと
を含む、方法。
【請求項２】
前記複数のカウンタは、複数の行に配置され、各行は第１の半分および第２の半分を備え、前記複数のカウンタの各々はカウンタインデックスアドレスに関連付けられ、偶数のカウンタインデックスアドレスに関連付けられたカウンタは、前記行の第１の半分に割り当てられ、奇数のカウンタインデックスアドレスに関連付けられたカウンタは、前記行の第２の半分に割り当てられる、請求項１記載の方法。
【請求項３】
第１のカウンタおよび第２のカウンタは、特定の行の半分に割り当てられ、前記第１のカウンタおよび前記第２のカウンタは同時にはアクセスされることができず、前記第１のカウンタは前記第２のカウンタに隣接する、請求項２記載の方法。
【請求項４】
前記第１のカウンタに関連付けられた前記カウンタインデックスアドレスと前記第２のカウンタに関連付けられた前記カウンタインデックスアドレスとは、１ビットぶんだけ（by one bit）異なる、請求項３記載の方法。
【請求項５】
前記第１の最小の命令長は３２ビットであり、前記第２の最小の命令長は１６ビットである、請求項１記載の方法。
【請求項６】
前記第１の命令セット実行モードで、前記ＢＨＴアクセスの間、前記ＢＨＴの第１の半分および前記ＢＨＴの第２の半分のうちの１つに電源を供給することは、前記第１の命令セット実行モード専用の最上位の行インデックスアドレスビットの値に基づく、請求項１記載の方法。
【請求項７】
フェッチステージを有し、少なくとも第１の最小の命令長を有する命令に対応する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する命令に対応する第２の命令セット実行モードで命令を実行するように動作可能な命令実行パイプラインと、
第１の半分および第２の半分を備える分岐履歴テーブル（ＢＨＴ）とを備えるプロセッサであって、
前記フェッチステージに対応する命令アドレスに基づいて、複数のカウンタがインデックスを付けられ、配置され、前記第２の命令セット実行モードで、ＢＨＴアクセスの間、前記ＢＨＴの第１の半分及び前記ＢＨＴの第２の半分の両方が電源を供給され、前記第１の命令セット実行モードで、任意の所与のＢＨＴアクセスの間、前記ＢＨＴの第１の半分のみあるいは前記ＢＨＴの第２の半分のみが電源を供給される、プロセッサ。
【請求項８】
前記複数のカウンタは、複数の行に配置され、各行は第１の半分および第２の半分を備え、前記複数のカウンタの各々はカウンタインデックスアドレスに関連付けられ、偶数のカウンタインデックスアドレスに関連付けられたカウンタは、前記行の第１の半分に割り当てられ、奇数のカウンタインデックスアドレスに関連付けられたカウンタは、前記行の第２の半分に割り当てられる、請求項７記載のプロセッサ。
【請求項９】
特定の行の各半分は、少なくとも第１のカウンタおよび第２のカウンタを含み、前記第１のカウンタおよび前記第２のカウンタは同時にはアクセスされることができず、前記第１のカウンタは前記第２のカウンタに隣接する、請求項８記載のプロセッサ。
【請求項１０】
前記第１のカウンタに関連付けられた前記カウンタインデックスアドレスと前記第２のカウンタに関連付けられた前記カウンタインデックスアドレスとは、１ビットぶんだけ（by one bit）異なる、請求項９記載のプロセッサ。
【請求項１１】
前記第１の最小の命令長は３２ビットであり、前記第２の最小の命令長は１６ビットである、請求項７記載のプロセッサ。
【請求項１２】
前記第１の命令セット実行モードでの命令の実行中、前記ＢＨＴの第１の半分および前記ＢＨＴの第２の半分のうちの１つに電源を供給することは、前記第１の命令セット実行モード専用の最上位の行インデックスアドレスビットの値に基づく、請求項７記載のプロセッサ。
【請求項１３】
前記第２の命令セット実行モードでの命令の実行中、前記ＢＨＴの第１の半分および前記ＢＨＴの第２の半分に電源を供給することをさらに備える、請求項７記載のプロセッサ。
【請求項１４】
分岐履歴テーブル（ＢＨＴ）を第１の半分および第２の半分に分割することであって、前記ＢＨＴは、フェッチステージに対応する命令アドレスに基づいて、インデックスを付けられ、配置される複数のカウンタを含み、少なくとも、第１の最小の命令長を有する命令に対応する第１の命令セット実行モード、及び、前記第１の最小の命令長とは異なる第２の最小の命令長を有する命令に対応する第２の命令セット実行モードで命令を実行するように構成された可変長の命令セットプロセッサに関連付けられた前記複数のカウンタを含むことと、
前記第２の命令セット実行モードで、ＢＨＴアクセスの間、前記ＢＨＴの第１の半分及び前記ＢＨＴの第２の半分の両方ともに電源を供給することと、
前記第１の命令セット実行モードで、任意の所与のＢＨＴアクセスの間、前記ＢＨＴの第１の半分のみあるいは前記ＢＨＴの第２の半分のみに電源を供給することと
を含む、方法。
【請求項１５】
前記第２の命令セット実行モードで命令を実行する場合に、前記ＢＨＴの第１の半分および前記ＢＨＴの第２の半分に電源を供給することをさらに備える請求項１４記載の方法。
【請求項１６】
前記複数のカウンタは、複数の行に配置され、各行は第１の半分および第２の半分を備え、前記複数のカウンタの各々はカウンタインデックスアドレスに関連付けられ、偶数のカウンタインデックスアドレスに関連付けられたカウンタは、前記行の第１の半分に割り当てられ、奇数のカウンタインデックスアドレスに関連付けられたカウンタは、前記行の第２の半分に割り当てられる、請求項１４記載の方法。
【請求項１７】
特定の行の各半分は、少なくとも第１のカウンタおよび第２のカウンタを含み、前記第１のカウンタおよび前記第２のカウンタは同時にはアクセスされることができず、前記第１のカウンタは前記第２のカウンタに隣接する、請求項１６記載の方法。
【請求項１８】
前記第１のカウンタに関連付けられた前記カウンタインデックスアドレスと前記第２のカウンタに関連付けられた前記カウンタインデックスアドレスとは、１ビットぶんだけ（by one bit）異なる、請求項１７記載の方法。
【請求項１９】
前記第１の命令セット実行モードで、前記ＢＨＴの第１の半分および前記ＢＨＴの第２の半分のうちの１つに電源を供給することは、前記第１の命令セット実行モード専用の最上位の行インデックスアドレスビットの値に基づく、請求項１４記載の方法。
【請求項２０】
前記第１の最小の命令長は３２ビットであり、前記第２の最小の命令長は１６ビットである、請求項１４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、プロセッサの分野に関し、特に、可変長の命令セット実行モードを有するプロセッサにおける分岐履歴テーブルの有効な構成に関する。
【背景技術】
【０００２】
プロセッサ用の従来の命令セットアーキテクチャは均一な命令の長さを有する。つまり、命令セット中の全ての命令は、同じ数のビット（例えば、１６又は３２）を備える。可変長の命令セット実行モードを有するプロセッサは、なおプロセッサは異なるビット長の命令を実行し得るが、従来から知られている。例えば、ＡＲＭアーキテクチャの最近のバージョンは、３２ビットの命令セット実行モード（ＡＲＭモード）で実行される従来の３２ビットのＡＲＭ命令のみならず、１６ビットの命令セット実行モード（サムモード）（Thumb mode）で実行される１６ビットの命令をも有する。
【０００３】
可変長の命令を実行するプロセッサに関する一つの問題は、命令が均一のメモリ境界に属さないということである。従って、命令（又は命令に関連付けられる付随的な構成）を介してインクリメントする、又はランダムにアドレス指定する、回路又は演算は、均一なインクリメント又はアドレス指定スキームを利用できない。むしろ、これらはアドレス指定スキームを、現在実行されている命令の長さ、即ち現在の命令セット実行モードに基づいて、変更しなければならない。
【０００４】
大抵の現代のプロセッサは、パイプラインアーキテクチャを採用しており、各々が複数の実行ステップを有するシーケンシャルな命令が実行時に重複する。最大限のパフォーマンスのためには、命令はパイプラインを介して連続的に流れるべきである。パイプライン中で命令を失速させる如何なる状況もパフォーマンスに不利益な影響を及ぼす。命令がパイプラインからフラッシュされ（flushed）て、続いて再度フェッチされなければならない場合、パフォーマンスと電力消費との双方が損害を受ける。
【０００５】
実質的には、あらゆる実在のプログラムが条件分岐命令を含んでおり、その実際の分岐動作は、命令がパイプラインの深部で評価されるまで分からない。分岐命令の実際の評価を待機することから生じるであろう失速を防止するために、大抵の現代のプロセッサは何らかの形式の分岐予測を採用しており、それによって条件分岐命令の分岐動作は、パイプラインで早期に予測される。予測された分岐評価に基づいて、プロセッサは予測されたアドレス−分岐対象のアドレス（分岐が成立する（taken）と予測された場合）又は分岐命令後に次に続くアドレス（分岐が不成立（not taken）と予測された場合）−からの命令を推論的にフェッチ及び実行する。実際の分岐動作が判定されると、分岐が誤って予測された場合、推論的にフェッチされた命令はパイプラインからフラッシュされなければならず、正確な次のアドレスから新たな命令がフェッチされる。誤った分岐予測に応答して推論的に命令をフェッチすることは、プロセッサのパフォーマンスと電力消費に不利な影響を与える。その結果、分岐予測の正確さを改善することは設計上の重要な目標である。
【０００６】
分岐予測の幾つかの方法は、予測されつつある分岐命令の分岐評価履歴及び／又は同一のコードの他の分岐命令に基づく。実際のコードの広範囲に渡る分析は、ここしばらくの分岐評価パターンが将来の分岐命令の評価の良好なインジケータとなり得ることを示す。
【０００７】
分岐予測の一つの公知の形式は、分岐履歴テーブル（Branch History Table）（BHT）を利用して、最近の分岐評価の表示（indication）を格納する。一例として、ＢＨＴは複数の飽和カウンタを備えるが、そのＭＳＢはバイモーダルな（bimodal）分岐予測器として機能する。例えば、各カウンタは４つの状態のうちの１つを呈する２ビットのカウンタを備え得るが、各々には
１１−予測が強く成立する
１０−予測が弱く成立する
０１−予測が弱く不成立する
００−予測が強く不成立する
といった重み付けされた予測値が割り当てられる。
【０００８】
カウンタは、対応する分岐命令が「成立（taken）」と評価される度にインクリメントし、命令が「不成立（not taken）」と評価される度にデクリメントする。カウンタのＭＳＢはバイモーダルな分岐予測器であり、これは分岐が成立するのか、成立しないのかを、内在する予測の重みや強度に関わらず予測するであろう。飽和カウンタは、一方向への単独の分岐評価は他方向へ飽和したカウンタの予測を変化させないので、稀な分岐評価の予測誤りを削減する。
【０００９】
「ローカルな」ＢＨＴの場合、その分岐評価が予測されつつある各分岐命令は、単独のＢＨＴカウンタと関連付けられる。従って、ＢＨＴは分岐命令アドレス（ＢＩＡ）の一部でインデックスを付けられる（indexed）。多くの現代のプロセッサは、一度のフェッチ動作で、フェッチグループ又はブロック中の複数の命令をフェッチする。この場合、ブロック又はフェッチグループに関連付けられたアドレスは、本明細書で用いられる用語としては、ＢＩＡとしてみなされる。「グローバルな」ＢＨＴの場合、最近のグローバル分岐評価履歴は、ＢＨＴカウンタをインデックスするのに先立って、ＢＩＡと連結される（concatenated）（gselect）か、ハッシュされ（gshare）得る。
【００１０】
異なる命令長を有する命令セットは、ＢＨＴの設計を複雑化する。特に、各カウンタは分岐命令に関連付けられ、命令は異なる命令セット実行モードでは異なるメモリ境界に位置するので、ＢＨＴは理想的には異なる命令セット実行モードごとに異なってインデックスされる。一つの公知の解決法は、ＢＨＴを単に最長の命令長に基づいた大きさにする一方で、最短の命令長に基づいてアドレス指定することである。この解決法は、テーブルの大部分を空にするか、より長い分岐命令に関連付けられた二重のエントリを残す。別の公知の解決法は、ＢＨＴインデックスアドレスを多重化し、異なる命令セット実行モードごとに命令アドレスの異なる部分を有効に用いることである。これは多数のマルチプレクサを追加するが、これはシリコン領域と電力消費を増加させる。しかしながら、より批判的には、これはクリティカルパスに遅延を付加するので、サイクル時間を増加させ、プロセッサのパフォーマンスに不利な影響を及ぼす。
【発明の概要】
【００１１】
一つ又は複数の実施形態によれば、ＢＨＴのあらゆるカウンタにアクセスし、現在の命令セット実行モードに基づいて多重化されたアドレスビットの数を削減するＢＨＴの行インデックスアドレス及びカウンタインデックスアドレスが形成される。更に、一実施形態において、ＢＨＴの行内のカウンタは、一つの命令セット実行モードにおける各アクセスについてＢＨＴの半分の電源を落とすことができるような方法で配置される。
【００１２】
一実施形態は、少なくとも第１の最小の命令長を有する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する第２の命令セット実行モードで命令を実行する可変長の命令セットプロセッサにおけるＢＨＴのあらゆる行にインデックスを付ける（index）アドレスを形成する方法であって、各命令セット実行モードはＢＨＴの行にアドレスビットの異なるサブセットを用いて論理的にインデックスを付ける方法に関連する。第１及び第２の命令セット実行モードの共通のＢＨＴ行インデックスアドレスビット（line index address bits）が識別される。第１の命令セット実行モード専用の（exclusive to）最上位のＢＨＴ行インデックスアドレスビットと、第２の命令セット実行モード専用の最下位のＢＨＴ行インデックスアドレスビットとは、命令セット実行モードインジケータに基づいて多重化される（multiplexed）。共通の且つ多重化されたアドレスビットは連結され（concatenated）、ＢＨＴ中の行は連結されたアドレスを用いてインデックスを付けられる。
【００１３】
別の実施形態は、少なくとも第１の最小の命令長を有する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する第２の命令セット実行モードで命令を実行する可変長の命令セットプロセッサのＢＨＴのあらゆるカウンタにアクセスするための行インデックスアドレス及びカウンタインデックスアドレスを形成する方法に関連する。ＢＨＴ中の行は、第２の命令セット実行モードの行インデックスアドレスビットを用いてインデックスを付けられる。第１の命令セット実行モード専用の最上位のＢＨＴ行インデックスアドレスビットと、第２の命令セット実行モード専用の最下位のＢＨＴカウンタインデックスアドレスビットとは、命令セット実行モードインジケータに基づいて多重化される。各ＢＨＴの行のカウンタは、第２の命令セット実行モードの最下位のカウンタインデックスアドレスビット以外の全てを用いて、多重化されたビットと連結して、インデックスが付けられる。
【００１４】
また別の実施形態は、少なくとも第１の最小の命令長を有する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する第２の命令セット実行モードで命令を実行する可変長の命令セットプロセッサの複数のカウンタを備えるＢＨＴを動作させる方法に関連する。ＢＨＴ全体は、ＢＨＴアクセス期間に第２の命令セット実行モードで電源が供給される。第１の命令セット実行モードにおけるＢＨＴアクセス期間には、ＢＨＴの半分のみに電源が供給される。
【００１５】
更に別の実施形態はプロセッサに関連する。該プロセッサは、フェッチステージを有し、少なくとも第１の最小の命令長を有する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する第２の命令セット実行モードで命令を実行するように動作する、命令実行パイプラインを備える。該プロセッサはまた、第１の命令セット実行モードで、ＢＨＴの半分のみに電源が供給されるようにフェッチパイプラインステージの命令アドレスによってインデックスを付けられ、配置された複数のカウンタを含むＢＨＴを備える。
【図面の簡単な説明】
【００１６】
【図１】図１は、プロセッサの機能ブロック図である。
【図２】図２は、プロセッサのフェッチステージの機能ブロック図である。
【図３】図３は、一実施形態に係るＢＨＴの機能ブロック図である。
【図４】図４は、１つのプロセッサ命令セット実行モード期間にＢＨＴの半分のみに電源が供給される、異なる実施形態に係るＢＨＴの機能ブロック図である。
【発明を実施するための形態】
【００１７】
図１は、プロセッサ１０の機能ブロック図を示す。プロセッサ１０は、命令ユニット１２と、１つ又は複数の実行ユニット１４とを備える。命令ユニット１２は実行ユニット１４に対して命令フローの集中制御を提供する。命令ユニット１２は、命令を命令キャッシュ１６からフェッチするが、メモリアドレス変換及び許可は命令側の変換ルックアサイドバッファ（instruction-side Translation Lookaside Buffer）（ITLB）１８によって管理される。
【００１８】
実行ユニット１４は、命令ユニット１２によってディスパッチされる命令を実行する。実行ユニット１４は汎用レジスタ（ＧＰＲ）２０に読み出し及び書き込みを行い、データキャッシュ２２からのデータにアクセスするが、メモリアドレス変換及び許可はメイン変換ルックアサイドバッファ（Translation Lookaside Buffer）（TLB）２４によって管理される。種々の実施形態において、ＩＴＬＢ１８は、ＴＬＢ２４の一部のコピーを備え得る。あるいは、ＩＴＬＢ１８とＴＬＢ２４は一体であってもよい。同様に、プロセッサ１０の種々の実施形態において、命令キャッシュ１６とデータキャッシュ２２は一体であっても、統合されてもよい。命令キャッシュ１６及び／又はデータキャッシュ２２におけるミスは、図１で統合された命令及びデータキャッシュ２６として示される、第２のレベル、即ちＬ２キャッシュ２６へのアクセスを引き起こすが、他の実施形態では別個のＬ２キャッシュを備えてもよい。Ｌ２キャッシュ２６におけるミスは、メモリインタフェース３０の制御の下、メイン（外部の）メモリ２８へのアクセスを引き起こす。
【００１９】
命令ユニット１２は、プロセッサ１０のパイプラインのフェッチステージ３２とデコードステージ３６を備える。フェッチステージ３２は、命令キャッシュ１６にアクセスして命令を取り出すが、これは所望の命令が命令キャッシュ１６又はＬ２キャッシュ２６に存在しない場合、それぞれＬ２キャッシュ２６及び／又はメモリ２８へのアクセスを含み得る。デコードステージ３６は、取り出された命令をデコードする。命令ユニット１２は更に、デコードステージ３６によってデコードされた命令を格納する命令キュー３８と、待ち行列に入れられた（queued）命令を適当な実行ユニット１４にディスパッチする命令ディスパッチユニット４０を備える。
【００２０】
分岐予測ユニット（branch prediction unit）（ＢＰＵ）４２は条件分岐命令の実行動作を予測する。フェッチステージ３２の命令アドレスは分岐対象アドレスキャッシュ（ＢＴＡＣ）４４と分岐履歴テーブル（ＢＨＴ）４６に対して、命令キャッシュ１６からの命令フェッチに並行してアクセスする。ＢＴＡＣ４４におけるヒットは、以前に成立すると評価された分岐命令であることを示し、ＢＴＡＣ４４は分岐命令の最後の実行の分岐対象アドレス（ＢＴＡ）を供給する。ＢＨＴ４６は、分析された（resolved）分岐命令に対応する分岐予測レコードを保持するが、当該レコードは、既知の分岐が以前に成立（taken）又は不成立（not taken）を評価されたかどうかを示す。ＢＨＴ４６は、例えば、分岐が成立するか成立しないかの弱い予測から強い予測を、分岐命令の以前の評価に基づいて供給する飽和カウンタを備え得る。ＢＰＵ４２は、ＢＴＡＣ４４からのヒット／ミス情報、及びＢＨＴ４６からの分岐履歴情報を評価して、分岐予測を定式化する（formulate）。ＢＰＵ４２は、グローバル分岐履歴レジスタ、以前の分岐予測の正確さをトラッキングする回路又はテーブルなどといった、分岐予測の正確さを増すための付加的な回路（図示せず）を備えてもよい。
【００２１】
図２は、フェッチステージ３２と命令ユニット１２の分岐予測回路を、より詳細に示す機能ブロック図である。図２中の点線は、機能的なアクセス関係を示し、必ずしも直接的な接続を示すものではないことに留意されたい。フェッチステージ３２は、様々なソースから命令アドレスを選択するキャッシュアクセスステアリングロジック（steering logic）４８を備える。本実施形態では、３つのステージ：フェッチ１ステージ５０、フェッチ２ステージ５２、及びフェッチ３ステージ５４を備える、命令フェッチパイプラインに、サイクルごとに１つの命令アドレスが送り出される（launched）。
【００２２】
キャッシュアクセスステアリングロジック４８は、フェッチパイプラインに送り出すべき命令アドレスを様々なソースから選択する。１つの命令アドレスソースは、次に続く命令アドレス（これは１つの命令、又は複数の命令を備えるフェッチグループ若しくはブロックに関連付けられてもよい）を生成するフェッチ１パイプラインステージ５０の出力で動作するインクリメンタ（incrementor）５６の出力である。別の命令アドレスソースはＢＴＡＣ４４であり、ＢＰＵ４２が分岐は成立すると予測する場合、分岐命令の以前の実行の分岐対象アドレスを供給する。他の命令アドレスソースには、例外ハンドラ、割り込みクトルアドレスなどが含まれる。
【００２３】
フェッチ１ステージ５０とフェッチ２ステージ５２は、同時の、並行した、２段アクセスを命令キャッシュ１６とＢＴＡＣ４４に行い、また、最初のサイクルでＢＨＴ４６に同時にアクセスする。特に、フェッチ１ステージ５０の命令アドレスは、命令キャッシュ１６、ＢＴＡＣ４４、及びＢＨＴ４６に第１のキャッシュアクセスサイクル期間にアクセスして、アドレスに関連付けられた命令が命令キャッシュ１６に存在するかどうか（命令キャッシュ１６におけるヒット又はミスを介して）、既知の分岐命令が命令アドレスに関連付けられているかどうかを（ＢＴＡＣ４４におけるヒット又はミスを介して）確認し、分岐予測を（ＢＨＴ４６のカウンタの値を介して）取得する。続いて第２のキャッシュアクセスサイクルで、命令アドレスはフェッチ２ステージ５２にムーブし、命令アドレスがそれぞれのキャッシュ１６、４４でヒットする場合、命令は命令キャッシュ１６から利用可能であり、及び／又は、分岐対象アドレス（ＢＴＡ）はＢＴＡＣ４４から利用可能である。
【００２４】
命令アドレスが命令キャッシュ１６にない場合、フェッチ３ステージ５４に進んでＬ２キャッシュ２６へのアクセスを始める（launch）。当業者は、例えば命令キャッシュ１６及びＢＴＡＣ４４のアクセスタイミングによっては、フェッチパイプラインが図２に示される実施形態よりも多数又は少数のレジスタステージを備え得ることを容易に認識するであろう。
【００２５】
本明細書において、「機能命令アドレス（functional instruction address）」という用語は、最下位の使用されないビットを無視した、命令にアクセスするのに実際に用いられるバイトメモリアドレスのビットをいう。機能命令アドレスは、異なる命令長については異なるバイトメモリアドレスビットを用いて形成される。例えば、４０９６個の１６ビットの命令はバイトメモリアドレスビット[１２：１]でアドレス指定される（addressed）。ビット０は、個別のバイトがアドレス指定されていないため、１６ビットの命令の機能命令アドレスの一部ではない。同様に、４０９６個の３２ビットの命令は、バイトメモリアドレスビット[１３：２]でアドレス指定される。バイトメモリアドレスビット[１：０]のどちらも、バイトもハーフワード（halfwords）もアドレス指定されていないので、３２ビットの命令の機能命令アドレスの一部ではない。
【００２６】
ＢＨＴ４６の一実施形態の機能ブロック図が、図３に示されている。ＢＨＴ４６は、行ごとに８個のカウンタを有する、５１２行に配置された、４０９６個の２ビットのカウンタを備える。従って、行インデックスアドレスは９ビットを備え、カウンタインデックスアドレスは３ビットを備える。しかしながら、異なる最小長の命令を実行する異なる命令セット実行モードでは、行及びカウンタアドレスビットは、機能命令アドレスにおける相違に対応して、異なるであろう。特に、ネイティブな（native）行インデックスアドレスは、３２ビットの命令セット実行モードで命令アドレスビット[１３：５]を備え、１６ビットの命令セット実行モードでビット[１２：４]を備えるであろう。同様に、ネイティブなカウンタインデックスアドレスは、３２ビットの命令セット実行モードで命令アドレスビット[４：２]を備え、１６ビットの命令セット実行モードでビット[３：１]を備えるであろう。
【００２７】
本明細書において、特定の最小の命令長を有する所与の命令セット実行モードの「ネイティブな（native）」行インデックスアドレス及びカウンタインデックスアドレスという用語は、全ての命令が同一の長さである場合に、ＢＨＴ４６にアクセスするために用いられるであろう命令アドレスビットをいう。特に、ネイティブなカウンタインデックスアドレスは、行ごとの全ての２ｎ個のカウンタに一意にインデックスを付ける（index）のに必要とされる最下位のｎ個の機能命令アドレスビットを備える。ネイティブな行インデックスアドレスは、ＢＨＴ４６の全ての２ｍ行に一意にインデックスを付けるのに必要とされる機能命令アドレスの次のｍ個のより高位のビットを備える。
【００２８】
ネイティブな行インデックスアドレス及びカウンタインデックスアドレス間の多重化は、命令セット実行モードをセレクタとして使用して、全ての（ｍ＋ｎ）ビット（図３の実施形態では、１２ビット）を多重化することを必要とし、容認しがたい電力消費とアクセス遅延をもたらす結果となるであろう。
【００２９】
図３に示される実施形態において、行インデックスアドレスは３２ビット及び１６ビットの命令セット実行モード、つまり、ビット[１２：５]、の双方に共通するネイティブな行インデックスアドレスビットを用い、これらの共通のビットを連結することで形成されるが、ビットは、対応する命令セット実行モード時にはそれぞれのネイティブな行インデックスアドレスに限定される。つまり、ビット１３（３２ビット命令セット実行モードのネイティブな行インデックスアドレスに限定される）及びビット４（１６ビットの命令セット実行モードのネイティブな行インデックスアドレスに限定される）は、現在の命令セット実行モードに基づいて共に多重化され、共通のビット[１２：５]に連結されて、９ビットの行インデックスアドレスが形成される。
【００３０】
図３に示されるように、この９ビットの行インデックスアドレスは、ＢＨＴ４６の行にインデックを付けるのに先立って、ハッシュ関数又は他のロジック５８などによって、グローバルな分岐履歴情報と随意で結合され得る。本実施形態においては、現在の命令セット実行モードに基づいて、全てのネイティブなカウンタインデックスアドレスが多重化される。特に、３２ビットの命令セット実行モードのビット[４：２]、１６ビットの命令セット実行モードのビット[３：１]は、各行内のカウンタにインデックを付ける。これはカウンタインデックスアドレスの３つのビットと行インデックスアドレスの１つのビットを多重化し、全てのネイティブな行インデックスアドレスビット及びカウンタインデックスアドレスビットが多重化される場合は１２個であるのに対し、ＢＨＴ４６について合計で４個のマルチプレクサを必要とする。
【００３１】
図４は、ＢＨＴ４６の別の実施形態を示すが、３２ビット及び１６ビットの命令セット実行モードの双方においてＢＨＴ４６のあらゆるカウンタを充分に利用するのに、シングルビットのマルチプレクサのみが必要とされる。行インデックスアドレスは、より小さな最小の命令長を有する命令セット実行モードについてネイティブな行インデックスアドレスであり、この場合、１６ビットの命令セット実行モード、即ち、ビット[１２：４]である。ここで繰り返しになるが、行インデックスアドレスは、ロジック５８のグローバル分岐履歴によって変更されてもよい。カウンタインデックスアドレスは、３２ビット及び１６ビットの命令セット実効モード双方に共通のネイティブなカウンタインデックスアドレスビット、つまり、ビット[３：２]を用い、これらの共通のビットを連結することで形成されるが、ビットは連結されたネイティブな行／カウンタインデックスアドレス各々に限定される。つまり、ビット１３（３２ビットの命令セット実行モードのネイティブな行インデックスアドレスに限定される）とビット１（１６ビットの命令セット実行モードのネイティブなカウンタインデックスアドレスに限定される）が、現在の命令セット実行モードに基づいて共に多重化され、共通のビット[３：２]に連結されて、３ビットのカウンタインデックスアドレスを形成する。
【００３２】
また、図４の実施形態において、ＢＨＴ４６は２つの部分に分割されるが、その各々が別個に電源を供給される。更に、カウンタは、偶数のカウンタインデックスアドレス（即ち、０で終わる）を有するカウンタが当該行の一方の半分に、奇数のカウンタインデックスアドレス（即ち、１で終わる）を有するカウンタは当該行の他方の半分に存在するように、各行に配置される。３２ビットの命令セット実行モードでは、カウンタインデックスアドレスの最下位ビットは１３であるため、当該モードのときは、ＢＨＴ４６の半分のみに電源が供給される必要があり、ＢＨＴ４６のアクティブな半分はビット１３によって選択される。これは、プロセッサが３２ビットの命令セット実行モードで動作しているときに、有意な電力の節約を意味する。
【００３３】
図２に示されるプロセッサ１０のフェッチステージ３２の実施形態において、フェッチｎステージレジスタ５０、５２、５４は各々、４つのハーフワード（８バイト）を保持する。従って、各フェッチｎステージレジスタ５０、５２、５４は、３２ビットの命令セット実行モードでは最大で２つの命令を、１６ビットの命令セット実行モードでは最大で４つの命令を保持する。それ故に、ＢＨＴ４６アクセスは、３２ビットのモードでは最大で２つのカウンタ値を、１６ビットのモードでは最大で４つのカウンタ値を取り出し得る。同一のサイクルで８つのカウンタ値全てがアクセスされる場合はない。
【００３４】
図４のＢＨＴ４６の実施形態で、カウンタは更に、互いに特定のＢＨＴ４６アクセスに限定されるカウンタ値、つまり、双方に同時にアクセスすることができないカウンタは、直接隣接するように、各行に配置される。これは、図４の出力マルチプレクサの第１の行によって示されるように、カウンタ値がＢＨＴ４６で多重化されることを可能にし、ＢＨＴ４６の出力における配線の密集（congestion）を低減する。このカウンタの配置に対する制約は、図４の実施形態において、そのカウンタインデックスアドレスがそれらの最上位ビットのみにおいて異なるカウンタを並列することによって達成される。例えば、カウンタインデックスアドレス０ｘ１（００１）及び０ｘ５（１０１）は、ビット３においてのみ異なるが、隣接する。出力マルチプレクサの第１のレベルの各々の選択入力は、関連付けられた命令アドレスのビット３である。
【００３５】
３２ビットの命令セット実行モードでは、最大で２つのカウンタ値が単独のＢＨＴ４６アクセスで取り出され得る。図４に示される第２のレベルのマルチプレクサは、ＢＨＴ４６の偶数側の出力をＢＨＴ４６の奇数側に導く。ここで繰り返しになるが、これはＢＨＴ４６の出力における配線の密集を低減し、３２ビットの命令セット実行モードにおけるカウンタ値の取り出しを簡略化する。
【００３６】
本願発明は、本明細書において３２ビット及び１６ビットの命令セット実行モードに関して記載されているが、本願発明は該実施に制限されるものではなく、如何なる可変長の命令セットプロセッサにも有利に適用され得る。また、カウンタ値の多重化と特定の配置は当業者によって変更され、本願発明を任意の特定の実施のために最適化されてもよい。一般に、本願発明は本明細書において特定の特徴、側面及びその実施形態に関して記載されているが、多数のバリエーション、変更、及び他の実施形態が、本願発明の広い範囲内で可能であり、それ故に、あらゆるバリエーション、変更及び実施形態は、本願発明の範囲内にあるものとしてみなされるべきである。従って、本実施形態は、あらゆる側面において例示的なものであって制限的なものではなく、添付の特許請求の範囲の意味及び同等の範囲で生じるあらゆる変更は、該範囲内に包含されることを意図するものと解釈されるべきである。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
少なくとも第１の最小の命令長を有する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する第２の命令セット実行モードで命令を実行する可変長の命令セットプロセッサの分岐履歴テーブル（ＢＨＴ）のあらゆる行にインデックスを付けるためのアドレスを形成する方法であって、各命令セット実行モードは異なるネイティブなインデックスアドレスを有しており、
前記第１及び第２の命令セット実行モードの共通のネイティブな行インデックスアドレスビットを識別し、
前記第１の命令セット実行モード専用の最上位のネイティブな行インデックスアドレスビットと前記第２の命令セット実行モード専用の最下位のネイティブな行インデックスアドレスビットとを、命令セット実行モードインジケータに基づいて多重化し、
前記共通の及び多重化されたアドレスビットを連結し、
前記ＢＨＴの行に前記連結されたアドレスを用いてインデックスを付ける
ことを含む、方法。
［Ｃ２］
前記ＢＨＴの行にインデックスを付けることに先立って、前記連結されたアドレスをグローバルな分岐履歴値でハッシングすることを更に含む、Ｃ１記載の方法。
［Ｃ３］
前記連結されたアドレスを前記グローバルな分岐履歴値でハッシングすることは、前記連結されたアドレスと前記グローバルな分岐履歴値との間で排他的論理和をとることを含む、Ｃ２記載の方法。
［Ｃ４］
インデックスを付けられた行のカウンタインデックスアドレスは、前記第１の命令セット実行モードの前記ネイティブなカウンタインデックスアドレスと前記第２の命令セット実行モードの前記ネイティブなカウンタインデックスアドレスとを多重化することによって形成される、Ｃ１記載の方法。
［Ｃ５］
前記第１の最小の命令長は３２ビットであり、前記第２の最小の命令長は１６ビットである、Ｃ１記載の方法。
［Ｃ６］
前記ＢＨＴは各行８個のカウンタを有する５１２行を備え、
前記共通のネイティブな行インデックスアドレスビットはビット[１２：５]を備え、  前記第１の命令セット実行モード専用の前記最上位のネイティブな行インデックスアドレスビットはビット１３を備え、
前記第２の命令セット実行モード専用の前記最下位のネイティブな行インデックスアドレスビットはビット４を備える、
Ｃ４記載の方法。
［Ｃ７］
インデックスを付けられた行のカウンタインデックスアドレスは、前記第１の命令セット実行モードのアドレスビット[４：２]と前記第２の命令セット実行モードのアドレスビット[３：１]とを多重化することによって形成される、Ｃ５記載の方法。
［Ｃ８］
少なくとも第１の最小の命令長を有する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する第２の命令セット実行モードで命令を実行する可変長の命令セットのプロセッサの分岐履歴テーブル（ＢＨＴ）のあらゆるカウンタにアクセスするための行インデックスアドレス及びカウンタインデックスアドレスを形成する方法であって、
前記ＢＨＴの行に前記第２の命令セット実行モードの前記ネイティブな行インデックスアドレスを用いてインデックスを付け、
前記第１の命令セット実行モード専用の最上位のネイティブな行インデックスアドレスビットと前記第２の命令セット実行モード専用の最下位のネイティブなカウンタインデックスアドレスとを多重化し、
前記多重化されたビットと連結された、各ＢＨＴの行におけるカウンタを、前記第２の命令セット実行モードの前記最下位のネイティブなカウンタインデックスアドレスビット以外の全てを用いてインデックスを付ける
ことを含む、方法。
［Ｃ９］
前記ＢＨＴの２つの部分に別個に電源を供給し、
各行の前記カウンタを、奇数のカウンタインデックスアドレスを有するカウンタは一方の部分にグループ化され、偶数のカウンタインデックスアドレスを有するカウンタは他方の部分にグループ化されるように順序付け、
前記第１の命令セット実行モード専用の最上位のネイティブな行インデックスアドレスビットの値に基づいて、前記第１の命令セット実行モードで前記ＢＨＴの半分にのみ電源を供給する
ことを更に含む、Ｃ８記載の方法。
［Ｃ１０］
各行の前記カウンタを、前記ＢＨＴから同時に読み出すことができないカウンタ値が隣接するように順序付けることを更に備える、Ｃ９記載の方法。
［Ｃ１１］
前記第１の最小の命令長は３２ビットであり、前記第２の最小の命令長は１６ビットである、Ｃ８記載の方法。
［Ｃ１２］
前記ＢＨＴは各行８個のカウンタを有する５１２行を備え、
前記第２の命令セット実行モードの前記ネイティブな行インデックスアドレスビットはビット[１２：４]を備え、
前記第１の命令セット実行モード専用の最上位のネイティブな行インデックスアドレスビットはビット１３を備え、前記第２の命令セット実行モード専用の最下位のネイティブなカウンタインデックスアドレスビットはビット１を備え、
前記第２の命令セット実行モードの最下位のネイティブなカウンタインデックスアドレスビット以外は全てビット[３：２]を備える、
Ｃ１１記載の方法。
［Ｃ１３］
少なくとも第１の最小の命令長を有する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する第２の命令セット実行モードで命令を実行する可変長の命令セットプロセッサの複数のカウンタを備える分岐履歴テーブル（ＢＨＴ）を動作させる方法であって、
前記第２の命令セット実行モードでのＢＨＴアクセスの期間に前記ＢＨＴ全体に電源を供給し、
前記第１の命令セット実行モードでのＢＨＴアクセスの期間に前記ＢＨＴの半分のみに電源を供給する
ことを含む、方法。
［Ｃ１４］
偶数のカウンタインデックスアドレスを有する前記カウンタの全てが前記それらのそれぞれの行の一方の半分にあり、奇数のカウンタインデックスアドレスを有する前記カウンタの全てはそれらのそれぞれの行の他方の半分にあるように、前記複数のカウンタを複数の行に配置し、各行は複数のカウンタを有することを更に含む、Ｃ１３記載の方法。
［Ｃ１５］
同時にアクセスされることができないカウンタは、それらのそれぞれの行において互いに隣接して並列される、Ｃ１４記載の方法。
［Ｃ１６］
フェッチステージを有し、少なくとも第１の最小の命令長を有する第１の命令セット実行モード、及び、より小さな、第２の最小の命令長を有する第２の命令セット実行モードで命令を実行するように動作する命令実行パイプラインと、
前記第１の命令セット実行モードにおいて、前記ＢＨＴの半分のみに電源が供給されるように、前記フェッチパイプラインステージの命令アドレスによって、インデックスを付けられ、配置された、複数のカウンタを備える分岐履歴テーブル（ＢＨＴ）と
を備える、プロセッサ。
［Ｃ１７］
偶数のカウンタインデックスアドレスを有する前記カウンタの全てがそれらのそれぞれの行の一方の半分にあり、偶数のカウンタインデックスアドレスを有する前記カウンタの全てがそれらのそれぞれの行の他方の半分にあるように、前記ＢＨＴの前記複数のカウンタは複数の行に配置され、各行は複数のカウンタを備える、Ｃ１６記載のプロセッサ。
［Ｃ１８］
同時にアクセスすることができない前記ＢＨＴのカウンタは、それらのそれぞれの行において互いに隣接するように並列される、Ｃ１７記載のプロセッサ。
【図１】
0005497123.tif 000002
【図２】
0005497123.tif 000003
【図３】
0005497123.tif 000004
【図４】
0005497123.tif 000005