(57)【特許請求の範囲】
【請求項１】
情報処理装置に含まれる分岐予測回路であって、
分岐履歴情報を記憶する記憶部と、
実行した分岐命令が分岐したかどうかを判断し、分岐した場合かつ前記分岐履歴情報が未登録の場合は、分岐先アドレスと分岐命令のアドレスとのアドレス差と、前記情報処理装置の命令デコード段階から命令実行段階までのパイプライン長との積が所定の値を越えるかどうかを判断し、前記所定の値を越える場合は、前記記憶部内の前記分岐履歴情報の書き換えを制御する制御回路と、
前記制御回路による制御を受けて、前記記憶部内の前記分岐履歴情報の書き換えを行う書き換え回路と、を有することを特徴とする分岐予測回路。
【請求項２】
分岐履歴情報を記憶する記憶部を有する分岐予測回路を含む情報処理装置において、
前記分岐履歴情報を前記記憶部に記憶する情報記憶工程と、
実行した分岐命令が分岐したかどうかを判断し、分岐した場合かつ前記分岐履歴情報が未登録の場合は、分岐先アドレスと分岐命令のアドレスとのアドレス差と、前記情報処理装置の命令デコード段階から命令実行段階までのパイプライン長との積が所定の値を越えるかどうかを判断する工程と、
前記所定の値を越える場合は、前記記憶部内の前記分岐履歴情報の書き換えを制御する工程と、
前記分岐命令を前記情報処理装置で実行する際に、前記分岐履歴情報に応じて分岐予測を行う工程と、
を備えることを特徴とする分岐予測方法。
【請求項３】
前記分岐予測回路の前記記憶部は前記分岐命令と前記分岐予測を表す前記分岐履歴情報を記憶する第２記憶部及び第１記憶部を含み、
前記情報記憶工程は、前記分岐履歴情報を前記第１記憶部又は前記第２記憶部に記憶する工程を含むとともに、前記分岐履歴情報を記憶する際に、記憶する時刻に応じた記憶順序情報を記録する工程を含み、
前記分岐履歴情報の書き換えを制御する工程は、書き換えを行う前記分岐履歴情報を、前記第１記憶部の前記分岐履歴情報又は前記第２記憶部の前記分岐履歴情報の内から、前記記憶順序情報に応じて選択する選択工程を含むことを特徴とする請求項２記載の分岐予測方法。
【請求項４】
前記分岐予測回路の前記記憶部は前記分岐命令と前記分岐予測を表す前記分岐履歴情報を記憶する第２記憶部及び第１記憶部を含み、
前記分岐履歴情報書き換えを制御する工程は、書き換えを行う前記情報を、前記第１記憶部の前記分岐履歴情報、又は、前記第２記憶部の上記分岐履歴情報の内から、交互に選択する選択工程を含むことを特徴とする請求項２記載の分岐予測方法。
【請求項５】
前記分岐予測回路の前記記憶部は前記分岐命令と前記分岐予測を表す前記分岐履歴情報を記憶する第２記憶部及び第１記憶部を含み、
前記分岐履歴情報の書き換えを制御する工程は、書き換えを行う前記分岐履歴情報を、前記第１記憶部の前記分岐履歴情報、又は、前記第２記憶部の前記分岐履歴情報の内から、ランダムに選択する選択工程を含むことを特徴とする請求項２記載の分岐予測方法。
【発明の詳細な説明】
【技術分野】
【０００１】
命令をパイプライン処理する中央処理装置における分岐予測方法、及び、その分岐予測方法を実行する分岐予測回路。
【背景技術】
【０００２】
命令コードをパイプラインにより処理するパイプライン処理プロセッサでは、命令コード処理の効率の低下を防止するため、命令コードを次々にフェッチし、パイプラインを構成する各段階を途切れなく動作させている。
また、命令コードの効率の低下を防止するため、分岐命令の動作を予測して、投機的に命令コードをフェッチすることにより、パイプライン動作を途切れないように維持することとしている。
【０００３】
そうすると、パイプライン動作を途切れなく維持するには、予測精度の高い分岐予測手法を用いる必要がある。
そこで、分岐命令コードに対応する分岐先又は分岐方向について、過去の履歴を記録し、記録した過去の履歴に基づいて分岐予測をする手法が、予測精度向上のために適用されている。
ここで、分岐予測に有効な分岐先又は分岐方向についての過去の履歴は、アプリケーションプログラムに含まれる分岐命令の個数や、各分岐命令の分岐方向の偏りの程度や、メモリ上における分岐命令の位置といったパラメータに依存する。
そのことは、記憶できる過去の履歴の量を一定とした場合には、分岐予測に有効な過去の履歴を優先して記憶しなければ、分岐予測精度が向上しないことを意味する。言い換えれば、分岐予測の精度をあげるには、上記のようなアプリケーションの性質を考慮して、分岐予測に有効な過去の履歴を取捨選択する必要があることを意味する。
【０００４】
すべての過去の履歴を記憶することとすると、過去の履歴を蓄積する記憶領域が増加してしまうため、限られた記憶領域で、すなわち、限られた過去の履歴の量によっていかに予測精度を向上させるかについて、数多くの提案がなされている（特許文献１  参照）。
しかし、分岐方向の偏りや、規則性を有する分岐命令の他に、分岐方向の偏りや、規則性がない分岐命令も数多く存在し、記憶するに値する分岐命令の過去の履歴の取捨選択は容易ではない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−９６００５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明によれば、分岐命令に対する過去の履歴の内、分岐予測に有効な過去の履歴を効率よく取得し、分岐予測の精度を高める分岐予測方法及びその分岐予測方法を実行する分岐予測回路を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記の課題を解決するため、本発明の一側面によれば、
分岐命令と分岐予測を表す情報を記憶する記憶部と、
分岐命令により設定された分岐条件と、実現した分岐とから、分岐予測が実現したか否か及び実現した分岐の属性を判断し、判断に応じて記憶部内の情報の書き換えを制御する制御回路と、
制御回路による制御を受けて、記憶部内の情報の書き換えを行う書き換え回路と、を備えることを特徴とする分岐予測回路が提供される。
【発明の効果】
【０００８】
本発明によれば、分岐命令に対する過去の履歴の内、分岐予測に有効な過去の履歴を効率よく取得し、分岐予測の精度を高める分岐予測方法及びその分岐予測方法を実行する分岐予測回路を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は実施例に関わるコンピュータ１０を示す図である。
【図２】図２は、図１のコンピュータ１０に対して入力した命令において、前方分岐及び後方分岐を説明する図である。
【図３】図３Ａ、Ｂは図１のコンピュータ１０に対して命令を入力したときのパイプライン動作を説明する図である。
【図４】図４は、ＢＴＢ（BranchTarget Buffer）エントリを蓄積するＢＴＢエントリ管理回路２００に新しい履歴情報含むＢＴＢエントリ又は新しいＢＴＢエントリを登録する際のフローチャートを示す。
【図５】図５はＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５に含まれるＢＴＢエントリ管理回路２００を示す回路ブロック図である。
【図６】図６はＢＴＢエントリ管理回路２００の予測動作について詳細に説明する図である。
【発明を実施するための形態】
【００１０】
本発明は、以下に説明する実施例に対し、当業者が想到可能な、設計上の変更が加えられたもの、及び、実施例に現れた構成要素の組み換えが行われたものも含む。また、本発明は、その構成要素が同一の作用効果を及ぼす他の構成要素へ置き換えられたもの等も含み、以下の実施例に限定されない。
【実施例】
【００１１】
図１は実施例に関わるコンピュータ１０を示す図である。コンピュータ１０は、Ｉ−Ｃａｃｈｅ１１、レジスタ１２、レジスタ１３、レジスタ１４、Ｄｅｃｏｄｅ１５、レジスタ１６、レジスタ１７、レジスタ１８、レジスタ１９、レジスタ２０、レジスタ２１、ＢＴＡＧ２２、ＩＦＥＡＧ２３、Ｓｅｌｅｃｔｏｒ２４、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５、ＲｅｇＮｏ２６、ＲｅｇｉｓｔｅｒＦｉｌｅ２７、Ｓｒｃ２８、ＡＬＵ／ＥＡＧ２９、Ｒｅｓｕｌｔ３０、Ｄ−Ｃａｃｈｅ３１、Ｓｅｌｅｃｔｏｒ３２、Ｗｒｉｔｅｄａｔａ３３、短い前方分岐ＦＬＡＧレジスタ３５、短い前方分岐ＦＬＡＧレジスタ３６、ＲＲＣＤレジスタ３７、及び、ＥＸＣＤレジスタ３８から構成されるパイプライン４０、５０を含むコンピュータである。なお、パイプラインは後に説明するように、ＩＦ（命令プリフェッチ）、ＩＤ（命令デコード）、ＲＲ（レジスターリード）、ＥＸ（命令実行）、ＭＡ（メモリアクセス）、ＷＢ（ライトバック）の段階からなっている。なお、図１において、点線は、上記パイプラインの各段階に属する回路の境目を表す。
【００１２】
命令プリフェッチ段階において、ＩＦＥＡＧ２３は次にフェッチする命令（インストラクション）が記憶されている記憶領域を示すアドレス、ＩＦＩＡ（Instruction Fetch Instruction Address）を計算により求める回路である。その後、ＩＦＥＡＧ２３はＳｅｌｅｃｔｏｒ２４及びＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５に対してＩＦＩＡを出力する。
Ｉ−Ｃａｃｈｅ１１はコンピュータ１０の外部から、矢印で示すように、外部バス３４を介して供給される命令（Ｉｎｓｔｒｕｃｔｉｏｎ）を蓄積している命令キャッシュである。そして、パイプライン処理中の命令プリフェッチ（ＩＦ）段階において、Ｉ−Ｃａｃｈｅ１１はＳｅｌｅｃｔｏｒ２４からＩＦＩＡを受け取ると、対応する命令（インストラクション(Instruction)）をＩ−Ｃａｃｈｅ１１が有する記憶領域から読出し、レジスタ１２に出力する。
命令プリフェッチ段階において、ＩＦＥＡＧ２３からＩＦＩＡを受け取ると、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５は分岐命令に対して、分岐方向や分岐先アドレスの予測を行う回路であり、分岐予測機構を含む。分岐予測の後、分岐予測に応じた分岐先を示すＩＦｔａｒｇｅｔをＳｅｌｅｃｔｏｒ２４に出力し、ＩＦＰＦ(Instruction Fetch Profile)をＩＤＰＦ(Instructiondecode Profile)としてレジスタ１４に出力する。
ＩＦＰＦとは２ビットからなるデジタルのカウント値であり、カウント値は分岐命令に対応するＩＦｔａｒｇｅｔにより示された分岐が起こる可能性の程度を示す。例えば、カウンタ値”１１”はストロングリーｔａｋｅｎ（分岐可能性大）を表し、カウンタ値”１０”はウィークリーｔｅｋｅｎ（分岐可能性小）を表し、カウンタ値”０１”はウィークリーｎｏｔｔａｋｅｎ（分岐しない可能性小）を表し、カウンタ値”００”はストロングリーｎｏｔｔａｋｅｎ（分岐しない可能性大）を表す。カウンタ値は分岐命令に対応して分岐が起こったか否かの評価に対応して更新される履歴情報である。例えば、分岐命令に対して、分岐しない場合、その分岐命令に対応するカウンタ値はデクリメント（減少）され、カウント値は「ウィークリーｎｏｔｔａｋｅｎ（分岐しない可能性大）」の方向に移行する。
命令プリフェッチ段階において、Ｓｅｌｅｃｔｏｒ２４は、分岐命令のときには、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５からのＩＦｔａｒｇｅｔとＩＦＩＡとの組合せを選択し、Ｉ−Ｃａｃｈｅ１１に出力する。ただし、ＢＴＡＧ２２から出力されたＥＸｔａｒｇｅｔにより、ＩＦｔａｒｇｅｔが示す分岐先と異なる分岐先が指定されたときは、ＥＸｔａｒｇｅｔを再度、Ｉ−Ｃａｃｈｅ１１に出力する。分岐命令でないときには、Ｓｅｌｅｃｔｏｒ２４はＩＦＥＡＧ２３からのＩＦＩＡのみをＩ−Ｃａｃｈｅ１１に出力する。
また、ＩＦＩＡは０番目ビットから３１番目ビットまでを有し、Ｓｅｌｅｃｔｏｒ２４はＩＦＩＡの１２番目のビットから３１番目のビットまでを、ＩＤＩＡ(Instruction decode Instruction Address)としてレジスタ１３に出力する。なお、ＩＤＩＡは、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５内の分岐予測機構が有する記憶領域に対するアドレスとして使用される。
【００１３】
次いで、パイプライン処理中の命令デコード段階（ＩＤ）において、レジスタ１２はＩ−Ｃａｃｈｅ１１から出力された命令（Instruction）を格納する命令格納レジスタである。
命令デコード段階において、レジスタ１３はＳｅｌｅｃｔｏｒ２４から出力されるＩＤＩＡを格納するアドレスレジスタである。
命令デコード段階において、レジスタ１４はＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５から出力されるＩＦＰＦを、ＩＤＰＦとして格納するプロファイルバッファである。
命令デコード段階において、Ｄｅｃｏｄｅ１５は命令（Instruction）から即値（immediate）をデコードし、分岐命令に対応する分岐先に関連するＲＲＦＬＡＧ(Register read flag)の論理値を算出し、ＲＲＢＣＤ(resisterread branch condition code)を算出する。
ここで、ＲＲＢＣＤは、複数の分岐条件の内、どの条件にあてはまったかを示すコードである。なお、分岐条件の中には、分岐がおきないという条件も含まれる。
また、ＲＲＦＬＡＧとは、分岐命令に関連する分岐先アドレスと分岐命令のアドレスとのアドレス差と、命令デコード段階から命令実行段階までのパイプライン長の積が４以下であって、その分岐が前方分岐のときに”１”、上記の積の結果が４より大きな数値であるか、又は、後方分岐のときに”０”となるものである。すなわち、分岐の属性が短くかつ前方分岐であることを示すフラグである。なお、上記では、アドレス差×パイプライン長が４以下としたが、数値は４以外でもよい。また、パイプライン長は、コンピュータ１０が有するパイプラインの数にも依存する。すなわち、パイプライン長はパイプライン構造に依存する数値である。
【００１４】
パイプラインのレジスターリード段階（ＲＲ）において、レジスタ１６はＤｅｃｏｄｅ１５から供給されたｉｍｍｅｄｉａｔｅ（即値：処理対象を特定する値）を格納するレジスタである。また、ＲｅｇＮｏ２６はＤｅｃｏｄｅ１５から供給されたｉｍｍｅｄｉａｔｅを格納するレジスタである。
レジスターリード段階において、ＲｅｇｉｓｔｅｒＦｉｌｅ２７は、ＲｅｇＮｏ２６からｉｍｍｅｄｉａｔｅを受け取り、ｉｍｍｅｄｉａｔｅを蓄積する記憶回路である。
レジスターリード段階において、レジスタ１７はＤｅｃｏｄｅ１５から出力されるｉｍｍｅｄｉａｔｅに関連するＲＲＩＡ(resister read instruction address)を格納するアドレスレジスタである。レジスタ１３に格納されたＩＤＩＡが、ＲＲＩＡ(Register read instruction address)としてレジスタ１７に格納される。
レジスターリード段階において、レジスタ１８はレジスタ１４から出力されるＩＤＰＦを、ＲＲＰＦ(Register read profile)として格納するプロファイルレジスタである。
レジスターリード段階において、短い且つ前方分岐ＦＬＡＧレジスタ３５はＤｅｃｏｄｅ１５から出力される分岐状態に関連するＲＲＦＬＡＧを格納するレジスタである。
レジスターリード段階において、分岐コンディションレジスタ３７はＤｅｃｏｄｅ１５から出力されるＲＲＢＣＤを格納するレジスタである。
【００１５】
パイプラインの命令実行段階（ＥＸ）において、レジスタ１９はレジスタ１６に格納されていたＩｍｍｅｄｉｔｅを受け取り、格納するレジスタである。
パイプラインの命令実行段階（ＥＸ）において、レジスタ２０はレジスタ１７が格納するＲＲＩＡを受け取り、ＥＸＩＡ(Execute instruction Address)として格納するアドレスレジスタである。
パイプラインの命令実行段階（ＥＸ）において、レジスタ２１はレジスタ１８に格納されたＲＲＰＦを受け取り、ＥＸＰＦ(Execute Profile)として格納するプロファイルバッファである。
パイプラインの命令実行段階（ＥＸ）において、短い且つ前方分岐ＦＬＡＧレジスタ３６は短い且つ前方分岐ＦＬＡＧレジスタ３５から供給されたＲＲＦＬＡＧを受け取り、ＥＸＦＬＡＧ(Execute flag)として格納するレジスタである。
パイプラインの命令実行段階（ＥＸ）において、レジスタ３８は、レジスタ３７が格納しているＲＲＢＣＤを受け取り、ＥＸＢＣＤ(Execute branch condition code)として格納する。
パイプラインの命令実行段階（ＥＸ）において、ＢＴＡＧ２２は予測した分岐が行われず、分岐予測ミスの場合及び分岐予測をしなかった場合に、分岐先アドレスを計算し、その分岐先のアドレス(ＥＸ  ｔａｒｇｅｔ)をＳｅｌｅｃｔｏｒ２４へ出力するとともに、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５に出力する回路である。
パイプラインの命令実行段階（ＥＸ）において、Ｓｒｃ２８は、ＲｅｇｉｓｔｅｒＦｉｌｅ２７から読み出したｉｍｍｅｄｉｔｅ（処理対象を特定する値）を格納するレジスタである。
パイプラインの命令実行段階（ＥＸ）において、ＡＬＵ／ＥＡＧ２９は命令で指定された演算、データアクセスのためのアドレス計算を行う。ここで、演算とは、例えば、値の大小比較、減算、加算などである。また、ＡＬＵ／ＥＡＧ２９は分岐命令に関連するｃｏｎｄｉｔｉｏｎ  ｃｏｄｅ（分岐条件）を、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５に出力する。
【００１６】
メモリアクセスの段階（ＭＡ）において、Ｒｅｓｕｌｔ３０はＡＬＵ／ＥＡＧ２９で行った演算の結果及びデータアクセスのためのアドレス計算の結果を格納するレジスタである。
メモリアクセスの段階（ＭＡ）において、Ｄ−Ｃａｃｈｅ３１はＲｅｓｕｌｔ３０から供給された演算の結果及びデータアクセスのためのアドレス計算の結果を一時格納し、その後、Ｓｅｌｅｃｔｏｒ３２に出力するキャッシュである。
メモリアクセスの段階（ＭＡ）において、Ｓｅｌｅｃｔｏｒ３２はＲｅｓｕｌｔ３０からの演算の結果及びデータアクセスのためのアドレス計算の結果、又は、Ｄ−Ｃａｃｈｅ３１に格納された演算の結果及びデータアクセスのためのアドレス計算の結果の内、どちらかを選択してＷｒｉｔｅｄａｔａ３３に出力するデータを選択する回路である。
ライトバックの段階（ＷＢ）において、Ｗｒｉｔｅｄａｔａ３３はＲｅｇｉｓｔｅｒＦｉｌｅ２７に格納するデータを蓄積するレジスタである。
【００１７】
図２は、図１のコンピュータ１０に対して入力した命令において、前方分岐及び後方分岐を説明する図である。
ラベルＬＯＯＰに引き続くライン１０から１１０までのプログラムは、いわゆるＤＯループを構成する。ライン１０に示す命令、＠（ｒ８，ｒ０），ｒ１は、数値ｒ０と、ｒ８とで指定したレジスタにｒ１を格納する命令である。ライン２０に示す命令、＠（ｒ９，ｒ０），ｒ２は、ｒ０とｒ９により示したレジスタにｒ２を代入する命令である。ライン３０に示す命令、ｃｍｐ  ｒ１，ｒ２は、数値ｒ１と数値ｒ２を比較する命令である。ライン４０に示す命令、ｂｉｔ  ＿Ｌａｂｅｌ１は、ｒ１＞ｒ２のときはＬａｂｅｌ１のラインへ分岐する命令であることを示す。ライン５０に示す命令、ｓｕｂ  ｒ１，ｒ２，ｒ３は、ｒ３＝ｒ１−ｒ２の演算を実行することを示す。ライン６０に示す命令、ｂｒａ＿Ｌａｂｅｌ２は、Ｌａｂｅｌ２のラインへ分岐する命令であることを示す。ライン７０に示す命令、ｓｕｂ  ｒ２，ｒ１，ｒ３は、ｒ３＝ｒ２−ｒ１の演算を実行することを示す。ライン８０に示す命令、ｓｔ  ｒ３，＠（ｒ１０，ｒ０）は、ｒ３をｒ１０とｒ０により指定したレジスタに代入することを示す。ライン９０は、ｒ０に１を足してｒ０とすることを示す。ライン１００は、ｒ０と１００を比較することを示す。ライン１１０に示す命令、ｂｌｔ  ＿ｌｏｏｐは、ｒ０が１００未満のときはループを続け、１００以上となったときにループを終了することを示す。
【００１８】
上記のような一続きの命令において、ライン４０に示す命令、ｂｉｔ  ＿Ｌａｂｅｌ１についての分岐は、データ依存で分岐方向が代わる。そのため、ライン４０に示す命令に対する分岐方向の予測は困難ある。一方、ライン６０に示す命令、ｂｒａ＿Ｌａｂｅｌ２についての分岐は、かならず、ライン番号の大きな方向（前方）に飛ぶ分岐である。従って、分岐方向は固定であるので、ライン６０に示す命令に対する分岐予測はかならず当たる。ライン１１０に示す命令、ｂｌｔ  ＿ｌｏｏｐについての分岐は、分岐する確率が高く、分岐するときには、ライン番号が小さくなる方向（後方）に分岐する。
上記のように、分岐命令において、分岐方向及び分岐距離は、その命令コードから、判別することができる。そこで、命令デコード段階において、Ｄｅｃｏｄｅｒ１５は、分岐方向及び分岐距離を、命令から認識し、「分岐先アドレスと現在アドレスとのアドレス差」と、「命令デコード段階から命令実行段階までのパイプライン長」の積が４以下であって、前方に分岐するときは短い且つ前方分岐ＦＬＡＧの論理値を”１”に設定し、上記の積が４より大きな数値のとき、又は、後方分岐であるときには、短い且つ前方分岐ＦＬＡＧの論理値を”０”に決定する。上記より、短い且つ前方分岐ＦＬＡＧはその命令に対する分岐の属性を示すＦＬＡＧであると言える。
【００１９】
図３Ａ、Ｂは図１のコンピュータ１０に対して命令を入力したときのパイプライン動作を説明する図である。なお、パイプラインは、ＩＦ（命令プリフェッチ）、ＩＤ（命令デコード）、ＲＲ（レジスターリード）、ＥＸ（命令実行）、ＭＡ（メモリアクセス）、ＷＢ（ライトバック）の段階からなっている。
図３Ａは、ライン４０においてＩＦが実現した場合のパイプラインの動作を示す。図３Ａにおいて、命令ｃｍｐ  ｒ１、ｒ２、命令ｂｌｔ＿ｌａｂｅｌ１、命令ｓｕｂ  ｒ１、ｒ２、ｒ３、（命令ｂｒａ＿ｌａｂｅｌ１）、（命令ｓｕｂ  ｒ１、ｒ２、ｒ３）、命令ｓｔ  ｒ３，＠（ｒ９，ｒ０）を行う場合に、パイプライン動作において分岐予測があたった例を示す。上記の命令の主旨は、以下である。まず数値ｒ１と数値ｒ２を比較する。次いで、ｒ１が大きければ、ｒ３＝ｒ１−ｒ２を行い、ｒ２が大きければ、ｒ３＝ｒ２−ｒ１を行う。ついで、結果ｒ３を数値ｒ９と数値ｒ０で指定されるレジスタに格納する。
【００２０】
そこで、図１に示すコンピュータ１０では、パイプライン４０、５０により、上記の命令を並列して２個ずつ処理している。まず、命令ｃｍｐ  ｒ１、ｒ２、命令ｂｌｔ＿ｌａｂｅｌ１を命令フェッチ段階にセットする。次いで、パイプライン４０の分岐予測機構を含むＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５からのブランチアドレスの出力により命令ｓｕｂ  ｒ１、ｒ２、ｒ３、命令ｓｔ  ｒ３，＠（ｒ９，ｒ０）について命令フェッチ段階にセットする。ここで、最初に命令フェッチ段階にセットした命令ｃｍｐ  ｒ１、ｒ２、命令ｂｌｔ＿ｌａｂｅｌ１が命令実行段階にきて、結果が確定し、分岐予測があたると、次に命令フェッチ段階にセットされたｓｕｂ  ｒ２、ｒ１、ｒ３、命令ｓｔ  ｒ３，＠（ｒ９，ｒ０）はそのまま継続して実行が進められる。その結果、パイプライン４０、５０のＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５において、分岐予測が当たったことについてブランチアドレスのプロファイル（履歴情報）の更新が行われる。そして、分岐方向が決まったら実行しない命令、ｓｕｂ  ｒ２、ｒ１、ｒ３はキャンセルされる。
【００２１】
図３Ｂは、ライン６０においてｅｌｓｅが実現した場合のパイプラインの動作を示す。図３Ｂにおいて、命令ｃｍｐ  ｒ１、ｒ２、命令ｂｌｔ＿ｌａｂｅｌ１、命令ｓｕｂ  ｒ１、ｒ２、ｒ３、命令ｂｒａ＿ｌａｂｅｌ１、命令ｓｕｂ  ｒ１、ｒ２、ｒ３、命令ｓｔ  ｒ３，＠（ｒ９，ｒ０）を行う場合に、パイプライン動作において分岐予測があたった例を示す。上記の命令の主旨は、以下である。まず数値ｒ１と数値ｒ２を比較する。次いで、ｒ１が大きければ、ｒ３＝ｒ１−ｒ２を行い、ｒ２が大きければ、ｒ３＝ｒ２−ｒ１を行う。ついで、結果ｒ３を数値ｒ９と数値ｒ０で指定されるレジスタに格納する。
【００２２】
そこで、図１に示すコンピュータ１０では、パイプライン４０、５０に対して、まず、命令ｃｍｐ  ｒ１、ｒ２、命令ｂｌｔ＿ｌａｂｅｌ１を命令フェッチ段階にセットする。
次いで、同様にパイプライン４０、５０の分岐予測機構を含むＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５からのブランチアドレスの出力により命令ｓｕｂ  ｒ１、ｒ２、ｒ３、命令ｓｔ  ｒ３，＠（ｒ９，ｒ０）について命令フェッチ段階にセットする。ここで、分岐予測がはずれるように、命令実行段階にセットされた命令ｃｍｐ  ｒ１、ｒ２、命令ｂｌｔ＿ｌａｂｅｌ１の結果が確定すると、命令ｓｕｂ  ｒ１、ｒ２、ｒ３、命令ｓｔ  ｒ３，＠（ｒ９，ｒ０）に対するパイプライン動作は停止される。そして、正しい分岐先の命令ｂｒａ＿ｌａｂｅｌ１、及び、命令ｓｕｂ  ｒ１、ｒ２、ｒ３が行われる。命令ｓｕｂ  ｒ１、ｒ２、ｒ３、命令ｓｔ  ｒ３，＠（ｒ９，ｒ０）に対するパイプライン動作が停止されたときに、パイプライン５０のＡＬＵ／ＥＡＧ２９から演算結果は、パイプライン４０、５０のＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５へ伝達される。その結果、パイプライン４０、５０のＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５において、分岐予測がはずれたことについてブランチアドレスのプロファイル（履歴情報）の更新が行われる。
【００２３】
図４は、ＢＴＢ（BranchTarget Buffer）エントリを蓄積するＢＴＢエントリ管理回路２００に新しい履歴情報含むＢＴＢエントリ又は新しいＢＴＢエントリを登録する際のフローチャートを示す。ここで、ＢＴＢエントリを記憶するＢＴＢエントリ管理回路２００は分岐予測機構を含むＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５に備えられている。また、ＢＴＢエントリは分岐命令（ｉｎｓｔｒｕｃｔｉｏｎ）の格納アドレス、分岐先を示すアドレス（ｔａｒｇｅｔ）、その分岐が起こる可能性の程度を示すプロファイル（ＰＦ：履歴情報）、及び、ＢＴＢエントリが確定したものであることを示すＶＦＬＡＧ(valid flag)を含む。
【００２４】
コンピュータ１０において、ＢＴＡＧ２２から実際の分岐条件を示すＥＸｔａｒｇｅｔがＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５に出力されたときに、図３のフローチャートにおけるオペレーションｏｐ１００の判断が行われる。
オペレーションｏｐ１００において、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５は予測に基づく分岐が行われたかいなか、すなわち、予測のもととなったＢＴＢエントリに対応する分岐がｔａｋｅｎになったか否かを判断する。分岐が行われたとき（ｔａｋｅｎになったとき）はオペレーション１２０へ進む。一方、分岐が行われなかったとき（ｎｏｔｔａｋｅｎのとき）はオペレーション１１０へ進む。
オペレーションｏｐ１１０においては、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５は分岐が行われなかったブランチアドレスを含むＢＴＢエントリがＢＴＢ管理回路２００に登録されているかを判断する。そのＢＴＢエントリがＢＴＢ管理回路２００に登録されていなければ、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５はＢＴＢ管理回路２００に記憶されているすべてのＢＴＢエントリに修正を加えずに動作を終了する。
【００２５】
オペレーションｏｐ１２０においては、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５は分岐が行われたブランチアドレスを含むＢＴＢエントリがＢＴＢ管理回路２００に登録されているかを判断する。登録されていた場合はオペレーション１３０へ進む。登録されていなかった場合は、オペレーション１４０へ進む。
オペレーションｏｐ１３０においては、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５は分岐が行われたブランチアドレスを含むＢＴＢエントリのプロファイル（履歴情報）を更新する。
【００２６】
オペレーションｏｐ１４０においては、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５は分岐が行われたブランチアドレスを含むＢＴＢエントリに付属する、ＲＲＦＬＡＧ又はＥＸＦＬＡＧ（短い且つ前方分岐であることを示すＦＬＡＧ）が論理値”１”である場合は、すなわち、そのＢＴＢエントリに関連する分岐の属性が短距離かつ前方分岐であった場合は、ＢＴＢ管理回路２００においてＢＴＢエントリのプロファイル（履歴情報）を更新及びＢＴＢエントリのリプレースを実行せず、動作を終了する。一方、ＲＲＦＬＡＧ又はＥＸＦＬＡＧが論理値”０”であった場合は、オペレーション１６０へ進む。
【００２７】
ここで、分岐命令により起こる分岐の属性が、短距離且つ前方向分岐であるときには、図３に示すように、早い時期に命令のキャンセルが起こる。従って、パイプラインにおいて、比較的無駄な動作が少ない。そうすると、パイプラインに負荷がかからない命令は分岐予測をしても、その分岐予測は有効性に乏しい。また、そのような分岐命令に対して分岐予測を行うため、その分岐命令に関するＢＴＢエントリをＢＴＢ管理回路２００に登録すると、分岐予測をおこなった方が有効な命令に対するＢＴＢエントリをＢＴＢ管理回路２００に登録することができなくなる。ＢＴＢエントリを記憶する記憶領域（ＢＴＢ回路２４０、２５０）は限られているからである。
【００２８】
そこで、ＢＴＢエントリに関連するＲＲＦＬＡＧ又はＥＸＦＬＡＧの論理値が”１”であったときに、履歴情報の更新又はＢＴＢエントリのリプレースを行わないことによって、分岐予測が有効ではない命令に対するＢＴＢエントリを記憶領域（ＢＴＢ２４０、２５０）に登録しないこととしている。上記より、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５は、短い且つ前方分岐ＦＬＡＧ、すなわち、分岐情報に基づいて、ＢＴＢエントリの登録の可否を判断している。
オペレーションｏｐ１６０においては、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５は分岐が行われたブランチアドレスを含むＢＴＢエントリがＢＴＢの記憶領域に空きがあるか否かを判断する。ＢＴＢの記憶領域に空きがある場合は、オペレーション１７０へ進む。記憶領域に空きがない場合はオペレーション１８０へ進む。
【００２９】
オペレーション１７０においては、空いている記憶領域にエントリを登録する。その後、オペレーション１９０へ進む。
【００３０】
オペレーション１８０においては、ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５は、すでに登録されているＢＴＢエントリの内、ＬＲＵ(Late Recently Used)管理回路により最後に参照された時刻が古いＢＴＢエントリを検出する。そこで、最後に参照された時刻が古いＢＴＢエントリを、新しく登録しようするＢＴＢエントリに置き換える。その後、オペレーション１９０へ進む。なお、上記のおいては、参照された時刻によって、古いＢＴＢエントリか新しいＢＴＢエントリかを検出したが、参照された時刻に基づいて設定された順序情報によって、古いＢＴＢエントリか新しいＢＴＢエントリかを検出することとしてもよい。
なお、最後に参照された時刻が古いＢＴＢエントリが複数存在する場合は、ＢＴＢエントリのＢＴＢ２４０、２５０内におけるアドレスに応じて順番に置き換える古いＢＴＢエントリを選択してもよいし、アドレスに応じてランダムに置き換える古いＢＴＢエントリを選択してもよい。
オペレーション１９０においては、そのブランチアドレスを含むＢＴＢエントリにおけるプロファイル（履歴情報）を初期化する。初期化とは、プロファイルのカウンタ値を予め決められた値に設定することをいい、例えば、カウンタ値を”１１”（ストロングリーｔａｋｅｎ（分岐可能性大））に設定する。
【００３１】
図５はＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ２５に含まれるＢＴＢエントリ管理回路２００を示す回路ブロック図である。
ＢＴＢエントリ管理回路２００はｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ−ｒｅｓｉｓｔｅｒ２１０、ＬＲＵ管理回路２３０、ＢＴＢ２４０、２５０、リプレース制御回路２６０、マッチング検出回路２８０、２９０、マルチプレクサ３００、及び、制御回路３１０から構成されている。
【００３２】
命令プリフェッチ段階において、ＢＴＢエントリ管理回路２００は、フェッチした分岐条件を示す命令に対して、分岐先アドレスの予測を行う。詳細については後に図６を用いて説明する。
【００３３】
パイプラインの命令実行段階（ＥＸ）において、ＢＴＢエントリ管理回路２００は、分岐予測結果に基づいて、ＢＴＢエントリのプロファイルの更新又はＢＴＢエントリのリプレースを行うかの判断、ＢＴＢエントリのプロファイルの更新、ＢＴＢエントリのリプレースを行うかの判断をする。
ｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ−ｒｅｓｉｓｔｅｒ２１０は分岐命令に対する分岐条件を記憶するレジスタである。そして、ｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ−ｒｅｓｉｓｔｅｒ２１０は、分岐条件を制御回路３１０に出力する。
【００３４】
制御回路３１０は、分岐命令を実行する際に、図４を用いて説明した判断を行う。そして、ＢＴＢ２４０、２５０にＢＴＢエントリを登録するか、又は、すでに登録済みのＢＴＢエントリを、現在実行中の分岐命令に関連するＢＴＢエントリにリプレースする必要があるか、又は、すでに登録済みのＢＴＢエントリのプロファイル（履歴情報）を更新する必要があるかを判断するため、リプレース制御回路２６０及びＬＲＵ管理回路２３０へ活性化信号を出力する。
【００３５】
まず、制御回路３１０はｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ−ｒｅｓｉｓｔｅｒ２１０から分岐条件を受け取り、ＢＴＡＧ２２から受け取ったＥＸＢＣＤとから、分岐ｔａｋｅｎとなったか否かを判断する。さらに、マッチング検出回路２８０のマッチング信号によって、分岐ｔａｋｅｎとならなかった分岐命令と分岐予測の組合せに関わるＢＴＢエントリがＢＴＢ２４０又はＢＴＢ２５０に登録されていたかを判断し、さらに、分岐ｔａｋｅｎとなった分岐命令と分岐予測の組合せに関わるＢＴＢエントリがＢＴＢ２４０又はＢＴＢ２５０に登録されていたかを判断する。
その結果、分岐ｔａｋｅｎとならなかった場合において、さらに、その分岐命令と分岐予測の組合せに関わるＢＴＢエントリがＢＴＢ２４０又はＢＴＢ２５０に登録されていた場合には、制御回路３１０はリプレース制御回路２６０に活性化信号を送付し、ＥＸＩＡをアドレスとしてＢＴＢ２４０又はＢＴＢ２５０にアクセスし、そのアドレスで指定された記憶領域に登録されているＢＴＢエントリのＰＦ(プロファイル:履歴情報)を、履歴情報のカウント値を下げるように、書き換える。
【００３６】
一方、分岐ｔａｋｅｎとなった場合において、さらに、その分岐命令と分岐予測の組合せに関わるＢＴＢエントリがＢＴＢ２４０又はＢＴＢ２５０に登録されていた場合には、制御回路３１０はリプレース制御回路２６０に活性化信号を送付し、ＢＴＢ２４０又はＢＴＢ２５０に登録されているＢＴＢエントリのＰＦ(プロファイル:履歴情報)を、履歴情報のカウント値を上げるように書き換える。すなわち、制御回路３１０はＥＸＰＦのカウント値を一つあげた後、ＥＸＰＦをリプレース制御回路２６０に送り、リプレース制御回路２６０はＢＴＢエントリのＰＦをＥＸＰＦに置き換える。
【００３７】
ところで、分岐ｔａｋｅｎとなった場合において、さらに、マッチング検出回路２８０のマッチング信号より判断して、その分岐命令と分岐予測の組合せに関わるＢＴＢエントリがＢＴＢ２４０又はＢＴＢ２５０に登録されていなかった場合には、制御回路３１０はＥＸＦＬＡＧによって、さらに、分岐の属性が短距離かつ前方分岐であったか否かを判断する。その結果、短距離かつ前方分岐であったときには、制御回路３１０はリプレース制御回路２６０を活性化しない。
一方、分岐の属性が短距離かつ前方分岐でなかったときには、制御回路３１０はリプレース制御回路２６０を活性化し、ＥＸＩＡをアドレスとしてＢＴＢ２４０又はＢＴＢ２５０にアクセスし、ＢＴＢ２４０又はＢＴＢ２５０に空き領域があるか否かを判断する。
ＢＴＢ２４０又はＢＴＢ２５０に空き領域があった場合は、分岐ｔａｋｅｎとなった、その分岐命令と分岐予測の組合せに関わるＢＴＢエントリを空き領域に登録するように、制御回路３１０はＥＸＩＡをアドレスとして使用し、リプレース制御回路２６０を制御する。
【００３８】
ＢＴＢ２４０又はＢＴＢ２５０に空き領域がなかった場合は、制御回路３１０はＬＲＵ管理回路２３０を活性化する信号を出力する。ＬＲＵ管理回路２３０はＥＸＩＡで示されたＢＴＢ２４０の記憶領域に登録されているＢＴＢエントリの登録時刻及びＢＴＢ２５０の領域に登録されているＢＴＢエントリの登録時刻をリプレース制御回路２６０に送信する。リプレース制御回路２６０は、ＢＴＢエントリの登録時刻に基づいて、上記の２つのＢＴＢエントリの内、古い登録時刻を有するＢＴＢエントリを特定する。リプレース制御回路２６０は、古い登録時刻を有するＢＴＢエントリを、分岐ｔａｋｅｎとなった、その分岐命令と分岐予測の組合せに関わるＢＴＢエントリにリプレースする。
なお、上記では、ＬＲＵ管理回路２３０は登録時刻を管理することとしたが、登録時刻に基づいた順序情報を管理することとしてもよい。その場合、リプレース制御回路２６０はＬＲＵ管理回路２３０からの順序情報を受け、古いＢＴＢエントリから新しいＢＴＢエントリかを特定する。
ところで、上記では、ＬＲＵ管理回路２３０における登録時刻の新しい、古いによって、又は、順序情報に基づいて置き換えるＢＴＢエントリを選択したが、ＢＴＢ２４０に記憶されたＢＴＢエントリと、ＢＴＢ２５０に記憶されたＢＴＢエントリと、を交互に選択するラウンドロピンアルゴリズムによって置き換えるＢＴＢエントリを選択してもよい。さらに、ＢＴＢ２４０に記憶されたＢＴＢエントリと、ＢＴＢ２５０に記憶されたＢＴＢエントリとから、ランダムアルゴリズムによって、置き換えるＢＴＢエントリを選択してもよい。
【００３９】
なお、上記において、分岐ｔａｋｅｎとなった、その分岐命令と分岐予測の組合せに関わるＢＴＢエントリをＢＴＢ２４０又はＢＴＢ２５０に登録するとき、及び、登録時刻が古いＢＴＢエントリをリプレースするときには、新しいＢＴＢエントリのＰＦ（履歴情報）をリプレース制御回路２６０は、初期値にリセットする。例えば、初期値とはストロングリーｔａｋｅｎ（分岐可能性大）に相当するカウント値”１１”とすることが考えられる。
また、ＬＲＵ管理回路２３０は、ＢＴＢ２４０又はＢＴＢ２５０において新しＢＴＢエントリにリプレースが行われるときに、登録時刻を記録する。ただし、登録時刻そのものを記録するのみに限られず、登録時刻に応じた登録順序情報を記録することであってもよい。
【００４０】
図６はＢＴＢエントリ管理回路２００の予測動作について詳細に説明する図である。なお、図６は図５の回路ブロック図から予測動作を行う回路ブロックを抜き出した回路ブロック図である。
命令プリフェッチ段階において、ＢＴＢエントリ管理回路２００は、フェッチした分岐条件を示す命令に対して、分岐先アドレスの予測を行う。
【００４１】
ＢＴＢ２４０、２５０はＢＴＢエントリを記憶し、リプレース回路２６０からのアドレスに従って、ＢＴＢエントリを読み出す回路である。
制御回路３１０はＩＦＩＡを受け取ると、活性化信号をリプレース回路２６０に対して送信する。リプレース回路２６０は、ＩＦＩＡの１２ビット目から３１ビット目までをアドレスとして使用し、そのアドレスにより指定されたＢＴＢ２４０の領域及びＢＴＢ２５０の領域からＢＴＢエントリを読み出す。ここで、ＢＴＢエントリは５３ビットからなり、ＩＦＰＦに相当する部分は２ビット、ＩＦｔａｒｇｅｔに相当する部分は３０ビット、ＩＦＩＡの１２ビット目から３１ビット目に相当する部分は２０ビット、ＶＦＬＡＧに相当する部分は１ビットである。従って、分岐予測の精度をあげるために、ＢＴＢエントリ数を増やすと、ＢＴＢ２４０、２５０が占める面積は増加する。
【００４２】
マッチング検出回路２８０、２９０はＢＴＢ２４０、２５０から出力されるＩＡ３１−１２と、入力されたＩＦＩＡの１２ビット目から３１ビット目を比較し、それぞれ、一致信号をマルチプレクサ３００及び制御回路３１０へ出力する回路である。ただし、一致信号を出力するのは、ＢＴＢエントリのＶＦＬＡＧの論理が”１”のときのみである。
マルチプレクサ３００はＢＴＢ２４０、２５０それぞれから出力される一致信号、ＩＦｔａｒｇｅｔ、及び、ＩＦＰＦを受け、ＢＴＢ２４０、２５０から出力されたＩＦＰＦのカウンタ値が大きい方に対応するＩＦｔａｒｇｅｔと、そのＩＦＰＦを出力する。なお、ＩＦｔａｒｇｅｔはＳｅｌｅｃｔｏｒ２４へ出力され、ＩＦＰＦはレジスタ１４へ出力される。
【００４３】
以上より、分岐予測回路（ＢＴＢ管理回路２００）は、
分岐命令と分岐予測を表す情報（ＢＴＢエントリ）を記憶する記憶部（ＢＴＢ２４０、２５０）と、
上記分岐命令により設定された分岐条件（ｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ−ｒｅｓｉｓｔｅｒ２１０に格納されたｃｏｎｄｉｔｉｏｎ  ｃｏｄｅ）と、実現した分岐（ＥＸＢＣＤ）とから、上記分岐予測が実現したか否か及び上記実現した分岐の属性を判断し、上記判断に応じて上記記憶部内の上記情報の書き換えを制御する制御回路（制御回路３１０）と、
上記制御回路（制御回路３１０）による制御を受けて、上記記憶部内の上記情報の書き換えを行う書き換え回路と、を備えることを特徴とする。
【００４４】
さらに、分岐予測回路（ＢＴＢ管理回路２００）は、
上記制御回路による上記実現した分岐の属性の判断は、「分岐先アドレスと分岐命令のアドレスとのアドレス差」と、「命令デコード段階から命令実行段階までのパイプライン長」の積に基づいて行うことを特徴とする。
【００４５】
分岐予測方法は、
分岐命令と分岐予測を表す情報（ＢＴＢエントリ）を記憶する第１記憶部（ＢＴＢ２４０）を有し、分岐命令を実行する処理装置（コンピュータ１０）に含まれる分岐予測回路（ＢＴＢ管理回路２００）において、
上記情報を記憶部に記憶する情報記憶工程と、
上記分岐命令により設定された分岐条件（ｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ−ｒｅｓｉｓｔｅｒ２１０に格納されたｃｏｎｄｉｔｉｏｎ  ｃｏｄｅ）と、実現した分岐（ＥＸＢＣＤ）とから、上記分岐予測が実現したか否か及び上記実現した分岐の属性を判断する工程と、
上記判断に応じて上記記憶部内の上記情報の書き換えを行う情報書き換え工程と、
上記分岐命令を処理装置で実行する際に、上記情報に応じて分岐予測を行う工程と、
を備えることを特徴とする。
【００４６】
さらに、上記の分岐予測方法は、
上記実現した分岐の属性の判断は、「分岐先アドレスと分岐命令のアドレスとのアドレス差」と、「命令デコード段階から命令実行段階までのパイプライン長」の積に基づいて行うことを特徴とする。
【００４７】
さらに、上記の分岐予測方法において、
上記分岐予測回路は第１記憶部（ＢＴＢ２４０）に加え、分岐命令と分岐予測を表す情報（ＢＴＢエントリ）を記憶する第２記憶部（ＢＴＢ２５０）を含み、
上記情報記憶工程は、前記情報を前記第２記憶部に記憶する工程を含むとともに、上記情報を記憶する際に、記憶する時刻に応じた記憶順序情報（登録順序情報）を記録する工程を含み、
上記情報書き換え工程は、書き換えを行う上記情報を、上記第１記憶部の上記情報又は上記第２記憶部の上記情報内から、上記記憶順序情報に応じて選択する選択工程を含むことを特徴とする。
【００４８】
さらに、上記の分岐予測方法は、
上記分岐予測回路は第１記憶部（ＢＴＢ２４０）に加え、分岐命令と分岐予測を表す情報（ＢＴＢエントリ）を記憶する第２記憶部（ＢＴＢ２５０）を含み、
上記情報書き換え工程は、書き換えを行う上記情報を、上記第１記憶部の上記情報、又は、上記第２記憶部の上記情報の内から、交互に選択する選択工程を含むことを特徴とする。
【００４９】
さらに、上記の分岐予測は、
上記分岐予測回路は第１記憶部（ＢＴＢ２４０）に加え、分岐命令と分岐予測を表す情報（ＢＴＢエントリ）を記憶する第２記憶部（ＢＴＢ２５０）を含み、
上記情報書き換え工程は、書き換えを行う上記情報を、上記第１記憶部の上記情報、又は、上記第２記憶部の上記情報の内から、ランダムに選択する選択工程を含むことを特徴とする。
【００５０】
分岐命令により起こる分岐が、短距離且つ前方向分岐であるときには、図３に示すように、早い時期に命令のキャンセルが起こる。従って、パイプラインにおいて、比較的無駄な動作が少ない。そうすると、パイプラインに負荷がかからない分岐命令は分岐予測をしても、その分岐予測は有効性に乏しい。また、そのような命令に対して分岐予測を行うため、その分岐命令に関するＢＴＢエントリをＢＴＢ回路２４０、２５０に登録すると、分岐予測をおこなった方が有効な命令に対するＢＴＢエントリをＢＴＢ回路２４０、２５０に登録することができなくなる。ＢＴＢエントリを記憶する記憶領域（ＢＴＢ回路２４０、２５０）は限られているからである。
【００５１】
ここで、分岐予測をおこなった方が有効な分岐命令とは、分岐命令と分岐先の距離と、パイプライン長とから決定される数値が、予め決められた数値より大きい命令をいう。さらに、分岐予測をおこなった方が有効性に乏しい分岐命令とは、分岐命令と分岐先の距離と、パイプライン長とから決定される数値が、予め決められた数値未満の命令をいう。
従って、分岐予測をおこなった方が有効性に乏しい分岐命令のＢＴＢエントリをＢＴＢ回路２４０、２５０に登録しないこととすれば、分岐予測をおこなった方が有効な分岐命令の内、特に、分岐方向や分岐先に規則性のある分岐命令のＢＴＢエントリを、効率よくＢＴＢ回路２４０、２５０に登録することができる。
【００５２】
従って、すでに登録されているＢＴＢエントリと、新しく登録したいＢＴＢエントリに置き換えるか否かについて、分岐情報に基づいて判断をおこなって、置き換えをすることとすれば、記憶するＢＴＢエントリの数を多くすることなく、すなわち、予測回路（ＢＴＢエントリ管理回路２００）の回路面積の増大がなく、予測機構の予測確率を上昇させることになる。
【００５３】
なお、パイプラインに負荷がかかるか、かからないかの判断のもとになる、分岐情報は、「分岐先アドレスと分岐命令のアドレスとのアドレス差」と、「命令デコード段階から命令実行段階までのパイプライン長」の積が４以下であるか否かに関するものであることが望ましい。
【産業上の利用可能性】
【００５４】
本発明によれば、分岐命令に対する過去の履歴の内、分岐予測に有効な過去の履歴を効率よく取得し、分岐予測の精度を高める分岐予測方法及びその分岐予測方法を実行する分岐予測回路を提供することができる。
【符号の説明】
【００５５】
１１  Ｉ−Ｃａｃｈｅ
１２、１３、１４、１６、１７、１８、１９、２０、２１  レジスタ
１５  Ｄｅｃｏｄｅ
２２  ＢＴＡＧ
２３  ＩＦＥＡＧ
２４  Ｓｅｌｅｃｔｏｒ
２５  ＢｒａｎｃｈＰｒｅｄｉｃｔｉｏｎ
２６  ＲｅｇＮｏ
２７  ＲｅｇｉｓｔｅｒＦｉｌｅ
２８  Ｓｒｃ
２９  ＡＬＵ／ＥＡＧ
３０  Ｒｅｓｕｌｔ
３１  Ｄ−Ｃａｃｈｅ
３２  Ｓｅｌｅｃｔｏｒ
３３  Ｗｒｉｔｅｄａｔａ
３５、３６  短い且つ前方分岐ＦＬＡＧレジスタ
３７  ＲＲＣＤレジスタ
３８  ＥＸＣＤレジスタ３８
４０、５０  パイプライン
ｏｐ１００、ｏｐ１１０、ｏｐ１２０、ｏｐ１３０、ｏｐ１４０、ｏｐ１６０、ｏｐ１７０、ｏｐ１８０  オペレーション
２００  ＢＴＢエントリ管理回路
２１０  ｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ−ｒｅｓｉｓｔｅｒ
２３０  ＬＲＵ管理回路
２４０、２５０  ＢＴＢ
２６０  リプレース制御回路
２８０、２９０  マッチング検出回路
３００  マルチプレクサ
３１０  制御回路
【図３】
0005633169.tif 000002
【図１】
0005633169.tif 000003
【図２】
0005633169.tif 000004
【図４】
0005633169.tif 000005
【図５】
0005633169.tif 000006
【図６】
0005633169.tif 000007