(57)【特許請求の範囲】
【請求項１】
分岐前に実行する最後の命令に対応する分岐元命令アドレスと、分岐先命令アドレスとを登録する分岐バッファを有し、
前記分岐バッファへの登録は、分岐登録命令によって行なわれ、
前記分岐バッファに登録された前記分岐元命令アドレスと命令フェッチアドレスが一致した場合に、次の命令フェッチアドレスを前記分岐先命令アドレスに切替え、
前記分岐バッファの各エントリに番号を付与し、前記分岐登録命令で前記番号を指定して前記分岐バッファへの登録を行うことにより、前記分岐バッファをプログラムで管理することを特徴とするプロセッサ。
【請求項２】
請求項１において、
前記分岐登録命令による登録の際に、条件未確定ビット，関係フラグ番号，及び分岐フラグ値も前記分岐バッファに登録し、条件未確定ビットの立っているエントリの関係フラグ番号を更新フラグ番号で検索してヒットした場合に、ヒットしたエントリに登録されている分岐フラグ値及び更新フラグ値から分岐または非分岐を判断し、判断結果を前記分岐バッファに書込むと同時に条件未確定ビットをクリアすることを特徴とするプロセッサ。
【請求項３】
請求項１において、
前記分岐登録命令による登録の際に、条件再判定ビット，関係フラグ番号，及び分岐フラグ値も前記分岐バッファに登録し、条件再判定ビットの立っているエントリの関係フラグ番号を更新フラグ番号で検索してヒットした場合に、ヒットしたエントリに登録されている分岐フラグ値及び更新フラグ値から分岐または非分岐を判断し、判断結果を前記分岐バッファに書込むことを特徴とするプロセッサ。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明はプロセッサ等のデータ処理装置にかかり，分岐処理の高速化に適する分岐登録命令を有するプロセッサに関する。
【０００２】
【従来の技術】
図１は高速化されない条件分岐を含む命令処理パイプラインである。命令アドレス生成（Ａ），命令フェッチ（Ｆ），命令デコード（Ｄ），実行（Ｅ）の各ステージから成る。Ａステージでは，分岐先の場合は分岐命令のＥステージで生成された分岐先アドレスを，他の場合は直前のＡステージで生成した命令アドレスにその命令アドレスでフェッチする命令の長さを加算した値を選択して命令アドレスとする。尚，図１のように分岐命令のＥステージでの分岐先アドレス計算及び分岐先のＡステージでの分岐先アドレス選択の同時実行が可能なのは，分岐先以外のAステージも加算及び選択であり，処理に要する時間が同じ１サイクルであるからである。Ｆステージでは，Ａステージで生成された命令アドレスの命令をフェッチする。Ｄステージでは，Ｆステージでフェッチした命令をデコードする。Ｅステージでは，Ｄステージからのデコード情報に基づいて命令を実行する。
【０００３】
条件分岐処理は，分岐元命令アドレス確定，分岐先命令アドレス生成，及び分岐／非分岐判定をすることである。尚，分岐元命令アドレスは分岐命令アドレスである場合が多い。しかし，分岐命令の後に遅延分岐スロットがある場合もあり，一般には分岐元命令アドレスは分岐命令アドレスとは限らない。図１のように，高速化されない条件分岐においては，分岐元命令アドレスは分岐命令のＤステージで確定し，分岐先命令アドレスは分岐命令のＥステージで生成する。そして，分岐判定は分岐命令に先立つ分岐条件確定命令のＥステージで確定する分岐条件に基づいて分岐命令のＥステージで行う。
【０００４】
一般的なプログラムでは分岐命令は５命令に１命令程度といわれている。したがって，分岐１命令を含む５命令の実行に要するサイクル数は，分岐処理性能を精度は高くないが容易に測れる指標として有効である。命令実行サイクルをＥステージ開始から次の命令のＥステージ開始までのサイクル数と定義すると，このプロセッサは分岐１命令を含む５命令の実行に７サイクルかかっている。
【０００５】
図２は５命令並列実行可能なプロセッサにおける高速化されない条件分岐を含む命令処理パイプラインである。パイプラインの構成及び各ステージの動作は図１と同じである。分岐１命令を含む５命令の実行に３サイクルかかっている。命令実行スロットを５倍にして並列性のあるプログラムを実行しても性能は2.3倍にしかならない。尚，分岐条件確定命令と分岐命令のＥステージの同時実行は可能であるとした。
【０００６】
一方，図１及び図２の例において，分岐命令を高速化して分岐処理時間を０サイクルにすると，分岐１命令を含む５命令の実行がそれぞれ４及び１サイクルで済むようになり，性能が1.75及び３倍に向上する。特に，命令実行スロットの多いプロセッサにおける分岐高速化効果は大きい。尚，分岐処理時間は分岐元命令のＥステージ終了から分岐先命令のＥステージ開始までのサイクル数と定義する。
【０００７】
従来の分岐高速化方式には以下のような方式がある。分岐方式のみの比較を行うために，各プロセッサの実際の命令実行並列度とは関係なく，スカラプロセッサと５命令並列実行可能なプロセッサに各分岐高速化方式を適用した場合の分岐１命令を含む５命令の実行サイクル数を比較する。尚，１つの分岐処理を複数の命令で行うプロセッサでは，１分岐処理と４命令の実行サイクル数を使用する。
【０００８】
図３は「IEEE Micro, vol.13, no.5 ('93/10), pp54-68」記載の「PowerPC 601」の分岐高速化方式をスカラプロセッサに適用した場合である。「PowerPC 601」は分岐命令を以下のように先行実行して高速化している。まず，Ｆステージで１度に８命令フェッチして命令キューにバッファリングする。図３では６命令目以降は実行しないので省略した。そして，分岐命令が命令キューの先頭から４命令までに入ると，他の命令とは非同期にＤステージでデコード及び実行を１サイクルで処理する。図３の例では先頭の命令をデコードすると分岐命令が４命令目になるので実行される。分岐命令実行時にはまだ分岐条件確定命令のＥステージを実行していないため，分岐判定は予測である。「PowerPC 601」は分岐先アドレスが分岐元アドレスより小さい場合はループである可能性が高いのでテイクン予測し，大きい場合はノットテイクン予測する。本方式により分岐１命令を含む５命令が４サイクルで実行される。尚，本方式を適用すると分岐命令を非同期に実行するための実行スロットが必要となり厳密にはスカラプロセッサではなくなる。
【０００９】
図４は「PowerPC 601」の分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合である。分岐命令は命令キューに入れば先頭から４命令までに入らなくても実行可能とすると，分岐１命令を含む５命令が２サイクルで実行される。
【００１０】
図５は「日経エレクトロニクスno.607（1994.5.9）p.10」記載の「PowerPC 604」及び「日経エレクトロニクスno.620（1994.12.24）pp.13-15」記載の「PowerPC 620」の分岐高速化方式をスカラプロセッサに適用した場合である。以下のように分岐先アドレス格納キャッシュ（BTAC: branch target address cache）及び分岐記録テーブル（BHT: branch history table）を用いて分岐を高速化している。Ａステージにおいて，直前のＡステージで生成した命令アドレスによってBTACを検索し，命令アドレスが分岐命令に達してBTACにヒットすると，命令アドレスをBTACから読出された分岐先アドレスにする。このＡステージ実行時にはまだ分岐条件確定命令のＥステージを実行していないため，BTACヒットは分岐テイクン予測に相当する。BTACには，BHTの４段階の分岐可能性が最も高いレベルになると登録し，最も低いレベルになると削除する。図５の方式により分岐１命令を含む５命令が４サイクルで実行される。
【００１１】
図６は「PowerPC 604」及び「PowerPC 620」の分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合である。分岐１命令を含む５命令が１サイクルで実行される。尚，「PowerPC 604」及び「PowerPC 620」は最大４命令の並列実行が可能である。
【００１２】
図７は「IEEE Computer, Vol.22, No.1, January 1989, pp.55-64」記載の「Advanced Scientific Computer」の分岐高速化方式をスカラプロセッサに適用した場合である。通常１命令で行う条件分岐処理の分岐先命令アドレス生成，分岐元命令アドレス確定，及び分岐判定を，それぞれ Load lookahead 命令，Prepare to branch 命令，及び分岐命令の３命令で行う。処理を分割することにより先行できる処理を先行させる。Load lookahead 命令は分岐先命令アドレスを生成してアドレスレジスタに書込む。Prepare to branch 命令は何命令後にアドレスレジスタのアドレスに分岐するかを指定する。Prepare to branch 命令は通常分岐条件確定命令より前に実行するので，この命令の実行はテイクン予測に相当する。ノットテイクン予測の場合はこの命令を使用しない。図７において，サイクル数のカウントは一般的には Load lookahead 命令から始めるべきであるが，この命令はｎ回まわるループの外に出せればサイクル数が実質１／ｎとみなせるのでカウントしていない。本方式は，分岐オーバーヘッドが減る代りに命令数が増えるので効果は小さく，１分岐処理と４命令の実行に６サイクルかかる。
【００１３】
図８は「Advanced Scientific Computer」の分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合である。１分岐処理と４命令が３サイクルで実行される。
【００１４】
図９は「IEEE Computer, Vol.24, No.1, January 1991, pp.65-71」記載の「PIPE Processor」の分岐高速化方式をスカラプロセッサに適用した場合である。分岐先命令アドレス生成を Load lookahead 命令で実行し，分岐元命令アドレス確定及び分岐判定を分岐命令で行う。通常，分岐元命令アドレスは分岐命令アドレスであるが，本方式では分岐命令から７命令先の命令までの８通りの指定ができる。従来の遅延分岐スロットが１命令固定であったのに対し，本方式では０〜７命令の図７の遅延分岐スロットを指定できる。Load lookahead 命令はカウントしないものとすると，命令数は増加しない。本方式では，他の方式と異なり分岐条件確定が早くないと分岐は高速化されない。分岐条件確定が十分早いとすると，図９のように１分岐処理と４命令が５サイクルで実行される。
【００１５】
図10は「PIPE Processor」の分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合である。１分岐処理と４命令が３サイクルで実行される。命令並列度が５倍になるとと分岐オーバーヘッドを隠すために分岐命令と分岐先命令の間に挿入すべき命令数が５倍になり十分な命令数の挿入は不可能となるので，本方式の効果はなくなる。
【００１６】
【発明が解決しようとする課題】
図11は各分岐高速化方式の１分岐処理と４命令の実行サイクルである。並列度が５命令の場合を見ると分るように，命令実行並列度が上がって分岐間隔サイクルが短くなるとると「PowerPC 604」及び「PowerPC 620」以外の方式は効果がほとんどなくなる。
【００１７】
プロセッサの動作周波数の向上にメモリのアクセス時間の短縮が追いつかないという現在のトレンドが今後も続くとすると，内蔵キャッシュミス等を考慮した平均命令フェッチサイクルは長くなる。図12は命令フェッチにｎサイクルかかる場合の各分岐高速化方式の１分岐処理と４命令の実行サイクルである。「PowerPC 604」及び「PowerPC 620」以外の方式は，命令フェッチサイクルの増加がそのまま実行サイクルの増加につながる。
【００１８】
一方，「PowerPC 604」及び「PowerPC 620」の方式はBTACにヒットしなければ効果がない。「PowerPC 604」の64エントリのBTACのヒット率は90％以上である。図13は「PowerPC 604」及び「PowerPC 620」の分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合の分岐１命令を含む５命令の実行サイクル数のBTACヒット率依存性である。BTACミスの場合は「PowerPC 601」の方式で分岐するものとする。命令フェッチサイクルを１サイクルとするとヒット率90％の場合は100％の場合より10％実行サイクル数が伸びる。今後，平均命令フェッチサイクルが伸びて２〜４サイクルになると，実行サイクル数の伸びを10％程度に維持するためには，BTACヒット率を95〜98％程度に上げなければならない。したがって，BTACの容量を増やす必要がある。実際，「PowerPC 604」より新しい「PowerPC 620」ではBTACを256エントリにしている。しかし，初回分岐命令実行時のミスはなくならないため，BTACをさらに大容量化してもヒット率が100％に近づく保証はない。
【００１９】
本発明が解決しようとする課題は，分岐間隔サイクルが短く，平均命令フェッチサイクルが長くなっても有効な分岐高速化方式を実現することである。
【００２０】
【課題を解決するための手段】
上記課題を解決するために，従来初回実行時に行っていた分岐バッファ（上記従来例のBTACに相当）への登録を分岐に先立って分岐登録命令で行う。この命令は，従来例の Load lookahead 命令及び Prepare to branch 命令と同様に命令数を増加させ実行サイクル数を伸す可能性がある。しかし，Load lookahead 命令と同様に１度実行すれば何度でも分岐できるので，命令数を増加の実行サイクル数への影響は少ない。
【００２１】
分岐バッファへの登録を分岐に先立って命令で行うと，従来の初回実行時ならば確定していた情報が確定していない場合がある。こうした情報は予測によって決定し登録する。特に条件分岐の分岐条件は確定していない可能性が高いので，登録後に確定しても分岐非分岐の情報を登録できるようにする。尚，登録後に確定した場合は分岐命令で処理することもできる。
【００２２】
また，分岐の登録が分岐元命令フェッチまでに間に合わない場合の誤動作を防止するため，間に合わなかった登録を検出して分岐する。尚，分岐バッファの構成にも依るが，通常分岐バッファにヒットすると分岐命令の実行は不要になるので，分岐を初回実行時から100％分岐バッファで行うと，分岐命令は不要である。しかし，上記誤動作の防止を命令で行うために分岐命令を挿入することもできる。
【００２３】
従来の分岐バッファは分岐元命令アドレスとして分岐命令アドレスを使用していた。しかし，本発明のように分岐命令が不要な場合もあるので，分岐バッファのタグとして使用する分岐元命令アドレスは分岐前に実行する最後の命令のアドレスとする。
【００２４】
【作用】
上記課題を解決するための手段により，分岐を100％分岐バッファで行うことができるようになり，分岐処理が高速化される。特に，分岐間隔サイクルが短く，平均命令フェッチサイクルが長い場合に効果が大きい。
【００２５】
【実施例】
図14は本発明の分岐高速化方式を適用したプロセッサの第１の実施例である。本実施例は本発明を必要最小限のハードウェアで実現することを目的としたものである。このため，分岐登録が間に合わなかった場合や分岐予測がはずれた場合は従来の分岐命令で処理することをソフトウェアに要求する。
【００２６】
まず，本実施例のプロセッサの構成について説明する。プロセッサのCPUコア１は命令アドレス部２，命令デコード部３，及び命令実行部４から成る。該CPUコア１はメモリ５と接続されている。次に各部の動作について説明する。
【００２７】
命令アドレス部２は分岐登録情報10，分岐指示11，及び分岐先アドレス12から，命令アドレス６及びプログラムカウンタ８を生成し，それぞれメモリ５及び命令実行部４に出力する。命令アドレス部２は本発明の中核を成す部分である。その詳細は後述する。
【００２８】
命令デコード部３は命令７をデコードして命令実行制御情報９及び分岐登録情報10を生成し，それぞれ命令実行部４及び命令アドレス部２に出力する。命令デコード部３は分岐命令をデコードした際に該分岐命令に相当する分岐が既に分岐バッファによって行われていた場合は，該分岐命令が無条件分岐命令ならばNOP (No Operation) 命令に，条件分岐命令ならば分岐条件が逆で次命令アドレスに分岐する命令に変換する。この結果，条件分岐命令は分岐予測失敗補償命令となる。
【００２９】
命令実行部４は命令実行制御情報９に基づいて命令を実行する。但し，本発明の特長である分岐登録命令は命令アドレス部２で実行する。分岐命令を実行し，分岐すると判断した場合は分岐指示11をアサートし，同時に分岐先アドレス12を出力する。メモリアクセスが必要な場合はメモリ５にアドレス13を出力しデータ14をやりとりする。
【００３０】
メモリ５は命令アドレス６の命令７を返し，アドレス13のデータ14を命令実行部４とやりとりする。CPUコア１が直接やりとりするメモリ５は，具体的には命令とデータが独立のキャッシュメモリ，単一のキャッシュメモリ，外部メモリ等がある。本発明の分岐高速化方式は平均命令フェッチサイクルが長い場合にも性能がでる方式であるため，メモリ５は必ずしも高性能なメモリである必要はない。
【００３１】
次に，命令アドレス部２の詳細な構成について説明する。図15は本発明の第１の実施例の命令アドレス部２である。分岐バッファ20，インクリメンタ21，命令アドレスセレクタ22，及び命令アドレスキュー23から成る。次に各部の構成及び動作について説明する。
【００３２】
分岐バッファ20は連想メモリである。デコーダ40，連想部41，メモリ部42，及び分岐バッファヒット生成回路43から成る。分岐登録情報10に基づいてエントリの登録を行い，命令アドレス６で検索し，ヒットしたら分岐先命令アドレス32を出力する。同時に分岐バッファヒット33も出力する。
【００３３】
本実施例では登録エントリは命令で指定する。従来の分岐バッファは登録エントリをハードウェアで指定していた。すなわち，LRU（Least Reacently Used），FIFO（First In First Out），ランダム等のリプレースアルゴリズムによって指定する。しかし，ハードウェアで指定すると100％のヒット率を保証することは困難である。命令で指定すれば汎用レジスタと同様にソフトウェアで制御可能となり100％のヒット率を保証することも容易になる。
【００３４】
エントリの登録は以下のように行う。分岐登録情報10はエントリ番号50，分岐元命令アドレス51，及び分岐先命令アドレス52から成る。まず，エントリ番号50をデコーダ40でデコードして指定エントリの登録信号53をアサートし，分岐元命令アドレス51及び分岐先命令アドレス52をそれぞれ連想部41及びメモリ部42に書込む。同時に該エントリの連想部41の有効ビットを立てる。
【００３５】
命令アドレス６による検索は以下のように行う。まず，連想部41の有効ビットの立っているエントリの分岐元命令アドレス51と命令アドレス６とを比較する。両者が一致するエントリがあると一致信号54がアサートされる。尚，誤動作を避けるためにソフトウェアの責任で同一の分岐元アドレスのエントリが存在しないようにしておく。そして，一致信号54がアサートされたエントリのメモリ部42を読出して分岐先命令アドレス32とする。同時に，分岐バッファヒット生成回路43によって全エントリの一致信号54の論理和をとり，分岐バッファヒット33として出力する。
【００３６】
インクリメンタ21は命令アドレス６を命令フェッチ幅30だけインクリメントし，分岐しなかった場合の次命令アドレス31を生成する。
【００３７】
命令アドレスセレクタ22は，分岐指示11がアサートされたら分岐先アドレス12を，分岐指示11がアサートされずに分岐バッファヒット33がアサートされたら分岐先命令アドレス32を，両者ともアサートされなかったら次命令アドレス31を選択し，命令アドレス６とする。分岐指示11及び分岐バッファヒット33が同時にアサートされた場合に分岐先アドレス12を選択するのは，こちらに対応する分岐の方が順序の早い分岐だからである。
【００３８】
命令アドレスキュー23は発行した命令アドレス６をバッファリングして，命令実行制御情報９に同期してプログラムカウンタ８を出力するためのものである。バッファが深いほど命令フェッチのレイテンシ増加に対するスループット低下が少ない。
【００３９】
図16は本発明の第１の実施例のパイプライン例及び信号タイミングである。本例では命令フェッチは２サイクルかかるものとする。分岐登録命令の４サイクル後に対応する条件分岐命令を実行し，引続き分岐先命令を３サイクル分開始し，該分岐登録命令の分岐予測が誤っていて，該３サイクル分の分岐先命令をキャンセルし，非分岐側命令を実行している。
【００４０】
分岐登録命令の命令アドレス６が出力されると，２サイクル後に命令７が到着する。さらに，１サイクル後に分岐登録情報10が出力され，その１サイクル後に分岐バッファ20に登録される。該登録と同一サイクルに条件分岐命令の命令アドレス６が出力され，次のサイクルで分岐バッファ20が検索され，分岐先命令アドレス32が出力されて，分岐バッファヒット33がアサートされる。そして，命令アドレス６として分岐先命令アドレス32が選択される。その後２サイクルは分岐バッファ20にヒットせずに分岐バッファヒット33がネゲートされるため，命令アドレス６として次命令アドレス31が選択される。条件分岐命令の命令アドレス６の２サイクル後に対応する命令７が到着する。該条件分岐命令は，対応する分岐バッファヒット33がアサートされたので，分岐条件が逆で次命令アドレスに分岐する分岐予測失敗補償命令に変換され，命令７到着の１サイクル後に命令実行制御情報９が出力される。分岐登録命令の分岐予測が誤っているので，次のサイクルで分岐指示11がアサートされ，同時に次命令アドレスすなわち非分岐側命令アドレスが分岐先アドレス12として出力される。この時，分岐先の３サイクル目の命令が分岐命令であるため，分岐指示11と同時に分岐バッファヒット33がアサートされる。前述のように，分岐指示11をアサートした命令の方が順序が早いのでこちらが優先される。すなわち，命令アドレス６として分岐先アドレス12が選択される。そして，３サイクル分の分岐先命令はキャンセルされ，非分岐側命令がフェッチ，デコードされて，実行される。
【００４１】
以上のように本発明の第１の実施例では，対応する分岐元命令（図16の例では条件分岐命令）の命令フェッチサイクル＋２サイクル（図16の例では４サイクル）前までに分岐登録命令を発行すれば０サイクルで分岐できる。
【００４２】
図17は本実施例の32ビット固定命令長の分岐登録命令のフォーマットの第１の例である。32ビット固定命令長は現在最も一般的な命令長である。本分岐登録命令はオペランドとして分岐元アドレス，分岐先アドレス，及び登録エントリ番号を有する。通常の分岐は分岐元及び分岐先アドレスの双方とも静的に決定できる場合が多く，該アドレスを直接指定できることが望ましい。しかし，アドレスは32または64ビットあり，命令による直接指定はできない。そこで通常行われている方式は，プログラムカウンタ相対間接指定方式である。該方式を用いてもオフセットすなわちにプログラムカウンタと指定アドレスとの距離に制限を設けなければ必要なビット数は削減されない。通常の分岐命令は分岐先アドレスのオフセットを８〜24ビット程度に制限している。通常の分岐命令は分岐先アドレスのみを指定するのに対し，本分岐登録命令は分岐元アドレス及び登録エントリ番号も指定するため，同一の命令長であれば，該オフセットの制限を厳しくする必要がある。図17の例では分岐先アドレスのオフセットを短めにして分岐元アドレスのオフセットを加えた例である。本例では，分岐元の方が分岐先より分岐登録命令の近くに置き易いことを考慮して，分岐元に６ビット，分岐先に12ビットフィールドを割当てた。
【００４３】
図18は本実施例の32ビット固定命令長の分岐登録命令のフォーマットの第２の例である。短いオフセットで対応できない分岐の登録にはこのように複数命令で登録すればよい。複数の登録命令が同時に実行されない場合，登録の途中で分岐バッファ20の検索が行われる。このため，登録の途中では分岐バッファ20の連想部41の有効ビットをネゲートしておく。１回の登録で多数回使用する場合や全体に対する実行頻度の少ない登録では，本フォーマットの使用による登録命令の増加の性能への影響は少ない。また，サブルーチンのコール及びリターンの場合，従来はレジスタやスタックを介してリターンアドレスを受渡していたが，本登録命令によって分岐バッファ20を介したリターンアドレスの受渡しが可能となる。まず，コール側でリターンアドレスを分岐先アドレスとして登録し，次にサブルーチン側で分岐元アドレスを登録すればよい。尚，登録の途中で別のエントリを登録しなければ，エントリ番号フィールドは最初の登録命令にあれば十分である。
【００４４】
図19は本発明の分岐高速化方式を適用したプロセッサの第２の実施例である。本実施例は本発明により分岐登録命令だけで分岐処理を行う。このため，第１の実施例に比べてハードウェア量は増加するが，第１の実施例で必要だった従来の分岐命令が不要となるため実行命令数を削減でき，性能が向上する。また，命令実行並列度が上がったり命令フェッチサイクルが長くなったりして分岐登録が間に合わなくなった場合でも，第１の実施例のように従来の分岐命令まで待たずに，登録した時点で分岐するので，急激に性能が低下することがない。さらに，登録から分岐までの間，分岐条件判定結果を反映することができるので，登録時の分岐予測が誤っていた場合の修正を，第１の実施例のように従来の分岐命令まで待つ必要がない。
【００４５】
本実施例のプロセッサの構成は第１の実施例と基本的に同じであり，命令アドレス部２，命令デコード部３，及び命令実行部４から成るCPUコア１とメモリ５から成る。次に各部の動作について説明する。
【００４６】
命令アドレス部２は分岐登録情報10，更新フラグ番号15，及び更新フラグ値16から，命令アドレス６及びプログラムカウンタ８を生成し，それぞれメモリ５及び命令実行部４に出力する。命令アドレス部２の詳細は後述する。
【００４７】
命令デコード部３は命令７をデコードして，命令実行制御情報９を命令実行部４に，分岐登録情報10及び更新フラグ番号15を命令アドレス部２にそれぞれ出力する。
【００４８】
命令実行部４の構成及び動作は第１の実施例と基本的に同じである。但し，第１の実施例で命令実行部４で行っていた分岐判定を命令アドレス部２で行うため，図14の分岐指示12の代りに本実施例では分岐判定に必要な更新フラグ値16を命令アドレス部２に出力する。  メモリ５の構成及び動作は第１の実施例と同じである。
【００４９】
次に，命令アドレス部２の詳細な構成について説明する。図20は本発明の第２の実施例の命令アドレス部２である。分岐バッファ20，インクリメンタ21，命令アドレスセレクタ22，及び命令アドレスキュー23から成る。次に各部の構成及び動作について説明する。
【００５０】
本実施例の分岐バッファ20には第１の実施例の図15の分岐バッファ20に，制御部44が追加されている。尚，図15の分岐バッファヒット生成回路43の機能は制御部44に含まれている。また，図15にあった連想部41の有効ビットはない。本実施例においても登録エントリは命令で指定する。図15の分岐バッファ20と同様に，分岐登録情報10に基づいてエントリの登録を行い，命令アドレス６で検索し，ヒットしたら分岐先命令アドレス32及び分岐制御情報60を出力する。また，登録後の条件判定のために，更新フラグ番号15で検索し，ヒットしたら更新フラグ値16を基にそのエントリの分岐制御情報を更新する。尚，制御部44の動作は後から図21を用いて詳細に説明する。
【００５１】
エントリの登録は以下のように行う。分岐登録情報10には，第１の実施例のエントリ番号50，分岐元命令アドレス51，及び分岐先命令アドレス52に，分岐制御情報70を追加している。まず，エントリ番号50をデコーダ40でデコードして指定エントリの登録信号53をアサートし，分岐元命令アドレス51，分岐制御情報70，及び分岐先命令アドレス52をそれぞれ連想部41，制御部44，及びメモリ部42に書込む。
【００５２】
命令アドレス６による検索は以下のように行う。まず，連想部41の制御部44からの有効信号71のアサートされているエントリの分岐元命令アドレス51と命令アドレス６とを比較する。両者が一致するエントリがあると一致信号54がアサートされる。そして，一致信号54がアサートされたエントリの制御部44及びメモリ部42を読出してそれぞれ分岐制御情報60及び分岐先命令アドレス32とする。一致するエントリがない場合には分岐制御情報60のうち後述する条件再判定ビット，条件未確定ビット，及び分岐ビットをネゲートする。こうすることにより第１の実施例で必要だった分岐バッファヒット33が不要となる。
【００５３】
登録後の条件判定動作は全て制御部44内で行われる。詳細は後から図21を用いて説明する。
【００５４】
図21は分岐バッファ20の制御部44の１エントリの詳細である。分岐制御情報として関係フラグ番号100，条件再判定ビット101，条件未確定ビット102，分岐ビット103，及び分岐フラグ値104の保持手段を有する。
【００５５】
エントリ登録の際に登録エントリに指定されて登録信号53がアサートされると，分岐制御情報70を該保持手段に保持する。各分岐制御情報は以下のような機能を持つ。関係フラグ番号100は，分岐方向の決定に関係するフラグの番号である。条件再判定ビット101は条件確定後でも関係フラグの更新の度に分岐判定を行うことを示す。１回の登録で何度も分岐判定して分岐する場合に使用する。条件未確定ビット102はまだ関係フラグの更新が行われていないために分岐条件が確定していないことを示す。したがって，条件再判定ビット101または条件未確定ビット102のアサートされているエントリは分岐方向が変化する可能性がある。該変化は後述する登録後の条件判定によって検出する。分岐ビット103は分岐がテイクンまたはテイクン予測であることを示す。分岐フラグ値104は分岐がテイクンになる場合のフラグ値である。
【００５６】
命令アドレス６による検索の際には，条件再判定ビット101，条件未確定ビット102，及び分岐ビット103の論理和をとって有効信号71として出力する。該論理を有効信号71として使用するために，プロセッサのリセット等で分岐バッファ20を初期化する際には該３ビットをクリアする。第１の実施例では分岐する場合のみ登録していたため本実施例の分岐ビット103に相当する信号を有効ビットとして使用することができた。本実施例では分岐ビット103がネゲートされていても条件再判定ビット101または条件未確定ビット102がアサートされていると，登録後の条件判定で分岐ビット103がアサートされる可能性があるのでそのエントリは有効であるとみなす必要がある。一方，３ビットともネゲートされると分岐ビット103がアサートされる可能性がなくなるのでそのエントリは無効としてよい。命令アドレス６による検索の結果一致信号54がアサートされると，該保持手段の分岐制御情報100〜104を読出し，分岐制御情報60として出力する。前述のように分岐バッファミスによって一致信号54が全てネゲートされた場合は，分岐制御情報60のうち条件再判定ビット101，条件未確定ビット102，及び分岐ビット103をネゲートして出力する。
【００５７】
登録後の条件判定動作では，条件再判定ビット101または条件未確定ビット102がアサートされている場合に連想指示105をアサートして関係フラグ番号100と更新フラグ番号15との比較を行い，一致した場合は条件確定106をアサートする。該条件確定106がアサートされると条件未確定ビット102をクリアし，分岐ビット103を更新する。分岐フラグ値104と更新フラグ値16とが一致すれば分岐，一致しなければ非分岐であるから，新しい分岐ビット103は分岐フラグ値104と更新フラグ値16との排他的論理和の否定である。
以上が本実施例の分岐バッファ20の動作である。
インクリメンタ21の動作は第１の実施例と同一である。
【００５８】
命令アドレスセレクタ22は，第１の実施例における命令アドレス６の他に非予測側命令アドレス62も選択する。分岐失敗信号63がアサートされたら，予測側と非予測側を入替えて再分岐するために，命令アドレス６として再分岐先命令アドレス64を，非予測側命令アドレス62として予測側命令アドレス65を選択する。分岐失敗信号63がアサートされずに分岐制御信号60の分岐ビット61がアサートされたら分岐テイクンであるから，命令アドレス６として分岐先命令アドレス32を，非予測側命令アドレス62として次命令アドレス31を選択する。両者ともアサートされなかったら分岐非テイクンであるから，命令アドレス６として次命令アドレス31を，非予測側命令アドレス62として分岐先命令アドレス32を選択する。分岐失敗信号63及び分岐ビット61が同時にアサートされた場合に分岐失敗信号63を優先するのは，こちらに対応する分岐の方が順序の早い分岐だからである。
【００５９】
第１の実施例における命令アドレスキュー23が単なるバッファであったのに対し，本実施例の命令アドレスキュー23は，命令フェッチ要求後の分岐条件判定機能と，分岐登録遅延及び分岐予測失敗の際の正しい方向への再分岐機能を有する。キューはシフトレジスタでもシフトしない普通のラッチやメモリでも構成できる。本実施例では普通のラッチで構成する。図20のように命令アドレスキュー23はポインタ80，連想部81，制御信号変換部82，制御部83，及びメモリ部84から成る。ポインタ80はキューの先頭91及び末尾90を指す。連想部81は命令フェッチ要求済みの命令アドレスを保持する。制御信号変換部82は分岐バッファ20用の分岐制御情報を命令アドレスキュー23用の分岐制御情報に変換し，制御部83は該変換後の分岐制御情報を保持する。メモリ部84は連想部81に保持した命令アドレスの次の命令アドレスのうち非予測側を保持する。予測側は命令フェッチ要求を行うので次のエントリの連想部81に保持される。尚，制御信号変換部82及び制御部83の動作は後から図22及び図23を用いて詳細に説明する。
【００６０】
命令アドレスキュー23への書込みは以下のように行う。まず，命令アドレスセレクタ22において選択した命令アドレス６を，連想部81のポインタ80の末尾90の指すエントリに書込む。次のサイクルに該命令アドレス６に対応する分岐制御情報60及び非予測側命令アドレス62が生成されるので，分岐制御情報60は制御信号変換部82で変換し，非予測側命令アドレス62はそのまま，それぞれ制御部83及びメモリ部84の末尾90の指すエントリに書込む。このように連想部81への書込みは他より１サイクル早いので，図のように末尾90は後続命令側に１エントリずらす。
【００６１】
命令アドレスキュー23においては，分岐バッファ20における登録後の条件判定と同様に，命令フェッチ要求後の条件判定を行う。分岐バッファ20の場合は命令フェッチ要求前であったので，条件判定結果を分岐ビット103に反映すれば処理は完了した。一方，命令アドレスキュー23の場合は命令フェッチ要求後であるから，条件判定結果が予測と異なる場合は直ちに正しい方向へ再分岐する必要がある。まず，制御部83において更新フラグ番号15が入力され，次のサイクルで更新フラグ値が入力されると条件判定を行い，その結果分岐予測失敗が検出されると分岐失敗63及び先頭失敗94をアサートする。先頭失敗94の指すエントリの連想部81及びメモリ部84にそれぞれ予測側及び非予測側命令アドレスが保持されているので，これを読出して予測側命令アドレス65及び再分岐先命令アドレス64とする。尚，先頭失敗94は連想部81においては予測失敗であった分岐の予測側命令アドレスを指すために末尾90と同様に後続命令側に１エントリずらす。
【００６２】
分岐バッファの登録遅延に対応するために，分岐バッファ登録時に命令アドレスキュー23の連想部81の，制御部からの有効信号92のアサートされているエントリの命令アドレスを分岐登録情報10の分岐元命令アドレス51’で検索し，ヒット93がアサートされたら以下の処理を行う。まず，分岐登録情報10の分岐制御情報70’を制御信号変換部82で変換して制御部83へ，分岐先命令アドレス52’はそのままメモリ部84へ，それぞれヒット93の指すエントリに書込む。さらに，分岐登録情報10の分岐ビットがアサートされている場合は，登録遅延によって分岐すべきところを分岐しなかったことになるので，分岐失敗63，先頭失敗94，及び登録遅延先行95をアサートする。そして，前述の分岐予測失敗の場合と同様に先頭失敗94の指すエントリの連想部81を読出して予測側命令アドレス65とする。再分岐先命令アドレス64は登録遅延先行95によって分岐先命令アドレス52’が選択される。
【００６３】
図22に制御信号変換部82の詳細を示す。命令アドレスキュー23の制御部83及びメモリ部84への書込みは分岐バッファ出力に基づく分岐バッファ系と分岐登録情報10に基づく登録系の２通あり，これに対応して制御信号変換部82には２つの変換論理があり，分岐バッファ制御情報60，70’がそれぞれ命令キュー制御情報112，113に変換される。命令アドレスキュー23に書込まれる命令アドレスを分岐元アドレスとする分岐の分岐先命令フェッチ要求は既に発行されているため，分岐ビット103及び分岐フラグ値104は不要であり，代りに分岐予測の成功／失敗を判定するために分岐成功フラグ値111が必要となる。但し，分岐バッファ登録遅延の際には分岐登録情報10の分岐ビットのアサートが登録遅延による分岐失敗を示すので，登録系の出力には分岐ビット114も付加する。分岐ビット103がアサートされている場合は分岐フラグ値104と分岐成功フラグ値111は一致し，分岐ビット103がネゲートされている場合は分岐フラグ値104と分岐成功フラグ値111は一致しないので，分岐成功フラグ値111は分岐ビット103及び分岐フラグ値104の排他的論理和の否定である。
【００６４】
図23は命令アドレスキュー23の制御部83の１エントリの詳細である。命令アドレスキュー制御情報として有効ビット110，関係フラグ番号100，条件再判定ビット101，条件未確定ビット102，及び分岐成功フラグ値111の保持手段を有する。斜線は横からの制御信号に対するポートがないことを示す。
【００６５】
命令アドレスキュー23への書込みの際に，ポインタ80からの末尾90がアサートされて書込みエントリに指定されると，命令アドレスキュー制御情報112を該保持手段に保持する。
【００６６】
また，命令フェッチ要求後の条件判定のために，条件再判定ビット101または条件未確定ビット102がアサートされている場合に連想指示105をアサートして関係フラグ番号100と更新フラグ番号15との比較を行い，一致した場合は条件確定106をアサートする。該条件確定106がアサートされると条件未確定ビット102をクリアし，分岐成功フラグ値111を更新フラグ値16に更新する。分岐予測は分岐成功フラグ値111と更新フラグ値16とが一致すれば成功，一致しなければ失敗である。条件確定106がアサートされて分岐予測が失敗であった場合は予測失敗115をアサートする。
【００６７】
また，登録遅延検出のために，有効ビット110を有効信号92として連想部81に出力し，検索の結果ヒット93がアサートされたら，命令アドレスキュー制御情報113を該保持手段に保持する。さらに，分岐ビット114がアサートされていたら登録遅延116をアサートする。
【００６８】
予測失敗115または登録遅延116がアサートされると分岐失敗であるから分岐失敗117をアサートする。そして，前エントリからの先行分岐失敗118がネゲートされていてたら最初の分岐失敗であるから，先頭分岐失敗94をアサートする。また，次エントリへの先行分岐失敗118’として分岐失敗117と先行分岐失敗118との論理和を末尾90でマスクした値を出力する。末尾90でマスクするのは，キューがシフトレジスタになっていないためにエントリをラップアラウンドさせた上で末尾90で切って順序関係を保っているためである。該先行分岐失敗118’は次エントリの先行分岐失敗118に接続される。最上段エントリの先行分岐失敗118’は先行分岐失敗118”を介してラップアラウンドし最下段の先行分岐失敗118に接続される。さらに，分岐失敗117と前エントリからの分岐失敗63との論理和をとって新たな分岐失敗63’として次エントリへ出力する。そして，最上段エントリからの分岐失敗63’は制御部83出力の分岐失敗63となる。また，登録遅延116がアサートされて前エントリからの先行分岐失敗118がネゲートされていてたら最初の分岐失敗が登録遅延によるものであるから前エントリからの登録遅延先行95との論理和をとって新たな登録遅延先行95’として次エントリへ出力する。そして，最上段エントリからの登録遅延先行95’は制御部83出力の登録遅延先行95となる。尚，登録遅延先行95’は予測失敗115によってマスクしていないので予測失敗115及び登録遅延116が同時に発生した場合は登録遅延116が優先される。このケースは，登録遅延によって本来上書きによって消滅しているはずの分岐が残っていて予測失敗が発生したことを意味し，登録遅延116を優先すれば正しく動作する。ちなみに，登録がさらに遅れた場合は誤って予測失敗が発生してしまうけれども，その後登録遅延による再分岐が発生して正しく動作する。
以上が本実施例の命令アドレスキュー23の動作である。
【００６９】
図24は本発明の第２の実施例のパイプライン例及び信号タイミングである。本例でも図16と同様に命令フェッチは２サイクルかかるものとする。分岐登録命令の３サイクル後に対応する分岐元兼関係フラグ更新命令を実行し，引続き分岐先命令を３サイクル分開始し，該分岐登録命令の分岐予測が誤っていて，該３サイクル分の分岐先命令をキャンセルし，非分岐側命令を実行している。
【００７０】
分岐登録命令の命令アドレス６が出力されると，２サイクル後に命令７が到着し，その１サイクル後に分岐登録情報10が出力される。分岐登録情報10と同一サイクルに分岐元兼関係フラグ更新命令の命令アドレス６が出力され，次のサイクルで分岐登録情報10の分岐元命令アドレス51’で命令アドレスキュー23が検索されて該分岐元兼関係フラグ更新命令の命令アドレス６にヒットし，分岐失敗63及び登録遅延95がアサートされる。この結果次の命令アドレス６として分岐登録情報10の分岐先命令アドレス52’が選択される。その後２サイクルは分岐バッファ20にヒットせずに分岐ビット61がネゲートされるため，命令アドレス６として次命令アドレス31が選択される。分岐元兼関係フラグ更新命令のの命令アドレス６の２サイクル後に対応する命令７が到着し，その１サイクル後に命令実行制御情報９及び更新フラグ番号15が出力される。さらに次のサイクルで更新フラグ番号16が確定すると，命令アドレスキュー23において命令フェッチ要求後の条件判定が行われ分岐失敗63がアサートされる。この時，分岐先の３サイクル目の命令が分岐元命令であるため，分岐ビット61がアサートされる。前述のように，分岐失敗63をアサートした分岐の方が順序が早いのでこちらが優先される。すなわち，命令アドレス６として非予測側命令アドレス96が選択される。そして，３サイクル分の分岐先命令はキャンセルされ，非分岐側命令がフェッチ，デコードされて，実行される。
【００７１】
以上のように本発明の第２の実施例では，対応する分岐元命令の命令フェッチサイクル＋１サイクル（図24の例では３サイクル）前までに分岐登録命令を発行すれば０サイクルで分岐できる。第１の実施例より１サイクル遅くて良い理由は，登録遅延時に直ちに正しい方向へ分岐する機構があるからである。
【００７２】
図25は本実施例の32ビット固定命令長の分岐登録命令のフォーマットの第１の例である。第１の実施例よりも本実施例では分岐制御情報を余分に指定するため，図のように分岐元及び分岐先フィールドを図17の場合より短くする必要がある。図26は本実施例の32ビット固定命令長の分岐登録命令のフォーマットの第２の例である。第１の実施例の図18と同様に複数命令で登録する。
【００７３】
図27は本発明の分岐高速化方式を適用したプロセッサの第３の実施例である。本発明の第２の実施例では分岐条件判定に一般的な条件分岐命令の方式を採用している。すなわち，比較命令等によってフラグ値を変化させ，該フラグ値に基づいて分岐／非分岐を決定する。フラグが複数ある場合はフラグ番号を指定する。この方式には以下のような利点がある。まず，１つのフラグ値を複数の分岐の条件判定に使用することができる。また，同一のフラグ値に対して分岐ごとに分岐／非分岐を設定できる。しかし，本発明にこの分岐条件判定方式を適用すると第２の実施例のようにハードウェア量が大きくなってしまう。本発明の第３の実施例は，分岐条件判定にフラグを用いずに，１つの分岐に１つの比較または検査命令を対応させて，第２の実施例で必要だった関係フラグ番号，分岐フラグ値，及び分岐成功フラグ値を不要とし，第２の実施例よりもハードウェア量を削減した例である。
【００７４】
第２の実施例と第３の実施例の構成は類似しているので，異なる点のみ説明する。図19の第２の実施例で命令デコード部３から命令アドレス部２に出力していた更新フラグ番号15の代りに，図27の第３の実施例では分岐判定エントリ番号17を出力する。また，第２の実施例で命令実行部４から命令アドレス部２に出力していた更新フラグ値16の代りに，第３の実施例では分岐指示11を出力する。これらの信号はいずれも分岐条件判定命令に関わるものである。第３の実施例において，分岐条件判定命令がデコードされると分岐バッファに登録された対応するエントリを指定するために分岐判定エントリ番号17を出力する。そして，命令実行部４において分岐判定を行い分岐指示11を出力する。
【００７５】
次に，命令アドレス部２の詳細な構成について説明する。図28は本発明の第３の実施例の命令アドレス部２である。本命令アドレス部２も第２の実施例の命令アドレス部２と類似しているので，異なる点のみ説明する。
【００７６】
本実施例の分岐バッファ20は図20の第２の実施例と制御部44が異なる。第２の実施例で制御部44に入力していた更新フラグ番号15及び更新フラグ値16の代りに，分岐判定エントリ番号17及び分岐指示11を入力する。また，本実施例ではエントリ番号を登録以外の各動作でも使用するためデコーダ40を制御部44に含め，エントリ番号50を分岐制御情報70に含めた。制御部44の動作を除けば分岐バッファ20の動作は第２の実施例と同様である。制御部44は第２の実施例に比べて大幅に簡素化される。該制御部の動作は図29を用いて説明する。
【００７７】
図29は分岐バッファ20の制御部44の詳細である。分岐制御情報として分岐ビット103及び有効ビット120の保持手段を有する。第２の実施例で必要だった関係フラグ番号100，条件再判定ビット101，及び条件未確定ビット102は，分岐判定を行うエントリをエントリ番号で直接指定するので不要である。また，分岐フラグ値104も，更新フラグ値16の代りに分岐指示11を使用するので不要である。エントリ登録の際には登録エントリ番号デコーダ121において分岐制御情報70のエントリ番号をデコードして指定エントリの登録信号53をアサートし，分岐制御情報70の分岐ビット103を該保持手段に保持し，有効ビット120を立てる。また，命令アドレス６による検索の際には有効ビット120を有効信号71として出力し，検索の結果ヒット54がアサートされると分岐ビット103を読出し，ヒットエントリ番号エンコーダによってエンコードされたヒットエントリ番号と共に分岐制御情報60として出力する。尚，エントリ番号の一つを存在しないエントリに割当てておき，分岐バッファミスの場合には分岐制御情報60として分岐ビットをネゲートし，エントリ番号を該存在しないエントリとする。登録後の条件判定動作の際に，分岐判定エントリ番号17が入力されると分岐判定エントリ番号デコーダでデコードし，その結果分岐判定エントリに指定されたエントリの分岐ビット103を分岐指示11の値で置換える。
【００７８】
本実施例の命令アドレスキュー23は図20と比較すると制御信号変換部82がなく，制御部83が異なる。第２の実施例で制御部83に入力していた更新フラグ番号15及び更新フラグ値16の代りに分岐判定エントリ番号17及び分岐指示11を入力する。他の部分の動作は第２の実施例と同様である。制御部83の動作は図30を用いて説明する。
【００７９】
図30は命令アドレスキュー23の制御部83の１エントリの詳細である。本制御部83は分岐バッファ20の制御部44ほど大幅には簡素化されない。命令アドレスキュー制御情報として，有効ビット110，エントリ番号130，及び分岐ビット103の保持手段を有する。
【００８０】
命令アドレスキュー23への書込みの際に，ポインタ80からの末尾90がアサートされて書込みエントリに指定されると，有効ビット110を立て，分岐制御情報60を該保持手段に保持する。
【００８１】
また，命令フェッチ要求後の条件判定のために，エントリ番号130と分岐指示11との比較を行い，一致した場合は条件確定106をアサートする。該条件確定106がアサートされると分岐ビット103を分岐指示11に更新する。分岐予測は分岐ビット103と分岐指示11とが一致すれば成功，一致しなければ失敗である。条件確定106がアサートされて分岐予測が失敗であった場合は予測失敗115をアサートする。
【００８２】
また，登録遅延検出のために，有効ビット110を有効信号92として連想部81に出力し，検索の結果ヒット93がアサートされたら，分岐制御情報70’を該保持手段に保持する。さらに，分岐制御情報70’の分岐ビットがアサートされていたら登録遅延116をアサートする。
予測失敗115または登録遅延116がアサートされた場合の動作は図23と同様である。
【００８３】
本実施例は，同時に複数の分岐の分岐判定ができないことを除けば第２の実施例と同等の機能を有するので，プログラムステップ数が増加することはあるけれども見かけ上の性能は第２の実施例と同等である。
【００８４】
図31は本発明の分岐高速化方式を適用したプロセッサの第４の実施例の命令アドレス部2である。尚，プロセッサ全体の構成は第２の実施例と同一である。多数の命令を並列実行できるプロセッサの場合ほぼ毎サイクル分岐が発生する。分岐登録を数サイクル先行させた場合その後の命令実行シーケンスによって登録しても実行されない分岐命令がある。すなわち，登録する分岐命令は実行する分岐命令より多い。したがって，１回の分岐登録に対して１回の分岐という最悪のケースでは１サイクルに１分岐の登録では登録がネックとなってしまう。本実施例はこのようなケースでも分岐登録がネックとならないように対策した例である。具体的には分岐バッファをバンク分けして１サイクルに複数の分岐登録を行えるようにする。これに対応して，分岐登録命令も１命令で複数の分岐登録を行えるようにする。
【００８５】
また，平均命令フェッチサイクルが長い場合，分岐予測失敗によるペナルティが大きい。本実施例では該ペナルティを削減するために，非予測側命令のフェッチを可能にした。具体的には，命令フェッチ幅を広げて予測側と非予測側を交互にフェッチしても命令供給能力が十分であるようにし，命令アドレスキューも予測側と非予測側の２組用意する。そして，予測失敗時に非予測側から命令を供給することによりペナルティを削減する。
【００８６】
次に図31の説明を行う。本命令アドレス部は第２の実施例と同様に分岐バッファ20，インクリメンタ21，命令アドレスセレクタ22，及び命令アドレスキュー23から成る。
【００８７】
分岐バッファ20は図20の第２の実施例の分岐バッファ20を２バンク持たせた構成である。バンクの異なるエントリは異なるエントリ番号を持つ。そして，バンクの異なるエントリには同時に登録できる。また，バンクが異なっても２つのエントリに同時にヒットすることはないものとする。同時にヒットするということは，一つの命令アドレスに対する分岐先または分岐条件が複数あるか，同一の分岐が２エントリに登録されていることを意味する。このうち一つの命令アドレスに対する分岐先が複数ある場合は命令フェッチ要求時に分岐条件の確定していない多方向分岐に対応し，サポートすればプロセッサの性能向上に寄与する。しかし，該多方向分岐のサポートはハードウェア量の増大を招き，現状のハードウェアでも命令フェッチ要求時に分岐条件の確定している多方向分岐はサポートできるので，本実施例ではサポートしない。したがって，本実施例では読出し時に出力セレクタ24及び25によって各バンク出力の中からヒットバンクを選択して，分岐制御情報60及び分岐先アドレス32とする。
【００８８】
インクリメンタ21の命令アドレス６の入力ポートに命令アドレスラッチ26及びセレクタ27を付加し，命令アドレス６を１サイクル保持できるようにして，予測側と非予測側の２つのアドレス系列を交互にフェッチできるようにする。また，予測失敗や登録遅延時に直ちにアドレス系列を切替えられるようにセレクタ27を通して１サイクル保持していない命令アドレス６も入力できるようにする。
【００８９】
命令アドレスセレクタ22は分岐失敗を予測側と非予測側のどちらの命令アドレスキュー23で検出しても正しい方向への再分岐処理ができるように，各キューからの再分岐命令アドレス64及び64’を命令アドレス６のセレクタに入力し，予測側アドレス65及び65’を非予測側命令アドレス62のセレクタに入力して，予測失敗63及び63’によって選択できるような構成になっている。
【００９０】
複数の分岐登録を同時に実行する最も単純な方式は，複数の分岐登録命令を同時に実行することである。あるいは，プログラム中にデータとして複数の分岐登録情報を格納しておき，プログラムカウンタ相対でフェッチして分岐バッファに登録してもよい。尚，複数の分岐登録を同時に実行する場合，分岐元及び分岐先アドレスをプログラムカウンタ相対で指定すると，アドレス計算のための加算器が多数必要になり，ハードウェアの増大を招く。そこで，プログラムのポータビリティは若干損われるけれども，命令でアドレスの下位ビットを指定しプログラムカウンタの上位ビットと結合するようにすれば，加算器が不要となる。
以上が本発明の第４の実施例である。
【００９１】
分岐バッファの利点は分岐元アドレスが確定した時点で通常より早めに分岐先の情報が得られる点にある。従来の分岐バッファは分岐先の情報として分岐先命令アドレスのみを保持していた。しかし，早めに欲しい情報は他にもあり，バッファ容量の増加という費用に対して十分な効果があれば，欲しい情報を分岐バッファに書込んでおくことは性能向上策として有効である。
【００９２】
例えば，分岐登録命令で分岐先命令列の依存関係を登録しておけば，スーパースカラ方式の高速化のネックとなっている命令依存関係解析のうち，静的に解析できる部分をあらかじめ済ましておくことができる。
【００９３】
【発明の効果】
本発明によれば、分岐を100％分岐バッファで行うことができるようになり，分岐処理が高速化される。特に，分岐間隔サイクルが短く，平均命令フェッチサイクルが長い場合に効果が大きい。
また，分岐命令が不要になるので，従来の分岐処理用のハードウェアを削減できる。分岐処理信号は通常クリティカルパスになるので，分岐バッファ方式と従来方式の併用に伴って必要となるマルチプレクサを削減できることはクリティカルパス対策にもなる。
本発明は，従来困難であった可変長命令セットの分岐高速化にも有効である。
【図面の簡単な説明】
【図１】従来の高速化されない条件分岐を含む命令処理パイプラインの説明図。
【図２】従来の５命令並列実行可能なプロセッサにおける高速化されない条件分岐を含む命令処理パイプラインの説明図。
【図３】従来のPowerPC 601の分岐高速化方式をスカラプロセッサに適用した場合の説明図。
【図４】従来のPowerPC 601の分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合の説明図。
【図５】従来のPowerPC 604及びPowerPC 620の分岐高速化方式をスカラプロセッサに適用した場合の説明図。
【図６】従来のPowerPC 604及びPowerPC 620の分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合の説明図。
【図７】従来のAdvanced Scientific Computerの分岐高速化方式をスカラプロセッサに適用した場合の説明図。
【図８】従来のAdvanced Scientific Computerの分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合の説明図。
【図９】従来のPIPE Processorの分岐高速化方式をスカラプロセッサに適用した場合の説明図。
【図１０】従来のPIPE Processorの分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合の説明図。
【図１１】各分岐高速化方式の１分岐処理と４命令の実行サイクルの説明図。
【図１２】命令フェッチにｎサイクルかかる場合の各分岐高速化方式の１分岐処理と４命令の実行サイクルの説明図。
【図１３】  PowerPC 604及びPowerPC 620の分岐高速化方式を５命令並列実行可能なプロセッサに適用した場合の分岐１命令を含む５命令の実行サイクル数のBTACヒット率依存性の説明図。
【図１４】本発明の分岐高速化方式を適用したプロセッサの第１の実施例を示す図。
【図１５】本発明の第１の実施例の命令アドレス部を示す図。
【図１６】本発明の第１の実施例のパイプライン例及び信号タイミングを示す図。
【図１７】本発明の第１の実施例の32ビット固定命令長の分岐登録命令のフォーマットの第１の例を示す図。
【図１８】本発明の第１の実施例の32ビット固定命令長の分岐登録命令のフォーマットの第２の例を示す図。
【図１９】本発明の分岐高速化方式を適用したプロセッサの第２の実施例を示す図。
【図２０】本発明の第２の実施例の命令アドレス部を示す図。
【図２１】本発明の第２の実施例の分岐バッファの制御部の１エントリを示す図。
【図２２】本発明の第２の実施例の命令アドレスキュー制御信号変換部を示す図。
【図２３】本発明の第２の実施例の命令アドレスキュー制御部の１エントリを示す図。
【図２４】本発明の第２の実施例のパイプライン例及び信号タイミングを示す図。
【図２５】本発明の第２の実施例の32ビット固定命令長の分岐登録命令のフォーマットの第１の例を示す図。
【図２６】本発明の第２の実施例の32ビット固定命令長の分岐登録命令のフォーマットの第２の例を示す図。
【図２７】本発明の分岐高速化方式を適用したプロセッサの第３の実施例を示す図。
【図２８】本発明の第３の実施例の命令アドレス部を示す図。
【図２９】本発明の第３の実施例の分岐バッファの制御部を示す図。
【図３０】本発明の第３の実施例の命令アドレスキュー制御部の１エントリを示す図。
【図３１】本発明の分岐高速化方式を適用したプロセッサの第４の実施例を示す図。
【符号の説明】
１…プロセッサのCPUコア、２…命令アドレス部、３…命令デコード部、４…命令実行部、５…メモリ、６…命令アドレス、７…命令、８…プログラムカウンタ、９…命令実行制御情報、10…分岐登録情報、11…分岐指示、12…分岐先アドレス、13…アドレス、14…データ。
【図１】
0003765111.tif 000002
【図２】
0003765111.tif 000003
【図３】
0003765111.tif 000004
【図４】
0003765111.tif 000005
【図５】
0003765111.tif 000006
【図６】
0003765111.tif 000007
【図７】
0003765111.tif 000008
【図８】
0003765111.tif 000009
【図９】
0003765111.tif 000010
【図１０】
0003765111.tif 000011
【図１１】
0003765111.tif 000012
【図１２】
0003765111.tif 000013
【図１３】
0003765111.tif 000014
【図１４】
0003765111.tif 000015
【図１５】
0003765111.tif 000016
【図１６】
0003765111.tif 000017
【図１７】
0003765111.tif 000018
【図１８】
0003765111.tif 000019
【図１９】
0003765111.tif 000020
【図２０】
0003765111.tif 000021
【図２１】
0003765111.tif 000022
【図２２】
0003765111.tif 000023
【図２３】
0003765111.tif 000024
【図２４】
0003765111.tif 000025
【図２５】
0003765111.tif 000026
【図２６】
0003765111.tif 000027
【図２７】
0003765111.tif 000028
【図２８】
0003765111.tif 000029
【図２９】
0003765111.tif 000030
【図３０】
0003765111.tif 000031
【図３１】
0003765111.tif 000032