(57)【特許請求の範囲】
【請求項１】
命令をフェッチするための命令フェッチポートを１つ以上備え、該命令フェッチポートからフェッチされた命令上書き可能性を検出する情報処理装置において、
１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続するすべての命令列の長さを、フェッチの回数をカウントすることによりカウントする命令フェッチカウンタ手段と、
該すべての命令列内の特定位置に対応する命令アドレスと、完了したストア命令の実行結果が格納されるストア対象アドレスと、該命令フェッチカウンタ手段の出力値とを用いて、該ストア対象アドレスの範囲の少なくとも一部が前記すべての命令列内における命令アドレスと重なり、該命令列の少なくとも一部が書き換えられる命令上書きの可能性を検出する命令上書き可能性判定手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
命令をフェッチするための命令フェッチポートを１つ以上備え、該命令フェッチポートからフェッチされた命令の上書き可能性を検出する情報処理装置において、
１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続するすべての命令列の長さを、１回毎のフェッチにおいてフェッチされる命令列のそれぞれの長さを加算することによりカウントする命令フェッチカウンタ手段と、
該すべての命令列内の特定位置に対応する命令アドレスと、完了したストア命令の実行結果が格納されるストア対象アドレスと、該命令フェッチカウンタ手段の出力値とを用いて、該ストア対象アドレスの範囲の少なくとも一部が前記すべての命令列内における命令のアドレスと重なり、該命令列の少なくとも一部が書き換えられる命令上書きの可能性を検出する命令上書き可能性判定手段と、
を備えることを特徴とする情報処理装置。
【請求項３】
前記命令上書き可能性判定手段が、更に前記ストア対象アドレスに格納される実行結果としてのストアデータのデータ長を用いて、前記命令上書き可能性を検出することを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
命令をフェッチするための命令フェッチポートを１つ以上備え、該命令フェッチポートからフェッチされた命令上書き可能性を検出する情報処理装置において、
１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続するすべての命令列の長さを、１回のフェッチでフェッチされる命令列が固定長であるときには該フェッチの回数をカウントすることにより検出し、又１回のフェッチでフェッチされる命令列が固定長でないときには１回毎のフェッチにおいてフェッチされる命令列のそれぞれの長さを加算することにより検出する命令列長検出手段と、
該すべての命令列内の特定位置に命令のアドレスと、完了したストア命令の実行結果が格納されるストア対象アドレスとを検出するアドレス検出手段と、
該命令列長検出手段及び該アドレス検出手段の出力を用いて、該ストア命令の実行結果が格納されることによって前記すべての命令列内における命令の内容が書き換えられる命令上書き可能性を検出する命令上書き可能性判定手段と、
を備えることを特徴とする情報処理装置。
【請求項５】
前記命令上書き可能性判定手段が、更に前記ストア対象アドレスに格納されるストア命令実行結果としてのストアデータのデータ長を用いて前記命令上書き可能性を検出することを特徴とする請求項４記載の情報処理装置。
【請求項６】
命令をフェッチするための命令フェッチポートを１つ以上備え、該命令フェッチポートからフェッチされた命令上書き可能性を検出する情報処理装置において、
１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続するすべての命令列の長さを検出する命令列長検出手段と、
該すべての命令列内の特定位置に対応する命令のアドレスと、完了したストア命令の実行結果が格納されるストア対象アドレスとを検出するアドレス検出手段と、
該命令列長検出手段及び該アドレス検出手段の出力を用いて、該ストア命令の実行結果が格納されることによって前記すべての命令列内における命令の内容が書き換えられる命令上書き可能性を検出する命令上書き可能性判定手段と、
該命令上書き可能性判定手段が命令上書きの可能性があると判定したときには、該判定の時点から前記ストア命令の完了時点まで、前記すべての命令列内における命令の実行から完了までを一命令のみずつ行う命令実行完了制御手段と、
を備えることを特徴とする情報処理装置。
【請求項７】
命令をフェッチするための命令フェッチポートを１つ以上備え、該命令フェッチポートからフェッチされた命令の上書き可能性を検出する情報処理装置において、
１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続するすべての命令列の長さを検出する命令列長検出手段と、
該すべての命令列内の特定位置に対応する命令のアドレスと、完了したストア命令の実行結果が格納されるストア対象アドレスと、該命令フェッチカウンタ手段の出力値とを用いて、該ストア対象アドレスの範囲の少なくとも一部が前記すべての命令列内における命令のアドレスと重なり、該命令列の少なくとも一部が書き換えられる命令上書きの可能性の検出を、上位ビット側に対する減算を独立に行う上位側減算回路及び下位ビット側に対する減算を独立に行う下位側減算回路とをそれぞれ備え、上位側減算回路の出力が０、−１、又は−２であるときには、下位側減算回路の出力するキャリー出力及び減算結果の符合に応じて、減算結果の絶対値が小さいことを表す信号と共に前記下位側減算回路の出力を減算結果として出力する減算回路により行う命令上書き可能性判定手段と、
を備えることを特徴とする情報処理装置。
【請求項８】
命令をフェッチするための命令フェッチポートを１つ以上備え、該命令フェッチポートからフェッチされた命令上書き可能性を検出する情報処理装置において、
１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続するすべての命令列の長さを検出する命令列長検出手段と、
該すべての命令列内の特定位置に対応する命令のアドレスと、完了したストア命令の実行結果が格納されるストア対象アドレスとを検出するアドレス検出手段と、
該命令列長検出手段及び該アドレス検出手段の出力を用いて、該ストア命令の実行結果が格納されることによって前記すべての命令列内における命令の内容が書き換えられる命令上書き可能性の検出を、上位ビット側に対する減算を独立に行う上位側減算回路及び下位ビット側に対する減算を独立に行う下位側減算回路とをそれぞれ備え、上位側減算回路の出力が０、−１又は−２であるときには、下位側減算回路の出力するキャリー出力及び減算結果の符合に応じて、減算結果の絶対値が小さいことを表す信号と共に前記下位側減算回路の出力を減算結果として出力する減算回路により行う命令上書き可能性判定手段と、
を備えることを特徴とする情報処理装置。
【請求項９】
命令をフェッチするための命令フェッチポートを１つ以上備え、該命令フェッチポートからフェッチされた命令の上書き可能性を検出する情報処理装置において、
１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続するすべての命令列の長さをカウントする命令フェッチカウンタ手段と、
該すべての命令列内の特定位置に対応する命令のアドレスと、完了したストア命令の実行結果が格納されるストア対象アドレスと、該命令フェッチカウンタ手段の出力値とを用いて、該ストア対象アドレスの範囲の少なくとも一部が前記すべての命令列内における命令のアドレスと重なり、該命令列の少なくとも一部が書き換えられる命令上書きの可能性の検出を、演算対象となる２つのアドレスの加減算を行う演算回路であって、下位ビット側における演算の結果キャリー出力がある場合には、絶対値の大きい側のアドレスの上位ビットに１だけ加算又は減算を行うことにより上位ビット側の演算結果とし、該キャリー出力がない場合には、絶対値の大きい側のアドレスの上位ビットをそのまま上位ビット側の加算又は減算結果として出力を行う演算回路により行う命令上書き可能性判定手段と、
を備えることを特徴とする情報処理装置。
【請求項１０】
命令をフェッチするための命令フェッチポートを１つ以上備え、該命令フェッチポートからフェッチされた命令上書き可能性を検出する情報処理装置において、
１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続するすべての命令列の長さを検出する命令列長検出手段と、
該すべての命令列内の特定位置に対応する命令のアドレスと、完了したストア命令の実行結果が格納されるストア対象アドレスとを検出するアドレス検出手段と、
該命令列長検出手段及び該アドレス検出手段の出力を用いて、該ストア命令の実行結果が格納されることによって前記すべての命令列内の命令の内容が書き換えられる命令上書き可能性の検出を、演算対象となる２つのアドレスの加減算を行う演算回路であって、下位ビット側における演算の結果キャリー出力がある場合には、絶対値の大きい側のアドレスの上位ビットに１だけ加算又は減算を行うことにより上位ビット側の演算結果とし、該キャリー出力がない場合には、絶対値の大きい側のアドレスの上位ビットをそのまま上位ビット側の加算又は減算結果として出力を行う演算回路により行う命令上書き可能性判定手段と、
を備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はパイプライン処理方式を採用した情報処理装置に係り、更に詳しくは主記憶装置に対して命令実行結果を書き込む処理を含む命令、例えばストア命令によって、その後続命令の内容が書き換えられる命令の上書きの可能性を検出する情報処理装置に関する。
【０００２】
【従来の技術と発明が解決しようとする課題】
パイプライン処理方式、スーパスカラ処理方式、あるいはアウトオブオーダ処理方式などを採用した情報処理装置においては、１つの命令の実行の終了を待たずに、後続の命令列が次々と（プリ）フェッチされてパイプラインに投入され、次々と命令の実行が開始されることによって、性能の向上が図られている。
【０００３】
しかしながら、先行して実行されている命令であって、その実行結果が主記憶装置に書き込まれる場合に、その書き込まれる内容がすでにプリフェッチされて例えば命令バッファに格納されてしまっている命令の内容を書き換えるものである場合には、当然書き換えられる前の命令を実行すべきものではなく、書き換えられた後の命令を実行する必要がある。このようにすでにフェッチされている命令の内容が先行のストア命令の完了によって書き換えられる可能性は常に存在する。そのため、この命令上書きの可能性を考慮して命令実行の制御を行う必要がある。
【０００４】
この命令内容書き換え可能性の判断は、その内容書き換えを結果的に実行するストア命令の実行完了までに行われる必要がある。そうでない場合には、特にそのストア命令がその直後にある命令を書き換えるような場合に、書き換えられる前の誤った命令が実行されることになる可能性が高い。従って、この命令上書きの可能性を素早く判断するための方法として、簡単な上書き判定回路を用いて判定時間を短くするか、または主記憶装置に命令実行結果を書き込むストア命令が存在する時には命令パイプラインの流れを制限することにより、上書き可能性の判定時間を確保するか、どちらかの方法を取る必要があった。
【０００５】
従来においてはそのようなストア命令が存在する場合には、そのストア命令の実行結果が確定するまで命令フェッチ動作を制限して、命令パイプライン上に存在する命令列の長さが一定以下になるように制御して判定回路を簡易化し、上書き可能性を判定する時間を短くするような方法が取られていた。しかしながら、ストア命令はしばしば用いられているため、命令列の中にストア命令が現われるたびに命令パイプラインが一旦停止することになり、処理性能が著しく落ちるという問題点があった。
【０００６】
本発明の課題は、上述の問題点に鑑み、命令実行に先立ってフェッチされる命令の格納用の命令バッファにすでに格納されている命令列、および既に実行中または実行完了した命令のうちで判定対象となる命令列の長さを正確に検出し、１つの命令ポートからフェッチされた命令の内容が書き換えられる命令上書き可能性を正確に判定することによって、情報処理装置の処理性能を向上させることである。
【０００７】
【課題を解決するための手段】
図１は本発明の原理構成ブロック図である。同図は命令をフェッチするための命令フェッチポートを１つ以上備え、その命令フェッチポートからフェッチされた命令の上書き可能性を検出する情報処理装置の原理構成ブロック図である。
【０００８】
図１において、命令長検出手段２は例えば命令フェッチカウンタであって、１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続する全ての命令列の長さを検出するものであり、本発明の１つの実施形態において１回のフェッチでフェッチされる命令列長が一定である時にはフェッチの回数をカウントして命令列の長さを検出し、また異なる実施形態においては１回毎のフェッチでフェッチされる命令列のそれぞれの長さを加算して、命令列の長さを検出することができる。
【０００９】
アドレス検出手段３は長さが検出された命令列内の特定位置に対応する命令のアドレス、例えば最後にフェッチされて命令バッファに格納されている命令、またはその次の命令のアドレスＩＡＲと、完了したストア命令の実行結果が格納されるストア対象アドレスＯＡＲとを検出するものである。
【００１０】
命令上書き可能性判定手段４は命令列長検出手段２、アドレス検出手段３の出力を用いて、ストア命令の実行結果が主記憶装置に格納されることによって、命令バッファにすでに格納されている命令やすでに実行開始されている命令等の内容が書き換えられてしまう命令上書き可能性を検出するものである。
【００１１】
本発明の実施形態においては、命令上書き可能性判定手段４は前述のストア対象アドレスに格納されるストア命令の実行結果としてのストアデータのデータ長を更に用いて、命令上書き可能性を検出することもできる。
【００１２】
また本発明の実施形態においては、命令上書き可能性判定手段４が命令上書きの可能性があると判定した時、その判定の時点からストア命令の完了時点まで、命令の実行完了を一命令のみずつ行わせる命令実行完了制御手段を情報処理装置が備えることもできる。
【００１３】
このような命令上書きの判定と、その後の制御手段を持つことによって、従来のように、ストア命令が現われるたびに命令フェッチ動作を制限するようなことは不必要となり、特に実際にはストア命令による命令の上書きが起こらないような多くの命令列においては格段の処理性能向上が期待できる。また回路規模についても、命令のステージ数や命令バッファの大きさには無関係に、命令フェッチポートの数にのみ依存する制御回路を設けるだけで済み、回路構造も簡単になる。
【００１４】
本発明においては、例えば後述する判定用不等式の判定を基本的に多入力加算器を用いて実行することにより、原理的に命令上書きの判定のミスを防ぐことができる。そのような情報処理装置においては、１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続する全ての命令列の長さをカウントする命令フェッチカウンタ手段、例えば命令フェッチカウンタと、その全ての命令列内の特定位置に対応する命令のアドレスと、完了したストア命令の実行結果が格納されるストア対象アドレスと、命令フェッチカウンタの出力値とを用いて、ストア対象アドレスの範囲の少なくとも一部が、前述の全ての命令列内の命令のアドレスと重なり、その命令列の少なくとも一部が書き換えられる命令上書きの可能性を検出する命令上書き可能性判定手段、例えば多入力加算器とが備えられる。
【００１５】
この命令上書き可能性判定手段、例えば多入力加算器は、更にストア対象アドレスに格納されるストア命令の実行結果としてのストアデータのデータ長を用いて、命令上書き可能性を検出することもできる。
【００１６】
このように多入力加算器を用いれば原理的に判定ミスを防ぐことが可能となるが、特にアウトオブオーダ方式を採用する場合には、問題となるストア命令が非常に早く完了する場合も想定されるため、多入力加算器を用いて正確な計算を行う時間が確保できないことも予想される。このような場合には、信号の遅延を抑制するために、ある程度簡単な回路を用いる必要がある。そこで本発明の実施形態においては、多入力加算器の代わりに２入力の加算器や、セレクタ回路、および簡易な演算回路を組み合わせて使用することにより、判定の正確さを保ちつつ、高速な演算を行うことができる。
【００１７】
本発明の実施の形態においては、命令上書き可能性判定手段が減算結果の絶対値が小さい時にのみ正確な演算結果を出力する減算回路を備えることもできる。この減算回路は、上位ビット側と下位ビット側とでそれぞれ独立に減算を行う上位側減算回路と下位側減算回路とを備え、上位側減算回路の出力が０，−１、または−２である時、下位側減算回路の出力するキャリー出力、および減算結果の符号に応じて、減算結果の絶対値が小さいことを示す信号と共に下位側減算回路の出力を減算結果として出力するものである。
【００１８】
このような減算回路を用いる理由は信号の遅延を抑え、規定の時間内に命令上書きの判定を行うためである。すなわち命令の上書きが行われる可能性が高い場合は、ストア対象アドレスと前述の特定位置に対応する命令のアドレスとの差の絶対値が小さい場合であり、その場合には正確な計算結果が必要になるが、その差の絶対値が大きい場合には上書きされる可能性は存在せず、その差が大きくなるということだけが判断できれば上書き可能性が存在しないということが判定できるという事実を利用したものである。その事実はフェッチされる命令列の長さも、ストア対象のデータのデータ長も、値が小さいことに起因している。
【００１９】
また本発明の実施の形態においては、命令上書き可能性判定手段が、演算対象となる２つの数に桁違いの差がある時に加算または減算を行う演算回路を備えることもできる。この演算回路は、下位ビット側では絶対値の小さい数のデータ幅以上の加算、または減算を行って演算結果を出力し、上位ビット側では下位ビット側での演算の結果キャリー出力がある時には絶対値の大きい数の上位ビットを１だけインクリメント、またはデクリメントして上位側の演算結果とし、キャリー出力がない時は絶対値の大きい数の上位ビットをそのまま演算結果として出力するものである。
【００２０】
以上説明したように本発明によれば、ストア命令による実行結果が格納されるストア対象アドレスが判明した時点を起点として、先行してフェッチ、あるいは実行されている後続命令の上書きの可能性を高速に判断することが可能となり、ストア命令の存在のために命令パイプラインの流れを制限する必要がなくなる。
【００２１】
【発明の実施の形態】
図２は本発明の命令上書き可能性を検出する情報処理装置の全体構成ブロック図である。この情報処理装置はスーパスカラ方式、およびアウトオブオーダ処理方式を採用しているものとして、まず全体の動作を説明する。
【００２２】
命令フェッチ部３１においては、セレクタ１０によって選択され、命令アドレスレジスタ１１に格納された内容を用いて、命令アドレス生成回路１２によって命令アドレスが生成され、キャッシュ１３からフェッチされる命令の内容が読み出されて、２つの命令バッファ１４ａまたは１４ｂのいずれかに格納される。このような動作は命令フェッチのパイプライン、すなわち命令アドレス生成のＩＡサイクル、キャッシュ１３においてアドレス変換を行うＩＴサイクル、フェッチされた命令を命令バッファにセットするＩＢサイクル、フェッチされた命令が正しいことを保証するＩＲサイクルの４ステージ構成のパイプラインで実行される。
【００２３】
命令バッファ１４ａ，１４ｂのいずれかから出力された命令は、セレクタ１５を介して命令デコーダ１６によって解読され、その命令がストア命令である場合にはストア命令実行処理部１９に与えられ、他の種類の命令である場合にはその他の命令実行ユニットに与えられる。ストア命令の場合には、ストア命令実行処理部１９からの指示に応じて、オペランドアドレス生成回路１７によってストア命令の実行結果が格納されるべきオペランドアドレスが計算され、キャッシュ１８に与えられる。またストア命令実行処理部１９の処理が完了すると、その後命令実行完了処理部２０による処理が実行される。
【００２４】
命令実行パイプラインは命令をデコードするＤサイクル、オペランドアドレスを計算するＡサイクル、例えばストア命令実行処理部１９などの命令実行ユニットにおいて命令を実行するＸサイクル、レジスタやメモリの更新を行うＵサイクル、命令実行結果の書き込みなどの実行完了処理を行うＷサイクルなどで構成されている。命令フェッチ部、命令デコーダ、オペランドアドレス生成回路、命令実行ユニット、および実行完了処理部はそれぞれ連携して動作を行うが、基本的にアウトオブオーダ方式が採用されているため、命令フェッチの順序に無関係に、処理可能と判断された命令から次々と実行される。
【００２５】
命令フェッチ部３１には２つの系統の命令フェッチポートが設けられており、それぞれの命令フェッチポートＡ，Ｂは、１回の命令のフェッチで例えば１６バイトの命令列を読み込み、４８バイト（３回分）の命令バッファ１４ａ、または１４ｂにその命令列が格納される。１回の命令フェッチでフェッチされる命令長が１６バイト一定とすれば、命令フェッチ要求が出された時点で、その要求を出した命令フェッチポートに対応する命令フェッチカウンタ２５、または２６の値がインクリメントされる。またＩＴサイクルでの命令アドレスが、命令フェッチポートＡ，Ｂにそれぞれ対応する命令アドレスレジスタ２３、または２４に格納される。
【００２６】
命令上書きの可能性を判定するための判定回路部３２の内部で主要な役割を果たすものが、ストア命令による後続命令の上書き可能性判定回路２７，２８である。これらの判定回路２７、または２８は、２つの命令フェッチポートＡ，Ｂのそれぞれに対応して上書き可能性があることを示す信号を、オアゲート２９を介して命令実行完了処理部２０に出力する。上書き可能性の判定のために、それぞれの命令フェッチポートに対応する命令アドレスレジスタ２３，２４、命令フェッチカウンタ２５，２６の格納内容、およびストア命令の命令実行結果が格納されるオペランドアドレス、すなわちオペランドアドレス生成回路１７の出力が格納されるオペランドアドレスレジスタ３０の格納内容が用いられる。
【００２７】
命令制御の上では、２つの命令フェッチポートＡ，Ｂのうちの１つがカレントポートであり、カレントポート側の命令バッファ１４ａ、または１４ｂから順次命令がデコードされ、命令実行パイプラインに流される。カレントポートでないもう一つの命令フェッチポートは、分岐命令の分岐の有無を予測する分岐予測機構を用いて分岐予測先の命令列を読み込むためのものであり、その命令フェッチポートの動作は対応する命令バッファ１４ａ、または１４ｂが一杯になった時点で一時中断され、分岐予測が成立した場合には、そのポートがカレントポートに切り替わって命令実行が続けられ、命令フェッチ動作が再開される。
【００２８】
この場合、それまでカレントポートであった側の命令フェッチポートは使用されなくなり、そのポートは開放されると共に、そのポートに対応する命令フェッチカウンタ２５、または２６がリセットされる。また分岐予測の失敗や割り込み処理の発生など様々な理由で再命令フェッチ、すなわち命令処理のリトライが行われる場合には、全ての命令フェッチポートが開放されると共に、全ての命令フェッチカウンタ２５，２６がリセットされる。
【００２９】
図２の情報処理装置の動作について、信号の流れを中心にして更に説明する。
（１）は分岐予測が成立した場合、または再命令フェッチを行う場合の命令アドレスであり、セレクタ１０に選択制御信号として分岐予測成立、あるいは再命令フェッチなどを指示する信号（８）が与えられた場合に、信号（１）が選択される。
【００３０】
次に割り込み処理制御部２１から出力されるプロセスステート信号（７）がオンになった時点で、命令アドレスレジスタ２２の内容がセレクタ１０によって選択される。このプロセスステート信号は割り込みが起きていない通常の実行状態であることを示す信号であり、上書き可能性のあるストア命令が実行完了された時点でこのプロセスステート信号を一旦オフとし、その後再びオンとすることによって、命令実行完了処理部２０から出力される、次に実行完了すべき命令の命令アドレスが格納された命令アドレスレジスタ２２の内容を用いて命令フェッチを行うことによって、上書きされる可能性のある後続命令が再度フェッチし直して実行されることになり、正しい命令を実行することが可能となる。
【００３１】
更にこれらの選択制御信号（７），（８）が与えられていない時には、セレクタ１０は命令アドレス生成回路１２の出力する、フェッチされる命令のアドレス（２）を選択し、それを命令アドレスレジスタ１１に与えることによって、次の命令のアドレスが命令アドレス生成回路１２によって生成されることになる。
【００３２】
判定回路部３２に対しては、外部から命令フェッチポートＡ，Ｂに対するクリア信号（４），（５）がそれぞれ命令フェッチカウンタ２５，２６に与えられる。また命令の上書きの可能性がある場合には、オアゲート２９から後続命令の上書き可能性を示す信号（１４）が命令実行完了処理部２０に出力される。
【００３３】
ストア命令実行処理部１９からはキャッシュ１８に対してストアデータ（１２）が与えられると共に、判定回路部３２の内部の上書き可能性の判定回路２７，２８に対してストア命令の実行結果としてのストアされるデータの長さ（１３）が与えられ、更に命令実行完了処理部２０に対して命令完了報告信号（１０）が出力される。なお、ここでは例えばストア命令実行処理部１９内の図示しないレジスタに格納されている実行結果を（キャッシュ）メモリに書き込むものとして実施形態を説明するが、メモリからメモリに書込みを行う場合にも本発明を適用できることは当然である。
【００３４】
命令実行完了処理部２０に対しては、キャッシュ１８から主記憶部からのストアデータ受領信号（１５）が与えられ、命令実行完了処理部２０から命令アドレスレジスタ２２に対しては前述のように次に実行完了すべき命令の命令アドレス（１１）が与えられ、割り込み処理制御部２１に対しては命令の上書き可能性があると判定された場合に後続の命令の中止、破棄を指示する信号（３）が出力され、また判定回路部３２の内部の命令フェッチカウンタ２５，２６に対して、前述のようにそれぞれの命令フェッチポートに対応するクリア信号（４），（５）が出力される。
【００３５】
割り込み処理制御部２１からは、命令実行完了処理部２０からの後続命令の中止、破棄を指示する信号（３）の入力の時点で、ＣＰＵ全体に命令実行の中止を指示する（後述するリストア＿ステート信号と同じ）割り込み発生信号（９）が出力されると共に、後続命令の中止、破棄が行われた後に、前述のプロセスステート信号（７）がセレクタ１０に対して選択制御信号として出力される。
【００３６】
図３は本発明による命令上書き可能性検出方法の説明図である。同図において図２の命令バッファには例えば５回分のフェッチされた命令列が格納されているものとし、最も右側、すなわち最初にフェッチされた命令列がデコードされて命令処理に用いられるものとする。そして例えば最後にフェッチされた１回分（Ｆ）の命令のアドレスが、前述のＩＴサイクルにおいて２つの命令アドレスレジスタのいずれかに与えられるＩＡＲを示すものとする。
【００３７】
図３においてストア対象アドレスＯＡＲ、すなわち前述のストア命令の実行結果が格納されるオペランドアドレスがどの位置にあり、ストア対象範囲Ｓ、すなわちストアされるデータのデータ長がどの位であるかによって、ストア対象範囲（のデータ）Ｓがｎ回分フェッチされた命令列を書き換える命令上書きについては、次の不等式が成立する時にその可能性があるものと判定される。
【００３８】
−Ｆ＜ＩＡＲ−ＯＡＲ＜Ｆ×（ｎ−１）＋Ｓ      （１）
ここで右側の不等式はＩＡＲ−ＯＡＲが正である場合に対応し、ＯＡＲが図３の右側または中央に示されるような位置にあれば命令上書き可能性があると判定される。左側の不等式はＩＡＲ−ＯＡＲが負の場合に対応し、ＯＡＲが図３の左側にあるような場合に上書き可能性があると判定される。
【００３９】
図３では５回分フェッチされた命令列のうち最初にフェッチされた１回分の命令列がデコードされて命令処理に用いられるものとしたが、これは本発明の実施形態としてはむしろ特殊な場合であり、デコードされて命令処理に用いられる命令列は、例えば右から３番目の、３回目にフェッチされた命令列であっても全く差し支えない。
【００４０】
図３で説明した場合は前述のように５回分のフェッチされた命令が全て図２の命令バッファ１４ａ、または１４ｂに格納されている場合であり、命令上書きの可能性の判定対象となる命令列は全て命令バッファに格納されていることになるが、例えば３回目にフェッチされた命令列がデコードされて命令処理に用いられる場合は、その前の２回分のフェッチされた命令列に対する命令実行はすでに開始されており、一部の命令実行は完了している場合もあり得ることになる。
【００４１】
すなわち本発明の実施形態においては、例えば分岐命令で分岐が成立した場合を起点として、１つの命令フェッチポートでフェッチされ、最後にフェッチされた命令を含み、その命令に連続する全ての命令列が命令上書きの判定対象となる。そこで判定対象となる命令列の命令は、一般に命令バッファに格納されている命令だけでなく、すでに命令の実行が開始され、または命令実行が完了した命令をも含むことになる。
【００４２】
この後続命令の上書き可能性の判定対象となる命令列の長さは、前述のように命令フェッチカウンタによってカウントされるが、そのカウントの起点は例えば分岐が成立した分岐命令によって命令シーケンスが代わる点、すなわち前述のようにフェッチポートの切り替えが行われる点であり、分岐命令による分岐先の命令が起点とされてカウントが行われる場合と、例えば分岐予測に失敗した時などに再命令フェッチが行われ、パイプラインがクリアされる時点が起点となってカウントが行われる場合とがある。そこで例えば分岐が成立する分岐命令がなかなか出て来ないような場合には、判定対象となる命令列の長さはかなり長くなることもあるが、そのような場合にもその長い連続する命令列全体が命令上書きの判定対象として、上書き可能性の判定が行われる。
【００４３】
命令フェッチポートが切り替わる場合には、分岐成立前の命令列に対する上書き可能性の判定は以前のカレントポート側で行われ、また再命令フェッチが行われる場合にそれより以前の命令に対する処理は完了しており、判定対象として考える必要はなく、命令フェッチカウンタのクリアが行われた以後のストア命令の影響が及ぶ範囲は判定対象として全てカバーされることになる。
【００４４】
後述するように、命令フェッチカウンタのクリアを含むフェッチポートの解放は次の２つの条件のいずれかが成立した時に実行される。第１の条件は、分岐予測が成立したことが確認され、カレントフェッチポートが分岐予測先の側に切り替えられ、それまでカレントポートであった命令フェッチポートのクリアが必要となることである。第２の条件は、例えば分岐予測失敗やその他の原因によって、後続の正しい命令列の処理を命令のフェッチからやり直す再命令フェッチや、割り込みなどに伴い、全ての命令フェッチポートと実行パイプライン全体のクリアが必要になることである。このいずれかの条件が成立した時に、後述する命令フェッチカウンタのクリアなどが行われる。
【００４５】
図４は命令フェッチカウンタの構成例を示すブロック図である。同図において命令フェッチカウンタはインクリメンタ４１と、データフリップフロップ（Ｄ−ＦＦ）４２から構成されている。インクリメンタ４１の片方の入力には、現在のカウンタ値としてのプリフェッチオーダ＿カウンタ＿Ｘ（ＰＦＯ＿ＣＴＲ＿Ｘ，ｎビット）が入力される。ここでＸには命令フェッチポートに対応してＡ、またはＢのいずれかが用いられる。インクリメンタ４１のもう一方の入力には、対応するポートＡ、またはＢへのフェッチリクエスト要求（ＦＣＨ＿リクエスト＿ポート＿Ｘ）が入力され、フェッチリクエスト要求がある毎に、カウンタ値としてのＰＦＯ＿ＣＴＲ＿Ｘの値はインクリメントされ、Ｄ＿ＦＦ４２に入力される。なお図２の命令バッファ１４ａ、または１４ｂが一杯となり、空きが無い場合にはＦＣＨ＿リクエスト＿ポート信号は出力されず、カウンタ値ＰＦＯ＿ＣＴＲ＿Ｘの値はインクリメントされない。
【００４６】
Ｄ＿ＦＦ４２の出力Ｑがカウンタ値としてのＰＦＯ＿ＣＴＲ＿Ｘであり、クロックの入力時点でＤ入力端子に与えられている値がカウンタ値として出力され、命令フェッチポートを解放する信号クリア＿ポート＿Ｘの入力時点でカウンタ値はリセットされる。
【００４７】
図５は命令フェッチカウンタの異なる構成例のブロック図である。図４の命令フェッチカウンタが、１回でフェッチされる命令列の長さが一定の場合に、フェッチされる回数をカウントするのに対して、図５のカウンタはフェッチされた命令のバイト数を積算するものである。
【００４８】
図５において、分岐命令における分岐先の命令のフェッチや再命令フェッチが行われる場合において、最初の１回のフェッチは必ずしも１６バイトではなく、フェッチされる命令の先頭アドレスの下位３ビット（＝ｘ）に応じて（１６−ｘ）バイトフェッチされ、一般に次々と後続命令のフェッチを行う場合には８バイトアラインされているために、１６バイトずつのフェッチが可能である場合を想定した構成となっている。
【００４９】
減算器４３によって１６からフェッチされる命令の先頭アドレスの下位３ビットが減算され、１６−ｘバイトがフェッチ（ＦＣＨ）＿バイト（４ビット）として求められ、その結果が現在のカウンタ値としてのポート＿Ｘ＿フェッチ＿バイト（ｋビット）と加算器４４によって加算され、その加算結果はＤ−ＦＦ４５のＤ入力端子に与えられる。なお最初のフェッチから１６バイトフェッチされる場合は減算器４３は不要である。
【００５０】
Ｄ−ＦＦ４５では、フェッチ＿リクエスト＿ポート＿Ｘ信号がＬである場合には、Ｄ−ＦＦの動作は抑制（インヒビット）されるが、そうでなければクロック入力時点で入力端子Ｄへの入力信号がカウンタ値（ポート＿Ｘ＿フェッチ＿バイトの値）として出力される。そしてリセット端子にクリア＿ポート＿Ｘ信号が入力された時点で、カウンタ値はリセットされる。
【００５１】
図６は命令フェッチカウンタの出力を利用した命令上書き可能性判定回路の構成例である。この回路は、前述の命令上書きの可能性を示す不等式の右側が成立することを示す信号として、ＩＡＲ＿マイナス（ＭＮ）＿ＯＡＲ＿ビット＿１＿Ｘ＿オール＿０を出力するものである。
【００５２】
図６において、ｎ＋１個のアンドゲート４７1 〜４７n+1 には、ＩＡＲとＯＡＲとの差（Ｎビット）のビット反転信号のそれぞれ上位ビットが与えられる。ｍは１回の命令フェッチでフェッチされる命令列長（命令の数）である。前述のように１回のフェッチで１６バイトの命令列がフェッチされるものとすると、ｍは４となる。従って一番下のアンドゲート４７n+1 の入力としては、ＩＡＲとＯＡＲとの差のビット反転結果のうちで下位４ビットを除く上位Ｎ−ｍ＝Ｎ−４ビットが与えられることになる。
【００５３】
例えば図４において、命令フェッチカウンタのカウント値（プリフェッチオーダ＿カウンタ＿Ｘ）が０の場合、その命令フェッチポートが有効であれば１回の命令フェッチが行われていることになり、（１）式の右側の不等式、すなわちＩＡＲとＯＡＲとの差が正の範囲を判定する場合にはこの差が１６（＝Ｆ×０＋Ｓ）より小さいことを判定できれば、命令上書き可能性があると判定できることになる。但しここではストア命令の実行結果としての主記憶への書き込みデータ長Ｓは最大１６バイトであるとし、それが実際に１６バイトより小さくても１６バイトの書き込みがあるものとして扱う。従って実際の書き込みデータ長が小さい場合には、誤判定の危険性が残っている。
【００５４】
ＩＡＲとＯＡＲとの差が１６より小さいということは、１５以下であり、２進数に直した時には下位ｍ＝４ビット以外は全て０となる。従ってその反転結果において上位Ｎ−４ビットは全て１となり、アンドゲート４７n+1 の出力、従ってアンドゲート４８n+1 およびオアゲート４９の出力はＨとなり、右側の不等式が成立したことを示す信号がオアゲート４９から出力される。
【００５５】
命令フェッチカウンタのカウント値が１、すなわちその最下位ビット（ｎビット目）が１の場合には、２回以下の命令フェッチが行われていることになり、ＩＡＲとＯＡＲとの差が３２（＝Ｆ×１＋Ｓ）より小さいことを判定できればよい。すなわち２進数で下位ｍ＋１＝５ビット以外は０である。このためアンドゲート４７ｎの出力、４８ｎの出力、オアゲート４９の出力が１となり、右側の不等式が成立したことを示す信号が出力される。
【００５６】
命令フェッチカウンタのカウント値が２、または３の時には、４回以下の命令フェッチが行われているため、ＩＡＲとＯＡＲとの差が６４（Ｆ×３＋Ｓ）より小さいことを判定できればよい。すなわち２進数では下位ｍ＋２＝６ビット以外が０であることになり、図示しないアンドゲート４７n-1 、すなわちＩＡＲとＯＡＲとの差の反転結果のうち上位Ｎ−ｍ−２＝Ｎ−６ビットが入力されるアンドゲートの出力が１となり、その出力がこれも図示しない、カウンタ値ｎビットのうちで（ｎ−１）ビットの値が入力されるアンドゲート４８n-1 の出力と、オアゲート４９の出力が１となり、右側の不等式が成立することを示す信号が出力される。
【００５７】
命令フェッチカウンタの値が４以上、７以下の時には、８回以下の命令フェッチが行われていることになり、ＩＡＲとＯＡＲとの差が１２８（＝Ｆ×７＋Ｓ）より小さいことを判定できればよい。すなわち２進数で下位ｍ＋３＝７ビット以外が０であり、図示しない下位７ビット以外のビット反転結果が入力されるアンドゲートの出力が１となり、この出力がカウンタ値の（ｎ−２）ビット目の値（＝１）によって選択されることにより、オアゲート４９から右側の不等式の成立を示す信号が出力される。以下同様である。
【００５８】
図７は図６の判定回路の変形例である。同図においてはＩＡＲとＯＡＲの減算結果をビット反転した値のうち、例えば上位Ｎ−ｎ−４ビットは分離されてアンドゲート５１のみに与えられ、それより下位ビットがアンドゲート４８1 〜４８n+1 とオアゲート４９によって構成されるアンド−オアセレクタの前段に位置するアンドゲートに出力される。
【００５９】
例えばアンドゲート５０n+1 に対しては、ＩＡＲとＯＡＲとの差のビット反転結果のうち、上位からＮ−ｎ−３ビット目からＮ−４ビット目までが入力され、これらの値が全て１であれば、アンドゲート４８n+1 、オアゲート４９の出力が１となり、このとき更に上位のビットが全て１であってアンドゲート５１の出力が１となればアンドゲート５２の出力、すなわち右側の不等式の成立を示す信号がアンドゲート５２から出力される。
【００６０】
同様にアンドゲート５０ｎとアンドゲート５１とによって、実質的に図６のアンドゲート４７ｎと同様の動作が行われ、アンドゲート５２から右側の不等式の成立を示す信号が出力される。一般にゲートへの入力数に比例して遅延が増大すること、および（ＩＡＲ−ＯＡＲ）の演算においても上位ビットの計算が遅れることから、図７の構成をとることによって図６の回路に比較して信号遅延を抑えることができる。
【００６１】
図８は図６、または図７の判定回路の出力を利用して前述の不等式全体の成立を示すストアインストラクションストリーム（ＳＴＩＳ）インレンジ信号を出力する回路の構成図である。
【００６２】
図８において図６、または図７の回路の出力、すなわち右側の不等式の成立を示す信号がオアゲート５４の一方の入力に入力される。オアゲート５４へのもう一方の入力はアンドゲート５３の出力である。アンドゲート５３に対してはＩＡＲとＯＡＲとの差そのものの、上位（Ｎ−４）ビットの値が与えられる。アンドゲート５３は前述の不等式のうち左側の不等式の成立を判定するものであり、ＩＡＲとＯＡＲとの差が−Ｆ、すなわち−１６より大きいこと、言いかえるとＩＡＲとＯＡＲとの差が負であり、しかもその絶対値が１５以下であることを判定するために、下位４ビットを除く全ての上位ビットの値が１であることを検出するものである。
【００６３】
オアゲート５４の出力が１、すなわち前述の不等式のうち左側の不等式、または右側の不等式のいずれかが成立し、その出力がフェッチポートが有効であることを示すフェッチ＿ポート＿バリッド信号と共にアンドゲート５５に入力されることにより、アンドゲート５５から命令上書き可能性を示すストアインストラクションストリーム（ＳＴＩＳ）＿イン＿レンジ信号が出力される。
【００６４】
図９は、２つの命令フェッチポートＡ，Ｂに対応するＳＴＩＳ＿イン＿レンジ信号から、全体として命令上書きの可能性があることを示す信号（ＳＴＩＳ）を出力する全体判定回路であり、オアゲート５６はポートＡ、またはＢに対応して命令上書き可能性を示す信号が入力された時点で、全体としての命令上書き可能性を示す信号ＳＴＩＳを出力する。
【００６５】
図１０は図６で示した右側の不等式の成立を示す判定回路の更に異なる変形例の構成図である。前述のように、図６ではストア命令の実行結果として主記憶装置に書き込まれるデータのデータ長は１６バイト一定であるものとして扱ったが、図１０はこれが１６バイト以下、あるいは２５６バイトのいずれかである場合の判定回路の構成例である。１６バイト以下の場合には、図６におけると同様に命令フェッチカウンタの出力ｎビットがセレクタ５９によってそのまま用いられ、図６におけると全く同様の動作が行われる。
【００６６】
これに対して２５６バイトのストアが行われる場合には、２５６バイト＿ストア＿バリッド信号がＨとなり、加算器５８の出力がセレクタ５９によって選択されて、アンド−オアセレクタの選択制御に使用される。加算回路５８は命令フェッチカウンタの値ｎビットに１５を加算するものである。主記憶装置に書き込まれるデータのデータ長がＳ＝２５６バイトであり、１回のフェッチバイト数がＦ＝１６バイトの場合には前述の（１）式は
−Ｆ＜ＩＡＲ−ＯＡＲ＜１６×（ｎ＋１５）
となり、命令フェッチカウンタの値に１５を加算したものをアンド−オアセレクタの選択制御信号として用いることができる。ストアされるデータのデータ長が２５６バイト以外の値を取る時にも、同様にして命令フェッチカウンタの値に対応する値を加算することによって、命令上書き可能性を判定することが可能となる。
【００６７】
次にストア命令による後続命令列の上書き可能性が検出された場合の、後続命令に対する制御について説明する。図１１は、図９のオアゲート５６から後続命令の上書き可能性を示すＳＴＩＳ信号が出力されてから、該当するストア命令が完了したことを示すコミット＿ストア信号（図２の命令完了報告信号（１０）と同じ）が入力されるまでの間、複数の命令を同時に完了させないようにする、すなわち命令を１つずつしか完了させないようにすると共に、コミット＿ストア信号が入力した時点で、実行が開始されているにもかかわらず、完了していない命令に関する処理を中断させ、すでに命令バッファにフェッチされている命令列を破棄するための、後続命令制御回路の構成ブロック図である。この回路は図２の命令実行完了処理部２０内に設けられる。
【００６８】
図１１においてセットリセットフリップフロップ６３は、ＳＴＩＳ信号の入力時点でセットされ、その出力Ｑとして複数命令を同時に完了させないようにするために使用される信号、ＳＴＩＳ＿再命令フェッチ（ＲＥＩＦＣＨ）＿ペンディング信号が出力される。そしてコミット＿ストア信号がリセット端子に入力された時点で出力Ｑがリセットされると共に、アンドゲート６４から、実行完了していない命令の中断処理やすでにフェッチされている命令列を破棄するために使用される信号としての、コミット＿ＳＴＩＳ＿ＲＥＩＦＣＨが出力される。
【００６９】
ここでストア命令による上書き可能性が検出された時点から該当するストア命令が完了するまでの間、命令を１つずつしか完了させないようにする理由について説明する。前述のように、本発明の実施形態においてはスーパスカラ方式が用いられており、例えば３つの命令を同時に完了させることが可能である。しかしながらアウトオブオーダ方式においても、命令の実行開始は実行開始が可能となったものから命令の実行順序に無関係に開始することができるが、命令の完了はインオーダで行われなければならず、命令はその実行順序に従って完了させる必要がある。
【００７０】
このために、例えば待ち合わせ制御のためのリザベーションステーションとしての、コミットスタックエントリ（ＣＳＥ）が使用される。ＣＳＥには命令１つ１つに対応してエントリが設けられ、そのエントリそれぞれに対応して命令の開始と完了が制御される。
【００７１】
このように命令は実行が完了することによって初めて実行されたことになり、実行完了されていない命令は論理的には実行されてないものと等しい。そして後続命令を上書きする可能性のあるストア命令が実行完了するためには、そのストア命令の前の命令列は全て実行完了している必要がある。あるいはそのストア命令と同じサイクルにおいて実行完了する必要がある。
【００７２】
ストア命令のＷサイクルの終了前に後続命令の上書き可能性の判定を終える必要がある。その理由は、ストア命令のＷサイクルと同じタイミングで後続命令も完了してしまう可能性が存在するためである。
【００７３】
問題は、該当するストア命令と同時に後続する命令が１つ、または２つ同時に完了する場合であり、もしもそのストア命令によって同時に完了する命令が上書きされる可能性がある場合には、同時に完了する命令は誤ったまま実行完了してしまう可能性があることになる。このため本発明の実施形態においては、後続命令を上書きする可能性のあるストア命令が検出された時には、そのストア命令が完了するまでは１つずつしか命令を完了させないことによって、そのストア命令の後続命令が１つでもそのストア命令と同時に完了することを避けるための制御が行われる。
【００７４】
スーパスカラ方式では、本来完了可能な命令はシステムにおいて可能な限り最大限多数完了させる仕組みが用いられている。従って完了可能な命令が複数あるにもかかわらず、いくつかを選択的に完了させる仕組みは一般的には用いられていない。そこで図１１では複数の命令を同時に完了させるのでなく、命令は１つずつしか完了させないようにすることによって比較的制御回路を簡単にして、後続命令を書き換える可能性のあるストア命令が完了するまでの制御が行われる。
【００７５】
図１２は図１１と共に命令を１つずつしか完了させないための制御回路の構成図である。この回路も命令実行完了処理部２０内に設けられる。前述のように、本発明の実施形態においては３つの命令を同時に完了させることが可能となっているが、その３つの命令は前述のコミットスタックエントリ（ＣＳＥ）の３つのエントリ、すなわちトップ、セカンド、サードのエントリに対応している。ここでトップのエントリは最も実行順序の古い（最初に完了させるべき）命令に対応し、サードのエントリは最も実行順序の新しい（最後に実行完了させるべき）命令に対応するエントリである。
【００７６】
これらの３つのエントリに対応して、命令を完了させるべきことを示す信号が、ＣＳＥからコンプリート信号として、トップのエントリに対してはバッファ６５に、セカンドおよびサードのエントリに対しては、アンドゲート６６，６７の一方の入力端子に入力される。
【００７７】
バッファ６５、アンドゲート６６，６７からはそれぞれのエントリに対応する命令に関する完了処理、すなわち実行結果のレジスタへの書き込みや、メモリへの書き込み動作などを指示するための、レジスタの管理部やメモリ、キャッシュなどに与えられるコミット信号が出力されると共に、これらの出力はＣＳＥの該当するエントリを無効にして、ＣＳＥに対するポインタ（トップエントリを指し示すポインタ）を、次に実行完了すべき命令に対応するエントリに移動させるために使用される。
【００７８】
図１１のＳＲ−ＦＦ６３の出力、すなわちＳＴＩＳ＿ＲＥＩＦＣＨ＿ペンディング信号は、インバータ６８によって反転されて２つのアンドゲート６６，６７のそれぞれ一方の入力端子に与えられる。従ってＳＲ−ＦＦ６３の出力ＱがＨである間は、アンドゲート６６，６７からはＣＳＥのセカンドエントリ、およびサードエントリに対応するコミット信号が出力されず、対応するエントリに関連する命令の完了動作は実行されず、その命令は完了待ちとなる。
【００７９】
図１３，図１４はストア命令による後続命令の上書き可能性が検出された時点から、そのストア命令の実行が完了するまで、図１１，図１２とやや異なる制御を後続命令に対して行う制御回路の構成図である。これらの回路も命令実行完了処理部２０内の回路である。図１３，図１４においては、上書き可能性が検出された時点からそのストア命令の実行が完了するまでの間は、同時に実行完了するものの中にストア命令がなければ複数の命令を同時に完了させ、あればそのストア命令までを同時に完了させる制御を行うものである。
【００８０】
図１３においてＳＲ−ＦＦ７０は、図１１におけるＦＦ６３と同様にＳＴＩＳ信号の入力時点でセットされ、その出力ＱはＨとなる。そしてオアゲート７２の出力としてのコミット＿ストア信号の入力時点でリセット待ち（次のクロックでリセット）にされると同時に、アンドゲート７１から図１１のアンドゲート６４の出力と同じコミット＿ＳＴＩＳ＿ＲＥＩＦＣＨ信号が出力される。
【００８１】
オアゲート７２に対しては、３つのエントリに対応して実行完了可能な信号がストアポートを使用することを示す信号、すなわち対応する命令がストア命令であることを示す信号が入力される。そして３つのエントリに対応する命令の１つでもストア命令であれば、オアゲート７２からコミット＿ストア信号が出力されることになる。一方バッファ７３に対してはトップエントリに対応するコミット＿ユーズ＿ストアポート（ＳＰ）信号が与えられ、バッファ７３の出力としてはトップエントリに対応する命令のみが実行完了可能であることを示すコミット＿オンリ−信号が出力される。この出力は、図１４で説明するようにトップエントリに対応する命令だけに関して実行完了処理を行わせるために使用される。
【００８２】
これに対してアンドゲート７４の出力は、トップとセカンドの２つのエントリだけに対応して命令を実行完了させるために用いられるコミット＿オンリー信号であり、この出力はトップエントリに対応するコミット＿ユーズ＿ストアポート信号がＬで、インバータ７５の出力がＨとなり、かつセカンドエントリに対応するコミット＿ユーズ＿ストアポート信号がＨの時に、Ｈとなる。すなわちセカンドエントリに対応する命令が該当するストア命令であり、この場合にはトップエントリとセカンドエントリに対応する２つの命令を同時に完了させることができることになる。
【００８３】
これに対して３つのエントリに対応するコミット＿ユーズ＿ストアポート信号のいずれもがＬである場合には、オアゲート７２の出力およびアンドゲート７１の出力はいずれもＬであり、特に後続命令の完了に対する特別の制御が行われることはなく、一般的に３つの命令を同時に完了させることが可能となる。
【００８４】
図１４は図１３の出力を用いて実際に命令の実行完了を制御するための制御回路を示す。バッファ７６、アンドゲート７７，７８は、図１２におけるバッファ６５、アンドゲート６６，６７と同様の動作を行うものである。アンドゲート７７はインバータ７９の出力がＨ、すなわち図１３のバッファ７３の出力がＬであり、トップエントリに対応するコミット＿ユーズ＿ストアポート信号がＬである場合に、セカンドエントリに対応する命令を実際に実行完了させるためのコミット信号を出力する。
【００８５】
またアンドゲート７８は、更にインバータ８０の出力がＨ、すなわち図１３のアンドゲート７４の出力がＬである場合に、サードエントリに対応する命令の実行を実際に完了させるためのコミット信号を出力する。
【００８６】
これによって３つのエントリのうちでトップエントリに対応する命令がストア命令である場合にはそのストア命令が、またセカンドエントリに対応する命令がストア命令であばトップとセカンドの２つのエントリに対応する命令が実行完了となり、またサードエントリに対応する命令がストア命令である場合には通常の場合と同様に３つの命令の実行完了が同時に行われると共に、いずれの場合にも図１３のオアゲート７２の出力としてのコミット＿ストア信号がＨとなる。
【００８７】
図１５，図１６は実行が完了していない後続命令の処理を中断させると共に、すでにフェッチされている後続命令列を破棄するための処理中断および命令破棄制御回路の構成を示す。図１５の回路は図２の割込み処理制御部２１の中に、また図１６の回路は例えば命令フェッチ部３１の内部に設けられる。
【００８８】
図１５において、例えば図１１のアンドゲート６４の出力がオアゲート８２の一方の入力に与えられると、ＳＲ−ＦＦ８３がセットされ、その出力Ｑ、すなわちリストア＿ステート信号（９）がＨとなる。このリストア＿ステート信号は、現在実行が完了した命令よりも後の命令に関する処理を中断させるために、一般の割り込み処理と同様の制御を行うものである。
【００８９】
このリストア＿ステート信号は、図１６の２つのオアゲート８６，８７のそれぞれ一方の入力端子に与えられ、他方の入力端子に与えられるクリア＿ポート＿ノーマル信号がＨである場合と同様に、２つの命令フェッチポートＡ，Ｂに対応するクリア＿ポート信号を出力する。このクリア＿ポート信号は、それぞれの命令フェッチポートに対応して、すでにフェッチされている後続命令を破棄させるものである。
【００９０】
ここで２つのオアゲート８６，８７の一方の入力端子に与えられるクリア＿ポート＿ノーマル信号は、例えば図２に図示されていない分岐命令処理部において分岐予測が成立したことが確認され、それまでフェッチされていた命令が不必要となった場合に出力されるものである。あるいは分岐予測に失敗した場合には、再命令フェッチを行うため、全ての命令フェッチポートに対応してフェッチされていた命令をクリアするために使用される。
【００９１】
またオアゲート８６，８７の出力としてのクリア＿ポート信号は、すでにフェッチされている命令の破棄および命令フェッチカウンタのクリアのみに使われるものであり、ここでは命令フェッチ部に設けられているものとしたが、命令実行完了処理部の内部に設けることも可能である。
【００９２】
図１５において、前述のように図１１のアンドゲート６４の出力がＨとなった時点でＳＲ−ＦＦ８３がセットされるものとしたが、この時点で一般的な割り込み発生信号が出力されていないものとすると、もう１つのＳＲ−ＦＦ８４の反転出力  外１  はＨとなっており、ＳＲ−ＦＦ８３のセット端子とリセット端子に
【００９３】
【外１】
0003739607.tif 000002
【００９４】
は同時にＨが入力されていることになる。ＳＲ−ＦＦ８３はセット端子とリセット端子に同時にＨが入力された場合にはセットが優先されるものであり、その結果リストア＿ステート信号が出力されることになるが、図１１のアンドゲート６４の出力は、ＳＲ−ＦＦ６３がコミット＿ストア信号の入力直後のクロックでリセットされることになるため、短期間だけＨとなり、その期間だけＳＲ−ＦＦ８３からリストア＿ステート信号が出力されることになる。
【００９５】
また図１５において、一般的な割り込み処理として割り込み発生信号がオアゲート８２に入力された場合にも、ＳＲ−ＦＦ８３はセットされ、リストアステート信号が出力されるが、この割り込み発生信号はＳＲ−ＦＦ８４のセットにも使用され、割り込み処理中であることを示すインターラプト（ＲＵＰＴ）＿ラッチ信号が出力される。そしてＳＲ−ＦＦ８４は割り込み処理終了信号の入力時点でリセットされる。
【００９６】
続いて本発明の異なる実施形態についてさらに説明する。以上に述べた実施形態においては、ストア命令による後続命令の上書き可能性を判定する不等式、すなわち（１）式の判定を行うにあたって、この不等式を右側の不等式と左側の不等式、すなわちＩＡＲ−ＯＡＲが正の場合と負の場合とを別々に判定する回路を使用したが、これから述べる実施形態では基本的には１つの不等式の成立を判定するために多入力の加算器を用いるものとする。
【００９７】
まず図３において、ＩＡＲの位置として５回分フェッチされた命令のアドレスの中で最後にフェッチされた命令のアドレスを記憶するのではなく、ＩＡステージにおいてフェッチ要求が出される最新のアドレスとしての、ｎ回分のフェッチ命令の次の命令のアドレスが記憶されるものとする。また、本実施形態においては、各フェッチ要求でフェッチされる命令列の長さは必ずしも一定でなくても良い。本実施形態では、図５のカウンタを用いて、各命令フェッチ要求による命令バイト数を積算することができる。このカウンタによって積算されたフェッチバイト数をＬとすれば、判定用の不等式は次式となる。
【００９８】
０＜ＩＡＲ−ＯＡＲ＜Ｌ＋Ｓ
あるいは、図４のカウンタを用い場合には、判定用の不等式は次式となる。
０＜ＩＡＲ−ＯＡＲ＜（Ｆ×ｎ）＋Ｓ
図３を見ても明らかなように、ＩＡＲがこのような位置として記憶されるとき、上の不等式を次のように変形して、命令上書きの可能性の判定に使用できる。
【００９９】
０＜ＩＡＲ−ＯＡＲ  かつ  ０＜ＯＡＲ−ＩＡＲ＋Ｌ＋Ｓ          （２）
あるいは、
０＜ＩＡＲ−ＯＡＲ  かつ  ０＜ＯＡＲ−ＩＡＲ＋（Ｆ×ｎ）＋Ｓ  （３）
なお。前述のようにＩＡＲがｎ回分フェッチされた命令のアドレスの最後のものであり、またフェッチ毎の命令列の長さが一定でない場合には、フェッチ毎の命令列長の最大値をＭとし、積算されたフェツチバイト数をＬとすれば判定用の不等式は次式となる。
【０１００】
−Ｍ＜ＩＡＲ−ＯＡＲ＜Ｌ＋Ｓ
図１７は（２）あるいは（３）式を評価する上書き可能性判定回路の構成ブロック図である。同図においては、（２）あるいは（３）式の後側の不等式を評価するために４入力加算器９０が使用される。この４入力加算器に対する入力は、ｎ回分フェッチされた命令の次の命令のアドレスのビット反転結果−ＩＡＲ、ストア命令によって命令実行結果としてのデータが格納されるオペランドアドレスＯＡＲ、すでにフェッチされている命令のバイト数（フェッチ＿バイト，Ｆ×ｎ）、およびストア命令の実行結果として格納されるデータのデータ長（ストア＿バイト、Ｓ）である。
【０１０１】
４入力加算器９０の演算結果は、例えば位相が反転されているため（２）式が成立する場合には負となり、その符号はインバータ９１によって反転され、アンドゲート９２の片方の入力端子に入力される。一方アンドゲート９２のもう一方の入力端子には、比較器９３の出力が入力される。この比較器９３は（２）あるいは（３）式の前側の不等式を評価、すなわちＩＡＲとＯＡＲを比較するものであり、ＩＡＲがＯＡＲより大きい時に比較結果としてＨを出力し、その結果アンドゲート９２の出力はＨとなり、アンドゲート９４に入力される。アンドゲート９４にはフェッチポートが有効であるフェッチ＿ポート＿バリッド信号が入力されており、有効である場合にはアンドゲート９４から、図８のアンドゲート５５の出力と同様に、そのフェッチポートに対応して上書き可能性があることを示すＳＴＩＳ＿イン＿レンジ信号が出力される。
【０１０２】
このような実施形態においては、例えば４入力の加算器を用いることによって原理的に誤判定をなくすことができ、命令上書きの可能性を正しく判定することができる。しかしながら、特にアウトオブオーダ方式が採用されている場合には、該当するストア命令が非常に早く完了される場合も想定され、多入力加算器を用いて正確に計算を行う時間が確保できないことも考えられる。
【０１０３】
アウトオブオーダ方式ではストア命令よる書き込み動作は書き込むべきデータがそろった時点で実行できる。そこでアドレス計算用のＡサイクルとストア用のデータがそろったことを確認するＸサイクルとの間が空かず、上書き可能性の判定は最短の場合２クロックで終了しなければならない。最近のクロックサイクル短縮の要求に伴う１クロック内処理の限界を考慮すると演算回路の高速化がさらに必要となる。
【０１０４】
このような場合には、信号遅延を抑えるために、ある程度簡単な回路を使用する必要がある。そこで、多入力加算器の代わりに２入力の加算器や、簡単な演算回路を組み合わせて用いることによって、判定の正確さを保ちつつ、高速な計算を実行することができる。このような簡単な演算回路を使用できる理由としては、例えば前述の（２）または（３）式において命令フェッチカウンタの出力としての、フェッチされている命令列長（Ｌ）もしくは（Ｆ×ｎ）や、ストア命令によって格納されるデータのデータ長（Ｓ）が、最大でも命令アドレスＩＡＲやストア対象アドレスＯＡＲの取り得る範囲、すなわちアドレス空間に比べてかなり小さい（桁数で半分以下）ことがあげられる。
【０１０５】
通常多数ビットの加減算回路では、桁上げ先見回路と桁上げ伝搬回路が併用される。このような桁上げ伝搬回路ではキャリーチェーンが存在し、繰り上がりが生じると上位ビットの計算に時間がかかる。しかしながら図１８に示すように、演算対象となる数値のうち片方が小さい場合には、上位ビットで繰り上げが生じるケースは極めて少なく、図１８(a) に示すように下位ビットの演算の結果として繰り上がり（桁借り）が発生する時のみであり、その時上位ビットは１加算（減算）される。これに対して、(b) に示すように下位ビットの演算の結果としての繰り上がり（桁借り）が発生しない時には、基本的には上位ビットの演算は不必要となる。
【０１０６】
図１９は、このように演算対象としての２つの数に桁違いの差がある場合の加算回路の構成例を示す。ここでデータ１はデータ２に比べて桁違いに大きいものとし、基本的にはデータ１の下位側とデータ２との加算が必要とされるものとする。
【０１０７】
図１９において加算器９６はデータ１の下位側とデータ２とを加算し、その加算結果を出力すると共に、キャリー出力をセレクタ９７に対する選択制御信号として出力する。セレクタ９７は、キャリー出力がない場合にはデータ１の上位信号をそのまま出力し、キャリー出力がある場合にはデータ１の上位側にインクリメンタ９８によって１が加算された結果を出力する。セレクタ９７の出力としての上位側と、加算器９６の出力としての下位側とが合成されて、データ１とデータ２との加算結果が得られる。
【０１０８】
図２０は、図１９におけると同様に、２つの数に桁違いの差がある場合の減算回路の構成例である。同図において減算器１００はデータ１の下位側とデータ２との差を計算し、その結果を出力すると共に、桁借りがある場合にはキャリー出力を選択制御信号としてセレクタ１０１に与える。セレクタ１０１はキャリー出力がない場合にはデータ１の上位側をそのまま出力し、キャリー出力がある場合にはデクリメンタ１０２の出力、すなわちデータ１の上位側から１を減算した結果を出力する。
【０１０９】
図２１は、データ１とデータ２との差が小さい場合に、その差が小さいことと、その差自体を出力する減算回路の構成例である。例えば図３において命令アドレスＩＡＲとストア対象アドレスＯＡＲとの差が正であり、その差が十分に大きい時には、後続の命令が書き換えられる上書き可能性は存在しないことになり、データ１をＩＡＲ、データ２をＯＡＲとする時、命令上書きの可能性の判定が必要となるのはデータ１とデータ２との差が小さい場合に限られ、そのような場合に図２１の減算回路が使用される。
【０１１０】
図２１において、加算器１０４はデータ１の下位側ビットとデータ２の下位側ビットのビット反転結果とを加算して、データ１とデータ２の減算結果の下位側と、その符号、およびキャリー出力を出力する。減算結果の符号はセレクタ１１２に対する選択制御信号として、またキャリー出力はセレクタ１１０および１１１に対する選択制御信号として与えられる。
【０１１１】
データ１の上位側ビットとデータ２の上位側ビットのビット反転結果とが加算器１０５によって加算される。データ１からデータ２を減算した結果、その差が小さいと判定されるのは、１つは結果の上位側ビットが全て０、すなわち０であり、下位側ビットの演算結果としてのキャリーが存在しない場合である。この場合データ１とデータ２の減算結果、すなわち加算器１０５の出力はインバータ１０６によって全て反転され、上位側ビットは全て１となり、アンドゲート１０７の出力は１となる。加算器１０４からのキャリー出力が存在しない場合にはセレクタ１１０によってアンドゲート１０７の出力が選択され、加算器１０４の出力する減算結果の符号が正であることにより、セレクタ１１２によりセレクタ１１０の出力が選択されて、データ１とデータ２の減算結果が小さいことを示す信号ＤＡＴＡ１−ＤＡＴＡ２＿ＳＭＡＬＬがセレクタ１１２から出力される。
【０１１２】
データ１とデータ２との減算結果が正であり、しかもその差が小さいと判定されるもう１つの場合は、上位側ビットの減算結果としての加算機器１０５の出力がオール１、すなわち−１であり、下位側の演算結果としてのキャリー出力が１となる場合である。この場合は上位側ビットのデータ部分は全て０となり、結果としてデータ１とデータ２との差は小さいことになる。この時アンドゲート１０８の出力が１となり、加算器１０４のキャリー出力が存在するため、セレクタ１１０によってアンドゲート１０８の出力が選択され、またセレクタ１１２によって、加算器１０４の出力する符号が正であるためセレクタ１１０の出力が選択されて、セレクタ１１２からデータ１とデータ２との差が小さいことを示す信号が出力される。
【０１１３】
次にデータ１からデータ２を減算した結果が負であり、しかもその絶対値が小さい場合について説明する。その第１の場合は加算器１０５の出力が−１、すなわち上位ビットが全て１であり、下位側からのキャリー出力が存在しない場合である。この場合は前述と同様にアンドゲート１０８の出力が１となり、加算器１０４のキャリー出力が存在しないため、セレクタ１１１へのアンドゲート１０８の出力が選択され、セレクタ１１２に与えられる。セレクタ１１２では、加算器１０４の出力する下位ビット側の演算結果の符号が負であるために、セレクタ１１１の出力が選択され、セレクタ１１２からデータ１とデータ２との差が小さいことを示す信号が出力される。
【０１１４】
第２の場合は、下位側からのキャリー出力が存在し、加算器１０５の出力する上位ビットのうちで最下位のみが０であり、他の全てのビットが１である場合（すなわち−２）に対応する。アンドゲート１０９に対しては、最下位ビットとしてインバータ１０６の出力する最下位ビットの反転値が与えられており、この結果アンドゲート１０９の出力は１となり、加算器１０４の出力するキャリー出力が存在するため、セレクタ１１１によってアンドゲート１０９の出力が選択され、セレクタ１１２に与えられる。セレクタ１１２では、加算器１０４の出力する符号が負であるために、セレクタ１１１からの出力が選択され、セレクタ１１２からデータ１とデータ２との差が小さいことを示す信号が出力される。
【０１１５】
図１７のように４入力加算器を用いる場合に比べて、演算を高速化するために図１９〜図２１で説明したような簡易な演算回路を組み合わせて用いる場合の回路例について、図２２〜図２４を用いて説明する。図２２は図１９，図２０の回路を用いて、図１７における４入力加算器と同様の動作を行う回路の構成例である。同図において図１９の加算回路は、データ１としてのＯＡＲと、データ２としてのストア＿バイト（Ｓ）との加算を行うために用いられ、また図２０の減算回路はデータ１としてのＩＡＲと、データ２としてのフェッチ＿バイト（Ｆ×ｎ）との減算を行うために用いられている。そして減算器１１４によって、図１９の回路の出力としてのＯＡＲ＋Ｓから、図２０の回路の出力としてのＩＡＲ−（Ｆ×ｎ）を減算することによって、図１７における減算器９０と同じ出力を得ることができる。
【０１１６】
図２３は、ＯＡＲとＩＡＲとの差を上位側と下位側とで分けて演算し、上位側では図１９と同様のインクリメンタを使用して、下位側からのキャリー出力を処理する回路の構成例である。このような構成を用いることによって、上位側と下位側との演算を独立して実行することが可能となり、演算のビット数を減少させることによって、結果的に全体としての演算を高速化することができる。
【０１１７】
図２３において４入力加算器１１５は、図１７の加算器９０と同様の演算を行うものである。但しＩＡＲとＯＡＲに対しては下位側ビットだけの演算が行われる。加算器１１６はＯＡＲの上位側ビットと、ＩＡＲの上位側ビットのビット反転結果とを加算するものであり、加算器１１５からのキャリー出力が存在しない場合に加算器１１６の加算結果がセレクタ１１８によって選択され、加算器１１５の出力する下位側ビットの演算結果と合成されて、全体の演算結果として出力される。これに対して加算器１１５からのキャリー出力が存在する場合には、加算器１１６の出力がインクリメンタ１１７によって１だけインクリメントされ、その結果がセレクタ１１８により選択され、加算器１１５の出力する下位側と合成されて出力される。
【０１１８】
図２４は図２１の回路を使用した上書き可能性判定回路の構成例である。同図においては、図６や図７と同様にＩＡＲとＯＡＲとの差が正である場合に、（１）式の右側の不等式の成立を判定するアンドオアセレクタも用いられている。
【０１１９】
図２４において、図２１の回路に対してはＩＡＲがデータ１として、またＯＡＲのインバータ１１９によるビット反転結果がデータ２として与えられる。ＩＡＲとＯＡＲとの差が小さい時には、その差が小さいことを示す信号が２つのアンドゲート１２１、１２２の一方の入力端子に与えられる。この時ＩＡＲとＯＡＲと差の演算結果のうちで下位のｍビットを除き（Ｎ−ｍ−ｎ）ビットから（Ｎ−ｍ）ビットまでがアンドゲート１２０に与えられる。この差が負であり、かつその絶対値が小さい、すなわち例えばｍ＝４であり、下位４ビット以外の値が全て１である場合には、アンドゲート１２０の出力はＨとなり、アンドゲート１２１、オアゲート１２３の出力はＨとなり、アンドゲート１２４に与えられる。この時フェッチポートが有効であることを示すフェッチ＿ポート＿バリッド信号がＨであれば、アンドゲート１２４の出力する、そのポートに対応して命令上書きの可能性があることを示すＳＴＩＳ＿イン＿レンジ信号はＨとなる。
【０１２０】
一方ＩＡＲとＯＡＲとの差の演算結果は、その結果が正である場合に対応してインバータ１２５によってビット反転され、図７の下側の回路と同様の回路、すなわちアンドゲート１２６1 〜１２６n+1 と、それらの出力とプリフェッチカウンタの値が入力されるアンドオアセレクタ、すなわちアンドゲート１２７1 〜１２７n+1 とオアゲート１２８とによって構成されるセレクタに与えられる。ここでＩＡＲとＯＡＲとの差は、その最上位ビットが（Ｎ−ｍ−ｎ）ビットであり、最下位ビットがＮビットであるため、プリフェッチカウンタのカウント値の最上位ビットが入力されるアンドゲート１２７1 に対しては、図７と異なってアンドゲート１２６1 の出力、すなわち（Ｎ−ｍ−ｎ）ビットのビット反転結果が入力される。
【０１２１】
またアンドゲート１２７2 に対しては、プリフェッチカウンタのカウンタ値の最上位から２番目のビットと共にアンドゲート１２６2 の出力、すなわち（Ｎ−ｍ−ｎ）ビットと（Ｎ−ｍ−ｎ＋１）ビットとの反転結果の論理積が与えられる。
【０１２２】
以上において本発明の実施形態について詳細に説明したが、特に図１８〜図２１で説明したような、演算対象となる２つの数に桁違いの差がある場合の加減算はＩＡＲとＯＡＲとの差の計算に用いられるだけでなく、一般的に桁が大きくなるＩＡＲ−ＯＡＲと、桁が小さいＦ×ｎやＳとの間の演算に用いたり、構成方法によっては命令フェッチ側で用いる情報としてのＩＡＲとＦ×ｎとの間、命令実行およびオペランドアクセス側で用いる情報としてのＩＡＲとＳとの間の演算に使用して、その結果を通常の演算器で結びつけるような方法も当然考えられる。
【０１２３】
以上の説明により本発明はさらに以下の特徴を有する。
命令フェッチカウンタ手段が、１回のフェッチでフェッチされる命令列が一定長（Ｆ）である時、該フェッチの回数（ｎ）をカウントして前記命令列の長さ（Ｆ×ｎ）を検出し、命令上書き可能性判定手段が、該Ｆ×ｎ、前記特定位置に対応する命令のアドレス（ＩＡＲ）、前記ストア対象アドレス（ＯＡＲ）、および前記ストアデータのデータ長（Ｓ）を用いて次の不等式
−Ｆ＜ＩＡＲ−ＯＡＲ＜Ｆ×（ｎ−１）＋Ｓ
が成立する時、命令上書きの可能性があると判定する。
【０１２４】
命令上書き可能性判定手段が、特定位置に対応する命令のアドレスとストア対象アドレスとの差を取る減算手段と、該減算手段の出力のビット反転結果の複数のビットの複数の論理積の１つを、前記命令フェッチカウンタ手段の出力の各ビットの値を選択制御信号として、選択する選択手段とを備える。
【０１２５】
命令をフェッチするための命令フェッチポートを１つ以上備える情報処理装置において、１つの命令フェッチポートからフェッチされ、最後にフェッチされた命令を含み、該命令に連続するすべての命令列の長さを、該フェッチの回数をカウントするか、または各回のフェッチでフェッチされたバイト数を積算して検出する命令列長検出手段を備える。
【０１２６】
前記命令列長検出手段が、前記連続する命令列の長さ（Ｌ）を検出し、前記アドレス検出手段が、前記特定位置に対応する命令のアドレス（ＩＡＲ）と前記ストア対象アドレス（ＯＡＲ）とを検出し、前記命令上書き可能性判定手段が、該Ｌ，ＩＡＲ，ＯＡＲ、および前記ストアデータのデータ長（Ｓ）、１回の命令フェッチでフェッチされる命令列の最大長（Ｍ）を用いて次の不等式
−Ｍ＜ＩＡＲ−ＯＡＲ＜Ｌ＋Ｓ
が成立するとき、命令上書きの可能性があると判定する。
【０１２７】
前記命令長検出手段が、前記連続する命令列の長さ（Ｌ）を検出し、前記アドレス検出手段が、前記特定位置に対応する命令のアドレス（ＩＡＲ）と前記ストア対象アドレス（ＯＡＲ）とを検出し、前記命令上書き可能性判定手段が、該Ｌ，ＩＡＲ，ＯＡＲ，および前記ストアデータのデータ長（Ｓ）を用いて次の不等式
−０＜ＩＡＲ−ＯＡＲ＜Ｌ＋Ｓ
が成立する時、命令上書きの可能性があると判定する。
【０１２８】
前記情報処理装置において、前記すべての命令列内の命令が不要となった時、前記命令長検出手段によって検出されている命令列の長さをリセットする命令長リセット手段を更に備える。
【０１２９】
前記情報処理装置において、前記命令上書き可能性判定手段が命令上書きの可能性を検出した時、前記ストア命令の実行完了直後に前記ストア対象アドレスに続くフェッチ済みの後続命令の実行を中止させ、該ストア対象アドレスに続く正しい後続命令の命令フェッチ以後の動作を実行させる命令再実行制御手段を更に備える。
【０１３０】
前記情報処理装置において、前記命令上書き可能性手段が命令上書きの可能性があると判定した時、該判定の時点から前記ストア命令の完了時点まで、同時に実行完了できる複数の命令の中に該ストア命令がなければ該複数の命令を同時に完了させ、ストア命令があれば命令実行順序において該ストア命令までの命令を同時に完了させる命令実行完了制御手段を更に備える。
【０１３１】
前記命令上書き可能性判定手段が、前記特定位置に対応する命令のアドレスのビット反転結果と、前記ストア対象アドレスと、前記命令フェッチカウンタ手段の出力とを加算する多入力加算手段を備える。
【０１３２】
前記多入力加算手段が、更に前記ストア対象アドレスに格納される実行結果としてのストアデータのデータ長をも加算する。
【０１３３】
【発明の効果】
以上詳細に説明したように、本発明によればストア命令の実行結果としてのデータ（命令）の書き込みによる後続命令の書き換え、すなわち命令上書きの可能性の判定を、命令実行効率を損なうことなく、正しく行うことができ、かつストア命令によって後続の命令が実際に上書きされる場合にも、上書きされた後の正しい命令列を実行することが可能となり、情報処理装置の処理効率向上に寄与するところが大きい。
【図面の簡単な説明】
【図１】本発明の原理構成ブロック図である。
【図２】本発明の命令上書き可能性を検出する情報処理装置の全体構成ブロック図である。
【図３】命令上書き可能性検出方法を説明する図である。
【図４】命令フェッチカウンタの構成例を示すブロック図である。
【図５】命令フェッチカウンタの異なる構成例のブロック図である。
【図６】命令フェッチカウンタの出力を利用した命令上書き可能性判定回路の構成例を示すブロック図である。
【図７】図６の命令上書き可能性判定回路の変形例を示す図である。
【図８】図６または図７の判定回路の出力を利用して命令上書きの可能性を示す不等式全体の成立を判定する判定回路の構成例である。
【図９】２つの命令フェッチポートＡ，Ｂに対応する命令上書きの全体判定回路を示す図である。
【図１０】図６の判定回路の更に異なる変形例を示す図である。
【図１１】命令上書き可能性が検出された時、後続命令に対して必要な制御を行う後続命令制御回路の構成を示すブロック図である。
【図１２】命令を１つずつしか完了させないための命令完了制御回路の構成を示すブロック図である。
【図１３】後続命令制御回路の異なる構成例を示すブロック図（その１）である。
【図１４】後続命令制御回路の異なる構成例を示すブロック図（その２）である。
【図１５】処理中断および命令破棄制御回路の構成を示すブロック図（その１）である。
【図１６】処理中断および命令破棄制御回路の構成を示すブロック図（その２）である。
【図１７】上書き可能性判定回路の更に異なる構成例を示すブロック図である。
【図１８】演算対象となる２つの数のうち片方の絶対値が小さい場合の演算の例を示す図である。
【図１９】演算対象としての２つの数に桁違いの差がある場合の加算回路の構成例を示す図である。
【図２０】２つの数に桁違いの差がある場合の減算回路の構成例を示す図である。
【図２１】２つの数の差が小さい場合にその差が小さいこととその差自体を出力する減算回路の構成例を示す図である。
【図２２】図１９，図２０の回路を用いて図１７の４入力加算器と同様の動作を行う回路の構成例を示す図である。
【図２３】命令アドレスとオペランドアドレスとの差を上位側と下位側とで分けて演算し、上位側ではインクリメンタを使用して下位側からのキャリー出力を処理する回路の構成例を示す図である。
【図２４】図２１の減算回路を利用した命令上書き可能性判定回路の構成例を示す図である。
【符号の説明】
１  情報処理装置
２  命令長検出手段
３  アドレス検出手段
４  命令上書き可能性判定手段
１４ａ，１４ｂ  命令バッファ
１７  オペランドアドレス生成回路
１８  キャッシュ
１９  ストア命令実行処理部
２０  命令実行完了処理部
２１  割り込み処理制御部
２２  次に実行が完了する命令の命令アドレスを格納するレジスタ
２３，２４  命令アドレスレジスタ
２５，２６  命令フェッチカウンタ
２７，２８  命令上書き可能性判定回路
３０  オペランドアドレスレジスタ
【図１】
0003739607.tif 000003
【図２】
0003739607.tif 000004
【図３】
0003739607.tif 000005
【図４】
0003739607.tif 000006
【図５】
0003739607.tif 000007
【図６】
0003739607.tif 000008
【図７】
0003739607.tif 000009
【図８】
0003739607.tif 000010
【図９】
0003739607.tif 000011
【図１０】
0003739607.tif 000012
【図１１】
0003739607.tif 000013
【図１２】
0003739607.tif 000014
【図１３】
0003739607.tif 000015
【図１４】
0003739607.tif 000016
【図１５】
0003739607.tif 000017
【図１６】
0003739607.tif 000018
【図１７】
0003739607.tif 000019
【図１８】
0003739607.tif 000020
【図１９】
0003739607.tif 000021
【図２０】
0003739607.tif 000022
【図２１】
0003739607.tif 000023
【図２２】
0003739607.tif 000024
【図２３】
0003739607.tif 000025
【図２４】
0003739607.tif 000026