(57)【特許請求の範囲】
【請求項１】
フェッチされた命令の命令アドレスを保持するとともに、フェッチ要求が発行されたときのアドレスモード情報を該命令アドレスの一部として保持する保持手段と、
分岐命令が実行されるとき、前記保持手段に保持された前記アドレスモード情報を転送する転送手段と、
前記転送手段によって転送された前記アドレスモード情報を受け取り、該アドレスモード情報を用いて前記分岐命令の制御を行う分岐命令制御手段と
を備えることを特徴とする命令処理装置。
【請求項２】
前記分岐命令制御手段は、前記分岐命令の分岐先のアドレスモード情報を分岐先の命令アドレスとともに保持することを特徴とする請求項１記載の命令処理装置。
【請求項３】
前記分岐命令制御手段は、前記分岐命令のアドレスモード情報に基づいて前記分岐先のアドレスモード情報を生成することを特徴とする請求項２記載の命令処理装置。
【請求項４】
前記分岐命令制御手段は、前記分岐先のアドレスモード情報と命令アドレスを用いて、分岐予測により予測された分岐先のアドレスモード情報と命令アドレスが正しいか否かを判定することを特徴とする請求項２記載の命令処理装置。
【請求項５】
前記分岐命令制御手段は、分岐先の命令フェッチ要求を出すとき、前記分岐先のアドレスモード情報と命令アドレスを指定する信号を出力することを特徴とする請求項２記載の命令処理装置。
【請求項６】
前記分岐命令制御手段は、前記分岐命令の制御が終了するとき、該分岐命令がアドレスモードを変更する分岐命令であるか否かを表す信号を出力することを特徴とする請求項１記載の命令処理装置。
【請求項７】
分岐命令のアドレスモード情報と命令アドレスと、分岐先のアドレスモード情報と命令アドレスとを対応付けて格納し、前記フェッチされた分岐命令の分岐予測を行うブランチ・ヒストリー手段をさらに備えることを特徴とする請求項１記載の命令処理装置。
【請求項８】
前記アドレスモード情報を用いて前記分岐命令の分岐先の命令アドレスを生成する分岐先アドレス生成手段をさらに備え、前記転送手段は、該分岐命令が実行されるとき、前記保持手段に保持されたアドレスモード情報を該分岐先アドレス生成手段に転送することを特徴とする請求項１記載の命令処理装置。
【請求項９】
フェッチされた命令の命令アドレスを保持するとともに、フェッチ要求が発行されたときのモード情報を該命令アドレスの一部として保持する保持手段と、
分岐命令が実行されるとき、前記保持手段に保持された前記モード情報を転送する転送手段と、
前記転送手段によって転送された前記モード情報を受け取り、該モード情報を用いて前記分岐命令の制御を行う分岐命令制御手段と
を備えることを特徴とする命令処理装置。
【請求項１０】
複数の命令フェッチポートを有し、アウトオブオーダー方式で命令フェッチを行う命令処理装置であって、
各ポート毎に、命令フェッチ要求が発行されたときのモード情報を命令アドレスとともに保持する保持手段と、
使用されるポートに対応するモード情報に基づいて、命令フェッチを行うフェッチ手段と
を備えることを特徴とする命令処理装置。
【請求項１１】
フェッチされた命令の命令アドレスを保持手段に保持するとともに、フェッチ要求が発行されたときのモード情報を該命令アドレスの一部として該保持手段に保持し、
転送手段が、分岐命令が実行されるとき、前記保持手段に保持された前記モード情報を分岐命令制御手段に転送し、
前記分岐命令制御手段が、前記転送手段によって転送された前記モード情報を用いて前記分岐命令の制御を行う
ことを特徴とする命令処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、アウトオブオーダー処理方式を採用した情報処理装置に関する。特に、命令フェッチにおいてアウトオブオーダー処理を行い、命令フェッチのために複数のポートを有する情報処理装置において、モードの変更を伴う分岐命令をハードウェアで制御する命令処理装置およびその方法に関する。
【０００２】
【従来の技術】
アウトオブオーダー処理方式を採用した情報処理装置においては、１つの命令実行の完了を待たずに後続の命令列を順次複数のパイプラインに投入し、それらのパイプラインを用いて命令を実行させることで性能の向上を図っている。
【０００３】
しかし、先行している命令の実行結果が後続の命令の実行に影響を与える場合には、先行している命令実行が完了しなければ、後続の命令を実行させることができない。後続の命令の実行に影響を与える命令の処理が遅ければ、その間、後続の命令は実行できず、先行の命令実行の完了を待ち続けることになる。これにより、パイプラインに乱れが生じ、命令処理の性能の低下を引き起こす。
【０００４】
このような命令の代表的なものとして、分岐命令が挙げられる。分岐命令においては、その実行が完了するまで分岐が生ずるかどうかが分からず、かつ、分岐先のターゲットアドレスも分からないため、後続の命令が待ち状態となり、パイプラインが乱れる。
【０００５】
そこで、ブランチ・ヒストリー（分岐予測テーブル）を用いることで、分岐命令の高速化が図られている。分岐命令を実行するときに、ブランチ・ヒストリーによる分岐予測を行えば、分岐が生じるかどうかが判明する前に、後続の命令や分岐先の命令を事前に処理することができる。
【０００６】
この処理方式では、分岐命令を実行した結果、分岐が生じることが判明した場合、分岐先の命令アドレスと分岐命令自身の命令アドレスとを対にしてブランチ・ヒストリーに登録しておく。そして、命令の実行にあたって、命令を主記憶装置から取り出すときに、その実行に先立ってブランチ・ヒストリーを検索する。
【０００７】
このように、ブランチ・ヒストリーには、以前に分岐が成立した分岐命令の命令アドレスと分岐先の命令アドレスが対になって登録されている。ブランチ・ヒストリーに登録されていない分岐命令であって、分岐が成立したものについては、新たにブランチ・ヒストリーに登録する必要がある。また、何らかの要因で分岐命令の分岐先のターゲットアドレスが変更されている場合は、ブランチ・ヒストリーを検索して得られた分岐先のターゲットアドレスは無効となる。
【０００８】
ブランチ・ヒストリーのエントリのうち、次の何れかに該当するエントリについては、分岐予測が外れる可能性が高いとされ、ブランチ・ヒストリーから削除される。
（１）分岐が成立するとの予測が２回連続で外れた場合。
（２）分岐が成立するとの予測が外れ、かつ、その分岐先のターゲットアドレスも誤っていた場合。
（３）ある命令が実際には分岐命令ではないにもかかわらず、誤って登録されていた場合。
【０００９】
また、分岐が成立するとの予測が外れたときや、分岐先のターゲットアドレスが誤っていたとき、それらの情報をターゲット別に保存しておく必要がある。
【００１０】
【発明が解決しようとする課題】
しかしながら、上述した従来の命令処理には、次のような問題がある。
従来の命令処理装置では、アドレス空間のビットサイズを表すアドレスモードがソフトウェア依存で決定され、命令の実行に伴ってアドレスモードが変更される場合がある。しかし、アドレスモードの変更を伴う分岐命令の分岐予測を行おうとしたとき、分岐先のアドレスモードを予測するための機構がないため、分岐先の命令アドレスしか予測することができなかった。このため、変更されたアドレスモードに基づいて分岐先命令列のプリフェッチを行うことができず、正しい命令処理が行われないことがあった。
【００１１】
また、分岐先の命令アドレスをアドレスジェネレータで計算して求める際にも、分岐先のアドレスモードを求めることはできなかった。また、複数の命令フェッチポートを有する命令処理装置において、あるポートで命令のプリフェッチを行い、その後、別のポートでのシーケンシャルな命令フェッチに復帰しようとしたとき、それぞれのポートにおけるアドレスモードが異なれば、正しい命令処理が行われなかった。
【００１２】
このように、従来の命令処理装置では、アドレスモードが変更されたとき正しい命令処理が行われないことがある。このため、マイクロプログラムによる制御が必要になり、制御に必要なクロック数が増大するという問題があった。
【００１３】
本発明の課題は、アウトオブオーダー処理方式を採用した情報処理装置において、より高速な命令処理を行う命令処理装置およびその方法を提供することである。
【００１４】
【課題を解決するための手段】
図１は、本発明の命令処理装置の原理図である。
本発明の第１の局面において、命令処理装置は、保持手段１、分岐命令制御手段２、および転送手段３を備える。保持手段１は、フェッチされた命令のアドレスモード情報を命令アドレスとともに保持する。分岐命令制御手段２は、フェッチされた命令が分岐命令であるとき、アドレスモード情報を用いて分岐命令の制御を行う。転送手段３は、分岐命令が実行されるとき、保持手段１に保持されたアドレスモード情報を分岐命令制御手段２に転送する。
【００１５】
フェッチされた命令のアドレスモード情報は、命令アドレスとともに保持手段１に保持され、転送手段３により、分岐命令制御手段２に転送される。分岐命令制御手段２は、転送されたアドレスモード情報を用いて分岐命令を制御する。
【００１６】
このような命令処理装置によれば、フェッチされた分岐命令のアドレスモード情報が命令フェッチパイプラインから命令実行パイプラインへ自動的に転送される。そして、分岐命令制御手段２は、その分岐命令がアドレスモードを変更する命令であるときは、分岐命令により指定された変更後のアドレスモードを分岐先のアドレスモードとして採用し、その分岐命令がアドレスモードを変更しない命令であるときは、転送されたアドレスモード情報を分岐先のアドレスモードとして採用することができる。
【００１７】
したがって、分岐先の正しいアドレスモードが自動的に決定されるので、マイクロプログラムによる制御が不要になり、命令処理が高速化される。
また、本発明の第２の局面において、命令処理装置は、保持手段１、フェッチ手段４、および制御手段５を備える。フェッチ手段４は、命令をフェッチする。保持手段１は、フェッチされた各命令のアドレスモード情報を命令アドレスの一部として保持する。制御手段５は、保持されたアドレスモード情報に基づいて各命令の命令処理を制御する。
【００１８】
フェッチ手段４によりフェッチされた命令のアドレスモード情報は、命令アドレスの一部として保持手段１に保持され、制御手段５は、保持されたアドレスモード情報を用いて命令処理を制御する。
【００１９】
このような命令処理装置によれば、フェッチされた各命令のアドレスモード情報を命令アドレスの一部として保持することができ、アドレスモード情報専用のレジスタ等を新たに設ける必要がない。そして、制御手段５は、命令がアドレスモードを変更する分岐命令であるときは、分岐命令により指定された変更後のアドレスモードを分岐先のアドレスモードとして採用し、その命令がアドレスモードを変更しない分岐命令であるときは、保持されたアドレスモード情報を分岐先のアドレスモードとして採用することができる。
【００２０】
したがって、分岐先の正しいアドレスモードが自動的に決定されるので、マイクロプログラムによる制御が不要になり、命令処理が高速化される。
また、本発明の第３の局面において、命令処理装置は、保持手段１、フェッチ手段４、および複数の命令フェッチポートを備え、アウトオブオーダー方式で命令フェッチを行う。保持手段１は、各ポート毎に、命令フェッチ要求が発行されたときのアドレスモード情報を命令アドレスとともに保持する。フェッチ手段４は、使用されるポートに対応するアドレスモード情報に基づいて、命令フェッチを行う。
【００２１】
命令フェッチパイプラインにおいて命令フェッチ要求が発行されたとき、フェッチされる命令のアドレスモード情報と命令アドレスが、使用されるポートに対応付けられて保持手段１に保持される。そして、フェッチ手段４は、使用されるポートに対応するアドレスモード情報に基づいて命令アドレスを解釈し、命令をフェッチする。
【００２２】
このような命令処理装置によれば、複数の命令フェッチポートのそれぞれに対してアドレスモード情報を指定することができる。このため、分岐先の命令列のプリフェッチのためにポートの切り替えが起こったとしても、各ポートの正しいアドレスモードが自動的に決定される。したがって、マイクロプログラムによる制御が不要になり、命令処理が高速化される。
【００２３】
また、本発明の別の命令処理装置は、保持手段１、分岐命令制御手段２、および転送手段３を備える。保持手段１は、フェッチされた命令の命令アドレスを保持するとともに、フェッチ要求が発行されたときのアドレスモード情報をその命令アドレスの一部として保持する。転送手段３は、分岐命令が実行されるとき、保持手段１に保持されたアドレスモード情報を転送する。分岐命令制御手段２は、転送手段３によって転送されたアドレスモード情報を受け取り、そのアドレスモード情報を用いて分岐命令の制御を行う。
例えば、図１の保持手段１および転送手段３は、後述する図２の命令アドレスレジスタ１１、命令アドレス生成回路１２、命令フェッチ制御回路１３、命令バッファ１６、デコーダ１７、分岐先アドレス生成回路１９、および分岐命令制御回路２０に対応し、分岐命令制御手段２は、分岐命令制御回路２０に対応する。
【００２４】
また、例えば、フェッチ手段４は、命令アドレスレジスタ１１、命令アドレス生成回路１２、および命令フェッチ制御回路１３に対応し、制御手段５は、命令制御回路１８、分岐先アドレス生成回路１９、分岐命令制御回路２０、ＰＳＷ（Ｐｒｏｇｒａｍ−Ｓｔａｔｕｓ−Ｗｏｒｄ  ）制御回路２１に対応する。
【００２５】
【発明の実施の形態】
以下、図面を参照しながら、本発明の実施の形態を詳細に説明する。
本実施形態においては、アドレスモードの変更を伴う分岐命令の分岐予測を行うため、分岐先の命令アドレスとともに分岐先のアドレスモード情報をブランチ・ヒストリーに保持する。例えば、分岐先のアドレスモード情報を持つビットが分岐先命令アドレスの一部として保持される。そして、分岐命令制御部において、分岐予測を行ったときの分岐先アドレスが正しいか否かを判定すると同時に、分岐先のアドレスモードが正しく指定されているか否かも判定する。
【００２６】
分岐先のアドレスモード情報を持つビットの生成は、分岐命令制御部で行われる。分岐命令制御部は、分岐命令がアドレスモードを変更する命令であるか否かを判断し、アドレスモードを変更する命令であれば、命令のデコード後に、どのアドレスモードに変更するのかという情報を得る。そして、得られたアドレスモードを、分岐先のアドレスモードを指定するビット（アドレスモード指定ビット）にセットする。
【００２７】
また、分岐命令がアドレスモードを変更しない命令であれば、分岐先のアドレスモードは変わらないので、アドレスモード指定ビットには、分岐元の分岐命令と同じアドレスモードをセットする。
【００２８】
なお、分岐命令制御部でアドレスモード指定ビットを生成する代わりに、分岐先アドレス生成回路で、分岐先アドレスを生成すると同時にアドレスモード指定ビットを生成してもよい。
【００２９】
また、命令処理装置が複数の命令フェッチポートを保有し、命令フェッチをアウトオブオーダ方式で処理する場合、ポートが変る度にポートに対応したアドレスモードを指定する必要があるが、従来の装置では、ポート毎にアドレスモードを保持していなかった。
【００３０】
そこで、本実施形態の装置では、ポート毎にアドレスモードを保持するようにする。これにより、例えば、あるポートで命令プリフェッチを行い、その後、別のポートでのシーケンシャルな命令フェッチに復帰しようとしたとき、それぞれのポートのアドレスモードが異なっていても、正しい命令処理が行われる。
【００３１】
図２は、本発明の命令処理装置の構成図である。図２の命令処理装置は、命令アドレスレジスタ１１、命令アドレス生成回路１２、命令フェッチ制御回路１３、命令キャッシュ１４、ブランチ・ヒストリー１５、命令バッファ１６、デコーダ１７、命令制御回路１８、分岐先アドレス生成回路１９、分岐命令制御回路２０、およびＰＳＷ（Ｐｒｏｇｒａｍ−Ｓｔａｔｕｓ−Ｗｏｒｄ  ）制御回路２１を備える。
【００３２】
このうち、命令アドレスレジスタ１１、命令アドレス生成回路１２、命令フェッチ制御回路１３、命令キャッシュ１４、およびブランチ・ヒストリー１５は、命令フェッチパイプラインの回路に対応し、命令バッファ１６、デコーダ１７、命令制御回路１８、分岐先アドレス生成回路１９、分岐命令制御回路２０、およびＰＳＷ制御回路２１は、命令実行パイプラインの回路に対応する。
【００３３】
命令フェッチパイプラインは、命令アドレス発行サイクル（ＩＡ）、テーブルサイクル（ＩＴ）、バッファサイクル（ＩＢ）、および結果サイクル（ＩＲ）を含み、命令実行パイプラインは、デコードサイクル（Ｄ）、アドレス計算サイクル（Ａ）、実行サイクル（Ｅ）、およびライトサイクル（Ｗ）を含む。
【００３４】
また、命令アドレスレジスタ１１、命令アドレス生成回路１２、および命令フェッチ制御回路１３は、命令フェッチ回路を構成し、それぞれ、Ａ、Ｂ、およびＣの３つの命令フェッチポートを持つ。この命令フェッチ回路は、例えば、動作開始時にポートＡを使用して命令フェッチを行い、命令のプリフェッチを行う場合に別のポートに切り替える。
【００３５】
命令キャッシュ１４は、命令フェッチ制御回路１３から発行された命令アドレスに対応する命令コードを命令バッファ１６に出力し、ブランチ・ヒストリー１５は、過去において分岐が成立した分岐命令のアドレスとそのときの分岐先のアドレスを対にして保持する。
【００３６】
デコーダ１７は、命令バッファ１６に保持された命令コードをデコードし、得られた情報を命令制御回路１８、分岐先アドレス生成回路１９、および分岐命令制御回路２０に渡す。命令制御回路１８は、分岐命令以外の命令に関する制御を行い、分岐先アドレス生成回路１９は、分岐先の命令アドレスとアドレスモードを生成し、分岐命令制御回路２０は、分岐命令に関する制御を行う。また、ＰＳＷ制御回路２１は、ＰＳＷを保持する。
【００３７】
また、使用されるアドレスモードには、３１ビットモードと２４ビットモードの２つがある。ここでは、図３に示すように、アドレスモードは命令アドレスの一部として扱われ、命令アドレスのビット〈０〉がアドレスモード指定ビットになる。
【００３８】
このアドレスモード指定ビットは、命令のアドレスモードとして、すべての命令アドレスのビット〈０〉に付加され、すべてのサイクルにおいて命令アドレスとともに保持される。例えば、アドレスモード指定ビットが論理“１”のときは３１ビットモードを表し、それが論理“０”のときは２４ビットモードを表す。
【００３９】
以下の説明では、図３に示した拡張された命令アドレスのうち、アドレスモード指定ビット以外の部分を命令アドレスまたはアドレスと呼ぶことにする。このアドレスモード指定ビットを用いた場合、ブランチ・ヒストリー１５のエントリのフォーマットは、図４に示すようになる。
【００４０】
図４において、分岐命令アドレス３１と分岐先アドレス３２は互いに対応付けられている。そして、分岐命令アドレス３１には、分岐命令の処理に用いられるアドレスモードを指定するアドレスモード指定ビット３３が付加され、分岐先アドレス３２には、分岐先命令の処理に用いられるアドレスモードを指定するアドレスモード指定ビット３４が付加されている。
【００４１】
図５は、図２の命令処理装置の動作を示すフローチャートである。命令フェッチ制御回路１３は、生成された命令アドレスをブランチ・ヒストリー１５に与え、ブランチ・ヒストリー１５は、与えられた命令アドレスをキーとして対応するエントリを検索する（ステップＳ１）。
【００４２】
命令アドレスがブランチ・ヒストリー１５にヒットしなければ、分岐先命令のプリフェッチは行われない。そして、分岐命令制御回路２０において分岐することが確定すると（ステップＳ２）、分岐命令制御回路２０は、分岐先アドレス生成回路１９から、分岐先アドレスと分岐先アドレスモードを受け取り、分岐先のアドレスモード指定ビットを生成する（ステップＳ３）。そして、分岐先アドレスと分岐先アドレスモード指定ビットを命令フェッチ制御回路１３に送る。
【００４３】
命令フェッチ制御回路１３は、分岐命令制御回路２０から受け取った分岐先アドレスと分岐先アドレスモードに基づいて、分岐先の命令フェッチを行う（ステップＳ４）。
【００４４】
また、命令アドレスがブランチ・ヒストリー１５にヒットすれば、別のポートを用いて分岐先命令のプリフェッチが行われる。そして、分岐命令制御回路２０において分岐することが確定すると（ステップＳ５）、分岐命令制御回路２０は、分岐先アドレス生成回路１９から、分岐先アドレスと分岐先アドレスモードを受け取り、分岐先のアドレスモード指定ビットを生成する（ステップＳ６）。
【００４５】
次に、分岐命令制御回路２０は、ブランチ・ヒストリー１５により予測された分岐先アドレスと分岐先アドレスモード指定ビットが正しいか否かを判定する（ステップＳ７）。それらが正しければ、予測が成功したものとみなして、分岐先命令の処理を続行する（ステップＳ８）。それらが正しくなければ、予測が失敗したものとみなして、命令フェッチ制御回路１３に分岐先命令の再フェッチを指示する（ステップＳ９）。
【００４６】
また、ステップＳ５において分岐しないことが確定すると、命令フェッチ制御回路１３に分岐先命令列のプリフェッチを停止するように指示する（ステップＳ１０）。これにより、命令フェッチ制御回路１３は、フェッチポートを元のポートに戻して、分岐命令の後続命令列の処理を続行する。
【００４７】
図６は、このような命令処理に用いられる信号を示している。命令フェッチ制御回路１３は、信号＋ＩＡＲ〈０：３１，Ｐ０：Ｐ３〉を命令キャッシュ１４に出力し、命令キャッシュ１４は、対応する命令コードを命令バッファ１６に出力する。信号＋ＩＡＲ〈０：３１，Ｐ０：Ｐ３〉のうち、＋ＩＡＲ〈０〉はアドレスモード指定ビットに対応し、＋ＩＡＲ〈１：３１〉は命令アドレスに対応し、＋ＩＡＲ〈Ｐ０：Ｐ３〉は、＋ＩＡＲ〈０：３１〉のパリティビットに対応する。
【００４８】
また、命令フェッチ制御回路１３は、信号＋ＩＡＲ〈０〉を命令バッファ１６に出力し、命令バッファ１６は、その信号を＋Ｄ＿ＩＡＲ〈０〉として、デコーダ１７に出力する。
【００４９】
また、命令バッファ１６は、分岐命令の命令アドレスを表す信号＋Ｄ＿ＢＲ＿ＩＡＲ〈０：３１，Ｐ０：Ｐ３〉を保持しており、この信号を分岐命令制御回路２０に出力する。この信号は、デコーダ１７経由で分岐命令制御回路２０に転送してもよく、命令バッファ１６から、直接、分岐命令制御回路２０に転送してもよい。命令キャッシュ１４から出力された命令コードが分岐命令に対応する場合、信号＋Ｄ＿ＩＡＲ〈０〉は信号＋Ｄ＿ＢＲ＿ＩＡＲ〈０〉に一致する。
【００５０】
デコーダ１７は、分岐命令のオペランドの１つとして指定されたアドレスモードを表す信号＋Ａ＿ＡＤＲＳ＿ＭＯＤＥを、分岐先アドレス生成のためのデータを表す信号＋ＯＰ＿ＤＡＴＡとともに、分岐先アドレス生成回路１９に出力する。この信号＋Ａ＿ＡＤＲＳ＿ＭＯＤＥは、分岐先命令のアドレスモードを表している。
【００５１】
分岐先アドレス生成回路１９は、受け取った信号から分岐先命令のアドレスを表す信号＋ＥＡＧ２〈１：３１，Ｐ０：Ｐ３〉を生成し、分岐先命令のアドレスモードを表す信号＋Ａ＿ＢＳＭ＿３１ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥとともに、分岐命令制御回路２０に出力する。また、分岐命令のアドレスモード指定ビットを表す信号＋Ｄ＿ＢＲ＿ＩＡＲ〈０〉をデコーダ１７から受け取り、それに基づいて、分岐先の命令アドレスのマスク処理等を行う。
【００５２】
分岐命令制御回路２０は、ブランチ・ヒストリー１５から、予測された分岐先命令のアドレスおよびアドレスモード指定ビットを表す信号＋ＢＲＨＩＳ＿ＴＩＡＲ〈０：３１，Ｐ０：Ｐ３〉を受け取り、その信号を分岐先アドレス生成回路１９からの信号と比較して、予測結果が正しいか否かを判定する。
【００５３】
そして、予測結果が正しければ、予測された分岐先の処理の続行を命令フェッチ制御回路１３に指示する。また、予測結果が正しくなければ、正しい分岐先命令のアドレスおよびアドレスモード指定ビットを表す信号＋ＲＳＢＲ＿ＴＩＡＲ〈０：３１，Ｐ０：Ｐ３〉と命令再フェッチ要求を、命令フェッチ制御回路１３に送る。
【００５４】
次に、図７から図１２までを参照しながら、図２の命令処理装置の構成と動作についてより詳細に説明する。
最初の命令フェッチおよび割り込みによる再スタート時には、命令フェッチ制御回路１３は、ＰＳＷ制御回路２１からアドレスモードの情報を取得して、それを命令フェッチ回路のアドレスモード指定ビットにセットする。これにより、命令アドレスレジスタ１１、命令アドレス生成回路１２、および命令フェッチ制御回路１３のそれぞれにアドレスモードがセットされる。
【００５５】
図７は、命令アドレス生成回路１２内でアドレスモード指定ビットを保持する回路を示している。図７のラッチ回路４１、４２、４３は、それぞれ、ポートＡ、ポートＢ、ポートＣのアドレスモード指定ビットとフェッチすべき命令アドレスを保持する。各ラッチ回路の入力信号＋ＩＦ＿ＥＡＧ〈０：３１〉は、生成されたアドレスモード指定ビットと命令アドレスを表し、出力信号＋ＩＡＲＡ〈０：３１〉、＋ＩＡＲＢ〈０：３１〉、および＋ＩＡＲＣ〈０：３１〉は、図６の信号＋ＩＡＲ〈０：３１〉に対応する。
【００５６】
スタート時に使用される命令フェッチポートがＡである場合、命令フェッチ要求が発行された時のアドレスモードが、随時、ポートＡに入力され、ポートのクリア要求が発行されるまで保持される。アドレスモードは、命令フェッチ要求が発行される度に更新されるので、途中でアドレスモードが変更されれば、変更されたアドレスモードが保持される。
【００５７】
次に、命令フェッチポートが切り替わった場合の動作について説明する。ここでは、一例として、分岐予測に伴う命令プリフェッチのための命令フェッチポートの切り替えについて説明する。
【００５８】
分岐命令の分岐予測において、命令フェッチ制御回路１３は、フェッチした命令アドレスをブランチ・ヒストリー１５で検索し、過去にそのアドレスの命令が分岐していたか否かを調べる。分岐していれば、どのアドレスに分岐していたかを調べ、分岐先の命令アドレスに対する命令フェッチ要求を発行する。
【００５９】
このとき、分岐先の命令アドレスを予測するのと同時に、分岐先のアドレスモードも予測する必要がある。本実施形態では、図３、４に示したように、アドレスモードをアドレスの一部として扱うことで、両者を同時に予測することを可能にしている。
【００６０】
一般に、ブランチ・ヒストリー１５による分岐予測および予測分岐先の命令フェッチは命令デコードの前に行われるので、予測した命令が本当に分岐命令であるのか否か、分岐命令であっても実際に分岐が成立するのか否か、予測した分岐先命令アドレスが正しいのか否かは分からない。したがって、現在使用中のポートとは別の命令フェッチポートを用いて、予測分岐先の命令フェッチを行う必要がある。
【００６１】
なお、分岐等が発生せずに、後続の命令列が順に実行される場合、つまり、シーケンシャルな命令フェッチが行われる場合は、ポートの切り替えは行われないものとする。
【００６２】
まず、分岐予測が行われ、命令のプリフェッチが行われ、命令のデコード後に分岐が確定し、さらに、予測した分岐先の命令アドレスが当たっていた場合を考える。これは、図５のステップＳ８の動作が行われる場合に相当する。
【００６３】
この場合、分岐後の命令フェッチは、切り替わったポート（ここでは、ポートＢ）を使用して行われる。また、分岐予測に基づく分岐先の命令プリフェッチは、シーケンシャルな命令フェッチとは異なるポートを用いて行われる。ここでは、シーケンシャルな命令フェッチではポートＡが使用され、分岐先の命令プリフェッチではポートＢが使用される。
【００６４】
このとき、命令フェッチ制御回路１３は、ポートＡとポートＢにおいて、それぞれのアドレスモード指定ビットを保持している。分岐命令のデコード後に、分岐命令の分岐が確定し、予測した分岐先の命令アドレスが正しいと判明したとき、ポートＢがポートＡに代わってシーケンシャルな命令フェッチポートとなる。この時点で、命令フェッチ回路は、ポートＡのアドレスモードを保持する必要がなくなる。
【００６５】
次に、分岐予測が行われ、命令のプリフェッチが行われ、命令のデコード後に分岐が確定し、さらに、予測した分岐先の命令アドレスが外れていた場合を考える。これは、図５のステップＳ９の動作が行われる場合に相当する。この場合の動作は、命令のプリフェッチまでは、上述の場合と同様である。
【００６６】
命令のデコード後に分岐が確定し、予測した分岐先の命令アドレスが間違っていると判明したとき、分岐先の命令フェッチをやり直す必要がある。このとき、命令フェッチ制御回路１３は、分岐先アドレス生成回路１９により生成された分岐先アドレスと分岐命令制御回路２０により生成された分岐先のアドレスモード指定ビットを使用して、命令の再フェッチを行う。これにより、一旦、命令フェッチ回路のすべてのポートがクリアされ、命令フェッチが行われる。
【００６７】
次に、分岐予測が行われ、命令のプリフェッチが行われ、命令のデコード後に分岐しないことが確定した場合を考える。これは、図５のステップＳ１０の動作が行われる場合に相当する。この場合の動作は、命令のプリフェッチまでは、上述の場合と同様である。
【００６８】
命令のデコード後に、予測した命令が分岐しなかったとき、すなわち、予測した命令が分岐命令ではなかったとき、もしくは予測した命令が分岐命令であったが分岐条件が満たされなかったときは、シーケンシャルな命令フェッチが行われていた元のポート（ここでは、ポートＡ）において、再び、シーケンシャルな命令フェッチが再開される。
【００６９】
このとき、命令フェッチ要求で使用されるアドレスモード指定ビットとしては、命令フェッチ制御回路１３のポートＡに保持されたものが使用される。また、分岐予測に基づいて命令のプリフェッチが行われたポート（ここでは、ポートＢ）はクリアされる。
【００７０】
分岐予測に伴う命令プリフェッチのための命令フェッチポートの切り替えが行われたときは、以上の動作によりアドレスモード指定ビットがセットされる。次に、分岐先のアドレスモード指定ビットの生成回路について説明する。
【００７１】
分岐命令がアドレスモードを変更する命令である場合、図８に示すような回路により、その分岐命令が指定するアドレスモードの信号が生成される。図８では、ＢＳＭという命令に対する信号が示されており、この回路は分岐命令アドレス生成回路１９内に設けられる。
【００７２】
図８において、入力信号＋Ａ＿ＢＳＭは、論理“１”のとき、アドレスモードを変更する指示を表し、論理“０”のとき、アドレスモードを変更しない指示を表す。また、入力信号＋ＢＲ２＿ＢＩＴ３２は、論理“１”のとき、３１ビットモードを表し、論理“０”のとき、２４ビットモードを表す。
【００７３】
また、入力信号−ＢＲ２＿ＢＩＴ３２は、信号＋ＢＲ２＿ＢＩＴ３２の否定に対応し、論理“１”のとき、２４ビットモードを表し、論理“０”のとき、３１ビットモードを表す。これらの入力信号は、分岐命令アドレス生成回路１９内において、図６の信号＋Ａ＿ＡＤＲＳ＿ＭＯＤＥから生成される。
【００７４】
ＡＮＤ回路５１は、信号＋Ａ＿ＢＳＭと−ＢＲ２＿ＢＩＴ３２の論理積を信号＋Ａ＿ＢＳＭ＿２４ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥとして出力する。したがって、出力信号＋Ａ＿ＢＳＭ＿２４ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥは、論理“１”のとき、アドレスモードが２４ビットモードに変更されることを表す。
【００７５】
また、ＡＮＤ回路５２は、信号＋Ａ＿ＢＳＭと＋ＢＲ２＿ＢＩＴ３２の論理積を信号＋Ａ＿ＢＳＭ＿３１ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥとして出力する。したがって、出力信号＋Ａ＿ＢＳＭ＿３１ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥは、論理“１”のとき、アドレスモードが３１ビットモードに変更されることを表す。
【００７６】
ところで、アドレスモードが２４ビットモードと３１ビットモードの２通りしかない場合は、信号＋Ａ＿ＢＳＭ＿２４ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥと＋Ａ＿ＢＳＭ＿３１ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥのいずれか一方のみでも、命令処理の制御が可能である。そこで、図６では、信号＋Ａ＿ＢＳＭ＿３１ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥのみが分岐命令制御回路２０に出力されている。
【００７７】
また、分岐命令自身のアドレスモードの信号は、分岐命令制御回路２０内で、図９に示すような回路により生成される。図９のラッチ回路６１は、図６の信号＋Ｄ＿ＢＲ＿ＩＡＲ〈０〉をラッチし、信号＋ＲＳＢＲ＿３１ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥとして出力する。信号＋ＲＳＢＲ＿３１ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥは、論理“１”のとき、分岐命令のアドレスモードが３１ビットモードであることを表す。
【００７８】
図１０は、分岐先のアドレスモード指定ビットを生成する回路を示している。この回路は、分岐命令制御回路２０内に設けられ、実行される分岐命令がアドレスモードを変更する命令であるか否かに従って、アドレスモード指定ビットを生成する。
【００７９】
アドレスモードを変更する命令である場合は、分岐先アドレス生成回路１９から受け取った、分岐命令が指定するアドレスモードの信号をアドレスモード指定ビットとしてセットし、アドレスモードを変更しない命令である場合は、分岐命令のアドレスモードを、そのままアドレスモード指定ビットとしてセットする。
【００８０】
図１０において、入力信号＋ＲＳＢＲ＿ＢＳＭ＿ＶＡＬは、論理“１”のとき、デコードされた分岐命令がアドレスモードを変更する命令であることを表す。また、入力信号−ＲＳＢＲ＿ＢＳＭ＿ＶＡＬは、信号＋ＲＳＢＲ＿ＢＳＭ＿ＶＡＬの否定に相当し、論理“１”のとき、デコードされた分岐命令がアドレスモードを変更しない命令であることを表す。これらの入力信号は、デコーダ１７によるデコード結果から生成される。
【００８１】
ＡＮＤ回路７１は、信号＋ＲＳＢＲ＿ＢＳＭ＿ＶＡＬと図８の信号＋Ａ＿ＢＳＭ＿３１ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥの論理積をＯＲ回路７３に出力する。また、ＡＮＤ回路７２は、信号−ＲＳＢＲ＿ＢＳＭ＿ＶＡＬと図９の信号＋ＲＳＢＲ＿３１ＢＩＴ＿ＡＤＲＳ＿ＭＯＤＥの論理積をＯＲ回路７３に出力する。そして、ＯＲ回路７３は、これらの２つのＡＮＤ回路の出力の論理和を、分岐先のアドレスモード指定ビットを表す信号＋ＥＡＧ２〈０〉として出力する。
【００８２】
したがって、出力信号＋ＥＡＧ２〈０〉は、論理“１”のとき、分岐先のアドレスモードが３１ビットモードであることを表し、論理“０”のとき、分岐先のアドレスモードが２４ビットモードであることを表す。
【００８３】
この信号＋ＥＡＧ２〈０〉が図６の分岐先アドレスを表す信号＋ＥＡＧ２〈１：３１〉に付加されて、信号＋ＥＡＧ２〈０：３１，Ｐ０：Ｐ３〉が生成される。信号＋ＥＡＧ２〈０：３１，Ｐ０：Ｐ３〉は、分岐先のアドレスモード指定ビットと分岐先アドレスを表し、分岐命令制御回路２０内に保持される。
【００８４】
次に、予測した分岐先の命令アドレスとアドレスモード指定ビットが正しいか否かを判定する回路について説明する。
図１１は、このような判定を行う回路を示しており、この回路は分岐命令制御回路２０内に設けられる。図１１において、入力信号＋ＢＲＨＩＳ＿ＴＩＡＲ〈０：３１，Ｐ０：Ｐ３〉は、分岐予測により予測された分岐先アドレスと分岐先アドレスモード指定ビットを表す。
【００８５】
ＥＸＮＯＲ回路８１は、信号＋ＥＡＧ２〈０：３１，Ｐ０：Ｐ３〉と＋ＢＲＨＩＳ＿ＴＩＡＲ〈０：３１，Ｐ０：Ｐ３〉をビット毎に比較し、対応する２つのビットの排他的論理和の否定を表す信号を出力する。ここでは、アドレスモード指定ビットがアドレスの一部として扱われるので、アドレスモード指定ビット、分岐先アドレス、およびパリティが、同時に比較される。
【００８６】
また、ＡＮＤ回路８２は、ＥＸＮＯＲ回路８１が出力したすべてのビットの比較結果（〈０〉，〈１〉，．．．，〈Ｐ３〉）の論理積を、信号＋ＲＳＢＲ＿ＴＩＡＲ＿ＭＡＴＣＨとして出力する。
【００８７】
したがって、アドレスモード指定ビット、分岐先アドレス、およびパリティのすべてが一致した場合、信号＋ＲＳＢＲ＿ＴＩＡＲ＿ＭＡＴＣＨは論理“１”となる。この場合、分岐命令制御回路２０は、分岐予測が当たったものと判断し、そのまま処理を続行する。
【００８８】
しかし、いずれかのビットが一致しなければ、この信号が論理“０”となり、分岐予測が失敗したと判断される。この場合、分岐命令制御回路２０は、分岐先アドレス生成回路１９で生成された分岐先アドレスと分岐命令制御回路２０で生成されたアドレスモード指定ビットを、図６の信号＋ＲＳＢＲ＿ＴＩＡＲ〈０：３１，Ｐ０：Ｐ３〉として命令フェッチ制御回路１３に出力する。これにより、分岐先の命令フェッチがやり直される。
【００８９】
また、分岐命令制御回路２０は、分岐命令の制御が終了するとき、その分岐命令がアドレスモードを変更する分岐命令であるか否かを判定し、判定結果をＰＳＷ制御回路２１に出力する。これにより、アドレスモードを変更する分岐命令についての情報がＰＳＷ制御回路２１に保持されるので、どのような命令によりアドレスモードが変更されたかを認識しながら命令処理装置を制御することができる。
【００９０】
また、分岐命令制御回路２０は、分岐先の命令再フェッチ要求を出すとき、分岐先の命令アドレスとともにアドレスモード指定ビットをＰＳＷ制御回路２１に出力する。これにより、分岐先の命令アドレスと同時に分岐先のアドレスモードもＰＳＷ制御回路２１に保持されるので、そのアドレスモードに基づいて命令処理装置を制御することができる。
【００９１】
図１２は、このようなＰＳＷ制御回路２１への出力信号を生成する回路を示している。この回路は、分岐命令制御回路２０内に設けられる。図１２において、入力信号＋ＲＳＢＲ＿ＴＡＫＥＮは、論理“１”のとき、分岐命令が実際に分岐したことを表す。
【００９２】
ＡＮＤ回路９１は、信号＋ＲＳＢＲ＿ＴＩＡＲ〈０：３１，Ｐ０：Ｐ３〉と＋ＲＳＢＲ＿ＴＡＫＥＮの論理積を、信号＋ＣＯＭＰＬＥＴＥ＿ＲＳＢＲ＿ＴＩＡＲ〈０：３１，Ｐ０：Ｐ３〉として出力する。したがって、この出力信号は、分岐命令が実行され分岐したときの分岐先のアドレスモード指定ビットと命令アドレスを表す。
【００９３】
また、ＡＮＤ回路９２は、図１０の信号＋ＲＳＢＲ＿ＢＳＭ＿ＶＡＬと＋ＲＳＢＲ＿ＴＡＫＥＮの論理積を、信号＋ＣＯＭＰＬＥＴＥ＿ＲＳＢＲ＿ＢＳＭとして出力する。したがって、この出力信号は、論理“１”のとき、分岐命令が分岐したときに実行された命令がアドレスモードを変更する分岐命令ＢＳＭであることを表す。
【００９４】
これらの出力信号＋ＣＯＭＰＬＥＴＥ＿ＲＳＢＲ＿ＴＩＡＲ〈０：３１，Ｐ０：Ｐ３〉と＋ＣＯＭＰＬＥＴＥ＿ＲＳＢＲ＿ＢＳＭは、制御信号としてＰＳＷ制御回路２１に出力される。
【００９５】
従来の命令処理装置では、分岐予測の際に、分岐先のアドレスモードを予測することができず、分岐先アドレスを計算する際に、分岐先命令のアドレスモードを生成することができなかった。また、複数の命令フェッチポートを有する場合、アドレスモードをポート毎に保持していなかったので、ポートの切り替えが起こったとき、分岐先のアドレスモードを変更する命令をハードウェアで正確に制御することができなかった。このため、従来の装置では、マイクロプログラムによる制御を必要としていた。
【００９６】
これに対して、本発明の命令処理装置では、すべての命令の命令アドレスに対して、そのアドレスモード情報を命令アドレスの一部として付加し、すべてのサイクルにおいてアドレスモード情報を保持している。このため、どのサイクルにおいても、保持されたアドレスモード情報に基づいて、ハードウェアで正確な制御を行うことができる。
【００９７】
例えば、分岐予測に基づいて、アドレスモードの変更を伴う分岐命令の分岐先命令列のプリフェッチを行うとき、変更後のアドレスモードに基づいて正しいフェッチ動作を行うことができる。また、分岐先の命令アドレスをアドレスジェネレータで計算する際、同時に分岐先のアドレスモードを生成することができる。
【００９８】
さらに、複数の命令フェッチポートを有する場合、アドレスモードをポート毎に保持しているため、ポートの切り替えが起こったときでも、切り替え後のポートのアドレスモードに基づいて正しいフェッチ動作を行うことができる。
【００９９】
このように、アドレスモードの変更を伴う分岐命令がハードウェアにより正確に制御されるため、マイクロプログラムによる制御が不要になり、命令実行時に必要なクロック数を大幅に削減することができる。したがって、命令処理装置の処理速度が大幅に向上する。
【０１００】
以上説明した実施形態においては、２４ビットモードと３１ビットモードの２つのアドレスモードが使用されているが、３つ以上のアドレスモードが使用される場合でも、複数のアドレスモード指定ビットを用いることで、同様の制御を行うことができる。
【０１０１】
また、本発明は、アドレスモード以外にも、命令フェッチ時に決定されるべき情報処理装置の任意のモードに対して適用される。例えば、コンピュータの動作仕様書に規定されたＥＳＡ（ｅｎｔｅｒｐｒｉｓｅ  ｓｙｓｔｅｍｓ  ａｒｃｈｉｔｅｃｔｕｒｅ  ）モード等の動作モードを変更する分岐命令を処理する場合、すべての命令の命令アドレスに対して、その動作モードを指定する情報を命令アドレスの一部として付加し、すべてのサイクルにおいてその情報を保持しておけばよい。これにより、任意のサイクルにおいて、保持された動作モード情報に基づいた制御が可能になる。
【０１０２】
【発明の効果】
本発明によれば、アウトオブオーダー処理方式を採用した情報処理装置において、モードの変更を伴う命令をハードウェアにより正確に制御することが可能になる。したがって、命令処理が高速化される。
【図面の簡単な説明】
【図１】本発明の命令処理装置の原理図である。
【図２】命令処理装置の構成図である。
【図３】アドレスモード指定ビットを示す図である。
【図４】ブランチ・ヒストリーのエントリのフォーマットを示す図である。
【図５】命令処理装置の動作フローチャートである。
【図６】命令処理に用いられる信号を示す図である。
【図７】アドレスモード保持回路を示す図である。
【図８】第１のアドレスモード生成回路を示す図である。
【図９】第２のアドレスモード生成回路を示す図である。
【図１０】アドレスモード指定ビット生成回路を示す図である。
【図１１】判定回路を示す図である。
【図１２】制御信号生成回路を示す図である。
【符号の説明】
１  保持手段
２  分岐命令制御手段
３  転送手段
４  フェッチ手段
５  制御手段
１１  命令アドレスレジスタ
１２  命令アドレス生成回路
１３  命令フェッチ制御回路
１４  命令キャッシュ
１５  ブランチ・ヒストリー
１６  命令バッファ
１７  デコーダ
１８  命令制御回路
１９  分岐先アドレス生成回路
２０  分岐命令制御回路
２１  ＰＳＷ制御回路
３１  分岐命令アドレス
３２  分岐先アドレス
３３、３４  アドレスモード指定ビット
４１、４２、４３、６１  ラッチ回路
５１、５２、７１、７２、８２、９１、９２  ＡＮＤ回路
７３  ＯＲ回路
８１  ＥＸＮＯＲ回路
【図１】
0003606435.tif 000002
【図２】
0003606435.tif 000003
【図３】
0003606435.tif 000004
【図４】
0003606435.tif 000005
【図５】
0003606435.tif 000006
【図６】
0003606435.tif 000007
【図７】
0003606435.tif 000008
【図８】
0003606435.tif 000009
【図９】
0003606435.tif 000010
【図１０】
0003606435.tif 000011
【図１１】
0003606435.tif 000012
【図１２】
0003606435.tif 000013