図1は、本実施形態による演算処理装置としてのプロセッサを含む情報処理システムの構成例を示す図である。図1に示す情報処理システムは、例えば複数のプロセッサ11A、11B及びメモリ12A、12Bと、外部装置との入出力制御を行うインターコネクト制御部13とを有する。
図2は、プロセッサ11の構成例を示す図である。プロセッサ11は、演算処理装置であり、図1のプロセッサ11A及び11Bに対応し、例えば命令のアウトオブオーダ実行やパイプライン処理の機能を有する。
命令フェッチステージでは、命令フェッチ部21、命令バッファ24、分岐予測部22、一次命令キャッシュメモリ23、及び二次キャッシュメモリ34等が動作する。命令フェッチ部21は、分岐予測部22からフェッチする命令の予測分岐先アドレス、分岐制御部30から分岐演算により確定した分岐先アドレス等を受け取る。命令フェッチ部21は、受け取った予測分岐先アドレス、分岐先アドレス、及び命令フェッチ部21内で作成した分岐しない場合にフェッチする命令の連続した次のアドレス等から、1つのアドレスを選択して次の命令フェッチアドレスを確定する。命令フェッチ部21は、確定した命令フェッチアドレスを一次命令キャッシュメモリ23に出力し、出力された確定後の命令フェッチアドレスに対応する命令コードをフェッチする。
一次命令キャッシュメモリ23は、二次キャッシュメモリ34の一部のデータを格納しているものであり、二次キャッシュメモリ34は、メモリコントローラ35を介してアクセス可能なメモリの一部のデータを格納しているものである。一次命令キャッシュメモリ23に該当するアドレスのデータが存在しない場合には二次キャッシュメモリ34からデータをフェッチし、二次キャッシュメモリ34に該当するデータが存在しない場合にはメモリからデータをフェッチする。本実施形態では、メモリはプロセッサ11の外部に配置しているため、外部にあるメモリとの入出力制御はメモリコントローラ35を介して行われる。一次命令キャッシュメモリ23や二次キャッシュメモリ34、メモリの該当するアドレスからフェッチされた命令コードは、命令バッファ24に格納される。
分岐予測部22は、命令フェッチ部21から出力された命令フェッチアドレスを受け取り、命令フェッチと並行して分岐予測を実行する。分岐予測部22は、受け取った命令フェッチアドレスを基に分岐予測を行い、分岐の成立又は不成立を示す分岐方向と予測分岐先アドレスとを命令フェッチ部21へ返す。命令フェッチ部21は、予測された分岐方向が成立であった場合には次の命令フェッチアドレスとして予測された分岐先アドレスを選択する。
命令発行ステージでは、命令デコーダ25及び命令発行制御部26が動作する。命令デコーダ25は、命令バッファ24から命令コードを受け取って命令の種別や必要な実行資源等を解析し、解析結果を命令発行制御部26に出力する。命令発行制御部26は、リザベーションステーションの構造を持つ。命令発行制御部26は、命令で参照するレジスタ等の依存関係を見て、依存関係のあるレジスタの更新状況や同じ実行資源を用いる命令の実行状況等から実行資源が命令を実行可能かどうかを判断する。命令発行制御部26は、実行資源が命令を実行可能であると判断した場合には、レジスタ番号やオペランドアドレス等の命令の実行に必要な情報を演算器28及び一次オペランドキャッシュメモリ29等の実行資源に対して出力する。また、命令発行制御部26は、実行可能な状態になるまで命令を格納しておくバッファの機能も有する。
命令実行ステージでは、演算器28、一次オペランドキャッシュメモリ29、及び分岐制御部30等の実行資源が動作する。演算器28は、レジスタ31や一次オペランドキャッシュメモリ29からデータを受け取り、四則演算、論理演算、三角関数演算、及びアドレス計算等の命令に対応した演算を実行し、演算結果をレジスタ31や一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29は、命令キャッシュメモリ23と同様に、二次キャッシュメモリ34の一部のデータを格納しているものである。一次オペランドキャッシュメモリ29は、ロード命令によるメモリから演算器28やレジスタ31へのデータのロードや、ストア命令による演算器28やレジスタ31からメモリへのデータのストア等に用いられる。各実行資源は、命令実行の完了通知を命令完了制御部32へ出力する。
分岐制御部30は、命令デコーダ25から分岐命令の種別を受け取り、演算器28から分岐先アドレスや分岐条件となる演算の結果を受け取って、演算結果が分岐条件を満たしていれば分岐成立、満たしていなければ分岐不成立の判断を行い、分岐方向を確定する。また、分岐制御部30は、演算結果と分岐予測時の分岐先アドレスと分岐方向が一致するかどうかの判断や、分岐命令の順序関係の制御も行う。分岐制御部30は、演算結果と予測とが一致した場合には命令完了制御部32へ分岐命令の完了通知を出力する。一方、演算結果と予測とが一致しなかった場合には分岐予測失敗を意味するので、分岐制御部30は、命令完了制御部32へ分岐命令の完了通知とともに後続命令のキャンセル及び再命令フェッチ要求を出力する。
命令完了ステージでは、命令完了制御部32、レジスタ31、及び分岐履歴更新部33が動作する。命令完了制御部32は、命令の各実行資源から受け取った完了通知を基に、コミットスタックエントリに格納された命令コード順に命令完了処理を行い、レジスタ31の更新指示を出力する。レジスタ31は、命令完了制御部32からレジスタ更新指示を受け取ると、演算器28や一次オペランドキャッシュメモリ29から受け取る演算結果のデータを基にレジスタの更新を実行する。分岐履歴更新部33は、分岐制御部30から受け取る分岐演算の結果を基に分岐予測の履歴更新データを作成し、分岐予測部22に出力する。
図3は、図2の分岐予測部22の構成例を示す図である。分岐予測部22は、命令フェッチアドレス(Fetched Instruction AddRess)FIAR[31:0]及びグローバル履歴レジスタ(Global History Register)GHR[5:0]の値を入力し、次の命令フェッチアドレスNEXT‐FIAR[31:0]を図2の命令フェッチ部21に出力する。命令フェッチアドレスFIAR[31:0]は、図2の命令フェッチ部21から入力され、命令フェッチされた命令の32ビットのアドレスである。グローバル履歴レジスタGHR[5:0]は、図2の分岐履歴更新部33から入力され、例えば過去6回の条件分岐命令の分岐履歴を記憶する6ビットレジスタである。
分岐履歴テーブル(BRHIS:BRanch HIStory table)301は、図4(A)に示すように、命令フェッチアドレスFIAR[31:0]毎に、有効フラグVALID、32ビットの分岐先アドレス(Predicted Target Instruction AddRess)PTIAR[31:0]、条件分岐命令ビットP-COND-BIT、条件成立期待値BRHIS-EXPECT-BITを記憶する。分岐履歴テーブル(分岐履歴記憶部)301は、命令フェッチと並行して、命令フェッチアドレスFIAR[31:0]を入力すると、命令フェッチアドレスFIAR[31:0]に対応する有効フラグVALID、分岐先アドレスPTIAR[31:0]、条件分岐命令ビットP-COND-BIT、条件成立期待値BRHIS-EXPECT-BITを出力する。
有効フラグVALIDは、0である場合に命令フェッチアドレスFIAR[31:0]の命令が分岐命令でないことを示し、1である場合に命令フェッチアドレスFIAR[31:0]の命令が分岐命令であることを示す。分岐先アドレスPTIAR[31:0]は、命令フェッチアドレスFIAR[31:0]の分岐命令の分岐先(分岐ターゲット)アドレスである。条件分岐命令ビットP-COND-BITは、0である場合に命令フェッチアドレスFIAR[31:0]の命令が条件分岐命令でないことを示し、1である場合に命令フェッチアドレスFIAR[31:0]の命令が条件分岐命令であることを示す。条件成立期待値BRHIS-EXPECT-BITは、0である場合に命令フェッチアドレスFIAR[31:0]の条件分岐命令の分岐期待値が不成立であることを示し、1である場合に命令フェッチアドレスFIAR[31:0]の条件分岐命令の分岐期待値が成立であることを示す。条件分岐命令は、条件が成立の場合には次回は分岐先アドレスPTIAR[31:0]の命令に移行し、条件が不成立の場合には次回は次のアドレスの命令に移行する。
バッファ306は、有効フラグVALIDをバッファリングし、分岐履歴テーブルヒットビットBRHIS-HITを出力する。論理積(AND)回路307は、分岐履歴テーブルヒットビットBRHIS-HITと条件分岐命令ビットP-COND-BITの論理反転ビットとの論理積を出力する。論理積回路308は、分岐履歴テーブルヒットビットBRHIS-HITと条件分岐命令ビットP-COND-BITと論理和(OR)回路315の出力値との論理積を出力する。論理和回路309は、論理積回路307の出力値と論理積回路308の出力値との論理和を分岐予測情報PREDICT-TAKENとして出力する。分岐予測情報PREDICT-TAKENは、0が分岐不成立の予測を示し、1が分岐成立の予測を示す。セレクタ305は、分岐予測情報PREDICT-TAKENが0の場合には、命令フェッチアドレスFIAR[31:0]に32バイトを加算したアドレスを次の命令フェッチアドレスNEXT‐FIAR[31:0]として選択して出力し、分岐予測情報PREDICT-TAKENが1の場合には、分岐先アドレスPTIAR[31:0]を次の命令フェッチアドレスNEXT‐FIAR[31:0]として選択して出力する。ここで、一度にフェッチするデータの単位は32バイトである。
有効フラグVALIDが0である場合には、フェッチする命令が分岐命令でないことを示すので、分岐予測情報PREDICT-TAKENが0になり、分岐不成立を予測する。有効フラグVALIDが1である場合には、フェッチする命令が分岐命令であることを示し、かつ条件分岐命令ビットP-COND-BITが0である場合には、フェッチする命令が無条件分岐命令であることを示すので、分岐予測情報PREDICT-TAKENが1になり、分岐成立を予測する。また、有効フラグVALIDが1かつ条件分岐命令ビットP-COND-BITが1である場合には、フェッチする命令が条件分岐命令であることを示すので、論理和回路315の出力値が分岐予測情報PREDICT-TAKENになる。
次に、パターン履歴テーブル(PHT:Patten History Table)302について説明する。排他的論理和回路304は、命令フェッチアドレスFIAR[5:0]とグローバル履歴レジスタGHR[5:0]の値との排他的論理和を出力する。命令フェッチアドレスFIAR[5:0]は、命令フェッチアドレスFIAR[31:0]のうちの下位6ビットのアドレスである。パターン履歴テーブル302は、図4(B)に示すように、命令フェッチアドレスFIAR[31:6]及び排他的論理和回路304の出力値毎に、2ビットの分岐成立確度情報BP1[1:0]を記憶する。命令フェッチアドレスFIAR[31:6]は、命令フェッチアドレスFIAR[31:0]のうちの上位26ビットのアドレスである。分岐成立確度情報BP1[1:0]は、図2の分岐履歴更新部33により、分岐結果が条件成立期待値BRHIS-EXPECT-BITと同じ場合にはデクリメントされ、分岐結果が条件成立期待値BRHIS-EXPECT-BITと異なる場合にはインクリメントされる。ただし、分岐成立確度情報BP1[1:0]は、0〜3の値であり、0の状態でデクリメントされても0を維持し、3の状態でインクリメントされても3を維持する。分岐成立確度情報BP1[1:0]の値が小さいほど、条件成立期待値BRHIS-EXPECT-BITの確度が高いことを意味する。
図5は、図3のパターン履歴テーブル302を説明するための図である。グローバル履歴レジスタGHR[5:0]は、例えば初期値が「000000」であり、1が条件成立を示し、0が条件不成立を示す。分岐履歴更新部33は、条件分岐命令1が条件不成立の場合には、グローバル履歴レジスタGHR[5:0]を右1ビットシフトし、左1ビット目を「0」にするので、グローバル履歴レジスタGHR[5:0]が「000000」になる。次に、分岐履歴更新部33は、条件分岐命令1が条件成立の場合には、グローバル履歴レジスタGHR[5:0]を右1ビットシフトし、左1ビット目を「1」にするので、グローバル履歴レジスタGHR[5:0]が「100000」になる。次に、分岐履歴更新部33は、条件分岐命令1が条件成立の場合には、グローバル履歴レジスタGHR[5:0]を右1ビットシフトし、左1ビット目を「1」にするので、グローバル履歴レジスタGHR[5:0]が「110000」になる。次に、分岐履歴更新部33は、条件分岐命令1が条件不成立の場合には、グローバル履歴レジスタGHR[5:0]を右1ビットシフトし、左1ビット目を「0」にするので、グローバル履歴レジスタGHR[5:0]が「011000」になる。次に、分岐履歴更新部33は、条件分岐命令1が条件成立の場合には、グローバル履歴レジスタGHR[5:0]を右1ビットシフトし、左1ビット目を「1」にするので、グローバル履歴レジスタGHR[5:0]が「101100」になる。次に、分岐履歴更新部33は、条件分岐命令1が条件成立の場合には、グローバル履歴レジスタGHR[5:0]を右1ビットシフトし、左1ビット目を「1」にするので、グローバル履歴レジスタGHR[5:0]が「110110」になる。これらのグローバル履歴レジスタGHR[5:0]に対応する分岐成立確度情報BP1[1:0]がパターン履歴テーブル302に記録される。
ここで、「110110」のグローバル履歴レジスタGHR[5:0]の値501が入力された場合、上記のグローバル履歴レジスタGHR[5:0]が「000000」〜「101100」の間は、「110110」のグローバル履歴レジスタGHR[5:0]の値501と不一致であるため、パターン履歴テーブル302による分岐予測はできない。その後、「110110」のグローバル履歴レジスタGHR[5:0]の分岐成立確度情報BP1[1:0]がパターン履歴テーブル302に記録されると、「110110」のグローバル履歴レジスタGHR[5:0]の値501と一致するため、パターン履歴テーブル302による分岐予測が可能になる。
条件分岐命令の分岐予測を行う場合には、グローバル履歴レジスタGHR[5:0]の履歴パターンに対応する分岐成立確度情報BP1[1:0]を記録し、グローバル履歴レジスタGHR[5:0]の履歴パターン毎の分岐成立確度情報BP1[1:0]を記録する必要がある。しかし、グローバル履歴レジスタGHR[5:0]の履歴パターンは、種類が多いため、グローバル履歴レジスタGHR[5:0]の履歴パターン毎の分岐成立確度情報BP1[1:0]を記録するには多大な時間を要する。それが記録されるまでは、正確な分岐予測を行うことが困難であり、分岐予測の確度が低くなってしまう。そこで、本実施形態では、それまでの間は、後述のローカルパターンテーブル(LPT:Local Pattern Table)303を用いて分岐予測を行うことにより、分岐予測の確度を向上させる。
排他的論理和回路503は、図3の排他的論理和回路304に対応し、グローバル履歴レジスタGHR[5:0]の値501と命令フェッチアドレスFIAR[5:0]の値502との排他的論理和をインデックス504として出力する。パターン履歴テーブル302は、命令フェッチアドレスFIAR[31:6]及びインデックス504を入力すると、それに対応する分岐成立確度情報BP1[1]を出力する。分岐成立確度情報BP1[1]は、2ビットの分岐成立確度情報BP1[1:0]のうちの上位1ビットの情報である。分岐成立確度情報BP1[1]が0の場合には、条件成立期待値BRHIS-EXPECT-BITの確度が高いことを示し、分岐成立確度情報BP1[1]が1の場合には、条件成立期待値BRHIS-EXPECT-BITの確度が低いことを示す。
排他的論理和回路310は、条件成立期待値BRHIS-EXPECT-BITと分岐成立確度情報BP1[1]との排他的論理和を出力する。条件成立期待値BRHIS-EXPECT-BITが1(成立)である場合、排他的論理和回路310は、分岐成立確度情報BP1[1]が0の場合には「1」(成立)を出力し、分岐成立確度情報BP1[1]が1の場合には「0」(不成立)を出力する。また、条件成立期待値BRHIS-EXPECT-BITが0(不成立)である場合、排他的論理和回路310は、分岐成立確度情報BP1[1]が0の場合には「0」(不成立)を出力し、分岐成立確度情報BP1[1]が1の場合には「1」(成立)を出力する。
ローカルパターンテーブル(パターン情報記憶部)303は、図4(C)に示すように、命令フェッチアドレスFIAR[31:0]毎に、有効フラグLPT-VALID、予測失敗ビットLPT-DIZZY、現在予測連続回数PRD-CNT[5:0]、現在予測条件成立ビットPRD-CNT-TKN、現在完了連続回数CMP-CNT[5:0]、現在完了条件成立ビットCMP-CNT-TKN、1周期条件成立連続回数THT-CNT[5:0]、条件成立連続回数確度ビットTHTC-PRD、条件成立変化ビットTHTC-DEF、1周期条件不成立連続回数THN-CNT[5:0]、条件不成立連続回数確度ビットTHNC-PRD、条件不成立変化ビットTHNC-DEFを記憶する。
図6(A)は、ローカルパターンテーブル303の例を説明するための図である。ここで、「T」は条件分岐命令の条件成立を示し、「N」は条件分岐命令の条件不成立を示す。条件分岐命令は、例えば、第1の周期R1及び第2の周期R2で条件成立又は条件不成立になる。第1の周期R1では、条件成立Tが3回連続し、その後に、条件不成立Nが2回連続する。第2の周期R2でも、条件成立Tが3回連続し、その後に、条件不成立Nが2回連続する。第1の周期R1及び第2の周期R2は同じであるので、条件分岐命令は、例えば、第1の周期R1及び第2の周期R2で条件成立又は条件不成立になることを予測可能である。すなわち、条件成立Tが3回連続し、その後に、条件不成立Nが2回連続することが予測可能である。
この場合、1周期条件成立連続回数THT-CNT[5:0]は「3」になる。1周期条件不成立連続回数THN-CNT[5:0]は「2」になる。条件成立連続回数確度ビットTHTC-PRDは、1周期条件成立連続回数THT-CNT[5:0]の確度を示し、第1の周期R1の条件成立Tの連続回数の「3」と第2の周期R2の条件成立Tの連続回数の「3」とが同じ場合に「1」になる。条件不成立連続回数確度ビットTHNC-PRDは、1周期条件不成立連続回数THN-CNT[5:0]の確度を示し、第1の周期R1の条件不成立Nの連続回数の「2」と第2の周期R2の条件不成立Nの連続回数の「2」とが同じ場合に「1」になる。条件成立変化ビットTHTC-DEFは、条件成立Tから条件不成立Nに変化した場合に「1」になる。条件不成立変化ビットTHNC-DEFは、条件不成立Nから条件成立Tに変化した場合に「1」になる。
有効フラグLPT-VALIDは、1である場合にローカルパターンテーブル303が有効であることを示し、0である場合にローカルパターンテーブル303が無効であることを示す。予測失敗ビットLPT-DIZZYは、一つ前に実行したローカルパターンテーブル303による分岐予測が失敗した場合に「1」になる。
現在予測連続回数PRD-CNT[5:0]は、現在の分岐予測の条件成立T又は条件不成立Nの連続回数を示す。現在予測条件成立ビットPRD-CNT-TKNは、1の場合には現在の分岐予測が条件成立Tを示し、0の場合には現在の分岐予測が条件不成立Nを示す。例えば、第1の周期R1内の2個目の分岐予測では、現在予測条件成立ビットPRD-CNT-TKNが「1」であり、現在予測連続回数PRD-CNT[5:0]が「2」である。この場合、次回の分岐予測は、条件成立Tであると予測することができる。また、第1の周期R1内の4個目の分岐予測では、現在予測条件成立ビットPRD-CNT-TKNが「0」であり、現在予測連続回数PRD-CNT[5:0]が「1」である。この場合、次回の分岐予測は、条件不成立Nであると予測することができる。
現在完了連続回数CMP-CNT[5:0]は、現在の分岐履歴更新部33による分岐命令完了後の条件成立T又は条件不成立Nの連続回数を示す。現在完了条件成立ビットCMP-CNT-TKNは、1の場合には現在の分岐履歴更新部33による分岐命令完了後の条件成立Tを示し、0の場合には現在の分岐履歴更新部33による分岐命令完了後の条件不成立Nを示す。例えば、第1の周期R1内の2個目の分岐命令完了では、現在完了条件成立ビットCMP-CNT-TKNが「1」であり、現在完了連続回数CMP-CNT[5:0]が「2」である。また、第1の周期R1内の4個目の分岐命令完了では、現在完了条件成立ビットCMP-CNT-TKNが「0」であり、現在完了連続回数CMP-CNT[5:0]が「1」である。
図6(B)は、ローカルパターンテーブル303の他の例を説明するための図である。条件分岐命令は、例えば、第1の周期R1、第2の周期R2及び第3の周期R3を有する。第1の周期R1では、条件成立Tが3回連続し、その後に、条件不成立Nが2回連続する。これに対し、第2の周期R2では、条件成立Tが2回連続し、その後に、条件不成立Nが2回連続する。第1の周期R1及び第2の周期R2は異なるので、分岐予測失敗として、分岐予測を行わない。その後、第3の周期R3では、条件成立Tが2回連続し、その後に、条件不成立Nが2回連続する。第2の周期R2及び第3の周期R3は同じであるので、条件分岐命令は、以後、第2の周期R2及び第3の周期R3で条件成立又は条件不成立になることを予測可能である。すなわち、条件成立Tが2回連続し、その後に、条件不成立Nが2回連続することが予測可能である。
ローカルパターンテーブル303は、命令フェッチと並行して、命令フェッチアドレスFIAR[31:0]を入力すると、それに対応する条件成立連続回数確度ビットTHTC-PRD、条件不成立連続回数確度ビットTHNC-PRD、1周期条件成立連続回数THT-CNT[5:0]、1周期条件不成立連続回数THN-CNT[5:0]、現在予測連続回数PRD-CNT[5:0]及び現在予測条件成立ビットPRD-CNT-TKNを出力する。
論理積回路311は、条件成立連続回数確度ビットTHTC-PRDと条件不成立連続回数確度ビットTHNC-PRDとの論理積を出力する。条件成立連続回数確度ビットTHTC-PRDと条件不成立連続回数確度ビットTHNC-PRDが共に1である場合には、分岐成立Tの連続回数及び分岐不成立Nの連続回数の周期が過去に2周期以上現れた場合を意味するので、論理積回路311は1を出力し、ローカルパターンテーブル303による分岐予測をパターン履歴テーブル302による分岐予測より優先させる。
論理積回路313は、排他的論理和回路310の出力値と論理積回路311の出力値の論理反転値との論理積を出力する。論理積回路311の出力値が1の場合には、パターン履歴テーブル302による分岐予測を無効にするため、論理積回路313は0を出力する。論理積回路311の出力値が0の場合には、パターン履歴テーブル302による分岐予測を有効にするため、論理積回路313の出力値は排他的論理和回路310の出力値と同じになる。
生成部312は、1周期条件成立連続回数THT-CNT[5:0]、1周期条件不成立連続回数THN-CNT[5:0]、現在予測連続回数PRD-CNT[5:0]及び現在予測条件成立ビットPRD-CNT-TKNを入力し、分岐予測情報LPT-TKNを出力する。
図7は、図3の生成部312の構成例を示す図である。比較器701は、現在予測連続回数PRD-CNT[5:0]が1周期条件成立連続回数THT-CNT[5:0]より小さい場合には1を出力し、現在予測連続回数PRD-CNT[5:0]が1周期条件成立連続回数THT-CNT[5:0]以上である場合には0を出力する。比較器702は、現在予測連続回数PRD-CNT[5:0]が1周期条件不成立連続回数THN-CNT[5:0]と同じである場合には1を出力し、現在予測連続回数PRD-CNT[5:0]が1周期条件不成立連続回数THN-CNT[5:0]と同じでない場合には0を出力する。論理積回路703は、現在予測条件成立ビットPRD-CNT-TKNと比較器701の出力値との論理積を出力する。論理積回路704は、現在予測条件成立ビットPRD-CNT-TKNの論理反転値と比較器702の出力値との論理積を出力する。論理和回路705は、論理積回路703の出力値と論理積回路704の出力値との論理和を分岐予測情報LPT-TKNとして出力する。以上のように、生成部312は、図6(A)に示すように、1周期条件成立連続回数THT-CNT[5:0]、1周期条件不成立連続回数THN-CNT[5:0]、現在予測連続回数PRD-CNT[5:0]及び現在予測条件成立ビットPRD-CNT-TKNを基に、次の条件分岐命令の分岐予測情報LPT-TKNを出力することができる。分岐予測情報LPT-TKNは、0が条件不成立を示し、1が条件成立を示す。
例えば、現在予測条件成立ビットPRD-CNT-TKNが1であり、かつ現在予測連続回数PRD-CNT[5:0]が1周期条件成立連続回数THT-CNT[5:0]よりも小さい場合、次の分岐方向は条件成立Tであることを予測するため、分岐予測情報LPT-TKNが1になる。この場合、現在予測連続回数PRD-CNT[5:0]は、インクリメントされる。
また、現在予測条件成立ビットPRD-CNT-TKNが1であり、かつ現在予測連続回数PRD-CNT[5:0]が1周期条件成立連続回数THT-CNT[5:0]と同じである場合、分岐方向は分岐不成立Nに切り替わるので、分岐予測情報LPT-TKNが0になり、条件不成立Nと予測する。この場合、現在予測連続回数PRD-CNT[5:0]は「1」に初期化され、現在予測条件成立ビットPRD-CNT-TKNは「1」に設定される。
また、現在予測条件成立ビットPRD-CNT-TKNが0であり、かつ現在予測連続回数PRD-CNT[5:0]が1周期条件不成立連続回数THN-CNT[5:0]よりも小さい場合、次の分岐方向は条件不成立Nであると予測するため、分岐予測情報LPT-TKNは0になる。この場合、現在予測連続回数PRD-CNT[5:0]は、インクリメントされる。
また、現在予測条件成立ビットPRD-CNT-TKNが0であり、かつ現在予測連続回数PRD-CNT[5:0]が1周期条件不成立連続回数THN-CNT[5:0]と同じ場合、分岐方向は分岐成立Tに切り替わるので、分岐予測情報LPT-TKNは1になり、分岐成立Tと予測する。この場合、現在予測連続回数PRD-CNT[5:0]は「1」に初期化され、現在予測条件成立ビットPRD-CNT-TKNは「1」に設定される。
図3の論理積回路314は、論理積回路311の出力値と分岐予測情報LPT-TKNとの論理積を出力する。論理積回路311の出力値が0の場合には、ローカルパターンテーブル303による分岐予測を無効にするため、論理積回路314は0を出力する。論理積回路311の出力値が1の場合には、ローカルパターンテーブル303による分岐予測を有効にするため、論理積回路314の出力値は分岐予測情報LPT-TKNと同じになる。論理和回路315は、論理積回路313の出力値と論理積回路314の出力値との論理和を出力する。論理積回路311の出力値が1の場合には、論理和回路315は、ローカルパターンテーブル303による分岐予測情報LPT-TKNを出力する。また、論理積回路311の出力値が0の場合には、論理和回路315は、排他的論理和回路310の出力値(パターン履歴テーブル302による分岐予測情報)を出力する。すなわち、論理積回路311の出力値が1の場合には、ローカルパターンテーブル303による分岐予測情報が選択され、論理積回路311の出力値が0の場合には、パターン履歴テーブル302による分岐予測情報が選択される。
命令フェッチアドレスFIAR[31:0]の命令が条件分岐命令である場合、分岐予測情報PREDICT-TAKENは、論理和回路315の出力値と同じ値になる。セレクタ305は、上記のように、分岐予測情報PREDICT-TAKENに応じて、次の命令フェッチアドレスNEXT‐FIAR[31:0]を選択する。
排他的論理和回路316は、排他的論理和回路310の出力値と分岐予測情報LPT-TKNとの排他的論理和を出力する。論理積回路317は、排他的論理和回路316の出力値と論理積回路311の出力値との論理積を予測不一致ビットPRD-BY-LPTとして出力する。予測不一致ビットPRD-BY-LPTは、排他的論理和回路310の出力値(パターン履歴テーブル302による分岐予測情報)ではなく、ローカルパターンテーブル303による分岐予測情報LPT-TKNが選択され、かつ排他的論理和回路310の出力値(パターン履歴テーブル302による分岐予測情報)とローカルパターンテーブル303による分岐予測情報LPT-TKNとが異なる場合に「1」になる。予測不一致ビットPRD-BY-LPTが1の状態で、分岐命令完了後に分岐予測の失敗が判明すると、後述のように、ローカルパターンテーブル303の無効化処理が行われる。
図8は、上記の演算処理装置の制御方法を示すフローチャートである。ステップS801では、分岐予測部22は、分岐履歴テーブルヒットビットBRHIS-HITが1であるか否かをチェックする。分岐履歴テーブルヒットビットBRHIS-HITが1である場合には、フェッチした命令が分岐命令であるので、ステップS802へ進む。分岐履歴テーブルヒットビットBRHIS-HITが0である場合には、フェッチした命令が分岐命令でないので、ステップS821へ進む。
ステップS821では、分岐予測部22は、フェッチした命令が分岐命令でないと予測する。次に、ステップS822では、分岐予測部22は、分岐不成立と予測し、分岐予測情報PREDICT-TAKENが0になる。次に、ステップS823では、セレクタ305は、前回命令フェッチしたアドレスと連続した値を次の命令フェッチアドレスNEXT‐FIAR[31:0]として設定する。
ステップS802では、分岐予測部22は、条件分岐命令ビットP-COND-BITが1であるか否かをチェックする。条件分岐命令ビットP-COND-BITが1である場合には、フェッチした命令が条件分岐命令であるので、ステップS803へ進む。条件分岐命令ビットP-COND-BITが0である場合には、フェッチした命令が無条件分岐命令であるので、ステップS818へ進む。
ステップS818では、分岐予測部22は、フェッチした命令が無条件分岐命令であると予測する。次に、ステップS819では、分岐予測部22は、分岐成立と予測し、分岐予測情報PREDICT-TAKENが1になる。次に、ステップS820では、セレクタ305は、分岐履歴テーブル(BRHIS)301に登録された分岐先アドレスPTIAR[31:0]を次の命令フェッチアドレスNEXT‐FIAR[31:0]として設定する。
ステップS803では、分岐予測部22は、条件成立連続回数確度ビットTHTC-PRDが1であり、かつ条件不成立連続回数確度ビットTHNC-PRDが1であるか否かをチェックする。条件成立連続回数確度ビットTHTC-PRD及び条件不成立連続回数確度ビットTHNC-PRDが共に1である場合には、ローカルパターンテーブル(LPT)303を用いて分岐予測を行うため、ステップS804へ進む。条件成立連続回数確度ビットTHTC-PRD及び条件不成立連続回数確度ビットTHNC-PRDが共に1でない場合には、パターン履歴テーブル(PHT)302を用いて分岐予測を行うため、ステップS811へ進む。
ステップS811では、分岐予測部22は、条件成立期待値BRHIS-EXPECT-BITが1であるか否かをチェックする。条件成立期待値BRHIS-EXPECT-BITが1である場合にはステップS812へ進み、条件成立期待値BRHIS-EXPECT-BITが0である場合にはステップS815へ進む。
ステップS812では、分岐予測部22は、分岐成立確度情報BP1[1]が1であるか否かをチェックする。分岐成立確度情報BP1[1]が1である場合にはステップS813へ進み、分岐成立確度情報BP1[1]が0である場合にはステップS814へ進む。ステップS813では、分岐予測部22は、分岐不成立と予測し、分岐予測情報PREDICT-TAKENが0になり、ステップS823に進む。ステップS814では、分岐予測部22は、分岐成立と予測し、分岐予測情報PREDICT-TAKENが1になり、ステップS820に進む。
ステップS815では、分岐予測部22は、分岐成立確度情報BP1[1]が1であるか否かをチェックする。分岐成立確度情報BP1[1]が1である場合にはステップS816へ進み、分岐成立確度情報BP1[1]が0である場合にはステップS817へ進む。ステップS816では、分岐予測部22は、分岐成立と予測し、分岐予測情報PREDICT-TAKENが1になり、ステップS820に進む。ステップS817では、分岐予測部22は、分岐不成立と予測し、分岐予測情報PREDICT-TAKENが0になり、ステップS823に進む。
ステップS804では、分岐予測部22は、現在予測条件成立ビットPRD-CNT-TKNが1であるか否かをチェックする。現在予測条件成立ビットPRD-CNT-TKNが1である場合にはステップS805へ進み、現在予測条件成立ビットPRD-CNT-TKNが0である場合にはステップS808へ進む。
ステップS805では、分岐予測部22は、現在予測連続回数PRD-CNT[5:0]が1周期条件成立連続回数THT-CNT[5:0]より小さいか否かをチェックする。現在予測連続回数PRD-CNT[5:0]が1周期条件成立連続回数THT-CNT[5:0]より小さい場合にはステップS806へ進み、現在予測連続回数PRD-CNT[5:0]が1周期条件成立連続回数THT-CNT[5:0]より小さくない場合にはステップS807へ進む。ステップS806では、分岐予測部22は、分岐成立と予測し、分岐予測情報PREDICT-TAKENが1になり、ステップS820に進む。ステップS807では、分岐予測部22は、分岐不成立と予測し、分岐予測情報PREDICT-TAKENが0になり、ステップS823に進む。
ステップS808では、分岐予測部22は、現在予測連続回数PRD-CNT[5:0]が1周期条件不成立連続回数THN-CNT[5:0]と同じであるか否かをチェックする。現在予測連続回数PRD-CNT[5:0]が1周期条件不成立連続回数THN-CNT[5:0]と同じある場合にはステップS809へ進み、現在予測連続回数PRD-CNT[5:0]が1周期条件不成立連続回数THN-CNT[5:0]と同じでない場合にはステップS810へ進む。ステップS809では、分岐予測部22は、分岐成立と予測し、分岐予測情報PREDICT-TAKENが1になり、ステップS820に進む。ステップS810では、分岐予測部22は、分岐不成立と予測し、分岐予測情報PREDICT-TAKENが0になり、ステップS823に進む。
ステップS820では、セレクタ305は、分岐履歴テーブル(BRHIS)301に登録された分岐先アドレスPTIAR[31:0]を次の命令フェッチアドレスNEXT‐FIAR[31:0]として設定する。ステップS823では、セレクタ305は、前回命令フェッチしたアドレスと連続した値を次の命令フェッチアドレスNEXT‐FIAR[31:0]として設定する。
図9は、図2の分岐履歴更新部33の入出力信号を示す図である。分岐履歴更新部33は、図2の分岐制御部30による分岐演算の結果を基に、分岐履歴テーブル(BRHIS)301、パターン履歴テーブル(PHT)302及びローカルパターンテーブル(LPT)303の更新を行う。分岐履歴更新部33は、図2の分岐制御部30から、確定分岐先アドレスRTIAR[31:0]、分岐命令アドレス(Branch Instruction AddRess)BIAR[31:0]、分岐命令完了ビットCOMPLETE、分岐成立確定ビットRESULT-TAKEN、条件分岐命令確定ビットD-COND-BIT、上記の現在完了条件成立ビットCMP-CNT-TKN、上記の現在完了連続回数CMP-CNT[5:0]、上記の1周期条件成立連続回数THT-CNT[5:0]、上記の条件成立変化ビットTHTC-DEF、上記の1周期条件不成立連続回数THN-CNT[5:0]、上記の条件不成立変化ビットTHNC-DEF、分岐予測失敗ビットPRD-MISS、上記の有効フラグLPT-VALID、LPT無効ビットDISABLE-LPT、上記の予測失敗ビットLPT-DIZZY、上記の予測不一致ビットPRD-BY-LPTを入力する。なお、LPT無効ビットDISABLE-LPT及び予測不一致ビットPRD-BY-LPTは、分岐予測時に作成され、パイプラインを伝搬する信号である。
確定分岐先アドレスRTIAR[31:0]は、分岐命令の演算完了により得られる分岐先アドレスである。分岐命令完了ビットCOMPLETEは、1が分岐命令の演算完了を示し、0が分岐命令の演算未完了を示す。分岐成立確定ビットRESULT-TAKENは、1が条件分岐成立の確定を示し、0が条件分岐不成立の確定を示す。条件分岐命令確定ビットD-COND-BITは、1である場合にフェッチ及びデコードした命令が条件分岐命令であることが確定したことを示し、0である場合にフェッチ及びデコードした命令が条件分岐命令でないことが確定したことを示す。分岐予測失敗ビットPRD-MISSは、1が分岐予測部22による分岐予測の失敗を示し、0が分岐予測部22による分岐予測の成功を示す。LPT無効ビットDISABLE-LPTは、1がローカルパターンテーブル(LPT)303の無効を示し、0がローカルパターンテーブル(LPT)303の有効を示す。
分岐命令アドレスBIAR[31:0]は、分岐履歴テーブル(BRHIS)301及びローカルパターンテーブル(LPT)303に入力される。分岐予測失敗ビットPRD-MISSは、イネーブル信号ENとして、分岐履歴テーブル(BRHIS)301に入力される。論理積回路901は、分岐命令完了ビットCOMPLETE及び条件分岐命令確定ビットD-COND-BITの論理積をイネーブル信号ENとしてローカルパターンテーブル(LPT)303に出力する。
図10は、図9の分岐履歴更新部33の一部の構成例を示す図である。論理積回路1001は、分岐命令完了ビットCOMPLETE及び条件分岐命令確定ビットD-COND-BITの論理積信号を出力する。論理積回路1003は、論理積回路1001の出力信号及び分岐成立確定ビットRESULT-TAKENの論理積信号を現在完了条件成立ビットS-CMP-CNT-TKNとしてローカルパターンテーブル(LPT)303に出力する。現在完了条件成立ビットS-CMP-CNT-TKNは、図4(C)の現在完了条件成立ビットCMP-CNT-TKNに対応する。
否定排他的論理和回路1002は、分岐成立確定ビットRESULT-TAKEN及び現在完了条件成立ビットCMP-CNT-TKNの否定排他的論理和信号を出力する。論理積回路1004は、論理積回路1001の出力信号と分岐成立確定ビットRESULT-TAKENの論理反転信号と現在完了条件成立ビットCMP-CNT-TKNと有効フラグLPT-VALIDとの論理積信号を出力する。論理積回路1005は、論理積回路1001の出力信号と分岐成立確定ビットRESULT-TAKENと現在完了条件成立ビットCMP-CNT-TKNの論理反転信号と有効フラグLPT-VALIDとの論理積信号を出力する。加算器1006は、現在完了連続回数CMP-CNT[5:0]の値をインクリメントして出力する。
論理積回路1007は、否定排他的論理和回路1002の出力信号の論理反転信号と「1」との論理積信号を出力する。論理積回路1008は、否定排他的論理和回路1002の出力信号と加算器1006の出力信号との論理積信号を出力する。論理和回路1009は、論理積回路1007及び1008の出力信号の論理和信号を現在完了連続回数S-CMP-CNT[5:0]としてローカルパターンテーブル(LPT)303に出力する。現在完了連続回数S-CMP-CNT[5:0]は、図4(C)の現在完了連続回数CMP-CNT[5:0]に対応する。
論理積回路1011は、論理積回路1004の出力信号と条件成立変化ビットTHTC-DEFの論理反転信号との論理積信号を条件成立変化ビットS-THTC-DEFとしてローカルパターンテーブル(LPT)303に出力する。条件成立変化ビットS-THTC-DEFは、図4(C)の条件成立変化ビットTHTC-DEFに対応する。
ラッチ回路1013は、条件成立変化ビットS-THTC-DEFをイネーブル信号ENとして、加算器1006が出力する現在完了連続回数CMP-CNT[5:0]をラッチし、1周期条件成立連続回数S-THT-CNT[5:0]としてローカルパターンテーブル(LPT)303に出力する。1周期条件成立連続回数S-THT-CNT[5:0]は、図4(C)の1周期条件成立連続回数THT-CNT[5:0]に対応する。
比較器1010は、現在完了連続回数CMP-CNT[5:0]と1周期条件成立連続回数THT-CNT[5:0]が同じ場合には「1」を出力し、異なる場合には「0」を出力する。論理積回路1012は、比較器1010の出力信号と論理積回路1004の出力信号と条件成立変化ビットTHTC-DEFとの論理積信号を条件成立連続回数確度ビットS-THTC-PRDとしてローカルパターンテーブル(LPT)303に出力する。条件成立連続回数確度ビットS-THTC-PRDは、図4(C)の条件成立連続回数確度ビットTHTC-PRDに対応する。
論理積回路1016は、論理積回路1005の出力信号と条件不成立変化ビットTHNC-DEFの論理反転信号との論理積信号を条件不成立変化ビットS-THNC-DEFとしてローカルパターンテーブル(LPT)303に出力する。条件不成立変化ビットS-THNC-DEFは、図4(C)の条件不成立変化ビットTHNC-DEFに対応する。
ラッチ回路1014は、条件不成立変化ビットS-THNC-DEFをイネーブル信号ENとして、加算器1006が出力する現在完了連続回数CMP-CNT[5:0]をラッチし、1周期条件不成立連続回数S-THN-CNT[5:0]としてローカルパターンテーブル(LPT)303に出力する。1周期条件不成立連続回数S-THN-CNT[5:0]は、図4(C)の1周期条件不成立連続回数THN-CNT[5:0]に対応する。
比較器1015は、現在完了連続回数CMP-CNT[5:0]と1周期条件不成立連続回数THN-CNT[5:0]が同じ場合には「1」を出力し、異なる場合には「0」を出力する。論理積回路1017は、比較器1015の出力信号と論理積回路1005の出力信号と条件不成立変化ビットTHNC-DEFとの論理積信号を条件不成立連続回数確度ビットS-THNC-PRDとしてローカルパターンテーブル(LPT)303に出力する。条件不成立連続回数確度ビットS-THNC-PRDは、図4(C)の条件不成立連続回数確度ビットTHNC-PRDに対応する。
以上のように、分岐成立確定ビットRESULT-TAKEN=1は条件分岐成立を示し、分岐成立確定ビットRESULT-TAKEN=0は条件分岐不成立を示す。RESULT-TAKEN=1の場合、エントリにヒットした分岐命令が分岐成立/不成立の完了した回数をCMP-CNT[5:0]としてカウントし、S-CMP-CNT-TKNに「1」をセットする。不成立から成立に変化してなければ、CMP-CNT[5:0]に「1」を加えて、S-CMP-CNT[5:0]をカウントアップする。不成立から成立に変化している場合は、S-CMP-CNT[5:0]に「1」をセットして初期化を行う。THNC-DEFが「0」であったら、S-THNC-DEFに「1」にセットすると共に、CMP-CNT[5:0]の値をS-THN-CNT[5:0]にセットする。THNC-DEFが「1」であったら、CMP-CNT[5:0]の値とTHN-CNT[5:0]とを比較し、同一の値であったら、すなわち連続して値が同一であったら分岐予測可能な状態となり、S-THNC-PRDに「1」をセットする。
同様に、RESULT-TAKENが「0」の場合、CMP-CNT-TKNに「0」をセットする。成立から不成立に変化してなければ、CMP-CNT[5:0]に「1」を加えて、CMP-CNT[5:0]をカウントアップする。成立から不成立に変化している場合は、CMP-CNT[5:0]に「1」をセットして初期化を行う。THTC-DEFが「0」であったら、S-THTC-DEFに「1」をセットすると共に、CMP-CNT[5:0]の値をS-THT-CNT[5:0]にセットする。THTC-DEFが「1」であったら、CMP-CNT[5:0]の値とTHT-CNT[5:0]とを比較し、同一の値であったら、すなわち連続して値が同一であったら、分岐予測可能な状態となり、S-THTC-PRDに「1」をセットする。S-THTC-PRDとS-THNC-PRDが共に「1」となると、ローカルパターンテーブル(LPT)303による分岐予測が選択される。
図11は、図10の回路の処理を示すフローチャートである。ステップS1101では、分岐履歴更新部33は、分岐命令完了ビットCOMPLETEが1であるか否かをチェックする。分岐命令完了ビットCOMPLETEが1である場合には、分岐演算が完了しているので、ステップS1102へ進む。分岐命令完了ビットCOMPLETEが0である場合には、分岐演算が完了していないので、ステップS1121へ進む。ステップS1121では、分岐履歴更新部33は、ローカルパターンテーブル(LPT)303の更新を行わない。
ステップS1102では、分岐履歴更新部33は、条件分岐命令確定ビットD-COND-BITが1であるか否かをチェックする。条件分岐命令確定ビットD-COND-BITが1である場合、対象命令が条件分岐命令であることを示すので、ステップS1103へ進む。条件分岐命令確定ビットD-COND-BITが0である場合、対象命令が条件分岐命令でないことを示すので、ステップS1121へ進む。
ステップS1103では、分岐履歴更新部33は、ローカルパターンテーブル(LPT)303のエントリを作成する。この処理の詳細は、後に図13を参照しながら説明する。
次に、ステップS1104では、分岐履歴更新部33は、分岐成立確定ビットRESULT-TAKENが1であるか否かをチェックする。分岐成立確定ビットRESULT-TAKENが1である場合、条件分岐成立であるので、ステップS1105へ進む。分岐成立確定ビットRESULT-TAKENが0である場合、条件分岐不成立であるので、ステップS1113へ進む。
ステップS1105では、分岐履歴更新部33は、現在完了条件成立ビットS-CMP-CNT-TKNに「1」を設定する。
次に、ステップS1106では、分岐履歴更新部33は、現在完了条件成立ビットCMP-CNT-TKNが0であるか否かをチェックする。現在完了条件成立ビットCMP-CNT-TKNが0である場合、条件分岐不成立から成立に変化したことを意味するので、ステップS1107へ進む。現在完了条件成立ビットCMP-CNT-TKNが1である場合、条件分岐不成立から成立に変化していないことを意味するので、ステップS1112へ進む。ステップS1112では、分岐履歴更新部33は、現在完了連続回数CMP-CNT[5:0]+1を現在完了連続回数S-CMP-CNT[5:0]に設定する。
ステップS1107では、分岐履歴更新部33は、現在完了連続回数S-CMP-CNT[5:0]に「1」を設定する。
次に、ステップS1108では、分岐履歴更新部33は、条件不成立変化ビットTHNC-DEFが1であるか否かをチェックする。条件不成立変化ビットTHNC-DEFが1である場合、条件分岐不成立から条件分岐成立に変化したことを意味するので、ステップS1109へ進む。条件不成立変化ビットTHNC-DEFが0である場合、条件分岐不成立から条件分岐成立に変化していないことを意味するので、ステップS1111へ進む。
ステップS1111では、分岐履歴更新部33は、条件不成立変化ビットS-THNC-DEFに「1」を設定し、現在完了連続回数CMP-CNT[5:0]を1周期条件不成立連続回数S-THN-CNT[5:0]に設定する。
ステップS1109では、分岐履歴更新部33は、現在完了連続回数CMP-CNT[5:0]と1周期条件不成立連続回数THN-CNT[5:0]が同じであるか否かをチェックする。両者が同じである場合にはステップS1110へ進み、両者が異なる場合には処理を終了する。ステップS1110では、分岐履歴更新部33は、条件不成立連続回数確度ビットS-THNC-PRDに「1」を設定する。
ステップS1113では、分岐履歴更新部33は、現在完了条件成立ビットS-CMP-CNT-TKNに「0」を設定する。
次に、ステップS1114では、分岐履歴更新部33は、現在完了条件成立ビットCMP-CNT-TKNが1であるか否かをチェックする。現在完了条件成立ビットCMP-CNT-TKNが1である場合、条件分岐成立から不成立に変化したことを意味するので、ステップS1115へ進む。現在完了条件成立ビットCMP-CNT-TKNが0である場合、条件分岐成立から不成立に変化していないことを意味するので、ステップS1120へ進む。ステップS1120では、分岐履歴更新部33は、現在完了連続回数CMP-CNT[5:0]+1を現在完了連続回数S-CMP-CNT[5:0]に設定する。
ステップS1115では、分岐履歴更新部33は、現在完了連続回数S-CMP-CNT[5:0]に「1」を設定する。
次に、ステップS1116では、分岐履歴更新部33は、条件成立変化ビットTHTC-DEFが1であるか否かをチェックする。条件成立変化ビットTHTC-DEFが1である場合、条件分岐成立から条件分岐不成立に変化したことを意味するので、ステップS1117へ進む。条件成立変化ビットTHTC-DEFが0である場合、条件分岐成立から条件分岐不成立に変化していないことを意味するので、ステップS1119へ進む。
ステップS1119では、分岐履歴更新部33は、条件成立変化ビットS-THTC-DEFに「1」を設定し、現在完了連続回数CMP-CNT[5:0]を1周期条件成立連続回数S-THT-CNT[5:0]に設定する。
ステップS1117では、分岐履歴更新部33は、現在完了連続回数CMP-CNT[5:0]と1周期条件成立連続回数THT-CNT[5:0]が同じであるか否かをチェックする。両者が同じである場合にはステップS1118へ進み、両者が異なる場合には処理を終了する。ステップS1118では、分岐履歴更新部33は、条件成立連続回数確度ビットS-THTC-PRDに「1」を設定する。
図12は、図9の分岐履歴更新部33の一部の構成例を示す図である。論理積回路1200は、分岐命令完了ビットCOMPLETE及び条件分岐命令確定ビットD-COND-BITの論理積信号を出力する。論理積回路1201は、論理積回路1200の出力信号と分岐予測失敗ビットPRD-MISSと有効フラグLPT-VALIDの論理反転ビットとLPT無効ビットDISABLE-LPTの論理反転ビットとの論理積信号を出力する。論理積回路1202は、論理積回路1200の出力信号と有効フラグLPT-VALIDとLPT無効ビットS-DISABLE-LPTの論理反転ビットとの論理積信号を出力する。論理和回路1203は、論理積回路1201及び1202の出力信号の論理和信号を有効フラグS-LPT-VALIDとしてローカルパターンテーブル(LPT)303に出力する。有効フラグS-LPT-VALIDは、図4(C)の有効フラグLPT-VALIDに対応する。
論理積回路1204は、論理積回路1200の出力信号と有効フラグLPT-VALIDと分岐予測失敗ビットPRD-MISSと予測不一致ビットPRD-BY-LPTと予測失敗ビットLPT-DIZZYの論理反転ビットとの論理積信号を出力する。否定論理積(NAND)回路1205は、論理積回路1200の出力信号と有効フラグLPT-VALIDと予測不一致ビットPRD-BY-LPTと分岐予測失敗ビットPRD-MISSの論理反転ビットとの否定論理積信号を出力する。論理積回路1206は、否定論理積回路1205の出力信号と予測失敗ビットLPT-DIZZYとの論理積信号を出力する。論理和回路1207は、論理積回路1204及び1206の出力信号の論理和信号を予測失敗ビットS-LPT-DIZZYとしてローカルパターンテーブル(LPT)303に出力する。予測失敗ビットS-LPT-DIZZYは、図4(C)の予測失敗ビットLPT-DIZZYに対応する。
論理積回路1208は、論理積回路1200の出力信号と有効フラグLPT-VALIDと分岐予測失敗ビットPRD-MISSと予測不一致ビットPRD-BY-LPTと予測失敗ビットLPT-DIZZYとの論理積信号を出力する。論理和回路1209は、論理積回路1208の出力信号とLPT無効ビットDISABLE-LPTとの論理和信号をLPT無効ビットS-DISABLE-LPTとして分岐履歴テーブル(BRHIS)301に出力する。LPT無効ビットS-DISABLE-LPTは、LPT無効ビットDISABLE-LPTに対応する。
以上のように、ローカルパターンテーブル(LPT)303は、分岐命令完了ビットCOMPLETEが1であり、かつ条件分岐命令確定ビットD-COND-BITが1であった場合、有効フラグLPT-VALIDが0であり、かつLPT無効ビットDISABLE-LPTが0であり、分岐予測失敗ビットPRD-MISSが1(分岐予測失敗)である場合に、有効フラグS-LPT-VALIDに「1」を設定する。これにより、ローカルパターンテーブル(LPT)303のエントリが有効になる。
図13は、図12の回路の処理を示すフローチャートである。ステップS1301では、分岐履歴更新部33は、分岐予測失敗ビットPRD-MISSが1であるか否かをチェックする。分岐予測失敗ビットPRD-MISSが1の場合、分岐予測失敗を意味するので、ステップS1302へ進む。分岐予測失敗ビットPRD-MISSが0の場合、分岐予測成功を意味するので、処理を終了する。
ステップS1302では、分岐履歴更新部33は、有効フラグLPT-VALIDが1であるか否かをチェックする。有効フラグLPT-VALIDが1の場合、ローカルパターンテーブル(LPT)303のエントリは有効であるので、ステップS1303へ進む。有効フラグLPT-VALIDが0の場合、ローカルパターンテーブル(LPT)303のエントリは無効であるので、ステップS1310へ進む。
ステップS1303では、分岐履歴更新部33は、予測不一致ビットPRD-BY-LPTが1であるか否かをチェックする。予測不一致ビットPRD-BY-LPTの1である場合、パターン履歴テーブル(PHT)302による予測結果とローカルパターンテーブル(LPT)303による予測結果が異なることを意味するので、ステップS1304へ進む。予測不一致ビットPRD-BY-LPTの0である場合、パターン履歴テーブル(PHT)302による予測結果とローカルパターンテーブル(LPT)303による予測結果が同じであることを意味するので、処理を終了する。
ステップS1304では、分岐履歴更新部33は、予測失敗ビットLPT-DIZZYが1であるか否かをチェックする。予測失敗ビットLPT-DIZZYが1である場合、一つ前に実行したローカルパターンテーブル303による分岐予測が失敗したことを意味するので、ステップS1305へ進む。予測失敗ビットLPT-DIZZYが0である場合、ステップS1309へ進む。
ステップS1305では、分岐履歴更新部33は、分岐予測失敗ビットPRD-MISSが1であるか否かをチェックする。分岐予測失敗ビットPRD-MISSが1の場合、分岐予測失敗を意味するので、ステップS1306へ進む。分岐予測失敗ビットPRD-MISSが0の場合、分岐予測成功を意味するので、処理を終了する。
ステップS1306では、分岐履歴更新部33は、LPT無効ビットDISABLE-LPTが1であるか否かをチェックする。LPT無効ビットDISABLE-LPTが1である場合、ローカルパターンテーブル(LPT)303の無効を意味するので、ステップS1307へ進む。LPT無効ビットDISABLE-LPTが0である場合、ローカルパターンテーブル(LPT)303の有効を意味するので、ステップS1308へ進む。
ステップS1307では、分岐履歴更新部33は、ローカルパターンテーブル(LPT)303のエントリを無効化する。
ステップS1308では、分岐履歴更新部33は、LPT無効ビットS-DISABLE-LPTに「1」を設定し、ローカルパターンテーブル(LPT)303のエントリを無効化する。
ステップS1309では、分岐履歴更新部33は、予測失敗ビットS-LPT-DIZZYに「1」を設定する。
ステップS1310では、分岐履歴更新部33は、LPT無効ビットDISABLE-LPTが1であるか否かをチェックする。LPT無効ビットDISABLE-LPTが1である場合、ローカルパターンテーブル(LPT)303の無効を意味するので、処理を終了する。LPT無効ビットDISABLE-LPTが0である場合、ローカルパターンテーブル(LPT)303の有効を意味するので、ステップS1311へ進む。
ステップS1311では、分岐履歴更新部33は、有効フラグS-LPT-VALIDに「1」を設定する。
以上のように、条件分岐の成立/不成立の連続回数が安定しないような分岐命令をローカルパターンテーブル(LPT)303により分岐予測すると、分岐予測性能が低下することが懸念される。そのような危険性を回避するために、ローカルパターンテーブル(LPT)303による分岐予測を無効化することにより、ローカルパターンテーブル(LPT)303に適さない分岐命令に対しては、パターン履歴テーブル(PHT)302による分岐予測を行う。
このような構成にすることにより、パターン履歴テーブル(PHT)302の登録処理が終了するまでは、パターン履歴テーブル(PHT)302による分岐予測を行えないので、その間は、ローカルパターンテーブル(LPT)303による分岐予測を行う。これにより、分岐予測の精度を向上させることができる。ローカルパターンテーブル(LPT)303は、条件分岐の成立/不成立の連続回数の基づく分岐予測であるため、パターン履歴テーブル(PHT)302に比べ、早期に登録を完了させ、早期に分岐予測可能になる。
パターン履歴テーブル(PHT)302を含む第1の予測部310は、条件分岐命令の過去の分岐履歴パターンを基に、フェッチされた条件分岐命令の分岐予測情報を出力する。ローカルパターンテーブル(LPT)303を含む第2の予測部312は、条件分岐命令の分岐成立連続回数及び分岐不成立連続回数を記憶し、過去の分岐成立連続回数又は分岐不成立連続回数を基に、フェッチされた条件分岐命令の分岐予測情報LPT-TKNを出力する。選択部311,313〜315は、第1の予測部310が出力する分岐予測情報又は第2の予測部312が出力する分岐予測情報LPT-TKNを選択的に出力する。セレクタ305は、選択部311,313〜315により出力された分岐予測情報に応じて、次のアドレス又は分岐先アドレスPTIAR[31:0]を命令フェッチ部21に出力する。
選択部311は、分岐成立連続回数及び分岐不成立連続回数の周期が過去に2周期以上現れた場合には第2の予測部312が出力する分岐予測情報LPT-TKNを出力し、分岐成立連続回数及び分岐不成立連続回数の周期が過去に2周期以上現れていない場合には第1の予測部310が出力する分岐予測情報を出力する。
図13のステップS1301では、選択部311,313〜315は、第2の予測部312が出力する分岐予測情報LPT-TKNを出力した場合に、第2の予測部312が出力する分岐予測情報LPT-TKNによる予測が失敗した場合には、第2の予測部312が出力する予測情報を無効化する。
また、図13のステップS1301及びS1303では、選択部311,313〜315は、第2の予測部312が出力する分岐予測情報LPT-TKNを出力した場合に、第1の予測部310が出力する分岐予測情報と第2の予測部312が出力する分岐予測情報LPT-TKNとが異なっており、かつ第2の予測部312が出力する分岐予測情報LPT-TKNによる予測が失敗した場合には、第2の予測部312が出力する分岐予測情報LPT-TKNを無効化する。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。