JP3794918B2 - 復帰選択ビットを用いて分岐予測のタイプを分類する分岐予測 - Google Patents
復帰選択ビットを用いて分岐予測のタイプを分類する分岐予測 Download PDFInfo
- Publication number
- JP3794918B2 JP3794918B2 JP2000525808A JP2000525808A JP3794918B2 JP 3794918 B2 JP3794918 B2 JP 3794918B2 JP 2000525808 A JP2000525808 A JP 2000525808A JP 2000525808 A JP2000525808 A JP 2000525808A JP 3794918 B2 JP3794918 B2 JP 3794918B2
- Authority
- JP
- Japan
- Prior art keywords
- branch
- instruction
- selector
- return
- prediction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000007246 mechanism Effects 0.000 claims description 28
- 230000004044 response Effects 0.000 claims description 25
- 238000000034 method Methods 0.000 claims description 22
- 238000001514 detection method Methods 0.000 claims description 11
- 238000012545 processing Methods 0.000 claims description 11
- 238000010586 diagram Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 10
- 238000006073 displacement reaction Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000000630 rising effect Effects 0.000 description 2
- 102000057710 Coatomer Human genes 0.000 description 1
- 101710199837 Terminal uridylyltransferase 1 Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003362 replicative effect Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Description
【発明の分野】
この発明はマイクロプロセッサの分野に関し、より特定的にはマイクロプロセッサ内の分岐予測機構に関する。
【0002】
【関連技術の説明】
EP−A−0 649 084は、スーパースカラ、スーパーパイプラインマイクロプロセッサにおいて使用するための分岐処理ユニットを開示している。分岐予測ユニットは、分岐の方向を予測し、予測したテイクン分岐、ならびにジャンプ、コールおよびリターンといったフロー命令の無条件変更についてのターゲットアドレスを与える。分岐予測ユニットは、プリフェッチアドレスでアクセスされ、ターゲットアドレスをプリフェッチャに与える。方向の分岐予測ではヒストリキャッシュを用い、アドレスの分岐予測では復帰ビットを備えたターゲットキャッシュを用いる。ターゲットキャッシュは、分岐オフセットのためのフィールドが命令ブロック内にある4ウェイキャッシュとして実現される。アクセスは8バイト基本ブロックアドレスを用いて行なわれる。16バイトの命令につき、8分岐までのデータを記憶できる。ターゲットキャッシュはテイクン分岐からのデータを記憶し、ヒストリキャッシュはノンテイクン分岐からのデータを記憶する。
US−A−5 574 871は、フェッチされた1ブロックの命令につき行なう分岐予測を開示している。分岐ヒストリテーブルは、128ウェイキャッシュとして実現され、テイクンおよびノンテイクン分岐に対する予測を含み、分岐ヒストリテーブル内の2ビットが、4つの分岐タイプすなわち条件付き、無条件、リターンおよびコールに対する符号を与える。ブロックアドレス1つあたり4つのエントリが与えられ、最初のテイクン予測された分岐はフェッチアドレスの後にあるのがわかる。
スーパースカラマイクロプロセッサの性能は、1クロックサイクルあたり複数の命令を実行することにより、かつ設計に見合う可能な限り最短のクロックサイクルを選択することにより向上する。本明細書で用いる「クロックサイクル」という用語は、マイクロプロセッサ内の命令処理パイプラインの種々の段階に与えられた時間の間隔を示す。記憶装置(たとえばレジスタおよびアレイ)は、その値をクロックサイクルに従い取込む。たとえば、記憶装置は、クロックサイクルを規定するクロック信号の立上がりまたは立下がりエッジに従いある値を取込むことができる。次に記憶装置はこの値をクロック信号の次の立上がりまたは立下がりエッジそれぞれまで記憶する。本明細書では「命令処理パイプライン」という用語は、パイプライン形式で命令を処理するのに用いられる論理回路を示すために用いる。パイプラインは命令処理の一部を行なういくつかの段階に分割することができるが、一般的に命令処理は、命令のフェッチ、命令のデコード、命令の実行、および命令により特定される宛先への実行結果の格納を含む。
【0003】
スーパースカラマイクロプロセッサ(およびスーパーパイプラインマイクロプロセッサ)の重要な特徴は、その分岐予測機構である。分岐予測機構は、ある分岐命令に対し予測された方向(テイクンまたはノットテイクン)を示し、後続の命令のフェッチを、この分岐予測により示される予測命令ストリーム内で続行できるようにする。分岐命令により、後続の命令が少なくとも2つのアドレスのうち1つからフェッチされる。この2つのアドレスとは、分岐命令に直接続く命令で始まる命令ストリームを特定するシーケンシャルアドレス、およびメモリ内の任意の場所で始まる命令ストリームを特定するターゲットアドレスである。無条件分岐命令は常にターゲットアドレスに分岐するのに対し、条件付き分岐命令は先行の命令結果に基づいてシーケンシャルアドレスかターゲットアドレスかいずれかを選択できる。予測命令ストリームからの命令は分岐命令の実行に先行して投機的に行なわれてもよく、いかなる場合でも分岐命令の実行に先行して命令処理パイプラインに置かれる。予測命令ストリームが正しければ、1クロックサイクルにつき実行される命令の数が増すという効果がある。しかしながら、予測命令ストリームが誤っていれば(すなわち1つ以上の分岐命令が誤って予測されている)、誤って予測された命令ストリームからの命令は命令処理パイプラインから廃棄され、1クロックサイクルにつき実行される命令の数は減少する。
【0004】
効果的にするためには、分岐予測機構の正確度を高めてできる限り高い頻度で予測命令ストリームが正しくなるようにしなければならない。典型的には、分岐予測機構の正確度の向上は、分岐予測機構の複雑度を高めることによって達成される。たとえば、キャッシュラインベースの分岐予測スキームを用いて、分岐予測を命令キャッシュ内の命令バイトの特定のキャッシュラインに対応して記憶できる。キャッシュラインとは、命令キャッシュ内の記憶スペースを割当てるためおよび割当を解除する際の単位として扱われる、複数の連続バイトである。キャッシュラインがフェッチされると、対応する分岐予測もフェッチされる。さらに、特定のキャッシュラインが廃棄されると、対応する分岐予測もまた廃棄される。キャッシュラインはメモリ内で整列している。キャッシュラインベースの分岐予測スキームは、各キャッシュラインあたりより多くの分岐予測を記憶することによってより正確にすることができる。所与のキャッシュラインは複数の分岐命令を含み得る。複数の分岐命令各々は異なる分岐予測により表わされる。したがって、キャッシュラインにより多くの分岐予測を割当てることにより、より多くの分岐命令を分岐予測機構によって表わしかつ予測することができる。分岐予測機構内に代理を持たない分岐命令は予測されず、その後分岐がテイクンであることがわかれば「予測誤り」が検出されるであろう。しかしながら、分岐予測機構は、追加された分岐予測の中からの選択が必要となるので複雑化する。本明細書で用いる「分岐予測」は、分岐予測機構が、分岐命令がテイクンであるかノットテイクンであるかの予測として解釈し得る値である。さらに、分岐予測はターゲットアドレスを含み得る。キャッシュラインベースの分岐予測機構については、フェッチされているキャッシュラインに対するシーケンシャルなラインの予測とは、キャッシュラインからフェッチされている命令内に分岐命令が全くないときの分岐予測である。
【0005】
この分岐予測機構に関連する問題は、複数のタイプの分岐命令に遭遇し得ることである。これらのタイプの分岐命令は、異なる分岐予測および異なるターゲットアドレスを必要とするかもしれない。たとえば、復帰命令は常にテイクンと予測され、ターゲットアドレスは復帰アドレススタックから取出される。これに対し、条件付き分岐命令はテイクンともノットテイクンとも予測され、ターゲットアドレスはターゲットアドレスアレイから取られるであろう。種々のタイプの命令に対処するために、各キャッシュラインに対する分岐予測を種々のタイプの分岐命令内に割当てる。たとえば、ある分岐予測をシーケンシャルラインに割当て、ある分岐予測を復帰命令に割当て、2つの分岐予測を非復帰分岐命令に割当ててもよい。残念ながら、上記のスキームは2つの復帰命令または3つの非復帰分岐命令を備えるキャッシュラインに対応していない。
【0006】
【発明の概要】
上で概説した問題のほとんどは、この発明に従う分岐予測装置および方法により解決される。分岐予測装置は、特定の分岐予測が復帰命令と関連するのか非復帰分岐命令と関連するのかを特定する1つ以上の復帰セレクタビットを記憶する。この態様で、各分岐予測は、復帰命令および非復帰分岐命令のいずれかに対処することができる。このようにして、復帰および分岐命令のより多くの組合せに、追加される記憶スペースおよび回路を最小にして対処することができる。
【0007】
概して、この発明は、分岐予測記憶部および選択機構を含む分岐予測装置を意図している。分岐予測記憶部は、命令キャッシュからフェッチされている連続する命令バイトの群に対応するフェッチアドレスを受けるように結合される。分岐予測記憶部は、複数の分岐セレクタおよび復帰セレクタを記憶するように構成される。複数の分岐セレクタのうち少なくとも1つは、連続する命令バイトの群内の第1の命令に対応し、復帰セレクタは、分岐セレクタのうち少なくとも1つに対応する。複数の分岐セレクタのうちの1つおよび復帰セレクタは、第1の命令がフェッチされる場合に選択すべき特定の分岐予測を特定する。選択機構は分岐予測記憶部に結合されて複数の分岐セレクタおよび復帰セレクタを受ける。選択機構は、連続する命令バイトの群をフェッチするのに用いるフェッチアドレスの複数の最下位ビットに応答して複数の分岐セレクタのうち特定の1つを選択し、特定の分岐セレクタおよび復帰セレクタに応答して特定の分岐予測を選択する。
【0008】
この発明はさらに、複数の命令を含む連続する命令バイトの群に対応する分岐予測を選択するための方法を意図しており、この方法は、複数の分岐セレクタを分岐予測記憶部に記憶するステップを含み、複数の分岐セレクタのうち少なくとも1つは、複数の命令のうち第1の命令に対応し、上記方法はさらに、復帰セレクタを分岐予測記憶部に記憶するステップを含み、復帰セレクタは複数の分岐セレクタのうち少なくとも1つに対応し、複数の分岐セレクタのうち少なくとも1つおよび復帰セレクタは複数の命令のうち第1の命令がフェッチされる場合選択すべき特定の分岐予測を特定する。上記方法はさらに、連続する命令バイトの群を特定するフェッチアドレスを用いて連続する命令バイトの群をフェッチし同時に複数の分岐セレクタおよび復帰セレクタをフェッチするステップと、フェッチアドレスに応答して複数の分岐セレクタのうち1つを選択するステップと、複数の分岐セレクタのうち1つおよび復帰セレクタに応答して分岐予測を選択するステップとを含む。
【0009】
この発明はさらに、命令キャッシュおよび分岐予測ユニットを含むマイクロプロセッサを意図している。命令キャッシュは、命令バイトの複数のキャッシュラインを記憶し、かつフェッチアドレスを受取った際に命令バイトの群をマイクロプロセッサの命令処理パイプラインに与えるように構成される。分岐予測ユニットは命令キャッシュに結合されかつ命令キャッシュと同時にフェッチアドレスを受けるように結合される。分岐予測ユニットは、命令バイトの群に関し複数の分岐セレクタおよび復帰セレクタを記憶するように構成され、かつフェッチアドレスに応答して複数の分岐セレクタのうち1つを選択するように構成される。複数の分岐セレクタのうち1つおよび復帰セレクタは、命令キャッシュが後続のフェッチアドレスとして用いる分岐予測を特定する。
【0010】
この発明の他の目的および利点は、以下の詳細な説明を読み添付の図面を参照することにより明らかになるであろう。
【0011】
この発明については種々の変形および代替形態が可能であるが、この発明の特定の実施例を図面に例示し本明細書で詳細に説明する。しかしながら、図面および図面についての詳細な説明は、開示された特定の形態に発明を限定することを意図しているのではなく、反対に前掲の特許請求の範囲で規定するこの発明の範囲内の変形、等価物および代替例すべてを包含することを意図している。
【0012】
【詳細な説明】
次に図1を参照して、マイクロプロセッサ10のある実施例のブロック図が示される。マイクロプロセッサ10は、プリフェッチ/プリデコードユニット12と、分岐予測ユニット14と、命令キャッシュ16と、命令整列ユニット18と、複数のデコードユニット20A−20Cと、複数の予約ステーション22A−22Cと、複数の機能ユニット24A−24Cと、ロード/ストアユニット26と、データキャッシュ28と、レジスタファイル30と、リオーダバッファ32と、MROMユニット34とを含む。本明細書において特定の参照番号とそれに続く文字を用いて参照する要素は、この参照番号のみを用いて集合的に参照する。たとえば、デコードユニット20A−20Cは集合的にデコードユニット20として参照する。
【0013】
プリフェッチ/プリデコードユニット12は、メインメモリサブシステム(図示せず)から命令を受けるように結合され、さらに命令キャッシュ16および分岐予測ユニット14に結合される。同様に、分岐予測ユニット14は命令キャッシュ16に結合される。加えて、分岐予測ユニット14はデコードユニット20および機能ユニット24に結合される。命令キャッシュ16はさらにMROMユニット34および命令整列ユニット18に結合される。命令整列ユニット18は次いでデコードユニット20に結合される。各デコードユニット20A−20Cはロード/ストアユニット26および予約ステーション22A−22Cそれぞれに結合される。予約ステーション22A−22Cはさらに機能ユニット24A−24Cそれぞれに結合される。加えて、デコードユニット20および予約ステーション22はレジスタファイル30およびリオーダバッファ32に結合される。機能ユニット24はロード/ストアユニット26、レジスタファイル30およびリオーダバッファ32にも結合される。データキャッシュ28は、ロード/ストアユニット26およびメインメモリサブシステムに結合される。最後に、MROMユニット34はデコードユニット20に結合される。
【0014】
一般的に言えば、分岐予測ユニット14は分岐命令を予測するためにキャッシュラインベースの分岐予測機構を用いる。各キャッシュラインについて複数の分岐予測を記憶し得る。さらに、分岐セレクタが各バイトについてキャッシュライン内に記憶される。特定のバイトについての分岐セレクタは、キャッシュラインに関して記憶できる分岐予測のうちどれが、特定のバイトをフェッチする命令フェッチアドレスに対して適切な分岐予測であるかを示す。さらに、1つ以上の復帰セレクタビットを各分岐セレクタについて記憶し得る。復帰セレクタビットは、分岐セレクタが復帰命令分岐予測に関連付けられているのか非復帰命令分岐予測に関連付けられているのかを示す。適切な分岐予測とは、特定のバイトに後続するキャッシュライン内にある第1のテイクン予測された分岐命令についての分岐予測のことである。本明細書で用いる「後続」および「先行」は、キャッシュライン内のバイトの順序を示す。あるバイトがあるメモリアドレスに記憶されており、このメモリアドレスが第2のバイトが記憶されたメモリアドレスよりも数値的に小さければ、このあるバイトは第2のバイトに先行する。逆に、あるメモリアドレスにあるバイトが記憶されておりこのメモリアドレスが第2のバイトのメモリアドレスよりも大きければ、このあるバイトは第2のバイトに後続する。同様に、プログラムを形成する命令のシーケンスを通して一度に1ずつ進むときに第1の命令が第2の命令よりも前にあれば、プログラムの順序で第1の命令は第2の命令に先行する。
【0015】
ある実施例では、マイクロプロセッサ10は、命令セットが可変バイト長命令セット(たとえばx86マイクロプロセッサアーキテクチャ)であるマイクロプロセッサアーキテクチャを用いる。可変バイト長命令セットを用いるとき、キャッシュライン内のどのバイトも所与のフェッチアドレスによってフェッチする第1のバイトとして特定されることがあり得る。たとえば、分岐命令はキャッシュライン内のバイト位置2にターゲットアドレスを有し得る。このような場合、バイト位置0および1のバイトは現在のキャッシュアクセス中にはフェッチされていない。さらに、第1のバイトに後続する、テイクン予測された分岐に後続するバイトは、、現在のキャッシュアクセス中にはフェッチされない。各バイトについて分岐セレクタが記憶されるので、テイクン予測された分岐についての分岐予測を、キャッシュラインからフェッチすべき第1のバイトの分岐セレクタを選択することにより見出すことができる。分岐セレクタを用いて適切な分岐予測を選択し、次にこれを命令キャッシュ16の命令フェッチ論理に与える。これに続くクロックサイクルの間では、分岐予測をフェッチアドレスとして用いる。フェッチされている第1のバイトのバイト位置をテイクン予測された分岐命令のバイト位置と比較するプロセスが、フェッチアドレスに応答する分岐予測の生成から省略されるという利点がある。分岐予測形成に必要な時間がこうして短縮され、単一サイクル分岐予測をもたらす一方で、分岐予測機構の動作のクロック周波数を高めることができる(すなわちクロックサイクルの短縮)。
【0016】
なお、先の説明では「キャッシュライン」という用語を用いているが、命令キャッシュ16の実施例によっては、所与のクロックサイクル中にその出力にキャッシュライン全体を与えない場合もあり得る。たとえば、ある実施例では命令キャッシュ16は32バイトのキャッシュラインで構成される。しかしながら、所与のクロックサイクルでは16バイトしかフェッチされない(キャッシュラインの上半分または下半分)。分岐予測記憶場所および分岐セレクタは、フェッチされているキャッシュラインのその部分に割当てられている。本明細書で用いる「連続する命令バイトの群」という用語は、フェッチアドレスに応答して特定のクロックサイクルで命令キャッシュにより与えられる命令バイトのことを指す。種々の実施例によると、連続する命令バイトの群はキャッシュラインの一部またはキャッシュライン全体である。連続する命令バイトの群がキャッシュラインの一部であるときにも、依然としてこの群はキャッシュラインの中で整列している部分である。たとえば、連続する命令バイトの群がキャッシュラインの2分の1である場合、この群はキャッシュラインの上半分であるかキャッシュラインの下半分である。多数の分岐命令記憶場所が連続する命令バイトの群各々に割当てられ、分岐セレクタがその群に関連付けられる分岐予測記憶場所のうち1つを示す。さらに、分岐セレクタは、復帰スタック構造からの復帰スタックアドレスを示すか、または、連続する命令バイトの群中で対応するバイトと最後のバイトとの間に分岐命令がなければシーケンシャルアドレスを示す。
【0017】
命令キャッシュ16は、命令を記憶するために設けられる高速キャッシュメモリである。命令は命令キャッシュ16からフェッチされデコードユニット20にディスパッチされる。ある実施例では、命令キャッシュ16は、32キロバイトの命令までを、32バイトのライン(1バイトは8バイナリビットを含む)を有する4ウェイ・セットアソシアティブ構造で記憶するように構成される。命令キャッシュ16はさらに、命令キャッシュへのアクセス時間を短縮するためにウェイ予測スキームを用いてもよい。命令の各ラインを特定するタグにアクセスしそのタグをフェッチアドレスと比較してウェイを選択する代わりに、命令キャッシュ16はアクセスされるウェイを予測する。この態様で、ウェイは命令記憶部へのアクセスを行なう前に選択される。命令キャッシュ16のアクセス時間は、ダイレクトマップされたキャッシュと同様であり得る。タグ比較を行なって、ウェイ予測が誤っている場合、正しい命令をフェッチし誤った命令を廃棄する。なお、命令キャッシュ16をフルアソシアティブ構造、セットアソシアティブ構造またはダイレクトマップされた構造として実現することができる。
【0018】
命令はメインメモリからフェッチされ、プリフェッチ/プリデコードユニット12により命令キャッシュ16に記憶される。命令は、プリフェッチスキームに従い、要求される前に命令キャッシュ16からプリフェッチすることができる。プリフェッチ/プリデコードユニット12は種々のプリフェッチスキームを用いることができる。プリフェッチ/プリデコードユニット12が命令をメインメモリから命令キャッシュ16に転送するとき、このプリフェッチ/プリデコードユニット12は、命令の各バイトに対し3つのプリデコードビットすなわちスタートビット、エンドビットおよび機能ビットを生成する。プリデコードビットは、各命令のバウンダリを示すタグを形成する。プリデコードタグは、以下でより詳細に説明するように、所与の命令を直接デコードユニット20によりデコードできるのかどうか、またはその命令がMROMユニット34により制御されるマイクロコードプロシジャを呼出すことにより実行されるのかといったさらなる情報を伝えることもできる。加えて、プリフェッチ/プリデコードユニット12は、分岐命令を検出し、その分岐命令に対応する分岐予測情報を分岐予測ユニット14に記憶するようにも構成できる。
【0019】
次に、x86命令セットを用いるマイクロプロセッサ10のある実施例において行なうプリデコードタグのエンコーディングの一例について説明する。所与のバイトが命令の最初のバイトの場合、そのバイトについてスタートビットがセットされる。そのバイトが命令の最後のバイトの場合、このバイトについてエンドビットがセットされる。デコードユニット20が直接デコードできる命令は、「ファストパス」命令と呼ばれる。ある実施例では、残りのx86命令はMROM命令と呼ばれる。ファストパス命令に対し、命令に含まれる各プレフィックスバイトについて機能ビットがセットされ、他のバイトについてはクリアされる。その代わりに、MROM命令に対しては、機能ビットは、各プレフィックスバイトについてはクリアされ、他のバイトについてはセットされる。命令のタイプは、最後のバイトに対応する機能ビットを調べることによって決めることができる。この機能ビットがクリアされている場合、命令はファストパス命令である。逆に、機能ビットがセットされている場合、命令はMROM命令である。したがって、デコードユニット20が直接デコードできる命令内では、命令のオペコードを、命令内の最初のクリアされた機能ビットに関連するバイトとして見つけることができる。たとえば、2つのプレフィックスバイト、Mod R/MバイトおよびSIBバイトを含むファストパス命令は以下のようなスタート、エンドおよび機能ビットを有するであろう。
【0020】
スタートビット 10000
エンドビット 00001
機能ビット 11000
MROM命令は、デコードユニット20によるデコードにとっては複雑すぎると判断される命令である。MROM命令はMROMユニット34を呼出すことによって実行される。より具体的には、MROMユニット34はMROM命令に出会うと、その命令を解析し、定められたファストパス命令のサブセットとして発行し、所望の動作を実施する。MROMユニット34はファストパス命令のサブセットをデコードユニット20へディスパッチする。ファストパス命令に分類されるx86命令のリストを一例として後に示す。
【0021】
マイクロプロセッサ10は、条件付分岐命令に後続する命令を投機的にフェッチするために分岐予測を用いる。分岐予測ユニット14は、分岐予測動作を行なうために含まれている。ある実施例では、命令キャッシュ16内の各キャッシュラインの各16バイト部分に関し3つまでの分岐ターゲットアドレスが記憶される。プリフェッチ/プリデコードユニット12は、特定のラインがプリデコードされたときに初期分岐ターゲットを決定する。キャッシュライン内での命令の実行により、キャッシュラインに対応する分岐ターゲットへの次の更新が行なわれ得る。命令キャッシュ16はフェッチされている命令アドレスの表示を行ない、そのため、分岐予測ユニット14は分岐予測形成のためにどの分岐ターゲットアドレスを選択するかを判断し得る。デコードユニット20および機能ユニット24は分岐予測ユニット14に更新情報を与える。分岐予測ユニット14はキャッシュラインの16バイト部分あたり3つのターゲットを記憶するので、ライン内の分岐命令のうちいくつかは分岐予測ユニット14に記憶されない場合もある。デコードユニット20は分岐予測ユニット14が予測しなかった分岐命令を検出する。機能ユニット24は分岐命令を実行し、予測された分岐方向が誤っているかどうかを判断する。この分岐方向は「テイクン」であり得る。その場合、後続の命令は分岐命令のターゲットアドレスからフェッチされる。逆に、この分岐方向は「ノットテイクン」でもあり得る。その場合には、後続の命令は分岐命令に連続するメモリ場所からフェッチされる。予測誤りのあった分岐命令が検出されたとき、予測誤りのあった分岐に続く命令はマイクロプロセッサ10の種々のユニットから廃棄される。分岐予測ユニット14は、種々の適切な分岐予測アルゴリズムを用いることができる。
【0022】
命令キャッシュ16からフェッチされた命令は、命令整列ユニット18に送られる。命令が命令キャッシュ16からフェッチされると、対応するプリデコードデータが走査され、フェッチされている命令に関する情報を命令整列ユニット18(およびMROMユニット34)に与える。命令整列ユニット18は、走査データを利用して命令をデコードユニット20各々と整列させる。ある実施例では、命令整列ユニット18は、8つの命令バイトの3つの組からの命令をデコードユニット20と整列させる。命令は、8つの命令バイトの各組から、独立して選択されて予備発行位置に置かれる。この予備発行位置は次にデコードユニット20に対応する1組の整列した発行位置にマージされるため、整列した発行位置は、プログラム順で予備発行位置内の他の命令に先行する3つの命令を含む。デコードユニット20Aは、(プログラム順で)デコードユニット20Bおよび20Cによって同時に受取られた命令に先行する命令を受ける。同様に、デコードユニット20Bは、プログラム順でデコードユニット20Cにより同時に受取られた命令に先行する命令を受ける。
【0023】
デコードユニット20は、命令整列ユニット18から受けた命令をデコードするように構成される。レジスタオペランド情報が検出され、レジスタファイル30およびリオーダバッファ32に送られる。さらに、命令が1つ以上のメモリ演算の実行を必要とすれば、デコードユニット20はメモリ演算をロード/ストアユニット26にディスパッチする。各命令は機能ユニット24に対する1組の制御値にデコードされ、この制御値が、オペランドアドレス情報および命令に含まれているかもしれない変位または即値データとともに、予約ステーション22にディスパッチされる。
【0024】
マイクロプロセッサ10はアウトオブオーダ実行をサポートするので、リオーダバッファ32を用いてレジスタ読出および書込動作に対する元のプログラムシーケンスを追跡して、レジスタ・リネーミングを行ない、投機的な命令の実行および分岐予測誤りのリカバリを行なえるようにし、精密に例外を簡単に発生できるようにする。レジスタの更新を含む命令のデコードの際にリオーダバッファ32内の一時記憶場所を予約して投機的レジスタ状態を記憶する。分岐予測が誤っていれば、予測誤りのあった経路に沿い投機的に実行された命令結果を、それらがレジスタファイル30に書込まれる前に、バッファ内で無効にすることができる。同様に、特定の命令が例外を生じれば、特定の命令に後続する命令を廃棄してもよい。この態様では、例外は「精密」である(すなわち例外を引起こす特定の命令に後続する命令の完了は例外に先行しない)。なお、特定の命令は、もしプログラム順においてその特定の命令に先行する命令に先行して実行されるのであれば投機的に実行されている、という。先行する命令は、分岐命令または例外を引起こす命令の場合もあり、この場合、投機的結果はリオーダバッファ32により廃棄される。
【0025】
命令制御値、およびデコードユニット20の出力に与えられる即値または変位データは直接それぞれの予約ステーション22に送られる。ある実施例では、各予約ステーション22は、対応する機能ユニットへの発行を待つ3つまでのペンディング中の命令に対し、命令情報(すなわち命令制御値、オペランド値、オペランドタグおよび/または即値データ)を保持できる。なお、図1の実施例では、各予約ステーション22は専用の機能ユニット24に関連付けられる。したがって、3つの専用「発行位置」が予約ステーション22および機能ユニット24により形成される。言い換えれば、発行位置0は予約ステーション22Aおよび機能ユニット24Aにより形成される。予約ステーション22Aに整列しディスパッチされた命令は、機能ユニット24Aにより実行される。同様に、発行位置1は予約ステーション22Bおよび機能ユニット24Bにより形成され、発行位置2は、予約ステーション22Cおよび機能ユニット24Cにより形成される。
【0026】
特定の命令のデコードの際、必要なオペランドがレジスタ場所であれば、レジスタアドレス情報が同時にリオーダバッファ32およびレジスタファイル30に送られる。当業者であれば、x86レジスタファイルは8つの32ビットリアルレジスタ(すなわち典型的にはEAX、EBX、ECX,EDX,EBP,ESI、EDIおよびESPと呼ばれる)を含むことを理解するであろう。x86マイクロプロセッサアーキテクチャを用いるマイクロプロセッサ10の実施例では、レジスタファイル30は32ビットリアルレジスタ各々についての記憶場所を含む。さらなる記憶場所を、MROMユニット34が使用するためにレジスタファイル30に含めてもよい。リオーダバッファ32は、これらのレジスタの内容を変更するような結果に対する一時記憶場所を含み、これによってアウトオブオーダ実行を行なえる。リオーダバッファ32の一時記憶場所が、デコードの際に、リアルレジスタのうち1つの内容を変更するものと判断される各命令のために予約される。したがって、特定プログラムの実行中の種々のポイントで、リオーダバッファ32は、所与のレジスタの投機的に実行された内容を保持した1以上の場所を有し得る。所与の命令のデコードに続いて、リオーダバッファ32が所与の命令においてオペランドとして用いられるレジスタに割当てられた先行の場所を有していると判断されれば、リオーダバッファ32は、対応する予約ステーションに、1)最も最近割当てられた場所の値、または2)先行する命令を最終的に実行する機能ユニットがまだその値を生成していないのであれば最も最近割当てられた場所のためのタグのいずれかを送る。リオーダバッファ32が所与のレジスタについて予約された場所を有する場合、オペランド値(またはリオーダバッファタグ)はレジスタファイル30からではなくリオーダバッファ32から与えられる。リオーダバッファ32において必要なレジスタのために予約されている場所がない場合、値はレジスタファイル30から直接取込まれる。オペランドがメモリ場所に対応する場合、オペランド値はロード/ストアユニット26を通して予約ステーションに与えられる。
【0027】
ある特定の実施例では、リオーダバッファ32は同時にデコードされた命令を1単位として記憶し操作するように構成される。この構成は本明細書で「ライン指向」と呼ばれる。いくつかの命令を一緒に操作することにより、リオーダバッファ32内で用いるハードウェアを単純にすることができる。たとえば、この実施例に含まれるライン指向リオーダバッファは、デコードユニット20が1つ以上の命令をディスパッチするときは常に、3つの命令(各デコードユニット20から1つずつ)に関する命令情報に十分な記憶を割当てる。これと異なり、従来のリオーダバッファでは、実際にディスパッチされる命令の数によって、可変量の記憶部を割当てる。比較的多数の論理ゲートが、可変量の記憶部を割当てるのに必要であろう。同時にデコードされた命令の各々が実行されるとき、命令結果が同時にレジスタファイル30に記憶される。その後、この記憶部は同時にデコードされた命令の別の組に割当てるために解放される。加えて、1つの命令につき用いられる制御論理回路の量は減少する。なぜなら、制御論理は同時にデコードされる複数の命令の全体で共用されるからである。特定の命令を特定するリオーダバッファタグを2つのフィールドすなわちラインタグおよびオフセットタグに分割することができる。ラインタグは、特定の命令を含む同時にデコードされる命令の組を特定し、オフセットタグは、その組内の、特定の命令に対応する命令を特定する。なお、命令結果をレジスタファイル30に記憶し、対応する記憶部を解放することは、命令を「リタイアする」と呼ばれる。なおマイクロプロセッサ10の種々の実施例においていかなるリオーダバッファ構成を用いてもよい。
【0028】
先に述べたように、予約ステーション22は、命令を、対応する機能ユニット24がその命令を実行するまで記憶する。命令は、(i)命令のオペランドが与えられた場合、かつ(ii)同じ予約ステーション22A−22C内にありかつプログラム順においてその命令に先行する命令に対してオペランドがまだ与えられていない場合に、実行する対象として選択される。なお、命令が機能ユニット24のうち1つにより実行されると、その命令の結果は、結果がリオーダバッファ32を更新するために送られるのと同時に、その結果を待っている予約ステーション22のすべてに直接送られる(この技術は一般に「結果フォワーディング」と呼ばれる)。関連する結果がフォワーディングされるクロックサイクル中、命令が実行のために選択され機能ユニット24A−24Cに送られてもよい。予約ステーション22はこのフォワーディングされた結果をこの場合は機能ユニット24に送る。
【0029】
ある実施例では、各機能ユニット24は、整数の加算、減算といった算術演算、シフト、ローテート、論理演算および分岐演算を行なうように構成される。こうした演算は、デコードユニット20が特定の命令に対しデコードする制御値に応答して行なわれる。なお、浮動小数点ユニット(図示せず)を用いて浮動小数点演算に対処するようにしてもよい。浮動小数点ユニットは、MROMユニット34から命令を受け、次にリオーダバッファ32と通信して命令を完成するコプロセッサとして動作できる。さらに、機能ユニット24を、ロード/ストアユニット26が行なうロードおよびストアメモリ演算に対し、アドレス生成を行なうように構成してもよい。
【0030】
各機能ユニット24はまた、条件付き分岐命令の実行に関する情報を分岐予測ユニット14に与える。分岐予測が誤っていた場合、分岐予測ユニット14は、命令処理パイプラインに入った誤予測された分岐に続く命令をフラッシュし、命令キャッシュ16またはメインメモリから必要な命令がフェッチされるようにする。なお、このような状況では、誤予測された分岐命令の後に生じる、元のプログラムシーケンスの命令結果は、投機的に実行されたものならびに一時的にロード/ストアユニット26およびリオーダバッファ32に記憶されたものを含め廃棄される。
【0031】
機能ユニット24によって得られる結果は、レジスタ値が更新されるのならばリオーダバッファ32に送られ、メモリ場所の内容が変更されるのであればロード/ストアユニット26に送られる。その結果をレジスタに記憶するのであれば、リオーダバッファ32は、命令がデコードされたときにレジスタの値について予約された場所に結果を記憶する。複数の結果バス38が、機能ユニット24およびロード/ストアユニット26からの結果のフォワーディングのために含まれている。結果バス38は、発生した結果を、実行されている命令を特定するリオーダバッファタグとともに伝達する。
【0032】
ロード/ストアユニット26は、機能ユニット24とデータキャッシュ28との間にインターフェイスを提供する。ある実施例では、ロード/ストアユニット26は、データのための8つの記憶場所およびペンディングのロードまたはストアのためのアドレス情報を有するロード/ストアバッファを備えるように構成される。デコードユニット20はロード/ストアユニット26へのアクセスを調停する。バッファが一杯のとき、デコードユニットは、ロード/ストアユニット26にペンディングのロードまたはストア要求情報のための空きができるまで待機しなければならない。ロード/ストアユニット26はまた、ペンディングのストアメモリ演算に対するロードメモリ演算の従属性検査を行なってデータのコヒーレンシが確実に維持されるようにする。メモリ演算とは、マイクロプロセッサ10とメインメモリサブシステムの間のデータの転送である。メモリ演算は、メモリに記憶されたオペランドを利用する命令の結果またはデータの転送を引起こすが他の動作は引起こさないロード/ストア命令の結果である。さらに、ロード/ストアユニット26は、x86マイクロプロセッサアーキテクチャが規定するアドレス変換機構に関するセグメントレジスタおよび他のレジスタといった特殊レジスタのための特殊レジスタ記憶部を含み得る。
【0033】
ある実施例では、ロード/ストアユニット26は、ロードメモリ演算を投機的に行なうように構成される。ストアメモリ演算はプログラム順で行なわれるが、予測されたウェイに投機的に記憶されてもよい。予測されたウェイが誤っていれば、ストアメモリ演算に先行するデータは予測されたウェイにストアし直され、ストアメモリ演算は正しいウェイに対して行なわれる。他の実施例でも、ストアは投機的に行なわれ得る。投機的に実行されるストアはストアバッファに、更新に先行するキャッシュラインのコピーとともに位置付けられる。投機的に実行されたストアが後に、分岐の予測誤りまたは例外のために廃棄された場合、キャッシュラインはバッファに記憶された値にストアし直され得る。なお、ロード/ストアユニット26を、投機的実行がない場合を含め、いかなる量の投機的実行でも行なうように構成し得る。
【0034】
データキャッシュ28は、ロード/ストアユニット26とメインメモリサブシステムとの間で転送されているデータを一時的に記憶するために設けられる高速キャッシュメモリである。ある実施例では、データキャッシュ28は、8ウェイ・セットアソシアティブ構造で16キロバイトまでのデータを記憶する容量を有する。命令キャッシュ16と同様、データキャッシュ28はウェイ予測機構を用いてもよい。データキャッシュ28を、セットアソシアティブ構造を含めて種々の特殊メモリ構成で実現できることがわかる。
【0035】
x86マイクロプロセッサアーキテクチャを用いるマイクロプロセッサ10のある特定の実施例において、命令キャッシュ16およびデータキャッシュ28はリニアにアドレスされる。このリニアアドレスは、命令により特定されるオフセットおよびx86アドレス変換機構のセグメント部分により特定される基底アドレスにより形成される。リニアアドレスを必要であればメインメモリにアクセスするために物理アドレスに変換してもよい。リニアから物理への変換は、x86アドレス変換機構のページング部分により特定される。なお、リニアにアドレスされるキャッシュはリニアアドレスタグを記憶する。1組の物理タグ(図示せず)を、リニアアドレスを物理アドレスにマッピングするためおよび変換エイリアスを検出するために用いてもよい。さらに、物理タグブロックがリニア−物理アドレス変換を行なってもよい。
【0036】
次に図2を参照して、デコードユニット20Bおよび20Cのある実施例のブロック図が示される。各デコードユニット20は命令を命令整列ユニット18から受ける。さらに、MROMユニット34が、特定のMROM命令に対応するファストパス命令をディスパッチするために各デコードユニット20に結合される。デコードユニット20Bは、初期デコードユニット40B、マルチプレクサ42Bおよびオペコードデコードユニット44Bを含む。同様に、デコードユニット20Cは、初期デコードユニット40C、マルチプレクサ42Cおよびオペコードデコードユニット44Cを含む。
【0037】
x86命令セットの中のいくつかの命令はかなり複雑でかつ頻繁に用いられる。マイクロプロセッサ10のある実施例では、そのような命令は、特定の機能ユニット24A−24C内に含まれるハードウェアが実行するように構成されているものよりもはるかに複雑な演算を含む。そのような命令は特殊タイプのMROM命令として分類され、「二重ディスパッチ」命令と呼ばれる。こうした命令は1対のオペコードデコードユニット44にディスパッチされる。なお、オペコードデコードユニット44はそれぞれ予約ステーション22に結合される。オペコードデコードユニット44A−44C各々は、対応する予約ステーション22A−22Cおよび機能ユニット24A−24Cとともに発行位置を形成する。命令はオペコードデコードユニット44から、対応する予約ステーション22へかつさらに対応する機能ユニット24へ送られる。
【0038】
マルチプレクサ42Bは、MROMユニット34が与える命令および初期デコードユニット40Bが与える命令間の選択のために含まれる。MROMユニット34が命令をディスパッチしている間に、マルチプレクサ42BはMROMユニット34により与えられる命令を選択する。その他のときには、マルチプレクサ42Bは初期デコードユニット40Bにより与えられる命令を選択する。同様に、マルチプレクサ42Cは、MROMユニット34、初期デコードユニット40Bおよび初期デコードユニット40Cにより与えられる命令間の選択を行なう。MROMユニット34からの命令は、MROMユニット34が命令をディスパッチしている間に選択される。デコードユニット20A(図示せず)内の初期デコードユニットが二重ディスパッチ命令を検出している間には、初期デコードユニット40Bからの命令がマルチプレクサ42Cにより選択される。さもなければ、初期デコードユニット40Cからの命令が選択される。初期デコードユニット40Bからオぺコードデコードユニット40Cへの命令を選択することにより、デコードユニット20Bがデコードしたファストパス命令をデコードユニット20Aがデコードした二重ディスパッチ命令と同時にディスパッチすることができる。
【0039】
x86命令セットを用いるある実施例に従うと、初期デコードユニット40は以下の動作を行なう。
【0040】
(i) 命令のプレフィックスバイトをエンコードされたプレフィックスバイトにマージする。
【0041】
(ii) 分岐予測中検出されなかった無条件分岐命令(無条件ジャンプ、CALLおよびRETURNを含み得る)をデコードする。
【0042】
(iii) ソースおよび宛先フラグをデコードする。
(iv) レジスタオペランドであるソースおよび宛先オペランドをデコードしオペランドサイズ情報を生成する。
【0043】
(v) 変位および/または即値サイズを決定して変位および即値データをオペコードデコードユニットに送ることができるようにする。
【0044】
オペコードデコードユニット44は、命令のオペコードをデコードし、機能ユニット24のための制御値を生成するように構成される。変位および即値データは制御値とともに予約ステーション22に送られる。
【0045】
初期デコードユニット40はオペランドを検出するので、マルチプレクサ42の出力はレジスタファイル30およびリオーダバッファ32に送られる。こうしてオペランド値またはタグが予約ステーション22に送られる。さらに、初期デコードユニット40がメモリオペランドを検出する。したがって、マルチプレクサ42の出力はロード/ストアユニット26に送られる。メモリオペランドを有する命令に対応するメモリ演算がロード/ストアユニット26に記憶される。
【0046】
次に図3を参照して、連続する命令バイトの群50の例、ならびに対応する分岐セレクタ52および復帰セレクタ53の組の図が示される。図3では、命令内の各バイトは、短い縦の線で示される(たとえば参照番号54)。さらに、群50内の命令を分離する縦の線はバイトの境界を示す(たとえば参照番号56)。図3に示した命令は可変長であり、したがって図3に示した命令を含む命令セットは可変バイト長命令セットである。言い換えれば、可変バイト長命令セット内の第1命令は、その命令セット内で第2命令が占める第2の数のバイトと異なる第1の数のバイトを占める。他の命令セットは固定長でもよく、その場合には命令セット内の各命令は他の命令と同数のバイトを占める。
【0047】
図3に示すように、群50は非分岐命令IN0−IN5を含む。命令IN0、IN3、IN4およびIN5は2バイト命令である。命令IN1は1バイト命令であり、IN2は3バイト命令である。テイクン予測された2つの分岐命令PB0およびPB1も示されており、各々2バイトを占めるものとして示されている。なお、非分岐および分岐命令双方がさまざまな数のバイトを占めていてもよい。
【0048】
テイクン予測された分岐PB0およびPB1各々のエンドバイトにより、群50が3つの領域すなわち第1領域58、第2領域60および第3領域62に分割される。群50を特定するフェッチアドレスがあり、この群内のフェッチアドレスのオフセットが第1領域58内のバイト位置を特定するのであれば、最初に出会うテイクン予測された分岐命令はPB0でありしたがってPB0に対する分岐予測が分岐予測機構により選択される。同様に、フェッチアドレスのオフセットが第2領域60内のバイトを特定するならば、適切な分岐予測はPB1に対する分岐予測である。最後に、フェッチアドレスのオフセットが第3領域62内のバイトを特定するのであれば、命令バイトの群内にありかつ特定されたバイトに後続する、テイクン予測された分岐命令はない。したがって、第3領域62に対する分岐予測はシーケンシャルである。シーケンシャルアドレスは、メインメモリ内で群50の直後に続く命令バイトの群を特定する。
【0049】
本明細書で用いる、アドレスのオフセットは、そのアドレスの複数の下位ビットを含む。その数は、オフセットが関連するバイトの群内の各バイトに対するビットに対し異なるエンコードを行なうのに十分である。たとえば群50は16バイトである。したがって、この群内のアドレスの4つの下位ビットがアドレスのオフセットを形成する。このアドレスの残りのビットはメインメモリ内の他の命令バイトの群から群50を特定する。さらに、この残りのビットの複数の下位ビットは、命令キャッシュ16が群50の記憶に適した記憶場所の行を選択するのに用いるインデックスを形成する。
【0050】
セット52は群50の分岐セレクタのセットの例である。群50内の各バイトに対して1つの分岐セレクタが含まれる。セット52内の分岐セレクタは以下の図13で示すエンコーディングを用いる。この例では、PB0に対する分岐予測は、群50に関連する3つの分岐予測のうち3番目のものとして記憶される(分岐セレクタ値「3」により示される)。したがって、第1領域58内の各バイトに対する分岐セレクタは「3」にセットされる。同様に、PB1に対する分岐予測は、分岐予測のうち2番目のものとして記憶される(分岐セレクタ値「2」により示される)。したがって、第2領域60内の各バイトに対する分岐セレクタは「2」にセットされる。最後に、シーケンシャル分岐予測は、第3領域62内のバイトに対する分岐セレクタにより、分岐セレクタエンコーディング「0」で示される。
【0051】
なお、x86命令セットの可変バイト長という性質のため、分岐命令は、連続命令バイトのある群内で始まり連続する命令バイトの第2の群内で終わる。このような場合、分岐命令の分岐予測は、連続する命令バイトの第2の群とともに記憶される。とりわけ、分岐命令のうち、連続する命令バイトの第2の群内に記憶されるバイトをフェッチしディスパッチする必要がある。連続する命令バイトの第1の群内で分岐予測を形成すると、命令バイトの第2の群内にある分岐命令のバイトはフェッチされないことになるであろう。
【0052】
セット53は、群50の復帰セレクタの組の例である。群53内の復帰セレクタは以下の図13で示すエンコーディングを用いる。この例では、復帰セレクタは、分岐セレクタが復帰命令を特定するのかまたは非復帰分岐命令を特定するのかを示す。この実施例では、ある復帰セレクタビットは各非シーケンシャル分岐セレクタに関連付けられる(すなわち分岐セレクタ値「1」、「2」および「3」)。復帰セレクタ値は、復帰セレクタに関連付けられた分岐セレクタが復帰命令に対応するのかまたは非復帰分岐命令に対応するのかを特定する。この実施例では、復帰セレクタ値が「1」であれば、関連する分岐セレクタは復帰命令を特定する。その代わりに、復帰セレクタ値が「0」であれば、関連する分岐セレクタは非分岐復帰命令を特定する。この実施例では、セット53は、第1の分岐セレクタが復帰命令を特定し第2および第3の分岐セレクタが非復帰分岐命令を特定することを示している。この実施例では、群50は2つの非復帰分岐命令を含み復帰命令を含まない。復帰命令がセット50に含まれるならば、その復帰命令により境界が定められる領域内の各バイトに対する分岐セレクタは「1」にセットされるであろう。その代わりとして、群50が第3の非復帰分岐命令を含むならば、セット53の第1ビットがデアサートされ(すなわち「0」にセットされ)、第3の非復帰分岐命令により境界が定められる領域内の各バイトに対する分岐セレクタは「1」にセットされる。
【0053】
復帰セレクタは、分岐セレクタが可能な分岐予測の中でより効率的に割当てられるようにする。たとえば、復帰セレクタのない実施例では、2ビット分岐セレクタが1つのシーケンシャル予測、1つの復帰命令分岐予測または2つの非復帰分岐命令予測を特定し得る。この実施例では、分岐セレクタは2つ以上の復帰命令または3つ以上の非復帰分岐命令を有するキャッシュラインに対処することはできない。キャッシュラインが復帰命令または非復帰分岐命令の数を超えていれば、キャッシュライン内の1つ以上の分岐命令は予測されない可能性がある。復帰セレクタは、各分岐セレクタが複数のタイプの分岐命令内に割当てられるようにする。たとえば、復帰セレクタは、分岐セレクタが復帰命令分岐予測に関連するのかまたは非復帰命令分岐予測に関連するのかを示すことができる。この態様で、非シーケンシャル分岐予測をキャッシュラインの分岐命令のタイプに従い割当てることができる。たとえば、3つの分岐セレクタを復帰命令予測として割当て、3つの分岐セレクタを非復帰命令分岐予測として割当ててもよい。
【0054】
次に図4を参照して、群50、領域58、60および62、ならびに分岐セレクタのセット70のある実施例を表わす図が示される。セット70内の分岐セレクタは群50内で規定されるバイト範囲に対応する。図4に示した例では、9つの分岐セレクタを16の連続する命令バイトの群に対して用いている。したがってセット70は、図3に示したセット52よりも小さい記憶部を分岐予測記憶部において占めるので、分岐予測記憶部を小さくできる。さらに、フェッチアドレスに応答して分岐セレクタを選択するためにより幅の狭い選択装置を用いてもよい。この選択された分岐セレクタをより迅速に与えることができ、したがって予測されたフェッチアドレスが各クロックサイクルにおいて与えられるというより高周波数の実現が可能になる。
【0055】
通常、所与の分岐セレクタに対して規定される最大バイト範囲を、最短分岐命令(以下でより詳細に説明する復帰命令を除く)と等しくし得る。バイト範囲の大半は最大サイズとなるように選択される。しかしながら、特定の状況に対応するために、図4に示した実施例は、最大サイズよりも小さい2つのバイト範囲を用いている。具体的に、群50の初期バイトは単一バイトを有するバイト範囲を形成する(このことについては以下で図6に関してより詳細に説明する)。群50は偶数バイトであるため、初期バイトに対応するバイト範囲は初期バイトのみを含み、最大バイト範囲はこの例では2バイトであり、別のバイト範囲は同様に単一バイトを有すると規定される。セット70については、初期バイトに連続する群50内のバイトを単一バイト範囲として選択する。この選択により、図5に示すようにフェッチアドレスのオフセットを比較的簡単にデコードして分岐セレクタを選択することができる。
【0056】
バイト範囲は最短分岐命令よりも大きくならないように選択されるので、分岐命令はあるバイト範囲で始まり後続のバイト範囲で終わり得る。しかしながら、たとえ分岐命令が連続する命令バイトの特定の群内で連続していても、最大で1つの分岐命令が特定のバイト範囲で終わるだけである。特定のバイト範囲のエンドではなくそのバイト範囲内で終わる分岐命令の場合、そのバイト範囲に対する分岐セレクタは、分岐命令に後続する命令バイトに対応する分岐セレクタとして選択される。たとえば、バイト範囲72(バイト3−4を含み初期バイトはバイト0の番号が付される)に対する分岐セレクタは、予測された分岐PB1に対応する分岐予測を示す。上記の規則を用いる理由は、バイト範囲内のフェッチアドレスが(先行するバイト範囲内で始まる)分岐命令をフェッチしていないからである。したがって、正確な分岐予測は、後続の分岐についての予測である。
【0057】
一方、分岐命令がバイト範囲内の最後のバイトで終わるのであれば、そのバイト範囲に対する分岐セレクタは、分岐命令(たとえばバイト範囲74)に対応する分岐セレクタである。したがって、フェッチアドレスが、予測された分岐PB1を特定するのならば(すなわちオフセットがバイト範囲74内である)、フェッチのために用いる分岐予測は分岐PB1に対応する分岐予測である。
【0058】
次に図5を参照して、図4の例に示した分岐セレクタについてのバイト範囲の選択に対応する表76が示される。表76の「バイト位置」と示した行に、各バイト範囲に対応する群50内のバイト位置を列挙する(すなわち各バイト範囲内にある各バイトのアドレスのオフセット部分)。「分岐セレクタ位置」と示した行は、各バイト範囲に対応する分岐セレクタのセット70内の分岐セレクタ位置を示す。「読出アドレス」と示した行に、(後続のクロックサイクルに対し予測されたフェッチアドレスを形成するために)デコードされて対応するバイト範囲内の分岐セレクタを選択するフェッチアドレスオフセットを(バイナリ形式で)列挙する。読出アドレス中の「x」はドントケア位置を示す。最後に、「エンコーディングアドレス」と示した行に、分岐命令がそこで終了し、しかもその分岐命令に対応する分岐予測を示すバイト範囲に対する分岐セレクタを有することが可能なフェッチアドレスのオフセットを(バイナリ形式で)列挙している。たとえば、分岐セレクタ位置2は、バイト位置3または4で終わる分岐命令についての分岐予測を示す。より具体的には、バイト位置2で終わる分岐命令は、分岐セレクタ位置2内の分岐セレクタによっては表わされない(なぜなら分岐命令は分岐セレクタ位置2と関連するものと異なるバイト範囲で始まりしたがって、フェッチアドレスのオフセットが分岐セレクタ位置2と関連するバイト範囲内にある場合フェッチされないからである)。
【0059】
表76の「読出アドレス」行は、フェッチアドレスオフセットの比較的単純なデコードを用いてそのフェッチアドレスについて適切な分岐セレクタを選択できることを示す。分岐セレクタ位置0および1のデコードは、各フェッチアドレスオフセットビットを含むが、残余の位置のデコードは最下位ビットを排除することもある(ドントケアであるため)。高速デコードおよび分岐セレクタ選択は、図4に示すバイト範囲の割当てを用いて可能である。
【0060】
次に図6を参照して、図4および5に示したバイト範囲の分岐セレクタの第1の例80が示される。例80は、連続する命令バイトの群のバイト0のみを含むバイト範囲の使用を表わしている。例80は、連続する命令バイトの第1の群のバイト「E」で終わる命令IN0、第1の群のバイト「F」から第1の群に続く連続する命令バイトの第2の群のバイト0まで続く予測分岐PB0、および第2の群のバイト「1」で始まる命令IN1を示す。
【0061】
分岐命令PB0は第2の群のバイト0まで終わらないので、第2の群を命令キャッシュ16からフェッチする必要がある。したがって、第1の群のバイト「E」および「F」に対応する分岐セレクタはシーケンシャルを示し、それによって第2の群がフェッチされる。シーケンシャルなフェッチアドレスは、(第1の群の最後のバイトの直後のバイトがフェッチされるので)ゼロにセットされたオフセット部分を含む。したがって、第2の群のバイト「0」に対応する分岐セレクタが選択される。この分岐セレクタは分岐命令PB0に対応する分岐予測を選択するようにコード化される。
【0062】
第2の群のバイト0および1が図4および5に示した他のバイト範囲と同様のバイト範囲を形成するならば、分岐命令PB0を予測することはできない。命令バイトの複数の群にわたって延びる分岐を予測できるようにするために、この実施例では、バイト範囲をバイト「0」からなるバイト範囲を含むように定める。
【0063】
次に図7を参照して、図4および5に示したバイト範囲の分岐セレクタの第2の例82が示される。例82は、予測された分岐命令PB0の後に復帰命令RETが続く状況を示す。分岐命令PB0はバイト「4」で終わり、これは分岐セレクタ位置3に対応するバイト範囲内にある(すなわちバイト「4」はバイト範囲内の最後のバイトではない)。したがって、分岐セレクタ位置3の分岐セレクタは、バイト範囲内で終わる分岐命令に関して先に述べたように、PB0に対する分岐予測を選択しない。RET命令はバイト範囲の最後のバイトで終わる。したがって、分岐セレクタ位置3についての分岐セレクタは復帰命令を示す(すなわち例82のエンコーディング「1」を示す)。この例では、分岐予測1と関連する復帰セレクタがアサートされ、これが分岐予測1が復帰命令に関連することを示す。
【0064】
一方、図8は復帰命令が予測されない例84を示す。例84は、予測された分岐命令PB0、復帰命令RETおよび命令IN1を含む。分岐命令PB0は分岐セレクタ位置2に対応するバイト範囲の最後のバイトで終わるので、対応する分岐セレクタが分岐命令PB0に対応する分岐予測を選択するようにエンコードされる。復帰命令は分岐セレクタ位置3に対応するバイト範囲内で終わる。したがって、対応する分岐セレクタは復帰命令を示していない。この態様で、命令IN0がフェッチアドレスによって示されるのであれば、分岐セレクタ位置3の分岐セレクタが誤って復帰命令を予測することはない。しかしながら、復帰命令がフェッチアドレスの示すバイトであれば、誤予測が行なわれる。
【0065】
なお、例84に示したコードシーケンスは通常のものと異なるかもしれない。なぜなら、復帰命令の実行の直前にスタックから一時変数がポップされることが多いからである。したがって、テイクン予測された分岐が復帰命令の直前にあることは少ない。
【0066】
図9は、復帰命令が誤って予測され得る例86を示す。例86では、復帰命令の直後に、予測された分岐命令PB0がある。このコードシーケンスもあまり見受けられないものである。なぜなら、分岐命令PB0を実行する唯一の方法は、コードシーケンスの他の場所から直接この命令に分岐することだからである。例86では、復帰命令は直接分岐する場合のみ誤って予測される。命令IN0がフェッチおよび実行される場合、復帰命令は正しく予測される。
【0067】
次に図10を参照して、連続する命令バイトの群50の例および対応する分岐セレクタ52および復帰セレクタ53のセットが示される。図10Aでは、群50は、非分岐命令IN0−IN5、テイクン予測された分岐命令PB0およびPB1、ならびに復帰命令RET1を含む。なお、これらの命令の長さは例示のみを目的として示している。命令はこれより多くのまたは少ない命令バイトを占める可能性があり、群50はこれより多くのまたは少ない命令を含み得る。PB0、PB1およびRETのエンドバイトは群50を4つの領域に分割する。
【0068】
セット52は、群50に対する分岐セレクタのセットの例である。セット70内の分岐セレクタは、群50内で規定されるバイト範囲に対応する。セット70内の分岐セレクタは以下の図13に示すエンコーディングを用いる。したがって、分岐セレクタは1つのシーケンシャル分岐セレクタ(分岐セレクタ値「0」で示す)および3つの非シーケンシャル分岐セレクタ(分岐セレクタ値「1」、「2」または「3」で示す)を含む。上記のように、復帰セレクタは、非シーケンシャル分岐セレクタを、復帰命令分岐予測子または非復帰命令分岐予測子として特定する。
【0069】
セット53は非シーケンシャル分岐セレクタに対する復帰セレクタの組の例である。この実施例では、1つのビットが各非シーケンシャル分岐セレクタと関連付けられる。この実施例では、左端の復帰セレクタビットが分岐セレクタ3と関連付けられ、中央の復帰セレクタビットが分岐セレクタ2と関連付けられ、右端のセレクタビットが分岐セレクタ1と関連付けられる。他の実施例では、復帰セレクタ53が非シーケンシャル分岐セレクタの一部のみと関連付けられることもあり得る。復帰セレクタ53の各ビットは、復帰セレクタビットと関連付けられた分岐セレクタが復帰命令を特定しているのか非復帰分岐命令を特定しているのかを示す。たとえば、この実施例では、分岐セレクタ1は復帰命令と関連付けられ、分岐セレクタ2および3は非復帰分岐命令と関連付けられる。したがって、復帰セレクタ53の第3のビット(すなわち右端のビット)はアサートされ、他のビットはデアサートされる。復帰セレクタビットにより、非シーケンシャル分岐セレクタは、復帰命令または非復帰分岐命令いずれかに対処することができる。この態様で、復帰命令および非復帰分岐命令の複数の組合せを効果的に予測できる。
【0070】
復帰セレクタのない分岐予測ユニットの実施例では、いくつかの分岐セレクタが復帰命令分岐予測に割当てられ、その他の分岐セレクタが非復帰命令分岐予測に割当てられる。たとえば、4つの分岐予測を用いる分岐予測では、1つの分岐セレクタが非シーケンシャル分岐予測であり、1つの分岐予測が復帰分岐予測であり、2つの分岐セレクタが非復帰分岐命令予測である。これらの実施例では、1キャッシュライン内で復帰命令を1つだけ効果的に予測できる。同様に、1キャッシュライン内で非復帰分岐命令を2つだけ予測できる。3つの復帰セレクタビットを追加することにより、3つの非シーケンシャル分岐予測が、復帰命令および非復帰分岐命令のより多くの組合せを予測できる。たとえば、復帰セレクタ53を、3つの非シーケンシャル分岐セレクタすべてが復帰命令分岐予測となるように構成してもよい。その代わりに、復帰セレクタ53を、3つの非シーケンシャル分岐セレクタすべてが非復帰分岐命令予測となるように構成してもよい。
【0071】
次に図10Bを参照して、2つの復帰命令および1つの非復帰分岐命令を含む群50に対する復帰セレクタビット53を表わす例が示される。この実施例では、復帰セレクタ53のビットは、分岐セレクタ1および3が復帰命令と関連付けられ、分岐セレクタ2が非復帰分岐命令と関連付けられるように構成される。2つの非シーケンシャル分岐予測が非復帰分岐命令に割当てられる、復帰セレクタビットがない実施例では、2つの復帰命令を予測できる。復帰命令を正しく予測していない場合、プロセッサは復帰命令に後続する命令を実行し廃棄することになるので、プロセッサの性能が低下する。
【0072】
次に図10Cを参照して、群50が3つの非復帰分岐命令を含む実施例が示される。この実施例では、復帰セレクタ53のビットがデアサートされ、非シーケンシャル分岐予測が非復帰分岐命令と関連付けられていることが示される。この実施例では、分岐セレクタ3がPB0と関連付けられ、分岐セレクタ2がPB1と関連付けられ、分岐セレクタ1がPB2と関連付けられる。
【0073】
次に図11を参照して、分岐予測ユニット14のある実施例の一部が示される。分岐予測ユニット14の他の実施例も意図している。図11に示すように、分岐予測ユニット14は、分岐予測記憶部90、ウェイマルチプレクサ92、復帰セレクタマルチプレクサ93、分岐セレクタマルチプレクサ94、初期予測マルチプレクサ98、最終予測マルチプレクサ100、NORゲート95、ANDゲート97、更新論理ブロック102およびデコーダ104を含む。分岐予測記憶部90およびデコーダ104は、命令キャッシュ16からのフェッチアドレスバス106に結合される。命令キャッシュ16に同時に与えられるフェッチアドレスは、フェッチアドレスバス106で送られる。デコーダブロック104は、分岐セレクタマルチプレクサ94に選択制御を与える。ウェイマルチプレクサ92の予測制御は、命令キャッシュ16からのウェイ選択バス108を介して与えられる。ウェイ選択バス108はフェッチアドレスバス106に与えられたフェッチアドレスに対応するキャッシュラインを記憶する命令キャッシュ16のウェイを与える。さらに、選択制御が、キャッシュラインのどの部分がフェッチされているかに基づきデコーダ104により与えられる。
【0074】
ウェイマルチプレクサ92は、フェッチアドレスバス106上のフェッチアドレスにより指示された、分岐予測記憶部90の行内の各記憶場所の内容を受けるように結合される。分岐セレクタマルチプレクサ94および初期予測マルチプレクサ98は、ウェイマルチプレクサ92の出力の部分を入力として受けるように結合される。復帰セレクタマルチプレクサは、ウェイマルチプレクサ92の出力の復帰セレクタ部分を入力として受けるように結合される。分岐セレクタマルチプレクサ94の出力は、マルチプレクサ93および98に選択制御を与える。初期予測マルチプレクサ98は、命令キャッシュ16からのシーケンシャルアドレスバス110上に与えられたシーケンシャルアドレスおよび3つの分岐予測アドレス(BP1、BP2およびBP3)間の選択を行なう。マルチプレクサ98の出力および復帰スタックからの復帰アドレスバス112上に与えられた復帰アドレスは、最終予測マルチプレクサ100に与えられ、分岐予測バス114が命令キャッシュ16に与えられる。マルチプレクサ94の出力はORゲート95に与えられる。マルチプレクサ93の出力およびNORゲート95の出力はANDゲート97に与えられる。ANDゲートの出力が、最終予測マルチプレクサ100に対する選択制御を与える。
【0075】
命令キャッシュ16は、後続のクロックサイクルのフェッチアドレスとして、分岐予測バス114上に与えられた分岐予測を用いる。更新論理ブロック102は、記憶された分岐予測情報を更新するために用いられる更新バス116を介して分岐予測記憶部90に結合される。更新論理ブロック102は、機能ユニット24およびデコードユニット20からの予測誤りバス118を介して信号で示された予測余りに応答して更新を行なう。さらに、更新論理ブロック102は、プリデコードバス120上のプリフェッチ/プリデコードユニット12により示される新たにプリデコードされた命令に応答して更新を行なう。
【0076】
この実施例では、分岐予測記憶部90は、命令キャッシュ16内のウェイの数に等しい数のウェイを備えるように設けられる。各ウェイについて、キャッシュライン内に存在する連続する命令バイトの各群に対し分岐予測エントリが記憶される。図11の実施例では、命令バイトの2つの群が各キャッシュラインに含まれる。したがって、分岐予測エントリP00は、第1のウェイにおける連続する命令バイトの第1の群に対応する分岐予測エントリであり、分岐予測エントリP01は、第1のウェイにおける連続する命令バイトの第2の群に対応する分岐予測エントリである。同様に、分岐予測エントリP10は、第2のウェイにおける連続する命令バイトの第1の群に対応する分岐予測エントリであり、分岐予測エントリP11は、第2のウェイにおける連続する命令バイトの第2の群に対応する分岐予測エントリであり、以降同様に続く。指示された行内の分岐予測エントリP00−P31の各々は、分岐予測記憶部90の出力として与えられ、したがってウェイマルチプレクサ92への入力として与えられる。この指示された行は、キャッシュへの指標と同様であり、フェッチアドレスのオフセット部の部分ではない複数のビットを用いて分岐予測記憶部90の行のうち1つを選択する。なお、分岐予測記憶部90を命令キャッシュ16よりも行が少なくなるように構成してもよい。たとえば、分岐予測記憶部90は命令キャッシュ16の行数の4分の1の数の行を含んでもよい。そのような場合、命令キャッシュ16のインデックスビットであるが分岐予測記憶部90のインデックスビットではないアドレスビットが、分岐予測情報とともに記憶され、対応するフェッチアドレスのビットについて照合されて、分岐予測情報がアクセスされている命令キャッシュ16の行と関連していることを確認する。
【0077】
ウェイマルチプレクサ92は、命令キャッシュ16から与えられたウェイ選択およびフェッチアドレスが参照する命令バイトの群に基づき、分岐予測情報P00−P31の組のうち1つを選択する。この実施例では、たとえば32バイトのキャッシュラインは2つの16バイトの群に分割される。したがって、フェッチアドレスの最下位から5番目のビットを用いて、2つの群のうちフェッチアドレスを含む群を選択する。最下位から5番目のビットが0の場合、連続する命令バイトの第1の群が選択される。最下位から5番目のビットが1であれば、連続する命令バイトの第2の群が選択される。なお、ウェイ選択バス108に与えられるウェイ選択は、ある実施例に従うと、前のクロックサイクルからの分岐予測により生成されるウェイ予測でもよい。その代わりに、ウェイ選択は、フェッチアドレスと、命令キャッシュの各ウェイに記憶されたキャッシュラインを特定するアドレスタグとの間のタグ比較を通して行なわれてもよい。なお、アドレスタグは、アドレス中の、キャッシュライン内のオフセットでも命令キャッシュへのインデックスでもない部分である。
【0078】
ウェイマルチプレクサ92により与えられる選択された分岐予測エントリは、連続する命令バイトの群に対応する1組の分岐セレクタ、1組の復帰セレクタ、ならびに分岐予測BP1、BP2およびBP3を含む(図12参照)。分岐セレクタは分岐セレクタマルチプレクサ94に与えられ、デコーダ104による選択制御に基づき分岐セレクタのうち1つが選択される。デコーダ104は、フェッチアドレスのオフセットを連続する命令バイトの群にデコードし、(たとえばある実施例では表76の「読出アドレス」行に従って)対応する分岐セレクタを選択する。たとえば、連続する命令バイトの群が16バイトであれば、デコーダ104はフェッチアドレスの下位4ビットをデコードする。この態様で、分岐セレクタが選択される。
【0079】
選択された分岐セレクタを用いて初期予測マルチプレクサ98および復帰セレクタマルチプレクサ93の選択制御を行なう。復帰セレクタは、マルチプレクサ94により与えられる分岐セレクタに基づき復帰セレクタビットのうち1つを選択する復帰セレクタマルチプレクサ93に与えられる。ある実施例では、分岐セレクタのエンコーディングを直接的にマルチプレクサ選択制御として用いることができる。他の実施例では、論理ブロックを分岐セレクタマルチプレクサ94とマルチプレクサ93および98との間に挿入してもよい。マルチプレクサ98は、分岐予測を、フェッチされている連続する命令バイトの群に対応する分岐予測記憶部90に記憶された複数の分岐予測、および、フェッチされている連続する命令バイトの群にシーケンシャルな連続する命令バイトの群のシーケンシャルアドレスから選択する。
【0080】
マルチプレクサ100は、マルチプレクサ98により与えられる分岐予測および復帰アドレススタックからの復帰アドレス間の選択を行なう。マルチプレクサ100はANDゲート97の出力により制御される。ANDゲート97は、マルチプレクサ94が与える分岐セレクタが非シーケンシャルでありかつ分岐セレクタに関連付けられる復帰セレクタビットが分岐セレクタが復帰命令と関連付けられていることを示す場合、マルチプレクサ100が復帰アドレスを選択するようにする。この実施例では、シーケンシャル分岐セレクタに対する分岐セレクタ値は「0」であり、復帰セレクタビットに関連する分岐予測が復帰命令に対応する場合、復帰セレクタビットがアサートされる。したがって、NORゲート95の出力は、分岐セレクタのいずれかのビットがアサートされた場合にアサートされ、ANDゲート97の出力は、NORゲート95の出力がアサートされマルチプレクサ93から与えられる復帰セレクタビットがアサートされた場合にアサートされる。この実施例では、マルチプレクサ100は、ANDゲート97の出力がアサートされた場合に復帰アドレスを選択する。
【0081】
復帰スタック構造(図示せず)を用いて、マイクロプロセッサ10が以前にフェッチしたサブルーチン呼出命令に対応する復帰アドレスを記憶する。ある実施例では、分岐予測記憶部90が記憶する分岐予測は、分岐予測がサブルーチン呼出命令に対応するという表示を含む。サブルーチン呼出命令は、命令ストリームをサブルーチン呼出命令のターゲットアドレスにリダイレクトすることに加えて、シーケンシャル命令のアドレス(復帰アドレス)を保存する、分岐命令のサブセットである。たとえば、x86マイクロプロセッサアーキテクチャでは、サブルーチン呼出命令(CALL)は、復帰アドレスをESPレジスタで示されるスタック上にプッシュする。
【0082】
サブルーチン復帰命令は、分岐命令の別のサブセットである。サブルーチン復帰命令は、最も最近に実行されたサブルーチン呼出命令により保存された復帰アドレスをターゲットアドレスとして用いる。したがって、分岐予測が、その分岐予測がサブルーチン呼出命令に対応するという表示を含む場合、サブルーチン呼出命令に対しシーケンシャルなアドレスが復帰スタックのトップに置かれる。サブルーチン復帰命令が存在すると(特定の分岐セレクタエンコーディングにより示される)、復帰スタックのトップに最も近く以前に予測として用いられていないアドレスをアドレスの予測として用いる。予測として以前に用いられていない、復帰スタックのトップに最も近いアドレスは、(ウェイ選択バス108の上に与えた場合と同様復帰スタックに与えられる復帰アドレスの予測されたウェイとともに)復帰スタックにより復帰アドレスバス112上に運ばれる。分岐予測ユニット14は、復帰アドレスがいつ予測として選択されたかを復帰スタックに知らせる。復帰スタック構造の例に関するさらなる詳細は、同一譲受人に譲渡される同時係属中の特許出願、1995年10月30日出願の、Mahalingaiah他による「スーパースカラマイクロプロセッサのための投機的復帰アドレス予測ユニット(Speculative Return Address Prediction Unit for Superscalar Microprocessor)」と題された出願第08/550,296号に示されている。
【0083】
シーケンシャルアドレスは命令キャッシュ16により与えられる。シーケンシャルアドレスは、フェッチアドレスバス106上のフェッチアドレスにより示される命令バイトの群の次の、メインメモリ内の連続する命令バイトの群を特定する。なお、ある実施例に従うと、ウェイ予測は、シーケンシャルアドレスが選択されるとシーケンシャルアドレスに対し与えられる。ウェイ予測は、フェッチアドレスのために選択されたウェイと同じになるように選択される。その代わりとして、シーケンシャルアドレスのためのウェイ予測を分岐予測記憶部90に記憶してもよい。
【0084】
上記のように、更新論理ブロック102は、分岐予測誤りの検出に際しまたは分岐命令の検出に際し分岐予測エントリを更新し、一方でプリフェッチ/プリデコードユニット12において対応する連続する命令バイトの群をプリデコードするように構成される。各分岐予測に対応する分岐予測エントリを、予測が実行される際に更新論理ブロック102に記憶してもよい。分岐タグは、(分岐タグバス122を介して)フェッチされている命令とともに運ばれるので、プリデコード中に予測誤りが検出されるかまたは分岐命令が検出されれば、対応する分岐予測エントリを分岐タグを介して特定できる。ある実施例では、図12に示したような分岐予測エントリが記憶され、分岐予測エントリのフェッチを引起こしたフェッチアドレスのインデックスおよび分岐予測エントリが記憶されたウェイも記憶される。
【0085】
分岐予測誤りが検出されたとき、対応する分岐タグが、分岐命令を実行する機能ユニット24からまたはデコードユニット20から予測誤りバス118に与えられる。デコードユニット20が分岐タグを与える場合、予測誤りは以前に検出されなかったタイプのものである(たとえば群内には対応する分岐予測を用いて予測できるものよりも多い分岐命令がある)。デコードユニット20は、無条件分岐命令(すなわち常にターゲットアドレスを選択する分岐命令)の予測誤りを検出する。機能ユニット24は、以前に検出されなかった条件付き分岐命令による、または誤ったテイクン/ノットテイクン予測による予測誤りを検出し得る。更新論理102は上記の記憶部から対応する分岐予測エントリを選択する。以前に検出されなかった分岐命令の場合、分岐予測エントリ内の分岐予測のうち1つが、以前に検出されなかった分岐命令に割当てられる。ある実施例に従うと、分岐予測のうち1つを選択して以前に検出されなかった分岐命令に対しその分岐予測を記憶するアルゴリズムは以下のとおりである。分岐命令がサブルーチン復帰命令の場合、その命令に対する分岐セレクタを復帰スタックを示す値となるように選択する。それ以外は、現在ノットテイクンと予測されている分岐予測を選択する。各分岐命令が現在テイクンと予測されている場合、分岐予測はランダムに選択される。
【0086】
新たに検出された分岐命令のための分岐セレクタをセットして、選択された分岐予測を示す。さらに、新たに検出された分岐命令に先行する第1の分岐命令と新たに検出された分岐命令との間のバイト範囲に対応する分岐セレクタが、新たな予測に対応する分岐セレクタとしてセットされる。以下の図15は、分岐セレクタを更新するための1つの方法を示す。予測をノットテイクン予測にする、予測誤りのあったテイクン予測については、誤予測された予測に対応する分岐セレクタが、誤予測された分岐命令に続くバイトに対応する分岐セレクタとしてセットされる。この態様で、命令が再び後のクロックサイクルで再びフェッチされる場合、後続の分岐命令に対する予測が用いられるであろう。
【0087】
プリフェッチ/プリデコードユニット12が、分岐命令を検出する一方で連続する命令バイトの群をプリデコードしているとき、プリフェッチ/プリデコードユニット12は、無効なプリデコード情報がキャッシュラインに対し命令キャッシュに記憶されているのでプリデコードが実行される場合に連続する命令バイトの群に対し分岐タグを与える(例(i))。その代わりに、プリデコードが、メインメモリサブシステムからフェッチされているキャッシュライン上で行なわれているとき、プリフェッチ/プリデコードユニット12は、プリデコードされている連続命令バイトの群のアドレス、群内の分岐命令のエンドバイトのオフセット、および群を記憶するために選択される命令キャッシュのウェイを与える(例(ii))。例(i)の場合、更新は、上記の分岐予測誤りの場合と同様に行なわれる。例(ii)の場合、命令の群について分岐予測記憶部90に記憶された有効分岐予測エントリはまだない。この場合、更新論理ブロック102は、検出された分岐に先行する分岐セレクタを検出された分岐のために選択される分岐セレクタに初期化する。さらに、検出された分岐に続く分岐セレクタがシーケンシャル値に初期化される。その代わりとして、命令キャッシュ16内の対応するキャッシュラインが割当てられるときに各分岐セレクタをシーケンシャルに初期化してもよく、例(i)と同様のやり方でプリデコード中に分岐命令の検出によって後に更新してもよい。
【0088】
更新の発生時、更新論理ブロック102は更新された分岐予測エントリをフェッチアドレスインデックスおよび対応するウェイとともに更新バス116上に与え、これらは分岐予測記憶部90に記憶される。なお、分岐予測記憶部90は単一ポートの記憶部を維持するために分岐保持レジスタを用いることができる。更新された予測情報は分岐保持レジスタに記憶され、フェッチアドレスバス106上のアイドルサイクル時に分岐予測記憶部に更新される。キャッシュ保持レジスタ構造の例が、同一譲受人に譲渡される、同時係属中の、Tran他による、1995年6月7日出願の、「アレイのための遅延更新レジスタ(Delayed Update Register for an Array)」と題された特許出願第08/481,914号に記載されている。
【0089】
なお、分岐命令が正しく予測されると、対応する分岐予測も更新される。以前の分岐命令実行を示すカウンタ(分岐命令のテイクン/ノットテイクン予測を形成するのに用いる)はたとえば増分または減分が必要かもしれない。このような更新は対応する分岐予測のリタイアに際して行なわれる。リタイアはリオーダバッファ32からのリタイアタグバス124上の分岐タグを介して示される。
【0090】
なお、図11の構造を予測された分岐セレクタを用いてさらに加速してもよい。予測された分岐セレクタは、各分岐予測エントリとともに記憶され、連続する命令バイトの対応する群の前のフェッチにおいて選択された分岐セレクタとしてセットされる。予測された分岐セレクタを用いて分岐予測を選択し、分岐セレクタマルチプレクサ94を分岐予測生成経路から取除く。しかしながら、分岐セレクタマルチプレクサ94をなおも使用して、選択された分岐セレクタが予測された分岐セレクタと等しいことを確認する。選択された分岐セレクタおよび予測された分岐セレクタが等しくなければ、選択された分岐セレクタを用いて後続のクロックサイクル中に正しい分岐予測を与え、誤った分岐予測のフェッチはキャンセルされる。
【0091】
次に図12を参照して、図10に示した分岐予測ユニット14のある実施例が用いる分岐予測エントリ130の例が示される。分岐予測エントリ130は、1組の分岐セレクタ136、1組の復帰セレクタ137、第1の分岐予測(BP1)131、第2の分岐予測(BP2)132、および第3の分岐予測(BP3)134を含む。1組の分岐セレクタ136は、分岐予測エントリ130に対応する連続する命令バイトの群の各バイト範囲に対する分岐セレクタを含む。ある実施例では、1組の復帰セレクタ136は、各非シーケンシャル分岐セレクタに対し1つのビットを含む。
【0092】
第2の分岐予測132を図12の分解図に示す。他の分岐予測を同様に構成することができる。第2の分岐予測132は、ターゲットアドレスに対応する命令バイトを含むキャッシュラインのためのインデックス140、およびキャッシュラインのためのウェイ選択144を含む。ある実施例に従うと、インデックス140はターゲットアドレスのオフセット部分およびインデックスを含む。インデックス140はウェイ選択144が示すウェイのタグと連結されて分岐ターゲットアドレスを形成する。その代わりに、全分岐ターゲットアドレスをインデックスフィールド140に記憶してもよい。ウェイ予測が全分岐ターゲットアドレスに加えて与えられてもよく、またはウェイ選択が命令キャッシュ16の指示された行内のタグに対するタグ比較を用いて行なわれてもよい。
【0093】
さらに、予測子146が各分岐予測について記憶される。予測子146は、対応する分岐命令が実行されテイクンであるごとに増分され、対応する分岐命令が実行されノットテイクンであるごとに減分される。予測子146の最上位ビットをテイクン/ノットテイクン予測として用いる。最上位ビットがセットされていれば、分岐命令はテイクンであると予測される。逆に、分岐命令は、最上位ビットがクリアされていればノットテイクンであると予測される。ある実施例では、予測カウンタは2ビットの飽和カウンタである。カウンタはバイナリ「11」で増分されると飽和し、バイナリ「01」で減分されると飽和する。別の実施例では、予測子は、強い(バイナリ1)または弱い(バイナリ0)テイクン予測であることを示す単一ビットである。強いテイクン予測が誤予測されれば、弱いテイクン予測になる。弱いテイクン予測が誤予測されれば、分岐はノットテイクンであると予測され分岐セレクタが更新される(すなわち誤予測されてノットテイクンになる分岐の場合)。最後に、呼出ビット148は第1の分岐予測132に含まれる。呼出ビット148がセットされていると、対応する分岐命令がサブルーチン呼出命令であることを示す。呼出ビット148がセットされていれば、現在のフェッチアドレスおよびウェイは上記の復帰スタック構造に記憶される。
【0094】
次に図13を参照して、分岐および復帰セレクタエンコーディングの例を表わす表138が示される。表138は、復帰セレクタエンコーディングおよび分岐エンコーディングに基づく分岐予測のタイプを示す。分岐セレクタエンコーディングは、最上位ビットが最初であるバイナリエンコーディングである。復帰セレクタエンコーディングは、最上位ビットが最初であるバイナリエンコーディングである。「X」はドントケアビットを示す。たとえば、分岐選択エンコーディングが「00」であれば、分岐予測は復帰セレクタビットの状態にかかわらずシーケンシャルである。分岐選択エンコーディングが「01」であれば、最下位復帰セレクタビットがアサートされれば分岐予測は復帰である。その代わりに、復帰セレクタの最下位ビットがデアサートされれば、分岐予測は非復帰分岐ターゲットである。同様に、分岐セレクタ値が「01」であれば、第2の最上位復帰セレクタビットは、分岐予測が復帰なのかまたは非復帰分岐ターゲットかを示す。同様に、分岐セレクタ値が「11」であれば、最上位復帰セレクタビットは分岐予測が復帰なのかまたは非復帰分岐ターゲットなのかを示す。
【0095】
次に図14を参照して、図4および5に規定したバイト範囲に従い命令キャッシュ16からフェッチされる連続する命令バイトの群に対する有効マスクの生成を表わすフローチャートが示される。有効マスクは、群内の各命令バイトにつき1つのビットを含み、このバイトが予測された命令ストリームの一部かどうかを示す。マスク内の有効ビットは、フェッチアドレスのオフセット部分により選択されたバイトと、選択された分岐予測により予測されている分岐命令との間にセットされる。これらのバイトは、命令キャッシュ16から読出した連続する命令バイトの群からフェッチしている命令を含む。フェッチアドレスのオフセットに先行するバイトはフェッチされず、テイクン予測された分岐命令に続くバイトもフェッチされない。分岐命令のエンドはほぼ対応する分岐セレクタの最後の発生により位置づけられる。しかしながら、分岐命令がバイト範囲内で終わる場合には分岐命令の最後のバイトをカバーするように調整を行なってもよい。
【0096】
現在の分岐セレクタ(すなわちフェッチアドレスのデコードにより分岐予測ユニット14によって選択される分岐セレクタ)は、連続する命令バイトの群に対応する分岐セレクタで排他的NORされ(ステップ150)、バイト範囲1つにつき1つのビットを含む予備マスクを作成する。現在の分岐セレクタに等しい分岐セレクタに対応する各バイト範囲は、予備マスク内のセットされたビットにより表わされ、現在の分岐セレクタと異なる分岐セレクタを含むバイト範囲は予備マスク内のクリアされたビットにより表わされる。第1のマスクは、2つ以上のバイト(すなわちこの実施例では2バイト)を有するバイト範囲に対応する予備マスクにおける各ビットを複製することにより、予備マスクから作成される(ステップ152)。一般的に、ビットは、バイト範囲を表わすビットの総数がバイト範囲内のバイト数と等しくなるまでコピーされる。さらに、第2のマスクが第1のマスクを右側にシフトすることによって作成される(ステップ154)。
【0097】
テイクン予測された分岐命令が(バイト範囲のエンドではなく)バイト範囲内で終わる場合、有効マスクが、第1のマスクおよび第2のマスクの論理和をとることにより作成される(判断ブロック156およびステップ158)。この態様で、分岐命令が終了するバイト範囲内にあり分岐命令の一部であるバイトの有効が確認される。一方、分岐命令がバイト範囲のエンドで終わるのであれば、そのバイト範囲に対する分岐セレクタは分岐命令を示す。この場合、第1のマスクは第2のマスクを用いて修正しなくても正しい。したがって、第1のマスクが有効マスクとして選択される(ステップ160)。
【0098】
次に図15を参照して、誤って予測された分岐命令に応答して連続する命令バイトの群の分岐セレクタを更新するために用いるステップを表わすフローチャートが示される。プリデコード中に発見された分岐命令による更新もまた同様に行なわれる。予測誤りは、予測情報が分岐予測記憶部90に記憶されていない分岐命令を検出した結果であるか、または対応する予測子がノットテイクンを示すようにする誤ったテイクン/ノットテイクン予測の結果である。
【0099】
予測誤りの検出後、分岐予測ユニット14は「エンドポインタ」を用いる。これは、連続する命令バイトの対応する群内の誤って予測された分岐命令のエンドバイトのオフセットである。さらに、分岐予測エントリを選択して予測誤りに応答して受取った分岐タグを用いて更新を行なう。分岐予測ユニット14はエンドポインタを更新マスクにデコードする(ステップ170)。更新マスクは、連続する命令バイトの群内の各バイト範囲に対し1ビットを含む。分岐命令のエンドバイトを含むバイト範囲に先行するバイト範囲に対応するビットがセットされ(かつエンドバイトがバイト範囲内の最後のバイトの場合は、分岐命令のエンドバイトを含むバイト範囲に対応するビットがセットされる)、残余のビットがクリアされる。したがって、更新マスクは、分岐命令に先行し分岐命令を含むバイト範囲各々を特定する。
【0100】
分岐予測ユニット14は現在の分岐セレクタを特定する。誤って予測したテイクン/ノットテイクン予測の場合、現在の分岐セレクタは誤って予測した分岐命令に対応する分岐セレクタである。分岐が検出されなかったことによる予測誤りについては、現在の分岐セレクタは、検出されなかった分岐命令のエンドバイトを含むバイト範囲に対応する分岐セレクタである。現在の分岐セレクタは各分岐セレクタを用いて排他的NORが行なわれて分岐マスクが作成される(ステップ172)。分岐マスクは、現在の分岐セレクタに適合する分岐セレクタを有する各バイト範囲に対してセットされたビット、および、現在の分岐セレクタに適合しない分岐セレクタを有する各バイト範囲に対してクリアされたビットを含む。
【0101】
ステップ170で作成された更新マスクおよびステップ172で作成された分岐マスクについては後で論理積が行なわれ、最終更新マスクが生成される(ステップ174)。最終更新マスクは、新規の分岐セレクタに更新すべき連続する命令バイトの群の各バイト範囲のためにセットされるビットを含む。誤ってテイクン予測された分岐については、新規の分岐セレクタは、誤ってテイクン予測された分岐命令に続くバイト範囲の分岐セレクタである。検出されなかった分岐については、新規の分岐セレクタは、更新論理ブロック102により以前に検出されなかった分岐に割当てられる分岐予測記憶部を示す分岐セレクタである。
【0102】
拡張されたマスクも生成される(ステップ176および178)。拡張マスクは、分岐セレクタに対応する分岐予測が新たに発見された分岐命令に割当て直されているため、または分岐予測が今ノットテイクンを示しているため消去すべき分岐セレクタがどれなのかを示す。拡張マスクは、最初に、現在の分岐セレクタの代わりに新規の分岐セレクタを用いることを除き分岐マスクと同様に第2の分岐マスクを作成することによって生成される(すなわちこのマスクは新規の分岐セレクタを用いて連続命令バイトの群に対応する分岐セレクタの排他的NORを行なうことにより作成される(ステップ176))。結果として得られたマスクはその後、最終更新マスクの反転に対して論理積が行なわれ、拡張マスクが作成される(ステップ178)。拡張マスク内のセットされたビットに対応する分岐セレクタが更新され、最終バイト範囲の直後のバイト範囲の分岐セレクタであって、それに対する拡張マスク内のビットがセットされているものを示す。この態様で、以前に分岐セレクタが示した分岐予測は消去され、次の分岐セレクタと交換される。ステップ180の間に分岐セレクタは最終更新マスクおよび拡張マスクに応答して更新される。
【0103】
次に図16を参照して、マイクロプロセッサ10を含むコンピュータシステム200が示される。コンピュータシステム200はさらに、バスブリッジ202、メインメモリ204、および複数の入力/出力(I/O)装置206A−206Nを含む。複数のI/O装置206A−206NはまとめてI/O装置206と呼ばれる。マイクロプロセッサ10、バスブリッジ202およびメインメモリ204はシステムバス208に結合される。I/O装置206はバスブリッジ202との通信のためにI/Oバス210に結合される。
【0104】
バスブリッジ202は、I/O装置206とシステムバス208に結合された装置間の通信を補助するために設けられる。I/O装置206は典型的にはマイクロプロセッサ10およびシステムバス208に結合された他の装置よりも長いバスクロックサイクルを必要とする。したがって、バスブリッジ202は、システムバス208と入/出力バス210との間にバッファを与える。さらに、バスブリッジ202は、トランザクションを1つのバスプロトコルから別のバスプロトコルに変換する。ある実施例では、入出力バス210はEISA(Enhanced Industry Standard Architecture)バスであり、バスブリッジ202はシステムバスプロトコルをEISAバスプロトコルに変換する。他の実施例では、入出力バス210はPCI(Peripheral Component Interconnect)バスであり、バスブリッジ202はシステムバスプロトコルをPCIバスプロトコルに変換する。なお、システムバスプロトコルには多くの変形例がある。マイクロプロセッサ10は適切であればどんなシステムバスプロトコルを用いてもよい。
【0105】
I/O装置206は、コンピュータシステム200とコンピュータシステム外部の他の装置との間にインターフェイスを与える。I/O装置の例は、モデム、シリアルまたはパラレルポート、サウンドカードなどを含む。I/O装置206を周辺装置と呼ぶこともできる。メインメモリ204はマイクロプロセッサ10が使用するためのデータおよび命令を記憶する。ある実施例では、メインメモリ204は少なくとも1つのダイナミック・ランダム・アクセス・メモリ(DRAM)およびDRAMメモリコントローラを含む。
【0106】
なお、図17に示すようなコンピュータシステム200は1つのバスブリッジ202を含むが、コンピュータシステム200の他の実施例では複数の異なるまたは同様のI/Oバスプロトコルへの変換のために複数のバスブリッジ202を含んでもよい。さらに、コンピュータシステム200の性能を、マイクロプロセッサ10が参照する命令およびデータをより高速のメモリ記憶部に記憶することによって向上させるキャッシュメモリを含んでもよい。キャッシュメモリは、マイクロプロセッサ10とシステムバス208との間に挿入することができ、または「ルックアサイド」構成でシステムバス208の上に設けることもできる。なおさらに、バスブリッジ202、メインメモリ204およびキャッシュメモリの機能を、マイクロプロセッサ10へのインターフェイスとなるチップセットに統合してもよい。
【0107】
さらに、この明細書の説明での種々の信号のアサートについて述べる。本明細書では、信号は、特定の条件を示す値を伝達するとき「アサートされる」と言う。逆にもし信号が特定の条件がないことを示す値を伝達するのであればその信号は「デアサートされる」と言う。信号は、その信号が論理値0を伝達するとき、または、逆にその信号が論理値1を伝達するとき、アサートされると定義してもよい。さらに、上記の説明では種々の値が廃棄されると説明されている。ある値は多数の態様で廃棄され得るが、一般には、その値を変形してそれを受ける論理回路がその値を無視するような値にすることを含む。たとえば、その値がビットを含む場合、その値の論理状態を反転してその値を廃棄することができる。その値がnビット値の場合、nビットエンコーディングのうち1つがその値の無効を示すようにしてもよい。値を無効のエンコーディングにセットすることによりその値は廃棄される。さらに、nビット値は、セットされたときにnビット値が有効であることを示す有効ビットを含んでもよい。有効ビットのリセットはその値の廃棄を構成し得る。ある値を廃棄するために他の方法を用いてもよい。
【0108】
以下の表1は、x86命令セットを用いるマイクロプロセッサ10のある実施例についてのファストパス、二重ディスパッチおよびMROM命令を示す。
【0109】
【表1】
【0110】
【表2】
【0111】
【表3】
【0112】
【表4】
【0113】
なお、分岐セレクタを用いる分岐予測機構の他の局面が、以下の同時係属中の同一譲受人に譲渡される特許出願、すなわち1996年11月19日出願の、Tranによる、出願番号第08/752,691号「分岐セレクタを用いて分岐予測を選択する分岐予測機構(Branch Prediction Mechanism Employing Branch Selectors to Select a Branch Prediction)」および1997年10月24日出願の、Tranによる、出願番号第08/957,596号「分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲と関連付けられた分岐セレクタ(Branch Selectors Associated with Byte Ranges within an Instruction Cache for Rapidly Identifying Branch Predictions)」に示されている。
【0114】
当業者であれば上記の開示を十分に理解すれば種々の変形例および修正例が明らかになるであろう。前傾の特許請求の範囲に規定されたこの発明の範囲に属する、こうした変形例および修正例すべてを含むことを意図している。
【図面の簡単な説明】
【図1】 スーパースカラマイクロプロセッサのある実施例のブロック図である。
【図2】 図1に示した一対のデコードユニットのある実施例のブロック図である。
【図3】 連続する命令バイトの群ならびに対応する分岐セレクタおよび復帰セレクタの組の図である。
【図4】 図1に示したマイクロプロセッサのための分岐予測機構のある実施例に従う、連続する命令バイトの群ならびに対応する分岐セレクタおよび復帰セレクタの組のブロック図である。
【図5】 連続する命令バイトの組内のバイト範囲のある実施例を示す表である。
【図6】 命令の第1の組の例のための分岐セレクタの第1の例である。
【図7】 命令の第2の組の例のための分岐セレクタの第2の例である。
【図8】 命令の第3の組の例のための分岐セレクタの第3の例である。
【図9】 命令の第4の組の例のための分岐セレクタの第4の例である。
【図10A】 この発明のある実施例に従う典型的な命令の組のための分岐セレクタおよび復帰セレクタの組の例である。
【図10B】 この発明のある実施例に従う典型的な命令の組のための分岐セレクタおよび復帰セレクタの組の例である。
【図10C】 この発明のある実施例に従う典型的な命令の組のための分岐セレクタおよび復帰セレクタの組の例である。
【図11】 この発明のある実施例に従う分岐予測ユニットの一部のブロック図である。
【図12】 連続する命令バイトの群に対応する分岐予測記憶部エントリのある実施例のブロック図である。
【図13】 図1に示した分岐予測ユニットのある実施例のための分岐セレクタおよび復帰セレクタの例を示す表である。
【図14】 図1に示したマイクロプロセッサのある実施例に従うマスク生成を示すフローチャートである。
【図15】 分岐セレクタ更新のある実施例を示すフローチャートである。
【図16】 図1に示したマイクロプロセッサに従うコンピュータシステムのある実施例のブロック図である。
Claims (22)
- 分岐予測装置であって、
命令キャッシュからフェッチされる連続する命令バイトの群に対応するフェッチアドレスを受けるように結合された分岐予測記憶部を含み、前記分岐予測記憶部は、複数の分岐セレクタおよび第1の復帰セレクタを記憶するように構成され、前記複数の分岐セレクタのうちの第1の分岐セレクタは、前記連続する命令バイトの群内の第1の命令に対応し、前記第1の復帰セレクタは、前記複数の分岐セレクタのうちの前記第1の分岐セレクタに対応し、前記複数の分岐セレクタのうちの前記第1の分岐セレクタは、前記第1の復帰セレクタの第1の状態の検出に応答する第1のカテゴリの分岐予測に対応し、前記複数の分岐セレクタのうちの前記第1の分岐セレクタは、前記第1の復帰セレクタの第2の状態の検出に応答する第2のカテゴリの分岐予測に対応し、前記複数の分岐セレクタのうちの前記第1の分岐セレクタおよび前記第1の復帰セレクタは、フェッチされる前記第1の命令に応答して選択すべき第1の分岐予測を特定し、前記分岐予測装置はさらに、
前記分岐予測記憶部に結合された選択機構を含み、前記選択機構は、前記複数の分岐セレクタおよび前記第1の復帰セレクタを受けるように構成され、前記選択機構は、前記フェッチアドレスの複数の最下位ビットに応答して前記複数の分岐セレクタのうち前記第1の分岐セレクタを選択し、かつ、前記複数の分岐セレクタのうちの前記第1の分岐セレクタおよび前記第1の復帰セレクタに応答して前記第1の分岐予測を選択するように、構成される、分岐予測装置。 - 前記連続する命令バイトの群は、前記命令キャッシュのキャッシュラインの一部を含む、請求項1に記載の分岐予測装置。
- 前記キャッシュラインの前記一部は、前記キャッシュラインの2分の1を含む、請求項2に記載の分岐予測装置。
- 前記第1の分岐予測は、前記分岐予測記憶部に記憶された複数の分岐予測のうち1つを含み、前記複数の分岐予測は、前記連続する命令バイトの群に対応する、請求項1に記載の分岐予測装置。
- 前記複数の分岐セレクタのうちの前記第1の分岐セレクタは、シーケンシャルアドレスを前記第1の分岐予測として特定する、請求項4に記載の分岐予測装置。
- 前記複数の分岐セレクタのうちの前記第1の分岐セレクタは、非シー
ケンシャルアドレスを前記第1の分岐予測として特定する、請求項4に記載の分岐予測装置。 - 前記第1のカテゴリの分岐予測は、非復帰分岐命令のターゲットアドレスを含み、前記第2のカテゴリの分岐予測は、復帰スタックアドレスを含む、請求項1に記載の分岐予測装置。
- 前記第1の復帰セレクタの前記第1の状態は、前記第1の復帰セレクタの第1の値に対応し、前記第1の復帰セレクタの前記第2の状態は、前記第1の復帰セレクタの第2の値に対応する、請求項7に記載の分岐予測装置。
- 前記複数の分岐セレクタのうちの第2の分岐セレクタは、前記連続する命令バイトの群内の第2の命令に対応し、第2の復帰セレクタは、前記複数の分岐セレクタのうちの前記第2の分岐セレクタに対応し、前記複数の分岐セレクタのうちの前記第2の分岐セレクタは、前記第2の復帰セレクタの第1の状態の検出に応答する前記第1のカテゴリの分岐予測に対応し、前記複数の分岐セレクタのうちの前記第2の分岐セレクタは、前記第2の復帰セレクタの第2の状態の検出に応答する前記第2のカテゴリの分岐予測に対応し、前記複数の分岐セレクタのうちの前記第2の分岐セレクタおよび前記第2の復帰セレクタは、フェッチされる前記第2の命令に応答して選択すべき第2の分岐予測を特定する、請求項1に記載の分岐予測装置。
- 前記連続する命令バイトの群は、第1の複数の命令を含み、前記第1の複数の命令は、前記第1の命令および第1の分岐命令を含み、前記連続する命令バイトの群は、第2の複数の命令を含み、前記第2の複数の命令は、第2の分岐命令を含み、前記複数の分岐セレクタのうちの前記第1の分岐セレクタおよび前記第1の復帰セレクタは、前記第1の複数の命令に対応し、前記複数の分岐セレクタのうちの第2の分岐セレクタおよび第2の復帰セレクタは、前記第2の複数の命令に対応する、請求項1に記載の分岐予測装置。
- 前記連続する命令バイトの群は、第3の複数の命令を含み、前記複数の分岐セレクタのうちの第3の分岐セレクタは、前記第3の複数の命令に対応し、前記複数の分岐セレクタのうちの前記第3の分岐セレクタは、シーケンシャルアドレスを特定する、請求項10に記載の分岐予測装置。
- 複数の命令を含む連続する命令バイトの群に対応する分岐予測を選択する方法であって、
複数の分岐セレクタを分岐予測記憶部に記憶するステップを含み、前記複数の分岐セレクタのうちの1つの分岐セレクタは、前記複数の命令のうちの第1の命令に対応し、前記方法はさらに、
復帰セレクタを前記分岐予測記憶部に記憶するステップを含み、前記復帰セレクタは、前記複数の分岐セレクタのうちの前記1つの分岐セレクタに対応し、前記複数の分岐セレクタのうちの前記1つの分岐セレクタは、前記復帰セレクタの第1の状態の検出に応答する第1のカテゴリの分岐予測に対応し、前記複数の分岐セレクタのうちの前記1つの分岐セレクタは、前記復帰セレクタの第2の状態の検出に応答する第2のカテゴリの分岐予測に対応し、前記複数の分岐セレクタのうちの前記1つの分岐セレクタおよび前記復帰セレクタは、フェッチされる前記複数の命令に応答して選択すべき前記分岐予測を特定し、前記方法はさらに、
前記連続する命令バイトの群を特定するフェッチアドレスを用いて前記連続する命令バイトの群をフェッチし前記複数の分岐セレクタおよび前記復帰セレクタをフェッチするステップと、
前記フェッチアドレスに応答して前記複数の分岐セレクタのうちの前記1つの分岐セレクタを選択するステップと、
前記複数の分岐セレクタのうちの前記1つの分岐セレクタおよび前記復帰セレクタに応答して前記分岐予測を選択するステップとを含む、分岐予測を選択する方法。 - 前記分岐予測は、前記分岐予測記憶部に記憶された複数の分岐予測のうち1つを含み、前記複数の分岐予測は、前記連続する命令バイトの群に対応する、請
求項12に記載の方法。 - 分岐予測誤りに応答して前記複数の分岐予測を更新するステップをさらに含む、請求項13に記載の方法。
- 前記更新するステップは、前記分岐予測記憶部に記憶された前記複数の分岐予測のうち1つを、前記連続する命令バイトの群内の、過去に検出されなかった分岐命令に割当てるステップを含む、請求項14に記載の方法。
- 前記複数の分岐セレクタを更新して、前記過去に検出されなかった分岐命令を反映するステップをさらに含む、請求項15に記載の方法。
- 前記第1のカテゴリの分岐予測は、非復帰分岐命令のターゲットアドレスを含み、前記第2のカテゴリの分岐予測は、復帰スタックアドレスを含む、請求項12に記載の方法。
- 前記復帰セレクタの第1の状態は、前記復帰セレクタの第1の値に対応し、前記復帰セレクタの第2の状態は、前記復帰セレクタの第2の値に対応する、請求項17に記載の方法。
- 前記複数の分岐セレクタのうちの前記1つの分岐セレクタを選択する前記ステップは、前記フェッチアドレスの複数の最下位ビットをデコードするステップを含む、請求項12に記載の方法。
- 前記フェッチアドレスの前記複数の最下位ビットは、前記連続する命令バイトの群内のオフセットを含むので、前記連続する命令バイトの群の各々は、前記オフセットの異なる値を用いて特定可能である、請求項19に記載の方法。
- マイクロプロセッサであって、
命令処理パイプラインと、
複数の連続する命令バイトを記憶し、現在のフェッチアドレスを受けると前記複数の連続する命令バイトの群を前記命令処理パイプラインに与えるように構成された命令キャッシュと、
前記命令キャッシュに結合された分岐予測部とを含み、前記分岐予測部は、前記現在のフェッチアドレスを受けるように結合された分岐予測記憶部を含み、前記分岐予測記憶部は、複数の分岐セレクタおよび復帰セレクタを記憶するように構成され、前記複数の分岐セレクタのうちの1つの分岐セレクタは、前記複数の連続する命令バイト内の第1の命令に対応し、前記復帰セレクタは、前記複数の分岐セレクタのうちの前記1つの分岐セレクタに対応し、前記複数の分岐セレクタのうちの前記1つの分岐セレクタは、前記復帰セレクタの第1の状態の検出に応答する第1のカテゴリの分岐予測に対応し、前記複数の分岐セレクタのうちの前記1つの分岐セレクタは、前記復帰セレクタの第2の状態の検出に応答する第2のカテゴリの分岐予測に対応し、前記複数の分岐セレクタのうちの前記1つの分岐セレクタおよび前記復帰セレクタは、フェッチされる前記第1の命令に応答して選択すべき分岐予測を特定し、前記分岐予測は次に続くフェッチアドレスを特定する、マイクロプロセッサ。 - 前記複数の分岐セレクタのうちの前記1つの分岐セレクタは、前記現在のフェッチアドレスの複数の最下位ビットをデコードすることにより選択される、請求項21に記載のマイクロプロセッサ。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/994,869 US6108774A (en) | 1997-12-19 | 1997-12-19 | Branch prediction with added selector bits to increase branch prediction capacity and flexibility with minimal added bits |
US08/994,869 | 1997-12-19 | ||
PCT/US1998/011987 WO1999032966A1 (en) | 1997-12-19 | 1998-06-10 | Branch prediction with return selection bits to categorize type of branch prediction |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2001527233A JP2001527233A (ja) | 2001-12-25 |
JP2001527233A5 JP2001527233A5 (ja) | 2006-01-05 |
JP3794918B2 true JP3794918B2 (ja) | 2006-07-12 |
Family
ID=25541164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000525808A Expired - Fee Related JP3794918B2 (ja) | 1997-12-19 | 1998-06-10 | 復帰選択ビットを用いて分岐予測のタイプを分類する分岐予測 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6108774A (ja) |
EP (1) | EP1049970B1 (ja) |
JP (1) | JP3794918B2 (ja) |
KR (1) | KR100603067B1 (ja) |
DE (1) | DE69841551D1 (ja) |
WO (1) | WO1999032966A1 (ja) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6219784B1 (en) * | 1997-11-17 | 2001-04-17 | Advanced Micro Devices, Inc. | Processor with N adders for parallel target addresses calculation |
US6286094B1 (en) | 1999-03-05 | 2001-09-04 | International Business Machines Corporation | Method and system for optimizing the fetching of dispatch groups in a superscalar processor |
US6425069B1 (en) | 1999-03-05 | 2002-07-23 | International Business Machines Corporation | Optimization of instruction stream execution that includes a VLIW dispatch group |
US6304959B1 (en) * | 1999-03-05 | 2001-10-16 | International Business Machines Corporation | Simplified method to generate BTAGs in a decode unit of a processing system |
US6442679B1 (en) * | 1999-08-17 | 2002-08-27 | Compaq Computer Technologies Group, L.P. | Apparatus and method for guard outcome prediction |
US6735689B1 (en) * | 2000-05-01 | 2004-05-11 | Raza Microelectronics, Inc. | Method and system for reducing taken branch penalty |
US20040250054A1 (en) * | 2003-06-09 | 2004-12-09 | Stark Jared W. | Line prediction using return prediction information |
US20050223203A1 (en) * | 2004-03-30 | 2005-10-06 | Gabriel Loh | Segmented branch predictor |
JP5145809B2 (ja) * | 2007-07-31 | 2013-02-20 | 日本電気株式会社 | 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム |
US8181005B2 (en) * | 2008-09-05 | 2012-05-15 | Advanced Micro Devices, Inc. | Hybrid branch prediction device with sparse and dense prediction caches |
US9213551B2 (en) | 2011-03-11 | 2015-12-15 | Oracle International Corporation | Return address prediction in multithreaded processors |
US10338928B2 (en) | 2011-05-20 | 2019-07-02 | Oracle International Corporation | Utilizing a stack head register with a call return stack for each instruction fetch |
US9489204B2 (en) | 2013-03-15 | 2016-11-08 | Qualcomm Incorporated | Method and apparatus for precalculating a direct branch partial target address during a misprediction correction process |
CN117369872A (zh) * | 2022-06-29 | 2024-01-09 | 中科寒武纪科技股份有限公司 | 指令执行方法、***控制器及相关产品 |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4179737A (en) * | 1977-12-23 | 1979-12-18 | Burroughs Corporation | Means and methods for providing greater speed and flexibility of microinstruction sequencing |
US4679141A (en) * | 1985-04-29 | 1987-07-07 | International Business Machines Corporation | Pageable branch history table |
US4860197A (en) * | 1987-07-31 | 1989-08-22 | Prime Computer, Inc. | Branch cache system with instruction boundary determination independent of parcel boundary |
US5142634A (en) * | 1989-02-03 | 1992-08-25 | Digital Equipment Corporation | Branch prediction |
JPH02287626A (ja) * | 1989-04-28 | 1990-11-27 | Toshiba Corp | パイプライン方式の分岐命令制御装置 |
US5235697A (en) * | 1990-06-29 | 1993-08-10 | Digital Equipment | Set prediction cache memory system using bits of the main memory address |
AU3776793A (en) * | 1992-02-27 | 1993-09-13 | Intel Corporation | Dynamic flow instruction cache memory |
US5418922A (en) * | 1992-04-30 | 1995-05-23 | International Business Machines Corporation | History table for set prediction for accessing a set associative cache |
EP0586057B1 (en) * | 1992-08-31 | 2000-03-01 | Sun Microsystems, Inc. | Rapid instruction (pre)fetching and dispatching using prior (pre)fetch predictive annotations |
US5367703A (en) * | 1993-01-08 | 1994-11-22 | International Business Machines Corporation | Method and system for enhanced branch history prediction accuracy in a superscalar processor system |
JP2744882B2 (ja) * | 1993-01-15 | 1998-04-28 | インターナショナル・ビジネス・マシーンズ・コーポレイション | キューにより命令の実行を制御する装置及び方法 |
US5454117A (en) * | 1993-08-25 | 1995-09-26 | Nexgen, Inc. | Configurable branch prediction for a processor performing speculative execution |
US5623614A (en) * | 1993-09-17 | 1997-04-22 | Advanced Micro Devices, Inc. | Branch prediction cache with multiple entries for returns having multiple callers |
JP3639927B2 (ja) * | 1993-10-04 | 2005-04-20 | 株式会社ルネサステクノロジ | データ処理装置 |
EP0649084A1 (en) * | 1993-10-18 | 1995-04-19 | Cyrix Corporation | Microprocessor branch processing |
US5574871A (en) * | 1994-01-04 | 1996-11-12 | Intel Corporation | Method and apparatus for implementing a set-associative branch target buffer |
US5592634A (en) * | 1994-05-16 | 1997-01-07 | Motorola Inc. | Zero-cycle multi-state branch cache prediction data processing system and method thereof |
US5758142A (en) * | 1994-05-31 | 1998-05-26 | Digital Equipment Corporation | Trainable apparatus for predicting instruction outcomes in pipelined processors |
US5559975A (en) * | 1994-06-01 | 1996-09-24 | Advanced Micro Devices, Inc. | Program counter update mechanism |
US5649137A (en) * | 1994-10-20 | 1997-07-15 | Advanced Micro Devices, Inc. | Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency |
JP3494736B2 (ja) * | 1995-02-27 | 2004-02-09 | 株式会社ルネサステクノロジ | 分岐先バッファを用いた分岐予測システム |
US5764946A (en) * | 1995-04-12 | 1998-06-09 | Advanced Micro Devices | Superscalar microprocessor employing a way prediction unit to predict the way of an instruction fetch address and to concurrently provide a branch prediction address corresponding to the fetch address |
US5649178A (en) * | 1995-06-07 | 1997-07-15 | International Business Machines, Corporation | Apparatus and method for storing and initializing branch prediction with selective information transfer |
US5822575A (en) * | 1996-09-12 | 1998-10-13 | Advanced Micro Devices, Inc. | Branch prediction storage for storing branch prediction information such that a corresponding tag may be routed with the branch instruction |
US5794028A (en) * | 1996-10-17 | 1998-08-11 | Advanced Micro Devices, Inc. | Shared branch prediction structure |
US5954816A (en) * | 1996-11-19 | 1999-09-21 | Advanced Micro Devices, Inc. | Branch selector prediction |
-
1997
- 1997-12-19 US US08/994,869 patent/US6108774A/en not_active Expired - Lifetime
-
1998
- 1998-06-10 JP JP2000525808A patent/JP3794918B2/ja not_active Expired - Fee Related
- 1998-06-10 WO PCT/US1998/011987 patent/WO1999032966A1/en active Search and Examination
- 1998-06-10 DE DE69841551T patent/DE69841551D1/de not_active Expired - Lifetime
- 1998-06-10 EP EP98930107A patent/EP1049970B1/en not_active Expired - Lifetime
- 1998-06-10 KR KR1020007006742A patent/KR100603067B1/ko not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
EP1049970B1 (en) | 2010-03-10 |
EP1049970A1 (en) | 2000-11-08 |
WO1999032966A1 (en) | 1999-07-01 |
KR100603067B1 (ko) | 2006-07-24 |
US6108774A (en) | 2000-08-22 |
DE69841551D1 (de) | 2010-04-22 |
KR20010033300A (ko) | 2001-04-25 |
JP2001527233A (ja) | 2001-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3794917B2 (ja) | 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ | |
US6154818A (en) | System and method of controlling access to privilege partitioned address space for a model specific register file | |
US6253316B1 (en) | Three state branch history using one bit in a branch prediction mechanism | |
US5822575A (en) | Branch prediction storage for storing branch prediction information such that a corresponding tag may be routed with the branch instruction | |
US6367006B1 (en) | Predecode buffer including buffer pointer indicating another buffer for predecoding | |
JP3803723B2 (ja) | 分岐予測を選択する分岐セレクタを採用する分岐予測機構 | |
US6502188B1 (en) | Dynamic classification of conditional branches in global history branch prediction | |
US6012125A (en) | Superscalar microprocessor including a decoded instruction cache configured to receive partially decoded instructions | |
JP2005500616A (ja) | 2レベルの分岐予測キャッシュによる分岐予測 | |
US5765016A (en) | Reorder buffer configured to store both speculative and committed register states | |
US6260134B1 (en) | Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte | |
JP2002508865A (ja) | 高周波数での命令ディスパッチのための二重命令キューを用いた命令アライメントユニット | |
US6516395B1 (en) | System and method for controlling access to a privilege-partitioned address space with a fixed set of attributes | |
US5954816A (en) | Branch selector prediction | |
JP3794918B2 (ja) | 復帰選択ビットを用いて分岐予測のタイプを分類する分岐予測 | |
US6202142B1 (en) | Microcode scan unit for scanning microcode instructions using predecode data | |
US6460132B1 (en) | Massively parallel instruction predecoding | |
US6212621B1 (en) | Method and system using tagged instructions to allow out-of-program-order instruction decoding | |
US5987235A (en) | Method and apparatus for predecoding variable byte length instructions for fast scanning of instructions | |
US5872943A (en) | Apparatus for aligning instructions using predecoded shift amounts | |
US5915110A (en) | Branch misprediction recovery in a reorder buffer having a future file | |
US5890006A (en) | Apparatus for extracting instruction specific bytes from an instruction | |
US6061775A (en) | Apparatus and method for predicting a first microcode instruction of a cache line and using predecode instruction data to identify instruction boundaries and types | |
JP2001522082A (ja) | より小さな数の分岐予測および代替ターゲットを用いて近似的により大きな数の分岐予測をすること | |
US6134650A (en) | Apparatus and method for predicting a first scanned instruction as microcode instruction prior to scanning predecode data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050607 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050607 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060322 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060411 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090421 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100421 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110421 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110421 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120421 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120421 Year of fee payment: 6 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120421 Year of fee payment: 6 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |