JP2001521241A - 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ - Google Patents

分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ

Info

Publication number
JP2001521241A
JP2001521241A JP2000518321A JP2000518321A JP2001521241A JP 2001521241 A JP2001521241 A JP 2001521241A JP 2000518321 A JP2000518321 A JP 2000518321A JP 2000518321 A JP2000518321 A JP 2000518321A JP 2001521241 A JP2001521241 A JP 2001521241A
Authority
JP
Japan
Prior art keywords
branch
instruction
byte
bytes
group
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.)
Granted
Application number
JP2000518321A
Other languages
English (en)
Other versions
JP3794917B2 (ja
Inventor
トラン,サン・エム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2001521241A publication Critical patent/JP2001521241A/ja
Application granted granted Critical
Publication of JP3794917B2 publication Critical patent/JP3794917B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 分岐予測ユニットは、命令キャッシュに記憶された連続する命令バイトの群の各々に対応する1組の分岐セレクタを記憶する。各分岐セレクタは、その分岐セレクタに対応するフェッチアドレスが提示されると、選択すべき分岐予測を特定する。連続する命令バイトの群に対して記憶された分岐セレクタの数を最小にするために、その群は複数のバイト範囲に分けられる。最大のバイト範囲は命令セット中の(復帰命令を除く)最短の分岐命令を含む多数のバイトを含み得る。たとえば、最短の分岐命令は一実施例では2バイトであり得る。したがって、最大のバイト範囲はこの例では2バイトである。群としての分岐セレクタは、テイクン予測された分岐命令のエンドバイトにおいてのみ値を変更する(すなわち別の分岐命令を示す)ので、群内のバイト数より少ない分岐セレクタが記憶され得る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】
本発明はマイクロプロセッサの分野に関し、より特定的には、マイクロプロセ
ッサ内の分岐予測機構に関する。
【0002】
【関連技術の説明】
スーパースカラマイクロプロセッサは、1クロックサイクルあたり複数の命令
を実行すること、および設計と整合した可能な限り最短のクロックサイクルを選
択することにより、高性能を達成する。ここでは、用語「クロックサイクル」は
、マイクロプロセッサ内の命令処理パイプラインの種々の段階に与えられた時間
のインターバルを表わすものとして用いられる。記憶装置(たとえばレジスタお
よびアレイ)はクロックサイクルに従ってそれらの値を取込む。たとえば、記憶
装置はクロックサイクルを規定するクロック信号の立上がりエッジまたは立下が
りエッジに従って値を取込むであろう。この記憶装置はその後、それぞれクロッ
ク信号の後続の立上がりエッジまたは立下がりエッジまで、その値を記憶する。
用語「命令処理パイプライン」はここでは、パイプライン形式で命令を処理する
ために採用された論理回路を示すのに用いられる。このパイプラインは、命令処
理の部分が行なわれるいかなる数の段階に分けられてもよいが、命令処理は通常
、命令のフェッチ、命令のデコード、命令の実行、およびその実行の結果の、命
令によって特定された宛先をへの格納を含む。
【0003】 スーパースカラマイクロプロセッサ(およびスーパーパイプラインマイクロプ
ロセッサ)の重要な特徴は、その分岐予測機構である。分岐予測機構は分岐命令
に対して予測された方向(テイクンまたはノットテイクン)を示し、分岐予測に
よって示された予測命令ストリーム内で後続の命令のフェッチを続けることを可
能にする。分岐命令は少なくとも2つのアドレス(分岐命令に直接続く命令で始
まる命令ストリームを特定する順次アドレス、およびメモリ内の任意の場所で始
まる命令ストリームを特定するターゲットアドレス)のうちの1つから、後続の
命令をフェッチさせる命令である。無条件分岐命令は常にターゲットアドレスへ
分岐するのに対し、条件付き分岐命令は先行の命令の出力に基づいて順次アドレ
スかターゲットアドレスかのいずれかを選択し得る。予測命令ストリームからの
命令は、分岐命令の実行に先行して投機的に実行されてもよく、またいかなる場
合も、分岐命令の実行に先行して命令処理パイプラインに置かれる。予測命令ス
トリームが正しい場合、クロックサイクルごとに実行される命令の数が増加する
という効果を奏する。しかしながら、予測命令ストリームが正しくない場合(す
なわち1つ以上の分岐命令が誤って予測された場合)、誤って予測された命令ス
トリームからの命令は命令処理パイプラインから廃棄され、クロックサイクルご
とに実行される命令の数は減少する。
【0004】 効果を発揮するためには、分岐予測機構は予測命令ストリームができる限り高
い頻度で正しくなるように非常に正確でなければならない。典型的には、分岐予
測機構の正確さを増すには、分岐予測機構の複雑さを増すとよい。たとえば、分
岐予測が命令キャッシュ内の命令バイトの特定のキャッシュラインに対応して記
憶されるという、キャッシュラインベースの分岐予測スキームを採用してもよい
。キャッシュラインとは、キャッシュ内の記憶スペースを割当および割当解除す
る際の単位として扱われる、多数の連続するバイトである。命令キャッシュライ
ンがフェッチされると、対応する分岐予測もまたフェッチされる。さらに、特定
のキャッシュラインが廃棄されると、対応する分岐予測も同様に廃棄される。キ
ャッシュラインはメモリ内で整列される。キャッシュラインベースの分岐予測ス
キームは、各キャッシュラインに対してより多数の分岐予測を記憶することによ
りさらに正確にされ得る。所与のキャッシュラインは複数の分岐命令を含み、そ
れらの各々は異なる分岐予測によって表わされ得る。したがって、キャッシュラ
インにより多くの分岐予測を割当てると、より多くの分岐命令が分岐予測機構に
よって表わされかつ予測されることが可能になる。分岐予測機構内に代理を持た
ない分岐命令は予測されず、後に分岐がテイクンであるとわかると「予測誤り」
が検出され得る。しかしながら、追加された分岐予測の中から選択する必要があ
ることによって分岐予測機構の複雑さが増大する。ここでは「分岐予測」は、分
岐命令がテイクンまたはノットテイクンであるか否かの予測として、分岐予測機
構によって解釈され得る値として用いられる。さらに、分岐予測はターゲットア
ドレスを含み得る。キャッシュラインベースの分岐予測機構に関しては、フェッ
チされているキャッシュラインに対するシーケンシャルなラインの予測とは、キ
ャッシュラインからフェッチされている命令内に分岐命令が全くない場合の分岐
予測である。
【0005】 分岐予測機構の複雑さを増すことに関する問題は、複雑さが増すと、通常、分
岐予測を形成するのにかかる所要時間も増す必要があるということである。たと
えば、複数の分岐予測間での選択はかなりの時間を要し得る。フェッチアドレス
のオフセットは、キャッシュライン内のフェッチされている先頭バイトを特定す
る。すなわち、オフセットに先行する分岐命令の分岐予測は選択すべきではない
。いずれの分岐予測を用いるかを決定するために、キャッシュライン内のフェッ
チアドレスのオフセットをキャッシュラインに対して記憶された分岐予測によっ
て表わされる分岐命令のオフセットと比較する必要があり得る。フェッチアドレ
スのオフセットの後に続き、かつフェッチアドレスのオフセットに後続する他の
分岐命令と比べてフェッチアドレスのオフセットにより近い、分岐命令に対応す
る分岐予測が選択されるべきである。分岐予測の数が増大すると、選択論理の複
雑さ(および所要時間)も増大する。フェッチアドレスに対する分岐予測を形成
するための所要時間がマイクロプロセッサのクロックサイクル時間を超えると、
マイクロプロセッサの性能は低減し得る。分岐予測を単一クロックサイクルで形
成することはできないので、前のフェッチアドレスに対応する分岐予測がないこ
とにより、命令をフェッチすることができないクロックサイクル中に「バブル」
が命令処理パイプラインに入り込む。このバブルは、後続のクロックサイクル中
にも命令処理パイプラインのさまざまな段階を占め、バブルは命令を含まないの
でバブルを含む段階ではいかなる処理も行なわれない。したがって、マイクロプ
ロセッサの性能は低減し得る。
【0006】
【発明の概要】 上述した問題の大部分は、本発明に従った分岐予測ユニットによって解決され
る。分岐予測ユニットは、命令キャッシュに記憶された連続する命令バイトの群
の各々に対応する1組の分岐セレクタを記憶する。各分岐セレクタは、分岐セレ
クタに対応するフェッチアドレスが提示されると、選択すべき分岐予測を特定す
る。フェッチアドレスのオフセットと分岐命令のオフセットとの、時間のかかる
比較は省いてもよいという効果がある。よって、より複雑な分岐予測機構が、以
前に達成可能であったかもしれないものよりさらに高い周波数でサポートされ得
る。
【0007】 連続する命令バイトの群について記憶された分岐セレクタの数を最小にするた
めに、この群は複数のバイト範囲に分けられる。最大のバイト範囲は、命令セッ
ト内の(復帰命令を除く)最短の分岐命令を含む、複数のバイトを含み得る。た
とえば、最短の分岐命令は一実施例では2バイトであり得る。したがって、この
例では最大のバイト範囲は2バイトである。群としての分岐セレクタは、テイク
ン予測された分岐命令のエンドバイトにおいてのみ、値を変える(すなわち異な
る分岐命令を示す)ので、その群内のバイト数より少ない分岐セレクタが記憶さ
れ得る。分岐予測記憶部の大きさは、分岐セレクタが各バイトについて記憶され
るときよりも、より小さくなり得るという効果がある。より小さい分岐予測記憶
部はより速いアクセス時間を示すだろうし、分岐予測機構を用いて達成可能なク
ロックサイクル時間を向上させることができる。さらに、分岐予測記憶部が占め
る基板領域エリアも減少するので、費用も減じられ得る。
【0008】 概して、本発明は、分岐予測記憶部および選択装置を含む分岐予測機構を企図
する。命令キャッシュからフェッチされる連続する命令バイトの群に対応するフ
ェッチアドレスを受けるように結合されて、分岐予測記憶部は、複数の分岐セレ
クタを記憶するように構成される。連続する命令バイトの群は複数のバイト範囲
を含み、複数の分岐セレクタの各々が複数のバイト範囲の別の1つに対応する。
さらに、複数の分岐セレクタの各々は分岐予測を特定する。選択装置は複数の分
岐セレクタの選択された1つを選択するように構成される。複数の分岐セレクタ
の選択された1つは複数のバイト範囲の選択された1つに対応する。複数のバイ
ト範囲の選択された1つはフェッチアドレスによって特定されたバイトを含む。
【0009】 本発明はさらに、分岐予測を行なうための方法を企図する。連続する命令バイ
トの群に対応する複数の分岐セレクタが記憶される。複数の分岐セレクタの各々
は連続する命令バイトの群内の別のバイト範囲に対応し、そのバイト範囲内のバ
イトがフェッチされると選択される分岐予測を特定する。連続する命令バイトの
群の1つ以上が、フェッチアドレスを用いて命令キャッシュからフェッチされる
。フェッチアドレスに応答して、複数の分岐セレクタの1つが選択される。続い
て、複数の分岐セレクタの1つによって特定された分岐予測が選択される。
【0010】 さらに、本発明は命令キャッシュおよび分岐予測ユニットを含むマイクロプロ
セッサを企図する。命令キャッシュは、フェッチアドレスを受けるために、かつ
そのフェッチアドレスに応答して連続する命令バイトの群を与えるために、結合
される。命令キャッシュと同時にフェッチアドレスを受けるように結合されて、
分岐予測ユニットは、複数の分岐セレクタを記憶するように構成される。複数の
分岐セレクタは、連続する命令バイトの群に対応する。さらに、複数の分岐セレ
クタの各々は、連続する命令バイトの群内の複数のバイト範囲のうち対応するそ
れぞれに対応する。分岐予測ユニットは、フェッチアドレスに応答して複数の分
岐セレクタの1つを選択するように構成され、複数の分岐セレクタの1つによっ
て特定される分岐予測を用いて後続のフェッチアドレスを予測するようにさらに
構成される。
【0011】 本発明のその他の目的および利点は次の詳細な説明を読むことにより、また添
付の図面を参照することにより、明らかになるであろう。
【0012】 本発明は種々の変形および代替の形態が可能であるが、それらの特定の実施例
を例として図示し、ここに詳細に述べる。しかしながら、当然、図面およびその
詳細な説明は本発明を開示した特定の形態に限定することを意図するのではなく
、逆に、前掲の請求項に規定された本発明の精神および範囲内にあるすべての変
形例、等価物および代替例を包含することを意図するものである。
【0013】
【詳細な説明】
ここで図1を参照して、マイクロプロセッサ10の一実施例のブロック図が示
される。マイクロプロセッサ10はプリフェッチ/プリデコードユニット12、
分岐予測ユニット14、命令キャッシュ16、命令整列ユニット18、複数のデ
コードユニット20A−20C、複数の予約ステーション22A−22C、複数
の機能ユニット24A−24C、ロード/ストアユニット26、データキャッシ
ュ28、レジスタファイル30、リオーダバッファ32、およびMROMユニッ
ト34を含む。ここで特定の参照番号に続いてアルファベットを付して示した要
素は、その参照番号単独でまとめて示す。たとえば、デコードユニット20Aか
ら20Cは、まとめてデコードユニット20と示す。
【0014】 プリフェッチ/プリデコードユニット12はメインメモリサブシステム(図示
せず)からの命令を受けるように結合され、さらに命令キャッシュ16および分
岐予測ユニット14に結合される。同様に、分岐予測ユニット14は命令キャッ
シュ16に結合される。またさらに、分岐予測ユニット14はデコードユニット
20および機能ユニット24に結合される。命令キャッシュ16はさらに、MR
OMユニット34および命令整列ユニット18に結合される。命令整列ユニット
18は次いでデコードユニット20に結合される。デコードユニット20A−2
0Cの各々はロード/ストアユニット26、およびそれぞれの予約ステーション
22A−22Cに結合される。予約ステーション22A−22Cはそれぞれの機
能ユニット24A−24Cにさらに結合される。また、デコードユニット20お
よび予約ステーション22はレジスタファイル30およびリオーダバッファ32
に結合される。機能ユニット24は、ロード/ストアユニット26、レジスタフ
ァイル30、およびリオーダバッファ32にも同様に結合される。データキャッ
シュ28は、ロード/ストアユニット26およびメインメモリサブシステムに結
合される。最後に、MROMユニット34はデコードユニット20に結合される
【0015】 一般に、分岐予測ユニット14は分岐命令を予測するためにキャッシュライン
ベースの分岐予測機構を採用する。各キャッシュラインに対して複数の分岐予測
が記憶され得る。さらに、キャッシュラインは複数のバイト範囲に分けられ、キ
ャッシュライン内の各バイト範囲について分岐セレクタが記憶される。特定のバ
イト範囲の分岐セレクタは、キャッシュラインに関して記憶され得る分岐予測の
うち、特定のバイト範囲内のあるバイトをフェッチする命令フェッチアドレスに
適切な分岐予測がどれであるかを示す。ここでは、バイト範囲は、キャッシュラ
イン(または以下に述べるように命令キャッシュ16の出力で全キャッシュライ
ンに満たないものが与えられた場合はその一部)内の1つ以上の連続するバイト
として用いられる。適切な分岐予測とは、特定のバイトに後続するキャッシュラ
イン内にある第1のテイクン予測された分岐命令に対する分岐予測である。ここ
で用いる用語「後続の」および「先行の」はキャッシュライン内のバイトの順序
を示す。第2のバイトが記憶されるメモリアドレスより数の小さいメモリアドレ
スに記憶されたバイトは、第2のバイトに先行するという。逆に、第2のバイト
のメモリアドレスより数が大きいメモリアドレスに記憶されたバイトは、第2の
バイトに後続する、という。同様に、プログラムを形成する命令のシーケンスの
中を一度に1ずつ進むと、第1の命令が第2の命令の前にある場合、プログラム
順で第1の命令が第2の命令に先行する、という。
【0016】 一実施例では、マイクロプロセッサ10は、命令セットが可変バイト長命令セ
ットであるマイクロプロセッサ・アーキテクチャ(たとえばx86マイクロプロ
セッサ・アーキテクチャ)を採用する。可変バイト長命令セットが採用される場
合、キャッシュライン内のどのバイトでも、所与のフェッチアドレスによってフ
ェッチされる先頭バイトとして特定されることがあり得る。たとえば、分岐命令
はキャッシュライン内のバイト位置2にターゲットアドレスを有し得る。このよ
うな場合、バイト位置0およびバイト位置1のバイトは現在のキャッシュアクセ
ス中にはフェッチされていない。さらに、テイクン予測された分岐(第1のバイ
トに後続するもの)に後続するバイトは、現在のキャッシュアクセス中にはフェ
ッチされない。テイクン予測された分岐に対する分岐予測は、キャッシュライン
からフェッチされる第1のバイトを含むバイト範囲に対応する分岐セレクタを選
択することにより見つけることができる。分岐セレクタは、後に命令キャッシュ
16の命令フェッチ論理に与えられる適切な分岐予測を選択するために用いられ
る。続いて起こるクロックサイクル中、分岐予測はフェッチアドレスとして用い
られる。フェッチされる第1のバイトのバイト位置と、テイクン予測された分岐
命令のバイト位置とを比較する処理を、フェッチアドレスに応答する分岐予測の
生成から省くことができるという効果がある。分岐予測を形成するための所要時
間もこれに従って減少し、分岐予測機構は、単一サイクル分岐予測を与えながら
も、より高いクロック周波数(すなわちより短いクロックサイクル)で動作する
ことが可能になる。
【0017】 これまでの論述で「キャッシュライン」という用語が用いられてきたが、命令
キャッシュ16のいくつかの実施例は、所与のクロックサイクル中にその出力に
キャッシュライン全体を与えない場合もあることを述べておく。たとえば、ある
実施例では、命令キャッシュ16は32バイトのキャッシュラインで構成される
。しかしながら、所与のクロックサイクル(キャッシュラインの上半分または下
半分のいずれか)において16バイトしかフェッチされない。分岐予測記憶場所
および分岐セレクタは、フェッチされているキャッシュラインの部分に割当てら
れる。ここでは、「連続する命令バイトの群」という用語は、フェッチアドレス
に応答して特定のクロックサイクルにおける命令キャッシュによって与えられる
、命令バイトを示すのに用いられる。連続する命令バイトの群は、さまざまな実
施例によれば、キャッシュラインの一部、またはキャッシュライン全体であり得
る。連続する命令バイトの群がキャッシュラインの一部である場合でも、それは
依然としてキャッシュラインの整列されている部分である。たとえば、連続する
命令バイトの群がキャッシュラインの半分である場合、それはそのキャッシュラ
インの上半分またはそのキャッシュラインの下半分のいずれかである。多数の分
岐予測記憶場所が連続する命令バイトの群の各々に割当てられ、分岐セレクタは
その群に関連する分岐予測記憶場所の1つを示す。さらに、分岐セレクタは復帰
スタック構造からの復帰スタックアドレス、または、連続する命令バイトの群に
おける対応のバイトと、最後のバイトとの間に分岐命令が全くない場合はシーケ
ンシャルアドレスを示し得る。
【0018】 命令キャッシュ16は命令を記憶するために設けられる高速キャッシュメモリ
である。命令は命令キャッシュ16からフェッチされ、デコードユニット20へ
ディスパッチされる。ある実施例では、命令キャッシュ16は、32バイトのラ
イン(1バイトは8バイナリビットを含む)を有する4ウェイ・セットアソシア
ティブ構造で64キロバイトの命令まで記憶するように構成される。代替的には
、2ウェイ・セットアソシアティビティおよび他の何らかの望ましいアソシアテ
ィビティを採用してもよい。命令キャッシュ16はさらに、命令キャッシュへの
アクセス時間を速めるためにウェイ予測スキームを採用してもよい。命令の各ラ
インを特定するタグにアクセスし、それらのタグをフェッチアドレスと比較して
ウェイを選択する代わりに、命令キャッシュ16はアクセスされるウェイを予測
する。この方法で、ウェイは命令記憶部へのアクセスの前に選択される。命令キ
ャッシュ16のアクセス時間はダイレクトマップされたキャッシュと同様であり
得る。タグ比較が行なわれ、ウェイ予測が正しくない場合、正しい命令がフェッ
チされ、正しくない命令は廃棄される。なお、命令キャッシュ16はフルアソシ
アティブ、セットアソシアティブ、またはダイレクトマップされた構成として実
現され得る。
【0019】 命令はメインメモリからフェッチされ、プリフェッチ/プリデコードユニット
12によって命令キャッシュ16内へ記憶される。命令はその要求前に、命令キ
ャッシュ16からプリフェッチスキームに従ってプリフェッチされ得る。さまざ
まなプリフェッチスキームがプリフェッチ/プリデコードユニット12によって
採用され得る。プリフェッチ/プリデコードユニット12がメインメモリから命
令キャッシュ16へ命令を転送すると、プリフェッチ/プリデコードユニット1
2はそれらの命令の各々のバイトについて3つのプリデコードビット(スタート
ビット、エンドビット、および機能ビット)を生成する。プリデコードビットは
各命令のバウンダリを示すタグを形成する。プリデコードタグはまた、以下に詳
細に述べるように、所与の命令がデコードユニット20によって直接デコードさ
れ得るか否か、またはその命令がMROMユニット34によって制御されるマイ
クロコード手続きを呼出すことによって実行されるか否かなどの追加情報も伝達
し得る。またさらに、プリフェッチ/プリデコードユニット12は、分岐命令を
検出し、かつその分岐命令に対応する分岐予測情報を分岐予測ユニット14内へ
記憶するように構成され得る。
【0020】 次に、可変バイト長命令セットを採用するマイクロプロセッサ10の実施例に
対するプリデコードタグのエンコーディングの一例について述べる。可変バイト
長命令セットとは、種々の命令が種々のバイト数を占め得る命令セットである。
マイクロプロセッサ10の一実施例によって採用される可変バイト長命令セット
の例は、x86命令セットである。
【0021】 このエンコーディングの例では、所与のバイトが命令の最初のバイトである場
合、そのバイトに対してスタートビットがセットされる。このバイトが命令の最
後のバイトである場合、そのバイトに対してエンドビットがセットされる。デコ
ードユニット20によって直接デコードできる命令は「ファストパス」命令と呼
ばれる。残りのx86命令は一実施例ではMROM命令と呼ばれる。ファストパ
ス命令に対して、機能ビットは、命令に含まれるプレフィックスバイトの各々に
ついてはセットされ、他のバイトについてはクリアされる。これに代えて、MR
OM命令に対しては、機能ビットは各プレフィックスバイトについてはクリアさ
れ、他のバイトについてはセットされる。命令のタイプは、エンドバイトに対応
する機能ビットを調べることにより決定され得る。機能ビットがクリアされてい
る場合、命令はファストパス命令である。逆に、機能ビットがセットされている
場合、命令はMROM命令である。命令のオペコードは、したがって、デコード
ユニット20によって直接デコードできる命令内では、その命令内の第1のクリ
ア機能ビットと関連するバイトとして見つけることができる。たとえば、2つの
プレフィックスバイト、Mod R/Mバイト、および即値バイトを含むファス
トパス命令はスタートビット、エンドビット、および機能ビットを次のとおり有
するであろう。
【0022】 スタートビット 10000 エンドビット 00001 機能ビット 10000 ある特定の実施例に従うと、スケール−インデックス−基底(SIB)バイト
を含む命令を早期に特定することは、MROMユニット34については有利であ
る。このような実施例については、命令がオペコードバイトの後に少なくとも2
バイトを含む場合、Mod R/Mバイトに対する機能ビットはSIBバイトの
存在を示す。Mod R/Mバイトに対する機能ビットがセットされている場合
、SIBバイトが存在する。これに代えて、Mod R/Mバイトに対する機能
ビットがクリアされている場合、SIBバイトは存在しない。
【0023】 MROM命令は、デコードユニット20によってデコードするには複雑すぎる
と判断される命令である。MROM命令は、MROMユニット34を呼出すこと
により実行される。より具体的には、MROM命令に出会うと、MROMユニッ
ト34はその命令を解析して、定められたファストパス命令のサブセットとして
発行し、所望の動作を実行する。MROMユニット34はファストパス命令のサ
ブセットをデコードユニット20へディスパッチする。ファストパス命令として
カテゴリ化されるx86命令の例のリストは、後に示す。
【0024】 マイクロプロセッサ10は条件付き分岐命令に後続する命令を投機的にフェッ
チするために分岐予測を採用する。分岐予測動作を行なうために分岐予測ユニッ
ト14が含まれる。一実施例では、命令キャッシュ16内の各キャッシュライン
の16バイト部分の各々に対して2つまでの分岐ターゲットアドレスが記憶され
る。プリフェッチ/プリデコードユニット12は、特定のラインがプリデコード
されると初期分岐ターゲットを決定する。キャッシュラインに対応する分岐ター
ゲットの後続する更新が、キャッシュライン内の命令の実行によって起こり得る
。命令キャッシュ16はフェッチされる命令アドレスを示すので、分岐予測ユニ
ット14は分岐予測を形成するためにいずれの分岐ターゲットアドレスを選択す
るかを判断し得る。デコードユニット20および機能ユニット24は分岐予測ユ
ニット14に更新情報を与える。分岐予測ユニット14はキャッシュラインの1
6バイト部分ごとに2つのターゲットを記憶するので、ライン内の分岐命令のい
くつかは分岐予測ユニット14内に記憶されない場合もある。デコードユニット
20は分岐予測ユニット14によって予測されなかった分岐命令を検出する。機
能ユニット24は分岐命令を実行し、予測された分岐方向が誤りであるかを判断
する。この分岐方向は、後続の命令が分岐命令のターゲットアドレスからフェッ
チされる「テイクン」であり得る。逆に、この分岐方向は、後続の命令が分岐命
令に連続するメモリ場所からフェッチされる「ノットテイクン」でもあり得る。
予測誤りのあった分岐命令が検出されると、予測誤りのあった分岐に続く命令が
マイクロプロセッサ10のさまざまなユニットから廃棄される。種々の適切な分
岐予測アルゴリズムが、分岐予測ユニット14によって採用され得る。
【0025】 命令キャッシュ16からフェッチされた命令は、命令整列ユニット18に与え
られる。命令が命令キャッシュ16からフェッチされると、対応するプリデコー
ドデータが走査され、フェッチされている命令に関する情報を命令整列ユニット
18(およびMROMユニット34)に与える。命令整列ユニット18は、走査
データを用いて命令をデコードユニット20の各々と整列する。一実施例では、
命令整列ユニット18はデコードユニット20の8つの命令バイトの3つのセッ
トからの命令を整列する。命令は8命令バイトの各組から互いに独立して予備発
行位置に選択される。この予備発行位置はこの後、デコードユニット20に対応
する1組の整列された発行位置にマージされ、よって整列された発行位置は、プ
ログラム順において予備発行位置内の他の命令に先行する3つの命令を含む。デ
コードユニット20Aは、デコードユニット20Bおよび20Cによって(プロ
グラム順において)同時に受けられた命令に先行する命令を受ける。同様に、デ
コードユニット20Bはデコードユニット20Cによって同時に受けられた命令
にプログラム順において先行する命令を受ける。
【0026】 デコードユニット20は、命令整列ユニット18から受けた命令をデコードす
るように構成される。レジスタオペランド情報が検出され、レジスタファイル3
0およびリオーダバッファ32に送られる。さらに、命令が1つ以上のメモリ演
算を行なうことを要する場合、デコードユニット20はメモリ演算をロード/ス
トアユニット26にディスパッチする。各命令は機能ユニット24に対する1組
の制御値にデコードされ、これらの制御値はオペランドアドレス情報および命令
に含まれ得る変位または即値データとともに、予約ステーション22にディスパ
ッチされる。
【0027】 マイクロプロセッサ10はアウトオブオーダ実行をサポートし、したがってリ
オーダバッファ32を採用してレジスタ読出および書込動作についての元のプロ
グラムシーケンスの記録を取り、レジスタ・リネーミングを実現し、投機的な命
令の実行および分岐予測誤りのリカバリを可能にし、かつ精密に例外を発生する
ことを容易にする。レジスタの更新を伴う命令のデコード時にリオーダバッファ
32内の一時記憶場所が、投機的レジスタ状態を記憶するために予約される。分
岐予測が正しくない場合には、誤予測された経路に沿って投機的に実行された命
令の結果を、レジスタファイル30へ書込む前にバッファ内で無効にすることが
できる。同様に、特定の命令が例外を生じる場合、その特定の命令に後続する命
令は廃棄できる。この態様では、例外は「精密」である(すなわち例外を引起こ
す特定の命令に後続する命令が例外に先行して完了されることはない)。なお、
特定の命令がプログラム順で特定の命令に先行する命令の前に実行される場合、
その特定の命令は投機的に実行される、といわれる。先行する命令は分岐命令ま
たは例外を引起こす命令であるかもしれず、その場合、投機的結果はリオーダバ
ッファ32によって廃棄され得る。
【0028】 命令制御値およびデコードユニット20の出力に与えられた即値または変位デ
ータは、それぞれの予約ステーション22へ直接送られる。一実施例では、各予
約ステーション22は命令情報(すなわち命令制御値、オペランド値、オペラン
ドタグおよび/または即値データ)を、対応の機能ユニットへの発行を待ってい
るペンディング中の命令3つまでについて保持することが可能である。なお、図
1の実施例では、各予約ステーション22は専用機能ユニット24に関連づけら
れる。したがって、3つの専用「発行位置」が、予約ステーション22および機
能ユニット24によって形成される。すなわち、発行位置0は予約ステーション
22Aおよび機能ユニット24Aによって形成される。予約ステーション22A
に整列されかつディスパッチされた命令は、機能ユニット24Aによって実行さ
れる。同様に、発行位置1は予約ステーション22Bおよび機能ユニット24B
によって形成され、発行位置2は予約ステーション22Cおよび機能ユニット2
4Cによって形成される。
【0029】 特定の命令のデコード時に、必要なオペランドがレジスタ場所である場合、レ
ジスタアドレス情報はリオーダバッファ32およびレジスタファイル30に同時
に送られる。当業者は、x86レジスタファイルが8つの32ビットリアルレジ
スタ(典型的にはEAX、EBX,ECX、EDX、EBP、ESI、EDIお
よびESPと呼ばれる)を含むということがわかるであろう。x86マイクロプ
ロセッサアーキテクチャを採用するマイクロプロセッサ10の実施例では、レジ
スタファイル30は32ビットリアルレジスタの各々についての記憶場所を含む
。MROMユニット34が用いるために、さらなる記憶場所がレジスタファイル
30内に含まれ得る。リオーダバッファ32は、これらのレジスタの内容を変更
するような結果に対する一時記憶場所を含み、それによりアウトオブオーダ実行
が可能になる。リオーダバッファ32の一時記憶場所が、リアルレジスタの1つ
の内容を修正するとデコード時に判定された各命令について予約される。したが
って、特定のプログラムの実行中のさまざまな点で、リオーダバッファ32は所
与のレジスタの投機的に実行された内容を含む1つ以上の場所を有し得る。所与
の命令のデコードに続いて、リオーダバッファ32が所与の命令内のオペランド
として用いられるレジスタに割当てられた先行の場所を有すると判断された場合
、リオーダバッファ32は、1)最も最近割当られた場所の値、または2)最終
的に先行の命令を実行する機能ユニットによってその値がまだ生成されていない
場合は最も最近割当てられた場所に対するタグ、のいずれかを、対応の予約ステ
ーションに送る。リオーダバッファ32が所与のレジスタのために予約された場
所を有する場合、オペランド値(またはリオーダバッファタグ)はレジスタファ
イル30からではなくリオーダバッファ32から与えられる。リオーダバッファ
32内に必要なレジスタのために予約された場所がない場合は、その値はレジス
タファイル30から直接取られる。オペランドがメモリ場所に対応する場合、オ
ペランド値はロード/ストアユニット26を通って予約ステーションへ与えられ
る。
【0030】 ある特定の実施例では、リオーダバッファ32は同時にデコードされた命令を
1つの単位として記憶し操作するように構成される。この構成はここでは「ライ
ン指向」と呼ばれる。複数の命令をともに走査することにより、リオーダバッフ
ァ32内に採用されるハードウェアは単純化され得る。たとえば、この実施例に
含まれるライン指向リオーダバッファは、デコードユニット20によって1つ以
上の命令がディスパッチされると常に、3つの命令(各デコードユニット20か
ら1つずつ)に関する命令情報に対して十分な記憶部を割当てる。対照的に、従
来のリオーダバッファにおいては、実際にディスパッチされる命令の数に依存し
て可変量の記憶部が割当てられる。可変量の記憶部を割当てるには、比較的大き
な数の論理ゲートが要求され得る。同時にデコードされる命令の各々が実行され
ると、この命令結果はレジスタファイル30に同時に記憶される。この記憶部は
その後、同時にデコードされた命令の別の組に割当てるために解放される。さら
に、1命令あたり使用された制御論理回路の量は、制御論理が複数の同時にデコ
ードされた命令にわたって共用されるので、減少する。特定の命令を特定するリ
オーダバッファタグは2つのフィールド(ラインタグおよびオフセットタグ)に
分けられる。ラインタグは特定の命令を含む同時にデコードされた命令の組を特
定し、オフセットタグはその組内のどの命令が特定の命令に対応するかを特定す
る。なお、命令結果をレジスタファイル30へ記憶し、対応する記憶部を解放す
ることは、命令を「リタイアする」と呼ばれる。さらに、マイクロプロセッサ1
0のさまざまな実施例においていかなるリオーダバッファ構成を採用してもよい
【0031】 前に述べたように、予約ステーション22は、命令が対応の機能ユニット24
によって実行されるまで命令を記憶する。命令は、(i)命令のオペランドが与
えられる場合、および(ii)同じ予約ステーション22A〜22C内にありかつ
プログラム順においてその命令に先行する命令に、オペランドがまだ与えられて
いない場合、実行のために選択される。ある命令が機能ユニット24の1つによ
って実行されると、その命令の結果は、結果が更新リオーダバッファ32に伝達
されるのと同時に、その結果を待っている予約ステーション22の全てへも直接
伝達される(この技術は通常「結果フォワーディング」と呼ばれる)。命令は実
行のために選択され、関連の結果がフォワーディングされるクロックサイクル中
に機能ユニット24A−24Cへと伝達され得る。予約ステーション22はこの
フォワーディングされた結果をこの場合は機能ユニット24へ送る。
【0032】 一実施例では、機能ユニット24の各々は整数の加算および減算などの算術演
算、シフト、ローテート、論理演算、ならびに分岐演算を行なうように構成され
る。これらの演算は、デコードユニット20によって特定の命令についてデコー
ドされた制御値に応答して行なわれる。浮動小数点ユニット(図示せず)もまた
浮動小数点演算に対処するために採用され得る。浮動小数点ユニットはコプロセ
ッサとして動作し、MROMユニット34から命令を受け、その後リオーダバッ
ファ32と通信して命令を完了し得る。さらに、機能ユニット24は、ロード/
ストアユニット26によって行なわれたロードおよびストアメモリ演算に対して
アドレス生成を行なうように構成され得る。
【0033】 機能ユニット24の各々はまた、条件付き分岐命令の実行に関する情報を分岐
予測ユニット14に与える。分岐予測が正しくなかった場合、分岐予測ユニット
14は命令処理パイプラインに入った予測誤りのあった分岐に続く命令をフラッ
シュし、必要な命令を命令キャッシュ16またはメインメモリからフェッチさせ
る。そのような状況では、誤予測された分岐命令の後に起こる元のプログラムシ
ーケンスの命令結果は廃棄され、これは投機的に実行されたものと、ロード/ス
トアユニット26およびリオーダバッファ32で一時的に記憶されたものとを含
む。
【0034】 機能ユニット24によって出された結果は、レジスタ値が更新されるべき場合
リオーダバッファ32に送られ、メモリ場所の内容が変更される場合ロード/ス
トアユニット26に送られる。この結果がレジスタに記憶される場合、リオーダ
バッファ32は命令がデコードされるとレジスタの値に対して予約された場所に
結果を記憶する。機能ユニット24およびロード/ストアユニット26からの結
果のフォワーデイングのために、複数の結果バス38が含まれる。結果バス38
は生成された結果、および実行中の命令を特定するリオーダバッファタグを伝達
する。
【0035】 ロード/ストアユニット26は機能ユニット24とデータキャッシュ28との
間にインターフェイスを設ける。一実施例では、ロード/ストアユニット26は
、データのための8つの記憶場所およびペンディングのロードまたはストアにつ
いてのアドレス情報を有するロード/ストアバッファを備えて構成される。デコ
ードユニット20はロード/ストアユニット26へのアクセスを調停する。バッ
ファがフルになると、デコードユニットは、ロード/ストアユニット26がペン
ディングのロードまたはストア要求情報のための空きを有するまで、待機しなけ
ればならない。ロード/ストアユニット26はまた、ペンディングのストアメモ
リ演算に対するロードメモリ演算についての従属性検査を行ない、データのコヒ
ーレンシが確実に維持されるようにする。メモリ演算とは、マイクロプロセッサ
10とメインメモリサブシステムとの間でのデータの転送である。メモリ演算は
、メモリに記憶されたオペランドを用いる命令の結果、またはデータ転送を生じ
るが他の動作は全く生じないロード/ストア命令の結果であり得る。さらに、ロ
ード/ストアユニット26は、x86マイクロプロセッサアーキテクチャによっ
て規定されるアドレス変換機構に関するセグメントレジスタおよび他のレジスタ
などの特殊レジスタのための特殊レジスタ記憶部を含み得る。
【0036】 一実施例では、ロード/ストアユニット26はロードメモリ演算を投機的に行
なうように構成される。ストアメモリ演算はプログラム順に行なわれるが、予測
されたウェイへ投機的に記憶されてもよい。予測されたウェイが正しくない場合
、ストアメモリ演算に先行するデータは、後に、予測されたウェイにストアし直
され、ストアメモリ演算は正しいウェイに対して行なわれる。別の実施例でも同
様に、ストアは投機的に実行され得る。投機的に実行されたストアは、更新前の
キャッシュラインのコピーとともにストアバッファ内に位置付けられる。投機的
に実行されたストアは分岐予測誤りまたは例外が原因で後に廃棄され、キャッシ
ュラインはバッファに記憶された値へとストアし直され得る。ロード/ストアユ
ニット26はいかなる量の投機的実行でも(投機的実行が全くない場合も含む)
行なうように構成され得る。
【0037】 データキャッシュ28はロード/ストアユニット26とメインメモリサブシス
テムとの間で転送されているデータを一時的に記憶するように設けられた高速キ
ャッシュメモリである。一実施例では、データキャッシュ28は8ウェイ・セッ
トアソシアティブ構造で16キロバイトのデータまで記憶できる容量を有する。
命令キャッシュ16と同様、データキャッシュ28もウェイ予測機構を採用し得
る。当然、データキャッシュ28は、セットアソシアティブ構成を含むさまざま
な特殊メモリ構成で実現され得る。
【0038】 x86マイクロプロセッサアーキテクチャを採用するマイクロプロセッサ10
のある特定の実施例では、命令キャッシュ16およびデータキャッシュ28はリ
ニアにアドレスされる。このリニアアドレスは、命令によって特定されたオフセ
ットおよびx86アドレス変換機構のセグメント部分によって特定された基底ア
ドレスから形成される。リニアアドレスはまた、必要であれば、メインメモリに
アクセスするために物理アドレスへ変換され得る。リニアから物理への変換は、
x86アドレス変換機構のページング部分によって特定される。リニアにアドレ
スされたキャッシュがリニアアドレスタグを記憶することも注目される。リニア
アドレスを物理アドレスへマッピングするために、また変換エイリアスを検出す
るために、1組の物理タグ(図示せず)が採用され得る。さらに、物理タグブロ
ックはリニアから物理へのアドレス変換を行なうこともできる。
【0039】 次に図2を参照して、デコードユニット20Bおよび20Cの一実施例のブロ
ック図が示される。各デコードユニット20は命令整列ユニット18から命令を
受ける。さらに、MROMユニット34は各デコードユニット20に結合されて
特定のMROM命令に対応するファストパス命令をディスパッチする。デコード
ユニット20Bは初期デコードユニット40B、マルチプレクサ42B、および
オペコードデコードユニット44Bを含む。同様に、デコードユニット20Cは
、初期デコードユニット40C、マルチプレクサ42C、およびオペコードデコ
ードユニット44Cを含む。
【0040】 x86命令セット中の特定の命令は、かなり複雑でありしかも頻繁に用いられ
るものである。マイクロプロセッサ10の一実施例では、このような命令は、特
定の機能ユニット24A−24C内に含まれるハードウェアが実行するように構
成されているものよりも複雑な演算を含む。このような命令は「二重ディスパッ
チ」命令と呼ばれる特殊タイプのMROM命令として分類される。これらの命令
は1対のオペコードデコードユニット44にディスパッチされる。なお、オペコ
ードデコードユニット44はそれぞれの予約ステーション22に結合される。オ
ペコードデコードユニット44A−44Cの各々は、対応の予約ステーション2
2A−22Cおよび機能ユニット24A−24Cとともに発行位置を形成する。
命令はオペコードデコードユニット44から対応の予約ステーション22へ伝達
され、さらに対応の機能ユニット24へ伝達される。
【0041】 MROMユニット34によって与えられた命令と初期デコードユニット40B
によって与えられた命令との間で選択を行なうためにマルチプレクサ42Bが含
まれる。MROMユニット34が命令をディスパッチしているときには、マルチ
プレクサ42BはMROMユニット34によって与えられた命令を選択する。そ
の他のときは、マルチプレクサ42Bは初期デコードユニット40Bによって与
えられた命令を選択する。同様に、マルチプレクサ42CはMROMユニット3
4によって与えられた命令と、初期デコードユニット40Bによって与えられた
命令と、初期デコードユニット40Cによって与えられた命令との間で選択する
。MROMユニット34からの命令は、MROMユニット34が命令をディスパ
ッチしているときに選択される。デコードユニット20A(図示せず)内の初期
デコードユニットが二重ディスパッチ命令を検出するときには、初期デコードユ
ニット40Bからの命令がマルチプレクサ42Cによって選択される。それ以外
は、初期デコードユニット40Cからの命令が選択される。初期デコードユニッ
ト40Bからオペコードデコードユニット44Cへの命令を選択することにより
、デコードユニット20Aによってデコードされる二重ディスパッチ命令と同時
に、デコードユニット20Bによってデコードされるファストパス命令もディス
パッチすることが可能になる。
【0042】 x86命令セットを採用する一実施例によれば、初期デコードユニット40は
以下の動作を行なう。
【0043】 (i) 命令のプレフィックスバイトをエンコードされたプレフィックスバイ
トにマージする。
【0044】 (ii) 分岐予測中に検出されなかった無条件分岐命令(無条件ジャンプ、C
ALL、およびRETURNも含み得る)をデコードする。
【0045】 (iii) ソースフラグおよび宛先フラグをデコードする。 (iv) レジスタオペランドであるソースおよび宛先オペランドをデコードし
、オペランドサイズ情報を生成する。
【0046】 (v) 変位および即値データがオペコードデコードユニットへ送られ得るよ
うに変位および/または即値サイズを決定する。
【0047】 オペコードデコードユニット44は命令のオペコードをデコードするように構
成され、機能ユニット24の制御値を生じる。変位および即値データは制御値と
ともに予約ステーション22へ送られる。
【0048】 初期デコードユニット40がオペランドを検出するので、マルチプレクサ42
の出力はレジスタファイル30およびリオーダバッファ32へ送られる。オペラ
ンド値またはタグはこれによって予約ステーション22へ送られ得る。さらに、
メモリオペランドは初期デコードユニット40によって検出される。したがって
、マルチプレクサ42の出力はロード/ストアユニット26へ送られる。メモリ
オペランドを有する命令に対応するメモリ演算は、ロード/ストアユニット26
によって記憶される。
【0049】 次に図3を参照して、連続する命令バイト50の群の例および対応するブラン
チセレクタ52の組の図が表される。図3では、命令内の各バイトは短い垂直線
(たとえば参照番号54)で示される。さらに、群50において命令を分離する
垂直線はバイトを区分する(たとえば参照番号56)。図3に示す命令は可変長
であり、したがって図3に示す命令を含む命令セットは可変バイト長命令セット
である。言い換えれば、可変バイト長命令セット内の第1の命令は、その命令セ
ット内の第2の命令が占める第2のバイト数とは異なる第1のバイト数を占め得
る。その他の命令セットは固定長であってもよく、その場合には命令セット内の
各命令は他の命令の各々と同じバイト数を占める。
【0050】 図3に示すように、群50は非分岐命令IN0−IN5を含む。命令IN0、
IN3、IN4およびIN5は2バイト命令である。命令IN1は1バイト命令
であり、命令IN2は3バイト命令である。2つのテイクン予測された分岐命令
PB0およびPB1も同様に図示され、各々2バイトを占めるように表わされる
。なお、非分岐および分岐の両方の命令ともさまざまなバイト数を占めることが
できる。
【0051】 テイクン予測された分岐PB0およびPB1の各々のエンドバイトは群50を
3つの領域(第1の領域58、第2の領域60、および第3の領域62)に分別
する。群50を特定するフェッチアドレスが提示されると、このグループ内のフ
ェッチアドレスのオフセットは第1の領域58内のバイト位置を特定し、その後
出会う第1のテイクン予測された分岐命令はPB0であり、したがってPB0の
分岐予測が分岐予測機構によって選択される。同様に、フェッチアドレスのオフ
セットが第2の領域60内のバイトを特定すると、適切な分岐予測はPB1の分
岐予測となる。最後に、フェッチアドレスのオフセットが第3の領域62内のバ
イトを特定すると、命令バイトの群内にありかつ特定されたバイトに後続する、
テイクン予測された分岐命令は存在しない。したがって、第3の領域62の分岐
予測はシーケンシャルである。このシーケンシャルアドレスはメインメモリ内の
群50の直後に続く命令バイトの群を特定する。
【0052】 ここでは、アドレスのオフセットはそのアドレスの下位の複数ビットを含むも
のとして用いられている。この数は、オフセットに関連するバイト群内の各バイ
トについて異なるビットのエンコーディングを与える。たとえば、群50は16
バイトである。したがって、その群内のアドレスの下位4ビットがそのアドレス
のオフセットを形成する。そのアドレスの残りのビットは、メインメモリ内の連
続する命令バイトの他の群から群50を特定する。さらに、残りのビットの下位
複数ビットは、群50を記憶するのに適した一列の記憶場所を選択するために、
命令キャッシュ16によって用いられるインデックスを形成する。
【0053】 セット52は群50の分岐セレクタのセットの例である。群50内の各バイト
に対して1つの分岐セレクタが含まれる。セット52内の分岐セレクタは図12
に示すエンコーディングを用いる。この例では、PB0に対する分岐予測は群5
0に関連する2つの分岐予測のうちの2番目のもの(分岐セレクタ値「3」で示
す)として記憶される。したがって、第1の領域58内の各バイトに対する分岐
セレクタは「3」にセットされる。同様に、PB1に対する分岐予測は、これら
の分岐予測のうち第1のもの(分岐セレクタ値「2」と示す)として記憶される
。したがって、第2の領域60内の各バイトに対する分岐セレクタは「2」にセ
ットされる。最後に、シーケンシャル分岐予測は、第3の領域62内のバイトに
対する分岐セレクタによって、分岐セレクタエンコーディング「0」で示される
【0054】 x86命令セットの可変バイト長の性質により、分岐命令は連続する命令バイ
トのある群内で開始し、連続する命令バイトの第2の群内で終了し得ることがわ
かる。そのような場合、分岐命令の分岐予測は連続する命令バイトの第2の群と
ともに記憶される。とりわけ、連続する命令バイトの第2の群内に記憶される分
岐命令のバイトはフェッチされかつディスパッチされる必要がある。連続する命
令バイトの第1の群における分岐予測を形成することにより、命令バイトの第2
の群内に存在する分岐命令のバイトはフェッチされないであろう。
【0055】 セット52のような分岐セレクタのセットを採用することにより、予測された
フェッチアドレスの迅速な決定が(フェッチアドレスのオフセット部分をデコー
ドすることにより、またセット52から対応のセレクタを選択することにより)
が可能になる。しかしながら、多数の分岐セレクタが(すなわち各バイトに対し
1つ)記憶される。分岐セレクタを記憶するために採用された分岐予測記憶部の
量も対応して増加するであろう。またさらに、フェッチアドレスのオフセットに
応答して分岐セレクタを選択するためには、比較的幅の広い選択装置(たとえば
MUXなど)が必要となる。一般に、選択装置の幅が広ければ広いほど、その選
択装置(たとえば選択された分岐セレクタ)を通じて選択された値の伝搬におけ
る遅延も、より大きくなる。
【0056】 図3は、1つの領域内の各バイトに対する分岐セレクタは同じであり、領域は
分岐命令(より具体的にはテイクン予測された分岐命令)によって区分されると
いうことを示す。分岐命令は一般に、少なくともオペコード(マイクロプロセッ
サ10によって採用された命令セット内の分岐命令を特定する)および分岐命令
のアドレス(またはその分岐命令の直後の命令のアドレス)に加算されて分岐タ
ーゲットアドレスを形成する変位を含むであろう。したがって、分岐命令は少な
くとも2バイトを占める。この事実を利用することにより、連続する命令バイト
の群に対して記憶された分岐セレクタの数を減じることができる。
【0057】 これ以降の記述については、x86マイクロプロセッサアーキテクチャが例と
して用いられる。しかしながら、ここで述べる分岐セレクタ技術はいかなるマイ
クロプロセッサアーキテクチャ内で採用されてもよく、またそのような実施例も
企図される。なお、x86マイクロプロセッサアーキテクチャにおいては、サブ
ルーチン復帰命令(たとえばRET命令)が規定されている。サブルーチン復帰
命令は、その分岐ターゲットアドレスがESPレジスタによって示されるスタッ
クのトップから引出されることを特定する。したがって、RET命令は単一バイ
ト(すなわちオペコードバイト)である。この単一バイトRET命令を、1つの
分岐命令ごとに少なくとも2つのバイトという一般規則を利用して、分岐セレク
タで操作することが、より詳細に以下に示される。
【0058】 次に図4を参照して、群50、領域58、60および62、ならびに1組の分
岐セレクタ70の一実施例を表わす図が示される。セット70内の分岐セレクタ
は群50内に規定されたバイト範囲に対応する。図4に示す例では、16の連続
する命令バイトの群に対して9の分岐セレクタが用いられる。セット70はした
がって、図3に示すセット52が占めるものより少ない記憶部を分岐予測記憶部
内で占め、この分岐予測記憶部をより小さくすることを可能にする。さらに、フ
ェッチアドレスに応答して分岐セレクタを選択するためにより幅の狭い選択装置
が用いられ得る。この選択された分岐セレクタはより迅速に与えられ、よって予
測されたフェッチアドレスが各クロックサイクルに与えられる、高周波数の実現
をもたらす。
【0059】 通常、所与の分岐セレクタに対して規定された最大のバイト範囲は、最短の分
岐命令(以下により詳細に述べる復帰命令を除く)と等しくされ得る。バイト範
囲の大部分は最大サイズになるように選択される。しかしながら、特定の状況に
対応するために、図4に示す実施例は最大サイズより小さい2つのバイト範囲を
採用する。特に、群50の初期バイトは単一バイトを有するバイト範囲(図6に
関して以下により詳細に説明する)を形成する。群50は偶数のバイトであるの
で、初期バイトに対応するバイト範囲は初期バイトのみを含み、最大バイト範囲
はこの例では2バイトであり、別のバイト範囲は同様に単一バイトを有すると規
定される。セット70については、初期バイトに連続する群50内のバイトが単
一バイト範囲として選択される。この選択により、図5に示すようにフェッチア
ドレスのオフセットを比較的簡単にデコードして分岐セレクタを選択することが
可能になる。
【0060】 これらのバイト範囲は最短の分岐命令より大きくならないように選択されるの
で、分岐命令はあるバイト範囲で開始し、後続のバイト範囲で終了し得る。しか
しながら、連続する命令バイトの特定の群内で分岐命令が連続する場合でも、最
大で1つの分岐命令が特定のバイト範囲で終了する。特定のバイト範囲のエンド
ではなくそのバイト範囲内で終了する分岐命令の場合については、そのバイト範
囲に対する分岐セレクタは分岐命令に後続する命令バイトに対応する分岐セレク
タとして選択される。たとえば、バイト範囲72(バイト3〜4を含み、初期バ
イトがバイト0の番号を付される)に対する分岐セレクタは、予測された分岐P
B1に対応する分岐予測を示す。バイト範囲内のフェッチアドレスが分岐命令(
先行するバイト範囲で開始する)をフェッチしていないので、上記の法則が用い
られる。したがって、正しい分岐予測は後続の分岐に対する予測である。
【0061】 一方、分岐命令がバイト範囲内の最後のバイトで終了する場合、バイト範囲に
ついての分岐セレクタは分岐命令(たとえばバイト範囲74)に対応する分岐セ
レクタである。したがって、フェッチアドレスが予測された分岐PB1を特定す
る(すなわちオフセットがバイト範囲74内にある)場合、そのフェッチに用い
られる分岐予測は分岐PB1に対応する分岐予測である。
【0062】 ここで図5を参照して、図4の例に示す分岐セレクタについてのバイト範囲の
選択に対応する表76が示される。表76の「バイト位置」と記された列は、各
バイト範囲に対応する群50内のバイト位置(各バイト範囲内にある各バイトの
アドレスのオフセット部分)をリストする。「分岐選択位置」と記された列は、
各バイト範囲に対応する分岐セレクタのセット70内の分岐セレクタ位置を表わ
す。「読出アドレス」と記された列は、(後続のクロックサイクルに対して予測
されたフェッチアドレスを形成するために)対応のバイト範囲内の分岐セレクタ
を選択するようにデコードされるフェッチアドレスオフセットを(バイナリで)
リストする。読出アドレス中の「x」は、ドントケア位置を示す。最後に、「エ
ンコーディングアドレス」と記された列は、そこで分岐命令が終了でき、かつそ
の分岐命令に対応する分岐予測を示すバイト範囲に対する分岐セレクタをまだ有
しているフェッチアドレスのオフセットを(バイナリで)リストする。たとえば
、分岐セレクタ位置2は、バイト位置3または4のいずれかで終了する分岐命令
に対する分岐予測を示し得る。より具体的には、バイト位置2で終了する分岐命
令は、分岐セレクタ位置2の分岐セレクタでは表わされない(これは、分岐命令
が、分岐選択位置2に関連するものとは異なったバイト範囲で開始し、したがっ
てフェッチアドレスのオフセットが、分岐セレクタ位置2に関連するバイト範囲
内にある場合、フェッチされないからである)。
【0063】 表76の「読出アドレス」列は、フェッチアドレスオフセットの比較的簡単な
デコーディングを用いて、そのフェッチアドレスに適切な分岐セレクタを選択し
得ることを示す。分岐セレクタ位置0および1のデコーディングは、フェッチア
ドレスオフセットビットの各々を含むが、残りの位置のデコーディングは(ドン
トケアであるため)最下位ビットを除くこともある。図4に示すバイト範囲の割
当てを用いて、迅速なデコードおよび分岐セレクタの選択を達成することができ
る。
【0064】 ここで図6を参照して、図4および5に示すバイト範囲の分岐セレクタの第1
の例80が示される。例80は連続する命令バイトの群のバイト0のみを含むバ
イト範囲の使用を表わす。例80は、連続する命令バイトの第1の群のバイト「
E」で終了する命令IN0と、第1の群のバイト「F」から第1の群に続く連続
する命令バイトの第2の群のバイト0へと延びる予測分岐PB0と、第2の群の
バイト「1」で開始する命令IN1とを示す。
【0065】 分岐命令PB0は第2の群のバイト0まで終了しないので、第2の群は命令キ
ャッシュ16からフェッチされる必要がある。したがって、第1の群のバイト「
E」および「F」に対応する分岐セレクタはシーケンシャルを示し、それによっ
て第2の群がフェッチされる。シーケンシャルなフェッチアドレスは(第1の群
の最後のバイトの直後のバイトがフェッチされるので)0にセットされたオフセ
ット部分を含む。したがって、第2の群のバイト「0」に対応する分岐セレクタ
が選択される。この分岐セレクタは、分岐命令PB0に対応する分岐予測を選択
するようにコード化される。
【0066】 第2の群のバイト0および1が、図4および5に示す他のバイト範囲と同様の
バイト範囲を形成した場合、分岐命令PB0は予測不可能となるであろう。命令
バイトの複数の群にわたって延びる分岐の予測を可能にするために、この実施例
では、バイト範囲はバイト「0」を含むバイト範囲を含むように規定される。
【0067】 次に図7を参照して、図4および5に示すバイト範囲の分岐セレクタの第2の
例82が示される。例82は、予測された分岐命令PB0の後に復帰命令RET
が続く状況を表わす。分岐命令PB0はバイト「4」で終了し、これは分岐セレ
クタ位置3に対応するバイト範囲内にある(すなわちバイト「4」はバイト範囲
の最後のバイトではない)。したがって、分岐セレクタ位置3の分岐セレクタは
、バイト範囲内で終了する分岐命令に関して上述したように、PB0に対する分
岐予測を選択しない。RET命令はバイト範囲の最後のバイトで終了する。した
がって、分岐セレクタ位置3に対する分岐セレクタは、復帰命令(すなわち例8
2のエンコーディング「1」)を示す。
【0068】 一方、図8は復帰命令が予測されない例84を表わす。例84は、予測された
分岐命令PB0、復帰命令RET、および命令IN1を含む。分岐命令PB0は
分岐セレクタ位置2に対応するバイト範囲の最後のバイトで終了し、したがって
対応する分岐セレクタは分岐命令PB0に対応する分岐予測を選択するようにエ
ンコードされる。この復帰命令は分岐セレクタ位置3に対応するバイト範囲内で
終了し、したがってこれに対応する分岐セレクタは復帰命令を示さない。この態
様において、命令IN0がフェッチアドレスによって示されると、復帰命令は分
岐セレクタ位置3の分岐セレクタによって誤って予測されることはないであろう
。しかしながら、この復帰命令がフェッチアドレスによって示されるバイトであ
る場合、誤った予測を生じる結果となる。
【0069】 なお、例84に示すコードシーケンスは通常のものとは異なり得る。なぜなら
、ほとんどの場合、一時変数が復帰命令の実行の直前にスタックからポップされ
るからである。したがって、テイクン予測された分岐が復帰命令の直前にあるこ
とは珍しい。
【0070】 図9は復帰命令が誤予測され得る例86を示す。例86では、復帰命令の直後
に予測された分岐命令PB0が続く。分岐命令PB0を実行する唯一の方法がコ
ードシーケンスの他の場所からこの命令に直接分岐することであるので、このコ
ードシーケンスもまた稀なものであり得る。また、復帰命令は、例86では直接
分岐された場合のみ誤予測される。命令IN0がフェッチされ実行されると、復
帰命令は正しく予測される。
【0071】 ここで図10を参照して、分岐予測ユニット14の一実施例の一部分が示され
る。分岐予測ユニット14および図10に示す部分の他の実施例が企図される。
図10に示すように、分岐予測ユニット14は分岐予測記憶部90、ウェイマル
チプレクサ92、分岐セレクタマルチプレクサ94、分岐予測マルチプレクサ9
6、シーケンシャル/復帰マルチプレクサ98、最終予測マルチプレクサ100
、更新論理ブロック102、およびデコーダ104を含む。分岐予測記憶部90
およびデコーダ104は、命令キャッシュ16からフェッチアドレスバス106
に結合される。命令キャッシュ16に同時に与えられたフェッチアドレスは、フ
ェッチアドレスバス106上に伝えられる。デコーダブロック104は分岐セレ
クタマルチプレクサ94に選択制御を与える。ウェイマルチプレクサ92の予測
制御は、命令キャッシュ16からウェイ選択バス108を介して与えられる。ウ
ェイ選択バス108はフェッチアドレスバス106に与えられたフェッチアドレ
スに対応するキャッシュラインを記憶する命令キャッシュ16のウェイを与える
。さらに、選択制御はキャッシュラインのどの部分がフェッチされているかに基
づいて、デコーダ104によって与えられる。ウェイマルチプレクサ92はフェ
ッチアドレスバス106上のフェッチアドレスによって指された、分岐予測記憶
部90の列内の各記憶場所の内容を受けるように結合される。さらに、分岐セレ
クタマルチプレクサ94の出力はマルチプレクサ96、98および100に選択
制御を与える。シーケンシャル/復帰マルチプレクサ98は、命令キャッシュ1
6からシーケンシャルアドレスバス110上に与えられたシーケンシャルアドレ
スと、復帰スタックから復帰アドレスバス112上に与えられた復帰アドレスと
の間で、選択を行なう。マルチプレクサ96および98の出力は最終予測マルチ
プレクサ100に与えられ、これは分岐予測バス114を命令キャッシュ16に
与える。命令キャッシュ16は分岐予測バス114上に与えられた分岐予測を、
後続のクロックサイクルのフェッチアドレスとして用いる。更新論理ブロック1
02は、そこに記憶された分岐予測情報を更新するのに用いられる更新バス11
6を介して分岐予測記憶部90に結合される。更新論理ブロック102は予測誤
りバス118を介して、機能ユニット24およびデコードユニット20から信号
を与えられた予測誤りに応答して、更新を行なう。さらに、更新論理ブロック1
02は、プリデコードバス120上のプリフェッチ/プリデコードユニット12
によって示された新たにプリデコードされた命令に応答して更新を行なう。
【0072】 この実施例では、分岐予測記憶部90は命令キャッシュ16のウェイの数と等
しいウェイの数で配置される。各ウェイに対して、キャッシュライン内に存在す
る連続する命令バイトの各群について分岐予測エントリが記憶される。図10の
実施例では、命令バイトの2つの群が各キャッシュラインに含まれる。したがっ
て、分岐予測エントリP00は、第1のウェイにおける連続する命令バイトの第1
の群に対応する分岐予測エントリであり、分岐予測エントリP01は、第1のウェ
イにおける連続する命令バイトの第2の群に対応する分岐予測エントリである。
同様に、分岐予測エントリP10は、第2のウェイにおける連続する命令バイトの
第1の群に対応する分岐予測エントリであり、分岐予測エントリP11は、第2の
ウェイにおける連続する命令バイトの第2の群に対応する分岐予測エントリであ
る点などである。指標付けされた行内の分岐予測エントリP00からP31の各々は
、分岐予測記憶部90の出力として、したがってウェイマルチプレクサ92の入
力として、与えられる。この指標づけされた行はキャッシュへの指標づけと同様
である。すなわちフェッチアドレスのオフセット部分に含まれない多数のビット
を用いて分岐予測記憶部90の列のうち1つを選択する。なお、分岐予測記憶部
90は、命令キャッシュ16より少ない列で構成され得る。たとえば、分岐予測
記憶部90は命令キャッシュ16の列数の1/4を含み得る。そのような場合、
命令キャッシュ16のインデックスビットであるが分岐予測記憶部90のインデ
ックスビットではないアドレスビットが、分岐予測情報とともに記憶され、フェ
ッチアドレスの対応するビットに対して照合されて、分岐予測情報がアクセスさ
れている命令キャッシュ16の列と関連していることを確認する。
【0073】 ウェイマルチプレクサ92は、命令キャッシュ16から与えられたウェイ選択
およびフェッチアドレスにより参照される命令バイトの群に基づいて、分岐予測
情報P00からP31の組のうち1つを選択する。ここに示す実施例では、たとえば
、32バイトのキャッシュラインは2つの16バイトの群に分けられる。したが
って、フェッチアドレスの最下位から5番目のビットが用いられ、2つの群のい
ずれがフェッチアドレスを含むかを選択する。下位5ビットが0である場合、連
続する命令バイトの第1の群が選択される。下位5ビットが1である場合、連続
する命令バイトの第2の群が選択される。なお、ウェイ選択バス108上に与え
られるウェイ選択は、一実施例に従うと、前のクロックサイクルからの分岐予測
によってもたらされたウェイ予測であり得る。これに代えて、ウェイ選択は、フ
ェッチアドレスと命令キャッシュの各ウェイに記憶されるキャッシュラインを特
定するアドレスタグとのタグ比較を介して生成され得る。なお、アドレスタグは
アドレス中の、キャッシュライン内のオフセットでも命令キャッシュへのインデ
ックスでもない部分である。
【0074】 ウェイマルチプレクサ92によって選択された分岐予測エントリは、連続する
命令バイトの群に対応する1組の分岐セレクタと、分岐予測BP1およびBP2
とを含む。分岐セレクタは分岐セレクタマルチプレクサ94に与えられ、これは
デコーダ104によって与えられた選択制御に基づいて分岐セレクタの1つを選
択する。デコーダ104はフェッチアドレスのオフセットを連続する命令バイト
の群へとデコードし、対応の分岐セレクタを(たとえば一実施例では表76の「
読出アドレス」の列に従って)選択する。たとえば、連続する命令バイトの群が
16バイトである場合、デコーダ104はフェッチアドレスの下位4ビットをデ
コードする。この態様で、分岐セレクタは選択される。
【0075】 分岐予測マルチプレクサ96、シーケンシャル/復帰マルチプレクサ98、お
よび最終予測マルチプレクサ100に選択制御を与えるために選択された分岐セ
レクタが用いられる。一実施例では、分岐セレクタのエンコーディングを直接マ
ルチプレクサ選択制御として用いることができる。他の実施例では、分岐セレク
タマルチプレクサ94とマルチプレクサ96、98および100との間に論理ブ
ロックが挿入され得る。ここに示す実施例では、分岐セレクタは2ビットを含む
。選択された分岐セレクタのうち1ビットは予測マルチプレクサ96およびシー
ケンシャル/復帰マルチプレクサ98に選択制御を与える。他のビットは最終予
測マルチプレクサ100に対して選択制御を与える。したがって分岐予測は、フ
ェッチされる連続する命令バイトの群に対応する分岐予測記憶部90に記憶され
た複数の分岐予測と、フェッチされる連続する命令バイトの群にシーケンシャル
な連続する命令バイトの群のシーケンシャルアドレスと、復帰スタック構造から
の復帰スタックアドレスとから選択される。なお、マルチプレクサ96、98お
よび100は単一の4to1マルチプレクサへ結合されてもよく、選択された分
岐セレクタはこれに選択制御を与えて分岐予測記憶部90からの2つの分岐予測
、シーケンシャルアドレス、および復帰アドレスの中から選択する。
【0076】 復帰スタック構造(図示せず)が、マイクロプロセッサ10によって前にフェ
ッチされたサブルーチン呼出命令に対応する復帰アドレスを記憶する。一実施例
では、分岐予測記憶部90によって記憶される分岐予測はサブルーチン呼出命令
に対応する分岐予測の表示を含む。サブルーチン呼出命令は、命令ストリームを
サブルーチン呼出命令のターゲットアドレスにリダイレクトすることに加えてシ
ーケンシャル命令のアドレス(復帰アドレス)を保存する、分岐命令のサブセッ
トである。たとえば、x86マイクロプロセッサアーキテクチャでは、サブルー
チン呼出命令(CALL)は復帰アドレスをESPレジスタによって示されるス
タック上にプッシュする。
【0077】 サブルーチン復帰命令は分岐命令の別のサブセットである。サブルーチン復帰
命令は、最も最近実行されたサブルーチン呼出命令によって保存された復帰アド
レスをターゲットアドレスとして用いる。したがって、分岐予測がその分岐予測
がサブルーチン呼出命令に対応するという表示を含むと、サブルーチン呼出命令
へのシーケンシャルアドレスは復帰スタックのトップに位置づけられる。サブル
ーチン復帰命令が(特定の分岐セレクタエンコーディングによって示したように
)存在すると、復帰スタックのトップに最も近い、前に予測として用いられてい
ないアドレスをアドレスの予測として用いる。復帰スタックのトップに最も近い
、前に予測として用いられていないアドレスは、復帰スタックによって復帰アド
レスバス112上に(ウェイ選択バス108上に与えられるのと同様に復帰スタ
ックに与えられる復帰アドレスの予測されたウェイとともに)伝達される。分岐
予測ユニット14は復帰アドレスが予測として選択されると復帰スタックに知ら
せる。復帰スタック構造の例に関しては、1995年10月30日にMahalingai
ahらにより出願され「スーパースカラマイクロプロセッサのための同期的復帰ア
ドレス予測ユニット(Speculative Return Address Prediction Unit for a Sup
erscalar Microprocessor)」と題された、同一譲受人に譲渡された同時係属中 の特許出願(出願番号08/550,296号)により詳細に記載される。この
参照された特許出願の開示をその全体においてここに引用により援用する。
【0078】 シーケンシャルアドレスは命令キャッシュ16によって与えられる。シーケン
シャルアドレスは、メインメモリ内の連続する命令バイトの次の群をフェッチア
ドレスバス106上のフェッチアドレスによって示された命令バイトの群として
特定する。なお、一実施例に従うと、ウェイ予測はシーケンシャルアドレスが選
択されるとシーケンシャルアドレスに供給される。ウェイ予測はフェッチアドレ
スについて選択されるウェイと同じになるように選択され得る。これに代えて、
シーケンシャルアドレスのウェイ予測は分岐予測記憶部90内に記憶され得る。
【0079】 上述したように、更新論理ブロック102は分岐予測誤りの検出時または分岐
命令の検出時に分岐予測エントリを更新し、かつプリフェッチ/プリデコードユ
ニット12で連続する命令バイトの対応する群をプリデコードするように構成さ
れる。各分岐予測に対応する分岐予測エントリは予測が実行されると更新論理ブ
ロック102に記憶され得る。分岐タグはフェッチされる命令とともに(分岐タ
グバス122を介して)伝達されるので、プリデコーディング中に予測誤りが検
出されるかまたは分岐命令が検出されると、対応の分岐予測エントリが分岐タグ
を介して特定され得る。一実施例では、図11に示す分岐予測エントリは、フェ
ッチすべき分岐予測エントリを生じたフェッチアドレスのインデックスおよび分
岐予測エントリが記憶されるウェイと同様に、記憶される。
【0080】 分岐予測誤りが検出されると、分岐命令を実行する機能ユニット24またはデ
コードユニット20のいずれかから予測誤りバス118上に対応の分岐タグが与
えられる。デコードユニット20が分岐タグを与えると、予測誤りは前に検出さ
れなかったタイプのものとなる(たとえば、群内に対応の分岐予測を用いて予測
できる以上の分岐命令がある)。デコードユニット20は無条件分岐命令(すな
わち常にターゲットアドレスを選択する分岐命令)の予測誤りを検出する。機能
ユニット24は前に検出されなかった条件付き分岐命令による、または誤ったテ
イクン/ノットテイクン予測による、予測誤りを検出し得る。更新論理102は
上述の記憶部から対応の分岐予測エントリを選択する。前に検出されなかった分
岐命令の場合は、分岐予測エントリ内の分岐予測の1つが前に検出されなかった
分岐命令に割当てられる。一実施例に従うと、前に検出されなかった分岐命令に
対する分岐予測を記憶するために分岐予測の1つを選択するアルゴリズムは次の
とおりである。分岐命令がサブルーチン復帰命令である場合、その命令の分岐セ
レクタは復帰スタックを示す値になるように選択される。それ以外は、現在ノッ
トテイクンと予測されている分岐予測が選択される。分岐予測の各々が現在テイ
クン予測である場合、分岐予測はランダムに選択される。
【0081】 新たに検出された分岐命令の分岐セレクタは、選択された分岐予測を示すよう
にセットされる。さらに、新たに検出された分岐命令に先行する第1の分岐命令
と新たに検出された分岐命令との間のバイト範囲に対応する分岐セレクタが、新
たな予測に対応する分岐セレクタとしてセットされる。図14を参照して、分岐
セレクタを更新するためのある方法を以下に示す。予測をノットテイクン予測と
してしまう誤予測がされたテイクン予測に対しては、予測誤りのあった予測に対
応する分岐セレクタが、予測誤りのあった分岐命令に続くバイトに対応する分岐
セレクタとしてセットされる。この方法では、命令が後のクロックサイクルで再
びフェッチされると、後続の分岐命令の予測が用いられるであろう。
【0082】 プリフェッチ/プリデコードユニット12が分岐命令を検出し、かつ連続する
命令バイトの群をプリデコードすると、プリフェッチ/プリデコードユニット1
2は、キャッシュラインの命令キャッシュに無効なプリデコード情報が記憶され
るので、プリデコーディングが行なわれると連続する命令バイトの群に分岐タグ
を与える。(例(i))。これに代えて、キャッシュラインがメインメモリサブ
システムからフェッチされるときにプリデコーディングが行なわれる場合、プリ
フェッチ/プリデコードユニット12はプリデコードされている連続する命令バ
イトの群のアドレスと、その群内の分岐命令のエンドバイトのオフセットと、そ
の群を記憶するように選択された命令キャッシュのウェイとを与える(例(ii
))。例(i)では、上記の分岐予測誤りの場合と同様に更新が行なわれる。例
(ii)では、命令の群に対する分岐予測記憶部90に記憶された有効な分岐予
測エントリはまだない。この場合、更新論理ブロック102は、検出された分岐
に先行する分岐セレクタを、検出された分岐のために選択された分岐セレクタに
初期化する。さらに、検出された分岐に続く分岐セレクタはシーケンシャル値に
初期化される。これに代えて、分岐セレクタの各々は、命令キャッシュ16の対
応するキャッシュラインが割当てられるとシーケンシャルに初期化されてもよく
、プリデコード中に分岐命令の検出によって例(i)と同様の方法で後に更新さ
れてもよい。
【0083】 更新の発生時、更新論理ブロック102は更新された分岐予測エントリをフェ
ッチアドレスインデックスおよび対応するウェイとともに更新バス116上に与
え、分岐予測記憶部90に記憶する。なお、分岐予測記憶部90は、分岐予測記
憶部90を単一ポートの記憶部として維持するために分岐保持レジスタを採用し
得る。更新された予測情報は分岐保持レジスタ内に記憶され、フェッチアドレス
バス106におけるアイドルサイクル時に分岐予測記憶部へと更新される。キャ
ッシュ保持レジスタ構造の例は、1995年6月7日にTranらにより出願され「
アレイのための遅延更新レージング(Delayed Update Pegister for an Array)
」と題された同一譲受人の同時係属特許(出願出願番号08/481,914号
)に記載され、その全体をここに引用により援用する。
【0084】 なお、正しく予測された分岐命令の結果、対応の分岐予測も同様に更新され得
る。分岐命令の前の実行を示すカウンタ(分岐命令のテイクン/ノットテイクン
予測を形成するのに用いられる)は、たとえば増分または減分される必要がある
かもしれない。このような更新は、対応の分岐予測のリタイア時に実行される。
リタイアはリオーダバッファ32からリタイアタグバス124上の分岐タグを介
して示される。
【0085】 図10の構造は、予測された分岐セレクタを用いることにより、さらに加速さ
れ得ることがわかる。予測された分岐セレクタは各分岐予測エントリとともに記
憶され、連続する命令バイトの対応する群の前のフェッチにおいて選択された分
岐セレクタとしてセットされる。予測された分岐セレクタは分岐予測を選択する
のに用いられ、分岐セレクタマルチプレクサ94を分岐予測発生経路から取除く
。しかしながら、選択された分岐セレクタが予測された分岐セレクタと等しいこ
とを確認するために、分岐セレクタマルチプレクサ94がなおも採用される。選
択された分岐セレクタと予測された分岐セレクタが等しくない場合、選択された
分岐セレクタが用いられ、後続のクロックサイクル中に正しい分岐予測を与え、
正しくない分岐予測のフェッチは取り消される。
【0086】 ここで図11を参照して、図10に示す分岐予測ユニット14の一実施例によ
って採用された分岐予測エントリ130の例が示される。分岐予測エントリ13
0は、1組の分岐セレクタ136、第1の分岐予測(BP1)132、および第
2の分岐予測(BP2)134を含む。分岐セレクタ136の組は、分岐予測エ
ントリ130に対応する連続する命令バイトの群の各バイト範囲について分岐セ
レクタを含む。
【0087】 第1の分岐予測132は図11に分解図で示される。第2の分岐予測134も
同様に構成され得る。第1の分岐予測132はターゲットアドレスに対応する命
令バイトを含むキャッシュラインに対するインデックス140、およびキャッシ
ュラインに対するウェイ選択部144を含む。一実施例に従うと、インデックス
140はターゲットアドレスおよびインデックスのオフセット部分を含む。イン
デックス140はウェイ選択部144によって示されるウェイのタグと連結され
て分岐ターゲットアドレスを形成する。これに代えて、分岐ターゲットアドレス
全体がインデックスフィールド140に記憶されてもよい。分岐ターゲットアド
レス全体に加えてウェイ予測が与えられるか、またはは命令キャッシュ16の指
標づけされた行内のタグに対してタグ比較を用いてウェイ選択が行なわれ得る。
【0088】 さらに、プレディクタ146が各分岐予測について記憶される。プレディクタ
146は、対応する分岐命令が実行されテイクンである毎に増分され、対応する
分岐命令が実行されてノットテイクンである毎に減分される。プレディクタ14
6の最上位ビットはテイクン/ノットテイクン予測として用いられる。最上位ビ
ットがセットされると、分岐命令はテイクンとして予測される。逆に、最上位ビ
ットがクリアであると、分岐命令はノットテイクンとして予測される。一実施例
では、予測カウンタは2ビットの飽和カウンタである。このカウンタは、バイナ
リ「11」で増分されると飽和し、またバイナリ「01」で減分されると飽和す
る。別の実施例では、このプレディクタは強い(バイナリ1)または弱い(バイ
ナリ0)テイクン予測を示す単一ビットである。強いテイクン予測が誤って予測
されると、それは弱いテイクン予測となる。弱いテイクン予測が誤って予測され
ると、分岐はノットテイクンと予測されることになり、分岐セレクタが更新され
る(すなわち誤予測されノットテイクンとなる分岐の場合)。最後に、呼出ビッ
ト148が第1の分岐予測132に含まれる。呼出ビット148は、セット時に
は対応の分岐命令がサブルーチン呼出命令であることを示す。呼出ビット148
がセットされると、現在のフェッチアドレスおよびウェイは上述の復帰スタック
構造内へ記憶される。
【0089】 次に図12を参照して、分岐セレクタエンコーディングの例を表す表138が
示される。分岐セレクタが対応する値でエンコードされたときに選択された分岐
予測に続いて、バイナリエンコーディングがリストされる(はじめに最上位ビッ
ト)。表138が表すように、分岐セレクタの最下位ビットは、分岐予測マルチ
プレクサ96およびシーケンシャル/復帰マルチプレクサ98に対する選択制御
として用いられ得る。最下位ビットがクリアされると、第1の分岐予測は分岐予
測マルチプレクサ96によって選択され、シーケンシャルアドレスはシーケンシ
ャル/復帰マルチプレクサ98によって選択される。一方、第2の分岐予測は、
最下位ビットがクリアされると、分岐予測マルチプレクサ96によって選択され
、復帰アドレスはシーケンシャル/復帰マルチプレクサ98によって選択される
。さらに、分岐セレクタの最上位ビットは最終予測マルチプレクサ100に対す
る選択制御として用いられ得る。最上位ビットがセットされると、分岐予測マル
チプレクサ96の出力が選択される。最上位ビットがクリアされると、シーケン
シャル/復帰マルチプレクサ98の出力が選択される。
【0090】 次に図13を参照して、図4および5で規定されたバイト範囲に従って、命令
キャッシュ16からフェッチされた連続する命令バイトの群に対する有効マスク
の生成を表すフローチャートが示される。この有効マスクは群内の各命令バイト
について1ビットを含み、これはこのバイトが予測された命令ストリームの部分
であるか否かを示す。マスク内の有効ビットはフェッチアドレスのオフセット部
分によって選択されるバイトと、選択された分岐予測によって予測される分岐命
令との間にセットされる。これらのバイトは、命令キャッシュ16から読出され
る連続する命令バイトの群からフェッチされる命令を含む。フェッチアドレスの
オフセットより前のバイトはフェッチされず、テイクン予測された分岐命令に後
続するバイトもまたフェッチされない。分岐命令のエンドは、対応の分岐セレク
タの最後の例によってほぼ位置づけられる。しかしながら、分岐命令がバイト範
囲内で終了する場合には、分岐命令の最終バイトを包含するように調整がなされ
得る。
【0091】 現在の分岐セレクタ(すなわちフェッチアドレスをデコードすることで分岐予
測ユニット14によって選択された分岐セレクタ)は、連続する命令バイトの群
に対応する分岐セレクタで排他的NORされ(ステップ150)、よってバイト
範囲ごとに1ビットを含む予備的マスクを作り出す。現在の分岐セレクタに等し
い分岐セレクタに対応するバイト範囲の各々はこの予備的マスクにおけるビット
がセットされていることによって表され、現在の分岐セレクタと異なる分岐セレ
クタを含むバイト範囲は予備的マスク内のクリアビットによって表される。第1
のマスクは、1バイトより大きいバイト(本実施例では2バイト)を有するバイ
ト範囲に対応する予備的マスクにおける各ビットを複製することにより予備的マ
スクから作成される(ステップ152)。一般に、このビットはバイト範囲を表
すビットの総数がバイト範囲内のビット数と等しくなるまでコピーされる。さら
に、第2のマスクは第1のマスクを右にシフトさせることにより作成される(ス
テップ154)。
【0092】 テイクン予測された分岐命令が(バイト範囲のエンドではなく)バイト範囲内
で終了する場合、有効マスクが第1のマスクと第2のマスクとを論理和すること
により作成される(判断ブロック156およびステップ158)。この様にして
、分岐命令が終了するバイト範囲内にあり分岐命令の一部であるバイトの有効が
確認される。一方、分岐命令がバイト範囲のエンドで終了する場合、そのバイト
範囲に対する分岐セレクタは分岐命令を示す。この場合、第1のマスクが第2の
マスクを用いて修正しなくても正しい。したがって、第1のマスクが有効マスク
として選択される(ステップ160)。
【0093】 ここで図14を参照して、誤って予測された分岐命令に応答して連続する命令
バイトの群の分岐セレクタを更新するように採用されたステップを表すフローチ
ャートが示される。プリデコーディング中に発見された分岐命令に起因する更新
も同様に行なわれ得る。この予測誤りは、予測情報が分岐予測記憶部90に記憶
されていない分岐命令を検出した結果であるか、または対応のプレディクタにノ
ットテイクンであると示させる誤ったテイクン/ノットテイクン予測の結果であ
り得る。
【0094】 予測誤りが検出されると、分岐予測ユニット14は「エンドポインタ」、すな
わち連続する命令バイトの対応する群内の誤予測された分岐命令のエンドバイト
のオフセット、を用いる。さらに、予測誤りに応答して受取った分岐タグを用い
て、更新するための分岐予測エントリが選択される。分岐予測ユニット14はエ
ンドポインタを更新マスクへデコードする(ステップ170)。更新マスクは、
連続する命令バイトの群内の各バイト範囲に対して1ビットを含む。分岐命令の
エンドバイトを含むバイト範囲の前のバイト範囲に対応するビットがセットされ
(エンドバイトがバイト範囲内の最終バイトであれば、分岐命令のエンドバイト
を含むバイト範囲に対応するビットがセットされる)、残りのビットはクリアさ
れる。したがって更新マスクは、分岐命令に先行しかつ分岐命令を含むバイト範
囲の各々を特定する。
【0095】 分岐予測ユニット14は現在の分岐セレクタを特定する。誤って予測されたテ
イクン/ノットテイクン予測については、現在の分岐セレクタは誤って予測され
た分岐命令に対応する分岐セレクタである。検出されなかった分岐による予測誤
りに関しては、現在の分岐セレクタは検出されなかった分岐命令のエンドバイト
を含むバイト範囲に対応する分岐セレクタである。現在の分岐セレクタは分岐セ
レクタの各々で排他的NORされて分岐マスクを作成する(ステップ172)。
分岐マスクは、現在の分岐セレクタに適合する分岐セレクタを有する各バイト範
囲についてセットされるビットと、現在の分岐セレクタに適合しない分岐セレク
タを有する各バイト範囲についてクリアされるビットとを含む。
【0096】 ステップ170で作成された更新マスクとステップ172で作成された分岐マ
スクとは後に論理積が行なわれ、最終更新マスクを生成する(ステップ174)
。最終更新マスクは、新たな分岐セレクタへ更新すべき連続する命令バイトの群
の各バイト範囲についてセットされるビットを含む。誤ってテイクン予測された
分岐については、新たな分岐セレクタは、誤ってテイクン予測された分岐命令に
後続するバイト範囲の分岐セレクタである。検出されなかった分岐に対しては、
新たな分岐セレクタは、更新論理ブロック102によって前に検出されなかった
分岐に割当てられた分岐予測記憶部を示す分岐セレクタである。
【0097】 拡張マスクもまた生成される(ステップ176および178)。この拡張マス
クは、分岐セレクタに対応する分岐予測が新たに発見された分岐命令に再び割当
てられていること、または分岐予測がここでノットテイクンを示すことから、い
ずれの分岐セレクタが消去されるべきかを示す。拡張マスクは、まず第2の分岐
マスクを作成し、これは現在の分岐セレクタの代わりに新たな分岐セレクタを用
いること以外は分岐マスクと同様である(すなわちこのマスクは連続する命令バ
イトの群に対応する分岐セレクタを新たな分岐セレクタで排他的NORすること
により作成される(ステップ176))。結果として生じるマスクはその後、最
終更新マスクの反転と論理積され、拡張マスクを作成する(ステップ178)。
拡張マスク内のセットされているビットに対応する分岐セレクタは、拡張マスク
のビットがセットされている対応する最終バイト範囲の直後のバイト範囲の分岐
セレクタを示すように更新される。この態様で、分岐セレクタによって前に示さ
れていた分岐予測は消去され、次の分岐セレクタで置換される。ステップ180
で、分岐セレクタは最終更新マスクおよび拡張マスクに応答して更新される。
【0098】 次に図15を参照して、命令バイト50、領域58、60および62、ならび
に1組の分岐セレクタ190の別の実施例の図が表される。セット190は最初
のバイト範囲と最後のバイト範囲とが各々単一バイトを含み、他の範囲が2バイ
トを含む、1組のバイト範囲に対応する。セット190は図4で割当てられたバ
イト範囲に対する代替のバイト範囲の割当てとして用いられ得る。多くの他のバ
イト範囲の割当ても可能であり、さまざまな実施例において企図される。図16
は表76と同様の表192である。表192は、図15に表すバイト範囲につい
てのバイト位置、分岐セレクタ位置、読出アドレスおよびエンコーディングアド
レスを表す。
【0099】 ここで図17を参照して、マイクロプロセッサ10を含むコンピュータシステ
ム200が示される。コンピュータシステム200は、バスブリッジ202、メ
インメモリ204、および複数の入力/出力(I/O)装置206A−206N
をさらに含む。複数のI/O装置206A−206Nを、まとめてI/O装置2
06と呼ぶことにする。マイクロプロセッサ10、バスブリッジ202、および
メインメモリ204はシステムバス208に結合される。I/O装置206はバ
スブリッジ202と通信するためにI/Oバス210に結合される。
【0100】 バスブリッジ202は、I/O装置206とシステムバス208に結合された
装置との間の通信を補助するために設けられる。I/O装置206は典型的には
マイクロプロセッサ10およびシステムバス208に結合された他の装置よりも
長いバスクロックサイクルを要求する。したがって、バスブリッジ202はシス
テムバス208と入力/出力バス210との間にバッファを設ける。さらに、バ
スブリッジ202はトランザクションをあるバスプロトコルから別のものへと変
換する。一実施例では、入力/出力バス210はEISA(Enhanced Industry
Standard Architecture)バスであり、バスブリッジ202はシステムバスプロ トコルからEISAバスプロトコルへ変換する。別の実施例では、入力/出力バ
ス210はPCI(Peripheral Component Imterconnect)バスであり、バスブ リッジ202はシステムバスプロトコルをPCIバスプロトコルへ変換する。な
お、システムバスプロトコルには多くの変形例が存在する。マイクロプロセッサ
10は適切であればいかなるシステムバスプロトコルを採用してもよい。
【0101】 I/O装置206はコンピュータシステム200とコンピュータシステム外部
の他の装置との間にインタフェースを設ける。I/O装置の例はモデム、シリア
ルまたはパラレルポート、およびサウンドカードなどである。I/O装置206
もまた周辺装置と呼ばれ得る。メインメモリ204はマイクロプロセッサ10が
用いるためのデータおよび命令を記憶する。一実施例では、メインメモリ204
は少なくとも1つのダイナミック・ランダム・アクセス・メモリ(DRAM)お
よびDRAMメモリコントローラを含む。
【0102】 図17に示すコンピュータシステム200は1つのバスブリッジ202を含む
が、コンピュータシステム200の他の実施例は、複数の異なるまたは同様のI
/Oバスプロトコルに変換するために複数のバスブリッジ202を含み得る。ま
たさらに、マイクロプロセッサ10によって参照される命令およびデータをより
高速のメモリ記憶部に記憶することによりコンピュータシステム200の性能を
向上させるためのキャッシュメモリも含まれ得る。このキャッシュメモリは、マ
イクロプロセッサ10とシステムバス208との間に挿入されるか、またはシス
テムバス208上に「ルックアサイド」構成で存在し得る。さらに注目されるこ
とは、バスブリッジ202、メインメモリ204、およびキャッシュメモリの機
能はマイクロプロセッサ10にインタフェースするチップセット内に集積され得
ることである。
【0103】 またさらに、ここでの議論は、さまざまな信号のアサートに言及する。ここで
は、信号は特定の状態を示す値を伝達すると「アサートされる」という。逆に、
特定の状況がないことを示す値を伝達すると信号が「デアサート」されるという
。信号は、それが論理値0を伝達するとき、または逆に論理値1を伝達するとき
に、アサートされるというふうに定義できる。さらに、上記の議論においてはさ
まざまな値が廃棄されているとして述べられている。値は多くの態様で廃棄され
得るが、通常はその値を受ける論理回路によって無視されるような値に変更する
ことを含む。たとえば、ある値がビットを含むとき、その値を廃棄するためには
その論理状態を反転するようにしてもよい。値がnビット値である場合、nビッ
トエンコーディングのうちの1つが、その値が無効であることを示すようにして
もよい。値を無効のエンコーディングにセットすることにより、その値は廃棄さ
れる。さらに、nビット値が、セットされるとそのnビット値が有効であること
を示すような有効ビットを含んでもよい。有効ビットをリセットすることにより
値の廃棄がされる。値を廃棄するための他の方法を用いてもよい。
【0104】 以下の表1は、x86命令セットを採用するマイクロプロセッサ10の一実施
例に関するファストパス、二重ディスパッチ、およびMROM命令を示す。
【0105】
【表1】
【0106】
【表2】
【0107】
【表3】
【0108】
【表4】
【0109】 上記の開示に従って、分岐セレクタを用いて後続のフェッチアドレスを作成す
る際に用いる分岐予測を選択するマイクロプロセッサについて述べてきた。分岐
セレクタの迅速な選択を提供するためには、各分岐セレクタはバイト範囲と関連
づけられており、最大のバイト範囲は最短の分岐命令と等しい(一実施例)。し
たがって、高度に正確かつ迅速な分岐予測をなおも提供しつつ、相対的に最小数
の分岐セレクタが設けられる。
【0110】 上記の開示を完全に認識すると当業者には多くの変形例および修正例が明らか
になるであろう。前掲の請求の範囲はそのような変形例および修正例をすべて包
含すると解釈されることが意図される。
【図面の簡単な説明】
【図1】 スーパースカラマイクロプロセッサの一実施例のブロック図であ
る。
【図2】 図1に示す1対のデコードユニットの一実施例のブロック図であ
る。
【図3】 図1に示すマイクロプロセッサの分岐予測機構の一実施例に従っ
た、連続する命令バイトの群および対応する組の分岐セレクタのブロック図であ
る。
【図4】 図1に示すマイクロプロセッサの分岐予測機構の別の実施例に従
った、連続する命令バイトの群および対応する組の分岐セレクタのブロック図で
ある。
【図5】 1組の連続する命令バイト内のバイト範囲の一実施例を表す表で
ある。
【図6】 第1の組の命令の例に対する分岐セレクタの第1の例である。
【図7】 第2の組の命令の例に対する分岐セレクタの第2の例である。
【図8】 第3の組の命令の例に対する分岐セレクタの第3の例である。
【図9】 第4の命令セットの例に対する分岐セレクタの第4の例である。
【図10】 図1に示す分岐予測ユニットの一実施例のブロック図である。
【図11】 連続する命令バイトの群に対応する分岐予測記憶部エントリの
一実施例のブロック図である。
【図12】 図1に示す分岐予測ユニットの一実施例に対する分岐セレクタ
エンコーディングの例を示す表である。
【図13】 図1に示すマイクロプロセッサの一実施例に従ったマスク生成
を表すフローチャートである。
【図14】 分岐セレクタ更新の一実施例を表すフローチャートである。
【図15】 図1に示すマイクロプロセッサの分岐予測機構のさらに別の実
施例に従った、連続する命令バイトの群および対応する組の分岐セレクタのブロ
ック図である。
【図16】 1組の連続する命令バイト内のバイト範囲の別の実施例を示す
表である。
【図17】 図1に示すマイクロプロセッサを含むコンピュータシステムの
一実施例のブロック図である。
【手続補正書】特許協力条約第34条補正の翻訳文提出書
【提出日】平成12年4月21日(2000.4.21)
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正内容】
【特許請求の範囲】
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0005
【補正方法】変更
【補正内容】
【0005】 分岐予測機構の複雑さを増すことに関する問題は、複雑さが増すと、通常、分
岐予測を形成するのにかかる所要時間も増す必要があるということである。たと
えば、複数の分岐予測間での選択はかなりの時間を要し得る。フェッチアドレス
のオフセットは、キャッシュライン内のフェッチされている先頭バイトを特定す
る。すなわち、オフセットに先行する分岐命令の分岐予測は選択すべきではない
。いずれの分岐予測を用いるかを決定するために、キャッシュライン内のフェッ
チアドレスのオフセットをキャッシュラインに対して記憶された分岐予測によっ
て表わされる分岐命令のオフセットと比較する必要があり得る。フェッチアドレ
スのオフセットの後に続き、かつフェッチアドレスのオフセットに後続する他の
分岐命令と比べてフェッチアドレスのオフセットにより近い、分岐命令に対応す
る分岐予測が選択されるべきである。分岐予測の数が増大すると、選択論理の複
雑さ(および所要時間)も増大する。フェッチアドレスに対する分岐予測を形成
するための所要時間がマイクロプロセッサのクロックサイクル時間を超えると、
マイクロプロセッサの性能は低減し得る。分岐予測を単一クロックサイクルで形
成することはできないので、前のフェッチアドレスに対応する分岐予測がないこ
とにより、命令をフェッチすることができないクロックサイクル中に「バブル」
が命令処理パイプラインに入り込む。このバブルは、後続のクロックサイクル中
にも命令処理パイプラインのさまざまな段階を占め、バブルは命令を含まないの
でバブルを含む段階ではいかなる処理も行なわれない。したがって、マイクロプ
ロセッサの性能は低減し得る。 複数の命令に同時にアクセス可能なスーパスカラプロセッサシステムを開示す
るEP605,876号が参照される。複数命令アクセス内の可能な命令フェッ
チ位置の各々に対する予測フィールドを含む分岐履歴表が確立される。 また、Young H.C.ら,EP394711号(東京芝浦電気株式会社)、WO9
3/17385号(インテル・コーポレイション)およびUS4,860,19
7号(Langendorf Brian Kら)も参照される。
【手続補正3】
【補正対象書類名】明細書
【補正対象項目名】0008
【補正方法】変更
【補正内容】
【0008】 概して、本発明は、分岐予測記憶部および選択装置を含む分岐予測機構を企図
する。命令キャッシュからフェッチされる連続する命令バイトの群に対応するフ
ェッチアドレスを受けるように結合されて、分岐予測記憶部は、複数の分岐セレ
クタを記憶するように構成される。連続する命令バイトの群は複数のバイト範囲
を含み、複数の分岐セレクタの各々が複数のバイト範囲の別の1つに対応する。
さらに、複数の分岐セレクタの各々は分岐予測を特定する。また、特定のバイト
範囲に含まれる最大バイト数は、変位を含む最短の分岐命令内のバイト数であり
、少なくとも1つの他の命令はこの変位を含む上記の最短の分岐命令より少ない
バイトを含む。選択装置は複数の分岐セレクタの選択された1つを選択するよう
に構成される。複数の分岐セレクタの選択された1つは複数のバイト範囲の選択
された1つに対応する。複数のバイト範囲の選択された1つはフェッチアドレス
によって特定されたバイトを含む。
【手続補正4】
【補正対象書類名】明細書
【補正対象項目名】0009
【補正方法】変更
【補正内容】
【0009】 本発明はさらに、分岐予測を行なうための方法を企図する。連続する命令バイ
トの群に対応する複数の分岐セレクタが記憶される。複数の分岐セレクタの各々
は連続する命令バイトの群内の別のバイト範囲に対応し、そのバイト範囲内のバ
イトがフェッチされると選択される分岐予測を特定する。また、上記の別のバイ
ト範囲の最大のものは、変位を含む最短の分岐命令内のバイト数を含み、少なく
とも1つの他の命令はこの変位を含む上記の最短の分岐命令より少ないバイトを
含む。連続する命令バイトの群の1つ以上が、フェッチアドレスを用いて命令キ
ャッシュからフェッチされる。フェッチアドレスに応答して、複数の分岐セレク
タの1つが選択される。続いて、複数の分岐セレクタの1つによって特定された
分岐予測が選択される。
【手続補正5】
【補正対象書類名】明細書
【補正対象項目名】0077
【補正方法】変更
【補正内容】
【0077】 サブルーチン復帰命令は分岐命令の別のサブセットである。サブルーチン復帰
命令は、最も最近実行されたサブルーチン呼出命令によって保存された復帰アド
レスをターゲットアドレスとして用いる。したがって、分岐予測がその分岐予測
がサブルーチン呼出命令に対応するという表示を含むと、サブルーチン呼出命令
へのシーケンシャルアドレスは復帰スタックのトップに位置づけられる。サブル
ーチン復帰命令が(特定の分岐セレクタエンコーディングによって示したように
)存在すると、復帰スタックのトップに最も近い、前に予測として用いられてい
ないアドレスをアドレスの予測として用いる。復帰スタックのトップに最も近い
、前に予測として用いられていないアドレスは、復帰スタックによって復帰アド
レスバス112上に(ウェイ選択バス108上に与えられるのと同様に復帰スタ
ックに与えられる復帰アドレスの予測されたウェイとともに)伝達される。分岐
予測ユニット14は復帰アドレスが予測として選択されると復帰スタックに知ら
せる。復帰スタック構造の例に関しては、1995年10月30日にMahalingai
ahらにより出願され「スーパースカラマイクロプロセッサのための同期的復帰ア
ドレス予測ユニット(Speculative Return Address Prediction Unit for a Sup
erscalar Microprocessor)」と題された、同一譲受人に譲渡された同時係属中 の特許出願(出願番号08/550,296号)により詳細に記載される。
【手続補正6】
【補正対象書類名】明細書
【補正対象項目名】0083
【補正方法】変更
【補正内容】
【0083】 更新の発生時、更新論理ブロック102は更新された分岐予測エントリをフェ
ッチアドレスインデックスおよび対応するウェイとともに更新バス116上に与
え、分岐予測記憶部90に記憶する。なお、分岐予測記憶部90は、分岐予測記
憶部90を単一ポートの記憶部として維持するために分岐保持レジスタを採用し
得る。更新された予測情報は分岐保持レジスタ内に記憶され、フェッチアドレス
バス106におけるアイドルサイクル時に分岐予測記憶部へと更新される。キャ
ッシュ保持レジスタ構造の例は、1995年6月7日にTranらにより出願され「
アレイのための遅延更新レージング(Delayed Update Pegister for an Array)
」と題された同一譲受人の同時係属特許(出願出願番号08/481,914号
)に記載される。
【手続補正7】
【補正対象書類名】明細書
【補正対象項目名】0110
【補正方法】変更
【補正内容】
【0110】 上記の開示を完全に認識すると当業者には多くの変形例および修正例が明らか
になるであろう。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 トラン,サン・エム アメリカ合衆国、78730 テキサス州、オ ースティン、イーグル・トレイス・トレイ ル、5209 Fターム(参考) 5B013 BB04

Claims (20)

    【特許請求の範囲】
  1. 【請求項1】 分岐予測機構であって、 フェッチアドレスを受けるように結合された分岐予測記憶部を含み、前記フェ
    ッチアドレスは命令キャッシュからフェッチされる連続する命令バイトの群に対
    応し、前記連続する命令バイトの群は複数のバイト範囲を含み、前記分岐予測記
    憶部は前記連続する命令バイトの群に対応する複数の分岐セレクタを記憶するよ
    うに構成され、前記複数の分岐セレクタの各々は前記複数のバイト範囲の別のも
    のと対応し、前記複数の分岐セレクタの各々は分岐予測を特定し、 前記複数の分岐セレクタの選択されたものを選択するように構成された選択装
    置を含み、前記複数の分岐セレクタの前記選択されたものは前記フェッチアドレ
    スによって特定されたあるバイトを含む前記複数のバイト範囲の選択されたもの
    に対応する、分岐予測機構。
  2. 【請求項2】 前記フェッチアドレスによって特定された前記バイトは前記
    フェッチアドレスの1組の最下位ビットによって位置づけられたバイトである、
    請求項1に記載の分岐予測機構。
  3. 【請求項3】 前記複数のバイト範囲の特定のものは、前記複数のバイト範
    囲の残りのものと比べて最大数の前記連続する命令バイトの群を含む、請求項1
    に記載の分岐予測機構。
  4. 【請求項4】 前記最大数は復帰命令を除く最短の分岐命令内の多数のバイ
    トを含む、請求項3に記載の分岐予測機構。
  5. 【請求項5】 前記最短の分岐命令は可変バイト長命令セットのメンバであ
    る、請求項4に記載の分岐予測機構。
  6. 【請求項6】 前記複数のバイト範囲の特定のものは、前記連続する命令バ
    イトの群の最初のものを含む、請求項1に記載の分岐予測機構。
  7. 【請求項7】 前記連続するバイトの群の前記最初のものは、前記連続する
    命令バイトの群内のバイトを特定するアドレスのうち番号の最も小さいアドレス
    によって特定される、請求項6に記載の分岐予測機構。
  8. 【請求項8】 前記複数のバイト範囲の前記特定のものは、前記命令バイト
    の群の前記最初のもののみを含む、請求項7に記載の分岐予測機構。
  9. 【請求項9】 前記複数の分岐セレクタの前記選択されたものによって特定
    される前記分岐予測は、前記連続する命令バイトの群内の分岐命令に対応する、
    請求項1に記載の分岐予測機構。
  10. 【請求項10】 前記分岐命令は、前記フェッチアドレスによって特定され
    る前記バイトに後続する、請求項9に記載の分岐予測機構。
  11. 【請求項11】 前記分岐命令に先行し、かつ前記フェッチアドレスによっ
    て特定された前記バイトに後続する前記連続する命令バイトの群内の命令は、他
    のテイクン予測された分岐命令を除く、請求項10に記載の分岐予測機構。
  12. 【請求項12】 分岐予測を行なうための方法であって、 連続する命令バイトの群に対応する複数の分岐セレクタを記憶するステップを
    含み、前記複数の分岐セレクタの各々は前記連続する命令バイトの群内の別のバ
    イト範囲に対応し、かつ前記別のバイト範囲内のバイトがフェッチされると選択
    すべき分岐予測を特定し、 フェッチアドレスを用いて命令キャッシュから1以上の前記連続する命令バイ
    トの群をフェッチするステップと、 前記フェッチアドレスに応答して前記複数の分岐セレクタの1つを選択するス
    テップと、 前記複数の分岐セレクタの前記1つによって特定された前記分岐予測を選択す
    るステップとを含む、方法。
  13. 【請求項13】 前記複数の分岐セレクタの1つを選択する前記ステップが
    、前記フェッチアドレスの複数の最下位ビットをデコードするステップを含む、
    請求項12に記載の方法。
  14. 【請求項14】 前記別のバイト範囲の最大のものが、復帰命令を除く最短
    の分岐命令内の多数のバイトに等しい多数のバイトを含む、請求項12に記載の
    方法。
  15. 【請求項15】 前記別々のバイト範囲の各々が、前記連続する命令バイト
    の群の最初のバイトを含む最初のバイト範囲および第2のバイト範囲以外の前記
    別のバイト範囲の前記最大のものの中に前記多数のバイトを含む、請求項14に
    記載の方法。
  16. 【請求項16】 前記最初のバイト範囲が前記最初のバイトのみを含む、請
    求項15に記載の方法。
  17. 【請求項17】 前記第2の範囲が、前記連続する命令バイトの群内の前記
    最初のバイトに続くバイトを含む、請求項15に記載の方法。
  18. 【請求項18】 前記第2の範囲が、前記連続する命令バイトの群内の最終
    バイトを含む、請求項15に記載の方法。
  19. 【請求項19】 マイクロプロセッサであって、 フェッチアドレスを受け、かつ前記フェッチアドレスに応答して連続する命令
    バイトの群を与えるように結合された命令キャッシュと、 前記命令キャッシュと同時に前記フェッチアドレスを受けるように結合された
    分岐予測ユニットとを含み、前記分岐予測ユニットは前記連続する命令バイトの
    群に対応する複数の分岐セレクタを記憶するように構成され、前記複数の分岐セ
    レクタの各々は前記連続する命令バイトの群内の複数のバイト範囲のうち対応す
    る1つに対応し、前記分岐予測ユニットは前記フェッチアドレスに応答して前記
    複数の分岐セレクタのうち1つを選択し、かつ前記複数の分岐セレクタの前記1
    つによって特定された分岐予測を用いて後続のフェッチアドレスを予測するよう
    に構成される、方法。
  20. 【請求項20】 前記分岐予測は、前記連続する命令バイトの群内の分岐命
    令に対応する、請求項19に記載のマイクロプロセッサ。
JP2000518321A 1997-10-24 1998-06-13 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ Expired - Fee Related JP3794917B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/957,596 1997-10-24
US08/957,596 US5978906A (en) 1996-11-19 1997-10-24 Branch selectors associated with byte ranges within an instruction cache for rapidly identifying branch predictions
PCT/US1998/012383 WO1999022293A1 (en) 1997-10-24 1998-06-13 Branch selectors associated with byte ranges within an instruction cache for rapidly identifying branch predictions

Publications (2)

Publication Number Publication Date
JP2001521241A true JP2001521241A (ja) 2001-11-06
JP3794917B2 JP3794917B2 (ja) 2006-07-12

Family

ID=25499819

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000518321A Expired - Fee Related JP3794917B2 (ja) 1997-10-24 1998-06-13 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ

Country Status (6)

Country Link
US (3) US5978906A (ja)
EP (1) EP1025488B1 (ja)
JP (1) JP3794917B2 (ja)
KR (1) KR100577445B1 (ja)
DE (1) DE69802209T2 (ja)
WO (1) WO1999022293A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008217353A (ja) * 2007-03-02 2008-09-18 Fujitsu Ltd データ処理装置、およびメモリのリードアクティブ制御方法。
JP2009037302A (ja) * 2007-07-31 2009-02-19 Nec Corp 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム
WO2013101152A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Embedded branch prediction unit

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US5995749A (en) 1996-11-19 1999-11-30 Advanced Micro Devices, Inc. Branch prediction mechanism employing branch selectors to select a branch prediction
US6275927B2 (en) 1998-09-21 2001-08-14 Advanced Micro Devices. Compressing variable-length instruction prefix bytes
US6253309B1 (en) 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions
US6460116B1 (en) 1998-09-21 2002-10-01 Advanced Micro Devices, Inc. Using separate caches for variable and generated fixed-length instructions
US6240506B1 (en) 1998-10-02 2001-05-29 Advanced Micro Devices, Inc. Expanding instructions with variable-length operands to a fixed length
US6339822B1 (en) * 1998-10-02 2002-01-15 Advanced Micro Devices, Inc. Using padded instructions in a block-oriented cache
JP3522135B2 (ja) * 1998-12-10 2004-04-26 富士通株式会社 複数のウェイを持つブランチヒストリを備える情報処理装置
KR100347865B1 (ko) * 1999-11-15 2002-08-09 삼성전자 주식회사 어드레스 트레이스를 이용한 분기 예측 방법
US6502188B1 (en) 1999-11-16 2002-12-31 Advanced Micro Devices, Inc. Dynamic classification of conditional branches in global history branch prediction
US6581138B2 (en) * 2000-02-29 2003-06-17 Stmicroelectronics, Inc. Branch-prediction driven instruction prefetch
US6735689B1 (en) * 2000-05-01 2004-05-11 Raza Microelectronics, Inc. Method and system for reducing taken branch penalty
US7024545B1 (en) 2001-07-24 2006-04-04 Advanced Micro Devices, Inc. Hybrid branch prediction device with two levels of branch prediction cache
US7302556B2 (en) * 2003-09-25 2007-11-27 International Business Machines Corporation Method, apparatus and computer program product for implementing level bias function for branch prediction control for generating test simulation vectors
US7328332B2 (en) * 2004-08-30 2008-02-05 Texas Instruments Incorporated Branch prediction and other processor improvements using FIFO for bypassing certain processor pipeline stages
US7752426B2 (en) * 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
KR100645108B1 (ko) * 2004-10-11 2006-11-10 김미옥 추락방지망 설치구조
KR100688503B1 (ko) * 2004-11-02 2007-03-02 삼성전자주식회사 브랜치 목적 어드레스를 이용하여 캐쉬 웨이를 예측하는프로세서 및 그 방법
US7280941B2 (en) * 2004-12-29 2007-10-09 General Electric Company Method and apparatus for in-situ detection and isolation of aircraft engine faults
EP2011018B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
EP2122461A4 (en) 2006-11-14 2010-03-24 Soft Machines Inc DEVICE AND METHOD FOR PROCESSING COMMUNICATIONS IN A MULTITHREAD ARCHITECTURE WITH CONTEXT CHANGES
US8782384B2 (en) * 2007-12-20 2014-07-15 Advanced Micro Devices, Inc. Branch history with polymorphic indirect branch information
US20110093658A1 (en) * 2009-10-19 2011-04-21 Zuraski Jr Gerald D Classifying and segregating branch targets
EP2616928B1 (en) * 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
KR101638225B1 (ko) 2011-03-25 2016-07-08 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 명령어 시퀀스 코드 블록의 실행
WO2012162189A1 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. An interconnect structure to support the execution of instruction sequences by a plurality of engines
TWI666551B (zh) 2011-05-20 2019-07-21 美商英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
US9396117B2 (en) 2012-01-09 2016-07-19 Nvidia Corporation Instruction cache power reduction
US9547358B2 (en) * 2012-04-27 2017-01-17 Nvidia Corporation Branch prediction power reduction
US9552032B2 (en) * 2012-04-27 2017-01-24 Nvidia Corporation Branch prediction power reduction
US9201658B2 (en) 2012-09-24 2015-12-01 Apple Inc. Branch predictor for wide issue, arbitrarily aligned fetch that can cross cache line boundaries
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
CN105247484B (zh) 2013-03-15 2021-02-23 英特尔公司 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
CN105210040B (zh) 2013-03-15 2019-04-02 英特尔公司 用于执行分组成块的多线程指令的方法
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US11086629B2 (en) * 2018-11-09 2021-08-10 Arm Limited Misprediction of predicted taken branches in a data processing apparatus

Family Cites Families (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AT354159B (de) * 1975-02-10 1979-12-27 Siemens Ag Assoziativspeicher mit getrennt assoziierbaren bereichen
US4179737A (en) * 1977-12-23 1979-12-18 Burroughs Corporation Means and methods for providing greater speed and flexibility of microinstruction sequencing
US4453212A (en) * 1981-07-13 1984-06-05 Burroughs Corporation Extended address generating apparatus and method
US4928223A (en) * 1982-10-06 1990-05-22 Fairchild Semiconductor Corporation Floating point microprocessor with directable two level microinstructions
US4807115A (en) * 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
US4679141A (en) * 1985-04-29 1987-07-07 International Business Machines Corporation Pageable branch history table
EP0239081B1 (en) * 1986-03-26 1995-09-06 Hitachi, Ltd. Pipelined data processor capable of decoding and executing plural instructions in parallel
AU587714B2 (en) * 1986-08-27 1989-08-24 Amdahl Corporation Cache storage queue
US4860197A (en) * 1987-07-31 1989-08-22 Prime Computer, Inc. Branch cache system with instruction boundary determination independent of parcel boundary
US5067069A (en) * 1989-02-03 1991-11-19 Digital Equipment Corporation Control of multiple functional units with parallel operation in a microcoded execution unit
US5142634A (en) * 1989-02-03 1992-08-25 Digital Equipment Corporation Branch prediction
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
JPH02287626A (ja) * 1989-04-28 1990-11-27 Toshiba Corp パイプライン方式の分岐命令制御装置
US5136697A (en) * 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
US5129067A (en) * 1989-06-06 1992-07-07 Advanced Micro Devices, Inc. Multiple instruction decoder for minimizing register port requirements
WO1991004536A1 (en) * 1989-09-20 1991-04-04 Dolphin Server Technology A/S Instruction cache architecture for parallel issuing of multiple instructions
US5226130A (en) * 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5053631A (en) * 1990-04-02 1991-10-01 Advanced Micro Devices, Inc. Pipelined floating point processing unit
US5058048A (en) * 1990-04-02 1991-10-15 Advanced Micro Devices, Inc. Normalizing pipelined floating point processing unit
EP0459232B1 (en) * 1990-05-29 1998-12-09 National Semiconductor Corporation Partially decoded instruction cache and method therefor
US5235697A (en) * 1990-06-29 1993-08-10 Digital Equipment Set prediction cache memory system using bits of the main memory address
SG45269A1 (en) * 1992-02-06 1998-01-16 Intel Corp End bit markers for instruction decode
GB2263985B (en) * 1992-02-06 1995-06-14 Intel Corp Two stage window multiplexors for deriving variable length instructions from a stream of instructions
WO1993017385A1 (en) * 1992-02-27 1993-09-02 Intel Corporation Dynamic flow instruction cache memory
US5418922A (en) * 1992-04-30 1995-05-23 International Business Machines Corporation History table for set prediction for accessing a set associative cache
EP0586057B1 (en) * 1992-08-31 2000-03-01 Sun Microsystems, Inc. Rapid instruction (pre)fetching and dispatching using prior (pre)fetch predictive annotations
US5367703A (en) * 1993-01-08 1994-11-22 International Business Machines Corporation Method and system for enhanced branch history prediction accuracy in a superscalar processor system
JP2744882B2 (ja) * 1993-01-15 1998-04-28 インターナショナル・ビジネス・マシーンズ・コーポレイション キューにより命令の実行を制御する装置及び方法
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
IE80854B1 (en) * 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
JP3639927B2 (ja) * 1993-10-04 2005-04-20 株式会社ルネサステクノロジ データ処理装置
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
US5592634A (en) * 1994-05-16 1997-01-07 Motorola Inc. Zero-cycle multi-state branch cache prediction data processing system and method thereof
US5758142A (en) * 1994-05-31 1998-05-26 Digital Equipment Corporation Trainable apparatus for predicting instruction outcomes in pipelined processors
US5732253A (en) * 1994-10-18 1998-03-24 Cyrix Corporation Branch processing unit with target cache storing history for predicted taken branches and history cache storing history for predicted not-taken branches
US5692168A (en) * 1994-10-18 1997-11-25 Cyrix Corporation Prefetch buffer using flow control bit to identify changes of flow within the code stream
US5649137A (en) * 1994-10-20 1997-07-15 Advanced Micro Devices, Inc. Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
JP3494736B2 (ja) * 1995-02-27 2004-02-09 株式会社ルネサステクノロジ 分岐先バッファを用いた分岐予測システム
US5822574A (en) * 1995-04-12 1998-10-13 Advanced Micro Devices, Inc. Functional unit with a pointer for mispredicted resolution, and a superscalar microprocessor employing the same
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
US5878255A (en) 1995-06-07 1999-03-02 Advanced Micro Devices, Inc. Update unit for providing a delayed update to a branch prediction array
US5875324A (en) 1995-06-07 1999-02-23 Advanced Micro Devices, Inc. Superscalar microprocessor which delays update of branch prediction information in response to branch misprediction until a subsequent idle clock
US5968169A (en) 1995-06-07 1999-10-19 Advanced Micro Devices, Inc. Superscalar microprocessor stack structure for judging validity of predicted subroutine return addresses
US5649178A (en) * 1995-06-07 1997-07-15 International Business Machines, Corporation Apparatus and method for storing and initializing branch prediction with selective information transfer
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
US5798906A (en) 1996-07-17 1998-08-25 Honda Giken Kogyo Kabushiki Kaisha Capacitor
US5822575A (en) * 1996-09-12 1998-10-13 Advanced Micro Devices, Inc. Branch prediction storage for storing branch prediction information such that a corresponding tag may be routed with the branch instruction
US5794028A (en) * 1996-10-17 1998-08-11 Advanced Micro Devices, Inc. Shared branch prediction structure
US5954816A (en) * 1996-11-19 1999-09-21 Advanced Micro Devices, Inc. Branch selector prediction
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

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008217353A (ja) * 2007-03-02 2008-09-18 Fujitsu Ltd データ処理装置、およびメモリのリードアクティブ制御方法。
US8667259B2 (en) 2007-03-02 2014-03-04 Fujitsu Semiconductor Limited Data processor and memory read active control method
JP2009037302A (ja) * 2007-07-31 2009-02-19 Nec Corp 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム
US8892852B2 (en) 2007-07-31 2014-11-18 Nec Corporation Branch prediction device and method that breaks accessing a pattern history table into multiple pipeline stages
WO2013101152A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Embedded branch prediction unit
US9395994B2 (en) 2011-12-30 2016-07-19 Intel Corporation Embedded branch prediction unit
US9753732B2 (en) 2011-12-30 2017-09-05 Intel Corporation Embedded branch prediction unit

Also Published As

Publication number Publication date
DE69802209D1 (de) 2001-11-29
DE69802209T2 (de) 2002-06-27
EP1025488B1 (en) 2001-10-24
US5978906A (en) 1999-11-02
JP3794917B2 (ja) 2006-07-12
US6279107B1 (en) 2001-08-21
US6141748A (en) 2000-10-31
WO1999022293A1 (en) 1999-05-06
KR100577445B1 (ko) 2006-05-09
EP1025488A1 (en) 2000-08-09
KR20010031396A (ko) 2001-04-16

Similar Documents

Publication Publication Date Title
JP3794917B2 (ja) 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ
US6253316B1 (en) Three state branch history using one bit in a branch prediction mechanism
JP3798404B2 (ja) 2レベルの分岐予測キャッシュによる分岐予測
US6101577A (en) Pipelined instruction cache and branch prediction mechanism therefor
JP3803723B2 (ja) 分岐予測を選択する分岐セレクタを採用する分岐予測機構
US6502188B1 (en) Dynamic classification of conditional branches in global history branch prediction
US5752259A (en) Instruction cache configured to provide instructions to a microprocessor having a clock cycle time less than a cache access time of said instruction cache
US5822575A (en) Branch prediction storage for storing branch prediction information such that a corresponding tag may be routed with the branch instruction
US6012125A (en) Superscalar microprocessor including a decoded instruction cache configured to receive partially decoded instructions
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
US5765016A (en) Reorder buffer configured to store both speculative and committed register states
US5954816A (en) Branch selector prediction
US6460132B1 (en) Massively parallel instruction predecoding
US6202142B1 (en) Microcode scan unit for scanning microcode instructions using predecode data
KR100603067B1 (ko) 분기 예측의 타입을 분류하기 위해 복귀 선택 비트들을 이용하는 분기 예측
US6212621B1 (en) Method and system using tagged instructions to allow out-of-program-order instruction decoding
US5987235A (en) Method and apparatus for predecoding variable byte length instructions for fast scanning of instructions
US5872943A (en) Apparatus for aligning instructions using predecoded shift amounts
US5890006A (en) Apparatus for extracting instruction specific bytes from an instruction
JP2001522082A (ja) より小さな数の分岐予測および代替ターゲットを用いて近似的により大きな数の分岐予測をすること
US6061775A (en) Apparatus and method for predicting a first microcode instruction of a cache line and using predecode instruction data to identify instruction boundaries and types
JP3717524B2 (ja) ストアおよびロードミス命令を完了するための複数のポインタを備えるロード/ストアユニット
US6134650A (en) Apparatus and method for predicting a first scanned instruction as microcode instruction prior to scanning predecode data
EP0912930B1 (en) A functional unit with a pointer for mispredicted branch resolution, and a superscalar microprocessor employing the same
KR100417459B1 (ko) 저장 및 적재 미스 명령들을 완료하기 위한 다수의 포인터들을 갖는 적재/저장 유닛

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050524

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060322

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060411

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090421

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100421

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110421

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110421

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120421

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120421

Year of fee payment: 6

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120421

Year of fee payment: 6

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees