(57)【特許請求の範囲】
【請求項１】
第１のデータおよび第２のデータを有する集合データに対して処理を行う集合データ処理命令をデコードする命令デコード部と、
データを格納する複数の第１の割当レジスタと、
データを格納する複数の第２の割当レジスタと、
前記集合データ処理命令のデコード結果に基づいて、前記複数の第１の割当レジスタから一の第１の割当レジスタを選択するとともに、前記複数の第２の割当レジスタから一の第２の割当レジスタを選択する割当レジスタ選択部と、
前記集合データ処理命令のデコード結果に基づいて、前記第１のデータに対して第１の処理を行い、前記第１の処理の結果である第１の処理結果を前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持させる第１の処理部と、
前記集合データ処理命令のデコード結果に基づいて、前記第２のデータに対して第２の処理を行い、前記第２の処理の結果である第２の処理結果を前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持させる第２の処理部と、
前記第１の割当レジスタに保持された前記第１の処理結果を格納する第１の結果レジスタと、
前記第２の割当レジスタに保持された前記第２の処理結果を格納する第２の結果レジスタと、
を有することを特徴とする演算処理装置。
【請求項２】
前記演算処理装置において、
前記命令デコード部は、前記第１または第２のデータと同じデータ幅の第３のデータに対して処理を行う通常データ処理命令が入力されたとき、前記通常データ処理命令をデコードしてデコード結果を出力するとともに、前記通常データ処理命令のデコード結果に基づいて前記第１の結果レジスタまたは前記第２の結果レジスタのいずれかを選択し、
前記命令デコード部により前記第１の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第１の割当レジスタから一の第１の割当レジスタを選択し、
前記第１の処理部は、前記第３のデータに対して前記第１の処理を行い、当該第１の処理の結果である第３の処理結果を、前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持させ、
前記第１の結果レジスタは、前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持された前記第３の処理結果を格納し、
前記命令デコード部により前記第２の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第２の割当レジスタから一の第２の割当レジスタを選択し、
前記第２の処理部は、前記第３のデータに対して前記第２の処理を行い、当該第２の処理の結果である第４の処理結果を、前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持させ、
前記第２の結果レジスタは、前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持された前記第４の処理結果を格納する、
ことを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記演算処理装置はさらに、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記第１のデータを前記複数の第１の割当レジスタのうち一の第１の割当レジスタから読み出すとともに、前記第２のデータを前記複数の第２の割当レジスタのうち一の第２の割当レジスタから読み出し、前記命令デコード部により前記通常データ処理命令がデコードされたとき、前記第３のデータを前記複数の第１の割当レジスタおよび前記複数の第２の割当レジスタのうち一の割当レジスタから読み出すデータ読み出し制御部を有することを特徴とする請求項２記載の演算処理装置。
【請求項４】
前記演算処理装置はさらに、
前記命令デコード部でデコードされた命令に対応する処理結果が、前記複数の第１の割当レジスタおよび前記複数の第２の割当レジスタのうち必要な割当レジスタに格納されたか否かを監視し、処理結果が前記複数の第１の割当レジスタおよび前記複数の第２の割当レジスタのうち必要な割当レジスタに格納された命令を、前記命令デコード部によってデコードされた順に完了させるとともに、完了させた命令に対応する処理結果が前記第１の割当レジスタに格納されている場合は、当該処理結果を当該第１の割当レジスタから前記第１の結果レジスタに格納し、完了させた命令に対応する処理結果が前記第２の割当レジスタに格納されている場合は、当該処理結果を当該第２の割当レジスタから前記第２の結果レジスタに格納するデータ格納制御部を有することを特徴とする請求項２記載の演算処理装置。
【請求項５】
前記演算処理装置において、
前記データ格納制御部は、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記割当レジスタ選択部により選択された前記第１の割当レジスタおよび前記第２の割当レジスタに対してそれぞれ前記第１の処理結果および前記第２の処理結果が格納された場合に、デコードされた前記集合データ処理命令を完了させ、
前記命令デコード部により通常データ処理命令がデコードされて前記第１の結果レジスタが選択されたとき、前記割当レジスタ選択部により選択された前記第１の割当レジスタに対して前記第３の処理結果が格納された場合に、デコードされた前記通常データ処理命令を完了させ、
前記命令デコード部により通常データ処理命令がデコードされて前記第２の結果レジスタが選択されたとき、前記割当レジスタ選択部により選択された前記第２の割当レジスタに対して前記第４の処理結果が格納された場合に、デコードされた前記通常データ処理命令を完了させることを特徴とする請求項４記載の演算処理装置。
【請求項６】
演算処理装置と、前記演算処理装置に接続される記憶装置とを備えた情報処理装置において、
前記演算処理装置は、
第１のデータおよび第２のデータを有する集合データに対して処理を行う集合データ処理命令をデコードする命令デコード部と、
データを格納する複数の第１の割当レジスタと、
データを格納する複数の第２の割当レジスタと、
前記集合データ処理命令のデコード結果に基づいて、前記複数の第１の割当レジスタから一の第１の割当レジスタを選択するとともに、前記複数の第２の割当レジスタから一の第２の割当レジスタを選択する割当レジスタ選択部と、
前記集合データ処理命令のデコード結果に基づいて、前記第１のデータに対して第１の処理を行い、前記第１の処理の結果である第１の処理結果を前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持させる第１の処理部と、
前記集合データ処理命令のデコード結果に基づいて、前記第２のデータに対して第２の処理を行い、前記第２の処理の結果である第２の処理結果を前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持させる第２の処理部と、
前記第１の割当レジスタに保持された前記第１の処理結果を格納する第１の結果レジスタと、
前記第２の割当レジスタに保持された前記第２の処理結果を格納する第２の結果レジスタと、
を有し、
前記記憶装置は、前記第１のデータおよび前記第２のデータを記憶することを特徴とする情報処理装置。
【請求項７】
前記情報処理装置において、
前記命令デコード部は、前記第１または第２のデータと同じデータ幅の第３のデータに対して処理を行う通常データ処理命令が入力されたとき、前記通常データ処理命令をデコードしてデコード結果を出力するとともに、前記通常データ処理命令のデコード結果に基づいて前記第１の結果レジスタまたは前記第２の結果レジスタのいずれかを選択し、
前記命令デコード部により前記第１の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第１の割当レジスタから一の第１の割当レジスタを選択し、
前記第１の処理部は、前記第３のデータに対して前記第１の処理を行い、当該第１の処理の結果である第３の処理結果を、前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持させ、
前記第１の結果レジスタは、前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持された前記第３の処理結果を格納し、
前記命令デコード部により前記第２の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第２の割当レジスタから一の第２の割当レジスタを選択し、
前記第２の処理部は、前記第３のデータに対して前記第２の処理を行い、当該第２の処理の結果である第４の処理結果を、前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持させ、
前記第２の結果レジスタは、前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持された前記第４の処理結果を格納する、
ことを特徴とする請求項６記載の情報処理装置。
【請求項８】
前記情報処理装置において、
前記演算処理装置はさらに、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記第１のデータを前記複数の第１の割当レジスタのうち一の第１の割当レジスタから読み出すとともに、前記第２のデータを前記複数の第２の割当レジスタのうち一の第２の割当レジスタから読み出し、前記命令デコード部により前記通常データ処理命令がデコードされたとき、前記第３のデータを前記複数の第１の割当レジスタおよび前記複数の第２の割当レジスタのうち一の割当レジスタから読み出すデータ読み出し制御部を有することを特徴とする請求項７記載の情報処理装置。
【請求項９】
演算処理装置が有する命令デコード部が、入力された命令をデコードするとともに、そのデコード結果に基づいて、処理結果の格納先の結果レジスタを選択する命令デコードステップと、
前記演算処理装置が有する割当レジスタ選択部が、前記命令のデコード結果に基づいて、処理結果を一時的に保持する割当レジスタを選択する割当レジスタ選択ステップと、
前記演算処理装置が有する第１の処理部または第２の処理部の少なくとも一方が、前記命令のデコード結果に基づいて、データに対して処理を行い、前記割当レジスタ選択ステップで選択された前記割当レジスタに対して処理結果を保持させるデータ処理ステップと、
前記割当レジスタ選択ステップで選択された前記割当レジスタが保持する前記処理結果を、前記命令デコードステップで選択された前記結果レジスタに格納するデータ格納ステップと、
を有し、
前記命令デコードステップでは、前記命令デコード部は、デコードした命令が、第１のデータおよび第２のデータを有する集合データに対して処理を行う集合データ処理命令である場合、処理結果の格納先として、第１の結果レジスタ群および第２の結果レジスタ群からそれぞれ１つずつ前記結果レジスタを選択し、
前記命令デコードステップにおいて前記集合データ処理命令がデコードされた場合、
前記割当レジスタ選択ステップでは、前記割当レジスタ選択部は、第１の割当レジスタ群および第２の割当レジスタ群からそれぞれ１つずつ前記割当レジスタを選択し、
前記データ処理ステップでは、前記第１の処理部が、前記第１のデータに対して第１の処理を行い、前記第１の処理の結果である第１の処理結果を、前記第１の割当レジスタ群から選択された前記割当レジスタに保持させるとともに、前記第２の処理部が、前記第２のデータに対して第２の処理を行い、前記第２の処理の結果である第２の処理結果を、前記第２の割当レジスタ群から選択された前記割当レジスタに保持させ、
前記データ格納ステップでは、前記第１の割当レジスタ群から選択された前記割当レジスタに保持された前記第１の処理結果を、前記第１の結果レジスタ群から選択された前記結果レジスタに格納するとともに、前記第２の割当レジスタ群から選択された前記割当レジスタに保持された前記第２の処理結果を、前記第２の結果レジスタ群から選択された前記結果レジスタに格納する、
ことを特徴とする演算処理装置の制御方法。
【請求項１０】
前記演算処理装置の制御方法において、
前記命令デコードステップでは、前記命令デコード部は、デコードした命令が、第３のデータに対して処理を行う通常データ処理命令である場合、処理結果の格納先として、前記第１の結果レジスタ群または前記第２の結果レジスタ群のいずれかから一の前記結果レジスタを選択し、
前記命令デコードステップにおいて、前記通常データ処理命令がデコードされるとともに、前記第１の結果レジスタ群から前記結果レジスタが選択された場合、
前記割当レジスタ選択ステップでは、前記割当レジスタ選択部は、前記第１の割当レジスタ群から一の前記割当レジスタを選択し、
前記データ処理ステップでは、前記第１の処理部が、前記第３のデータに対して前記第１の処理を行い、当該第１の処理の結果である第３の処理結果を、前記第１の割当レジスタ群から選択された前記割当レジスタに保持させ、
前記データ格納ステップでは、前記第１の割当レジスタ群から選択された前記割当レジスタに保持された前記第３の処理結果を、前記第１の結果レジスタ群から選択された前記結果レジスタに格納し、
前記命令デコードステップにおいて、前記通常データ処理命令がデコードされるとともに、前記第２の結果レジスタ群から前記結果レジスタが選択された場合、
前記割当レジスタ選択ステップでは、前記割当レジスタ選択部は、前記第２の割当レジスタ群から一の前記割当レジスタを選択し、
前記データ処理ステップでは、前記第２の処理部が、前記第３のデータに対して前記第２の処理を行い、当該第２の処理の結果である第４の処理結果を、前記第２の割当レジスタ群から選択された前記割当レジスタに保持させ、
前記データ格納ステップでは、前記第２の割当レジスタ群から選択された前記割当レジスタに保持された前記第４の処理結果を、前記第２の結果レジスタ群から選択された前記結果レジスタに格納する、
ことを特徴とする請求項９記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、情報処理装置、および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置であるＣＰＵ（Central Processing Unit）の処理を高速化する技術としては様々な技術が知られている。例えば、パイプライン処理方式、演算処理を並列に実行可能なスーパスカラ方式、プログラムから指定された順番通りに命令を実行せず、入力データが揃った命令から実行を行うアウト・オブ・オーダ実行方式などが知られている。また、アウト・オブ・オーダ方式においては、命令をプログラム順に完了する技術として、レジスタリネーミング技術が知られている。
【０００３】
また、処理の並列化によりＣＰＵの処理を高速化する技術として、１つの命令で複数のデータを扱い、それらのデータを並列に処理する、ＳＩＭＤ（Single Instruction/Multiple Data）と呼ばれる処理方式がある。この種の処理方式を用いた装置の例として、１つの命令コード（オペコード）のデコードに応じて、同じアドレスで指定される第１，第２のメモリ領域からそれぞれデータ（オペランドデータ）を読み出し、読み出したデータをそれぞれ第１，第２のデータ演算回路に出力するものがあった。
【０００４】
ＳＩＭＤ処理を実現するには、１度に複数のデータを扱う演算器などの実行機能や、それらの複数のデータを格納するレジスタなどのハードウェア資源が必要である。例えば、１つのデータを扱う非ＳＩＭＤ命令により６４ビットのデータが処理される場合には、処理されたデータを格納するレジスタのビット幅は６４ビットとなる。これに対して、２つのデータを扱う２−ＳＩＭＤ命令に応じて処理する場合には、６４ビットのデータが２つ処理されることから、処理されたデータを格納するＳＩＭＤレジスタのビット幅は１２８ビットとなる。
【０００５】
このようなＳＩＭＤ処理を用いることにより、一度に扱うデータの量を増加させることが可能となり、結果としてＣＰＵの処理を高速化することができる。すなわち、上記の例では、１２８ビットのデータを処理するためには、非ＳＩＭＤ処理では２命令が必要であったのに対し、ＳＩＭＤ処理では１命令だけしか必要とならない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第３４５２７７１号公報
【特許文献２】特開平１０−２２８３７６号公報
【特許文献３】特開平１１−１７５３３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、通常、ＣＰＵが実行する処理のすべてをＳＩＭＤ処理とすることはソフトウェア互換性およびハードウェア資源の観点から困難であり、ＳＩＭＤ処理を必要としないデータを扱う処理（“非ＳＩＭＤ処理”と呼ぶ）の実行も必要になる。しかしながら、ＳＩＭＤ処理が可能なＣＰＵで非ＳＩＭＤ処理を実行した場合には、ＣＰＵ内部のレジスタに使用効率が低下するという問題があった。
【０００８】
例えば、上記のように、２−ＳＩＭＤ処理が可能であって、通常レジスタのビット幅の倍である１２８ビットのビット幅を有するＳＩＭＤレジスタを備えたＣＰＵでは、非ＳＩＭＤ処理を実行した場合に、ＳＩＭＤレジスタの半分だけが使用され、残りの半分は使用されない。
【０００９】
また、例えば、前述のレジスタリネーミング技術を適用した場合、ＳＩＭＤレジスタがリネーミングされた後、後続の命令によりＳＩＭＤレジスタの参照が要求されると、ＳＩＭＤレジスタの代わりに、リネーミングされたレジスタが直接参照される場合がある。このような動作を実現するために、レジスタのリネーミングは、ＳＩＭＤ処理／非ＳＩＭＤ処理に関係なく、よりビット幅の大きなＳＩＭＤレジスタのビット幅を単位として行われる。従って、非ＳＩＭＤ処理が実行された場合には、リネーミングされたレジスタについても、ＳＩＭＤレジスタのビット幅の半分だけしか使用されない。
【００１０】
本発明はこのような点に鑑みてなされたものであり、レジスタの使用効率が改善された演算処理装置、情報処理装置、および演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、演算処理装置が提供される。この演算処理装置は、第１のデータおよび第２のデータを有する集合データに対して処理を行う集合データ処理命令をデコードする命令デコード部と、データを格納する複数の第１の割当レジスタと、データを格納する複数の第２の割当レジスタと、前記集合データ処理命令のデコード結果に基づいて、前記複数の第１の割当レジスタから一の第１の割当レジスタを選択するとともに、前記複数の第２の割当レジスタから一の第２の割当レジスタを選択する割当レジスタ選択部と、前記集合データ処理命令のデコード結果に基づいて、前記第１のデータに対して第１の処理を行い、前記第１の処理の結果である第１の処理結果を前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持させる第１の処理部と、前記集合データ処理命令のデコード結果に基づいて、前記第２のデータに対して第２の処理を行い、前記第２の処理の結果である第２の処理結果を前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持させる第２の処理部と、前記第１の割当レジスタに保持された前記第１の処理結果を格納する第１の結果レジスタと、前記第２の割当レジスタに保持された前記第２の処理結果を格納する第２の結果レジスタと、を有する。
【００１２】
また、上記目的を達成するために、上記の演算処理装置を備えた情報処理装置、および、上記の演算処理装置の制御方法が提供される。
【発明の効果】
【００１３】
上記の演算処理装置では、レジスタの使用効率を向上させることができる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態に係る演算処理装置の構成を示す図である。
【図２】情報処理装置の構成例を示す図である。
【図３】情報処理装置の別の構成例を示す図である。
【図４】ＣＰＵコアの全体の構成例を示す図である。
【図５】ＳＩＭＤ命令実行時におけるレジスタリネーミング処理を説明する図である。
【図６】非ＳＩＭＤ命令実行時におけるレジスタリネーミング処理を説明する図である。
【図７】浮動小数点ＳＩＭＤレジスタのそれぞれのビット幅が１６バイトに固定されている場合のレジスタリネーミング処理例を説明する参考図である。
【図８】ＣＰＵコアにおいて浮動小数点ロード命令実行時に動作する構成要素を示す図である。
【図９】浮動小数点ロード命令実行時のパイプラインを説明する図（その１）である。
【図１０】浮動小数点ロード命令実行時のパイプラインを説明する図（その２）である。
【図１１】非ＳＩＭＤロード命令実行時のデータの流れを説明する図（その１）である。
【図１２】非ＳＩＭＤロード命令実行時のデータの流れを説明する図（その２）である。
【図１３】浮動小数点ロード命令実行時の命令デコーダの出力信号を示す図である。
【図１４】浮動小数点ロード命令デコード時における命令デコーダでの信号出力処理手順を示すフローチャートである。
【図１５】浮動小数点ロード命令実行時のレジスタリネーミング部の入出力信号を示す図である。
【図１６】浮動小数点ロード命令実行時のＣＳＥの入出力信号を示す図である。
【図１７】ＣＳＥのエントリの内容を示す図である。
【図１８】浮動小数点ロード命令実行時のＲＳＡの入出力信号を示す図である。
【図１９】浮動小数点ロード命令実行時におけるＲＳＡのエントリの内容を示す図である。
【図２０】浮動小数点ロード命令実行時のオペランドデータ選択部の入出力信号を示す図である。
【図２１】浮動小数点ロード命令実行時の１次データキャッシュ部の入出力信号を示す図である。
【図２２】浮動小数点ロード命令実行時の浮動小数点リネーミングレジスタの入出力信号を示す図である。
【図２３】浮動小数点ロード命令実行時の浮動小数点ＳＩＭＤレジスタの入出力信号を示す図である。
【図２４】ＳＩＭＤロード命令実行時のロードデータ格納動作を説明する図である。
【図２５】非ＳＩＭＤロード命令実行時のロードデータ格納動作を説明する図である。
【図２６】ＣＰＵコアにおいて浮動小数点演算命令実行時に動作する構成要素を示す図である。
【図２７】浮動小数点演算命令実行時のパイプラインを説明する図（その１）である。
【図２８】浮動小数点演算命令実行時のパイプラインを説明する図（その２）である。
【図２９】非ＳＩＭＤ演算命令実行時のデータの流れを説明する図（その１）である。
【図３０】非ＳＩＭＤ演算命令実行時のデータの流れを説明する図（その２）である。
【図３１】浮動小数点演算命令実行時に、オペランドデータがリネーミングレジスタから供給される場合のタイムチャートの例を示す図である。
【図３２】浮動小数点演算命令実行時の命令デコーダの出力信号を示す図である。
【図３３】浮動小数点演算命令実行時のレジスタリネーミング部の入出力信号を示す図である。
【図３４】浮動小数点演算命令実行時のＣＳＥの入出力信号を示す図である。
【図３５】浮動小数点演算命令実行時のＣＳＥのエントリの内容を示す図である。
【図３６】浮動小数点演算命令実行時のＲＳＦの入出力信号を示す図である。
【図３７】浮動小数点演算命令実行時におけるＲＳＦのエントリの内容を示す図である。
【図３８】ＳＩＭＤ演算命令実行時のＲＳＦエントリの内容を説明する図である。
【図３９】非ＳＩＭＤ演算命令実行時のＲＳＦエントリの内容を説明する図である。
【図４０】オペランドデータ待ち回路によるエントリ更新手順を示すフローチャート（その１）である。
【図４１】オペランドデータ待ち回路によるエントリ更新手順を示すフローチャート（その２）である。
【図４２】オペランドデータ待ち回路によるエントリ更新手順を示すフローチャート（その３）である。
【図４３】オペランドデータ待ち回路によるエントリ更新手順を示すフローチャート（その４）である。
【図４４】オペランドデータ待ち回路によるエントリ更新手順を示すフローチャート（その５）である。
【図４５】浮動小数点演算命令実行時のＳＩＭＤ演算器の入出力信号を示す図である。
【図４６】オペランドデータ選択部の内部構成を示す図である。
【図４７】浮動小数点演算命令実行時の浮動小数点リネーミングレジスタの入出力信号を示す図である。
【図４８】浮動小数点演算命令実行時の浮動小数点ＳＩＭＤレジスタの入出力信号を示す図である。
【図４９】ＳＩＭＤ演算命令実行時の演算結果の格納動作を説明する図である。
【図５０】非ＳＩＭＤ演算命令実行時の演算結果の格納動作を説明する図である。
【図５１】ＣＰＵコアにおいて浮動小数点ストア命令実行時に動作する構成要素を示す図である。
【図５２】浮動小数点ストア命令実行時のパイプラインを示す図である。
【図５３】ＳＩＭＤストア命令実行時のパイプラインを説明する図（その１）である。
【図５４】ＳＩＭＤストア命令実行時のパイプラインを説明する図（その２）である。
【図５５】非ＳＩＭＤストア命令実行時のパイプラインを説明する図（その１）である。
【図５６】非ＳＩＭＤストア命令実行時のパイプラインを説明する図（その２）である。
【図５７】浮動小数点ストア命令実行時の命令デコーダの出力信号を示す図である。
【図５８】浮動小数点ストア命令実行時のＣＳＥの入出力信号を示す図である。
【図５９】浮動小数点ストア命令実行時のＣＳＥのエントリの内容を示す図である。
【図６０】浮動小数点ストア命令実行時のレジスタリネーミング部の入出力信号を示す図である。
【図６１】浮動小数点ストア命令実行時のＲＳＡの入出力信号を示す図である。
【図６２】浮動小数点ストア命令実行時におけるＲＳＡのエントリの内容を示す図である。
【図６３】浮動小数点ストア命令実行時のＲＳＦの入出力信号を示す図である。
【図６４】浮動小数点ストア命令実行時におけるＲＳＦのエントリの内容を示す図である。
【図６５】浮動小数点ストア命令実行時のＳＩＭＤ演算器の入出力信号を示す図である。
【図６６】浮動小数点ストア命令実行時のストアバッファ部の入出力信号を示す図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して実施の形態を詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る演算処理装置の構成を示す図である。
【００１６】
図１に示す演算処理装置１は、例えば、ＣＰＵまたはその構成要素の一部（例えばＣＰＵコア）などとして実現される。この演算処理装置１は、命令デコード部１１、割当レジスタ選択部１２、処理部１３，１４、割当レジスタ群１５，１６、結果レジスタ群１７，１８およびデータ格納制御部１９を備えている。
【００１７】
命令デコード部１１は、入力された命令をデコードし、デコード結果を出力する。命令デコード部１１は、少なくとも、集合データ処理命令と通常データ処理命令をデコード可能である。集合データ処理命令は、一の命令で、複数のデータを有する集合データに対して処理を行うことを要求する命令である。本実施の形態では、集合データのうち２つのデータを、それぞれ第１のデータ、第２のデータと呼ぶ。集合データ処理命令は、例えば“ＳＩＭＤ”と呼ばれる命令である。例えば、集合データ処理命令は、命令のオペランドによって指定されるレジスタから第１のデータおよび第２のデータを取得し、第１のデータを用いた演算などの処理と第２のデータを用いた演算などの処理とをそれぞれ実行することを要求する。ここで、第１のデータと第２のデータは、例えば、ともに同じデータ幅を有する。また、通常データ処理命令は、第１のデータおよび第２のデータと同じデータ幅を有するデータに対して、処理を行うことを要求する命令である。
【００１８】
割当レジスタ選択部１２は、命令デコード部１１による命令のデコード結果に基づいて、割当レジスタ群１５，１６内のレジスタを選択する。例えば、命令デコード部１１により集合データ処理命令がデコードされた場合、割当レジスタ選択部１２は、割当レジスタ１５ａ，１６ａの両方を選択する。また、命令デコード部１１により通常データ処理命令がデコードされた場合、割当レジスタ選択部１２は、割当レジスタ１５ａ，１６ａのいずれか一方を選択する。
【００１９】
処理部１３，１４は、データに対する演算処理などの処理を実行する。命令デコード部１１により集合データ処理命令がデコードされた場合、処理部１３は第１のデータに対する処理を実行し、処理部１４は第２のデータに対する処理を実行する。また、命令デコード部１１により通常データ処理命令がデコードされた場合、処理部１３，１４のいずれか１つが、処理対象のデータに対する処理を実行する。処理部１３，１４は、例えば、それぞれ同じ処理を実行する。
【００２０】
割当レジスタ群１５は、複数の割当レジスタ１５ａを備える。また、割当レジスタ群１６は、複数の割当レジスタ１６ａを備える。処理部１３による演算結果などの処理結果は、割当レジスタ選択部１２により選択された、割当レジスタ群１５内の割当レジスタ１５ａに格納される。また、処理部１４による処理結果は、割当レジスタ選択部１２により選択された、割当レジスタ群１６内の割当レジスタ１６ａに格納される。
【００２１】
結果レジスタ群１７は、複数の結果レジスタ１７ａを備える。また、結果レジスタ群１８は、複数の結果レジスタ１８ａを備える。結果レジスタ群１８は、例えば、結果レジスタ１７ａと同数の結果レジスタ１８ａを備える。結果レジスタ群１７は、割当レジスタ群１５に格納されたデータの入力を受けて、データを格納する。結果レジスタ群１８は、割当レジスタ群１６に格納されたデータの入力を受けて、データを格納する。
【００２２】
データ格納制御部１９は、割当レジスタ群１５に格納されたデータを結果レジスタ群１７に格納する動作と、割当レジスタ群１６に格納されたデータを結果レジスタ群１８に格納する動作とを制御する。なお、本実施の形態では、これらのデータ格納動作をデータ格納制御部１９が制御するものとするが、これらのデータ格納動作の制御方法として他の方法を採用することもできる。
【００２３】
命令デコード部１１に集合データ処理命令が入力されると、演算処理装置１は次のように動作する。
命令デコード部１１により集合データ処理命令がデコードされると、割当レジスタ選択部１２は、割当レジスタ群１５，１６から、それぞれ割当レジスタ１５ａ，１６ａを選択する。また、処理部１３は、命令のデコード結果に基づいて、第１のデータに対する処理を実行し、その処理結果を、割当レジスタ選択部１２により選択された割当レジスタ１５ａに格納する。また、処理部１４は、命令のデコード結果に基づいて、第２のデータに対する処理を実行し、その処理結果を、割当レジスタ選択部１２により選択された割当レジスタ１６ａに格納する。割当レジスタ１５ａに格納された処理結果は、データ格納制御部１９の制御の下で、結果レジスタ１７ａに格納される。また、割当レジスタ１６ａに格納された処理結果は、データ格納制御部１９の制御の下で、結果レジスタ１８ａに格納される。
【００２４】
一方、命令デコード部１１に通常データ処理命令が入力されると、演算処理装置１は次のように動作する。
命令デコード部１１は、通常データ処理命令をデコードしてデコード結果を出力するとともに、このデコード結果に基づいて結果レジスタ群１７，１８のいずれか一方を、データ格納先として選択する。
【００２５】
命令デコード部１１によりデータ格納先として結果レジスタ群１７が選択された場合、割当レジスタ選択部１２は、割当レジスタ群１５から１つの割当レジスタ１５ａを選択する。処理部１３は、命令のデコード結果に基づいて、通常データ処理命令の処理対象のデータに対して処理を実行し、その処理結果を、割当レジスタ選択部１２により選択された割当レジスタ１５ａに格納する。割当レジスタ１５ａに格納された処理結果は、データ格納制御部１９の制御の下で、結果レジスタ１７ａに格納される。
【００２６】
一方、命令デコード部１１によりデータ格納先として結果レジスタ群１８が選択された場合、割当レジスタ選択部１２は、割当レジスタ群１６から１つの割当レジスタ１６ａを選択する。処理部１４は、命令のデコード結果に基づいて、通常データ処理命令の処理対象のデータに対して処理を実行し、その処理結果を、割当レジスタ選択部１２により選択された割当レジスタ１６ａに格納する。割当レジスタ１６ａに格納された処理結果は、データ格納制御部１９の制御の下で、結果レジスタ１８ａに格納される。
【００２７】
以上の処理では、集合データ処理命令の実行時には、割当レジスタ選択部１２により、割当レジスタ群１５，１６からレジスタがそれぞれ個別に選択される。そして、選択された割当レジスタ１５ａ，１６ａに対して、第１のデータを処理した処理結果と、第２のデータを処理した処理結果とがそれぞれ格納される。この構成では、１つの集合データ処理命令の実行時に、それぞれ異なるレジスタ識別情報（例えばアドレス）を有する割当レジスタ１５ａ，１６ａが選択されてもよい。これにより、割当レジスタ群１５，１６のレジスタ使用効率を高めることができる。
【００２８】
また、通常データ処理命令がデコードされた場合には、割当レジスタ群１５，１６のいずれか一方にのみ、処理結果が格納される。従って、演算処理装置１が、集合データ処理命令と通常データ処理命令とが混在するプログラムを実行した場合でも、割当レジスタ群１５，１６内に無駄な空き領域が生じなくなる。
【００２９】
ところで、処理部１３，１４での処理結果を格納する結果レジスタ群１７，１８内のレジスタは、例えば、命令デコード部１１がデコードする命令によって指定される。この場合、例えば、命令デコード部１１は、命令により処理結果の格納先として指定された結果レジスタ群１７，１８のレジスタ識別情報を、データ格納制御部１９に出力する。データ格納制御部１９は、割当レジスタ群１５，１６に処理結果が格納されると、処理結果を、命令デコード部１１からのレジスタ識別情報によって特定される結果レジスタ群１７，１８内の結果レジスタに格納する。
【００３０】
このような構成の場合、命令デコード部１１は、命令の種類に応じて、処理結果の格納先レジスタを次のように指定してもよい。
例えば、集合データ処理命令により結果レジスタ群１７内の１つの結果レジスタ１７ａが指定されたとする。このとき、命令デコード部１１は、第２のデータを処理した処理結果の格納先レジスタとして、指定された結果レジスタ１７ａと同じレジスタ識別情報（例えばアドレス）を有する結果レジスタ１８ａを指定する。一方、通常データ処理命令では、処理結果の格納先レジスタとして、結果レジスタ群１７，１８内の任意の結果レジスタが指定される。
【００３１】
このようにすることで、集合データ処理命令がデコードされた場合には、結果レジスタ群１７，１８の中の同じレジスタ識別情報を有する結果レジスタ１７ａ，１８ａに、処理結果が格納される。従って、同じレジスタ識別情報を有する２つの結果レジスタ１７ａ，１８ａを単位として、２つの処理結果を容易に取り扱うことができる。一方、通常データ処理命令では、処理結果の格納先レジスタとして、集合データ処理命令の場合の２倍の結果レジスタを指定することが可能になる。従って、結果レジスタ群１７，１８のレジスタ使用効率が向上するとともに、プログラムの自由度も高められる。
【００３２】
〔第２の実施の形態〕
第２の実施の形態では、まず、ＳＩＭＤ処理と、ＳＩＭＤ処理を必要としない処理（非ＳＩＭＤ処理）とを実行可能なＣＰＵコアを有する情報処理装置の構成例について説明し、その後に、ＣＰＵコアについて詳しく説明する。
【００３３】
図２は、情報処理装置の構成例を示す図である。
図２に示す情報処理装置１００ａは、ＣＰＵやメモリなどを１基板上に搭載したＣＰＵ／メモリボード１０１を備えている。図２のＣＰＵ／メモリボード１０１には、ＣＰＵ１１０、ＤＩＭＭ（Dual Inline Memory Module）１２０およびインターコネクト１３０が搭載されている。
【００３４】
ＣＰＵ１１０は、複数のＣＰＵコア１１１と、これらのＣＰＵコア１１１によって共用される２次データキャッシュ１１２とを備えている。また、各ＣＰＵコア１１１とＤＩＭＭ１２０とは直接的に接続されており、これらの間でデータの受け渡しを行うことが可能になっている。ＤＩＭＭ１２０は、ＣＰＵ１１０のメインメモリとして使用される。インターコネクト１３０は、ＣＰＵ／メモリボード１０１と、情報処理装置１００ａ内の他の回路ノードとを接続し、これらの間でデータの転送を行う。
【００３５】
図３は、情報処理装置の別の構成例を示す図である。なお、図３では、図２に対応する構成要素には同じ符号を付して示している。
図３では、同一のＣＰＵ／メモリボード上に複数のＣＰＵを備えた情報処理装置の構成例を示している。また、図３の情報処理装置は、このようなＣＰＵ／メモリボードを複数備えている。すなわち、図３に示す情報処理装置１００ｂは、例として２つのＣＰＵ／メモリボード１０２，１０３を備えている。ＣＰＵ／メモリボード１０２，１０３はそれぞれ同じ構成を有しているので、ここではＣＰＵ／メモリボード１０２の構成のみ説明する。
【００３６】
ＣＰＵ／メモリボード１０２には、例として２つのＣＰＵ１１０ａ，１１０ｂが搭載されている。ＣＰＵ１１０ａ，１１０ｂのそれぞれの内部構成は、図２に示したＣＰＵ１１０と同じである。さらに、ＣＰＵ／メモリボード１０２には、システムコントローラ１４１，１４２、メモリアクセスコントローラ１５１，１５２およびＤＩＭＭ１６１，１６２が搭載されている。
【００３７】
ＣＰＵ１１０ａ，１１０ｂは、システムコントローラ１４１およびメモリアクセスコントローラ１５１を介して、ＤＩＭＭ１６１にアクセス可能となっている。また、ＣＰＵ１１０ａ，１１０ｂは、システムコントローラ１４２およびメモリアクセスコントローラ１５２を介して、ＤＩＭＭ１６２にアクセス可能となっている。なお、このように、ＣＰＵとメモリとをシステムコントローラおよびメモリアクセスコントローラを介して接続する構成とすることで、例えば３つ以上のＣＰＵをＣＰＵ／メモリボード上に搭載させることも可能である。
【００３８】
また、ＣＰＵ／メモリボード１０２とＣＰＵ／メモリボード１０３とは、クロスバー１７０によって相互に接続されている。例えば、ＣＰＵ／メモリボード１０２のＣＰＵ１１０ａ，１１０ｂは、システムコントローラ１４２およびクロスバー１７０を介して、ＣＰＵ／メモリボード１０３との間で情報を受け渡すことができる。なお、３つ以上のＣＰＵ／メモリボードを、クロスバー１７０を介して接続することも可能である。
【００３９】
次に、上記のＣＰＵ１１０，１１０ａ，１１０ｂが備えるＣＰＵコア１１１の内部構成と動作について説明する。ＣＰＵコア１１１は、ＳＩＭＤ処理と非ＳＩＭＤ処理の両方を実行可能になっている。
【００４０】
図４は、ＣＰＵコアの全体の構成例を示す図である。
本実施の形態のＣＰＵコア１１１は、例として、浮動小数点ロード／浮動小数点演算／浮動小数点ストアを要求するＳＩＭＤ命令に応じたＳＩＭＤ処理が可能である。また、ＳＩＭＤ処理としては、例として、８バイト（６４ビット）データを２系統並列に処理する２−ＳＩＭＤ処理が実行されるものとする。
【００４１】
このＣＰＵコア１１１は、命令フェッチアドレス生成器２００、分岐予測部２２０、命令キャッシュ２４０、命令バッファ２６０、命令デコーダ２８０、レジスタリネーミング部３００、主記憶オペランドアドレス生成用リザベーションステーション（ＲＳＡ：Reservation Station for Address generate）３２０、固定小数点演算用リザベーションステーション（ＲＳＥ：Reservation Station for Execution）３４０、浮動小数点演算用リザベーションステーション（ＲＳＦ：Reservation Station for Floating）３６０、分岐命令用リザベーションステーション（ＲＳＢＲ：Reservation Station for BRanch）３８０、コミットスタックエントリ（ＣＳＥ：Commit Stack Entry）４００、アドレス生成部４２０、１次データキャッシュ部４６０、ストアバッファ部４８０、演算器５００、ＳＩＭＤ演算器５２０、固定小数点リネーミングレジスタ５４０、浮動小数点リネーミングレジスタ５６０、固定小数点レジスタ５８０、浮動小数点ＳＩＭＤレジスタ６００、およびプログラムカウンタ６２０，６４０を備えている。
【００４２】
命令フェッチアドレス生成器２００は、プログラムカウンタ６２０のカウント値または分岐予測部２２０からの情報を基に命令アドレスを選択し、命令キャッシュ２４０に対して命令フェッチリクエストを発行する。分岐予測部２２０は、ＲＳＢＲ３８０のエントリを基に分岐予測を行う。命令キャッシュ２４０は、命令フェッチリクエストに応じた命令を命令バッファ２６０に格納する。命令バッファ２６０から命令デコーダ２８０に対しては、プログラムにより指定された順番通りに、すなわちイン・オーダで命令が供給され、命令デコーダ２８０は、命令バッファ２６０から供給された命令をイン・オーダでデコードする。
【００４３】
命令デコーダ２８０は、デコードした命令の種類に応じて、ＲＳＡ３２０、ＲＳＥ３４０、ＲＳＦ３６０またはＲＳＢＲ３８０に対して、必要なエントリを作成する。これとともに、命令デコーダ２８０は、デコードされたすべての命令に対応するエントリをＣＳＥ４００に作成する。
【００４４】
レジスタリネーミング部３００は、ＲＳＡ３２０、ＲＳＥ３４０またはＲＳＦ３６０のいずれかにエントリが作成された場合に、命令に応じた処理で使用されるアーキテクチャレジスタのアドレスに、リネーミングレジスタのアドレスを割り当てる。ＣＰＵコア１１１は、ソフトウェアから参照されるアーキテクチャレジスタとして、固定小数点レジスタ５８０および浮動小数点ＳＩＭＤレジスタ６００を備えている。またリネーミングレジスタとして、固定小数点リネーミングレジスタ５４０および浮動小数点リネーミングレジスタ５６０を備えている。固定小数点レジスタ５８０が使用される場合には、リネーミングレジスタとして固定小数点リネーミングレジスタ５４０のアドレスが割り当てられる。また、浮動小数点ＳＩＭＤレジスタ６００が使用される場合には、リネーミングレジスタとして浮動小数点リネーミングレジスタ５６０のアドレスが割り当てられる。割り当てられたリネーミングレジスタのアドレスは、ＲＳＡ３２０、ＲＳＥ３４０、ＲＳＦ３６０およびＣＳＥ４００などの必要なブロックに対して出力される。
【００４５】
ＲＳＡ３２０、ＲＳＥ３４０およびＲＳＦ３６０は、保持されたエントリのうち、処理に必要な資源が準備されたものから順次出力し、後段のブロックに対してエントリに対応する処理を実行させる。これにより、命令がアウト・オブ・オーダで実行され、処理結果は固定小数点リネーミングレジスタ５４０または浮動小数点リネーミングレジスタ５６０に格納される。
【００４６】
ＲＳＡ３２０には、例えば、ロード命令およびストア命令に対応するエントリが格納される。アドレス生成部４２０は、ＲＳＡ３２０からのエントリに基づいてオペランドデータを選択し、選択したデータを基にオペランドアドレスを生成する。
【００４７】
ロード命令の実行時には、アドレス生成部４２０からのオペランドアドレスは１次データキャッシュ部４６０に出力される。１次データキャッシュ部４６０は、アドレス生成部４２０からのオペランドアドレスに対応するデータを、固定小数点リネーミングレジスタ５４０または浮動小数点リネーミングレジスタ５６０に格納する。また、ストア命令の実行時には、アドレス生成部４２０からのオペランドアドレスはストアバッファ部４８０に出力される。
【００４８】
ＲＳＥ３４０には、例えば、固定小数点演算命令に対応するエントリが格納される。演算器５００は、ＲＳＥ３４０からのエントリに基づいて、固定小数点演算を実行し、演算結果を固定小数点リネーミングレジスタ５４０に格納する。また、固定小数点ストア命令の実行時には、演算器５００は、演算対象として選択したデータをそのままストアバッファ部４８０に出力する。この場合、ストアバッファ部４８０は、１次データキャッシュ部４６０に対して、アドレス生成部４２０から出力されたオペランドアドレスを指定して、演算器５００から出力されたデータを１次データキャッシュ部４６０に書き込む。
【００４９】
ＲＳＦ３６０には、例えば、浮動小数点演算命令および浮動小数点ストア命令に対応するエントリが格納される。ＳＩＭＤ演算器５２０は、ＲＳＦ３６０からのエントリに基づいて演算対象とするデータを選択し、浮動小数点演算を実行する。浮動小数点演算命令の実行時には、ＳＩＭＤ演算器５２０の演算結果は浮動小数点リネーミングレジスタ５６０に格納される。また、浮動小数点ストア命令の実行時には、ＳＩＭＤ演算器５２０は、演算対象として選択したデータをそのままストアバッファ部４８０に出力する。この場合、ストアバッファ部４８０は、１次データキャッシュ部４６０に対して、アドレス生成部４２０から出力されたオペランドアドレスを指定して、ＳＩＭＤ演算器５２０から出力されたデータを１次データキャッシュ部４６０に書き込む。
【００５０】
ＲＳＢＲ３８０には、分岐命令に対応するエントリが格納される。ＲＳＢＲ３８０に格納されたエントリに基づく情報は、分岐予測部２２０およびプログラムカウンタ６４０に出力される。
【００５１】
ＣＳＥ４００は、命令デコーダ２８０によりデコードされたすべての命令に対応するエントリを保持し、各エントリに対応する処理の実行状況を管理して、これらの命令をデコード順、すなわちイン・オーダで完了させる。例えば、ＣＳＥ４００は、次に完了させるべきエントリに対応する処理の結果が、固定小数点リネーミングレジスタ５４０または浮動小数点リネーミングレジスタ５６０に格納されたと判定すると、格納されたデータを固定小数点レジスタ５８０または浮動小数点ＳＩＭＤレジスタ６００に出力させる。これにより、例えば、ＲＳＡ３２０、ＲＳＥ３４０およびＲＳＦ３６０などによりアウト・オブ・オーダで実行された命令が、イン・オーダで完了する。
【００５２】
固定小数点リネーミングレジスタ５４０は、ＣＳＥ４００が備えるエントリの数と同じか、それより少ない数のレジスタを有する。一方、後述するように、浮動小数点ＳＩＭＤレジスタ６００が備えるレジスタは、それぞれ同数の基本レジスタおよび拡張レジスタとして区別されている。基本レジスタおよび拡張レジスタは、それぞれ、ＣＳＥ４００が備えるエントリの数と同じか、それより少ない数だけ設けられている。
【００５３】
プログラムカウンタ６２０は、ＣＳＥ４００により命令が完了されるごとに、そのカウント値をカウントアップする。また、プログラムカウンタ６４０は、ＲＳＢＲ３８０からのエントリに基づき、分岐先の命令に対応するカウント値を保持し、そのカウント値でプログラムカウンタ６２０を更新する。
【００５４】
次に、浮動小数点ＳＩＭＤレジスタ６００に対するレジスタリネーミング処理について説明する。まず、図５は、ＳＩＭＤ命令実行時におけるレジスタリネーミング処理を説明する図である。
【００５５】
図５に示すように、浮動小数点ＳＩＭＤレジスタ６００は、基本レジスタ６０１および拡張レジスタ６０２を備えている。基本レジスタ６０１および拡張レジスタ６０２は、それぞれ８バイトのビット幅を有し、それぞれ同数だけ設けられている。本実施の形態では、例として、基本レジスタ６０１および拡張レジスタ６０２は、それぞれ１２８個設けられている。なお、０〜１２７までの同じレジスタ番号を有する基本レジスタ６０１および拡張レジスタ６０２は、１６バイト（１２８ビット）のビット幅を有するＳＩＭＤレジスタの上位の領域および下位の領域として実現されてもよい。
【００５６】
浮動小数点リネーミングレジスタ５６０は、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２を備えている。基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２は、それぞれ８バイトの容量を有し、それぞれ同数だけ設けられている。基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２の数は、ＣＳＥ４００のエントリの数以下とされればよい。
【００５７】
レジスタリネーミング部３００は、基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２を備えている。基本レジスタリネーミングマップ３０１は、基本レジスタ６０１のそれぞれに対応するエントリを有し、基本レジスタ６０１のそれぞれに割り当てられた基本リネーミングレジスタ５６１のレジスタ番号またはアドレスを保持する。また、拡張レジスタリネーミングマップ３０２は、拡張レジスタ６０２のそれぞれに対応するエントリを有し、拡張レジスタ６０２のそれぞれに割り当てられた拡張リネーミングレジスタ５６２のレジスタ番号またはアドレスを保持する。基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２に対するレジスタ番号またはアドレスの割り当て処理は、命令デコーダ２８０によって実行される。
【００５８】
ＳＩＭＤ命令が実行された場合、浮動小数点ＳＩＭＤレジスタ６００においては、０〜１２７までのレジスタ番号のうち同じレジスタ番号を有する基本レジスタ６０１と拡張レジスタ６０２とが、セットで使用される。そして、ＳＩＭＤ命令に応じて並列処理される２つの８バイトデータのうち、一方のデータにより基本レジスタ６０１が使用され、他方のデータにより、基本レジスタ６０１と同じレジスタ番号を有する拡張レジスタ６０２が使用される。
【００５９】
例えば、ＳＩＭＤ命令によりディスティネーションオペランドとして浮動小数点ＳＩＭＤレジスタ６００のレジスタ番号“０”が指定された場合、ＣＰＵコア１１１では、ＳＩＭＤ命令により指定された２つの８バイトデータに対して同じ処理が並列に実行される。そして、処理後のデータは、一旦浮動小数点リネーミングレジスタ５６０に書き込まれた後、浮動小数点ＳＩＭＤレジスタ６００に書き込まれる。この場合、浮動小数点ＳＩＭＤレジスタ６００では、処理された一方の８バイトデータがレジスタ番号“０”の基本レジスタ６０１に格納され、他方の８バイトデータがレジスタ番号“０”の拡張レジスタ６０２に格納される。
【００６０】
一方、レジスタリネーミング部３００では、同じレジスタ番号を有する基本レジスタ６０１および拡張レジスタ６０２に対して、異なるレジスタ番号を有する基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２をそれぞれ割り当てることが可能になっている。例えば、図５の例では、レジスタ番号“０”の基本レジスタ６０１に対して、レジスタ番号“０”の基本リネーミングレジスタ５６１が割り当てられる。一方、レジスタ番号“０”の拡張レジスタ６０２に対しては、レジスタ番号“２”の拡張リネーミングレジスタ５６２が割り当てられる。
【００６１】
従って、例えば、ＳＩＭＤ命令によりディスティネーションオペランドとして浮動小数点ＳＩＭＤレジスタ６００のレジスタ番号“０”が指定され、図５のようなリネーミングレジスタの割り当てが行われた場合には、処理された一方の８バイトデータは、レジスタ番号“０”の基本リネーミングレジスタ５６１に一旦格納される。また、処理された他方の８バイトデータは、レジスタ番号“２”の拡張リネーミングレジスタ５６２に格納される。そして、レジスタ番号“０”の基本リネーミングレジスタ５６１へのデータの格納と、レジスタ番号“２”の拡張リネーミングレジスタ５６２へのデータの格納とがともに完了すると、格納されたそれぞれのデータがレジスタ番号“０”の基本レジスタ６０１および拡張レジスタ６０２に転送される。これにより、ＳＩＭＤ命令がイン・オーダで完了する。
【００６２】
図６は、非ＳＩＭＤ命令実行時におけるレジスタリネーミング処理を説明する図である。
非ＳＩＭＤ命令が実行された場合、ＣＰＵコア１１１では、１つの８バイトデータに対して１つの処理が実行される。この場合、浮動小数点ＳＩＭＤレジスタ６００では、基本レジスタ６０１および拡張レジスタ６０２は、それぞれ独立したレジスタとして扱われ、これらの２５６個のレジスタのうち１つが非ＳＩＭＤ処理で使用される。例えば、非ＳＩＭＤ命令では、演算結果を格納するディスティネーションレジスタを指定するディスティネーションオペランドとして、浮動小数点ＳＩＭＤレジスタ６００内の２５６個のレジスタのうち１つを指定できる。この場合、例えば、ディスティネーションオペランドとして、浮動小数点ＳＩＭＤレジスタ６００内のレジスタが０〜２５５のレジスタ番号により指定される。
【００６３】
一方、レジスタリネーミング部３００では、非ＳＩＭＤ命令により指定された基本レジスタ６０１または拡張レジスタ６０２に対して、それぞれ基本リネーミングレジスタ５６１または拡張リネーミングレジスタ５６２のレジスタ番号またはアドレスが割り当てられる。図６の例では、レジスタ番号“１２８”の拡張レジスタ６０２に対して、レジスタ番号“１”の拡張リネーミングレジスタ５６２が割り当てられる。
【００６４】
ここで、図７は、浮動小数点ＳＩＭＤレジスタのそれぞれのビット幅が１６バイトに固定されている場合のレジスタリネーミング処理例を説明する参考図である。以下、この図７に示すレジスタリネーミング処理を、図５，図６に示した本実施の形態のレジスタリネーミング処理と対比する。
【００６５】
図７において、浮動小数点ＳＩＭＤレジスタ６００ａは、それぞれ１６バイトのビット幅を有する。また、浮動小数点リネーミングレジスタ５６０ａは、それぞれ１６バイトのビット幅を有する。レジスタリネーミングマップ３００ａは、浮動小数点ＳＩＭＤレジスタ６００ａのそれぞれに対して割り当てられた浮動小数点リネーミングレジスタ５６０ａのレジスタ番号またはアドレスを保持する。
【００６６】
このような構成において、ＳＩＭＤ命令によりディスティネーションオペランドとして浮動小数点ＳＩＭＤレジスタ６００ａが指定されると、例えば、処理された一方の８バイトデータは、対応する浮動小数点リネーミングレジスタ５６０ａの前半に格納される。また、処理された他方の８バイトデータは、対応する浮動小数点リネーミングレジスタ５６０ａの後半に格納される。そして、これらの格納処理が完了した後、浮動小数点リネーミングレジスタ５６０ａに格納された２つの８バイトデータが、対応する浮動小数点ＳＩＭＤレジスタ６００ａに格納される。
【００６７】
一方、図７の構成において、非ＳＩＭＤ命令が実行された場合には、１つの８バイトデータのみが処理されるため、浮動小数点ＳＩＭＤレジスタ６００ａ内の半分だけしかデータが格納されない。また、その浮動小数点ＳＩＭＤレジスタ６００ａに対して割り当てられた浮動小数点リネーミングレジスタ５６０ａにおいても、同様に半分だけしかデータが格納されない。従って、レジスタの使用効率が悪いという問題がある。
【００６８】
これに対して、図５，図６に示した本実施の形態のレジスタリネーミング処理では、ＳＩＭＤ処理時には、浮動小数点ＳＩＭＤレジスタ６００内の基本レジスタ６０１および拡張レジスタ６０２がセットで取り扱われる。一方、非ＳＩＭＤ処理時には、基本レジスタ６０１および拡張レジスタ６０２はそれぞれ独立したレジスタとして取り扱われる。このため、ＳＩＭＤ命令／非ＳＩＭＤ命令が実行された場合でも、浮動小数点ＳＩＭＤレジスタ６００内のレジスタを効率よく使用できる。
【００６９】
また、浮動小数点リネーミングレジスタ５６０では、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２において、それぞれ８バイト単位でデータが取り扱われる。従って、非ＳＩＭＤ処理時は、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２のうちの１つのレジスタのみが使用される。さらに、ＳＩＭＤ処理時には、同じレジスタ番号を有する基本レジスタ６０１および拡張レジスタ６０２に対して、それぞれ異なるレジスタ番号を有する基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２を割り当てることができる。これにより、ＳＩＭＤ命令／非ＳＩＭＤ命令が混在するプログラムが実行された場合でも、浮動小数点リネーミングレジスタ５６０内のリネーミングレジスタを効率よく使用できる。
【００７０】
なお、上記の図５，図６の説明では、ディスティネーションオペランドとして浮動小数点ＳＩＭＤレジスタ６００が指定された場合の処理例を示したが、浮動小数点ＳＩＭＤレジスタ６００をソースオペランドとして指定することも可能である。この場合、上記の手法で割り当てられた基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２から、オペランドデータを読み込むことも可能である。
【００７１】
また、上記の図６の説明では、説明をわかりやすくするために、拡張レジスタ６０２に対して１２８〜２５５のレジスタ番号を付与していた。しかし、以下の説明では、拡張レジスタ６０２には基本レジスタ６０１と同じく０〜１２７のレジスタ番号が付与されるものとする。そして、非ＳＩＭＤ命令では、レジスタ番号０〜１２７の拡張レジスタ６０２を、レジスタ番号１２８〜２５５によって指定できるものとする。
【００７２】
次に、命令デコーダ２８０に供給される命令として、浮動小数点ロード命令、浮動小数点演算命令および浮動小数点ストア命令の３種類の例を挙げ、これらの命令を実行するときのＣＰＵコア１１１の処理について具体的に説明する。
【００７３】
〔浮動小数点ロード命令実行時の処理〕
浮動小数点ロード命令がデコードされると、ＣＰＵコア１１１は、ソースオペランドで指定されるアドレスのデータを読み込み、ディスティネーションオペランドで指定されるレジスタに対して書き込む。浮動小数点ロードのＳＩＭＤ命令（以下、ＳＩＭＤロード命令と呼ぶ）の命令コードは、例えば“Simd-load [address] %f127”と記述される。この命令では、ソースオペランドである“[address]”で指定されるアドレスから連続して記録された２つの８バイトデータを読み込むことが要求される。さらに、それらの８バイトデータを、ディスティネーションオペランドである“%f127”で指定される浮動小数点ＳＩＭＤレジスタ６００内の基本レジスタ６０１および拡張レジスタ６０２にそれぞれ書き込むことが要求される。“%f127”は、浮動小数点ＳＩＭＤレジスタ６００におけるレジスタ番号“１２７”を指す。
【００７４】
一方、浮動小数点ロードの非ＳＩＭＤ命令（以下、非ＳＩＭＤロード命令と呼ぶ）の命令コードは、オペコードが変更される以外は上記と同じ形式で記述される。この命令では、ソースオペランドで指定されるアドレスから１つの８バイトデータを読み込むことが要求される。さらに、それらの８バイトデータを、ディスティネーションオペランドで指定される浮動小数点ＳＩＭＤレジスタ６００内のレジスタに書き込むことが要求される。
【００７５】
ＳＩＭＤロード命令では、ディスティネーションオペランドにおいて０〜１２７のレジスタ番号が指定される。これに対して、非ＳＩＭＤロード命令では、ディスティネーションオペランドにおいて０〜２５５の浮動小数点ＳＩＭＤレジスタ６００のレジスタ番号を指定可能である。なお、本実施の形態では、例として、命令コード中のソースオペランドは、固定小数点レジスタ５８０のレジスタ番号により指定されるものとする。
【００７６】
図８は、ＣＰＵコアにおいて浮動小数点ロード命令実行時に動作する構成要素を示す図である。
命令デコーダ２８０は、浮動小数点ロード命令をデコードすると、ＣＳＥ４００およびＲＳＡ３２０に対してエントリを登録する。また、命令デコーダ２８０は、ロードデータの書き込み先の浮動小数点ＳＩＭＤレジスタ６００に対して、浮動小数点リネーミングレジスタ５６０を割り当てる。割り当てたレジスタのアドレスは、レジスタリネーミング部３００の基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２に登録される。また、割り当てたアドレスは、ＣＳＥ４００およびＲＳＡ３２０の各エントリにも登録される。
【００７７】
さらに、ソースオペランドにより指定されたレジスタ内のデータ（以下、オペランドデータと呼ぶ）が固定小数点リネーミングレジスタ５４０にも格納されている場合、格納されたアドレスが固定小数点レジスタリネーミングマップ３０３から取得される。取得されたアドレスは、ＲＳＡ３２０のエントリに登録される。
【００７８】
アドレス生成部４２０は、オペランドデータ選択部４３０と、オペランドアドレス生成器４４０とを備える。ＲＳＡ３２０から浮動小数点ロード命令に対応するエントリが発行されると、オペランドデータ選択部４３０は、固定小数点レジスタ５８０または固定小数点リネーミングレジスタ５４０から、オペランドデータを取得する。オペランドアドレス生成器４４０は、オペランドデータ選択部４３０からのオペランドデータに基づき、オペランドアドレスを生成する。
【００７９】
１次データキャッシュ部４６０は、キャッシュデータを記憶する１次データキャッシュ４６１と、１次データキャッシュ４６１からの出力データを一時的に格納する基本ロードレジスタ４６２および拡張ロードレジスタ４６３とを備える。１次データキャッシュ４６１は、オペランドアドレス生成器４４０からのオペランドアドレスに対応するデータを、浮動小数点リネーミングレジスタ５６０に出力する。基本リネーミングレジスタ５６１に対しては、基本ロードレジスタ４６２を介してデータが出力され、拡張リネーミングレジスタ５６２に対しては、拡張ロードレジスタ４６３を介してデータが出力される。
【００８０】
基本リネーミングレジスタ５６１に格納されたデータは、ＣＳＥ４００の制御の下で、基本レジスタ６０１に格納される。また、拡張リネーミングレジスタ５６２に格納されたデータは、ＣＳＥ４００の制御の下で、拡張レジスタ６０２に格納される。
【００８１】
以上の構成では、１次データキャッシュ４６１から基本ロードレジスタ４６２に出力されたデータは、基本リネーミングレジスタ５６１に格納された後、基本レジスタ６０１に格納される。また、１次データキャッシュ４６１から拡張ロードレジスタ４６３に出力されたデータは、拡張リネーミングレジスタ５６２に格納された後、拡張レジスタ６０２に格納される。以下の説明では、基本ロードレジスタ４６２、基本リネーミングレジスタ５６１および基本レジスタ６０１の順にデータを転送するバスを“基本バス”と呼ぶ。また、拡張ロードレジスタ４６３、拡張リネーミングレジスタ５６２および拡張レジスタ６０２の順にデータを転送するバスを“拡張バス”と呼ぶ。
【００８２】
図９，図１０は、浮動小数点ロード命令実行時のパイプラインを説明する図である。
浮動小数点ロード命令実行時のパイプラインは、例えば、順にＤサイクル、Ｐサイクル、Ｂサイクル、Ａサイクル、ＦＴサイクル、ＦＭサイクル、ＦＢサイクル、ＦＲサイクル、ＣサイクルおよびＷサイクルを含む。なお、ＡサイクルとＳＴサイクルとの間には、ＦＰサイクルが挿入される場合もある。
【００８３】
Ｄサイクルは、命令デコードサイクル（Decode cycle）である。このＤサイクルでは、命令デコーダ２８０により浮動小数点ロード命令がデコードされ、そのデコード結果に基づき、ＣＳＥ４００へのエントリ登録処理（ステップＳ１１）およびＲＳＡ３２０へのエントリ登録処理（ステップＳ１２）が実行される。
【００８４】
命令デコーダ２８０は、主として、ロードデータの書き込み先に関する情報をＣＳＥ４００のエントリに登録する。例えば、浮動小数点ＳＩＭＤレジスタ６００における書き込み先のアドレスや、基本レジスタ６０１および拡張レジスタ６０２をそれぞれ書き込み先とするか否かを示す情報などが登録される。
【００８５】
また、命令デコーダ２８０は、書き込み先の浮動小数点ＳＩＭＤレジスタ６００に対して浮動小数点リネーミングレジスタ５６０を割り当て、レジスタリネーミングマップに登録する（ステップＳ１３）。この登録処理では、図５，図６で説明した手法が用いられる。命令デコーダ２８０は、ＳＩＭＤロード命令をデコードした場合、書き込み先レジスタに対応する基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２のエントリに対して、それぞれ基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２の各アドレスを登録する。このとき、基本リネーミングレジスタ５６１のアドレスと拡張リネーミングレジスタ５６２のアドレスは、それぞれ異なるアドレスであってよい。図９の例では、割り当てられた基本リネーミングレジスタ５６１のアドレスを“Ａ”、割り当てられた拡張リネーミングレジスタ５６２のアドレスを“Ｂ”と示している。
【００８６】
命令デコーダ２８０は、リネーミングマップに割り当てた基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２の各アドレスを、ＣＳＥ４００のエントリに対しても登録する。さらに、命令デコーダ２８０は、割り当てた基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２の各アドレスを、ＲＳＡ３２０のエントリに対しても登録する。
【００８７】
一方、命令デコーダ２８０は、書き込み先レジスタに対応するリネーミングアドレスの他に、ソースデータに関する情報などをＲＳＡ３２０のエントリに登録する。例えば、命令デコーダ２８０は、ソースオペランドで指定された、ソースデータの読み出しアドレスである固定小数点レジスタ５８０のアドレスを、ＲＳＡ３２０のエントリに登録する。
【００８８】
また、命令デコーダ２８０から出力された固定小数点レジスタ５８０のアドレスに対して固定小数点リネーミングレジスタ５４０が割り当てられていた場合、その固定小数点リネーミングレジスタ５４０のアドレスが固定小数点レジスタリネーミングマップ３０３から出力される（ステップＳ１４）。出力された固定小数点リネーミングレジスタ５４０のアドレスは、ＲＳＡ３２０のエントリに登録される。
【００８９】
次に、Ｐサイクルは、プライオリティサイクル（Priority cycle）である。このＰサイクルでは、ＲＳＡ３２０におけるデータの待ち合わせ制御が行われる。前述のように、ＲＳＡ３２０は、登録されたエントリのうち、必要なデータが揃った順にエントリを発行する。ＲＳＡ３２０からオペランドデータ選択部４３０に対して、浮動小数点ロード命令に対応するエントリが発行されると、Ｂサイクルに遷移する（ステップＳ１５）。
【００９０】
Ｂサイクル（Buffer cycle）において、オペランドデータ選択部４３０は、ＲＳＡ３２０から発行されたエントリの内容に基づき、オペランドデータを固定小数点レジスタ５８０または固定小数点リネーミングレジスタ５４０から読み込み、オペランドアドレス生成器４４０に出力する（ステップＳ１６）。
【００９１】
Ａサイクルは、オペランドアドレス生成器４４０によるアドレス生成サイクル（Address cycle）である。オペランドアドレス生成器４４０は、オペランドデータ選択部４３０から出力されたオペランドデータに基づき、ロードデータの読み出し元を示すオペランドアドレスを生成し、１次データキャッシュ部４６０に出力する（ステップＳ１７）。
【００９２】
ＦＴ，ＦＭ，ＦＢの各サイクル（First cache-Tag cycle, First cache-Match cycle, First cache-Buffer cycle）では、１次データキャッシュ部４６０において１次データキャッシュ４６１からロードデータを出力するために必要な制御が実行される（ステップＳ１８）。なお、例えば、２次データキャッシュ１１２やメインメモリなどからのデータの読み込みが必要な場合などには、ＦＴサイクルの前にＦＰサイクル（First cache-Priority cycle）が挿入される。オペランドアドレス生成器４４０から出力されたオペランドアドレスに対応するデータが１次データキャッシュ４６１に記憶されていた場合、ＦＲサイクルに遷移する。
【００９３】
ＦＲサイクル（First cache-Result cycle）では、ＲＳＡ３２０から発行されたエントリに対応する処理の実行が完了される。このＦＲサイクルでは、１次データキャッシュ４６１からロードデータが出力され、基本ロードレジスタ４６２または拡張ロードレジスタ４６３の少なくとも一方に格納される（ステップＳ１９）。
【００９４】
ＳＩＭＤロード命令の実行時には、１次データキャッシュ４６１からそれぞれ８バイトの２つのロードデータが出力され、それぞれ基本ロードレジスタ４６２および拡張ロードレジスタ４６３に一旦格納される。なお、図１０では、一方の８バイトロードデータを“Ｘ（８Ｂ）”、他方の８バイトロードデータを“Ｙ（８Ｂ）”と表している。そして、基本ロードレジスタ４６２および拡張ロードレジスタ４６３へのデータの格納が完了すると、１次データキャッシュ部４６０は、ＣＳＥ４００に対してデータ格納の完了を報告する（ステップＳ２０）。
【００９５】
次に、基本ロードレジスタ４６２および拡張ロードレジスタ４６３に格納された次のサイクルで、基本ロードレジスタ４６２に格納されたロードデータが、基本リネーミングレジスタ５６１上の割り当てられたアドレスに格納される。また、拡張ロードレジスタ４６３に格納されたロードデータが、拡張リネーミングレジスタ５６２上の割り当てられたアドレスに格納される（ステップＳ２１）。
【００９６】
なお、ＲＳＡ３２０から１次データキャッシュ部４６０に対しては、オペランドデータ選択部４３０およびオペランドアドレス生成器４４０を介して、ロードデータ格納先の基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２のうちの少なくとも一方のアドレスと、これらのレジスタにロードデータを格納するバスを指定する信号とが伝達される。１次データキャッシュ部４６０は、これらの情報および信号に基づき、１次データキャッシュ４６１から出力したロードデータを、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２の対応する位置に書き込むことが可能になる。
【００９７】
ところで、ロードデータは通常、１次データキャッシュ４６１上の連続するアドレス領域に格納される。このため、通常は、一方のロードデータが基本ロードレジスタ４６２に出力された後、連続して他方のロードデータが拡張ロードレジスタ４６３に出力される。しかし、例えば、２つのロードデータのうち一方しか１次データキャッシュ４６１に記憶されておらず、他方のロードデータについてはメインメモリに近いより下層の記憶領域からデータを読み込まなくてはならない場合が考えられる。例えば、図１０において、ロードデータ“Ｙ（８Ｂ）”が、ロードデータ“Ｘ（８Ｂ）”が記憶されたラインの次のラインに格納された場合などに、上記の状態となり得る。
【００９８】
このような場合には、基本ロードレジスタ４６２へのロードデータの格納タイミングと、拡張ロードレジスタ４６３へのロードデータの格納タイミングとの間に間隔が空いてもよい。１次データキャッシュ部４６０は、基本ロードレジスタ４６２へのロードデータの格納時と、拡張ロードレジスタ４６３へのロードデータの格納時とで、それぞれ個別にＣＳＥ４００に対して完了報告を行う。また、ＣＳＥ４００は、基本ロードレジスタ４６２と拡張ロードレジスタ４６３のうち、両方へのデータの格納が必要か、あるいはいずれか１つへのデータの格納が必要かを、エントリを用いて管理する。このような構成により、基本ロードレジスタ４６２へのロードデータの格納タイミングと、拡張ロードレジスタ４６３へのロードデータの格納タイミングとの間に間隔が空いた場合でも、ＣＳＥ４００は命令の完了を正確に判定できる。
【００９９】
Ｃサイクルは、命令完了サイクル（Commit cycle）である。ＣＳＥ４００は、浮動小数点ロード命令が完了したと判定する（ステップＳ２２）。Ｗサイクルは、レジスタ更新サイクル（Write cycle）である。Ｗサイクルでは、基本リネーミングレジスタ５６１に格納されたロードデータが、基本レジスタ６０１上の対応するアドレスに格納される。また、拡張リネーミングレジスタ５６２に格納されたロードデータが、拡張レジスタ６０２上の対応するアドレスに格納される。これらの格納動作は、ＣＳＥ４００によって制御される（ステップＳ２３）。
【０１００】
ＳＩＭＤロード命令の実行時には、基本リネーミングレジスタ５６１と拡張リネーミングレジスタ５６２の両方にロードデータが格納される。従って、ＣＳＥ４００は、これら２つのロードデータを、それぞれ基本レジスタ６０１および拡張レジスタ６０２における同じレジスタ番号の位置に格納する。なお、ＣＳＥ４００のエントリには、基本レジスタ６０１および拡張レジスタ６０２のレジスタ番号と、これらに割り当てられた基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２の各アドレスとが保持される。従って、ＣＳＥ４００は、エントリ内のこれらの情報に基づき、基本レジスタ６０１および拡張レジスタ６０２へのロードデータの格納処理を制御する。
【０１０１】
図１１，図１２は、非ＳＩＭＤロード命令実行時のデータの流れを説明する図である。これらの図を用いて、ＳＩＭＤロード命令実行時との動作の違いについて説明する。
非ＳＩＭＤロード命令では、ロードデータの書き込み先として、基本レジスタ６０１および拡張レジスタ６０２の中の１つのレジスタのみが指定される。Ｄサイクルにおいて、命令デコーダ２８０は、非ＳＩＭＤロード命令をデコードすると、ロードデータの書き込み先として指定された１つのレジスタに対して、リネーミングレジスタを割り当てる。図１１では、ロードデータの書き込み先として拡張レジスタ６０２の１つが指定された場合を示している。この場合には、拡張レジスタリネーミングマップ３０２内の対応する位置に、命令デコーダ２８０によって割り当てられた、拡張リネーミングレジスタ５６２のアドレスが登録される。
【０１０２】
ＲＳＡ３２０からエントリが発行された後、Ｂサイクルでは、オペランドデータ選択部４３０は、固定小数点レジスタ５８０または固定小数点リネーミングレジスタ５４０からオペランドデータを選択する。Ａサイクルでは、オペランドアドレス生成器４４０は、オペランドデータ選択部４３０からのオペランドデータに基づいてオペランドアドレスを生成し、１次データキャッシュ部４６０に出力する。ＦＲサイクルでは、１次データキャッシュ４６１は、８バイトのロードデータを１つだけ出力する。図１１，図１２の例では、１次データキャッシュ４６１からのロードデータは拡張ロードレジスタ４６３に格納される。そして、次のＣサイクルで、拡張ロードレジスタ４６３に格納されたロードデータは、拡張リネーミングレジスタ５６２内の対応する位置に格納される。
【０１０３】
後述するように、命令デコーダ２８０からは、ＲＳＡ３２０、オペランドデータ選択部４３０、オペランドアドレス生成器４４０を通じて、１次データキャッシュ部４６０に対して、データの転送に基本バスを使用するか否か、および拡張バスを使用するか否かをそれぞれ示すバス指定信号が伝達される。１次データキャッシュ部４６０は、伝達されたバス指定信号に従って、１次データキャッシュ４６１から読み出したロードデータを、基本ロードレジスタ４６２および拡張ロードレジスタ４６３に対して振り分けることができる。
【０１０４】
ＣＳＥ４００は、拡張ロードレジスタ４６３への格納動作の完了報告に基づき、命令の完了を判定する。次のＷサイクルでは、ＣＳＥ４００の制御の下で、拡張リネーミングレジスタ５６２に格納されたロードデータが、拡張レジスタ６０２内の対応する位置に格納される。
【０１０５】
上記の非ＳＩＭＤロード命令実行時の動作において、浮動小数点リネーミングレジスタ５６０内のレジスタは、８バイト単位の独立したレジスタとして取り扱われる。また、Ｗサイクルでは、浮動小数点ＳＩＭＤレジスタ６００内のレジスタは、８バイト単位の独立したレジスタとして取り扱われる。従って、浮動小数点リネーミングレジスタ５６０および浮動小数点ＳＩＭＤレジスタ６００においては、使用不可能となる無駄な記憶領域が発生しなくなり、記憶領域の使用効率が向上する。
【０１０６】
次に、浮動小数点ロード命令実行時に動作する各ブロックの詳細な構成を示すとともに、それらのブロック間での信号の流れについて説明する。
図１３は、浮動小数点ロード命令実行時の命令デコーダの出力信号を示す図である。
【０１０７】
命令デコーダ２８０は、命令デコード回路２８１、制御信号生成回路２８２、基本リネーミングレジスタ割り当て回路２８３、拡張リネーミングレジスタ割り当て回路２８４およびＣＳＥ割り当て回路２８５を備えている。なお、命令デコーダ２８０は後述するように、ストアバッファ割り当て回路をさらに備えているが、浮動小数点ロード命令の実行時には使用されないため、図１３では省略している。また、図１３では、浮動小数点ロード命令の実行時のＤサイクルにおいて出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０１０８】
命令デコード回路２８１は、命令バッファ２６０から出力された命令をデコードする。命令デコード回路２８１は、浮動小数点ロード命令をデコードすると、浮動小数点ロード命令であることを示す制御信号Ｄ＿ＬＯＡＤをオンにする。制御信号Ｄ＿ＬＯＡＤは、ＲＳＡ３２０に出力される。
【０１０９】
また、命令デコード回路２８１は、ロードデータの書き込み先の浮動小数点ＳＩＭＤレジスタ６００のアドレスを示すアドレス信号Ｄ＿ＷＲ＿ＡＤＲを、基本レジスタリネーミングマップ３０１、拡張レジスタリネーミングマップ３０２、ＣＳＥ４００および制御信号生成回路２８２に出力する。アドレス信号Ｄ＿ＷＲ＿ＡＤＲは、０〜１２７の値をとる。
【０１１０】
また、命令デコード回路２８１は、オペランドデータの読み出し元の固定小数点レジスタ５８０のアドレスを示すアドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲを、固定小数点レジスタリネーミングマップ３０３およびＲＳＡ３２０に対して出力する。
【０１１１】
また、命令デコード回路２８１は、ロードデータの格納先として基本レジスタ６０１および拡張レジスタ６０２がそれぞれ指定されたか否かを示すＤ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＵＳＥ＿ＥＸＴＥＮＤを、制御信号生成回路２８２に対して出力する。
【０１１２】
制御信号生成回路２８２は、命令デコード回路２８１からのアドレス信号Ｄ＿ＷＲ＿ＡＤＲを受信すると、次の信号を出力する。
制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣは、ロードデータの転送に基本バスを使用するか否かを示す信号であり、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤは、ロードデータの転送に拡張バスを使用するか否かを示す信号である。制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤは、ともにＣＳＥ４００およびＲＳＡ３２０に対して出力される。
【０１１３】
制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣは、ロードデータの書き込み先が基本レジスタ６０１であるか否かを示す信号であり、ＣＳＥ４００、基本レジスタリネーミングマップ３０１および基本リネーミングレジスタ割り当て回路２８３に出力される。制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤは、ロードデータの書き込み先が拡張レジスタ６０２であるか否かを示す信号であり、ＣＳＥ４００、拡張レジスタリネーミングマップ３０２および拡張リネーミングレジスタ割り当て回路２８４に出力される。
【０１１４】
制御信号Ｄ＿ＲＥＬ＿ＲＳＡは、ＲＳＡ３２０に対してエントリの作成を要求する信号である。制御信号Ｄ＿ＲＥＬ＿ＣＳＥは、ＣＳＥ４００に対してエントリの作成を要求する信号であり、ＣＳＥ４００とともに、ＣＳＥ割り当て回路２８５に対しても出力される。
【０１１５】
基本リネーミングレジスタ割り当て回路２８３は、制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣがオンのとき、ロードデータの書き込み先の基本レジスタ６０１に、基本リネーミングレジスタ５６１の空きアドレスを割り当てる。基本リネーミングレジスタ割り当て回路２８３からは、割り当てたアドレスを示すアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣが、基本レジスタリネーミングマップ３０１、ＣＳＥ４００およびＲＳＡ３２０に対して出力される。
【０１１６】
拡張リネーミングレジスタ割り当て回路２８４は、制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤがオンのとき、ロードデータの書き込み先の拡張レジスタ６０２に、拡張リネーミングレジスタ５６２の空きアドレスを割り当てる。拡張リネーミングレジスタ割り当て回路２８４からは、割り当てたアドレスを示すアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤが、拡張レジスタリネーミングマップ３０２、ＣＳＥ４００およびＲＳＡ３２０に対して出力される。
【０１１７】
なお、本実施の形態では、例として、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２は、それぞれ３２個のレジスタを有するものとする。従って、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは、それぞれ５ビットの信号である。
【０１１８】
ＣＳＥ割り当て回路２８５は、制御信号Ｄ＿ＲＥＬ＿ＣＳＥが出力されたとき、ＣＳＥ４００に登録するエントリを識別するエントリ識別信号Ｄ＿ＩＩＤを割り当てる。エントリ識別信号Ｄ＿ＩＩＤは、すべての命令のデコード順に割り当てられ、ＣＳＥ４００に出力される。なお、本実施の形態は、例として、ＣＳＥ４００のエントリ数を３２個とする。従って、エントリ識別信号Ｄ＿ＩＩＤは５ビットの信号である。
【０１１９】
図１４は、浮動小数点ロード命令デコード時における命令デコーダでの信号出力処理手順を示すフローチャートである。
［ステップＳ３１］命令デコード回路２８１は、命令をデコードし、オペレーションコードを判定する。デコードした命令がＳＩＭＤロード命令であった場合には、ステップＳ３２の処理が実行され、非ＳＩＭＤ命令であった場合には、ステップＳ３４の処理が実行される。
【０１２０】
［ステップＳ３２］命令デコード回路２８１は、ディスティネーションオペランドに記述されていたレジスタ番号を示すアドレス信号Ｄ＿ＷＲ＿ＡＤＲを出力する。また、命令デコード回路２８１は、制御信号Ｄ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＵＳＥ＿ＥＸＴＥＮＤを、ともにオンにする。
【０１２１】
［ステップＳ３３］制御信号生成回路２８２は、命令デコード回路２８１からの制御信号Ｄ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＵＳＥ＿ＥＸＴＥＮＤがともにオンであると判定する。そして、この判定結果に応じて、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣ，Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤを、すべてオンにする。
【０１２２】
基本リネーミングレジスタ割り当て回路２８３は、制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣがオンになったことに応じて、基本リネーミングレジスタ５６１の空きアドレスを割り当てる。そして、そのアドレスを示すアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣを出力する。また、拡張リネーミングレジスタ割り当て回路２８４は、制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤがオンになったことに応じて、拡張リネーミングレジスタ５６２の空きアドレスを割り当る。そして、そのアドレスを示すアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤを出力する。
【０１２３】
［ステップＳ３４］命令デコード回路２８１は、デコードした非ＳＩＭＤ命令のディスティネーションオペランドに記述されていたレジスタ番号が、“１２７”以下であるか否かを判定する。レジスタ番号が“１２７”以下である場合、ステップＳ３５の処理が実行され、レジスタ番号が“１２７”より大きい場合、ステップＳ３７の処理が実行される。
【０１２４】
［ステップＳ３５］命令デコード回路２８１は、ディスティネーションオペランドに記述されていたレジスタ番号を示すアドレス信号Ｄ＿ＷＲ＿ＡＤＲを出力する。また、命令デコード回路２８１は、制御信号Ｄ＿ＵＳＥ＿ＢＡＳＩＣをオンにし、制御信号Ｄ＿ＵＳＥ＿ＥＸＴＥＮＤをオフにする。
【０１２５】
［ステップＳ３６］制御信号生成回路２８２は、命令デコード回路２８１からの制御信号Ｄ＿ＵＳＥ＿ＢＡＳＩＣがオンであり、制御信号Ｄ＿ＵＳＥ＿ＥＸＴＥＮＤがオフであると判定する。そして、この判定結果に応じて、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣをともにオンにとし、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤをともにオフにする。
【０１２６】
基本リネーミングレジスタ割り当て回路２８３は、制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣがオンになったことに応じて、基本リネーミングレジスタ５６１の空きアドレスを割り当てる。そして、そのアドレスを示すアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣを出力する。なお、拡張リネーミングレジスタ割り当て回路２８４からは、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは出力されない。
【０１２７】
［ステップＳ３７］命令デコード回路２８１は、デコードした非ＳＩＭＤ命令のディスティネーションオペランドに記述されていたレジスタ番号から“１２８”を減算して、減算結果を新たなレジスタ番号とすることによりレジスタ番号の値を変換する。なお、この処理では例えば、減算処理の代わりに、ビットシフト処理や、上位ビットのみを出力する処理などを適用することも可能である。
【０１２８】
［ステップＳ３８］命令デコード回路２８１は、ステップＳ３７で変換したレジスタ番号を示すアドレス信号Ｄ＿ＷＲ＿ＡＤＲを出力する。また、命令デコード回路２８１は、制御信号Ｄ＿ＵＳＥ＿ＢＡＳＩＣをオフにし、制御信号Ｄ＿ＵＳＥ＿ＥＸＴＥＮＤをオンにする。
【０１２９】
［ステップＳ３９］制御信号生成回路２８２は、命令デコード回路２８１からの制御信号Ｄ＿ＵＳＥ＿ＢＡＳＩＣがオフであり、制御信号Ｄ＿ＵＳＥ＿ＥＸＴＥＮＤがオンであると判定する。そして、この判定結果に応じて、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣをともにオフにし、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤをともにオンにする。
【０１３０】
拡張リネーミングレジスタ割り当て回路２８４は、制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤがオンになったことに応じて、拡張リネーミングレジスタ５６２の空きアドレスを割り当てる。そして、そのアドレスを示すアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤを出力する。なお、基本リネーミングレジスタ割り当て回路２８３からは、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣは出力されない。
【０１３１】
なお、ステップＳ３３，Ｓ３６，Ｓ３９では、制御信号Ｄ＿ＲＥＬ＿ＲＳＡ，Ｄ＿ＲＥＬ＿ＣＳＥ、およびエントリ識別信号Ｄ＿ＩＩＤも出力される。
以上の図１４の処理により、浮動小数点ロード命令の実行時に使用されるレジスタの種類が割り当てられ、後段のブロックにおいて、処理に使用されるレジスタを正確に特定できるようになる。例えば、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤとアドレス信号Ｄ＿ＷＲ＿ＡＤＲとから、ロードデータの書き込み先レジスタのアドレスを特定できるようになる。
【０１３２】
図１５は、浮動小数点ロード命令実行時のレジスタリネーミング部の入出力信号を示す図である。なお、図１５では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０１３３】
レジスタリネーミング部３００は、前述の基本レジスタリネーミングマップ３０１、拡張レジスタリネーミングマップ３０２および固定小数点レジスタリネーミングマップ３０３に加えて、リネーミングマップ登録回路３０４〜３０６および読み出し回路３０７〜３０９を備える。リネーミングマップ登録回路３０４〜３０６は、それぞれ基本レジスタリネーミングマップ３０１、拡張レジスタリネーミングマップ３０２および固定小数点レジスタリネーミングマップ３０３に対するデータの登録を行う。読み出し回路３０７〜３０９は、それぞれ基本レジスタリネーミングマップ３０１、拡張レジスタリネーミングマップ３０２および固定小数点レジスタリネーミングマップ３０３に登録されたデータの読み出しを行う。
【０１３４】
Ｄサイクルにおいては、命令デコーダ２８０から出力された、ロードデータの書き込み先レジスタを示すアドレス信号Ｄ＿ＷＲ＿ＡＤＲが、リネーミングマップ登録回路３０４，３０５に入力される。また、命令デコーダ２８０から出力された制御信号Ｄ＿ＦＰＲ＿＿ＷＲ＿ＢＡＳＩＣおよびアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣが、リネーミングマップ登録回路３０４に入力される。また、命令デコーダ２８０から出力された制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤおよびアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤが、リネーミングマップ登録回路３０５に入力される。
【０１３５】
リネーミングマップ登録回路３０４は、制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣがオンである場合に、基本レジスタリネーミングマップ３０１内のアドレス信号Ｄ＿ＷＲ＿ＡＤＲに対応するエントリに対して、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣが示すアドレスを登録する。すなわち、ロードデータの書き込み先として基本レジスタ６０１が指定されていた場合に、そのレジスタ番号に割り当てた基本リネーミングレジスタ５６１のアドレスが、基本レジスタリネーミングマップ３０１に登録される。
【０１３６】
リネーミングマップ登録回路３０５は、制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤがオンである場合に、拡張レジスタリネーミングマップ３０２内のアドレス信号Ｄ＿ＷＲ＿ＡＤＲに対応するエントリに対して、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤが示すアドレスを登録する。すなわち、ロードデータの書き込み先として拡張レジスタ６０２が指定されていた場合に、そのレジスタ番号に割り当てた拡張リネーミングレジスタ５６２のアドレスが、拡張レジスタリネーミングマップ３０２に登録される。
【０１３７】
読み出し回路３０９には、命令デコーダ２８０から出力された、オペランドデータの読み出し元アドレスを示すアドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲが入力される。読み出し回路３０９は、アドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲがそれぞれ示すアドレスに対応する固定小数点レジスタリネーミングマップ３０３のエントリを参照する。そして、参照したエントリが有効である場合には、割り当てられたアドレスを読み出し、アドレス信号をＲＳＡ３２０に出力する。アドレス信号Ｄ＿Ｒ１＿ＧＵＢ＿ＡＤＲは、アドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲに割り当てられたリネーミングレジスタのアドレスを示し、アドレス信号Ｄ＿Ｒ２＿ＧＵＢ＿ＡＤＲは、アドレス信号Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲに割り当てられたリネーミングレジスタのアドレスを示す。
【０１３８】
Ｗサイクルにおいては、ＣＳＥ４００から出力されたアドレス信号Ｗ＿ＦＰＲ＿ＡＤＲが基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２に入力される。また、ＣＳＥ４００から出力されたアドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｗ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤが、それぞれ基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２に入力される。また、ＣＳＥ４００から出力された制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣ，Ｗ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤが、それぞれ基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２に入力される。アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲは、基本レジスタ６０１および拡張レジスタ６０２のアドレスを示す。
【０１３９】
Ｗサイクルでは、制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣがオンのとき、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲに対応する基本レジスタリネーミングマップ３０１に格納された基本リネーミングレジスタ５６１のアドレスと、アドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣの値とが一致した場合に、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲに対応する基本レジスタリネーミングマップ３０１のエントリが無効になる。これにより、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲに対応する基本レジスタ６０１へのリネーミングレジスタの割り当てが終了される。また、Ｗサイクルでは、制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤがオンのとき、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲに対応する拡張レジスタリネーミングマップ３０２に格納された拡張リネーミングレジスタ５６２のアドレスと、アドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤの値とが一致した場合に、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲに対応する拡張レジスタリネーミングマップ３０２のエントリが無効になる。これにより、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲに対応する拡張レジスタ６０２へのリネーミングレジスタの割り当てが終了される。
【０１４０】
なお、浮動小数点ロード命令の実行時には、リネーミングマップ登録回路３０６および読み出し回路３０７，３０８は動作しない。
図１６は、浮動小数点ロード命令実行時のＣＳＥの入出力信号を示す図である。なお、図１６では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０１４１】
ＣＳＥ４００は、エントリ記憶回路４０１、エントリ生成回路４０２、ロード／ストア実行完了受け付け回路４０３、演算実行完了エントリ選択回路４０４、完了エントリ選択回路４０５、完了判定回路４０６および信号出力回路４０７を備える。なお、浮動小数点ロード命令の実行時には、演算実行完了エントリ選択回路４０４は動作しない。
【０１４２】
Ｄサイクルにおいて、エントリ生成回路４０２は、命令デコーダ２８０から制御信号Ｄ＿ＲＥＬ＿ＣＳＥを受信すると、命令デコーダ２８０からのエントリ識別信号Ｄ＿ＩＩＤに対応するエントリを１つ作成し、エントリ記憶回路４０１に登録する。また、Ｄサイクルにおいて、ＳＩＭＤロード命令がデコードされた場合には、エントリ生成回路４０２には、命令デコーダ２８０からの制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣ，Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤ、およびアドレス信号Ｄ＿ＷＲ＿ＡＤＲ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤが入力される。エントリ生成回路４０２は、これらの信号を基にエントリに情報を登録する。
【０１４３】
ロード／ストア実行完了受け付け回路４０３は、ＦＲサイクルにおいて、１次データキャッシュ部４６０からロードデータの出力が完了したことを示す制御信号を受け付ける。この制御信号としては、それぞれ基本ロードレジスタ４６２および拡張ロードレジスタ４６３へのロードデータの出力が完了したことを示す制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤと、ロードデータの出力処理に対応するＣＳＥ４００のエントリを識別するエントリ識別信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＩＩＤとが入力される。ロード／ストア実行完了受け付け回路４０３は、これらの制御信号およびエントリ識別信号の入力に応じて、エントリ記憶回路４０１内の対応するエントリに情報を書き込む。
【０１４４】
完了エントリ選択回路４０５は、Ｃサイクルにおいて、エントリ記憶回路４０１に登録された先頭のエントリを、完了判定回路４０６に読み出す。完了判定回路４０６は、読み出されたエントリに基づき、そのエントリに対応する処理の実行が完了しているか否かを判定する。完了エントリ選択回路４０５は、エントリの内容に基づき、エントリに対応する処理の実行が完了するまで待機し、処理の実行が完了したと判定すると、信号出力回路４０７に対してエントリ内の情報を受け渡して、制御信号やアドレス信号の出力を要求する。これにより、命令の実行がイン・オーダで完了することになる。
【０１４５】
信号出力回路４０７は、Ｗサイクルにおいて、次の信号を出力する。制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣは、基本リネーミングレジスタ５６１に格納されたデータを基本レジスタ６０１に書き込むことを要求する信号である。制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤは、拡張リネーミングレジスタ５６２に格納されたデータを拡張レジスタ６０２に書き込むことを要求する信号である。アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲは、基本レジスタ６０１および拡張レジスタ６０２におけるデータの書き込みアドレスを示す信号である。アドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣは、基本リネーミングレジスタ５６１におけるデータの読み出しアドレスを示す信号である。アドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは、拡張リネーミングレジスタ５６２におけるデータの読み出しアドレスを示す信号である。
【０１４６】
制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣ，Ｗ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤとアドレス信号Ｗ＿ＦＰＲ＿ＡＤＲは、Ｗサイクルにおいて、浮動小数点ＳＩＭＤレジスタ６００およびレジスタリネーミング部３００に出力される。アドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣとアドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは、Ｗサイクルにおいて、浮動小数点リネーミングレジスタ５６０およびレジスタリネーミング部３００に出力される。これらの信号を用いた制御により、浮動小数点ＳＩＭＤレジスタ６００の更新とレジスタリネーミングマップのエントリの無効化を行う。
【０１４７】
図１７は、ＣＳＥのエントリの内容を示す図である。
浮動小数点ロード命令に対応するＣＳＥ４００の１つのエントリは、次の信号およびアドレスが登録される。信号Ｖは、エントリが有効か否かを示す。信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥは、ロードデータの書き込み時にそれぞれ基本バス、拡張バスを使用するか否かを示す。Ｄサイクルにおいて、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥは、命令デコーダ２８０からの制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣに応じた値をとる。また、信号ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥは、命令デコーダ２８０からの制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤに応じた値をとる。
【０１４８】
アドレスＢＡＳＩＣ＿ＲＤ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲは、それぞれ基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２のアドレスを示す。Ｄサイクルにおいて、アドレスＢＡＳＩＣ＿ＲＤ＿ＡＤＲには、命令デコーダ２８０により割り当てられたＤ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣに応じた値が登録される。また、アドレスＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲには、命令デコーダ２８０により割り当てられたアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤに応じた値が登録される。
【０１４９】
アドレスＷＲ＿ＡＤＲは、浮動小数点ＳＩＭＤレジスタ６００における書き込みアドレスを示す。アドレスＷＲ＿ＡＤＲは、命令デコーダ２８０からのアドレス信号Ｄ＿ＷＲ＿ＡＤＲに応じた値が登録される。前述のように、ＳＩＭＤ命令が実行される場合、浮動小数点ＳＩＭＤレジスタ６００内の同じレジスタ番号を有する基本レジスタ６０１および拡張レジスタ６０２がセットで使用される。このため、アドレスＷＲ＿ＡＤＲは、基本レジスタ６０１および拡張レジスタ６０２に対して共通に使用される。
【０１５０】
信号ＢＡＳＩＣ＿ＷＲ，ＥＸＴＥＮＤ＿ＷＲは、それぞれ基本レジスタ６０１および拡張レジスタ６０２に対するデータの書き込みが必要であることを示す。Ｄサイクルにおいて、信号ＢＡＳＩＣ＿ＷＲは、命令デコーダ２８０からの制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣに応じた値をとる。また、信号ＥＸＴＥＮＤ＿ＷＲは、命令デコーダ２８０からの制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤに応じた値をとる。
【０１５１】
信号ＴＡＧは、その他のタグ信号である。信号ＢＡＳＩＣ＿ＦＰ＿ＣＯＭＰ，ＥＸＴＥＮＤ＿ＦＰ＿ＣＯＭＰは、それぞれ基本ロードレジスタ４６２および拡張ロードレジスタ４６３へのデータの格納が完了したことを示す信号である。ＦＲサイクルにおいて、信号ＢＡＳＩＣ＿ＦＰ＿ＣＯＭＰは、１次データキャッシュ部４６０からの制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣに応じた値をとる。また、信号ＥＸＴＥＮＤ＿ＦＰ＿ＣＯＭＰは、１次データキャッシュ部４６０からの制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤに応じた値をとる。信号ＣＯＭＰは、その他の完了信号である。
【０１５２】
図１８は、浮動小数点ロード命令実行時のＲＳＡの入出力信号を示す図である。なお、図１８では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０１５３】
ＲＳＡ３２０は、エントリ記憶回路３２１、エントリ生成回路３２２、オペランドデータ待ち回路３２３、エントリ選択回路３２４およびエントリ出力回路３２５を備える。
Ｄサイクルにおいて、エントリ生成回路３２２は、命令デコーダ２８０から制御信号Ｄ＿ＲＥＬ＿ＲＳＡを受信し、命令デコーダ２８０からのエントリ識別信号Ｄ＿ＩＩＤに対応するエントリを１つ作成し、エントリ記憶回路３２１に登録する。エントリ生成回路３２２は、制御信号Ｄ＿ＲＥＬ＿ＲＳＡを受信したとき、浮動小数点ロード命令用のエントリを作成する。
【０１５４】
このとき、エントリ生成回路３２２には、命令デコーダ２８０からのアドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲが入力される。
また、ＳＩＭＤロード命令がデコードされた場合には、エントリ生成回路３２２には、命令デコーダ２８０からの制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤ、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤが入力される。ただし、非ＳＩＭＤ命令がデコードされた場合には、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤのうちの一方と、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤの一方とが、それぞれオンになる。
【０１５５】
また、ソースオペランドの読み出し元レジスタがリネーミングされていた場合には、エントリ生成回路３２２には、固定小数点レジスタリネーミングマップ３０３からのアドレス信号Ｄ＿Ｒ１＿ＧＵＢ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＵＢ＿ＡＤＲが入力される。
【０１５６】
オペランドデータ待ち回路３２３は、Ｐサイクルにおいて、アドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲで指定されるオペランドデータの待ち合わせ制御を行う。エントリ選択回路３２４は、エントリ記憶回路３２１に登録されたエントリのうち、必要なデータの準備が整ったエントリの中で最も古いエントリを選択して、エントリ出力回路３２５に出力する。
【０１５７】
エントリ選択回路３２４から浮動小数点ロード命令に対応するエントリが出力されると、エントリ出力回路３２５は、次の信号をオペランドデータ選択部４３０に対して出力する。制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤは、ロードデータの転送にそれぞれ基本バス、拡張バスを使用することを示す。アドレス信号Ｂ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＧＰＲ＿ＡＤＲは、オペランドデータの読み出し元アドレスを示す。アドレス信号Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは、それぞれロードデータの書き込み先の基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２のアドレスを示す。
【０１５８】
エントリ識別信号Ｂ＿ＦＰ＿ＩＩＤは、ＣＳＥ４００のエントリを識別する信号である。制御信号Ｂ＿ＦＰ＿ＬＯＡＤは、浮動小数点ロード命令であることを示す信号である。アドレス信号Ｂ＿ＥＡＧ＿Ｒ１＿ＧＵＢ＿ＡＤＲ，Ｂ＿ＥＡＧ＿Ｒ２＿ＧＵＢ＿ＡＤＲは、固定小数点リネーミングレジスタ５４０におけるオペランドデータの読み出しアドレスを示す。制御信号Ｂ＿ＥＡＧ＿Ｒ１＿ＩＮＧＡＴＥ，Ｂ＿ＥＡＧ＿Ｒ２＿ＩＮＧＡＴＥは、オペランドデータ選択部４３０においてオペランドデータを選択するデータを示す信号である。
【０１５９】
図１９は、浮動小数点ロード命令実行時におけるＲＳＡのエントリの内容を示す図である。
浮動小数点ロード命令実行時にＲＳＡ３２０に登録される１つのエントリは、次の信号およびアドレスが登録される。信号Ｖは、エントリが有効か否かを示す。信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥは、ロードデータの書き込み先としてそれぞれ基本バス，拡張バスを使用するか否かを示す。Ｄサイクルにおいて、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥは、命令デコーダ２８０からの制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣに応じた値をとる。また、信号ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥは、命令デコーダ２８０からの制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤに応じた値をとる。従って、ＳＩＭＤロード命令の実行時には、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥの両方がオンになり、非ＳＩＭＤロード命令の実行時には、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥのうち一方のみオンになる。また、エントリ発行時において、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥの値は、それぞれ制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤとして出力される。
【０１６０】
信号ＬＯＡＤは、浮動小数点ロード命令であることを示す。信号ＩＩＤは、ＣＳＥ４００における対応するエントリを識別する信号であり、命令デコーダ２８０からのエントリ識別信号Ｄ＿ＩＩＤに応じた値が登録される。
【０１６１】
信号Ｒ１＿ＲＥＡＤＹ，Ｒ２＿ＲＥＡＤＹは、オペランドデータの準備ができたことを示す信号であり、オペランドデータ待ち回路３２３によって登録される。信号Ｒ１＿ＩＮＧＡＴＥ，Ｒ２＿ＩＮＧＡＴＥは、オペランドデータ選択部４３０におけるオペランドデータの選択対象を指示する信号であり、オペランドデータ待ち回路３２３によって登録される。
【０１６２】
アドレスＲ１＿ＲＥＧ＿ＡＤＲ，Ｒ２＿ＲＥＧ＿ＡＤＲは、固定小数点レジスタ５８０からのオペランドデータの読み出しアドレスを示す。Ｄサイクルにおいて、アドレスＲ１＿ＲＥＧ＿ＡＤＲ，Ｒ２＿ＲＥＧ＿ＡＤＲには、それぞれ制御信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲに応じた値が登録される。
【０１６３】
アドレスＲ１＿ＧＵＢ＿ＡＤＲ，Ｒ２＿ＧＵＢ＿ＡＤＲは、固定小数点リネーミングレジスタ５４０からのオペランドデータの読み出しアドレスを示す。Ｄサイクルにおいて、アドレスＲ１＿ＧＵＢ＿ＡＤＲ，Ｒ２＿ＧＵＢ＿ＡＤＲには、それぞれ制御信号Ｄ＿Ｒ１＿ＧＵＢ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＵＢ＿ＡＤＲに応じた値が登録される。
【０１６４】
アドレスＢＡＳＩＣ＿ＤＳＴ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＤＳＴ＿ＡＤＲは、それぞれ基本リネーミングレジスタ５６１、拡張リネーミングレジスタ５６２に対するロードデータの書き込みアドレスを示す。Ｄサイクルにおいて、アドレスＢＡＳＩＣ＿ＤＳＴ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＤＳＴ＿ＡＤＲには、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤに応じた値が登録される。また、エントリ発行時において、アドレスＢＡＳＩＣ＿ＤＳＴ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＤＳＴ＿ＡＤＲの値は、それぞれアドレス信号Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとして出力される。
【０１６５】
ＴＡＧフィールドは、その他のタグ情報が保持されるフィールドである。
ＲＳＡ３２０のオペランドデータ待ち回路３２３は、Ｐサイクルにおいて、アドレスＲ１＿ＲＥＧ＿ＡＤＲ，Ｒ２＿ＲＥＧ＿ＡＤＲにそれぞれ対応するレジスタにおいて、データが準備されたか否かを判定する。また、アドレスＲ１＿ＦＵＢ＿ＡＤＲ，Ｒ２＿ＦＵＢ＿ＡＤＲに値が登録されていた場合には、これらのレジスタにおいてデータが準備されたか否かを判定する。Ｒ１側、Ｒ２側にそれぞれオペランドデータが準備されると、オペランドデータ待ち回路３２３は、信号Ｒ１＿ＲＥＡＤＹ，Ｒ２＿ＲＥＡＤＹをそれぞれオンにする。また、信号Ｒ１＿ＩＮＧＡＴＥ，Ｒ２＿ＩＮＧＡＴＥのそれぞれには、オペランドデータが固定小数点レジスタ５８０に準備されたか、あるいは固定小数点リネーミングレジスタ５４０に準備されたかを識別する信号が登録される。
【０１６６】
エントリ選択回路３２４は、信号Ｒ１＿ＲＥＡＤＹ，Ｒ２＿ＲＥＡＤＹがともにオンになったとき、このエントリを発行する。このとき、エントリ識別信号ＩＩＤの値は、信号Ｂ＿ＦＰ＿ＩＩＤとして、制御信号Ｂ＿ＦＰ＿ＬＯＡＤとともに１次データキャッシュ部４６０に出力される。また、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ、ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥの値は、それぞれ制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ、Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤとして、１次データキャッシュ部４６０に出力される。また、アドレスＢＡＳＩＣ＿ＤＳＴ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＤＳＴ＿ＡＤＲの値は、それぞれアドレス信号Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとして、１次データキャッシュ部４６０に出力される。
【０１６７】
また、信号Ｒ１＿ＩＮＧＡＴＥ，Ｒ２＿ＩＮＧＡＴＥの値は、それぞれ信号Ｂ＿ＥＡＧ＿Ｒ１＿ＩＮＧＡＴＥ，Ｂ＿ＥＡＧ＿Ｒ２＿ＩＮＧＡＴＥとしてオペランドデータ選択部４３０に出力される。また、アドレスＲ１＿ＲＥＧ＿ＡＤＲ，Ｒ２＿ＲＥＧ＿ＡＤＲにそれぞれ対応するレジスタにデータが準備されれば、これらのアドレスの値がそれぞれアドレス信号Ｂ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＧＰＲ＿ＡＤＲとしてオペランドデータ選択部４３０に出力される。また、アドレスＲ１＿ＦＵＢ＿ＡＤＲ，Ｒ２＿ＦＵＢ＿ＡＤＲにそれぞれ対応するレジスタにデータが準備されれば、これらのアドレスの値がそれぞれ信号Ｂ＿ＥＡＧ＿Ｒ１＿ＧＵＢ＿ＡＤＲ，Ｂ＿ＥＡＧ＿Ｒ２＿ＧＵＢ＿ＡＤＲとして出力される。
【０１６８】
図２０は、浮動小数点ロード命令実行時のオペランドデータ選択部の入出力信号を示す図である。なお、図２０では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０１６９】
オペランドデータ選択部４３０は、オペランドデータ選択器４３１，４３２と、ラッチ回路４３３，４３４とを備えている。Ｂサイクルにおいて、オペランドデータ選択器４３１は、ＲＳＥ３４０からの制御信号Ｂ＿ＥＡＧ＿Ｒ１＿ＩＮＧＡＴＥに応じて、固定小数点レジスタ５８０または固定小数点リネーミングレジスタ５４０から出力されたオペランドデータを、選択的に出力する。また、オペランドデータ選択器４３２は、ＲＳＥ３４０からの制御信号Ｂ＿ＥＡＧ＿Ｒ２＿ＩＮＧＡＴＥに応じて、固定小数点レジスタ５８０または固定小数点リネーミングレジスタ５４０から出力されたオペランドデータを、選択的に出力する。
【０１７０】
ラッチ回路４３３，４３４は、それぞれオペランドデータ選択器４３１，４３２から出力されたオペランドデータをラッチし、データの出力タイミングを調整する。ラッチ回路４３３，４３４にラッチされたオペランドデータは、データ信号Ａ＿ＥＡＧ＿ＯＲ１Ｒ，Ａ＿ＥＡＧ＿ＯＲ２Ｒとして、オペランドアドレス生成器４４０に出力される。
【０１７１】
なお、固定小数点レジスタ５８０に格納されたデータは、読み出し回路５８１を介して出力される。Ｂサイクルにおいて、読み出し回路５８１は、ＲＳＡ３２０からのアドレス信号Ｂ＿ＥＡＧ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｂ＿ＥＡＧ＿Ｒ２＿ＧＰＲ＿ＡＤＲによってそれぞれ指定される固定小数点レジスタ５８０のアドレスから、オペランドデータを読み出す。また、固定小数点リネーミングレジスタ５４０に格納されたデータは、読み出し回路５４１を介して出力される。Ｂサイクルにおいて、読み出し回路５４１は、ＲＳＡ３２０からのアドレス信号Ｂ＿ＥＡＧ＿Ｒ１＿ＧＵＢ＿ＡＤＲ，Ｂ＿ＥＡＧ＿Ｒ２＿ＧＵＢ＿ＡＤＲによってそれぞれ指定される固定小数点リネーミングレジスタ５４０のアドレスから、オペランドデータを読み出す。
【０１７２】
図２１は、浮動小数点ロード命令実行時の１次データキャッシュ部の入出力信号を示す図である。なお、図２１では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０１７３】
１次データキャッシュ部４６０は、前述の１次データキャッシュ４６１、基本ロードレジスタ４６２および拡張ロードレジスタ４６３に加えて、データ検出回路４６４、ロードデータ選択器４６５、完了報告回路４６６およびラッチ回路４７１，４７２ａ，４７２ｂ，４７３ａ〜４７３ｄ，４７４ａ〜４７４ｅ，４７５を備えている。
【０１７４】
オペランドデータ選択部４３０から出力されたデータ信号Ａ＿ＥＡＧ＿ＯＲ１Ｒ，Ａ＿ＥＡＧ＿ＯＲ２Ｒは、オペランドアドレス生成器４４０に入力される。Ａサイクルにおいて、オペランドアドレス生成器４４０は、データ信号Ａ＿ＥＡＧ＿ＯＲ１Ｒ，Ａ＿ＥＡＧ＿ＯＲ２Ｒに基づいてオペランドアドレスを生成し、１次データキャッシュ部４６０に出力する。
【０１７５】
なお、ＲＳＡ３２０から出力されたアドレス信号Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤおよびエントリ識別信号Ｂ＿ＦＰ＿ＩＩＤは、ラッチ回路４５１を介して１次データキャッシュ部４６０に入力される。また、ＲＳＡ３２０から出力された制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤは、ラッチ回路４５２を介して１次データキャッシュ部４６０に入力される。また、ＲＳＡ３２０からされた制御信号Ｂ＿ＦＰ＿ＬＯＡＤは、ラッチ回路４５３を介して１次データキャッシュ部４６０に入力される。ラッチ回路４５１〜４５３は、入力された信号の出力タイミングを、オペランドデータ選択部４３０およびオペランドアドレス生成器４４０の処理時間に合わせて調整する。
【０１７６】
データ検出回路４６４は、ＦＴ，ＦＭ，ＦＢサイクルにおいて動作する。データ検出回路４６４は、オペランドアドレス生成器４４０によって生成されたオペランドアドレスにより指定されるロードデータが、１次データキャッシュ４６１に記憶されているか否かを判定する。
【０１７７】
ロードデータが１次データキャッシュ４６１に記憶されている場合、データ検出回路４６４は、１次データキャッシュ４６１に対してロードデータをロードデータ選択器４６５へ出力するように要求する。この出力要求とともに、完了報告回路４６６に対してロードデータ出力の完了を示す完了報告信号を出力する。一方、ロードデータが１次データキャッシュ４６１に記憶されていない場合には、２次データキャッシュ１１２やメインメモリなどからロードデータが１次データキャッシュ４６１に読み込まれる。１次データキャッシュ４６１へのロードデータの読み込みが完了すると、データ検出回路４６４は、１次データキャッシュ４６１にロードデータの出力を要求するとともに、完了報告回路４６６に対して完了報告信号を出力する。なお、データ検出回路４６４からの完了報告信号は、ラッチ回路４７２ａ，４７２ｂを介して完了報告回路４６６に出力される。
【０１７８】
ＳＩＭＤロード命令の実行時には、オペランドアドレス生成器４４０からのオペランドアドレスにより指定されるロードデータは、１６バイトのデータ幅を有する。この場合、データ検出回路４６４は、１６バイトのロードデータが１次データキャッシュ４６１に記憶されているか否かを判定する。ところが、この判定時に、１６バイトのロードデータの一部についてキャッシュミスが発生する場合があり得る。例えば、ロードデータのうち前半部または後半部のみについてキャッシュミスが発生する場合があり得る。この事態は、例えば、ロードデータのうちの後半部の８バイトデータが、前半部が記憶された１次データキャッシュ４６１上のキャッシュラインの次のキャッシュラインに記憶される場合などに生じ得る。
【０１７９】
このような事態に対処するため、データ検出回路４６４は、オペランドアドレスにより指定されるロードデータの前半部と後半部とについて、１次データキャッシュ４６１に記憶されているか否かをそれぞれ個別に判定する。そして、ロードデータの前半部が１次データキャッシュ４６１に記憶されていた場合に、そのデータの出力を１次データキャッシュ４６１に要求するとともに、完了報告信号を出力する。さらに、ロードデータの後半部が１次データキャッシュ４６１に記憶されていた場合に、そのデータの出力を１次データキャッシュ４６１に要求するとともに、完了報告信号を出力する。
【０１８０】
すなわち、ＳＩＭＤロード命令の実行時には、データ検出回路４６４から完了報告回路４６６に対して、完了報告信号が２回出力される。また、上記構成により、ロードデータの後半部のみキャッシュミスが発生した場合には、１次データキャッシュ４６１から前半部のデータが出力されてから後半部のデータが出力されるまでに遅延が発生する場合があり得る。このように後半部のデータの出力遅延が発生した場合には、１回目の完了報告信号の出力から２回目の完了報告信号の出力までにも遅延が発生する。
【０１８１】
１次データキャッシュ４６１から読み出されたロードデータは、ラッチ回路４７１を介してロードデータ選択器４６５に入力される。また、ロードデータ選択器４６５には、ラッチ回路４５２，４７３ａ〜４７３ｄを介して、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤが入力される。なお、ラッチ回路４７３ａ〜４７３ｄは、入力信号の出力タイミングを、データ検出回路４６４、１次データキャッシュ４６１およびラッチ回路４７１の処理時間に合わせて調整する。
【０１８２】
ＦＲサイクルにおいて、ロードデータ選択器４６５は、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤに応じて、１次データキャッシュ４６１から出力されたロードデータを、基本ロードレジスタ４６２または拡張ロードレジスタ４６３に対して選択的に出力する。
【０１８３】
ＳＩＭＤロード命令実行時には、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤはともにオンである。この場合、ロードデータ選択器４６５は、１次データキャッシュ４６１から出力される１６バイトデータのうち、前半部を基本ロードレジスタ４６２に出力し、後半部を拡張ロードレジスタ４６３に出力する。なお、ロードデータの後半部のみキャッシュミスが発生した場合には、基本ロードレジスタ４６２へのデータの出力から拡張ロードレジスタ４６３へのデータの出力までには遅延が生じる。
【０１８４】
一方、非ＳＩＭＤロード命令実行時には、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤのうち一方のみがオンになる。ロードデータ選択器４６５は、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣのみがオンであれば、１次データキャッシュ４６１から出力された８バイト分のロードデータを基本ロードレジスタ４６２に出力する。また、ロードデータ選択器４６５は、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤのみがオンであれば、１次データキャッシュ４６１から出力された８バイト分のロードデータを拡張ロードレジスタ４６３に出力する。
【０１８５】
完了報告回路４６６には、データ検出回路４６４からの完了報告信号が入力されるとともに、ラッチ回路４７３ａ〜４７３ｄを介して制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤが入力される。ＦＲサイクルにおいて、完了報告回路４６６は、データ検出回路４６４から完了報告信号の入力を受けると、制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤの少なくとも一方をＣＳＥ４００に出力する。これとともに、制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣ，ＬＲ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤの少なくとも一方を、ラッチ回路４７５を介して浮動小数点リネーミングレジスタ５６０に出力する。
【０１８６】
前述のように、制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤは、それぞれ基本ロードレジスタ４６２および拡張ロードレジスタ４６３へのロードデータの出力が完了したことを示す信号である。また、制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣ，ＬＲ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤは、それぞれ基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２へのデータ格納を要求する信号である。
【０１８７】
ＳＩＭＤロード命令の実行時には、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤはともにオンになる。この場合、完了報告回路４６６は、データ検出回路４６４から出力される２回分の完了報告信号を待つ。１回目の完了報告信号を受信すると、制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣをそれぞれ出力し、２回目の完了報告信号を受信すると、制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤ，ＬＲ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤをそれぞれ出力する。
【０１８８】
一方、非ＳＩＭＤロード命令の実行時には、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤのいずれか一方のみがオンになる。この場合、完了報告回路４６６は、データ検出回路４６４からの完了報告信号の出力を１回のみ待つ。制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣのみがオンの場合、完了報告回路４６６は、データ検出回路４６４からの完了報告信号を受信すると、制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣをそれぞれ出力する。また、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤのみがオンの場合、完了報告回路４６６は、データ検出回路４６４からの完了報告信号を受信すると、制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤ，制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤをそれぞれ出力する。
【０１８９】
なお、ラッチ回路４５１から入力されたアドレス信号Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは、ラッチ回路４７４ａ〜４７４ｅを介して、それぞれアドレス信号ＬＲ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，ＬＲ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとして、浮動小数点リネーミングレジスタ５６０に出力される。アドレス信号ＬＲ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，ＬＲ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤの出力タイミングは、制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣ，ＬＲ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤの出力タイミングと同じになる。
【０１９０】
また、ラッチ回路４５１から入力されたエントリ識別信号Ｂ＿ＦＰ＿ＩＩＤは、ラッチ回路４７４ａ〜４７４ｄを介して、エントリ識別信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＩＩＤとしてＣＳＥ４００に出力される。エントリ識別信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＩＩＤは、ＦＲサイクルにおいて出力される。
【０１９１】
図２２は、浮動小数点ロード命令実行時の浮動小数点リネーミングレジスタの入出力信号を示す図である。なお、図２２では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０１９２】
浮動小数点リネーミングレジスタ５６０は、前述した基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２に加えて、書き込み回路５６３，５６４および読み出し回路５６５，５６６を備えている。書き込み回路５６３，５６４は、それぞれ基本リネーミングレジスタ５６１内、拡張リネーミングレジスタ５６２内の指定されたアドレスに対してデータを格納する。読み出し回路５６５，５６６は、それぞれ基本リネーミングレジスタ５６１内、拡張リネーミングレジスタ５６２内の指定されたアドレスからデータを読み出す。
【０１９３】
ＦＲサイクルの次のサイクル（ＦＲ＋１サイクル）において、書き込み回路５６３は、制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣがオンである場合に、アドレス信号ＬＲ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣにより指定される基本リネーミングレジスタ５６１のアドレスに対して、基本ロードレジスタ４６２からのデータ信号ＬＲ＿ＢＡＳＩＣを格納する。制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣ、アドレス信号ＬＲ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣは、ともに１次データキャッシュ部４６０から出力される。
【０１９４】
また、書き込み回路５６４は、制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤがオンである場合に、アドレス信号ＬＲ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤにより指定される拡張リネーミングレジスタ５６２のアドレスに対して、拡張ロードレジスタ４６３からのデータ信号ＬＲ＿ＥＸＴＥＮＤを格納する。制御信号ＬＲ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤ、アドレス信号ＬＲ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは、ともに１次データキャッシュ部４６０から出力される。
【０１９５】
Ｗサイクルにおいて、読み出し回路５６５は、ＣＳＥ４００からのアドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣにより指定される基本リネーミングレジスタ５６１のアドレスからロードデータを読み出し、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡとして浮動小数点ＳＩＭＤレジスタ６００に出力する。また、読み出し回路５６６は、ＣＳＥ４００からのアドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤにより指定される拡張リネーミングレジスタ５６２のアドレスからロードデータを読み出し、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡとして浮動小数点ＳＩＭＤレジスタ６００に出力する。
【０１９６】
図２３は、浮動小数点ロード命令実行時の浮動小数点ＳＩＭＤレジスタの入出力信号を示す図である。なお、図２３では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０１９７】
浮動小数点ＳＩＭＤレジスタ６００は、前述した基本レジスタ６０１および拡張レジスタ６０２に加えて、書き込み回路６０３，６０４および読み出し回路６０５，６０６を備えている。書き込み回路６０３，６０４は、それぞれ基本レジスタ６０１内、拡張レジスタ６０２内の指定されたアドレスに対してデータを格納する。読み出し回路６０５，６０６は、それぞれ基本レジスタ６０１内、拡張レジスタ６０２内の指定されたアドレスからデータを読み出す。
【０１９８】
Ｗサイクルにおいて、浮動小数点ＳＩＭＤレジスタ６００では、ロードデータの格納が行われる。書き込み回路６０３は、制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣがオンである場合に、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲにより指定される基本レジスタ６０１のアドレスに対して、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡを格納する。制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣ、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲはともにＣＳＥ４００から出力される。また、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡは、基本リネーミングレジスタ５６１から読み出されたロードデータに対応する。
【０１９９】
書き込み回路６０４は、制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤがオンである場合に、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲにより指定される拡張レジスタ６０２のアドレスに対して、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡを格納する。制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤ、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲはともにＣＳＥ４００から出力される。また、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡは、拡張リネーミングレジスタ５６２から読み出されたロードデータに対応する。
【０２００】
図２４は、ＳＩＭＤロード命令実行時のロードデータ格納動作を説明する図である。
Ｄサイクルにおいて、ＳＩＭＤロード命令がデコードされた場合、命令デコーダ２８０からの制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤはともにオンになる。この場合、ＣＳＥ４００のエントリにおいて、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥがともにオンになり、信号ＢＡＳＩＣ＿ＷＲ，ＥＸＴＥＮＤ＿ＷＲも、ともにオンになる。さらに、アドレスＢＡＳＩＣ＿ＲＤ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲには、ともにリネーミングレジスタのアドレスが登録される。
【０２０１】
その後、ＦＲサイクルにおいて、１次データキャッシュ部４６０から、基本ロードレジスタ４６２、拡張ロードレジスタ４６３のそれぞれに対するデータの格納が完了したことを示す制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤが、ＣＳＥ４００に入力される。ＣＳＥ４００のエントリでは、制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤが入力されると、それぞれ信号ＢＡＳＩＣ＿ＦＰ＿ＣＯＭＰ，ＥＸＴＥＮＤ＿ＦＰ＿ＣＯＭＰがオンになる。
【０２０２】
ＣＳＥ４００の完了判定回路４０６は、エントリ内の信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥがともにオンである場合には、信号ＢＡＳＩＣ＿ＦＰ＿ＣＯＭＰ，ＥＸＴＥＮＤ＿ＦＰ＿ＣＯＭＰが両方オンになったとき、命令が完了したと判定する。このような処理により、基本ロードレジスタ４６２へのデータ格納タイミングと拡張ロードレジスタ４６３へのデータ格納タイミングとにずれが生じた場合でも、命令の完了を正確に判定できる。
【０２０３】
命令が完了したと判定されると、Ｗサイクルが開始される。Ｗサイクルにおいて、ＣＳＥ４００の信号出力回路４０７は、アドレスＢＡＳＩＣ＿ＲＤ＿ＡＤＲ、ＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲの値を、それぞれ基本リネーミングレジスタ５６１、拡張リネーミングレジスタ５６２に出力する。そして、出力したアドレスからのロードデータの読み出しを要求する。また、信号出力回路４０７は、アドレスＷＲ＿ＡＤＲの値を基本レジスタ６０１および拡張レジスタ６０２に出力する。これとともに、信号ＢＡＳＩＣ＿ＷＲ，ＥＸＴＥＮＤ＿ＷＲの値をそれぞれ基本レジスタ６０１および拡張レジスタ６０２に出力して、データの格納を要求する。これにより、基本レジスタ６０１および拡張レジスタ６０２における同じアドレスに対して、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２からのロードデータがそれぞれ格納される。
【０２０４】
図２５は、非ＳＩＭＤロード命令実行時のロードデータ格納動作を説明する図である。
Ｄサイクルにおいて、非ＳＩＭＤロード命令がデコードされた場合、命令デコーダ２８０からの制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤのいずれか一方のみがオンになる。図２５の例では、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤのみがオンである。この場合、ＣＳＥ４００のエントリにおいて、信号ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＷＲがオンになり、アドレスＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲにリネーミングレジスタのアドレスが登録される。
【０２０５】
その後、ＦＲサイクルにおいて、１次データキャッシュ部４６０から、拡張ロードレジスタ４６３に対するデータの格納が完了したことを示す制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤが、ＣＳＥ４００に入力される。ＣＳＥ４００のエントリでは、制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤが入力されると、信号ＥＸＴＥＮＤ＿ＦＰ＿ＣＯＭＰがオンになる。
【０２０６】
ＣＳＥ４００の完了判定回路４０６は、エントリ内の信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥのうち、ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥのみがオンである場合には、信号ＥＸＴＥＮＤ＿ＦＰ＿ＣＯＭＰがオンになったとき、命令が完了したと判定する。この判定により、Ｗサイクルが開始される。
【０２０７】
このとき、ＣＳＥ４００の信号出力回路４０７は、アドレスＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲの値を拡張リネーミングレジスタ５６２に出力し、出力したアドレスからのロードデータの読み出しを要求する。また、信号出力回路４０７は、アドレスＷＲ＿ＡＤＲの値を拡張レジスタ６０２に出力するとともに、信号ＥＸＴＥＮＤ＿ＷＲの値を拡張レジスタ６０２に出力して、データの格納を要求する。これにより、拡張レジスタ６０２に対してのみ、拡張リネーミングレジスタ５６２からのロードデータが格納される。
【０２０８】
以上説明した浮動小数点ロード命令の実行時の処理では、ＳＩＭＤロード命令の実行時には、ロードデータの書き込み先として同じアドレスを有する基本レジスタ６０１および拡張レジスタ６０２が使用される。一方、非ＳＩＭＤロード命令の実行時には、ロードデータの書き込み先として、基本レジスタ６０１および拡張レジスタ６０２のうち任意のレジスタを使用可能になる。このため、浮動小数点ＳＩＭＤレジスタ６００内のレジスタの使用効率が向上する。また、非ＳＩＭＤロード命令の実行時には、ロードデータの書き込み先としてＳＩＭＤロード命令の実行時の２倍のレジスタを指定することが可能になる。
【０２０９】
また、ＳＩＭＤロード命令の実行時には、基本レジスタ６０１に対して割り当てる基本リネーミングレジスタ５６１のアドレスと、拡張レジスタ６０２に対して割り当てる拡張リネーミングレジスタ５６２のアドレスとを、異なるアドレスとすることが可能である。一方、非ＳＩＭＤロード命令の実行時には、基本レジスタ６０１が使用される場合には基本リネーミングレジスタ５６１が割り当てられ、拡張レジスタ６０２が使用される場合には拡張リネーミングレジスタ５６２が割り当てられる。このような構成としたことで、ＳＩＭＤ命令／非ＳＩＭＤ命令が混在するプログラムが実行された場合でも、浮動小数点リネーミングレジスタ５６０内のレジスタを無駄なく効率的に使用できる。また、浮動小数点リネーミングレジスタ５６０内のレジスタ数を抑制することもできる。
【０２１０】
また、命令デコーダ２８０から１次データキャッシュ部４６０に対しては、ＲＳＡ３２０、オペランドデータ選択部４３０およびオペランドアドレス生成器４４０を通じて、ロードデータの転送に基本バスを使用するか否か、および拡張バスを使用するか否かをそれぞれ示すバス指定信号が伝達される。このため、１次データキャッシュ部４６０は、フェッチしたロードデータを基本リネーミングレジスタ５６１に転送するか、あるいは拡張リネーミングレジスタ５６２に転送するかを、正確に判定できる。また、バス指定信号はＣＳＥ４００にも伝達される。ＣＳＥ４００は、これらのバス指定信号に基づき、命令の完了を正確に判定でき、ロードデータを浮動小数点ＳＩＭＤレジスタ６００内の所望のアドレスに正確に格納できる。このように、バス指定信号を利用したことで、ロードデータの転送制御を正確かつ効率的に運用できる。
【０２１１】
〔浮動小数点演算命令実行時の処理〕
浮動小数点演算命令がデコードされると、ＣＰＵコア１１１は、ソースオペランドで指定されるレジスタからデータを読み込み、ディスティネーションオペランドで指定されるレジスタに対して書き込む。ここでは、浮動小数点演算命令として、演算の実行に６サイクル必要とする命令を使用する例を説明する。浮動小数点演算のＳＩＭＤ命令（以下、ＳＩＭＤ演算命令と呼ぶ）の命令コードは、例えば“Simd-fmad %127*%f100+%f50=%f10”と記述される。この命令では、ソースオペランドとして“%127”“%f100”“%f50”の３つのレジスタが指定される。指定されたレジスタからはそれぞれ２つの８バイトデータが読み込まれて、２系統の乗算および加算処理が並列に実行される。そして、それぞれの演算結果は、ディスティネーションオペランドである“%f10”で指定される浮動小数点ＳＩＭＤレジスタ６００に書き込まれる。
【０２１２】
一方、浮動小数点演算の非ＳＩＭＤ命令（以下、非ＳＩＭＤ演算命令と呼ぶ）の命令コードは、オペコードが異なること以外は上記と同じ形式で記述される。この命令では、ソースオペランドで指定されるレジスタからそれぞれ１つの８バイトデータを読み込むことが要求される。さらに、それらの８バイトデータを用いて１系統の演算を行い、演算結果を、ディスティネーションオペランドで指定される浮動小数点ＳＩＭＤレジスタ６００内のレジスタに書き込むことが要求される。
【０２１３】
前述の浮動小数点ロード命令の実行時と同様に、ＳＩＭＤ演算命令では、ディスティネーションオペランドにおいて０〜１２７のレジスタ番号が指定されるのに対して、非ＳＩＭＤ演算命令では０〜２５５のレジスタ番号を指定可能である。
【０２１４】
図２６は、ＣＰＵコアにおいて浮動小数点演算命令実行時に動作する構成要素を示す図である。
命令デコーダ２８０は、浮動小数点演算命令をデコードすると、ＣＳＥ４００およびＲＳＦ３６０に対してエントリを登録する。また、命令デコーダ２８０は、演算結果の書き込み先の浮動小数点ＳＩＭＤレジスタ６００に対して、浮動小数点リネーミングレジスタ５６０を割り当てる。割り当てたレジスタのアドレスは、レジスタリネーミング部３００の基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２に登録される。また、割り当てたアドレスは、ＣＳＥ４００およびＲＳＦ３６０の各エントリにも登録される。
【０２１５】
さらに、オペランドデータが浮動小数点リネーミングレジスタ５６０に格納されている場合、格納されたアドレスが基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２から取得される。取得されたアドレスは、ＲＳＦ３６０のエントリに登録される。
【０２１６】
ＳＩＭＤ演算器５２０は、ＲＳＦ３６０から発行されたエントリに基づいて、演算対象のオペランドデータを取得し、演算を実行する。ＳＩＭＤ演算器５２０は、基本演算器５２１、拡張演算器５２２、基本結果レジスタ５２３、拡張結果レジスタ５２４、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２を備える。
【０２１７】
基本演算器５２１、拡張演算器５２２は、それぞれ８バイトデータに対する演算を実行する。基本オペランドデータ選択器５３１は、ＲＳＦ３６０から発行されたエントリに基づき、基本演算器５２１に入力するオペランドデータを選択する。拡張オペランドデータ選択器５３２は、ＲＳＦ３６０から発行されたエントリに基づき、拡張演算器５２２に入力するオペランドデータを選択する。基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２により選択されるデータは、現在実行されている、あるいはすでに実行が完了した命令に応じて得られたデータである。
【０２１８】
なお、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２は、命令に記述されるソースオペランドの数だけそれぞれ設けられる。例えば、上記の命令“Simd-fmad %127*%f100+%f50=%f10”を実行するためには、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２が３組設けられる。
【０２１９】
基本結果レジスタ５２３は、基本演算器５２１による演算結果を一時的に保持し、基本リネーミングレジスタ５６１に出力する。拡張結果レジスタ５２４は、拡張演算器５２２による演算結果を一時的に保持し、拡張リネーミングレジスタ５６２に出力する。また、ＳＩＭＤ演算器５２０は、基本結果レジスタ５２３および拡張結果レジスタ５２４への演算結果の格納が完了すると、ＣＳＥ４００に対して演算の完了を通知する。
【０２２０】
上記構成では、基本演算器５２１による演算結果は、基本結果レジスタ５２３を介して基本リネーミングレジスタ５６１に格納された後、基本レジスタ６０１に格納される。また、拡張演算器５２２による演算結果は、拡張結果レジスタ５２４を介して拡張リネーミングレジスタ５６２に格納された後、拡張レジスタ６０２に格納される。ここで、前述の浮動小数点ロード命令の場合と同様、基本結果レジスタ５２３、基本リネーミングレジスタ５６１および基本レジスタ６０１の順にデータを転送するバスを“基本バス”と呼ぶ。また、拡張結果レジスタ５２４、拡張リネーミングレジスタ５６２および拡張レジスタ６０２の順にデータを転送するバスを“拡張バス”と呼ぶ。
【０２２１】
また、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２はともに、オペランドデータとして、浮動小数点ＳＩＭＤレジスタ６００、浮動小数点リネーミングレジスタ５６０、基本結果レジスタ５２３、拡張結果レジスタ５２４、基本ロードレジスタ４６２および拡張ロードレジスタ４６３のうちのどのレジスタのデータでも選択可能になっている。
【０２２２】
図２７，図２８は、浮動小数点演算命令実行時のパイプラインを説明する図である。
浮動小数点演算命令実行時のパイプラインは、例えば、順にＤサイクル、Ｐサイクル、Ｂサイクル、Ｘ１〜Ｘ６、Ｕサイクル、ＣサイクルおよびＷサイクルを含む。ただし、ＵサイクルとＣサイクルとは、並列に実行されてもよい。
【０２２３】
Ｄサイクルは、命令デコードサイクルである。このＤサイクルでは、命令デコーダ２８０により浮動小数点演算命令がデコードされ、そのデコード結果に基づき、ＣＳＥ４００へのエントリ登録処理（ステップＳ５１）およびＲＳＦ３６０へのエントリ登録処理（ステップＳ５２）が実行される。
【０２２４】
命令デコーダ２８０は、主として、演算結果の書き込み先に関する情報をＣＳＥ４００のエントリに登録する。また、命令デコーダ２８０は、書き込み先の浮動小数点ＳＩＭＤレジスタ６００に対して浮動小数点リネーミングレジスタ５６０を割り当て、レジスタリネーミングマップに登録する（ステップＳ５３）。この登録処理も浮動小数点ロード命令の場合と同様であり、図５，図６で説明した手法が用いられる。
【０２２５】
ＳＩＭＤ演算命令がデコードされた場合、書き込み先レジスタに対応する基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２のエントリに対して、それぞれ基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２の各アドレスが登録される。図２７の例では、割り当てられた基本リネーミングレジスタ５６１のアドレスを“Ａ”、割り当てられた拡張リネーミングレジスタ５６２のアドレスを“Ｂ”と示している。命令デコーダ２８０は、リネーミングマップに割り当てた基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２の各アドレスを、ＣＳＥ４００およびＲＳＦ３６０の各エントリに対しても登録する。
【０２２６】
また、命令デコーダ２８０は、書き込み先レジスタに対応するリネーミングアドレスの他に、ソースデータに関する情報などをＲＳＦ３６０のエントリに登録する。例えば、命令デコーダ２８０は、浮動小数点ＳＩＭＤレジスタ６００におけるオペランドデータの読み出しアドレスを、ＲＳＦ３６０のエントリに登録する。ＳＩＭＤ演算命令の実行時には、１つのソースオペランドに対応するオペランドデータは、基本レジスタ６０１および拡張レジスタ６０２の両方から読み込まれる。
【０２２７】
また、浮動小数点ＳＩＭＤレジスタ６００におけるオペランドデータの読み出しアドレスに対して、リネーミングレジスタが割り当てられていた場合には、そのリネーミングレジスタのアドレスがリネーミングマップから出力される（ステップＳ５４）。出力されたアドレスは、ＲＳＦ３６０に登録される。ＳＩＭＤ演算命令がデコードされた場合、ソースオペランドで指定される１つのソースレジスタに対して、基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２の両方からアドレスが出力され、ＲＳＦ３６０に登録される。一方、非ＳＩＭＤ演算命令がデコードされた場合には、ソースオペランドで指定される１つのソースアドレスに対して、基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２のいずれか一方からアドレスが出力される。
【０２２８】
次に、Ｐサイクルは、プライオリティサイクルである。このＰサイクルでは、ＲＳＦ３６０におけるデータの待ち合わせ制御が行われる。前述のように、ＲＳＦ３６０は、登録されたエントリのうち、必要なデータが揃ったエントリの中で最も古いエントリを発行する。ＲＳＦ３６０からＳＩＭＤ演算器５２０に対して、浮動小数点演算命令に対応するエントリが発行されると、Ｂサイクルに遷移する（ステップＳ５５）。
【０２２９】
Ｂサイクルでは、ＳＩＭＤ演算器５２０の基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２により、オペランドデータが選択される（ステップＳ５６）。ＳＩＭＤ演算命令の実行時には、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２の両方によりオペランドデータが選択され、選択されたデータはそれぞれ基本演算器５２１および拡張演算器５２２に対して供給される。
【０２３０】
次のＸ１〜Ｘ６サイクル（eXecute 1-6 cycle）では、演算処理が実行され、最終のＸ６サイクルにおいて、演算結果が出力されて、後段の結果レジスタに格納される（ステップＳ５７）。ＳＩＭＤ演算命令の実行時には、基本演算器５２１および拡張演算器５２２の両方で演算処理が実行され、演算結果が基本結果レジスタ５２３および拡張結果レジスタ５２４にそれぞれ格納される。図２８では、基本結果レジスタ５２３および拡張結果レジスタ５２４にそれぞれ格納される８バイトデータを、“Ｘ（８Ｂ）”“Ｙ（８Ｂ）”と表している。また、Ｘ６サイクルでは、ＳＩＭＤ演算器５２０からＣＳＥ４００に対して、演算処理の完了が報告される（ステップＳ５８）。
【０２３１】
次のＵサイクル（Update cycle）では、演算結果がリネーミングレジスタに格納される（ステップＳ５９）。ＳＩＭＤ演算命令の実行時には、基本結果レジスタ５２３および拡張結果レジスタ５２４からそれぞれ基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２に対してそれぞれ演算結果が格納される。また、非ＳＩＭＤ演算命令の実行時には、基本リネーミングレジスタ５６１または拡張リネーミングレジスタ５６２のいずれか一方にのみ、演算結果が格納される。
【０２３２】
Ｃサイクルは、命令完了サイクルである。Ｃサイクルにおいて、ＣＳＥ４００は、ＳＩＭＤ演算器５２０からの演算完了報告に基づいて、浮動小数点演算命令が完了したことを判定する（ステップＳ６０）。このＣサイクルは、例えばＵサイクルと並行して実行され、最短のケースではＵサイクルと同時に終了される。
【０２３３】
Ｗサイクルは、レジスタ更新サイクルである。Ｗサイクルでは、基本リネーミングレジスタ５６１に格納された演算結果が、基本レジスタ６０１上の対応するアドレスに格納される。また、拡張リネーミングレジスタ５６２に格納された演算結果が、拡張レジスタ６０２上の対応するアドレスに格納される。これらの格納動作は、ＣＳＥ４００によって制御される（ステップＳ６１）。
【０２３４】
ＳＩＭＤ演算命令の実行時には、基本リネーミングレジスタ５６１と拡張リネーミングレジスタ５６２の両方に演算結果が格納される。従って、ＣＳＥ４００は、これら２つの演算結果を、それぞれ基本レジスタ６０１および拡張レジスタ６０２における同じレジスタ番号の位置に格納する。
【０２３５】
図２９，図３０は、非ＳＩＭＤ演算命令実行時のデータの流れを説明する図である。これらの図を用いて、ＳＩＭＤ演算命令実行時との動作の違いについて説明する。
非ＳＩＭＤ演算命令では、非ＳＩＭＤロード命令の場合と同様に、演算結果の書き込み先として、基本レジスタ６０１および拡張レジスタ６０２の中の１つのレジスタが指定される。Ｄサイクルにおいて、命令デコーダ２８０は、非ＳＩＭＤ演算命令をデコードすると、演算結果の書き込み先として指定された１つのレジスタに対して、リネーミングレジスタを割り当てる。図２９では、演算結果の書き込み先として基本レジスタ６０１の１つが指定された場合を示している。この場合には、基本レジスタリネーミングマップ３０１内の対応する位置に、命令デコーダ２８０によって割り当てられた、基本リネーミングレジスタ５６１のアドレスが登録される。
【０２３６】
また、非ＳＩＭＤ演算命令では、１つのソースオペランドにより、オペランドデータの読み出し元のレジスタとして基本レジスタ６０１および拡張レジスタ６０２の中の１つのレジスタが指定される。そして、指定された基本レジスタ６０１または拡張レジスタ６０２のアドレスに対してリネーミングレジスタが割り当てられた場合には、割り当てられたリネーミングレジスタのアドレスが、基本レジスタリネーミングマップ３０１または拡張レジスタリネーミングマップ３０２のいずれか一方から読み出され、ＲＳＦ３６０に登録される。
【０２３７】
Ｂサイクルでは、ＲＳＦ３６０から発行されるエントリに基づき、基本オペランドデータ選択器５３１または拡張オペランドデータ選択器５３２のいずれか一方により、オペランドデータが選択される。このため、Ｘ１〜Ｘ６サイクルでの演算処理は、基本演算器５２１または拡張演算器５２２のいずれか一方でのみ実行される。
【０２３８】
演算結果の格納先として基本レジスタ６０１が指定されれば、基本オペランドデータ選択器５３１によりオペランドデータが選択される。また、演算結果の格納先として拡張レジスタ６０２が指定されれば、拡張オペランドデータ選択器５３２によりオペランドデータが選択される。ただし、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２のどちらでも、オペランドデータの読み出し元として、基本バス側のレジスタおよび拡張バス側のレジスタのどちらでも選択可能である。
【０２３９】
図３０では、基本オペランドデータ選択器５３１によりオペランドデータが選択された場合を示している。この場合、基本演算器５２１によって演算処理が実行され、演算結果は、基本結果レジスタ５２３を介して、基本リネーミングレジスタ５６１に格納される。また、ＣＳＥ４００は、基本結果レジスタ５２３への演算結果の格納が完了したことを検知した後、Ｗサイクルにおいて、基本リネーミングレジスタ５６１に格納された演算結果を、対応する基本レジスタ６０１に転送させる。
【０２４０】
上記の処理では、浮動小数点ロード命令の場合と同様に、非ＳＩＭＤ演算命令の実行時には、浮動小数点ＳＩＭＤレジスタ６００内のレジスタは、８バイト単位の独立したレジスタとして取り扱われる。これとともに、浮動小数点リネーミングレジスタ５６０内のレジスタも、８バイト単位の独立したレジスタとして取り扱われる。従って、浮動小数点リネーミングレジスタ５６０および浮動小数点ＳＩＭＤレジスタ６００においては、使用不可能となる無駄な記憶領域が発生しなくなり、記憶領域の使用効率が向上する。
【０２４１】
さらに、非ＳＩＭＤ演算命令の実行時には、オペランドデータを浮動小数点ＳＩＭＤレジスタ６００または浮動小数点リネーミングレジスタ５６０から読み出すことが可能である。この読み出し処理においても、浮動小数点ＳＩＭＤレジスタ６００および浮動小数点リネーミングレジスタ５６０の中のレジスタを８バイト単位の独立したレジスタとして取り扱うことができる。すなわち、オペランドデータの読み出し元として、浮動小数点ＳＩＭＤレジスタ６００または浮動小数点リネーミングレジスタ５６０の中の８バイト単位のレジスタを指定できる。従って、記憶領域の使用効率が向上するとともに、プログラムの自由度が高められる。
【０２４２】
図３１は、浮動小数点演算命令実行時に、オペランドデータがリネーミングレジスタから供給される場合のタイムチャートの例を示す。
図３１では、ＳＩＭＤロード命令がデコードされた後、ＳＩＭＤ演算命令がデコードされた場合のパイプラインの例を示している。ＳＩＭＤロード命令では、ロードデータの書き込み先として、“%f100”で示される浮動小数点ＳＩＭＤレジスタ６００が指定される。また、ＳＩＭＤ演算命令では、オペランドデータの入力元として、“%f100”で示される浮動小数点ＳＩＭＤレジスタ６００のレジスタが指定され、その結果、ＳＩＭＤロード命令とＳＩＭＤ演算命令との間にレジスタの依存関係が生じる。
【０２４３】
ＳＩＭＤロード命令のパイプラインでは、ＣＳＥ４００での命令の完了待ちが生じており、このためにＣサイクルの実行が遅延している。一方、ＳＩＭＤ演算命令のパイプラインでは、ＳＩＭＤロード命令におけるＣサイクルの実行前に、オペランドデータを選択するＢサイクルが実行されている。このため、“%f100”に対応する浮動小数点ＳＩＭＤレジスタ６００のアドレスには、リネーミングレジスタが割り当てられた状態となっている。従って、ＳＩＭＤ演算命令のＢサイクルでは、“%f100”のレジスタに格納されるべきデータを、“%f100”のレジスタに割り当てられたリネーミングレジスタから読み込むことが可能である。これによって、演算処理の実行速度を高めることができる。
【０２４４】
次に、浮動小数点演算命令実行時に動作する各ブロックの詳細な構成を示すとともに、それらのブロック間での信号の流れについて説明する。なお、以下の説明では例として、例えば“Simd-fmad %127*%f100+%f50=%f10”のように、ソースオペランドとして３つのレジスタが指定された場合の動作を説明する。また、オペランドデータの読み出し元として、浮動小数点ＳＩＭＤレジスタ６００または浮動小数点リネーミングレジスタ５６０のいずれか一方が選択されるものとする。
【０２４５】
図３２は、浮動小数点演算命令実行時の命令デコーダの出力信号を示す図である。
図３２では、浮動小数点演算命令実行時のＤサイクルにおいて出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０２４６】
命令デコード回路２８１は、浮動小数点演算命令をデコードすると、実行すべき浮動小数点演算の種類を示す制御信号Ｄ＿ＦＬ＿ＯＰＣを出力する。制御信号Ｄ＿ＦＬ＿ＯＰＣは、ＲＳＦ３６０に出力される。
【０２４７】
また、命令デコード回路２８１は、演算結果の書き込み先の浮動小数点ＳＩＭＤレジスタ６００のアドレスを示すアドレス信号Ｄ＿ＷＲ＿ＡＤＲを、基本レジスタリネーミングマップ３０１、拡張レジスタリネーミングマップ３０２、ＣＳＥ４００および制御信号生成回路２８２に出力する。アドレス信号Ｄ＿ＷＲ＿ＡＤＲは、０〜１２７の値をとる。
【０２４８】
また、命令デコード回路２８１は、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲを、基本レジスタリネーミングマップ３０１、拡張レジスタリネーミングマップ３０２およびＲＳＦ３６０に対して出力する。アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲは、それぞれ浮動小数点演算命令のソースオペランドで指定される、浮動小数点ＳＩＭＤレジスタ６００における３つのレジスタのアドレスを示している。
【０２４９】
さらに、命令デコード回路２８１は、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲに関する制御信号として、制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ２＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ３＿ＵＳＥ＿ＥＸＴＥＮＤを、ＲＳＦ３６０に出力する。
【０２５０】
制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤは、第１番目のソースオペランドで指定されるレジスタとして、基本バス側を使用するか否か、および、拡張バス側を使用するか否かをそれぞれ示す。同様に、制御信号Ｄ＿Ｒ２＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＵＳＥ＿ＥＸＴＥＮＤは、第２番目のソースオペランドで指定されるレジスタとして、基本バス側を使用するか否か、拡張バス側を使用するか否かをそれぞれ示す。制御信号Ｄ＿Ｒ３＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＵＳＥ＿ＥＸＴＥＮＤは、第３番目のソースオペランドで指定されるレジスタとして、基本バス側を使用するか否か、および、拡張バス側を使用するか否かをそれぞれ示す。
【０２５１】
浮動小数点演算命令の種類およびソースオペランドの値を基に、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲおよび制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤを出力する処理手順は、図１４に示したフローチャートにおいて、オペレーションコードおよびアドレスを基にアドレス信号Ｄ＿ＷＲ＿ＡＤＲおよび制御信号Ｄ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＵＳＥ＿ＥＸＴＥＮＤを出力する処理手順と同じである。
【０２５２】
すなわち、命令デコード回路２８１は、ＳＩＭＤ演算命令をデコードしたときは、第１番目のソースオペランドに記述されたレジスタ番号に対応するアドレスを、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲとして出力する。このとき、制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤをともにオンにする。
【０２５３】
また、命令デコード回路２８１は、非ＳＩＭＤ演算命令をデコードしたとき、第１番目のソースオペランドに記述されたレジスタ番号に対応するアドレスが“１２７”以下であれば、そのアドレスをアドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲとして出力する。このとき、制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣをオンにし，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤをオフにする。
【０２５４】
また、命令デコード回路２８１は、非ＳＩＭＤ演算命令をデコードしたとき、第１番目のソースオペランドに記述されたレジスタ番号に対応するアドレスが“１２７”を超えていれば、そのアドレスから“１２８”を減算し、減算した値をアドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲとして出力する。このとき、制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣをオフにし、Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤをオンにする。
【０２５５】
アドレス信号Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲおよび制御信号Ｄ＿Ｒ２＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＵＳＥ＿ＥＸＴＥＮＤは、命令の種類と、第２番目のソースオペランドに記述されたレジスタ番号とを基に、上記と同じ手順で出力される。また、アドレス信号Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲおよび制御信号Ｄ＿Ｒ３＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＵＳＥ＿ＥＸＴＥＮＤは、命令の種類と、第３番目のソースオペランドに記述されたレジスタ番号とを基に、上記と同じ手順で出力される。
【０２５６】
また、命令デコード回路２８１は、演算結果の格納先として基本レジスタ６０１および拡張レジスタ６０２がそれぞれ指定されたか否かを示すＤ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＵＳＥ＿ＥＸＴＥＮＤを、制御信号生成回路２８２に対して出力する。
【０２５７】
制御信号生成回路２８２は、命令デコード回路２８１からのアドレス信号Ｄ＿ＷＲ＿ＡＤＲが出力されると、次の信号を出力する。
制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣは、基本演算器５２１を使用するか否かを示す信号であり、制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤは、拡張演算器５２２を使用するか否かを示す信号である。制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤは、ともにＲＳＦ３６０に対して出力される。
【０２５８】
制御信号Ｄ＿ＥＵ＿ＵＳＥは、基本演算器５２１および拡張演算器５２２の少なくとも一方を使用するか否かを示す信号であり、ＣＳＥ４００に対して出力される。制御信号Ｄ＿ＲＥＬ＿ＲＳＦは、ＲＳＦ３６０に対してエントリの作成を要求する信号である。
【０２５９】
制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣ，Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤは、演算結果の書き込み先がそれぞれ基本レジスタ６０１であるか否か、拡張レジスタ６０２であるか否かを示す信号であり、図１３に示した制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣ，Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤと同じ信号である。
【０２６０】
基本リネーミングレジスタ割り当て回路２８３，拡張リネーミングレジスタ割り当て回路２８４から出力される信号は、浮動小数点ロード命令のデコード時と同じである。また、ＣＳＥ割り当て回路２８５は、浮動小数点ロード命令のデコード実行時と同様に、ＣＳＥ４００に登録するエントリを識別するエントリ識別信号Ｄ＿ＩＩＤを割り当てる。
【０２６１】
なお、浮動小数点演算命令がデコードされた場合のリネーミングレジスタの割り当て手順や、制御信号Ｄ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣ，Ｄ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤ、アドレス信号Ｄ＿ＷＲ＿ＡＤＲの出力手順は、基本的に図１４で示した処理手順と同じである。また、浮動小数点演算命令がデコードされた場合には、図１４の処理において、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤの代わりに、制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤが適用されればよい。これにより、浮動小数点演算命令の実行時に使用されるレジスタの種類が割り当てられ、後段のブロックにおいて、処理に使用されるレジスタを正確に特定できるようになる。
【０２６２】
図３３は、浮動小数点演算命令実行時のレジスタリネーミング部の入出力信号を示す図である。なお、図３３では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０２６３】
リネーミングマップ登録回路３０４，３０５に入力される信号の種類は、浮動小数点ロード命令の実行時と同じである。従って、浮動小数点ロード命令の実行時と同様の手順で、演算結果の書き込み先に対応するリネーミングレジスタのアドレスが、基本レジスタリネーミングマップ３０１または拡張レジスタリネーミングマップ３０２の少なくとも一方に登録される。
【０２６４】
また、浮動小数点演算命令の実行時には、読み出し回路３０７，３０８に対して、命令デコーダ２８０からのアドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲが入力される。読み出し回路３０７は、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲで指定される基本レジスタ６０１に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを基本レジスタリネーミングマップ３０１から読み出す。そして、読み出したアドレスをアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣとしてＲＳＦ３６０に出力する。また、読み出し回路３０７は、アドレス信号Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲで指定される基本レジスタ６０１に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを基本レジスタリネーミングマップ３０１から読み出す。そして、読み出したアドレスをアドレス信号Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣとしてＲＳＦ３６０に出力する。また、読み出し回路３０７は、アドレス信号Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲで指定される基本レジスタ６０１に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを基本レジスタリネーミングマップ３０１から読み出す。そして、読み出したアドレスをアドレス信号Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣとしてＲＳＦ３６０に出力する。
【０２６５】
読み出し回路３０８は、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲで指定される拡張レジスタ６０２に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを拡張レジスタリネーミングマップ３０２から読み出す。そして、読み出したアドレスをアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとしてＲＳＦ３６０に出力する。また、読み出し回路３０８は、アドレス信号Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲで指定される拡張レジスタ６０２に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを拡張レジスタリネーミングマップ３０２から読み出す。そして、読み出したアドレスをアドレス信号Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとしてＲＳＦ３６０に出力する。また、読み出し回路３０８は、アドレス信号Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲで指定される拡張レジスタ６０２に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを拡張レジスタリネーミングマップ３０２から読み出す。そして、読み出したアドレスをアドレス信号Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとしてＲＳＦ３６０に出力する。
【０２６６】
なお、Ｗサイクルでは、浮動小数点ロード命令実行時と同様の手順で、ＣＳＥ４００からのアドレス信号に対応する基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２内のエントリが、無効化される。
【０２６７】
図３４は、浮動小数点演算命令実行時のＣＳＥの入出力信号を示す図である。なお、図３４では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０２６８】
浮動小数点演算命令の実行時において、エントリ生成回路４０２には、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤの代わりに、命令デコーダ２８０からの制御信号Ｄ＿ＥＵ＿ＵＳＥが入力される。すなわち、浮動小数点ロード命令の実行時と異なり、浮動小数点演算命令の実行時には、ＣＳＥ４００は、基本演算器５２１および拡張演算器５２２のそれぞれによる演算の実行状態を個別に判定しない。
【０２６９】
また、演算実行完了エントリ選択回路４０４には、Ｘ６サイクルにおいて、制御信号Ｘ＿ＦＬ＿ＣＯＭＰおよびエントリ識別信号Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤが、ともにＳＩＭＤ演算器５２０から入力される。制御信号Ｘ＿ＦＬ＿ＣＯＭＰは、ＳＩＭＤ演算器５２０での浮動小数点演算が完了したことを示す信号であり、エントリ識別信号Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤは、ＣＳＥ４００のエントリを識別する信号である。
【０２７０】
完了エントリ選択回路４０５は、Ｃサイクルにおいて、エントリ記憶回路４０１に登録された先頭のエントリを、完了判定回路４０６に読み出す。完了判定回路４０６は、読み出されたエントリに基づき、そのエントリに対応する処理の実行が完了しているか否かを判定する。浮動小数点演算命令の実行時には、完了判定回路４０６は、上記の制御信号Ｘ＿ＦＬ＿ＣＯＭＰおよびエントリ識別信号Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤに基づくエントリの信号から、処理の実行完了を判定する。
【０２７１】
信号出力回路４０７から出力される信号およびその出力先は、浮動小数点ロード命令の実行時と同じである。
図３５は、浮動小数点演算命令実行時のＣＳＥのエントリの内容を示す図である。
【０２７２】
浮動小数点演算命令に対応するＣＳＥ４００のエントリにおいて、浮動小数点ロード命令実行時と異なる点は、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥの代わりに信号ＥＵ＿ＵＳＥが登録されることと、信号ＢＡＳＩＣ＿ＦＰ＿ＣＯＭＰ，ＥＸＴＥＮＤ＿ＦＰ＿ＣＯＭＰの代わりに信号ＥＵ＿ＣＯＭＰが登録されることである。
【０２７３】
信号ＥＵ＿ＵＳＥは、基本演算器５２１および拡張演算器５２２の少なくとも一方を使用するか否かを示す信号であり、命令デコーダ２８０からの制御信号Ｄ＿ＥＵ＿ＵＳＥの出力に応じてオンになる。信号ＥＵ＿ＣＯＭＰは、演算処理が完了したか否かを示す信号であり、Ｘ６サイクルにおいて、ＳＩＭＤ演算器５２０からの制御信号Ｘ＿ＦＬ＿ＣＯＭＰをＣＳＥ４００が受信すると、オンになる。
【０２７４】
図３６は、浮動小数点演算命令実行時のＲＳＦの入出力信号を示す図である。なお、図３６では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０２７５】
ＲＳＦ３６０は、エントリ記憶回路３６１、エントリ生成回路３６２、オペランドデータ待ち回路３６３、発行エントリ選択回路３６４および信号出力回路３６５を備える。
Ｄサイクルにおいて、エントリ生成回路３６２は、命令デコーダ２８０から制御信号Ｄ＿ＲＥＬ＿ＲＳＦを受信し、命令デコーダ２８０からのエントリ識別信号Ｄ＿ＩＩＤに対応するエントリを１つ作成し、エントリ記憶回路３６１に登録する。エントリ生成回路３６２は、制御信号Ｄ＿ＲＥＬ＿ＲＳＦを受信したとき、浮動小数点演算命令用のエントリを作成する。
【０２７６】
このとき、エントリ生成回路３６２には、命令デコーダ２８０からのアドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲが入力される。
【０２７７】
また、ＳＩＭＤ演算命令がデコードされた場合には、エントリ生成回路３６２には、命令デコーダ２８０からの制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ２＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ３＿ＵＳＥ＿ＥＸＴＥＮＤが入力される。ただし、非ＳＩＭＤ演算命令がデコードされた場合には、制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤのうちの一方のみ、制御信号Ｄ＿Ｒ２＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＵＳＥ＿ＥＸＴＥＮＤのうちの一方のみ、制御信号Ｄ＿Ｒ３＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＵＳＥ＿ＥＸＴＥＮＤのうちの一方のみが、それぞれオンになる。
【０２７８】
また、ＳＩＭＤ演算命令がデコードされた場合には、エントリ生成回路３６２には、命令デコーダ２８０からの制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤ、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤが入力される。ただし、非ＳＩＭＤ演算命令がデコードされた場合には、制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤのうちの一方のみ、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤの一方のみが、それぞれオンになる。
【０２７９】
また、ソースオペランドの読み出し元レジスタがリネーミングされていた場合には、エントリ生成回路３６２には、基本レジスタリネーミングマップ３０１からのアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣのうち、リネーミングされたレジスタに対応する信号が入力される。また、ソースオペランドの読み出し元レジスタがリネーミングされていた場合には、エントリ生成回路３６２には、拡張レジスタリネーミングマップ３０２からのアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤのうち、リネーミングされたレジスタに対応する信号が入力される。
【０２８０】
ＳＩＭＤ演算命令がデコードされた場合、アドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣとアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ、アドレス信号Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣとアドレス信号Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ、アドレス信号Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣとアドレス信号Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは、それぞれセットで入力される。一方、非ＳＩＭＤ命令がデコードされた場合、アドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤの一方のみ、アドレス信号Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤの一方のみ、アドレス信号Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤの一方のみが入力される。
【０２８１】
オペランドデータ待ち回路３６３は、アドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤなどによって指定されるレジスタからのオペランドデータの待ち合わせ制御を行う。発行エントリ選択回路３６４は、エントリ記憶回路３６１に登録されたエントリのうち、必要なデータの準備が整ったエントリの最も古いエントリを選択し、信号出力回路３６５に出力する。
【０２８２】
発行エントリ選択回路３６４から浮動小数点演算命令に対応するエントリが出力されると、信号出力回路３６５は、エントリに基づき、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｂ＿ＦＬ＿ＯＰＣ、選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，Ｂ＿Ｒ２＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，Ｂ＿Ｒ３＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ２＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ３＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤ、エントリ識別信号Ｂ＿ＦＬ＿ＩＩＤ、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ３＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤを出力する。
【０２８３】
図３７は、浮動小数点演算命令実行時におけるＲＳＦのエントリの内容を示す図である。
浮動小数点演算命令実行時にＲＳＦ３６０に登録される１つのエントリは、次の信号およびアドレスが登録される。信号Ｖは、エントリが有効か否かを示す。信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥは、それぞれ基本演算器５２１を使用するか否か、拡張演算器５２２を使用するか否かを示す信号である。信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥは、命令デコーダ２８０からの制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣに応じた値をとる。また、信号ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥは、命令デコーダ２８０からの制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤに応じた値をとる。従って、ＳＩＭＤ演算命令の実行時には、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥの両方がオンになり、非ＳＩＭＤ演算命令の実行時には、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥのいずれか一方がオンになる。また、エントリ発行時において、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥの値は、それぞれ制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤとして出力される。
【０２８４】
信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ２＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ３＿ＵＳＥは、それぞれ、第１番目〜第３番目のソースオペランドで指定されるレジスタとして、基本バス側のレジスタを使用するか否かを示す。信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＵＳＥは、それぞれ、第１番目〜第３番目のソースオペランドで指定されるレジスタとして、拡張バス側のレジスタを使用するか否かを示す。信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ２＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ３＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＵＳＥは、それぞれ命令デコーダ２８０からの制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ２＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ３＿ＵＳＥ＿ＥＸＴＥＮＤと同じ値をとる。
【０２８５】
信号ＯＰＣは、演算の種類を示す信号であり、命令デコーダ２８０からの制御信号Ｄ＿ＦＬ＿ＯＰＣに応じた値が登録される。また、エントリ発行時において、信号ＯＰＣの値は制御信号Ｂ＿ＦＬ＿ＯＰＣとして出力される。信号ＩＩＤは、ＣＳＥ４００における対応するエントリを識別する信号であり、命令デコーダ２８０からのエントリ識別信号Ｄ＿ＩＩＤに応じた値が登録される。エントリ発行時において、信号ＩＩＤの値はエントリ識別信号Ｂ＿ＦＬ＿ＩＩＤとして出力される。
【０２８６】
信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹは、基本バス側のレジスタにおいてオペランドデータの準備ができたか否かを示す信号であり、オペランドデータ待ち回路３６３によって登録される。信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹは、拡張バス側のレジスタにおいてオペランドデータの準備ができたか否かを示す信号であり、オペランドデータ待ち回路３６３によって登録される。
【０２８７】
信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥ，ＢＡＳＩＣ＿Ｒ２＿ＩＮＧＡＴＥ，ＢＡＳＩＣ＿Ｒ３＿ＩＮＧＡＴＥは、基本オペランドデータ選択器５３１に入力されたデータを選択する選択信号であり、オペランドデータ待ち回路３６３によって登録される。信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥ，ＢＡＳＩＣ＿Ｒ２＿ＩＮＧＡＴＥ，ＢＡＳＩＣ＿Ｒ３＿ＩＮＧＡＴＥは、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥがオンであるときに、オペランドデータ待ち回路３６３によって登録される。
【０２８８】
信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＩＮＧＡＴＥは、拡張オペランドデータ選択器５３２に入力されたデータを選択する選択信号であり、オペランドデータ待ち回路で３６３によって登録される。信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＩＮＧＡＴＥは、信号ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥがオンであるときに、オペランドデータ待ち回路３６３によって登録される。
【０２８９】
なお、本実施の形態では、後述するように、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２は、ともに８つの入力信号から１つを選択する。また、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２は、それぞれ入力されるすべての信号を選択しない場合もある。従って、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２の各選択動作を制御する信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥ，ＢＡＳＩＣ＿Ｒ２＿ＩＮＧＡＴＥ，ＢＡＳＩＣ＿Ｒ３＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＩＮＧＡＴＥは、いずれも４ビットの信号である。
【０２９０】
エントリ発行時において、信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥ，ＢＡＳＩＣ＿Ｒ２＿ＩＮＧＡＴＥ，ＢＡＳＩＣ＿Ｒ３＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＩＮＧＡＴＥの値は、それぞれ選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，Ｂ＿Ｒ２＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，Ｂ＿Ｒ３＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ２＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ３＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤとして出力される。
【０２９１】
アドレスＲ１＿ＲＥＧ＿ＡＤＲ，Ｒ２＿ＲＥＧ＿ＡＤＲ，Ｒ３＿ＲＥＧ＿ＡＤＲは、浮動小数点ＳＩＭＤレジスタ６００からのオペランドデータの読み出しアドレスを示す。アドレスＲ１＿ＲＥＧ＿ＡＤＲ，Ｒ２＿ＲＥＧ＿ＡＤＲ，Ｒ３＿ＲＥＧ＿ＡＤＲは、それぞれ命令デコーダ２８０からの制御信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲに応じた値をとる。また、エントリ発行時において、アドレスＲ１＿ＲＥＧ＿ＡＤＲ，Ｒ２＿ＲＥＧ＿ＡＤＲ，Ｒ３＿ＲＥＧ＿ＡＤＲの値は、それぞれ制御信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ３＿ＦＰＲ＿ＡＤＲとして出力される。
【０２９２】
アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ３＿ＦＵＢ＿ＡＤＲは、基本リネーミングレジスタ５６１からのオペランドデータの読み出しアドレスを示す。アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ３＿ＦＵＢ＿ＡＤＲは、それぞれ基本レジスタリネーミングマップ３０１からのアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣに応じた値をとる。また、エントリ発行時において、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ３＿ＦＵＢ＿ＡＤＲの値は、それぞれアドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣとして出力される。
【０２９３】
アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ３＿ＦＵＢ＿ＡＤＲは、拡張リネーミングレジスタ５６２からのオペランドデータの読み出しアドレスを示す。アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ３＿ＦＵＢ＿ＡＤＲは、それぞれ拡張レジスタリネーミングマップ３０２からのアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤに応じた値をとる。また、エントリ発行時において、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ３＿ＦＵＢ＿ＡＤＲの値は、それぞれアドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとして出力される。
【０２９４】
ここで、信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ２＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ３＿ＵＳＥがそれぞれオンである場合、エントリ発行時に次のような信号出力が行われる。アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ３＿ＦＵＢ＿ＡＤＲにそれぞれ値が登録されれば、アドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣがそれぞれ出力され、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ３＿ＦＰＲ＿ＡＤＲはそれぞれ出力されない。一方、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ３＿ＦＵＢ＿ＡＤＲにそれぞれ値が登録されていなければ、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ３＿ＦＰＲ＿ＡＤＲがそれぞれ出力され、アドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣは出力されない。
【０２９５】
また、信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＵＳＥがそれぞれオンである場合、エントリ発行時に次のような信号出力が行われる。アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ３＿ＦＵＢ＿ＡＤＲにそれぞれ値が登録されれば、アドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤがそれぞれ出力され、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ３＿ＦＰＲ＿ＡＤＲはそれぞれ出力されない。一方、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ３＿ＦＵＢ＿ＡＤＲにそれぞれ値が登録されていなければ、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ３＿ＦＰＲ＿ＡＤＲがそれぞれ出力され、アドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは出力されない。
【０２９６】
アドレスＢＡＳＩＣ＿ＤＳＴ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＤＳＴ＿ＡＤＲは、それぞれ基本リネーミングレジスタ５６１、拡張リネーミングレジスタ５６２に対する演算結果の書き込みアドレスを示す。Ｄサイクルにおいて、アドレスＢＡＳＩＣ＿ＤＳＴ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＤＳＴ＿ＡＤＲには、アドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤに応じた値が登録される。また、エントリ発行時において、アドレスＢＡＳＩＣ＿ＤＳＴ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＤＳＴ＿ＡＤＲの値は、それぞれアドレス信号Ｂ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとして出力される。
【０２９７】
ＴＡＧフィールドは、その他のタグ情報が保持されるフィールドである。
図３８は、ＳＩＭＤ演算命令実行時のＲＳＦエントリの内容を説明する図である。
本実施の形態では、浮動小数点演算命令において３つのソースオペランドが記述され、それぞれのソースオペランドによりソースレジスタが指定される。ＳＩＭＤ演算命令の場合には、６個のソースレジスタからデータを読み込んで演算が行われる。
【０２９８】
ＳＩＭＤ演算命令に対応するＲＳＦ３６０のエントリでは、これら６個のソースレジスタに対応するオペランドデータが準備されたか否かが管理される。すなわち、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹは、３個のソースオペランドで指定されるソースレジスタのうち、基本バス側のレジスタ（基本レジスタ６０１、基本リネーミングレジスタ５６１、基本結果レジスタ５２３および基本ロードレジスタ４６２）のデータが準備されたか否かを示す。また、信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹは、３個のソースオペランドで指定されるソースレジスタのうち、拡張バス側のレジスタ（拡張レジスタ６０２、拡張リネーミングレジスタ５６２、拡張結果レジスタ５２４および拡張ロードレジスタ４６３）のデータが準備されたか否かを示す。これらの信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹは、オペランドデータ待ち回路３６３により登録される。
【０２９９】
発行エントリ選択回路３６４は、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹがすべてオンになるまで、エントリを発行しない。
【０３００】
図３９は、非ＳＩＭＤ演算命令実行時のＲＳＦエントリの内容を説明する図である。
非ＳＩＭＤ演算命令がデコードされた場合には、３個のソースレジスタからデータを読み込んで演算が行われる。信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥ、信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥのいずれか１つがオンになる。信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥがオンで信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥがオフの場合には、信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹは、エントリ作成と同時にオンになり、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹは、データが揃った時点でオンとなる。また、信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥがオフで信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥがオンの場合には、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹは、エントリ作成と同時にオンになり、信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹは、データが揃った時点でオンとなる。
【０３０１】
信号ＢＡＳＩＣ＿Ｒ２＿ＵＳＥ，信号ＥＸＴＥＮＤ＿Ｒ２＿ＵＳＥと、信号ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹとの関係は、上記の信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥ，信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥと、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹとの関係と同様である。また、信号ＢＡＳＩＣ＿Ｒ３＿ＵＳＥ，信号ＥＸＴＥＮＤ＿Ｒ３＿ＵＳＥと、信号ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹとの関係も、上記の信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥ，信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥと、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹとの関係と同様である。このため、発行エントリ選択回路３６４は、ＳＩＭＤ演算命令と同様に、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹがすべてオンになるまで、エントリを発行しない。
【０３０２】
なお、図３９の例では、命令コードで指定される第１番目のソースレジスタおよび第２番目のソースレジスタとしてともに基本バス側のレジスタが指定され、第３番目のソースレジスタとして拡張バス側のレジスタが指定される。非ＳＩＭＤ演算命令では、ソースレジスタのアドレスとして０〜２５５までを指定可能であることから、基本バス側、拡張バス側のどのレジスタをソースレジスタとして指定し、データを読み込むことが可能である。
【０３０３】
図４０〜図４４は、オペランドデータ待ち回路によるエントリ更新手順を示すフローチャートである。なお、図４０〜図４４では、例として、第１番目のソースオペランドに関する処理について示している。
【０３０４】
ＲＳＦ３６０のエントリにおいて、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ１＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥがすべてオンである場合には、オペランドデータ待ち回路３６３は、図４０の処理を実行する。
【０３０５】
［ステップＳ７１］オペランドデータ待ち回路３６３は、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲの値が有効であるかを判定する。有効な値が登録されている場合には、ステップＳ７２の処理が実行され、有効な値が登録されていない場合には、ステップＳ７５の処理が実行される。
【０３０６】
［ステップＳ７２］オペランドデータ待ち回路３６３は、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される基本リネーミングレジスタ５６１に対するオペランドデータの待ち合わせを行う。
【０３０７】
［ステップＳ７３］オペランドデータ待ち回路３６３は、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される基本リネーミングレジスタ５６１に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路３６３は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップＳ７４の処理が実行される。
【０３０８】
［ステップＳ７４］オペランドデータ待ち回路３６３は、基本オペランドデータ選択器５３１で選択するデータ読み出し元レジスタを、基本リネーミングレジスタ５６１、基本結果レジスタ５２３および基本ロードレジスタ４６２の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ７６の処理が実行される。
【０３０９】
［ステップＳ７５］オペランドデータ待ち回路３６３は、基本オペランドデータ選択器５３１で選択するデータ読み出し元レジスタを、基本レジスタ６０１に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ７６の処理が実行される。
【０３１０】
［ステップＳ７６］オペランドデータ待ち回路３６３は、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
【０３１１】
［ステップＳ７７］オペランドデータ待ち回路３６３は、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲの値が有効であるかを判定する。有効な値が登録されている場合には、ステップＳ７８の処理が実行され、有効な値が登録されていない場合には、ステップＳ８１の処理が実行される。
【０３１２】
［ステップＳ７８］オペランドデータ待ち回路３６３は、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される拡張リネーミングレジスタ５６２に対するオペランドデータの待ち合わせを行う。
【０３１３】
［ステップＳ７９］オペランドデータ待ち回路３６３は、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される拡張リネーミングレジスタ５６２に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路３６３は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップＳ８０の処理が実行される。
【０３１４】
［ステップＳ８０］オペランドデータ待ち回路３６３は、拡張オペランドデータ選択器５３２で選択するデータ読み出し元レジスタを、拡張リネーミングレジスタ５６２、拡張結果レジスタ５２４および拡張ロードレジスタ４６３の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ８２の処理が実行される。
【０３１５】
［ステップＳ８１］オペランドデータ待ち回路３６３は、拡張オペランドデータ選択器５３２で選択するデータ読み出し元レジスタを、拡張レジスタ６０２に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ８２の処理が実行される。
【０３１６】
［ステップＳ８２］オペランドデータ待ち回路３６３は、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
【０３１７】
［ステップＳ８３］発行エントリ選択回路３６４で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路３６３は、ステップＳ７１〜Ｓ８２の処理を再度実行する。
【０３１８】
上記の処理では、オペランドデータの待ち合わせをオペランドデータごとに別々に行っているため、それぞれのオペランドデータの待ち合わせの完了が別々のサイクルになることがある。しかしながら、発行エントリ選択回路３６４は、全てのオペランドデータの準備ができないとエントリを発行しない。このような発行エントリ選択回路３６４の制御手順により、オペランドデータの待ち合わせをオペランドデータごとに行うことができる。
【０３１９】
また、ＲＳＦ３６０のエントリにおいて、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥがオン、信号ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥがオフ、信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥがオン、信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥがオフである場合には、オペランドデータ待ち回路３６３は、図４１の処理を実行する。
【０３２０】
［ステップＳ９１］オペランドデータ待ち回路３６３は、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲの値が有効であるかを判定する。有効な値が登録されている場合には、ステップＳ９２の処理が実行され、有効な値が登録されていない場合には、ステップＳ９５の処理が実行される。
【０３２１】
［ステップＳ９２］オペランドデータ待ち回路３６３は、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される基本リネーミングレジスタ５６１に対するオペランドデータの待ち合わせを行う。
【０３２２】
［ステップＳ９３］オペランドデータ待ち回路３６３は、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される基本リネーミングレジスタ５６１に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路３６３は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップＳ９４の処理が実行される。
【０３２３】
［ステップＳ９４］オペランドデータ待ち回路３６３は、基本オペランドデータ選択器５３１で選択するデータ読み出し元レジスタを、基本リネーミングレジスタ５６１、基本結果レジスタ５２３および基本ロードレジスタ４６２の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ９６の処理が実行される。
【０３２４】
［ステップＳ９５］オペランドデータ待ち回路３６３は、基本オペランドデータ選択器５３１で選択するデータ読み出し元レジスタを、基本レジスタ６０１に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ９６の処理が実行される。
【０３２５】
［ステップＳ９６］オペランドデータ待ち回路３６３は、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
【０３２６】
［ステップＳ９７］オペランドデータ待ち回路３６３は、拡張オペランドデータ選択器５３２においてどの入力信号も選択しないように、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。
【０３２７】
［ステップＳ９８］オペランドデータ待ち回路３６３は、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹをオンにする。
［ステップＳ９９］発行エントリ選択回路３６４で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路３６３は、ステップＳ９１〜Ｓ９６の処理を再度実行する。
【０３２８】
また、ＲＳＦ３６０のエントリにおいて、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥがオフ、信号ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥがオン、信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥがオフ、信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥがオンの場合には、オペランドデータ待ち回路３６３は、図４２の処理を実行する。
【０３２９】
［ステップＳ１０１］オペランドデータ待ち回路３６３は、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲの値が有効であるかを判定する。有効な値が登録されている場合には、ステップＳ１０２の処理が実行され、有効な値が登録されていない場合には、ステップＳ１０５の処理が実行される。
【０３３０】
［ステップＳ１０２］オペランドデータ待ち回路３６３は、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される拡張リネーミングレジスタ５６２に対するオペランドデータの待ち合わせを行う。
【０３３１】
［ステップＳ１０３］オペランドデータ待ち回路３６３は、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される拡張リネーミングレジスタ５６２に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路３６３は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップＳ１０４の処理が実行される。
【０３３２】
［ステップＳ１０４］オペランドデータ待ち回路３６３は、拡張オペランドデータ選択器５３２で選択するデータ読み出し元レジスタを、拡張リネーミングレジスタ５６２、拡張結果レジスタ５２４および拡張ロードレジスタ４６３の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ１０６の処理が実行される。
【０３３３】
［ステップＳ１０５］オペランドデータ待ち回路３６３は、拡張オペランドデータ選択器５３２で選択するデータ読み出し元レジスタを、拡張レジスタ６０２に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ１０６の処理が実行される。
【０３３４】
［ステップＳ１０６］オペランドデータ待ち回路３６３は、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
【０３３５】
［ステップＳ１０７］オペランドデータ待ち回路３６３は、基本オペランドデータ選択器５３１においてどの入力信号も選択しないように、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。
【０３３６】
［ステップＳ１０８］オペランドデータ待ち回路３６３は、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹをオンにする。
［ステップＳ１０９］発行エントリ選択回路３６４で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路３６３は、ステップＳ１０１〜Ｓ１０６の処理を再度実行する。
【０３３７】
また、ＲＳＦ３６０のエントリにおいて、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥがオン、信号ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥがオフ、信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥがオフ、信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥがオンである場合には、オペランドデータ待ち回路３６３は、図４３の処理を実行する。
【０３３８】
［ステップＳ１１１］オペランドデータ待ち回路３６３は、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲの値が有効であるかを判定する。有効な値が登録されている場合には、ステップＳ１１２の処理が実行され、有効な値が登録されていない場合には、ステップＳ１１５の処理が実行される。
【０３３９】
［ステップＳ１１２］オペランドデータ待ち回路３６３は、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される拡張リネーミングレジスタ５６２に対するオペランドデータの待ち合わせを行う。
【０３４０】
［ステップＳ１１３］オペランドデータ待ち回路３６３は、アドレスＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される拡張リネーミングレジスタ５６２に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路３６３は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップＳ１１４の処理が実行される。
【０３４１】
［ステップＳ１１４］オペランドデータ待ち回路３６３は、基本オペランドデータ選択器５３１で選択するデータ読み出し元レジスタを、拡張リネーミングレジスタ５６２、拡張結果レジスタ５２４および拡張ロードレジスタ４６３の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ１１６の処理が実行される。
【０３４２】
［ステップＳ１１５］オペランドデータ待ち回路３６３は、基本オペランドデータ選択器５３１で選択するデータ読み出し元レジスタを、拡張レジスタ６０２に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ１１６の処理が実行される。
【０３４３】
［ステップＳ１１６］オペランドデータ待ち回路３６３は、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
【０３４４】
［ステップＳ１１７］オペランドデータ待ち回路３６３は、拡張オペランドデータ選択器５３２においてどの入力信号も選択しないように、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。
【０３４５】
［ステップＳ１１８］オペランドデータ待ち回路３６３は、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹをオンにする。
［ステップＳ１１９］発行エントリ選択回路３６４で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路３６３は、ステップＳ１１１〜Ｓ１１６の処理を再度実行する。
【０３４６】
ＲＳＦ３６０のエントリにおいて、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥがオフ、信号ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥがオン、信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥがオン、信号ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥがオフである場合には、オペランドデータ待ち回路３６３は、図４４の処理を実行する。
【０３４７】
［ステップＳ１２１］オペランドデータ待ち回路３６３は、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲの値が有効であるかを判定する。有効な値が登録されている場合には、ステップＳ１２２の処理が実行され、有効な値が登録されていない場合には、ステップＳ１２５の処理が実行される。
【０３４８】
［ステップＳ１２２］オペランドデータ待ち回路３６３は、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される基本リネーミングレジスタ５６１に対するオペランドデータの待ち合わせを行う。
【０３４９】
［ステップＳ１２３］オペランドデータ待ち回路３６３は、アドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲで示される基本リネーミングレジスタ５６１に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路３６３は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップＳ１２４の処理が実行される。
【０３５０】
［ステップＳ１２４］オペランドデータ待ち回路３６３は、拡張オペランドデータ選択器５３２で選択するデータ読み出し元レジスタを、基本リネーミングレジスタ５６１、基本結果レジスタ５２３および基本ロードレジスタ４６２の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ１２６の処理が実行される。
【０３５１】
［ステップＳ１２５］オペランドデータ待ち回路３６３は、拡張オペランドデータ選択器５３２で選択するデータ読み出し元レジスタを、基本レジスタ６０１に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。この後、ステップＳ１２６の処理が実行される。
【０３５２】
［ステップＳ１２６］オペランドデータ待ち回路３６３は、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
【０３５３】
［ステップＳ１２７］オペランドデータ待ち回路３６３は、基本オペランドデータ選択器５３１においてどの入力信号も選択しないように、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥの値を設定する。
【０３５４】
［ステップＳ１２８］オペランドデータ待ち回路３６３は、エントリ内の信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹをオンにする。
［ステップＳ１２９］発行エントリ選択回路３６４で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路３６３は、ステップＳ１２１〜Ｓ１２６の処理を再度実行する。
【０３５５】
なお、上記の図４０〜図４４では、第１番目のソースオペランドに関する処理について示したが、第２番目、第３番目のソースオペランドについても、同様の処理手順でデータの待ち合わせおよびエントリの更新を行うことが可能である。例えば、第２番目のソースオペランドに関する処理は、上記の図４０〜図４４に対して、制御信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥおよびアドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，Ｒ１＿ＲＥＧ＿ＡＤＲの代わりに、制御信号ＢＡＳＩＣ＿Ｒ２＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ２＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＩＮＧＡＴＥおよびアドレスＢＡＳＩＣ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ２＿ＦＵＢ＿ＡＤＲ，Ｒ２＿ＲＥＧ＿ＡＤＲを適用することで実現される。同様に、第３番目のソースオペランドに関する処理は、上記の図４０〜図４４に対して、制御信号ＢＡＳＩＣ＿Ｒ１＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ１＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥおよびアドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，Ｒ１＿ＲＥＧ＿ＡＤＲの代わりに、制御信号ＢＡＳＩＣ＿Ｒ３＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ３＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＩＮＧＡＴＥおよびアドレスＢＡＳＩＣ＿Ｒ３＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ３＿ＦＵＢ＿ＡＤＲ，Ｒ３＿ＲＥＧ＿ＡＤＲを適用することで実現される。
【０３５６】
図４５は、浮動小数点演算命令実行時のＳＩＭＤ演算器の入出力信号を示す図である。なお、図４５では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０３５７】
ＳＩＭＤ演算器５２０は、基本演算器５２１、拡張演算器５２２、基本結果レジスタ５２３、拡張結果レジスタ５２４、演算制御回路５２５およびラッチ回路５２６，５２７を備えている。また、基本演算器５２１および拡張演算器５２２には、３つのオペランドデータ選択部５３０ａ〜５３０ｃが接続されている。
【０３５８】
オペランドデータ選択部５３０ａは、命令コード内の１番目のソースオペランドに対応するオペランドデータを、ＲＳＦ３６０から指定されたレジスタから読み込み、基本演算器５２１および拡張演算器５２２にそれぞれ出力する。オペランドデータ選択部５３０ｂは、命令コード内の２番目のソースオペランドに対応するオペランドデータを、ＲＳＦ３６０から指定されたレジスタから読み込み、基本演算器５２１および拡張演算器５２２にそれぞれ出力する。オペランドデータ選択部５３０ｃは、命令コード内の３番目のソースオペランドに対応するオペランドデータを、ＲＳＦ３６０から指定されたレジスタから読み込み、基本演算器５２１および拡張演算器５２２にそれぞれ出力する。
【０３５９】
ＳＩＭＤ演算命令の実行時には、オペランドデータ選択部５３０ａ〜５３０ｃは、基本演算器５２１および拡張演算器５２２の両方に対してオペランドデータを出力する。一方、非ＳＩＭＤ演算命令の実行時には、オペランドデータ選択部５３０ａ〜５３０ｃは、基本演算器５２１および拡張演算器５２２のうち演算が実行される一方の演算器のみに対してオペランドデータを出力する。
【０３６０】
ここで、図４６は、オペランドデータ選択部の内部構成を示す図である。なお、オペランドデータ選択部５３０ａ〜５３０ｃは同じ構成を有しているため、ここではオペランドデータ選択部５３０ａについてのみ例示する。
【０３６１】
オペランドデータ選択部５３０ａは、基本オペランドデータ選択器５３１、拡張オペランドデータ選択器５３２およびラッチ回路５３３，５３４を備えている。基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２には、データ信号Ｂ＿Ｒ１＿ＦＰＲ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡ，ＦＬ＿ＲＲ＿ＢＡＳＩＣ，ＬＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ１＿ＦＰＲ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，ＦＬ＿ＲＲ＿ＥＸＴＥＮＤ，ＬＲ＿ＥＸＴＥＮＤが共通に入力される。
【０３６２】
データ信号Ｂ＿Ｒ１＿ＦＰＲ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡ，ＦＬ＿ＲＲ＿ＢＡＳＩＣ，ＬＲ＿ＢＡＳＩＣは、ＲＳＦ３６０からのエントリ発行時に、基本レジスタ６０１、基本リネーミングレジスタ５６１、基本結果レジスタ５２３、基本ロードレジスタ４６２からそれぞれ出力されたデータを示す。
【０３６３】
データ信号Ｂ＿Ｒ１＿ＦＰＲ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡ、ＦＬ＿ＲＲ＿ＥＸＴＥＮＤ，ＬＲ＿ＥＸＴＥＮＤは、ＲＳＦ３６０からのエントリ発行時に、拡張レジスタ６０２、拡張リネーミングレジスタ５６２、拡張結果レジスタ５２４、拡張ロードレジスタ４６３からそれぞれ出力されたデータを示す。
【０３６４】
Ｂサイクルにおいて、オペランドデータ選択部５３０ａには、上記のデータ信号がすべて入力される。基本オペランドデータ選択器５３１は、ＲＳＦ３６０から出力された選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＢＡＳＩＣに従って、基本オペランドデータ選択器５３１に入力されたデータ信号から１つを選択し、選択したデータ信号をラッチ回路５３３に出力する。出力されたデータ信号は、ラッチ回路５３３を介して、データ信号Ｘ＿ＦＬ＿ＯＲ１Ｒ＿ＢＡＳＩＣとして基本演算器５２１に出力される。また、拡張オペランドデータ選択器５３２は、ＲＳＦ３６０から出力された選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤに従って、拡張オペランドデータ選択器５３２に入力されたデータ信号から１つ選択し、選択したデータ信号をラッチ回路５３４に出力する。出力されたデータ信号は、ラッチ回路５３４を介して、データ信号Ｘ＿ＦＬ＿ＯＲ１Ｒ＿ＥＸＴＥＮＤとして拡張演算器５２２に出力される。
【０３６５】
なお、オペランドデータ選択部５３０ｂにおいては、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２には、データ信号Ｂ＿Ｒ１＿ＦＰＲ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＰＲ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡの代わりに、データ信号Ｂ＿Ｒ２＿ＦＰＲ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ２＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ２＿ＦＰＲ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ２＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡが入力される。また、データ信号の選択を指示する信号としては、選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤの代わりに、選択信号Ｂ＿Ｒ２＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，選択信号Ｂ＿Ｒ２＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤが入力される。選択されたデータ信号は、Ｘ＿ＦＬ＿ＯＲ２Ｒ＿ＢＡＳＩＣ，Ｘ＿ＦＬ＿ＯＲ２Ｒ＿ＥＸＴＥＮＤとして、それぞれ基本演算器５２１および拡張演算器５２２に出力される。
【０３６６】
また、オペランドデータ選択部５３０ｃにおいては、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２には、データ信号Ｂ＿Ｒ１＿ＦＰＲ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＰＲ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ１＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡの代わりに、データ信号Ｂ＿Ｒ３＿ＦＰＲ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ３＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ３＿ＦＰＲ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ３＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡが入力される。また、データ信号の選択を指示する信号としては、選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤの代わりに、選択信号Ｂ＿Ｒ３＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，選択信号Ｂ＿Ｒ３＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤが入力される。選択されたデータ信号は、Ｘ＿ＦＬ＿ＯＲ３Ｒ＿ＢＡＳＩＣ，Ｘ＿ＦＬ＿ＯＲ３Ｒ＿ＥＸＴＥＮＤとして、それぞれ基本演算器５２１および拡張演算器５２２に出力される。
【０３６７】
以下、図４５に戻って説明する。
Ｘ１サイクルにおいて、ラッチ回路５２６には、ＲＳＦ３６０から、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｂ＿ＦＬ＿ＯＰＣ、アドレス信号Ｂ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ、およびエントリ識別信号Ｂ＿ＦＬ＿ＩＩＤが入力される。これらの信号は、ラッチ回路５２６から演算制御回路５２５に入力される。
【０３６８】
演算制御回路５２５は、制御信号Ｂ＿ＦＬ＿ＯＰＣに基づいて、演算器に実行させる演算の種類を特定する。そして、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣがオンであれば、特定した演算の実行を基本演算器５２１に要求し、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤがオンであれば、特定した演算の実行を拡張演算器５２２に要求する。
【０３６９】
また、演算制御回路５２５は、演算の実行要求を発行した後、Ｘ６サイクルにおいて、演算が完了したことを示す制御信号Ｘ＿ＦＬ＿ＣＯＭＰと、エントリ識別信号Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤとを、ＣＳＥ４００に対して出力する。なお、エントリ識別信号Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤの出力値は、ＲＳＦ３６０から入力されたエントリ識別信号Ｂ＿ＦＬ＿ＩＩＤと同じである。
【０３７０】
基本演算器５２１は、演算制御回路５２５からの要求に応じて、オペランドデータ選択部５３０ａ〜５３０ｃからのオペランドデータを用いて演算を行い、Ｘ６サイクルにおいて、演算結果を基本結果レジスタ５２３に出力する。拡張演算器５２２は、演算制御回路５２５からの要求に応じて、オペランドデータ選択部５３０ａ〜５３０ｃからのオペランドデータを用いて演算を行い、Ｘ６サイクルにおいて、演算結果を拡張結果レジスタ５２４に出力する。基本結果レジスタ５２３および拡張結果レジスタ５２４にそれぞれ格納された演算結果は、Ｕサイクルにおいて、それぞれデータ信号ＦＬ＿ＲＲ＿ＢＡＳＩＣ，ＦＬ＿ＲＲ＿ＥＸＴＥＮＤとして浮動小数点リネーミングレジスタ５６０に出力される。
【０３７１】
ＳＩＭＤ演算命令の実行時には、基本演算器５２１および拡張演算器５２２の両方において演算が実行され、演算結果が基本結果レジスタ５２３および拡張結果レジスタ５２４に対して、それぞれ同じタイミングで格納される。一方、非ＳＩＭＤ演算命令の実行時には、基本演算器５２１または拡張演算器５２２のいずれか一方において演算が実行され、演算結果も基本結果レジスタ５２３または拡張結果レジスタ５２４のいずれか一方に格納される。
【０３７２】
また、演算制御回路５２５は、Ｘ６サイクルにおいて、ＲＳＦ３６０からの制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤ、アドレス信号Ｂ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤを、それぞれ制御信号Ｕ＿ＦＬ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣ，Ｕ＿ＦＬ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤ、アドレス信号Ｕ＿ＦＬ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｕ＿ＦＬ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとして出力する。これらの制御信号およびアドレス信号の出力タイミングは、ラッチ回路５２７により、基本結果レジスタ５２３および拡張結果レジスタ５２４からのデータ出力タイミングと一致するように調整される。そして、これらの制御信号およびアドレス信号は、浮動小数点リネーミングレジスタ５６０に出力される。
【０３７３】
図４７は、浮動小数点演算命令実行時の浮動小数点リネーミングレジスタの入出力信号を示す図である。なお、図４７では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０３７４】
Ｂサイクルにおいて、読み出し回路５６５は、ＲＳＦ３６０から出力されたアドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣにそれぞれ対応するデータを基本リネーミングレジスタ５６１から読み出す。アドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣに対応するデータは、それぞれデータ信号Ｂ＿Ｒ１＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ２＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ３＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡとして、オペランドデータ選択部５３０ａ〜５３０ｃに出力される。
【０３７５】
また、Ｂサイクルにおいて、読み出し回路５６６は、ＲＳＦ３６０から出力されたアドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤにそれぞれ対応するデータを拡張リネーミングレジスタ５６２から読み出す。アドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ２＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤ，Ｂ＿Ｒ３＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤに対応するデータは、それぞれデータ信号Ｂ＿Ｒ１＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ２＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ３＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡとして、オペランドデータ選択部５３０ａ〜５３０ｃに出力される。
【０３７６】
また、Ｕサイクルにおいて、書き込み回路５６３は、制御信号Ｕ＿ＦＬ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣがオンである場合に、アドレス信号Ｕ＿ＦＬ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣにより指定される基本リネーミングレジスタ５６１のアドレスに対して、基本結果レジスタ５２３からのデータ信号ＦＬ＿ＲＲ＿ＢＡＳＩＣを格納する。制御信号Ｕ＿ＦＬ＿ＦＵＢ＿ＷＲ＿ＢＡＳＩＣ、アドレス信号Ｕ＿ＦＬ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣは、ともにＳＩＭＤ演算器５２０から出力される。
【０３７７】
また、Ｕサイクルにおいて、書き込み回路５６４は、制御信号Ｕ＿ＦＬ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤがオンである場合に、アドレス信号Ｕ＿ＦＬ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤにより指定される拡張リネーミングレジスタ５６２のアドレスに対して、拡張結果レジスタ５２４からのデータ信号ＦＬ＿ＲＲ＿ＥＸＴＥＮＤを格納する。制御信号Ｕ＿ＦＬ＿ＦＵＢ＿ＷＲ＿ＥＸＴＥＮＤ、アドレス信号Ｕ＿ＦＬ＿ＤＳＴ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは、ともにＳＩＭＤ演算器５２０から出力される。
【０３７８】
また、Ｗサイクルにおいて、読み出し回路５６５は、ＣＳＥ４００からのアドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣにより指定される基本リネーミングレジスタ５６１のアドレスから演算結果を読み出し、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡとして浮動小数点ＳＩＭＤレジスタ６００に出力する。また、読み出し回路５６６は、ＣＳＥ４００からのアドレス信号Ｗ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤにより指定される拡張リネーミングレジスタ５６２のアドレスから演算結果を読み出し、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡとして浮動小数点ＳＩＭＤレジスタ６００に出力する。
【０３７９】
図４８は、浮動小数点演算命令実行時の浮動小数点ＳＩＭＤレジスタの入出力信号を示す図である。なお、図４８では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０３８０】
Ｂサイクルにおいて、読み出し回路６０５，６０６は、ＲＳＦ３６０から出力されたアドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ３＿ＦＰＲ＿ＡＤＲにそれぞれ対応するデータを、基本レジスタ６０１および拡張レジスタ６０２からそれぞれ読み出す。読み出し回路６０５は、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ３＿ＦＰＲ＿ＡＤＲに対応するデータを、それぞれデータ信号Ｂ＿Ｒ１＿ＦＰＲ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ２＿ＦＰＲ＿ＢＡＳＩＣ＿ＤＡＴＡ，Ｂ＿Ｒ３＿ＦＰＲ＿ＢＡＳＩＣ＿ＤＡＴＡとして、オペランドデータ選択部５３０ａ〜５３０ｃに出力する。また、読み出し回路６０６は、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｂ＿Ｒ３＿ＦＰＲ＿ＡＤＲに対応するデータを、それぞれデータ信号Ｂ＿Ｒ１＿ＦＰＲ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ２＿ＦＰＲ＿ＥＸＴＥＮＤ＿ＤＡＴＡ，Ｂ＿Ｒ３＿ＦＰＲ＿ＥＸＴＥＮＤ＿ＤＡＴＡとして、オペランドデータ選択部５３０ａ〜５３０ｃに出力する。
【０３８１】
なお、上記構成では、非ＳＩＭＤ演算命令の実行時において、例えば、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲにより読み出しアドレスが指定された場合、読み出し回路６０５，６０６の両方からデータがオペランドデータ選択部５３０ａ〜５３０ｃに出力される。しかし、非ＳＩＭＤ演算命令の実行時には、オペランドデータ選択部５３０ａ〜５３０ｃ内の基本オペランドデータ選択器５３１または拡張オペランドデータ選択器５３２のいずれか一方でしか入力データの選択を行わない。従って、読み出し回路６０５，６０６のうちの一方から読み出されたデータのみが、演算に使用される。
【０３８２】
また、Ｗサイクルにおいて、浮動小数点ＳＩＭＤレジスタ６００では、演算結果の格納が行われる。書き込み回路６０３は、制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＢＡＳＩＣがオンである場合に、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲにより指定される基本レジスタ６０１のアドレスに対して、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＢＡＳＩＣ＿ＤＡＴＡを格納する。また、書き込み回路６０４は、制御信号Ｗ＿ＦＰＲ＿ＷＲ＿ＥＸＴＥＮＤがオンである場合に、アドレス信号Ｗ＿ＦＰＲ＿ＡＤＲにより指定される拡張レジスタ６０２のアドレスに対して、データ信号Ｗ＿ＦＰＲ＿ＦＵＢ＿ＥＸＴＥＮＤ＿ＤＡＴＡを格納する。
【０３８３】
図４９は、ＳＩＭＤ演算命令実行時の演算結果の格納動作を説明する図である。また、図５０は、非ＳＩＭＤ演算命令実行時の演算結果の格納動作を説明する図である。
前述のように、ＳＩＭＤ演算命令の実行時では、基本演算器５２１および拡張演算器５２２の両方によって並列に演算が実行され、演算結果がそれぞれ基本結果レジスタ５２３および拡張結果レジスタ５２４に格納される。基本演算器５２１から基本結果レジスタ５２３へのデータ格納タイミングと、拡張演算器５２２から拡張結果レジスタ５２４へのデータ格納タイミングは、同じである。このため、浮動小数点演算命令の実行時においては、前述の浮動小数点ロード命令の実行時とは異なり、演算結果格納が完了したか否かを基本演算器５２１および拡張演算器５２２について個別に判定する必要がない。
【０３８４】
従って、ＣＳＥ４００の完了判定回路４０６は、ＳＩＭＤ演算命令／非ＳＩＭＤ演算命令のいずれの実行時でも、ＳＩＭＤ演算器５２０から制御信号Ｘ＿ＦＬ＿ＣＯＭＰが入力されると、命令の実行が完了したと判定する。そして、次のＷサイクルにおいて、浮動小数点リネーミングレジスタ５６０に格納された演算結果を、浮動小数点ＳＩＭＤレジスタ６００に対して転送させる。
【０３８５】
ＳＩＭＤ演算命令が実行された場合のＷサイクルにおいて、ＣＳＥ４００の信号出力回路４０７は、アドレスＢＡＳＩＣ＿ＲＤ＿ＡＤＲ、ＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲの値を、それぞれ基本リネーミングレジスタ５６１、拡張リネーミングレジスタ５６２に出力する。そして、出力したアドレスからのデータの読み出しを要求する。また、信号出力回路４０７は、アドレスＷＲ＿ＡＤＲの値を基本レジスタ６０１および拡張レジスタ６０２に出力する。これとともに、信号ＢＡＳＩＣ＿ＷＲ，ＥＸＴＥＮＤ＿ＷＲの値をそれぞれ基本レジスタ６０１および拡張レジスタ６０２に出力して、データの格納を要求する。これにより、基本レジスタ６０１および拡張レジスタ６０２における同じアドレスに対して、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２からの演算結果がそれぞれ格納される。
【０３８６】
一方、非ＳＩＭＤ演算命令の実行時には、ＣＳＥ４００のエントリにおいて、信号ＢＡＳＩＣ＿ＷＲ，ＥＸＴＥＮＤ＿ＷＲのいずれか一方がオンになり、アドレスＢＡＳＩＣ＿ＲＤ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲのいずれか一方にリネーミングレジスタのアドレスが登録される。
【０３８７】
図５０の例では、信号ＢＡＳＩＣ＿ＷＲ，ＥＸＴＥＮＤ＿ＷＲのうち信号ＥＸＴＥＮＤ＿ＷＲのみがオンである。この場合、Ｗサイクルにおいて、信号出力回路４０７は、アドレスＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲの値を拡張リネーミングレジスタ５６２に出力し、出力したアドレスからのデータの読み出しを要求する。また、信号出力回路４０７は、アドレスＷＲ＿ＡＤＲの値を拡張レジスタ６０２に出力するとともに、信号ＥＸＴＥＮＤ＿ＷＲの値を拡張レジスタ６０２に出力して、データの格納を要求する。これにより、拡張レジスタ６０２に対してのみ、拡張リネーミングレジスタ５６２からの演算結果が格納される。
【０３８８】
以上説明した浮動小数点演算命令の実行時の処理では、ＳＩＭＤ演算命令の実行時には、演算結果の書き込み先として同じアドレスを有する基本レジスタ６０１および拡張レジスタ６０２が使用される。一方、非ＳＩＭＤ演算命令の実行時には、演算結果の書き込み先として、基本レジスタ６０１および拡張レジスタ６０２のうち任意のレジスタを使用可能になる。このため、浮動小数点ＳＩＭＤレジスタ６００内のレジスタの使用効率が向上する。また、非ＳＩＭＤ演算命令の実行時には、演算結果の書き込み先としてＳＩＭＤ演算命令の実行時の２倍のレジスタを指定することが可能になる。
【０３８９】
さらに、基本レジスタ６０１および拡張レジスタ６０２に対しては、前述の浮動小数点デコードの実行時と同じ手法により、リネーミングレジスタを割り当てることができる。このため、ＳＩＭＤ命令／非ＳＩＭＤ命令が混在するプログラムが実行された場合でも、浮動小数点リネーミングレジスタ５６０内のレジスタを無駄なく効率的に使用できる。また、浮動小数点リネーミングレジスタ５６０内のレジスタ数を抑制することもできる。
【０３９０】
また、浮動小数点演算命令の実行時には、オペランドデータの読み込み元として、浮動小数点ＳＩＭＤレジスタ６００を指定することができる。ＳＩＭＤ演算命令の実行時には、オペランドデータの読み込み元として、同じアドレスを有する基本レジスタ６０１および拡張レジスタ６０２からそれぞれオペランドデータが読み込まれ、それぞれのオペランドデータを用いて並列の演算が行われる。
【０３９１】
また、基本レジスタ６０１および拡張レジスタ６０２の指定されたアドレスに対するリネーミングレジスタが有効である場合には、オペランドデータをリネーミングレジスタから読み込むこともできる。このとき、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２のアドレスは異なる場合がある。このため、ＲＳＦ３６０に対して、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２のアドレスを個別に登録する。そして、登録されたアドレスを基にオペランドデータの読み出し元を選択することで、リネーミングレジスタからオペランドデータを正確に読み込むことが可能になる。
【０３９２】
一方、非ＳＩＭＤ演算命令の実行時には、オペランドデータの読み込み元として、基本レジスタ６０１または拡張レジスタ６０２の中の１つのレジスタを指定することができる。また、指定されたレジスタに対するリネーミングレジスタが有効である場合には、オペランドデータをリネーミングレジスタから読み込むことができる。
【０３９３】
このような構成により、ＳＩＭＤ演算命令、非ＳＩＭＤ演算命令のどちらの実行時にも、浮動小数点ＳＩＭＤレジスタ６００内および浮動小数点リネーミングレジスタ５６０内の８バイト単位のレジスタを指定して、オペランドデータを読み込むことが可能になる。従って、浮動小数点ＳＩＭＤレジスタ６００内および浮動小数点リネーミングレジスタ５６０内のレジスタの使用効率が高められる。
【０３９４】
〔浮動小数点ストア命令実行時の処理〕
浮動小数点ストア命令がデコードされると、ＣＰＵコア１１１は、ソースオペランドで指定されるレジスタからストアデータを読み込み、ディスティネーションオペランドで指定されるメインメモリのアドレスに対してストアデータをストアするように制御する。浮動小数点ストアのＳＩＭＤ命令（以下、ＳＩＭＤストア命令と呼ぶ）の命令コードは、例えば、“Simd-store %f100 [address]”と記述される。この命令では、ソースオペランドである“%f100”で指定されるレジスタから２つの８バイトのストアデータを読み込み、ディスティネーションオペランドである“[address]”で指定されるメインメモリのアドレスに対して２つのストアデータをストアすることが要求される。
【０３９５】
一方、浮動小数点ストアの非ＳＩＭＤ命令（以下、非ＳＩＭＤストア命令と呼ぶ）の命令コードは、オペコードが異なること以外は上記と同じ形式で記述される。この命令では、ソースオペランドで指定されるレジスタから１つの８バイトのストアデータを読み込み、そのストアデータを、ディスティネーションオペランドで指定されるメインメモリのアドレスに対してストアすることが要求される。
【０３９６】
ソースオペランドでは、例えば、浮動小数点ＳＩＭＤレジスタ６００のアドレスが指定される。また、本実施の形態では、例として、ディスティネーションオペランドは固定小数点レジスタ５８０のアドレスにより指定されるものとする。すなわち、ディスティネーションオペランドで指定された固定小数点レジスタ５８０からオペランドデータが読み込まれ、このオペランドデータを基に、ストア先のアドレスが生成される。
【０３９７】
図５１は、ＣＰＵコアにおいて浮動小数点ストア命令実行時に動作する構成要素を示す図である。
命令デコーダ２８０は、浮動小数点ストア命令をデコードすると、ＣＳＥ４００、ＲＳＡ３２０およびＲＳＦ３６０に対してエントリを登録する。また、ストアアドレスに対応するオペランドデータが保持された固定小数点レジスタ５８０にリネーミングレジスタが割り当てられる場合には、そのアドレスが固定小数点レジスタリネーミングマップ３０３から読み出され、ＲＳＡ３２０に登録される。一方、ストアデータが保持された浮動小数点ＳＩＭＤレジスタ６００にリネーミングレジスタが割り当てられる場合には、そのアドレスが基本レジスタリネーミングマップ３０１または拡張レジスタリネーミングマップ３０２から読み出され、ＲＳＦ３６０に登録される。
【０３９８】
ストアアドレスは、ＲＳＡ３２０から発行されるエントリを基に生成される。浮動小数点ストア命令に対応するエントリがＲＳＡ３２０から発行されると、オペランドデータ選択部４３０によりストアアドレスに対応するオペランドデータが選択され、選択されたオペランドデータがオペランドアドレス生成器４４０に供給される。オペランドアドレス生成器４４０は、供給されたオペランドデータを基にストアアドレスを生成し、ストアバッファ部４８０のエントリに登録する。なお、オペランドデータ選択部４３０は、オペランドデータを固定小数点レジスタ５８０または固定小数点リネーミングレジスタ５４０から読み込むことが可能である。
【０３９９】
一方、ストアデータは、ＲＳＦ３６０から発行されるエントリを基に取得される。浮動小数点ストア命令に対応するエントリがＲＳＦ３６０から発行されると、基本オペランドデータ選択器５３１または拡張オペランドデータ選択器５３２の少なくとも一方により、ストアデータが選択される。基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２により選択されるデータは、現在実行されている、あるいはすでに実行が完了した命令に応じて得られたデータである。
【０４００】
図５１では、ストアデータの読み出し元として、基本レジスタ６０１、拡張レジスタ６０２、基本リネーミングレジスタ５６１および拡張リネーミングレジスタ５６２を例示している。しかしながら、この他に例えば、基本ロードレジスタ４６２および拡張ロードレジスタ４６３などからストアデータを読み出すことが可能であってもよい。
【０４０１】
ＳＩＭＤ演算器５２０は、前述の構成の他に、基本ストアデータレジスタ５３５、拡張ストアデータレジスタ５３６およびストアデータ選択器５３７を備えている。基本オペランドデータ選択器５３１により選択されたストアデータは、基本演算器５２１およびストアデータ選択器５３７を介して、基本ストアデータレジスタ５３５に一時的に格納される。一方、拡張オペランドデータ選択器５３２により選択されたストアデータは、拡張演算器５２２を介して拡張ストアデータレジスタ５３６に一時的に格納される。また、拡張オペランドデータ選択器５３２により選択されたストアデータを、ストアデータ選択器５３７を介して基本ストアデータレジスタ５３５に一時的に格納することもできる。基本ストアデータレジスタ５３５および拡張ストアデータレジスタ５３６にそれぞれ格納されたストアデータは、ストアバッファ部４８０のエントリに登録される。
【０４０２】
ストアアドレスとストアデータとがストアバッファ部４８０のエントリに登録され、ストア命令が完了すると、ストアバッファ部４８０は、ストアアドレスおよびストアデータを１次データキャッシュ部４６０に受け渡し、ストアデータのストアを要求する。１次データキャッシュ部４６０は、ストアデータを保持するとともに、ストアデータが、２次データキャッシュを介してメインメモリにストアされるように制御する。
【０４０３】
図５２は、浮動小数点ストア命令実行時のパイプラインを示す図である。
浮動小数点ストア命令実行時では、命令デコードサイクルであるＤサイクルの実行後、ストアアドレス生成を行うサイクルであるＰ１，Ｂ１，Ａ，ＦＴ，ＦＭ，ＦＢ，ＦＲサイクルと、ストアデータ読み出しを行うサイクルであるＰ２，Ｂ２，Ｘサイクルとが並列に実行される。ストアアドレスが生成され、かつストアデータが読み出されると、命令完了サイクルであるＣサイクル、ストアデータの書き込みサイクルであるＷサイクルが順次実行される。
【０４０４】
なお、図５２に示したパイプラインの例では、サイクルＰ１とサイクルＰ２、サイクルＢ１とサイクルＢ２、サイクルＡとサイクルＸとが、それぞれ同じタイミングで実行されているが、実際にはこのような実行タイミングとならなくてもよい。すなわち、Ｃサイクルに遷移するまでに、Ｐ１，Ｂ１，Ａ，ＦＴ，ＦＭ，ＦＢ，ＦＲサイクルと、Ｐ２，Ｂ２，Ｘサイクルとがそれぞれ完了されればよい。
【０４０５】
図５３，図５４は、ＳＩＭＤストア命令実行時のパイプラインを説明する図である。
Ｄサイクルでは、命令デコーダ２８０により浮動小数点ストア命令がデコードされ、そのデコード結果に基づき、ＣＳＥ４００へのエントリ登録処理（ステップＳ１３１）、ＲＳＡ３２０へのエントリ登録処理（ステップＳ１３２）、およびＲＳＦ３６０へのエントリ登録処理（ステップＳ１３３）が実行される。
【０４０６】
命令デコーダ２８０は、ストアアドレスの生成に必要な情報をＲＳＡ３２０に登録する。例えば、命令デコーダ２８０は、ディスティネーションオペランドで指定された固定小数点レジスタ５８０のアドレスを、ＲＳＡ３２０のエントリに登録する。
【０４０７】
また、命令デコーダ２８０から出力された固定小数点レジスタ５８０のアドレスに対して固定小数点リネーミングレジスタ５４０が割り当てられていた場合、その固定小数点リネーミングレジスタ５４０のアドレスが、固定小数点レジスタリネーミングマップ３０３から出力される（ステップＳ１３４）。出力された固定小数点リネーミングレジスタ５４０のアドレスは、ＲＳＡ３２０のエントリに登録される。
【０４０８】
また、命令デコーダ２８０は、ストアデータの取得に必要な情報をＲＳＦ３６０に登録する。例えば、命令デコーダ２８０は、ソースオペランドで指定された、浮動小数点ＳＩＭＤレジスタ６００におけるオペランドデータの読み出しアドレスを、ＲＳＦ３６０のエントリに登録する。ＳＩＭＤストア命令の実行時には、１つのソースオペランドに対応するオペランドデータは、基本レジスタ６０１および拡張レジスタ６０２の両方から読み込まれる。
【０４０９】
また、浮動小数点ＳＩＭＤレジスタ６００におけるオペランドデータの読み出しアドレスに対して、リネーミングレジスタが割り当てられていた場合には、そのリネーミングレジスタのアドレスがリネーミングマップから出力される（ステップＳ１３５）。出力されたアドレスは、ＲＳＦ３６０に登録される。ＳＩＭＤストア命令がデコードされた場合、ソースオペランドで指定されるソースレジスタに対して、基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２の両方からアドレスが出力され、ＲＳＦ３６０に登録される。一方、非ＳＩＭＤストア命令がデコードされた場合には、ソースオペランドで指定されるソースアドレスに対して、基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２のいずれか一方からアドレスが出力される。
【０４１０】
以上のエントリ登録処理が終了した後、Ｐ１サイクルとＰ２サイクルとが並列に実行される。図５３では、Ｐ１サイクルが起動されたときの処理の流れを続けて記載しており、Ｐ２サイクルが起動されたときの処理の流れについては、図５４に記載している。
【０４１１】
Ｐ１サイクルでは、ＲＳＡ３２０におけるデータの待ち合わせ制御が行われる。前述のように、ＲＳＡ３２０は、登録されたエントリのうち、必要なデータが揃ったエントリの中で最も古いエントリを発行する。ＲＳＡ３２０からオペランドデータ選択部４３０に対して、浮動小数点ストア命令に対応するエントリが発行されると、Ｂ１サイクルに遷移する（ステップＳ１３６）。
【０４１２】
ＲＳＡ３２０からのエントリに基づくストアアドレスの発行動作手順は、基本的に、前述の浮動小数点ロード命令実行時におけるロードデータの読み出しアドレス生成動作と同じである。Ｂ１サイクルにおいて、オペランドデータ選択部４３０は、ＲＳＡ３２０から発行されたエントリの内容に基づき、オペランドデータを固定小数点レジスタ５８０または固定小数点リネーミングレジスタ５４０から読み込み、オペランドアドレス生成器４４０に出力する（ステップＳ１３７）。次のＡサイクルにおいて、オペランドアドレス生成器４４０は、オペランドデータ選択部４３０から出力されたオペランドデータに基づき、ストアデータの書き込み先を示すストアアドレスを生成する。生成されたストアアドレスは、ストアバッファ部４８０に出力される（ステップＳ１３８）。
【０４１３】
ＦＴ，ＦＭ，ＦＢ，ＦＲサイクルでは、ストアバッファ部４８０において、その内部のストアバッファ４８１に対してストアアドレスを格納する処理が実行される。これらのサイクルのうち最後のＦＲサイクルでは、ストアバッファ４８１に対してストアアドレスが格納されるとともに、ストアバッファ部４８０からＣＳＥ４００に対して、ストアアドレス格納が完了したことが報告される（ステップＳ１３９）。
【０４１４】
一方、Ｐ２サイクルでは、ＲＳＦ３６０におけるデータの待ち合わせ制御が行われる。前述のように、ＲＳＦ３６０は、登録されたエントリのうち、必要なデータが揃ったエントリの中で最も古いエントリを発行する。ＲＳＦ３６０からＳＩＭＤ演算器５２０に対して、浮動小数点ストア命令に対応するエントリが発行されると、Ｂ２サイクルに遷移する（ステップＳ１４０）。
【０４１５】
Ｂ２サイクルでは、ＳＩＭＤ演算器５２０の基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２により、ストアデータが選択される（ステップＳ１４１）。ＳＩＭＤ演算命令の実行時には、基本オペランドデータ選択器５３１および拡張オペランドデータ選択器５３２の両方によりストアデータが選択され、選択されたデータはそれぞれ基本演算器５２１および拡張演算器５２２に対して供給される。
【０４１６】
次のＸサイクルでは、ストアデータが演算器から出力され、後段のストアデータレジスタに一時的に格納される（ステップＳ１４２）。ＳＩＭＤストア命令の実行時には、基本演算器５２１および拡張演算器５２２の両方からストアデータが出力される。基本演算器５２１からのストアデータは基本ストアデータレジスタ５３５に格納され、拡張演算器５２２からのストアデータは拡張ストアデータレジスタ５３６に格納される。図５２では、基本ストアデータレジスタ５３５および拡張ストアデータレジスタ５３６にそれぞれ格納される８バイトデータを、“Ｘ（８Ｂ）”“Ｙ（８Ｂ）”と表している。なお、基本演算器５２１および拡張演算器５２２は、演算処理を行わず、入力信号をそのまま出力する。また、Ｘサイクルでは、ＳＩＭＤ演算器５２０からＣＳＥ４００に対して、ストアデータの出力が完了したことが報告される（ステップＳ１４３）。
【０４１７】
また、基本ストアデータレジスタ５３５および拡張ストアデータレジスタ５３６にストアデータが格納されたサイクルの次のサイクルで、ストアバッファ４８１のエントリに対して、基本ストアデータレジスタ５３５および拡張ストアデータレジスタ５３６に格納されたストアデータが格納される（ステップＳ１４４）。ＳＩＭＤストア命令の実行時には、基本ストアデータレジスタ５３５および拡張ストアデータレジスタ５３６にそれぞれ格納された２つの８バイトデータが、ストアバッファ４８１に格納される。
【０４１８】
ＦＲサイクルにおいて、ストアバッファ部４８０からＣＳＥ４００に対してストアアドレス格納が完了したことが報告され、なおかつ、Ｘサイクルにおいて、ＳＩＭＤ演算器５２０からＣＳＥ４００に対してストアデータ格納が完了したことが報告されると、Ｃサイクルに遷移する。Ｃサイクルでは、ＣＳＥ４００は、浮動小数点ストア命令が完了したと判定する（ステップＳ１４５）。
【０４１９】
次のＷサイクルでは、ＣＳＥ４００の制御の下で、ストアバッファ４８１のストアアドレスおよびストアデータが１次データキャッシュ部４６０に出力され、ストアデータのストアが要求される（ステップＳ１４６）。１次データキャッシュ部４６０は、入力されたストアデータを、ストアアドレスに対応する１次データキャッシュ４６１内の領域に格納する。これとともに、１次データキャッシュ部４６０は、２次データキャッシュを介して、入力されたストアアドレスに対応するメインメモリのメモリ領域に、ストアデータが格納されるように制御する。
【０４２０】
図５５，図５６は、非ＳＩＭＤストア命令実行時のパイプラインを説明する図である。これらの図を用いて、ＳＩＭＤストア命令実行時との動作の違いについて説明する。
非ＳＩＭＤストア命令では、ソースオペランドで指定されるストアデータの読み出し元レジスタとして、基本レジスタ６０１または拡張レジスタ６０２のいずれか一方が指定される。そして、Ｄサイクルでは、指定された基本レジスタ６０１または拡張レジスタ６０２のアドレスに対してリネーミングレジスタが割り当てられる場合には、割り当てられたリネーミングレジスタのアドレスが、基本レジスタリネーミングマップ３０１または拡張レジスタリネーミングマップ３０２のいずれか一方から読み出され、ＲＳＦ３６０に登録される。
【０４２１】
Ｂ２サイクルでは、ＲＳＦ３６０から発行されるエントリに基づき、基本オペランドデータ選択器５３１または拡張オペランドデータ選択器５３２のいずれか一方により、ストアデータが選択される。非ＳＩＭＤストア命令実行時には、前述の非ＳＩＭＤ演算命令実行時と同様に、基本オペランドデータ選択器５３１または拡張オペランドデータ選択器５３２のどちらでも、基本バス側および拡張バス側のどちらのレジスタからストアデータを読み込み可能としてもよい。ただし、本実施の形態では、制御を簡単にするために、ストアデータの読み出し元のレジスタに応じて、基本オペランドデータ選択器５３１または拡張オペランドデータ選択器５３２のどちらを使用するかが決定される構成とする。さらに、本実施の形態では、基本オペランドデータ選択器５３１または拡張オペランドデータ選択器５３２のどちらが使用された場合でも、選択されたオペランドデータは基本ストアデータレジスタ５３５に一旦格納されるものとする。
【０４２２】
本実施の形態では、ストアデータの読み出し元が基本バス側のレジスタである場合には、基本オペランドデータ選択器５３１によってストアデータが選択される。選択されたストアデータは、基本演算器５２１を介して基本ストアデータレジスタ５３５に格納される。このとき、ＣＳＥ４００に対して、ストアデータの出力が完了したことが報告される。
【０４２３】
一方、ストアデータの読み出し元が拡張バス側のレジスタである場合には、拡張オペランドデータ選択器５３２によってストアデータが選択され、選択されたストアデータが拡張演算器５２２に出力される。また、拡張演算器５２２から出力されたストアデータは、ストアデータ選択器５３７を介して基本ストアデータレジスタ５３５に格納される。このとき、ＣＳＥ４００に対して、ストアデータの出力が完了したことが報告される。このように、非ＳＩＭＤストア命令実行時には、拡張ストアデータレジスタ５３６は使用されない。
【０４２４】
基本ストアデータレジスタ５３５に格納された８バイトのストアデータは、基本ストアデータレジスタ５３５に格納された次のサイクルにおいて、ストアバッファ４８１に格納される。さらに、ＣサイクルでＣＳＥ４００により命令の完了が判定された後、Ｗサイクルにおいて、ストアバッファ４８１に格納されたストアデータは、１次データキャッシュ部４６０に出力される。
【０４２５】
上記の処理では、浮動小数点演算命令の場合と同様に、ＳＩＭＤストア命令実行時には、ストアデータの読み出し元レジスタとして、同じアドレスを有する基本レジスタ６０１および拡張レジスタ６０２がセットで指定される。また、非ＳＩＭＤストア命令実行時には、ストアデータの読み出し元レジスタとして、基本レジスタ６０１および拡張レジスタ６０２の中の任意のレジスタが指定されるので、プログラムの自由度が高められる。また、非ＳＩＭＤストア命令実行時には、浮動小数点ＳＩＭＤレジスタ６００内のレジスタは、８バイト単位の独立したレジスタとして取り扱われるので、浮動小数点ＳＩＭＤレジスタ６００内のレジスタ使用効率が向上する。
【０４２６】
さらに、ストアデータの読み出し元レジスタに対してリネーミングレジスタが割り当てられる場合には、ストアデータを浮動小数点リネーミングレジスタ５６０から読み出すことができるため、ストア処理の速度を高速化できる。また、浮動小数点リネーミングレジスタ５６０内のレジスタについても、８バイト単位の独立したレジスタとして取り扱われるので、浮動小数点リネーミングレジスタ５６０内のレジスタ使用効率が向上する。
【０４２７】
次に、浮動小数点ストア命令実行時に動作する各ブロックの詳細な構成を示すとともに、それらのブロック間での信号の流れについて説明する。
図５７は、浮動小数点ストア命令実行時の命令デコーダの出力信号を示す図である。
【０４２８】
図５７は、浮動小数点ストア命令実行時の命令デコーダの出力信号を示す図である。
図５７では、浮動小数点ストア命令実行時のＤサイクルにおいて出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
命令デコーダ２８０は、前述した命令デコード回路２８１、制御信号生成回路２８２およびＣＳＥ割り当て回路２８５に加えて、ストアバッファ割り当て回路２８６を備えている。
【０４２９】
命令デコード回路２８１は、浮動小数点ストア命令をデコードすると、浮動小数点ストア命令であることを示す制御信号Ｄ＿ＳＴをオンにする。制御信号Ｄ＿ＳＴは、ＣＳＥ４００、ＲＳＡ３２０およびＲＳＦ３６０に出力される。
【０４３０】
また、命令デコード回路２８１は、ディスティネーションオペランドの値に基づいて、ストアアドレスの読み出し元アドレスを示すアドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲを、固定小数点レジスタリネーミングマップ３０３およびＲＳＡ３２０に対して出力する。
【０４３１】
また、命令デコード回路２８１は、ソースオペランドの値に基づいて、ストアデータの読み出し元アドレスを示すアドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲを、基本レジスタリネーミングマップ３０１、拡張レジスタリネーミングマップ３０２、ＲＳＦ３６０および制御信号生成回路２８２に出力する。また、命令デコード回路２８１は、ストアデータを基本バス側のレジスタから読み出すか否か、拡張バス側のレジスタから読み出すか否かをそれぞれ示す制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤを、ＲＳＦ３６０に対して出力する。なお、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲおよび制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤの出力手順は、前述の浮動小数点演算命令実行時と同様である。
【０４３２】
また、命令デコード回路２８１は、ストアデータの読み出し元として基本レジスタ６０１および拡張レジスタ６０２がそれぞれ指定されたか否かを示す制御信号Ｄ＿ＵＳＥ２＿ＢＡＳＩＣ，Ｄ＿ＵＳＥ２＿ＥＸＴＥＮＤを、制御信号生成回路２８２に対して出力する。命令デコード回路２８１は、ＳＩＭＤストア命令をデコードした場合には、制御信号Ｄ＿ＵＳＥ２＿ＢＡＳＩＣ，Ｄ＿ＵＳＥ２＿ＥＸＴＥＮＤの両方をオンにする。
【０４３３】
また、命令デコード回路２８１は、非ＳＩＭＤストア命令をデコードした場合には、ソースオペランドで指定されたレジスタ番号が０〜１２７であれば、制御信号Ｄ＿ＵＳＥ２＿ＢＡＳＩＣをオンにし、制御信号Ｄ＿ＵＳＥ２＿ＥＸＴＥＮＤをオフにする。また、命令デコード回路２８１は、非ＳＩＭＤストア命令をデコードした場合には、ソースオペランドで指定されたレジスタ番号が１２８〜２５５であれば、制御信号Ｄ＿ＵＳＥ２＿ＢＡＳＩＣをオフにし、制御信号Ｄ＿ＵＳＥ２＿ＥＸＴＥＮＤの両方をオンにする。これとともに、ソースオペランドで指定されたレジスタ番号から“１２８”を減算し、減算したレジスタ番号に対応するアドレスを、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲとして出力する。
【０４３４】
制御信号生成回路２８２は、命令デコード回路２８１からアドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲおよび制御信号Ｄ＿ＳＴを受信すると、次の信号を出力する。
制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣは、ストアデータの出力に基本演算器５２１を使用するか否かを示す信号であり、制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤは、ストアデータの出力に拡張演算器５２２を使用するか否かを示す信号である。制御信号Ｄ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤは、それぞれ制御信号Ｄ＿ＵＳＥ２＿ＢＡＳＩＣ，Ｄ＿ＵＳＥ２＿ＥＸＴＥＮＤと同じ値をとり、ＲＳＦ３６０に対して出力される。
【０４３５】
また、制御信号生成回路２８２は、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤを出力する。制御信号Ｄ＿ＵＳＥ２＿ＢＡＳＩＣ、Ｄ＿ＵＳＥ２＿ＥＸＴＥＮＤの両方がオンの場合には、制御信号ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤの両方がオンになる。また、制御信号Ｄ＿ＵＳＥ２＿ＢＡＳＩＣ，Ｄ＿ＵＳＥ２＿ＥＸＴＥＮＤの一方がオンの場合には、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣがオンになり、制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤがオフになる。制御信号Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤは、ＲＳＡ３２０とＣＳＥ４００に対して出力される。
【０４３６】
制御信号Ｄ＿ＥＵ＿ＵＳＥは、基本演算器５２１および拡張演算器５２２の少なくとも一方を使用するか否かを示す信号であり、ＣＳＥ４００に対して出力される。制御信号Ｄ＿ＲＥＬ＿ＲＳＦは、ＲＳＦ３６０に対してエントリの作成を要求する信号である。制御信号Ｄ＿ＲＥＬ＿ＲＳＡは、ＲＳＡ３２０に対してエントリの作成を要求する信号である。制御信号Ｄ＿ＲＥＬ＿ＣＳＥは、ＣＳＥ４００に対してエントリの作成を要求する信号であり、ＣＳＥ４００とともに、ＣＳＥ割り当て回路２８５に対しても出力される。
【０４３７】
ＣＳＥ割り当て回路２８５は、制御信号Ｄ＿ＲＥＬ＿ＣＳＥが出力されたとき、ＣＳＥ４００に登録するエントリを識別するエントリ識別信号Ｄ＿ＩＩＤを割り当てる。エントリ識別信号Ｄ＿ＩＩＤは、すべての命令のデコード順に割り当てられ、ＣＳＥ４００に出力される。
【０４３８】
ストアバッファ割り当て回路２８６は、制御信号Ｄ＿ＳＴが出力されたとき、ストアバッファ４８１に登録するエントリを識別するエントリ識別信号Ｄ＿ＳＴＢ＿ＩＤを割り当てる。エントリ識別信号Ｄ＿ＳＴＢ＿ＩＤは、ＲＳＡ３２０とＲＳＦ３６０に出力される。なお、本実施の形態では、例として、ストアバッファ４８１のエントリ数を８とする。従って、エントリ識別信号Ｄ＿ＳＴＢ＿ＩＤは３ビットの信号である。
【０４３９】
図５８は、浮動小数点ストア命令実行時のＣＳＥの入出力信号を示す図である。なお、図５８では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０４４０】
浮動小数点ストア命令の実行時のＤサイクルにおいて、エントリ生成回路４０２は、命令デコーダ２８０からの制御信号Ｄ＿ＳＴを受信すると、浮動小数点ストア命令に対応するエントリをエントリ記憶回路４０１に生成する。このとき、エントリ生成回路４０２には、浮動小数点ロード命令の実行時と同様に、制御信号Ｄ＿ＲＥＬ＿ＣＳＥ，Ｄ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤおよびエントリ識別信号Ｄ＿ＩＩＤが、命令デコーダ２８０から入力される。また、エントリ生成回路４０２には、命令デコーダ２８０からの制御信号Ｄ＿ＥＵ＿ＵＳＥも入力される。
【０４４１】
ロード／ストア実行完了受け付け回路４０３は、ＦＲサイクルにおいて、ストアバッファ部４８０から、制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤおよびエントリ識別信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＩＩＤを受信する。制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤは、ストアアドレスをストアバッファ４８１に格納したことを示す信号である。エントリ識別信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＩＩＤは、ストアアドレスの格納処理に対応するＣＳＥ４００のエントリを識別する信号である。
【０４４２】
また、演算実行完了エントリ選択回路４０４は、Ｘサイクルにおいて、ＳＩＭＤ演算器５２０から、制御信号Ｘ＿ＦＬ＿ＣＯＭＰおよびエントリ識別信号Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤを受信する。制御信号Ｘ＿ＦＬ＿ＣＯＭＰは、ＳＩＭＤ演算器５２０でのストアデータの出力が完了したことを示す信号である。エントリ識別信号Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤは、ストアデータの出力処理に対応するＣＳＥ４００のエントリを識別する信号である。
【０４４３】
完了エントリ選択回路４０５は、Ｃサイクルにおいて、エントリ記憶回路４０１に登録された先頭のエントリを、完了判定回路４０６に読み出す。完了判定回路４０６は、読み出されたエントリに基づき、そのエントリに対応する処理の実行が完了しているか否かを判定する。浮動小数点ストア命令の実行時には、完了判定回路４０６は、上記の制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤ，Ｘ＿ＦＬ＿ＣＯＭＰおよびエントリ識別信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＩＩＤ，Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤに基づくエントリの信号から、処理の実行完了を判定する。
【０４４４】
浮動小数点ストア命令が完了したことが判定されると、Ｗサイクルに遷移する。Ｗサイクルにおいて、信号出力回路４０７は、エントリ識別信号Ｗ＿ＩＩＤおよび制御信号Ｗ＿ＳＴを、ストアバッファ部４８０に出力する。
【０４４５】
図５９は、浮動小数点ストア命令実行時のＣＳＥのエントリの内容を示す図である。
浮動小数点ストア命令に対応するＣＳＥ４００のエントリにおいて、浮動小数点ロード命令実行時と異なる点の一つは、データの読み出し元および書き込み先に関する信号、すなわち、アドレス信号ＢＡＳＩＣ＿ＲＤ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＲＤ＿ＡＤＲおよび信号ＢＡＳＩＣ＿ＷＲ，ＥＸＴＥＮＤ＿ＷＲが登録されないことである。
【０４４６】
また、浮動小数点ストア命令に対応するＣＳＥ４００のエントリには、基本演算器５２１および拡張演算器５２２の少なくとも一方が使用されることを示す信号ＥＵ＿ＵＳＥと、浮動小数点ストア命令であることを示す信号ＳＴＲが登録される。信号ＥＵ＿ＵＳＥ，ＳＴＲは、それぞれ命令デコーダ２８０からの制御信号Ｄ＿ＥＵ＿ＵＳＥ，Ｄ＿ＳＴの受信に応じて、オンにされる。
【０４４７】
さらに、ＣＳＥ４００には、ストアアドレスの出力が完了したことを示す信号ＢＡＳＩＣ＿ＦＰ＿ＣＯＭＰ，ＥＸＴＥＮＤ＿ＦＰ＿ＣＯＭＰが、ロード／ストア実行完了受け付け回路４０３によって登録される。また、ＣＳＥ４００には、ストアデータの出力が完了したことを示す信号ＥＵ＿ＣＯＭＰが、演算実行完了エントリ選択回路４０４によって登録される。
【０４４８】
ＣＳＥ４００の完了判定回路４０６は、完了エントリ選択回路４０５により選択されたエントリの内容に基づいて、命令が完了したか否かを判定する。浮動小数点ストア命令に対応するエントリにおいて、ＳＩＭＤストア命令が実行された場合には、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥがともにオンになる。この場合、完了判定回路４０６は、信号ＢＡＳＩＣ＿ＦＰ＿ＣＯＭＰ，ＥＸＴＥＮＤ＿ＦＰ＿ＣＯＭＰ，ＥＵ＿ＣＯＭＰのすべてがオンになったとき、命令が完了したと判定する。また、非ＳＩＭＤストア命令が実行された場合には、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥがオン、信号ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥがオフになる。この場合、完了判定回路４０６は、信号ＢＡＳＩＣ＿ＦＰ＿ＣＯＭＰ，ＥＵ＿ＣＯＭＰがそれぞれオンになったとき、命令が完了したと判定する。
【０４４９】
完了判定回路４０６により浮動小数点ストア命令が完了したと判定されると、信号出力回路４０７は、エントリ識別信号Ｗ＿ＩＩＤおよび制御信号Ｗ＿ＳＴを、ストアバッファ部４８０に出力する。エントリ識別信号Ｗ＿ＩＩＤは、命令完了を判定したエントリの識別情報を示し、制御信号Ｗ＿ＳＴは、ストアバッファ部４８０に対してデータのストアを要求する信号である。
【０４５０】
図６０は、浮動小数点ストア命令実行時のレジスタリネーミング部の入出力信号を示す図である。なお、図６０では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０４５１】
Ｄサイクルにおいては、前述した浮動小数点ロード命令実行時と同様の手順で、固定小数点レジスタリネーミングマップ３０３に対するアドレス読み出しが要求される。すなわち、読み出し回路３０９には、命令デコーダ２８０から出力された、ストアアドレスに対応するオペランドデータの読み出し元アドレスを示すアドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲが入力される。読み出し回路３０９は、アドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲがそれぞれ示すアドレスに対応する固定小数点レジスタリネーミングマップ３０３のエントリを参照する。そして、参照したエントリが有効である場合には、割り当てられたアドレスを読み出し、アドレス信号をＲＳＡ３２０に出力する。アドレス信号Ｄ＿Ｒ１＿ＧＵＢ＿ＡＤＲは、アドレス信号Ｄ＿Ｒ１＿ＧＰＲ＿ＡＤＲに割り当てられたリネーミングレジスタのアドレスを示し、アドレス信号Ｄ＿Ｒ２＿ＧＵＢ＿ＡＤＲは、アドレス信号Ｄ＿Ｒ２＿ＧＰＲ＿ＡＤＲに割り当てられたリネーミングレジスタのアドレスを示す。
【０４５２】
また、Ｄサイクルにおいては、前述した浮動小数点演算命令実行時と同様の手順で、基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２に対するアドレス読み出しが要求される。ただし、基本レジスタリネーミングマップ３０１および拡張レジスタリネーミングマップ３０２のそれぞれに対して読み出しが要求されるアドレスは、それぞれ１つのみである。
【０４５３】
すなわち、読み出し回路３０７，３０８には、命令デコーダ２８０からのアドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲが入力される。読み出し回路３０７は、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲで指定される基本レジスタ６０１に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを基本レジスタリネーミングマップ３０１から読み出す。そして、読み出したアドレスをアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣとしてＲＳＦ３６０に出力する。
【０４５４】
読み出し回路３０８は、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲで指定される拡張レジスタ６０２に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを拡張レジスタリネーミングマップ３０２から読み出す。そして、読み出したアドレスをアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤとしてＲＳＦ３６０に出力する。
【０４５５】
なお、浮動小数点ストア命令の実行時には、リネーミングマップ登録回路３０４〜３０６は動作しない。
図６１は、浮動小数点ストア命令実行時のＲＳＡの入出力信号を示す図である。なお、図６１では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０４５６】
浮動小数点ストア命令実行時におけるＲＳＡ３２０の基本的な動作は、浮動小数点ロード命令実行時のＲＳＡ３２０の動作と同じである。ただし、浮動小数点ストア命令では、処理結果の書き込み先レジスタが指定されない。このため、エントリ生成回路３２２には、書き込み先レジスタに割り当てられたリネーミングレジスタのアドレスを示すアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは入力されない。また、エントリ生成回路３２２には、制御信号Ｄ＿ＬＯＡＤの代わりに、浮動小数点ストア命令であることを示す制御信号Ｄ＿ＳＴと、ストアバッファ４８１のエントリを識別するエントリ識別信号Ｄ＿ＳＴＢ＿ＩＤとが入力される。エントリ生成回路３２２は、命令デコーダ２８０から制御信号Ｄ＿ＳＴおよびエントリ識別信号Ｄ＿ＳＴＢ＿ＩＤを受信すると、浮動小数点ストア命令に対応するエントリをエントリ記憶回路３２１に生成する。
【０４５７】
エントリ選択回路３２４から浮動小数点ストア命令に対応するエントリが出力されると、エントリ出力回路３２５は、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｂ＿ＦＰ＿ＩＩＤ，Ｂ＿ＦＰ＿ＳＴ，Ｂ＿ＥＡＧ＿Ｒ１＿ＩＮＧＡＴＥ，Ｂ＿ＥＡＧ＿Ｒ２＿ＩＮＧＡＴＥ、アドレス信号Ｂ＿Ｒ１＿ＧＰＲ＿ＡＤＲ，Ｂ＿Ｒ２＿ＧＰＲ＿ＡＤＲ，Ｂ＿ＥＡＧ＿Ｒ１＿ＧＵＢ＿ＡＤＲ，Ｂ＿ＥＡＧ＿Ｒ２＿ＧＵＢ＿ＡＤＲ、およびエントリ識別信号Ｂ＿ＦＰ＿ＩＩＤ，Ｂ＿ＦＰ＿ＳＴＢ＿ＩＤを、オペランドデータ選択部４３０に対して出力する。
【０４５８】
図６２は、浮動小数点ストア命令実行時におけるＲＳＡのエントリの内容を示す図である。
浮動小数点ストア命令に対応するＲＳＡ３２０のエントリにおいて、浮動小数点ロード命令実行時と異なる点は、次の点である。浮動小数点ストア命令に対応するエントリには、データ書き込み先のアドレスを示すアドレスＢＡＳＩＣ＿ＤＳＴ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＤＳＴ＿ＡＤＲが、エントリに登録されない。また、このエントリには、信号ＬＯＡＤの代わりに、浮動小数点ストア命令であることを示す信号ＳＴＲと、ストアバッファ４８１のエントリを識別するエントリ識別信号ＳＴＢ＿ＩＤとが登録される。信号ＳＴＲはエントリ生成時にオンにされ、エントリ識別信号ＳＴＢ＿ＩＤは、命令デコーダ２８０からのエントリ識別信号Ｄ＿ＳＴＢ＿ＩＤに応じた値をとる。
【０４５９】
エントリの登録情報に基づくオペランドデータ待ち回路３２３によるデータ待ち合わせ処理は、浮動小数点ロード命令の実行時と同じである。エントリ選択回路３２４は、信号Ｒ１＿ＲＥＡＤＹ，Ｒ２＿ＲＥＡＤＹがともにオンになったとき、このエントリを発行することができる状態となる。このとき、エントリ識別信号ＩＩＤ，ＳＴＢ＿ＩＤの値は、それぞれ信号Ｂ＿ＦＰ＿ＩＩＤ，Ｂ＿ＦＰ＿ＳＴＢ＿ＩＤとして、制御信号Ｂ＿ＦＰ＿ＳＴとともにストアバッファ部４８０に出力される。また、信号ＢＡＳＩＣ＿ＦＰ＿ＵＳＥ、ＥＸＴＥＮＤ＿ＦＰ＿ＵＳＥの値は、それぞれ制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ、Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤとしてストアバッファ部４８０に出力される。その他のエントリ内の信号と、エントリ出力回路３２５から出力される信号との関係は、図１９において説明した通りである。
【０４６０】
なお、オペランドデータ選択部４３０でのデータ選択動作については、図２０において説明した通りである。オペランドデータ選択器４３１，４３２は、固定小数点レジスタ５８０または固定小数点リネーミングレジスタ５４０からそれぞれ読み出されたデータを、オペランドアドレス生成器４４０に供給する。Ａサイクルにおいて、オペランドアドレス生成器４４０は、オペランドデータ選択器４３１，４３２から供給されたデータを基に、ストアアドレスを生成して、１次データキャッシュ部４６０に出力する。
【０４６１】
図６３は、浮動小数点ストア命令実行時のＲＳＦの入出力信号を示す図である。なお、図６３では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０４６２】
浮動小数点ストア命令実行時におけるＲＳＦ３６０の基本的な動作は、浮動小数点演算命令実行時のＰサイクルにおけるＲＳＦ３６０の動作と同じである。ただし、浮動小数点ストア命令では、処理結果の書き込み先レジスタが指定されない。このため、エントリ生成回路３６２には、書き込み先レジスタに割り当てられたリネーミングレジスタのアドレスを示すアドレス信号Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿ＲＤ＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤは入力されない。
【０４６３】
また、浮動小数点ストア命令では、命令コードのソースオペランドで指定されるソースレジスタは１つのみである。このため、浮動小数点ストア命令実行時には、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲおよび制御信号Ｄ＿Ｒ１＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＵＳＥ＿ＥＸＴＥＮＤがＲＳＦ３６０に入力される。しかし、アドレス信号Ｄ＿Ｒ２＿ＦＰＲ＿ＡＤＲ，Ｄ＿Ｒ３＿ＦＰＲ＿ＡＤＲおよび制御信号Ｄ＿Ｒ２＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ２＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｄ＿Ｒ３＿ＵＳＥ＿ＢＡＳＩＣ，Ｄ＿Ｒ３＿ＵＳＥ＿ＥＸＴＥＮＤは入力されない。
【０４６４】
また、アドレス信号Ｄ＿Ｒ１＿ＦＰＲ＿ＡＤＲに対応する基本レジスタ６０１および拡張レジスタ６０２に対してそれぞれリネーミングレジスタが割り当てられていた場合には、各リネーミングレジスタのアドレスを示すアドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤも入力される。ＳＩＭＤストア命令の実行時には、アドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤはセットで入力される。非ＳＩＭＤストア命令の実行時には、ソースオペランドで指定されるソースレジスタのアドレスに応じて、アドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤのいずれか１つが入力される。
【０４６５】
また、浮動小数点ストア命令実行時には、制御信号Ｄ＿ＦＬ＿ＯＰＣの代わりに、浮動小数点ストア命令実行であることを示す制御信号Ｄ＿ＳＴと、ストアバッファ４８１のエントリを識別するエントリ識別信号Ｄ＿ＳＴＢ＿ＩＤとが、命令デコーダ２８０から入力される。エントリ生成回路３６２は、制御信号Ｄ＿ＲＥＬ＿ＲＳＦを受信したとき、浮動小数点ストア命令用のエントリを作成する。
【０４６６】
発行エントリ選択回路３６４から浮動小数点ロード命令に対応するエントリが出力されると、信号出力回路３６５は、エントリに基づき、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｂ＿ＦＬ＿ＳＴ，Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤ、エントリ識別信号Ｂ＿ＦＬ＿ＳＴＢ＿ＩＤ、アドレス信号Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣ，Ｂ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤを出力する。
【０４６７】
図６４は、浮動小数点ストア命令実行時におけるＲＳＦのエントリの内容を示す図である。
浮動小数点ストア命令に対応するＲＳＦ３６０のエントリにおいて、浮動小数点演算命令実行時と異なる点は、次の点である。浮動小数点ストア命令に対応するエントリには、データ書き込み先のリネーミングアドレスを示すアドレスＢＡＳＩＣ＿ＤＳＴ＿ＡＤＲ，ＥＸＴＥＮＤ＿ＤＳＴ＿ＡＤＲは、エントリに登録されない。前述のように、浮動小数点ストア命令では、命令コードのソースオペランドで指定されるソースレジスタは１つのみである。このため、浮動小数点ストア命令に対応するエントリには、ストアデータの読み出し元レジスタのアドレスとしてアドレスＲ１＿ＲＥＧ＿ＡＤＲのみ登録され、アドレスＲ２＿ＲＥＧ＿ＡＤＲ，Ｒ３＿ＲＥＧ＿ＡＤＲは登録されない。従って、このエントリには、信号ＢＡＳＩＣ＿Ｒ２＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ２＿ＵＳＥ，ＢＡＳＩＣ＿Ｒ３＿ＵＳＥ，ＥＸＴＥＮＤ＿Ｒ３＿ＵＳＥも登録されない。また、ストアデータがリネーミングレジスタに準備されている場合には、アドレスＲ１＿ＲＥＧ＿ＡＤＲに対応するリネーミングレジスタのアドレスＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲがエントリに登録される。
【０４６８】
このエントリには、信号ＯＰＣの代わりに、浮動小数点ストア命令であることを示す信号ＳＴＲと、ストアバッファ４８１のエントリを識別するエントリ識別信号ＳＴＢ＿ＩＤとが登録される。信号ＳＴＲはエントリ生成時にオンにされ、エントリ識別信号ＳＴＢ＿ＩＤは、命令デコーダ２８０からのエントリ識別信号Ｄ＿ＳＴＢ＿ＩＤに応じた値をとる。
【０４６９】
ＲＳＦ３６０のオペランドデータ待ち回路３６３は、図４０〜図４４において説明した手順により、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥおよびアドレスＲ１＿ＲＥＧ＿ＡＤＲ，ＢＡＳＩＣ＿Ｒ１＿ＦＵＢ＿ＡＤＲ，ＥＸＴＥＮＤ＿Ｒ１＿ＦＵＢ＿ＡＤＲに基づくデータの待ち合わせ制御を行う。
【０４７０】
ＳＩＭＤストア命令実行時には、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥがともにオンになる。この場合、オペランドデータ待ち回路３６３は、基本バス側および拡張バス側のそれぞれのレジスタにおいてストアデータの準備ができたか否かを判定する。基本バス側のレジスタにストアデータが準備されると、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹをオンにするとともに、選択信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥに値をセットする。また、拡張バス側のレジスタにストアデータが準備されると、信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹをオンにするとともに、選択信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥに値をセットする。ＳＩＭＤストア命令実行時には、発行エントリ選択回路３６４は、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹ、信号ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹと信号ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹのすべてがオンであるとき、エントリを発行する。
【０４７１】
また、非ＳＩＭＤストア命令実行時には、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥ，ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥのうち一方のみオンになる。オペランドデータ待ち回路３６３は、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥがオン、信号ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥがオフの場合、基本バス側のレジスタにおいてストアデータの準備ができたか否かを判定する。この場合、ストアデータの準備ができると、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹがオンになり、選択信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥに値がセットされる。
【０４７２】
一方、オペランドデータ待ち回路３６３は、信号ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥがオン、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥがオフの場合、拡張バス側のレジスタにおいてストアデータの準備ができたか否かを判定する。この場合、ストアデータの準備ができると、信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹがオンにされ、選択信号ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥに値がセットされる。
【０４７３】
なお、図示しないが、ＲＳＦ３６０のエントリには、信号ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹも含まれる。ただし、これらの信号は、ＲＳＦ３６０のエントリが作成された時点で、すべてオンにされる。
【０４７４】
発行エントリ選択回路３６４は、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹ，ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹのすべてがオンであるとき、エントリを発行する。なお、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥまたは信号ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥがオフの時に、信号ＢＡＳＩＣ＿Ｒ１＿ＲＥＡＤＹまたは信号ＥＸＴＥＮＤ＿Ｒ１＿ＲＥＡＤＹは、ＲＳＦ３６０のエントリが作成された時点でオンになる。また、信号ＢＡＳＩＣ＿Ｒ２＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ２＿ＲＥＡＤＹと信号ＢＡＳＩＣ＿Ｒ３＿ＲＥＡＤＹ，ＥＸＴＥＮＤ＿Ｒ３＿ＲＥＡＤＹは、ＲＳＦ３６０のエントリが作成された時点で、オンが格納される。
【０４７５】
エントリが発行されたとき、エントリ識別信号ＩＩＤ，ＳＴＢ＿ＩＤの値は、それぞれ信号Ｂ＿ＦＬ＿ＩＩＤ，Ｂ＿ＦＬ＿ＳＴＢ＿ＩＤとして、制御信号Ｂ＿ＦＬ＿ＳＴとともにＳＩＭＤ演算器５２０に出力される。また、信号ＢＡＳＩＣ＿ＦＬ＿ＵＳＥ、ＥＸＴＥＮＤ＿ＦＬ＿ＵＳＥの値は、それぞれ制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ、Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤとしてＳＩＭＤ演算器５２０に出力される。その他のエントリ内の信号と、信号出力回路３６５から出力される信号との関係は、図３７において説明した通りである。
【０４７６】
浮動小数点ＳＩＭＤレジスタ６００にストアデータが準備された場合、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲが浮動小数点ＳＩＭＤレジスタ６００に出力される。この場合、基本レジスタ６０１および拡張レジスタ６０２から、アドレス信号Ｂ＿Ｒ１＿ＦＰＲ＿ＡＤＲに対応するアドレスに格納されたストアデータが読み出され、オペランドデータ選択部５３０ａに対して出力される。オペランドデータ選択部５３０ａでは、ＲＳＦ３６０からの選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤに従って、基本レジスタ６０１からのデータと拡張レジスタ６０２からのデータを選択する。制御信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＢＡＳＩＣ，Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤは、エントリ内の信号ＢＡＳＩＣ＿Ｒ１＿ＩＮＧＡＴＥ，ＥＸＴＥＮＤ＿Ｒ１＿ＩＮＧＡＴＥに基づく信号である。
【０４７７】
また、基本リネーミングレジスタ５６１にストアデータが準備された場合、アドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣが浮動小数点リネーミングレジスタ５６０に出力される。この場合、基本リネーミングレジスタ５６１から、アドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＢＡＳＩＣに対応するアドレスに格納されたストアデータが読み出され、オペランドデータ選択部５３０ａに出力される。オペランドデータ選択部５３０ａは、ＲＳＦ３６０からの選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＢＡＳＩＣに従って、基本リネーミングレジスタ５６１からのデータを選択する。
【０４７８】
また、拡張リネーミングレジスタ５６２にストアデータが準備された場合、アドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤが浮動小数点リネーミングレジスタ５６０に出力される。この場合、拡張リネーミングレジスタ５６２から、アドレス信号Ｄ＿Ｒ１＿ＦＵＢ＿ＡＤＲ＿ＥＸＴＥＮＤに対応するアドレスに格納されたストアデータが読み出され、オペランドデータ選択部５３０ａに出力される。オペランドデータ選択部５３０ａは、ＲＳＦ３６０からの選択信号Ｂ＿Ｒ１＿ＩＮＧＡＴＥ＿ＥＸＴＥＮＤに従って、拡張リネーミングレジスタ５６２からのデータを選択する。
【０４７９】
図６５は、浮動小数点ストア命令実行時のＳＩＭＤ演算器の入出力信号を示す図である。なお、図６５では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０４８０】
浮動小数点ストア命令実行時には、前述のオペランドデータ選択部５３０ａ〜５３０ｃのうち、オペランドデータ選択部５３０ａのみが使用される。オペランドデータ選択部５３０ａの構成および動作は、図４６において説明した通りである。オペランドデータ選択部５３０ａにおいて、基本オペランドデータ選択器５３１によって選択されたストアデータは、基本演算器５２１に出力され、拡張オペランドデータ選択器５３２によって選択されたストアデータは、拡張演算器５２２に出力される。
【０４８１】
Ｘサイクルにおいて、ラッチ回路５２６には、ＲＳＦ３６０から、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤ，Ｂ＿ＦＬ＿ＳＴおよびエントリ識別信号Ｂ＿ＦＬ＿ＩＩＤ，Ｂ＿ＦＬ＿ＳＴＢ＿ＩＤが入力される。これらの信号は、ラッチ回路５２６から演算制御回路５２５に入力される。
【０４８２】
演算制御回路５２５は、制御信号Ｂ＿ＦＬ＿ＳＴに基づいて、浮動小数点ストア命令のエントリが発行されたことを認識する。このとき、演算制御回路５２５は、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣがオンであれば、基本演算器５２１を起動させるとともに、入力信号をそのまま出力するように基本演算器５２１に要求する。また、演算制御回路５２５は、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤがオンであれば、拡張演算器５２２を起動させるとともに、入力信号をそのまま出力するように拡張演算器５２２に要求する。
【０４８３】
また、演算制御回路５２５は、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤがともにオンの場合、および、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＢＡＳＩＣのみがオンの場合には、ストアデータ選択器５３７に対して、基本演算器５２１側の入力を選択させる。また、制御信号Ｂ＿ＦＬ＿ＵＳＥ＿ＥＸＴＥＮＤのみがオンの場合には、ストアデータ選択器５３７に対して、拡張演算器５２２側の入力を選択させる。
【０４８４】
このような演算制御回路５２５の制御により、ＳＩＭＤストア命令が実行された場合には、基本演算器５２１および拡張演算器５２２の両方が起動する。オペランドデータ選択部５３０ａから出力された、ストアデータを示すデータ信号Ｘ＿ＦＬ＿ＯＲ１Ｒ＿ＢＡＳＩＣは、基本演算器５２１およびストアデータ選択器５３７を介して基本ストアデータレジスタ５３５に格納される。また、オペランドデータ選択部５３０ａから出力された、ストアデータを示すデータ信号Ｘ＿ＦＬ＿ＯＲ１Ｒ＿ＥＸＴＥＮＤは、拡張演算器５２２を介して拡張ストアデータレジスタ５３６に格納される。一方、非ＳＩＭＤストア命令の実行時には、基本演算器５２１または拡張演算器５２２のいずれか一方のみが起動するが、どちらから出力されるデータ信号も、ストアデータ選択器５３７を介して基本ストアデータレジスタ５３５に格納される。
【０４８５】
また、演算制御回路５２５は、基本演算器５２１または拡張演算器５２２の少なくとも一方を起動させると、ストアデータの出力が完了したことを示す制御信号Ｘ＿ＦＬ＿ＣＯＭＰと、エントリ識別信号Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤとを、ＣＳＥ４００に対して出力する。なお、エントリ識別信号Ｘ＿ＦＬ＿ＣＯＭＰ＿ＩＩＤの出力値は、ＲＳＦ３６０から入力されたエントリ識別信号Ｂ＿ＦＬ＿ＩＩＤと同じである。
【０４８６】
また、演算制御回路５２５は、ストアバッファ４８１へのストアデータの書き込みを要求する制御信号Ｕ＿ＦＬ＿ＳＴＢ＿ＷＲと、ストアバッファ４８１のエントリを識別するエントリ識別信号Ｕ＿ＦＬ＿ＳＴＢ＿ＩＤとを、ラッチ回路５３８を介してストアバッファ部４８０に出力する。エントリ識別信号Ｕ＿ＦＬ＿ＳＴＢ＿ＩＤの値は、ＲＳＦ３６０からのエントリ識別信号Ｂ＿ＦＬ＿ＳＴＢ＿ＩＤと同じである。また、制御信号Ｕ＿ＦＬ＿ＳＴＢ＿ＷＲおよびエントリ識別信号Ｕ＿ＦＬ＿ＳＴＢ＿ＩＤのストアバッファ部４８０への出力タイミングは、基本ストアデータレジスタ５３５および拡張ストアデータレジスタ５３６からストアバッファ部４８０へのストアデータの出力タイミングと一致するように調整される。
【０４８７】
図６６は、浮動小数点ストア命令実行時のストアバッファ部の入出力信号を示す図である。なお、図６６では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
【０４８８】
ストアバッファ部４８０は、ストアバッファ４８１、エントリ書き込み回路４８２，４８３、読み出し回路４８４、ストアデータ書き込み回路４８５、完了報告回路４８６およびラッチ回路４８７ａ〜４８７ｄ，４８８ａ〜４８８ｅを備えている。なお、これらのストアバッファ部４８０の構成要素は、例えば、１次データキャッシュ部４６０の一部として設けられてもよい。
【０４８９】
エントリ書き込み回路４８２には、オペランドアドレス生成器４４０により生成されたストアアドレスが入力される。また、エントリ書き込み回路４８２には、ＲＳＡ３２０からのエントリ識別信号Ｂ＿ＦＰ＿ＩＩＤが、ラッチ回路４５４を介して入力され、ＲＳＡ３２０からの制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤが、ラッチ回路４５５を介して入力され、ＲＳＡ３２０からの制御信号Ｂ＿ＦＰ＿ＳＴおよびエントリ識別信号Ｂ＿ＦＰ＿ＳＴＢ＿ＩＤが、ラッチ回路４５６を介して入力される。なお、ラッチ回路４５４〜４５６は、それぞれＲＳＡ３２０からの信号の出力タイミングを、オペランドアドレス生成器４４０からのアドレス出力タイミングと一致するように調整する。
【０４９０】
ＦＴサイクルにおいて、エントリ書き込み回路４８２は、制御信号Ｂ＿ＦＰ＿ＳＴを受信すると、オペランドアドレス生成器４４０からのストアアドレスと、エントリ識別信号Ｂ＿ＦＰ＿ＩＩＤが示すＣＳＥ４００のエントリ識別情報とを、エントリ識別信号Ｂ＿ＦＰ＿ＳＴＢ＿ＩＤに対応するストアバッファ４８１のエントリに格納する。
【０４９１】
また、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤは、ラッチ回路４８７ａ〜４８７ｄを介して完了報告回路４８６に供給される。ＦＲサイクルにおいて、完了報告回路４８６は、制御信号Ｂ＿ＦＰ＿ＵＳＥ＿ＢＡＳＩＣ，Ｂ＿ＦＰ＿ＵＳＥ＿ＥＸＴＥＮＤの値を、それぞれ制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤとしてＣＳＥ４００に出力する。これにより、ＣＳＥ４００に対して、ストアアドレスをストアバッファ４８１に出力したことが報告される。また、エントリ識別信号Ｂ＿ＦＰ＿ＩＩＤは、ラッチ回路４８８ａ〜４８８ｅを伝達され、ＦＲサイクルにおいて、ＣＳＥ４００に出力される。
【０４９２】
エントリ書き込み回路４８３には、ＳＩＭＤ演算器５２０から出力されたデータ信号ＦＬ＿ＳＴＤＲ＿ＢＡＳＩＣ，ＦＬ＿ＳＴＤＲ＿ＥＸＴＥＮＤ、制御信号Ｕ＿ＦＬ＿ＳＴＢ＿ＷＲおよびエントリ識別信号Ｕ＿ＦＬ＿ＳＴＢ＿ＩＤが入力される。エントリ書き込み回路４８３は、制御信号Ｕ＿ＦＬ＿ＳＴＢ＿ＷＲを受信すると、データ信号ＦＬ＿ＳＴＤＲ＿ＢＡＳＩＣ，ＦＬ＿ＳＴＤＲ＿ＥＸＴＥＮＤが示すストアデータを、エントリ識別信号Ｕ＿ＦＬ＿ＳＴＢ＿ＩＤに対応するストアバッファ４８１のエントリに格納する。
【０４９３】
ＳＩＭＤストア命令実行時には、データ信号ＦＬ＿ＳＴＤＲ＿ＢＡＳＩＣ，ＦＬ＿ＳＴＤＲ＿ＥＸＴＥＮＤの両方がエントリ書き込み回路４８３に入力される。この場合、エントリ書き込み回路４８３は、２つの８バイトのストアデータをストアバッファ４８１のエントリに書き込む。また、非ＳＩＭＤストア命令実行時には、データ信号ＦＬ＿ＳＴＤＲ＿ＢＡＳＩＣのみがエントリ書き込み回路４８３に入力される。この場合、エントリ書き込み回路４８３は、１つの８バイトのストアデータをストアバッファ４８１のエントリに書き込む。
【０４９４】
なお、図６５で説明したように、エントリ書き込み回路４８３に対して制御信号Ｕ＿ＦＬ＿ＳＴＢ＿ＷＲが出力された時点で、制御信号Ｘ＿ＦＬ＿ＣＯＭＰにより、ストアデータの出力が完了したことが、ＳＩＭＤ演算器５２０からＣＳＥ４００に対してすでに報告されている。
【０４９５】
また、ＣＳＥ４００は、図５９で説明したように、ＳＩＭＤ演算器５２０からの制御信号Ｘ＿ＦＬ＿ＣＯＭＰと、ストアバッファ部４８０からの制御信号ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＢＡＳＩＣ，ＦＲ＿ＦＰ＿ＣＯＭＰ＿ＥＸＴＥＮＤとを受信する。そして、Ｃサイクルで、命令の完了を判定し、Ｗサイクルで、ストアバッファ部４８０に対して、制御信号Ｗ＿ＳＴおよびエントリ識別信号Ｗ＿ＩＩＤを出力する。Ｗサイクルにおいて、読み出し回路４８４は、エントリ識別信号Ｗ＿ＩＩＤが示すＣＳＥ４００のエントリ識別情報が格納されたエントリを選択する。そして、選択したエントリに格納されたストアアドレスとストアデータとを、ストアデータ書き込み回路４８５に出力する。
【０４９６】
また、ストアデータ書き込み回路４８５は、制御信号Ｗ＿ＳＴの受信に応じて、読み出し回路４８４からのストアデータを、読み出し回路４８４からのストアアドレスに対応する１次データキャッシュ４６１の記憶領域に格納する。ＳＩＭＤストア命令の実行時には、２つの８バイトのストアデータが１次データキャッシュ４６１に格納され、非ＳＩＭＤストア命令の実行時には、１つの８バイトのストアデータが１次データキャッシュ４６１に格納される。この後、１次データキャッシュ部４６０などの制御により、格納されたストアデータが２次データキャッシュやメインメモリにストアされる。
【０４９７】
以上説明した浮動小数点ストア命令実行時の処理では、ＳＩＭＤストア命令実行時には、ストアデータの読み出し元レジスタとして、あらかじめ対応づけられた基本レジスタ６０１および拡張レジスタ６０２がセットで指定される。一方、非ＳＩＭＤストア命令実行時には、ストアデータの読み出し元レジスタとして、基本レジスタ６０１および拡張レジスタ６０２のうちの任意のレジスタが指定される。従って、浮動小数点ＳＩＭＤレジスタ６００内のレジスタ使用効率が向上するとともに、プログラムの自由度が高められる。
【０４９８】
また、ストアデータを浮動小数点リネーミングレジスタ５６０から読み出すこともでき、その際に、浮動小数点リネーミングレジスタ５６０内のレジスタが８バイト単位の独立したレジスタとして取り扱われるので、浮動小数点リネーミングレジスタ５６０内のレジスタ使用効率が向上する。
【０４９９】
なお、以上の第２の実施の形態では、処理結果の格納先レジスタに対してリネーミングレジスタが割り当てられる命令の例として、浮動小数点ロード命令および浮動小数点演算命令を挙げた。しかし、同様のリネーミングレジスタの割り当て手順を、上記以外の他の命令実行時に適用することも可能である。また、ソースデータの読み出し元として、ソースレジスタに割り当てられたリネーミングレジスタを指定できる命令の例として、浮動小数点演算命令および浮動小数点ストア命令を挙げた。しかし、同様のリネーミングレジスタからのソースデータ読み出し手順を、上記以外の他の命令実行時に適用することも可能である。
【０５００】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）  第１のデータおよび第２のデータを有する集合データに対して処理を行う集合データ処理命令をデコードする命令デコード部と、
データを格納する複数の第１の割当レジスタと、
データを格納する複数の第２の割当レジスタと、
前記集合データ処理命令のデコード結果に基づいて、前記複数の第１の割当レジスタから一の第１の割当レジスタを選択するとともに、前記複数の第２の割当レジスタから一の第２の割当レジスタを選択する割当レジスタ選択部と、
前記集合データ処理命令のデコード結果に基づいて、前記第１のデータに対して第１の処理を行い、前記第１の処理の結果である第１の処理結果を前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持させる第１の処理部と、
前記集合データ処理命令のデコード結果に基づいて、前記第２のデータに対して第２の処理を行い、前記第２の処理の結果である第２の処理結果を前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持させる第２の処理部と、
前記第１の割当レジスタに保持された前記第１の処理結果を格納する第１の結果レジスタと、
前記第２の割当レジスタに保持された前記第２の処理結果を格納する第２の結果レジスタと、
を有することを特徴とする演算処理装置。
【０５０１】
（付記２）  前記演算処理装置において、
前記命令デコード部は、前記第１または第２のデータと同じデータ幅の第３のデータに対して処理を行う通常データ処理命令が入力されたとき、前記通常データ処理命令をデコードしてデコード結果を出力するとともに、前記通常データ処理命令のデコード結果に基づいて前記第１の結果レジスタまたは前記第２の結果レジスタのいずれかを選択し、
前記命令デコード部により前記第１の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第１の割当レジスタから一の第１の割当レジスタを選択し、
前記第１の処理部は、前記第３のデータに対して前記第１の処理を行い、当該第１の処理の結果である第３の処理結果を、前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持させ、
前記第１の結果レジスタは、前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持された前記第３の処理結果を格納し、
前記命令デコード部により前記第２の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第２の割当レジスタから一の第２の割当レジスタを選択し、
前記第２の処理部は、前記第３のデータに対して前記第２の処理を行い、当該第２の処理の結果である第４の処理結果を、前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持させ、
前記第２の結果レジスタは、前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持された前記第４の処理結果を格納する、
ことを特徴とする付記１記載の演算処理装置。
【０５０２】
（付記３）  前記演算処理装置はさらに、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記第１のデータを前記複数の第１の割当レジスタのうち一の第１の割当レジスタから読み出すとともに、前記第２のデータを前記複数の第２の割当レジスタのうち一の第２の割当レジスタから読み出し、前記命令デコード部により前記通常データ処理命令がデコードされたとき、前記第３のデータを前記複数の第１の割当レジスタおよび前記複数の第２の割当レジスタのうち一の割当レジスタから読み出すデータ読み出し制御部を有することを特徴とする付記２記載の演算処理装置。
【０５０３】
（付記４）  前記演算処理装置はさらに、
前記命令デコード部でデコードされた命令に対応する処理結果が、前記複数の第１の割当レジスタおよび前記複数の第２の割当レジスタのうち必要な割当レジスタに格納されたか否かを監視し、処理結果が前記複数の第１の割当レジスタおよび前記複数の第２の割当レジスタのうち必要な割当レジスタに格納された命令を、前記命令デコード部によってデコードされた順に完了させるとともに、完了させた命令に対応する処理結果が前記第１の割当レジスタに格納されている場合は、当該処理結果を当該第１の割当レジスタから前記第１の結果レジスタに格納し、完了させた命令に対応する処理結果が前記第２の割当レジスタに格納されている場合は、当該処理結果を当該第２の割当レジスタから前記第２の結果レジスタに格納するデータ格納制御部を有することを特徴とする付記２記載の演算処理装置。
【０５０４】
（付記５）  前記演算処理装置において、
前記データ格納制御部は、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記割当レジスタ選択部により選択された前記第１の割当レジスタおよび前記第２の割当レジスタに対してそれぞれ前記第１の処理結果および前記第２の処理結果が格納された場合に、デコードされた前記集合データ処理命令を完了させ、
前記命令デコード部により通常データ処理命令がデコードされて前記第１の結果レジスタが選択されたとき、前記割当レジスタ選択部により選択された前記第１の割当レジスタに対して前記第３の処理結果が格納された場合に、デコードされた前記通常データ処理命令を完了させ、
前記命令デコード部により通常データ処理命令がデコードされて前記第２の結果レジスタが選択されたとき、前記割当レジスタ選択部により選択された前記第２の割当レジスタに対して前記第４の処理結果が格納された場合に、デコードされた前記通常データ処理命令を完了させることを特徴とする付記４記載の演算処理装置。
【０５０５】
（付記６）  前記演算処理装置において、
前記集合データ処理命令は、前記第１の処理結果の格納先として、複数の前記第１の結果レジスタから一の第１の結果レジスタを指定する第１のレジスタ指定情報を含み、
前記通常データ処理命令は、処理結果の格納先として、複数の前記第１の結果レジスタおよび複数の前記第２の結果レジスタから一の結果レジスタを指定する第２のレジスタ指定情報を含み、
前記演算処理装置はさらに、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、当該集合データ処理命令に含まれる前記第１のレジスタ指定情報により指定された前記第１の結果レジスタに対して、当該集合データ処理命令に基づく前記第１の処理結果を前記第１の割当レジスタから転送させるとともに、指定された前記第１の結果レジスタと同じレジスタ識別情報を付与された前記第２の結果レジスタに対して、当該集合データ処理命令に基づく前記第２の処理結果を前記第２の割当レジスタから転送させ、
前記命令デコード部により前記通常データ処理命令がデコードされたとき、デコードされた前記通常データ処理命令に含まれる前記第２のレジスタ指定情報により前記第１の結果レジスタが指定された場合、指定された前記第１の結果レジスタに対して、デコードされた前記通常データ処理命令に基づく前記第３の処理結果を前記第１の割当レジスタから転送させ、デコードされた前記通常データ処理命令に含まれる前記第２のレジスタ指定情報により前記第２の結果レジスタが指定された場合、指定された前記第２の結果レジスタに対して、デコードされた前記通常データ処理命令に基づく前記第４の処理結果を前記第２の割当レジスタから転送させるデータ格納制御部を有することを特徴とする付記２記載の演算処理装置。
【０５０６】
（付記７）  前記演算処理装置はさらに、
前記集合データ処理命令として、前記第１のデータをキャッシュメモリから読み出し、読み出した前記第１のデータを前記第１の処理結果として出力する処理を、前記第１の処理部に実行させるとともに、前記第２のデータをキャッシュメモリから読み出し、読み出した前記第２のデータを前記第２の処理結果として出力する処理を、前記第２の処理部に実行させる集合データロード命令が、前記命令デコード部によりデコードされたとき、前記第１のデータが前記キャッシュメモリから出力されたことを示す第１の完了信号と、前記第２のデータが前記キャッシュメモリから出力されたことを示す第２の完了信号とを個別に出力する完了報告処理部をさらに有し、
前記データ格納制御部は、前記第１の完了信号と前記第２の完了信号とを受信すると、デコードされた前記集合データロード命令に含まれる前記第１のレジスタ指定情報により指定された前記第１の結果レジスタに対して、当該集合データロード命令に基づく前記第１の処理結果を前記第１の割当レジスタから転送させるとともに、当該第１の結果レジスタと同じレジスタ識別情報を付与された前記第２の結果レジスタに対して、当該集合データロード命令に基づく前記第２の処理結果を前記第２の割当レジスタから転送させる、
ことを特徴とする付記６記載の演算処理装置。
【０５０７】
（付記８）  前記演算処理装置において、
前記集合データ処理命令は、前記第１の処理結果の格納先として、複数の前記第１の結果レジスタから一の第１の結果レジスタを指定する第１のレジスタ指定情報を含み、
前記通常データ処理命令は、処理結果の格納先として、複数の前記第１の結果レジスタおよび複数の前記第２の結果レジスタから一の結果レジスタを指定する第２のレジスタ指定情報を含み、
前記割当レジスタ選択部は、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、デコードされた前記集合データ処理命令に含まれる前記第１のレジスタ指定情報により指定された前記第１の結果レジスタと、選択した前記第１の割当レジスタとを対応付けてレジスタ対応情報に登録するとともに、指定された前記第１の結果レジスタと同じレジスタ識別情報を付与された前記第２の結果レジスタと、選択した前記第２の割当レジスタとを対応付けて前記レジスタ対応情報に登録し、
前記命令デコード部により前記通常データ処理命令がデコードされたとき、デコードされた前記通常データ処理命令に含まれる前記第２のレジスタ指定情報により前記第１の結果レジスタが指定された場合には、指定された前記第１の結果レジスタと、選択した第１の割当レジスタとを対応付けて前記レジスタ対応情報に登録し、デコードされた前記通常データ処理命令に含まれる前記第２のレジスタ指定情報により前記第２の結果レジスタが指定された場合には、指定された前記第２の結果レジスタと、選択した第２の割当レジスタとを対応付けて前記レジスタ対応情報に登録する、
ことを特徴とする付記２記載の演算処理装置。
【０５０８】
（付記９）  前記演算処理装置はさらに、
前記命令デコード部により前記通常データ処理命令がデコードされたとき、前記レジスタ対応情報に基づいて、デコードされた前記通常データ処理命令に対応する前記第３のデータを、複数の前記第１の割当レジスタおよび複数の前記第２の割当レジスタのうち一の割当レジスタから読み出し、当該第３のデータを前記第１の割当レジスタから読み出した場合には当該第３のデータを前記第１の処理部に供給し、当該第３のデータを前記第２の割当レジスタから読み出した場合には当該第３のデータを前記第２の処理部に供給するように制御するデータ読み出し制御部を有することを特徴とする付記８記載の演算処理装置。
【０５０９】
（付記１０）  前記演算処理装置において、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記データ読み出し制御部は、前記レジスタ対応情報に基づいて、デコードされた前記集合データ処理命令に対応する前記第１のデータを複数の前記第１の割当レジスタのうち一の第１の割当レジスタから読み出して前記第１の処理部に供給するように制御するとともに、当該集合データ処理命令に対応する前記第２のデータを複数の前記第２の割当レジスタのうち一の第２の割当レジスタから読み出して前記第２の処理部に供給するように制御することを特徴とする付記９記載の演算処理装置。
【０５１０】
（付記１１）  前記演算処理装置はさらに、
前記通常データ処理命令として、前記第１の処理部または前記第２の処理部に、前記第３のデータを当該演算処理装置に接続された記憶装置に対して記憶する処理を実行させる通常データストア命令が、前記命令デコード部によりデコードされたとき、前記レジスタ対応情報に基づいて、デコードされた前記通常データストア命令に対応する前記第３のデータを、複数の前記第１の割当レジスタおよび複数の前記第２の割当レジスタのうち一の割当レジスタから読み出し、当該第３のデータを前記第１の割当レジスタから読み出した場合には当該第３のデータを前記第１の処理部に供給し、当該第３のデータを前記第２の割当レジスタから読み出した場合には当該第３のデータを前記第２の処理部に供給するように制御するデータ読み出し制御部を有することを特徴とする付記８記載の演算処理装置。
【０５１１】
（付記１２）  前記演算処理装置において、
前記集合データ処理命令として、前記第１の処理部に、前記第１のデータを前記記憶装置に記憶する処理を実行させるとともに、前記第２の処理部に、前記第２のデータを前記記憶装置に記憶する処理を実行させる集合データストア命令が、前記命令デコード部によりデコードされたとき、前記データ読み出し制御部は、前記レジスタ対応情報に基づいて、デコードされた前記集合データストア命令に対応する前記第１のデータを複数の前記第１の割当レジスタのうち一の第１の割当レジスタから読み出して前記第１の処理部に供給するように制御するとともに、当該集合データストア命令に対応する前記第２のデータを複数の前記第２の割当レジスタのうち一の第２の割当レジスタから読み出して前記第２の処理部に供給するように制御することを特徴とする付記１１記載の演算処理装置。
【０５１２】
（付記１３）  前記演算処理装置において、
前記第１の処理部が行う前記第１の処理と、前記第２の処理部が行う前記第２の処理は、同じ処理であることを特徴とする付記１記載の演算処理装置。
【０５１３】
（付記１４）  前記演算処理装置において、
前記第１のデータと前記第２のデータは、ともに同じデータ幅を有することを特徴とする付記１記載の演算処理装置。
【０５１４】
（付記１５）  演算処理装置と、前記演算処理装置に接続される記憶装置とを備えた情報処理装置において、
前記演算処理装置は、
第１のデータおよび第２のデータを有する集合データに対して処理を行う集合データ処理命令をデコードする命令デコード部と、
データを格納する複数の第１の割当レジスタと、
データを格納する複数の第２の割当レジスタと、
前記集合データ処理命令のデコード結果に基づいて、前記複数の第１の割当レジスタから一の第１の割当レジスタを選択するとともに、前記複数の第２の割当レジスタから一の第２の割当レジスタを選択する割当レジスタ選択部と、
前記集合データ処理命令のデコード結果に基づいて、前記第１のデータに対して第１の処理を行い、前記第１の処理の結果である第１の処理結果を前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持させる第１の処理部と、
前記集合データ処理命令のデコード結果に基づいて、前記第２のデータに対して第２の処理を行い、前記第２の処理の結果である第２の処理結果を前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持させる第２の処理部と、
前記第１の割当レジスタに保持された前記第１の処理結果を格納する第１の結果レジスタと、
前記第２の割当レジスタに保持された前記第２の処理結果を格納する第２の結果レジスタと、
を有し、
前記記憶装置は、前記第１のデータおよび前記第２のデータを記憶することを特徴とする情報処理装置。
【０５１５】
（付記１６）  前記情報処理装置において、
前記命令デコード部は、前記第１または第２のデータと同じデータ幅の第３のデータに対して処理を行う通常データ処理命令が入力されたとき、前記通常データ処理命令をデコードしてデコード結果を出力するとともに、前記通常データ処理命令のデコード結果に基づいて前記第１の結果レジスタまたは前記第２の結果レジスタのいずれかを選択し、
前記命令デコード部により前記第１の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第１の割当レジスタから一の第１の割当レジスタを選択し、
前記第１の処理部は、前記第３のデータに対して前記第１の処理を行い、当該第１の処理の結果である第３の処理結果を、前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持させ、
前記第１の結果レジスタは、前記割当レジスタ選択部により選択された前記第１の割当レジスタに保持された前記第３の処理結果を格納し、
前記命令デコード部により前記第２の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第２の割当レジスタから一の第２の割当レジスタを選択し、
前記第２の処理部は、前記第３のデータに対して前記第２の処理を行い、当該第２の処理の結果である第４の処理結果を、前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持させ、
前記第２の結果レジスタは、前記割当レジスタ選択部により選択された前記第２の割当レジスタに保持された前記第４の処理結果を格納する、
ことを特徴とする付記１５記載の情報処理装置。
【０５１６】
（付記１７）  前記情報処理装置において、
前記演算処理装置はさらに、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記第１のデータを前記複数の第１の割当レジスタのうち一の第１の割当レジスタから読み出すとともに、前記第２のデータを前記複数の第２の割当レジスタのうち一の第２の割当レジスタから読み出し、前記命令デコード部により前記通常データ処理命令がデコードされたとき、前記第３のデータを前記複数の第１の割当レジスタおよび前記複数の第２の割当レジスタのうち一の割当レジスタから読み出すデータ読み出し制御部を有することを特徴とする付記１６記載の情報処理装置。
【０５１７】
（付記１８）  演算処理装置が有する命令デコード部が、入力された命令をデコードするとともに、そのデコード結果に基づいて、処理結果の格納先の結果レジスタを選択する命令デコードステップと、
前記演算処理装置が有する割当レジスタ選択部が、前記命令のデコード結果に基づいて、処理結果を一時的に保持する割当レジスタを選択する割当レジスタ選択ステップと、
前記演算処理装置が有する第１の処理部または第２の処理部の少なくとも一方が、前記命令のデコード結果に基づいて、データに対して処理を行い、前記割当レジスタ選択ステップで選択された前記割当レジスタに対して処理結果を保持させるデータ処理ステップと、
前記割当レジスタ選択ステップで選択された前記割当レジスタが保持する前記処理結果を、前記命令デコードステップで選択された前記結果レジスタに格納するデータ格納ステップと、
を有し、
前記命令デコードステップでは、前記命令デコード部は、デコードした命令が、第１のデータおよび第２のデータを有する集合データに対して処理を行う集合データ処理命令である場合、処理結果の格納先として、第１の結果レジスタ群および第２の結果レジスタ群からそれぞれ１つずつ前記結果レジスタを選択し、
前記命令デコードステップにおいて前記集合データ処理命令がデコードされた場合、
前記割当レジスタ選択ステップでは、前記割当レジスタ選択部は、第１の割当レジスタ群および第２の割当レジスタ群からそれぞれ１つずつ前記割当レジスタを選択し、
前記データ処理ステップでは、前記第１の処理部が、前記第１のデータに対して第１の処理を行い、前記第１の処理の結果である第１の処理結果を、前記第１の割当レジスタ群から選択された前記割当レジスタに保持させるとともに、前記第２の処理部が、前記第２のデータに対して第２の処理を行い、前記第２の処理の結果である第２の処理結果を、前記第２の割当レジスタ群から選択された前記割当レジスタに保持させ、
前記データ格納ステップでは、前記第１の割当レジスタ群から選択された前記割当レジスタに保持された前記第１の処理結果を、前記第１の結果レジスタ群から選択された前記結果レジスタに格納するとともに、前記第２の割当レジスタ群から選択された前記割当レジスタに保持された前記第２の処理結果を、前記第２の結果レジスタ群から選択された前記結果レジスタに格納する、
ことを特徴とする演算処理装置の制御方法。
【０５１８】
（付記１９）  前記演算処理装置の制御方法において、
前記命令デコードステップでは、前記命令デコード部は、デコードした命令が、第３のデータに対して処理を行う通常データ処理命令である場合、処理結果の格納先として、前記第１の結果レジスタ群または前記第２のレジスタ群のいずれかから一の前記結果レジスタを選択し、
前記命令デコードステップにおいて、前記通常データ処理命令がデコードされるとともに、前記第１の結果レジスタ群から前記結果レジスタが選択された場合、
前記割当レジスタ選択ステップでは、前記割当レジスタ選択部は、前記第１の割当レジスタ群から一の前記割当レジスタを選択し、
前記データ処理ステップでは、前記第１の処理部が、前記第３のデータに対して前記第１の処理を行い、当該第１の処理の結果である第３の処理結果を、前記第１の割当レジスタから選択された前記割当レジスタに保持させ、
前記データ格納ステップでは、前記第１の割当レジスタ群から選択された前記割当レジスタに保持された前記第３の処理結果を、前記第１の結果レジスタ群から選択された前記結果レジスタに格納し、
前記命令デコードステップにおいて、前記通常データ処理命令がデコードされるとともに、前記第２の結果レジスタ群から前記結果レジスタが選択された場合、
前記割当レジスタ選択ステップでは、前記割当レジスタ選択部は、前記第２の割当レジスタ群から一の前記割当レジスタを選択し、
前記データ処理ステップでは、前記第２の処理部が、前記第３のデータに対して前記第２の処理を行い、当該第２の処理の結果である第４の処理結果を、前記第２の割当レジスタから選択された前記割当レジスタに保持させ、
前記データ格納ステップでは、前記第２の割当レジスタ群から選択された前記割当レジスタに保持された前記第４の処理結果を、前記第２の結果レジスタ群から選択された前記結果レジスタに格納する、
ことを特徴とする付記１８記載の演算処理装置の制御方法。
【０５１９】
（付記２０）  前記演算処理装置の制御方法において、
前記命令デコードステップにおいて前記集合データ処理命令がデコードされた場合、前記データ処理ステップでは、前記演算処理装置が有するデータ読み出し制御部が、前記第１のデータを前記第１の割当レジスタ群のうち一の前記割当レジスタから読み出して、前記第１の処理部に供給するとともに、前記第２のデータを前記第２の割当レジスタ群のうち一の前記割当レジスタから読み出して、前記第２の処理部に供給し、
前記命令デコードステップにおいて前記通常データ処理命令がデコードされた場合、前記データ処理ステップでは、前記データ読み出し制御部が、前記第３のデータを前記第１の割当レジスタ群および前記第２の割当レジスタ群のうち一の前記割当レジスタから読み出し、前記第１の処理部または前記第２の処理部に供給する、
ことを特徴とする付記１９記載の演算処理装置の制御方法。
【符号の説明】
【０５２０】
１  演算処理装置
１１  命令デコード部
１２  割当レジスタ選択部
１３，１４  処理部
１５，１６  割当レジスタ群
１５ａ，１６ａ  割当レジスタ
１７，１８  結果レジスタ群
１７ａ，１８ａ  結果レジスタ
１９  データ格納制御部
【図１】
0005423217.tif 000002
【図２】
0005423217.tif 000003
【図３】
0005423217.tif 000004
【図４】
0005423217.tif 000005
【図５】
0005423217.tif 000006
【図６】
0005423217.tif 000007
【図７】
0005423217.tif 000008
【図８】
0005423217.tif 000009
【図９】
0005423217.tif 000010
【図１０】
0005423217.tif 000011
【図１１】
0005423217.tif 000012
【図１２】
0005423217.tif 000013
【図１３】
0005423217.tif 000014
【図１４】
0005423217.tif 000015
【図１５】
0005423217.tif 000016
【図１６】
0005423217.tif 000017
【図１７】
0005423217.tif 000018
【図１８】
0005423217.tif 000019
【図１９】
0005423217.tif 000020
【図２０】
0005423217.tif 000021
【図２１】
0005423217.tif 000022
【図２２】
0005423217.tif 000023
【図２３】
0005423217.tif 000024
【図２４】
0005423217.tif 000025
【図２５】
0005423217.tif 000026
【図２６】
0005423217.tif 000027
【図２７】
0005423217.tif 000028
【図２８】
0005423217.tif 000029
【図２９】
0005423217.tif 000030
【図３０】
0005423217.tif 000031
【図３１】
0005423217.tif 000032
【図３２】
0005423217.tif 000033
【図３３】
0005423217.tif 000034
【図３４】
0005423217.tif 000035
【図３５】
0005423217.tif 000036
【図３６】
0005423217.tif 000037
【図３７】
0005423217.tif 000038
【図３８】
0005423217.tif 000039
【図３９】
0005423217.tif 000040
【図４０】
0005423217.tif 000041
【図４１】
0005423217.tif 000042
【図４２】
0005423217.tif 000043
【図４３】
0005423217.tif 000044
【図４４】
0005423217.tif 000045
【図４５】
0005423217.tif 000046
【図４６】
0005423217.tif 000047
【図４７】
0005423217.tif 000048
【図４８】
0005423217.tif 000049
【図４９】
0005423217.tif 000050
【図５０】
0005423217.tif 000051
【図５１】
0005423217.tif 000052
【図５２】
0005423217.tif 000053
【図５３】
0005423217.tif 000054
【図５４】
0005423217.tif 000055
【図５５】
0005423217.tif 000056
【図５６】
0005423217.tif 000057
【図５７】
0005423217.tif 000058
【図５８】
0005423217.tif 000059
【図５９】
0005423217.tif 000060
【図６０】
0005423217.tif 000061
【図６１】
0005423217.tif 000062
【図６２】
0005423217.tif 000063
【図６３】
0005423217.tif 000064
【図６４】
0005423217.tif 000065
【図６５】
0005423217.tif 000066
【図６６】
0005423217.tif 000067