(57)【要約】【課題】分岐先予測のヒット率を向上させることが可能なプロセッサ装置を提供する。【解決手段】同値判定回路ＤＪＧは、データキャッシュＤＣＣＨへのロード命令が発生する毎に、対応するラインからの前回のロードデータと今回のロードデータとの一致・不一致を判定する。判定履歴記録回路ＤＪＧＨＲは、Ｎビット領域ＳＲＥＧに、条件分岐命令が生じる前の同値判定回路ＤＪＧによるＮ回分の判定結果をそれぞれ履歴記録ＨＲとして記録する。分岐予測回路ＢＲＰＣは、条件分岐命令が生じた際に、Ｎビット領域ＳＲＥＧ内の履歴記録ＨＲに基づき、当該条件分岐命令の前回の実行結果によって得られる前回の分岐先と同じ分岐先か、または前回と異なる分岐先を予測し、当該予測分岐先の命令のフェッチ指示ＩＦＤをプロセッサ本体回路ＰＲＭＣへ発行する。【選択図】図２
2018200545.tif 000002
【特許請求の範囲】
【請求項１】
データキャッシュと、
前記データキャッシュへのロード命令が発生する毎に、前記ロード命令に対応するラインからの前回のロードデータと今回のロードデータとの一致・不一致を判定する同値判定回路と、
Ｎ（Ｎは１以上の整数）ビット領域に、条件分岐命令が生じる前の前記同値判定回路によるＮ回分の判定結果をそれぞれ履歴記録として記録する判定履歴記録回路と、
条件分岐命令が生じた際に、前記Ｎビット領域内の前記履歴記録に基づき、当該条件分岐命令の前回の実行結果によって得られる前回の分岐先と同じ第１の分岐先か、または前回と異なる第２の分岐先を予測し、当該予測分岐先の命令のフェッチ指示を発行する分岐予測回路と、
命令のフェッチ、デコードおよび実行を担い、条件分岐命令の実行に際し、前記分岐予測回路からの前記フェッチ指示に応じて前記予測分岐先の命令を予めフェッチし、当該条件分岐命令の今回の実行結果によって得られる今回の分岐先が前記予測分岐先と異なる場合には、前記予めフェッチした命令を無効化するプロセッサ本体回路と、
を有する、
プロセッサ装置。
【請求項２】
請求項１記載のプロセッサ装置において、
前記分岐予測回路は、前記Ｎビット領域内の前記履歴記録が共に一致を表す場合には前記第１の分岐先を予測し、前記Ｎビット領域内のいずれかの前記履歴記録が不一致を表す場合には前記第２の分岐先を予測する、
プロセッサ装置。
【請求項３】
請求項１記載のプロセッサ装置において、
前記データキャッシュは、前記今回のロードデータを記憶する第１のデータ記憶領域と、前記前回のロードデータを記憶する第２のデータ記憶領域とを備え、前記ロード命令に伴い、前記第１のデータ記憶領域から前記今回のロードデータをロードし、当該ロードデータで前記第２のデータ記憶領域を更新し、
前記同値判定回路は、前記ロード命令が発生する毎に、前記第１のデータ記憶領域のデータと前記第２のデータ記憶領域のデータとの一致・不一致を判定する、
プロセッサ装置。
【請求項４】
請求項１記載のプロセッサ装置において、
さらに、条件分岐命令の命令アドレスと、前記前回の分岐先の情報との対応関係が登録される分岐先バッファを有し、
前記分岐予測回路は、前記分岐先バッファを参照して前記第１の分岐先または前記第２の分岐先の命令アドレスを定める、
プロセッサ装置。
【請求項５】
請求項４記載のプロセッサ装置において、
さらに、前記前回の分岐先と前記今回の分岐先が同じ場合、前記Ｎビット領域内で前記履歴記録が不一致を表すビットをマスク対象ビットに定め、前記前回の分岐先と前記今回の分岐先が異なる場合、前記Ｎビット領域内で前記履歴記録が一致を表すビットをマスク対象ビットに定め、当該マスク対象ビットの情報を前記分岐先バッファに登録するバッファ更新回路を有し、
前記分岐予測回路は、前記Ｎビット領域の中から前記マスク対象ビットを除いたビットを予測対象ビットとして、前記予測対象ビットの前記履歴記録が共に一致を表す場合には前記第１の分岐先を予測し、前記予測対象ビットの前記履歴記録のいずれかが不一致を表す場合には前記第２の分岐先を予測する、
プロセッサ装置。
【請求項６】
データキャッシュと、
前記データキャッシュへのロード命令が発生する毎に、前記ロード命令に対応するラインからの前回のロードデータと今回のロードデータとの一致・不一致を判定する同値判定回路と、
Ｎ（Ｎは２以上の整数）ビット領域に、条件分岐命令が生じる前の前記同値判定回路によるＮ回分の判定結果をそれぞれ履歴記録として記録する判定履歴記録回路と、
条件分岐命令が生じた際に、前記Ｎビット領域の中から履歴マスクによって定められるマスク対象ビットを除いた予測対象ビットの前記履歴記録に基づき、当該条件分岐命令の前回の実行結果によって得られる前回の分岐先と同じ第１の分岐先か、または前回と異なる第２の分岐先を予測し、当該予測分岐先の命令のフェッチ指示を発行する分岐予測回路と、
条件分岐命令の命令アドレスと、前記前回の分岐先の情報と、前記履歴マスクとの対応関係が登録される分岐先バッファと、
条件分岐命令が生じた際に前記分岐先バッファを更新するバッファ更新回路と、
命令のフェッチ、デコードおよび実行を担い、条件分岐命令の実行に際し、前記分岐予測回路からの前記フェッチ指示に応じて前記予測分岐先の命令を予めフェッチし、当該条件分岐命令の実行結果によって得られる今回の分岐先が前記予測分岐先と異なる場合には、前記予めフェッチした命令を無効化するプロセッサ本体回路と、
を有する、
プロセッサ装置。
【請求項７】
請求項６記載のプロセッサ装置において、
前記履歴マスクは、履歴アンドマスクを含み、
前記分岐予測回路は、前記履歴アンドマスクを反映した前記予測対象ビットの前記履歴記録が共に一致を表す場合には前記第１の分岐先を予測する、
プロセッサ装置。
【請求項８】
請求項７記載のプロセッサ装置において、
前記バッファ更新回路は、前記前回の分岐先と前記今回の分岐先が同じ場合、前記予測対象ビット内で前記履歴記録が不一致を表すビットが次回の前記マスク対象ビットとなるように前記履歴アンドマスクを更新する、
プロセッサ装置。
【請求項９】
請求項６記載のプロセッサ装置において、
前記履歴マスクは、履歴オアマスクを含み、
前記分岐予測回路は、前記履歴オアマスクに基づく前記予測対象ビットの前記履歴記録の内、少なくとも一つが一致を表す場合には前記第１の分岐先を予測する、
プロセッサ装置。
【請求項１０】
請求項９記載のプロセッサ装置において、
前記バッファ更新回路は、前記前回の分岐先と前記今回の分岐先が同じ場合、前記予測対象ビット内で前記履歴記録が不一致を表すビットが次回の前記マスク対象ビットとなり、前記マスク対象ビット内で前記履歴記録が不一致を表すビットが次回の前記予測対象ビットとなるように前記履歴オアマスクを更新する、
プロセッサ装置。
【請求項１１】
請求項９記載のプロセッサ装置において、
前記バッファ更新回路は、前記前回の分岐先と前記今回の分岐先が異なる場合、前記Ｎビット領域内で前記履歴記録が不一致を表すビットが次回の前記予測対象ビットとなるように前記履歴オアマスクを更新する、
プロセッサ装置。
【請求項１２】
請求項６記載のプロセッサ装置において、
前記履歴マスクは、履歴アンドマスクと履歴オアマスクとを含み、
前記分岐予測回路は、前記履歴アンドマスクに基づく前記予測対象ビットの前記履歴記録が共に一致を表す場合には前記第１の分岐先を予測し、前記履歴オアマスクに基づく前記予測対象ビットの前記履歴記録の内、少なくとも一つが一致を表す場合には前記第１の分岐先を予測し、前記履歴アンドマスクを用いた分岐予測と前記履歴オアマスクを用いた分岐予測の両方で前記第１の分岐先を予測しない場合には前記第２の分岐先を予測する、
プロセッサ装置。
【請求項１３】
請求項１２記載のプロセッサ装置において、
前記バッファ更新回路は、成立側無効アンドマスクと成立側無効オアマスクの両方で重複して記録されるビットを、前記履歴アンドマスクと前記履歴オアマスクの両方の前記マスク対象ビットに定めるように前記履歴アンドマスクと前記履歴オアマスクを更新し、
前記成立側無効アンドマスクで記録されるビットは、前記前回の分岐先と前記今回の分岐先が共に分岐成立時の分岐先である場合に、前記Ｎビット領域内で前記履歴記録が不一致を表すビットであり、
前記成立側無効オアマスクで記録されるビットは、前記前回の分岐先が前記分岐成立時の分岐先であり、前記今回の分岐先が分岐非成立時の分岐先である場合に、前記Ｎビット領域内で前記履歴記録が一致を表すビットである、
プロセッサ装置。
【請求項１４】
請求項１２記載のプロセッサ装置において、
前記バッファ更新回路は、非成立側無効アンドマスクと非成立側無効オアマスクの両方で重複して記録されるビットを、前記履歴アンドマスクと前記履歴オアマスクの両方の前記マスク対象ビットに定めるように前記履歴アンドマスクと前記履歴オアマスクを更新し、
前記非成立側無効アンドマスクで記録されるビットは、前記前回の分岐先と前記今回の分岐先が共に分岐非成立時の分岐先である場合に、前記Ｎビット領域内で前記履歴記録が不一致を表すビットであり、
前記非成立側無効オアマスクで記録されるビットは、前記前回の分岐先が前記分岐非成立時の分岐先であり、前記今回の分岐先が分岐成立時の分岐先である場合に、前記Ｎビット領域内で前記履歴記録が一致を表すビットである、
プロセッサ装置。
【請求項１５】
請求項１２記載のプロセッサ装置において、
前記バッファ更新回路は、前記前回の分岐先と前記今回の分岐先が異なる場合、前記履歴オアマスクに基づく前記予測対象ビット内で前記履歴記録が不一致を表すビットが次回の前記履歴アンドマスクに基づく前記予測対象ビットとなるように前記履歴アンドマスクを更新する、
プロセッサ装置。
【請求項１６】
データ記憶領域および同値判定結果領域を備えるデータキャッシュと、
前記データキャッシュへのストア命令が発生する毎に、前記ストア命令に伴うストアデータと、前記ストア命令に対応するラインの前記データ記憶領域のデータとの一致・不一致を判定し、当該判定結果および前記ストアデータをそれぞれ前記ラインの前記同値判定結果領域および前記データ記憶領域に格納するストア制御回路と、
前記データキャッシュへのロード命令が発生する毎に、前記ロード命令に対応するラインの前記同値判定結果領域に格納された前記判定結果を読み出すロード制御回路と、
Ｎ（Ｎは１以上の整数）ビット領域に、条件分岐命令が生じる前の前記ロード制御回路からのＮ回分の前記判定結果をそれぞれ履歴記録として記録する判定履歴記録回路と、
条件分岐命令が生じた際に、前記Ｎビット領域内の前記履歴記録に基づき、当該条件分岐命令の前回の実行結果によって得られる前回の分岐先と同じ第１の分岐先か、または前回と異なる第２の分岐先を予測し、当該予測分岐先の命令のフェッチ指示を発行する分岐予測回路と、
命令のフェッチ、デコードおよび実行を担い、条件分岐命令の実行に際し、前記分岐予測回路からの前記フェッチ指示に応じて前記予測分岐先の命令を予めフェッチし、当該条件分岐命令の今回の実行結果によって得られる今回の分岐先が前記予測分岐先と異なる場合には、前記予めフェッチした命令を無効化するプロセッサ本体回路と、
を有する、
プロセッサ装置。
【請求項１７】
請求項１６記載のプロセッサ装置において、
前記分岐予測回路は、前記Ｎビット領域内の前記履歴記録が共に一致を表す場合には前記第１の分岐先を予測し、前記Ｎビット領域内のいずれかの前記履歴記録が不一致を表す場合には前記第２の分岐先を予測する、
プロセッサ装置。
【請求項１８】
請求項１６記載のプロセッサ装置において、
さらに、条件分岐命令の命令アドレスと、前記前回の分岐先の情報との対応関係が登録される分岐先バッファを有し、
前記分岐予測回路は、前記分岐先バッファを参照して前記第１の分岐先または前記第２の分岐先の命令アドレスを定める、
プロセッサ装置。
【請求項１９】
請求項１８記載のプロセッサ装置において、
さらに、前記前回の分岐先と前記今回の分岐先が同じ場合、前記Ｎビット領域内で前記履歴記録が不一致を表すビットをマスク対象ビットに定め、前記前回の分岐先と前記今回の分岐先が異なる場合、前記Ｎビット領域内で前記履歴記録が一致を表すビットをマスク対象ビットに定め、当該マスク対象ビットの情報を前記分岐先バッファに登録するバッファ更新回路を有し、
前記分岐予測回路は、前記Ｎビット領域の中から前記マスク対象ビットを除いたビットを予測対象ビットとして、前記予測対象ビットの前記履歴記録が共に一致を表す場合には前記第１の分岐先を予測し、前記予測対象ビットの前記履歴記録のいずれかが不一致を表す場合には前記第２の分岐先を予測する、
プロセッサ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ装置に関し、例えば、分岐先予測機能を搭載したプロセッサ装置に関する。
【背景技術】
【０００２】
例えば、特許文献１には、メモリリード命令でありかつメモリからのリードデータがキャッシュデータと異なる場合にフラグをセットするフラグ設定付きメモリリード命令と、当該フラグをリセットするフラグリセット命令と、当該フラグの値に基づいて分岐有無を定めるフラグ参照分岐命令とに対応したマイクロプロセッサが示される。ある処理の前の入力値と今回の入力値との比較結果に応じて当該処理の実行をスキップするようなプログラムを構築する場合、これらの命令を適宜用いることで入力値の比較をフラグで行うことができるため、処理の効率化が図れる。
【０００３】
また、非特許文献１には、複数のエントリを備える分岐先バッファを用いて分岐先予測を行う方式が示される。各エントリには、条件分岐命令のアドレスとなる命令アドレスと、当該条件分岐命令の次のＰＣ（Program Counter）として予測される命令アドレスとなる予測ＰＣと、当該条件分岐命令を成立と予測するか否かの情報となる分岐成否予測とが登録される。発生した条件分岐命令がエントリに存在する場合、予測ＰＣが前もってフェッチされ、その後、実際の分岐結果が予測と異なる場合には、フェッチ済み命令の無効化と共に正しい命令の再フェッチが行われ、併せて、エントリの更新も行われる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１４１６１９号公報
【非特許文献】
【０００５】
【非特許文献１】ヘネシー＆パターソン著、“コンピュータアーキテクチャ  定量的アプローチ  第５版”、翔泳社、２０１４／３／１８、ｐ．１９８−２００
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来より、分岐先予測機能を搭載したプロセッサ装置が知られている。分岐先予測とは、条件分岐命令が生じた際に当該条件分岐命令の分岐先アドレスを事前に予測し、予測した分岐先アドレスの命令を前もってフェッチする技術である。予測が高確率でヒットする場合には、命令パイプラインを効率的に使用することが可能になる。分岐先予測の方式として、例えば、非特許文献１に示されるような分岐先バッファを用いる方式が知られている。当該方式は、概略的には、条件分岐命令が生じた場合に、当該条件分岐命令の前回の分岐結果（すなわち分岐先アドレス）と同じ分岐結果を予測する方式である。
【０００７】
例えば、科学計算などで行われる行列計算などは、多数回のループ処理が行われる場合が多く、非特許文献１のような方式を用いることで、分岐先予測のヒット率を高めることが可能となる。しかし、例えば、有限オートマトン（ステートマシン）による機械制御等では、ループ処理を行うか否かが外部からの制御信号に応じて定められるような場合が多くなる。このような場合では、多数回のループ処理が生じるとは限らず、非特許文献１のような方式では、分岐先予測のヒット率が低下する恐れがある。
【０００８】
後述する実施の形態は、このようなことを鑑みてなされたものであり、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
一実施の形態によるプロセッサ装置は、データキャッシュと、同値判定回路と、判定履歴記録回路と、分岐予測回路と、命令のフェッチ、デコードおよび実行を担うプロセッサ本体回路とを有する。同値判定回路は、データキャッシュへのロード命令が発生する毎に、対応するラインからの前回のロードデータと今回のロードデータとの一致・不一致を判定する。判定履歴記録回路は、Ｎビット領域に、条件分岐命令が生じる前の同値判定回路によるＮ回分の判定結果をそれぞれ履歴記録として記録する。分岐予測回路は、条件分岐命令が生じた際に、Ｎビット領域内の履歴記録に基づき、当該条件分岐命令の前回の実行結果によって得られる前回の分岐先と同じ分岐先か、または前回と異なる分岐先を予測し、当該予測分岐先の命令のフェッチ指示をプロセッサ本体回路へ発行する。
【発明の効果】
【００１０】
前記一実施の形態によれば、分岐先予測のヒット率を向上させることが可能になる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態１による半導体装置の構成例を示す概略図である。
【図２】図１におけるプロセッサユニットの主要部の簡略的な構成例および動作例を示す図である。
【図３Ａ】図２に履歴マスク機能を追加したプロセッサユニットの主要部の簡略的な構成例および動作例を示す図である。
【図３Ｂ】図２に履歴マスク機能を追加したプロセッサユニットの主要部の簡略的な構成例および動作例を示す図である。
【図３Ｃ】図２に履歴マスク機能を追加したプロセッサユニットの主要部の簡略的な構成例および動作例を示す図である。
【図４】図１におけるプロセッサユニットの詳細な構成例を示すブロック図である。
【図５】図４におけるデータキャッシュの詳細な構成例を示すブロック図である。
【図６】図４における分岐先バッファ周りの詳細な構成例を示すブロック図である。
【図７】図５におけるストア制御回路の処理内容の一例を示すフロー図である。
【図８】図５におけるロード制御回路の処理内容の一例を示すフロー図である。
【図９】図５における同値判定回路および判定履歴記録回路の処理内容の一例を示すフロー図である。
【図１０】図６における分岐予測回路の処理内容の一例を示すフロー図である。
【図１１】図６における分岐実行回路およびバッファ更新回路の処理内容の一例を示すフロー図である。
【図１２】本発明の実施の形態２によるプロセッサユニットにおいて、図４のデータキャッシュの詳細な構成例を示すブロック図である。
【図１３】図１２におけるストア制御回路の処理内容の一例を示すフロー図である。
【図１４】図１２におけるロード制御回路の処理内容の一例を示すフロー図である。
【図１５】本発明の実施の形態３によるプロセッサユニットにおいて、図４における分岐先バッファ周りの詳細な構成例を示すブロック図である。
【図１６】図１５における分岐予測回路の処理内容の一例を示すフロー図である。
【図１７】図１５における分岐実行回路およびバッファ更新回路の処理内容の一例を示すフロー図である。
【図１８】図１７におけるマスク更新処理の処理内容の一例を示すフロー図である。
【図１９】図１８の補足図であり、分岐に無関係な変数を排除する仕組みを示す説明図である。
【図２０】図１５のプロセッサユニットを用いた条件分岐プログラムの実行経過の一例を示す図である。
【図２１】本発明の比較例となるプロセッサユニットの主要部の構成例を示す概略図である。
【図２２】図２１の動作例を示すフロー図である。
【図２３】プロセッサユニットが実行するソースコードおよびそれに対応する命令コードの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらは互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良い。
【００１３】
さらに、以下の実施の形態において、その構成要素（要素ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【００１４】
また、実施の形態の各機能ブロックを構成する回路素子は、特に制限されないが、公知のＣＭＯＳ（相補型ＭＯＳトランジスタ）等の集積回路技術によって、単結晶シリコンのような半導体基板上に形成される。
【００１５】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００１６】
（実施の形態１）
《半導体装置の構成》
図１は、本発明の実施の形態１による半導体装置の構成例を示す概略図である。図１に示す半導体装置ＤＥＶは、例えば、一つ半導体チップで構成されるマイクロコントローラ等である。当該半導体装置ＤＥＶは、プロセッサ回路ＰＲＣ、命令キャッシュＩＣＣＨおよびデータキャッシュＤＣＣＨを含むプロセッサユニット（プロセッサ装置）ＰＲＵと、メモリＭＥＭと、各種周辺ユニットと、これらの各ユニット間の通信を制御し、バスおよびその調停回路等を含むバスコントローラＢＳＣとを備える。各種周辺ユニットには、例えば、タイマ回路ＴＭＲ、シリアルＩＯ（Input Output）回路ＳＩＯ、パラレルＩＯ回路ＰＩＯ、ＡＤ（Analog to Digital）コンバータＡＤＣ等が含まれる。
【００１７】
命令キャッシュＩＣＣＨおよびデータキャッシュＤＣＣＨは、ＳＲＡＭ（Static Random Access Memory）等の高速メモリで構成される。メモリＭＥＭは、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性メモリやフラッシュメモリ等の不揮発性メモリであり、主に、プロセッサ回路ＰＲＣで実行されるプログラム（命令）およびそれに伴う各種データ等を保持する。プロセッサ回路ＰＲＣは、当該メモリＭＥＭ上のプログラムおよび各種データを、適宜、命令キャッシュＩＣＣＨおよびデータキャッシュＤＣＣＨに取り込みながら、所定のプログラム処理を実行する。
【００１８】
タイマ回路ＴＭＲは、プログラム等からの指示に基づき所定の時間を計測する。シリアルＩＯ回路ＳＩＯは、装置外部との間でシリアルデータを送受信する際の制御を担い、パラレルＩＯ回路ＰＩＯは、装置外部との間でパラレルデータを送受信する際の制御を担う。ＡＤコンバータＡＤＣは、外部から入力されたアナログデータをディジタルデータに変換する。なお、メモリＭＥＭは、装置外部に搭載されることもあり、場合によっては、命令キャッシュＩＣＣＨおよびデータキャッシュＤＣＣＨを含めて、装置外部に搭載されることもある。
【００１９】
このような半導体装置ＤＥＶは、例えば、有限オートマトン（ステートマシン）による機械制御等で用いられる場合が多い。図１の例では、パラレルＩＯ回路ＰＩＯは、装置外部に設けられるスイッチＳＷに結合され、ＡＤコンバータＡＤＣは、装置外部に設けられるセンサＳＥＮに結合される。例えば、パラレルＩＯ回路ＰＩＯは、スイッチＳＷのオン・オフ状況をメモリマップドＩＯ等に格納し、ＡＤコンバータＡＤＣは、センサＳＥＮの検出結果に基づくディジタルデータをメモリマップドＩＯ等に格納する。
【００２０】
メモリマップドＩＯは、広く知られているように、プロセッサユニットＰＲＵから見たメモリアドレス空間上に、メモリＭＥＭのアドレス空間と各種周辺ユニットのアドレス空間を共存させる方式である。プロセッサユニットＰＲＵは、プログラムによってステートマシンの処理を実行する。具体的には、例えば、プロセッサユニットＰＲＵは、このようなメモリマップドＩＯのデータに応じてステートマシンの状態を遷移させ、データが変わらない場合には、ある状態に留まって対応するループ処理を実行する、といったようなプログラム処理を行う。
【００２１】
《プロセッサユニット（比較例）の主要部の概要》
まず、実施の形態のプロセッサユニットの説明に先だって、比較例となるプロセッサユニットについて説明する。図２１は、本発明の比較例となるプロセッサユニットの主要部の構成例を示す概略図である。プロセッサユニットは、分岐先予測機能を備える場合があり、図２１には、当該分岐先予測機能を実現するための模式的な構成が示される。図２１の例では、分岐先バッファＢＲＢＦが設けられることで、分岐先予測機能が実現される。分岐先バッファＢＲＢＦは、複数（ここではｎ個）のエントリを備え、各エントリは、命令アドレス領域ＩＡＤＲ＿ＡＲと、分岐先アドレス領域ＢＲＡＤＲ＿ＡＲと、分岐成否予測領域ＢＲＰ＿ＡＲとを備える。
【００２２】
命令アドレス領域ＩＡＤＲ＿ＡＲには、条件分岐命令の命令アドレスＩＡＤＲが登録される。分岐先アドレス領域ＢＲＡＤＲ＿ＡＲには、当該条件分岐命令の分岐先として予測される命令アドレス（明細書では、分岐先アドレス（予測）ＢＲＡＤＲｐと呼ぶ）が登録される。分岐成否予測領域ＢＲＰ＿ＡＲには、当該条件分岐命令を分岐成立と予測するか分岐非成立と予測するかの情報（明細書では分岐成否予測ＢＲＰと呼ぶ）が登録される。
【００２３】
図２２は、図２１の動作例を示すフロー図である。図２２において、プロセッサユニットは、まず、命令フェッチ用ＰＣ（Program Counter）をメモリに送信する（すなわち命令フェッチ用ＰＣに格納される命令をフェッチする）と共に分岐先バッファＢＲＢＦにも送信する（ステップＳ１１００）。分岐先バッファＢＲＢＦは、命令アドレス領域ＩＡＤＲ＿ＡＲに、送信されたＰＣと同じ値（すなわち同じ命令アドレスＩＡＤＲ）が登録されているエントリが有るか否かを検索する（ステップＳ１１０１）。
【００２４】
エントリが無い場合、プロセッサユニットは、フェッチした命令が条件分岐命令であるか否かを判定する（ステップＳ１１０２）。プロセッサユニットは、条件分岐命令で無い場合、通常通りに命令を実行する（ステップＳ１１０３）。一方、プロセッサユニットは、条件分岐命令で有る場合、分岐先バッファＢＲＢＦに、当該条件分岐命令の命令アドレスＩＡＤＲを登録する。加えて、プロセッサユニットは、当該条件分岐命令の実行結果によって得られる分岐先の命令アドレス（明細書では、分岐先アドレス（結果）ＢＲＡＤＲｒと呼ぶ）および分岐成否結果を、それぞれ、分岐先アドレス（予測）ＢＲＡＤＲｐおよび分岐成否予測ＢＲＰとして登録する（ステップＳ１１０４）。
【００２５】
一方、ステップＳ１１０１において、分岐先バッファＢＲＢＦにエントリが有る場合、分岐先バッファＢＲＢＦは、予測される分岐先として、当該エントリに登録される分岐先アドレス（予測）ＢＲＡＤＲｐを送信する（ステップＳ１１０５）。これに応じて、プロセッサユニットは、当該分岐先アドレス（予測）ＢＲＡＤＲｐの命令を前もってフェッチする（ステップＳ１１０５）。次いで、プロセッサユニットは、条件分岐命令の実行結果によって得られる分岐先アドレス（結果）ＢＲＡＤＲｒがステップＳ１１０５の分岐先アドレス（予測）ＢＲＡＤＲｐと一致するか否かを判定する（ステップＳ１１０６）。
【００２６】
一致する場合には、予測ヒットであり、プロセッサユニットは、ステップＳ１１０５で前もってフェッチした命令をストールすることなく実行する（ステップＳ１１０８）。一方、不一致の場合、予測ミスであり、プロセッサユニットは、ステップＳ１１０５で前もってフェッチした命令を無効化し、分岐先アドレス（結果）ＢＲＡＤＲｒに格納される正しい命令を再フェッチする（ステップＳ１１０７）。また、ステップＳ１１０７において、プロセッサユニットは、対象のエントリの分岐先アドレス（予測）ＢＲＡＤＲｐおよび分岐成否予測ＢＲＰを、それぞれ、分岐先アドレス（結果）ＢＲＡＤＲｒおよび分岐成否結果でそれぞれ更新する。
【００２７】
ここで、ステップＳ１１０６で予測ミスが発生した場合、ＩＦ（Instruction Fetch）、ＩＤ（Instruction Decode）、ＥＸ（EXecution）をパイプラインで処理するプロセッサユニットでは、再フェッチに伴いパイプラインのストールが生じ、次の命令が実行されるまでに数クロック（例えば、ＩＦとＩＤで２クロック）を要することになる。このように、予測ミスが高頻度で生じると、パイプラインのストールに伴いプロセッサユニットの速度性能（ＭＩＰＳ：Million Instructions Per Second）が低下するため、分岐先予測のヒット率を向上させることが求められる。
【００２８】
《プロセッサユニット（比較例）の問題点》
図２３は、プロセッサユニットが実行するソースコードおよびそれに対応する命令コードの一例を示す図である。図２３に示すソースコードＳＣＤは、メモリアドレス“ＩＯ２”のデータが０になるまで、メモリアドレス“ＩＯ１”のデータを取得し続けるというものである。当該ソースコードＳＣＤは、コンパイラによって図２３に示されるような命令コードＩＣＤに変換されたのち、図１のメモリＭＥＭに格納される。
【００２９】
例えば、メモリアドレス“ＩＯ２”は、図１で述べたスイッチＳＷのオン・オフ状況を保持するメモリマップドＩＯに対応し、メモリアドレス“ＩＯ１”は、図１で述べたセンサＳＥＮの検出結果を保持するメモリマップドＩＯに対応する。この場合、プロセッサユニットは、図２３の命令コードＩＣＤに基づき、スイッチＳＷのオン期間でループ処理を用いてセンサＳＥＮの検出結果が逐次取り込み、スイッチＳＷがオフになるとループ処理を抜けるような処理を実行する。
【００３０】
ここで、例えば、スイッチＳＷがオフからオンに遷移し、当該オン期間が十分に長く保たれるような状況を前提として、プロセッサユニットが、図２１および図２２に示したような分岐先予測機能を用いて図２３の命令コードＩＣＤを実行する場合を想定する。この場合、プロセッサユニットは、まず、１回目のループ処理に伴い、分岐先バッファＢＲＢＦに、図２３の命令コードＩＣＤ内の条件分岐命令となる命令アドレスＩＡＤＲ“４”と、その実行結果によって得られる分岐先アドレス（結果）ＢＲＡＤＲｒ（ここでは“１”）および分岐成否結果（ここでは“成立”）とを登録する（ステップＳ１１０４）。
【００３１】
次いで、プロセッサユニットは、２回目のループ処理の中で命令アドレスＩＡＤＲ“４”の条件分岐命令を実行する際に、分岐先バッファＢＲＢＦに基づき、分岐先アドレス（予測）ＢＲＡＤＲｐ“１”の命令を前もってフェッチする（ステップＳ１１０５）。スイッチＳＷのオン期間が十分に長い場合、当該条件分岐命令の実行結果によって得られる分岐先アドレス（結果）ＢＲＡＤＲｒは分岐先アドレス（予測）ＢＲＡＤＲｐ“１”に一致する。このため、プロセッサユニットは、前もってフェッチした命令を活用して、パイプラインをストールさせることなく３回目のループ処理を実行する（ステップＳ１１０６，Ｓ１１０８）。以降も同様して、プロセッサユニットは、パイプラインをストールさせることなく、ループ処理を繰り返し実行することができる。
【００３２】
このように、図２１および図２２の分岐先予測機能は、条件分岐命令が生じた場合に、当該条件分岐命令の前回の実行結果（すなわち分岐先アドレス（結果）ＢＲＡＤＲｒ）と同じ実行結果を予測する方式である。そのため、多数回のループ処理が実行される場合には、分岐先予測のヒット率を高めることが可能である。しかし、例えば、図１の半導体装置ＤＥＶを機械制御のシステム等に適用する場合、その用途によっては、スイッチＳＷのオン・オフ状況が短期間で頻繁に切り替わることがある。
【００３３】
この場合、例えば、前述した２回目のループ処理等で予測ミスが発生し（すなわち、分岐先アドレス（結果）ＢＲＡＤＲｒは“５”であり）、当該分岐先アドレス（結果）ＢＲＡＤＲｒ“５”の命令の再フェッチに伴いパイプラインのストールが発生する。例えば、プロセッサユニットが図２３の命令コードＩＣＤを定期的に実行するような場合、ストールの発生頻度が高まるため、プロセッサユニットの速度性能が低下する恐れがある。
【００３４】
《プロセッサユニット（実施の形態１）の主要部の概要》
図２は、図１におけるプロセッサユニットの主要部の簡略的な構成例および動作例を示す図である。図２には、図１のプロセッサユニットＰＲＵにおけるプロセッサ回路ＰＲＣおよびデータキャッシュＤＣＣＨの構成に加えて、プロセッサ回路ＰＲＣによって実行される命令コードＩＣＤ１と、当該命令コードＩＣＤ１の実行経過とが簡略的に示される。
【００３５】
データキャッシュＤＣＣＨは、複数のエントリを備え、各エントリは、タグ領域およびライン領域を備える。タグ領域には、メモリアドレスが登録され、ライン領域には、当該メモリアドレスのデータが登録される。例えば、図２のデータキャッシュＤＣＣＨでは、タグ領域に、メモリマップドＩＯに基づくメモリアドレス“ＩＯ１”および“ＩＯ２”が登録される。この場合、“ＩＯ１”および“ＩＯ２”にそれぞれ対応する各ライン領域のデータは、実効的に、プロセッサ回路ＰＲＣのストア命令を介さずに変更可能となっている。言い換えれば、プロセッサ回路ＰＲＣが関与しない状態で、変更可能となっている。
【００３６】
具体的には、例えば、図１のパラレルＩＯ回路ＰＩＯは、メモリマップドＩＯに基づくメモリアドレスにデータを書き込んだ場合、バスコントローラＢＳＣを介してデータキャッシュＤＣＣＨへ当該メモリアドレスのインバリッド命令を発行する。データキャッシュＤＣＣＨは、インバリッド命令を受信した場合、当該インバリッド命令に伴うメモリアドレスがタグ領域に登録されている場合には、対応するライン領域をインバリッド状態に設定する。プロセッサ回路ＰＲＣが当該インバリッド状態のライン領域に対してロード命令を発行した場合、当該ライン領域は、メモリＭＥＭからロードした最新のデータで書き換えられ、バリッド状態となる。このようにして、“ＩＯ１”および“ＩＯ２”の各ライン領域のデータは、プロセッサ回路ＰＲＣのストア命令を介さずに変更される。
【００３７】
命令コードＩＣＤ１では、ループ処理の中で、メモリアドレス“ＩＯ１”および“ＩＯ２”のデータを順にロードしたのち、当該“ＩＯ１”および“ＩＯ２”のロードデータをパラメータとする関数“ＸＸ”を演算し、その演算結果が非０の間はループ処理を繰り返すといった処理内容が規定される。当該命令コードＩＣＤ１は、詳細には、例えば図２３に示したように、適宜、レジスタ等へのアクセスも含むが、これらは、説明を簡略化するため省略されている。
【００３８】
プロセッサ回路ＰＲＣは、同値判定回路ＤＪＧと、判定履歴記録回路ＤＪＧＨＲと、分岐予測回路ＢＲＰＣと、プロセッサ本体回路ＰＲＭＣと、分岐先バッファＢＲＢＦとを備える。同値判定回路ＤＪＧは、データキャッシュＤＣＣＨへのロード命令が発生する毎に、当該ロード命令に対応するライン領域からの前回のロードデータと今回のロードデータとの一致・不一致を判定する。判定履歴記録回路ＤＪＧＨＲは、例えば、Ｎビット（この例ではＮ＝２）のシフトレジスタによって構成される履歴ビット領域（Ｎビット領域）ＳＲＥＧを備える。判定履歴記録回路ＤＪＧＨＲは、履歴ビット領域ＳＲＥＧに、条件分岐命令が生じる前の同値判定回路ＤＪＧによるＮ回分の判定結果をそれぞれ履歴記録ＨＲとして記録する。
【００３９】
図２の例では、同値判定回路ＤＪＧは、時刻ｔ１における命令アドレスＩＡＤＲ“１”のロード命令に伴う前回のロードデータ（ここでは“Ｄ１”）と、時刻ｔ５における同じく命令アドレスＩＡＤＲ“１”のロード命令に伴う今回のロードデータ（ここでは“Ｄ１”）との一致・不一致を判定する。また、同値判定回路ＤＪＧは、時刻ｔ２における命令アドレスＩＡＤＲ“２”のロード命令に伴う前回のロードデータ（ここでは“Ｄ２”）と、時刻ｔ６における同じく命令アドレスＩＡＤＲ“２”のロード命令に伴う今回のロードデータ（ここでは“Ｄ２”）との一致・不一致を判定する。ここで、明細書では、ロードデータの参照先（例えば“ＩＯ１”，“ＩＯ２”）を変数と称し、ロードデータを変数値と称す。
【００４０】
判定履歴記録回路ＤＪＧＨＲは、２ビットの履歴ビット領域ＳＲＥＧに、当該同値判定回路ＤＪＧによる２回分の判定結果をそれぞれ履歴記録ＨＲとして記録する。図２の例では、当該履歴ビット領域ＳＲＥＧの２ビットの履歴記録ＨＲは、共に‘Ｔ’（前回と一致）を表す。なお、履歴ビット領域ＳＲＥＧのビット数（すなわち条件分岐命令発生前の何回分のロード命令に対する同値判定結果を記録するか）は、適宜定めることが可能であり、場合によっては、設定によって可変制御できるように構成することも可能である。
【００４１】
分岐予測回路ＢＲＰＣは、条件分岐命令が生じた際に、履歴ビット領域ＳＲＥＧ内の履歴記録ＨＲに基づき、当該条件分岐命令の前回の実行結果によって得られる前回の分岐先と同じ分岐先か、または前回と異なる分岐先を予測し、当該予測分岐先の命令のフェッチ指示ＩＦＤを発行する。具体的には、分岐予測回路ＢＲＰＣは、履歴ビット領域ＳＲＥＧ内の履歴記録ＨＲが共に‘Ｔ’（前回と一致）を表す場合には前回と同じ分岐先を予測し、いずれかの履歴記録ＨＲが‘Ｆ’（前回と不一致）を表す場合には前回と異なる分岐先を予測する。
【００４２】
図２の例では、分岐予測回路ＢＲＰＣは、時刻ｔ８における命令アドレスＩＡＤＲ“４”の条件分岐命令が発生した際に、履歴ビット領域ＳＲＥＧを参照する。分岐予測回路ＢＲＰＣは、履歴ビット領域ＳＲＥＧに基づく履歴記録ＨＲが２回共に一致を表しているため（すなわち（Ｔ，Ｔ）であるため）、同じく命令アドレスＩＡＤＲ“４”の条件分岐命令の前回の実行結果によって得られる分岐先（すなわち時刻ｔ４における分岐先の命令アドレスＩＡＤＲ“１”）と同じ分岐先を予測する。そして、分岐予測回路ＢＲＰＣは、当該予測分岐先の命令のフェッチ指示ＩＦＤをプロセッサ本体回路ＰＲＭＣへ発行する。
【００４３】
プロセッサ本体回路ＰＲＭＣは、広く知られているように、命令のフェッチ、デコードおよび実行等を担う回路であり、これらをパイプラインで処理する回路となっている。その動作の一つとして、プロセッサ本体回路ＰＲＭＣは、条件分岐命令の実行に際し、分岐予測回路ＢＲＰＣからのフェッチ指示ＩＦＤに応じて、予測分岐先の命令（ここでは、命令アドレスＩＡＤＲ“１”の命令）を予めフェッチする。ここで、プロセッサ本体回路ＰＲＭＣは、仮に、当該条件分岐命令の今回の実行結果によって得られる分岐先が予測分岐先と異なる場合には、当該予めフェッチした命令を無効化し、正しい命令（例えば命令アドレスＩＡＤＲ“５”の命令）を再フェッチする。
【００４４】
分岐先バッファＢＲＢＦには、図２１の場合と同様に、条件分岐命令の命令アドレスＩＡＤＲと、プロセッサ本体回路ＰＲＭＣによる当該条件分岐命令の実行結果に基づく前回の分岐先の情報との対応関係が登録される。この例では、分岐先バッファＢＲＢＦには、時刻ｔ４の条件分岐命令の実行結果に基づき、命令アドレスＩＡＤＲ“４”と、分岐先アドレスＢＲＡＤＲ“１”および分岐成否予測ＢＲＰ“成立”との対応関係が登録される。
【００４５】
分岐予測回路ＢＲＰＣは、時刻ｔ８の条件分岐命令に伴い、前回と同じ分岐先を予測する際には、当該分岐先の情報を分岐先バッファＢＲＢＦから取得し、取得した分岐先アドレスＢＲＡＤＲを分岐先アドレス（予測）ＢＲＡＤＲｐとして、そのフェッチ指示ＩＦＤを発行する。一方、分岐予測回路ＢＲＰＣは、仮に、前回と異なる分岐先を予測する場合、分岐先アドレス（予測）ＢＲＡＤＲｐを別途定める。
【００４６】
具体的には、分岐予測回路ＢＲＰＣは、分岐先バッファＢＲＢＦに分岐先アドレスＢＲＡＤＲ“１”および分岐成否予測ＢＲＰ“成立”が登録されている場合で前回と異なる分岐先を予測する場合、分岐成否を“非成立”と予測し、対応する分岐先アドレス（予測）ＢＲＡＤＲｐ（ここでは“５”）を定める。また、分岐予測回路ＢＲＰＣは、分岐先バッファＢＲＢＦに分岐先アドレスＢＲＡＤＲ“５”および分岐成否予測ＢＲＰ“非成立”が登録されている場合で前回と異なる分岐先を予測する場合、分岐成否を“成立”と予測し、対応する分岐先アドレス（予測）ＢＲＡＤＲｐ（ここでは“１”）を定める。
【００４７】
また、図２において、図示は省略されているが、時刻ｔ８の次に実行されるループ処理においても同様に、当該ループ処理の中のロード命令に伴う各変数値と時刻ｔ５，ｔ６の各変数値との一致・不一致が同値判定回路ＤＪＧによって判定される。また、時刻ｔ８において、仮に、時刻ｔ８での実行結果が時刻ｔ４での実行結果と異なる場合、分岐先バッファＢＲＢＦの分岐先アドレスＢＲＡＤＲおよび分岐成否予測ＢＲＰは、時刻ｔ８での実行結果（分岐先アドレス（結果）ＢＲＡＤＲｒ）に基づき更新される。
【００４８】
以上のように、図２のプロセッサユニットＰＲＵは、条件分岐命令が発生した際に、そこ到るまでのロード命令に伴う変数値が前回の条件分岐命令に到るまでの変数値と同じ場合には、前回の条件分岐命令と同じ分岐先を予測し、異なる場合には、前回の条件分岐命令とは異なる分岐先を予測している。また、図２３で述べたように、特に、機械制御のシステム等では、メモリアドレスからの頻繁に切り替わる変数値に応じて分岐先を変えるような処理が多く行われる。
【００４９】
このような場合、図２の方式を用いると、メモリアドレスからの変数値の相違に応じて予測分岐先を変えることができるため、図２１および図２２のように、単純に前回の分岐先と同じ分岐先を予測する方式と比較して、分岐先予測のヒット率を向上させることが可能になる。例えば、図２の時刻ｔ６の変数値が時刻ｔ２の変数値と異なる場合、時刻ｔ８では、予め時刻ｔ４とは異なる分岐先アドレス“５”を分岐先アドレス（予測）ＢＲＡＤＲｐとすることができる。そして、時刻ｔ７での演算結果が当該時刻ｔ６での値変更に伴いゼロになるような場合、時刻ｔ８の条件分岐命令の実行結果によって得られる分岐先アドレス（結果）ＢＲＡＤＲｒも“５”となり、分岐先予測はヒットとなる。
【００５０】
ここで、実際には、分岐先を定めるための変数は、条件分岐命令に至るまでの全ての変数ではなく、一部の変数である場合が考えられる。例えば、図２３のような命令コードＩＣＤの場合、分岐先を定めるための変数は、“ＩＯ２”であり、“ＩＯ１”は無関係である。図２の方式では、この無関係な変数を含めて一致・不一致を判定し、その判定結果に基づいて分岐先予測を行っているため、予測ミスの発生頻度が高まる恐れがある。例えば、図２において、仮に、分岐先が“ＩＯ２”のみで定まる場合で、“ＩＯ１”の変数値が頻繁に変更されるような場合、時刻ｔ８では前回と異なる分岐先が予測されるが、実際の分岐先は、前回と同じ分岐先となり得る。
【００５１】
このような事態を回避するため、図３Ａ、図３Ｂおよび図３Ｃに示すようなプロセッサユニットを用いることが有益となる。図３Ａ、図３Ｂおよび図３Ｃは、図２に履歴マスク機能を追加したプロセッサユニットの主要部の簡略的な構成例および動作例を示す図である。図３Ａおよび図３Ｂでは、図２の場合と異なり、履歴マスクＭＳＫを更新するバッファ更新回路ＵＰＢＦが設けられる。図３Ｃでは、分岐予測回路ＢＲＰＣは、履歴ビット領域ＳＲＥＧに当該履歴マスクＭＳＫを反映させて分岐先予測を行っている。
【００５２】
図３Ａ、図３Ｂおよび図３Ｃにおいて、プロセッサ回路ＰＲＣは、図２の場合と異なる命令コードＩＣＤ２を実行している。当該命令コードＩＣＤ２は、図２の命令コードＩＣＤ１と異なり、命令アドレスＩＡＤＲ“３”における関数“ＸＸ”の演算にメモリアドレス“ＩＯ２”のロードデータのみを用いている。図３Ａの例では、プロセッサ回路ＰＲＣによる命令の実行経過において、“ＩＯ１”の変数値は、時刻ｔ１と時刻ｔ５とで異なっている。しかし、時刻ｔ８における今回の分岐先は、“ＩＯ２”の変数値に変化が無いことから、時刻ｔ４における前回の分岐先と同じである。
【００５３】
このように、前回の分岐先と今回の分岐先が同じ場合、バッファ更新回路ＵＰＢＦは、履歴ビット領域ＳＲＥＧ内で履歴記録ＨＲが‘Ｆ’（前回と不一致）を表すビットを、分岐に無関係なビット（変数）とみなしてマスク対象ビットに定める。具体的には、バッファ更新回路ＵＰＢＦは、履歴ビット領域ＳＲＥＧと同じビット数の履歴マスクＭＳＫにおいて、当該履歴記録ＨＲが‘Ｆ’を表すビットをマスク対象ビットを意味する‘０’（分岐に関係無し）に設定する。図３Ａの例では、“ＩＯ１”の履歴記録ＨＲが‘Ｆ’である（言い換えれば変数値は変化有りである）にも関わらず、前回と同じ分岐先となったことから、当該“ＩＯ１”がマスク対象ビットに定められる。
【００５４】
その結果、分岐予測回路ＢＲＰＣは、図３Ｃに示されるように、履歴ビット領域ＳＲＥＧの中からマスク対象ビットを除いたビット（すなわち履歴マスクＭＳＫが‘１’（分岐に関係有り）のビット）を予測対象ビットとして、分岐先予測を行う。具体的には、分岐予測回路ＢＲＰＣは、予測対象ビットの履歴記録ＨＲが共に‘Ｔ’（前回と一致）を表す場合には前回と同じ分岐先を予測し、予測対象ビットの履歴記録ＨＲのいずれかが‘Ｆ’（前回と不一致）を表す場合には前回と異なる分岐先を予測する。図３Ｃの例では、予測対象ビットとなる“ＩＯ２”を対象として、当該“ＩＯ２”の変数値に変化が無い限り、前回と同じ分岐先が予測されることになる。これにより、その後は、分岐先予測がヒットすることになり、分岐先予測のヒット率を向上させることが可能になる。
【００５５】
また、図３Ｂの例では、プロセッサ回路ＰＲＣによる命令の実行経過において、“ＩＯ１”の変数値は、時刻ｔ１と時刻ｔ５とで変化無しである。しかし、時刻ｔ８における今回の分岐先は、時刻ｔ６で“ＩＯ２”の変数値が変化したことから、時刻ｔ４における前回の分岐先と異なっている。このように、前回の分岐先と今回の分岐先が異なる場合、バッファ更新回路ＵＰＢＦは、履歴ビット領域ＳＲＥＧ内で履歴記録ＨＲが‘Ｔ’（前回と一致）を表すビットを分岐に無関係なビット（変数）とみなしてマスク対象ビットに定める。
【００５６】
図３Ｂの例では、“ＩＯ１”の履歴記録ＨＲが‘Ｔ’である（言い換えれば変数値は変化無しである）にも関わらず、前回と異なる分岐先となったことから、当該“ＩＯ１”がマスク対象ビット（履歴マスクＭＳＫ＝‘０’のビット）に定められる。その結果、図示は省略するが、次回は、図３Ｃの場合と同様に、予測対象ビットとなる“ＩＯ２”を対象として分岐先予測が行われる。このため、その後は、分岐先予測がヒットすることになり、分岐先予測のヒット率を向上させることが可能になる。なお、図示は省略しているが、バッファ更新回路ＵＰＢＦは、当該履歴マスクＭＳＫ（すなわち、マスク対象ビットおよび予測対象ビット）の情報を分岐先バッファＢＲＢＦに登録する。分岐予測回路ＢＲＰＣは、分岐先予測を行う際に、履歴ビット領域ＳＲＥＧと、当該分岐先バッファＢＲＢＦの履歴マスクＭＳＫを参照する。
【００５７】
《プロセッサユニット（実施の形態１）の構成》
図４は、図１におけるプロセッサユニットの詳細な構成例を示すブロック図である。図４に示すプロセッサユニット（プロセッサ装置）ＰＲＵは、プロセッサ本体回路ＰＲＭＣと、データキャッシュＤＣＣＨと、命令キャッシュＩＣＣＨと、同値判定回路ＤＪＧと、判定履歴記録回路ＤＪＧＨＲと、分岐先バッファＢＲＢＦと、分岐予測回路ＢＲＰＣと、バッファ更新回路ＵＰＢＦとを備える。プロセッサ本体回路ＰＲＭＣは、命令フェッチ回路ＩＦＣと、命令デコーダＩＤＣと、命令実行回路ＥＸＣとを備える。同値判定回路ＤＪＧ、判定履歴記録回路ＤＪＧＨＲ、分岐先バッファＢＲＢＦ、分岐予測回路ＢＲＰＣおよびバッファ更新回路ＵＰＢＦは、概略的には、図３Ａ〜図３Ｃで述べたような機能を備える。
【００５８】
命令キャッシュＩＣＣＨは、図１のメモリＭＥＭから読み出した命令コードをキャッシュする。この例では、プロセッサユニットＰＲＵは、命令キャッシュＩＣＣＨを備えるが、命令キャッシュＩＣＣＨを備えずに、メモリＭＥＭから命令コードを直接読み出す構成であってもよい。命令フェッチ回路ＩＦＣは、命令キャッシュＩＣＣＨ及びメモリＭＥＭから読み出した命令コードをフェッチし、命令デコーダＩＤＣへ送信する。また、命令フェッチ回路ＩＦＣは、フェッチした命令アドレス（図２等のＩＡＤＲ）を分岐予測回路ＢＲＰＣへ送信し、分岐予測回路ＢＲＰＣから分岐先アドレス（予測）ＢＲＡＤＲｐのフェッチ指示（図２等のＩＦＤ）を受信する。さらに、命令フェッチ回路ＩＦＣは、分岐実行回路ＢＲＥから、分岐先アドレス（結果）ＢＲＡＤＲｒを受信する。
【００５９】
命令デコーダＩＤＣは、命令フェッチ回路ＩＦＣから受信した命令コードをデコードし、当該デコードした命令の実行を命令実行回路ＥＸＣへ指示する。命令実行回路ＥＸＣは、ロード実行回路ＬＤＥと、ストア実行回路ＳＴＥと、分岐実行回路ＢＲＥとを備える。命令実行回路ＥＸＣは、実際には、その他にも様々な実行回路を備える。命令実行回路ＥＸＣは、命令フェッチ回路ＩＦＣによって指示された命令がロード命令であればロード実行回路ＬＤＥを用いて処理を実行し、ストア命令であればストア実行回路ＳＴＥを用いて処理を実行し、条件分岐命令であれば分岐実行回路ＢＲＥを用いて処理を実行する。
【００６０】
ストア実行回路ＳＴＥは、ストア命令の内容に基づき、ストアアドレスとストアデータをデータキャッシュＤＣＣＨへ送信する。ロード実行回路ＬＤＥは、ロード命令の内容に基づき、ロードアドレスをデータキャッシュＤＣＣＨへ送信し、データキャッシュＤＣＣＨからロードデータを受信する。分岐実行回路ＢＲＥは、条件分岐命令を実行し、次に実行する命令のＰＣ（Program Counter）を更新する。また、分岐実行回路ＢＲＥは、分岐先予測がミスであった場合には、フェッチ済みの命令を無効化し、更新したＰＣを分岐先アドレス（結果）ＢＲＡＤＲｒ（言い換えれば、正しい命令フェッチアドレス）として命令フェッチ回路ＩＦＣへに送信する。さらに、分岐実行回路ＢＲＥは、条件分岐命令の命令アドレスＩＡＤＲと、分岐先アドレス（結果）ＢＲＡＤＲｒと、分岐成否結果とをバッファ更新回路ＵＰＢＦへ送信する。
【００６１】
図５は、図４におけるデータキャッシュの詳細な構成例を示すブロック図である。図５に示すデータキャッシュＤＣＣＨは、記憶領域として、タグ領域ＴＧ＿ＡＲおよびライン領域ＬＮ＿ＡＲを含むエントリを複数備える。タグ領域ＴＧ＿ＡＲは、ロードアドレスまたはストアアドレスに対応するタグアドレスを記憶する。ライン領域ＬＮ＿ＡＲは、ロードデータ（例えば、今回のロード命令に対応する今回のロードデータ）またはストアデータを記憶するデータ領域ＤＴ＿ＡＲと、最終ロードデータ（例えば、前回のロード命令に対応する前回のロードデータ）を記憶する最終ロードデータ領域ＬＤＴ＿ＡＲとを備える。なお、タグ領域ＴＧ＿ＡＲは、例えば、ダイレクトマッピング等のキャッシュ方式を用いる場合には不要である。
【００６２】
また、データキャッシュＤＣＣＨは、各エントリの制御回路として、ロード制御回路ＬＤＣとストア制御回路ＳＴＣとを備える。ロード制御回路ＬＤＣは、ロード実行回路ＬＤＥからのロードアドレスを受信し、当該ロードアドレスに対応するタグアドレスがデータキャッシュＤＣＣＨ内のいずれかのエントリのタグ領域ＴＧ＿ＡＲに記憶されているか否か（すなわち、キャッシュヒット／キャッシュミスヒット）を判別する。キャッシュミスヒットの場合、ロード制御回路ＬＤＣは、メモリＭＥＭ内の当該タグアドレスに対応する領域からライン長分のメモリデータを読み出し、当該タグアドレスおよびメモリデータを用いて、データキャッシュＤＣＣＨに新たなエントリを登録したのち、当該エントリを選択する。
【００６３】
また、キャッシュヒット、かつ、ヒットしたエントリのライン領域ＬＮ＿ＡＲがバリッドの場合（すなわち、キャッシュデータが最新の場合）、ロード制御回路ＬＤＣは、単にヒットしたエントリを選択する。一方、キャッシュヒット、かつ、ヒットしたエントリのライン領域ＬＮ＿ＡＲがインバリッドの場合（すなわち、メモリデータが最新の場合）、ロード制御回路ＬＤＣは、メモリＭＥＭ内のタグアドレスに対応する領域からライン長分のメモリデータを読み出し、当該メモリデータを用いてヒットしたエントリのリフィルを行ったのち、当該エントリを選択する。ここで、インバリッドの識別は、キャッシュ方式により決まり、例えば、ライン領域ＬＮ＿ＡＲにインバリッドであるか否かを示す記憶領域を持ち、当該領域に他の回路がアクセスする方式や、アドレスにより一意に定める方式等が挙げられる。
【００６４】
ロード制御回路ＬＤＣは、このようにして選択したエントリを対象に、データ領域ＤＴ＿ＡＲ内のロードアドレスに対応する領域からロードデータＤＴを読み出し、当該ロードデータＤＴをロード実行回路ＬＤＥへ送信する。ここで、実施の形態では、データ領域ＤＴ＿ＡＲのビット幅（すなわちライン長）は、ロードデータおよびストアデータの各ビット幅（すなわちロードサイズまたはストアサイズ）のＮ倍（Ｎは２以上の整数）である場合を例とする。以降、ロードアドレスに対応する領域をロードアドレス領域と呼び、ストアアドレスに対応する領域をストアアドレス領域と呼ぶ。
【００６５】
また、ロード制御回路ＬＤＣは、選択したエントリを対象に、データ領域ＤＴ＿ＡＲ内のロードアドレス領域および最終ロードデータ領域ＬＤＴ＿ＡＲ内のロードアドレス領域から、それぞれ、ロードデータＤＴおよび最終ロードデータＬＤＴを読み出し、それらを同値判定回路ＤＪＧへ送信する。さらに、ロード制御回路ＬＤＣは、ロードデータＤＴで最終ロードデータ領域ＬＤＴ＿ＡＲ内のロードアドレス領域を更新する。
【００６６】
ストア制御回路ＳＴＣは、ストア実行回路ＳＴＥからのストアアドレスおよびストアデータを受信し、当該ストアアドレスに対応するタグアドレスがデータキャッシュＤＣＣＨ内のいずれかのエントリのタグ領域ＴＧ＿ＡＲに記憶されているか否か（すなわち、キャッシュヒット／キャッシュミスヒット）を判別する。キャッシュミスヒットの場合、ストア制御回路ＳＴＣは、データキャッシュＤＣＣＨに当該ストアアドレスに対応する新たなエントリを登録する。そして、ストア制御回路ＳＴＣは、当該エントリのデータ領域ＤＴ＿ＡＲおよび最終ロードデータ領域ＬＤＴ＿ＡＲに、メモリＭＥＭ内のタグアドレスに対応する領域から読み出したライン長分のメモリデータを格納したのち、当該エントリを選択する。一方、キャッシュヒットの場合、ストア制御回路ＳＴＣは、単にヒットしたエントリを選択する。ストア制御回路ＳＴＣは、このようにして選択したエントリを対象に、データ領域ＤＴ＿ＡＲ内のストアアドレス領域にストアデータを格納する。
【００６７】
同値判定回路ＤＪＧは、図３Ａ〜図３Ｃの場合と同様に、ロード命令が発生する毎に、ロード制御回路ＬＤＣからのロードデータＤＴ（すなわち、今回のロードデータ）と最終ロードデータＬＤＴ（すなわち、前回のロードデータ）との一致・不一致を判定する。判定履歴記録回路ＤＪＧＨＲは、履歴ビット領域ＳＲＥＧに、条件分岐命令が生じる前の同値判定回路ＤＪＧによるＮ回分（図３Ａ〜図３Ｃの例では２回分）の判定結果をそれぞれ履歴記録ＨＲとして記録する。
【００６８】
図６は、図４における分岐先バッファ周りの詳細な構成例を示すブロック図である。分岐先バッファＢＲＢＦは、複数のエントリを備える。各エントリには、条件分岐命令の命令アドレスと、前回の分岐先の情報と、履歴マスクとの対応関係が登録される。具体的には、各エントリは、条件分岐命令の命令アドレスＩＡＤＲが格納される命令アドレス領域ＩＡＤＲ＿ＡＲと、前回の分岐先の情報が格納される分岐先アドレス領域ＢＲＡＤＲ＿ＡＲおよび分岐成否予測領域ＢＲＰ＿ＡＲと、履歴マスクＭＳＫが格納される履歴マスク領域ＭＳＫ＿ＡＲとを備える。
【００６９】
分岐先アドレス領域ＢＲＡＤＲ＿ＡＲには、例えば、条件分岐命令が成立時の分岐先アドレスが分岐先アドレスＢＲＡＤＲとして格納される。分岐成否予測領域ＢＲＰ＿ＡＲには、例えば、前回の条件分岐命令に伴う分岐成否結果ＢＲＰｒが分岐成否予測ＢＲＰとして格納される。分岐成否予測ＢＲＰは、例えば、条件分岐の成立を‘１’（＝‘Ｔ’）とし、非成立を‘０’（＝‘Ｆ’）とするビットで構成される。履歴マスクＭＳＫは、図３Ａ等で述べたように、履歴ビット領域ＳＲＥＧのビット列に対してビット毎に対応するビット列で構成される。例えば、履歴マスクＭＳＫのＫビット目の値は、履歴ビット領域ＳＲＥＧのＫビット目に対応する変数が分岐先予測に関係有りの場合には‘１’に設定され、関係無しの場合には‘０’に設定される。
【００７０】
なお、分岐先バッファＢＲＢＦのエントリ内容は、条件分岐命令の成立時と非成立時の分岐先アドレスが分かる内容であればよく、特に、図６のような内容に限定されない。例えば、ここでは、条件分岐命令が非成立時の分岐先アドレスは、条件分岐命令の命令アドレスＩＡＤＲから算出できる（例えば次の命令アドレスとなる）ものとしている。ただし、必要であれば、例えば、各エントリは、条件分岐命令の非成立時の分岐先アドレスを保持する領域を更に備えてもよい。
【００７１】
分岐先バッファＢＲＢＦは、分岐予測回路ＢＲＰＣからの命令フェッチアドレスを受信し、当該命令フェッチアドレスがいずれかのエントリの命令アドレス領域ＩＡＤＲ＿ＡＲに記憶されているか否か（すなわち、エントリヒット／ミスヒット）を判別する。分岐先バッファＢＲＢＦは、その判別結果をエントリヒット有無情報ＥＨとして分岐予測回路ＢＲＰＣへ送信する。また、分岐先バッファＢＲＢＦは、エントリヒットの場合、当該エントリの分岐先アドレスＢＲＡＤＲ、分岐成否予測ＢＲＰおよび履歴マスクＭＳＫを分岐予測回路ＢＲＰＣへ送信する。一方、これらの情報は、エントリミスヒットの場合には送信されない。ただし、例えば、予め定めた無効値が送信されるような構成であってもよい。
【００７２】
分岐先バッファＢＲＢＦは、バッファ更新回路ＵＰＢＦから、条件分岐命令の命令アドレスＩＡＤＲ、分岐先アドレスＢＲＡＤＲ、分岐成否予測ＢＲＰおよび履歴マスクＭＳＫを受信し、バッファ更新回路ＵＰＢＦからの指示に基づき、エントリの更新や新規登録を行う。ここで、条件分岐命令の命令アドレスＩＡＤＲは、分岐実行回路ＢＲＥによって定められる。分岐先アドレスＢＲＡＤＲおよび分岐成否予測ＢＲＰは、分岐実行回路ＢＲＥからの分岐先アドレス（結果）ＢＲＡＤＲｒおよび分岐成否結果ＢＲＰｒに基づいて定められる。履歴マスクＭＳＫは、バッファ更新回路ＵＰＢＦによって算出される。
【００７３】
分岐予測回路ＢＲＰＣは、命令フェッチ回路ＩＦＣからの命令フェッチアドレスを受信し、それを分岐先バッファＢＲＢＦへ送信する。これに応じて、分岐予測回路ＢＲＰＣは、分岐先バッファＢＲＢＦから、エントリヒット有無情報ＥＨと、分岐先アドレスＢＲＡＤＲと、分岐成否予測ＢＲＰと、履歴マスクＭＳＫとを受信する。ここで、分岐成否予測ＢＲＰは、前回の条件分岐命令に伴う分岐成否結果ＢＲＰｒを表している。また、分岐予測回路ＢＲＰＣは、判定履歴記録回路ＤＪＧＨＲから履歴記録ＨＲを受信する。
【００７４】
分岐予測回路ＢＲＰＣは、エントリヒットの場合には、受信した履歴記録ＨＲ、履歴マスクＭＳＫおよび分岐成否予測ＢＲＰを用いて条件分岐命令の成否を予測する。分岐予測回路ＢＲＰＣは、当該予測結果に応じて分岐先アドレス（予測）ＢＲＡＤＲｐを定め、それを命令フェッチアドレスとして、命令フェッチ回路ＩＦＣに送信する。すなわち、分岐予測回路ＢＲＰＣは、図２等に示したように、命令フェッチ回路ＩＦＣに対して、予測分岐先の命令のフェッチ指示ＩＦＤを発行する。また、分岐予測回路ＢＲＰＣは、受信した履歴記録ＨＲ、エントリヒット有無情報ＥＨと、分岐成否予測ＢＲＰおよび履歴マスクＭＳＫを、バッファ更新回路ＵＰＢＦへ送信する。
【００７５】
バッファ更新回路ＵＰＢＦは、受信したエントリヒット有無情報ＥＨがエントリミスヒットを示す場合、分岐実行回路ＢＲＥからの条件分岐命令の命令アドレスＩＡＤＲ、分岐先アドレス（結果）ＢＲＡＤＲｒおよび分岐成否結果ＢＲＰｒと、自身で初期化した履歴マスクＭＳＫとを用いて分岐先バッファＢＲＢＦにエントリを新規に登録する。一方、バッファ更新回路ＵＰＢＦは、受信したエントリヒット有無情報ＥＨがエントリヒットを示す場合、分岐実行回路ＢＲＥからの分岐成否結果ＢＲＰｒと、自身で算出した履歴マスクＭＳＫとを用いて分岐先バッファＢＲＢＦの対応するエントリを更新する。
【００７６】
《プロセッサユニット（実施の形態１）の動作》
以下に示す処理フローは、因果関係が同じであるなら同時に実行してもよく、また処理内容が同じであるものを一つの処理として実行しても良い。また、送受信する値に関して、該当する値が無い場合には無効値として任意の値を送受信してもよく、値自体の有無を示す情報と併せて送受信してもよい。
【００７７】
図７は、図５におけるストア制御回路の処理内容の一例を示すフロー図である。ストア制御回路ＳＴＣは、データキャッシュＤＣＣＨのいずれかのエントリのタグ領域ＴＧ＿ＡＲに、ストアアドレスに対応するタグアドレスが格納されているか否かを検索する（ステップＳ１０１，Ｓ１０２）。言い換えれば、ストア制御回路ＳＴＣは、キャッシュヒット／ミスヒットを判別する。
【００７８】
検索結果がヒット（キャッシュヒット）の場合、ストア制御回路ＳＴＣは、ヒットしたエントリにおけるデータ領域ＤＴ＿ＡＲ内のストアアドレス領域にストアデータを格納する（ステップＳ１０３）。一方、検索結果がミスヒット（キャッシュミスヒット）の場合、ストア制御回路ＳＴＣは、データキャッシュＤＣＣＨにエントリを新規に登録する（ステップＳ１０４）。具体的には、ストア制御回路ＳＴＣは、新たなエントリのタグ領域ＴＧ＿ＡＲに、ストアアドレスに対応するタグアドレスを格納する。また、ストア制御回路ＳＴＣは、当該タグアドレスに対応するメモリＭＥＭ内の領域からライン長分のメモリデータを読み出し、それを新たなエントリのデータ領域ＤＴ＿ＡＲおよび最終ロードデータ領域ＬＤＴ＿ＡＲに格納する。さらに、ストア制御回路ＳＴＣは、新たなエントリにおけるデータ領域ＤＴ＿ＡＲ内のストアアドレス領域にストアデータを格納する。
【００７９】
図８は、図５におけるロード制御回路の処理内容の一例を示すフロー図である。ロード制御回路ＬＤＣは、データキャッシュＤＣＣＨのいずれかのエントリのタグ領域ＴＧ＿ＡＲに、ロードアドレスに対応するタグアドレスが格納されているか否かを検索する（ステップＳ２０１，Ｓ２０２）。言い換えれば、ロード制御回路ＬＤＣは、キャッシュヒット／ミスヒットを判別する。
【００８０】
検索結果がヒット（キャッシュヒット）の場合、ロード制御回路ＬＤＣは、ヒットしたエントリのライン領域ＬＮ＿ＡＲがインバリッドであるか否かを判別し（ステップＳ２０３）、インバリッドの場合には、ステップＳ２０４を介してステップＳ２０６へ移行し、インバリッドでない場合には、そのままステップＳ２０６へ移行する。ステップＳ２０４において、ロード制御回路ＬＤＣは、ヒットしたエントリのタグアドレスに対応するメモリＭＥＭ内の領域からライン長分のメモリデータを読み出し、それを当該エントリのデータ領域ＤＴ＿ＡＲに格納する。
【００８１】
一方、ステップＳ２０２において検索結果がミスヒット（キャッシュミスヒット）の場合、ロード制御回路ＬＤＣは、データキャッシュＤＣＣＨにエントリを新規に登録する（ステップＳ２０５）。具体的には、ロード制御回路ＬＤＣは、新たなエントリのタグ領域ＴＧ＿ＡＲに、ロードアドレスに対応するタグアドレスを格納する。また、ロード制御回路ＬＤＣは、メモリＭＥＭ内の当該タグアドレスに対応する領域からライン長分のメモリデータを読み出し、それを新たなエントリのデータ領域ＤＴ＿ＡＲおよび最終ロードデータ領域ＬＤＴ＿ＡＲに格納したのち、ステップＳ２０６へ移行する。
【００８２】
ステップＳ２０６において、ロード制御回路ＬＤＣは、対象のエントリにおいて、データ領域ＤＴ＿ＡＲ内のロードアドレス領域からロードデータＤＴを読み出し、それをロード実行回路ＬＤＥへ送信する。続いて、ロード制御回路ＬＤＣは、対象のエントリにおいて、データ領域ＤＴ＿ＡＲ内および最終ロードデータ領域ＬＤＴ＿ＡＲ内の各ロードアドレス領域からそれぞれロードデータＤＴおよび最終ロードデータＬＤＴを読み出し、それらを同値判定回路ＤＪＧへ送信する（ステップＳ２０７）。次いで、ロード制御回路ＬＤＣは、読み出したロードデータＤＴを、最終ロードデータ領域ＬＤＴ＿ＡＲ内のロードアドレス領域に格納する（ステップＳ２０８）。
【００８３】
図９は、図５における同値判定回路および判定履歴記録回路の処理内容の一例を示すフロー図である。同値判定回路ＤＪＧは、ロード制御回路ＬＤＣから受信したロードデータＤＴと最終ロードデータＬＤＴとを比較し、その比較結果を判定履歴記録回路ＤＪＧＨＲへ送信する（ステップＳ３０１，Ｓ３０２）。判定履歴記録回路ＤＪＧＨＲは、‘Ｔ’（一致）の比較結果を受信した場合、履歴ビット領域（例えばシフトレジスタ）ＳＲＥＧの最新のビットに‘Ｔ’（一致）を格納すると共に、最古のビットの情報を破棄する（ステップＳ３０３）。一方、判定履歴記録回路ＤＪＧＨＲは、‘Ｆ’（不一致）の比較結果を受信した場合、履歴ビット領域ＳＲＥＧの最新のビットに‘Ｆ’（不一致）を格納すると共に、最古のビットの情報を破棄する（ステップＳ３０４）。
【００８４】
《分岐先予測方法（実施の形態１）》
図１０は、図６における分岐予測回路の処理内容の一例を示すフロー図である。分岐予測回路ＢＲＰＣは、判定履歴記録回路ＤＪＧＨＲから履歴記録ＨＲを取得し（ステップＳ４０１）、命令フェッチ回路ＩＦＣから命令フェッチアドレスを受信する（ステップＳ４０２）。分岐予測回路ＢＲＰＣは、受信した命令フェッチアドレスを検索キーとして、分岐先バッファＢＲＢＦの命令アドレス領域ＩＡＤＲ＿ＡＲを検索する（ステップＳ４０３，Ｓ４０４）。すなわち、分岐予測回路ＢＲＰＣは、当該命令フェッチアドレスが分岐先バッファＢＲＢＦのいずれかのエントリの命令アドレス領域ＩＡＤＲ＿ＡＲに格納されているか否か（エントリヒット／ミスヒット）を判別する。
【００８５】
エントリミスヒットの場合で命令フェッチアドレスの命令が条件分岐命令の場合（ステップＳ４０５）、分岐予測回路ＢＲＰＣは、バッファ更新回路ＵＰＢＦへ、履歴記録ＨＲ、エントリヒット有無情報ＥＨ、分岐成否予測ＢＲＰおよび履歴マスクＭＳＫを送信する（ステップＳ４１３）。この状況では、エントリヒット有無情報ＥＨは、エントリミスヒットを表し、分岐成否予測ＢＲＰおよび履歴マスクＭＳＫは、例えば無効値等を表す。
【００８６】
一方、ステップＳ４０４でエントリヒットの場合、分岐予測回路ＢＲＰＣは、ヒットしたエントリから分岐先アドレスＢＲＡＤＲ、分岐成否予測ＢＲＰおよび履歴マスクＭＳＫを取得する（ステップＳ４０６）。続いて、分岐予測回路ＢＲＰＣは、履歴記録ＨＲおよび履歴マスクＭＳＫを用いてビット毎にステップＳ４０７の演算式を演算し、各ビットの演算結果が全て‘０’か否かを判別する（ステップＳ４０８）。ここで、ステップＳ４０７の演算式は、（ＨＲ，ＭＳＫ）＝（Ｆ，１）の場合に‘１’となり、残りの場合に‘０’となる。したがって、ステップＳ４０８における演算結果が全て‘０’の場合とは、履歴マスクＭＳＫが‘１’（分岐に関係有り）の変数を対象に、当該変数の履歴記録ＨＲが全て‘Ｔ’（前回から変化無し）であった場合を意味する。
【００８７】
なお、ステップＳ４０８では、必ずしも全て‘０’である必要はなく、例えば‘０’のビット数によって判別を行ってよい。当該ビット数は、例えば、実験によって統計的に得られた値や、任意に設定な値とすることができる。さらに、別の分岐先予測方法を組み合わせ、例えば、ステップＳ４０８で全て‘０’であった場合には、当該別の分岐先予測方法を用いて更なる判別を行うようなことも可能である。
【００８８】
ステップＳ４０８での演算結果が全て‘０’の場合、分岐予測回路ＢＲＰＣは、ステップＳ４０６で取得した分岐成否予測ＢＲＰ（すなわち、前回の条件分岐命令に伴う分岐成否結果）が“成立”か“非成立”かを判別する（ステップＳ４０９）。分岐予測回路ＢＲＰＣは、分岐成否予測ＢＲＰが“成立”の場合には“成立”時の分岐先アドレス（すなわちステップＳ４０６で取得した分岐先アドレスＢＲＡＤＲ）を予測する（ステップＳ４１０）。一方、分岐予測回路ＢＲＰＣは、分岐成否予測ＢＲＰが“非成立”の場合には“非成立”時の分岐先アドレスを予測する（ステップＳ４１２）。
【００８９】
“非成立”時の分岐先アドレスは、例えば、現在の命令フェッチアドレスの次の命令アドレスとすることや、ステップＳ４０６で更に命令アドレスＩＡＤＲを受信し、その次の命令アドレスとすることが可能である。また、例えば、分岐先バッファＢＲＢＦのエントリに“非成立”時の分岐先アドレスの保存領域を設ける場合には、当該領域の情報を用いることができる。このように、分岐予測回路ＢＲＰＣは、ステップＳ４０８での演算結果が全て‘０’の場合（すなわち、予測対象ビットの変数に変化が無い場合）には、前回と同じ分岐先を予測する。そして、分岐予測回路ＢＲＰＣは、命令フェッチ回路ＩＦＣに向けて、予測した分岐先アドレス（予測）ＢＲＡＤＲｐの命令のフェッチ指示ＩＦＤを発行する。
【００９０】
また、ステップＳ４０８で計算結果が全て‘０’でない場合、分岐予測回路ＢＲＰＣは、ステップＳ４０６で取得した分岐成否予測ＢＲＰ（すなわち、前回の条件分岐命令に伴う分岐成否結果）が“成立”か“非成立”かを判別する（ステップＳ４１１）。分岐予測回路ＢＲＰＣは、分岐成否予測ＢＲＰが“成立”の場合にはステップＳ４１２で“非成立”時の分岐先アドレスを予測し、分岐成否予測ＢＲＰが“非成立”の場合にはステップＳ４１０で“成立”時の分岐先アドレスを予測する。このように、分岐予測回路ＢＲＰＣは、ステップＳ４０８での演算結果が全て‘０’でない場合（すなわち、予測対象ビットの変数の少なくとも一つに変化が有った場合）には、前回と異なる分岐先を予測する。そして、分岐予測回路ＢＲＰＣは、命令フェッチ回路ＩＦＣに向けて、予測した分岐先アドレス（予測）ＢＲＡＤＲｐの命令のフェッチ指示ＩＦＤを発行する。
【００９１】
ステップＳ４１０またはステップＳ４１２の後、分岐予測回路ＢＲＰＣは、ステップＳ４１３において、前述したようにバッファ更新回路ＵＰＢＦへ各種情報を送信し、処理を終了する。なお、ここでは、履歴マスクＭＳＫの少なくとも１ビットは‘１’（分岐に関係有り）である場合を想定している。すなわち、仮に、履歴マスクＭＳＫの全てのビットが‘０’（分岐に関係無し）となるような場合、ステップＳ４０７，Ｓ４０８の処理は、実質的に無意味となる恐れがある。したがって、このような場合には別の分岐先予測方法を用いるように、図１０のフローを変更してもよい。
【００９２】
《分岐実行方法および履歴マスクの更新方法（実施の形態１）》
図１１は、図６における分岐実行回路およびバッファ更新回路の処理内容の一例を示すフロー図である。分岐実行回路ＢＲＥは、条件分岐命令を実行し、ＰＣ（Program Counter）を更新する（ステップＳ５０１）。分岐実行回路ＢＲＥは、分岐予測回路ＢＲＰＣによる分岐先予測がヒットの場合、命令パイプラインをストールさせることなく分岐先アドレスの命令を実行し、ステップＳ５０５の処理へ移行する。すなわち、分岐予測回路ＢＲＰＣによる分岐先アドレス（予測）ＢＲＡＤＲｐと分岐実行回路ＢＲＥによる分岐先アドレス（結果）ＢＲＡＤＲｒが一致する場合、フェッチ指示ＩＦＤに応じて既に分岐先アドレス（予測）ＢＲＡＤＲｐのフェッチおよびデコードが行われているため、命令パイプラインのストールは生じない。
【００９３】
一方、分岐実行回路ＢＲＥは、ステップＳ５０２における分岐先予測がミスヒットの場合、フェッチ済みの命令を無効化する（ステップＳ５０３）。そして、分岐実行回路ＢＲＥは、分岐先アドレス（結果）ＢＲＡＤＲｒの命令（すなわち、ステップＳ５０１で更新したＰＣの命令）の再フェッチを命令フェッチ回路ＩＦＣに指示したのち（ステップＳ５０４）、ステップＳ５０５へ移行する。この場合には、命令パイプラインのストールが生じる。なお、分岐先バッファＢＲＢＦにおいてエントリがミスヒットであった場合も、ステップＳ５０３，Ｓ５０４の処理を経ずにステップＳ５０５の処理へ移行する。
【００９４】
ステップＳ５０５において、バッファ更新回路ＵＰＢＦは、分岐実行回路ＢＲＥから、条件分岐命令の命令アドレスＩＡＤＲ、分岐先アドレス（結果）ＢＲＡＤＲｒおよび分岐成否結果ＢＲＰｒを受信する。また、バッファ更新回路ＵＰＢＦは、分岐予測回路ＢＲＰＣから、図１０のステップＳ４０１に伴う履歴記録ＨＲ、ステップＳ４０３，Ｓ４０４に伴うエントリヒット有無情報ＥＨ、ステップＳ４０６に伴う分岐成否予測ＢＲＰおよび履歴マスクＭＳＫを受信する（ステップＳ５０６）。
【００９５】
次いで、バッファ更新回路ＵＰＢＦは、受信したエントリヒット有無情報ＥＨがミスヒットを示す場合（ステップＳ５０７）、分岐先バッファＢＲＢＦに、ステップＳ５０５に伴う命令アドレスＩＡＤＲ、分岐先アドレス（結果）ＢＲＡＤＲｒおよび分岐成否結果ＢＲＰｒを用いてエントリを新規に登録する（ステップＳ５１１）。また、バッファ更新回路ＵＰＢＦは、当該エントリにおける履歴マスクＭＳＫの各ビットを‘１’（分岐に関係有り）で初期化する（ステップＳ５１１）。
【００９６】
一方、ステップＳ５０７において、エントリヒット有無情報ＥＨがヒットを示す場合、バッファ更新回路ＵＰＢＦは、ステップＳ５０６で受信した分岐成否予測ＢＲＰと、ステップＳ５０５で受信した分岐成否結果ＢＲＰｒが同じか否かを判別する（ステップＳ５０８）。すなわち、バッファ更新回路ＵＰＢＦは、前回の分岐先と今回の分岐先が同じか否かを判別する。
【００９７】
ステップＳ５０８で前回の分岐先と今回の分岐先が同じ場合、前回から変化した変数は、分岐に無関係と推定される。そこで、バッファ更新回路ＵＰＢＦは、ステップＳ５０９の演算式によって、今回変化した変数（すなわち、履歴記録ＨＲが‘Ｆ’（不一致）の変数）がマスク対象ビットとなるように対象エントリの履歴マスクＭＳＫを更新する。ステップＳ５０９の演算式は、（ＨＲ，ＭＳＫ）＝（Ｆ，１）の場合に、履歴マスクＭＳＫを‘１’（分岐に関係有り）から‘０’（分岐に関係無し）に変更し、それ以外の場合には、現在の履歴マスクＭＳＫの値をそのまま維持する式となっている。
【００９８】
一方、ステップＳ５０８で前回の分岐先と今回の分岐先が異なる場合、前回から変化無しの変数は、分岐に無関係と推定される。そこで、バッファ更新回路ＵＰＢＦは、ステップＳ５１０の演算式によって、今回変化無しの変数（すなわち、履歴記録ＨＲが‘Ｔ’（一致）の変数）がマスク対象ビットとなるように対象エントリの履歴マスクＭＳＫを更新する。ステップＳ５１０の演算式は、（ＨＲ，ＭＳＫ）＝（Ｔ，１）の場合に、履歴マスクＭＳＫを‘１’（分岐に関係有り）から‘０’（分岐に関係無し）に変更し、それ以外の場合には、現在の履歴マスクＭＳＫの値をそのまま維持する式となっている。また、バッファ更新回路ＵＰＢＦは、ステップＳ５１０において、分岐先バッファＢＲＢＦの対象エントリの分岐成否予測ＢＲＰをステップＳ５０５で受信した分岐成否結果ＢＲＰｒで更新する。
【００９９】
なお、図１１のフローの変形例として、ステップＳ５０２での分岐先予測がヒットの場合には、処理を終了することも可能である。この場合、分岐先バッファＢＲＢＦの更新に要する処理負荷を軽減することが可能になる。
【０１００】
《実施の形態１の主要な効果》
以上、実施の形態１の方式を用いることで、代表的には、分岐先予測のヒット率を向上させることが可能になる。その結果、命令パイプラインにおけるストールの発生頻度を低減でき、プログラムの処理時間を短縮する（ひいてはシステムの高速制御を実現する）こと等が可能になる。具体的には、図２１〜図２３に述べたような比較例の方式では、前回と同じ分岐先が継続することを期待して分岐先予測を行うため、例えば、有限オートマトンによる機械制御等のように、同一分岐先の継続を期待し難いようなシステムに適用する場合、分岐先予測のヒット率が低下する。一方、実施の形態１の方式では、分岐先の決定要素となる変数（データ）に着目して分岐先予測を行うため、同一分岐先の継続を期待できないようなシステムであっても、分岐先予測のヒット率を向上させることが可能になる。
【０１０１】
（実施の形態２）
《プロセッサユニット（実施の形態２）の構成》
図１２は、本発明の実施の形態２によるプロセッサユニットにおいて、図４のデータキャッシュの詳細な構成例を示すブロック図である。図１２に示すデータキャッシュＤＣＣＨ２は、図５のデータキャッシュＤＣＣＨと比較して、各エントリのライン領域ＬＮ＿ＡＲが、最終ロードデータ領域ＬＤＴ＿ＡＲの代わりに、同値判定結果ＤＪＲを保持する同値判定結果領域ＤＪＲ＿ＡＲを備える点が異なっている。また、これに伴い、当該データキャッシュＤＣＣＨ２は、図５のデータキャッシュＤＣＣＨと比較して、同値判定回路ＤＪＧが削除され、ストア制御回路ＳＴＣ２およびロード制御回路ＬＤＣ２の処理内容も異なっている。
【０１０２】
ここでは、図５のデータキャッシュＤＣＣＨとの相違点に着目して説明を行う。同値判定結果ＤＪＲは、前回のストア命令またはロード命令に伴う処理が終了した時点から今回のストア命令またはロード命令に伴う処理が終了する時点までの期間で、データ領域ＤＴ＿ＡＲのデータが変化するか否かを表すビット列である。このため、ストア制御回路ＳＴＣ２は、ストア命令に応じてデータ領域ＤＴ＿ＡＲ内のストアアドレス領域を更新する際に、更新前後でのデータの一致・不一致を判定し、当該判定結果を同値判定結果領域ＤＪＲ＿ＡＲに格納する。また、ロード制御回路ＬＤＣ２は、ロード命令に応じてデータ領域ＤＴ＿ＡＲのリフィルを行う際に、リフィル前後でのデータの一致・不一致を判定し、当該判定結果を同値判定結果領域ＤＪＲ＿ＡＲに格納する。
【０１０３】
より詳細には、ロード制御回路ＬＤＣ２は、ロード命令が発生する毎に、キャッシュヒット／ミスヒットを判別する。キャッシュミスヒットの場合、ロード制御回路ＬＤＣ２は、新たにエントリを登録し、当該エントリのデータ領域ＤＴ＿ＡＲに、当該エントリのタグアドレスに対応するメモリＭＥＭ内の領域から読み出したライン長分のメモリデータを格納する。さらに、ロード制御回路ＬＤＣ２は、当該エントリの同値判定結果ＤＪＲの各ビットを全て‘Ｔ’（変化無し）で初期化する。
【０１０４】
また、ロード制御回路ＬＤＣ２は、キャッシュヒットであるがリフィルが必要な場合（すなわち、ヒットしたエントリのライン領域ＬＮ＿ＡＲがインバリッドの場合）、メモリＭＥＭ内のタグアドレスに対応する領域からライン長分のメモリデータを読み出す。そして、ロード制御回路ＬＤＣ２は、ヒットしたエントリのデータ領域ＤＴ＿ＡＲのデータと、読み出したメモリデータとの一致・不一致を例えばバイト単位で判定する。ロード制御回路ＬＤＣ２は、当該判定結果が同一であれば‘Ｔ’（変化無し）、異なっていれば‘Ｆ’（変化有り）の値を持つビット列で、同値判定結果領域ＤＪＲ＿ＡＲの同値判定結果ＤＪＲを更新する。このようにバイト単位で比較判定する場合、同値判定結果領域ＤＪＲ＿ＡＲのビット幅は、データ領域ＤＴ＿ＡＲのビット幅の１／８で足りる。
【０１０５】
その後、ロード制御回路ＬＤＣ２は、ヒットしたエントリにおける同値判定結果領域ＤＪＲ＿ＡＲ内のロードアドレス領域の同値判定結果ＤＪＲを読み出し、それをトータル同値判定結果ＴＤＪＲに置き換えて判定履歴記録回路ＤＪＧＨＲへ送信する。具体的には、ロード制御回路ＬＤＣ２は、読み出した同値判定結果ＤＪＲの各ビットが全て‘Ｔ’（変化無し）であれば、トータル同値判定結果ＴＤＪＲを‘Ｔ’（変化無し）とし、各ビットのいずれかに‘Ｆ’（変化有り）があれば、トータル同値判定結果ＴＤＪＲを‘Ｆ’（変化有り）とする。ロード制御回路ＬＤＣ２は、当該トータル同値判定結果ＴＤＪＲを判定履歴記録回路ＤＪＧＨＲへ送信したのち、同値判定結果領域ＤＪＲ＿ＡＲ内のロードアドレス領域の各ビットを全て‘Ｔ’（変化無し）で初期化する。
【０１０６】
また、ロード制御回路ＬＤＣ２は、ヒットしたエントリのデータ領域ＤＴ＿ＡＲをメモリデータで更新し、当該データ領域ＤＴ＿ＡＲ内のロードアドレス領域のデータをロードデータＤＴとしてロード実行回路ＬＤＥへ送信する。
【０１０７】
ストア制御回路ＳＴＣ２は、ストア命令が発生する毎に、キャッシュヒット／ミスヒットを判別する。キャッシュミスヒットの場合、ストア制御回路ＳＴＣ２は、新たにエントリを登録し、当該エントリのデータ領域ＤＴ＿ＡＲに、当該エントリのタグアドレスに対応するメモリＭＥＭ内の領域から読み出したライン長分のメモリデータを格納する。さらに、ストア制御回路ＳＴＣ２は、当該エントリの同値判定結果ＤＪＲの各ビットを全て‘Ｔ’（変化無し）で初期化する。
【０１０８】
そして、ストア制御回路ＳＴＣ２は、キャッシュヒット／ミスヒットに関わらず、対象のエントリにおけるデータ領域ＤＴ＿ＡＲ内のストアアドレス領域のデータと、ストアデータとの一致・不一致をバイト単位で判定する。そして、ストア制御回路ＳＴＣ２は、判定結果が同一であれば‘Ｔ’（変化無し）、異なっていれば‘Ｆ’（変化有り）の値を持つビット列で、同値判定結果領域ＤＪＲ＿ＡＲ内のストアアドレス領域の同値判定結果ＤＪＲを更新する。
【０１０９】
《プロセッサユニット（実施の形態２）の動作》
図１３は、図１２におけるストア制御回路の処理内容の一例を示すフロー図である。ストア制御回路ＳＴＣ２は、図７の場合と同様に、キャッシュヒット／ミスヒットを判別する（ステップＳ１０１，Ｓ１０２）。ストア制御回路ＳＴＣ２は、キャッシュヒットの場合、ステップＳ６０４へ移行し、キャッシュミスヒットの場合、ステップＳ６０３を介してステップＳ６０４へ移行する。
【０１１０】
ステップＳ６０３において、ストア制御回路ＳＴＣ２は、データキャッシュＤＣＣＨ２にエントリを新規に登録する。具体的には、ストア制御回路ＳＴＣ２は、新たなエントリのタグ領域ＴＧ＿ＡＲに、ストアアドレスに対応するタグアドレスを格納する。また、ストア制御回路ＳＴＣ２は、当該タグアドレスに対応するメモリＭＥＭ内の領域からライン長分のメモリデータを読み出し、それを新たなエントリのデータ領域ＤＴ＿ＡＲに格納する。さらに、ストア制御回路ＳＴＣ２は、当該エントリの同値判定結果ＤＪＲの各ビットを全て‘Ｔ’（変化無し）で初期化する。
【０１１１】
ステップＳ６０４において、ストア制御回路ＳＴＣ２は、データ領域ＤＴ＿ＡＲ内のストアアドレス領域のデータとストアデータとをバイト単位で比較する。続いて、ストア制御回路ＳＴＣ２は、当該比較結果が同一であれば‘Ｔ’（変化無し）、異なっていれば‘Ｆ’（変化有り）の値を持つビット列で同値判定結果領域ＤＪＲ＿ＡＲ内のストアアドレス領域を更新する（ステップＳ６０５）。次いで、ストア制御回路ＳＴＣ２は、データ領域ＤＴ＿ＡＲ内のストアアドレス領域をストアデータで更新する（ステップＳ６０６）。
【０１１２】
図１４は、図１２におけるロード制御回路の処理内容の一例を示すフロー図である。ロード制御回路ＬＤＣ２は、図７の場合と同様に、キャッシュヒット／ミスヒットを判別する（ステップＳ２０１，Ｓ２０２）。ロード制御回路ＬＤＣ２は、キャッシュミスヒットの場合、エントリを新規に登録したのち（ステップＳ７０８）、ステップＳ７０９へ移行し、キャッシュヒットの場合、ステップＳ７０３〜Ｓ７０７の処理を経たのちステップＳ７０９へ移行する。
【０１１３】
ステップＳ７０８において、ロード制御回路ＬＤＣ２は、具体的には、新たなエントリのタグ領域ＴＧ＿ＡＲに、ロードアドレスに対応するタグアドレスを格納する。また、ロード制御回路ＬＤＣ２は、当該タグアドレスに対応するメモリＭＥＭ内の領域から読み出したライン長分のメモリデータを、新たなエントリのデータ領域ＤＴ＿ＡＲに格納する。さらに、ロード制御回路ＬＤＣ２は、当該エントリの同値判定結果ＤＪＲの各ビットを全て‘Ｔ’（変化無し）で初期化する。
【０１１４】
一方、ステップＳ７０３において、ロード制御回路ＬＤＣ２は、ヒットしたエントリのライン領域ＬＮ＿ＡＲがインバリッドであるか否かを判別し、インバリッドの場合には、ステップＳ７０４〜Ｓ７０７の処理を介してステップＳ７０９へ移行し、インバリッドでない場合には、そのままステップＳ７０９へ移行する。
【０１１５】
ステップＳ７０４において、ロード制御回路ＬＤＣ２は、ヒットしたエントリのタグアドレスに対応するメモリＭＥＭ内の領域からライン長分のメモリデータを読み出す。続いて、ロード制御回路ＬＤＣ２は、データ領域ＤＴ＿ＡＲのデータと、読み出したメモリデータとをバイト単位で比較する（ステップＳ７０５）。ロード制御回路ＬＤＣ２は、当該比較結果が同一であれば‘Ｔ’（変化無し）、異なっていれば‘Ｆ’（変化有り）の値を持つビット列で対象エントリの同値判定結果ＤＪＲを更新する（ステップＳ７０６）。その後、ロード制御回路ＬＤＣ２は、データ領域ＤＴ＿ＡＲに、ステップＳ７０４で読み出したメモリデータを格納する（ステップＳ７０７）。
【０１１６】
ステップＳ７０９において、ロード制御回路ＬＤＣ２は、データ領域ＤＴ＿ＡＲ内のロードアドレス領域のデータをロードデータＤＴとしてロード実行回路ＬＤＥへ送信する。また、ロード制御回路ＬＤＣ２は、同値判定結果領域ＤＪＲ＿ＡＲ内のロードアドレス領域の同値判定結果ＤＪＲを読み出し、当該同値判定結果ＤＪＲからトータル同値判定結果ＴＤＪＲを定め、それを判定履歴記録回路ＤＪＧＨＲへ送信する（ステップＳ７１０）。具体的には、ロード制御回路ＬＤＣ２は、当該ロードアドレス領域の同値判定結果ＤＪＲの各ビットが全て‘Ｔ’（変化無し）であれば、トータル同値判定結果ＴＤＪＲを‘Ｔ’（変化無し）とし、各ビットのいずれかに‘Ｆ’（変化有り）があれば、トータル同値判定結果ＴＤＪＲを‘Ｆ’（変化有り）とする。その後、ステップＳ７１１において、ロード制御回路ＬＤＣ２は、同値判定結果領域ＤＪＲ＿ＡＲ内のロードアドレス領域の各ビットを全て‘Ｔ’（変化無し）で初期化する。
【０１１７】
《実施の形態２の主要な効果》
以上、実施の形態２の方式を用いることで、実施の形態１で述べた各種効果に加えて、データキャッシュＤＣＣＨ２の回路面積を低減することが可能になる。すなわち、実施の形態１の方式は、前回のロードデータＬＤＴを保持することで前回のロードデータＬＤＴと今回のロードデータＤＴとの同一性を判別する方式であるため、データ領域ＤＴ＿ＡＲと同じデータ幅の最終ロードデータ領域ＬＤＴ＿ＡＲが必要とされる。一方、実施の形態２の方式は、前回の命令（ロード命令／ストア命令）と今回の命令の間の期間でデータが変化していれば、前回のロードデータと今回のロードデータは異なるという仮定のもとで、ストアおよびリフィルの際に予め同値判定結果ＤＪＲを残す方式となっている。このため、例えば、前述したようにバイト単位で同値判定を行う場合には、同値判定結果領域ＤＪＲ＿ＡＲのデータ幅をデータ領域ＤＴ＿ＡＲの１／８にすることができる。また、例えば、ワード単位で同値判定を行う場合には、１／１６にすることができる。このようにして、回路面積の低減が図れる。
【０１１８】
（実施の形態３）
《プロセッサユニット（実施の形態３）の構成》
図１５は、本発明の実施の形態３によるプロセッサユニットにおいて、図４における分岐先バッファ周りの詳細な構成例を示すブロック図である。図１５に示す分岐先バッファＢＲＢＦ３は、図６の分岐先バッファＢＲＢＦと比較して、履歴マスクＭＳＫを保持する履歴マスク領域ＭＳＫ＿ＡＲが、履歴アンドマスクＡＭＳＫを保持する履歴アンドマスク領域ＡＭＳＫ＿ＡＲと、履歴オアマスクＯＭＳＫを保持する履歴オアマスク領域ＯＭＳＫ＿ＡＲに変更されている。
【０１１９】
また、当該分岐先バッファＢＲＢＦ３は、当該履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫの値を定めるため、さらに、成立側無効アンドマスク領域ＴＤＡＭＳＫ＿ＡＲ、成立側無効オアマスク領域ＴＤＯＭＳＫ＿ＡＲ、非成立側無効アンドマスク領域ＥＤＡＭＳＫ＿ＡＲおよび非成立側無効オアマスク領域ＥＤＯＭＳＫ＿ＡＲを備える。当該４個の領域（ＴＤＡＭＳＫ＿ＡＲ，ＴＤＯＭＳＫ＿ＡＲ，ＥＤＡＭＳＫ＿ＡＲ，ＥＤＯＭＳＫ＿ＡＲ）は、それぞれ、成立側無効アンドマスクＴＤＡＭＳＫ、成立側無効オアマスクＴＤＯＭＳＫ、非成立側無効アンドマスクＥＤＡＭＳＫ、非成立側無効オアマスクＥＤＯＭＳＫを保持する。また、このような分岐先バッファＢＲＢＦ３の変更に伴い、詳細は後述するが、分岐予測回路ＢＲＰＣ３およびバッファ更新回路ＵＰＢＦ３の構成および動作も、図６とは異なっている。
【０１２０】
ここで、前述した実施の形態１の方式は、図３Ａおよび図３Ｂ等に示したように、前回と異なる分岐先となった場合の変化無しの変数と、前回と同じ分岐先となった場合の変化有りの変数とをマスク対象ビットに定めた。一方、例えば、２個の変数Ａ，Ｂのオア演算結果によって分岐先が定まるような場合、変数Ａ，Ｂの一方の変数値が変わらない限り、同一の分岐先を継続することになる。このような場合に実施の形態１の方式を適用すると、変数Ａ，Ｂの他方が変化した際に当該他方の変数はマスク対象ビットとなり、このような処理を継続した結果、変数Ａ，Ｂ共にマスク対象ビットとなる恐れがある。この場合、分岐先予測自体が困難となり、結果として、分岐先予測のヒット率の低下に繋がる。
【０１２１】
そこで、実施の形態３では、履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫが設けられる。履歴アンドマスクＡＭＳＫとは、複数の変数（例えば、Ａ〜Ｃ）の中の一部の変数（例えば、Ａ，Ｂ）のアンド関係によって分岐先が定まる場合（例えば、“ｉｆ  （Ａ＆Ｂ）  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラム）を仮定し、この一部の変数（Ａ，Ｂ）を特定するためのものである。履歴アンドマスクＡＭＳＫにおいて、理想的には、この一部の変数（Ａ，Ｂ）にそれぞれ対応するマスク値は‘１’（アンド関係有り）となり、残りの変数（Ｃ）に対応するマスク値は‘０’（アンド関係無し）となる。
【０１２２】
同様に、履歴オアマスクＯＭＳＫとは、複数の変数（例えば、Ａ〜Ｃ）の中の一部の変数（例えば、Ａ，Ｂ）のオア関係によって分岐方向が定まる場合（例えば、“ｉｆ  （Ａ｜Ｂ）  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラム）を仮定し、この一部の変数（Ａ，Ｂ）を特定するためのものである。履歴オアマスクＯＭＳＫにおいて、理想的には、この一部の変数（Ａ，Ｂ）にそれぞれ対応するマスク値は‘１’（オア関係有り）となり、残りの変数（Ｃ）に対応するマスク値は‘０’（オア関係無し）となる。
【０１２３】
《分岐先予測方法（実施の形態３）》
図１６は、図１５における分岐予測回路の処理内容の一例を示すフロー図である。図１６に示すフローは、図１０のフローと比較して、分岐先バッファＢＲＢＦ３の情報の変更に伴い、図１０のステップＳ４０６，Ｓ４１３の処理がそれぞれ図１６のステップＳ８０６，Ｓ８１３の処理に変更されている。また、分岐先予測方法の変更に伴い、ステップＳ４０７，Ｓ４０８の処理がステップＳ８０７ａ，Ｓ８０７ｂ，Ｓ８０８ａ，Ｓ８０８ｂの処理に変更されている。
【０１２４】
ステップＳ８０６において、分岐予測回路ＢＲＰＣ３は、ステップＳ４０４でエントリヒットの場合、ヒットしたエントリから分岐先アドレスＢＲＡＤＲ、分岐成否予測ＢＲＰ、履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫを取得する。また、ステップＳ８１３において、分岐予測回路ＢＲＰＣ３は、バッファ更新回路ＵＰＢＦ３へ、履歴記録ＨＲ、エントリヒット有無情報ＥＨ、分岐成否予測ＢＲＰ、履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫを送信する。すなわち、ステップＳ４０６，Ｓ４１３での履歴マスクＭＳＫは、ステップＳ８０６，Ｓ８１３において、履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫに置き換わっている。
【０１２５】
ステップＳ８０７ａ，Ｓ８０７ｂ，Ｓ８０８ａ，Ｓ８０８ｂでは、次ぎのような処理によって分岐先予測が行われる。まず、ステップＳ８０７ａ，Ｓ８０７ｂにおいて、分岐予測回路ＢＲＰＣ３は、履歴アンドマスクＡＭＳＫを反映した予測対象ビットの履歴記録ＨＲが共に‘Ｔ’（一致）の場合には前回と同じ分岐先（現状維持）を予測し、いずかか一つでも‘Ｆ’（不一致）の場合には、ステップＳ８０８ａ，Ｓ８０８ｂへ移行する。言い換えれば、分岐予測回路ＢＲＰＣ３は、予測対象ビットとなる履歴アンドマスクＡＭＳＫが‘１’（アンド関係有り）のビットの変数を対象に、アンド関係の性質に基づき、各変数のいずれにも前回から変化が無ければ、前回と同じ分岐先を予測する。
【０１２６】
ステップＳ８０７ａの演算式は、図１０のステップＳ４０７の演算式と同様に、（ＨＲ，ＡＭＳＫ）＝（Ｆ，１）の場合に‘１’となり、残りの場合に‘０’となる。したがって、ステップＳ８０７ｂにおける演算結果が全て‘０’の場合とは、図１０のステップＳ４０８の場合と同様に、履歴アンドマスクＡＭＳＫが‘１’（アンド関係有り）の変数の履歴記録ＨＲが全て‘Ｔ’（前回から変化無し）である場合を意味する。演算結果が全て‘０’の場合、図１０の場合と同様に、ステップＳ４０９，Ｓ４１０，Ｓ４１２の処理によって前回と同じ分岐先が分岐先アドレス（予測）ＢＲＡＤＲｐとして定められる。
【０１２７】
一方、ステップＳ８０８ａ，Ｓ８０８ｂにおいて、分岐予測回路ＢＲＰＣ３は、履歴オアマスクＯＭＳＫを反映した予測対象ビットの履歴記録ＨＲの内、少なくとも一つが‘Ｔ’（一致）の場合には、前回と同じ分岐先（現状維持）を予測し、予測対象ビットの履歴記録ＨＲが共に‘Ｆ’（不一致）の場合には、前回と異なる分岐先を予測する。言い換えれば、分岐予測回路ＢＲＰＣ３は、予測対象ビットとなる履歴オアマスクＯＭＳＫが‘１’（オア関係有り）のビットの変数を対象に、オア関係の性質に基づき、各変数の少なくともいずれか一つに前回から変化が無ければ、前回と同じ分岐先（現状維持）を予測する。
【０１２８】
ステップＳ８０８ａの演算式は、（ＨＲ，ＯＭＳＫ）＝（Ｔ，１）の場合に‘１’となり、残りの場合に‘０’となる。したがって、ステップＳ８０８ｂにおいて、演算結果に‘１’のビットが有る場合とは、履歴オアマスクＯＭＳＫが‘１’（オア関係有り）の変数の履歴記録ＨＲの中に、‘Ｔ’（前回から変化無し）が少なくとも１個以上存在することを意味する。演算結果に‘１’のビットが有る場合、ステップＳ４０９，Ｓ４１０，Ｓ４１２の処理を介して前回と同じ分岐先が分岐先アドレス（予測）ＢＲＡＤＲｐとして定められる。一方、演算結果に‘１’のビットが無い場合、図１０の場合と同様に、ステップＳ４１０，Ｓ４１１，Ｓ４１２の処理によって前回と異なる分岐先が分岐先アドレス（予測）ＢＲＡＤＲｐとして定められる。
【０１２９】
このように、分岐予測回路ＢＲＰＣ３は、履歴アンドマスクＡＭＳＫに基づく予測対象ビットの履歴記録ＨＲが共に一致を表す場合には前回と同じ分岐先を予測し、履歴オアマスクＯＭＳＫに基づく予測対象ビットの履歴記録ＨＲの内、少なくとも一つが一致を表す場合にも前回と同じ分岐先を予測する。一方、分岐予測回路ＢＲＰＣ３は、履歴アンドマスクＡＭＳＫを用いた分岐先予測と履歴オアマスクＯＭＳＫを用いた分岐先予測の両方で前回と同じ分岐先を予測しない場合には前回と異なる分岐先を予測する。
【０１３０】
《分岐実行方法および履歴マスクの更新方法（実施の形態３）》
図１７は、図１５における分岐実行回路およびバッファ更新回路の処理内容の一例を示すフロー図である。図１８は、図１７におけるマスク更新処理の処理内容の一例を示すフロー図である。図１７に示すフローは、図１１のフローと比較して、分岐先バッファＢＲＢＦ３の情報の変更に伴い、図１１のステップＳ５０６，Ｓ５１１の処理がそれぞれ図１７のステップＳ９０６，Ｓ９１１の処理に変更されている。また、履歴マスクの更新方法の変更に伴い、ステップＳ５０８〜Ｓ５１０の処理がステップＳ９０８の処理（すなわち図１８の処理）に変更されている。
【０１３１】
ステップＳ９０６において、バッファ更新回路ＵＰＢＦ３は、分岐予測回路ＢＲＰＣ３から、履歴記録ＨＲ、エントリヒット有無情報ＥＨ、分岐成否予測ＢＲＰ、履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫを受信する。すなわち、ステップＳ５０６での履歴マスクＭＳＫは、ステップＳ９０６において、履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫに置き換わっている。
【０１３２】
ステップＳ９１１において、バッファ更新回路ＵＰＢＦ３は、受信したエントリヒット有無情報ＥＨがミスヒットを示す場合（ステップＳ５０７）、分岐先バッファＢＲＢＦ３に、ステップＳ５０５に伴う命令アドレスＩＡＤＲ、分岐先アドレス（結果）ＢＲＡＤＲｒおよび分岐成否結果ＢＲＰｒを用いてエントリを新規に登録する。また、バッファ更新回路ＵＰＢＦ３は、当該エントリにおける履歴アンドマスクＡＭＳＫの各ビットを‘１’（アンド関係有り）で初期化し、履歴オアマスクＯＭＳＫの各ビットを‘０’（オア関係無し）で初期化する。さらに、バッファ更新回路ＵＰＢＦ３は、成立側無効アンドマスクＴＤＡＭＳＫ、成立側無効オアマスクＴＤＯＭＳＫ、非成立側無効アンドマスクＥＤＡＭＳＫ、非成立側無効オアマスクＥＤＯＭＳＫの各ビットを‘０’（無効化ディスエーブル）で初期化する。
【０１３３】
ステップＳ９０８（図１８）において、バッファ更新回路ＵＰＢＦ３は、概略的には、まず、分岐に無関係な変数（すなわちアンド関係にもオア関係にもない変数）をマスク対象ビットとして除外するように、履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫを更新する。このマスク対象ビットを定めるため、ここでは、別途、４種類の無効マスク（成立側無効アンドマスクＴＤＡＭＳＫ、非成立側無効アンドマスクＥＤＡＭＳＫ、成立側無効オアマスクＴＤＯＭＳＫ、非成立側無効オアマスクＥＤＯＭＳＫ）が設けられる。各無効マスクでは、分岐に無関係と疑われる変数に対して、逐次、‘１’（無効化イネーブル）が記録され、この各無効マスクの組み合わせによって、最終的に、分岐に無関係な変数が特定される。
【０１３４】
その結果、バッファ更新回路ＵＰＢＦ３は、分岐に無関係な変数が除外された後に残った変数を対象に、さらに、履歴アンドマスクＡＭＳＫを用いてアンド関係にある変数のみを絞り込んでいき、履歴オアマスクＯＭＳＫを用いてオア関係にある変数のみを絞り込んでいく。これにより、例えば、分岐先が所定の変数のアンド関係によって決まるのであれば、履歴アンドマスクＡＭＳＫにおける当該所定の変数に対応する値は‘１’（アンド関係有り）に収束し、履歴オアマスクＯＭＳＫの値は全て‘０’（オア関係無し）に収束することを期待する。一方、分岐先が所定の変数のオア関係によって決まるのであれば、履歴オアマスクＯＭＳＫにおける当該所定の変数に対応する値は‘１’（オア関係有り）に収束し、履歴アンドマスクＡＭＳＫの値は全て‘０’（アンド関係無し）に収束することを期待する。
【０１３５】
図１９は、図１８の補足図であり、分岐に無関係な変数を排除する仕組みを示す説明図である。ケースＣ１に関し、例えば、“ｉｆ  （Ａ＆Ｂ（＆Ｃ？））  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラムにおいて、前回の分岐成否結果が分岐成立（ｔｈｅｎ）であった場合を仮定する。この場合で、変数Ｃが変数Ａ，Ｂに対してアンド関係にあるか否かを検証する。仮に、アンド関係にある場合、変数Ｃの変数値に変化がある時には、前回と異なる分岐先（ｅｌｓｅ）になる。このため、今回、変数Ｃの履歴記録ＨＲが‘Ｆ’（前回から変化有り）であったにも関わらず、前回と同じ分岐先（ｔｈｅｎ）となった場合、当該変数Ｃは、アンド関係に無関係な変数となる。そこで、当該変数Ｃの成立側無効アンドマスクＴＤＡＭＳＫを‘１’（無効化イネーブル）に変更する。なお、ケースＣ１では、変数Ｃは、オア関係で関係有りとなる可能性と、分岐に全く無関係である可能性とが残る。
【０１３６】
ケースＣ２に関し、例えば、“ｉｆ  （Ａ｜Ｂ（｜Ｃ？））  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラムにおいて、前回の分岐成否結果が分岐成立（ｔｈｅｎ）であった場合を仮定する。この場合で、変数Ｃが変数Ａ，Ｂに対してオア関係にあるか否かを検証する。仮に、オア関係にある場合、変数Ｃの変数値に変化がない時には、前回と同じ分岐先（ｔｈｅｎ）になる可能性が高い。このため、今回、変数Ｃの履歴記録ＨＲが‘Ｔ’（前回から変化無し）であったにも関わらず、前回と異なる分岐先（ｅｌｓｅ）となった場合、当該変数Ｃを、オア関係に無関係な変数とみなす。そこで、当該変数Ｃの成立側無効オアマスクＴＤＯＭＳＫを‘１’（無効化イネーブル）に変更する。なお、ケースＣ２では、変数Ｃは、アンド関係に関係有りとなる可能性と、分岐に全く無関係である可能性とが残る。
【０１３７】
ケースＣ３に関し、例えば、“ｉｆ  （Ａ｜Ｂ（｜Ｃ？））  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラムにおいて、前回の分岐成否結果が分岐非成立（ｅｌｓｅ）であった場合を仮定する。この場合で、変数Ｃが変数Ａ，Ｂに対してオア関係にあるか否かを検証する。仮に、オア関係にある場合、変数Ｃの変数値に変化がない時には、前回と同じ分岐先（ｅｌｓｅ）になる可能性が高い。このため、今回、変数Ｃの履歴記録ＨＲが‘Ｔ’（前回から変化無し）であったにも関わらず、前回と異なる分岐先（ｔｈｅｎ）となった場合、当該変数Ｃを、オア関係に無関係な変数とみなす。そこで、当該変数Ｃの非成立側無効オアマスクＥＤＯＭＳＫを‘１’（無効化イネーブル）に変更する。なお、ケースＣ３では、変数Ｃは、アンド関係に関係有りとなる可能性と、分岐に全く無関係である可能性とが残る。
【０１３８】
ケースＣ４に関し、例えば、“ｉｆ  （Ａ＆Ｂ（＆Ｃ？））  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラムにおいて、前回の分岐成否結果が分岐非成立（ｅｌｓｅ）であった場合を仮定する。この場合で、変数Ｃが変数Ａ，Ｂに対してアンド関係にあるか否かを検証する。仮に、アンド関係にある場合、変数Ｃの変数値に変化がある時には、前回と異なる分岐先（ｔｈｅｎ）になる可能性が高い。このため、今回、変数Ｃの履歴記録ＨＲが‘Ｆ’（前回から変化有り）であったにも関わらず、前回と同じ分岐先（ｅｌｓｅ）となった場合、当該変数Ｃは、アンド関係に無関係な変数とみなす。そこで、当該変数Ｃの非成立側無効アンドマスクＥＤＡＭＳＫを‘１’（無効化イネーブル）に変更する。なお、ケースＣ４では、変数Ｃは、オア関係に関係有りとなる可能性と、分岐に全く無関係である可能性とが残る。
【０１３９】
ここで、例えば、ケースＣ１とケースＣ４の両方（すなわち、分岐成立（ｔｈｅｎ）側と分岐非成立（ｅｌｓｅ）側の両方）で無関係と判定された変数Ｃや、ケースＣ２とケースＣ３の両方（分岐成立側と分岐非成立側の両方）で無関係と判定された変数Ｃは、分岐に無関係な変数とみなされる。さらに、ケースＣ１とケースＣ２の両方（すなわち、アンド関係とオア関係の両方）で無関係と判定された変数Ｃや、ケースＣ３とケースＣ４の両方（アンド関係とオア関係の両方）で無関係と判定された変数Ｃも、分岐に無関係な変数とみなされる。
【０１４０】
図１８のステップＳ１００１，Ｓ１００２，Ｓ１００６において、バッファ更新回路ＵＰＢＦ３は、分岐成否予測ＢＲＰ（すなわち前回の分岐成否結果）と分岐成否結果ＢＲＰｒ（すなわち今回の分岐成否結果）とを用いて、図１９に示したケースＣ１〜Ｃ４を判別する。図１８のステップＳ１００３，Ｓ１００４は、それぞれ、図１９のケースＣ１，Ｃ４に対応する処理であり、アンド関係に無関係なＣを記録する処理である。
【０１４１】
ステップＳ１００３，Ｓ１００４の演算式では、成立側無効アンドマスクＴＤＡＭＳＫ（または非成立側無効アンドマスクＥＤＡＭＳＫ）は、（ＨＲ，ＴＤＡＭＳＫ（またはＥＤＡＭＳＫ））＝（Ｆ，０）の場合には‘０’から‘１’に変更され、残りの場合には現状維持となる。つまり、ある変数Ｃの履歴記録ＨＲが‘Ｆ’（前回から変化有り）であったにも関わらず、前回と同じ分岐先であった場合、当該変数Ｃをアンド関係に無関係な変数とみなして、当該変数Ｃの成立側無効アンドマスクＴＤＡＭＳＫ（または非成立側無効アンドマスクＥＤＡＭＳＫ）が‘１’（無効化イネーブル）に変更される。
【０１４２】
ステップＳ１００３（ケースＣ１）は、ステップＳ１００１，Ｓ１００２に伴い、前回の分岐先と今回の分岐先が共に分岐成立（ｔｈｅｎ）時の分岐先の場合に実行される。この場合、バッファ更新回路ＵＰＢＦ３は、履歴ビット領域ＳＲＥＧ内で履歴記録ＨＲが‘Ｆ’（不一致）のビットを成立側無効アンドマスクＴＤＡＭＳＫに累積的に記録する。ステップＳ１００４（ケースＣ４）は、ステップＳ１００１，Ｓ１００２に伴い、前回の分岐先と今回の分岐先が共に分岐非成立（ｅｌｓｅ）時の分岐先の場合に実行される。この場合、バッファ更新回路ＵＰＢＦは、履歴ビット領域ＳＲＥＧ内で履歴記録ＨＲが‘Ｆ’（不一致）のビットを非成立側無効アンドマスクＥＤＡＭＳＫに累積的に記録する。
【０１４３】
図１８のステップＳ１００７，Ｓ１００８は、それぞれ、図１９のケースＣ２，Ｃ３に対応する処理であり、オア関係に無関係なＣを記録する処理である。ステップＳ１００７，Ｓ１００８の演算式では、成立側無効オアマスクＴＤＯＭＳＫ（または非成立側無効オアマスクＥＤＯＭＳＫ）は、（ＨＲ，ＴＤＯＭＳＫ（またはＥＤＯＭＳＫ））＝（Ｔ，０）の場合に‘０’から‘１’に変更され、残りの場合には現状維持となる。つまり、ある変数Ｃの履歴記録ＨＲが‘Ｔ’（前回から変化無し）であったにも関わらず、前回と異なる分岐先であった場合、当該変数Ｃをオア関係に無関係な変数とみなして、当該変数Ｃの成立側無効オアマスクＴＤＯＭＳＫ（または非成立側無効オアマスクＥＤＯＭＳＫ）が‘１’（無効化イネーブル）に変更される。
【０１４４】
ステップＳ１００７（ケースＣ２）は、ステップＳ１００１，Ｓ１００６に伴い、前回の分岐先が分岐成立（ｔｈｅｎ）時の分岐先であり、今回の分岐先が分岐非成立（ｅｌｓｅ）時の分岐先である場合に実行される。この場合、バッファ更新回路ＵＰＢＦ３は、履歴ビット領域ＳＲＥＧ内で履歴記録ＨＲが‘Ｔ’（一致）のビットを成立側無効オアマスクＴＤＯＭＳＫに累積的に記録する。ステップＳ１００８（ケースＣ３）は、ステップＳ１００１，Ｓ１００６に伴い、前回の分岐先が分岐非成立（ｅｌｓｅ）時の分岐先であり、今回の分岐先が分岐成立（ｔｈｅｎ）時の分岐先である場合に実行される。この場合、バッファ更新回路ＵＰＢＦ３は、履歴ビット領域ＳＲＥＧ内で履歴記録ＨＲが‘Ｔ’（一致）のビットを非成立側無効オアマスクＥＤＯＭＳＫに累積的に記録する。
【０１４５】
バッファ更新回路ＵＰＢＦ３は、ステップＳ１００３またはステップＳ１００４の処理を行った場合、ステップＳ１００５へ移行し、ステップＳ１００７またはステップＳ１００８の処理を行った場合、ステップＳ１００９へ移行する。ステップＳ１００５において、バッファ更新回路ＵＰＢＦ３は、演算式Ｆ１を用いて分岐に無関係な変数Ｃを除外するように履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫの両方を更新する。すなわち、バッファ更新回路ＵＰＢＦ３は、履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫにおける当該無関係な変数Ｃに対応するビットを、マスク対象ビットとして共に‘０’（アンド／オア関係無し）に設定する。当該分岐に無関係な変数Ｃに対応するマスク対象ビットは、図１９で述べたように、次ぎの４つの条件の少なくとも一つを満たすビットである。
【０１４６】
１つ目の条件を満たすビットは、成立側無効アンドマスクＴＤＡＭＳＫと非成立側無効アンドマスクＥＤＡＭＳＫの両方で重複して記録されるビット（両方で‘１’（無効化イネーブル）に設定されるビット）である。２つ目の条件を満たすビットは、成立側無効オアマスクＴＤＯＭＳＫと非成立側無効オアマスクＥＤＯＭＳＫの両方で重複して記録されるビットである。３つ目の条件を満たす変数は、成立側無効アンドマスクＴＤＡＭＳＫと成立側無効オアマスクＴＤＯＭＳＫの両方で重複して記録されるビットである。４つ目の条件を満たす変数は、非成立側無効アンドマスクＥＤＡＭＳＫと非成立側無効オアマスクＥＤＯＭＳＫの両方で重複して記録されるビットである。
【０１４７】
また、ステップＳ１００５において、バッファ更新回路ＵＰＢＦ３は、前述したように演算式Ｆ１によって履歴アンドマスクＡＭＳＫのマスク対象ビットを定め、これに加えて、演算式Ｆ２によっても履歴アンドマスクＡＭＳＫのマスク対象ビットを定める。演算式Ｆ２では、履歴アンドマスクＡＭＳＫは、（ＨＲ，ＡＭＳＫ）＝（Ｆ，１）の場合には‘１’（アンド関係有り）から‘０’（アンド関係無し）に変更され、残りの場合には現状維持となる。その結果、バッファ更新回路ＵＰＢＦ３は、ステップＳ１００１に基づき前回の分岐先と今回の分岐先が同じ場合、予測対象ビット内で履歴記録ＨＲが‘Ｆ’（不一致）のビットが次回のマスク対象ビットとなるように履歴アンドマスクＡＭＳＫを更新する。
【０１４８】
ここでは、例えば、“ｉｆ  （Ａ＆Ｂ）  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラムにおいて、前回の分岐先も今回の分岐先も分岐成立（ｔｈｅｎ）側であったような状況を仮定する。この場合、変数Ａ，Ｂの変数値は、前回、今回共に“ＴＲＵＥ”である。したがって、仮に、今回変化した変数があった場合、当該変数は、アンド関係に無関係な変数となるため、演算式Ｆ２によって履歴アンドマスクＡＭＳＫを更新することで、次回のマスク対象ビットとなる（言い換えれば、次回の予測対象ビットから除外される）ように変更される。次回は、図１６のステップＳ８０７ａ，Ｓ８０７ｂの予測方法を用いて、更新された予測対象ビットに対応する変数を対象に、当該変数に共に変化が無い限り、現状維持（ｔｈｅｎ）の予測が行われる。
【０１４９】
また、ステップＳ１００５において、バッファ更新回路ＵＰＢＦ３は、前述したように演算式Ｆ１によって履歴オアマスクＯＭＳＫのマスク対象ビットを定め、これに加えて、演算式Ｆ３によっても履歴オアマスクＯＭＳＫのマスク対象ビットを定める。演算式Ｆ３では、履歴オアマスクＯＭＳＫは、（ＨＲ，ＯＭＳＫ）＝（Ｆ，１）の場合には‘１’（オア関係有り）から‘０’（オア関係無し）に変更され、（ＨＲ，ＯＭＳＫ）＝（Ｆ，０）の場合には‘０’から‘１’に変更され、残りの場合には現状維持となる。
【０１５０】
その結果、バッファ更新回路ＵＰＢＦ３は、ステップＳ１００１に基づき前回の分岐先と今回の分岐先が同じ場合、予測対象ビット内で履歴記録ＨＲが‘Ｆ’（不一致）のビットが次回のマスク対象ビットとなるように履歴オアマスクＯＭＳＫを更新する。さらに、バッファ更新回路ＵＰＢＦ３は、ステップＳ１００１に基づき前回の分岐先と今回の分岐先が同じ場合、マスク対象ビット内で履歴記録ＨＲが‘Ｆ’（不一致）のビットが次回の予測対象ビットとなるように履歴オアマスクＯＭＳＫを更新する。
【０１５１】
ここでは、“ｉｆ  （Ａ｜Ｂ）  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラムにおいて、前回の分岐先も今回の分岐先も分岐成立（ｔｈｅｎ）側であったような状況を仮定する。この場合、前回と今回において、変数Ａ，Ｂの少なくとも一方の変数値は“ＴＲＵＥ”である。ここで、履歴記録ＨＲでは、前回と今回とで変数の変数値が“ＴＲＵＥ”および“ＦＡＬＳＥ”のどちら側に変化したかは分からないため、特に、ある変数がオア関係にあるか否かを高精度に判別することは容易でない。
【０１５２】
そこで、この例では、予測対象ビット（履歴オアマスクＯＭＳＫが‘１’のビット）内で、今回の履歴記録ＨＲが‘Ｆ’のビットに対応する変数（言い換えれば前回から変化があった変数）が、オア関係に無関係な変数とみなされ、次回の予測対象ビットから除外する。さらに、この例では、マスク対象ビット（すなわち履歴オアマスクＯＭＳＫが‘０’のビット）内で、今回の履歴記録ＨＲが‘Ｆ’のビットに対応する変数が、オア関係に関係有りの変数とみなされ、次回の予測対象ビットに定められる。
【０１５３】
後者に関し、前回の分岐先も今回の分岐先も分岐成立（ｔｈｅｎ）側となる状況で、（ＨＲ，ＯＭＳＫ）＝（Ｆ，０）となっている変数の変数値は、“ＴＲＵＥ”である可能性が高い。この場合、当該変数をマスク対象ビットから除外し、予測対象ビットに変更することで、実際に当該変数がオア関係に関係有りだった場合の分岐予測精度を高めることができる。すなわち、次回は、図１６のステップＳ８０８ａ，Ｓ８０８ｂの予測方法を用いて、予測対象ビットの変数を対象に、当該変数の少なくともいずれかに変化が無い限り、現状維持（ｔｈｅｎ）の予測が行われる。オア関係に関係有りとなる変数の変数値が“ＴＲＵＥ”の場合、実際上、当該変数に変化が無い限り、分岐先は現状維持（ｔｈｅｎ）となる。なお、予測対象ビットに変更された変数が実際にはオア関係に無関係である場合、当該変数は、その後のいずれかの段階で、演算式Ｆ３等によって再びマスク対象ビットに戻される。
【０１５４】
ステップＳ１００９において、バッファ更新回路ＵＰＢＦ３は、ステップＳ１００５の場合と異なり、分岐成否予測ＢＲＰを分岐成否結果ＢＲＰｒで更新する。これにより、次回は、分岐先予測の方向（現状維持の場合の分岐先）が変化する。また、ステップＳ１００９において、バッファ更新回路ＵＰＢＦ３は、演算式Ｆ１によってステップＳ１００５の場合と同様にして履歴アンドマスクＡＭＳＫのマスク対象ビットを定め、これに加えて、演算式Ｆ４によっても履歴アンドマスクＡＭＳＫのマスク対象ビットを定める。
【０１５５】
演算式Ｆ４では、履歴アンドマスクＡＭＳＫは、（ＨＲ，ＯＭＳＫ）＝（Ｔ，１）の場合に‘０’となり、残りの場合に‘１’となる。その結果、バッファ更新回路ＵＰＢＦ３は、ステップＳ１００１に基づき前回の分岐先と今回の分岐先が異なる場合、履歴オアマスクＯＭＳＫに基づくマスク対象ビット（ＯＭＳＫ＝‘０’のビット）が次回の履歴アンドマスクＡＭＳＫに基づく予測対象ビット（ＡＭＳＫ＝‘１’のビット）となるように履歴アンドマスクＡＭＳＫを更新する。また、バッファ更新回路ＵＰＢＦ３は、履歴オアマスクＯＭＳＫに基づく予測対象ビット（ＯＭＳＫ＝‘１’のビット）内で履歴記録ＨＲが‘Ｆ’（不一致）のビットが、次回の履歴アンドマスクＡＭＳＫに基づく予測対象ビット（ＡＭＳＫ＝‘１’のビット）となるように履歴アンドマスクＡＭＳＫを更新する。
【０１５６】
ここでは、“ｉｆ  （Ａ｜Ｂ）  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラムにおいて、前回の分岐先は分岐成立（ｔｈｅｎ）側、今回の分岐先は分岐非成立（ｅｌｓｅ）側となるような状況を仮定する。この場合、変数Ａ，Ｂの変数値は、今回、少なくとも一方が“ＦＡＬＳＥ”に変化した結果、共に“ＦＡＬＳＥ”となっている。この状況では、「変数Ａ，Ｂの変数値が共に“ＦＡＬＳＥ”を維持する限り、分岐先は現状維持（ｅｌｓｅ）となる」というようにアンド関係に置き換えて分岐予測を行うことが有益となる。そのために、履歴オアマスクＯＭＳＫによる予測対象ビット内で履歴記録ＨＲが‘Ｆ’（前回から変化有り）の変数の履歴アンドマスクＡＭＳＫが‘１’に定められる。
【０１５７】
次回は、図１６のステップＳ８０７ａ，Ｓ８０７ｂの予測方法を用いて、予測対象ビットに対応する変数を対象に、当該変数に共に変化が無い限り、現状維持（ｅｌｓｅ）の予測が行われる。このように、前回と分岐先と今回の分岐先が異なる場合には、オア関係を仮定した予測をアンド関係に置き換えて行うことで、オア関係である場合の予測を高精度に行うことが可能になる。
【０１５８】
また、バッファ更新回路ＵＰＢＦ３は、演算式Ｆ１によってステップＳ１００５の場合と同様にして履歴オアマスクＯＭＳＫのマスク対象ビットを定め、これに加えて、演算式Ｆ５によっても履歴オアマスクＯＭＳＫのマスク対象ビットを定める。演算式Ｆ５では、履歴オアマスクＯＭＳＫは、ＨＲ＝‘Ｔ’の場合に‘０’となり、ＨＲ＝‘Ｆ’の場合に‘１’となる。その結果、バッファ更新回路ＵＰＢＦ３は、ステップＳ１００１に基づき前回の分岐先と今回の分岐先が異なる場合、履歴ビット領域ＳＲＥＧ内で履歴記録ＨＲが‘Ｆ’（不一致）のビットが次回の予測対象ビットとなるように履歴オアマスクＯＭＳＫを更新する。
【０１５９】
ここでは、“ｉｆ  （Ａ＆Ｂ）  ｔｈｅｎ  ｘｘ  ｅｌｓｅ  ｙｙ”のような条件分岐プログラムにおいて、前回の分岐先は分岐成立（ｔｈｅｎ）側、今回の分岐先は分岐非成立（ｅｌｓｅ）側のような状況を仮定する。この場合、変数Ａ，Ｂの変数値は、今回、少なくとも一方が“ＦＡＬＳＥ”に変化している。この状況では、「変数Ａ，Ｂの変数値の少なくとも一方が“ＦＡＬＳＥ”を維持する限り、分岐先は現状維持（ｅｌｓｅ）となる」というようにオア関係に置き換えて分岐予測を行うことが有益となる。そのために、履歴記録ＨＲが‘Ｆ’（前回から変化有り）の変数の履歴オアマスクＯＭＳＫが‘１’に定められる。
【０１６０】
次回は、図１６のステップＳ８０８ａ，Ｓ８０８ｂの予測方法を用いて、予測対象ビットの変数を対象に、当該変数の少なくともいずれかに変化が無い限り、現状維持（ｅｌｓｅ）の予測が行われる。このように、前回と分岐先と今回の分岐先が異なる場合には、アンド関係を仮定した予測をオア関係に置き換えて行うことで、アンド関係である場合の予測を高精度に行うことが可能になる。
【０１６１】
《条件分岐プログラムの実行例》
図２０は、図１５のプロセッサユニットを用いた条件分岐プログラムの実行経過の一例を示す図である。ここでは、図２等の場合と同様の命令コードが実行される。ただし、ここでは、図２等の場合と異なり、履歴ビット領域ＳＲＥＧ（履歴記録ＨＲＥ）は３ビットであり、３個の変数“ＩＯ１”，“ＩＯ２”，“ＩＯ３”に対して同値判定が行われる。また、ここでは、変数“ＩＯ１”と変数“ＩＯ２”のオア演算結果が非ゼロであれば、分岐成立となる（ループ処理を行う）ような処理が行われる。言い換えれば、“ＩＯ１”および“ＩＯ２”に対応する変数値（ロードデータＤＴ）の少なくともいずれかが‘Ｔ’（＝‘１’）であれば、分岐成立となる。
【０１６２】
時刻ｔ＝ｔ１〜ｔ３では、（ＩＯ３，ＩＯ２，ＩＯ１）のロードデータＤＴは、（Ｆ，Ｔ，Ｔ）となっている。時刻ｔ＝ｔ５の条件分岐命令（“ｂｎｚ（ＸＸ）”）では、分岐先バッファＢＲＢＦ３に対応するエントリは無く、分岐先予測は行われない。時刻ｔ＝ｔ６では、“ＩＯ１”，“ＩＯ２”に対応するロードデータＤＴが共に‘Ｔ’であるため、分岐成否結果ＢＲＰｒは“成立”となる。これに応じて、分岐成否予測ＢＲＰも“成立”となる。また、各履歴マスク（ＡＭＳＫ，ＯＭＳＫ）および各無効マスク（ＴＤＡＭＳＫ，ＴＤＯＭＳＫ，ＥＤＡＭＳＫ，ＥＤＯＭＳＫ）は、図１７のステップＳ９１１で述べた値で初期化される。
【０１６３】
時刻ｔ＝ｔ７〜ｔ９では、（ＩＯ３，ＩＯ２，ＩＯ１）のロードデータＤＴは、（Ｆ，Ｆ，Ｆ）となっている。これに応じて、履歴記憶ＨＲは、（Ｔ，Ｆ，Ｆ）となる。時刻ｔ＝ｔ１１の条件分岐命令（“ｂｎｚ（ＸＸ）”）に際し、履歴アンドマスクＡＭＳＫが‘１’（アンド関係有り）のビットに対応する履歴記憶ＨＲには‘Ｆ’（不一致）が含まれている（図１６のステップＳ８０７ａ，Ｓ８０７ｂ）。また、履歴オアマスクＯＭＳＫは全て‘０’（オア関係無し）となっている（ステップＳ８０８ａ，Ｓ８０８ｂ）。このため、前回の分岐先（分岐成否予測ＢＲＰが示す“成立”）とは異なる分岐先（“非成立”）が予測される（図１６のステップＳ４１１→Ｓ４１２）。
【０１６４】
時刻ｔ＝ｔ１２では、“ＩＯ１”，“ＩＯ２”に対応するロードデータＤＴが共に‘Ｆ’であるため、分岐成否結果ＢＲＰｒは“非成立”となり、分岐先予測はヒットとなる。また、図１８において、ＢＲＰ≠ＢＲＰｒであり、ＢＲＰ＝“成立”であるため、ステップＳ１００７，Ｓ１００９の処理が行われる。ステップＳ１００７では、成立側無効オアマスクＴＤＯＭＳＫは（１，０，０）に更新される。ただし、他の無効マスクは、（０，０，０）であるため、ステップＳ１００９の演算式Ｆ１は、分岐に無関係な変数を記録しない。また、ステップＳ１００９において、履歴オアマスクＯＭＳＫは、演算式Ｆ５に伴い（０，１，１）に更新される。分岐成否予測ＢＲＰは、分岐成否結果ＢＲＰｒに応じて、“非成立”に更新される。
【０１６５】
時刻ｔ＝ｔ１３〜ｔ１５では、（ＩＯ３，ＩＯ２，ＩＯ１）のロードデータＤＴは、（Ｆ，Ｆ，Ｔ）となっている。これに応じて、履歴記憶ＨＲは、（Ｔ，Ｔ，Ｆ）となる。時刻ｔ＝ｔ１７の条件分岐命令（“ｂｎｚ（ＸＸ）”）に際し、履歴アンドマスクＡＭＳＫが‘１’（アンド関係有り）のビットに対応する履歴記憶ＨＲには‘Ｆ’（不一致）が含まれている（ステップＳ８０７ａ，Ｓ８０７ｂ）。また、履歴オアマスクＯＭＳＫが‘１’（オア関係有り）のビットに対応する履歴記憶ＨＲには‘Ｔ’（一致）が含まれている（ステップＳ８０８ａ，Ｓ８０８ｂ）。このため、前回の分岐先（分岐成否予測ＢＲＰが示す“非成立”）と同じ分岐先（“非成立”）が予測される（ステップＳ４０９→Ｓ４１２）。
【０１６６】
時刻ｔ＝ｔ１８では、“ＩＯ１”に対応するロードデータＤＴが‘Ｔ’であるため、分岐成否結果ＢＲＰｒは“成立”となり、分岐先予測はミスヒットとなる。また、図１８において、ＢＲＰ≠ＢＲＰｒであり、ＢＲＰ＝“非成立”であるため、ステップＳ１００８，Ｓ１００９の処理が行われる。ステップＳ１００８では、非成立側無効オアマスクＥＤＯＭＳＫは（１，１，０）に更新される。
【０１６７】
当該非成立側無効オアマスクＥＤＯＭＳＫ（１，１，０）と、時刻ｔ＝ｔ１２で更新された成立側無効オアマスクＴＤＯＭＳＫ（１，０，０）とに伴い、ステップＳ１００９の演算式Ｆ１は、分岐に無関係な変数（共に‘１’となるビットに対応する変数）を記録する。また、ステップＳ１００９において、履歴アンドマスクＡＭＳＫは、演算式Ｆ１，Ｆ４に伴い（０，０，１）に更新される。履歴オアマスクＯＭＳＫは、演算式Ｆ１，Ｆ５に伴い（０，０，１）に更新される。分岐成否予測ＢＲＰは、分岐成否結果ＢＲＰｒに応じて、“成立”に更新される。
【０１６８】
時刻ｔ＝ｔ１９〜ｔ２１では、（ＩＯ３，ＩＯ２，ＩＯ１）のロードデータＤＴは、（Ｔ，Ｔ，Ｆ）となっている。これに応じて、履歴記憶ＨＲは、（Ｆ，Ｆ，Ｆ）となる。時刻ｔ＝ｔ２３の条件分岐命令（“ｂｎｚ（ＸＸ）”）に際し、履歴アンドマスクＡＭＳＫが‘１’（アンド関係有り）のビットに対応する履歴記憶ＨＲには‘Ｆ’（不一致）が含まれている（ステップＳ８０７ａ，Ｓ８０７ｂ）。また、履歴オアマスクＯＭＳＫが‘１’（オア関係有り）のビットに対応する履歴記憶ＨＲには‘Ｔ’（一致）が含まれていない（ステップＳ８０８ａ，Ｓ８０８ｂ）。このため、前回の分岐先（分岐成否予測ＢＲＰが示す“成立”）と異なる分岐先（“非成立”）が予測される（ステップＳ４１１→Ｓ４１２）。
【０１６９】
時刻ｔ＝ｔ２４では、“ＩＯ２”に対応するロードデータＤＴが‘Ｔ’であるため、分岐成否結果ＢＲＰｒは“成立”となり、分岐先予測はミスヒットとなる。また、図１８において、ＢＲＰ＝ＢＲＰｒであり、ＢＲＰ＝“成立”であるため、ステップＳ１００３，Ｓ１００５の処理が行われる。ステップＳ１００３では、成立側無効アンドマスクＴＤＡＭＳＫは（１，１，１）に更新される。
【０１７０】
このように成立側無効アンドマスクＴＤＡＭＳＫは（１，１，１）に更新されるが、非成立側無効アンドマスクＥＤＡＭＳＫおよび成立側無効オアマスクＴＤＯＭＳＫは、それぞれ（０，０，０）および（１，０，０）であるため、ステップＳ１００５の演算式Ｆ１で記録される分岐に無関係な変数は、時刻ｔ＝ｔ１８の時点と変わらない。また、ステップＳ１００５において、履歴アンドマスクＡＭＳＫは、演算式Ｆ１，Ｆ２に伴い（０，０，０）に更新される。履歴オアマスクＯＭＳＫは、演算式Ｆ１，Ｆ３に伴い（０，１，０）に更新される。
【０１７１】
時刻ｔ＝ｔ２５〜ｔ２７では、（ＩＯ３，ＩＯ２，ＩＯ１）のロードデータＤＴは、（Ｔ，Ｔ，Ｔ）となっている。これに応じて、履歴記憶ＨＲは、（Ｔ，Ｔ，Ｆ）となる。時刻ｔ＝ｔ２９の条件分岐命令（“ｂｎｚ（ＸＸ）”）に際し、履歴アンドマスクＡＭＳＫは全て‘０’（アンド関係無し）となっている（ステップＳ８０７ａ，Ｓ８０７ｂ）。また、履歴オアマスクＯＭＳＫが‘１’（オア関係有り）のビットに対応する履歴記憶ＨＲには‘Ｔ’（一致）が含まれている（ステップＳ８０８ａ，Ｓ８０８ｂ）。このため、前回の分岐先（分岐成否予測ＢＲＰが示す“成立”）と同じ分岐先（“成立”）が予測される（ステップＳ４０９→Ｓ４１０）。
【０１７２】
時刻ｔ＝ｔ３０では、“ＩＯ１”，“ＩＯ２”に対応するロードデータＤＴが共に‘Ｔ’であるため、分岐成否結果ＢＲＰｒは“成立”となり、分岐先予測はヒットとなる。また、図１８において、ＢＲＰ＝ＢＲＰｒであり、ＢＲＰ＝“成立”であるため、ステップＳ１００３，Ｓ１００５の処理が行われる。ステップＳ１００３では、成立側無効アンドマスクＴＤＡＭＳＫは、（１，１，１）をそのまま維持する。また、ステップＳ１００５において、履歴オアマスクＯＭＳＫは、演算式Ｆ１，Ｆ３に伴い（０，１，１）に更新される。
【０１７３】
《実施の形態３の主要な効果》
以上、実施の形態３の方式を用いることで、実施の形態１で述べた各種効果に加え、分岐先に関係する複数の変数をその関係性（アンド関係、オア関係）を考慮した上で絞り込み、その関係性に応じた分岐先予測を行えるため、分岐先予測のヒット率を更に向上させることが可能になる。図２０の例では、分岐先に無関係な変数（“ＩＯ３”）は、時刻ｔ＝ｔ１８において履歴アンドマスクＡＭＳＫおよび履歴オアマスクＯＭＳＫのマスク対象ビットに定められる。また、オア演算によって分岐先を定める２個の変数（“ＩＯ１”，“ＩＯ２”）は、時刻ｔ＝ｔ３０において履歴オアマスクＯＭＳＫの予測対象ビットに定められ、その一方で、履歴アンドマスクＡＭＳＫのマスク対象ビットに定められる。これにより、その後は、当該２個の変数（“ＩＯ１”，“ＩＯ２”）のいずれか一方が‘Ｔ’を維持する限り、現状維持の分岐先予測が行われ、分岐先予測もヒットすることになる。
【０１７４】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。例えば、前述した実施の形態は、本発明を分かり易く説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施の形態の構成の一部を他の実施の形態の構成に置き換えることが可能であり、また、ある実施の形態の構成に他の実施の形態の構成を加えることも可能である。また、各実施の形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１７５】
例えば、前述した実施の形態１〜３の各図に示した演算式（例えば、図１０のステップＳ４０７の演算式等）は、特に、それに限定されるものではなく、同じ真理値表となる演算式であれば適宜変更可能である。また、図１８のステップＳ１００５，Ｓ１００９における各演算式は、場合によって、別の真理値表となる演算式を用いることも可能である。すなわち、これらの演算式（特にＦ３等）は、推論に基づく演算式となっているが、実際には、様々な方法で推論を行うことが可能であり、その方法に応じて演算式を適宜変更することも可能である。また、ステップＳ１００５，Ｓ１００９における各演算式Ｆ１〜Ｆ５は、必ずしも全てを適用する必要はなく、その一部を適用することも可能である。さらに、例えば、演算式Ｆ１の中身においても、４個のアンド演算式（それぞれは２個の無効マスクによるアンド演算式）を全て組み合わせる必要はなく、場合によっては、その一部を組み合わせることも可能である。
【符号の説明】
【０１７６】
ＡＭＳＫ  履歴アンドマスク
ＢＲＡＤＲ  分岐先アドレス
ＢＲＢＦ  分岐先バッファ
ＢＲＰ  分岐成否予測
ＢＲＰＣ  分岐予測回路
ＢＲＰｒ  分岐成否結果
ＤＣＣＨ  データキャッシュ
ＤＥＶ  半導体装置
ＤＪＧ  同値判定回路
ＤＪＧＨＲ  判定履歴記録回路
ＤＪＲ＿ＡＲ  同値判定結果領域
ＤＴ  ロードデータ
ＤＴ＿ＡＲ  データ領域
ＥＤＡＭＳＫ  非成立側無効アンドマスク
ＥＤＯＭＳＫ  非成立側無効オアマスク
ＨＲ  履歴記録
ＩＡＤＲ  命令アドレス
ＩＣＣＨ  命令キャッシュ
ＩＦＤ  フェッチ指示
ＬＤＣ  ロード制御回路
ＬＤＴ  最終ロードデータ
ＬＤＴ＿ＡＲ  最終ロードデータ領域
ＭＥＭ  メモリ
ＭＳＫ  履歴マスク
ＯＭＳＫ  履歴オアマスク
ＰＲＣ  プロセッサ回路
ＰＲＭＣ  プロセッサ本体回路
ＰＲＵ  プロセッサユニット（プロセッサ装置）
ＳＲＥＧ  履歴ビット領域（シフトレジスタ）
ＳＴＣ  ストア制御回路
ＴＤＡＭＳＫ  成立側無効アンドマスク
ＴＤＯＭＳＫ  成立側無効オアマスク
ＴＧ＿ＡＲ  タグ領域
ＵＰＢＦ  バッファ更新回路
【図１】
2018200545.tif 000003
【図２】
2018200545.tif 000004
【図３Ａ】
2018200545.tif 000005
【図３Ｂ】
2018200545.tif 000006
【図３Ｃ】
2018200545.tif 000007
【図４】
2018200545.tif 000008
【図５】
2018200545.tif 000009
【図６】
2018200545.tif 000010
【図７】
2018200545.tif 000011
【図８】
2018200545.tif 000012
【図９】
2018200545.tif 000013
【図１０】
2018200545.tif 000014
【図１１】
2018200545.tif 000015
【図１２】
2018200545.tif 000016
【図１３】
2018200545.tif 000017
【図１４】
2018200545.tif 000018
【図１５】
2018200545.tif 000019
【図１６】
2018200545.tif 000020
【図１７】
2018200545.tif 000021
【図１８】
2018200545.tif 000022
【図１９】
2018200545.tif 000023
【図２０】
2018200545.tif 000024
【図２１】
2018200545.tif 000025
【図２２】
2018200545.tif 000026
【図２３】
2018200545.tif 000027
【手続補正書】
【提出日】平成30年2月28日(2018.2.28)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００３６
【補正方法】変更
【補正の内容】
【００３６】
具体的には、例えば、図１のパラレルＩＯ回路ＰＩＯは、メモリマップドＩＯに基づくメモリアドレスにデータを書き込んだ場合、バスコントローラＢＳＣを介してデータキャッシュＤＣＣＨへ当該メモリアドレスのインバリッド要求を発行する。データキャッシュＤＣＣＨは、インバリッド要求を受信した場合、当該インバリッド要求に伴うメモリアドレスがタグ領域に登録されている場合には、対応するライン領域をインバリッド状態に設定する。プロセッサ回路ＰＲＣが当該インバリッド状態のライン領域に対してロード命令を発行した場合、当該ライン領域は、メモリＭＥＭからロードした最新のデータで書き換えられ、バリッド状態となる。このようにして、“ＩＯ１”および“ＩＯ２”の各ライン領域のデータは、プロセッサ回路ＰＲＣのストア命令を介さずに変更される。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００８７
【補正方法】変更
【補正の内容】
【００８７】
なお、ステップＳ４０８では、必ずしも全て‘０’である必要はなく、例えば‘０’のビット数によって判別を行ってよい。当該ビット数は、例えば、実験によって統計的に得られた値や、任意に設定可能な値とすることができる。さらに、別の分岐先予測方法を組み合わせ、例えば、ステップＳ４０８で全て‘０’でない場合には、当該別の分岐先予測方法を用いて更なる判別を行うようなことも可能である。また、履歴マスクＭＳＫが全て‘０’であるときを、ロードデータによらない分岐命令と判断し、当該別の分岐先予測方法を用いて更なる判別を加えることも可能である。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図１１
【補正方法】変更
【補正の内容】
【図１１】
2018200545.tif 000028
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図２３
【補正方法】変更
【補正の内容】
【図２３】
2018200545.tif 000029