(57)【特許請求の範囲】
【請求項１】
分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐予測が成功して分岐命令が分岐した時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、
プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とする、プログラムカウンタ制御方法。
【請求項２】
分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐予測が成功して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、
プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とする、プログラムカウンタ制御方法。
【請求項３】
分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐予測が失敗して分岐命令が分岐する時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、
プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とする、プログラムカウンタ制御方法。
【請求項４】
分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐予測が失敗して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、
プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とする、プログラムカウンタ制御方法。
【請求項５】
分岐予測部を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐命令の分岐条件判定、分岐予測の成否及び命令再フェッチの制御を行い、複数の分岐命令を同時に制御可能な分岐命令制御部と、
分岐することが確定した分岐命令の分岐先アドレスを複数格納する分岐先アドレスレジスタとを備え、
該分岐先アドレスレジスタは、該分岐命令制御部及び該分岐予測部とは独立して制御可能であることを特徴とする、プロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラムカウンタ制御方法及びプロセッサに係り、特に分岐予測を行うと共に分岐のための遅延命令を持つ命令制御において、分岐命令を含めた複数の命令が同時に完了する構成のプログラムカウンタ及びネクストプログラムカウンタを同時に更新・制御するためのプログラムカウンタ制御方法、及びそのようなプログラムカウンタ制御方法を用いるプロセッサに関する。
【０００２】
【従来の技術】
近年、プロセッサの性能を向上させるために、様々な命令処理方式が用いられる。その中の１つに、アウトオブオーダ処理方式がある。アウトオブオーダ処理方式を採用したプロセッサにおいては、１つの命令実行の完了を待たずに後続の命令列を順次、複数のパイプラインに投入して命令を実行させることで、性能の向上を行なっている。
【０００３】
しかし、先行している命令の実行結果が後続の命令の実行に影響を与える場合には、先行している命令実行が完了しなければ後続の命令を実行させることができない。後続の命令の実行に影響を与える命令の処理が遅ければ、その間後続の命令は実行できず、先行の命令完了を待ち続けることになる。このため、パイプラインに乱れが生じ、性能の低下を引き起こす。このようなパイプラインの乱れは、特に分岐命令の場合に顕著に現れる。
【０００４】
分岐命令の中でも、条件分岐と呼ばれる命令の場合、条件分岐命令の直前で分岐条件（通常はコンディションコード）を変更する命令があると、分岐条件を変更する命令が完了し、分岐条件が確定するまで分岐が確定しない。従って、分岐命令の後続のシーケンスがわからないために、後続の命令を投入できず、処理が止まってしまい処理能力が低下する。このことはアウトオブオーダ処理方式を採用したプロセッサに限らず、ロック・ステップ・パイプライン等の処理方式を採用しているプロセッサにおいても同様の問題が生じるが、アウトオブオーダ処理方式を採用しているプロセッサにおいては、より顕著に性能の低下が生じる。そこで、分岐命令による性能低下を抑えるために、通常は、分岐予測を行う分岐予測機構をプロセッサ内の命令制御装置に設けて、分岐命令の高速化を図っている。
【０００５】
分岐予測機構を備えたアウトオブオーダ処理方式を採用するプロセッサの場合、複数の分岐命令が分岐予測結果に基づいて実行パイプラインに投入される。分岐命令が分岐した場合は、分岐先アドレスを命令アドレスレジスタにセットする必要がある。尚、SPARC（商標）アーキテクチャを採用するプロセッサでは、この命令アドレスレジスタは、プログラムカウンタ・ネクストプログラムカウンタと呼ばれる。実行パイプライン上に複数の分岐命令が存在している場合、命令アドレスレジスタは、各分岐命令の分岐先アドレスを命令完了まで保持する必要がある。しかし、各分岐命令の分岐確定のタイミングは異なるため、従来は、実際には分岐しない分岐命令の分岐先アドレスまで保持する必要があった。
【０００６】
実行パイプラインの分岐命令のスループットは、分岐命令制御部のスループット及び分岐先アドレスを保持するための分岐先アドレスレジスタの数で決まる。ところが、実際には分岐しない分岐命令の分岐先アドレスで分岐先アドレスレジスタを使用してしまうと、結果的に分岐命令のスループットを抑えてしまうことになる。このため、スループット改善のために、更に分岐先アドレスレジスタを増やす必要が生じてしまうという悪循環に陥ってしまっていた。
【０００７】
命令制御装置において、その実行速度を決定するものの１つに、1サイクルにおける処理可能な命令数がある。アウトオブオーダ方式による命令制御装置においては、同時に複数の命令を完了することができる。通常、命令完了とは使用するレジスタ等のリソースの更新が完了した時点を指すが、同時に複数の命令を完了させる場合には、使用するリソースの更新も複数同時に完了させる必要がある。当然、命令アドレスレジスタも、複数の命令分更新する必要がある。SPARCアーキテクチャに代表される、分岐の遅延命令を有するアーキテクチャを制御する場合、分岐命令の分岐の可否により遅延命令の実行の有無が決まり、プログラムカウンタ・ネクストプログラムカウンタの２つのレジスタを更新する必要がある。このため、従来は、分岐命令は単独若しくは決まった位置（同時に命令完了する時の他の命令との相対的な位置）からしか命令完了（コミット）できなかった。通常、デコードのサイクルにおいて、パケット方式で分岐命令をパケットの最後の位置に置き命令完了する場合も、その位置を決めている。この場合、デコードサイクル及び命令完了サイクルは、分岐命令により制約を受けることになる。
【０００８】
【発明が解決しようとする課題】
近年、LSI製造技術の向上等により、大容量のメモリを使用することが可能になり、オペレーテイングシステム（OS）やアプリケーションにおいて６４ビット化が進められるようになった。これに伴い、命令制御装置においても６４ビット化が求められている。しかし、６４ビット化に伴い、使用するレジスタ等の回路が増大してしまう。分岐命令の制御に関わるレジスタも、６４ビット化する必要があり、分岐先アドレスレジスタ等が増大してしまう。
【０００９】
このように、単純に３２ビット構成から６４ビット構成にした場合、エントリー数は変わらずに、回路が２倍必要になってしまい、回路規模（実装面積）が増大してしまうという問題があった。
【００１０】
しかし、現時点において、実際のプログラムの命令領域を４Ｇバイト以上使用するケースは少なく、プログラム中で４Ｇバイト境界を越えるケースが命令処理の性能を大きく左右することはあまり見られない。そこで、本発明は、分岐のスループットの向上を、できるだけ小さい回路規模（実装面積）で図れるプログラムカウンタ制御方法及びプロセッサを実現することを目的とする。
【００１１】
【課題を解決するための手段】
上記の課題は、分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、分岐予測が成功して分岐命令が分岐した時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とするプログラムカウンタ制御方法によって達成できる。
【００１２】
上記の課題は、分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、分岐予測が成功して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とするプログラムカウンタ制御方法によっても達成できる。
【００１３】
上記の課題は、分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、分岐予測が失敗して分岐命令が分岐する時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とするプログラムカウンタ制御方法によっても達成できる。
【００１４】
上記の課題は、分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、分岐予測が失敗して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とするプログラムカウンタ制御方法によっても達成できる。
【００１５】
前記アーキテクチャは、６４ビット長の命令アドレス空間を使用し、プログラムカウンタ制御方法は、命令の下位３２ビットとキャリービット及びボロウビットのみを使用して、分岐命令制御及び分岐先アドレスの生成を行うステップを更に含んでも良い。
【００１６】
上記の課題は、分岐予測部を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、分岐命令の分岐条件判定、分岐予測の成否及び命令再フェッチの制御を行い、複数の分岐命令を同時に制御可能な分岐命令制御部と、分岐することが確定した分岐命令の分岐先アドレスを複数格納する分岐先アドレスレジスタとを備え、該分岐先アドレスレジスタは、該分岐命令制御部及び該分岐予測部とは独立して制御可能であることを特徴とするプロセッサによっても達成できる。
【００１７】
上記の課題は、分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、プログラムカウンタ及びネクストプログラムカウンタからなるプログラムカウンタ手段と、分岐予測が成功して分岐命令が分岐した時に、分岐命令を含めた複数の命令を同時に命令完了させる手段と、該プログラムカウンタ及び該ネクストプログラムカウンタを、完了した命令数に合わせて同時に更新する手段とを備えたことを特徴とするプロセッサによっても達成できる。
【００１８】
上記の課題は、分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、プログラムカウンタ及びネクストプログラムカウンタからなるプログラムカウンタ手段と、分岐予測が成功して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させる手段と、該プログラムカウンタ及び該ネクストプログラムカウンタを、完了した命令数に合わせて同時に更新する手段とを備えたことを特徴とするプロセッサによっても達成できる。
【００１９】
上記の課題は、分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、プログラムカウンタ及びネクストプログラムカウンタからなるプログラムカウンタ手段と、分岐予測が失敗して分岐命令が分岐する時に、分岐命令を含めた複数の命令を同時に命令完了させる手段と、該プログラムカウンタ及び該ネクストプログラムカウンタを、完了した命令数に合わせて同時に更新する手段とを備えたことを特徴とするプロセッサによっても達成できる。
【００２０】
上記の課題は、分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、プログラムカウンタ及びネクストプログラムカウンタからなるプログラムカウンタ手段と、分岐予測が失敗して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させる手段と、該プログラムカウンタ及び該ネクストプログラムカウンタを、完了した命令数に合わせて同時に更新する手段とを備えたことを特徴とするプロセッサによっても達成できる。
【００２１】
従って、本発明によれば、分岐のスループットの向上を、できるだけ小さい回路規模（実装面積）で図れるプログラムカウンタ制御方法及びプロセッサを実現することができる。
【００２２】
【発明の実施の形態】
本発明になるプログラムカウンタ制御方法及び本発明になるプロセッサの各実施例を、以下図面と共に説明する。
【００２３】
【実施例】
図１は、本発明になるプロセッサの一実施例を示すブロック図である。同図中、プロセッサ１００は、命令ユニット２１、メモリユニット２２及び演算ユニット２３を含む。命令ユニット２１は、本発明になる命令制御方法の一実施例を採用する命令制御装置を構成する。メモリユニット２２は、命令やデータ等を格納するために設けられ、演算ユニット２３は、各種演算を実行するために設けられている。
【００２４】
命令ユニット２１は、図１に示す如く接続された分岐予測部１、命令フェッチ部２、命令バッファ部３、相対分岐アドレス生成部４、命令デコーダ部５、分岐命令実行部６、命令完了制御部９、分岐先アドレスレジスタ１０及びプログラムカウンタ部１１からなる。分岐命令実行部６は、分岐命令制御部７及びディレイスロットスタック部８からなる。プログラムカウンタ部１１には、プログラムカウンタPC、ネクストプログラムカウンタnPC及び更新部が含まれる。
【００２５】
分岐命令の制御は、分岐予測部１、分岐命令制御部７、命令完了制御部９及び分岐先アドレスレジスタ１０において独立して制御できる。実行パイプライン上に存在する分岐命令は、命令デコーダ部５においてデコードされると、一旦分岐命令制御部７の制御下となる。分岐命令制御部７では、分岐命令の分岐条件判定、分岐予測の成否及び命令再フェッチの制御を行う。分岐命令制御部７で制御可能な分岐命令数は、エントリー数で決定される。分岐命令制御部７での制御は、分岐命令の分岐条件確定及び分岐先アドレス生成までであり、それ以降は命令完了制御部９において制御が行われる。分岐先アドレスレジスタ１０では、分岐命令制御部７での制御から開放された分岐する分岐命令の分岐先アドレスを制御しており、命令完了、即ち、プログラムカウンタ部１１の更新まで制御する。命令完了制御部９では、全命令の命令完了条件を制御しており、分岐命令は、分岐の可否によらず必ず制御される。実行パイプライン上に同時に存在できる分岐命令数MAXは、命令完了制御部９のエントリー数Nに依存し、分岐先アドレスレジスタ（エントリー数＝M）がフル（FULL）になった時は、分岐する分岐命令数のMAXは、分岐命令制御部７のエントリー数Lとの和L+Mになる。分岐しない分岐命令は、分岐先アドレスレジスタ１０の数に依存しない。分岐先アドレスレジスタ１０の下での制御は、分岐命令制御部７から開放されて命令が完了するまでの間だけであるため、分岐命令制御部７の空きが存在する間は命令デコードが影響を受けることはない。
【００２６】
分岐先アドレス生成は、命令相対分岐とレジスタ相対分岐の２種類に分けられる。命令相対分岐の分岐先アドレス生成は、相対分岐アドレス生成部４で計算され、分岐命令制御部７経由で分岐先アドレスレジスタ１０に供給される。レジスタ相対分岐の分岐先アドレスは、命令実行ユニット２３内で計算され、分岐命令制御部７経由で分岐先アドレスレジスタ１０に供給される。例えば、レジスタ相対分岐の分岐先アドレスの下位３２ビットは分岐命令制御部７経由で、上位３２ビットは直接プログラムカウンタ部１１に供給される。アドレス相対分岐の分岐先アドレスは、上位３２ビットが変わる時はボロウ（Borrow）ビット、キャリー（Carry）ビットの有無に基づいて計算により求められるので、分岐命令制御部７では分岐先命令アドレスは（下位３２ビット+４ビットパリティ+Borrowビット+Carryビット）*エントリー数で制御される。分岐先アドレスレジスタ１０においても同様に、分岐先命令アドレスは（下位３２ビット+４ビットパリティ+Borrowビット+Carryビット）*エントリー数で構成されている。命令アドレスの上位32ビットが変わる時は、一旦プログラムカウンタ部１１に値をセットした後にプログラムカウンタ部１１からのリトライにより命令フェッチを必ず行うようにする。
【００２７】
使用するリソースの更新のための制御は、命令完了制御部９及びプログラムカウンタ部１１で行われる。プログラムカウンタ部１１の場合、命令完了（コミット）では同時に何命令が命令完了したか及び分岐する命令が命令完了したかどうかの情報が供給される。尚、分岐する命令が命令完了した場合は、その情報が分岐命令制御部７にも供給される。本実施例では、PC=nPC+（同時に命令完了した数-1）＊４、nPC＝nPC+（同時に命令完了した数＊４）若しくは分岐先アドレスとなる。本実施例では、分岐する分岐命令はそれより前にある命令とは同時に命令完了できるが、その後ろにある命令とは同時に命令完了しないようになっている。これは、プログラムカウンタPCにセットするパスに、分岐先アドレスのパスを入れていないからであり、ネクストプログラムカウンタnPCと同様に、プログラムカウンタPCにも分岐先アドレスのパスを入れれば、分岐命令の同時命令完了数の制約はなくなる。分岐しない分岐命令においては、本実施例においても、同時命令完了数の制約は受けない。本実施例では、分岐命令が命令完了する際に、命令完了する位置の制約はなく、又、デコード時にも制約を受けない。
【００２８】
図２は、図１に示す命令ユニット２１の要部を、演算ユニット２３と共に示すブロック図である。図２中、図１と同一部分には同一符号を付し、その説明は省略する。図２において、命令デコーダ部５から分岐命令制御部７及び命令完了制御部９への入力の図示は省略する。プログラムカウンタ部１１は、プログラムカウンタPC、ネクストプログラムカウンタnPC、ラッチ回路１１−１、プログラムカウンタ（PC）用更新回路１１−２及びネクストプログラムカウンタ（nPC）用更新回路１１−３からなる。以下の説明で、特に明記していない場合を除き、アドレスは全てロジカルアドレスであるものとする。
【００２９】
本実施例では、説明の便宜上、SPARCアーキテクチャが採用されているものとして説明する。命令は、アウトオブオーダで処理され、分岐命令実行部６においては、分岐命令制御部７内に複数のRSBR0〜RSBRm（Reservation Station for Branch）が設けられ、ディレイスロットスタック部８内に複数のDSS0〜DSSn（Delay Slot Stack）が設けられている。又、分岐命令予測機構として、分岐予測部１が設けられている。
【００３０】
図３は、上記の如き分岐命令制御時の動作を説明するフローチャートである。同図中、ステップＳ１は、分岐命令が終了したか否かを判定し、判定結果がＹＥＳになると、ステップＳ２は、分岐命令が分岐するか否かを判定する。ステップＳ２の判定結果がＮＯであると、処理は後述するステップＳ４へ進む。他方、ステップＳ２の判定結果がＹＥＳであると、ステップＳ３は、分岐先アドレスレジスタ１０に空きエントリーが存在するか否かを判定する。ステップＳ３の判定結果がＹＥＳになると、処理はステップＳ４へ進む。
【００３１】
ステップＳ４は、分岐命令制御部７での分岐命令の制御を完了し、処理はステップＳ５及びステップＳ６へ進む。ステップＳ５は、分岐命令の完了を命令完了制御部９へ通知する。ステップＳ５と同時に、ステップＳ６は、分岐する場合は分岐アドレスの保持を分岐先アドレスレジスタ１０に指示する。ステップＳ５及びステップＳ６の後、ステップＳ７は、リソースの更新、即ち、プログラムカウンタ部１１の更新を更新回路１１−２，１１−３により行う。
【００３２】
図４は、プログラムカウンタ部１１の更新時の動作を説明するフローチャートである。同図に示す処理は、図３に示すステップＳ７の処理に対応する。図４において、ステップＳ１１は、命令完了の条件がそろっているか否かを判定する。ステップＳ１１の判定結果がＹＥＳになると、ステップＳ１２は、同時に何命令が命令完了したか及び分岐する命令が命令完了したかの情報をプログラムカウンタ部１１へ通知する。ステップＳ１２の後、ステップＳ１３及びステップＳ１４が同時に行われる。
【００３３】
ステップＳ１３は、分岐する命令が命令完了した場合、その情報を分岐先アドレスレジスタ１０へ通知し、処理は後述するステップＳ１５へ進む。他方、ステップＳ１４は、通知される情報に、分岐する命令が含まれているか否かを判定し、判定結果がＹＥＳであると処理はステップＳ１５へ進み、ＮＯであると処理はステップＳ１６へ進む。ステップＳ１５は、PC=nPC+（同時に命令完了した数-1）＊４、nPC＝分岐先アドレスに設定する。又、ステップＳ１６は、PC=nPC+（同時に命令完了した数-1）＊４、nPC＝nPC+（同時に命令完了した数＊４）に設定する。
【００３４】
図２にの説明に戻るに、命令フェッチ要求が命令フェッチ部２から出されると、命令フェッチ要求が要求する命令アドレスに対して、分岐予測部１で分岐予測が行われる。分岐予測部１に、命令フェッチ要求が要求する命令アドレスに該当するエントリーが存在する場合は、対応する命令フェッチデータに分岐予測が行われたことを示すフラグBRHIS_HITが付加され、分岐予測された分岐先命令アドレスの命令フェッチ要求が命令フェッチ部２へ出力される。命令フェッチデータは、命令フェッチ部２から、付加されたフラグBRHIS_HITと共に命令デコーダ部５に供給される。命令デコーダ部５で命令がデコードされ、命令が無効（Annul）ビットを持つBPr,Bicc,BPcc,  FBcc,FBPcc等の分岐命令の場合は、フラグBRHIS_HITと共に無効ビットを参照する。
【００３５】
命令デコーダ部５は、フラグBRHIS_HIT=1の場合には、無条件で後続の１命令を実行するが、フラグBRHIS_HIT＝０で無効ビット＝１の場合には、後続の１命令をNon-Operation命令（NOP命令）としてデコードを行う。つまり、命令デコーダ部５は、フラグBRHIS_HIT=1であれば通常通りにデコードを行い、デコード結果が分岐命令でフラグBRHIS_HIT＝０であり無効ビット＝１の場合は、後続の１命令をNOP命令に変える。SPARCアーキテクチャでは、無効ビットを有する分岐命令は、分岐成立の場合はディレイスロット命令（遅延命令）を実行し、分岐不成立の場合で無効ビットが１の場合はディレイスロット命令を実行せず、無効ビットが０の場合のみディレイスロット命令を実行する。分岐予測を行うということは、命令が分岐命令であり、且つ、分岐成立と予測していることであるので、ディレイスロット命令を実行すると予測していることと実質的に同じである。尚、無効ビットを持たないCALL命令、JMPL命令及びRETURN命令は、無条件分岐であり、いずれもディレイスロット命令を必ず実行することから、同じように取り扱える。COND=1000であるALWAYS_BRANCH命令については、無条件分岐であるにもかかわらず、無効ビット＝１の時はディレイスロット命令を実行しないが、このようなケースは出現頻度が少ないことから、命令再フェッチによりリカバリーすることができる。
【００３６】
分岐予測を行った場合、予測が当たった場合は再命令フェッチを行う必要はなく、予測した分岐先の命令シーケンスと実際の命令シーケンスは同じである。又、分岐予測が当たったということは、ディレイスロット命令の実行も正しく行われているということであり、この場合はそのまま命令を実行し続ける。
【００３７】
分岐予測を行い予測が外れた場合は、再命令フェッチが必要である。分岐先の命令シーケンスは、間違ったものを実行しており、実際の命令シーケンスを実行し直す必要がある。この場合、ディレイスロット命令の実行も誤っているため、ディレイスロット命令からやり直す必要がある。本実施例では、分岐命令制御部８から分岐先の再命令フェッチ要求を命令フェッチ部２に出力した後、ディレイスロットスタック部８より再実行するディレイスロット命令を取り出し、命令デコーダ部５へディレイスロット命令を供給する。これにより、ディレイスロット命令を含めて、分岐予測のリカバリーを行っている。
【００３８】
全ての分岐命令は、命令デコード部５でデコードされると、分岐命令制御部７及び命令完了制御部９にエントリーを作成する。分岐命令制御部７では、分岐命令の分岐先アドレス及び分岐条件の確定まで分岐命令を制御する。命令完了制御部９では、命令完了のための制御、即ち、命令をインオーダで完了させるための制御が行われる。
【００３９】
SPARCでは、上記の如く、命令相対分岐及びレジスタ相対分岐の２種類が定義されている。命令相対分岐の分岐先アドレスは、相対分岐アドレス生成部４で生成され、レジスタ相対分岐の分岐先アドレスは、演算ユニット２３で生成される。相対分岐アドレス生成部４で生成された分岐先アドレスは、分岐命令制御部７に供給される。分岐命令制御部７は、相対分岐アドレス生成部４から分岐先アドレスPCRAG_TGT_PC[31:0,P3:P0]、CARRYビットPCRAG_TGTPC_CARRY、BORROWビットPCRAG_TGTPC_BORROWを供給され、演算ユニット２３から分岐先アドレスEXA_TGT_PC[31:0,P3:P0]を供給される。又、演算ユニット２３は、この時EXA_TGT_PC[63:32,P7:P4]をプログラムカウンタ部１１に供給する。
【００４０】
分岐命令制御部７での分岐命令の制御が完了すると、分岐命令は命令完了制御部９で命令完了まで制御される。分岐命令が分岐命令制御部７から開放される時、分岐命令が分岐する場合は、分岐先アドレスが分岐先アドレスレジスタ１０に格納される。分岐先アドレスレジスタ１０に格納されている分岐先アドレスは、対応する分岐命令のサイクルＷでプログラムカウンタ部１１のネクストプログラムカウンタnPCの更新に使われる。サイクルＷは、レジスタ類の更新サイクルであり、プログラムカウンタPC及びネクストプログラムカウンタnPCもこのサイクルＷにおいて更新される。分岐命令制御部７から分岐命令を開放する時、開放される分岐命令が分岐する時は分岐アドレスレジスタ１０のエントリーに空きがあるか否かが確認され、空きがある場合は分岐命令制御部７から開放されるが、空きがない場合は分岐命令制御部７から開放されない。しかし、分岐アドレスレジスタ１０がフル（FULL）であっても、分岐命令が分岐しない場合は、分岐命令は分岐命令制御部７から開放される。
【００４１】
本実施例では、分岐命令制御部７は１０個のエントリーを持ち、分岐アドレスレジスタ１０は２個のエントリーを持っている。分岐アドレスレジスタ１０がフル（FULL）であっても、分岐命令制御部７内にある後続の分岐命令の制御は、分岐命令制御部７がフル（FULL）になるまで制御が止まることはない。分岐アドレスレジスタ１０のエントリーは、VALID、分岐先アドレスTGT_PC[31:0,P3:P0]、CARRYビットTGT_PC_CARRY、BORROWビットTGT_PC_BORROW、IID[5:0]により構成されている。エントリーの有効性を示すVALID=1である時は、そのエントリーが有効であることを示す。分岐する分岐命令が分岐命令制御部７から開放されると、分岐アドレスレジスタ１０にエントリーが作成され、VALID=１にセットされ、その分岐命令のサイクルＷまでエントリーが保持される。
【００４２】
図５は、分岐命令制御部７内のエントリーを示す概念図である。同図に示す１０個エントリーは、夫々VALID、分岐先アドレスTGT_PC[31:0,P3:P0]、分岐アドレスPC[31:0,P3:P0]、CARRYビット、BORROWビット及びIIDを含む。
又、図６は、分岐先アドレスレジスタ１０の概要図である。同図に示す２個のエントリーＡ、Ｂは、夫々VALID、分岐先アドレスTGT_PC[31:0,P3:P0]、CARRYビット、BORROWビット及びIIDを含む。
【００４３】
図７は、プログラムカウンタ部１１の構成を示すブロック図である。プログラムカウンタ部１１のプログラムカウンタPC及びネクストプログラムカウンタnPCの更新は、命令の完了（命令完了サイクル）後のサイクルＷにおいて同時に行われる。更新については、大きく分けて以下のケース(1)〜(4)が存在する。
(1)複数の命令が同時に命令完了し、その中に分岐する分岐命令が存在しない場合。
(2)複数の命令が同時に命令完了し、その中に分岐する分岐命令が存在する場合。
(3)命令が４Ｇバイト境界を跨いで実行される場合。
(4)命令が命令完了した時その命令で割り込みが発生した場合。
【００４４】
プログラムカウンタ部１１のプログラムカウンタPC及びネクストプログラムカウンタnPCの更新は、基本的にはPC=nPC+（同時に命令完了した数-1）＊４、nPC＝nPC+（同時に命令完了した数＊４）or分岐先アドレスとなる。従って、PC=nPC+（同時に命令完了した数-1）＊４、nPC=PC+4 or分岐先アドレスとなる。
【００４５】
本実施例では、分岐命令の遅延命令（ディレイスロット（DSS）命令）を、無効（ANNUL）にするという事象を、無効にされるDSS命令をNon-Operation命令（NOP命令）相当に置き換えることで実現している。プログラムカウンタ部１１のプログラムカウンタPC及びネクストプログラムカウンタnPCについても、命令を実行した時と同じように更新を行う。従って、分岐しない分岐命令が命令完了する場合と、同時に命令完了する命令群の中に分岐命令が含まれていない場合（上記ケース(1)の場合）には、プログラムカウンタPC及びネクストプログラムカウンタnPCの更新はPC=nPC+（同時に命令完了した数-1）＊４、nPC=PC+4となる。DSS命令が無効にされた時、NOP命令に置き換えたDSS命令の命令完了時に割り込みを許すと、プロセッサ外にDSS命令終了時のプログラムカウンタPCの値が見えてしまう。このようなNOP命令に置き換えたDSS命令は、実際には実行されない命令であるため、PC=（NOP命令に置き換えたDSS命令の命令アドレス）となっていると、割り込みから復帰した場合に実行命令列を誤る。そこで、これを防ぐため、本実施例では、このような場合にプログラムカウンタPC及びネクストプログラムカウンタnPCの値をDSS命令分（4バイト）更に更新するようにする。
【００４６】
分岐する分岐命令が、複数の命令と同時に命令完了する場合、分岐命令は、それ以前の命令と同時に命令完了することはできるが、後続の命令とは同時に命令完了することができない。即ち、分岐する分岐命令が命令完了する場合は、必ず同時に命令完了する命令群の最後の命令となるため、PC=（DSS命令の命令アドレス）、nPC＝（分岐の分岐先アドレス）となる（上記ケース(2)の場合）。
【００４７】
本実施例では、分岐する分岐命令の命令完了時に制約を設けることで、プログラムカウンタPC及びネクストプログラムカウンタnPCの更新回路１１−２，１１−３を簡素化しているが、プログラムカウンタPCの更新回路１１−２に対して、分岐する分岐命令の後続命令が何命令同時に命令完了したかを通知することで、PC=TGT_PC+（同時に命令完了した分岐命令の後続命令数*4）、nPC=PC+4になり、命令完了時の制約は不要となる。
【００４８】
分岐する分岐命令のTGT_PCは、分岐先アドレスレジスタ１０からネクストプログラムカウンタnPCにサイクルＷにおいてセットされる。分岐する分岐命令が命令完了すると、そのサイクルＷにその命令の命令番号（Instruction ID:IID）が命令完了制御部９から供給され、分岐先アドレスレジスタ１０にある同じIIDを持つエントリーから、ネクストプログラムカウンタnPCに対してTGT_PC[31:0,P3:P0]がセットされる。このようにネクストプログラムカウンタnPCにセットすると同時に、分岐先アドレスレジスタ１０のエントリーは開放され、分岐先アドレスレジスタ１０には新たなエントリーをセットすることが可能となる。
【００４９】
分岐命令が命令完了し、その分岐命令が分岐し、分岐先のアドレスが４Ｇバイト境界を跨いでいる場合の動作は、次のようになる。プログラムカウンタPCはPC=nPC+（同時に命令完了した数-1）＊４で求められるため、特別な制御は必要としない。ネクストプログラムカウンタnPCは、nPC＝（分岐先アドレス）となるため、分岐先アドレスレジスタ１０からセットされるが、分岐先アドレスレジスタ１０は、下位３２ビット（+４PARITY）しかアドレスを保持していない。このため、命令完了した分岐命令が、命令相対分岐である場合は、分岐先アドレスレジスタ１０に保持してあるTGT_PC_CARRY、TGT_PC_BORROWに基づいて、上位３２ビット（+４PARITY）が生成される。分岐先アドレスが４Ｇバイト境界を跨ぐか否かは、TGT_PC_CARRY、TGT_PC_BORROWのいずれかが「１」であるか否かで判断できる。尚、TGT_PC_CARRY、TGT_PC_BORROWが同時に「１」になることはない。
【００５０】
レジスタ相対分岐の場合、分岐先アドレスは、演算ユニット２３で生成される。下位３２ビット（+４PARITY）については、分岐先アドレスレジスタ１０より得られる。上位３２ビット（+４PARITY）については、演算ユニット２３での分岐先アドレス生成後、分岐命令制御部７に下位３２ビット（+４PARITY）が供給されると同時に、プログラムカウンタ部１１に上位３２ビット（+４PARITY）が供給される。この際、演算ユニット２３から分岐先アドレスを生成した分岐命令のIID[5:0]が、分岐先アドレスと同時に、分岐命令制御部７及びプログラムカウンタ部１１に供給される。プログラムカウンタ部１１では、分岐先アドレスの上位３２ビット（+４PARITY）及びその時のIID[5:0]を保持する。本実施例では、プログラムカウンタ部１１に、1命令分保持するためのADRS_HOLDラッチ回路１１−１が設けられている。この時、供給されてくる分岐先アドレスの上位３２ビットとプログラムカウンタPCの上位３２ビットとが比較され、一致しない場合には４Ｇバイト境界を跨ぐと判断し、信号+JMPL_RETURN_TGT_EQ_PC_HIGH=0となる。
【００５１】
レジスタ相対分岐が分岐して命令完了した場合、命令完了した命令のIIDがプログラムカウンタ部１１で保持しているADRS_HOLDラッチ回路１１−１のIIDと一致すると、上位３２ビット（+４PARITY）は、このプログラムカウンタ部１１にあるADRS_HOLDラッチ回路１１−１よりセットされる。レジスタ相対分岐が分岐する場合は、分岐先アドレスが４Ｇバイト境界を跨ぐか否かに関わらず、上位３２ビット（+４PARITY）はADRS_HOLDラッチ回路１１−１から、下位３２ビット（+４PARITY）は分岐先アドレスレジスタ１０からネクストプログラムカウンタnPCにセットされることになる。ただし、分岐先アドレスが４Ｇバイト境界を跨ぐ場合は、信号+JMPL_RETURN_TGT_EQ_PC_HIGH=0となる。
【００５２】
命令列が４Ｇバイト境界を跨いで実行される場合、命令フェッチ部２は、命令フェッチアドレスの上位３２ビットについて、境界直前の値で命令フェッチを行っているため、境界直前の命令が完了した時点で命令フェッチをやり直す必要がある。これは、命令アドレスの上位３２ビットの値が、境界直前の命令と境界直後の命令では異なるためである。従って、本実施例では、境界直前の命令が完了した後、プログラムカウンタ部１１から命令再フェッチ要求REIFCHが命令フェッチ部２に供給される。この時、プログラムカウンタPCの値は、境界直後の命令アドレスに更新されているので、命令フェッチ部２は、プログラムカウンタPCの値から命令フェッチを再開する。
【００５３】
命令完了時に割り込みが発生し、割り込み処理を終えた後、命令制御装置が再スタートした場合、nPC≠PC+4となっている状態が発生することがある。この場合、プログラムカウンタ部１１から命令再フェッチ要求REIFCHが命令フェッチ部２に供給されるが、この時の要求アドレスは、プログラムカウンタPCが指すアドレスとなるものの、その次に実行しなければならない命令は、ネクストプログラムカウンタnPCが指すアドレスの命令である。従って、この場合、一度プログラムカウンタPが指すアドレスで命令フェッチが行われ、1命令（プログラムカウンタPCが指していたアドレスの命令）完了すると、プログラムカウンタPC及びネクストプログラムカウンタnPCを更新した後、再度、命令再フェッチ要求REIFCHが命令フェッチ部２に供給される。これは、命令フェッチ部２は、プログラムカウンタ部１１から命令再フェッチ要求REIFCHがあると、プログラムカウンタPCが指すアドレスで命令フェッチを行い、その後続の命令を供給しようとするからである。
【００５４】
分岐命令のディレイスロット命令が無効にされた場合、ディレイスロット命令は、NOP命令扱いにして命令制御を行うが、この無効にされたディレイスロット命令の直前の分岐命令完了時に割り込みが発生した場合には、PC＝（無効にされたディレイスロット命令のアドレス）、nPC＝（実際に分岐命令の次に実行されるべき命令のアドレス）となってしまう。この状態で、割り込み処理を行い再スタートさせると、実際には実行してはいけない無効にされたディレイスロット命令からスタートしてしまう。そこで、本実施例では、分岐命令完了時に割り込みが発生した場合、後続のディレイスロット命令を無効にする場合は信号+FORCE_NOP_TGR=1とし、この信号がONの場合に割り込みが発生した場合には一度プログラムカウンタPC及びネクストプログラムカウンタnPCを更新した後、割り込み処理中にPC＝nPC、nPC＝nPC+4と再度プログラムカウンタPC及びネクスト付グラムカウンタnPCを更新している。
【００５５】
次に、分岐命令制御部７の構成について、図８〜図１１と共に説明する。図８〜図１１は、分岐命令制御部７内の要部の論理回路図である。
【００５６】
図８において、アンド回路１７１〜１７２及びオア回路１７４は、分岐命令制御部７で分岐する分岐命令が少なくとも１つ制御完了した時に「１」になる信号+RSBR_COMPLETE_TAKEN_RELEASEを生成する。アンド回路１７１には、分岐命令制御部７の０番のエントリーにある分岐命令の制御完了時に「１」となる信号+RSBR0_COMPLETEと、分岐命令制御部７の０番のエントリーにある分岐命令の分岐確定時に「１」となる信号+RSBR0_TAKENとが入力される。同様にして、アンド回路１７２には、分岐命令制御部７の１番のエントリーにある分岐命令の制御完了時に「１」となる信号+RSBR1_COMPLETEと、分岐命令制御部７の１番のエントリーにある分岐命令の分岐確定時に「１」となる信号+RSBR1_TAKENとが入力され、アンド回路１７３には、分岐命令制御部７の２番のエントリーにある分岐命令の制御完了時に「１」となる信号+RSBR2_COMPLETEと、分岐命令制御部７の２番のエントリーにある分岐命令の分岐確定時に「１」となる信号+RSBR2_TAKENとが入力される。オア回路１７４には、アンド回路１７１〜１７３の出力が入力される。
【００５７】
エクスクルシブノア（排他的否定論理和）回路２７１及びアンド回路２７２，２７３は、分岐命令制御部７内にある分岐先アドレスレジスタ１０内のエントリＡに保持されている分岐命令のIIDと分岐する分岐命令が命令完了した時のその分岐命令のIIDとを比較する。エクスクルシブノア回路２７１には、分岐命令制御部７（又はプログラムカウンタ部１１）内で分岐する分岐命令が命令完了した時のその分岐命令のIIDを示す信号+COMIT_TAKEN_IID[5:0]と、分岐命令制御部７内にある分岐先アドレスレジスタ１０のエントリーＡに保持されている分岐命令のIIDを示す信号+RSBR_TGT_BUFF_A_IID[5:0]とが入力される。信号+RSBR_TGT_BUFF_A_IID[5:0]は、後述する信号+TARGET_ADRS_BUFFER_A_IID[5:0]と同等である。アンド回路２７２には、分岐先アドレスレジスタ１０よりネクストプログラムカウンタに値をセットする必要がある時に「１」になる信号+LOAD_TGT_TO_NPCと、分岐先アドレスレジスタ１０内のエントリーＡが有効である時に「１」となる信号+RSBR_TGT_BUFF_A_VALIDとが入力される。アンド回路２７３は、エクスクルシブノア回路２７１及びアンド回路２７２の出力が入力される。
【００５８】
エクスクルシブノア回路２７４及びアンド回路２７５，２７６は、分岐命令制御部７内にある分岐先アドレスレジスタ１０内のエントリＢに保持されている分岐命令のIIDと分岐する分岐命令が命令完了した時のその分岐命令のIIDとを比較する。エクスクルシブノア回路２７４には、分岐命令制御部７（又はプログラムカウンタ部１１）内で分岐する分岐命令が命令完了した時のその分岐命令のIIDを示す信号+COMIT_TAKEN_IID[5:0]と、分岐命令制御部７内にある分岐先アドレスレジスタ１０のエントリーＢに保持されている分岐命令のIIDを示す信号+RSBR_TGT_BUFF_B_IID[5:0]とが入力される。信号+RSBR_TGT_BUFF_B_IID[5:0]は、後述する信号+TARGET_ADRS_BUFFER_B_IID[5:0]と同等である。アンド回路２７５には、分岐先アドレスレジスタ１０よりネクストプログラムカウンタに値をセットする必要がある時に「１」になる信号+LOAD_TGT_TO_NPCと、分岐先アドレスレジスタ１０内のエントリーＢが有効である時に「１」となる信号+RSBR_TGT_BUFF_B_VALIDとが入力される。アンド回路２７６は、エクスクルシブノア回路２７４及びアンド回路２７５の出力が入力される。
【００５９】
図９において、アンド回路２７７は、分岐先アドレスレジスタ１０のエントリーＡを開放する時に「１」となる信号-RSBR_TGT_BUFF_A_REL及び分岐先アドレスレジスタ１０内のエントリーＡが有効である時に「１」となる信号+RSBR_TGT_BUFF_A_VALIDに基づいて、分岐先アドレスレジスタ１０のエントリーＡに対するクロックイネーブル信号+HOLD_RSBR_TGT_BUFF_Aを生成する。アンド回路２７８は、分岐先アドレスレジスタ１０のエントリーＢを開放する時に「１」となる信号-RSBR_TGT_BUFF_B_REL及び分岐先アドレスレジスタ１０内のエントリーＢが有効である時に「１」となる信号+RSBR_TGT_BUFF_B_VALIDに基づいて、分岐先アドレスレジスタ１０のエントリーＢに対するクロックイネーブル信号+HOLD_RSBR_TGT_BUFF_Bを生成する。
【００６０】
ナンド回路３７１は、分岐命令制御部７の０番のエントリーにある分岐命令の分岐確定時に「１」となる信号+RSBR0_TAKEN、分岐先アドレスレジスタ１０内のエントリーＡが有効である時に「１」となる信号+RSBR_TGT_BUFF_A_VALID、分岐先アドレスレジスタ１０内のエントリーＢが有効である時に「１」となる信号+RSBR_TGT_BUFF_B_VALID及び分岐する分岐命令が命令完了したことを示す信号+W_COMMIT_BR_TAKENに基づいて、分岐命令制御部７内の０番目のエントリーの分岐命令が分岐する分岐命令である時に分岐先アドレスレジスタ１０にエントリーの空きがないことを示す信号-RSBR0_TGT_BUFF_BUSYを生成する。信号+W_COMMIT_BR_TAKENは、サイクルＷにおける信号であり、分岐する分岐命令の命令完了＋１τのサイクルで「１」となる。
【００６１】
ナンド回路３７２は、分岐命令制御部７の１番のエントリーにある分岐命令の分岐確定時に「１」となる信号+RSBR1_TAKEN、分岐先アドレスレジスタ１０内のエントリーＡが有効である時に「１」となる信号+RSBR_TGT_BUFF_A_VALID、分岐先アドレスレジスタ１０内のエントリーＢが有効である時に「１」となる信号+RSBR_TGT_BUFF_B_VALID及び分岐する分岐命令が命令完了したことを示す信号+W_COMMIT_BR_TAKENに基づいて、分岐命令制御部７内の１番目のエントリーの分岐命令が分岐する分岐命令である時に分岐先アドレスレジスタ１０にエントリーの空きがないことを示す信号-RSBR1_TGT_BUFF_BUSYを生成する。信号+W_COMMIT_BR_TAKENは、サイクルＷにおける信号であり、分岐する分岐命令の命令完了＋１τのサイクルで「１」となる。
【００６２】
ナンド回路３７１は、分岐命令制御部７の２番のエントリーにある分岐命令の分岐確定時に「１」となる信号+RSBR2_TAKEN、分岐先アドレスレジスタ１０内のエントリーＡが有効である時に「１」となる信号+RSBR_TGT_BUFF_A_VALID、分岐先アドレスレジスタ１０内のエントリーＢが有効である時に「１」となる信号+RSBR_TGT_BUFF_B_VALID及び分岐する分岐命令が命令完了したことを示す信号+W_COMMIT_BR_TAKENに基づいて、分岐命令制御部７内の２番目のエントリーの分岐命令が分岐する分岐命令である時に分岐先アドレスレジスタ１０にエントリーの空きがないことを示す信号-RSBR2_TGT_BUFF_BUSYを生成する。信号+W_COMMIT_BR_TAKENは、サイクルＷにおける信号であり、分岐する分岐命令の命令完了＋１τのサイクルで「１」となる。
【００６３】
図１０において、ラッチ回路３７４のセット端子SETには信号+RSBR_COMPLETE_TAKEN_RELEASEが入力され、入力端子INHSには実行パイプライン上にある全命令をクリアすることを示す信号-CLEAR_PIPELINEが入力される。ノア回路３７５には信号+RSBR_TGT_BUFF_A_REL及び信号+CLEAR_PIPELINEが入力され、ノア回路３７５の出力はラッチ回路３７４のリセット端子RSTに入力される。ラッチ回路３７４は、上記信号+RSBR_TGT_BUFF_A_VALIDを生成する。
【００６４】
ラッチ回路３７６のセット端子SETには、信号+RSBR_COMPLETE_TAKEN_RELEASE及びクロックイネーブル信号+HOLD_RSBR_TGT_BUFF_Aが入力されるアンド回路３７７の出力が入力される。ラッチ回路３７６の入力端子INHSには、実行パイプライン上にある全命令をクリアすることを示す信号-CLEAR_PIPELINEが入力される。ノア回路３７８には信号+RSBR_TGT_BUFF_B_REL及び信号+CLEAR_PIPELINEが入力され、ノア回路３７８の出力はラッチ回路３７６のリセット端子RSTに入力される。ラッチ回路３７６は、上記信号+RSBR_TGT_BUFF_B_VALIDを生成する。
【００６５】
図１１において、ラッチ回路４７１には信号+HOLD_RSBR_TGT_BUFF_A、+COMPLETE_RSBR_IID[5:0]、+COMPLETE_RSBR_CARRY、+COMPLETE_RSBR_BORROW及び+COMPLETE_RSBR_TGT_PC[31:0,P3:P0]が入力され、信号+TARGET_ADRS_BUFFER_A_IID[5:0]、+TARGET_ADRS_BUFFER_A_OVF、+TARGET_ADRS_BUFFER_A_UDF及び+TARGET_ADRS_BUFFER_A[31:0,P3:P0]が出力される。+HOLD_RSBR_TGT_BUFF_Aは、分岐先アドレスレジスタ１０のエントリーＡのクロックイネーブル信号、+COMPLETE_RSBR_IID[5:0]は、分岐命令制御部７から開放した（分岐命令の制御完了時の）分岐命令のIID、+COMPLETE_RSBR_CARRYは、分岐命令制御部７から開放した分岐命令の分岐先アドレスでCARRYが発生した場合に「１」となる信号、+COMPLETE_RSBR_BORROWは、分岐命令制御部７から開放した分岐命令の分岐先アドレスでBORROWが発生した場合に「１」となる信号、+COMPLETE_RSBR_TGT_PC[31:0,P3:P0]は、分岐命令制御部７から開放した分岐命令の分岐先アドレスである。+TARGET_ADRS_BUFFER_A_IID[5:0]は、分岐先アドレスレジスタ１０のエントリーＡに保持されている分岐命令のIID、+TARGET_ADRS_BUFFER_A_OVFは、分岐先アドレスレジスタ１０のエントリーＡに保持されている分岐命令のCARRYビット、+TARGET_ADRS_BUFFER_A_UDFは、分岐先アドレスレジスタ１０のエントリーＡに保持されている分岐命令のBORROWビット、+TARGET_ADRS_BUFFER_A[31:0,P3:P0]は、分岐先アドレスレジスタ１０のエントリーＡに保持されている分岐命令の分岐先アドレスである。
【００６６】
ラッチ回路４７２には信号+HOLD_RSBR_TGT_BUFF_B、+COMPLETE_RSBR_IID[5:0]、+COMPLETE_RSBR_CARRY、+COMPLETE_RSBR_BORROW及び+COMPLETE_RSBR_TGT_PC[31:0,P3:P0]が入力され、信号+TARGET_ADRS_BUFFER_B_IID[5:0]、+TARGET_ADRS_BUFFER_B_OVF、+TARGET_ADRS_BUFFER_B_UDF及び+TARGET_ADRS_BUFFER_B[31:0,P3:P0]が出力される。+HOLD_RSBR_TGT_BUFF_Bは、分岐先アドレスレジスタ１０のエントリーＢのクロックイネーブル信号、+COMPLETE_RSBR_IID[5:0]は、分岐命令制御部７から開放した（分岐命令の制御完了時の）分岐命令のIID、+COMPLETE_RSBR_CARRYは、分岐命令制御部７から開放した分岐命令の分岐先アドレスでCARRYが発生した場合に「１」となる信号、+COMPLETE_RSBR_BORROWは、分岐命令制御部７から開放した分岐命令の分岐先アドレスでBORROWが発生した場合に「１」となる信号、+COMPLETE_RSBR_TGT_PC[31:0,P3:P0]は、分岐命令制御部７から開放した分岐命令の分岐先アドレスである。+TARGET_ADRS_BUFFER_B_IID[5:0]は、分岐先アドレスレジスタ１０のエントリーＢに保持されている分岐命令のIID、+TARGET_ADRS_BUFFER_B_OVFは、分岐先アドレスレジスタ１０のエントリーＢに保持されている分岐命令のCARRYビット、+TARGET_ADRS_BUFFER_B_UDFは、分岐先アドレスレジスタ１０のエントリーＢに保持されている分岐命令のBORROWビット、+TARGET_ADRS_BUFFER_B[31:0,P3:P0]は、分岐先アドレスレジスタ１０のエントリーＢに保持されている分岐命令の分岐先アドレスである。
【００６７】
次に、命令完了制御部９の構成について、図１２及び図１３と共に説明する。図１２及び図１３は、命令完了制御部９内の要部の論理回路図である。
【００６８】
図１２において、アンド回路９１には、１番目に命令完了したのが分岐命令であり後続の遅延命令を無効にする場合に「１」となる信号+TOQ_CSE_BR_FORCE_NOP、少なくとも１つの命令が完了したことを示す信号+COMMIT_TOQ_CSE、少なくとも２つの命令が完了したことを示す信号-COMMIT_2ND_CSE、最初に命令完了する命令が命令の再実行（RERUN）を行う場合に「１」となる信号-TOQ_RERUN_REIFCH_OWN_ORが入力される。アンド回路９２には、２番目に命令完了したのが分岐命令であり後続の遅延命令を無効にする場合に「１」となる信号+2ND_CSE_BR_FORCE_NOP、少なくとも２つの命令が完了したことを示す信号+COMMIT_2ND_CSE、少なくとも３つの命令が完了したことを示す信号-COMMIT_3RD_CSEが入力される。アンド回路９３には、３番目に命令完了したのが分岐命令であり後続の遅延命令を無効にする場合に「１」となる信号+3RD_CSE_BR_FORCE_NOP、少なくとも３つの命令が完了したことを示す信号+COMMIT_3RD_CSE、少なくとも４つの命令が完了したことを示す信号-COMMIT_4TH_CSEが入力される。アンド回路９４には、４番目に命令完了したのが分岐命令であり後続の遅延命令を無効にする場合に「１」となる信号+4TH_CSE_BR_FORCE_NOP、少なくとも４つの命令が完了したことを示す信号+COMMIT_4TH_CSEが入力される。ノア回路９５は、アンド回路９１〜９４の出力を入力される。
【００６９】
アンド回路９６には、割り込み処理が発生した時に「１」となる信号-RS1、次に最初に完了する命令がNOP化された遅延命令であることを示す信号+BR_FORCE_NOP_TGRが入力され、ナンド回路９７には、少なくとも１つの命令が完了したことを示す信号-COMMIT_TOQ_CSE及びアンド回路９６の出力が入力される。アンド回路９８には、ノア回路９５の出力及びナンド回路９７の出力が入力される。ラッチ回路９９は、入力端子1Hに演算ユニット２３等で例外が発生した時に「１」となる信号+EU_XCPTN_ORを入力され、セット端子SETにアンド回路９８の出力を入力され、次に最初に完了する命令がNOP化された遅延命令であることを示す信号-BR_FORCE_NOP_TGRを出力する。
【００７０】
図１３において、ナンド回路１９１には、トラップ処理を行う命令が命令完了したことを示すサイクルＷの信号+W_TRAP_VALID、命令が少なくとも１つ完了したことを示す信号+COMMIT_ENDOP_ORが入力される。アンド回路１９２には、ナンド回路１９１の出力及び信号+BR_FORCE_NOP_TGR=1の時に非同期の割り込み（外部割り込み）が発生すると「１」となる信号+FORCE_NOP_TGR、割り込み処理が発生した時に「１」となる信号-RS1が入力される。アンド回路１９２の出力は、ラッチ回路１９３のセット端子SETに入力される。ラッチ回路１９３は、信号+FORCE_PC_INCR_TGRを出力する。信号+FORCE_PC_INCR_TGRは、分岐命令が命令完了し、ディレイスロット命令が命令完了するまでの間が延びた時にディレイスロット命令が無効化（NOP化）されている場合において割り込み処理が発生した時にプログラムカウンタPC及びネクストプログラムカウンタnPCをディレイスロット命令分（４バイト）更新しなければならない時に「１」となる信号である。つまり、信号+FORCE_PC_INCR_TGRは、信号+FORCE_NOP_TGRの１τ後に立ち上がる、サイクルＷ＋１より有効となる信号である。
【００７１】
次に、プログラムカウンタ部１１内のnPC用更新回路１１−３について、図１４〜図１８と共に説明する。図１４〜図１８は、プログラムカウンタ部１１内のnPC用更新回路１１−３の論理回路図である。
【００７２】
図１４において、インクリメンタ１１１は、信号+PC[53:32,P7:P4]、+TARGET_ADRS_BUFFER_A_OVF、+TARGET_ADRS_BUFFER_A_UDFを入力され、信号+MOD_PC_FOR_TGT_ADRS_A[63:32,P7:P4]を出力する。信号+MOD_PC_FOR_TGT_ADRS_A[63:32,P7:P4]は、分岐先アドレスレジスタ１０のエントリーＡでCARRYビット又はBORROWビットが「１」の時のハイ側の分岐先アドレスを示す。インクリメンタ１１２は、信号+PC[53:32,P7:P4]、+TARGET_ADRS_BUFFER_B_OVF、+TARGET_ADRS_BUFFER_B_UDFを入力され、信号+MOD_PC_FOR_TGT_ADRS_B[63:32,P7:P4]を出力する。信号+MOD_PC_FOR_TGT_ADRS_B[63:32,P7:P4]は、分岐先アドレスレジスタ１０のエントリーＢでCARRYビット又はBORROWビットが「１」の時のハイ側の分岐先アドレスを示す。
【００７３】
図１５において、アンド回路１１３には信号+MOD_PC_FOR_TGT_ADRS_A[63:32,  P7:P4]、+RSBR_TGT_BUFF_A_RELが入力され、アンド回路１１４には信号+MOD_PC_FOR_TGT_ADRS_B[63:32,P7:P4]、+RSBR_TGT_BUFF_B_RELが入力される。オア回路１１５は、アンド回路１１３，１１４の出力に基づいて信号+MOD_PC_FOR_TGT_ADRS[63:32,P7:P4]を出力する。信号+MOD_PC_FOR_TGT_ADRS[63:32,P7:P4]は、分岐先アドレスレジスタ１０からネクストプログラムカウンタnPCにセットするハイ側の分岐先アドレスを示す。
【００７４】
アンド回路１１６には信号+TARGET_ADRS_BUFFER_A[31:0,P3:P0]、+RSBR_TGT_BUFF_A_RELが入力され、アンド回路１１７には信号+TARGET_ADRS_BUFFER_B[31:0,P3:P0]、+RSBR_TGT_BUFF_B_RELが入力される。オア回路１１８は、アンド回路１１６，１１７の出力に基づいて信号+SELECTED_TGT_ADRS_BUFF[31:0,P3:P0]を出力する。信号+SELECTED_TGT_ADRS_BUFF[31:0,P3:P0]は、分岐先アドレスレジスタ１０からネクストプログラムカウンタnPCにセットするロー側の分岐先アドレスを示す。
【００７５】
図１６において、インクリメンタ２１１は、信号+NPC[63:0,P7:P0]、+NPC_INCREMENT[3:0]、+FORCE_PC_INCR_TGRを入力され、信号+INCR_NPC[63:0,P7:P0]を出力する。信号+NPC_INCREMENT[3:0]は、いくつの命令が同時に命令完了したかを示す。例えば、ビット３が「１」であると４命令が同時に命令完了したことを示し、ビット２が「１」であると３命令が同時に命令完了したことを示す。信号+INCR_NPC[63:0,P7:P0]は、+FORCE_NOP_TGR=1の時はnPC+4なる演算を行うことを示す。又、アンド回路２１２には信号+COMMIT_UPDATE_PC、-RS1が入力される。信号+COMMIT_UPDATE_PCは、プログラムカウンタPC又はネクストプログラムカウンタnPCの更新が必要であることを示す。ノア回路２１３には、アンド回路２１２の出力及び信号+TRAP_SW1、+FORCE_PC_INCR_TGRが入力される。ノア回路２１３の出力は、ネクストプログラムカウンタnPCのクロックイネーブル信号-CE_NPC及びプログラムカウンタPCのクロックイネーブル信号-CE_PCとして使用される。
【００７６】
図１７において、アンド回路２１４には信号+COMMIT_UPDATE_PC、-BRTKN_EQ_JUMPL_HOLD_VALID、-LOAD_TARGET_ADRS_TO_NPCが入力される。信号-BRTKN_EQ_JUMPL_HOLD_VALIDは、命令完了したレジスタ相対の分岐命令の分岐アドレスのハイ側がオール０（All0）でなくラッチ回路１１−１に保持されている時に「１」となる信号である。オア回路２１５には、アンド回路２１４の出力及び信号+FORCE_PC_INCR_TGRが入力される。アンド回路２１６には、オア回路２１５の出力信号+SEL_INCR_TO_NPC_LOW及び信号-PSTATE_AMが入力される。信号+SEL_INCR_TO_NPC_LOWは、ネクストプログラムカウンタnPCのロー側へセットする際に信号+INCR_NPCを選択する時に「１」となる信号である。信号-PSTATE_AMは、「１」の時に３２ビットアドレスモードを示す信号である。アンド回路２１６は、信号+SEL_INCR_TO_NPC_HIGHを出力する。信号+SEL_INCR_TO_NPC_HIGHは、ネクストプログラムカウンタnPCのハイ側へセットする際に信号+INCR_NPCを選択する時に「１」となる信号である。
【００７７】
アンド回路２１７には信号-BRTKN_EQ_JUMPL_HOLD_VALID、+LOAD_TARGET_ADRS_TO_NPCが入力される。オア回路２１８には、アンド回路２１７の出力及び信号+FORCE_PC_INCR_TGRが入力される。アンド回路２１９には、オア回路２１８の出力及び信号-PSTATE_AMが入力される。アンド回路２１９は、信号+SEL_TARGET_TO_NPC_HIGHを出力する。信号+SEL_TARGET_TO_NPC_HIGHは、ネクストプログラムカウンタnPCのハイ側へセットする際に信号+MOD_PC_FOR_TGT_ADRSを選択する時に「１」となる信号である。又、バッファ３１１は、信号+LOAD_TARGET_ADRS_TO_NPCに基づいて信号+SEL_TARGET_TO_NPC_LOWを出力する。信号+LOAD_TARGET_ADRS_TO_NPCは、ネクストプログラムカウンタnPCに分岐先アドレスレジスタ１０から値をセットしなければならない時に「１」となる信号である。信号+SEL_TARGET_TO_NPC_LOWは、ネクストプログラムカウンタnPCのハイ側へセットする際に信号+SELECTED_TGT_ADRS_BUFFを選択する時に「１」となる信号である。アンド回路３１２は、信号+BRTKN_EQ_JUMPL_HOLD_TGR、-PSTATE_AMに基づいて信号+SEL_JUMPL_AH_TO_NPCを出力する。信号+SEL_JUMPL_AH_TO_NPCは、ネクストプログラムカウンタnPCのハイ側へセットする際にラッチ回路１１−１からの値（+JMPL_ADRS_HOLD）を選択する時に「１」となる信号である。
【００７８】
図１８において、アンド回路４１１は信号+INCR_NPC[63:32,P7:P4]、+SEL_INCR_TO_NPC_HIGHを入力され、アンド回路４１２は信号+MOD_PC_FOR_TGT_ADRS[63:32,P7:P4]、+SEL_TARGET_TO_NPC_HIGHを入力される。アンド回路４１３は信号+JUMPL_ADRD_HOLD[63:32,P7:P4]、+SEL_JUMPL_AH_TO_NPCを入力され、アンド回路４１４は信号+TRAP_ADRS[63:32,P7:P4]、+SEL_TRAP_ADRS_TO_NPCを入力される。信号+TRAP_ADRS[63:32,P7:P4]は、SPARCアーキテクチャで定義されており、トラップが発生した場合（+W_TRAP_VALID=1）に専用のトラップ（TRAP）アドレスを選択する信号である。信号+SEL_TRAP_ADRS_TO_NPCは、トラップが発生した場合に信号+TRAP_ADRSを選択する時に「１」となる信号である。オア回路４１５は、アンド回路４１１〜４１４の出力に基づいて、ネクストプログラムカウンタnPCのセット信号+SET_NPC[63:32,P7:P4]を出力する。アンド回路４１６は信号+INCR_NPC[31:0,P3:P0]、+SEL_INCR_TO_NPC_LOWを入力され、アンド回路４１７は信号+SELECTED_TGT_ADRS_BUFF[31:0,P3:P0]、+SEL_TARGET_TO_NPC_LOWを入力され、アンド回路４１８は信号+TRAP_ADRS[31:0,P3:P0]、+SEL_TRAP_ADRS_TO_NPCを入力される。オア回路４１９は、アンド回路４１６〜４１８の出力に基づいて信号+SET_NPC[31:0,P3:P0]を出力する。
【００７９】
次に、プログラムカウンタ部１１内のPC用更新回路１１−２について、図１９及び図２０と共に説明する。図１９及び図２０は、プログラムカウンタ部１１内のPC用更新回路１１−２の論理回路図である。
【００８０】
図１９において、オア回路５１１には信号+COMMIT_UPDATE_PC、+FORCE_PC_INCR_TGRが入力される。アンド回路５１２には、オア回路５１１の出力信号+SEL_INCR_TO_PC_LOW及び信号-PSTATE_AMが入力される。信号+SEL_INCR_TO_PC_LOWは、プログラムカウンタPCのロー側へセットする際に信号+INCR_PCを選択する時に「１」となる信号である。信号+INCR_PCは、図１６に示す信号+INCRR_NPCと同様に、+NPC_INCREMENT≠0の場合は（INCR_PC=）PC=nPC+（同時に命令完了した数−１）＊４が計算されることを示し、+FORCE_PC_INCR_TRG=1の場合は(INCR_PC=)PC=nPCとなる。信号+NPC_INCREMENTと信号+FORCE_PC_INCR_TGRは、同時に有効にはならない。アンド回路５１２は、信号+SEL_INCR_TO_PC_HIGHを出力する。信号+SEL_INCR_TO_PC_HIGHは、プログラムカウンタPCのハイ側へセットする際に信号+INCR_PCを選択する時に「１」となる信号である。又、インクリメンタ５１３は、上記信号+PC[63:0,P7:P0]、+NPC_INCREMENT[3:0]、+FORCE_PC_INCR_TGRを入力され、信号+INCR_PC[63:0,P7:P0]を出力する。
【００８１】
図２０において、アンド回路６１１には信号+INCR_PC[63:32,P7:P4]、+SEL_INCR_TO_PC_HIGHが入力され、アンド回路６１２には信号+TRAP_ADRS[63:32,P7:P4]、+SEL_TRAP_ADRS_TO_PCが入力される。信号+SEL_TRAP_ADRS_TO_PCは、トラップが発生した場合に信号+TRAP_ADRSを選択する時に「１」となる信号である。オア回路６１３は、アンド回路６１１，６１２の出力に基づいて、プログラムカウンタPCのセット信号+SET_PC[63:32,P7:P4]を出力する。アンド回路６１４には信号+INCR_PC[31:0,P3:P0]、+SEL_INCR_TO_PC_LOWが入力され、アンド回路６１５には信号+TRAP_ADRS[31:0,P3:P0]、+SEL_TRAP_ADRS_TO_PCが入力される。オア回路６１６は、アンド回路６１４，６１５の出力に基づいて、プログラムカウンタPCのセット信号+SET_PC[31:0,P3:P0]を出力する。
【００８２】
以上のように、本実施例では、分岐先アドレスレジスタを設け、命令アドレスレジスタを同時に完了した命令数に合わせて高速に更新す。又、分岐命令の制御が、分岐命令制御部、分岐予測部、分岐先アドレスレジスタ及び命令完了制御部で夫々独立して制御できるので、分岐のスループットを向上させてできるだけ少ない実装面積で回路を実現可能とする。
【００８３】
又、６４ビット長の命令アドレス空間を使用するアーキテクチャにおいて、分岐命令制御部及び分岐先アドレスを生成する部分において、下位３２ビットとCARRYビット及びBORROWビットのみを使用して分岐命令の制御が行える。
【００８４】
尚、本発明は、以下に付記する発明をも包含するものである。
【００８５】
（付記１）  分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐予測が成功して分岐命令が分岐した時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、
プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とする、プログラムカウンタ制御方法。
【００８６】
（付記２）  分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐予測が成功して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、
プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とする、プログラムカウンタ制御方法。
【００８７】
（付記３）  分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐予測が失敗して分岐命令が分岐する時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、
プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とする、プログラムカウンタ制御方法。
【００８８】
（付記４）  分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐予測が失敗して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させるステップと、
プログラムカウンタ及びネクストプログラムカウンタを、完了した命令数に合わせて同時に更新するステップとを含むことを特徴とする、プログラムカウンタ制御方法。
【００８９】
（付記５）  前記アーキテクチャは、６４ビット長の命令アドレス空間を使用し、
命令の下位３２ビットとキャリービット及びボロウビットのみを使用して、分岐命令制御及び分岐先アドレスの生成を行うステップを更に含むことを特徴とする、付記１〜４のいずれか１項記載のプログラムカウンタ制御方法。
【００９０】
（付記６）  分岐予測部を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
分岐命令の分岐条件判定、分岐予測の成否及び命令再フェッチの制御を行い、複数の分岐命令を同時に制御可能な分岐命令制御部と、
分岐することが確定した分岐命令の分岐先アドレスを複数格納する分岐先アドレスレジスタとを備え、
該分岐先アドレスレジスタは、該分岐命令制御部及び該分岐予測部とは独立して制御可能であることを特徴とする、プロセッサ。
【００９１】
（付記７）  分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
プログラムカウンタ及びネクストプログラムカウンタからなるプログラムカウンタ手段と、
分岐予測が成功して分岐命令が分岐した時に、分岐命令を含めた複数の命令を同時に命令完了させる手段と、
該プログラムカウンタ及び該ネクストプログラムカウンタを、完了した命令数に合わせて同時に更新する手段とを備えたことを特徴とする、プロセッサ。
【００９２】
（付記８）  分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
プログラムカウンタ及びネクストプログラムカウンタからなるプログラムカウンタ手段と、
分岐予測が成功して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させる手段と、
該プログラムカウンタ及び該ネクストプログラムカウンタを、完了した命令数に合わせて同時に更新する手段とを備えたことを特徴とする、プロセッサ。
【００９３】
（付記９）  分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
プログラムカウンタ及びネクストプログラムカウンタからなるプログラムカウンタ手段と、
分岐予測が失敗して分岐命令が分岐する時に、分岐命令を含めた複数の命令を同時に命令完了させる手段と、
該プログラムカウンタ及び該ネクストプログラムカウンタを、完了した命令数に合わせて同時に更新する手段とを備えたことを特徴とする、プロセッサ。
【００９４】
（付記１０）  分岐予測機構を用いてアウトオブオーダ方式による命令制御を行うと共に、分岐の遅延命令を有するアーキテクチャを制御するプロセッサにおいて、
プログラムカウンタ及びネクストプログラムカウンタからなるプログラムカウンタ手段と、
分岐予測が失敗して分岐命令が分岐しない時に、分岐命令を含めた複数の命令を同時に命令完了させる手段と、
該プログラムカウンタ及び該ネクストプログラムカウンタを、完了した命令数に合わせて同時に更新する手段とを備えたことを特徴とする、プロセッサ。
【００９５】
（付記１１）  前記アーキテクチャは、６４ビット長の命令アドレス空間を使用し、
命令の下位３２ビットとキャリービット及びボロウビットのみを使用して、分岐命令制御及び分岐先アドレスの生成を行う手段を更に備えたことを特徴とする、付記６〜１０のいずれか１項記載のプロセッサ。
【００９６】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、種々の変形及び改良が可能であることは、言うまでもない。
【００９７】
【発明の効果】
本発明によれば、分岐のスループットの向上を、できるだけ小さい回路規模（実装面積）で図れるプログラムカウンタ制御方法及びプロセッサを実現することができる。
【図面の簡単な説明】
【図１】本発明になるプロセッサの一実施例を示すブロック図である。
【図２】命令ユニットの要部を示すブロック図である。
【図３】分岐命令制御時の動作を説明するフローチャートである。
【図４】プログラムカウンタ部の更新時の動作を説明するフローチャートである。
【図５】分岐命令制御部内のエントリーを示す概要図である。
【図６】分岐先アドレスレジスタ内のエントリーを示すの概要図である。
【図７】プログラムカウンタ部の構成を示すブロック図である。
【図８】分岐命令制御部内の要部の論理回路図である。
【図９】分岐命令制御部内の要部の論理回路図である。
【図１０】分岐命令制御部内の要部の論理回路図である。
【図１１】分岐命令制御部内の要部の論理回路図である。
【図１２】命令完了制御部内の要部の論理回路図である。
【図１３】命令完了制御部内の要部の論理回路図である。
【図１４】プログラムカウンタ部内のnPC用更新回路の論理回路図である。
【図１５】プログラムカウンタ部内のnPC用更新回路の論理回路図である。
【図１６】プログラムカウンタ部内のnPC用更新回路の論理回路図である。
【図１７】プログラムカウンタ部内のnPC用更新回路の論理回路図である。
【図１８】プログラムカウンタ部内のnPC用更新回路の論理回路図である。
【図１９】プログラムカウンタ部内のPC用更新回路の論理回路図である。
【図２０】プログラムカウンタ部内のPC用更新回路の論理回路図である。
【符号の説明】
１      分岐予測部
２      命令フェッチ部
３      命令バッファ部
４      相対分岐アドレス生成部
５      命令デコーダ部
６      分岐命令実行部
７      分岐命令制御部
８      ディレイスロットスタック部
９      命令完了制御部
１０      分岐先アドレスレジスタ
１１      プログラムカウンタ部
１１−１      ラッチ回路
１１−２，１１−３      更新回路
２１      命令ユニット
２２      メモリユニット
２３      演算ユニット
PC        プログラムカウンタ
nPC        ネクストプログラムカウンタ
【図１】
0003800533.tif 000002
【図２】
0003800533.tif 000003
【図３】
0003800533.tif 000004
【図４】
0003800533.tif 000005
【図５】
0003800533.tif 000006
【図６】
0003800533.tif 000007
【図７】
0003800533.tif 000008
【図８】
0003800533.tif 000009
【図９】
0003800533.tif 000010
【図１０】
0003800533.tif 000011
【図１１】
0003800533.tif 000012
【図１２】
0003800533.tif 000013
【図１３】
0003800533.tif 000014
【図１４】
0003800533.tif 000015
【図１５】
0003800533.tif 000016
【図１６】
0003800533.tif 000017
【図１７】
0003800533.tif 000018
【図１８】
0003800533.tif 000019
【図１９】
0003800533.tif 000020
【図２０】
0003800533.tif 000021