(57)【特許請求の範囲】
【請求項１】
分岐命令のアドレスと該分岐命令の分岐成立時における分岐先命令のアドレスとを対にして登録されるブランチ・ヒストリを有し、分岐命令の実行に先立ってその分岐命令のアドレスに基づき該ブランチ・ヒストリを索引し、当該分岐命令のアドレスと対になる分岐先命令のアドレスが該ブランチ・ヒストリに登録されている場合には、その分岐先命令のアドレスに対応する命令を予測分岐先命令として読み出し命令実行パイプラインに投入する、パイプライン処理方式の情報処理装置において、
該ブランチ・ヒストリに登録された前記アドレス対毎に、当該アドレス対による予測分岐先命令の命令読出を抑止する場合にオン状態に設定される命令読出抑止ビットがそなえられるとともに、
分岐命令の実行にあたり該ブランチ・ヒストリに既に登録済の前記アドレス対に従って予測分岐先命令を実行した際に、当該予測分岐先命令と実際の分岐先命令とが異なっている場合には当該予測分岐先命令の実行をキャンセルして前記実際の分岐先命令を再度読み出すべく、当該予測分岐先命令と前記実際の分岐先命令とを比較して生成された一の信号に基づいて、該ブランチ・ヒストリにおける当該アドレス対の該命令読出抑止ビットをオン状態に設定する命令読出抑止ビット設定手段と、
分岐命令の実行にあたり該ブランチ・ヒストリを索引して得られた登録済の前記アドレス対の該命令読出抑止ビットがオン状態である場合、当該分岐命令のアドレスと新たな分岐先命令のアドレスとのアドレス対が該ブランチ・ヒストリに登録されるのを抑止することによって、既に登録済の当該アドレス対をそのまま保持する保持手段とがそなえられるとともに、
該命令読出抑止ビット設定手段が該命令読出抑止ビットをオン状態に切り換える際には、該ブランチ・ヒストリに、該命令読出抑止ビット設定手段が該命令読出抑止ビットをオン状態に切り換える時点の前記実際の分岐先命令のアドレスが保持されることを特徴とする、情報処理装置。
【請求項２】
分岐命令の実行にあたり該ブランチ・ヒストリを索引して得られた登録済の前記アドレス対の該命令読出抑止ビットがオン状態である場合、当該アドレス対による予測分岐先命令の読出を抑止する命令読出抑止手段がそなえられたことを特徴とする、請求項１記載の情報処理装置。
【発明の詳細な説明】
【０００１】
（目次）
発明の属する技術分野
従来の技術
発明が解決しようとする課題（図９，図１０）
課題を解決するための手段（図１）
発明の実施の形態（図２〜図９）
発明の効果
【０００２】
【発明の属する技術分野】
本発明は、パイプライン処理方式を採用した情報処理装置に関し、特に、ブランチ・ヒストリを用いて分岐命令を高速で実行できるようにした情報処理装置に関する。
【０００３】
【従来の技術】
一般に、パイプライン処理方式を採用した情報処理装置（パイプライン・プロセッサ）においては、一つの命令の実行の終了を待つことなく、実行ステージが空けば次々と後続の命令列をパイプラインに投入してその実行を開始することにより、性能の向上（処理の高速化）をはかっている。
【０００４】
しかしながら、先行する命令の実行結果が後続の命令の実行に影響を与える場合には、先行する命令の実行の終了を待たなければ、後続の命令の実行を開始することができない。このように先行する命令の実行の終了を待つことにより、パイプライン処理に乱れが生じて、情報処理装置の性能低下を引き起こすことになる。
【０００５】
後続の命令に影響を与える命令の代表的な例として分岐命令が挙げられる。分岐命令は、その実行が終了するまで、分岐が成立するか否かと分岐のターゲットの命令のアドレスとが分からないために、パイプライン処理に乱れが生じる。
そこで、ブランチ・ヒストリを採用することにより、分岐命令の処理の高速化をはかることが一般的に行なわれている。情報処理装置により処理を行なっている際にある分岐命令を実行した結果、その分岐が成立することが判明した場合、ブランチ・ヒストリに、その分岐命令自身のアドレス（以下、分岐命令アドレスという）と分岐先命令のアドレス（以下、分岐先アドレスという）とを対で登録する。このようにして、ブランチ・ヒストリには、分岐の成立した分岐命令についての上記対データを蓄積してゆく。
【０００６】
そして、ある分岐命令を主記憶装置から取り出して実行する際には、その実行に先立ってブランチ・ヒストリを索引し、ブランチ・ヒストリにその分岐命令のアドレスが登録されている場合には、その分岐命令アドレスと対になっている分岐先アドレスをブランチ・ヒストリから読み出して、先行する命令の実行の終了を待つことなく、その分岐先アドレスに対応する命令を主記憶装置から取り出して実行させるのである。なお、その分岐先アドレスに対応する命令の写しがキャッシュメモリに保持されている場合には、その命令は、キャッシュメモリから取り出されて実行される。
【０００７】
つまり、分岐命令の実行以前に、ブランチ・ヒストリに蓄積された過去の分岐命令実行結果に基づき分岐先アドレスを予測し、分岐成立が予想される場合（分岐命令アドレスに対応する分岐先アドレスがブランチ・ヒストリに登録されている場合）、予測された分岐先アドレスを用いて命令フェッチ（命令読出と同義；以下、読出のことをフェッチとして説明する場合がある）を行ない、分岐命令に続いて、読み出された分岐先命令を命令実行ステージに投入する。
【０００８】
このようにして、分岐命令を実行する場合に、その分岐の成立／不成立が判明する以前に、後続の命令または分岐のターゲット側の命令を実行させることで、分岐命令の処理を高速化している。
【０００９】
【発明が解決しようとする課題】
ところで、一般に、命令列は、サブルーチンをもって実行されるケースが多数見受けられる。今、メインルーチンからサブルーチンを呼び出して実行した後にそのサブルーチンからメインルーチンに戻る時のことを考えてみる。要するに、これは分岐命令を実行していることに他ならない。ここで、特にサブルーチンからメインルーチンに戻るケースに注目してみると、分岐先アドレスはその都度変更されている。
【００１０】
例えば図９を参照しながら説明すると、メインルーチンの命令２ａ（分岐命令）からサブルーチンの命令１ｄに分岐した後にサブルーチンの命令４ｄ（分岐命令）からメインルーチンの命令３ａに分岐し、さらに、メインルーチンの命令２ｂ（分岐命令）からサブルーチンの命令１ｄに分岐した後にサブルーチンの命令４ｄ（分岐命令）からメインルーチンの命令３ｂに分岐し、さらに、メインルーチンの命令３ｃ（分岐命令）からサブルーチンの命令１ｄに分岐した後にサブルーチンの命令４ｄ（分岐命令）からメインルーチンの命令４ｃに分岐するような場合、サブルーチンの命令４ｄの分岐先は、その都度、メインルーチンの命令３ａ，３ｂ，４ｃと変化している。
【００１１】
ここで、前述した通り、現在のブランチ・ヒストリには、以前に分岐命令の分岐が成立して、その分岐命令アドレスと分岐先アドレスとが対になって登録されている。そして、分岐命令の実行にあたってその分岐命令を主記憶装置（またはキャッシュメモリ）から取り出す際に、その実行に先立ちブランチ・ヒストリを索引した結果求められた分岐先アドレスで命令フェッチを実行しても、何らかの要因で分岐先アドレスが変更された場合には、当然、ブランチ・ヒストリを索引した結果の分岐先アドレスは無効になるので、今現在実行しているリクエストはキャンセルされ、再度、正しい分岐先アドレスで命令フェッチを実行しなおすことになる。その際、実際に実行された分岐命令アドレスと分岐先アドレスとを対にしてブランチ・ヒストリに再度登録する。
【００１２】
以上のような現象が繰り返されると、同一の分岐命令を実行している一方で分岐先アドレスが変化するがために、ブランチ・ヒストリを索引して求められた分岐先アドレスで命令フェッチを実行しても、その分岐先アドレスは無効になるので、今実行されているリクエストはキャンセルされ、再度、正しい分岐先アドレスで命令フェッチを実行しなおさなければならない。
【００１３】
図９にて前述した例について、ブランチ・ヒストリを用いて実行される具体的なパイプライン処理動作（タイムチャート）を図１０に示す。この図１０に示すように、命令フェッチパイプラインは４つのサイクル（Ｉ，ＩＴ，ＩＢ，ＩＲ）から構成されるとともに、命令実行パイプライン（メインパイプライン）は７つのサイクル（Ｄ，Ａ，Ｔ，Ｂ，Ｅ，Ｃ，Ｗ）から構成されている。
【００１４】
ここで、命令フェッチパイプラインにおいて、Ｉは命令フェッチアドレスの計算サイクル、ＩＴはアドレス変換サイクル、ＩＢは命令をバッファ（キャッシュメモリまたは主記憶装置）から読み出すサイクル、ＩＲは命令の命令実行パイプラインへの投入サイクルである。
また、命令実行パイプラインにおいて、Ｄは命令の解読サイクル、Ａは主記憶オペランドのアドレス計算サイクル、Ｔはアドレス変換サイクル、Ｂはオペランドをバッファ（キャッシュメモリまたは主記憶装置）から読み出すサイクル、Ｅはオペランドに基づいての演算を実行するサイクル、Ｃはチェックサイクル、Ｗは演算結果の格納サイクルである。
【００１５】
なお、図１０中、命令フェッチパイプラインの先頭に付されたＲＳ１サイクルおよびＲＳ１Ｄサイクルは、ブランチ・ヒストリによる分岐先予測が外れその分岐先命令の実行を途中でキャンセルする際に、クリアパイプラインによって実行されるリセット処理のサイクルである。また、「サイクル」を「ステージ」として記述する場合もある。
【００１６】
最初にサブルーチンの命令４ｄ（分岐命令）がメインルーチンの命令３ａに分岐する際には、命令列上に命令４ｄは初めて現れたのであるから、ブランチ・ヒストリに命令４ｄのアドレス（５００ＣHEX 番地）と分岐先の命令３ａのアドレス（１００８HEX 番地）とが対で登録される。
従って、次に命令列上に命令４ｄが出現した際には、ブランチ・ヒストリを索引することにより、命令３ａのアドレス（１００８HEX 番地）が得られてブランチ・ヒストリ（ＢＲＨＩＳ）からのターゲットフェッチが行なわれる。これによりロス・タイムを生じさせることなく命令３ａを命令フェッチパイプラインに流すことができるはずである。
【００１７】
しかし、実際には、２回目の命令４ｄの実行に伴う分岐先は命令３ｂであるため、Ｃサイクルに到達した時点で初めて命令３ａは間違いであることが判明し、その命令３ａの実行は途中でキャンセルされ、再度、正しい命令３ｂのアドレス（２００８ＨＥＸ  番地）で命令フェッチをやりなおすことになる。結果として、命令４ｄの実行から命令３ｂの実行までに１２τ（１τは１サイクルの処理時間）のロス・タイムが生じることになる。
【００１８】
このとき、ブランチ・ヒストリには、命令４ｄのアドレス（５００ＣHEX 番地）と分岐先の命令３ｂのアドレス（２００８HEX 番地）とが対で登録されるため、次に命令列上に命令４ｄが出現した際には、ブランチ・ヒストリを索引することにより、今度は命令３ｂのアドレス（２００８HEX 番地）が得られてブランチ・ヒストリ（ＢＲＨＩＳ）からのターゲットフェッチが行なわれる。
【００１９】
しかし、実際には、３回目の命令４ｄの実行に伴う分岐先は命令３ｃであるため、Ｃサイクルに到達した時点で初めて命令３ｂは間違いであることが判明し、その命令３ｂの実行も途中でキャンセルされて、再度、正しい命令４ｃのアドレス（３００ＣＨＥＸ  番地）で命令フェッチをやりなおすことになる。従って、この場合も、結果として、命令４ｄの実行から命令４ｃの実行までに１２τのロス・タイムが生じてしまうことになる。
【００２０】
つまり、本来のブランチ・ヒストリの機能によれば、分岐命令の分岐が一度成立してブランチ・ヒストリに登録された時、次にその同一の分岐命令が命令列に現れた時に分岐が成立していれば、ブランチ・ヒストリに登録されているのであるから、その分岐の成立／不成立が判明する以前に、後続の命令または分岐のターゲット側の命令を予測して実行することができ、分岐命令をロスなく実行することができる。
【００２１】
しかし、図９に示すように分岐命令が出現する度にその分岐先命令のアドレスが変化する場合、ブランチ・ヒストリを索引して求められた分岐先アドレスで命令フェッチを実行すると、図１０に示すごとく、その分岐先命令のアドレスは無効になってしまうため、クリアパイプラインによるキャンセルのための処理を行なってから命令フェッチパイプラインによる処理を行ない、再度、正しいアドレスで命令フェッチを実行しなくてはならない。
【００２２】
また、同一の分岐命令についてブランチ・ヒストリに登録される情報は、常に最新の分岐先命令のアドレスとその分岐命令のアドレスとの対情報になってしまい、再度、最初の分岐命令アドレスと分岐先アドレスとにより分岐を実行する際には、その情報は消えてしまっている。その結果として、ブランチ・ヒストリを索引するために、却って、ロス・タイムが増えてしまうことになり、ブランチ・ヒストリを有効に活用することができないという課題があった。
【００２３】
本発明は、このような課題に鑑み創案されたもので、同一の分岐命令が出現する度にその分岐先命令のアドレスが変更されたとしても、無駄なく分岐命令を実行でき且つブランチ・ヒストリを有効に活用できるようにして、分岐命令の処理の高速化つまりは情報処理性能の向上をはかった情報処理装置を提供することを目的とする。
【００２４】
【課題を解決するための手段】
図１は本発明の原理ブロック図で、この図１に示すように、本発明の情報処理装置は、分岐命令のアドレスＩＡ（Instruction Address)とこの分岐命令の分岐成立時における分岐先命令のアドレスＴＩＡ（Target Instruction Address）とを対にして登録されるブランチ・ヒストリ１を有している。
【００２５】
また、本発明の情報処理装置は、パイプライン処理方式を採用するとともに、分岐命令の実行に先立ってその分岐命令のアドレスＩＡに基づきブランチ・ヒストリ１を索引し、そのアドレスＩＡと対になる分岐先命令のアドレスＴＩＡがブランチ・ヒストリ１に登録されている場合には、そのアドレスＴＩＡに対応する命令を予測分岐先命令として読み出し命令実行パイプラインに投入するように構成されている。
【００２６】
そして、本発明の情報処理装置では、ブランチ・ヒストリ１に登録されたアドレス対ＩＡ＆ＴＩＡ毎に、そのアドレス対ＩＡ＆ＴＩＡによる予測分岐先命令の命令読出を抑止する場合にオン状態に設定される命令読出抑止ビットＧＩＤＤＹがそなえられるとともに、下記のような命令読出抑止ビット設定手段２がそなえられている。
【００２７】
この命令読出抑止ビット設定手段２は、分岐命令の実行にあたりブランチ・ヒストリ１に既に登録済のアドレス対ＩＡ＆ＴＩＡに従って予測分岐先命令を実行した際に、その予測分岐先命令と実際の分岐先命令とが異なっている場合にはその予測分岐先命令の実行をキャンセルして実際の分岐先命令を再度読み出すべく、その予測分岐先命令と実際の分岐先命令とを比較して生成された一の信号に基づいて、ブランチ・ヒストリ１におけるそのアドレス対ＩＡ＆ＴＩＡの命令読出抑止ビットＧＩＤＤＹをオン状態に設定する手段である（請求項１）。
【００２８】
なお、上述のような本発明の情報処理装置には、下記のような命令読出抑止手段や保持手段をそなえてもよい。
ここで、命令読出抑止手段は、分岐命令の実行にあたりブランチ・ヒストリ１を索引して得られた登録済のアドレス対ＩＡ＆ＴＩＡの命令読出抑止ビットＧＩＤＤＹがオン状態である場合、そのアドレス対ＩＡ＆ＴＩＡによる予測分岐先命令の読出を抑止するものである（請求項２）。
【００２９】
また、保持手段は、分岐命令の実行にあたりブランチ・ヒストリ１を索引して得られた登録済のアドレス対ＩＡ＆ＴＩＡの命令読出抑止ビットＧＩＤＤＹがオン状態である場合、その分岐命令のアドレスＩＡと新たな分岐先命令のアドレスとのアドレス対がブランチ・ヒストリ１に登録されるのを抑止することによって、既に登録済のそのアドレス対ＩＡ＆ＴＩＡをそのまま保持するものである（請求項１）。
さらに、命令読出抑止ビット設定手段２が命令読出抑止ビットＧＩＤＤＹをオン状態に切り換える際には、ブランチ・ヒストリ１に、命令読出抑止ビット設定手段２がＧＩＤＤＹビットをオン状態に切り換える時点の実際の分岐先命令のアドレスが保持される（請求項１）。
図１により上述した本発明の情報処理装置では、分岐命令の実行にあたってその分岐命令が成立した場合には、従来通り、その分岐命令のアドレスＩＡと分岐先命令のアドレスＴＩＡとの対がブランチ・ヒストリ１に登録される。
【００３０】
そして、分岐命令の実行にあたりブランチ・ヒストリ１を検索しその分岐命令のアドレスＩＡに対応する分岐先命令のアドレスＴＩＡが既に登録されていた場合（ヒットした場合）には、そのアドレスＴＩＡの分岐先命令が予測分岐先命令として読み出されて実行される。
しかし、分岐先の変更等のために予測分岐先命令と実際の分岐先命令とが異なっており、その予測分岐先命令を実行できず、再度、実際の分岐先命令を読み出さなければならない場合、本発明の情報処理装置では、その情報が、命令読出抑止ビット設定手段２により、対応するアドレス対ＩＡ＆ＴＩＡの命令読出抑止ビットＧＩＤＤＹをオン状態に設定することで、ブランチ・ヒストリ１に登録される（請求項１）。
【００３１】
また、本発明の情報処理装置では、分岐命令の実行に先立ってブランチ・ヒストリ１を索引しヒットした場合、ヒットしたアドレス対ＩＡ＆ＴＩＡについての命令読出抑止ビットＧＩＤＤＹが読み出される。そして、その命令読出抑止ビットＧＩＤＤＹがオン状態である場合には、命令読出抑止手段により、アドレスＴＩＡの命令を予測分岐先命令として読み出すことが抑止され、ブランチ・ヒストリ１を用いない通常の手順で、正しい分岐先命令についてのアドレスによる命令読出が実行される。つまり、オペランドアドレスから生成される正しい分岐先の命令アドレスで命令読出が実行される。従って、同一の分岐命令が出現する度にその分岐先命令のアドレスが変更されたとしても、無駄なく分岐命令を実行することができる（請求項２）。
【００３２】
さらに、本発明の情報処理装置では、分岐命令の実行に先立ってブランチ・ヒストリ１を索引しヒットして読み出された命令読出抑止ビットＧＩＤＤＹがオン状態である場合、保持手段により、ヒットしたアドレス対ＩＡ＆ＴＩＡがそのまま保持され、ブランチ・ヒストリ１に、その分岐命令のアドレスと新たな分岐先命令のアドレスとを登録することが抑止される。
【００３３】
従って、命令読出抑止ビットＧＩＤＤＹをオン状態からオフ状態に切り換えることで、再度、ブランチ・ヒストリ１を索引した時には、このブランチ・ヒストリ１に命令読出抑止ビットＧＩＤＤＹをオン状態に設定した時点で登録した情報（アドレス対ＩＡ＆ＴＩＡ）を利用できるので、同一の分岐命令が出現する度にその分岐先命令のアドレスが変更されるような場合においても、ブランチ・ヒストリ１をより有効に活用することができる（請求項１）。
【００３４】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
図２は本発明の一実施形態としての情報処理装置の構成を示すブロック図であり、この図２に示すように、パイプライン処理方式を採用した本実施形態の情報処理装置（パイプライン・プロセッサ）１０は、前述したＩサイクル，ＩＴサイクル，ＩＢサイクルおよびＩＲサイクルの４サイクルからなる命令フェッチパイプライン処理系統と、前述したＤサイクル，Ａサイクル，Ｔサイクル，Ｂサイクル，Ｅサイクル，ＣサイクルおよびＷサイクルの６サイクルからなる命令実行パイプライン（メインパイプライン）処理系統とを有している。
【００３５】
命令フェッチパイプライン処理系統は、選択回路１１，命令アドレス生成回路１２，選択回路１３，命令フェッチパイプライン用キャッシュメモリ１４，選択回路１５，ブランチ・ヒストリ用アドレスレジスタ１６，ブランチ・ヒストリ１７，比較回路１８，ＡＮＤゲート１９および分岐先アドレス保持回路２０を有している。
【００３６】
また、命令実行パイプライン処理系統は、オペランドアドレス生成回路２１，命令実行パイプライン用キャッシュメモリ２２およびＧＩＤＤＹビット設定回路２３を有している。
なお、図２中では、情報処理装置１０の全ての構成要素は図示されておらず、本発明に直接的に係わる部分のみが抽出されて図示されている。
【００３７】
ここで、まず、命令実行パイプライン処理系統を構成する各部について説明する。
オペランドアドレス生成回路２１は、Ａサイクル（主記憶オペランドのアドレス計算サイクル）で、命令フェッチパイプラインから投入された命令のデコード結果に基づきオペランドアドレス（ＯＰ ＥＡＧ）を生成し、後段の命令実行パイプライン用キャッシュメモリ２２や選択回路１１，１３，１５へ出力するものである。
【００３８】
命令実行パイプライン用キャッシュメモリ２２は、命令実行パイプラインで索引されるもので、図示しない主記憶装置に接続されている。このキャッシュメモリ２２にオペランドアドレス生成回路２１からのオペランドアドレスが入力されると、そのオペランドアドレスに対応するオペランドが検索されて出力される。そのオペランドアドレスに対応するオペランドを検索できなかった場合（ヒットしなかった場合つまりミスヒットの場合）には、そのオペランドアドレスに対応するオペランドが主記憶装置から読み出される。
【００３９】
ＧＩＤＤＹビット設定回路２３は、本発明の特徴的な部分であり、分岐命令の実行にあたりブランチ・ヒストリ１７の検索結果に従って予測分岐先命令を読み出して実行した際に、その予測分岐先命令と実際の分岐先命令とが異なっているためにその予測分岐先命令の実行をキャンセルして実際の分岐先命令を再度読み出す場合、ブランチ・ヒストリ１７においてその検索結果の検索アドレスのＧＩＤＤＹビット（命令読出抑止ビット）１７ｄをオン状態に設定する（つまりＧＩＤＤＹビット１７ｄに“１”を登録する）ものである。
【００４０】
このＧＩＤＤＹビット設定回路２３は、図５に示すように、ＡＮＤゲート２３ａにより構成されている。このＡＮＤゲート２３ａは、Ｃサイクル（チェックサイクル）で得られた３つの信号“Ｃ ＲＥＩＦＣＨ ＴＩＡＲ”，“Ｃ ＢＲ ＴＫＮ”，“Ｃ ＶＡＬＩＤ”の論理積を出力するものである。
ここで、“Ｃ ＲＥＩＦＣＨ ＴＩＡＲ”は、ブランチ・ヒストリ１７を検索して得られた分岐先アドレスと実際に実行すべき命令のアドレスとが異なっているために、命令フェッチを再度実行する場合に“１”となる信号である。また、“Ｃ ＢＲ ＴＫＮ”は、分岐命令が分岐を実行する場合（分岐が成立する場合）に“１”となる信号であり、“Ｃ ＶＡＬＩＤ”は現在Ｃサイクルの命令を実行中である場合に“１”となる信号である。
【００４１】
次に、命令フェッチパイプライン処理系統を構成する各部について説明する。選択回路１１は、選択回路１３により選択されて出力された命令アドレスと、オペランドアドレス生成回路２１により生成された分岐先アドレスＯＰ ＥＡＧとのいずれか一方を選択して命令アドレス生成回路１２へ出力するものである。命令アドレス生成回路（ＩＦ ＥＡＧ）１２は、選択回路１１から入力されたアドレスに基づいて命令アドレスを生成するためのもので、図３に示すように、３つの命令列（Ａ系列，Ｂ系列，Ｃ系列）用の命令アドレス生成部１２Ａ，１２Ｂ，１２Ｃと、これらの命令アドレス生成部１２Ａ〜１２Ｃからの命令アドレスのうちの一つを選択して選択回路１３へ出力する選択回路１２ａとから構成されている。なお、これらのＡ系列〜Ｃ系列は、それぞれ２ビットのＩＤ（識別子）“００”，“０１”，“１０”により識別される。
【００４２】
これらの命令アドレス生成部１２Ａ，１２Ｂ，１２Ｃは、それぞれ、命令アドレスレジスタ（ＩＡＲ）１２Ａ−１，１２Ｂ−１，１２Ｃ−１と、加算器１２Ａ−２，１２Ｂ−２，１２Ｃ−２と、選択回路１２Ａ−３，１２Ｂ−３，１２Ｃ−３とから構成されている。
Ａ系列の命令アドレスレジスタ１２Ａ−１には、パイプラインが作動状態になるとプログラム・ステータス・ワード（ＰＳＷ）により指示されるアドレスがレジスタＰＳＷＩＡＲ（Program Status Word Instruction Register）から入力され、パイプライン処理動作中は選択回路１１から命令アドレスが入力される。
【００４３】
Ｂ系列の命令アドレスレジスタ１２Ｂ−１には、例えば、Ａ系列の命令列中に分岐命令Ｊ１が存在しその分岐命令Ｊ１の分岐成立時における分岐先アドレスの命令から連続する命令列中にさらに分岐命令Ｊ２が存在した場合に、その分岐命令Ｊ２のアドレスが、選択回路１１から入力される。
Ｃ系列の命令アドレスレジスタ１２Ｃ−１は、予備のためのもので、オペランドアドレス生成回路２１により生成されたアドレスについて命令フェッチを行なう場合にそなえて、通常、空き（未使用）状態になっている。
【００４４】
また、加算器１２Ａ−２，１２Ｂ−２，１２Ｃ−２は、それぞれ、選択回路１２ａおよび選択回路１３によってフィードバックされたアドレスに、読出命令長（例えば８バイト）を加算して、各系列の次の命令フェッチのための新たな命令アドレスを生成するものである。
さらに、選択回路１２Ａ−３，１２Ｂ−３，１２Ｃ−３は、それぞれ、命令アドレスレジスタ１２Ａ−１，１２Ｂ−１，１２Ｃ−１に保持されているアドレスと、加算器１２Ａ−２，１２Ｂ−２，１２Ｃ−２により生成されたアドレスとのいずれか一方を選択して選択回路１２ａへ出力するものである。
【００４５】
一方、選択回路１３は、命令アドレス生成回路１２により生成された命令アドレスと、オペランドアドレス生成回路２１により生成された分岐先アドレスＯＰ ＥＡＧと、分岐先アドレス保持回路２０からの分岐先アドレスＴＩＡとのいずれか一つを選択して、命令フェッチパイプライン用キャッシュメモリ１４，選択回路１１および選択回路１５へ出力するものである。
【００４６】
この選択回路１３により命令アドレス生成回路１２からの命令アドレスがキャッシュメモリ１４へ送出されることで、命令フェッチが実行される。また、選択回路１３により命令アドレス生成回路１２からの命令アドレスが選択回路１１を経由して命令アドレス生成回路１２にフィードバックされることで、命令フェッチのためのアドレスが次々生成されることになる。
【００４７】
命令フェッチパイプライン用キャッシュメモリ１４は、命令フェッチパイプラインで索引されるもので、図示しない主記憶装置に接続されている。このキャッシュメモリ１４に選択回路１３からの命令アドレスが入力されると、その命令アドレスに対応する命令語が検索されて出力される。その命令アドレスに対応する命令語を検索できなかった場合（ヒットしなかった場合つまりミスヒットの場合）には、その命令アドレスに対応する命令語が主記憶装置から読み出される。
【００４８】
選択回路１５は、選択回路１３からの命令アドレスと、オペランドアドレス生成回路２１により生成された分岐先アドレスＯＰ ＥＡＧとのいずれか一方を選択してブランチ・ヒストリ用アドレスレジスタ１６へ出力するものである。選択回路１３からの命令アドレスが分岐命令についてのものである場合には、選択回路１５により選択回路１３からの命令アドレスが選択され、その命令アドレスがアドレスレジスタ１６に格納される一方、オペランドアドレス生成回路２１からの分岐先アドレスＯＰ ＥＡＧがさらに分岐命令についてのものである場合には、選択回路１５によりオペランドアドレス生成回路２１からの分岐先アドレスＯＰ ＥＡＧが選択され、その分岐先アドレスＯＰ ＥＡＧがアドレスレジスタ１６に格納される。
【００４９】
ブランチ・ヒストリ１７は、分岐命令のアドレス（ＷＩＡＲ）の上位ビットと、その分岐命令の分岐成立時における分岐先命令のアドレス（ＷＯＡＲ，ＴＩＡＲ）と、分岐成立の可否（ＶＡＬＩＤ）と、予測分岐先命令の読出を抑止するか否かの情報（ＧＩＤＤＹ）とを管理するものである。
このようなブランチ・ヒストリ１７は、命令アドレス保持部（ＩＡＲ）１７ａ，分岐先アドレス保持部（ＴＩＡＲ）１７ｂ，ＶＡＬＩＤビット１７ｃおよびＧＩＤＤＹビット（命令読出抑止ビット）１７ｄを有して構成され、アドレスレジスタ１６に格納された分岐命令自身の命令アドレス（ＷＩＡＲ）の下位ビットを索引アドレスとして用いる。
【００５０】
ここで、命令アドレス保持部１７ａおよび分岐先アドレス保持部１７ｂには、それぞれ、分岐命令のアドレス（ＷＩＡＲ）の上位ビットとその分岐命令の分岐成立時における分岐先命令のアドレス（ＷＯＡＲ，ＴＩＡＲ）とが対で登録される。また、ＶＡＬＩＤビット１７ｃには、そのビット１７ｃを付されたアドレス対についての分岐が成立した場合に“１”が設定・登録される。さらに、ＧＩＤＤＹビット１７ｄには、そのビット１７ｄを付されたアドレス対による予測分岐先命令の読出を抑止する場合に、“１”（オン状態）が、前述のごとくＧＩＤＤＹビット設定回路２３により設定・登録される。
【００５１】
なお、図２では、ブランチ・ヒストリ１７に登録される分岐命令のアドレスの上位ビットをＩＡＲ、ブランチ・ヒストリ１７に登録されるＷＯＡＲをＴＩＡＲとして示している。また、このブランチ・ヒストリ１７への各データの登録は、命令実行パイプラインのＷサイクルで実行される。
そして、選択回路１５からの命令アドレスがブランチ・ヒストリ１７の索引アドレスとしてアドレスレジスタ１６にセットされると、そのセットを受けてブランチ・ヒストリ１７の検索が行なわれる。対応するアドレスに分岐先アドレスが登録されていれば（ヒット）、ブランチ・ヒストリ１７は、その索引アドレスに登録されている、分岐命令アドレス（ＩＡＲ）の上位ビット，分岐先アドレス（ＴＩＡＲ），ＶＡＬＩＤビット，ＧＩＤＤＹビットを出力する。
【００５２】
比較回路１８は、ブランチ・ヒストリ１７から上述のごとく出力された分岐命令アドレス（ＩＡＲ）の上位ビットと、アドレスレジスタ１６にセットされている分岐命令アドレスの上位ビットとを比較し、一致する場合に“１”を出力するものである。
また、ＡＮＤゲート１９は、ブランチ・ヒストリ１７から上述のごとく出力されたＶＡＬＩＤビットと比較回路１８からの信号との論理積を出力するものである。従って、ＶＡＬＩＤビットと比較回路１８からの信号とがいずれも“１”の場合、つまり、比較回路１８による比較結果が一致し且つ検索アドレスに登録されているアドレス対による分岐が成立している場合に、ブランチ・ヒストリ１７の検索結果がヒットした旨を示すＨＩＴ信号（“１”）がＡＮＤゲート１９から出力される。
【００５３】
分岐先アドレス保持回路２０は、図４に示すように、Ａ系列（ＩＤ＝００），Ｂ系列（ＩＤ＝０１），Ｃ系列（ＩＤ＝１０）の３つの命令列用の分岐先アドレスレジスタ２０Ａ，２０Ｂ，２０Ｃと、これらの分岐先アドレスレジスタ２０Ａ〜２０Ｃからの分岐先アドレス（ＴＩＡＲ）およびブランチ・ヒストリ１７からの分岐先アドレス（ＴＩＡＲ）のうちの一つを選択して選択回路１３へ出力する選択回路２０ａとから構成されている。
【００５４】
ところで、上述のごとくブランチ・ヒストリ１７から出力された分岐先アドレス（ＴＩＡＲ）は、ＩＢサイクルで直ちに命令フェッチに使用される場合と、分岐先アドレス保持回路２０の分岐先アドレスレジスタ２０Ａ〜２０Ｃのいずれかに保持されてから命令フェッチに使用される場合がある。なお、前者の場合、選択回路２０ａによりブランチ・ヒストリ１７からの分岐先アドレスが選択され、その分岐先アドレスがブランチ・ヒストリ１７から直接的に選択回路１３へ送出される。
【００５５】
本実施形態では、命令フェッチを３系列で行なっているが、これらの３系列のうちの１系列は、命令実行パイプラインで実行される命令をフェッチするために占有されている。また、ブランチ・ヒストリ１７で検索結果の得られなかった分岐命令が命令実行パイプラインにおいて実行されオペランドアドレス生成回路２１からの分岐先の命令フェッチが行なわれる場合にそなえて、１系列が空けておかれる。そのため、ブランチ・ヒストリ１７からの検索結果（分岐先アドレス）に基づく分岐先命令読出は、３系列のうちの１系列のみで実行されるようになっている。
【００５６】
従って、その分岐先命令読出用の１系列で、既に、ブランチ・ヒストリ１７からの分岐先アドレスに基づく分岐先命令読出（ブランチ・ヒストリ１７からのターゲットフェッチ）が行なわれている場合や、ブランチ・ヒストリ１７からの命令フェッチ要求が出ているが先行する何らかの命令フェッチがキャッシュメモリ１４でヒットしなかった場合などの様々な要因により、ブランチ・ヒストリ１７でヒットして分岐先アドレスが得られた場合でも、その分岐先アドレスをＩＢサイクルで直ちに命令読出に使用できないことがある。
【００５７】
そこで、分岐先アドレス保持回路２０の分岐先アドレスレジスタ２０Ａ〜２０Ｃに、ブランチ・ヒストリ１７から出力された分岐先アドレス（ＴＩＡＲ；検索結果）を、それぞれ、図６（ａ）〜図６（ｃ）にて後述する回路により生成されるペンディング信号“ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ／Ｂ／Ｃ”がオン状態（“１”）にセットされている間、その分岐先アドレスを削除することなく保持する。これにより、前述した要因の発生時には、その分岐先アドレスをＩＢサイクルで直ちに命令読出に使用することが抑止されるようになっている。
【００５８】
このとき、分岐先アドレスの格納先のアドレスレジスタ２０Ａ〜２０Ｃは、ブランチ・ヒストリ１７でヒットした命令フェッチのＩＤに応じて決定される。つまり、分岐先アドレスは、ＩＤ＝００の場合、アドレスレジスタ２０Ａに格納され、ＩＤ＝０１の場合、アドレスレジスタ２０Ｂに格納され、ＩＤ＝１０の場合、アドレスレジスタ２０Ｃに格納される。なお、分岐先アドレス保持回路２０の詳細な動作等については、特開平７−１５２５６２号公報に開示されている。
【００５９】
次に、図６（ａ）〜図６（ｃ）により、前述したペンディング信号“ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ／Ｂ／Ｃ”を生成する論理回路について説明する。なお、図６（ａ）〜図６（ｃ）は、それぞれ、Ａ系列，Ｂ系列，Ｃ系列のための回路を示している。Ａ系列用の論理回路は、ＡＮＤゲート３１Ａ，３４ＡとＮＡＮＤゲート３２Ａ，３３ＡとＯＲゲート３５Ａとラッチ３６Ａとから構成され、Ｂ系列用の論理回路は、ＡＮＤゲート３１Ｂ，３４ＢとＮＡＮＤゲート３２Ｂ，３３ＢとＯＲゲート３５Ｂとラッチ３６Ｂとから構成され、Ｃ系列用の論理回路は、ＡＮＤゲート３１Ｃ，３４ＣとＮＡＮＤゲート３２Ｃ，３３ＣとＯＲゲート３５Ｃとラッチ３６Ｃとから構成されている。これらの回路は全て同一構成であるので、ここでは、図６（ａ）を参照しながら、Ａ系列用の論理回路についてのみ説明する。
【００６０】
ＡＮＤゲート３１Ａは、“＋ＢＲＨＩＳ ＴＡＲＧＥＴ ＦＣＨ ＲＥＱ ＩＲ”と“＋ＩＲ ＩＤ ＥＱ ００”との論理積を出力するものであり、ＮＡＮＤゲート３２Ａは、“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＩＲ ＧＯ”と“＋ＩＦ ＲＥＱ ＶＡＬ”との否定積を出力するものであり、ＮＡＮＤゲート３３Ａは、ＡＮＤゲート３１Ａからの出力とＮＡＮＤゲート３２Ａからの出力と“−ＩＲ ＢＲＨＩＳ ＧＩＤＤＹ”との否定積を出力するものである。
【００６１】
また、ＡＮＤゲート３４Ａは、“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ ＧＯ”と“＋ＩＦ ＲＥＱ ＶＡＬ”との論理積を出力するものであり、ＯＲゲート３５Ａは、ＡＮＤゲート３４Ａからの出力と“＋ＣＡＮＣＥＬ Ｉ ＦＣＨ”と“＋ＲＥＳＥＴ Ａ”との論理和を出力するものである。
ラッチ３６Ａは、ＮＡＮＤ３３Ａからの出力をセット端子ＳＥＴに入力されるととともに、ＯＲゲート３５Ａからの出力をリセット端子ＲＳＴに入力され、ＮＡＮＤ３３Ａからの出力が“１”になった場合に“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ”をセットする一方、ＯＲゲート３５Ａからの出力が“１”になった場合に“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ”をリセットするものである。
【００６２】
上述した論理回路に入力される各信号を▲１▼〜▲８▼として以下に説明する。
▲１▼“＋ＢＲＨＩＳ ＴＡＲＧＥＴ ＦＣＨ ＲＥＱ ＩＲ”は、ブランチ・ヒストリ１７からのターゲットフェッチのリクエストがＩＲサイクルに存在している場合に“１”（オン）となる信号である。
▲２▼“＋ＩＲ ＩＤ ＥＱ ００”は、ＩＲサイクルのＩＤが“００”である、つまり、Ａ系列が選択されている場合に“１”（オン）となる信号である。
【００６３】
▲３▼“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＩＲ ＧＯ”は、ブランチ・ヒストリ１７の索引結果で命令フェッチリクエストを行なう場合に“１”（オン）となる信号である。
▲４▼“＋ＩＦ ＲＥＱ ＶＡＬ”は、命令フェッチリクエストが有効である場合に“１”（オン）となる信号である。
【００６４】
▲５▼“−ＩＲ ＢＲＨＩＳ ＧＩＤＤＹ”は、ブランチ・ヒストリ１７で検索されて得られた分岐先アドレスのＧＩＤＤＹビット１７ｄがオフ状態（“０”）の場合に“１”（オン）となる信号である。
▲６▼“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ ＧＯ”は、図７（ａ）にて後述する回路により生成されるもので、ペンディング中のブランチ・ヒストリ１７からのリクエストを実行する場合に“１”（オン）となる信号である。
【００６５】
▲７▼“＋ＣＡＮＣＥＬ Ｉ ＦＣＨ”および▲８▼“＋ＲＥＳＥＴ Ａ”は、共に命令フェッチをキャンセルする場合に“１”（オン）となる信号で、これらの信号▲７▼，▲８▼は、分岐先アドレスによる命令フェッチを直ちに行なえなかった要因が解消される以前に、その命令フェッチの系列が先行する分岐の確定によってキャンセルされた場合等に用いられる。
【００６６】
図６（ａ）に示す論理回路により、（▲１▼ＡＮＤ▲２▼）ＡＮＤ（▲３▼ＮＡＮＤ▲４▼）ＡＮＤ▲５▼が“１”になる場合に、“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ”がセットされる。つまり、ＩＲサイクルにＡ系列についてのブランチ・ヒストリ１７からのターゲットフェッチのリクエストが存在し、ブランチ・ヒストリ１７の検索結果による命令フェッチリクエストが有効ではなく、且つ、その検索結果のＧＩＤＤＹビット１７ｄがオフ（“０”）である場合に、“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ”がラッチ３６Ａにセットされることになる。
【００６７】
そして、（▲６▼ＡＮＤ▲４▼）ＯＲ▲７▼ＯＲ▲８▼が“１”になる場合に、“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ”がリセットされる。つまり、ペンディング中のブランチ・ヒストリ１７からのリクエストを実行することになった場合、もしくは、命令フェッチをキャンセルすることになった場合に、ラッチ３６Ａがリセットされて“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ”がオフ（“０”）になる。
【００６８】
さらに、図７（ａ）により、前述した信号▲６▼“ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ ＧＯ”を生成する論理回路について説明する。なお、図７（ａ）〜図７（ｃ）は、それぞれＡ系列，Ｂ系列，Ｃ系列のための回路を示している。Ａ系列用の論理回路は、ＡＮＤゲート３７Ａ，３８ＡとＯＲゲート３９Ａとから構成され、Ｂ系列用の論理回路は、ＡＮＤゲート３７Ｂ，３８ＢとＯＲゲート３９Ｂとから構成され、Ｃ系列用の論理回路は、ＡＮＤゲート３７Ｃ，３８ＣとＯＲゲート３９Ｃとから構成されている。これらの回路は全て同一構成であるので、ここでは、図７（ａ）を参照しながらＡ系列用の論理回路についてのみ説明する。
【００６９】
ＡＮＤゲート３７Ａは、信号▲１▼“＋ＢＲＨＩＳ ＴＡＲＧＥＴ ＦＣＨ ＲＥＱ ＩＲ”と信号▲５▼“−ＩＲ ＢＲＨＩＳ ＧＩＤＤＹ”との論理積を出力するものであり、ＡＮＤゲート３８Ａは、“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ”と信号▲９▼“＋ＣＵＲＲＥＮＴ ＩＤ Ａ”との論理積を出力するものである。信号▲９▼“＋ＣＵＲＲＥＮＴ ＩＤ Ａ”は、現命令フェッチでＡ系列が選択される場合に“１”（オン）となる信号である。
【００７０】
また、ＯＲゲート３９は、ＡＮＤゲート３７Ａからの出力とＡＮＤゲート３８Ａからの出力との論理積を、信号▲６▼“ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ
ＧＯ”として出力するものである。
図７（ａ）に示す論理回路により、ブランチ・ヒストリ１７からのターゲットフェッチのリクエストがＩＲサイクルに存在し且つそのリクエストのＧＩＤＤＹビット１７ｄがオフ（“０”）である場合、もしくは、“＋ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ”がオンで且つ現命令フェッチでは系列が選択されるようになった場合に、信号▲６▼“ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ ＧＯ”がセットされ、ペンディング中であったブランチ・ヒストリ１７からの命令フェッチ要求が実行されるようになっている。
【００７１】
なお、図６（ｂ），図７（ｂ）および図６（ｃ），図７（ｃ）にそれぞれ示すＢ系列用およびＣ系列用の論理回路も、図６（ａ），図７（ａ）に示したＡ系列用の論理回路と全く同様に構成されており上述と全く同様の動作を行なう。
ここで、本実施形態では、ブランチ・ヒストリ１７の検索時に同時に読み出されたＧＩＤＤＹビット１７ｄの状態が、図６（ａ）〜図６（ｃ）に示すＮＡＮＤゲート３３Ａ〜３３Ｃや図７（ａ）〜図７（ｃ）に示すＡＮＤゲート３７Ａ〜３７Ｃに、信号▲５▼“−ＩＲ ＢＲＨＩＳ ＧＩＤＤＹ”として入力されている。これにより、図１にて前述した命令読出抑止手段が実現されている。
【００７２】
つまり、本実施形態では、信号▲５▼“−ＩＲ ＢＲＨＩＳ ＧＩＤＤＹ”がオフとなるため、図６（ａ）〜図６（ｃ）に示す論理回路では“ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ／Ｂ／Ｃ”のセットが抑止され、ブランチ・ヒストリ１７からの分岐先アドレスを分岐先アドレス保持回路２０の各分岐アドレスレジスタ２０Ａ〜２０Ｃに保持することが抑止される。このとき、選択回路２０ａは選択動作を行なわず、ブランチ・ヒストリ１７からの分岐先アドレスが選択回路１３へ直接的に送出されることも抑止される。
【００７３】
また、既にブランチ・ヒストリ１７からのターゲットフェッチ要求が出ており各分岐アドレスレジスタ２０Ａ〜２０Ｃに保持されている場合でも、ＧＩＤＤＹビット１７ｄがオンであると信号▲５▼“−ＩＲ ＢＲＨＩＳ ＧＩＤＤＹ”がオフとなるため、図７（ａ）〜図７（ｃ）に示す論理回路では信号▲６▼“ＩＦ ＲＥＱ ＢＲＨＩＳ ＰＥＮＤ Ａ ＧＯ”のセット（つまりブランチ・ヒストリ１７からの命令フェッチ要求を出すこと）が抑止される。
【００７４】
従って、ブランチ・ヒストリ１７からの命令フェッチ要求が抑止され、オペランドアドレスから生成されるアドレスでの命令フェッチ要求が実行されることになる。
なお、本実施形態の情報処理装置１０には、ブランチ・ヒストリ１７を検索して得られた分岐先アドレスのＧＩＤＤＹビット１７ｄがオン状態である場合、既に登録済のアドレス対（ＩＡＲ＆ＴＩＡＲ）をそのまま保持する手段がそなえられており、この保持手段により、ブランチ・ヒストリ１７に、その分岐命令アドレスと新たな分岐先アドレスとを登録することが抑止されている。
【００７５】
上述の構成により、本実施形態の情報処理装置１０では、実行すべき命令が分岐命令である場合には、その分岐命令の実行に先立って、命令アドレス生成回路１２やオペランドアドレス生成回路２１や分岐先アドレス保持回路２０からの命令アドレスは、選択回路１３，１５を介してブランチ・ヒストリ用アドレスレジスタ１６に格納される。
【００７６】
このアドレスレジスタ１６に分岐命令アドレスが格納されると、前述した通り、ブランチ・ヒストリ１７の検索が行なわれその分岐命令アドレスと対になる分岐先アドレスが登録されている場合（ヒットした場合）には、その分岐先アドレスに対応する命令が、予測分岐先命令として読み出され、元の分岐命令の実行が終了する前にＩＲサイクルで命令実行パイプラインに投入される。
【００７７】
今、上述のごとく、分岐命令の実行にあたってブランチ・ヒストリ１７に登録済のアドレス対（分岐命令アドレス＆分岐先アドレス）にヒットしてその分岐先アドレスについて命令フェッチを行ない、読み出された命令を命令実行パイプラインに投入して実行したが、その時点でその分岐命令についての分岐先命令のアドレスが変更されていたものとする。
【００７８】
このような場合、ブランチ・ヒストリ１７から読み出された分岐先アドレスで命令フェッチを実行しても、その分岐先アドレスは誤りであるため、図９で前述した例と同様、Ｃサイクルで誤りが判明して予測分岐先命令の実行はキャンセルされた後、再度、正しい命令をキャッシュメモリ１４（または主記憶装置）から読み出さなければならなくなる。
【００７９】
本実施形態では、上述のような状況が発生した場合、その情報が、対応するアドレス対に付されたＧＩＤＤＹビット１７ｄをオン状態に設定することで、ブランチ・ヒストリ１７に登録される。
そして、分岐命令の実行に先立ってブランチ・ヒストリ１７を索引しヒットした場合、ヒットしたアドレス対に付されたＧＩＤＤＹビットが読み出されてタグとして命令フェッチパイプラインに通知される。
【００８０】
このとき、ＧＩＤＤＹビットがオン状態（“１”）であれば、図６（ａ）〜図６（ｃ）および図７（ａ）〜図７（ｃ）に示した論理回路で生成される信号によって、分岐先アドレスの命令をフェッチすることが抑止され、ブランチ・ヒストリ１７を用いない通常の手順で、正しい分岐先命令についてのアドレスによる命令読出が実行される。つまり、オペランドアドレスから生成される正しい分岐先の命令アドレスで命令読出が実行される。従って、同一の分岐命令が出現する度にその分岐先命令のアドレスが変更されたとしても、無駄なく分岐命令を実行することができる。
【００８１】
また、その際には、前述した保持手段により、ブランチ・ヒストリ１７にその分岐命令のアドレスと新たな分岐先命令のアドレスとを登録することが抑止される。従って、ＧＩＤＤＹビットをオン状態からオフ状態に切り換えることで、再度、ブランチ・ヒストリ１７を索引した時には、このブランチ・ヒストリ１７にＧＩＤＤＹビットをオン状態に設定した時点で登録した情報（アドレス対）を利用できるので、同一の分岐命令が出現する度にその分岐先命令のアドレスが変更されるような場合においても、ブランチ・ヒストリ１７をより有効に活用することができる。
【００８２】
次に、図９で前述したような命令列を本実施形態の情報処理装置１０で実行する際の処理について、図８を参照しながら以下に説明する。
［１］最初にサブルーチンの分岐命令（命令４ｄ）を実行して分岐が成立すると、その命令４ｄのアドレス（５００ＣHEX 番地）と分岐先命令（命令３ａ）のアドレス（１００８HEX 番地）と、ＶＡＬＩＤビットとがブランチ・ヒストリ１７に登録される。
【００８３】
［２］続いて命令列を実行していき、再度、命令４ｄを実行し分岐が成立した時には、ブランチ・ヒストリ１７を索引することにより、命令３ａのアドレス（１００８HEX 番地）が得られてブランチ・ヒストリ１７からのターゲットフェッチが行なわれる。これによりロス・タイムを生じさせることなく命令３ａを命令フェッチパイプラインに流すことができるはずである。
【００８４】
しかし、実際には、２回目の命令４ｄに実行に伴う分岐先は命令３ａから命令３ｂに変更されているため、Ｃサイクルに到達した時点で初めて命令３ａは間違いであることが判明する。従って、ヒットにより読み出された分岐先アドレス（１００８HEX 番地）は無効となり、命令３ａの実行は途中でキャンセルされ、再度、正しい命令３ｂのアドレス（２００８HEX 番地）で命令フェッチを実行しなおす。
【００８５】
このとき、本実施形態では、ＧＩＤＤＹビット設定回路２３により、命令４ｄについてのＧＩＤＤＹビット１７ｄがオン状態に設定されるとともに、今回の命令実行で得られたアドレス対〔分岐命令４ｄのアドレス（５００ＣHEX 番地）と分岐先命令３ｂのアドレス（２００８HEX 番地）との対〕が、ブランチ・ヒストリ１７の分岐命令アドレス保持部１７ａおよび分岐先アドレス保持部１７ｂに登録される。
【００８６】
［３］この後、命令列を実行していき、再度、命令４ｄが出現した際には、ブランチ・ヒストリ１７を索引しこのブランチ・ヒストリ１７に登録されている命令４ｄについてのＧＩＤＤＹビット１７ｄを読み出すと、そのＧＩＤＤＹビットがオン状態に設定されているので、ブランチ・ヒストリ１７を索引して得られた分岐先アドレスで命令フェッチを実行することが抑止される。
【００８７】
従って、命令実行パイプラインでは、Ａサイクルでオペランドアドレス生成回路２１により生成される、正しい分岐先命令（命令４ｃ）の命令アドレス（３００ＣHEX 番地）で命令フェッチを実行する。その際には、ブランチ・ヒストリ１７の分岐命令アドレス保持部１７ａおよび分岐先アドレス保持部１７ｂには、ＧＩＤＤＹビット１７ｄをオン状態に設定した時点のアドレス対を保持したままとし、分岐命令４ｄのアドレス（５００ＣHEX 番地）と分岐先命令４ｃのアドレス（３００ＣHEX 番地）とを対にして登録することが抑止される。
【００８８】
本実施形態の機能を取り扱っていない情報処理装置では、分岐命令の分岐先アドレスが変更される度に、ブランチ・ヒストリ１７に新たな分岐命令アドレスと分岐先アドレスとの対を再登録し、その分岐命令が出現する度に、図９に示すごとく、キャンセル処理を行なって１２τのロス・タイムが生じさせながら、正しい分岐先アドレスによる命令フェッチを行なっていた。
【００８９】
これに対して、本実施形態の情報処理装置１０では、同一の分岐命令が出現する度にその分岐先命令のアドレスが変更されるような場合、その分岐命令が２回目に出現した時点でＧＩＤＤＹビットがオン状態に設定され、その分岐命令の出現回数が３回目以上になると、通常のオペランドアドレス生成回路２１からのターゲットフェッチが実行され、ロス・タイムは４τで済むことになる。
【００９０】
このように、本発明の一実施形態によれば、同一の分岐命令が出現する度にその分岐先命令のアドレスが変更されたとしても、無駄なく分岐命令を実行でき且つブランチ・ヒストリ１７を有効に活用することができるので、分岐命令の処理が高速化され、つまりは情報処理装置１０の性能を大幅に向上させることができる。
【００９１】
なお、上述した実施形態では、３系統の命令列を処理できる構成の装置について説明したが、本発明はこれに限定されるものではない。
【００９２】
【発明の効果】
以上詳述したように、本発明の情報処理装置（請求項１〜３）によれば、予測分岐先命令と実際の分岐先命令とが異なっているために、その予測分岐先命令を実行できず、再度、実際の分岐先命令を読み出す必要がある場合には、その旨がブランチ・ヒストリの命令読出抑止ビットに設定・登録されるので、同一の分岐命令が出現する度にその分岐先命令のアドレスが変更されたとしても、無駄なく分岐命令を実行でき、且つ、ブランチ・ヒストリを有効に活用することができ、分岐命令の処理が大幅に高速化され、引いては、情報処理性能を大幅に向上できるという効果がある。
【図面の簡単な説明】
【図１】本発明の原理ブロック図である。
【図２】本発明の一実施形態としての情報処理装置の構成を示すブロック図である。
【図３】本実施形態における命令アドレス生成回路の構成を示すブロック図である。
【図４】本実施形態における分岐先アドレス保持回路の構成を示すブロック図である。
【図５】本実施形態におけるＧＩＤＤＹビット設定回路の構成を示す図である。
【図６】（ａ）〜（ｃ）はいずれも本実施形態において予測分岐先命令の読出を抑止（ペンディング）するための信号を生成する論理回路を示す図である。
【図７】（ａ）〜（ｃ）はいずれも本実施形態における抑止（ペンディング）中の予測分岐先命令の読出を実行させるための信号を生成する論理回路を示す図である。
【図８】本実施形態の情報処理装置によるパイプライン処理動作を説明するためのタイムチャートである。
【図９】同一分岐命令でありながら出現する度にその分岐先命令のアドレスが変更される命令列の例を示す図である。
【図１０】図９に示す命令例について、ブランチ・ヒストリを用いて実行される一般的なパイプライン処理動作を説明するためのタイムチャートである。
【符号の説明】
１  ブランチ・ヒストリ
２  命令読出抑止ビット設定手段
１０  情報処理装置（パイプライン・プロセッサ）
１１，１３，１５  選択回路
１２  命令アドレス生成回路
１２Ａ，１２Ｂ，１２Ｃ  命令アドレス生成部
１２Ａ−１，１２Ｂ−１，１２Ｃ−１  命令アドレスレジスタ
１２Ａ−２，１２Ｂ−２，１２Ｃ−２  加算器
１２Ａ−３，１２Ｂ−３，１２Ｃ−３  選択回路
１２ａ  選択回路
１４  命令フェッチパイプライン用キャッシュメモリ
１６  ブランチ・ヒストリ用アドレスレジスタ
１７  ブランチ・ヒストリ
１７ａ  分岐命令アドレス保持部（ＷＩＡＲ，ＩＡＲ）
１７ｂ  分岐先アドレス保持部（ＷＯＡＲ，ＴＩＡＲ）
１７ｃ  ＶＡＬＩＤビット
１７ｄ  ＧＩＤＤＹビット（命令読出抑止ビット）
１８  比較回路
１９  ＡＮＤゲート
２０  分岐先アドレス保持回路
２０Ａ，２０Ｂ，２０Ｃ  分岐先アドレスレジスタ
２０ａ  選択回路
２１  オペランドアドレス生成回路
２２  命令実行パイプライン用キャッシュメモリ
２３  ＧＩＤＤＹビット設定回路（命令読出抑止ビット設定手段）
３１Ａ〜３１Ｃ，３４Ａ〜３４Ｃ，３７Ａ〜３７Ｃ，３８Ａ〜３８Ｃ  ＡＮＤゲート
３２Ａ〜３２Ｃ，３３Ａ〜３３Ｃ  ＮＡＮＤゲート
３５Ａ〜３５Ｃ，３９Ａ〜３９Ｃ  ＯＲゲート
３６Ａ〜３６Ｃ  ラッチ
【図１】
0003683968.tif 000002
【図２】
0003683968.tif 000003
【図３】
0003683968.tif 000004
【図４】
0003683968.tif 000005
【図５】
0003683968.tif 000006
【図６】
0003683968.tif 000007
【図７】
0003683968.tif 000008
【図８】
0003683968.tif 000009
【図９】
0003683968.tif 000010
【図１０】
0003683968.tif 000011