JP3548255B2 - 分岐命令予測機構及び予測方法 - Google Patents
分岐命令予測機構及び予測方法 Download PDFInfo
- Publication number
- JP3548255B2 JP3548255B2 JP34032194A JP34032194A JP3548255B2 JP 3548255 B2 JP3548255 B2 JP 3548255B2 JP 34032194 A JP34032194 A JP 34032194A JP 34032194 A JP34032194 A JP 34032194A JP 3548255 B2 JP3548255 B2 JP 3548255B2
- Authority
- JP
- Japan
- Prior art keywords
- branch
- instruction
- target buffer
- entry
- address
- 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
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, 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
Description
【産業上の利用分野】
本発明はマイクロプロセッサ・アーキテクチャの分野に関し、特に命令の流れの中の分岐命令を予測する分岐目標バッファ回路に関する。
【0002】
【従来の技術】
初期のマイクロプロセッサは一般に命令を一時に1つ処理していた。各命令は次の4つの連続した段階を用いて処理されていた。すなわち、命令のフェッチ、命令の解読、実行及び結果の書き込みである。このようなマイクロプロセッサでは、別々の専用の論理ブロックがそれぞれ異なった処理段階を実行していた。各論理ブロックは動作開始前に、全ての前段の論理ブロックが動作を終了するまで待っていた。
【0003】
効率を向上させるため、設計者はマイクロプロセッサがいくつかの命令を同時に実行できるように、フェッチ、解読、実行、書き込みの論理段階を重複して行えるようにした。
動作中、フェッチ、解読、実行、書き込みの論理段階は異なった命令を同時に処理する。各クロック・サイクルで各処理段階の結果は次の処理段階へ送られる。フェッチ、解読、実行、書き込み段階を重複させる技術を使用したマイクロプロセッサは、「パイプライン化した」マイクロプロセッサとして知られている。ある種のマイクロプロセッサは更に各処理段階を小段階に分割して更に効率の向上を計っている。このようなプロセッサは「深くパイプライン化した」マイクロプロセッサと云われる。
【0004】
パイプライン化したマイクロプロセッサが効率よく動作するために、パイプラインの先頭にある命令フェッチ・ユニットがマイクロプロセッサ命令の流れをパイプラインに連続的に供給しなければならない。しかし、命令の流れの中にある条件命令のために、命令フェッチ・ユニットが次の命令を分岐条件が完全に分析されるまでフェッチすることができない。パイプライン化されたマイクロプロセッサにおいて、分岐条件はその分岐命令がマイクロプロセッサ・パイプラインの終わりに近い命令実行段階に到達するまで完全には分析されない。従って、命令フェッチ・ユニットは、分岐条件が未分析のため、次にどの命令をフェッチしたら良いかが分からず立ち往生してしまう。
【0005】
この問題を多少とも解決するために、多くのパイプライン化したマイクロプロセッサは、命令の流れにおいて分岐命令の存在と結論を予測する分岐予測機構を使用している。命令フェッチ・ユニットは、次の命令をフェッチするために分岐予測を使用する。例えば、イェー(Yeh)及びパット(Patt)は高精度2段階適用の分岐予測を導入した。(Tse Yu Yeh 及びYale N. Patt による「Two level Adaptive Branch Prediction」第24回ACM/IEEEマイクロ・アーキテクチャに関する国際シンポジュウム及びワークショップ(1991年11月、51頁ー61頁)参照)。イェーとパットの分岐予測機構は、収集した2段階の分岐歴に基づいて分岐予測を行う。
【0006】
分岐予測機構が分岐命令の結論を予測し、マイクロプロセッサがその予測された経路に沿って次の命令を実行するとき、そのマイクロプロセッサは予測された命令経路に沿って「推論的に実行した」と云われる。推論的な実行を行っている間、マイクロプロセッサは、もし分岐予測が正しく行われれば、有効な処理を実行する。しかし、もし分岐予測機構が間違って分岐命令を予測すると、マイクロプロセッサは推論実行の命令をまちがった経路で実行することになり、従って何も達成しないことになる。マイクロプロセッサが最終的に誤って予測された分岐を検出したとき、そのマイクロプロセッサは、推論で実行した全ての命令を無視し、正しいアドレスで実行を再スターとしなければならない。分岐命令がまちがって予測された場合、マイクロプロセッサは何も達成しないことになるので、正確に分岐命令の予測をすることが望ましい。このことは特に、誤った分岐予測がなされる度毎に長いパイプライン命令が無視される深くパイプライン化したマイクロプロセッサに関してうなずけるのである。
【0007】
【発明が解決しようとする課題】
従って、本発明の目的は、命令の流れにおいて分岐命令の存在を正確に予測する分岐予測機構を提供することである。
本発明の別の目的は、命令の流れの中で予測された全ての分岐命令の分岐結論を正確に予測することである。
更に本発明の別の目的は、「採択」と予測された全ての分岐命令に関する分岐目標アドレスを正確に予測することである。
【0008】
【課題を解決するための手段】
これらの目的及びその他の目的は本発明の分岐目標バッファ回路によって達成される。本発明の分岐目標バッファ回路は、分岐目標バッファ・キャッシュを備えている。分岐目標バッファ・キャッシュは、前に実行された分岐命令に関する情報を記憶する。分岐目標バッファ・キャッシュに格納された分岐情報は各分岐命令の最後のバイトによってアドレスされる。命令フェッチ・ユニットが命令のブロックをフェッチするとき、命令フェッチ・ユニットは分岐目標バッファ回路に命令ポインタを送る。この命令ポインタに基づいて、分岐目標バッファ回路は、分岐目標バッファ・キャッシュの中を見て、フェッチされるブロックの中に分岐命令があるかどうか調べる。分岐目標バッファ回路が分岐目標バッファ・キャッシュの中にやがて現れる分岐命令を見つけると、分岐目標バッファ回路は命令フェッチを担当する命令フェッチ・ユニットに対して知らせる。
【0009】
【実施例】
コンピュータ・プロセッサにおける分岐目標バッファ回路を実現する方法と装置が開示される。以下の記述において、説明の目的で本発明の充分な理解のために特定の術語が使われている。しかし、当業者には、これらの具体的詳細は本発明を実施するために必要ないことは明白である。更に、本発明を不必要に不明瞭にしないために、良く知られた回路や装置はブロック・ダイアグラムの形で示されている。
【0010】
パイプライン化したスーパースカラ・マイクロプロセッサ
深くパイプライン化したプロセッサにおいて、命令フェッチ、命令解読、命令実行等の主段階は、各処理段階がパイプライン化されるように異なったいくつかの小段階に分割される。これは長い命令パイプラインにおいて生ずる。例えば、図1は1つの特定の深くパイプライン化したプロセッサを定義する1組のパイプライン段階を示す。図1の命令パイプラインにおいて、命令処理は、11のパイプライン段階に分割されている。
【0011】
図1を参照すると、最初の2段階のパイプライン段階は、命令をフェッチするために使われている。パイプ段階3は、命令長解読(ILD)を実行する。個々のマイクロプロセッサ命令は、パイプ段階4及び5で解読される。次の3段階のパイプライン段階(レジスタ・リネーム、スケジューリング、分配)は実行のための命令を準備する。最後に、マイクロプロセッサは命令をパイプライン段階9で実行する。最後の2段階のパイプライン段階は、実行された命令を撤収する。
【0012】
マイクロプロセッサを効率良く動作させるために、図1の2段階の命令フェッチ・パイプライン段階は、マイクロプロセッサ命令の流れを連続的にフェッチしなければならない。各フェッチされた命令は、その命令がパイプライン段階9(すなわち実行段階)に到達するまで完全には実行されない。命令の流れの中にある分岐命令は、しばしば、分岐目標アドレスと呼ばれる連続しないアドレスでマイクロプロセッサに命令を実行するように仕向ける。パイプライン化したマイクロプロセッサが分岐命令に出会うと、その分岐命令はまだ解読されないか或いは実行されてないので、命令フェッチ段階は直ちにその分岐に対して反応することができない。従って、分岐命令は、マイクロプロセッサが推論的に実行した命令を後で捨て去り、訂正されたアドレスで再スタートしなければならないような、まちがった経路での推論的実行をマイクロプロセッサにさせる可能性がある。
【0013】
このような状況を防止するため、多くのパイプライン化したマイクロプロセッサは、命令の流れの中の分岐命令を予測する分岐予測機構を採用している。更に、このような分岐予測機構は、分岐命令の結論と分岐目標アドレスを予測する。図1に示すパイプラインのような深いパイプラインを有するマイクロプロセッサにおいて分岐命令を予測するため、本発明は、命令の流れの中で分岐命令の存在を予測する分岐目標バッファ回路を備えている。本発明の分岐目標バッファ回路は、深くパイプライン化したスーパースカラ・マイクロプロセッサの状況の中で開示されている。しかし、開示された分岐目標バッファ回路の個々の機構が異なったアーキテクチャの別のマイクロプロセッサにおいても実現できることは、当業者には明らかであろう。
【0014】
図2は、図1に示す深いパイプラインを実現する深くパイプライン化したスーパースカラ・マイクロプロセッサの主な論理回路をブロック・ダイアグラムの形で表している。図2に示すマイクロプロセッサの概略を説明し、続いて命令の流れの中で分岐命令の存在を予測する分岐目標バッファ回路40について詳しく説明する。
【0015】
図2のブロック・ダイアグラムの一番上にメモリ及びバス論理35がある。メモリ及びバス論理35は、情報をマイクロプロセッサへ入力し、マイクロプロセッサから情報を出力することを担当する。メモリ及びバス論理35は、通常先ず高速キャッシュ・メモリへ入力或いは高速キャッシュ・メモリから格納しようとする。もしキャッシュ・メモリが使えなければ(恐らくキャッシュ・ミスによる)、メモリ及びバス論理35は代わって外部バスを通して主メモリをアクセスする。
【0016】
メモリ及びバス論理35には命令フェッチ・ユニット30が結合されている。この命令フェッチ・ユニット30は、実行のため連続して新しいマイクロプロセッサ命令(マイクロ命令とも呼ばれる)とオペランドをフェッチすることを担当する。命令フェッチ・ユニット30は、命令ポインタ(IP)を使って現在のフェッチ・アドレスを維持する。フェッチされたマイクロプロセッサ命令は命令パイプラインの先頭に供給される。
【0017】
命令の流れの中の単純な無条件分岐命令は、命令フェッチ・ユニット30が連続経路に沿って単純に命令をフェッチすることを防止する。更に、命令の流れの中の条件分岐命令は、分岐条件が分析され、フェッチ経路が決定されなければならないので、命令フェッチ・ユニット30が所定の経路に沿って単純に命令をフェッチすることを防止する。正しい命令のフェッチを支援するため、命令フェッチ・ユニット30は分岐目標バッファ回路40に問い合わせる。分岐目標バッファ回路40は、命令の流れの中の分岐命令の存在を予測し、予測された分岐命令の結論を予測する。分岐目標バッファ回路40は、分岐予測情報を、命令フェッチ・ユニット30が適切な命令をフェッチできるように、命令フェッチ・ユニット30に返送する。
【0018】
命令フェッチ・ユニット30が各マイクロプロセッサ命令をフェッチした後、命令フェッチ・ユニット30は、各マイクロプロセッサ命令を命令解読器60に渡す。もし、分岐目標バッファ回路40が命令に関する分岐予測を行うと、命令フェッチ・ユニット30はまた、その命令に関する分岐目標バッファ回路の分岐予測を命令解読器60に渡す。
【0019】
命令解読器60は、どのタイプのマイクロプロセッサ命令を受け取ったかを判定し、マイクロプロセッサ命令を関連するオペランドと共に1つ以上のマイクロ演算(以後マイクロ・オペという)に分解する。マイクロプロセッサ命令に対応する1つ以上のマイクロ・オペは、対応するマイクロプロセッサ命令の機能を実行する。
【0020】
もし命令解読器60が、受け取ったマイクロプロセッサ命令が分岐命令であると判定すると、命令解読器60は、その分岐命令を記述する情報を特別の処理を行うために分岐アドレス計算器50へ送る。もし分岐目標バッファ回路40が、その分岐命令に対して分岐予測を行っていたとすれば、分岐アドレス計算器50は、できれば命令解読器60から受け取った分岐情報を使ってその分岐予測を検証する。もし分岐目標バッファ回路40が、その分岐命令に対して分岐予測を行っていなければ、分岐アドレス計算器50は、命令解読器60から受け取った分岐情報を使ってその分岐命令に対する分岐予測を行う。分岐アドレス計算器50が分岐命令の処理を完了した後、分岐アドレス計算器50は処理された分岐情報を命令解読器60に返す。
【0021】
命令解読器60がマイクロプロセッサ命令を1組のマイクロ・オペに分解した後、命令解読器60はそのマイクロ・オペと関連オペランドをアロケータ70へ送る。アロケータ70は、各マイクロ・オペを実行するのに必要なプロセッサ資源を割り当てる。
【0022】
本実施例において、マイクロプロセッサは元のプログラムの順序からはずれてマイクロ・オペを実行できるスーパースカラ・プロセッサである。しかし、適切にそのコンピュータ・プログラムを実行するために、実行されたマイクロ・オペは、最終的には元のプログラムの順序に戻されなければならない。元のプログラム順序を維持するため、マイクロプロセッサはマイクロ・オペの結果データを元のプログラム順序で格納するリオーダ・バッファ83を使用する。
【0023】
図3はリオーダ・バッファ83を示す。図3のリオーダ・バッファ83は、n個の記述欄を有する循環バッファからなっており、各記述欄は、実行されたマイクロ・オペの結果を格納するために使われる。リオーダ・バッファ83の各記述欄は、マイクロ・オペの結果データを物理的に格納する行き先を提供するので、リオーダ・バッファの各記述欄は物理的行き先(pDst)と呼ばれる。リオーダ・バッファ83内のpDstは、0からn−1までの番号が付けられている。図3を参照すると、リオーダ・バッファ83のpDstは、マイクロ・オペの結果が有効かどうかを示す有効ビット、マイクロ・オペの結果、マイクロ・オペによって影響された1組のフラグ、フラグに対するマスク、結果が何を意味するかを示すコード及び誤りデータを含む。
【0024】
各マイクロ・オペに関して、マイクロ・オペの結果を格納するため、アロケータ70は、リオーダ・バッファ83に次に使用可能なpDstを割り当てる。マイクロ・オペを受け取ったのと同じ順序でリオーダ・バッファ83内に連続してpDstを割り当てることによって、マイクロ・オペの結果の元のプログラム順序が維持される。
【0025】
アロケータ70がpDstを分岐命令に関する分岐マイクロ・オペに対してリオーダ・バッファ83内に割り当てるとき、同様に分岐目標バッファ回路40にある分岐IPテーブル(BIT)43と呼ばれる照合入力欄がバッファ内に割り当てられる。命令解読器60は、それから分岐目標バッファ回路40に対して、分岐命令の直ぐ後に続く命令のアドレスとプロセッサの状態値を送る。分岐目標バッファ回路40は、分岐命令の直ぐ後に続く命令のアドレスとプロセッサの状態値を分岐IPテーブル(BIT)43に書き込む。分岐IPテーブル(BIT)43に格納されたこの情報は、分岐実行ユニットが分岐マイクロ・オペを実行した後で使われる。
【0026】
アロケータ70はまた、各マイクロ・オペに関するマイクロ・オペ命令とオペランド・データを格納する予約ステーション(RS)81に1つの記述欄を割り当てる。各予約ステーション81の記述欄は、その予約ステーション81の記述欄が有効かどうかを示す有効ビット、マイクロ・オペ命令コード、2つのソース・データ・フィールド、ソース・データ・フィールドに対する2つの有効ビット、もしソース・データが有効でないときそのソース・データがどこから来たかを示す2つの物理的ソース・フィールド、及びマイクロ・オペの結果の物理的行き先を格納する。アロケータ70が予約ステーションの記述欄とリオーダ・バッファ83のpDstを割り当てた後、各マイクロ・オペは予約ステーション81の記述欄でマイクロ・オペが実行されるのを待つ。
【0027】
予約ステーション81の記述欄にある各マイクロ・オペは、マイクロ・オペを実行するのに必要な全てのソース・データが得られ、マイクロ・オペを実行する実行ユニットが用意できるまで予約ステーション81の入力欄に止まっている。マイクロ・オペに関して必要な全てのソース・データが用意でき、実行ユニットが使用可能になったとき、予約ステーション81は、マイクロ・オペを実行論理回路90の中の実行ユニットへ分配する。本実施例において、実行論理回路90内に4つの実行ユニット(EU1 91、EU2 92,EU3 93及びEU4 94)がある。実行ユニットがマイクロ・オペを実行した後、その実行ユニットは、結果データ、アーキテクチャ上のフラグ、及び誤り情報をアロケータ70がそのマイクロ・オペに対して割り当てたリオーダ・バッファ83のpDstに書き込む。
【0028】
本実施例において、実行ユニット92は分岐実行ユニットとして指定されている。分岐実行ユニット92は、各分岐マイクロ・オペに関して最終的分岐決定の結論と最終的分岐目標アドレスを決定する。分岐実行ユニット92は、この最終分岐結論及び分岐目標アドレスとを予測された分岐結論及び目標アドレスと比較する。もし分岐実行ユニット92が分岐予測の誤りを検出すると、分岐実行ユニット92は、分岐予測誤りを訂正する1組の行動を開始する。従って、分岐実行ユニット92は分岐分析機構の第3の段階を有する。
【0029】
最後に、撤収回路85は、リオーダ・バッファ83のpDstに格納されている結果を各実行されたマイクロ・オペから撤収する。撤収回路85は、リオーダ・バッファ83のpDstを順番に調べて、アロケータ70がpDstを割り当てたときと同じ順序でリオーダ・バッファ83のpDstを撤収させる。撤収回路85は、現在約束されたアーキテクチャ上の状態を格納する実レジスタ・ファイル(RRF)84へマイクロ・オペの結果を転送することによってpDstを撤収させる。アロケータ70が、リオーダ・バッファ83のpDstを元のプログラム順に割り当て、撤収回路85がリオーダ・バッファ83のpDstのマイクロ・オペの結果を同じ順序で撤収するので、仮にマイクロ・オペが元のプログラム順序からはずれて実行されたとしても元のプログラム順序は維持される。
【0030】
図3を参照すると、マイクロ・オペを撤収させるために、撤収回路はリオーダ・バッファのpDst記述欄の有効ビット201をテストし、そのpDstが実行されたマイクロ・オペの有効な結果を持っているかどうか調べる。もしそのpDstの有効ビット201がセットされていれば、撤収回路はpDstの誤りフィールド206をチェックして誤りを処理しなければならないかどうか調べる。もしリオーダ・バッファのpDst記述欄が有効なマイクロ・オペ実行結果を持っており、誤り問題がなければ実行されたマイクロ・オペの結果は、実レジスタ・ファイル(RRF)84の永久アーキテクチャ状態に入れられる。
【0031】
撤収回路85が分岐マイクロ・オペを撤収しようとするとき、撤収回路85はpDst記述欄の誤りフィールド206をテストし、分岐マイクロ・オペが誤って予測されたかどうか調べる。もし撤収回路が、マイクロ・オペが誤って予測されたことを検出すると、撤収回路85は、リオーダ・バッファ83にある残りの命令を捨て去る。これは、これらの命令は誤った分岐予測が行われた後フェッチされたためである。
【0032】
分岐目標バッファ回路の概観
前述のマイクロ・プロセッサ概観の節で述べたように、命令フェッチ・ユニット30は、命令をマイクロ・プロセッサへフェッチしてくることを担当する。図2のマイクロ・プロセッサの命令フェッチ・ユニット30は、メモリ・アドレス空間を命令フェッチ・ユニット30が命令とオペランドを16バイトのブロックでフェッチする整列した16バイト・ブロックの集合とみなす。図4は、アドレス空間が整列した16バイト・ブロックに分割されたメモリ・マップを示す。命令フェッチ・ユニット30は、命令ポインタを使って現在のフェッチ・アドレスを維持する。コード中に分岐命令がない場合、命令フェッチ・ユニット30は、隣接した16バイト・ブロックを順次フェッチすることによって、命令及ぶオペランドをフェッチする。
【0033】
命令の流れの中で分岐命令の存在を予測するために、図2のマイクロプロセッサは分岐目標バッファ回路40を採用している。分岐目標バッファ回路40は、マイクロプロセッサが前に実行した分岐命令に関する情報を有する分岐目標バッファ・キャッシュ41を備えている。分岐目標バッファ回路40は、その分岐目標バッファ・キャッシュ41の情報を使って分岐命令を認識し、分岐命令の結論を予測する。
【0034】
分岐目標バッファ回路40はまた、現在マイクロプロセッサ内にある分岐命令に関する情報を有する分岐IPテーブル(BIT)43を有する。分岐IPテーブル43の情報は、誤って予測された分岐命令を訂正し、分岐命令が実行された後分岐目標バッファ・キャッシュ41を維持するために使われる。
【0035】
図5は、どのように分岐目標バッファ回路40が、図2のマイクロプロセッサの他の主な論理回路と相互に作用するかを示すブロック・ダイアグラムである。命令フェッチ・ユニット30は、命令ポインタを分岐目標バッファ回路40に送ることによって分岐目標バッファ回路40から到達すべき分岐命令に関する情報を要求する。分岐目標バッファ回路40へ送られる命令ポインタは、命令フェッチ・ユニット30によって現在フェッチされているメモリ・ブロックを指す。
【0036】
分岐目標バッファ回路40は、分岐目標バッファ・キャッシュ41をサーチし、命令フェッチ・ユニット30によって現在フェッチされているメモリ・ブロックにある分岐命令に関する情報を探す。分岐目標バッファ回路40は、分岐目標バッファ・キャッシュ41内で見つかった命令フェッチ・ユニット30によって現在フェッチされているメモリ・ブロック内にある分岐命令に関する分岐予測を行う。分岐目標バッファ回路40は、分岐予測情報を命令フェッチ・ユニット30へ送り、命令フェッチ・ユニット30に対して、現在命令フェッチ・ユニット30によってフェッチされているメモリ・ブロック内にある分岐命令について知らせる。
分岐目標バッファ・キャッシュ41及び分岐IPテーブル43を維持するために、分岐目標バッファ回路40は、マイクロプロセッサ内の他のいくつかの論理回路から情報を受け取る。
【0037】
図5を参照すると、命令解読器60は分岐情報を分岐目標バッファ回路40へ送る。命令解読器60から送られる分岐情報は、その分岐命令の直ぐ後に続く命令のアドレスを含む。分岐目標バッファ回路40は、後で使うため、分岐命令の直ぐ後に続く命令のアドレスを分岐IPテーブル43に格納する。
【0038】
分岐アドレス計算器50は、分岐目標バッファ回路40によって行われた分岐予測を検証する。もし分岐アドレス計算器50が、分岐目標バッファ回路40が存在しない分岐について予測したと判定すれば、分岐アドレス計算器50は分岐目標バッファ回路40に対して、存在しない分岐命令を含む分岐目標バッファ・キャッシュ41の記述欄を取り除くように指示する。
【0039】
アロケータ70は、リオーダ・バッファ83を各マイクロ・オペに対して割り当てるのを担当する。アロケータ70が、分岐マイクロ・オペに関してリオーダ・バッファ83のpDst記述欄を割り当てるとき、アロケータ70は、pDstの記述欄番号を分岐目標バッファ回路40に提供する。分岐目標バッファ回路40は、pDst記述欄番号を、分岐IPテーブル43の対応する記述欄を割り当てるために使用する。分岐IPテーブル43の対応する記述欄は、分岐マイクロ・オペがマイクロプロセッサ内に存在する間、その分岐マイクロ・オペについての情報を記憶する。
【0040】
予約ステーション81は、実行を待っているマイクロ・オペを記憶し、用意ができたマイクロ・オペをマイクロプロセッサ内の実行ユニットへ分配する。予約ステーション81が分岐マイクロ・オペを実行ユニット92へ分配するとき、予約ステーション81は、分岐目標バッファ回路に対して分岐マイクロ・オペに関するpDst記述欄について知らせる。分岐目標バッファ回路40は、分岐IPテーブル43の分岐命令に関する対応する記述欄を読み出すことによって応答する。分岐IPテーブル43の記述欄から読み出された情報は、分岐マイクロ・オペが実行した後で使われる。
【0041】
分岐実行ユニット92は、マイクロプロセッサに関する分岐マイクロ・オペを実行する。分岐実行ユニット92が分岐マイクロ・オペを実行するとき、分岐実行ユニット92は、分岐分析情報を分岐目標バッファ回路40に提供する。分岐目標バッファ回路40は、分岐分析情報を使って、分岐目標バッファ・キャッシュ41の既存の記述欄を更新するか或いは、分岐目標バッファ・キャッシュ41に新しい記述欄を割り当てる。
【0042】
分岐目標バッファ・キャッシュ
分岐目標バッファ回路40は、分岐目標バッファ・キャッシュ41を維持し、命令の流れの中の分岐命令の存在とこれら分岐命令の結論を予測する。分岐目標バッファ・キャッシュ41は、マイクロプロセッサが前に実行した分岐命令に関する情報を有する。図6は、分岐目標バッファ・キャッシュ41の構成を示す。
【0043】
分岐目標バッファ・キャッシュ41は、メイン・メモリに配置された分岐命令についての情報を記憶するセット・アソシアティブ・キャッシュである。本実施例において、分岐目標バッファ・キャッシュ41は、分岐命令についての情報を分岐情報の128個の別々の「セット」で記憶する。分岐目標バッファ・キャッシュ41の分岐情報の各セットは、4個の分岐エントリを有し、各分岐エントリは、マイクロプロセッサが前に実行した単一の分岐命令についての情報を保有する。
【0044】
分岐目標バッファ・キャッシュ41内の分岐エントリの各セットはまた、分岐パターン・テーブル421及び一対の疑似最近置換(Pseudo−Least Recently Replaced(PLRR))ビット420を含む。分岐目標バッファ回路40は、分岐エントリのセットの中の条件分岐命令の結論を予測するために分岐パターン・テーブル421を使う。分岐目標バッファ回路40は、疑似最近置換(PLRR)ビット420を使って、新しい分岐についての情報が分岐エントリのセットに書かれるときに分岐エントリを選択する。
【0045】
図7は、分岐目標バッファ・キャッシュ41のセットの各分岐エントリ内に格納された分岐情報を示す。図7に示すように、各分岐エントリは、短縮タグ・アドレス401、ブロック・オフセット402、分岐タイプ403、真の分岐歴404、推論分岐歴405、推論ビット406、有効ビット407及び分岐目標アドレス408を含む。
【0046】
短縮タグ・アドレス401及びブロック・オフセット402は、分岐エントリと関連する分岐命令のメモリ・アドレスを識別するために使われる。短縮タグ・アドレス401は、分岐命令の最上位21ビットの圧縮された9ビット表現である。
【0047】
ブロック・オフセット値402は、分岐命令の最後のバイトの16バイト・メモリ・ブロック・アドレスの中のバイト・オフセットを表す。分岐命令は最後のバイトで索引され、ブロックの境界分岐命令の全てのバイトが分岐予測を行う前にフェッチされる。例えば、図4のメモリ・マップを再び参照すると、4バイト長の分岐命令がヘキサデシマル・アドレス1Eないし21で示されている。実行後、4バイトの分岐命令は分岐目標バッファ・キャッシュ41内の記述欄に置かれ、ヘキサデシマル・アドレス21と関連される。従って、その分岐命令に対する分岐エントリのブロック・オフセット402は1にセットされる。
【0048】
逆に、もし分岐命令が最初のバイト(ヘキサデシマル1E)で索引されるとすると、分岐目標バッファ回路40は命令フェッチ・ユニット30に対して分岐命令を構成する全てのバイトがフェッチされる前に分岐目標アドレスからフェッチするように指示する。従って命令解読器60及び分岐実行ユニット92は、全体の分岐命令がフェッチされないので、分岐命令を検証することができない。
【0049】
各分岐エントリの分岐タイプ・フィールド403は、どのタイプの分岐命令を分岐エントリが識別するかを指定する。表1は異なったタイプの分岐命令をリストしたものである。
【0050】
【0051】
分岐目標バッファ回路40は、異なった分岐命令に対しては異なった分岐予測機構が使われるので、分岐予測をするとき分岐タイプ・フィールド403を使う。例えば、分岐目標バッファ回路40は、分岐命令歴に基づいて条件分岐命令の結論を予測する。分岐目標バッファ回路40は、無条件分岐命令を常に「採択」と予測する。
【0052】
図7の真の分岐歴フィールド404は、分岐実行ユニット92によって決定された「採択(taken)」か「不採択(not−taken )」かの分岐命令歴を維持する。真の分岐歴フィールド404は、最後の4回の分岐命令の履歴を4ビットを使って記憶する。この4ビットは、それぞれ「0」のとき「不採択」、「1」のとき「採択」を示す。4ビットの「採択」(taken )、「不採択」(not−taken )の履歴は、分岐予測を計算するとき、パターン状態テーブルを索引するのに使われる。これは分岐実行における分岐結論に基づく。
【0053】
推論ビット406及び推論的分岐歴フィールド405は、分岐命令の実行を待たずに分岐命令の予測を行うのに使われる。図7の推論的分岐歴フィールド405は、分岐目標バッファ回路40によって行われた最後の4回の分岐予測に関する分岐命令の推論的「採択」(taken )、「不採択」(not−taken )の履歴を維持する。推論ビット406は、推論的分岐歴フィールド405が有効推論歴を含むときセットされる。推論的分岐歴405の4ビットは、分岐予測を計算するときパターン状態テーブルを索引するのに使われ、推論ビット406がセットされる。推論的分岐歴を使った分岐命令の予測に関する詳細については、1993年5月14日出願の米国特許出願第08/062,012号「分岐目標バッファにおける推論歴機構を参照されたい。」
【0054】
有効ビット407は、分岐エントリが有効分岐情報を含むかどうかを示す。分岐目標バッファ回路40が、分岐エントリを割り当て、記入するとき、分岐目標バッファ回路40は、そのエントリに対する有効ビット407をセットし、そのエントリが有効分岐情報を有することを示す。後で、分岐アドレス計算器50がその分岐エントリを取り除くとき、取り除かれるエントリの有効ビットはクリアされる。
【0055】
図7の分岐目標アドレス・フィールド408は、分岐命令がサブルーチンからの戻り命令以外の場合、分岐命令に対する分岐目標アドレスを記憶する。もし分岐目標バッファ回路40が、分岐エントリに関する分岐命令が「採択」であると予測すると、分岐目標アドレス・フィールド408のアドレスは命令フェッチ・ユニット30に送って、命令フェッチ・ユニット30に次の命令をどこからフェッチすれば良いかを知らせる。(しかし、分岐目標アドレス・フィールド408は常に目標アドレスを予測するために使われるわけではない)。分岐目標アドレス・フィールド408の上位28ビットは、もし分岐が行われれば命令フェッチ・ユニット30がフェッチすべき16バイト・ブロックを選択する。分岐目標アドレス・フィールド408の最下位4ビットは、マイクロプロセッサが実行を再開すべきフェッチされたブロックの中のバイトを選択する。
【0056】
分岐目標バッファ・キャッシュを用いた分岐命令の予測
命令フェッチ・ユニット30は、命令ポインタを分岐目標バッファ回路40に送ることによって、やがて現れる分岐命令についての情報を要求する。図8は、やがて現れる分岐命令に関する分岐目標バッファ・キャッシュ41をサーチするとき、分岐目標バッファ回路40によって実行されるステップを示している。ステップ101で、分岐目標バッファ回路40は、命令フェッチ・ユニット30から命令ポインタを受け取る。
【0057】
ステップ102で、分岐目標バッファ回路40は、命令ポインタを使って分岐目標バッファ・キャッシュ41から4つの分岐エントリのセットを読み出す。分岐目標バッファ回路40がどのように命令ポインタを使うかを明確にするため、図9(a)は分岐目標バッファ・キャッシュ41が分岐命令のアドレスを識別するのに使う32ビットの命令ポインタ・アドレスの個々のビットを示している。アドレスの上位28ビットはメモリ・ブロックを識別する。アドレスの最下位4ビットは16バイト・ブロックのオフセット位置を示す。分岐目標バッファ・キャッシュ41において、各エントリは、16バイト・ブロック内で関連する分岐命令の最後のバイトを突き止めるブロック・オフセットを含む。
【0058】
メモリ・ブロックを識別するアドレスの上位28ビットは、2つの別々のセクションに分割される。最上位21ビット(ビット11から31まで)は、分岐目標バッファ・キャッシュ41における各分岐エントリに関連するタグを表す。残りの7ビット(ビット4から10まで)は、分岐目標バッファ・キャッシュ41内の分岐エントリのセットを識別する「セット・ビット」である。
【0059】
分岐目標バッファ回路40は、命令ポインタの7ビット(ビット4から10まで)を使って分岐目標バッファ・キャッシュ41を索引し、分岐エントリのセットを選択する。分岐目標バッファ回路40は、それから選択された分岐エントリのセットを読み出す。
【0060】
ステップ103で、分岐目標バッファ回路40は、選択されたセット内の4つの分岐エントリを検査し、4つの分岐エントリのどれかが、命令ポインタによって指定された16バイト・ブロックの中に分岐命令に関する情報を含んでいるかどうか判定する。具体的には、分岐目標バッファ回路40は、命令ポインタ・アドレスの上位21ビットの9ビット圧縮バージョンを各分岐エントリの短縮タグ・フィールド401と比較し、合致しない分岐エントリを除外する。
【0061】
分岐目標バッファ・キャッシュ41を構成するのに必要なダイ領域を削減するため、分岐目標バッファ・キャッシュ41の各分岐エントリは、圧縮されたタグ・アドレスを記憶する。望ましい実施例において、正規の21ビット・タグ値は、タグを9ビットに削減する短縮機構を通される。タグ・アドレスの圧縮はいくらかの情報を失い、エイリアシングを引き起こすことがある。圧縮タグによって起こったエイリアシングは、たまに分岐予測誤りを起こすことがある。しかし、分岐予測誤りは、最終的には、マイクロプロセッサの分岐アドレス計算器50又は分岐実行ユニット92によって治される。
【0062】
本発明の分岐目標バッファ回路40は、2つの異なった短縮機構を使ってタグ・アドレスを圧縮する。両方の短縮機構は、正規の21ビット・タグ・アドレスを9ビットの短縮タグに縮める。マイクロプロセッサの機械固有レジスタ(MSR)は、2つのタイプの短縮機構のうちから1つを選択する。
【0063】
図9(b)は、第1の短縮機構の動作を示す。第1の短縮機構は、正規のタグ・アドレスの最上位2ビット(ビット30及び31)と正規のタグ・アドレスの最下位7ビット(ビット11から17まで)を連結して9ビットの短縮タグを生成する。この第1の短縮機構は、通常下位7ビットが有用である極所的ジャンプを行い、たまに最上位2ビットが有用となる遠くオペレーティング・システム・ルーチンへジャンプするプログラムに関してうまく働く。
【0064】
図9(a)は、第2の短縮機構の動作を示す。第2の短縮機構は、正規のタグ・アドレスの最上位2ビット(ビット30及び31)、正規のタグ・アドレスの次の16ビット(ビット14から29まで)の4ビット排他的論理和(XOR)の組み合わせ及び正規のタグ・アドレスの最下位3ビット(ビット11から13まで)を連結して9ビット短縮タグを生成する。4ビット排他的論理和(XOR)組み合わせは、中間の16ビット(ビット14から29まで)を図9(c)に示すように4つのグループにまとめて組み合わせることによって生成される。この第2の短縮機構は、全てのタグ・ビットが考慮されているので、どこへでもジャンプするプログラムに対してうまく働く。最上位2ビット(ビット30及び31)は、現アドレスから遠くはなれたオペレーティング・システム・ルーチンに対する呼び出し(call)を検出するため、そのまま保持されることに留意されたい。
【0065】
分岐目標バッファ・キャッシュ41を検査するとき、分岐目標バッファ回路40は、現命令ポインタの上位21ビットを短縮機構に通し、短縮命令ポインタ値を選択されたセットの4つの分岐エントリにある短縮タグ・フィールド401と比較する。分岐目標バッファ回路40は、現短縮命令ポインタの値と一致しない短縮タグ・フィールド401を有する分岐エントリを除外する。
【0066】
ステップ104で、分岐目標バッファ回路40は、現命令ポインタよりも前にある分岐命令を識別する選択されたセットの分岐エントリを除外する。例えば、図4のメモリ・マップを参照すると、4バイト長の分岐命令がヘキサデシマル・アドレス1E〜21に示されている。ヘキサデシマル・アドレス1Eから21の分岐命令は、分岐目標バッファ・キャッシュ41の分岐エントリに置かれており、ヘキサデシマル・アドレス21と関連している。これはヘキサデシマル・アドレス21がその分岐命令の最後のアドレスであるからである。従って分岐エントリのブロック・オフセット・フィールド402は1にセットされる。もし現命令ポインタがヘキサデシマル・アドレス23を指しているとすれば、分岐目標バッファ回路40は、ブロック・オフセット・フィールド402の3未満の値を有する全ての分岐エントリを除外し、ヘキサデシマル・アドレス21の分岐命令に関する分岐エントリはもはや考慮されない。
【0067】
残りの分岐エントリは、現分岐ポインタによって指定された16バイト・ブロック内の分岐命令を記述し、現分岐ポインタの後にある。ステップ105で、分岐目標バッファ回路40は、残りの分岐エントリのブロック・オフセット・フィールド402を使って残りの分岐エントリを整理する。分岐目標バッファ回路40は、もし「採択された」分岐命令があれば、残りの整理された分岐エントリから最初の「採択された」分岐命令を選択する。
残りの整理された分岐エントリから最初の「採択された」分岐命令を選択するため、分岐目標バッファ回路40は、選択されたセットの中の全ての残りの分岐エントリに対して分岐結論予測を行わなければならない。
【0068】
分岐結論及び分岐目標アドレスの予測
各エントリに対する分岐結論予測を行うために、分岐目標バッファ回路40は、先ず分岐タイプ・フィールド403を読む。分岐目標バッファ回路40は、どのタイプの分岐命令が予測されるのかによって異なった分岐予測を行う。
【0069】
分岐タイプ・フィールドは、予測される分岐命令が条件分岐、無条件分岐、サブルーチンの呼び出し分岐、或いはサブルーチンからの戻り分岐のどれであるかを示す。サブルーチン呼び出し及びサブルーチンからの戻り分岐命令は、無条件分岐命令の特定のタイプだが、これらは2つの異なったタイプとしてマークされている。分岐目標バッファ回路40は、サブルーチン呼び出し及びサブルーチンからの戻り分岐命令を、これら2つのタイプの分岐命令が予測されると分岐目標バッファ回路40が特別の動作を行うので、異なったタイプとしてマークする。
【0070】
表2は分岐目標バッファ回路40がどのようにして分岐目標バッファ・キャッシュ41に記憶された4つのタイプの分岐命令に対する分岐結論と目標アドレスを予測するかをまとめたものである。
【0071】
【0072】
表2で述べたように、条件分岐命令以外の全ての分岐命令は、「採択」と予測される。条件分岐命令の結論を予測するため、分岐目標バッファ回路40は、イェ−及びパットの2段階適用分岐予測機構を使う(Tse Yu Yeh 及びYale N. Patt による「2段階適用分岐予測」(1991年11月第24回ACM/IEEマイクロ・アーキテクテャに関する国際シンポジュウム及びワークショップ)51頁から61頁を参照)。イェー及びパットの2段階分岐予測機構は、2段階の分岐歴をダイナミックに維持する。
【0073】
2段階の分岐予測機構において維持される第1段階の分岐歴は、各分岐エントリ内に記憶された「採択」、「不採択」の履歴である。例えば、「不採択」、「採択」、「採択」、「不採択」の分岐歴は、「0110」で表される。本実施例では、2つのバージョンの分岐歴が記憶される。すなわち、真の分岐歴及び推論的分岐歴である。真の分岐歴は、分岐実行ユニット92の決定に従って分岐命令の最後の4つの結論を記憶する。推論的分岐歴は、分岐目標バッファ回路40の予測に従って分岐命令の最後の4つの結論を記憶する。推論歴は、真の分岐歴が充分迅速に更新されないと考えられるので、小さな(または「きつい」)ループ内の分岐命令を予測する問題を解決するために使われる。本明細書は真の分岐歴に傾中するけれども、推論的分岐歴についての追加情報は、1993年5月14日出願の米国特許出願第08/062,012号「分岐目標バッファにおける推論歴機構」に見られる。
【0074】
2段階適用分岐予測機構に維持される第2段階の分岐歴は分岐パターン歴である。分岐パターン歴は、同じ分岐歴を有する分岐命令の前の分岐結論に基づいた分岐命令の有望な結論を示す。分岐パターン歴は、各可能な分岐歴パターンに対して2ビットの状態値として記憶される。本実施例では、4ビットの分岐歴が記憶されるので、図10(a)に示すように、16の可能な分岐歴パターンに対して16の状態値がある。2ビットの状態値は、分岐パターンを図10(b)に示すように強く「採択」、弱く「採択」、弱く「不採択」、強く「不採択」に分類する。
【0075】
分岐パターン歴は、同じ分岐パターンが前に発生していた場合に生成される。毎回条件分岐命令が分析されると、分岐パターン・テーブルは、図10(b)の状態移行矢印で示すようにリー及びスミス(Lee & Smith )の飽和上/下カウンタを使って更新される。
【0076】
1つの分岐予測例が図10(a)を参照して与えられている。図10(a)を参照すると、条件分岐命令に対する4ビットの分岐歴が「不採択」、「採択」、「採択」、「不採択」(0110)パターンを記憶している。4ビットの分岐パターンは、各分岐パターンに関する分岐パターン歴状態値を記憶する分岐パターン・テーブルの索引に使われる。図10(a)において、「0110」の分岐パターンは、「弱く採択」の状態を表す「10」状態値を索引する。分岐予測機構は、従って分岐が「採択」されると予測する。分岐命令が分岐実行ユニット92によって分析されると、分岐実行ユニット92は、分岐に関する分岐歴及び分岐パターン・テーブルの適当な状態値の記述欄を更新する。
【0077】
分岐目標バッファ回路40が、整理されたセットの中の全ての条件分岐命令に関する分岐結論を決定した後、分岐目標バッファ回路40は、最初に採択された分岐命令をサーチする。もし分岐命令が「採択」される予測が何もなければ命令フェッチ・ユニット30は、次の連続したメモリ・ブロックをフェッチする。しかし、選択されたセットの中に「採択」される分岐命令があると、分岐目標バッファ回路40は最初の「採択」された分岐命令に対する分岐目標アドレスを予測する。
【0078】
表2は、どのようにして分岐目標バッファ回路40が、分岐命令が採択されると予測されたとき分岐タイプ・フィールド403に示すような各タイプの分岐命令に対する分岐目標アドレスを予測するかを記述している。表2で述べたように、分岐目標バッファ回路40は、分岐目標バッファ・キャッシュ41の分岐目標アドレス・フィールド408に与えられたアドレスへの分岐を予測することによって無条件、条件付き、及びサブルーチンへジャンプする分岐命令を処理する。しかしサブルーチンからの戻り命令は異なって処理される。
【0079】
分岐目標バッファ回路40がサブルーチンからの戻り命令を予測したとき、分岐目標バッファ回路40は、戻りレジスタ又は分岐アドレス計算器50の戻りスタック・バッファから戻りアドレスを予測する。サブルーチンからの戻り命令に対する戻りアドレスの予測についてのより多くの情報は、 年 月出願の米国特許出願 号「コンピュータ・プロセッサにおけるサブルーチンからの戻り命令を分析する方法と装置」に見られる。
【0080】
分岐目標バッファ回路40は、予測された分岐目標アドレスを命令フェッチ・ユニット30に送る。命令フェッチ・ユニット30は、予測された分岐目標アドレスを使って次のメモリ・ブロックをフェッチする。
【0081】
分岐命令ポインタ・テーブル
分岐目標バッファ・キャッシュ41に加えて、分岐目標バッファ回路40は、分岐命令ポインタ(IP)テーブル43と呼ばれる別のキャッシュを維持する。分岐IPテーブル43は、現在マイクロプロセッサ内にある全ての未解決の分岐マイクロ・オペを記憶する。各マイクロ・オペが実行された後、分岐IPテーブル43に記憶された情報が読み出され、分岐目標バッファ・キャッシュ41を更新するか又は分岐予測誤りの場合はマイクロプロセッサを再スタートさせる。
【0082】
図11に本発明の分岐IPテーブル43を示す。分岐IPテーブル43はn個の分岐エントリを有するバッファを備えている。ここでnはリオーダ・バッファ83のエントリの数に等しい。分岐IPテーブル43内の各分岐情報記述欄は、次の線形命令ポインタ(NLIP)アドレス・フィールド及びプロセッサ状態情報フィールドから構成される。
【0083】
次の線形命令ポインタ(NLIP)アドレス・フィールドは、分岐マイクロ・オペに関連する分岐命令の直ぐ後に続く命令のアドレスを記憶する。命令フェッチ・ユニット30は、その分岐が誤って「採択」と予測され、その分岐が「採択」されるべきでなかったとき、次の線形命令ポインタ(NLIP)アドレスを使う。
【0084】
次の線形命令ポインタ(NLIP)アドレスはまた、新しい分岐エントリを割り当てるとき又は既存の分岐エントリの分岐歴情報を更新するとき分岐目標バッファ・キャッシュ41を索引するのに使われる。新しい分岐エントリを割り当てるとき又は既存の分岐エントリを更新するとき、次の線形命令ポインタ(NLIP)アドレスは1減分され、分岐命令の最後のバイトのアドレスを生成する。分岐命令の最後のバイトのアドレスは、分岐目標バッファ・キャッシュ41を索引するため分岐目標バッファ回路40によって使われる。
【0085】
プロセッサ状態情報フィールドは、分岐予測を行った後マイクロプロセッサが推論的実行を開始するときに変造されるかも知れない状態情報を記憶するのに使われる。もしマイクロプロセッサが、分岐予測誤りによって間違った経路で推論的に実行を行うと、予測誤りが検出されたとき、状態情報は分岐IPテーブル43から復帰させることができる。本実施例において、マイクロプロセッサ状態情報フィールドは、分岐アドレス計算器50の戻りスタック・バッファに対するスタック・ポインタを記憶する。
【0086】
マイクロプロセッサ概観において述べたように、アロケータ70が分岐マイクロ・オペに対するリオーダ・バッファ83のpDst記述欄を割り当てるとき、分岐IPテーブル43の対応する記述欄が割り当てられる。命令解読器60は、分岐目標バッファ回路40に割り当てられたpDst記述欄、プロセッサ状態情報及び次の線形命令ポインタ(NLIP)アドレスについて知らせる。分岐目標バッファ回路40は、プロセッサ状態情報及び次の線形命令ポインタ(NLIP)アドレスを対応する分岐IPテーブル43の記述欄に書く。分岐IPテーブル43についてのより多くの情報は 年 月出願の米国特許出願第 号「分岐命令ポインタ・テーブルに関する方法と装置」に見られる。
【0087】
分岐目標バッファ・キャッシュの更新
図2を参照すると、各分岐マイクロ・オペは、その分岐マイクロ・オペを実行するのに必要な全てのソース・データが得られ、分岐実行ユニット92が使用可能になるまで予約ステーション81の記述欄に止まっている。分岐マイクロ・オペを実行するのに必要なソース・データがそろったとき、予約ステーション81は分岐マイクロ・オペを分岐実行ユニット92へ送る。
【0088】
分岐目標バッファ回路40は、マイクロ・オペを予約ステーション81から分岐実行ユニット92へ送るバスを監視する。予約ステーション81が分岐マイクロ・オペを分岐実行ユニット92へ送るのが分かると、分岐目標バッファ回路40は、リオーダ・バッファのどのpDst記述欄番号が分岐マイクロ・オペの結果を格納するのに使われるかに注目する。分岐実行ユニット92が分岐マイクロ・オペを実行する際、分岐目標バッファ回路40は、リオーダ・バッファ83のpDst記述欄と同じ記述欄番号を有する分岐IPテーブル43の記述欄を読み出す。このようにして、分岐マイクロ・オペが分析されるとき、実行される分岐マイクロ・オペに関連する記憶された分岐情報が利用可能になる。
【0089】
分岐実行ユニット92は、最終的分岐目標アドレス及び最終的分岐結論(「採択」又は「不採択」)を決定することによって分岐マイクロ・オペを実行する。分岐実行ユニット92は、最終分岐結論を予測された分岐結論と比較して、分岐予測が正しかったかどうか調べる。もし分岐予測が正しければ、プロセッサは予測された経路に沿って続行する。もし分岐予測が誤っていれば、分岐実行ユニット92は、マイクロプロセッサ・パイプラインのフロント・エンドを捨て去り、マイクロプロセッサを正しいアドレスから再スタートさせなければならない。もし分岐命令が「採択」と予測され、最終分岐結論がこれに反して「不採択」であった場合、マイクロプロセッサはその分岐命令の直ぐ後に続く命令のアドレスから実行を再開しなければならない。分岐実行ユニット92は、この状況をマイクロプロセッサ・パイプラインのフロント・エンドを捨て去り、命令フェッチ・ユニット30に対して分岐IPテーブル43によって与えられた次の線形命令ポインタ(NLIP)のアドレスから実行を再開するように指示することによって処理する。
【0090】
分岐実行ユニット92が分岐マイクロ・オペを実行した後、分岐目標バッファ回路40は、分岐目標バッファ・キャッシュ41において新しい記述欄を割り当てるか又は既存の記述欄を更新しなければならない。分岐目標バッファ・キャッシュ41の適切なセットをアクセスするため、分岐目標バッファ回路40は分岐命令の最後のバイトのアドレスを持っていなければならない。分岐命令の最後のバイトを計算するため、分岐目標バッファ回路40は、分岐IPテーブル43から得られた次の線形命令ポインタ(NLIP)アドレスを減分する。
【0091】
分岐目標バッファ・キャッシュ41を更新するための情報を提供するため、分岐実行ユニット92は、分析された分岐命令の情報を分岐目標バッファ回路40へ送る。具体的には、分岐実行ユニット92は、分岐目標バッファ回路40にどのタイプの分岐命令が実行され、分岐が「採択」されたかされないか、及び分岐目標アドレスを知らせる。分岐目標バッファ回路40は、分析された分岐情報を使って分岐目標バッファ・キャッシュ41を更新する。
【0092】
図12は、分岐目標バッファ回路40が分岐目標バッファ・キャッシュ41を更新するときに実行するステップを示す。ステップ301で、分岐目標バッファ回路40は、分岐IPテーブル43から読まれた次の線形命令ポインタ(NLIP)・アドレスを減分し、分岐命令の最後のバイトのアドレスを計算する。分岐目標バッファ回路40は、分岐命令の最後のバイトのアドレスを使って分岐目標バッファ・キャッシュ41を索引する。
【0093】
ステップ302で、分岐目標バッファ回路40は、分岐目標バッファ・キャッシュ41を索引し、その分岐命令に対する分岐エントリが分岐目標バッファ・キャッシュ41に既に存在するかどうか調べる。具体的には、分岐目標バッファ回路40は、分岐エントリに関する計算された命令アドレス・ブロックのセット・ビットを使って分岐目標バッファ・キャッシュ41を索引し、短縮タグ・フィールド401とブロック・オフセット・フィールド402をマッチングさせて分岐エントリを探す。
【0094】
もし分岐目標バッファ回路40が、その分岐命令に関して分岐エントリを分岐目標バッファ・キャッシュ41の中に見つけることができなければ、分岐目標バッファ回路40は、割り当て手段を使ってその分岐命令が分岐目標バッファ・キャッシュ41に追加されるべきかどうか決定する。割り当て手段については本明細書で後述する。逆にもし分岐目標バッファ回路40がその分岐命令に関して分岐エントリを分岐目標バッファ・キャッシュ41の中に見つけると、分岐目標バッファ回路40は、ステップ310から始めて分岐エントリを更新する。
【0095】
分岐目標バッファ・キャッシュにおける既存の分岐エントリの更新
分岐目標バッファ・キャッシュ41における既存の分岐エントリの更新の全処理は、3マシン・サイクル必要である。分岐目標バッファ・キャッシュ41における既存の分岐エントリの更新は、その分岐エントリは更新すべきでないと判断されると、分岐目標バッファ回路40によって中断させられる。
【0096】
図12のステップ310を参照すると、分岐がサブルーチンからの戻り命令でなければ分岐目標バッファ回路40は、分岐エントリの分岐目標アドレスを分岐実行ユニット92によって計算された分岐目標アドレスと比較する。もし2つの目標アドレスが一致しなければ、分岐実行ユニット92はステップ311で分岐目標アドレスを更新する。
【0097】
図12のステップ312を参照すると、分岐目標バッファ回路40は、分岐実行ユニット92によって与えられた分岐タイプを調べる。もし分岐タイプが無条件分岐命令であれば、分岐目標バッファ回路40は、分岐エントリの更新を完了する。もし分岐命令が条件分岐命令であれば、分岐目標バッファ回路40は分岐パターン・テーブルの分岐歴を更新する。
【0098】
ステップ316で、分岐目標バッファ回路40は、その分岐エントリを含んでいるセットに関する分岐パターン・テーブル421を更新する。分岐パターン・テーブル421は、既存の真の分岐歴404を使い、図10(b)に示す状態移行テーブルに従った最近の分岐結果を使って状態値を変えて分岐パターン・テーブル421を索引することによって更新される。分岐パターン・テーブル421は、真の分岐歴フィールド404における現在の履歴が分岐パターン・テーブル421を索引する必要があるので、真の分岐フィールド404が更新さる前に更新されなければならない。
【0099】
ステップ316で分岐パターン・テーブルを更新した後、分岐目標バッファ回路40は、ステップ318で真の分岐歴フィールド404を更新する。分岐目標バッファ回路40は、分岐実行ユニット92によって計算された条件分岐命令の最新の分岐結論を真の分岐歴フィールド404へシフトすることによって真の分岐歴フィールド404を更新する。これによって条件分岐命令に関する分岐エントリの更新が完了する。
【0100】
分岐目標バッファ回路40は、分岐実行ユニット92が分岐命令に関連した分岐マイクロ・オペを実行してから2サイクル後に分岐目標バッファ・キャッシュ41の各分岐エントリを更新する。しかし、分岐目標バッファ回路40を有するマイクロプロセッサは、マイクロ・オペを元のプログラム順序からはずされた順序で実行できるので、分岐目標バッファ回路40は、分岐目標バッファ・キャッシュ41を元のプログラム順序とは異なる順序で更新することがある。
【0101】
多くの場合、分岐目標バッファ・キャッシュ41を元のプログラム順序とは異なる順序で更新することは特に問題ない。しかし、分岐実行ユニットが、後の分岐がすでに実行された後に、分岐実行中に分岐予測誤りを検出したとき、後の分岐は無効な履歴で更新されてしまっているであろう。この状況を矯正するため、分岐目標バッファ回路40は、もし分岐目標バッファ回路40が次の2サイクル以内に、分岐が実行されてはならなかったのだと云うことを知れば、分岐エントリの更新を中断する。この状況の1例が図13を参照して説明される。
【0102】
4つの分岐命令Br0、Br1、Br2及びBr3がこの順序でコンピュータ・プログラムに現れる場合を考える。図2に示すマイクロプロセッサにおいて、関連する分岐マイクロ・オペは、如何なる順序でも実行され得る。図13において、4つの分岐命令はBr3、Br1、Br2及び最後にBr0の順に実行される。
【0103】
図13のパイプxを参照すると、分岐実行ユニットはBr3を分析する。次のパイプ x+1で、分岐実行ユニットはBr1を分析し、分岐目標バッファ回路40はBr3の分岐エントリの更新を開始する。パイプx+2で、分岐実行ユニットはBr1を分析し、一方同時に分岐目標バッファ回路40はBr1の分岐エントリの更新を開始し、Br3の分岐エントリの更新を継続する。パイプx+3で、分岐ユニットはBr0を分析し、一方同時に分岐目標バッファ回路40はBr2の分岐エントリの更新を開始し、Br1の分岐エントリの更新を継続し、Br3の分岐エントリの更新を終了する。
【0104】
もし分岐実行ユニットがBr0は予測誤りであったと判定すると、マイクロプロセッサは誤った経路で推論的に実行しているので、次の分岐命令は実行されてはならなかったことになる。もっと重要なことは、分岐命令Br1、Br2及びBr3は、実行されてはならなかったのであるから、これらの分岐命令に関する分岐エントリは更新されてはならないのであり、新しい分岐歴は誤りであるということである。分岐実行ユニットが予測誤りを検出したとき、分岐実行ユニットは、分岐目標バッファ回路40に対して現在処理中の全ての更新を中断するように指示する。従って分岐目標バッファ回路40は、図13に示すように分岐命令Br1及びBr2の更新を中断する。予測誤りが検出されたとき、Br3の更新は既に完了しているので、更新を防止できない。しかし、更新完了前の2サイクル内に分岐エントリの中断をする能力は、このようなケースの大半を処理する。
【0105】
分岐目標バッファ・キャッシュにおける分岐エントリの割り当て
図12のステップ302を参照すると、もし分岐目標バッファ回路40が分岐命令に関して分岐目標バッファ・キャッシュ41の中に既存の分岐エントリを見つけなかった場合、分岐目標バッファ回路40は分岐目標バッファ・キャッシュ41の中に新らしい分岐エントリが割り当てられるかどうか判定しなければならない。分岐エントリを割り当てるかどうかを判定するため、マイクロプロセッサは分岐エントリ割り当て手段を働かせる。ステップ303及びステップ305は分岐目標バッファ・キャッシュ41の割り当て手段を実行している。簡単に云えば、本発明の分岐エントリ割り当て手段は、分岐アドレス計算器50によって誤って予測された全ての分岐命令と全ての「採択された」分岐命令の分岐エントリを割り当てるためのものである。
【0106】
図2を参照すると、分岐アドレス計算器50は、分岐目標バッファ回路40によって予測されない分岐命令の静的予測を行う。静的予測は、分岐命令自身の中でコード化された情報にのみ基づき、分岐アドレス計算器50が常に所定の分岐命令に関して同じ予測を行う。従って、分岐アドレス計算器50が分岐命令を誤って予測すると、同じ予測誤りがくり返し行われる(分岐結論が変わるまで)。この状況を防止するため、分岐アドレス計算器50によって誤って予測された全ての分岐命令は分岐目標バッファ・キャッシュ41に割り当てられる。従って図12のステップ303で、分岐目標バッファ回路40は、その分岐命令が誤って予測されたかどうかテストする。もし分岐が誤って予測されると、分岐目標バッファ回路40は、その分岐命令の分岐エントリを分岐目標バッファ・キャッシュ41内に割り当てる。
【0107】
もし分岐アドレス計算器50が、分岐命令が「採択されない」と予測し、その分岐予測が正しいと、遅れは起こらない。一方、もし分岐アドレス計算器50が、分岐命令が「採択される」と予測すると、分岐アドレス計算器50は、やはりマイクロプロセッサのフロント・エンドを捨て、命令フェッチ・ユニット30のフェッチを分岐目標アドレスから開始しなければならない。従って、もし分岐命令が「採択」されると、分岐アドレス計算器50が正しく分岐命令の結論を予測するかしないかによって5サイクルの遅れがある。この状況が再発するのを防止するため、分岐目標バッファ回路40は、全ての「採択」分岐命令に対して分岐目標バッファ・キャッシュ内に分岐エントリを割り当てる。図12のステップ305を参照すると、分岐目標バッファ回路40は分岐命令が「採択」されたかどうかテストする。もし分岐命令が「採択」された場合、分岐目標バッファ回路40は、その分岐命令の分岐エントリを分岐目標バッファ・キャッシュ41内に割り当てる。
【0108】
分岐目標バッファ・キャッシュ41において選択されたセットから1つの分岐エントリを選択するため、分岐目標バッファ回路40は、分岐目標バッファ・キャッシュ41のセットの中の一対の疑似最近置換(PLRR)ビット420を使う。疑似最近置換(PLRR)ビット420はセットの中のどの分岐エントリが一番先に置き換えられたかを示す。選択されたセットの中の分岐エントリを選択するため、分岐目標バッファ回路40は、選択されたセットの疑似最近置換(PLRR)ビット420を読み、図14に示す分岐エントリ割り当て手段に従う。分岐エントリ割り当て手段は、現メモリ・ブロック内の分岐命令に対する既存の分岐エントリを破壊しないように試みる。
【0109】
ステップ501で、分岐目標バッファ回路40は、カウンタをゼロにセットする。ステップ503で、分岐目標バッファ回路40は、分岐エントリをテストし、その短縮タグ・フィールド401が割り当てられる分岐命令の短縮タグと同じかどうか調べる。もしこの2つの短縮タグが一致しなければ、分岐目標バッファ回路40は、ステップ505へ進み、分岐エントリを置き換える。分岐エントリを置き換えた後、分岐目標バッファ回路40は、ステップ507で疑似最近置換(PLRR)ビット420を増分し、増分された疑似最近置換(PLRR)ビットをセットの中に書き戻す。
【0110】
もし2つの短縮タグが一致すれば、分岐目標バッファ回路40は、ステップ511へ進み、そこで分岐目標バッファ回路40は、カウンタをテストし、全ての4つの分岐エントリがテストされたかどうか調べる。もし全ての4つの分岐エントリがテストされたら、分岐目標バッファ回路40はステップ505へ進み、疑似最近置換(PLRR)ビット420によって指示された分岐エントリを分岐セットから元々読まれたように置き換える。ステップ511を参照すると、もし全ての4つの分岐エントリがテストされていなければ、分岐目標バッファ回路40はステップ513へ進み、カウンタ及び疑似最近置換(PLRR)ビットが増分される。
【0111】
ステップ513の後で、分岐目標バッファ回路40はステップ503に戻り次の分岐エントリをテストする。分岐目標バッファ・キャッシュ41の分岐エントリが選択された後、分岐目標バッファ回路40は選択された分岐エントリのデータ・フィールドに書き込む。
【0112】
もし分岐命令が「採択」であったら、分岐目標バッファ回路40は真の履歴フィールド404を「1011」とセットする。その他の場合、すなわち分岐が「不採択」であったら、分岐目標バッファ回路40は、真の履歴フィールドを「0100」とセットする。
【0113】
推論ビット406はリセットされ、その分岐エントリに関して推論歴はまだ存在しないことを示す。推論歴フィールド405は、後に推論歴が生成されたときセットされるので、分岐エントリ割り当て中は変更されない。
【0114】
短縮タグ・フィールド401及びブロック・オフセット・フィールド402は、分岐命令の最後のバイトを指示するアドレスを使ってセットされる。短縮タグ・フィールド401は、分岐命令の最後のバイトを指示するアドレスの最上位21ビットを選択された短縮機構へ通すことによってセットされる。ブロック・オフセット・フィールド402は、分岐アドレスの最下位4ビットを使ってセットされる。
【0115】
分岐目標バッファ回路40は、分岐タイプ・フィールド403を分岐実行ユニット92から受け取った分岐タイプ情報を使ってセットする。分岐目標バッファ回路40は、分岐目標アドレス・フィールド408を分岐実行ユニット92によって計算された分岐命令の目標アドレスを使ってセットする。
【0116】
最後に、分岐エントリの有効ビット407がセットされ、分岐エントリが分岐命令に関する有効情報を有することを示す。将来発生する分岐命令は、分岐目標バッファ回路40によって予測される。
【0117】
分岐目標バッファ・キャッシュからの分岐エントリの取り外し
図2を参照すると、分岐アドレス計算器50は、分岐目標バッファ回路40によって予測された全ての分岐命令の存在を検証する。有効な分岐命令を指示しない分岐目標バッファ・キャッシュ41の記述欄は、分岐目標バッファ回路40に存在しない分岐命令を予測させることになる。
【0118】
分岐目標バッファ・キャッシュ41の分岐エントリが有効な分岐命令を指示しないいくつかの理由がある。自己修正コードが分岐命令を変更でき、分岐目標バッファ・キャッシュ41の記述欄が正確でなくなる。更に、短縮タグ・フィールド401がエイリアシングを起こし、複数のアドレスが各分岐エントリにマップされる。
【0119】
分岐アドレス計算器50が、分岐目標バッファ回路40が存在しない分岐命令を予測したと判断すると、分岐目標バッファ・キャッシュ41の不正確な分岐エントリは取り外さなければならない。分岐アドレス計算器50が、存在しない分岐命令の分岐予測を検出すると、分岐アドレス計算器50は分岐目標バッファ回路40に非分岐命令の最初のバイトに対するポインタを送る。にせの分岐エントリを取り外すため、分岐目標バッファ回路40は、送られたポインタによって定義されたセットの全ての分岐エントリ及び次の分岐エントリのセットを取り外す。送られたポインタで定義されたセット及び次の分岐エントリのセットは、分岐命令(最後のバイトのアドレスによって分岐目標バッファ・キャッシュ41に置かれた)が2つのセットの分岐エントリのどちらかに存在するかも知れないので取り外さなければならない。1つのセットの分岐エントリを取り外すために、分岐目標バッファ回路40は、分岐エントリの全ての有効ビット407をリセットする。
【0120】
命令の流れの中の分岐命令を予測する分岐目標バッファ回路40を実施するいくつかの方法と装置を説明した。本発明の範囲から逸脱することなく、本発明の器材及び構成に対して当業者によって変更及び修正が加えられることが予期される。
【図面の簡単な説明】
【図1】マイクロプロセッサ命令を処理するための深いマイクロプロセッサ・パイプラインのブロック・ダイアグラムを示す図。
【図2】図1に示す深いパイプラインを実現するマイクロプロセッサの異なった回路ブロックのブロック・ダイアグラムを示す図。
【図3】実行されたマイクロ・オペの結果を格納するリオーダ・バッファの図。
【図4】アドレス空間が16バイトのメモリ・ブロックに分割されたメモリ・マップの図。
【図5】図2に示すマイクロプロセッサにおいて、どのように分岐目標バッファ回路が他の論理回路と相互に作用するかを示す図。
【図6】分岐目標バッファ回路の中の分岐目標バッファ・キャッシュの内容を示す図。
【図7】分岐目標バッファ・キャッシュの中の各分岐のエントリの内容を示す図。
【図8】分岐予測をするため、分岐目標バッファ・キャッシュをサーチするとき、分 岐目標バッファ回路によって実行されるステップを説明する図。
【図9】(a)は、分岐目標バッファ・キャッシュをアクセスするとき、どのように分岐目標バッファ回路がアドレスを使うかを示す図。
(b)は、21ビット・タグを9ビットの短縮タグに縮める第1の短縮メカ ニズムを示す図。
(c)は、21ビット・タグを9ビットの短縮タグに縮める第2の短縮メカ ニズムを示す図。
【図10】(a)は、各記述欄が2ビットの状態値である16項目の記入パターン・テーブルを指示する4ビットの分岐歴を示す図。
(b)は、分岐パターン・テーブルにおける各2ビットの状態値に関する状態変化を示す状態図。
【図11】分岐目標バッファ回路における分岐IPテーブル(BIT)の内容を示す図。
【図12】分岐目標バッファ・キャッシュを更新するとき、分岐目標バッファ回路によって実行されるステップを記載したフローチャート。
【図13】どのようにして分岐目標バッファ回路に対する3サイクル更新が中止されるかを示す図。
【図14】分岐エントリを新しい分岐命令に対して割り当てるとき、どのようにして分岐目標バッファ回路がセットの中の分岐エントリを選ぶかを説明するフローチャート。
【符号の説明】
30…命令フェッチ・ユニット、35…メモリ及びバス論理、40…分岐目標バッファ回路、41…分岐目標バッファ・キャッシュ、43…分岐IPテーブル、50…分岐アドレス計算器。
Claims (3)
- コンピュータ命令の流れの中の複数の分岐命令を予測する分岐命令予測機構であって、
メモリ中の命令アドレスを識別し、1組の分岐目標バッファ・セット・アドレス・ビット、および分岐目標バッファ・タグ・アドレス・ビットのセットを有する命令ポインタと、
複数の分岐セット・エントリを備える分岐目標バッファ・キャッシュであって、前記分岐セット・エントリはそれぞれ分岐命令エントリのセットを備え、各分岐命令エントリは、メモリ・ブロックでの位置を含む関連する分岐命令に関する情報を記憶し、特定の分岐セット・エントリ内のすべての分岐命令エントリは、同じ分岐目標バッファ・セット・アドレス・ビットを有する分岐命令を記憶する分岐目標バッファ・キャッシュと、
前記命令ポインタを受け、前記1組の前記命令ポインタの分岐目標バッファ・セット・アドレス・ビットで前記分岐目標バッファ・キャッシュを索引して、分岐セット・エントリを選択し、前記命令ポインタの前記分岐目標バッファ・タグ・アドレス・ビットを使用して、前記分岐セット・エントリ内で少なくとも1つの分岐命令エントリを選択する分岐目標バッファ回路、とを備える分岐命令予測機構。 - 分岐目標バッファ・キャッシュ更新方法であって、
分岐命令を実行して、前記分岐命令に対する最終的分岐結論、および最終的分岐目標アドレスを決定するステップと、
前記分岐命令の最後のバイトのアドレスを使用して前記分岐目標バッファを索引することによって、前記分岐目標バッファ・キャッシュ内で分岐セット・エントリを見つけるステップと、
前記分岐セット・エントリ内で前記分岐命令に関連付けられた分岐命令エントリを見つけるステップと、
前記最終的分岐目標アドレスを使用して、前記分岐命令に関連付けられた前記分岐命令エントリ中の分岐目標アドレスを更新するステップと、
前記分岐命令が条件分岐命令であるとき、前記分岐目標バッファ内の前記分岐セット・エントリに関連付けられた分岐パターン・テーブルを更新するステップと、
前記分岐命令が条件分岐命令であるとき、前記分岐命令エントリに関連付けられた分岐歴を更新するステップと、
前記分岐命令の最後のバイトの前記アドレスからの最も有効なビットのサブセットを、前記分岐エントリ中のタグ・フィールドと突き合わせるステップと、
からなる分岐目標バッファ・キャッシュの更新方法。 - 分岐目標バッファ・キャッシュ内に分岐命令エントリを作成して、発見された分岐命令に関する情報を記憶する方法であって、前記分岐目標バッファ・キャッシュは複数の分岐セット・エントリに編成され、各分岐セット・エントリは、分岐命令エントリのセットを備え、前記方法は
前記発見された分岐命令を実行して、前記発見された分岐命令に対する最終的分岐結論および最終的分岐目標アドレスを決定するステップと、
前記最終的分岐結論および前記最終的分岐目標アドレスを、予測される分岐結論および予測される分岐目標アドレスと比較することによって、前記発見された分岐命令が誤って予測されたかどうかを判定するステップと、
前記発見された分岐命令が誤って予測された場合、または前記発見された分岐命令の前記最終的分岐結論が「採択」された場合、前記分岐目標バッファ・キャッシュに分岐命令エントリを割り当てるステップと、からなり、
前記分岐命令エントリを割り当てるステップが、
分岐セット・エントリに関連付けられたフィールドで最も以前に置き換えられたフィールドから、最も以前に置き換えられた値を読み出すサブステップと、
前記第1の分岐エントリが一致するタグ・アドレス・フィールドを有さない場合、前記最も以前に置き換えられた値によって指定される分岐命令エントリを置き換えるサブステップと、
前記分岐エントリが一致するタグ・アドレス・フィールドを有する場合、前記最も以前に置き換えられた値を実施し、すべての分岐命令エントリを調べるまで前記最も以前に置き換えられた値を実施し、前記ステップを繰り返すサブステップと、
すべての分岐命令エントリが一致するタグ・アドレス・フィールドを有する場合、前記最も以前に置き換えられたフィールドから本来読み出された、前記最も以前に置き換えられた値が指す分岐命令エントリを置き換えるサブステップとからなる、分岐目標バッファ・キャッシュ内に分岐命令エントリを作成して、発見された分岐命令に関する情報を記憶する方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/177,155 US5574871A (en) | 1994-01-04 | 1994-01-04 | Method and apparatus for implementing a set-associative branch target buffer |
US177155 | 1998-10-22 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH07210383A JPH07210383A (ja) | 1995-08-11 |
JP3548255B2 true JP3548255B2 (ja) | 2004-07-28 |
Family
ID=22647420
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP34032194A Expired - Fee Related JP3548255B2 (ja) | 1994-01-04 | 1994-12-29 | 分岐命令予測機構及び予測方法 |
Country Status (6)
Country | Link |
---|---|
US (4) | US5574871A (ja) |
JP (1) | JP3548255B2 (ja) |
DE (1) | DE4447238B4 (ja) |
GB (1) | GB2285526B (ja) |
HK (1) | HK1012743A1 (ja) |
SG (1) | SG50456A1 (ja) |
Families Citing this family (129)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1992006426A1 (en) * | 1990-10-09 | 1992-04-16 | Nexgen Microsystems | Method and apparatus for parallel decoding of instructions with branch prediction look-up |
US5574871A (en) * | 1994-01-04 | 1996-11-12 | Intel Corporation | Method and apparatus for implementing a set-associative branch target buffer |
JP3590427B2 (ja) * | 1994-08-30 | 2004-11-17 | 株式会社ルネサステクノロジ | 先行読出機能付命令キャッシュメモリ |
US5968169A (en) * | 1995-06-07 | 1999-10-19 | Advanced Micro Devices, Inc. | Superscalar microprocessor stack structure for judging validity of predicted subroutine return addresses |
GB9521955D0 (en) * | 1995-10-26 | 1996-01-03 | Sgs Thomson Microelectronics | Cache memory |
GB9521980D0 (en) * | 1995-10-26 | 1996-01-03 | Sgs Thomson Microelectronics | Branch target buffer |
GB9521978D0 (en) * | 1995-10-26 | 1996-01-03 | Sgs Thomson Microelectronics | Computer instruction supply |
GB9521977D0 (en) * | 1995-10-26 | 1996-01-03 | Sgs Thomson Microelectronics | Cache memory |
US5881278A (en) * | 1995-10-30 | 1999-03-09 | Advanced Micro Devices, Inc. | Return address prediction system which adjusts the contents of return stack storage to enable continued prediction after a mispredicted branch |
US5864707A (en) | 1995-12-11 | 1999-01-26 | Advanced Micro Devices, Inc. | Superscalar microprocessor configured to predict return addresses from a return stack storage |
US5790822A (en) * | 1996-03-21 | 1998-08-04 | Intel Corporation | Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor |
US5842008A (en) * | 1996-06-18 | 1998-11-24 | Intel Corporation | Method and apparatus for implementing a branch target buffer cache with multiple BTB banks |
US6170053B1 (en) * | 1996-06-27 | 2001-01-02 | Texas Instruments Incorporated | Microprocessor with circuits, systems and methods for responding to branch instructions based on history of prediction accuracy |
US5864697A (en) * | 1996-06-28 | 1999-01-26 | Texas Instruments Incorporated | Microprocessor using combined actual and speculative branch history prediction |
US5901307A (en) * | 1996-07-22 | 1999-05-04 | International Business Machines Corporation | Processor having a selectively configurable branch prediction unit that can access a branch prediction utilizing bits derived from a plurality of sources |
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 |
US5875325A (en) * | 1996-09-19 | 1999-02-23 | International Business Machines Corporation | Processor having reduced branch history table size through global branch history compression and method of branch prediction utilizing compressed global branch history |
US5918044A (en) * | 1996-10-31 | 1999-06-29 | International Business Machines Corporation | Apparatus and method for instruction fetching using a multi-port instruction cache directory |
US5954816A (en) * | 1996-11-19 | 1999-09-21 | Advanced Micro Devices, Inc. | Branch selector prediction |
US5995749A (en) | 1996-11-19 | 1999-11-30 | Advanced Micro Devices, Inc. | Branch prediction mechanism employing branch selectors to select a branch prediction |
US5978906A (en) * | 1996-11-19 | 1999-11-02 | Advanced Micro Devices, Inc. | Branch selectors associated with byte ranges within an instruction cache for rapidly identifying branch predictions |
US6253316B1 (en) | 1996-11-19 | 2001-06-26 | Advanced Micro Devices, Inc. | Three state branch history using one bit in a branch prediction mechanism |
DE69727773T2 (de) * | 1996-12-10 | 2004-12-30 | Texas Instruments Inc., Dallas | Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor |
US6871275B1 (en) * | 1996-12-12 | 2005-03-22 | Intel Corporation | Microprocessor having a branch predictor using speculative branch registers |
US6088793A (en) * | 1996-12-30 | 2000-07-11 | Intel Corporation | Method and apparatus for branch execution on a multiple-instruction-set-architecture microprocessor |
US6108775A (en) * | 1996-12-30 | 2000-08-22 | Texas Instruments Incorporated | Dynamically loadable pattern history tables in a multi-task microprocessor |
TW357318B (en) * | 1997-03-18 | 1999-05-01 | Ind Tech Res Inst | Branching forecast and reading device for unspecified command length extra-purity pipeline processor |
JPH10333908A (ja) * | 1997-05-30 | 1998-12-18 | Mitsubishi Electric Corp | 分岐予測方法 |
US6154833A (en) * | 1997-08-11 | 2000-11-28 | Intel Corporation | System for recovering from a concurrent branch target buffer read with a write allocation by invalidating and then reinstating the instruction pointer |
US6101598A (en) * | 1997-11-14 | 2000-08-08 | Cirrus Logic, Inc. | Methods for debugging a multiprocessor system |
US5938761A (en) * | 1997-11-24 | 1999-08-17 | Sun Microsystems | Method and apparatus for branch target prediction |
US5978909A (en) * | 1997-11-26 | 1999-11-02 | Intel Corporation | System for speculative branch target prediction having a dynamic prediction history buffer and a static prediction history buffer |
US6108774A (en) * | 1997-12-19 | 2000-08-22 | Advanced Micro Devices, Inc. | Branch prediction with added selector bits to increase branch prediction capacity and flexibility with minimal added bits |
US6256729B1 (en) * | 1998-01-09 | 2001-07-03 | Sun Microsystems, Inc. | Method and apparatus for resolving multiple branches |
US6289441B1 (en) * | 1998-01-09 | 2001-09-11 | Sun Microsystems, Inc. | Method and apparatus for performing multiple branch predictions per cycle |
US6151671A (en) * | 1998-02-20 | 2000-11-21 | Intel Corporation | System and method of maintaining and utilizing multiple return stack buffers |
US6055630A (en) * | 1998-04-20 | 2000-04-25 | Intel Corporation | System and method for processing a plurality of branch instructions by a plurality of storage devices and pipeline units |
US6081887A (en) * | 1998-05-13 | 2000-06-27 | Compaq Computer Corporation | System for passing an index value with each prediction in forward direction to enable truth predictor to associate truth value with particular branch instruction |
US6493821B1 (en) | 1998-06-09 | 2002-12-10 | Intel Corporation | Recovery from writeback stage event signal or micro-branch misprediction using instruction sequence number indexed state information table |
US6134654A (en) * | 1998-09-16 | 2000-10-17 | Sun Microsystems, Inc. | Bi-level branch target prediction scheme with fetch address prediction |
US6601161B2 (en) | 1998-12-30 | 2003-07-29 | Intel Corporation | Method and system for branch target prediction using path information |
US7275246B1 (en) | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US8065504B2 (en) * | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US6978462B1 (en) * | 1999-01-28 | 2005-12-20 | Ati International Srl | Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled |
JP3526773B2 (ja) * | 1999-02-26 | 2004-05-17 | 松下電器産業株式会社 | マルチプロセッサ装置およびその制御方法 |
US6233676B1 (en) * | 1999-03-18 | 2001-05-15 | Ip-First, L.L.C. | Apparatus and method for fast forward branch |
US6526503B1 (en) | 1999-11-04 | 2003-02-25 | International Business Machines Corporation | Apparatus and method for accessing a memory device during speculative instruction branching |
US6633974B1 (en) | 1999-11-04 | 2003-10-14 | International Business Machines Corporation | Apparatus and method for controlling link stack corruption during speculative instruction branching using multiple stacks |
US6502188B1 (en) | 1999-11-16 | 2002-12-31 | Advanced Micro Devices, Inc. | Dynamic classification of conditional branches in global history branch prediction |
US6934832B1 (en) | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
US6470438B1 (en) * | 2000-02-22 | 2002-10-22 | Hewlett-Packard Company | Methods and apparatus for reducing false hits in a non-tagged, n-way cache |
US6918028B1 (en) * | 2000-03-28 | 2005-07-12 | Analog Devices, Inc. | Pipelined processor including a loosely coupled side pipe |
US7496734B1 (en) * | 2000-04-28 | 2009-02-24 | Stmicroelectronics, Inc. | System and method for handling register dependency in a stack-based pipelined processor |
US6910124B1 (en) | 2000-05-02 | 2005-06-21 | International Business Machines Corporation | Apparatus and method for recovering a link stack from mis-speculation |
JP3729064B2 (ja) * | 2000-11-29 | 2005-12-21 | 日本電気株式会社 | データ依存関係検出装置 |
US6859874B2 (en) * | 2001-09-24 | 2005-02-22 | Broadcom Corporation | Method for identifying basic blocks with conditional delay slot instructions |
US6785804B2 (en) * | 2001-05-17 | 2004-08-31 | Broadcom Corporation | Use of tags to cancel a conditional branch delay slot instruction |
US6883090B2 (en) * | 2001-05-17 | 2005-04-19 | Broadcom Corporation | Method for cancelling conditional delay slot instructions |
US6934796B1 (en) * | 2002-02-01 | 2005-08-23 | Netlogic Microsystems, Inc. | Content addressable memory with hashing function |
US6697276B1 (en) | 2002-02-01 | 2004-02-24 | Netlogic Microsystems, Inc. | Content addressable memory device |
US7382637B1 (en) | 2002-02-01 | 2008-06-03 | Netlogic Microsystems, Inc. | Block-writable content addressable memory device |
US6954849B2 (en) * | 2002-02-21 | 2005-10-11 | Intel Corporation | Method and system to use and maintain a return buffer |
KR100468618B1 (ko) * | 2002-03-28 | 2005-01-31 | 매그나칩 반도체 유한회사 | 가변 길이 명령어를 갖는 수퍼스칼라 프로세서에 있어서의분기 예측 장치 |
US7082520B2 (en) * | 2002-05-09 | 2006-07-25 | International Business Machines Corporation | Branch prediction utilizing both a branch target buffer and a multiple target table |
US20030225992A1 (en) * | 2002-05-29 | 2003-12-04 | Balakrishna Venkatrao | Method and system for compression of address tags in memory structures |
JP3851235B2 (ja) | 2002-06-28 | 2006-11-29 | 富士通株式会社 | 分岐予測装置および分岐予測方法 |
FR2849226B1 (fr) * | 2002-12-20 | 2005-12-02 | Oberthur Card Syst Sa | Procede et dispositif de securisation de l'execution d'un programme informatique. |
US6925928B2 (en) * | 2003-09-18 | 2005-08-09 | Anthony Fox | Trash compactor for fast food restaurant waste |
KR100591769B1 (ko) * | 2004-07-16 | 2006-06-26 | 삼성전자주식회사 | 분기 예측 정보를 가지는 분기 타겟 버퍼 |
US7752426B2 (en) * | 2004-08-30 | 2010-07-06 | Texas Instruments Incorporated | Processes, circuits, devices, and systems for branch prediction and other processor improvements |
US7426631B2 (en) * | 2005-02-02 | 2008-09-16 | International Business Machines Corporation | Methods and systems for storing branch information in an address table of a processor |
US7437543B2 (en) * | 2005-04-19 | 2008-10-14 | International Business Machines Corporation | Reducing the fetch time of target instructions of a predicted taken branch instruction |
US20070061555A1 (en) * | 2005-09-15 | 2007-03-15 | St Clair Michael | Call return tracking technique |
WO2007099604A1 (ja) * | 2006-02-28 | 2007-09-07 | Fujitsu Limited | コンピュータの分岐予測装置 |
JP5136405B2 (ja) * | 2006-02-28 | 2013-02-06 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US7574586B2 (en) * | 2006-05-16 | 2009-08-11 | Texas Instruments Incorporated | Efficient transfer of branch information |
US7827392B2 (en) * | 2006-06-05 | 2010-11-02 | Qualcomm Incorporated | Sliding-window, block-based branch target address cache |
US9146745B2 (en) * | 2006-06-29 | 2015-09-29 | Intel Corporation | Method and apparatus for partitioned pipelined execution of multiple execution threads |
US8261130B2 (en) * | 2007-03-02 | 2012-09-04 | Infineon Technologies Ag | Program code trace signature |
US7664941B2 (en) * | 2007-06-28 | 2010-02-16 | Faraday Technology Corp. | Branch prediction methods and devices capable of predicting first taken branch instruction within plurality of fetched instructions |
US8909907B2 (en) * | 2008-02-12 | 2014-12-09 | International Business Machines Corporation | Reducing branch prediction latency using a branch target buffer with a most recently used column prediction |
US7913068B2 (en) * | 2008-02-21 | 2011-03-22 | International Business Machines Corporation | System and method for providing asynchronous dynamic millicode entry prediction |
US7873818B2 (en) * | 2008-02-22 | 2011-01-18 | International Business Machines Corporation | System and method for search area confined branch prediction |
US8181005B2 (en) * | 2008-09-05 | 2012-05-15 | Advanced Micro Devices, Inc. | Hybrid branch prediction device with sparse and dense prediction caches |
US20100191943A1 (en) * | 2009-01-26 | 2010-07-29 | Agere Systems Inc. | Coordination between a branch-target-buffer circuit and an instruction cache |
CN101840330B (zh) * | 2009-07-15 | 2014-02-12 | 威盛电子股份有限公司 | 一种微处理器和其信息储存方法 |
US8281110B2 (en) * | 2009-07-15 | 2012-10-02 | Via Technologies, Inc. | Out-of-order microprocessor with separate branch information circular queue table tagged by branch instructions in reorder buffer to reduce unnecessary space in buffer |
CN102117198B (zh) * | 2009-12-31 | 2015-07-15 | 上海芯豪微电子有限公司 | 一种分支处理方法 |
US20140019722A1 (en) * | 2011-03-31 | 2014-01-16 | Renesas Electronics Corporation | Processor and instruction processing method of processor |
US8458447B2 (en) * | 2011-06-17 | 2013-06-04 | Freescale Semiconductor, Inc. | Branch target buffer addressing in a data processor |
US9354886B2 (en) * | 2011-11-28 | 2016-05-31 | Apple Inc. | Maintaining the integrity of an execution return address stack |
US9235419B2 (en) | 2012-06-11 | 2016-01-12 | International Business Machines Corporation | Branch target buffer preload table |
US9229723B2 (en) | 2012-06-11 | 2016-01-05 | International Business Machines Corporation | Global weak pattern history table filtering |
US9280351B2 (en) | 2012-06-15 | 2016-03-08 | International Business Machines Corporation | Second-level branch target buffer bulk transfer filtering |
US9430241B2 (en) | 2012-06-15 | 2016-08-30 | International Business Machines Corporation | Semi-exclusive second-level branch target buffer |
US9298465B2 (en) | 2012-06-15 | 2016-03-29 | International Business Machines Corporation | Asynchronous lookahead hierarchical branch prediction |
US20140025894A1 (en) * | 2012-07-18 | 2014-01-23 | Electronics And Telecommunications Research Institute | Processor using branch instruction execution cache and method of operating the same |
US9395984B2 (en) | 2012-09-12 | 2016-07-19 | Qualcomm Incorporated | Swapping branch direction history(ies) in response to a branch prediction table swap instruction(s), and related systems and methods |
US9645824B2 (en) * | 2012-10-31 | 2017-05-09 | Arm Limited | Branch target address cache using hashed fetch addresses |
JP6179093B2 (ja) * | 2012-12-03 | 2017-08-16 | 富士通株式会社 | 演算処理装置、演算処理方法 |
US9405544B2 (en) | 2013-05-14 | 2016-08-02 | Apple Inc. | Next fetch predictor return address stack |
US10127044B2 (en) * | 2013-10-25 | 2018-11-13 | Advanced Micro Devices, Inc. | Bandwidth increase in branch prediction unit and level 1 instruction cache |
US9563430B2 (en) | 2014-03-19 | 2017-02-07 | International Business Machines Corporation | Dynamic thread sharing in branch prediction structures |
US9690587B2 (en) | 2014-04-08 | 2017-06-27 | International Business Machines Corporation | Variable updates of branch prediction states |
GB2528676B (en) * | 2014-07-25 | 2016-10-26 | Imagination Tech Ltd | Conditional Branch Prediction Using A Long History |
US10534611B2 (en) | 2014-07-31 | 2020-01-14 | International Business Machines Corporation | Branch prediction using multi-way pattern history table (PHT) and global path vector (GPV) |
US9619385B2 (en) | 2015-02-25 | 2017-04-11 | International Business Machines Corporation | Single thread cache miss rate estimation |
US10642615B2 (en) * | 2018-04-27 | 2020-05-05 | International Business Machines Corporation | System and method for dynamic accuracy and threshold control for branch classification |
GB2539037B (en) * | 2015-06-05 | 2020-11-04 | Advanced Risc Mach Ltd | Apparatus having processing pipeline with first and second execution circuitry, and method |
US9442726B1 (en) | 2015-12-15 | 2016-09-13 | International Business Machines Corporation | Perceptron branch predictor with virtualized weights |
US10908902B2 (en) | 2016-05-26 | 2021-02-02 | International Business Machines Corporation | Distance based branch prediction and detection of potential call and potential return instructions |
US10430195B2 (en) | 2016-06-27 | 2019-10-01 | International Business Machines Corporation | Stream based branch prediction index accelerator with power prediction |
US10423419B2 (en) | 2016-06-27 | 2019-09-24 | International Business Machines Corporation | Stream based branch prediction index accelerator for multiple stream exits |
US10592248B2 (en) * | 2016-08-30 | 2020-03-17 | Advanced Micro Devices, Inc. | Branch target buffer compression |
US10747539B1 (en) | 2016-11-14 | 2020-08-18 | Apple Inc. | Scan-on-fill next fetch target prediction |
US10394559B2 (en) | 2016-12-13 | 2019-08-27 | International Business Machines Corporation | Branch predictor search qualification using stream length prediction |
US10732979B2 (en) | 2018-06-18 | 2020-08-04 | Advanced Micro Devices, Inc. | Selectively performing ahead branch prediction based on types of branch instructions |
GB2577051B (en) * | 2018-09-11 | 2021-03-03 | Advanced Risc Mach Ltd | Branch prediction using branch target buffer |
GB2578573B (en) * | 2018-10-30 | 2021-09-08 | Advanced Risc Mach Ltd | Technique for maintaining data values in a prediction register that are used to predict whether a branch represented by a branch instruction will be taken. |
US11321095B2 (en) * | 2018-12-14 | 2022-05-03 | Apple Inc. | Indirect branch predictor security protection |
US20220121446A1 (en) * | 2020-10-15 | 2022-04-21 | Centaur Technology, Inc. | Quick predictor override |
US20230214222A1 (en) * | 2021-12-30 | 2023-07-06 | Arm Limited | Methods and apparatus for storing instruction information |
CN116719561B (zh) * | 2023-08-09 | 2023-10-31 | 芯砺智能科技(上海)有限公司 | 一种条件分支指令的处理系统和方法 |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0109655B1 (en) * | 1982-11-17 | 1991-07-24 | Nec Corporation | Instruction prefetching device with prediction of a branch destination address |
US4679141A (en) * | 1985-04-29 | 1987-07-07 | International Business Machines Corporation | Pageable branch history table |
US4763245A (en) * | 1985-10-30 | 1988-08-09 | International Business Machines Corporation | Branch prediction mechanism in which a branch history table is updated using an operand sensitive branch table |
DE3785897T2 (de) * | 1986-02-28 | 1993-09-30 | Nec Corp | Steuervorrichtung zum vorabruf von befehlen. |
JPS6393038A (ja) * | 1986-10-07 | 1988-04-23 | Mitsubishi Electric Corp | 計算機 |
US4894772A (en) * | 1987-07-31 | 1990-01-16 | Prime Computer, Inc. | Method and apparatus for qualifying branch cache entries |
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 |
US5210831A (en) * | 1989-10-30 | 1993-05-11 | International Business Machines Corporation | Methods and apparatus for insulating a branch prediction mechanism from data dependent branch table updates that result from variable test operand locations |
US5093778A (en) * | 1990-02-26 | 1992-03-03 | Nexgen Microsystems | Integrated single structure branch prediction cache |
US5283873A (en) * | 1990-06-29 | 1994-02-01 | Digital Equipment Corporation | Next line prediction apparatus for a pipelined computed system |
US5265213A (en) * | 1990-12-10 | 1993-11-23 | Intel Corporation | Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction |
US5414822A (en) * | 1991-04-05 | 1995-05-09 | Kabushiki Kaisha Toshiba | Method and apparatus for branch prediction using branch prediction table with improved branch prediction effectiveness |
US5333283A (en) * | 1991-10-29 | 1994-07-26 | International Business Machines Corporation | Case block table for predicting the outcome of blocks of conditional branches having a common operand |
AU3776793A (en) * | 1992-02-27 | 1993-09-13 | Intel Corporation | Dynamic flow instruction cache memory |
US5423011A (en) * | 1992-06-11 | 1995-06-06 | International Business Machines Corporation | Apparatus for initializing branch prediction information |
JP2614686B2 (ja) * | 1992-06-30 | 1997-05-28 | 住友軽金属工業株式会社 | 形状凍結性及び塗装焼付硬化性に優れた成形加工用アルミニウム合金の製造方法 |
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 |
KR100310581B1 (ko) * | 1993-05-14 | 2001-12-17 | 피터 엔. 데트킨 | 분기목표버퍼의추측기록메카니즘 |
US5577217A (en) * | 1993-05-14 | 1996-11-19 | Intel Corporation | Method and apparatus for a branch target buffer with shared branch pattern tables for associated branch predictions |
US5454117A (en) * | 1993-08-25 | 1995-09-26 | Nexgen, Inc. | Configurable branch prediction for a processor performing speculative execution |
US5604877A (en) * | 1994-01-04 | 1997-02-18 | Intel Corporation | Method and apparatus for resolving return from subroutine instructions in a computer processor |
US5574871A (en) * | 1994-01-04 | 1996-11-12 | Intel Corporation | Method and apparatus for implementing a set-associative branch target buffer |
JP3494484B2 (ja) * | 1994-10-12 | 2004-02-09 | 株式会社ルネサステクノロジ | 命令処理装置 |
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 |
US5860104A (en) * | 1995-08-31 | 1999-01-12 | Advanced Micro Devices, Inc. | Data cache which speculatively updates a predicted data cache storage location with store data and subsequently corrects mispredicted updates |
US5842008A (en) * | 1996-06-18 | 1998-11-24 | Intel Corporation | Method and apparatus for implementing a branch target buffer cache with multiple BTB banks |
US5774710A (en) * | 1996-09-19 | 1998-06-30 | Advanced Micro Devices, Inc. | Cache line branch prediction scheme that shares among sets of a set associative cache |
-
1994
- 1994-01-04 US US08/177,155 patent/US5574871A/en not_active Expired - Lifetime
- 1994-12-20 GB GB9425726A patent/GB2285526B/en not_active Expired - Fee Related
- 1994-12-20 SG SG1996001862A patent/SG50456A1/en unknown
- 1994-12-29 JP JP34032194A patent/JP3548255B2/ja not_active Expired - Fee Related
- 1994-12-30 DE DE4447238A patent/DE4447238B4/de not_active Expired - Fee Related
-
1996
- 1996-07-29 US US08/687,975 patent/US5706492A/en not_active Expired - Lifetime
-
1997
- 1997-09-16 US US08/931,807 patent/US5903751A/en not_active Expired - Lifetime
-
1998
- 1998-10-07 US US09/168,305 patent/US5944817A/en not_active Expired - Lifetime
- 1998-12-17 HK HK98113950A patent/HK1012743A1/xx not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
DE4447238B4 (de) | 2005-08-18 |
GB9425726D0 (en) | 1995-02-22 |
US5944817A (en) | 1999-08-31 |
DE4447238A1 (de) | 1995-07-13 |
GB2285526A (en) | 1995-07-12 |
JPH07210383A (ja) | 1995-08-11 |
GB2285526B (en) | 1998-11-18 |
HK1012743A1 (en) | 1999-08-06 |
US5903751A (en) | 1999-05-11 |
US5706492A (en) | 1998-01-06 |
US5574871A (en) | 1996-11-12 |
SG50456A1 (en) | 1998-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3548255B2 (ja) | 分岐命令予測機構及び予測方法 | |
US6697932B1 (en) | System and method for early resolution of low confidence branches and safe data cache accesses | |
KR100395763B1 (ko) | 멀티프로세싱 마이크로프로세서에 적합한 분기 예측기 | |
KR100270003B1 (ko) | 향상된 분기 예측 기법을 사용하는 프로세서 및그 실행 방법 | |
US5812839A (en) | Dual prediction branch system having two step of branch recovery process which activated only when mispredicted branch is the oldest instruction in the out-of-order unit | |
US6505293B1 (en) | Register renaming to optimize identical register values | |
US7458069B2 (en) | System and method for fusing instructions | |
US6185676B1 (en) | Method and apparatus for performing early branch prediction in a microprocessor | |
JP3182740B2 (ja) | 単一クロック・サイクルに非連続命令を取り出すための方法およびシステム。 | |
US6526502B1 (en) | Apparatus and method for speculatively updating global branch history with branch prediction prior to resolution of branch outcome | |
US20020144101A1 (en) | Caching DAG traces | |
EP1145110B1 (en) | Circuit and method for tagging and invalidating speculatively executed instructions | |
JP5255367B2 (ja) | 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法 | |
US7707398B2 (en) | System and method for speculative global history prediction updating | |
US6728872B1 (en) | Method and apparatus for verifying that instructions are pipelined in correct architectural sequence | |
EP2024820B1 (en) | Sliding-window, block-based branch target address cache | |
KR101081674B1 (ko) | 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법 | |
KR20070118135A (ko) | 인덱스당 2개 이상의 분기 타겟 어드레스를 저장하는 분기타겟 어드레스 캐시 | |
US5918046A (en) | Method and apparatus for a branch instruction pointer table | |
US5842008A (en) | Method and apparatus for implementing a branch target buffer cache with multiple BTB banks | |
JP2006520964A (ja) | 分岐ターゲットに基づいて分岐予測をするための方法および装置 | |
JP2000181710A (ja) | 分岐命令実行制御装置 | |
US5146570A (en) | System executing branch-with-execute instruction resulting in next successive instruction being execute while specified target instruction is prefetched for following execution | |
JP7046087B2 (ja) | キャッシュ・ミス・スレッド・バランシング | |
US20220050684A1 (en) | Program counter (pc)-relative load and store addressing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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: 20040413 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040416 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090423 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090423 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100423 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100423 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110423 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |