(57)【要約】【課題】本発明は、命令制御方法及びプロセッサに関し、命令制御に大きな記憶容量を必要とせず、且つ、プロセッサ内の命令処理の全体の流れが一時的に停止されることを抑止して性能低下を確実に防止することを目的とする。【解決手段】分岐のための遅延命令を用いる命令制御方法において、複数の遅延命令を、遅延命令に対応する分岐命令が分岐成立と予測されたか分岐不成立と予測されたかを示す情報と共に順次記憶装置に格納するように構成する。【選択図】　　　図１
2004038255.tif 000002
【特許請求の範囲】
【請求項１】
分岐のための遅延命令を用いる命令制御方法であって、
複数の遅延命令を、遅延命令に対応する分岐命令が分岐成立と予測されたか分岐不成立と予測されたかを示す情報と共に順次記憶装置に格納するステップを含むことを特徴とする、命令制御方法。
【請求項２】
分岐のための遅延命令を用いる命令制御を行うプロセッサであって、
記憶装置と、
分岐予測を行う分岐予測部と、
複数の遅延命令を、該分岐予測部において遅延命令に対応する分岐命令が分岐成立と予測されたか分岐不成立と予測されたかを示す情報と共に、順次該記憶装置に格納する制御手段とを備えたことを特徴とする、プロセッサ。
【請求項３】
分岐のための遅延命令をもつ命令制御を行うプロセッサであって、
記憶装置と、
分岐予測を行う分岐予測部と、
該分岐予測部において分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置きかえられて命令が発行された後、直前の分岐命令で分岐成立と確定した場合には分岐先の命令フェッチ要求と共に記憶装置より対応する遅延命令を取り出して命令を発行し、分岐成立と予測され該分岐命令に対応する遅延命令が発行された後、予測された分岐先の命令が発行されて予測された分岐先が正しい場合にはそのまま命令実行を継続すると共に予測された分岐先が誤っている場合には遅延命令後の分岐先命令の命令再フェッチ要求を行う手段とを備えたことを特徴とする、プロセッサ。
【請求項４】
分岐不成立と予測された後に分岐成立が確定した場合に、分岐先の命令フェッチを分岐確定直後に行ない、前記記憶装置より取り出された遅延命令の命令投入後に分岐先の命令を発行する手段を更に備えたことを特徴とする、請求項３記載のプロセッサ。
【請求項５】
分岐のための遅延命令をもつ命令制御を行うプロセッサであって、
分岐予測を行う分岐予測部と、
該分岐予測部において分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置き換えられて命令が発行された後、直前の分岐命令で分岐不成立と確定した場合にはそのまま命令実行を続行し、分岐成立と予測されその後分岐不成立と確定した場合には元のシーケンシャルな命令の命令再フェッチ要求を行ってフェッチ完了後直ちに命令を発行する手段とを備えたことを特徴とする、プロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は命令制御方法及びプロセッサに係り、特に分岐予測を行うと共に分岐のための遅延命令を持つ命令制御において分岐命令を含めた複数の命令を高速に処理するための命令制御方法、及びそのような命令制御方法を用いるプロセッサに関する。
【０００２】
【従来の技術】
近年、プロセッサの性能を向上させるために、様々な命令処理方式が用いられる。その中の１つに、アウトオブオーダー処理方式がある。アウトオブオーダー処理方式を採用したプロセッサにおいては、１つの命令実行の完了を待たずに後続の命令列を順次、複数のパイプラインに投入して命令を実行させることで、性能の向上を行なっている。
【０００３】
しかし、先行している命令の実行結果が後続の命令の実行に影響を与える場合には、先行している命令実行が完了しなければ後続の命令を実行させることができない。後続の命令の実行に影響を与える命令の処理が遅ければ、その間後続の命令は実行できず、先行の命令完了を待ち続けることになる。このため、パイプラインに乱れが生じ、性能の低下を引き起こす。このようなパイプラインの乱れは、特に分岐命令の場合に顕著に現れる。
【０００４】
分岐命令の中でも、条件分岐と呼ばれる命令の場合、条件分岐命令の直前で分岐条件（通常はコンディションコード）を変更する命令があると、その命令が完了するまで分岐が確定しない。従って、分岐命令の後続のシーケンスがわからないために、後続の命令を投入できず、処理が止まってしまい処理能力が低下する。このことはアウトオブオーダー処理方式を採用したプロセッサに限らず、ロック・ステップ・パイプライン等の処理方式を採用しているプロセッサにおいても同様の問題が生じるが、アウトオブオーダー処理方式を採用しているプロセッサにおいては、より顕著に性能の低下が生じる。そこで、分岐命令による性能低下を抑えるために、通常は、分岐予測を行う分岐予測機構をプロセッサ内の命令制御装置に設けて、分岐命令の高速化を図っている。
【０００５】
分岐予測機構を用いる場合、分岐命令を実行する時に分岐が生じるか否かか判明する前に、後続の命令や分岐先の命令を事前に実行する。分岐予測機構は、分岐命令を実行した結果、分岐が行われた場合に分岐先の命令アドレスと分岐命令自身の命令アドレスとを対にして分岐予測機構内に登録し、命令の実行にあたって、命令をプロセッサ内の主記憶装置から取り出す時に、その命令の実行に先立って検索する構造となっている。分岐予測機構を設けて分岐予測を行うことで、命令制御装置は、命令をできるだけ滞らせることなく、主記憶装置から命令フェッチを行い命令を順次投入することができる。
【０００６】
ここで問題となるのが、分岐のための遅延命令を持つ命令制御方式を採用する場合である。この場合、分岐命令は、次のように実行される。例えば、命令シーケンスがａ１、ａ２、ａ３、ａ４、ａ５、ａ６であり、ａ３が条件分岐で、ａ４が遅延命令の場合、ａ３が分岐する場合はａ１、ａ２、ａ３、ａ４、ｂ１、ｂ２（ｂ１は分岐先の命令）の順に命令が投入され、ａ３が分岐しない場合はａ１、ａ２、ａ３、ａ５、ａ６の順に命令が投入される。
【０００７】
【発明が解決しようとする課題】
従来技術では、任意の命令アドレスの分岐命令が過去に分岐したか分岐しなかったかの情報を登録し、それと対にして分岐命令の命令アドレス、分岐した場合は分岐先の命令アドレス、分岐しなかった場合は次に実行される命令アドレスを持つことにより、分岐命令が分岐するか分岐しないかを予測していた。しかし、分岐命令が分岐した場合と分岐しない場合のいずれの場合においても情報と命令アドレスの対を登録しなければならず、命令制御に必要な記憶容量が大きくなってしまうという問題があった。
【０００８】
又、予測が失敗した場合、特に予測できなかった分岐命令がデコードされた場合には、分岐命令が分岐する、しないにかかわらず、常に分岐命令の分岐条件が確定して分岐判定が行われるまで、後続の命令の投入を一時的に止める必要があった。この結果、プロセッサ内の命令処理の全体の流れが一時的に停止され、著しく性能が低下してしまうという問題もあった。
【０００９】
そこで、本発明は、命令制御に大きな記憶容量を必要とせず、且つ、プロセッサ内の命令処理の全体の流れが一時的に停止されることを抑止して性能低下を確実に防止することのできる命令制御方法及びプロセッサを実現することを目的とする。
【００１０】
【課題を解決するための手段】
上記の課題は、分岐のための遅延命令を用いる命令制御方法であって、複数の遅延命令を、遅延命令に対応する分岐命令が分岐成立と予測されたか分岐不成立と予測されたかを示す情報と共に順次記憶装置に格納するステップを含むことを特徴とする命令制御方法によって達成できる。
【００１１】
上記の課題は、分岐のための遅延命令をもつ命令制御方法であって、分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置きかえられて命令が発行された後、直前の分岐命令で分岐成立と確定した場合には分岐先の命令フェッチ要求と共に記憶装置より対応する遅延命令を取り出して命令を発行し、分岐成立と予測され該分岐命令に対応する遅延命令が発行された後、予測された分岐先の命令が発行されて予測された分岐先が正しい場合にはそのまま命令実行を継続すると共に予測された分岐先が誤っている場合には遅延命令後の分岐先命令の命令再フェッチ要求を行うステップを含むことを特徴とする命令制御方法によっても達成できる。
【００１２】
上記の課題は、分岐のための遅延命令をもつ命令制御方法であって、分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置き換えられて命令が発行された後、直前の分岐命令で分岐不成立と確定した場合にはそのまま命令実行を続行し、分岐成立と予測されその後分岐不成立と確定した場合には元のシーケンシャルな命令の命令再フェッチ要求を行ってフェッチ完了後直ちに命令を発行するステップを含むことを特徴とする命令制御方法によっても達成できる。
【００１３】
上記の課題は、分岐のための遅延命令を用いる命令制御を行うプロセッサであって、記憶装置と、分岐予測を行う分岐予測部と、複数の遅延命令を、該分岐予測部において遅延命令に対応する分岐命令が分岐成立と予測されたか分岐不成立と予測されたかを示す情報と共に、順次該記憶装置に格納する制御手段とを備えたことを特徴とするプロセッサによっても達成できる。
【００１４】
上記の課題は、分岐のための遅延命令をもつ命令制御を行うプロセッサであって、記憶装置と、分岐予測を行う分岐予測部と、該分岐予測部において分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置きかえられて命令が発行された後、直前の分岐命令で分岐成立と確定した場合には分岐先の命令フェッチ要求と共に記憶装置より対応する遅延命令を取り出して命令を発行し、分岐成立と予測され該分岐命令に対応する遅延命令が発行された後、予測された分岐先の命令が発行されて予測された分岐先が正しい場合にはそのまま命令実行を継続すると共に予測された分岐先が誤っている場合には遅延命令後の分岐先命令の命令再フェッチ要求を行う手段とを備えたことを特徴とするプロセッサによっても達成できる。
【００１５】
上記の課題は、分岐のための遅延命令をもつ命令制御を行うプロセッサであって、分岐予測を行う分岐予測部と、該分岐予測部において分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置き換えられて命令が発行された後、直前の分岐命令で分岐不成立と確定した場合にはそのまま命令実行を続行し、分岐成立と予測されその後分岐不成立と確定した場合には元のシーケンシャルな命令の命令再フェッチ要求を行ってフェッチ完了後直ちに命令を発行する手段とを備えたことを特徴とするプロセッサによっても達成できる。
【００１６】
従って、本発明によれば、命令制御に大きな記憶容量を必要とせず、且つ、プロセッサ内の命令処理の全体の流れが一時的に停止されることを抑止して性能低下を確実に防止することのできる命令制御方法及びプロセッサを実現することが可能となる。
【００１７】
【発明の実施の形態】
本発明では、分岐のための遅延命令を一時的に格納し、いつでも取り出せる記憶機構を、プロセッサの命令制御装置内に設けている。遅延命令を格納する場合は、格納されている遅延命令がどの分岐命令に対応しているかを示すタグ情報と共に保持する。本発明では、分岐が成立した分岐命令は分岐予測部に登録するが、分岐が成立しなかった分岐命令については登録を行わない。つまり、過去に分岐した分岐命令については、先行して分岐先の命令のフェッチを行うが、分岐予測が行われなかった場合は、そのままシーケンシャルな命令フェッチを行い、そのまま命令を実行パイプラインに投入する。
【００１８】
ただし、そのままだと分岐命令の遅延命令も投入することになるので、分岐予測されなかった分岐命令が発行され、且つ、無効（Ａｎｎｕｌ）ビットが「１」であると、それに対応する遅延命令については一旦新しく設けた遅延命令を格納する記憶機構に保持し、実行パイプラインには遅延命令の代わりにＮｏｎ−Ｏｐｅｒａｔｉｏｎ命令を投入する。分岐条件が確定し、分岐命令が分岐しない場合は、そのまま命令処理を続行する（予測が当たったことになる）。このとき、該当する分岐命令の遅延命令は、エントリーからはずされる。
【００１９】
分岐する場合は、分岐条件と分岐先アドレスが確定した時点で、分岐先の命令のフェッチ要求を出すと共に、分岐命令が完了すると、実行中の他の命令を実行パイプラインからクリアし、分岐命令の遅延命令を取りだして実行パイプラインに投入する。遅延命令の発行後は、分岐先の命令を投入する。遅延命令が発行されると、その遅延命令は、エントリーからはずされる。分岐予測が行われた場合、予測された分岐命令に対応する遅延命令の投入後、予測分岐先の命令が投入される。この場合、遅延命令の格納は行われない。
【００２０】
分岐条件が確定して分岐する場合は、予測した分岐先のアドレスが正しかった場合はそのまま命令実行が行われ、分岐するが分岐先のアドレスが間違っていた場合は分岐先のアドレスが確定した時点で分岐先の命令再フェッチ要求（再命令フェッチ要求）を出して、遅延命令を投入後に、分岐先の命令の投入を行う。分岐予測が行われて分岐条件が確定して分岐しない場合は、分岐判定が行われた時点で後続命令の命令再フェッチ要求を出す。分岐命令が完了すると、実行パイプラインはクリアされ、その後、後続命令の投入が行われる。
【００２１】
本発明では、分岐予測に失敗した場合、即ち、１）分岐予測を行ったが分岐しなかった、２）分岐予測を行ったが分岐先アドレスを間違えた、３）分岐予測ができず分岐した、の３つのケースについては命令再フェッチが必要であるが、これは従来技術の場合も同じである。しかし。その他のケースにおいては、命令フェッチ、実行パイプラインのいずれもその処理の流れを止めることなく命令処理を行うことが出来るため、より高速に命令処理を行うことができる。
【００２２】
本発明になる命令制御方法及び本発明になるプロセッサの各実施例を、以下図面と共に説明する。
【００２３】
【実施例】
図１は、本発明になるプロセッサの一実施例を示すブロック図である。同図中、プロセッサ１００は、命令ユニット２１、メモリユニット２２及び演算ユニット２３を含む。命令ユニット２１は、本発明になる命令制御方法の一実施例を採用する命令制御装置を構成する。メモリユニット２２は、命令やデータ等を格納するために設けられ、演算ユニット２３は、各種演算を実行するために設けられている。
【００２４】
命令ユニット２１は、図１に示す如く接続された分岐予測部１、命令フェッチ部２、命令バッファ部３、相対分岐アドレス生成部４、命令デコーダ部５、分岐命令実行部６、命令完了制御部９、分岐先アドレスレジスタ１０及びプログラムカウンタ部１１からなる。分岐命令実行部６は、分岐命令制御部７及びディレイスロットスタック部８からなる。プログラムカウンタ部１１には、プログラムカウンタ（ＰＣ）とネクストプログラムカウンタ（ｎＰＣ）が含まれる。
【００２５】
分岐命令の制御は、分岐予測部１、分岐命令制御部７、命令完了制御部９及び分岐先アドレスレジスタ１０において独立して制御できる。実行パイプライン上に存在する分岐命令は、命令デコーダ部５においてデコードされると、一旦分岐命令制御部７の制御下となる。分岐命令制御部７では、分岐命令の分岐条件判定、分岐予測の成否及び命令再フェッチの制御を行う。分岐命令制御部７で制御可能な分岐命令数は、エントリー数で決定される。分岐命令制御部７での制御は、分岐命令の分岐条件確定及び分岐先アドレス生成までであり、それ以降は命令完了制御部９において制御が行われる。分岐先アドレスレジスタ１０では、分岐命令制御部７での制御から開放された分岐する分岐命令の分岐先アドレスを制御しており、命令完了、即ち、プログラムカウンタ部１１の更新まで制御する。命令完了制御部９では、全命令の命令完了条件を制御しており、分岐命令は、分岐の可否によらず必ず制御される。
【００２６】
分岐先アドレス生成は、命令相対分岐とレジスタ相対分岐の２種類に分けられる。命令相対分岐の分岐先アドレス生成は、相対分岐アドレス生成部４で計算され、分岐命令制御部７経由で分岐先アドレスレジスタ１０に供給される。レジスタ相対分岐の分岐先アドレスは、命令実行ユニット２３内で計算され、分岐命令制御部７経由で分岐先アドレスレジスタ１０に供給される。例えば、レジスタ相対分岐の分岐先アドレスの下位３２ビットは分岐命令制御部７経由で、上位３２ビットは直接プログラムカウンタ部１１に供給される。アドレス相対分岐の分岐先アドレスは、上位３２ビットが変わる時はボロウ（Ｂｏｒｒｏｗ）ビット、キャリー（Ｃａｒｒｙ）ビットの有無に基づいて計算により求められるので、分岐命令制御部７では分岐先命令アドレスは（下位３２ビット＋４ビットパリティ＋Ｂｏｒｒｏｗビット＋Ｃａｒｒｙビット）＊エントリー数で制御される。分岐先アドレスレジスタ１０においても同様に、分岐先命令アドレスは（下位３２ビット＋４ビットパリティ＋Ｂｏｒｒｏｗビット＋Ｃａｒｒｙビット）＊エントリー数で構成されている。命令アドレスの上位３２ビットが変わる時は、一旦命令バッファ部３に値をセットした後にプログラムカウンタ部１１からのリトライにより命令フェッチを必ず行うようにする。
【００２７】
使用するリソースの更新のための制御は、命令完了制御部９及びプログラムカウンタ部１１で行われる。プログラムカウンタ部１１の場合、コミットでは同時に何命令がコミットしたか、分岐する命令がコミットしたかどうかの情報が供給される。尚、分岐する命令がコミットした場合は、その情報が分岐命令制御部７にも供給される。本実施例では、ＰＣ＝ｎＰＣ＋（同時コミットした数−１）＊４、ｎＰＣ＝ｎＰＣ＋（同時コミットした数＊４）若しくは分岐先アドレスとなる。本実施例では、分岐する分岐命令はそれより前にある命令とは同時にコミットできるが、その後ろにある命令とは同時コミットしないようになっている。これは、プログラムカウンタＰＣにセットするパスに、分岐先アドレスのパスを入れていないからであり、ネクストプログラムカウンタｎＰＣと同様に、プログラムカウンタＰＣにも分岐先アドレスのパスを入れれば、分岐命令の同時コミット数の制約はなくなる。分岐しない分岐命令においては、本実施例においても、同時コミット数の制約は受けない。本実施例では、分岐命令がコミットする際に、コミットする位置の制約はなく、又、デコード時にも制約を受けない。
【００２８】
図２は、図１に示す命令ユニット２１の要部を示すブロック図である。図２中、図１と同一部分には同一符号を付し、その説明は省略する。図２において、命令デコーダ部５には、命令ワードレジスタＩＷＲ０〜ＩＷＲ３からなるレジスタ部１５が設けられている。分岐命令制御部７は、ｍ個のＲＳＢＲ０〜ＲＳＢＲｍ（Ｒｅｓｅｒｖａｔｉｏｎ　Ｓｔａｔｉｏｎｓ　ｆｏｒ　Ｂｒａｎｃｈ）からなる。ディレイスロットスタック部８は、ｎ個のＤＳＳ０〜ＤＳＳｎ（Ｄｅｌａｙ　Ｓｌｏｔ　Ｓｔａｃｋｓ）からなり、各種記憶装置により構成可能である。尚、図２の上部には、プリデコードが行われる区間（サイクル）Ｅと、デコードが行われる区間（サイクル）Ｄが示されている。
【００２９】
本実施例では、説明の便宜上、ＳＰＡＲＣアーキテクチャが採用されているものとして説明する。命令は、アウトオブオーダーで処理され、分岐命令実行部６においては、上記の如く複数のＲＳＢＲ０〜ＲＳＢＲｍ及び複数のＤＳＳ０〜ＤＳＳｎが設けられている。又、分岐命令予測機構として、分岐予測部１が設けられている。
【００３０】
命令フェッチ要求が命令フェッチ部２から出されると、命令フェッチ要求が要求する命令アドレスに対して、分岐予測部１で分岐予測が行われる。分岐予測部１に、命令フェッチ要求が要求する命令アドレスに該当するエントリーが存在する場合は、対応する命令フェッチデータに分岐予測が行われたことを示すフラグＢＲＨＩＳ＿ＨＩＴが付加され、分岐予測された分岐先命令アドレスの命令フェッチ要求が命令フェッチ部２へ出力される。命令フェッチデータは、命令フェッチ部２から、付加されたフラグＢＲＨＩＳ＿ＨＩＴと共に命令デコーダ部５に供給される。命令デコーダ部５で命令がデコードされ、命令が無効（Ａｎｎｕｌ）ビットを持つＢＰｒ，Ｂｉｃｃ，ＢＰｃｃ，　ＦＢｃｃ，ＦＢＰｃｃ等の分岐命令の場合は、フラグＢＲＨＩＳ＿ＨＩＴと共に無効ビットを参照する。
【００３１】
命令デコーダ部５は、フラグＢＲＨＩＳ＿ＨＩＴ＝１の場合には、無条件で後続の１命令を実行するが、フラグＢＲＨＩＳ＿ＨＩＴ＝０で無効ビット＝１の場合には、後続の１命令をＮｏｎ−Ｏｐｅｒａｔｉｏｎ命令（ＮＯＰ命令）としてデコードを行う。つまり、命令デコーダ部５は、フラグＢＲＨＩＳ＿ＨＩＴ＝１であれば通常通りにデコードを行い、デコード結果が分岐命令でフラグＢＲＨＩＳ＿ＨＩＴ＝０であり無効ビット＝１の場合は、後続の１命令をＮＯＰ命令に変える。ＳＰＡＲＣアーキテクチャでは、無効ビットを有する分岐命令は、分岐成立の場合はディレイスロット命令（遅延命令）を実行し、分岐不成立の場合で無効ビットが１の場合はディレイスロット命令を実行せず、無効ビットが０の場合のみディレイスロット命令を実行する。分岐予測を行うということは、命令が分岐命令であり、且つ、分岐成立と予測していることであるので、ディレイスロット命令を実行すると予測していることと実質的に同じである。尚、無効ビットを持たないＣＡＬＬ命令、ＪＭＰＬ命令及びＲＥＴＵＲＮ命令は、無条件分岐であり、いずれもディレイスロット命令を必ず実行することから、同じように取り扱える。ＣＯＮＤ＝１０００であるＡＬＷＡＹＳ＿ＢＲＡＮＣＨ命令については、無条件分岐であるにもかかわらず、無効ビット＝１の時はディレイスロット命令を実行しないが、このようなケースは出現頻度が少ないことから、命令再フェッチによりリカバリーすることができる。
【００３２】
分岐予測を行った場合、予測が当たった場合は命令再フェッチを行う必要はなく、予測した分岐先の命令シーケンスと実際の命令シーケンスは同じである。又、分岐予測が当たったということは、ディレイスロット命令の実行も正しく行われているということであり、この場合はそのまま命令を実行し続ける。
【００３３】
分岐予測を行い予測が外れた場合は、命令再フェッチが必要である。分岐先の命令シーケンスは、間違ったものを実行しており、実際の命令シーケンスを実行し直す必要がある。この場合、ディレイスロット命令の実行も誤っているため、ディレイスロット命令からやり直す必要がある。本実施例では、分岐命令制御部８から分岐先の命令再フェッチ要求を命令フェッチ部２に出力した後、ディレイスロットスタック部８より再実行するディレイスロット命令を取り出し、命令デコーダ部５へディレイスロット命令を供給する。これにより、ディレイスロット命令を含めて、分岐予測のリカバリーを行っている。
【００３４】
図３は、命令ユニット２１の要部の動作を説明するフローチャートである。又、図４は、命令ユニット２１の要部の動作を説明するタイムチャートである。
【００３５】
図３中、命令デコーダ部５において分岐命令のデコードが行われると、ステップＳ１は、命令デコーダ部５の命令ワードレジスタＩＷＲ０〜ＩＷＲ３にセットされている、命令が分岐を予測している時に「１」になるフラグ＋Ｄ０＿ＢＲＨＩＳ＿ＨＩＴ〜＋Ｄ３＿ＢＲＨＩＳ＿ＨＩＴが、「１」であるか否かを判定する。フラグ＋Ｄ０＿ＢＲＨＩＳ＿ＨＩＴ〜＋Ｄ３＿ＢＲＨＩＳ＿ＨＩＴが「１」でありステップＳ１の判定結果がＹＥＳの場合には処理は後述するステップＳ４へ進み、「０」であり判定結果がＮＯであると処理はステップＳ２へ進む。ステップＳ２は、命令ワードレジスタＩＷＲ０〜ＩＷＲ３にセットされている命令のオペコードの２９ビット目＋Ｄ０＿ＯＰＣ［２９］〜＋Ｄ３＿ＯＰＣ［２９］が「０」であるか「１」であるかを判定することで、無効ビットが「０」であるか「１」であるかを判定する。無効ビットが「１」であると、処理はステップＳ３へ進み、分岐直後の命令をＮＯＰ命令として実行し、処理は後述するステップＳ５へ進む。他方、無効ビットが「０」であると、処理はステップＳ４へ進み、分岐直後の命令をそのまま実行し、処理はステップＳ５へ進む。ステップＳ１〜Ｓ４は、デコードが行われる区間Ｄに対応する。
【００３６】
ステップＳ５は、分岐予測が正しいか否かを判定することで、命令再フェッチが必要であるか否かを判定する。分岐予測が正しくステップＳ５の判定結果がＹＥＳの場合、後続する命令が実行される。他方、分岐予測が正しくなくステップＳ５の判定結果がＮＯの場合、処理はステップＳ６へ進む。ステップＳ６は、命令フェッチ部２へ命令再フェッチ要求を行う。ステップＳ７は、ディレイスロットスタック部８からディレイスロット命令の再投入（セット）を行う。又、ステップＳ８は、正しい分岐先の命令を投入（発行）し、後続する命令を実行する。
【００３７】
図４中、（ａ）は命令デコーダ５内の処理を示し、（ｂ）は命令フェッチ部２の処理を示し、（ｃ）はディレイスロットスタック部８内の処理を示す。図４に示す例では、（ａ）の区間Ｄで分岐命令の発行が行われ、これに続く区間でステップＳ５及びステップＳ６に対応する分岐判定及び命令再フェッチ要求が行われる。同図（ｂ）の区間ＩＡで命令再フェッチが開始され、同図（ｃ）の区間Ｅ及び区間ＤでステップＳ７及びステップＳ８に対応するディレイスロット命令のセット及びディレイスロット命令の発行が行われる。又、同図（ｂ）の区間ＩＲで命令フェッチが完了する。
【００３８】
図５は、ディレイスロットスタック部８の動作を説明する図である。説明の便宜上、同図はｎ＝９（即ち、エントリーが１０個）の場合を示す。ディレイスロットスタック部８は、ディレイスロット命令を、分岐命令の制御が終了するまで一時的に保持するスタック構造を有する。命令デコード部５で分岐命令をデコードすると、直後の命令にその命令がディレイスロット命令であることを示すフラグ＋Ｄ＿ＤＥＬＡＹ＿ＳＬＯＴを付加する。分岐命令制御部７では、命令が発行された時、即ち、対応する命令ワードレジスタＩＷＲにセットされている命令が発行される時に「１」になる信号＋Ｄ＿ＲＥＬ＝１であると、フラグ＋Ｄ＿ＤＥＬＡＹ＿ＳＬＯＴ＝１の場合は、ディレイスロットスタック部８にエントリーを作成する。
【００３９】
図６は、ディレイスロットスタック部８へのエントリーのロードを示す信号＋ＬＯＡＤ＿ＤＥＬＡＹ＿ＳＬＯＴ＿Ｄ０を生成するディレイスロットスタック部８内の回路構成を、Ｄ０について示す回路図である。Ｄ１〜Ｄ３についての回路構成は、Ｄ０についての回路構成と同様であるため、その図示及び説明は省略する。図６において、アンド回路１８１には、命令デコーダ部５から得られる＋Ｄ０＿ＤＥＬＡＹ＿ＳＬＯＴ、＋Ｄ＿ＦＣＮＴ０、＋Ｄ０＿ＲＥＬが入力される。＋Ｄ０＿ＤＥＬＡＹ＿ＳＬＯＴは、命令がディレイスロット命令であることを示すフラグである。＋Ｄ＿ＦＣＮＴ０は、命令発行時において命令の第１フローであることを示す信号である。＋Ｄ０＿ＲＥＬは、命令ワードレジスタＩＷＲ０にセットされている命令が発行される時に「１」となる信号である。アンド回路１８１は、これらの信号＋Ｄ０＿ＤＥＬＡＹ＿ＳＬＯＴ、＋Ｄ＿ＦＣＮＴ０、＋Ｄ０＿ＲＥＬに基づいて、信号＋ＬＯＡＤ＿ＤＥＬＡＹ＿ＳＬＯＴ＿Ｄ０を生成する。
【００４０】
図７は、フラグ＋Ｄ０＿ＤＥＬＡＹ＿ＳＬＯＴ、＋Ｄ１＿ＤＥＬＡＹ＿ＳＬＯＴを生成する命令デコーダ部５内の回路構成を示す回路図である。Ｄ２、Ｄ３についての回路構成は、Ｄ０、Ｄ１についての回路構成と同様であるため、その図示及び説明は省略する。図７において、アンド回路１５１は、信号＋ＤＥＬＡＹ＿ＳＬＯＴ＿ＴＧＲ及び信号＋Ｄ０＿ＲＥＬに基づいて、ディレイスロットスタック部８に供給されるフラグ＋ＤＯ＿ＤＥＬＡＹ＿ＳＬＯＴを生成する。又、アンド回路１５２は、信号＋ＤＯ＿ＢＲＡＮＣＨ及び信号＋Ｄ１＿ＲＥＬに基づいて、ディレイスロットスタック部８に供給されるフラグ＋Ｄ１＿ＤＥＬＡＹ＿ＳＬＯＴを生成する。＋ＤＥＬＡＹ＿ＳＬＯＴ＿ＴＧＲは、命令ワードレジスタＩＷＲ０にセットされている命令がディレイスロット命令であることを示す信号であり、＋Ｄ０＿ＲＥＬは、命令ワードレジスタＩＷＲ０にセットされている命令が発行される時に「１」となる信号であり、これらの信号はいずれも命令デコーダ部５内で生成される。＋ＤＯ＿ＢＲＡＮＣＨは、命令ワードレジスタＩＷＲ０にセットされている命令が分岐命令であることを示す信号であり、＋Ｄ１＿ＲＥＬは、命令ワードレジスタＩＷＲ１にセットされている命令が発行される時に「１」となる信号である。
【００４１】
ディレイスロットスタック部８に作成されるエントリーの構成は、以下の通りである。
ＤＳＳ＿ＶＡＬＩＤ，
ＯＰＣ［３１：０，Ｐ３：Ｐ０］，
ＩＩＤ［５：０］，
ＰＣ［３１：０，Ｐ３：Ｐ０］，
ＩＦ＿ＸＶ，
ＩＦ＿ＸＰＴＮ＿ＣＯＤＥ［１：０］，
ＩＦ＿ＡＤＲＳ＿ＭＡＴＣＨ＿ＶＡＬＩＤ
ＤＳＳ＿ＶＡＬＩＤは、ディレイスロットスタック部８のＶＡＬＩＤ信号であり、この信号が「１」の時にエントリーが有効である。ＯＰＣは、ディレイスロット命令のオペコードである。ＩＩＤは、ディレイスロット命令の命令番号（Ｉｎｓｔｒｕｃｔｉｏｎ　ＩＤ）であり、ディレイスロット命令が命令シーケンスのどの位置にあるのかを示すタグ情報として用いられる。ＰＣは、命令の命令アドレスである。ＩＦ＿ＸＶは、該当命令が置かれているアドレスで命令フェッチの際、何らかの例外が発生したことを示す。ＩＦ＿ＸＰＴＮ＿ＣＯＤＥは、ＩＦ＿ＸＶで示される命令フェッチ例外の種類を示す。ＩＦ＿ＡＤＲＳ＿ＭＡＴＣＨ＿ＶＡＬＩＤは、指定された命令アドレスで割り込みが発生することを示す。
【００４２】
ディレイスロットスタック部８のエントリーは、ディレイスロット命令に対応する分岐命令（直前の分岐命令）の制御が終了するまで保持される。対応する分岐命令の制御が完了すると、＋ＲＳＢＲ＿ＣＯＭＰＬＥＴＥ＝１となり、エントリーは開放、即ち、消去される。＋ＲＳＢＲ＿ＣＯＭＰＬＥＴＥは、後述するように、分岐命令制御部７の対応する番目の分岐命令の制御が完了した時に「１」になる信号である。
【００４３】
対応する分岐命令の分岐判定が行われ、その結果命令再フェッチが必要な場合は、分岐命令制御部７から命令フェッチ部２に対して命令再フェッチ要求＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ＝１が出される。命令再フェッチが必要になると、ディレイスロット命令の再実行が必要になる。命令再フェッチ要求＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ＝１となると、ディレイスロットスタック部８から命令デコーダ部５内の対応する命令ワードレジスタＩＷＲ０　に信号＋ＳＥＴ＿ＩＷＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＶＡＬＩＤがセットされる。＋ＳＥＴ＿ＩＷＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＶＡＬＩＤは、ディレイスロット命令の再投入を要求するディレイスロット命令再セット要求である。ディレイスロット命令再セット要求＋ＳＥＴ＿ＩＷＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＶＡＬＩＤが「１」の場合は、常にディレイスロットスタック部８より命令が供給される。
【００４４】
図８は、ディレイスロット命令再セット要求＋ＳＥＴ＿ＩＷＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＶＡＬＩＤを生成するディレイスロットスタック部８内の回路構成を示す回路図である。同図中、アンド回路２８１には、信号＋ＦＬＵＳＨ＿ＲＳ、＋Ｅ０＿ＶＡＬＩＤ＿ＦＯＲ＿ＤＳＳ、＋ＲＥＩＦＣＨ＿ＴＧＲが入力される。＋ＦＬＵＳＨ＿ＲＳは、命令再フェッチ要求を出した分岐命令が終了した時に「１」となる信号である。＋Ｅ０＿ＶＡＬＩＤ＿ＦＯＲ＿ＤＳＳは、ディレイスロットスタック部８から命令デコーダ部５内の対応する命令ワードレジスタＩＷＲ１に命令の再セットが完了した時に「１」となる信号である。＋ＲＥＩＦＣＨ＿ＴＧＲは、分岐命令制御部７から命令再フェッチ要求を出した時に「１」となる信号であり、＋ＦＬＵＳＨ＿ＲＳ＝１になるとリセットされる。アンド回路２８２には、信号＋Ｅ０＿ＶＡＬＩＤ＿ＦＯＲ＿ＤＳＳ、−ＲＥＦＣＨ＿ＦＧＲが入力される。バッファ２８３には、信号＋ＲＳ１が入力される。＋ＲＳ１は、割り込み処理が発生した時に「１」となる信号である。アンド回路２８１、２８２の出力及びバッファ２８３の出力は、オア回路２８４に入力され、オア回路２８４の出力は、ラッチ回路２８５の入力端子ＩＮＨ及びリセット端子ＲＳＴに入力される。又、ラッチ回路２８５のセット端子ＳＥＴには、信号＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱが入力される。＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱは、分岐命令制御部７から命令フェッチ部２への命令再フェッチ要求である。ディレイスロット命令再セット要求＋ＳＥＴ＿ＩＷＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＶＡＬＩＤは、ラッチ回路２８５から出力される。
【００４５】
分岐判定が行われ、命令再フェッチ要求が＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ＝１となると、分岐命令は信号＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＤＯＮＥを「１」にセットする。＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＤＯＮＥは、命令が命令フェッチ要求を出したことを示す信号である。分岐命令の制御終了時、即ち、信号＋ＲＳＢＲ＿ＣＯＭＰＬＥＴＥ＝１の時、信号＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＤＯＮＥ＝１であると、該当する命令が図９に示す回路でセレクトされ、図１０に示す回路で一旦ラッチに保持される。＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ＝１となってからディレイスロット命令が発行されるまでは、最短で例えば３τの時間があるため、一旦ラッチアップされたデータを命令デコード部５に供給する。
【００４６】
図９は、信号＋ＳＥＬ＿ＤＳＳ０＿ＥＮＴＲＹを生成する分岐命令制御部７内の回路構成を示す回路図である。ＤＳＳ１〜ＤＳＳ３についての回路構成は、ＤＳＳ０についての回路構成と同様であるため、その図示及び説明は省略する。図７において、アンド回路１７１には、信号＋ＲＳＢＲ０＿ＣＯＭＰＬＥＴＥ、＋ＲＳＢＲ０＿ＲＥＩＦＣＨ＿ＤＯＮＥが入力され、アンド回路１７１からは信号＋ＳＥＬ＿ＤＳＳ０＿ＥＮＴＲＹが出力される。＋ＲＳＢＲ０＿ＣＯＭＰＬＥＴＥは、分岐命令制御部７の０番目の分岐命令の制御が完了した時に「１」となる信号である。＋ＲＳＢＲ０＿ＲＥＩＦＣＨ＿ＤＯＮＥは、分岐命令制御部７の０番目の分岐命令が命令再フェッチ要求を出した時に「１」となる信号である。＋ＳＥＬ＿ＤＳＳ０＿ＥＮＴＲＹは、ディレイスロットスタック部８の０番目のＤＳＳ０から命令ワードレジスタＩＷＲ０に再セットする必要が生じた時に「１」となる信号である。
【００４７】
図１０は、信号＋ＳＥＴ＿ＲＥＩＦＣＨ＿ＤＥＬＡＹ＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］、＋ＳＥＴ＿ＩＷＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ［３１：０，Ｐ３：Ｐ０］を生成するディレイスロットスタック部８内の回路構成を示す回路図である。同図中、アンド回路３８１には信号＋ＳＥＬ＿ＤＳＳ０＿ＥＮＴＲＹ、＋ＤＳＳ０＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］が入力され、アンド回路３８２には信号＋ＳＥＬ＿ＤＳＳ１＿ＥＮＴＲＹ、＋ＤＳＳ１＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］が入力され、アンド回路３８３には信号＋ＳＥＬ＿ＤＳＳ２＿ＥＮＴＲＹ、＋ＤＳＳ２＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］が入力される。アンド回路３８１
〜３８３の出力はオア回路３８４に入力され、オア回路３８４からは信号＋ＳＥＴ＿ＲＥＩＦＣＨ＿ＤＥＬＡＹ＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］が出力される。信号＋ＳＥＬ＿ＤＳＳ０＿ＥＮＴＲＹは、ディレイスロットスタック部８の０番目のＤＳＳ０から命令ワードレジスタＩＷＲ０に再セットする必要が生じた場合に「１」となる信号であり、信号＋ＤＳＳ０＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］は、ディレイスロットスタック部８の０番目のエントリーに格納されているオペコードである。信号＋ＳＥＬ＿ＤＳＳ１＿ＥＮＴＲＹは、ディレイスロットスタック部８の１番目のＤＳＳ１から命令ワードレジスタＩＷＲ１に再セットする必要が生じた場合に「１」となる信号であり、信号＋ＤＳＳ１＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］は、ディレイスロットスタック部８の１番目のエントリーに格納されているオペコードである。信号＋ＳＥＬ＿ＤＳＳ２＿ＥＮＴＲＹは、ディレイスロットスタック部８の２番目のＤＳＳ２から命令ワードレジスタＩＷＲ２に再セットする必要が生じた場合に「１」となる信号であり、信号＋ＤＳＳ２＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］は、ディレイスロットスタック部８の２番目のエントリーに格納されているオペコードである。信号＋ＳＥＴ＿ＲＥＩＦＣＨ＿ＤＥＬＡＹ＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］は、ディレイスロットスタック部８から命令ワードレジスタＩＷＲ０へのディレイスロット命令再セットの時にセットするべきオペコードである。
【００４８】
ノア回路３８５には、信号＋ＳＥＬ＿ＤＳＳ０＿ＥＮＴＲＹ、＋ＳＥＬ＿ＤＳＳ１＿ＥＮＴＲＹ、＋ＳＥＬ＿ＤＳＳ２＿ＥＮＴＲＹが入力され、ノア回路３８５の出力はラッチ回路３８６の入力端子ＩＮＨに入力される。ラッチ回路３８６のセット端子ＳＥＴには、信号＋ＳＥＴ＿ＲＥＩＦＣＨ＿ＤＥＬＡＹ＿ＯＰＣ［３１：０，Ｐ３：Ｐ０］が入力される。ラッチ回路３８６は、信号＋ＳＥＴ＿ＩＷＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ［３１：０，Ｐ３：Ｐ０］を出力する。信号＋ＳＥＴ＿ＩＷＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ［３１：０，Ｐ３：Ｐ０］は、ディレイスロットスタック部８から命令ワードレジスタＩＷＲ０へのディレイスロット命令再セットの時にセットするべきオペコードであり、図８に示す回路が出力する信号＋ＳＥＴ＿ＩＲＷ０＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＶＡＬＩＤ＝１の時にこのオペコードが命令ワードレジスタＩＷＲ０に再セットされる。
【００４９】
尚、信号ＰＣ［３１：０，Ｐ３：Ｐ０］、ＩＦ＿ＸＶ、ＩＦ＿ＸＰＴＮ＿ＣＯＤＥ［１：０］、Ｅ０＿ＮＯＰ（ＲＳＢＲ＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＡＮＮＵＬＬＥＤを選択）についても、同様の論理回路で生成可能であるので、その図示及び説明は省略する。
【００５０】
分岐判定が確定すると、そこで初めてディレイスロット命令の実行の有無が確定する。分岐予測が成功した場合は、ディレイスロット命令の再投入はしないが、分岐予測が失敗した場合は、再度ディレイスロット命令の実行の有無を判定しなければならない。本実施例では、ディレイスロット命令を実行する場合は、選択されたディレイスロットのオペコードがそのまま投入されるが、実行されない場合は、オペコードをＮＯＰ命令に変えた後にディレイスロット命令をＮＯＰ扱いとしていることを示すフラグ＋Ｅ０＿ＮＯＰ＝１と共に、命令デコード部５に命令を供給している。尚、ディレイスロット命令を実行しない場合、信号＋ＩＦ＿ＸＶ、＋ＩＦ＿ＡＤＲＳ＿ＭＡＴＣＨ＿ＶＡＬＩＤは常に０となる。
【００５１】
図１１は、信号＋ＲＳＢＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＡＮＮＵＬＬＥＤを生成する分岐命令制御部７内の回路構成を示す回路図である。ＲＳＢＲ１〜ＲＳＢＲ３についての回路構成は、ＲＳＢＲ０についての回路構成と同様であるため、その図示及び説明は省略する。図１１において、アンド回路２７１には、信号＋ＲＳＢＲ０＿ＶＡＬＩＤ、＋ＲＳＢＲ０＿ＯＰＣ［２９］、＋ＲＳＢＲ０＿ＲＥＳＯＬＶＥＤ、＋ＲＳＢＲ０＿ＴＡＫＥＮが入力され、アンド回路２７２には、信号＋ＲＳＢＲ０＿ＶＡＬＩＤ、＋ＲＳＢＲ０＿ＯＰＣ［２９］、＋ＲＳＢＲ０＿ＡＬＷＡＹＳが入力される。分岐命令制御部７には、分岐命令が発行されるとエントリーが作成される。＋ＲＳＢＲ０＿ＶＡＬＩＤは、分岐命令制御部７の０番目のエントリーが有効であることを示す信号である。＋ＲＳＢＲ０＿ＯＰＣ［２９］は、分岐命令制御部７の０番目の無効フィールドを示す信号である。＋ＲＳＢＲ０＿ＲＥＳＯＬＶＥＤは、分岐命令制御部７の０番目の分岐判定が完了すると「１」となる信号である。＋ＲＳＢＲ０＿ＴＡＫＥＮは、分岐命令制御部７の０番目の分岐命令が分岐することが確定した時に「１」となる信号である。＋ＲＳＢＲ０＿ＡＬＷＡＹＳは、分岐命令制御部７の０番目の分岐命令が相対分岐命令であり、且つ、無条件分岐であることを示す信号である。アンド回路２７１，２７２の出力は、オア回路２７３へ入力され、オア回路２７３からは、信号＋ＲＳＢＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＡＮＮＵＬＬＥＤが出力される。＋ＲＳＢＲ０＿ＤＥＬＡＹ＿ＳＬＯＴ＿ＡＮＮＵＬＬＥＤは、分岐命令制御部７の０番目の分岐命令に対応するディレイスロット命令が無効にされたことを示す信号である。
【００５２】
図１２は、信号＋Ｄ０＿ＮＯＰ、＋Ｄ１＿ＮＯＰを生成する命令デコーダ部５内の回路構成を示す回路図である。Ｄ１〜Ｄ３についての回路構成は、Ｄ０についての回路構成と同様であるため、その図示及び説明は省略する。図１２において、アンド回路２５１には、信号＋ＤＥＬＡＹ＿ＳＬＯＴ＿ＦＧＲ、−Ｄ０＿ＢＲＨＩＳ＿ＨＩＴ、＋Ｄ０＿ＯＰＣ［２９］が入力され、アンド回路２５２には、信号＋Ｄ０＿ＢＲＡＮＣＨ、−Ｄ１＿ＢＲＨＩＳ＿ＨＩＴ、＋Ｄ１＿ＯＰＣ［２９］が入力される。＋ＤＥＬＡＹ＿ＳＬＯＴ＿ＦＧＲは、命令ワードレジスタＩＷＲ０にセットされている命令がディレイスロット命令であることを示すフラグである。−Ｄ０＿ＢＲＨＩＳ＿ＨＩＴは、命令ワードレジスタＩＷＲ０にセットされている命令が分岐すると予測している時に「１」となる信号である。＋Ｄ０＿ＯＰＣ［２９］は、命令ワードレジスタＩＷＲ０にセットされている命令のオペコードの２９ビット目を示す。＋Ｄ０＿ＢＲＡＮＣＨは、命令ワードレジスタＩＷＲ０にセットされている命令が分岐命令であることを示す信号である。−Ｄ１＿ＢＲＨＩＳ＿ＨＩＴは、命令ワードレジスタＩＷＲ１にセットされている命令が分岐すると予測している時に「１」となる信号である。＋Ｄ１＿ＯＰＣ［２９］　は、命令ワードレジスタＩＷＲ１にセットされている命令のオペコードの２９ビット目を示す。
【００５３】
オア回路２５３には、アンド回路２５１の出力と、信号＋Ｅ０＿ＮＯＰが入力され、信号＋Ｄ０＿ＮＯＰが出力される。他方、アンド回路２５２は、信号＋Ｄ１＿ＮＯＰを出力する。＋Ｅ０＿ＮＯＰは、ディレイスロット命令が実行されないことを示すフラグである。＋Ｄ０＿ＮＯＰは、命令ワードレジスタＩＷＲ０にセットされている命令をＮＯＰ命令化した場合に「１」となる信号である。＋Ｄ１＿ＮＯＰは、命令ワードレジスタＩＷＲ１にセットされている命令をＮＯＰ命令化した場合に「１」となる信号である。
【００５４】
このように、本実施例では、ディレイスロット命令であることを判別するために、全ての命令に、デコードサイクルで＋Ｄ＿ＤＥＬＡＹ＿ＳＬＯＴというフラグを付加している。このフラグ＋Ｄ＿ＤＥＬＡＹ＿ＳＬＯＴが「１」であると、その命令はディレイスロット命令であることを示し、「０」であると、ディレイスロット命令ではないことを示す。このフラグ＋Ｄ＿ＤＥＬＡＹ＿ＳＬＯＴが「１」であるディレイスロット命令が発行されると、ディレイスロットスタック部８にエントリーが作成される。命令デコード部５で分岐命令がデコードされると、直後の命令のフラグは＋Ｄ＿ＤＥＬＡＹ＿ＳＬＯＴ＝１となる。
【００５５】
又、本実施例では、ディレイスロット命令の実行の有無を示すため、全ての命令にデコードサイクルで＋Ｄ＿ＮＯＰというフラグを付加している。このフラグ＋Ｄ＿ＮＯＰが「１」であると、その命令は実行されない命令であることを示し、「０」であると、実行される命令であることを示す。（−Ｄ＿ＢＲＨＩＳ＿ＨＩＴ＝１　＆　＋Ｄ＿ＢＲＡＮＣＨ　＆　＋ＯＰＣ［２９］＝１）又は（＋Ｅ０＿ＮＯＰ＝１）の場合は、デコードサイクルＤで＋Ｄ＿ＮＯＰ＝１というフラグが付加される。前者は、分岐予測が行われなかった（或いは、分岐しないと予測された）分岐命令で、無効ビットが「１」である場合であり、この場合、ディレイスロット命令が実行されないと予測していることと同義である。後者は、分岐命令が分岐予測に失敗し、ディレイスロット命令からの再投入が必要である時、ディレイスロット命令が実行されないことを示すフラグである。
【００５６】
従って、本実施例では、分岐命令に対応するディレイスロット命令を格納するための記憶部を持つことにより、分岐予測に失敗した場合にディレイスロット命令の命令再フェッチを行わず、分岐先の命令再フェッチのみを行うため、より高速に命令再フェッチのリカバリーを行うことができる。又、ディレイスロット命令は、分岐先命令再フェッチのデータ待ちの間に再発行ができる。分岐予測は、ディレイスロット命令の実行有無の予測であるため、分岐予測に成功した場合は、何ら不都合を生じることなく、高速に命令の実行ができる。
【００５７】
尚、本発明は、以下に付記する発明をも包含するものである。
【００５８】
（付記１）　分岐のための遅延命令を用いる命令制御方法であって、
複数の遅延命令を、遅延命令に対応する分岐命令が分岐成立と予測されたか分岐不成立と予測されたかを示す情報と共に順次記憶装置に格納するステップを含むことを特徴とする、命令制御方法。
【００５９】
（付記２）　分岐命令が分岐不成立と予測された場合には遅延命令を一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置き換え、分岐成立と予測された場合には遅延命令を実行するステップを更に含むことを特徴とする、付記１記載の命令制御方法。
【００６０】
（付記３）　分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置きかえられた場合にはそのままＮｏｎ−Ｏｐｅｒａｔｉｏｎ命令を発行し、分岐成立と予測された場合には該当分岐命令に対応する遅延命令を発行後に予測された分岐先の命令を発行するステップを更に含むことを特徴とする、付記２記載の命令制御方法。
【００６１】
（付記４）　命令を記憶装置に格納する時に、該命令が命令シーケンスのどの位置の命令であるのかを判別するためのタグを前記記憶装置に登録するステップを更に含むことを特徴とする、付記１〜３のいずれか１項記載の命令制御方法。
【００６２】
（付記５）　分岐のための遅延命令をもつ命令制御方法であって、
分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置きかえられて命令が発行された後、直前の分岐命令で分岐成立と確定した場合には分岐先の命令フェッチ要求と共に記憶装置より対応する遅延命令を取り出して命令を発行し、分岐成立と予測され該分岐命令に対応する遅延命令が発行された後、予測された分岐先の命令が発行されて予測された分岐先が正しい場合にはそのまま命令実行を継続すると共に予測された分岐先が誤っている場合には遅延命令後の分岐先命令の命令再フェッチ要求を行うステップを含むことを特徴とする、命令制御方法。
【００６３】
（付記６）　分岐不成立と予測された後に分岐成立が確定した場合に、分岐先の命令フェッチを分岐確定直後に行ない、前記記憶装置より取り出された遅延命令の命令投入後に分岐先の命令を発行するステップを更に含むことを特徴とする、付記５記載の命令制御方法。
【００６４】
（付記７）　分岐成立と予測された後に分岐成立が確定して予測された分岐先が誤っていた場合に、分岐先が確定した直後に正しい分岐先の命令再フェッチを行ない遅延命令の命令投入後に分岐先の命令を発行するステップを更に含むことを特徴とする、付記５記載の命令制御方法。
【００６５】
（付記８）　分岐のための遅延命令をもつ命令制御方法であって、
分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置き換えられて命令が発行された後、直前の分岐命令で分岐不成立と確定した場合にはそのまま命令実行を続行し、分岐成立と予測されその後分岐不成立と確定した場合には元のシーケンシャルな命令の命令再フェッチ要求を行ってフェッチ完了後直ちに命令を発行するステップを含むことを特徴とする、命令制御方法。
【００６６】
（付記９）　記憶装置に格納されている前記遅延命令と、該遅延命令が命令シーケンスのどの位置の命令であるのかを判別するためのタグ情報とを、同時に前記記憶装置から消去するステップを更に含むことを特徴とする、付記８記載の命令制御方法。
【００６７】
（付記１０）　分岐のための遅延命令を用いる命令制御を行うプロセッサであって、
記憶装置と、
分岐予測を行う分岐予測部と、
複数の遅延命令を、該分岐予測部において遅延命令に対応する分岐命令が分岐成立と予測されたか分岐不成立と予測されたかを示す情報と共に、順次該記憶装置に格納する制御手段とを備えたことを特徴とする、プロセッサ。
【００６８】
（付記１１）　分岐命令が分岐不成立と予測された場合には遅延命令を一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置き換え、分岐成立と予測された場合には遅延命令を実行する手段を更に備えたことを特徴とする、付記１０記載のプロセッサ。
【００６９】
（付記１２）　分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置きかえられた場合にはそのままＮｏｎ−Ｏｐｅｒａｔｉｏｎ命令を発行し、分岐成立と予測された場合には該当分岐命令に対応する遅延命令を発行後に予測された分岐先の命令を発行する手段を更に備えたことを特徴とする、付記１１記載のプロセッサ。
【００７０】
（付記１３）　命令を前記記憶装置に格納する時に、該命令が命令シーケンスのどの位置の命令であるのかを判別するためのタグを前記記憶装置に登録する手段を更に備えたことを特徴とする、付記１０〜１２のいずれか１項記載のプロセッサ。
【００７１】
（付記１４）　分岐のための遅延命令をもつ命令制御を行うプロセッサであって、
記憶装置と、
分岐予測を行う分岐予測部と、
該分岐予測部において分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置きかえられて命令が発行された後、直前の分岐命令で分岐成立と確定した場合には分岐先の命令フェッチ要求と共に記憶装置より対応する遅延命令を取り出して命令を発行し、分岐成立と予測され該分岐命令に対応する遅延命令が発行された後、予測された分岐先の命令が発行されて予測された分岐先が正しい場合にはそのまま命令実行を継続すると共に予測された分岐先が誤っている場合には遅延命令後の分岐先命令の命令再フェッチ要求を行う手段とを備えたことを特徴とする、プロセッサ。
【００７２】
（付記１５）　分岐不成立と予測された後に分岐成立が確定した場合に、分岐先の命令フェッチを分岐確定直後に行ない、前記記憶装置より取り出された遅延命令の命令投入後に分岐先の命令を発行する手段を更に備えたことを特徴とする、付記１４記載のプロセッサ。
【００７３】
（付記１６）　分岐成立と予測された後に分岐成立が確定して予測された分岐先が誤っていた場合に、分岐先が確定した直後に正しい分岐先の命令再フェッチを行ない遅延命令の命令投入後に分岐先の命令を発行する手段を更に備えたことを特徴とする、付記１４記載のプロセッサ。
【００７４】
（付記１７）　分岐のための遅延命令をもつ命令制御を行うプロセッサであって、
分岐予測を行う分岐予測部と、
該分岐予測部において分岐予測を行った時、分岐命令が分岐不成立と予測され遅延命令が一旦Ｎｏｎ−Ｏｐｅｒａｔｉｏｎ命令に置き換えられて命令が発行された後、直前の分岐命令で分岐不成立と確定した場合にはそのまま命令実行を続行し、分岐成立と予測されその後分岐不成立と確定した場合には元のシーケンシャルな命令の命令再フェッチ要求を行ってフェッチ完了後直ちに命令を発行する手段とを備えたことを特徴とする、プロセッサ。
【００７５】
（付記１８）　記憶装置と、
該記憶装置に格納されている前記遅延命令と、該遅延命令が命令シーケンスのどの位置の命令であるのかを判別するためのタグ情報とを、同時に前記記憶装置から消去する手段を更に備えたことを特徴とする、付記１７記載のプロセッサ。
【００７６】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、種々の変形及び改良が可能であることは、言うまでもない。
【００７７】
【発明の効果】
本発明によれば、命令制御に大きな記憶容量を必要とせず、且つ、プロセッサ内の命令処理の全体の流れが一時的に停止されることを抑止して性能低下を確実に防止することのできる命令制御方法及びプロセッサを実現することが可能となる。
【図面の簡単な説明】
【図１】本発明になるプロセッサの一実施例を示すブロック図である。
【図２】命令ユニットの要部を示すブロック図である。
【図３】命令ユニットの要部の動作を説明するフローチャートである。
【図４】命令ユニットの要部の動作を説明するタイムチャートである。
【図５】ディレイスロットスタック部の動作を説明する図である。
【図６】ディレイスロットスタック部内の回路構成を示す回路図である。
【図７】命令デコーダ部内の回路構成を示す回路図である。
【図８】ディレイスロットスタック部内の回路構成を示す回路図である。
【図９】分岐命令制御部内の回路構成を示す回路図である。
【図１０】
ディレイスロットスタック部内の回路構成を示す回路図である。
【図１１】分岐命令制御部内の回路構成を示す回路図である。
【図１２】命令デコーダ部内の回路構成を示す回路図である。
【符号の説明】
１　　　分岐予測部
２　　　命令フェッチ部
３　　　命令バッファ部
４　　　相対分岐アドレス生成部
５　　　命令デコーダ部
６　　　分岐命令実行部
７　　　分岐命令制御部
８　　　ディレイスロットスタック部
９　　　命令完了制御部
１０　　　分岐先アドレスレジスタ
１１　　　プログラムカウンタ部
２１　　　命令ユニット
２２　　　メモリユニット
２３　　　演算ユニット
【図１】
2004038255.tif 000003
【図２】
2004038255.tif 000004
【図３】
2004038255.tif 000005
【図４】
2004038255.tif 000006
【図５】
2004038255.tif 000007
【図６】
2004038255.tif 000008
【図７】
2004038255.tif 000009
【図８】
2004038255.tif 000010
【図９】
2004038255.tif 000011
【図１０】
2004038255.tif 000012
【図１１】
2004038255.tif 000013
【図１２】
2004038255.tif 000014