(57)【特許請求の範囲】
【請求項１】
分岐命令を含む一連の命令が格納される命令格納メモリを備え、該命令格納メモリから命令を取り出して複数のステージからなるパイプライン処理を実行するとともに、該命令のパイプライン処理実行中に、該命令の次に実行される命令を前記命令格納メモリから先取りするマイクロプロセッサであって、
前記分岐命令は、当該分岐命令の分岐条件の判定を予想した結果が予め設定される分岐予測方向ビットを有し、
前記命令格納メモリから前記分岐命令が取り出され、該分岐命令について前記パイプライン処理が実行されると、該実行結果に基づいて、該分岐命令の分岐条件が成立したか否かを判定する分岐判定回路と、
前記分岐判定回路の判定結果を前記分岐命令の分岐履歴情報として格納する分岐履歴バッファと、
前記命令格納メモリから取り出された命令が前記分岐命令である場合に、前記分岐履歴バッファに格納された前記分岐命令に関する分岐履歴情報を参照して、前記分岐命令における分岐条件の成立または不成立の目下の連続回数を調べ、該連続回数が閾値以下の場合は、前記分岐命令に含まれている前記分岐予測方向ビットに設定された値に基づいて前記分岐命令における分岐条件の判定結果を予測し、前記連続回数が前記閾値を超えた場合には、前記履歴バッファに格納された前記分岐命令に関する分岐履歴情報を参照して前記分岐命令における分岐条件の判定結果を予測する分岐予測方向決定部と、
前記分岐予測方向決定部で予測した判定結果に基づいて、前記命令格納メモリからマイクロ命令を先取りするためのアドレスを指定するプログラムカウンタと、を有する、マイクロプロセッサ。
【請求項２】
前記分岐予測方向決定部で予測した判定結果を保持する予測情報持ち回りレジスタと、
前記命令格納メモリから取り出した分岐命令について、前記分岐判定回路にて分岐条件の判定が行われると、該判定結果と、前記予測情報持ち回りレジスタに保持された、該分岐命令について前記分岐予測方向決定部で予測した判定結果とを比較し、両比較結果が不一致となった場合に、前記命令格納メモリから先取りした命令についての処理を全てキャンセルするパイプラインキャンセル判定回路と、をさらに有する、請求項１に記載のマイクロプロセッサ。
【請求項３】
分岐命令を含む一連の命令が格納される命令格納メモリを備え、該命令格納メモリから命令を取り出して複数のステージからなるパイプライン処理を実行するとともに、該命令のパイプライン処理実行中に、該命令の次に実行される命令を前記命令格納メモリから先取りするマイクロプロセッサのパイプライン制御方法であって、
前記分岐命令は、当該分岐命令の分岐条件の判定を予想した結果が予め設定される分岐予測方向ビットを有し、
前記命令格納メモリから前記分岐命令が取り出され、該分岐命令について前記パイプライン処理が実行されると、該実行結果に基づいて、該分岐命令の分岐条件が成立したか否かを判定する分岐判定ステップと、
前記分岐判定ステップの判定結果を前記分岐命令の分岐履歴情報として分岐履歴バッファに格納する分岐履歴格納ステップと、
前記命令格納メモリから取り出された命令が前記分岐命令である場合に、前記分岐履歴バッファに格納された前記分岐命令に関する分岐履歴情報を参照して、前記分岐命令における分岐条件の成立または不成立の目下の連続回数を調べ、該連続回数が閾値以下の場合は、前記分岐命令に含まれている前記分岐予測方向ビットに設定された値に基づいて前記分岐命令における分岐条件の判定結果を予測し、前記連続回数が前記閾値を超えた場合には、前記履歴バッファに格納された前記分岐命令に関する分岐履歴情報を参照して前記分岐命令における分岐条件の判定結果を予測する分岐予測方向決定ステップと、
前記分岐予測方向決定ステップで予測した判定結果に基づいて、前記命令格納メモリからの命令の先取りを行う命令先取りステップと、を含む、パイプライン制御方法。
【請求項４】
前記分岐予測方向決定ステップで予測した判定結果を予測情報持ち回りレジスタで保持する予測情報保持ステップと、
前記命令格納メモリから取り出した分岐命令について、前記分岐判定ステップにて分岐条件の判定が行われると、該判定結果と、前記予測情報持ち回りレジスタに保持された、該分岐命令について前記分岐予測方向決定ステップで予測した判定結果とを比較し、両比較結果が不一致となった場合に、前記命令格納メモリから先取りした命令について処理を全てキャンセルするパイプラインキャンセル判定ステップと、をさらに含む、請求項３に記載のパイプライン制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプライン処理を行うマイクロプロセッサに関に関する。
【背景技術】
【０００２】
パイプライン処理を行うＲＩＳＣ（Reduced Instruction Set Computer）型マイクロプロセッサが知られている（特許文献１）。パイプライン処理は、１つの命令に基づく処理をｎ段の独立なステージに分けて実行する処理である。パイプラインの基本的なステージとして、命令キャッシュから命令を取り出す命令フェッチ（ＩＦ）と、フェッチした命令をデコードするとともに、レジスタオペランドをフェッチする命令デコード（ＲＦ）と、デコード結果とフェッチしたレジスタの値に基づいて命令を実行してアドレスを計算する命令実行（ＥＸ）と、計算したアドレスに対応するメモリの値（オペランド）をデータキャッシュから取り出すオペランドフェッチ（ＭＥＭ）と、演算結果（ＥＸで計算したアドレスまたはＭＥＭでフェッチしたオペランド）をレジスタに格納するライトバック（ＷＢ）とがある。ＲＩＳＣ型マイクロプロセッサでは、一連のマイクロ命令（固定命令語長）に対して、各ステージにおける処理を並列に実行する。
【０００３】
上記のＲＩＳＣ型マイクロプロセッサにおいて、パイプラインに投入される命令が分岐命令を含む場合、パイプライン処理効率が低下する。分岐命令を含む一連のマイクロ命令をパイプライン処理する場合、分岐命令で、分岐条件が成立するか否かは、分岐命令に基づく処理（分岐判定ステージ）に至るまで判らない。このため、分岐命令の次に実行すべき命令をフェッチするためには、分岐命令に基づく処理（分岐判定）が完了するまで、パイプラインをストールさせなければならない。
【０００４】
分岐命令に起因するパイプラインのストールの一般的な解決策として、分岐条件が不成立になると仮定して、後続命令の実行を継続させる方法がある。この方法では、分岐命令に基づく処理が完了するのを待たずに、分岐命令の次に実行すべき命令（分岐条件が不成立になった場合に実行される命令）をフェッチし、そのフェッチした命令をデコードする処理が進められる。なお、分岐条件が成立した場合には、フェッチ、デコードを進めた命令を放棄して、分岐先の命令から処理を続行する。このような分岐方向が固定された方法は、分岐条件の成立および不成立の確率が予め予測できる場合において、少ないコストでパイプライン処理効率を向上させることができる。
【０００５】
特許文献１には、分岐命令のアドレスとその分岐先アドレスを分岐予測テーブルに格納しておき、分岐予測テーブルに格納した分岐命令を実行した際には、分岐予測テーブルを参照して分岐先アドレスからの処理を実行することで、パイプラインを乱すことなく高速に命令を実行することが記載されている。
【０００６】
特許文献２には、分岐命令中に分岐条件成立／不成立の予想ビットを備え、該分岐命令を検出すると、予想ビットの内容に応じてアドレス選択処理を行うことが記載されている。
【０００７】
特許文献３には、分岐命令が分岐予測情報および分岐履歴情報を含み、命令フェッチ器が、分岐命令に含まれている分岐予測情報に基づいてキャッシュメモリから命令を先取りすることが記載されている。分岐履歴情報は、過去に分岐が成立した頻度を「極めて多い」、「多い」、「少ない」、「極めて少ない」の４つの状態で表したものである。分岐命令が実行されると、その分岐結果と実行した分岐命令に含まれている分岐履歴情報とに基づいて分岐履歴情報が更新される。分岐履歴情報が「多い」または「極めて多い」とされた場合に、分岐成功を示す分岐予測情報が生成され、分岐履歴情報が「少ない」または「極めて少ない」とされた場合には、分岐不成功を示す分岐予測情報が生成される。
【特許文献１】特開平０２−１４４６２６号公報
【特許文献２】特開平０３−２６３２２４号公報
【特許文献３】特開平１０−２２８３７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
分岐条件が成立するか否かは、プログラムの性質に依存する傾向が高い。例えば、一度分岐条件が成立した分岐命令は、次に実行された場合に、分岐条件が成立する確率が高い。逆に、一度分岐条件が不成立となった分岐命令は、次に実行された場合に、分岐条件が不成立となる確率が高い。このような傾向から、分岐命令によりループが形成されるプログラムにおいて、マイクロ命令をコーディングした場合に、同じ分岐命令が何回も出現する場合には、分岐条件の判定結果が成立／不成立のいずれかに傾くかを容易に推測することができる。分岐条件が成立するか否かがプログラムの性質に依存する傾向が高いということは、プログラム設計者は、プログラムを組む段階で、分岐命令について、分岐条件の成立と不成立のどちらが多く発生するかを予想することができる、と考えられる。このようなことから、分岐条件が成立する確率が高いと予想される（分岐条件の成立が多く発生すると予想される）分岐命令については、分岐条件が成立すると仮定して（分岐方向の予測）、後続命令の実行を継続させることで、分岐命令に起因するパイプラインのストールの発生を抑制することができる。同様に、分岐条件が不成立になる確率が高いと予想される（分岐条件の不成立が多く発生すると予想される）分岐命令については、分岐条件が不成立になると仮定して、後続命令の実行を継続させることで、分岐命令に起因するパイプラインのストールの発生を抑制することができる。
【０００９】
しかしながら、上記のように分岐条件の判定結果を成立／不成立のいずれかに固定する方法においては、固定した判定結果（成立または不成立）をプログラム実行途中で変更することができないため、プログラム設計者の予想が外れた場合には、分岐条件の判定結果が発生確率の低い方に固定されることになり、その結果、分岐命令に起因するパイプラインのストールの発生を抑制する効果が半減する。特許文献１、２に記載のものも、分岐条件の判定結果を成立／不成立のいずれかに固定するものであるため、同様の問題を生じる。
【００１０】
特許文献３に記載のものは、プログラム設計者の予想を用いずに、分岐履歴情報に基づいて分岐条件の判定予測を行うものである。この場合は、十分な分岐履歴情報（過去に分岐が成立した頻度）を得るために、分岐命令がある程度の回数実行される必要があり、その実効回数に達するまでの間は、分岐履歴情報に基づく分岐予測が外れることがある。このため、分岐命令に起因するパイプラインのストールの発生を抑制する効果が半減する。
【００１１】
本発明の目的は、分岐履歴および設計者の予想の両面から分岐命令の分岐予測を行うことのできるマイクロプロセッサを提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明のマクロプロセッサは、
分岐命令を含む一連の命令が格納される命令格納メモリを備え、該命令格納メモリから命令を取り出して複数のステージからなるパイプライン処理を実行するとともに、該命令のパイプライン処理実行中に、該命令の次に実行される命令を前記命令格納メモリから先取りするマイクロプロセッサであって、
前記分岐命令は、当該分岐命令の分岐条件の判定を予想した結果が予め設定される分岐予測方向ビットを有し、
前記命令格納メモリから前記分岐命令が取り出され、該分岐命令について前記パイプライン処理が実行されると、該実行結果に基づいて、該分岐命令の分岐条件が成立したか否かを判定する分岐判定回路と、
前記分岐判定回路の判定結果を前記分岐命令の分岐履歴情報として格納する分岐履歴バッファと、
前記命令格納メモリから取り出された命令が前記分岐命令である場合に、前記分岐履歴バッファに格納された前記分岐命令に関する分岐履歴情報を参照して、前記分岐命令における分岐条件の成立または不成立の目下の連続回数を調べ、該連続回数が閾値以下の場合は、前記分岐命令に含まれている前記分岐予測方向ビットに設定された値に基づいて前記分岐命令における分岐条件の判定結果を予測し、前記連続回数が前記閾値を超えた場合には、前記履歴バッファに格納された前記分岐命令に関する分岐履歴情報を参照して前記分岐命令における分岐条件の判定結果を予測する分岐予測方向決定部と、
前記分岐予測方向決定部で予測した判定結果に基づいて、前記命令格納メモリからマイクロ命令を先取りするためのアドレスを指定するプログラムカウンタと、を有する。
【００１３】
本発明のマイクロプロセッサによれば、分岐命令を含む一連の命令に対してパイプライン処理を実行する場合において、分岐命令の実行結果として同じ判定結果が連続する場合で、連続回数が閾値以下の場合は、分岐命令に含まれている分岐方向予測ビット（プログラム設計者によって設定された予測結果）に基づいて分岐条件の判定の予測が行われ、その予測結果に従って命令の先取りが行われる。また、連続回数が閾値を越えた場合には、分岐履歴バッファに格納された分岐履歴情報に従って分岐命令の判定結果が予測され、その予測した判定結果に基づいて命令の先取りが行われる。この動作によれば、以下のような作用を有する。
【００１４】
プログラム設計者は、例えば、分岐命令について、分岐条件が成立する確率が高いと予想した場合に、分岐命令に含まれる分岐予測方向ビットに「成功」を示す値を設定する。この場合、プログラム設計者の予測が当たっていれば、パイプラインのストールを効果的に抑制することができる。例えば、分岐条件が成立する実際の確率が８０％であれば、パイプラインがキャンセルされる割合は、全体の２０％となるので、パイプラインのストールを効果的に抑制することができる。
【００１５】
分岐予測方向ビットに従った命令の先取りの動作のみを行うだけでは、プログラム設計者の予測が外れた場合に、パイプラインがキャンセルされる割合が増大してしまい、パイプラインのストールを抑制する効果が半減する。本発明のマイクロプロセッサでは、連続回数が閾値Ａを越えた場合には、分岐履歴バッファに格納された分岐履歴情報に従った命令の先取りが行われる。この動作によれば、例えば、最初の３回までは、プログラム設計者の予測（分岐予測方向ビット）に従った命令の先取りが行われるが、それ以降は、分岐履歴バッファに格納された分岐履歴情報に従った命令の先取りが行われる。したがって、プログラム設計者の予測が外れた場合は、４回目以降について、分岐履歴情報に従った命令の先取りにより、実際の判定結果と一致する予測結果を得られる。
【発明の効果】
【００１６】
本発明によれば、分岐履歴情報に従った判定予測とプログラム設計者の予測（分岐予測方向ビット）に従った判定予測との両面から、分岐命令の判定予測を行うことにより、分岐予測成功率を向上することができ、分岐命令の成功または不成功による命令フェッチのやり直しを極力へらすことができる、という効果がある。
【発明を実施するための最良の形態】
【００１７】
次に、本発明の実施形態について図面を参照して説明する。
【００１８】
図１は、本発明の一実施形態であるマイクロプロセッサの概略構成を示すブロック図である。図１を参照すると、マイクロプロセッサは、ＳＷ（ソフトウェア）命令により起動される、ＲＩＳＣ型のマイクロプロセッサであって、その主要部は、プログラムカウンタ１、マイクロ命令格納メモリ２、デコーダ３、命令レジスタ４、アドレス生成回路５、オペランド取り出し回路６、演算結果格納レジスタ７、分岐判定回路８、パイプラインキャンセル判定回路９、分岐履歴バッファ１０、予測情報持ち回りレジスタ１１〜１４、分岐履歴バッファ格納情報生成回路１５、分岐予測方向決定回路１６、および選択回路１７から構成されている。
【００１９】
プログラムカウンタ１は、実行すべきマイクロ命令のアドレスを指定するものである。このプログラムカウンタ１の出力（指定アドレス）は、マイクロ命令格納メモリ２、分岐履歴バッファ１０、および予測情報持ち回りレジスタ１１のそれぞれに供給される。マイクロ命令格納メモリ２は、プログラムを実行するための一連のマイクロ命令を格納する命令キャッシュであって、プログラムカウンタ１が指し示すアドレスによって索引されるマイクロ命令をデコーダ３へ出力する。このプログラムカウンタ１により指定されたアドレスに基づく命令の取り出しが、パイプラインの命令フェッチ（ＩＦ）のステージに対応する。
【００２０】
デコーダ３は、マイクロ命令格納メモリ２から索引された命令をデコードする。デコーダ３の出力（デコード結果）は、命令レジスタ４、分岐予測方向決定回路１６、予測情報持ち回りレジスタ１１、および選択回路１７にそれぞれ供給される。命令レジスタ４は、デコーダ３でのデコード結果を格納するものである。マイクロ命令がデコーダ３でデコードされ、そのデコード結果が命令レジスタ４に格納されるまでの処理が、パイプラインの命令デコード（ＲＦ）のステージに対応する。
【００２１】
アドレス生成回路５は、命令レジスタ４に格納されたデコード結果に基づいてマイクロ命令を実行してアドレス計算を行う。このアドレス生成回路５によるアドレス計算が、パイプラインの命令実行（ＥＸ）のステージに対応する。
【００２２】
オペランド取り出し回路６は、アドレス生成回路５で計算したアドレスに基づいてオペランドデータの取り出しを行う。このオペランド取り出し回路６によるオペランドデータの取り出しが、パイプラインのオペランドフェッチ（ＭＥＭ）のステージに対応する。
【００２３】
演算結果格納レジスタ７は、アドレス生成回路５で計算したアドレスやオペランド取り出し回路６で取り出したオペランドデータを格納するものである。この演算結果格納レジスタ７による演算結果（アドレスやオペランドデータ）の格納が、パイプラインのライトバック（ＷＢ）のステージに対応する。
【００２４】
分岐判定回路８は、分岐命令が実行された場合に、演算結果格納レジスタ７に格納された演算結果に基づいて分岐判定を行う。分岐判定回路８の出力（分岐判定結果）は、パイプラインキャンセル判定回路９および分岐履歴バッファ格納情報生成回路１５にそれぞれ供給される。
【００２５】
パイプラインキャンセル判定回路９は、分岐判定回路８から供給される分岐判定結果と予測情報持ち回りレジスタ１４から供給される分岐予測結果とに基づいてパイプラインキャンセルを行うか否かを判断する。パイプラインキャンセルを行うと判断した場合は、パイプラインキャンセル判定回路９は、パイプライン上のデータや命令を放棄するとともに、正しい命令を再索引するための信号（アドレス）を、選択回路１７を介してプログラムカウンタ１に供給する。
【００２６】
分岐予測方向決定回路１６は、命令フェッチのステージにおいて、デコーダ３にてデコードされたマイクロ命令が分岐命令であるか否かを判断する。デコードされたマイクロ命令が分岐命令であると判断した場合は、分岐予測方向決定回路１６は、デコードされた分岐命令中に含まれている分岐予測方向ビットと分岐履歴バッファ１０に格納されているデコードされた分岐命令に関する履歴情報とに基づいて、デコードされた分岐命令が成立／不成立のいずれになるかを予測する（分岐予測方向決定）。分岐予測方向決定回路１６での予測結果は、分岐予測情報の一部の情報として予測情報持ち回りレジスタ１１に供給される。
【００２７】
デコードされた分岐命令が不成立になると予測した場合は、分岐予測方向決定回路１６は、デコードされた分岐命令のアドレスに固定命令語長を加えたアドレス（分岐命令の後続命令アドレス）を、選択回路１７を介してプログラムカウンタ１に供給する。これにより、プログラムカウンタ１によって後続命令アドレスが指定されることになり、マイクロ命令格納メモリ２から後続命令がフェッチされることになる。
【００２８】
デコードされた分岐命令が成立すると予測した場合は、分岐予測方向決定回路１６は、デコードされた分岐命令に含まれている分岐先アドレスを、選択回路１７を介してプログラムカウンタ１に供給する。これにより、プログラムカウンタ１によって分岐先アドレスが指定されることになり、マイクロ命令格納メモリ２から分岐先の命令がフェッチされることになる。
【００２９】
予測情報持ち回りレジスタ１１〜１４は、デコーダ３でデコードされた分岐命令に関する分岐予測方向決定回路１６での分岐予測方向決定結果を含む分岐予測情報を、そのデコードされた分岐命令についてのパイプラインの各ステージにおける処理に同期して持ち回るためのレジスタである。
【００３０】
分岐履歴バッファ格納情報生成回路１５は、予測情報持ち回りレジスタ１４から供給される分岐予測情報および分岐判定回路８から供給される分岐判定結果に基づいて、実行された分岐命令に関する分岐履歴情報を生成して分岐履歴バッファ１０に格納する。分岐履歴情報は、実行された分岐命令を識別するための情報（例えば分岐命令アドレス）と実行された分岐命令の分岐判定結果（成立または不成立）とを含む。分岐履歴バッファ１０には、分岐命令毎に分岐履歴情報が格納される。
【００３１】
次に、分岐命令および分岐予測情報について具体的に説明する。
【００３２】
図２に、分岐命令のフォーマットを示す。図２を参照すると、分岐命令は、命令語を示すＯＰコード２０、分岐予測方向を決定するための分岐予測方向ビット２２、分岐予測方向ビット２２の有効／無効を示す分岐予測Ｖビット２１、分岐判定に使用する分岐判定用レジスタナンバー２３、および分岐先命令のアドレスを示す分岐先アドレス２４から構成される。フェッチされたマイクロ命令が分岐命令であるか否かは、ＯＰコード２０で判断することができる。
【００３３】
分岐予測方向ビット２２は、プログラムを作成する段階で、プログラム設計者によって設定される。分岐条件が成立するか否かがプログラムの性質に依存する傾向が高いという知見に基づいて、プログラム設計者は、分岐命令において分岐条件が成立／不成立のいずれになるかを予測し、その予測した結果に基づいて分岐予測方向ビット２２を設定する。分岐予測方向ビット２２に予測した値を設定した場合は、分岐予測Ｖビット２１は「有効」とされる。分岐予測方向ビット２２を設定しない場合は、分岐予測Ｖビット２１は「無効」とされる。
【００３４】
図３に、予測情報持ち回りレジスタ１１〜１４で持ち回る分岐予測情報のフォーマットを示す。図３を参照すると、分岐予測情報は、分岐予測情報の有効性を示すＶビット３０と、分岐予測として分岐成功・不成功のどちらで動作しているかを示す分岐予測方向ビット３１と、分岐条件が不成立とされた場合に用いられる、後続命令のアドレス（「分岐命令アドレス＋マイクロ命令語長」）３２と、分岐条件が成立とされた場合に用いられる分岐先アドレス３３とを含む。
【００３５】
次に、本実施形態のマイクロプロセッサの動作について説明する。
【００３６】
本実施形態のマイクロプロセッサは、フェッチされたマイクロ命令が分岐命令である場合のパイプライン処理に特徴がある。図４に、そのパイプライン処理のフローチャートを示す。
【００３７】
図４を参照すると、まず、プログラムカウンタ１によって指し示されたアドレスに基づいてマイクロ命令格納メモリ２からマイクロ命令が取り出される（ステップＳ１０）。この取り出されたマイクロ命令に対して、デコーダ３、命令レジスタ４、アドレス生成回路５、オペランド取り出し回路６、および演算結果格納レジスタ７の各部における処理が順に実行される。この一連の処理がパイプラインの各ステージに対応する。
【００３８】
ステップＳ１０でフェッチしたマイクロ命令に対してパイプラインの各ステージの処理が行われる過程において、ステップＳ１１〜Ｓ１７の処理が実行される。
【００３９】
ステップＳ１１では、分岐予測方向決定回路１６が、ステップＳ１０でフェッチしたマイクロ命令が分岐命令であるか否かを判断する。フェッチしたマイクロ命令が分岐命令である場合は、分岐予測方向決定回路１６は、フェッチしたマイクロ命令に関する分岐履歴情報を分岐履歴バッファ１０から取得し、その取得した分岐履歴情報と、フェッチしたマイクロ命令に含まれている分岐予測方向ビットとに基づいて、閾値に基づく分岐予測判定を行う。分岐予測判定結果は、分岐予測情報として予測情報持ち回りレジスタ１１〜１４により保持される。
【００４０】
図５に、閾値に基づく分岐予測判定の一例を模式的に示す。図５において、連続同一分岐判定回数Ｘは、分岐判定回路８にて、成立または不成立の判定が連続して何回続いたかを示す。連続同一分岐判定回数Ｘは、分岐履歴バッファ１０に格納された分岐履歴情報から取得することができる。分岐履歴バッファ１０には、分岐判定回路８にて分岐条件の判定が行われる度に、その判定結果（成立または不成立）を含む分岐履歴情報が分岐命令毎に格納される。したがって、分岐予測方向決定回路１６は、デコードされた分岐命令に関する分岐履歴情報を分岐履歴バッファ１０から取得し、その取得した分岐履歴情報に基づいて、デコードされた分岐命令が前回の分岐判定時において、成立または不成立の判定が連続して何回続いたかを判断することができる。
【００４１】
連続同一分岐判定回数Ｘが閾値Ａ以下の場合は、分岐予測方向決定回路１６は、デコーダ３によりデコードされた分岐命令に含まれている分岐予測方向ビット（図２の分岐予測方向ビット２１）に基づいて分岐予測を行う。具体的には、分岐予測方向ビット２１に「成立」を示す情報が設定されている場合は、分岐予測方向決定回路１６は、デコーダ３によりデコードされた分岐命令に対して、分岐条件が成立すると予測し、デコードされた分岐命令に含まれている分岐先アドレスをプログラムカウンタ１に供給する。分岐予測方向ビット２１に「不成立」を示す情報が設定されている場合は、分岐予測方向決定回路１６は、分岐条件が不成立になると予測し、デコーダ３によりデコードされた分岐命令のアドレスにマイクロ命令語長を加えた後続命令アドレスをプログラムカウンタ１に供給する。
【００４２】
連続同一分岐判定回数Ｘが閾値Ａを越えた場合は、分岐予測方向決定回路１６は、分岐履歴バッファ１０に格納されている分岐履歴情報に従って分岐予測を行う。ここで、閾値Ａを「３」とし、分岐判定回路８にて、４回連続して分岐条件が成立した旨の判定が行われた場合について説明する。この場合は、分岐履歴バッファ１０には、デコードされた分岐命令のアドレスによって特定される分岐履歴情報として、分岐条件が４回連続して成立したことを示す履歴情報が格納される。分岐予測方向決定回路１６は、分岐履歴バッファ１０に格納された履歴情報に基づいて、デコーダ３によりデコードされた分岐命令に対して、分岐条件が成立すると予測し、デコードされた分岐命令に含まれている分岐先アドレスをプログラムカウンタ１に供給する。なお、分岐履歴バッファ１０に、デコードされた分岐命令のアドレスによって特定される分岐履歴情報として、分岐条件が４回連続して不成立になったことを示す履歴情報が格納された場合は、分岐予測方向決定回路１６は、デコーダ３によりデコードされた分岐命令に対して、分岐条件が不成立になると予測し、デコーダ３によりデコードされた分岐命令のアドレスにマイクロ命令語長を加えた後続命令アドレスをプログラムカウンタ１に供給する。
【００４３】
ステップＳ１２で分岐予測判定が行われた後、ステップＳ１３で、プログラムカウンタ１が、分岐予測方向決定回路１６から供給されるアドレス（分岐先アドレスまたは後続命令アドレス）を指定し、その指定アドレスに基づいてマイクロ命令格納メモリ２からマイクロ命令が取り出される。この取り出されたマイクロ命令に対して、デコーダ３、命令レジスタ４、アドレス生成回路５、オペランド取り出し回路６、および演算結果格納レジスタ７の各部における処理が順に実行される。この処理は、ステップ１０でフェッチしたマイクロ命令（分岐命令）のパイプライン処理と並列して行われる。
【００４４】
ステップ１０でフェッチしたマイクロ命令（分岐命令）に対するパイプライン処理が行われると、ステップＳ１４で、分岐判定回路８が、その分岐命令に対する実行結果（演算結果）から、分岐条件が成立／不成立のいずれになったかを判定する。具体的には、分岐判定回路８は、分岐命令語中の分岐判定用レジスタナンバーが指し示す演算結果格納レジスタ７の内容に基づいて分岐判定を行う。この分岐判定の時点では、分岐命令が必要としている演算結果格納レジスタ７内のデータは確定しているので、正しい分岐方向（分岐判定結果）を得ることができる。分岐判定後、パイプラインキャンセル判定回路９が、分岐判定回路８での判定結果と予測情報持ち回りレジスタ１１〜１４により保持されている分岐予測情報（ステップＳ１２の分岐予測判定の結果を含む）とに基づいて、パイプラインをキャンセルするか否かを判断する。
【００４５】
ここで、パイプラインキャンセル判定について具体的に説明する。分岐判定回路８からの判定結果には、「成立」と「不成立」があり、分岐予測情報にも、「成立」と「不成立」がある。判定結果および分岐予測情報がともに「成立」である場合は、予測した分岐判定結果が実際の判定結果と合致したことになるため、パイプラインキャンセル判定回路９は、「キャンセル無し」と判断する（条件１）。判定結果および分岐予測情報がともに「不成立」である場合も、予測した分岐判定結果が実際の判定結果と合致したことになるため、パイプラインキャンセル判定回路９は、「キャンセル無し」と判断する（条件２）。判定結果が「成立」で、分岐予測情報が「不成立」である場合は、予測した分岐判定結果が実際の判定結果と合致しないことになるため、パイプラインキャンセル判定回路９は、「キャンセル有り」と判断する（条件３）。判定結果が「不成立」で、分岐予測情報が「成立」である場合も、予測した分岐判定結果が実際の判定結果と合致しないことになるため、パイプラインキャンセル判定回路９は、「キャンセル有り」と判断する（条件４）。
【００４６】
「キャンセル有り」と判断した場合（条件３または条件４）は、ステップＳ１５で、パイプラインキャンセル判定回路９が、パイプライン上の命令を無効化する。そして、ステップＳ１６で、パイプラインキャンセル判定回路９が、予測情報持ち回りレジスタ１４内にある後続命令アドレス（「分岐命令アドレス＋マイクロ命令語長」）をプログラムカウンタ１へ供給する。これにより、正しい命令の再索引が行われる。
【００４７】
「キャンセル無し」と判断した場合（条件１または条件２）は、ステップＳ１７で、パイプラインキャンセル判定回路９が、予測情報持ち回りレジスタ１４内にある分岐先アドレスをプログラムカウンタ１へ供給する。そして、ステップＳ１７で、パイプラインキャンセル判定回路９が、実行された分岐命令（ステップ１０でフェッチしたマイクロ命令）に含まれている分岐先アドレスをプログラムカウンタ１へ供給する。これにより、分岐先のアドレスに基づく索引が行われる。
【００４８】
上述のようにしてマイクロ命令格納メモリ２からマイクロ命令がフェッチされ、フェッチしたマイクロ命令に対してパイプライン処理が実行される度に、分岐履歴バッファ格納情報生成回路１５が、分岐判定回路８と予測情報持ち回りレジスタ１４の情報に基づいて分岐履歴バッファ１０内の分岐履歴情報を更新する。
【００４９】
本実施形態のマイクロプロセッサによれば、分岐命令を含む一連のマイクロ命令に対してパイプライン処理を実行する場合において、分岐命令の実行結果として同じ判定結果が連続する場合で、連続同一分岐判定回数Ｘが閾値Ａ以下の場合は、分岐命令に含まれている分岐方向予測ビット（プログラム設計者によって設定された予測結果）に基づいて分岐条件の判定の予測が行われ、その予測結果に従ってマイクロ命令の先取りが行われる。また、連続同一分岐判定回数Ｘが閾値Ａを越えた場合には、分岐履歴バッファ１０に格納された分岐履歴情報に従って分岐命令の判定結果が予測され、その予測した判定結果に基づいてマイクロ命令の先取りが行われる。この動作により、以下のような作用・効果を有する。
【００５０】
プログラム設計者は、例えば、分岐命令について、分岐条件が成立する確率が高いと予想した場合に、分岐命令に含まれる分岐予測方向ビット（図２の分岐予測方向ビット２２）を、「成功」を示す値に設定する。この場合、連続同一分岐判定回数Ｘが閾値Ａ以下の場合は、分岐条件の判定の予測結果は「成功」となる。分岐条件が成立する実際の確率が、例えば８０％である場合、プログラム設計者の予測が当たっていれば、パイプラインがキャンセルされる割合は、全体の２０％となり、その分、パイプラインのストールを抑制することができる。
【００５１】
分岐予測方向ビットに従ったマイクロ命令の先取りの動作のみだけでは、プログラム設計者の予測が外れた場合に、パイプラインがキャンセルされる割合が増大してしまい、パイプラインのストールを抑制する効果が半減する。本実施形態では、連続同一分岐判定回数Ｘが閾値Ａを越えた場合には、分岐履歴バッファ１０に格納された分岐履歴情報に従ったマイクロ命令の先取りが行われる。この動作によれば、例えば、最初の３回までは、プログラム設計者の予測（図２の分岐予測方向ビット２２）に従ったマイクロ命令の先取りが行われるが、それ以降は、分岐履歴バッファ１０に格納された分岐履歴情報に従ったマイクロ命令の先取りが行われる。したがって、プログラム設計者の予測が外れた場合は、４回目以降について、分岐履歴情報に従ったマイクロ命令の先取りにより、実際の判定結果と一致する予測結果を得られる。
【００５２】
以上説明した本実施形態のマイクロプロセッサは、本発明の一例であり、その構成および動作は、発明の趣旨を逸脱しない範囲で適宜に変更することができる。例えば、閾値に基づく分岐予測判定において、図６に示すように、閾値Ａに加えて、閾値Ｂ（Ｂ＜Ａ）を設定してもよい。この場合は、Ｘ＞ＡまたはＸ≦Ｂの条件を満たす場合において、分岐履歴バッファ１０に格納された分岐履歴情報に従ったマイクロ命令の先取りが行われ、Ｂ＜Ｘ≦Ａの条件を満たす場合において、分岐予測方向ビットに従ったマイクロ命令の先取りが行われる。この動作によれば、例えば、プログラム設計者の予測が外れた場合において、Ｘ＞Ａの範囲だけでなく、Ｘ≦Ｂの範囲においても、分岐履歴情報に従ったマイクロ命令の先取りにより、実際の判定結果と一致する予測結果を得られる。
【００５３】
また、予測情報持ち回りレジスタは、パイプラインのステージにおける処理に同期して分岐予測情報を保持することができればよく、その数は、ステージの数によって決まる（パイプラインの処理サイクルによって決まる）。
【図面の簡単な説明】
【００５４】
【図１】本発明の一実施形態であるマイクロプロセッサの概略構成を示すブロック図である。
【図２】分岐命令のフォーマットを示す模式図である。
【図３】分岐予測情報のフォーマットを示す模式図である。
【図４】図１に示すマイクロプロセッサにおいて行われるパイプライン処理の一手順を示すフローチャートである。
【図５】閾値に基づく分岐予測判定処理を説明するための図である。
【図６】閾値に基づく別の分岐予測判定処理を説明するための図である。
【符号の説明】
【００５５】
１  プログラムカウンタ
２  マイクロ命令格納メモリ
３  デコーダ
４  命令レジスタ
５  アドレス生成回路
６  オペランド取り出し回路
７  演算結果格納レジスタ
８  分岐判定回路
９  パイプラインキャンセル判定回路
１０  分岐履歴バッファ
１１〜１４  予測情報持ち回りレジスタ
１５  分岐履歴バッファ格納情報生成回路
１６  分岐予測方向決定回路
１７  選択回路
【図１】
0004728877.tif 000002
【図２】
0004728877.tif 000003
【図３】
0004728877.tif 000004
【図４】
0004728877.tif 000005
【図５】
0004728877.tif 000006
【図６】
0004728877.tif 000007