(57)【要約】パイプライン・マイクロプロセッサ内でハザード消去を飛び越し命令でオーバーレイする方法と装置を説明する。本装置は、飛び越し動作の一部としてハザードを消去すべきことを指定する時を検出するハザードロジックを含む。ハザードを消去すべき場合、ハザードロジックは、飛び越し命令の分岐予測を無効にして、飛び越し命令が最終的に解消されるまで飛び越し命令がパイプラインを進んでゆくことを可能にして、飛び越し命令の後でパイプラインをフラッシュする。飛び越し命令の分岐予測を無効にすることは、飛び越し命令に先行するすべての実行ハザードと命令ハザード、またはそれらのいずれかを効果的に消去する。代替方法として、ハザードロジックは、発行制御ロジックが、すべてのハザードが消去されるまでｎサイクルにわたって飛び越し命令を遅らせることを可能にする。ハザードをつくる何らかの命令がパイプライン内で実行中であるか否かを決定するため状態追跡ロジックを与えることができる。実行中の場合、ハザードロジックは正常に実行されている。否の場合、状態追跡ロジックはハザードロジックの効果を無効にする。
2005538450.tif 000002
【特許請求の範囲】
【請求項１】
飛び越しを遂行するとともに命令ハザードを消去する命令を実行するパイプライン型マイクロプロセッサであって、
前記パイプライン型マイクロプロセッサによって実行される命令を発行する発行制御、であってストール指示信号を受信すると命令の発行をｎサイクルにわたってストールする能力を備えている前記発行制御と、
前記発行制御に結合され、飛び越しを遂行するとともに、命令ハザードを消去する前記命令を実行すべき時を検出し、その時になると、前記発行制御に前記ストール指示信号を与えるハザードバリア追跡ロジック付飛び越しと、
を含むパイプライン型マイクロプロセッサ。
【請求項２】
請求項１に記載のパイプライン型マイクロプロセッサにおいて、飛び越しを遂行するとともに、命令ハザードを消去する前記命令を実行すべき時を検出することと、前記命令の発行をｎサイクルにわたってストールすることによって、前記パイプライン型マイクロプロセッサ内のすべてのハザードが消去される前記パイプライン型マイクロプロセッサ。
【請求項３】
請求項２に記載のパイプライン型マイクロプロセッサにおいて、前記命令ハザードは、ハザードをつくった製造命令の結果を消費命令が必要とする時点の前に消去される前記パイプライン型マイクロプロセッサ。
【請求項４】
請求項１に記載のパイプライン型マイクロプロセッサにおいて、前記命令ハザードは、１つの命令（製造者）の中の前記命令によってつくられるとともに、他の命令（消費者）の中の前記命令によって判明するハザードである前記パイプライン型マイクロプロセッサ。
【請求項５】
請求項１に記載のパイプライン型マイクロプロセッサにおいて、前記発行制御によってストールされる前記ｎサイクルの数は、すべての命令ハザードを消去するために要求される前記パイプライン型マイクロプロセッサ内のサイクル数によって決定される前記パイプライン型マイクロプロセッサ。
【請求項６】
請求項１に記載のパイプライン型マイクロプロセッサにおいて、前記発行制御によってストールされるｎサイクルの数は、前記発行制御内で予め定められている前記パイプライン型マイクロプロセッサ。
【請求項７】
請求項１に記載のパイプライン型マイクロプロセッサにおいて、前記ハザードバリア追跡ロジック付飛び越しは、命令ハザードを消去しない飛び越し命令と、飛び越しを遂行するとともに命令ハザードを消去する前記命令を区別する前記パイプライン型マイクロプロセッサ。
【請求項８】
請求項７に記載のパイプライン型マイクロプロセッサにおいて、飛び越しを遂行するとともに命令ハザードを消去する前記飛び越し命令は、命令ハザードを消去すべきか否かを示すヒント・フィールドを含む前記パイプライン型マイクロプロセッサ。
【請求項９】
請求項１に記載のパイプライン型マイクロプロセッサであって、
前記発行制御に結合され、前記パイプライン型マイクロプロセッサによって実行される命令が、命令ハザードをつくる型式である場合を検出する状態変化追跡ロジックを更に含む前記パイプライン型マイクロプロセッサ。
【請求項１０】
請求項９に記載のパイプライン型マイクロプロセッサにおいて、前記状態変化追跡ロジックは、命令ハザードをつくる型式であるとして検出された命令の進行を追跡する前記パイプライン型マイクロプロセッサ。
【請求項１１】
請求項９に記載のパイプライン型マイクロプロセッサにおいて、前記状態変化追跡ロジックは、命令ハザードをつくる型式である命令が前記パイプライン型マイクロプロセッサ内で実行中である場合、前記発行制御に信号を与える前記パイプライン型マイクロプロセッサ。
【請求項１２】
請求項１１に記載のパイプライン型マイクロプロセッサにおいて、前記発行制御は、前記状態変化追跡ロジックから前記信号を受信するとともに前記ハザードバリア追跡ロジック付飛び越しから前記ストール指示信号を受信すると、飛び越しを遂行するとともに命令ハザードを消去するために前記命令の発行をストールする前記パイプライン型マイクロプロセッサ。
【請求項１３】
請求項１２に記載のパイプライン型マイクロプロセッサにおいて、前記発行制御は、前記状態変化追跡ロジックからの前記信号がすべての命令ハザードを消去することを示している時、飛び越しを遂行するとともに命令ハザードを消去する前記命令を発行する前記パイプライン型マイクロプロセッサ。
【請求項１４】
ハザード消去ロジックを備えたパイプライン型マイクロプロセッサであって、
前記パイプライン型マイクロプロセッサが目標アドレスに飛び越すように前記飛び越し命令が命令を終了する前に、目標アドレスを予測する分岐予測ロジックと、
前記分岐予測ロジックに結合され、前記飛び越し命令がハザードが消去されることを指示する時を検出し、前記飛び越し命令がハザードが消去されることを指示すると、前記飛び越し命令に対する分岐予測を無効にするために前記分岐予測ロジックに信号を送るハザードバリア追跡ロジック付飛び越しと、
を含む前記パイプライン型マイクロプロセッサ。
【請求項１５】
請求項１４に記載のパイプライン型マイクロプロセッサにおいて、前記ハザードバリア追跡ロジック付飛び越しは、前記パイプライン型マイクロプロセッサ内に実際にハザードが存在するか否かに関係なく、前記飛び越し命令に対する分岐予測を無効にするために前記分岐予測ロジックに信号を送る前記パイプライン型マイクロプロセッサ。
【請求項１６】
請求項１４に記載のパイプライン型マイクロプロセッサにおいて、前記飛び越し命令は、前記目標アドレスを指定するとともに命令ハザードを消去すべきことを指定する前記パイプライン型マイクロプロセッサ。
【請求項１７】
請求項１４に記載のパイプライン型マイクロプロセッサにおいて、前記分岐予測ロジックは、前記パイプライン型マイクロプロセッサのフェッチ・ステージ内に配置される前記パイプライン型マイクロプロセッサ。
【請求項１８】
請求項１４に記載のパイプライン型マイクロプロセッサにおいて、前記分岐予測ロジックが前記飛び越し命令に対して無効にされた場合、前記分岐予測ロジックは、前記パイプライン型マイクロプロセッサが前記予測された目標アドレスに飛び越さないようにする前記パイプライン型マイクロプロセッサ。
【請求項１９】
請求項１８に記載のパイプライン型マイクロプロセッサにおいて、前記パイプライン型マイクロプロセッサは、前記飛び越し命令が実行を終了すると、前記飛び越し命令によって指定された目標アドレスに飛び越す前記パイプライン型マイクロプロセッサ。
【請求項２０】
請求項１４に記載のパイプライン型マイクロプロセッサであって、
前記分岐予測ロジックに結合され、命令ハザードをつくる命令が前記パイプライン型マイクロプロセッサ内で実行中であるか否かを決定する状態変化追跡ロジックを更に含む前記パイプライン型マイクロプロセッサ。
【請求項２１】
請求項２０に記載のパイプライン型マイクロプロセッサにおいて、命令ハザードをつくる命令が前記パイプライン型マイクロプロセッサ内で実行中であることを前記状態変化追跡ロジックが決定した場合には、前記状態変化追跡ロジックは、前記分岐予測ロジックに信号を送る前記パイプライン型マイクロプロセッサ。
【請求項２２】
請求項２１に記載のパイプライン型マイクロプロセッサにおいて、前記分岐予測ロジックは、前記分岐予測ロジックが前記状態変化追跡ロジックから前記信号を受信する場合にのみ、前記飛び越し命令に対する分岐予測を無効にする前記パイプライン型マイクロプロセッサ。
【請求項２３】
パイプライン型マイクロプロセッサ上の命令としてのハザードバリア命令付飛び越しであって、
目標アドレスに対する飛び越し動作を指定するオペコード・フィールドと、
前記目標アドレスを決定するために使用される値を含むレジスタを指定するレジスタ・フィールドと、
前記飛び越し命令の実行の一部として命令ハザードを消去すべきことを指定するハザードバリア・ヒント・フィールドと、
を含むハザードバリア命令付飛び越し。
【請求項２４】
請求項２３に記載のハザードバリア命令付飛び越しであって、
リターン・アドレスを決定するために使用する値を含むレジスタを指定する第２のレジスタ・フィールドを更に含む、前記ハザードバリア命令付飛び越し。
【請求項２５】
請求項２３に記載のハザードバリア命令付飛び越しにおいて、前記パイプライン型マイクロプロセッサ上で前記ハザードバリア命令付飛び越しを使用することは、プログラマーにノーオペレーション命令（ＮＯＰ）を利用することを要求することなく、命令ハザードが飛び越し動作の一部として消去されるようにする前記ハザードバリア命令付飛び越し。
【請求項２６】
飛び越し動作を遂行するとともにパイプライン型マイクロプロセッサ内の命令ハザードを消去する方法であって、
飛び越し動作を遂行すべきか否かを決定し、
もしそうならば、前記飛び越し動作は、命令ハザードを消去すべきか否かを指定しているか否かを決定し、
もしそうならば、前記飛び越し動作の一部として前記命令ハザードを消去する、
ことを含む命令ハザードを消去する方法。
【請求項２７】
請求項２６に記載の、命令ハザードを消去する方法において、飛び越し動作を遂行すべきか否かを決定する前記ステップは、実行される前の命令のオペコード・フィールドを調べることを含む、前記命令ハザードを消去する方法。
【請求項２８】
請求項２６に記載の、命令ハザードを消去する方法において、前記飛び越し動作が、命令ハザードを消去すべきか否かを指定するか否かを決定する前記ステップは、実行される前の命令のヒントフィールドを調べることを含む、前記命令ハザードを消去する方法。
【請求項２９】
請求項２６に記載の、命令ハザードを消去する方法において、前記消去するステップは、
前記飛び越し命令に対する分岐予測を無効にすることを含む、前記命令ハザードを消去する方法。
【請求項３０】
請求項２６に記載の、命令ハザードを消去する方法であって、前記消去するステップは、
パイプライン型マイクロプロセッサをｎサイクルにわたってストールさせることを含む、前記命令ハザードを消去する方法。
【請求項３１】
請求項２６に記載の、命令ハザードを消去する方法であって、
命令ハザードをつくる任意の命令が、前記パイプライン型マイクロプロセッサ内で実行中であるか否かを検出し、
否であれば、前記消去するステップを否定する、
ことを更に含む、前記命令ハザードを消去する方法。
【請求項３２】
計算装置によって使用されるコンピュータプログラム製品であって、
ハザード消去機構を有するパイプライン型マイクロプロセッサが与えられるようにするため、媒体中に具体化されたコンピュータ可読プログラムコードを有するコンピュータ可使用媒体を含むコンピュータプログラム製品において、前記コンピュータ可読プログラムコードは、
前記パイプライン型マイクロプロセッサによって実行される命令を発行するとともに、ストール指示信号を受信すると命令の発行をｎサイクルにわたってストールする発行制御ロジックを与える、第１のプログラムコードと、
前記発行制御に結合され、飛び越しを遂行するとともに、命令ハザードを消去する前記命令を実行すべき時を検出し、その時になると、前記発行制御に前記ストール指示信号を与えるハザードバリア追跡ロジック付飛び越しを与える、第２のプログラムコードと、
を含むコンピュータプログラム製品。
【請求項３３】
請求項３２に記載のコンピュータプログラム製品であって、
前記発行制御に結合され、前記パイプライン型マイクロプロセッサ内で実行中の命令が命令ハザードをつくる時を検出する状態変化追跡ロジックを与える第３のプログラムコードを更に含む、前記コンピュータプログラム製品。
【請求項３４】
請求項３３に記載のコンピュータプログラム製品において、前記パイプライン型マイクロプロセッサ内で実行中である命令ハザードをつくる命令を前記状態追跡ロジックが検出しない場合、前記状態追跡ロジックは、前記発行制御に信号を送り前記ストール指示信号の効果を無効する、前記コンピュータプログラム製品。
【請求項３５】
伝送媒体内に具体化されるコンピュータ・データ信号であって、
ハザード消去ロジックを備えたパイプライン型マイクロプロセッサを与えるコンピュータ可読プログラムコードを含むコンピュータ・データ信号において、前記プログラムコードは、
前記飛び越しに対する目標アドレスを予測するとともに、前記飛び越し命令が実行を終了する前に、前記パイプライン型マイクロプロセッサが前記予測された目標アドレスに飛び越すようにする分岐予測ロジックを与える第１のプログラムコードと、
前記分岐予測ロジックに結合され、前記飛び越し命令がハザードを消去すべきことを指示する時を検出し、前記飛び越し命令がハザードを消去すべきことを指示すると、前記飛び越し命令に対する分岐予測を無効にするために前記分岐予測ロジックに信号を送るハザードバリア追跡ロジック付飛び越しを与える第２のプログラムコードと、
を含むコンピュータ・データ信号。
【請求項３６】
請求項３５に記載のコンピュータ・データ信号において、前記分岐予測ロジックが前記ハザードバリア追跡ロジック付飛び越しから信号を受信すると、前記分岐予測ロジックは、前記飛び越し命令が実行を終了するまで、前記飛び越し命令によって指定された目標アドレスに飛び越さない前記コンピュータ・データ信号。
【請求項３７】
請求項３５に記載のコンピュータ・データ信号であって、
前記分岐予測ロジックに結合され、ハザードをつくる命令が前記パイプライン型マイクロプロセッサ内で実行中であるか否かを決定する状態変化追跡ロジックを更に含む前記コンピュータ・データ信号。
【請求項３８】
請求項３７に記載のコンピュータ・データ信号において、前記状態変化追跡ロジックが前記パイプライン型マイクロプロセッサ内でハザードをつくる命令が実行中であると決定すると、前記状態変化追跡ロジックは、前記飛び越し命令に対する分岐予測を無効にするために前記分岐予測ロジックに信号を送る前記コンピュータ・データ信号。
【発明の詳細な説明】
【技術分野】
【０００１】
（発明の分野）
本発明は、一般にコンピュータ・アーキテクチャに関し、より明確には、ハザード消去を飛び越し命令でオーバーレイすることによってパイプライン内の命令ハザードを管理する方法と装置に関する。
【０００２】
図１を参照すると、初期のマイクロプロセッサ１００の４ステージ単一命令パイプライン（four stage single-completion instruction pipeline）を示すブロック図が示されている。パイプライン・ステージは、１）フェッチ、２）算術演算（ＡＬＵ）、３）メモリアクセス、４）書戻し（write back）を含む。動作する場合、マイクロプロセッサは、サイクル１で実行する命令をフェッチし、サイクル２でその命令を実行し、サイクル３でメモリに対する読み出しまたは書き込みを実行し、サイクル４で（サイクル２からの）ＡＬＵ演算または（サイクル３からの）メモリ読み出しの結果をマイクロプロセッサのレジスタ・ファイルに書き込む。各パイプライン・ステージが、その機能を終了するために１つのプロセッサ・クロックを必要とする場合には、４ステージのパイプラインの中で実行を終了するために命令は４つのクロックを必要とする。この例におけるパイプラインの実行速度は、４クロック・サイクルごとに１命令である。
【０００３】
マイクロプロセッサ設計の業者は、図１の単一命令パイプラインにおける問題点の１つが、任意の所定のクロック・サイクルにおいて、命令を実行するためにパイプライン・ステージの１つだけが利用されていることが判るであろう。例えば、クロック・サイクル１の時間中、実行する命令をフェッチするフェッチ・ステージはビジーであるが、ＡＬＵ、メモリおよび書き込みのステージは本質的にアイドルである。アイドルな処理ステージは非効率であると考えられるので、処理システムにおいては望ましくない。
【０００４】
上で説明したアイドル状態（idleness）の救済方法が、図２に示されており、次にこの図に注意を向ける。図２は、図１に示したパイプラインと同様な４ステージ・パイプラインを使うマイクロプロセッサ２００を含む。しかし、マイクロプロセッサ２００においては、次の命令をフェッチすることができる（４クロック・サイクル）前に、終了すべき命令を待ち合わせるのではなく、各クロック・サイクルで新しい命令がフェッチされる。この４ステージ・パイプラインにおける４つの命令は、パイプラインの各ステージで１つの命令を同時に実行する処理状態にある。第１の命令が終了するためには４クロック・サイクルかかるが、それ以後はクロック・サイクルごとに新しい命令が終了する。したがって、図１に示したアイドル状態が除去され、全体の処理効率が改善されている。
【０００５】
しかしながら、命令が開始できる前に、その命令が前の命令の終了または解決に依存する場合、並列パイプラインの中で問題点が生じる。この問題点は、次に注意を向ける図３に示されている。
【０００６】
図３は、図２に示されている並列パイプライン・マイクロプロセッサと同じ並列パイプライン・マイクロプロセッサ３００を示している。しかし、この図における命令２は、命令２が開始する前に、命令１の解決に依存している。例えば、命令１が、ＬＯＡＤ、ＲＥＧ１、ＭＥＭの型式である場合を想定されたい。つまり命令１は、記憶域ＭＥＭの値がメモリから取り出され、マイクロプロセッサ３００の中のレジスタＲＥＧ１の中に格納されるようにする。次に命令２がＡＤＤ  ＲＥＧ１，２の型式である場合を想定されたい。つまり命令２は、ＲＥＧ１レジスタの内容を数値２に加算して、その結果をＲＥＧ１レジスタの中に格納する。４ステージ・パイプライン３００における命令１は、クロック・サイクル３の終わりまで記憶域ＭＥＭの内容を取り出さない。更に取り出された記憶域ＭＥＭの内容は、クロック・サイクル４の終わりまでレジスタＲＥＧ１の中に格納されない。クロック３で、命令２がパイプラインのＡＬＵステージに進むことが可能であった場合には、値「２」が加算されるＲＥＧ１レジスタの内容は、ＭＥＭからの値によってまだ更新されなかったであろう。したがって、加算の結果は未知であるか、少なくとも正しくないであろう。この例において、レジスタＲＥＧ１の正しい内容を使用して命令２が実行されることを確実にする唯一の方法は、少なくとも２クロック・サイクルだけ命令の実行を待っているかストールすることである。
【０００７】
図３に示されていることは、パイプラインのハザードとして周知されていることの１つの例にすぎない。一般に、２つの型式のパイプライン・ハザードが存在する。つまり、１）実行ハザードと２）命令ハザードの２つである。実行ハザードは、１つの命令の実行によってつくられるハザードであり、図３に示すように、他の命令の実行によって判明する。命令ハザードは１つの命令の実行によってつくられるハザードであり、他の命令の命令フェッチによって判明する。例えば、第１の命令は、ＴＬＢテーブル内のＴＬＢエントリを更新することができ、第２の命令は、この更新されたＴＬＢエントリを使用して命令をフェッチするであろう。第２の命令が、更新の前にＴＬＢエントリから命令をフェッチすることを試行した場合には、第２の命令は正しくない命令をフェッチしていたであろう。いずれにせよ、パイプライン型マイクロプロセッサの中ですべての命令が正しく実行することを保証するためには、前の命令の解決に依存する命令が、少なくとも依存する命令からの命令が終了するまで、ストールするか遅れさせられることを確実にしなければならない。依存命令（dependent instruction）の適切な実行を保証するために使用される方法は、ハザード防止（hazard protection）またはハザード消去（hazard clearing）として周知されている。
【０００８】
通常、ハザード防止は、ハードウエアまたはソフトウエアのいずれかで遂行される。ハザード防止がハードウエアの中に与えられると、マイクロプロセッサの一部は、命令の依存性を検出するために実行される各命令の追跡の専用になる。命令の依存性が検出されると、ハードウエアは依存命令をインターロックして、その命令が終了するまで、依存命令をストールする。ハードウエア・ハザード防止を組み込むようにマイクロプロセッサを設計する利点は、ソフトウエア・プログラマーが、命令実行に関連する複雑さから保護されることである。つまり、第２の依存命令を開始する前に第１の命令が解決されるために必要なステージの数をプログラマーが心配しなくても良い。プログラマーは、実行に必要な順番で命令を書いているだけで良く、マイクロプロセッサ内のハザード・ハードウエアが適切な実行を保証することを信頼するだけでよい。ハードウエア内にハザード防止機能を与えることのマイナス面は、そのようなハードウエアを追加することがマイクロプロセッサをかなり複雑にすることと、マイクロプロセッサの設計費用と最終原価の双方に大きな影響を与えることである。それだけでなく、実行の順番、パイプラインのステージ数、または実行時間に影響を及ぼすアーキテクチャの設計変更は、ハザード・ハードウエアの中で考慮されねばならないため、ハザードハードウエアの設計変更が必要になる。多くのタイプのマイクロプロセッサにとって、ハードウエア内にハザード防止を与えることに関連する複雑さが追加されることは不適切であると考えられる。これらのマイクロプロセッサの場合、ハザード防止は、ソフトウエアを介して与えられるのが普通である。
【０００９】
ソフトウエアによるハザード防止は、ソフトウエア・プログラマー、またはプログラマーによって使用されるコンパイラの設計者にハザードを防止する重責を負わせることになる。ソフトウエア・プログラマーが図３に示すハザードをいかに解決するかを示すため、次に示すプログラムを考慮されたい。
ＬＯＡＤ  ＲＥＧ１、ＭＥＭ
ＮＯＰ
ＮＯＰ
ＡＤＤ  ＲＥＧ１、２
【００１０】
マイクロプロセッサ３００のパイプラインの構造に関する知識を有するプログラマーは、命令２が命令１の解決に依存していることと、その依存性を解決するために命令１と命令２との間に更に２クロック・サイクルかかることを理解している。したがって、プログラマーは、命令１と命令２との間に２つのＮＯＰ（ノーオペレーション）命令を挿入する。代替方法として、プログラマーが、マイクロプロセッサ３００のために特別設計されたコンパイラを使用した場合には、プログラマーは、そのコンパイラが命令１と命令２との間の依存性を検出するとともに、これら２つの命令間に必要数のＮＯＰ命令を挿入するであろうことを信頼しても良い。マイクロプロセッサ３００から見ると、マイクロプロセッサはクロック・サイクルごとに命令をフェッチして、フェッチした命令を実行するパイプラインに転送しているにすぎない。マイクロプロセッサ３００は、ハザードを解消するハードウエアを追加することを必要としておらず、ハザードは抑止されている。
【００１１】
ソフトウエアによるハザード消去に関する問題点は、特定マイクロプロセッサの実施例における命令実行に関する微妙な差異を理解する重責を、プログラマーと、または代わりとして当該マイクロプロセッサ用コンパイラの設計者とのいずれかに負わせることである。そのような重責は、最近のマイクロプロセッサの分野のどこにでもあることだとしても、かなり大きな問題である。プログラマーは、コーディング中のプロセッサの実行を理解しなければならないだけでなく、他の命令が依存する各命令にどの程度の遅れが付随するかも理解しなければならない。深い（１２ステージまたはそれ以上のステージを有する）パイプライン型マイクロプロセッサの中では、プログラマーは、プログラム内で依存命令がどれだけ遠く離れているか、更に第１の命令が解決される前に第１の命令がどれだけ遠くパイプラインの中で進行していなければならないかに依存して、依存命令の間に１から１０のＮＯＰ命令を挿入しなければならない。深いパイプライン型マイクロプロセッサのために正確にコーディングするためには、プログラマーは、プロセッサの実行ハザード（implementation hazard）を熟知していなければならない。
【００１２】
ソフトウエアによるハザード消去を使用することに関するさらなる問題点は、マイクロプロセッサのプログラムが開発されると、プログラムをかなり書き直さずに次世代のマイクロプロセッサ上でそのプログラムが動作することはあり得ないということである。例えば、マイクロプロセッサが５ステージのパイプラインから１２ステージのパイプラインへと進化した場合、５ステージのパイプラインに使用されるハザード消去方法のどれかが１２ステージのパイプラインで正しく動作することはあり得ない。５ステージのパイプラインと１２ステージのパイプラインのソフトウエアのアーキテクチャ（つまり、命令群）が同じであったとしてもこのことは真実である。
【００１３】
本発明の発明者に明らかになったことは、プログラマーまたはコンパイラの設計者によって利用され、複数世代にわたるマイクロプロセッサ・アーキテクチャに実施され、プロセッサ世代間でハザード消去コードを書き直すことを止め、さらに特定のマイクロプロセッサのハザードの微妙な差異を理解するプログラマーに負わせる重責を緩和する、ハザード消去機構に対するニーズである。
【００１４】
必要とされることは、ハザードと依存命令との間のステージ数に関係なく、ハザードを消去すべき時をプログラマーが指定することを可能にする方法と装置である。
【００１５】
更に必要とされることは、ハードウエアによるハザードの追跡とともに利用されうるハザード消去のための方法と装置である。
【００１６】
（要約）
本発明は、ハザード消去を飛び越し命令でオーバーレイする方法と装置を提供する。
【００１７】
１つの態様における本発明は、飛び越しを遂行するとともに、命令ハザードを消去する命令を実行するパイプライン型マイクロプロセッサを提供する。このパイプライン型マイクロプロセッサは、発行制御（issue control）とハザードバリア追跡ロジック付飛び越し（jump with hazard barrier tracking logic）を含む。発行ロジックは、パイプライン型マイクロプロセッサによって実行される命令を発行するとともに、ストール指示信号を受信するとｎサイクルにわたって、命令の発行をストールする能力を有する。ハザードバリア追跡ロジック付飛び越しは、発行制御と結合され、飛び越しを遂行するとともに命令ハザードを消去する命令が実行される時を検出する。その時になると、ハザードバリア追跡ロジック付飛び越しは発行制御にストール指示信号を与える。
【００１８】
他の態様における本発明は、ハザード消去ロジックを有するパイプライン型マイクロプロセッサを提供する。このパイプライン型マイクロプロセッサは、分岐予測ロジックとハザードバリア追跡ロジック付飛び越しを含む。分岐予測ロジックは、飛び越し命令が実行を終了する前にパイプライン型マイクロプロセッサが予測された目標アドレスに飛び越すようにする分岐目標アドレス（branch target address）を予測する。ハザードバリア追跡ロジック付飛び越しは分岐予測ロジックと結合され、飛び越し命令がハザードを消去すべきことを表示する時を検出する。飛び越し命令が、ハザードを消去すべきことを表示すると、追跡ロジックは分岐予測ロジックに信号を送り、飛び越し命令に対する分岐予測を無効にする。
【００１９】
他の態様における上記装置の双方は、命令ハザードをつくり出す命令がパイプライン型マイクロプロセッサ内で実行中であるか否かを決定する状態変化（state change）追跡ロジックを更に含む。命令ハザードをつくり出す命令が実行中でない場合には、ハザード追跡ロジックの効果は否定される。
【００２０】
更なる態様における本発明は、パイプライン型マイクロプロセッサ上で実行されるハザードバリア命令付飛び越し（jump with hazard barrier instruction）を提供する。このハザードバリア命令付飛び越しは、オペコード・フィールド、レジスタ・フィールドおよびハザードバリア・ヒント・フィールドを含む。オペコード・フィールドは目標アドレスへの飛び越し動作を指定する。レジスタ・フィールドは、目標アドレスを決定するために使用される値を含むレジスタを指定する。ハザードバリア・ヒント・フィールドは、飛び越し命令の実行の一部として命令ハザードが消去されることを表す。
【００２１】
更に別の態様における本発明は、飛び越し動作を実行するとともにパイプライン型マイクロプロセッサ内の命令ハザードを消去する方法を提供する。この方法は、飛び越し動作を実行すべきか否かを決定し、実行する場合、飛び越し動作が、命令ハザードを消去すべきか否かを指定するか否かを決定し、指定する場合、飛び越し動作の一部として命令ハザードを消去することを含む。またこの方法は、パイプライン型マイクロプロセッサ内で命令ハザードをつくる任意の命令が実行中であるか否かを検出し、検出しない場合、消去動作を否定することを含む。
【００２２】
他の態様における本発明は、計算装置によって使用されるコンピュータプログラム製品を提供する。このコンピュータプログラム製品は、媒体内に具体化されハザード消去機構を備えたパイプライン型マイクロプロセッサが提供されるようにするコンピュータ可読プログラムコードを有するコンピュータが使用可能な媒体（computer usable medium：以下、コンピュータ可使用媒体と記す）を含む。コンピュータ可読プログラムコードは、パイプライン型マイクロプロセッサによって実行される命令を発行する発行制御ロジックを与える第１のプログラムコードと、ストール指示信号を受信すると命令の発行をｎサイクルストールする発行制御、および、発行制御に結合され飛び越しを遂行するとともに命令ハザードを消去する命令を実行すべき時を検出し、その時になると発行制御にストール指示信号を与えるハザードバリア命令付飛び越しを与える第２のプログラムコードとを含む。
【００２３】
更なる態様における本発明は、ハザード消去ロジックを備えたパイプライン型マイクロプロセッサを与えるコンピュータ可読プログラムコードを含む伝送媒体内で具体化されるコンピュータ・データ信号を提供する。このプログラムコードは、分岐予測ロジックを与え、飛び越し命令が実行を終了する前にパイプライン型マイクロプロセッサが予測された目標アドレスに飛び越すようにする第１のプログラムコードと、分岐予測ロジックに結合され、飛び越し命令がハザードを消去すべきことを示す時を検出し、飛び越し命令がハザードを消去すべきことを示すと、分岐予測ロジックに信号を送り、飛び越し命令に対する分岐予測を無効にするハザードバリア命令付飛び越しを与える第２のプログラムコードとを含む。
【００２４】
（詳細な説明）
本発明の他の特徴と利点は、本明細書と図面の残りの部分を検討すると明らかになるであろう。
【００２５】
以下に説明する本発明は、多数の異なるパイプライン型マイクロプロセッサ内で使用可能であるから、そのアイデアがより良く理解されるように、本発明は、カリフォルニア州、マウンテンビューのＭＩＰＳテクノロジ社によるＭＩＰＳ３２アーキテクチャ内で具体化されているように特に説明されている。より明確には、本発明はＭＩＰＳ３２アーキテクチャに対して明白なハザード消去命令を追加する。このハザード消去命令は、既存の呼び出し（call）命令とリターン（return）命令の最上部にオーバーレイされ、ハザードを消去すべき時を詳細に指定する。マイクロプロセッサ内の実行ロジックは、呼び出しとリターンがハザードに関係する時を検出して、その関係に気付いた時、ハザードを効率良く消去するように動作する。プロセッサのアーキテクチャの一部である命令は、ハザードに関するプロセッサの微妙な差異を理解するようプログラマーに要求することなく、更に所定の数のＮＯＰを挿入することなく、多数世代のアーキテクチャ内でハザード消去を達成する。
【００２６】
新しいハザード消去命令を提供する前に、ＭＩＰＳ３２アーキテクチャ内で発生するハザードの型式の概要を最初に提供する。
【００２７】
（実行ハザード）
実行ハザードは、１つの命令の実行によってつくられるハザードであり、他の命令の実行によって判明する。図４は、ＭＩＰＳ３２内の実行ハザードの一覧である。「製造者（producer）」は、実行された場合に次の命令、つまり「消費者（consumer）」に対してハザードをつくるプログラム内の命令である。リストされている各命令を完全に説明するため、読者はプログラマーのためのＭＩＰＳ３２アーキテクチャ第２巻（MIPS32 Architecture for Programmers Volume II）、つまり、www.mips.comで入手可能なＭＩＰＳ３２命令セットを参照する。当業者は、実行ハザードの大部分は、コプロセッサ０との間でｍｏｖｅが実行される時につくられる（バーチャルメモリ・システムをサポートするＭＩＰＳプロセッサの一部は例外などを処理する）ことを理解できるであろう。
【００２８】
（命令ハザード）
命令ハザードは、１つの命令の実行によってつくられるハザードであり、他の命令の命令フェッチによって判明する。図５は、ＭＩＰＳ３２アーキテクチャ内の命令ハザードの一覧である。これらの命令の説明もまた、プログラマーのためのＭＩＰＳ３２アーキテクチャ第２巻、つまりＭＩＰＳ３２命令セットの中で見付けることができる。
【００２９】
（ハザードバリア飛び越し命令）
ＭＩＰＳ３２アーキテクチャを使うマイクロプロセッサでは、プログラマーは、命令間のハザードを克服するために製造者命令と消費者命令との間に、図４と図５の中に記載された命令のようなＮＯＰ（ＳＳＮＯＰ）命令を挿入するように要求されてきた。更に、上記背景の中で説明したように、要求されるＮＯＰの数は、マイクロプロセッサ内ステージの数、製造者と消費者との間のスペース、および製造者命令が解消されたステージによって決定された。
【００３０】
次に図６を参照すると、第１の新しい命令、ハザード消去インジケータを飛び越し命令でオーバーレイするＪＡＬＲ．ＨＢ６００が導入されている。当業者は、本命令の目的のために、この命令の影響から見て、分岐と飛び越しは等価であることを理解できるであろう。この新しい３２ビットの命令を次に説明する。
【００３１】
ＪＡＬＲ．ＨＢ命令は、前のＪＡＬＲ命令のヒント・フィールドのビット１０を使用して符号化される。この符号化は、以前のＭＩＰＳ３２アーキテクチャを多数含む既存のＭＩＰＳ実施例との互換性のために選択された。ＪＡＬＲ．ＨＢ命令の目的は、レジスタの命令アドレスに対して手続き呼び出し（procedure call）を実行し、すべての実行ハザードと命令ハザードを手続き呼び出しの一部として消去することである。この命令のフォーマットは、ＪＡＬＲ．ＨＢ  ｒｓ（ｒｄ＝３１と暗黙されている）か、ＪＡＬＲ．ＨＢ  ｒｄ、ｒｓである。この命令が実行されると、リターン・アドレス（ｒｅｔｕｒｎ＿ａｄｄｒ）が汎用レジスタｒｄの中に格納され、ｒｓレジスタの中の指定された値はプログラムカウンタ（ＰＣ）の中に格納される。ＭＩＰＳ３２アーキテクチャ内のリターン・アドレスは、ＪＡＬＲ．ＨＢ命令の後に続く第２の命令のアドレスである。それだけでなく、ビット位置１０の値が「１」になっていると、ＪＡＬＲ．ＨＢ命令は、すべての実行ハザードと命令ハザードを消去する。
【００３２】
より明確に説明すると、ＪＡＬＲ．ＨＢ命令は、コプロセッサ０の状態変化によってつくられるすべての実行ハザードと命令ハザードを解決するソフトウエアバリアを実施する。このバリアの効果は、命令フェッチと、ＪＡＬＲ．ＨＢ命令が飛び越す目標アドレスにある命令のデコードとで始まることが判る。
【００３３】
ＪＡＬＲ．ＨＢ命令とハザード消去におけるその効果は、いくつかの方法で実施されうる。以下の考察では、本発明の２つの実施例が説明されている。１つの実施例におけるプロセッサは、ＪＡＬＲ．ＨＢ命令を見ると、ＪＡＬＲ．ＨＢ命令の直後に続く命令に影響を及ばすコプロセッサ０の状態の更新を含め、その時点以前のコプロセッサ０の命令がすべて実行を終了してしまうまでのｎサイクルにわたって、更なる命令の発行をストールする。プロセッサの動作をストールするサイクルの数は、本発明が組み込まれるパイプラインの長さによって決定される。第２の実施例におけるハザード・インジケータは、プログラムの実行順序を変える分岐予測機構、命令フェッチなどを一時的に無効にするために使用される。つまり、ハザード・インジケータは、プロセッサが、飛び越しに関連する予測された目標アドレスからの命令フェッチに先行して動作するようにする。むしろプロセッサは、自己の命令フェッチを続け、最終的にはＪＡＬＲ．ＨＢ命令が実行を終了した時にパイプラインをフラッシュする。
【００３４】
次に図７を参照すると、ハザード消去の発明の各種態様を組み込んだパイプライン・マイクロプロセッサ７００のブロック図が示されている。プロセッサ７００は、命令をフェッチするためのフェッチ・ステージ７０２、フェッチした命令をデコードするデコードステージ７０４、ロジック演算と算術演算を遂行するＡＬＵステージ７０６、および、プロセッサ７００内のメモリかレジスタのいずれかに結果を書き込む書戻しステージ７０８を含む、深さＮのパイプラインを含む。当業者は、フェッチ・ステージ７０２に先行するか、フェッチ・ステージ７０２、デコードステージ７０４またはＡＬＵステージ７０６に続くかいずれかの他の命令が存在しても良いことが理解できるであろう。プロセッサ７００の中に示されているステージは、最新のより深いパイプラインを使うマイクロプロセッサのいくつかのステージを代表しているにすぎない。何故ならば、これらのステージは、本発明をより良く理解するための文脈を与えているからである。
【００３５】
１つの実施例におけるハザード消去ロジック（hazard clearing logic）７１０は、プロセッサ７００のフェッチ・ステージ７０２内に配置される。他の実施例は、例えばフェッチ・ステージ７０２の後のように、プロセッサ７００の他のステージ内にハザード消去ロジック７１０を置くこともできる。ハザード消去ロジック７１０は、ハザードバリア追跡ロジック付飛び越し（Jump with Hazard Barrier Tracking logic）７１２、状態変化追跡ロジック（State Change Tracking logic）７１４および発行制御（Issue Control）７１６を含む。ハザード消去ロジック７１０の動作を、次の命令列、特にこの命令列の最後の２命令に関連して説明する。
2005538450.tif 000003
【００３６】
上記命令列は、コプロセッサ０内のＡＳＩＤを修飾するために使用され、新たにマッピングが確定されたルーチンを呼び出す。新しいＡＳＩＤは、レジスタａ０に格納され、呼び出すべきルーチンをアドレス指定するために使用される。
【００３７】
新しいＡＳＩＤの値で既存のＡＳＩＤの値を置き換えた後、プロセッサ７００のフェッチ・ステージ７０２の中に命令ＭＴＣ０がフェッチされる。ＭＴＣ０命令は、ＡＳＩＤの新しい値をコプロセッサ０のレジスタに移動する。ＭＴＣ０命令はフェッチ・ステージ７０２の中にあるあいだに、状態変化追跡ロジック７１４はＭＴＣ０命令を検出し、この命令が、消費する命令に対してハザードをつくるような方法でプロセッサ７００の状態を変更する型式であることを注意する。状態変化追跡ロジック７１４は、ＭＴＣ０命令が実行を終了するためにかかるサイクル数を理解して、後続のクロック・サイクルを監視し、ＭＴＣ０命令が終了したマークを付けるまでＭＴＣ０命令を「追跡（track）」する。当業者は、いくつかの代替可能な実施例を使用してプロセッサ７００のＮステージのパイプラインを通る製造者型式の命令を検出し追跡することができることを理解できるであろう。
【００３８】
第２のクロック・サイクル中に、命令ＭＴＣ０はパイプラインの次のステージに進行し、命令ＪＡＬＲ．ＨＢがフェッチされる。この時点でハザードバリア追跡ロジック付飛び越し７１２はこの命令を検出する。ハザードバリア追跡ロジック付飛び越しは状態変化追跡ロジック７１４に結合され、ＪＡＬＲ．ＨＢ命令が検出される時点では、プロセッサ７００の状態に影響を及ぼす１つまたは複数の命令がパイプラインの中にあるか否かを決定する。そうなっていると、ハザードバリア追跡ロジック付飛び越し７１２（または代替的に状態変化追跡ロジック７１４）は、プロセッサ７００の状態を変更する先行命令が終了してしまうまで発行制御ロジック７１６がＪＡＬＲ．ＨＢ命令をストールするようにする。そのような命令が終了すると、発行制御７１６はＪＡＬＲ．ＨＢ命令を復旧させ、続く命令とともにＪＡＬＲ．ＨＢ命令がパイプラインを進んで行くことを可能にする。ハザードバリア追跡ロジック付飛び越し７１２が発行制御ロジック７１６に信号を送る場合は、信号線７１８を使用して前記発行ロジックにストール指示信号を与えることでそれが行なわれる。すると発行制御ロジック７１６は、ｎサイクルにわたってＪＡＬＲ．ＨＢ命令の発行をストールする。状態変化追跡ロジック７１４が発行制御ロジック７１６に信号を送る場合には、それは信号線７２０で実行する。
【００３９】
１つの実施例における発行制御７１６は、ストール指示信号を受信すると、ＪＡＬＲ．ＨＢ命令をｎサイクルにわたって自動的にストールする。代替可能な実施例では発行制御７１６がストール指示信号７１８と、信号線７２０で状態変化追跡ロジックからの信号との双方を受信すると、発行制御７１６はＪＡＬＲ．ＨＢ命令をストールするだけである。したがって、状態変化追跡ロジック７１４がすべてのハザードが消去されてしまったことを決定すると、状態変化追跡ロジック７１４は発行制御ロジック７１６に信号を送ることを止めて、ＪＡＬＲ．ＨＢ命令が進むことを可能にする。更に別の実施例においては、すべてのハザードをつくる命令が消去されてしまうと、状態変化追跡ロジックからの信号は、ハザードバリア追跡ロジック付飛び越し７１２からのストール指示信号の効果を無効にするために使用される。
【００４０】
未解消のハザードを消去するＪＡＬＲ．ＨＢ命令の指示がないと、ＮＯＰの後の命令、多分ＪＡＬＲ．ＨＢ命令によって飛び越しされたシーケンス内の最初の命令は正しく実行しないであろうことを理解すべきである。代替方法として、適切な実行を保証するためには、ＭＴＣ０命令とＪＡＬＲ命令との間（または新しいルーチン内の最初の数個の命令スペースの中）にＮ個のＮＯＰを配置しなければならなかったであろう。しかし、ハザード消去インジケータを飛び越し命令でオーバーレイすることによって、本発明は、プロセッサ７００内のパイプライン・ステージ、またはＭＴＣ０命令によってつくられる特定のハザードに関する特定の知識なしに、ハザードが消去されていることをプログラマーが保証できるようにした。
【００４１】
次に図８を参照すると、本発明によるハザード消去方法を示す流れ図が示されている。流れはブロック８０２で始まり、判断ブロック８０４に進む。
【００４２】
判断ブロック８０４では、飛び越し命令を実行すべきか否かについて決定される。否であれば、流れはブロック８１４に進み、ここで命令がパイプラインに進み実行されることが可能になる。命令が実行すると、流れはブロック８１６に進む。ブロック８１６で命令は実行を終了する。しかし、飛び越し命令を実行すべき場合、流れは判断ブロック８０６に進む。
【００４３】
判断ブロック８０６では、飛び越し命令がハザードバリア・インジケータを含むか否かについて決定される。否であれば、流れはブロック８１４に進み、上に説明したように、ここで命令がパイプラインを進行して実行することが可能になる。しかし、飛び越し命令がハザードバリア・インジケータを含む場合、流れは判断ブロック８０８に進む。
【００４４】
判断ブロック８０８では、飛び越し命令に先行して任意のハザードをつくる命令がプロセッサ内で実行中であるか否かについて決定される。否であれば、流れはブロック８１４に進み、ここでハザード・インジケータを含む飛び越し命令がパイプラインを進行して実行することが可能になる。しかし、任意のハザードをつくる命令がプロセッサ内で実行中である場合、流れはブロック８１０に進む。
【００４５】
ブロック８１０では、ハザード・インジケータを含む飛び越し命令がクロック・サイクルだけストールする。流れは判断ブロック８１２に進む。注：以下の図９を参照して説明する実施例とともに使用される場合、ブロック８１０は分岐予測を無効にすることができる。
【００４６】
判断ブロック８１２では、任意のハザードをつくる命令がプロセッサ内で実行中であるか否かについて決定される。否であれば、流れはブロック８１４に進み、ここでハザード・インジケータを含む飛び越し命令がパイプラインを進行して実行することが可能になる。しかし、任意のハザードをつくる命令がプロセッサ内で実行中である場合、流れは判断ブロック８１０に戻る。パイプライン内のハザードをつくる命令がすべて実行を終了してしまうまで、流れはブロック８１０と判断ブロック８１２との間で継続する。ハザードをつくる命令がすべて実行を終了してしまうと、ハザード・インジケータを含む飛び越し命令がパイプラインに進むことが可能になる。
【００４７】
代替可能な実施例では、ハザードをつくる命令がすべて実行を終了してしまうまでハザード・インジケータを含む飛び越し命令をストールするのではなく、単に飛び越し命令がパイプラインに進み、プロセッサが実際に命令によって指定された飛び越しをする場合、飛び越しの後のすべての他のステージは飛び越しの一部としてフラッシュされ、飛び越しの後に来る命令が開始することが発明者の認識であった。パイプラインの後の方のステージの１つで飛び越しが実行されると、飛び越されるまでに、ハザードをつくる命令のすべては実行を終了しているであろう。更に飛び越しに続く命令のすべてがフラッシュされるのであるから、飛び越しの結果として、実行すべき命令は、正しくない状態を使用して実行を開始するための時間がなくなっていたであろう。
【００４８】
しかし、この方法に関する問題点は、最近のたいていのプロセッサ、特に深いパイプラインを使うマイクロプロセッサは、分岐予測機構を利用して飛び越しのための目標アドレスを予測するとともに、飛び越し命令が実際に実行されるずっと前に予測した目標アドレスから命令をフェッチして実行することを開始する。そのような分岐予測機構の考察は、この考察の範囲を超えている。しかし、そのような機構は、新しい目標アドレスで命令をフェッチする前に、パイプラインをフラッシュすることに関連する遅れを除くように設計されていることを理解しなければならない。しかし、そのような分岐予測機構がハザード・インジケータを含む飛び越し命令とともに使用される場合は、所望の結果（パイプラインのフラッシュ）は発生しないであろう。したがって、本発明の発明者は、本発明の飛び越し命令内のハザード・インジケータを利用して、ハザード・インジケータを含む飛び越し命令の実行中に、予測した目標アドレスに関連する命令フェッチを効果的に無効にする。そのような実施例は、次に注意が向けられる図９に示されている。
【００４９】
図９は、図７を参照して説明したパイプライン型マイクロプロセッサと同様なパイプライン型マイクロプロセッサ９００を示している。類似の数字は類似の参照を示しており、百位の数が「９」に置き換わっている。図７を参照して上に与えられた命令列を使用して、プロセッサ９００の動作に関する説明を次に与える。
【００５０】
第１のクロック・サイクル中、ＭＴＣ０命令がフェッチされる。状態変化追跡ロジック９１４は、後続の命令に対してハザードをつくり出すことができる型式であるとして、ＭＴＣ０命令を検出する。
【００５１】
第２のクロック・サイクル中、ＪＡＬＲ．ＨＢ命令がフェッチされる。ハザードバリア追跡ロジック付飛び越し９１２は、前にあった任意のハザードを消去したい飛び越し命令としてこの命令を検出する。飛び越し命令がハザードを消去すべきことを指示しなかった場合には、分岐予測ロジック９１６は、プロセッサ９００のプログラムカウンタが、予測した目標アドレスから命令をフェッチすることを開始するようにする。したがって、プロセッサ９００のパイプライン内の飛び越し命令の後に続く命令は、予測した目標アドレスに関連する新しい命令ストリームであり、メモリ内の飛び越し命令に逐次続く命令ではない。上述の通り、通常このことは利点であろう。
【００５２】
しかし、ハザードが飛び越しの一部として消去されることをプログラマーが保証したい場合、プログラマーは、ハザード消去インジケータ付き飛び越し命令を利用する。ハザードバリア追跡ロジック付飛び越し９１２はこの希望を検出し、状態変化追跡ロジック９１４が、ハザードをつくる命令がまだ実行中であることを示していると、現在の飛び越しに対して分岐予測ロジック９１６を無効にする。飛び越しがパイプラインに進むことが許可されると、飛び越しが実行される時最終的にパイプからフラッシュされる命令がその後に続く。上述の通り、最終的に飛び越しが実行され、パイプラインがフラッシュされるまでには、ＭＴＣ０命令によってつくられたハザードのすべては消去されているであろう。
【００５３】
この時点で、当業者は、図７から図９を参照して説明したように、本発明は状態変化追跡ロジック７１４、９１４を利用する必要が無いことを理解すべきである。むしろ、前の命令がハザードをつくったか否かに関係なく、ハザードバリア追跡ロジック付飛び越し７１２、９１２単独でＮサイクルの遅れを指定しても良く（図７を参照）、あるいは、分岐予測ロジック９１６を無効にしても良い（図９を参照）。つまり、状態変化追跡ロジックが実施されない場合、ハザードバリア追跡ロジック付飛び越しは、発行制御がｎサイクルにわたってストールするようにするか、または現在プロセッサのパイプライン内にハザードが存在しているか否かに関係なく現在の飛び越し命令に対して分岐予測を無効にする。そのような実施例は、本発明の実施を簡単にするので、ハザードをつくる命令の追跡に関連するハードウエアを必要としないであろう。しかし、状態変化追跡ロジック７１４、９１４を利用すると、ハザードをつくる命令が実行中の場合にのみ効果のあるように本発明を最適化する。それ以外の場合、ハザードバリア・インジケータは、ハザードバリア・インジケータを含まない飛び越し命令とまったく同様に実行する。
【００５４】
次に図１０を参照すると、ハザード消去を飛び越し命令でオーバーレイするための追加的な命令ＪＲ．ＨＢのブロック図１０００が示されている。ＪＲ．ＨＢ命令は、ＪＲ．ＨＢ  ｒｓの型式をしており、レジスタｒｓの中で指定される命令アドレスの飛び越しを遂行するとともに、実行ハザードと命令ハザードのすべてを消去する。ＪＲ．ＨＢ命令は、上に説明したＪＡＬＲ．ＨＢ命令とまったく同様に動作する。しかし、（ＪＡＬＲ．ＨＢ命令におけるように）リターン・リンク・アドレスを自動的に指定するのではなく、プログラマーは、他のＪＲ．ＨＢ命令を使用して、プログラマー自身がリターン・アドレスを指定するオプションが与えられる。
【００５５】
図４から図１０を参照した上記説明は、ハザード消去インジケータを飛び越し動作でオーバーレイするための代替可能な実施例と方法を例示してきた。本発明とその目的、特徴および利点を詳細に説明してきたが、他の実施例は本発明によって包含されている。ハードウエアを使用する本発明の実施例だけでなく、例えば、コードを格納するように構成されたコンピュータ可使用（例えば、可読）媒体の中に配置される、コンピュータ可読プログラムコード（例えばソフトウエア）内で本発明を具体化しても良い。このコードは、本明細書で開示される本発明の機能、製造、モデル化および試験、またはそれらのいずれかを利用可能にする。例えば、これは、汎用プログラミング言語（Ｃ、Ｃ＋＋など）およびＧＤＳＩＩと、Ｖｅｒｉｌｏｇ、ＨＤＬ、ＶＨＤＬ、ＡＨＤＬ（アルテラ・ハードウエア記述言語）等を含むハードウエア記述言語（ＨＤＬ）の型式をしたコンピュータ可読プログラムコード、またはデータベース、業界で入手可能なプログラミングと回路（つまり回路図）またはそのいずれかのキャプチャー・ツールの使用を通じて達成される。このコードは、半導体メモリ、磁気ディスク、（例えば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなどの）光ディスクを含む既知のコンピュータが可使用媒体内に配置され、あるいは、コンピュータ可使用（例えば、可読）伝送媒体（例えば、搬送波またはデジタル媒体、光媒体またはアナログをベースとした他の媒体）の中で具体化されるコンピュータ・データ信号として配置される。したがって、このコードは、インターネットまたはイントラネットを含む通信ネットワークを介して伝送されうる。理解されることは、上に説明したように、本発明によって得られた機能と与えられた構造、またはそのいずれかは、コード（例えば、ＨＤＬ、ＧＤＳＩＩなど）の中で具体化されるプロセッサで表されても良いし、さらに集積回路の生産と一部としてハードウエアに変換されても良い。また本発明は、ハードウエアとコードとの結合として具体化されても良い。
【００５６】
更に、図７から図９の中で説明した機能ブロックは、マイクロプロセッサのフェッチ・ステージに結合されているように示されているが、マイクロプロセッサの他のステージに配置されても良く、あるいは、代替方法として別々に離されて各種処理ステージに配置されても良いことを当業者は理解できるであろう。つまり、分岐予測ロジックは、プロセッサのフェッチ・ステージ内に配置されても良く、ハザードバリア追跡ロジック付飛び越しは、プロセッサのデコードステージ内に配置されても良い。重要なことは、上に説明してきたように、ハザードバリア追跡ロジック付飛び越しが飛び越し動作の一部としてハザード消去の機能を実施することができることである。
【００５７】
最後に、特許請求の範囲によって定義される本発明と同じ目的を実行するために、本発明の趣旨と範囲を逸脱することなく、他の構造を設計したり改造したりするための基礎として、開示した概念と特定の実施例を容易に使用することができることを当業者は理解すべきである。
【図面の簡単な説明】
【００５８】
【図１】従来技術による４ステージ・パイプライン・マイクロプロセッサのブロック図を示す図である。
【図２】従来技術による並列パイプライン・マイクロプロセッサのブロック図を示す図である。
【図３】命令ハザードを有する命令列を実行する従来技術による並列パイプライン・マイクロプロセッサのブロック図を示す図である。
【図４】ＭＩＰＳ３２アーキテクチャ内の命令ハザードをリストした表を示す図である。
【図５】ＭＩＰＳ３２アーキテクチャ内の命令ハザードをリストした表を示す図である。
【図６】ハザード消去インジケータによってオーバーレイされるＭＩＰＳ３２アーキテクチャ内の飛び越し命令を示す図である。
【図７】本発明の実施例によるハザード消去機構を組み込んだパイプライン型マイクロプロセッサのブロック図を示す図である。
【図８】本発明に従ってハザード消去付き飛び越し命令をオーバーレイする方法を示す流れ図を示す図である。
【図９】本発明の代替可能な実施例によるハザード消去機構を組み込んだパイプライン型マイクロプロセッサのブロック図を示す図である。
【図１０】ハザード消去インジケータによってオーバーレイされるＭＩＰＳ３２アーキテクチャ内の飛び越し命令を示す図である。
【図１】
2005538450.tif 000004
【図２】
2005538450.tif 000005
【図３】
2005538450.tif 000006
【図４】
2005538450.tif 000007
【図５】
2005538450.tif 000008
【図６】
2005538450.tif 000009
【図７】
2005538450.tif 000010
【図８】
2005538450.tif 000011
【図９】
2005538450.tif 000012
【図１０】
2005538450.tif 000013
【国際調査報告】
2005538450.tif 000014
2005538450.tif 000015