(57)【特許請求の範囲】
【請求項１】
マイクロプロセッサ内で命令を実行する方法であって、
第１のレジスタと第２のレジスタの内容に影響する複雑命令を発行することと、
命令の影響を受ける第１のレジスタの内容を記憶するために第１のリオーダ・バッファから第１のリネーム・レジスタを割り振ることと、
命令の影響を受ける第２のレジスタの内容を記憶するために第２のリオーダ・バッファから第２のリネーム・レジスタを割り振ることを含み、
第２のリオーダ・バッファを使用する第２のリネーム・レジスタの割振りにより、命令が第１のリオーダ・バッファ内の複数の割振りスロットを消費するのを防止する方法。
【請求項２】
発行した命令が複雑命令を含み、第１のリオーダ・バッファがサイクルあたり最大数の割振りをサポートし、複雑命令を発行することが、単一サイクル中に複雑命令を含む１組の命令を発行することを含み、その１組の命令内の命令の数が第１のリオーダ・バッファによってサポートされるサイクルあたりの最大数の割振りに等しい、請求項１に記載の方法。
【請求項３】
前記１組の命令が、前記複雑命令と単一レジスタの内容に影響する単純命令との組合せを含む、請求項２に記載の方法。
【請求項４】
発行した命令が複雑命令を含み、複雑命令の発行以後、第２の命令を発行することであって、第２の命令が第２のリネーム・レジスタに依存することと、それに応答してリオーダ・バッファ情報を第２の命令に関連づけることであって、そのリオーダ・バッファ情報が２次バッファ内で割り振られたレジスタに対する第２の命令の依存関係を示すことをさらに含む、請求項１または２に記載の方法。
【請求項５】
リオーダ・バッファ情報を記録した後で第２の命令を発行したときに、リオーダ・バッファ情報を使用して、第２の命令のリオーダ・ルックアップを２次リオーダ・バッファ制限することをさらに含む、請求項４に記載の方法。
【請求項６】
第２のリネーム・レジスタの割振りにより、プロセッサが発行できる最大数の命令が命令タイプと無関係であるように第１のリオーダ・バッファ・スロットが保持される、請求項２に記載の方法。
【請求項７】
命令キャッシュから命令を受け取るように構成され、実行用の命令を発行するように適合された発行ユニットと、
命令の１次レジスタ用にリネーム・レジスタを割り振るように専用化された第１のリオーダ・バッファと、
命令の２次レジスタ用にリネーム・レジスタを割り振るように専用化された第２のリオーダ・バッファとを含み、
発行ユニットが、少なくとも２つのレジスタの内容に影響する複雑命令を発行したときに、その命令の１次レジスタ用に第１のリオーダ・バッファ内のリネーム・レジスタを割り振り、その命令の２次レジスタ用に第２のリオーダ・バッファ内のリネーム・レジスタを割り振るように構成されているプロセッサ。
【請求項８】
発行ユニットが、第２の命令が第１の命令に依存しているかどうかを判定するために第２の命令を発行したときに１次および２次リオーダ・バッファをチェックするようにさらに構成されている、請求項７に記載のプロセッサ。
【請求項９】
第２の命令が２次リオーダ・バッファ内で割り振られたレジスタに依存することを検出したときに、発行ユニットが第２の命令に対応する命令キャッシュ項目にリオーダ・バッファ情報を記録し、そのリオーダ・バッファ情報が２次リオーダ・バッファ内の項目に対する第２の命令の依存関係を示す、請求項８に記載のプロセッサ。
【請求項１０】
その後、リオーダ・バッファ情報を記録した後で第２の命令を発行したときに、そのリオーダ・バッファ情報に応答して、２次リオーダ・バッファのみをチェックして依存関係の有無を確認するように、発行ユニットが構成されている、請求項９に記載のプロセッサ。
【請求項１１】
システム・メモリと、
入力手段と、
ディスプレイと、
請求項７ないし１０のいずれかに記載のプロセッサとを含むデータ処理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にマイクロプロセッサの分野に関し、より詳細には複数ターゲットを備えた命令に２次リオーダ・バッファを使用するマイクロプロセッサに関する。
【０００２】
【従来の技術】
out-of-order実行（out-of-order execution）を可能にするためにマイクロプロセッサのリオーダ・バッファを使用することは周知のことである。たとえば、Hennessy & Pattersonによる「Computer Architecture a Quantitative Approach」の３０９〜３１７ページ（Morgan Kaufmann、第２版、１９９６年）を参照されたい。リオーダ・バッファは、ある命令が最終的にコミットされるまで実行した命令の結果を記憶するために使用する。多くのスーパスカラ・プロセッサでは、複数の命令を単一サイクルで発行することができる。最高パフォーマンスを達成するために、発行した命令ごとにその命令が発行されたサイクル中にリネーム・レジスタ（rename register）の割振りを行わなければならない。通常、発行した各命令は、マイクロプロセッサの単一レジスタの内容に影響し、したがって、単一リネーム・レジスタ項目だけを必要とする。しかし、それ以外の場合には、命令（以下、複雑命令（complex instruction）という）は２つまたはそれ以上のレジスタの内容に影響する。最適パフォーマンスを達成する場合には、このような複雑命令のレジスタ・リネームもその発行サイクルで行わなければならない。
【０００３】
【発明が解決しようとする課題】
残念ながら、従来のマイクロプロセッサで使用するリネーム・バッファは、単一サイクルで実行できる割振りの回数が制限されている。単一サイクルで実行できるリネーム割振りの回数に関するこの制限は、複数の割振りを必要とする命令の存在と結びつくと、発行ユニットが複雑になり、その結果、複数命令のうちの１つが複雑命令である場合に発行ユニットが特定の１サイクルで最大数の命令を発行できなくなる可能性がある。
【０００４】
【課題を解決するための手段】
したがって、本発明は、マイクロプロセッサ内で命令を実行する方法であって、複数レジスタの内容に影響する命令を発行することと、命令の影響を受ける第１のレジスタの内容を記憶するために第１のリオーダ・バッファから第１のリネーム・レジスタを割り振ることと、命令の影響を受ける第２のレジスタの内容を記憶するために第２のリオーダ・バッファから第２のリネーム・レジスタを割り振ることを含み、第２のリオーダ・バッファを使用する第２のリネーム・レジスタの割振りにより、命令が第１のリオーダ・バッファ内の複数の割振りスロットを消費するのを防止する方法を提供する。
【０００５】
本発明は、命令キャッシュから命令を受け取るように構成され、実行用の命令を発行するように適合された発行ユニットと、命令の１次レジスタ用にリネーム・レジスタを割り振るように専用化された第１のリオーダ・バッファと、命令の２次レジスタ用にリネーム・レジスタを割り振るように専用化された第２のリオーダ・バッファとを含み、発行ユニットが、少なくとも２つのレジスタの内容に影響する複雑命令を発行したときに、その命令の１次レジスタ用に第１のリオーダ・バッファ内のリネーム・レジスタを割り振り、その命令の２次レジスタ用に第２のリオーダ・バッファ内のリネーム・レジスタを割り振るように構成されているプロセッサをさらに提供する。
【０００６】
本発明は、システム・メモリと、入力手段と、ディスプレイと、上記のプロセッサとを含むデータ処理システムをさらに提供する。
【０００７】
好ましくは、本発明は、命令が単純命令、複雑命令、あるいはその両者の組合せを含むかどうかにかかわらず、サイクルあたり最大数の命令を発行可能なマイクロプロセッサを提供する。
【０００８】
第１のリオーダ・バッファがサイクルあたり最大数の割振りをサポートする一実施形態では、第２のリオーダ・バッファを使用する第２のレジスタの割振りにより、複雑命令が第１のリオーダ・バッファ内の複数の割振りスロットを必要とするのを防止する。この方法は、２次リオーダ・バッファ内で割り振られるレジスタに対する依存関係を含む第２の命令を発行することをさらに含むことができる。一実施形態では、２次リオーダ・バッファ内で割り振られたレジスタに対する第２の命令の依存関係を示すリオーダ・バッファ情報は、続いて第２の命令が発行されたときに、２次リオーダ・バッファのみをチェックして依存関係の有無を確認するよう発行ユニットを制限するためにリオーダ・バッファ情報を使用するように、第２の命令に関連づけられる。
【０００９】
【発明の実施の形態】
次に図１を参照すると、本発明によるデータ処理システム１００の実施形態が示されている。システム１００は、１つまたは複数の中央演算処理装置（プロセッサ）１０１ａ、１０１ｂ、１０１ｃなど（まとめてまたは総称してプロセッサ（複数も可）１０１という）を有する。一実施形態の各プロセッサ１０１は、縮小命令セット・コンピュータ（ＲＩＳＣ）マイクロプロセッサを含む。ＲＩＳＣプロセッサに関する追加情報は、一般に、C. May他編集の「PowerPC Architecture: A specification for a New Family of RISC Processors 」（Morgan Kaufmann、１９９４年、第２版）に記載されている。
【００１０】
プロセッサ１０１は、システム・バス１１３を介してシステム・メモリ（ＲＡＭ）２５０および他の様々なコンポーネントに結合されている。読取専用メモリ（ＲＯＭ）１０２は、システム・バス１１３に結合され、システム１００の所与の基本機能を制御する基本入出力システム（ＢＩＯＳ）を含む。
【００１１】
図１はさらに、システム・バス１１３に結合された入出力アダプタ１０７とネットワークまたは通信アダプタ１０６とを示している。入出力アダプタ１０７は、たとえば、ハード・ディスク１０３または磁気テープ記憶駆動機構１０５あるいはその両方とやりとりする小型コンピュータ・システム・インタフェース（ＳＣＳＩ）アダプタである。入出力アダプタ１０７とハード・ディスク１０３と磁気テープ記憶装置１０５は、本明細書ではまとめて大容量記憶装置１０４という（図２を参照）。ネットワーク・アダプタ１０６はバス１１３と外部ネットワークを相互接続し、データ処理システム１００が他のこのようなシステムとやりとりできるようにする。表示モニタ１３６はディスプレイ・アダプタ１１２によってシステム・バス１１３に接続され、そのディスプレイ・アダプタ１１２はグラフィックス主体のアプリケーションのパフォーマンスを改善するためのグラフィックス・アダプタとビデオ・コントローラ（ともに図示せず）を含む場合もある。一実施形態のアダプタ１０７、１０６、１１２は、中間バス・ブリッジ（図示せず）を介してシステム・バス１１３に接続された１つまたは複数の入出力バスに接続されている。ハード・ディスク・コントローラ、ネットワーク・アダプタ、グラフィックス・アダプタなどの周辺装置を接続するための適当な入出力バスとしては、オレゴン州ヒルズバラのPCI Special Interest Groupから入手可能で、参照により本明細書に組み込まれるPCI Local Bus Specification Rev. 2.2によるPeripheral Components Interface（ＰＣＩ）バスを含む。追加の入出力装置は、ユーザ・インタフェース・アダプタ１０８およびディスプレイ・アダプタ１１２を介してシステム・バス１１３に接続されたものとして示されている。キーボード１０９、マウス１１０、スピーカ１１１はいずれもユーザ・インタフェース・アダプタ１０８を介してバス１１３に相互接続されており、そのユーザ・インタフェース・アダプタ１０８は、たとえば、複数の装置アダプタを単一集積回路に集積するＳｕｐｅｒＩ／Ｏチップを含むことができる。このようなチップに関する追加情報については、www.national.comにおいてナショナル・セミコンダクタ社から入手可能な「PC87338/PC97338 ACPI 1.0 and PC98/99 Compliant SuperI/O」というデータ・シート（１９９８年１１月）を参照されたい。
【００１２】
したがって、図１に構成したように、システム１００は、プロセッサ１０１の形をした処理手段と、システム・メモリ２５０および大容量記憶装置１０４を含む記憶手段と、キーボード１０９およびマウス１１０などの入力手段と、スピーカ１１１およびディスプレイ１３６を含む出力手段とを含む。一実施形態では、システム・メモリ２５０の一部分と大容量記憶装置１０４が集合的に、ＩＢＭ社のＡＩＸ（Ｒ）オペレーティング・システムなどのオペレーティング・システムを記憶して、図１に示す様々なコンポーネントの機能を調整する。ＡＩＸオペレーティング・システムの追加の詳細については、www.ibm.comにおいてＩＢＭ社から入手可能な「AIX Version 4.3 Technical Reference: Base Operating System and Extensions, Volumes 1 and 2」（資料番号ＳＣ２３−４１５９およびＳＣ２３−４１６０）、「AIX Version 4.3 System User's Guide: Communications and Networks」（資料番号ＳＣ２３−４１２２）、「AIX Version 4.3 System User's Guide: Operating System and Devices」（資料番号ＳＣ２３−４１２１）に記載され、本明細書に参照として組みこまれている。
【００１３】
次に図２に移行すると、システム１００での使用に適しているプロセッサ１０１の一実施形態の簡略ブロック図が提示されている。図示の実施形態のプロセッサ１０１は、モノリシック半導体基板上に製作された集積回路スーパスカラ・マイクロプロセッサを含む。プロセッサ１０１は、以下により詳細に述べるように、様々な実行ユニット、レジスタ、バッファ、メモリ、その他の機能ユニットを含む。図２に示すように、プロセッサ１０１は、バス・インタフェース・ユニット（ＢＩＵ）２１２およびプロセッサ・バス２１３を介してシステム・バス１１３に結合されており、そのプロセッサ・バス２１３はシステム・バス１１３のようにアドレス・バス、データ・バス、制御バスを含む。ＢＩＵ２１２は、プロセッサ１０１と、システム・メモリ２５０および大容量記憶装置１０４など、システム・バス１１３に結合された他の装置との情報転送を制御する。プロセッサ１０１は、システム・バス１１３に結合された他の装置のうち、以下の説明を理解するために不要であり、したがって、簡略化のために省略されている装置を含む場合もあることが分かるだろう。
【００１４】
ＢＩＵ２１２は、プロセッサ１０１内の命令キャッシュおよびメモリ管理ユニット（ＭＭＵ）２１４とデータ・キャッシュおよびメモリ管理ユニット２１６に接続されている。命令キャッシュ２１４およびデータ・キャッシュ２１６内のような高速キャッシュにより、プロセッサ１０１は、システム・メモリ２５０から以前転送されたデータまたは命令のサブセットに対して比較的高速のアクセス時間を達成することができ、したがって、データ処理システム１００の動作速度が改善される。データ・キャッシュ２１６および命令キャッシュ２１４内に記憶されたデータおよび命令はそれぞれアドレス・タグによって識別されアクセスされるが、各アドレス・タグは、そのデータまたは命令が常駐するシステム・メモリの物理アドレスのうちの指定の数のビット（通常は上位ビット）を含む。順次フェッチ・ユニット２１７は、各クロック・サイクル中に命令キャッシュ２１４から実行用の命令を取り出す。一実施形態では、順次フェッチ・ユニット２１７が命令キャッシュ２１４からブランチ命令を取り出した場合、そのブランチ命令はブランチ処理ユニット（ＢＰＵ）２１８に転送されて実行される。順次フェッチ・ユニット２１７は非ブランチ命令を命令待ち行列２１９に転送し、そこで命令は記憶され、プロセッサ１０１の他の機能ユニットによる実行を一時的に保留する。ディスパッチ・ユニット２２０は、記憶した命令を待ち行列２１９から取り出し、その命令を発行ユニット（ＩＳＵ）２２１に転送する責任がある。ディスパッチ・ユニット２２０は、完了ユニット２４０から受け取った命令完了情報に部分的に基づいて、発行ユニット２２１への命令のディスパッチをスケジューリングする。ＩＳＵ２２１の図示の実施形態は、１つまたは複数の発行待ち行列２２２ａ、２２２ｂ、２２２ｃなど（まとめてまたは総称して発行待ち行列（複数も可）２２２という）を含む。ＩＳＵ２２１は、可能な場合には各サイクルで新しい命令を実行ユニットに発行することにより、完全にロードされたパイプラインを維持する責任がある。一実施形態では、命令はＩＳＵ２２１からout-of-order方式で発行される。
【００１５】
図示の実施形態では、プロセッサ１０１の実行回路は、ＢＰＵ２１８に加え、固定小数点ユニット（ＦＸＵ）２２３、ロード／ストア・ユニット（ＬＳＵ）２２８、浮動小数点ユニット（ＦＰＵ）２３０を含む、順次命令を実行するための複数の機能ユニットを含む。それぞれの実行ユニット２２３、２２８、２３０は通常、パイプライン方式で各プロセッサ・サイクル中に特定のタイプの１つまたは複数の命令を実行する。たとえば、ＦＸＵ２２３は、指定の汎用レジスタ（ＧＰＲ）２３２から受け取ったソース・オペランドを使用して、加算、減算、ＡＮＤ、ＯＲ、ＸＯＲなどの固定小数点数理論理演算を実行する。固定小数点命令の実行に続いて、ＦＸＵ２２３はその命令のデータ結果をＧＰＲバッファ２３２に出力し、そのバッファは結果バス２６２上で受け取った結果用の記憶域を提供する。ＦＰＵ２３０は通常、浮動小数点レジスタ（ＦＰＲ）２３６から受け取ったソース・オペランドに対して浮動小数点乗算および除算などの単精度および倍精度の浮動小数点算術論理演算を実行する。ＦＰＵ２３０は浮動小数点命令の実行から得られるデータを選択したＦＰＲバッファ２３６に出力し、そのバッファはその結果データを記憶する。その名前が暗示するように、ＬＳＵ２２８は通常、データ・キャッシュ２１６、低レベル・キャッシュ・メモリ（図示せず）、またはシステム・メモリ２５０から、選択したＧＰＲ２３２またはＦＰＲ２３６にデータをロードする浮動小数点および固定小数点のロード命令と、ＧＰＲ２３２またはＦＰＲ２３６のうちの選択した１つのレジスタからデータ・キャッシュ２１６に、最終的にはシステム・メモリ２５０にデータを記憶する浮動小数点および固定小数点のストア命令を実行する。
【００１６】
好ましい実施形態では、プロセッサ１０１はout-of-order命令実行を使用して、そのスーパスカラ・アーキテクチャのパフォーマンスをさらに改善する。したがって、データ依存関係を維持する限り、命令の元のプログラム順序とは異なる順序でＦＸＵ２２３、ＬＳＵ２２８、ＦＰＵ２３０によって命令を実行することができる。前に示した通り、一連のパイプライン・ステージとしてＦＸＵ２２３、ＬＳＵ２２８、ＦＰＵ２３０のそれぞれによって命令が処理される。一実施形態のプロセッサ１０１は、５つの別個のパイプライン・ステージ、すなわち、フェッチ、デコード／ディスパッチ、実行、終了、完了を含む。
【００１７】
フェッチ・ステージ中に、順次フェッチ・ユニット２１７は、命令キャッシュ２１４から１つまたは複数の非ブランチ命令を取り出し、フェッチした命令を命令待ち行列２１９内に記憶する。これに対して、順次フェッチ・ユニット２１７は、ブランチ命令があると、そのブランチ命令を実行のために命令ストリームからＢＰＵ２１８に転送する。ＢＰＵ２１８は、一実施形態では、ブランチが行われるかどうかを予測することにより、ＢＰＵ２１８が未解決の条件付きブランチ命令を投機的に実行できるようにするブランチ履歴テーブルなどの動的予測メカニズムを含む、ブランチ予測メカニズムを含む。
【００１８】
デコード／ディスパッチ・ステージ中に、ディスパッチ・ユニット２２０およびＩＳＵ２２１は、１つまたは複数の命令をデコードし、発行待ち行列２２２から実行ユニット２２３、２２８、２３０に通常はプログラム順序で発行する。ＩＳＵ２２１は、命令の結果（複数も可）をＧＰＲ２３２またはＦＰＲ２３７にコミットする前にその結果（複数も可）を一時的に記憶するために、ＧＰＲリネーム・バッファ２３３またはＦＰＲリネーム・バッファ２３７内の１つまたは複数のリネーム・バッファを割り振ることができる。さらに、どの命令が完了したかを追跡する手段として完了ユニット２４０の複数スロット完了バッファ（完了テーブル）内に命令（またはその命令を表す命令識別子またはタグ）を記憶することもできる。
【００１９】
実行ステージ中に、実行ユニット２２３、２２８、２３０は、示された演算用のオペランドおよび実行資源が使用可能になったときに便宜的にＩＳＵ２２０から発行された命令を実行する。一実施形態の各実行ユニット２２３、２２８、２３０は、オペランドまたは実行資源が使用可能になるまで、その実行ユニットにディスパッチされた命令を記憶する予約ステーションを装備している。命令の実行が終了した後、実行ユニット２２３、２２８、２３０は、データ結果がある場合に、命令タイプに応じてそのデータ結果をＧＰＲまたはＦＰＲのいずれかに記憶する。図示の実施形態では、実行ユニット２２３、２２８、２３０は、どの命令が実行を終了したかを完了ユニット２４０に通知する。最後に、完了ユニット２４０の完了テーブルを離れたプログラム順序で命令が完了する。ＦＸＵ２２３およびＦＰＵ２３０によって実行される命令は、命令のデータ結果をＧＰＲリネーム・バッファ２３３およびＦＰＲリネーム・バッファ２３７からＧＰＲ２３２およびＦＰＲ２３６にそれぞれ転送することによって完了する。
【００２０】
プロセッサ１０１は好ましくは、out-of-order方式の投機的命令実行をサポートする。命令は、予測したブランチ指示で投機的になる場合もあれば、割込み条件を発生する可能性のある命令以上に投機的になる場合もある。ブランチ予測違い（branch misprediction）または割込みが発生した場合、ハードウェアはパイプラインからの望ましくない命令を自動的にフラッシュし、望ましくない結果を廃棄し、精密な例外と適切なブランチ経路に沿って順次実行した命令の効果を提示する。間違った投機的結果は１クロック・サイクル中にすべてのユニットから選択的にフラッシュされ、命令発行によって次のクロック・サイクルを再開することができる。プロセッサ１０１は、複数のロード・ユニットと単一のストア・ユニットを含むことができる。しかし、プロセッサ１０１が単一ロード／ストア・ユニットなどの他の構成を含むことができることは当業者には明白であるはずである。
【００２１】
命令を発行すると、ＩＳＵ２２１は、任意の２つの命令間の相対年齢（relative age）を容易に決定することができるように、その命令にタグを付ける。一実施形態では、整数値（ＩＴＡＧ）で順次命令にタグを付ける。発行した命令の発行順序および相対年齢を決定するためのメカニズムを提供することに加え、ＩＴＡＧはそれぞれの対応する命令の速記表現を提供する。各命令のＩＴＡＧ値は、それが常駐するパイプライン・ステージと待ち行列項目に関連づけられている。ＩＴＡＧを使用すると、（プロセッサ生成のフラッシュ命令に応答して）フラッシュ命令に関連するＩＴＡＧと特定の待ち行列項目または機能ユニット・ステージとの規模比較が実行され、フラッシュした命令と同じくらい新しいかまたはフラッシュした命令より新しい命令（すなわち、同時に発行されたかまたは後で発行されたもの）に関するものである場合にその項目が無効になるという命令フラッシュ・メカニズムが容易になる。フラッシュした命令（およびその後のすべての命令）のすべてのレムナントはマシンから「フラッシュ」され、フェッチ・ユニットは「フラッシュした」命令のアドレスから始まるフェッチにリダイレクトされる。
【００２２】
本発明の一実施形態は、複数のリネーム項目を必要とする命令に関する命令発行とレジスタ・リネームを処理する方法を企図するものである。ＰｏｗｅｒＰＣ（Ｒ）命令セットなどの多くの命令セットでは、大多数の命令は単一レジスタのみの内容を更新する。（ＰｏｗｅｒＰＣ（Ｒ）命令セットに関する詳細情報は、モトローラ社から入手可能な「PowerPC 620 RISC Microprocessor User's Manual」（資料番号ＭＰＣ６２０ＵＭ／ＡＤ）に記載されているが、これは参照により本明細書に組み込まれる。）したがって、このような命令は、その結果がＧＰＲ２３２にコミットされるまでその命令の結果を一時的に記憶するために、単一のリネーム・レジスタ項目のみを必要とする。複数の並列実行ユニットを使用し、サイクルあたり複数の命令を発行できるようになっているスーパスカラ・マシンでは、命令とその結果に割り振られたリネーム・レジスタとの１対１の対応により、発行およびリネーム割振りプロセスが簡略化される。たとえば、プロセッサがサイクルあたり４つの命令を発行可能である場合、レジスタ・リネーム制御論理回路はサイクルあたり最高４つのリネーム・レジスタを割り振るように設計されている。しかし、命令セットが複数のリネーム・レジスタの割振りを必要とする１つまたは複数の命令も含む場合、発行／リネーム・メカニズムがより複雑なものになる。たとえば、ＰｏｗｅｒＰＣ（Ｒ）命令セットでは、いくつかの命令は２つのレジスタ（結果レジスタ）の内容に影響する。この開示のため、複数のレジスタの内容に影響する命令は複雑命令という。プロセッサがout-of-order実行を完全にサポートする場合、結果レジスタのそれぞれには、複雑命令が発行されたサイクル中にリネーム・レジスタが割り振られなければならない。従来、複雑命令に必要な複数のリネーム・レジスタは、複雑命令が発行されたサイクル中に他の命令が発行されるのを防止していた。所与のサイクル中に割り振られる必要があるリネーム・レジスタの総数が指定の最大値を超えたかどうかを判定するために、発行論理回路が必要であった。たとえば、プロセッサがサイクルあたり４つの「単純」命令（すなわち、単一レジスタのみの内容に影響する命令）を発行可能で（しかも、そのサイクル中に４つのリネーム・レジスタを割振り可能で）あり、プロセッサの発行ユニットが複雑命令を発行した場合、発行ユニットは、他の３つの発行スロットがすべて同じサイクル中に命令を発行するのを防止することが要求されるだろう。すなわち、プロセッサは、３つの残りの発行スロットのうちの１つが命令を発行するのを防止しなければならず、さらに、２つの残りの発行スロットが複雑命令そのものを発行しなかったことを保証しなければならないだろう。したがって、複数発行スーパスカラ・マイクロプロセッサ内に複雑命令が存在すると発行論理回路の複雑さが増し、最大数の命令が単一サイクル中に発行されるのを防止することにより、パフォーマンスが悪影響を受けていた。
【００２３】
次に図３に移行すると、本発明の一実施形態によるリオーダ・バッファ３００が示されている。リオーダ・バッファ３００は、１次リオーダ・バッファ３０２と２次リオーダ・バッファ３０３とを含む。１次リオーダ・バッファ３０２は１次リネームＧＰＲ３０４を含み、２次リオーダ・バッファ３０３は２次リネームＧＰＲ３０６を含む。１次リネームＧＰＲ３０２と２次リネームＧＰＲ３０４の組合せは、図２に参照番号２３３で示されているリネームＧＰＲを含む。（リオーダ・バッファ３００の図示の実施形態はリネームＧＰＲ２３３に固有のものであるが、リオーダ・バッファ３００は、リネームＧＰＲ２３３の代わりにまたはリネームＧＰＲ２３３に加えて、リネームＦＰＲ２３７を含むこともできる。）好ましい実施形態では、１次リオーダ・バッファ３０２において単純命令用のすべてのリネーム・レジスタが割り振られている。また、１次リオーダ・バッファ３０２は、各複雑命令に関連する１次レジスタのために１次リネーム・レジスタ３０４を割り振るためにも使用する。これに対して２次リオーダ・バッファ３０３は、単純命令を発行したときは使用しないが、複雑命令の２次レジスタのために２次リネーム・レジスタ３０６を割り振るために使用する。ＰｏｗｅｒＰＣ命令セットを使用する一例として、単純ロード命令LOAD RT, RA, RBを発行した場合、その命令が最終的にコミットされるまで（すなわち、その結果がＧＰＲ（レジスタ・ファイル）２３２内のターゲット・レジスタＲＴに書き込まれるとき）その命令の結果を保持する命令が発行されると、リネーム・レジスタ３０４が割り振られる。この例のロード命令は単一レジスタのみの内容に影響するので、単一リネーム・レジスタのみを割り振る必要がある。第２の例では、更新付きロード（ＬＵ）命令などの複雑命令を発行する（たとえば、LU RT, RA, RB）。この更新付きロード命令では、レジスタＲＡおよびＲＢの内容に基づいて有効アドレスを計算し、計算した有効アドレスが付いたメモリ位置の内容をターゲット・レジスタＲＴにロードする。また、この命令は、計算した有効アドレスの値でＲＡの内容を更新する。ＬＵ命令は、その命令が実行されるたびにソース・メモリ・アドレスを自動的にインクリメントする単一命令を提供することによるソフトウェア・ループの実現を含む、様々な状況で有用である。ＬＵ命令は、２つのレジスタの内容に影響し、したがって、発行したときに２つのリネーム・レジスタを割り振る必要があるので、複雑命令である。図示の実施形態では、レジスタＡおよびＢ内のオペランド情報がデュアル・ポート式レジスタ・ファイル２３２から読み取られる。しかし、この例では、１次リオーダ・バッファ３０２内の１次リネーム・レジスタ３０４がターゲット・レジスタＲＴのために割り振られ、２次リオーダ・バッファ３０３では２次レジスタ（ＲＡ）値のために２次リネーム・レジスタ３０６が割り振られる。比較すると、従来通りに設計されたプロセッサは、命令が発行されたときに（単一）リオーダ・バッファ内のＲＴおよびＲＡ両方のレジスタのためにレジスタを割り振らざるを得なくなるだろう。このプロセッサはサイクルあたり指定の数のレジスタを割り振ることしかできず、しかも、ＬＵ命��はこれらの割振りスロットのうちの２つを消費するので、従来のプロセッサは、望ましくないことに、ＬＵ命令が発行されたサイクル中に最大許容数より少ない命令を発行せざるを得なくなるだろう。この例ではＬＵ命令を使用するが、ＰｏｗｅｒＰＣ命令セットおよび１つまたは複数の複雑命令を含むその他の命令セットに精通した人であれば、２つのレジスタの内容に影響するどの命令でも本明細書に開示したように２次リオーダ・バッファを含めたことによって利益を得ることが分かるだろう。
【００２４】
レジスタ・リネームのために２次リオーダ・バッファ３０３の形の追加資源を組み込むことにより、有利なことに、プロセッサ１０１は、命令が単純命令か、複雑命令か、あるいはその組合せかにかかわらず、各サイクル中に最大許容数の命令を発行することができる（最大数の命令が発行できる状態になっているものと想定する）。２次リオーダ・バッファ３０３によって提供された資源がない場合、複雑命令の発行は、プロセッサの（単一）リオーダ・バッファ内の複数のリネーム・レジスタの割振りを必要とすることになるだろう。単一リオーダ・バッファが単一サイクルで割り振ることができるリネーム・レジスタの数はアーキテクチャ上、制限されているので、複雑命令は、複雑命令が発行されたサイクル中にプロセッサが最大数の命令を発行するのを防止することになるだろう。そのうえ、複雑命令がある場合に、所与のサイクル中にいくつの命令が発行可能であるかを決定するために必要なインテリジェンスにより、発行論理回路に対して要求される複雑さが大幅に増大する。
【００２５】
２次リオーダ・バッファ３０３の存在により、そのオペランド・レジスタのいずれかが現在、２次リオーダ・バッファ３０３で割り振られているかどうかを命令が判定するメカニズムが必要になる。一実施形態のプロセッサ１０１では、両方のリオーダ・バッファをサーチして依存関係を決定するために複雑命令が移行中である間に各命令が発行されることが要求されるだけである。この実施形態は簡略化の利点を享受しているが、望ましくないことに、発行サイクル中にサーチされるリオーダ・バッファ項目の数が増加する。所与のサイクル中に発行できる命令の数が増加するにつれて、命令の依存関係を決定するために検査しなければならないリオーダ・バッファ項目の数を最小限にすることがますます望ましいことになる。この問題に対処するため、本発明の一実施形態では、ある命令の最初の実行時にリオーダ・バッファ情報が記録されるメカニズムを企図している。その場合、リオーダ・バッファ情報は、その命令がどのリオーダ・バッファを検査しなければならないかを決定するために、その命令のその後の実行時に使用される。図４に移行すると、以下のコード・セグメント例に関連して、この実施形態の例証となる流れ図が記載されている。
LQ R4, R25, R26
ADD R7, R5, R2
【００２６】
ブロック４００は、ＬＱ（ロード・クワッド）命令の発行を表している。ＬＱ命令は、ＰｏｗｅｒＰＣ（Ｒ）命令セット内の複雑命令であって、示されているターゲット・レジスタ（Ｒ４）ならびに次の順次レジスタ（Ｒ５）の内容に影響するものである。ＡＤＤ命令はＲ５ソース・オペランドを含むので、ＡＤＤ命令はＬＱ命令に依存する。このコード・セグメントの最初の実行時に、好ましくは発行ユニットにより、ＬＱ命令に続くすべての命令（すなわち、ＬＱ命令が発行された後であるがＬＱ命令がコミットされる前に発行されるすべての命令）が両方のリオーダ・バッファをサーチして依存関係を検出せざるを得ない。したがって、ブロック４０２で発行ユニットはＲ５に対するＡＤＤ命令の依存関係を検出するが、そのＲ５は２次リオーダ・バッファ３０３の２次リネーム・レジスタ３０６で割り振られている。ＡＤＤ命令とＬＱ命令との２次バッファの依存関係を検出すると、発行ユニット２２１は、ＡＤＤ命令の依存関係が２次リオーダ・バッファ３０３で見つかったことを示すリオーダ・バッファ情報を記録するように構成されている（ブロック４０４）。一実施形態では、このリオーダ・バッファ情報は、ＡＤＤ命令を含む命令キャッシュ項目内の専用ビットまたはビット・セットに記憶される。その後、ＡＤＤ命令が実行されると（ブロック４０６）、ＡＤＤ命令に対応するリオーダ・バッファ情報は、（最初の実行時と同様に）ＡＤＤ命令の依存関係が２次リオーダ・バッファで見つかったことを発行ユニット２２１に通知する。このようにして、発行ユニット２２１は有利なことに、リオーダ・バッファ３００に対するそのサーチを２次リオーダ・バッファ３０３に制限することができる。この例はＬＱ命令に関連して説明しているが、このメカニズムはＰｏｗｅｒＰＣ（Ｒ）のＬＵ命令などの他の複雑命令とともに使用する。したがって、２次リオーダ・バッファを選択的に使用可能にしたり使用不能にするためのメカニズムとともに２次発行バッファを組み込むことにより、本発明は、発行ユニット上でのパフォーマンスの犠牲を最小限にしながらサイクルあたり最大の命令発行を可能にするための手段を有利に提供する。
【００２７】
本発明が、好ましい実施形態により、２次リネーム方式で２次レジスタを割り振るための追加のリネーム機構を実現することにより、マイクロプロセッサのパフォーマンスにおいて発行／リネーム・メカニズムのパフォーマンスの簡略化および改善を企図することは、この開示内容の恩恵を受ける当業者には明白なことになるだろう。
【図面の簡単な説明】
【図１】  データ処理システムのブロック図である。
【図２】  図１のデータ処理システムでの使用に適しているプロセッサのブロック図である。
【図３】  本発明の一実施形態による１次リオーダ・バッファと２次リオーダ・バッファを含むリオーダ・バッファのブロック図である。
【図４】  本発明の一実施形態の動作を示す流れ図である。
【図１】
0003689369.tif 000002
【図２】
0003689369.tif 000003
【図３】
0003689369.tif 000004
【図４】
0003689369.tif 000005