(57)【要約】データプロセッサ（２００）はパイプライン実行ユニット（１２０）を備える。その実行の結果、オペランドレジスタの内容がデスティネーションレジスタに記憶されることになる第１の命令が、命令のクラスのうちの１つであるかどうかが判定される。第１の命令の実行が完了する前に、デスティネーションレジスタを参照する第２の命令が受信される。パイプライン実行ユニット（１２０）内で第２の命令をストールさせることなく、第２の命令が、オペランドレジスタの内容を使用して実行される。
2007500406.tif 000002
【特許請求の範囲】
【請求項１】
パイプライン実行ユニット（１２０）を備えたデータプロセッサ（２００）に使用する方法であって、
その実行の結果、オペランドレジスタの内容がデスティネーションレジスタに記憶されることになる第１の命令が、命令のクラスのうちの１つであるかどうかを判定するステップと、
前記第１の命令の実行が完了する前に、前記デスティネーションレジスタを参照する第２の命令を受け取るステップと、
前記パイプライン実行ユニット（１２０）内で前記第２の命令をストールさせることなく、前記オペランドレジスタの内容を使用して前記第２の命令を実行するステップとを有する方法。
【請求項２】
前記オペランドレジスタを、前記実行するステップの前に、以前に前記デスティネーションレジスタと関連付けられていた前記第２の命令のオペランド識別子フィールドと関連付けるステップを更に有する請求項１に記載の方法。
【請求項３】
前記関連付けるステップは、
前記デスティネーションレジスタのレジスタ識別子を、リダイレクトレジスタ（３１０）の照合フィールドに記憶するステップと、
前記オペランドレジスタのレジスタ識別子を、前記リダイレクトレジスタ（３１０）の置換フィールドに記憶するステップとを更に有する請求項２に記載の方法。
【請求項４】
前記実行するステップは、
前記第２の命令のオペランドレジスタ識別子と前記照合フィールドの内容を比較して、照合信号を供給するステップと、
前記照合フィールドの前記内容に応じて、前記オペランドレジスタ識別子または前記オペランドレジスタを前記置換フィールドの内容で置換して、新しいレジスタ識別子を供給するステップと、
前記新しいレジスタ識別子を使用して前記第２の命令を実行するステップとを更に有する請求項３に記載の方法。
【請求項５】
パイプライン実行ユニット（１２０）を備えたデータプロセッサ（２００）に使用する方法であって、
実行の結果、オペランドレジスタの内容がデスティネーションレジスタに記憶されることになる第１の命令が、命令のクラスのうちの１つであるかどうかを判定するステップと、
前記第１の命令が前記命令のクラスのうちの１つである場合に、前記デスティネーションレジスタと関連付けられているデスティネーションレジスタ識別子をリダイレクトレジスタの照合フィールドに、オペランドと関連付けられているオペランドレジスタ識別子を前記リダイレクトレジスタの置換フィールドに、および有効ビットを前記リダイレクトレジスタの有効フィールドに記憶するステップと、
前記第１の命令の実行が完了する前に第２の命令を受け取るステップと、
前記有効ビットが所定の論理状態にある場合に、前記第２の命令の第１のオペランドレジスタ識別子と前記照合フィールドの内容を比較するステップと、
前記第１のオペランドレジスタ識別子が前記照合フィールドの前記内容と一致する場合、前記パイプライン実行ユニット（１２０）内で前記第２の命令をストールさせることなく、前記置換フィールドが示すレジスタの内容を使用して前記第２の命令を実行するステップとを有する方法。
【請求項６】
前記第１の命令が前記命令のクラスのうちの１つである場合に、前記第１の命令の符号ビットを前記リダイレクトレジスタの符号フィールドに更に記憶するステップと、
前記リダイレクトレジスタの前記符号ビットに応じて、前記第２の命令の実行の結果の符号ビットを選択的に変更するステップとを更に有する請求項５に記載の方法。
【請求項７】
前記有効ビットが前記所定の論理状態にある場合に、前記第２の命令の第２のオペランドレジスタ識別子と前記照合フィールドの前記内容を比較するステップと、
前記第１のオペランドレジスタ識別子または前記第２のオペランドレジスタ識別子のいずれかが前記照合フィールドの前記内容と一致する場合、前記パイプライン実行ユニット（１２０）内で前記第２の命令をストールさせることなく、前記置換フィールドが示す前記レジスタの前記内容を使用して前記第２の命令を実行するステップとを更に有する請求項５に記載の方法。
【請求項８】
それぞれがオペコード、第１のオペランドのための第１のオペランドレジスタ識別子、およびデスティネーションレジスタのためのデスティネーションレジスタ識別子を少なくとも含む第１の命令と第２の命令とを順番に供給するための出力を備えた発行論理回路（１１０）と、
読出しアドレス入力および読出しデータ出力を備えた読出しポート、および書込みポートを備えたレジスタファイル（１５０）と、
前記発行論理回路（１１０）の前記出力と結合された第１の入力、前記レジスタファイル（１５０）の前記読出しデータ出力に結合された第２の入力、および前記レジスタファイル（１５０）の前記書込みポートに結合された出力を備えたパイプライン実行ユニット（１２０）とを備えたデータプロセッサ（２００）であって、前記データプロセッサは、
前記第２の命令の前記第１のオペランドレジスタ識別子を前記第１の命令の前記第１のオペランドレジスタ識別子で選択的に置換するため、前記発行論理回路（１１０）の前記出力に結合された第１の入力と、前記レジスタファイル（１５０）の前記読出しデータ出力に結合された第２の入力と、前記レジスタファイル（１５０）の前記読出しアドレス入力に結合された出力とを備えたリダイレクト論理回路（２１０）を備えるデータプロセッサ（２００）。
【請求項９】
前記第１の命令の実行の結果、前記第１の命令の前記デスティネーションレジスタが、前記第１の命令の前記第１のオペランドレジスタの前記内容を格納するようになると判定された場合に、前記リダイレクト論理回路（２１０）は、前記第２の命令の前記第１のオペランドレジスタ識別子を前記第１の命令の前記第１のオペランドレジスタ識別子で置換する請求項８に記載のデータプロセッサ（２００）。
【請求項１０】
前記リダイレクト論理回路（２１０）は、
出力端子を有するリダイレクト検出論理回路（３００）と、
前記発行論理回路（１１０）の前記出力に結合され、かつ前記パイプライン実行ユニット（１２０）のステージと関連付けられており、前記リダイレクト検出論理回路（３００）の前記出力端子に結合された有効フィールド、前記デスティネーションレジスタ識別子を受け取るための照合フィールド、ならびに前記第１のオペランドレジスタ識別子および第２のオペランドレジスタ識別子のうちの選択されたほうを受け取るための置換フィールドを少なくとも有する第１のリダイレクトレジスタ（３１０）と、
前記第２の命令の前記第１のオペランドレジスタ識別子を受け取るための第１の入力端子、前記第１のリダイレクトレジスタ（３１０）の前記照合フィールドに結合された第２の入力端子、前記第１のリダイレクトレジスタ（３１０）の前記有効フィールドに結合された制御入力端子、および出力端子を備えた第１の比較器（３３４）と、
前記第１のオペランドレジスタ識別子を受け取るための第１の入力端子、前記第１のリダイレクトレジスタ（３１０）の前記置換フィールドに結合された第２の入力端子、前記第１の比較器（３３４）の前記出力端子に結合された制御入力端子、および前記第２の命令の前記第１のオペランドに対して新しいレジスタ識別子を供給する出力端子を備えた第１のマルチプレクサ（３４２）とを備える請求項９に記載のデータプロセッサ（２００）。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にデータプロセッサに関し、より詳細にはパイプラインデータプロセッサに関する。
【背景技術】
【０００２】
データプロセッサの中には、より高い性能を得るためにパイプライン処理と呼ばれる技術を使用しているものがある。パイプライン処理は、命令処理タスクを、小さなモジュールのサブタスクに分割する技術であり、このサブタスクのそれぞれが、パイプラインサイクルと呼ばれる特定の非常に短い（atomic）期間に実行されうる。タスクをこのような小さなサイクルに分割することによって、データプロセッサは、ある命令の実行中に別の命令をフェッチしながら、第３の命令の結果をレジスタファイルにライトバックすることができる。このようにすれば、命令を個々に完了させるには数サイクルを要しても、全体のスループットを１パイプラインサイクルあたり１命令に近づけることができる。
【０００３】
最新のマイクロプロセッサは、この例の３ステージパイプラインよりも高度なパイプラインを備えている。例えば、５ステージパイプラインは、フェッチ、デコード、オペランドへのアクセス、実行、およびライトバックの各ステージを有しうる。パイプラインが長くなるのに伴い、データ処理命令がより複雑になるものの、スループットはほぼ１サイクルあたり１命令に保たれる。
【０００４】
しかし、特定の命令のシーケンスが発生すると問題が生じる。特定の命令のシーケンスにより、パイプライン依存関係と呼ばれる現象が生じることがある。ある命令が、前の命令の実行の結果が利用可能になるまで実行できない場合、オペランド依存関係と呼ばれるタイプのパイプライン依存関係が発生する。例えば、次の命令のシーケンスを考える。
ＡＤＤ  Ｒ２，  Ｒ０，  Ｒ１
ＡＤＤ  Ｒ３，  Ｒ１，  Ｒ２
上記シーケンスでは、第１のレジスタが結果のデスティネーションであり、第２のレジスタと第３のレジスタが入力オペランドを記憶している。Ｒ２は第１のＡＤＤ命令のデスティネーションレジスタであるため、第２のＡＤＤ命令の実行は、第１のＡＤＤ命令の結果に依存しており、第１のＡＤＤ命令の結果がわかるまで行うことができない。
【０００５】
別のタイプの依存関係にロード依存関係と呼ばれるものがある。例えば、次の命令のシーケンスを考える。
ＭＯＶ  Ｒ０，  （Ｒ１）
ＡＤＤ  Ｒ３，  Ｒ０，  Ｒ２
このシーケンスでは、１番目の命令は、レジスタＲ１に記憶されているアドレスが指すメモリの内容を、レジスタＲ０にロードする。ＡＤＤ命令が正しく実行されるかどうかは、レジスタＲ０の新しい値が利用可能かどうかに依存することが明らかである。
【０００６】
マイス・ジョンソンらは、米国特許第４,７３４,８５２号に、バイパス経路を使用して、先のメモリロード操作の結果を、まずレジスタファイルのデスティネーションレジスタにライトしてその後レジスタファイルからリードしなくても、後続の命令に転送できる方法を開示している。このため、新しいレジスタ値がかなり早い時点で利用可能となり、ロード依存関係後に発生するパイプラインのストール時間をできるだけ短縮できる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、実行パイプラインが深いデータプロセッサの中には、結果を生成するパイプラインの各ステージからパイプラインの入力へのバイパス経路を追加して、新しい命令を早く発行できるように中間結果を転送するには、相当の回路領域の追加を要するものがある。このことは、オペランドが、例えば６４ビット長をとりうる浮動小数点実行ユニットにおいて特に当てはまる。更に、命令がパイプラインの終端に達するまで結果が利用できないものがある。
【０００８】
したがって、回路領域の大きな追加を行わなくても、依存関係による悪影響を低減させる別の可能性を利用することが望ましい。本発明の上記の望ましい特徴および性質、およびほかの望ましい特徴および性質は、添付の図面と上記の技術分野と背景技術を併せて読めば、下記の詳細な説明と添付の特許請求の範囲から明らかとなるであろう。
【課題を解決するための手段】
【０００９】
パイプライン実行ユニットを備えたデータプロセッサに使用する方法を提供する。その実行の結果、オペランドレジスタの内容がデスティネーションレジスタに記憶されることになる第１の命令が、命令のクラスのうちの１つであるかどうかが判定される。第１の命令の実行が完了する前に、デスティネーションレジスタを参照する第２の命令が受信される。パイプライン実行ユニット内で第２の命令をストールさせることなく、第２の命令が、オペランドレジスタの内容を使用して実行される。
【００１０】
また、発行論理回路、レジスタファイル、パイプライン実行ユニットおよびリダイレクト論理回路を備えたデータプロセッサが提供される。発行論理回路は、それぞれがオペコード、第１のオペランドのための第１のオペランドレジスタ識別子、およびデスティネーションレジスタのためのデスティネーションレジスタ識別子を少なくとも含む第１の命令と第２の命令とを順番に供給するための出力を備える。レジスタファイルは、読出しアドレス入力および読出しデータ出力を備えた読出しポート、および書込みポートを備える。パイプライン実行ユニットは、発行論理回路の出力と結合された第１の入力、レジスタファイルの読出しデータ出力に結合された第２の入力、およびレジスタファイルの書込みポートに結合された出力を備える。リダイレクト論理回路は、第２の命令の第１のオペランドレジスタ識別子を第１の命令の第１のオペランドレジスタ識別子で選択的に置換するため、発行論理回路の出力に結合された第１の入力と、レジスタファイルの読出しデータ出力に結合された第２の入力と、レジスタファイルの読出しアドレス入力に結合された出力とを備える。
【発明を実施するための最良の形態】
【００１１】
以下、図面を参照して本発明を記載する。図面において同じ参照符号は類似する要素を参照している。
【００１２】
以下の詳細な説明は、本来例示的なものに過ぎず、本発明または本発明の用途および利用を限定することを意図したものではない。更に、上記の技術分野、背景技術、発明の開示、あるいは以下の詳細な説明に明示または暗示した理論により拘束されることを意図するものではない。
【００１３】
図１は、従来技術で公知のデータプロセッサのパイプライン実行ユニット１００のブロック図である。実行ユニット１００は浮動小数点ユニットであり、加算ユニット１２０、乗算ユニット１３０、および浮動小数点レジスタファイル１５０を有する。発行論理回路１１０は、加算ユニット１２０と乗算ユニット１３０に命令を発行する役目を担っている。一般に、命令１１２などの命令は、“ＯＰ  ＣＯＤＥ”で示すオペコードフィールド、“Ｒｓ”で示す第１のオペランドレジスタ識別子、“Ｒｔ”で示す第２のオペランドレジスタ識別子、および“Ｒｄ”で示すデスティネーションレジスタ識別子を有する。この命令セットの特定の命令の一部では、Ｒｔフィールドがなかったり、任意選択で即値オペランドフィールドが存在することがあるが、このような異なる命令は後述するリダイレクションメカニズムの動作に影響を及ぼすことがないため、これ以上触れることはしない。
【００１４】
実行ユニット１００は、単一発行（single issue）の実行ユニットであり、このため、発行ロジック１１０は、１パイプラインサイクルにつき１命令を発行し、命令の種類に基づいて、この命令を加算ユニット１２０、乗算ユニット１３０のいずれかに供給する。加算ユニット１２０は、整合ステージ１２２、加算ステージ１２４、および正規化ステージ１２６の３つのパイプラインステージを有する。乗算ユニット１３０も、ブースの符号化ステージ１３２、乗算アレイステージ１３４、および最終加算および丸めステージ１３６の３つのステージを有する。
【００１５】
加算ユニット１２０または乗算ユニット１３０に発行された命令は、それぞれのパイプラインを下っていき、各パイプラインサイクルが終了すると１ステージずつ進む。入力オペランドは、次のようにして、選択されたユニットの第１のステージに供給される。命令１１２のＲｓフィールドとＲｔフィールドが、発行ロジック１１０によってバイパス回路１４０とレジスタファイル１５０の両方に出力される。オペランド依存関係が存在しない場合、オペランドＲｓとＲｔは、レジスタファイル１５０から、バイパス回路１４０を介してバス１６０，１７０に戻される。直前のパイプラインステージで完了したばかりの命令に基づきオペランド依存関係が存在する場合、オペランドＲｓとＲｔは、バイパス回路１４０によって受け取られ、適切なオペランドバスに転送される。未だ完了していない前の命令との間に１つ以上の依存関係が存在する場合、発行ロジック１１０は、新しい命令が依存しているその前の命令が処理を完了するまで、新しい命令の発行をストールさせる。この場合、依存関係を生じさせた前の命令が最終的に完了すると、その結果が、バイパス回路１４０を介して、バス１６０および１７０に渡され、ストールされていた新しい命令が発行可能になる。これと並行して、バイパス回路１４０は新しい値をレジスタファイル１５０にライトする。
【００１６】
先頭の２つのパイプラインステージの一方において、命令に基づくオペランド依存関係が存在する場合、前の命令が完了するまで、新しい命令の発行がストールされる。このストールの結果、ハードウェアが遊休状態となり、有益な作業を実行していないことになる。この種のストールの発生回数を低減させるか、あるいはストールが発生した場合でもこれを是正することが望ましいと考えられる。
【００１７】
例えば、加算ユニット１２０の整合ステージは、それぞれオペランドバス１６０，１７０を介して、第１のオペランド値と第２のオペランド値を受け取るための入力を有する。これらの値、ＯＰ  ＣＯＤＥ、デスティネーションレジスタ指定子Ｒｄ、およびデコードまたは一部デコードされたほかのさまざまなフィールドが、パイプラインステージを進んでいく。ある命令が正規化ステージ１２６で処理されると、バイパス回路１４０の入力に供給される。バイパス回路１４０は、パイプラインサイクルを節約するため、前の命令の結果と後続の命令の入力とをつなぐ経路となるために追加されており、これがなければ、レジスタファイル１５０のデスティネーションレジスタに結果をライトして、その後これをリードすることが必要となる。
【００１８】
図２は、本発明に係るデータプロセッサのパイプライン実行ユニット２００のブロック図である。図１と同様に、実行ユニット２００は、浮動小数点ユニットであるが、整数、ベクトルなどほかのどのような種類の実行ユニットであってもよい。実行ユニット２００は図１の実行ユニット１００と似ているが、リダイレクト論理回路２１０を有する点が異なり、これは、実行ユニット２００のほかの構成要素と連携して、オペランド依存関係の原因となる可能性のある命令のクラスが、パイプラインをストールさせないように阻止する。リダイレクト論理回路２１０は、通常はレジスタ依存関係の原因となる数種類の命令を検出して、正しい結果を与えるレジスタ識別子で置換することによって、この命令を修正する。
【００１９】
第１の種類の命令は、レジスタ間の転送命令であり、この後に、このレジスタ間の転送命令のデスティネーションレジスタをオペランドレジスタとして使用する別の命令がくるものである。例えば、次の命令のシーケンスを考える。
ＭＯＶ  Ｒ１，  Ｒ０
ＡＤＤ  Ｒ３，  Ｒ２，  Ｒ１
上記において、第１の命令はレジスタＲ０の内容をレジスタＲ１に移動する転送オペレーションであり、第２の命令は、Ｒ１の内容をＲ２の内容に加算して、この合計をレジスタＲ３に格納する加算オペレーションである。公知のシステムでは、このシーケンスにより、レジスタファイル、バイパス回路１４０のいずれかでＭＯＶ命令の結果が利用可能になるまで、ＡＤＤ命令の発行が阻止される依存関係が発生する。実行ユニット２００は、第２のオペランドに０の値を使用する同等の加算オペレーションを実行することによって、加算ユニット１２０を使用してＭＯＶ命令を実際に実行する。このため、通常であれば、正規化ステージ１２６がバイパス回路１４０に結果を供給するまで、第２の命令を待機させる必要がある。しかし、実行ユニット２００では、リダイレクト論理回路２１０により、ＡＤＤ命令のＲ１の内容がＲ０の内容で置換され、Ｒ０の内容が第２のオペランドとしてＲ０の内容を使用して、ＡＤＤ命令が直ちに発行される。このようにして、ＡＤＤ命令が正しく実行される。
【００２０】
第２の命令の種類は、オペランドの１つが０であるＡＤＤ命令であり、この後に、この加算命令のデスティネーションレジスタをオペランドレジスタとして使用する別の命令が続くものである。例えば、次の命令のシーケンスを考える。
ＡＤＤ  Ｒ２，  Ｒ１，  Ｒ０
ＡＤＤ  Ｒ４，  Ｒ３，  Ｒ２
第１のＡＤＤ命令は、Ｒ０の内容をＲ１の内容に加算して、この合計をレジスタＲ２に格納する加算オペレーションであり、第２の命令は、Ｒ２の内容をＲ３の内容に加算して、この合計をレジスタＲ４に格納する加算オペレーションである。公知のシステムでは、このシーケンスにより、第１のＡＤＤ命令の結果が利用可能になるまで、第２のＡＤＤ命令の発行が阻止される依存関係が発生する。しかし、実行ユニット２００では、Ｒ１（Ｒ０）＝０の場合、リダイレクト論理回路２１０により、第２のＡＤＤ命令のＲ２の内容がＲ０（Ｒ１）の内容で置換され、Ｒ０（Ｒ１）の内容を第２のオペランドとして使用して、第２のＡＤＤ命令が直ちに発行される。
【００２１】
第３の命令の種類は、オペランドの１つが１である乗算命令であり、この後に、この乗算命令のデスティネーションレジスタをオペランドレジスタとして使用する別の命令がくるものである。例えば、次の命令のシーケンスを考える。
ＭＵＬ  Ｒ２，  Ｒ１，  Ｒ０
ＡＤＤ  Ｒ４，  Ｒ３，  Ｒ２
第１の命令は、レジスタＲ０の内容にレジスタＲ１の内容を掛けて、この積をレジスタＲ２に記憶する乗算オペレーションであり、第２の命令は、Ｒ２の内容をＲ３の内容に加算して、この合計をレジスタＲ４に格納する加算オペレーションである。公知のシステムでは、このシーケンスにより、ＭＵＬ命令の結果が利用可能になるまで、ＡＤＤ命令の発行が阻止される依存関係が発生する。しかし、実行ユニット２００では、Ｒ１（Ｒ０）＝１の場合、リダイレクト論理回路２１０により、ＡＤＤ命令のＲ２の内容がＲ０（Ｒ１）の内容で置換され、Ｒ０（Ｒ１）の内容を第２のオペランドとして使用して、ＡＤＤ命令が直ちに発行される。
【００２２】
これらの命令シーケンスのすべてにおいて、公知の実行ユニットは、第１の命令の結果が転送可能になるまで、第２の命令の発行をストールさせる。しかし、実行ユニット２００は、実際に参照されているレジスタをあるレジスタで置換する条件を認識して、命令を発行可能にする。このような実行ユニットを使用しているデータプロセッサは、コードの所定のセクションを短時間で処理するか、あるいは命令を発行するコンパイラに課す制約を少なくする。
【００２３】
実行ユニット２００は、更にほかのレジスタ置換を実行して、参照されたレジスタをあるレジスタで置換し、結果の符号ビットを強制的に変更することによって、発行可能なほかの命令を識別することにより、パイプラインのストールを防止する。実行ユニット２００では、オペランドが２種類の形式のうちの一方で処理される。１番目の形式は、ＩＥＥＥの通常（３２ビット）の浮動小数点形式であり、１つの符号ビット、８つの指数部ビットおよび２３の小数部ビットによって数値を表現する。２番目の形式は、ＩＥＥＥの倍精度（６４ビット）形式であり、１つの符号ビット、１１の指数部ビットおよび５２の小数部ビットによって数値を表現する。これらの数値は符号ビットを明示的に有するため、以下のシーケンスの第２の命令は、Ｒ０＝０でかつＲ１の符号ビットが負の場合、
ＡＤＤ  Ｒ２，  Ｒ１，  Ｒ０
ＡＤＤ  Ｒ４，  Ｒ３，  Ｒ２
第２のオペランドにＲ１を使用し、負の数を示すように結果の符号ビットを１に設定することによって発行できる。
【００２４】
この特徴により、ほかの命令を、リダイレクト論理回路２１０が対応する命令の組に追加することができる。このような命令には、数値の絶対値をとるＡＢＳと、数値の符号ビットを否定すなわち変更するＮＥＧがある。この２つの命令に対し、リダイレクト論理回路２１０は、オペランドが適切に置換されると、符号ビットの値を変更するメカニズムを実装する。リダイレクト論理回路２１０が符号ビットの値を変更する命令には、このほか、被減数（すなわち式Ａ−ＢのＡ）が０である減算命令と、一方のオペランドが負の値である乗算命令がある。減数（すなわち、式Ａ−ＢのＢ）が０である減算命令は、０にＡＤＤする命令と同等であり、この場合、リダイレクト論理回路２１０は、符号ビットを変更せず、デスティネーションオペランドを第１のオペランドで置換する。１つのオペランドが０である乗算命令の結果は０となり、この場合、リダイレクト論理回路２１０は、デスティネーションレジスタを０のオペランドレジスタで置換する。ここに挙げた命令は、すべてを網羅するものではない点に留意されたい。ここに記載した原理に従って、リダイレクト論理回路２１０が対応する命令の組に、データプロセッサの特定の命令セットに固有なほかの命令を追加してもよい。
【００２５】
次に、上に記載したメカニズムの実装の詳細の一部を図３に示し、この図は、図２のリダイレクト論理回路２１０の一部をブロック図、一部を論理図で示している。リダイレクト論理回路２１０は、通常、リダイレクト検出論理回路３００、第１のリダイレクトレジスタ３１０、第２のリダイレクトレジスタ３２０、比較器の組３３０、マルチプレクサの組３４０を有する。リダイレクト論理回路３００は、バス１６０，１７０に接続された入力と、出力とを備える。リダイレクト論理回路３００の機能は、前述のようなレジスタ置換に適した条件を検出して、第１のリダイレクトレジスタ３１０にエントリを作成し、次の命令に対する依存関係を検出し、適切なレジスタ置換を行わせることにある。実行ユニット２００において、バス１６０，１７０は、バイパス論理回路から返されるオペランドＲｓおよびＲｔの値のほかに、オペランドのさまざまな状態を示すため、バイパス論理回路１４０によってデコードされた信号も伝える。例えば、バイパス論理回路１４０は、数値の指数部フィールドと小数部フィールドが０であること、または指数部フィールドが、その数値の形式において１の値を表すのに使用する所定値であることを検出するハードウェアを備える。例えば、通常、値０を表すのは、指数部フィールドと小数部フィールドがいずれも０の場合である。しかし、実行ユニット２００により、小数部フィールドの値に関わらず、０の指数部フィールドのみによって０を表すことが可能となる。値１は、０の小数部フィールドと、所定値（通常形式では１２７、倍精度形式では１０２３）の指数部フィールドによって表される。リダイレクト論理回路３００は、この情報とＯＰ  ＣＯＤＥフィールドの組み合わせから、０を足す加算と１による乗算を検出することができる。
【００２６】
第１のリダイレクトレジスタ３１０は、レジスタ指定子フィールドＲｓ，Ｒｔ，Ｒｄを受け取るための入力、リダイレクト検出論理回路３００の出力に接続された入力、および出力を備える。第２のリダイレクトレジスタ３２０は、レジスタ３１０の出力に接続された入力と、３つの出力を備える。各リダイレクトレジスタは、“Ｓ”で示す符号ビットフィールド、“Ｖ”で示す有効ビットフィールド、“ＭＡＴＣＨ”で示すレジスタ識別子照合フィールドおよび“ＳＵＢＳＴ”で示す置換フィールドの各フィールドを有する。第１のリダイレクトレジスタ３１０の出力は、パイプラインが進んだことを示すクロック（図示せず）と同期して、第２のリダイレクトレジスタ３２０にシフトされる。
【００２７】
比較器の組３３０は、４つの比較器３３２，３３４，３３６，３３８を有する。比較器３３２は、レジスタ指定子フィールドＲｓを受け取るための第１の入力、第２のリダイレクトレジスタ３２０のＭＡＴＣＨフィールドに接続された第２の入力、第２のリダイレクトレジスタ３２０のＶフィールドに接続された制御入力、および出力を備える。比較器３３４は、レジスタ指定子フィールドＲｓを受け取るための第１の入力、第１のリダイレクトレジスタ３１０のＭＡＴＣＨフィールドに接続された第２の入力、第１のリダイレクトレジスタ３１０のＶフィールドに接続された制御入力、および出力を備える。比較器３３６は、レジスタ指定子フィールドＲｔを受け取るための第１の入力、第２のリダイレクトレジスタ３２０のＭＡＴＣＨフィールドに接続された第２の入力、第２のリダイレクトレジスタ３２０のＶフィールドに接続された制御入力、および出力を備える。比較器３３８は、レジスタ指定子フィールドＲｔを受け取るための第１の入力、第１のリダイレクトレジスタ３１０のＭＡＴＣＨフィールドに接続された第２の入力、第１のリダイレクトレジスタ３１０のＶフィールドに接続された制御入力、および出力を備える。
【００２８】
各比較器は、現在の命令のオペランドを１〜２つ前の命令のオペランドレジスタの値で置換するべきかどうかを決定する。このため、比較器３３２は、２つ前の命令のデスティネーションレジスタ識別子Ｒｄが、現在の命令の第１のオペランドレジスタ識別子Ｒｓと同じであるかどうかを検出する。比較器３３４は、２つ前の命令のデスティネーションレジスタ識別子Ｒｄが、現在の命令の第２のオペランドレジスタ識別子Ｒｔと同じであるかどうかを検出する。比較器３３２は、１つ前の命令のデスティネーションレジスタ識別子Ｒｄが、現在の命令の第１のオペランドレジスタ識別子Ｒｓと同じであるかどうかを検出する。比較器３３８は、１つ前の命令のデスティネーションレジスタ識別子Ｒｄが、現在の命令の第２のオペランドレジスタ識別子Ｒｔと同じであるかどうかを検出する。
【００２９】
マルチプレクサ３４０の組は、マルチプレクサ３４２，３４４を有する。マルチプレクサ３４２は、Ｒｓを受け取るための第１の入力、第２のリダイレクトレジスタ３２０のＳＵＢＳＴフィールドに接続された第２の入力、第１のリダイレクトレジスタ３１０のＳＵＢＳＴフィールドに接続された第３の入力、比較器３３２，３３４の出力に接続された制御入力、および新規（ＮＥＷ）Ｒｓを供給するための出力を備える。マルチプレクサ３４４は、Ｒｔを受け取るための第１の入力、第１のリダイレクトレジスタ３１０のＳＵＢＳＴフィールドに接続された第２の入力、第２のリダイレクトレジスタ３２０のＳＵＢＳＴフィールドに接続された第３の入力、比較器３３６，３３８の出力に接続された制御入力、および新規（ＮＥＷ）Ｒｔを供給するための出力を備える。
【００３０】
マルチプレクサ３４２，３４４の両方は、適切な入力を選択して、それぞれＮＥＷ  Ｒｓ値、ＮＥＷ  Ｒｔ値として供給する多重化および論理回路を有する。リダイレクトレジスタ３１０，３２０のいずれも有効なエントリを有さない場合、マルチプレクサ３４２，３４４は、ＲｓおよびＲｔを選択して、それぞれＮＥＷ  Ｒｓ、ＮＥＷ  Ｒｔとして供給する。リダイレクトレジスタ３１０，３２０の一方のみが有効なエントリを有する場合、マルチプレクサ３４２，３４４は、Ｒｓ，Ｒｔの一方が、対応するＭＡＴＣＨフィールドの内容と等しければ、その有効なリダイレクトエントリに対応するほうのＳＵＢＳＴ値を、それぞれＮＥＷ  Ｒｓ、ＮＥＷ  Ｒｔとして供給する。リダイレクトレジスタ３１０，３２０の両方が有効なエントリを有する場合、マルチプレクサ３４２，３４４は、Ｒｓ，Ｒｔの少なくとも一方が、対応するＭＡＴＣＨフィールドの内容と等しければ、その有効なリダイレクトエントリに対応するＳＵＢＳＴ値を、それぞれＮＥＷ  Ｒｓ、ＮＥＷ  Ｒｔとして供給する。リダイレクトレジスタ３１０，３２０の両方が有効なエントリを有し、ＭＡＴＣＨフィールドの値が等しい場合、マルチプレクサ３４２，３４４は最後に発行された命令を優先する、すなわち、これらのマルチプレクサは、リダイレクトレジスタ３１０のＳＵＢＳＴフィールドによって供給される入力を選択する。
【００３１】
発行論理回路１１０では、通常の依存関係チェックは、通常の依存関係チェック回路（図示せず）と並行して行われる点に留意されたい。ここに記載したパイプラインストール低減技術は、通常の依存関係チェックを無効にするように動作する。通常の依存関係チェック回路は、前に発行されたが、まだ完了していない命令間の依存関係、ＲｓオペランドとＲｔオペランドの間の依存関係を検出する、“ｒｓ＿ｓｔａｌｌ”と“ｒｔ＿ｓｔａｌｌ”で示す２つの信号をそれぞれ出力する。図２，３には図示されていないが、リダイレクト論路回路にある追加の論理回路は、比較器３４２の出力または比較器３４４の出力のいずれかが真の場合に、“ｋｉｌｌ＿ｒｓ＿ｓｔａｌｌ”で示す信号を生成し、比較器３４６の出力か比較器３４８の出力が真の場合に、“ｋｉｌｌ＿ｒｔ＿ｓｔａｌｌ”で示す信号を生成する。ｋｉｌｌ＿ｒｓ＿ｓｔａｌｌとゲート演算したｒｓ＿ｓｔａｌｌが真の場合、または、ｋｉｌｌ＿ｒｔ＿ｓｔａｌｌとゲート演算したｒｔ＿ｓｔａｌｌが真の場合、発行論理回路１１０は、次に命令１１２の発行をストールする。
【００３２】
図に示した実施形態では、実行ユニット２００が単一発行であるため、リダイレクト論理回路２１０が加算ユニット１２０と乗算ユニット１３０によって共有される点に留意されたい。スーパースカラの実装では、ロジックが複雑になるものの、検出および置換の原理は変わらない。
【００３３】
別の実施態様では、パイプライン実行ユニットが２つのステージを有していても、３を超えるステージを有していてもよい。ここに開示したメカニズムを利用するには、命令に必要なオペランド識別子は１つのみである。更に、オペランドの情報が既存のオペランドバスを介して供給されない別の実施形態では、リダイレクト検出論理回路が、オペランドを直接調べて、０であるか、１であるかなどの特定の条件を検出してもよい。
【００３４】
上記の詳細な説明で少なくとも１つの代表的な実施形態を示したが、膨大な数の変形例が存在することを理解されたい。また、この少なくとも１つの代表的な実施形態は例に過ぎず、いかなる形であれ本発明の範囲、利用可能性または構成を限定することを意図するものではないことも理解されたい。上記の詳細な説明は、当業者にとって、少なくとも１つの代表的な実施形態を実装するうえで有用な道標となる。添付の特許請求の範囲とその法的均等物に規定されている本発明の範囲から逸脱することなく、各種要素の機能および構成を様々に変更することができることを理解すべきである。
【図面の簡単な説明】
【００３５】
【図１】従来技術で公知のデータプロセッサのパイプライン実行ユニットのブロック図である。
【図２】本発明に係るデータプロセッサのパイプライン実行ユニットのブロック図である。
【図３】図２のリダイレクト論理回路の一部をブロック図、一部を論理図で示す図である。
【図１】
2007500406.tif 000003
【図２】
2007500406.tif 000004
【図３】
2007500406.tif 000005
【国際調査報告】
2007500406.tif 000006
2007500406.tif 000007
2007500406.tif 000008