(57)【特許請求の範囲】
【請求項１】
分岐命令の結果を記憶する履歴記憶部を有し、前記履歴記憶部を参照して分岐予測を実施する予測部と、
前記分岐命令に対応して前記分岐命令の間隔を記憶する間隔記憶部と、
前記履歴記憶部を参照するタイミングを、前記間隔記憶部に記憶された前記分岐命令の間隔に基づいて決定する制御部と、
前記分岐命令の間隔を計測するカウンタと、
前記間隔記憶部の内容を、前記カウンタにより計測された前記分岐命令の間隔に基づいて更新する更新部とを備え、
前記間隔記憶部は、前記分岐命令による分岐が成立したときの前記分岐命令の間隔と前記分岐命令による分岐が不成立のときの前記分岐命令の間隔との両方を記憶すること
を特徴とする分岐予測装置。
【請求項２】
前記更新部は、前記分岐命令が実行される度に、前記間隔記憶部の内容を更新すること
を特徴とする請求項１記載の分岐予測装置。
【請求項３】
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔と異なるとき、前記間隔記憶部の内容を更新すること
を特徴とする請求項１記載の分岐予測装置。
【請求項４】
分岐命令の結果を記憶する履歴記憶部を有し、前記履歴記憶部を参照して分岐予測を実施する予測部と、
前記分岐命令に対応して前記分岐命令の間隔を記憶する間隔記憶部と、
前記履歴記憶部を参照するタイミングを、前記間隔記憶部に記憶された前記分岐命令の間隔に基づいて決定する制御部と、
前記分岐命令の間隔を計測するカウンタと、
前記間隔記憶部の内容を、前記カウンタにより計測された前記分岐命令の間隔に基づいて更新する更新部とを備え、
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔より大きいとき、前記記憶されている前記分岐命令の間隔に基づいて参照されるアドレスに、前記計測に基づく前記分岐命令の間隔と前記記憶されている前記分岐命令の間隔との差分に基づいて算出される間隔を書き込むこと
を特徴とする分岐予測装置。
【請求項５】
命令を解読する解読部と、分岐命令の分岐予測を実施する分岐予測装置とを備え、
前記分岐予測装置は、
分岐命令の結果を記憶する履歴記憶部を有し、前記履歴記憶部を参照して分岐予測を実施する予測部と、
前記分岐命令に対応して前記分岐命令の間隔を記憶する間隔記憶部と、
前記履歴記憶部を参照するタイミングを、前記間隔記憶部に記憶された前記分岐命令の間隔に基づいて決定する制御部と、
前記分岐命令の間隔を計測するカウンタと、
前記間隔記憶部の内容を、前記カウンタにより計測された前記分岐命令の間隔に基づいて更新する更新部とを備え、
前記間隔記憶部は、前記分岐命令による分岐が成立したときの前記分岐命令の間隔と前記分岐命令による分岐が不成立のときの前記分岐命令の間隔との両方を記憶すること
を特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分岐予測装置およびプロセッサに関する。
【背景技術】
【０００２】
プロセッサの命令の一種である条件分岐命令では、条件分岐命令による分岐が成立したとき、命令実行経路が分岐する。したがって、条件分岐命令による分岐が成立したときには、条件分岐命令の次に実行される命令は、条件分岐命令に連続したアドレスの命令ではなく、条件分岐命令から離れたアドレスの命令に変更される。このため、条件分岐命令の次に実行される命令は、条件分岐命令が実行されるまで確定しない。すなわち、命令メモリから命令をフェッチ（取得）するためのアドレスは、条件分岐命令が実行されるまで確定しない。
【０００３】
このため、プロセッサは、条件分岐命令が実行されるまでの間、命令メモリにアクセスできない。例えば、パイプライン処理を実施するプロセッサでは、命令メモリにアクセスできない期間（サイクル数）の発生は、性能劣化の要因になる。このため、パイプライン処理を実施するプロセッサは、例えば、分岐命令の結果を予測する分岐予測装置を有している。例えば、分岐予測装置には、動的分岐予測が広く採用されている。
【０００４】
動的分岐予測では、過去の条件分岐命令の実行結果をメモリに格納し、メモリに格納した実行結果を分岐予測に用いる（例えば、特許文献１、特許文献２参照）。分岐予測装置は、例えば、分岐命令による分岐が成立したか否かを示す分岐方向を記憶する方向履歴メモリと、分岐命令による分岐が成立したときの分岐先アドレスを記憶する分岐先履歴メモリとを有している。高速処理が必要なプロセッサに搭載された分岐予測装置は、例えば、命令のデコード処理が実施される前に、分岐予測を実施する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−８５５１６号公報
【特許文献２】特許第３７９００３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
命令のデコード処理が実施される前に分岐予測を実施する分岐予測装置は、命令フェッチ処理（命令メモリから命令を取得する処理）が実施される度に、方向履歴メモリ等の分岐予測用のメモリにアクセスする。これは、命令のデコード処理が実施されるまで、命令が分岐命令か否かわからないためである。このため、分岐予測装置は、分岐命令以外の命令が実行されるときにも、分岐予測用のメモリにアクセスする。このとき、分岐予測用のメモリへの不要なアクセスにより、不要な電力が消費される。
【課題を解決するための手段】
【０００７】
本発明の一形態では、分岐予測装置は、分岐命令の結果を記憶する履歴記憶部を有し、履歴記憶部を参照して分岐予測を実施する予測部と、分岐命令に対応して分岐命令の間隔を記憶する間隔記憶部と、履歴記憶部を参照するタイミングを、間隔記憶部に記憶された分岐命令の間隔に基づいて決定する制御部と、分岐命令の間隔を計測するカウンタと、間隔記憶部の内容を、カウンタにより計測された分岐命令の間隔に基づいて更新する更新部とを有している。
【発明の効果】
【０００８】
分岐予測用のメモリへの不要なアクセスを低減でき、消費電力を低減できる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態におけるプロセッサの例を示している。
【図２】図１に示した分岐予測装置の一例を示している。
【図３】図１に示した間隔記憶部の最初の更新動作の一例を示している。
【図４】図１に示した分岐予測装置の動作の一例を示している。
【図５】３ビットのデータ幅を有する間隔記憶部の状態の一例を示している。
【図６】図２に示した更新部およびカウンタの動作の一例を示している。
【図７】別の実施形態における間隔記憶部の一例を示している。
【図８】別の実施形態における分岐予測装置の一例を示している。
【図９】図８に示した更新部およびカウンタの動作の一例を示している。
【図１０】図８に示した更新部およびカウンタの動作の別の例を示している。
【図１１】演算処理のステージで更新動作を実施する分岐予測装置の一例を示している。
【図１２】別の実施形態における分岐予測装置の一例を示している。
【図１３】図１２に示した間隔記憶部および予測制御部の一例を示している。
【図１４】図１３に示した予測制御部の動作の一例を示している。
【図１５】図１２に示した更新部およびカウンタの動作の一例を示している。
【発明を実施するための形態】
【００１０】
以下、実施形態を図面を用いて説明する。
【００１１】
図１は、一実施形態におけるプロセッサの例を示している。例えば、プロセッサは、パイプライン処理を実施する。プロセッサは、例えば、分岐予測装置ＢＰＲＥ１（図の波線で囲んだ部分）、プログラムカウンタＰＣ、命令メモリＩＭＥＭ、デコーダＤＥＣ、レジスタリード部ＲＰＤ、算術論理演算ユニットＡＬＵおよびパイプラインレジスタＰＲＧ１、ＰＲＧ２、ＰＲＧ３を有している。以下、算術論理演算ユニットＡＬＵをＡＬＵとも称する。
【００１２】
プログラムカウンタＰＣは、例えば、プロセッサが実行する命令のアドレスを示す値（以下、ＰＣ値とも称する）を、命令メモリＩＭＥＭおよび分岐予測装置ＢＰＲＥ１に出力する。例えば、プログラムカウンタＰＣの値（ＰＣ値）は、プロセッサが命令を実行する度に、増加する。あるいは、ＰＣ値は、分岐予測が実行されたとき、分岐予測装置ＢＰＲＥ１により予測された分岐先アドレスに設定される。なお、ＰＣ値は、パイプラインレジスタＰＲＧ１、ＰＲＧ２、ＰＲＧ３に順次転送される。
【００１３】
命令メモリＩＭＥＭは、ＰＣ値が示すアドレスの命令を、パイプラインレジスタＰＲＧ１に出力する。これにより、命令メモリＩＭＥＭから命令がフェッチ（取得）される。デコーダＤＥＣは、パイプラインレジスタＰＲＧ１に保持されている命令（命令メモリＩＭＥＭからフェッチした命令）を取得し、命令メモリＩＭＥＭからフェッチした命令を解読する。そして、デコーダＤＥＣは、解読結果を、パイプラインレジスタＰＲＧ２および分岐予測装置ＢＰＲＥ１に出力する。これにより、例えば、分岐予測装置ＢＰＲＥ１は、命令メモリＩＭＥＭからフェッチされた命令が分岐命令か否か判断できる。
【００１４】
レジスタリード部ＲＤＰは、例えば、デコーダＤＥＣの解読結果をパイプラインレジスタＰＲＧ２から取得し、デコーダＤＥＣの解読結果に基づいて、命令のオペランド等をレジスタから読み出す。そして、レジスタリード部ＲＤＰは、レジスタから読み出したオペランド等をパイプラインレジスタＰＲＧ３に出力する。ＡＬＵは、例えば、パイプラインレジスタＰＲＧ３から命令のオペランド等を取得し、四則演算や論理演算等を実行する。このように、プロセッサは、パイプライン処理を実施する。
【００１５】
分岐予測装置ＢＰＲＥ１は、間隔記憶部ＤＭＥＭ１、予測部ＰＲＥＤ、予測制御部ＰＣＮＴ１、カウンタＣＯＴおよび更新部ＵＰＰ１を有し、分岐命令の結果を予測する。例えば、間隔記憶部ＤＭＥＭ１、予測部ＰＲＥＤおよび予測制御部ＰＣＮＴ１は、パイプライン処理の命令フェッチ処理（命令メモリＩＭＥＭから命令を取得する処理）が実施されるステージと同じステージで動作する。また、例えば、カウンタＣＯＴおよび更新部ＵＰＰ１は、パイプライン処理のデコード処理（命令を解読する処理）が実施されるステージと同じステージで動作する。
【００１６】
間隔記憶部ＤＭＥＭ１は、分岐命令に対応して分岐命令の間隔（以下、分岐命令間隔とも称する）を記憶する。例えば、間隔記憶部ＤＭＥＭ１は、分岐命令のＰＣ値の一部（例えば、ＰＣ値の下位ビット）をアドレスとして、分岐命令間隔を記憶する。あるいは、間隔記憶部ＤＭＥＭ１は、分岐命令のＰＣ値から生成されるハッシュ値をアドレスとして、分岐命令間隔を記憶する。
【００１７】
予測制御部ＰＣＮＴ１は、予測部ＰＲＥＤの履歴記憶部ＨＭＥＭを参照するタイミングを、間隔記憶部ＤＭＥＭ１に記憶された分岐命令間隔に基づいて決定する。例えば、予測制御部ＰＣＮＴ１は、命令フェッチ処理（命令メモリＩＭＥＭから命令を取得する処理）が実施される度にカウントアップするカウンタ（図１のカウンタＣＯＴとは別のカウンタ）を有している。すなわち、予測制御部ＰＣＮＴ１内のカウンタは、ＰＣ値が変化する度にカウントアップする。そして、予測制御部ＰＣＮＴ１は、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔と予測制御部ＰＣＮＴ１内のカウンタの値とが一致したとき、制御部ＰＣＮＴ１内のカウンタをリセットする。
【００１８】
また、予測制御部ＰＣＮＴ１は、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔と予測制御部ＰＣＮＴ１内のカウンタの値とが一致したとき、例えば、履歴記憶部ＨＭＥＭへの参照タイミングであることを示す情報を予測部ＰＲＥＤに通知する。さらに、予測制御部ＰＣＮＴ１は、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔と予測制御部ＰＣＮＴ１内のカウンタの値とが一致したとき、例えば、次の分岐命令までの間隔を示す分岐命令間隔を間隔記憶部ＤＭＥＭ１から読み出す。
【００１９】
すなわち、間隔記憶部ＤＭＥＭ１は、例えば、履歴記憶部ＨＭＥＭが予測部ＰＲＥＤにより参照されるとき、予測制御部ＰＣＮＴ１により参照される。このように、予測制御部ＰＣＮＴ１は、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔に基づいて、間隔記憶部ＤＭＥＭ１および履歴記憶部ＨＭＥＭを参照するタイミングを決定する。すなわち、予測制御部ＰＣＮＴ１は、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔に基づいて、命令が分岐命令か否かを予測する。
【００２０】
予測部ＰＲＥＤは、分岐命令の結果を記憶する履歴記憶部ＨＭＥＭを有している。履歴記憶部ＨＭＥＭは、例えば、分岐命令による分岐が成立したか否かを示す分岐方向を記憶する方向履歴メモリと、分岐命令による分岐が成立したときの分岐先アドレスを記憶する分岐先履歴メモリとを有している。なお、履歴記憶部ＨＭＥＭは、分岐先履歴メモリを含まずに構成されてもよい。
【００２１】
例えば、予測部ＰＲＥＤは、履歴記憶部ＨＭＥＭに記憶されている分岐方向の情報に基づいて、分岐命令による分岐が成立するか否かを予測する。そして、予測部ＰＲＥＤは、分岐命令による分岐が成立すると予測したとき、履歴記憶部ＨＭＥＭに記憶されている分岐先アドレスを、プログラムカウンタＰＣに通知する。これにより、分岐先アドレスがプログラムカウンタＰＣに設定される。このように、予測部ＰＲＥＤは、履歴記憶部ＨＭＥＭに記憶されている情報を参照して、分岐予測を実施する。
【００２２】
なお、上述したように、履歴記憶部ＨＭＥＭが参照されるタイミングは、予測制御部ＰＣＮＴ１により制御される。例えば、予測部ＰＲＥＤは、履歴記憶部ＨＭＥＭへの参照タイミングであることを示す情報を予測制御部ＰＣＮＴ１から受けたとき、履歴記憶部ＨＭＥＭを参照する。すなわち、予測部ＰＲＥＤは、間隔記憶部ＤＭＥＭ１に記憶された分岐命令間隔で、履歴記憶部ＨＭＥＭを参照する。これにより、予測部ＰＲＥＤは、命令が解読される前に分岐予測を実施するときにも、履歴記憶部ＨＭＥＭ等への不要なアクセスを低減できる。したがって、この実施形態では、履歴記憶部ＨＭＥＭや間隔記憶部ＤＭＥＭ１への不要なアクセスを低減でき、消費電力を低減できる。
【００２３】
カウンタＣＯＴは、プログラムが実行されたときの分岐命令の間隔を計測する。例えば、カウンタＣＯＴは、デコーダＤＥＣにより解読された命令が分岐命令のときに、更新部ＵＰＰ１によりリセットされる。すなわち、カウンタＣＯＴは、分岐命令が実行される度にリセットされる。そして、カウンタＣＯＴは、例えば、パイプラインレジスタＰＲＧ１に保持されているＰＣ値が変化する度に、カウントアップする。すなわち、カウンタＣＯＴは、命令が命令メモリＩＭＥＭからフェッチされる度に、カウントアップする。更新部ＵＰＰ１は、間隔記憶部ＤＭＥＭ１の内容を、カウンタＣＯＴにより計測された分岐命令間隔に基づいて更新する。
【００２４】
なお、分岐予測装置ＢＰＲＥ１の構成は、この例に限定されない。例えば、予測制御部ＰＣＮＴ１は、間隔記憶部ＤＭＥＭ１へのアクセスを停止可能に構成され、間隔記憶部ＤＭＥＭ１へのアクセスを分岐命令の連続する期間に停止してもよい。間隔記憶部ＤＭＥＭ１へのアクセスが停止されている期間では、例えば、分岐予測は命令毎に実施される。あるいは、予測制御部ＰＣＮＴ１は、例えば、予測部ＰＲＥＤ内に設けられてもよい。
【００２５】
また、間隔記憶部ＤＭＥＭ１は、予測部ＰＲＥＤ内に設けられてもよい。例えば、間隔記憶部ＤＭＥＭ１は、履歴記憶部ＨＭＥＭの方向履歴メモリや分岐先履歴メモリのビット幅に分岐命令間隔を記憶するためのビットを追加して構成されてもよい。あるいは、間隔記憶部ＤＭＥＭ１は、予測部ＰＲＥＤにより参照されてもよい。例えば、予測部ＰＲＥＤが間隔記憶部ＤＭＥＭ１から分岐命令間隔を読み出す構成では、予測部ＰＲＥＤは、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔を、予測制御部ＰＣＮＴ１に通知する。
【００２６】
また、カウンタＣＯＴは、更新部ＵＰＰ１内に設けられてもよい。さらに、例えば、パイプライン処理の演算処理（ＡＬＵの処理）のステージで分岐命令の判定を実施するプロセッサに搭載される分岐予測装置ＢＰＲＥ１では、カウンタＣＯＴおよび更新部ＵＰＰ１は、演算処理のステージと同じステージで動作するように構成されてもよい。
【００２７】
図２は、図１に示した分岐予測装置ＢＰＲＥ１の一例を示している。なお、図２では、更新部ＵＰＰ１について説明する。図２の符号ＰＣ１、ＢＲＰＣは、パイプラインレジスタＰＲＧ１およびレジスタＲＥＧ１にそれぞれ保持されているＰＣ値を示している。また、命令ＩＮＳＴは、例えば、命令メモリＩＭＥＭからフェッチされた命令を示すコードである。
【００２８】
更新部ＵＰＰ１は、レジスタＲＥＧ１および更新制御部ＵＣＮＴ１を有している。レジスタＲＥＧ１は、例えば、分岐命令のＰＣ値を保持する。例えば、レジスタＲＥＧ１のレジスタ値ＢＲＰＣ（ＰＣ値）は、分岐命令が実行される度に更新される。更新制御部ＵＣＮＴ１は、命令ＩＮＳＴが分岐命令か否かを示す情報をデコーダＤＥＣから受けるとともに、カウンタＣＯＴのカウンタ値ＷＣＴをカウンタＣＯＴから受ける。そして、更新制御部ＵＣＮＴ１は、命令が分岐命令のとき、カウンタＣＯＴをリセットするとともに、間隔記憶部ＤＭＥＭ１の内容を更新する。
【００２９】
例えば、更新制御部ＵＣＮＴ１は、レジスタ値ＢＲＰＣに基づいて、間隔記憶部ＤＭＥＭ１の更新対象のアドレス（ＰＣ値の下位ビットやハッシュ値等）を算出する。そして、更新制御部ＵＣＮＴ１は、更新対象のアドレスのデータを、カウンタ値ＷＣＴ（分岐命令間隔）に更新する。また、更新部ＵＰＰ１は、例えば、間隔記憶部ＤＭＥＭ１の内容を更新する際に、レジスタ値ＢＲＰＣを、パイプラインレジスタＰＲＧ１に保持されているＰＣ値（ＰＣ１）に更新する。これにより、レジスタ値ＢＲＰＣは、分岐命令が実行される度に更新される。
【００３０】
図３は、図１に示した間隔記憶部ＤＭＥＭ１の最初の更新動作の一例を示している。図３では、プログラムカウンタＰＣの値（０ｘ００２４等）を１６進で示している。また、図３の太い線で囲んだ命令ｂｒは、分岐命令を示している。そして、命令ｏｔｈｅｒは、分岐命令以外の命令を示している。図３の○印は、分岐命令による分岐の成立（ｔａｋｅｎ）を示し、×印は、分岐命令による分岐の不成立（ｎｏｔ  ｔａｋｅｎ）を示している。図３の“−”は、レジスタＲＥＧ１に意味のない値（初期値）が書き込まれていることを示している。また、間隔記憶部ＤＭＥＭ１の初期値は、例えば、“０”に設定されている。なお、この初期値は、特に意味はない。
【００３１】
ＰＣ値が“０ｘ００２８”のとき、分岐命令ｂｒが実行される。このとき、カウンタ値ＷＣＴは、“０”にリセットされる。また、レジスタ値ＢＲＰＣは、“０ｘ００２８”に更新される。ＰＣ値“０ｘ００２８”の分岐命令ｂｒによる分岐が成立したため、“０ｘ０１００”のＰＣ値の命令が分岐命令ｂｒの次に実行される。このとき、カウンタ値ＷＣＴは、“０”から“１”にカウントアップする。
【００３２】
ＰＣ値が“０ｘ０１０４”のとき、ＰＣ値“０ｘ００２８”の分岐命令ｂｒの次の分岐命令ｂｒが実行される。このとき、レジスタ値ＢＲＰＣ（“０ｘ００２８”）に基づくアドレスの間隔記憶部ＤＭＥＭ１のデータは、カウンタ値ＷＣＴの“１”に更新される（図３の（ａ））。そして、カウンタ値ＷＣＴが“０”にリセットされ、レジスタ値ＢＲＰＣが“０ｘ００２８”から“０ｘ０１０４”に更新される。
【００３３】
ＰＣ値“０ｘ０１０４”の分岐命令ｂｒによる分岐が不成立のため、ＰＣ値“０ｘ０１０８”の命令が分岐命令ｂｒの次に実行される。このとき、カウンタ値ＷＣＴは、“０”から“１”にカウントアップする。プログラムは、次の分岐命令ｂｒが実行されるまで、連続したアドレスの順番で実行される。この間、カウンタ値ＷＣＴは、命令が実行される度にカウントアップする。なお、レジスタ値ＢＲＰＣは、“０ｘ０１０４”に保持されている。
【００３４】
ＰＣ値が“０ｘ０１１４”のとき、ＰＣ値“０ｘ０１０４”の分岐命令ｂｒの次の分岐命令ｂｒが実行される。このとき、レジスタ値ＢＲＰＣ（“０ｘ０１０４”）に基づくアドレスの間隔記憶部ＤＭＥＭ１のデータは、カウンタ値ＷＣＴの“３”に更新される（図３の（ｂ））。そして、カウンタ値ＷＣＴが“０”にリセットされ、レジスタ値ＢＲＰＣが“０ｘ０１０４”から“０ｘ０１１４”に更新される。この動作により、間隔記憶部ＤＭＥＭ１は、分岐命令に対応して分岐命令間隔を記憶する。
【００３５】
図４は、図１に示した分岐予測装置ＢＰＲＥ１の動作の一例を示している。なお、図４は、例えば、図３に示した更新動作が実施された後の分岐予測装置ＢＰＲＥ１の動作の一例を示している。図４の○印および×印の意味は、図３と同じである。なお、図４の例では、履歴記憶部ＨＭＥＭは、分岐命令による分岐が成立したか否かを示す分岐方向を記憶する方向履歴メモリＤＩＲＭと、分岐命令による分岐が成立したときの分岐先アドレスを記憶する分岐先履歴メモリＤＥＳＭとを有している。図４の“−”は、分岐先履歴メモリＤＥＳＭに分岐先アドレスが記憶されていないことを示している。また、図４の網掛けは、履歴記憶部ＨＭＥＭおよび間隔記憶部ＤＭＥＭ１が参照されない期間（命令サイクル）を示している。
【００３６】
ＰＣ値が“０ｘ００２８”のとき、分岐予測装置ＢＰＲＥ１は、方向履歴メモリＤＩＲＭおよび分岐先履歴メモリＤＥＳＭを参照して、分岐予測を実施する。例えば、分岐予測装置ＢＰＲＥ１は、ＰＣ値“０ｘ００２８”に基づくアドレスの方向履歴メモリＤＩＲＭの情報が分岐成立（ｔａｋｅｎ）を示しているため、ＰＣ値“０ｘ００２８”の分岐命令ｂｒによる分岐が成立すると予測する。そして、分岐予測装置ＢＰＲＥ１は、分岐先履歴メモリＤＥＳＭに記憶されている分岐先アドレス“０ｘ０１００”をプログラムカウンタＰＣに設定する。また、分岐予測装置ＢＰＲＥ１は、ＰＣ値“０ｘ００２８”の分岐命令ｂｒの次の分岐命令ｂｒまでの間隔を示す分岐命令間隔“１”を、ＰＣ値“０ｘ００２８”に基づくアドレスの間隔記憶部ＤＭＥＭ１から読み出す。
【００３７】
分岐予測装置ＢＰＲＥ１は、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔が“１”であるため、ＰＣ値“０ｘ００２８”の次の命令では、分岐予測を実施しない。すなわち、ＰＣ値が“０ｘ０１００”の期間Ｔ１０では、分岐予測装置ＢＰＲＥ１は、分岐予測を実施しない。したがって、ＰＣ値が“０ｘ０１００”の期間Ｔ１０では、間隔記憶部ＤＭＥＭ１、方向履歴メモリＤＩＲＭおよび分岐先履歴メモリＤＥＳＭは、参照されない。
【００３８】
ＰＣ値が“０ｘ０１０４”のとき、分岐予測装置ＢＰＲＥ１は、方向履歴メモリＤＩＲＭおよび分岐先履歴メモリＤＥＳＭを参照して、分岐予測を実施する。この際、分岐予測装置ＢＰＲＥ１は、ＰＣ値“０ｘ０１０４”に基づくアドレスの間隔記憶部ＤＭＥＭ１から分岐命令間隔“３”を読み出す。分岐予測装置ＢＰＲＥ１は、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔が“３”であるため、ＰＣ値“０ｘ０１０４”の後続３命令は分岐命令でないと予測する。したがって、ＰＣ値が“０ｘ０１０８”から“０ｘ０１１０”の期間Ｔ２０では、分岐予測装置ＢＰＲＥ１は、分岐予測を実施しない。すなわち、ＰＣ値が“０ｘ０１０８”から“０ｘ０１１０”の期間Ｔ２０では、間隔記憶部ＤＭＥＭ１、方向履歴メモリＤＩＲＭおよび分岐先履歴メモリＤＥＳＭは、参照されない。
【００３９】
ＰＣ値が“０ｘ０１１４”のとき（“０ｘ０１０８”から３命令後）、分岐予測装置ＢＰＲＥ１は、方向履歴メモリＤＩＲＭおよび分岐先履歴メモリＤＥＳＭを参照して分岐予測を実施するとともに、間隔記憶部ＤＭＥＭ１から分岐命令間隔を読み出す。間隔記憶部ＤＭＥＭ１から読み出された分岐命令間隔が“７”であるため、ＰＣ値“０ｘ０１１４”の後続７命令の期間Ｔ３０では、間隔記憶部ＤＭＥＭ１、方向履歴メモリＤＩＲＭおよび分岐先履歴メモリＤＥＳＭは、参照されない。
【００４０】
このように、分岐予測装置ＢＰＲＥ１は、命令が分岐命令でないと予測される期間Ｔ１０、Ｔ２０、Ｔ３０では、分岐予測を実施しない。したがって、この実施形態では、不要な分岐予測の回数を低減でき、消費電力を低減できる。例えば、命令が分岐命令でないと予測される期間Ｔ１０、Ｔ２０、Ｔ３０では、間隔記憶部ＤＭＥＭ１、方向履歴メモリＤＩＲＭおよび分岐先履歴メモリＤＥＳＭは参照されない。このため、この実施形態では、間隔記憶部ＤＭＥＭ１、方向履歴メモリＤＩＲＭおよび分岐先履歴メモリＤＥＳＭへの不要なアクセスを低減でき、消費電力を低減できる。
【００４１】
ここで、分岐命令でない命令が分岐命令と予測されたとき（例えば、ＰＣ値“０ｘ０１０４”の命令が分岐命令でないとき）には、履歴記憶部ＨＭＥＭ等が参照されるため、電力は消費されるが、誤動作にはならない。なお、この場合でも、命令毎に分岐予測が実施される構成に比べて、消費電力を低減できる。また、分岐命令でないと予測した期間に分岐命令ｂｒが実行されたとき（例えば、ＰＣ値“０ｘ０１１０”の命令が分岐命令のとき）には、分岐予測が実施されず、分岐が不成立とみなされる。このとき、プロセッサのサイクル性能は劣化するが、誤動作にはならない。したがって、間隔記憶部ＤＭＥＭ１に記憶されている分岐命令間隔が実際の分岐命令間隔と異なるときにも、誤動作にはならない。
【００４２】
図５は、３ビットのデータ幅を有する間隔記憶部ＤＭＥＭ１の状態の一例を示している。なお、図５は、分岐命令間隔が“１０”のときの間隔記憶部ＤＭＥＭ１の状態の一例を示している。
【００４３】
間隔記憶部ＤＭＥＭ１のデータ幅で記憶できる最大値（図５の例では、“７”）以上の分岐命令間隔（図５の例では、“１０”）は、複数回（複数個所）に分けて記憶される。例えば、ＰＣ値“０ｘ００２８”の分岐命令ｂｒの次の分岐命令ｂｒ（ＰＣ値“０ｘ０１２８”）までの間隔が“１０”のとき、ＰＣ値“０ｘ００２８”に基づくアドレスの間隔記憶部ＤＭＥＭ１には、“７”が記憶される。そして、ＰＣ値“０ｘ００２８”の次のＰＣ値“０ｘ０１００”から７命令後のＰＣ値“０ｘ０１１Ｃ”に基づくアドレスの間隔記憶部ＤＭＥＭ１には、“２”が記憶される。これにより、分岐予測装置ＢＰＲＥ１は、ＰＣ値“０ｘ０１２８”の分岐命令に対して、分岐予測を実施することができる。
【００４４】
例えば、ＰＣ値が“０ｘ００２８”のとき、分岐予測装置ＢＰＲＥ１は、ＰＣ値“０ｘ００２８”に基づくアドレスの間隔記憶部ＤＭＥＭ１に記憶されている分岐命令間隔“７”を読み出す。分岐予測装置ＢＰＲＥ１は、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔が“７”であるため、“０ｘ００２８”の後続７命令は分岐命令でないと予測する。したがって、ＰＣ値が“０ｘ０１００”から“０ｘ０１１８”の７命令の間では、分岐予測装置ＢＰＲＥ１は、分岐予測を実施しない。
【００４５】
そして、ＰＣ値が“０ｘ０１１Ｃ”のとき（“０ｘ０１００”から７命令後）、ＰＣ値“０ｘ０１１Ｃ”に基づくアドレスの間隔記憶部ＤＭＥＭ１に記憶されている分岐命令間隔“２”を読み出す。また、分岐予測装置ＢＰＲＥ１は、ＰＣ値“０ｘ０１１Ｃ”の命令を分岐命令と予測しているため、分岐予測を実施する。なお、上述したように、分岐命令でない命令が分岐命令と予測されたときにも誤動作にはならない。分岐予測装置ＢＰＲＥ１は、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔が“２”であるため、“０ｘ０１１Ｃ”の後続２命令は分岐命令でないと予測する。
【００４６】
ＰＣ値が“０ｘ０１２８”のとき（“０ｘ０１２０”から２命令後）、ＰＣ値“０ｘ０１２８”に基づくアドレスの間隔記憶部ＤＭＥＭ１に記憶されている分岐命令間隔“３”を読み出す。また、分岐予測装置ＢＰＲＥ１は、ＰＣ値“０ｘ０１２８”の命令を分岐命令と予測しているため、分岐予測を実施する。このように、この実施形態では、２つの分岐命令の間隔が間隔記憶部ＤＭＥＭ１に記憶できる最大値以上のときにも、２つの分岐命令のそれぞれに対して、分岐予測を実施できる。
【００４７】
なお、間隔記憶部ＤＭＥＭ１のデータ幅は、３ビットに限定されない。また、例えば、３ビットのカウンタＣＯＴを用いた構成においても、図５と同様の動作により、カウンタＣＯＴの最大値以上の分岐命令間隔に対応できる。このように、この実施形態では、間隔記憶部ＤＭＥＭ１のデータ幅やカウンタＣＯＴのビット幅を分岐命令間隔の最大値以下にできるため、分岐予測装置ＢＰＲＥ１の回路規模を小さくできる。
【００４８】
図６は、図２に示した更新部ＵＰＰ１およびカウンタＣＯＴの動作の一例を示している。処理Ｓ１００−Ｓ１４０は、例えば、デコード処理が実施される度に実施される。なお、図６の符号ＤＭＡＸは、間隔記憶部ＤＭＥＭ１のデータ幅で記憶できる最大値を示している。また、図６の符号ＢＲＰＣ’は、レジスタ値ＢＲＰＣから算出されるアドレス（レジスタ値ＢＲＰＣの下位ビットやハッシュ値等）を示している。
【００４９】
処理Ｓ１００では、例えば、更新部ＵＰＰ１の更新制御部ＵＣＮＴ１は、デコーダＤＥＣから受けた情報に基づいて、デコード処理された命令が分岐命令か否かを判定する。命令が分岐命令でないとき（処理Ｓ１００のＮｏ）、更新部ＵＰＰ１の動作は、処理Ｓ１１０に移る。処理Ｓ１１０では、更新制御部ＵＣＮＴ１は、カウンタ値ＷＣＴが最大値ＤＭＡＸと一致するか否かを判定する。
【００５０】
カウンタ値ＷＣＴが最大値ＤＭＡＸでないとき（処理Ｓ１１０のＮｏ）、処理Ｓ１２０において、カウンタＣＯＴのカウンタ値ＷＣＴがカウントアップする。これにより、カウンタＣＯＴは、命令が命令メモリＩＭＥＭからフェッチされる度に、カウントアップする。一方、カウンタ値ＷＣＴが最大値ＤＭＡＸのとき（処理Ｓ１１０のＹｅｓ）、更新部ＵＰＰ１の動作は、処理Ｓ１３０に移る。また、処理Ｓ１００において、命令が分岐命令であると判定されたとき（処理Ｓ１００のＹｅｓ）、更新部ＵＰＰ１の動作は、処理Ｓ１３０に移る。
【００５１】
処理Ｓ１３０では、更新制御部ＵＣＮＴ１は、間隔記憶部ＤＭＥＭ１を更新する。例えば、更新制御部ＵＣＮＴ１は、更新する間隔記憶部ＤＭＥＭ１のアドレスＡＤＲをレジスタ値ＢＲＰＣから算出する。そして、更新制御部ＵＣＮＴ１は、カウンタ値ＷＣＴをデータＤＡＴとして、間隔記憶部ＤＭＥＭ１のアドレスＡＤＲ（ＢＲＰＣ’）の内容を更新する。これにより、間隔記憶部ＤＭＥＭ１は、分岐命令が実行される度に更新される。このため、実行される命令が分岐命令か否かの予測精度を向上できる。
【００５２】
なお、この実施形態では、分岐命令間隔が最大値ＤＭＡＸ以上のとき、処理Ｓ１１０および処理Ｓ１３０により、分岐命令（例えば、図５のＰＣ値“０ｘ００２８”の分岐命令）に対応するアドレスに最大値ＤＭＡＸを記憶できる。そして、間隔記憶部ＤＭＥＭ１に最大値ＤＭＡＸを更新したときのＰＣ値（例えば、図５のＰＣ値“０ｘ０１１Ｃ”）を起点にして、次に実施される分岐命令までの間隔が算出される。
【００５３】
処理Ｓ１４０では、更新制御部ＵＣＮＴ１は、レジスタＲＥＧ１およびカウンタＣＯＴを初期化する。例えば、更新制御部ＵＣＮＴ１は、パイプラインレジスタＰＲＧ１に保持されているＰＣ値（ＰＣ１）を、レジスタＲＥＧ１のレジスタ値ＢＲＰＣに設定する。また、更新制御部ＵＣＮＴ１は、カウンタＣＯＴのカウンタ値ＷＣＴを“０”にリセットする。このように、カウンタＣＯＴは、間隔記憶部ＤＭＥＭ１の内容が更新される度に、リセットされる。
【００５４】
なお、処理Ｓ１４０では、例えば、処理Ｓ１１０の判定結果（Ｙｅｓ）により処理Ｓ１３０が実施されたときには、レジスタ値ＢＲＰＣは、間隔記憶部ＤＭＥＭ１を最大値ＤＭＡＸに更新したときのＰＣ値（例えば、図５のＰＣ値“０ｘ０１１Ｃ”）に設定される。これにより、この実施形態では、間隔記憶部ＤＭＥＭ１の最大値ＤＭＡＸ以上の分岐命令間隔を、複数回（複数個所）に分けて記憶できる。
【００５５】
このように、分岐命令が実行される度に間隔記憶部ＤＭＥＭ１の内容を更新する構成は、更新動作が単純である。このため、分岐予測装置ＢＰＲＥ１の構成を簡易にできる。なお、更新部ＵＰＰ１の動作は、この例に限定されない。例えば、更新部ＵＰＰ１の動作は、カウンタ値ＷＣＴが最大値ＤＭＡＸになったとき（処理Ｓ１１０のＹｅｓ）、処理Ｓ１３０、Ｓ１４０を実施せずに、終了してもよい。これにより、カウンタ値ＷＣＴは、間隔記憶部ＤＭＥＭ１が更新されるまで、最大値ＤＭＡＸに維持される。この場合、更新部ＵＰＰ１は、分岐命令間隔が最大値ＤＭＡＸ以上のとき、分岐命令間隔を複数回（複数個所）に分けずに、最大値ＤＭＡＸを分岐命令間隔として間隔記憶部ＤＭＥＭ１に記憶する。この結果、分岐命令でない命令に対応するアドレス（例えば、図５のＰＣ値“０ｘ０１１Ｃ”に対応するアドレス）には、分岐命令間隔は記憶されない。
【００５６】
ここで、例えば、リセット後の先頭の分岐命令に対するデコード処理が実施された時点では、レジスタ値ＢＲＰＣやカウンタ値ＷＣＴは、意味のない値である。このため、リセット後の先頭の分岐命令では、意味のない値が間隔記憶部ＤＭＥＭ１に書き込まれる。この意味のない値の書き込みは、リセット後の先頭の分岐命令のみで発生するため、特に問題ない。なお、更新部ＵＰＰ１は、書き込み不可を示すフラグ等を有し、意味のない値の書き込みを防止してもよい。例えば、フラグは、リセット後の先頭の分岐命令の次の分岐命令に対するデコード処理が実施されるまで、間隔記憶部ＤＭＥＭ１への書き込み不可を示している。
【００５７】
以上、この実施形態では、分岐予測装置ＢＰＲＥ１は、分岐命令間隔が記憶される間隔記憶部ＤＭＥＭ１を有している。間隔記憶部ＤＭＥＭ１に記憶された分岐命令間隔は、履歴記憶部ＨＭＥＭおよび間隔記憶部ＤＭＥＭ１を参照するタイミングを決定するために使用される。例えば、予測制御部ＰＣＮＴ１は、履歴記憶部ＨＭＥＭおよび間隔記憶部ＤＭＥＭ１を参照するタイミングを、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔に基づいて決定する。これにより、この実施形態では、命令が解読される前に分岐予測を実施するときにも、履歴記憶部ＨＭＥＭおよび間隔記憶部ＤＭＥＭ１への不要なアクセスを低減でき、消費電力を低減できる。したがって、この実施形態の分岐予測装置ＢＰＲＥ１は、高速処理の必要なプロセッサに搭載されたときにも、消費電力を低減できる。
【００５８】
図７は、別の実施形態における間隔記憶部ＤＭＥＭ２の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。なお、図７では、ＰＣ値“０ｘ００２８”の分岐命令ｂｒにより実行されなかったＰＣ値および命令を破線で囲んだ枠内に示している。
【００５９】
この実施形態の間隔記憶部ＤＭＥＭ２は、分岐命令による分岐が成立したときの分岐命令間隔と分岐命令による分岐が不成立のときの分岐命令間隔との両方を記憶する。分岐予測装置ＢＰＲＥ１のその他の構成は、上述した実施形態と同じである。また、この実施形態の分岐予測装置ＢＰＲＥ１が搭載されるプロセッサは、上述した実施形態と同じである。なお、例えば、間隔記憶部ＤＭＥＭ２は、履歴記憶部ＨＭＥＭの方向履歴メモリや分岐先履歴メモリのビット幅に分岐命令間隔を記憶するためのビットを追加して構成されてもよい。
【００６０】
ＰＣ値“０ｘ００２８”に基づくアドレスの間隔記憶部ＤＭＥＭ２には、例えば、分岐命令ｂｒによる分岐が成立したときの分岐命令間隔“１”と分岐命令ｂｒによる分岐が不成立のときの分岐命令間隔“２”とがそれぞれ記憶される。例えば、予測制御部ＰＣＮＴ１は、ＰＣ値“０ｘ００２８”に基づくアドレスの方向履歴メモリＤＩＲＭの情報が分岐成立（ｔａｋｅｎ）を示しているため、分岐命令による分岐が成立したときの分岐命令間隔“１”を間隔記憶部ＤＭＥＭ２から読み出す。したがって、分岐予測装置ＢＰＲＥ１は、“０ｘ００２８”の次の命令は分岐命令でないと予測する。図７の例では、方向履歴メモリＤＩＲＭの情報に基づいて参照される間隔記憶部ＤＭＥＭ２の分岐命令間隔を太い線で囲んで示している。
【００６１】
なお、間隔記憶部ＤＭＥＭ２には、ＰＣ値“０ｘ００２８”の分岐命令ｂｒによる分岐が不成立のときの分岐命令間隔として“２”が記憶されている。このため、ＰＣ値“０ｘ００２８”の分岐命令ｂｒによる分岐が不成立のときには、分岐予測装置ＢＰＲＥ１は、“０ｘ００２８”の後続２命令は分岐命令でないと予測する。例えば、予測制御部ＰＣＮＴ１は、ＰＣ値“０ｘ００２８”に基づくアドレスの方向履歴メモリＤＩＲＭの情報が分岐の不成立（ｎｏｔ  ｔａｋｅｎ）を示しているときには、“０ｘ００２８”の後続２命令は分岐命令でないと予測する。したがって、分岐予測装置ＢＰＲＥ１は、ＰＣ値が“０ｘ００３４”のとき（“０ｘ００２Ｃ”から２命令後）、分岐予測を実施する。
【００６２】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、この実施形態では、間隔記憶部ＤＭＥＭ２は、分岐命令による分岐が成立したときの分岐命令間隔と分岐命令による分岐が不成立のときの分岐命令間隔との両方を記憶する。このため、実行される命令が分岐命令か否かの予測精度を、分岐が成立するか否かにかかわらず、向上できる。
【００６３】
これにより、この実施形態では、例えば、分岐命令を分岐命令でないと予測する頻度を低減できるため、プロセッサのサイクル性能を向上できる。あるいは、この実施形態では、分岐命令以外の命令を分岐命令であると予測する頻度を低減できるため、履歴記憶部ＨＭＥＭおよび間隔記憶部ＤＭＥＭ１への不要なアクセスをさらに低減できる。すなわち、この実施形態では、プロセッサのサイクル性能が低下することを防止しつつ、消費電力を低減できる。
【００６４】
図８は、別の実施形態における分岐予測装置ＢＰＲＥ２の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。図８の符号ＤＩＳＴは、パイプラインレジスタＰＲＧ１に保持されている分岐命令間隔を示している。また、符号ＢＲＤＩＳＴは、レジスタＲＥＧ２に保持されている分岐命令間隔を示している。
【００６５】
この実施形態の分岐予測装置ＢＰＲＥ２の構成は、図１に示した予測制御部ＰＣＮＴ１および更新部ＵＰＰ１の代わりに予測制御部ＰＣＮＴ２および更新部ＵＰＰ２がそれぞれ設けられている。分岐予測装置ＢＰＲＥ２のその他の構成は、図１−図６で説明した実施形態と同じである。また、分岐予測装置ＢＰＲＥ２が搭載されるプロセッサは、図１−図６で説明した実施形態と同じである。
【００６６】
予測制御部ＰＣＮＴ２は、例えば、間隔記憶部ＤＭＥＭ１から読み出した分岐命令間隔ＤＩＳＴを、パイプラインレジスタＰＲＧ１に出力する。予測制御部ＰＣＮＴ２のその他の構成および動作は、予測制御部ＰＣＮＴ１と同じである。なお、予測制御部ＰＣＮＴ２は、例えば、間隔記憶部ＤＭＥＭ１から分岐命令間隔ＤＩＳＴを読み出さない命令では、パイプラインレジスタＰＲＧ１に保持される分岐命令間隔ＤＩＳＴを“０”に設定する。
【００６７】
更新部ＵＰＰ２は、更新部ＵＰＰ１にレジスタＲＥＧ２および比較部ＣＯＭが追加され、図２に示した更新制御部ＵＣＮＴ１の代わりに更新制御部ＵＣＮＴ２が設けられている。レジスタＲＥＧ２は、例えば、分岐命令間隔ＤＩＳＴを保持する。例えば、レジスタＲＥＧ２のレジスタ値ＢＲＤＩＳＴ（ＤＩＳＴ）は、分岐命令が実行される度に更新される。
【００６８】
比較部ＣＯＭは、カウンタＣＯＴにより計測された分岐命令間隔とレジスタＲＥＧ２のレジスタ値ＢＲＤＩＳＴとを比較する。なお、比較部ＣＯＭは、更新制御部ＵＣＮＴ２内に設けられてもよい。更新部ＵＰＰ２は、例えば、カウンタＣＯＴにより計測された分岐命令間隔と間隔記憶部ＤＭＥＭ１に記憶されている分岐命令間隔ＢＲＤＩＳＴとが同じときには、間隔記憶部ＤＭＥＭ１を更新しない。更新部ＵＰＰ２のその他の構成および動作は、図１−図６で説明した実施形態と同じである。
【００６９】
図９は、図８に示した更新部ＵＰＰ２およびカウンタＣＯＴの動作の一例を示している。処理Ｓ１００−Ｓ１４２は、例えば、デコード処理が実施される度に実施される。図９に示した動作は、図６に示した動作に処理Ｓ１２４が追加され、処理Ｓ１４０の代わりに処理Ｓ１４２を実施する。更新部ＵＰＰ２およびカウンタＣＯＴのその他の動作は、図６に示した動作と同じである。
【００７０】
処理Ｓ１２４は、命令が分岐命令のとき（処理Ｓ１００のＹｅｓ）に実施される。あるいは、処理Ｓ１２４は、命令が分岐命令以外のときでカウンタ値ＷＣＴが最大値ＤＭＡＸのとき（処理Ｓ１１０のＹｅｓ）、実施される。処理Ｓ１２４では、例えば、比較部ＣＯＭは、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとを比較する。カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致しないとき（処理Ｓ１２４のＮｏ）、更新制御部ＵＣＮＴ２は、処理Ｓ１３０において、間隔記憶部ＤＭＥＭ１を更新する。
【００７１】
一方、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致したとき（処理Ｓ１２４のＹｅｓ）、更新制御部ＵＣＮＴ２は、処理Ｓ１４２において、レジスタＲＥＧ１、ＲＥＧ２およびカウンタＣＯＴを初期化する。例えば、更新制御部ＵＣＮＴ２は、パイプラインレジスタＰＲＧ１に保持されているＰＣ値（ＰＣ１）を、レジスタＲＥＧ１のレジスタ値ＢＲＰＣに設定する。また、更新制御部ＵＣＮＴ２は、パイプラインレジスタＰＲＧ１に保持されている分岐命令間隔ＤＩＳＴを、レジスタＲＥＧ２のレジスタ値ＢＲＤＩＳＴに設定する。さらに、更新制御部ＵＣＮＴ２は、カウンタＣＯＴのカウンタ値ＷＣＴを“０”にリセットする。
【００７２】
このように、更新制御部ＵＣＮＴ２は、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致したときには、間隔記憶部ＤＭＥＭ１を更新せずに、レジスタＲＥＧ１、ＲＥＧ２およびカウンタＣＯＴを初期化する。これにより、この実施形態では、間隔記憶部ＤＭＥＭ１の更新回数を低減できる。この結果、消費電力を低減できる。
【００７３】
なお、更新部ＵＰＰ２の動作は、この例に限定されない。例えば、更新部ＵＰＰ２の動作は、カウンタ値ＷＣＴが最大値ＤＭＡＸになったとき（処理Ｓ１１０のＹｅｓ）、処理Ｓ１２４、Ｓ１３０、Ｓ１４２を実施せずに、終了してもよい。この場合、更新部ＵＰＰ２は、分岐命令間隔が最大値ＤＭＡＸ以上のとき、分岐命令間隔を複数回（複数個所）に分けずに、最大値ＤＭＡＸを分岐命令間隔として間隔記憶部ＤＭＥＭ１に記憶する。
【００７４】
また、例えば、更新部ＵＰＰ２は、処理Ｓ１２４において、カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴ以上か否かを判定してもよい。例えば、更新制御部ＵＣＮＴ２は、カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴより小さいとき、処理Ｓ１３０において、間隔記憶部ＤＭＥＭ１を更新する。これにより、カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴ以上のときには、間隔記憶部ＤＭＥＭ２は、更新されない。
【００７５】
あるいは、更新部ＵＰＰ２は、図１０に示すように、間隔記憶部ＤＭＥＭ１を更新する際に、既に記憶されている分岐命令間隔を上限にして、分岐命令間隔を複数回（複数個所）に分けて更新してもよい。
【００７６】
図１０は、図８に示した更新部ＵＰＰ２およびカウンタＣＯＴの動作の別の例を示している。例えば、図１０の動作は、カウンタＣＯＴの計測に基づく分岐命令間隔（以下、実測の分岐命令間隔とも称する）が間隔記憶部ＤＭＥＭ１に記憶されている分岐命令間隔（以下、更新前の分岐命令間隔とも称する）より大きいとき、分岐命令間隔を複数回（複数個所）に分けて記憶する。例えば、更新前の分岐命令間隔に基づいて参照される間隔記憶部ＤＭＥＭ１のアドレス（以下、中継アドレスとも称する）に、実測の分岐命令間隔と更新前の分岐命令間隔との差分に基づいて算出される間隔が書き込まれる。
【００７７】
処理Ｓ１００−Ｓ１４２は、例えば、デコード処理が実施される度に実施される。図１０に示した動作は、図９に示した動作に処理Ｓ１１２、Ｓ１１４が追加されている。更新部ＵＰＰ２およびカウンタＣＯＴのその他の動作は、図９に示した動作と同じである。
【００７８】
処理Ｓ１１２は、命令が分岐命令以外のときでカウンタ値ＷＣＴが最大値ＤＭＡＸでないとき（処理Ｓ１１０のＮｏ）、実施される。処理Ｓ１１２では、更新制御部ＵＣＮＴ２は、カウンタ値ＷＣＴが“０”か否かを判定する。これにより、意味の無い値がレジスタ値ＢＲＤＩＳＴに保持されているときに、処理Ｓ１１４が実施されることを防止できる。
【００７９】
カウンタ値ＷＣＴが“０”のとき（処理Ｓ１１２のＹｅｓ）、カウンタ値ＷＣＴは、処理Ｓ１２０において、カウントアップする。一方、カウンタ値ＷＣＴが“０”でないとき（処理Ｓ１１２のＮｏ）、更新部ＵＰＰ２の動作は、処理Ｓ１１４に移る。処理Ｓ１１４では、更新制御部ＵＣＮＴ２は、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致するか否かを判定する。カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致しないとき（処理Ｓ１１４のＮｏ）、カウンタ値ＷＣＴは、処理Ｓ１２０において、カウントアップする。
【００８０】
一方、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致したとき（処理Ｓ１１４のＹｅｓ）、更新制御部ＵＣＮＴ２は、処理Ｓ１４２において、レジスタＲＥＧ１、ＲＥＧ２およびカウンタＣＯＴを初期化する。これにより、カウンタＣＯＴの計測に基づく分岐命令間隔が更新前の分岐命令間隔より大きいとき、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致したときのＰＣ値（以下、中継ＰＣ値とも称する）を起点にして、次に実施される分岐命令までの間隔（差分）が計測される。この計測により得られる間隔は、実測の分岐命令間隔と更新前の分岐命令間隔との差分に基づいて算出される間隔に対応する。
【００８１】
そして、中継ＰＣ値の後の分岐命令が実施されるとき（処理Ｓ１００のＹｅｓ）、例えば、処理Ｓ１３０において、更新前の分岐命令間隔に基づいて参照される間隔記憶部ＤＭＥＭ１の中継アドレス（ＢＲＰＣ’）に、中継ＰＣ値を起点にして計測されたカウンタ値ＷＣＴが書き込まれる。このように、更新部ＵＰＰ２は、間隔記憶部ＤＭＥＭ１の内容を既に記憶されている分岐命令間隔より大きくなる値に更新せずに、中継ＰＣ値を用いて更新する。
【００８２】
すなわち、更新部ＵＰＰ２は、例えば、分岐命令の分岐方向が今回と前回で異なるときにも、前回の分岐命令間隔の情報を残しつつ、中継ＰＣ値を用いて今回の分岐命令間隔の情報を間隔記憶部ＤＭＥＭ１に記憶する。これにより、例えば、この実施形態では、分岐の成立と不成立とで分岐命令間隔が異なるときにも、中継ＰＣ値を用いることにより、分岐の成立と不成立との両方に対応できる。
【００８３】
なお、分岐の成立と不成立との両方に対応させる更新動作は、この例に限定されない。例えば、更新部ＵＰＰ２は、意味の無い値がレジスタ値ＢＲＤＩＳＴに保持されていることを示すフラグを用いてもよい。例えば、分岐予測装置ＢＰＲＥ２は、レジスタ値ＢＲＤＩＳＴのデータ幅を分岐命令間隔ＤＩＳＴより１ビット増やし、最上位ビットをフラグに割り当ててもよい。フラグは、例えば、間隔記憶部ＤＭＥＭ１から分岐命令間隔ＤＩＳＴを読み出さない命令のときに、予測制御部ＰＣＮＴ２により“１”に設定される。このときのレジスタ値ＢＲＤＩＳＴは、最大値ＤＭＡＸより大きくなるため、処理Ｓ１０２は、省かれてもよい。
【００８４】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、この実施形態では、間隔記憶部ＤＭＥＭ１の内容が変化しないときには、間隔記憶部ＤＭＥＭ１を更新しない。これにより、この実施形態では、間隔記憶部ＤＭＥＭ１の更新回数を低減でき、消費電力を低減できる。また、中継ＰＣ値を用いて更新する場合、分岐の成立と不成立との両方に対応できるため、分岐命令を分岐命令でないと予測する頻度を低減できる。この結果、プロセッサのサイクル性能を向上できる。すなわち、この実施形態では、プロセッサのサイクル性能が低下することを防止しつつ、消費電力を低減できる。
【００８５】
図１１は、演算処理のステージで更新動作を実施する分岐予測装置ＢＰＲＥ２の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。図１１の符号ＰＣ３は、パイプラインレジスタＰＲＧ３に保持されているＰＣ値を示している。この実施形態の分岐予測装置ＢＰＲＥ２の構成は、カウンタＣＯＴおよび更新部ＵＰＰ２が演算処理（ＡＬＵの処理）のステージと同じステージで動作するようにプロセッサと接続される。この実施形態の分岐予測装置ＢＰＲＥ２のその他の構成は、図８−図１０で説明した実施形態の分岐予測装置ＢＰＲＥ２と同じである。また、この実施形態の分岐予測装置ＢＰＲＥ２の動作は、カウンタＣＯＴおよび更新部ＵＰＰ２が演算処理のステージと同じステージで動作することを除いて、図８に示した分岐予測装置ＢＰＲＥ２と同じである。
【００８６】
以上、この実施形態においても、図８−図１０で説明した実施形態と同様の効果を得ることができる。なお、図１−図７で説明した実施形態の分岐予測装置ＢＰＲＥ１も、カウンタＣＯＴおよび更新部ＵＰＰ１が演算処理のステージと同じステージで動作するようにプロセッサと接続されてもよい。この場合にも、図１−図７で説明した実施形態と同様の効果を得ることができる。
【００８７】
図１２は、別の実施形態における分岐予測装置ＢＰＲＥ３の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。図１２の符号ＴＡＧＨは、例えば、パイプラインレジスタＰＲＧ１に保持されているタグ比較結果を示している。タグ比較結果ＴＡＧＨは、予測制御部ＰＣＮＴ３から出力される。また、符号ＢＲＴＡＧＨは、レジスタＲＥＧ３に保持されているタグ比較結果を示している。
【００８８】
この実施形態の分岐予測装置ＢＰＲＥ３の構成は、図８に示した間隔記憶部ＤＭＥＭ１、予測制御部ＰＣＮＴ２および更新部ＵＰＰ２の代わりに間隔記憶部ＤＭＥＭ３、予測制御部ＰＣＮＴ３および更新部ＵＰＰ３がそれぞれ設けられている。分岐予測装置ＢＰＲＥ３のその他の構成は、図８−図１０で説明した実施形態と同じである。また、分岐予測装置ＢＰＲＥ３が搭載されるプロセッサの構成は、図１−図６で説明した実施形態と同じである。
【００８９】
間隔記憶部ＤＭＥＭ３は、図１３に示すように、タグＴＡＧと分岐命令間隔ＤＩＳＴとを含むデータＤＡＴを記憶する。間隔記憶部ＤＭＥＭ３のその他の構成は、間隔記憶部ＤＭＥＭ１と同じである。なお、例えば、間隔記憶部ＤＭＥＭ３は、履歴記憶部ＨＭＥＭの方向履歴メモリや分岐先履歴メモリのビット幅に分岐命令間隔を記憶するためのビットを追加して構成されてもよい。
【００９０】
予測制御部ＰＣＮＴ３は、例えば、タグＴＡＧとＰＣ値の一部とを比較し、タグ比較結果ＴＡＧＨをパイプラインレジスタＰＲＧ１に出力する。予測制御部ＰＣＮＴ３のその他の構成は、図８に示した予測制御部ＰＣＮＴ２と同じである。
【００９１】
更新部ＵＰＰ３は、図８に示した更新部ＵＰＰ２にレジスタＲＥＧ３が追加され、更新制御部ＵＣＮＴ２の代わりに更新制御部ＵＣＮＴ３が設けられている。レジスタＲＥＧ３は、例えば、タグ比較結果ＴＡＧＨを保持する。例えば、レジスタＲＥＧ３のレジスタ値ＢＲＴＡＧＨ（ＴＡＧＨ）は、分岐命令が実行される度に更新される。更新部ＵＰＰ３のその他の構成は、図８に示した更新部ＵＰＰ２と同じである。
【００９２】
なお、分岐予測装置ＢＰＲＥ３の構成は、この例に限定されない。例えば、分岐予測装置ＢＰＲＥ３は、図１１に示したように、カウンタＣＯＴおよび更新部ＵＰＰ３が演算処理のステージと同じステージで動作するようにプロセッサと接続されてもよい。
【００９３】
図１３は、図１２に示した間隔記憶部ＤＭＥＭ３および予測制御部ＰＣＮＴ３の一例を示している。なお、図１３は、３２ビット命令のときのプログラムカウンタＰＣ、間隔記憶部ＤＭＥＭ３および予測制御部ＰＣＮＴ３の一例を示している。
【００９４】
間隔記憶部ＤＭＥＭ３は、例えば、ＰＣ値の下位８ビットのうちの上位６ビット（ＰＣｂ）をアドレスＡＤＲに使用する。ここで、３２ビット命令のプロセッサでは、ＰＣ値の最下位２ビット（ＰＣａ）は、固定値であるため、間隔記憶部ＤＭＥＭ３のアドレスＡＤＲに使用されなくてもよい。なお、アドレスＡＤＲのビット幅は、６ビットに限定されない。
【００９５】
間隔記憶部ＤＭＥＭ３のデータＤＡＴは、ＰＣ値の上位２４ビット（ＰＣｃ）を示すタグＴＡＧと分岐命令間隔ＤＩＳＴとを有している。例えば、分岐命令間隔ＤＩＳＴには、４ビットが割り当てられている。なお、分岐命令間隔ＤＩＳＴのデータ幅は、４ビットに限定されない。また、タグＴＡＧのデータ幅は、２４ビットに限定されない。
【００９６】
予測制御部ＰＣＮＴ３は、例えば、カウンタＰＣＯＴ、タグ判定部ＤＥＴおよび選択部ＳＥＬを有している。例えば、予測制御部ＰＣＮＴ３は、ＰＣ値（ＰＣ０）を受け、カウンタＰＣＯＴを用いて命令数を計測する。また、予測制御部ＰＣＮＴ３は、タグＴＡＧおよび分岐命令間隔ＤＩＳＴ（ＤＩＳＴｉ）を間隔記憶部ＤＭＥＭ３から読み出し、タグ比較結果ＴＡＧＨおよび分岐命令間隔ＤＩＳＴ（ＤＩＳＴｏ）を出力する。例えば、予測制御部ＰＣＮＴ３は、先に読み出した分岐命令間隔ＤＩＳＴとカウンタＰＣＯＴにより計測された命令数とが一致したとき、ＰＣ値の下位８ビットのうちの上位６ビット部分ＰＣｂが示すアドレスＡＤＲのデータＤＡＴ（タグＴＡＧ、分岐命令間隔ＤＩＳＴ）を読み出す。
【００９７】
カウンタＰＣＯＴは、例えば、ＰＣ値が更新される度に、カウントダウンするダウンカウンタである。なお、カウンタＰＣＯＴは、ＰＣ値が更新される度に、カウントアップするアップカウンタでもよい。すなわち、カウンタＰＣＯＴは、命令数を計測するカウンタである。
【００９８】
タグ判定部ＤＥＴは、間隔記憶部ＤＭＥＭ３から読み出したタグＴＡＧとＰＣ値の上位２４ビット部分ＰＣｃとを比較し、比較結果であるタグ比較結果ＴＡＧＨを出力する。例えば、タグ判定部ＤＥＴは、タグＴＡＧとＰＣ値の上位２４ビット部分ＰＣｃとが一致したとき、タグ比較結果ＴＡＧＨを、“１”に設定する。また、例えば、タグ判定部ＤＥＴは、タグＴＡＧとＰＣ値の上位２４ビット部分ＰＣｃとが一致しないとき、タグ比較結果ＴＡＧＨを、“０”に設定する。
【００９９】
選択部ＳＥＬは、例えば、タグ判定部ＤＥＴから受けるタグ比較結果ＴＡＧＨに応じて、間隔記憶部ＤＭＥＭ３から読み出した分岐命令間隔ＤＩＳＴｉと“０”とのいずれかを、分岐命令間隔ＤＩＳＴｏとして出力する。例えば、選択部ＳＥＬは、タグＴＡＧとＰＣ値の上位２４ビット部分ＰＣｃとが一致したとき（例えば、ＴＡＧＨが“１”のとき）、間隔記憶部ＤＭＥＭ３から読み出した分岐命令間隔ＤＩＳＴｉを、分岐命令間隔ＤＩＳＴｏとして出力する。また、選択部ＳＥＬは、タグＴＡＧとＰＣ値の上位２４ビット部分ＰＣｃとが一致しないとき（例えば、ＴＡＧＨが“０”のとき）、分岐命令間隔ＤＩＳＴｏを、例えば、“０”に設定する。
【０１００】
図１４は、図１３に示した予測制御部ＰＣＮＴ３の動作の一例を示している。処理Ｓ２００−Ｓ２７０は、例えば、命令フェッチ処理が実施される度に実施される。
【０１０１】
処理Ｓ２００では、カウンタＰＣＯＴのカウンタ値が“０”か否かを判定する。例えば、最初の分岐命令のＰＣ値が出力されるまで、カウンタＰＣＯＴのカウンタ値は、“０”である。カウンタＰＣＯＴのカウンタ値が“０”でないとき（処理Ｓ２００のＮｏ）、カウンタＰＣＯＴのカウンタ値は、処理Ｓ２１０において、カウントダウンする。そして、予測制御部ＰＣＮＴ３は、処理Ｓ２２０において、分岐命令間隔ＤＩＳＴｏおよびタグ比較結果ＴＡＧＨを、“０”に設定する。
【０１０２】
一方、カウンタＰＣＯＴのカウンタ値が“０”のとき（処理Ｓ２００のＹｅｓ）、予測制御部ＰＣＮＴ３の動作は、処理Ｓ２３０に移る。処理Ｓ２３０では、予測制御部ＰＣＮＴ３は、例えば、履歴記憶部ＨＭＥＭへの参照タイミングであることを予測部ＰＲＥＤに通知する。これにより、予測部ＰＲＥＤは、履歴記憶部ＨＭＥＭを参照して分岐予測を実施する。また、処理Ｓ２３０では、予測制御部ＰＣＮＴ３は、タグＴＡＧおよび分岐命令間隔ＤＩＳＴ（ＤＩＳＴｉ）を含むデータＤＡＴを、間隔記憶部ＤＭＥＭ３のアドレスＡＤＲ（ＰＣｂ）から読み出す。アドレスＡＤＲ（ＰＣｂ）は、例えば、ＰＣ値の下位８ビットのうちの上位６ビット部分ＰＣｂが示すアドレスである。
【０１０３】
そして、処理Ｓ２４０では、タグ判定部ＤＥＴは、ＰＣ値の上位２４ビット部分ＰＣｃと処理Ｓ２３０で読み出したタグＴＡＧとを比較する。タグＴＡＧと値ＰＣｃとが一致しないとき（処理Ｓ２４０のＮｏ）、予測制御部ＰＣＮＴ３の動作は、処理Ｓ２５０に移る。処理Ｓ２５０では、例えば、タグ判定部ＤＥＴはタグ比較結果ＴＡＧＨを“０”に設定し、選択部ＳＥＬは分岐命令間隔ＤＩＳＴｏを“０”に設定する。そして、予測制御部ＰＣＮＴ３は、処理Ｓ２７０において、カウンタＰＣＯＴのカウンタ値を分岐命令間隔ＤＩＳＴｏ（“０”）に設定する。
【０１０４】
一方、タグＴＡＧと値ＰＣｃとが一致したとき（処理Ｓ２４０のＹｅｓ）、予測制御部ＰＣＮＴ３の動作は、処理Ｓ２６０に移る。処理Ｓ２６０では、例えば、タグ判定部ＤＥＴはタグ比較結果ＴＡＧＨを“１”に設定する。また、選択部ＳＥＬは、処理Ｓ２３０で読み出した分岐命令間隔ＤＩＳＴｉを、分岐命令間隔ＤＩＳＴｏとして出力する。そして、予測制御部ＰＣＮＴ３は、処理Ｓ２７０において、カウンタＰＣＯＴのカウンタ値を分岐命令間隔ＤＩＳＴｏ（処理Ｓ２３０で読み出した分岐命令間隔ＤＩＳＴｉ）に設定する。
【０１０５】
このように、予測制御部ＰＣＮＴ３は、ＰＣ値の上位２４ビット部分ＰＣｃと処理Ｓ２３０で読み出したタグＴＡＧとが一致したときに、間隔記憶部ＤＭＥＭ３から読み出した分岐命令間隔ＤＩＳＴを有効にする。ここで、プログラムカウンタＰＣは、例えば、カウンタＰＣＯＴのカウンタ値が“０”でないとき（処理Ｓ２００のＮｏ）には、連続する次の命令を示す値（例えば、４増加した値）にＰＣ値を更新する。なお、ＰＣ値は、例えば、カウンタＰＣＯＴのカウンタ値が“０”のとき（処理Ｓ２００のＹｅｓ）には、分岐予測の結果に応じた値に設定される。
【０１０６】
予測制御部ＰＣＮＴ３の動作は、この例に限定されない。例えば、カウンタＰＣＯＴがアップカウンタのとき、処理Ｓ２００では、分岐命令間隔ＤＩＳＴとカウンタＰＣＯＴのカウンタ値とが一致するか否かが判定される。この場合、カウンタＰＣＯＴのカウンタ値と比較される分岐命令間隔ＤＩＳＴとして、例えば、処理Ｓ２７０において、分岐命令間隔ＤＩＳＴｏがレジスタ等に保持される。さらに、処理Ｓ２７０において、カウンタＰＣＯＴは、例えば、“０”にリセットされる。
【０１０７】
図１５は、図１２に示した更新部ＵＰＰ３およびカウンタＣＯＴの動作の一例を示している。なお、図１５に示した動作では、更新部ＵＰＰ３は、分岐命令以外の命令に対応するアドレスに分岐命令間隔を書き込まないように、間隔記憶部ＤＭＥＭ３を更新する。すなわち、図１５に示した動作では、更新部ＵＰＰ３は、分岐命令間隔が最大値ＤＭＡＸ以上のとき、分岐命令間隔を複数回（複数個所）に分けずに、間隔記憶部ＤＭＥＭ１を更新する。
【０１０８】
図１５の符号ＢＲＰＣｂ、ＢＲＰＣｃは、ＰＣ値の一部分ＰＣｂ、ＰＣｃにそれぞれ対応している。すなわち、レジスタ値ＢＲＰＣｂは、例えば、レジスタ値ＢＲＰＣの下位８ビットのうちの上位６ビットである。また、レジスタ値ＢＲＰＣｃは、例えば、レジスタ値ＢＲＰＣの上位２４ビットである。
【０１０９】
処理Ｓ１００−Ｓ１４４は、例えば、デコード処理が実施される度に実施される。図１５に示した動作は、図９に示した動作に処理Ｓ１２２が追加され、処理Ｓ１２４、Ｓ１３０、Ｓ１４２の代わりに処理Ｓ１２６、Ｓ１３２、Ｓ１４４がそれぞれ実施される。また、処理Ｓ１１０の判定結果（Ｙｅｓ）後に実施される処理は、図９に示した動作と異なる。更新部ＵＰＰ３およびカウンタＣＯＴのその他の動作は、図９に示した動作と同じである。
【０１１０】
命令が分岐命令以外のときでカウンタ値ＷＣＴが最大値ＤＭＡＸのとき（処理Ｓ１１０のＹｅｓ）、カウンタ値ＷＣＴは、カウントアップされない。すなわち、カウンタ値ＷＣＴが最大値ＤＭＡＸのとき、カウンタ値ＷＣＴは、間隔記憶部ＤＭＥＭ３が更新されるまで、間隔記憶部ＤＭＥＭ３のデータ幅で記憶できる最大値ＤＭＡＸに維持される。
【０１１１】
処理Ｓ１２２は、命令が分岐命令のとき（処理Ｓ１００のＹｅｓ）、実施される。処理Ｓ１２２では、更新制御部ＵＣＮＴ３は、レジスタ値ＢＲＴＡＧＨが“１”か否かを判定する。すなわち、更新制御部ＵＣＮＴ３は、更新対象のＰＣ値の上位２４ビット部分ＰＣｃとタグＴＡＧとが一致するか否かを判定する。
【０１１２】
レジスタ値ＢＲＴＡＧＨが“１”のとき（処理Ｓ１２２のＹｅｓ）、更新部ＵＰＰ３の動作は、処理Ｓ１２６に移る。処理Ｓ１２６では、例えば、比較部ＣＯＭは、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとを比較する。そして、例えば、更新制御部ＵＣＮＴ３は、比較部ＣＯＭの比較結果に基づいて、カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴ以上か否かを判定する。すなわち、更新制御部ＵＣＮＴ３は、タグＴＡＧと値ＰＣｃとが一致したとき、カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴ以上か否かを判定する。
【０１１３】
カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴより小さいとき（処理Ｓ１２６のＮｏ）、更新制御部ＵＣＮＴ３は、処理Ｓ１３２において、間隔記憶部ＤＭＥＭ３を更新する。これにより、例えば、この実施形態では、分岐命令のときに分岐予測が実施されないことを防止できる。したがって、この実施形態では、プロセッサのサイクル性能が低下することを防止しつつ、消費電力を低減できる。
【０１１４】
また、カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴ以上のとき（処理Ｓ１２６のＹｅｓ）、更新制御部ＵＣＮＴ３は、処理Ｓ１４４において、レジスタＲＥＧ１、ＲＥＧ２、ＲＥＧ３およびカウンタＣＯＴを初期化する。このように、カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴ以上のときには、間隔記憶部ＤＭＥＭ３は、更新されない。
【０１１５】
なお、レジスタ値ＢＲＴＡＧＨが“１”でないとき（処理Ｓ１２２のＮｏ）、更新制御部ＵＣＮＴ３は、処理Ｓ１３２において、間隔記憶部ＤＭＥＭ３を更新する。すなわち、更新制御部ＵＣＮＴ３は、タグＴＡＧと値ＰＣｃとが一致しないとき、間隔記憶部ＤＭＥＭ３を更新する。
【０１１６】
処理Ｓ１３２では、更新制御部ＵＣＮＴ３は、レジスタ値ＢＲＰＣｃおよびカウンタ値ＷＣＴに基づいて、間隔記憶部ＤＭＥＭ３のアドレスＡＤＲ（レジスタ値ＢＲＰＣｂ）のデータＤＡＴを更新する。これにより、間隔記憶部ＤＭＥＭ３のアドレスＡＤＲ（レジスタ値ＢＲＰＣｂ）のデータＤＡＴのタグＴＡＧおよび分岐命令間隔ＤＩＳＴは、レジスタ値ＢＲＰＣｃおよびカウンタ値ＷＣＴにそれぞれ更新される。
【０１１７】
このように、タグＴＡＧと値ＰＣｃとが一致し、かつ、カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴより小さいとき、間隔記憶部ＤＭＥＭ３が更新される。あるいは、間隔記憶部ＤＭＥＭ３は、タグＴＡＧと値ＰＣｃとが一致しないときに更新される。なお、例えば、処理Ｓ１１０の判定結果（Ｙｅｓ）後に処理Ｓ１３２が実施されたときには、間隔記憶部ＤＭＥＭ３に記憶される分岐命令間隔ＤＩＳＴは、最大値ＤＭＡＸである。
【０１１８】
処理Ｓ１４４では、更新制御部ＵＣＮＴ３は、レジスタＲＥＧ１、ＲＥＧ２、ＲＥＧ３およびカウンタＣＯＴを初期化する。例えば、更新制御部ＵＣＮＴ３は、パイプラインレジスタＰＲＧ１に保持されているＰＣ値（ＰＣ１）、分岐命令間隔ＤＩＳＴおよびタグ比較結果ＴＡＧＨを、レジスタ値ＢＲＰＣ、レジスタ値ＢＲＤＩＳＴおよびレジスタ値ＢＲＴＡＧＨにそれぞれ設定する。また、更新制御部ＵＣＮＴ３は、カウンタＣＯＴのカウンタ値ＷＣＴを“０”にリセットする。このように、更新部ＵＰＰ３は、例えば、分岐命令以外の命令に対応するアドレスに分岐命令間隔を書き込まないように、間隔記憶部ＤＭＥＭ３を更新する。
【０１１９】
なお、更新部ＵＰＰ３の動作は、この例に限定されない。例えば、更新部ＵＰＰ３の動作は、カウンタ値ＷＣＴが最大値ＤＭＡＸになったとき（処理Ｓ１１０のＹｅｓ）、処理Ｓ１２２に移ってもよい。すなわち、更新部ＵＰＰ３は、カウンタ値ＷＣＴが最大値ＤＭＡＸになったときに、間隔記憶部ＤＭＥＭ３を更新してもよい。このとき、更新部ＵＰＰ３は、間隔記憶部ＤＭＥＭ３を更新したことを示すフラグを設定する。
【０１２０】
例えば、更新部ＵＰＰ３は、間隔記憶部ＤＭＥＭ３を更新したことを示すフラグが設定されている間は、間隔記憶部ＤＭＥＭ３を更新しない。そして、フラグを設定した後に分岐命令が実行されたとき、間隔記憶部ＤＭＥＭ３を更新せずに、フラグをクリアする。この際、更新制御部ＵＣＮＴ３は、レジスタＲＥＧ１、ＲＥＧ２、ＲＥＧ３およびカウンタＣＯＴを初期化する。
【０１２１】
また、更新部ＵＰＰ３は、処理Ｓ１２６において、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致するか否かを判定してもよい。この場合、間隔記憶部ＤＭＥＭ３は、図９に示した動作と同様に、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致しないときに更新される。例えば、更新制御部ＵＣＮＴ３は、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致しないとき、処理Ｓ１３２において、間隔記憶部ＤＭＥＭ３を更新する。また、例えば、更新制御部ＵＣＮＴ３は、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致したとき、間隔記憶部ＤＭＥＭ３を更新しない。すなわち、更新部ＵＰＰ３は、カウンタ値ＷＣＴがレジスタ値ＢＲＤＩＳＴより小さいか否かにかかわらず、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致しないときに、間隔記憶部ＤＭＥＭ３を更新してもよい。
【０１２２】
あるいは、更新部ＵＰＰ３は、処理Ｓ１１０の判定結果（Ｙｅｓ）後に処理Ｓ１２２を実施し、かつ、処理Ｓ１２６において、カウンタ値ＷＣＴとレジスタ値ＢＲＤＩＳＴとが一致するか否かを判定してもよい。これにより、間隔記憶部ＤＭＥＭ３の最大値ＤＭＡＸ以上の分岐命令間隔は、図９に示した動作と同様に、複数回（複数個所）に分けて記憶される。
【０１２３】
また、更新部ＵＰＰ３は、図１０に示したように、処理Ｓ１１０の判定結果（Ｎｏ）後に、処理Ｓ１１２、Ｓ１１４を実施してもよい。すなわち、更新部ＵＰＰ３は、間隔記憶部ＤＭＥＭ３の内容を既に記憶されている分岐命令間隔より大きくなる値に更新せずに、中継ＰＣ値を用いて更新してもよい。
【０１２４】
また、分岐先履歴メモリのビット幅に分岐命令間隔を記憶するためのビットを追加した構成の間隔記憶部ＤＭＥＭ３に対する更新動作では、更新部ＵＰＰ３は、分岐命令による分岐が成立したときのみ、間隔記憶部ＤＭＥＭ３を更新してもよい。
【０１２５】
以上、この実施形態においても、図８−図１０で説明した実施形態と同様の効果を得ることができる。
【０１２６】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
分岐命令の結果を記憶する履歴記憶部を有し、前記履歴記憶部を参照して分岐予測を実施する予測部と、
前記分岐命令に対応して前記分岐命令の間隔を記憶する間隔記憶部と、
前記履歴記憶部を参照するタイミングを、前記間隔記憶部に記憶された前記分岐命令の間隔に基づいて決定する制御部と、
前記分岐命令の間隔を計測するカウンタと、
前記間隔記憶部の内容を、前記カウンタにより計測された前記分岐命令の間隔に基づいて更新する更新部と
を備えていることを特徴とする分岐予測装置。
（付記２）
前記更新部は、前記分岐命令が実行される度に、前記間隔記憶部の内容を更新すること
を特徴とする付記１記載の分岐予測装置。
（付記３）
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔と異なるとき、前記間隔記憶部の内容を更新すること
を特徴とする付記１記載の分岐予測装置。
（付記４）
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔より大きいとき、前記記憶されている前記分岐命令の間隔に基づいて参照されるアドレスに、前記計測に基づく前記分岐命令の間隔と前記記憶されている前記分岐命令の間隔との差分に基づいて算出される間隔を書き込むこと
を特徴とする付記１記載の分岐予測装置。
（付記５）
前記間隔記憶部は、前記分岐命令による分岐が成立したときの前記分岐命令の間隔と前記分岐命令による分岐が不成立のときの前記分岐命令の間隔との両方を記憶すること
を特徴とする付記１記載の分岐予測装置。
（付記６）
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔より小さいとき、前記間隔記憶部の内容を更新すること
を特徴とする付記１記載の分岐予測装置。
（付記７）
命令を解読する解読部と、分岐命令の分岐予測を実施する分岐予測装置とを備え、
前記分岐予測装置は、
分岐命令の結果を記憶する履歴記憶部を有し、前記履歴記憶部を参照して分岐予測を実施する予測部と、
前記分岐命令に対応して前記分岐命令の間隔を記憶する間隔記憶部と、
前記履歴記憶部を参照するタイミングを、前記間隔記憶部に記憶された前記分岐命令の間隔に基づいて決定する制御部と、
前記分岐命令の間隔を計測するカウンタと、
前記間隔記憶部の内容を、前記カウンタにより計測された前記分岐命令の間隔に基づいて更新する更新部と
を備えていることを特徴とするプロセッサ。
（付記８）
前記更新部は、前記分岐命令が実行される度に、前記間隔記憶部の内容を更新すること
を特徴とする付記７記載のプロセッサ。
（付記９）
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔と異なるとき、前記間隔記憶部の内容を更新すること
を特徴とする付記７記載のプロセッサ。
（付記１０）
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔より大きいとき、前記記憶されている前記分岐命令の間隔に基づいて参照されるアドレスに、前記計測に基づく前記分岐命令の間隔と前記記憶されている前記分岐命令の間隔との差分に基づいて算出される間隔を書き込むこと
を特徴とする付記７記載のプロセッサ。
（付記１１）
前記間隔記憶部は、前記分岐命令による分岐が成立したときの前記分岐命令の間隔と前記分岐命令による分岐が不成立のときの前記分岐命令の間隔との両方を記憶すること
を特徴とする付記７記載のプロセッサ。
（付記１２）
前記更新部は、前記カウンタの計測に基づく前記分岐命令の間隔が、前記間隔記憶部に記憶されている前記分岐命令の間隔より小さいとき、前記間隔記憶部の内容を更新すること
を特徴とする付記７記載のプロセッサ。
【０１２７】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１２８】
ＡＬＵ‥算術論理演算ユニット；ＢＰＲＥ１、ＢＰＲＥ２、ＢＰＲＥ３‥分岐予測装置；ＣＯＴ‥カウンタ；ＤＥＣ‥デコーダ；ＤＥＳＭ‥分岐先履歴メモリ；ＤＥＴ‥タグ判定部；ＤＩＲＭ‥方向履歴メモリ；ＤＭＥＭ１、ＤＭＥＭ２、ＤＭＥＭ３‥間隔記憶部；ＨＭＥＭ‥履歴記憶部；ＩＭＥＭ‥命令メモリ；ＰＣ‥プログラムカウンタ；ＰＣＮＴ１、ＰＣＮＴ２、ＰＣＮＴ３‥予測制御部；ＰＣＯＴ‥カウンタ；ＰＲＥＤ‥予測部；ＰＲＧ１、ＰＲＧ２、ＰＲＧ３‥パイプラインレジスタ；ＲＥＧ１、ＲＥＧ２、ＲＥＧ３‥レジスタ；ＲＰＤ‥レジスタリード部；ＳＥＬ‥選択部；ＵＣＮＴ１、ＵＣＮＴ２、ＵＣＮＴ３‥更新制御部；ＵＰＰ１、ＵＰＰ２、ＵＰＰ３‥更新部
【図１】
0005609609.tif 000002
【図２】
0005609609.tif 000003
【図３】
0005609609.tif 000004
【図４】
0005609609.tif 000005
【図５】
0005609609.tif 000006
【図６】
0005609609.tif 000007
【図７】
0005609609.tif 000008
【図８】
0005609609.tif 000009
【図９】
0005609609.tif 000010
【図１０】
0005609609.tif 000011
【図１１】
0005609609.tif 000012
【図１２】
0005609609.tif 000013
【図１３】
0005609609.tif 000014
【図１４】
0005609609.tif 000015
【図１５】
0005609609.tif 000016