(57)【特許請求の範囲】
【請求項１】
ｉｎレジスタ、ｌｏｃａｌレジスタ及びｏｕｔレジスタの順序によるレジスタの組から構成されるウィンドウを複数有し、該複数のウィンドウがリング状に構成される複数のレジスタウィンドウと、該レジスタウィンドウ間で共有される１組のｇｌｏｂａｌレジスタと、から構成されるマスタレジスタファイルと、
該レジスタウィンドウにアクセスする場合において、現在のウィンドウ位置をポインタ値により示すカレントウィンドウポインタ手段と、
該カレントウィンドウポインタ手段が示すポインタ値により指定される該１つのウィンドウが保持するデータ及び該ｇｌｏｂａｌレジスタが保持するデータとを、命令処理に使用されるデータとして該マスタレジスタファイルから読み出して保持するワーキングレジスタファイルと、
該ウィンドウの切り替えを実行するウィンドウ切り替え命令を実行した場合に、該カレントウィンドウポインタ手段が示すポインタ値が更新されたときには、該マスタレジスタファイルから前記更新後のポインタ値が示す１ウィンドウ分のｌｏｃａｌレジスタ及び、ｉｎレジスタ又はｏｕｔレジスタのうちいずれか一方が保持するデータを該ワーキングレジスタファイルへ転送し、該ワーキングレジスタが保持するデータを更新する更新手段と、を備えることを特徴とするレジスタファイル。
【請求項２】
ｉｎレジスタ、ｌｏｃａｌレジスタ及びｏｕｔレジスタの順序によるレジスタの組から構成されるウィンドウを複数有し、該複数のウィンドウがリング状に構成される複数のレジスタウィンドウと、該レジスタウィンドウ間で共有される１組のｇｌｏｂａｌレジスタと、から構成されるマスタレジスタファイルと、
該レジスタウィンドウにアクセスする場合において、現在のウィンドウ位置をポインタ値により示すカレントウィンドウポインタ手段と、
該カレントウィンドウポインタ手段が示すポインタ値−ｎから前記ポインタ値＋ｎまでの範囲により指定される該２ｎ＋１個のウィンドウが保持するデータ及び該ｇｌｏｂａｌレジスタが保持するデータとを（ｎは自然数）、命令処理に使用されるデータとして該マスタレジスタファイルから読み出して保持するワーキングレジスタファイルと、
該ウィンドウの切り替えを実行するウィンドウ切り替え命令を実行した場合に、該カレントウィンドウポインタ手段が示すポインタ値が更新されたときには、該マスタレジスタファイルから前記更新後のポインタ値が示す１ウィンドウ分のｌｏｃａｌレジスタ及び、ｉｎレジスタ又はｏｕｔレジスタのうちいずれか一方が保持するデータを該ワーキングレジスタファイルへ転送し、該ワーキングレジスタが保持するデータを更新する更新手段と、を備えることを特徴とするレジスタファイル。
【請求項３】
前記ワーキングレジスタファイルにアクセスする場合において、該カレントウィンドウポインタ手段により示される現在のウィンドウ位置を示すワーキングレジスタウィンドウカレントポインタ手段を備えることを特徴とする請求項１又は２記載のレジスタファイル。
【請求項４】
一のウィンドウ切り替え命令の実行により、前記ポインタ値のインクリメントを行い、他のウィンドウ切り替え命令の実行により、前記ポインタ値のデクリメントを行うことにより、該ワーキングレジスタが保持するデータの更新を行うことを特徴とする請求項１又は２記載のレジスタファイル。
【請求項５】
前記マスタレジスタファイルのウィンドウの切り替え後に、次のウィンドウ切り替え命令が実行される前に先立って、該ウィンドウ切り替え時に次のウィンドウ切り替え命令の実行による該ワーキングレジスタが保持するデータの更新に必要なデータを予め該マスタレジスタファイルから前記ワーキングレジスタファイルに転送することを特徴とする請求項１又は２記載のレジスタファイル。
【請求項６】
前記マスタレジスタファイルと前記ワーキングレジスタファイルにおける各ウィンドウは、該ウィンドウのｉｎレジスタと隣接するウィンドウのｏｕｔレジスタ、該ウィンドウのｏｕｔレジスタと隣接するウィンドウのｉｎレジスタとを、それぞれ共有することにより構成されるオーバラップウィンドウであることを特徴とする請求項１又は２記載のレジスタファイル。
【請求項７】
前記レジスタファイルにデータを書き込む場合には、該マスタレジスタファイル及び該ワーキングレジスタファイルに同時にデータを書き込み、前記レジスタファイルからデータを読み出す場合には、該ワーキングレジスタファイルのみからデータを読み出すことを特徴とする請求項１又は２記載のレジスタファイル。
【請求項８】
ｉｎレジスタ、ｌｏｃａｌレジスタ及びｏｕｔレジスタの順序によるレジスタの組から構成されるウィンドウを複数有し、該複数のウィンドウがリング状に構成される複数のレジスタウィンドウと、該レジスタウィンドウ間で共有される１組のｇｌｏｂａｌレジスタと、から構成されるマスタレジスタファイルと、
該レジスタウィンドウにアクセスする場合において、現在のウィンドウ位置をポインタ値により示すカレントウィンドウポインタ手段と、
命令処理に使用されるデータを該マスタレジスタファイルから読み出して保持するワーキングレジスタファイルと、を備えるレジスタファイルの制御方法において、
該カレントウィンドウポインタ手段が示すポインタ値−１、前記ポインタ値及び前記ポインタ値＋１により指定される該１つのウィンドウが保持するデータ及び該ｇｌｏｂａｌレジスタが保持するデータとを、該マスタレジスタファイルから読み出して保持するワーキングレジスタファイルに保持するステップと、
該ウィンドウの切り替えを実行するウィンドウ切り替え命令を実行するステップと、
該カレントウィンドウポインタ手段が示すポインタ値を更新するステップと、
該マスタレジスタファイルから前記更新後のポインタ値が示す１ウィンドウ分のｌｏｃａｌレジスタ及び、ｉｎレジスタ又はｏｕｔレジスタのうちいずれか一方が保持するデータを該ワーキングレジスタファイルへ転送するステップと、
該ワーキングレジスタが保持するデータを更新するステップと、を備えることを特徴とするレジスタファイルの制御方法。
【請求項９】
ｉｎレジスタ、ｌｏｃａｌレジスタ及びｏｕｔレジスタの順序によるレジスタの組から構成されるウィンドウを複数有し、該複数のウィンドウがリング状に構成される複数のレジスタウィンドウと、該レジスタウィンドウ間で共有される１組のｇｌｏｂａｌレジスタと、から構成されるマスタレジスタファイルと、
該レジスタウィンドウにアクセスする場合において、現在のウィンドウ位置をポインタ値により示すカレントウィンドウポインタ手段と、
命令処理に使用されるデータを該マスタレジスタファイルから読み出して保持するワーキングレジスタファイルと、を備えるレジスタファイルの制御方法において、
該カレントウィンドウポインタ手段が示すポインタ値−ｎから前記ポインタ値＋ｎまでの範囲により指定される該２ｎ＋１個のウィンドウが保持するデータ及び該ｇｌｏｂａｌレジスタが保持するデータとを（ｎは自然数）、該マスタレジスタファイルから読み出して保持するワーキングレジスタファイルに保持するステップと、
該ウィンドウの切り替えを実行するウィンドウ切り替え命令を実行するステップと、
該カレントウィンドウポインタ手段が示すポインタ値を更新するステップと、
該マスタレジスタファイルから前記更新後のポインタ値が示す１ウィンドウ分のｌｏｃａｌレジスタ及び、ｉｎレジスタ又はｏｕｔレジスタのうちいずれか一方が保持するデータを該ワーキングレジスタファイルへ転送するステップと、
該ワーキングレジスタが保持するデータを更新するステップと、を備えることを特徴とするレジスタファイルの制御方法。
【請求項１０】
前記カレントウィンドウポインタ手段が示すポインタ値を更新するステップは、前記ポインタ値のインクリメント又は前記ポインタ値のデクリメントを行うステップであることを特徴とする請求項８又は９記載のレジスタファイルの制御方法。
【請求項１１】
前記マスタレジスタファイルのウィンドウの切り替え後に、次のウィンドウ切り替え命令が実行される前に先立って、該ウィンドウ切り替え時に次のウィンドウ切り替え命令の実行による該ワーキングレジスタが保持するデータの更新に必要なデータを予め該マスタレジスタファイルから前記ワーキングレジスタファイル転送するステップをさらに有することを特徴とする請求項８又は９記載のレジスタファイルの制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、レジスタウィンドウを持つアーキテクチャの情報処理装置において、アウトオブオーダ命令実行方式を採用した場合に、レジスタウィンドウの切り替え命令を追い越して命令の実行順序の入れ替えを行うレジスタアクセス処理手法に関する。
【０００２】
【従来の技術】
縮小命令セット型アーキテクチャを取る情報処理装置には複数のレジスタセット（以下、レジスタウィンドウと呼ぶ）を持ち、サブルーチンのコール／リターン時に発生するレジスタのメモリスタック上への退避／復帰を不要にするものがある。
【０００３】
レジスタウィンドウはリング状に連結され、その管理はレジスタウィンドウ番号（以下、ウィンドウ番号と呼ぶ）で行われる。例えば、ウィンドウ番号が０〜７の８つのレジスタウィンドウを備え、０、１、２、・・・、７といった順番に使用される。使用中のウィンドウ番号はウィンドウ番号を保持するレジスタ（以下ＣＷＰ（Current  Window  Pointer）によって保持される。
【０００４】
図２８は、リング状レジスタファイルの構成を示した図である。
各レジスタウィンドウは、例えば、３２本の６４ビットレジスタからなり、そのうち８本のレジスタは全てのレジスタウィンドウと共通であり、それ以外のレジスタは図２８のように、８本は１つ前のレジスタウィンドウと別の８本は１つ次のレジスタウィンドウと共通である。
【０００５】
これをオーバラップレジスタウィンドウと呼ぶ。レジスタウィンドウ切り替え命令にはＣＷＰをインクリメントするＳＡＶＥ命令と、ＣＷＰをデクリメントするＲＥＳＴＯＲＥ命令がある。以下でレジスタウィンドウ切り替え命令をＳＡＶＥ、ＲＥＳＴＯＲＥ命令と称する。
【０００６】
図２８は、ウィンドウ数ｎ＝８で構成した場合であり、localが８本×８ウィンドウ＝６４本、オーバラップしているin/outが８本×８ウィンドウ＝６４本、global（不図示）が８本の合わせて１３６本のレジスタを持ち、その全てのレジスタに読み書きできる必要がある。
【０００７】
このような大きなレジスタファイルから読み出す回路の速度と規模が従来の技術の課題であった。
【０００８】
【発明が解決しようとする課題】
図２９は、マスタレジスタファイルとワーキングレジスタファイルからなるレンズファイルの構成を示す図である。
【０００９】
レジスタウィンドウはウィンドウ数が多くなると非常に大きなレジスタファイルが必要になり（８ウィンドウでは１３６本）、演算器へオペランドを高速に供給することが困難になる。そのため、図２９のように全てのウィンドウを保持するレジスタファイル（図２９（１））（以下マスタレジスタファイル（ＭＲＦ：Master  Register  File）と呼ぶ）に加えて、ＭＲＦ中のＣＷＰで示される１つのウィンドウのコピーを保持するＭＲＦのサブセット（図２９（２））（以下ワーキングレジスタファイル（ＷＲＦ：Working  Register  File）と呼ぶ）を保持し、演算器へのオペランド供給は、このＷＲＦより行う。ＷＲＦはＣＷＰで示されるウィンドウのみを保持するので、容量は３２エントリとＭＲＦに比べて小さいので読み出しを高速化できる。
【００１０】
しかし、このような構成を取ると、ＷＲＦ中には１ウィンドウ分のレジスタしか存在しないため、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令が実行されると、その後命令で必要となるオペランドをＷＲＦから供給できなくなるという新たな問題が生じる。
【００１１】
そのため、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令が実行されるとＷＲＦを新しいウィンドウの値に入れ替えるため、ＭＲＦ→ＷＲＦのウィンドウ転送処理が発生し、その間以後の命令実行はストールする。
【００１２】
また、アウトオブオーダ命令実行により命令の処理順序を入れ替えて処理する情報処理装置では、プログラムの実行順序に関係なく処理可能な命令から実行を行うが、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令後の命令は、たとえ処理可能になったとしてもＷＲＦ中にＳＡＶＥ、ＲＥＳＴＯＲＥ後のウィンドウが転送されてくるまでは実行することができない。
【００１３】
このような制約は同時命令発行数の大きいアウトオブオーダ命令実行方式の情報処理装置時おいては非常に大きな性能低下を引き起こす。アウトオブオーダ命令実行方式の情報処理装置では、多くの命令を先読みし、バッファにそれらの命令を蓄えておき、そのバッファの中から実行可能な命令をプログラムに指定された実行順序を入れ替えて実行することにより、命令実行のスループットを上げている。よって、上記のようなＳＡＶＥ、ＲＥＳＴＯＲＥ命令をはさんでの命令実行順序の変更ができないという制約があると、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令が出現する度にアウトオブオーダ処理機構が機能せず大幅な性能低下を招く。
【００１４】
本発明の課題は、アウトオブオーダ処理方式の情報処理装置の性能を向上させることである。
特に、本発明は、レジスタウィンドウ及びアウトオブオーダ実行方式を採用する情報処理装置でＳＡＶＥ、ＲＥＳＴＯＲＥ命令をはさんで命令実行順序の変更を可能にし、同時発行可能な命令数を十分確保するものである。
【００１５】
【課題を解決するための手段】
本発明のレジスタファイルは、マスタレジスタファイルから命令処理に使用されるデータをワーキングレジスタファイルに保持し、命令の読み出しをワーキングレジスタファイルから行うレジスタファイルにおいて、該マスタレジスタファイルにアクセスする場合の現在のウィンドウ位置を示すカレントウィンドウポインタ手段と、該ワーキングレジスタファイルにアクセスする場合の現在のウィンドウ位置を示すワーキングレジスタウィンドウカレントポインタ手段と、該マスタレジスタファイルの一部のコピーを該ワーキングレジスタファイルに保持する場合に、該カレントウィンドウポインタ手段が示すウィンドウのデータの他に、該カレントウィンドウポインタ手段の示すウィンドウの前後複数のウィンドウのデータも該ワーキングレジスタファイルに保持する手段を備えることを特徴とする。
【００１６】
本発明のレジスタファイルの制御方法は、マスタレジスタファイルから命令処理に使用されるデータをワーキングレジスタファイルに保持し、命令の読み出しをワーキングレジスタファイルから行うレジスタファイルの制御方法において、該マスタレジスタファイルにアクセスする場合の現在のウィンドウ位置を示すカレントウィンドウポインタと、該ワーキングレジスタファイルにアクセスする場合の現在のウィンドウ位置を示すワーキングレジスタウィンドウカレントポインタとを設けるステップと、該マスタレジスタファイルから該ワーキングレジスタファイルにデータを書き込む場合に、該カレントウィンドウポインタが示すウィンドウのデータの他に、該カレントウィンドウポインタの示すウィンドウの前後複数のウィンドウのデータも該ワーキングレジスタファイルに保持するように書き込む書き込みステップとを備えることを特徴とする。
【００１７】
本発明によれば、ワーキングレジスタファイルに、予め、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令を間に挟む複数の読み出し、あるいは、書き込み命令によって必要とされるデータまで格納しておくので、読み出し、あるいは、書き込み命令が連続しても、情報処理装置の処理は、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令に伴って発生するＭＲＦからＷＲＦへのデータの転送処理の終了を待たずに、先に進めることができ、従って、情報処理装置の処理効率を高めることができる。
【００１８】
【発明の実施の形態】
本発明においては、ウィンドウ数の大きいレジスタウィンドウを全てウィンドウレジスタを保持するマスタレジスタと、アクセスされる可能性のある一部のウィンドウレジスタを保持するワーキングレジスタの２組から構成する場合に、ワーキングレジスタを複数ウィンドウ分保持することによりアウトオブオーダ命令実行方式における命令実行順序の入れ替えをウィンドウ切り替え命令を追い越して命令実行順序の変更を可能とするレジスタファイル、及びその制御方式を提供する。
【００１９】
まず、ウィンドウ数が大きいレジスタファイルを持つ情報処理装置においては高速にオペランドの読み出しを行うことが困難であるため、図２９のように全てのウィンドウを保持するＭＲＦ（図２９（１））、とオペランド読み出し専用の小さなＷＲＦ（図２９（２））の２つに分割して保持し、これらのＭＲＦとＷＲＦは常に同じ内容を保持するように同様な更新手続きを行っておく。オペランドの供給はもっぱら小さなＷＲＦから行うことにより、高速にオペランド読み出しを行い、ウィンドウ切り替え命令処理時には、マスタレジスタファイルから切り替え後のウィンドウの最新値を転送することで実現する。
【００２０】
命令処理の結果によるレジスタの更新はＣＷＰで示されるウィンドウに限られ、それらは全てＷＲＦ中に保持されるように制御されるので、この更新処理をＷＲＦに対してのみ行うことも可能である。一方、そのような制御方法を採った場合、ＭＲＦとＷＲＦ内データの一貫性を取るためにウィンドウ切り替え時に、上記のＭＲＦからＷＲＦへのデータ転送の前にＷＲＦからＭＲＦへの転送処理を行う必要がある。本発明では、ＷＲＦからＭＲＦへの転送処理を省くことを目的としてこのようなＷＲＦとＭＲＦを同時更新する制御方式を採った。
【００２１】
更に、上記の方法を採った場合、オペランドとして読み出せるレジスタはＣＷＰで指定されたウィンドウに限られるため、アウトオブオーダ実行方式の情報処理装置において、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令を追い越して命令実行順序の変更をすることができない。
【００２２】
そこで、本発明の実施形態においては、ＷＲＦをＣＷＰに加えてＣＷＰ−１、ＣＷＰ＋１の３ウィンドウ分まで保持することとする。このようにすればＣＷＰの前後のウィンドウはＷＲＦ中にあるので、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令の前後の命令は全てレジスタファイルへの読み書きを行える。よって、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令をはさんでの命令移動が可能となる。
【００２３】
このようなＷＲＦを用いる場合、１ウィンドウには３２本のレジスタがあるがそのうち８本は全てのウィンドウに共通であり（globalと呼ぶ）、別の８本は１つ次のウィンドウと共通であり、別の８本は１つ前のウィンドウと共通であるため、全３２本のレジスタのうち２４本は他のウィンドウと共有されているので、ＣＷＰ−１、ＣＷＰ、ＣＷＰ＋１分のウィンドウを保持するためには６４本のレジスタがあれば良い。
【００２４】
なお、以下の説明では、ＣＷＰの前後２ウィンドウ分のみを余分に持つＷＲＦについて述べるが、同様に前後２ｎウィンドウ余分に持つ場合にも拡張可能である。
【００２５】
更に、ＳＡＶＥ−ＳＡＶＥもしくはＲＥＳＴＯＲＥ−ＲＥＳＴＯＲＥと同じウィンドウ切り替え命令が続いた場合には、２度目のＳＡＶＥもしくはＲＥＳＴＯＲＥ後の命令が読み書きするウィンドウであるＣＷＰ＋２もしくはＣＷＰ−２はＷＲＦ中には存在しないため、ＭＲＦからの転送を待つ間、以後の命令実行はストール（停止）する。
【００２６】
この命令実行ストールを防ぐために一度目のＳＡＶＥもしくはＲＥＳＴＯＲＥ命令時に２度目のＳＡＶＥもしくはＲＥＳＴＯＲＥ命令後の命令実行に必要となるウィンドウをＭＲＦより転送しておくこととする。ＳＡＶＥ後はウィンドウポインタはＣＷＰ＋１になり、その後ＳＡＶＥ−ＲＥＳＴＯＲＥと続いた場合、ウィンドウポインタはＣＷＰであり、ＳＡＶＥ−ＳＡＶＥとつづいた場合は、ウィンドウポインタはＣＷＰ＋２である。いずれにしてもＣＷＰ−１が必要になることはないので、ここにＳＡＶＥ−ＳＡＶＥと続いた場合に必要になるＣＷＰ＋２をＭＲＦより転送して来る。ＲＥＳＴＯＲＥ命令の場合も同様である。よって、ＳＡＶＥ、ＲＥＳＴＯＲＥ時の転送処理は以下のように行う。
・ＳＡＶＥ命令時：ＷＲＦのＣＷＰ−１にＭＲＦのＣＷＰ＋２を転送する。
・ＲＥＳＴＯＲＥ命令時：ＷＲＦのＣＷＰ＋１にＭＲＦのＣＷＰ−２を転送する。
【００２７】
このようなレジスタウィンドウの先見転送を行っておくことで、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令が連続するような場合であっても命令実行がストールする事が無くなる。唯一命令実行がストールする場合は、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令に付随して行われるレジスタウィンドウの先見転送処理が完了するよりも前に引き続くＳＡＶＥ、ＲＥＳＴＯＲＥ命令後の命令が実行可能になった場合である。これらの命令が必要とするウィンドウのＭＲＦからの転送が完了していないため転送完了時まで命令実行がストールする。
【００２８】
図１〜図３は、先見転送を説明する図である。
上記の先見転送ではＳＡＶＥ時には、ＣＷＰ＋２、ＲＥＳＴＯＲＥ時にはＣＷＰ−２を転送するが、レジスタウィンドウはオーバラッピングウィンドウであるので、図２のstate-0.（2）ですでにＣＷＰ＋２のin（またはＣＷＰ−２のout）、及びglobalはＭＲＦ中に存在する。
【００２９】
よって、ＳＡＶＥ、ＲＥＳＴＯＲＥに伴うＭＲＦ→ＷＲＦ間の転送はウィンドウ全体（３２エントリ）を転送する必要は無く、ＳＡＶＥ時にはＣＷＰ＋２のoutとlocal、ＲＥＳＴＯＲＥ時にはＣＷＰ−２のinとlocalというように１／２ウィンドウの１６エントリの転送で済む。この先見転送は図１のように行う。
【００３０】
図２のようにＷＰはin/outとlocalでそれぞれ１個おきに割り当てられ、先見転送のために２個先のウィンドウに転送する必要があるので２×２＝４先のＷＰに転送する。また、図２においてＷＰが１から始まっているので“ｍｏｄ  ７”の後に“＋１”する必要があるので、括弧内の±４に補正のための“−１”が付く。
【００３１】
このような手法を用いればＭＲＦ→ＷＲＦ間の転送量は少なくて済むが、ウィンドウ切り替え命令の度にin、local、outの位置が変化するという問題が新たに発生する。
【００３２】
図２は、ＷＲＦの動作を表す図である。
ＷＰ（Window  Pointer）＝１・・・７が割り当てられた枠が、８本のレジスタからなる。ＷＲＦ中には、この図の他にglobalを保持するためのセットが別にある。
【００３３】
図３はＭＲＦのウィンドウのＷＲＦへのマッピングの様子を表す図である。
state-1では、ＷＰ＝４がlocalを保持し、ＷＰ＝３がinを保持し、ＷＰ＝５がoutを保持している。同様にＷＰ＝６がＣＷＰ＋１でのlocalを保持し、ＷＰ＝１がＣＷＰ−１でのinを保持し、ＷＰ＝３がＣＷＰ−１でのoutを保持する。ＷＲＦ中の各ウィンドウはＭＲＦの一部のウィンドウをマッピングしたものである。
【００３４】
図３の（１）が、state-1でのＭＲＦのＷＲＦへのマッピングの様子を表している。
state-1からＳＡＶＥ命令が実行されstate-2に遷移すると、state-1でのＣＷＰ＋１がstate-2でのＣＷＰになり、state-2でのＣＷＰ＋１のout及びlocalをＭＲＦより先見転送する。よって図３の（２）（３）のようにＷＰ＝１、２がＭＲＦからのデータにより上書きされ、ＷＰ＝５、６、７がstate-2でのＣＷＰになる。
【００３５】
ＲＥＳＴＯＲＥ命令が実行されstate-0に遷移すると、state-1でのＣＷＰ−１がstate-0でのＣＷＰになり、state-0でのＣＷＰ−１のin及びlocalをＭＲＦより先見転送する。よって、図３の（４）（５）のようにＷＰ＝６、７がＭＲＦからのデータにより上書きされ、ＷＰ＝１、２、３がstate-0でのＣＷＰになる。
【００３６】
図４は、ＣＷＰとＷＰの対応を示す図である。
ＷＲＦ中でのＣＷＰ位置を上記のようにＷＰで表記し、ＳＡＶＥ、ＲＥＳＴＯＲＥによるそれぞれのＣＷＰ時のin、local、outのＷＰを３つ組で表すと図４のようになる。図４のＣＷＰ＝０、ＷＰ＝［３、４、５］の状態からＳＡＶＥ命令を８回実行すると、再びＣＷＰ＝０となる。しかし、図４のようにＷＰ＝［３、２、５］となり、ＳＡＶＥ命令を実行する前のＣＷＰ＝０の時とはＷＰの割当てが異なる。よって、ＣＷＰから一意にＷＲＦ中のin、local、outのＷＰを決定することができない。ＭＲＦ中のレジスタの特定はＣＷＰとreg番号が与えられれば可能であるが、ＷＲＦでは上記理由により特定できない。
【００３７】
このように、ＷＲＦ内でのＣＷＰ位置は一意に決定することができないので、ＷＲＦ中でのＣＷＰ位置を示すＷＰをレジスタ中に保持することとする。これをＷＣＷＰ（Working  Register  Current  Window  Pointer）と呼ぶこととする。ＷＣＷＰは４ビットからなりＷＣＷＰ［３：２］はＣＷＰのlocal位置のＷＰを示し、ＷＣＷＰ［１：０］はＣＷＰのin位置のＷＰを示し、（ＷＣＷＰ［１：０］＋１）ｍｏｄ  ４はＣＷＰのout位置のＷＰを示す。
【００３８】
ＷＣＷＰは第１には、図４のようにＣＷＰから一意に求めることのできないＷＲＦ中のCurrent  Window位置を指し示すことである。レジスタウィンドウを本実施形態の方式で実装する際にはＣＷＰレジスタに加えてＷＣＷＰレジスタを実装しておき、ＳＡＶＥ、ＲＥＳＴＯＲＥ時には後述する方法でＣＷＰに同期して更新処理を行う。
【００３９】
また、従来の技術ではＳＡＶＥ、ＲＥＳＴＯＲＥ時に必要なＷＲＦへのウィンドウの転送量はin、local、outの３ウィンドウであるところを、本実施形態では、前述したようにin、outがオーバラップしていることを利用してＳＡＶＥ時にはout、local、ＲＥＳＴＯＲＥ時にはin、localしか転送せず、転送量を２／３に削減しているため、ＷＲＦ中でのin、out、localの位置が動的に変化する。
【００４０】
更に、ＷＣＷＰは第２には、このように変動するin、out、localの現在位置を正しくpointし続け、（ＷＣＷＰ、reg番号）の２つ組が与えられたならば、それよりＷＲＦ中の該レジスタの格納場所を知る手段を与えることである。
【００４１】
図５は、ＷＣＷＰとＷＰの変換方法を示す図である。
ＷＣＷＰからin、local、outの図２のＷＰへは図５のように変換する。この例のＷＲＦはin/outとlocalが交互に続くようにＷＰが振られているためin/outのＷＰは偶数、localのＷＰは奇数となる。よって、図５のようにinのＷＰはＷＣＷＰ［１：０］×２＋１となり、localのＷＰはＷＣＷＰ［３：２］×２となる。outのＷＰはinの次のウィンドウなので（（ＷＣＷＰ［１：０］＋１）ｍｏｄ  ４）×２＋１となる。
【００４２】
また、ＷＲＦの各ＷＰと各ＷＰ内の８本のレジスタにＷＰ＝１（８・・・１５）、ＷＰ＝２（１６・・・２３）、ＷＰ＝３（２４・・・３１）、・・・のように０〜６３のアドレスを振り、これを物理アドレスと呼ぶこととする。ＷＰ＝０（０・・・７）にはglobalを割り当てる。
【００４３】
図６は、ＷＲＦへの物理アドレスの割当て方法を説明する図である。図７及び図８は、レジスタ番号から物理アドレスへの変換方法を示す図である。
ＷＲＦへの物理アドレスの割当ては図６のように行う。
【００４４】
レジスタへのアクセスには通常ＣＷＰとreg番号（レジスタ番号）を用いるが、上記のようにＷＲＦへのアクセスにはＣＷＰの代わりにＷＣＷＰを用いる。ＷＣＷＰとreg番号が与えられたときＷＲＦ内の物理アドレスは図７のようにして求める。図７の物理アドレス計算の様子を図で表すと図８のようになる。図７の“・・・×１６”の部分は図８のようにＷＣＷＰ［３：２］（ｏｒ  ＷＣＷＰ［１：０］）を左４ビットシフトすることを意味する。
【００４５】
例を用いて（ＷＣＷＰ、reg番号）の２つ組からＷＲＦの物理アドレスへの変換を説明する。
・（ＷＣＷＰ［１：０］＝“０１”、ｒ１０）の物理アドレスへの変換
ｒ１０はoutであるので、図７の２行目に従い、物理アドレス＝（（１＋１）ｍｏｄ  ４）×１６＋１０＝４２となる。
【００４６】
また、図５によりＷＰ＝２×２＋１＝５と求めて、次に図６よりＷＰ＝５のｒ１０の物理アドレスである４２を得ることによっても求められる。
図７の物理アドレスの導出式は図５から次のように求めることができる。ここではoutのケースについてのみ導出するが他のケースでも同様である。
【００４７】
物理アドレス＝ＷＰ×８＋reg番号−８
図５より
＝（（（ＷＣＷＰ［１：０］＋１）ｍｏｄ  ４）×２＋１）×８＋reg番号−８
＝（（ＷＣＷＰ［１：０］＋１）ｍｏｄ  ４）×１６＋reg番号
このマッピング操作はレジスタをアクセスする命令がデコードされた時点で行うこととする。ＷＲＦ中での固有のレジスタの物理アドレスは図２のようにＳＡＶＥ、ＲＥＳＴＯＲＥ命令によって変化しない。よって、命令デコード時にその命令がアクセスする全レジスタの物理アドレスを決定することができる。
【００４８】
またＷＲＦ中でのＣＷＰ位置は浮動であるので命令がアクセスするレジスタのＷＣＷＰはＳＡＶＥ、ＲＥＳＴＯＲＥ命令によって変化しない。よって命令デコード時に、その命令がアクセスする全レジスタの物理アドレスを決定することができる。
【００４９】
図９は、ＷＣＷＰの更新操作の方法を示す図である。
また、ＷＲＦ中でのＣＷＰ位置は浮動であるので、そのＣＷＰに対応するＷＣＷＰはＳＡＶＥ、ＲＥＳＴＯＲＥ命令に伴い更新しておく必要がある。この更新処理は図９のように行う。ここで、ＷＰＣＷＰ［３：２］＝“００”はglobalに割り当てられているので、ＷＣＷＰ［３：２］は“０１”→“１０”→“１１”→“０１”→・・・と変化していく必要があるので、図９のＷＣＷＰ［３：２］は“ｍｏｄ  ３”の後で“＋１”を行う。そのため、“ｍｏｄ  ３”の左の括弧内の演算では補正のための“−１”を行う。
【００５０】
この更新処理は、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令フェッチ時にやっておく必要がある。なぜならば、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令以後の命令フェッチ時には既に更新後のＷＣＷＰを必要とするからである。
【００５１】
逆にＭＲＦ→ＷＲＦの先見転送はＳＡＶＥ、ＲＥＳＴＯＲＥ命令以前の命令が全て完了するまでやってはいけない。なぜなら、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令以前の命令で分岐や割り込みなどが起こり制御パスが変化し、ＳＡＶＥ、ＲＥＳＴＯＲＥ命令が実行されないかもしれないからである。
【００５２】
図１０は、本実施形態で想定するアウトオブオーダ命令実行方式の計算機の命令処理を説明する図である。
命令キャッシュ１より複数の命令フェッチ機構２により同時にｎ命令フェッチし、リザベーション・ステーション３に格納する。ここまでの処理はインオーダで行われる。リザベーション・ステーションに格納された命令は、以後命令間の依存関係が解消され、かつ演算スロットが空くまでここで待機する。演算可能となった命令は演算スロット４に投入され、レジスタファイル５からオペランドを読み出し、演算器６で実行を開始する。ここでリザベーション・ステーションから演算スロットに投入される順番は元のプログラムの順番に関係なくアウトオブオーダに行われる。演算が終了するとその結果はリザルト・バッファ７に格納される。次に、リザルト・バッファに格納された演算結果は元のプログラムの実行順に従い、インオーダにレジスタファイル８に書き込まれる。
【００５３】
なお、図１０の５と８のレジスタファイルは同一のものである。
図１０のようなアウトオブオーダ命令処理機構を備える計算機において本実施形態の方式は大きな効果を発揮する。
【００５４】
図１１は、アウトオブオーダ実行の様子を示す図である。
図１１の左上の命令列を例に説明する。ここで命令スロットの数はｍ＝２であるとする。
【００５５】
図１１の命令列中には（１）→（２）、（２）→（４）、（５）→（６）のレジスタ干渉が存在する。
また、（３）はその先行命令である（１）、（２）にインタロックされる。なぜなら、（３）のＳＡＶＥ命令は実行にともないＭＲＦ→ＷＲＦの転送が発生するので、先行命令より先に実行してしまうと先行命令が後でトラップを発生し、（３）が実行されないと分かった場合にその命令の実行を取り消すことができないからである。
【００５６】
このような制約は図１１の右上の実線で示される。この制約を満足し、最短で処理した場合には図１１（ａ）のようになる。
一方、ＷＲＦがＣＷＰ１ウィンドウ分しかない従来の技術ではＳＡＶＥの先行命令が終了するまではＭＲＦ→ＷＲＦの転送を行うことができず、ＭＲＦ→ＷＲＦの転送が終了するまではＳＡＶＥの後続命令を実行することができないので、｛（３）の先行命令｝→（３）と、（３）→｛（３）の後続命令｝というインタロックが発生する。図１１左上の命令列では図１１右上の波線で示した制約がそれである。
【００５７】
しかし、ＳＡＶＥ前の％ｏ３とＳＡＶＥ後の％ｉ３はオーバラップしているので従来の技術でも動的にin/outのreg番号を読み替える技術を用いればインタロックは発生しない。その場合には（３）→（４）のインタロックは発生しない。
【００５８】
従来の技術での制約を満足し、最短で処理した場合には図１１（ｂ）のようになる。
図１１（ａ）のレイテンシは１１であり、図１１（ｂ）のレイテンシは１８であるので、従来の方式に比べて本実施形態はレイテンシが７改善される。
【００５９】
図１１左上の命令列の右側にそれぞれの命令でのＣＷＰとＷＣＷＰも併記した。（３）のＳＡＶＥ命令実行前はＣＷＰ＝１、ＷＣＷＰ＝０１０１であり、ＳＡＶＥ命令実行後はＣＷＰ＝２、ＷＣＷＰ＝１０１０に変化する。
【００６０】
ＳＡＶＥ命令の前の命令列（１）、（２）で使用されるレジスタは％ｉ４、％ｏ３、％ｌ１であり、ＳＡＶＥ命令の後の命令列（４）、（５）、（６）で使用されるレジスタは％ｉ３、％ｌ３、％ｌ４であり、それぞれ、図７に従い物理アドレスに変換すると、ＳＡＶＥ命令前では、％ｉ４＝２８、％ｏ３＝４３、％ｌ１＝１７となり、ＳＡＶＥ命令後では、％ｉ３＝４３、％ｌ３＝３５、％ｌ４＝３６となる。
【００６１】
これらのＳＡＶＥ命令前後のレジスタは共通の物理アドレスでアクセスでき、ＳＡＶＥ命令の前後でＷＲＦ中での存在位置は変化しない。例えば、ＳＡＶＥ命令前の％ｏ３とＳＡＶＥ命令後の％ｉ３はオーバラップしているのでＷＲＦ中で同じ物理アドレス（＝４３）でアクセスされている。
【００６２】
このようにＷＲＦ中での物理アドレスがＳＡＶＥ/ＲＥＳＴＯＲＥ命令の前後で変化しないことはアウトオブオーダ命令実行を行う上で重要である。
たとえＳＡＶＥ前後のレジスタ全てを保持できるおおきさのＷＲＦがあり、ＭＲＦより次のウィンドウが転送されるのを待つことなくＳＡＶＥの後続命令へオペランドが供給できるとしても、ＳＡＶＥの前後で物理アドレスが変化してしまっては、命令をＳＡＶＥを超えて移動することが困難である。
【００６３】
本実施形態の方式のように、物理アドレスが変化しなければ、図１０（２）の命令フェッチ時に物理アドレスを計算し、リザベーション・ステーションに登録しさえすれば、以後は如何なる順序で命令が実行されようとも、各命令は正しいレジスタにアクセスできる。
【００６４】
図１２は、本実施形態の構成を適用したｎウィンドウからなるウィンドウレジスタファイルのブロック図である。
図１２の１０がＭＲＦであり、ｎウィンドウ分のlocal及びin/outを保持する。図１２の１１がＷＲＦであり、globalが８エントリ、localが２４エントリ、in/outが３２エントリの合計６４エントリからなる。
【００６５】
図１２の１２のexecution  unit、memory  unitへのオペランド／ストアデータ供給はＷＲＦのみから行う。一方、execution  unit、memory  unitからの演算/Load結果はＭＲＦ、ＷＲＦ両方に書き込まれる。このようにすることでＭＲＦとＷＲＦの間の一貫性を保つことができる。
【００６６】
ＷＲＦへのアクセスは、ウィンドウポインタＷＣＷＰ［３：０］を介してアクセスする。
ＭＲＦ→ＷＲＦの転送は、ＭＲＦ中のlocalから１ウィンドウ（８エントリ）、in/outから１ウィンドウ（８エントリ）の合わせて１６エントリのレジスタデータをＷＲＦへ先見転送する転送パスを具備する。
【００６７】
ＳＡＶＥ、ＲＥＳＴＯＲＥ以前の全命令の完了に伴い、この先見転送パスを用いＳＡＶＥ命令の場合はＣＷＰ＋２のout（＝ＣＷＰ＋３のin）とlocal、ＲＥＳＴＯＲＥ命令の場合にはＣＷＰ−２のinとlocalをＷＲＦ中の未使用ウィンドウに転送する。
【００６８】
本実施形態では、８ウィンドウ合計１３６エントリのレジスタ（in、out、local、global）を持つ。これらのレジスタの内、in、out、localの１２８本はマスタレジスタファイル（ＭＲＦ）に実装し、常に最新値を保持するように更新の制御を行う。一方、演算器へのオペランドの供給はＭＲＦからは行わず、ワーキングレジスタファイル（ＷＲＦ）より行う。また、ウィンドウ切り替えの必要のないglobalはＷＲＦに実装する。
・ワーキングレジスタファイル（ＷＲＦ）
ＷＲＦはＭＲＦ中のＣＷＰ、ＣＷＰ−１、ＣＷＰ＋１の３ウィンドウ（全６４エントリ）は６ビットの物理アドレスを介してアクセスする。
【００６９】
ＷＲＦ中でのＣＷＰの指すウィンドウは浮動であり、現在のＣＷＰが指すウィンドウを指示するための４ビットからなるＷＣＷＰ（Working  Register  Current  Window  Pointer）レジスタを設ける。ＷＣＷＰ［３：２］はlocalのＣＷＰに替えて、このＷＣＷＰを用いる。
【００７０】
全てのレジスタアクセス時にはreg番号とＷＣＷＰから図７によって求められる６ビットの物理アドレスを用いる。
図１３は、ＷＲＦへの物理アドレスのマッピングの方法を示す図である。
【００７１】
ＷＲＦの６４エントリは８エントリずつのｇ、ｌ１、ｌ２、ｌ３、ｉｏ１、ｉｏ２、ｉｏ３、ｉｏ４の８グループに分けられ、図１３のように物理アドレスにマッピングされる。
【００７２】
図１４は、ＷＲＦのブロック図である。
これら６４エントリのレジスタは実装上は１６エントリずつのモジュールに分けられ、図１４のように構成する。
【００７３】
ＷＲＦへの操作はＲＥＡＤ（ＷＲＦ→execution  unit）、ＷＲＩＴＥ（execution  unit→ＷＲＦ）とＳＡＶＥ／ＲＥＳＴＯＲＥに伴うＭＯＶＥ（ＭＲＦ→ＷＲＦ）の３種類の操作を行う必要がある。ＲＥＡＤ、ＷＲＩＴＥは図１４（１５）、（１４）の物理アドレスを用いて行われる。図１４（１）（２）（３）（４）で示されるように１６エントリからなるモジュールをbank１、２、３、４とする。bank１はは％ｇ０〜％ｇ３（％ｌ０〜％ｌ３）、bank２は％ｇ４〜％ｇ７（％ｌ４〜％ｌ７）、bank３は％ｉ０〜％ｉ３（％ｏ０〜％ｏ３）、bank４は％ｉ４〜％ｉ７（％ｏ４〜％ｏ７）を保持する。
【００７４】
図１５は、bankの選び方を示す図である。図１６は、物理アドレス［５：０］のマッピング方法を示す図である。
どのbankにＲＥＡＤ、ＷＲＩＴＥするかは物理アドレスのビット３：２により図１５のように決定し、bank内アドレスを物理アドレスのビット１：０、５：４により決定する。
【００７５】
このように前述の図８で説明した物理アドレスの各ビットの本実施形態における意味は図１６のようになる。
よって、本実施形態において物理アドレスが与えられた場合のＷＲＦへのアクセスは物理アドレスのビット３：２によりbankが決定され、物理アドレスのビット１：０を上位、ビット５：４を下位として４ビットのbank内アドレスを生成し、バンク内のレジスタにアクセスすることにより行う。
【００７６】
図１７は、ＭＯＶＥ先のＷＣＷＰを示す図である。
ＭＯＶＥは図１４（７）、（８）、（１１）、（１２）により転送先のbank内アドレスを指定して転送データを書き込む。ＷＣＷＰ［３：２］でlocalの書き込み先、ＷＣＷＰ［１：０］でin/outの書き込み先を指定する。転送先のＷＣＷＰは図１７のように決定する。
【００７７】
ＭＲＦ→ＷＲＦ転送は先見転送であるのでＳＡＶＥ時には＋２、ＲＥＳＴＯＲＥ時には−２のＷＣＷＰにアクセスする。また、ＷＰＣＷＰ［３：２］＝“００”はglobalに割り当てられているので、ＷＣＷＰ［３：２］は“０１”→“１０”→“１１”→“０１”→・・・と変化していく必要があるので、図１７のＷＣＷＰ［３：２］は“ｍｏｄ  ３”の後で“＋１”を行う。そのため、“ｍｏｄ  ３”の左の括弧内の演算では補正のための“−１”を行う。
【００７８】
また、ＳＡＶＥ時には２個先のウィンドウのoutを転送してくるべきであるが、ＷＣＷＰ［１：０］はinを指し示すポインタであるので、２個先のoutとオーバラップしている３個先のinを指し示し転送を行う。
【００７９】
更に、ＭＯＶＥのための図１４（５）（６）（９）（１０）のバス幅を削減するために２フェーズに分けて転送する。
フェーズ＝０の時に偶数reg番号（ｌ［０］、ｌ［２］、ｌ［４］、ｌ［６］、ｉｏ［０］、ｉｏ［２］、ｉｏ［４］、ｉｏ［６］）を転送し、
フェーズ＝１の時に奇数reg番号（ｌ［１］、ｌ［３］、ｌ［５］、ｌ［７］、ｉｏ［１］、ｉｏ［３］、ｉｏ［５］、ｉｏ［７］）を転送する。
【００８０】
ＭＯＶＥ操作を行うときのＷＲＦ内転送先アドレスである、ＭＯＶＥ ｄｅｓｔ ａｄｄｒはbank内のhigh/lowを識別するビットとフェーズを表すビットが上位２ビット、ＷＣＷＰ［３：２］（ｏｒＷＣＷＰ［１：０］）が下位２ビットの４ビットよりなる。
【００８１】
図１８は、ＭＯＶＥ ｄｅｓｔ ａｄｄｒのＷＲＦ内転送先レジスタを説明する図である。
ＭＯＶＥ ｄｅｓｔ ａｄｄｒはbank１、２のlocalアクセス用の図１４（７）、（８）とbank３、４のin、outアクセス用の図１４（１１）、（１２）の４つに分かれ、そのアドレスでのアクセス先は図１８のようになる。
【００８２】
ＭＯＶＥ時のＷＲＦへの書き込み図１４（５）のデータをbank１、２−ｌｏｗ内の図１４（７）のbank内アドレスで示されるレジスタに書き込み、図１４（６）のデータをbank１，２−ｈｉｇｈ内の図１４（８）のbank内のアドレスで示されるレジスタに書き込み、図１４（９）のデータをbank３、４−ｌｏｗ内の図１４（１１）のbank内アドレスで示されるレジスタに書き込み、図１４（１０）のデータをbank３、４−ｈｉｇｈ内の図１４（１２）のbank内アドレスで示されるレジスタに書き込むことにより処理する。
【００８３】
また、処理レイテンシは２度に分けた場合でもそれぞれの操作は後述するようにパイプライン化して行えるので、増加は１のみである。
・マスタレジスタファイル（ＭＲＦ）
図１９は、ＭＲＦの実施形態のブロック図である。図２０は、ＭＲＦへの書き込み時のレジスタとウィンドウの対応を示す図である。
【００８４】
ＭＲＦはin/outを保持する領域（図１９（１））とlocalを保持売る領域（図１９（２））に分けられ、全てのウィンドウのin/out、localを保持し、ＷＲＩＴＥとＭＯＶＥ操作を行う。ＷＲＦと異なりＣＷＰよりＭＲＦ内のウィンドウ位置を決定できるので、ウィンドウへのアクセスにはＣＷＰを用いる（図１９（５）、（８））。
【００８５】
ＭＲＦへのＷＲＩＴＥ操作による書き込み先は、レジスタを更新する命令のdest  regフィールドに示されているreg番号（図１９（４））によって図２０のように異なる。この処理は図１９（６）、（７）によりdest ＣＷＰもしくはdest ＣＷＰもしくはdest ＣＷＰ＋１を選択することで実現する。
【００８６】
図２１は、ＭＲＦへの書き込み時のレジスタとウィンドウの関係を示した図である。
ＭＯＶＥ時にはＳＡＶＥ／ＲＥＳＴＯＲＥの処理の違いで読み出されるレジスタが図２１のように異なる。前述の通り本実施形態のレジスタウィンドウはＭＲＦ→ＷＲＦ間転送で先見転送を行うので転送されるウィンドウはＳＡＶＥ／ＲＥＳＴＯＲＥで切り替わったウィンドウの更に１個先である。ＳＡＶＥ時にはmove ＣＷＰ＋２、ＲＥＳＴＯＲＥ時にはmove ＣＷＰ−２のＭＲＦから転送を行う。ただし、ＳＡＶＥ時にはmove ＣＷＰ＋２のoutを転送する必要があり、move ＣＷＰ＋２のoutとmove ＣＷＰ＋３のinはオーバラップしているため、inを基準に考えるとＳＡＶＥ時に転送してくるinレジスタは図２１のようにmove ＣＷＰ＋３となる。
【００８７】
この処理は図１９（９）、（１０）、（１１）、（１２）によりmove ＣＷＰ−２もしくはmove ＣＷＰ＋２もしくはmove ＣＷＰ＋３を選択することで実現する。
【００８８】
また、図１９（１３）によりフェーズ＝０の時は偶数reg番号、フェーズ＝１の時には奇数reg番号のレジスタがＭＲＦより読み出されるように制御される。図１９（１３）のＲＥＡＤポートからは同時に８個のレジスタが読み出され、そのＲＥＡＤポートの出力が図１４（５）、（６）、（９）、（１０）に接続される。
【００８９】
図２２は、ＭＲＦとＷＲＦを接続したウィンドウレジスタファイルの実施形態のブロック図である。
図２２（１）がＭＲＦ、図２２（２）がＷＲＦであり、図２２（３）、（４）によりそれぞれ書き込みreg番号及びＣＷＰを指定する。ＷＲＦに書き込む場合には（dest ＣＷＰ、reg番号）の２つ組に替えてdest phy addr（図２２（６））を用いアクセスする。
【００９０】
ＷＲＦからの読み出しの際も同様に図２２（７）のsrc phy addrを用いてアクセスする。
ＳＡＶＥ／ＲＥＳＴＯＲＥ処理時には図２２（８）でmove ＣＷＰ、move ＷＣＷＰを指定し、図２２（９）によって指定されたＳＡＶＥもしくはＲＥＳＴＯＲＥを処理する。
【００９１】
このようなレジスタへのＲＥＡＤ、ＷＲＩＴＥ、ＭＯＶＥ処理はアウトオブオーダで処理されるので、図２２（４）、（８）のdest/move ＣＷＰや図２２（１０）のmove ＷＣＷＰや図２２（６）、（７）のdest/src phy addrは処理される個々の命令毎に異なる値を用いる。これらの命令毎のＣＷＰ、ＷＣＷＰ、phy addrは図１０（３）のリザベーション・ステーション内に、実行待ち命令と合わせて保持し、その命令が実行されるときに同時に読み出されて使用される。
【００９２】
図２３は、ＣＷＰ、ＷＣＷＰの意味を示す図である。
これまでに説明した各ＣＷＰ、ＷＣＷＰの意味を図２３にまとめる。
・ＳＡＶＥ／ＲＥＳＴＯＲＥ処理
図２４は、ＷＲＦへの先見転送の様子を示す図である。
【００９３】
ＳＡＶＥ／ＲＥＳＴＯＲＥ時には、図２４のようにＷＲＦのcurrent  windowが変更される。
これはＷＣＷＰを後述する方法で変更することで実現する。
【００９４】
１回のＳＡＶＥ／ＲＥＳＴＯＲＥ処理はＷＣＷＰの変更のみで済むが、引き続いてＳＡＶＥ／ＲＥＳＴＯＲＥするには新たなウィンドウをＭＲＦより転送しておく必要がある。
【００９５】
そこでＳＡＶＥ／ＲＥＳＴＯＲＥ処理が行われると同時に新しいウィンドウをＭＲＦより転送しておき、次回のＳＡＶＥ／ＲＥＳＴＯＲＥに備える。
例えば図２４（１）の状態ではＷＣＷＰ＝“０１００”で、local＝ｌ１、in＝ｉｏ１、out＝ｉｏ２というマッピングになっている。この状態からＳＡＶＥ命令を実行するとｌ３にＣＷＰ＋２のlocal、ｉｏ４にＣＷＰ＋２のoutが転送され、図２４（２）の状態になる。この状態ではＷＣＷＰ＝“１００１”で、local＝ｌ２、in＝ｉｏ２、out＝ｉｏ３というマッピングになっている。
【００９６】
逆に、図２４（２）の状態からＲＥＳＴＯＲＥ命令を実行するとｌ３にＣＷＰ−２のlocal、ｉｏ４にＣＷＰ−２のinが転送され図２４（１）の状態に戻る。ＳＡＶＥ時にはＣＷＰ＋２のlocalとout、ＲＥＳＴＯＲＥ時にはＣＷＰ−２のlocalとinを新たにＭＲＦより転送する必要がある。
【００９７】
この目的のためにＭＲＦとＷＲＦの間に５１２ビット（８バイト×８ワード）のＭＯＶＥ  ＢＵＳを張り、ＭＲＦ→ＷＲＦ間のレジスタデータ転送に用いる。１ウィンドウを転送するには１６エントリ転送する必要があるので、２フェーズに分けて処理する。
【００９８】
このような転送のためのレイテンシが存在するためＳＡＶＥ、ＲＥＳＴＯＲＥが連続する場合、後続ＳＡＶＥ、ＲＥＳＴＯＲＥは先行ＳＡＶＥ、ＲＥＳＴＯＲＥのＭＯＶＥ処理の間にインタロックが発生する。
【００９９】
図２５は、ＳＡＶＥ命令が連続した場合の処理のタイムチャートを示す図である。
図２５のプログラムのようにＳＡＶＥ命令が連続した場合を考えると、図２５のタイムチャートのようにＳＡＶＥ（ａ）はフェーズ＝０で偶数reg番号のレジスタを転送し、フェーズ＝１で奇数reg番号のレジスタを転送する。それぞれのフェーズはパイピング可能なのでＳＡＶＥ、ＲＥＳＴＯＲＥのレイテンシはＭＯＶＥのレイテンシ＋１となる。従って、ＳＡＶＥ→ＳＡＶＥ、ＲＥＳＴＯＲＥ→ＲＥＳＴＯＲＥのような処理の間は最低ＭＯＶＥのレイテンシ＋１のインタロックが必要である。一方、ＳＡＶＥ→ＲＥＳＴＯＲＥ、ＲＥＳＴＯＲＥ→ＳＡＶＥは連続実行が可能である。ＭＯＶＥ  ＢＵＳにフェーズ０でlocal、in（out）の偶数reg番号のレジスタ（ｌ０、ｌ２、ｌ４、ｌ６、ｉ０（ｏ０）、ｉ２（ｏ２）、ｉ４（ｏ４）、ｉ６（ｏ６））の内容を載せ、フェーズ＝１でlocal、in（out）の奇数reg番号のレジスタ（ｌ１、ｌ３、ｌ５、ｌ７、ｉ１（ｏ１）、ｉ３（ｏ３）、ｉ５（ｏ５）、ｉ７（ｏ７））の内容を載せる。
【０１００】
ＳＡＶＥ時にはＣＷＰ＋２のウィンドウをＭＯＶＥし、ＲＥＳＴＯＲＥ時にはＣＷＰ−２のウィンドウをＭＯＶＥする必要がある。
以上のＳＡＶＥ、ＲＥＳＴＯＲＥ処理をまとめると以下のようになる。
【０１０１】
図２６は、ＳＡＶＥ処理の場合のＷＲＦのbankへの書き込み処理を説明する図である。
ＳＡＶＥ時の処理
・ＭＲＦからはＣＷＰ＋２のlocalとoutをＭＯＶＥ  ＢＵＳに載せる。
・ＭＯＶＥ  ＢＵＳのデータをＷＲＦ内のそれぞれのbankに書き込む。書き込み先bank内アドレスは図２６の通り。
・ＷＣＷＰを以下の通り更新する。
【０１０２】
new  ＷＣＷＰ［３：２］＝（ＷＣＷＰ［３：２］＋１−１）ｍｏｄ  ３＋１
new  ＷＣＷＰ［１：０］＝（ＷＣＷＰ［１：０］＋１）ｍｏｄ  ４
図２７は、ＲＥＳＴＯＲＥ処理の場合のＷＲＦのbankへの書き込み処理を説明する図である。
【０１０３】
ＲＥＳＴＯＲＥ時の処理
・ＭＲＦからはＣＷＰ−２のlocalとinをＭＯＶＥ  ＢＵＳに載せる。
・ＭＯＶＥ  ＢＵＳのデータをＷＲＦ内のそれぞれのbankに書き込む。書き込み先bank内アドレスは図２７の通り。
・ＷＣＷＰを以下の通り更新する。
【０１０４】
new  ＷＣＷＰ［３：２］＝（ＷＣＷＰ［３：２］−１−１）ｍｏｄ  ３＋１
new  ＷＣＷＰ［１：０］＝（ＷＣＷＰ［１：０］−１）ｍｏｄ  ４
（付記１）マスタレジスタファイルから命令処理に使用されるデータをワーキングレジスタファイルに保持し、命令処理に使用されるデータの読み出しをワーキングレジスタファイルから行うレジスタファイルにおいて、
該マスタレジスタファイルにアクセスする場合の現在のウィンドウ位置を示すカレントウィンドウポインタ手段と、
該ワーキングレジスタファイルにアクセスする場合の現在のウィンドウ位置を示すワーキングレジスタウィンドウカレントポインタ手段と、
該マスタレジスタファイルは、情報処理装置の具備するレジスタウィンドウの全ウィンドウのデータを保持し、該ワーキングレジスタファイルは該マスタレジスタファイル中の該カレントウィンドウポインタで示されるウィンドウとその前後のウィンドウのデータを保持するよう、該カレントウィンドウポインタの変更時には、該マスタレジスタファイルから該ワーキングレジスタファイルへデータを転送し、該ワーキングレジスタファイル内のデータを更新する手段を備えることを特徴とするレジスタファイル。
【０１０５】
（付記２）前記更新手段は、カレントウィンドウポインタの変更時に、前記カレントウィンドウポインタ手段が示す前記マスタレジスタファイルのウィンドウの１つ前もしくは１つ後のウィンドウのデータを前記ワーキングレジスタファイルに書き込むことを特徴とする付記１に記載のレジスタファイル。
【０１０６】
（付記３）前記カレントウィンドウポインタ手段が指し示す、前記マスタレジスタファイルのウィンドウの切り替え後に、次のウィンドウ切り替え命令が実行される場合に先立って、該ウィンドウ切り替え時に、次のウィンドウ切り替え命令で必要になるウィンドウのデータを予め該マスタレジスタファイルから前記ワーキングレジスタファイルに転送することを特徴とする付記１に記載のレジスタファイル。
【０１０７】
（付記４）前記マスタレジスタファイルと前記ワーキングレジスタファイルは、オーバラップウィンドウ方式を使用したウィンドウレジスタであることを特徴とする付記１に記載のレジスタファイル。
【０１０８】
（付記５）前記マスタレジスタファイルから前記ワーキングレジスタファイルにウィンドウのデータを転送する場合、オーバラップしたデータについては転送を行わないことを特徴とする付記４に記載のレジスタファイル。
【０１０９】
（付記６）前記マスタレジスタファイルから前記ワーキングレジスタファイルへの転送は、２つのフェーズに分けて行うことを特徴とする付記１に記載のレジスタファイル。
【０１１０】
（付記７）前記マスタレジスタファイルは、論理的構成が、リング状に構成されていることを特徴とする付記１に記載のレジスタファイル。
（付記８）前記レジスタファイルにデータを書き込む場合には、前記マスタレジスタファイルと前記ワーキングレジスタファイルに同時に書き込み、該レジスタファイルからデータを読み出す場合には、該ワーキングレジスタファイルのみから読み出すことを特徴とする付記１に記載のレジスタファイル。
【０１１１】
（付記９）マスタレジスタファイルから命令処理に使用されるデータをワーキングレジスタファイルに保持し、命令処理に使用されるデータの読み出しをワーキングレジスタファイルから行うレジスタファイルの制御方法において、
該マスタレジスタファイルにアクセスする場合の現在のウィンドウ位置を示すカレントウィンドウポインタと、該ワーキングレジスタファイルにアクセスする場合の現在のウィンドウ位置を示すワーキングレジスタウィンドウカレントポインタとを設けるステップと、
該マスタレジスタファイルが、情報処理装置の具備するレジスタウィンドウの全ウィンドウのデータを保持し、該ワーキングレジスタファイルは該マスタレジスタファイル中の該カレントウィンドウポインタで示されるウィンドウとその前後のウィンドウのデータを保持するよう、該カレントウィンドウポインタの変更時には、該マスタレジスタファイルから該ワーキングレジスタファイルへデータを転送し、該ワーキングレジスタファイル内のデータを更新するステップを備えることを特徴とするレジスタファイルの制御方法。
【０１１２】
（付記１０）前記更新ステップは、カレントウィンドウポインタの変更時に前記カレントウィンドウポインタが示す前記マスタレジスタファイルのウィンドウの１つ前もしくは１つ後のウィンドウのデータを前記ワーキングレジスタファイルに書き込むことを特徴とする付記９に記載のレジスタファイルの制御方法。
【０１１３】
（付記１１）前記カレントウィンドウポインタが指し示す、前記マスタレジスタファイルのウィンドウの切り替え後に、次のウィンドウ切り替え命令が実行される場合に先立って、該ウィンドウ切り替え時に、次のウィンドウ切り替え命令で必要になるウィンドウのデータを予め該マスタレジスタファイルから前記ワーキングレジスタファイルに転送することを特徴とする付記９に記載のレジスタファイルの制御方法。
【０１１４】
（付記１２）前記マスタレジスタファイルと前記ワーキングレジスタファイルは、オーバラップウィンドウ方式を使用したウィンドウレジスタであることを特徴とする付記９に記載のレジスタファイルの制御方法。
【０１１５】
（付記１３）前記マスタレジスタファイルから前記ワーキングレジスタファイルにウィンドウのデータを転送する場合、オーバラップしたデータについては転送を行わないことを特徴とする付記１２に記載のレジスタファイルの制御方法。
【０１１６】
（付記１４）前記マスタレジスタファイルから前記ワーキングレジスタファイルへの転送は、２つのフェーズに分けて行うことを特徴とする付記９に記載のレジスタファイルの制御方法。
【０１１７】
（付記１５）前記マスタレジスタファイルは、論理的構成が、リング状に構成されていることを特徴とする付記９に記載のレジスタファイルの制御方法。
（付記１６）前記レジスタファイルにデータを書き込む場合には、前記マスタレジスタファイルと前記ワーキングレジスタファイルに同時に書き込み、該レジスタファイルからデータを読み出す場合には、該ワーキングレジスタファイルのみから読み出すことを特徴とする付記９に記載のレジスタファイルの制御方法。
【０１１８】
【発明の効果】
本発明によれば、ワーキングレジスタを複数ウィンドウ分保持することにより、アウトオブオーダ命令実行方式における命令実行順序の入れ替えをウィンドウ切り替え命令を追い越して命令実行順序の変更を可能とするので、アウトオブオーダ命令実行方式の情報処理装置の処理速度を改善することができる。
【図面の簡単な説明】
【図１】先見転送を説明する図（その１）である。
【図２】先見転送を説明する図（その２）である。
【図３】先見転送を説明する図（その３）である。
【図４】ＣＷＰとＷＰの対応を示す図である。
【図５】ＷＣＷＰとＷＰの変換方法を示す図である。
【図６】ＷＲＦへの物理アドレスの割当て方法を説明する図である。
【図７】レジスタ番号から物理アドレスへの変換方法を示す図（その１）である。
【図８】レジスタ番号から物理アドレスへの変換方法を示す図（その２）である。
【図９】ＷＣＷＰの更新操作の方法を示す図である。
【図１０】本実施形態で想定するアウトオブオーダ命令実行方式の計算機の命令処理を説明する図である。
【図１１】アウトオブオーダ実行の様子を示す図である。
【図１２】本実施形態の構成を適用したｎウィンドウからなるウィンドウレジスタファイルのブロック図である。
【図１３】ＷＲＦへの物理アドレスのマッピングの方法を示す図である。
【図１４】ＷＲＦのブロック図である。
【図１５】  bankの選び方を示す図である。
【図１６】物理アドレス［５：０］のマッピング方法を示す図である。
【図１７】ＭＯＶＥ先のＷＣＷＰを示す図である。
【図１８】ＭＯＶＥ ｄｅｓｔ ａｄｄｒのＷＲＦ内転送先レジスタを説明する図である。
【図１９】ＭＲＦの実施形態のブロック図である。
【図２０】ＭＲＦへの書き込み時のレジスタとウィンドウの対応を示す図である。
【図２１】ＭＯＶＥ時のレジスタとウィンドウの関係を示した図である。
【図２２】ＭＲＦとＷＲＦを接続したウィンドウレジスタファイルの実施形態のブロック図である。
【図２３】ＣＷＰ、ＷＣＷＰ、phy addrの意味を示す図である。
【図２４】ＷＲＦへの先見転送の様子を示す図である。
【図２５】ＳＡＶＥ命令が連続した場合の処理のタイムチャートを示す図である。
【図２６】ＳＡＶＥ処理の場合のＷＲＦのbankへの書き込み処理を説明する図である。
【図２７】ＲＥＳＴＯＲＥ処理の場合のＷＲＦのbankへの書き込み処理を説明する図である。
【図２８】リング状レジスタファイルの構成を示した図である。
【図２９】マスタレジスタファイルとワーキングレジスタファイルからなるレンズファイルの構成を示す図である。
【符号の説明】
１      命令キャッシュ
２      命令フェッチ機構
３      リザベーション・ステーション
４      演算スロット
５、８      レジスタファイル
６      演算器
７      リザルトバッファ
１０      ＭＲＦ（マスタレジスタファイル）
１１      ＷＲＦ（ワーキングレジスタファイル）
１２      execution  unit、memory  unit
【図１】
0003737755.tif 000002
【図２】
0003737755.tif 000003
【図３】
0003737755.tif 000004
【図４】
0003737755.tif 000005
【図５】
0003737755.tif 000006
【図６】
0003737755.tif 000007
【図７】
0003737755.tif 000008
【図８】
0003737755.tif 000009
【図９】
0003737755.tif 000010
【図１０】
0003737755.tif 000011
【図１１】
0003737755.tif 000012
【図１２】
0003737755.tif 000013
【図１３】
0003737755.tif 000014
【図１４】
0003737755.tif 000015
【図１５】
0003737755.tif 000016
【図１６】
0003737755.tif 000017
【図１７】
0003737755.tif 000018
【図１８】
0003737755.tif 000019
【図１９】
0003737755.tif 000020
【図２０】
0003737755.tif 000021
【図２１】
0003737755.tif 000022
【図２２】
0003737755.tif 000023
【図２３】
0003737755.tif 000024
【図２４】
0003737755.tif 000025
【図２５】
0003737755.tif 000026
【図２６】
0003737755.tif 000027
【図２７】
0003737755.tif 000028
【図２８】
0003737755.tif 000029
【図２９】
0003737755.tif 000030