(57)【特許請求の範囲】
【請求項１】
レジスタのリネーミング機能を持ち、ソフトウェア・パイプライニングを行うプロセッサにおいて、物理レジスタ番号と論理レジスタ番号との対応関係を示す制御レジスタと、発行された命令列の中に、前記制御レジスタへの値の設定を指示する命令が含まれている場合に、前記命令の内容に応じて前記制御レジスタへの値の設定を行う制御レジスタ設定手段と、を備え、
前記制御レジスタは、第１、第２および第３のレジスタ部を有し、前記制御レジスタ設定手段は、前記第１のレジスタ部の内容に基づいて物理レジスタ番号と論理レジスタ番号との対応づけを行い、その結果を前記第２のレジスタ部に書き込み、その後、前記第２のレジスタ部の内容を前記第１および第３のレジスタ部に書き込むことを特徴とするプロセッサ。
【請求項２】
前記制御レジスタへの値の設定を指示する命令は、前記第１のレジスタ部の内容に基づいて物理レジスタ番号と論理レジスタ番号との対応づけを行い、その結果を前記第２のレジスタ部に書き込む命令と、前記第２のレジスタ部の内容を前記第１および第３のレジスタ部に書き込む命令と、を含むことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記制御レジスタは、複数の論理レジスタを単位とするバンクのそれぞれに対応した管理領域を有し、各管理領域に物理レジスタのバンク番号を対応づけることを特徴とする請求項１または２に記載のプロセッサ。
【請求項４】
前記制御レジスタは、複数の物理レジスタを単位とするバンクのそれぞれに対応した管理領域を有し、各管理領域に論理レジスタのバンク番号を対応づけることを特徴とする請求項１〜３のいずれかに記載のプロセッサ。
【請求項５】
複数の物理レジスタまたは論理レジスタを単位とする複数のバンクのそれぞれごとに、物理レジスタ番号と論理レジスタ番号との対応関係を格納する制御レジスタと、発行された命令の中に、前記バンクを単位とした物理レジスタ番号と論理レジスタ番号との対応づけを変更する対応づけ変更命令が含まれている場合に、該命令で指示されたバンクに対応する前記制御レジスタの内容をリセットするリセット手段と、前記対応づけ変更命令で指示される、対応づけの変更を行うバンクの種類に関する情報と対応づけの変更量に関する情報とに基づいて、リセットされた前記制御レジスタに新たな値を設定する制御レジスタ設定手段と、を備えることを特徴とするリネーミング装置。
【請求項６】
前記対応づけ変更命令は、対応付けの変更量を示す前記バンクのローテーション量と、ローテーションを行う下限バンクおよび上限バンクとを指示することを特徴とする請求項５に記載のリネーミング装置。
【請求項７】
予め指定された元のバンク番号が前記対応づけ変更命令で指示された下限バンクおよび上限バンクの間に含まれるか否かを判定する第１判定手段と、第１判定手段の判定結果に基づいて、バンクのローテーション量を設定する第１選択手段と、前記元のバンク番号に対応する新たなバンク番号を演算する第１バンク番号演算手段と、演算された前記新たなバンク番号が、前記対応づけ変更命令で指示された下限バンクのバンク番号よりも若い番号であるか否かを判定する第２判定手段と、前記第２判定手段の判定結果に基づいて、バンク番号の補正値を選択する第２選択手段と、前記バンク番号演算手段で演算されたバンク番号と前記第２選択手段で選択された補正値とを加算して最終的なバンク番号を演算する第２バンク番号演算手段と、前記第１バンク番号演算手段で演算されたバンク番号と前記制御レジスタに格納されたバンク番号とのいずれか一方を選択する第３選択手段と、を備え、前記リセット手段は、前記対応づけ変更命令が発行されると、バンク番号のローテーションを行う前に、前記元のバンク番号に基づいて前記制御レジスタの内容を初期化し、それ以外のときは前記第３選択手段で選択されたバンク番号を前記制御レジスタに格納することを特徴とする請求項６に記載のリネーミング装置。
【請求項８】
前記第１選択手段は、前記元のバンク番号が前記対応づけ変更命令で指示された下限バンクおよび上限バンクの間に含まれると判定されたときに、前記対応づけ変更命令で指示されたローテーション量を出力し、それ以外のときはゼロを出力し、前記第２選択手段は、前記第１判定手段により下限バンクおよび上限バンクの間に含まれると判定され、かつ前記第２判定手段により下限バンクのバンク番号よりも若い番号であると判定されたときに、前記対応づけ変更命令で指示された下限バンク番号と上限バンク番号とに基づいて補正値を選択し、前記第３選択手段は、前記対応づけ変更命令が発行された後、前記バンク番号格納手段に新たなバンク番号を格納するまでは前記第２バンク番号演算手段で演算されたバンク番号を選択し、それ以外は前記制御レジスタに格納されているバンク番号を選択することを特徴とする請求項７に記載のリネーミング装置。
【請求項９】
前記制御レジスタには、バンクを単位として物理レジスタ番号が格納されることを特徴とする請求項５〜８のいずれかに記載のリネーミング装置。
【請求項１０】
レジスタのリネーミング機能を持ち、ソフトウェア・パイプライニングを行うプロセッサにおいて、請求項５〜９のいずれかに記載のリネーミング装置を各バンクごとに設けたことを特徴とするプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサやディジタル処理プロセッサ(DSP:Digital Signal Processor)のような高周波動作が要求されるプロセッサと、レジスタのリネーミングを行うリネーミング装置に関し、特に、ソフトウェア・パイプライニングを行う技術に関する。
【０００２】
【従来の技術】
高性能を求めるために、プロセッサの周波数を上げていくとどうしてもパイプラインステージ数が多くなり、パイプライン・バブル（パイプライン・ストール）が多くなる。バブルを埋めるためには、ソフトウェア・パイプライニングを行うことが一般的である。
【０００３】
図１８はあるプロセッサのパイプラインステージを示す図、図１９は図１８のプロセッサが実行するプログラムの一例を示す図である。
【０００４】
図１８のプロセッサが図１９のプログラムを実行するにあたって、データのバイパスはまったくないものとし、Ｗステージでレジスタへの書き込みを行った後のみ、Ｄステージでデータの読み込みが可能になるものとする。
【０００５】
１issueのインターロック機能を持つパイプライン実行が可能なプロセッサは、図１９のプログラムを図２０のような手順で実行する。命令１のＷａ（５サイクル目）でレジスタｒ１にデータが書き込まれ、命令２のＷｂ（６サイクル目）でレジスタｒ２にデータが書き込まれる。命令３は、Ｄｃでレジスタｒ１，ｒ２を読み込むため、３サイクル分、インターロック（ストール）させられる。これがデータ依存関係によるパイプライン・バブルであり、図２０では「＊」で示している。図２０の例では、６個のパイプライン・バブルが存在する。
【０００６】
同じく、命令３のＷｄで書き込まれたレジスタｒ３を、命令４はＤｅで読み込む。命令５は、ただの分岐命令であり、他と依存関係がないため、すぐ次のサイクルで実行される。
【０００７】
なお、図２０では、簡略化のため、ループの分岐命令はペナルティなし（分岐遅延スロットなし）としており、ロードストア命令のアドレス・インクリメントも１サイクルでできるものとしている。
【０００８】
図２０のようなパイプライン・バブルを解決するために行われるのが、各ループのオーバーラップ実行である。図２１はオーバーラップ実行の一例を示す図である。図２１の例では、３ループ中でパイプライン・バブルは一つしか発生していない。図２０の例だと、１ループあたり６個のパイプライン・バブルが発生していたため、バブル数を1/18に激減させることができる。
【０００９】
【発明が解決しようとする課題】
命令スループットの性能を上げるには、原始的には、プログラマがソフトウェア・パイプライニングを組んで実現する。そのプログラムは例えば図２２のようなものである。
【００１０】
図２２の例の場合、ループ１ではレジスタｒ１，ｒ２，ｒ７，ａ１，ａ２，ａ７を使用し、ループ２ではレジスタｒ３，ｒ４，ｒ８，ａ３，ａ４，ａ８を使用し、ループ３ではレジスタｒ５，ｒ６，ｒ９，ａ５，ａ６，ａ９を使用する。
【００１１】
このように、図２２の例の場合、各ループでそれぞれ異なるレジスタを使用するため、プログラムの命令数が３倍になってしまい、また、プログラマはオーバーラップしている各ループでレジスタがぶつからないように指定しなければならない。
【００１２】
この煩雑さを解消するための従来の技術として、以下の二つが提案されている。一つは、out-of-order発行機能と自動レジスタ・リネーミング機能を備えたプロセッサであり、このようなプロセッサでは、図１９のようなプログラムの記述のままで、図２１のような理想的な動作を行う。ただし、out-of-order発行機能を実現するためのハードウェアが膨大になるという問題がある。
【００１３】
二つ目は、Intel株式会社のItaniumやCydromeのコンピュータに実装されている、レジスタ・ローテーション機能である。図２２の例をレジスタ・ローテーションで実現すると、図２３のようになる。
【００１４】
branch_regrot命令で、ループのジャンプ命令を実行するのと同時に、レジスタのローテーションを行う。ローテーションでは、３つのレジスタずつ入れ替える。この場合のプログラムは、図２４のようになり、またパイプラインの動作は図２５のようになる。
【００１５】
１ループ目終了時のレジスタの対応関係は図２６のようになる。また、２ループ目終了時のレジスタの対応関係は図２７のようになる。
【００１６】
従来の自動リネーミング機能は、ハードウェアが複雑になるという問題がある。また、従来のレジスタ・ローテーション機能は、柔軟性が低く、単純なローテーション以外には適用できないという問題がある。
【００１７】
本発明は、このような点に鑑みてなされたものであり、その目的は、ハードウェアを複雑にすることなく、柔軟性に富んだレジスタ・リネーム機能を実現可能なプロセッサを提供することにある。
【００１８】
また、本発明の他の目的は、簡易な回路構成でレジスタ・リネーム機能を実現可能なリネーミング装置を提供することにある。
【００１９】
【課題を解決するための手段】
本発明の一態様によれば、レジスタのリネーミング機能を持ち、ソフトウェア・パイプライニングを行うプロセッサにおいて、物理レジスタ番号と論理レジスタ番号との対応関係を示す制御レジスタと、発行された命令列の中に、前記制御レジスタへの値の設定を指示する命令が含まれている場合に、前記命令の内容に応じて前記制御レジスタへの値の設定を行う制御レジスタ設定手段と、を備え、前記制御レジスタは、第１、第２および第３のレジスタ部を有し、前記制御レジスタ設定手段は、前記第１のレジスタ部の内容に基づいて物理レジスタ番号と論理レジスタ番号との対応づけを行い、その結果を前記第２のレジスタ部に書き込み、その後、前記第２のレジスタ部の内容を前記第１および第３のレジスタ部に書き込むことを特徴とするプロセッサが提供される。
【００２０】
本発明では、制御レジスタに設定する値に応じて、物理レジスタ番号と論理レジスタ番号との対応関係を任意に設定変更できるようにしたため、ハードウェアの構成を複雑にすることなく、柔軟性のあるレジスタ・リネーム機能を実現できる。
【００２１】
また、複数のレジスタからなるバンクを単位として物理レジスタ番号と論理レジスタ番号との対応づけを行えば、簡易かつ迅速にレジスタ・リネームを行えるようになる。
【００２２】
さらに、制御レジスタに第１〜第３のレジスタ部を設け、各レジスタ部を利用してレジスタ・リネームを行えば、よりいっそう高速にレジスタ・リネームを行えるようになる。
【００２３】
また、本発明は、複数の物理レジスタまたは論理レジスタを単位とする複数のバンクのそれぞれごとに、物理レジスタ番号と論理レジスタ番号との対応関係を格納する制御レジスタと、
発行された命令の中に、前記バンクを単位とした物理レジスタ番号と論理レジスタ番号との対応づけを変更する対応づけ変更命令が含まれている場合に、該命令で指示されたバンクに対応する前記制御レジスタの内容をリセットするリセット手段と、
前記対応づけ変更命令で指示される、対応づけの変更を行うバンクの種類に関する情報と対応づけの変更量に関する情報とに基づいて、リセットされた前記制御レジスタに新たな値を設定する制御レジスタ設定手段と、を備える。
【００２４】
【発明の実施の形態】
以下、本発明に係るプロセッサについて、図面を参照しながら具体的に説明する。
【００２５】
（第１の実施形態）
図１は本発明に係るプロセッサの一実施形態の概略構成を示すブロック図である。図１のプロセッサは、命令列を記憶する命令メモリ１と、命令メモリ１からの命令をフェッチするフェッチ・ユニット２と、フェッチした命令をデコードするデコード・ユニット３と、後述するリネーム命令を実行するリネーム制御ユニット(RCU:Rename Control Unit)４と、リネーム制御レジスタ(RCR:Rename Control Register)５と、物理アドレスと論理アドレスとの対応関係を記憶するレジスタファイル６と、デコードした命令を実行する演算処理ユニット(ALUs)７とを備えている。
【００２６】
本実施形態は、２５６本のレジスタを１６本ずつ組みにした複数のバンドル（バンク）に区分けし、バンクを単位として物理レジスタ番号と論理レジスタ番号との対応づけを行う点に特徴がある。
【００２７】
このような対応づけを行うために、リネーム制御レジスタ５が利用される。リネーム制御レジスタ５は、ソース・レジスタ（ソースＲＣＲ、第１のレジスタ部）、デスティネーション・レジスタ（デスティネーションＲＣＲ、第２のレジスタ部）、およびエフェクティブ・レジスタ（エフェクティブＲＣＲ、第３のレジスタ部）の３種類で構成される。
【００２８】
本実施形態のプロセッサは、図２に示すように、５段階に分けてパイプライン処理を行う。また、このプロセッサは、命令セットとして、図３（ａ）に示す演算命令と、図３（ｂ）に示すロード／ストア命令と、図３（ｃ）に示す条件分岐命令とを有し、この他に、図３（ｄ）に示すレジスタ・リネーム命令を有する点に特徴がある。
【００２９】
レジスタ・リネーム命令は、リネーム制御レジスタ５をセットするための専用の命令であり、（１）〜（４）までの４つの命令からなる。（１）のSTORE_RENは、汎用レジスタsrc1の内容をデスティネーションＲＣＲにセットする命令である。（２）のLOAD_RENは、デスティネーションＲＣＲの内容を汎用レジスタsrc1にセットする命令である。（３）のROTATEは、後述するように、ソースＲＣＲのfromビット目からtoビット目まで、bit数分だけ左にローテートする命令である。（４）のRENAMEは、デスティネーションＲＣＲの内容をエフェクティブＲＣＲとソースＲＣＲにコピーする命令である。
【００３０】
図１のリネーム制御ユニット４は、図３（ｄ）に示すレジスタ・リネーム命令が発行されると、リネーム制御レジスタ５の設定を行う。図４はRENAME命令実行時のリネーム制御ユニット４の処理動作を示すフローチャートである。まず、リネーム制御ユニット４は、ソースＲＣＲの内容をデスティネーションＲＣＲに書き込む（ステップＳ１）。
【００３１】
次に、ROTATE命令に基づいて、ソースＲＣＲの更新を行う（ステップＳ２）。次に、ソースＲＣＲの更新結果をデスティネーションＲＣＲに書き込む（ステップＳ３）。
【００３２】
次に、デスティネーションＲＣＲの内容を、ソースＲＣＲとエフェクティブＲＣＲに書き込む（ステップＳ４）。次に、エフェクティブＲＣＲの内容に基づいてレジスタファイル６に物理レジスタ番号と論理レジスタ番号との対応関係を書き込む（ステップＳ５）。
【００３３】
このように、ステップＳ５では、エフェクティブＲＣＲを参照することにより、論理レジスタ番号と物理レジスタ番号との対応関係を検出する。したがって、エフェクティブＲＣＲが参照されている間に、ソースＲＣＲとデスティネーションＲＣＲは、他の作業、例えば次のリネーム処理を行うための作業等に利用可能である。
【００３４】
図５はRENAME命令の実行手順を説明する図であり、リネーム制御レジスタ５が持つ１６個のバンドルそれぞれについて、バンドルごとに、論理レジスタ番号のフィールド（管理領域）を物理アドレス番号に対応づける例を示している。具体的には、バンドル０に属する１６個の論理レジスタ番号Ｅ０〜ＥＦを物理レジスタ番号００〜０Ｆに対応づけ、バンドル１に属する１６個の論理レジスタ番号Ｆ０〜ＦＦを物理レジスタ番号１０〜１Ｆに対応づけ、以下順繰りに対応づけを行い、バンドルｆに属する１６個の論理レジスタ番号Ｄ０〜ＤＦを物理レジスタ番号Ｆ０〜ＦＦに対応づける例を示している。
【００３５】
レジスタファイル６は、１６×１６＝２５６ビットの容量をもち、リネーム制御レジスタ５の１６個分のバンドルそれぞれの物理レジスタ番号と論理レジスタ番号との対応関係を記憶する。
【００３６】
図６はROTATE命令の動作例を示す図であり、４番目のバンドルからｃ番目のバンドルまで、２バンドルずつ左にローテートする例を示している。
【００３７】
また、図７（ａ）はすべてのバンドルを１バンドルずつ左にローテートする例を示し、図７（ｂ）はすべてのバンドルを２バンドルずつ左にローテートする例を示している。
【００３８】
また、図８（ａ）はすべてのバンドルを４バンドルずつ左にローテートする例を示し、図８（ｂ）はすべてのバンドルを８バンドルずつ左にローテートする例を示している。
【００３９】
また、図９（ａ）は上位側８バンドルを１バンドルずつ左にローテートする例を示し、図９（ｂ）は上位側８バンドルを２バンドルずつ左にローテートする例を示している。
【００４０】
また、図１０（ａ）は上位側８バンドルを４バンドルずつ左にローテートする例を示し、図１０（ｂ）は８バンドル目からｂバンドル目までを１バンドルずつ左にローテートする例を示している。
【００４１】
また、図１１（ａ）は８バンドル目からｂバンドル目までを１バンドルずつ左にローテートする例を示し、図１１（ｂ）はａバンドル目からｂバンドル目までを１バンドルずつ左にローテートする例を示している。
【００４２】
このように、本実施形態では、物理レジスタ番号と論理レジスタ番号との対応関係を指定するための専用の命令であるレジスタ・リネーム命令により、制御レジスタ内の任意のバンドルについて、バンドルごとに物理レジスタ番号と論理レジスタ番号との対応関係を指定できるようにしたため、命令の数を増やすことなく、パイプライン・バブルの発生を抑制できる。
【００４３】
また、レジスタ・リネーム命令の具体的内容はプログラマが任意に指定できるため、必要に応じてリネーム処理を行うことができ、柔軟性のあるレジスタリネーム処理が可能になる。
【００４４】
さらに、本実施形態では、制御レジスタとして、ソースＲＣＲ、デスティネーションＲＣＲおよびエフェクティブＲＣＲを設け、ローテートした結果をソースＲＣＲとエフェクティブＲＣＲの双方に書き込むため、エフェクティブＲＣＲの内容を参照して物理レジスタ番号と論理レジスタ番号との対応づけを行い、その間にソースＲＣＲやデスティネーションＲＣＲを他の作業、例えば次のローテート処理に利用することができる。したがって、処理効率が向上する。
【００４５】
上述した実施形態では、リネーム制御レジスタ５内に論理レジスタの各バンドルに対応したフィールドを持つ例を説明したが、その逆に、リネーム制御レジスタ５内に物理レジスタの各バンドルに対応したフィールドを持っておき、リネーム制御ユニット４が論理レジスタのバンドル番号をセットしてもよい。
【００４６】
（第２の実施形態）
図１２は、上述したレジスタ・リネーム命令にて、From=2、To=a、Shift=3を指定した場合のローテーション動作を示しており、図１２（ａ）はバンドルの初期値を示している。図１２（ａ）のようなバンドルに対してローテーションを行うと、バンドル番号が「２」から「ａ」までのバンドルの内容が「３」バンドルずつ左にシフトし、シフトではみ出た分がローテーション対象のバンドルの右側から埋められるように動作する。その結果、図１２（ｂ）のようになる。この状態からさらに同様のローテーションを行うと図１２（ｃ）のようになり、この状態からさらに同様のローテーションを行うと図１２（ａ）に戻る。
【００４７】
例えば、論理番号３ｃ（３はバンドル番号、ｃはレジスタ番号）のレジスタにアクセスするプログラムでは、実際にアクセスされる物理アドレスは、図１３のように変化し、プログラムでは同一の論理アドレスを指定しても、実際には異なる物理アドレスを使用することになり、ソフトウェア・パイプライニングが行われる。
【００４８】
上述したレジスタ・リネーム命令は、ローテンションさせるバンドルの種類および範囲を任意に指定できるため、レジスタ・リネーム処理をハードウェアで構成する場合には、ローテーションにより移動先となる可能性のあるすべてのバンドルに対してデータを受け渡すパスを設ける必要がある。
【００４９】
例えば、図１４はバンドル数が「８」の場合のデータパスの例を示している。このように、データパスはバンドル間をまたがる配線になる。これらの配線はマルチプレクサに接続されて、最終的にマルチプレクサによって必要なバンドルのデータが選択されてバンドルが更新される。
【００５０】
図１４のようにバンドル間をまたがる配線を設けると、配線面積が増大し、配線長の増加に伴って速度が低下するなどの問題が起こるおそれがある。特に、バンドル数が増加する場合、配線面積はバンドル数の２乗に比例するため、ますます重大な問題になる。
【００５１】
そこで、以下に説明する第２の実施形態は、上述したレジスタ・リネーム命令によるレジスタ番号のローテーションを、簡易な構成のハードウェアにより実現することを特徴とする。
【００５２】
図１５は本発明に係るリネーミング装置の一実施形態のブロック図である。図１５のリネーミング装置は各バンドルごとに設けられ、例えば１６個のバンドルが存在する場合には、図１５のリネーミング装置も１６個設けられる。これらリネーミング装置は、例えばプロセッサに内蔵される。
【００５３】
図１５のリネーミング装置は、予め指定された元のバンドル番号がレジスタ・リネーム命令で指示された下限バンドル番号および上限バンドル番号の間に含まれるか否かを判定する第１判定部（第１判定手段）１１と、第１判定部１１の判定結果に基づいて、バンドルのローテーション量を設定する第１選択部（第１選択手段）１２と、元のバンドル番号に対応する新たなバンドル番号を演算する第１バンドル番号演算部（第１バンドル番号演算手段）１３と、演算された新たなバンドル番号がレジスタ・リネーム命令で指示された下限バンドル番号のバンドル番号よりも若い番号であるか否かを判定する第２判定部（第２判定手段）１４と、第２判定部１４の判定結果に基づいてバンドル番号の補正値を選択する第２選択部（第２選択手段）１５と、第２選択部１５の選択制御を行うアンド回路１６と、バンドル番号演算部で演算されたバンドル番号と第２選択部（第２選択手段）１５で選択された補正値とを加算して最終的なバンドル番号を演算する第２バンドル番号演算部（第２バンドル番号演算手段）１７と、第１バンドル番号演算部１３で演算されたバンドル番号と制御レジスタ１８に格納されたバンドル番号とのいずれか一方を選択する第３選択部（第３選択手段）１９と、制御レジスタ１８に格納するための最終的なバンドル番号を選択する第４選択部（リセット手段）２０とを備えている。
【００５４】
第１選択部１２は、元のバンドル番号がレジスタ・リネーム命令の下限バンドル番号と上限バンドル番号との間にあれば、レジスタ・リネーム命令のローテーション量を選択して出力し、入力されたバンドル番号がレジスタ・リネーム命令の下限バンドル番号と上限バンドル番号との間になければ、ゼロを出力する。
【００５５】
第１バンドル番号演算部１３は、制御レジスタ１８に格納されたバンドル番号から第１選択部１２での選択結果を引く演算を行う。
【００５６】
アンド回路１６は、入力されたバンドル番号が下限バンドル番号と上限バンドル番号との間で、かつ第１バンドル番号演算部１３で演算されたバンドル番号がレジスタ・リネーム命令の下限バンドル番号よりも小さいときに「１」を出力し、それ以外のときは「０」を出力する。
【００５７】
第２選択部１５は、アンド回路１６の出力が「０」であれば「０」を出力し、アンド回路１６の出力が「１」であれば、レジスタ・リネーム命令の上限バンドル番号から下限バンドル番号を引いた値に「１」を加えた値（To−From＋１）を出力する。
【００５８】
第３選択部１９は、レジスタ・リネーム命令の実行時に第２バンドル番号演算部１７で演算されたバンドル番号を選択し、それ以外の命令を実行するときは制御レジスタ１８に格納されているバンドル番号を選択する。
【００５９】
第４選択部２０は、レジスタ・リネーム命令が発行されたときに、一時的に制御レジスタ１８を初期化し、それ以外のときは第３選択部１９で選択されたバンドル番号をそのまま選択する。初期化する際は、入力されたバンドル番号をそのまま制御レジスタ１８に格納する。
【００６０】
ここで、制御レジスタ１８がリセット手段に対応し、第２バンドル番号演算部１７および第３選択部１９が制御レジスタ設定手段に対応する。
【００６１】
以下、レジスタ・リネーム命令の一例として、図１６に示すように、下限バンドル番号Fromが３、上限バンドル番号Toがｂ、ローテーション量Shiftが３の場合を例にとって、図１５のリネーミング装置の処理動作を説明する。図１６の制御レジスタには、物理アドレスのバンドル番号が格納されている。
【００６２】
図１５のリネーミング装置は、（１）ローテーション情報セット時、（２）ローテーション命令非実行時、（３）ローテーション命令実行時で、指定されたバンドル番号が下限バンドル番号と上限バンドル番号との間にある場合、および（４）ローテーション命令実行時で、指定されたバンドル番号が下限バンドル番号と上限バンドル番号との間にない場合の４通りの処理動作を行う。
【００６３】
まず、ローテーション情報セット時の処理動作を説明する。ローテーション命令が発行されると、ローテーション動作を行う前に、第４選択部２０は制御レジスタ１８の内容を初期化する。具体的には、ローテーションを行う範囲内のバンドルについては論理レジスタ番号と物理レジスタ番号とを一致させ、それ以外の範囲内のバンドルについては制御レジスタ１８の値を変更しないようにする。この結果、図１６（ｂ）のように、論理アドレスのバンドル番号と物理アドレスのバンドル番号は一致する。
【００６４】
次に、ローテーション命令非実行時の処理動作を説明する。この場合、第３選択部１９は制御レジスタ１８に格納されたバンドル番号を選択するため、制御レジスタ１８のデータは変化しない。
【００６５】
次に、ローテンション命令実行時で、元のバンドル番号が下限バンドル番号と上限バンドル番号との間に存在しない場合（図１６のバンドル番号０〜２とｃ〜ｆ）の処理動作を説明する。この場合、第１選択部１２は「０」を出力し、第１バンドル番号演算部１３は制御レジスタ１８に格納されているバンドル番号をそのまま出力する。また、第１判定部１１の出力は「０」であるため、アンド回路１６の出力はゼロになり、第４選択部２０は「０」を出力する。
【００６６】
次に、ローテンション命令実行時で、元のバンドル番号が下限バンドル番号と上限バンドル番号との間に存在する場合の処理動作を説明する。この場合、第１判定部１１は「１」を出力し、第１選択部１２は「３」を出力し、第１バンドル番号演算部１３は制御レジスタ１８に格納されたバンドル番号から「３」を引いた値を出力する。これにより、第１バンドル番号演算部１３の出力は、図１６（ｃ）のようになる。
【００６７】
第２判定部１４は、第１バンドル番号演算部１３で演算されたバンドル番号が「０」、「１」、「２」のいずれかであれば「０」を出力し、それ以外のときは「１」を出力する。
【００６８】
第２判定部１４から「０」が出力されると、第２選択部１５は上限バンドル番号「ｂ」から下限バンドル番号「３」を引いた値に「１」を加えた値（11-3+1=9）を出力する。第２判定部１４から「１」が出力されると、第２選択部１５は「０」を出力する。
【００６９】
第２バンドル番号演算部１７は、第１バンドル番号演算部１３で演算されたバンドル番号が「０」、「１」、「２」のときは、これらの値に「９」を加えた値「９」、「ａ」、「ｂ」をそれぞれ出力する。また、第１バンドル番号演算部１３で演算されたバンドル番号が「３」〜「８」のときはそのまま出力する。これにより、制御レジスタ１８の内容は図１６（ｄ）のようになる。
【００７０】
このように、本実施形態では、レジスタ・リネーム命令を実行するとき、ローテーションする範囲内のバンドルを初期化した後、レジスタ・リネーム命令のローテーション量、下限バンドル番号、および上限バンドル番号に基づいて、ハードウェアによりバンドルのローテーションを行うため、バンドル間でデータのやり取りを行わなくても新たなバンドル番号を設定できる。したがって、バンドル間をまたがる配線が不要となり、配線量を削減できるとともに、高速処理が可能になる。
【００７１】
図１５のリネーミング装置をプロセッサの内部に組み込む場合、リネーミング装置をパイプラインの動きに合わせて動作させるのが望ましい。図１７はプロセッサをパイプライン動作させる場合のリネーミング装置の動作状態を示すブロック図である。この例は、４サイクルかけてバンドルの内容をローテーションするものである。
【００７２】
図１７のリネーミング装置は、パイプラインの各ステージに同期させるためのレジスタファイル２１を有する点を除けば、図１５の装置と同様に構成されており、図１５と同様に回路構成を簡素化でき、かつ高速動作が可能になる。
【００７３】
このように、図１７のリネーミング装置は、装置内部に設けられるレジスタファイル２１でシステムクロックに同期させるため、ゲート段数が多くてもタイミングが保障され、動作が安定化し、高速クロックにも容易に対応できる。
【００７４】
【発明の効果】
以上詳細に説明したように、本発明によれば、物理レジスタ番号と論理レジスタ番号との対応関係を示す制御レジスタを設け、プログラマが指定した命令により制御レジスタに値を任意に設定できるようにしたため、ハードウェアの構成を複雑にすることなく、パイプライン・バブルの発生を抑えることができる。特に、従来のout-of-order発行機能を有するスーパースカラプロセッサなどよりも、ハードウェアの構成を大幅に簡略化できる。
【００７５】
また、プログラマが物理レジスタ番号と論理レジスタ番号との対応関係を任意に設定変更できるため、従来のレジスタ・ローテーション機能を持つプロセッサよりも柔軟性のあるレジスタ・ローテーションが実現できる。
【００７６】
さらに、本発明によれば、対応づけ変更命令が発行されると、いったん制御レジスタの内容をリセットした後、対応づけ変更命令で指示される内容にしたがって制御レジスタに新たな値を設定するようにしたため、各バンド間でデータのやり取りをしなくても対応づけの変更を行うことができ、ハードウェアで実現したときの回路構成を大幅に簡素化できる。したがって、配線量を削減できるとともに、各配線を短くできるため、プロセッサのパイプライン動作に合わせて動作させることができるとともに、高速クロックへの対応が容易になる。
【図面の簡単な説明】
【図１】本発明に係るプロセッサの概略構成を示すブロック図。
【図２】５段階に分けてパイプライン処理を行う例を示す図。
【図３】命令セットの一例を示す図。
【図４】  RENAME命令実行時のリネーム制御ユニット４の処理動作を示すフローチャート。
【図５】  RENAME命令の実行手順を説明する図。
【図６】  ROTATE命令の動作例を示す図。
【図７】  ROTATE命令の動作例を示す図。
【図８】  ROTATE命令の動作例を示す図。
【図９】  ROTATE命令の動作例を示す図。
【図１０】  ROTATE命令の動作例を示す図。
【図１１】  ROTATE命令の動作例を示す図。
【図１２】レジスタ・リネーム命令にて、From=2、To=a、Shift=3を指定した場合のローテーション動作を示す図。
【図１３】実際にアクセスされる物理アドレスを示す図。
【図１４】バンドル数が「８」の場合のデータパスの例を示す図。
【図１５】本発明に係るリネーミング装置の一実施形態のブロック図。
【図１６】制御レジスタの値を示す図。
【図１７】プロセッサをパイプライン動作させる場合のリネーミング装置の動作状態を示すブロック図。
【図１８】あるプロセッサのパイプラインステージを示す図。
【図１９】図１８のプロセッサが実行するプログラムの一例を示す図。
【図２０】図１９のパイプライン動作を示す図。
【図２１】オーバーラップ実行の一例を示す図。
【図２２】ソフトウェア・パイプライニングを行うプログラムの一例を示す図。
【図２３】レジスタ・ローテーションの一例を示す図。
【図２４】図２３に対応するプログラムを示す図。
【図２５】図２４のパイプライン動作を示す図。
【図２６】１ループ目終了時のレジスタの対応関係を示す図。
【図２７】２ループ目終了時のレジスタの対応関係を示す図。
【符号の説明】
１  命令メモリ
２  フェッチ・ユニット
３  デコード・ユニット
４  リネーム制御ユニット
５  リネーム制御レジスタ
６  レジスタファイル
７  演算処理ユニット
１１  第１判定部
１２  第１選択部
１３  第１バンドル番号演算部
１４  第２判定部
１５  第２選択部
１６  アンド回路
１７  第２バンドル番号演算部
１８  制御レジスタ
１９  第３選択部
２０  第４選択部
２１  レジスタファイル
【図１】
0003817436.tif 000002
【図２】
0003817436.tif 000003
【図３】
0003817436.tif 000004
【図４】
0003817436.tif 000005
【図５】
0003817436.tif 000006
【図６】
0003817436.tif 000007
【図７】
0003817436.tif 000008
【図８】
0003817436.tif 000009
【図９】
0003817436.tif 000010
【図１０】
0003817436.tif 000011
【図１１】
0003817436.tif 000012
【図１２】
0003817436.tif 000013
【図１３】
0003817436.tif 000014
【図１４】
0003817436.tif 000015
【図１５】
0003817436.tif 000016
【図１６】
0003817436.tif 000017
【図１７】
0003817436.tif 000018
【図１８】
0003817436.tif 000019
【図１９】
0003817436.tif 000020
【図２０】
0003817436.tif 000021
【図２１】
0003817436.tif 000022
【図２２】
0003817436.tif 000023
【図２３】
0003817436.tif 000024
【図２４】
0003817436.tif 000025
【図２５】
0003817436.tif 000026
【図２６】
0003817436.tif 000027
【図２７】
0003817436.tif 000028