(57)【要約】【課題】レジスタウィンドウ方式のレジスタファイルを備え、ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行が可能な演算処理装置の回路規模を削減し、その消費電力も低減する。【解決手段】ＭＲＦ１０は、レジスタファイル、ＭＲＦ＿ＲＡ１及びＭＲＦ＿ＲＡ２と５つの読み出しポートｉｏ０、ｉｏ１、ｉｏ２、ｌ０、ｌ１を備える。レジスタ制御部２１０によってＭＲＦ＿ＲＡ１を制御し、それらの読み出しポートから、ＣＷＰレジスタ２１３の値（ｃｗｐ）で指定されるレジスタウィンドウのインレジスタ／アウトレジスタ、ローカルレジスタのウィンドウを選択出力する。次に、レジスタ制御部２１０によってＭＲＦ＿ＲＡ２を制御し、該選択出力されたウィンドウのデータと前記レジスタファイルから入力するグローバルレジスタのウィンドウのデータから、演算部３０が必要とするレジスタのデータを選択し、該データを演算部３０に出力する。【選択図】図２
2008234075.tif 000002
【特許請求の範囲】
【請求項１】
レジスタウィンドウを複数備えるレジスタファイルと、
前記レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段と、
前記レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持するカレントウィンドウポインタ手段と、
前記カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、前記カレントウィンドウポインタ手段が保持する前記アドレス情報を更新し、前記ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、前記演算手段が、前記更新前のアドレス情報が指定する第１のレジスタウィンドウのデータと前記更新後のアドレス情報が指定する第２のレジスタウィンドウのデータを、前記レジスタファイルから読み出しできるように制御する制御手段と、
を備えたことを特徴とする演算処理装置。
【請求項２】
請求項１記載の演算処理装置であって、
前記制御手段は、前記ウィンドウ切り替え命令のコミットが開始されたとき、前記演算手段が、前記更新後のアドレス情報が指定する前記第２のレジスタウィンドウのデータのみを、前記レジスタファイルから読み出しできるように制御することを特徴とする。
【請求項３】
請求項１記載の演算処理装置であって、
前記制御手段は、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記第１のレジスタウィンドウのデータと前記第２のレジスタウィンドウのデータを前記レジスタファイルから読み出すウィンドウデータ読み出し手段と、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、該ウィンドウデータ読み出し手段によって読み出された前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータを選択して出力するレジスタデータ選択出力手段と、
を備えることを特徴とする。
【請求項４】
請求項３記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、
前記ウィンドウ切り替え命令のコミットが開始されると、前記第２のジスタウィンドウに含まれるレジスタのデータのみを前記レジスタファイルから読み出すことを特徴とする。
【請求項５】
請求項３記載の演算処理装置であって、
前記レジスタファイルは、前記第1のレジスタウィンドウのデータと前記第２のレジスタウィンドウのデータを出力する複数の読み出しポートを備え、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記前記第1のレジスタウィンドウのデータと前記第２のレジスタウィンドウのデータを前記複数の読み出しポートから出力し、
前記レジスタデータ選択出力手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記複数の読み出しポートから出力される前記第１のレジスタウィンドウのデータと前記第２のレジスタデータウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータのみを選択して出力することを特徴とする。
【請求項６】
請求項５記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第２のジスタウィンドウのデータのみを前記複数のポートのいずれかのポートから出力することを特徴とする。
【請求項７】
請求項５記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記第１のレジスタウィンドウのデータ出力と前記第２のレジスタウィンドウのデータ出力に兼用されることを特徴とする。
【請求項８】
請求項７記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記ウィンドウ切り替え命令が実行される毎に、前記第１のレジスタウィンドウのデータと前記第２のレジスタウィンドウのデータを交互に切り替え出力することを特徴とする。
【請求項９】
請求項５記載の演算処理装置であって、
前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第１のウィンドウと、個々のルーチンが個別に使用するレジスタを備える第２のウィンドウと、全てのルーチンで共有されるレジスタを備える第３のウィンドウを備え、
前記複数の読み出しポートは、前記第１のウィンドウのデータを出力する第１の読み出しポートと、前記第２のウィンドウのデータを出力する第２の読み出しポートを含み、前記第１の読み出しポートの本数と前記第２の読み出しポートの本数は、共に、複数であることを特徴とする。
【請求項１０】
請求項９記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、前記複数の第１の読み出しポートを介して前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる前記第１のウィンドウのデータを出力し、前記複数の第２の読み出しポートを介して前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる前記第２のウィンドウのデータを出力することを特徴とする。
【請求項１１】
請求項１０記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、全ての前記第1の読み出しポートと全ての前記第２の読み出しポートを介して前記データ出力を行うことを特徴とする。
【請求項１２】
請求項１０または１１記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第１のレジスタウィンドウに含まれる第１のウィンドウのデータのみを前記複数の第１の読み出しポートの一部のポートから出力し、前記第１のレジスタウィンドウに含まれる第２のウィンドウのデータのみを前記複数の第２の読み出しポートの一部のポートから出力することを特徴とする。
【請求項１３】
請求項１２記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令の実行が開始される毎に、前記第１のレジスタウィンドウのデータを出力する前記第１の読み出しポートと、前記第２のレジスタウィンドウのデータを出力する前記第２の読み出しポートを切り替えることを特徴とする。
【請求項１４】
請求項９乃至１３のいずれか１項に記載の演算処理装置であって、
前記第１の読み出しポートと前記第２の読み出しポートには、それぞれ、前記第１のウィンドウのデータと前記第２のウィンドウのデータが入力されるマルチプレクサが設けられており、
前記ウィンドウデータ読み出し手段は、前記第１の読み出しポートと前記第２の読み出しポートの各ポートに設けられたマルチプレクサを制御して、前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる前記第１のウィンドウのデータと前記第２のウィンドウのデータを該マルチプレクサから選択出力させ、
前記レジスタデータ選択出力手段は、前記マルチプレクサから出力される前記第１のウィンドウのデータと前記第２のウィンドウのデータの中から前記演算手段が必要とするレジスタのデータを選択して出力することを特徴とする。
【請求項１５】
請求項３乃至１４のいずれか１項に記載の演算処理装置であって
前記レジスタデータ選択出力手段は、さらに、前記レジスタファイルから前記演算手段が必要とするデータを読み出して、そのデータを出力させることを特徴とする。
【請求項１６】
請求項３記載の演算処理装置であって、
前記制御手段は、さらに、
ウィンドウ切り替え命令が実行される度に、前記カレントウィンドウがアドレス順に切り替わってサイクリックに使用されるように、前記カレントウィンドウポインタ手段が保持するアドレス情報を更新するカレントウィンドウポインタ制御手段と、
前記サイクリックに切り替わるアドレス情報の全てのステートに関するステート情報を格納する記憶手段と、
前記カレントウィンドウポインタ手段が保持するアドレス情報が更新されたとき、更新後のアドレス情報に対応するステート情報を前記記憶手段から読み出し、そのステート情報を前記ウィンドウデータ読み出し手段に出力するステート情報出力手段と、
を備えることを特徴とする。
【請求項１７】
請求項１６記載の演算処理装置であって、
前記記憶手段に記憶されるステート情報は、何回目のサイクリックであるかを示すサイクリック情報とカレントウィンドウのアドレス情報の組であることを特徴とする。
【請求項１８】
請求項１記載の演算処理装置であって、さらに、
前記ウィンドウ切り替え命令のデコード後に、前記ウィンドウ切り替え命令の後続命令を一定サイクルだけストールさせるパイプライン制御手段を備えることを特徴とする。
【請求項１９】
請求項１記載の演算処理装置であって、さらに、
レジスタリネーミングを行うリネームレジスタ手段と、
第1の命令と、該第1の命令の後に実行される後続命令が真のデータ依存関係にあるとき、前記第1の命令の実行結果を前記レジスタファイルから読み出し可能となるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御するリネームレジスタ制御手段と、
を備えることを特徴とする。
【請求項２０】
請求項１９記載の演算処理装置であって、
前記リネームレジスタ制御手段は、前記第1の命令の実行結果を前記リネームレジスタ手段に格納してから前記レジスタファイルから読み出すまでに複数サイクルを要する場合、
前記実行結果を前記レジスタファイルから読み出し可能になるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御することを特徴とする。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レジスタウィンドウ方式のレジスタファイルを備える演算処理装置に係り、特にアウトオブオーダ実行が可能な演算処理装置に関する。
【背景技術】
【０００２】
ＲＩＳＣ(Reduced Instruction Set Computer)アーキテクチャのプロセッサ（以下、ＲＩＳＣプロセッサと呼ぶ）は、レジスタ−レジスタ演算を中心としており、メモリアクセスを減少することにより処理の高速化を図っている（ロード−ストア・アーキテクチャ）。ＲＩＳＣプロセッサは、上記レジスタ−レジスタ演算の効率化のために大容量のレジスタファイルを備えている。このレジスタファイルとして、サブルーチン呼び出し時の引き数の引渡し（引数の退避／復帰）のオーバーヘッドを削減するように構成されたレジスタウィンドウ方式のレジスタファイルが知られている。
【０００３】
図１７は、上記レジスタウィンドウ方式のレジスタファイルの構成例を示す図である。
同図に示すレジスタファイル１０００は、８本のレジスタウィンドウＷ０〜Ｗ７から成り、これらのレジスタウィンドウＷ０〜Ｗ７は論理的にリング状に連結されている。各レジスタウィンドウＷｋ（ｋ＝０〜７）は、W globals（不図示）、Wk outs、Wk ins、及びWk localsの４種類のセグメント（以後、これをウィンドウと呼ぶことにする）を備えている。これら４種類のウィンドウは、いずれも、８個のレジスタから構成されている。W globalsは全てのサブルーチンで共用される８個のグローバルレジスタを備え、Wk localsは各レジスタウィンドウ固有の８個のローカルレジスタを備えている。Wk insは８個のｉｎレジスタ（インレジスタ）を備え、Wk outsは８個のｏｕｔレジスタ（アウトレジスタ）を備えている。
【０００４】
Wk outsは自ルーチンが呼び出すサブルーチンに引き数を渡すために、Wk insは自ルーチンを呼び出した親ルーチンから引き数を受け取るために使用される。レジスタファイル１０００では、Wk insとWｋ＋１ outs及びWk outsとWk−１ insがオーバーラップするように構成されているため、サブルーチンコール時において、引き数の引渡しとそのために使用するレジスタの確保を高速化できる。Wk localsは、各サブルーチン（親ルーチンから呼び出された子ルーチン）が作業用のレジスタセットとして使用する。  
【０００５】
各サブルーチンは、実行時において、８本のレジスタウィンドウＷ０〜Ｗ７のいずれか一つを使用する。ここで、実行中のサブルーチンが使用するレジスタウィンドウＷｋ（カレントウィンドウと呼ばれる）は、サブルーチンコールが発生する度に右回り（“ＳＡＶＥ”で示された破線の矢印の方向）に前記ウィンドウ２個分回転し、サブルーチンの復帰時に左回り（“ＲＥＳＴＯＲＥ”で示されたに破線の矢印の方向）に前記ウィンドウ２個分回転するようになっている。
【０００６】
レジスタファイル１０００においては、各レジスタウィンドウWｋは、それぞれに割り当てられたレジスタウィンドウ番号（以下、ウィンドウ番号と呼ぶ）によって管理されている。例えば、レジスタウィンドウWｋにはウィンドウ番号ｋが割り当てられる。実行中のサブルーチンが使用しているレジスタウィンドウＷｋの番号kはＣＷＰ(Current Window
Pointer)に保持される。ＣＷＰの値は、ＳＡＶＥ命令の実行もしくはトラップ（ｔｒａｐ）発生によってインクリメントされ、ＲＥＳＴＯＲＥ命令の実行もしくはＲＥＴＴ命令によるトラップからの復帰によってデクリメントされる。図１７では、ＣＷＰの値は“０”となっており、ＣＷＰはレジスタウィンドウＷ０を指定している。このように、ＣＷＰの値を増減させて、カレントウィンドウの切り替えを行う命令を、本明細書では“ウィンドウ切り替え命令”と呼ぶことにする。
【０００７】
図１７に示すレジスタファイル１０００は、８本のレジスタウィンドウＷｋと１本のウィンドウW globals（不図示）で構成されている。ここで、W globalsは、全てのルーチンで共用されるデータを格納するレジスタセット（ウィンドウ）である。各レジスタウィンドウWｋは２４個（＝８×３）のレジスタを備えており、ウィンドウW globalsは８個のレジスタを備えている。これらのレジスタの内、ウィンドウWk InsとウィンドウWk outsのレジスタが６４個（＝８×８）オーバーラップしているので、レジスタファイル１０００が備えるレジスタの総数は、１３６個（＝８×２４＋８−６４）である。プロセッサ（演算処理装置）の演算器がサブルーチンを実行するためには、レジスタファイル１０００のそれら全てのレジスタにデータを読み書きできる必要がある。
【０００８】
この場合、このような大きなレジスタファイル１０００からデータを読み出す回路の規模と速度が問題となる。この問題を解消するため、図１８に示すような構成の演算処理装置が考案されている。
【０００９】
図１８に示す演算処理装置２０００は、マスタレジスタファイル２００１（以後、ＭＲＦ２００１と記載）、ワーキングレジスタファイル２００２（以後、ＷＲＦ２００２と記載）及び演算器２００３から構成されている。演算器２００３は、命令を実行する実行部（図中に示す“Execution unit”）と記憶部（図中に示す“Memory unit”）を備えている。
【００１０】
一般に、レジスタウィンドウ方式のレジスタファイルは、レジスタウィンドウ数が増えると、具備するレジスタの数が多くなり、演算器にオペランドを高速に供給することが困難となる。このため、図１８に示すプロセッサは、全てのレジスタウィンドウ（ウィンドウW  globalsも含む）を備えるＭＲＦ２００１に加えて、このＭＲＦ２００１内のＣＷＰが指すカレントウィンドウのデータのコピーを保持するＷＲＦ２００２を備え、演算器２００３へのオペランドの供給は、このＷＲＦ２００２から行うような構成となっている。
【００１１】
しかし、演算処理装置２０００をこのような構成とした場合、ＷＲＦ２００２にはＣＷＰが指定するカレントウィンドウのデータしか保持されていないため、ＳＡＶＥ命令やＲＥＳＴＯＲＥ命令のようなウィンドウ切り替え命令が実行されると、その後続命令で必要となるオペランドをＷＲＦ２００２から供給できなくなる。このため、ＭＲＦ２００１からＷＲＦ２００２に必要なレジスタウィンドウのデータを転送する処理が必要となり、この処理が終了するまで、以後の命令の実行はストールするという問題が生じる。
【００１２】
また、アウトオブオーダ(out-of-order)実行機能を備えたプロセッサの場合には、命令の実行順序はプログラムの順序とは限らず、処理可能な命令から実行していくが、ウィンドウ切り替え命令に後続する命令は、例え、処理可能になったとしても、該ウィンドウ切り替え命令実行後に、ＷＲＦ２００２に必要なレジスタウィンドウのデータが転送されるまでは実行できない。
【００１３】
このような制約は、同時命令発行数が多くアウトオブオーダ実行が可能なスーパースカラ方式のプロセッサでは、非常に大きな性能低下を引き起こす。何故ならば、アウトオブオーダ実行方式のプロセッサでは、多くの命令をフェッチし、バッファにそれらの命令を蓄積しておき、そのバッファからプログラムの実行順序とは関係なく、実行可能な命令から順に実行していくことで、命令実行のスループットを上げているからである。
【００１４】
そこで、図１９に示すような演算処理装置が考案されている（例えば、特許技術文献１参照）。図１９に示す演算処理装置３０００では、ＭＲＦ３００１がカレントウィンドウ
のデータに加え、該カレントウィンドウの前後のレジスタウィンドウのデータを保持するようになっている。また、ＭＲＦ３００１とＷＲＦ３００２の間には、ＭＲＦ３００１からＷＲＦ３００２にレジスタウィンドウのデータを転送する際に、そのデータを一時的に保持するためのレジスタ群３１１３（例えば、８バイトのレジスタが８個）が設けられている。
【００１５】
このような構成において、演算処理装置３０００は、先見転送により、ＣＷＰ＋１及びＣＷＰ−１が指すレジスタウィンドウのデータを、予め、ＭＲＦ３００１からＷＲＦ３００２に転送しておくことによって、ウィンドウ切り替え命令に後続する命令をアウトオブオーダで実行可能となっている。尚、図１９において、破線枠ＣＷＰはＣＷＰが指定するレジスタウィンドウを、破線枠ＣＷＰ＋１はＣＷＰが指定するレジスタウィンドウの次のレジスタウィンドウを示す。また、破線枠ＣＷＰ−１はＣＷＰが指定するレジスタウィンドウの一つ前のレジスタウィンドウを示している。
【００１６】
ここで、ＣＷＰが、現在、レジスタウィンドウＷ３を指定しているものとする。このとき、ＷＲＦ３００２にはレジスタウィンドウＷ２、Ｗ３、Ｗ４が保持されているので、演算器３００３はレジスタウィンドウＷ２〜Ｗ４を利用する命令を実行可能である。その後、ＳＡＶＥ命令が実行されると、そのＳＡＶＥ命令実行後、ＣＷＰはレジスタウィンドウＷ４を指定するようにインクリメントされる。そして、ＭＲＦ３００１からレジスタ群３１１３を介してＷＲＦ３００２にレジスタウィンドウＷ５のデータが転送され、ＷＲＦ３００２にはレジスタウィンドウＷ３〜Ｗ５のデータが保持される。これにより、演算器３００３はレジスタウィンドウＷ３〜Ｗ５を使用する命令を実行可能となる。
【００１７】
しかしながら、演算処理装置３０００においては、ＷＲＦ３００２が３本のレジスタウィンドウを保持するため、ＷＲＦ３００２は６４個のレジスタを備える必要がある。また、ラッチ用の前記レジスタ群が８個のレジスタを備えるため、合計７２個のレジスタが必要となる。図１８の前記演算処理装置２０００のＷＲＦ２００２は１本のレジスタウィンドウのみを保持するため、３２個のレジスタを備える。したがって、演算処理装置３０００は、レジスタを演算処理装置２０００よりも４０個多く備えることになり、回路規模が大きくなってしまう。さらに、演算処理装置３０００においては、ＷＲＦ３００２と演算器３００３にデータを転送するための選択回路（不図示）の面積（回路規模）が大きくなってしまうと共に、演算器３００３がＷＲＦ３００２からデータを読み出す処理速度が低下してしまう。
【００１８】
この問題を解消するために、本出願人は、アウトオブオーダ実行方式の命令パイプラインの制御に着目して、ＷＲＦにはＣＷＰ＋１またはＣＷＰ−１のいずれか一方のみを転送・保持する構成の情報処理装置を考案した（特許技術文献２参照）。
【００１９】
図２０に、上記特許技術文献２の情報処理装置４０００の構成を示す。図２０に示すように、該情報処理装置４０００は、ＣＲＢ(Current window Replace Buffer)４０３０とＣＷＲ(Current Working Register file)４０２０を備え、ＣＲＢ４０３０とＣＷＲ４０２０ とでＷＲＦを構成している。ＣＷＲ４０２０はカレントウィンドウのデータを保持するバッファであり、ＣＲＢ４０３０はＣＷＲ４０２０ に次に保持されるレジスタウィンドウのデータを格納するバッファである。演算部４０４０は、アウトオブオーダ実行方式で命令を実行するパイプラインを備えている。制御部４０５０は、演算部４０４０によりウィンドウ切り替え命令がデコードされると、ＣＷＲ４０２０ に次に保持すべきカレントウィンドウがＭＲＦ４０１０からＣＲＢ４０３０に転送されるように、ＭＲＦ４０１０とＣＷＲ４０２０ を制御する。また、制御部４０５０は、演算部４０４０が前記ウィンドウ切り替え命令の実行を完了すると、ＣＲＢ４０３０に保持されているレジスタウィンドウのデータをＣＷＲ４０２０ に転送させ、ＣＷＲ４０２０に該レジスタウィンドウのデータを保持させる。
【００２０】
ＣＷＲ４０２０は、カレントウィンドウのウィンドウglobals（G）、locals（L）、ins（Io0）及びouts（Io1）の データを保持するレジスタ群４０２１〜４０２４を備えている。各レジスタ群は８個のレジスタを備えるので、ＣＷＲ４０２０は、３２個（＝４×８）のレジスタを備える。ＣＲＢ４０３０は、カレントウィンドウの次のレジスタウィンドウのデータの内、ＣＷＲ４０２０に保持されているデータとオーバーラップしないウィンドウのデータのみを保持するレジスタ群４０３１、４０３２を備えている。レジスタ４０３１は次のレジスタウィンドウのウィンドウlocals（L）のデータを保持し、レジスタ４０３２は次のレジスタウィンドウのウィンドウins（Io0）またはouts（Io1）のデータを保持する。各レジスタ群４０３１、４０３２は８個のレジスタを備えるので、ＣＷＲ４０２０は、１６個（＝８×２）のレジスタを備える。したがって、情報処理装置４０００のＷＲＦは４８個のレジスタから構成される。
【００２１】
このように、特許技術文献２の情報処理装置４０００のＷＲＦは、特許技術文献１の演算処理装置３０００のＷＲＦ３００２よりもレジスタの数が２４個少ない。このため、情報処理装置４０００は、演算処理装置３０００よりも回路規模を小さくできる共に消費電力も低減できる。
【特許文献１】特開２００３−１９６０８６号公報
【特許文献２】特願２００５−２７５０４号
【発明の開示】
【発明が解決しようとする課題】
【００２２】
しかしながら、前記演算処理装置３０００や前記情報処理装置４０００は、いずれもＭＲＦ内の１つのレジスタウィンドウのコピーを保持する記憶手段（WＲＦや、ＣＲＢとＣＷＲ）を設けているため、ハードウェアコストがかかり、回路規模も大きくなる。また、前記情報処理装置３０００は、ＭＲＦ４０１０とＣＷＲ４０２０との間に設けられたワークバッファ（ＣＲＢ４０３０）からＣＷＲ４０２０へのデータ転送に電力を消費する。
【００２３】
本発明の目的は、レジスタウィンドウ方式のレジスタファイルを備え、ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行が可能な演算処理装置を、従来よりも小さな回路規模と、より低い消費電力で実現することである。
【課題を解決するための手段】
【００２４】
本発明の演算処理装置の第１態様は、レジスタウィンドウを複数備えるレジスタファイルと、前記レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段と、前記レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持するカレントウィンドウポインタ手段と、前記カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、前記カレントウィンドウポインタ手段が保持する前記アドレス情報を更新し、前記ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、前記演算手段が、前記更新前のアドレス情報が指定する第１のレジスタウィンドウのデータと前記更新後のアドレス情報が指定する第２のレジスタウィンドウのデータを、前記レジスタファイルから読み出しできるように制御する制御手段とを備える。
【００２５】
上記本発明の演算処理装置の第１態様によれば、従来の演算処理装置のように、レジスタファイルから演算手段が命令実行に必要とするデータを高速に読み出すための記憶手段を設けることなく、前記レジスタファイルから前記演算手段に、命令実行に必要なデータを高速に供給することができる。また、命令パイプラインにおいてアウトオブオーダ実行
が可能となる。
【００２６】
本発明の演算処理装置の第２態様は、前記第１態様の演算処理装置において、前記制御手段は、前記ウィンドウ切り替え命令のコミットが開始されたとき、前記演算手段が、前記更新後のアドレス情報が指定する前記第２のレジスタウィンドウのデータのみを、前記レジスタファイルから読み出しできるように制御する。
【００２７】
上記本発明の演算処理装置の第２態様によれば、命令パイプラインにおいてインオーダ完了が可能となる。
本発明の演算処理装置の第３態様は、前記第１態様の演算処理装置において、前記制御手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記第１のレジスタウィンドウのデータと前記第２のレジスタウィンドウのデータを前記レジスタファイルから読み出すウィンドウデータ読み出し手段と、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、該ウィンドウデータ読み出し手段によって読み出された前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータを選択して出力するレジスタデータ選択出力手段とを備える。
【００２８】
本発明の演算処理装置の第３態様によれば、ウィンドウデータ読み出し手段とレジスタデータ選択出力手段の作用により、演算手段が命令を実行するために必要なレジスタデータのデータを、レジスタファイルから高速に読み出して、前記演算手段に供給することができる。また、命令パイプラインのアウトオブオーダ実行も可能となる。
【００２９】
本発明の演算処理装置の第４態様は、前記第３態様の演算処理装置において、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第２のジスタウィンドウに含まれるレジスタのデータのみを前記レジスタファイルから読み出すことを特徴とする。
【００３０】
本発明の演算処理装置の第４態様によれば、前記ウィンドウデータ読み出し手段の作用により、命令パイプラインのアウトオブオーダ実行とインオーダ完了が可能となる。
本発明の演算処理装置の第５態様は、前記第３態様の演算処理装置において、前記レジスタファイルは、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを出力する複数の読み出しポートを備え、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記複数の読み出しポートから出力し、前記レジスタデータ選択出力手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記複数の読み出しポートから出力される前記第１のレジスタウィンドウのデータと前記第２のレジスタデータウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータのみを選択して出力する。
【００３１】
本発明の演算処理装置の第５態様によれば、前記ウィンドウデータ読み出し手段の作用により、レジスタファイルに設けられた読み出しポートから前記演算手段が命令実行に必要なデータを高速に読み出すことができる。また、命令パイプラインにおいてアウトオブオーダ実行が可能となる。
【００３２】
上記第５態様の演算処理装置の構成において、例えば、前記複数の読み出しポートの各ポートは、前記第１のレジスタウィンドウのデータ出力と前記第２のレジスタウィンドウのデータ出力に兼用されるようにしてもよい。そして、さらに、例えば、前記複数の読み出しポートの各ポートは、前記ウィンドウ切り替え命令が実行される毎に、前記第１のレ
ジスタウィンドウのデータと前記第２のレジスタウィンドウのデータを交互に切り替え出力するようにしてもよい（前記第５態様の演算処理装置の第1の構成例）。
【００３３】
このような構成にすることにより、読み出しポートの本数を少なくすることができる。また、上記第５態様の演算処理装置において、例えば、前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第１のウィンドウと、個々のルーチンが個別に使用するレジスタを備える第２のウィンドウと、全てのルーチンで共有されるレジスタを備える第３のウィンドウを備え、前記複数の読み出しポートは、前記第１のウィンドウのデータを出力する第１の読み出しポートと、前記第２のウィンドウのデータを出力する第２の読み出しポートを含み、前記第１の読み出しポートの本数と前記第２の読み出しポートの本数は、共に、複数であるような構成にしてもよい（前記第５態様の演算処理装置の第2の構成例）。
【００３４】
このような構成にすることにより、レジスタウィンドウがインレジスタ用ウィンドウ（Wk ins）、ローカルレジスタ用ウィンドウ（Wk locals）及びアウトレジスタ用ウィンドウ（Wk outs）から構成され、グローバルレジスタ用ウィンドウ（W globals）を備えるレジスタファイルに適用できる。
【００３５】
前記第５態様の演算処理装置の第２の構成例において、例えば、前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、前記複数の第１の読み出しポートを介して前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる前記第１のウィンドウのデータを出力し、前記複数の第２の読み出しポートを介して前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる前記第２のウィンドウのデータを出力するような構成にしてもよい（前記第５態様の演算処理装置に第３の構成例）。
【００３６】
このような構成にすることにより、命令パイプラインにおいてアウトオブオーダ実行が可能となる。
前記第５態様の演算処理装置の第３の構成例において、例えば、前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、全ての前記第1の読み出しポートと全ての前記第２の読み出しポートを介して前記データ出力を行うような構成にしてもよい（前記第５態様の演算処理装置の第4の構成例）。
【００３７】
このような構成にすることにより、命令パイプラインにおいてアウトオブオーダ実行を可能としながら、読み出しポートの本数を少なくできる。
前記第５態様の第3または第4の構成例において、例えば、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第１のレジスタウィンドウに含まれる第１のウィンドウのデータのみを前記複数の第１の読み出しポートの一部のポートから出力し、前記第１のレジスタウィンドウに含まれる第２のウィンドウのデータのみを前記複数の第２の読み出しポートの一部のポートから出力するような構成にしてもよい（前記第５態様の演算処理装置の第５構成例）。
【００３８】
このような構成にすることにより、命令パイプラインにおいてアウトオブオーダ実行とインオーダ完了が可能となる。
前記演算処理装置の第5構成例において、例えば、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令の実行が開始される毎に、前記第１のレジスタウィンドウのデータを出力する前記第１の読み出しポートと、前記第２のレジスタウィンドウのデータを出力する前記第２の読み出しポートを切り替えるような構成にしてもよい。
【００３９】
このような構成とすれば、読み出しポートを有効に活用でき、読み出しポートの本数を最小限にできる。
本発明の演算処理装置の第６態様は、前記第５態様の演算処理装置において、前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第２のジスタウィンドウのデータのみを前記複数のポートのいずれかのポートから出力する。
【００４０】
本発明の演算処理装置の第６態様によれば、前記ウィンドウデータ読み出し手段の作用により、パイプラインにおいてインオーダ完了が可能となる。
本発明の演算処理装置の第７態様は、前記第５または第６態様の演算処理装置において、前記第１の読み出しポートと前記第２の読み出しポートには、それぞれ、前記第１のウィンドウのデータと前記第２のウィンドウのデータが入力されるマルチプレクサが設けられており、前記ウィンドウデータ読み出し手段は、前記第１の読み出しポートと前記第２の読み出しポートの各ポートに設けられたマルチプレクサを制御して、前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる前記第１のウィンドウのデータと前記第２のウィンドウのデータを該マルチプレクサから選択出力させ、前記レジスタデータ選択出力手段は、前記マルチプレクサから出力される前記第１のウィンドウのデータと前記第２のウィンドウのデータの中から前記演算手段が必要とするレジスタのデータを選択して出力する。
【００４１】
本発明の演算処理装置の第８態様は、前記第３〜第７態様の各態様において、前記レジスタデータ選択出力手段は、さらに、前記レジスタファイルから前記演算手段が必要とするデータを読み出して、そのデータを出力させる。
【００４２】
本発明の演算処理装置の第８態様によれば、各読み出しポートからのデータ選択出力を、マルチプレクサを制御することにより高速に実行できる。
本発明の演算処理装置の第９態様は、前記第３態様の演算処理装置において、前記制御手段は、さらに、ウィンドウ切り替え命令が実行される度に、前記カレントウィンドウがアドレス順に切り替わってサイクリックに使用されるように、前記カレントウィンドウポインタ手段が保持するアドレス情報を更新するカレントウィンドウポインタ制御手段と、
前記サイクリックに切り替わるアドレス情報の全てのステートに関するステート情報を格納する記憶手段と、前記カレントウィンドウポインタ手段が保持するアドレス情報が更新されたとき、更新後のアウトオブオーダ実行方式に対応するステート情報を前記記憶手段から読み出し、そのステート情報を前記ウィンドウデータ読み出し手段に出力するステート情報出力手段とを備える。
【００４３】
前記第９態様の演算処理装置において、前記記憶手段に記憶されるステート情報は、例えば、何回目のサイクリックであるかを示すサイクリック情報とカレントウィンドウのアドレス情報の組である。
本発明の演算処理装置の第９態様によれば、レジスタウィンドウが論理的にリング状に構成されたレジスタファイルからのデータ読み出しを、前記記憶手段に格納されている前記ステート情報を利用して効率的に制御できる。
【００４４】
本発明の演算処理装置の第１０態様は、前記第１態様の演算処理装置において、前記ウィンドウ切り替え命令のデコード後に、前記ウィンドウ切り替え命令の後続命令を一定サイクルだけストールさせるパイプライン制御手段を備える。
【００４５】
本発明の演算処理装置の第１０態様の演算処理装置によれば、レジスタファイルから演算手段へのデータ転送に複数サイクル（サイクルは、命令パイプラインのサイクル）を要する場合、ウィンドウ切り替え命令の後続命令のデコードをストールさせることで、該後
続命令を正しく実行できる。
【００４６】
本発明の演算処理装置の第１１態様の演算処理装置は、前記第１態様の演算処理装置において、さらに、レジスタリネーミングを行うリネームレジスタ手段と、第1の命令と、該第1の命令の後に実行される後続命令が真のデータ依存関係にあるとき、前記第1の命令の実行結果を前記レジスタファイルから読み出し可能となるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御するリネームレジスタ制御手段とを備える。
【００４７】
前記第1１態様の演算手段において、前記リネームレジスタ制御手段は、例えば、前記第1の命令の実行結果を前記リネームレジスタ手段に格納してから前記レジスタファイルから読み出すまでに複数サイクルを要する場合、前記実行結果を前記レジスタファイルから読み出し可能になるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御する。
【００４８】
本発明の演算処理装置の第1１態様によれば、レジスタファイルから演算手段へのデータ転送に複数サイクル（サイクルは、パイプラインのサイクル）を要するとき、前記リネームレジスタ手段の前記実行結果を保持しているエントリの開放を遅らせることで、ある命令Ａとその命令Ａに後続する命令Ｂとの間に真のデータ依存関係が存在する場合であっても、該命令Ｂを、命令パイプラインにパイプラインバブルを生じさせずに実行できる。
【発明の効果】
【００４９】
本発明によれば、レジスタウィンドウ方式のレジスタファイルからデータを予め読み出しておくためのバッファを設けずに、組み合わせ回路を主要部とする構成で、該レジスタファイルから演算器にオペランドデータを供給できるので、レジスタウィンドウ方式のレジスタファイルを備え、ウィンドウ切り替え命令（レジスタウィンドウ切り替え命令）の後続命令のアウトオブオーダ実行が可能な機能を備えた演算処理装置を、従来よりも小さな回路規模（回路面積）と、より低い消費電力で実現できる。
【発明を実施するための最良の形態】
【００５０】
以下、図面を参照しながら本発明の実施形態について説明する。
［概要］
本発明は、上述したレジスタウィンドウ方式のレジスタファイルを有し、アウトオブオーダ実行機能を備えた演算処理装置において、前記ＭＲＦからのデータ読み出しを工夫することで、前記ＷＲＦを設けることなく、演算部のデータ読み出し速度を確保しながら、ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行も可能にすることを特徴としている。本発明は、このような構成により、演算処理装置の回路面積の削減による消費電力の低減、ワークバッファ間（ＣＷＲとＣＲＢ間）のデータ転送を無くすことにより消費電力の削減を実現する。
【００５１】
本発明の実施形態である演算処理装置の全体構成を図１に示し、図２に本実施形態の演算処理装置の詳細な構成を示す。また、本実施形態の演算処理装置のアウトオブオーダ実行を行う命令パイプラインを図４に示す。
【００５２】
本実施形態の構成上の特徴は、従来の演算処理装置とは異なりWRFを備えていないことである。図１に示すＭＲＦ１０内に、図２に示すように、ＭＲＦ＿ＲＡ１(Master Register Read Address 1)、ＭＲＦ＿ＲＡ２(Master Register Read Address 2)を設ける。また、制御部２０内に、前記ＭＲＦ＿ＲＡ１と前記ＭＲＦ＿ＲＡ２を制御する制御部（レジスタ制御部２１０、命令制御部２２０）を設ける。ＭＲＦ＿ＲＡ１の内容は、ＣＷＰレジスタ２１３の値を更新する命令の発行(issue)時もしくはコミット(commit)時に更新される。本実施形態では、このＭＲＦ＿ＲＡ１を用いて、ＭＲＦ１０からＣＷＰレジスタ２１３で指定されるレジスタウィンドウを読み出す。
【００５３】
本実施形態は、図２に示すように、前記特許技術文献２の情報処理装置４０００が備えるＣＲＢ４０３０、ＣＷＲ４０２０に相当する記憶手段は備えておらず、これらの記憶手段が備えていた機能は、ほとんど、組み合わせ回路で実現されている。ＭＲＦ＿ＲＡ２の内容は、命令パイプラインのＤｉｓｐａｔｃｈステージで決定され、それに続くＥｘｅｃｕｔｅステージにおいて演算部３０が使用するデータを指示する。
【００５４】
このような回路構成を採用したことにより、ＭＲＦ＿ＲＡ１またはＭＲＦ１０に保持されるデータが更新されない限り、ＭＲＦ＿ＲＡ２から演算部３０まではデータが１サイクルで読み出され、演算部３０における命令のアウトオブオーダ実行が可能となる。また、ＭＲＦ＿ＲＡ１またはＭＲＦ１０に保持されるデータが更新されてから、その更新が演算部３０への読み出しデータに影響を与えるまでにＮサイクルかかるものとすると、ＭＲＦ＿ＲＡ１またはＭＲＦ１０に保持されるデータが更新されてからＮ−１サイクルだけ、次命令のディスパッチ(Dispatch)をストールさせることで、全ての場合において、演算部３０における命令のアウトオブオーダ実行が可能となる。
【００５５】
また、命令パイプラインのＵｐｄａｔｅ  Ｂｕｆｆｅｒステージにおいて演算結果を一旦保持しておくレジスタ（図２のリオーダバッファ(ROB：Reorder Buffer)３１）のデータは、一般にＣｏｍｍｉｔステージで破棄され、ＭＲＦ１０に書き込まれる。このため、演算部３０は、その後は、そのデータをＭＲＦ１０から読み出すが、これをＣｏｍｍｉｔステージのＮ−１サイクルまでリオーダバッファ３１で保持し、前記演算結果を前記リオーダバッファ３１から読み出すことによって、上記のようにＭＲＦ１０に保持されるデータの更新からＮ−１サイクル分だけディスパッチをストールする必要がなくなる。
【００５６】
［構成］
｛全体構成｝
図１は、本発明の実施形態である演算処理装置の全体構成図である。
同図に示す演算処理装置１は、ＭＲＦ１０、制御部２０及び演算部３０を備えている。
図１と図１９、２０を比較すれば分かるように、本実施形態の演算処理装置１は、上述した従来の前記情演算処理装置３０００や前記情報処理装置４０００と異なり、WRF３００２やワークバッファ（ＣＷＲ４０２０、ＣＲＢ４０３０）を備えていない。本実施形態の演算処理装置１は、制御部２０内に設けられた組み合わせ回路（不図示）とＭＲＦ１０内に設けられたレジスタ（例えば、前記ＭＲＦ＿ＲＡ１と前記ＭＲＦ＿ＲＡ２）により、ＣＷＰで指定されるＭＲＦ１０内のレジスタウィンドウをアクセスして、該レジスタウィンドウに対するデータの読み出し／書き込みを行う。制御部２０は、演算部３０に対して命令の演算実行を指示するための信号を出力する。
【００５７】
ＭＲＦ１０は、レジスタウィンドウ方式のレジスタファイルであり、その構成は上述した図１７に示すＭＲＦ４０１０とほぼ同様である。ＭＲＦ１０内のレジスタウィンドウの指定は、ＣＷＰレジスタ（不図示）によって行われる。演算部３０は、ＭＲＦ１０内のレジスタウィンドウからデータを読み出し(read)、そのデータを用いて算術演算命令や論理演算命令などを実行する。そして、その命令の実行結果を、ＭＲＦ１０の当該レジスタウィンドウに書き込む(write)。
【００５８】
図２は、図１の演算処理装置１の詳細な構成を示す図である。図４は、演算処理装置１が備えるアウトオブオーダ実行の命令パイプラインを示す図である。
｛命令パイプラインの構成｝
まず、図４に示す命令パイプラインの構成を説明する。図４に示すように、演算処理装置１の命令パイプラインは、Ｆｅｔｃｈステージ（Ｆ）、Ｉｓｓｕｅステージ（Ｄ）、Ｄ
ｉｓｐａｔｃｈステージ（Ｐ）、Ｏｐｅｒａｎｄ  Ｒｅａｄステージ（Ｂ）、Ｅｘｅｃｕｔｅステージ（Ｘ）、Ｕｐｄａｔｅ  Ｂｕｆｆｅｒステージ（Ｕ）、及びＣｏｍｍｉｔステージ（Ｗ）から構成される。
【００５９】
上記各ステージの機能は下記の通りである。
Ｆｅｔｃｈステージ：メモリから命令を読み出す
Ｉｓｓｕｅステージ：命令をデコードし、そのデコード結果をリザベーションステーションに登録する。
【００６０】
Ｄｉｓｐａｔｃｈステージ：リザベーションステーションから命令を発行する
Ｏｅｒａｎｄ  Ｒｅａｄステージ：演算器までオペランドを読み出す
Ｅｘｅｃｕｔｅステージ：命令を実行する
Ｕｐｄａｔｅ  Ｂｕｆｆｅｒステージ：実行結果を待ち合わせる
Ｃｏｍｍｉｔステージ：命令を完了する
【００６１】
Ｆｅｔｃｈステージはメモリ（不図示）から命令を読み出すステージであり、Ｉｓｓｕｅステージは該命令をデコードし、その結果をリザベーションステーションに登録するステージである。ＦｅｔｃｈステージとＩｓｓｕｅステージは、インオーダで実行される（ＩＯ．ＦＤ）。
【００６２】
Ｄｉｓｐａｔｃｈステージはリザベーションステーション（不図示）から命令を発行するステージであり、Ｅｘｅｃｕｔｅステージは前記リザベーションステーションから発行された命令を実行するステージである。また、ＵｐｄａｔｅＢｕｆｆｅｒステージは、インオーダ完了を実現するために、Ｅｘｅｃｕｔｅステージで実行された結果を待ち合わせるステージである。Ｄｉｓｐａｔｃｈステージ、Ｅｘｅｃｕｔｅステージ及びＵｐｄａｔｅＢｕｆｆｅｒステージは、アウトオブオーダで実行される（ＯＯＯ．ＰＢＸＵ）。
【００６３】
Ｃｏｍｍｉｔステージは命令を完了するステージである。Ｃｏｍｍｉｔステージにおいては、前記リザベーションステーションを利用してインオーダ完了を実現する（ＩＯ．Ｗ）。前記リザベーションステーションは、演算器により実行された命令について、コンプリートしたか否かの情報や実行結果を保存している。Ｃｏｍｍｉｔステージにおいては、前記リザベーションステーションを参照して、命令をインオーダ完了させる。
このように、演算処理装置１の命令パイプラインは、アウトオブオーダ命令発行／インオーダ完了のアウトオブオーダ処理を実行する構成となっている。
【００６４】
｛ＭＲＦ１０の構成｝
図２に示すように、ＭＲＦ１０は、レジスタファイル１００、ＭＲＦ＿ＲＡ１及びＭＲＦ＿ＲＡ２を備えている。レジスタファイル１００は、前述した図１７に示すレジスタファイル１０００と同様な構成のオーバーラップウィンドウ方式のレジスタファイルである。したがって、ここでは、詳しい説明は省略する。
【００６５】
｛制御部２０の構成｝
図１の制御部２０は、図２に示すレジスタ制御部２１０及び命令制御部２２０を備えている。
レジスタ制御部２１０は、ポート割り当て制御部テーブル２１１、ＳＥＴレジスタ２１２、ＣＷＰレジスタ２１３、及びｓｅｔ、ｃｗｐ制御装置２１４を備えている。
ポート割り当て制御部テーブル２１１は、ＭＲＦ＿ＲＡ１に設定される値（後述するポート割り当てステート）が格納されているテーブルである。
【００６６】
本実施形態のＭＲＦ１０は、図１７に示すＭＲＦ４０１０と同様に、論理的にリング状に構成された８個のレジスタウィンドウを備えている。また、  ＭＲＦ＿ＲＡ１(Master Register File Read Address 1)とＭＲＦ＿ＲＡ２(Master Register File Read Address 2)を備えている。また、さらに、５つの読み出しポートｌ０、ｌ１、ｉｏ０、ｉｏ１、ｉｏ２を備えている。
【００６７】
読み出しポートｌ０、ｌ１は、ＭＲＦ＿ＲＡ１で指定されるレジスタウィンドウのローカルレジスタのデータを読み出すためのポートである。読み出しポートｌ０にはマルチプレクサ２３１が設けられ、読み出しポートｌ１にはマルチプレクサ２３２が設けられている。前記マルチプレクサ２３１、２３２には、８個のレジスタウィンドウ（W０〜W7）の各ローカルレジスタ用ウィンドウ（Ｗ0 locals〜W7 locals）のローカルレジスタのデータが入力される。
【００６８】
読み出しポートｉｏ０、ｉｏ１、ｉｏ２は、ＭＲＦ＿ＲＡ１で指定されるレジスタウィンドウのインレジスタまたはアウトレジスタのデータを読み出すためのポートである。読み出しポートｉｏ０にはマルチプレクサ２４１が設けられ、読み出しポートｉｏ１にはマルチプレクサ２４２が設けられている。また、読み出しポートｉｏ２にはマルチプレクサ２４３が設けられている。前記マルチプレクサ２４１〜２４３には、８個のレジスタウィンドウ（W0〜W７）の各インレジスタ／アウトレジスタ用ウィンドウ（W0 ins〜W7 ins、W0 outs〜W7 outs）ののインレジスタ／アウトレジスタのデータが入力される。
【００６９】
ＭＲＦ＿ＲＡ１は、制御部２０から出力される値（後述するポート割り当てステート）を格納するレジスタである。 ＭＲＦ＿ＲＡ１に設定される値は、レジスタ制御部２１０内に設けられたＣＷＰレジスタ２１３を更新する命令（“ウィンドウ切り替え命令”もしくは“レジスタウィンドウ切り替え命令”と呼ぶ）のＩｓｓｕｅステージまたはＣｏｍｍｉｔステージで更新される。演算処理装置１は、このＭＲＦ＿ＲＡ１に設定された値を用いて、ＣＷＰレジスタ２１３の値（カレントウィンドウポインタ値）で指定されるレジスタウィンドウのデータをＭＲＦ１０から読み出す。
【００７０】
ＭＲＦ＿ＲＡ２は、演算部３０内の演算器（不図示）がオペランド毎に読み出すレジスタの番号を指定するレジスタであり、レジスタ制御部２１０によって制御される。ＭＲＦ＿ＲＡ２は、命令パイプラインのＤｉｓｐａｔｃｈステージで値が決定され、次のＥｘｅｃｕｔｅステージで演算部３０が使用するデータ（ＭＲＦ１０から読み出されたレジスタウィンドウのレジスタのデータ）を指示する。
【００７１】
｛ＭＲＦ＿ＲＡ１とＭＲＦ＿ＲＡ２の構成例｝
図３（ａ）は、ＭＲＦ＿ＲＡ１の構成例を示す図である。
図３（ａ）に示すＭＲＦ＿ＲＡ１は、図５に示すポート割り当てステート２１５（５つのポートＩＤ「ｌ０」、「ｌ１」、「ｉｏ０」、「ｉｏ１」、「ｉｏ２」）を格納する領域を備えている。本実施形態のＭＲＦ１０は、Ｗ０〜Ｗ７の８本レジスタウィンドウを備えているため、ポートＩＤｌ０、ｌ１は、それら８本のレジスタウィンドウＷ０〜Ｗ７の中から一つのローカルレジスタ用ウィンドウ（＝８個のローカルレジスタ）を指定するアドレスである。また、ポートＩＤｉｏ０〜ｉｏ２は、上記８本のレジスタウィンドウＷ０〜Ｗ７の中から一つのインレジスタ／アウトレジスタ用ウィンドウ（＝８個のインレジスタ／アウトレジスタ）を指定するアドレスである。したがって、各ポートＩＤｌ０、ｌ１、ｉｏ０、ｉｏ１、ｉｏ２の最小構成は３ビットである。
【００７２】
図３（ｂ）は、ＭＲＦ＿ＲＡ２の構成例を示す図である。
図３（ｂ）に示すＭＲＦ＿ＲＡ２は、ＭＲＦ１０の５つの読み出しポートｌ０、ｌ１、ｉｏ０、ｉｏ１、ｉｏ２の中から１つのポートを選択するためのアドレス（ポート指定ア
ドレス）と、ウィンドウ内のレジスタを特定するためのアドレス（レジスタ指定アドレス）を格納する領域を備えている。ポート指定アドレスは、上記５つの読み出しポートｌ０、ｌ１、ｉｏ０、ｉｏ１、ｉｏ２の中から１つを指定するので、最小３ビット構成となる。また、ＭＲＦ１０が備えるレジスタウィンドウが８個のレジスタから構成される場合、レジスタ指定アドレスは、最小３ビット構成となる。したがって、この場合、ＭＲＦ＿ＲＡ２は全体で最小６ビット構成となる。
【００７３】
ＭＲＦ１０の上記５つの読み出しポートｌ０、ｌ１、ｉｏ０、ｉｏ１、ｉｏ２のそれぞれに設けられたマルチプレクサは、ＭＲＦ＿ＲＡ１から出力される選択信号（前記ポートＩＤ）によってその出力が制御される。図４には、ＣＷＰレジスタ２１３の値（ｃｗｐ）で指定されたレジスタウィンドウｉのインレジスタ／アウトレジスタ（ｉｎ（ｏｕｔ）レジスタ）用ウィンドウ２５１とローカルレジスタ（ｌｏｃａｌレジスタ）用ウィンドウ２５２が示されている。ここで、“ｉ”はＣＷＰレジスタ２１３の値（ｃｗｐ）である。また、グローバルレジスタ（ｇｌｏｂａｌレジスタ）用ウィンドウ２５３も示されている。
【００７４】
レジスタウィンドウＷ０〜Ｗ７のｉｎレジスタ／ｏｕｔレジスタ用ウィンドウ２５１のデータ（８個のローカルレジスタのデータ）は、読み出しポートＩｏ０、ｉｏ１、ｉｏ２に出力される。指定されたレジスタウィンドウのｌｏｃａｌレジスタ用ウィンドウ２５２のデータは、読み出しポートｌ０、ｌ１に出力される。これらの読み出しポートに出力されたウィンドウデータは、それぞれのポートに設けられたマルチプレクサ２４１〜２４３、２３１、２３２により選択出力される。
【００７５】
上記５つのマルチプレクサ２３１、２３２、２４１〜２４３から選択出力されるレジスタウィンドウのウィンドウデータは、マルチプレクサ２６１に入力される。マルチプレクサ２６１には、グローバルレジスタ用ウィンドウ２５３のデータも入力される。マルチプレクサ２６１は、ＭＲＦ＿ＲＡ２から出力される選択信号（前記ポート指定アドレスと前記レジスタ指定アドレス）に従って、上記５つのマルチプレクサ２３１、２３２、２４１〜２４３から選択出力されるウィンドウのデータと前記グローバルレジスタ用ウィンドウ２５３の中から１つのウィンドウのデータを選択し、さらにその選択されたウィンドウのデータに含まれる８個のレジスタのデータの中から１つを選択する。そして、その選択したレジスタのデータを演算部３０に出力する。
【００７６】
ＭＲＦ１０は、さらに、マルチプレクサ２７１を備えている。このマルチプレクサ２７１は、演算部３０から入力されるＭＲＦ１０に対する書き込みデータ（演算結果など）を当該レジスタに選択出力する。このマルチプレクサ２７１は、レジスタ制御部２１０によって制御され、演算部３０が指定するレジスタに前記書き込みデータを出力する。
【００７７】
本実施形態のように、ＭＲＦ１０が備えるレジスタファイル１００を８個のレジスタウィンドウで構成した場合、ＳＡＶＥ命令、ＲＥＳＴＯＲＥ命令などのウィンドウ切り替え命令でＣＷＰレジスタ２１３の値（以後、この値を“ｃｗｐ”と記載する）が変化したときに、物理的には同じレジスタである、切り替わる前のカレントウィンドウのｏｕｔレジスタ用ウィンドウ（outs）と切り替わった後のカレントウィンドウのinレジスタ用ウィンドウ（Ins）を、ＭＲＦ１０の同じ読み出しポートに割り当てる組み合わせの全てをカバーする最小のステート数は２４である。ｃｗｐは“０”〜“７”の８個の値をとるので、“０”〜“７”の値を3回周回すると元のステートに戻る。このため、ｃｗｐが“０”〜“７”を3周回って１セットと考える。したがって、ＳＥＴレジスタ２１２の値（以後、この値を“ｓｅｔ”と記載する）として“０”〜“２”を割り当て、ウィンドウ切り替え命令が実行される毎にこれらの値をサイクリックに変化させる。図５に示すように、上記２４種類のステートは、８値（“０”〜“７”）をとりうるｃｗｐと３値（“０”〜“２”）をとりうるｓｅｔの値の組み合わせで決定される。本実施形態では、図５に示すように、上記２４種類の各ステートに「ポート割り当てステート２１５」を割り当て、これら２４種類のポート割り当てステート２１５を、ｓｅｔとｃｗｐの値の組み合わせに対応付けてポート割り当て制御部テーブル２１１に格納する。ポート割り当てステート２１５は、ＭＲＦ１０の「ｌ０」、「ｌ１」、「ｉｏ０」、「ｉｏ１」、「ｉｏ２」の５つの読み出しポートのＩＤ（ポートＩＤ）から構成される。これらのポートＩＤは、ＭＲＦ＿ＲＡ１の該当する読み出しポートの出力選択信号となっている。
【００７８】
｛ポート割り当て制御部テーブル２１１の構成｝
図５は、前記ポート割り当て制御部テーブル２１１の構成例を示す図である。
図５に示すように、ポート割り当て制御部テーブル２１１は、２４個のエントリを備えており、それらのエントリに上記２４種類のステートに関する情報を、ステートの周回順序に対応させて格納している。ポート割り当て制御部テーブル２１１の各エントリのレコードは、「ｓｅｔ」、「ｃｍｐ」、「ポート割り当てステート２１５」から構成される。ｓｅｔは上記セットの番号（セット番号）を、ｃｗｐはＣＷＰレジスタ２１３の値、すなわち、カレントウィンドウに指定されているレジスタウィンドウの番号（レジスタウィンドウ番号）を示す。ｓｅｔとｃｗｐの組（ｓｅｔ、ｃｗｐ）は、ポート割り当て制御部テーブル２１１のインデックスとなっている。
【００７９】
ポート割り当てステート２１５は、図２に示すＭＲＦ１０の５つの読み出しポートｌ０、ｌ１、ｉｏ０、ｉｏ１、ｉｏ２に対応する５つのポートＩＤから構成される。ポートＩＤｌ０が読み出しポートｌ０に、ポートＩＤｌ１が読み出しポートｌ１に、ポートＩＤｉｏ０は読み出しポートｉｏ０に、ポートＩＤｉｏ１が読み出しポートｉｏ１に、ポートＩＤｉｏ２が読み出しポートｉｏ２に対応している。
【００８０】
前記ポートＩＤｌ０、ｌ１には％ｌが、前記ポートＩＤｉｏ０〜ｉｏ２には％ｉまたは％ｏが設定される。％ｌ、％ｉ及び％ｏは、それぞれ、ｃｗｐで指定されるMRF１０のレジスタウィンドウのローカルレジスタ用ウィンドウ（＝８個のローカルレジスタ）、インレジスタ用ウィンドウ（＝８個のインレジスタ）及びアウトレジスタ用ウィンドウ（＝８個アウトレジスタ）を指定するアドレスである。％ｌは、ＭＲＦ１０が備える８本のレジスタファイルW０〜W７の中のいずれか一つのローカルレジスタ用ウィンドウ（Wk locals）を指定するアドレスである。％ｉは、上記８本のレジスタウィンドウW０〜W７の中のいずれか一つのインレジスタ用ウィンドウ（Wk ins）を指定するアドレスである。また、％ｏは、上記８本のレジスタウィンドウW０〜W７の中のいずれか一つのアウトレジスタ用ウィンドウ（Wk outs）を指定するアドレスである。各ステートにおいて、ポート割り当てステート２１５における５つのフィールドの内、２つは空欄となっている。この空欄は、“アドレス指定無し”を表す。％ｌは、ＭＲＦ１０のローカルレジスタの読み出しポートｌ０、ｌ１のそれぞれに設けられたマルチプレクサ２３１、２３２に選択信号として入力する。％ｉと％ｏは、ＭＲＦ１０のインレジスタ／アウトレジスタの読み出しポートｉｏ０、ｉｏ１、ｉｏ２のそれぞれに設けられたマルチプレクサ２４１〜２４３に選択信号として入力する。
【００８１】
したがって、例えば、（ｓｅｔ、ｃｗｐ）＝（０、２）のポート割り当てステート２１５がＭＲＦ＿ＲＡ１に設定されることにより、ＭＲＦ１０の読み出しポートｌ０、ｉｏ２、ｉｏ０から、それぞれ、％ｌ、％ｉ、％ｏで指定されるローカルレジスタ用ウィンドウWk locals、インレジスタ用ウィンドウWk ins、アウトレジスタ用ウィンドウWk outsが出力される。この状態のとき、ウィンドウ切り替え命令がデコードされてｃｗｐが“１”だけインクリメントされ、（ｓｅｔ、ｃｗｐ）＝（０、３）に遷移すると、ＭＲＦ１０の読み出しポートｌ１、ｉｏ０、ｉｏ１から、それぞれ、％ｌ、％ｉ、％ｏで指定されるローカルレジスタ用ウィンドウWk locals、インレジスタ用ウィンドウWk ins、アウトレジスタ用ウィンドウWk outsが出力される。この場合、ＭＲＦ１０の読み出しポートｌ０、ｉｏ２からは、それぞれ、（ｓｅｔ、ｃｗｐ）＝（０、２）のポート割り当てステート２１５で指定されたローカルレジスタ用ウィンドウWk Locals、インレジスタ用ウィンドウWk Insが出力される。これにより、ｃｗｐ＝２で指定されるレジスタウィンドウＷ２を使用する前記ウィンドウ切り替え命令の先行命令と、ｃｗｐ＝３で指定されるレジスタウィンドウＷ３を使用するウィンドウ切り替え命令の後続命令のアウトオブオーダ実行が可能となる。その後、前記ウィンドウ切り替え命令のコミットが開始されると、（ｓｅｔ、ｃｗｐ）＝（０、３）のポート割り当てステート２１５のみが有効となり、ＭＲＦ１０の読み出しポートｌ０、ｉｏ２は閉じられる。これにより、前記ウィンドウ切り替え命令の先行命令の実行が禁止される。これは、上述したように、本実施形態の命令パイプラインはインオーダ完了となっているためである。
【００８２】
本実施形態では、ＭＲＦ１０にローカルレジスタの読み出しポートを２つ設け、レジスタウィンドウの切り替えが発生する毎に、これら２つの読み出しポートｌ０、ｌ１から交互にカレントウィンドウのローカルレジスタを読み出す。また、ＭＲＦ１０においては、インレジスタ／アウトレジスタの読み出しポートを３つ設ける。この場合、切り替わる前のカレントウィンドウのアウトレジスタと切り替わった後のカレントウィンドウのインレジスタは物理的に同じレジスタであるので、これらのレジスタは同じ読み出しポートから読み出すようにして、ウィンドウ切り替え命令が実行される毎に、インレジスタの読み出しポートを、ｉｏ０→ｉｏ１→ｉｏ２→ｉｏ０→ｉｏ１とサイクリックに切り替える。本実施形態では、図５に示すような形式で、ポート割り当て制御部テーブル２１１の２４個のエントリにポート割り当てステート２１５を格納することで、このようなＭＲＦ１０の前記５つの読み出しポートからのウィンドウデータの読み出し制御を可能にしている
ｓｅｔ、ｃｗｐ制御装置２１４は、ＳＥＴレジスタ２１２とＣＷＰレジスタ２１３の値設定を制御する。レジスタ制御部２１０には、命令制御部２２０からウィンドウ切り替え情報が入力される。この情報は、例えば、デコード対象命令がＳＡＶＥ命令であるか、または、ＲＥＳＴＯＲＥ命令であるかを示す情報である。ｓｅｔ、ｃｗｐ制御装置２１４は、デコード対象命令がＳＡＶＥ命令であれば、ｃｗｐを“１”だけインクリメントする。このインクリメントによりｃｗｐが“８”（レジスタウィンドウ数）になれば、ｃｗｐを“０”にリセットし、ｓｅｔを“１”だけインクリメントする。このインクリメントによりｓｅｔが“３”になれば、ｓｅｔを“０”にリセットする。
【００８３】
｛ｓｅｔ、ｃｗｐ制御装置２１４の処理アルゴリズム｝
図７と図８に、それぞれ、デコード対象命令がＳＡＶＥ命令、ＲＥＳＴＯＲＥ命令であった場合のｓｅｔ、ｃｗｐ制御装置２１４の処理フローを示す。
まず、図７のフローチャートを説明する。尚、図７及び図8に示す演算子％は、ａ％ｂという式で使用された場合、ａをｂで除算した場合の剰余を求めることを意味するものである。
【００８４】
ｓｅｔ、ｃｗｐ制御装置２１４は、命令制御部２２０から入力されたウィンドウ切り替え情報を調べ、デコード対象命令がＳＡＶＥ命令であるか否か判断する（Ｓ１１）。そして、ＳＡＶＥ命令でなければ処理を終了する。一方、ステップＳ１１においてＳＡＶＥ命令であると判断すると、ｃｗｐを“１”だけインクリメントし、続いて、そのインクリメント結果をレジスタウィンドウ数（本実施形態の場合、“８”）で除算し、その剰余を求める。そして、その剰余をｃｗｐに設定し、ｃｗｐを更新する（Ｓ１２）。
【００８５】
次に、ｃｗｐが“０”であるか判断し（Ｓ１３）、“０”でなければ処理を終了する。一方、ステップＳ１３でｃｗｐが“０”あると判断すると、ｓｅｔを“１”だけインクリメントし、次に、そのインクリメント結果を“３”で除算する。そして、その剰余をｓｅｔに設定して、ｓｅｔを更新し（Ｓ１４）、処理を終了する。
【００８６】
次に、図８のフローチャートを説明する。
ｓｅｔ、ｃｗｐ制御装置２１４は、命令制御部２２０から入力されたウィンドウ切り替え情報を調べ、デコード対象命令がＲＥＳＴＯＲＥ命令であるか否か判断する（Ｓ２１）。そして、ＲＥＳＴＯＲＥ命令でなければ処理を終了する。一方、ステップＳ２１においてそのデクリメント結果をレジスタウィンドウ数（本実施形態の場合、“８”）で除算し、その剰余を求める。そして、その剰余をｃｗｐに設定し、ｃｗｐを更新する（Ｓ１２）。
【００８７】
次に、ｃｗｐが“７”であるか判断し（Ｓ１３）、“７”でなければ処理を終了する。一方、ステップＳ１３でｃｗｐが“７”あると判断すると、ｓｅｔを“１”だけデクリメントし、次に、そのデクリメント結果を“３”で除算する。そして、その剰余をｓｅｔに設定して、ｓｅｔを更新し（Ｓ１４）、処理を終了する。
【００８８】
ｓｅｔとｃｗｐの初期値は“０”である。上記図７と図８の処理により、ｃｗｐの値は、ＳＡＶＥ命令がデコードされる毎に“１”インクリメントされ、ＲＥＳＴＯＲＥ命令がデコードされる毎に“１”デクリメントされる。ｃｗｐの値は、ＳＡＶＥ命令のデコードにより“８”になると“０”にリセットされ、ＲＥＳＴＯＲＥ命令のデコードにより“−１”になると“７”にセットされる。したがって、ｃｗｐの値は、“０”〜“７”の範囲を巡回する。また、ｓｅｔの値は、ＳＡＶＥ命令のデコードによりｃｗｐの値が“８”になると、“１”インクリメントされる。また、ｓｅｔの値は、ＳＡＶＥ命令のデコードにより“３”になると“０”にリセットされる。また、さらに、ｓｅｔの値は、ＲＥＳＴＯＲＥ命令のデコードによりｃｗｐの値が“−１”になると、“１”デクリメントされる。このようにして、ｓｅｔの値は、ＳＡＶＥ命令とＲＥＳＴＯＲＥ命令のデコードに応じて、“０”〜“２”の範囲を巡回する。ここで、再び、ポート割り当て制御部テーブル２１１の説明に戻る。
【００８９】
ポート割り当て制御部テーブル２１１は、図４のＳＥＴレジスタ２１２の値（ｓｅｔ）とＣＷＰレジスタ２１３の値（ｃｗｐ）が入力されると、それら２つの値の組み合わせ（ｓｅｔ、ｃｗｐ）に対応するエントリに格納されているポート割り当てステート２１５（ｌ０、ｌ１、ｉｏ０、ｉｏ１、ｉｏ２）を、図４のＭＲＦ＿ＲＡ１に出力する（図６参照）。
【００９０】
｛命令制御部の構成｝
次に、命令制御部２２０の構成を説明する。
命令制御部２２０は、ウィンドウ切り替え命令後続命令の実行タイミング制御機能２２１（以後、実行タイミング制御機能２２１と記載）、リネームレジスタ開放制御機能２２２及びＭＲＦ＿ＲＡ２の制御機能２２３を備えている。
【００９１】
実行タイミング制御機能２２１は、ウィンドウ切り替え命令の後続命令のデコードを、ＭＲＦ＿ＲＡ１が更新され、かつ、ＭＲＦ１０からレジスタファイルの読み出しが可能となるまでストールさせる制御機能である。命令制御部２２０は、この制御機能を用いて、演算部３０が上記ストールを実施するように制御する。この制御の詳細は後述する。
【００９２】
リネームレジスタ開放制御機能２２２は、命令の完了によってリネームレジスタ（ＲＯＢ３１）の資源を解放し、新しくデコードされる命令でその開放された資源を使用可能とさせる制御機能である。命令制御部２２０は、この制御機能を用いて、演算部３０が上記リネームレジスタの資源開放を実行するように制御する。
【００９３】
ＭＲＦ＿ＲＡ２の制御機能２２３は、命令の中に含まれるオペランドレジスタの番号を
解釈する機能である。命令制御部２２０は、レジスタ制御部２１０を介して、ＭＲＦ＿ＲＡ２が前記オペランドレジスタ番号で指定されるレジスタのデータを前記読み出しポート２６１から選択出力させるように制御する。
【００９４】
演算部３０は、上述した図３の命令パイプライン機構を備える。また、演算部３０は、レジスタリネーミングやアウトオブオーダ実行などを支援するハードウェア機構であるリオーダバッファ（ＲＯＢ）３１も備えている。リオーダバッファ３１は、レジスタの最新値や更新タグをインオーダで保持し、アウトオブオーダ命令発行、インオーダ完了及びレジスタリネーミングなどを実行するために利用される。リオーダバッファ３１は、該レジスタネーミングを行うためのリネームレジスタを備えている。また、リオーダバッファ３１は、上述したようにＵｐｄａｔｅ  Ｂｕｆｆｅｒステージにおいて演算結果を一旦保持しておく機能を備えている。
【００９５】
［動作］
｛第１実施形態｝
ＭＲＦ１０から演算部３０へのレジスタデータの転送に複数サイクルを要する場合には、新しく切り替わったレジスタウィンドウのレジスタデータを読み出せないタイミングが発生する。このような場合の例を、図９を参照しながら説明する。
【００９６】
図９は、ＳＡＶＥ命令前後の実行パイプラインの動作を示す図である。
図９において、ＩＯ．ＦＤは、インオーダで実行されるＦｅｔｃｈステージ（Ｆステージ）とＩｓｓｕｅステージ（Ｄステージ）を示す。また、ＯＯＯ．ＰＢＸＵは、アウトオブオーダで実行されるＤｉｓｐａｔｃｈステージ（Ｐステージ）、Ｏｐｅｒａｎｄ  Ｒｅａｄステージ（Ｂ ステージ）、Ｅｘｅｃｕｔｅステージ（Xステージ）及びＵｐｄａｔｅ
Ｂｕｆｆｅｒステージ（Uステージ）を示す。また、ＩＯ．Ｗは、インオーダ完了するＣｏｍｍｉｔステージ（Wステージ）を示す（以上、図４参照）。
【００９７】
図９は、ＣＷＰレジスタ２１３の値が“３”である命令（以下、ｃｗｐ＝３の命令と記載）の後に、ＳＡＶＥ命令を実行し、次にＣＷＰレジスタ２１３の値が“４”である命令（以下、ｃｗｐ＝４の命令と記載）を実行するパイプライン動作を示している。
【００９８】
演算部３０は、上記３個の命令列を命令パイプラインで実行する際、ＩＯ．ＦＤまでは、ＣＷＰ＝３の命令、ＳＡＶＥ命令、ｃｗｐ＝４の命令の順にインオーダで実行する。このとき、演算部３０がＤステージでＳＡＶＥ命令をデコードすると（図９のｂの期間でＩｓｓｕｅステージを実行すると）、ｓｅｔ、ｃｗｐ制御装置２１４によりＣＷＰレジスタ２１３の値がインクリメントされ、ＣＷＰレジスタ２１３の値は“４”となる。これにより、ポート割り当て制御部テーブル２１１からＭＲＦ＿ＲＡ１に、ｃｗｐ＝４に対応する新しいポート割り当てステート２１５が送られる。ＭＲＦ＿ＲＡ１に該新しいポート割り当てステート２１５が設定されると、ＭＲＦ１０の前記５つの読み出しポートから、ＣＷＰレジスタ２１３で指定されるレジスタウィンドウのデータ（ｃｗｐ＝４のレジスタウィンドウデータ）が読み出される。このとき、演算部３０がｃｗｐ＝４のレジスタウィンドウデータを読み出し可能となるまで（図９のｂの期間が終了するまで）、演算部３０がＳＡＶＥ命令の後続命令（ｃｗｐ＝４の命令）のデコードを一定サイクル分ストールさせ、その実行が開始されないように制御する。尚、図９の動作の詳細は後述する。
【００９９】
図１０は、ウィンドウ切り替え命令がデコードされたときにおける、該ウィンドウ切り替え命令の後続命令の実行タイミングの例を示す図である。
サイクル１でウィンドウ切り替え命令が演算部３０でデコード（Ｄ）され、サイクル２で命令制御部２２０からレジスタ制御部２１０にＭＲＦ＿ＲＡ１の変更指示信号が送られる（図１０のａ）。そして、サイクル３、４で、レジスタ制御部２１０によりＭＲＦ＿Ｒ
Ａ１が更新される（図１０のｂ）。この場合、図１０のｂで示す期間は、ＭＲＦ＿ＲＡ１の更新により、ウィンドウ切り替え命令の後続命令の実行に必要なレジスタウィンドウのデータをＭＲＦ＿ＲＡ１から読み出すことができない。演算部３０は、サイクル５（図１０のｃ）以降に、該レジスタウィンドウのデータをＭＲＦ１０から読み出し可能となる。したがって、この場合、ウィンドウ切り替え命令のデコードが実行されたサイクル１の次のサイクル２においては、前記後続命令のデコードをストールさせる。したがって、この場合、前記後続命令の実行は１サイクルだけストールする。
【０１００】
本実施形態では、ＭＲＦ１０から演算部３０へのレジスタのデータの転送に複数サイクルを要する場合、ＭＲＦ１０へのデータ書き込みをトリガーとして、そのデータを演算部３０が読み出せないタイミングが発生する。演算部３０が前記データを読み出せない場合、実行権を割り当てる他の命令がなければ、命令パイプラインにパイプラインバブルが生じる。本実施形態では、このパイプラインバブルをリネームレジスタ（ＲＯＢ３１）の開放を制御することで抑制する。
【０１０１】
｛第２実施形態｝
図１１は、真のデータ依存関係にある命令を、命令パイプラインにパイプラインバブルが発生しないように、リネームレジスタ（ＲＯＢ３１）の開放を制御する手法を示す図である。図１１おいて、％１はレジスタを示す。
【０１０２】
演算部３０が、図１１に示す命令A〜Fの命令列を実行するものとする。命令A〜Fは、真のデータ依存関係がある。すなわち、命令Aはレジスタ％１のデータの書き込み命令であり、レジスタ％１を更新する。命令Aの後続命令である命令B〜Fは、いずれもレジスタ％１のデータの読み出し命令であり、レジスタ％１のデータを使用する。
【０１０３】
図１１は、ＭＲＦ１０のレジスタファイル１００からのデータの読み出しが１サイクルでできる実装例である。命令は、図４に示す順序でパイプライン処理され、Ｐステージでレジスタアドレスの転送、Ｂステージでレジスタのデータの読み出し、Ｘステージで演算（命令の実行）、Ｕステージで演算結果（命令の実行結果）のリネームレジスタ（ＲＯＢ３１）への書き込み、ＷステージでＭＲＦ１０へのデータ（前記演算結果）書き込みを行う。
【０１０４】
前記命令列の実行において、命令Ａの実行結果はサイクル４においてリネームレジスタ（ＲＯＢ３１）に格納され、サイクル５においてＭＲＦ１０に格納される。このため、命令Ａの実行結果はサイクル６以降において、ＭＲＦ１０から読み出すことができる。したがって、命令Ａの後続命令Ｂは、先行命令Ａの実行結果（ａ）をサイクル３においてバイパスして使用し、後続命令Ｃはサイクル４において演算結果レジスタ（ｂ）から読み出して使用する。また、後続命令Ｄは、先行命令Ａの実行結果をサイクル５において前記リネームレジスタ（ｃ）から読み出して使用し、後続命令Ｅ、Ｆは、先行命令Ａの実行結果を、それぞれ、サイクル６、７においてＭＲＦ１０（ｄ）から読み出して使用する。
【０１０５】
｛第３実施形態｝
次に、レジスタファイル（ＭＲＦ１０）からのデータの読み出しに複数サイクルを要する場合の制御手法を図１２に示す。
【０１０６】
本発明では、ＭＲＦ１０にデータを書き込んだ後、そのデータを一定時間にわたってＭＲＦ１０から読み出すことができない場合、その期間中においては、ＭＲＦ１０ではなくリネームレジスタ（ＲＯＢ３１）から読み出すように制御する。図１２は、ＭＲＦ１０からのデータ読み出しに２サイクルを要する場合の例を示す。
【０１０７】
図１２に示すように、本実施形態の場合、命令パイプラインにおいてＷステージを１サイクルではなく２サイクルにし（Ｗ１、Ｗ２）、この期間中は、リネームレジスタ（ＲＯＢ３１）に命令Ａの実行結果を保持する。この結果、命令Ａで更新した結果は、サイクル７以降においてＭＲＦ１０から読み出すことができる。この場合、命令Ａの後続命令Ｂ、Ｃ、Ｄにおける命令Ａの実行結果の読み出しは、図１１の場合と同様にして制御される（ａ、ｂ）。しかし、後続命令Ｅについては、データを、サイクル６においてＭＲＦ１０からではなく前記リネームレジスタ（ｃ）から読み出すように制御する。また、命令Ｆについては、サイクル７において、先行命令Ａの実行結果をＭＲＦ１０（ｄ）から読み出すように制御する。
【０１０８】
このように、本実施形態では、ＭＲＦ１０からデータを読み出せる開始タイミングは遅れるが、それに伴う問題を、リネームレジスタ（ＲＯＢ３１）の開放を遅らせることで回避させる。
【０１０９】
｛第４実施形態｝
本実施形態は、本発明を、８本のレジスタウィンドウを備えるＭＲＦ１０について、ポート割り当て制御部テーブル２１１を用いて、ウィンドウ切り替え前後でのＭＲＦ１０からのデータ読み出し制御に適用したものである。
【０１１０】
本実施形態におけるＭＲＦ１０の読み出しポートからのレジスタ読み出し手法を、図５と図１３と図１４を参照しながら説明する。
ＭＲＦ１０は、ローカルレジスタ、インレジスタ、アウトレジスタ及びグローバルレジスタを備えるが（図２参照）、グローバルレジスタは全てのレジスタウィンドウで共通であり、ウィンドウ切り替えが発生しても影響が出ないため、以後の説明では省略する。
【０１１１】
本実施形態のＭＲＦ１０は、ローカルレジスタのデータを読み出すための２つのローカルレジスタポート（ｌ０、ｌ１）と、インレジスタ／アウトレジスタのデータを読み出すための３つのインレジスタ／アウトレジスタ・ポート（ｉｏ０、ｉｏ１、ｉｏ２）を備えている。
【０１１２】
１つのＣＷＰ(Current Window Pointer)に対して、１つのローカルレジスタポートと２つのインレジスタ／アウトレジスタ・ポートを使用する。このため、残りの１つのローカルレジスタポートと１つのインレジスタ／アウトレジスタ・ポートは使用されない。CWPの値が切り替わると、その新たなＣＷＰの値が指定するレジスタウィンドウのローカルレジスタとアウトレジスタ（インレジスタ）の読み出しのため、それぞれのレジスタに使用していないＭＲＦ１０の読み出しポートを割り当てるようにする。
【０１１３】
図５に示すように、２４ステートで１周期となるため、この周期で、ＭＲＦ＿ＲＡ１を制御する。以降の説明では、ＣＷＰで図２のＣＷＰレジスタ２１３を示し、ｃｗｐでＣＷＰレジスタ２１３の値を示す。
【０１１４】
今、図１２の表Ａに示すように、（ｓｅｔ、ｃｗｐ）＝（０、２）の状態とする。この場合、レジスタ制御部２１０は、ローカルレジスタはＭＲＦ１０のｌ０ポートから、インレジスタはｉｏ２ポートから、アウトレジスタはｉｏ０ポートから読み出されるように制御する。また、ｌ１ポート、ｉｏ１ポートからのレジスタ読み出しは行われないように制御する。
【０１１５】
この状態で、ＳＡＶＥ命令が実行された場合（図１４の（１））、ｃｗｐが“１”インクリメントされ、（ｓｅｔ、ｃｗｐ）＝（０、３）と遷移する（図１３の表Ｂ参照）。このＳＡＶＥ命令のデコード（Ｄ）のタイミングでＭＲＦ＿ＲＡ１の内容が変更され、ＳＡ
ＶＥ命令のデコード（Ｄ）終了からコミット（Ｗ）開始までは、ｃｗｐ＝２でのローカルレジスタはＭＲＦ１０のｌ０ポートから、インレジスタのデータは読み出しポートｉｏ２から、アウトレジスタのデータは読み出しポートｉｏ１から読み出される。また、ｃｗｐ＝３でのローカルレジスタのデータは読み出しポートｌ１から、インレジスタのデータは読み出しポートｉｏ０から、アウトレジスタのデータは読み出しポートｉｏ１から読み出される（以上、図１３の表Ｂ参照）。
【０１１６】
さらに、ＳＡＶＥ命令がコミット（Ｗ）すると、ＭＲＦ１０の読み出しポートｌ０、読み出しポートｉｏ２からのレジスタ読み出しは行われない。これは、コミットを図４で示すようにインオーダで実施するため、プログラムでＳＡＶＥ命令より前にあるｃｗｐ＝２の命令が、これ以降、レジスタ参照を行わないためである。本発明は、これに限定されず、状況に応じて、引き続き読み出すようにすることもできる。
【０１１７】
その後、ＲＥＳＴＯＲＥ命令が実行されると、ｃｗｐが“１”デクリメントされ、（ｓｅｔ、ｃｗｐ）＝（０、２）の状態に遷移する。このＲＥＳＴＯＲＥ命令のデコード（Ｄ）のタイミングでＭＲＦ＿ＲＡ１の内容が変更され、このＲＥＳＴＯＲＥ命令が完了するまでの間（図１３の表Ｄ）、ｃｗｐ＝３でのローカルレジスタのデータはＭＲＦ１０の読み出しポートｌ１から、インレジスタのデータはＭＲＦ１０の読み出しポートＩＯ０から、アウトレジスタのデータはＭＲＦ１０の読み出しポートｉｏ１から読み出される。また、ｃｗｐ＝２でのローカルレジスタのデータはＭＲＦ１０の読み出しポートｌ０から、インレジスタのデータはＭＲＦ１０の読み出しポートｉｏ２から、アウトレジスタのデータはＭＲＦ１０の読み出しポートｉｏ０から読み出される。
【０１１８】
以上のようにして、レジスタ制御部２１０によりＭＲＦ＿ＲＡ１を制御し、プログラムでウィンドウ切り替え命令を挟んで存在する複数命令のアウトオブオーダ実行を可能にする（図９参照）。尚、図９において、ＯＯＯ．ＰＢＸＵは１本の線で示されているが、“ｃｗｐ＝３の命令”と“ｃｗｐ＝４の命令”は複数の命令を表しており、実行開始タイミングも命令数と同数存在する。図９の区間ｃでは、ｃｗｐ＝３のＯＯＯ．ＰＢＸＵとｃｗｐ＝４のＯＯＯ．ＰＢＸＵが重なっており、ｃｗｐ＝４の命令がｃｗｐ＝３の命令よりも早いタイミングで実行開始（アウトオブオーダ実行）が起こりうることを示している。
【実施例】
【０１１９】
図１５は、図２の実施形態を適用した演算処理装置の構成例を示す図である。図１５において、図２の構成要素と同一の構成要素には同じ符号並びに名称を付与している。
図１５に示す演算処理装置３００は、レジスタリネーミングにリオーダバッファ方式を採用している。このレジスタリネーミングはＲＯＢ（リオーダバッファ）３１を利用して行われる。演算処理装置３００の固定小数点演算のパイプラインとアドレス演算のパイプラインは、共に、プライオリティ取得（Ｐ−ｓｔａｇｅ）、レジスタ読み出し（Ｂ−ｓｔａｇｅ）、演算（Ｘ−ｓｔａｇｅ）の３ステージで処理されるように構成されている。
【０１２０】
固定小数点演算のパイプラインは２本ある。一方のパイプラインは、ＡＬＵ(Arithmetic Logic Unit)、ＳＨＩＦＴ演算器（ＳＦＴ）、乗算器（ＭＰＹ）、除算器（ＤＶＤ）、ＶＩＳ(Virtual Instruction set)演算器を備え、もう一方のパイプラインは、ＡＬＵとＳＨＩＦＴ演算器を備える。また、アドレス演算のパイプラインは、固定小数点のパイプラインとは別に２本ある。
【０１２１】
ＭＲＦ１０は、前述したように、８本のレジスタウィンドウを備えている。プログラムは、カレントウィンドウ（前記ｃｗｐで指定されるレジスタウィンドウ）に属するレジスタ上で作業を行い、ウィンドウ切り替えは、主に、サブルーチンの呼び出し、戻りのときに、ウィンドウ切り替え命令で行われる。カレントウィンドウのデータを、ＭＲＦ１０か
ら予め選択しておき、演算を実行する際には、ソースデータ（ソースオペランド）を１サイクルで演算器に供給することを可能にしている。さらに、ウィンドウ切り替え命令のデコードを契機に、切り替え先のウィンドウ（レジスタウィンドウ）のデータも、ＭＲＦ１０から予め選択するような制御を行っており、サブルーチン呼び出しの場合でも、命令が滞ることはない。
【０１２２】
上記演算処理装置３００の構成を、より詳細に説明する。
ＭＲＦ３０１は、図２に詳細に示された８本のレジスタウィンドウ（８−Ｗｉｎｄｏｗ）をブロックで示したものである。また、マルチプレクサ３０３は、図２の５個のマルチプレクサ２３１、２３２、２４１〜２４３を統合して示したものであり、ＭＲＦ＿ＲＡ１によって制御される。ＲＯＢ（リオーダバッファ）３１は、リネームレジスタを備え、アウトオブオーダで実行された演算結果を、インオーダでコミットされるまで保持する。ＲＯＢ３１の領域（エントリ）は、デコード時において確保され、コミット時に開放される。該エントリには、例えば、命令が書き込むレジスタのアドレスと、該レジスタの値の組が格納される。
【０１２３】
図１５に示す演算処理装置３００は、ＭＲＦ＿ＲＡ２によって制御されるマルチプレクサ２６１の後段に４個のマルチプレクサ３１１〜３１４を備えている。これらのマルチプレクサ３１１〜３１４には、マルチプレクサ２６１の出力、１次データキャッシュ（不図示）のデータを保持するレジスタ３２０の出力及び演算器の演算結果を保持するレジスタ３６１、３６２の出力が入力する。前記マルチプレクサ３１１〜３１４は、命令制御部２２０から入力される制御信号に従って、上記複数の入力データの中から一つを選択し、それを、それぞれの後段に設けられたレジスタ３２１〜３２４に出力する。すなわち、マルチプレクサ３１１の出力はレジスタ３２１に、マルチプレクサ３１２の出力はレジスタ３２２に、マルチプレクサ３１３の出力はレジスタ３２３に、マルチプレクサ３１４の出力はレジスタ３２４に保持される。
【０１２４】
上記レジスタ３２１に保持されたデータはマルチプレクサ３４１に出力され、上記レジスタ３２２に保持されたデータはマルチプレクサ３４２に出力される。また、上記レジスタ３２３に保持されたデータはマルチプレクサ３４３に出力され、上記レジスタ３２４に保持されたデータはマルチプレクサ３４４に出力される。上記マルチプレクサ３４１〜３４４には、前記１次データキャッシュのデータもレジスタ３２０から入力する。上記レジスタ３４１、３４２には、さらに、レジスタ３６１、３６２に保持されている演算結果も入力する。
【０１２５】
前記マルチプレクサ３４１は、前記３つの入力データの中から１つを選択し、それをＡＬＵ／ＳＦＴ／ＶＩＳ演算器３３１、乗算器（ＭＰＹ）３３２または除算器（ＤＶＤ）３３３にオペランドデータとして出力する。前記マルチプレクサ３４２は、前記３つの入力データの中から１つを選択し、それをＡＬＵ／ＳＦＴ演算器３３４にオペランドデータとして出力する。前記マルチプレクサ３４３は、前記２つの入力データのいずれか一方を選択し、それをアドレス生成器（AGEN）３３５に出力する。前記マルチプレクサ３４４は、前記２つの入力データのいずれか一方を選択し、それをアドレス生成器（AGEN）３３６に出力する。
【０１２６】
前記ＡＬＵ／ＳＦＴ／ＶＩＳ演算器３３１、前記乗算器３３２及び前記除算器３３３は、演算結果をマルチプレクサ３５１に出力する。前記ＡＬＵ／ＳＦＴ演算器３３４は、演算結果をマルチプレクサ３５２に出力する。前記アドレス生成器３３５は、演算結果（アドレス）をマルチプレクサ３５３に出力する。前記アドレス生成器３３６は、演算結果（アドレス）をマルチプレクサ３５４に出力する。
【０１２７】
前記マルチプレクサ３５１は、前記ＡＬＵ／ＳＦＴ／ＶＩＳ演算器３３１、前記乗算器３３２及び前記除算器３３３の演算結果を入力し、それらの演算結果の中から一つを選択し、その選択した演算結果を前記レジスタ３６１に出力する。前記マルチプレクサ３５２は、前記ＡＬＵ／ＳＦＴ演算器３３２の演算結果を入力し、それを前記レジスタ３６２に出力する。前記マルチプレクサ３５３は、前記アドレス生成器３３５の演算結果を入力し、それをレジスタ３６３に出力する。前記マルチプレクサ３５４は、前記アドレス生成器３３６の演算結果を入力し、それをレジスタ３６４に出力する。
【０１２８】
前記レジスタ３６１は、前記マルチプレクサ３５１から入力した演算結果を、前記ＲＯＢ３１、前記マルチプレクサ３１１〜３１４及び前記マルチプレクサ３４１、３４２に出力する。前記レジスタ３６２は、前記マルチプレクサ３５２から入力した演算結果を、前記レジスタ３６１と同様に、前記ＲＯＢ３１、前記マルチプレクサ３１１〜３１４及び前記マルチプレクサ３４１、３４２に出力する。
【０１２９】
前記レジスタ３６３は、前記マルチプレクサ３５３から入力した演算結果を、前記１次データキャッシュにアドレス（Ａｄｄｒｅｓｓ）として出力する。前記レジスタ３６４は、前記マルチプレクサ３５４から入力した演算結果を、前記１次データキャッシュにアドレス（Ａｄｄｒｅｓｓ）として出力する。
【０１３０】
前記マルチプレクサ３４１、３４２の選択出力データは、マルチプレクサ３７１に出力される。該マルチプレクサ３７１は、その選択出力データをレジスタ３８１に出力する。レジスタ３８１は、前記選択出力データを保持し、それを前記１次データキャッシュにデータ（Ｄａｔａ）として出力する。
【０１３１】
ところで、前記マルチプレクサ３１１、３１２、３１３、３１４と演算器３３１〜３３３、演算器３３４、演算器３３５、演算器３３６との間に設けられたレジスタ３２１、３２２、３２３、３２４は、図４に示す前記命令パイプラインのＢステージとＸステージを区切るために設けられている。
【０１３２】
［本発明が適用可能なレジスタファイルの他の構成例］
本発明が適用可能なレジスタファイルは、ＭＲＦ１０のようなオーバーラップウィンドウ方式のレジスタファイルに限定されない。例えば、図１６に示すようなフラット構成の巨大なレジスタファイルにも適用できる。
【０１３３】
図１６に示すレジスタファイル４００は、（ｍ＋１）個のウィンドウ０〜ｍが連続して配置された構成となっている。この場合、ｍは所定値以上の３の倍数である。レジスタファイル４００を、３個のレジスタ毎に分割し、各分割領域をウィンドウ（レジスタウィンドウ）とする。すなわち、レジスタ０〜２をウィンドウ０とし、レジスタ３〜５をウィンドウ１とする。同様にして、ウィンドウ２〜ｎを設定する。ここで、ウィンドウｎは、レジスタｍ−２〜ｍから構成される。
【０１３４】
このように、フラットな構成のレジスタファイル４００を複数の連続するウィンドウに分割することにより、上記実施形態の演算処理装置１において、レジスタファイル４００をＭＲＦ１０の代替手段として利用することができる。
【０１３５】
以上、述べたように本実施形態の演算処理装置１は、従来の前記演算処理装置３０００や前記情報処理装置４０００のようにＭＲＦ（前記演算処理装置３０００の場合）やＣＲＢとＣＷＲ（前記情報処理装置４０００の場合）を設けることなく、ＭＲＦ１０内のオーバーラップウィンドウ方式のレジスタファイル１００から演算部３０に高速にオペランドデータを供給できる。また、本実施形態は、この高速なレジスタファイル１００からのデ
ータ読み出しを、ＭＲＦ１０内部にＭＲＦ＿ＲＡ１とＭＲＦ＿ＲＡ２と読み出しポートｉｏ０〜ｉｏ２、ｌ０、ｌ１を設け、ＭＲＦ１０外部に、ＭＲＦ１０からレジスタのデータを読み出すための制御回路（レジスタ制御部２１０と命令制御部２２０）を設けることにより実現している。
【０１３６】
前記レジスタ制御部２１０は、ポート割り当て制御部テーブル２１１、ＳＥＴレジスタ２１２、ＣＷＰレジスタ２１３及びｓｅｔ、ｃｗｐ制御装置２１４から構成されるが、ＣＷＰレジスタ２１３は従来の前記演算処理装置３０００や前記情報処理装置４０００（以下、まとめて、従来の演算処理装置と記載）も備えていたもの（ＣＷＰ）であり、ＭＲＦ＿ＲＡ１、ＭＲＦ＿ＲＡ２、ポート割り当て制御部テーブル２１１及びＳＥＴレジスタ２１２は、前記従来の演算処理装置が備えている記憶手段（ＷＲＦまたはＣＷＲとＣＲＢ）に比べ、より小規模な回路で構築できる。
【０１３７】
また、ｓｅｔ、ｃｗｐ制御装置２１４は、組み合わせ回路で実現でき、回路規模も小さくできる。また、命令制御部２２０が備えるウィンドウ切り替え命令後続命令の実行タイミング制御機能２２１、リネームレジスタ開放制御機能２２２、ＭＲＦ＿ＲＡ２の制御機能２２３も小規模な組み合わせ回路で実現できる。また、ＭＲＦ１０に設ける読み出しポートも５本（ｉｏ０〜ｉｏ２、ｌ０、ｌ１）と小数である。したがって、装置全体で考えた場合、本実施形態の演算処理装置１は、前記従来の演算処理装置よりも回路規模を小さくできる。
【０１３８】
また、本実施形態の演算処理装置１は、前記従来の演算処理装置よりも回路規模が小さくなり、ＣＲＢとＣＷＲ間のレジスタウィンドウのデータ転送に要する消費電力も不要となるため、消費電力も前記従来の演算処理装置よりも低い。したがって、本実施形態の演算処理装置１は、前記従来の演算処理装置と同等の機能（ウィンドウ切り替え命令の後続命令のアウトオブオーダ実行機能など）を備えながら、回路規模や消費電力の点で優れている。また、本実施形態は、前記従来の演算処理装置よりも、ハードウェアコストが低い。
【０１３９】
尚、本発明は、上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々に変形して実施することができる。
したがって、本発明が適用可能なレジスタファイルは上記したレジスタファイルに限定されるものではない。例えば、グローバルレジスタ用のウィンドウを複数本備えるオーバーラップウィンドウ方式のレジスタファイルにも本発明を適用できる。また、ウィンドウ切り替え命令が実行する毎に、カレントウィンドウポインタ（CWP）が指定するカレントウィンドウのアドレスがシリアルではなくランダムに更新される構成のレジスタファイルにも、本発明は適用可能である。
【０１４０】
（付記１）
レジスタウィンドウを複数備えるレジスタファイルと、
前記レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段と、
前記レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持するカレントウィンドウポインタ手段と、
前記カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、前記カレントウィンドウポインタ手段が保持する前記アドレス情報を更新し、前記ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、前記演算手段が、前記更新前のアドレス情報が指定する第１のレジスタウィンドウのデータと前記更新後のアドレス情報が指定する第２のレジスタウィンドウのデータを、
前記レジスタファイルから読み出しできるように制御する制御手段と、
を備えたことを特徴とする演算処理装置。
（付記２）
付記１記載の演算処理装置であって、
前記制御手段は、前記ウィンドウ切り替え命令のコミットが開始されたとき、前記演算手段が、前記更新後のアドレス情報が指定する前記第２のレジスタウィンドウのデータのみを、前記レジスタファイルから読み出しできるように制御することを特徴とする。
（付記３）
付記１記載の演算処理装置であって、
前記制御手段は、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記第１のレジスタウィンドウのデータと前記第２のレジスタウィンドウのデータを前記レジスタファイルから読み出すウィンドウデータ読み出し手段と、
前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、該ウィンドウデータ読み出し手段によって読み出された前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータを選択して出力するレジスタデータ選択出力手段と、
を備えることを特徴とする。
（付記４）
付記３記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、
前記ウィンドウ切り替え命令のコミットが開始されると、前記第２のジスタウィンドウに含まれるレジスタのデータのみを前記レジスタファイルから読み出すことを特徴とする。
（付記５）
付記３記載の演算処理装置であって、
前記レジスタファイルは、前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを出力する複数の読み出しポートを備え、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記前記第1のレジスタウィンドウのデータと前記第2のレジスタウィンドウのデータを前記複数の読み出しポートから出力し、
前記レジスタデータ選択出力手段は、前記ウィンドウ切り替え命令のデコード開始からコミット開始の直前まで、前記複数の読み出しポートから出力される前記第１のレジスタウィンドウのデータと前記第２のレジスタデータウィンドウに含まれる複数のレジスタのデータの中から、前記演算手段が必要とするレジスタのデータのみを選択して出力することを特徴とする。
（付記６）
付記５記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第２のジスタウィンドウのデータのみを前記複数のポートのいずれかのポートから出力することを特徴とする。
（付記７）
付記５記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記第１のレジスタウィンドウのデータ出力と前記第２のレジスタウィンドウのデータ出力に兼用されることを特徴とする。
（付記８）
付記７記載の演算処理装置であって、
前記複数の読み出しポートの各ポートは、前記ウィンドウ切り替え命令が実行される毎に、前記第１のレジスタウィンドウのデータと前記第２のレジスタウィンドウのデータを交互に切り替え出力することを特徴とする。
（付記９）
付記５記載の演算処理装置であって、
前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第１のウィンドウと、個々のルーチンが個別に使用するレジスタを備える第２のウィンドウと、全てのルーチンで共有されるレジスタを備える第３のウィンドウを備え、
前記複数の読み出しポートは、前記第１のウィンドウのデータを出力する第１の読み出しポートと、前記第２のウィンドウのデータを出力する第２の読み出しポートを含み、前記第１の読み出しポートの本数と前記第２の読み出しポートの本数は、共に、複数であることを特徴とする。
（付記１０）
付記９記載の演算処理装置であって、
前記第１のウィンドウは、子ルーチンに渡す引き数を格納する第４のウィンドウと親ルーチンから受け取る引き数を格納する第５のウィンドウとルーチンが専用に使用する第６のウィンドウを備え、前記レジスタウィンドウ内において、前記第４のウィンドウと前記第５のウィンドウは、それぞれ、一方の端と他方の端に配置されることを特徴とする。
（付記１１）
付記１０記載の演算処理装置であって、
前記レジスタファイルの複数のレジスタウィンドウは論理的に連結されており、互いに隣接する一方のレジスタウィンドウの前記第４のウィンドウと他方のレジスタウィンドウの第５のウィンドウは共有されることを特徴とする。
（付記１２）
付記１１記載の演算処理装置であって、
前記レジスタファイルの複数のレジスタウィンドウは論理的にリング状に連結されていることを特徴とする。
（付記１３）
付記１２記載の演算処理装置であって、
前記複数の第１の読み出しポートは、前記第４のウィンドウのデータと前記第５のデータを出力する第１のグループと、前記第６のウィンドウのデータを出力する第２のグループに分けられていることを特徴とする。
（付記１４）
付記１３記載の演算処理装置であって、
前記第１のグループに属する前記第１の読み出しポートの本数は前記第４のウィンドウと前記第５のウィンドウの総数よりも１つ大きな数であり、前記第２のグループに属する前記第２の読み出しポートの本数は前記第５のウィンドウの個数よりも１つ大きな数であることを特徴とする。
（付記１５）
付記１１乃至１４のいずれか１項に記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令が実行される毎に、前記第４乃至第６の各ウィンドウのデータが出力される前記第１の読み出しポートをサイクリックに切り替えることを特徴とする。
（付記１６）
付記９乃至１５のいずれか１項に記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、前記複数の第１の読み出しポートを介して前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる前記第１のウィンドウのデータを出力し、前記複数の第２の読み出しポートを介して前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる前記第２のウィンドウのデータを出力することを特徴とする。
（付記１７）
付記１６記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、ウィンドウ切り替え命令のデコード開始からコミットが完了するまでの間は、全ての前記第1の読み出しポートと全ての前記第２の読み出しポートを介して前記データ出力を行うことを特徴とする。
（付記１８）
付記１６または１７記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令のコミットが開始されると、前記第１のレジスタウィンドウに含まれる第１のウィンドウのデータのみを前記複数の第１の読み出しポートの一部のポートから出力し、前記第１のレジスタウィンドウに含まれる第２のウィンドウのデータのみを前記複数の第２の読み出しポートの一部のポートから出力することを特徴とする。
（付記１９）
付記１８記載の演算処理装置であって、
前記ウィンドウデータ読み出し手段は、前記ウィンドウ切り替え命令の実行が開始される毎に、前記第１のレジスタウィンドウのデータを出力する前記第１の読み出しポートと、前記第２のレジスタウィンドウのデータを出力する前記第２の読み出しポートを切り替えることを特徴とする。
（付記２０）
付記９乃至１９のいずれか１項に記載の演算処理装置であって、
前記第１の読み出しポートと前記第２の読み出しポートには、それぞれ、前記第１のウィンドウのデータと前記第２のウィンドウのデータが入力されるマルチプレクサが設けられており、
前記ウィンドウデータ読み出し手段は、前記第１の読み出しポートと前記第２の読み出しポートの各ポートに設けられたマルチプレクサを制御して、前記第１のレジスタウィンドウと前記第２のレジスタウィンドウに含まれる前記第１のウィンドウのデータと前記第２のウィンドウのデータを該マルチプレクサから選択出力させ、
前記レジスタデータ選択出力手段は、前記マルチプレクサから出力される前記第１のウィンドウのデータと前記第２のウィンドウのデータの中から前記演算手段が必要とするレジスタのデータを選択して出力することを特徴とする。
（付記２１）
付記３乃至２０のいずれか１項に記載の演算処理装置であって
前記レジスタデータ選択出力手段は、さらに、前記レジスタファイルから前記演算手段が必要とするデータを読み出して、そのデータを出力させることを特徴とする。
（付記２２）
付記３記載の演算処理装置であって、
前記制御手段は、さらに、
ウィンドウ切り替え命令が実行される度に、前記カレントウィンドウがアドレス順に切り替わってサイクリックに使用されるように、前記カレントウィンドウポインタ手段が保持するアドレス情報を更新するカレントウィンドウポインタ制御手段と、
前記サイクリックに切り替わるアドレス情報の全てのステートに関するステート情報を格納する記憶手段と、
前記カレントウィンドウポインタ手段が保持するアドレス情報が更新されたとき、更新後のアドレス情報に対応するステート情報を前記記憶手段から読み出し、そのステート情報を前記ウィンドウデータ読み出し手段に出力するステート情報出力手段と、
を備えることを特徴とする。
（付記２３）
付記２２記載の演算処理装置であって、
前記記憶手段に記憶されるステート情報は、何回目のサイクリックであるかを示すサイクリック情報とカレントウィンドウのアドレス情報の組であることを特徴とする。
（付記２４）
付記１記載の演算処理装置であって、さらに、
前記ウィンドウ切り替え命令のデコード後に、前記ウィンドウ切り替え命令の後続命令を一定サイクルだけストールさせるパイプライン制御手段を、
備えることを特徴とする。
（付記２５）
付記１記載の演算処理装置であって、さらに、
レジスタリネーミングを行うリネームレジスタ手段と、
第1の命令と、該第1の命令の後に実行される後続命令が真のデータ依存関係にあるとき、前記第1の命令の実行結果を前記レジスタファイルから読み出し可能となるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御するリネームレジスタ制御手段と、
を備えることを特徴とする。
（付記２６）
付記２５記載の演算処理装置であって、
前記リネームレジスタ制御手段は、前記第1の命令の実行結果を前記リネームレジスタ手段に格納してから前記レジスタファイルから読み出すまでに複数サイクルを要する場合、
前記実行結果を前記レジスタファイルから読み出し可能になるまで、前記実行結果を前記リネームレジスタ手段が保持するように制御することを特徴とする。
（付記２７）
付記２６記載の演算処理装置であって、
パイプラインのコミットステージを伸ばすことを特徴とする。
（付記２８）
付記２５または２６記載の演算処理装置であって、
前記第１の命令の直後の第１の後続命令は、前記第１の命令の演算結果をバイパスして使用することを特徴とする。
（付記２９）
付記２５または２６記載の演算処理装置であって、
前記第１の後続命令の次の命令である第２の後続命令は、前記第１の命令の演算結果を演算結果レジスタから読み出して使用することを特徴とする。
（付記３０）
付記２５または２６記載の演算処理装置であって、
前記第２の後続命令の次の命令である第３の後続命令は、前記第１の命令の演算結果をリネームレジスタから読み出して使用することを特徴とする。
（付記３１）
付記２５記載の演算処理装置であって、
前記第１の命令から数えて後ろから４番目に位置する第４の後続命令は、前記第１の命令の演算結果をリネームレジスタから読み出して使用することを特徴とする。
（付記３２）
付記１記載の演算処理装置であって、
前記レジスタファイルは、論理的にリング状なレジスタウィンドウを備えることを特徴とする。
（付記３３）
付記３２記載の演算処理装置であって、
前記レジスタファイルの互いに隣接する２つのレジスタウィンドウの一部のウィンドウは共有されることを特徴とする。
（付記３４）
付記３２記載の演算処理装置であって、
前記レジスタウィンドウは、親ルーチンと子ルーチンとの間で引き数の授受に使用されるレジスタを備える第１のウィンドウと、個々のルーチンが個別に使用するレジスタを備
える第２のウィンドウと、全てのルーチンで共有されるレジスタを備える第３のウィンドウを備えることを特徴とする。
（付記３５）
付記３４記載の演算処理装置であって、
前記第１のウィンドウは、子ルーチンに渡す引き数を格納する第４のウィンドウと親ルーチンから受け取る引き数を格納する第５のウィンドウとルーチンが専用に使用する第６のウィンドウを備え、前記レジスタウィンドウ内において、前記第４のウィンドウと前記第５のウィンドウは、それぞれ、一方の端と他方の端に配置されることを特徴とする。
（付記３６）
付記３５記載の演算処理装置であって、
互いに隣接する一方のレジスタウィンドウの前記第４のウィンドウと他方のレジスタウィンドウの第５のウィンドウは共有されることを特徴とする。
【図面の簡単な説明】
【０１４１】
【図１】本発明の実施形態である演算処理装置の全体構成図である。
【図２】図１の本実施形態における演算処理装置の詳細な構成を示す図である。
【図３】（ａ）はＭＲＦ＿ＲＡ１の構成例を示す図、（ｂ）はＭＲＦ＿ＲＡ２の構成例を示す図である。
【図４】本実施形態の演算処理装置における演算部の命令パイプラインを示す図である。
【図５】ポート割り当て制御部テーブルの構成例を示す図である。
【図６】ポート割り当て制御部テーブルからのポート割り当てステートの読み出し方法を説明する図である。
【図７】ＳＡＶＥ命令実行時のｃｗｐ、ｓｅｔの更新アルゴリズムを示すフローチャートである。
【図８】ＲＥＳＴＯＲＥ命令実行時のｃｗｐ、ｓｅｔの更新アルゴリズムを示すフローチャートである。
【図９】ＳＡＶＥ命令前後の実行パイプラインの動作を示す図である。
【図１０】ウィンドウ切り替え命令のデコード時の後続命令の実行タイミングの例を示す図である。
【図１１】真のデータ依存関係にある命令を、命令パイプラインにバブル（パイプラインバブル）が発生しないように、リネームレジスタ（ＲＯＢ３１）の開放を制御する手法を示す図である。
【図１２】レジスタファイル（ＭＲＦ）からのデータの読み出しに複数サイクルを要する場合の制御手法を示す図である。
【図１３】ポート割り当て制御部テーブルの活用例を示す図（その１）である。
【図１４】ポート割り当て制御部テーブルの活用例を示す図（その２）である。
【図１５】図２の実施形態を整数演算ユニットに適用した構成例を示す図である。
【図１６】本発明が適用可能な他のレジスタファイルの構成例を示す図である。
【図１７】レジスタウィンドウ方式のレジスタファイルの構成例を示す図である。
【図１８】従来のレジスタウィンドウ方式のレジスタファイルを備える演算処理装置の構成を示す図（その１）である。
【図１９】従来のレジスタウィンドウ方式のレジスタファイルを備える演算処理装置の構成を示す図（その２）である。
【図２０】従来のレジスタウィンドウ方式のレジスタファイルを備える情報処理装置の構成を示す図である。
【符号の説明】
【０１４２】
１  演算処理装置
１０  ＭＲＦ
１００  レジスタファイル
２３１、２３２、２４１〜２４３、２６１、２７１  マルチプレクサ
２５１  ｉｎレジスタ／ｏｕｔレジスタ（インレジスタ／アウトレジスタ）用ウィンドウ２５２  ｌｏｃａｌレジスタ（ローカルレジスタ）用ウィンドウ
２５３  ｇｌｏｂａｌレジスタ（グローバルレジスタ）用ウィンドウ
ｉｏ０〜ｉｏ２  インレジスタ／アウトレジスタ・ウィンドウの読み出しポート
ｌ０、ｌ１      ローカルレジスタウィンドの読み出しポート
ＭＲＦ＿ＲＡ１、ＭＲＦ＿ＲＡ２  レジスタ
２０  制御部
２１０  レジスタ制御部
２１１  ポート割り当て制御部テーブル
２１５  ポート割り当てステート
２１２  ＳＥＴレジスタ
２１３  ＣＷＰレジスタ
２１４  ｓｅｔ、ｃｗｐ制御装置
２２０  命令制御部
２２１  ウィンドウ切り替え命令の後続命令の実行タイミング制御機能
２２２  リネームレジスタ開放制御機能
２２３  ＭＲＦ＿ＲＡ２の制御機能
３０  演算部３０
３１  ＲＯＢ（リオーダバッファ）
３０１  ＭＲＦ
３０３、３１１〜３１４、３４１〜３４４、３５１〜３５４、３７１  マルチプレクサ
３２０〜３２４、３６１〜３６４、３８１  レジスタ
３３１  ＡＬＵ／ＳＦＴ／ＶＩＳ演算器
３３２  乗算器（ＭＰＹ）
３３３  除算器（ＤＶＤ）
３３５、３３６  アドレス生成器（ＡＧＥＮ）
【図１】
2008234075.tif 000003
【図２】
2008234075.tif 000004
【図３】
2008234075.tif 000005
【図４】
2008234075.tif 000006
【図５】
2008234075.tif 000007
【図６】
2008234075.tif 000008
【図７】
2008234075.tif 000009
【図８】
2008234075.tif 000010
【図９】
2008234075.tif 000011
【図１０】
2008234075.tif 000012
【図１１】
2008234075.tif 000013
【図１２】
2008234075.tif 000014
【図１３】
2008234075.tif 000015
【図１４】
2008234075.tif 000016
【図１５】
2008234075.tif 000017
【図１６】
2008234075.tif 000018
【図１７】
2008234075.tif 000019
【図１８】
2008234075.tif 000020
【図１９】
2008234075.tif 000021
【図２０】
2008234075.tif 000022