(57)【要約】【課題】  遅延スロットで処理できる命令がある場合には、遅延分岐により分岐ハザードを削減しつつ、遅延スロットで処理できる命令がない場合であっても、命令メモリへのＮＯＰの挿入によりプログラムサイズを増加をさせることのない分岐制御方法および情報処理装置を提供する。【解決手段】  命令をパイプライン処理する情報処理装置において、条件分岐命令が実行される際には、分岐条件の成否と条件分岐命令の後続番地の命令コードに含まれる所定の制御フィールドの値とに基づいて遅延分岐を行うか否かを決定し、遅延分岐を行わない場合で、かつ分岐条件が成立の際は、前記後続命令がフェッチされた後に、その実行が中止されるとともに分岐先の命令がフェッチされて実行されるように分岐動作を制御し、遅延分岐を行わない場合で、かつ分岐条件が不成立の場合には、分岐命令の後続命令が実行されるように制御する。【選択図】    図３
2006011723.tif 000002
【特許請求の範囲】
【請求項１】
記憶手段に記憶された命令を順次フェッチしてパイプライン処理する情報処理装置における、分岐命令による分岐動作を制御する分岐制御方法であって、
命令コードに含まれる分岐制御指示情報に基づいて、分岐命令に続いて後続番地からフェッチされた後続命令が前記分岐命令における分岐条件の成否に係わらず実行される第１の制御モードと、分岐条件が不成立の場合に前記後続命令が実行される第２の制御モードとを識別する識別ステップと、
前記第１の制御モードの場合に、前記フェッチされた後続命令が実行されるように制御するとともに、分岐条件の成否に応じた分岐制御を行う一方、
前記第２の制御モードで、かつ、分岐条件が成立した場合には、前記後続命令がフェッチされた後に、その実行が中止されるとともに分岐先の命令がフェッチされて実行され、
前記第２の制御モードで、かつ、分岐条件が不成立の場合には、前記後続命令が実行されるように制御する制御ステップと、
を有することを特徴とする分岐制御方法。
【請求項２】
請求項１の分岐制御方法であって、
前記制御ステップは、前記第２の制御モードで、かつ、分岐条件が不成立の場合には、前記後続命令が前記分岐命令に続いてフェッチされ、そのまま実行されるように制御することを特徴とする分岐制御方法。
【請求項３】
請求項１の分岐制御方法であって、
前記制御ステップは、前記第２の制御モードで、かつ、分岐条件が不成立の場合には、  前記後続命令が前記分岐命令に続いてフェッチされ、その実行が中止された後に再度フェッチされて実行されるように制御することを特徴とする分岐制御方法。
【請求項４】
請求項１の分岐制御方法であって、
前記分岐制御指示情報は、分岐命令の後続番地の命令の命令コードに含まれることを特徴とする分岐制御方法。
【請求項５】
請求項１の分岐制御方法であって、
前記後続命令は、その命令が実行される命令実行条件を示す命令実行条件情報を含み、
前記制御ステップは、前記第２の制御モードで、かつ、分岐条件が不成立で、さらに、前記後続命令の命令実行条件が満足される場合に、その命令が実行されるように制御するとともに、
前記識別ステップは、前記命令実行条件情報が所定の値のときに、前記第１の制御モードが指示されていると識別することを特徴とする分岐制御方法。
【請求項６】
請求項１の分岐制御方法であって、
前記後続命令は、その命令が実行される命令実行条件を示す命令実行条件情報を含み、
前記制御ステップは、
前記第１の制御モードで、かつ、前記後続命令の命令実行条件が満足される場合に、その命令が実行されるように制御するとともに、
前記第２の制御モードで、かつ、分岐条件が不成立で、さらに、前記命令実行条件が満足される場合に、前記後続命令が実行されるように制御することを特徴とする分岐制御方法。
【請求項７】
請求項１の分岐制御方法であって、
前記後続命令は、その命令が実行される命令実行条件を示す命令実行条件情報を含み、
前記識別ステップは、前記後続命令の命令実行条件情報と、分岐命令の分岐条件とが等しいかどうかに応じて、前記第１の制御モードと第２の制御モードとを識別することを特徴とする分岐制御方法。
【請求項８】
請求項７の分岐制御方法であって、
前記制御ステップは、前記第１の制御モードの場合に、前記命令実行条件情報に係わらず、前記後続命令が実行されるように制御することを特徴とする分岐制御方法。
【請求項９】
請求項７の分岐制御方法であって、
前記識別ステップは、前記後続命令の命令実行条件情報と、分岐命令の分岐条件とが等しい場合に、前記第１の制御モードが指示されていると識別し、
前記制御ステップは、前記第１の制御モードの場合に、前記命令実行条件情報に基づいて、前記後続命令の実行の有無を制御することを特徴とする分岐制御方法。
【請求項１０】
記憶手段に記憶された命令を順次フェッチするフェッチ部と、
フェッチされた命令をデコードするデコード部と、
デコードされた命令を実行する命令実行部と、
を備え、命令をパイプライン処理する情報処理装置であって、さらに、
命令コードに含まれる分岐制御指示情報に基づいて、分岐命令に続いて後続番地からフェッチされた後続命令が前記分岐命令における分岐条件の成否に係わらず実行される第１の制御モードと、分岐条件が不成立の場合に前記後続命令が実行される第２の制御モードとを識別する識別手段と、
前記第１の制御モードの場合に、前記フェッチされた後続命令が実行されるように制御するとともに、分岐条件の成否に応じた分岐制御を行う一方、
前記第２の制御モードで、かつ、分岐条件が成立した場合には、前記後続命令がフェッチされた後に、その実行が中止されるとともに分岐先の命令がフェッチされて実行され、
前記第２の制御モードで、かつ、分岐条件が不成立の場合には、前記後続命令が実行されるように制御する制御手段と、
を備えたことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令をパイプライン処理する情報処理装置、および前記情報処理装置における分岐の制御方法に関するものである。
【背景技術】
【０００２】
命令をパイプライン処理する情報処理装置では、各命令が順次パイプラインに送り込まれ逐次実行されている場合には、命令のオーバーラップ実行により命令実行の高速化が図られている。しかし、条件分岐命令のパイプライン処理では、早くとも条件分岐命令のデコードが終了した後に、次にフェッチされるアドレスが決定されるため、空きスロット（分岐ハザード）を生じることがあるという問題がある。
【０００３】
この問題を解決する手段の１つとして、条件分岐命令の後続番地に格納された命令コードを条件分岐命令に後続する空きスロット（遅延スロット）で処理することで分岐ハザードを削減させる遅延分岐と呼ばれる分岐方法がとられている（例えば、特許文献１、非特許文献１参照）。この方法では、前記遅延スロットの命令が分岐ハザードのサイクルで実行されるため、条件分岐命令の実行サイクルを見かけ上減少させることができる。
【０００４】
上記の方法では、条件分岐命令の後続番地に格納される命令は、条件分岐命令よりも遅れたタイミングで処理（フェッチ、デコード、実行）することが可能な命令、または条件分岐命令の分岐条件の成立に無関係に実行することができる命令でなければならない。このように、後続番地に格納して遅延スロットで処理できる命令には制限があるため、後続番地に格納することができる命令がない場合には、代わりにＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ：無効化命令）が格納される。
【特許文献１】特開平４−１２７２３７号公報
【非特許文献１】デイビット・パターソン、ジョン・ヘネシー、”コンピュータ・アーキテクチャ”、１９９４年２月１８日新装１版１刷、日経ＢＰ出版センター（２６５〜２７０頁）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記のようなＮＯＰは、本来実行されるべき命令に追加して格納されるものであるため、プログラムのサイズが大きくなりがちであるという問題を有していた。
【０００６】
本発明は、上記のような問題に着目してなされたものであり、遅延スロットで処理できる命令がある場合には、遅延分岐により分岐ハザードを削減しつつ、遅延スロットで処理できる命令がない場合であっても、プログラムにＮＯＰを挿入する必要がなく、プログラムサイズを増加をさせることのない分岐制御方法、および情報処理装置を提供することを課題とする。
【課題を解決するための手段】
【０００７】
上記の課題を解決するため、請求項１の発明は、
記憶手段に記憶された命令を順次フェッチしてパイプライン処理する情報処理装置における、分岐命令による分岐動作を制御する分岐制御方法であって、
命令コードに含まれる分岐制御指示情報に基づいて、分岐命令に続いて後続番地からフェッチされた後続命令が前記分岐命令における分岐条件の成否に係わらず実行される第１の制御モードと、分岐条件が不成立の場合に前記後続命令が実行される第２の制御モードとを識別する識別ステップと、
前記第１の制御モードの場合に、前記フェッチされた後続命令が実行されるように制御するとともに、分岐条件の成否に応じた分岐制御を行う一方、
前記第２の制御モードで、かつ、分岐条件が成立した場合には、前記後続命令がフェッチされた後に、その実行が中止されるとともに分岐先の命令がフェッチされて実行され、
前記第２の制御モードで、かつ、分岐条件が不成立の場合には、前記後続命令が実行されるように制御する制御ステップと、
を有することを特徴とする。
【０００８】
また、請求項２の発明は、
請求項１の分岐制御方法であって、
前記制御ステップは、前記第２の制御モードで、かつ、分岐条件が不成立の場合には、前記後続命令が前記分岐命令に続いてフェッチされ、そのまま実行されるように制御することを特徴とする。
【０００９】
また、請求項３の発明は、
請求項１の分岐制御方法であって、
前記制御ステップは、前記第２の制御モードで、かつ、分岐条件が不成立の場合には、  前記後続命令が前記分岐命令に続いてフェッチされ、その実行が中止された後に再度フェッチされて実行されるように制御することを特徴とする。
【００１０】
また、請求項４の発明は、
請求項１の分岐制御方法であって、
前記分岐制御指示情報は、分岐命令の後続番地の命令の命令コードに含まれることを特徴とする。
【００１１】
これらにより、分岐条件の成否に係わらず実行される命令が分岐命令の後続番地に記憶されていないような場合には、分岐制御指示情報に基づいて、識別ステップで第２の制御モードであることが識別され、分岐条件が不成立の場合には、フェッチされた後続命令がそのまま実行されることによって後続命令が速く実行されたり、フェッチされた後続命令の実行が中止されることによって簡単に分岐制御が行われる。
【００１２】
また、請求項５の発明は、
請求項１の分岐制御方法であって、
前記後続命令は、その命令が実行される命令実行条件を示す命令実行条件情報を含み、
前記制御ステップは、前記第２の制御モードで、かつ、分岐条件が不成立で、さらに、前記後続命令の命令実行条件が満足される場合に、その命令が実行されるように制御するとともに、
前記識別ステップは、前記命令実行条件情報が所定の値のときに、前記第１の制御モードが指示されていると識別することを特徴とする。
【００１３】
これにより、識別ステップでは、実行条件に応じて実行が制御される命令の形式によって、第１、または第２の制御モードが指示されていることが識別される。
【００１４】
また、請求項６の発明は、
請求項１の分岐制御方法であって、
前記後続命令は、その命令が実行される命令実行条件を示す命令実行条件情報を含み、
前記制御ステップは、
前記第１の制御モードで、かつ、前記後続命令の命令実行条件が満足される場合に、その命令が実行されるように制御するとともに、
前記第２の制御モードで、かつ、分岐条件が不成立で、さらに、前記命令実行条件が満足される場合に、前記後続命令が実行されるように制御することを特徴とする。
【００１５】
これにより、第１、または第２の何れの制御モードでも、実行条件に応じて命令の実行が制御される。
【００１６】
また、請求項７の発明は、
請求項１の分岐制御方法であって、
前記後続命令は、その命令が実行される命令実行条件を示す命令実行条件情報を含み、
前記識別ステップは、前記後続命令の命令実行条件情報と、分岐命令の分岐条件とが等しいかどうかに応じて、前記第１の制御モードと第２の制御モードとを識別することを特徴とする。
【００１７】
これにより、後続命令の命令実行条件情報と、分岐命令の分岐条件とが等しいかどうかに応じて、第１の制御モードと第２の制御モードとが識別される。
【００１８】
また、請求項８の発明は、
請求項７の分岐制御方法であって、
前記制御ステップは、前記第１の制御モードの場合に、前記命令実行条件情報に係わらず、前記後続命令が実行されるように制御することを特徴とする。
【００１９】
これにより、第１の制御モードの場合に、命令実行条件情報に係わらず、後続命令が実行されるように制御される。
【００２０】
また、請求項９の発明は、
請求項７の分岐制御方法であって、
前記識別ステップは、前記後続命令の命令実行条件情報と、分岐命令の分岐条件とが等しい場合に、前記第１の制御モードが指示されていると識別し、
前記制御ステップは、前記第１の制御モードの場合に、前記命令実行条件情報に基づいて、前記後続命令の実行の有無を制御することを特徴とする。
【００２１】
これにより、後続命令の命令実行条件情報と、分岐命令の分岐条件とが等しい場合に、第１の制御モードが指示されていると識別され、命令実行条件情報に基づいて、後続命令の実行の有無が制御される。
【００２２】
また、請求項１０の発明は、
記憶手段に記憶された命令を順次フェッチするフェッチ部と、
フェッチされた命令をデコードするデコード部と、
デコードされた命令を実行する命令実行部と、
を備え、命令をパイプライン処理する情報処理装置であって、さらに、
命令コードに含まれる分岐制御指示情報に基づいて、分岐命令に続いて後続番地からフェッチされた後続命令が前記分岐命令における分岐条件の成否に係わらず実行される第１の制御モードと、分岐条件が不成立の場合に前記後続命令が実行される第２の制御モードとを識別する識別手段と、
前記第１の制御モードの場合に、前記フェッチされた後続命令が実行されるように制御するとともに、分岐条件の成否に応じた分岐制御を行う一方、
前記第２の制御モードで、かつ、分岐条件が成立した場合には、前記後続命令がフェッチされた後に、その実行が中止されるとともに分岐先の命令がフェッチされて実行され、
前記第２の制御モードで、かつ、分岐条件が不成立の場合には、前記後続命令が実行されるように制御する制御手段と、
を備えたことを特徴とする。
【００２３】
これにより、分岐条件の成否に係わらず実行される命令が分岐命令の後続番地に記憶されていないような場合には、分岐制御指示情報に基づいて、識別手段により第２の制御モードであることが識別され、分岐条件の成否に応じて、後続命令の実行の有無が制御される。
【発明の効果】
【００２４】
本発明によれば、遅延スロットで処理できる命令がある場合には、遅延分岐により分岐ハザードを削減しつつ、このような命令がない場合であっても、ＮＯＰの挿入によりプログラムサイズを増加をさせることがない。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施形態について図面を参照しながら説明する。
【００２６】
《発明の実施形態１》
本発明にかかる制御方法により命令の分岐が制御される情報処理装置は、命令読み込み部、命令デコード部、命令実行部、および実行される命令等を制御する制御部を備え、メモリに記憶された命令コードのフェッチ（ＩＦステージ）、デコード（ＤＣステージ）、および実行（ＥＸステージ）が並行して行われる３段のパイプライン処理が行われるようになっている。
【００２７】
前記制御部は、条件分岐命令が実行される際には、分岐条件の成立の有無と、命令コードに含まれる所定の制御フィールドの値とに基づいて、前記各部の動作を制御するようになっている。前記所定の制御フィールドの値は、例えば図１に示すように、条件分岐命令の次に記憶されている命令コード１００中に、命令の内容を示す命令フィールド１００ｂと併せて設けられた遅延スロット指示フィールド１００ａの値ＤＦが設定される。
【００２８】
より詳しくは、例えば図２（ａ）に示すように、（Ｎ）番地に条件分岐命令の命令コードが記憶されている場合、（Ｎ＋１）番地にＤＦ＝０の命令コードが格納されているとすると、図２（ｂ）に示すように、前記（Ｎ＋１）番地の命令は分岐条件に無関係にフェッチ、デコード、実行される。また、さらに分岐条件が成立している場合には分岐先のＭ番地の命令がフェッチ、デコード、実行される。一方、不成立の場合には（Ｎ＋２）番地の命令がフェッチ、デコード、実行されるようになっている。これによって、条件分岐命令よりも遅れたタイミングで処理（フェッチ、デコード、実行）することが可能な命令、または分岐条件が成立するかどうかに係わらず処理される命令（通常、分岐条件より前に処理されるような命令）が（Ｎ＋１）番地に記憶されるとともに、上記のような動作が行われるようにすることにより、パイプライン処理に無駄を生じることなく高速な処理を行わせることができる。
【００２９】
すなわち、（Ｎ）番地の条件分岐命令がフェッチされた後、デコードされる際には、分岐条件に係わらず処理される（Ｎ＋１）番地の命令コードがフェッチされる。これらの条件分岐命令のデコードおよび次の命令のフェッチが行われた時点で、条件分岐命令のデコード結果によって分岐条件が成立しているかどうかが判別されるとともに、フェッチされた（Ｎ＋１）番地の命令コードによってＤＦ＝０であることが判別されるので、その後、分岐条件の成立の有無に応じて（Ｎ＋２）番地または（Ｍ）番地の命令がフェッチ、デコードされるとともに、前記（Ｎ＋１）番地の命令コードがデコードされ、実行される。
【００３０】
一方、図２（ａ）に併せて示すように、（Ｎ）番地に条件分岐命令の命令コードが記憶されている場合に、（Ｎ＋１）番地にＤＦ≠０の命令コードが格納されているとすると、図２（ｃ）に示すように、分岐条件が成立している場合には、前記（Ｎ＋１）番地の命令はフェッチはされるが、デコード部でＮＯＰ命令に置換されるか、または実行部の動作が停止されることによって、ＮＯＰ命令がフェッチされた場合と同じ動作が行われ、さらに分岐先のＭ番地の命令がフェッチ、デコード、実行される。また、分岐条件が不成立の場合には、前記（Ｎ＋１）番地の命令はフェッチはされて、デコード、実行される。これによって、分岐条件が成立しない場合にだけ処理される命令が（Ｎ＋１）番地に記憶される場合でも、適切な処理を行わせることができる。
【００３１】
すなわち、前記ＤＦ＝０の場合と同様に、（Ｎ）番地の条件分岐命令がフェッチされた後、デコードされる際には、（Ｎ＋１）番地の命令コードがフェッチされるが、この時点では、分岐条件が成立しているかどうかは不明である。そこで、その（Ｎ＋１）番地の命令が一旦フェッチされた後、分岐条件が成立していた場合に実行が阻止されることによって、不適切な実行が行われることが防止される。一方、分岐条件が不成立の場合には、（Ｎ＋１）番地の命令が、そのような阻止が行われないことによって、適切な実行が行われる。
【００３２】
なお、上記ＤＦ≠０の場合、分岐条件の不成立の場合でも成立した場合と同様に、前記（Ｎ＋１）番地の命令のフェッチの後、実行の阻止が行われた場合と同じ動作を行うとともに、再度（Ｎ＋１）番地の命令をフェッチ、デコード、実行するようにしてもよい。
【００３３】
上記のようなＦＤの値、分岐条件の成否に応じて各動作が行われる条件の例をまとめると図３に示すようになる。ここで、同図は、情報処理装置の動作を模式的にフローチャートの形式を用いて表わすもので、各ステップの動作が同図通りの順序で行われることを意味するものではない。以下、具体的に説明する。
（１）ステップ１：Ｓ００１
フェッチされた条件分岐命令をデコードする。
（２）ステップ２：Ｓ００２
フェッチされた（Ｎ＋１）番地の命令をデコードする。
（３）ステップ３：Ｓ００３
ＤＦ（遅延スロット指示フィールド１００ａ）が「０」であるかどうかを判定する。
「０」の場合は、ステップ４（Ｓ００４）に移行する。
「０」でない場合は、ステップ９（Ｓ００９）に移行する。
（４）ステップ４：Ｓ００４
条件分岐命令の後続番地の命令を実行する。
（５）ステップ５：Ｓ００５
条件分岐命令の分岐条件が成立か不成立かを判定する。成立の場合は、ステップ６（Ｓ００６）に移行する。不成立の場合は、ステップ７（Ｓ００７）に移行する。
（６）ステップ６：Ｓ００６
分岐先命令のフェッチ、デコード、実行を行う。
（７）ステップ７：Ｓ００７
分岐条件が不成立時に実行される命令のフェッチ、デコード、実行を行う。
（８）ステップ８：Ｓ００８
Ｓ００２でデコードされた命令の実行を停止する。
（９）ステップ９：Ｓ００９
条件分岐命令の分岐条件が成立か不成立かを判定する。
成立の場合は、ステップ８  （Ｓ００８）に移行する。不成立の場合は、ステップ１０（Ｓ０１０）に移行する。
（１０）ステップ１０：Ｓ０１０
条件分岐命令の後続番地の命令コードを再度フェッチし、デコード、実行を行う。
【００３４】
次に、上記情報処理装置で、処理されるプログラムの具体的な例を説明する。
【００３５】
図４（ａ）は、本実施形態において、（Ｎ＋１）番地の命令コードがＤＦ＝０に設定されている場合の具体例である。本例では、命令メモリ６００の（Ｎ）番地に条件分岐命令６００ａ、（Ｎ＋１）番地に、条件分岐命令よりも遅れたタイミングで処理することが可能な命令で、かつ、分岐条件が成立するかどうかに係わらず処理される命令として加算命令６００ｂ、分岐条件が不成立時に実行される命令としてストア命令６００ｃ、Ｍ番地に分岐先の命令としてストア命令６００ｄが格納されている。このように構成されたプログラムは、分岐条件の成否に応じて、図４（ｂ）に示すような順序で命令コードがフェッチ、デコード、実行される。したがって、パイプラインの各ステージに空きが生じることなく、高速な分岐処理（遅延分岐）が行われる。
【００３６】
一方、図５（ａ）は、（Ｎ＋１）番地の命令コードがＤＦ≠０に設定されている場合の具体例である。この例では、命令メモリ７００の（Ｎ）番地に条件分岐命令７００ａ、（Ｎ＋１）番地にストア命令７００ｂ、Ｍ番地に分岐先の命令としてストア命令７００ｃが格納されている。この場合も分岐条件の成否に応じて、図５（ｂ）に示すような順序で命令コードがフェッチ、デコード、実行される。したがって、元のプログラム中にＮＯＰがある場合と同じ動作が行われるが、実際に元のプログラム中にＮＯＰを含める必要がないので、プログラムサイズを小さく抑えることができる。
【００３７】
《発明の実施形態２》
上記のような命令コード１００に代えて、図６に示すような命令の実行条件が指定される条件フィールド２００ａ（ＣＦ）と命令フィールド２００ｂとを有する命令コード２００（条件実行命令）を用い得るようにしてもよい。なお、以下の実施形態において前記実施形態１等と同様の機能を有する構成要素については、同一の符号を付して説明を省略する。
【００３８】
上記条件フィールド２００ａは、条件分岐命令の後続番地に格納された場合には、前記実施形態１で説明した遅延スロット指示フィールド１００ａと同じように用いられるとともに、再フェッチされて実行される際にその命令が実行される条件フィールドとして用いられる。
【００３９】
具体的には図７（ａ）に示すように、（Ｎ＋１）番地に格納される命令コードの条件フィールド２００ａの値ＣＦは、その命令コードが条件分岐命令による分岐条件の成否に係わらず実行されるものである場合には例えばＣＦ＝「００００」に設定される一方、分岐条件が不成立のときにだけ実行されるものである場合にはＣＦ≠「００００」に設定される。
【００４０】
これにより、ＣＦ＝「００００」に設定されている場合には、図８に示すように、（Ｓ１０３）の判定に応じて実施形態１の場合とほぼ同様の制御動作が行われることで、図７（ｂ）に示す順序で命令コードが処理される。また、ＣＦ≠「００００」に設定されている場合にも、実施形態１の場合とほぼ同様の制御動作が行われることで、図７（ｃ）に示す順序で命令コードが処理されるが、分岐条件が不成立の場合にＳ０１０で実行される（Ｎ＋１）番地の命令は、ＣＦの値に応じて実際に実行されるかどうかが制御される。
【００４１】
したがって、本実施形態においても、実施形態１と同じようにプログラムサイズを小さく抑えつつ、高速な分岐処理ができるとともに、前記条件フィールドの値が所定の値であるかどうかに応じて遅延分岐するかどうかが制御されるので、命令コード長を増大させないようにできる。
【００４２】
《発明の実施形態３》
図９に示すような条件フィールド３００ａ（ＣＦ）、および命令フィールド３００ｂを有する命令コード３００（条件実行命令）を用いて、図１０（ａ）に示すように、条件分岐命令の次の命令が、分岐条件の成否に無関係に実行する命令である場合に、条件フィールド３００ａの値が例えば、ＣＦ＝「？？？０」（「？？？」部分は実行条件が設定される。）に設定され、分岐条件不成立時にだけ実行される命令である場合に、ＣＦ≠「？？？０」に設定されるようにしてもよい。
【００４３】
すなわち、図１１に示すように、ＣＦの末尾の値が０であるかどうかによって遅延分岐を行うかどうかが制御される一方（Ｓ２０３）、ＣＦの上位の値によって、遅延分岐が行われる場合（Ｓ２０４、Ｓ２０５、Ｓ００４）でも通常の分岐が行われる場合（Ｓ０１０）でも、いわゆる条件実行が行われるように制御されるようにしてもよい。これによって、図１０（ｂ）（ｃ）に示すように、実施形態１、２と同じような順序で命令コードの処理が行われるとともに、（Ｎ＋１）番地に格納される命令コードについて条件実行を行わせることができる。
【００４４】
したがって、実施形態２で説明したのと同様に、プログラムサイズを小さく抑えつつ、高速な分岐処理ができるようにするとともに命令コード長の増大を抑え、さらに、遅延分岐される場合にも条件実行が行われるようにすることができる。
【００４５】
《発明の実施形態４》
図１２に示すように、条件フィールド４００ａと命令コード４００ｂを有する命令コード４００を用いて、条件分岐命令の分岐条件（ＢＣＦ）と条件分岐命令の後続番地の命令コードの実行条件（ＤＣＦ）とを比較することによって、分岐動作を制御するようにしてもよい。
【００４６】
具体的には、図１３（ａ）に示すように、（Ｎ＋１）番地の命令コードが条件分岐命令の分岐条件の成立に無関係に実行することができる命令である場合は、条件フィールド４００ａの値がＤＣＦ＝ＢＣＦに設定され、分岐条件不成立時に実行される命令である場合には、ＤＣＦ≠ＢＣＦに設定される。すなわち、図１４に示すようにＤＣＦの値とＢＣＦの値とが等しいかどうかによって、遅延分岐を行うかどうかが制御される（Ｓ３０３）。これによって、図１３（ｂ）（ｃ）に示すように、実施形態１等と同じような順序で命令コードの処理が行われる。
【００４７】
したがって、本実施形態でも実施形態１と同様の効果が得られるうえ、条件分岐命令の分岐条件と後続番地の命令の実行条件とを比較することで分岐制御を行うので、実施形態１のような遅延スロット指示フィールド１００ａを独立して設ける必要がない。
【００４８】
《発明の実施形態５》
また、図１５に示すように、条件フィールド５００ａと命令コード５００ｂを有する実施形態４と同様の命令コード５００（条件実行命令）を用いて、条件分岐命令の分岐条件（ＢＣＦ）と条件分岐命令の後続番地の命令コードの実行条件（ＤＣＦ）とを比較することによって分岐動作を制御し、さらに前記にＤＣＦを条件実行命令の条件フィールドとしても用いるようにしてもよい。すなわち、図１６に示すように、ＢＣＦの値とＤＣＦの値とが等しいかどうかによって遅延分岐を行うかどうかが制御される一方（Ｓ４０３）、ＤＣＦの値によって、遅延分岐が行われる場合（Ｓ２０４、Ｓ２０５、Ｓ００４）でも通常の分岐が行われる場合（Ｓ０１０）でも、いわゆる条件実行が行われるように制御されるようにしてもよい。
【００４９】
具体的には、図１７（ａ）に示すように、（Ｎ＋１）番地の命令が、条件分岐命令の分岐条件の成立に無関係に実行することができる命令である場合には、ＢＣＦ＝ＤＣＦに設定され、分岐条件不成立時に実行される命令である場合には、ＢＣＦ≠ＤＣＦに設定される。
【００５０】
これによって、図１７（ｂ）（ｃ）に示すように、実施形態１等と同じような順序で命令コードの処理が行われるとともに、（Ｎ＋１）番地に格納される命令コードについて条件実行が行われる。
【００５１】
さらに、ＢＣＦ＝ＤＣＦに設定された場合には、条件分岐命令の分岐条件と前記後続番地の実行命令の実行条件とが一致するため、分岐条件が成立の場合は、前記後続番地の命令が実行され、分岐条件が不成立の場合は、前記後続番地の命令が実行されない。したがって、分岐先にある命令を条件分岐命令の後続番地に格納することが可能になる。
【００５２】
なお、上記の各実施形態では、図１８（ａ）に示すように、前記３段パイプライン処理が行われ、かつ、条件分岐命令の分岐判断が前記ＤＣステージで行われることによって、遅延スロットが条件分岐命令の直後のスロットのみであるものとして説明を行ったが、例えば、図１８（ｂ）に示すように、前記分岐判断が前記ＥＸステージで行われたり、パイプラインの段数が４段以上あるような場合には、２つ以上の遅延スロットを生じることになる。前記のような場合でも、例えば、Ｎ個の遅延スロットが生じたとすれば、遅延分岐が行われる場合には、図３の（Ｓ００３、Ｓ００４）をＮ繰り返せばよい。また、遅延分岐が行われず、かつ、分岐条件が成立した場合には、（Ｓ００３、Ｓ００９）を行いＳ００８をＮ繰り返し、遅延分岐が行われず、かつ、分岐条件が不成立の場合には、（Ｓ００３、Ｓ００９）を行いＳ０１０を行うことで上記と同じ効果を得ることができる。なお、上記の場合、例えば最初の遅延スロットの命令コードのみについてＤＦ（遅延スロット指示フィールド１００ａ）の値を設定し、Ｓ００３での判断は１回だけ行われるようにしてもよい。
【００５３】
また、実施形態１で説明したように、遅延分岐が行われない場合、分岐条件の不成立の場合でも成立した場合と同様に、前記（Ｎ＋１）番地の命令のフェッチの後、実行の阻止が行われた場合と同じ動作を行うとともに、再度（Ｎ＋１）番地の命令をフェッチ、デコード、実行するようにしてもよい。
【００５４】
また、上記の各実施形態で示した、各フィールドのビット数、設定値とその設定値が示す内容との対応関係などは一例であり、これらに限るものではない。
【産業上の利用可能性】
【００５５】
本発明にかかる分岐制御方法および情報処理装置は、遅延スロットで処理できる命令がある場合には、遅延分岐により分岐ハザードを削減しつつ、このような命令がない場合であっても、ＮＯＰの挿入によりプログラムサイズを増加をさせることがないという効果を有し、命令をパイプライン処理する情報処理装置、および前記情報処理装置における分岐の制御方法として有用である。
【図面の簡単な説明】
【００５６】
【図１】実施形態１における命令コード構成図である。
【図２】実施形態１における命令メモリへの命令コードの格納状態、および命令コードの処理の順序を表わす図である。
【図３】実施形態１における情報処理装置の動作を表わす模式図である。
【図４】実施形態１における遅延分岐が行われる場合の命令コード格納状態の具体例、および命令コードの処理の順序を表わす図である。
【図５】実施形態１における遅延分岐が行われない場合の命令コード格納状態の具体例、および命令コードの処理の順序を表わす図である。
【図６】実施形態２における命令コード構成図である。
【図７】実施形態２における命令メモリへの命令コードの格納状態、および命令コードの処理の順序を表わす図である。
【図８】実施形態２における情報処理装置の動作を表わす模式図である。
【図９】実施形態３における命令コード構成図である。
【図１０】実施形態３における命令メモリへの命令コードの格納状態、および命令コードの処理の順序を表わす図である。
【図１１】実施形態３における情報処理装置の動作を表わす模式図である。
【図１２】実施形態４における命令コード構成図である。
【図１３】実施形態４における命令メモリへの命令コードの格納状態、および命令コードの処理の順序を表わす図である。
【図１４】実施形態４における情報処理装置の動作を表わす模式図である。
【図１５】実施形態５における命令コード構成図である。
【図１６】実施形態５における情報処理装置の動作を表わす模式図である。
【図１７】実施形態５における命令メモリへの命令コードの格納状態、および命令コードの処理の順序を表わす図である。
【図１８】本発明にかかる情報処理装置のパイプラインのタイミングチャートである。
【符号の説明】
【００５７】
１００      命令コード
１００ａ    遅延スロット指示フィールド
１００ｂ    命令フィールド
２００      命令コード
２００ａ    条件フィールド
２００ｂ    命令フィールド
３００      命令コード
３００ａ    条件フィールド
３００ｂ    命令フィールド
４００      命令コード
４００ａ    条件フィールド
４００ｂ    命令コード
５００      命令コード
５００ａ    条件フィールド
５００ｂ    命令コード
６００      命令メモリ
６００ｂ    加算命令
６００ｃ    ストア命令
６００ｄ    ストア命令
７００      命令メモリ
７００ａ    条件分岐命令
７００ｂ    ストア命令
【図１】
2006011723.tif 000003
【図２】
2006011723.tif 000004
【図３】
2006011723.tif 000005
【図４】
2006011723.tif 000006
【図５】
2006011723.tif 000007
【図６】
2006011723.tif 000008
【図７】
2006011723.tif 000009
【図８】
2006011723.tif 000010
【図９】
2006011723.tif 000011
【図１０】
2006011723.tif 000012
【図１１】
2006011723.tif 000013
【図１２】
2006011723.tif 000014
【図１３】
2006011723.tif 000015
【図１４】
2006011723.tif 000016
【図１５】
2006011723.tif 000017
【図１６】
2006011723.tif 000018
【図１７】
2006011723.tif 000019
【図１８】
2006011723.tif 000020