以下、図面を参照して実施の形態を詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る演算処理装置の構成を示す図である。
図1に示す演算処理装置1は、例えば、CPUまたはその構成要素の一部(例えばCPUコア)などとして実現される。この演算処理装置1は、命令デコード部11、割当レジスタ選択部12、処理部13,14、割当レジスタ群15,16、結果レジスタ群17,18およびデータ格納制御部19を備えている。
命令デコード部11は、入力された命令をデコードし、デコード結果を出力する。命令デコード部11は、少なくとも、集合データ処理命令と通常データ処理命令をデコード可能である。集合データ処理命令は、一の命令で、複数のデータを有する集合データに対して処理を行うことを要求する命令である。本実施の形態では、集合データのうち2つのデータを、それぞれ第1のデータ、第2のデータと呼ぶ。集合データ処理命令は、例えば“SIMD”と呼ばれる命令である。例えば、集合データ処理命令は、命令のオペランドによって指定されるレジスタから第1のデータおよび第2のデータを取得し、第1のデータを用いた演算などの処理と第2のデータを用いた演算などの処理とをそれぞれ実行することを要求する。ここで、第1のデータと第2のデータは、例えば、ともに同じデータ幅を有する。また、通常データ処理命令は、第1のデータおよび第2のデータと同じデータ幅を有するデータに対して、処理を行うことを要求する命令である。
割当レジスタ選択部12は、命令デコード部11による命令のデコード結果に基づいて、割当レジスタ群15,16内のレジスタを選択する。例えば、命令デコード部11により集合データ処理命令がデコードされた場合、割当レジスタ選択部12は、割当レジスタ15a,16aの両方を選択する。また、命令デコード部11により通常データ処理命令がデコードされた場合、割当レジスタ選択部12は、割当レジスタ15a,16aのいずれか一方を選択する。
処理部13,14は、データに対する演算処理などの処理を実行する。命令デコード部11により集合データ処理命令がデコードされた場合、処理部13は第1のデータに対する処理を実行し、処理部14は第2のデータに対する処理を実行する。また、命令デコード部11により通常データ処理命令がデコードされた場合、処理部13,14のいずれか1つが、処理対象のデータに対する処理を実行する。処理部13,14は、例えば、それぞれ同じ処理を実行する。
割当レジスタ群15は、複数の割当レジスタ15aを備える。また、割当レジスタ群16は、複数の割当レジスタ16aを備える。処理部13による演算結果などの処理結果は、割当レジスタ選択部12により選択された、割当レジスタ群15内の割当レジスタ15aに格納される。また、処理部14による処理結果は、割当レジスタ選択部12により選択された、割当レジスタ群16内の割当レジスタ16aに格納される。
結果レジスタ群17は、複数の結果レジスタ17aを備える。また、結果レジスタ群18は、複数の結果レジスタ18aを備える。結果レジスタ群18は、例えば、結果レジスタ17aと同数の結果レジスタ18aを備える。結果レジスタ群17は、割当レジスタ群15に格納されたデータの入力を受けて、データを格納する。結果レジスタ群18は、割当レジスタ群16に格納されたデータの入力を受けて、データを格納する。
データ格納制御部19は、割当レジスタ群15に格納されたデータを結果レジスタ群17に格納する動作と、割当レジスタ群16に格納されたデータを結果レジスタ群18に格納する動作とを制御する。なお、本実施の形態では、これらのデータ格納動作をデータ格納制御部19が制御するものとするが、これらのデータ格納動作の制御方法として他の方法を採用することもできる。
命令デコード部11に集合データ処理命令が入力されると、演算処理装置1は次のように動作する。
命令デコード部11により集合データ処理命令がデコードされると、割当レジスタ選択部12は、割当レジスタ群15,16から、それぞれ割当レジスタ15a,16aを選択する。また、処理部13は、命令のデコード結果に基づいて、第1のデータに対する処理を実行し、その処理結果を、割当レジスタ選択部12により選択された割当レジスタ15aに格納する。また、処理部14は、命令のデコード結果に基づいて、第2のデータに対する処理を実行し、その処理結果を、割当レジスタ選択部12により選択された割当レジスタ16aに格納する。割当レジスタ15aに格納された処理結果は、データ格納制御部19の制御の下で、結果レジスタ17aに格納される。また、割当レジスタ16aに格納された処理結果は、データ格納制御部19の制御の下で、結果レジスタ18aに格納される。
一方、命令デコード部11に通常データ処理命令が入力されると、演算処理装置1は次のように動作する。
命令デコード部11は、通常データ処理命令をデコードしてデコード結果を出力するとともに、このデコード結果に基づいて結果レジスタ群17,18のいずれか一方を、データ格納先として選択する。
命令デコード部11によりデータ格納先として結果レジスタ群17が選択された場合、割当レジスタ選択部12は、割当レジスタ群15から1つの割当レジスタ15aを選択する。処理部13は、命令のデコード結果に基づいて、通常データ処理命令の処理対象のデータに対して処理を実行し、その処理結果を、割当レジスタ選択部12により選択された割当レジスタ15aに格納する。割当レジスタ15aに格納された処理結果は、データ格納制御部19の制御の下で、結果レジスタ17aに格納される。
一方、命令デコード部11によりデータ格納先として結果レジスタ群18が選択された場合、割当レジスタ選択部12は、割当レジスタ群16から1つの割当レジスタ16aを選択する。処理部14は、命令のデコード結果に基づいて、通常データ処理命令の処理対象のデータに対して処理を実行し、その処理結果を、割当レジスタ選択部12により選択された割当レジスタ16aに格納する。割当レジスタ16aに格納された処理結果は、データ格納制御部19の制御の下で、結果レジスタ18aに格納される。
以上の処理では、集合データ処理命令の実行時には、割当レジスタ選択部12により、割当レジスタ群15,16からレジスタがそれぞれ個別に選択される。そして、選択された割当レジスタ15a,16aに対して、第1のデータを処理した処理結果と、第2のデータを処理した処理結果とがそれぞれ格納される。この構成では、1つの集合データ処理命令の実行時に、それぞれ異なるレジスタ識別情報(例えばアドレス)を有する割当レジスタ15a,16aが選択されてもよい。これにより、割当レジスタ群15,16のレジスタ使用効率を高めることができる。
また、通常データ処理命令がデコードされた場合には、割当レジスタ群15,16のいずれか一方にのみ、処理結果が格納される。従って、演算処理装置1が、集合データ処理命令と通常データ処理命令とが混在するプログラムを実行した場合でも、割当レジスタ群15,16内に無駄な空き領域が生じなくなる。
ところで、処理部13,14での処理結果を格納する結果レジスタ群17,18内のレジスタは、例えば、命令デコード部11がデコードする命令によって指定される。この場合、例えば、命令デコード部11は、命令により処理結果の格納先として指定された結果レジスタ群17,18のレジスタ識別情報を、データ格納制御部19に出力する。データ格納制御部19は、割当レジスタ群15,16に処理結果が格納されると、処理結果を、命令デコード部11からのレジスタ識別情報によって特定される結果レジスタ群17,18内の結果レジスタに格納する。
このような構成の場合、命令デコード部11は、命令の種類に応じて、処理結果の格納先レジスタを次のように指定してもよい。
例えば、集合データ処理命令により結果レジスタ群17内の1つの結果レジスタ17aが指定されたとする。このとき、命令デコード部11は、第2のデータを処理した処理結果の格納先レジスタとして、指定された結果レジスタ17aと同じレジスタ識別情報(例えばアドレス)を有する結果レジスタ18aを指定する。一方、通常データ処理命令では、処理結果の格納先レジスタとして、結果レジスタ群17,18内の任意の結果レジスタが指定される。
このようにすることで、集合データ処理命令がデコードされた場合には、結果レジスタ群17,18の中の同じレジスタ識別情報を有する結果レジスタ17a,18aに、処理結果が格納される。従って、同じレジスタ識別情報を有する2つの結果レジスタ17a,18aを単位として、2つの処理結果を容易に取り扱うことができる。一方、通常データ処理命令では、処理結果の格納先レジスタとして、集合データ処理命令の場合の2倍の結果レジスタを指定することが可能になる。従って、結果レジスタ群17,18のレジスタ使用効率が向上するとともに、プログラムの自由度も高められる。
〔第2の実施の形態〕
第2の実施の形態では、まず、SIMD処理と、SIMD処理を必要としない処理(非SIMD処理)とを実行可能なCPUコアを有する情報処理装置の構成例について説明し、その後に、CPUコアについて詳しく説明する。
図2は、情報処理装置の構成例を示す図である。
図2に示す情報処理装置100aは、CPUやメモリなどを1基板上に搭載したCPU/メモリボード101を備えている。図2のCPU/メモリボード101には、CPU110、DIMM(Dual Inline Memory Module)120およびインターコネクト130が搭載されている。
CPU110は、複数のCPUコア111と、これらのCPUコア111によって共用される2次データキャッシュ112とを備えている。また、各CPUコア111とDIMM120とは直接的に接続されており、これらの間でデータの受け渡しを行うことが可能になっている。DIMM120は、CPU110のメインメモリとして使用される。インターコネクト130は、CPU/メモリボード101と、情報処理装置100a内の他の回路ノードとを接続し、これらの間でデータの転送を行う。
図3は、情報処理装置の別の構成例を示す図である。なお、図3では、図2に対応する構成要素には同じ符号を付して示している。
図3では、同一のCPU/メモリボード上に複数のCPUを備えた情報処理装置の構成例を示している。また、図3の情報処理装置は、このようなCPU/メモリボードを複数備えている。すなわち、図3に示す情報処理装置100bは、例として2つのCPU/メモリボード102,103を備えている。CPU/メモリボード102,103はそれぞれ同じ構成を有しているので、ここではCPU/メモリボード102の構成のみ説明する。
CPU/メモリボード102には、例として2つのCPU110a,110bが搭載されている。CPU110a,110bのそれぞれの内部構成は、図2に示したCPU110と同じである。さらに、CPU/メモリボード102には、システムコントローラ141,142、メモリアクセスコントローラ151,152およびDIMM161,162が搭載されている。
CPU110a,110bは、システムコントローラ141およびメモリアクセスコントローラ151を介して、DIMM161にアクセス可能となっている。また、CPU110a,110bは、システムコントローラ142およびメモリアクセスコントローラ152を介して、DIMM162にアクセス可能となっている。なお、このように、CPUとメモリとをシステムコントローラおよびメモリアクセスコントローラを介して接続する構成とすることで、例えば3つ以上のCPUをCPU/メモリボード上に搭載させることも可能である。
また、CPU/メモリボード102とCPU/メモリボード103とは、クロスバー170によって相互に接続されている。例えば、CPU/メモリボード102のCPU110a,110bは、システムコントローラ142およびクロスバー170を介して、CPU/メモリボード103との間で情報を受け渡すことができる。なお、3つ以上のCPU/メモリボードを、クロスバー170を介して接続することも可能である。
次に、上記のCPU110,110a,110bが備えるCPUコア111の内部構成と動作について説明する。CPUコア111は、SIMD処理と非SIMD処理の両方を実行可能になっている。
図4は、CPUコアの全体の構成例を示す図である。
本実施の形態のCPUコア111は、例として、浮動小数点ロード/浮動小数点演算/浮動小数点ストアを要求するSIMD命令に応じたSIMD処理が可能である。また、SIMD処理としては、例として、8バイト(64ビット)データを2系統並列に処理する2−SIMD処理が実行されるものとする。
このCPUコア111は、命令フェッチアドレス生成器200、分岐予測部220、命令キャッシュ240、命令バッファ260、命令デコーダ280、レジスタリネーミング部300、主記憶オペランドアドレス生成用リザベーションステーション(RSA:Reservation Station for Address generate)320、固定小数点演算用リザベーションステーション(RSE:Reservation Station for Execution)340、浮動小数点演算用リザベーションステーション(RSF:Reservation Station for Floating)360、分岐命令用リザベーションステーション(RSBR:Reservation Station for BRanch)380、コミットスタックエントリ(CSE:Commit Stack Entry)400、アドレス生成部420、1次データキャッシュ部460、ストアバッファ部480、演算器500、SIMD演算器520、固定小数点リネーミングレジスタ540、浮動小数点リネーミングレジスタ560、固定小数点レジスタ580、浮動小数点SIMDレジスタ600、およびプログラムカウンタ620,640を備えている。
命令フェッチアドレス生成器200は、プログラムカウンタ620のカウント値または分岐予測部220からの情報を基に命令アドレスを選択し、命令キャッシュ240に対して命令フェッチリクエストを発行する。分岐予測部220は、RSBR380のエントリを基に分岐予測を行う。命令キャッシュ240は、命令フェッチリクエストに応じた命令を命令バッファ260に格納する。命令バッファ260から命令デコーダ280に対しては、プログラムにより指定された順番通りに、すなわちイン・オーダで命令が供給され、命令デコーダ280は、命令バッファ260から供給された命令をイン・オーダでデコードする。
命令デコーダ280は、デコードした命令の種類に応じて、RSA320、RSE340、RSF360またはRSBR380に対して、必要なエントリを作成する。これとともに、命令デコーダ280は、デコードされたすべての命令に対応するエントリをCSE400に作成する。
レジスタリネーミング部300は、RSA320、RSE340またはRSF360のいずれかにエントリが作成された場合に、命令に応じた処理で使用されるアーキテクチャレジスタのアドレスに、リネーミングレジスタのアドレスを割り当てる。CPUコア111は、ソフトウェアから参照されるアーキテクチャレジスタとして、固定小数点レジスタ580および浮動小数点SIMDレジスタ600を備えている。またリネーミングレジスタとして、固定小数点リネーミングレジスタ540および浮動小数点リネーミングレジスタ560を備えている。固定小数点レジスタ580が使用される場合には、リネーミングレジスタとして固定小数点リネーミングレジスタ540のアドレスが割り当てられる。また、浮動小数点SIMDレジスタ600が使用される場合には、リネーミングレジスタとして浮動小数点リネーミングレジスタ560のアドレスが割り当てられる。割り当てられたリネーミングレジスタのアドレスは、RSA320、RSE340、RSF360およびCSE400などの必要なブロックに対して出力される。
RSA320、RSE340およびRSF360は、保持されたエントリのうち、処理に必要な資源が準備されたものから順次出力し、後段のブロックに対してエントリに対応する処理を実行させる。これにより、命令がアウト・オブ・オーダで実行され、処理結果は固定小数点リネーミングレジスタ540または浮動小数点リネーミングレジスタ560に格納される。
RSA320には、例えば、ロード命令およびストア命令に対応するエントリが格納される。アドレス生成部420は、RSA320からのエントリに基づいてオペランドデータを選択し、選択したデータを基にオペランドアドレスを生成する。
ロード命令の実行時には、アドレス生成部420からのオペランドアドレスは1次データキャッシュ部460に出力される。1次データキャッシュ部460は、アドレス生成部420からのオペランドアドレスに対応するデータを、固定小数点リネーミングレジスタ540または浮動小数点リネーミングレジスタ560に格納する。また、ストア命令の実行時には、アドレス生成部420からのオペランドアドレスはストアバッファ部480に出力される。
RSE340には、例えば、固定小数点演算命令に対応するエントリが格納される。演算器500は、RSE340からのエントリに基づいて、固定小数点演算を実行し、演算結果を固定小数点リネーミングレジスタ540に格納する。また、固定小数点ストア命令の実行時には、演算器500は、演算対象として選択したデータをそのままストアバッファ部480に出力する。この場合、ストアバッファ部480は、1次データキャッシュ部460に対して、アドレス生成部420から出力されたオペランドアドレスを指定して、演算器500から出力されたデータを1次データキャッシュ部460に書き込む。
RSF360には、例えば、浮動小数点演算命令および浮動小数点ストア命令に対応するエントリが格納される。SIMD演算器520は、RSF360からのエントリに基づいて演算対象とするデータを選択し、浮動小数点演算を実行する。浮動小数点演算命令の実行時には、SIMD演算器520の演算結果は浮動小数点リネーミングレジスタ560に格納される。また、浮動小数点ストア命令の実行時には、SIMD演算器520は、演算対象として選択したデータをそのままストアバッファ部480に出力する。この場合、ストアバッファ部480は、1次データキャッシュ部460に対して、アドレス生成部420から出力されたオペランドアドレスを指定して、SIMD演算器520から出力されたデータを1次データキャッシュ部460に書き込む。
RSBR380には、分岐命令に対応するエントリが格納される。RSBR380に格納されたエントリに基づく情報は、分岐予測部220およびプログラムカウンタ640に出力される。
CSE400は、命令デコーダ280によりデコードされたすべての命令に対応するエントリを保持し、各エントリに対応する処理の実行状況を管理して、これらの命令をデコード順、すなわちイン・オーダで完了させる。例えば、CSE400は、次に完了させるべきエントリに対応する処理の結果が、固定小数点リネーミングレジスタ540または浮動小数点リネーミングレジスタ560に格納されたと判定すると、格納されたデータを固定小数点レジスタ580または浮動小数点SIMDレジスタ600に出力させる。これにより、例えば、RSA320、RSE340およびRSF360などによりアウト・オブ・オーダで実行された命令が、イン・オーダで完了する。
固定小数点リネーミングレジスタ540は、CSE400が備えるエントリの数と同じか、それより少ない数のレジスタを有する。一方、後述するように、浮動小数点SIMDレジスタ600が備えるレジスタは、それぞれ同数の基本レジスタおよび拡張レジスタとして区別されている。基本レジスタおよび拡張レジスタは、それぞれ、CSE400が備えるエントリの数と同じか、それより少ない数だけ設けられている。
プログラムカウンタ620は、CSE400により命令が完了されるごとに、そのカウント値をカウントアップする。また、プログラムカウンタ640は、RSBR380からのエントリに基づき、分岐先の命令に対応するカウント値を保持し、そのカウント値でプログラムカウンタ620を更新する。
次に、浮動小数点SIMDレジスタ600に対するレジスタリネーミング処理について説明する。まず、図5は、SIMD命令実行時におけるレジスタリネーミング処理を説明する図である。
図5に示すように、浮動小数点SIMDレジスタ600は、基本レジスタ601および拡張レジスタ602を備えている。基本レジスタ601および拡張レジスタ602は、それぞれ8バイトのビット幅を有し、それぞれ同数だけ設けられている。本実施の形態では、例として、基本レジスタ601および拡張レジスタ602は、それぞれ128個設けられている。なお、0〜127までの同じレジスタ番号を有する基本レジスタ601および拡張レジスタ602は、16バイト(128ビット)のビット幅を有するSIMDレジスタの上位の領域および下位の領域として実現されてもよい。
浮動小数点リネーミングレジスタ560は、基本リネーミングレジスタ561および拡張リネーミングレジスタ562を備えている。基本リネーミングレジスタ561および拡張リネーミングレジスタ562は、それぞれ8バイトの容量を有し、それぞれ同数だけ設けられている。基本リネーミングレジスタ561および拡張リネーミングレジスタ562の数は、CSE400のエントリの数以下とされればよい。
レジスタリネーミング部300は、基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302を備えている。基本レジスタリネーミングマップ301は、基本レジスタ601のそれぞれに対応するエントリを有し、基本レジスタ601のそれぞれに割り当てられた基本リネーミングレジスタ561のレジスタ番号またはアドレスを保持する。また、拡張レジスタリネーミングマップ302は、拡張レジスタ602のそれぞれに対応するエントリを有し、拡張レジスタ602のそれぞれに割り当てられた拡張リネーミングレジスタ562のレジスタ番号またはアドレスを保持する。基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302に対するレジスタ番号またはアドレスの割り当て処理は、命令デコーダ280によって実行される。
SIMD命令が実行された場合、浮動小数点SIMDレジスタ600においては、0〜127までのレジスタ番号のうち同じレジスタ番号を有する基本レジスタ601と拡張レジスタ602とが、セットで使用される。そして、SIMD命令に応じて並列処理される2つの8バイトデータのうち、一方のデータにより基本レジスタ601が使用され、他方のデータにより、基本レジスタ601と同じレジスタ番号を有する拡張レジスタ602が使用される。
例えば、SIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタ600のレジスタ番号“0”が指定された場合、CPUコア111では、SIMD命令により指定された2つの8バイトデータに対して同じ処理が並列に実行される。そして、処理後のデータは、一旦浮動小数点リネーミングレジスタ560に書き込まれた後、浮動小数点SIMDレジスタ600に書き込まれる。この場合、浮動小数点SIMDレジスタ600では、処理された一方の8バイトデータがレジスタ番号“0”の基本レジスタ601に格納され、他方の8バイトデータがレジスタ番号“0”の拡張レジスタ602に格納される。
一方、レジスタリネーミング部300では、同じレジスタ番号を有する基本レジスタ601および拡張レジスタ602に対して、異なるレジスタ番号を有する基本リネーミングレジスタ561および拡張リネーミングレジスタ562をそれぞれ割り当てることが可能になっている。例えば、図5の例では、レジスタ番号“0”の基本レジスタ601に対して、レジスタ番号“0”の基本リネーミングレジスタ561が割り当てられる。一方、レジスタ番号“0”の拡張レジスタ602に対しては、レジスタ番号“2”の拡張リネーミングレジスタ562が割り当てられる。
従って、例えば、SIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタ600のレジスタ番号“0”が指定され、図5のようなリネーミングレジスタの割り当てが行われた場合には、処理された一方の8バイトデータは、レジスタ番号“0”の基本リネーミングレジスタ561に一旦格納される。また、処理された他方の8バイトデータは、レジスタ番号“2”の拡張リネーミングレジスタ562に格納される。そして、レジスタ番号“0”の基本リネーミングレジスタ561へのデータの格納と、レジスタ番号“2”の拡張リネーミングレジスタ562へのデータの格納とがともに完了すると、格納されたそれぞれのデータがレジスタ番号“0”の基本レジスタ601および拡張レジスタ602に転送される。これにより、SIMD命令がイン・オーダで完了する。
図6は、非SIMD命令実行時におけるレジスタリネーミング処理を説明する図である。
非SIMD命令が実行された場合、CPUコア111では、1つの8バイトデータに対して1つの処理が実行される。この場合、浮動小数点SIMDレジスタ600では、基本レジスタ601および拡張レジスタ602は、それぞれ独立したレジスタとして扱われ、これらの256個のレジスタのうち1つが非SIMD処理で使用される。例えば、非SIMD命令では、演算結果を格納するディスティネーションレジスタを指定するディスティネーションオペランドとして、浮動小数点SIMDレジスタ600内の256個のレジスタのうち1つを指定できる。この場合、例えば、ディスティネーションオペランドとして、浮動小数点SIMDレジスタ600内のレジスタが0〜255のレジスタ番号により指定される。
一方、レジスタリネーミング部300では、非SIMD命令により指定された基本レジスタ601または拡張レジスタ602に対して、それぞれ基本リネーミングレジスタ561または拡張リネーミングレジスタ562のレジスタ番号またはアドレスが割り当てられる。図6の例では、レジスタ番号“128”の拡張レジスタ602に対して、レジスタ番号“1”の拡張リネーミングレジスタ562が割り当てられる。
ここで、図7は、浮動小数点SIMDレジスタのそれぞれのビット幅が16バイトに固定されている場合のレジスタリネーミング処理例を説明する参考図である。以下、この図7に示すレジスタリネーミング処理を、図5,図6に示した本実施の形態のレジスタリネーミング処理と対比する。
図7において、浮動小数点SIMDレジスタ600aは、それぞれ16バイトのビット幅を有する。また、浮動小数点リネーミングレジスタ560aは、それぞれ16バイトのビット幅を有する。レジスタリネーミングマップ300aは、浮動小数点SIMDレジスタ600aのそれぞれに対して割り当てられた浮動小数点リネーミングレジスタ560aのレジスタ番号またはアドレスを保持する。
このような構成において、SIMD命令によりディスティネーションオペランドとして浮動小数点SIMDレジスタ600aが指定されると、例えば、処理された一方の8バイトデータは、対応する浮動小数点リネーミングレジスタ560aの前半に格納される。また、処理された他方の8バイトデータは、対応する浮動小数点リネーミングレジスタ560aの後半に格納される。そして、これらの格納処理が完了した後、浮動小数点リネーミングレジスタ560aに格納された2つの8バイトデータが、対応する浮動小数点SIMDレジスタ600aに格納される。
一方、図7の構成において、非SIMD命令が実行された場合には、1つの8バイトデータのみが処理されるため、浮動小数点SIMDレジスタ600a内の半分だけしかデータが格納されない。また、その浮動小数点SIMDレジスタ600aに対して割り当てられた浮動小数点リネーミングレジスタ560aにおいても、同様に半分だけしかデータが格納されない。従って、レジスタの使用効率が悪いという問題がある。
これに対して、図5,図6に示した本実施の形態のレジスタリネーミング処理では、SIMD処理時には、浮動小数点SIMDレジスタ600内の基本レジスタ601および拡張レジスタ602がセットで取り扱われる。一方、非SIMD処理時には、基本レジスタ601および拡張レジスタ602はそれぞれ独立したレジスタとして取り扱われる。このため、SIMD命令/非SIMD命令が実行された場合でも、浮動小数点SIMDレジスタ600内のレジスタを効率よく使用できる。
また、浮動小数点リネーミングレジスタ560では、基本リネーミングレジスタ561および拡張リネーミングレジスタ562において、それぞれ8バイト単位でデータが取り扱われる。従って、非SIMD処理時は、基本リネーミングレジスタ561および拡張リネーミングレジスタ562のうちの1つのレジスタのみが使用される。さらに、SIMD処理時には、同じレジスタ番号を有する基本レジスタ601および拡張レジスタ602に対して、それぞれ異なるレジスタ番号を有する基本リネーミングレジスタ561および拡張リネーミングレジスタ562を割り当てることができる。これにより、SIMD命令/非SIMD命令が混在するプログラムが実行された場合でも、浮動小数点リネーミングレジスタ560内のリネーミングレジスタを効率よく使用できる。
なお、上記の図5,図6の説明では、ディスティネーションオペランドとして浮動小数点SIMDレジスタ600が指定された場合の処理例を示したが、浮動小数点SIMDレジスタ600をソースオペランドとして指定することも可能である。この場合、上記の手法で割り当てられた基本リネーミングレジスタ561および拡張リネーミングレジスタ562から、オペランドデータを読み込むことも可能である。
また、上記の図6の説明では、説明をわかりやすくするために、拡張レジスタ602に対して128〜255のレジスタ番号を付与していた。しかし、以下の説明では、拡張レジスタ602には基本レジスタ601と同じく0〜127のレジスタ番号が付与されるものとする。そして、非SIMD命令では、レジスタ番号0〜127の拡張レジスタ602を、レジスタ番号128〜255によって指定できるものとする。
次に、命令デコーダ280に供給される命令として、浮動小数点ロード命令、浮動小数点演算命令および浮動小数点ストア命令の3種類の例を挙げ、これらの命令を実行するときのCPUコア111の処理について具体的に説明する。
〔浮動小数点ロード命令実行時の処理〕
浮動小数点ロード命令がデコードされると、CPUコア111は、ソースオペランドで指定されるアドレスのデータを読み込み、ディスティネーションオペランドで指定されるレジスタに対して書き込む。浮動小数点ロードのSIMD命令(以下、SIMDロード命令と呼ぶ)の命令コードは、例えば“Simd-load [address] %f127”と記述される。この命令では、ソースオペランドである“[address]”で指定されるアドレスから連続して記録された2つの8バイトデータを読み込むことが要求される。さらに、それらの8バイトデータを、ディスティネーションオペランドである“%f127”で指定される浮動小数点SIMDレジスタ600内の基本レジスタ601および拡張レジスタ602にそれぞれ書き込むことが要求される。“%f127”は、浮動小数点SIMDレジスタ600におけるレジスタ番号“127”を指す。
一方、浮動小数点ロードの非SIMD命令(以下、非SIMDロード命令と呼ぶ)の命令コードは、オペコードが変更される以外は上記と同じ形式で記述される。この命令では、ソースオペランドで指定されるアドレスから1つの8バイトデータを読み込むことが要求される。さらに、それらの8バイトデータを、ディスティネーションオペランドで指定される浮動小数点SIMDレジスタ600内のレジスタに書き込むことが要求される。
SIMDロード命令では、ディスティネーションオペランドにおいて0〜127のレジスタ番号が指定される。これに対して、非SIMDロード命令では、ディスティネーションオペランドにおいて0〜255の浮動小数点SIMDレジスタ600のレジスタ番号を指定可能である。なお、本実施の形態では、例として、命令コード中のソースオペランドは、固定小数点レジスタ580のレジスタ番号により指定されるものとする。
図8は、CPUコアにおいて浮動小数点ロード命令実行時に動作する構成要素を示す図である。
命令デコーダ280は、浮動小数点ロード命令をデコードすると、CSE400およびRSA320に対してエントリを登録する。また、命令デコーダ280は、ロードデータの書き込み先の浮動小数点SIMDレジスタ600に対して、浮動小数点リネーミングレジスタ560を割り当てる。割り当てたレジスタのアドレスは、レジスタリネーミング部300の基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302に登録される。また、割り当てたアドレスは、CSE400およびRSA320の各エントリにも登録される。
さらに、ソースオペランドにより指定されたレジスタ内のデータ(以下、オペランドデータと呼ぶ)が固定小数点リネーミングレジスタ540にも格納されている場合、格納されたアドレスが固定小数点レジスタリネーミングマップ303から取得される。取得されたアドレスは、RSA320のエントリに登録される。
アドレス生成部420は、オペランドデータ選択部430と、オペランドアドレス生成器440とを備える。RSA320から浮動小数点ロード命令に対応するエントリが発行されると、オペランドデータ選択部430は、固定小数点レジスタ580または固定小数点リネーミングレジスタ540から、オペランドデータを取得する。オペランドアドレス生成器440は、オペランドデータ選択部430からのオペランドデータに基づき、オペランドアドレスを生成する。
1次データキャッシュ部460は、キャッシュデータを記憶する1次データキャッシュ461と、1次データキャッシュ461からの出力データを一時的に格納する基本ロードレジスタ462および拡張ロードレジスタ463とを備える。1次データキャッシュ461は、オペランドアドレス生成器440からのオペランドアドレスに対応するデータを、浮動小数点リネーミングレジスタ560に出力する。基本リネーミングレジスタ561に対しては、基本ロードレジスタ462を介してデータが出力され、拡張リネーミングレジスタ562に対しては、拡張ロードレジスタ463を介してデータが出力される。
基本リネーミングレジスタ561に格納されたデータは、CSE400の制御の下で、基本レジスタ601に格納される。また、拡張リネーミングレジスタ562に格納されたデータは、CSE400の制御の下で、拡張レジスタ602に格納される。
以上の構成では、1次データキャッシュ461から基本ロードレジスタ462に出力されたデータは、基本リネーミングレジスタ561に格納された後、基本レジスタ601に格納される。また、1次データキャッシュ461から拡張ロードレジスタ463に出力されたデータは、拡張リネーミングレジスタ562に格納された後、拡張レジスタ602に格納される。以下の説明では、基本ロードレジスタ462、基本リネーミングレジスタ561および基本レジスタ601の順にデータを転送するバスを“基本バス”と呼ぶ。また、拡張ロードレジスタ463、拡張リネーミングレジスタ562および拡張レジスタ602の順にデータを転送するバスを“拡張バス”と呼ぶ。
図9,図10は、浮動小数点ロード命令実行時のパイプラインを説明する図である。
浮動小数点ロード命令実行時のパイプラインは、例えば、順にDサイクル、Pサイクル、Bサイクル、Aサイクル、FTサイクル、FMサイクル、FBサイクル、FRサイクル、CサイクルおよびWサイクルを含む。なお、AサイクルとSTサイクルとの間には、FPサイクルが挿入される場合もある。
Dサイクルは、命令デコードサイクル(Decode cycle)である。このDサイクルでは、命令デコーダ280により浮動小数点ロード命令がデコードされ、そのデコード結果に基づき、CSE400へのエントリ登録処理(ステップS11)およびRSA320へのエントリ登録処理(ステップS12)が実行される。
命令デコーダ280は、主として、ロードデータの書き込み先に関する情報をCSE400のエントリに登録する。例えば、浮動小数点SIMDレジスタ600における書き込み先のアドレスや、基本レジスタ601および拡張レジスタ602をそれぞれ書き込み先とするか否かを示す情報などが登録される。
また、命令デコーダ280は、書き込み先の浮動小数点SIMDレジスタ600に対して浮動小数点リネーミングレジスタ560を割り当て、レジスタリネーミングマップに登録する(ステップS13)。この登録処理では、図5,図6で説明した手法が用いられる。命令デコーダ280は、SIMDロード命令をデコードした場合、書き込み先レジスタに対応する基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302のエントリに対して、それぞれ基本リネーミングレジスタ561および拡張リネーミングレジスタ562の各アドレスを登録する。このとき、基本リネーミングレジスタ561のアドレスと拡張リネーミングレジスタ562のアドレスは、それぞれ異なるアドレスであってよい。図9の例では、割り当てられた基本リネーミングレジスタ561のアドレスを“A”、割り当てられた拡張リネーミングレジスタ562のアドレスを“B”と示している。
命令デコーダ280は、リネーミングマップに割り当てた基本リネーミングレジスタ561および拡張リネーミングレジスタ562の各アドレスを、CSE400のエントリに対しても登録する。さらに、命令デコーダ280は、割り当てた基本リネーミングレジスタ561および拡張リネーミングレジスタ562の各アドレスを、RSA320のエントリに対しても登録する。
一方、命令デコーダ280は、書き込み先レジスタに対応するリネーミングアドレスの他に、ソースデータに関する情報などをRSA320のエントリに登録する。例えば、命令デコーダ280は、ソースオペランドで指定された、ソースデータの読み出しアドレスである固定小数点レジスタ580のアドレスを、RSA320のエントリに登録する。
また、命令デコーダ280から出力された固定小数点レジスタ580のアドレスに対して固定小数点リネーミングレジスタ540が割り当てられていた場合、その固定小数点リネーミングレジスタ540のアドレスが固定小数点レジスタリネーミングマップ303から出力される(ステップS14)。出力された固定小数点リネーミングレジスタ540のアドレスは、RSA320のエントリに登録される。
次に、Pサイクルは、プライオリティサイクル(Priority cycle)である。このPサイクルでは、RSA320におけるデータの待ち合わせ制御が行われる。前述のように、RSA320は、登録されたエントリのうち、必要なデータが揃った順にエントリを発行する。RSA320からオペランドデータ選択部430に対して、浮動小数点ロード命令に対応するエントリが発行されると、Bサイクルに遷移する(ステップS15)。
Bサイクル(Buffer cycle)において、オペランドデータ選択部430は、RSA320から発行されたエントリの内容に基づき、オペランドデータを固定小数点レジスタ580または固定小数点リネーミングレジスタ540から読み込み、オペランドアドレス生成器440に出力する(ステップS16)。
Aサイクルは、オペランドアドレス生成器440によるアドレス生成サイクル(Address cycle)である。オペランドアドレス生成器440は、オペランドデータ選択部430から出力されたオペランドデータに基づき、ロードデータの読み出し元を示すオペランドアドレスを生成し、1次データキャッシュ部460に出力する(ステップS17)。
FT,FM,FBの各サイクル(First cache-Tag cycle, First cache-Match cycle, First cache-Buffer cycle)では、1次データキャッシュ部460において1次データキャッシュ461からロードデータを出力するために必要な制御が実行される(ステップS18)。なお、例えば、2次データキャッシュ112やメインメモリなどからのデータの読み込みが必要な場合などには、FTサイクルの前にFPサイクル(First cache-Priority cycle)が挿入される。オペランドアドレス生成器440から出力されたオペランドアドレスに対応するデータが1次データキャッシュ461に記憶されていた場合、FRサイクルに遷移する。
FRサイクル(First cache-Result cycle)では、RSA320から発行されたエントリに対応する処理の実行が完了される。このFRサイクルでは、1次データキャッシュ461からロードデータが出力され、基本ロードレジスタ462または拡張ロードレジスタ463の少なくとも一方に格納される(ステップS19)。
SIMDロード命令の実行時には、1次データキャッシュ461からそれぞれ8バイトの2つのロードデータが出力され、それぞれ基本ロードレジスタ462および拡張ロードレジスタ463に一旦格納される。なお、図10では、一方の8バイトロードデータを“X(8B)”、他方の8バイトロードデータを“Y(8B)”と表している。そして、基本ロードレジスタ462および拡張ロードレジスタ463へのデータの格納が完了すると、1次データキャッシュ部460は、CSE400に対してデータ格納の完了を報告する(ステップS20)。
次に、基本ロードレジスタ462および拡張ロードレジスタ463に格納された次のサイクルで、基本ロードレジスタ462に格納されたロードデータが、基本リネーミングレジスタ561上の割り当てられたアドレスに格納される。また、拡張ロードレジスタ463に格納されたロードデータが、拡張リネーミングレジスタ562上の割り当てられたアドレスに格納される(ステップS21)。
なお、RSA320から1次データキャッシュ部460に対しては、オペランドデータ選択部430およびオペランドアドレス生成器440を介して、ロードデータ格納先の基本リネーミングレジスタ561および拡張リネーミングレジスタ562のうちの少なくとも一方のアドレスと、これらのレジスタにロードデータを格納するバスを指定する信号とが伝達される。1次データキャッシュ部460は、これらの情報および信号に基づき、1次データキャッシュ461から出力したロードデータを、基本リネーミングレジスタ561および拡張リネーミングレジスタ562の対応する位置に書き込むことが可能になる。
ところで、ロードデータは通常、1次データキャッシュ461上の連続するアドレス領域に格納される。このため、通常は、一方のロードデータが基本ロードレジスタ462に出力された後、連続して他方のロードデータが拡張ロードレジスタ463に出力される。しかし、例えば、2つのロードデータのうち一方しか1次データキャッシュ461に記憶されておらず、他方のロードデータについてはメインメモリに近いより下層の記憶領域からデータを読み込まなくてはならない場合が考えられる。例えば、図10において、ロードデータ“Y(8B)”が、ロードデータ“X(8B)”が記憶されたラインの次のラインに格納された場合などに、上記の状態となり得る。
このような場合には、基本ロードレジスタ462へのロードデータの格納タイミングと、拡張ロードレジスタ463へのロードデータの格納タイミングとの間に間隔が空いてもよい。1次データキャッシュ部460は、基本ロードレジスタ462へのロードデータの格納時と、拡張ロードレジスタ463へのロードデータの格納時とで、それぞれ個別にCSE400に対して完了報告を行う。また、CSE400は、基本ロードレジスタ462と拡張ロードレジスタ463のうち、両方へのデータの格納が必要か、あるいはいずれか1つへのデータの格納が必要かを、エントリを用いて管理する。このような構成により、基本ロードレジスタ462へのロードデータの格納タイミングと、拡張ロードレジスタ463へのロードデータの格納タイミングとの間に間隔が空いた場合でも、CSE400は命令の完了を正確に判定できる。
Cサイクルは、命令完了サイクル(Commit cycle)である。CSE400は、浮動小数点ロード命令が完了したと判定する(ステップS22)。Wサイクルは、レジスタ更新サイクル(Write cycle)である。Wサイクルでは、基本リネーミングレジスタ561に格納されたロードデータが、基本レジスタ601上の対応するアドレスに格納される。また、拡張リネーミングレジスタ562に格納されたロードデータが、拡張レジスタ602上の対応するアドレスに格納される。これらの格納動作は、CSE400によって制御される(ステップS23)。
SIMDロード命令の実行時には、基本リネーミングレジスタ561と拡張リネーミングレジスタ562の両方にロードデータが格納される。従って、CSE400は、これら2つのロードデータを、それぞれ基本レジスタ601および拡張レジスタ602における同じレジスタ番号の位置に格納する。なお、CSE400のエントリには、基本レジスタ601および拡張レジスタ602のレジスタ番号と、これらに割り当てられた基本リネーミングレジスタ561および拡張リネーミングレジスタ562の各アドレスとが保持される。従って、CSE400は、エントリ内のこれらの情報に基づき、基本レジスタ601および拡張レジスタ602へのロードデータの格納処理を制御する。
図11,図12は、非SIMDロード命令実行時のデータの流れを説明する図である。これらの図を用いて、SIMDロード命令実行時との動作の違いについて説明する。
非SIMDロード命令では、ロードデータの書き込み先として、基本レジスタ601および拡張レジスタ602の中の1つのレジスタのみが指定される。Dサイクルにおいて、命令デコーダ280は、非SIMDロード命令をデコードすると、ロードデータの書き込み先として指定された1つのレジスタに対して、リネーミングレジスタを割り当てる。図11では、ロードデータの書き込み先として拡張レジスタ602の1つが指定された場合を示している。この場合には、拡張レジスタリネーミングマップ302内の対応する位置に、命令デコーダ280によって割り当てられた、拡張リネーミングレジスタ562のアドレスが登録される。
RSA320からエントリが発行された後、Bサイクルでは、オペランドデータ選択部430は、固定小数点レジスタ580または固定小数点リネーミングレジスタ540からオペランドデータを選択する。Aサイクルでは、オペランドアドレス生成器440は、オペランドデータ選択部430からのオペランドデータに基づいてオペランドアドレスを生成し、1次データキャッシュ部460に出力する。FRサイクルでは、1次データキャッシュ461は、8バイトのロードデータを1つだけ出力する。図11,図12の例では、1次データキャッシュ461からのロードデータは拡張ロードレジスタ463に格納される。そして、次のCサイクルで、拡張ロードレジスタ463に格納されたロードデータは、拡張リネーミングレジスタ562内の対応する位置に格納される。
後述するように、命令デコーダ280からは、RSA320、オペランドデータ選択部430、オペランドアドレス生成器440を通じて、1次データキャッシュ部460に対して、データの転送に基本バスを使用するか否か、および拡張バスを使用するか否かをそれぞれ示すバス指定信号が伝達される。1次データキャッシュ部460は、伝達されたバス指定信号に従って、1次データキャッシュ461から読み出したロードデータを、基本ロードレジスタ462および拡張ロードレジスタ463に対して振り分けることができる。
CSE400は、拡張ロードレジスタ463への格納動作の完了報告に基づき、命令の完了を判定する。次のWサイクルでは、CSE400の制御の下で、拡張リネーミングレジスタ562に格納されたロードデータが、拡張レジスタ602内の対応する位置に格納される。
上記の非SIMDロード命令実行時の動作において、浮動小数点リネーミングレジスタ560内のレジスタは、8バイト単位の独立したレジスタとして取り扱われる。また、Wサイクルでは、浮動小数点SIMDレジスタ600内のレジスタは、8バイト単位の独立したレジスタとして取り扱われる。従って、浮動小数点リネーミングレジスタ560および浮動小数点SIMDレジスタ600においては、使用不可能となる無駄な記憶領域が発生しなくなり、記憶領域の使用効率が向上する。
次に、浮動小数点ロード命令実行時に動作する各ブロックの詳細な構成を示すとともに、それらのブロック間での信号の流れについて説明する。
図13は、浮動小数点ロード命令実行時の命令デコーダの出力信号を示す図である。
命令デコーダ280は、命令デコード回路281、制御信号生成回路282、基本リネーミングレジスタ割り当て回路283、拡張リネーミングレジスタ割り当て回路284およびCSE割り当て回路285を備えている。なお、命令デコーダ280は後述するように、ストアバッファ割り当て回路をさらに備えているが、浮動小数点ロード命令の実行時には使用されないため、図13では省略している。また、図13では、浮動小数点ロード命令の実行時のDサイクルにおいて出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
命令デコード回路281は、命令バッファ260から出力された命令をデコードする。命令デコード回路281は、浮動小数点ロード命令をデコードすると、浮動小数点ロード命令であることを示す制御信号D_LOADをオンにする。制御信号D_LOADは、RSA320に出力される。
また、命令デコード回路281は、ロードデータの書き込み先の浮動小数点SIMDレジスタ600のアドレスを示すアドレス信号D_WR_ADRを、基本レジスタリネーミングマップ301、拡張レジスタリネーミングマップ302、CSE400および制御信号生成回路282に出力する。アドレス信号D_WR_ADRは、0〜127の値をとる。
また、命令デコード回路281は、オペランドデータの読み出し元の固定小数点レジスタ580のアドレスを示すアドレス信号D_R1_GPR_ADR,D_R2_GPR_ADRを、固定小数点レジスタリネーミングマップ303およびRSA320に対して出力する。
また、命令デコード回路281は、ロードデータの格納先として基本レジスタ601および拡張レジスタ602がそれぞれ指定されたか否かを示すD_USE_BASIC,D_USE_EXTENDを、制御信号生成回路282に対して出力する。
制御信号生成回路282は、命令デコード回路281からのアドレス信号D_WR_ADRを受信すると、次の信号を出力する。
制御信号D_FP_USE_BASICは、ロードデータの転送に基本バスを使用するか否かを示す信号であり、制御信号D_FP_USE_EXTENDは、ロードデータの転送に拡張バスを使用するか否かを示す信号である。制御信号D_FP_USE_BASIC,D_FP_USE_EXTENDは、ともにCSE400およびRSA320に対して出力される。
制御信号D_FPR_WR_BASICは、ロードデータの書き込み先が基本レジスタ601であるか否かを示す信号であり、CSE400、基本レジスタリネーミングマップ301および基本リネーミングレジスタ割り当て回路283に出力される。制御信号D_FPR_WR_EXTENDは、ロードデータの書き込み先が拡張レジスタ602であるか否かを示す信号であり、CSE400、拡張レジスタリネーミングマップ302および拡張リネーミングレジスタ割り当て回路284に出力される。
制御信号D_REL_RSAは、RSA320に対してエントリの作成を要求する信号である。制御信号D_REL_CSEは、CSE400に対してエントリの作成を要求する信号であり、CSE400とともに、CSE割り当て回路285に対しても出力される。
基本リネーミングレジスタ割り当て回路283は、制御信号D_FPR_WR_BASICがオンのとき、ロードデータの書き込み先の基本レジスタ601に、基本リネーミングレジスタ561の空きアドレスを割り当てる。基本リネーミングレジスタ割り当て回路283からは、割り当てたアドレスを示すアドレス信号D_RD_FUB_ADR_BASICが、基本レジスタリネーミングマップ301、CSE400およびRSA320に対して出力される。
拡張リネーミングレジスタ割り当て回路284は、制御信号D_FPR_WR_EXTENDがオンのとき、ロードデータの書き込み先の拡張レジスタ602に、拡張リネーミングレジスタ562の空きアドレスを割り当てる。拡張リネーミングレジスタ割り当て回路284からは、割り当てたアドレスを示すアドレス信号D_RD_FUB_ADR_EXTENDが、拡張レジスタリネーミングマップ302、CSE400およびRSA320に対して出力される。
なお、本実施の形態では、例として、基本リネーミングレジスタ561および拡張リネーミングレジスタ562は、それぞれ32個のレジスタを有するものとする。従って、アドレス信号D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDは、それぞれ5ビットの信号である。
CSE割り当て回路285は、制御信号D_REL_CSEが出力されたとき、CSE400に登録するエントリを識別するエントリ識別信号D_IIDを割り当てる。エントリ識別信号D_IIDは、すべての命令のデコード順に割り当てられ、CSE400に出力される。なお、本実施の形態は、例として、CSE400のエントリ数を32個とする。従って、エントリ識別信号D_IIDは5ビットの信号である。
図14は、浮動小数点ロード命令デコード時における命令デコーダでの信号出力処理手順を示すフローチャートである。
[ステップS31]命令デコード回路281は、命令をデコードし、オペレーションコードを判定する。デコードした命令がSIMDロード命令であった場合には、ステップS32の処理が実行され、非SIMD命令であった場合には、ステップS34の処理が実行される。
[ステップS32]命令デコード回路281は、ディスティネーションオペランドに記述されていたレジスタ番号を示すアドレス信号D_WR_ADRを出力する。また、命令デコード回路281は、制御信号D_USE_BASIC,D_USE_EXTENDを、ともにオンにする。
[ステップS33]制御信号生成回路282は、命令デコード回路281からの制御信号D_USE_BASIC,D_USE_EXTENDがともにオンであると判定する。そして、この判定結果に応じて、制御信号D_FP_USE_BASIC,D_FP_USE_EXTEND,D_FPR_WR_BASIC,D_FPR_WR_EXTENDを、すべてオンにする。
基本リネーミングレジスタ割り当て回路283は、制御信号D_FPR_WR_BASICがオンになったことに応じて、基本リネーミングレジスタ561の空きアドレスを割り当てる。そして、そのアドレスを示すアドレス信号D_RD_FUB_ADR_BASICを出力する。また、拡張リネーミングレジスタ割り当て回路284は、制御信号D_FPR_WR_EXTENDがオンになったことに応じて、拡張リネーミングレジスタ562の空きアドレスを割り当る。そして、そのアドレスを示すアドレス信号D_RD_FUB_ADR_EXTENDを出力する。
[ステップS34]命令デコード回路281は、デコードした非SIMD命令のディスティネーションオペランドに記述されていたレジスタ番号が、“127”以下であるか否かを判定する。レジスタ番号が“127”以下である場合、ステップS35の処理が実行され、レジスタ番号が“127”より大きい場合、ステップS37の処理が実行される。
[ステップS35]命令デコード回路281は、ディスティネーションオペランドに記述されていたレジスタ番号を示すアドレス信号D_WR_ADRを出力する。また、命令デコード回路281は、制御信号D_USE_BASICをオンにし、制御信号D_USE_EXTENDをオフにする。
[ステップS36]制御信号生成回路282は、命令デコード回路281からの制御信号D_USE_BASICがオンであり、制御信号D_USE_EXTENDがオフであると判定する。そして、この判定結果に応じて、制御信号D_FP_USE_BASIC,D_FPR_WR_BASICをともにオンにとし、制御信号D_FP_USE_EXTEND,D_FPR_WR_EXTENDをともにオフにする。
基本リネーミングレジスタ割り当て回路283は、制御信号D_FPR_WR_BASICがオンになったことに応じて、基本リネーミングレジスタ561の空きアドレスを割り当てる。そして、そのアドレスを示すアドレス信号D_RD_FUB_ADR_BASICを出力する。なお、拡張リネーミングレジスタ割り当て回路284からは、アドレス信号D_RD_FUB_ADR_EXTENDは出力されない。
[ステップS37]命令デコード回路281は、デコードした非SIMD命令のディスティネーションオペランドに記述されていたレジスタ番号から“128”を減算して、減算結果を新たなレジスタ番号とすることによりレジスタ番号の値を変換する。なお、この処理では例えば、減算処理の代わりに、ビットシフト処理や、上位ビットのみを出力する処理などを適用することも可能である。
[ステップS38]命令デコード回路281は、ステップS37で変換したレジスタ番号を示すアドレス信号D_WR_ADRを出力する。また、命令デコード回路281は、制御信号D_USE_BASICをオフにし、制御信号D_USE_EXTENDをオンにする。
[ステップS39]制御信号生成回路282は、命令デコード回路281からの制御信号D_USE_BASICがオフであり、制御信号D_USE_EXTENDがオンであると判定する。そして、この判定結果に応じて、制御信号D_FP_USE_BASIC,D_FPR_WR_BASICをともにオフにし、制御信号D_FP_USE_EXTEND,D_FPR_WR_EXTENDをともにオンにする。
拡張リネーミングレジスタ割り当て回路284は、制御信号D_FPR_WR_EXTENDがオンになったことに応じて、拡張リネーミングレジスタ562の空きアドレスを割り当てる。そして、そのアドレスを示すアドレス信号D_RD_FUB_ADR_EXTENDを出力する。なお、基本リネーミングレジスタ割り当て回路283からは、アドレス信号D_RD_FUB_ADR_BASICは出力されない。
なお、ステップS33,S36,S39では、制御信号D_REL_RSA,D_REL_CSE、およびエントリ識別信号D_IIDも出力される。
以上の図14の処理により、浮動小数点ロード命令の実行時に使用されるレジスタの種類が割り当てられ、後段のブロックにおいて、処理に使用されるレジスタを正確に特定できるようになる。例えば、制御信号D_FP_USE_BASIC,D_FP_USE_EXTENDとアドレス信号D_WR_ADRとから、ロードデータの書き込み先レジスタのアドレスを特定できるようになる。
図15は、浮動小数点ロード命令実行時のレジスタリネーミング部の入出力信号を示す図である。なお、図15では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
レジスタリネーミング部300は、前述の基本レジスタリネーミングマップ301、拡張レジスタリネーミングマップ302および固定小数点レジスタリネーミングマップ303に加えて、リネーミングマップ登録回路304〜306および読み出し回路307〜309を備える。リネーミングマップ登録回路304〜306は、それぞれ基本レジスタリネーミングマップ301、拡張レジスタリネーミングマップ302および固定小数点レジスタリネーミングマップ303に対するデータの登録を行う。読み出し回路307〜309は、それぞれ基本レジスタリネーミングマップ301、拡張レジスタリネーミングマップ302および固定小数点レジスタリネーミングマップ303に登録されたデータの読み出しを行う。
Dサイクルにおいては、命令デコーダ280から出力された、ロードデータの書き込み先レジスタを示すアドレス信号D_WR_ADRが、リネーミングマップ登録回路304,305に入力される。また、命令デコーダ280から出力された制御信号D_FPR__WR_BASICおよびアドレス信号D_RD_FUB_ADR_BASICが、リネーミングマップ登録回路304に入力される。また、命令デコーダ280から出力された制御信号D_FPR_WR_EXTENDおよびアドレス信号D_RD_FUB_ADR_EXTENDが、リネーミングマップ登録回路305に入力される。
リネーミングマップ登録回路304は、制御信号D_FPR_WR_BASICがオンである場合に、基本レジスタリネーミングマップ301内のアドレス信号D_WR_ADRに対応するエントリに対して、アドレス信号D_RD_FUB_ADR_BASICが示すアドレスを登録する。すなわち、ロードデータの書き込み先として基本レジスタ601が指定されていた場合に、そのレジスタ番号に割り当てた基本リネーミングレジスタ561のアドレスが、基本レジスタリネーミングマップ301に登録される。
リネーミングマップ登録回路305は、制御信号D_FPR_WR_EXTENDがオンである場合に、拡張レジスタリネーミングマップ302内のアドレス信号D_WR_ADRに対応するエントリに対して、アドレス信号D_RD_FUB_ADR_EXTENDが示すアドレスを登録する。すなわち、ロードデータの書き込み先として拡張レジスタ602が指定されていた場合に、そのレジスタ番号に割り当てた拡張リネーミングレジスタ562のアドレスが、拡張レジスタリネーミングマップ302に登録される。
読み出し回路309には、命令デコーダ280から出力された、オペランドデータの読み出し元アドレスを示すアドレス信号D_R1_GPR_ADR,D_R2_GPR_ADRが入力される。読み出し回路309は、アドレス信号D_R1_GPR_ADR,D_R2_GPR_ADRがそれぞれ示すアドレスに対応する固定小数点レジスタリネーミングマップ303のエントリを参照する。そして、参照したエントリが有効である場合には、割り当てられたアドレスを読み出し、アドレス信号をRSA320に出力する。アドレス信号D_R1_GUB_ADRは、アドレス信号D_R1_GPR_ADRに割り当てられたリネーミングレジスタのアドレスを示し、アドレス信号D_R2_GUB_ADRは、アドレス信号D_R2_GPR_ADRに割り当てられたリネーミングレジスタのアドレスを示す。
Wサイクルにおいては、CSE400から出力されたアドレス信号W_FPR_ADRが基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302に入力される。また、CSE400から出力されたアドレス信号W_FUB_ADR_BASIC,W_FUB_ADR_EXTENDが、それぞれ基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302に入力される。また、CSE400から出力された制御信号W_FPR_WR_BASIC,W_FPR_WR_EXTENDが、それぞれ基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302に入力される。アドレス信号W_FPR_ADRは、基本レジスタ601および拡張レジスタ602のアドレスを示す。
Wサイクルでは、制御信号W_FPR_WR_BASICがオンのとき、アドレス信号W_FPR_ADRに対応する基本レジスタリネーミングマップ301に格納された基本リネーミングレジスタ561のアドレスと、アドレス信号W_FUB_ADR_BASICの値とが一致した場合に、アドレス信号W_FPR_ADRに対応する基本レジスタリネーミングマップ301のエントリが無効になる。これにより、アドレス信号W_FPR_ADRに対応する基本レジスタ601へのリネーミングレジスタの割り当てが終了される。また、Wサイクルでは、制御信号W_FPR_WR_EXTENDがオンのとき、アドレス信号W_FPR_ADRに対応する拡張レジスタリネーミングマップ302に格納された拡張リネーミングレジスタ562のアドレスと、アドレス信号W_FUB_ADR_EXTENDの値とが一致した場合に、アドレス信号W_FPR_ADRに対応する拡張レジスタリネーミングマップ302のエントリが無効になる。これにより、アドレス信号W_FPR_ADRに対応する拡張レジスタ602へのリネーミングレジスタの割り当てが終了される。
なお、浮動小数点ロード命令の実行時には、リネーミングマップ登録回路306および読み出し回路307,308は動作しない。
図16は、浮動小数点ロード命令実行時のCSEの入出力信号を示す図である。なお、図16では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
CSE400は、エントリ記憶回路401、エントリ生成回路402、ロード/ストア実行完了受け付け回路403、演算実行完了エントリ選択回路404、完了エントリ選択回路405、完了判定回路406および信号出力回路407を備える。なお、浮動小数点ロード命令の実行時には、演算実行完了エントリ選択回路404は動作しない。
Dサイクルにおいて、エントリ生成回路402は、命令デコーダ280から制御信号D_REL_CSEを受信すると、命令デコーダ280からのエントリ識別信号D_IIDに対応するエントリを1つ作成し、エントリ記憶回路401に登録する。また、Dサイクルにおいて、SIMDロード命令がデコードされた場合には、エントリ生成回路402には、命令デコーダ280からの制御信号D_FP_USE_BASIC,D_FP_USE_EXTEND,D_FPR_WR_BASIC,D_FPR_WR_EXTEND、およびアドレス信号D_WR_ADR,D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDが入力される。エントリ生成回路402は、これらの信号を基にエントリに情報を登録する。
ロード/ストア実行完了受け付け回路403は、FRサイクルにおいて、1次データキャッシュ部460からロードデータの出力が完了したことを示す制御信号を受け付ける。この制御信号としては、それぞれ基本ロードレジスタ462および拡張ロードレジスタ463へのロードデータの出力が完了したことを示す制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTENDと、ロードデータの出力処理に対応するCSE400のエントリを識別するエントリ識別信号FR_FP_COMP_IIDとが入力される。ロード/ストア実行完了受け付け回路403は、これらの制御信号およびエントリ識別信号の入力に応じて、エントリ記憶回路401内の対応するエントリに情報を書き込む。
完了エントリ選択回路405は、Cサイクルにおいて、エントリ記憶回路401に登録された先頭のエントリを、完了判定回路406に読み出す。完了判定回路406は、読み出されたエントリに基づき、そのエントリに対応する処理の実行が完了しているか否かを判定する。完了エントリ選択回路405は、エントリの内容に基づき、エントリに対応する処理の実行が完了するまで待機し、処理の実行が完了したと判定すると、信号出力回路407に対してエントリ内の情報を受け渡して、制御信号やアドレス信号の出力を要求する。これにより、命令の実行がイン・オーダで完了することになる。
信号出力回路407は、Wサイクルにおいて、次の信号を出力する。制御信号W_FPR_WR_BASICは、基本リネーミングレジスタ561に格納されたデータを基本レジスタ601に書き込むことを要求する信号である。制御信号W_FPR_WR_EXTENDは、拡張リネーミングレジスタ562に格納されたデータを拡張レジスタ602に書き込むことを要求する信号である。アドレス信号W_FPR_ADRは、基本レジスタ601および拡張レジスタ602におけるデータの書き込みアドレスを示す信号である。アドレス信号W_FUB_ADR_BASICは、基本リネーミングレジスタ561におけるデータの読み出しアドレスを示す信号である。アドレス信号W_FUB_ADR_EXTENDは、拡張リネーミングレジスタ562におけるデータの読み出しアドレスを示す信号である。
制御信号W_FPR_WR_BASIC,W_FPR_WR_EXTENDとアドレス信号W_FPR_ADRは、Wサイクルにおいて、浮動小数点SIMDレジスタ600およびレジスタリネーミング部300に出力される。アドレス信号W_FUB_ADR_BASICとアドレス信号W_FUB_ADR_EXTENDは、Wサイクルにおいて、浮動小数点リネーミングレジスタ560およびレジスタリネーミング部300に出力される。これらの信号を用いた制御により、浮動小数点SIMDレジスタ600の更新とレジスタリネーミングマップのエントリの無効化を行う。
図17は、CSEのエントリの内容を示す図である。
浮動小数点ロード命令に対応するCSE400の1つのエントリは、次の信号およびアドレスが登録される。信号Vは、エントリが有効か否かを示す。信号BASIC_FP_USE,EXTEND_FP_USEは、ロードデータの書き込み時にそれぞれ基本バス、拡張バスを使用するか否かを示す。Dサイクルにおいて、信号BASIC_FP_USEは、命令デコーダ280からの制御信号D_FP_USE_BASICに応じた値をとる。また、信号EXTEND_FP_USEは、命令デコーダ280からの制御信号D_FP_USE_EXTENDに応じた値をとる。
アドレスBASIC_RD_ADR,EXTEND_RD_ADRは、それぞれ基本リネーミングレジスタ561および拡張リネーミングレジスタ562のアドレスを示す。Dサイクルにおいて、アドレスBASIC_RD_ADRには、命令デコーダ280により割り当てられたD_RD_FUB_ADR_BASICに応じた値が登録される。また、アドレスEXTEND_RD_ADRには、命令デコーダ280により割り当てられたアドレス信号D_RD_FUB_ADR_EXTENDに応じた値が登録される。
アドレスWR_ADRは、浮動小数点SIMDレジスタ600における書き込みアドレスを示す。アドレスWR_ADRは、命令デコーダ280からのアドレス信号D_WR_ADRに応じた値が登録される。前述のように、SIMD命令が実行される場合、浮動小数点SIMDレジスタ600内の同じレジスタ番号を有する基本レジスタ601および拡張レジスタ602がセットで使用される。このため、アドレスWR_ADRは、基本レジスタ601および拡張レジスタ602に対して共通に使用される。
信号BASIC_WR,EXTEND_WRは、それぞれ基本レジスタ601および拡張レジスタ602に対するデータの書き込みが必要であることを示す。Dサイクルにおいて、信号BASIC_WRは、命令デコーダ280からの制御信号D_FPR_WR_BASICに応じた値をとる。また、信号EXTEND_WRは、命令デコーダ280からの制御信号D_FPR_WR_EXTENDに応じた値をとる。
信号TAGは、その他のタグ信号である。信号BASIC_FP_COMP,EXTEND_FP_COMPは、それぞれ基本ロードレジスタ462および拡張ロードレジスタ463へのデータの格納が完了したことを示す信号である。FRサイクルにおいて、信号BASIC_FP_COMPは、1次データキャッシュ部460からの制御信号FR_FP_COMP_BASICに応じた値をとる。また、信号EXTEND_FP_COMPは、1次データキャッシュ部460からの制御信号FR_FP_COMP_EXTENDに応じた値をとる。信号COMPは、その他の完了信号である。
図18は、浮動小数点ロード命令実行時のRSAの入出力信号を示す図である。なお、図18では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
RSA320は、エントリ記憶回路321、エントリ生成回路322、オペランドデータ待ち回路323、エントリ選択回路324およびエントリ出力回路325を備える。
Dサイクルにおいて、エントリ生成回路322は、命令デコーダ280から制御信号D_REL_RSAを受信し、命令デコーダ280からのエントリ識別信号D_IIDに対応するエントリを1つ作成し、エントリ記憶回路321に登録する。エントリ生成回路322は、制御信号D_REL_RSAを受信したとき、浮動小数点ロード命令用のエントリを作成する。
このとき、エントリ生成回路322には、命令デコーダ280からのアドレス信号D_R1_GPR_ADR,D_R2_GPR_ADRが入力される。
また、SIMDロード命令がデコードされた場合には、エントリ生成回路322には、命令デコーダ280からの制御信号D_FP_USE_BASIC,D_FP_USE_EXTEND、アドレス信号D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDが入力される。ただし、非SIMD命令がデコードされた場合には、制御信号D_FP_USE_BASIC,D_FP_USE_EXTENDのうちの一方と、アドレス信号D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDの一方とが、それぞれオンになる。
また、ソースオペランドの読み出し元レジスタがリネーミングされていた場合には、エントリ生成回路322には、固定小数点レジスタリネーミングマップ303からのアドレス信号D_R1_GUB_ADR,D_R2_GUB_ADRが入力される。
オペランドデータ待ち回路323は、Pサイクルにおいて、アドレス信号D_R1_GPR_ADR,D_R2_GPR_ADRで指定されるオペランドデータの待ち合わせ制御を行う。エントリ選択回路324は、エントリ記憶回路321に登録されたエントリのうち、必要なデータの準備が整ったエントリの中で最も古いエントリを選択して、エントリ出力回路325に出力する。
エントリ選択回路324から浮動小数点ロード命令に対応するエントリが出力されると、エントリ出力回路325は、次の信号をオペランドデータ選択部430に対して出力する。制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDは、ロードデータの転送にそれぞれ基本バス、拡張バスを使用することを示す。アドレス信号B_R1_GPR_ADR,B_R2_GPR_ADRは、オペランドデータの読み出し元アドレスを示す。アドレス信号B_FP_DST_FUB_ADR_BASIC,B_FP_DST_FUB_ADR_EXTENDは、それぞれロードデータの書き込み先の基本リネーミングレジスタ561および拡張リネーミングレジスタ562のアドレスを示す。
エントリ識別信号B_FP_IIDは、CSE400のエントリを識別する信号である。制御信号B_FP_LOADは、浮動小数点ロード命令であることを示す信号である。アドレス信号B_EAG_R1_GUB_ADR,B_EAG_R2_GUB_ADRは、固定小数点リネーミングレジスタ540におけるオペランドデータの読み出しアドレスを示す。制御信号B_EAG_R1_INGATE,B_EAG_R2_INGATEは、オペランドデータ選択部430においてオペランドデータを選択するデータを示す信号である。
図19は、浮動小数点ロード命令実行時におけるRSAのエントリの内容を示す図である。
浮動小数点ロード命令実行時にRSA320に登録される1つのエントリは、次の信号およびアドレスが登録される。信号Vは、エントリが有効か否かを示す。信号BASIC_FP_USE,EXTEND_FP_USEは、ロードデータの書き込み先としてそれぞれ基本バス,拡張バスを使用するか否かを示す。Dサイクルにおいて、信号BASIC_FP_USEは、命令デコーダ280からの制御信号D_FP_USE_BASICに応じた値をとる。また、信号EXTEND_FP_USEは、命令デコーダ280からの制御信号D_FP_USE_EXTENDに応じた値をとる。従って、SIMDロード命令の実行時には、信号BASIC_FP_USE,EXTEND_FP_USEの両方がオンになり、非SIMDロード命令の実行時には、信号BASIC_FP_USE,EXTEND_FP_USEのうち一方のみオンになる。また、エントリ発行時において、信号BASIC_FP_USE,EXTEND_FP_USEの値は、それぞれ制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDとして出力される。
信号LOADは、浮動小数点ロード命令であることを示す。信号IIDは、CSE400における対応するエントリを識別する信号であり、命令デコーダ280からのエントリ識別信号D_IIDに応じた値が登録される。
信号R1_READY,R2_READYは、オペランドデータの準備ができたことを示す信号であり、オペランドデータ待ち回路323によって登録される。信号R1_INGATE,R2_INGATEは、オペランドデータ選択部430におけるオペランドデータの選択対象を指示する信号であり、オペランドデータ待ち回路323によって登録される。
アドレスR1_REG_ADR,R2_REG_ADRは、固定小数点レジスタ580からのオペランドデータの読み出しアドレスを示す。Dサイクルにおいて、アドレスR1_REG_ADR,R2_REG_ADRには、それぞれ制御信号D_R1_GPR_ADR,D_R2_GPR_ADRに応じた値が登録される。
アドレスR1_GUB_ADR,R2_GUB_ADRは、固定小数点リネーミングレジスタ540からのオペランドデータの読み出しアドレスを示す。Dサイクルにおいて、アドレスR1_GUB_ADR,R2_GUB_ADRには、それぞれ制御信号D_R1_GUB_ADR,D_R2_GUB_ADRに応じた値が登録される。
アドレスBASIC_DST_ADR,EXTEND_DST_ADRは、それぞれ基本リネーミングレジスタ561、拡張リネーミングレジスタ562に対するロードデータの書き込みアドレスを示す。Dサイクルにおいて、アドレスBASIC_DST_ADR,EXTEND_DST_ADRには、アドレス信号D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDに応じた値が登録される。また、エントリ発行時において、アドレスBASIC_DST_ADR,EXTEND_DST_ADRの値は、それぞれアドレス信号B_FP_DST_FUB_ADR_BASIC,B_FP_DST_FUB_ADR_EXTENDとして出力される。
TAGフィールドは、その他のタグ情報が保持されるフィールドである。
RSA320のオペランドデータ待ち回路323は、Pサイクルにおいて、アドレスR1_REG_ADR,R2_REG_ADRにそれぞれ対応するレジスタにおいて、データが準備されたか否かを判定する。また、アドレスR1_FUB_ADR,R2_FUB_ADRに値が登録されていた場合には、これらのレジスタにおいてデータが準備されたか否かを判定する。R1側、R2側にそれぞれオペランドデータが準備されると、オペランドデータ待ち回路323は、信号R1_READY,R2_READYをそれぞれオンにする。また、信号R1_INGATE,R2_INGATEのそれぞれには、オペランドデータが固定小数点レジスタ580に準備されたか、あるいは固定小数点リネーミングレジスタ540に準備されたかを識別する信号が登録される。
エントリ選択回路324は、信号R1_READY,R2_READYがともにオンになったとき、このエントリを発行する。このとき、エントリ識別信号IIDの値は、信号B_FP_IIDとして、制御信号B_FP_LOADとともに1次データキャッシュ部460に出力される。また、信号BASIC_FP_USE、EXTEND_FP_USEの値は、それぞれ制御信号B_FP_USE_BASIC、B_FP_USE_EXTENDとして、1次データキャッシュ部460に出力される。また、アドレスBASIC_DST_ADR,EXTEND_DST_ADRの値は、それぞれアドレス信号B_FP_DST_FUB_ADR_BASIC,B_FP_DST_FUB_ADR_EXTENDとして、1次データキャッシュ部460に出力される。
また、信号R1_INGATE,R2_INGATEの値は、それぞれ信号B_EAG_R1_INGATE,B_EAG_R2_INGATEとしてオペランドデータ選択部430に出力される。また、アドレスR1_REG_ADR,R2_REG_ADRにそれぞれ対応するレジスタにデータが準備されれば、これらのアドレスの値がそれぞれアドレス信号B_R1_GPR_ADR,B_R2_GPR_ADRとしてオペランドデータ選択部430に出力される。また、アドレスR1_FUB_ADR,R2_FUB_ADRにそれぞれ対応するレジスタにデータが準備されれば、これらのアドレスの値がそれぞれ信号B_EAG_R1_GUB_ADR,B_EAG_R2_GUB_ADRとして出力される。
図20は、浮動小数点ロード命令実行時のオペランドデータ選択部の入出力信号を示す図である。なお、図20では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
オペランドデータ選択部430は、オペランドデータ選択器431,432と、ラッチ回路433,434とを備えている。Bサイクルにおいて、オペランドデータ選択器431は、RSE340からの制御信号B_EAG_R1_INGATEに応じて、固定小数点レジスタ580または固定小数点リネーミングレジスタ540から出力されたオペランドデータを、選択的に出力する。また、オペランドデータ選択器432は、RSE340からの制御信号B_EAG_R2_INGATEに応じて、固定小数点レジスタ580または固定小数点リネーミングレジスタ540から出力されたオペランドデータを、選択的に出力する。
ラッチ回路433,434は、それぞれオペランドデータ選択器431,432から出力されたオペランドデータをラッチし、データの出力タイミングを調整する。ラッチ回路433,434にラッチされたオペランドデータは、データ信号A_EAG_OR1R,A_EAG_OR2Rとして、オペランドアドレス生成器440に出力される。
なお、固定小数点レジスタ580に格納されたデータは、読み出し回路581を介して出力される。Bサイクルにおいて、読み出し回路581は、RSA320からのアドレス信号B_EAG_R1_GPR_ADR,B_EAG_R2_GPR_ADRによってそれぞれ指定される固定小数点レジスタ580のアドレスから、オペランドデータを読み出す。また、固定小数点リネーミングレジスタ540に格納されたデータは、読み出し回路541を介して出力される。Bサイクルにおいて、読み出し回路541は、RSA320からのアドレス信号B_EAG_R1_GUB_ADR,B_EAG_R2_GUB_ADRによってそれぞれ指定される固定小数点リネーミングレジスタ540のアドレスから、オペランドデータを読み出す。
図21は、浮動小数点ロード命令実行時の1次データキャッシュ部の入出力信号を示す図である。なお、図21では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
1次データキャッシュ部460は、前述の1次データキャッシュ461、基本ロードレジスタ462および拡張ロードレジスタ463に加えて、データ検出回路464、ロードデータ選択器465、完了報告回路466およびラッチ回路471,472a,472b,473a〜473d,474a〜474e,475を備えている。
オペランドデータ選択部430から出力されたデータ信号A_EAG_OR1R,A_EAG_OR2Rは、オペランドアドレス生成器440に入力される。Aサイクルにおいて、オペランドアドレス生成器440は、データ信号A_EAG_OR1R,A_EAG_OR2Rに基づいてオペランドアドレスを生成し、1次データキャッシュ部460に出力する。
なお、RSA320から出力されたアドレス信号B_FP_DST_FUB_ADR_BASIC,B_FP_DST_FUB_ADR_EXTENDおよびエントリ識別信号B_FP_IIDは、ラッチ回路451を介して1次データキャッシュ部460に入力される。また、RSA320から出力された制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDは、ラッチ回路452を介して1次データキャッシュ部460に入力される。また、RSA320からされた制御信号B_FP_LOADは、ラッチ回路453を介して1次データキャッシュ部460に入力される。ラッチ回路451〜453は、入力された信号の出力タイミングを、オペランドデータ選択部430およびオペランドアドレス生成器440の処理時間に合わせて調整する。
データ検出回路464は、FT,FM,FBサイクルにおいて動作する。データ検出回路464は、オペランドアドレス生成器440によって生成されたオペランドアドレスにより指定されるロードデータが、1次データキャッシュ461に記憶されているか否かを判定する。
ロードデータが1次データキャッシュ461に記憶されている場合、データ検出回路464は、1次データキャッシュ461に対してロードデータをロードデータ選択器465へ出力するように要求する。この出力要求とともに、完了報告回路466に対してロードデータ出力の完了を示す完了報告信号を出力する。一方、ロードデータが1次データキャッシュ461に記憶されていない場合には、2次データキャッシュ112やメインメモリなどからロードデータが1次データキャッシュ461に読み込まれる。1次データキャッシュ461へのロードデータの読み込みが完了すると、データ検出回路464は、1次データキャッシュ461にロードデータの出力を要求するとともに、完了報告回路466に対して完了報告信号を出力する。なお、データ検出回路464からの完了報告信号は、ラッチ回路472a,472bを介して完了報告回路466に出力される。
SIMDロード命令の実行時には、オペランドアドレス生成器440からのオペランドアドレスにより指定されるロードデータは、16バイトのデータ幅を有する。この場合、データ検出回路464は、16バイトのロードデータが1次データキャッシュ461に記憶されているか否かを判定する。ところが、この判定時に、16バイトのロードデータの一部についてキャッシュミスが発生する場合があり得る。例えば、ロードデータのうち前半部または後半部のみについてキャッシュミスが発生する場合があり得る。この事態は、例えば、ロードデータのうちの後半部の8バイトデータが、前半部が記憶された1次データキャッシュ461上のキャッシュラインの次のキャッシュラインに記憶される場合などに生じ得る。
このような事態に対処するため、データ検出回路464は、オペランドアドレスにより指定されるロードデータの前半部と後半部とについて、1次データキャッシュ461に記憶されているか否かをそれぞれ個別に判定する。そして、ロードデータの前半部が1次データキャッシュ461に記憶されていた場合に、そのデータの出力を1次データキャッシュ461に要求するとともに、完了報告信号を出力する。さらに、ロードデータの後半部が1次データキャッシュ461に記憶されていた場合に、そのデータの出力を1次データキャッシュ461に要求するとともに、完了報告信号を出力する。
すなわち、SIMDロード命令の実行時には、データ検出回路464から完了報告回路466に対して、完了報告信号が2回出力される。また、上記構成により、ロードデータの後半部のみキャッシュミスが発生した場合には、1次データキャッシュ461から前半部のデータが出力されてから後半部のデータが出力されるまでに遅延が発生する場合があり得る。このように後半部のデータの出力遅延が発生した場合には、1回目の完了報告信号の出力から2回目の完了報告信号の出力までにも遅延が発生する。
1次データキャッシュ461から読み出されたロードデータは、ラッチ回路471を介してロードデータ選択器465に入力される。また、ロードデータ選択器465には、ラッチ回路452,473a〜473dを介して、制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDが入力される。なお、ラッチ回路473a〜473dは、入力信号の出力タイミングを、データ検出回路464、1次データキャッシュ461およびラッチ回路471の処理時間に合わせて調整する。
FRサイクルにおいて、ロードデータ選択器465は、制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDに応じて、1次データキャッシュ461から出力されたロードデータを、基本ロードレジスタ462または拡張ロードレジスタ463に対して選択的に出力する。
SIMDロード命令実行時には、制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDはともにオンである。この場合、ロードデータ選択器465は、1次データキャッシュ461から出力される16バイトデータのうち、前半部を基本ロードレジスタ462に出力し、後半部を拡張ロードレジスタ463に出力する。なお、ロードデータの後半部のみキャッシュミスが発生した場合には、基本ロードレジスタ462へのデータの出力から拡張ロードレジスタ463へのデータの出力までには遅延が生じる。
一方、非SIMDロード命令実行時には、制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDのうち一方のみがオンになる。ロードデータ選択器465は、制御信号B_FP_USE_BASICのみがオンであれば、1次データキャッシュ461から出力された8バイト分のロードデータを基本ロードレジスタ462に出力する。また、ロードデータ選択器465は、制御信号B_FP_USE_EXTENDのみがオンであれば、1次データキャッシュ461から出力された8バイト分のロードデータを拡張ロードレジスタ463に出力する。
完了報告回路466には、データ検出回路464からの完了報告信号が入力されるとともに、ラッチ回路473a〜473dを介して制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDが入力される。FRサイクルにおいて、完了報告回路466は、データ検出回路464から完了報告信号の入力を受けると、制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTENDの少なくとも一方をCSE400に出力する。これとともに、制御信号LR_FUB_WR_BASIC,LR_FUB_WR_EXTENDの少なくとも一方を、ラッチ回路475を介して浮動小数点リネーミングレジスタ560に出力する。
前述のように、制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTENDは、それぞれ基本ロードレジスタ462および拡張ロードレジスタ463へのロードデータの出力が完了したことを示す信号である。また、制御信号LR_FUB_WR_BASIC,LR_FUB_WR_EXTENDは、それぞれ基本リネーミングレジスタ561および拡張リネーミングレジスタ562へのデータ格納を要求する信号である。
SIMDロード命令の実行時には、制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDはともにオンになる。この場合、完了報告回路466は、データ検出回路464から出力される2回分の完了報告信号を待つ。1回目の完了報告信号を受信すると、制御信号FR_FP_COMP_BASIC,制御信号LR_FUB_WR_BASICをそれぞれ出力し、2回目の完了報告信号を受信すると、制御信号FR_FP_COMP_EXTEND,LR_FUB_WR_EXTENDをそれぞれ出力する。
一方、非SIMDロード命令の実行時には、制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDのいずれか一方のみがオンになる。この場合、完了報告回路466は、データ検出回路464からの完了報告信号の出力を1回のみ待つ。制御信号B_FP_USE_BASICのみがオンの場合、完了報告回路466は、データ検出回路464からの完了報告信号を受信すると、制御信号FR_FP_COMP_BASIC,制御信号LR_FUB_WR_BASICをそれぞれ出力する。また、制御信号B_FP_USE_EXTENDのみがオンの場合、完了報告回路466は、データ検出回路464からの完了報告信号を受信すると、制御信号FR_FP_COMP_EXTEND,制御信号LR_FUB_WR_EXTENDをそれぞれ出力する。
なお、ラッチ回路451から入力されたアドレス信号B_FP_DST_FUB_ADR_BASIC,B_FP_DST_FUB_ADR_EXTENDは、ラッチ回路474a〜474eを介して、それぞれアドレス信号LR_DST_FUB_ADR_BASIC,LR_DST_FUB_ADR_EXTENDとして、浮動小数点リネーミングレジスタ560に出力される。アドレス信号LR_DST_FUB_ADR_BASIC,LR_DST_FUB_ADR_EXTENDの出力タイミングは、制御信号LR_FUB_WR_BASIC,LR_FUB_WR_EXTENDの出力タイミングと同じになる。
また、ラッチ回路451から入力されたエントリ識別信号B_FP_IIDは、ラッチ回路474a〜474dを介して、エントリ識別信号FR_FP_COMP_IIDとしてCSE400に出力される。エントリ識別信号FR_FP_COMP_IIDは、FRサイクルにおいて出力される。
図22は、浮動小数点ロード命令実行時の浮動小数点リネーミングレジスタの入出力信号を示す図である。なお、図22では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
浮動小数点リネーミングレジスタ560は、前述した基本リネーミングレジスタ561および拡張リネーミングレジスタ562に加えて、書き込み回路563,564および読み出し回路565,566を備えている。書き込み回路563,564は、それぞれ基本リネーミングレジスタ561内、拡張リネーミングレジスタ562内の指定されたアドレスに対してデータを格納する。読み出し回路565,566は、それぞれ基本リネーミングレジスタ561内、拡張リネーミングレジスタ562内の指定されたアドレスからデータを読み出す。
FRサイクルの次のサイクル(FR+1サイクル)において、書き込み回路563は、制御信号LR_FUB_WR_BASICがオンである場合に、アドレス信号LR_DST_FUB_ADR_BASICにより指定される基本リネーミングレジスタ561のアドレスに対して、基本ロードレジスタ462からのデータ信号LR_BASICを格納する。制御信号LR_FUB_WR_BASIC、アドレス信号LR_DST_FUB_ADR_BASICは、ともに1次データキャッシュ部460から出力される。
また、書き込み回路564は、制御信号LR_FUB_WR_EXTENDがオンである場合に、アドレス信号LR_DST_FUB_ADR_EXTENDにより指定される拡張リネーミングレジスタ562のアドレスに対して、拡張ロードレジスタ463からのデータ信号LR_EXTENDを格納する。制御信号LR_FUB_WR_EXTEND、アドレス信号LR_DST_FUB_ADR_EXTENDは、ともに1次データキャッシュ部460から出力される。
Wサイクルにおいて、読み出し回路565は、CSE400からのアドレス信号W_FUB_ADR_BASICにより指定される基本リネーミングレジスタ561のアドレスからロードデータを読み出し、データ信号W_FPR_FUB_BASIC_DATAとして浮動小数点SIMDレジスタ600に出力する。また、読み出し回路566は、CSE400からのアドレス信号W_FUB_ADR_EXTENDにより指定される拡張リネーミングレジスタ562のアドレスからロードデータを読み出し、データ信号W_FPR_FUB_EXTEND_DATAとして浮動小数点SIMDレジスタ600に出力する。
図23は、浮動小数点ロード命令実行時の浮動小数点SIMDレジスタの入出力信号を示す図である。なお、図23では、浮動小数点ロード命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
浮動小数点SIMDレジスタ600は、前述した基本レジスタ601および拡張レジスタ602に加えて、書き込み回路603,604および読み出し回路605,606を備えている。書き込み回路603,604は、それぞれ基本レジスタ601内、拡張レジスタ602内の指定されたアドレスに対してデータを格納する。読み出し回路605,606は、それぞれ基本レジスタ601内、拡張レジスタ602内の指定されたアドレスからデータを読み出す。
Wサイクルにおいて、浮動小数点SIMDレジスタ600では、ロードデータの格納が行われる。書き込み回路603は、制御信号W_FPR_WR_BASICがオンである場合に、アドレス信号W_FPR_ADRにより指定される基本レジスタ601のアドレスに対して、データ信号W_FPR_FUB_BASIC_DATAを格納する。制御信号W_FPR_WR_BASIC、アドレス信号W_FPR_ADRはともにCSE400から出力される。また、データ信号W_FPR_FUB_BASIC_DATAは、基本リネーミングレジスタ561から読み出されたロードデータに対応する。
書き込み回路604は、制御信号W_FPR_WR_EXTENDがオンである場合に、アドレス信号W_FPR_ADRにより指定される拡張レジスタ602のアドレスに対して、データ信号W_FPR_FUB_EXTEND_DATAを格納する。制御信号W_FPR_WR_EXTEND、アドレス信号W_FPR_ADRはともにCSE400から出力される。また、データ信号W_FPR_FUB_EXTEND_DATAは、拡張リネーミングレジスタ562から読み出されたロードデータに対応する。
図24は、SIMDロード命令実行時のロードデータ格納動作を説明する図である。
Dサイクルにおいて、SIMDロード命令がデコードされた場合、命令デコーダ280からの制御信号D_FP_USE_BASIC,D_FP_USE_EXTENDはともにオンになる。この場合、CSE400のエントリにおいて、信号BASIC_FP_USE,EXTEND_FP_USEがともにオンになり、信号BASIC_WR,EXTEND_WRも、ともにオンになる。さらに、アドレスBASIC_RD_ADR,EXTEND_RD_ADRには、ともにリネーミングレジスタのアドレスが登録される。
その後、FRサイクルにおいて、1次データキャッシュ部460から、基本ロードレジスタ462、拡張ロードレジスタ463のそれぞれに対するデータの格納が完了したことを示す制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTENDが、CSE400に入力される。CSE400のエントリでは、制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTENDが入力されると、それぞれ信号BASIC_FP_COMP,EXTEND_FP_COMPがオンになる。
CSE400の完了判定回路406は、エントリ内の信号BASIC_FP_USE,EXTEND_FP_USEがともにオンである場合には、信号BASIC_FP_COMP,EXTEND_FP_COMPが両方オンになったとき、命令が完了したと判定する。このような処理により、基本ロードレジスタ462へのデータ格納タイミングと拡張ロードレジスタ463へのデータ格納タイミングとにずれが生じた場合でも、命令の完了を正確に判定できる。
命令が完了したと判定されると、Wサイクルが開始される。Wサイクルにおいて、CSE400の信号出力回路407は、アドレスBASIC_RD_ADR、EXTEND_RD_ADRの値を、それぞれ基本リネーミングレジスタ561、拡張リネーミングレジスタ562に出力する。そして、出力したアドレスからのロードデータの読み出しを要求する。また、信号出力回路407は、アドレスWR_ADRの値を基本レジスタ601および拡張レジスタ602に出力する。これとともに、信号BASIC_WR,EXTEND_WRの値をそれぞれ基本レジスタ601および拡張レジスタ602に出力して、データの格納を要求する。これにより、基本レジスタ601および拡張レジスタ602における同じアドレスに対して、基本リネーミングレジスタ561および拡張リネーミングレジスタ562からのロードデータがそれぞれ格納される。
図25は、非SIMDロード命令実行時のロードデータ格納動作を説明する図である。
Dサイクルにおいて、非SIMDロード命令がデコードされた場合、命令デコーダ280からの制御信号D_FP_USE_BASIC,D_FP_USE_EXTENDのいずれか一方のみがオンになる。図25の例では、制御信号D_FP_USE_EXTENDのみがオンである。この場合、CSE400のエントリにおいて、信号EXTEND_FP_USE,EXTEND_WRがオンになり、アドレスEXTEND_RD_ADRにリネーミングレジスタのアドレスが登録される。
その後、FRサイクルにおいて、1次データキャッシュ部460から、拡張ロードレジスタ463に対するデータの格納が完了したことを示す制御信号FR_FP_COMP_EXTENDが、CSE400に入力される。CSE400のエントリでは、制御信号FR_FP_COMP_EXTENDが入力されると、信号EXTEND_FP_COMPがオンになる。
CSE400の完了判定回路406は、エントリ内の信号BASIC_FP_USE,EXTEND_FP_USEのうち、EXTEND_FP_USEのみがオンである場合には、信号EXTEND_FP_COMPがオンになったとき、命令が完了したと判定する。この判定により、Wサイクルが開始される。
このとき、CSE400の信号出力回路407は、アドレスEXTEND_RD_ADRの値を拡張リネーミングレジスタ562に出力し、出力したアドレスからのロードデータの読み出しを要求する。また、信号出力回路407は、アドレスWR_ADRの値を拡張レジスタ602に出力するとともに、信号EXTEND_WRの値を拡張レジスタ602に出力して、データの格納を要求する。これにより、拡張レジスタ602に対してのみ、拡張リネーミングレジスタ562からのロードデータが格納される。
以上説明した浮動小数点ロード命令の実行時の処理では、SIMDロード命令の実行時には、ロードデータの書き込み先として同じアドレスを有する基本レジスタ601および拡張レジスタ602が使用される。一方、非SIMDロード命令の実行時には、ロードデータの書き込み先として、基本レジスタ601および拡張レジスタ602のうち任意のレジスタを使用可能になる。このため、浮動小数点SIMDレジスタ600内のレジスタの使用効率が向上する。また、非SIMDロード命令の実行時には、ロードデータの書き込み先としてSIMDロード命令の実行時の2倍のレジスタを指定することが可能になる。
また、SIMDロード命令の実行時には、基本レジスタ601に対して割り当てる基本リネーミングレジスタ561のアドレスと、拡張レジスタ602に対して割り当てる拡張リネーミングレジスタ562のアドレスとを、異なるアドレスとすることが可能である。一方、非SIMDロード命令の実行時には、基本レジスタ601が使用される場合には基本リネーミングレジスタ561が割り当てられ、拡張レジスタ602が使用される場合には拡張リネーミングレジスタ562が割り当てられる。このような構成としたことで、SIMD命令/非SIMD命令が混在するプログラムが実行された場合でも、浮動小数点リネーミングレジスタ560内のレジスタを無駄なく効率的に使用できる。また、浮動小数点リネーミングレジスタ560内のレジスタ数を抑制することもできる。
また、命令デコーダ280から1次データキャッシュ部460に対しては、RSA320、オペランドデータ選択部430およびオペランドアドレス生成器440を通じて、ロードデータの転送に基本バスを使用するか否か、および拡張バスを使用するか否かをそれぞれ示すバス指定信号が伝達される。このため、1次データキャッシュ部460は、フェッチしたロードデータを基本リネーミングレジスタ561に転送するか、あるいは拡張リネーミングレジスタ562に転送するかを、正確に判定できる。また、バス指定信号はCSE400にも伝達される。CSE400は、これらのバス指定信号に基づき、命令の完了を正確に判定でき、ロードデータを浮動小数点SIMDレジスタ600内の所望のアドレスに正確に格納できる。このように、バス指定信号を利用したことで、ロードデータの転送制御を正確かつ効率的に運用できる。
〔浮動小数点演算命令実行時の処理〕
浮動小数点演算命令がデコードされると、CPUコア111は、ソースオペランドで指定されるレジスタからデータを読み込み、ディスティネーションオペランドで指定されるレジスタに対して書き込む。ここでは、浮動小数点演算命令として、演算の実行に6サイクル必要とする命令を使用する例を説明する。浮動小数点演算のSIMD命令(以下、SIMD演算命令と呼ぶ)の命令コードは、例えば“Simd-fmad %127*%f100+%f50=%f10”と記述される。この命令では、ソースオペランドとして“%127”“%f100”“%f50”の3つのレジスタが指定される。指定されたレジスタからはそれぞれ2つの8バイトデータが読み込まれて、2系統の乗算および加算処理が並列に実行される。そして、それぞれの演算結果は、ディスティネーションオペランドである“%f10”で指定される浮動小数点SIMDレジスタ600に書き込まれる。
一方、浮動小数点演算の非SIMD命令(以下、非SIMD演算命令と呼ぶ)の命令コードは、オペコードが異なること以外は上記と同じ形式で記述される。この命令では、ソースオペランドで指定されるレジスタからそれぞれ1つの8バイトデータを読み込むことが要求される。さらに、それらの8バイトデータを用いて1系統の演算を行い、演算結果を、ディスティネーションオペランドで指定される浮動小数点SIMDレジスタ600内のレジスタに書き込むことが要求される。
前述の浮動小数点ロード命令の実行時と同様に、SIMD演算命令では、ディスティネーションオペランドにおいて0〜127のレジスタ番号が指定されるのに対して、非SIMD演算命令では0〜255のレジスタ番号を指定可能である。
図26は、CPUコアにおいて浮動小数点演算命令実行時に動作する構成要素を示す図である。
命令デコーダ280は、浮動小数点演算命令をデコードすると、CSE400およびRSF360に対してエントリを登録する。また、命令デコーダ280は、演算結果の書き込み先の浮動小数点SIMDレジスタ600に対して、浮動小数点リネーミングレジスタ560を割り当てる。割り当てたレジスタのアドレスは、レジスタリネーミング部300の基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302に登録される。また、割り当てたアドレスは、CSE400およびRSF360の各エントリにも登録される。
さらに、オペランドデータが浮動小数点リネーミングレジスタ560に格納されている場合、格納されたアドレスが基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302から取得される。取得されたアドレスは、RSF360のエントリに登録される。
SIMD演算器520は、RSF360から発行されたエントリに基づいて、演算対象のオペランドデータを取得し、演算を実行する。SIMD演算器520は、基本演算器521、拡張演算器522、基本結果レジスタ523、拡張結果レジスタ524、基本オペランドデータ選択器531および拡張オペランドデータ選択器532を備える。
基本演算器521、拡張演算器522は、それぞれ8バイトデータに対する演算を実行する。基本オペランドデータ選択器531は、RSF360から発行されたエントリに基づき、基本演算器521に入力するオペランドデータを選択する。拡張オペランドデータ選択器532は、RSF360から発行されたエントリに基づき、拡張演算器522に入力するオペランドデータを選択する。基本オペランドデータ選択器531および拡張オペランドデータ選択器532により選択されるデータは、現在実行されている、あるいはすでに実行が完了した命令に応じて得られたデータである。
なお、基本オペランドデータ選択器531および拡張オペランドデータ選択器532は、命令に記述されるソースオペランドの数だけそれぞれ設けられる。例えば、上記の命令“Simd-fmad %127*%f100+%f50=%f10”を実行するためには、基本オペランドデータ選択器531および拡張オペランドデータ選択器532が3組設けられる。
基本結果レジスタ523は、基本演算器521による演算結果を一時的に保持し、基本リネーミングレジスタ561に出力する。拡張結果レジスタ524は、拡張演算器522による演算結果を一時的に保持し、拡張リネーミングレジスタ562に出力する。また、SIMD演算器520は、基本結果レジスタ523および拡張結果レジスタ524への演算結果の格納が完了すると、CSE400に対して演算の完了を通知する。
上記構成では、基本演算器521による演算結果は、基本結果レジスタ523を介して基本リネーミングレジスタ561に格納された後、基本レジスタ601に格納される。また、拡張演算器522による演算結果は、拡張結果レジスタ524を介して拡張リネーミングレジスタ562に格納された後、拡張レジスタ602に格納される。ここで、前述の浮動小数点ロード命令の場合と同様、基本結果レジスタ523、基本リネーミングレジスタ561および基本レジスタ601の順にデータを転送するバスを“基本バス”と呼ぶ。また、拡張結果レジスタ524、拡張リネーミングレジスタ562および拡張レジスタ602の順にデータを転送するバスを“拡張バス”と呼ぶ。
また、基本オペランドデータ選択器531および拡張オペランドデータ選択器532はともに、オペランドデータとして、浮動小数点SIMDレジスタ600、浮動小数点リネーミングレジスタ560、基本結果レジスタ523、拡張結果レジスタ524、基本ロードレジスタ462および拡張ロードレジスタ463のうちのどのレジスタのデータでも選択可能になっている。
図27,図28は、浮動小数点演算命令実行時のパイプラインを説明する図である。
浮動小数点演算命令実行時のパイプラインは、例えば、順にDサイクル、Pサイクル、Bサイクル、X1〜X6、Uサイクル、CサイクルおよびWサイクルを含む。ただし、UサイクルとCサイクルとは、並列に実行されてもよい。
Dサイクルは、命令デコードサイクルである。このDサイクルでは、命令デコーダ280により浮動小数点演算命令がデコードされ、そのデコード結果に基づき、CSE400へのエントリ登録処理(ステップS51)およびRSF360へのエントリ登録処理(ステップS52)が実行される。
命令デコーダ280は、主として、演算結果の書き込み先に関する情報をCSE400のエントリに登録する。また、命令デコーダ280は、書き込み先の浮動小数点SIMDレジスタ600に対して浮動小数点リネーミングレジスタ560を割り当て、レジスタリネーミングマップに登録する(ステップS53)。この登録処理も浮動小数点ロード命令の場合と同様であり、図5,図6で説明した手法が用いられる。
SIMD演算命令がデコードされた場合、書き込み先レジスタに対応する基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302のエントリに対して、それぞれ基本リネーミングレジスタ561および拡張リネーミングレジスタ562の各アドレスが登録される。図27の例では、割り当てられた基本リネーミングレジスタ561のアドレスを“A”、割り当てられた拡張リネーミングレジスタ562のアドレスを“B”と示している。命令デコーダ280は、リネーミングマップに割り当てた基本リネーミングレジスタ561および拡張リネーミングレジスタ562の各アドレスを、CSE400およびRSF360の各エントリに対しても登録する。
また、命令デコーダ280は、書き込み先レジスタに対応するリネーミングアドレスの他に、ソースデータに関する情報などをRSF360のエントリに登録する。例えば、命令デコーダ280は、浮動小数点SIMDレジスタ600におけるオペランドデータの読み出しアドレスを、RSF360のエントリに登録する。SIMD演算命令の実行時には、1つのソースオペランドに対応するオペランドデータは、基本レジスタ601および拡張レジスタ602の両方から読み込まれる。
また、浮動小数点SIMDレジスタ600におけるオペランドデータの読み出しアドレスに対して、リネーミングレジスタが割り当てられていた場合には、そのリネーミングレジスタのアドレスがリネーミングマップから出力される(ステップS54)。出力されたアドレスは、RSF360に登録される。SIMD演算命令がデコードされた場合、ソースオペランドで指定される1つのソースレジスタに対して、基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302の両方からアドレスが出力され、RSF360に登録される。一方、非SIMD演算命令がデコードされた場合には、ソースオペランドで指定される1つのソースアドレスに対して、基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302のいずれか一方からアドレスが出力される。
次に、Pサイクルは、プライオリティサイクルである。このPサイクルでは、RSF360におけるデータの待ち合わせ制御が行われる。前述のように、RSF360は、登録されたエントリのうち、必要なデータが揃ったエントリの中で最も古いエントリを発行する。RSF360からSIMD演算器520に対して、浮動小数点演算命令に対応するエントリが発行されると、Bサイクルに遷移する(ステップS55)。
Bサイクルでは、SIMD演算器520の基本オペランドデータ選択器531および拡張オペランドデータ選択器532により、オペランドデータが選択される(ステップS56)。SIMD演算命令の実行時には、基本オペランドデータ選択器531および拡張オペランドデータ選択器532の両方によりオペランドデータが選択され、選択されたデータはそれぞれ基本演算器521および拡張演算器522に対して供給される。
次のX1〜X6サイクル(eXecute 1-6 cycle)では、演算処理が実行され、最終のX6サイクルにおいて、演算結果が出力されて、後段の結果レジスタに格納される(ステップS57)。SIMD演算命令の実行時には、基本演算器521および拡張演算器522の両方で演算処理が実行され、演算結果が基本結果レジスタ523および拡張結果レジスタ524にそれぞれ格納される。図28では、基本結果レジスタ523および拡張結果レジスタ524にそれぞれ格納される8バイトデータを、“X(8B)”“Y(8B)”と表している。また、X6サイクルでは、SIMD演算器520からCSE400に対して、演算処理の完了が報告される(ステップS58)。
次のUサイクル(Update cycle)では、演算結果がリネーミングレジスタに格納される(ステップS59)。SIMD演算命令の実行時には、基本結果レジスタ523および拡張結果レジスタ524からそれぞれ基本リネーミングレジスタ561および拡張リネーミングレジスタ562に対してそれぞれ演算結果が格納される。また、非SIMD演算命令の実行時には、基本リネーミングレジスタ561または拡張リネーミングレジスタ562のいずれか一方にのみ、演算結果が格納される。
Cサイクルは、命令完了サイクルである。Cサイクルにおいて、CSE400は、SIMD演算器520からの演算完了報告に基づいて、浮動小数点演算命令が完了したことを判定する(ステップS60)。このCサイクルは、例えばUサイクルと並行して実行され、最短のケースではUサイクルと同時に終了される。
Wサイクルは、レジスタ更新サイクルである。Wサイクルでは、基本リネーミングレジスタ561に格納された演算結果が、基本レジスタ601上の対応するアドレスに格納される。また、拡張リネーミングレジスタ562に格納された演算結果が、拡張レジスタ602上の対応するアドレスに格納される。これらの格納動作は、CSE400によって制御される(ステップS61)。
SIMD演算命令の実行時には、基本リネーミングレジスタ561と拡張リネーミングレジスタ562の両方に演算結果が格納される。従って、CSE400は、これら2つの演算結果を、それぞれ基本レジスタ601および拡張レジスタ602における同じレジスタ番号の位置に格納する。
図29,図30は、非SIMD演算命令実行時のデータの流れを説明する図である。これらの図を用いて、SIMD演算命令実行時との動作の違いについて説明する。
非SIMD演算命令では、非SIMDロード命令の場合と同様に、演算結果の書き込み先として、基本レジスタ601および拡張レジスタ602の中の1つのレジスタが指定される。Dサイクルにおいて、命令デコーダ280は、非SIMD演算命令をデコードすると、演算結果の書き込み先として指定された1つのレジスタに対して、リネーミングレジスタを割り当てる。図29では、演算結果の書き込み先として基本レジスタ601の1つが指定された場合を示している。この場合には、基本レジスタリネーミングマップ301内の対応する位置に、命令デコーダ280によって割り当てられた、基本リネーミングレジスタ561のアドレスが登録される。
また、非SIMD演算命令では、1つのソースオペランドにより、オペランドデータの読み出し元のレジスタとして基本レジスタ601および拡張レジスタ602の中の1つのレジスタが指定される。そして、指定された基本レジスタ601または拡張レジスタ602のアドレスに対してリネーミングレジスタが割り当てられた場合には、割り当てられたリネーミングレジスタのアドレスが、基本レジスタリネーミングマップ301または拡張レジスタリネーミングマップ302のいずれか一方から読み出され、RSF360に登録される。
Bサイクルでは、RSF360から発行されるエントリに基づき、基本オペランドデータ選択器531または拡張オペランドデータ選択器532のいずれか一方により、オペランドデータが選択される。このため、X1〜X6サイクルでの演算処理は、基本演算器521または拡張演算器522のいずれか一方でのみ実行される。
演算結果の格納先として基本レジスタ601が指定されれば、基本オペランドデータ選択器531によりオペランドデータが選択される。また、演算結果の格納先として拡張レジスタ602が指定されれば、拡張オペランドデータ選択器532によりオペランドデータが選択される。ただし、基本オペランドデータ選択器531および拡張オペランドデータ選択器532のどちらでも、オペランドデータの読み出し元として、基本バス側のレジスタおよび拡張バス側のレジスタのどちらでも選択可能である。
図30では、基本オペランドデータ選択器531によりオペランドデータが選択された場合を示している。この場合、基本演算器521によって演算処理が実行され、演算結果は、基本結果レジスタ523を介して、基本リネーミングレジスタ561に格納される。また、CSE400は、基本結果レジスタ523への演算結果の格納が完了したことを検知した後、Wサイクルにおいて、基本リネーミングレジスタ561に格納された演算結果を、対応する基本レジスタ601に転送させる。
上記の処理では、浮動小数点ロード命令の場合と同様に、非SIMD演算命令の実行時には、浮動小数点SIMDレジスタ600内のレジスタは、8バイト単位の独立したレジスタとして取り扱われる。これとともに、浮動小数点リネーミングレジスタ560内のレジスタも、8バイト単位の独立したレジスタとして取り扱われる。従って、浮動小数点リネーミングレジスタ560および浮動小数点SIMDレジスタ600においては、使用不可能となる無駄な記憶領域が発生しなくなり、記憶領域の使用効率が向上する。
さらに、非SIMD演算命令の実行時には、オペランドデータを浮動小数点SIMDレジスタ600または浮動小数点リネーミングレジスタ560から読み出すことが可能である。この読み出し処理においても、浮動小数点SIMDレジスタ600および浮動小数点リネーミングレジスタ560の中のレジスタを8バイト単位の独立したレジスタとして取り扱うことができる。すなわち、オペランドデータの読み出し元として、浮動小数点SIMDレジスタ600または浮動小数点リネーミングレジスタ560の中の8バイト単位のレジスタを指定できる。従って、記憶領域の使用効率が向上するとともに、プログラムの自由度が高められる。
図31は、浮動小数点演算命令実行時に、オペランドデータがリネーミングレジスタから供給される場合のタイムチャートの例を示す。
図31では、SIMDロード命令がデコードされた後、SIMD演算命令がデコードされた場合のパイプラインの例を示している。SIMDロード命令では、ロードデータの書き込み先として、“%f100”で示される浮動小数点SIMDレジスタ600が指定される。また、SIMD演算命令では、オペランドデータの入力元として、“%f100”で示される浮動小数点SIMDレジスタ600のレジスタが指定され、その結果、SIMDロード命令とSIMD演算命令との間にレジスタの依存関係が生じる。
SIMDロード命令のパイプラインでは、CSE400での命令の完了待ちが生じており、このためにCサイクルの実行が遅延している。一方、SIMD演算命令のパイプラインでは、SIMDロード命令におけるCサイクルの実行前に、オペランドデータを選択するBサイクルが実行されている。このため、“%f100”に対応する浮動小数点SIMDレジスタ600のアドレスには、リネーミングレジスタが割り当てられた状態となっている。従って、SIMD演算命令のBサイクルでは、“%f100”のレジスタに格納されるべきデータを、“%f100”のレジスタに割り当てられたリネーミングレジスタから読み込むことが可能である。これによって、演算処理の実行速度を高めることができる。
次に、浮動小数点演算命令実行時に動作する各ブロックの詳細な構成を示すとともに、それらのブロック間での信号の流れについて説明する。なお、以下の説明では例として、例えば“Simd-fmad %127*%f100+%f50=%f10”のように、ソースオペランドとして3つのレジスタが指定された場合の動作を説明する。また、オペランドデータの読み出し元として、浮動小数点SIMDレジスタ600または浮動小数点リネーミングレジスタ560のいずれか一方が選択されるものとする。
図32は、浮動小数点演算命令実行時の命令デコーダの出力信号を示す図である。
図32では、浮動小数点演算命令実行時のDサイクルにおいて出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
命令デコード回路281は、浮動小数点演算命令をデコードすると、実行すべき浮動小数点演算の種類を示す制御信号D_FL_OPCを出力する。制御信号D_FL_OPCは、RSF360に出力される。
また、命令デコード回路281は、演算結果の書き込み先の浮動小数点SIMDレジスタ600のアドレスを示すアドレス信号D_WR_ADRを、基本レジスタリネーミングマップ301、拡張レジスタリネーミングマップ302、CSE400および制御信号生成回路282に出力する。アドレス信号D_WR_ADRは、0〜127の値をとる。
また、命令デコード回路281は、アドレス信号D_R1_FPR_ADR,D_R2_FPR_ADR,D_R3_FPR_ADRを、基本レジスタリネーミングマップ301、拡張レジスタリネーミングマップ302およびRSF360に対して出力する。アドレス信号D_R1_FPR_ADR,D_R2_FPR_ADR,D_R3_FPR_ADRは、それぞれ浮動小数点演算命令のソースオペランドで指定される、浮動小数点SIMDレジスタ600における3つのレジスタのアドレスを示している。
さらに、命令デコード回路281は、アドレス信号D_R1_FPR_ADR,D_R2_FPR_ADR,D_R3_FPR_ADRに関する制御信号として、制御信号D_R1_USE_BASIC,D_R2_USE_BASIC,D_R3_USE_BASIC,D_R1_USE_EXTEND,D_R2_USE_EXTEND,D_R3_USE_EXTENDを、RSF360に出力する。
制御信号D_R1_USE_BASIC,D_R1_USE_EXTENDは、第1番目のソースオペランドで指定されるレジスタとして、基本バス側を使用するか否か、および、拡張バス側を使用するか否かをそれぞれ示す。同様に、制御信号D_R2_USE_BASIC,D_R2_USE_EXTENDは、第2番目のソースオペランドで指定されるレジスタとして、基本バス側を使用するか否か、拡張バス側を使用するか否かをそれぞれ示す。制御信号D_R3_USE_BASIC,D_R3_USE_EXTENDは、第3番目のソースオペランドで指定されるレジスタとして、基本バス側を使用するか否か、および、拡張バス側を使用するか否かをそれぞれ示す。
浮動小数点演算命令の種類およびソースオペランドの値を基に、アドレス信号D_R1_FPR_ADRおよび制御信号D_R1_USE_BASIC,D_R1_USE_EXTENDを出力する処理手順は、図14に示したフローチャートにおいて、オペレーションコードおよびアドレスを基にアドレス信号D_WR_ADRおよび制御信号D_USE_BASIC,D_USE_EXTENDを出力する処理手順と同じである。
すなわち、命令デコード回路281は、SIMD演算命令をデコードしたときは、第1番目のソースオペランドに記述されたレジスタ番号に対応するアドレスを、アドレス信号D_R1_FPR_ADRとして出力する。このとき、制御信号D_R1_USE_BASIC,D_R1_USE_EXTENDをともにオンにする。
また、命令デコード回路281は、非SIMD演算命令をデコードしたとき、第1番目のソースオペランドに記述されたレジスタ番号に対応するアドレスが“127”以下であれば、そのアドレスをアドレス信号D_R1_FPR_ADRとして出力する。このとき、制御信号D_R1_USE_BASICをオンにし,D_R1_USE_EXTENDをオフにする。
また、命令デコード回路281は、非SIMD演算命令をデコードしたとき、第1番目のソースオペランドに記述されたレジスタ番号に対応するアドレスが“127”を超えていれば、そのアドレスから“128”を減算し、減算した値をアドレス信号D_R1_FPR_ADRとして出力する。このとき、制御信号D_R1_USE_BASICをオフにし、D_R1_USE_EXTENDをオンにする。
アドレス信号D_R2_FPR_ADRおよび制御信号D_R2_USE_BASIC,D_R2_USE_EXTENDは、命令の種類と、第2番目のソースオペランドに記述されたレジスタ番号とを基に、上記と同じ手順で出力される。また、アドレス信号D_R3_FPR_ADRおよび制御信号D_R3_USE_BASIC,D_R3_USE_EXTENDは、命令の種類と、第3番目のソースオペランドに記述されたレジスタ番号とを基に、上記と同じ手順で出力される。
また、命令デコード回路281は、演算結果の格納先として基本レジスタ601および拡張レジスタ602がそれぞれ指定されたか否かを示すD_USE_BASIC,D_USE_EXTENDを、制御信号生成回路282に対して出力する。
制御信号生成回路282は、命令デコード回路281からのアドレス信号D_WR_ADRが出力されると、次の信号を出力する。
制御信号D_FL_USE_BASICは、基本演算器521を使用するか否かを示す信号であり、制御信号D_FL_USE_EXTENDは、拡張演算器522を使用するか否かを示す信号である。制御信号D_FL_USE_BASIC,D_FL_USE_EXTENDは、ともにRSF360に対して出力される。
制御信号D_EU_USEは、基本演算器521および拡張演算器522の少なくとも一方を使用するか否かを示す信号であり、CSE400に対して出力される。制御信号D_REL_RSFは、RSF360に対してエントリの作成を要求する信号である。
制御信号D_FPR_WR_BASIC,D_FPR_WR_EXTENDは、演算結果の書き込み先がそれぞれ基本レジスタ601であるか否か、拡張レジスタ602であるか否かを示す信号であり、図13に示した制御信号D_FPR_WR_BASIC,D_FPR_WR_EXTENDと同じ信号である。
基本リネーミングレジスタ割り当て回路283,拡張リネーミングレジスタ割り当て回路284から出力される信号は、浮動小数点ロード命令のデコード時と同じである。また、CSE割り当て回路285は、浮動小数点ロード命令のデコード実行時と同様に、CSE400に登録するエントリを識別するエントリ識別信号D_IIDを割り当てる。
なお、浮動小数点演算命令がデコードされた場合のリネーミングレジスタの割り当て手順や、制御信号D_FPR_WR_BASIC,D_FPR_WR_EXTEND、アドレス信号D_WR_ADRの出力手順は、基本的に図14で示した処理手順と同じである。また、浮動小数点演算命令がデコードされた場合には、図14の処理において、制御信号D_FP_USE_BASIC,D_FP_USE_EXTENDの代わりに、制御信号D_FL_USE_BASIC,D_FL_USE_EXTENDが適用されればよい。これにより、浮動小数点演算命令の実行時に使用されるレジスタの種類が割り当てられ、後段のブロックにおいて、処理に使用されるレジスタを正確に特定できるようになる。
図33は、浮動小数点演算命令実行時のレジスタリネーミング部の入出力信号を示す図である。なお、図33では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
リネーミングマップ登録回路304,305に入力される信号の種類は、浮動小数点ロード命令の実行時と同じである。従って、浮動小数点ロード命令の実行時と同様の手順で、演算結果の書き込み先に対応するリネーミングレジスタのアドレスが、基本レジスタリネーミングマップ301または拡張レジスタリネーミングマップ302の少なくとも一方に登録される。
また、浮動小数点演算命令の実行時には、読み出し回路307,308に対して、命令デコーダ280からのアドレス信号D_R1_FPR_ADR,D_R2_FPR_ADR,D_R3_FPR_ADRが入力される。読み出し回路307は、アドレス信号D_R1_FPR_ADRで指定される基本レジスタ601に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを基本レジスタリネーミングマップ301から読み出す。そして、読み出したアドレスをアドレス信号D_R1_FUB_ADR_BASICとしてRSF360に出力する。また、読み出し回路307は、アドレス信号D_R2_FPR_ADRで指定される基本レジスタ601に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを基本レジスタリネーミングマップ301から読み出す。そして、読み出したアドレスをアドレス信号D_R2_FUB_ADR_BASICとしてRSF360に出力する。また、読み出し回路307は、アドレス信号D_R3_FPR_ADRで指定される基本レジスタ601に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを基本レジスタリネーミングマップ301から読み出す。そして、読み出したアドレスをアドレス信号D_R3_FUB_ADR_BASICとしてRSF360に出力する。
読み出し回路308は、アドレス信号D_R1_FPR_ADRで指定される拡張レジスタ602に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを拡張レジスタリネーミングマップ302から読み出す。そして、読み出したアドレスをアドレス信号D_R1_FUB_ADR_EXTENDとしてRSF360に出力する。また、読み出し回路308は、アドレス信号D_R2_FPR_ADRで指定される拡張レジスタ602に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを拡張レジスタリネーミングマップ302から読み出す。そして、読み出したアドレスをアドレス信号D_R2_FUB_ADR_EXTENDとしてRSF360に出力する。また、読み出し回路308は、アドレス信号D_R3_FPR_ADRで指定される拡張レジスタ602に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを拡張レジスタリネーミングマップ302から読み出す。そして、読み出したアドレスをアドレス信号D_R3_FUB_ADR_EXTENDとしてRSF360に出力する。
なお、Wサイクルでは、浮動小数点ロード命令実行時と同様の手順で、CSE400からのアドレス信号に対応する基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302内のエントリが、無効化される。
図34は、浮動小数点演算命令実行時のCSEの入出力信号を示す図である。なお、図34では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
浮動小数点演算命令の実行時において、エントリ生成回路402には、制御信号D_FP_USE_BASIC,D_FP_USE_EXTENDの代わりに、命令デコーダ280からの制御信号D_EU_USEが入力される。すなわち、浮動小数点ロード命令の実行時と異なり、浮動小数点演算命令の実行時には、CSE400は、基本演算器521および拡張演算器522のそれぞれによる演算の実行状態を個別に判定しない。
また、演算実行完了エントリ選択回路404には、X6サイクルにおいて、制御信号X_FL_COMPおよびエントリ識別信号X_FL_COMP_IIDが、ともにSIMD演算器520から入力される。制御信号X_FL_COMPは、SIMD演算器520での浮動小数点演算が完了したことを示す信号であり、エントリ識別信号X_FL_COMP_IIDは、CSE400のエントリを識別する信号である。
完了エントリ選択回路405は、Cサイクルにおいて、エントリ記憶回路401に登録された先頭のエントリを、完了判定回路406に読み出す。完了判定回路406は、読み出されたエントリに基づき、そのエントリに対応する処理の実行が完了しているか否かを判定する。浮動小数点演算命令の実行時には、完了判定回路406は、上記の制御信号X_FL_COMPおよびエントリ識別信号X_FL_COMP_IIDに基づくエントリの信号から、処理の実行完了を判定する。
信号出力回路407から出力される信号およびその出力先は、浮動小数点ロード命令の実行時と同じである。
図35は、浮動小数点演算命令実行時のCSEのエントリの内容を示す図である。
浮動小数点演算命令に対応するCSE400のエントリにおいて、浮動小数点ロード命令実行時と異なる点は、信号BASIC_FP_USE,EXTEND_FP_USEの代わりに信号EU_USEが登録されることと、信号BASIC_FP_COMP,EXTEND_FP_COMPの代わりに信号EU_COMPが登録されることである。
信号EU_USEは、基本演算器521および拡張演算器522の少なくとも一方を使用するか否かを示す信号であり、命令デコーダ280からの制御信号D_EU_USEの出力に応じてオンになる。信号EU_COMPは、演算処理が完了したか否かを示す信号であり、X6サイクルにおいて、SIMD演算器520からの制御信号X_FL_COMPをCSE400が受信すると、オンになる。
図36は、浮動小数点演算命令実行時のRSFの入出力信号を示す図である。なお、図36では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
RSF360は、エントリ記憶回路361、エントリ生成回路362、オペランドデータ待ち回路363、発行エントリ選択回路364および信号出力回路365を備える。
Dサイクルにおいて、エントリ生成回路362は、命令デコーダ280から制御信号D_REL_RSFを受信し、命令デコーダ280からのエントリ識別信号D_IIDに対応するエントリを1つ作成し、エントリ記憶回路361に登録する。エントリ生成回路362は、制御信号D_REL_RSFを受信したとき、浮動小数点演算命令用のエントリを作成する。
このとき、エントリ生成回路362には、命令デコーダ280からのアドレス信号D_R1_FPR_ADR,D_R2_FPR_ADR,D_R3_FPR_ADRが入力される。
また、SIMD演算命令がデコードされた場合には、エントリ生成回路362には、命令デコーダ280からの制御信号D_R1_USE_BASIC,D_R2_USE_BASIC,D_R3_USE_BASIC,D_R1_USE_EXTEND,D_R2_USE_EXTEND,D_R3_USE_EXTENDが入力される。ただし、非SIMD演算命令がデコードされた場合には、制御信号D_R1_USE_BASIC,D_R1_USE_EXTENDのうちの一方のみ、制御信号D_R2_USE_BASIC,D_R2_USE_EXTENDのうちの一方のみ、制御信号D_R3_USE_BASIC,D_R3_USE_EXTENDのうちの一方のみが、それぞれオンになる。
また、SIMD演算命令がデコードされた場合には、エントリ生成回路362には、命令デコーダ280からの制御信号D_FL_USE_BASIC,D_FL_USE_EXTEND、アドレス信号D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDが入力される。ただし、非SIMD演算命令がデコードされた場合には、制御信号D_FL_USE_BASIC,D_FL_USE_EXTENDのうちの一方のみ、アドレス信号D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDの一方のみが、それぞれオンになる。
また、ソースオペランドの読み出し元レジスタがリネーミングされていた場合には、エントリ生成回路362には、基本レジスタリネーミングマップ301からのアドレス信号D_R1_FUB_ADR_BASIC,D_R2_FUB_ADR_BASIC,D_R3_FUB_ADR_BASICのうち、リネーミングされたレジスタに対応する信号が入力される。また、ソースオペランドの読み出し元レジスタがリネーミングされていた場合には、エントリ生成回路362には、拡張レジスタリネーミングマップ302からのアドレス信号D_R1_FUB_ADR_EXTEND,D_R2_FUB_ADR_EXTEND,D_R3_FUB_ADR_EXTENDのうち、リネーミングされたレジスタに対応する信号が入力される。
SIMD演算命令がデコードされた場合、アドレス信号D_R1_FUB_ADR_BASICとアドレス信号D_R1_FUB_ADR_EXTEND、アドレス信号D_R2_FUB_ADR_BASICとアドレス信号D_R2_FUB_ADR_EXTEND、アドレス信号D_R3_FUB_ADR_BASICとアドレス信号D_R3_FUB_ADR_EXTENDは、それぞれセットで入力される。一方、非SIMD命令がデコードされた場合、アドレス信号D_R1_FUB_ADR_BASIC,D_R1_FUB_ADR_EXTENDの一方のみ、アドレス信号D_R2_FUB_ADR_BASIC,D_R2_FUB_ADR_EXTENDの一方のみ、アドレス信号D_R3_FUB_ADR_BASIC,D_R3_FUB_ADR_EXTENDの一方のみが入力される。
オペランドデータ待ち回路363は、アドレス信号D_R1_FUB_ADR_BASIC,D_R1_FUB_ADR_EXTEND,D_R2_FUB_ADR_BASIC,D_R2_FUB_ADR_EXTEND,D_R3_FUB_ADR_BASIC,D_R3_FUB_ADR_EXTENDなどによって指定されるレジスタからのオペランドデータの待ち合わせ制御を行う。発行エントリ選択回路364は、エントリ記憶回路361に登録されたエントリのうち、必要なデータの準備が整ったエントリの最も古いエントリを選択し、信号出力回路365に出力する。
発行エントリ選択回路364から浮動小数点演算命令に対応するエントリが出力されると、信号出力回路365は、エントリに基づき、制御信号B_FL_USE_BASIC,B_FL_USE_EXTEND,B_FL_OPC、選択信号B_R1_INGATE_BASIC,B_R2_INGATE_BASIC,B_R3_INGATE_BASIC,B_R1_INGATE_EXTEND,B_R2_INGATE_EXTEND,B_R3_INGATE_EXTEND、エントリ識別信号B_FL_IID、アドレス信号B_R1_FPR_ADR,B_R2_FPR_ADR,B_R3_FPR_ADR,B_R1_FUB_ADR_BASIC,B_R2_FUB_ADR_BASIC,B_R3_FUB_ADR_BASIC,B_R1_FUB_ADR_EXTEND,B_R2_FUB_ADR_EXTEND,B_R3_FUB_ADR_EXTENDを出力する。
図37は、浮動小数点演算命令実行時におけるRSFのエントリの内容を示す図である。
浮動小数点演算命令実行時にRSF360に登録される1つのエントリは、次の信号およびアドレスが登録される。信号Vは、エントリが有効か否かを示す。信号BASIC_FL_USE,EXTEND_FL_USEは、それぞれ基本演算器521を使用するか否か、拡張演算器522を使用するか否かを示す信号である。信号BASIC_FL_USEは、命令デコーダ280からの制御信号D_FL_USE_BASICに応じた値をとる。また、信号EXTEND_FL_USEは、命令デコーダ280からの制御信号D_FL_USE_EXTENDに応じた値をとる。従って、SIMD演算命令の実行時には、信号BASIC_FL_USE,EXTEND_FL_USEの両方がオンになり、非SIMD演算命令の実行時には、信号BASIC_FL_USE,EXTEND_FL_USEのいずれか一方がオンになる。また、エントリ発行時において、信号BASIC_FL_USE,EXTEND_FL_USEの値は、それぞれ制御信号B_FL_USE_BASIC,B_FL_USE_EXTENDとして出力される。
信号BASIC_R1_USE,BASIC_R2_USE,BASIC_R3_USEは、それぞれ、第1番目〜第3番目のソースオペランドで指定されるレジスタとして、基本バス側のレジスタを使用するか否かを示す。信号EXTEND_R1_USE,EXTEND_R2_USE,EXTEND_R3_USEは、それぞれ、第1番目〜第3番目のソースオペランドで指定されるレジスタとして、拡張バス側のレジスタを使用するか否かを示す。信号BASIC_R1_USE,BASIC_R2_USE,BASIC_R3_USE,EXTEND_R1_USE,EXTEND_R2_USE,EXTEND_R3_USEは、それぞれ命令デコーダ280からの制御信号D_R1_USE_BASIC,D_R2_USE_BASIC,D_R3_USE_BASIC,D_R1_USE_EXTEND,D_R2_USE_EXTEND,D_R3_USE_EXTENDと同じ値をとる。
信号OPCは、演算の種類を示す信号であり、命令デコーダ280からの制御信号D_FL_OPCに応じた値が登録される。また、エントリ発行時において、信号OPCの値は制御信号B_FL_OPCとして出力される。信号IIDは、CSE400における対応するエントリを識別する信号であり、命令デコーダ280からのエントリ識別信号D_IIDに応じた値が登録される。エントリ発行時において、信号IIDの値はエントリ識別信号B_FL_IIDとして出力される。
信号BASIC_R1_READY,BASIC_R2_READY,BASIC_R3_READYは、基本バス側のレジスタにおいてオペランドデータの準備ができたか否かを示す信号であり、オペランドデータ待ち回路363によって登録される。信号EXTEND_R1_READY,EXTEND_R2_READY,EXTEND_R3_READYは、拡張バス側のレジスタにおいてオペランドデータの準備ができたか否かを示す信号であり、オペランドデータ待ち回路363によって登録される。
信号BASIC_R1_INGATE,BASIC_R2_INGATE,BASIC_R3_INGATEは、基本オペランドデータ選択器531に入力されたデータを選択する選択信号であり、オペランドデータ待ち回路363によって登録される。信号BASIC_R1_INGATE,BASIC_R2_INGATE,BASIC_R3_INGATEは、信号BASIC_FL_USEがオンであるときに、オペランドデータ待ち回路363によって登録される。
信号EXTEND_R1_INGATE,EXTEND_R2_INGATE,EXTEND_R3_INGATEは、拡張オペランドデータ選択器532に入力されたデータを選択する選択信号であり、オペランドデータ待ち回路で363によって登録される。信号EXTEND_R1_INGATE,EXTEND_R2_INGATE,EXTEND_R3_INGATEは、信号EXTEND_FL_USEがオンであるときに、オペランドデータ待ち回路363によって登録される。
なお、本実施の形態では、後述するように、基本オペランドデータ選択器531および拡張オペランドデータ選択器532は、ともに8つの入力信号から1つを選択する。また、基本オペランドデータ選択器531および拡張オペランドデータ選択器532は、それぞれ入力されるすべての信号を選択しない場合もある。従って、基本オペランドデータ選択器531および拡張オペランドデータ選択器532の各選択動作を制御する信号BASIC_R1_INGATE,BASIC_R2_INGATE,BASIC_R3_INGATE,EXTEND_R1_INGATE,EXTEND_R2_INGATE,EXTEND_R3_INGATEは、いずれも4ビットの信号である。
エントリ発行時において、信号BASIC_R1_INGATE,BASIC_R2_INGATE,BASIC_R3_INGATE,EXTEND_R1_INGATE,EXTEND_R2_INGATE,EXTEND_R3_INGATEの値は、それぞれ選択信号B_R1_INGATE_BASIC,B_R2_INGATE_BASIC,B_R3_INGATE_BASIC,B_R1_INGATE_EXTEND,B_R2_INGATE_EXTEND,B_R3_INGATE_EXTENDとして出力される。
アドレスR1_REG_ADR,R2_REG_ADR,R3_REG_ADRは、浮動小数点SIMDレジスタ600からのオペランドデータの読み出しアドレスを示す。アドレスR1_REG_ADR,R2_REG_ADR,R3_REG_ADRは、それぞれ命令デコーダ280からの制御信号D_R1_FPR_ADR,D_R2_FPR_ADR,D_R3_FPR_ADRに応じた値をとる。また、エントリ発行時において、アドレスR1_REG_ADR,R2_REG_ADR,R3_REG_ADRの値は、それぞれ制御信号B_R1_FPR_ADR,B_R2_FPR_ADR,B_R3_FPR_ADRとして出力される。
アドレスBASIC_R1_FUB_ADR,BASIC_R2_FUB_ADR,BASIC_R3_FUB_ADRは、基本リネーミングレジスタ561からのオペランドデータの読み出しアドレスを示す。アドレスBASIC_R1_FUB_ADR,BASIC_R2_FUB_ADR,BASIC_R3_FUB_ADRは、それぞれ基本レジスタリネーミングマップ301からのアドレス信号D_R1_FUB_ADR_BASIC,D_R2_FUB_ADR_BASIC,D_R3_FUB_ADR_BASICに応じた値をとる。また、エントリ発行時において、アドレスBASIC_R1_FUB_ADR,BASIC_R2_FUB_ADR,BASIC_R3_FUB_ADRの値は、それぞれアドレス信号B_R1_FUB_ADR_BASIC,B_R2_FUB_ADR_BASIC,B_R3_FUB_ADR_BASICとして出力される。
アドレスEXTEND_R1_FUB_ADR,EXTEND_R2_FUB_ADR,EXTEND_R3_FUB_ADRは、拡張リネーミングレジスタ562からのオペランドデータの読み出しアドレスを示す。アドレスEXTEND_R1_FUB_ADR,EXTEND_R2_FUB_ADR,EXTEND_R3_FUB_ADRは、それぞれ拡張レジスタリネーミングマップ302からのアドレス信号D_R1_FUB_ADR_EXTEND,D_R2_FUB_ADR_EXTEND,D_R3_FUB_ADR_EXTENDに応じた値をとる。また、エントリ発行時において、アドレスEXTEND_R1_FUB_ADR,EXTEND_R2_FUB_ADR,EXTEND_R3_FUB_ADRの値は、それぞれアドレス信号B_R1_FUB_ADR_EXTEND,B_R2_FUB_ADR_EXTEND,B_R3_FUB_ADR_EXTENDとして出力される。
ここで、信号BASIC_R1_USE,BASIC_R2_USE,BASIC_R3_USEがそれぞれオンである場合、エントリ発行時に次のような信号出力が行われる。アドレスBASIC_R1_FUB_ADR,BASIC_R2_FUB_ADR,BASIC_R3_FUB_ADRにそれぞれ値が登録されれば、アドレス信号B_R1_FUB_ADR_BASIC,B_R2_FUB_ADR_BASIC,B_R3_FUB_ADR_BASICがそれぞれ出力され、アドレス信号B_R1_FPR_ADR,B_R2_FPR_ADR,B_R3_FPR_ADRはそれぞれ出力されない。一方、アドレスBASIC_R1_FUB_ADR,BASIC_R2_FUB_ADR,BASIC_R3_FUB_ADRにそれぞれ値が登録されていなければ、アドレス信号B_R1_FPR_ADR,B_R2_FPR_ADR,B_R3_FPR_ADRがそれぞれ出力され、アドレス信号B_R1_FUB_ADR_BASIC,B_R2_FUB_ADR_BASIC,B_R3_FUB_ADR_BASICは出力されない。
また、信号EXTEND_R1_USE,EXTEND_R2_USE,EXTEND_R3_USEがそれぞれオンである場合、エントリ発行時に次のような信号出力が行われる。アドレスEXTEND_R1_FUB_ADR,EXTEND_R2_FUB_ADR,EXTEND_R3_FUB_ADRにそれぞれ値が登録されれば、アドレス信号B_R1_FUB_ADR_EXTEND,B_R2_FUB_ADR_EXTEND,B_R3_FUB_ADR_EXTENDがそれぞれ出力され、アドレス信号B_R1_FPR_ADR,B_R2_FPR_ADR,B_R3_FPR_ADRはそれぞれ出力されない。一方、アドレスEXTEND_R1_FUB_ADR,EXTEND_R2_FUB_ADR,EXTEND_R3_FUB_ADRにそれぞれ値が登録されていなければ、アドレス信号B_R1_FPR_ADR,B_R2_FPR_ADR,B_R3_FPR_ADRがそれぞれ出力され、アドレス信号B_R1_FUB_ADR_EXTEND,B_R2_FUB_ADR_EXTEND,B_R3_FUB_ADR_EXTENDは出力されない。
アドレスBASIC_DST_ADR,EXTEND_DST_ADRは、それぞれ基本リネーミングレジスタ561、拡張リネーミングレジスタ562に対する演算結果の書き込みアドレスを示す。Dサイクルにおいて、アドレスBASIC_DST_ADR,EXTEND_DST_ADRには、アドレス信号D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDに応じた値が登録される。また、エントリ発行時において、アドレスBASIC_DST_ADR,EXTEND_DST_ADRの値は、それぞれアドレス信号B_DST_FUB_ADR_BASIC,B_DST_FUB_ADR_EXTENDとして出力される。
TAGフィールドは、その他のタグ情報が保持されるフィールドである。
図38は、SIMD演算命令実行時のRSFエントリの内容を説明する図である。
本実施の形態では、浮動小数点演算命令において3つのソースオペランドが記述され、それぞれのソースオペランドによりソースレジスタが指定される。SIMD演算命令の場合には、6個のソースレジスタからデータを読み込んで演算が行われる。
SIMD演算命令に対応するRSF360のエントリでは、これら6個のソースレジスタに対応するオペランドデータが準備されたか否かが管理される。すなわち、信号BASIC_R1_READY,BASIC_R2_READY,BASIC_R3_READYは、3個のソースオペランドで指定されるソースレジスタのうち、基本バス側のレジスタ(基本レジスタ601、基本リネーミングレジスタ561、基本結果レジスタ523および基本ロードレジスタ462)のデータが準備されたか否かを示す。また、信号EXTEND_R1_READY,EXTEND_R2_READY,EXTEND_R3_READYは、3個のソースオペランドで指定されるソースレジスタのうち、拡張バス側のレジスタ(拡張レジスタ602、拡張リネーミングレジスタ562、拡張結果レジスタ524および拡張ロードレジスタ463)のデータが準備されたか否かを示す。これらの信号BASIC_R1_READY,BASIC_R2_READY,BASIC_R3_READY,EXTEND_R1_READY,EXTEND_R2_READY,EXTEND_R3_READYは、オペランドデータ待ち回路363により登録される。
発行エントリ選択回路364は、信号BASIC_R1_READY,BASIC_R2_READY,BASIC_R3_READY,EXTEND_R1_READY,EXTEND_R2_READY,EXTEND_R3_READYがすべてオンになるまで、エントリを発行しない。
図39は、非SIMD演算命令実行時のRSFエントリの内容を説明する図である。
非SIMD演算命令がデコードされた場合には、3個のソースレジスタからデータを読み込んで演算が行われる。信号BASIC_R1_USE、信号EXTEND_R1_USEのいずれか1つがオンになる。信号BASIC_R1_USEがオンで信号EXTEND_R1_USEがオフの場合には、信号EXTEND_R1_READYは、エントリ作成と同時にオンになり、信号BASIC_R1_READYは、データが揃った時点でオンとなる。また、信号BASIC_R1_USEがオフで信号EXTEND_R1_USEがオンの場合には、信号BASIC_R1_READYは、エントリ作成と同時にオンになり、信号EXTEND_R1_READYは、データが揃った時点でオンとなる。
信号BASIC_R2_USE,信号EXTEND_R2_USEと、信号BASIC_R2_READY,EXTEND_R2_READYとの関係は、上記の信号BASIC_R1_USE,信号EXTEND_R1_USEと、信号BASIC_R1_READY,EXTEND_R1_READYとの関係と同様である。また、信号BASIC_R3_USE,信号EXTEND_R3_USEと、信号BASIC_R3_READY,EXTEND_R3_READYとの関係も、上記の信号BASIC_R1_USE,信号EXTEND_R1_USEと、信号BASIC_R1_READY,EXTEND_R1_READYとの関係と同様である。このため、発行エントリ選択回路364は、SIMD演算命令と同様に、信号BASIC_R1_READY,BASIC_R2_READY,BASIC_R3_READY,EXTEND_R1_READY,EXTEND_R2_READY,EXTEND_R3_READYがすべてオンになるまで、エントリを発行しない。
なお、図39の例では、命令コードで指定される第1番目のソースレジスタおよび第2番目のソースレジスタとしてともに基本バス側のレジスタが指定され、第3番目のソースレジスタとして拡張バス側のレジスタが指定される。非SIMD演算命令では、ソースレジスタのアドレスとして0〜255までを指定可能であることから、基本バス側、拡張バス側のどのレジスタをソースレジスタとして指定し、データを読み込むことが可能である。
図40〜図44は、オペランドデータ待ち回路によるエントリ更新手順を示すフローチャートである。なお、図40〜図44では、例として、第1番目のソースオペランドに関する処理について示している。
RSF360のエントリにおいて、信号BASIC_FL_USE,EXTEND_FL_USE,BASIC_R1_USE,EXTEND_R1_USEがすべてオンである場合には、オペランドデータ待ち回路363は、図40の処理を実行する。
[ステップS71]オペランドデータ待ち回路363は、アドレスBASIC_R1_FUB_ADRの値が有効であるかを判定する。有効な値が登録されている場合には、ステップS72の処理が実行され、有効な値が登録されていない場合には、ステップS75の処理が実行される。
[ステップS72]オペランドデータ待ち回路363は、アドレスBASIC_R1_FUB_ADRで示される基本リネーミングレジスタ561に対するオペランドデータの待ち合わせを行う。
[ステップS73]オペランドデータ待ち回路363は、アドレスBASIC_R1_FUB_ADRで示される基本リネーミングレジスタ561に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路363は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップS74の処理が実行される。
[ステップS74]オペランドデータ待ち回路363は、基本オペランドデータ選択器531で選択するデータ読み出し元レジスタを、基本リネーミングレジスタ561、基本結果レジスタ523および基本ロードレジスタ462の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号BASIC_R1_INGATEの値を設定する。この後、ステップS76の処理が実行される。
[ステップS75]オペランドデータ待ち回路363は、基本オペランドデータ選択器531で選択するデータ読み出し元レジスタを、基本レジスタ601に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号BASIC_R1_INGATEの値を設定する。この後、ステップS76の処理が実行される。
[ステップS76]オペランドデータ待ち回路363は、エントリ内の信号BASIC_R1_READYをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
[ステップS77]オペランドデータ待ち回路363は、アドレスEXTEND_R1_FUB_ADRの値が有効であるかを判定する。有効な値が登録されている場合には、ステップS78の処理が実行され、有効な値が登録されていない場合には、ステップS81の処理が実行される。
[ステップS78]オペランドデータ待ち回路363は、アドレスEXTEND_R1_FUB_ADRで示される拡張リネーミングレジスタ562に対するオペランドデータの待ち合わせを行う。
[ステップS79]オペランドデータ待ち回路363は、アドレスEXTEND_R1_FUB_ADRで示される拡張リネーミングレジスタ562に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路363は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップS80の処理が実行される。
[ステップS80]オペランドデータ待ち回路363は、拡張オペランドデータ選択器532で選択するデータ読み出し元レジスタを、拡張リネーミングレジスタ562、拡張結果レジスタ524および拡張ロードレジスタ463の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号EXTEND_R1_INGATEの値を設定する。この後、ステップS82の処理が実行される。
[ステップS81]オペランドデータ待ち回路363は、拡張オペランドデータ選択器532で選択するデータ読み出し元レジスタを、拡張レジスタ602に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号EXTEND_R1_INGATEの値を設定する。この後、ステップS82の処理が実行される。
[ステップS82]オペランドデータ待ち回路363は、エントリ内の信号EXTEND_R1_READYをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
[ステップS83]発行エントリ選択回路364で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路363は、ステップS71〜S82の処理を再度実行する。
上記の処理では、オペランドデータの待ち合わせをオペランドデータごとに別々に行っているため、それぞれのオペランドデータの待ち合わせの完了が別々のサイクルになることがある。しかしながら、発行エントリ選択回路364は、全てのオペランドデータの準備ができないとエントリを発行しない。このような発行エントリ選択回路364の制御手順により、オペランドデータの待ち合わせをオペランドデータごとに行うことができる。
また、RSF360のエントリにおいて、信号BASIC_FL_USEがオン、信号EXTEND_FL_USEがオフ、信号BASIC_R1_USEがオン、信号EXTEND_R1_USEがオフである場合には、オペランドデータ待ち回路363は、図41の処理を実行する。
[ステップS91]オペランドデータ待ち回路363は、アドレスBASIC_R1_FUB_ADRの値が有効であるかを判定する。有効な値が登録されている場合には、ステップS92の処理が実行され、有効な値が登録されていない場合には、ステップS95の処理が実行される。
[ステップS92]オペランドデータ待ち回路363は、アドレスBASIC_R1_FUB_ADRで示される基本リネーミングレジスタ561に対するオペランドデータの待ち合わせを行う。
[ステップS93]オペランドデータ待ち回路363は、アドレスBASIC_R1_FUB_ADRで示される基本リネーミングレジスタ561に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路363は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップS94の処理が実行される。
[ステップS94]オペランドデータ待ち回路363は、基本オペランドデータ選択器531で選択するデータ読み出し元レジスタを、基本リネーミングレジスタ561、基本結果レジスタ523および基本ロードレジスタ462の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号BASIC_R1_INGATEの値を設定する。この後、ステップS96の処理が実行される。
[ステップS95]オペランドデータ待ち回路363は、基本オペランドデータ選択器531で選択するデータ読み出し元レジスタを、基本レジスタ601に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号BASIC_R1_INGATEの値を設定する。この後、ステップS96の処理が実行される。
[ステップS96]オペランドデータ待ち回路363は、エントリ内の信号BASIC_R1_READYをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
[ステップS97]オペランドデータ待ち回路363は、拡張オペランドデータ選択器532においてどの入力信号も選択しないように、エントリ内の信号EXTEND_R1_INGATEの値を設定する。
[ステップS98]オペランドデータ待ち回路363は、エントリ内の信号EXTEND_R1_READYをオンにする。
[ステップS99]発行エントリ選択回路364で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路363は、ステップS91〜S96の処理を再度実行する。
また、RSF360のエントリにおいて、信号BASIC_FL_USEがオフ、信号EXTEND_FL_USEがオン、信号BASIC_R1_USEがオフ、信号EXTEND_R1_USEがオンの場合には、オペランドデータ待ち回路363は、図42の処理を実行する。
[ステップS101]オペランドデータ待ち回路363は、アドレスEXTEND_R1_FUB_ADRの値が有効であるかを判定する。有効な値が登録されている場合には、ステップS102の処理が実行され、有効な値が登録されていない場合には、ステップS105の処理が実行される。
[ステップS102]オペランドデータ待ち回路363は、アドレスEXTEND_R1_FUB_ADRで示される拡張リネーミングレジスタ562に対するオペランドデータの待ち合わせを行う。
[ステップS103]オペランドデータ待ち回路363は、アドレスEXTEND_R1_FUB_ADRで示される拡張リネーミングレジスタ562に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路363は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップS104の処理が実行される。
[ステップS104]オペランドデータ待ち回路363は、拡張オペランドデータ選択器532で選択するデータ読み出し元レジスタを、拡張リネーミングレジスタ562、拡張結果レジスタ524および拡張ロードレジスタ463の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号EXTEND_R1_INGATEの値を設定する。この後、ステップS106の処理が実行される。
[ステップS105]オペランドデータ待ち回路363は、拡張オペランドデータ選択器532で選択するデータ読み出し元レジスタを、拡張レジスタ602に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号EXTEND_R1_INGATEの値を設定する。この後、ステップS106の処理が実行される。
[ステップS106]オペランドデータ待ち回路363は、エントリ内の信号EXTEND_R1_READYをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
[ステップS107]オペランドデータ待ち回路363は、基本オペランドデータ選択器531においてどの入力信号も選択しないように、エントリ内の信号BASIC_R1_INGATEの値を設定する。
[ステップS108]オペランドデータ待ち回路363は、エントリ内の信号BASIC_R1_READYをオンにする。
[ステップS109]発行エントリ選択回路364で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路363は、ステップS101〜S106の処理を再度実行する。
また、RSF360のエントリにおいて、信号BASIC_FL_USEがオン、信号EXTEND_FL_USEがオフ、信号BASIC_R1_USEがオフ、信号EXTEND_R1_USEがオンである場合には、オペランドデータ待ち回路363は、図43の処理を実行する。
[ステップS111]オペランドデータ待ち回路363は、アドレスEXTEND_R1_FUB_ADRの値が有効であるかを判定する。有効な値が登録されている場合には、ステップS112の処理が実行され、有効な値が登録されていない場合には、ステップS115の処理が実行される。
[ステップS112]オペランドデータ待ち回路363は、アドレスEXTEND_R1_FUB_ADRで示される拡張リネーミングレジスタ562に対するオペランドデータの待ち合わせを行う。
[ステップS113]オペランドデータ待ち回路363は、アドレスEXTEND_R1_FUB_ADRで示される拡張リネーミングレジスタ562に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路363は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップS114の処理が実行される。
[ステップS114]オペランドデータ待ち回路363は、基本オペランドデータ選択器531で選択するデータ読み出し元レジスタを、拡張リネーミングレジスタ562、拡張結果レジスタ524および拡張ロードレジスタ463の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号BASIC_R1_INGATEの値を設定する。この後、ステップS116の処理が実行される。
[ステップS115]オペランドデータ待ち回路363は、基本オペランドデータ選択器531で選択するデータ読み出し元レジスタを、拡張レジスタ602に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号BASIC_R1_INGATEの値を設定する。この後、ステップS116の処理が実行される。
[ステップS116]オペランドデータ待ち回路363は、エントリ内の信号EXTEND_R1_READYをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
[ステップS117]オペランドデータ待ち回路363は、拡張オペランドデータ選択器532においてどの入力信号も選択しないように、エントリ内の信号EXTEND_R1_INGATEの値を設定する。
[ステップS118]オペランドデータ待ち回路363は、エントリ内の信号BASIC_R1_READYをオンにする。
[ステップS119]発行エントリ選択回路364で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路363は、ステップS111〜S116の処理を再度実行する。
RSF360のエントリにおいて、信号BASIC_FL_USEがオフ、信号EXTEND_FL_USEがオン、信号BASIC_R1_USEがオン、信号EXTEND_R1_USEがオフである場合には、オペランドデータ待ち回路363は、図44の処理を実行する。
[ステップS121]オペランドデータ待ち回路363は、アドレスBASIC_R1_FUB_ADRの値が有効であるかを判定する。有効な値が登録されている場合には、ステップS122の処理が実行され、有効な値が登録されていない場合には、ステップS125の処理が実行される。
[ステップS122]オペランドデータ待ち回路363は、アドレスBASIC_R1_FUB_ADRで示される基本リネーミングレジスタ561に対するオペランドデータの待ち合わせを行う。
[ステップS123]オペランドデータ待ち回路363は、アドレスBASIC_R1_FUB_ADRで示される基本リネーミングレジスタ561に、オペランドデータが準備されたか否かを判定する。オペランドデータ待ち回路363は、オペランドデータが準備されるまで、データの待ち合わせを行う。そして、オペランドデータが準備されるとステップS124の処理が実行される。
[ステップS124]オペランドデータ待ち回路363は、拡張オペランドデータ選択器532で選択するデータ読み出し元レジスタを、基本リネーミングレジスタ561、基本結果レジスタ523および基本ロードレジスタ462の中から決定する。そして、決定したレジスタを指し示すように、エントリ内の信号EXTEND_R1_INGATEの値を設定する。この後、ステップS126の処理が実行される。
[ステップS125]オペランドデータ待ち回路363は、拡張オペランドデータ選択器532で選択するデータ読み出し元レジスタを、基本レジスタ601に決定する。そして、決定したレジスタを指し示すように、エントリ内の信号EXTEND_R1_INGATEの値を設定する。この後、ステップS126の処理が実行される。
[ステップS126]オペランドデータ待ち回路363は、エントリ内の信号BASIC_R1_READYをオンにし、必要なオペランドデータの待ち合わせが完了したことをエントリに登録する。
[ステップS127]オペランドデータ待ち回路363は、基本オペランドデータ選択器531においてどの入力信号も選択しないように、エントリ内の信号BASIC_R1_INGATEの値を設定する。
[ステップS128]オペランドデータ待ち回路363は、エントリ内の信号EXTEND_R1_READYをオンにする。
[ステップS129]発行エントリ選択回路364で、上記処理対象のエントリが発行された場合には、オペランドデータ待ちをする必要はなくなるので、処理が終了となる。また、エントリが発行されなかった場合には、オペランドデータ待ち回路363は、ステップS121〜S126の処理を再度実行する。
なお、上記の図40〜図44では、第1番目のソースオペランドに関する処理について示したが、第2番目、第3番目のソースオペランドについても、同様の処理手順でデータの待ち合わせおよびエントリの更新を行うことが可能である。例えば、第2番目のソースオペランドに関する処理は、上記の図40〜図44に対して、制御信号BASIC_R1_USE,EXTEND_R1_USE,BASIC_R1_READY,EXTEND_R1_READY,BASIC_R1_INGATE,EXTEND_R1_INGATEおよびアドレスBASIC_R1_FUB_ADR,EXTEND_R1_FUB_ADR,R1_REG_ADRの代わりに、制御信号BASIC_R2_USE,EXTEND_R2_USE,BASIC_R2_READY,EXTEND_R2_READY,BASIC_R2_INGATE,EXTEND_R2_INGATEおよびアドレスBASIC_R2_FUB_ADR,EXTEND_R2_FUB_ADR,R2_REG_ADRを適用することで実現される。同様に、第3番目のソースオペランドに関する処理は、上記の図40〜図44に対して、制御信号BASIC_R1_USE,EXTEND_R1_USE,BASIC_R1_READY,EXTEND_R1_READY,BASIC_R1_INGATE,EXTEND_R1_INGATEおよびアドレスBASIC_R1_FUB_ADR,EXTEND_R1_FUB_ADR,R1_REG_ADRの代わりに、制御信号BASIC_R3_USE,EXTEND_R3_USE,BASIC_R3_READY,EXTEND_R3_READY,BASIC_R3_INGATE,EXTEND_R3_INGATEおよびアドレスBASIC_R3_FUB_ADR,EXTEND_R3_FUB_ADR,R3_REG_ADRを適用することで実現される。
図45は、浮動小数点演算命令実行時のSIMD演算器の入出力信号を示す図である。なお、図45では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
SIMD演算器520は、基本演算器521、拡張演算器522、基本結果レジスタ523、拡張結果レジスタ524、演算制御回路525およびラッチ回路526,527を備えている。また、基本演算器521および拡張演算器522には、3つのオペランドデータ選択部530a〜530cが接続されている。
オペランドデータ選択部530aは、命令コード内の1番目のソースオペランドに対応するオペランドデータを、RSF360から指定されたレジスタから読み込み、基本演算器521および拡張演算器522にそれぞれ出力する。オペランドデータ選択部530bは、命令コード内の2番目のソースオペランドに対応するオペランドデータを、RSF360から指定されたレジスタから読み込み、基本演算器521および拡張演算器522にそれぞれ出力する。オペランドデータ選択部530cは、命令コード内の3番目のソースオペランドに対応するオペランドデータを、RSF360から指定されたレジスタから読み込み、基本演算器521および拡張演算器522にそれぞれ出力する。
SIMD演算命令の実行時には、オペランドデータ選択部530a〜530cは、基本演算器521および拡張演算器522の両方に対してオペランドデータを出力する。一方、非SIMD演算命令の実行時には、オペランドデータ選択部530a〜530cは、基本演算器521および拡張演算器522のうち演算が実行される一方の演算器のみに対してオペランドデータを出力する。
ここで、図46は、オペランドデータ選択部の内部構成を示す図である。なお、オペランドデータ選択部530a〜530cは同じ構成を有しているため、ここではオペランドデータ選択部530aについてのみ例示する。
オペランドデータ選択部530aは、基本オペランドデータ選択器531、拡張オペランドデータ選択器532およびラッチ回路533,534を備えている。基本オペランドデータ選択器531および拡張オペランドデータ選択器532には、データ信号B_R1_FPR_BASIC_DATA,B_R1_FUB_BASIC_DATA,FL_RR_BASIC,LR_BASIC,B_R1_FPR_EXTEND_DATA,B_R1_FUB_EXTEND_DATA,FL_RR_EXTEND,LR_EXTENDが共通に入力される。
データ信号B_R1_FPR_BASIC_DATA,B_R1_FUB_BASIC_DATA,FL_RR_BASIC,LR_BASICは、RSF360からのエントリ発行時に、基本レジスタ601、基本リネーミングレジスタ561、基本結果レジスタ523、基本ロードレジスタ462からそれぞれ出力されたデータを示す。
データ信号B_R1_FPR_EXTEND_DATA,B_R1_FUB_EXTEND_DATA、FL_RR_EXTEND,LR_EXTENDは、RSF360からのエントリ発行時に、拡張レジスタ602、拡張リネーミングレジスタ562、拡張結果レジスタ524、拡張ロードレジスタ463からそれぞれ出力されたデータを示す。
Bサイクルにおいて、オペランドデータ選択部530aには、上記のデータ信号がすべて入力される。基本オペランドデータ選択器531は、RSF360から出力された選択信号B_R1_INGATE_BASICに従って、基本オペランドデータ選択器531に入力されたデータ信号から1つを選択し、選択したデータ信号をラッチ回路533に出力する。出力されたデータ信号は、ラッチ回路533を介して、データ信号X_FL_OR1R_BASICとして基本演算器521に出力される。また、拡張オペランドデータ選択器532は、RSF360から出力された選択信号B_R1_INGATE_EXTENDに従って、拡張オペランドデータ選択器532に入力されたデータ信号から1つ選択し、選択したデータ信号をラッチ回路534に出力する。出力されたデータ信号は、ラッチ回路534を介して、データ信号X_FL_OR1R_EXTENDとして拡張演算器522に出力される。
なお、オペランドデータ選択部530bにおいては、基本オペランドデータ選択器531および拡張オペランドデータ選択器532には、データ信号B_R1_FPR_BASIC_DATA,B_R1_FUB_BASIC_DATA,B_R1_FPR_EXTEND_DATA,B_R1_FUB_EXTEND_DATAの代わりに、データ信号B_R2_FPR_BASIC_DATA,B_R2_FUB_BASIC_DATA,B_R2_FPR_EXTEND_DATA,B_R2_FUB_EXTEND_DATAが入力される。また、データ信号の選択を指示する信号としては、選択信号B_R1_INGATE_BASIC,選択信号B_R1_INGATE_EXTENDの代わりに、選択信号B_R2_INGATE_BASIC,選択信号B_R2_INGATE_EXTENDが入力される。選択されたデータ信号は、X_FL_OR2R_BASIC,X_FL_OR2R_EXTENDとして、それぞれ基本演算器521および拡張演算器522に出力される。
また、オペランドデータ選択部530cにおいては、基本オペランドデータ選択器531および拡張オペランドデータ選択器532には、データ信号B_R1_FPR_BASIC_DATA,B_R1_FUB_BASIC_DATA,B_R1_FPR_EXTEND_DATA,B_R1_FUB_EXTEND_DATAの代わりに、データ信号B_R3_FPR_BASIC_DATA,B_R3_FUB_BASIC_DATA,B_R3_FPR_EXTEND_DATA,B_R3_FUB_EXTEND_DATAが入力される。また、データ信号の選択を指示する信号としては、選択信号B_R1_INGATE_BASIC,選択信号B_R1_INGATE_EXTENDの代わりに、選択信号B_R3_INGATE_BASIC,選択信号B_R3_INGATE_EXTENDが入力される。選択されたデータ信号は、X_FL_OR3R_BASIC,X_FL_OR3R_EXTENDとして、それぞれ基本演算器521および拡張演算器522に出力される。
以下、図45に戻って説明する。
X1サイクルにおいて、ラッチ回路526には、RSF360から、制御信号B_FL_USE_BASIC,B_FL_USE_EXTEND,B_FL_OPC、アドレス信号B_DST_FUB_ADR_BASIC,B_DST_FUB_ADR_EXTEND、およびエントリ識別信号B_FL_IIDが入力される。これらの信号は、ラッチ回路526から演算制御回路525に入力される。
演算制御回路525は、制御信号B_FL_OPCに基づいて、演算器に実行させる演算の種類を特定する。そして、制御信号B_FL_USE_BASICがオンであれば、特定した演算の実行を基本演算器521に要求し、制御信号B_FL_USE_EXTENDがオンであれば、特定した演算の実行を拡張演算器522に要求する。
また、演算制御回路525は、演算の実行要求を発行した後、X6サイクルにおいて、演算が完了したことを示す制御信号X_FL_COMPと、エントリ識別信号X_FL_COMP_IIDとを、CSE400に対して出力する。なお、エントリ識別信号X_FL_COMP_IIDの出力値は、RSF360から入力されたエントリ識別信号B_FL_IIDと同じである。
基本演算器521は、演算制御回路525からの要求に応じて、オペランドデータ選択部530a〜530cからのオペランドデータを用いて演算を行い、X6サイクルにおいて、演算結果を基本結果レジスタ523に出力する。拡張演算器522は、演算制御回路525からの要求に応じて、オペランドデータ選択部530a〜530cからのオペランドデータを用いて演算を行い、X6サイクルにおいて、演算結果を拡張結果レジスタ524に出力する。基本結果レジスタ523および拡張結果レジスタ524にそれぞれ格納された演算結果は、Uサイクルにおいて、それぞれデータ信号FL_RR_BASIC,FL_RR_EXTENDとして浮動小数点リネーミングレジスタ560に出力される。
SIMD演算命令の実行時には、基本演算器521および拡張演算器522の両方において演算が実行され、演算結果が基本結果レジスタ523および拡張結果レジスタ524に対して、それぞれ同じタイミングで格納される。一方、非SIMD演算命令の実行時には、基本演算器521または拡張演算器522のいずれか一方において演算が実行され、演算結果も基本結果レジスタ523または拡張結果レジスタ524のいずれか一方に格納される。
また、演算制御回路525は、X6サイクルにおいて、RSF360からの制御信号B_FL_USE_BASIC,B_FL_USE_EXTEND、アドレス信号B_DST_FUB_ADR_BASIC,B_DST_FUB_ADR_EXTENDを、それぞれ制御信号U_FL_FUB_WR_BASIC,U_FL_FUB_WR_EXTEND、アドレス信号U_FL_DST_FUB_ADR_BASIC,U_FL_DST_FUB_ADR_EXTENDとして出力する。これらの制御信号およびアドレス信号の出力タイミングは、ラッチ回路527により、基本結果レジスタ523および拡張結果レジスタ524からのデータ出力タイミングと一致するように調整される。そして、これらの制御信号およびアドレス信号は、浮動小数点リネーミングレジスタ560に出力される。
図47は、浮動小数点演算命令実行時の浮動小数点リネーミングレジスタの入出力信号を示す図である。なお、図47では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
Bサイクルにおいて、読み出し回路565は、RSF360から出力されたアドレス信号B_R1_FUB_ADR_BASIC,B_R2_FUB_ADR_BASIC,B_R3_FUB_ADR_BASICにそれぞれ対応するデータを基本リネーミングレジスタ561から読み出す。アドレス信号B_R1_FUB_ADR_BASIC,B_R2_FUB_ADR_BASIC,B_R3_FUB_ADR_BASICに対応するデータは、それぞれデータ信号B_R1_FUB_BASIC_DATA,B_R2_FUB_BASIC_DATA,B_R3_FUB_BASIC_DATAとして、オペランドデータ選択部530a〜530cに出力される。
また、Bサイクルにおいて、読み出し回路566は、RSF360から出力されたアドレス信号B_R1_FUB_ADR_EXTEND,B_R2_FUB_ADR_EXTEND,B_R3_FUB_ADR_EXTENDにそれぞれ対応するデータを拡張リネーミングレジスタ562から読み出す。アドレス信号B_R1_FUB_ADR_EXTEND,B_R2_FUB_ADR_EXTEND,B_R3_FUB_ADR_EXTENDに対応するデータは、それぞれデータ信号B_R1_FUB_EXTEND_DATA,B_R2_FUB_EXTEND_DATA,B_R3_FUB_EXTEND_DATAとして、オペランドデータ選択部530a〜530cに出力される。
また、Uサイクルにおいて、書き込み回路563は、制御信号U_FL_FUB_WR_BASICがオンである場合に、アドレス信号U_FL_DST_FUB_ADR_BASICにより指定される基本リネーミングレジスタ561のアドレスに対して、基本結果レジスタ523からのデータ信号FL_RR_BASICを格納する。制御信号U_FL_FUB_WR_BASIC、アドレス信号U_FL_DST_FUB_ADR_BASICは、ともにSIMD演算器520から出力される。
また、Uサイクルにおいて、書き込み回路564は、制御信号U_FL_FUB_WR_EXTENDがオンである場合に、アドレス信号U_FL_DST_FUB_ADR_EXTENDにより指定される拡張リネーミングレジスタ562のアドレスに対して、拡張結果レジスタ524からのデータ信号FL_RR_EXTENDを格納する。制御信号U_FL_FUB_WR_EXTEND、アドレス信号U_FL_DST_FUB_ADR_EXTENDは、ともにSIMD演算器520から出力される。
また、Wサイクルにおいて、読み出し回路565は、CSE400からのアドレス信号W_FUB_ADR_BASICにより指定される基本リネーミングレジスタ561のアドレスから演算結果を読み出し、データ信号W_FPR_FUB_BASIC_DATAとして浮動小数点SIMDレジスタ600に出力する。また、読み出し回路566は、CSE400からのアドレス信号W_FUB_ADR_EXTENDにより指定される拡張リネーミングレジスタ562のアドレスから演算結果を読み出し、データ信号W_FPR_FUB_EXTEND_DATAとして浮動小数点SIMDレジスタ600に出力する。
図48は、浮動小数点演算命令実行時の浮動小数点SIMDレジスタの入出力信号を示す図である。なお、図48では、浮動小数点演算命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
Bサイクルにおいて、読み出し回路605,606は、RSF360から出力されたアドレス信号B_R1_FPR_ADR,B_R2_FPR_ADR,B_R3_FPR_ADRにそれぞれ対応するデータを、基本レジスタ601および拡張レジスタ602からそれぞれ読み出す。読み出し回路605は、アドレス信号B_R1_FPR_ADR,B_R2_FPR_ADR,B_R3_FPR_ADRに対応するデータを、それぞれデータ信号B_R1_FPR_BASIC_DATA,B_R2_FPR_BASIC_DATA,B_R3_FPR_BASIC_DATAとして、オペランドデータ選択部530a〜530cに出力する。また、読み出し回路606は、アドレス信号B_R1_FPR_ADR,B_R2_FPR_ADR,B_R3_FPR_ADRに対応するデータを、それぞれデータ信号B_R1_FPR_EXTEND_DATA,B_R2_FPR_EXTEND_DATA,B_R3_FPR_EXTEND_DATAとして、オペランドデータ選択部530a〜530cに出力する。
なお、上記構成では、非SIMD演算命令の実行時において、例えば、アドレス信号B_R1_FPR_ADRにより読み出しアドレスが指定された場合、読み出し回路605,606の両方からデータがオペランドデータ選択部530a〜530cに出力される。しかし、非SIMD演算命令の実行時には、オペランドデータ選択部530a〜530c内の基本オペランドデータ選択器531または拡張オペランドデータ選択器532のいずれか一方でしか入力データの選択を行わない。従って、読み出し回路605,606のうちの一方から読み出されたデータのみが、演算に使用される。
また、Wサイクルにおいて、浮動小数点SIMDレジスタ600では、演算結果の格納が行われる。書き込み回路603は、制御信号W_FPR_WR_BASICがオンである場合に、アドレス信号W_FPR_ADRにより指定される基本レジスタ601のアドレスに対して、データ信号W_FPR_FUB_BASIC_DATAを格納する。また、書き込み回路604は、制御信号W_FPR_WR_EXTENDがオンである場合に、アドレス信号W_FPR_ADRにより指定される拡張レジスタ602のアドレスに対して、データ信号W_FPR_FUB_EXTEND_DATAを格納する。
図49は、SIMD演算命令実行時の演算結果の格納動作を説明する図である。また、図50は、非SIMD演算命令実行時の演算結果の格納動作を説明する図である。
前述のように、SIMD演算命令の実行時では、基本演算器521および拡張演算器522の両方によって並列に演算が実行され、演算結果がそれぞれ基本結果レジスタ523および拡張結果レジスタ524に格納される。基本演算器521から基本結果レジスタ523へのデータ格納タイミングと、拡張演算器522から拡張結果レジスタ524へのデータ格納タイミングは、同じである。このため、浮動小数点演算命令の実行時においては、前述の浮動小数点ロード命令の実行時とは異なり、演算結果格納が完了したか否かを基本演算器521および拡張演算器522について個別に判定する必要がない。
従って、CSE400の完了判定回路406は、SIMD演算命令/非SIMD演算命令のいずれの実行時でも、SIMD演算器520から制御信号X_FL_COMPが入力されると、命令の実行が完了したと判定する。そして、次のWサイクルにおいて、浮動小数点リネーミングレジスタ560に格納された演算結果を、浮動小数点SIMDレジスタ600に対して転送させる。
SIMD演算命令が実行された場合のWサイクルにおいて、CSE400の信号出力回路407は、アドレスBASIC_RD_ADR、EXTEND_RD_ADRの値を、それぞれ基本リネーミングレジスタ561、拡張リネーミングレジスタ562に出力する。そして、出力したアドレスからのデータの読み出しを要求する。また、信号出力回路407は、アドレスWR_ADRの値を基本レジスタ601および拡張レジスタ602に出力する。これとともに、信号BASIC_WR,EXTEND_WRの値をそれぞれ基本レジスタ601および拡張レジスタ602に出力して、データの格納を要求する。これにより、基本レジスタ601および拡張レジスタ602における同じアドレスに対して、基本リネーミングレジスタ561および拡張リネーミングレジスタ562からの演算結果がそれぞれ格納される。
一方、非SIMD演算命令の実行時には、CSE400のエントリにおいて、信号BASIC_WR,EXTEND_WRのいずれか一方がオンになり、アドレスBASIC_RD_ADR,EXTEND_RD_ADRのいずれか一方にリネーミングレジスタのアドレスが登録される。
図50の例では、信号BASIC_WR,EXTEND_WRのうち信号EXTEND_WRのみがオンである。この場合、Wサイクルにおいて、信号出力回路407は、アドレスEXTEND_RD_ADRの値を拡張リネーミングレジスタ562に出力し、出力したアドレスからのデータの読み出しを要求する。また、信号出力回路407は、アドレスWR_ADRの値を拡張レジスタ602に出力するとともに、信号EXTEND_WRの値を拡張レジスタ602に出力して、データの格納を要求する。これにより、拡張レジスタ602に対してのみ、拡張リネーミングレジスタ562からの演算結果が格納される。
以上説明した浮動小数点演算命令の実行時の処理では、SIMD演算命令の実行時には、演算結果の書き込み先として同じアドレスを有する基本レジスタ601および拡張レジスタ602が使用される。一方、非SIMD演算命令の実行時には、演算結果の書き込み先として、基本レジスタ601および拡張レジスタ602のうち任意のレジスタを使用可能になる。このため、浮動小数点SIMDレジスタ600内のレジスタの使用効率が向上する。また、非SIMD演算命令の実行時には、演算結果の書き込み先としてSIMD演算命令の実行時の2倍のレジスタを指定することが可能になる。
さらに、基本レジスタ601および拡張レジスタ602に対しては、前述の浮動小数点デコードの実行時と同じ手法により、リネーミングレジスタを割り当てることができる。このため、SIMD命令/非SIMD命令が混在するプログラムが実行された場合でも、浮動小数点リネーミングレジスタ560内のレジスタを無駄なく効率的に使用できる。また、浮動小数点リネーミングレジスタ560内のレジスタ数を抑制することもできる。
また、浮動小数点演算命令の実行時には、オペランドデータの読み込み元として、浮動小数点SIMDレジスタ600を指定することができる。SIMD演算命令の実行時には、オペランドデータの読み込み元として、同じアドレスを有する基本レジスタ601および拡張レジスタ602からそれぞれオペランドデータが読み込まれ、それぞれのオペランドデータを用いて並列の演算が行われる。
また、基本レジスタ601および拡張レジスタ602の指定されたアドレスに対するリネーミングレジスタが有効である場合には、オペランドデータをリネーミングレジスタから読み込むこともできる。このとき、基本リネーミングレジスタ561および拡張リネーミングレジスタ562のアドレスは異なる場合がある。このため、RSF360に対して、基本リネーミングレジスタ561および拡張リネーミングレジスタ562のアドレスを個別に登録する。そして、登録されたアドレスを基にオペランドデータの読み出し元を選択することで、リネーミングレジスタからオペランドデータを正確に読み込むことが可能になる。
一方、非SIMD演算命令の実行時には、オペランドデータの読み込み元として、基本レジスタ601または拡張レジスタ602の中の1つのレジスタを指定することができる。また、指定されたレジスタに対するリネーミングレジスタが有効である場合には、オペランドデータをリネーミングレジスタから読み込むことができる。
このような構成により、SIMD演算命令、非SIMD演算命令のどちらの実行時にも、浮動小数点SIMDレジスタ600内および浮動小数点リネーミングレジスタ560内の8バイト単位のレジスタを指定して、オペランドデータを読み込むことが可能になる。従って、浮動小数点SIMDレジスタ600内および浮動小数点リネーミングレジスタ560内のレジスタの使用効率が高められる。
〔浮動小数点ストア命令実行時の処理〕
浮動小数点ストア命令がデコードされると、CPUコア111は、ソースオペランドで指定されるレジスタからストアデータを読み込み、ディスティネーションオペランドで指定されるメインメモリのアドレスに対してストアデータをストアするように制御する。浮動小数点ストアのSIMD命令(以下、SIMDストア命令と呼ぶ)の命令コードは、例えば、“Simd-store %f100 [address]”と記述される。この命令では、ソースオペランドである“%f100”で指定されるレジスタから2つの8バイトのストアデータを読み込み、ディスティネーションオペランドである“[address]”で指定されるメインメモリのアドレスに対して2つのストアデータをストアすることが要求される。
一方、浮動小数点ストアの非SIMD命令(以下、非SIMDストア命令と呼ぶ)の命令コードは、オペコードが異なること以外は上記と同じ形式で記述される。この命令では、ソースオペランドで指定されるレジスタから1つの8バイトのストアデータを読み込み、そのストアデータを、ディスティネーションオペランドで指定されるメインメモリのアドレスに対してストアすることが要求される。
ソースオペランドでは、例えば、浮動小数点SIMDレジスタ600のアドレスが指定される。また、本実施の形態では、例として、ディスティネーションオペランドは固定小数点レジスタ580のアドレスにより指定されるものとする。すなわち、ディスティネーションオペランドで指定された固定小数点レジスタ580からオペランドデータが読み込まれ、このオペランドデータを基に、ストア先のアドレスが生成される。
図51は、CPUコアにおいて浮動小数点ストア命令実行時に動作する構成要素を示す図である。
命令デコーダ280は、浮動小数点ストア命令をデコードすると、CSE400、RSA320およびRSF360に対してエントリを登録する。また、ストアアドレスに対応するオペランドデータが保持された固定小数点レジスタ580にリネーミングレジスタが割り当てられる場合には、そのアドレスが固定小数点レジスタリネーミングマップ303から読み出され、RSA320に登録される。一方、ストアデータが保持された浮動小数点SIMDレジスタ600にリネーミングレジスタが割り当てられる場合には、そのアドレスが基本レジスタリネーミングマップ301または拡張レジスタリネーミングマップ302から読み出され、RSF360に登録される。
ストアアドレスは、RSA320から発行されるエントリを基に生成される。浮動小数点ストア命令に対応するエントリがRSA320から発行されると、オペランドデータ選択部430によりストアアドレスに対応するオペランドデータが選択され、選択されたオペランドデータがオペランドアドレス生成器440に供給される。オペランドアドレス生成器440は、供給されたオペランドデータを基にストアアドレスを生成し、ストアバッファ部480のエントリに登録する。なお、オペランドデータ選択部430は、オペランドデータを固定小数点レジスタ580または固定小数点リネーミングレジスタ540から読み込むことが可能である。
一方、ストアデータは、RSF360から発行されるエントリを基に取得される。浮動小数点ストア命令に対応するエントリがRSF360から発行されると、基本オペランドデータ選択器531または拡張オペランドデータ選択器532の少なくとも一方により、ストアデータが選択される。基本オペランドデータ選択器531および拡張オペランドデータ選択器532により選択されるデータは、現在実行されている、あるいはすでに実行が完了した命令に応じて得られたデータである。
図51では、ストアデータの読み出し元として、基本レジスタ601、拡張レジスタ602、基本リネーミングレジスタ561および拡張リネーミングレジスタ562を例示している。しかしながら、この他に例えば、基本ロードレジスタ462および拡張ロードレジスタ463などからストアデータを読み出すことが可能であってもよい。
SIMD演算器520は、前述の構成の他に、基本ストアデータレジスタ535、拡張ストアデータレジスタ536およびストアデータ選択器537を備えている。基本オペランドデータ選択器531により選択されたストアデータは、基本演算器521およびストアデータ選択器537を介して、基本ストアデータレジスタ535に一時的に格納される。一方、拡張オペランドデータ選択器532により選択されたストアデータは、拡張演算器522を介して拡張ストアデータレジスタ536に一時的に格納される。また、拡張オペランドデータ選択器532により選択されたストアデータを、ストアデータ選択器537を介して基本ストアデータレジスタ535に一時的に格納することもできる。基本ストアデータレジスタ535および拡張ストアデータレジスタ536にそれぞれ格納されたストアデータは、ストアバッファ部480のエントリに登録される。
ストアアドレスとストアデータとがストアバッファ部480のエントリに登録され、ストア命令が完了すると、ストアバッファ部480は、ストアアドレスおよびストアデータを1次データキャッシュ部460に受け渡し、ストアデータのストアを要求する。1次データキャッシュ部460は、ストアデータを保持するとともに、ストアデータが、2次データキャッシュを介してメインメモリにストアされるように制御する。
図52は、浮動小数点ストア命令実行時のパイプラインを示す図である。
浮動小数点ストア命令実行時では、命令デコードサイクルであるDサイクルの実行後、ストアアドレス生成を行うサイクルであるP1,B1,A,FT,FM,FB,FRサイクルと、ストアデータ読み出しを行うサイクルであるP2,B2,Xサイクルとが並列に実行される。ストアアドレスが生成され、かつストアデータが読み出されると、命令完了サイクルであるCサイクル、ストアデータの書き込みサイクルであるWサイクルが順次実行される。
なお、図52に示したパイプラインの例では、サイクルP1とサイクルP2、サイクルB1とサイクルB2、サイクルAとサイクルXとが、それぞれ同じタイミングで実行されているが、実際にはこのような実行タイミングとならなくてもよい。すなわち、Cサイクルに遷移するまでに、P1,B1,A,FT,FM,FB,FRサイクルと、P2,B2,Xサイクルとがそれぞれ完了されればよい。
図53,図54は、SIMDストア命令実行時のパイプラインを説明する図である。
Dサイクルでは、命令デコーダ280により浮動小数点ストア命令がデコードされ、そのデコード結果に基づき、CSE400へのエントリ登録処理(ステップS131)、RSA320へのエントリ登録処理(ステップS132)、およびRSF360へのエントリ登録処理(ステップS133)が実行される。
命令デコーダ280は、ストアアドレスの生成に必要な情報をRSA320に登録する。例えば、命令デコーダ280は、ディスティネーションオペランドで指定された固定小数点レジスタ580のアドレスを、RSA320のエントリに登録する。
また、命令デコーダ280から出力された固定小数点レジスタ580のアドレスに対して固定小数点リネーミングレジスタ540が割り当てられていた場合、その固定小数点リネーミングレジスタ540のアドレスが、固定小数点レジスタリネーミングマップ303から出力される(ステップS134)。出力された固定小数点リネーミングレジスタ540のアドレスは、RSA320のエントリに登録される。
また、命令デコーダ280は、ストアデータの取得に必要な情報をRSF360に登録する。例えば、命令デコーダ280は、ソースオペランドで指定された、浮動小数点SIMDレジスタ600におけるオペランドデータの読み出しアドレスを、RSF360のエントリに登録する。SIMDストア命令の実行時には、1つのソースオペランドに対応するオペランドデータは、基本レジスタ601および拡張レジスタ602の両方から読み込まれる。
また、浮動小数点SIMDレジスタ600におけるオペランドデータの読み出しアドレスに対して、リネーミングレジスタが割り当てられていた場合には、そのリネーミングレジスタのアドレスがリネーミングマップから出力される(ステップS135)。出力されたアドレスは、RSF360に登録される。SIMDストア命令がデコードされた場合、ソースオペランドで指定されるソースレジスタに対して、基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302の両方からアドレスが出力され、RSF360に登録される。一方、非SIMDストア命令がデコードされた場合には、ソースオペランドで指定されるソースアドレスに対して、基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302のいずれか一方からアドレスが出力される。
以上のエントリ登録処理が終了した後、P1サイクルとP2サイクルとが並列に実行される。図53では、P1サイクルが起動されたときの処理の流れを続けて記載しており、P2サイクルが起動されたときの処理の流れについては、図54に記載している。
P1サイクルでは、RSA320におけるデータの待ち合わせ制御が行われる。前述のように、RSA320は、登録されたエントリのうち、必要なデータが揃ったエントリの中で最も古いエントリを発行する。RSA320からオペランドデータ選択部430に対して、浮動小数点ストア命令に対応するエントリが発行されると、B1サイクルに遷移する(ステップS136)。
RSA320からのエントリに基づくストアアドレスの発行動作手順は、基本的に、前述の浮動小数点ロード命令実行時におけるロードデータの読み出しアドレス生成動作と同じである。B1サイクルにおいて、オペランドデータ選択部430は、RSA320から発行されたエントリの内容に基づき、オペランドデータを固定小数点レジスタ580または固定小数点リネーミングレジスタ540から読み込み、オペランドアドレス生成器440に出力する(ステップS137)。次のAサイクルにおいて、オペランドアドレス生成器440は、オペランドデータ選択部430から出力されたオペランドデータに基づき、ストアデータの書き込み先を示すストアアドレスを生成する。生成されたストアアドレスは、ストアバッファ部480に出力される(ステップS138)。
FT,FM,FB,FRサイクルでは、ストアバッファ部480において、その内部のストアバッファ481に対してストアアドレスを格納する処理が実行される。これらのサイクルのうち最後のFRサイクルでは、ストアバッファ481に対してストアアドレスが格納されるとともに、ストアバッファ部480からCSE400に対して、ストアアドレス格納が完了したことが報告される(ステップS139)。
一方、P2サイクルでは、RSF360におけるデータの待ち合わせ制御が行われる。前述のように、RSF360は、登録されたエントリのうち、必要なデータが揃ったエントリの中で最も古いエントリを発行する。RSF360からSIMD演算器520に対して、浮動小数点ストア命令に対応するエントリが発行されると、B2サイクルに遷移する(ステップS140)。
B2サイクルでは、SIMD演算器520の基本オペランドデータ選択器531および拡張オペランドデータ選択器532により、ストアデータが選択される(ステップS141)。SIMD演算命令の実行時には、基本オペランドデータ選択器531および拡張オペランドデータ選択器532の両方によりストアデータが選択され、選択されたデータはそれぞれ基本演算器521および拡張演算器522に対して供給される。
次のXサイクルでは、ストアデータが演算器から出力され、後段のストアデータレジスタに一時的に格納される(ステップS142)。SIMDストア命令の実行時には、基本演算器521および拡張演算器522の両方からストアデータが出力される。基本演算器521からのストアデータは基本ストアデータレジスタ535に格納され、拡張演算器522からのストアデータは拡張ストアデータレジスタ536に格納される。図52では、基本ストアデータレジスタ535および拡張ストアデータレジスタ536にそれぞれ格納される8バイトデータを、“X(8B)”“Y(8B)”と表している。なお、基本演算器521および拡張演算器522は、演算処理を行わず、入力信号をそのまま出力する。また、Xサイクルでは、SIMD演算器520からCSE400に対して、ストアデータの出力が完了したことが報告される(ステップS143)。
また、基本ストアデータレジスタ535および拡張ストアデータレジスタ536にストアデータが格納されたサイクルの次のサイクルで、ストアバッファ481のエントリに対して、基本ストアデータレジスタ535および拡張ストアデータレジスタ536に格納されたストアデータが格納される(ステップS144)。SIMDストア命令の実行時には、基本ストアデータレジスタ535および拡張ストアデータレジスタ536にそれぞれ格納された2つの8バイトデータが、ストアバッファ481に格納される。
FRサイクルにおいて、ストアバッファ部480からCSE400に対してストアアドレス格納が完了したことが報告され、なおかつ、Xサイクルにおいて、SIMD演算器520からCSE400に対してストアデータ格納が完了したことが報告されると、Cサイクルに遷移する。Cサイクルでは、CSE400は、浮動小数点ストア命令が完了したと判定する(ステップS145)。
次のWサイクルでは、CSE400の制御の下で、ストアバッファ481のストアアドレスおよびストアデータが1次データキャッシュ部460に出力され、ストアデータのストアが要求される(ステップS146)。1次データキャッシュ部460は、入力されたストアデータを、ストアアドレスに対応する1次データキャッシュ461内の領域に格納する。これとともに、1次データキャッシュ部460は、2次データキャッシュを介して、入力されたストアアドレスに対応するメインメモリのメモリ領域に、ストアデータが格納されるように制御する。
図55,図56は、非SIMDストア命令実行時のパイプラインを説明する図である。これらの図を用いて、SIMDストア命令実行時との動作の違いについて説明する。
非SIMDストア命令では、ソースオペランドで指定されるストアデータの読み出し元レジスタとして、基本レジスタ601または拡張レジスタ602のいずれか一方が指定される。そして、Dサイクルでは、指定された基本レジスタ601または拡張レジスタ602のアドレスに対してリネーミングレジスタが割り当てられる場合には、割り当てられたリネーミングレジスタのアドレスが、基本レジスタリネーミングマップ301または拡張レジスタリネーミングマップ302のいずれか一方から読み出され、RSF360に登録される。
B2サイクルでは、RSF360から発行されるエントリに基づき、基本オペランドデータ選択器531または拡張オペランドデータ選択器532のいずれか一方により、ストアデータが選択される。非SIMDストア命令実行時には、前述の非SIMD演算命令実行時と同様に、基本オペランドデータ選択器531または拡張オペランドデータ選択器532のどちらでも、基本バス側および拡張バス側のどちらのレジスタからストアデータを読み込み可能としてもよい。ただし、本実施の形態では、制御を簡単にするために、ストアデータの読み出し元のレジスタに応じて、基本オペランドデータ選択器531または拡張オペランドデータ選択器532のどちらを使用するかが決定される構成とする。さらに、本実施の形態では、基本オペランドデータ選択器531または拡張オペランドデータ選択器532のどちらが使用された場合でも、選択されたオペランドデータは基本ストアデータレジスタ535に一旦格納されるものとする。
本実施の形態では、ストアデータの読み出し元が基本バス側のレジスタである場合には、基本オペランドデータ選択器531によってストアデータが選択される。選択されたストアデータは、基本演算器521を介して基本ストアデータレジスタ535に格納される。このとき、CSE400に対して、ストアデータの出力が完了したことが報告される。
一方、ストアデータの読み出し元が拡張バス側のレジスタである場合には、拡張オペランドデータ選択器532によってストアデータが選択され、選択されたストアデータが拡張演算器522に出力される。また、拡張演算器522から出力されたストアデータは、ストアデータ選択器537を介して基本ストアデータレジスタ535に格納される。このとき、CSE400に対して、ストアデータの出力が完了したことが報告される。このように、非SIMDストア命令実行時には、拡張ストアデータレジスタ536は使用されない。
基本ストアデータレジスタ535に格納された8バイトのストアデータは、基本ストアデータレジスタ535に格納された次のサイクルにおいて、ストアバッファ481に格納される。さらに、CサイクルでCSE400により命令の完了が判定された後、Wサイクルにおいて、ストアバッファ481に格納されたストアデータは、1次データキャッシュ部460に出力される。
上記の処理では、浮動小数点演算命令の場合と同様に、SIMDストア命令実行時には、ストアデータの読み出し元レジスタとして、同じアドレスを有する基本レジスタ601および拡張レジスタ602がセットで指定される。また、非SIMDストア命令実行時には、ストアデータの読み出し元レジスタとして、基本レジスタ601および拡張レジスタ602の中の任意のレジスタが指定されるので、プログラムの自由度が高められる。また、非SIMDストア命令実行時には、浮動小数点SIMDレジスタ600内のレジスタは、8バイト単位の独立したレジスタとして取り扱われるので、浮動小数点SIMDレジスタ600内のレジスタ使用効率が向上する。
さらに、ストアデータの読み出し元レジスタに対してリネーミングレジスタが割り当てられる場合には、ストアデータを浮動小数点リネーミングレジスタ560から読み出すことができるため、ストア処理の速度を高速化できる。また、浮動小数点リネーミングレジスタ560内のレジスタについても、8バイト単位の独立したレジスタとして取り扱われるので、浮動小数点リネーミングレジスタ560内のレジスタ使用効率が向上する。
次に、浮動小数点ストア命令実行時に動作する各ブロックの詳細な構成を示すとともに、それらのブロック間での信号の流れについて説明する。
図57は、浮動小数点ストア命令実行時の命令デコーダの出力信号を示す図である。
図57は、浮動小数点ストア命令実行時の命令デコーダの出力信号を示す図である。
図57では、浮動小数点ストア命令実行時のDサイクルにおいて出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
命令デコーダ280は、前述した命令デコード回路281、制御信号生成回路282およびCSE割り当て回路285に加えて、ストアバッファ割り当て回路286を備えている。
命令デコード回路281は、浮動小数点ストア命令をデコードすると、浮動小数点ストア命令であることを示す制御信号D_STをオンにする。制御信号D_STは、CSE400、RSA320およびRSF360に出力される。
また、命令デコード回路281は、ディスティネーションオペランドの値に基づいて、ストアアドレスの読み出し元アドレスを示すアドレス信号D_R1_GPR_ADR,D_R2_GPR_ADRを、固定小数点レジスタリネーミングマップ303およびRSA320に対して出力する。
また、命令デコード回路281は、ソースオペランドの値に基づいて、ストアデータの読み出し元アドレスを示すアドレス信号D_R1_FPR_ADRを、基本レジスタリネーミングマップ301、拡張レジスタリネーミングマップ302、RSF360および制御信号生成回路282に出力する。また、命令デコード回路281は、ストアデータを基本バス側のレジスタから読み出すか否か、拡張バス側のレジスタから読み出すか否かをそれぞれ示す制御信号D_R1_USE_BASIC,D_R1_USE_EXTENDを、RSF360に対して出力する。なお、アドレス信号D_R1_FPR_ADRおよび制御信号D_R1_USE_BASIC,D_R1_USE_EXTENDの出力手順は、前述の浮動小数点演算命令実行時と同様である。
また、命令デコード回路281は、ストアデータの読み出し元として基本レジスタ601および拡張レジスタ602がそれぞれ指定されたか否かを示す制御信号D_USE2_BASIC,D_USE2_EXTENDを、制御信号生成回路282に対して出力する。命令デコード回路281は、SIMDストア命令をデコードした場合には、制御信号D_USE2_BASIC,D_USE2_EXTENDの両方をオンにする。
また、命令デコード回路281は、非SIMDストア命令をデコードした場合には、ソースオペランドで指定されたレジスタ番号が0〜127であれば、制御信号D_USE2_BASICをオンにし、制御信号D_USE2_EXTENDをオフにする。また、命令デコード回路281は、非SIMDストア命令をデコードした場合には、ソースオペランドで指定されたレジスタ番号が128〜255であれば、制御信号D_USE2_BASICをオフにし、制御信号D_USE2_EXTENDの両方をオンにする。これとともに、ソースオペランドで指定されたレジスタ番号から“128”を減算し、減算したレジスタ番号に対応するアドレスを、アドレス信号D_R1_FPR_ADRとして出力する。
制御信号生成回路282は、命令デコード回路281からアドレス信号D_R1_FPR_ADRおよび制御信号D_STを受信すると、次の信号を出力する。
制御信号D_FL_USE_BASICは、ストアデータの出力に基本演算器521を使用するか否かを示す信号であり、制御信号D_FL_USE_EXTENDは、ストアデータの出力に拡張演算器522を使用するか否かを示す信号である。制御信号D_FL_USE_BASIC,D_FL_USE_EXTENDは、それぞれ制御信号D_USE2_BASIC,D_USE2_EXTENDと同じ値をとり、RSF360に対して出力される。
また、制御信号生成回路282は、制御信号D_FP_USE_BASIC,D_FP_USE_EXTENDを出力する。制御信号D_USE2_BASIC、D_USE2_EXTENDの両方がオンの場合には、制御信号FP_USE_BASIC,D_FP_USE_EXTENDの両方がオンになる。また、制御信号D_USE2_BASIC,D_USE2_EXTENDの一方がオンの場合には、制御信号D_FP_USE_BASICがオンになり、制御信号D_FP_USE_EXTENDがオフになる。制御信号D_FP_USE_BASIC,D_FP_USE_EXTENDは、RSA320とCSE400に対して出力される。
制御信号D_EU_USEは、基本演算器521および拡張演算器522の少なくとも一方を使用するか否かを示す信号であり、CSE400に対して出力される。制御信号D_REL_RSFは、RSF360に対してエントリの作成を要求する信号である。制御信号D_REL_RSAは、RSA320に対してエントリの作成を要求する信号である。制御信号D_REL_CSEは、CSE400に対してエントリの作成を要求する信号であり、CSE400とともに、CSE割り当て回路285に対しても出力される。
CSE割り当て回路285は、制御信号D_REL_CSEが出力されたとき、CSE400に登録するエントリを識別するエントリ識別信号D_IIDを割り当てる。エントリ識別信号D_IIDは、すべての命令のデコード順に割り当てられ、CSE400に出力される。
ストアバッファ割り当て回路286は、制御信号D_STが出力されたとき、ストアバッファ481に登録するエントリを識別するエントリ識別信号D_STB_IDを割り当てる。エントリ識別信号D_STB_IDは、RSA320とRSF360に出力される。なお、本実施の形態では、例として、ストアバッファ481のエントリ数を8とする。従って、エントリ識別信号D_STB_IDは3ビットの信号である。
図58は、浮動小数点ストア命令実行時のCSEの入出力信号を示す図である。なお、図58では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
浮動小数点ストア命令の実行時のDサイクルにおいて、エントリ生成回路402は、命令デコーダ280からの制御信号D_STを受信すると、浮動小数点ストア命令に対応するエントリをエントリ記憶回路401に生成する。このとき、エントリ生成回路402には、浮動小数点ロード命令の実行時と同様に、制御信号D_REL_CSE,D_FP_USE_BASIC,D_FP_USE_EXTENDおよびエントリ識別信号D_IIDが、命令デコーダ280から入力される。また、エントリ生成回路402には、命令デコーダ280からの制御信号D_EU_USEも入力される。
ロード/ストア実行完了受け付け回路403は、FRサイクルにおいて、ストアバッファ部480から、制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTENDおよびエントリ識別信号FR_FP_COMP_IIDを受信する。制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTENDは、ストアアドレスをストアバッファ481に格納したことを示す信号である。エントリ識別信号FR_FP_COMP_IIDは、ストアアドレスの格納処理に対応するCSE400のエントリを識別する信号である。
また、演算実行完了エントリ選択回路404は、Xサイクルにおいて、SIMD演算器520から、制御信号X_FL_COMPおよびエントリ識別信号X_FL_COMP_IIDを受信する。制御信号X_FL_COMPは、SIMD演算器520でのストアデータの出力が完了したことを示す信号である。エントリ識別信号X_FL_COMP_IIDは、ストアデータの出力処理に対応するCSE400のエントリを識別する信号である。
完了エントリ選択回路405は、Cサイクルにおいて、エントリ記憶回路401に登録された先頭のエントリを、完了判定回路406に読み出す。完了判定回路406は、読み出されたエントリに基づき、そのエントリに対応する処理の実行が完了しているか否かを判定する。浮動小数点ストア命令の実行時には、完了判定回路406は、上記の制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTEND,X_FL_COMPおよびエントリ識別信号FR_FP_COMP_IID,X_FL_COMP_IIDに基づくエントリの信号から、処理の実行完了を判定する。
浮動小数点ストア命令が完了したことが判定されると、Wサイクルに遷移する。Wサイクルにおいて、信号出力回路407は、エントリ識別信号W_IIDおよび制御信号W_STを、ストアバッファ部480に出力する。
図59は、浮動小数点ストア命令実行時のCSEのエントリの内容を示す図である。
浮動小数点ストア命令に対応するCSE400のエントリにおいて、浮動小数点ロード命令実行時と異なる点の一つは、データの読み出し元および書き込み先に関する信号、すなわち、アドレス信号BASIC_RD_ADR,EXTEND_RD_ADRおよび信号BASIC_WR,EXTEND_WRが登録されないことである。
また、浮動小数点ストア命令に対応するCSE400のエントリには、基本演算器521および拡張演算器522の少なくとも一方が使用されることを示す信号EU_USEと、浮動小数点ストア命令であることを示す信号STRが登録される。信号EU_USE,STRは、それぞれ命令デコーダ280からの制御信号D_EU_USE,D_STの受信に応じて、オンにされる。
さらに、CSE400には、ストアアドレスの出力が完了したことを示す信号BASIC_FP_COMP,EXTEND_FP_COMPが、ロード/ストア実行完了受け付け回路403によって登録される。また、CSE400には、ストアデータの出力が完了したことを示す信号EU_COMPが、演算実行完了エントリ選択回路404によって登録される。
CSE400の完了判定回路406は、完了エントリ選択回路405により選択されたエントリの内容に基づいて、命令が完了したか否かを判定する。浮動小数点ストア命令に対応するエントリにおいて、SIMDストア命令が実行された場合には、信号BASIC_FP_USE,EXTEND_FP_USEがともにオンになる。この場合、完了判定回路406は、信号BASIC_FP_COMP,EXTEND_FP_COMP,EU_COMPのすべてがオンになったとき、命令が完了したと判定する。また、非SIMDストア命令が実行された場合には、信号BASIC_FP_USEがオン、信号EXTEND_FP_USEがオフになる。この場合、完了判定回路406は、信号BASIC_FP_COMP,EU_COMPがそれぞれオンになったとき、命令が完了したと判定する。
完了判定回路406により浮動小数点ストア命令が完了したと判定されると、信号出力回路407は、エントリ識別信号W_IIDおよび制御信号W_STを、ストアバッファ部480に出力する。エントリ識別信号W_IIDは、命令完了を判定したエントリの識別情報を示し、制御信号W_STは、ストアバッファ部480に対してデータのストアを要求する信号である。
図60は、浮動小数点ストア命令実行時のレジスタリネーミング部の入出力信号を示す図である。なお、図60では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
Dサイクルにおいては、前述した浮動小数点ロード命令実行時と同様の手順で、固定小数点レジスタリネーミングマップ303に対するアドレス読み出しが要求される。すなわち、読み出し回路309には、命令デコーダ280から出力された、ストアアドレスに対応するオペランドデータの読み出し元アドレスを示すアドレス信号D_R1_GPR_ADR,D_R2_GPR_ADRが入力される。読み出し回路309は、アドレス信号D_R1_GPR_ADR,D_R2_GPR_ADRがそれぞれ示すアドレスに対応する固定小数点レジスタリネーミングマップ303のエントリを参照する。そして、参照したエントリが有効である場合には、割り当てられたアドレスを読み出し、アドレス信号をRSA320に出力する。アドレス信号D_R1_GUB_ADRは、アドレス信号D_R1_GPR_ADRに割り当てられたリネーミングレジスタのアドレスを示し、アドレス信号D_R2_GUB_ADRは、アドレス信号D_R2_GPR_ADRに割り当てられたリネーミングレジスタのアドレスを示す。
また、Dサイクルにおいては、前述した浮動小数点演算命令実行時と同様の手順で、基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302に対するアドレス読み出しが要求される。ただし、基本レジスタリネーミングマップ301および拡張レジスタリネーミングマップ302のそれぞれに対して読み出しが要求されるアドレスは、それぞれ1つのみである。
すなわち、読み出し回路307,308には、命令デコーダ280からのアドレス信号D_R1_FPR_ADRが入力される。読み出し回路307は、アドレス信号D_R1_FPR_ADRで指定される基本レジスタ601に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを基本レジスタリネーミングマップ301から読み出す。そして、読み出したアドレスをアドレス信号D_R1_FUB_ADR_BASICとしてRSF360に出力する。
読み出し回路308は、アドレス信号D_R1_FPR_ADRで指定される拡張レジスタ602に対してリネーミングレジスタが割り当てられていた場合、そのリネーミングレジスタのアドレスを拡張レジスタリネーミングマップ302から読み出す。そして、読み出したアドレスをアドレス信号D_R1_FUB_ADR_EXTENDとしてRSF360に出力する。
なお、浮動小数点ストア命令の実行時には、リネーミングマップ登録回路304〜306は動作しない。
図61は、浮動小数点ストア命令実行時のRSAの入出力信号を示す図である。なお、図61では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
浮動小数点ストア命令実行時におけるRSA320の基本的な動作は、浮動小数点ロード命令実行時のRSA320の動作と同じである。ただし、浮動小数点ストア命令では、処理結果の書き込み先レジスタが指定されない。このため、エントリ生成回路322には、書き込み先レジスタに割り当てられたリネーミングレジスタのアドレスを示すアドレス信号D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDは入力されない。また、エントリ生成回路322には、制御信号D_LOADの代わりに、浮動小数点ストア命令であることを示す制御信号D_STと、ストアバッファ481のエントリを識別するエントリ識別信号D_STB_IDとが入力される。エントリ生成回路322は、命令デコーダ280から制御信号D_STおよびエントリ識別信号D_STB_IDを受信すると、浮動小数点ストア命令に対応するエントリをエントリ記憶回路321に生成する。
エントリ選択回路324から浮動小数点ストア命令に対応するエントリが出力されると、エントリ出力回路325は、制御信号B_FP_USE_BASIC,B_FP_USE_EXTEND,B_FP_IID,B_FP_ST,B_EAG_R1_INGATE,B_EAG_R2_INGATE、アドレス信号B_R1_GPR_ADR,B_R2_GPR_ADR,B_EAG_R1_GUB_ADR,B_EAG_R2_GUB_ADR、およびエントリ識別信号B_FP_IID,B_FP_STB_IDを、オペランドデータ選択部430に対して出力する。
図62は、浮動小数点ストア命令実行時におけるRSAのエントリの内容を示す図である。
浮動小数点ストア命令に対応するRSA320のエントリにおいて、浮動小数点ロード命令実行時と異なる点は、次の点である。浮動小数点ストア命令に対応するエントリには、データ書き込み先のアドレスを示すアドレスBASIC_DST_ADR,EXTEND_DST_ADRが、エントリに登録されない。また、このエントリには、信号LOADの代わりに、浮動小数点ストア命令であることを示す信号STRと、ストアバッファ481のエントリを識別するエントリ識別信号STB_IDとが登録される。信号STRはエントリ生成時にオンにされ、エントリ識別信号STB_IDは、命令デコーダ280からのエントリ識別信号D_STB_IDに応じた値をとる。
エントリの登録情報に基づくオペランドデータ待ち回路323によるデータ待ち合わせ処理は、浮動小数点ロード命令の実行時と同じである。エントリ選択回路324は、信号R1_READY,R2_READYがともにオンになったとき、このエントリを発行することができる状態となる。このとき、エントリ識別信号IID,STB_IDの値は、それぞれ信号B_FP_IID,B_FP_STB_IDとして、制御信号B_FP_STとともにストアバッファ部480に出力される。また、信号BASIC_FP_USE、EXTEND_FP_USEの値は、それぞれ制御信号B_FP_USE_BASIC、B_FP_USE_EXTENDとしてストアバッファ部480に出力される。その他のエントリ内の信号と、エントリ出力回路325から出力される信号との関係は、図19において説明した通りである。
なお、オペランドデータ選択部430でのデータ選択動作については、図20において説明した通りである。オペランドデータ選択器431,432は、固定小数点レジスタ580または固定小数点リネーミングレジスタ540からそれぞれ読み出されたデータを、オペランドアドレス生成器440に供給する。Aサイクルにおいて、オペランドアドレス生成器440は、オペランドデータ選択器431,432から供給されたデータを基に、ストアアドレスを生成して、1次データキャッシュ部460に出力する。
図63は、浮動小数点ストア命令実行時のRSFの入出力信号を示す図である。なお、図63では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
浮動小数点ストア命令実行時におけるRSF360の基本的な動作は、浮動小数点演算命令実行時のPサイクルにおけるRSF360の動作と同じである。ただし、浮動小数点ストア命令では、処理結果の書き込み先レジスタが指定されない。このため、エントリ生成回路362には、書き込み先レジスタに割り当てられたリネーミングレジスタのアドレスを示すアドレス信号D_RD_FUB_ADR_BASIC,D_RD_FUB_ADR_EXTENDは入力されない。
また、浮動小数点ストア命令では、命令コードのソースオペランドで指定されるソースレジスタは1つのみである。このため、浮動小数点ストア命令実行時には、アドレス信号D_R1_FPR_ADRおよび制御信号D_R1_USE_BASIC,D_R1_USE_EXTENDがRSF360に入力される。しかし、アドレス信号D_R2_FPR_ADR,D_R3_FPR_ADRおよび制御信号D_R2_USE_BASIC,D_R2_USE_EXTEND,D_R3_USE_BASIC,D_R3_USE_EXTENDは入力されない。
また、アドレス信号D_R1_FPR_ADRに対応する基本レジスタ601および拡張レジスタ602に対してそれぞれリネーミングレジスタが割り当てられていた場合には、各リネーミングレジスタのアドレスを示すアドレス信号D_R1_FUB_ADR_BASIC,D_R1_FUB_ADR_EXTENDも入力される。SIMDストア命令の実行時には、アドレス信号D_R1_FUB_ADR_BASIC,D_R1_FUB_ADR_EXTENDはセットで入力される。非SIMDストア命令の実行時には、ソースオペランドで指定されるソースレジスタのアドレスに応じて、アドレス信号D_R1_FUB_ADR_BASIC,D_R1_FUB_ADR_EXTENDのいずれか1つが入力される。
また、浮動小数点ストア命令実行時には、制御信号D_FL_OPCの代わりに、浮動小数点ストア命令実行であることを示す制御信号D_STと、ストアバッファ481のエントリを識別するエントリ識別信号D_STB_IDとが、命令デコーダ280から入力される。エントリ生成回路362は、制御信号D_REL_RSFを受信したとき、浮動小数点ストア命令用のエントリを作成する。
発行エントリ選択回路364から浮動小数点ロード命令に対応するエントリが出力されると、信号出力回路365は、エントリに基づき、制御信号B_FL_USE_BASIC,B_FL_USE_EXTEND,B_FL_ST,B_R1_INGATE_BASIC,B_R1_INGATE_EXTEND、エントリ識別信号B_FL_STB_ID、アドレス信号B_R1_FUB_ADR_BASIC,B_R1_FUB_ADR_EXTENDを出力する。
図64は、浮動小数点ストア命令実行時におけるRSFのエントリの内容を示す図である。
浮動小数点ストア命令に対応するRSF360のエントリにおいて、浮動小数点演算命令実行時と異なる点は、次の点である。浮動小数点ストア命令に対応するエントリには、データ書き込み先のリネーミングアドレスを示すアドレスBASIC_DST_ADR,EXTEND_DST_ADRは、エントリに登録されない。前述のように、浮動小数点ストア命令では、命令コードのソースオペランドで指定されるソースレジスタは1つのみである。このため、浮動小数点ストア命令に対応するエントリには、ストアデータの読み出し元レジスタのアドレスとしてアドレスR1_REG_ADRのみ登録され、アドレスR2_REG_ADR,R3_REG_ADRは登録されない。従って、このエントリには、信号BASIC_R2_USE,EXTEND_R2_USE,BASIC_R3_USE,EXTEND_R3_USEも登録されない。また、ストアデータがリネーミングレジスタに準備されている場合には、アドレスR1_REG_ADRに対応するリネーミングレジスタのアドレスBASIC_R1_FUB_ADR,EXTEND_R1_FUB_ADRがエントリに登録される。
このエントリには、信号OPCの代わりに、浮動小数点ストア命令であることを示す信号STRと、ストアバッファ481のエントリを識別するエントリ識別信号STB_IDとが登録される。信号STRはエントリ生成時にオンにされ、エントリ識別信号STB_IDは、命令デコーダ280からのエントリ識別信号D_STB_IDに応じた値をとる。
RSF360のオペランドデータ待ち回路363は、図40〜図44において説明した手順により、信号BASIC_FL_USE,EXTEND_FL_USEおよびアドレスR1_REG_ADR,BASIC_R1_FUB_ADR,EXTEND_R1_FUB_ADRに基づくデータの待ち合わせ制御を行う。
SIMDストア命令実行時には、信号BASIC_FL_USE,EXTEND_FL_USEがともにオンになる。この場合、オペランドデータ待ち回路363は、基本バス側および拡張バス側のそれぞれのレジスタにおいてストアデータの準備ができたか否かを判定する。基本バス側のレジスタにストアデータが準備されると、信号BASIC_R1_READYをオンにするとともに、選択信号BASIC_R1_INGATEに値をセットする。また、拡張バス側のレジスタにストアデータが準備されると、信号EXTEND_R1_READYをオンにするとともに、選択信号EXTEND_R1_INGATEに値をセットする。SIMDストア命令実行時には、発行エントリ選択回路364は、信号BASIC_R1_READY,EXTEND_R1_READY、信号BASIC_R2_READY,EXTEND_R2_READYと信号BASIC_R3_READY,EXTEND_R3_READYのすべてがオンであるとき、エントリを発行する。
また、非SIMDストア命令実行時には、信号BASIC_FL_USE,EXTEND_FL_USEのうち一方のみオンになる。オペランドデータ待ち回路363は、信号BASIC_FL_USEがオン、信号EXTEND_FL_USEがオフの場合、基本バス側のレジスタにおいてストアデータの準備ができたか否かを判定する。この場合、ストアデータの準備ができると、信号BASIC_R1_READYがオンになり、選択信号BASIC_R1_INGATEに値がセットされる。
一方、オペランドデータ待ち回路363は、信号EXTEND_FL_USEがオン、信号BASIC_FL_USEがオフの場合、拡張バス側のレジスタにおいてストアデータの準備ができたか否かを判定する。この場合、ストアデータの準備ができると、信号EXTEND_R1_READYがオンにされ、選択信号EXTEND_R1_INGATEに値がセットされる。
なお、図示しないが、RSF360のエントリには、信号BASIC_R2_READY,EXTEND_R2_READY,BASIC_R3_READY,EXTEND_R3_READYも含まれる。ただし、これらの信号は、RSF360のエントリが作成された時点で、すべてオンにされる。
発行エントリ選択回路364は、信号BASIC_R1_READY,EXTEND_R1_READY,BASIC_R2_READY,EXTEND_R2_READY,BASIC_R3_READY,EXTEND_R3_READYのすべてがオンであるとき、エントリを発行する。なお、信号BASIC_FL_USEまたは信号EXTEND_FL_USEがオフの時に、信号BASIC_R1_READYまたは信号EXTEND_R1_READYは、RSF360のエントリが作成された時点でオンになる。また、信号BASIC_R2_READY,EXTEND_R2_READYと信号BASIC_R3_READY,EXTEND_R3_READYは、RSF360のエントリが作成された時点で、オンが格納される。
エントリが発行されたとき、エントリ識別信号IID,STB_IDの値は、それぞれ信号B_FL_IID,B_FL_STB_IDとして、制御信号B_FL_STとともにSIMD演算器520に出力される。また、信号BASIC_FL_USE、EXTEND_FL_USEの値は、それぞれ制御信号B_FL_USE_BASIC、B_FL_USE_EXTENDとしてSIMD演算器520に出力される。その他のエントリ内の信号と、信号出力回路365から出力される信号との関係は、図37において説明した通りである。
浮動小数点SIMDレジスタ600にストアデータが準備された場合、アドレス信号B_R1_FPR_ADRが浮動小数点SIMDレジスタ600に出力される。この場合、基本レジスタ601および拡張レジスタ602から、アドレス信号B_R1_FPR_ADRに対応するアドレスに格納されたストアデータが読み出され、オペランドデータ選択部530aに対して出力される。オペランドデータ選択部530aでは、RSF360からの選択信号B_R1_INGATE_BASIC,B_R1_INGATE_EXTENDに従って、基本レジスタ601からのデータと拡張レジスタ602からのデータを選択する。制御信号B_R1_INGATE_BASIC,B_R1_INGATE_EXTENDは、エントリ内の信号BASIC_R1_INGATE,EXTEND_R1_INGATEに基づく信号である。
また、基本リネーミングレジスタ561にストアデータが準備された場合、アドレス信号D_R1_FUB_ADR_BASICが浮動小数点リネーミングレジスタ560に出力される。この場合、基本リネーミングレジスタ561から、アドレス信号D_R1_FUB_ADR_BASICに対応するアドレスに格納されたストアデータが読み出され、オペランドデータ選択部530aに出力される。オペランドデータ選択部530aは、RSF360からの選択信号B_R1_INGATE_BASICに従って、基本リネーミングレジスタ561からのデータを選択する。
また、拡張リネーミングレジスタ562にストアデータが準備された場合、アドレス信号D_R1_FUB_ADR_EXTENDが浮動小数点リネーミングレジスタ560に出力される。この場合、拡張リネーミングレジスタ562から、アドレス信号D_R1_FUB_ADR_EXTENDに対応するアドレスに格納されたストアデータが読み出され、オペランドデータ選択部530aに出力される。オペランドデータ選択部530aは、RSF360からの選択信号B_R1_INGATE_EXTENDに従って、拡張リネーミングレジスタ562からのデータを選択する。
図65は、浮動小数点ストア命令実行時のSIMD演算器の入出力信号を示す図である。なお、図65では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
浮動小数点ストア命令実行時には、前述のオペランドデータ選択部530a〜530cのうち、オペランドデータ選択部530aのみが使用される。オペランドデータ選択部530aの構成および動作は、図46において説明した通りである。オペランドデータ選択部530aにおいて、基本オペランドデータ選択器531によって選択されたストアデータは、基本演算器521に出力され、拡張オペランドデータ選択器532によって選択されたストアデータは、拡張演算器522に出力される。
Xサイクルにおいて、ラッチ回路526には、RSF360から、制御信号B_FL_USE_BASIC,B_FL_USE_EXTEND,B_FL_STおよびエントリ識別信号B_FL_IID,B_FL_STB_IDが入力される。これらの信号は、ラッチ回路526から演算制御回路525に入力される。
演算制御回路525は、制御信号B_FL_STに基づいて、浮動小数点ストア命令のエントリが発行されたことを認識する。このとき、演算制御回路525は、制御信号B_FL_USE_BASICがオンであれば、基本演算器521を起動させるとともに、入力信号をそのまま出力するように基本演算器521に要求する。また、演算制御回路525は、制御信号B_FL_USE_EXTENDがオンであれば、拡張演算器522を起動させるとともに、入力信号をそのまま出力するように拡張演算器522に要求する。
また、演算制御回路525は、制御信号B_FL_USE_BASIC,B_FL_USE_EXTENDがともにオンの場合、および、制御信号B_FL_USE_BASICのみがオンの場合には、ストアデータ選択器537に対して、基本演算器521側の入力を選択させる。また、制御信号B_FL_USE_EXTENDのみがオンの場合には、ストアデータ選択器537に対して、拡張演算器522側の入力を選択させる。
このような演算制御回路525の制御により、SIMDストア命令が実行された場合には、基本演算器521および拡張演算器522の両方が起動する。オペランドデータ選択部530aから出力された、ストアデータを示すデータ信号X_FL_OR1R_BASICは、基本演算器521およびストアデータ選択器537を介して基本ストアデータレジスタ535に格納される。また、オペランドデータ選択部530aから出力された、ストアデータを示すデータ信号X_FL_OR1R_EXTENDは、拡張演算器522を介して拡張ストアデータレジスタ536に格納される。一方、非SIMDストア命令の実行時には、基本演算器521または拡張演算器522のいずれか一方のみが起動するが、どちらから出力されるデータ信号も、ストアデータ選択器537を介して基本ストアデータレジスタ535に格納される。
また、演算制御回路525は、基本演算器521または拡張演算器522の少なくとも一方を起動させると、ストアデータの出力が完了したことを示す制御信号X_FL_COMPと、エントリ識別信号X_FL_COMP_IIDとを、CSE400に対して出力する。なお、エントリ識別信号X_FL_COMP_IIDの出力値は、RSF360から入力されたエントリ識別信号B_FL_IIDと同じである。
また、演算制御回路525は、ストアバッファ481へのストアデータの書き込みを要求する制御信号U_FL_STB_WRと、ストアバッファ481のエントリを識別するエントリ識別信号U_FL_STB_IDとを、ラッチ回路538を介してストアバッファ部480に出力する。エントリ識別信号U_FL_STB_IDの値は、RSF360からのエントリ識別信号B_FL_STB_IDと同じである。また、制御信号U_FL_STB_WRおよびエントリ識別信号U_FL_STB_IDのストアバッファ部480への出力タイミングは、基本ストアデータレジスタ535および拡張ストアデータレジスタ536からストアバッファ部480へのストアデータの出力タイミングと一致するように調整される。
図66は、浮動小数点ストア命令実行時のストアバッファ部の入出力信号を示す図である。なお、図66では、浮動小数点ストア命令実行時において入出力される制御信号およびアドレス信号のみ記載しており、その他の信号については記載を省略している。
ストアバッファ部480は、ストアバッファ481、エントリ書き込み回路482,483、読み出し回路484、ストアデータ書き込み回路485、完了報告回路486およびラッチ回路487a〜487d,488a〜488eを備えている。なお、これらのストアバッファ部480の構成要素は、例えば、1次データキャッシュ部460の一部として設けられてもよい。
エントリ書き込み回路482には、オペランドアドレス生成器440により生成されたストアアドレスが入力される。また、エントリ書き込み回路482には、RSA320からのエントリ識別信号B_FP_IIDが、ラッチ回路454を介して入力され、RSA320からの制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDが、ラッチ回路455を介して入力され、RSA320からの制御信号B_FP_STおよびエントリ識別信号B_FP_STB_IDが、ラッチ回路456を介して入力される。なお、ラッチ回路454〜456は、それぞれRSA320からの信号の出力タイミングを、オペランドアドレス生成器440からのアドレス出力タイミングと一致するように調整する。
FTサイクルにおいて、エントリ書き込み回路482は、制御信号B_FP_STを受信すると、オペランドアドレス生成器440からのストアアドレスと、エントリ識別信号B_FP_IIDが示すCSE400のエントリ識別情報とを、エントリ識別信号B_FP_STB_IDに対応するストアバッファ481のエントリに格納する。
また、制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDは、ラッチ回路487a〜487dを介して完了報告回路486に供給される。FRサイクルにおいて、完了報告回路486は、制御信号B_FP_USE_BASIC,B_FP_USE_EXTENDの値を、それぞれ制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTENDとしてCSE400に出力する。これにより、CSE400に対して、ストアアドレスをストアバッファ481に出力したことが報告される。また、エントリ識別信号B_FP_IIDは、ラッチ回路488a〜488eを伝達され、FRサイクルにおいて、CSE400に出力される。
エントリ書き込み回路483には、SIMD演算器520から出力されたデータ信号FL_STDR_BASIC,FL_STDR_EXTEND、制御信号U_FL_STB_WRおよびエントリ識別信号U_FL_STB_IDが入力される。エントリ書き込み回路483は、制御信号U_FL_STB_WRを受信すると、データ信号FL_STDR_BASIC,FL_STDR_EXTENDが示すストアデータを、エントリ識別信号U_FL_STB_IDに対応するストアバッファ481のエントリに格納する。
SIMDストア命令実行時には、データ信号FL_STDR_BASIC,FL_STDR_EXTENDの両方がエントリ書き込み回路483に入力される。この場合、エントリ書き込み回路483は、2つの8バイトのストアデータをストアバッファ481のエントリに書き込む。また、非SIMDストア命令実行時には、データ信号FL_STDR_BASICのみがエントリ書き込み回路483に入力される。この場合、エントリ書き込み回路483は、1つの8バイトのストアデータをストアバッファ481のエントリに書き込む。
なお、図65で説明したように、エントリ書き込み回路483に対して制御信号U_FL_STB_WRが出力された時点で、制御信号X_FL_COMPにより、ストアデータの出力が完了したことが、SIMD演算器520からCSE400に対してすでに報告されている。
また、CSE400は、図59で説明したように、SIMD演算器520からの制御信号X_FL_COMPと、ストアバッファ部480からの制御信号FR_FP_COMP_BASIC,FR_FP_COMP_EXTENDとを受信する。そして、Cサイクルで、命令の完了を判定し、Wサイクルで、ストアバッファ部480に対して、制御信号W_STおよびエントリ識別信号W_IIDを出力する。Wサイクルにおいて、読み出し回路484は、エントリ識別信号W_IIDが示すCSE400のエントリ識別情報が格納されたエントリを選択する。そして、選択したエントリに格納されたストアアドレスとストアデータとを、ストアデータ書き込み回路485に出力する。
また、ストアデータ書き込み回路485は、制御信号W_STの受信に応じて、読み出し回路484からのストアデータを、読み出し回路484からのストアアドレスに対応する1次データキャッシュ461の記憶領域に格納する。SIMDストア命令の実行時には、2つの8バイトのストアデータが1次データキャッシュ461に格納され、非SIMDストア命令の実行時には、1つの8バイトのストアデータが1次データキャッシュ461に格納される。この後、1次データキャッシュ部460などの制御により、格納されたストアデータが2次データキャッシュやメインメモリにストアされる。
以上説明した浮動小数点ストア命令実行時の処理では、SIMDストア命令実行時には、ストアデータの読み出し元レジスタとして、あらかじめ対応づけられた基本レジスタ601および拡張レジスタ602がセットで指定される。一方、非SIMDストア命令実行時には、ストアデータの読み出し元レジスタとして、基本レジスタ601および拡張レジスタ602のうちの任意のレジスタが指定される。従って、浮動小数点SIMDレジスタ600内のレジスタ使用効率が向上するとともに、プログラムの自由度が高められる。
また、ストアデータを浮動小数点リネーミングレジスタ560から読み出すこともでき、その際に、浮動小数点リネーミングレジスタ560内のレジスタが8バイト単位の独立したレジスタとして取り扱われるので、浮動小数点リネーミングレジスタ560内のレジスタ使用効率が向上する。
なお、以上の第2の実施の形態では、処理結果の格納先レジスタに対してリネーミングレジスタが割り当てられる命令の例として、浮動小数点ロード命令および浮動小数点演算命令を挙げた。しかし、同様のリネーミングレジスタの割り当て手順を、上記以外の他の命令実行時に適用することも可能である。また、ソースデータの読み出し元として、ソースレジスタに割り当てられたリネーミングレジスタを指定できる命令の例として、浮動小数点演算命令および浮動小数点ストア命令を挙げた。しかし、同様のリネーミングレジスタからのソースデータ読み出し手順を、上記以外の他の命令実行時に適用することも可能である。
以上の実施の形態に関し、さらに以下の付記を開示する。
(付記1) 第1のデータおよび第2のデータを有する集合データに対して処理を行う集合データ処理命令をデコードする命令デコード部と、
データを格納する複数の第1の割当レジスタと、
データを格納する複数の第2の割当レジスタと、
前記集合データ処理命令のデコード結果に基づいて、前記複数の第1の割当レジスタから一の第1の割当レジスタを選択するとともに、前記複数の第2の割当レジスタから一の第2の割当レジスタを選択する割当レジスタ選択部と、
前記集合データ処理命令のデコード結果に基づいて、前記第1のデータに対して第1の処理を行い、前記第1の処理の結果である第1の処理結果を前記割当レジスタ選択部により選択された前記第1の割当レジスタに保持させる第1の処理部と、
前記集合データ処理命令のデコード結果に基づいて、前記第2のデータに対して第2の処理を行い、前記第2の処理の結果である第2の処理結果を前記割当レジスタ選択部により選択された前記第2の割当レジスタに保持させる第2の処理部と、
前記第1の割当レジスタに保持された前記第1の処理結果を格納する第1の結果レジスタと、
前記第2の割当レジスタに保持された前記第2の処理結果を格納する第2の結果レジスタと、
を有することを特徴とする演算処理装置。
(付記2) 前記演算処理装置において、
前記命令デコード部は、前記第1または第2のデータと同じデータ幅の第3のデータに対して処理を行う通常データ処理命令が入力されたとき、前記通常データ処理命令をデコードしてデコード結果を出力するとともに、前記通常データ処理命令のデコード結果に基づいて前記第1の結果レジスタまたは前記第2の結果レジスタのいずれかを選択し、
前記命令デコード部により前記第1の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第1の割当レジスタから一の第1の割当レジスタを選択し、
前記第1の処理部は、前記第3のデータに対して前記第1の処理を行い、当該第1の処理の結果である第3の処理結果を、前記割当レジスタ選択部により選択された前記第1の割当レジスタに保持させ、
前記第1の結果レジスタは、前記割当レジスタ選択部により選択された前記第1の割当レジスタに保持された前記第3の処理結果を格納し、
前記命令デコード部により前記第2の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第2の割当レジスタから一の第2の割当レジスタを選択し、
前記第2の処理部は、前記第3のデータに対して前記第2の処理を行い、当該第2の処理の結果である第4の処理結果を、前記割当レジスタ選択部により選択された前記第2の割当レジスタに保持させ、
前記第2の結果レジスタは、前記割当レジスタ選択部により選択された前記第2の割当レジスタに保持された前記第4の処理結果を格納する、
ことを特徴とする付記1記載の演算処理装置。
(付記3) 前記演算処理装置はさらに、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記第1のデータを前記複数の第1の割当レジスタのうち一の第1の割当レジスタから読み出すとともに、前記第2のデータを前記複数の第2の割当レジスタのうち一の第2の割当レジスタから読み出し、前記命令デコード部により前記通常データ処理命令がデコードされたとき、前記第3のデータを前記複数の第1の割当レジスタおよび前記複数の第2の割当レジスタのうち一の割当レジスタから読み出すデータ読み出し制御部を有することを特徴とする付記2記載の演算処理装置。
(付記4) 前記演算処理装置はさらに、
前記命令デコード部でデコードされた命令に対応する処理結果が、前記複数の第1の割当レジスタおよび前記複数の第2の割当レジスタのうち必要な割当レジスタに格納されたか否かを監視し、処理結果が前記複数の第1の割当レジスタおよび前記複数の第2の割当レジスタのうち必要な割当レジスタに格納された命令を、前記命令デコード部によってデコードされた順に完了させるとともに、完了させた命令に対応する処理結果が前記第1の割当レジスタに格納されている場合は、当該処理結果を当該第1の割当レジスタから前記第1の結果レジスタに格納し、完了させた命令に対応する処理結果が前記第2の割当レジスタに格納されている場合は、当該処理結果を当該第2の割当レジスタから前記第2の結果レジスタに格納するデータ格納制御部を有することを特徴とする付記2記載の演算処理装置。
(付記5) 前記演算処理装置において、
前記データ格納制御部は、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記割当レジスタ選択部により選択された前記第1の割当レジスタおよび前記第2の割当レジスタに対してそれぞれ前記第1の処理結果および前記第2の処理結果が格納された場合に、デコードされた前記集合データ処理命令を完了させ、
前記命令デコード部により通常データ処理命令がデコードされて前記第1の結果レジスタが選択されたとき、前記割当レジスタ選択部により選択された前記第1の割当レジスタに対して前記第3の処理結果が格納された場合に、デコードされた前記通常データ処理命令を完了させ、
前記命令デコード部により通常データ処理命令がデコードされて前記第2の結果レジスタが選択されたとき、前記割当レジスタ選択部により選択された前記第2の割当レジスタに対して前記第4の処理結果が格納された場合に、デコードされた前記通常データ処理命令を完了させることを特徴とする付記4記載の演算処理装置。
(付記6) 前記演算処理装置において、
前記集合データ処理命令は、前記第1の処理結果の格納先として、複数の前記第1の結果レジスタから一の第1の結果レジスタを指定する第1のレジスタ指定情報を含み、
前記通常データ処理命令は、処理結果の格納先として、複数の前記第1の結果レジスタおよび複数の前記第2の結果レジスタから一の結果レジスタを指定する第2のレジスタ指定情報を含み、
前記演算処理装置はさらに、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、当該集合データ処理命令に含まれる前記第1のレジスタ指定情報により指定された前記第1の結果レジスタに対して、当該集合データ処理命令に基づく前記第1の処理結果を前記第1の割当レジスタから転送させるとともに、指定された前記第1の結果レジスタと同じレジスタ識別情報を付与された前記第2の結果レジスタに対して、当該集合データ処理命令に基づく前記第2の処理結果を前記第2の割当レジスタから転送させ、
前記命令デコード部により前記通常データ処理命令がデコードされたとき、デコードされた前記通常データ処理命令に含まれる前記第2のレジスタ指定情報により前記第1の結果レジスタが指定された場合、指定された前記第1の結果レジスタに対して、デコードされた前記通常データ処理命令に基づく前記第3の処理結果を前記第1の割当レジスタから転送させ、デコードされた前記通常データ処理命令に含まれる前記第2のレジスタ指定情報により前記第2の結果レジスタが指定された場合、指定された前記第2の結果レジスタに対して、デコードされた前記通常データ処理命令に基づく前記第4の処理結果を前記第2の割当レジスタから転送させるデータ格納制御部を有することを特徴とする付記2記載の演算処理装置。
(付記7) 前記演算処理装置はさらに、
前記集合データ処理命令として、前記第1のデータをキャッシュメモリから読み出し、読み出した前記第1のデータを前記第1の処理結果として出力する処理を、前記第1の処理部に実行させるとともに、前記第2のデータをキャッシュメモリから読み出し、読み出した前記第2のデータを前記第2の処理結果として出力する処理を、前記第2の処理部に実行させる集合データロード命令が、前記命令デコード部によりデコードされたとき、前記第1のデータが前記キャッシュメモリから出力されたことを示す第1の完了信号と、前記第2のデータが前記キャッシュメモリから出力されたことを示す第2の完了信号とを個別に出力する完了報告処理部をさらに有し、
前記データ格納制御部は、前記第1の完了信号と前記第2の完了信号とを受信すると、デコードされた前記集合データロード命令に含まれる前記第1のレジスタ指定情報により指定された前記第1の結果レジスタに対して、当該集合データロード命令に基づく前記第1の処理結果を前記第1の割当レジスタから転送させるとともに、当該第1の結果レジスタと同じレジスタ識別情報を付与された前記第2の結果レジスタに対して、当該集合データロード命令に基づく前記第2の処理結果を前記第2の割当レジスタから転送させる、
ことを特徴とする付記6記載の演算処理装置。
(付記8) 前記演算処理装置において、
前記集合データ処理命令は、前記第1の処理結果の格納先として、複数の前記第1の結果レジスタから一の第1の結果レジスタを指定する第1のレジスタ指定情報を含み、
前記通常データ処理命令は、処理結果の格納先として、複数の前記第1の結果レジスタおよび複数の前記第2の結果レジスタから一の結果レジスタを指定する第2のレジスタ指定情報を含み、
前記割当レジスタ選択部は、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、デコードされた前記集合データ処理命令に含まれる前記第1のレジスタ指定情報により指定された前記第1の結果レジスタと、選択した前記第1の割当レジスタとを対応付けてレジスタ対応情報に登録するとともに、指定された前記第1の結果レジスタと同じレジスタ識別情報を付与された前記第2の結果レジスタと、選択した前記第2の割当レジスタとを対応付けて前記レジスタ対応情報に登録し、
前記命令デコード部により前記通常データ処理命令がデコードされたとき、デコードされた前記通常データ処理命令に含まれる前記第2のレジスタ指定情報により前記第1の結果レジスタが指定された場合には、指定された前記第1の結果レジスタと、選択した第1の割当レジスタとを対応付けて前記レジスタ対応情報に登録し、デコードされた前記通常データ処理命令に含まれる前記第2のレジスタ指定情報により前記第2の結果レジスタが指定された場合には、指定された前記第2の結果レジスタと、選択した第2の割当レジスタとを対応付けて前記レジスタ対応情報に登録する、
ことを特徴とする付記2記載の演算処理装置。
(付記9) 前記演算処理装置はさらに、
前記命令デコード部により前記通常データ処理命令がデコードされたとき、前記レジスタ対応情報に基づいて、デコードされた前記通常データ処理命令に対応する前記第3のデータを、複数の前記第1の割当レジスタおよび複数の前記第2の割当レジスタのうち一の割当レジスタから読み出し、当該第3のデータを前記第1の割当レジスタから読み出した場合には当該第3のデータを前記第1の処理部に供給し、当該第3のデータを前記第2の割当レジスタから読み出した場合には当該第3のデータを前記第2の処理部に供給するように制御するデータ読み出し制御部を有することを特徴とする付記8記載の演算処理装置。
(付記10) 前記演算処理装置において、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記データ読み出し制御部は、前記レジスタ対応情報に基づいて、デコードされた前記集合データ処理命令に対応する前記第1のデータを複数の前記第1の割当レジスタのうち一の第1の割当レジスタから読み出して前記第1の処理部に供給するように制御するとともに、当該集合データ処理命令に対応する前記第2のデータを複数の前記第2の割当レジスタのうち一の第2の割当レジスタから読み出して前記第2の処理部に供給するように制御することを特徴とする付記9記載の演算処理装置。
(付記11) 前記演算処理装置はさらに、
前記通常データ処理命令として、前記第1の処理部または前記第2の処理部に、前記第3のデータを当該演算処理装置に接続された記憶装置に対して記憶する処理を実行させる通常データストア命令が、前記命令デコード部によりデコードされたとき、前記レジスタ対応情報に基づいて、デコードされた前記通常データストア命令に対応する前記第3のデータを、複数の前記第1の割当レジスタおよび複数の前記第2の割当レジスタのうち一の割当レジスタから読み出し、当該第3のデータを前記第1の割当レジスタから読み出した場合には当該第3のデータを前記第1の処理部に供給し、当該第3のデータを前記第2の割当レジスタから読み出した場合には当該第3のデータを前記第2の処理部に供給するように制御するデータ読み出し制御部を有することを特徴とする付記8記載の演算処理装置。
(付記12) 前記演算処理装置において、
前記集合データ処理命令として、前記第1の処理部に、前記第1のデータを前記記憶装置に記憶する処理を実行させるとともに、前記第2の処理部に、前記第2のデータを前記記憶装置に記憶する処理を実行させる集合データストア命令が、前記命令デコード部によりデコードされたとき、前記データ読み出し制御部は、前記レジスタ対応情報に基づいて、デコードされた前記集合データストア命令に対応する前記第1のデータを複数の前記第1の割当レジスタのうち一の第1の割当レジスタから読み出して前記第1の処理部に供給するように制御するとともに、当該集合データストア命令に対応する前記第2のデータを複数の前記第2の割当レジスタのうち一の第2の割当レジスタから読み出して前記第2の処理部に供給するように制御することを特徴とする付記11記載の演算処理装置。
(付記13) 前記演算処理装置において、
前記第1の処理部が行う前記第1の処理と、前記第2の処理部が行う前記第2の処理は、同じ処理であることを特徴とする付記1記載の演算処理装置。
(付記14) 前記演算処理装置において、
前記第1のデータと前記第2のデータは、ともに同じデータ幅を有することを特徴とする付記1記載の演算処理装置。
(付記15) 演算処理装置と、前記演算処理装置に接続される記憶装置とを備えた情報処理装置において、
前記演算処理装置は、
第1のデータおよび第2のデータを有する集合データに対して処理を行う集合データ処理命令をデコードする命令デコード部と、
データを格納する複数の第1の割当レジスタと、
データを格納する複数の第2の割当レジスタと、
前記集合データ処理命令のデコード結果に基づいて、前記複数の第1の割当レジスタから一の第1の割当レジスタを選択するとともに、前記複数の第2の割当レジスタから一の第2の割当レジスタを選択する割当レジスタ選択部と、
前記集合データ処理命令のデコード結果に基づいて、前記第1のデータに対して第1の処理を行い、前記第1の処理の結果である第1の処理結果を前記割当レジスタ選択部により選択された前記第1の割当レジスタに保持させる第1の処理部と、
前記集合データ処理命令のデコード結果に基づいて、前記第2のデータに対して第2の処理を行い、前記第2の処理の結果である第2の処理結果を前記割当レジスタ選択部により選択された前記第2の割当レジスタに保持させる第2の処理部と、
前記第1の割当レジスタに保持された前記第1の処理結果を格納する第1の結果レジスタと、
前記第2の割当レジスタに保持された前記第2の処理結果を格納する第2の結果レジスタと、
を有し、
前記記憶装置は、前記第1のデータおよび前記第2のデータを記憶することを特徴とする情報処理装置。
(付記16) 前記情報処理装置において、
前記命令デコード部は、前記第1または第2のデータと同じデータ幅の第3のデータに対して処理を行う通常データ処理命令が入力されたとき、前記通常データ処理命令をデコードしてデコード結果を出力するとともに、前記通常データ処理命令のデコード結果に基づいて前記第1の結果レジスタまたは前記第2の結果レジスタのいずれかを選択し、
前記命令デコード部により前記第1の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第1の割当レジスタから一の第1の割当レジスタを選択し、
前記第1の処理部は、前記第3のデータに対して前記第1の処理を行い、当該第1の処理の結果である第3の処理結果を、前記割当レジスタ選択部により選択された前記第1の割当レジスタに保持させ、
前記第1の結果レジスタは、前記割当レジスタ選択部により選択された前記第1の割当レジスタに保持された前記第3の処理結果を格納し、
前記命令デコード部により前記第2の結果レジスタが選択された場合には、
前記割当レジスタ選択部は、前記複数の第2の割当レジスタから一の第2の割当レジスタを選択し、
前記第2の処理部は、前記第3のデータに対して前記第2の処理を行い、当該第2の処理の結果である第4の処理結果を、前記割当レジスタ選択部により選択された前記第2の割当レジスタに保持させ、
前記第2の結果レジスタは、前記割当レジスタ選択部により選択された前記第2の割当レジスタに保持された前記第4の処理結果を格納する、
ことを特徴とする付記15記載の情報処理装置。
(付記17) 前記情報処理装置において、
前記演算処理装置はさらに、
前記命令デコード部により前記集合データ処理命令がデコードされたとき、前記第1のデータを前記複数の第1の割当レジスタのうち一の第1の割当レジスタから読み出すとともに、前記第2のデータを前記複数の第2の割当レジスタのうち一の第2の割当レジスタから読み出し、前記命令デコード部により前記通常データ処理命令がデコードされたとき、前記第3のデータを前記複数の第1の割当レジスタおよび前記複数の第2の割当レジスタのうち一の割当レジスタから読み出すデータ読み出し制御部を有することを特徴とする付記16記載の情報処理装置。
(付記18) 演算処理装置が有する命令デコード部が、入力された命令をデコードするとともに、そのデコード結果に基づいて、処理結果の格納先の結果レジスタを選択する命令デコードステップと、
前記演算処理装置が有する割当レジスタ選択部が、前記命令のデコード結果に基づいて、処理結果を一時的に保持する割当レジスタを選択する割当レジスタ選択ステップと、
前記演算処理装置が有する第1の処理部または第2の処理部の少なくとも一方が、前記命令のデコード結果に基づいて、データに対して処理を行い、前記割当レジスタ選択ステップで選択された前記割当レジスタに対して処理結果を保持させるデータ処理ステップと、
前記割当レジスタ選択ステップで選択された前記割当レジスタが保持する前記処理結果を、前記命令デコードステップで選択された前記結果レジスタに格納するデータ格納ステップと、
を有し、
前記命令デコードステップでは、前記命令デコード部は、デコードした命令が、第1のデータおよび第2のデータを有する集合データに対して処理を行う集合データ処理命令である場合、処理結果の格納先として、第1の結果レジスタ群および第2の結果レジスタ群からそれぞれ1つずつ前記結果レジスタを選択し、
前記命令デコードステップにおいて前記集合データ処理命令がデコードされた場合、
前記割当レジスタ選択ステップでは、前記割当レジスタ選択部は、第1の割当レジスタ群および第2の割当レジスタ群からそれぞれ1つずつ前記割当レジスタを選択し、
前記データ処理ステップでは、前記第1の処理部が、前記第1のデータに対して第1の処理を行い、前記第1の処理の結果である第1の処理結果を、前記第1の割当レジスタ群から選択された前記割当レジスタに保持させるとともに、前記第2の処理部が、前記第2のデータに対して第2の処理を行い、前記第2の処理の結果である第2の処理結果を、前記第2の割当レジスタ群から選択された前記割当レジスタに保持させ、
前記データ格納ステップでは、前記第1の割当レジスタ群から選択された前記割当レジスタに保持された前記第1の処理結果を、前記第1の結果レジスタ群から選択された前記結果レジスタに格納するとともに、前記第2の割当レジスタ群から選択された前記割当レジスタに保持された前記第2の処理結果を、前記第2の結果レジスタ群から選択された前記結果レジスタに格納する、
ことを特徴とする演算処理装置の制御方法。
(付記19) 前記演算処理装置の制御方法において、
前記命令デコードステップでは、前記命令デコード部は、デコードした命令が、第3のデータに対して処理を行う通常データ処理命令である場合、処理結果の格納先として、前記第1の結果レジスタ群または前記第2のレジスタ群のいずれかから一の前記結果レジスタを選択し、
前記命令デコードステップにおいて、前記通常データ処理命令がデコードされるとともに、前記第1の結果レジスタ群から前記結果レジスタが選択された場合、
前記割当レジスタ選択ステップでは、前記割当レジスタ選択部は、前記第1の割当レジスタ群から一の前記割当レジスタを選択し、
前記データ処理ステップでは、前記第1の処理部が、前記第3のデータに対して前記第1の処理を行い、当該第1の処理の結果である第3の処理結果を、前記第1の割当レジスタから選択された前記割当レジスタに保持させ、
前記データ格納ステップでは、前記第1の割当レジスタ群から選択された前記割当レジスタに保持された前記第3の処理結果を、前記第1の結果レジスタ群から選択された前記結果レジスタに格納し、
前記命令デコードステップにおいて、前記通常データ処理命令がデコードされるとともに、前記第2の結果レジスタ群から前記結果レジスタが選択された場合、
前記割当レジスタ選択ステップでは、前記割当レジスタ選択部は、前記第2の割当レジスタ群から一の前記割当レジスタを選択し、
前記データ処理ステップでは、前記第2の処理部が、前記第3のデータに対して前記第2の処理を行い、当該第2の処理の結果である第4の処理結果を、前記第2の割当レジスタから選択された前記割当レジスタに保持させ、
前記データ格納ステップでは、前記第2の割当レジスタ群から選択された前記割当レジスタに保持された前記第4の処理結果を、前記第2の結果レジスタ群から選択された前記結果レジスタに格納する、
ことを特徴とする付記18記載の演算処理装置の制御方法。
(付記20) 前記演算処理装置の制御方法において、
前記命令デコードステップにおいて前記集合データ処理命令がデコードされた場合、前記データ処理ステップでは、前記演算処理装置が有するデータ読み出し制御部が、前記第1のデータを前記第1の割当レジスタ群のうち一の前記割当レジスタから読み出して、前記第1の処理部に供給するとともに、前記第2のデータを前記第2の割当レジスタ群のうち一の前記割当レジスタから読み出して、前記第2の処理部に供給し、
前記命令デコードステップにおいて前記通常データ処理命令がデコードされた場合、前記データ処理ステップでは、前記データ読み出し制御部が、前記第3のデータを前記第1の割当レジスタ群および前記第2の割当レジスタ群のうち一の前記割当レジスタから読み出し、前記第1の処理部または前記第2の処理部に供給する、
ことを特徴とする付記19記載の演算処理装置の制御方法。