(57)【特許請求の範囲】
【請求項１】
複数のパイプラインを持つパイプラインプロセッサであって、第１のパイプラインに関連づけられた第１の条件コードレジスタと第２のパイプラインに関連づけられた第２の条件コードレジスタとを持つパイプラインプロセッサで条件命令を実行する方法において、
最も最近の条件コード値が前記第２の条件コードレジスタに記録されるべきときに、前記最も最近の条件コード値を前記第１の条件コードレジスタに記録し、および、前記最も最近の条件コード値を前記第２の条件コードレジスタに記録すること、
処理されるときに前記最も最近の条件コード値を設定する命令に応じて第１の値または第２の値を持つ条件コードインジケータを設定すること、ここで、前記条件コードインジケータの前記第１の値は前記第２の条件コードレジスタが前記最も最近の条件コード値を持つことを示し、前記条件コードインジケータの前記第２の値は前記第２の条件コードレジスタが前記最も最近の条件コード値とは異なる条件コード値を持つことを示す、
前記条件コードインジケータに基づき、前記第１の条件コードレジスタまたは前記第２の条件コードレジスタの１つから前記最も最近の条件コード値を取り出すこと、
前記取り出された最も最近の条件コード値に応じて前記条件命令が実行されるべきか否かを判定すること、
を具備する方法。
【請求項２】
前記第１の条件コードレジスタは、グローバルレジスタであり、前記第２の条件コードレジスタは、前記第２のパイプラインに局部的なローカルレジスタであり、前記グローバルレジスタおよび前記ローカルレジスタが前記最も最近の条件コード値を持ち、前記条件コードインジケータが前記ローカルレジスタが前記最も最近の条件コード値を持つことを示す前記第１の値を持つとき、
前記第１のパイプラインによって用いられるために、前記グローバルレジスタの更新無しに、前記グローバルレジスタから前記最も最近の条件コード値が取り出され、
前記第２のパイプラインによって用いられるために、前記ローカルレジスタから前記最も最近の条件コード値が取り出される
請求項１記載の方法。
【請求項３】
前記第２のパイプラインは、浮動小数点命令を実行し、浮動小数点更新命令の実行に応じて前記第１の条件コードレジスタおよび前記第２の条件コードレジスタに前記最も最近の条件コード値が自動的に記録される請求項１記載の方法。
【請求項４】
前記第１の条件コードレジスタは、グローバル条件コードレジスタである請求項１記載の方法。
【請求項５】
前記第２の条件コードレジスタは、ローカル条件コードレジスタである請求項１記載の方法。
【請求項６】
前記第１の条件コードレジスタは、ネガティブ（Negative），ゼロ（Zero），キャリー（Carry）およびオーバーフロー（Overflow）の状態ビットの第１のセットを含み、前記第２の条件コードレジスタは、ネガティブ，ゼロ，キャリーおよびオーバーフローの状態ビットの第２のセットを含む請求項１記載の方法。
【請求項７】
前記条件コードインジケータは、単一の状態ビットである請求項１の記載の方法。
【請求項８】
発行ステージが発行論理回路を介して前記条件コードインジケータを設定する請求項１記載の方法。
【請求項９】
前記発行論理回路は、実行ユニットによって実行される複数の下位パイプラインの１つに前記発行ステージから解読された命令を送るように構成される請求項８記載の方法。
【請求項１０】
発行ステージが前記パイプラインプロセッサの解読ステージから解読された命令を受け取るように構成される請求項１記載の方法。
【請求項１１】
パイプラインプロセッサにおいて、
命令を実行する複数のパイプラインと、
第１のパイプラインに関連づけられた第１の条件コードレジスタと、
第２のパイプラインに関連づけられた第２の条件コードレジスタと、
前記第２のパイプラインの実行ステージ論理回路から条件コード値を受け取るように構成される第３の条件コードレジスタと、ここで、前記第１の条件コードレジスタおよび前記第２の条件コードレジスタは前記第３の条件コードレジスタからの条件コード値で更新される、
前記第２の条件コードレジスタが最も最近の条件コード値を含むか否かを示すように構成される条件コードインジケータと、ここで、前記パイプラインプロセッサは、浮動小数点更新命令が実行されるときに前記第１の条件コードレジスタの前記最も最近の条件コード値および前記第２の条件コードレジスタの前記最も最近の条件コード値を更新するように構成され、および、前記パイプラインプロセッサは、前記条件コードインジケータに基づいて前記第１の条件コードレジスタおよび前記第２の条件コードレジスタの１つから前記最も最近の条件コード値を取り出し、前記取り出された最も最近の条件コード値に応じて条件命令を実行するか否かを判定するように構成される、
を具備するパイプラインプロセッサ。
【請求項１２】
前記第２のパイプラインは、浮動小数点命令を実行する請求項１１記載のパイプラインプロセッサ。
【請求項１３】
前記第１の条件コードレジスタは、グローバル条件コードレジスタである請求項１１記載のパイプラインプロセッサ。
【請求項１４】
前記第２の条件コードレジスタは、ローカル条件コードレジスタである請求項１１記載のパイプラインプロセッサ。
【請求項１５】
前記第１のパイプラインは、前記条件コードインジケータから独立した前記第１の条件コードレジスタから前記最も最近の条件コード値を取り出すように構成される請求項１１記載のパイプラインプロセッサ。
【請求項１６】
前記第３の条件コードレジスタは、前記最も最近の条件コード値を変更する命令を実行する前記第２のパイプラインに応じて更新される請求項１１記載のパイプラインプロセッサ。
【請求項１７】
パイプラインプロセッサにおいて、
最も最近の条件コード値が第２の条件コードレジスタに記録されるべきときに前記最も最近の条件コード値を第１の条件コードレジスタおよび前記第２の条件コードレジスタに記録する手段と、
処理されるときに前記最も最近の条件コード値を設定する命令に応じて条件コードインジケータを設定する手段と、ここで、前記条件コードインジケータの第１の値は前記第２の条件コードレジスタが前記最も最近の条件コード値を持つことを示し、前記条件コードインジケータの第２の値は前記第２の条件コードレジスタが前記最も最近の条件コード値とは異なる条件コード値を持つことを示す、
前記条件コードインジケータに基づき、前記第１の条件コードレジスタまたは前記第２の条件コードレジスタの１つから前記最も最近の条件コード値を取り出す手段と、
前記取り出された最も最近の条件コード値に応じて条件命令が実行されるべきか否かを判定する手段と、
を具備するパイプラインプロセッサ。
【請求項１８】
整数命令を実行するパイプライン手段をさらに具備する請求項１７記載のパイプラインプロセッサ。
【請求項１９】
浮動小数点命令を実行するパイプライン手段をさらに具備する請求項１７記載のパイプラインプロセッサ。
【請求項２０】
前記第１の条件コードレジスタは、グローバル条件コードレジスタである請求項１７記載のパイプラインプロセッサ。
【請求項２１】
前記第２の条件コードレジスタは、ローカル条件コードレジスタである請求項１７記載のパイプラインプロセッサ。
【請求項２２】
前記最も最近の条件コード値は、ネガティブ，ゼロ，キャリーおよびオーバーフローの状態ビットを含む請求項１７記載のパイプラインプロセッサ。
【請求項２３】
プロセッサによって実行されたときに、前記プロセッサに、
最も最近の条件コード値が第２の条件コードレジスタに記録されるべきときに、前記最も最近の条件コード値を第１の条件コードレジスタに記録させ、および、前記最も最近の条件コード値を前記第２の条件コードレジスタに記録させ、ここで、前記第１の条件コードレジスタは第１のパイプラインに関連づけられ、前記第２の条件コードレジスタは第２のパイプラインに関連づけられている、
前記最も最近の条件コード値を設定する命令に応じて第１の値または第２の値を持つ条件コードインジケータを設定させ、ここで、前記条件コードインジケータの前記第１の値は前記第２の条件コードレジスタが前記最も最近の条件コード値を持つことを示し、前記条件コードインジケータの前記第２の値は前記第２の条件コードレジスタが前記最も最近の条件コード値とは異なる条件コード値を持つことを示す、
前記条件コードインジケータに基づき、前記第１の条件コードレジスタまたは前記第２の条件コードレジスタの１つから前記最も最近の条件コード値を取り出させ、
前記取り出された最も最近の条件コード値に応じて条件命令が実行されるべきか否かを判定させる、
プログラムコードを含む不揮発性のコンピュータ読み取り可能な記録媒体。
【請求項２４】
前記第２のパイプラインは、浮動小数点命令を実行するように構成され、前記最も最近の条件コード値は、前記第２のパイプラインによる浮動小数点更新命令の実行に応じて前記第１の条件コードレジスタおよび前記第２の条件コードレジスタに自動的に記録される請求項２３記載の不揮発性のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステム、特に、条件命令実行を加速するためにローカル条件コードレジスタを使用する方法およびシステムに概して関係する。
【背景技術】
【０００２】
プロセッサパイプラインは、それぞれのステージが命令と関係する特定の機能を実行する多くのステージから構成されている。それぞれのステージは、パイプステージまたはパイプセグメントと称される。ステージは、パイプラインを形成するために互いに接続される。命令は、パイプラインの１つの終端から入り、他の終端から出る。命令は、パイプラインステージを経てストリームの中を順次に流れる。ステージは、いくつかのステージがいくつかの命令を同時に処理することができるように配置される。異なるパイプラインステージで複数の命令を同時に処理することは、プロセッサが、一時に1つの命令を処理することよりも速く命令を処理することを可能にし、従って、プロセッサの命令実行時間が向上する。
【０００３】
プロセッサ内では、複数のパイプライン処理命令が存在し得る。個々のパイプラインは、独自のプロセッサ機能を実行し得る。例えば、プロセッサは、整数命令を実行するための1つのパイプラインおよび浮動小数点またはベクトル命令を実行するための別のパイプラインを持ち得る。命令の機能性に基づいたパイプラインの分離によって、プロセッサは、命令を実行する場合、そのリソースをより効率的に利用し得る。
【０００４】
個々のパイプラインの中で処理され得るいくつかの典型的な命令は、条件命令であり得る。当業者が認識する限りでは、条件命令は、条件が満たされるか満たされないかによって実行するか実行しない命令である。条件命令を実行するために、条件コードレジスタは、その後の条件命令の処理の中で使用され得る、最も最近の条件コード値を保存するために使用される。条件命令は、プロセッサ内のパイプラインの中のいずれによっても実行され得る。
【０００５】
一般に、以前のＡＲＭ（Advanced RISC Machine）プロセッサでは、複数のパイプラインを支援するために使用される条件コード値を含む、ただ１つのアクセス可能または読み出し可能な条件コードレジスタだけが存在した。この条件コードレジスタは、他のパイプラインに連結されているがただ１つのパイプラインに物理的に設置されていた。ただ1つの読み出しアクセス可能な条件コードレジスタを持つことは、他の遠隔的に配置されたパイプラインの中の条件命令を実行する場合に、プロセッサの実行に特に影響を与えた。効率影響は、条件命令がローカル条件コードレジスタを持たないパイプラインの中で実行される場合に明らかにされる。条件コードレジスタで保存された条件コード値は、条件命令が実行を試みるときにローカル条件コードレジスタを持たないパイプラインの中の要求する条件命令に送られる。しかしながら、条件命令が条件コード値を要求するとき、条件コード値は、前の命令から更新されている可能性がある。新しい条件コード値が条件コードレジスタに書き込まれている間、要求する条件命令は、新しい条件コード値が利用できるまで停止し得る。条件コードレジスタの更新が完成した後、新しい条件コード値は読み出され、ローカル条件コードレジスタを持たないパイプラインの中の要求する条件命令に送り返される。その結果、ローカル条件コードレジスタを持たないパイプラインの中の条件コード値の回復処理は、完了するためにいくつかのプロセッササイクルを取り得る。条件コード値を受け取る際の遅延は、条件コード値を変更する命令がローカル条件コードレジスタを持たないパイプラインの中で実行され、後の条件命令が同じパイプラインの中で実行する場合に合成され得る。この場合、後の条件命令は、それが読み出されてそのパイプラインに送り返されることが可能となる前に、新しい条件コード値の更新を待たなければならない可能性がある。
【発明の概要】
【０００６】
それ故に、パイプラインのそれぞれで使用される条件コードレジスタのローカルコピーを作成することによってプロセッサ内の複数のパイプラインの中の条件命令の実行を加速する方法についての必要性が産業界に存在する。条件コードレジスタのローカルコピーを複数のパイプラインに供給することは、パイプラインの中の条件命令の実行を加速し、プロセッサがより効率的そのリソースを利用することを可能にし、これによって、プロセッサの効率を増加させる。この開示は、この必要性を認識して、そのようなプロセッサを開示する。
【０００７】
複数のパイプラインを持つパイプラインプロセッサであって、第１のパイプラインに関連づけられた第１の条件コードレジスタと第２のパイプラインに関連づけられた第２の条件コードレジスタとを持つプロセッサで条件命令を実行する方法が開示される。この方法は、最も最近の条件コード値を第１の条件コードレジスタまたは第２の条件コードレジスタのいずれかに記録する。この方法は、さらに、第２の条件コードレジスタが最も最近の条件コード値を持っているか否かを示すインジケータを設定し、このインジケータに基づき、第１または第２の条件コードレジスタのいずれかから最も最近の条件コード値を取り出す。この方法は、取り出された最も最近の条件コード値に応じて条件命令が実行されるべきかどうかを判定する。
【０００８】
複数のパイプラインを持つパイプラインプロセッサであって、第１のパイプラインに関連づけられた第１の条件コードレジスタと第２のパイプラインに関連づけられた第２の条件コードレジスタとを持つパイプラインプロセッサで条件命令を実行するさらなる方法が開示される。この方法は、最も最近の条件コード値を第１の条件コードレジスタまたは第２の条件コードレジスタのいずれかに記録する。この方法は、パイプラインプロセッサ内の発行ステージの中で処理された場合、条件コードをセットする命令に応じてインジケータをさらに設定する。この条件コードインジケータは、第２のパイプラインが第２の条件コードレジスタに保存された最も最近の条件コード値を持つかどうかを示す。この方法は、このインジケータに基づき、第１または第２の条件コードレジスタのいずれかから最も最近の条件コード値を取り出し、取り出された最も最近の条件コード値に応じて条件命令が実行されるべきかどうかを判定する。
【０００９】
命令を実行するための複数のパイプラインを持つパイプラインプロセッサが示される。パイプラインプロセッサは、最も最近の条件コード値を受け入れるように構成された第１の条件コードレジスタを持ち、第１の条件コードレジスタは第１のパイプラインに関連づけられる。パイプラインプロセッサは、また、最も最近の条件コード値を受け入れるように構成された第２の条件コードレジスタを持つ。第２の条件コードレジスタは、第２のパイプラインに関連づけられる。パイプラインプロセッサは、第２の条件コードレジスタが最も最近の条件コード値を持つかどうかを示すように構成されたインジケータを持つ。パイプラインプロセッサは、このインジケータに基づき、最も最近の条件コード値を取り出し、取り出された最も最近の条件コード値に応じて条件命令を実行するかどうかを判定する。
【００１０】
本発明のさらなる特徴および利点のみならず、本発明のより完全な理解は、以下の詳細な記述および添付の図面から明白になるであろう。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明の実施形態に用いるプロセッサのハイレベルのロジックハードウェアブロックダイヤグラムを示す。
【図２】図２は、図１のＣＰＵの上位のパイプラインのより詳細なブロックダイヤグラムを示す。
【図３】図３は、図１のＣＰＵの下位パイプラインのより詳細なブロックダイヤグラムを示す。
【図４】図４は、図１のプロセッサによって実行された命令の典型的なグループを示す。
【図５】図５は、図１のプロセッサの様々なステージを通って実行される、図4の命令の典型的なグループのタイミングダイヤグラムを示す。
【図６】図６は、図1のプロセッサの上位および下位のパイプラインを通る典型的な命令フローを示すフローチャートを示す。
【発明を実施するための形態】
【００１２】
添付された図面に関して以下に説明される詳細な記載は、本発明の様々な実施形態の記載として意図され、本発明が実行され得るただ一つの実施形態を示すことは意図されない。この詳細な記載は、本発明の完全な理解を提供する目的のために特定の詳細を含む。しかしながら、本発明がこれらの特定の詳細なしで実行され得ることは当業者にとって明白であろう。いくつかの例では、周知の構造および要素は、本発明の概念を不明瞭にすることを避けるためにブロックダイヤグラムの形で示される。頭字語および他の記述的な専門用語は、ただ便利さと明瞭さとのために使用され得るものであり、発明の範囲を制限することは意図されない。
【００１３】
図1は、以下に記載されるような本発明の１つの実施形態を用いるスーパースカラプロセッサ１００のハイレベルの図を示す。プロセッサ１００は、特定の高速バス１０４を介して命令キャッシュ１０６と繋がれる中央処理装置（ＣＰＵ）１０２を持つ。命令キャッシュ１０６も、汎用のバス１１０を介してメモリ１０と繋がれる。ＣＰＵ１０２は、下位パイプライン１６０および１６５と繋がれる上位パイプライン１５０を持つ。ＣＰＵ１０２は、メモリ１０８から命令キャッシュ１０６への命令のローディングを制御する。命令キャッシュ１０６に命令がロードされれば、ＣＰＵ１０２は、高速バス１０４を介してそれらにアクセスすることができる。命令は、命令キャッシュ１０６から上位パイプライン１５０へフェッチされる。命令が上位パイプライン１５０で処理された後、それらは、さらなる処理のために下位パイプライン１６０または１６５に送られる。１つの典型的な実施形態では、下位パイプライン１６０は整数パイプラインであり得るし、下位パイプライン１６５は浮動小数点／ベクトルパイプラインであり得る。
【００１４】
命令は、逐次プログラム順に上位パイプライン１５０から離れる。上位パイプライン１５０から離れた後、命令は、より効率的な処理のために下位パイプライン１６０または１６５に再配置され得る。上位パイプライン１５０の中の命令上で実行されるいくつかの典型的な処理機能は、命令を取り込むこと、命令を整列させること、命令を解読すること、下位パイプライン１６０または１６５に対して命令を発行することなどを含む。下位パイプライン１６０および１６５内では、命令処理は、命令を追跡すること、命令を実行すること、命令の結果を記録することなどを含み得る。
【００１５】
下位パイプライン１６０および１６５は、算術論理演算ユニット、浮動小数点ユニット、格納ユニット、ロードユニットなどの様々な実行ユニット（ＥＵ）１３０を含み得る。例えば、ＥＵ１３０は、整数加算、整数減算、整数乗算、ビット単位の論理演算（例えばＡＮＤ，ＮＯＴ，ＯＲ，ＸＯＲ）、ビットシフトなどの、広範囲の演算機能を実行するための論理演算ユニットを持ち得る。あるいは、ＥＵ１３０は、浮動小数点比較、浮動小数点コピーなどの浮動小数点処理を行なうための実行ユニットを持ち得る。プロセッサ１００の効率を増加させるために、下位パイプライン１６０および１６５は、特定の機能を実行するために組織され得る。例えば、下位パイプライン１６０は、整数命令を実行するＥＵ１３０を含み得るし、それと同時に、下位パイプライン１６５は、浮動小数点命令を実行するＥＵ１３０を含み得る。特定の命令の機能性を別々の下位パイプライン１６０または１６５に分離することによって、重複したＥＵ１３０は必要とされないかもしれない。ここに示されるような本発明の概念は、２つまたはそれ以上の下位パイプラインを備えたプロセッサに適用され得る。
【００１６】
下位パイプライン１６０および１６５内では、条件コードレジスタが、プロセッサによって決定される、最も最近のコードの軌跡を保持し得る。プロセッサ１００は、これらの条件コードレジスタに関連したインジケータを更新することにより、これらの条件コードレジスタのうちのいくつかのステータスを追跡する。条件コードレジスタのみならずインジケータも、図２−５の論考の中でさらに記載される。
【００１７】
当業者が理解し得るように、パイプラインステージは、命令を保持するように設計されたレジスタまたはレジスタのグループから構成され得る。命令が特別のステージに入る場合、プロセッサは、そのステージに関連づけられたレジスタまたはレジスタのグループにその命令をロードする。それぞれのステージ内では、論理回路が、その命令に依存して、ある処理を実行し得る。論理回路が意図した処理を実行した後、その命令は、それから、次に連続するステージに渡される。
【００１８】
図２は、ＣＰＵ１０２の上位パイプライン１５０のより詳細なブロックダイヤグラムを示す。上位パイプライン１５０は、高速バス１０４によって命令キャッシュ１０６に繋がれたフェッチ論理回路２０２を持つ。フェッチ論理回路２０２は、また、発行ステージ２０７に繋がれた解読ステージ２０５に繋がれた命令フェッチステージ２０３に繋がれる。解読ステージ２０５は、また、解読論理回路２０４に繋がれ、そして、発行ステージ２０７は、最も最近の条件コードを追跡するインジケータ２０８と通信する発行論理回路２０６に繋がれる。図２に示される実施形態では、インジケータ２０８は、下位パイプライン１６０または１６５の内の１つに関連づけられた（例えば、物理的に位置づけられた、または、プロセッサが条件コード値を要求する命令を処理するときにパイプライン内においてプロセッサによって向けられた）条件コードレジスタと関連づけられ得る。インジケータ２０８は、関連づけられたパイプラインの中の条件コードレジスタが最も最近の条件コード値を含むか否かを示す値を含み得る。最も最近の条件コード値は、上位パイプライン１５０内においてプロセッサ１００が処理する命令として変化し得る。
【００１９】
命令は、命令フェッチステージ２０３から解読ステージ２０５および発行ステージ２０７を通って流れる。発行ステージ２０７からの命令は、下位パイプライン１６０および１６５に送られる。上位パイプライン１５０内では、フェッチ論理回路２０２が、決定し、続いて、命令キャッシュ１０６から命令をフェッチする。命令キャッシュ１０６では、命令は、キャッシュラインとして知られているセクションにグループ化される。それぞれのキャッシュラインは、複数の命令を含み得る。その結果、命令は、一時にいくつかの命令が命令キャッシュ１０６からフェッチされて解読され得る。命令がフェッチ論理回路２０２によってフェッチされた後、その命令は、解読ステージ２０５に送られる。
【００２０】
解読ステージ２０５では、命令の正体を断定するために、命令は、解読論理回路２０４によって解読される。解読論理回路２０４によって解読ステージ２０５の期間に取り出され、または、確認された情報は、下位パイプライン１６０または１６５のどちらがさらなる処理のために命令を受けるかをプロセッサ１００が決定することを可能にする。発行ステージ２０７、より具体的には、発行論理回路２０６は、下位パイプライン１６０または１６５のいずれが命令を受けるかを決定する。下位パイプライン１６０は、整数命令を実行するために設計され得るし、それと同時に、下位パイプライン１６５は、浮動小数点命令を実行するために設計され得る。発行論理回路２０６は、実行のために適切な下位パイプライン１６０または１６５に命令を送る。発行論理回路２０６が適切な下位パイプライン１６０または１６５に命令を送る場合、発行論理回路２０６は、また、インジケータ２０８を更新し得る。インジケータ２０８は、関連づけられたパイプラインの中のローカル条件コードレジスタが特定の命令を実行した後の最も最近の条件コードを含むであろうことを反映するために更新される。
【００２１】
１つの実施形態では、インジケータ２０８は、命令が発行ステージ２０７内で処理される場合に、下位パイプライン１６５の中のローカル条件コードレジスタが最も最近の条件コードを含むかを確認するためにプロセッサ１００によって用いられる。最も最近の条件コード値は、条件命令を実行し得るか実行し得ないかを判断するためにプロセッサ１００によって用いられる。当業者が理解するように、ＡＲＭプロセッサ内の条件コード値は、ＮＺＣＶ状態ビット（Ｎ＝ネガティブ（Negative），Ｚ＝ゼロ（Zero），Ｃ＝キャリー（Carry），Ｖ＝オーバーフロー（Overflow））に相当し得る。条件コード値またはＮＺＣＶビットは、また、条件フラグと呼ばれ得る。本実施形態では、インジケータ２０８は、下位パイプライン１６５の中のローカル条件コードレジスタが最も最近の条件コード値を持ち得ることをインジケータ２０８の中の”１”が示し得るレジスタに保持された単一の状態ビットである。対応して、インジケータ２０８の中の”０”は、下位パイプライン１６５の中のローカル条件コードレジスタが最も最近の条件コード値を含まず、初期設定により下位パイプライン１６０の中のグローバル条件コードレジスタが最も最近の条件コード値を含み得ることを示し得る。それぞれのパイプラインの中の条件コードレジスタのみならずインジケータ２０８も、図３−５の論考の中でさらに記載される。
【００２２】
図3は、本発明の1つの実施形態に用いる下位パイプライン１６０および１６５のより詳細な図を示す。以前に記載された具体例を用いて、下位パイプライン１６０は、整数命令を実行し得るし、下位パイプライン１６５は、浮動小数点命令を実行し得る。下位パイプライン１６０は、予約ステージ３１０Ａ、実行ステージ３２０Ａおよびグローバル条件コードレジスタ（ＧＣＣＲ：Global Condition Code Register）３３０を持つ。ＧＣＣＲ３３０は、また、この技術内において、ＣＰＳＲ（Central Processing Status Register）と呼ばれ得るし、下位パイプライン１６０および１６５の両方に条件コード値を供給し得る。下位パイプライン１６５は、予約ステージ３１０Ｂ、実行ステージ３２０Ｂ、ローカル条件コードレジスタ（ＬＣＣＲ：Local Condition Code Register）３７０および浮動小数点条件コードレジスタ（ＦＣＣＲ：Floating Condition Code Register）を持つ。ＦＣＣＲ３８０は、また、この業界内において、ＦＰＳＣＲ（Floating Point Status Control Register）と呼ばれ得る。
【００２３】
命令が発行ステージ２０７を離れる場合、整数命令は、下位パイプライン１６０に送られ、浮動小数点命令は、下位パイプライン１６５に送られる。両方の下位パイプライン１６０および１６５の中の予約ステージ３１０Ａ−３１０Ｂおよび実行ステージ３２０Ａ−３２０Ｂは、以下に記載されるような同様な機能を実行し得る。
【００２４】
命令が下位パイプライン１６０または１６５に入ると、それらは、まず、予約論理（説明の簡単化のために示されない）によって予約ステージ３１０Ａ−３１０Ｂの中で処理される。もし、命令が、実行のために追加の情報を必要とするならば、その命令は、１つまたはそれ以上のプロセッササイクルのための予約ステージ３１０Ａ−３１０Ｂの中で保持され得る。例えば、条件命令が予約ステージ３１０Ａまたは３１０Ｂのいずれかにロードされた場合、プロセッサ１００は、条件命令を実行するか否かを判断するために最も最近の条件コード値が必要となり得ると識別し得る。最も最近の条件コード値が取り出されるまで、条件命令は予約ステージ３１０Ａまたは３１０Ｂの中に保持される。最も最近の条件コード値が取り出された後、条件命令は、予約ステージ３１０Ａまたは３１０Ｂから実行ステージ３２０Ａまたは３２０Ｂにディスパッチされる。命令を実行した後、その命令実行による結果は、プロセッサ１００によって保持され、ある後続の命令によって用いるためにレジスタファイル(説明の簡単化のために示されない)に書かれる。
【００２５】
ＧＣＣＲ３３０に保持された条件コード値は、プロセッサ１００が正の整数の比較（ＣＭＰ）、負の整数の比較（ＣＭＮ）、関連する更新命令を備えた浮動小数点の比較（ＦＣＭＰ）などのようなある命令を実行した後に変化し得る。同様に、ＬＣＣＲ３７０に保持された条件コード値は、浮動小数点比較命令（ＦＣＭＰ）および関連する浮動小数点更新命令が下位パイプライン１６５の中で実行された場合に変化し得る。当業者が理解するように、浮動小数点パイプラインの中で実行される1つの典型的な浮動小数点更新命令は、ＦＭＳＴＡＴ命令である。図３に示された実施形態では、ＬＣＣＲ３７０は、ＬＣＣＲ３７０が最も最近の条件コード値を含み、条件付きの浮動小数点命令が関連するパイプライン１６５の中で実行される場合に、その関連するパイプライン（つまり下位パイプライン１６５）によって使用され得る。図４および５の論考の中でより詳細に説明されるように、ＧＣＣＲ３３０は、最終的には同期が取られるであろうし、ＬＣＣＲ３７０の中に保持保存され得るものと同じ条件コード値を含む。もし、プロセッサ１００が他の下位パイプライン（説明の簡単化のために示されない)を持つならば、ＧＣＣＲ３３０の中に保持される値は、条件命令がこれらの下位パイプラインで実行され、関連するローカル条件コードレジスタが最も最近の条件コード値を含んでいない場合に使用され得る。
【００２６】
従来のプロセッサは、条件命令を処理するためにＧＣＣＲの中に保持された条件コード値を用いることをすべてのパイプラインに要求した。これらの従来のプロセッサでは、ＧＣＣＲは、整数パイプラインのような１つのパイプラインの中に物理的に配置され、その結果、浮動小数点パイプラインのような他のパイプラインの中で実行されるどのような条件命令も、それが実行できる前にＧＣＣＲから最も最近の条件コード値を取り出さなければならなかった。その結果、従来のプロセッサは、ＧＣＣＲが物理的に配置されないパイプラインの中で条件命令を実行する場合、遅延を起し得る。
【００２７】
[0032]  背景背景で記載されたるような潜在的な遅延を軽減するために、１つの実施形態は、その関連する条件付きの浮動小数点命令のためのパイプラインの中の最も最近の条件コード値を供給するためにＬＣＣＲ３７０を用いる。ＬＣＣＲ３７０を用いて、プロセッサ１００は、ＧＣＣＲの更新を待機することと条件付きの浮動小数点命令を実行する前に完了する取り出し機能とを不要にし得る。この実施形態では、プロセッサ１００は、ＬＣＣＲ３７０が最も最近の条件コード値を含んでいるかを確認するためにインジケータ２０８を用いる。もし、インジケータ２０８が、ＬＣＣＲ３７０が最も最近の条件コード値を含むことを示すならば、最も最近の条件コード値は、ＬＣＣＲ３７０から取り出され、それが下位パイプライン１６５の中の予約ステージ３１０にある間に条件付きの浮動小数点命令に送られる。もし、インジケータ２０８が、ＬＣＣＲ３７０が最も最近の条件コード値を含まないこと（つまりＧＣＣＲ３３０が最も最近の条件コード値を含む）を示すならば、条件付きの浮動小数点命令が実行される場合、ＧＣＣＲ３３０の中の値が取り出され、続いて、下位パイプライン１６５の予約ステージ３１０Ｂに送られる。
【００２８】
条件付きの浮動小数点命令が発行ステージ２０７で処理される場合、インジケータ２０８の中の値はキャプチャされる。１つの実施形態では、インジケータ２０８の中の値は、下位パイプライン１６５で処理されるということで条件付きの浮動小数点命令に従う。この実施形態では、条件付きの浮動小数点命令が下位パイプライン１６５の実行ステージ３２０Ｂの中で実行する場合に、ＬＣＣＲ３７０の中の条件コード値を用いる決定は、プロセッサ１００によって下される。別の実施形態では、条件付きの浮動小数点命令が発行ステージ２０７の中で処理される場合に、プロセッサ１００が、インジケータ２０８の中の値を読み、ＬＣＣＲ３７０の中に保持された条件コード値を用いるか否かを決定する。
【００２９】
特定の条件付きの浮動小数点命令が発行ステージ２０７で処理される場合、インジケータ２０８の中の値は、ＬＣＣＲ３７０の状態を反映する。従って、プロセッサ１００は、命令の下位パイプライン１６５への入力に先立ってＬＣＣＲ３７０が最も最近の条件コード値を含むかを判断する。この決定に基づき、プロセッサ１００は、インジケータ２０８が”１”である場合、ＬＣＣＲ３７０に保持された値を用いる。もし、条件付きの浮動小数点命令が発行ステージ２０７で処理された場合に、インジケータが”０”ならば、ＧＣＣＲ３３０の中の最も最近の条件コード値が取り出され、条件付きの浮動小数点命令が下位パイプライン１６５で実行される場合に用いられる。
【００３０】
処理能率を増加させるために、プロセッサ１００がＬＣＣＲ３７０を更新する場合、ＧＣＣＲ３３０は、最も最近の条件コード値で更新され得る。１つの実施形態では、浮動小数点更新命令（ＦＭＳＴＡＴ）が実行される場合、プロセッサ１００は、ＬＣＣＤ３７０およびＧＣＣＲ３３０の両方を更新する。ＧＣＣＲ３３０を更新することは、ＬＣＣＲ３７０が浮動小数点パイプライン内に配置され、ＧＣＣＲ３３０が別のパイプライン（つまり整数パイプライン）内に配置されるということに起因して、ＬＣＣＲ３７０を更新することよりも長くかかり得る。ＧＣＣＲの更新は、また、ＷＡＷ（write after write）、ＲＡＷ（read after write）およびＷＡＲ（write after read）などのデータ危機（データハザード）を更新が引き起こさないことを保証するためのさらなる処理ステップを必要とし得る。これらのデータ危機は、その値が未解決の条件付きの整数命令を実行するために用いられる前に、更新がＧＣＣＲ３３０の値を上書きする場合に存在し得る。ＧＣＣＲ３３０が最も最近の条件コード値で更新された後、プロセッサ１００は、どのような後続の条件命令を実行するためでもＧＣＣＲ３３０内の最も最近の条件コード値を用いることができる。
【００３１】
プロセッサ１００がＧＣＣＲ３３０およびＬＣＣＲ３７０の両方を最も最近の条件コード値に更新する１つの方法は、ＦＣＣＲ３８０を利用することである。ＦＣＣＲ３８０は、読み出しアクセス可能ではない書き込み専用のレジスタ（つまり、条件コード値はＦＣＣＲ３８０から読み出されて条件命令の条件を判断するために使用されるものではないものであり得る）であり得る。ＦＣＣＲ３８０の中に保持された条件コード値は、ＬＣＣＲ３７０およびＧＣＣＲ３３０を更新するために用いられる。
【００３２】
この実施形態では、浮動小数点比較命令が実行を終了する場合、ＦＣＣＲ３８０の中の条件コード値が更新される。ＬＣＣＲ３７０は、浮動小数点更新命令（ＦＭＳＴＡＴ）が実行された後、ＦＣＣＲ３８０の中に保持された値で更新される。ＧＣＣＲ３３０の更新は、ＦＭＳＴＡＴ命令によって開始されるが、ＦＭＳＴＡＴ命令が浮動小数点パイプラインの中で実行した後のいくつかのプロセッササイクルまで物理的に更新されないかもしれない。ＬＣＣＲ３７０からＦＣＣＲ３８０を分けることによって、2つのレジスタが互いに独立して動作することを可能にする。独立して動作することは、ＬＣＣＲ３７０が、ＧＣＣＲ３３０が物理的に更新されている間に後続の条件付きの浮動小数点命令を処理するために用いられることを可能にする。
【００３３】
図4は、図1のプロセッサによって実行される命令４００の典型的なグループを示す。命令４００のグループは、浮動小数点パイプライン（つまり下位パイプライン１６５）の中で実行され得る。命令４００のグループは、様々な浮動小数点レジスタの中に保持された浮動小数点値を比較し、最も小さな値を特定する。最も小さな値が決定されると、プロセッサ１００は、その最も小さな値に基づいた特定の処置を取り得る。
【００３４】
命令４００のグループの中の命令Ａは、レジスタＦ0の中に保持された値を取る浮動小数点比較命令であり、それをレジスタＦ1の中に保持された値と比較する。命令Ａの実行結果は、ＦＣＣＲ３８０の中の条件コード値を変更し得る。命令Ｂは、浮動小数点更新命令であり、ＧＣＣＲ３３０およびＦＣＣＲ３８０の中に保持された新しい条件コード値を備えたＬＣＣＲ３７０を更新する。命令Ｃは、特に、Ｆ1の中に保持された値がF0未満であった場合にF0の結果をＦ1にコピーする、条件付きの浮動小数点命令である。命令Ｄは、レジスタＦ2の中に保持された値をＦ1の中に保持された可能な新しい値と比較する、別の浮動小数点比較命令である。命令Ｄが実行した後、ＦＣＣＲ３８０の中の条件コード値は変化し得る。命令Ｅは、ＧＣＣＲ３３０およびＬＣＣＲ３７０が命令Ｄによって決定された新たな条件コード値に更新する、別の浮動小数点更新命令である。命令Ｆは、特に、Ｆ2の中に保持された値がF0未満であった場合にF2の結果をＦ0にコピーする、条件付きの浮動小数点命令である。
【００３５】
図５は、それらが発行ステージ２０７から送られ、下位パイプライン１６５の中で実行されるとした際の命令４００のグループのタイミング図５００を示す。タイミング図５００では、プロセッササイクル５０２は、ステージ（発行ステージ２０７、予約ステージ３１０Ｂおよび実行ステージ３２０）間のＹ軸に沿って示され、プロセッサ１００内のインジケータ２０８は、Ｘ軸５０６に沿って識別されている。説明の簡単化の目的のために、このタイミング図は、各プロセッササイクル中のプロセッサ１００によって処理される１つの命令を示す。しかしながら、プロセッサ１００は、１つのプロセッササイクル当たり複数の命令を処理し得る。ここでの教示は、単一の命令発行または複数の命令発行のプロセッサに適用され得る。さらに、インジケータ２０８の値は、プロセッササイクル１に先立って初期的に”０”である。
【００３６】
図５に示されるように、命令Ａは、プロセッササイクル１で発行論理回路２０６によって発行ステージ２０７で処理される。命令Ａは浮動小数点比較命令であるので、プロセッサ１００は、命令Ａを浮動小数点パイプライン（この例では下位パイプライン１６５）に導く。図５に示されるように、インジケータ２０８は、プロセッササイクル１では”０”である。”０”は、整数パイプラインの中のＧＣＣＲ３３０が最も最近の条件コード値を含むことを示し、また、初期設定により、ＬＣＣＲ３７０は最も最近の条件コード値を含んでいない。インジケータ２０８は、比較命令のような整数命令が整数パイプライン（下位パイプライン１６０）で実行される場合は常に”０”に設定され、そして、その結果、ＧＣＣＲ３３０は、最も最近の条件コードレジスタを含む。
【００３７】
プロセッササイクル２では、命令Ａは予約ステージ３１０Ｂの中で処理され、命令Ｂは発行ステージ２０７で処理される。命令Ａは、予約ステージ３１０Ｂの中に命令Ａを維持する条件には直面せず、そして、その結果、命令Ａは、次のプロセッササイクル中に実行ステージ３２０Ｂにディスパッチされる。命令Ｂが発行ステージ２０７で処理されている間に、発行論理回路２０６は、命令Ｂが浮動小数点更新命令であると断定する。その結果、発行論理回路２０６は、命令Ｂが実行する時、命令ＢがＬＣＣＲ３７０を最も最近の条件コード値で更新するであろうことを反映するためにプロセッササイクル２中のインジケータ２０８を変更する。インジケータ２０８の新たな値は、命令Ｂが実行すればＬＣＣＲ３７０が最も最近の条件コード値を持つであろうことを示す”１”である。
【００３８】
命令Bは浮動小数点更新命令（ＦＭＳＴＡＴ）であるので、命令Ｂは、発行論理回路２０６によって複製され得るし、この複製の命令は、整数パイプライン（下位パイプライン１６０）に送られる。複製の命令は、また、整数パイプライン内では実行されないが、その代わりにＦＣＣＲ３８０からＧＣＣＲ３３０への更新を調整するためのマーカとして用いられるシャドー（shadow）命令として参照される。複製の命令は、ＧＣＣＲ３３０の更新が追加の行動および浮動小数点パイプライン（下位パイプライン１６５）と整数パイプライン（下位パイプライン１６０）との間の調整を要求し得るという理由で必要とされ得る。シャドー（shadow）命令Ｂが整数パイプライン（下位パイプライン１６０）の実行ステージ３２０Ａにある場合、ＦＣＣＲ３８０の値が読まれ、ＧＣＣＲ３３０の更新が行われる。説明の簡単化のために、整数パイプラインを経る命令Bの進行は示されない。
【００３９】
プロセッササイクル３では、実行ステージ３２０Ｂの中にいる状態で命令Ａは実行し、命令Ｂは予約ステージ３１０Ｂの中で処理され、そして、命令Ｃ発行ステージ２０７の中で処理される。命令Ａが実行を終了した後、プロセッサ１００は、ＦＣＣＲを新たな条件コード値で更新する。命令Bは引き止め（stalling）条件には直面しないので、命令Bは、プロセッササイクル３の終わりに実行ステージ３２０Ｂにディスパッチされる。命令Cは、プロセッササイクル3中に、発行ステージ２０７の発行論理回路２０６によって処理される。発行論理回路２０６は、命令Cが最も最近の条件コード値を要求する条件付きの浮動小数点命令であると認定する。プロセッサ１００は、インジケータ２０８にアクセスし、インジケータ２０８が”１”であり、従って、命令Bが実行した後、ＬＣＣＲ３７０が最も最近の条件コード値を含むであろうと断定する。命令Ｃは、実行のために、浮動小数点パイプライン（下位パイプライン１６５）に送られる。
【００４０】
プロセッササイクル４では、命令Ｄが発行論理回路２０６によって発行ステージ２０７で処理され、命令Ｃは予約ステージ３１０Ｂに入り、命令Ｂは実行ステージ３２０Ｂの中で実行される。命令Ｄは浮動小数点比較命令であるので、それはプロセッササイクル4の終わりに浮動小数点パイプライン（下位パイプライン１６５）に送られる。命令Ｃは、１つのプロセッササイクル用の予約ステージ３１０Ｂの中で処理される。インジケータ２０８の値は、命令Ｃが実行する時、ＬＣＣＲ３７０が最も最近の条件コード値を持つであろうと認識される。最も最近の条件コード値は命令Ｂが実行すれば（プロセッササイクル４の終わり）利用可能であるので、命令Ｃは、１つのプロセッササイクル用の予約ステージ３１０Ｂの中で止まるであろう。条件コード値が利用可能になるとき、それは、予約ステージ３１０の中の状態の命令Ｃに送られ、命令Ｃは、次のプロセッササイクル（プロセッササイクル５）の初めの実行ステージ３２０Ｂに放たれる。
【００４１】
命令Bがプロセッササイクル4で実行するとき、ＦＣＣＲ３８０は、更新された条件コード値をＬＣＣＲ３７０に書き込む。プロセッサ１００は、ＧＣＣＲ３３０を更新するためにＦＣＣＲ３８０の中の条件コード値を整数パイプラインに送る前に、シャドー（shadow）命令Ｂが整数パイプライン（下位パイプライン１６０）の中の実行ステージ３２０Ａに達するのを待つ。前述のように、この更新は、ＬＣＣＲ３７０が更新された後、いくつかのプロセッササイクルまで生じないことがあり得る。
【００４２】
プロセッササイクル５では、命令Ｅは、それが発行ステージ２０７にある間に発行論理回路２０６によって処理される。発行論理回路２０６は、命令Ｅが実行した後、ＬＣＣＲ３７０が最も最近の条件コード値を含むであろうことを示すためにインジケータ２０８を更新する。ここで説明する例では、介入する整数比較命令がなかったので、インジケータ２０８の値は同じままである。命令Eは浮動小数点更新命令（ＦＭＳＴＡＴ）であるので、命令Ｅは、発行論理回路２０６によって複製され得るし、この複製の命令は、命令Bと同様に、整数パイプラインに送られ得る。前述のように、複製の命令は、整数パイプラインによって実行されないが、シャドー（shadow）命令Ｅが整数パイプラインの中の実行ステージ３２０Ａに達したときに、ＦＣＣＲ３８０からＧＣＣＲ３３０への更新を調整するためのマーカとして用いられる”シャドー（shadow）”命令である。プロセッササイクル５中において、命令Ｃは、命令Ｄが予約ステージ３１０Ｂにロードされている一方で、実行ステージ３２０Ｂにディスパッチされる。命令Ｄは、それを予約ステージ３１０Ｂ中に止まらせ、次のプロセッササイクル中の実行ステージ３２０Ｂにディスパッチするであろう条件と直面しない。
【００４３】
プロセッササイクル６では、命令Ｄは、実行ステージ３２０Ｂにディスパッチされる。命令Ｄが実行した後、ＦＣＣＲ３８０は、命令Ｄによって決定されたとして新たな条件コード値に更新され得る。また、プロセッササイクル６では、命令Ｅは予約ステージ３１０Ｂに入り、命令Ｆは発行論理回路２０６によって発行ステージ２０７で処理される。命令Ｆは条件付きの浮動小数点命令であるので、実行するために最も最近の条件コード値を必要とする。インジケータ２０８の値によって認識されて、最も最近の条件コード値は、命令Ｆが実行するとき、ＬＣＣＲ３７０に含まれるであろう。この例では、最も最近の条件コード値は、命令Eが実行した後（プロセッササイクル７の終わり）、ＬＣＣＲ３７０の中で変わり得る。
【００４４】
命令Eがプロセッササイクル７で実行するとき、ＦＣＣＲ３８０は、更新された条件コード値をＬＣＣＲ３７０に書き込む。プロセッサ１００は、ＦＣＣＲ３８０の値を整数パイプラインの中のＧＣＣＲ３３０に送る前に、シャドー（shadow）命令Ｅが整数パイプラインの中の実行ステージ３２０Ａに達するのを待つ。前述のように、このＧＣＣＲ３３０の更新は、ＬＣＣＲ３７０が更新された後、いくつかのプロセッササイクルまで生じないことがあり得る。
【００４５】
最も最近の条件コード値は、命令Ｅが実行して（プロセッササイクル７の終わり）、ＬＣＣＲ３７０が更新されれば、命令Fによって利用可能である。その結果、命令Ｆは、１つのプロセッササイクル用の予約ステージ３１０Ｂの中で止まるであろう。プロセッササイクル８では、命令Ｆは、実行ステージ３２０にロードされて実行される。
【００４６】
もし、命令４００の同一グループが、ＬＣＣＲ３７０のない浮動小数点パイプラインの中で実行されれば、プロセッサ１００は、条件付きの浮動小数点命令が実行される毎に、ＧＣＣＲの中の条件コード値を取り出さなければならないだろう。前述したように、ＧＣＣＲ３３０の更新は、命令Ｂが浮動小数点パイプライン（下位パイプライン１６５）の中で実行した後に更新することをいくつかの追加的なプロセッササイクルに要求し得る。シャドー（shadow）命令Ｂは、リソースハザードに直面し、命令Ｃの実行の中の遅れとその次の命令Ｆとを合成したいくつかのプロセッササイクルについて整数パイプラインの中の予約ステージ３１０の中で止まり得る。命令ＣおよびＦは、最も最近の条件コード値が、まず、ＧＣＣＲ３３０に書き込まれ、それから、ＧＣＣＲ３３０から取り出されるまで、浮動小数点パイプライン（下位パイプライン１６５）の中の予約ステージ３１０Ｂの中で止まるであろう。ＬＣＣＲ３７０の利用によって、命令ＣおよびFのような条件付きの浮動小数点命令は、ＧＣＣＲ３３０から最も最近の条件コードを検索することにより引き起こされる遅れに悩むことなく、従って、命令の実行を加速し、プロセッサ100の効率を増加させて、実行し得る。
【００４７】
図6は、本発明の１つの実施形態によって実行される方法６００を示すフローチャートである。命令が発行ステージ２０７に入るとき、方法６００は開始ブロック６０２で始まる。ブロック６０４では、プロセッサ１００は、命令を処理するために発行論理回路２０６を用いる。ブロック６０４で命令を処理した後、方法６００は、判定ブロック６０６に移る。
【００４８】
判定ブロック６０６では、プロセッサ１００は、命令が条件命令かどうかを判断する。命令が条件命令である場合、最も最近の条件コード値が、条件命令を実行するために必要であり、方法６００は判定ブロック６０８進む。命令が条件命令でない場合、方法６００はブロック６１６に進む。判定ブロック６０８では、プロセッサ１００は、命令が条件付きの整数命令かを判断する。命令が条件付きの整数命令である場合、方法６００は、ブロック６１４に進み、ＧＣＣＲ３３０に保持された条件コード値が取り出される。条件命令が条件命令でない場合（つまりそれは浮動小数点命令である）、方法６００は、判定ブロック６０８から判定ブロック６１０に進む。
【００４９】
判定ブロック６１０では、プロセッサ１００は、インジケータ２０８が”１”かを判断する。インジケータ２０８が”１”である場合、条件命令が発行ステージ２０７で処理されたとき、ＬＣＣＲ３７０は最も最近の条件コード値を含む。その結果、方法６００はブロック６１２を続ける。ブロック６１２では、プロセッサ１００は、ＬＣＣＲ３７０に保持された条件コード値を取り出し、その条件命令が実行されるべきか否かを判定するために、取り出した条件コード値を使用する。ブロック６１２からは、方法はブロック６２４で終了する。
【００５０】
判定ブロック６１０において、プロセッサ１００が、インジケータ208は”１”ではない（つまり、それは”０”である)と断定した場合、初期設定により、最も最近の条件コード値はＧＣＣＲ３３０の中にある。プロセッサ１００は、条件命令が発行ステージ２０７中に処理されるとき、インジケータ２０８の値は”０”であると認識する。インジケータが”１”でない場合、方法６００はブロック６１４に進む。ブロック６１４は、プロセッサ100はＧＣＣＲ３３０から最も最近の条件コード値を取り出し、その取り出された条件コード値は、その条件命令が実行されるべきかどうか判断するために使用される。ブロック６１４からは、方法６００はブロック６２４で終了する。
【００５１】
判定ブロック６１６では、プロセッサ１００は、発行論理回路２０６によって発行ステージで処理された命令が条件コード（ＣＣ）値を変更するかを判断する。前述のように、ＦＭＳＴＡＴ命令に加え、整数比較命令および浮動小数点比較命令は、条件コード値を変更し得る命令のちょうど2つの例である。命令が条件コード値を変更する場合、方法６００は判定ブロック６１８を続ける。命令が条件コード値を変更しない場合、方法６００はブロック６２４で終了する。
【００５２】
判定ブロック６１８では、プロセッサ１００は、ローカル条件コードレジスタ（ＬＣＣＲ）３７０の中の条件コード値が変更されるかを判断する。前述の説明例を参照し直すと、ＦＭＳＴＡＴ命令は、ＬＣＣＲ３７０の中の条件コード値を変更する。それに対して、整数比較命令は、ＧＣＣＲ３３０の中の条件コード値を変更し、ＬＣＣＲ３７０の中の条件コード値は変更しない。命令が整数比較命令である場合、方法６００は、ブロック６２０に進み、”０”がインジケータ２０８に書かれる。あるいは、判定ブロック６１８において、プロセッサ１００が、命令はＦＭＳＴＡＴ命令であると断定した場合、方法６００はブロック６２２に進む。ブロック６２２では、プロセッサ１００は、ＦＭＳＴＡＴ命令が実行するとき、ＬＣＣＲ３７０が最も最近の条件コード値を含むことを示すために、インジケータ２０８に”１”を書き込む。ブロック６２０および６２２からは、方法６００はブロック６２４で終了する。
【００５３】
ここで開示した本実施形態に関連して示された様々な例示的論理ブロック、モジュール、回路、要素、および／または部品は、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）あるいはその他のプログラマブル論理デバイス、ディスクリート・ゲートあるいはトランジスタ・ロジック、ディスクリート・ハードウェア部品、又はここで開示した機能を実行するために設計された上記何れかの組み合わせを用いて実現又は実行され得る。汎用プロセッサとしてマイクロプロセッサを用いることが可能であるが、代わりに、従来技術によるプロセッサ、コントローラ、マイクロコントローラ、又は状態機器を用いることも可能である。プロセッサは、例えばＤＳＰとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、ＤＳＰコアに接続された１つ又は複数のマイクロプロセッサ、又はこのような任意の構成である計算部品の組み合わせとして実現することも可能である。
【００５４】
特定の実施形態がここで図解され記述されたが、当業者は、同じ目的を達成するために計算されたどの処置もこの特定の実施形態を代用し得るし、この発明が他の環境において他の応用を持つことを理解する。この応用は、どのような順応または本発明の変化もカバーするように意図される。続く請求項は、発明の範囲をここで記述された特定の実施形態に制限するように意図するものでは全くない。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［１］複数のパイプラインを持つパイプラインプロセッサであって、第１のパイプラインに関連づけられた第１の条件コードレジスタと第２のパイプラインに関連づけられた第２の条件コードレジスタとを持つパイプラインプロセッサで条件命令を実行する方法において、
最も最近の条件コード値を前記第１の条件コードレジスタまたは前記第２の条件コードレジスタのいずれかに記録すること、
前記第２の条件コードレジスタが前記最も最近の条件コード値を持つか否かを示すインジケータを設定すること、
前記インジケータに基づき、前記第１または第２の条件コードレジスタのいずれかから前記最も最近の条件コード値を取り出すこと、
前記取り出された最も最近の条件コード値に応じて前記条件命令が実行されるべきか否かを判定すること、
を具備する方法。
［２］前記第１のパイプラインは、整数命令を実行する［１］の方法。
［３］前記第２のパイプラインは、浮動小数点命令を実行する［１］の方法。
［４］前記第１の条件コードレジスタは、グローバル条件コードレジスタである［１］の方法。
［５］前記第２の条件コードレジスタは、ローカル条件コードレジスタである［１］の方法。
［６］前記条件コード値は、ネガティブ（Negative），ゼロ（Zero），キャリー（Carry）およびオーバーフロー（Overflow）の状態ビットを含む［１］の方法。
［７］前記インジケータは、単一の状態ビットである［１］の方法。
［８］複数のパイプラインを持つパイプラインプロセッサであって、第１のパイプラインに関連づけられた第１の条件コードレジスタと第２のパイプラインに関連づけられた第２の条件コードレジスタとを持つパイプラインプロセッサで条件命令を実行する方法において、
最も最近の条件コード値を前記第１の条件コードレジスタまたは前記第２の条件コードレジスタのいずれかに記録すること、
前記プロセッサ内の発行ステージで処理されるときに条件コードを設定する命令に応じて前記第２の条件コードレジスタが前記最も最近の条件コード値を持つかを示すインジケータを設定すること、
前記インジケータに基づき、前記第１または第２の条件コードレジスタのいずれかから前記最も最近の条件コード値を取り出すこと、
前記取り出された最も最近の条件コード値に応じて前記条件命令が実行されるべきか否かを判定すること、
を具備する方法。
［９］前記第１のパイプラインは、整数命令を実行する［８］の方法。
［１０］前記第２のパイプラインは、浮動小数点命令を実行する［８］の方法。
［１１］前記第１の条件コードレジスタは、グローバル条件コードレジスタである［８］の方法。
［１２］前記第２の条件コードレジスタは、ローカル条件コードレジスタである［８］の方法。
［１３］前記条件コード値は、ＮＺＣＶ（ネガティブ（Negative），ゼロ（Zero），キャリー（Carry），オーバーフロー（Overflow））状態ビットを含む［８］の方法。
［１４］前記インジケータは、単一の状態ビットである［８］の方法。
［１５］パイプラインプロセッサにおいて、
命令を実行するための複数のパイプラインと、
最も最近の条件コードを受け入れるように構成された、第１のパイプラインに関連づけられた第１の条件コードレジスタと、
最も最近の条件コードを受け入れるように構成された、第２のパイプラインに関連づけられた第２の条件コードレジスタと、
前記第２の条件コードレジスタが前記最も最近の条件コード値を含むか否かを示すように構成されたインジケータと、
を具備し、
前記プロセッサは、前記インジケータに基づき、前記最も最近の条件コード値を取り出し、前記取り出された最も最近の条件コード値に応じて条件命令を実行するか否かを判定するように構成された、
パイプラインプロセッサ。
［１６］前記第２のパイプラインは、浮動小数点命令を実行する［１５］のパイプラインプロセッサ。
［１７］前記第１の条件コードレジスタは、グローバル条件コードレジスタである［１５］のパイプラインプロセッサ。
［１８］前記第２の条件コードレジスタは、ローカル条件コードレジスタである［１５］のパイプラインプロセッサ。
［１９］前記条件コード値は、ＮＺＣＶ（ネガティブ（Negative），ゼロ（Zero），キャリー（Carry），オーバーフロー（Overflow））状態ビットを含む［１５］のパイプラインプロセッサ。
［２０］前記インジケータは、単一の状態ビットである［１５］のパイプラインプロセッサ。
【図１】
0005431308.tif 000002
【図２】
0005431308.tif 000003
【図３】
0005431308.tif 000004
【図４】
0005431308.tif 000005
【図５】
0005431308.tif 000006
【図６】
0005431308.tif 000007