(57)【要約】【課題】命令バッファの使用効率を向上させて命令バッファをコンパクトに構成する。【解決手段】複数の命令バッファ１−ｉ（ｉ＝０〜５）の各々は、命令列（命令語列）を保持（格納）するデータ部１ａ−ｉ（ｉ＝０〜５）と、当該命令バッファ１に保持されている命令列の次に供給する命令列が保持されている命令バッファ１を指示するポインタ部１ｂ−ｉ（ｉ＝０〜５）と、を有して構成される。命令列を解釈実行する命令実行部への命令列の供給は、このポインタ部１ｂの指示に従って行う。【選択図】　　　図１
2004038344.tif 000002
【特許請求の範囲】
【請求項１】
命令実行部へ命令を供給する命令フェッチ制御装置であって、
前記命令実行部へ供給する命令列が格納される複数の命令バッファと、
前記複数の命令バッファの各々に対して、次に供給する命令列が格納されている命令バッファを指示する指示手段と、
を備えたことを特徴とする命令フェッチ制御装置。
【請求項２】
命令実行部へ命令を供給する命令フェッチ制御装置であって、
前記命令実行部へ供給する命令列と、該命令列の次に供給する命令列が格納されている命令バッファを指示する指示情報とが格納される、複数の命令バッファと、
前記複数の命令バッファの各々に対して、対応する前記指示情報に基づいて、次に供給する後続命令列が格納されている命令バッファを指示する指示手段と、
を備えたことを特徴とする命令フェッチ制御装置。
【請求項３】
命令実行部へ命令を供給する命令フェッチ制御装置であって、
前記命令実行部へ供給する命令列と、該命令列の次に供給する命令列が格納されている命令バッファを指示する指示情報とが格納される、複数の命令バッファと、
前記複数の命令バッファの各々に対して、対応する前記指示情報に基づいて、次に供給する分岐予測先命令列が格納されている命令バッファを指示する指示手段と、
を備えたことを特徴とする命令フェッチ制御装置。
【請求項４】
前記指示情報は、
当該命令バッファに格納されている命令列の次に供給する後続命令列が格納されている命令バッファを指示する第一の指示情報と、該第一の指示情報の有効性を示す情報を含む、
ことを特徴とする請求項２記載の命令フェッチ制御装置。
【請求項５】
前記指示情報は、
当該命令バッファに格納されている命令列の次に供給する分岐予測先命令列が格納されている命令バッファを指示する第二の指示情報と、該第二の指示情報の有効性を示す情報を含む、
ことを特徴とする請求項３記載の命令フェッチ制御装置。
【請求項６】
更に、後続命令フェッチ要求アドレスが格納される第一のレジスタと、分岐予測先命令フェッチ要求アドレスが格納される第二のレジスタと、再命令フェッチ要求アドレスが格納される第三のレジスタとを備え、
予め定められた優先度に応じて、前記第一、第二、又は第三の何れか一つのレジスタに格納されたアドレスを命令フェッチ要求アドレスとし、該命令フェッチ要求アドレスに応じた命令列を前記命令バッファの一に格納する、
ことを特徴とする請求項１記載の命令フェッチ制御装置。
【請求項７】
前記第一のレジスタには、更に、後続命令フェッチ要求元の命令列が格納されている命令バッファを指示する後続命令フェッチ要求元情報が格納され、前記第二のレジスタには、分岐予測先命令フェッチ要求元の命令列が格納されている命令バッファを指示する分岐予測先命令フェッチ要求元情報が格納され、
前記後続命令フェッチ要求元情報に基づいて前記第一の指示情報を決定し、前記分岐予測先命令フェッチ要求元情報に基づいて前記第二の指示情報を決定する、
ことを特徴とする請求項６記載の命令フェッチ制御装置。
【請求項８】
前記指示手段は、次に前記命令実行部へ供給する命令列が格納されている命令バッファを指示する第一の識別子と、該第一の識別子により指示される命令バッファに格納されている命令列の先頭からのオフセット値とを設定し、
前記指示手段により設定された前記第一の識別子及び前記オフセット値により決定される命令を先頭とする命令列が前記命令実行部へ供給される、
ことを特徴とする請求項１記載の命令フェッチ制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報処理装置に係り、特に命令実行部（命令実行処理部）へ命令を供給するための命令フェッチ制御装置に関する。
【０００２】
【従来の技術】
パイプライン処理方式以降の高度な命令処理方式を採用した情報処理装置においては、一つの命令の実行の終了を待たずに、投機的に後続の命令の供給（命令フェッチ）を行うようにして投機的に後続の命令の処理を行うことで、性能の向上を図ってきた。
【０００３】
そのような情報処理装置では、例えば、分岐予測機構と密にカップリングされ命令実行部と完全にデカップリングされた命令フェッチ部を備えることにより、命令実行部へ必要十分な命令供給能力を確保し、優位な命令フェッチ性能を保ってきた。
【０００４】
また、命令フェッチ部の構成として、トレースキャッシュを用いた構成がある。この構成は、トレースキャッシュに命令列をパケット化してデコードした状態で格納しておき、その命令列を次に使用するときには、その格納されている命令列を使用するようにして、命令フェッチからデコードまでの処理を省いて、命令フェッチ損を隠蔽するものである。
【０００５】
【発明が解決しようとする課題】
しかしながら、このトレースキャッシュを用いた構成では、デコード済みの情報が格納されるために、エントリあたりのサイズ（容量）が大きくなるという欠点がある。また、これが分岐予測とリンクした構成になると、分岐の予測方向毎にその情報が格納されるために、ある命令域に対しては大きなトレースキャッシュ容量が必要になる。従って、広範囲な命令域をカバーするためのトレースキャッシュ容量を確保するのが困難になる。
【０００６】
また、トレースキャッシュを用いた構成では、デコード済みの情報を格納するために、トレースキャッシュに格納する前に（命令キャッシュ等からの命令フェッチデータの登録時）デコード処理が行われる。従って、トレースキャッシュミスの場合（分岐予測が外れた場合）は、通常の命令キャッシュからの命令フェッチ及びデコード処理以外に、トレースキャッシュに格納するための処理を含むパスも通ることになり、トレースキャッシュミスの場合のオーバーヘッドが大きくなる。
【０００７】
このようなことから、トレースキャッシュを用いた構成は、小さな単一ベンチマークテストのような対象命令域が狭い用途では絶大な効果を発揮するが、大規模なトランザクション処理を行うサーバー用途等のような複数のアプリケーションが実行される実環境では、命令キャッシュでさえ当然のようにキャッシュミスするのであるから、命令キャッシュよりもカバーする命令域の狭いトレースキャッシュでは、トレースキャッシュミスが頻発してしまう。すなわち、トレースキャッシュを用いた構成は、実環境では効果を発揮するどころか著しく処理能力が低下してしまう。
【０００８】
また、トレースキャッシュは、キャッシュメモリの一種であり、一般的な命令キャッシュと同様にキャッシュコヒーレンス制御が必要になる。従って、そのための制御が複雑になり、例えば、ストア命令による命令列の書き換えが発生した場合のトレースキャッシュ更新や無効化等の処理が複雑になり、また、それに伴って制御部の構成が大きくなるとい欠点もある。
【０００９】
それに対し、命令バッファを用いて命令フェッチを行う構成の場合は、もともとメインフレーム向けに開発されてきた構成であるため、前述のトレースキャッシュを用いた構成のような問題はなかった。
【００１０】
しかしながら、この命令バッファを用いた構成では、その命令バッファが静的な構成であったために、使用される命令バッファの平均的な使用効率が低いという問題があった。
【００１１】
例えば、複数に系列分けされた複数の命令バッファを用いて命令フェッチを行う構成がある。
図１３は、そのような複数の命令バッファを用いて命令フェッチを行う構成の一例を示した図である。
【００１２】
同図に示した例では、３つに系列（Ａ，Ｂ，Ｃ）に分けられた複数の命令バッファ（Ｉ−Ｂｕｆｆｅｒ＃０，＃１，＃２）を用いて、分岐予測が行われない場合には一の系列に属する命令バッファが使用され、分岐予測が行われた場合には今まで使用されていた系列とは異なる系列の命令バッファが使用される、等といったようにして処理が行われる。従って、この構成の場合、分岐予測が行われないときには、３つの系列のうちの一つの系列しか使用されないため、命令バッファの使用効率は３分の１となる。或いは、分岐予測が頻発するときには、３つの系列の全てが使用されるが、各系列の命令バッファの中の一部しか使用されないことになり、やはり使用効率が低くなる。このように、分岐予測が行われたか否かに応じて固定的に使用される命令バッファが決定されるような静的な命令バッファの構成の場合には、分岐予測が行われる頻度に応じて命令バッファの使用効率が変化し、また使用される命令バッファの使用効率が低くなるという問題があった。
【００１３】
また、特に近年のＬＳＩプロセス微細化に伴い、巨大な構成により必然的に生じる長距離配線が高速動作を阻害する主要因となってきており、トレースキャッシュや命令バッファを増やすことはデメリットが大きくなってきたものの、一方で、性能向上のために、主記憶、キャッシュメモリなどから命令実行部への命令の転送にかかわる遅延を隠蔽する命令バッファを多く確保したいジレンマがある。
【００１４】
本発明の課題は、上記実情に鑑み、命令バッファの使用効率を向上させて、命令バッファをコンパクトに構成することができる命令フェッチ制御装置を提供することである。
【００１５】
【課題を解決するための手段】
本発明の第一の態様は、命令実行部へ命令を供給する命令フェッチ制御装置であって、前記命令実行部へ供給する命令列が格納される複数の命令バッファと、前記複数の命令バッファの各々に対して、次に供給する命令列が格納されている命令バッファを指示する指示手段と、を備えた命令フェッチ制御装置である。
【００１６】
上記の構成によれば、命令バッファに格納されている命令列の次に供給する命令列が格納されている命令バッファが、指示手段により指示されるようになる。これにより、命令バッファを動的に構成することができ、命令バッファの使用効率を向上させて命令バッファをコンパクトに構成することができる。
【００１７】
本発明の第二の態様は、命令実行部へ命令を供給する命令フェッチ制御装置であって、前記命令実行部へ供給する命令列と、該命令列の次に供給する命令列が格納されている命令バッファを指示する指示情報とが格納される、複数の命令バッファと、前記複数の命令バッファの各々に対して、対応する前記指示情報に基づいて、次に供給する後続命令列が格納されている命令バッファを指示する指示手段と、を備えた命令フェッチ制御装置である。
【００１８】
上記の構成によれば、対応する指示情報に基づいて、命令バッファに格納されている命令列の次に供給する後続命令列が格納されている命令バッファが、指示手段により指示されるようになる。これにより、命令バッファを動的に構成することができ、命令バッファの使用効率を向上させて命令バッファをコンパクトに構成することができる。
【００１９】
本発明の第三の態様は、命令実行部へ命令を供給する命令フェッチ制御装置であって、前記命令実行部へ供給する命令列と、該命令列の次に供給する命令列が格納されている命令バッファを指示する指示情報とが格納される、複数の命令バッファと、前記複数の命令バッファの各々に対して、対応する前記指示情報に基づいて、次に供給する分岐予測先命令列が格納されている命令バッファを指示する指示手段と、を備えた命令フェッチ制御装置である。
【００２０】
上記の構成によれば、対応する指示情報に基づいて、命令バッファに格納されている命令列の次に供給する分岐予測先命令列が格納されている命令バッファが、指示手段により指示されるようになる。これにより、命令バッファを動的に構成することができ、命令バッファの使用効率を向上させて命令バッファをコンパクトに構成することができる。
【００２１】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照しながら説明する。
図１は、本発明の一実施の形態に係る命令フェッチ制御装置に適用される命令バッファの構成例を概念的に示した図である。
【００２２】
同図に示したように、その構成は、６つの命令バッファ１−ｉ（ｉ＝０〜５）により構成される（同図のＩ−Ｂｕｆｆｅｒ＃０，＃１，＃２，＃３，＃４，＃５）。尚、本例では、命令バッファ１の数を６つとしているが、その数は６つに限定されるものではない。
【００２３】
各命令バッファ１は、命令列（命令語列）を保持（格納）するデータ部１ａ−ｉ（ｉ＝０〜５）と、当該命令バッファ１に保持されている命令列の次に供給（使用）する命令列が保持されている命令バッファ１を指示するポインタ部１ｂ−ｉ（ｉ＝０〜５）（同図のｐｏｉｎｔｅｒ）と、を有して構成される。尚、このような当該命令バッファ１と、次に供給する命令列が保持されている命令バッファ１との関連付けは、後述する命令フェッチ要求部２及び分岐予測部３による処理に基づくものである。このポインタ部１ｂの指示に従って、命令列を解釈実行する命令実行部への命令列の供給が行われる。
【００２４】
図２（ａ），（ｂ），（ｃ）　は、ポインタ部１ｂの指示に従った命令バッファ１の使用例を模式的に示した図である。尚、同図（ａ），（ｂ），（ｃ）において、矢印はポインタ部１ｂの指示を示している。
【００２５】
同図（ａ）　は、分岐予測が一切行われなかったときの例を示した図である。この例では、命令バッファ１のポインタ部１ｂの指示により、当該命令バッファ１に保持された命令列の次に供給される命令列として後続の命令列が保持された命令バッファ１が指示された例である。すなわち、次に供給される後続の命令列が保持される命令バッファ１として、ポインタ部１ｂ−０により命令バッファ１−１が指示され、そのポインタ部１ｂ−１により命令バッファ１−２が指示され、そのポインタ部１ｂ−２により命令バッファ１−３が指示され、そのポインタ部１ｂ−３により命令バッファ１−４が指示され、そのポインタ部１ｂ−４により命令バッファ１−５が指示された例である。
【００２６】
また、同図（ｂ）　は、全ての命令バッファ１に保持された命令列において分岐成立が予測された命令が含まれていたとき（分岐予測が行われていたとき）の例を示した図である。この例では、命令バッファ１のポインタ部１ｂの指示により、当該命令バッファ１に保持された命令列において分岐予測が行われており次に供給される分岐予測先の命令列が保持された命令バッファ１が指示された例である。すなわち、次に供給される分岐予測先の命令列が保持された命令バッファ１として、ポインタ部１ｂ−０により命令バッファ１−１が指示され、そのポインタ部１ｂ−１により命令バッファ１−２が指示され、そのポインタ部１ｂ−２により命令バッファ１−３が指示され、そのポインタ部１ｂ−３により命令バッファ１−４が指示され、そのポインタ部１ｂ−４により命令バッファ１−５が指示された例である。
【００２７】
また、同図（ｃ）　は、一般的な例を示した図である。この例では、命令バッファ１のポインタ部１ｂの指示により、同図（ａ），（ｂ）に示した指示の何れかの指示が為された例である。すなわち、次に供給される後続の命令列が保持された命令バッファ１として、ポインタ部１ｂ−２により命令バッファ１−０が指示され、続いて、次に供給される分岐予測先の命令列が保持された命令バッファ１として、そのポインタ部１ｂ−０により命令バッファ１−５が指示され、そのポインタ部１ｂ−５により命令バッファ１−１が指示され、続いて、次に供給される後続の命令列が保持された命令バッファ１として、そのポインタ部１ｂ−１により命令バッファ１−４が指示され、そのポインタ部１ｂ−４により命令バッファ１−３が指示された例である。
【００２８】
また、このようにして命令列が命令実行部へ供給されるか、或いは分岐予測を誤る等した後は、不要になった命令列を保持する命令バッファ１が新たな命令フェッチ要求に使い回されるように、その命令バッファ１の無効化が行われ、データ部１ａ及びポインタ部１ｂの無効化及び初期化等が行われる。
【００２９】
以上のような構成により、従来の静的な構成であった命令バッファを動的な構成にすることが可能になり、命令バッファの使用効率を向上させることが可能になる。従って、命令バッファを、よりコンパクトに構成することが可能になる。
【００３０】
尚、ストア命令による命令列の書き換え等が発生してキャッシュコヒーレンスを保つための制御が必要と判断された場合には、命令バッファ１の全てに対し無効化を行い、再命令フェッチを行うようにすれば良い。つまり、キャッシュコヒーレンス制御はキャッシュメモリに対して行われるため、このように再度キャッシュメモリから命令列を取り出し直すことで、命令バッファ１のコヒーレンスも保つことが可能になる。
【００３１】
次に、情報処理装置に適用された、本発明の一実施の形態に係る命令フェッチ制御装置の詳細について説明する。
尚、本実施形態に係る情報処理装置では、命令フェッチのパイプラインが、ＩＡステージ、ＩＴステージ、ＩＭステージ、ＩＢステージ、及びＩＲステージの５つのステージにより構成される。
【００３２】
図３は、本発明の一実施の形態に係る命令フェッチ制御装置の構成例を示した図である。尚、本実施形態において、前述の命令バッファ１の各々は、命令語長（命令語）の総和が３２バイトの命令列を保持可能であるとする。
【００３３】
同図において、命令フェッチ要求部２は、無効化されている命令バッファ１が存在する限り命令フェッチ要求を出すものであって、入力された再命令フェッチ要求信号及び再命令フェッチ要求アドレス、分岐予測部３から出力された分岐予測先命令フェッチ要求信号及び分岐予測先命令フェッチ要求アドレス、又は内部において３２バイトづつ順次加算することで生成される命令アドレス等に基づいて、命令データが格納されている命令キャッシュ４を索引するための命令フェッチ要求アドレス（ＩＦ−ＥＡＧ）、命令フェッチ要求信号（ＩＦ−ＲＥＱ−ＶＡＬＩＤ）、及び一つの無効化されている命令バッファ１を指示するための識別ＩＤ（ＩＦ−ＲＥＱ−ＩＤ）を出力する、等の処理を行う。これにより、命令キャッシュ４に格納されている命令データの中からＩＦ−ＥＡＧに対応する命令列が読み出され、この命令列がＩＦ−ＲＥＱ−ＩＤに対応する命令バッファ１のデータ部１ａに格納されるようになる。
【００３４】
分岐予測部３は、ＩＦ−ＥＡＧに対応する命令列に分岐が成立する分岐命令が含まれているか否かを予測し、それが含まれていると予測した場合には、その分岐先の命令アドレスを予測し、その予測した分岐先命令アドレス（分岐予測先命令アドレス）と共に分岐予測先命令フェッチ要求信号を、命令フェッチ要求部２へ出力する。また、その場合には、ＩＦ−ＥＡＧに対応する命令列に分岐成立が予測された命令が含まれることを示す情報、及びその予測された命令の命令列上の位置を示す情報を、命令フェッチ制御部５へ出力する、等の処理を行う。
【００３５】
命令フェッチ制御部５は、ＩＦ−ＥＡＧに対応する命令列が保持されている命令バッファ１のポインタ部１ｂに、当該命令バッファ１に保持されている命令列の次に供給する命令列が保持されている命令バッファ１を指示する情報を格納する。また、前述の分岐予測部３により、そのＩＦ−ＥＡＧに対応する命令列に分岐成立が予測された命令が含まれていた場合には、そのポインタ部１ｂに、分岐予測部３から出力された、ＩＦ−ＥＡＧに対応する命令列に分岐成立が予測された命令が含まれることを示す情報、及びその予測された命令の命令列上の位置を示す情報を格納する、等の処理を行う。
【００３６】
命令バッファ（同図の命令一次バッファ（Ｉ−Ｂｕｆｆｅｒ））１の各々は、前述したように、データ部１ａとポインタ部１ｂを有し、データ部１ａは３２バイトの命令列を保持可能に構成されている。また、６つの命令バッファ１には、それぞれ０〜５の識別ＩＤが付されている。本実施形態では、命令バッファ１−０の識別ＩＤを０（＃０）、命令バッファ１−１の識別ＩＤを１（＃１）、命令バッファ１−２の識別ＩＤを２（＃２）、命令バッファ１−３の識別ＩＤを３（＃３）、命令バッファ１−４の識別ＩＤを４（＃４）、命令バッファ１−５の識別ＩＤを５（＃５）とする。
【００３７】
命令供給制御部６（指示手段）は、次に命令デコード部７へ供給する命令列を保持している命令バッファ１の識別ＩＤを示すカレントＩＤ（Ｃｕｒｒｅｎｔ−ＩＤ，第一の識別子）と、カレントＩＤが示す命令バッファ１に保持されている命令列の次に供給する命令列を保持している命令バッファ１の識別ＩＤを示すネクストＩＤ（Ｎｅｘｔ−Ｓｅｑ−ＩＤ，第二の識別子）と、カレントＩＤが示す命令バッファ１に保持されている命令列のオフセット位置を示すＮＳＩカウンタ（ＮＳＩ−Ｃｏｕｎｔｅｒ，オフセット値）を設定する、等の処理を行う。これにより、命令供給制御部６により設定された、カレントＩＤ、ネクストＩＤ、及びＮＳＩカウンタに従って、命令バッファ１に保持されている命令列が、命令デコード部７へ供給されるようになる。
【００３８】
次に、前述の命令フェッチ要求部２の主要回路について、図４及び図５を用いて説明する。
図４は、命令フェッチ要求部２に含まれる、ＩＦ−ＲＥＱ−ＩＤを生成する回路の構成例を示した図である。
【００３９】
同図に示した回路は、各命令バッファ１のポインタ部１ｂに保持されている情報に基づいて、一つの無効化されている命令バッファ１を検索し、その検索した一つの命令バッファ１の識別ＩＤを、ＩＦ−ＲＥＱ−ＩＤとして出力する回路である。
【００４０】
尚、詳細は後述するが、各命令バッファ１のポインタ部１ｂに保持されている情報には、当該命令バッファ１が有効であるか無効であるかを示す有効フラグ（Ｖａｌｉｄ）が保持されている。同図では、各命令バッファ１のポインタ部１ｂから読み出された有効フラグを、ＩＢｉ＿ＶＡＬＩＤ（ｉ＝０〜５）として示している。すなわち、ＩＢｉ＿ＶＡＬＩＤ（ｉ＝０〜５）は、命令バッファ１−ｉ（ｉ＝０〜５）の有効フラグを示している。
【００４１】
また、同図の回路では、各命令バッファ１に優先度が設けられるようにして、有効フラグが無効になっている命令バッファ１の中から優先度の最も高い命令バッファ１の識別ＩＤをＩＦ−ＲＥＱ−ＩＤとして出力するように構成されている。
【００４２】
すなわち、このようなＩＦ−ＲＥＱ−ＩＤを出力するため、同図の回路は次のように動作する。
エンコーダ回路（ＥＮＣ）１３は、インバータ回路１１−０からの入力が”Ｈ”であってかつそれ以外の入力が”Ｌ”のとき、すなわち、少なくとも命令バッファ１−０の有効フラグが無効であるときに（ＩＢ０＿ＶＡＬＩＤ＝”Ｌ”）、命令バッファ１−０の識別ＩＤである０を、ＩＦ−ＲＥＱ−ＩＤとして出力する。ここで、インバータ回路１１−０の出力信号は、ＩＦ−ＲＥＱ−ＩＤ−ＥＱ−０信号でもある。
【００４３】
尚、本実施形態において、”Ｈ”は、論理”Ｈ”を示し、”Ｌ”は、論理”Ｌ”を示す。
又は、エンコーダ回路１３は、アンド回路１２−１からの入力が”Ｈ”であってかつそれ以外の入力が”Ｌ”のとき、すなわち、少なくとも命令バッファ１−０の有効フラグが有効であってかつ命令バッファ１−１の有効フラグが無効であるときに（ＩＢ１＿ＶＡＬＩＤ＝”Ｌ”）、命令バッファ１−１の識別ＩＤである１を、ＩＦ−ＲＥＱ−ＩＤとして出力する。ここで、アンド回路１２−１の出力信号は、ＩＦ−ＲＥＱ−ＩＤ−ＥＱ−１信号でもある。
【００４４】
又は、アンド回路１２−２からの入力が”Ｈ”であってかつそれ以外の入力が”Ｌ”のとき、すなわち、少なくとも命令バッファ１−０及び１−１の有効フラグが有効であってかつ命令バッファ１−２の有効フラグが無効であるときに（ＩＢ２＿ＶＡＬＩＤ＝”Ｌ”）、命令バッファ１−２の識別ＩＤである２を、ＩＦ−ＲＥＱ−ＩＤとして出力する。ここで、アンド回路１２−２の出力信号は、ＩＦ−ＲＥＱ−ＩＤ−ＥＱ−２信号でもある。
【００４５】
又は、アンド回路１２−３からの入力が”Ｈ”であってかつそれ以外の入力が”Ｌ”のとき、すなわち、少なくとも命令バッファ１−０〜１−２の有効フラグが有効であってかつ命令バッファ１−３の有効フラグが無効であるときに（ＩＢ３＿ＶＡＬＩＤ＝”Ｌ”）、命令バッファ１−３の識別ＩＤである３を、ＩＦ−ＲＥＱ−ＩＤとして出力する。ここで、アンド回路１２−３の出力信号は、ＩＦ−ＲＥＱ−ＩＤ−ＥＱ−３信号でもある。
【００４６】
又は、アンド回路１２−４からの入力が”Ｈ”であってかつそれ以外の入力が”Ｌ”のとき、すなわち、少なくとも命令バッファ１−０〜１−３の有効フラグが有効であってかつ命令バッファ１−４の有効フラグが無効であるときに（ＩＢ４＿ＶＡＬＩＤ＝”Ｌ”）、命令バッファ１−４の識別ＩＤである４を、ＩＦ−ＲＥＱ−ＩＤとして出力する。ここで、アンド回路１２−４の出力信号は、ＩＦ−ＲＥＱ−ＩＤ−ＥＱ−４信号でもある。
【００４７】
又は、アンド回路１２−５からの入力が”Ｈ”であってかつそれ以外の入力が”Ｌ”のとき、すなわち、少なくとも命令バッファ１−０〜１−４の有効フラグが有効であってかつ命令バッファ１−５の有効フラグが無効であるときに（ＩＢ５＿ＶＡＬＩＤ＝”Ｌ”）、命令バッファ１−５の識別ＩＤである５を、ＩＦ−ＲＥＱ−ＩＤとして出力する。ここで、アンド回路１２−５の出力信号は、ＩＦ−ＲＥＱ−ＩＤ−ＥＱ−５信号でもある。
【００４８】
又は、全ての命令バッファ１の有効フラグが有効であったときには（ＩＢｉ＿ＶＡＬＩＤ（ｉ＝０〜５）＝”Ｈ”）、ＡＮＤ回路１２−６の出力が”Ｈ”となる（Ｉ−ＢＵＦＦＥＲ−ＦＵＬＬ）。この場合、エンコーダ回路１３は、全ての入力が”Ｌ”となり、ＩＦ−ＲＥＱ−ＩＤを出力しない。
【００４９】
以上のような構成により、命令バッファ１−０，１−１，１−２，１−３，１−４，１−５の順に、高い優先度が設けられ、有効フラグが無効の命令バッファ１の中から優先度の最も高い命令バッファ１の識別ＩＤが、ＩＦ−ＲＥＱ−ＩＤとして出力されるようになる。
【００５０】
続いて、図５は、命令フェッチ要求部２に含まれる、命令フェッチ要求アドレス（ＩＦ−ＥＡＧ）を生成する回路の構成例を示した図である。
同図に示した回路は、再命令フェッチ要求が出されたときは、再命令フェッチ要求アドレスを出力し、再命令フェッチ要求ではなく分岐予測先命令フェッチ要求が出されたときは、分岐予測先命令フェッチ要求アドレスを出力し、又は再命令フェッチ要求及び分岐予測先命令フェッチ要求の何れも出されないときは（後続命令フェッチ要求が出されたときは）、３２バイトを加算することで生成される後続命令フェッチ要求アドレスを出力するように構成される。
【００５１】
このように、再命令フェッチ要求、分岐予測先命令フェッチ要求、後続命令フェッチ要求の順に、高い優先度が設けられるように構成され、その優先度に従って、対応する命令フェッチ要求アドレス（ＩＦ−ＥＡＧ）が出力される。
【００５２】
具体的には、再命令フェッチ要求が出された場合、すなわち、再命令フェッチ要求信号及び再命令フェッチ要求アドレスが入力された場合、再命令フェッチ要求信号（”Ｈ”）は、有効フラグＶとしてレジスタ２１−１に格納されると共に、アンド回路２６及びインバータ回路２２へ入力される。尚、この再命令フェッチ要求信号は、同図のＲＥＩＦＣＨ−ＲＥＱ−ＧＯ信号でもある。また、再命令フェッチ要求アドレスは、ＲＥＩＦＣＨ−ＩＡＲとしてレジスタ２１−１に格納されると共に、アンド回路２６へ入力される。一方、インバータ回路２２の出力は、再命令フェッチ要求信号”Ｈ”が反転されて”Ｌ”となるため、その出力に接続されるアンド回路２４及び２５の出力は”Ｌ”とって、その出力に接続されるアンド回路２７及び２８の出力も”Ｌ”となる。従って、オア回路２９の出力であるＩＦ−ＥＡＧは、アンド回路２６の出力、すなわちＲＥＩＦＣＨ−ＩＡＲになる。
【００５３】
また、再命令フェッチ要求が出されずに分岐予測先命令フェッチ要求が出された場合、すなわち、分岐予測先命令フェッチ要求信号及び分岐予測先命令フェッチ要求アドレスが入力された場合、分岐予測先命令フェッチ要求信号（”Ｈ”）は、有効フラグＶ（ＴＡＲＧＥＴ−ＶＡＬＩＤ）としてレジスタ２１−２（第ニのレジスタ）に格納されると共に、アンド回路２４及びインバータ回路２３へ入力される。また、分岐予測先命令フェッチ要求アドレスは、ＴＡＲＧＥＴ−ＩＡＲとしてレジスタ２１−２に格納されると共に、アンド回路２７へ入力される。一方、再命令フェッチ要求は行われていないので、アンド回路２６の出力は”Ｌ”となり、またインバータ回路２２の出力は”Ｈ”となってアンド回路２４の出力は”Ｈ”となる。尚、このアンド回路２４の出力信号は、同図のＴＡＲＧＥＴ−ＲＥＱ−ＧＯ信号でもある。また、インバータ回路２３の出力は、分岐予測先命令フェッチ要求信号”Ｈ”が反転されて”Ｌ”となり、その出力に接続されるＡＮＤ回路２５の出力は”Ｌ”となって、その出力に接続されるＡＮＤ回路２８の出力も”Ｌ”になる。従って、オア回路２９の出力であるＩＦ−ＥＡＧは、アンド回路２７の出力、すなわちＴＡＧＥＴ−ＩＡＲになる。
【００５４】
また、レジスタ２１−２には、ＩＭ−ＩＤがＯＲＧ−ＩＤ（ＴＡＲＧＥＴ−ＯＲＧ−ＩＤ，分岐予測先命令フェッチ要求元情報）として格納される。尚、ＩＭ−ＩＤは、分岐予測が行われたときのＩＦ−ＲＥＱ−ＩＤであり、その分岐予測が前述の５つのステージ中のＩＭステージで行われたことを示している。これにより、分岐予測先命令フェッチ要求が出されたときに、その分岐予測先命令フェッチ要求元に対応する命令バッファ１の識別ＩＤを保持することが可能になり、分岐予測先命令フェッチ要求に対応する命令バッファ１の識別ＩＤとの関連付けが可能になる。
【００５５】
また、再命令フェッチ要求及び分岐予測先命令フェッチ要求が出されない場合（後続命令フェッチ要求が出された場合）、命令フェッチ要求信号（ＩＦ−ＲＥＱ−ＶＡＬＩＤ＝”Ｈ”）は、有効フラグＶ（ＳＥＱＵＥＮＴＩＡＬ−ＶＡＬＩＤ）としてレジスタ２１−３（第一のレジスタ）に格納されると共に、アンド回路２５へ入力される。また、加算器３０によりＩＦ−ＥＡＧに３２バイトを加算して生成された後続命令フェッチ要求アドレスがＳＥＱＵＥＮＴＩＡＬ−ＩＡＲとしてレジスタ２１−３に格納されると共に、アンド回路２８へ入力される。一方、再命令フェッチ要求及び分岐予測先命令フェッチ要求は行われていないので、ＲＥＩＦＣＨ−ＲＥＱ−ＧＯ及びＴＡＲＧＥＴ−ＲＥＱ−ＧＯは”Ｌ”となり、アンド回路２６及び２７の出力は”Ｌ”となる。また、インバータ回路２２及び２３の出力は”Ｈ”となり、アンド回路２５の出力は”Ｈ”となってアンド回路２８へ入力される。従って、オア回路２９の出力であるＩＦ−ＥＡＧは、アンド回路２８の出力、すなわちＳＥＱＵＥＮＴＩＡＬ−ＩＡＲになる。尚、アンド回路２５の出力信号は、同図のＳＥＱＵＥＮＴＩＡＬ−ＲＥＱ−ＧＯ信号でもある。
【００５６】
また、レジスタ２１−３には、ＩＦ−ＲＥＱ−ＩＤがＯＲＧ−ＩＤ（ＳＥＱＵＥＮＴＩＡＬ−ＯＲＧ−ＩＤ，後続命令フェッチ要求元情報）として格納される。これにより、後続命令フェッチ要求が出されたときに、その後続命令フェッチ要求元に対応する命令バッファ１の識別ＩＤが保持され、後続命令フェッチ要求に対応する命令バッファ１の識別ＩＤとの関連付けが可能になる。
【００５７】
尚、レジスタ２１−１にＩＦ−ＲＥＱ−ＩＤが格納されないのは、再命令フェッチ要求が出された場合には、各命令バッファ１のデータ部１ｂの有効フラグが全て無効にされて命令バッファ１−０から順に使用されるようになり、再命令フェッチ要求元に対応する命令バッファ１の識別ＩＤを保持する必要がないからである。
【００５８】
以上のような構成により、各命令フェッチ要求に対応した命令フェッチ要求アドレスが出力されるようになり、また、分岐予測先命令フェッチ要求元及び後続命令フェッチ要求元に対応する命令バッファ１の識別ＩＤ等が保持されるようになる。
【００５９】
次に、命令バッファ１のポインタ部１ｂに保持される情報について説明する。尚、この情報は、命令フェッチ制御部５により格納（設定）されるものである。
図６は、命令バッファ１のポインタ部１ｂに保持される情報の一例を示した図である。
【００６０】
同図に示したように、ポインタ部１ｂには、有効フラグ（Ｖａｌｉｄ）、命令フェッチアドレス（ＩＡＲ）、分岐成立予測フラグ（Ｐｒｅｄｉｃｔｅｄ）、分岐成立予測命令オフセット（Ｐｒｅｄ−Ｏｆｆｓｅｔ）、後続命令バッファ識別子（Ｎｅｘｔ−ＩＤ，第一の指示情報）、Ｎｅｘｔ−ＩＤ指示有効フラグ（Ｎｅｘｔ−Ｖａｌｉｄ）、分岐予測先命令バッファ識別子（Ｔａｒｇｅｔ−ＩＤ，第二の指示情報）、及びＴａｒｇｅｔ−ＩＤ指示有効フラグ（Ｔａｒｇｅｔ−Ｖａｌｉｄ）等の情報が保持される。
【００６１】
有効フラグは、前述した通り、当該命令バッファ１が有効であるか無効であるかを示すフラグである。
命令フェッチアドレス（ＩＡＲ）は、当該命令バッファ１のデータ部１ａに格納された命令列に対応する命令フェッチアドレス（ＩＦ−ＥＡＧ）である。
【００６２】
これらの有効フラグ及び命令フェッチアドレスは、命令フェッチ要求が出されて、ＩＦ−ＲＥＱ−ＩＤに対応する命令バッファ１に、ＩＦ−ＥＡＧに対応する命令列が格納されたときに、そのポインタ部１ｂに設定されるものである。
【００６３】
分岐成立予測フラグは、当該命令バッファ内に格納されている命令列に分岐成立が予測された命令が含まれているか否かを示すフラグである。
分岐成立予測命令オフセットは、当該命令バッファ１に保持されている命令列に分岐成立が予測された命令が含まれていた場合の、その予測された命令の命令列上の位置を示すものである。このように、分岐成立予測命令オフセットを保持させることにより、命令発行時に分岐成立が予測されている命令位置の判定が容易になる。
【００６４】
これら分岐成立予測フラグ及び分岐成立予測命令オフセットは、前述の分岐予測部３から得られる情報に基づいて設定されるものである。
後続命令バッファ識別子は、当該命令バッファ１に保持されている命令列の次に供給する後続の命令列が保持されている命令バッファ１の識別子を指示するものであり、当該命令バッファ１に対応する後続命令フェッチ要求が出されたときに設定される。
【００６５】
Ｎｅｘｔ−ＩＤ指示有効フラグは、後続命令バッファ識別子が有効であるか否かを示すフラグであり、後続命令バッファ識別子が設定されるときに、有効を示すフラグが設定される。
【００６６】
分岐予測先命令バッファ識別子は、当該命令バッファ１に保持されている命令列の次に供給する分岐予測先の命令列が保持されている命令バッファ１の識別子を指示するものであり、当該命令バッファ１に対応する分岐予測先命令フェッチ要求が出されたときに設定される。
【００６７】
Ｔａｒｇｅｔ−ＩＤ指示有効フラグは、分岐予測先命令バッファ識別子が有効であるか否かを示すフラグであり、分岐予測先命令バッファ識別子が設定されるときに、有効を示すフラグが設定される。
【００６８】
尚、同図では、ポインタ部１ｂにこれらの情報が保持される構成を示しているが、ポインタ部１ｂに保持される情報はこれらに限定されるものではなく、少なくとも、後続命令バッファ識別子、Ｎｅｘｔ−ＩＤ指示有効フラグ、分岐予測先命令バッファ識別子、及びＴａｒｇｅｔ−ＩＤ指示有効フラグが、ポインタ部１ｂに保持される構成であれば良い。
【００６９】
次に、命令フェッチ制御部２の主要回路構成について、図７乃至図９を用いて説明する。
図７は、前述のポインタ部１ｂに後続命令バッファ識別子（Ｎｅｘｔ−ＩＤ）及びＮｅｘｔ−ＩＤ指示有効フラグ（Ｎｅｘｔ−Ｖａｌｉｄ）を設定する回路の構成例を示した図である。尚、同図に示した回路は、命令バッファ１毎に対応して設けられている。
【００７０】
同図において、ＳＥＱＵＥＮＴＩＡＬ−ＲＥＱ−ＧＯ信号（図５のアンド回路２５の出力信号）、ＩＦ−ＲＥＱ−ＶＡＬＩＤ信号（命令フェッチ要求信号）、及びＳＥＱＵＥＮＴＩＡＬ−ＯＲＧ−ＩＤ−ＥＱ−ｘ信号（但し、ｘは命令バッファ１の識別ＩＤ）の全てが”Ｈ”の場合、アンド回路４１の出力は”Ｈ”となり、ＳＲ−ＦＦ（フリップフロップ）４２のＳＥＴ端子に”Ｈ”が入力される。尚、ＳＥＱＵＥＮＴＩＡＬ−ＯＲＧ−ＩＤ−ＥＱ−ｘ信号は、後続命令フェッチ要求が出されたときに、その後続命令フェッチ要求元の命令列が保持されている命令バッファ１の識別ＩＤを示すＳＥＱＵＥＮＴＩＡＬ−ＯＲＧ−ＩＤ（図５のレジスタ２１−３に保持されている）がｘである場合に、そのｘの識別ＩＤである命令バッファ１に対応して設けられた本回路の当該信号が”Ｈ”になることを示している。
【００７１】
このように、ＳＥＴ端子に”Ｈ”が入力されると、ＳＲ−ＦＦ４２の出力端子Ｑが”Ｈ”になり、ｘ−Ｎｅｘｔ−Ｖａｌｉｄ（但し、ｘは命令バッファ１の識別ＩＤ）が有効に設定される。すなわち、識別ＩＤがｘである命令バッファ１に対応して設けられた本回路のＳＲ−ＦＦ４２の出力端子Ｑの出力が”Ｈ”となり、識別ＩＤがｘである命令バッファ１のポインタ部１ｂに、Ｎｅｘｔ−Ｖａｌｉｄとして、Ｎｅｘｔ−ＩＤが有効であることを示すフラグが設定される。
【００７２】
また、ＳＲ−ＦＦ４２の出力端子Ｑが”Ｈ”になると、ＦＦ（フリップフロップ）４４のＩＨ端子に”Ｈ”が入力され、このときのＤ端子に入力されているＩＦ−ＲＥＱ−ＩＤ信号がＦＦ４４の出力端子Ｑから出力され、ｘ−Ｎｅｘｔ−ＩＤ（但し、ｘは命令バッファの識別ＩＤ）が設定される。すなわち、識別ＩＤがｘである命令バッファ１に対応して設けられた本回路のＦＦ４２の出力端子Ｑから出力されたＩＦ−ＲＥＱ−ＩＤが、識別ＩＤがｘである命令バッファ１のポインタ部１ｂに、Ｎｅｘｔ−ＩＤとして設定される。
【００７３】
一方、再命令フェッチ要求信号、ＣＡＮＣＥＬ−ＩＦ−ＩＤ−ｘ信号（但し、ｘは命令バッファ１の識別ＩＤ）、又はＲＥＬＥＡＳＥ−ＩＦ−ＩＤ−ｘ信号（但し、ｘは命令バッファ１の識別ＩＤ）の何れかが”Ｈ”の場合、オア回路４３の出力は”Ｈ”となり、ＳＲ−ＦＦ４２のＲＳＴ端子には”Ｈ”が入力される。
【００７４】
尚、再命令フェッチ要求信号は、再命令フェッチ要求が出されたときに”Ｈ”になる信号である。この再命令フェッチは、例えば、分岐予測が失敗した場合や割り込みが起きた場合、また、ストア命令による命令列の書き換え等が発生してキャッシュコヒーレンスを保つための制御が必要と判断された場合等に行われる。
【００７５】
また、ＣＡＮＣＥＬ−ＩＦ−ＩＤ−ｘ信号は、投機フェッチのキャンセルが行われ、保持されている命令列のキャンセルが行われた命令バッファ１の識別ＩＤがｘである場合に、そのｘの識別ＩＤである命令バッファ１に対応して設けられた本回路の当該信号が”Ｈ”になることを示している。
【００７６】
また、ＲＥＬＥＡＳＥ−ＩＦ−ＩＤ−ｘ信号は、保持されていた命令列が命令実行部へ供給されたことにより開放された命令バッファ１の識別ＩＤがｘである場合に、そのｘの識別ＩＤである命令バッファ１に対応して設けられた本回路の当該信号が”Ｈ”になることを示している。このＲＥＬＥＡＳＥ−ＩＦ−ＩＤ−ｘ信号は、カレントＩＤが別のＩＤに切り替わる毎に、元のカレントＩＤに対応して発行されるものである。
【００７７】
このように、ＲＳＴ端子に”Ｈ”が入力されると、ＳＲ−ＦＦ４２の出力端子Ｑが”Ｌ”になり、ｘ−Ｎｅｘｔ−Ｖａｌｉｄが無効に設定される。すなわち、ＣＡＮＣＥＬ−ＩＦ−ＩＤ−ｘ信号又はＲＥＬＥＡＳＥ−ＩＦ−ＩＤ−ｘ信号として”Ｈ”が入力されると、識別ＩＤがｘである命令バッファ１に対応して設けられた本回路のＳＲ−ＦＦ４２の出力端子Ｑの出力が”Ｌ”となり、識別ＩＤがｘである命令バッファ１のポインタ部１ｂに、Ｎｅｘｔ−Ｖａｌｉｄとして、Ｎｅｘｔ−ＩＤが無効であることを示すフラグが設定される。又は、再命令フェッチ要求が出されて、再命令フェッチ要求信号として”Ｈ”が入力されると、命令バッファ１毎に設けられた本回路の各ＳＲ−ＦＦ４２の出力端子Ｑの出力が”Ｌ”となり、全ての命令バッファ１のポインタ部１ｂにＮｅｘｔ−Ｖａｌｉｄとして、Ｎｅｘｔ−ＩＤが無効であることを示すフラグが設定される。
【００７８】
以上のような構成により、ポインタ部１ｂに、Ｎｅｘｔ−ＩＤ及びＮｅｘｔ−Ｖａｌｉｄが設定されるようになる。
続いて、図８は、前述のポインタ部１ｂに分岐予測先命令バッファ識別子（Ｔａｒｇｅｔ−ＩＤ）及びＴａｒｇｅｔ−ＩＤ指示有効フラグ（Ｔａｒｇｅｔ−Ｖａｌｉｄ）を設定する回路の構成例を示した図である。尚、同図に示した回路も、命令バッファ１毎に対応して設けられている。
【００７９】
同図において、ＴＡＲＧＥＴ−ＲＥＱ−ＧＯ信号（図５のアンド回路２４の出力）、ＩＦ−ＲＥＱ−ＶＡＬＩＤ信号（命令フェッチ要求信号）、及びＴＡＲＧＥＴ−ＯＲＧ−ＩＤ−ＥＱ−ｘ信号（但し、ｘは命令バッファ１の識別ＩＤ）の全てが”Ｈ”の場合、アンド回路５１の出力は”Ｈ”となり、ＳＲ−ＦＦ５２のＳＥＴ端子に”Ｈ”が入力される。尚、ＴＡＲＧＥＴ−ＯＲＧ−ＩＤ−ＥＱ−ｘ信号は、分岐予測先命令フェッチ要求が出されたときに、その分岐予測先命令フェッチ要求元の命令列が保持されている命令バッファ１の識別ＩＤを示すＴＡＲＧＥＴ−ＯＲＧ−ＩＤ（図５のレジスタ２１−２に保持されている）がｘである場合に、そのｘの識別ＩＤである命令バッファ１に対応して設けられた本回路の当該信号が”Ｈ”になることを示している。
【００８０】
このように、ＳＥＴ端子に”Ｈ”が入力されると、ＳＲ−ＦＦ５２の出力端子Ｑが”Ｈ”になり、ｘ−Ｔａｒｇｅｔ−Ｖａｌｉｄ（但し、ｘは命令バッファの識別ＩＤ）が有効に設定される。すなわち、識別ＩＤがｘである命令バッファ１に対応して設けられた本回路のＳＲ−ＦＦ５２の出力端子Ｑの出力が”Ｈ”となり、識別ＩＤがｘである命令バッファ１のポインタ部１ｂに、Ｔａｒｇｅｔ−Ｖａｌｉｄとして、Ｔａｒｇｅｔ−ＩＤが有効であることを示すフラグが設定される。
【００８１】
また、ＳＲ−ＦＦ５２の出力端子Ｑが”Ｈ”になると、ＦＦ５４のＩＨ端子に”Ｈ”が入力され、このときのＤ端子に入力されているＩＦ−ＲＥＱ−ＩＤ信号がＦＦ５４の出力端子Ｑから出力され、ｘ−Ｔａｒｇｅｔ−ＩＤ（但し、ｘは命令バッファの識別ＩＤ）が設定される。すなわち、識別ＩＤがｘである命令バッファ１に対応して設けられた本回路のＦＦ５２の出力端子Ｑから出力されたＩＦ−ＲＥＱ−ＩＤが、識別ＩＤがｘである命令バッファ１のポインタ部１ｂに、Ｔａｒｇｅｔ−ＩＤとして設定される。
【００８２】
一方、再命令フェッチ要求信号、ＣＡＮＣＥＬ−ＩＦ−ＩＤ−ｘ信号、又はＲＥＬＥＡＳＥ−ＩＦ−ＩＤ−ｘ信号の何れかが”Ｈ”の場合、オア回路５３の出力は”Ｈ”となり、ＳＲ−ＦＦ５２のＲＳＴ端子には”Ｈ”が入力される。
【００８３】
このように、ＲＳＴ端子に”Ｈ”が入力されると、ＳＲ−ＦＦ５２の出力端子Ｑが”Ｌ”になり、ｘ−Ｔａｒｇｅｔ−Ｖａｌｉｄが無効に設定される。すなわち、ＣＡＮＣＥＬ−ＩＦ−ＩＤ−ｘ信号又はＲＥＬＥＡＳＥ−ＩＦ−ＩＤ−ｘ信号として”Ｈ”が入力されると、識別ＩＤがｘである命令バッファ１に対応して設けられた本回路のＳＲ−ＦＦ５２の出力端子Ｑの出力が”Ｌ”となり、識別ＩＤがｘである命令バッファ１のポインタ部１ｂに、Ｔａｒｇｅｔ−Ｖａｌｉｄとして、Ｔａｒｇｅｔ−ＩＤが無効であることを示すフラグが設定される。又は、再命令フェッチ要求が出されて、再命令フェッチ要求信号として”Ｈ”が入力されると、命令バッファ１毎に設けられた本回路の各ＳＲ−ＦＦ５２の出力端子Ｑの出力が”Ｌ”となり、全ての命令バッファ１のポインタ部１ｂにＴａｒｇｅｔ−Ｖａｌｉｄとして、Ｔａｒｇｅｔ−ＩＤが無効であることを示すフラグが設定される。
【００８４】
以上のような構成により、ポインタ部１ｂに、Ｔａｒｇｅｔ−ＩＤ及びＴａｒｇｅｔ−Ｖａｌｉｄが設定されるようになる。
続いて、図９は、前述のポインタ部１ｂに有効フラグ（Ｖａｌｉｄ）を設定する回路の構成例を示した図である。尚、同図に示した回路も、命令バッファ１毎に対応して設けられている。
【００８５】
同図において、ＩＦ−ＲＥＱ−ＶＡＬＩＤ信号（命令フェッチ要求信号）、及びＩＦ−ＲＥＱ−ＩＤ−ＥＱ−ｘ信号（但し、ｘは命令バッファ１の識別ＩＤ）が”Ｈ”の場合、アンド回路６１の出力は”Ｈ”となり、ＳＲ−ＦＦ６２のＳＥＴ端子に”Ｈ”が入力される。尚、ＩＦ−ＲＥＱ−ＩＤ−ＥＱ−ｘ信号は、ＩＦ−ＲＥＱ−ＩＤがｘである場合に、そのｘの識別ＩＤである命令バッファ１に対応して設けられた本回路の当該信号が”Ｈ”になることを示している。
【００８６】
このように、ＳＥＴ端子に”Ｈ”が入力されると、ＳＲ−ＦＦ６２の出力端子Ｑが”Ｈ”になり、ＩＢｘ−Ｖａｌｉｄ（但し、ｘは命令バッファの識別ＩＤ）が有効に設定される。すなわち、識別ＩＤがｘである命令バッファ１に対応して設けられた回路のＳＲ−ＦＦ６２の出力端子Ｑの出力が”Ｈ”となり、識別ＩＤがｘである命令バッファ１のポインタ部１ｂに、Ｖａｌｉｄとして、当該命令バッファが有効であることを示すフラグが設定される。
【００８７】
一方、再命令フェッチ要求信号、ＣＡＮＣＥＬ−ＩＦ−ＩＤ−ｘ信号、又はＲＥＬＥＡＳＥ−ＩＦ−ＩＤ−ｘ信号の何れかが”Ｈ”の場合、オア回路６３の出力は”Ｈ”となり、ＳＲ−ＦＦ６２のＲＳＴ端子には”Ｈ”が入力される。
【００８８】
このように、ＲＳＴ端子に”Ｈ”が入力されると、ＳＲ−ＦＦ６２の出力端子Ｑが”Ｌ”になり、Ｖａｌｉｄが無効に設定される。すなわち、ＣＡＮＣＥＬ−ＩＦ−ＩＤ−ｘ信号又はＲＥＬＥＡＳＥ−ＩＦ−ＩＤ−ｘ信号として”Ｈ”が入力されると、識別ＩＤがｘである命令バッファ１に対応して設けられた本回路のＳＲ−ＦＦ６２の出力端子Ｑの出力が”Ｌ”となり、識別ＩＤがｘである命令バッファ１のポインタ部１ｂに、Ｖａｌｉｄとして、当該命令バッファ１が無効であることを示すフラグが設定される。又は、再命令フェッチ要求が出されて、再命令フェッチ要求信号として”Ｈ”が入力されると、命令バッファ１毎に設けられた本回路の各ＳＲ−ＦＦ６２の出力端子Ｑの出力が”Ｌ”となり、全ての命令バッファ１のポインタ部１ｂにＶａｌｉｄとして、当該命令バッファ１が無効であることを示すフラグが設定される。
【００８９】
以上のような構成により、ポインタ部１ｂに、Ｖａｌｉｄが設定されるようになる。
次に、命令バッファ１に保持されている命令を命令実行部へ供給するときの動作について説明する。
【００９０】
図１０は、その動作を模式的に示した図である。尚、同図は、図３に示した点線内における動作に対応する図でもある。
図１０に示したように、命令実行部への命令供給は、命令供給制御部６により設定された、カレントＩＤ（Ｃｕｒｒｅｎｔ−ＩＤ）、ネクストＩＤ（Ｎｅｘｔ−Ｓｅｑ−ＩＤ）、及びＮＳＩカウンタ（ＮＳＩ−Ｃｏｕｎｔｅｒ）に従って、命令バッファ１に保持されている命令列から３命令を切り出して供給することにより行われる。
【００９１】
すなわち、カレントＩＤ、ネクストＩＤ、及びＮＳＩカウンタに応じて、カレントＩＤが示す命令バッファ１が保持している命令列の次に、ネクストＩＤが示す命令バッファ１が保持している命令列を並べるようにし、カレントＩＤに対応する命令列の先頭からのＮＳＩカウンタの値（オフセット値）が示す位置を切り出し開始位置として、この切り出し開始位置からの３命令を切り出して命令実行部へ供給するようにして行われる。同図は、切り出した３命令を、命令実行部のレジスタＩＷＲ（＃０，＃１，＃２）へ格納するまでを示している。
【００９２】
尚、ＮＳＩカウンタの値は、カレントＩＤに対応する命令列の先頭からのオフセット値、すなわち命令実行部へ供給する３命令の切り出し開始位置となるので、同時供給可能最大命令数に応じて、ネクストＩＤが示す命令バッファ１にまたがって切り出される命令の範囲が絞られる。従って、ネクストＩＤに対応する命令列から部分的に限定して命令の切り出しが可能になり、回路構成を減らしてコスト削減が可能になる。
【００９３】
例えば、２，４，６バイト命令が含まれる命令列セットに適用させる場合、本実施形態では最大で３命令を発行可能であるから、６×３＝１８バイト分の切り出しが可能であれば良い。命令が２バイトアラインされているのであれば、ネクストＩＤに対応する命令列から切り出す必要のある命令は、最大でもネクストＩＤに対応する命令列の先頭から１６バイト分だけになることになる。
【００９４】
次に、命令バッファ１に保持されている命令列を矛盾無く命令実行部へ供給するための、命令供給制御部６により行われる、カレントＩＤ、ネクストＩＤ、及びＮＳＩカウンタの設定制御について説明する。
【００９５】
本実施形態における命令供給制御部６により行われる設定制御では、基本的に次の六つの場合に応じて、カレントＩＤ、ネクストＩＤ、及びＮＳＩカウンタが設定される。
【００９６】
第一の場合は、カレントＩＤが無効状態であった場合である。尚、カレントＩＤが無効状態になる場合は、例えば、情報処理装置の電源がＯＮされたとき等の初期状態の場合や、命令キャッシュ４がＢＵＳＹ状態のときに全ての命令バッファ１に保持されていた命令列が命令実行部へ全て供給されてしまい全ての命令バッファ１が無効になってしまった場合等に生じる。このような場合、カレントＩＤは、命令フェッチ要求が出されるまでは無効状態にされ、命令フェッチ要求が出された場合には、その命令フェッチ要求に対応する命令列が格納された命令バッファ１の識別ＩＤが設定される。また、ネクストＩＤは、そのカレントＩＤに対応するものが設定される。すなわち、カレントＩＤが無効状態又はカレントＩＤが示す命令バッファ１のポインタ部１ｂに有効なＮｅｘｔ−ＩＤが設定されていなければ、ネクストＩＤは無効状態になる。又は、カレントＩＤが示す命令バッファ１のポインタ部１ｂに有効なＮｅｘｔ−ＩＤが設定されていたときには、その有効なＮｅｘｔ−ＩＤがネクストＩＤに設定される。また、この場合、ＮＳＩカウンタの値は変更されない。
【００９７】
第二の場合は、命令発行許可されなかった場合である。このような場合、カレントＩＤ、ネクストＩＤ、及びＮＳＩカウンタは、変更されない。但し、次の命令フェッチ要求が出されて、カレントＩＤが示す命令バッファ１のポインタ部１ｂに有効なＮｅｘｔ−ＩＤが設定されたときには、それがネクストＩＤに設定される。
【００９８】
第三の場合は、命令発行範囲（命令供給範囲）において分岐成立が予測された命令の存在が検出された場合である。このような場合、カレントＩＤは、そのカレントＩＤが示す命令バッファ１のポインタ部１ｂに保持されているＴａｒｇｅｔ−ＩＤに変更・設定される。また、ネクストＩＤは、そのＴａｒｇｅｔ−ＩＤが示す命令バッファ１のポインタ部１ｂに保持されている有効なＮｅｘｔ−ＩＤが設定される。また、ＮＳＩカウンタは、Ｔａｒｇｅｔ−ＩＤが示す命令バッファ１に保持されている命令列上の分岐予測先の位置（分岐予測先アドレス）がオフセット値として設定される。
【００９９】
尚、この第三の場合において、例えば図１１に示したように、切り出す命令範囲（命令供給範囲）が、ネクストＩＤが示す命令バッファ１（同図のＮｅｘｔ　Ｓｅｑｕｅｎｔｉａｌ　Ｉ−Ｂｕｆｆｅｒ）に保持されている命令列にまたがっている場合であって、その切り出す命令範囲内のネクストＩＤ側の命令列に分岐成立が予測された命令（同図のＰｒｅｄｉｃｔの命令）があると予測されている場合がある（分岐成立が予測された命令がない場合には、後述の第四の場合に該当する）。このような場合、カレントＩＤが切り替えられる（変更される）際に設定されるべきＴａｒｇｅｔ−ＩＤは、ネクストＩＤが示す命令バッファ１のポインタ部１ｂに保持されている有効なＴａｒｇｅｔ−ＩＤでなければならないので、ネクストＩＤが示す命令バッファ１のポインタ部１ｂに保持されている情報から索引して設定されるようにする。
【０１００】
第四の場合は、命令発行の結果ＮＳＩカウンタからキャリーが検出された場合である。尚、ＮＳＩカウンタからキャリーが検出される場合は、ＮＳＩカウンタの値が、命令バッファ１が保持可能な命令列範囲である３２バイトに対応する３２であるか、又はその３２を超えた場合に生じる。このような場合、カレントＩＤは、カレントＩＤが示す命令バッファ１のポインタ部１ｂに保持されている有効なＮｅｘｔ−ＩＤへ変更・設定される。ネクストＩＤは、そのＮｅｘｔ−ＩＤが示す命令バッファ１のポインタ部１ｂに保持されている有効なＮｅｘｔ−ＩＤが設定される。また、ＮＳＩカウンタは、計算結果のキャリーを無視した値が設定される。例えば、ＮＳＩカウンタの値が２４であったときに、切り出された３命令が４バイト×３命令で１２バイトであったときには、２４＋１２−３２＝４がＮＳＩカウンタに設定される。
【０１０１】
第五の場合は、再命令フェッチ要求が出されたことが検出された場合である。このような場合は、カレントＩＤが０に設定され、ネクストＩＤがカレントＩＤが示す命令バッファ１−０のポインタ部１ｂ−０に保持されている有効なＮｅｘｔ−ＩＤに設定される。但し、再命令フェッチ要求が出されたときは、まだ次の命令フェッチ要求が出されていないのでポインタ部１ｂ−０には有効なＮｅｘｔ−ＩＤが設定されておらず、通常は、ネクストＩＤは無効状態になる。また、ＮＳＩカウンタは、再命令フェッチ要求アドレスに対応したオフセット値が設定される。
【０１０２】
第六の場合は、命令発行範囲において分岐成立が予測された命令の存在が検出されなかった場合であってかつ命令発行の結果ＮＳＩカウンタからキャリーが検出されなかった場合である。このような場合は、カレントＩＤ及びネクストＩＤは変更されない。但し、ネクストＩＤが無効状態であったときに、次の命令フェッチ要求が出されて、カレントＩＤが示す命令バッファ１のポインタ部１ｂに有効なＮｅｘｔ−ＩＤが設定されたときには、それがネクストＩＤに設定される。また、ＮＳＩカウンタには、計算結果が設定される。例えば、ＮＳＩカウンタの値が１８であったときに、切り出された３命令が６バイト（２バイト×３）であったときには、１８＋６＝２４がＮＳＩカウンタに設定される。
【０１０３】
以上の６つの場合に応じてカレントＩＤ、ネクストＩＤ、及びＮＳＩカウンタが設定されることで、命令を矛盾なく命令実行部へ供給することが可能になり、矛盾の無い命令フェッチを実現することが可能になる。
【０１０４】
尚、カレントＩＤが、Ｎｅｘｔ−ＩＤ或いはＴａｒｇｅｔ−ＩＤへ切り替えられる（変更・設定される）場合において、後続命令フェッチ要求又は分岐予測先命令フェッチ要求が出されていない場合が有り得る。この場合、Ｎｅｘｔ−Ｖａｌｉｄ及びＴａｒｇｅｔ−Ｖａｌｉｄは無効になっているはずなので、この場合の切り替え動作を無効としなければ、矛盾した命令供給を行ってしまうことになる。従って、このような場合には、カレント有効フラグを無効に設定して、カレントＩＤを無効状態にし、前述の第一の場合の設定を行うようにする。尚、カレント有効フラグは、カレントＩＤに設定されるべきＮｅｘｔ−ＩＤ又はＴａｇｅｔ−ＩＤが確定されていない（保持されていない）場合に無効に設定され、それらが確定された場合に有効に設定されるものである。
【０１０５】
また、このカレント有効フラグが無効である場合に、命令フェッチ要求部２に保持されているＯＲＧ−ＩＤ（ＳＥＱＵＥＮＴＩＡＬ−ＯＲＧ−ＩＤ又はＴＡＲＧＥＴ−ＯＲＧ−ＩＤ）と、無効状態になる前のカレントＩＤが一致していなければ、矛盾した命令フェッチ要求を行っていることになるので、回避動作を行わなければならない。
【０１０６】
例えば、前述の第四の場合において、カレントＩＤに対応する命令列の後続命令フェッチ要求が出ていない場合（カレントＩＤが示す命令バッファ１に保持されている命令列の後続の命令列の後続命令フェッチ要求が出ていない場合）には、ＳＥＱＵＥＮＴＩＡＬ−ＯＲＧ−ＩＤがカレントＩＤに一致し、ＳＥＱＵＥＮＴＩＡＬ−ＩＡＲが、カレントＩＤが示す命令バッファ１に保持されている命令列の後続の命令列に対応する後続命令フェッチ要求アドレスになっているはずである。また、このときＳＥＱＵＥＮＴＩＡＬ−ＶＡＬＩＤも有効になっている。従って、これらのＳＥＱＵＥＮＴＩＡＬ−ＯＲＧ−ＩＤ、ＳＥＱＵＥＮＴＩＡＬ−ＩＡＲ、ＳＥＱＵＥＮＴＩＡＬ−ＶＡＬＩＤのチェックを行うことで、命令フェッチが正しく行われているか否かといった命令フェッチ動作の正当性を検出することが可能になる。尚、これらのチェックは、必ずしも全てについて行う必要はなく、例えば、ＳＥＱＵＥＮＴＩＡＬ−ＯＲＧ−ＩＤと無効状態になる前のカレントＩＤのチェックのみを行うようにしても良い。
【０１０７】
また、例えば前述の第三の場合についても同様にして、ＴＡＲＧＥＴ−ＯＲＧ−ＩＤ、ＴＡＲＧＥＴ−ＩＡＲ、ＴＡＲＧＥＴ−ＶＡＬＩＤのチェックを行うことにより、命令フェッチ動作の正当性を検出することが可能になる。
【０１０８】
また、カレントＩＤが無効状態になるのは命令供給時であるので、この時点において実行中の命令或いは実行を開始しようとする命令が存在する（例えばデコードステージに存在する）ことになる。従って、前述のチェックにより命令フェッチの矛盾が検出された場合（命令フェッチの正当性が検出されなかった場合）には、その存在する何れかの命令の実行完了時点等で、強制的に再命令フェッチを行い、命令フェッチも含めてやり直すようにすれば、矛盾した命令フェッチ制御（命令フェッチに係る各種設定等）が破棄され解消されるようになる。
【０１０９】
尚、命令セット及びそれに対する命令実行部等の実現方法からくる制約により、特殊な制御を必要とする場合がある。例えば、ＳＰＡＲＣ　Ａｒｃｈｉｔｅｃｔｕｒｅ　Ｖｅｒｓｉｏｎ　９においては、分岐命令はディレイスロット命令を伴う。すなわち、このアーキテクチュアでは、分岐命令から分岐先命令へ移行する場合に、その分岐命令の一つ後続の命令（ディレイスロット命令）を実行した後に分岐先命令へ移行するようにして処理が行われる。
【０１１０】
図１２は、そのようなディレイスロット命令を伴う命令列が供給される場合の一例を示した図である。
同図に示したように、分岐成立が予測されている命令（同図のＰｒｅｄｉｃｔの命令）までが同時に供給されたが、それに続くディレイスロット命令が同時に供給されなかった場合には、分岐成立が予測されているにも関わらずディレイスロット命令が供給されるまで、分岐予測先の命令列を供給するよう切り替えを行うことができない。
【０１１１】
従って、このようなディレイスロット命令を伴うような場合において、命令供給制御部６による設定制御では、前述の第一乃至第六の場合に加えて、次の第七及び第八の場合に応じて、カレントＩＤ、ネクストＩＤ、及びＮＳＩカウンタが設定される。
【０１１２】
第七の場合は、図１２に示したように、命令発行範囲において分岐予測されていることが検出されたが、ディレイスロット命令が同時に発行されなかった場合である。
【０１１３】
このような場合、カレントＩＤは、ＮＳＩカウンタの値に基づく計算結果に応じて変更されないか或いはカレントＩＤが示す命令バッファ１のポインタ部１ｂに保持されている有効なＮｅｘｔ−ＩＤに設定される。但し、このとき、残されたディレイスロット命令が発行された場合（後述の第八の場合）を考慮して、カレントＩＤが示す命令バッファ１のポインタ部１ｂに保持されている有効なＴａｒｇｅｔ−ＩＤが一時的に記憶される。ネクストＩＤは、カレントＩＤに対応するもの（カレントＩＤが示す命令バッファ１のポインタ部１ｂに保持されている有効なＮｅｘｔ−ＩＤ）に変更・設定される。また、ＮＳＩカウンタは、計算結果のキャリーを無視した値が設定される。
【０１１４】
尚、この第七の場合は、分岐成立が予測された命令の存在が検出されなかった場合と同様の設定が行われる。
第八の場合は、第七の場合において、残されたディレイスロット命令が発行された場合である。このような場合、カレントＩＤは、前述の第七の場合において一次的に記憶されたＴａｒｇｅｔ−ＩＤ、すなわち、ディレイスロット命令前の分岐成立が予測された命令が保持されていた命令バッファ１のポインタ部１ｂに保持されていたＴａｒｇｅｔ−ＩＤが設定される。また、ネクストＩＤは、このＴａｒｇｅｔ−ＩＤに対応する命令バッファ１のポインタ部１ｂに保持されている有効なＮｅｘｔ−ＩＤが設定される。また、ＮＳＩカウンタは、Ｔａｒｇｅｔ−ＩＤが示す命令バッファ１に保持されている命令列上の分岐予測先命令の位置を示すオフセット値が設定される。
【０１１５】
また、命令発行範囲において分岐成立が予測された命令の存在が検出され、ディレイスロット命令も同時に発行された場合については、前述の第３の場合と同様の設定が行われる。
【０１１６】
尚、このような分岐命令がディレイスロット命令を伴うアーキテクチュアの場合においても、カレントＩＤがＴａｒｇｅｔ−ＩＤへ切り替えられる際に、分岐予測先命令フェッチ要求が出ていない場合があり得る。従って、このような場合にも、前述と同様に、カレント有効フラグを無効にして、この場合の切り替え動作を無効にし、第一の場合の設定を行うようにする。
【０１１７】
以上、本発明の命令フェッチ制御装置について詳細に説明したが、本発明は上記実施形態に限定されず、本発明の要旨を逸脱しない範囲において、各種の改良及び変更を行っても良いのはもちろんである。
【０１１８】
（付記１）　命令実行部へ命令を供給する命令フェッチ制御装置であって、
前記命令実行部へ供給する命令列が格納される複数の命令バッファと、
前記複数の命令バッファの各々に対して、次に供給する命令列が格納されている命令バッファを指示する指示手段と、
を備えたことを特徴とする命令フェッチ制御装置。
（付記２）　命令実行部へ命令を供給する命令フェッチ制御装置であって、
前記命令実行部へ供給する命令列と、該命令列の次に供給する命令列が格納されている命令バッファを指示する指示情報とが格納される、複数の命令バッファと、
前記複数の命令バッファの各々に対して、対応する前記指示情報に基づいて、次に供給する後続命令列が格納されている命令バッファを指示する指示手段と、
を備えたことを特徴とする命令フェッチ制御装置。
（付記３）　命令実行部へ命令を供給する命令フェッチ制御装置であって、
前記命令実行部へ供給する命令列と、該命令列の次に供給する命令列が格納されている命令バッファを指示する指示情報とが格納される、複数の命令バッファと、
前記複数の命令バッファの各々に対して、対応する前記指示情報に基づいて、次に供給する分岐予測先命令列が格納されている命令バッファを指示する指示手段と、
を備えたことを特徴とする命令フェッチ制御装置。
（付記４）　前記指示情報は、
当該命令バッファに格納されている命令列の次に供給する後続命令列が格納されている命令バッファを指示する第一の指示情報と、該第一の指示情報の有効性を示す情報を含む、
ことを特徴とする付記２記載の命令フェッチ制御装置。
（付記５）　前記指示情報は、
当該命令バッファに格納されている命令列の次に供給する分岐予測先命令列が格納されている命令バッファを指示する第二の指示情報と、該第二の指示情報の有効性を示す情報を含む、
ことを特徴とする付記３記載の命令フェッチ制御装置。
（付記６）　更に、後続命令フェッチ要求アドレスが格納される第一のレジスタと、分岐予測先命令フェッチ要求アドレスが格納される第二のレジスタと、再命令フェッチ要求アドレスが格納される第三のレジスタとを備え、
予め定められた優先度に応じて、前記第一、第二、又は第三の何れか一つのレジスタに格納されたアドレスを命令フェッチ要求アドレスとし、該命令フェッチ要求アドレスに応じた命令列を前記命令バッファの一に格納する、
ことを特徴とする付記１記載の命令フェッチ制御装置。
（付記７）　前記第一のレジスタには、更に、後続命令フェッチ要求元の命令列が格納されている命令バッファを指示する後続命令フェッチ要求元情報が格納され、前記第二のレジスタには、分岐予測先命令フェッチ要求元の命令列が格納されている命令バッファを指示する分岐予測先命令フェッチ要求元情報が格納され、
前記後続命令フェッチ要求元情報に基づいて前記第一の指示情報を決定し、前記分岐予測先命令フェッチ要求元情報に基づいて前記第二の指示情報を決定する、
ことを特徴とする付記６記載の命令フェッチ制御装置。
（付記８）　前記指示手段は、次に前記命令実行部へ供給する命令列が格納されている命令バッファを指示する第一の識別子と、該第一の識別子により指示される命令バッファに格納されている命令列の先頭からのオフセット値とを設定し、
前記指示手段により設定された前記第一の識別子及び前記オフセット値により決定される命令を先頭とする命令列が前記命令実行部へ供給される、
ことを特徴とする付記１記載の命令フェッチ制御装置。
（付記９）　前記複数の命令バッファの各々には、更に、格納されている命令列に分岐成立が予測された命令が含まれていた場合に前記命令列の何れの位置に前記分岐成立が予測された命令が存在するかを示す情報が格納される、
ことを特徴とする付記１に記載の命令フェッチ制御装置。
【０１１９】
（付記１０）　前記指示手段は、一命令以上の命令列が前記命令実行部へ供給されたときに、該供給された命令列の命令語或いは命令語長の総和を前記オフセット値に加算し、該加算されたオフセット値により前記命令実行部へ供給された命令列に続く後続命令を指示し、
該指示された後続命令を先頭とする命令列が次に命令実行部へ供給される、
ことを特徴とする付記８記載の命令フェッチ制御装置。
【０１２０】
（付記１１）　前記指示手段は、
再命令フェッチが行われる場合、前記第一の識別子を再命令フェッチ要求に対応する識別子に設定し直し、前記オフセット値を再命令フェッチ要求アドレスに対応する値に設定し直す、
ことを特徴とする付記８記載の命令フェッチ制御装置。
【０１２１】
（付記１２）　前記指示手段は、
前記第一の識別子を設定する際に、前記第一の識別子として設定される識別子に対応する命令バッファが確定されていない場合には、前記第一の識別子を無効に設定し、前記第一の識別子として設定される識別子に対応する命令バッファが確定された後に、該確定された命令バッファに対応する識別子を、前記第一の識別子として設定する、
ことを特徴とする付記８記載の命令フェッチ制御装置。
【０１２２】
（付記１３）　前記第一の識別子に対応する命令バッファに格納されている命令列が前記命令実行部へ供給された後に、当該命令バッファを無効化する、
ことを特徴とする付記８記載の命令フェッチ制御装置。
【０１２３】
（付記１４）　更に、キャッシュコヒーレンス動作を行う必要があるか否かを判定する判定手段、
を備えたことを特徴とする付記１記載の命令フェッチ制御装置。
【０１２４】
（付記１５）　前記判定手段によりキャッシュコヒーレンス動作が必要と判定されたときは、前記命令バッファの全てを無効化して再命令フェッチを行う、
ことを特徴とする付記１４記載の命令フェッチ制御装置。
【０１２５】
（付記１６）　更に、前記第一又は第二のレジスタに格納されている内容に基づいて、命令フェッチの矛盾を検出する検出手段、
を備えたことを特徴とする付記７記載の命令フェッチ制御装置。
【０１２６】
（付記１７）　前記検出手段により前記命令フェッチの矛盾が検出されたときは、再命令フェッチを行う、
ことを特徴とする付記１６記載の命令フェッチ制御装置。
【０１２７】
（付記１８）　前記検出手段は、
前記指示手段により設定される、次に前記命令実行部へ供給する命令列が格納されている命令バッファを指示する第一の識別子として、次に設定される識別子に対応する命令バッファが確定されていない場合に、該確定前の第一の識別子と、前記後続命令フェッチ要求元情報或いは前記分岐予測先命令フェッチ要求元情報により指示されている命令バッファに対応する識別子とが一致しないときに、命令フェッチの矛盾を検出する、
ことを特徴とする付記１６記載の命令フェッチ制御装置。
【０１２８】
（付記１９）　命令実行部へ命令を供給する命令フェッチ制御装置であって、
前記命令実行部へ供給する命令列と、該命令列の次に供給する命令列が格納されている命令バッファを指示する指示情報とが格納される、複数の命令バッファと、
前記複数の命令バッファの各々に対して、対応する前記指示情報に基づいて、次に供給する命令列が格納されている命令バッファを指示する指示手段と、
を備え、
前記指示手段は、次に前記命令実行部へ供給する命令列が格納されている命令バッファを指示する第一の識別子により指示される命令バッファに格納されている命令列の次に供給する命令列が格納されている命令バッファを指示する第二の識別子として、当該命令バッファに格納されている前記指示情報により指示される命令バッファに対応する識別子を設定し、
前記指示手段により設定された、前記第一の識別子、前記第二の識別子、及び前記第一の識別子により指示される命令バッファに格納されている命令列の先頭からのオフセット値、に基づいて複数の命令バッファにまたがる命令列が前記命令実行部へ供給される、
ことを特徴とする命令フェッチ制御装置。
【０１２９】
（付記２０）　前記指示手段は、
一命令以上の命令列が前記命令実行部へ供給されたときに、該供給された命令列の命令語或いは命令語長の総和を前記オフセット値に加算した結果、前記命令バッファが格納可能な命令列範囲を超えた場合、前記第一の識別子により指示される命令バッファに格納されている前記指示情報により指示される後続命令列が格納されている命令バッファに対応する識別子を、前記第一の識別子として設定する、
ことを特徴とする付記１９記載の命令フェッチ制御装置。
【０１３０】
（付記２１）　前記指示手段は、
分岐成立が予測された命令が命令実行部へ供給されて、次に供給される命令列が前記分岐成立が予測された命令の分岐予測先命令になった場合、前記分岐成立が予測された命令が格納されていた命令バッファに格納されていた前記指示情報により指示される分岐予測先命令列が格納されている命令バッファに対応する識別子を前記第一の識別子として設定し、前記分岐予測先命令列上の分岐予測先命令の位置に応じた値を前記オフセット値として設定する、
ことを特徴とする付記１９記載の命令フェッチ制御装置。
【０１３１】
（付記２２）　投機フェッチのキャンセルが行われた場合、キャンセルされた命令列が格納されている命令バッファを無効化し、該無効化した命令バッファに格納されている前記指示情報を無効化する、
ことを特徴とする付記１９記載の命令フェッチ制御装置。
【０１３２】
（付記２３）　前記指示手段は、
ディレイスロット命令を伴う分岐命令を備えたアーキテクチュアが適用された場合において、分岐成立が予測された命令の分岐予測先命令が前記命令実行部へ供給されるときは、前記ディレイスロット命令が供給された後に前記分岐予測先命令が供給されるように、前記第一の識別子、前記第二の識別子、及び前記オフセット値を設定する、
ことを特徴とする付記１９記載の命令フェッチ制御装置。
【０１３３】
（付記２４）　命令実行部へ命令を供給する命令フェッチ制御方法であって、
前記命令実行部へ供給する命令列が格納される複数の命令バッファの各々に対して、次に供給する命令列が格納されている命令バッファを指示するステップ、
を備えたことを特徴とする命令フェッチ制御方法。
【０１３４】
（付記２５）　命令実行部へ命令を供給する命令フェッチ制御方法であって、
（ａ）前記命令実行部へ供給する命令列と、該命令列の次に供給する命令列が格納されている命令バッファを指示する指示情報とが格納される、複数の命令バッファの各々に対して、対応する前記指示情報に基づいて、次に供給する後続命令列が格納されている命令バッファを指示するか、又は次に供給する分岐予測先命令列が格納されている命令バッファを指示するか、又は次に供給する後続命令列が格納されている命令バッファ及び分岐予測先命令列が格納されている命令バッファを指示するステップ、
を備えたことを特徴とする命令フェッチ制御方法。
【０１３５】
（付記２６）　前記指示情報は、
当該命令バッファに格納されている命令列の次に供給する後続命令列が格納されている命令バッファを指示する第一の指示情報と、該第一の指示情報の有効性を示す情報を含む、
ことを特徴とする付記２５記載の命令フェッチ制御方法。
【０１３６】
（付記２７）　前記指示情報は、更に、
当該命令バッファに格納されている命令列の次に供給する分岐予測先命令列が格納されている命令バッファを指示する第二の指示情報と、該第二の指示情報の有効性を示す情報を含む、
ことを特徴とする付記２６記載の命令フェッチ制御方法。
【０１３７】
（付記２８）　更に、（ｂ）予め定められた優先度に応じて、後続命令フェッチ要求アドレスが格納される第一のレジスタ、分岐予測先命令フェッチ要求アドレスが格納される第二のレジスタ、又は再命令フェッチ要求アドレスが格納される第三のレジスタの何れか一つのレジスタに格納されたアドレスを命令フェッチ要求アドレスとし、該命令フェッチ要求アドレスに応じた命令列を前記命令バッファの一に格納するステップを含む、
ことを特徴とする付記２７記載の命令フェッチ制御方法。
【０１３８】
（付記２９）　更に、（ｃ）前記第一のレジスタに格納された、後続命令フェッチ要求元の命令列が格納されている命令バッファを指示する後続命令フェッチ要求元情報に基づいて前記第一の指示情報を決定し、前記第二のレジスタに格納された、分岐予測先命令フェッチ要求元の命令列が格納されている命令バッファを指示する分岐予測先命令フェッチ要求元情報に基づいて前記第二の指示情報を決定するステップ、
を備えたことを特徴とする付記２８記載の命令フェッチ制御方法。
【０１３９】
（付記３０）　前記ステップ（ａ）は、（ｅ）次に前記命令実行部へ供給する命令列が格納されている命令バッファを指示する第一の識別子と、該第一の識別子により指示される命令バッファに格納されている命令列の先頭からのオフセット値とを設定するステップを含み、
設定された前記第一の識別子と前記オフセット値とにより決定される命令を先頭とする命令列が前記命令実行部へ供給される、
ことを特徴とする付記２９記載の命令フェッチ制御方法。
【０１４０】
（付記３１）　前記ステップ（ａ）は、更に、（ｆ）前記第一の識別子により指示される命令バッファに格納されている命令列の次に供給する命令列が格納されている命令バッファを指示する第二の識別子として、当該命令バッファに格納されている前記第一の指示情報により指示される命令バッファに対応する識別子を設定するステップを含み、
設定された前記第一の識別子、前記オフセット値、及び前記第二の識別子に基づいて、複数の命令バッファにまたがる命令列が前記命令実行部へ供給される、
ことを特徴とする付記３０記載の命令フェッチ制御方法。
【０１４１】
（付記３２）　前記ステップ（ａ）は、更に、（ｇ）一命令以上の命令列が前記命令実行部へ供給されたときに、該供給された命令列の命令語或いは命令語長の総和を前記オフセット値に加算し、該加算されたオフセット値により前記命令実行部へ供給された命令列に続く後続命令を指示するステップを含み、
該指示された後続命令を先頭とする命令列が次に命令実行部へ供給される、
ことを特徴とする付記３０記載の命令フェッチ制御方法。
【０１４２】
（付記３３）　前記ステップ（ａ）は、更に、
（ｈ）再命令フェッチが行われる場合、前記第一の識別子を再命令フェッチ要求に対応する識別子に設定し直し、前記オフセット値を再命令フェッチ要求アドレスに対応する値に設定し直すステップを含む、
ことを特徴とする付記３０記載の命令フェッチ制御方法。
【０１４３】
（付記３４）　前記ステップ（ａ）は、更に、
（ｈ）一命令以上の命令列が前記命令実行部へ供給されたときに、該供給された命令列の命令語或いは命令語長の総和を前記オフセット値に加算した結果、前記命令バッファが格納可能な命令列範囲を超えた場合、前記第一の識別子により指示される命令バッファに格納されている前記第一の指示情報により指示される命令バッファに対応する識別子を、前記第一の識別子として設定するステップを含む、
ことを特徴とする付記３０記載の命令フェッチ制御方法。
【０１４４】
（付記３５）　前記ステップ（ａ）は、更に、
（ｉ）分岐成立が予測された命令が命令実行部へ供給されて、次に供給される命令列が前記分岐成立が予測された命令の分岐予測先命令になった場合、前記分岐成立が予測された命令が格納されていた命令バッファに格納されていた前記第二の指示情報により指示される分岐予測先命令列が格納されている命令バッファに対応する識別子を前記第一の識別子として設定し、前記分岐予測先命令列上の分岐予測先命令の位置に応じた値を前記オフセット値として設定するステップを含む、
ことを特徴とする付記３０記載の命令フェッチ制御方法。
【０１４５】
（付記３６）　前記ステップ（ａ）は、更に、
（ｊ）前記第一の識別子を設定する際に、前記第一の識別子として設定される識別子に対応する命令バッファが確定されていない場合には、前記第一の識別子を無効に設定し、前記第一の識別子として設定される識別子に対応する命令バッファが確定された後に、該確定された命令バッファに対応する識別子を、前記第一の識別子として設定するステップを含む、
ことを特徴とする付記３０記載の命令フェッチ制御方法。
【０１４６】
（付記３７）　更に、（ｋ）前記第一の識別子に対応する命令バッファに格納されている命令列が前記命令実行部へ供給された後に、当該命令バッファを無効化するステップ、
を備えたことを特徴とする付記３０記載の命令フェッチ制御方法。
【０１４７】
（付記３８）　更に、（ｌ）投機フェッチのキャンセルが行われた場合、キャンセルされた命令列が格納されている命令バッファを無効化し、該無効化した命令バッファに格納されている前記指示情報を無効化するステップ、
ことを特徴とする付記２５記載の命令フェッチ制御方法。
【０１４８】
（付記３９）　前記ステップ（ａ）は、更に、
（ｍ）ディレイスロット命令を伴う分岐命令を備えたアーキテクチュアが適用された場合において、分岐成立が予測された命令の分岐予測先命令が前記命令実行部へ供給されるときは、前記ディレイスロット命令が供給された後に前記分岐予測先命令が供給されるように、前記第一の識別子、前記第二の識別子、及び前記オフセット値を設定するステップを含む、
ことを特徴とする付記３１記載の命令フェッチ制御方法。
【０１４９】
（付記４０）　更に、（ｎ）キャッシュコヒーレンス動作を行う必要があるか否かを判定するステップを含む、
ことを特徴とする付記２５載の命令フェッチ制御方法。
【０１５０】
（付記４１）　更に、（ｏ）前記ステップ（ｎ）においてキャッシュコヒーレンス動作が必要と判定されたときは、前記命令バッファの全てを無効化して再命令フェッチを行うステップを含む、
ことを特徴とする付記４０記載の命令フェッチ制御方法。
【０１５１】
（付記４２）　更に、（ｐ）前記第一又は第二のレジスタに格納されている内容に基づいて、命令フェッチの矛盾を検出するステップを含む、
ことを特徴とする付記３０記載の命令フェッチ制御方法。
【０１５２】
（付記４３）　更に、（ｑ）前記ステップ（ｐ）において前記命令フェッチの矛盾が検出されたときは再命令フェッチを行うステップを含む、
ことを特徴とする付記４２記載の命令フェッチ制御方法。
【０１５３】
（付記４４）　前記ステップ（ｐ）は、
（ｒ）次の前記第一の識別子として設定される識別子に対応する命令バッファが確定されていない場合に、当該第一の識別子と、前記後続命令フェッチ要求元情報或いは前記分岐予測先命令フェッチ要求元情報により指示されている命令バッファに対応する識別子とが一致しないときに、命令フェッチの矛盾を検出するステップを含む、
ことを特徴とする付記４２記載の命令フェッチ制御方法。
【０１５４】
【発明の効果】
以上、詳細に説明したように、本発明によれば、命令バッファの使用効率を向上させて命令バッファをコンパクトに構成することが可能になる。
【図面の簡単な説明】
【図１】本発明の一実施の形態に係る命令フェッチ制御装置に適用される命令バッファの構成例を概念的に示した図である。
【図２】（ａ），（ｂ），（ｃ）　は、ポインタ部の指示に従った命令バッファの使用例を模式的に示した図である。
【図３】本発明の一実施の形態に係る命令フェッチ制御装置の構成例を示した図である。
【図４】命令フェッチ要求部に含まれる、ＩＦ−ＲＥＱ−ＩＤを生成する回路の構成例を示した図である。
【図５】命令フェッチ要求部に含まれる、命令フェッチ要求アドレス（ＩＦ−ＩＡＧ）を生成する回路の構成例を示した図である。
【図６】命令バッファのポインタ部に保持される情報の一例を示した図である。
【図７】ポインタ部に後続命令バッファ識別子（Ｎｅｘｔ−ＩＤ）及びＮｅｘｔ−ＩＤ指示有効フラグ（Ｎｅｘｔ−Ｖａｌｉｄ）を設定する回路の構成例を示した図である。
【図８】ポインタ部に分岐予測先命令バッファ識別子（Ｔａｒｇｅｔ−ＩＤ）及びＴａｒｇｅｔ−ＩＤ指示有効フラグ（Ｔａｒｇｅｔ−Ｖａｌｉｄ）を設定する回路の構成例を示した図である。
【図９】ポインタ部に有効フラグ（Ｖａｌｉｄ）を設定する回路の構成例を示した図である。
【図１０】命令バッファに保持されている命令を命令実行部へ供給するときの動作を模式的に示した図である。
【図１１】切り出す命令範囲の一例を示した図である。
【図１２】切り出す命令範囲の一例を示した図である。
【図１３】従来の、複数に系列分けされた複数の命令バッファを用いて命令フェッチを行う構成の一例を示した図である。
【符号の説明】
１　　　命令バッファ
１ａ　　データ部
１ｂ　　ポインタ部
２　　　命令フェッチ要求部
３　　　命令予測部
４　　　命令キャッシュ
５　　　命令フェッチ制御部
６　　　命令供給制御部
７　　　命令デコード部
１１　　インバータ回路
１２　　アンド回路
１３　　エンコーダ回路
２１　　レジスタ
２２、２３　インバータ回路
２４、２５、２６、２７、２８　アンド回路
２９　　オア回路
３０　　加算器
４１　　アンド回路
４２　　ＳＲ−ＦＦ（フリップフロップ）回路
４３　　オア回路
４４　　ＦＦ（フリップフロップ）回路
５１　　アンド回路
５２　　ＳＲ−ＦＦ（フリップフロップ）回路
５３　　オア回路
５４　　ＦＦ（フリップフロップ）回路
６１　　アンド回路
６２　　ＳＲ−ＦＦ（フリップフロップ）回路
６３　　オア回路
【図１】
2004038344.tif 000003
【図２】
2004038344.tif 000004
【図３】
2004038344.tif 000005
【図４】
2004038344.tif 000006
【図５】
2004038344.tif 000007
【図６】
2004038344.tif 000008
【図７】
2004038344.tif 000009
【図８】
2004038344.tif 000010
【図９】
2004038344.tif 000011
【図１０】
2004038344.tif 000012
【図１１】
2004038344.tif 000013
【図１２】
2004038344.tif 000014
【図１３】
2004038344.tif 000015