(57)【特許請求の範囲】
【請求項１】
順次与えられる命令を実行する情報処理装置内で分岐命令の実行を制御する分岐命令実行制御装置において、
命令デコードの結果、該命令が分岐命令であるか、又は、分岐に関する処理が必要であると判断されたとき、
該分岐の確定／未確定を表示するフラグと、分岐の成立／不成立を表示するフラグとの格納領域を有するエントリが作成される分岐リザベーションステーション手段を備え、
前記命令デコードの結果により、該分岐の成立／不成立が確定するときは、前記作成されるエントリに分岐の確定を示すフラグと成立／不成立を示すフラグとの値が格納され、
命令デコードの結果により、該分岐の成立／不成立が確定しないときは、該分岐が未確定であることを示すフラグの値が格納されることを特徴とする分岐命令実行制御装置。
【請求項２】
デコードされる命令に先行する命令であって、該デコードされる命令についての分岐の成立／不成立に影響を与える先行命令の識別子を記憶する先行命令識別子記憶手段と、
該先行命令の実行が未完了であり、該先行命令識別子記憶手段に記憶されている識別子が有効であることを示すフラグを記憶する識別子有効フラグ記憶手段と、
該先行命令の実行が開始されるとき、該フラグを識別子有効フラグ記憶手段に記憶させるとともに、先行命令識別子を先行命令識別子記憶手段に記憶させ、
該先行命令の実行が完了したとき、該先行命令の完了報告に含まれる命令識別子を該先行命令識別子記憶手段に記憶されている識別子と比較することにより該先行命令の完了を認識し、
該識別子有効フラグ記憶手段に記憶されているフラグをリセットする制御手段とを更に備えることを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項３】
前記命令デコードの結果、分岐の成立／不成立が確定しないとき、
命令の実行順序と無関係に、該成立／不成立の判断が可能になったとき、該判断結果に対応して前記成立／不成立を示すフラグの値が格納されることを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項４】
前記命令デコードの結果、該デコードされる命令に先行する命令であって、
該デコードされる命令についての分岐の成立／不成立に影響を与える先行命令の実行が未完了であるとき、前記作成されるエントリに該先行命令の実行が未完了であることを示すデータと共に該先行命令の識別子が格納されることを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項５】
前記先行命令の識別子を記憶する先行命令識別子記憶手段と、
該先行命令の実行が未完了であること、及び、該先行命令識別子記憶手段に記憶されている識別子が有効であることを示すフラグを記憶する識別子有効フラグ記憶手段と、
該先行命令の実行が開始されるとき、該フラグを識別子有効フラグ記憶手段に記憶させるとともに、該先行命令の識別子を先行命令識別子記憶手段に記憶させ、
該先行命令の実行が完了したとき、該先行命令の完了報告に含まれる命令識別子を該先行命令識別子記憶手段に記憶されている識別子と比較することにより該先行命令の完了を認識し、
該識別子有効フラグ記憶手段に記憶されているフラグをリセットする制御手段とを更に備えることを特徴とする請求項４記載の分岐命令実行制御装置。
【請求項６】
命令の実行順序と無関係に、前記先行命令の実行完了によって前記デコードされる命令における分岐の成立／不成立の判断が可能になったとき、該判断結果に対応して前記成立／不成立を示すフラグが格納されることを特徴とする請求項４記載の分岐命令実行制御装置。
【請求項７】
前記分岐リザベーションステーション手段が、前記先行命令の実行完了を、自手段内のエントリに格納された該先行命令の識別子によって検出することを特徴とする請求項６記載の分岐命令実行制御装置。
【請求項８】
分岐命令に対応して、該分岐命令のデコードの結果により分岐の成立／不成立を予測し、該予測結果を前記エントリに格納されるべき分岐の成立／不成立を示すフラグの値として前記分岐リザベーションステーション手段に与える分岐成否予測手段と、
該分岐成否予測手段の予測結果に従って該分岐命令以後の命令が投機的に実行される場合に、
前記分岐リザベーションステーション手段内のエントリに格納された分岐の成立／不成立を表示するフラグの値と分岐の成立／不成立の実際の判断結果とに矛盾を生じたときには、
該命令の投機的実行の結果を無効とし、該実際の判断結果に対応する命令を実行する命令再実行手段とを更に備えることを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項９】
分岐命令に対応して、該分岐命令のデコードの結果により分岐の成立／不成立を予測し、該予測結果を前記エントリに格納されるべき分岐の成立／不成立を示すフラグの値として前記分岐リザベーションステーション手段に与えるとともに、分岐成立が予測されるとき、更に分岐先アドレスの予測値を該分岐リザベーションステーション手段内に作成されるエントリに格納させる分岐成否予測手段と、
該分岐成否予測手段の予測結果に従って該分岐命令以後の命令が投機的に実行された場合において、
該分岐リザベーションステーション手段に格納された分岐先アドレスの予測値と実際に求められた分岐先アドレスとが一致しなかったときには、該投機的に実行された命令の実行結果を無効とし、該実際に求められた分岐先アドレスの命令以後の命令を実行する命令再実行手段とを更に備えることを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項１０】
前記命令デコードの結果、分岐の成立／不成立が確定せず、該デコードされた命令に続く非分岐後続命令が投機的に実行された後に、前記分岐の成立の判断がなされたとき、該命令の投機的実行の結果を無効とし、
該分岐命令の分岐先の命令以後の命令を実行する分岐先命令実行手段とを更に備えることを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項１１】
前記情報処理装置が、前記順次与えられる命令をアウトオブオーダで処理するために命令実行を統合的に制御する命令リザベーションステーション手段を更に備えることを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項１２】
前記分岐リザベーションステーション手段が、前記分岐の確定／未確定を表示するフラグと、分岐の成立／不成立を表示するフラグとの格納領域を有するエントリを複数備え、
命令デコードの結果により命令実行順序に従ってエントリが作成されるとともに、該エントリに前記命令リザベーションステーション手段によって指定され、デコードされた命令を識別する命令識別子が格納され、
作成されたエントリに対応する分岐処理の完了時に、命令実行順序に従って、分岐成立／不成立の確定結果および該命令識別子を伴って、
該分岐処理の完了を前記命令リザベーションステーション手段に報告する完了報告手段を更に備えることを特徴とする請求項１１記載の分岐命令実行制御装置。
【請求項１３】
前記命令デコードの結果により、分岐の成立／不成立が確定せず、
投機的に実行された命令であって、該デコードされた命令に続く非分岐後続命令の実行結果の無効化が必要となったとき、
前記完了報告手段が該無効化の必要を示すデータを前記命令リザベーションステーション手段に更に与えることを特徴とする請求項１２記載の分岐命令実行制御装置。
【請求項１４】
分岐命令に対応して該分岐命令のデコードの結果により、分岐の成立／不成立を予測する分岐成否予測手段と、
該分岐成否予測手段の予測結果に従って該分岐命令以後の命令が投機的に実行された後に、該予測と分岐の成立／不成立の実際の判断結果との間に矛盾を生じたとき、該投機的に実行された命令の実行結果を無効とし、該実際の判断結果に対応する命令を実行する命令再実行手段とを更に備え、
前記完了報告手段が該投機的に実行された命令の実行結果の無効化の必要を示すデータを前記命令リザベーションステーション手段に更に与えることを特徴とする請求項１２記載の分岐命令実行制御装置。
【請求項１５】
前記分岐リザベーションステーション手段が、命令デコード時に命令実行順序に従って作成される前記エントリを複数備え、
該命令デコードの結果により、分岐の成立／不成立が確定せず、該デコードされた命令に続く非分岐後続命令が投機的に実行された後に該投機的に実行された命令の実行結果の無効化が必要となったとき、
該命令実行の結果として作成されたエントリは直ちに消去されることを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項１６】
分岐命令に対応して該分岐命令のデコードの結果により、分岐の成立／不成立を予測する分岐成否予測手段を更に備えるとともに、
前記分岐リザベーションステーション手段が、命令デコード時に命令実行順序に従って作成される前記エントリを複数備え、
該分岐成否予測手段の予測結果に従って該分岐命令以後の命令が投機的に実行された後に該投機的命令実行結果の無効化が必要となったとき、該投機的命令実行の結果として作成されたエントリは直ちに消去されることを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項１７】
分岐命令に対応して該分岐命令のデコードの結果により、分岐の成立／不成立を予測する分岐成否予測手段と、
前記分岐リザベーションステーション手段内に作成されたエントリに対応する分岐処理の完了時に、
分岐成立／不成立の確定結果、分岐成立時の分岐先アドレス、および前記予測と実際の分岐確定結果との一致／不一致を該分岐成否予測手段に通知する更新指示手段とを更に備え、
該分岐成否予測手段が該通知結果に従って自手段内に格納されている予測のためのデータを更新することを特徴とする請求項１記載の分岐命令実行制御装置。
【請求項１８】
前記分岐リザベーションステーション手段内に作成されるエントリが、
分岐命令のデコードの結果により、分岐の成立／不成立が確定しないときに分岐先の命令列があらかじめフェッチされることにより格納される記憶領域を示すデータの格納領域を更に備え、
該分岐命令に続く非分岐後続命令が投機的に実行された後に分岐の設立が確定したときには、該投機的命令実行の結果が無効にされるとともに、該記憶領域に格納された命令列が実行され、
分岐の不成立が確定したときには、該記憶領域に格納された命令列が消去されることを特徴とする請求項１記載の分岐命令実行制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、順次与えられる命令を実行する情報処理装置内の分岐命令実行制御装置に係り、更に詳しくはプログラムからアクセス可能な資源、すなわちメモリの記憶領域、レジスタの内容などを、プログラムの命令実行順序に従って逐次参照、および更新する動作が実行される情報処理装置内で、分岐命令の実行を制御する分岐命令実行制御装置に関する。
【０００２】
【従来の技術】
情報処理装置において、命令に対する処理を高速に実行するための様々な技術が用いられている。その１つはパイプライン処理である。パイプライン処理における処理のステージをより細かく刻むことにより、より高速のマシンサイクルを実現し、その結果として高性能を狙うスーパーパイプラインと呼ばれる方式や、パイプラインを複数設けたスーパースカラ方式などが実用化されている。
【０００３】
第２の技術として、命令処理の実行をパイプラインによって制御する代わりに、リザベーションステーションと呼ばれる処理待ちのスタックを設けて、命令の実行制御を行う方式が実現されている。このリザベーションステーションを用いた方式では、パイプライン方式と違って、マシンサイクルを単位とする処理過程の数とは独立にスタックのエントリ数を選ぶことが可能であり、エントリ数を大きくすることによって高い並列度を狙うことができる。
【０００４】
第３の更に高性能を狙う技術としてアウトオブオーダ方式がある。アウトオブオーダ方式とは、プログラムによって指示された命令順序とは異なった順序で、例えば入力データが揃った命令から随時実行する処理方式である。すなわちアウトオブオーダ方式においては、スタック内で処理可能なエントリが選択され、プログラムにより指示された命令順序とは異なった順序でそのエントリに対応する処理を随時実行することによって、高い並列度を実現することができる。
【０００５】
アウトオブオーダ方式では命令の実行は任意の順序であるが、プログラムからアクセス可能な資源、すなわちメモリの記憶領域やレジスタの内容などは、プログラムの実行順序に従って参照、および更新されるように命令実行がなされる必要がある。
【０００６】
このように命令処理を高速に実行する情報処理装置においては、例えば１つの命令の実行の終了を待たずに次々と後続の命令列の実行を開始し、これらを並列に実行することによって性能向上が図られる。
【０００７】
しかしがら、先行する命令の実行結果が後続の命令の実行に影響を与える場合には逐次的に処理を行う必要があり、情報処理装置の性能低下を引き起こす原因となる。その代表的な例として分岐命令がある。分岐命令は、その実行が完了するまで分岐が成立するか否かと、分岐が成立する場合の分岐先ターゲットの命令アドレスが明らかとならない。
【０００８】
分岐命令を含む命令列を高速に処理するためには、まず分岐命令自体を分岐以外の命令と並列に実行する機構が必要となる。そのような機構が存在しない場合には、分岐命令が実行されるたびに命令処理が逐次処理となり、せっかく用意されている並列実行のためのハードウェア資源を有効に使うことができず、性能が低下することになる。
【０００９】
また高速処理のためには、分岐命令の後の命令を投機的に実行する必要がある。このような投機的な命令実行が行われない場合には、分岐命令の実行が開始されるとその実行が完了するまで分岐命令の後の実行順序の命令の実行が開始できず、並列実行のためのハードウェア資源を有効に使うことができない。
【００１０】
このように分岐命令の後に投機的に実行される対象の命令としては、分岐不成立の場合の分岐命令の後続命令列を対象とすることができるが、更に分岐予測機構を備えることによって分岐成立の場合の分岐先ターゲットの命令列を対象とすることも可能である。
【００１１】
【発明が解決しようとする課題】
しかしながら、このように分岐命令を含む命令列を高速に処理するために分岐命令の後の命令実行を投機的に行う場合には、先行する分岐命令の実行結果に応じてその投機的実行の妥当性を検査する機構が必要となり、命令の投機的実行が妥当でなかった場合にはその命令の実行を取り消し、正しい命令列の実行をやり直す機構が必要となる。更に分岐予測機構の情報も分岐命令の実行結果に応じて適切に更新しなければ効果を上げることが難しい。
【００１２】
投機的実行が行われる命令列の中に更に分岐命令がある場合に、その後の分岐列の実行をその分岐命令の実行完了まで遅らせるとすれば、分岐命令が多く含まれる命令列の実行性能が低下してしまう。また投機的実行が行われる命令列の中の分岐命令に続く命令列を投機的に実行しようとすると、命令の投機的実行結果を取り消す機構や、正しい命令列の実行をやり直す機構は更に複雑なものとなるという問題点があった。
【００１３】
本発明は、例えば１つの分岐命令に対応して１つのエントリが作成されるリザベーションステーション、すなわち処理待ちのスタックを設け、スタック内で処理可能なエントリを選択して、プログラムにより指示された命令順序とは異なった順序で随時命令実行を行うことにより、分岐命令を含む命令列の処理を高速化することができる分岐命令実行制御装置を提供することを目的とする。
【００１４】
【課題を解決するための手段】
図１は本発明の原理構成ブロック図である。同図は順次与えられる命令を実行する情報処理装置１の原理構成を示し、その内部に本発明の分岐命令実行制御装置２が備えられている。
【００１５】
分岐命令実行制御装置２に備えられる分岐リザベーションステーション手段３は、命令デコードの結果、その命令が分岐命令であるか、または分岐に関する処理が必要であると判断された時、その分岐命令または分岐に関する処理の実行に必要なデータを格納すべきエントリが作成されるものである。
【００１６】
本発明の実施形態においては、分岐リザベーションステーション手段３の内部、すなわちそのエントリに分岐の確定／未確定を表示するフラグと、分岐の成立／不成立を表示するフラグとの格納領域が備えられ、命令デコードの時点でその分岐の成立／不成立が確定する時には、作成されるエントリに分岐の確定を示すフラグと成立／不成立を示すフラグとの値が格納され、命令デコードの時点で分岐の成立／不成立が確定しない時には、その分岐が未確定であることを示すフラグの値が格納される。
【００１７】
そして命令デコードの時点で分岐の成立／不成立が確定しない時には、その成立／不成立の判断が可能になった時点で、命令の実行順序に無関係に、その判断結果に対応して分岐の成立／不成立を示すフラグの値が格納される。
【００１８】
本発明の実施形態においては、命令デコードの時点で、そのデコードされる命令に先行する命令であって、デコードされる命令についての分岐の成立／不成立に影響を与える先行命令の実行が未完了である時には、作成されるエントリにその先行命令の実行が未完了であることを示すデータと共にその先行命令を識別するためのデータを格納することもできる。
【００１９】
本発明の実施形態においては、分岐成否予測手段、命令投機実行手段、および命令再実行手段を更に分岐命令実行制御装置２の内部に備えることもできる。分岐成否予測手段は、分岐命令に対応してその分岐命令のデコードの時点で分岐の成立／不成立を予測し、その予測結果を、分岐リザベーションステーション手段３に作成されるエントリに格納されるべき分岐の成立／不成立を示すフラグの値として、分岐リザベーションステーション手段３に与えるものである。
【００２０】
命令投機実行手段は、分岐成否予測手段の予測結果に従ってその分岐命令以後の命令を投機的に実行するものであり、命令再実行手段は分岐リザベーションステーション手段３に格納された分岐の成立／不成立を表示するフラグの値と分岐の成立／不成立の実際の判断結果とに矛盾を生じた時に、命令投機実行手段による命令実行結果を無効とし、実際の判断結果に対応する命令を実行するものである。
【００２１】
本発明の実施形態においては、分岐成否予測手段は分岐の成立／不成立を予測する以外に、分岐成立が予測される時更に分岐先アドレスの予測値を分岐リザベーションステーション手段３に作成されるエントリに格納させる作用を実行し、更に命令再実行手段はこの分岐先アドレスの予測値と実際に求められた分岐先アドレスとが一致しなかった時、命令投機実行手段による命令実行結果を無効とし、実際に求められた分岐先アドレスの命令以後の命令を実行することもできる。
【００２２】
本発明の実施形態においては、図１に示すように情報処理装置１の内部に命令リザベーションステーション手段４を備えることもできる。この命令リザベーションステーション手段４は情報処理装置１に対して順次与えられる命令をアウトオブオーダで処理するために命令実行を統合的に制御するものである。
【００２３】
そして例えば分岐リザベーションステーション手段３が、分岐命令、または分岐に関する処理の実行に必要なデータを格納すべきエントリを複数備え、命令デコードの時点で命令実行順序に従ってエントリが作成されると共に、そのエントリに命令リザベーションステーション手段４によって指定され、デコードされた命令を識別する命令識別子が格納される。
【００２４】
その後作成されたエントリに対応する分岐処理の完了時には、命令実行順序に従って、例えば分岐リザベーションステーション手段３から分岐成立／不成立の確定結果および命令識別子を伴って、分岐処理の完了が命令リザベーションステーション手段４に報告された後に、その分岐処理の完了した命令に対応するエントリが消去される。
【００２５】
本発明の実施形態においては、命令デコードの時点で分岐の成立／不成立が確定しない時、デコードされた命令以後の命令を投機的に実行する命令投機実行手段を更に備えると共に、分岐リザベーションステーション手段３が、分岐命令、または分岐に関する処理の実行に必要なデータを格納すべきエントリを複数備えることもでき、命令デコードの時点で命令実行順序に従ってエントリが作成される。そして命令投機実行手段による命令の実行結果の無効化が必要な時には、命令投機実行手段による命令実行の結果として作成されたエントリは直ちに消去される。
【００２６】
本発明の実施形態においては、分岐命令に対応して分岐命令のデコードの時点で分岐の成立／不成立を予測する分岐成否予測手段を備えることもできる。そして分岐リザベーションステーション手段３上に作成されたエントリに対応する分岐処理の完了時に、分岐リザベーションステーション手段３から分岐成立／不成立の確定結果、分岐成立時の分岐先アドレス、および予測と実際の分岐確定結果との一致／不一致が分岐成否予測手段に報告され、分岐成否予測手段はその報告結果に従って自手段内に格納されている予測のためのデータを更新する。
【００２７】
以上のように、本発明においては分岐リザベーションステーション手段３上にそれぞれの分岐命令に対応するエントリが作成され、実際に処理可能になったエントリから順次選択されて命令処理がアウトオブオーダで行われ、分岐命令の処理が完了した場合には、命令実行順序に従ってその処理完了が命令リザベーションステーション手段４に報告される。
【００２８】
【発明の実施の形態】
図２は本発明の分岐リザベーションステーションが備えられる情報処理装置の全体構成ブロック図である。
【００２９】
図２において、インストラクションアドレスレジスタ（ＩＡＲ）１０、インストラクションフェッチエフェクティブアドレスジェネレータ（ＩＦＥＡＧ）１１、インストラクションエフェクティブアドレスレジスタ（ＩＥＡＲ）１２、インストラクションフェッチトランスレーションルックアサイドバッファ（ＩＦＴＬＢ）１３、インストラクションフェッチタグ（ＩＦＴＡＧ）１４、およびインストラクションフェッチローカルバッファストレージ（ＩＦＬＢＳ）１５は、本発明の情報処理装置における部分的なパイプラインとしての命令のフェッチのパイプライン動作を行うものである。
【００３０】
この命令フェッチパイプラインは命令フェッチのリクエスト発行サイクルＩ、タグとＴＬＢへのアクセスサイクルＩＴ、バッファアクセスサイクルＩＢ、およびフェッチ完了サイクルＩＲから成り、主記憶からフェッチされた命令は命令バッファ１６に与えられる。
【００３１】
命令バッファ１６に与えられた命令は、命令デコードのパイプラインにおいてインストラクションワードレジスタ１７、デコーダ１８によってデコードされる。このパイプラインは、命令のプレゼンテーションサイクルＥ、およびデコードサイクルＤから成る。
【００３２】
このデコードサイクルの終了（Ｄリリース）時に命令リザベーションステーションに相当するコミットスタックエントリ（ＣＳＥ）２０にエントリが作成されると共に、命令のデコード結果に対応して主記憶オペランドアドレス生成用のリザベーションステーションであるリザベーションステーションフォーアドレスジェネレーション（ＲＳＡ）２１、演算処理用のリザベーションステーションであるリザベーションステーションフォーエクセキューション（ＲＳＥ）２２、および分岐リザベーションステーションに相当するリザベーションステーションフォーブランチ（ＲＳＢＲ）２３に必要なエントリが作成される。
【００３３】
一般的にＲＳＡ２１、ＲＳＥ２２、およびＲＳＢＲ２３のそれぞれのエントリ数はＣＳＥ２０のエントリ数より少なく、例えばエントリ数はＣＳＥ２０に対して１６、ＲＳＡ２１に対して６、ＲＳＥ２２に対して８、ＲＳＢＲ２３に対して８となる。
【００３４】
デコードサイクルの完了時（Ｄリリース）に命令デコードの結果としてエントリが作成されるべき各リザベーションステーションにエントリの空きがない場合には、その命令はインストラクションワードレジスタ１７に止まり、必要なエントリに空きが生じた時点でＣＳＥ２０、および必要なリザベーションステーション上にエントリが作成される。このために各リザベーションステーションに対応してリソースカウンタが用意されており、エントリが作成される時にその値はインクリメントされ、そのエントリに対応する処理が完了するときにポインタの値がデクリメントされる。
【００３５】
ＣＳＥ２０に対してはインポインタが備えられ、デコードサイクルの終了時にＣＳＥ２０に作成されるエントリの番号がそのインポインタの値によって指示され、この番号は命令識別子（ＩＩＤ）として、各リザベーションステーション上の対応するエントリにも登録され、処理中の命令を命令実行順序と共にユニークに識別するために使用される。
【００３６】
リザベーションステーションフォーブランチＲＳＢＲ２３に対しても、ＣＳＥ２０に対するインポインタとは異なるインポインタが備えられ、そのインポインタによって指示される位置にエントリが作成される。これに対してＲＳＡ２１、およびＲＳＥ２２に対しては基本的にアウトオブオーダ処理が行われるために、リザベーションステーションの中で空いているエントリが探され、エントリの作成が行われる。
【００３７】
ＣＳＥ２０に対しては、そのエントリが解放される時点でインクリメントされるアウトポインタが備えられ、アウトポインタの指す先頭のエントリが、実行中で未完了の命令のうちで、実行順序が最も古いものとして識別される。エントリの解放に先立って実行されるプログラマブルな資源の更新は、アウトポインタの指す命令から順に行われ、命令の実行順序に従った資源の更新順序が保証される。
【００３８】
ＲＳＢＲ２３も同様にアウトポインタを備えるが、分岐の確定はアウトオブオーダ処理である。これに対してＣＳＥ２０に対する分岐の完了報告はアウトポインタの指すエントリから順次実行される。
【００３９】
ＲＳＡ２１とＲＳＥ２２内のエントリに対する処理順序としては実行可能なエントリから任意の順序で行われるが、複数の実行可能なエントリに対しては命令実行順序の古いものから処理が行われる。
【００４０】
図２には、さらに分岐命令に対応する分岐予測機構、すなわち分岐の成立／不成立を予測し、分岐の成立が予測されるときはさらに分岐先の命令アドレス（ターゲットアドレス）の予測値を与えるブランチヒストリ（ＢＲＨＩＳ）３９を備えるとともに、ＢＲＨＩＳ３９の出力する予測結果を受け取り、それをＩＷＲ１７を介してデコーダ１８に与える命令バッファタグ部（ＩＢＵＦＴＡＧ）４０を備えている。
【００４１】
ＢＲＨＩＳ３９は、ＩＦＥＡＧ１１の出力する命令のアドレスに対応して、その命令が分岐命令である場合に、過去のその命令の実行結果に応じて分岐の成立／不成立、分岐成立時のターゲットアドレス、後述するギディービットや、ディジービットなどの制御データを格納しており、同一アドレスの命令が与えられたとき、分岐に関するデータをＩＢＵＦＴＡＧ４０に与えるとともに、例えば分岐成立が予測されるとき、ターゲットアドレスをＩＡＲ１０に与えることにより、分岐先の命令以降の命令の投機的実行を可能にさせる。
【００４２】
図２において、命令デコードのパイプライン動作（Ｅ−Ｄ）の後にアドレス計算のパイプライン、記憶制御（Ｓ）ユニットの（キャッシュアクセスの）パイプライン、演算実行のパイプライン、および資源更新のパイプラインの動作が必要に応じて実行される。
【００４３】
アドレス計算のパイプラインはアドレス生成プライオリティサイクルＰＡ  、アドレス生成サイクルＡから成る。ＳユニットのパイプラインはプライオリティサイクルＰＳ  、タグとＴＬＢへのアクセスサイクルＴＳ  、バッファアクセスサイクルＢＳ  、および完了サイクルＲＳ  から成る。演算実行パイプラインは、プライオリティサイクルＰＥ  、バッファアクセスサイクルＢＥ  、および実行サイクルＸＥ  から成る。資源更新パイプラインは更新サイクルＵ、書込みサイクルＷから成る。
【００４４】
これらのパイプラインを用いて実行される処理については、本発明に直接関連する部分は少ないので、続いて本発明の最も重要な構成要素としてのＲＳＢＲについての説明に移る。図３はＲＳＢＲの各エントリの格納内容を示す。本実施形態においては、ＲＳＢＲ２３にはそのエントリとして０〜７の８つのエントリが設けられるものとする。各エントリには３１のフィールドが設けられる。
【００４５】
第１フィールドはそのエントリが有効であることを示すバリッド（１ビット）である。ファントムブランチの時はこのビットはセットされない。ファントムブランチとは、実際には分岐命令ではないにもかかわらず、ブランチヒストリ３９に誤った情報が入っていたためにヒットと判定され、分岐命令と判断されてしまった命令のことである。このようなヒットは、ブランチヒストリ３９が命令アドレスの一部によって検索されることや、プロセススイッチによってメモリに入っている命令が変わってしまうことなどによって発生する。ハードウェアの簡単化のために、ＥＸ（エクセキュート）命令もファントムブランチとして扱われる。
【００４６】
第２フィールドは、そのエントリに入っている命令がファントムブランチであることを示すファントムバリッド（１ビット）である。
【００４７】
第３フィールドは、分岐の成立／不成立が確定したことを示すリゾルブド（１ビット）である。
【００４８】
第４フィールドは、そのエントリに対応する分岐が成立したことを示すテークン（１ビット）である。
【００４９】
第５フィールドは、最後の３１番目のＴＩＡＲフィールド、すなわち分岐先のアドレスを示すフィールドに有効な値が入っていることを示すターゲットアドレスバリッド（ＴＡＶ，１ビット）である。
【００５０】
第６フィールドは、ブランチヒストリ３９から得られたターゲットアドレスと、分岐命令のオペランドを用いてエフェクティブアドレスジェネレータ（ＥＡＧ）２６によって計算されたターゲットアドレスとが一致したことを示すターゲットインストラクションアドレスマッチ（ＴＩＡＲ ＭＡＴＣＨ，１ビット）である。
【００５１】
第７フィールドは、ＲＳＢＲのエントリが割り当てられた時点、すなわち命令デコードの時点では分岐の成立／不成立を決定する条件コード（ＣＣ）の内容が確定しないことを示すペンディング（ＰＮＤＧ，１ビット）である。
【００５２】
第８フィールドは、リインストラクションフェッチダン（ＲＥＩＦＣＨ−ＤＯＮＥ，１ビット）である。このビットは、例えばブランチヒストリ３９にヒットして分岐先、すなわちターゲットアドレス以降の命令列が投機的に実行されたものの、そのターゲットアドレスとオペランドを用いてＥＡＧ２６によって計算されたアドレスとが一致せず、その分岐命令の分岐先でなく、非分岐の後続命令を再実行する必要がある場合に、その非分岐後続命令列の再命令フェッチが行われ、分岐処理の完了時点で命令実行部に入っている本来実行されるべきでない命令をクリアする必要があることを示すものである。この命令再フェッチについては更に後述する。
【００５３】
第９フィールドは、ブランチヒストリのターゲットアドレスが指す命令列が命令バッファにフェッチされたことを示すブランチヒストリターゲットアクティブ（１ビット）である。
【００５４】
第１０フィールドは、ブランチヒストリのターゲットアドレスが指す命令列が格納されているインストラクションフェッチポートのＩＤを示すブランチヒストリターゲットＩＤ（２ビット）である。ここではインストラクションフェッチポートが３つあるものとし、そのＩＤとして２ビットが必要となる。
【００５５】
第１１フィールドは、ヘッジフェッチによって分岐先のターゲットアドレスが指す命令列がインストラクションバッファにフェッチされたことを示すヘッジターゲットアクティブ（１ビット）である。ここでヘッジフェッチとは、ブランチヒストリにヒットせず、デコードの時点では成立／不成立が確定しない分岐命令に対して、分岐先の命令列をあらかじめインストラクションバッファにフェッチすることである。但しブランチヒストリにヒットしていないため、デコーダには分岐命令の後続命令、すなわち非分岐後続命令が与えられる。分岐先の命令列はフェッチされるだけであり、デコーダには与えられない。分岐が成立することが確定すると、命令実行部の内容がクリアされ、分岐先の命令列がデコーダに与えられる。不成立であることが確定すると、分岐先の命令列が入っているインストラクションフェッチポートの内容は無効となる。
【００５６】
第１２フィールドは、ヘッジフェッチされた命令列が格納されているインストラクションフェッチポートのＩＤを示すヘッジターゲットＩＤ（２ビット）である。
【００５７】
第１３フィールドは、エントリに入っている命令がブランチオンコンディション（ＢＣ，ＢＣＲ，ＢＲＣ）であることを示すＢＣ（１ビット）である。これらの命令の内容については後述する。
【００５８】
第１４フィールドは、エントリに入っている命令がブランチオンカウント（ＢＣＴ，ＢＣＴＲ，ＢＲＣＴ）であることを示すＢＣＴ（１ビット）である。
【００５９】
第１５フィールドは、エントリに入っている命令列がブランチオンインデックスハイ（ＢＸＨ，ＢＲＸＨ）であることを示すＢＸＨ（１ビット）である。
【００６０】
第１６フィールドは、エントリに入っている命令がブランチオンインデックスローオアイコール（ＢＸＬＥ，ＢＲＸＬＥ）であることを示すＢＸＬＥ（１ビット）である。
【００６１】
第１７フィールドは、エントリに入っている命令がＥＸ（エクセキュート）命令であることを示すＥＸ（１ビット）である。
【００６２】
第１８フィールドは、そのエントリに対応する分岐命令がサブルーチンを呼び出すためのものであることを示すサブルーチンコール（１ビット）である。
【００６３】
第１９フィールドは、そのエントリに対応する分岐命令がサブルーチンから戻るためのものであることを示すサブルーチンリターン（１ビット）である。
【００６４】
第２０フィールドは、エントリに入っている命令のマスクフィールドを示すＯＰコード（ＯＰＣ，４ビット）である。このマスクフィールドについては後述する。
【００６５】
第２１フィールドは、エントリに入っている命令のＩＩＤ（命令識別子）を示すインストラクションＩＤ（４ビット）である。この識別子は前述のようにＣＳＥ２０のエントリに対応して付けられる識別子である。
【００６６】
第２２フィールドは、ブランチヒストリ３９にヒットした、例えば成立と予測された命令であることを示すブランチヒストリヒット（１ビット）である。
【００６７】
第２３フィールドは、ブランチヒストリのどのウェイにヒットしたかを示すブランチヒストリヒットウェイ（１ビット）である。
【００６８】
第２４フィールドは、ブランチヒストリのリプレイスフラグを示すリプレイスフラグ（２ビット）である。このリプレイスフラグは、例えばブランチヒストリがツーウェイ構成である場合に、ＲＳＢＲ２３からの完了報告を受けてブランチヒストリの内容を更新する場合に所定のリプレイスアルゴリズムに従って更新するための情報である。
【００６９】
第２５フィールドは、ブランチヒストリのディジーヒット（１ビット）である。このディジーヒットはある時はブランチヒストリにヒットするが次にはヒットせず、またその次にはヒットするというように、ヒットするかしないかが交代的に変化することを示すものである。
【００７０】
第２６フィールドは、ブランチヒストリのギディービット（１ビット）を示す。このギディービットは分岐先のアドレス、すなわちターゲットアドレスが頻繁に変化することを示す。
【００７１】
第２７フィールドは、エントリに対応する命令の前にあって、エントリに対応する命令における条件コードを更新する命令の命令識別子を示すコンディションコードＩＩＤ（４ビット）である。すなわちこの識別子ＣＣＩＩＤは、分岐命令の先行命令であって、その分岐命令に対する条件コードを変更することになる命令の識別子である。
【００７２】
第２８フィールドは、エントリに対応する命令の命令語の長さを示すインストラクションレングスコード（２ビット）である。
【００７３】
第２９フィールドは、エントリに対応する命令がどのインストラクションフェッチポートからフェッチされたかを示すストリームＩＤ（２ビット）である。
【００７４】
第３０フィールドは、エントリに入っている命令のインストラクションアドレスを示すインストラクションアドレスレジスタの内容である。そのビット数は３０ビット＋パリティビットとしての４Ｐビットである。本実施形態では、偶数アドレスしか許されていないものとし、３１ビットでなく、３０ビットによってそのアドレスが表される。
【００７５】
第３１フィールドは、分岐先のアドレスを示すターゲットインストラクションアドレスレジスタ（３１＋４Ｐビット）の内容である。
【００７６】
図４は本発明の実施形態において用いられるブランチオンコンディション命令の命令形式の説明図である。同図（ａ）  はＢＣ命令であり、４７は命令コード、Ｍ１  はマスク、Ｘ２  ，Ｂ２  およびＤ２  は第２オペランドアドレスである。マスクＭ１  の内容と条件コード（ＣＣ）が一致した時に分岐が成立し、第２オペランドが分岐先アドレスとして使用される。
【００７７】
条件分岐命令では、マスクフィールドの４ビットがそれぞれ条件コードの値０，１，２，３に対応し、条件コードの値がマスクフィールドの“１”のビットに対応すると分岐が成立する。例えばマスクフィールド４ビットが“１０００”であり、条件コードが“０”であると分岐が成立する。
【００７８】
図４（ｂ）  のＢＣＲ命令はＢＣ命令と同様の命令であるが、分岐が成立する時は、第２オペランドとしてのＲ２  によって指定される汎用レジスタの内容が分岐先アドレスの生成に使用される。但しこのフィールドの内容が“０”の時は、無条件に分岐は不成立となる。
【００７９】
図４（ｃ）  はブランチリラティブオンコンディション（ＢＲＣ）命令の命令形式を示す。この形式においても、マスクＭ１  の内容と条件コードが一致した時に分岐が成立する。分岐先アドレスの生成においては、Ｉ２  フィールドの内容によって現在の命令アドレスに加算すべき値が特定され、分岐先アドレスの生成が行われる。
【００８０】
図５はブランチオンカウント命令の命令形式を示す。同図（ａ）  のＢＣＴ命令では、第１オペランドＲ１  の内容から“１”が引かれ、その結果が再びＲ１  として格納される。結果が“０”でない時には分岐が成立し、分岐先のアドレスは第２オペランドとしてのＸ２  ，Ｂ２  、およびＤ２  によって与えられる。
【００８１】
図５（ｂ）  のＢＣＴＲ命令では、同様に第１オペランドＲ１  から“１”が引かれ、その結果が“０”でない時には分岐が成立する。分岐先アドレスは第２オペランドのＲ２  によって指定される汎用レジスタの内容として与えられる。Ｒ２  フィールドが“０”である時には、無条件に分岐は不成立となる。
【００８２】
図５（ｃ）  のＢＲＣＴ命令でも同様にＲ１  の内容から“１”が引かれ、その結果が“０”でない時に分岐が成立する。分岐先のターゲットアドレスは、ＢＲＣ命令におけると同様にＩ２  フィールドの内容に基づいて求められる。
【００８３】
図６はブランチオンインデックスハイ命令の命令形式を示す。同図（ａ）  はＢＸＨ命令を示す。第１オペランドＲ１  の内容に増分値が加算され、その結果が比較値と比較される。そして和が比較値より大きい時分岐が成立する。Ｒ３  フィールドは増分値と比較値が入っているレジスタを指定するものであり、分岐先アドレスは第２オペランドアドレス、すなわちＢ２  ，Ｄ２  によって指定される。
【００８４】
図６（ｂ）  はＢＲＸＨ命令の命令形式である。ＢＸＨ命令と比較すると、分岐先アドレスがＢＲＣおよびＢＲＣＴ命令と同様に、Ｉ２  フィールドの内容に基づいて求められる点のみが異なっている。
【００８５】
ブランチオンインデックスローオアイコール命令としてのＢＸＬＥ，ＢＲＸＬＥ命令の命令形式はＢＸＨ，ＢＲＸＨ命令の命令形式と同じである。ＢＸＬＥ，ＢＲＸＬＥ命令においては、第１オペランドと増分値との和が比較値より小さいか、等しい時に分岐が成立する。分岐先アドレスはＢＸＨ，ＢＲＸＨ命令におけると同様に生成される。
【００８６】
ブランチアンドセーブ命令などのＢＡＳ，ＢＡＳＲ、およびＢＲＡＳ命令では、更新された命令アドレスを含む現在のプログラムステータスワード（ＰＳＷ）からの情報、例えばＰＳＷのビット３２〜６３が第１オペランドの位置に連係情報としてロードされた後に、分岐が実行される。その意味ではこれらの命令は基本的には無条件分岐命令である。ＢＡＳ命令では、第２オペランドのアドレスが分岐先アドレスとして使用される。ＢＡＳＲ命令では、第２オペランドのＲ２  によって指定される汎用レジスタの内容が分岐先アドレスの生成に使用される。この時Ｒ２  フィールドの内容が“０”であると、分岐は不成立となる。またＢＲＡＳ命令では、例えばＢＲＣ命令などと同様にＩ２  フィールドの内容に基づいて分岐先アドレスが求められる。
【００８７】
ブランチアンドリンク命令としてのＢＡＬ、およびＢＡＬＲ命令は、プログラムのアドレス指定モードに対応してＢＡＳ、およびＢＡＳＲ命令の代わりに用いられるものであり、その命令形式はＢＡＳ、およびＢＡＳＲ命令と同様であるので、その説明を省略する。
【００８８】
ここで図３の第２７エントリに格納される条件コード更新命令の命令識別子ＣＣＩＩＤの格納が必要な理由と、アウトオブオーダ方式による命令の並列実行による処理速度の向上について、図７を用いて説明する。同図において、情報処理装置に順次与えられる命令に対して、各命令を識別するための識別子ＩＩＤが、コミットスタックエントリＣＳＥ２０によって与えられる。その値は最初の比較命令Ｃに対して“０”、ロード命令Ｌに対して“１”、ブランチオンコンディション命令ＢＣに対して“２”、ストア命令Ｓに対して“３”，・・・となっている。
【００８９】
本実施形態においては、３つの命令が１サイクルで一度にデコードされるものとすると、最初の３つの命令のうち３番目の命令ＢＣは分岐命令であるため、この命令のデコードの時点でＲＳＢＲ２３に対してこの命令に対応するエントリが作成される。この命令ＢＣに対する条件コードＣＣの内容は、最初の比較命令Ｃの結果によって与えられるものとする。
【００９０】
次の３つの命令のうち２番目のブランチオンコンディション命令ＢＣに対して、同様にＲＳＢＲ２３にエントリが作成される。この命令に対する条件コードの内容は、直前の減算命令Ｓの実行結果に対応して与えられるものとする。このサイクルでは第３の加算命令Ａまでの３つの命令が一度にデコードされる。以下同様に３つの命令が一度にデコードされる動作が繰り返される。
【００９１】
命令の並列実行の結果として、これらの命令のうちＩＩＤが“１”のロード命令Ｌが最初に、次にＩＩＤが“３”の減算命令Ｓが実行されるものとする。
【００９２】
この減算命令Ｓは、次のブランチオンコンディション命令ＢＣに対する条件コードの内容を決定するものであり、ＢＣ命令に対応するエントリにはＣＣＩＩＤとして減算命令Ｓに対する“３”が格納されており、演算ユニットからこの命令実行が終了したことがＩＩＤ＝３を伴って報告されることにより、ＲＳＢＲ２３はＢＣ命令に対する条件コードの内容が確定されたことを知り、その命令を実行することができる。
【００９３】
次にＩＩＤが“５”の加算命令Ａ、“０”の比較命令Ｃがこの順序で実行されるものとすると、比較命令ＣはＩＩＤが“２”のブランチオンコンディション（ＢＣ）命令の条件コードの内容を確定する命令であり、この命令の実行によってＩＩＤが“２”のＢＣ命令は実行可能となる。ＩＩＤが“４”のＢＣ命令はこの命令より先にその実行が終了しているが、ＣＳＥ２０への完了報告は命令実行順序に従って行われるために、先にＩＩＤが“２”のＢＣ命令に関する終了報告が行われ、その後にＩＩＤが“４”のＢＣ命令の完了報告が行われる。
【００９４】
このように、例えばＢＣ命令に対する条件コードの内容を確定する先行命令に対する命令識別子をＣＣＩＩＤとしてエントリに格納しておくことにより、その先行命令の終了を直ちに知ることができ、実行可能な分岐命令を命令の実行順序に無関係に実行することが可能となり、全体として情報処理装置の命令処理速度が向上することになる。
【００９５】
続いてＲＳＢＲ２３の動作について、情報処理装置に与えられる命令や、処理装置内のデータに関連して説明する。ＲＳＢＲ２３は図３で説明したように分岐に関する情報を保持するものであり、その情報を基にして分岐の判断、再命令フェッチの指示、ブランチヒストリの更新、ＣＳＥ２０への分岐結果の報告などを行う。
【００９６】
まず、ＲＳＢＲ３のエントリが割り当てられる命令について説明する。前述のＢＣ，ＢＣＲ，ＢＣＴ，ＢＣＴＲ，ＢＸＨ，ＢＸＬＥ，ＢＲＡＳ，ＢＲＣ，ＢＲＣＴ，ＢＲＸＨ，ＢＲＸＬＥ，ＢＡＬ，ＢＡＬＲ，ＢＡＳ，ＢＡＳＲの各命令であって、命令デコードのサイクルで分岐が成立すると判断できるか、あるいはデコードサイクルでは分岐成立／不成立の判断を行うことができない命令に対してＲＳＢＲのエントリが割り当てれらる。その他にも、ブランチヒストリにヒットした命令（ファントムブランチを含む）、およびＥＸ命令に対応してエントリが割り当てられる。ここでＥＸ命令にエントリが割り当てられる理由について説明すると、ＥＸ命令は分岐命令と似たフォーマットを持っており、オペランドでターゲット命令が指定される形式になっている。すなわち分岐命令で分岐が成立する場合と似ており、その意味でＥＸ命令にもエントリが割り当てられる。
【００９７】
デコードサイクルで分岐が不成立であることがか確定する命令として、ＢＣ，ＢＣＲ，ＢＲＣの各命令でマスクが“０”である場合、またＢＣＲ，ＢＣＴＲ，ＢＡＳＲ，ＢＡＬＲ、の各命令で第２オペランドが“０”である場合があり、このような場合にこれらの命令に対してはエントリの割当ては行われない。これらの命令に対して誤って分岐が成立すると予測された場合には、その命令はファントムブランチとして処理される。
【００９８】
分岐の成立／不成立の判断について、図８を用いて更に説明する。図８は、ＲＳＢＲ２３の内部の分岐確定処理部４１による各種のデータを用いた分岐判断の説明図である。分岐確定処理部４１の具体的構成については後述する。
【００９９】
分岐確定処理部４１に対しては、ＲＳＢＲ２３の各エントリの中で図に示す必要なデータが与えられる他に、プログラムステータスワード（ＰＳＷ）処理部４２から条件コードＩＵ  ＣＣが与えられる。この条件コードは命令制御ユニットで持っている条件コードであり、後述するようにアドレス計算のＡサイクルで分岐の成立／不成立を判断するために用いられる。
【０１００】
Ｅユニット４３とＥユニットインタフェース４４は演算器を構成するものであり、ＥＵＣＣ，ＥＵＭＳＧ，ＥＵＣＣ−ＩＩＤ  ＥＵＭＳＧ−ＩＩＤを分岐確定処理部４１に与える。すなわち演算器は、演算が終了するとその終了した命令の識別子ＥＵＣＣ−ＩＩＤと、その条件コードＥＵＣＣを分岐確定処理部４１に与える。また必要に応じ、メッセージＥＵＭＳＧとその識別子ＥＵＭＳＧ−ＩＩＤとを分岐確定処理部４１に与える。
【０１０１】
ＲＳＢＲ２３にエントリが割り当てられる分岐命令は次の３つに分類される。第１のものは無条件分岐命令である。これは命令のデコードサイクルで分岐が成立することが判断できる命令である。エントリの割当てと同時にそのエントリのテークンビットが“１”にセットされる。ＢＡＳ，ＢＲＡＳ，ＢＡＬ命令は無条件分岐命令であり、更に第１オペランドが“Ｆ”であるＢＣ，ＢＲＣ命令、第１オペランドが“Ｆ”で、かつ第２オペランドが“０”以外となっているＢＣＲ命令、および第２オペランドが“０”以外であるＢＡＳＲ，ＢＡＬＲ命令がこの第１の分類に属する。
【０１０２】
第２の分類は条件コードに基づいて分岐判断が行われる命令である。この種の命令は、更にデコード時に条件コードが確定している場合と、確定していない場合との２つに分類される。
【０１０３】
この種の命令では第１オペランド、すなわちマスクフィールドと条件コードＣＣとの比較によって分岐の判断が行われる。第１オペランドが“０”，“Ｆ”以外であるＢＣ，ＢＲＣ命令、第１オペランドが“０”，“Ｆ”以外で、かつ第２オペランドが“０”以外であるＢＣＲ命令が、条件コードで分岐判断が行われる命令である。
【０１０４】
デコードサイクルで条件コードが確定している（ＰＮＤＧ＝０）場合には、アドレス計算のＡサイクルで分岐の判断が行われ、その結果に応じてテークンビットのセットが行われる。原理的にはデコードのＤサイクルで分岐の判断を行うことは可能であるが、処理が重くなるため、本実施形態ではＡサイクルで分岐の判断が行われる。
【０１０５】
ＤサイクルでＣＣの値が確定していない（ＰＮＤＧ＝１）場合には、ＣＣの内容が確定するまで分岐の判断を行うことはできない。条件コードの確定後すぐに分岐の判断が行えるように、前述のＣＣＩＩＤフィールドがエントリに用意されている。これは分岐命令の条件コードを更新する先行命令のＩＩＤを示し、ＰＮＤＧビットが“１”である間、このＣＣＩＩＤの値と演算器から送られる演算の終了した命令の識別子を示すＥＵＣＣ ＩＩＤとの比較が行われ、条件コードの更新が終了したかどうかの監視が行われる。ＣＣが確定すると直ちに分岐判断が行われ、その結果に応じてテークンビットがセットされる。
【０１０６】
第３の分類として、オペランドの計算結果によって分岐判断が行われる命令がある。これは分岐命令自身のオペランドに対する加算、あるいは減算結果によって分岐判断が行われるものであり、ＢＣＴ，ＢＸＨ，ＢＸＬＥ，ＢＲＣＴ，ＢＲＸＨ，ＢＲＸＬＥの各命令、および第２オペランドが“０”以外であるＢＣＴＲ命令がこの分類に属する。演算器での演算が終了した後に分岐判断が行われ、その結果に応じてテークンビットがセットされる。演算器での処理が必要なため、分岐判断は必ずＤサイクルより後になる。
【０１０７】
次に命令デコード時にブランチヒストリ３９にヒットした場合に、エントリに格納される分岐先のターゲットアドレスが有効か否かを判定する処理について説明する。分岐先のアドレスが変更されている場合などのために、ブランチヒストリ３９から得られたターゲットアドレスが正しい飛び先を指しているかどうかの判定が必要となる。図２のエフェクティブアドレスジェネレータ（ＥＡＧ）２６によって命令のオペランドから正しいターゲットアドレスが計算されると、その値とブランチヒストリ３９から得られ、エントリに格納されているターゲットアドレスとが比較される。一致する場合にはＴＩＡＲ−ＭＡＴＣＨビットが“１”にセットされ、一致しない場合には“０”にセットされ、ＥＡＧ２６による計算結果がＴＩＡＲに格納される。
【０１０８】
次にＲＳＢＲの処理のうち、再命令フェッチの指示を行う再命令フェッチ処理部の処理について図９を用いて説明する。同図において再命令フェッチ処理部４６は、ＲＳＢＲ２３のエントリの各種のデータを用いて再命令フェッチが必要な場合に再命令フェッチのアドレスを図２の命令フェッチエフェクティブアドレスジェネレータ（ＩＦＥＡＧ）１１に与えると共に、命令フェッチのコントローラ（ＩＦＣＴＬ）４７に再命令フェッチリクエストを、また記憶制御（Ｓ）ユニット４８に命令フェッチポートをクリアさせる信号を与える。
【０１０９】
再命令フェッチは、命令バッファ１６の内容を一度全てクリアして、その後指定された命令アドレスから指定される命令列を命令バッファに取り込む作業のことである。ＲＳＢＲ２３は、以下のような場合に再命令フェッチを行うように指示を出す。
【０１１０】
▲１▼  ブランチヒストリにヒットしたが、その命令に対する分岐が不成立である場合。
【０１１１】
▲２▼  ブランチヒストリにヒットし、分岐が成立したが、ブランチヒストリに格納されたターゲットアドレスがＥＡＧ２６によって計算された正しい値と一致しない場合。
【０１１２】
▲３▼  ブランチヒストリにヒットし、その分岐は成立したが、ターゲット命令を命令バッファ１６にフェッチする動作を開始していない場合。
【０１１３】
▲４▼  ブランチヒストリにヒットしなかった分岐が成立し、かつその分岐に対応するヘッジフェッチが行われていない場合。
【０１１４】
▲５▼  ＥＸ命令のターゲット命令のフェッチの場合。前述のようにＥＸ命令ではそのオペランドによってターゲット命令が指定され、そのターゲット命令へのジャンプが必要となる。
【０１１５】
▲６▼  ＥＸ命令の次の命令のフェッチの場合。ＥＸ命令に対するターゲット命令の実行後には、一般に元の位置の命令に戻るための命令フェッチが必要となる。
【０１１６】
▲１▼，▲２▼は分岐成立の予測がはずれて再命令フェッチが必要になる場合であり、▲３▼は分岐成立の予測どおりに分岐成立したものの、何らかの不都合で、そのターゲット命令のフェッチ動作が開始されていないため、再命令フェッチを起動した方が良いと判断される場合である。▲４▼は分岐不成立の予測がはずれて再命令フェッチが必要になる場合である。▲５▼，▲６▼はＥＸ命令に対する場合であり、▲５▼は分岐不成立の予測がはずれた場合と同様に扱われ、▲６▼は分岐成立の予測がはずれた場合と同様に扱われる。
【０１１７】
分岐不成立の予測がはずれて再命令フェッチが行われる場合には、当然分岐成立後の分岐先アドレスとしてのＴＩＡＲの値（ＴＩＡＲ−ＭＡＴＣＨ＝０の場合はＥＡＧ２６によって計算された正しい値）が再命令フェッチアドレスとなる。分岐成立の予測がはずれて再命令フェッチが行われる場合には、インストラクションアドレスレジスタ（ＩＡＲ）１０の値と命令語の長さＩＬＣとの和、すなわち分岐命令の次の命令のアドレスが再命令フェッチアドレスとなる。
【０１１８】
図１０はＲＳＢＲにおけるエントリの割当てと解放の説明図である。正しい順序でプログラムを実行するためには、例えば再命令フェッチ要求はインオーダで行われる必要がある。そのためＲＳＢＲは図１０に示すようにリングバッファとなっている。ＲＳＢＲにはインポインタとアウトポインタが備えられ、そのエントリはプログラム本来の実行順序に従ってＲＳＢＲインポインタ、ＲＳＢＲインポインタ＋１、ＲＳＢＲインポインタ＋２，・・・の順番に割り当てられる。ＲＳＢＲアウトポインタによって指されるエントリから再命令フェッチが行われないことが確定しない限り、ＲＳＢＲアウトポインタ＋１によって指されるエントリから再命令フェッチ要求が出されることはなく、ＲＳＢＲアウトポインタとＲＳＢＲアウトポインタ＋１によって指されるエントリとの両方から再命令フェッチが行われないことが確定しない限り、ＲＳＢＲアウトポインタ＋２によって指されるエントリから再命令フェッチ要求が出されることはない。
【０１１９】
再命令フェッチが必要な場合、ＲＳＢＲエントリには本来実行されてはならない命令に対応するデータが格納されている可能性があり、このようなエントリは再命令フェッチ後直ちに解放されなければならない。これは命令実行部と命令フェッチ部とが別々に動作しているためである。このエントリ解放を直ちに実行しないと、再命令フェッチが行われてからその命令に対する完了報告がＣＳＥ２０に行われるまでの間に、ＲＳＢＲエントリ内の誤った情報に基づく命令フェッチが行われる可能性がある。そのため再命令フェッチが必要であると判断されると、そのエントリより後にある全てのエントリは直ちに解放される。
【０１２０】
また命令実行部にも本来実行されてはならない命令が入っている可能性があり、これもクリアされなければならない。再命令フェッチの処理により、正しい命令列の命令バッファ１６のフェッチが開始されると、再命令フェッチを指示したエントリのＲＥＩＦＣＨ ＤＯＮＥビットが“１”にセットされる。このビットの値は、ＣＳＥ２０への完了報告にあたって、フラッシュＲＳ信号生成のためにＣＳＥ２０に送られ、この信号の値が“１”である場合には命令実行部のクリアが行われる。
【０１２１】
次に、ＲＳＢＲ２３のエントリに対応する分岐命令の処理が終了した時点で、ＣＳＥ２０に対して完了報告を行う完了報告処理部の動作について図１１を用いて説明する。同図において、ＣＳＥ２０に対して完了報告として完了報告処理部５１からコンプリート信号が出力されるのに加えて、再命令フェッチフラッシュ信号、テークン信号、およびＩＩＤがＣＳＥ２０に与えられるコンプリート信号は分岐処理の完了を示し、再命令フェッチフラッシュ信号はＣＳＥ２０への完了報告に際して命令実行部のクリアの処理が必要となっていることを示す。テークン信号はＲＳＢＲのエントリのテークンビットそのものであり、分岐の成立／不成立の確定結果を示す。ＩＩＤはどの命令に対する完了報告であるかを示し、ＣＳＥ２０とＲＳＢＲ２３のエントリに１対１に対応するＩＩＤがつけられている。
【０１２２】
以下の▲１▼〜▲６▼の場合に分岐処理が完了したと判定され、コンプリート信号がＨとなる。
【０１２３】
▲１▼  分岐成立の予測が当たり、正しいターゲット命令が命令バッファ１６にフェッチされている場合。
【０１２４】
▲２▼  分岐不成立の予測が当たった場合。
【０１２５】
▲３▼  再命令フェッチの処理が完了した場合。
【０１２６】
▲４▼  ファントムブランチであることが判明した場合。
【０１２７】
▲５▼  ＥＸ命令の処理が完了した場合。
【０１２８】
▲６▼  ヘッジフェッチが行われ、分岐の成立が確定した場合。
【０１２９】
再命令フェッチフラッシュ信号は、分岐処理完了時のＲＳＢＲエントリのＲＥＩＦＣＨ ＤＯＮＥビットの値そのものである。再命令フェッチが行われるか、ヘッジフェッチが行われた命令に対して分岐が成立した場合のいずれかの場合には命令実行部のクリアが必要となり、このビットの値が“１”にセットされる。
【０１３０】
すなわち、ヘッジフェッチが行われた命令に対する分岐が成立した場合には、命令バッファ１６には必要な命令列がすでに格納されており、再命令フェッチは不必要である。しかしながら命令実行部には実行されてはならない命令が入っている可能性があり、命令実行部のクリアが必要となる。
【０１３１】
プログラム本来の実行順序を守るために、完了報告はインオーダで行われる。ＲＳＢＲアウトポインタによって指される命令が、例えば不成立であることが確定しない限り、ＲＳＢＲアウトポインタ＋１が指すエントリに対応する完了報告は行われず、ＲＳＢＲアウトポインタとＲＳＢＲアウトポインタ＋１が指す分岐命令が、例えば共に不成立であることが確定しない限り、ＲＳＢＲアウトポインタ＋２によって指されるエントリに対する完了報告は行われない。
【０１３２】
次にブランチヒストリの格納内容更新について図１２を用いて説明する。同図において、図１１で説明した完了報告指示部５１からのコンプリート信号を受けて、ブランチヒストリ３９に更新を指示するブランチヒストリ更新指示部５２がＲＳＢＲ２３の内部に備えられている。ブランチヒストリ更新指示部５２からブランチヒストリ３９に対して、ＢＲＨＩＳテークン、ＢＲＨＩＳノットテークン、およびＢＲＨＩＳファントムの３つの信号がブランチヒストリに送られる。この３つのビットが全て“０”となっている場合には、後述するようにブランチヒストリの更新は行われない。この３ビットの他に、各種の信号がＲＳＢＲ２３のエントリからブランチヒストリ３９に送られ、これらの信号に基づいてブランチヒストリ３９の格納内容の更新が行われる。
【０１３３】
以上において、データの流れを中心としてＲＳＢＲの動作について説明したが、以後ＲＳＢＲの具体的な構成例について更に説明する。
【０１３４】
図１３はＲＳＢＲの具体的な構成例を示すブロック図である。同図において、ＲＳＢＲのデータが格納されるエントリ６０としてエントリ１〜エントリ８がある。またデコーダインタフェース６１の内部に、エントリに分岐命令、または分岐に関する処理についてのデータをロードするためのデータロード制御部６２、次にどのエントリにデータをロードすべきかを指定するインポインタ６３、分岐命令の条件コードを変更する先行命令の実行が終了していない場合、すなわちペンディングとなっている条件コードに関する処理を実行するペンディング条件コード処理部６４を備えている。
【０１３５】
更にＲＳＢＲの構成要素としては、エフェクティブアドレスジェネレータＥＡＧ２６からの信号を受け取るＥＡＧインタフェース６５、演算部から演算実行が終了した命令の識別子、すなわち条件コードを変更する先行命令のＩＩＤを受け取るためのＥＵＣＣインタフェース６６、および次にどのエントリの完了報告を行って、そのエントリを解放すべきかを指定するアウトポインタ６７を備えている。
【０１３６】
更にＲＳＢＲは、図８で説明した分岐確定処理部４１、図９で説明した再命令フェッチ処理部４６、図１１で説明した完了報告処理部５１、および図１２で説明したブランチヒストリ更新指示部５２を備えている。
【０１３７】
図１４は、図２のコミットスタックエントリ（ＣＳＥ）２０の内部で、本発明に直接関連する部分を示したＣＳＥの構成ブロック図である。同図において、再命令フェッチフラッシュ処理部６９は、例えばブランチヒストリ３９にヒットしたにもかかわらず、分岐が不成立であり、再命令フェッチが行われた場合に命令実行部などのクリアを行うためのものである。その動作については更に後述する。
【０１３８】
図１５はデータロード制御部６２の一部としてのロードデータ決定部の構成例を、図１６は図１５と関連して図２のインストラクションワードレジスタ（ＩＷＲ）１７，デコーダ１８の構成例を示す。本実施形態においては命令バッファ１６に与えられた命令は１サイクルで３つずづ取り出されてＩＷＲ１７を構成する３つのレジスタＩＷＲ０，ＩＷＲ１，ＩＷＲ２にロードされ、この３つの命令はそれぞれデコーダ１８を構成する３つのデコーダ７１ａ，７１ｂ，７１ｃでデコードされる。
【０１３９】
最初の命令のオペレーションコード（オペコード）をＤ０、次の命令のオペコードをＤ１、最後の命令のオペコードをＤ２とする。それぞれの命令のオペレーションコードがデコードされ、分岐命令と判別された時に例えばデコーダ７１ａの出力はＨとなり、Ｄ０に対応する命令のデコード終了時のリリース信号と共にアンドゲート７２ａに与えられることによって、Ｄ０から分岐に関係するデータをＲＳＢＲエントリにロードすべきことを示すＤ０−ＬＯＡＤ−ＲＳＢＲ信号が出力される。
【０１４０】
図１７は、データロード制御部６２の一部としてのエントリ毎のロードデータ指定部の構成例を示す。同図の回路は、ＲＳＢＲのｎ番目のエントリに、Ｄ０，Ｄ１、およびＤ２のいずれの命令から、分岐に関するデータがロードされるべきかを指定するものである。
【０１４１】
図１７において、例えば図１５のロードデータ決定部から、Ｄ０に対応してエントリを作成すべきことを示すＤ０−ＬＯＡＤ−ＲＳＢＲ信号がアンドゲート７４に入力されると、その時点でＲＳＢＲのインポインタがｎ番目のエントリを指している場合にはインポインタＥＱ−ｎ信号がＨとなり、アンドゲート７４の出力がＨとなって、Ｄ０からのデータをｎ番目のエントリにロードすべきことを示すＬＯＡＤ−ＲＳＢＲｎ−ＦＲＯＭ−Ｄ０信号がＨとなる。また同時にエントリのバリッドビットをオンにするための信号、すなわちオアゲート８７の出力がＨとなる。
【０１４２】
次に、Ｄ０に対応してエントリを作成する必要がなく、Ｄ１に対応してエントリを作成する必要がある場合には、３つの入力信号のうちＤ１−ＬＯＡＤ−ＲＳＢＲ信号がＨとなり、アンドゲート７５の出力がＨとなって、アンドゲート７６に入力される。この時アンドゲート７６に対しては、アンドゲート７４に対すると同様にインポインタＥＱ−ｎ信号が入力されており、これがＨ、すなわちインポインタがｎ番目のエントリを指していれば、アンドゲート７６、オアゲート７７、および８７の出力はＨとなって、オアゲート７７からはＤ１からのデータをｎ番目のエントリにロードすべきことを示す信号がＨとして出力される。
【０１４３】
同様にＤ０，Ｄ１のデコード結果に対してはエントリを作成する必要がなく、Ｄ２に対してのみエントリを作成すべき場合には、アンドゲート７８ａ，８３、オアゲート８５，８７の出力がＨとなり、オアゲート８５からはデコード結果Ｄ２からｎ番目のエントリにデータをロードすべきことを示す信号がＨとして出力される。
【０１４４】
次にＤ０とＤ１の２つに対応してエントリを作成する必要がある場合には、まずアンドゲート７８ｂの出力がＨとなり、その出力はアンドゲート７９に入力される。アンドゲート７９のもう一方の入力にはインポインタＥＱ−ｎ−１信号が入力されている。この信号は、インポインタがｎ−１番目のエントリを指している時にＨとなる信号である。
【０１４５】
すなわち、ここではＤ０からのデータはｎ−１番目のエントリ、またＤ１からのデータはｎ番目のエントリに格納されることになる。図１７はｎ番目のエントリに格納されるデータを指定するものであり、インポインタがｎ−１番目のエントリを指している時に、ｎ番目のエントリにはＤ１からのデータが格納される。
【０１４６】
そこでインポインタがｎ−１番目を指している時にはアンドゲート７９、オアゲート７７，８７の出力はＨとなり、オアゲート７７からＤ１からのデータをｎ番目のエントリに格納すべき信号がＨして出力される。
【０１４７】
同様にＤ０とＤ２、またはＤ１とＤ２からのデータに対してそれぞれエントリが、すなわちエントリが２つ作成されるべき場合には、アンドゲート８０ａまたは８０ｂの出力がＨとなり、オアゲート８１、アンドゲート８４、オアゲート８５，８７の出力がＨとなって、オアゲート８５からｎ番目のエントリにＤ２からのデータを格納すべきことを示す信号がＨとして出力される。この時Ｄ０、またはＤ１からのデータはｎ−１番目のエントリに格納されることになる。
【０１４８】
最後にＤ０〜Ｄ２の３つの命令に対応して全てエントリを作成すべき場合には、アンドゲート８２の出力がＨとなる。この出力はアンドゲート８６に入力されている。アンドゲート８６のもう一方の入力端子にはインポインタＥＱ−ｎ−２信号が入力されており、この信号はインポインタがｎ−２番目のエントリを指す時にＨとなる。すなわち、ここではＤ２からのデータがｎ番目のエントリ、Ｄ１からのデータがｎ−１番目のエントリ、Ｄ０からのデータはｎ−２番目のエントリに格納されるべきことになり、図１７の回路からはオアゲート８５の出力として、Ｄ２からのデータをｎ番目のエントリに格納すべきことを示す信号がＨとして出力される。
【０１４９】
図１８はＲＳＢＲのインポインタ６３の構成例を示す。前述のように、本実施形態においては３つの命令を一度にデコードするため、その中に例えば分岐命令が２つ含まれる場合には、インポインタの値を２つ進ませる必要がある。ポインタの出力は３ビットのＤ−ＦＦ１０１の出力であり、０００，００１，・・・，１１１、すなわち０〜７をカウントするものである。セレクタ９７を介して、一度にデコードされる３つの命令のうちで分岐命令がいくつ含まれるかに応じて、現在のカウンタ１０１の出力、＋１、＋２，＋３のそれぞれのインクリメンタ９８，９９，１００の出力のいずれかをカウンタ１０１に入力させることによって、インポインタの出力を得ることができる。
【０１５０】
３つの命令のオペコードＤ０，Ｄ１、およびＤ２のそれぞれのデコード結果に対応して、ＲＳＢＲにエントリを作成すべきことを指示する３つの信号の入力がいずれもＬである場合には、インバータ９０ａ〜９０ｃの出力は全てＨとなり、アンドゲート９１の出力によって、セレクタ９７は現在のカウンタ１０１の出力をそのままに保たせるように（０を加算する）動作を行う。
【０１５１】
３つのエントリ作成指示信号のうちいずれか１つがＨである場合には、オアゲート９３の出力によってインクリメンタ９８の出力がセレクタ９７によって選択され、カウンタ１０１の出力は“１”だけインクリメントされる。
【０１５２】
エントリ作成指示信号のうち２つがＨである場合は、オアゲート９５の出力によってインクリメンタ９９の出力が選択され、カウンタ１０１の出力は“２”だけインクリメントされる。
【０１５３】
更に３つの作成指示信号が全てＨである場合には、アンドゲート９６の出力によりインクリメンタ１００の出力が選択され、カウンタ１０１の出力は“３”インクリメントされる。
【０１５４】
図１９はＲＳＢＲのアウトポインタ６７の構成例である。同図においてセレクタ１０５、インクリメンタ１０６〜１０８、カウンタ１０９は図１８のインポインタにおけると同様の動作を行うものである。
【０１５５】
しかしながら、図１０で説明したようにＲＳＢＲのエントリの解放はインオーダで行う必要がある。本実施形態においては、インポインタに対すると同様に、アウトポインタの更新時にも３つのエントリに対して同時にエントリの解放ができるか否かを調べるものとする。なおこの一度に調べるエントリの個数は、同時にデコードされる命令の数としての“３”とは無関係であり、任意の数に設定することが当然可能である。
【０１５６】
図１９において、現在のアウトポインタの指す値がトップとされ、次の値がセカンド、更に次の値がサードとされる。例えばアウトポインタの指す値が５であれば、トップが５、セカンドは６、サードは７である。
【０１５７】
ここで前述のように、ＲＳＢＲのエントリーの解放は、インオーダで最大３個まで同時に行えるようになっており、セカンドのエントリーを解放する際には必ず同時にトップのエントリーを解放する事が条件となっており、またサードのエントリーを解放する際には必ず同時にトップとセカンドの両方のエントリーを解放する事が条件となっている。
【０１５８】
すなわち、ＲＳＢＲのエントリーの解放は、
・いずれのエントリーも解放しない。
【０１５９】
・トップのエントリーのみの解放。
【０１６０】
・トップとセカンドの両方のエントリーの解放。
【０１６１】
・トップとセカンドとサードの３個のエントリーの解放。
の４つの場合がある。
【０１６２】
いずれの場合も、解放されなかったエントリーのうち、最も実行順序の古いエントリーが次のサイクルではトップのエントリーとなる。
【０１６３】
具体的には図１８でアウトポインタの動作を説明する。
【０１６４】
まず３つのエントリに対応するコンプリート信号、すなわち分岐に対する処理が全て終了してエントリを解放すべきことを指示するコンプリート信号の値がすべてＬである場合には、セレクタ１０５への選択制御信号のうちインバータ１０３ａの出力のみがＨとなり、セレクタ１０５は“０”の加算を示す信号をカウンタ１０９に出力し、カウンタ１０９の出力はそのままの値に保たれる。
【０１６５】
トップのエントリに対するコンプリート信号のみがＨとなった場合には、アンドゲート１０４ａの出力がＨとなり、インクリメンタ１０６の出力が選択され、カウンタ１０９の出力は“１”だけインクリメントされる。
【０１６６】
次にトップとセカンドのエントリのそれぞれに対応するコンプリート信号が共にＨとなった場合には、アンドゲート１０４ｂの出力がＨとなり、インクリメンタ１０７の出力がセレクタ１０５によって選択されて、カウンタ１０９の出力は“２”だけインクリメントされる。
【０１６７】
更にトップ、セカンド、サードの３つのエントリに対応するコンプリート信号がいずれもＨとなった場合には、サードのエントリに対応するコンプリート信号がそのまま選択制御信号としてセレクタ１０５に与えられ、インクリメンタ１０８の出力が選択されて、カウンタ１０９の出力は“３”インクリメントされる。
【０１６８】
図２０は図１３のＥＡＧインタフェース６５の構成例である。同図においては、図２のエフェクティブアドレスジェネレータ（ＥＡＧ）２６によって生成された分岐命令に対する正しい分岐先アドレスと、ブランチヒストリ３９から得られたＴＩＡＲ、すなわちターゲットアドレスとの比較が行われる。
【０１６９】
まず比較器１１１によって、ＥＡＧ２６によって生成されたアドレスに対応する命令の識別子ＥＡＧ ＩＩＤと、ＲＳＢＲの０〜７の各エントリに格納されている命令の識別子ＩＩＤとが比較され、その比較によってどのエントリに対応するターゲットアドレスが生成されたかが判明する。
【０１７０】
その結果に従ってセレクタ１１２によって各エントリに格納されているＴＩＡＲのうちの１つが選択され、比較器１１３によってＥＡＧ２６によって生成されたアドレスと比較されて、一致すると判定された時に、比較器１１３の出力によってエントリ内のＴＩＡＲ−ＭＡＴＣＨビットが“１”にセットされる。また比較器１１１の出力によってエントリ内のターゲットアドレスバリッドビットの値が“１”にセットされる。なお図２０において例えばＲＳＢＲ０ ＩＩＤはＲＳＢＲ２３のエントリ０に格納されているＩＩＤを意味する。
【０１７１】
図２１は図１３のペンディング条件コード処理部６４の構成例を示し、また図２２は、このペンディング条件コード処理部の動作を説明するための、命令列の例を示す。これらの図を用いて、ペンディング条件コード処理部６４による処理について説明する。
【０１７２】
前述のように、１つのサイクルで３つの命令が一度にデコードされるものとする。図２２において、まず最初の３つの命令、すなわちロード命令、加算命令、およびストア命令がそれぞれＤ０，Ｄ１，Ｄ２に対応してデコードされる。これらの３つの命令のうち、命令識別子ＩＩＤ＝１の加算命令は、後続のＩＩＤ＝３の分岐命令（ＢＣ命令）に対する条件コードの内容を決定するものであり、この命令が終了するまでは、後続のＢＣ命令の分岐の確定を行うことができない。
【０１７３】
この３つの命令がデコードされるサイクルをサイクルｉとする。Ｄ１に対応するＩＩＤ＝１の加算命令のデコード結果に対応して、そのＩＩＤをペンディングコンディションコードテーブル（ＰＣＣＴ）−ＩＩＤ１１９にセットするためのＤ１−ＣＣＳＴ信号が、Ｄ１に対するリリース信号と共にアンドゲート１１５ｂに与えられることによって、このアンドゲートの出力はＨとなり、その出力はアンドゲート１１７に入力される。アンドゲート１１７のもう一方の入力、すなわちアンドゲート１１５ｃの反転出力もＨであり、アンドゲート１１７の出力によってセレクタ１１８への入力のうちＩＩＤ１、すなわち、加算命令に対応するＩＩＤとしての“１”が選択され、この値が例えば４ビットのＦＦ（００００から１１１１、すなわち０から１５までの値を格納）によって構成されるＰＣＣＴ−ＩＩＤ１１９にセットされる。このセットのためのクロック信号は、アンドゲート１１５ｂの出力がオアゲート１２０を介して与えられることによって供給される。またオアゲート１２０の出力は、ＰＣＣＴ−ＶＡＬ１２１を構成するセットリセットＦＦをセットする。
【０１７４】
次のサイクルｉ＋１では、ＩＩＤが３〜５の分岐命令、ロード命令、および減算命令がそれぞれＤ０，Ｄ１，Ｄ２に対応してデコードされる。このサイクルでは、すでにＰＣＣＴ−ＶＡＬの値はＨ、ＰＣＣＴ−ＩＩＤ１１９の値は“１”となっており、一方後述するようにナンドゲート１２５の出力はＨとなっているため、アンドゲート１２２の出力はＨとなり、バッファ１２３ａの出力としてのＤ０ペンディング信号はＨとなり、またバッファ１２６の出力としてのＤ０−ＣＣＩＩＤの値は“１”となる。
【０１７５】
そこでＤ０に対応するＩＩＤ＝３の分岐命令に対応してＲＳＢＲ上に作成されるエントリに対しては、ペンディングビットの値が“１”とされ、ＣＣＩＩＤの値として“１”が格納される。この時オアゲート１２３ｂ，１２３ｃの出力としてのＤ１ペンディング、Ｄ２ペンディングの信号もＨとなるが、対応するロード命令、および減算命令は分岐命令でないため、これらの信号は意味を持たず、参照されることはない。
【０１７６】
サイクルｉ＋１における３つ目の命令としての減算命令も条件コードをセットするものである。このためＤ２−ＣＣＳＴ信号がＨとなり、リリース信号と共にアンドゲート１１５ｃに与えられ、セレクタ１１８によってＩＩＤ２、すなわち減算命令に対応するＩＩＤ＝５がＰＣＣＴ−ＩＩＤ１１９に格納される。そしてＰＣＣＴ−ＶＡＬ１２１は再びセットされる。
【０１７７】
サイクルｉ＋２では、次の３つの命令としてのＩＩＤ＝６〜８に対応する比較命令、分岐命令、および比較命令がそれぞれＤ０，Ｄ１，Ｄ２に対応してデコードされる。Ｄ１に対応するＩＩＤ＝７の分岐命令の条件コードを変更する先行命令はＤ０に対応するＩＩＤ＝６の比較命令であり、この分岐命令に対するＣＣＩＩＤの値は“６”である。
【０１７８】
このため、まずＤ０に対応して条件コードをセットするＤ０−ＣＣＳＴ信号がＨとなり、リリース信号と共にアンドゲート１１５ａに与えられることによって、その出力はＨとなる。一方アンドゲート１１５ｂ，１１５ｃの反転出力は共にＨであり、アンドゲート１１６の出力がＨとなることによって、セレクタ１１８によりＩＩＤ０、すなわちＩＩＤ＝６が選択され、この値がＰＣＣＴ−ＩＩＤ１１９に上書きされる。
【０１７９】
この時、同時にＤ１に対応する分岐命令によって、ＲＳＢＲ上にエントリが作成されるが、そのエントリに格納されるペンディングビットの値としてはオアゲート１２３ｂの出力であるＤ１ペンディング信号の値としてのＨ、ＣＣＩＩＤの値としてはＩＩＤ０の値、すなわちＩＩＤ＝６がセレクタ１２７を介してＤ１−ＣＣＩＩＤとして出力されており、ＲＳＢＲのエントリーのペンディングビットの値は‘１’ＣＣＩＩＤの値は‘６’となる。
【０１８０】
次に図２１に関してＰＣＣＴ−ＶＡＬ１２１を構成するセットリセットＦＦのリセットについて説明する。このＦＦ１２１は、ＰＣＣＴ−ＩＩＤ１１９に格納されているＩＩＤが有効、すなわち条件コードを変更する、実行を開始してまだ完了していない命令が存在する事を示すものである。条件コードを変更する命令の実行が終了した時点で、この命令の識別子を保持する必要性はなくなる。そこで先行命令の終了時点でＦＦ１２１はリセットされる。このＦＦの反転リセット入力端子にＬが入力されることによってリセットが行われるが、このリセット信号はナンドゲート１２５の出力として与えられる。
【０１８１】
ナンドゲート１２５には、先行命令の終了を示すコミット信号が有効であることを示すコミットバリッド信号と、比較器１２４の出力とが入力される。比較器１２４は、実行が終了した命令の識別子、すなわちコミットＩＩＤと、ＰＣＣＴ−ＩＩＤ１１９に格納されているＩＩＤとを比較するものであり、この２つの命令が一致し、かつコミットバリッド信号がＨの時にナンドゲート１２５はＬを出力し、ＦＦ１２１はリセットされる。
【０１８２】
再度図２１において、同一サイクルでデコードされる３つの命令のうちに、分岐命令と、その分岐命令の条件コードを変更する先行命令とが含まれている場合の、エントリに格納すべきＣＣＩＩＤの出力について説明する。
【０１８３】
これは３つの命令のうちでＤ１、またはＤ２が分岐命令に対応するデコード結果であり、Ｄ０またはＤ１がその条件コードを変更する先行命令に対応するデコード結果であることを意味する。例えばＤ１が分岐命令、Ｄ０がその先行命令のデコード結果であるとすれば、Ｄ１に対応して作成されるエントリにはＩＩＤ０が格納されなければならない。これを選択するのはセレクタ１２７である。セレクタ１２７は、Ｄ０に対する条件コードセット信号とリリース信号とがＨの時に、アンドゲート１１５ａの出力がＨなることにより、そのサイクルにおけるＩＩＤ０を選択して、Ｄ１−ＣＣＩＩＤの値として出力することになる。
【０１８４】
次にデコード結果Ｄ２が分岐命令、Ｄ０、またはＤ１がその先行命令に対応するデコード結果である時には、セレクタ１２８によってＩＩＤ０、またはＩＩＤ１が選択されて、Ｄ２−ＣＣＩＩＤとして出力される。デコード結果Ｄ１に対応する条件コードセット信号、およびリリース信号がＨである時に、アンドゲート１１５ｂの出力がＨとなることによってＩＩＤ１の選択が行われる。これに対してデコード結果Ｄ０に対する条件コードセット信号、およびリリース信号がＨとなった時、アンドゲート１１５ａの出力がＨとなり、この時アンドゲート１１５ｂの出力がＬであれば、アンドゲート１３０ｂの出力がＨとなることによって、ＩＩＤ０が選択される。
【０１８５】
図２３は図１３のＥＵＣＣインタフェース６６の構成例である。同図においては、ＲＳＢＲの各エントリに格納されている分岐命令の条件コードを更新する先行命令の識別子、すなわちＣＣＩＩＤと、演算器側で演算が終了した命令の識別子を示すＥＵ−ＩＩＤとの比較が比較器１３２ａ〜１３２ｈによって行われ、いずれか１つから比較結果の一致を示すＨが出力されると、その出力は演算結果が有効であることを示すＥＵ−バリッド信号と共にアンドゲート１３３ａ〜１３３ｈのいずれかに入力され、そのアンドゲートの出力はそのエントリに対応する条件コードが生成されたことを示すＥＵジェネレートペンディングＣＣ信号として分岐確定処理部４１に与えられる。
【０１８６】
図２４は図１３の分岐確定処理部４１の構成例である。同図においては、分岐の確定処理と分岐の成立／不成立の判定処理が行われる。
【０１８７】
分岐の確定を示すリゾルブド信号は、オアゲート１３７の出力として与えられる。このオアゲートの出力はアンドゲート１３６ａ、１３６ｂ、１３６ｃのいずれかの出力がＨとなった時にＨとなる。
【０１８８】
分岐の確定、および成立／不成立の判定は当然エントリ毎に行われる。まずアンドゲート１３６ａの出力がＨとなるために必要な条件として次の３つがある。第１の条件はアンドゲート１３５の出力がＨとなることであり、これはそのエントリがバリッドであり、また未確定であることである。第２の条件はペンディングビットがオフ、すなわちＤサイクルで命令デコード時に、実行途中の条件コード変更命令がなくて、条件コードが確定していること、また第３の条件はそのエントリに対応する分岐命令がブランチオンコンディション命令であることである。これらの３つの条件が全て成立した時に、そのエントリに対応する分岐は確定と判定される。
【０１８９】
次にアンドゲート１３６ｂの出力がＨとなる条件は、第１の条件はペンディングビットがオン、すなわち命令デコード時に先行する実行途中の条件コード変更命令があること、第２にアンドゲート１３５の出力がＨであること、第３に対応する命令がブランチオンコンディション命令であること、第４に前記の条件コード変更命令が実行されてペンディングとなっていた条件コードが生成されたこと、すなわち図２３で対応するエントリに対するジェネレートペンディングＣＣ信号がＨとなったことである。  アンドゲート１３６ｃの出力がＨとなるのはＢＣＴ，ＢＸＨ、またはＢＸＬＥ命令に対応して、その分岐の成立／不成立の条件が生成されたことが演算ユニットからメッセージとして伝えられた時である。すなわちその入力はアンドゲート１３５の出力、ＲＳＢＲのエントリのＢＣＴ，ＢＸＨ、またはＢＸＬＥ命令であることを示すフィールドの値、演算ユニットから分岐の確定のための条件がメッセージとして到着したことを示すＥＵメッセージジェネレートコンディション信号であり、これらが全てＨとなった時点でアンドゲート１３６ｃの出力がＨとなる。
【０１９０】
次に分岐の成立／不成立はオアゲート１４０の出力として与えられ、分岐が成立した時、その出力はＨとなる。
【０１９１】
オアゲート１４０の出力がＨとなるのは、３つのアンドゲート１３９ａ〜１３９ｃのいずれかの出力がＨとなる時である。
【０１９２】
アンドゲート１３９ａの出力は、アンドゲート１３６ｃの出力とＥＵ−ＭＳＧ信号とが共にＨとなった時にＨとなり、オアゲート１４０から分岐成立を示すテークン信号が出力される。ここでＥＵ−ＭＳＧ信号は前述のＢＣＴ，ＢＸＨ、またはＢＸＬＥ命令に対応して演算ユニットから送られるメッセージの実際のデータであり、例えばそのデータが“１”となることによって、オアゲート１４０から分岐成立を示すテークン信号が出力されることになる。
【０１９３】
アンドゲート１３９ｂは、前述のようにデコードサイクルにおいてすでに条件コードが確定している場合であって、すでに確定して、ＩＵＣＣに設定されている条件コードとマスクフィールドの値とが一致した時にＨを出力する。セレクタ１３８ａによってオペレーションコードの８ビット目から１１ビット目、すなわちマスクフィールドの各ビットと、命令制御ユニットから送られた条件コードＩＵＣＣの各ビットとが比較され、対応するビットが一致した時にセレクタ１３８ａからＨが出力され、またアンドゲート１３６ａからブランチオンコンディション命令に対する分岐が確定したことを示すＨが出力されることにより、アンドゲート１３９ｂの出力はＨとなる。
【０１９４】
アンドゲート１３９ｃの出力は、条件コードを変更する先行命令の演算が実行されて条件コードが生成され、かつマスクフィールドの値と演算器で生成された条件コードとが一致した時にＨとなる。すなわちセレクタ１３８ｂによってマスクフィールドの４ビットと演算部から送られた演算終了結果としての条件コードの値とが比較され、対応するビットが一致した時にＨが出力され、アンドゲート１３６ｂの出力、すなわち条件コードが生成されて、分岐が確定したことを示す出力と共にアンドゲート１３９ｃに与えられることにより、その出力はＨとなる。
【０１９５】
図２５は、図１３の再命令フェッチ処理部４６の一部としての、再命令フェッチ条件生成部の構成例である。同図において再命令フェッチを指示する信号はオアゲート１４９の出力として与えられる。その出力がＨとなるのは６つのアンドゲート１４１，１４３，１４４，１４５，１４７、または１４８のいずれかの出力がＨとなる時である。
【０１９６】
まずアンドゲート１４１の出力がＨとなるのは、分岐の成立が予測されたにもかかわらず実際には不成立となった時であり、その条件はそのエントリに対する分岐が確定し、エントリがバリッドであり、ターゲットアドレスがバリッドであり、再命令フェッチが行われておらず、ブランチヒストリにヒットしており、そのエントリがテークンでない、すなわち不成立であることである。エントリが不成立であることは、インバータ１４２の出力がＨとなることによって与えられる。
【０１９７】
アンドゲート１４３の出力がＨとなるのは、分岐が予測され、分岐自体は成立したにもかかわらず、ターゲットアドレスがＥＡＧ２６によって計算された正しい値と異なる場合、すなわちターゲットアドレスミスマッチの場合である。アンドゲート１４３に対する入力として、ゲート１４１に対する入力と異なる点は、エントリがテークンであることと、ＴＩＡＲ−ＭＡＴＣＨビットがＬ、すなわちミスマッチであることを示す信号が追加されていることである。
【０１９８】
アンドゲート１４４の出力がＨとなるのは、分岐成立が予測され、実際に成立したにもかかわらず、分岐先の命令列が未だに命令バッファ１６に取り入れられていない、すなわちブランチヒストリターゲットアクティブがＬとなっている場合である。アンドゲート１４３への入力と比較すると、ターゲットアドレスミスマッチを示すＴＩＡＲ−ＭＡＴＣＨ信号（Ｌ）に代わって、ブランチヒストリターゲットアクティブ信号としてのＬが入力されている点が異なっている。
【０１９９】
アンドゲート１４５の出力がＨとなるのは、分岐が成立すると予測されていない、すなわち分岐が不成立と予測されていたにもかかわらず、実際に分岐成立となった場合である。例えばアンドゲート１４１への入力と比較すると、分岐成立を示すテークン信号がインバータを介することなく、そのまま入力されている点と、ブランチヒストリヒットを示す信号がインバータ１４６によって反転されて入力されている点と、ヘッジターゲットアクティブ信号が、ヘッジフェッチがなされていないことを示すＬとして入力されている点が異なっている。
【０２００】
アンドゲート１４７の出力は、ＥＸ命令に対応してターゲット命令をフェッチする場合にＨとなる。分岐が確定し、エントリがバリッドであり、ファントムバリッド信号とＥＸ信号が共にＨである時に、アンドゲート１４７の出力はＨとなる。
【０２０１】
アンドゲート１４８の出力は、ＥＸ命令に対応してターゲット命令から元の位置の次の命令に戻るための命令フェッチが行われる場合にＨとなる。入力としてファントムバリッド、ＥＸ，再命令フェッチダンの信号が全てＨ、ヘッジターゲットアクティブ信号がＬの時に、アンドゲート１４８の出力はＨとなる。
【０２０２】
図２６は、再命令フェッチ処理部４６の一部としての、フェッチアドレス選択部の構成例である。同図において再命令フェッチアドレスはセレクタ１５５の出力として与えられるが、セレクタ１５５は他のフェッチ要求に対応するフェッチアドレスと、本発明に対応する再命令フェッチアドレスとを選択するものである。本発明の再命令フェッチアドレスは、セレクタ１５４の出力として与えられる。このセレクタ１５４はトップ、セカンド、およびサードの３つのエントリに対応するフェッチアドレスを選択するものである。ここで３つのエントリに対応する再命令フェッチアドレスを選択することは、前述のように３つの命令を一度にデコードすることや、インポインタ、アウトポインタの更新を３つのエントリ単位で調べることとは無関係であり、その数を任意に設定できることは当然である。
【０２０３】
トップエントリに対応する再命令フェッチアドレスは、セレクタ１５２ａの出力として与えられる。セレクタ１５２ａは、加算器１５１ａの出力、またはエントリに格納されているターゲットアドレス、すなわちＴＩＡＲのいずれかを選択するものである。加算器１５１ａは、図３のＩＡＲ、すなわちＲＳＢＲのエントリーに格納されているその分岐命令、自分の命令アドレスと分岐命令自身の命令語の長さＩＬＣとの加算を行うものであり、その加算結果は分岐不成立の場合の分岐命令の次の命令のアドレスを与える。
【０２０４】
セレクタ１５２ａは、オアゲート１５３ａの出力がＨとなった時にＴＩＡＲを選択し、Ｌの時に加算器１５１ａの出力を選択する。オアゲート１５３ａの出力がＨとなるのは、その入力として分岐が成立したことを示すテークン信号、またはＥＸ命令に対応して、ターゲット命令のフェッチが行われるべきことを示す信号が入力した時である。
【０２０５】
セカンドエントリに対応する再命令フェッチアドレスはセレクタ１５２ｂ、サードエントリに対応するアドレスはセレクタ１５２ｃの出力として与えられる。その動作はトップエントリに対応するものと同じである。
【０２０６】
図２７は、図１３の完了報告処理部５１の一部としての、ＲＳＢＲのエントリに対応する分岐処理完了条件検出部の説明図である。同図において、オアゲート１６７の出力がＨとなることによってｎ番目のエントリに対応する分岐処理が完了したことが示される。
【０２０７】
オアゲート１６７の出力がＨとなるのは、６つのアンドゲート１６１〜１６６のいずれかの出力がＨとなる時である。アンドゲート１６１の出力がＨとなるのは、分岐が予測され、しかもその分岐が成立した時である。アンドゲート１６１への入力は分岐の成立を示すテークン、ブランチヒストリヒット信号、ターゲットアドレスに対するＴＩＡＲ−ＭＡＴＣＨ信号、ブランチヒストリターゲットアクティブ信号、ターゲットアドレスバリッド信号、およびエントリに対するバリッド信号である。これらの６つの信号の全てがＨとなった時点で、アンドゲート１６１の出力はＨとなる。
【０２０８】
アンドゲート１６２の出力は、分岐が予測されず、しかも、分岐が成立しなかった場合にＨとなる。その条件は５つの入力のうち、ターゲットアドレスバリッド信号、エントリに対するバリッド信号、および分岐確定を示すリゾルブドの信号がＨであり、また分岐成立を示すテークン信号、およびブランチヒストリヒット信号の２つが共にＬである時である。
【０２０９】
アンドゲート１６３の出力は、再命令フェッチが行われた時にＨとなる。その条件は再命令フェッチダン、およびエントリに対するバリッド信号の２つが共にＨとなることである。
【０２１０】
アンドゲート１６４の出力は、ファントムブランチであることが判明した時にＨとなる。その条件はファントムバリッド信号がＨであり、ＥＸ信号およびショート再命令フェッチ信号（ショート再命令フェッチとは、エントリに格納されているアドレスを使って分岐とは別に命令再フェッチを行うものであり、そのフェッチが行われている状態を示すショート再命令フェッチ信号がＨである時には、アンドゲート１６４の出力はＬとなる。）の２つが共にＬであることである。ここでＥＸ信号がＬという条件は、ＥＸ命令に対応してファントムバリッド信号がＨとされているためであり、ＥＸ命令の場合との混同を避けるためである。
【０２１１】
アンドゲート１６５の出力は、ＥＸ命令に対してＨとなる。その条件は再命令フェッチダン、ＥＸ、ヘッジターゲットアクティブ、およびＥＸ−ＯＲ−ＴＧＲ信号（ＥＸ命令の実行の時には、ターゲット命令のオペランドに対応して修飾が行われる。この信号は、その修飾がかけられて、ＥＸ命令が実行された時にＨとなる。）の４つの信号がいずれもＨとなることである。ここでヘッジターゲットアクティブ信号はＥＸ命令に対しも共通に用いられている。
【０２１２】
アンドゲート１６６の出力はヘッジフェッチが成功した時にＨとなる。その条件はヘッジターゲットアクティブ、バリッド、リゾルブド、およびテークンの４つの信号がいずれもＨであり、ブランチヒストリヒット信号がＬであることである。
【０２１３】
図２８は、図１３の完了報告処理部５１の一部としての、プログラムステータスワードのインストラクションアドレスレジスタ更新処理部の構成例を示す。なお図２８はコミットスタックエントリ（ＣＳＥ）２０の一部を含む。同図の回路は、基本的にトップからサードまでの３つのエントリに対応するテークン信号、コンプリートレディ信号、およびターゲットアドレスＴＩＡＲの入力によって動作する。ここでコンプリートレディ信号は、図２７のオアゲート１６７の出力するコンプリートオア信号に対応するが、８つのエントリに対応するコンプリートオア信号から、図２９の回路、すなわちコンプリートオア信号からコンプリートレディ信号への変換回路を介して得られ、図２８への入力として用いられる。
【０２１４】
図２９において、８つのエントリに対応するコンプリートオア信号のうちからセレクタ１８６によってトップ、セカンド、サードの３つのエントリに対応するコンプリートレディ信号が選択される。この選択は、アウトポインタの出力がデコーダ１８７に与えられることによって、デコーダ１８７の出力によって制御される。
【０２１５】
図２８において、例えばトップエントリに対するテークン信号がＨとなると、同一エントリに対応するコンプリートレディ信号がＬのままでも、セレクタ１７４はトップエントリに対するターゲットアドレスＴＩＡＲを選択し、そのターゲットアドレスはターゲットアドレスバッファ１７５に格納される。
【０２１６】
トップエントリに対するテークン信号がＬ、セカンドエントリに対するテークン信号がＨの場合には、インバータ１７３ａとアンドゲート１７３ｂの動作により、セレクタ１７４はセカンドエントリに対するＴＩＡＲを選択し、そのターゲットアドレスはターゲットアドレスバッファ１７５に格納される。同様にサードエントリに対するテークン信号のみがＨの場合には、インバータ１７３ｃ、アンドゲート１７３ｄの動作により、セレクタ１７４を介してサードエントリに対するＴＩＡＲがバッファ１７５に格納される。
【０２１７】
トップエントリに対応するテークン信号がＨであり、後述するターゲットアドレスバッファ（ＴＡＢ）ビュジィ信号がＬであれば、ナンドゲート１７０ａの出力はＨとなり、トップエントリに対応するコンプリートレディ信号がＨとなった時点でアンドゲート１７０ｂの出力はＨとなる。そしてこれがエントリ０に対するコンプリート信号として、コミットスタックエントリ（ＣＳＥ）２０に与えられる。
【０２１８】
このコンプリート信号は、トップエントリに対する命令識別子ＩＩＤの値に応じて、ＣＳＥ２０の内部でコンプリート状態を記憶するフリップフロップ、例えば１６個のフリップフロップの中でその識別子に対応するＦＦ、例えば１７７ａに記憶され、その出力はＨとなる。ただし、この時点ではＣＳＥアウトポインタが例えば他のエントリに対応する位置を指しており、ＦＦ１７７ａの出力はアンドゲート１８３ａにはまだ与えられていないものとする。
【０２１９】
一方トップエントリに対応するテークン信号とコンプリート信号とはアンドゲート１７９ａに与えられ、その出力がＨとなると、オアゲート１７９ｄを介してセットリセットＦＦ１８０がセットされ、その出力ＱがＨとなる。前述のように、例えばアンドゲート１８３ａの出力はまだＬであり、オアゲート１８４を介してＤ−ＦＦ１８５がセットされていない状態であるため、インバータ１８１の出力はＨとなり、アンドゲート１８２の出力、すなわちＴＡＢビュジィ信号はＨとなる。
【０２２０】
ＴＡＢビュジィ信号は、ターゲットアドレスバッファ１７５に次のターゲットアドレスがロードされるのを禁止する制御信号であって、この信号がターゲットアドレスバッファ１７５に与えられることによって、次のターゲットアドレスのバッファ１７５への格納は禁止される。
【０２２１】
例えばトップエントリに対するテークン信号がＨとなった時点で、ＣＳＥ２０の中で分岐の成立を示す１６個のエントリに対応するフリップフロップ１７８ａ〜１７８ｐのうち、トップエントリに対応する識別子ＩＩＤによって指定されるＦＦ、例えば１７８ａに分岐の成立状態が記憶され、その出力ＱはＨとなっている。
【０２２２】
ＣＳＥアウトポインタがトップエントリに対応するＣＳＥ内のＦＦの位置、ここでは“０”を指すと、２つのフリップフロップ１７７ａ、１７８ａの出力がアンドゲート１８３ａに与えられ、オアゲート１８４の出力がＨとなり、セットリセットＦＦ１８０をリセットすると共に、Ｄ−ＦＦ１８５の出力をＨとする。
【０２２３】
この出力は、ターゲットアドレスバッファ１７５に格納されているターゲットアドレスを、プログラムステータスワードの命令アドレスレジスタ（ＰＳＷＩＡＲ）１７６にロードさせるロード制御信号としてＰＳＷＩＡＲ１７６に与えられ、バッファ１７５に格納されていたターゲットアドレスはＰＳＷＩＡＲ１７６に格納される。
【０２２４】
またＤ−ＦＦ１８５の出力はインバータ１８１によって反転され、Ｌとしてアンドゲート１８２に与えられることにより、ＴＡＢビュジィ信号はＬとなり、その結果次のターゲットアドレスがターゲットアドレスバッファ１７５に格納されることが可能となる。
【０２２５】
図２８において、セカンドエントリと、サードエントリに対応するコンプリート信号としてのＢＲ１コンプリート、ＢＲ２コンプリート信号の出力論理について説明する。オアゲート１７１ａからアンドゲート１７１ｄまでのゲート群はＢＲ１コンプリート信号を出力するためのものであり、またオアゲート１７２ａからアンドゲート１７２ｇまではＢＲ２コンプリート信号を出力するためのものである。
【０２２６】
図２８においては、トップからサードまでの３つのエントリに対応して最大３つのエントリに対応するコンプリート信号を出力することができる。しかしながら、分岐がテークンになる２つ以上のエントリに対して、同時にコンプリート信号を出力することはできない。
【０２２７】
２つのエントリに対応して分岐がテークンになる場合には、２つのターゲットアドレスが存在することになり、これらのターゲットアドレスはターゲットアドレスバッファ１７５に格納され、その後ＰＳＷＩＡＲ１７６に格納される必要があるが、１つのサイクルにおいてターゲットアドレスバッファ１７５には１つのターゲットアドレスしか格納することができず、２つ以上のエントリに対して分岐が成立する場合には、１つのエントリに対してだけコンプリート信号を出力し、もう１つのエントリに対しては次のサイクルでコンプリート信号を出力するように制御する必要がある。
【０２２８】
トップからサードのエントリのうち、例えばトップのエントリに対応する分岐がテークンであれば、セカンド、たまはサードのエントリに対応する分岐がテークンであっても、そのエントリに対応するコンプリート信号の出力は、次のサイクルまで延期される。すなわち上位からトップ、セカンド、サードのエントリの順序に対して、上位のエントリに対する分岐がテークンであれば、下位のエントリに対する分岐がテークンであっても、そのエントリに対応するコンプリート信号の出力は次のサイクル以降になるように制御される。前述のゲート群は、このような制御を行うためのものである。
【０２２９】
一般的には各サイクル毎にＣＳＥ２０で完了処理が行われるため、ターゲットアドレスバッファ１７５にはテークン信号の入力に伴いＲＳＢＲに格納されているターゲットアドレスＴＩＡＲが次々とセットされ、セットされたターゲットアドレスはそれぞれ１サイクル後にＰＳＷＩＡＲ１７６に格納される。
【０２３０】
図３０は、図１４で説明したＣＳＥ２０の内部の再命令フェッチフラッシュ処理部６９の構成例を示す。再命令フェッチフラッシュ処理部６９は、前述のように例えば再命令フェッチが行われ、命令実行部などのクリアが必要な場合にフラッシュＲＳ信号を出力するものである。
【０２３１】
図３０においてフラッシュＲＳ信号を出力するＤ−ＦＦ１９４は、前述の１サイクルに３つの命令のデコード、すなわちＤ０，Ｄ１およびＤ２に対応するデコーダ、および各リザベーションステーション、すなわちＣＳＥ２０，ＲＳＡ２１，ＲＳＥ２２、およびＲＳＢＲ２３、記憶制御ユニット（Ｓユニット）内部のオペランドアクセス部、演算実行部、すなわちＥユニットで実行されている全てのオペレーションを、例えばバリッドビットをリセットすることによってフラッシュし、無効とする。これによってフラッシュＲＳ信号のセットの原因となった分岐命令以後の実行中の全てのオペレーションのキャンセルが行われる。
【０２３２】
図３０において、フラッシュＲＳ信号を出力するＤ−ＦＦ１９４の出力がＨとなるのは、オアゲート１９３の出力、すなわち３つのアンドゲート１９２ａ〜１９２ｃのいずれかの出力がＨとなる時である。フラッシュＲＳ信号が出力されるのは、ＣＳＥ２０の内部で処理が完了したエントリの中で実行順序の古いものから順にトップ、セカンド、サードのエントリを選んで送られるコミット信号がＨとなり、ＣＳＥ２０の内部で再命令フェッチがなされたことを示すＤ−ＦＦ１９１ａ〜１９１ｐの中でＣＳＥアウトポインタによって指定されるＤ−ＦＦの出力がＨとなった時である。例えばＤ−ＦＦ１９１ａの出力がＨであり、トップエントリに対するコミット信号がＨとなった時に、アンドゲート１９２ａの出力がＨとなり、トップエントリに対応する分岐命令が原因となったフラッシュＲＳ信号が出力される。
【０２３３】
再命令フェッチが行われたことを示すＤ−ＦＦに対しては、各エントリに対応する命令識別子ＩＩＤの値に対応してトップ、セカンド、またはサードのそれぞれのエントリに対応する３つのアンドゲート１９０ａ〜１９０ｃの出力のうち、いずれかがセレクタ１９５を介して与えられる。例えばトップエントリに対応する再命令フェッチダン信号とコンプリート信号とがアンドゲート１９０ａに与えられ、トップエントリに対応するＩＩＤによって指定されるＤ−ＦＦ、例えば１９１ａに再命令フェッチが行われたことが記憶される。
【０２３４】
図３１は、分岐予測機構、すなわちブランチヒストリに対する図１３のブランチヒストリ更新指示部５２の構成例である。同図において上側はブランチヒストリへの書込みデータを示し、下側はブランチヒストリに対する指示を示す。なお図３１にもブランチヒストリ３９の一部が含まれる。
【０２３５】
まずブランチヒストリに対する更新指示について説明する。その指示としては、古いエントリを更新する指示としてのアップデートオールドエントリ、古いエントリを消去する指示としてのイレーズオールドエントリ、および新しいエントリの作成指示としてのクリエイトニューエントリの３つがある。まずアップデートオールドエントリ信号は、トップ、セカンド、サードのいずれかのエントリに対応するコンプリート信号によって、セレクタ２１４によって選択されるそれぞれのエントリに対するテークン信号の入力時にＨとなり、古いエントリの更新指示がなされる。
【０２３６】
新しいエントリを作成すべきクリエイトニューエントリの指示は、ブランチヒストリヒット信号がＬで、インバータ２１２の出力がＨとなり、かつセレクタ２１４によって選択された３つのエントリに対応するテークン信号のいずれかがＨである時に、アンドゲート２１３の出力として与えられる。
【０２３７】
古いエントリを消去すべき指示としてのイレーズオールドエントリ信号は、オアゲート２１９の出力、すなわちアンドゲート２１８、または２２１の出力がＨとなった時に出力される。アンドゲート２２１の出力がＨとなるのは、アンドゲート２２０の出力するＢＲＨＩＳファントム信号がＨとなり、かつブランチヒストリヒット信号がＨとなった時である。アンドゲート２２０の出力は、トップエントリに対するファントムバリッド信号と、コンプリート信号とが共にＨとなった時に出力される。ここでアンドゲート２２０に対しては、ファントムバリッド信号のうち、トップエントリに対応するものだけが入力されている。本発明の実施形態においては、ファントムについては１個ずつしか処理を行わないことにし、ファントムバリッド信号としてはトップエントリに対応するものだけを制御信号として用いることにして、セカンドエントリ以降に対するファントムバリッド信号は制御信号として使用しないものとしている。
【０２３８】
アンドゲート２１８の出力がＨとなるのは、ブランチヒストリヒット信号がＨ、オアゲート２１０とアンドゲート２１７の出力が共にＨとなった時である。オアゲート２１０の出力がＨとなるのは、ブランチヒストリディジィ信号がＨとなるか、またはターゲットアドレスに対するマッチ信号がＬで、インバータ２１１の出力がＨとなる、すなわちターゲットアドレスミスマッチの場合である。
【０２３９】
アンドゲート２１７の出力がＨとなるのは、インバータ２１６の出力、ＢＲＨＩＳテークン信号の反転信号がＨとなり、かつ３つのエントリのいずれかに対応する再命令フェッチダン信号がＨとなる時である。アンドゲート２１７の出力はＢＲＨＩＳノットテークン信号であり、前述のようにＢＲＨＩＳテークン信号、ＢＲＨＩＳノットテークン信号、およびＢＲＨＩＳファントム信号のいずれもが“０”であれば、ブランチヒストリに対する更新指示は行われない。
【０２４０】
ブランチヒストリに対する書込みデータとしては、命令アドレスレジスタの値、ターゲットアドレスレジスタの値、ブランチヒストリヒット信号、ブランチヒストリディジィ信号、その他の信号である。アウトポインタの値はセレクタ２０５、命令アドレスレジスタの値はセレクタ２０６、ターゲットアドレスの値はセレクタ２０７、その他のデータはセレクタ２０８によって選択され、ブランチヒストリに対する書込みデータとして与えられる。
【０２４１】
これらのセレクタの制御について説明すると、トップエントリに対応するテークン信号、再命令フェッチダン信号、およびファントムバリッド信号のいずれかがＨとなった時にオアゲート２０１の出力がＨとなり、トップエントリに対応する値が選択される。トップエントリーに対応するテークン信号、再命令フェッチダン信号、ファントムバリッド信号のいずれもＬであってセカンドエントリに対応するテークン信号、および再命令フェッチダン信号のいずれかがＨとなると、オアゲート２０２の出力がＨとなり、アンドゲート２０４ａの出力によってセカンドエントリに対応する値が選択される。２つのオアゲート２０１，２０２の出力が共にＬである時には、アンドゲート２０４ｂの出力によってサードエントリに対応する値が選択される。
【０２４２】
以上本発明の実施形態について詳細に説明したが、図１３で説明したＲＳＢＲのブロック構成、各エントリに格納されるデータ、ＲＳＢＲ内の各ブロックの具体的な構成回路などについては、以上の記述に限定されることなく、特許請求の範囲に記載された範囲において様々な実施形態を実現することができることは当然である。
【０２４３】
【発明の効果】
以上詳細に説明したように、各分岐命令に対応したデータを格納する複数のエントリを備えた分岐リザベーションステーションを用いて、分岐命令および、これに影響を与える命令に対する処理をアウトオブオーダで実行可能とすることによって、分岐命令を含む命令列の処理を高速化することができ、情報処理装置の性能向上に寄与するところが大きい。
【図面の簡単な説明】
【図１】本発明の原理構成ブロック図である。
【図２】本発明の分岐リザベーションステーション（ＲＳＢＲ）が備えられる情報処理装置の全体構成を示すブロック図である。
【図３】ＲＳＢＲの各エントリの格納内容の例を示す図である。
【図４】ブランチオンコンディション命令の命令形式を説明する図である。
【図５】ブランチオンカウント命令の命令形式を説明する図である。
【図６】ブランチオンインデックスハイ命令の命令形式を説明する図である。
【図７】情報処理装置に順次与えられる命令の例を示す図である。
【図８】ＲＳＢＲ内部の分岐確定処理部による分岐判断を説明する図である。
【図９】ＲＳＢＲ内部の再命令フェッチ処理部の動作を説明する図である。
【図１０】ＲＳＢＲにおけるエントリの割当てと解放を説明する図である。
【図１１】ＲＳＢＲ内部の完了報告処理部の動作を説明する図である。
【図１２】ＲＳＢＲ内部のブランチヒストリ更新指示部の動作を説明する図である。
【図１３】ＲＳＢＲの構成例を示すブロック図である。
【図１４】ＣＳＥの内部で本発明に直接関連する部分を示したＣＳＥの構成を示すブロック図である。
【図１５】データロード制御部の一部としてのロードデータ決定部の構成例を示す図である。
【図１６】図２におけるインストラクションワードレジスタおよびデコーダの構成例を示す図である。
【図１７】データロード制御部の一部としてのエントリ毎のロードデータ指定部の構成例を示す図である。
【図１８】ＲＳＢＲのインポインタの構成例を示す図である。
【図１９】ＲＳＢＲのアウトポインタの構成例を示す図である。
【図２０】ＥＡＧインタフェースの構成例を示す図である。
【図２１】ベンディング条件コード処理部の構成例を示す図である。
【図２２】図２０のベンディング条件コード処理部の動作を説明するための命令列の例を示す図である。
【図２３】ＥＵＣＣインタフェースの構成例を示す図である。
【図２４】分岐確定処理部の構成例を示す図である。
【図２５】再命令フェッチ処理部の一部としての再命令フェッチ条件生成部の構成例を示す図である。
【図２６】再命令フェッチ処理部の一部としてのフェッチアドレス選択部の構成例を示す図である。
【図２７】完了報告処理部の一部としての分岐処理完了条件検出部の構成例を示す図である。
【図２８】完了報告処理部の一部としてのＰＳＷＩＡＲ更新処理部の構成例を示す図である。
【図２９】コンプリートオア信号からコンプリートレディ信号への変換回路の例を示す図である。
【図３０】再命令フェッチフラッシュ処理部の構成例を示す図である。
【図３１】ブランチヒストリに対する更新指示部の構成例を示す図である。
【符号の説明】
１  情報処理装置
２  分岐命令実行制御装置
３  分岐リザベーションステーション手段
４  命令リザベーションステーション手段
１０  命令アドレスレジスタ（ＩＡＲ）
１１  命令フェッチエフェクティブアドレスジェネレータ（ＩＦＥＡＧ）
１６  命令バッファ
１８  デコーダ
２０  コミットスタックエントリ（ＣＳＥ）
２１  リザベーションステーションフォーアドレスジェネレーション（ＲＳＡ）
２２  リザベーションステーションフォーエクセキューション（ＲＳＥ）
２３  リザベーションステーションフォーブランチ（ＲＳＢＲ）
２６  エフェクティブアドレスジェネレータ（ＥＡＧ）
３９  ブランチヒストリ（ＢＲＨＩＳ）
４０  命令バッファタグ（ＩＢＵＦＴＡＧ）
４１  分岐確定処理部
４６  再命令フェッチ処理部
５１  完了報告処理部
５２  ブランチヒストリ更新指示部
６２  データロード制御部
６３  ＲＳＢＲインポインタ
６４  ペンディング条件コード処理部
６５  ＥＡＧインタフェース
６６  ＥＵＣＣインタフェース
６７  ＲＳＢＲアウトポインタ
６９  再命令フェッチフラッシュ処理部
【図１】
0003565314.tif 000002
【図２】
0003565314.tif 000003
【図３】
0003565314.tif 000004
【図４】
0003565314.tif 000005
【図５】
0003565314.tif 000006
【図６】
0003565314.tif 000007
【図７】
0003565314.tif 000008
【図８】
0003565314.tif 000009
【図９】
0003565314.tif 000010
【図１０】
0003565314.tif 000011
【図１１】
0003565314.tif 000012
【図１２】
0003565314.tif 000013
【図１３】
0003565314.tif 000014
【図１４】
0003565314.tif 000015
【図１５】
0003565314.tif 000016
【図１６】
0003565314.tif 000017
【図１７】
0003565314.tif 000018
【図１８】
0003565314.tif 000019
【図１９】
0003565314.tif 000020
【図２０】
0003565314.tif 000021
【図２１】
0003565314.tif 000022
【図２２】
0003565314.tif 000023
【図２３】
0003565314.tif 000024
【図２４】
0003565314.tif 000025
【図２５】
0003565314.tif 000026
【図２６】
0003565314.tif 000027
【図２７】
0003565314.tif 000028
【図２８】
0003565314.tif 000029
【図２９】
0003565314.tif 000030
【図３０】
0003565314.tif 000031
【図３１】
0003565314.tif 000032