(57)【要約】【課題】演算処理装置の高周波数化が可能でかつ回路規模の増大を抑制し、分岐先アドレスが変化する分岐命令の分岐予測を行えるようにする。【解決手段】分岐予測部が、命令アドレスの一部である第１のインデックスと、命令アドレスの一部を用いた演算で得られる値である第２のインデックスとを含む分岐履歴をウェイ毎に記憶する分岐履歴記憶部が記憶する分岐履歴から読み出したエントリに含まれる分岐命令の分岐情報に基づいて、分岐命令の分岐予測を行なった結果、分岐成立と予測した場合に予測分岐先アドレスを出力し、分岐履歴更新部が、分岐予測で得られた予測分岐先アドレスの予測ミスが検出された場合、分岐情報の更新情報を設定して分岐履歴を更新し、予測ミスが検出され、且つ、分岐情報に更新情報が設定されている場合、分岐履歴記憶部が記憶する分岐履歴に第２のインデックスを用いて分岐情報を登録する。【選択図】図３
2015036934.tif 000002
【特許請求の範囲】
【請求項１】
命令を実行する命令実行部と、
前記命令実行部が実行した命令アドレスの一部である第１のインデックスと、前記命令アドレスの一部と分岐命令とを含む複数の命令の実行履歴に応じた変動値との演算により得られる演算結果値である第２のインデックスとを含む分岐履歴を複数のウェイ毎に記憶する分岐履歴記憶部と、
前記分岐履歴記憶部が記憶する分岐履歴から読み出したエントリに含まれる分岐命令の分岐情報に基づいて、前記分岐命令の分岐予測を行なった結果、分岐が成立すると予測した場合に読み出した前記複数のウェイにそれぞれ対応する複数の前記分岐情報から１つの分岐情報を選択して予測分岐先アドレスを出力する分岐予測部と、
前記分岐予測部が出力した予測分岐先アドレスと分岐命令により得られた分岐先アドレスとが異なる場合、前記分岐情報の更新情報を設定して前記分岐履歴を更新するとともに、前記分岐予測部が出力した予測分岐先アドレスと分岐命令により得られた分岐先アドレスとが異なり、且つ、前記分岐情報に前記更新情報が設定されている場合、前記分岐履歴記憶部が記憶する分岐履歴に前記第２のインデックスを用いて分岐情報を登録する分岐履歴更新部とを有することを特徴とする演算処理装置。
【請求項２】
前記分岐履歴に前記第２のインデックスを用いて分岐情報を登録する場合、前記分岐命令の分岐予測を行なった際に参照した分岐履歴に対応するウェイを示すウェイ情報を用いて、同じ命令アドレスの分岐命令の分岐情報を、前記分岐命令の分岐予測を行なった際に参照した分岐履歴に対応するウェイの前記第１のインデックスとは異なるインデックスに登録することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記分岐履歴記憶部が記憶する分岐履歴において、
複数のインデックスに登録された同一命令アドレスの分岐命令のウェイを同一に揃えることを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
前記分岐情報はさらに、
前記分岐履歴に前記第２のインデックスを用いて登録された分岐情報であるか否かを示す設定情報を有し、前記更新情報と前記設定情報とを含む第１のインデックスを用いて前記分岐履歴を参照して得られた第１の分岐情報と、前記第２のインデックスを用いて分岐履歴を参照して得られた第２の分岐情報とを用いて前記予測分岐先アドレスの選択を行うことを特徴とする請求項１〜３の何れか１項に記載の演算処理装置。
【請求項５】
命令を実行する命令実行部と、前記命令実行部が実行した命令アドレスの一部である第１のインデックスと、前記命令アドレスの一部と分岐命令とを含む複数の命令の実行履歴に応じた変動値との演算により得られる演算結果値である第２のインデックスとを含む分岐履歴を複数のウェイ毎に記憶する分岐履歴記憶部とを有する演算処理装置の制御方法において、
前記演算処理装置が有する分岐予測部が、前記分岐履歴記憶部が記憶する分岐履歴から読み出したエントリに含まれる分岐命令の分岐情報に基づいて、前記分岐命令の分岐予測を行なった結果、分岐が成立すると予測した場合に読み出した前記複数のウェイにそれぞれ対応する複数の前記分岐情報から１つの分岐情報を選択して予測分岐先アドレスを出力し、
前記演算処理装置が有する分岐履歴更新部が、前記分岐予測部が出力した予測分岐先アドレスと分岐命令により得られた分岐先アドレスとが異なる場合、前記分岐情報の更新情報を設定して前記分岐履歴を更新するとともに、前記分岐予測部が出力した予測分岐先アドレスと分岐命令により得られた分岐先アドレスとが異なり、且つ、前記分岐情報に前記更新情報が設定されている場合、前記分岐履歴記憶部が記憶する分岐履歴に前記第２のインデックスを用いて分岐情報を登録することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置の分岐予測機構は、命令のメモリ上での記憶アドレス（以下、命令アドレスという。）を基に、過去に実行された分岐命令の実行履歴を管理することによって、次に分岐命令が実行される場合の分岐先を予測する（例えば、特許文献１参照）。分岐予測機構は、過去に実行された分岐命令の情報（分岐命令アドレス、分岐先アドレス、分岐の成否、等）を分岐履歴として保持しておき、命令の読み出し（フェッチ）時に命令アドレスを用いて分岐履歴を検索することにより、分岐の成否及び分岐先アドレスを予測する。
【０００３】
演算処理装置は、命令のフェッチと並行して、分岐予測機構により、その命令が分岐命令であるか否かを判定し、命令が分岐命令であった場合に予測される分岐先アドレスが取得可能になる。したがって、演算処理装置がパイプライン処理を行っている場合に、現在の命令フェッチと並行して、予測される分岐先アドレスから次のステージでの命令フェッチを準備できる。そして、実際に得られた分岐先アドレスが予測された分岐先アドレスである場合には、演算処理装置は、パイプライン処理を継続して実行する。一方、実際に得られた分岐先アドレスが予測された分岐先アドレスでない場合には、演算処理装置は、投機的に実行していた命令のパイプライン処理をキャンセルして、正しい分岐先アドレスからの命令フェッチを行って処理を実行する。
【０００４】
図１３を参照して、従来の分岐予測方式について説明する。分岐予測機構は、実行された分岐命令の命令アドレスの一部から、セットアソシアティブ方式の分岐履歴（ＢＲＨＩＳ）のインデックスを決定する。そして、分岐予測機構は、分岐命令の命令アドレスの他の部分をタグにして、１つのウェイのインデックスに対応するブロックに、分岐先アドレスを登録する。このようにして分岐予測機構は、１つの分岐命令につき１つの分岐先アドレスを分岐履歴として保持する。図１３においては、分岐履歴のウェイ１（１３１−１）に、分岐命令Ａの分岐先アドレス（ａ）及びタグ等と、分岐命令Ｃの分岐先アドレス（ｃ）及びタグ等とが保持されている。また、分岐履歴のウェイ２（１３１−２）に、分岐命令Ｂの分岐先アドレス（ｂ）及びタグ等が保持されている。
【０００５】
分岐履歴機構は、命令をフェッチするときに、命令フェッチアドレスＦＩＡＲの一部から決定するインデックスｉｎｄｅｘによって分岐履歴１３１−１、１３１−２を検索する。フェッチされる命令が、過去に実行された分岐命令であり、その分岐先アドレスが分岐履歴に記憶されていれば、分岐予測機構は、分岐履歴における分岐先アドレスＷ１＿ＰＴＩＡＲ又はＷ２＿ＰＴＩＡＲを予測分岐先アドレスＰＴＩＡＲとして出力する。このとき、分岐予測機構は、ウェイ選択信号生成論理１３２及び選択部１３３により、インデックスｉｎｄｅｘに対応するブロック内のタグが命令フェッチアドレスＦＩＡＲの他の部分に一致するウェイの内の分岐命令アドレスが最小のウェイからの分岐先アドレスを予測分岐先アドレスＰＴＩＡＲとして出力する。
【０００６】
ここで、分岐命令には、現在実行中の分岐命令の命令アドレスに分岐命令中で指定した即値を加減算することにより分岐先アドレスを生成する相対アドレス分岐と、レジスタの値を参照して分岐先アドレスを生成するレジスタ間接分岐とがある。ここで、即値とは、命令中の所定フィールドに格納した値をいう。相対アドレス分岐は、１つの命令アドレスに対して分岐先アドレスが一意に確定する。レジスタ間接分岐は、分岐命令の実行時点でのレジスタの値に応じて分岐先アドレスが決定するため、１つの命令アドレスの分岐命令に対して、生成され得る分岐先アドレスの値が複数存在する。
【０００７】
分岐先アドレスが変化し得るレジスタ間接分岐の分岐命令に対して分岐予測精度が高い分岐予測方式として、１つの分岐命令について複数の分岐先アドレスを分岐履歴として保持できるRehashable Branch Target Buffer（Ｒ−ＢＴＢ）という技術が提案されている（例えば、非特許文献１参照）。
【０００８】
図１４を参照して、Ｒ−ＢＴＢの分岐予測方式について説明する。Ｒ−ＢＴＢの分岐予測機構は、特許文献１の技術とは異なり、１つの命令アドレスの分岐命令に対して２つ以上の分岐先アドレスを格納し、格納した２つ以上の分岐先アドレスを分岐予測に用いることにより、分岐先アドレスが変化するレジスタ間接分岐に対しても高い精度で分岐予測が可能となる。分岐予測機構は、分岐命令の分岐先アドレスの予測ミスの回数、言い換えれば分岐先アドレスが変化した回数を分岐命令毎に数えている。ＣＩＢＩＢ（Critical Indirect Branch Instruction Buffer）１４３は、予測ミスの回数がある閾値を超えた分岐命令の命令アドレスを格納するテーブルを有する。
【０００９】
分岐予測機構は、分岐命令の分岐先アドレスの予測ミスの回数がある閾値を超えていない場合、すなわち分岐命令の命令アドレスがＣＩＢＩＢ１４３に格納されていない場合には、選択部１４１により分岐命令の命令アドレスの一部を分岐履歴のインデックスに決定する。また、分岐予測機構は、分岐命令の分岐先アドレスの予測ミスの回数がある閾値を超えた場合、すなわち分岐命令の命令アドレスがＣＩＢＩＢ１４３に格納されている場合には、選択部１４１により分岐命令の命令アドレスの一部と分岐命令を含む複数の命令を実行することにより変動するある値とを排他的論理和演算回路１４２により演算した値から分岐履歴のインデックスを決定する。図１４においては、複数の命令を実行することにより変動する値として、対象の分岐命令を実行する前までに実行された分岐命令の分岐先アドレスの一部を時系列に連結したレジスタＴＨＲ（Target History Register）の値を用いている（例えば、非特許文献２参照）。
【００１０】
このようにしてＲ−ＢＴＢの分岐予測方式では、１つの命令アドレスの分岐命令に対して、複数の分岐先アドレスを対応づけることが可能となる。例えば、図１４においては、分岐履歴１４４に、分岐命令の命令アドレスの一部とレジスタＴＨＲの値とを排他的論理和演算して得られた値をインデックスとして分岐命令Ｂの分岐先アドレス（ｂ）がエントリＢ（１）として保持され、分岐命令の命令アドレスの一部とエントリＢ（１）登録時とは異なるレジスタＴＨＲの値とを排他的論理和演算して得られた値をインデックスとして分岐命令Ｂの分岐先アドレス（ｃ）がエントリＢ（１）とは異なるエントリＢ（２）として保持されている。
【００１１】
分岐予測時には、分岐予測機構は、分岐命令の命令アドレスがＣＩＢＩＢ１４３に格納されている場合には、命令フェッチアドレスＦＩＡＲの一部とレジスタＴＨＲの値とを排他的論理和演算した値をインデックスｉｎｄｅｘとして分岐履歴１４４を検索する。また、分岐予測機構は、分岐命令の命令アドレスがＣＩＢＩＢ１４３に格納されていない場合には、命令フェッチアドレスＦＩＡＲの一部をインデックスｉｎｄｅｘとして分岐履歴１４４を検索する。分岐予測機構は、インデックスｉｎｄｅｘに対応するブロック内のタグが命令フェッチアドレスＦＩＡＲの他の部分に一致したものの分岐先アドレスを予測分岐先アドレスＰＴＩＡＲとして出力する。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開平６−８９１７３号公報
【非特許文献】
【００１３】
【非特許文献１】T.Li, R.Bhargava, and L.K.John. Rehashable BTB:An Adaptive Branch Target Buffer to Improve the Target Predictability of Java Code. In HiPC-02, 2002.
【非特許文献２】P.-Y.Chang, E.Hao, and Y.N.Patt. Target prediction for indirect jumps. In ISCA-24, 1997.
【発明の概要】
【発明が解決しようとする課題】
【００１４】
前述したＲ−ＢＴＢの分岐予測方式は、１つの分岐命令について複数の分岐先アドレスを分岐履歴として保持でき、分岐先アドレスが変化する分岐命令にも高い分岐予測精度を得ることが可能である。しかし、Ｒ−ＢＴＢの分岐予測方式は、ＣＩＢＩＢ１４３のテーブルや、分岐命令毎に分岐先アドレスの予測ミスの回数を計数して保持する回路を設けるため、回路規模が増大する。また、Ｒ−ＢＴＢの分岐予測方式は、ＣＩＢＩＢ１４３を検索して得られる結果を用いてインデックスを決定し分岐履歴の検索を行うので、分岐履歴の検索までに要する論理量が多く、演算処理装置の高周波数化には不向きである。
【００１５】
１つの側面では、本発明の目的は、演算処理装置の高周波数化が可能でかつ回路規模の増大を抑制し、分岐先アドレスが変化する分岐命令を含む分岐命令の分岐予測を行えるようにすることにある。
【課題を解決するための手段】
【００１６】
演算処理装置の一態様は、命令を実行する命令実行部と、命令実行部が実行した命令アドレスの一部である第１のインデックスと、命令アドレスの一部を用いた演算により得られる演算結果値である第２のインデックスとを含む分岐履歴を複数のウェイ毎に記憶する分岐履歴記憶部と、分岐履歴記憶部が記憶する分岐履歴から読み出したエントリに含まれる分岐命令の分岐情報に基づいて、分岐命令の分岐予測を行なった結果、分岐が成立すると予測した場合に読み出した複数のウェイにそれぞれ対応する複数の分岐情報から１つの分岐情報を選択して予測分岐先アドレスを出力する分岐予測部と、分岐予測により得られた予測分岐先アドレスと分岐命令により得られた分岐先アドレスとが異なる場合、分岐情報の更新情報を設定して分岐履歴を更新するとともに、分岐予測により得られた予測分岐先アドレスと分岐命令により得られた分岐先アドレスとが異なり、且つ、分岐情報に更新情報が設定されている場合、分岐履歴記憶部が記憶する分岐履歴に第２のインデックスを用いて分岐情報を登録する分岐履歴更新部とを有する。
【発明の効果】
【００１７】
発明の一態様においては、複数の異なるインデックスを使用して１つの分岐命令に対応する分岐情報を分岐履歴に保持することができ、分岐先アドレスが変化する分岐命令についての分岐予測を行うことができる。また、複数の異なるインデックスを使用して分岐履歴から複数の分岐情報を並列に読み出すことが可能であり、また更新情報によって分岐先アドレスの変動頻度を管理するので、演算処理装置の高周波数化が可能でかつ回路規模の増大を抑制することができる。ただし、分岐履歴参照の並列度を上げたことで、分岐履歴を読み出した後で分岐情報を選択する必要が生じる。分岐履歴を複数のウェイで構成している場合にはさらに選択対象が増えるため、高周波数化は困難となる。そこで同一の分岐命令に対して、第１のインデックスにより登録するエントリとハッシュインデックスにより登録するエントリとを同一のウェイでしか構築できないように制限を加えることで、ウェイの選択対象を増やさずに分岐履歴から読み出した分岐情報のウェイ選択論理の論理量を軽減し、高周波数化に適した分岐予測部の構成が可能となる。
【図面の簡単な説明】
【００１８】
【図１】情報処理システムの構成例を示す図である。
【図２】本実施形態におけるプロセッサの構成例を示す図である。
【図３】本実施形態における分岐予測方式を説明するための図である。
【図４】本実施形態における分岐履歴のエントリの構成例を示す図である。
【図５】本実施形態における分岐予測部の構成例を示す図である。
【図６】本実施形態におけるウェイ選択信号生成部の構成例を示す図である。
【図７】本実施形態における分岐命令検出部の構成例を示す図である。
【図８】本実施形態における分岐先アドレス生成部の構成例を示す図である。
【図９】本実施形態における分岐情報選択部の構成例を示す図である。
【図１０Ａ】本実施形態における分岐予測部の動作例を示すフローチャートである。
【図１０Ｂ】本実施形態における分岐予測部の動作例を示すフローチャートである。
【図１１】本実施形態における分岐履歴更新部の構成例を示す図である。
【図１２】本実施形態における分岐履歴更新部の動作例を示すフローチャートである。
【図１３】従来の分岐予測方式を説明するための図である。
【図１４】従来の分岐予測方式を説明するための図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施形態を図面に基づいて説明する。
【００２０】
図１は、演算処理装置としてのプロセッサを含む情報処理システムの構成例を示す図である。図１に示す情報処理システムは、例えば複数のプロセッサ１１Ａ、１１Ｂ及びメモリ１２Ａ、１２Ｂと、外部装置との入出力制御を行うインターコネクト制御部１３とを有する。
【００２１】
図２は、本実施形態におけるプロセッサ１１の構成例を示す図である。本実施形態におけるプロセッサ１１は、例えば命令のアウトオブオーダー（out of order）実行やパイプライン処理の機能を有する。
【００２２】
命令フェッチステージでは、命令フェッチ制御部２１、分岐予測部２２、一次命令キャッシュメモリ２３、命令バッファ２４、及び二次キャッシュメモリ３５等が動作する。命令フェッチ制御部２１は、分岐予測部２２からフェッチする命令の予測分岐先アドレス、分岐制御部３０から分岐演算により確定した分岐先アドレス、プログラムカウンタ制御部３３から次に命令完了する命令のアドレスであるプログラムカウンタ値等を受け取る。命令フェッチ制御部２１は、受け取った予測分岐先アドレス、分岐先アドレス、プログラムカウンタ値、及び命令フェッチ制御部２１内で作成した分岐しない場合にフェッチする命令の連続した次のアドレス等から、１つのアドレスを選択して次の命令フェッチアドレスを確定する。命令フェッチ制御部２１は、確定した命令フェッチアドレスを一次命令キャッシュメモリ２３に出力し、出力された確定後の命令フェッチアドレスに対応する命令コードをフェッチする。
【００２３】
一次命令キャッシュメモリ２３は、二次キャッシュメモリ３５の一部のデータを格納しているものであり、二次キャッシュメモリ３５は、メモリコントローラ３６を介してアクセス可能なメモリの一部のデータを格納しているものである。一次命令キャッシュメモリ２３に該当するアドレスのデータが存在しない場合には二次キャッシュメモリ３５からデータをフェッチし、二次キャッシュメモリ３５に該当するデータが存在しない場合にはメモリからデータをフェッチする。本実施形態では、メモリはプロセッサ１１の外部に配置しているため、外部にあるメモリとの入出力制御はメモリコントローラ３６を介して行われる。一次命令キャッシュメモリ２３や二次キャッシュメモリ３５、メモリの該当するアドレスからフェッチされた命令コードは、命令バッファ２４に格納される。
【００２４】
分岐予測部２２は、命令フェッチ制御部２１から出力された命令フェッチアドレスを受け取り、命令フェッチと並行して分岐予測を実行する。分岐予測部２２は、受け取った命令フェッチアドレスを基に分岐予測を行い、分岐の成立又は不成立を示す分岐方向と予測分岐先アドレスとを命令フェッチ制御部２１へ返す。命令フェッチ制御部２１は、予測された分岐方向が成立であった場合には、次の命令フェッチアドレスとして分岐予測部２２によって予測された分岐先アドレスを選択する。
【００２５】
命令発行ステージでは、命令デコーダ２５及び命令発行制御部２６が動作する。命令デコーダ２５は、命令バッファ２４から命令コードを受け取って命令の種別や必要な実行資源等を解析し、解析結果を命令発行制御部２６や分岐制御部３０、命令完了制御部３２に出力する。
【００２６】
命令発行制御部２６は、リザベーションステーション（reservation station）の構造を持つ。命令発行制御部２６は、命令で参照するレジスタ等の依存関係を見て、依存関係のあるレジスタの更新状況や同じ実行資源を用いる命令の実行状況等から実行資源が命令を実行可能かどうかを判断する。命令発行制御部２６は、実行資源が命令を実行可能であると判断した場合には、レジスタ番号やオペランドアドレス等の命令の実行に必要な情報を実行資源に対して出力する。また、命令発行制御部２６は、実行可能な状態になるまで命令を格納しておくバッファの機能も有する。命令アドレスバッファ２７は、命令フェッチ制御部２１から出力された命令フェッチアドレスを格納する。
【００２７】
命令実行ステージでは、演算器２８、一次データキャッシュメモリ２９、及び分岐制御部３０等の実行資源が動作する。演算器２８は、レジスタ３１や一次データキャッシュメモリ２９からデータを受け取り、四則演算、論理演算、三角関数演算、及びアドレス計算等の命令に対応した演算を実行し、演算結果をレジスタ３１や一次データキャッシュメモリ２９に出力する。
【００２８】
一次データキャッシュメモリ２９は、一次命令キャッシュメモリ２３と同様に、二次キャッシュメモリ３５の一部のデータを格納しているものである。一次データキャッシュメモリ２９は、ロード命令によるメモリから演算器２８やレジスタ３１へのデータのロードや、ストア命令による演算器２８やレジスタ３１からメモリへのデータのストア等に用いられる。各実行資源は、命令実行の完了通知を命令完了制御部３２へ出力する。
【００２９】
分岐制御部３０は、リザベーションステーションの構造を持つ。分岐制御部３０は、命令デコーダ２５から分岐命令の種別、命令アドレスバッファ２７から命令デコーダ２５に同期した分岐命令アドレス、演算器２８から分岐先アドレスや分岐条件となる演算の結果を受け取って、分岐命令毎にそれぞれの情報を格納する。分岐制御部３０は、得られた演算結果が分岐条件を満たしていれば分岐成立、満たしていなければ分岐不成立の判断を行い、分岐方向を確定する。また、分岐制御部３０は、演算結果と分岐予測時の分岐先アドレスと分岐方向が一致するかどうかの判断や、分岐命令の順序関係の制御も行う。分岐制御部３０は、分岐リザベーションステーションのエントリ作成時に分岐予測時の分岐方向や分岐先アドレスを登録し、演算結果と予測との一致検証を実行した後、演算結果によりエントリの置き換えを行う。
【００３０】
分岐制御部３０は、演算結果と予測とが一致した場合には命令完了制御部３２へ分岐命令の完了通知を出力する。一方、演算結果と予測とが一致しなかった場合には分岐予測失敗を意味するので、分岐制御部３０は、命令完了制御部３２へ分岐命令の完了通知とともに後続命令のキャンセル及び再命令フェッチ要求を出力する。また、分岐制御部３０は、分岐成立が確定した場合には完了通知を出力した分岐リザベーションステーションのエントリから演算結果の分岐先アドレスをプログラムカウンタ制御部３３へ出力する。
【００３１】
命令完了ステージでは、命令完了制御部３２、レジスタ３１、プログラムカウンタ制御部３３、及び分岐履歴更新部３４が動作する。命令完了制御部３２は、命令デコーダ２５から受け取った命令の種別等を順にコミットスタックエントリに格納する。命令完了制御部３２は、命令の各実行資源から受け取った完了通知を基に、コミットスタックエントリに格納された命令コード順に命令完了処理を行い、レジスタやプログラムカウンタ等の更新指示を出力する。レジスタ３１は、命令完了制御部３２からレジスタ更新指示を受け取ると、演算器２８や一次データキャッシュメモリ２９から受け取る演算結果のデータを基にレジスタの更新を実行する。
【００３２】
プログラムカウンタ制御部３３は、命令完了制御部３２から命令完了指示や命令完了した命令の種別、分岐制御部３０から分岐先アドレスを受け取る。プログラムカウンタ制御部３３は、命令完了制御部３２から分岐命令の命令完了指示を受け取ると、分岐制御部３０から受け取った分岐先アドレスをプログラムカウンタにセットする。また、プログラムカウンタ制御部３３は、命令完了制御部３２から分岐命令以外の命令の命令完了指示を受け取ると、命令完了した命令数に応じてプログラムカウンタの値を加算する。更新後のプログラムカウンタの値は、次に命令完了する命令のアドレスを示す。分岐履歴更新部３４は、分岐制御部３０から受け取る分岐演算の結果を基に、分岐予測の履歴更新データを作成して分岐予測部２２に出力する。
【００３３】
図３は、本実施形態における分岐予測方式を説明するための図である。本実施形態における分岐予測方式は、分岐履歴（ＢＲＨＩＳ）を複数のウェイで構成している。なお、図３においては、分岐履歴を２つのウェイ（４１−１、４１−２）で構成した例を示しているが、これに限定されるものではない。各ウェイは、例えば２ポートのマルチリードＲＡＭ（Random Access Memory）である。分岐履歴のウェイ１（４１−１）及びウェイ２（４１−２）には、図４に示す分岐情報が登録される。
【００３４】
図４は、本実施形態における分岐履歴のエントリの構成例を示す図である。本実施形態における分岐履歴は、１つのエントリ毎に、登録された分岐命令の命令アドレスＰＩＡＲ＜３１：２＞、分岐先アドレスＰＴＩＡＲ＜３１：０＞、及びフラグＶ、ＨＡＳＨＥＤ、ＴＧＴＵＭ、ＩＮＤＩＲを含む分岐情報を記憶する。
【００３５】
フラグＶは、登録された分岐情報が有効であるか否かを示すフラグである。本実施形態では、フラグＶは、分岐情報が有効である場合に“１”とし、分岐情報が有効でない場合に“０”とする。フラグＨＡＳＨＥＤは、分岐情報を登録したときに使用したインデックスが、ハッシュインデックスであるか否かを示すフラグである。本実施形態では、フラグＨＡＳＨＥＤは、登録時に使用したインデックスがハッシュインデックスである場合に“１”とし、登録時に使用したインデックスが非ハッシュインデックスである場合に“０”とする。
【００３６】
ここで、非ハッシュインデックスは、分岐命令の命令アドレスの一部を使用したインデックスである。また、ハッシュインデックスは、分岐命令の命令アドレスの一部と分岐命令を含む複数の命令を実行することにより変動する変動値とを排他的論理和演算して得られた値を使用したインデックスである。本実施形態では、複数の命令を実行することにより変動する変動値として、レジスタＴＨＲ（Target History Register）が保持する、対象の分岐命令を実行する前までに実行された分岐命令の分岐先アドレスの一部を時系列に連結した値（部分分岐アドレス連結値）を用いる。
【００３７】
フラグＴＧＴＵＭは、登録された分岐情報に係る分岐命令が過去に分岐先アドレスの予測ミスが検出されたことがあるか否かを示すフラグである。本実施形態では、フラグＴＧＴＵＭは、その分岐命令が過去に分岐先アドレスの予測ミスが検出されている場合に“１”とし、過去に１回も分岐先アドレスの予測ミスが検出されていない場合に“０”とする。フラグＩＮＤＩＲは、登録された分岐情報に係る分岐命令がレジスタ間接分岐であるか否かを示すフラグである。本実施形態では、フラグＩＮＤＩＲは、その分岐命令がレジスタ間接分岐の分岐命令である場合に“１”とし、レジスタ間接分岐の分岐命令でない（相対アドレス分岐の分岐命令である）場合に“０”とする。
【００３８】
フラグＶ、ＨＡＳＨＥＤ、ＴＧＴＵＭ、ＩＮＤＩＲは、初期状態では“０”であるものとする。分岐履歴に分岐情報が記憶されていない分岐命令が実行されると、分岐履歴更新部３４は、フラグＶを“１”にセットするとともに、その分岐命令がレジスタ間接分岐の分岐命令であればフラグＩＮＤＩＲを“１”セットして、分岐命令の命令アドレスＰＩＡＲ＜３１：２＞及び分岐先アドレスＰＴＩＡＲ＜３１：０＞を登録し、分岐予測部２２が有する分岐履歴を更新する。このとき、更新する分岐履歴のインデックスには、非ハッシュインデックスを用いる。
【００３９】
その後、再び同じ命令アドレスのレジスタ間接分岐の分岐命令が実行され、分岐予測時にその分岐命令に係る分岐履歴のフラグＶが“１”であった場合、レジスタ間接分岐の分岐命令の演算が完了し、分岐先アドレスの予測ミスが判明した場合には、分岐履歴更新部３４は、フラグＴＧＴＵＭを“１”にセットし、演算完了時の値で分岐先アドレスＰＴＩＡＲ＜３１：０＞の更新を行う。このとき、更新する分岐履歴のインデックスには、非ハッシュインデックスを用いる。
【００４０】
さらに、再び同じ命令アドレスのレジスタ間接分岐の分岐命令が実行され、分岐予測時にその分岐命令に係る分岐履歴のフラグＴＧＴＵＭが“１”であった場合、演算完了時に分岐先アドレスの予測ミスが判明した場合に、分岐履歴更新部３４は、その分岐命令の分岐先アドレスが変化する頻度が高いと判断する。そして、分岐履歴更新部３４は、非ハッシュインデックスを用いて分岐情報を登録したウェイと同じウェイに、ハッシュインデックスを用いて、分岐命令の命令アドレスＰＩＡＲ＜３１：２＞及び演算結果である分岐先アドレスＰＴＩＡＲ＜３１：０＞を登録し分岐履歴を更新する。このとき、フラグＶ、ＨＡＳＨＥＤ、ＴＧＴＵＭ、ＩＮＤＩＲのすべてを“１”にセットする。例えば、図３に例示したように、非ハッシュインデックスを用いて登録した、分岐先アドレスが“ｃ”である分岐命令Ｃの分岐情報が分岐履歴のウェイ１（４１−１）に登録されている場合には、ハッシュインデックスを用いて登録する、分岐先アドレスが“ｄ”である分岐命令Ｃの分岐情報は、分岐履歴のウェイ１（４１−１）に登録する。
【００４１】
以後、同じ命令アドレスのレジスタ間接分岐の分岐命令が実行され、演算完了時に分岐先アドレスの予測ミスが判明した場合には、分岐履歴更新部３４は、その分岐命令の分岐情報が登録されているウェイと同じウェイに、ハッシュインデックスを用いて分岐情報の登録を行う。分岐履歴更新部３４は、分岐命令の命令アドレスＰＩＡＲ＜３１：２＞及び演算結果である分岐先アドレスＰＴＩＡＲ＜３１：０＞を登録するとともに、フラグＶ、ＨＡＳＨＥＤ、ＴＧＴＵＭ、ＩＮＤＩＲのすべてを“１”にセットして分岐履歴を更新する。
【００４２】
また、分岐予測時には、分岐予測部２２は、非ハッシュインデックスｉｎｄｅｘ１及びハッシュインデックスｉｎｄｅｘ２で、分岐履歴のウェイ１（４１−１）及びウェイ２（４１−２）をそれぞれ参照する。非ハッシュインデックスｉｎｄｅｘ１は、命令フェッチアドレスＦＩＡＲの一部をインデックスとするものである。また、ハッシュインデックスｉｎｄｅｘ２は、命令フェッチアドレスＦＩＡＲの一部とレジスタＴＨＲの値とを排他的論理和演算回路（ＸＯＲ回路）４２でＸＯＲ演算して得られた値をインデックスとするものである。
【００４３】
したがって、分岐履歴のウェイ１（４１−１）からは、非ハッシュインデックスｉｎｄｅｘ１により検索された分岐先アドレスＷ１＿ＰＴＩＡＲ１及びハッシュインデックスｉｎｄｅｘ２により検索された分岐先アドレスＷ１＿ＰＴＩＡＲ２が出力される。同様に、分岐履歴のウェイ２（４１−２）からは、非ハッシュインデックスｉｎｄｅｘ１により検索された分岐先アドレスＷ２＿ＰＴＩＡＲ１及びハッシュインデックスｉｎｄｅｘ２により検索された分岐先アドレスＷ２＿ＰＴＩＡＲ２が出力される。
【００４４】
分岐予測部２２は、ウェイ毎に、分岐先アドレス予測論理４３が有する分岐先アドレス選択信号生成論理４４及び分岐先アドレス選択論理４５により、分岐履歴から出力された分岐先アドレスを選択する。非ハッシュインデックスから得られる分岐情報においてフラグＴＧＴＵＭ及びフラグＩＮＤＩＲがともに“１”であり、同じウェイのハッシュインデックスから得られる分岐情報のうち、フラグＨＡＳＨＥＤが“１”で、かつ登録されている命令アドレスの一部が非ハッシュインデックスとハッシュインデックスとで同じである場合に、ハッシュインデックスから得られた分岐情報の分岐先アドレスを選択する。一方、前述した条件が全てそろわない場合には、非ハッシュインデックスから得られた分岐情報の分岐先アドレスを選択する。
【００４５】
また、分岐予測部２２は、ウェイ選択信号生成論理４６により、分岐履歴の分岐情報を参照して、フェッチする命令が分岐命令であるか否か、及びどのウェイから分岐先アドレスを取得するかを決定し、ウェイ選択信号を生成する。そして、分岐情報選択論理４７により、ウェイ選択信号により指定されるウェイからの分岐先アドレスを選択し、予測分岐先アドレスＰＴＩＡＲとして出力する。ここで、本実施形態では、ある分岐命令の分岐情報は、非ハッシュインデックスを用いて登録されるウェイとハッシュインデックスを用いて登録されるウェイとを同じにしているので、ウェイ選択信号生成論理４６によるウェイ選択信号の生成は、ハッシュインデックスから得られる分岐情報を用いずに非ハッシュインデックスから得られる分岐情報のみを用いて行うことが可能である。
【００４６】
図５は、本実施形態における分岐予測部２２の構成例を示す図である。本実施形態では、命令フェッチは、命令キャッシュメモリ等から同時に８命令分のデータを読み出すものとする。また、分岐履歴は４つのウェイを有するものとし、命令フェッチアドレスＦＩＡＲ＜３１：０＞から得られる１つのインデックスに対して４ウェイ同時に分岐情報を読み出し、そこから有効なウェイを選択する。
【００４７】
最初の１サイクル（Ａステージ）において、命令フェッチ制御部２１が命令フェッチアドレスＦＩＡＲ＜３１：０＞を確定し、分岐予測部２２は、確定した命令フェッチアドレスＦＩＡＲ＜３１：０＞を基に、インデックス生成論理により分岐履歴のインデックスを生成する。図５に示した例では、命令フェッチアドレスＦＩＡＲ＜３１：０＞の一部であるＦＩＡＲ＜１４：５＞による非ハッシュインデックス、及びＦＩＡＲ＜１４：５＞とレジスタＰＴＨＲ＜９：０＞とをＸＯＲ演算回路５９でＸＯＲ演算して得られるハッシュインデックスが生成される。レジスタＰＴＨＲは、分岐予測時に検出した分岐命令の分岐先アドレスの一部を時系列に連結した値である部分分岐アドレス連結値を格納しており、本実施形態では、部分分岐アドレス連結値として、レジスタ間接分岐の分岐命令の分岐先アドレスの内の任意の２ビットを抽出して時系列に連結した値を格納しているものとする。
【００４８】
次のサイクル（Ｔステージ）において、分岐予測部２２は、Ａステージで生成したインデックス（非ハッシュインデックス及びハッシュインデックス）を用いて分岐履歴（ＢＲＨＩＳ）５１を検索し、分岐情報を読み出す。
【００４９】
その次のサイクル（Ｍステージ）において、分岐予測部２２は、分岐履歴５１から読み出した４ウェイ、２ポートの合わせて８エントリの分岐情報を使用して、分岐予測論理部５２で分岐予測を行う。分岐予測論理部５２は、フェッチした命令に含まれる分岐命令が分岐するか否かの判定を行うとともに、分岐先アドレスの予測を行い予測分岐先アドレスＰＴＩＡＲ＜３１：０＞を確定する。分岐予測論理部５２は、ウェイ選択信号生成部５３、分岐命令検出部５４、分岐先アドレス生成部５５、及び分岐情報選択部５６を有する。
【００５０】
なお、図５において、ｉを添え字（ｉ＝１、２、３、４）として、Ｗｉ＿Ｎ＿ＰＴＩＡＲ＜３１：０＞は、分岐履歴５１のウェイｉから非ハッシュインデックスを用いて読み出された分岐先アドレスであり、Ｗｉ＿Ｎ＿ＴＡＧＳは、分岐履歴５１のウェイｉから非ハッシュインデックスを用いて読み出された分岐命令の命令アドレス及び各フラグである。また、Ｗｉ＿Ｈ＿ＰＴＩＡＲ＜３１：０＞は、分岐履歴５１のウェイｉからハッシュインデックスを用いて読み出された分岐先アドレスであり、Ｗｉ＿Ｈ＿ＴＡＧＳは、分岐履歴５１のウェイｉからハッシュインデックスを用いて読み出された分岐命令の命令アドレス及び各フラグである。
【００５１】
最後のサイクル（Ｂステージ）において、命令フェッチ制御部２１は、分岐予測部２２での分岐予測に基づき、次の命令フェッチアドレスＮＦＩＡＲ＜３１：０＞を確定する。なお、パイプラインで動作するため、この命令のＢステージは次の命令のＡステージに相当する。分岐すると予測した場合には分岐予測部２２が信号ＰＴＡＫＥＮを“１”として命令フェッチ制御部２１に出力し、命令フェッチ制御部２１は、分岐予測で得られた予測分岐先アドレスＰＴＩＡＲ＜３１：０＞を次の命令フェッチアドレスＮＦＩＡＲ＜３１：０＞として命令フェッチを継続する。また、分岐しないと予測した場合には分岐予測部２２が信号ＰＴＡＫＥＮを“０”として命令フェッチ制御部２１に出力し、命令フェッチ制御部２１は、シーケンシャル方向に増分したアドレスＳＩＡＲ＜３１：０＞を次の命令フェッチアドレスＮＦＩＡＲ＜３１：０＞として命令フェッチを継続する。アドレスＳＩＡＲ＜３１：０＞は、８命令分のデータサイズに相当する３２バイト分の値を命令フェッチアドレスＦＩＡＲ＜３１：０＞に加算部５７で加算して得られるアドレス値である。
【００５２】
分岐予測論理部５２のウェイ選択信号生成部５３、分岐命令検出部５４、分岐先アドレス生成部５５、及び分岐情報選択部５６について説明する。
図６は、ウェイ選択信号生成部５３の構成例を示す図である。ウェイ選択信号生成部５３は、分岐履歴から得られる分岐情報のうち、どのウェイの分岐情報を選択するかを決める。ウェイ選択信号生成部５３は、非ハッシュインデックスから得られる分岐情報を用いて選択するウェイを決定する。ここでは簡単のため、分岐履歴に有効な分岐命令のエントリが存在していることで、対応する分岐命令が分岐すると予測するものとして説明する。
【００５３】
ウェイ選択信号生成部５３は、各ウェイで非ハッシュインデックスにより検索されたエントリから有効な分岐命令のエントリが存在したことを示す信号Ｗ１＿ＨＩＴ、Ｗ２＿ＨＩＴ、Ｗ３＿ＨＩＴ、Ｗ４＿ＨＩＴと、登録された分岐命令の命令アドレスの下位部分であるＷ１＿Ｎ＿ＰＩＡＲ＜４:２＞、Ｗ２＿Ｎ＿ＰＩＡＲ＜４:２＞、Ｗ３＿Ｎ＿ＰＩＡＲ＜４:２＞、Ｗ４＿Ｎ＿ＰＩＡＲ＜４:２＞とを受け取る。ここで、命令アドレスの下位部分ＰＩＡＲ＜４：２＞は、８命令を同時にフェッチしたときの分岐命令の８命令中の位置を示す。
【００５４】
ウェイ選択信号生成部５３は、有効な分岐命令のエントリが存在した（信号ＨＩＴが“１”である）ウェイのうち、命令アドレスの下位部分ＰＩＡＲ＜４：２＞が最も小さい値のもの、すなわち分岐命令のうちで命令の位置が先頭にあるものを選択する。例えば、ウェイ１の信号Ｗ１＿ＨＩＴが“１”であり、かつ比較部６２での比較の結果、ウェイ１の命令アドレスの下位部分Ｗ１＿Ｎ＿ＰＩＡＲ＜４：２＞の値が他の有効なウェイに比べて最も値が小さいとする。このとき、ウェイ選択信号生成部５３は、論理積演算回路（ＡＮＤ回路）６１から出力する信号Ｗ１＿ＳＥＬを“１”として、分岐情報選択部５６に出力する。
【００５５】
一方、ウェイ１の信号Ｗ１＿ＨＩＴが“０”であるか、ウェイ１の信号Ｗ１＿ＨＩＴが“１”であってもウェイ１の命令アドレスの下位部分Ｗ１＿Ｎ＿ＰＩＡＲ＜４：２＞の値が他の有効なウェイの値よりも大きい場合には、ウェイ選択信号生成部５３は、他の有効なウェイのうちＰＩＡＲ＜４：２＞の値が最も小さいウェイｉの信号Ｗｉ＿ＳＥＬを“１”として分岐情報選択部５６に出力する。
【００５６】
本実施形態では、ハッシュインデックスによる分岐履歴のエントリが、対応する分岐命令の非ハッシュインデックスによる分岐履歴のエントリと同じウェイに記憶される。したがって、ウェイ選択信号生成部５３での処理結果は、非ハッシュインデックスにより検索された分岐履歴のエントリの分岐情報の選択、及びハッシュインデックスにより検索された分岐履歴のエントリの分岐情報の選択の双方に使用することができる。ウェイ選択信号生成部５３は、非ハッシュインデックスを用いて得られる分岐情報を基に動作するため、従来とほぼ同様の論理で構成可能であり、ウェイ選択信号生成部５３における回路規模の増加はほぼ０にすることが可能である。
【００５７】
ここで、信号Ｗ１＿ＨＩＴ、Ｗ２＿ＨＩＴ、Ｗ３＿ＨＩＴ、Ｗ４＿ＨＩＴの内の少なくとも１つが“１”である場合には、分岐予測論理部５２は、分岐すると予測し信号ＰＴＡＫＥＮを“１”として命令フェッチ制御部２１に出力する。また、信号Ｗ１＿ＨＩＴ、Ｗ２＿ＨＩＴ、Ｗ３＿ＨＩＴ、Ｗ４＿ＨＩＴのすべてが“０”である場合には、分岐予測論理部５２は、命令フェッチする８命令の中に分岐命令が存在しないと判断し、分岐しないと予測し信号ＰＴＡＫＥＮを“０”として命令フェッチ制御部２１に出力する。
【００５８】
図７は、分岐命令検出部５４の構成例を示す図である。分岐命令検出部５４は、ウェイ毎に構成し、そのウェイｉに登録された分岐命令が有効なエントリであるか否かを示す信号Ｗｉ＿ＨＩＴを生成する。分岐命令検出部５４は、非ハッシュインデックスから得られる分岐情報を用いて信号Ｗｉ＿ＨＩＴを生成する。
【００５９】
図７には、ウェイ１の分岐命令検出部５４を一例として示している。ウェイ１の分岐命令検出部５４は、分岐履歴から登録された分岐命令の命令アドレスであるＷ１＿Ｎ＿ＰＩＡＲ＜３１：１５＞と、読み出した分岐情報が有効であるか否かを示すフラグＷ１＿Ｎ＿Ｖと、分岐情報を登録したときに使用したインデックスがハッシュインデックスであるか否かを示すフラグＷ１＿Ｎ＿ＨＡＳＨＥＤとを受け取る。
【００６０】
ウェイ１の分岐命令検出部５４は、比較器７１及びＡＮＤ回路７２を有する。比較器７１は、命令フェッチアドレスＦＩＡＲ＜３１：１５＞と、登録された分岐命令の命令アドレスＷ１＿Ｎ＿ＰＩＡＲ＜３１：１５＞とを比較し、比較結果を出力する。ＡＮＤ回路７２は、比較器７１の出力、フラグＷ１＿Ｎ＿Ｖ、及び反転したフラグＷ１＿Ｎ＿ＨＡＳＨＥＤが入力され、その演算結果を信号Ｗ１＿ＨＩＴとして出力する。
【００６１】
すなわち、フラグＷ１＿Ｎ＿Ｖが“１”であり、かつフラグＷ１＿Ｎ＿ＨＡＳＨＥＤが“０”であって、登録された分岐命令の命令アドレスＷ１＿Ｎ＿ＰＩＡＲ＜３１：１５＞と命令フェッチアドレスＦＩＡＲ＜３１：１５＞とが一致する場合には、ウェイ１の分岐命令検出部５４は、信号Ｗ１＿ＨＩＴを“１”としてウェイ選択信号生成部５３に出力する。一方、登録された分岐命令の命令アドレスＷ１＿Ｎ＿ＰＩＡＲ＜３１：１５＞と命令フェッチアドレスＦＩＡＲ＜３１：１５＞とが一致しなかった場合には、ウェイ１の分岐命令検出部５４は、信号Ｗ１＿ＨＩＴを“０”としてウェイ選択信号生成部５３に出力する。また、フラグＷ１＿Ｎ＿ＨＡＳＨＥＤが“１”である場合、及びフラグＷ１＿Ｎ＿Ｖが“０”である場合には、ウェイ１の分岐命令検出部５４は、信号Ｗ１＿ＨＩＴを“０”としてウェイ選択信号生成部５３に出力する。
【００６２】
図８は、分岐先アドレス生成部５５の構成例を示す図である。分岐先アドレス生成部５５は、ウェイ毎に構成し、そのウェイＷｉにおける非ハッシュインデックスによって読み出した分岐先アドレスＷｉ＿Ｎ＿ＰＴＩＡＲ<３１：０>又はハッシュインデックスによって読み出した分岐先アドレスＷｉ＿Ｈ＿ＰＴＩＡＲ<３１：０>を選択する。
【００６３】
図８には、ウェイ１の分岐先アドレス生成部５５を一例として示している。ウェイ１の分岐先アドレス生成部５５は、分岐履歴から非ハッシュインデックスにより検索された分岐履歴のエントリの分岐命令の命令アドレスＷ１＿Ｎ＿ＰＩＡＲ＜３１：２＞と、分岐命令が過去に分岐先アドレスの予測ミスを起こしたことがあるか否かを示すフラグＷ１＿Ｎ＿ＴＧＴＵＭと、分岐命令がレジスタ間接分岐であるか否かを示すフラグＷ１＿Ｎ＿ＩＮＤＩＲとを受け取る。また、ウェイ１の分岐先アドレス生成部５５は、ハッシュインデックスにより検索された分岐履歴のエントリの分岐命令の命令アドレスＷ１＿Ｈ＿ＰＩＡＲ＜３１：２＞と、読み出した分岐情報が有効であるか否かを示すフラグＷ１＿Ｈ＿Ｖと分岐情報を登録したときに使用したインデックスがハッシュインデックスであるか否かを示すフラグＷ１＿Ｈ＿ＨＡＳＨＥＤとを受け取る。また、ウェイ１の分岐先アドレス生成部５５は、選択する対象となる分岐先アドレスＷ１＿Ｎ＿ＰＴＩＡＲ＜３１：０＞、Ｗ１＿Ｈ＿ＰＴＩＡＲ＜３１：０＞を受け取る。
【００６４】
ウェイ１の分岐先アドレス生成部５５は、比較器８１、ＡＮＤ回路８２、８３、８４、及び選択回路８５を有する。比較器８１は、分岐命令の命令アドレスＷ１＿Ｎ＿ＰＩＡＲ＜３１：２＞とＷ１＿Ｈ＿ＰＩＡＲ＜３１：２＞とを比較し、比較結果を出力する。ＡＮＤ回路８２は、フラグＷ１＿Ｎ＿ＴＧＴＵＭとフラグＷ１＿Ｎ＿ＩＮＤＩＲとが入力され、その演算結果を出力する。ＡＮＤ回路８３は、フラグＷ１＿Ｈ＿ＶとフラグＷ１＿Ｈ＿ＨＡＳＨＥＤとが入力され、その演算結果を出力する。ＡＮＤ回路８４は、比較器８１、ＡＮＤ回路８２、８３の出力が入力され、その演算結果を信号Ｈ＿ＳＥＬとして出力する。選択回路８５は、ＡＮＤ回路８４から出力される信号Ｈ＿ＳＥＬに応じて、分岐先アドレスＷ１＿Ｎ＿ＰＴＩＡＲ＜３１：０＞、Ｗ１＿Ｈ＿ＰＴＩＡＲ＜３１：０＞の一方を選択しウェイ１の分岐先アドレスＷ１＿ＰＴＩＡＲ＜３１：０＞として出力する。
【００６５】
分岐先アドレス生成部５５は、分岐命令の命令アドレスＷ１＿Ｎ＿ＰＩＡＲ＜３１：２＞とＷ１＿Ｈ＿ＰＩＡＲ＜３１：２＞との一致検証を比較器８１で行う。これにより、ハッシュインデックスによって読み出したエントリに対応する分岐命令が、非ハッシュインデックスによって読み出したエントリに対応する分岐命令と同一であるか否かを確認する。
【００６６】
命令アドレスが同一でない場合には、ハッシュインデックスによって読み出したエントリが命令フェッチする命令アドレスに対応するものではないので、信号Ｈ＿ＳＥＬが“０”となる。したがって、分岐先アドレス生成部５５は、ウェイ１の予測分岐先アドレスとして非ハッシュインデックスの分岐先アドレスＷ１＿Ｎ＿ＰＴＩＡＲ＜３１：０＞を選択して出力する。
【００６７】
また、命令アドレスが同一であっても、フラグＷ１＿Ｎ＿ＴＧＴＵＭが“０”であれば、分岐命令の分岐先アドレスの変動頻度が少ないことを示すので、ハッシュインデックスのエントリは有効ではないと判定する。また、命令アドレスが同一であっても、フラグＷ１＿Ｎ＿ＩＮＤＩＲが“０”であれば、分岐命令の分岐先アドレスは変動しないことを示すので、ハッシュインデックスのエントリは有効でないと判定する。また、命令アドレスが同一であってもフラグＷ１＿Ｈ＿Ｖが“０”であればハッシュインデックスのエントリは有効でないと判定する。また、命令アドレスが同一であってもフラグＷ１＿Ｈ＿ＨＡＳＨＥＤが“０”であれば、このエントリが非ハッシュインデックスを用いて登録されたエントリであるがインデックスが偶然に一致しただけであることを示すので、ハッシュインデックスのエントリは有効ではないと判定する。
【００６８】
ハッシュインデックスのエントリが有効でないと判定した場合、信号Ｈ＿ＳＥＬが“０”となり、分岐先アドレス生成部５５は、ウェイ１の予測分岐先アドレスとして非ハッシュインデックスの分岐先アドレスＷ１＿Ｎ＿ＰＴＩＡＲ＜３１：０＞を選択して出力する。一方、命令アドレスが同一であって、かつハッシュインデックスのエントリが有効であると判定した場合、信号Ｈ＿ＳＥＬが“１”となり、分岐先アドレス生成部５５は、ウェイ１の予測分岐先アドレスとしてハッシュインデックスの分岐先アドレスＷ１＿Ｈ＿ＰＴＩＡＲ＜３１：０＞を選択して出力する。
【００６９】
ここで、図８に示したように、分岐先アドレス生成部５５は多ビットの一致論理と選択論理とで構成される。それに対して、図６に示したように、ウェイ選択信号生成部５３は、多ビットの一致論理の結果から得られる信号Ｗｉ＿ＨＩＴを基にして構成されているため、分岐先アドレス生成部５５と比較して論理量が多い。そのため、分岐先アドレス生成部５５については、演算処理装置の高周波数化に対して影響を与えることはない。
【００７０】
図９は、分岐情報選択部５６の構成例を示す図である。分岐情報選択部５６は、ウェイ選択信号生成部５３からの信号Ｗｉ＿ＳＥＬ及び分岐先アドレス生成部５５からの分岐先アドレスＷｉ＿ＰＴＩＡＲ＜３１：０＞に基づいて予測分岐先アドレスＰＴＩＡＲ＜３１：０＞を決定する。分岐情報選択部５６は、ＡＮＤ回路９１−１〜９１−４、及び論理和演算回路（ＯＲ回路９２）を有する。ＡＮＤ回路９１−ｉには、ウェイｉの信号Ｗｉ＿ＳＥＬ及び分岐先アドレスＷｉ＿ＰＴＩＡＲ＜３１：０＞が入力される。ＯＲ回路９２は、ＡＮＤ回路９１−１〜９１−４の出力が入力され、予測分岐先アドレスＰＴＩＡＲ＜３１：０＞を出力する。すなわち、分岐情報選択部５６は、信号Ｗｉ＿ＳＥＬが“１”であるウェイｉの分岐先アドレスＷｉ＿ＰＴＩＡＲ＜３１：０＞を、予測分岐先アドレスＰＴＩＡＲ＜３１：０＞として出力する。
【００７１】
図１０Ａ及び図１０Ｂは、本実施形態における分岐予測部２２の動作例を示すフローチャートである。なお、以下の説明では、ウェイ１に係る動作を主に説明する。分岐予測部２２は、命令フェッチ制御部２１から出力された命令フェッチアドレスＦＩＡＲを受け取ると分岐予測動作を開始する。まず、分岐予測論理部５２の分岐命令検出部５４が、非ハッシュインデックスを用いて分岐履歴から読み出した分岐情報における分岐命令の命令アドレスＷ１＿Ｎ＿ＰＩＡＲ＜３１：１５＞と命令フェッチアドレスＦＩＡＲとが一致するか否かを判定する（Ｓ１０１）。
【００７２】
ステップＳ１０１での判定の結果、アドレスが一致する場合には、次に、分岐予測論理部５２の分岐命令検出部５４が、非ハッシュインデックスを用いて分岐履歴から読み出した分岐情報におけるフラグＷ１＿Ｎ＿Ｖが“１”であり、かつフラグＷ１＿Ｎ＿ＨＡＳＨＥＤが“０”であるかを判定する（Ｓ１０２）。その結果、フラグＷ１＿Ｎ＿Ｖが“１”であり、かつフラグＷ１＿Ｎ＿ＨＡＳＨＥＤが“０”である場合には、分岐予測論理部５２の分岐命令検出部５４は、分岐命令が分岐すると予測する（Ｓ１０３）。
【００７３】
続いて、分岐予測論理部５２のウェイ選択信号生成部５３は、他のウェイがヒットしている、すなわち分岐命令が分岐すると予測されたか否かを判定する（Ｓ１０４）。その結果、他のウェイがヒットしている場合には、分岐予測論理部５２のウェイ選択信号生成部５３は、ウェイ１の命令アドレスの下位部分Ｗ１＿Ｎ＿ＰＩＡＲ＜４：２＞の値がヒットした他のウェイと比較して最も小さいか否かを判定する（Ｓ１０５）。そして、他のウェイがヒットしていない、又はウェイ１の命令アドレスの下位部分Ｗ１＿Ｎ＿ＰＩＡＲ＜４：２＞の値がヒットした他のウェイと比較して最も小さい場合には、分岐予測論理部５２のウェイ選択信号生成部５３は、ウェイ１を選択する（Ｓ１０６）。
【００７４】
次に、分岐予測論理部５２の分岐先アドレス生成部５５は、非ハッシュインデックスによって読み出した分岐情報における分岐命令の命令アドレスＷ１＿Ｎ＿ＰＩＡＲ＜３１：２＞と、ハッシュインデックスによって読み出した分岐情報における分岐命令の命令アドレスＷ１＿Ｈ＿ＰＩＡＲ＜３１：２＞とが一致するか否かを判定する（Ｓ１０７）。ステップＳ１０７での判定の結果、分岐命令の命令アドレスが一致する場合には、分岐予測論理部５２の分岐先アドレス生成部５５は、ウェイ１のハッシュインデックスによって読み出した分岐情報が有効であるか否かを判定する（Ｓ１０８）。
【００７５】
ステップＳ１０８にてウェイ１のハッシュインデックスの分岐情報が有効であると判定すると、分岐予測論理部５２の分岐先アドレス生成部５５は、ウェイ１の予測分岐先アドレスとしてハッシュインデックスによって読み出した分岐情報における分岐先アドレスＷ１＿Ｈ＿ＰＴＩＡＲ＜３１：０＞を選択する（Ｓ１０９）。そして、分岐予測論理部５２の分岐情報選択部５６は、ウェイ１の予測分岐先アドレスとして選択された分岐先アドレスＷ１＿Ｈ＿ＰＴＩＡＲ＜３１：０＞を出力し、次の命令フェッチアドレスとして設定する（Ｓ１１０）。
【００７６】
また、ステップＳ１０７での判定の結果、分岐命令の命令アドレスが一致しない場合、又はステップＳ１０８での判定の結果、ウェイ１のハッシュインデックスの分岐情報が有効でない場合には、分岐予測論理部５２の分岐先アドレス生成部５５は、ウェイ１の予測分岐先アドレスとして非ハッシュインデックスによって読み出した分岐情報における分岐先アドレスＷ１＿Ｎ＿ＰＴＩＡＲ＜３１：０＞を選択する（Ｓ１１１）。そして、分岐予測論理部５２の分岐情報選択部５６は、ウェイ１の予測分岐先アドレスとして選択された分岐先アドレスＷ１＿Ｎ＿ＰＴＩＡＲ＜３１：０＞を出力し、次の命令フェッチアドレスとして設定する（Ｓ１１２）。
【００７７】
また、ステップＳ１０１での判定の結果、アドレスが一致しない場合、又はステップＳ１０２での判定の結果、フラグＷ１＿Ｎ＿Ｖが“１”であり、かつフラグＷ１＿Ｎ＿ＨＡＳＨＥＤが“０”である条件を満たさない場合には、分岐予測論理部５２の分岐命令検出部５４は、他のウェイがヒットしたか否かを判定する（Ｓ１１３）。その結果、他のウェイがヒットしている場合には、分岐予測論理部５２の分岐命令検出部５４は、分岐命令が分岐すると予測する（Ｓ１１４）。そして、分岐予測論理部５２のウェイ選択信号生成部５３は、ヒットした他のウェイの内から命令アドレスの下位部分Ｗｉ＿Ｎ＿ＰＩＡＲ＜４：２＞の値が最も小さいウェイを選択する（Ｓ１１５）。続いて、分岐予測論理部５２の分岐先アドレス生成部５５及び分岐情報選択部５６は、選択された他のウェイから読み出した分岐情報における分岐先アドレスＰＴＩＡＲ＜３１：０＞を出力し、次の命令フェッチアドレスとして設定する（Ｓ１１６）。
【００７８】
また、ステップＳ１１３での判定の結果、他のウェイがヒットしていない場合には、分岐予測論理部５２の分岐命令検出部５４は、分岐命令が分岐しないと予測する（Ｓ１１７）。そして、シーケンシャルに増加させて得られる、命令フェッチアドレスと連続したアドレス値を、次の命令フェッチアドレスとして設定する（Ｓ１１８）。
【００７９】
次に、本実施形態における分岐履歴更新部３４について説明する。分岐履歴更新部３４は、分岐演算の結果を基に動作し、分岐履歴に登録する分岐情報の生成、登録先のインデックスの決定、登録先のウェイの決定等を行う。図１１は、分岐履歴更新部３４の構成例を示す図である。分岐履歴更新部３４は、ＡＮＤ回路１１１、１１２、１１３、選択回路１１４、１１５、及びＸＯＲ回路１１６を有する。分岐履歴更新部３４に入力される各信号等は、分岐制御部３０から供給される。
【００８０】
ＡＮＤ回路１１１は、分岐演算が完了したことを示す信号ＢＲＣＯＭＰが入力されるとともに、分岐予測時に分岐命令に対応する有効なエントリが分岐履歴に存在したことを示す信号ＰＨＩＴが反転入力される。ＡＮＤ回路１１１は、演算結果を、分岐履歴への新規エントリの作成を指示する信号ＢＲＨＩＳ＿ＣＲＥＡＴＥとして出力する。
【００８１】
ＡＮＤ回路１１２は、信号ＢＲＣＯＭＰ、信号ＰＨＩＴ、分岐先アドレスの予測ミスが検出されたことを示す信号ＢＲＴＧＴＵＭ、及び分岐命令がレジスタ間接分岐であることを示す信号ＢＲＩＮＤＩＲが入力される。ＡＮＤ回路１１２は、演算結果を、信号ＢＲＨＩＳ＿ＵＰＤ＿ＴＧＴＵＭとして出力する。信号ＢＲＨＩＳ＿ＵＰＤ＿ＴＧＴＵＭは、分岐命令に対応する分岐履歴のエントリの分岐情報におけるフラグＴＧＴＵＭを“１”に更新する信号である。
【００８２】
ＡＮＤ回路１１３は、信号ＢＲＣＯＭＰ、信号ＰＨＩＴ、信号ＢＲＴＧＴＵＭ、信号ＢＲＩＮＤＩＲ、及び分岐予測時に分岐命令に対応する分岐履歴のエントリから読み出した分岐情報におけるフラグＴＧＴＵＭが“１”であったことを示す信号ＰＴＧＴＵＭが入力される。ＡＮＤ回路１１３は、演算結果を、信号ＢＲＨＩＳ＿ＵＰＤ＿ＨＡＳＨＥＤとして出力する。信号ＢＲＨＩＳ＿ＵＰＤ＿ＨＡＳＨＥＤは、分岐履歴のエントリの分岐情報におけるフラグＨＡＳＨＥＤを“１”にする信号である。
【００８３】
選択回路１１４は、信号ＰＨＩＴに応じて、分岐予測時に分岐命令に対応する分岐履歴エントリのウェイ番号を示すＰＷＡＹ＜１：０＞又は分岐予測時に分岐命令に対応する分岐履歴のエントリがヒットしなかったときの更新ウェイを示すＮＯ＿ＨＩＴ＿ＷＡＹ＜１：０＞を選択する。選択回路１１４は、選択したウェイを分岐履歴の更新ウェイを示すＢＲＨＩＳ＿ＵＰＤ＿ＷＡＹ＜１：０＞として出力する。
【００８４】
選択回路１１５は、ＡＮＤ回路１１３の出力に応じて、分岐命令の命令アドレスＢＲＩＡＲ＜１４：５＞、又は分岐命令の命令アドレスＢＲＩＡＲ＜１４：５＞とレジスタＢＴＨＲ＜９：０＞とをＸＯＲ回路１１６でＸＯＲ演算して得られる値を選択する。選択回路１１５は、選択した値を分岐履歴の更新を行うインデックスを示すＢＲＨＩＳ＿ＵＰＤ＿ＩＤＸ＜９：０＞として出力する。レジスタＢＴＨＲは、分岐演算が完了した分岐命令の分岐先アドレスの一部を時系列に連結した値である部分分岐アドレス連結値を格納しており、本実施形態では部分分岐アドレス連結値として、レジスタ間接分岐の分岐命令の分岐先アドレスの内の任意の２ビットを抽出して時系列に連結した値を格納しているものとする。なお、分岐予測が成功している限り、同じ命令アドレスであり、かつその分岐命令を実行する前に実行された過去の分岐命令が同じである分岐命令に対して分岐予測時に参照するレジスタＰＴＨＲの値とパイプラインを経過して分岐演算が完了した時に参照するレジスタＢＴＨＲの値とは同一である。
【００８５】
図１２は、分岐履歴更新部３４の動作例を示すフローチャートである。分岐制御部３０等による分岐演算が完了すると、分岐履歴更新部３４は、分岐予測時に分岐命令に対応する有効なエントリが存在したか否か、すなわち信号ＰＨＩＴが“１”であるか否かを判定する（Ｓ２０１）。分岐予測時に対応する有効なエントリが存在した（信号ＰＨＩＴが“１”）場合には、分岐履歴更新部３４は、分岐命令がレジスタ間接分岐であるか否か、及び分岐先アドレスの予測ミスが検出されたか否かを判定する（Ｓ２０２）。その結果、分岐命令がレジスタ間接分岐でない、又は分岐先アドレスの予測ミスが検出されていない場合には、分岐履歴更新部３４は、分岐履歴を更新せずに終了する（Ｓ２０３）。
【００８６】
ステップＳ２０２での判定の結果、分岐命令がレジスタ間接分岐であり、かつ分岐先アドレスの予測ミスが検出された場合には、分岐履歴更新部３４は、その分岐命令において過去にも分岐先アドレスの予測ミスが検出されているか否かを判定する（Ｓ２０４）。その結果、過去に分岐先アドレスの予測ミスが検出されている場合には、分岐履歴更新部３４は、分岐命令の命令アドレスの一部とレジスタＢＴＨＲの値をＸＯＲ演算して得られる値をインデックスとして、対応するウェイの分岐情報を更新する。すなわち、分岐履歴更新部３４は、ＰＷＡＹ＜１：０＞により指定されるウェイに、フラグＶ、ＴＧＴＵＭ、ＨＡＳＨＥＤをともに“１”に更新し、分岐先アドレスＰＴＩＡＲ＜３１：０＞を演算により得られた分岐先アドレスに更新する（Ｓ２０５）。
【００８７】
ステップＳ２０４での判定の結果、過去に分岐先アドレスの予測ミスが検出されていない場合には、分岐履歴更新部３４は、分岐命令の命令アドレスの一部をインデックスとして、対応するウェイの分岐情報を更新する。すなわち、分岐履歴更新部３４は、分岐履歴に登録されている分岐情報のフラグＴＧＴＵＭを“１”に更新し、分岐先アドレスＰＴＩＡＲ＜３１：０＞を演算により得られた分岐先アドレスに更新する（Ｓ２０６）。
【００８８】
また、ステップＳ２０１での判定の結果、分岐予測時に対応する有効なエントリが存在しない（信号ＰＨＩＴが“０”）場合には、分岐履歴更新部３４は、分岐命令がレジスタ間接分岐であるか否かを判定する（Ｓ２０７）。その結果、分岐命令がレジスタ間接分岐である場合には、分岐履歴更新部３４は、分岐命令の命令アドレスの一部をインデックスとして、分岐予測時に空きであった分岐履歴のウェイに分岐情報を登録する。すなわち、分岐履歴更新部３４は、ＮＯ＿ＨＩＴ＿ＷＡＹ＜１：０＞により指定されるウェイに、フラグＶ、ＩＮＤＩＲをともに“１”に設定し、分岐命令の命令アドレスＰＩＡＲ＜３１：２＞及び分岐先アドレスＰＴＩＡＲ＜３１：０＞を登録する（Ｓ２０８）。また、分岐命令がレジスタ間接分岐でない場合には、分岐履歴更新部３４は、分岐命令の命令アドレスの一部をインデックスとして、分岐予測時に空きであった分岐履歴のウェイに分岐情報を登録する。すなわち、分岐履歴更新部３４は、ＮＯ＿ＨＩＴ＿ＷＡＹ＜１：０＞により指定されるウェイに、フラグＶを“１”に設定し、分岐命令の命令アドレスＰＩＡＲ＜３１：２＞及び分岐先アドレスＰＴＩＡＲ＜３１：０＞を登録する（Ｓ２０９）。
【００８９】
本実施形態によれば、分岐先アドレスの予測ミスの発生回数を計数する回路や予測ミスが多数発生する分岐命令の命令アドレスを格納するテーブル等を設けなくとも、分岐先アドレスが変化し得る分岐命令の分岐予測を行うことができ、回路規模の増大を抑制することができる。また、分岐予測の際に分岐履歴の検索までに要する論理量もわずかに増加するだけであり、演算処理装置の高周波数化が可能になる。また、分岐履歴から読み出した分岐情報の選択についても、ハッシュインデックスによって登録した分岐履歴のエントリのウェイを対応する分岐命令の非ハッシュインデックスによって登録する分岐履歴のエントリのウェイと同じにすることにより、ウェイ選択信号生成に係る論理を増加させずに実現することができ、演算処理装置の高周波数化が可能になる。
【００９０】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００９１】
４１  分岐履歴
４２  排他的論理和演算回路（ＸＯＲ回路）
４３  分岐先アドレス予測論理
４４  分岐先アドレス選択信号生成論理
４５  分岐先アドレス選択論理
４６  ウェイ選択信号生成論理
４７  分岐情報選択論理
５１  分岐履歴
５２  分岐予測論理部
５３  ウェイ選択信号生成部
５４  分岐命令検出部
５５  分岐先アドレス生成部
５６  分岐情報選択部
５８  選択回路
５９  排他的論理和演算回路（ＸＯＲ回路）
【図１】
2015036934.tif 000003
【図２】
2015036934.tif 000004
【図３】
2015036934.tif 000005
【図４】
2015036934.tif 000006
【図５】
2015036934.tif 000007
【図６】
2015036934.tif 000008
【図７】
2015036934.tif 000009
【図８】
2015036934.tif 000010
【図９】
2015036934.tif 000011
【図１０Ａ】
2015036934.tif 000012
【図１０Ｂ】
2015036934.tif 000013
【図１１】
2015036934.tif 000014
【図１２】
2015036934.tif 000015
【図１３】
2015036934.tif 000016
【図１４】
2015036934.tif 000017