"複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルと、分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する分岐先予測部と、を有することを特徴とする演算処理装置。分岐命令ごとに予測分岐先アドレスを記憶する予測分岐先アドレス記憶部と、前記分岐先予測部によって予測された予測分岐先アドレスを、前記予測された予測分岐先アドレスに対応する分岐命令のアドレスに対応付けて前記予測分岐先アドレス記憶部に登録するアドレス登録部と、をさらに有することを特徴とする請求の範囲第1項記載の演算処理装置。分岐命令をメモリからフェッチする際に、フェッチする分岐命令に対応付けて記憶された予測分岐先アドレスを、次にフェッチする命令のアドレスとして前記予測分岐先アドレス記憶部から取得する命令フェッチ制御部をさらに有することを特徴とする請求の範囲第2項記載の演算処理装置。分岐命令の実行が完了したとき、実行が完了した分岐命令についての予測分岐先アドレスが前記分岐先予測部によって予測され、前記予測された予測分岐先アドレスが前記予測分岐先アドレス記憶部に登録されることを特徴とする請求の範囲第2項または第3項記載の演算処理装置。前記分岐先予測部は、分岐命令の実行が完了したとき、当該分岐命令による予測分岐先アドレスを予測することを特徴とする請求の範囲第1項~第3項のいずれか1項に記載の演算処理装置。前記分岐先予測部は、前記各分岐先アドレステーブルに登録された分岐先アドレスを登録順に出力させることで、予測分岐先アドレスを出力することを特徴とする請求の範囲第1項~第5項のいずれか1項に記載の演算処理装置。前記分岐先予測部は、分岐命令の実行が完了したとき、実行が完了した分岐命令に対応する分岐先アドレステーブルから、当該分岐命令による分岐先と同一のアドレスが記憶されたエントリを探索し、前記同一のアドレスが記憶されたエントリを探索できなかった場合には、前記実行が完了した分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルにおける空きエントリのうちの先頭のエントリに登録するとともに、当該分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力し、前記同一のアドレスが記憶されたエントリを探索できた場合には、探索されたエントリの次のエントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力することを特徴とする請求の範囲第1項~第3項いずれか1項に記載の演算処理装置。前記分岐先予測部は、分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから、前回の分岐命令の実行完了時に選択したエントリの次のエントリを選択して、選択したエントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに記憶された分岐先アドレスを予測分岐先アドレスとして出力することを特徴とする請求の範囲第1項~第3項のいずれか1項に記載の演算処理装置。前記分岐先予測部は、実行が完了した分岐命令による分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに対して空きエントリがなくなるまで先頭エントリから順に登録し、かつ、分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリを選択して、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力し、前記実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応する分岐先アドレステーブルから前回選択したエントリの次のエントリを選択して、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力する、ことを特徴とする請求の範囲第1項~第3項のいずれか1項に記載の演算処理装置。前記分岐先予測部は、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に初めて成功するより前の第1の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令による分岐先アドレスを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリから順に登録するとともに、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに登録された分岐先アドレスを予測分岐先アドレスとして出力し、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に初めて成功した後の第2の期間では、当該分岐命令の実行が完了するごとに、当該分岐命令に対応する分岐先アドレステーブルにおけるエントリのうち分岐先アドレスが登録されたエントリを先頭から順に選択し、選択したエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力する、ことを特徴とする請求の範囲第1項~第3項のいずれか1項に記載の演算処理装置。前記分岐先予測部は、前記第2の期間において、当該分岐命令の実行が完了したとき、実行が完了した分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応する分岐先アドレステーブルにおける先頭エントリに登録された分岐先アドレスを予測分岐先アドレスとして出力することを特徴とする請求の範囲第10項記載の演算処理装置。分岐命令ごとに設けられ、各分岐命令に対応する分岐先アドレステーブルのエントリをそれぞれ指し示す複数のポインタをさらに有し、前記分岐先予測部は、前記第1の期間では、分岐命令の実行が完了したとき、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスの予測分岐先アドレスとして出力させ、前記第2の期間では、分岐命令の実行が完了したとき、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させる、ことを特徴とする請求の範囲第10項記載の演算処理装置。分岐命令ごとに設けられ、各分岐命令に対応する分岐先アドレステーブルのエントリをそれぞれ指し示す複数のポインタをさらに有し、前記分岐先予測部は、前記第1の期間では、分岐命令の実行が完了したとき、当該分岐命令に対応するポインタが指し示す分岐先アドレステーブルのエントリに対して分岐先アドレスを登録するとともに、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定し、前記第2の期間では、分岐命令の実行が完了したとき、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に失敗した場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させる、ことを特徴とする請求の範囲第10項記載の演算処理装置。前記分岐先予測部は、前記第2の期間において、分岐命令の実行が完了し、当該分岐命令についての前記分岐先予測部からの予測分岐先アドレスに基づく分岐先の予測に成功したとき、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルにおける次のエントリを指し示すように更新し、更新後のポインタが指し示すエントリに分岐先アドレスが登録されている場合には、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させ、前記更新後のポインタが指し示すエントリに分岐先のアドレスが登録されていない場合には、当該分岐命令に対応するポインタを当該分岐命令に対応する分岐先アドレステーブルの先頭エントリを指し示すように設定して、当該ポインタが指し示すエントリに登録された分岐先アドレスを予測分岐先アドレスとして出力させることを特徴とする請求の範囲第13項記載の演算処理装置。演算処理装置が、複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測することを特徴とする分岐予測方法。ところで、分岐命令のうち、条件分岐、無条件分岐、サブルーチンコールなどの命令では、分岐先の命令アドレスは常に一定となる。これに対して、例えば、C言語のスイッチケース文で示される命令のように、条件によって複数の分岐先をとり得るような命令もある。複数の分岐先をとり得る分岐命令を実行する場合、その分岐命令の後に分岐することが予測できたとしても、どの命令アドレスに分岐するかは事前の命令を実行するまでわからないことから、分岐先を予測することが難しかった。本発明はこのような課題に鑑みてなされたものであり、複数の分岐先をとり得る分岐命令による分岐先を予測可能にした演算処理装置および分岐予測方法を提供することを目的とする。上記目的を達成するために、複数の分岐先アドレステーブルと、分岐先予測部とを有する演算処理装置が提供される。この演算処理装置において、分岐先アドレステーブルは、複数の分岐先をとり得る分岐命令ごとに設けられ、各分岐先アドレステーブルは、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴として記憶する。また、分岐先予測部は、分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する。また、上記目的を達成するために、分岐予測方法が提供される。この分岐予測方法では、演算処理装置によって次のような処理が実行される。演算処理装置は、複数の分岐先をとり得る分岐命令ごとに設けられ、自身に対応する分岐命令による過去の複数回の分岐先アドレスを履歴としてそれぞれ記憶する複数の分岐先アドレステーブルを参照し、分岐命令についての予測分岐先アドレスを、当該分岐命令に対応する分岐先アドレステーブルに記憶された分岐先アドレスの履歴に基づいて予測する。上記の演算処理装置および分岐予測方法では、複数の分岐先をとり得る分岐命令による分岐先を予測することができる。本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。以下、実施の形態について図面を参照して詳細に説明する。第1の実施の形態図1は、第1の実施の形態に係る演算処理装置の構成例を示す図である。図1に示す演算処理装置1は、命令をメモリ図示せずの所定アドレスから読み出し、読み出した命令をデコードして、デコード結果に応じた処理を実行する装置である。この演算処理装置1は、例えば、一般的にCPU、MPUMicroprocessorUnitなどと呼ばれる半導体回路として実現される。また、演算処理装置1は、分岐命令についての分岐先アドレスを予測し、その予測結果に基づいて、分岐命令の実行完了前に分岐先命令をメモリから先読みする機能を備えている。演算処理装置1は、分岐命令のうち、複数の分岐先をとり得る分岐命令についての分岐先アドレスの予測処理を実現する処理機能として、複数の分岐先アドレステーブル11と、分岐先予測部12とを備えている。分岐先アドレステーブル11は、複数の分岐先をとり得る分岐命令ごとに設けられ、各分岐命令による過去の複数回の分岐先アドレスをそれぞれ履歴として記憶する。分岐先予測部12は、複数の分岐先をとり得る分岐命令についての予測分岐先アドレスを、この分岐命令に対応する分岐先アドレステーブル11に記憶された分岐先アドレスの履歴に基づいて予測する。また、分岐先予測部12によって予測された予測分岐先アドレスは、予測分岐先アドレス記憶部13に登録されてもよい。予測分岐先アドレス記憶部13は、分岐命令のアドレスごとに1つの予測分岐先アドレスを保持することが可能になっている。この予測分岐先アドレス記憶部13は、例えば、命令フェッチの制御を行う命令フェッチ制御部14によって参照される。命令フェッチ制御部14は、分岐命令をメモリからフェッチする際に、その分岐命令のアドレスに対応する予測分岐先アドレスを、予測分岐先アドレス記憶部13から取得し、取得した予測分岐先アドレスを用いて分岐先の命令を先読みする。以下、分岐先アドレステーブル11への登録処理および分岐先の予測処理について説明する。なお、以下の第1の実施の形態の説明では、分岐先アドレステーブル11への登録処理も分岐先予測部12が行うものとするが、分岐先アドレステーブル11への登録処理は分岐先予測部12とは別の処理部が行ってもよい。また、以下の第1の実施の形態の説明では、複数の分岐先をとり得る分岐命令を単に分岐命令と呼称する。分岐命令の実行が完了し、その分岐命令による分岐先のアドレスが確定すると、分岐先予測部12は、実行が完了した分岐命令に対応する分岐先アドレステーブル11を選択する。そして、分岐先予測部12は、選択した分岐先アドレステーブル11に対して、確定した分岐先のアドレスを登録する。ただし、分岐先アドレステーブル11への分岐先アドレスの登録は、必要に応じて行われればよい。例えば、分岐先予測部12は、分岐先アドレステーブル11における空きエントリがなくなるまで、分岐先アドレスを登録する。あるいは、分岐先予測部12は、実行が完了した分岐命令について、分岐先予測部12が決定した予測分岐先アドレスに基づく分岐先の予測に成功したか否かに応じて、分岐先アドレスを登録するか否かを決定してもよい。例えば、分岐先予測部12は、分岐先の予測を開始してから、初めて予測に成功する前までの期間において、分岐命令の実行が完了されるたびに分岐先アドレスを分岐先アドレステーブル11に順次登録する。そして、分岐先予測部12は、予測に成功した後では分岐先アドレスの登録を行わないようにする。分岐先予測部12は、1つの分岐先アドレステーブル11に登録された分岐先アドレスの履歴に基づいて、その分岐先アドレステーブル11に対応する分岐命令についての予測分岐先アドレスを決定する。分岐先予測部12は、各分岐先アドレステーブル11に登録された分岐先アドレスのうち1つを、予測分岐先アドレスとして選択し、予測分岐先アドレス記憶部13に登録する。ある分岐命令に対応する分岐先アドレステーブル11から出力された予測分岐先アドレスは、予測分岐先アドレス記憶部13において、同じ分岐命令に対応付けて登録される。予測分岐先アドレスの決定は、分岐命令の実行が完了し、確定した分岐先アドレスを分岐先アドレステーブル11に反映する処理が実行されたタイミングで行われればよい。分岐先予測部12は、例えば、分岐先アドレステーブル11に十分な数の分岐先アドレスが登録された状態であれば、分岐命令が完了するごとに、分岐先アドレステーブル11内のエントリを先頭から順にシフトさせながら選択していく。そして、分岐先予測部12は、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとして予測分岐先アドレス記憶部13に登録する。なお、演算処理装置1においては、分岐先予測部12によって決定された予測分岐先アドレスが、予測分岐先アドレス記憶部13を介さずに、命令フェッチ制御部14から直接的に参照されるような構成とされてもよい。以上の演算処理装置1では、分岐先予測部12は、分岐命令ごとに記憶された分岐先アドレスの履歴に基づいて、分岐命令ごとに1つの予測分岐先アドレスを予測する。従って、複数の分岐先をとり得る分岐命令についての予測分岐先アドレスを予測することが可能になり、演算処理装置1における分岐先の予測精度が向上し、演算処理装置1の処理性能を向上させることができる。第2の実施の形態図2は、第2の実施の形態に係る演算処理装置の全体構成例を示す図である。図2に示す演算処理装置100は、命令フェッチ制御部111、命令キャッシュ制御部112、メモリ113、命令バッファ114、デコーダ115、命令実行制御部116、演算部117、オペランドキャッシュ制御部118、分岐命令実行制御部119、命令完了管理部120、分岐予測部121およびプログラムカウンタ122を備える。命令フェッチ制御部111は、命令キャッシュ制御部112に対して、次にフェッチさせるアドレスを出力し、命令フェッチを要求する。命令フェッチ制御部111は、フェッチさせる命令のアドレスを、プログラムカウンタ122のカウント値、分岐予測部121から出力された予測分岐先のアドレス、分岐命令実行制御部119からの再命令フェッチ要求などに基づいて決定する。また、命令フェッチ制御部111は、分岐予測部121から出力された、予測分岐先アドレスなどを含む分岐予測情報を、分岐命令実行制御部119に通知する。命令キャッシュ制御部112は、その内部に、メモリ113に記憶された命令をキャッシュする命令キャッシュ図示せずを備える。命令キャッシュ制御部112は、命令フェッチ制御部111から出力されたアドレスに基づいて、命令キャッシュから命令を読み出し、読み出した命令を命令バッファ114に格納する。デコーダ115は、命令バッファ114に格納された命令を読み出してデコードする。デコーダ115は、デコードした命令が分岐命令である場合には、デコードした命令を分岐命令実行制御部119に出力し、デコードした命令が分岐命令以外の命令である場合には、デコードした命令を命令実行制御部116に出力する。また、デコーダ115は、デコードした命令の種類に関係なく、デコードした命令を命令完了管理部120に出力する。命令実行制御部116は、例えばリザベーションステーションを備え、デコーダ115からの命令を演算部117またはオペランドキャッシュ制御部118に出力して実行させる。なお、リザベーションステーションは、デコーダ115によってデコードされた命令をキューイングしておき、投入可能な命令から順次、演算部117またはオペランドキャッシュ制御部118に出力するように制御する。演算部117は、例えば汎用の演算器を備え、命令実行制御部116からの命令に応じた演算を実行する。演算を実行した演算部117は、演算結果を図示しないレジスタなどに書き込むとともに、命令実行の完了を命令完了管理部120に報告する。オペランドキャッシュ制御部118は、その内部に、メモリ113に記憶されたデータをキャッシュするオペランドキャッシュを備える。オペランドキャッシュ制御部118は、例えば、命令実行制御部116からのロード命令に基づいてオペランドアドレスを生成し、生成したオペランドアドレスに対応するデータをオペランドキャッシュから読み出す。オペランドキャッシュ制御部118は、オペランドキャッシュからのデータ読み出しを実行すると、命令実行の完了を命令完了管理部120に報告する。分岐命令実行制御部119は、例えば、その内部に分岐リザベーションステーションを備え、デコーダ115によってデコードされた分岐命令を分岐リザベーションステーションに登録することで、分岐命令の実行を管理する。分岐命令実行制御部119は、命令フェッチ制御部111から受信した分岐予測情報と、デコーダ115から受信した分岐命令の実行結果とを比較し、分岐予測の成否を判定する。また、分岐命令実行制御部119は、分岐命令の実行が完了して分岐予測の成否を判定すると、命令実行の完了を命令完了管理部120に報告するとともに、分岐予測の成否、分岐命令および分岐先命令の各アドレスなどの情報を、分岐予測部121に出力する。命令完了管理部120は、デコーダ115によってデコードされた命令の実行状態を管理する。命令完了管理部120は、例えば、命令実行制御部116や分岐命令実行制御部119によってアウトオブオーダで実行された命令を、インオーダで完了させる。命令完了管理部120は、命令を完了させるたびに、プログラムカウンタ122のカウント値をカウントアップさせる。分岐予測部121は、後述するように、分岐命令のアドレスと予測分岐先のアドレスとが対応付けて登録された分岐予測テーブルを備える。分岐予測部121は、命令フェッチ制御部111から次にフェッチさせる命令のアドレスを受信し、受信したアドレスを用いて分岐予測テーブルを検索する。次にフェッチさせる命令が分岐命令の場合、分岐予測部121は、検索結果として、予測分岐先のアドレスなどを含む分岐予測情報を分岐予測テーブルから取得し、取得した分岐予測情報を命令フェッチ制御部111に出力する。また、分岐予測部121は、分岐命令実行制御部119から受信した、分岐予測の成否、分岐命令および分岐先命令の各アドレスの情報などに基づいて、分岐命令による分岐先を予測し、予測結果に応じて分岐予測テーブルを更新する。プログラムカウンタ122は、命令完了管理部120からの要求に応じてカウント値をカウントアップする。また、プログラムカウンタ122は、分岐命令実行制御部119からの分岐先アドレスによってカウント値を更新する。次に、分岐予測部について説明する。まず、図3は、分岐予測部が備える分岐予測テーブルにおけるデータの構成例を示す図である。分岐予測部121が備える分岐予測テーブル131は、例えばセットアソシアティブの記憶装置であり、複数のウェイを有する。分岐予測テーブル131の各ウェイには、タグとして分岐命令アドレスまたはそのアドレスの一部が登録され、各分岐命令アドレスに対応付けて、分岐命令の種別を示す分岐命令種別、分岐命令についての種別以外の所定の情報を示すフラグ、および予測分岐先アドレスが登録されている。図4は、分岐予測部の内部構成例を示す図である。なお、図4では、分岐予測部121に加えて命令フェッチ制御部111および分岐命令実行制御部119も示し、分岐予測部121の動作を、命令フェッチ制御部111および分岐命令実行制御部119の動作とともに説明する。分岐予測部121は、分岐予測テーブル131、グローバルヒストリ132、テーブルジャンプ予測部133、分岐予測制御部134、投機リターンアドレススタック135、リターンアドレススタック136およびセレクタ137を備えている。図3に示したように、分岐予測テーブル131には、分岐命令アドレスと予測分岐先アドレスとが対応付けて記憶されている。分岐予測テーブル131に対する登録処理は、分岐予測制御部134によって行われる。命令フェッチ制御部111は、フェッチさせる命令のアドレスを命令キャッシュ制御部112に出力する際に、同じアドレスを分岐予測テーブル131にも出力し、分岐予測テーブル131に対して検索を要求する。命令フェッチ制御部111から出力されたアドレスがタグに登録されたウェイが分岐予測テーブル131から検索された場合、検索されたウェイ内の情報と、検索されたウェイのウェイ番号とが、分岐予測情報として、セレクタ137を介して命令フェッチ制御部111に出力される。ただし、分岐予測テーブル131から検索されたウェイにおける分岐命令アドレスがサブルーチンコール命令を示すものであった場合、分岐予測テーブル131は、検索された分岐命令アドレスを投機リターンアドレススタック135に出力し、投機リターンアドレススタック135は、分岐予測テーブル131から出力された分岐命令アドレスに対応する予測分岐先アドレスを保持する。後述するように、分岐予測テーブル131から検索されたウェイにおける分岐命令アドレスがサブルーチンリターン命令であった場合には、投機リターンアドレススタック135またはリターンアドレススタック136から取得された予測分岐先アドレスが、セレクタ137を介して命令フェッチ制御部111に出力される。命令フェッチ制御部111は、セレクタ137から分岐予測情報を受信した場合、受信した分岐予測情報内の分岐予測先アドレスを命令キャッシュ制御部112に出力し、命令フェッチを要求する。これとともに、命令フェッチ制御部111は、セレクタ137から受信した分岐予測情報を、分岐命令実行制御部119にも出力する。分岐命令実行制御部119は、命令フェッチ制御部111から受信した分岐予測情報と、デコーダ115から受信した分岐命令の実行結果とを比較し、分岐予測の成否を判定する。分岐命令実行制御部119は、分岐予測が間違っていたことが判明した場合、分岐先命令の投機実行を図示しない命令実行部にキャンセルさせるとともに、命令フェッチ制御部111に対して、正しい分岐先アドレスを通知して分岐先命令の再フェッチを要求する。また、分岐命令実行制御部119は、分岐命令の実行が完了して分岐予測の成否を判定すると、命令実行の完了を命令完了管理部120に報告する。これとともに、分岐命令実行制御部119は、分岐命令実行結果を分岐予測部121に出力する。分岐命令実行結果には、実行完了信号、実行された分岐命令のアドレス、実行された分岐命令の種別情報、分岐先命令のアドレス、分岐予測の成否を示す成否情報、予測分岐先アドレスを登録すべき分岐予測テーブル131内のウェイ番号などを含む。グローバルヒストリ132は、分岐命令実行制御部119から出力される分岐命令実行結果のうち、条件分岐命令についての実行結果を内部に取り込んで動作する。グローバルヒストリ132は、取り込んだ分岐命令実行結果に基づいて、条件分岐命令の実行による分岐/非分岐の履歴を記憶し、記憶した履歴に基づいて予測分岐先アドレスを出力する。例えば、グローバルヒストリ132は、取り込んだ分岐命令実行結果に基づき、過去に発生した連続分岐回数および連続非分岐回数を記憶する。グローバルヒストリ132は、現在連続している分岐の回数が所定値になると、次回を非分岐と予測し、現在連続している非分岐の回数が所定値になると、次回を分岐と予測する。グローバルヒストリ132は、次回を分岐と予測した場合に、実行された分岐命令に対応する分岐先のアドレスを、予測分岐先のアドレスとして分岐予測制御部134に出力し、分岐予測テーブル131に登録させる。テーブルジャンプ予測部133は、分岐命令実行制御部119から出力される分岐命令実行結果のうち、サブルーチンリターン命令を除く、複数の分岐先をとり得る分岐命令についての実行結果を、内部に取り込んで動作する。ここで、テーブルジャンプ予測部133が取り込む命令には、代表的な例として、C言語のスイッチケース文で示されるテーブルジャンプと呼ばれる命令を含む。そこで、以下の説明では、テーブルジャンプ予測部133が取り込む命令を、テーブルジャンプ命令と呼ぶことにする。テーブルジャンプ予測部133は、後述するように、1つ以上のテーブルジャンプ命令のそれぞれのアドレスに対して、実行された複数回の分岐先アドレスの履歴を保持可能なテーブルを備える。テーブルジャンプ予測部133は、内部のテーブルを用いて、テーブルジャンプ命令に対応する予測分岐先アドレスを決定し、決定した予測分岐先アドレスを分岐予測制御部134に出力して、分岐予測テーブル131に登録させる。ここで、図5は、テーブルジャンプ命令を実行させるプログラムの例を示す図である。図5では、C言語のスイッチケース文を用いて記述されたプログラムの例を示す。図5に示したプログラムが実行されると、条件式aの値に応じて異なる処理が実行される。条件式aの値がa1である場合、処理Paが実行され、条件式aの値がa2である場合、処理Pbが実行され、条件式aの値がa1およびa2以外である場合、処理Pcが実行される。すなわち、演算処理装置100は、図5に示したプログラムに従って命令を実行したとき、条件式aの値に応じて異なる分岐先の命令を実行する。以下、図4に戻って説明する。分岐予測制御部134は、分岐命令の実行が完了し、分岐命令実行制御部119から分岐命令実行結果が出力されると、予測分岐先アドレスを分岐予測テーブル131に登録する。条件分岐命令の実行が完了した場合、分岐予測制御部134は、グローバルヒストリ132から出力された予測分岐先アドレスを分岐予測テーブル131に登録する。また、テーブルジャンプ命令の実行が完了した場合、分岐予測制御部134は、テーブルジャンプ予測部133から出力された予測分岐先アドレスを分岐予測テーブル131に登録する。さらに、分岐予測制御部134は、例えば、サブルーチンコール命令やサブルーチンリターン命令の実行が完了した場合など、グローバルヒストリ132およびテーブルジャンプ予測部133から予測分岐先アドレスが出力されない場合には、分岐命令実行制御部119から出力された分岐命令実行結果に含まれる分岐先アドレスを、予測分岐先アドレスとして分岐予測テーブル131に登録する。分岐予測制御部134は、予測分岐先アドレスとともに、この予測分岐先アドレスに対応する分岐命令アドレス、種別情報および各種フラグを、分岐予測テーブル131内の同じウェイに登録する。分岐予測制御部134は、分岐予測テーブル131に登録する分岐命令アドレス、種別情報および各種フラグを、分岐命令実行制御部119から出力された分岐命令実行結果から取得する。また、分岐予測制御部134は、実行された分岐命令に対応するウェイがすでに分岐予測テーブル131に存在する場合には、そのウェイ内のタグ以外の情報を新たな情報によって更新する。この場合、分岐予測制御部134は、分岐予測テーブル131のウェイのうち、分岐命令実行制御部119からの分岐命令実行結果に含まれるウェイ番号が示すウェイに対して、情報を登録する。一方、分岐予測制御部134は、実行された分岐命令に対応するウェイが分岐予測テーブル131に存在しない場合には、分岐予測テーブル131内の空いているウェイに対して、タグを含む情報を登録する。ただし、分岐予測制御部134は、分岐予測テーブル131に空いているウェイがなければ、例えばLRULeastRecentlyUsedまたはそれに準じる方法などでウェイを選択し、選択したウェイに対してタグを含む情報を登録する。なお、分岐予測制御部134は、例えば、分岐命令アドレスと、分岐予測テーブル131内のウェイとの対応表に基づいて、分岐予測テーブル131における予測分岐先アドレスの登録先のウェイを指定してもよい。投機リターンアドレススタック135は、サブルーチンリターン命令についての戻り先アドレスを、このサブルーチンリターン命令に対応するサブルーチンコール命令の実行前に投機的に予測する。投機リターンアドレススタック135は、前述のように、分岐予測テーブル131から検索されたウェイにおける分岐命令アドレスがサブルーチンコール命令のアドレスであった場合に、検索された分岐命令アドレスを分岐予測テーブル131から取得する。投機リターンアドレススタック135は、検索されたサブルーチンコール命令のアドレスをこのサブルーチンコール命令に対応するサブルーチンリターン命令のアドレスに変換する演算を行い、演算結果をスタックに保持する。投機リターンアドレススタック135は、例えば、サブルーチンコール命令のアドレスに所定の値を加算することで、このサブルーチンコール命令に対応するサブルーチンリターン命令のアドレスを算出する。投機リターンアドレススタック135は、スタックに保持されたアドレスを、サブルーチンリターン命令についての予測戻り先アドレスすなわち予測分岐先アドレスとして出力する。リターンアドレススタック136は、分岐命令実行制御部119からの分岐命令実行結果に基づき、実行が完了したサブルーチンコール命令に対応するサブルーチンリターン命令の戻り先アドレスを記憶する。リターンアドレススタック136は、実行が完了したサブルーチンコール命令のアドレスを、このサブルーチンコール命令に対応するサブルーチンリターン命令のアドレスに変換する演算を行い、演算結果をスタックに保持する。リターンアドレススタック136は、例えば、サブルーチンコール命令のアドレスに所定の値を加算することで、このサブルーチンコール命令に対応するサブルーチンリターン命令のアドレスを算出する。リターンアドレススタック136は、スタックに保持されたアドレスを、サブルーチンリターン命令についての予測戻り先アドレスすなわち予測分岐先アドレスとして出力する。セレクタ137は、命令フェッチ制御部111から分岐予測テーブル131に対して検索が要求されると、分岐予測テーブル131から検索されたウェイに基づく分岐予測情報を、命令フェッチ制御部111に出力する。この分岐予測情報には、予測分岐先アドレスが含まれる。ただし、セレクタ137は、分岐予測テーブル131に対してサブルーチンリターン命令の検索が要求された場合には、投機リターンアドレススタック135またはリターンアドレススタック136のうち有効な予測分岐先アドレスを保持するスタックから、予測分岐先アドレスを取得して、命令フェッチ制御部111に出力する。次に、テーブルジャンプ予測部133における処理について説明する。図6は、テーブルジャンプ予測部の内部構成例を示す図である。テーブルジャンプ予測部133には、分岐先アドレステーブル140が複数設けられる。分岐先アドレステーブル140は、分岐命令ごとに用意され、各分岐先アドレステーブル140には、1つの分岐命令アドレスと、実行された分岐命令による複数の分岐先アドレスとが保持できるようになっている。また、テーブルジャンプ予測部133は、分岐命令識別部151、テーブル管理部152およびテーブル選択部153を備えている。分岐命令識別部151は、分岐命令の実行が完了したとき、分岐命令実行制御部119から出力された分岐命令実行結果に含まれる種別情報に基づいて、出力された分岐命令実行結果がテーブルジャンプ命令についての実行結果かを判定する。分岐命令識別部151は、分岐命令実行結果がテーブルジャンプ命令についての実行結果であると判定した場合、テーブル管理部152の処理を開始させる。テーブル管理部152は、分岐先アドレステーブル140の生成および検索や、予測分岐先アドレスの決定などの処理を行う。テーブル管理部152は、実行が完了したテーブルジャンプ命令のアドレスが登録された分岐先アドレステーブル140を選択する。このとき、実行が完了したテーブルジャンプ命令のアドレスが登録された分岐先アドレステーブル140が存在しない場合には、テーブル管理部152は、実行が完了したテーブルジャンプ命令のアドレスを登録した新たな分岐先アドレステーブル140を生成する。テーブル管理部152は、テーブル選択部153に対してテーブル選択信号を出力し、選択した、または新たに生成した分岐先アドレステーブル140からの出力を選択させる。テーブル管理部152は、選択した、または新たに生成した分岐先アドレステーブル140に対して、分岐命令実行結果に含まれる分岐先アドレスを登録する。これとともに、テーブル管理部152は、分岐先アドレステーブル140のエントリの中から、予測分岐先アドレスとする分岐先アドレスが保持されたエントリを選択し、選択したエントリから予測分岐先アドレスを出力させるように指示するエントリ選択信号を出力する。テーブル選択部153は、テーブル管理部152からのテーブル選択信号に基づいて、分岐先アドレステーブル140のうちの1つを選択する。テーブル選択部153は、選択した分岐先アドレステーブル140から出力された予測分岐先アドレスを、分岐予測制御部134を介して分岐予測テーブル131に出力する。図7は、第2の実施の形態における分岐先アドレステーブルの構成例を示す図である。なお、図7では、参考のため、テーブル管理部152およびテーブル選択部153についても図示している。分岐先アドレステーブル140のそれぞれには、情報を保持する領域として、インデックス部141および分岐先アドレス記憶部142が設けられている。インデックス部141には、テーブルバリッドとインデックスとが保持される。テーブルバリッドは、分岐先アドレステーブル140が有効であるか否かすなわち、分岐先アドレステーブル140に、分岐命令のアドレスと少なくとも1つの分岐先アドレスとが登録されているか否かを示すフラグである。テーブルバリッドは、値が1のとき、分岐先アドレステーブル140が有効であることを示し、値が0のとき、分岐先アドレステーブル140が有効でないことを示す。インデックスには、分岐命令のアドレスの全体または一部が登録される。インデックスに登録された値により、分岐先アドレステーブル140がどのテーブルジャンプ命令に対応するかが識別される。分岐先アドレス記憶部142には、バリッドフラグ図7ではVと表記と分岐先アドレスとをそれぞれ含む複数のエントリが設けられている。テーブル管理部152の制御により、分岐先アドレス記憶部142では先頭のエントリから順に分岐先アドレスが登録され、分岐先アドレスが登録されたエントリではバリッドフラグが1とされる。また、分岐先アドレステーブル140のそれぞれには、エントリ選択部143が設けられている。エントリ選択部143は、テーブル管理部152からのエントリ選択信号に応じて、分岐先アドレステーブル140内の1つのエントリを選択し、選択したエントリから出力された予測分岐先アドレスを、テーブル選択部153に出力する。図8は、第2の実施の形態におけるテーブルジャンプ命令の分岐先予測処理手順を示すフローチャートである。[ステップS11]分岐命令の実行が完了すると、分岐命令実行制御部119からの分岐命令実行結果に含まれる実行完了信号がオンを示す1になる。このとき、分岐命令実行制御部119からの分岐命令実行結果に含まれる、実行完了信号以外の信号が有効になる。分岐命令識別部151は、実行完了信号が1になったことを検知すると、分岐命令実行制御部119から分岐命令実行結果に含まれる種別情報に基づいて、実行が完了した命令がテーブルジャンプ命令であるかを判定する。実行が完了した命令がテーブルジャンプ命令であると分岐命令識別部151が判定すると、例えば、分岐命令識別部151からテーブル管理部152に対してイネーブル信号が出力されることにより、ステップS12以降の処理が実行される。[ステップS12]テーブル管理部152は、テーブルジャンプ予測部133に含まれる複数の分岐先アドレステーブル140のそれぞれにおけるインデックス部141を参照する。そして、テーブル管理部152は、複数の分岐先アドレステーブル140の中から、分岐命令実行制御部119からの分岐命令実行結果に含まれる分岐命令アドレスがインデックスとして登録されたテーブルを検索する。このステップS12では、インデックス部141において、分岐命令実行結果に含まれる分岐命令アドレスがインデックスとして登録され、なおかつテーブルバリッドが1である分岐先アドレステーブル140が検索される。[ステップS13]テーブル管理部152は、ステップS12の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル140が存在した場合S13:Yesには、その分岐先アドレステーブル140を以後の処理対象として選択し、ステップS16の処理を実行する。一方、テーブル管理部152は、ステップS12の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル140が存在しない場合S13:Noには、ステップS14の処理を実行する。[ステップS14]テーブル管理部152は、インデックス部141のテーブルバリッドが無効を示す0である分岐先アドレステーブル140を、以後の処理対象として新規に選択する。このとき、テーブル管理部152は、選択した分岐先アドレステーブル140におけるテーブルバリッドを1に更新する。なお、テーブル管理部152は、例えば、ラウンドロビンカウンタを用いて、分岐先アドレステーブル140を次のように管理する。分岐先アドレステーブル140の数をN個ただし、Nは1以上の整数とすると、ラウンドロビンカウンタのカウント初期値は0であり、カウント値の上限値はN-1である。ステップS14では、テーブル管理部152は、ラウンドロビンカウンタの現在のカウント値に対応する分岐先アドレステーブル140を処理対象として選択する。このとき、テーブル管理部152は、選択した分岐先アドレステーブル140におけるテーブルバリッドを1に更新するとともに、ラウンドロビンカウンタのカウント値に1を加算する。[ステップS15]テーブル管理部152は、ステップS14で選択した分岐先アドレステーブル140に対して、分岐命令実行制御部119からの分岐命令実行結果に含まれる分岐命令アドレスをインデックスとして登録する。この後、ステップS16の処理が実行される。[ステップS16]テーブル管理部152は、処理対象として選択した分岐先アドレステーブル140における登録情報に基づいて、予測分岐先アドレスを決定する。このステップS16では、テーブル管理部152は、エントリ選択部143に対して、分岐先アドレス記憶部142のエントリのうち1つを選択させ、選択させたエントリに登録されたアドレスを予測分岐先アドレスとしてテーブル選択部153に出力させる。なお、このステップS16の処理については、図9において詳しく説明する。[ステップS17]テーブル管理部152は、テーブル選択部153に対して選択信号を出力することで、処理対象として選択した分岐先アドレステーブル140におけるエントリ選択部143からの出力を選択させる。なお、選択信号の出力自体は、ステップS13で分岐命令アドレスが登録された分岐先アドレステーブル140の存在を確認してから、あるいは、ステップS14で分岐先アドレステーブル140を新規に選択してから、ステップS17の実行タイミングまでのどの段階で行われてもよい。エントリ選択部143から出力された予測分岐先アドレスは、テーブル選択部153を通じて分岐予測制御部134に出力される。分岐予測制御部134は、テーブル選択部153から出力された予測分岐先アドレスを、この予測分岐先アドレスに対応する分岐命令アドレス、分岐命令種別および各種フラグとともに、分岐予測テーブル131に登録する。このとき、分岐予測制御部134は、分岐予測テーブル131に登録する分岐命令アドレス、分岐命令種別および各種フラグを、分岐命令実行制御部119から出力された分岐命令実行結果から取得する。なお、分岐予測制御部134は、実行された分岐命令に対応するウェイがすでに分岐予測テーブル131に存在する場合には、分岐命令実行制御部119からの分岐命令実行結果に含まれるウェイ番号が示す、分岐予測テーブル131内のウェイに対して、予測分岐先アドレス、分岐命令種別および各種フラグを上書きする。図9は、第2の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。この図9の処理は、図8のステップS16に対応するものである。[ステップS21]テーブル管理部152は、処理対象として選択した分岐先アドレステーブル140における分岐先アドレス記憶部142から、実行が完了した分岐命令についての分岐先アドレスすなわち、分岐命令実行制御部119からの分岐命令実行結果に含まれる分岐先アドレスが登録されたエントリを検索する。[ステップS22]テーブル管理部152は、ステップS21の検索処理により、分岐命令実行結果に含まれる分岐先アドレスが登録されたエントリとしてn番目ただし、nは0を初期値とする整数のエントリがマッチした場合S22:Yesには、ステップS23の処理を実行する。一方、テーブル管理部152は、分岐命令実行結果に含まれる分岐先アドレスが登録されたエントリが存在しない場合S22:Noには、ステップS25の処理を実行する。[ステップS23]テーブル管理部152は、分岐先アドレス記憶部142のエントリのうち、ステップS22でマッチしたエントリの次のエントリn1番目のエントリが有効であるかを判定する。ここで、n1番目のエントリが有効である場合S23:Yesとは、n1番目のエントリにおいて、バリッドフラグが1であり、分岐先アドレスが登録されている場合である。この場合、テーブル管理部152は、ステップS24の処理を実行する。一方、n1番目のエントリが有効でない場合S23:Noとは、n1番目のエントリのバリッドフラグが0である場合か、あるいは、n番目のエントリが分岐先アドレス記憶部142の末端のエントリであるためにn1番目のエントリが存在しない場合である。このようにn1番目のエントリが有効でない場合、テーブル管理部152は、ステップS27の処理を実行する。[ステップS24]テーブル管理部152は、エントリ選択部143に対して選択信号を出力して、ステップS22でマッチしたエントリの次のエントリn1番目のエントリからの出力を選択させる。これにより、n1番目のエントリに登録された分岐先アドレスが、予測分岐先アドレスとして、エントリ選択部143を通じてテーブル選択部153に出力される。[ステップS25]分岐命令実行結果に含まれる分岐先アドレスが登録されたエントリが、分岐先アドレス記憶部142に存在しない場合S22:No、テーブル管理部152は、分岐先アドレス記憶部142に、バリッドフラグが0である空きエントリがあるかを判定する。テーブル管理部152は、空きエントリが存在する場合S25:Yesには、ステップS26の処理を実行し、空きエントリが存在しない場合S25:Noには、ステップS27の処理を実行する。[ステップS26]テーブル管理部152は、分岐先アドレス記憶部142の空きエントリのうち、最も番号が小さいエントリにおいて、バリッドフラグを1に更新するとともに、分岐命令実行結果に含まれる分岐先アドレスを登録する。この後、ステップS27の処理が実行される。[ステップS27]テーブル管理部152は、エントリ選択部143に対して選択信号を出力して、分岐先アドレス記憶部142の先頭エントリ0番目のエントリからの出力を選択させる。これにより、分岐先アドレス記憶部142の先頭エントリに登録された分岐先アドレスが、予測分岐先アドレスとして、エントリ選択部143を通じてテーブル選択部153に出力される。以上の図9の処理では、テーブル管理部152は、分岐先アドレス記憶部142から、テーブルジャンプ命令の実行後における分岐先アドレスと一致するアドレスが登録されたエントリを検索する。テーブルジャンプ命令の実行後における分岐先アドレスが分岐先アドレス記憶部142に記憶されていない場合、テーブル管理部152は、分岐先アドレス記憶部142の最も番号が小さい空きエントリに、分岐先アドレスを登録する。この場合、テーブル管理部152は、テーブル管理部152の先頭エントリに登録された分岐先アドレスを、予測分岐先アドレスに決定する。一方、テーブルジャンプ命令の実行後における分岐先アドレスが登録されたエントリが分岐先アドレス記憶部142から検索された場合、テーブル管理部152は、分岐先アドレス記憶部142に新規に分岐先アドレスを登録しない。この場合、テーブル管理部152は、検索されたエントリの次に位置する有効なエントリに登録された分岐先アドレスを、予測分岐先アドレスに決定する。ここで、図5に示すようなプログラムが実行された場合を想定して、分岐先アドレステーブル140に登録された分岐先アドレスに基づく分岐先予測処理の具体例について説明する。図10は、分岐先予測処理の具体例を示す図である。この図10では、例として、テーブルジャンプ命令の実行により、分岐先の命令アドレスがアドレスA,B,A,B,と繰り返し出現する場合を想定する。なお、アドレスAとは、図5の処理Paを実行する命令のアドレスであり、アドレスBとは、図5の処理Pbを実行する命令のアドレスであるものとする。また、図10において、前回の予測とは、分岐命令実行制御部119から出力された分岐先アドレスに対応するテーブルジャンプ命令を先読みする際に、命令フェッチ制御部111が分岐予測テーブル131から取得した予測分岐先アドレスを示す。分岐先アドレスと前回の予測のアドレスとが一致しない場合、予測に失敗したことを示す。また、次回の予測とは、その状態においてテーブルジャンプ予測部133から分岐予測テーブル131に登録される予測分岐アドレスであり、次の状態における前回の予測のアドレスと同じになる。図10において、分岐先アドレス記憶部142に分岐先アドレスが未登録の状態から、テーブルジャンプ命令が実行されて、分岐先がアドレスAと決定された状態1に遷移したものとする。このとき、分岐先アドレスにマッチするエントリが存在せず図9のS22:No、空きエントリが存在する状態S25:Yesとなることから、テーブル管理部152は、分岐先アドレス記憶部142の0番目のエントリにアドレスAを登録するS26に対応。また、テーブル管理部152は、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAを出力させるS27。次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスBと決定された状態2に遷移したものとする。このとき、分岐先アドレスにマッチするエントリが存在せずS22:No、空きエントリが存在する状態S25:Yesとなることから、テーブル管理部152は、分岐先アドレス記憶部142の1番目のエントリにアドレスBを登録するS26に対応。また、テーブル管理部152は、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAを出力させるS27。次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスAと決定された状態3に遷移したものとする。この場合、前回の予測分岐先アドレスと実際の分岐先アドレスとが一致し、予測に成功する。この状態3では、0番目のエントリが分岐先アドレスにマッチしS22:Yes、1番目のエントリが有効であるS23:Yesことから、テーブル管理部152は、分岐先アドレスの登録を行わずに、予測分岐先アドレスとして、1番目のエントリに登録されたアドレスBを出力させるS27。次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスBと決定された状態4に遷移したものとする。この場合、前回の予測分岐先アドレスと実際の分岐先アドレスとが一致し、予測に成功する。この状態4では、1番目のエントリが分岐先アドレスにマッチするがS22:Yes、2番目のエントリは無効であるS23:Noことから、テーブル管理部152は、分岐先アドレスの登録を行わずに、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAを出力させるS27。以後、分岐先アドレスとしてアドレスAとアドレスBとが繰り返し出現した場合には、常に予測に成功することになる。以上の図10の例のように、図9の処理では、分岐先アドレス記憶部142には、テーブルジャンプ命令の実行後における分岐先アドレスの履歴として、異なる分岐先アドレスが初めて出現するたびに分岐先アドレスが登録される。このため、分岐先アドレス記憶部142には、互いに異なる分岐先アドレスが登録され、1つの分岐先アドレスは1つのエントリにのみ登録される。また、テーブルジャンプ命令の実行後における分岐先アドレスが分岐先アドレス記憶部142におけるn番目のエントリに登録されていた場合、n1番目のエントリに異なる分岐先アドレスが登録されていれば、n1番目のエントリに登録された分岐先アドレスが予測分岐先アドレスとして出力される。このような図9の処理によれば、特に、分岐先アドレスの出現パターンが、異なる複数の分岐先アドレスを有するパターンになるような場合に、テーブルジャンプ命令の実行による分岐先命令を高精度に予測できる。また、以上説明した第2の実施の形態では、テーブルジャンプ予測部133は、実行されたテーブルジャンプ命令のアドレスごとに用意された分岐先アドレステーブル140に対して、過去に実行されたテーブルジャンプ命令についての分岐先アドレスの履歴が登録される。そして、各分岐先アドレステーブル140から1つの予測分岐先アドレスが出力されて、出力された予測分岐先アドレスがテーブルジャンプ命令のアドレスとともに分岐予測テーブル131に登録される。このような構成により、命令フェッチ制御部111は、テーブルジャンプ命令についての予測分岐先アドレスを、条件分岐命令についての予測分岐先アドレスと同じく、分岐予測テーブル131の検索によって取得することができる。換言すれば、命令フェッチ制御部111に対して予測分岐先アドレスを供給する手段としての分岐予測テーブル131を、条件分岐命令についての予測分岐先アドレスの供給だけでなく、テーブルジャンプ命令についての予測分岐先アドレスの供給のためにも共通に使用できる。従って、テーブルジャンプ命令の分岐先を予測できるという効果を奏しながらも、命令フェッチ制御部111が分岐予測テーブル131から予測分岐先アドレスを取得することを実現する回路構成や制御手法を大きく変更する必要がなくなり、製造/開発コストや回路面積が増大することを抑制できる。第3の実施の形態図11は、第3の実施の形態に係る演算処理装置の要部構成例を示す図である。なお、この図11では、図7に対応する構成要素については同じ符号を付して示す。第3の実施の形態に係る演算処理装置は、第2の実施の形態に係る演算処理装置と比較して、分岐先アドレステーブルの構成が異なるとともに、分岐先アドレステーブルを用いたテーブル管理部による分岐先予測処理の手順も異なる。すなわち、第3の実施の形態に係る演算処理装置は、図7に示した分岐先アドレステーブル140およびテーブル管理部152の代わりに、図11に示す分岐先アドレステーブル140aおよびテーブル管理部152aを備える。なお、第2の実施の形態と同様に、分岐先アドレステーブル140aは複数設けられる。各分岐先アドレステーブル140aは、図7に示した分岐先アドレステーブル140と同様に、分岐先アドレス記憶部142を備える。また、各分岐先アドレステーブル140aはさらに、インデックス部141aおよびエントリ選択部143aを備える。インデックス部141aには、図7に示したインデックス部141に含まれるテーブルバリッドおよびインデックスに加えて、Nextポインタが保持される。Nextポインタは、分岐先アドレス記憶部142のエントリのうち、予測分岐先アドレスを出力させるエントリを指し示す。例えば、Nextポインタが0の場合、Nextポインタは分岐先アドレス記憶部142における0番目のエントリを指し示し、Nextポインタが1の場合、Nextポインタは分岐先アドレス記憶部142における1番目のエントリを指し示す。Nextポインタの初期値は0とされ、Nextポインタの値はテーブル管理部152aによってカウントされる。エントリ選択部143aは、分岐先アドレス記憶部142のエントリのうち1つを選択して、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部153に出力する。エントリ選択部143aは、テーブル管理部152aから選択要求信号が出力されたとき、分岐先アドレス記憶部142のエントリのうち、インデックス部141aにおけるNextポインタが指し示すエントリを選択する。テーブル管理部152aは、実行が完了した分岐命令のアドレスに対応する分岐先アドレステーブル140aを選択し、選択した分岐先アドレステーブル140a内の情報に基づいて、予測分岐先アドレスを決定する。図7に示したテーブル管理部152と異なり、テーブル管理部152aは、分岐命令実行制御部119からの分岐命令実行結果に含まれる成否情報に基づいて、分岐予測に失敗した場合のみ分岐先アドレス記憶部142に分岐先アドレスを登録する。また、テーブル管理部152aは、分岐先アドレス記憶部142のエントリに対して空きがなくなるまで分岐先アドレスを登録する。これらの相違点により、テーブル管理部152aは、第2の実施の形態の場合と比較して、分岐先アドレスの繰り返しパターンがより複雑になる場合でも、分岐先を予測できるようになっている。図12は、第3の実施の形態におけるテーブルジャンプ命令の分岐先予測処理手順を示すフローチャートである。図12に示す処理のうち、ステップS11の処理は、図8に示したステップS11の処理と同じである。また、ステップS12~S15,S17の処理は、テーブル管理部152の代わりにテーブル管理部152aが処理を実行すること、および、処理対象が分岐先アドレステーブル140の代わりに分岐先アドレステーブル140aになること以外は、図8に示したステップS12~S15,S17の処理と同じである。これら以外に図8の処理と異なる点は、ステップS15の次にステップS31が実行される点と、ステップS16の代わりにステップS16aが実行される点である。図12において、テーブル管理部152aは、ステップS12の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル140aが存在しない場合S13:Noには、テーブル管理部152aは、インデックス部141aのテーブルバリッドが無効を示す0である分岐先アドレステーブル140aを、以後の処理対象として新規に選択する。このとき、テーブル管理部152aは、選択した分岐先アドレステーブル140aにおけるテーブルバリッドを1に更新するステップS14。次に、テーブル管理部152aは、ステップS14で選択した分岐先アドレステーブル140aに対して、分岐命令実行制御部119からの分岐命令実行結果に含まれる分岐命令アドレスをインデックスとして登録するステップS15。次に、テーブル管理部152aは、ステップS14で選択した分岐先アドレステーブル140aにおいて、インデックス部141aのNextポインタを0とするステップS31。すなわち、新規に有効化された分岐先アドレステーブル140aにおいては、インデックス部141aにおけるNextポインタが、初期値である0に設定される。なお、ステップS15,S31の処理順は逆であってもよい。あるいは、ステップS15,S31の各処理は同時に実行されてもよい。ステップS12の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル140aが存在した場合S13:Yes、または、ステップS12の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル140aが存在せずS13:No、ステップS14,S15,S31の各処理が実行された場合には、テーブル管理部152aは、処理対象として選択した分岐先アドレステーブル140aにおける登録情報と、分岐命令実行制御部119からの分岐命令実行結果に含まれる成否情報とに基づいて、予測分岐先アドレスを決定するステップS16a。この後、ステップS17の処理が実行される。図13は、第3の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。この図13の処理は、図12のステップS16aに対応するものである。[ステップS41]テーブル管理部152aは、分岐命令実行制御部119からの分岐命令実行結果に含まれる成否情報に基づき、分岐先の予測に失敗したか否かを判定する。テーブル管理部152aは、分岐先の予測に失敗したと判定した場合S41:Yesには、ステップS42を実行し、分岐先の予測に成功したと判定した場合S41:Noには、ステップS43の処理を実行する。[ステップS42]テーブル管理部152aは、処理対象として選択した分岐先アドレステーブル140aにおいて、インデックス部141aのNextポインタを0にする。この後、ステップS45の処理が実行される。[ステップS43]テーブル管理部152aは、処理対象として選択した分岐先アドレステーブル140aにおいて、インデックス部141aのNextポインタに1を加算する。[ステップS44]テーブル管理部152aは、分岐先アドレス記憶部142のエントリのうち、現在Nextポインタが指し示すエントリが有効であるか否かを判定する。ここで、エントリが有効であるとは、Nextポインタが指し示すエントリのバリッドフラグが1であって、そのエントリに有効な分岐先アドレスが登録されていることを指す。一方、エントリが有効でないとは、Nextポインタが指し示すエントリのバリッドフラグが0であるか、または、Nextポインタが指し示すエントリが存在しないすなわち、Nextポインタの値が分岐先アドレス記憶部142のエントリ数を超えていることを指す。テーブル管理部152aは、Nextポインタが指し示すエントリが有効である場合S44:Yesには、ステップS45の処理を実行し、Nextポインタが指し示すエントリが有効でない場合S44:No、ステップS42の処理を実行する。[ステップS45]分岐先アドレス記憶部142に、バリッドフラグが0である空きエントリがあるかを判定する。テーブル管理部152aは、空きエントリが存在する場合S45:Yesには、ステップS46の処理を実行し、空きエントリが存在しない場合S45:Noには、ステップS47の処理を実行する。[ステップS46]テーブル管理部152aは、分岐先アドレス記憶部142の空きエントリのうち、最も番号が小さいエントリにおいて、バリッドフラグを1に更新するとともに、分岐命令実行結果に含まれる分岐先アドレスを登録する。この後、ステップS47の処理が実行される。[ステップS47]テーブル管理部152aは、エントリ選択部143aに対して選択要求信号を出力する。選択要求信号を受信したエントリ選択部143aは、分岐先アドレス記憶部142のエントリのうち、Nextポインタが指し示すエントリを選択し、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部153に出力する。以上の図13の処理では、テーブル管理部152aは、分岐先アドレス記憶部142に空きエントリが存在しなくなるまで、テーブルジャンプ命令の実行が完了するたびに、分岐先アドレスを分岐先アドレス記憶部142に蓄積する。また、テーブル管理部152aは、分岐先の予測に失敗した場合には、分岐先アドレス記憶部142の先頭エントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。さらに、テーブル管理部152aは、分岐先の予測に成功した場合でも、その時点でNextポインタが指し示すエントリの次のエントリが有効でない場合には、分岐先アドレス記憶部142の先頭エントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。一方、テーブル管理部152aは、分岐先の予測に成功し、かつ、その時点でNextポインタが指し示すエントリの次のエントリが有効である場合には、次のエントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。ここで、図5に示すようなプログラムが実行された場合を想定して、分岐先アドレステーブル140aに登録された分岐先アドレスに基づく分岐先予測処理の具体例について説明する。図14~図16は、分岐先予測処理の具体例を示す図である。これらの図14~図16では、例として、テーブルジャンプ命令の実行により、分岐先の命令アドレスがアドレスA,B,A,B,C,Cというパターンで繰り返し出現する場合を想定する。なお、アドレスAとは、図5の処理Paを実行する命令のアドレスであり、アドレスBとは、図5の処理Pbを実行する命令のアドレスであり、アドレスCとは、図5の処理Pcを実行する命令のアドレスであるものとする。また、図14~図16では、例として、分岐先アドレス記憶部142は、0番目から7番目までの8個のエントリを備えるものとする。まず、図14において、分岐先アドレス記憶部142に分岐先アドレスが未登録の状態から、テーブルジャンプ命令が実行されて、分岐先がアドレスAと決定された状態11に遷移したものとする。このとき、分岐先の予測が失敗となるので図13のS41:Yes、Nextポインタは0のままになりS42、分岐先であるアドレスAは分岐先アドレス記憶部142における先頭の空きエントリである0番目のエントリに登録されるS46。また、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS47。なお、これ以後、分岐先アドレス記憶部142には、エントリが満杯になる状態18まで、分岐先アドレスが蓄積されていく。次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスBと決定された状態12に遷移したものとする。このとき、分岐先の予測が失敗となるので図13のS41:Yes、Nextポインタは0のままになりS42、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS47。次に、分岐先がアドレスAと決定された状態13では、分岐先の予測に成功する図13のS41:No。このとき、Nextポインタは1に増加されS43、予測分岐先アドレスとして、1番目のエントリに登録されたアドレスBが出力されるS47。次に、分岐先がアドレスBと決定された状態14でも、分岐先の予測に成功するので図13のS41:No、Nextポインタは2に増加されS43、予測分岐先アドレスとして、2番目のエントリに登録されたアドレスAが出力されるS47。次に、図15に示すように、分岐先がアドレスCと決定された状態15では、分岐先の予測が失敗となる図13のS41:Yes。このとき、Nextポインタは0に戻されS42、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS47。次に、分岐先がアドレスCと決定された状態16でも、分岐先の予測が失敗となり図13のS41:Yes、Nextポインタは0のままとなりS42、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS47。ここで、状態16において予測分岐先アドレスが出力された状態では、分岐先アドレス記憶部142には、分岐先アドレスの出現パターンが1パターン分蓄積された状態になる。なおかつ、Nextポインタが0に戻り、予測分岐先アドレスが先頭エントリから出力されるようになる。このため、この後に分岐先アドレスがアドレスA状態17、アドレスB状態18、アドレスA状態19、アドレスB状態20、アドレスC状態21、アドレスC状態22と出現する間、分岐先の予測は成功し続ける。すなわち、図13の処理によれば、アドレスA,B,A,B,C,Cという、第2の実施の形態で予測可能なパターンより複雑な命令アドレスの出現パターンに対し、分岐先を予測することが可能になる。なお、図16の状態22の後、分岐先がアドレスBとなる状態24図示せずにおいて、予測は成功するものの、Nextポインタに1を加算した値に対応するエントリが有効でなくなりS44:No、Nextポインタが0に戻る。この後、分岐先がそれぞれアドレスA,Bとなる状態25,26図示せずでは予測に成功するものの、分岐先がアドレスCとなる状態27図示せずにおいて予測に失敗し、Nextポインタが0に戻る。次に、分岐先がアドレスCとなる状態28図示せずでも予測に失敗し、Nextポインタは0に保持されるが、次に、分岐先がアドレスAとなる状態29図示せずを先頭として、連続8回分だけ予測に成功する。すなわち、図13の処理によれば、分岐先アドレス記憶部142のエントリ数以内の数の命令アドレスからなるパターンが出現した場合には、50以上の確率で分岐先を予測することが可能になる。以上説明した第3の実施の形態では、テーブルジャンプ命令の分岐先を予測できるという効果を奏し、かつ、製造/開発コストや回路面積が増大することを抑制できるという第2の実施の形態と同様の効果を得ることができる。また、第3の実施の形態によれば、第2の実施の形態と比較して、より複雑な命令アドレスの出現パターンについても分岐先を予測できるようになる。第4の実施の形態図17は、第4の実施の形態に係る演算処理装置の要部構成例を示す図である。なお、この図17では、図11に対応する構成要素については同じ符号を付して示す。第4の実施の形態に係る演算処理装置は、第3の実施の形態に係る演算処理装置と比較して、分岐先アドレステーブルの構成が異なるとともに、分岐先アドレステーブルを用いたテーブル管理部による分岐先予測処理の手順も異なる。すなわち、第4の実施の形態に係る演算処理装置は、図11に示した分岐先アドレステーブル140aおよびテーブル管理部152aの代わりに、図17に示す分岐先アドレステーブル140bおよびテーブル管理部152bを備える。なお、第3の実施の形態と同様に、分岐先アドレステーブル140bは複数設けられる。各分岐先アドレステーブル140bは、図11に示した分岐先アドレステーブル140aと同様に、分岐先アドレス記憶部142およびエントリ選択部143aを備える。また、各分岐先アドレステーブル140bはさらに、インデックス部141bおよび上限レジスタ144を備える。インデックス部141bには、図11に示したインデックス部141aに含まれるテーブルバリッド、インデックスおよびNextポインタに加えて、Createフラグが保持される。Createフラグは、テーブル管理部152bによって設定され、現在、分岐先アドレス記憶部142のエントリ登録期間であるか否かを示す。エントリ登録期間とは、分岐先アドレスを予測するための十分な情報が保持されていない期間を示す。あるいは、エントリ登録期間とは、分岐先アドレス記憶部142において、予測分岐先の候補となる分岐先アドレスの登録が完了していない期間と言うこともできる。本実施の形態では、分岐先アドレス記憶部142のエントリ登録期間においては、Createフラグが1とされ、エントリ登録期間が終了すると、Createフラグが0に更新されるものとする。上限レジスタ144は、分岐先アドレス記憶部142における有効なエントリすなわち、バリッドフラグが1であるエントリの数をカウントする機能を有する。ただし、上限レジスタ144の最小値は0とされ、有効なエントリ数が1個の場合は0、有効なエントリ数が2個の場合は1、のようにカウントが行われる。上限レジスタ144は、Createフラグが1に変化したとき、分岐先アドレス記憶部142における有効なエントリ数をカウントして、そのカウント値を保持し、テーブル管理部152bによる参照を可能とする。テーブル管理部152bは、実行が完了した分岐命令のアドレスに対応する分岐先アドレステーブル140bを選択し、選択した分岐先アドレステーブル140b内の情報と、分岐命令実行制御部119からの分岐命令実行結果に含まれる成否情報とに基づいて、予測分岐先アドレスを決定する。また、テーブル管理部152bは、分岐先アドレス記憶部142のエントリ登録期間が終了するすなわち、Createフラグが0になると、上限レジスタ144に保持された値を上限としてNextポインタのカウント動作を行うようになる。図18は、第4の実施の形態におけるテーブルジャンプ命令の分岐先予測処理手順を示すフローチャートである。図18に示す処理のうち、ステップS11の処理は、図8および図12に示したステップS11の処理と同じである。また、ステップS12~S15,S17の処理は、テーブル管理部152aの代わりにテーブル管理部152bが処理を実行すること、および、処理対象が分岐先アドレステーブル140aの代わりに分岐先アドレステーブル140bになること以外は、図12に示したステップS12~S15,S17の処理と同じである。これら以外に図12の処理と異なる点は、ステップS31の代わりにステップS32が実行される点と、ステップS16aの代わりにステップS16bが実行される点である。図18において、テーブル管理部152bは、ステップS12の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル140bが存在しない場合S13:Noには、テーブル管理部152bは、インデックス部141aのテーブルバリッドが無効を示す0である分岐先アドレステーブル140bを、以後の処理対象として新規に選択する。このとき、テーブル管理部152bは、選択した分岐先アドレステーブル140bにおけるテーブルバリッドを1に更新するステップS14。次に、テーブル管理部152bは、ステップS14で選択した分岐先アドレステーブル140bに対して、分岐命令実行制御部119からの分岐命令実行結果に含まれる分岐命令アドレスをインデックスとして登録するステップS15。次に、テーブル管理部152bは、ステップS14で選択した分岐先アドレステーブル140bにおいて、インデックス部141bのNextポインタを0とし、Createフラグを1とするステップS32。すなわち、新規に有効化された分岐先アドレステーブル140bにおいては、インデックス部141bにおけるNextポインタが、初期値である0に設定されるとともに、Createフラグが1に設定される。なお、ステップS15,S32の処理順は逆であってもよい。あるいは、ステップS15,S32の各処理は同時に実行されてもよい。ステップS12の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル140bが存在した場合S13:Yes、または、ステップS12の検索により、分岐命令実行結果に含まれる分岐命令アドレスが登録された分岐先アドレステーブル140bが存在せずS13:No、ステップS14,S15,S32の各処理が実行された場合には、テーブル管理部152bは、処理対象として選択した分岐先アドレステーブル140bにおける登録情報と、分岐命令実行制御部119からの分岐命令実行結果に含まれる成否情報とに基づいて、予測分岐先アドレスを決定するステップS16b。この後、ステップS17の処理が実行される。図19は、第4の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。この図19の処理は、図18のステップS16bに対応するものである。[ステップS61]テーブル管理部152bは、分岐命令実行制御部119からの分岐命令実行結果に含まれる成否情報に基づき、分岐先の予測に失敗したか否かを判定する。テーブル管理部152bは、分岐先の予測に失敗したと判定した場合S61:Yesには、ステップS62を実行し、分岐先の予測に成功したと判定した場合S61:Noには、ステップS66の処理を実行する。[ステップS62]テーブル管理部152bは、処理対象として選択した分岐先アドレステーブル140bにおける分岐先アドレス記憶部142に、バリッドフラグが0である空きエントリがあるかを判定する。テーブル管理部152bは、空きエントリが存在する場合S62:Yesには、ステップS63の処理を実行し、空きエントリが存在しない場合S62:Noには、ステップS65の処理を実行する。[ステップS63]テーブル管理部152bは、インデックス部141bのCreateフラグを参照する。テーブル管理部152bは、Createフラグが1である場合S63:Yesには、ステップS64の処理を実行し、Createフラグが0である場合S63:Noには、ステップS65の処理を実行する。[ステップS64]テーブル管理部152bは、分岐先アドレス記憶部142の空きエントリのうち、最も番号が小さいエントリにおいて、バリッドフラグを1に更新するとともに、分岐命令実行結果に含まれる分岐先アドレスを登録する。この後、ステップS65の処理が実行される。[ステップS65]テーブル管理部152bは、インデックス部141bのNextポインタを0にする。この後、ステップS71の処理が実行される。[ステップS66]テーブル管理部152bは、処理対象として選択した分岐先アドレステーブル140bにおいて、インデックス部141bのCreateフラグが1であるかを判定する。テーブル管理部152bは、Createフラグが1である場合S66:Yesには、ステップS67の処理を実行し、Createフラグが0である場合S66:Noには、ステップS69の処理を実行する。[ステップS67]テーブル管理部152bは、Createフラグを0に更新する。[ステップS68]Createフラグが0に変化したことを検知した上限レジスタ144は、分岐先アドレス記憶部142における有効なエントリ数をカウントし、そのカウント値を保持する。この後、ステップS69の処理が実行される。[ステップS69]テーブル管理部152bは、インデックス部141bのNextポインタに1を加算する。[ステップS70]テーブル管理部152bは、分岐先アドレス記憶部142のエントリのうち、Nextポインタが指し示すエントリが有効であり、かつ、Nextポインタの値が上限レジスタ144に保持された値以下であるかを判定する。テーブル管理部152bは、これらの条件を満たす場合S70:Yesには、ステップS71の処理を実行し、これらの条件を満たさない場合S70:Noには、ステップS65の処理を実行する。[ステップS71]テーブル管理部152bは、エントリ選択部143aに対して選択要求信号を出力する。選択要求信号を受信したエントリ選択部143aは、分岐先アドレス記憶部142のエントリのうち、Nextポインタが指し示すエントリを選択し、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部153に出力する。以上の図19の処理では、テーブル管理部152bは、初期状態では、分岐先アドレス記憶部142に対して、テーブルジャンプ命令の実行が完了するたびに、分岐先アドレス記憶部142における先頭エントリから順に分岐先アドレスを登録していく。これとともに、テーブル管理部152bは、分岐先の予測に最初に成功するまでの間すなわち、Createフラグが1である間、分岐先アドレス記憶部142の先頭エントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。テーブル管理部152bは、分岐先の予測に最初に成功したとき、分岐先アドレス記憶部142へのアドレス登録を終了する。これにより、分岐先アドレス記憶部142には、テーブルジャンプ命令の実行の結果、同じ分岐先アドレスが出現する直前までの分岐先アドレスの履歴が登録される。また、テーブル管理部152bは、分岐先の予測に最初に成功したとき、その時点でのNextポインタの値をNextポインタの上限として上限レジスタ144に設定し、それ以後、Nextポインタが指し示すエントリに登録された分岐先アドレスを、予測分岐先アドレスとして出力させる。テーブル管理部152bは、分岐先の予測に成功するごとにNextポインタをカウントアップし、分岐先の予測に失敗するか、あるいは、カウントアップ後のNextポインタの値が上限値を超えた場合に、Nextポインタを0に戻す。ここで、図5に示すようなプログラムが実行された場合を想定して、分岐先アドレステーブル140bに登録された分岐先アドレスに基づく分岐先予測処理の具体例について説明する。図20,図21は、分岐先予測処理の具体例を示す図である。これらの図20,図21では、例として、テーブルジャンプ命令の実行により、分岐先の命令アドレスがアドレスA,B,Bというパターンで繰り返し出現する場合を想定する。まず、図20において、分岐先アドレス記憶部142に分岐先アドレスが未登録の状態から、テーブルジャンプ命令が実行されて、分岐先がアドレスAと決定された状態31に遷移したものとする。このとき、分岐先の予測が失敗となり図19のS61:Yes、Createフラグは1であるS63:Yesので、分岐先であるアドレスAは分岐先アドレス記憶部142における先頭の空きエントリである0番目のエントリに登録されるS64。また、Nextポインタは0のままになりS65、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS71。次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスBと決定された状態32に遷移したものとする。このとき、分岐先の予測が失敗となりS61:Yes、Createフラグは1であるS63:Yesので、分岐先であるアドレスBは分岐先アドレス記憶部142における1番目のエントリに登録されるS64。また、Nextポインタは0のままになりS65、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS71。同様に、分岐先がアドレスBと決定された状態33では、分岐先の予測が失敗となりS61:Yes、Createフラグは1であるS63:Yesので、分岐先であるアドレスBは分岐先アドレス記憶部142における2番目のエントリに登録されるS64。また、Nextポインタは0のままになりS65、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS71。次に、分岐先がアドレスAと決定された状態34では、分岐先の予測に成功しS61:No、Createフラグは0に更新されるS67。このとき、上限レジスタ144には、分岐先アドレス記憶部142における有効なエントリ数である2が設定されS68、Nextポインタが1にカウントアップされるS69。分岐先アドレス記憶部142における1番目のエントリは有効であり、Nextポインタの値は上限レジスタ144の値以下であるS70:Yesことから、分岐先アドレス記憶部142における1番目のエントリに登録された分岐先アドレスが、予測分岐アドレスとして出力されるS71。なお、状態34においてCreateフラグが0となることから、これ以後、分岐先アドレス記憶部142への分岐先アドレスの登録は行われなくなる。この後、図21に示すように、分岐先アドレスがアドレスBと決定された状態35でも、分岐先の予測は成功し、Nextポインタは2にカウントアップされる。さらに、分岐先アドレスがアドレスBと決定された状態36でも、分岐先の予測は成功する。このとき、Nextポインタに1を加算S69した値が上限レジスタ144の値を超えるS70:Noことから、Nextポインタは0に戻されるS65。従って、分岐先アドレス記憶部142における0番目のエントリに登録された分岐先アドレスが、予測分岐先アドレスとして出力される。以後、分岐先アドレスがアドレスA,B,Bというパターンで繰り返し出現する間、分岐先の予測は成功し続ける。すなわち、図19の処理によれば、アドレスA,B,Bという、第2の実施の形態で予測可能なパターンより命令アドレスの組合せの自由度が高い出現パターンに対し、分岐先を予測することが可能になる。以上説明した第4の実施の形態では、テーブルジャンプ命令の分岐先を予測できるという効果を奏し、かつ、製造/開発コストや回路面積が増大することを抑制できるという第2,第3の実施の形態と同様の効果を得ることができる。また、第4の実施の形態によれば、第2の実施の形態と比較して、命令アドレスの組合せの自由度が高い出現パターンについても分岐先を予測できるようになり、予測精度が向上する。第5の実施の形態図22は、第5の実施の形態に係る演算処理装置の要部構成例を示す図である。なお、この図22では、図17に対応する構成要素については同じ符号を付して示す。第5の実施の形態に係る演算処理装置は、第4の実施の形態に係る演算処理装置と比較して、分岐先アドレステーブルの構成が異なるとともに、分岐先アドレステーブルを用いたテーブル管理部による分岐先予測処理の手順も異なる。すなわち、第5の実施の形態に係る演算処理装置は、図17に示した分岐先アドレステーブル140bおよびテーブル管理部152bの代わりに、図22に示す分岐先アドレステーブル140cおよびテーブル管理部152cを備える。なお、第4の実施の形態と同様に、分岐先アドレステーブル140cは複数設けられる。各分岐先アドレステーブル140cは、図17に示した分岐先アドレステーブル140bと同様に、分岐先アドレス記憶部142、インデックス部141bおよび上限レジスタ144を備える。ただし、インデックス部141bのNextポインタは、エントリ選択部143cだけでなく分岐先アドレス記憶部142にも出力され、分岐先アドレス記憶部142に対する分岐先アドレスの決定時にも使用される。また、各分岐先アドレステーブル140cは、エントリ選択部143cを備える。エントリ選択部143cは、図17に示したエントリ選択部143aと同様に、分岐先アドレス記憶部142のエントリの中から1つを選択して、選択したエントリに登録された分岐先アドレスをテーブル選択部153に出力させる。ただし、エントリ選択部143cは、テーブル管理部152cからの選択要求信号を受信したとき、Createフラグが1であれば、分岐先アドレス記憶部142における0番目のエントリ先頭エントリを選択する。また、エントリ選択部143cは、テーブル管理部152cからの選択要求信号を受信したとき、Createフラグが0であれば、分岐先アドレス記憶部142のエントリのうちNextポインタが指し示すエントリを選択する。テーブル管理部152cは、実行が完了した分岐命令のアドレスに対応する分岐先アドレステーブル140cを選択し、選択した分岐先アドレステーブル140c内の情報と、分岐命令実行制御部119からの分岐命令実行結果に含まれる成否情報とに基づいて、予測分岐先アドレスを決定する。テーブル管理部152cの処理のうち、図17に示したテーブル管理部152bの処理との主な相違点は、分岐先アドレス記憶部142に分岐先アドレスを登録する際に分岐先アドレス記憶部142に対して登録要求信号のみを出力し、分岐先アドレスの登録先エントリの指定を行わない点である。ただし、分岐先アドレスの登録先エントリを、分岐先アドレス記憶部142に対してテーブル管理部152cが指定するようにしてもよい。以下、第5の実施の形態に係る演算処理装置の処理について説明する。本実施の形態におけるテーブルジャンプ命令の分岐先予測処理全体の手順は、基本的に図18に示した処理と同じであるので、ここでは図示を省略する。図18の処理と異なる点は、ステップS12~S15,S17の処理が、テーブル管理部152bの代わりにテーブル管理部152cによって実行される点、処理対象が分岐先アドレステーブル140bの代わりに分岐先アドレステーブル140cになる点、および、ステップS16bの処理が次の図23に示す手順で実行される点である。図23は、第5の実施の形態における予測分岐先アドレスの決定処理の手順を示すフローチャートである。この図23の処理は、図18のステップS16bに対応するものである。[ステップS81]テーブル管理部152cは、分岐命令実行制御部119からの分岐命令実行結果に含まれる成否情報に基づき、分岐先の予測に失敗したか否かを判定する。テーブル管理部152cは、分岐先の予測に失敗したと判定した場合S81:Yesには、ステップS82を実行し、分岐先の予測に成功したと判定した場合S81:Noには、ステップS88の処理を実行する。[ステップS82]テーブル管理部152cは、処理対象として選択した分岐先アドレステーブル140cにおける分岐先アドレス記憶部142に、バリッドフラグが0である空きエントリがあるかを判定する。テーブル管理部152cは、空きエントリが存在する場合S82:Yesには、ステップS83の処理を実行し、空きエントリが存在しない場合S82:Noには、ステップS87の処理を実行する。なお、分岐先アドレス記憶部142に空きエントリがあるか否かの判定は、Nextポインタの値を基に行うこともできる。この場合、テーブル管理部152cは、Nextポインタの値が、分岐先アドレス記憶部142における最大エントリ数以下である場合には、空きエントリがあると判定し、Nextポインタの値が最大エントリ数を超える場合には、空きエントリがないと判定する。[ステップS83]テーブル管理部152cは、インデックス部141bのCreateフラグを参照する。テーブル管理部152cは、Createフラグが1である場合S83:Yesには、ステップS84の処理を実行し、Createフラグが0である場合S83:Noには、ステップS87の処理を実行する。[ステップS84]テーブル管理部152cは、分岐先アドレス記憶部142に対して登録要求信号を出力する。登録要求信号を受信した分岐先アドレス記憶部142は、自身のエントリのうち、Nextポインタが指し示すエントリに対して、分岐命令実行制御部119からの分岐命令実行結果に含まれる分岐先アドレスを登録する。[ステップS85]テーブル管理部152cは、インデックス部141bのNextポインタに1を加算する。[ステップS86]テーブル管理部152cは、エントリ選択部143cに対して選択要求信号を出力する。選択要求信号を受信したエントリ選択部143cは、Createフラグを参照する。このとき、Createフラグは1であることから、エントリ選択部143cは、分岐先アドレス記憶部142における先頭エントリ0番目のエントリを選択し、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部153に出力する。[ステップS87]テーブル管理部152cは、Nextポインタを0に更新する。この後、ステップS93の処理が実行される。[ステップS88]分岐先の予測に成功した場合S81:No、テーブル管理部152cは、処理対象として選択した分岐先アドレステーブル140cにおいて、インデックス部141bのCreateフラグが1であるかを判定する。テーブル管理部152cは、Createフラグが1である場合S88:Yesには、ステップS89の処理を実行し、Createフラグが0である場合S88:Noには、ステップS91の処理を実行する。[ステップS89]テーブル管理部152cは、Createフラグを0に更新する。[ステップS90]Createフラグが0に変化したことを検知した上限レジスタ144は、分岐先アドレス記憶部142における有効なエントリ数をカウントし、そのカウント値を保持する。この後、ステップS91の処理が実行される。[ステップS91]テーブル管理部152cは、インデックス部141bのNextポインタに1を加算する。[ステップS92]テーブル管理部152cは、分岐先アドレス記憶部142のエントリのうち、Nextポインタが指し示すエントリが有効であり、かつ、Nextポインタの値が上限レジスタ144に保持された値以下であるかを判定する。テーブル管理部152cは、これらの条件を満たす場合S92:Yesには、ステップS93の処理を実行し、これらの条件を満たさない場合S92:Noには、ステップS87の処理を実行する。[ステップS93]テーブル管理部152cは、エントリ選択部143cに対して選択要求信号を出力する。選択要求信号を受信したエントリ選択部143cは、Createフラグを参照する。このとき、Createフラグは0であることから、エントリ選択部143cは、分岐先アドレス記憶部142のエントリのうち、Nextポインタが指し示すエントリを選択し、選択したエントリに登録された分岐先アドレスを、予測分岐先アドレスとしてテーブル選択部153に出力する。以上の図23の処理では、初期状態では、分岐先アドレス記憶部142に対して、テーブルジャンプ命令の実行が完了するたびに、分岐先アドレス記憶部142における先頭エントリから順に分岐先アドレスが登録されていく。これとともに、分岐先の予測に最初に成功するまでの間すなわち、Createフラグが1である間、分岐先アドレス記憶部142の先頭エントリに登録された分岐先アドレスが、予測分岐先アドレスとして出力される。そして、分岐先の予測に最初に成功したとき、分岐先アドレス記憶部142へのアドレス登録が終了する。これにより、分岐先アドレス記憶部142には、テーブルジャンプ命令の実行の結果、同じ分岐先アドレスが出現する直前までの分岐先アドレスの履歴が登録される。また、テーブル管理部152cは、分岐先の予測に最初に成功したとき、その時点でのNextポインタの値をNextポインタの上限として上限レジスタ144に設定するとともに、Createフラグを0に更新する。これにより、以後、Nextポインタが指し示すエントリに登録された分岐先アドレスが、予測分岐先アドレスとして出力されるようになる。テーブル管理部152cは、分岐先の予測に成功するごとにNextポインタをカウントアップし、分岐先の予測に失敗するか、あるいは、カウントアップ後のNextポインタの値が上限値を超えた場合に、Nextポインタを0に戻す。ここで、図5に示すようなプログラムが実行された場合を想定して、分岐先アドレステーブル140cに登録された分岐先アドレスに基づく分岐先予測処理の具体例について説明する。図24,図25は、分岐先予測処理の具体例を示す図である。これらの図24,図25では、例として、図20,図21と同様に、テーブルジャンプ命令の実行により、分岐先の命令アドレスがアドレスA,B,Bというパターンで繰り返し出現する場合を想定する。まず、図24において、分岐先アドレス記憶部142に分岐先アドレスが未登録の状態から、テーブルジャンプ命令が実行されて、分岐先がアドレスAと決定された状態41に遷移したものとする。このとき、分岐先の予測が失敗となり図23のS81:Yes、Createフラグは1であるS83:Yesので、分岐先であるアドレスAは、分岐先アドレス記憶部142のエントリのうち、Nextポインタが指し示す先頭エントリ0番目のエントリに登録されるS84。また、Nextポインタは1にカウントアップされS85、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS86。次に、同じアドレスのテーブルジャンプ命令が実行されて、分岐先がアドレスBと決定された状態42に遷移したものとする。このとき、分岐先の予測が失敗となりS81:Yes、Createフラグは1であるS83:Yesので、分岐先であるアドレスBはNextポインタが指し示す1番目のエントリに登録されるS84。また、Nextポインタは2にカウントアップされS85、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS86。同様に、分岐先がアドレスBと決定された状態43では、分岐先の予測が失敗となりS81:Yes、Createフラグは1であるS83:Yesので、分岐先であるアドレスBはNextポインタが指し示す2番目のエントリに登録されるS84。また、Nextポインタは3にカウントアップされS85、予測分岐先アドレスとして、0番目のエントリに登録されたアドレスAが出力されるS86。次に、分岐先がアドレスAと決定された状態44では、分岐先の予測に成功しS81:No、Createフラグは0に更新されるS89。このとき、上限レジスタ144には、分岐先アドレス記憶部142における有効なエントリ数である2が設定されS90、Nextポインタが4にカウントアップされるS91。ところが、Nextポインタの値は上限レジスタ144に設定された上限値を超えているS92:Noので、Nextポインタは0に戻されるS87。また、Createフラグは0であるので、Nextポインタが指し示す0番目のエントリに登録された分岐先アドレスアドレスAが、予測分岐先アドレスとして出力されるS93。なお、状態44においてCreateフラグが0となることから、これ以後、分岐先アドレス記憶部142への分岐先アドレスの登録は行われなくなる。次に、分岐先がアドレスBと決定された状態45では、分岐先の予測が失敗となるS81:Yes。このとき、Createフラグは0であるS83:Noので、Nextポインタは0のままになりS87、Nextポインタが指し示す0番目のエントリに登録された分岐先アドレスアドレスAが、予測分岐先アドレスとして出力されるS93。また、図25に示すように、分岐先アドレスがアドレスBと決定された状態46でも、状態45の場合と同様の動作が行われる。次に、分岐先アドレスがアドレスAと決定された状態47では、分岐先の予測に成功するS81:No。このとき、Createフラグは0であるS88:Noので、Nextポインタが1にカウントアップされS91、Nextポインタが指し示す1番目のエントリに登録された分岐先アドレスアドレスBが、予測分岐先アドレスとして出力されるS93。次に、分岐先アドレスがアドレスBと決定された状態48でも、分岐先の予測は成功し、Nextポインタは2にカウントアップされる。さらに、分岐先アドレスがアドレスBと決定された状態49でも、分岐先の予測は成功する。このとき、Nextポインタに1を加算S91した値が上限レジスタ144の値を超えるS92ことから、Nextポインタは0に戻されるS87。従って、分岐先アドレス記憶部142における0番目のエントリに登録された分岐先アドレスが、予測分岐先アドレスとして出力される。以後、分岐先アドレスがアドレスA,B,Bというパターンで繰り返し出現する間、分岐先の予測は成功し続ける。すなわち、図23の処理によれば、第4の実施の形態と同様に、アドレスA,B,Bという、第2の実施の形態で予測可能なパターンより命令アドレスの組合せの自由度が高い出現パターンに対し、分岐先を予測することが可能になる。また、第5の実施の形態では、第4の実施の形態と比較した場合、分岐先の予測に連続して成功するようになるまでの期間が長くなる。その反面、第5の実施の形態では、分岐先アドレス記憶部142に対する分岐先アドレスの登録処理や、予測分岐先アドレスの出力元のエントリを選択する処理におけるテーブル管理部152cの処理手順が簡略化される。以上説明した第5の実施の形態では、テーブルジャンプ命令の分岐先を予測できるという効果を奏し、かつ、製造/開発コストや回路面積が増大することを抑制できるという第2~第4の実施の形態と同様の効果を得ることができる。また、第5の実施の形態によれば、第2の実施の形態と比較して、命令アドレスの組合せの自由度が高い出現パターンについても分岐先を予測できるようになり、予測精度が向上する。なお、上記の第2~第5の実施の形態では、分岐予測テーブル131と、分岐命令アドレスごとの分岐先アドレステーブルとが分離して配置されていたが、例えば、分岐予測テーブル131と分岐先アドレステーブルとが一体に構成されていてもよい。例えば、複数の分岐先アドレステーブルと、各分岐先アドレステーブルに対応する、分岐予測テーブル131内のウェイとが、テーブル選択部153や分岐予測制御部134を介さずに直接的に接続されていてもよい。上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。"