(57)【要約】【課題】  パイプライン方式のプロセッサにおいて複数ワードからなる分岐命令の分岐予測を高速に行う。【解決手段】  複数ワードからなる分岐命令の一部がフェッチされた段階で分岐予測が行われる。ブランチターゲットバッファ（ＢＴＢ）などにより分岐予測情報が得られると、分岐命令の残部をフェッチすることなく、予測された分岐先の命令がフェッチされる。これにより、分岐予測が成功する限り複数ワードからなる分岐命令を１ワードの実行サイクルで処理させる。分岐予測が失敗した場合のペナルティは１ワードからなる分岐命令の場合と同様となる。【選択図】      図８
2006235723.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムに含まれる各命令の取得を制御する命令取得制御手段と、
前記命令が複数語からなる分岐命令である場合には当該分岐命令の一部の語のみが取得された際に当該分岐命令に関する分岐予測情報を生成する分岐予測手段とを具備し、
前記命令取得制御手段は、前記複数語からなる分岐命令の前記一部の語のみが取得された直後は前記分岐予測情報に従った命令を取得させることを特徴とする命令取得制御回路。
【請求項２】
前記分岐予測情報は、予測される分岐発生の有無および分岐が発生する場合に予測される分岐先アドレスを含むことを特徴とする請求項１記載の命令取得制御回路。
【請求項３】
前記命令取得制御手段は、前記分岐予測情報において分岐発生がないと予測された場合には前記複数語からなる分岐命令の残りの語を取得させずに当該分岐命令の後続命令を取得させることを特徴とする請求項２記載の命令取得制御回路。
【請求項４】
前記分岐予測手段は、各分岐命令に対応して当該分岐命令の命令アドレスを保持する分岐命令アドレスレジスタと、当該分岐命令の予測される分岐先アドレスを保持する分岐先アドレスレジスタと、当該分岐命令の予測される分岐発生の有無を保持する分岐方向レジスタと、前記複数語からなる分岐命令の命令アドレスと前記分岐命令アドレスレジスタに保持された命令アドレスとの一致を検出する検出器を備え、前記一致が検出された場合にはその命令アドレスに対応する分岐先アドレスおよび分岐発生の有無を前記分岐先アドレスレジスタおよび前記分岐方向レジスタからそれぞれ読み出して前記分岐予測情報として出力することを特徴とする請求項１記載の命令取得制御回路。
【請求項５】
前記命令取得制御手段は、前記一致が検出された場合において分岐発生がないと予測された際には前記複数語からなる分岐命令の残りの語を取得させずに当該分岐命令の後続命令を取得させることを特徴とする請求項４記載の命令取得制御回路。
【請求項６】
前記命令取得制御手段は、前記一致が検出されなかった場合においては前記複数語からなる分岐命令の残りの語を取得させることを特徴とする請求項４記載の命令取得制御回路。
【請求項７】
コンピュータプログラムに含まれる各命令を取得する命令取得手段と、
前記命令取得手段における前記命令の取得を制御する命令取得制御手段と、
前記命令が複数語からなる分岐命令である場合には当該分岐命令の一部の語のみが取得された際に当該分岐命令に関する分岐予測情報を生成する分岐予測手段とを具備し、
前記命令取得制御手段は、前記複数語からなる分岐命令の前記一部の語のみが取得された直後は前記分岐予測情報に従った命令を命令取得手段に取得させることを特徴とする命令取得回路。
【請求項８】
コンピュータプログラムに含まれる各命令を取得する命令取得手段と、
前記命令取得手段において取得された命令を実行する命令実行手段と、
前記命令取得手段における前記命令の取得を制御する命令取得制御手段と、
前記命令が複数語からなる分岐命令である場合には当該分岐命令の一部の語のみが取得された際に当該分岐命令に関する分岐予測情報を生成する分岐予測手段とを具備し、
前記命令取得制御手段は、前記複数語からなる分岐命令の前記一部の語のみが取得された直後は前記分岐予測情報に従った命令を命令取得手段に取得させることを特徴とするプロセッサ。
【請求項９】
コンピュータプログラムに含まれる各命令を保持する命令メモリと、
前記命令メモリから前記命令を取得する命令取得手段と、
前記命令取得手段において取得された命令を実行する命令実行手段と、
前記命令取得手段における前記命令の取得を制御する命令取得制御手段と、
前記命令が複数語からなる分岐命令である場合には当該分岐命令の一部の語のみが取得された際に当該分岐命令に関する分岐予測情報を生成する分岐予測手段とを具備し、
前記命令取得制御手段は、前記複数語からなる分岐命令の前記一部の語のみが取得された直後は前記分岐予測情報に従った命令を命令取得手段に取得させることを特徴とするコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令フェッチ回路に関し、特にコンピュータプログラムに含まれる各命令をフェッチ（取得）するための命令フェッチ回路、命令フェッチ制御回路、プロセッサおよびコンピュータシステムに関する。
【背景技術】
【０００２】
パイプライン方式のプロセッサでは、必要な処理を複数の段階（ステージ）に区切った命令パイプラインに対して、コンピュータプログラムに含まれる各命令を次々と投入することにより、各ステージにおける処理をオーバラップさせて性能を向上させている。従って、各命令が連続して命令パイプラインに投入されている状態であればその性能を発揮するが、分岐命令などにより命令の流れが乱れてしまうと本来の性能を発揮できなくなるおそれが生じる。
【０００３】
そこで、分岐命令の処理を高速化するため、分岐先アドレスを予測して後続命令を命令パイプラインに投入する分岐予測手法が採用されている。この分岐予測手法としては、分岐命令のフィールド内に分岐予測に関する情報を埋め込んでおく静的な手法（例えば、特許文献１参照。）や、分岐命令に対応して予測された分岐先アドレスを保持しておいて動的に分岐予測を行う手法（例えば、特許文献２参照。）などが提案されている。
【特許文献１】特開平８−２７２６１０号公報（図１）
【特許文献２】特開平８−２３４９８０号公報（図３）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
このような分岐予測手法により分岐命令の高速化が図られるが、複数語（語：ワード、例えば１ワード３２ビット）からなる分岐命令の場合には以下のような問題が生じる。近年のメモリの大容量化に伴い、アドレス空間は例えば１ワードの命令コードサイズと同等のビット幅を有するようになっている。従って、分岐命令においてアドレス空間を即値指定しようとした場合、他の命令サイズと同様の１ワードの分岐命令ではメモリの全空間を網羅することは困難である。そのため、通常の分岐命令では、分岐先を汎用レジスタやアキュームレータに保持しておいてそれらを命令コードまたは８ビット程度のオペランドで指定する方式や、現在のプログラムカウンタに対する８ビット程度の相対アドレスを即値として命令コードに収める方式が一般的に採用されている。
【０００５】
しかしながら、前者のように汎用レジスタやアキュームレータを用いた場合にはハードウェアリソースを消費してしまう上、そのハードウェアリソースへ書き込むための命令がさらに必要となってしまう。また、後者のように相対アドレスを用いた場合には相対アドレスから絶対アドレスへ変換するための演算が必要となる上、現在のプログラムカウンタから制限された範囲でしか分岐できず、アドレス空間全体に渡っての分岐は不可能となる。特に、ＤＳＰ（デジタル信号処理プロセッサ）などでは汎用レジスタにアドレスを保持させることを想定しないアーキテクチャを有することが多く、絶対アドレスの即値指定によりアドレスの全空間を指定できることが望まれる。
【０００６】
一方、即値指定を分岐命令に含めた命令セットアーキテクチャを想定すると、分岐命令にアドレスを指定するフィールドが追加となるため、分岐命令の命令サイズは通常の１ワード命令の２乃至３倍になり得る。この複数ワードからなる分岐命令は遅延スロットのように働き、パイプラインフラッシュの数を遮蔽するなどの効果はあるものの、ループの内部においては分岐命令の命令フェッチが繰り返し実行され、処理のスループットを下げるおそれがある。
【０００７】
そこで、本発明は、パイプライン方式のプロセッサにおいて複数ワードからなる分岐命令の分岐予測を高速に行うことを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、コンピュータプログラムに含まれる各命令の取得を制御する命令取得制御手段と、上記命令が複数語からなる分岐命令である場合には当該分岐命令の一部の語のみが取得された際に当該分岐命令に関する分岐予測情報を生成する分岐予測手段とを具備し、上記命令取得制御手段は、上記複数語からなる分岐命令の上記一部の語のみが取得された直後は上記分岐予測情報に従った命令を取得させることを特徴とする命令取得制御回路である。これにより、分岐命令の一部の語のみが取得された段階で、分岐命令の残部を取得することなく、分岐予測情報に従った命令を取得させるという作用をもたらす。
【０００９】
また、この第１の側面において、上記分岐予測情報は、予測される分岐発生の有無および分岐が発生する場合に予測される分岐先アドレスを含むものとすることができる。この場合、上記命令取得制御手段は、上記分岐予測情報において分岐発生がないと予測された場合には上記複数語からなる分岐命令の残りの語を取得させずに当該分岐命令の後続命令を取得させるという作用をもたらす。
【００１０】
また、この第１の側面において、上記分岐予測手段は、各分岐命令に対応して当該分岐命令の命令アドレスを保持する分岐命令アドレスレジスタと、当該分岐命令の予測される分岐先アドレスを保持する分岐先アドレスレジスタと、当該分岐命令の予測される分岐発生の有無を保持する分岐方向レジスタと、上記複数語からなる分岐命令の命令アドレスと上記分岐命令アドレスレジスタに保持された命令アドレスとの一致を検出する検出器を備え、上記一致が検出された場合にはその命令アドレスに対応する分岐先アドレスおよび分岐発生の有無を上記分岐先アドレスレジスタおよび上記分岐方向レジスタからそれぞれ読み出して上記分岐予測情報として出力するものとすることができる。この場合、上記命令取得制御手段は、上記一致が検出された場合において分岐発生がないと予測された際には上記複数語からなる分岐命令の残りの語を取得させずに当該分岐命令の後続命令を取得させ、また、上記一致が検出されなかった場合においては上記複数語からなる分岐命令の残りの語を取得させるという作用をもたらす。
【００１１】
また、本発明の第２の側面は、コンピュータプログラムに含まれる各命令を取得する命令取得手段と、上記命令取得手段における上記命令の取得を制御する命令取得制御手段と、上記命令が複数語からなる分岐命令である場合には当該分岐命令の一部の語のみが取得された際に当該分岐命令に関する分岐予測情報を生成する分岐予測手段とを具備し、上記命令取得制御手段は、上記複数語からなる分岐命令の上記一部の語のみが取得された直後は上記分岐予測情報に従った命令を命令取得手段に取得させることを特徴とする命令取得回路である。これにより、分岐命令の一部の語のみが取得された段階で、分岐命令の残部を取得することなく、分岐予測情報に従った命令を取得するという作用をもたらす。
【００１２】
また、本発明の第３の側面は、コンピュータプログラムに含まれる各命令を取得する命令取得手段と、上記命令取得手段において取得された命令を実行する命令実行手段と、上記命令取得手段における上記命令の取得を制御する命令取得制御手段と、上記命令が複数語からなる分岐命令である場合には当該分岐命令の一部の語のみが取得された際に当該分岐命令に関する分岐予測情報を生成する分岐予測手段とを具備し、上記命令取得制御手段は、上記複数語からなる分岐命令の上記一部の語のみが取得された直後は上記分岐予測情報に従った命令を命令取得手段に取得させることを特徴とするプロセッサである。これにより、分岐命令の一部の語のみが取得された段階で、分岐命令の残部を取得することなく、分岐予測情報に従った命令を取得して実行させるという作用をもたらす。
【００１３】
また、本発明の第４の側面は、コンピュータプログラムに含まれる各命令を保持する命令メモリと、上記命令メモリから上記命令を取得する命令取得手段と、上記命令取得手段において取得された命令を実行する命令実行手段と、上記命令取得手段における上記命令の取得を制御する命令取得制御手段と、上記命令が複数語からなる分岐命令である場合には当該分岐命令の一部の語のみが取得された際に当該分岐命令に関する分岐予測情報を生成する分岐予測手段とを具備し、上記命令取得制御手段は、上記複数語からなる分岐命令の上記一部の語のみが取得された直後は上記分岐予測情報に従った命令を命令取得手段に取得させることを特徴とするコンピュータシステムである。これにより、命令メモリから分岐命令の一部の語のみが取得された段階で、分岐命令の残部を取得することなく、分岐予測情報に従った命令を命令メモリから取得して実行させるという作用をもたらす。
【発明の効果】
【００１４】
本発明によれば、パイプライン方式のプロセッサにおいて複数ワードからなる分岐命令の分岐予測を高速に行うという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００１５】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００１６】
図１は、本発明の実施の形態におけるコンピュータシステムの一構成例を示す図である。本発明の実施の形態におけるコンピュータシステムは、プロセッサ２００とメモリ３００とを備える。メモリ３００はコンピュータプログラムを保持するものである。このメモリ３００はプロセッサ２００に内蔵されていてもよい。プロセッサ２００はメモリ３００からコンピュータプログラムを読み出して、そのコンピュータプログラムを実行するものである。プロセッサ２００は後述するように、命令パイプライン方式により構成されていることを想定する。
【００１７】
プロセッサ２００は、演算制御回路２１０と、命令フェッチ回路２３０と、分岐予測回路１００とを備えている。命令フェッチ回路２３０は、演算制御回路２１０の指示に従ってメモリ３００からコンピュータプログラム中の命令をフェッチ（取得）するものである。演算制御回路２１０は、命令フェッチ回路２３０によってフェッチされた命令をデコード（解読）して、その命令に応じた動作を行うものである。分岐予測回路１００は、分岐命令毎に分岐予測情報を保持して各分岐命令の分岐先を予測するためのものである。
【００１８】
演算制御回路２１０は、命令フェッチ回路２３０に対して信号線２１９によって命令アドレスを指定し、命令のフェッチを要求する。命令フェッチ回路２３０は、信号線２１９によって指定された命令アドレスにより、メモリ３００から信号線３９０を介して命令をフェッチする。命令フェッチ回路２３０は、メモリ３００からフェッチした命令を、信号線２３９により演算制御回路２１０に供給する。
【００１９】
演算制御回路２１０は、信号線２３９により供給された命令をデコードして、その命令に応じた動作を行う。例えば、演算命令であれば、演算対象となるオペランドをメモリ３００または（図示しない）レジスタなどから取得して、演算を行う。また、分岐命令であれば、分岐条件を判断してその判断結果に応じて次に実行すべき命令のアドレスを決定する。但し、分岐命令の次アドレスを決定するまでに通常は数クロック要するため、その間の命令パイプランのストールを避けるために、分岐予測回路１００によって分岐予測が行われる。
【００２０】
すなわち、演算制御回路２１０は、フェッチ対象の命令アドレスを信号線２１８によって分岐予測回路１００に与え、分岐予測回路１００から信号線１９１および１９２により供給された分岐予測情報に基づいて次にフェッチすべき命令のアドレスを決定する。また、演算制御回路２１０は、信号線２１１乃至２１３により分岐予測回路１００に対して分岐予測情報の登録更新の制御を行う。
【００２１】
図２は、本発明の実施の形態における分岐予測回路１００の一構成例を示す図である。この分岐予測回路１００は、Ｎ個（Ｎは整数）の分岐方向レジスタ１１０と、Ｎ個の分岐先アドレスレジスタ１２０と、Ｎ個の分岐命令アドレスレジスタ１３０と、Ｎ個の比較器１４０と、方向選択器１５０と、アドレス選択器１６０と、論理和回路１７０とを備えている。すなわち、分岐予測回路１００としては、いわゆるブランチターゲットバッファ（ＢＴＢ）と同様の回路構成を採用することができる。
【００２２】
分岐方向レジスタ１１０は、分岐予測情報として、対応する分岐命令が「分岐する」か「分岐しない」かの分岐方向の予測を保持するレジスタである。分岐先アドレスレジスタ１２０は、分岐予測情報として、対応する分岐命令の予測される分岐先アドレスを保持するレジスタである。分岐命令アドレスレジスタ１３０は、対応する分岐命令の命令アドレスを保持するレジスタである。比較器１４０は、信号線２１８から供給されるプログラムカウンタ（ＰＣ）の値と対応する分岐命令アドレスレジスタ１３０の内容とを比較して一致を検出する比較器である。
【００２３】
方向選択器１５０およびアドレス選択器１６０は、比較器１４０における比較結果に応じてそれぞれ分岐方向レジスタ１１０および分岐先アドレスレジスタ１２０の内容を選択して出力する選択器である。これら方向選択器１５０およびアドレス選択器１６０の出力はそれぞれ信号線１９１および１９２によって演算制御回路２１０に供給される。
【００２４】
論理和回路１７０は、Ｎ個の比較器１４０の出力の論理和を生成することにより、比較器１４０の何れかにおいてプログラムカウンタの値と分岐命令アドレスレジスタ１３０の内容との間で一致が検出されたことを知らせるものである。この論理和回路１７０の出力は信号線１９９によって演算制御回路２１０に供給される。
【００２５】
分岐方向レジスタ１１０、分岐先アドレスレジスタ１２０、分岐命令アドレスレジスタ１３０および比較器１４０は、それぞれＮ個設けられており、全体でＮ組のエントリを構成する。すなわち、ある分岐命令の命令アドレスがｉ組目（ｉは整数）の分岐命令アドレスレジスタ１３０に保持されたとすると、その分岐命令の予測分岐先アドレスはｉ組目の分岐先アドレスレジスタ１２０に保持され、その分岐命令の分岐方向はｉ組目の分岐方向レジスタ１１０に保持される。そして、プログラムカウンタの値との一致がｉ組目の比較器１４０によって検出されると、方向選択器１５０およびアドレス選択器１６０は、それぞれｉ組目の分岐方向レジスタ１１０および分岐先アドレスレジスタ１２０の内容を選択して分岐予測情報として出力する。
【００２６】
分岐方向レジスタ１１０への登録更新は信号線２１１を介した分岐方向更新信号により行われる。また、分岐先アドレスレジスタ１２０および分岐命令アドレスレジスタ１３０への登録更新は信号線２１３を介したアドレス更新信号のタイミングで行われ、それぞれ信号線２１２および２１８から供給される確定分岐先アドレスおよびプログラムカウンタの値がそれぞれ保持される。
【００２７】
図３は、本発明の実施の形態におけるプロセッサ２００の命令パイプライン構成例を示す図である。このプロセッサ２００は、命令フェッチステージ（ＩＦ：Instruction Fetch）５１０、命令デコードステージ（ＩＤ：Instruction Decode）５２０、データフェッチステージ（ＤＦ：Data Fetch）５３０および実行ステージ（ＥＸ：EXecution）５４０の４段の命令パイプラインからなるものと想定する。
【００２８】
命令フェッチステージ５１０は、メモリ３００からコンピュータプログラム中の命令をフェッチするステージである。この命令フェッチ処理は、図１の構成例における命令フェッチ回路２３０により実現される。また、この命令フェッチステージ５１０では、フェッチされた命令が分岐命令である場合、その分岐命令の分岐先の予測も行なわれる。この分岐予測処理は図１の構成例における分岐予測回路１００により実現される。
【００２９】
命令デコードステージ５２０は、命令フェッチステージ５１０においてフェッチされた命令をデコードして、その命令の示す処理内容を抽出するステージである。データフェッチステージ５３０は、命令フェッチステージ５１０において抽出されたオペランドに従って、必要なデータをメモリ３００や（図示しない）レジスタ等からフェッチするステージである。
【００３０】
また、実行ステージ５４０は、命令の指示する動作に従って処理を実行するステージである。この命令実行処理においては、データの読出しが必要な場合にはデータフェッチステージ５３０においてフェッチされたデータが利用され、また、生成されたデータの書込みが必要な場合にはメモリ３００や（図示しない）レジスタ等への書込みが行われる。また、分岐命令の分岐条件の判断についても、この実行ステージ５４０で行われる。なお、ここで説明した命令デコードステージ５２０、データフェッチステージ５３０および実行ステージ５４０における処理は、図１の構成例における演算制御回路２１０により実現される。
【００３１】
図４は、本発明の実施の形態における分岐命令の命令フォーマットの一例を示す図である。図４（ａ）は、本発明の実施の形態における無条件分岐命令の命令フォーマットの一例であり、第１ワード目にはオペコードフィールド６１１および未使用フィールド６１２が格納される。オペコードフィールド６１１には無条件分岐命令を示すオペコードが含まれる。この無条件分岐命令の命令フォーマットでは、オペコード６１１に続くフィールドは未使用フィールド６１２とされる。そして、第２ワード目として、分岐先アドレスフィールド６１３には、この無条件分岐命令の次に実行すべき命令のアドレスが即値として格納される。
【００３２】
図４（ｂ）は、本発明の実施の形態における条件分岐命令の命令フォーマットの一例であり、第１ワード目にはオペコードフィールド６２１および分岐条件フィールド６２２が格納される。オペコードフィールド６２１には条件分岐命令を示すオペコードが含まれる。このオペコードには静的分岐予測の情報等を含ませるようにしてもよい。また、分岐条件フィールド６２２には、この条件分岐命令の分岐条件が指定される。例えば、演算結果を示す状態コード（ＣＣ：Condition Code）の内容を分岐条件として指定することができる。そして、第２ワード目として、分岐先アドレスフィールド６２３には、分岐条件の判断の結果として「分岐する」こととなった場合に、次に実行すべき命令のアドレスが即値として格納される。なお、分岐条件の判断の結果として「分岐しない」こととなった場合には、その条件分岐命令の後続命令が次に実行される。
【００３３】
ここで説明した無条件分岐命令および条件分岐命令は、何れも２ワードからなる命令形式である。従って、１サイクルに１ワードずつ命令をフェッチした場合には、これら分岐命令を完全にフェッチするには２サイクルを要することになる。本発明の実施の形態においては、このような複数ワードからなる分岐命令をフェッチした場合、分岐命令を完全にフェッチする前に分岐予測を行い、後続命令を高速に実行する。
【００３４】
次に本発明の実施の形態における演算制御回路２１０の動作について図面を参照して説明する。
【００３５】
図５は、本発明の実施の形態における演算制御回路２１０の無条件分岐命令に対する処理例を示す流れ図である。まず、命令フェッチ回路２３０によって無条件分岐命令の一部、すなわち最初のワードがフェッチされると（ステップＳ９１１）、そのタイミングで分岐予測回路１００における分岐予測が行われる。これにより、分岐予測回路１００における分岐命令アドレスレジスタ１３０の何れかに、その無条件分岐命令の命令アドレスが登録されていれば（ヒット：ステップＳ９１２）、演算制御回路２１０は対応する予測分岐先アドレスにより次の命令をフェッチするよう命令フェッチ回路２３０に指示する（ステップＳ９２５）。
【００３６】
一方、分岐予測回路１００における分岐命令アドレスレジスタ１３０の何れにも、その無条件分岐命令の命令アドレスが登録されていなければ（ミスヒット：ステップＳ９１２）、演算制御回路２１０はその無条件分岐命令の残りの部分をフェッチするよう命令フェッチ回路２３０に指示する（ステップＳ９１３）。さらに次の命令として、分岐先の命令をフェッチすべきであるがこの時点では分岐先アドレスが確定していないため、命令パイプラインはストールする（ステップＳ９１５）。
【００３７】
無条件分岐命令の残りの部分から分岐先アドレスが判明すると、演算制御回路２１０は分岐予測回路１００に対して分岐予測情報の登録更新を指示する（ステップＳ９１６）。その後、無条件分岐命令の分岐が確定すると、演算制御回路２１０は先行してフェッチしていた無条件分岐命令の次の命令をフラッシュ（取消し）する（ステップＳ９１８）。そして、演算制御回路２１０は確定した分岐先の命令をフェッチするよう命令フェッチ回路２３０に指示する（ステップＳ９１９）。
【００３８】
図６は、本発明の実施の形態において無条件分岐命令が分岐予測回路１００でミスヒットした場合の処理例を示すタイムチャートである。まず、サイクルｔ１で無条件分岐命令の先頭ワードがフェッチされると、そのタイミングで分岐予測回路１００における分岐予測が行われる。ここではミスヒットしたことを想定するため、信号線１９９の分岐予測ヒット信号は非アクティブのままである。すると、次のサイクルｔ２では、無条件分岐命令の次のワードがフェッチされる。なお、ここでは無条件分岐命令は２ワードからなると想定する。
【００３９】
次のサイクルｔ３では、分岐先アドレスがまだ確定していないため命令パイプラインはストールする。また、このサイクルｔ３では、無条件分岐命令の分岐先アドレスが確定するため、分岐予測回路１００に対して信号線２１２により確定分岐先アドレスが供給されるとともに、信号線２１３によりアドレス更新指示がなされる。これにより、その無条件分岐命令が分岐予測回路１００に登録更新される。すなわち、「ＰＣ」番地が分岐命令アドレスレジスタ１３０のいずれかのエントリに登録され、「分岐先」番地が分岐先アドレスレジスタ１２０の同じエントリに登録され、分岐方向レジスタ１１０の同じエントリには「分岐する」旨の内容が登録される。
【００４０】
次のサイクルｔ４では、先行してフェッチされていた無条件分岐命令の次の命令がフラッシュされ、新たに確定した分岐先命令がフェッチされる。サイクルｔ５以降では、順次後続命令がフェッチされていく。
【００４１】
このように、無条件分岐命令が分岐予測回路１００でミスヒットした場合には、命令パイプラインとしての損失（ペナルティ）は、「１」サイクルとなる。
【００４２】
図７は、本発明の実施の形態において無条件分岐命令が分岐予測回路１００でヒットした場合の処理例を示すタイムチャートである。まず、サイクルｔ１で無条件分岐命令の先頭ワードがフェッチされると、そのタイミングで分岐予測回路１００における分岐予測が行われる。ここではヒットしたことを想定するため、信号線１９９の分岐予測ヒット信号はアクティブになる。すると、次のサイクルｔ２では、予測された分岐先の命令がフェッチされる。以降、順次後続命令がフェッチされていく。
【００４３】
このように、無条件分岐命令が分岐予測回路１００でヒットした場合には、無条件分岐命令の２ワード目の命令フェッチを行わないため、命令パイプラインとしてのペナルティは「−１」サイクルとなる。
【００４４】
図８は、本発明の実施の形態における演算制御回路２１０の条件分岐命令に対する処理例を示す流れ図である。まず、命令フェッチ回路２３０によって条件分岐命令の一部、すなわち最初のワードがフェッチされると（ステップＳ９３１）、そのタイミングで分岐予測回路１００における分岐予測が行われる。これにより、分岐予測回路１００における分岐命令アドレスレジスタ１３０の何れかにその条件分岐命令の命令アドレスが登録されていれば（ヒット：ステップＳ９３２）、分岐予測情報が分岐予測回路１００から取得される（ステップＳ９３３）。一方、分岐予測回路１００における分岐命令アドレスレジスタ１３０の何れにもその条件分岐命令の命令アドレスが登録されていなければ（ミスヒット：ステップＳ９３２）、演算制御回路２１０はその条件分岐命令の残りの部分をフェッチするよう命令フェッチ回路２３０に指示する（ステップＳ９４３）。
【００４５】
ステップＳ９３３において取得された分岐予測情報の分岐方向が「分岐する」を示している場合には、演算制御回路２１０は分岐予測情報の分岐予測先の命令をフェッチするよう命令フェッチ回路２３０に指示する（ステップＳ９３５）。そして、条件分岐命令の分岐条件６２２の判断結果が確定すると、演算制御回路２１０は分岐予測回路１００に対して分岐予測情報の更新を行う（ステップＳ９３６）。このとき、確定した分岐方向が「分岐しない」であれば、フェッチされた分岐予測先の命令をフラッシュして（ステップＳ９３８）、新たに条件分岐命令の後続命令をフェッチするよう命令フェッチ回路２３０に指示する（ステップＳ９３９）。
【００４６】
一方、ステップＳ９３３において取得された分岐予測情報の分岐方向が「分岐しない」を示している場合もしくはステップＳ９３２でミスヒットとなったため条件分岐命令の残りの部分がフェッチ（ステップＳ９４３）された場合、演算制御回路２１０はさらに条件分岐命令の後続の命令をフェッチするよう命令フェッチ回路２３０に指示する（ステップＳ９４５）。そして、条件分岐命令の分岐条件６２２の判断結果が確定すると、演算制御回路２１０は分岐予測回路１００に対して分岐予測情報の更新を行う（ステップＳ９４６）。このとき、確定した分岐方向が「分岐する」であれば、フェッチされた分岐予測先の命令をフラッシュして（ステップＳ９４８）、新たに確定した分岐先の命令をフェッチするよう命令フェッチ回路２３０に指示する（ステップＳ９４９）。
【００４７】
図９は、本発明の実施の形態において条件分岐命令が分岐予測回路１００でミスヒットした際に分岐方向が「分岐する」となった場合の処理例を示すタイムチャートである。まず、サイクルｔ１で条件分岐命令の先頭ワードがフェッチされると、そのタイミングで分岐予測回路１００における分岐予測が行われる。ここではミスヒットしたことを想定するため、信号線１９９の分岐予測ヒット信号は非アクティブのままである。すると、次のサイクルｔ２では、条件分岐命令の次のワードがフェッチされる。なお、ここでは条件分岐命令は２ワードからなると想定する。
【００４８】
次のサイクルｔ３では、条件分岐命令の次の命令が先行してフェッチされる。また、このサイクルｔ３では、条件分岐命令の分岐先アドレスが判明するため、分岐予測回路１００に対して信号線２１２により確定分岐先アドレスが供給されるとともに、信号線２１３によりアドレス更新指示がなされる。これにより、その条件分岐命令が分岐予測回路１００に登録更新される。すなわち、「ＰＣ」番地が分岐命令アドレスレジスタ１３０のいずれかのエントリに登録され、「分岐先」番地が分岐先アドレスレジスタ１２０の同じエントリに登録される。
【００４９】
次のサイクルｔ４では、条件分岐命令の２つ後（「ＰＣ＋３」番地）の命令が先行してフェッチされる。また、条件分岐命令の分岐方向が確定して、その条件分岐命令の分岐方向が分岐予測回路１００に登録更新される。ここでは、「分岐する」となったことを想定しているため、分岐方向レジスタ１１０の対応するエントリには「分岐する」旨の内容が登録される。
【００５０】
次のサイクルｔ５では、先行してフェッチされていた条件分岐命令の後の２つの命令がフラッシュされ、新たに確定した分岐先命令がフェッチされる。サイクルｔ６以降では、順次後続命令がフェッチされていく。
【００５１】
このように、条件分岐命令が分岐予測回路１００でミスヒットした際に分岐方向が「分岐する」となった場合には、命令パイプラインとしてのペナルティは「２」サイクルとなる。
【００５２】
図１０は、本発明の実施の形態において条件分岐命令が分岐予測回路１００でミスヒットした際に分岐方向が「分岐しない」となった場合の処理例を示すタイムチャートである。まず、サイクルｔ１で条件分岐命令の先頭ワードがフェッチされると、そのタイミングで分岐予測回路１００における分岐予測が行われる。ここではミスヒットしたことを想定するため、信号線１９９の分岐予測ヒット信号は非アクティブのままである。すると、次のサイクルｔ２では、条件分岐命令の次のワードがフェッチされる。なお、ここでは条件分岐命令は２ワードからなると想定する。
【００５３】
次のサイクルｔ３では、条件分岐命令の次の命令が先行してフェッチされる。また、このサイクルｔ３では、条件分岐命令の分岐先アドレスが判明するため、分岐予測回路１００に対して信号線２１２により確定分岐先アドレスが供給されるとともに、信号線２１３によりアドレス更新指示がなされる。これにより、その条件分岐命令が分岐予測回路１００に登録更新される。すなわち、「ＰＣ」番地が分岐命令アドレスレジスタ１３０のいずれかのエントリに登録され、「分岐先」番地が分岐先アドレスレジスタ１２０の同じエントリに登録される。
【００５４】
次のサイクルｔ４では、条件分岐命令の２つ後（「ＰＣ＋３」番地）の命令が先行してフェッチされる。また、条件分岐命令の分岐方向が確定して、その条件分岐命令の分岐方向が分岐予測回路１００に登録更新される。ここでは、「分岐しない」となったことを想定しているため、分岐方向レジスタ１１０の対応するエントリには「分岐しない」旨の内容が登録される。
【００５５】
この例では「分岐しない」側の命令を先行してフェッチしていたため、次のサイクルｔ５では、先行してフェッチされていた条件分岐命令の後の２つの命令はフラッシュされることなくそのまま処理され、さらにその次（「ＰＣ＋４」番地）の命令が引き続きフェッチされる。
【００５６】
このように、条件分岐命令が分岐予測回路１００でミスヒットした際に分岐方向が「分岐しない」となった場合には、命令パイプラインとしてのペナルティは、「０」サイクルとなる。
【００５７】
図１１は、本発明の実施の形態において条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐する」であった際に分岐方向が「分岐する」となった場合の処理例を示すタイムチャートである。まず、サイクルｔ１で条件分岐命令の先頭ワードがフェッチされると、そのタイミングで分岐予測回路１００における分岐予測が行われる。ここではヒットしたことを想定するため、信号線１９９の分岐予測ヒット信号はアクティブとなる。すると、次のサイクルｔ２では、予測された分岐先の命令がフェッチされる。なお、ここでは条件分岐命令は２ワードからなると想定する。
【００５８】
その後、サイクルｔ２以降は予測された分岐先の命令が順次フェッチされていく。そして、サイクルｔ４で条件分岐命令の分岐方向が確定して、その条件分岐命令の分岐方向が分岐予測回路１００に登録更新される。ここでは、「分岐する」となったことを想定しているため、分岐方向レジスタ１１０の対応するエントリには「分岐する」旨の内容が登録される。
【００５９】
この例では「分岐する」側の命令を先行してフェッチしていたため、次のサイクルｔ５では、先行してフェッチされていた３つの命令（「分岐先」番地、「分岐先＋１」番地および「分岐先＋２」番地）はフラッシュされることなくそのまま処理され、さらにその次（「分岐先＋３」番地）の命令が引き続きフェッチされる。
【００６０】
このように、条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐する」であった際に分岐方向が「分岐する」となった場合には、条件分岐命令の２ワード目の命令フェッチを行わないため、命令パイプラインとしてのペナルティは「−１」サイクルとなる。
【００６１】
図１２は、本発明の実施の形態において条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐する」であった際に分岐方向が「分岐しない」となった場合の処理例を示すタイムチャートである。まず、サイクルｔ１で条件分岐命令の先頭ワードがフェッチされると、そのタイミングで分岐予測回路１００における分岐予測が行われる。ここではヒットしたことを想定するため、信号線１９９の分岐予測ヒット信号はアクティブとなる。すると、次のサイクルｔ２では、予測された分岐先の命令がフェッチされる。なお、ここでは条件分岐命令は２ワードからなると想定する。
【００６２】
その後、サイクルｔ２以降は予測された分岐先の命令が順次フェッチされていく。そして、サイクルｔ４で条件分岐命令の分岐方向が確定して、その条件分岐命令の分岐方向が分岐予測回路１００に登録更新される。ここでは、「分岐しない」となったことを想定しているため、分岐方向レジスタ１１０の対応するエントリには「分岐しない」旨の内容が登録される。
【００６３】
この例では「分岐する」側の命令を先行してフェッチしていたため、次のサイクルｔ５では、先行してフェッチされていた３つの命令（「分岐先」番地、「分岐先＋１」番地および「分岐先＋２」番地）はフラッシュされ、条件分岐命令の次（「ＰＣ＋２」番地）の命令がフェッチされる。サイクルｔ６以降では、順次その後続命令がフェッチされていく。
【００６４】
このように、条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐する」であった際に分岐方向が「分岐しない」となった場合には、命令パイプラインとしてのペナルティは「２」サイクルとなる。
【００６５】
図１３は、本発明の実施の形態において条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐しない」であった際に分岐方向が「分岐しない」となった場合の処理例を示すタイムチャートである。まず、サイクルｔ１で条件分岐命令の先頭ワードがフェッチされると、そのタイミングで分岐予測回路１００における分岐予測が行われる。ここではヒットしたことを想定するため、信号線１９９の分岐予測ヒット信号はアクティブとなる。すると、次のサイクルｔ２では、条件分岐命令の次の命令がフェッチされる。なお、ここでは条件分岐命令は２ワードからなると想定する。
【００６６】
その後、サイクルｔ２以降は条件分岐命令の次の命令に続く命令が先行して順次フェッチされていく。そして、サイクルｔ４で条件分岐命令の分岐方向が確定して、その条件分岐命令の分岐方向が分岐予測回路１００に登録更新される。ここでは、「分岐しない」となったことを想定しているため、分岐方向レジスタ１１０の対応するエントリには「分岐しない」旨の内容が登録される。
【００６７】
この例では「分岐しない」側の命令を先行してフェッチしていたため、次のサイクルｔ５では、先行してフェッチされていた３つの命令（「ＰＣ＋２」番地、「ＰＣ＋３」番地および「ＰＣ＋４」番地）はフラッシュされることなくそのまま処理され、さらにその次（「ＰＣ＋５」番地）の命令が引き続きフェッチされる。
【００６８】
このように、条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐しない」であった際に分岐方向が「分岐しない」となった場合には、条件分岐命令の２ワード目の命令フェッチを行わないため、命令パイプラインとしてのペナルティは「−１」サイクルとなる。
【００６９】
図１４は、本発明の実施の形態において条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐しない」であった際に分岐方向が「分岐する」となった場合の処理例を示すタイムチャートである。まず、サイクルｔ１で条件分岐命令の先頭ワードがフェッチされると、そのタイミングで分岐予測回路１００における分岐予測が行われる。ここではヒットしたことを想定するため、信号線１９９の分岐予測ヒット信号はアクティブとなる。すると、次のサイクルｔ２では、条件分岐命令の次の命令がフェッチされる。なお、ここでは条件分岐命令は２ワードからなると想定する。
【００７０】
その後、サイクルｔ２以降は条件分岐命令の次の命令に続く命令が先行して順次フェッチされていく。そして、サイクルｔ４で条件分岐命令の分岐方向が確定して、その条件分岐命令の分岐方向が分岐予測回路１００に登録更新される。ここでは、「分岐する」となったことを想定しているため、分岐方向レジスタ１１０の対応するエントリには「分岐する」旨の内容が登録される。
【００７１】
この例では「分岐しない」側の命令を先行してフェッチしていたため、次のサイクルｔ５では、先行してフェッチされていた３つの命令（「ＰＣ＋２」番地、「ＰＣ＋３」番地および「ＰＣ＋４」番地）はフラッシュされ、確定した分岐先の命令がフェッチされる。サイクルｔ６以降では、順次その後続命令がフェッチされていく。
【００７２】
このように、条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐しない」であった際に分岐方向が「分岐する」となった場合には、命令パイプラインとしてのペナルティは「２」サイクルとなる。
【００７３】
これらの説明から明らかなように、本発明の実施の形態によれば、命令フェッチ回路２３０において複数ワードからなる分岐命令の一部のワードのみがフェッチされた段階で、分岐予測回路１００における分岐予測を行なわせて、分岐命令の残りのワードをフェッチすることなく予測分岐先の命令をフェッチするよう演算制御回路２１０から命令フェッチ回路２３０に指示することにより、高速な分岐予測を行うことができる。
【００７４】
例えば、２ワードからなる無条件分岐命令については、分岐予測回路１００でヒットした場合には無条件分岐命令の２ワード目の命令フェッチを行わないで済むため、命令パイプラインとしてのペナルティは「−１」サイクルとなり、従来よりも「１」サイクル高速に処理することができる。また、２ワードからなる条件分岐命令については、分岐予測回路１００でヒットして分岐予測が成功した場合には条件分岐命令の２ワード目の命令フェッチを行わないで済むため、命令パイプラインとしてのペナルティは「−１」サイクルとなり、やはり従来よりも「１」サイクル高速に処理することができる。
【００７５】
すなわち、本発明の実施の形態によれば、分岐予測が成功している限り、複数ワードからなる分岐命令を１ワードの実行サイクルでパイプラインストールやバブルなしに実行することが可能となる。通常の命令シーケンス中で分岐予測回路における分岐予測成功率は８０％を超えると言われており、本発明の実施の形態による命令パイプラインのペナルティ削減は実効面でも有用である。
【００７６】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
【００７７】
すなわち、請求項１において、命令取得制御手段は例えば演算制御回路２１０に対応する。また、分岐予測手段は例えば分岐予測回路１００に対応する。
【００７８】
また、請求項７において、命令取得手段は例えば命令フェッチ回路２３０に対応する。また、命令取得制御手段は例えば演算制御回路２１０に対応する。また、分岐予測手段は例えば分岐予測回路１００に対応する。
【００７９】
また、請求項８において、命令取得手段は例えば命令フェッチ回路２３０に対応する。また、命令取得制御手段は例えば演算制御回路２１０に対応する。また、命令実行手段は例えば命令実行ステージ５４０に対応する。命令取得手段は例えば命令フェッチ回路２３０に対応する。また、命令取得制御手段は例えば演算制御回路２１０に対応する。また、分岐予測手段は例えば分岐予測回路１００に対応する。
【００８０】
また、請求項９において、命令メモリは例えばメモリ３００に対応する。また、命令取得手段は例えば命令フェッチ回路２３０に対応する。また、命令取得制御手段は例えば演算制御回路２１０に対応する。また、命令実行手段は例えば命令実行ステージ５４０に対応する。命令取得手段は例えば命令フェッチ回路２３０に対応する。また、命令取得制御手段は例えば演算制御回路２１０に対応する。また、分岐予測手段は例えば分岐予測回路１００に対応する。
【００８１】
なお、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよい。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施の形態におけるコンピュータシステムの一構成例を示す図である。
【図２】本発明の実施の形態における分岐予測回路１００の一構成例を示す図である。
【図３】本発明の実施の形態におけるプロセッサ２００の命令パイプライン構成例を示す図である。
【図４】本発明の実施の形態における分岐命令の命令フォーマットの一例を示す図である。
【図５】本発明の実施の形態における演算制御回路２１０の無条件分岐命令に対する処理例を示す流れ図である。
【図６】本発明の実施の形態において無条件分岐命令が分岐予測回路１００でミスヒットした場合の処理例を示すタイムチャートである。
【図７】本発明の実施の形態において無条件分岐命令が分岐予測回路１００でヒットした場合の処理例を示すタイムチャートである。
【図８】本発明の実施の形態における演算制御回路２１０の条件分岐命令に対する処理例を示す流れ図である。
【図９】本発明の実施の形態において条件分岐命令が分岐予測回路１００でミスヒットした際に分岐方向が「分岐する」となった場合の処理例を示すタイムチャートである。
【図１０】本発明の実施の形態において条件分岐命令が分岐予測回路１００でミスヒットした際に分岐方向が「分岐しない」となった場合の処理例を示すタイムチャートである。
【図１１】本発明の実施の形態において条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐する」であった際に分岐方向が「分岐する」となった場合の処理例を示すタイムチャートである。
【図１２】本発明の実施の形態において条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐する」であった際に分岐方向が「分岐しない」となった場合の処理例を示すタイムチャートである。
【図１３】本発明の実施の形態において条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐しない」であった際に分岐方向が「分岐しない」となった場合の処理例を示すタイムチャートである。
【図１４】本発明の実施の形態において条件分岐命令が分岐予測回路１００でヒットして予測分岐方向が「分岐しない」であった際に分岐方向が「分岐する」となった場合の処理例を示すタイムチャートである。
【符号の説明】
【００８３】
１００  分岐予測回路
１１０  分岐方向レジスタ
１２０  分岐先アドレスレジスタ
１３０  分岐命令アドレスレジスタ
１４０  比較器
１５０  方向選択器
１６０  アドレス選択器
１７０  論理和回路
１９１  予測分岐方向
１９２  予測分岐先アドレス
１９９  分岐予測ヒット
２００  プロセッサ
２１０  演算制御回路
２１１  分岐方向更新信指示
２１２  確定分岐先アドレス
２１３  アドレス更新指示
２１８  次命令アドレス
２１９  命令フェッチアドレス
２２９  プログラムカウンタ
２３０  命令フェッチ回路
２３９  命令
３００  メモリ
【図１】
2006235723.tif 000003
【図２】
2006235723.tif 000004
【図３】
2006235723.tif 000005
【図４】
2006235723.tif 000006
【図５】
2006235723.tif 000007
【図６】
2006235723.tif 000008
【図７】
2006235723.tif 000009
【図８】
2006235723.tif 000010
【図９】
2006235723.tif 000011
【図１０】
2006235723.tif 000012
【図１１】
2006235723.tif 000013
【図１２】
2006235723.tif 000014
【図１３】
2006235723.tif 000015
【図１４】
2006235723.tif 000016