(57)【要約】【課題】レジスタウィンドウの番号を１変化させる命令の待機時間を短縮することができる演算処理装置及びその制御方法を提供することを課題とする。【解決手段】演算処理装置は、アクセス可能な複数のレジスタウィンドウに対応する複数のレジスタと、現在のレジスタウィンドウの番号を１変化させる第１の命令を実行中に前記第１の命令と同じ方向に現在のレジスタウィンドウの番号を１変化させる第２の命令が入力されると、前記第１の命令の実行が完了するまで前記第２の命令のデコードを抑止し、現在のレジスタウィンドウの番号を１変化させる第１の命令を実行中に前記第１の命令と逆の方向に現在のレジスタウィンドウの番号を１変化させる第２の命令が入力されると、前記第１の命令の実行中に前記第２の命令のデコードを行う命令デコーダとを有する。【選択図】図６
2015014891.tif 000002
【特許請求の範囲】
【請求項１】
アクセス可能な複数のレジスタウィンドウに対応する複数のレジスタと、
現在のレジスタウィンドウの番号を１変化させる第１の命令を実行中に前記第１の命令と同じ方向に現在のレジスタウィンドウの番号を１変化させる第２の命令が入力されると、前記第１の命令の実行が完了するまで前記第２の命令のデコードを抑止し、現在のレジスタウィンドウの番号を１変化させる第１の命令を実行中に前記第１の命令と逆の方向に現在のレジスタウィンドウの番号を１変化させる第２の命令が入力されると、前記第１の命令の実行中に前記第２の命令のデコードを行う命令デコーダと
を有することを特徴とする演算処理装置。
【請求項２】
さらに、前記レジスタの内容を記憶するリネーミングレジスタと、
前記リネーミングレジスタのアドレスを示す最新のレジスタリネーミングマップを記憶する最新レジスタリネーミングマップ記憶部と、
前記リネーミングレジスタのアドレスを示す古いレジスタリネーミングマップを記憶する退避レジスタリネーミングマップ記憶部とを有し、
前記第１の命令がデコードされると、前記最新レジスタリネーミングマップ記憶部に記憶されているレジスタリネーミングマップは前記退避レジスタリネーミングマップ記憶部に記憶され、前記第１の命令に対応する現在のレジスタウィンドウの前記レジスタリネーミングマップが前記最新レジスタリネーミングマップ記憶部に記憶され、
前記第１の命令と逆方向の前記第２の命令がデコードされると、前記最新レジスタリネーミングマップ記憶部に記憶されているレジスタリネーミングマップは前記退避レジスタリネーミングマップ記憶部に記憶され、前記退避レジスタリネーミングマップ記憶部に記憶されているレジスタリネーミングマップは前記最新レジスタリネーミングマップ記憶部に記憶され、
命令の完了により、前記リネーミングレジスタの内容が前記レジスタに書き込まれると、前記レジスタリネーミングマップのアドレスが無効化されることを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記レジスタウィンドウは、複数のレジスタで構成され、
各レジスタウィンドウを構成する一部のレジスタは、両隣のレジスタウィンドウを構成する一部のレジスタと共有されることを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
各レジスタウィンドウは、インレジスタ、ローカルレジスタ及びアウトレジスタを有し、
前記複数のレジスタウィンドウはリング状に構成されることを特徴とする請求項１〜３のいずれか１項に記載の演算処理装置。
【請求項５】
アクセス可能な複数のレジスタウィンドウに対応する複数のレジスタと、命令デコーダとを有する演算処理装置の制御方法であって、
前記命令デコーダが、現在のレジスタウィンドウの番号を１変化させる第１の命令を実行中に前記第１の命令と同じ方向に現在のレジスタウィンドウの番号を１変化させる第２の命令が入力されると、前記第１の命令の実行が完了するまで前記第２の命令のデコードを抑止し、現在のレジスタウィンドウの番号を１変化させる第１の命令を実行中に前記第１の命令と逆の方向に現在のレジスタウィンドウの番号を１変化させる第２の命令が入力されると、前記第１の命令の実行中に前記第２の命令のデコードを行うことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
レジスタウィンドウを複数備えるレジスタファイルと、レジスタファイルに保持されているデータをオペランドとする命令を実行する演算手段とを有する演算処理装置が知られている（例えば、特許文献１参照）。カレントウィンドウポインタ手段は、レジスタファイルが備える複数のレジスタウィンドウの中から、カレントウィンドウとなるレジスタウィンドウを指定するアドレス情報を保持する。カレントウィンドウの切り替えを指示するウィンドウ切り替え命令がデコードされたとき、カレントウィンドウポインタ手段が保持するアドレス情報を更新する。ウィンドウ切り替え命令のデコードが開始されてからコミットが開始される直前までの間は、演算手段が、更新前のアドレス情報が指定する第１のレジスタウィンドウのデータと更新後のアドレス情報が指定する第２のレジスタウィンドウのデータを、レジスタファイルから読み出しできるように制御する。
【０００３】
また、ｉｎレジスタ、ｌｏｃａｌレジスタ及びｏｕｔレジスタの順序によるレジスタの組から構成されるレジスタウィンドウを複数有し、複数のレジスタウィンドウがリング状に構成される少なくとも一つのレジスタファイルを有する演算処理装置が知られている（例えば、特許文献２参照）。カレントウィンドウポインタ手段は、レジスタウィンドウにアクセスする場合において、現在のレジスタウィンドウ位置をポインタ値により示す。カレントレジスタは、カレントウィンドウポインタ手段が示すポインタ値により指定されるレジスタウィンドウが保持するデータを、レジスタファイルから読み出して保持する。置換バッファは、レジスタファイルとカレントレジスタとの間に実装され、レジスタファイルからカレントレジスタに転送されるデータを保持する。演算手段は、ウィンドウ切替命令と、カレントレジスタに保持されたデータもしくは置換バッファに保持されたデータに係る命令処理とを実行する。演算手段がレジスタウィンドウの切替を実行するウィンドウ切替命令を実行した場合に、ウィンドウ切替命令がデコードされたときには、ウィンドウ切替命令の実行によってカレントウィンドウポインタ手段が指定するレジスタウィンドウのデータを置換バッファに転送する。
【０００４】
また、演算処理を行う演算部と、各々Ｎ本のレジスタを備えたＫ枚のウィンドウを有し、各ウィンドウを構成する一部のレジスタは両隣のウィンドウを構成するレジスタと共有され、共有部分をサブルーチン呼び出し時の引数の引き渡しに使用するように構成されたレジスタウィンドウとを有する演算処理装置が知られている（例えば、特許文献３参照）。カレントウィンドウ選択手段は、Ｋ枚のウィンドウのうちの１枚を選択する。レジスタ選択手段は、読み出しアドレスにより読み出しレジスタを選択する。制御部は、カレントウィンドウ選択手段においてウィンドウを選択するためのウィンドウアドレス信号を出力する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２３４０７５号公報
【特許文献２】特開２００７−８７１０８号公報
【特許文献３】国際公開第２０１０／０１６０９７号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
レジスタウィンドウの番号を１変化させるウィンドウ切替命令を実行中に他のウィンドウ切替命令が入力されると、実行が完了するまで、入力されたウィンドウ切替命令のデコードが待機される。その場合、命令の実行速度が低下する課題がある。
【０００７】
１つの側面では、本発明の目的は、レジスタウィンドウの番号を１変化させる命令の待機時間を短縮することができる演算処理装置及び演算処理装置の制御方法を提供することである。
【課題を解決するための手段】
【０００８】
演算処理装置は、アクセス可能な複数のレジスタウィンドウに対応する複数のレジスタと、現在のレジスタウィンドウの番号を１変化させる第１の命令を実行中に前記第１の命令と同じ方向に現在のレジスタウィンドウの番号を１変化させる第２の命令が入力されると、前記第１の命令の実行が完了するまで前記第２の命令のデコードを抑止し、現在のレジスタウィンドウの番号を１変化させる第１の命令を実行中に前記第１の命令と逆の方向に現在のレジスタウィンドウの番号を１変化させる第２の命令が入力されると、前記第１の命令の実行中に前記第２の命令のデコードを行う命令デコーダとを有する。
【発明の効果】
【０００９】
第１の命令の実行中に第２の命令のデコードを行うことができるので、第２の命令を高速に処理することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本実施形態による演算処理システムの構成例を示す図である。
【図２】図２は、図１のコア（演算処理装置）の構成例を示す図である。
【図３】図３は、図２の固定小数点レジスタの構成例を示す図である。
【図４】図４は、レジスタリネーミングマップの構成例を示す図である。
【図５】図５は、図２のコア（演算処理装置）の一部の構成例を示す図である。
【図６】図６は、命令デコーダの制御方法を示すフローチャートである。
【図７】図７は、ＳＡＶＥ命令が入力され、その後にＲＥＳＴＯＲＥ命令が入力される場合の制御方法を示す図である。
【図８】図８は、ＳＡＶＥ命令が入力され、その後にＲＥＳＴＯＲＥ命令が入力される場合の制御方法を示す図である。
【図９】図９は、ＳＡＶＥ命令が入力され、その後にＳＡＶＥ命令が入力される場合の制御方法を示す図である。
【図１０】図１０は、レジスタリネーミングマップを制御する回路の構成例を示す図である。
【図１１】図１１は、レジスタウィンドウを切り替える命令の制御方法を示す図である。
【図１２】図１２は、図１１の信号SAVE_PENDING及びRESTORE_PENDINGの生成回路の構成例を示す図である。
【図１３】図１３は、図１１の切り替え方向LAST_SAVEの生成回路の構成例を示す図である。
【図１４】図１４は、命令デコード抑止信号INH_D_RELの生成回路の構成例を示す図である。
【図１５】図１５は、読み出しレジスタウィンドウを示す図である。
【図１６】図１６は、読み出しレジスタウィンドウカウンタを示す図である。
【発明を実施するための形態】
【００１１】
図１は、本実施形態による演算処理システム１００の構成例を示す図である。演算処理システム１００は、中央処理装置（ＣＰＵ：Central Processing Unit）１０１、デュアルインラインメモリモジュール（ＤＩＭＭ：Dual Inline Memory Module）１０２、及びインターコネクト部１０３を有する。中央処理装置１０１は、複数のコア１１１、共用の２次キャッシュメモリ１１２及びメモリアクセスコントローラ（ＭＡＣ：Memory Access Controller）１１３を有する。メモリアクセスコントローラ１１３は、デュアルインラインメモリモジュール１０２及び２次キャッシュメモリ１１２のメモリアクセスを制御する。これにより、中央処理装置１０１は、デュアルインラインメモリモジュール１０２に対してデータを入出力することができる。インターコネクト部１０３は、他の装置に対してデータを入出力することができる。
【００１２】
図２は、図１のコア（演算処理装置）１１１の構成例を示す図である。命令フェッチアドレス生成器２０１は、命令フェッチを行うために、プログラムカウンタ２２０又は分岐予測機構２０５から入力した命令アドレスを選択し、選択された命令アドレスの命令フェッチリクエストを１次命令キャッシュメモリ２０２に発行する。１次命令キャッシュメモリ２０２は、それに応じた命令を命令バッファ２０３に出力する。命令バッファは、命令をバッファリングし、プログラムの順番通りに命令デコーダ２０４に命令を供給する。命令デコーダ２０４は、プログラムの順番通りに命令のデコード処理を行い、命令を発行する。命令デコーダ２０４は、デコードする命令の種類に従って、命令の実行を制御する主記憶オペランドアドレス生成用リザベーションステーション（ＲＳＡ:Reservation Station for Address generate）２０６、固定小数点演算用リザベーションステーション（ＲＳＥ:Reservation Station for Execute）２０７、浮動小数点演算用リザベーションステーション（ＲＳＦ:Reservation Station for Floating）２０８、分岐命令用リザベーションステーション（ＲＳＢＲ:Reservation Station for BRanch）２０９に必要なエントリを作成する。また、命令デコーダ２０４は、全てのデコードされた命令に対して、命令の完了を制御するコミットスタックエントリ（ＣＳＥ:Commit Stack Entry）２１０にエントリを作成する。デコードされた命令がＲＳＡ２０６、ＲＳＥ２０７、ＲＳＦ２０８にエントリを作成される場合には、固定小数点リネーミングレジスタ２１５と浮動小数点リネーミングレジスタ２１７に対応するレジスタリネーミングを行うことで、アウト・オブ・オーダー実行を行うことが可能となる。オペランドアドレス生成器２１１は、ＲＳＡ２０６のエントリに応じて、オペランドのアドレスを生成し、１次データキャッシュメモリ２１２に出力する。１次データキャッシュメモリ２１２は、生成されたオペランドアドレスのデータを固定小数点リネーミングレジスタ２１５又は浮動小数点リネーミングレジスタ２１７に出力する。演算器２１３はＲＳＥ２０７のエントリに応じて固定小数点演算を行い、演算器２１４はＲＳＦ２０８のエントリに応じて浮動小数点演算を行う。演算の実行結果は、固定小数点リネーミングレジスタ２１５と浮動小数点リネーミングレジスタ２１７に格納される。リザベーションステーション２０６〜２０９から、アウト・オブ・オーダーで実行された命令は、ＣＳＥ２１０の制御によりプログラムの順番通りに命令の完了を行い、完了した命令に対してのみ、固定小数点レジスタ２１６や浮動小数点レジスタ２１７やプログラムカウンタ２１９，２２０などのプログラマブルな資源の更新を行う。プログラムカウンタ２２０は、現在実行する命令のアドレスを出力する。プログラムカウンタ２１９は、プログラムカウンタ２２０のアドレスの次のアドレスを出力する。分岐予測機構２０５は、ＲＳＢＲ２０９のエントリに応じて、分岐命令が分岐するか否かを予測し、次に実行するアドレスを出力する。
【００１３】
図３は、図２の固定小数点レジスタ２１６の構成例を示す図である。固定小数点レジスタ２１６は、８個のレジスタウィンドウＷ０〜Ｗ７を有する。各レジスタウィンドウＷ０〜Ｗ７は、インレジスタｉｎｓ、ローカルレジスタｌｏｃａｌｓ及びアウトレジスタｏｕｔｓを有する。図４に示すように、インレジスタｉｎｓは８個のレジスタＩ０〜Ｉ７を有し、ローカルレジスタｌｏｃａｌｓは８個のレジスタＬ０〜Ｌ７を有し、アウトレジスタｏｕｔｓは８個のレジスタＯ０〜Ｏ７を有する。複数のレジスタウィンドウＷ０〜Ｗ７は、リング状に構成される。各レジスタウィンドウＷ０〜Ｗ７を構成する一部のレジスタｉｎｓ及びｏｕｔｓは、両隣のレジスタウィンドウＷ０〜Ｗ７を構成する一部のレジスタｉｎｓ及びｏｕｔｓと共有される。例えば、レジスタウィンドウＷ０のインレジスタｉｎｓはレジスタウィンドウＷ７のアウトレジスタｏｕｔｓと共有され、レジスタウィンドウＷ０のアウトレジスタｏｕｔｓはレジスタウィンドウＷ１のインレジスタｉｎｓと共有される。使用中のレジスタウィンドウＷ０〜Ｗ７の番号は、カレントウィンドウポインタ（ＣＷＰ：Current Window Pointer）によって保持される。レジスタウィンドウＷ０〜Ｗ７は、リング状に連結され、レジスタウィンドウの管理はレジスタウィンドウ番号で行われる。ＣＷＰ＝０の場合にはレジスタウィンドウＷ０が使用中のレジスタウィンドウであり、ＣＷＰ＝１の場合にはレジスタウィンドウＷ１が使用中のレジスタウィンドウであり、ＣＷＰ＝７の場合にはレジスタウィンドウＷ７が使用中のレジスタウィンドウである。レジスタウィンドウ切り替え命令には、ＣＷＰの番号をインクリメント（＋１）するＳＡＶＥ命令（セーブ命令）と、ＣＷＰの番号をデクリメント（−１）するＲＥＳＴＯＲＥ命令（リストア命令）がある。例えば、ＣＷＰ＝０の状態で、ＳＡＶＥ命令が実行されると、ＣＷＰ＝１になる。ＣＷＰ＝０の状態で、ＲＥＳＴＯＲＥ命令が実行されると、ＣＷＰ＝７になる。ＣＷＰの更新は、レジスタウィンドウを切り替える命令の完了時に行われる。
【００１４】
図４は、レジスタリネーミングマップの構成例を示す図である。上記のように、図３のインレジスタｉｎｓは８個のレジスタＩ０〜Ｉ７を有し、図３のローカルレジスタｌｏｃａｌｓは８個のレジスタＬ０〜Ｌ７を有し、図３のアウトレジスタｏｕｔｓは８個のレジスタＯ０〜Ｏ７を有する。レジスタリネーミングマップは、命令をデコードしたときに命令の書き込み先のレジスタアドレスに対して、命令デコード時に割り当てられた書き込み先のリネーミングレジスタ２１５のアドレスと、有効フラグとを有し、命令デコーダ２０４により制御される。登録されたレジスタリネーミングマップが有効なときには、有効フラグが１（有効）であり、後続の命令がソースレジスタとして使用するときには、リネーミングレジスタ２１５のアドレスを使用することにより、レジスタリネーミングの制御を行う。命令の完了により、リネーミングレジスタ２１５の内容はレジスタ２１６に書き込まれる。すなわち、リネーミングレジスタ２１５は、レジスタ２１６の内容を記憶する。命令デコーダ２０４は、完了した命令の書き込み先のリネーミングレジスタと、リネーミングマップに登録されているリネーミングレジスタ２１５のアドレスが同一の場合に、リネーミングマップの有効フラグを０にし、登録されているリネーミングマップを無効にする。
【００１５】
命令の完了によりレジスタ２１６にデータが書き込まれるまでは、リネーミングレジスタ２１５に書き込み対象のデータが書き込まれる。後続の命令は、リネーミングレジスタ２１５のデータを使用することにより、高速処理が可能になる。命令の完了によりレジスタ２１６にデータが書き込まれると、後続の命令はレジスタ２１６のデータを使用する。
【００１６】
レジスタウィンドウＷ０〜Ｗ７を切り替えるためにＳＡＶＥ命令又はＲＥＳＴＯＲＥ命令を実行すると、後続の命令は新しいレジスタウィンドウから読み出す必要がある。このために、レジスタリネーミングマップは、レジスタウィンドウＷ０〜Ｗ７を切り替える命令を命令デコードしたときに新しいレジスタウィンドウＷ０〜Ｗ７のリネーミングマップに切り替えられる。この際、新しいレジスタウィンドウのリネーミングマップの情報については、何もない状態であるために既存のレジスタリネーミングマップがリセットされる。
【００１７】
図５は、図２のコア（演算処理装置）１１１の一部の構成例を示す図である。コア１１１は、命令デコーダ２０４、リザベーションステーション２０７、命令完了制御部（ＣＳＥ）２１０及び固定小数点レジスタ２１６の他に、最新レジスタリネーミングマップ記憶部５０１及び退避レジスタリネーミングマップ記憶部５０２を有する。最新レジスタリネーミングマップ記憶部５０１は、最新のレジスタリネーミングマップ（図４）を記憶する。退避レジスタリネーミングマップ記憶部５０２は、１つ前のレジスタリネーミングマップ（図４）を記憶する。
【００１８】
図６は、命令デコーダ２０４の制御方法を示すフローチャートである。ステップＳ６０１では、命令デコーダ２０４は、入力された命令がレジスタウィンドウを切り替える命令（ＳＡＶＥ命令又はＲＥＳＴＯＲＥ命令）であるか否かを判定する。レジスタウィンドウを切り替える命令である場合にはステップＳ６０２に進み、レジスタウィンドウを切り替える命令でない場合にはステップＳ６０５に進む。
【００１９】
ステップＳ６０２では、命令デコーダ２０４は、命令完了制御部２１０からの命令完了通知を基に、レジスタウィンドウを切り替える命令が実行中か否かを判定する。実行中である場合にはステップＳ６０３に進み、実行中でない場合にはステップＳ６０５に進む。すなわち、レジスタウィンドウを切り替える命令の実行中に、他のレジスタウィンドウを切り替える命令が命令デコーダ２０４に入力された場合には、ステップＳ６０３に進む。
【００２０】
ステップＳ６０３では、命令デコーダ２０４は、レジスタウィンドウを切り替える方向が最後にレジスタウィンドウを切り替えた方向と一致するか否かを判定する。先行命令及び後続命令が共にＳＡＶＥ命令である場合は共にインクリメント方向の切り替えであるので、方向が一致すると判定される。先行命令及び後続命令が共にＲＥＳＴＯＲＥ命令である場合は共にデクリメント方向の切り替えであるので、方向が一致すると判定される。先行命令及び後続命令がＳＡＶＥ命令及びＲＥＳＴＯＲＥ命令である場合は切り替え方向が一致しないと判定される。一致する場合にはステップＳ６０４に進み、一致しない場合にはステップＳ６０５に進む。
【００２１】
ステップＳ６０４では、命令デコーダ２０４は、上記の入力されたレジスタウィンドウを切り替える命令のデコードを抑止し、ステップＳ６０２に戻る。すなわち、命令デコーダ２０４は、先行のレジスタウィンドウ切り替え命令の実行が完了するまで、後続のレジスタウィンドウ切替命令のデコード処理を待機する。
【００２２】
ステップＳ６０５では、命令デコーダ２０４は、上記の入力された命令のデコード処理を行う。その後、ステップＳ６０６では、次の命令の処理を行う。
【００２３】
図７及び図８は、ＳＡＶＥ命令が入力され、その後にＲＥＳＴＯＲＥ命令が入力される場合の制御方法を示す図であり、図６のステップＳ６０３からステップＳ６０５に進む場合を示す。最初、最新レジスタリネーミングマップ記憶部５０１は、例えばＣＷＰ＝０のリネーミングレジスタの情報（図４）を格納しており、退避レジスタリネーミングマップ記憶部５０２の内容は無効である。この状態における命令は、最新レジスタリネーミングマップ記憶部５０１に記憶されているＣＷＰ＝０のリネーミングレジスタの情報（図４）を用いて実行される。
【００２４】
次に、命令デコーダ２０４は、ＳＡＶＥ命令のデコードを行う。命令デコード時のＣＷＰ＝０は、インクリメントされ、ＣＷＰ＝１になる。最新レジスタリネーミングマップ記憶部５０１に記憶されているＣＷＰ＝０のリネーミングレジスタの情報は、退避レジスタリネーミングマップ記憶部５０２にコピーされる。最新レジスタリネーミングマップ記憶部５０１には、最新のＣＷＰ＝１のリネーミングレジスタの情報が書き込まれる。その後、ＳＡＶＥ命令の前の命令は、ＣＷＰ＝０における実行が行われ、ＳＡＶＥ命令の後の命令は、ＣＷＰ＝１における実行が行われる。
【００２５】
次に、命令デコーダ２０４は、ＲＥＳＴＯＲＥ命令のデコードを行う。命令デコード時のＣＷＰ＝１は、デクリメントされ、ＣＷＰ＝０になる。最新レジスタリネーミングマップ記憶部５０１に記憶されているＣＷＰ＝１のリネーミングレジスタの情報は、退避レジスタリネーミングマップ記憶部５０２にコピーされる。退避レジスタリネーミングマップ記憶部５０２に記憶されているＣＷＰ＝０のリネーミングレジスタの情報は、最新レジスタリネーミングマップ記憶部５０１にコピーされる。これにより、ＲＥＳＴＯＲＥ命令の後続命令は、最新レジスタリネーミングマップ記憶部５０１に記憶されているＣＷＰ＝０のリネーミングレジスタの情報を用いることができる。
【００２６】
ＳＡＶＥ命令が入力され、その後にＲＥＳＴＯＲＥ命令が入力される場合、ＣＷＰの番号は、０→１→０のように元に戻る。これに対応し、ＣＷＰ＝０のリネーミングレジスタの情報は、最新レジスタリネーミングマップ記憶部５０１→退避レジスタリネーミングマップ記憶部５０２→最新レジスタリネーミングマップ記憶部５０１の順に移動する。退避レジスタリネーミングマップ５０２を設けることにより、ＣＷＰ＝０のリネーミングレジスタの情報は、削除されることなく、最新レジスタリネーミングマップ記憶部５０１に戻すことができる。これにより、ＳＡＶＥ命令が実行中であって、ステップＳ６０３からステップＳ６０５に進み、ＲＥＳＴＯＲＥ命令のデコードを抑止することなく、ＲＥＳＴＯＲＥ命令のデコード処理をすることができ、処理を高速化することができる。なお、先行命令がＳＡＶＥ命令であり後続命令がＲＥＳＴＯＲＥ命令である場合だけでなく、先行命令がＲＥＳＴＯＲＥ命令であり後続命令がＳＡＶＥ命令である場合も同様である。
【００２７】
本実施形態では、レジスタウィンドウを切り替える命令の命令デコード時にレジスタウィンドウを切り替える方向を保持しておく。レジスタウィンドウを切り替える方向は、ＣＷＰの番号を＋１又は−１する方向を意味する。さらに、命令デコード時に、現在のレジスタリネーミングマップを破棄することなく、退避レジスタリネーミングマップ記憶部５０２に格納して保持する。退避レジスタリネーミングマップ記憶部５０２に登録されている命令が完了した場合には、退避リネーミングレジスタマップ記憶部５０２の有効フラグも無効にする。
【００２８】
レジスタウィンドウを切り替える命令が完了するまでに、再びレジスタウィンドウを切り替える命令をデコードする場合に、レジスタウィンドウの切り替え方向と保持されている切り替え方向とが一致しない場合には、ステップＳ６０３からＳ６０５に進み、命令デコードが可能となる。命令デコード時には、レジスタウィンドウを切り替える方向を更新して保持する。そして、最新レジスタリネーミングマップ記憶部５０１の情報を退避レジスタリネーミングマップ記憶部５０２に移動し、退避リネーミングマップ記憶部５０２の情報を最新レジスタリネーミングマップ記憶部５０１に移動することにより、後続命令は、正しいリネーミングマップを使用することが可能となる。
【００２９】
図９は、ＳＡＶＥ命令が入力され、その後にＳＡＶＥ命令が入力される場合の制御方法を示す図であり、図６のステップＳ６０３からステップＳ６０４に進む場合を示す。２回目のＳＡＶＥ命令が入力される前までは、図８と同じである。命令デコーダ２０４は、１回目のＳＡＶＥ命令の実行中に２回目のＳＡＶＥ命令を入力すると、ステップＳ６０３からＳ６０４に進み、２回目のＳＡＶＥ命令のデコードを抑止する。そして、命令デコーダ２０４は、１回目のＳＡＶＥ命令の実行が完了した後、ステップＳ６０２からＳ６０５に進み、２回目のＳＡＶＥ命令のデコード処理を行う。２回目のＳＡＶＥ命令により、ＣＷＰ＝２になるが、ＣＷＰ＝２のレジスタリネーミングマップは、退避レジスタリネーミングマップ記憶部５０２に保持されていないので、２回目のＳＡＶＥ命令のデコードは抑止される。なお、先行命令がＳＡＶＥ命令であり後続命令がＳＡＶＥ命令である場合だけでなく、先行命令がＲＥＳＴＯＲＥ命令であり後続命令がＲＥＳＴＯＲＥ命令である場合も同様である。
【００３０】
以上のように、レジスタウィンドウを切り替える命令をデコードするときに、レジスタウィンドウを切り替える命令が実行中であり、そのデコードする切り替え方向と最後のレジスタウィンドウを切り替える命令のレジスタウィンドウの切り替え方向とが一致する場合には、命令デコーダ２０４は、命令デコードを抑止する。そして、命令デコーダ２０４は、最後のレジスタウィンドウを切り替えた命令が完了するまで命令デコードを抑止する。
【００３１】
図１０は、レジスタリネーミングマップを制御する回路の構成例を示す図である。命令デコーダ２０４は、レジスタウィンドウを切り替える命令を命令デコードする。すると、命令デコーダ２０４は、切り替え前のレジスタウィンドウのリネーミングマップを最新レジスタリネーミングマップ記憶部５０１から退避レジスタリネーミングマップ記憶部５０２にコピーする。リネーミングマップ登録回路１００１は、新しいレジスタウィンドウのリネーミングマップを最新レジスタリネーミングマップ記憶部５０１に登録する。レジスタリネーミング回路１００２は、命令デコード時のリネーミングレジスタ２１５の制御として、最新レジスタリネーミングマップ記憶部５０１の情報を使用し、退避レジスタリネーミングマップ記憶部５０２の情報を使用しない。
【００３２】
その後、命令デコーダ２０４は、再びレジスタウィンドウを切り替える命令を命令デコードしたときには、最新レジスタリネーミングマップ記憶部５０１の情報を退避レジスタリネーミングマップ記憶部５０２に移動し、退避レジスタリネーミングマップ記憶部５０２の情報を最新レジスタリネーミングマップ記憶部５０１に移動する。命令デコード後の最新レジスタリネーミングマップ記憶部５０１と退避レジスタリネーミングマップ記憶部５０２の情報に登録されているアドレスは、そのまま有効な状態として、移動する。
【００３３】
命令の完了により、リネーミングレジスタ２１５のデータは、固定小数点レジスタ２１６に書き込まれる。退避レジスタリネーミングマップ記憶部５０２は、登録されたリネーミングレジスタ２１５のアドレスを保持している。リネーミングマップリセット回路１００４は、命令完了制御部２１０から命令完了通知を入力すると、完了した命令が、最新レジスタリネーミングマップ記憶部５０１に登録されたアドレスと一致した場合には、最新レジスタリネーミングマップ記憶部５０１に登録されたアドレスを無効にする。同様に、リネーミングマップリセット回路１００３は、命令完了制御部２１０から命令完了通知を入力すると、完了した命令が、退避レジスタリネーミングマップ記憶部５０２に登録されたアドレスと一致した場合には、退避レジスタリネーミングマップ記憶部５０２に登録されたアドレスを無効にする。これにより、最新レジスタリネーミングマップ記憶部５０１及び退避レジスタリネーミングマップ記憶部５０２は、常に最新のレジスタリネーミングに必要な状態を保つことが可能となる。
【００３４】
なお、レジスタウィンドウを切り替える命令が実行中でないときに、レジスタウィンドウを切り替える命令が命令デコードされたときには、退避レジスタリネーミングマップ記憶部５０２は、全て、無効な状態になっている。これは、レジスタウィンドウを切り替える命令が実行中でないときには、１つのレジスタウィンドウしか使用していないためである。このために、レジスタウィンドウを切り替える命令が実行中でないときには、退避レジスタリネーミングマップ記憶部５０２は、全て無効な状態であるために、退避レジスタリネーミングマップ記憶部５０２の情報を最新レジスタリネーミングマップ記憶部５０１に移動しても問題はない。
【００３５】
図１１は、レジスタウィンドウを切り替える命令の制御方法を示す図である。命令デコーダ２０４は、レジスタウィンドウを切り替える命令をデコードしたときに、レジスタウィンドウを切り替える命令が実行中であることを示す信号SAVE_PENDING及びRESTORE_PENDINGを保持する。信号SAVE_PENDING及びRESTORE_PENDINGは、それぞれ、ＳＡＶＥ命令及びＲＥＳＴＯＲＥ命令の信号であり、ＳＡＶＥ命令及びＲＥＳＴＯＲＥ命令が完了するまで保持され、ＳＡＶＥ命令及びＲＥＳＴＯＲＥ命令が完了したときにリセットされる。ＳＡＶＥ命令又はＲＥＳＴＯＲＥ命令が実行中であることを示す信号SAVE_PENDING又はRESTORE_PENDINGがオンになっているときに、再びＳＡＶＥ命令又はＲＥＳＴＯＲＥ命令を命令デコードする場合には、命令デコードを抑止して、ＳＡＶＥ命令又はＲＥＳＴＯＲＥ命令が実行中であることを示す信号SAVE_PENDING又はRESTORE_PENDINGがリセットされるまで、命令デコードを抑止する。また、ＳＡＶＥ命令又はＲＥＳＴＯＲＥ命令が実行中であることを示す信号がオンになっているときに、レジスタウィンドウを切り替える命令以外の命令をデコードするとき、固定小数点レジスタ２１６を使用する命令を命令デコードする場合には、ＳＡＶＥ命令又はＲＥＳＴＯＲＥ命令が実行中であることを示す信号SAVE_PENDING又はRESTORE_PENDINGからレジスタ２１６の読み出しアドレスを作成する。
【００３６】
命令デコーダ２０４は、レジスタウィンドウを切り替える命令（ＳＡＶＥ命令又はＲＥＳＴＯＲＥ命令）を命令デコードしたときに、レジスタウィンドウを切り替える命令が実行中であることを示す信号SAVE_PENDING又はRESTORE_PENDINGを格納すると同時に命令識別子ＩＩＤをSAVE_PENDING_IID又はRESTORE_PENDING_IIDとして格納して保持する。命令識別子ＩＩＤは、命令完了を制御しているＣＳＥ２１０のエントリの番号を示し、命令デコード時に割り当てられる。ＳＡＶＥ命令又はＲＥＳＴＯＲＥ命令が完了したときに、完了した命令識別子ＩＩＤとレジスタウィンドウを切り替える命令が実行中であることを示す命令識別子SAVE_PENDING_IID又はRESTORE_PENDING_IIDとの一致チェックを行い、一致がとれた場合に、実行中であることを示す信号SAVE_PENDING又はRESTORE_PENDINGをリセットする。
【００３７】
命令デコーダ２０４は、レジスタウィンドウを切り替える命令を命令デコードするときに、レジスタウィンドウを切り替える方向LAST_SAVEについても格納して、保持する。ＳＡＶＥ命令のときには、切り替え方向LAST_SAVEに１を格納して、ＲＥＳＴＯＲＥ命令のときには、切り替え方向LAST_SAVEに０を格納する。切り替え方向LAST_SAVEは、最後にレジスタウィンドウを切り替える命令を命令デコードしたときのレジスタウィンドウを切り替える方向を格納していることになる。
【００３８】
命令デコーダ２０４は、上記のＳＡＶＥ命令及びＲＥＳＴＯＲＥ命令が実行中であることを示す信号SAVE_PENDING及びRESTORE_PENDINGとレジスタウィンドウを切り替える方向LAST_SAVEから、後続のレジスタウィンドウを切り替える命令の命令デコードの制御を行う。レジスタウィンドウを切り替える命令が入力されると、ＳＡＶＥ命令及びＲＥＳＴＯＲＥ命令のどちらも実行中でない場合は、通常通りに命令デコードを行う。ＳＡＶＥ命令及びＲＥＳＴＯＲＥ命令のどちらかが実行中である場合、自分のレジスタウィンドウを切り替える方向と最後にレジスタウィンドウを切り替える方向LAST_SAVEが異なる場合は命令デコードを行い、同一の場合は命令デコードを抑止する。
【００３９】
図１１の“Ｄ”は、命令デコードサイクルを示している。図１１の“Ｗ”は、命令完了サイクルを示している。信号SAVE_PENDINGは、ＳＡＶＥ命令が実行中であることを示している。識別子SAVE_PENDING_IIDは、ＳＡＶＥ命令の命令識別子ＩＩＤを示しており、最後に命令デコードしたＳＡＶＥ命令の識別子ＩＩＤを示している。識別子RESTORE_PENDING_IIDは、ＲＥＳＴＯＲＥ命令の命令識別子ＩＩＤを示しており、最後に命令デコードしたＲＥＳＴＯＲＥ命令の識別子ＩＩＤを示している。切り替え方向LAST_SAVEは、ＳＡＶＥ命令を命令デコードすると「１」を格納し、ＲＥＳＴＯＲＥ命令を命令デコードすると「０」を格納する。切り替え方向LAST_SAVEは、最後にレジスタウィンドウを切り替える方向を示している。
【００４０】
（１）のＳＡＶＥ命令は、信号SAVE_PENDING及びRESTORE_PENDINGが「０」であり、ＳＡＶＥ命令及びＲＥＳＴＯＲＥ命令のどちらも実行中でないため、命令デコードＤを行う。このときに、信号SAVE_PENDINGは「１」になり、識別子SAVE_PENDING_IIDは、命令デコード時に割り当てられた「０ｘ４」になる。切り替え方向LAST_SAVEは、「１」になる。
【００４１】
（２）のＲＥＳＴＯＲＥ命令は、信号SAVE_PENDINGが「１」であり、ＳＡＶＥ命令が実行中であるために、命令デコーダ２０４は、切り替え方向LAST_SAVEをチェックする。切り替え方向LAST_SAVEは、「１」であるために、自分のＲＥＳＴＯＲＥ命令は、前回の切り替え命令とは異なる方向の切り替えのために、ＲＥＳＴＯＲＥ命令は、命令デコード可能と判断して、命令デコードＤが行われる。信号RESTORE_PENDINGは「１」になり、識別子RESTORE_PENDING_IIDは、命令デコード時に割り当てられた「０ｘ１０」になる。切り替え方向LAST_SAVEは、「０」になる。
【００４２】
（３）のＳＡＶＥ命令は、信号SAVE_PENDING及びRESTORE_PENDINGが「１」であり、ＳＡＶＥ命令とＲＥＳＴＯＲＥ命令が実行中であるため、命令デコーダ２０４は、切り替え方向LAST_SAVEをチェックする。このとき、切り替え方向LAST_SAVEは、「０」であるために、自分のＳＡＶＥ命令は、前回の切り替え命令とは異なる方向の切り替えのために、ＳＡＶＥ命令は、命令デコード可能と判断して、命令デコードが行われる。このとき、信号SAVE_PENDINGは「１」を維持し、識別子SAVE_PENDING_IIDは「０ｘ４」から命令デコード時に割り当てられた「０ｘ１５」に更新される。切り替え方向LAST_SAVEは、「１」になる。
【００４３】
（４）のＳＡＶＥ命令は、信号SAVE_PENDING及びRESTORE_PENDINGが「１」であり、ＳＡＶＥ命令とＲＥＳＴＯＲＥ命令が実行中であるため、命令デコーダ２０４は、切り替え方向LAST_SAVEをチェックする。このとき、切り替え方向LAST_SAVEは、「１」であり、自分のＳＡＶＥ命令は、前回の切り替え命令と同一方向の切り替えのために、ＳＡＶＥ命令は、命令デコードができないと判断して、命令デコードが抑止される。
【００４４】
（１）のＳＡＶＥ命令が命令完了したサイクルＷには、命令完了した識別子ＩＩＤ（０ｘ４）と識別子SAVE_PENDING_IIDに格納されている識別子ＩＩＤ（０ｘ１５）を比較して一致しないために、信号SAVE_PENDINGは、「１」が保持される。（２）のＲＥＳＴＯＲＥ命令が命令完了したサイクルＷに、命令完了した識別子ＩＩＤ（０ｘ１０）と識別子RESTORE_PENDING_IIDに格納されている識別子ＩＩＤ（０ｘ１０）を比較して一致するために、信号RESTORE_PENDINGを「０」にリセットする。（３）のＳＡＶＥ命令が命令完了したサイクルＷに、命令完了した識別子ＩＩＤ（０ｘ１５）と識別子SAVE_PENDING_IIDに格納されている識別子ＩＩＤ（０ｘ１５）を比較して一致するために、信号SAVE_PENDINGを「０」にリセットする。
【００４５】
（４）のＳＡＶＥ命令は、信号SAVE_PENDINGとRESTORE_PENDINGが「０」になったために、命令デコード可能と判断して、命令デコードＤが行われる。このときに、信号SAVE_PENDINGは「１」になり、識別子SAVE_PENDING_IIDは、命令デコード時に割り当てられた「０ｘ２０」になる。切り替え方向LAST_SAVEは、「１」になる。
【００４６】
図１２は、図１１の信号SAVE_PENDING及びRESTORE_PENDINGの生成回路の構成例を示す図である。信号D_REL_SAVEは、ＳＡＶＥ命令が命令デコードされたことを示す信号である。論理和回路１２０１は、信号D_REL_SAVEが「１」になると、「１」の信号SAVE_PENDINGを出力する。識別子D_IIDは、命令識別子を示す。信号D_REL_SAVEが「１」になると、論理積回路１２０２，１２０３及び論理和回路１２０４により、識別子D_IIDは識別子SAVE_PENDING_IIDとして出力される。識別子SAVE_PENDING_IIDは、信号D_REL_SAVEが「１」でないときには、識別子SAVE_PENDING_IIDを保持する。信号W_SAVEは、ＳＡＶＥ命令が完了したことを示す信号である。識別子W_IIDは、完了した命令の命令識別子を示す。信号W_SAVEが「１」のときに、比較器１２０５は、識別子SAVE_PENDING_IIDと識別子W_IIDを比較して、一致した場合には、「１」を出力し、論理積回路１２０６は、信号SAVE_PENDINGをリセットする。一致しなかった場合には、信号SAVE_PENDINGはリセットされずに保持される。なお、信号SAVE_PENDINGが「１」のときに、再び、ＳＡＶＥ命令が命令デコードされた場合には、識別子SAVE_PENDING_IIDが更新される。
【００４７】
上記では、信号SAVE_PENDING及び識別子SAVE_PENDING_IIDの生成回路について説明したが、信号RESTORE_PENDING及び識別子RESTORE_PENDING_IIDの生成回路も、論理積回路１２０８，１２０９，１２１２、論理和回路１２０７，１２１０及び比較器１２１１を有し、同様の処理により、信号RESTORE_PENDING及び識別子RESTORE_PENDING_IIDを生成する。
【００４８】
図１３は、図１１の切り替え方向LAST_SAVEの生成回路の構成例を示す図である。生成回路は、インバータ１３０１，１３０２、論理積回路１３０３及び論理和回路１３０４を有する。信号D_REL_SAVEは、ＳＡＶＥ命令が命令デコードされたことを示す信号である。信号D_REL_RESTOREは、ＲＥＳＴＯＲＥ命令が命令デコードされたことを示す信号である。信号D_REL_SAVEが「１」のときに、切り替え方向LAST_SAVEは「１」になる。信号D_REL_RESTOREが「１」のときに、切り替え方向LAST_SAVEは「０」になる。信号D_REL_SAVE及びD_REL_RESTOREが両方とも「０」のときには、切り替え方向LAST_SAVEは保持される。なお、信号D_REL_SAVE及びD_REL_RESTOREが同時に「１」になることはない。
【００４９】
図１４は、命令デコード抑止信号INH_D_RELの生成回路の構成例を示す図である。生成回路は、インバータ１４０１、論理積回路１４０２，１４０３及び論理和回路１４０４を有する。信号D_INST_SAVEは、命令デコードする命令がＳＡＶＥ命令であることを示す信号である。信号SAVE_PENDINGは、ＳＡＶＥ命令が実行中であることを示す信号である。信号D_INST_RESTOREは、命令デコードする命令がＲＥＳＴＯＲＥ命令であることを示す信号である。信号RESTORE_PENDINGは、ＲＥＳＴＯＲＥ命令が実行中であることを示す信号である。切り替え方向LAST_SAVEは、レジスタウィンドウを切り替える命令が実行中であり、最後にレジスタウィンドウを切り替えた方向を示す。信号INH_D_RELは、命令デコードを抑止する信号を示す。信号INH_D_RELが「１」のときは、図６のステップＳ６０４で、命令デコードを抑止する。信号D_INST_SAVEが「１」であり、信号SAVE_PENDINGが「１」であり、切り替え方向LAST_SAVEが「１」のときには、命令デコード抑止信号INH_D_RELが「１」になり、ＳＡＶＥ命令の命令デコードが抑止される。信号D_INST_RESTOREが「１」であり、信号RESTORE_PENDINGが「１」であり、切り替え方向LAST_SAVEが「０」のときには、命令デコード抑止信号INH_D_RELが「１」になり、ＲＥＳＴＯＲＥ命令の命令デコードが抑止される。
【００５０】
図１５は、読み出しレジスタウィンドウを示す図である。固定小数点レジスタ２１６から読み出すことが可能なレジスタウィンドウについては、レジスタウィンドウを切り替える命令が実行しているときには、ＣＷＰが示すレジスタウィンドウとレジスタウィンドウを切り替える命令の完了後のレジスタウィンドウの２つのレジスタウィンドウから読み出すことが可能となる。この２つの読み出すことが可能なレジスタウィンドウを、ＣＷＰが示すレジスタウィンドウをカレントレジスタウィンドウとして、レジスタウィンドウを切り替える命令の後続命令が読み出すレジスタウィンドウを先読みレジスタウィンドウとする。
【００５１】
レジスタウィンドウを切り替える命令が実行されていないときに、レジスタウィンドウを切り替える命令を命令デコードすると、レジスタウィンドウを切り替える命令により更新されるレジスタウィンドウが先読みレジスタウィンドウとなり、後続の命令が読み出すことが可能となる。レジスタウィンドウを切り替える命令が完了すると、先読みレジスタウィンドウのＣＷＰの内容がカレントレジスタウィンドウのＣＷＰの内容となる。レジスタウィンドウを切り替える命令が実行中のときに、レジスタウィンドウを切り替える命令を命令デコードする場合には、カレントレジスタウィンドウと先読みレジスタウィンドウの変更は行われない。レジスタウィンドウを切り替える命令が完了したときに、レジスタウィンドウを切り替える方向が反対のレジスタウィンドウを切り替える命令が実行中のときには、カレントレジスタウィンドウのＣＷＰの内容を先読みレジスタウィンドウのＣＷＰの内容に変更して、先読みレジスタウィンドウのＣＷＰの内容をカレントレジスタウィンドウのＣＷＰの内容に変更する。
【００５２】
ＣＷＰ＝０のときには、カレントレジスタウィンドウの内容は、ＣＷＰ＝０の内容が割り当てられている。このときの先読みレジスタウィンドウは、レジスタウィンドウを切り替える命令が実行中ではないために、無効である。（１）のＳＡＶＥ命令が命令デコードされると、先読みレジスタウィンドウにＣＷＰ＝１の内容が割り当てられる。（２）のＲＥＳＴＯＲＥ命令が命令デコードされたとき、ＳＡＶＥ命令が実行中であるために、カレントレジスタウィンドウ及び先読みレジスタウィンドウは変更されない。（３）のＳＡＶＥ命令が命令デコードされたときも同様であり、ＲＥＳＴＯＲＥ命令が実行中であるために、カレントレジスタウィンドウ及び先読みレジスタウィンドウは変更されない。（１）のＳＡＶＥ命令が完了すると、ＣＷＰ＝１に更新される。このときに、カレントレジスタウィンドウは、先読みレジスタウィンドウの内容が割り当てられる。さらに、（１）のＳＡＶＥ命令の完了時には、ＲＥＳＴＯＲＥ命令が実行中であるために、先読みレジスタウィンドウは、カレントレジスタウィンドウの内容が割り当てられる。（２）のＲＥＳＴＯＲＥ命令の完了時には、ＣＷＰ＝０に更新される。このときに、カレントレジスタウィンドウは、先読みレジスタウィンドウの内容が割り当てられる。さらに、（２）のＲＥＳＴＯＲＥ命令の完了時には、ＳＡＶＥ命令が実行中であるために、先読みレジスタウィンドウは、カレントレジスタウィンドウの内容が割り当てられる。（３）のＳＡＶＥ命令の完了時には、ＣＷＰ＝１に更新される。このときに、カレントレジスタウィンドウは、先読みレジスタウィンドウの内容が割り当てられる。さらに、（３）のＳＡＶＥ命令の完了時には、ＲＥＳＴＯＲＥ命令が実行中ではないために、先読みレジスタウィンドウは、無効となる。
【００５３】
図１６は、読み出しレジスタウィンドウカウンタを示す図である。図１５の命令の実行時に、読み出すレジスタウィンドウを指示する機能として、命令デコード時に、カレントレジスタウィンドウ又は先読みレジスタウィンドウのどちらから読み出すのかを制御する必要がある。このために、命令デコーダ２０４は、レジスタウィンドウの状態を示す機能を備える。この機能は、レジスタウィンドウを切り替える命令を命令デコードしたときと命令完了したときに制御する読み出しレジスタウィンドウカウンタREAD_REG_WIN_CNTである。読み出しレジスタウィンドウカウンタREAD_REG_WIN_CNTの値によって、命令デコードする命令に対して、読み出すレジスタをカレントレジスタウィンドウか先読みレジスタウィンドウのどちらから読み出すのかを割り当てる。
【００５４】
カウンタREAD_REG_WIN_CNTの値は、ＳＡＶＥ命令を命令デコードしたときに＋１され、ＳＡＶＥ命令が完了したときに−１され、ＲＥＳＴＯＲＥ命令を命令デコードしたときに−１され、ＲＥＳＴＯＲＥ命令が完了したときに＋１される。カウンタREAD_REG_WIN_CNTの値が「０」のときには、カレントウィンドウレジスタから読み出すように割り当て、カウンタREAD_REG_WIN_CNTの値が「＋１」又は「−１」のときには、先読みウィンドウレジスタから読み出すように割り当てられる。
【００５５】
ＣＷＰ＝０の状態で、レジスタウィンドウを切り替える命令が実行中でないときは、カウンタREAD_REG_WIN_CNTの値は、「０」である。このときに命令デコードする命令は、カレントレジスタウィンドウから読み出すことになる。（１）のＳＡＶＥ命令が命令デコードされると、カウンタREAD_REG_WIN_CNTの値は、＋１され、「１」になる。後続の命令は、先読みレジスタウィンドウから読み出すように割り当てられる。（２）のＲＥＳＴＯＲＥ命令がデコードされると、カウンタREAD_REG_WIN_CNTの値は、−１され、「０」になる。後続の命令は、カレントレジスタウィンドウから読み出すように割り当てられる。（３）のＳＡＶＥ命令がデコードされると、カウンタREAD_REG_WIND_CNTの値は、＋１され、「１」になる。後続の命令は、先読みレジスタウィンドウから読み出すように割り当てられる。その後に、（１）のＳＡＶＥ命令が完了したために、カウンタREAD_REG_WIN_CNTの値は、−１され、「０」になる。後続の命令は、カレントレジスタウィンドウから読み出すように割り当てられる。（２）のＲＥＳＴＯＲＥ命令が完了すると、カウンタREAD_REG_WIND_CNTの値は、＋１され、「１」になる。後続の命令は、先読みレジスタウィンドウから読み出すように割り当てられる。（３）のＳＡＶＥ命令が完了すると、カウンタREAD_REG_WIND_CNTの値は、−１され、「０」になる。後続の命令は、カレントレジスタウィンドウから読み出すように割り当てられる。
【００５６】
命令の実行をするときは、リザベーションステーション２０７から実行される。上記の制御により、読み出すレジスタウィンドウが割り当てられ、命令デコードされた命令がリザベーションステーション２０７に格納される。リザベーションステーション２０７は、実行の準備ができるまでは命令の実行をすることはできずに、リザベーションステーション２０７に滞留する。この間に、レジスタウィンドウを切り替える命令が完了した場合には、カレントレジスタウィンドウと先読みレジスタウィンドウの位置関係が変更になるために、命令デコード時に割り当てられた読み出しレジスタウィンドウを変更する必要がある。レジスタウィンドウを切り替える命令が完了したときに、リザベーションステーション２０７に有効なエントリの読み出しレジスタが、カレントレジスタウィンドウの場合は、先読みレジスタウィンドウに変更し、先読みレジスタウィンドウの場合は、カレントレジスタウィンドウに変更することで、正しいレジスタウィンドウから読み出すことが可能となる。
【００５７】
以上のように、固定小数点レジスタ２１６は、アクセス可能な複数のレジスタウィンドウＷ０〜Ｗ７に対応する複数のレジスタを有する。命令デコーダ２０４は、現在のレジスタウィンドウの番号（ＣＷＰ）を１変化させる第１の命令を実行中に第１の命令と同じ方向に現在のレジスタウィンドウの番号（ＣＷＰ）を１変化させる第２の命令が入力されると、図６のステップＳ６０３からＳ６０４に進み、第１の命令の実行が完了するまで第２の命令のデコードを抑止する。また、命令デコーダ２０４は、現在のレジスタウィンドウの番号（ＣＷＰ）を１変化させる第１の命令を実行中に第１の命令と逆の方向に現在のレジスタウィンドウの番号（ＣＷＰ）を１変化させる第２の命令が入力されると、図６のステップＳ６０３からＳ６０５に進み、第１の命令の実行中に第２の命令のデコードを行う。
【００５８】
リネーミングレジスタ２１５は、固定小数点レジスタ２１６の内容を記憶する。最新レジスタリネーミングマップ記憶部５０１は、リネーミングレジスタ２１５のアドレスを示す最新のレジスタリネーミングマップを記憶する。退避レジスタリネーミングマップ記憶部５０２は、リネーミングレジスタ２１５のアドレスを示す古いレジスタリネーミングマップを記憶する。
【００５９】
第１の命令がデコードされると、最新レジスタリネーミングマップ記憶部５０１に記憶されているレジスタリネーミングマップは退避レジスタリネーミングマップ記憶部５０２に記憶され、第１の命令に対応する現在のレジスタウィンドウ（ＣＷＰ）のレジスタリネーミングマップが最新レジスタリネーミングマップ記憶部５０１に記憶される。
【００６０】
第１の命令と逆方向の第２の命令がデコードされると、最新レジスタリネーミングマップ記憶部５０１に記憶されているレジスタリネーミングマップは退避レジスタリネーミングマップ記憶部５０２に記憶され、退避レジスタリネーミングマップ記憶部５０２に記憶されているレジスタリネーミングマップは最新レジスタリネーミングマップ記憶部５０１に記憶される。
【００６１】
命令の完了により、リネーミングレジスタ２１５の内容が固定小数点レジスタ２１６に書き込まれると、上記のレジスタリネーミングマップのアドレスが無効化される。
【００６２】
本実施形態によれば、第１の命令の実行中に第２の命令のデコードを行うことができるので、第２の命令を高速に処理することができる。すなわち、レジスタウィンドウを切り替える命令の実行中に、再び入力されるレジスタウィンドウを切り替える命令が最後にレジスタウィンドウを切り替える命令と反対方向の切り替えのときには、命令デコードを抑止することなく、命令デコード行うことになるために、後続命令のデコードを抑止することなく動作することが可能となる。これにより、高速に命令を実行することが可能になり、性能の向上につながる。
【００６３】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６４】
２０４  命令デコーダ
２０７  リザベーションステーション
２１０  命令完了制御部
２１５  固定小数点リネーミングレジスタ
２１６  固定小数点レジスタ
５０１  最新レジスタリネーミングマップ記憶部
５０２  退避レジスタリネーミングマップ記憶部
１００１  リネーミングマップ登録回路
１００２  レジスタリネーミング回路
１００３，１００４  リネーミングマップリセット回路
【図１】
2015014891.tif 000003
【図２】
2015014891.tif 000004
【図３】
2015014891.tif 000005
【図４】
2015014891.tif 000006
【図５】
2015014891.tif 000007
【図６】
2015014891.tif 000008
【図７】
2015014891.tif 000009
【図８】
2015014891.tif 000010
【図９】
2015014891.tif 000011
【図１０】
2015014891.tif 000012
【図１１】
2015014891.tif 000013
【図１２】
2015014891.tif 000014
【図１３】
2015014891.tif 000015
【図１４】
2015014891.tif 000016
【図１５】
2015014891.tif 000017
【図１６】
2015014891.tif 000018