JP3871883B2 - 間接分岐ターゲットを計算するための方法 - Google Patents
間接分岐ターゲットを計算するための方法 Download PDFInfo
- Publication number
- JP3871883B2 JP3871883B2 JP2000571339A JP2000571339A JP3871883B2 JP 3871883 B2 JP3871883 B2 JP 3871883B2 JP 2000571339 A JP2000571339 A JP 2000571339A JP 2000571339 A JP2000571339 A JP 2000571339A JP 3871883 B2 JP3871883 B2 JP 3871883B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- address
- branch
- selector
- cache
- 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
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000004364 calculation method Methods 0.000 claims description 26
- 230000004044 response Effects 0.000 claims description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012795 verification 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
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30061—Multi-way branch instructions, e.g. CASE
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
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
【発明の背景】
1.技術分野
この発明は、マイクロプロセッサにおける分岐ターゲットアドレスを記憶することに関し、特に、間接分岐ターゲットアドレスをキャッシュするための方法に関する。
【0002】
2.背景技術
Sakamoto M et alによる、「スーパースカラプロセッサにおける分岐ペナルティを低減するためのマイクロアーキテクチャサポート」(“Microarchitecture Support for Reducing Branch Penalty in a Superscalar Processor”)と題する、1996年10月7日、オースティンにおける、コンピュータおよびプロセッサにおけるコンピュータ設計ICC VLSIに関する国際会議議事録(Proceedings of the International Conference on Computer Design. ICC VLSI in Computers and Processors)の第208から216頁は、動的分岐予測方式を実現し分岐履歴テーブルを有するマイクロプロセッサを開示する。分岐ターゲットバッファが、先に実行されたテイクンのジャンプ命令の結果を維持する。ジャンプ命令は、無条件ジャンプ命令、条件付き分岐命令および間接ジャンプ命令を含む。
Chang P-Y et alによる「間接ジャンプのためのターゲット予測」(“Target Prediction for Indirect Jumps”)と題する、コンピュータ・アーキテクチャ・ニュース(Computer Architecture News)、第25巻、第2号、1997年5月1日、第274頁から283頁は、間接ジャンプターゲットを予測するためにターゲットキャッシュを有する予測メカニズムを採用するスーパースカラプロセッサアーキテクチャを開示する。
WO 98/22873は、分岐予測を選択するために分岐選択子を採用する分岐予測メカニズムを開示する。分岐予測:シーケンシャル、リターンスタック、分岐予測1および分岐予測2のための分岐選択子が開示される。
今日のマイクロプロセッサ設計者は、絶えず製品の性能を向上させようとしている。マイクロプロセッサの性能を増大させる方法の1つは、それが動作するクロック周波数を増大させることである。しかしながら、クロック周波数が増大すると、マイクロプロセッサ内の各機能ユニットは、その指定されたタスクを行なうのにかかる時間が少なくなる。したがって、所与のクロック周波数で性能をさらに増大させるために他の方法が採用される。並列実行はそのような方法の1つである。並列実行は、各クロックサイクル中2つ以上の命令を実行することを伴う。並列実行を実現するために、多くのマイクロプロセッサは、各々が独立に並列して実行するよう構成された並列機能ユニットを用いる。
【0003】
所定のクロックサイクルでマイクロプロセッサの性能を増大させるための別の方法は、アウトオブオーダ実行である。たいていのプログラムは、特定の順序で実行する命令に依存する。しかしながら、プログラム内のある種の命令は、所望の機能がなお達成されるのであればプログラム順序を飛越して実行してもよい。アウトオブオーダで実行可能な命令は、そのまわりの命令に「依存」しない命令である。アウトオブオーダ実行を実現するマイクロプロセッサは、どの命令が他の命令に依存しないか、すなわちアウトオブオーダ実行が可能であるかを決定することができる。
【0004】
命令をアウトオブオーダで実行するのには、いくつかの潜在的な欠点がある。特に、欠点の1つは、分岐命令の使用である。分岐命令は、条件付きジャンプ命令(Jcc)、無条件ジャンプ命令(JMP)、リターン命令(RET)、およびサブルーチンコール命令(CALL)を含む。マイクロプロセッサは分岐命令後の命令が実行されるべきかどうかを決定できないことがあるので、これらの命令は、アウトオブオーダ実行を特に困難にする。
【0005】
所定のクロックサイクルでマイクロプロセッサの性能を増大させるのに使用される別の方法は、パイプライン化である。パイプライン化は、命令を実行するためにマイクロプロセッサが完了しなければならないタスクを分割することを伴う。タスクは、命令処理「パイプライン」を形成する複数のステージに分割される。ステージは、典型的には、一般的な連続処理形式になる。たとえば、第1のステージは、命令キャッシュに記憶された命令を「フェッチ」することかもしれないし、第2の段階は、命令を整列させ、それをデコードユニットに運んでデコードするか、または機能ユニットに運んで実行することかもしれない。パイプラインによって、命令の長いストリームが、より少ないクロックサイクルで実行されることが可能になる。パイプライン化されたマイクロプロセッサの利点は、一度に2つ以上の命令を処理する能力による。たとえば、第2の命令が命令キャッシュからフェッチされているのと同時に、第1の命令をデコードすることが可能である。
【0006】
しかしながら、アウトオブオーダ実行と同様、パイプライン化されたマイクロプロセッサにおいて、分岐命令の結果として性能が後退することがある。分岐命令はパイプラインを「ストール」させてしまうことがある、なぜなら、パイプライン処理は、分岐命令が実行されてしまう後までどの命令をフェッチするべきかを決定することができないからである。たとえば、条件付き分岐命令は、「テイクン」または「ノットテイクン」のいずれかである。分岐命令がノットテイクンであれば、プログラム順序で分岐命令のすぐ後に続く命令が実行される。代わりに、分岐命令がテイクンであれば、分岐ターゲットアドレス相対するあるオフセットの異なった命令が実行される。パイプライン化されたマイクロプロセッサにおいては、分岐命令が実行を完了するまで、パイプラインの初期ステージまたはフェッチステージにおいては、「テイクン」または「ノットテイクン」に従ったターゲット命令をフェッチするかどうかを決定するのが困難である。したがって、マイクロプロセッサのパイプライン処理は、初期ステージが分岐命令の結果を待つ間、ストールするか、または「バブル」(すなわち、パイプラインを介して伝搬するアイドルクロックサイクル)を形成してしまうことがある。
【0007】
パイプラインにおいてストールまたはバブルを形成するのを防ぐために、多くのプロセッサは、分岐予測方式を実現する。分岐予測は、分岐命令が実際に実行を完了する前に、各分岐命令がテイクンまたはノットテイクンのいずれであるかを予測することを伴う。複数の異なったアルゴリズムが使用され得るが、多くは、特定の分岐命令のテイクン/ノットテイクン履歴を記憶することに依存する。たとえば、分岐命令が実行されテイクンである場合、分岐予測ハードウェアは、その情報を記憶し、その結果、分岐命令が次にフェッチされるとき、パイプラインは、その先行のパフォーマンスに基づいて命令がテイクンであると自動的に推測するであろう。
【0008】
分岐予測情報を記憶することは、ストールまたはバブルの形成の確立を低減するが、それは不利益も有する。不利益の1つは、分岐履歴情報を維持し更新するのに必要とされる複雑なハードウェアである。第2の不利益は、分岐履歴情報を記憶するのに必要とされるスペースである。マイクロプロセッサのダイスペースは、比較的乏しい資源であるので、分岐予測を記憶するために多量のスペースを用いることは不利益である。命令キャッシュのサイズが大きくなると、そこにより多くの分岐命令を記憶することが可能である。これは代わりに、分岐履歴予測情報の記憶空間をより多く必要とする。さらに、現在のソフトウェアは、高集中の分岐命令(たとえば、4命令ごとに1つ)を有する傾向がある。この高集中は、いくつの分岐が命令キャッシュに記憶されるかを正確に知ることができないということと合わさって、典型的には、分岐履歴情報を記憶するのに充てられるダイスペースの量を多くしてしまう。
【0009】
これらの理由のために、分岐予測および履歴情報を効率的に記憶するための方法が所望される。特に、分岐履歴および予測情報のために必要とされる記憶空間の量を低減するための方法が特に望ましい。
【0010】
【発明の開示】
上述した課題は、この発明に従うマイクロプロセッサおよび分岐予測ユニットによって部分的に解決可能である。ある実施例では、分岐予測情報を効率的に記憶するよう構成されたマイクロプロセッサは、命令キャッシュおよび分岐予測ユニットを含み得る。分岐予測ユニットは、命令キャッシュに結合されてもよく、間接分岐ターゲットキャッシュ、直接分岐加算器、および分岐選択子アレイを含んでもよい。間接分岐ターゲットアレイは、間接分岐命令のための予測される分岐ターゲットアドレスを記憶するよう構成可能であり、直接分岐加算器は、直接分岐命令のための分岐ターゲットアドレスを計算するよう構成可能である。分岐選択子アレイは、間接分岐ターゲットキャッシュに結合されてもよく、複数個の選択子ビットを記憶するよう構成されてもよい。ある実施例では、選択子ビットは、命令キャッシュに記憶される特定の命令バイトに対応してもよい。選択子ビットは、特定の命令バイトと関連づけられる予測される次のフェッチアドレスのためのソースを示す。
【0011】
別の実施例では、分岐予測ユニットは、直接分岐加算器、間接分岐ターゲットキャッシュ、または別のソースのいずれかから予測される次のフェッチアドレスを選択するよう構成されるマルチプレクサをさらに含んでもよい。マルチプレクサは、現在のフェッチアドレスに対応する選択子ビットの値に基づいてその選択をするよう構成可能である。分岐予測ユニットは、マルチプレクサに結合されるシーケンシャルアドレス加算器も含んでよい。シーケンシャルアドレス加算器は、現在のフェッチアドレスの一部と、命令キャッシュのフェッチブロックまたはキャッシュラインサイズに対応する定数とを合計することにより、予測される次のシーケンシャルなフェッチアドレスを生成するよう構成可能である。コール命令のすぐ後に続く命令に対応するフェッチアドレスを記憶するために、リターンスタックを利用してもよい。
【0012】
マイクロプロセッサにおいて予測される次のフェッチアドレスを記憶するための方法も企図される。ある実施例では、方法は、間接分岐命令のための予測される分岐ターゲットアドレスを間接分岐ターゲットキャッシュに記憶することを含み得る。加えて、特定の命令バイトに対応する選択子ビットが、分岐選択子アレイに記憶される。直接分岐命令については、予測される直接分岐ターゲットアドレスは、「オンザフライ」で計算される。一旦、予測される間接分岐アドレスが参照され、予測される直接分岐アドレスが計算されると、予測される次のフェッチアドレスは選択子ビットに基づいて選択される。
【0013】
ある実施例では、プリデコードビットが、命令バイトとともに計算され記憶される。プリデコードビットは、予測される直接分岐ターゲットアドレスを計算するために使用されてもよく、これは、現在のフェッチアドレスからテイクンであると予測される第1の直接分岐命令への第1のオフセットを決定し、直接分岐命令内に即値データとして記憶される第2のオフセットを検出し、次に現在のフェッチアドレスと第1のオフセットと第2のオフセットとを合計することによって計算されてもよい。
【0014】
別の実施例では、予測されるシーケンシャルなアドレスは、現在のフェッチアドレスの一部を、命令キャッシュのキャッシュラインサイズまたはフェッチブロックサイズを表わす定数と合計することにより計算されてもよい。
【0015】
分岐予測情報を効率的に記憶するよう構成されるコンピュータシステムも企図される。ある実施例では、コンピュータシステムは、上述したようなマイクロプロセッサとバスブリッジとを含む。バスブリッジは、高速CPUバスを介してマイクロプロセッサに結合されてもよい。モデムなどの周辺装置がバスブリッジを介してマイクロプロセッサに結合されてもよい。別の実施例では、コンピュータシステムは、CPUバスを介して第1のマイクロプロセッサに結合される第2のマイクロプロセッサを含んでもよい。
【0016】
この発明の他の目的および利点は、添付の図面を参照し以下の詳細な説明を読むと明らかになるであろう。
【0017】
この発明は、さまざまな変形および代替の形を許すが、その具体的な実施例が図に例として示され、ここに詳細に記載される。しかしながら、図面およびその詳細な説明は、この発明を開示される特定の形に制限するものではなく、反対に、その意図は、前掲の特許請求の範囲によって定義されるこの発明の精神および範囲内にあるすべての変形、等価および代替を含むものであることが理解される。
【0018】
【発明を実施する態様】
ここで図1を参照して、例のマイクロプロセッサ10のある実施例のブロック図が示される。マイクロプロセッサ10は、プリフェッチ/プリデコードユニット12と、分岐予測ユニット14と、命令キャッシュ16と、命令整列ユニット18と、複数個のデコードユニット20A〜20Cと、複数個のリザベーションステーション22A〜22Cと、複数個の機能ユニット24A〜24Cと、ロード/ストアユニット26と、データキャッシュ28と、レジスタファイル30と、リオーダバッファ32と、MROMユニット34とを含む。文字が後に付された特定の参照番号とともに参照される要素は、参照番号のみにより集合的に参照されることがある。たとえば、リザベーションステーション22A〜22Cは、リザベーションステーション22として集合的に参照されることがある。
【0019】
プリフェッチ/プリデコードユニット12は、主メモリサブシステム(図示せず)から命令を受けるよう結合され、命令キャッシュ16および分岐予測ユニット14にさらに結合される。同様に、分岐予測ユニット14は、命令キャッシュ16に結合される。分岐予測ユニット14は、命令整列ユニット18および機能ユニット24A〜Cにも結合される。命令キャッシュ16はさらに、MROMユニット34および命令整列ユニット18に結合される。命令整列ユニット18は、ロード/ストアユニット26およびそれぞれのデコードユニット20A〜Cに結合される。デコードユニット20A〜Cはそれぞれリザベーションステーション22A〜Cに結合され、これはさらにそれぞれの機能ユニット24A〜Cに結合される。加えて、命令整列ユニット18およびリザベーションステーション22は、レジスタファイル30およびリオーダバッファ32に結合される。機能ユニット24は、ロード/ストアユニット26、レジスタファイル30、およびリオーダバッファ32にも結合される。データキャッシュ28は、ロード/ストアユニット26および主メモリサブシステムに結合される。最後に、MROMユニット34は、命令整列ユニット18に結合される。
【0020】
命令は、プリフェッチ/プリデコードユニット12によって主メモリからプリフェッチされる。プリフェッチ/プリデコードユニット12は、可変長の命令を固定長の命令にプリデコードし、これは次に命令キャッシュ16に記憶される。命令は、プリフェッチ方式を用いることによって実際に必要とされるより前にプリフェッチおよびプリデコードされてもよい。さまざまなプリフェッチ方式がプリフェッチ/プリデコードユニット12によって採用され得る。
【0021】
マイクロプロセッサ10は、条件付き分岐命令の後の命令を投機的にフェッチするために分岐予測を採用してもよい。分岐予測ユニット14は、分岐予測動作を行なうために含まれる。プリフェッチ/プリデコードユニット12は、特定の命令ラインがプリデコードされるとき初期分岐ターゲットを決定する。キャッシュラインに対応する分岐ターゲットへのその後の更新は、キャッシュライン内の命令の実行のために生じ得る。命令キャッシュ16は、分岐予測ユニット14にフェッチされる命令アドレスの表示を与える。これにより、分岐予測ユニット14は、分岐予測を形成するとき、どの分岐ターゲットアドレスを選択すべきかを決定することが可能になる。命令整列ユニット18および機能ユニット24は、分岐予測ユニット14に更新情報を与える。命令整列ユニット18は、分岐予測ユニット14によって予測されなかった分岐命令を検出するよう構成され得る。機能ユニット24は、分岐命令を実行し、予測された分岐方向が予測誤りでなかったかどうかを決定する。分岐方向は「テイクン」であるかもしれず、その場合にはその後の命令は分岐命令のターゲットアドレスからフェッチされる。反対に、分岐方向は「ノットテイクン」であるかもしれず、その場合にはその後の命令は、分岐命令に連続したメモリ場所からフェッチされる。予測誤りされた分岐命令が検出されると、予測誤りされた分岐の後の命令は、マイクロプロセッサ10のさまざまなユニットから廃棄される。さまざまな好適な分岐予測アルゴリズムが分岐予測ユニット14によって採用され得る。分岐予測ユニット14および命令キャッシュ16とのその相互作用のさらなる詳細を記載する前に、例示のマイクロプロセッサ10の一般的局面および可能な実施例を記載する。
【0022】
命令キャッシュ16は、プリフェッチ/プリデコードユニット12から受取られる命令を記憶するために設けられる高速キャッシュメモリである。記憶された命令は次に、命令キャッシュ16からフェッチされ、命令整列ユニット18に転送される。ある実施例では、命令キャッシュ16は、セットアソシアティブ構造としてもよい。命令キャッシュ16は、アクセス時間を速めるためにウェイ予測方式をさらに採用してもよい。たとえば、命令の各ラインを特定するタグにアクセスし、タグをフェッチアドレスと比較してウェイを選択する代わりに、命令キャッシュ16は、アクセスされるウェイを予測してもよい。この態様では、ウェイは、アレイにアクセスするより前に投機的に選択される。ウェイ予測を用いると、命令キャッシュ16のアクセス時間は、ダイレクトマップドのキャッシュと同様になり得る。命令バイトが読出された後、ベリファイのためにタグ比較が行なわれる。ウェイ予測が正しくなければ、正しい命令バイトがフェッチされ、正しくない命令バイト(処理パイプラインのさらに下にある)は廃棄される。なお、命令キャッシュ16は、フルアソシアティブ構成、セットアソシアティブ構成、またはダイレクトマップド構成で実現可能である。
【0023】
MROMユニット34は、「高速経路」(fast-path)命令のシーケンスを記憶するよう構成されるリードオンリメモリである。高速経路命令は、デコーダ20A〜Cおよび機能ユニット24A〜Cによってデコードおよび実行可能である命令である。対照的に、「MROM命令」は、デコーダ20A〜Cおよび機能ユニット24A〜Cによって直接デコードおよび実行されるには複雑すぎる命令である。命令キャッシュ16がMROM命令を出力すると、MROMユニット34は、高速経路命令のシーケンスを出力することによって応答する。より具体的には、MROMユニット34は、MROM命令を構文解析し定義された高速経路命令のサブセットに変換して、所望の演算を実行する。MROMユニット34は、高速経路命令のサブセットをデコードユニット20A〜Cにディスパッチする。
【0024】
命令バイトが一旦命令キャッシュ16からフェッチされると、それらは命令整列ユニット18に運ばれる。命令整列ユニット18は、命令をデコードユニット20A〜Cの1つに経路付ける。レジスタオペランド情報も検出されレジスタファイル30およびリオーダバッファ32に経路付けられる。加えて、命令が1つ以上のメモリ操作が行なわれることを必要とする場合、命令整列ユニット18は、メモリ操作をロード/ストアユニット26にディスパッチする。各デコードされた命令は、命令とともに含まれ得る変位または即値データおよびオペランドアドレス情報とともに、リザベーションステーション22にディスパッチされる。
【0025】
マイクロプロセッサ10は、アウトオブオーダ実行をサポートし、したがって以下のタスクのためにリオーダバッファ32を採用する。タスクは、レジスタ読出動作およびレジスタ書込動作のために元のプログラムシーケンスを追跡し、レジスタリネーミングを実現し、投機的命令実行および分岐予測誤り復旧を可能にし、正確な例外を容易にするものである。リオーダバッファ32内の一時的記憶場所は、レジスタの更新を伴う命令のデコードの際に確保される。一時的記憶場所は、命令の投機的実行から生じる投機的レジスタ状態を記憶する。分岐命令が正しくなければ、予測誤りされた経路に沿った、投機的に実行された命令から生ずる結果は、それらがレジスタファイル30に書込まれる前に、リオーダバッファ32において無効化可能である。同様に、特定の命令が例外を引き起こした場合、例外を引き起こした命令の後の命令が廃棄され得る。この態様では、例外は「正確」である(すなわち、例外を引き起こした命令の後の命令は、例外より前に完了されない)。なお、特定の命令は、プログラム順序でその特定の命令に先行する命令より前にそれが実行されるならば、投機的に実行される。先行する命令は、分岐命令または例外を引き起こす命令であり得、その場合には投機的結果はリオーダバッファ32によって廃棄され得る。
【0026】
命令整列ユニット18の出力において与えられる即値または変位データおよびデコードされた命令は、それぞれのリザベーションステーション22に直接経路づけられる。ある実施例では、各リザベーションステーション22は、対応する機能ユニットへの発行を待っている最大3つのペンディング命令についての命令情報(すなわち、デコードされた命令ならびにオペランド値、オペランドタグおよび/または即値データ)を保持することができる。なお、図面に示す実施例では、各リザベーションステーション22は、専用の機能ユニット24と関連づけられる。したがって、3つの専用の「発行位置」がリザベーションステーション22および機能ユニット24によって形成される。言い換えれば、発行位置0は、リザベーションステーション22Aおよび機能ユニット24Aによって形成される。リザベーションステーション22Aに整列されディスパッチされる命令は、機能ユニット24Aによって実行される。同様に、発行位置1は、リザベーションステーション22Bおよび機能ユニット24Bによって形成され、発行位置2は、リザベーションステーション22Cおよび機能ユニット24Cによって形成される。
【0027】
特定の命令のデコードの際、必要とされるオペランドがレジスタ場所であるならば、レジスタアドレス情報はリオーダバッファ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つ以上の場所を含み得る。
【0028】
所定の命令のデコードの後に、リオーダバッファ32が所定の命令におけるオペランドとして用いられたレジスタに割当てられた先の場所を有していることが決定されれば、リオーダバッファ32は、対応するリザベーションステーションに、1)最も最近に割当てられた場所の値、または2)値が、やがて先の命令を実行するであろう機能ユニットによってまだ発生されていなければ、最も最近に割当てられた場所についてのタグ、のいずれかを転送する。リオーダバッファ32が所与のレジスタのために確保された場所を有していれば、オペランド値(またはリオーダバッファタグ)は、レジスタファイル30からではなくリオーダバッファ32から与えられる。リオーダバッファ32中に、必要とされるレジスタのために確保された場所がなければ、値はレジスタファイル30から直接とられる。オペランドがメモリ場所に対応していれば、オペランド値はロード/ストアユニット26を介してリザベーションステーションに与えられる。
【0029】
ある特定の実施例では、リオーダバッファ32は、ユニットとして、同時にデコードされた命令を記憶し操作するよう構成される。この構成を、ここでは「ライン志向の」と呼ぶ。いくつかの命令を併せて操作することによって、リオーダバッファ32内に採用されるハードウェアは簡素化され得る。たとえば、この実施例に含まれるライン志向のリオーダバッファは、1つ以上の命令が命令整列ユニット18によってディスパッチされるたびに、3つの命令に属する命令情報のために十分な記憶場所を割当てる。対照的に、実際にディスパッチされる命令の数に依存して、可変量の記憶装置が、従来のリオーダバッファにおいては割当てられる。可変量の記憶装置を割当てるには、比較的多数の論理ゲートが必要とされ得る。同時にデコードされた命令の各々が実行すると、命令結果は同時にレジスタファイル30に記憶される。記憶装置は、同時にデコードされた命令の別のセットへの割当てのために解放される。加えて、制御論理はいくつかの同時にデコードされた命令にわたって償却されるので、命令当り採用される制御論理回路の量は低減される。特定の命令を特定するリオーダバッファタグは、2つのフィールドである:ラインタグおよびオフセットタグに分割されてもよい。ラインタグは、特定の命令を含む同時にデコードされた命令のセットを特定し、オフセットタグは、セット内のどの命令が特定の命令に対応するかを特定する。なお、命令結果をレジスタファイル30に記憶し対応する記憶装置を解放することを、命令を「リタイア」するという。さらになお、いかなるリオーダバッファ構成をマイクロプロセッサ10のさまざまな実施例において採用してもよい。
【0030】
前述したように、リザベーションステーション22は、命令が対応する機能ユニット24によって実行されるまで命令を記憶する。(i)命令のオペランドが与えられ、かつ(ii)同じリザベーションステーション22A〜22C内にあり、かつプログラム順序で命令より先にある命令についてオペランドがまだ与えられていなければ、命令が実行のために選択される。なお、命令が機能ユニット24の1つによって実行されると、その命令の結果は、その結果を待っているリザベーションステーション22のいずれかに直接送られ、同時に結果はリオーダバッファ32を更新するために送られる(この技術は、一般的には、「結果転送」と言われる)。命令は、関連づけられた結果が転送されるクロックサイクル中に、実行のために選択され機能ユニット24A〜24Cに送られることが可能である。リザベーションステーション22は、この場合には、転送された結果を機能ユニット24に経路付ける。
【0031】
ある実施例では、各機能ユニット24A〜Cは、加算および減算、ならびにシフト、ローテート、論理演算、および分岐動作を行なうよう構成される。なお、浮動小数点演算を可能にするために浮動小数点ユニット(図示せず)を採用してもよい。浮動小数点ユニットは、コプロセッサとして動作し、MROMユニット34から命令を受取り、その後にリオーダバッファ32と交信して命令を完了し得る。さらに、機能ユニット24は、ロード/ストアユニット26によって行なわれるロードメモリ操作およびストアメモリ操作のためにアドレス生成を行なうよう構成され得る。
【0032】
機能ユニット24の各々はまた、条件付き分岐命令の実行に関する情報を分岐予測ユニット14に与える。分岐予測が正しくなかったならば、分岐予測ユニット14は、命令処理パイプラインに入った予測誤りされた分岐の後の命令をフラッシュ(flush)し、命令キャッシュ16または主メモリからの必要とされる命令のフェッチをもたらす。なお、そのような状況では、投機的に実行され、ロード/ストアユニット26およびリオーダバッファ32に一時的に記憶されたものを含む、予測誤りされた分岐命令の後に起こる元のプログラムシーケンスにおける命令の結果は廃棄される。
【0033】
機能ユニット24によって発生された結果は、レジスタ値が更新されているならばリオーダバッファ32に、メモリ場所の内容が変更されているならばロード/ストアユニット26に送られる。結果がレジスタに記憶されるべきものであれば、リオーダバッファ32は、命令がデコードされたとき、レジスタの値のために確保された場所に結果を記憶する。複数個の結果バス38が、機能ユニット24およびロード/ストアユニット26からの結果の転送のために含まれる。結果バス38は、生成された結果、および実行された命令を特定するリオーダバッファタグを運ぶ。
【0034】
ロード/ストアユニット26は、機能ユニット24とデータキャッシュ28との間のインターフェイスを与える。ある実施例では、ロード/ストアユニット26は、ペンディングのロードまたはストアについてのデータおよびアドレス情報のために8個の記憶場所を有するロード/ストアバッファで構成される。バッファが一杯になると、命令整列ユニット18は、ロード/ストアユニット26がペンディングのロードまたはストア要求情報のための空きを有するまで待つ。ロード/ストアユニット26はまた、ペンディングのストアメモリ操作に対するロードメモリ操作の依存性チェックを行ない、データコヒーレンシが確実に維持されるようにする。メモリ操作は、マイクロプロセッサ10と主メモリサブシステムとの間のデータの転送である。メモリ操作は、メモリに記憶されるオペランドを利用する命令の結果であってもよく、データ転送をもたらすが他の操作をもたらさないロード/ストア命令の結果であってもよい。加えて、ロード/ストアユニット26は、セグメントレジスタと、x86マイクロプロセッサアーキテクチャによって定義されるアドレス変換メカニズムに関連する他のレジスタなどの特殊レジスタのための特有のレジスタ記憶場所とを含み得る。
【0035】
ある実施例では、ロード/ストアユニット26は、ロードメモリ操作を投機的に行なうよう構成される。ストアメモリ操作は、プログラム順序で行なわれてもよいが、予測されたウェイに投機的に記憶されてもよい。予測されたウェイが正しくなければ、ストアメモリ操作の前のデータは、その後に、予測されたウェイにリストアされ、ストアメモリ操作は正しいウェイに行なわれる。別の実施例では、ストアは投機的に実行されてもよい。投機的に実行されたストアは、更新の前のキャッシュラインのコピーとともに、ストアバッファ内に置かれる。投機的に実行されたストアが、分岐予測誤りまたは例外のために後に廃棄されるならば、キャッシュラインはバッファに記憶された値にリストアされてもよい。なお、ロード/ストアユニット26は、投機的実行なしを含む、いかなる投機的実行を行なうようにも構成されてよい。
【0036】
データキャッシュ28は、ロード/ストアユニット26と主メモリサブシステムとの間で転送されるデータを一時的に記憶するために設けられる高速キャッシュメモリである。ある実施例では、データキャッシュ28は、8ウェイのセットアソシアティブ構造で最大16キロバイトを記憶する容量を有する。命令キャッシュ16と同様に、データキャッシュ28は、ウェイ予測メカニズムを採用し得る。データキャッシュ28は、セットアソシアティブ構成およびダイレクトマップト構成を含む、さまざまな特有のメモリ構成で実現可能であることが理解される。
【0037】
x86マイクロプロセッサアーキテクチャを採用するマイクロプロセッサ10のある特定の実施例では、命令キャッシュ16およびデータキャッシュ28は線形にアドレスされる。線形アドレスは、命令によって特定されるオフセットと、x86アドレス変換メカニズムのセグメント部分によって特定されるベースアドレスとから形成される。線形アドレスは、任意で、主メモリにアクセスするために物理的アドレスに変換されてもよい。線形から物理的への変換は、x86アドレス変換メカニズムのページング部分によって特定される。なお、線形アドレスのキャッシュは、線形アドレスタグを記憶する。1組の物理的タグ(図示せず)を採用して、線形アドレスを物理的アドレスにマッピングし、かつ変換エイリアスを検出してもよい。加えて、物理的タグブロックが、線形から物理的へのアドレス変換を行なってもよい。
【0038】
分岐予測ユニット
ここで図2を参照すると、分岐予測ユニット14のある実施例の詳細が示される。図が例示するとおり、この実施例では、分岐予測ユニット14は、分岐選択子アレイ50と、シーケンシャルアドレス加算器52と、オフセット計算論理54と、直接分岐加算器56と、間接分岐ターゲットキャッシュ58と、リターンスタック60と、制御論理回路62と、マルチプレクサ64とを含む。
【0039】
一般的には、分岐予測ユニット14は、機能ユニット24A〜Cからフェッチアドレスを受取り、これに応答して予測される次のフェッチアドレスを出力する。予測される次のフェッチアドレスは次に、命令キャッシュ16に経路付けられる。予測される次のフェッチアドレスが命令キャッシュ16をミスすれば、予測される次のフェッチアドレスはプリフェッチ/プリデコードユニット12に経路付けられる。プリフェッチ/プリデコードユニット12は、主メモリサブシステムにアクセスし、予測された次のフェッチアドレスに存在する予め定められた数の命令バイトを命令キャッシュ16に記憶するプロセスを開始する。
【0040】
分岐予測ユニット14の動作中、受取られたフェッチアドレスのすべてまたは一部は、複数の異なった場所に並列に経路付けられる。たとえば、図に例示される実施例では、フェッチアドレスは、分岐選択子アレイ50、シーケンシャルアドレス加算器52、命令キャッシュ16、直接分岐加算器56、および間接分岐ターゲットキャッシュ58に運ばれる。
【0041】
分岐選択子アレイ50は、各々が命令キャッシュ16内の特定の命令バイトに対応する、複数個の選択ビットを記憶するよう構成される。ある実施例では、分岐選択アレイ50は、命令キャッシュ16の構造をミラーリングするよう構成される。たとえば、命令キャッシュ16が4ウェイセットアソシアティブキャッシュとして構成される場合、分岐選択子アレイ50も、4ウェイのセットアソシアティブとして構成されてもよい。分岐選択子アレイ50と命令キャッシュ16とはどちらも、フェッチアドレスの同じタグまたは部分を用いてアクセス可能である。分岐選択子アレイ50によって出力される選択子ビットは、制御論理回路62に経路付けられる。選択子ビットに基づいて、制御論理回路62は、4個の潜在的に可能なソースの1つから次の予測されるフェッチアドレスを選択するようマルチプレクサ64を制御する。ある実施例では、マルチプレクサ64は、以下の可能性がある4つのアドレス、(1)計算されたシーケンシャルなアドレス、(2)計算された直接分岐ターゲットアドレス、(3)記憶された間接分岐ターゲットアドレス、および(4)記憶されたリターンアドレス、から予測される次のフェッチアドレスを選択する。これらの4個の潜在的に可能なアドレスの各々を個別に以下に記載する。ここに使用されるフェッチブロックという言葉は、命令キャッシュ16中でヒットするフェッチアドレスを受取るのに応答して命令キャッシュ16によって出力される命令バイトのブロックのことをいう。いくつかの実現化例では、フェッチブロックはキャッシュラインに等しくてもよい。別の実現化例では、命令キャッシュ16は、キャッシュラインの一部(たとえば、キャッシュラインの半分)を出力してもよく、その場合は、キャッシュラインは複数のフェッチブロックを含み得る。
【0042】
4つの潜在的に可能なアドレスの第1、すなわち計算されたシーケンシャルなアドレスは、選択子ビットが、フェッチされたキャッシュライン内のフェッチアドレスの後にテイクンの分岐がないということを示す場合、選択される。たとえば、フェッチされたキャッシュラインが分岐命令を有していなければ、プログラムは、現在のフェッチされたキャッシュラインの終わりを超えて次のシーケンシャルなキャッシュラインへ実行を続けるであろう。次のシーケンシャルなキャッシュラインのフェッチアドレスは、シーケンシャルアドレス加算器52によって計算される。シーケンシャルアドレス加算器52は、フェッチアドレス(またはその一部)を受取りそれを定数66に加算するよう構成される。定数66は、命令キャッシュ16のフェッチブロックサイズに等しい。たとえば、ヒットするフェッチアドレスが受取られるたびに、16個の命令バイトのブロックが命令キャッシュ16によって出力されるならば、定数66は16に等しいであろう。フェッチアドレスにフェッチブロックサイズを加算することにより、次のシーケンシャルなフェッチブロックのアドレスを計算することが可能である。いくつかの実施例では、フェッチアドレスの下位ビット(たとえば、フェッチブロック内のバイトオフセットを示すインデックスビット)は、合計が行なわれるより前または後にゼロにされ得ることに注目されたい。これにより、次のシーケンシャルアドレスは確実に、キャッシュライン(または、キャッシュライン内に複数のフェッチブロックがある場合フェッチブロック)の始まりに対応するようになる。
【0043】
4つの潜在的に可能なアドレスの第2、すなわち計算された直接分岐ターゲットアドレスは、制御論理回路62によって受取られる選択子ビットが、テイクンであると予測される直接分岐命令の存在を示す場合、マルチプレクサ64によって選択される。直接分岐命令は、オフセット(すなわち、ジャンプするバイトの数)が即値データとして命令内に含まれている分岐命令である。たとえば、x86命令セットでは、即値オフセットを備える無条件ニアジャンプ命令(たとえば、JMP 014C)が直接分岐命令の一例である。即値オフセット(先の例では014C)は、分岐命令のすぐ後に続く命令の命令ポインタ(EIP)に加算される、またはそれから減算されるバイトの数を示す。直接分岐加算器56は、直接分岐ターゲットアドレスを計算する。ある実施例では、予測される直接分岐アドレスを生成するために、直接分岐加算器56は、以下の3つの構成要素、(1)フェッチアドレス、(2)現在のフェッチアドレスから、直接分岐命令のすぐ後に続く命令へのオフセット、および(3)直接分岐命令内に即値データとして記憶されるオフセット、を合計する。フェッチアドレスは、計算のための開始点としての役割を果たす。現在のフェッチアドレスから直接分岐アドレスのすぐ後に続く命令へのオフセットは、開始点に加算され、有効なEIP値を形成する。即値データとして記憶されるオフセットは次に、有効EIP値に加算され、予測される直接分岐ターゲットアドレスを生成する。加算器56は、任意の数の異なったタイプの加算器(たとえば、桁上げ伝搬加算器または桁上げ保存加算器)の1つとして、または異なった加算器のタイプの組合せとして実現されてもよいことに注目されたい。さらに、加算演算は、いかなる順序でまたは並列に行なわれてもよい。直接分岐加算器56によって使用される2つのオフセット値は、命令キャッシュ16から受取られる命令バイトからのオフセット値を決定する計算論理ユニット54によって計算される。この計算を以下により詳細に記載する。
【0044】
4つの潜在的に可能なアドレスの第3、すなわち記憶された間接分岐ターゲットアドレスは、制御論理回路62によって受取られる選択子ビットが、テイクンであると予測される間接分岐命令の存在を示す場合、マルチプレクサ64によって選択される。間接分岐命令は、オフセットが即値データとして記憶されない分岐命令である。たとえば、オフセットがメモリ(たとえば、JMP[9912])またはレジスタ(たとえば、JMP AX)に記憶される無条件ジャンプ命令が、間接分岐であると考えられる。直接分岐命令とは対照的に、メモリまたはレジスタから所望のオフセットを取出すのに必要とされる余分な時間のために、間接分岐について、予測される分岐ターゲットアドレスを「オンザフライ」(またはプログラム順序を飛越して)計算することはより困難であるかもしれない。したがって、予測される間接分岐アドレスは、間接分岐ターゲットキャッシュ58に記憶される。間接分岐ターゲットキャッシュ58は、現在のフェッチアドレスを受取り、応答して予測される間接分岐ターゲットアドレスをマルチプレクサ64に出力するよう構成される。制御論理回路62が、テイクンであると予測される間接分岐命令を検出すると、それは、間接分岐ターゲットキャッシュ58によって出力される予測される間接分岐ターゲットアドレスを選択するようにマルチプレクサ64を向ける。
【0045】
第4の潜在的に可能なアドレスは、記憶されたリターンアドレスである。記憶されたリターンアドレスは、制御論理62によって受取られる選択子ビットがリターン命令の存在を示す場合、マルチプレクサ64によって選択される。リターン命令(たとえば、x86命令セットにおけるRETおよびRETF)は、先行するコール命令の前にそれが保持する値にEIPをリストアする。コール命令およびリターン命令は、典型的には、プロシージャまたはサブルーチンにジャンプしかつそれからリターンするために使用される。コール命令は、メモリにスタックへの現在の命令ポインタを記憶(またはプッシュ)し、リターン命令は、メモリスタックから記憶された命令ポインタを読出す(またはポップする)ことにより、最終コール命令の前からのその値に命令ポインタをリストアする。図示の実施例では、リターンスタック60は、コール命令に対応する命令ポインタを記憶するよう構成される。制御論理回路62によって受取られる選択子ビットがリターン命令を示す場合、制御論理回路62は、マルチプレクサ64に、リターンスタック60の最上部の予測されたリターンアドレスを選択させる。リターンスタック60は、予測されるリターンアドレスがマルチプレクサ64によって選択されるたびにスタックポインタのその最上部をインクリメントして適切なスタック動作を可能にするよう構成され得る。同様に、コール命令が検出され、対応する命令ポインタがリターンスタック60に記憶されると、スタックポインタの最上部がデクリメントされ得る。
【0046】
ここで図3を参照して、分岐予測ユニット14のある特定の実施例のさまざまな特徴が示される。図が例示するように、分岐選択子アレイ50、命令キャッシュ16、および間接分岐ターゲットキャッシュ58は各々、記憶された情報に対応するタグを記憶してもよい。間接分岐ターゲットキャッシュは、命令キャッシュ16の構造を鏡映し、キャッシュラインまたはフェッチブロック当たり1つ以上の間接分岐ターゲットアドレスを記憶してもよい。別の実施例では、間接分岐ターゲットキャッシュ58は、フルアソシアティブであってもよく、予測される間接分岐ターゲットアドレスの予め定められた数まで記憶してもよい。たとえば、間接分岐ターゲットキャッシュ58は、予め定められた数の、最も最近のテイクンの間接分岐ターゲットアドレスを記憶するために、先入れ先出し(FIFO)置換方式を用いるよう構成されてもよい。いくつかの実施例では、間接分岐ターゲットキャッシュ58は、間接分岐ターゲットアドレスのみを記憶してもよく、これは、間接分岐ターゲットキャッシュ58を、間接分岐ターゲットアドレスに加えてターゲットアドレスの他のタイプを記憶する他の分岐ターゲットキャッシュよりも小さくし得る。さらに、間接分岐は直接分岐ほど頻繁に行なわれないので、これはさらに、記憶場所がより少ない分岐ターゲットキャッシュを実現するのに関連するいかなる潜在的不利益を軽減し得る。
【0047】
図がまた例示するように、オフセット計算ユニット54は、命令キャッシュ16からプリデコードビットを受取るよう構成されてもよい。前述のとおり、プリデコードビットは、プリデコードユニット12によって生成され、命令キャッシュ16に記憶される命令の整列およびデコーディングに関連する情報を記憶するために使用されてもよい。オフセット計算ユニット54はまた、分岐選択子アレイ50から選択子ビットを受取るよう構成されてもよい。ある実施例では、分岐選択子アレイ50は、フェッチアドレスの後に生じる選択子ビットのみを出力するよう構成されてもよい。別の実施例では、分岐選択子アレイ50は、命令キャッシュ16内の選択されたキャッシュラインまたはフェッチブロックの各バイトに対応する選択子ビットのすべてを出力するよう構成されてもよい。さらに、制御論理回路62およびオフセット計算ユニット54はどちらも、分岐選択子アレイ50によって出力される選択子ビットのすべてまたは一部のみを受取るよう構成されてもよい。ある実施例では、分岐選択子アレイは、フェッチアドレスに対応する選択子ビットを、マルチプレクサ64の制御入力に直接出力し、それにより制御論理回路62の複雑さを低減するように(または完全になくすように)構成されてもよい。
【0048】
分岐予測誤りが検出されると、機能ユニット24は、正しい分岐ターゲットアドレス(および対応するテイクンまたはノットテイクン情報)を、分岐予測ユニット14に与え得る。分岐予測ユニット14は次に、分岐選択子アレイ50および間接分岐ターゲットキャッシュ58中の対応する情報を更新するよう構成され得る。分岐予測ユニット14および分岐選択子アレイ50はまた、命令キャッシュ16内の置換されたキャッシュラインまたはフェッチブロックに対応するいかなる選択子ビットをもリセットするよう構成され得る。リターンスタック60は、そのエントリの各々に関連付けられる有効ビットを有してもよい。さらに、さらなる記憶アレイを用いて、間接分岐ターゲットアレイ58に間接分岐ターゲットアドレス全体を記憶する代わりに、オフセットの異なったサイズ(たとえば、別個の、8、16、および32ビットのアレイ)を記憶することが可能である。しかし、この実施例は、記憶されたオフセットを用いて間接分岐ターゲットアドレス計算を行なうためにさらなる加算器を使用する可能性がある。
【0049】
ここで図4を参照して、分岐予測ユニット14のある実施例の動作のさらなる詳細が示される。図が例示するように、ある実施例では、命令キャッシュ16は、命令バイト84と、分岐オフセットビット86と、分岐命令バイト88と、スタートビット90とを記憶可能である。なお、アセンブルされていない命令96が説明のためにのみ示され、命令キャッシュ16内に実際には記憶されていない。分岐オフセットビット86、分岐命令バイト88、およびスタートビット90はすべて、プリデコードユニット12によって生成されるプリデコードビットである。各プリデコードビットは、例示に示されるように1命令バイトに対応する。分岐オフセットビット86は、対応する命令バイトが直接分岐命令の即値オフセットの一部を含む場合、アサートされる。たとえば、命令JMP20は、次の命令(すなわちPOP AX)の開始の20バイト後のアドレスへの無条件ジャンプを表わす。命令JMP20は、E9 E0として16進数マシンコードにアセンブルされる。ただし、E9は、即値8ビットオフセットを備える無条件ジャンプについての操作コードであり、E0は、オフセット(20)の2の補数表現である。オフセットは、図の円72によって示される。バイトE0は、直接分岐命令についての即値オフセットデータを表すので、対応する分岐オフセットビット86はセットされる(影付きのブロックによって表わされる)。
【0050】
同様に、対応する命令バイトが分岐命令の一部であるとき、分岐命令ビット88はアサートされる。たとえば、命令JMP 20およびRETはどちらも分岐命令である。したがって、その対応する分岐命令ビット86はアサートされる。前述のとおり、スタートビット90は、対応する命令バイトが命令の第1のバイトである場合にのみアサートされる。
【0051】
図はまた、選択子ビット94についての符号化のあるタイプの一例を例示する。図において使用される符号化は、命令キャッシュ16内に記憶される各命令バイトについて2つの選択子ビットを利用する。なお、他の実施例では、選択子ビット94は、命令キャッシュ16中の命令バイトのサブセットについて記憶されてもよく、たとえば命令バイト1つおきに2つの選択子ビットであってもよい。表1は、図に示す例に使用される符号化を例示する。
【0052】
【表1】
【0053】
図では、矢印80および82は例としてのフェッチアドレスを表わす。例のフェッチアドレスを用いて、分岐予測ユニット14の動作が例示され得る。フェッチアドレスは、命令キャッシュ16、オフセット計算ユニット54、直接分岐加算器56、および分岐選択子アレイ50によって受取られる。応答して、命令キャッシュ16は、MOV AX,BX命令で始まる命令バイト84を命令整列ユニット18に出力する。並列に、対応するプリデコードビット(これも選択的に整列ユニット18に経路付けされ得る)は、オフセット計算ユニット54に運ばれる。並列してまた、分岐選択子アレイ50は、選択子ビット94(命令キャッシュ16によって出力される命令バイトに対応する)をオフセット計算ユニット54に運ぶ。
【0054】
フェッチアドレス、プリデコードビット、および選択子ビットを受取った後、オフセット計算ユニット54は2つのオフセットを計算する。第1のオフセットは、フェッチアドレス80から、(図の範囲70によって表わされる)第1のテイクンの分岐命令の終わりまでのバイトの数である。これは、複数の方法で、たとえば、アサートされる対応する選択子ビットを有する第1のセットの分岐命令ビットに対してスキャンすることによって決定可能である。このオフセットは、直接分岐加算器56に運ばれる。第2のオフセットは、(円72によって表わされる)直接ジャンプ命令内の即値データとして記憶されるオフセットである。ある実施例では、オフセット計算ユニット54は、プリデコードビットに加えて計算キャッシュ16から命令バイトを受取ってもよい。オフセット計算ユニット54は次に、フェッチアドレスの後の第1のテイクンの分岐命令に対応するアサートされた分岐オフセットビット86に対してスキャンすることによって、命令バイトから即値オフセットデータ72を選択してもよい。オフセット計算ユニット54は、第1の「テイクン」の分岐命令に対してスキャンし、「ノットテイクン」である分岐命令が予測に悪影響を与えないようにし得る。さらに、複数の命令バイトに対応する選択子ビットがオフセット計算ユニット54に運ばれ得るが、ある実施例では、フェッチアドレスに対応する選択子のみが制御論理回路62(またはマルチプレクサ64)に運ばれることに注目されたい。上に使用された例では、値01を有する選択子ビット(フェッチアドレス80および82の命令バイトに対応する)は、マルチプレクサ64に出力され、直接分岐加算器56からの出力が選択されるべきであることを示すであろう。
【0055】
代わりに、フェッチアドレスが命令POP BXのそれであったとすると、(値00を有する)選択子ビットの最終の対は、マルチプレクサ64に運ばれ、(シーケンシャルアドレス加算器52によって生成される)次のシーケンシャルなフェッチアドレスが選択されるべきであることを示すであろう。同様に、フェッチアドレスが命令RETのそれであった場合、値11を有する選択子ビットは、マルチプレクサ64に運ばれ、リターンスタック60の最上部に記憶されたリターンアドレスが選択されるべきであることを示すであろう。
【0056】
なお、選択子ビット94の他の構成もまた企図される。たとえば、ある実施例では、分岐予測ユニットは、リターンスタック60なしに実現されてもよい。同様に、他のプリデコード情報が、上述のプリデコード情報に加えてまたはその代わりに記憶されてもよく、たとえば、対応する分岐予測情報が有効であるかどうかを示す有効ビットが記憶されてもよい。同様に、リセットが発生する場合、分岐選択子アレイ50は、すべての選択子ビット94をクリアする(たとえば00)よう構成されてもよい。命令キャッシュは、キャッシュラインが上書きされているときプリデコードユニット12に制御信号をアサートするよう構成されてもよい。分岐選択子アレイ50が命令キャッシュ16の構造をミラーリングする構造を有するならば、分岐選択子アレイ50は、上書きされたキャッシュラインに対応するすべての選択子ビット94をクリアしてもよい。
【0057】
ここで図5を参照すると、分岐予測ユニット14の別の実施例が例示される。この実施例では、分岐選択子アレイ50からの選択子ビットは、マルチプレクサ64に直接経路付けされ、どのソースが次の予測されるフェッチアドレスを与えるかを選択する。選択子ビットが正しくなければ、または(後に機能ユニット24A〜Cによって検出されるように)記憶されたアドレスの1つが正しくなければ、正しくない情報は、機能ユニット24A〜Cから受取られた正しい情報で更新される。たとえば、選択子ビット94が、特定の命令がテイクンであると誤って表すならば、機能ユニット24A〜Cは、分岐予測誤りを検出すると、選択子ビットが誤っており更新される必要があるということを分岐予測ユニット14に通知するであろう。
【0058】
この実施例のさらなる特徴は、間接分岐ターゲットがオフセットの形で記憶されることである。オフセットは次に、間接分岐加算器68によってフェッチアドレスに加算される。この計算は、直接分岐加算器56によって行なわれる計算と同様に行なわれ得る。さらになお、この実施例はリターンスタック60を使用しない。
【0059】
次に図6を参照して、マイクロプロセッサにおける予測される次のフェッチアドレスを記憶するための方法のある実施例を例示するフローチャートが示される。この実施例では、現在のフェッチアドレスが受取られた後(ステップ120)、以下の複数の機能が並列に行なわれ得る。(1)命令バイトおよびプリデコードビットが命令キャッシュ16から出力される(ステップ122)。(2)選択子ビットが分岐選択子アレイ50から出力される(ステップ124)。(3)フェッチアドレスがフェッチブロック/キャッシュラインサイズに加算され、次のシーケンシャルなフェッチアドレスが生成される(ステップ126)。(4)記憶された間接分岐命令アドレスが間接分岐ターゲットキャッシュ58から出力される。(5)リターンスタック60の最上部からのリターンアドレスが出力される。次に、オフセット計算ユニット54は、フェッチアドレスから第1の予測されるテイクンの直接分岐命令へのオフセットを計算し、直接分岐命令内に即値データとして記憶されたオフセットを検出する(ステップ132)。一旦計算されると、オフセットは次にフェッチアドレスに加算され、予測される次の直接分岐命令を生成する(ステップ134)。最後に、次の予測されるフェッチアドレスは、分岐選択子アレイ50からの選択子ビットに基づいて選択される(ステップ136)。
【0060】
なお、例示されるステップのいくつかはオプションである(たとえばステップ130)。さらになお、ステップの順番は変動可能であり、ステップ内の異なった機能を異なったシーケンスで行なってもよい。たとえば、プリデコードビットは、命令バイトより前に命令キャッシュの出力から利用可能であってもよい(ステップ122)。したがって、各オフセットについての計算は、異なったときに開始され得る。さらになお、さらなるステップが異なった実施例においては加えられてもよい。たとえば、前述のように、いくつかの実施例は、アドレス全体の代わりにオフセットとして間接分岐ターゲットアドレスを記憶してもよい。そのような実施例では、記憶されたオフセットをフェッチアドレスおよびオフセット計算論理54によって生成されたオフセットに加算するさらなるステップが利用されてもよい。
【0061】
コンピュータシステムへの通用例
ここで図7を参照すると、マイクロプロセッサ10および分岐予測ユニット14のある実施例を利用するよう構成されたコンピュータシステム200のある実施例のブロック図が示される。図示のシステムでは、主メモリ204がメモリバス206を介してバスブリッジ202に結合され、グラフィックスコントローラ208がAGPバス210を介してバスブリッジ202に結合される。最後に、複数個のPCIデバイス212A〜212BがPCIバス214を介してバスブリッジ202に結合される。2次バスブリッジ216が、EISA/ISAバス220を介して1つ以上のEISAまたはISAデバイス218への電気的インターフェイスを収容するよう設けられてもよい。マイクロプロセッサ10は、CPUバス224を介してバスブリッジ202に結合される。
【0062】
バスブリッジ202は、マイクロプロセッサ10と主メモリ204とグラフィックスコントローラ208とPCIバス214につながれるデバイスとの間のインターフェイスとして機能する。演算がバスブリッジ202に接続されるデバイスの1つから受取られると、バスブリッジ202は演算のターゲット(たとえば、特定のデバイスまたは、PCIバス214の場合には、ターゲットはPCIバス214にある)を特定する。バスブリッジ202は、ターゲットとされたデバイスに演算を経路付ける。バスブリッジ202は、一般的には、ソースデバイスまたはバスによって使用されるプロトコルからターゲットデバイスまたはバスによって使用されるプロトコルに演算を変換する。
【0063】
PCIバス214に対してISA/EISAバスへのインターフェイスを与えることに加えて、2次バスブリッジ216はさらに、所望に応じて、さらなる機能を組込んでもよい。たとえば、ある実施例では、2次バスブリッジ216は、PCIバス214の使用の優先順位を決定するためのマスタPCIアービタ(図示せず)を含む。外部からの、または2次バスブリッジ216と一体化されるかのいずれかの、入力/出力コントローラ(図示せず)をもコンピュータシステム200内に含めて、所望により、キーボードおよびマスク220のための、ならびにさまざまなシリアルポートおよびパラレルポートのための動作サポートを与えてもよい。外部キャッシュユニット(図示せず)が、他の実施例では、マイクロプロセッサ10とバスブリッジ202との間のCPUバス224にさらに結合されてもよい。代替的に、外部キャッシュはバスブリッジ202に結合されてもよく、外部キャッシュのためのキャッシュ制御論理回路がバスブリッジ202に一体化されてもよい。
【0064】
主メモリ204は、アプリケーションプログラムがこれに記憶されマイクロプロセッサ10が主にここから実行するメモリである。好適な主メモリ204は、DRAM(ダイナミック・ランダム・アクセス・メモリ)、および好ましくはSDRAM(シンクロナスDRAM)の複数個のバンクを含む。
【0065】
PCIデバイス212A〜212Bは、たとえば、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピィディスクドライブまたはドライブコントローラ、SCSI(スモール・コンピュータ・システムズ・インターフェイス)アダプタおよび電話機能カードなどのさまざまな周辺デバイスを例示するものである。同様に、ISAデバイス218は、モデム、サウンドカード、またはGPIBもしくはフィールドバスインターフェイスカードなどのさまざまなデータ収集カードなどのさまざまなタイプの周辺デバイスを例示するものである。
【0066】
ディスプレイ226上のテキストおよび画像のレンダリングを制御するためにグラフィックスコントローラ208が設けられる。グラフィックスコントローラ208は、主メモリ204におよびそれから有効にシフト可能である3次元データ構造をレンダリングするために、一般的に公知の典型的なグラフィックスアクセラレータを採用してもよい。グラフィックスコントローラ208は、したがって、それがバスブリッジ202内のターゲットインターフェイスへのアクセスを要求し受取り、それにより主メモリ204へのアクセスを獲得することができるという点で、AGPバス210のマスタであり得る。専用のグラフィックスバスが、主メモリ204からの高速のデータ取出を可能にする。ある種の動作では、グラフィックスコントローラ208は、AGPバス210でのPCIプロトコルトランザクションを生成するようさらに構成されてもよい。バスブリッジ202のAGPインターフェイスは、したがって、AGPプロトコルトランザクションもPCIプロトコルターゲットおよびイニシエータトランザクションもサポートする機能を含み得る。ディスプレイ226は、画像またはテキストを表わすことのできるいかなる電子ディスプレイでもある。好適なディスプレイ226は、陰極線管(「CRT」)、液晶ディスプレイ(「LCD」)などを含む。
【0067】
なお、AGPバス、PCIバスおよびISAまたはEISAバスが上の記載では例として使用されたが、所望によりいかなるバスアーキテクチャが置換されてもよい。さらになお、コンピュータシステム200は、さらなるマイクロプロセッサを含むマルチプロセッシングコンピュータシステムであってもよい。
【0068】
さらになお、この説明はさまざまな信号のアサーションに言及することがある。信号が特定の条件を示す値を運ぶ場合、信号が「アサートされる」とここでは用いられる。反対に、信号が特定の条件の欠如を示す値を運ぶ場合、信号は「デアサートされる」または「アサートされない」。信号は、論理0値を運ぶとき、または反対に、論理1値を運ぶときアサートされるものと定義され得る。加えて、上の記載では廃棄されるものとしてさまざまな値が記載された。値は複数の態様で廃棄され得るが、一般的には、値を受取る論理回路によってそれが無視されるように値を変更することを伴う。たとえば、値が1ビットを含む場合、値の論理状態は、値を廃棄するよう反転され得る。値がnビットの値である場合、nビットの符号化の1つが、値が無効であることを示し得る。値を無効の符号化にセットすることにより、値が廃棄されるようになる。加えて、nビットの値は、セットされるとnビットの値が有効であることを示す有効ビットを含み得る。有効ビットをリセットすることは、値を廃棄することを含み得る。値を廃棄する他の方法が同様に使用されてもよい。
【0069】
産業上の適用性
この発明は、一般的には、マイクロプロセッサおよびコンピュータシステムに適用可能であろう。
【0070】
さまざまな変形および変更が、上の記載を完全に理解すると当業者には明らかとなるであろう。前掲の特許請求の範囲はそのようなすべての変形および変更を含むものと解釈されるべきであることが意図される。
【図面の簡単な説明】
【図1】 マイクロプロセッサのある実施例の例示の図である。
【図2】 図1のマイクロプロセッサからの分岐予測ユニットのある実施例の例示の図である。
【図3】 図2からの分岐予測ユニットのある実施例のさらなる詳細を例示する図である。
【図4】 図2からの分岐予測ユニットのある実施例のさらなる詳細を例示するブロック図である。
【図5】 図2からの分岐予測ユニットの別の実施例を例示するブロック図である。
【図6】 マイクロプロセッサにおける予測される次のフェッチアドレスを記憶するための方法のある実施例を例示する流れ図である。
【図7】 図1からのマイクロプロセッサのある実施例を使用するよう構成されたコンピュータシステムのある実施例のブロック図である。
Claims (23)
- マイクロプロセッサであって、
命令バイトを受取り記憶するよう構成される命令キャッシュを含み、命令キャッシュは、フェッチアドレスを受取り、それに応答してフェッチアドレスに対応する命令バイトの1つ以上を出力するよう構成され、さらに、
複数個の選択子ビットを記憶するよう構成される分岐選択子アレイを含み、各選択子ビットは、命令キャッシュに記憶される特定の命令バイトに対応し、分岐選択子アレイは、フェッチアドレスを受取り、それに応答して予測される次のフェッチアドレスのためのソースを示す1つ以上の対応する選択子ビットを出力するよう構成され、さらに、
フェッチアドレスをフェッチブロックサイズと合計して次のシーケンシャルなアドレスを生成するよう構成されるシーケンシャルアドレス加算器と、
命令キャッシュに記憶される間接分岐命令のための予測される分岐ターゲットアドレスを記憶するよう構成される間接分岐ターゲットキャッシュとを含み、間接分岐ターゲットキャッシュは、フェッチアドレスを受取り、対応する間接分岐アドレスを出力するよう構成され、さらに、
フェッチアドレスを、命令キャッシュによって出力される命令バイトからのオフセットと合計して直接分岐アドレスを計算するよう構成される直接分岐加算器と、
分岐選択子アレイから1つ以上の対応する選択子ビットを受取るよう構成されるマルチプレクサとを含み、マルチプレクサは、選択子ビットに基づいて次のシーケンシャルなアドレス、直接分岐アドレス、または間接分岐アドレスのいずれかを選択するよう構成される、マイクロプロセッサ。 - シーケンシャルアドレス加算器、直接分岐加算器、および間接分岐ターゲットキャッシュは各々、次のシーケンシャルなアドレス、直接分岐アドレス、および間接分岐アドレスをそれぞれ並列に計算するよう構成される、請求項1に記載のマイクロプロセッサ。
- 命令キャッシュによって出力される命令バイトからのオフセットを計算するよう構成されるオフセット計算論理ユニットをさらに含み、オフセット計算論理ユニットは、選択子ビットに基づいてオフセットを計算するよう構成される、請求項2に記載のマイクロプロセッサ。
- 前記選択子ビットの2つが、前記命令キャッシュに記憶される各命令バイトに対応し、前記2バイトは、対応する命令が、(i)分岐命令ノットテイクン、(ii)直接分岐命令テイクン、(iii)間接分岐アドレステイクン、または(iv)リターンアドレステイクンであるかを示す、請求項3に記載のマイクロプロセッサ。
- 命令キャッシュは、命令バイトについてのプリデコード情報を記憶するよう構成され、プリデコード情報は、命令開始バイトを示すプリデコードビットを含む、請求項4に記載のマイクロプロセッサ。
- フェッチブロックサイズは定数である、請求項5に記載のマイクロプロセッサ。
- 前記マルチプレクサに結合され、コール命令のすぐ後に続く命令に対する命令ポインタを記憶するよう構成されるリターンスタックをさらに含む、請求項6に記載のマイクロプロセッサ。
- 前記分岐選択子アレイおよび前記間接分岐ターゲットキャッシュは各々、セットアソシアティブであり、もしあれば、どの記憶された選択子ビットおよび間接分岐ターゲットアドレスがフェッチアドレスに対応するかを決定するためにフェッチアドレスと比較されるタグを記憶するよう構成される、請求項2に記載のマイクロプロセッサ。
- マイクロプロセッサにおける予測される次のフェッチアドレスを生成するための方法であって、
現在のフェッチアドレスを受取るステップと、
命令キャッシュから現在のフェッチアドレスに対応するプリデコード情報および命令バイトを出力するステップと、
分岐選択子アレイから現在のフェッチアドレスに対応する選択子ビットを出力するステップと、
現在のフェッチアドレスをフェッチブロック定数に加算して次のシーケンシャルなアドレスを生成するステップと、
間接分岐ターゲットアドレスキャッシュから記憶された間接分岐アドレスを出力するステップと、
リターンスタックから記憶されたリターンアドレスを出力するステップと、
オフセットを計算するステップと、
現在のフェッチアドレスをオフセットに合計して次の直接分岐アドレスを生成するステップと、
予測される次のフェッチアドレスとして、(i)次のシーケンシャルなアドレス、(ii)出力間接分岐アドレス、(iii)出力リターンアドレス、および(iv)次の直接分岐アドレスのいずれかを選択するステップとを含み、前記現在のフェッチアドレスを前記出力するステップと、前記記憶された間接分岐アドレスを前記出力するステップと、前記記憶されたリターンアドレスを前記出力するステップと、現在のフェッチアドレスをオフセットに加算して次の直接分岐アドレスを生成する前記ステップとは、すべて並列に行なわれる、方法。 - 命令キャッシュに記憶される命令バイトについての選択子ビットを生成し記憶するステップと、
選択子ビットに基づいて予測される次のフェッチアドレスを選択するステップとをさらに含む、請求項9に記載の方法。 - 命令キャッシュに記憶される分岐命令の結果に基づいて選択子ビットを更新するステッ
プをさらに含む、請求項10に記載の方法。 - 前記計算するステップは、
現在のフェッチアドレスから、テイクンであると予測される命令キャッシュからの第1の直接分岐命令への第1の特定のオフセットを決定するステップと、
第1の直接分岐命令内に即値データとして記憶される第2の特定のオフセットを検出するステップとを含み、
前記合計するステップは、現在のフェッチアドレスと第1のオフセットと第2のオフセットとを合計するステップを含む、請求項11に記載の方法。 - タグを用いて選択子ビットにアクセスするステップをさらに含む、請求項12に記載の方法。
- タグを用いて間接分岐ターゲットキャッシュにアクセスするステップをさらに含む、請求項13に記載の方法。
- 複数個のプリデコードビットを命令キャッシュに記憶するステップをさらに含み、プリデコードビットは、分岐命令の存在と、直接分岐命令に即値データとして記憶されるオフセットバイトの存在とを示す、請求項14に記載の方法。
- コンピュータシステムであって、
命令バイトを記憶するよう構成される命令キャッシュ手段を含み、命令キャッシュ手段は、フェッチアドレスを受取り、それに応答してフェッチアドレスに対応する命令バイトの1つ以上を出力するよう構成され、さらに、
複数個の選択子ビットを記憶するよう構成される分岐選択子アレイ手段を含み、各選択子ビットは、命令キャッシュ手段に記憶される特定の命令バイトに対応し、分岐選択子アレイ手段は、フェッチアドレスを受取り、それに応答して予測される次のフェッチアドレスのためのソースを示す1つ以上の対応する選択子ビットを出力するよう構成され、さらに、
フェッチアドレスをフェッチブロックサイズと合計して次のシーケンシャルなアドレスを生成するよう構成されるシーケンシャルアドレス加算器手段と、
命令キャッシュ手段に記憶される間接分岐命令のための予測される分岐ターゲットアドレスを記憶するよう構成される間接分岐ターゲットキャッシュ手段とを含み、間接分岐ターゲットキャッシュ手段は、フェッチアドレスを受取り、対応する間接分岐アドレスを出力するよう構成され、さらに、
フェッチアドレスを、命令キャッシュ手段によって出力される命令バイトからのオフセットと合計して直接分岐アドレスを計算するよう構成される直接分岐加算器手段と、
分岐選択子アレイ手段から1つ以上の対応する選択子ビットを受取るよう構成される選択子手段とを含み、選択子手段は、選択子ビットに基づいて次のシーケンシャルなアドレス、直接分岐アドレス、または間接分岐アドレスのいずれかを選択するよう構成される、コンピュータシステム。 - シーケンシャルアドレス加算器手段、直接分岐加算器手段、および間接分岐ターゲットキャッシュ手段は各々、次のシーケンシャルなアドレス、直接分岐アドレス、および間接分岐アドレスをそれぞれ並列に計算するよう構成される、請求項16に記載のコンピュータシステム。
- 命令キャッシュ手段によって出力される命令バイトからのオフセットを計算するよう構成されるオフセット計算論理ユニットをさらに含み、オフセット計算論理ユニットは、選択子ビットに基づいてオフセットを計算するよう構成される、請求項17に記載のコンピ
ュータシステム。 - 前記選択子ビットの2つが、前記命令キャッシュ手段に記憶される各命令バイトに対応し、前記2バイトは、対応する命令が、(i)分岐命令ノットテイクン、(ii)直接分岐命令テイクン、(iii)間接分岐アドレステイクン、または(iv)リターンアドレステイクンであるかを示す、請求項18に記載のコンピュータシステム。
- 命令キャッシュ手段は、命令バイトについてのプリデコード情報を記憶するよう構成され、プリデコード情報は、命令開始バイトを示すプリデコードビットを含む、請求項19に記載のコンピュータシステム。
- フェッチブロックサイズは定数である、請求項20に記載のコンピュータシステム。
- 前記選択子手段に結合され、コール命令のすぐ後に続く命令に対する命令ポインタを記憶するよう構成されるリターンスタックをさらに含む、請求項21に記載のコンピュータシステム。
- 前記分岐選択子アレイ手段および前記間接分岐ターゲットキャッシュ手段は各々、セットアソシアティブであり、もしあれば、どの記憶された選択子ビットおよび間接分岐ターゲットアドレスがフェッチアドレスに対応するかを決定するためにフェッチアドレスと比較されるタグを記憶するよう構成される、請求項17に記載のコンピュータシステム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/157,721 | 1998-09-21 | ||
US09/157,721 US6279106B1 (en) | 1998-09-21 | 1998-09-21 | Method for reducing branch target storage by calculating direct branch targets on the fly |
PCT/US1999/007266 WO2000017745A1 (en) | 1998-09-21 | 1999-04-02 | Method for calculating indirect branch targets |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2002525741A JP2002525741A (ja) | 2002-08-13 |
JP2002525741A5 JP2002525741A5 (ja) | 2006-03-30 |
JP3871883B2 true JP3871883B2 (ja) | 2007-01-24 |
Family
ID=22564987
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000571339A Expired - Fee Related JP3871883B2 (ja) | 1998-09-21 | 1999-04-02 | 間接分岐ターゲットを計算するための方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6279106B1 (ja) |
EP (1) | EP1116102B1 (ja) |
JP (1) | JP3871883B2 (ja) |
KR (1) | KR20010075258A (ja) |
DE (1) | DE69901910T2 (ja) |
WO (1) | WO2000017745A1 (ja) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6651162B1 (en) * | 1999-11-04 | 2003-11-18 | International Business Machines Corporation | Recursively accessing a branch target address cache using a target address previously accessed from the branch target address cache |
US6609194B1 (en) * | 1999-11-12 | 2003-08-19 | Ip-First, Llc | Apparatus for performing branch target address calculation based on branch type |
US6640297B1 (en) * | 2000-06-19 | 2003-10-28 | Transmeta Corporation | Link pipe system for storage and retrieval of sequences of branch addresses |
US6886093B2 (en) * | 2001-05-04 | 2005-04-26 | Ip-First, Llc | Speculative hybrid branch direction predictor |
US7165168B2 (en) * | 2003-01-14 | 2007-01-16 | Ip-First, Llc | Microprocessor with branch target address cache update queue |
US7200740B2 (en) * | 2001-05-04 | 2007-04-03 | Ip-First, Llc | Apparatus and method for speculatively performing a return instruction in a microprocessor |
US7134005B2 (en) * | 2001-05-04 | 2006-11-07 | Ip-First, Llc | Microprocessor that detects erroneous speculative prediction of branch instruction opcode byte |
US20020194461A1 (en) * | 2001-05-04 | 2002-12-19 | Ip First Llc | Speculative branch target address cache |
US6895498B2 (en) * | 2001-05-04 | 2005-05-17 | Ip-First, Llc | Apparatus and method for target address replacement in speculative branch target address cache |
US7165169B2 (en) * | 2001-05-04 | 2007-01-16 | Ip-First, Llc | Speculative branch target address cache with selective override by secondary predictor based on branch instruction type |
US7707397B2 (en) * | 2001-05-04 | 2010-04-27 | Via Technologies, Inc. | Variable group associativity branch target address cache delivering multiple target addresses per cache line |
US7162619B2 (en) * | 2001-07-03 | 2007-01-09 | Ip-First, Llc | Apparatus and method for densely packing a branch instruction predicted by a branch target address cache and associated target instructions into a byte-wide instruction buffer |
US6823444B1 (en) * | 2001-07-03 | 2004-11-23 | Ip-First, Llc | Apparatus and method for selectively accessing disparate instruction buffer stages based on branch target address cache hit and instruction stage wrap |
US7203824B2 (en) * | 2001-07-03 | 2007-04-10 | Ip-First, Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US7234045B2 (en) * | 2001-07-03 | 2007-06-19 | Ip-First, Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US20030088758A1 (en) * | 2001-11-08 | 2003-05-08 | Matthew Becker | Methods and systems for determining valid microprocessor instructions |
US6948053B2 (en) * | 2002-02-25 | 2005-09-20 | International Business Machines Corporation | Efficiently calculating a branch target address |
US7159097B2 (en) * | 2002-04-26 | 2007-01-02 | Ip-First, Llc | Apparatus and method for buffering instructions and late-generated related information using history of previous load/shifts |
US7533382B2 (en) * | 2002-10-30 | 2009-05-12 | Stmicroelectronics, Inc. | Hyperprocessor |
US7152154B2 (en) * | 2003-01-16 | 2006-12-19 | Ip-First, Llc. | Apparatus and method for invalidation of redundant branch target address cache entries |
US7143269B2 (en) * | 2003-01-14 | 2006-11-28 | Ip-First, Llc | Apparatus and method for killing an instruction after loading the instruction into an instruction queue in a pipelined microprocessor |
US7185186B2 (en) * | 2003-01-14 | 2007-02-27 | Ip-First, Llc | Apparatus and method for resolving deadlock fetch conditions involving branch target address cache |
US7178010B2 (en) * | 2003-01-16 | 2007-02-13 | Ip-First, Llc | Method and apparatus for correcting an internal call/return stack in a microprocessor that detects from multiple pipeline stages incorrect speculative update of the call/return stack |
US7743238B2 (en) * | 2003-05-09 | 2010-06-22 | Arm Limited | Accessing items of architectural state from a register cache in a data processing apparatus when performing branch prediction operations for an indirect branch instruction |
US7237098B2 (en) * | 2003-09-08 | 2007-06-26 | Ip-First, Llc | Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence |
US7487334B2 (en) * | 2005-02-03 | 2009-02-03 | International Business Machines Corporation | Branch encoding before instruction cache write |
US7409535B2 (en) * | 2005-04-20 | 2008-08-05 | International Business Machines Corporation | Branch target prediction for multi-target branches by identifying a repeated pattern |
US7844807B2 (en) * | 2008-02-01 | 2010-11-30 | International Business Machines Corporation | Branch target address cache storing direct predictions |
US7865705B2 (en) * | 2008-02-01 | 2011-01-04 | International Business Machines Corporation | Branch target address cache including address type tag bit |
US20110078425A1 (en) * | 2009-09-25 | 2011-03-31 | Shah Manish K | Branch prediction mechanism for predicting indirect branch targets |
US20110093658A1 (en) * | 2009-10-19 | 2011-04-21 | Zuraski Jr Gerald D | Classifying and segregating branch targets |
EP2597123B1 (de) | 2011-11-23 | 2017-06-14 | Basf Se | Wässriges Bindemittel für körnige und/oder faserförmige Substrate |
CN103513958B (zh) * | 2012-06-27 | 2017-01-25 | 上海芯豪微电子有限公司 | 高性能指令缓存***和方法 |
US9317293B2 (en) | 2012-11-28 | 2016-04-19 | Qualcomm Incorporated | Establishing a branch target instruction cache (BTIC) entry for subroutine returns to reduce execution pipeline bubbles, and related systems, methods, and computer-readable media |
US20140250289A1 (en) * | 2013-03-01 | 2014-09-04 | Mips Technologies, Inc. | Branch Target Buffer With Efficient Return Prediction Capability |
US9940262B2 (en) * | 2014-09-19 | 2018-04-10 | Apple Inc. | Immediate branch recode that handles aliasing |
US10936316B2 (en) | 2015-09-19 | 2021-03-02 | Microsoft Technology Licensing, Llc | Dense read encoding for dataflow ISA |
US11977891B2 (en) | 2015-09-19 | 2024-05-07 | Microsoft Technology Licensing, Llc | Implicit program order |
GB2573119A (en) * | 2018-04-24 | 2019-10-30 | Advanced Risc Mach Ltd | Maintaining state of speculation |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62226232A (ja) | 1986-03-28 | 1987-10-05 | Toshiba Corp | 分岐先アドレス算出回路 |
EP0253364A1 (de) | 1986-07-16 | 1988-01-20 | Siemens Aktiengesellschaft | Verfahren und Schaltungsanordnung zur Bearbeitung von unbedingten Sprungbefehlen in nach dem Fliessbandprinzip arbeitenden Datenverarbeitungsanlagen |
JP3494736B2 (ja) | 1995-02-27 | 2004-02-09 | 株式会社ルネサステクノロジ | 分岐先バッファを用いた分岐予測システム |
US5995749A (en) | 1996-11-19 | 1999-11-30 | Advanced Micro Devices, Inc. | Branch prediction mechanism employing branch selectors to select a branch prediction |
US6061786A (en) * | 1998-04-23 | 2000-05-09 | Advanced Micro Devices, Inc. | Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction |
-
1998
- 1998-09-21 US US09/157,721 patent/US6279106B1/en not_active Expired - Fee Related
-
1999
- 1999-04-02 DE DE69901910T patent/DE69901910T2/de not_active Expired - Fee Related
- 1999-04-02 WO PCT/US1999/007266 patent/WO2000017745A1/en not_active Application Discontinuation
- 1999-04-02 JP JP2000571339A patent/JP3871883B2/ja not_active Expired - Fee Related
- 1999-04-02 KR KR1020017003618A patent/KR20010075258A/ko not_active Application Discontinuation
- 1999-04-02 EP EP99915226A patent/EP1116102B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
WO2000017745A1 (en) | 2000-03-30 |
US6279106B1 (en) | 2001-08-21 |
JP2002525741A (ja) | 2002-08-13 |
DE69901910T2 (de) | 2003-02-13 |
EP1116102A1 (en) | 2001-07-18 |
DE69901910D1 (de) | 2002-07-25 |
KR20010075258A (ko) | 2001-08-09 |
EP1116102B1 (en) | 2002-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3871883B2 (ja) | 間接分岐ターゲットを計算するための方法 | |
JP3977015B2 (ja) | リネームタグのスワッピングにより転送を行なうレジスタリネーミング | |
JP3866918B2 (ja) | ルックアヘッド結果を発生し移動命令、比較命令および簡単な算術命令をまとめるよう構成されるプロセッサ | |
US6502185B1 (en) | Pipeline elements which verify predecode information | |
US6041405A (en) | Instruction length prediction using an instruction length pattern detector | |
US6339822B1 (en) | Using padded instructions in a block-oriented cache | |
EP1399824B1 (en) | Using type bits to track storage of ecc and predecode bits in a level two cache | |
US6092182A (en) | Using ECC/parity bits to store predecode information | |
US6125441A (en) | Predicting a sequence of variable instruction lengths from previously identified length pattern indexed by an instruction fetch address | |
US6055650A (en) | Processor configured to detect program phase changes and to adapt thereto | |
JP3919802B2 (ja) | プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 | |
US6275927B2 (en) | Compressing variable-length instruction prefix bytes | |
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 | |
US6427192B1 (en) | Method and apparatus for caching victimized branch predictions | |
EP1116103A1 (en) | Mechanism for store to load forwarding | |
US6542986B1 (en) | Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor | |
WO2007019001A1 (en) | Call return stack way prediction repair | |
JP3837289B2 (ja) | 同じ論理的空間を占有する複数のレジスタファイルを含むマイクロプロセッサ | |
US6212621B1 (en) | Method and system using tagged instructions to allow out-of-program-order instruction decoding | |
US6460132B1 (en) | Massively parallel instruction predecoding | |
US6460116B1 (en) | Using separate caches for variable and generated fixed-length instructions | |
US5951671A (en) | Sharing instruction predecode information in a multiprocessor system | |
US6363471B1 (en) | Mechanism for handling 16-bit addressing in a processor | |
US5961580A (en) | Apparatus and method for efficiently calculating a linear address in a microprocessor | |
US6604191B1 (en) | Method and apparatus for accelerating instruction fetching for a processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060207 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060207 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060928 |
|
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: 20061003 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061018 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |