(57)【要約】  パイプラインプロセッサ内で、複数のオペランドを有する条件命令を拡張する方法が開示される。この方法は、発行ステージの前に条件命令を識別し、複数のオペランドが所定のしきい値を超えるかどうか判定する。この方法は、条件命令を無条件命令および選択命令へと拡張する。この方法はさらに、無条件命令および選択命令を別々のパイプラインで実行する。
2010532063.tif 000002
【特許請求の範囲】
【請求項１】
複数のパイプラインを有するパイプラインプロセッサ内で、複数のオペランドを有する条件命令を拡張する方法であって、
発行ステージの前に前記条件命令を識別すること、
前記複数のオペランドが所定のしきい値を超えるかどうか判定すること、
前記条件命令を無条件命令および選択命令へと拡張すること、および
前記無条件命令および前記選択命令を別々のパイプラインで実行することを備える方法。
【請求項２】
前記選択命令が条件ＭＯＶ命令である、請求項１に記載の方法。
【請求項３】
前記選択命令が条件ＡＤＤ命令である、請求項１に記載の方法。
【請求項４】
前記所定のしきい値がレジスタファイルの読出しポートの数に等しい、請求項１に記載の方法。
【請求項５】
前記レジスタファイルが３つの読出しポートを有する、請求項４に記載の方法。
【請求項６】
前記条件命令が発行ステージで拡張される、請求項１に記載の方法。
【請求項７】
前記拡張された命令が、発行される前に、前記発行ステージ内でそれぞれ異なる命令キューに送られる、請求項１に記載の方法。
【請求項８】
前記無条件命令および前記選択命令を実行のために別々のパイプラインに送ることをさらに備える、請求項１に記載の方法。
【請求項９】
パイプラインプロセッサ内で、複数のオペランドを有する条件命令を拡張する方法であって、
プリデコードステージ中に、前記条件命令が、所定のしきい値を超えるオペランドを有すると識別すること、
前記命令が発行ステージで処理されるとき、前記条件命令を無条件命令および選択命令へと拡張すること、および
実行ステージ中に前記無条件命令および前記選択命令を実行することを備える方法。
【請求項１０】
前記選択命令が条件ＭＯＶ命令である、請求項９に記載の方法。
【請求項１１】
前記選択命令が条件ＡＤＤ命令である、請求項９に記載の方法。
【請求項１２】
前記オペランドが、複数の読出しポートを有するレジスタファイルから情報を受け取り、前記所定のしきい値が読出しポートの数に等しい、請求項９に記載の方法。
【請求項１３】
前記レジスタファイルが３つの読出しポートを有する、請求項１２に記載の方法。
【請求項１４】
条件命令が、所定のしきい値を超える複数のオペランドを有するかどうか識別するように構成されたプリデコード論理回路と、
前記識別された条件命令を受け取り、前記識別された条件命令を、無条件命令および選択命令を含むように拡張するように構成された発行論理回路と、
前記無条件命令および前記選択命令を実行するように構成された実行ユニットとを備えるパイプラインプロセッサ。
【請求項１５】
選択命令が前記条件命令の条件付けを反映する、請求項１４に記載のパイプラインプロセッサ。
【請求項１６】
前記選択命令が条件ＡＤＤ命令である、請求項１４に記載のパイプラインプロセッサ。
【請求項１７】
前記選択命令が条件ＭＯＶ命令である、請求項１４に記載のパイプラインプロセッサ。
【請求項１８】
前記選択命令および前記無条件命令が、別々のパイプラインで実行ユニットによって実行される、請求項１４に記載のパイプラインプロセッサ。
【請求項１９】
前記オペランドが、複数の読出しポートを有するレジスタファイルから情報を受け取り、前記所定のしきい値が読出しポートの数に等しい、請求項１３に記載のパイプラインプロセッサ。
【請求項２０】
前記レジスタファイルが３つの読出しポートを有する、請求項１７に記載のパイプラインプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般には、コンピュータシステムに関し、より詳細には、条件命令を無条件命令および選択命令へと拡張するための方法およびシステムに関する。
【背景技術】
【０００２】
プロセッサパイプラインは、命令に関連する特定の機能をそれぞれのステージが実施する多くのステージからなる。それぞれのステージは、パイプステージまたはパイプセグメントと呼ばれる。ステージは、パイプラインを形成するように共に接続される。命令は、パイプラインの片方の端から入り、もう片方の端から出る。命令は、パイプラインステージを通って続々連続して流れる。ステージは、いくつかのステップがいくつかの命令を同時に処理できるように構成される。複数の命令をそれぞれ異なるパイプラインステージで同時に処理することによって、プロセッサは、一度に１つの命令を処理するより高速に命令を処理することができ、したがってプロセッサの実行速度が向上する。
【０００３】
プロセッサ内には、複数のパイプライン処理命令があってよい。個々のパイプラインは、一意のプロセッサ機能を実施できる。例えば、プロセッサは、ロード／ストア命令を実行するためのあるパイプライン、および整数または論理ベースの命令を実行するための別のパイプラインを有することがある。命令の機能性に基づいてパイプラインを分離することによって、プロセッサは、命令の実行時にそのリソースをより効率的に使用できる。
【０００４】
プロセッサが命令を処理するとき、命令の実行に必要な情報が収集される。情報は、命令の各オペランドに関連し得る。プロセッサ内で、各命令について同時に収集可能な情報の量は、プロセッサのレジスタファイル内のポートの数によって制限されることがある。プロセッサのレジスタファイルは、読出しおよび書込みアクセス可能な大きいアレイからなることがある。プロセッサがサポートする読出しポートの数は、プロセッサ内の使用可能なハードウェア空間、ならびにそれぞれの読出しポートに必要な追加の電力によって制限されることがある。プロセッサは、命令の各オペランドに関連する情報を取り出すために、それぞれの読出しポートを使用する。
【０００５】
より複雑な命令がプロセッサの命令セットに追加されるにつれて、命令が実行されているときに命令のすべてのオペランドについての情報を同時に取り出すために追加の読出しポートが必要になることがある。一般に、より新しい命令は、読出しポートより多くのオペランドを有し得る。プロセッサに十分な読出しポートがない場合、命令は、追加のプロセッサ実行サイクルを必要とし得る。その結果、プロセッサの効率が影響を受けることがある。
【０００６】
読出しポート数の制限に関連する実行の遅れによって影響され得るあるタイプの命令は、条件命令である。条件命令は一般に、条件部、および論理関数、算術関数などの無条件部からなる。読出しポートが不足しているために、読出しポートより多くのオペランドを有する条件命令は、複数のプロセッサ実行サイクルを必要とすることがある。
【発明の概要】
【０００７】
したがって、使用可能な読出しポートより多くのオペランドを有する条件命令の実行を加速するやり方が、この業界で求められている。命令実行は、無条件関数から命令の条件部を分離することによって加速することができる。この分離によって、元の条件命令より少ない読出しポートをそれぞれが必要とする、より小さい２つの命令がもたらされる。これらの別個の命令の実行は、プロセッサの並行処理能力を利用するために、それぞれ異なるパイプラインで同時に実施できる。
【０００８】
複数のパイプラインを有するパイプラインプロセッサ内で、複数のオペランドを有する条件命令を拡張する方法が開示される。この方法は、発行ステージの前に条件命令を識別し、複数のオペランドが所定のしきい値を超えるかどうか判定する。この方法は、条件命令を無条件命令および選択命令へと拡張する。この方法はさらに、無条件命令および選択命令を別々のパイプラインで実行する。
【０００９】
パイプラインプロセッサ内で、複数のオペランドを有する条件命令を拡張する方法が開示される。この方法は、プリデコードステージ中に、条件命令が、所定のしきい値を超えるオペランドを有すると識別する。この方法は、命令が発行ステージで処理されるとき、条件命令を無条件命令および選択命令へと拡張する。この方法はさらに、実行ステージ中に、無条件命令および選択命令を実行する。
【００１０】
パイプラインプロセッサ内で、複数のオペランドを有する条件命令を拡張する方法が開示される。この方法は、発行ステージの前に条件命令を識別し、複数のオペランドが所定のしきい値を超えるかどうか判定する。この方法は、条件命令を無条件命令および選択命令へと拡張する。この方法はさらに、無条件命令および選択命令を実行する。
【００１１】
プリデコード論理回路を有するパイプラインプロセッサが開示される。プリデコード論理回路は、条件命令が、所定のしきい値を超えるオペランドを有するかどうか識別するように構成される。プリデコード論理回路は、発行論理回路と通信し、発行論理回路は、識別された条件命令を受け取り、識別された条件命令を拡張するように構成される。発行論理回路は、拡張された条件命令を実行するように構成された実行ユニットと通信する。
【００１２】
本発明のより完全な理解、ならびに本発明のさらなる特徴および利点は、以下の詳細な説明および添付の図面から明らかになる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態を使用するプロセッサのハイレベル論理ハードウェアブロック図。
【図２】図１のＣＰＵの上位および下位パイプラインのより詳細なブロック図。
【図３Ａ】図１のプロセッサによって実行される例示的な命令群を示す図。
【図３Ｂ】例示的な拡張命令群を示す図。
【図４Ａ】図１のプロセッサによって実行される別の例示的な命令群を示す図。
【図４Ｂ】別の例示的な拡張命令群を示す図。
【図５】図３Ａ〜３Ｂの例示的な命令群が図１のプロセッサの様々なステージを通して実行されるときの命令群のタイミング図。
【図６】図１のプロセッサの上位および下位パイプラインを通る例示的な命令フローを示す流れ図。
【発明を実施するための形態】
【００１４】
添付の図面に関して以下に述べられる詳細な説明は、本発明の様々な実施形態の説明として意図されており、本発明を実施し得る実施形態だけを表すためのものではない。詳細な説明は、本発明についての完全な理解を促すための具体的な詳細を含む。しかし、本発明は、これらの具体的な詳細なしに実施できることが当業者には明らかであろう。いくつかの例では、よく知られている構造およびコンポーネントは、本発明の概念を曖昧にしないためにブロック図の形で示されている。頭文字および他の説明的な用語は、単に便宜上、また明瞭にするために使用することができ、本発明の範囲を制限するものではない。
【００１５】
図１は、後述される本発明の一実施形態を使用するスーパースカラプロセッサ１００のハイレベル図を示している。プロセッサ１００は、命令キャッシュ１０６に専用の高速バス１０４を介して結合された中央処理装置（ＣＰＵ：central processing unit）１０２を有する。命令キャッシュ１０６は、汎用バス１１０を介してメモリ１０８にも結合される。ＣＰＵ  １０２は、下位パイプライン１６０および１６５に結合された上位パイプライン１５０を有する。ＣＰＵ  １０２は、メモリ１０８から命令キャッシュ１０６への命令のロードを制御する。当業者には理解されるように、命令キャッシュ１０６は、メモリ１０８とプロセッサ１００の間の速度ギャップを埋めるように設計された専門メモリであってよい。メモリ１０８からフェッチされた命令は、プロセッサクロック速度で読み出すことができるより高速の命令キャッシュ１０６内に置かれる。命令キャッシュ１０６に命令がロードされた後、ＣＰＵ  １０２は、高速バス１０４を介して命令にアクセスする。命令は、命令キャッシュ１０６から上位パイプライン１５０にロードされる。命令は、上位パイプライン１５０で処理された後、さらなる処理のために下位パイプライン１６０または１６５に送られる。図２の議論で述べられるように、上位パイプライン１５０は、所定のしきい値より多いオペランドを有する条件命令を識別できる論理回路を含んでよい。これらの条件命令が識別された後、プロセッサ１００は、本発明の一実施形態に従ってそれらを処理してよい。
【００１６】
命令は、順次プログラム順に上位パイプライン１５０を離れる。上位パイプライン１５０を離れた後、命令は、より効率的な処理のために、下位パイプライン１６０または１６５で再構成されてよい。上位パイプライン１５０で命令に対して実施されるいくつかの例示的な処理機能には、命令のフェッチ、命令の整列、命令のデコード、下位パイプライン１６０または１６５への命令の発行などが含まれ得る。下位パイプライン１６０および１６５内で、命令処理は、命令の追跡、命令の実行のためのオペランド情報の取出し、命令の実行、命令結果の記録などを含んでよい。
【００１７】
下位パイプライン１６０および１６５は、演算論理装置、浮動小数点演算ユニット、ストアユニット、ロードユニットなど、様々な実行ユニット（ＥＵ：execution unit）１３０を含んでよい。例えば、ＥＵ１３０は、整数加算、整数減算、整数乗算、ビット単位の論理演算（例えばＡＮＤ、ＮＯＴ、ＯＲ、ＸＯＲ）、ビットシフトなど、広範囲の算術関数を実行するための演算論理装置を有してよい。あるいは、ＥＵ１３０は、ＭＯＶ、ＬＯＡＤなど、ロード／ストア演算を実施するための実行ユニットを有してよい。プロセッサ１００の効率を高めるために、下位パイプライン１６０および１６５は、特定の機能を実施するように編成されてよい。例えば、下位パイプライン１６０は、算術および論理命令を実行するＥＵ１３０を含んでよく、下位パイプライン１６５は、ロード／ストア命令を実行するＥＵ１３０を含んでよい。特定の命令機能性を別々の下位パイプライン１６０または１６５に分離することによって、複製のＥＵ１３０は不要となり得る。
【００１８】
当業者には理解され得るように、パイプラインステージは、命令を保持するように設計されたレジスタまたはレジスタ群を有し得る。命令が特定のステージに入るとき、プロセッサ１００は、そのステージにリンクされたレジスタまたはレジスタ群に命令をロードする。命令が各ステージ内でレジスタまたはレジスタ群に保持されるとき、論理回路は、命令に応じて特定の演算を実施できる。論理回路が、意図された演算を実施した後、次いで命令は、次の順次ステージに渡される。
【００１９】
図２は、ＣＰＵ  １０２の上位パイプライン１５０のより詳細なブロック図を示している。上位パイプライン１５０は、高速バス１０４によって命令キャッシュ１０６に結合されたフェッチ論理回路２０２を有する。フェッチ論理回路２０２は、プリデコード論理回路２０１およびフェッチステージ２０３にも結合される。フェッチステージ２０３は、次いで発行ステージ２０７に結合されるデコードステージ２０５に結合される。デコードステージ２０５には、デコード論理回路２０４が結合される。同様に、発行ステージ２０７は、発行論理回路２０６に結合される。発行ステージ２０７内には、下位パイプライン１６０および１６５への命令発行の前に命令を保持するいくつかの命令キュー（説明しやすくするために図示せず）がある。命令キューは、下位パイプライン１６０または１６５のうちの１つで処理される命令を受け付けるように編成されてよい。当業者には理解されるように、命令キューは、ＦＩＦＯ（first in first out：先入れ先出し）バッファとして働き、発行前に命令を順番に保持する。
【００２０】
命令は、上位パイプライン１５０に入り、フェッチステージ２０３から発行ステージ２０７を通って進む。命令は、発行ステージ２０７を離れた後、下位パイプライン１６０または下位パイプライン１６５で実行される。下位パイプライン１６０内には、実行ステージ２２０およびＥＵ１３０がある。下位パイプライン１６５は、実行ステージ２２５およびＥＵ１３０を有する。下位パイプライン１６０および１６５は、それぞれレジスタファイル２３０または２３５にアクセスする。一実施形態では、レジスタファイル２３０および２３５は、互いのミラーイメージであってよい。一実施形態では、レジスタファイル２３０および２３５は、命令が実行ステージ２２０または２２５で実行されるときに命令オペランド情報を提供するための３つの読出しポートを有してよい。
【００２１】
上位パイプライン１５０で、フェッチ論理回路２０２は、命令を決定し、順次にフェッチする。フェッチプロセスの一環として、プロセッサ１００はまず、命令が命令キャッシュ１０６内に既にあるかどうか判定する。命令が命令キャッシュ１０６内にまだない場合は、プロセッサ１００は、メモリ１０８から命令を取り出し、命令キャッシュ１０６に命令をロードする。プリデコード論理回路２０１は、命令が命令キャッシュ１０６にロードされる前に、命令に関する特性情報を決定するためにフェッチ論理回路２０２とインターフェースする。例えば、プリデコード論理回路２０１は、条件命令の命令キャッシュ１０６へのロード前に、命令がそのオペランドが所定のしきい値を超えている条件命令であることを識別することができる。この実施例では、プリデコード論理回路２０１は、命令キャッシュ１０６内の命令に「タグ付け」し、それによって、命令がこの特性情報を有すると識別できる。特性情報は、命令の処理を加速するために、上位パイプ１５０内で他の論理回路によって使用されてもよい。
【００２２】
命令キャッシュ１０６で、命令は、キャッシュラインとして知られているセクションへグループ化される。それぞれのキャッシュラインは、複数の命令を含んでよい。それぞれのキャッシュライン内で、命令に関連する追加情報が保存されてよい。命令は、命令キャッシュ１０６から一度に複数の命令をフェッチできる。命令は、フェッチ論理回路２０２によってフェッチされた後、デコードステージ２０５に送られる。
【００２３】
デコードステージ２０５で、命令は、命令のすべての詳細を識別するために、デコード論理回路２０４によってデコードされる。上記に言及されたように、プリデコード論理回路２０１は、命令の一般的な特性を識別できる。デコードステージ２０５で、命令に関連する追加の情報が識別される。例えば、命令のタイプ（すなわちＡＤＤＥＱ、ＳＵＢＥＱ、ＡＮＤなど）、命令でアドレッシングされる特定のレジスタ、および命令のいずれかの依存性が、デコードステージ２０５で、デコードロジック回路２０４によって識別される。デコードステージ２０５中に取り出され、または識別された情報によって、プロセッサ１００は、下位パイプライン１６０または１６５のどちらがさらなる処理のための命令を受け取るか判定することができる。命令は、デコードステージ２０５で処理された後、発行ステージ２０７に移る。
【００２４】
発行ステージ２０７で、発行論理回路２０６は、どちらの下位パイプライン１６０または１６５が命令を受け取るか判定する。下位パイプライン１６０は、算術命令を実行するように設計されてよく、下位パイプライン１６５は、ロード／ストア命令を実行するように設計されてよい。発行論理回路２０６は、実行のために命令が下位パイプライン１６０または１６５のどちらに送られるかに従って命令を命令キュー内に構成する。図３Ａ〜３Ｂおよび４Ａ〜４Ｂの議論でより詳細に説明するように、発行論理回路２０６は、プロセッサの効率を高めるために、プリデコード論理回路２０１によってタグ付けされた特定の命令を拡張できる。
【００２５】
発行ステージ２０７から、命令は、実行のために下位パイプライン１６０および１６５に送られる。下位パイプライン１６０および１６５内には、予約ステージ、レジスタアクセスステージなど、他の様々なステージが存在してよいが、説明しやすくするために図示されていない。命令が実行ステージ２２０または２２５に達するとき、プロセッサ１００は、命令の実行に必要なオペランド情報を取り出すために、適切なレジスタファイル２３０または２３５にアクセスする。上記に言及されたように、レジスタファイル２３０および２３５は、互いのミラーイメージであってよい。したがって、プロセッサ１００は、レジスタファイル２３０を更新するとき、レジスタファイル２３５をも更新する。レジスタファイル２３０および２３５の複製コピーを使用して、プロセッサ１００は、それぞれの下位パイプライン１６０または１６５内で複数の命令を同時に実行できる。情報がレジスタファイルから取り出された後、ＥＵ１３０は、命令を実行し、命令実行の結果が、レジスタファイル２２５および２３５に書き戻される。
【００２６】
図３Ａは、プロセッサ１００によって実行できる例示的な命令群３００を示している。図３Ａの命令Ａは、４つのソースオペランド、Ｒ１、Ｒ２、Ｒ３およびＲ４を有する条件加算命令である。命令のソースオペランドは、読出しポートを介してレジスタファイル２３０および２３５から読み出される情報に対応する。レジスタファイル２３０または２３５に送られる情報は、宛先オペランドによって指定されてよく、書込みポートを使用してレジスタファイル２３０および２３５に書き込まれる。命令Ｂは、２つのソースオペランド（Ｒ７およびＲ６）と、１つの宛先オペランド（Ｒ５）とを有する減算命令である。命令Ｃは、２つのソースオペランド（Ｒ５およびＲ８）と、１つの宛先オペランド（Ｒ９）とを有する乗算命令である。
【００２７】
より詳細に説明されるように、命令Ａは、その元の形ではプロセッサ１００によって実行することができない。そうするのではなく、本発明の一実施形態を使用して、プロセッサ１００は、より効率的に処理するために命令Ａを２つのより小さい命令へと修正できる。説明しやすいように命令Ａについては、様々な実施形態の発明概念の理解のため、従来のプロセッサによって実行されるかのように述べられている。
【００２８】
従来のプロセッサによる命令Ａの処理（条件ＡＤＤ  ｉｎｓｔ）の間、ソースオペランドＲ１、Ｒ２、Ｒ３およびＲ４の値が、レジスタファイル２３０または２３５から読み出される。ソースオペランドの値が読み出された後、レジスタＲ３の値が、Ｒ４に含まれた値だけシフトされ、結果が、レジスタＲ２の内容と加算される。条件ゼロフラグが「０」である場合は、その加算の結果が、Ｒ１に格納される。ゼロフラグが「１」である場合は、レジスタＲ１の内容が、その以前の値に戻される。
【００２９】
当業者には理解されるように、ＡＲＭ（登録商標）プロセッサ内の条件フラグは、ＮＺＣＶステータスビット（Ｎ＝ネガティブ、Ｚ＝ゼロ、Ｃ＝キャリー、Ｖ＝オーバーフロー）に対応し得る。条件フラグは、比較命令など、特定の命令によって設定され得る。プロセッサ１００は、条件命令が実行されるかどうか判定するために条件フラグを使用する。条件が満たされていないために条件命令が実行されない場合は、プロセッサは、以前に読み込まれた値をターゲットレジスタに再び書き戻す。命令Ａでは、ターゲットレジスタはＲ１である。
【００３０】
命令Ａの従来の処理の間、Ｒ１の値は条件フラグに応じて、計算された新しい値、またはＲ１の以前の値となる。条件が満たされなない場合は（すなわち条件ゼロフラグ＝「０」）、従来のプロセッサは、Ｒ１の書込みを取り消す。従来のプロセッサがこの機能を実施する１つのやり方は、レジスタリネームを使用することである。特に、命令Ａが実行されるとき、Ｒ１の古い値が読み出され、別のレジスタに保存され、命令が実行されなかった場合は、レジスタはリネームされて、Ｒ１に戻される。この場合にレジスタリネームを使用するには、追加のプロセッサ時間、ならびに他のプロセッサリソースを必要とすることがある。本発明の実施形態は、命令の条件付けが満たされない場合のレジスタリネームを不要にすることができる。
【００３１】
上記に言及されたように、プロセッサ１００は、レジスタファイル２３０または２３５ごとに３つの読出しポートを有してよい。命令Ａが４つのソースオペランドを有するので、ソースオペランドの数は、読出しポートの数より１つ多い。レジスタファイル２３０および２３５の読出しポートの数は、条件命令が拡張に適するかどうか判定するための所定のしきい値として使用できる。代替の一実施形態では、レジスタファイル当たり２つの読出しポートだけを備えたプロセッサは、２の所定のしきい値を有してよい。
【００３２】
命令Ａがフェッチステージ２０３で処理された場合、プリデコード論理回路２０１は、命令Ａが読出しポートより多くのオペランドを有する条件命令であり、したがって所定のしきい値を超えると識別していることがある。この実施例では、命令Ａは、命令キャッシュ１０６にロードされたとき、この情報で「タグ付け」されていることがある。一実施形態では、タグ付き情報は、命令Ａが発行ステージ２０７で処理されるとき、命令Ａを２つのより小さい命令へと拡張するために発行論理回路２０６によって使用される。次いで、２つのより小さい命令はそれぞれ、別々のパイプラインに送られ、同時に実行されてよい。
【００３３】
例示的な一実施形態では、命令Ａは、命令Ａが発行ステージ２０７で処理されるとき、図３Ｂに示されるようにＡ１およびＡ２の命令群で置き換えられる。発行論理回路２０６は、タグ付き情報を使用して、命令Ａを２つのより小さい命令へと拡張できると識別する。その結果、発行論理回路２０６は、（命令Ａ１に反映される）条件付き部を削除することにより命令Ａを修正し、別個の選択命令Ａ２を作成する。図３Ｂに示された拡張物では、選択命令Ａ２は、命令Ａの同じ条件付けを反映する条件ＭＯＶ命令である。換言すると、命令ＡおよびＡ２の条件付けは、Ｚビットが「０」に等しいことが条件となる。命令拡張プロセスを単純にするために、拡張された命令の元の条件付けを反映する条件ＭＯＶ命令をデフォルトの選択命令として使用できる。他のプロセッサアーキテクチャでは、他の条件命令をデフォルト選択命令として使用してもよい。命令Ａ１およびＡ２は、機能的にそれぞれ異なる（すなわち、命令Ａ１は算術命令であり、Ａ２がタイプロード／ストア命令である）ので、別々のパイプラインで実行してよい。その結果、命令Ａ１およびＡ２は、発行ステージ２０７内でそれぞれ異なる命令キューに挿入できる。出力時、命令Ａ１は、実行のために下位パイプライン１６０に送られてよく、命令Ａ２は、実行のために下位パイプライン１６５に送られてよい。
【００３４】
命令Ａ１は、３つのソースオペランドＲ４、Ｒ３およびＲ２と、１つの宛先オペランドＴ１とを有する。命令Ａ１は、レジスタＲ３内の値を、Ｒ４に含まれた値だけシフトし、その結果に、レジスタＲ２の内容が加算される。命令Ａ１の結果は、一時レジスタＴ１に保存される。選択命令Ａ２は、条件フラグＺビットが「０」である場合は、Ｔ１の値をＲ１に移動する条件移動命令である。選択命令Ａ２は、Ｔ１の値をＲ１に書き込むか、それともＲ１の値を変えないままにするか選択する。
【００３５】
発行論理回路２０６が命令Ａ１およびＡ２を作成するとき、プロセッサ１００は、命令Ａ１が選択命令Ａ２への依存性を有することをも識別する。具体的には、命令Ａ１とＡ２の間に、データハザードが存在する。プロセッサ１００は、命令Ａ１が終了するまで選択命令Ａ２を実行せず、そうでない場合は、ＲＡＷ（Read After Write：書込み後読出し）ハザードが生じる。このため、プロセッサ１００は、選択命令Ａ２を実行する前に、命令Ａ１の結果が使用可能になるまで待つ。
【００３６】
一実施形態では、プロセッサ１００は、下位パイプライン１６０など、ある下位パイプラインでは算術命令を実行し、他のパイプライン１６５ではロード／ストア命令を実行してよい。本明細書に提示された諸実施形態は、３つ以上のパイプラインを有するプロセッサに適用できる。これらの実施形態では、拡張された命令をどの下位パイプラインに送るかの選択は、命令が発行ステージ２０７で処理されるとき、発行論理回路２０６によって行われる。
【００３７】
図４Ａは、プロセッサ１００によって実行できる別の例示的な命令群４００を示している。図４Ａの命令Ｄは、４つのソースオペランド、Ｒ１、Ｒ２、Ｒ３およびＲ４を有する排他的論理和またはノットイコール命令である。命令Ｅは減算命令であり、命令ＦはＯＲ命令である。命令Ｄがプロセッサ１００によって実行される場合、ソースオペランドＲ１、Ｒ２、Ｒ３およびＲ４の値が、レジスタファイル２３０および２３５から読み出される。命令Ｄ内で、レジスタＲ３の値は、Ｒ４に含まれた値だけシフトされ、その結果はレジスタＲ２の内容で排他的論理和計算される。条件のゼロフラグが「１」である場合は、排他的論理和計算の結果は、Ｒ１に格納される。ゼロフラグが「０」である場合は、レジスタＲ１の内容は、その以前の値に戻される。
【００３８】
別の例示的な実施例によって、命令Ｄは、発行ステージ２０７で処理されるとき、図４Ｂに示されたＤ１およびＤ２の命令群で置き換えられる。プロセッサ１００が命令群３００で命令Ａを処理するやり方に類似して、発行論理回路２０６は、グ付き情報を使用して、命令Ｄを２つのより小さい命令へと拡張できると識別する。その結果、発行論理回路２０６は、（命令Ｄ１に反映される）条件付き部を削除することにより命令Ｄを修正し、選択命令Ｄ２を作成する。図４Ｂの実施形態に示されるように、選択命令Ｄ２は、命令Ｄの同じ条件付けを反映する条件ＭＯＶ命令である。命令Ｄの条件付けおよび選択命令Ｄ２は、ノットイコール条件（Ｚフラグ＝「１」）に基づく。命令Ｄ１およびＤ２は、発行ステージ２０７で挿入された後、適切な命令キューにロードされ、実行するために、それぞれ異なる下位パイプライン１６０および１６５に送られる。
【００３９】
命令Ｄ１は、Ｒ３の値を、レジスタＲ２に含まれた値だけシフトし、シフトの結果が、レジスタＲ２の内容で排他的論理和計算される。排他的論理和計算の結果は、一時レジスタＴ１内に保存される。選択命令Ｄ２は、条件フラグＺビットが「１」である場合は、Ｔ１の値をＲ１に移動する条件移動命令である。選択命令Ａ２に類似して、選択命令Ｄ２は、Ｔ１の値をＲ１に書き込むか、それともＲ１の値を変えないままにするか選択する。
【００４０】
発行論理回路２０６が命令Ｄ１およびＤ２を作成するとき、プロセッサ１００は、命令Ｄ１が命令Ｄ２への依存性を有することをも識別する。命令Ｄ２は、命令Ｄ１の終了まで実行することができず、そうでない場合は、ＲＡＷ（書込み後読出し）ハザードが生じる。プロセッサ１００は、命令Ｄ２を実行する前、命令Ｄ１の結果が使用可能になるまで待つ。
【００４１】
図５は、命令群３００が上位パイプライン１５０、ならびに下位パイプライン１６０および１６５の様々なステージを通って処理される間の命令群のタイミング図５００を示している。タイミング図５００では、プロセッササイクル５０２がＹ軸５０４に沿って示されており、プロセッサ１００内のステージ（フェッチステージ２０３、デコードステージ２０５、発行ステージ２０７、実行ステージ２２０および実行ステージ２２５）がＸ軸５０６に沿って識別されている。タイミング図５００に示された命令は、様々なステージに入っているものとして示されている。一実施形態では、タイミング図５００は、１つの命令が、各プロセッササイクルで各ステージに入ることを示す。しかし、代替実施形態では、プロセッサ１００は、プロセッササイクル当たり複数の命令を処理できる。本明細書に提示された教示は、単一命令発行のプロセッサに適用することも、複数命令発行のプロセッサに適用することもできる。説明しやすくするために、命令群３００について論じられているが、命令群３００および命令４００が同じように拡張されるので、同じタイミング図が命令群４００に適用される。
【００４２】
図５に示されるように、命令Ａは、プロセッササイクル１において、フェッチステージ２０３で命令キャッシュ１０６からフェッチされる。命令Ａが命令キャッシュ１０６からフェッチされる前に、フェッチ論理回路２０２は、メモリ１０８から命令Ａを取り出す。命令Ａがメモリ１０８から命令キャッシュ１０６にロードされるとき、プリデコード論理回路２０１は、命令Ａが条件命令であると判定する。命令Ａが条件命令であるので、プリデコード論理回路２０１は続いて、命令Ａのソースオペランドが所定のしきい値を超えると判定する。命令Ａが４つのソースオペランドを有し、所定のしきい値が３であるので、命令Ａは、拡張対象とタグ付けされる。
【００４３】
フェッチステージ２０３から、命令Ａは、プロセッササイクル２で、デコード論理回路２０４によってデコードステージ２０５で処理される。デコードステージ２０５中、プロセッサ１００は、命令Ａが条件加算命令であると識別する。やはりデコードステージ２０５で、プロセッサは、オペランド情報、ならびに命令Ａにリンクされたいずれかの従属性を識別できる。命令Ａが条件加算命令であるので、プロセッサ１００は、算術演算をサポートするＥＵを下位パイプライン１６０が含む限り、命令Ａを下位パイプライン１６０に向けることができる。しかし、命令Ａは、プリデコード論理回路２０１によってタグ付けされているので、その元の形では下位パイプライン１６０に送ることができない。命令Ａは、デコードステージ２０５で処理された後、プロセッササイクル３で発行ステージ２０７に送られる。やはりプロセッササイクル２の間、命令Ｂは、フェッチステージ２０３中にフェッチ論理回路２０２によってフェッチされる。
【００４４】
プロセッササイクル３で、プロセッサは、命令キャッシュ１０６から命令Ｃをフェッチし、命令Ｂは、デコードステージ２０５で、デコード論理回路２０４によって処理される。命令Ａがプロセッササイクル３で発行ステージ２０７にロードされる場合、発行論理回路２０６は、命令Ａがタグ付き命令である（例えば、命令Ａが、読出しポートより多くのソースオペランドを有する条件命令である）と識別し、一実施形態に従って命令Ａを修正する。命令Ａの代わりに、発行論理回路２０６は、命令Ａ１およびＡ２を命令ストリームに、より具体的には発行ステージ２０７内の適切な命令キューに挿入する。
【００４５】
プロセッサ１００が命令Ａ１およびＡ２を発行するとき、プロセッサ１００は、プロセッササイクル４に示されるように、命令をそれぞれ異なるパイプラインに送る。プロセッササイクル４で、命令Ａ１は、下位パイプライン１６０において実行ステージ２２０で実行され、命令Ａ２は、下位パイプライン１６５において実行ステージ２２５で実行される。Ａ１およびＡ２をそれぞれ異なるパイプラインで実行することによって、２つの命令を同じプロセッササイクル中に実行することができ、それによって、プロセッサ１００の処理効率が高まる。プロセッササイクル４で命令Ａ１およびＡ２を実行する間、両方のレジスタファイル２３０および２３５が、プロセッサ１００によってアクセスされる。まず、命令Ａ１が実行され、次いで、同じプロセッササイクル中に、命令Ａ２が実行される。単純にするために、タイミング図５００は、実行ステージ２２０および２２５に到達するのに命令Ａ１およびＡ２が１つのプロセッササイクルしか必要としないことを示している。しかし、実際には、命令Ａ１およびＡ２は、実行ステージ２２０および２２５に到達するのにいくつかのプロセッササイクルを要することがある。プロセッササイクル４の間、命令Ｂは、発行ステージ２０７で処理され、命令Ｃは、デコードステージ２０５で処理される。
【００４６】
プロセッササイクル５で、命令Ａ１およびＡ２は、その実行を終了しており、レジスタファイル２３０および２３５は、その結果で更新される。やはりプロセッササイクル５で、命令Ｂは、実行ステージ２２０で実行され、命令Ｃは、発行ステージ２０７で処理される。
【００４７】
上記に論じられたように、選択命令（すなわち命令Ａ２または命令Ｄ２）のために、他の条件命令を使用してよい。例えば、選択命令用のＭＯＶＥＱ命令ではなく、以下に示されるようなＡＤＤＥＱ命令を、それぞれ命令Ａ２またはＤ２の代わりに用いることができる。
【００４８】
Ａ３：ＡＤＤＥＱ  Ｒ１，Ｔ１，＃０または
Ｄ３：ＡＤＤＮＥ  Ｒ１，Ｔ１，＃０
この実施例では、２つの下位パイプライン１６０および１６５は、算術命令をサポートするＥＵ１３０を有してよい。命令Ａ３内で、条件フラグＺビットが「１」である場合は、一時レジスタＴｌの内容にゼロ０が加えられ、結果がＲ１に書き込まれる。命令Ｄ３内で、条件フラグＺビットが「０」である場合は、一時レジスタＴｌの内容にゼロ０が加えられ、結果がＲ１に書き込まれる。
【００４９】
図６は、本発明の一実施形態によって実施されたプロセス６００を示す流れ図である。プロセス６００は、開始ブロック６０２から始まる。ブロック６０４で、プロセッサ１００は、命令をフェッチするためにフェッチ論理回路２０２を使用する。命令が命令キャッシュ１０６に存在しない場合は、フェッチ論理回路２０２は、メモリ１０８から命令を取り出す。メモリ１０８から命令をフェッチし、命令キャッシュ１０６内に命令を入れる間、プリデコード論理回路２０１は、ブロック６０６で、命令が条件命令かどうか判定する。命令が条件命令でない場合は、プロセスは、ブロック６１２に進む。命令が条件命令である場合は、プロセス６００は、判定ブロック６０８に進む。
【００５０】
判定ブロック６０８で、プリデコード論理回路２０１は、条件命令のオペランドの数が所定のしきい値を超えるかどうか判定する。上記に言及されたように、所定のしきい値は、各レジスタファイル２２５または２３５の読出しポートの数に対応し得る。判定ブロック６０８で、条件命令のオペランドが所定のしきい値を超える場合は、プロセス６００は、ブロック６１０に進む。条件命令のオペランドの数が所定のしきい値を超えない場合は、プロセス６００は、ブロック６１２へと続く。
【００５１】
ブロック６１０で、プロセッサ１００は、条件命令を拡張可能な条件命令とタグ付けする。タグ付きの情報は、条件命令が命令キャッシュ１０６に書き込まれるとき、プリデコード論理回路２０１によって書き込むことができる。より具体的には、タグ付きの情報は、条件命令用のキャッシュライン内に常駐してよい。ブロック６１０から、プロセス６００は、ブロック６１２へと続く。
【００５２】
ブロック６１２で、命令が、デコードステージ２０５で処理される。上記に言及されたように、命令がデコードステージ２０５で処理されるとき、プロセッサ１００は、命令の実行に必要な残りの情報すべてを識別する。ブロック６１４に示されるように、デコードステージ２０５から、命令は、発行ステージ２０７に送られる。発行ステージ２０７内で行われる処理の一環として、判定ブロック６１６でプロセッサ１００は、命令が、そのオペランドが所定のしきい値を超える条件命令であるとフラグ付けされているかどうか判定する。命令がフラグ付けされている場合は、条件命令は、ブロック６１８に示されるように、適切なパイプライン内で拡張され実行される。ブロック６１８から、プロセス６００は、ブロック６２０で終了する。命令は、フラグ付けされていない場合は、適切なパイプラインに渡され、プロセス６００は、ブロック６２０で終了する。
【００５３】
本明細書に開示された諸実施形態に関連して述べられた様々な例示的な論理ブロック、モジュール、回路は、エレメントおよび／またはコンポーネントは、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ：digital signal processor）、特定用途向け集積回路（ＡＳＩＣ：application specific integrated circuit）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ：field programmable gate array）または他のプログラマブル論理コンポーネント、個別ゲートまたはトランジスタ論理、個別ハードウェア部品、あるいは本明細書に述べられた諸機能を実施するように設計されたその任意の組合せで実装または実施できる。汎用プロセッサは、マイクロプロセッサであってよいが、別法では、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラまたはステートマシンであってよい。プロセッサは、コンピューティングコンポーネントの組合せ、例えばＤＳＰとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと連携する１つまたは複数のマイクロプロセッサ、または他の任意のこうした構成として実装することもできる。
【００５４】
本明細書では特定の実施形態について示し述べたが、同じ目的を達成すると見込まれる任意の構成を、示された特定の諸実施形態の代わりに用いることができ、また本発明は、他の環境においては他の適用例を有することが当業者には理解されよう。本出願は、本発明のどのような適応物または変形物をも網羅するものである。添付の特許請求の範囲は、本発明の範囲を、本明細書に述べられた特定の諸実施形態に限定するものでは決してない。
【図１】
2010532063.tif 000003
【図２】
2010532063.tif 000004
【図３Ａ】
2010532063.tif 000005
【図３Ｂ】
2010532063.tif 000006
【図４Ａ】
2010532063.tif 000007
【図４Ｂ】
2010532063.tif 000008
【図５】
2010532063.tif 000009
【図６】
2010532063.tif 000010
【国際調査報告】
2010532063.tif 000011
2010532063.tif 000012
2010532063.tif 000013