(57)【要約】  複数の分岐先をとり得る分岐命令による分岐先を予測可能にする。  分岐先アドレステーブル（１１）は、複数の分岐先をとり得る分岐命令ごとに設けられる。各分岐先アドレステーブル（１１）は、それぞれに対応する分岐命令による過去の複数回の分岐先アドレスを履歴として記憶する。分岐先予測部（１２）は、分岐命令についての予測分岐先アドレスを、この分岐命令に対応する分岐先アドレステーブル（１１）に記憶された分岐先アドレスの履歴に基づいて予測する。予測の結果得られた予測分岐先アドレスは、例えば、予測分岐先アドレス記憶部（１３）において分岐命令に対応付けて記憶され、分岐先命令を先読みする際に命令フェッチ制御部（１４）によって参照される。
2012093489.tif 000002
【特許請求の範囲】
【請求項１】
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルと、
分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する分岐先予測部と、
を有することを特徴とする演算処理装置。
【請求項２】
分岐命令ごとに予測分岐先アドレスを記憶する予測分岐先アドレス記憶部と、
前記分岐先予測部によって予測された予測分岐先アドレスを、前記予測された予測分岐先アドレスに対応する分岐命令のアドレスに対応付けて前記予測分岐先アドレス記憶部に登録するアドレス登録部と、
をさらに有することを特徴とする請求の範囲第１項記載の演算処理装置。
【請求項３】
分岐命令をメモリからフェッチする際に、フェッチする分岐命令に対応付けて記憶された予測分岐先アドレスを、次にフェッチする命令のアドレスとして前記予測分岐先アドレス記憶部から取得する命令フェッチ制御部をさらに有することを特徴とする請求の範囲第２項記載の演算処理装置。
【請求項４】
分岐命令の実行が完了したとき、実行が完了した分岐命令についての予測分岐先アドレスが前記分岐先予測部によって予測され、前記予測された予測分岐先アドレスが前記予測分岐先アドレス記憶部に登録されることを特徴とする請求の範囲第２項または第３項記載の演算処理装置。
【請求項５】
前記分岐先予測部は、分岐命令の実行が完了したとき、当該分岐命令による予測分岐先アドレスを予測することを特徴とする請求の範囲第１項〜第３項のいずれか１項に記載の演算処理装置。
【請求項６】
前記分岐先予測部は、前記各分岐先アドレステーブルに登録された分岐先アドレスを登録順に出力させることで、予測分岐先アドレスを出力することを特徴とする請求の範囲第１項〜第５項のいずれか１項に記載の演算処理装置。
【請求項７】
前記分岐先予測部は、分岐命令の実行が完了したとき、実行が完了した分岐命令に対応する分岐先アドレステーブルから、当該分岐命令による分岐先と同一のアドレスが記憶されたエントリを探索し、前記同一のアドレスが記憶されたエントリを探索できなかった場合には、前記実行が完了した分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルにおける空きエントリのうちの先頭のエントリに登録するとともに、当該分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力し、前記同一のアドレスが記憶されたエントリを探索できた場合には、探索されたエントリの次のエントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力することを特徴とする請求の範囲第１項〜第３項いずれか１項に記載の演算処理装置。
【請求項８】
前記分岐先予測部は、分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから、前回の分岐命令の実行完了時に選択したエントリの次のエントリを選択して、選択したエントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力することを特徴とする請求の範囲第１項〜第３項のいずれか１項に記載の演算処理装置。
【請求項９】
前記分岐先予測部は、
実行が完了した分岐命令による分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに対して空きエントリがなくなるまで先頭エントリから順に登録し、かつ、
分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリを選択して、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから前回選択したエントリの次のエントリを選択して、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力する、
ことを特徴とする請求の範囲第１項〜第３項のいずれか１項に記載の演算処理装置。
【請求項１０】
前記分岐先予測部は、
実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に初めて成功するより前の第１の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリから順に登録するとともに、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに登録された分岐先アドレスを予測分岐先アドレスとして出力し、
実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に初めて成功した後の第２の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令に対応する分岐先アドレステーブルにおけるエントリのうち分岐先アドレスが登録されたエントリを先頭から順に選択し、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力する、
ことを特徴とする請求の範囲第１項〜第３項のいずれか１項に記載の演算処理装置。
【請求項１１】
前記分岐先予測部は、前記第２の期間において、当該分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに登録された分岐先アドレスを予測分岐先アドレスとして出力することを特徴とする請求の範囲第１０項記載の演算処理装置。
【請求項１２】
分岐命令ごとに設けられ、各分岐命令に対応する分岐先アドレステーブルのエントリをそれぞれ指し示す複数のポインタをさらに有し、
前記分岐先予測部は、
前記第１の期間では、分岐命令の実行が完了したとき、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスの予測分岐先アドレスとして出力させ、
前記第２の期間では、分岐命令の実行が完了したとき、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させる、
ことを特徴とする請求の範囲第１０項記載の演算処理装置。
【請求項１３】
分岐命令ごとに設けられ、各分岐命令に対応する分岐先アドレステーブルのエントリをそれぞれ指し示す複数のポインタをさらに有し、
前記分岐先予測部は、
前記第１の期間では、分岐命令の実行が完了したとき、当該分岐命令に対応するポインタが指し示す分岐先アドレステーブルのエントリに対して分岐先アドレスを登録するとともに、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定し、
前記第２の期間では、分岐命令の実行が完了したとき、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させる、
ことを特徴とする請求の範囲第１０項記載の演算処理装置。
【請求項１４】
前記分岐先予測部は、前記第２の期間において、分岐命令の実行が完了し、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功したとき、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように更新し、更新後のポインタが指し示すエントリに分岐先アドレスが登録されている場合には、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、前記更新後のポインタが指し示すエントリに分岐先のアドレスが登録されていない場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させることを特徴とする請求の範囲第１３項記載の演算処理装置。
【請求項１５】
演算処理装置が、複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測することを特徴とする分岐予測方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および分岐予測方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）などの演算処理装置においては、１つの命令の実行を待たずに、投機的に後続命令の処理を開始することで、演算性能の向上を図る技術が知られている。しかし、分岐命令を実行する場合には、命令を実行した後でないと次の実行する命令アドレスが判明しないため、後続命令の処理を開始することができない。そこで、次に実行する命令アドレスを予測することで、分岐命令を実行する前に後続命令の処理の開始を可能にする分岐予測技術が、広く使用されている。【０００３】
分岐予測技術の一例として、ブランチヒストリあるいはグローバルヒストリと呼ばれる、過去の分岐履歴を記憶した情報を用いて、分岐先を予測する技術が知られている。また、サブルーチンからのリターン命令による分岐の予測精度を高める技術として、サブルーチンのコール命令の実行時にリターン命令による戻り先のアドレスをリターンアドレススタックに格納しておき、リターン命令による分岐先をリターンアドレススタックを用いて予測するものがある。さらに、分岐命令の分岐先アドレスの生成に汎用レジスタを使用する場合の分岐予測技術として、分岐先アドレスの生成に使用した汎用レジスタの内容の変更を管理し、その内容変更に応じて、ブランチヒストリに基づく分岐予測結果が正しいか否かを判定するものがある。【０００４】
なお、他の参考技術として、分岐命令に対応する複数の分岐先アドレスとその分岐頻度とをシミュレーションにより求めてテーブルに登録し、このテーブルを基に次に実行されるアドレスを予測するようにした、デバッグ用のプログラム開発支援装置がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−１５５３７４号公報
【特許文献２】特開平４−２２５４２９号公報
【特許文献３】特開２００１−１８４２３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、分岐命令のうち、条件分岐、無条件分岐、サブルーチンコールなどの命令では、分岐先の命令アドレスは常に一定となる。これに対して、例えば、Ｃ言語のスイッチ・ケース文で示される命令のように、条件によって複数の分岐先をとり得るような命令もある。複数の分岐先をとり得る分岐命令を実行する場合、その分岐命令の後に分岐することが予測できたとしても、どの命令アドレスに分岐するかは事前の命令を実行するまでわからないことから、分岐先を予測することが難しかった。【０００７】
本発明はこのような課題に鑑みてなされたものであり、複数の分岐先をとり得る分岐命令による分岐先を予測可能にした演算処理装置および分岐予測方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、複数の分岐先アドレステーブルと、分岐先予測部とを有する演算処理装置が提供される。この演算処理装置において、分岐先アドレステーブルは、複数の分岐先をとり得る分岐命令ごとに設けられ、各分岐先アドレステーブルは、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴として記憶する。また、分岐先予測部は、分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する。【０００９】
また、上記目的を達成するために、分岐予測方法が提供される。この分岐予測方法では、演算処理装置によって次のような処理が実行される。演算処理装置は、複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する。
【発明の効果】
【００１０】
上記の演算処理装置および分岐予測方法では、複数の分岐先をとり得る分岐命令による分岐先を予測することができる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る演算処理装置の構成例を示す図である。
【図２】第２の実施の形態に係る演算処理装置の全体構成例を示す図である。
【図３】分岐予測部が備える分岐予測テーブルにおけるデータの構成例を示す図である。
【図４】分岐予測部の内部構成例を示す図である。
【図５】テーブルジャンプ命令を実行させるプログラムの例を示す図である。
【図６】テーブルジャンプ予測部の内部構成例を示す図である。
【図７】第２の実施の形態における分岐先アドレステーブルの構成例を示す図である。
【図８】第２の実施の形態におけるテーブルジャンプ命令の分岐先予測処理手順を示すフローチャートである。
【図９】第２の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。
【図１０】分岐先予測処理の具体例を示す図である。
【図１１】第３の実施の形態に係る演算処理装置の要部構成例を示す図である。
【図１２】第３の実施の形態におけるテーブルジャンプ命令の分岐先予測処理手順を示すフローチャートである。
【図１３】第３の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。
【図１４】分岐先予測処理の具体例を示す図（その１）である。
【図１５】分岐先予測処理の具体例を示す図（その２）である。
【図１６】分岐先予測処理の具体例を示す図（その３）である。
【図１７】第４の実施の形態に係る演算処理装置の要部構成例を示す図である。
【図１８】第４の実施の形態におけるテーブルジャンプ命令の分岐先予測処理手順を示すフローチャートである。
【図１９】第４の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。
【図２０】分岐先予測処理の具体例を示す図（その１）である。
【図２１】分岐先予測処理の具体例を示す図（その２）である。
【図２２】第５の実施の形態に係る演算処理装置の要部構成例を示す図である。
【図２３】第５の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。
【図２４】分岐先予測処理の具体例を示す図（その１）である。
【図２５】分岐先予測処理の具体例を示す図（その２）である。
【発明を実施するための形態】
【００１２】
以下、実施の形態について図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る演算処理装置の構成例を示す図である。
【００１３】
図１に示す演算処理装置１は、命令をメモリ（図示せず）の所定アドレスから読み出し、読み出した命令をデコードして、デコード結果に応じた処理を実行する装置である。この演算処理装置１は、例えば、一般的にＣＰＵ、ＭＰＵ（Microprocessor Unit）などと呼ばれる半導体回路として実現される。また、演算処理装置１は、分岐命令についての分岐先アドレスを予測し、その予測結果に基づいて、分岐命令の実行完了前に分岐先命令をメモリから先読みする機能を備えている。
【００１４】
演算処理装置１は、分岐命令のうち、複数の分岐先をとり得る分岐命令についての分岐先アドレスの予測処理を実現する処理機能として、複数の分岐先アドレステーブル１１と、分岐先予測部１２とを備えている。分岐先アドレステーブル１１は、複数の分岐先をとり得る分岐命令ごとに設けられ、各分岐命令による過去の複数回の分岐先アドレスをそれぞれ履歴として記憶する。分岐先予測部１２は、複数の分岐先をとり得る分岐命令についての予測分岐先アドレスを、この分岐命令に対応する分岐先アドレステーブル１１に記憶された分岐先アドレスの履歴に基づいて予測する。
【００１５】
また、分岐先予測部１２によって予測された予測分岐先アドレスは、予測分岐先アドレス記憶部１３に登録されてもよい。予測分岐先アドレス記憶部１３は、分岐命令のアドレスごとに１つの予測分岐先アドレスを保持することが可能になっている。この予測分岐先アドレス記憶部１３は、例えば、命令フェッチの制御を行う命令フェッチ制御部１４によって参照される。命令フェッチ制御部１４は、分岐命令をメモリからフェッチする際に、その分岐命令のアドレスに対応する予測分岐先アドレスを、予測分岐先アドレス記憶部１３から取得し、取得した予測分岐先アドレスを用いて分岐先の命令を先読みする。
【００１６】
以下、分岐先アドレステーブル１１への登録処理および分岐先の予測処理について説明する。なお、以下の第１の実施の形態の説明では、分岐先アドレステーブル１１への登録処理も分岐先予測部１２が行うものとするが、分岐先アドレステーブル１１への登録処理は分岐先予測部１２とは別の処理部が行ってもよい。また、以下の第１の実施の形態の説明では、複数の分岐先をとり得る分岐命令を単に「分岐命令」と呼称する。
【００１７】
分岐命令の実行が完了し、その分岐命令による分岐先のアドレスが確定すると、分岐先予測部１２は、実行が完了した分岐命令に対応する分岐先アドレステーブル１１を選択する。そして、分岐先予測部１２は、選択した分岐先アドレステーブル１１に対して、確定した分岐先のアドレスを登録する。
【００１８】
ただし、分岐先アドレステーブル１１への分岐先アドレスの登録は、必要に応じて行われればよい。例えば、分岐先予測部１２は、分岐先アドレステーブル１１における空きエントリがなくなるまで、分岐先アドレスを登録する。あるいは、分岐先予測部１２は、実行が完了した分岐命令について、分岐先予測部１２が決定した予測分岐先アドレスに基づく分岐先の予測に成功したか否かに応じて、分岐先アドレスを登録するか否かを決定してもよい。例えば、分岐先予測部１２は、分岐先の予測を開始してから、初めて予測に成功する前までの期間において、分岐命令の実行が完了されるたびに分岐先アドレスを分岐先アドレステーブル１１に順次登録する。そして、分岐先予測部１２は、予測に成功した後では分岐先アドレスの登録を行わないようにする。
【００１９】
分岐先予測部１２は、１つの分岐先アドレステーブル１１に登録された分岐先アドレスの履歴に基づいて、その分岐先アドレステーブル１１に対応する分岐命令についての予測分岐先アドレスを決定する。分岐先予測部１２は、各分岐先アドレステーブル１１に登録された分岐先アドレスのうち１つを、予測分岐先アドレスとして選択し、予測分岐先アドレス記憶部１３に登録する。ある分岐命令に対応する分岐先アドレステーブル１１から出力された予測分岐先アドレスは、予測分岐先アドレス記憶部１３において、同じ分岐命令に対応付けて登録される。
【００２０】
予測分岐先アドレスの決定は、分岐命令の実行が完了し、確定した分岐先アドレスを分岐先アドレステーブル１１に反映する処理が実行されたタイミングで行われればよい。分岐先予測部１２は、例えば、分岐先アドレステーブル１１に十分な数の分岐先アドレスが登録された状態であれば、分岐命令が完了するごとに、分岐先アドレステーブル１１内のエントリを先頭から順にシフトさせながら選択していく。そして、分岐先予測部１２は、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとして予測分岐先アドレス記憶部１３に登録する。
【００２１】
なお、演算処理装置１においては、分岐先予測部１２によって決定された予測分岐先アドレスが、予測分岐先アドレス記憶部１３を介さずに、命令フェッチ制御部１４から直接的に参照されるような構成とされてもよい。
【００２２】
以上の演算処理装置１では、分岐先予測部１２は、分岐命令ごとに記憶された分岐先アドレスの履歴に基づいて、分岐命令ごとに１つの予測分岐先アドレスを予測する。従って、複数の分岐先をとり得る分岐命令についての予測分岐先アドレスを予測することが可能になり、演算処理装置１における分岐先の予測精度が向上し、演算処理装置１の処理性能を向上させることができる。
【００２３】
〔第２の実施の形態〕
図２は、第２の実施の形態に係る演算処理装置の全体構成例を示す図である。
図２に示す演算処理装置１００は、命令フェッチ制御部１１１、命令キャッシュ制御部１１２、メモリ１１３、命令バッファ１１４、デコーダ１１５、命令実行制御部１１６、演算部１１７、オペランドキャッシュ制御部１１８、分岐命令実行制御部１１９、命令完了管理部１２０、分岐予測部１２１およびプログラムカウンタ１２２を備える。
【００２４】
命令フェッチ制御部１１１は、命令キャッシュ制御部１１２に対して、次にフェッチさせるアドレスを出力し、命令フェッチを要求する。命令フェッチ制御部１１１は、フェッチさせる命令のアドレスを、プログラムカウンタ１２２のカウント値、分岐予測部１２１から出力された予測分岐先のアドレス、分岐命令実行制御部１１９からの再命令フェッチ要求などに基づいて決定する。また、命令フェッチ制御部１１１は、分岐予測部１２１から出力された、予測分岐先アドレスなどを含む分岐予測情報を、分岐命令実行制御部１１９に通知する。
【００２５】
命令キャッシュ制御部１１２は、その内部に、メモリ１１３に記憶された命令をキャッシュする命令キャッシュ（図示せず）を備える。命令キャッシュ制御部１１２は、命令フェッチ制御部１１１から出力されたアドレスに基づいて、命令キャッシュから命令を読み出し、読み出した命令を命令バッファ１１４に格納する。
【００２６】
デコーダ１１５は、命令バッファ１１４に格納された命令を読み出してデコードする。デコーダ１１５は、デコードした命令が分岐命令である場合には、デコードした命令を分岐命令実行制御部１１９に出力し、デコードした命令が分岐命令以外の命令である場合には、デコードした命令を命令実行制御部１１６に出力する。また、デコーダ１１５は、デコードした命令の種類に関係なく、デコードした命令を命令完了管理部１２０に出力する。
【００２７】
命令実行制御部１１６は、例えばリザベーションステーションを備え、デコーダ１１５からの命令を演算部１１７またはオペランドキャッシュ制御部１１８に出力して実行させる。なお、リザベーションステーションは、デコーダ１１５によってデコードされた命令をキューイングしておき、投入可能な命令から順次、演算部１１７またはオペランドキャッシュ制御部１１８に出力するように制御する。
【００２８】
演算部１１７は、例えば汎用の演算器を備え、命令実行制御部１１６からの命令に応じた演算を実行する。演算を実行した演算部１１７は、演算結果を図示しないレジスタなどに書き込むとともに、命令実行の完了を命令完了管理部１２０に報告する。
【００２９】
オペランドキャッシュ制御部１１８は、その内部に、メモリ１１３に記憶されたデータをキャッシュするオペランドキャッシュを備える。オペランドキャッシュ制御部１１８は、例えば、命令実行制御部１１６からのロード命令に基づいてオペランドアドレスを生成し、生成したオペランドアドレスに対応するデータをオペランドキャッシュから読み出す。オペランドキャッシュ制御部１１８は、オペランドキャッシュからのデータ読み出しを実行すると、命令実行の完了を命令完了管理部１２０に報告する。
【００３０】
分岐命令実行制御部１１９は、例えば、その内部に分岐リザベーションステーションを備え、デコーダ１１５によってデコードされた分岐命令を分岐リザベーションステーションに登録することで、分岐命令の実行を管理する。分岐命令実行制御部１１９は、命令フェッチ制御部１１１から受信した分岐予測情報と、デコーダ１１５から受信した分岐命令の実行結果とを比較し、分岐予測の成否を判定する。また、分岐命令実行制御部１１９は、分岐命令の実行が完了して分岐予測の成否を判定すると、命令実行の完了を命令完了管理部１２０に報告するとともに、分岐予測の成否、分岐命令および分岐先命令の各アドレスなどの情報を、分岐予測部１２１に出力する。
【００３１】
命令完了管理部１２０は、デコーダ１１５によってデコードされた命令の実行状態を管理する。命令完了管理部１２０は、例えば、命令実行制御部１１６や分岐命令実行制御部１１９によってアウトオブオーダで実行された命令を、インオーダで完了させる。命令完了管理部１２０は、命令を完了させるたびに、プログラムカウンタ１２２のカウント値をカウントアップさせる。
【００３２】
分岐予測部１２１は、後述するように、分岐命令のアドレスと予測分岐先のアドレスとが対応付けて登録された分岐予測テーブルを備える。分岐予測部１２１は、命令フェッチ制御部１１１から次にフェッチさせる命令のアドレスを受信し、受信したアドレスを用いて分岐予測テーブルを検索する。次にフェッチさせる命令が分岐命令の場合、分岐予測部１２１は、検索結果として、予測分岐先のアドレスなどを含む分岐予測情報を分岐予測テーブルから取得し、取得した分岐予測情報を命令フェッチ制御部１１１に出力する。また、分岐予測部１２１は、分岐命令実行制御部１１９から受信した、分岐予測の成否、分岐命令および分岐先命令の各アドレスの情報などに基づいて、分岐命令による分岐先を予測し、予測結果に応じて分岐予測テーブルを更新する。
【００３３】
プログラムカウンタ１２２は、命令完了管理部１２０からの要求に応じてカウント値をカウントアップする。また、プログラムカウンタ１２２は、分岐命令実行制御部１１９からの分岐先アドレスによってカウント値を更新する。
【００３４】
次に、分岐予測部について説明する。まず、図３は、分岐予測部が備える分岐予測テーブルにおけるデータの構成例を示す図である。
分岐予測部１２１が備える分岐予測テーブル１３１は、例えばセットアソシアティブの記憶装置であり、複数のウェイを有する。分岐予測テーブル１３１の各ウェイには、タグとして分岐命令アドレス（またはそのアドレスの一部）が登録され、各分岐命令アドレスに対応付けて、分岐命令の種別を示す分岐命令種別、分岐命令についての種別以外の所定の情報を示すフラグ、および予測分岐先アドレスが登録されている。
【００３５】
図４は、分岐予測部の内部構成例を示す図である。なお、図４では、分岐予測部１２１に加えて命令フェッチ制御部１１１および分岐命令実行制御部１１９も示し、分岐予測部１２１の動作を、命令フェッチ制御部１１１および分岐命令実行制御部１１９の動作とともに説明する。
【００３６】
分岐予測部１２１は、分岐予測テーブル１３１、グローバルヒストリ１３２、テーブルジャンプ予測部１３３、分岐予測制御部１３４、投機リターンアドレススタック１３５、リターンアドレススタック１３６およびセレクタ１３７を備えている。
【００３７】
図３に示したように、分岐予測テーブル１３１には、分岐命令アドレスと予測分岐先アドレスとが対応付けて記憶されている。分岐予測テーブル１３１に対する登録処理は、分岐予測制御部１３４によって行われる。
【００３８】
命令フェッチ制御部１１１は、フェッチさせる命令のアドレスを命令キャッシュ制御部１１２に出力する際に、同じアドレスを分岐予測テーブル１３１にも出力し、分岐予測テーブル１３１に対して検索を要求する。命令フェッチ制御部１１１から出力されたアドレスがタグに登録されたウェイが分岐予測テーブル１３１から検索された場合、検索されたウェイ内の情報と、検索されたウェイのウェイ番号とが、分岐予測情報として、セレクタ１３７を介して命令フェッチ制御部１１１に出力される。
【００３９】
ただし、分岐予測テーブル１３１から検索されたウェイにおける分岐命令アドレスがサブルーチンコール命令を示すものであった場合、分岐予測テーブル１３１は、検索された分岐命令アドレスを投機リターンアドレススタック１３５に出力し、投機リターンアドレススタック１３５は、分岐予測テーブル１３１から出力された分岐命令アドレスに対応する予測分岐先アドレスを保持する。後述するように、分岐予測テーブル１３１から検索されたウェイにおける分岐命令アドレスがサブルーチンリターン命令であった場合には、投機リターンアドレススタック１３５またはリターンアドレススタック１３６から取得された予測分岐先アドレスが、セレクタ１３７を介して命令フェッチ制御部１１１に出力される。
【００４０】
命令フェッチ制御部１１１は、セレクタ１３７から分岐予測情報を受信した場合、受信した分岐予測情報内の分岐予測先アドレスを命令キャッシュ制御部１１２に出力し、命令フェッチを要求する。これとともに、命令フェッチ制御部１１１は、セレクタ１３７から受信した分岐予測情報を、分岐命令実行制御部１１９にも出力する。
【００４１】
分岐命令実行制御部１１９は、命令フェッチ制御部１１１から受信した分岐予測情報と、デコーダ１１５から受信した分岐命令の実行結果とを比較し、分岐予測の成否を判定する。分岐命令実行制御部１１９は、分岐予測が間違っていたことが判明した場合、分岐先命令の投機実行を図示しない命令実行部にキャンセルさせるとともに、命令フェッチ制御部１１１に対して、正しい分岐先アドレスを通知して分岐先命令の再フェッチを要求する。
【００４２】
また、分岐命令実行制御部１１９は、分岐命令の実行が完了して分岐予測の成否を判定すると、命令実行の完了を命令完了管理部１２０に報告する。これとともに、分岐命令実行制御部１１９は、分岐命令実行結果を分岐予測部１２１に出力する。分岐命令実行結果には、実行完了信号、実行された分岐命令のアドレス、実行された分岐命令の種別情報、分岐先命令のアドレス、分岐予測の成否を示す成否情報、予測分岐先アドレスを登録すべき分岐予測テーブル１３１内のウェイ番号などを含む。
【００４３】
グローバルヒストリ１３２は、分岐命令実行制御部１１９から出力される分岐命令実行結果のうち、条件分岐命令についての実行結果を内部に取り込んで動作する。グローバルヒストリ１３２は、取り込んだ分岐命令実行結果に基づいて、条件分岐命令の実行による分岐／非分岐の履歴を記憶し、記憶した履歴に基づいて予測分岐先アドレスを出力する。
【００４４】
例えば、グローバルヒストリ１３２は、取り込んだ分岐命令実行結果に基づき、過去に発生した連続分岐回数および連続非分岐回数を記憶する。グローバルヒストリ１３２は、現在連続している分岐の回数が所定値になると、次回を非分岐と予測し、現在連続している非分岐の回数が所定値になると、次回を分岐と予測する。グローバルヒストリ１３２は、次回を分岐と予測した場合に、実行された分岐命令に対応する分岐先のアドレスを、予測分岐先のアドレスとして分岐予測制御部１３４に出力し、分岐予測テーブル１３１に登録させる。
【００４５】
テーブルジャンプ予測部１３３は、分岐命令実行制御部１１９から出力される分岐命令実行結果のうち、サブルーチンリターン命令を除く、複数の分岐先をとり得る分岐命令についての実行結果を、内部に取り込んで動作する。ここで、テーブルジャンプ予測部１３３が取り込む命令には、代表的な例として、Ｃ言語のスイッチ・ケース文で示される「テーブルジャンプ」と呼ばれる命令を含む。そこで、以下の説明では、テーブルジャンプ予測部１３３が取り込む命令を、「テーブルジャンプ命令」と呼ぶことにする。
【００４６】
テーブルジャンプ予測部１３３は、後述するように、１つ以上のテーブルジャンプ命令のそれぞれのアドレスに対して、実行された複数回の分岐先アドレスの履歴を保持可能なテーブルを備える。テーブルジャンプ予測部１３３は、内部のテーブルを用いて、テーブルジャンプ命令に対応する予測分岐先アドレスを決定し、決定した予測分岐先アドレスを分岐予測制御部１３４に出力して、分岐予測テーブル１３１に登録させる。
【００４７】
ここで、図５は、テーブルジャンプ命令を実行させるプログラムの例を示す図である。図５では、Ｃ言語のスイッチ・ケース文を用いて記述されたプログラムの例を示す。
図５に示したプログラムが実行されると、条件式ａの値に応じて異なる処理が実行される。条件式ａの値がａ１である場合、処理Ｐａが実行され、条件式ａの値がａ２である場合、処理Ｐｂが実行され、条件式ａの値がａ１およびａ２以外である場合、処理Ｐｃが実行される。すなわち、演算処理装置１００は、図５に示したプログラムに従って命令を実行したとき、条件式ａの値に応じて異なる分岐先の命令を実行する。
【００４８】
以下、図４に戻って説明する。
分岐予測制御部１３４は、分岐命令の実行が完了し、分岐命令実行制御部１１９から分岐命令実行結果が出力されると、予測分岐先アドレスを分岐予測テーブル１３１に登録する。条件分岐命令の実行が完了した場合、分岐予測制御部１３４は、グローバルヒストリ１３２から出力された予測分岐先アドレスを分岐予測テーブル１３１に登録する。また、テーブルジャンプ命令の実行が完了した場合、分岐予測制御部１３４は、テーブルジャンプ予測部１３３から出力された予測分岐先アドレスを分岐予測テーブル１３１に登録する。さらに、分岐予測制御部１３４は、例えば、サブルーチンコール命令やサブルーチンリターン命令の実行が完了した場合など、グローバルヒストリ１３２およびテーブルジャンプ予測部１３３から予測分岐先アドレスが出力されない場合には、分岐命令実行制御部１１９から出力された分岐命令実行結果に含まれる分岐先アドレスを、予測分岐先アドレスとして分岐予測テーブル１３１に登録する。
【００４９】
分岐予測制御部１３４は、予測分岐先アドレスとともに、この予測分岐先アドレスに対応する分岐命令アドレス、種別情報および各種フラグを、分岐予測テーブル１３１内の同じウェイに登録する。分岐予測制御部１３４は、分岐予測テーブル１３１に登録する分岐命令アドレス、種別情報および各種フラグを、分岐命令実行制御部１１９から出力された分岐命令実行結果から取得する。
【００５０】
また、分岐予測制御部１３４は、実行された分岐命令に対応するウェイがすでに分岐予測テーブル１３１に存在する場合には、そのウェイ内のタグ以外の情報を新たな情報によって更新する。この場合、分岐予測制御部１３４は、分岐予測テーブル１３１のウェイのうち、分岐命令実行制御部１１９からの分岐命令実行結果に含まれるウェイ番号が示すウェイに対して、情報を登録する。一方、分岐予測制御部１３４は、実行された分岐命令に対応するウェイが分岐予測テーブル１３１に存在しない場合には、分岐予測テーブル１３１内の空いているウェイに対して、タグを含む情報を登録する。ただし、分岐予測制御部１３４は、分岐予測テーブル１３１に空いているウェイがなければ、例えばＬＲＵ（Least Recently Used）またはそれに準じる方法などでウェイを選択し、選択したウェイに対してタグを含む情報を登録する。なお、分岐予測制御部１３４は、例えば、分岐命令アドレスと、分岐予測テーブル１３１内のウェイとの対応表に基づいて、分岐予測テーブル１３１における予測分岐先アドレスの登録先のウェイを指定してもよい。
【００５１】
投機リターンアドレススタック１３５は、サブルーチンリターン命令についての戻り先アドレスを、このサブルーチンリターン命令に対応するサブルーチンコール命令の実行前に投機的に予測する。投機リターンアドレススタック１３５は、前述のように、分岐予測テーブル１３１から検索されたウェイにおける分岐命令アドレスがサブルーチンコール命令のアドレスであった場合に、検索された分岐命令アドレスを分岐予測テーブル１３１から取得する。投機リターンアドレススタック１３５は、検索されたサブルーチンコール命令のアドレスをこのサブルーチンコール命令に対応するサブルーチンリターン命令のアドレスに変換する演算を行い、演算結果をスタックに保持する。投機リターンアドレススタック１３５は、例えば、サブルーチンコール命令のアドレスに所定の値を加算することで、このサブルーチンコール命令に対応するサブルーチンリターン命令のアドレスを算出する。投機リターンアドレススタック１３５は、スタックに保持されたアドレスを、サブルーチンリターン命令についての予測戻り先アドレス（すなわち予測分岐先アドレス）として出力する。
【００５２】
リターンアドレススタック１３６は、分岐命令実行制御部１１９からの分岐命令実行結果に基づき、実行が完了したサブルーチンコール命令に対応するサブルーチンリターン命令の戻り先アドレスを記憶する。リターンアドレススタック１３６は、実行が完了したサブルーチンコール命令のアドレスを、このサブルーチンコール命令に対応するサブルーチンリターン命令のアドレスに変換する演算を行い、演算結果をスタックに保持する。リターンアドレススタック１３６は、例えば、サブルーチンコール命令のアドレスに所定の値を加算することで、このサブルーチンコール命令に対応するサブルーチンリターン命令のアドレスを算出する。リターンアドレススタック１３６は、スタックに保持されたアドレスを、サブルーチンリターン命令についての予測戻り先アドレス（すなわち予測分岐先アドレス）として出力する。
【００５３】
セレクタ１３７は、命令フェッチ制御部１１１から分岐予測テーブル１３１に対して検索が要求されると、分岐予測テーブル１３１から検索されたウェイに基づく分岐予測情報を、命令フェッチ制御部１１１に出力する。この分岐予測情報には、予測分岐先アドレスが含まれる。ただし、セレクタ１３７は、分岐予測テーブル１３１に対してサブルーチンリターン命令の検索が要求された場合には、投機リターンアドレススタック１３５またはリターンアドレススタック１３６のうち有効な予測分岐先アドレスを保持するスタックから、予測分岐先アドレスを取得して、命令フェッチ制御部１１１に出力する。
【００５４】
次に、テーブルジャンプ予測部１３３における処理について説明する。図６は、テーブルジャンプ予測部の内部構成例を示す図である。
テーブルジャンプ予測部１３３には、分岐先アドレステーブル１４０が複数設けられる。分岐先アドレステーブル１４０は、分岐命令ごとに用意され、各分岐先アドレステーブル１４０には、１つの分岐命令アドレスと、実行された分岐命令による複数の分岐先アドレスとが保持できるようになっている。
【００５５】
また、テーブルジャンプ予測部１３３は、分岐命令識別部１５１、テーブル管理部１５２およびテーブル選択部１５３を備えている。
分岐命令識別部１５１は、分岐命令の実行が完了したとき、分岐命令実行制御部１１９から出力された分岐命令実行結果に含まれる種別情報に基づいて、出力された分岐命令実行結果がテーブルジャンプ命令についての実行結果かを判定する。分岐命令識別部１５１は、分岐命令実行結果がテーブルジャンプ命令についての実行結果であると判定した場合、テーブル管理部１５２の処理を開始させる。
【００５６】
テーブル管理部１５２は、分岐先アドレステーブル１４０の生成および検索や、予測分岐先アドレスの決定などの処理を行う。テーブル管理部１５２は、実行が完了したテーブルジャンプ命令のアドレスが登録された分岐先アドレステーブル１４０を選択する。このとき、実行が完了したテーブルジャンプ命令のアドレスが登録された分岐先アドレステーブル１４０が存在しない場合には、テーブル管理部１５２は、実行が完了したテーブルジャンプ命令のアドレスを登録した新たな分岐先アドレステーブル１４０を生成する。テーブル管理部１５２は、テーブル選択部１５３に対してテーブル選択信号を出力し、選択した、または新たに生成した分岐先アドレステーブル１４０からの出力を選択させる。
【００５７】
テーブル管理部１５２は、選択した、または新たに生成した分岐先アドレステーブル１４０に対して、分岐命令実行結果に含まれる分岐先アドレスを登録する。これとともに、テーブル管理部１５２は、分岐先アドレステーブル１４０のエントリの中から、予測分岐先アドレスとする分岐先アドレスが保持されたエントリを選択し、選択したエントリから予測分岐先アドレスを出力させるように指示するエントリ選択信号を出力する。
【００５８】
テーブル選択部１５３は、テーブル管理部１５２からのテーブル選択信号に基づいて、分岐先アドレステーブル１４０のうちの１つを選択する。テーブル選択部１５３は、選択した分岐先アドレステーブル１４０から出力された予測分岐先アドレスを、分岐予測制御部１３４を介して分岐予測テーブル１３１に出力する。
【００５９】
図７は、第２の実施の形態における分岐先アドレステーブルの構成例を示す図である。なお、図７では、参考のため、テーブル管理部１５２およびテーブル選択部１５３についても図示している。
【００６０】
分岐先アドレステーブル１４０のそれぞれには、情報を保持する領域として、インデックス部１４１および分岐先アドレス記憶部１４２が設けられている。
インデックス部１４１には、テーブルバリッドとインデックスとが保持される。テーブルバリッドは、分岐先アドレステーブル１４０が有効であるか否か（すなわち、分岐先アドレステーブル１４０に、分岐命令のアドレスと少なくとも１つの分岐先アドレスとが登録されているか否か）を示すフラグである。テーブルバリッドは、値が「１」のとき、分岐先アドレステーブル１４０が有効であることを示し、値が「０」のとき、分岐先アドレステーブル１４０が有効でないことを示す。インデックスには、分岐命令のアドレスの全体または一部が登録される。インデックスに登録された値により、分岐先アドレステーブル１４０がどのテーブルジャンプ命令に対応するかが識別される。
【００６１】
分岐先アドレス記憶部１４２には、バリッドフラグ（図７では「Ｖ」と表記）と分岐先アドレスとをそれぞれ含む複数のエントリが設けられている。テーブル管理部１５２の制御により、分岐先アドレス記憶部１４２では先頭のエントリから順に分岐先アドレスが登録され、分岐先アドレスが登録されたエントリではバリッドフラグが「１」とされる。
【００６２】
また、分岐先アドレステーブル１４０のそれぞれには、エントリ選択部１４３が設けられている。エントリ選択部１４３は、テーブル管理部１５２からのエントリ選択信号に応じて、分岐先アドレステーブル１４０内の１つのエントリを選択し、選択したエントリから出力された予測分岐先アドレスを、テーブル選択部１５３に出力する。
【００６３】
図８は、第２の実施の形態におけるテーブルジャンプ命令の分岐先予測処理手順を示すフローチャートである。
［ステップＳ１１］分岐命令の実行が完了すると、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる実行完了信号がオンを示す「１」になる。このとき、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる、実行完了信号以外の信号が有効になる。
【００６４】
分岐命令識別部１５１は、実行完了信号が「１」になったことを検知すると、分岐命令実行制御部１１９から分岐命令実行結果に含まれる種別情報に基づいて、実行が完了した命令がテーブルジャンプ命令であるかを判定する。実行が完了した命令がテーブルジャンプ命令であると分岐命令識別部１５１が判定すると、例えば、分岐命令識別部１５１からテーブル管理部１５２に対してイネーブル信号が出力されることにより、ステップＳ１２以降の処理が実行される。
【００６５】
［ステップＳ１２］テーブル管理部１５２は、テーブルジャンプ予測部１３３に含まれる複数の分岐先アドレステーブル１４０のそれぞれにおけるインデックス部１４１を参照する。そして、テーブル管理部１５２は、複数の分岐先アドレステーブル１４０の中から、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる分岐命令アドレスがインデックスとして登録されたテーブルを検索する。このステップＳ１２では、インデックス部１４１において、分岐命令実行結果に含まれる分岐命令アドレスがインデックスとして登録され、なおかつテーブルバリッドが「１」である分岐先アドレステーブル１４０が検索される。
【００６６】
［ステップＳ１３］テーブル管理部１５２は、ステップＳ１２の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル１４０が存在した場合（Ｓ１３：Ｙｅｓ）には、その分岐先アドレステーブル１４０を以後の処理対象として選択し、ステップＳ１６の処理を実行する。一方、テーブル管理部１５２は、ステップＳ１２の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル１４０が存在しない場合（Ｓ１３：Ｎｏ）には、ステップＳ１４の処理を実行する。
【００６７】
［ステップＳ１４］テーブル管理部１５２は、インデックス部１４１のテーブルバリッドが無効を示す「０」である分岐先アドレステーブル１４０を、以後の処理対象として新規に選択する。このとき、テーブル管理部１５２は、選択した分岐先アドレステーブル１４０におけるテーブルバリッドを「１」に更新する。
【００６８】
なお、テーブル管理部１５２は、例えば、ラウンドロビンカウンタを用いて、分岐先アドレステーブル１４０を次のように管理する。分岐先アドレステーブル１４０の数をＮ個（ただし、Ｎは１以上の整数）とすると、ラウンドロビンカウンタのカウント初期値は「０」であり、カウント値の上限値は「Ｎ−１」である。ステップＳ１４では、テーブル管理部１５２は、ラウンドロビンカウンタの現在のカウント値に対応する分岐先アドレステーブル１４０を処理対象として選択する。このとき、テーブル管理部１５２は、選択した分岐先アドレステーブル１４０におけるテーブルバリッドを「１」に更新するとともに、ラウンドロビンカウンタのカウント値に「１」を加算する。
【００６９】
［ステップＳ１５］テーブル管理部１５２は、ステップＳ１４で選択した分岐先アドレステーブル１４０に対して、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる分岐命令アドレスをインデックスとして登録する。この後、ステップＳ１６の処理が実行される。
【００７０】
［ステップＳ１６］テーブル管理部１５２は、処理対象として選択した分岐先アドレステーブル１４０における登録情報に基づいて、予測分岐先アドレスを決定する。このステップＳ１６では、テーブル管理部１５２は、エントリ選択部１４３に対して、分岐先アドレス記憶部１４２のエントリのうち１つを選択させ、選択させたエントリに登録されたアドレスを予測分岐先アドレスとしてテーブル選択部１５３に出力させる。なお、このステップＳ１６の処理については、図９において詳しく説明する。
【００７１】
［ステップＳ１７］テーブル管理部１５２は、テーブル選択部１５３に対して選択信号を出力することで、処理対象として選択した分岐先アドレステーブル１４０におけるエントリ選択部１４３からの出力を選択させる。なお、選択信号の出力自体は、ステップＳ１３で分岐命令アドレスが登録された分岐先アドレステーブル１４０の存在を確認してから、あるいは、ステップＳ１４で分岐先アドレステーブル１４０を新規に選択してから、ステップＳ１７の実行タイミングまでのどの段階で行われてもよい。
【００７２】
エントリ選択部１４３から出力された予測分岐先アドレスは、テーブル選択部１５３を通じて分岐予測制御部１３４に出力される。分岐予測制御部１３４は、テーブル選択部１５３から出力された予測分岐先アドレスを、この予測分岐先アドレスに対応する分岐命令アドレス、分岐命令種別および各種フラグとともに、分岐予測テーブル１３１に登録する。このとき、分岐予測制御部１３４は、分岐予測テーブル１３１に登録する分岐命令アドレス、分岐命令種別および各種フラグを、分岐命令実行制御部１１９から出力された分岐命令実行結果から取得する。なお、分岐予測制御部１３４は、実行された分岐命令に対応するウェイがすでに分岐予測テーブル１３１に存在する場合には、分岐命令実行制御部１１９からの分岐命令実行結果に含まれるウェイ番号が示す、分岐予測テーブル１３１内のウェイに対して、予測分岐先アドレス、分岐命令種別および各種フラグを上書きする。
【００７３】
図９は、第２の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。この図９の処理は、図８のステップＳ１６に対応するものである。
［ステップＳ２１］テーブル管理部１５２は、処理対象として選択した分岐先アドレステーブル１４０における分岐先アドレス記憶部１４２から、実行が完了した分岐命令についての分岐先アドレス（すなわち、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる分岐先アドレス）が登録されたエントリを検索する。
【００７４】
［ステップＳ２２］テーブル管理部１５２は、ステップＳ２１の検索処理により、分岐命令実行結果に含まれる分岐先アドレスが登録されたエントリとしてｎ番目（ただし、ｎは０を初期値とする整数）のエントリがマッチした場合（Ｓ２２：Ｙｅｓ）には、ステップＳ２３の処理を実行する。一方、テーブル管理部１５２は、分岐命令実行結果に含まれる分岐先アドレスが登録されたエントリが存在しない場合（Ｓ２２：Ｎｏ）には、ステップＳ２５の処理を実行する。
【００７５】
［ステップＳ２３］テーブル管理部１５２は、分岐先アドレス記憶部１４２のエントリのうち、ステップＳ２２でマッチしたエントリの次のエントリ（（ｎ＋１）番目のエントリ）が有効であるかを判定する。ここで、（ｎ＋１）番目のエントリが有効である場合（Ｓ２３：Ｙｅｓ）とは、（ｎ＋１）番目のエントリにおいて、バリッドフラグが「１」であり、分岐先アドレスが登録されている場合である。この場合、テーブル管理部１５２は、ステップＳ２４の処理を実行する。一方、（ｎ＋１）番目のエントリが有効でない場合（Ｓ２３：Ｎｏ）とは、（ｎ＋１）番目のエントリのバリッドフラグが「０」である場合か、あるいは、ｎ番目のエントリが分岐先アドレス記憶部１４２の末端のエントリであるために（ｎ＋１）番目のエントリが存在しない場合である。このように（ｎ＋１）番目のエントリが有効でない場合、テーブル管理部１５２は、ステップＳ２７の処理を実行する。
【００７６】
［ステップＳ２４］テーブル管理部１５２は、エントリ選択部１４３に対して選択信号を出力して、ステップＳ２２でマッチしたエントリの次のエントリ（（ｎ＋１）番目のエントリ）からの出力を選択させる。これにより、（ｎ＋１）番目のエントリに登録された分岐先アドレスが、予測分岐先アドレスとして、エントリ選択部１４３を通じてテーブル選択部１５３に出力される。
【００７７】
［ステップＳ２５］分岐命令実行結果に含まれる分岐先アドレスが登録されたエントリが、分岐先アドレス記憶部１４２に存在しない場合（Ｓ２２：Ｎｏ）、テーブル管理部１５２は、分岐先アドレス記憶部１４２に、バリッドフラグが「０」である空きエントリがあるかを判定する。テーブル管理部１５２は、空きエントリが存在する場合（Ｓ２５：Ｙｅｓ）には、ステップＳ２６の処理を実行し、空きエントリが存在しない場合（Ｓ２５：Ｎｏ）には、ステップＳ２７の処理を実行する。
【００７８】
［ステップＳ２６］テーブル管理部１５２は、分岐先アドレス記憶部１４２の空きエントリのうち、最も番号が小さいエントリにおいて、バリッドフラグを「１」に更新するとともに、分岐命令実行結果に含まれる分岐先アドレスを登録する。この後、ステップＳ２７の処理が実行される。
【００７９】
［ステップＳ２７］テーブル管理部１５２は、エントリ選択部１４３に対して選択信号を出力して、分岐先アドレス記憶部１４２の先頭エントリ（０番目のエントリ）からの出力を選択させる。これにより、分岐先アドレス記憶部１４２の先頭エントリに登録された分岐先アドレスが、予測分岐先アドレスとして、エントリ選択部１４３を通じてテーブル選択部１５３に出力される。
【００８０】
以上の図９の処理では、テーブル管理部１５２は、分岐先アドレス記憶部１４２から、テーブルジャンプ命令の実行後における分岐先アドレスと一致するアドレスが登録されたエントリを検索する。テーブルジャンプ命令の実行後における分岐先アドレスが分岐先アドレス記憶部１４２に記憶されていない場合、テーブル管理部１５２は、分岐先アドレス記憶部１４２の最も番号が小さい空きエントリに、分岐先アドレスを登録する。この場合、テーブル管理部１５２は、テーブル管理部１５２の先頭エントリに登録された分岐先アドレスを、予測分岐先アドレスに決定する。一方、テーブルジャンプ命令の実行後における分岐先アドレスが登録されたエントリが分岐先アドレス記憶部１４２から検索された場合、テーブル管理部１５２は、分岐先アドレス記憶部１４２に新規に分岐先アドレスを登録しない。この場合、テーブル管理部１５２は、検索されたエントリの次に位置する有効なエントリに登録された分岐先アドレスを、予測分岐先アドレスに決定する。
【００８１】
ここで、図５に示すようなプログラムが実行された場合を想定して、分岐先アドレステーブル１４０に登録された分岐先アドレスに基づく分岐先予測処理の具体例について説明する。図１０は、分岐先予測処理の具体例を示す図である。
【００８２】
この図１０では、例として、テーブルジャンプ命令の実行により、分岐先の命令アドレスがアドレスＡ，Ｂ，Ａ，Ｂ，・・・と繰り返し出現する場合を想定する。なお、アドレスＡとは、図５の処理Ｐａを実行する命令のアドレスであり、アドレスＢとは、図５の処理Ｐｂを実行する命令のアドレスであるものとする。
【００８３】
また、図１０において、「前回の予測」とは、分岐命令実行制御部１１９から出力された分岐先アドレスに対応するテーブルジャンプ命令を先読みする際に、命令フェッチ制御部１１１が分岐予測テーブル１３１から取得した予測分岐先アドレスを示す。分岐先アドレスと「前回の予測」のアドレスとが一致しない場合、予測に失敗したことを示す。また、「次回の予測」とは、その状態においてテーブルジャンプ予測部１３３から分岐予測テーブル１３１に登録される予測分岐アドレスであり、次の状態における「前回の予測」のアドレスと同じになる。
【００８４】
図１０において、分岐先アドレス記憶部１４２に分岐先アドレスが未登録の状態から、テーブルジャンプ命令が実行されて、分岐先がアドレスＡと決定された状態１に遷移したものとする。このとき、分岐先アドレスにマッチするエントリが存在せず（図９のＳ２２：Ｎｏ）、空きエントリが存在する状態（Ｓ２５：Ｙｅｓ）となることから、テーブル管理部１５２は、分岐先アドレス記憶部１４２の０番目のエントリにアドレスＡを登録する（Ｓ２６に対応）。また、テーブル管理部１５２は、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡを出力させる（Ｓ２７）。
【００８５】
次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスＢと決定された状態２に遷移したものとする。このとき、分岐先アドレスにマッチするエントリが存在せず（Ｓ２２：Ｎｏ）、空きエントリが存在する状態（Ｓ２５：Ｙｅｓ）となることから、テーブル管理部１５２は、分岐先アドレス記憶部１４２の１番目のエントリにアドレスＢを登録する（Ｓ２６に対応）。また、テーブル管理部１５２は、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡを出力させる（Ｓ２７）。
【００８６】
次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスＡと決定された状態３に遷移したものとする。この場合、前回の予測分岐先アドレスと実際の分岐先アドレスとが一致し、予測に成功する。この状態３では、０番目のエントリが分岐先アドレスにマッチし（Ｓ２２：Ｙｅｓ）、１番目のエントリが有効である（Ｓ２３：Ｙｅｓ）ことから、テーブル管理部１５２は、分岐先アドレスの登録を行わずに、予測分岐先アドレスとして、１番目のエントリに登録されたアドレスＢを出力させる（Ｓ２７）。
【００８７】
次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスＢと決定された状態４に遷移したものとする。この場合、前回の予測分岐先アドレスと実際の分岐先アドレスとが一致し、予測に成功する。この状態４では、１番目のエントリが分岐先アドレスにマッチするが（Ｓ２２：Ｙｅｓ）、２番目のエントリは無効である（Ｓ２３：Ｎｏ）ことから、テーブル管理部１５２は、分岐先アドレスの登録を行わずに、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡを出力させる（Ｓ２７）。
【００８８】
以後、分岐先アドレスとしてアドレスＡとアドレスＢとが繰り返し出現した場合には、常に予測に成功することになる。
以上の図１０の例のように、図９の処理では、分岐先アドレス記憶部１４２には、テーブルジャンプ命令の実行後における分岐先アドレスの履歴として、異なる分岐先アドレスが初めて出現するたびに分岐先アドレスが登録される。このため、分岐先アドレス記憶部１４２には、互いに異なる分岐先アドレスが登録され、１つの分岐先アドレスは１つのエントリにのみ登録される。また、テーブルジャンプ命令の実行後における分岐先アドレスが分岐先アドレス記憶部１４２におけるｎ番目のエントリに登録されていた場合、（ｎ＋１）番目のエントリに異なる分岐先アドレスが登録されていれば、（ｎ＋１）番目のエントリに登録された分岐先アドレスが予測分岐先アドレスとして出力される。このような図９の処理によれば、特に、分岐先アドレスの出現パターンが、異なる複数の分岐先アドレスを有するパターンになるような場合に、テーブルジャンプ命令の実行による分岐先命令を高精度に予測できる。
【００８９】
また、以上説明した第２の実施の形態では、テーブルジャンプ予測部１３３は、実行されたテーブルジャンプ命令のアドレスごとに用意された分岐先アドレステーブル１４０に対して、過去に実行されたテーブルジャンプ命令についての分岐先アドレスの履歴が登録される。そして、各分岐先アドレステーブル１４０から１つの予測分岐先アドレスが出力されて、出力された予測分岐先アドレスがテーブルジャンプ命令のアドレスとともに分岐予測テーブル１３１に登録される。
【００９０】
このような構成により、命令フェッチ制御部１１１は、テーブルジャンプ命令についての予測分岐先アドレスを、条件分岐命令についての予測分岐先アドレスと同じく、分岐予測テーブル１３１の検索によって取得することができる。換言すれば、命令フェッチ制御部１１１に対して予測分岐先アドレスを供給する手段としての分岐予測テーブル１３１を、条件分岐命令についての予測分岐先アドレスの供給だけでなく、テーブルジャンプ命令についての予測分岐先アドレスの供給のためにも共通に使用できる。従って、テーブルジャンプ命令の分岐先を予測できるという効果を奏しながらも、命令フェッチ制御部１１１が分岐予測テーブル１３１から予測分岐先アドレスを取得することを実現する回路構成や制御手法を大きく変更する必要がなくなり、製造／開発コストや回路面積が増大することを抑制できる。
【００９１】
〔第３の実施の形態〕
図１１は、第３の実施の形態に係る演算処理装置の要部構成例を示す図である。なお、この図１１では、図７に対応する構成要素については同じ符号を付して示す。
【００９２】
第３の実施の形態に係る演算処理装置は、第２の実施の形態に係る演算処理装置と比較して、分岐先アドレステーブルの構成が異なるとともに、分岐先アドレステーブルを用いたテーブル管理部による分岐先予測処理の手順も異なる。すなわち、第３の実施の形態に係る演算処理装置は、図７に示した分岐先アドレステーブル１４０およびテーブル管理部１５２の代わりに、図１１に示す分岐先アドレステーブル１４０ａおよびテーブル管理部１５２ａを備える。なお、第２の実施の形態と同様に、分岐先アドレステーブル１４０ａは複数設けられる。
【００９３】
各分岐先アドレステーブル１４０ａは、図７に示した分岐先アドレステーブル１４０と同様に、分岐先アドレス記憶部１４２を備える。また、各分岐先アドレステーブル１４０ａはさらに、インデックス部１４１ａおよびエントリ選択部１４３ａを備える。
【００９４】
インデックス部１４１ａには、図７に示したインデックス部１４１に含まれるテーブルバリッドおよびインデックスに加えて、Ｎｅｘｔポインタが保持される。Ｎｅｘｔポインタは、分岐先アドレス記憶部１４２のエントリのうち、予測分岐先アドレスを出力させるエントリを指し示す。例えば、Ｎｅｘｔポインタが「０」の場合、Ｎｅｘｔポインタは分岐先アドレス記憶部１４２における０番目のエントリを指し示し、Ｎｅｘｔポインタが「１」の場合、Ｎｅｘｔポインタは分岐先アドレス記憶部１４２における１番目のエントリを指し示す。Ｎｅｘｔポインタの初期値は「０」とされ、Ｎｅｘｔポインタの値はテーブル管理部１５２ａによってカウントされる。
【００９５】
エントリ選択部１４３ａは、分岐先アドレス記憶部１４２のエントリのうち１つを選択して、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部１５３に出力する。エントリ選択部１４３ａは、テーブル管理部１５２ａから選択要求信号が出力されたとき、分岐先アドレス記憶部１４２のエントリのうち、インデックス部１４１ａにおけるＮｅｘｔポインタが指し示すエントリを選択する。
【００９６】
テーブル管理部１５２ａは、実行が完了した分岐命令のアドレスに対応する分岐先アドレステーブル１４０ａを選択し、選択した分岐先アドレステーブル１４０ａ内の情報に基づいて、予測分岐先アドレスを決定する。図７に示したテーブル管理部１５２と異なり、テーブル管理部１５２ａは、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる成否情報に基づいて、分岐予測に失敗した場合のみ分岐先アドレス記憶部１４２に分岐先アドレスを登録する。また、テーブル管理部１５２ａは、分岐先アドレス記憶部１４２のエントリに対して空きがなくなるまで分岐先アドレスを登録する。これらの相違点により、テーブル管理部１５２ａは、第２の実施の形態の場合と比較して、分岐先アドレスの繰り返しパターンがより複雑になる場合でも、分岐先を予測できるようになっている。
【００９７】
図１２は、第３の実施の形態におけるテーブルジャンプ命令の分岐先予測処理手順を示すフローチャートである。
図１２に示す処理のうち、ステップＳ１１の処理は、図８に示したステップＳ１１の処理と同じである。また、ステップＳ１２〜Ｓ１５，Ｓ１７の処理は、テーブル管理部１５２の代わりにテーブル管理部１５２ａが処理を実行すること、および、処理対象が分岐先アドレステーブル１４０の代わりに分岐先アドレステーブル１４０ａになること以外は、図８に示したステップＳ１２〜Ｓ１５，Ｓ１７の処理と同じである。これら以外に図８の処理と異なる点は、ステップＳ１５の次にステップＳ３１が実行される点と、ステップＳ１６の代わりにステップＳ１６ａが実行される点である。
【００９８】
図１２において、テーブル管理部１５２ａは、ステップＳ１２の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル１４０ａが存在しない場合（Ｓ１３：Ｎｏ）には、テーブル管理部１５２ａは、インデックス部１４１ａのテーブルバリッドが無効を示す「０」である分岐先アドレステーブル１４０ａを、以後の処理対象として新規に選択する。このとき、テーブル管理部１５２ａは、選択した分岐先アドレステーブル１４０ａにおけるテーブルバリッドを「１」に更新する（ステップＳ１４）。次に、テーブル管理部１５２ａは、ステップＳ１４で選択した分岐先アドレステーブル１４０ａに対して、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる分岐命令アドレスをインデックスとして登録する（ステップＳ１５）。
【００９９】
次に、テーブル管理部１５２ａは、ステップＳ１４で選択した分岐先アドレステーブル１４０ａにおいて、インデックス部１４１ａのＮｅｘｔポインタを「０」とする（ステップＳ３１）。すなわち、新規に有効化された分岐先アドレステーブル１４０ａにおいては、インデックス部１４１ａにおけるＮｅｘｔポインタが、初期値である「０」に設定される。なお、ステップＳ１５，Ｓ３１の処理順は逆であってもよい。あるいは、ステップＳ１５，Ｓ３１の各処理は同時に実行されてもよい。
【０１００】
ステップＳ１２の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル１４０ａが存在した場合（Ｓ１３：Ｙｅｓ）、または、ステップＳ１２の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル１４０ａが存在せず（Ｓ１３：Ｎｏ）、ステップＳ１４，Ｓ１５，Ｓ３１の各処理が実行された場合には、テーブル管理部１５２ａは、処理対象として選択した分岐先アドレステーブル１４０ａにおける登録情報と、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる成否情報とに基づいて、予測分岐先アドレスを決定する（ステップＳ１６ａ）。この後、ステップＳ１７の処理が実行される。
【０１０１】
図１３は、第３の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。この図１３の処理は、図１２のステップＳ１６ａに対応するものである。
【０１０２】
［ステップＳ４１］テーブル管理部１５２ａは、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる成否情報に基づき、分岐先の予測に失敗したか否かを判定する。テーブル管理部１５２ａは、分岐先の予測に失敗したと判定した場合（Ｓ４１：Ｙｅｓ）には、ステップＳ４２を実行し、分岐先の予測に成功したと判定した場合（Ｓ４１：Ｎｏ）には、ステップＳ４３の処理を実行する。
【０１０３】
［ステップＳ４２］テーブル管理部１５２ａは、処理対象として選択した分岐先アドレステーブル１４０ａにおいて、インデックス部１４１ａのＮｅｘｔポインタを「０」にする。この後、ステップＳ４５の処理が実行される。
【０１０４】
［ステップＳ４３］テーブル管理部１５２ａは、処理対象として選択した分岐先アドレステーブル１４０ａにおいて、インデックス部１４１ａのＮｅｘｔポインタに「１」を加算する。
【０１０５】
［ステップＳ４４］テーブル管理部１５２ａは、分岐先アドレス記憶部１４２のエントリのうち、現在Ｎｅｘｔポインタが指し示すエントリが有効であるか否かを判定する。ここで、エントリが有効であるとは、Ｎｅｘｔポインタが指し示すエントリのバリッドフラグが「１」であって、そのエントリに有効な分岐先アドレスが登録されていることを指す。一方、エントリが有効でないとは、Ｎｅｘｔポインタが指し示すエントリのバリッドフラグが「０」であるか、または、Ｎｅｘｔポインタが指し示すエントリが存在しない（すなわち、Ｎｅｘｔポインタの値が分岐先アドレス記憶部１４２のエントリ数を超えている）ことを指す。
【０１０６】
テーブル管理部１５２ａは、Ｎｅｘｔポインタが指し示すエントリが有効である場合（Ｓ４４：Ｙｅｓ）には、ステップＳ４５の処理を実行し、Ｎｅｘｔポインタが指し示すエントリが有効でない場合（Ｓ４４：Ｎｏ）、ステップＳ４２の処理を実行する。
【０１０７】
［ステップＳ４５］分岐先アドレス記憶部１４２に、バリッドフラグが「０」である空きエントリがあるかを判定する。テーブル管理部１５２ａは、空きエントリが存在する場合（Ｓ４５：Ｙｅｓ）には、ステップＳ４６の処理を実行し、空きエントリが存在しない場合（Ｓ４５：Ｎｏ）には、ステップＳ４７の処理を実行する。
【０１０８】
［ステップＳ４６］テーブル管理部１５２ａは、分岐先アドレス記憶部１４２の空きエントリのうち、最も番号が小さいエントリにおいて、バリッドフラグを「１」に更新するとともに、分岐命令実行結果に含まれる分岐先アドレスを登録する。この後、ステップＳ４７の処理が実行される。
【０１０９】
［ステップＳ４７］テーブル管理部１５２ａは、エントリ選択部１４３ａに対して選択要求信号を出力する。選択要求信号を受信したエントリ選択部１４３ａは、分岐先アドレス記憶部１４２のエントリのうち、Ｎｅｘｔポインタが指し示すエントリを選択し、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部１５３に出力する。
【０１１０】
以上の図１３の処理では、テーブル管理部１５２ａは、分岐先アドレス記憶部１４２に空きエントリが存在しなくなるまで、テーブルジャンプ命令の実行が完了するたびに、分岐先アドレスを分岐先アドレス記憶部１４２に蓄積する。また、テーブル管理部１５２ａは、分岐先の予測に失敗した場合には、分岐先アドレス記憶部１４２の先頭エントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。さらに、テーブル管理部１５２ａは、分岐先の予測に成功した場合でも、その時点でＮｅｘｔポインタが指し示すエントリの次のエントリが有効でない場合には、分岐先アドレス記憶部１４２の先頭エントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。一方、テーブル管理部１５２ａは、分岐先の予測に成功し、かつ、その時点でＮｅｘｔポインタが指し示すエントリの次のエントリが有効である場合には、次のエントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。
【０１１１】
ここで、図５に示すようなプログラムが実行された場合を想定して、分岐先アドレステーブル１４０ａに登録された分岐先アドレスに基づく分岐先予測処理の具体例について説明する。図１４〜図１６は、分岐先予測処理の具体例を示す図である。
【０１１２】
これらの図１４〜図１６では、例として、テーブルジャンプ命令の実行により、分岐先の命令アドレスがアドレスＡ，Ｂ，Ａ，Ｂ，Ｃ，Ｃというパターンで繰り返し出現する場合を想定する。なお、アドレスＡとは、図５の処理Ｐａを実行する命令のアドレスであり、アドレスＢとは、図５の処理Ｐｂを実行する命令のアドレスであり、アドレスＣとは、図５の処理Ｐｃを実行する命令のアドレスであるものとする。また、図１４〜図１６では、例として、分岐先アドレス記憶部１４２は、０番目から７番目までの８個のエントリを備えるものとする。
【０１１３】
まず、図１４において、分岐先アドレス記憶部１４２に分岐先アドレスが未登録の状態から、テーブルジャンプ命令が実行されて、分岐先がアドレスＡと決定された状態１１に遷移したものとする。このとき、分岐先の予測が失敗となるので（図１３のＳ４１：Ｙｅｓ）、Ｎｅｘｔポインタは「０」のままになり（Ｓ４２）、分岐先であるアドレスＡは分岐先アドレス記憶部１４２における先頭の空きエントリである０番目のエントリに登録される（Ｓ４６）。また、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ４７）。なお、これ以後、分岐先アドレス記憶部１４２には、エントリが満杯になる状態１８まで、分岐先アドレスが蓄積されていく。
【０１１４】
次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスＢと決定された状態１２に遷移したものとする。このとき、分岐先の予測が失敗となるので（図１３のＳ４１：Ｙｅｓ）、Ｎｅｘｔポインタは「０」のままになり（Ｓ４２）、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ４７）。
【０１１５】
次に、分岐先がアドレスＡと決定された状態１３では、分岐先の予測に成功する（図１３のＳ４１：Ｎｏ）。このとき、Ｎｅｘｔポインタは「１」に増加され（Ｓ４３）、予測分岐先アドレスとして、１番目のエントリに登録されたアドレスＢが出力される（Ｓ４７）。次に、分岐先がアドレスＢと決定された状態１４でも、分岐先の予測に成功するので（図１３のＳ４１：Ｎｏ）、Ｎｅｘｔポインタは「２」に増加され（Ｓ４３）、予測分岐先アドレスとして、２番目のエントリに登録されたアドレスＡが出力される（Ｓ４７）。
【０１１６】
次に、図１５に示すように、分岐先がアドレスＣと決定された状態１５では、分岐先の予測が失敗となる（図１３のＳ４１：Ｙｅｓ）。このとき、Ｎｅｘｔポインタは「０」に戻され（Ｓ４２）、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ４７）。次に、分岐先がアドレスＣと決定された状態１６でも、分岐先の予測が失敗となり（図１３のＳ４１：Ｙｅｓ）、Ｎｅｘｔポインタは「０」のままとなり（Ｓ４２）、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ４７）。
【０１１７】
ここで、状態１６において予測分岐先アドレスが出力された状態では、分岐先アドレス記憶部１４２には、分岐先アドレスの出現パターンが１パターン分蓄積された状態になる。なおかつ、Ｎｅｘｔポインタが「０」に戻り、予測分岐先アドレスが先頭エントリから出力されるようになる。このため、この後に分岐先アドレスがアドレスＡ（状態１７）、アドレスＢ（状態１８）、アドレスＡ（状態１９）、アドレスＢ（状態２０）、アドレスＣ（状態２１）、アドレスＣ（状態２２）と出現する間、分岐先の予測は成功し続ける。すなわち、図１３の処理によれば、アドレスＡ，Ｂ，Ａ，Ｂ，Ｃ，Ｃという、第２の実施の形態で予測可能なパターンより複雑な命令アドレスの出現パターンに対し、分岐先を予測することが可能になる。
【０１１８】
なお、図１６の状態２２の後、分岐先がアドレスＢとなる状態２４（図示せず）において、予測は成功するものの、Ｎｅｘｔポインタに「１」を加算した値に対応するエントリが有効でなくなり（Ｓ４４：Ｎｏ）、Ｎｅｘｔポインタが「０」に戻る。この後、分岐先がそれぞれアドレスＡ，Ｂとなる状態２５，２６（図示せず）では予測に成功するものの、分岐先がアドレスＣとなる状態２７（図示せず）において予測に失敗し、Ｎｅｘｔポインタが「０」に戻る。次に、分岐先がアドレスＣとなる状態２８（図示せず）でも予測に失敗し、Ｎｅｘｔポインタは「０」に保持されるが、次に、分岐先がアドレスＡとなる状態２９（図示せず）を先頭として、連続８回分だけ予測に成功する。
【０１１９】
すなわち、図１３の処理によれば、分岐先アドレス記憶部１４２のエントリ数以内の数の命令アドレスからなるパターンが出現した場合には、５０％以上の確率で分岐先を予測することが可能になる。
【０１２０】
以上説明した第３の実施の形態では、テーブルジャンプ命令の分岐先を予測できるという効果を奏し、かつ、製造／開発コストや回路面積が増大することを抑制できるという第２の実施の形態と同様の効果を得ることができる。また、第３の実施の形態によれば、第２の実施の形態と比較して、より複雑な命令アドレスの出現パターンについても分岐先を予測できるようになる。
【０１２１】
〔第４の実施の形態〕
図１７は、第４の実施の形態に係る演算処理装置の要部構成例を示す図である。なお、この図１７では、図１１に対応する構成要素については同じ符号を付して示す。
【０１２２】
第４の実施の形態に係る演算処理装置は、第３の実施の形態に係る演算処理装置と比較して、分岐先アドレステーブルの構成が異なるとともに、分岐先アドレステーブルを用いたテーブル管理部による分岐先予測処理の手順も異なる。すなわち、第４の実施の形態に係る演算処理装置は、図１１に示した分岐先アドレステーブル１４０ａおよびテーブル管理部１５２ａの代わりに、図１７に示す分岐先アドレステーブル１４０ｂおよびテーブル管理部１５２ｂを備える。なお、第３の実施の形態と同様に、分岐先アドレステーブル１４０ｂは複数設けられる。
【０１２３】
各分岐先アドレステーブル１４０ｂは、図１１に示した分岐先アドレステーブル１４０ａと同様に、分岐先アドレス記憶部１４２およびエントリ選択部１４３ａを備える。また、各分岐先アドレステーブル１４０ｂはさらに、インデックス部１４１ｂおよび上限レジスタ１４４を備える。
【０１２４】
インデックス部１４１ｂには、図１１に示したインデックス部１４１ａに含まれるテーブルバリッド、インデックスおよびＮｅｘｔポインタに加えて、Ｃｒｅａｔｅフラグが保持される。Ｃｒｅａｔｅフラグは、テーブル管理部１５２ｂによって設定され、現在、分岐先アドレス記憶部１４２のエントリ登録期間であるか否かを示す。エントリ登録期間とは、分岐先アドレスを予測するための十分な情報が保持されていない期間を示す。あるいは、エントリ登録期間とは、分岐先アドレス記憶部１４２において、予測分岐先の候補となる分岐先アドレスの登録が完了していない期間と言うこともできる。本実施の形態では、分岐先アドレス記憶部１４２のエントリ登録期間においては、Ｃｒｅａｔｅフラグが「１」とされ、エントリ登録期間が終了すると、Ｃｒｅａｔｅフラグが「０」に更新されるものとする。
【０１２５】
上限レジスタ１４４は、分岐先アドレス記憶部１４２における有効なエントリ（すなわち、バリッドフラグが「１」であるエントリ）の数をカウントする機能を有する。ただし、上限レジスタ１４４の最小値は「０」とされ、有効なエントリ数が１個の場合は「０」、有効なエントリ数が２個の場合は「１」、・・・のようにカウントが行われる。上限レジスタ１４４は、Ｃｒｅａｔｅフラグが「１」に変化したとき、分岐先アドレス記憶部１４２における有効なエントリ数をカウントして、そのカウント値を保持し、テーブル管理部１５２ｂによる参照を可能とする。
【０１２６】
テーブル管理部１５２ｂは、実行が完了した分岐命令のアドレスに対応する分岐先アドレステーブル１４０ｂを選択し、選択した分岐先アドレステーブル１４０ｂ内の情報と、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる成否情報とに基づいて、予測分岐先アドレスを決定する。また、テーブル管理部１５２ｂは、分岐先アドレス記憶部１４２のエントリ登録期間が終了する（すなわち、Ｃｒｅａｔｅフラグが「０」になる）と、上限レジスタ１４４に保持された値を上限としてＮｅｘｔポインタのカウント動作を行うようになる。
【０１２７】
図１８は、第４の実施の形態におけるテーブルジャンプ命令の分岐先予測処理手順を示すフローチャートである。
図１８に示す処理のうち、ステップＳ１１の処理は、図８および図１２に示したステップＳ１１の処理と同じである。また、ステップＳ１２〜Ｓ１５，Ｓ１７の処理は、テーブル管理部１５２ａの代わりにテーブル管理部１５２ｂが処理を実行すること、および、処理対象が分岐先アドレステーブル１４０ａの代わりに分岐先アドレステーブル１４０ｂになること以外は、図１２に示したステップＳ１２〜Ｓ１５，Ｓ１７の処理と同じである。これら以外に図１２の処理と異なる点は、ステップＳ３１の代わりにステップＳ３２が実行される点と、ステップＳ１６ａの代わりにステップＳ１６ｂが実行される点である。
【０１２８】
図１８において、テーブル管理部１５２ｂは、ステップＳ１２の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル１４０ｂが存在しない場合（Ｓ１３：Ｎｏ）には、テーブル管理部１５２ｂは、インデックス部１４１ａのテーブルバリッドが無効を示す「０」である分岐先アドレステーブル１４０ｂを、以後の処理対象として新規に選択する。このとき、テーブル管理部１５２ｂは、選択した分岐先アドレステーブル１４０ｂにおけるテーブルバリッドを「１」に更新する（ステップＳ１４）。次に、テーブル管理部１５２ｂは、ステップＳ１４で選択した分岐先アドレステーブル１４０ｂに対して、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる分岐命令アドレスをインデックスとして登録する（ステップＳ１５）。
【０１２９】
次に、テーブル管理部１５２ｂは、ステップＳ１４で選択した分岐先アドレステーブル１４０ｂにおいて、インデックス部１４１ｂのＮｅｘｔポインタを「０」とし、Ｃｒｅａｔｅフラグを「１」とする（ステップＳ３２）。すなわち、新規に有効化された分岐先アドレステーブル１４０ｂにおいては、インデックス部１４１ｂにおけるＮｅｘｔポインタが、初期値である「０」に設定されるとともに、Ｃｒｅａｔｅフラグが「１」に設定される。なお、ステップＳ１５，Ｓ３２の処理順は逆であってもよい。あるいは、ステップＳ１５，Ｓ３２の各処理は同時に実行されてもよい。
【０１３０】
ステップＳ１２の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル１４０ｂが存在した場合（Ｓ１３：Ｙｅｓ）、または、ステップＳ１２の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル１４０ｂが存在せず（Ｓ１３：Ｎｏ）、ステップＳ１４，Ｓ１５，Ｓ３２の各処理が実行された場合には、テーブル管理部１５２ｂは、処理対象として選択した分岐先アドレステーブル１４０ｂにおける登録情報と、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる成否情報とに基づいて、予測分岐先アドレスを決定する（ステップＳ１６ｂ）。この後、ステップＳ１７の処理が実行される。
【０１３１】
図１９は、第４の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。この図１９の処理は、図１８のステップＳ１６ｂに対応するものである。
【０１３２】
［ステップＳ６１］テーブル管理部１５２ｂは、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる成否情報に基づき、分岐先の予測に失敗したか否かを判定する。テーブル管理部１５２ｂは、分岐先の予測に失敗したと判定した場合（Ｓ６１：Ｙｅｓ）には、ステップＳ６２を実行し、分岐先の予測に成功したと判定した場合（Ｓ６１：Ｎｏ）には、ステップＳ６６の処理を実行する。
【０１３３】
［ステップＳ６２］テーブル管理部１５２ｂは、処理対象として選択した分岐先アドレステーブル１４０ｂにおける分岐先アドレス記憶部１４２に、バリッドフラグが「０」である空きエントリがあるかを判定する。テーブル管理部１５２ｂは、空きエントリが存在する場合（Ｓ６２：Ｙｅｓ）には、ステップＳ６３の処理を実行し、空きエントリが存在しない場合（Ｓ６２：Ｎｏ）には、ステップＳ６５の処理を実行する。
【０１３４】
［ステップＳ６３］テーブル管理部１５２ｂは、インデックス部１４１ｂのＣｒｅａｔｅフラグを参照する。テーブル管理部１５２ｂは、Ｃｒｅａｔｅフラグが「１」である場合（Ｓ６３：Ｙｅｓ）には、ステップＳ６４の処理を実行し、Ｃｒｅａｔｅフラグが「０」である場合（Ｓ６３：Ｎｏ）には、ステップＳ６５の処理を実行する。
【０１３５】
［ステップＳ６４］テーブル管理部１５２ｂは、分岐先アドレス記憶部１４２の空きエントリのうち、最も番号が小さいエントリにおいて、バリッドフラグを「１」に更新するとともに、分岐命令実行結果に含まれる分岐先アドレスを登録する。この後、ステップＳ６５の処理が実行される。
【０１３６】
［ステップＳ６５］テーブル管理部１５２ｂは、インデックス部１４１ｂのＮｅｘｔポインタを「０」にする。この後、ステップＳ７１の処理が実行される。
［ステップＳ６６］テーブル管理部１５２ｂは、処理対象として選択した分岐先アドレステーブル１４０ｂにおいて、インデックス部１４１ｂのＣｒｅａｔｅフラグが「１」であるかを判定する。テーブル管理部１５２ｂは、Ｃｒｅａｔｅフラグが「１」である場合（Ｓ６６：Ｙｅｓ）には、ステップＳ６７の処理を実行し、Ｃｒｅａｔｅフラグが「０」である場合（Ｓ６６：Ｎｏ）には、ステップＳ６９の処理を実行する。
【０１３７】
［ステップＳ６７］テーブル管理部１５２ｂは、Ｃｒｅａｔｅフラグを「０」に更新する。
［ステップＳ６８］Ｃｒｅａｔｅフラグが「０」に変化したことを検知した上限レジスタ１４４は、分岐先アドレス記憶部１４２における有効なエントリ数をカウントし、そのカウント値を保持する。この後、ステップＳ６９の処理が実行される。
【０１３８】
［ステップＳ６９］テーブル管理部１５２ｂは、インデックス部１４１ｂのＮｅｘｔポインタに「１」を加算する。
［ステップＳ７０］テーブル管理部１５２ｂは、分岐先アドレス記憶部１４２のエントリのうち、Ｎｅｘｔポインタが指し示すエントリが有効であり、かつ、Ｎｅｘｔポインタの値が上限レジスタ１４４に保持された値以下であるかを判定する。テーブル管理部１５２ｂは、これらの条件を満たす場合（Ｓ７０：Ｙｅｓ）には、ステップＳ７１の処理を実行し、これらの条件を満たさない場合（Ｓ７０：Ｎｏ）には、ステップＳ６５の処理を実行する。
【０１３９】
［ステップＳ７１］テーブル管理部１５２ｂは、エントリ選択部１４３ａに対して選択要求信号を出力する。選択要求信号を受信したエントリ選択部１４３ａは、分岐先アドレス記憶部１４２のエントリのうち、Ｎｅｘｔポインタが指し示すエントリを選択し、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部１５３に出力する。
【０１４０】
以上の図１９の処理では、テーブル管理部１５２ｂは、初期状態では、分岐先アドレス記憶部１４２に対して、テーブルジャンプ命令の実行が完了するたびに、分岐先アドレス記憶部１４２における先頭エントリから順に分岐先アドレスを登録していく。これとともに、テーブル管理部１５２ｂは、分岐先の予測に最初に成功するまでの間（すなわち、Ｃｒｅａｔｅフラグが「１」である間）、分岐先アドレス記憶部１４２の先頭エントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。
【０１４１】
テーブル管理部１５２ｂは、分岐先の予測に最初に成功したとき、分岐先アドレス記憶部１４２へのアドレス登録を終了する。これにより、分岐先アドレス記憶部１４２には、テーブルジャンプ命令の実行の結果、同じ分岐先アドレスが出現する直前までの分岐先アドレスの履歴が登録される。
【０１４２】
また、テーブル管理部１５２ｂは、分岐先の予測に最初に成功したとき、その時点でのＮｅｘｔポインタの値をＮｅｘｔポインタの上限として上限レジスタ１４４に設定し、それ以後、Ｎｅｘｔポインタが指し示すエントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。テーブル管理部１５２ｂは、分岐先の予測に成功するごとにＮｅｘｔポインタをカウントアップし、分岐先の予測に失敗するか、あるいは、カウントアップ後のＮｅｘｔポインタの値が上限値を超えた場合に、Ｎｅｘｔポインタを「０」に戻す。
【０１４３】
ここで、図５に示すようなプログラムが実行された場合を想定して、分岐先アドレステーブル１４０ｂに登録された分岐先アドレスに基づく分岐先予測処理の具体例について説明する。図２０，図２１は、分岐先予測処理の具体例を示す図である。
【０１４４】
これらの図２０，図２１では、例として、テーブルジャンプ命令の実行により、分岐先の命令アドレスがアドレスＡ，Ｂ，Ｂというパターンで繰り返し出現する場合を想定する。
【０１４５】
まず、図２０において、分岐先アドレス記憶部１４２に分岐先アドレスが未登録の状態から、テーブルジャンプ命令が実行されて、分岐先がアドレスＡと決定された状態３１に遷移したものとする。このとき、分岐先の予測が失敗となり（図１９のＳ６１：Ｙｅｓ）、Ｃｒｅａｔｅフラグは「１」である（Ｓ６３：Ｙｅｓ）ので、分岐先であるアドレスＡは分岐先アドレス記憶部１４２における先頭の空きエントリである０番目のエントリに登録される（Ｓ６４）。また、Ｎｅｘｔポインタは「０」のままになり（Ｓ６５）、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ７１）。
【０１４６】
次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスＢと決定された状態３２に遷移したものとする。このとき、分岐先の予測が失敗となり（Ｓ６１：Ｙｅｓ）、Ｃｒｅａｔｅフラグは「１」である（Ｓ６３：Ｙｅｓ）ので、分岐先であるアドレスＢは分岐先アドレス記憶部１４２における１番目のエントリに登録される（Ｓ６４）。また、Ｎｅｘｔポインタは「０」のままになり（Ｓ６５）、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ７１）。
【０１４７】
同様に、分岐先がアドレスＢと決定された状態３３では、分岐先の予測が失敗となり（Ｓ６１：Ｙｅｓ）、Ｃｒｅａｔｅフラグは「１」である（Ｓ６３：Ｙｅｓ）ので、分岐先であるアドレスＢは分岐先アドレス記憶部１４２における２番目のエントリに登録される（Ｓ６４）。また、Ｎｅｘｔポインタは「０」のままになり（Ｓ６５）、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ７１）。
【０１４８】
次に、分岐先がアドレスＡと決定された状態３４では、分岐先の予測に成功し（Ｓ６１：Ｎｏ）、Ｃｒｅａｔｅフラグは「０」に更新される（Ｓ６７）。このとき、上限レジスタ１４４には、分岐先アドレス記憶部１４２における有効なエントリ数である「２」が設定され（Ｓ６８）、Ｎｅｘｔポインタが「１」にカウントアップされる（Ｓ６９）。分岐先アドレス記憶部１４２における１番目のエントリは有効であり、Ｎｅｘｔポインタの値は上限レジスタ１４４の値以下である（Ｓ７０：Ｙｅｓ）ことから、分岐先アドレス記憶部１４２における１番目のエントリに登録された分岐先アドレスが、予測分岐アドレスとして出力される（Ｓ７１）。なお、状態３４においてＣｒｅａｔｅフラグが「０」となることから、これ以後、分岐先アドレス記憶部１４２への分岐先アドレスの登録は行われなくなる。
【０１４９】
この後、図２１に示すように、分岐先アドレスがアドレスＢと決定された状態３５でも、分岐先の予測は成功し、Ｎｅｘｔポインタは「２」にカウントアップされる。さらに、分岐先アドレスがアドレスＢと決定された状態３６でも、分岐先の予測は成功する。このとき、Ｎｅｘｔポインタに「１」を加算（Ｓ６９）した値が上限レジスタ１４４の値を超える（Ｓ７０：Ｎｏ）ことから、Ｎｅｘｔポインタは「０」に戻される（Ｓ６５）。従って、分岐先アドレス記憶部１４２における０番目のエントリに登録された分岐先アドレスが、予測分岐先アドレスとして出力される。
【０１５０】
以後、分岐先アドレスがアドレスＡ，Ｂ，Ｂというパターンで繰り返し出現する間、分岐先の予測は成功し続ける。すなわち、図１９の処理によれば、アドレスＡ，Ｂ，Ｂという、第２の実施の形態で予測可能なパターンより命令アドレスの組合せの自由度が高い出現パターンに対し、分岐先を予測することが可能になる。
【０１５１】
以上説明した第４の実施の形態では、テーブルジャンプ命令の分岐先を予測できるという効果を奏し、かつ、製造／開発コストや回路面積が増大することを抑制できるという第２，第３の実施の形態と同様の効果を得ることができる。また、第４の実施の形態によれば、第２の実施の形態と比較して、命令アドレスの組合せの自由度が高い出現パターンについても分岐先を予測できるようになり、予測精度が向上する。
【０１５２】
〔第５の実施の形態〕
図２２は、第５の実施の形態に係る演算処理装置の要部構成例を示す図である。なお、この図２２では、図１７に対応する構成要素については同じ符号を付して示す。
【０１５３】
第５の実施の形態に係る演算処理装置は、第４の実施の形態に係る演算処理装置と比較して、分岐先アドレステーブルの構成が異なるとともに、分岐先アドレステーブルを用いたテーブル管理部による分岐先予測処理の手順も異なる。すなわち、第５の実施の形態に係る演算処理装置は、図１７に示した分岐先アドレステーブル１４０ｂおよびテーブル管理部１５２ｂの代わりに、図２２に示す分岐先アドレステーブル１４０ｃおよびテーブル管理部１５２ｃを備える。なお、第４の実施の形態と同様に、分岐先アドレステーブル１４０ｃは複数設けられる。
【０１５４】
各分岐先アドレステーブル１４０ｃは、図１７に示した分岐先アドレステーブル１４０ｂと同様に、分岐先アドレス記憶部１４２、インデックス部１４１ｂおよび上限レジスタ１４４を備える。ただし、インデックス部１４１ｂのＮｅｘｔポインタは、エントリ選択部１４３ｃだけでなく分岐先アドレス記憶部１４２にも出力され、分岐先アドレス記憶部１４２に対する分岐先アドレスの決定時にも使用される。
【０１５５】
また、各分岐先アドレステーブル１４０ｃは、エントリ選択部１４３ｃを備える。エントリ選択部１４３ｃは、図１７に示したエントリ選択部１４３ａと同様に、分岐先アドレス記憶部１４２のエントリの中から１つを選択して、選択したエントリに登録された分岐先アドレスをテーブル選択部１５３に出力させる。ただし、エントリ選択部１４３ｃは、テーブル管理部１５２ｃからの選択要求信号を受信したとき、Ｃｒｅａｔｅフラグが「１」であれば、分岐先アドレス記憶部１４２における０番目のエントリ（先頭エントリ）を選択する。また、エントリ選択部１４３ｃは、テーブル管理部１５２ｃからの選択要求信号を受信したとき、Ｃｒｅａｔｅフラグが「０」であれば、分岐先アドレス記憶部１４２のエントリのうちＮｅｘｔポインタが指し示すエントリを選択する。
【０１５６】
テーブル管理部１５２ｃは、実行が完了した分岐命令のアドレスに対応する分岐先アドレステーブル１４０ｃを選択し、選択した分岐先アドレステーブル１４０ｃ内の情報と、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる成否情報とに基づいて、予測分岐先アドレスを決定する。テーブル管理部１５２ｃの処理のうち、図１７に示したテーブル管理部１５２ｂの処理との主な相違点は、分岐先アドレス記憶部１４２に分岐先アドレスを登録する際に分岐先アドレス記憶部１４２に対して登録要求信号のみを出力し、分岐先アドレスの登録先エントリの指定を行わない点である。ただし、分岐先アドレスの登録先エントリを、分岐先アドレス記憶部１４２に対してテーブル管理部１５２ｃが指定するようにしてもよい。
【０１５７】
以下、第５の実施の形態に係る演算処理装置の処理について説明する。本実施の形態におけるテーブルジャンプ命令の分岐先予測処理全体の手順は、基本的に図１８に示した処理と同じであるので、ここでは図示を省略する。図１８の処理と異なる点は、ステップＳ１２〜Ｓ１５，Ｓ１７の処理が、テーブル管理部１５２ｂの代わりにテーブル管理部１５２ｃによって実行される点、処理対象が分岐先アドレステーブル１４０ｂの代わりに分岐先アドレステーブル１４０ｃになる点、および、ステップＳ１６ｂの処理が次の図２３に示す手順で実行される点である。
【０１５８】
図２３は、第５の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。この図２３の処理は、図１８のステップＳ１６ｂに対応するものである。
【０１５９】
［ステップＳ８１］テーブル管理部１５２ｃは、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる成否情報に基づき、分岐先の予測に失敗したか否かを判定する。テーブル管理部１５２ｃは、分岐先の予測に失敗したと判定した場合（Ｓ８１：Ｙｅｓ）には、ステップＳ８２を実行し、分岐先の予測に成功したと判定した場合（Ｓ８１：Ｎｏ）には、ステップＳ８８の処理を実行する。
【０１６０】
［ステップＳ８２］テーブル管理部１５２ｃは、処理対象として選択した分岐先アドレステーブル１４０ｃにおける分岐先アドレス記憶部１４２に、バリッドフラグが「０」である空きエントリがあるかを判定する。テーブル管理部１５２ｃは、空きエントリが存在する場合（Ｓ８２：Ｙｅｓ）には、ステップＳ８３の処理を実行し、空きエントリが存在しない場合（Ｓ８２：Ｎｏ）には、ステップＳ８７の処理を実行する。
【０１６１】
なお、分岐先アドレス記憶部１４２に空きエントリがあるか否かの判定は、Ｎｅｘｔポインタの値を基に行うこともできる。この場合、テーブル管理部１５２ｃは、Ｎｅｘｔポインタの値が、分岐先アドレス記憶部１４２における最大エントリ数以下である場合には、空きエントリがあると判定し、Ｎｅｘｔポインタの値が最大エントリ数を超える場合には、空きエントリがないと判定する。
【０１６２】
［ステップＳ８３］テーブル管理部１５２ｃは、インデックス部１４１ｂのＣｒｅａｔｅフラグを参照する。テーブル管理部１５２ｃは、Ｃｒｅａｔｅフラグが「１」である場合（Ｓ８３：Ｙｅｓ）には、ステップＳ８４の処理を実行し、Ｃｒｅａｔｅフラグが「０」である場合（Ｓ８３：Ｎｏ）には、ステップＳ８７の処理を実行する。
【０１６３】
［ステップＳ８４］テーブル管理部１５２ｃは、分岐先アドレス記憶部１４２に対して登録要求信号を出力する。登録要求信号を受信した分岐先アドレス記憶部１４２は、自身のエントリのうち、Ｎｅｘｔポインタが指し示すエントリに対して、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる分岐先アドレスを登録する。
【０１６４】
［ステップＳ８５］テーブル管理部１５２ｃは、インデックス部１４１ｂのＮｅｘｔポインタに「１」を加算する。
［ステップＳ８６］テーブル管理部１５２ｃは、エントリ選択部１４３ｃに対して選択要求信号を出力する。選択要求信号を受信したエントリ選択部１４３ｃは、Ｃｒｅａｔｅフラグを参照する。このとき、Ｃｒｅａｔｅフラグは「１」であることから、エントリ選択部１４３ｃは、分岐先アドレス記憶部１４２における先頭エントリ（０番目のエントリ）を選択し、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部１５３に出力する。
【０１６５】
［ステップＳ８７］テーブル管理部１５２ｃは、Ｎｅｘｔポインタを「０」に更新する。この後、ステップＳ９３の処理が実行される。
［ステップＳ８８］分岐先の予測に成功した場合（Ｓ８１：Ｎｏ）、テーブル管理部１５２ｃは、処理対象として選択した分岐先アドレステーブル１４０ｃにおいて、インデックス部１４１ｂのＣｒｅａｔｅフラグが「１」であるかを判定する。テーブル管理部１５２ｃは、Ｃｒｅａｔｅフラグが「１」である場合（Ｓ８８：Ｙｅｓ）には、ステップＳ８９の処理を実行し、Ｃｒｅａｔｅフラグが「０」である場合（Ｓ８８：Ｎｏ）には、ステップＳ９１の処理を実行する。
【０１６６】
［ステップＳ８９］テーブル管理部１５２ｃは、Ｃｒｅａｔｅフラグを「０」に更新する。
［ステップＳ９０］Ｃｒｅａｔｅフラグが「０」に変化したことを検知した上限レジスタ１４４は、分岐先アドレス記憶部１４２における有効なエントリ数をカウントし、そのカウント値を保持する。この後、ステップＳ９１の処理が実行される。
【０１６７】
［ステップＳ９１］テーブル管理部１５２ｃは、インデックス部１４１ｂのＮｅｘｔポインタに「１」を加算する。
［ステップＳ９２］テーブル管理部１５２ｃは、分岐先アドレス記憶部１４２のエントリのうち、Ｎｅｘｔポインタが指し示すエントリが有効であり、かつ、Ｎｅｘｔポインタの値が上限レジスタ１４４に保持された値以下であるかを判定する。テーブル管理部１５２ｃは、これらの条件を満たす場合（Ｓ９２：Ｙｅｓ）には、ステップＳ９３の処理を実行し、これらの条件を満たさない場合（Ｓ９２：Ｎｏ）には、ステップＳ８７の処理を実行する。
【０１６８】
［ステップＳ９３］テーブル管理部１５２ｃは、エントリ選択部１４３ｃに対して選択要求信号を出力する。選択要求信号を受信したエントリ選択部１４３ｃは、Ｃｒｅａｔｅフラグを参照する。このとき、Ｃｒｅａｔｅフラグは「０」であることから、エントリ選択部１４３ｃは、分岐先アドレス記憶部１４２のエントリのうち、Ｎｅｘｔポインタが指し示すエントリを選択し、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部１５３に出力する。
【０１６９】
以上の図２３の処理では、初期状態では、分岐先アドレス記憶部１４２に対して、テーブルジャンプ命令の実行が完了するたびに、分岐先アドレス記憶部１４２における先頭エントリから順に分岐先アドレスが登録されていく。これとともに、分岐先の予測に最初に成功するまでの間（すなわち、Ｃｒｅａｔｅフラグが「１」である間）、分岐先アドレス記憶部１４２の先頭エントリに登録された分岐先アドレスが、予測分岐先アドレスとして出力される。そして、分岐先の予測に最初に成功したとき、分岐先アドレス記憶部１４２へのアドレス登録が終了する。これにより、分岐先アドレス記憶部１４２には、テーブルジャンプ命令の実行の結果、同じ分岐先アドレスが出現する直前までの分岐先アドレスの履歴が登録される。
【０１７０】
また、テーブル管理部１５２ｃは、分岐先の予測に最初に成功したとき、その時点でのＮｅｘｔポインタの値をＮｅｘｔポインタの上限として上限レジスタ１４４に設定するとともに、Ｃｒｅａｔｅフラグを「０」に更新する。これにより、以後、Ｎｅｘｔポインタが指し示すエントリに登録された分岐先アドレスが、予測分岐先アドレスとして出力されるようになる。テーブル管理部１５２ｃは、分岐先の予測に成功するごとにＮｅｘｔポインタをカウントアップし、分岐先の予測に失敗するか、あるいは、カウントアップ後のＮｅｘｔポインタの値が上限値を超えた場合に、Ｎｅｘｔポインタを「０」に戻す。
【０１７１】
ここで、図５に示すようなプログラムが実行された場合を想定して、分岐先アドレステーブル１４０ｃに登録された分岐先アドレスに基づく分岐先予測処理の具体例について説明する。図２４，図２５は、分岐先予測処理の具体例を示す図である。
【０１７２】
これらの図２４，図２５では、例として、図２０，図２１と同様に、テーブルジャンプ命令の実行により、分岐先の命令アドレスがアドレスＡ，Ｂ，Ｂというパターンで繰り返し出現する場合を想定する。
【０１７３】
まず、図２４において、分岐先アドレス記憶部１４２に分岐先アドレスが未登録の状態から、テーブルジャンプ命令が実行されて、分岐先がアドレスＡと決定された状態４１に遷移したものとする。このとき、分岐先の予測が失敗となり（図２３のＳ８１：Ｙｅｓ）、Ｃｒｅａｔｅフラグは「１」である（Ｓ８３：Ｙｅｓ）ので、分岐先であるアドレスＡは、分岐先アドレス記憶部１４２のエントリのうち、Ｎｅｘｔポインタが指し示す先頭エントリ（０番目のエントリ）に登録される（Ｓ８４）。また、Ｎｅｘｔポインタは「１」にカウントアップされ（Ｓ８５）、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ８６）。
【０１７４】
次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスＢと決定された状態４２に遷移したものとする。このとき、分岐先の予測が失敗となり（Ｓ８１：Ｙｅｓ）、Ｃｒｅａｔｅフラグは「１」である（Ｓ８３：Ｙｅｓ）ので、分岐先であるアドレスＢはＮｅｘｔポインタが指し示す１番目のエントリに登録される（Ｓ８４）。また、Ｎｅｘｔポインタは「２」にカウントアップされ（Ｓ８５）、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ８６）。
【０１７５】
同様に、分岐先がアドレスＢと決定された状態４３では、分岐先の予測が失敗となり（Ｓ８１：Ｙｅｓ）、Ｃｒｅａｔｅフラグは「１」である（Ｓ８３：Ｙｅｓ）ので、分岐先であるアドレスＢはＮｅｘｔポインタが指し示す２番目のエントリに登録される（Ｓ８４）。また、Ｎｅｘｔポインタは「３」にカウントアップされ（Ｓ８５）、予測分岐先アドレスとして、０番目のエントリに登録されたアドレスＡが出力される（Ｓ８６）。
【０１７６】
次に、分岐先がアドレスＡと決定された状態４４では、分岐先の予測に成功し（Ｓ８１：Ｎｏ）、Ｃｒｅａｔｅフラグは「０」に更新される（Ｓ８９）。このとき、上限レジスタ１４４には、分岐先アドレス記憶部１４２における有効なエントリ数である「２」が設定され（Ｓ９０）、Ｎｅｘｔポインタが「４」にカウントアップされる（Ｓ９１）。ところが、Ｎｅｘｔポインタの値は上限レジスタ１４４に設定された上限値を超えている（Ｓ９２：Ｎｏ）ので、Ｎｅｘｔポインタは「０」に戻される（Ｓ８７）。また、Ｃｒｅａｔｅフラグは「０」であるので、Ｎｅｘｔポインタが指し示す０番目のエントリに登録された分岐先アドレス（アドレスＡ）が、予測分岐先アドレスとして出力される（Ｓ９３）。なお、状態４４においてＣｒｅａｔｅフラグが「０」となることから、これ以後、分岐先アドレス記憶部１４２への分岐先アドレスの登録は行われなくなる。
【０１７７】
次に、分岐先がアドレスＢと決定された状態４５では、分岐先の予測が失敗となる（Ｓ８１：Ｙｅｓ）。このとき、Ｃｒｅａｔｅフラグは「０」である（Ｓ８３：Ｎｏ）ので、Ｎｅｘｔポインタは「０」のままになり（Ｓ８７）、Ｎｅｘｔポインタが指し示す０番目のエントリに登録された分岐先アドレス（アドレスＡ）が、予測分岐先アドレスとして出力される（Ｓ９３）。また、図２５に示すように、分岐先アドレスがアドレスＢと決定された状態４６でも、状態４５の場合と同様の動作が行われる。
【０１７８】
次に、分岐先アドレスがアドレスＡと決定された状態４７では、分岐先の予測に成功する（Ｓ８１：Ｎｏ）。このとき、Ｃｒｅａｔｅフラグは「０」である（Ｓ８８：Ｎｏ）ので、Ｎｅｘｔポインタが「１」にカウントアップされ（Ｓ９１）、Ｎｅｘｔポインタが指し示す１番目のエントリに登録された分岐先アドレス（アドレスＢ）が、予測分岐先アドレスとして出力される（Ｓ９３）。
【０１７９】
次に、分岐先アドレスがアドレスＢと決定された状態４８でも、分岐先の予測は成功し、Ｎｅｘｔポインタは「２」にカウントアップされる。さらに、分岐先アドレスがアドレスＢと決定された状態４９でも、分岐先の予測は成功する。このとき、Ｎｅｘｔポインタに「１」を加算（Ｓ９１）した値が上限レジスタ１４４の値を超える（Ｓ９２）ことから、Ｎｅｘｔポインタは「０」に戻される（Ｓ８７）。従って、分岐先アドレス記憶部１４２における０番目のエントリに登録された分岐先アドレスが、予測分岐先アドレスとして出力される。
【０１８０】
以後、分岐先アドレスがアドレスＡ，Ｂ，Ｂというパターンで繰り返し出現する間、分岐先の予測は成功し続ける。すなわち、図２３の処理によれば、第４の実施の形態と同様に、アドレスＡ，Ｂ，Ｂという、第２の実施の形態で予測可能なパターンより命令アドレスの組合せの自由度が高い出現パターンに対し、分岐先を予測することが可能になる。
【０１８１】
また、第５の実施の形態では、第４の実施の形態と比較した場合、分岐先の予測に連続して成功するようになるまでの期間が長くなる。その反面、第５の実施の形態では、分岐先アドレス記憶部１４２に対する分岐先アドレスの登録処理や、予測分岐先アドレスの出力元のエントリを選択する処理におけるテーブル管理部１５２ｃの処理手順が簡略化される。
【０１８２】
以上説明した第５の実施の形態では、テーブルジャンプ命令の分岐先を予測できるという効果を奏し、かつ、製造／開発コストや回路面積が増大することを抑制できるという第２〜第４の実施の形態と同様の効果を得ることができる。また、第５の実施の形態によれば、第２の実施の形態と比較して、命令アドレスの組合せの自由度が高い出現パターンについても分岐先を予測できるようになり、予測精度が向上する。
【０１８３】
なお、上記の第２〜第５の実施の形態では、分岐予測テーブル１３１と、分岐命令アドレスごとの分岐先アドレステーブルとが分離して配置されていたが、例えば、分岐予測テーブル１３１と分岐先アドレステーブルとが一体に構成されていてもよい。例えば、複数の分岐先アドレステーブルと、各分岐先アドレステーブルに対応する、分岐予測テーブル１３１内のウェイとが、テーブル選択部１５３や分岐予測制御部１３４を介さずに直接的に接続されていてもよい。
【０１８４】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１８５】
１  演算処理装置
１１  分岐先アドレステーブル
１２  分岐先予測部
１３  予測分岐先アドレス記憶部
１４  命令フェッチ制御部
【図１】
2012093489.tif 000003
【図２】
2012093489.tif 000004
【図３】
2012093489.tif 000005
【図４】
2012093489.tif 000006
【図５】
2012093489.tif 000007
【図６】
2012093489.tif 000008
【図７】
2012093489.tif 000009
【図８】
2012093489.tif 000010
【図９】
2012093489.tif 000011
【図１０】
2012093489.tif 000012
【図１１】
2012093489.tif 000013
【図１２】
2012093489.tif 000014
【図１３】
2012093489.tif 000015
【図１４】
2012093489.tif 000016
【図１５】
2012093489.tif 000017
【図１６】
2012093489.tif 000018
【図１７】
2012093489.tif 000019
【図１８】
2012093489.tif 000020
【図１９】
2012093489.tif 000021
【図２０】
2012093489.tif 000022
【図２１】
2012093489.tif 000023
【図２２】
2012093489.tif 000024
【図２３】
2012093489.tif 000025
【図２４】
2012093489.tif 000026
【図２５】
2012093489.tif 000027
【手続補正書】
【提出日】平成25年6月18日(2013.6.18)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００４０
【補正方法】変更
【補正の内容】
【００４０】
命令フェッチ制御部１１１は、セレクタ１３７から分岐予測情報を受信した場合、受信した分岐予測情報内の予測分岐先アドレスを命令キャッシュ制御部１１２に出力し、命令フェッチを要求する。これとともに、命令フェッチ制御部１１１は、セレクタ１３７から受信した分岐予測情報を、分岐命令実行制御部１１９にも出力する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１２８
【補正方法】変更
【補正の内容】
【０１２８】
図１８において、テーブル管理部１５２ｂは、ステップＳ１２の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル１４０ｂが存在しない場合（Ｓ１３：Ｎｏ）には、テーブル管理部１５２ｂは、インデックス部１４１ｂのテーブルバリッドが無効を示す「０」である分岐先アドレステーブル１４０ｂを、以後の処理対象として新規に選択する。このとき、テーブル管理部１５２ｂは、選択した分岐先アドレステーブル１４０ｂにおけるテーブルバリッドを「１」に更新する（ステップＳ１４）。次に、テーブル管理部１５２ｂは、ステップＳ１４で選択した分岐先アドレステーブル１４０ｂに対して、分岐命令実行制御部１１９からの分岐命令実行結果に含まれる分岐命令アドレスをインデックスとして登録する（ステップＳ１５）。
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルと、
分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する分岐先予測部と、
分岐命令ごとに予測分岐先アドレスを記憶する予測分岐先アドレス記憶部と、
前記分岐先予測部によって予測された予測分岐先アドレスを、前記予測された予測分岐先アドレスに対応する分岐命令のアドレスに対応付けて前記予測分岐先アドレス記憶部に登録するアドレス登録部と、
を有することを特徴とする演算処理装置。
【請求項２】
分岐命令をメモリからフェッチする際に、フェッチする分岐命令に対応付けて記憶された予測分岐先アドレスを、次にフェッチする命令のアドレスとして前記予測分岐先アドレス記憶部から取得する命令フェッチ制御部をさらに有することを特徴とする請求項１記載の演算処理装置。
【請求項３】
分岐命令の実行が完了したとき、実行が完了した分岐命令についての予測分岐先アドレスが前記分岐先予測部によって予測され、前記予測された予測分岐先アドレスが前記予測分岐先アドレス記憶部に登録されることを特徴とする請求項１または２記載の演算処理装置。
【請求項４】
前記分岐先予測部は、分岐命令の実行が完了したとき、当該分岐命令による予測分岐先アドレスを予測することを特徴とする請求項１または２記載の演算処理装置。
【請求項５】
前記分岐先予測部は、前記各分岐先アドレステーブルに登録された分岐先アドレスを登録順に出力させることで、予測分岐先アドレスを出力することを特徴とする請求項１〜４のいずれか１項に記載の演算処理装置。
【請求項６】
前記分岐先予測部は、分岐命令の実行が完了したとき、実行が完了した分岐命令に対応する分岐先アドレステーブルから、当該分岐命令による分岐先と同一のアドレスが記憶されたエントリを探索し、前記同一のアドレスが記憶されたエントリを探索できなかった場合には、前記実行が完了した分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルにおける空きエントリのうちの先頭のエントリに登録するとともに、当該分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力し、前記同一のアドレスが記憶されたエントリを探索できた場合には、探索されたエントリの次のエントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力することを特徴とする請求項１または２記載の演算処理装置。
【請求項７】
前記分岐先予測部は、分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから、前回の分岐命令の実行完了時に選択したエントリの次のエントリを選択して、選択したエントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力することを特徴とする請求項１または２記載の演算処理装置。
【請求項８】
前記分岐先予測部は、
実行が完了した分岐命令による分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに対して空きエントリがなくなるまで先頭エントリから順に登録し、かつ、
分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリを選択して、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから前回選択したエントリの次のエントリを選択して、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力する、
ことを特徴とする請求項１または２記載の演算処理装置。
【請求項９】
前記分岐先予測部は、
実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に初めて成功するより前の第１の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリから順に登録するとともに、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに登録された分岐先アドレスを予測分岐先アドレスとして出力し、
実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に初めて成功した後の第２の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令に対応する分岐先アドレステーブルにおけるエントリのうち分岐先アドレスが登録されたエントリを先頭から順に選択し、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力する、
ことを特徴とする請求項１または２記載の演算処理装置。
【請求項１０】
前記分岐先予測部は、前記第２の期間において、
当該分岐命令の実行が完了し、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功するごとに、当該分岐命令に対応する分岐先アドレステーブルにおけるエントリのうち分岐先アドレスが登録されたエントリを先頭から順に選択し、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力し、
当該分岐命令の実行が完了し、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに登録された分岐先アドレスを予測分岐先アドレスとして出力する、
ことを特徴とする請求項９記載の演算処理装置。
【請求項１１】
分岐命令ごとに設けられ、各分岐命令に対応する分岐先アドレステーブルのエントリをそれぞれ指し示す複数のポインタをさらに有し、
前記分岐先予測部は、
前記第１の期間では、分岐命令の実行が完了したとき、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、
前記第２の期間では、分岐命令の実行が完了したとき、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させる、
ことを特徴とする請求項９記載の演算処理装置。
【請求項１２】
分岐命令ごとに設けられ、各分岐命令に対応する分岐先アドレステーブルのエントリをそれぞれ指し示す複数のポインタをさらに有し、
前記分岐先予測部は、
前記第１の期間では、分岐命令の実行が完了したとき、当該分岐命令に対応するポインタが指し示す分岐先アドレステーブルのエントリに対して分岐先アドレスを登録するとともに、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定し、
前記第２の期間では、分岐命令の実行が完了したとき、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させる、
ことを特徴とする請求項９記載の演算処理装置。
【請求項１３】
前記分岐先予測部は、前記第２の期間において、分岐命令の実行が完了し、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功したとき、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように更新し、更新後のポインタが指し示すエントリに分岐先アドレスが登録されている場合には、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、前記更新後のポインタが指し示すエントリに分岐先のアドレスが登録されていない場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させることを特徴とする請求項１２記載の演算処理装置。
【請求項１４】
演算処理装置が、
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測し、
分岐命令ごとに予測分岐先アドレスを記憶する予測分岐先アドレス記憶部に対して、前記予測により予測された予測分岐先アドレスを、前記予測された予測分岐先アドレスに対応する分岐命令のアドレスに対応付けて登録する、
ことを特徴とする分岐予測方法。
【手続補正書】
【提出日】平成26年1月10日(2014.1.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルと、
実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する分岐先予測部と、を有し、
前記分岐先予測部は、前記各分岐先アドレステーブルに登録された分岐先アドレスを登録順に出力させることで、次回実行時の予測分岐先アドレスを出力することを特徴とする演算処理装置。
【請求項２】
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルと、
実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する分岐先予測部と、
を有し、
前記分岐先予測部は、分岐命令の実行が完了したとき、実行が完了した分岐命令に対応する分岐先アドレステーブルから、当該分岐命令による分岐先と同一のアドレスが記憶されたエントリを探索し、前記同一のアドレスが記憶されたエントリを探索できなかった場合には、前記実行が完了した分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルにおける空きエントリのうちの先頭のエントリに登録するとともに、当該分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力し、前記同一のアドレスが記憶されたエントリを探索できた場合には、探索されたエントリの次のエントリに記憶された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力することを特徴とする演算処理装置。
【請求項３】
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルと、
実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する分岐先予測部と、
を有し、
前記分岐先予測部は、分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから、前回の分岐命令の実行完了時に選択したエントリの次のエントリを選択して、選択したエントリに記憶された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力することを特徴とする演算処理装置。
【請求項４】
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルと、
実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する分岐先予測部と、
を有し、
前記分岐先予測部は、
実行が完了した分岐命令による分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに対して空きエントリがなくなるまで先頭エントリから順に登録し、かつ、分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリを選択して、選択したエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから前回選択したエントリの次のエントリを選択して、選択したエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力する、
ことを特徴とする演算処理装置。
【請求項５】
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルと、
実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する分岐先予測部と、
を有し、
前記分岐先予測部は、
実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に初めて成功するより前の第１の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリから順に登録するとともに、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力し、
実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に初めて成功した後の第２の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令に対応する分岐先アドレステーブルにおけるエントリのうち分岐先アドレスが登録されたエントリを先頭から順に選択し、選択したエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力する、
ことを特徴とする演算処理装置。
【請求項６】
前記分岐先予測部は、前記第２の期間において、
当該分岐命令の実行が完了し、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功するごとに、当該分岐命令に対応する分岐先アドレステーブルにおけるエントリのうち分岐先アドレスが登録されたエントリを先頭から順に選択し、選択したエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力し、
当該分岐命令の実行が完了し、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力する、
ことを特徴とする請求項５記載の演算処理装置。
【請求項７】
分岐命令ごとに設けられ、各分岐命令に対応する分岐先アドレステーブルのエントリをそれぞれ指し示す複数のポインタをさらに有し、
前記分岐先予測部は、
前記第１の期間では、分岐命令の実行が完了したとき、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力させ、
前記第２の期間では、分岐命令の実行が完了したとき、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力させ、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力させる、
ことを特徴とする請求項５記載の演算処理装置。
【請求項８】
分岐命令ごとに設けられ、各分岐命令に対応する分岐先アドレステーブルのエントリをそれぞれ指し示す複数のポインタをさらに有し、
前記分岐先予測部は、
前記第１の期間では、分岐命令の実行が完了したとき、当該分岐命令に対応するポインタが指し示す分岐先アドレステーブルのエントリに対して分岐先アドレスを登録するとともに、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定し、
前記第２の期間では、分岐命令の実行が完了したとき、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力させ、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力させる、
ことを特徴とする請求項５記載の演算処理装置。
【請求項９】
前記分岐先予測部は、前記第２の期間において、分岐命令の実行が完了し、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功したとき、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように更新し、更新後のポインタが指し示すエントリに分岐先アドレスが登録されている場合には、当該ポインタが指し示すエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力させ、前記更新後のポインタが指し示すエントリに分岐先のアドレスが登録されていない場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力させることを特徴とする請求項８記載の演算処理装置。
【請求項１０】
分岐命令ごとに予測分岐先アドレスを記憶する予測分岐先アドレス記憶部と、
前記分岐先予測部によって予測された予測分岐先アドレスを、前記予測された予測分岐先アドレスに対応する分岐命令のアドレスに対応付けて前記予測分岐先アドレス記憶部に登録するアドレス登録部と、
分岐命令をメモリからフェッチする際に、フェッチする分岐命令に対応付けて記憶された予測分岐先アドレスを、次にフェッチする命令のアドレスとして前記予測分岐先アドレス記憶部から取得する命令フェッチ制御部と、
をさらに有することを特徴とする請求項１〜９のいずれか１項に記載の演算処理装置。
【請求項１１】
演算処理装置が、
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する、
処理を含み、
予測分岐先アドレスの予測処理では、前記各分岐先アドレステーブルに登録された分岐先アドレスを登録順に出力させることで、次回実行時の予測分岐先アドレスを出力することを特徴とする分岐予測方法。
【請求項１２】
演算処理装置が、
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する、
処理を含み、
予測分岐先アドレスの予測処理では、分岐命令の実行が完了したとき、実行が完了した分岐命令に対応する分岐先アドレステーブルから、当該分岐命令による分岐先と同一のアドレスが記憶されたエントリを探索し、前記同一のアドレスが記憶されたエントリを探索できなかった場合には、前記実行が完了した分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルにおける空きエントリのうちの先頭のエントリに登録するとともに、当該分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力し、前記同一のアドレスが記憶されたエントリを探索できた場合には、探索されたエントリの次のエントリに記憶された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力することを特徴とする分岐予測方法。
【請求項１３】
演算処理装置が、
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する、
処理を含み、
予測分岐先アドレスの予測処理では、分岐命令の実行が完了したとき、実行が完了した分岐命令についての分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから、前回の分岐命令の実行完了時に選択したエントリの次のエントリを選択して、選択したエントリに記憶された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力することを特徴とする分岐予測方法。
【請求項１４】
演算処理装置が、
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する、
処理を含み、
予測分岐先アドレスの予測処理では、
実行が完了した分岐命令による分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに対して空きエントリがなくなるまで先頭エントリから順に登録し、かつ、分岐命令の実行が完了したとき、実行が完了した分岐命令についての分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリを選択して、選択したエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから前回選択したエントリの次のエントリを選択して、選択したエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力する、
ことを特徴とする分岐予測方法。
【請求項１５】
演算処理装置が、
複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、実行された分岐命令についての次回実行時の予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する、
処理を含み、
予測分岐先アドレスの予測処理では、
実行が完了した分岐命令についての分岐先の予測に初めて成功するより前の第１の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリから順に登録するとともに、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力し、
前記実行が完了した分岐命令についての分岐先の予測に初めて成功した後の第２の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令に対応する分岐先アドレステーブルにおけるエントリのうち分岐先アドレスが登録されたエントリを先頭から順に選択し、選択したエントリに登録された分岐先アドレスを次回実行時の予測分岐先アドレスとして出力する、
ことを特徴とする分岐予測方法。
【国際調査報告】
2012093489.tif 000028
2012093489.tif 000029
2012093489.tif 000030
2012093489.tif 000031