(57)【要約】  ループの起点を固定せずにループとなる命令のフェッチを簡易な構成で実現する。命令バッファと、命令デコーダと、前記命令バッファに対応して設けられ、一の命令バッファに格納された命令列が読み出される場合に、次に読み出されるべき命令列が格納された他の命令バッファの識別情報により、一の命令バッファと他の命令バッファ間の接続関係を示すポインタと、命令列の処理がループ状の繰り返しになるような所定命令の命令フェッチを行う場合に繰り返しの起点となる命令列が格納された命令バッファの識別情報を記憶した起点記憶部とを有する処理装置の処理方法であって、一の命令バッファに格納された命令列を読み出し、該命令列から所定命令を検出した場合に、起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報としてポインタに設定する。
2008155847.tif 000002
【特許請求の範囲】
【請求項１】
命令列を格納する命令バッファと、
所定命令の予測を行う命令予測部と、
前記命令バッファに対応して設けられ、一の命令バッファに格納された命令列が読み出される場合に、次に読み出されるべき命令列が格納された他の命令バッファの識別情報により、一の命令バッファと他の命令バッファ間の接続関係を示すポインタと、
命令列の処理がループ状の繰り返しになるような所定命令の命令フェッチを行う場合に繰り返しの起点となる命令列が格納された命令バッファの識別情報を記憶した起点記憶部と、
前記所定命令が前記命令予測部により検出された場合に、前記起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定するポインタ設定部と、
を備えた処理装置。
【請求項２】
前記起点記憶部に有効な情報が無かった場合に、前記所定命令によって命令フェッチした命令列を格納した命令バッファの識別情報を起点記憶部に記憶させる起点登録部を備えた請求項１に記載の処理装置。
【請求項３】
前記所定命令が、命令予測部によって予測された分岐命令である請求項１又は２に記載の処理装置。
【請求項４】
前記所定命令が、実際に実行された分岐命令である請求項１から３の何れか１項に記載の処理装置。
【請求項５】
前記命令バッファに格納された命令列のデコードを行う命令デコーダを備え、
前記所定命令が前記命令デコーダにより検出された場合に、前記起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定する請求項１から４の何れか１項に記載の処理装置。
【請求項６】
前記ポインタ設定部は、前記所定命令によって命令フェッチするアドレスと、前記起点記憶部が示す命令バッファの命令フェッチアドレスとを比較し、両アドレスが一致した場合に、該起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定する請求項請求項１から５の何れか１項に記載の処理装置。
【請求項７】
前記所定命令によって命令フェッチするアドレスと、前記起点記憶部が示す命令バッファの命令フェッチアドレスとが一致しなかった場合に、当該所定命令によって命令フェッチした命令列を格納した命令バッファの識別情報を起点記憶部に記憶させる起点登録部を備えた請求項６に記載の処理装置。
【請求項８】
前記所定命令が、無条件分岐命令又は分岐が予測される命令である場合に、該命令による分岐先アドレスを前記所定命令によって命令フェッチするアドレスとする請求項１から７の何れか１項に記載の処理装置。
【請求項９】
命令列を格納する命令バッファと、
所定命令の予測を行う命令予測部と、
前記命令バッファに対応して設けられ、一の命令バッファに格納された命令列が読み出される場合に、次に読み出されるべき命令列が格納された他の命令バッファの識別情報により、一の命令バッファと他の命令バッファ間の接続関係を示すポインタと、
命令列の処理がループ状の繰り返しになるような所定命令の命令フェッチを行う場合に繰り返しの起点となる命令列が格納された命令バッファの識別情報を記憶した起点記憶部と、を備えた処理装置による処理方法であって、
一の命令バッファに格納された命令列を読み出すステップと、
前記命令予測部により前記所定命令を検出するステップと、
前記所定命令が検出された場合に、前記起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定するステップと、
を前記処理装置が行う処理方法。
【請求項１０】
前記起点記憶部に有効な情報が無かった場合に、前記所定命令によって命令フェッチした命令列を格納した命令バッファの識別情報を起点記憶部に記憶させる請求項９に記載の処理方法。
【請求項１１】
前記所定命令が、命令予測部によって予測された分岐命令である請求項９又は１０に記載の処理方法。
【請求項１２】
前記所定命令が、実際に実行された分岐命令である請求項９から１１の何れか１項に記載の処理方法。
【請求項１３】
前記処理装置が、前記命令バッファに格納された命令列のデコードを行う命令デコーダを備え、
前記命令デコーダにより前記所定命令が検出された場合に、前記起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定する請求項９から１２の何れか１項に記載の処理方法。
【請求項１４】
前記所定命令によって命令フェッチするアドレスと、前記起点記憶部が示す命令バッファの命令フェッチアドレスとを比較し、両アドレスが一致した場合に、該起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定する請求項９から１３の何れか１項に記載の処理方法。
【請求項１５】
前記所定命令によって命令フェッチするアドレスと、前記起点記憶部が示す命令バッファの命令フェッチアドレスとが一致しなかった場合に、当該所定命令によって命令フェッチした命令列を格納した命令バッファの識別情報を起点記憶部に記憶させる請求項９から１４の何れか１項に記載の処理方法。
【請求項１６】
前記所定命令が、無条件分岐命令又は分岐が予測される命令である場合に、該命令による分岐先アドレスを前記所定命令によって命令フェッチするアドレスとする請求項９から１５の何れか１項に記載の処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置の制御技術、特に、命令処理技術に関するものである。
【背景技術】
【０００２】
パイプライン処理方式以降の高度な命令処理方式を採用した情報処理装置においては、一つの命令実行の終了を待たずに、投機的に後続の命令の処理を行うことで性能の向上を図ってきた。もちろん、その命令実行に先立ち、命令供給(命令フェッチ)も投機的に行うことで性能向上を果たしてきた。ここで、投機的とは、例えば、後続の命令のフェッチアドレスが確定する前に所定の予測結果にしたがったフェッチアドレスから後続の命令をフェッチし、処理すること等をいう。【０００３】
命令バッファ方式では、投機的にフェッチされた命令はいったん命令バッファに保持される。そして、命令バッファは、命令を解釈実行する実行制御部に向けて命令を供給する。このような命令バッファを複数もつことで投機的フェッチを先まで進めることが出来る。【０００４】
また、プログラム内には数多くのループ（ショートループ）が存在し、そこでは同じ命令列を何度も再利用する。即ち、命令バッファ内に保持されている命令列にプログラムのループが含まれている場合、その部分については新規に命令列を取得しつづけるより、既にバッファに保持しているものを流用する方が、フェッチの工数が省け、はるかに効率がよく、性能向上に大きく貢献する。【０００５】
この命令バッファ再利用の手法の先行技術として、例えば、下記の特許文献に開示される技術がある。
【特許文献１】日本国特許第３８０４９４１号公報
【特許文献２】日本国特許第３６８３９６８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許第３８０４９４１号公報では、回路の簡素化のために、ループの起点として比較テストを行う対象を、命令バッファの番号０に限定する例をあげている。【０００７】
しかし、起点を限定するということは、ループの起点が０番でなければループとしてバッファの内容を再利用できないことであり、せっかくの性能向上のチャンスを逃すことに他ならない。【０００８】
また、例えばプリデコードによって、命令実行より前に予測失敗が確定し、現在命令バッファに入っている中から、ある命令バッファ以降のものだけをキャンセルするような場合には、起点は必ずしも０番にならない。【０００９】
このため、ループの起点を固定せずに、分岐命令を検出した際、その分岐先アドレスが命令バッファに含まれているか否かの比較テストを全ての命令バッファに対して行うことも考えられる。しかしながら、０番だけでなく、全ての命令バッファを比較テストの対象としたのでは、命令バッファの数が増えれば増える程、回路コストが増大し、それは同時にディレイ等の問題を引き起こす。【００１０】
そこで、本発明は、ループの起点を固定せずにループとなる命令のフェッチを簡易な構成で可能とする技術を提供する。
【課題を解決するための手段】
【００１１】
本発明の処理装置は、命令列を格納する命令バッファと、
所定命令（例えば分岐命令）を予測する命令予測部と、
前記命令バッファに対応して設けられ、一の命令バッファに格納された命令列が読み出される場合に、次に読み出されるべき命令列が格納された他の命令バッファの識別情報により、一の命令バッファと他の命令バッファ間の接続関係を示すポインタと、
命令列の処理がループ状の繰り返しになるような所定命令の命令フェッチを行う場合に繰り返しの起点となる命令列が格納された命令バッファの識別情報を記憶した起点記憶部と、
前記所定命令が前記分岐予測部により検出された場合に、前記起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定するポインタ設定部と、を備えた。【００１２】
また、別の方法として本発明の処理装置は、命令列を格納する命令バッファと、
前記命令バッファに格納された命令列のデコードを行う命令デコーダと、
前記命令バッファに対応して設けられ、一の命令バッファに格納された命令列が読み出される場合に、次に読み出されるべき命令列が格納された他の命令バッファの識別情報により、一の命令バッファと他の命令バッファ間の接続関係を示すポインタと、
命令列の処理がループ状の繰り返しになるような所定命令の命令フェッチを行う場合に繰り返しの起点となる命令列が格納された命令バッファの識別情報を記憶した起点記憶部と、
前記所定命令が前記命令デコーダにより検出された場合に、前記起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定するポインタ設定部と、を備えた。【００１３】
また、前記ポインタ設定部は、前記所定命令によって命令フェッチするアドレスと、前記起点記憶部が示す命令バッファの命令フェッチアドレスとを比較し、両アドレスが一致した場合に、該起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定してもよい。【００１４】
前記処理装置において、起点記憶部に有効な情報が無かった場合に、当該所定命令によって命令フェッチした命令列を格納した命令バッファの識別情報を起点記憶部に記憶させる起点登録部を備えても良い。【００１５】
前記処理装置において、前記所定命令によって命令フェッチするアドレスと、前記起点記憶部が示す命令バッファの命令フェッチアドレスとが一致しなかった場合に、当該所定命令によって命令フェッチした命令列を格納した命令バッファの識別情報を起点記憶部に記憶させる起点登録部を備えても良い。【００１６】
前記処理装置において、前記所定命令は、分岐予測装置によって予測された分岐命令であってもよい。【００１７】
前記処理装置において、前記所定命令は、実際に実行された分岐命令であってもよい。【００１８】
前記所定命令が、無条件分岐命令又は分岐が予測される命令である場合に、該命令による分岐先アドレスを前記所定命令によって命令フェッチするアドレスとしても良い。【００１９】
また、本発明の処理方法は、命令列を格納する命令バッファと、
所定命令を予測する命令予測部と、
前記命令バッファに対応して設けられ、一の命令バッファに格納された命令列が読み出される場合に、次に読み出されるべき命令列が格納された他の命令バッファの識別情報により、一の命令バッファと他の命令バッファ間の接続関係を示すポインタと、
命令列の処理がループ状の繰り返しになるような所定命令の命令フェッチを行う場合に繰り返しの起点となる命令列が格納された命令バッファの識別情報を記憶した起点記憶部とを有する処理装置による処理方法であって、
一の命令バッファに格納された命令列を読み出すステップと、
前記命令予測部により前記所定命令を検出するステップと、
前記所定命令が検出された場合に、前記起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定するステップと、
を前記処理装置が行う。【００２０】
また、本発明の処理方法は、命令列を格納する命令バッファと、
前記命令バッファに格納された命令列のデコードを行う命令デコーダと、
前記命令バッファに対応して設けられ、一の命令バッファに格納された命令列が読み出される場合に、次に読み出されるべき命令列が格納された他の命令バッファの識別情報により、一の命令バッファと他の命令バッファ間の接続関係を示すポインタと、
命令列の処理がループ状の繰り返しになるような所定命令の命令フェッチを行う場合に繰り返しの起点となる命令列が格納された命令バッファの識別情報を記憶した起点記憶部とを有する処理装置による処理方法であって、
一の命令バッファに格納された命令列を読み出すステップと、
前記命令デコーダにより前記所定命令を検出するステップと、
前記所定命令が検出された場合に、前記起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定するステップと、
を前記処理装置が行う。【００２１】
前記処理方法において、前記所定命令によって命令フェッチするアドレスと、前記起点記憶部が示す命令バッファの命令フェッチアドレスとを比較し、両アドレスが一致した場合に、該起点記憶部に記憶した識別情報を次に読み出す命令バッファの識別情報として前記ポインタに設定しても良い。【００２２】
前記処理方法において、起点記憶部に有効な情報が無かった場合に、当該所定命令によって命令フェッチした命令列を格納した命令バッファの識別情報を起点記憶部に記憶させても良い。【００２３】
前記処理方法において、前記所定命令によって命令フェッチするアドレスと、前記起点記憶部が示す命令バッファの命令フェッチアドレスとが一致しなかった場合に、当該所定命令によって命令フェッチした命令列を格納した命令バッファの識別情報を起点記憶部に記憶させても良い。【００２４】
前記処理方法において、前記所定命令は、分岐予測装置によって予測された分岐命令であってもよい。【００２５】
前記処理方法において、前記所定命令は、実際に実行された分岐命令であってもよい。【００２６】
前記処理方法において、前記所定命令が、無条件分岐命令又は分岐が予測される命令である場合に、該命令による分岐先アドレスを前記所定命令によって命令フェッチするアドレスとしても良い。
【発明の効果】
【００２７】
本発明では、本発明は、ループの起点を固定せずにループとなる命令のフェッチを簡易な構成で実現できる。
【図面の簡単な説明】
【００２８】
【図１】本処理装置の構成図
【図２】命令フェッチ制御ユニットとこの周辺の回路の構成図
【図３】命令バッファの構造を示す図
【図４】命令フェッチアドレス選択部の詳細を示す図
【図５】シーケンシャル方向のポインタを設定する回路を示す図
【図６】分岐先方向のポインタを設定する回路を示す図
【図７】シーケンシャル方向のポインタチェーンの説明図
【図８】ポインタをたどって命令供給を行う例を示す図
【図９】起点レジスタの構成を示す図
【図１０】起点レジスタのバリッドフラグＳＴＡＲＴ＿ＩＢＲ＿ＩＤ＿ＶＡＬＩＤを生成する回路を示す図
【図１１】起点レジスタのバッファ番号を保持するレジスタＳＴＡＲＴ＿ＩＢＲ＿ＩＤにバッファ番号を設定する回路を示す図
【図１２】命令フェッチ要求部による起点レジスタ登録等の処理のタイムチャート
【図１３】ポインタによって構成されるショートループの説明図
【図１４】ポインタによって構成されるショートループの説明図
【発明を実施するための最良の形態】
【００２９】
《実施形態の骨子》
本実施形態の処理装置は、ショートループの起点となりうる命令バッファの番号（識別情報）を記録しておく起点記憶部（レジスタ）を命令バッファと別に備え、分岐命令を検出した場合に、その分岐先アドレスと、起点レジスタが記憶した識別情報が示す命令バッファに属する命令フェッチアドレスとを比較する。これらが一致した場合、次にフェッチすべき命令列は、起点レジスタが示す命令バッファで保持しているものと同じである。【００３０】
そこで、分岐命令を検出した命令フェッチのデータを格納する命令バッファの次に読み出すべき命令バッファの番号を示すポインタに起点レジスタの保持する命令バッファ番号を設定することで、命令バッファのループを構成する。【００３１】
この様に、命令バッファと別にループの起点となる命令バッファの番号を記憶する起点レジスタを追加するという簡易な構成で、起点を固定せずにループとなる命令の供給を実現できる。【００３２】
また、前記起点レジスタが示す命令バッファの命令フェッチアドレスと分岐先アドレスとだけ比較を行えば良いので、命令バッファの数がどれだけ増えても、従来と殆ど変らない時間でループとなる命令の供給を実現できる。【００３３】
《第１実施形態》
＜システムの構成と概要＞
図１に、本処理装置の構成図を示す。図２に命令フェッチにおける制御の全体図を示す。本処理装置は、例えば、主記憶装置１２１に格納された命令を読み出して実行する、いわゆるプログラム内蔵方式のコンピュータである。【００３４】
図１のように、この処理装置は、命令を実行する演算ユニット１２０と、演算ユニット１２０で実行される命令および演算ユニット１２０が処理するデータ等を格納する主記憶装置１２１と、演算ユニット１２０が実行すべき命令の主記憶装置１２１上のアドレスを指定するプログラムカウンタ１２２とを有している。【００３５】
図１では、さらに具体的に、プログラムカウンタ１２２の生成するアドレス、分岐リザベーションステーション１２６からの再命令フェッチ指示、あるいは分岐予測部３の予測結果に基づいて命令のフェッチを制御する命令フェッチ制御ユニット５と、命令キャッシュ１０２を管理し命令フェッチ制御ユニット５からの命令フェッチ要求にしたがって命令をフェッチする命令キャッシュ制御ユニット４と、命令キャッシュ１０２からフェッチされた命令を保持する命令バッファ１と、命令バッファ１の命令をデコードする命令デコーダ７と、デコードされた命令の実行タイミングを制御するリザベーションステーション（分岐命令の実行を制御する分岐リザベーションステーション１２６およびレジスタ演算命令、アドレス演算命令の実行を制御するその他リザベーションステーション１２７）と、命令の実行完了を監視する命令完了管理ユニット１２８と、演算ユニット１２０で実行される命令のオペランドを高速に演算ユニット１２０に供給するオペランドキャッシュ１２９と、主記憶装置１２１とオペランドキャッシュ１２９との間でデータの授受を管理するデータキャッシュ制御ユニット１３１とを有している。【００３６】
＜命令フェッチ制御ユニットの構成＞
図２に、命令フェッチ制御ユニット５の詳細構造と命令フェッチ制御ユニット５に関連する回路の構成を示す。【００３７】
プログラムカウンタ２２は、次に命令を読み込む主記憶装置１２１のアドレスを記憶する。即ち、命令が実際に実行されると、次の命令のアドレスに更新される。ただし、本例の命令フェッチ制御ユニット５は、基本的に分岐予測部（命令予測部に相当）３の予測結果を反映して、投機的に命令フェッチを制御する。このため、命令フェッチ制御ユニット５がプログラムカウンタ２２の値を使用するのは、例えば、処理装置に割り込み、あるいは、トラップ等が発生し、命令バッファを全てクリアして始める場合や投機フェッチが失敗した場合である。【００３８】
分岐リザベーションステーション１２６は、分岐命令の実行を制御する。そして、分岐命令の実行によって分岐するか否か、また分岐する場合には分岐先アドレスが確定したときに、完了報告が分岐リザベーションステーション１２６から、命令完了管理ユニット１２８に送出される。また、分岐リザベーションステーション１２６は分岐予測が正しかったか否かを判定し、その結果を分岐予測部３に通知する。そして、分岐予測が失敗した場合には、その旨を示すキャンセル信号を命令フェッチアドレス選択部９に送出する。【００３９】
命令フェッチアドレス選択部９は、割り込み、あるいは、トラップ等が発生したときにプログラムカウンタ１２２から供給されるアドレス、分岐リザベーションステーション１２６から出力された再命令フェッチ要求信号及び再命令フェッチ要求アドレス、分岐予測失敗時に分岐予測部３から出力される分岐予測先命令フェッチ要求信号及び分岐予測先命令フェッチ要求アドレス、又は加算部において命令語長単位で、例えば、３２バイトづつ順次、加算することで生成される命令アドレス等に基づいて、命令データが格納されている命令キャッシュ４を索引するための命令フェッチ要求アドレス（ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳ）を生成する。【００４０】
命令フェッチ要求部２は、無効化されている（即ち、アイドル状態となっている）命令バッファ１を指示するためのバッファ識別情報（ＩＦ＿ＲＥＱ＿ＩＤ）を命令バッファ制御部８から受け取る。命令フェッチ要求部２は、無効化されている命令バッファ１が存在する限り命令フェッチ要求を出すように構成されている。【００４１】
そして、命令フェッチ要求部２は、生成された命令フェッチ要求アドレス（ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳ）とともに、命令フェッチ要求信号（ＩＦ＿ＲＥＱ＿ＶＡＬＩＤ）、及び一つの無効化されている命令バッファ１を指示するためのバッファ識別情報（ＩＦ＿ＲＥＱ＿ＩＤ）を出力する、等の処理を行う。【００４２】
これにより、命令キャッシュ１０２に格納されている命令データの中からＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳに対応する命令列が読み出される。読み出された命令列は、ＩＦ＿ＲＥＱ＿ＩＤに対応する命令バッファ１に格納される。なお、図４では、省略されているが、ＩＦ＿ＲＥＱ＿ＩＤとＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳとを組み合わせた命令フェッチ要求の生成は、命令フェッチアドレス選択部９で行ってもよい。【００４３】
分岐予測部３は、ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳに対応する命令列に分岐が成立する分岐命令が含まれているか否かを予測し、それが含まれていると予測した場合には、その分岐先の命令アドレスを予測し、その予測した分岐先命令アドレス（分岐予測先命令アドレス）と共に分岐予測先命令フェッチ要求信号を、命令フェッチアドレス選択部９へ出力する。また、その場合には、分岐予測部３は、ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳに対応する命令列に分岐成立が予測された命令が含まれることを示す情報、及びその予測された命令の命令列上の位置を示す情報を、命令バッファ制御部８へ出力する、等の処理を行う。【００４４】
命令バッファ制御部８は、無効化された命令バッファ１のいずれかを選択し、その命令バッファを指示するためのスレッド識別情報（ＩＦ＿ＲＥＱ＿ＩＤ）を命令フェッチ要求部２に供給する。さらに、命令バッファ制御部８は、ポインタによって継続してデコードされるべき複数の命令バッファ１を結合する。すなわち、命令バッファ制御部８は、ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳに対応する命令列が保持されている命令バッファ１のポインタ部１Ｂに、当該命令バッファ１に保持されている命令列の次に供給されるべき後続命令列が保持されている命令バッファ１を指示する情報を格納する。本実施形態では、後続命令列を格納する後続の命令バッファ１が確保されたときに、その後続の命令バッファ１の識別ＩＤを先行する命令の命令バッファ１のポインタ部１Ｂに設定する。【００４５】
命令供給制御部６は、次に命令デコード部７へ供給する命令列を保持している命令バッファ１の識別ＩＤを示すカレントＩＤ（Ｃｕｒｒｅｎｔ−ＩＤ，第一の識別子）と、カレントＩＤが示す命令バッファ１に保持されている命令列の次に供給する命令列を保持している命令バッファ１の識別ＩＤを示すネクストＩＤ（Ｎｅｘｔ−Ｓｅｑ−ＩＤ、第二の識別子）と、カレントＩＤが示す命令バッファ１に保持されている命令列のオフセット位置を示すＮＳＩカウンタの値（ＮＳＩ−Ｃｏｕｎｔｅｒ，オフセット値）を設定する、等の処理を行う。ＮＳＩカウンタは、命令バッファ１の各命令バッファに含まれる複数の命令列（例えば８命令）のうち、何番目の命令から命令を供給するかを示す。カレントＩＤによって命令バッファを選択し、ＮＳＩカウンタの示す命令から供給を行う、というようにして、命令デコード部７への命令供給を実現する。【００４６】
＜命令バッファの構成＞
本処理装置においては、各命令バッファ１は個別に識別番号（識別情報）ｉを持つ。本実施形態では、識別番号ｉ=０〜７までの合計８つの命令バッファがあるものとする（図２）。【００４７】
図３に、命令バッファの構造を示す。各命令バッファ１は、命令フェッチ単位毎に命令語を保持するデータ部１Ａと、当該命令バッファの次に供給使用される命令バッファ１の番号を指示するためのポインタ部１Ｂから構成される。【００４８】
図３のように、データ部１Ａは、複数の命令を保持するレジスタ列を備える。また、ポインタ部１Ｂは、シーケンシャル方向に続く命令バッファ１の番号を示すＩＢＲｉ＿ＳＥＱ＿ＩＢＲ＿ＩＤおよびその有効性フラグＩＢＲｉ＿ＳＥＱ＿ＩＤ＿Ｖと、分岐する場合
に、分岐先命令列を保持する命令バッファ１の番号を示すＩＢＲｉ＿ＴＧＴ＿ＩＢＲ＿ＩＤおよびその有効性フラグＩＢＲｉ＿ＴＧＴ＿ＩＤ＿Ｖという、２系統のレジスタを備える。【００４９】
ここで、レジスタをＩＢＲｉ＿ＳＥＱ＿ＩＢＲ＿ＩＤ等にて表した場合、先頭の”ＩＢＲｉ＿”は、第ｉ番目の命令バッファに所属するレジスタであることを示している。図３では、命令バッファ１を総称しているので、”ＩＢＲｉ＿”が省略されている。以下、命令バッファ１を総称する場合、それぞれのレジスタの先頭の”ＩＢＲｉ＿”を省略する。また、ＩＢＲｉ＿ＳＥＱ＿ＩＢＲ＿ＩＤ等は、レジスタを示すとともに、各レジスタに格納された信号の種類を表している。【００５０】
さらに、命令バッファ１は、バリッドビット（ＩＢＲｉ＿ＶＡＬＩＤ）の保持部（レジスタ）と、命令バッファの保持する命令列のうち、使用される命令列の先頭アドレスを保持する先頭アドレス保持部（ＩＡＲ）を備える。バリッドビットは、１に設定することで、当該命令バッファが使用中であることを示す。命令バッファ内のデータが不要となった際には、このバリッドビットを０に設定する。このことを命令バッファの解放または無効化と呼ぶ。【００５１】
＜命令フェッチアドレス選択部の機能概要＞
図４に、命令フェッチアドレス選択部９の詳細を示す。命令フェッチアドレス選択部９は、複数のアドレスを保持する命令フェッチアドレス保持部１１と所定条件により該命令フェッチアドレス保持部１１からＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳを選択する選択部１２を有する。【００５２】
命令フェッチアドレス選択部９の命令フェッチアドレス保持部１１では、以下の複数の命令フェッチ要求アドレスを保持するレジスタを持つ。
（１）シーケンシャル命令フェッチ要求用レジスタ：
シーケンシャル命令フェッチ要求のアドレスは、現在出力されたある命令フェッチ要求にシーケンシャルに続くアドレスである。そのアドレスは，出力された命令フェッチ要求のアドレス（ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳ）に対して、該命令フェッチで取得され命令バッファ内に保持される命令列の合計命令長を加算したものとなる。【００５３】
つまり、一命令を４バイトとして、命令バッファが８命令を格納する（３２バイト）のであれば、次の命令アドレスは、ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳ＋３２とする。
（２）分岐先命令フェッチ要求用レジスタ：
分岐先命令フェッチ要求のアドレスは、分岐予測部３を備える場合に生成される。分岐先命令フェッチ要求のアドレスは、現在出力されたある命令フェッチ要求で得られる命令列の中に、分岐する分岐命令が予測されときの、その予測分岐先アドレス（ＩＦ＿ＴＧＴ＿ＡＤＤＲＥＳＳ）である。
（３）再命令フェッチ要求用レジスタ：
再命令フェッチ要求のアドレスは、分岐予測失敗、エラー処理などの理由により、あるスレッドの命令バッファがすべて無効になった場合に、新たに命令フェッチを開始するときの再命令フェッチアドレス（ＲＥＩＦＣＨ＿ＡＤＤＲＥＳＳ）である。ただし、割り込み、あるいは、トラップ等が発生した場合は、プログラムカウンタ１２２から、再命令フェッチ要求用レジスタに次にフェッチすべきアドレスが供給される。【００５４】
これらのアドレスは、それぞれのレジスタに格納される。これらのレジスタは各々バリッドビットを備える。バリッドビットは、レジスタに保持されるアドレスの有効性を示すと同時に、要求の有効性を示す。【００５５】
選択部１２は、所定の条件（優先順位）をもって、上記（１）から（３）のレジスタの中から、ひとつのアドレスを選択する。【００５６】
＜命令フェッチの処理手順＞
図４の命令フェッチアドレス保持部１１において、ＩＦ＿ＳＥＱ＿ＡＤＤＲＥＳＳおよびＳＥＱ＿ＰＡＲＥＮＴ＿ＩＤとあるのは、シーケンシャル命令フェッチ要求用レジスタ９Ｓである。また、ＩＦ＿ＴＧＴ＿ＡＤＤＲＥＳＳおよびＴＧＴ＿ＰＡＲＥＮＴ＿ＩＤとあるのは、分岐命令フェッチ要求用レジスタ９Ｔである。【００５７】
ＲＥＩＦＣＨ＿ＡＤＤＲＥＳＳとあるのは、再命令フェッチ要求用のレジスタである。【００５８】
これらのレジスタの中から、予め定められた優先順位をもってアドレスの選択を行う。予め定められた優先順位とは、優先度の高い順に、１．再命令フェッチアドレス（要求が出た時は全ての投機実行が無効となった状態）、２．予測分岐先アドレス（要求が出た時は投機的に出していたシーケンシャル命令フェッチが不要となった状態）、３．シーケンシャル命令フェッチアドレス、などが考えられる。命令フェッチ要求部２は、このように命令フェッチ選択部９で選択された命令フェッチ要求アドレスをキャッシュ制御ユニット４に送出する。また、命令フェッチ要求送出のバリッド信号をＩＦ＿ＲＥＱ＿ＶＡＬＩＤとする。このとき、命令バッファ制御部８は、命令フェッチの度に、新たな命令フェッチデータを格納するための命令バッファを現在使用されていない（＝バリッドが立っていない）命令バッファの中からひとつ選択する（ＩＦ＿ＲＥＱ＿ＩＤ）。【００５９】
そして、命令バッファ制御部８は、命令フェッチ要求送出時に、選択された命令バッファ１におけるポインタ部１Ｂのバリッドフラグをたてる。【００６０】
さらに、命令フェッチ要求のアドレスをもって、分岐命令の検索を並行して行う。分岐予測部３については、例えば特開平９−２１８７８６のようなブランチヒストリが利用できる。【００６１】
さらに、シーケンシャル用と分岐用の命令フェッチ要求保持レジスタ（図４のシーケンシャル命令フェッチ要求用レジスタ９Ｓ、分岐先命令フェッチ要求用レジスタ９Ｔ）は、該レジスタに保持される命令フェッチ要求の親にあたる命令フェッチのデータが格納される命令バッファ１の番号保持部（ＳＥＱ＿ＰＡＲＥＮＴ＿ＩＤ、ＴＧＴ＿ＰＡＲＥＮＴ＿ＩＤ）を備える。親とはつまり、シーケンシャル命令フェッチ要求用レジスタ９Ｓであれば、合計命令長を足す元となるアドレスによる命令フェッチ要求である（格納内容は、親命令バッファ番号：ＳＥＱ＿ＰＡＲＥＮＴ＿ＩＤ）。また、分岐先命令フェッチ要求用レジスタ９Ｔであれば、分岐する分岐命令が予測された命令フェッチ要求のことである（格納内容は親命令バッファ番号：ＴＧＴ＿ＰＡＲＥＮＴ＿ＩＤ）（図４参照）。【００６２】
そして、命令バッファ１と次の命令バッファ１との関連付け（ポインタの設定）は、次の命令フェッチの際に行う。図４に示すように各々の命令フェッチ要求は、親の命令バッファ番号（ＳＥＱ＿ＰＡＲＥＮＴ＿ＩＤ、ＴＧＴ＿ＰＡＲＥＮＴ＿ＩＤ）を持っている。そこで、命令バッファ制御部（ポインタ設定部に相当）８は、命令フェッチ要求が送出された際に、親の命令バッファ１内のポインタに対して、現在処理中の命令フェッチで使用する命令バッファ番号を設定する。【００６３】
命令フェッチ要求がシーケンシャル方向のものであれば、命令バッファ制御部８は、親の命令バッファ（ＳＥＱ＿ＰＡＲＥＮＴ＿ＩＤ）のＳＥＱ＿ＩＢＲ＿ＩＤに対して、現在処理中の命令バッファ番号（その時のＩＦ＿ＲＥＱ＿ＩＤ）を設定する。また、命令フェッチ要求が予測分岐先のものであれば、命令バッファ制御部８は、親の命令バッファ（ＴＧＴ＿ＰＡＲＥＮＴ＿ＩＤ）のＴＧＴ＿ＩＢＲ＿ＩＤに対して処理中の命令バッファ番号（その時のＩＦ＿ＲＥＱ＿ＩＤ）を設定する。また、命令バッファ制御部８は、各々、ポインタが有効であることを示すフラグを設定する（図３のＳＥＱ＿ＩＢＲ＿Ｖ、ＴＧＴ＿ＩＢＲ＿Ｖ）。【００６４】
図５は、シーケンシャル方向のポインタを設定する回路の例である。例えば、ＳＥＱ＿ＰＡＲＥＮＴ＿ｎがオンとなり、かつ、シーケンシャルの命令フェッチ要求であることが判明したときに、親の命令バッファ（ＳＥＱ＿ＰＡＲＥＮＴ＿ＩＤ＿ＴＨｎ）のＳＥＱ＿ＩＢＲ＿ＩＤに対して設定信号（ＳＥＴ＿ＩＢＲｎ＿ＳＥＱ＿ＩＤ＿ＰＯＩＮＴＥＲ）が発生する。そして、その設定信号によって、現在処理中の命令バッファ１を識別するＩＦ＿ＲＥＱ＿ＩＤが、ＳＥＱ＿ＩＢＲ＿ＩＤに設定される。【００６５】
図６は、分岐先方向のポインタを設定する回路の例である。分岐先の命令フェッチ要求が発生したときに、ポインタを設定する。例えば、ＴＧＴ＿ＰＡＲＥＮＴ＿ｎがオンとなり、かつ、分岐先方向の命令フェッチ要求であることが判明したときに、親の命令バッファ（ＴＧＴ＿ＰＡＲＥＮＴ＿ＩＤ＿ＴＨｎ）のＳＥＱ＿ＩＢＲ＿ＩＤに対して設定信号（ＳＥＴ＿ＩＢＲｎ＿ＴＧＴ＿ＩＤ＿ＰＯＩＮＴＥＲ）が発生する。そして、その設定信号によって、現在処理中の命令バッファ１を識別するＩＦ＿ＲＥＱ＿ＩＤが、ＴＧＴ＿ＩＢＲ＿ＩＤに設定される。【００６６】
これを続けていくことで、命令バッファのポインタチェーンが形成される。【００６７】
例えば、図７に示すように、命令バッファ７→１→３→４→５とシーケンシャル方向のポインタチェーンを構成している場合、図８に示すようにＳＥＱ＿ＩＢＲ＿ＩＤをたどって命令が供給される。【００６８】
先ず、命令バッファ＃７、即ちＩＢＲ７の命令列を供給した場合、当該ＩＢＲ０のＩＢＲ０＿ＳＥＱ＿ＩＢＲ＿ＩＤの値がＩＢＲ１であるので、次にＩＢＲ１の命令列を供給する。【００６９】
当該ＩＢＲ１のＩＢＲ１＿ＳＥＱ＿ＩＢＲ＿ＩＤの値がＩＢＲ３であるので、次にＩＢＲ３の命令列を供給し、同様にＩＢＲ３のＩＢＲ３＿ＳＥＱ＿ＩＢＲ＿ＩＤの値がＩＢＲ４であるので、ＩＢＲ４の命令列を供給し、ＩＢＲ４のＩＢＲ４＿ＳＥＱ＿ＩＢＲ＿ＩＤの値がＩＢＲ５であるので、ＩＢＲ５の命令列を供給する。【００７０】
＜ショートループの処理＞
図９は、起点レジスタ１０の構成を示す図である。起点レジスタ１０は、起点のバッファ番号ＳＴＡＲＴ＿ＩＢＲ＿ＩＤを保持するレジスタ、およびバリッドフラグＳＴＡＲＴ＿ＩＢＲ＿ＩＤ＿ＶＡＬＩＤを保持するレジスタを有する。【００７１】
図１０は、命令バッファ制御部８における起点レジスタのバリッドフラグＳＴＡＲＴ＿ＩＢＲ＿ＩＤ＿ＶＡＬＩＤを生成する回路である。この回路は、命令フェッチ要求が有効であり（ＩＦ＿ＲＥＱ＿ＶＡＬＩＤがオン）、かつ、再命令フェッチまたは分岐先フェッチがなされたときに、オンになる。一方、命令バッファ１に対するキャンセル信号が発せられると、オフになる。【００７２】
図１１は、命令バッファ制御部（起点登録部に相当）８における起点レジスタ１０のバッファ番号を保持するレジスタＳＴＡＲＴ＿ＩＢＲ＿ＩＤにバッファ番号を設定する回路である。この回路は、起点レジスタ１０のバリッドフラグが無効であり（ＳＴＡＲＴ＿ＩＢＲ＿ＩＤ＿ＶＡＬＩＤがオフ、つまりまだ有効な起点が設定されていない）、命令フェッチ要求が有効であり（ＩＦ＿ＲＥＱ＿ＶＡＬＩＤがオン）、かつ、再命令フェッチまたは分岐先フェッチがなされたときに、命令バッファ１の識別ＩＤであるＩＦ＿ＲＥＱ＿ＩＤを起点レジスタ１０のＳＴＡＲＴ＿ＩＢＲ＿ＩＤに設定する。即ち、再命令フェッチや分岐先フェッチがなされたときは、このときにフェッチした命令列がループの起点となる可能性が高いので、命令バッファ制御部８は、この命令列を格納したバッファ番号を起点レジスタ１０に登録しておく。【００７３】
命令フェッチ要求部２から送出された命令フェッチ要求が、分岐予測部３のブランチヒストリユニットでなされた分岐予測による分岐先命令フェッチ要求の場合、あるいは、命令実行時に分岐予測が失敗していたことが分かって命令フェッチをやり直すための分岐先の再命令フェッチ要求であった場合を想定する。この場合には、その分岐先命令フェッチ要求あるいは再命令フェッチ要求によって確保された命令バッファの番号（つまり、ＩＦ＿ＲＥＱ＿ＩＤ）を起点レジスタ（ＳＴＡＲＴ＿ＩＢＲ＿ＩＤ）に登録し、レジスタのバリッドをオンにする。【００７４】
そして、ある命令バッファの保持する命令列の中に、分岐命令が存在したとする。該分岐命令の検出は、命令デコーダ７で行われてもよい。そして該分岐命令の分岐先アドレスと、起点レジスタ１０の指す命令バッファの命令フェッチアドレス（つまり、命令バッファが保持する命令列の先頭アドレスＩＡＲ）が一致すれば、分岐命令が検出された該命令バッファのＴＧＴ＿ＩＢＲ＿ＩＤ に起点レジスタ１０の保持する値を設定することで、命令バッファのループが形成される。【００７５】
また、分岐命令の検出は分岐予測によって行うこともできる。分岐予測部３は、ブランチ・ヒストリ・ユニットを有する。ここで、ブランチヒストリユニットについて簡単に説明する。ブランチ・ヒストリユニットは、分岐命令の存在とその分岐先アドレスを予測する。例えばその実装としては、次のようなものがある。処理装置により処理を行なっている際にある分岐命令を実行した結果、その分岐が成立することが判明した場合、次もその分岐命令は分岐すると考え、ブランチ・ヒストリに、その分岐命令自身のアドレス（以下、分岐命令アドレスという）と分岐先命令のアドレス（以下、分岐先アドレスという）とを対で登録する。このようにして、ブランチ・ヒストリには、分岐の成立した分岐命令についての上記対データを蓄積してゆく。つまり、ブランチ・ヒストリには、分岐すると予測された分岐命令のデータのみが登録されている。そして、ある分岐命令を主記憶装置から取り出して実行する際には、その実行に先立ってブランチ・ヒストリ・ユニットを索引し、ブランチ・ヒストリ・ユニットにその分岐命令のアドレスが登録されている場合には、その分岐命令アドレスと対になっている分岐先アドレスをブランチ・ヒストリ・ユニットから読み出す。そして、先行する命令の実行の終了を待つことなく、その分岐先アドレスに対応する命令を主記憶装置から取り出す。なお、その分岐先アドレスに対応する命令の写しがキャッシュメモリに保持されている場合には、その命令は、キャッシュメモリから取り出されて実行される。さらに、ブランチ・ヒストリでは、ある分岐命令の過去の複数回分の分岐結果（＝分岐履歴）をもって、次に該分岐命令が現れたときに分岐するか否かを予測することで分岐予測の精度を向上させることもできる。分岐すると予測した場合には同様にブランチ・ヒストリに登録を行う。【００７６】
つまり、分岐命令の実行以前に、ブランチ・ヒストリ・ユニットによって分岐が予測される場合（分岐命令アドレスに対応する分岐先アドレスがブランチ・ヒストリ・ユニットに登録されている場合）、予測された分岐先アドレスを用いて投機的に命令フェッチ（命令読出と同義；以下、読出のことをフェッチとして説明する場合がある）を行ない、分岐命令に続いて、読み出された分岐先命令を命令実行ステージに投入する。【００７７】
図１２は、命令バッファ制御部８による起点レジスタ登録等の処理のタイムチャートである。【００７８】
ある命令フェッチ要求が、ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳ＝“Ａ”、ＩＦ＿ＲＥＱ＿ＩＤ＝＃０で送出されたとする。命令バッファ１の番号が＃０のとき、この命令バッファ１をＩＢＲ０と表す。【００７９】
次のマシンサイクルτでは、上記命令フェッチ要求が、番号＃０の命令バッファ１（ＩＢＲ０）を確保しつつ送出された、ということであるので、ＩＢＲ０のバリッドフラグであるＩＢＲ０＿ＶＡＬＩＤをオンにする。さらに、ＩＢＲ０の命令フェッチアドレスＡをレジスタＩＡＲ０に記憶しておく。また、命令フェッチ要求が、基本的にシーケンシャル方向に命令語長単位進んだアドレス、即ちＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳ＝“Ａ＋３２”で送出される。このとき確保された命令バッファ１の番号が＃１であればＩＦ＿ＲＥＱ＿ＩＤ＝＃１となる。【００８０】
一方、その命令フェッチアドレスＡで分岐予測部３のブランチヒストリユニットを検索したところ、分岐する分岐命令が検出されると、この検出を示す信号ＢＲＡ＿ＶＡＬ及び分岐先アドレスＴＧＴ＿ＡＤＤＲＥＳＳ＝“Ｔ”（話を簡単にするため、Ｔ  は３２バイト境界のアドレスとする）が、分岐命令から所定サイクルτ後、本例では２τ後に発行される。【００８１】
命令フェッチ要求部２は、この分岐先アドレスＴと起点レジスタ１０のＳＴＡＲＴ＿ＩＢＲ＿ＩＤで示される命令バッファ１の命令フェッチアドレスＩＡＲｘとを比較する。ここで分岐アドレスと起点の命令フェッチアドレスが一致（ＩＡＲｘ＝ＴＧＴ＿ＡＤＤＲＥＳＳ）し、かつ  ＳＴＡＲＴ＿ＩＢＲ＿ＩＤ＿ＶＡＬＩＤ がオンであれば、分岐先の命令列が既に命令バッファ１に存在し、一致しないまたは  ＳＴＡＲＴ＿ＩＢＲ＿ＩＤ＿ＶＡＬＩＤ  がオフであれば分岐先の命令列が命令バッファ１に存在しない。【００８２】
従って、後者であれば、分岐先の命令列を新たにフェッチし、さらに  ＳＴＡＲＴ＿ＩＢＲ＿ＩＤ  がオフであれば、この命令バッファ１を起点レジスタ１０に登録する。図１２の例では、“一致かつバリッドオン”が成立せず、番号＃３の命令バッファ１を確保し、命令フェッチ要求部２は、ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳ＝“Ｔ”、ＩＦ＿ＲＥＱ＿ＩＤ＝“＃３”で命令フェッチ要求を送出する。【００８３】
そして、次のサイクルτでは、命令フェッチ要求が、ＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳ＝“Ｔ＋３２”、ＩＦ＿ＲＥＱ＿ＩＤ＝“ ＃４”で送出される。また、命令フェッチ要求部２は、ＩＢＲ０のポインタ部（ＩＢＲ０＿ＰＯＩＮＴＥＲ）１ＢのＴＧＴ＿ＩＢＲ＿ＩＤに、” ＃３”を登録すると共に、起点レジスタ１０にループの起点（ＳＴＡＲＴ＿ＩＢＲ＿ＩＤ）として” ＃３”を登録する。このときＳＴＡＲＴ＿ＩＢＲ＿ＩＤも有効（オン）にする。【００８４】
また、命令フェッチ要求部２は、この分岐先のＩＢＲ３＿ＶＡＬＩＤを設定し、ＩＡＲ３にＴを登録する一方、シーケンシャル方向の命令フェッチ要求ＩＢＲ１＿ＶＡＬＩＤ及びＩＡＲ１を無効（キャンセル）にする。【００８５】
さらに次のサイクルτでは、命令フェッチ要求がＩＦ＿ＲＥＱ＿ＡＤＤＲＥＳＳ＝“Ｔ＋６４”、ＩＦ＿ＲＥＱ＿ＩＤ＝“ ＃５”で送出される。【００８６】
この命令フェッチアドレスＴ＋６４で分岐予測部３のブランチヒストリユニットを検索したところ、分岐する分岐命令が検出され、この検出を示す信号ＢＲＡ＿ＶＡＬ及び分岐先アドレスＴＧＴ＿ＡＤＤＲＥＳＳ＝“Ｔ”が、発行されたとする。【００８７】
命令フェッチ要求部２は、この分岐先アドレスＴと起点レジスタ１０のＳＴＡＲＴ＿ＩＢＲ＿ＩＤで示される命令バッファ１の命令フェッチアドレスＩＡＲｘとを比較する。この時点で起点レジスタ１０に登録されているＳＴＡＲＴ＿ＩＢＲ＿ＩＤは、前述のとおり＃３であり、この命令バッファ１の命令フェッチアドレスＩＡＲ３は”Ｔ”であり、分岐先アドレスＴと一致する（ＩＡＲ３＝ＴＧＴ＿ＡＤＤＲＥＳＳ＝Ｔ）。【００８８】
従って、後続の命令列が既に命令バッファ１に存在しているので、命令フェッチ要求部２は、分岐命令を検出したＩＢＲ５におけるポインタ部１ＢのＴＧＴ＿ＩＢＲ＿ＩＤを起点レジスタ１０のＳＴＡＲＴ＿ＩＢＲ＿ＩＤに基づいて更新すると共に、ＴＧＴ＿ＩＤ＿Ｖを有効にし、ＳＥＱ＿ＩＤ＿Ｖを無効にする。【００８９】
そして、命令バッファ＃５、即ちＩＢＲ５の命令列を供給した場合、当該ＩＢＲ５の有効となっているポインタＩＢＲ５＿ＴＧＴ＿ＩＢＲ＿ＩＤの値がＩＢＲ３であるので、次にＩＢＲ３の命令列を供給する。なお、図１３では、ＴＧＴ＿ＩＤ＿Ｖ又はＳＥＱ＿ＩＤ＿Ｖが有効となっているレジスタＴＧＴ＿ＩＢＲ＿ＩＤ又はＳＥＱ＿ＩＢＲ＿ＩＤの値を示し、無効となっているレジスタの値を”−”とした。【００９０】
当該ＩＢＲ３のＩＢＲ３＿ＳＥＱ＿ＩＢＲ＿ＩＤの値がＩＢＲ４であるので、次にＩＢＲ４の命令列を供給し、同様にＩＢＲ４のＩＢＲ４＿ＳＥＱ＿ＩＢＲ＿ＩＤの値がＩＢＲ５であるので、ＩＢＲ５の命令列を供給し、ＩＢＲ５のＩＢＲ５＿ＳＥＱ＿ＩＢＲ＿ＩＤの値がＩＢＲ３であるので、ＩＢＲ３の命令列を供給し、図１４のように命令バッファ＃０→＃３→＃４→＃５→＃３→＃４→＃５→＃３・・・・とショートループを構成する。【００９１】
このように、起点レジスタ１０で起点の情報ＳＴＡＲＴ＿ＩＢＲ＿ＩＤを持つといった簡易な構成で、起点となる命令バッファを限定することなく命令バッファのショートループを設定することができる。【００９２】
これにより、命令バッファの数に依らず、従来と殆ど変らない時間でループとなる命令の供給を実現できる。
【図１】
2008155847.tif 000003
【図２】
2008155847.tif 000004
【図３】
2008155847.tif 000005
【図４】
2008155847.tif 000006
【図５】
2008155847.tif 000007
【図６】
2008155847.tif 000008
【図７】
2008155847.tif 000009
【図８】
2008155847.tif 000010
【図９】
2008155847.tif 000011
【図１０】
2008155847.tif 000012
【図１１】
2008155847.tif 000013
【図１２】
2008155847.tif 000014
【図１３】
2008155847.tif 000015
【図１４】
2008155847.tif 000016
【国際調査報告】
2008155847.tif 000017
2008155847.tif 000018