(57)【特許請求の範囲】
【請求項１】
条件付浮動小数点ストア命令のストアデータおよび条件データを格納する浮動小数点レジスタと、
前記条件付浮動小数点ストア命令の前記条件データおよび前記ストアデータを前記浮動小数点レジスタの複数のリードポートを利用して同時に読み出し、読み出された前記条件データを用いて前記条件付き浮動小数点ストア命令を実行するか否かを判定する演算部と、
を備えることを特徴とするプロセサ。
【請求項２】
前記浮動小数点レジスタの最上位ビットに前記条件データを格納することを特徴とする請求項１記載のプロセサ。
【請求項３】
更に、前記演算部は、二つの浮動小数点レジスタの値を比較し、その真偽の結果を条件データとして浮動小数点レジスタの最上位ビットに格納する浮動小数点比較演算命令を実行することを特徴とする請求項２記載のプロセサ。
【請求項４】
更に、前記演算部は、複数の前記条件データ間のビット論理演算命令を実行することを特徴とする請求項２記載のプロセサ。
【請求項５】
前記条件付き浮動小数点ストア命令は、条件データが真のときにメモリへの書き込みを行う真条件付き浮動小数点ストア命令、または、条件データが偽のときにメモリへの書き込みを行う偽条件付き浮動小数点ストア命令、のいずれかであることを特徴とする請求項１記載乃至請求項４記載いずれか１項記載のプロセサ。
【請求項６】
更に、前記浮動小数点レジスタに格納された前記ストアデータの最小オペランド長の２を基底とする対数ビット分、前記条件付き浮動小数点ストア命令の即値フィールドをシフトして即値データを生成し、該即値データを用いてアドレスを生成するアドレス生成部を備えることを特徴とする請求項１乃至請求項５いずれか１項記載のプロセサ。
【請求項７】
更に、命令を確定するコミット制御部を備え、
前記条件付き浮動小数点ストア命令が該コミット制御部によってコミットされる前に、プログラム上後続のロード命令が同じメモリアドレスに発行された場合、ストア条件が成り立つときはストアデータをロードデータとしてレジスタ部に応答し、ストア条件が非成立のときはキャッシュ部からロードデータをレジスタに応答する、ことを特徴とする請求項１乃至請求項６いずれか１項記載のプロセサ。
【請求項８】
ＳＩＭＤ構成の浮動小数点レジスタを備えるプロセサであって、
条件付浮動小数点ストア命令のストアデータおよび条件データを格納する、前記ＳＩＭＤの各要素の浮動小数点レジスタと、
前記条件付浮動小数点ストア命令の前記条件データおよび前記ストアデータを前記浮動小数点レジスタの複数のリードポートを利用して同時に読み出し、読み出された前記条件データを用いて前記条件付き浮動小数点ストア命令を実行するか否かを判定する演算部と、を備えることを特徴とするプロセサ。
【請求項９】
プロセサにおいて条件付きストア命令を実行するための方法であって、
条件付浮動小数点ストア命令のストアデータおよび条件データを浮動小数点レジスタに格納し、
前記条件付浮動小数点ストア命令の前記条件データおよび前記ストアデータを前記浮動小数点レジスタの複数のリードポートを利用して同時に読み出し、読み出された前記条件データを用いて前記条件付き浮動小数点ストア命令を実行するか否かを判定する、
ことを特徴とする方法。
【請求項１０】
ＳＩＭＤ構成の浮動小数点レジスタを備えるプロセサにおいて、条件付きストア命令を実行するための方法であって、
条件付浮動小数点ストア命令のストアデータおよび条件データを、前記ＳＩＭＤの各要素の浮動小数点レジスタに格納し、
前記条件付浮動小数点ストア命令の前記条件データおよび前記ストアデータを前記浮動小数点レジスタの複数のリードポートを利用して同時に読み出し、読み出された前記条件データを用いて前記条件付き浮動小数点ストア命令を実行するか否かを判定する、
ことを特徴とする方法。
【請求項１１】
プロセサを有する情報処理装置において、
前記プロセサが、
条件付浮動小数点ストア命令のストアデータおよび条件データを格納する浮動小数点レジスタと、
前記条件付浮動小数点ストア命令の前記条件データおよび前記ストアデータを前記浮動小数点レジスタの複数のリードポートを利用して同時に読み出し、読み出された前記条件データを用いて前記条件付き浮動小数点ストア命令を実行するか否かを判定する演算部と、を備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセサおよび情報処理装置に関する。
【背景技術】
【０００２】
プロセサにおいて、コンパイラがプログラムの処理性能を向上させる手法に、ソフトウェアパイプライニングがある。図１５にソフトウェアパイプライニングの概念図を示す。例えばプログラムソースで依存関係がある処理Ａが記述されている場合に、ハードウェアがその通りに処理を行うと各命令間に依存関係があるために、処理Ａが逐次処理になってしまい、性能が出ない場合がある。このようなときに、コンパイラが処理Ａとは依存関係のないその後に実行される処理Ｂを、処理Ａの命令列の間に挿入するようにコンパイル時に命令列の並び方を最適化する。これによりハードウェアは処理Ａと処理Ｂを並列に行うことが可能になる。この最適化をソフトウェアパイプライニングと呼ぶ。
【０００３】
プログラムでｉｆ文のような条件文がある場合、条件によって命令を実行するか否かが分かれることを実現する手段として大まかに２つ考えられる。そのうちの１つは、図１６に示すように、条件分岐命令により条件の真偽によって命令分岐することで、実行する命令列を切り替える手段である。しかし図１６に示したように、条件分岐によって実行するか否かが決まる命令列は、上記ソフトウェアパイプライニングの対象となれない。
【０００４】
条件によって命令を実行するか否かが分かれることを実現するもう１つの手段として、条件の真偽によってレジスタ間の移動を行う条件付きレジスタムーブ命令や、レジスタからメモリに書き込む条件付きストア命令を利用するものがある。これらは、ソフトウェアパイプライニングを行うための手段となりうる。これらの命令は、結果を更新するか否かを条件の真偽によって判定する。つまり命令列としては条件によらず同じものなので、これらの命令を利用すれば条件文がある箇所でもソフトウェアパイプライニングを使用することが可能である（図１７および図１８参照）。
【０００５】
また、命令セットによっては、条件付きレジスタムーブ命令のみ定義されて、条件付ストア命令が定義されていないものがある。このようなプロセサにおいて、１つのプログラムを１つのコアやスレッドで処理する場合は、条件付きストア命令の代わりに次のように処理を行う。まず、レジスタにメモリデータをロードする。その後レジスタを更新するかしないかは条件付きレジスタムーブ命令を用いて行い、ストア命令を用いてそのレジスタをメモリにストアする。仮にプログラムの動作として、メモリを更新しないとなった場合は、一旦レジスタにロードした同じデータをもう一度メモリに書き戻すのである。図１９に条件付きムーブ命令で条件付きストア命令の代用をしたときのフローを示す。
【０００６】
近年、一つのプログラムを複数のコアで並列に処理（スレッド並列）する高速化の手法がある。このときメモリ上のデータを共有する場合がある。この複数のコアを用いたスレッド並列の際には、条件付きストアを上のような条件付きレジスタムーブ命令で代用することはできない。
【０００７】
図２０の具体例を参照して、この理由を説明する。
図２０において、例えば、条件が偽であるのをコア０で実行し、条件が真であるのをコア１で実行して、どちらか一方のコアがメモリを更新するとする。この場合に、各コアが一旦自分のレジスタにメモリからデータをロードして、コア１が先に新しいデータをメモリにストアし、その後コア０はロードしたデータと同じものを再びメモリにストアすると、メモリ上では古いデータになってしまう。この結果、処理が誤ることなる。
【０００８】
図２０に示したような問題は、一旦コアがレジスタにロードしてしまうと、他のコアとのデータの共有性がなくなるために発生する。つまりメモリデータを共有しながら高速化を行うスレッド並列ができなくなるケースが発生するということである。この問題は条件付きストアにより解決できる。
【０００９】
条件付きストア命令があれば、図２１に示すように、レジスタにロードせずに、条件が真のコア１は条件付きストアで新しいデータのストアを行い、条件が偽であるコア０は条件付きストアでストアを行わないので、新しいデータをメモリ上に反映することができる。
【００１０】
ただ、条件付きストアに相当する命令を定義されている場合も、浮動小数点レジスタとは異なるマスク専用のレジスタを設けている命令セットがある。この場合は、マスク付きストアを用いて、上記スレッド並列が可能になるが、マスクレジスタの依存関係を検出する必要があり、そのためのハードウェアも大きくなってしまう。すべてのプログラムにおいてマスクを必要とするわけではないので、このハードウェアの増大は必ずしもコストパフォーマンスが良いものではない。
【００１１】
条件付き命令では、例えばＳＰＡＲＣ−Ｖ９（ＳＰＡＲＣは登録商標）においては、条件データとして整数用コンディションコードＩＣＣ、ＸＣＣや、浮動小数点用コンディションコードｆｃｃ０、ｆｃｃ１、ｆｃｃ２、ｆｃｃ３を用いる。例えば浮動小数点の条件で条件付き命令を実行する際には、独立な条件がｆｃｃ０、ｆｃｃ１、ｆｃｃ２、ｆｃｃ３の４つしかないので、例えば５つ以上の条件を用いた条件付き処理が行えない。この条件を保持できる数が制限されることも、コンパイラによる並列化の阻害要因になっている。図２２に、コンディションコードが最大２つの時の例を示す。
【００１２】
また近年、スカラープロセサにおいて高性能化のため採用されている複数のレジスタのデータを１つの命令の入力データのベクトル要素として並列処理を行うＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）拡張処理というものがある。条件付き命令のＳＩＭＤ処理を定義する際には、各要素について、それぞれ条件を見て行う条件付きＳＩＭＤ命令が必要になる。そのためには、条件を格納する条件コード、もしくはマスクレジスタも要素ごとに対応するよう新たにＳＩＭＤに対応した拡張をする必要が発生する。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
以上のように、従来のプロセサの条件付き命令ではコンディションコードの数で条件処理の数が制限されていたという問題があった。
そこで本発明の課題は、条件付き命令におけるコンディションコードの数による制限を受けずにストア命令を実行できるプロセサを提供することにある。また、該プロセサは、できるだけコストを抑えて実現することが求められる。
【００１４】
更に、上記課題とするプロセサに対応して、スカラープロセサにおいて高性能化のため採用されているＳＩＭＤ命令についても、条件付き命令のＳＩＭＤ処理を定義することが求められる。
【課題を解決するための手段】
【００１５】
このプロセサは、条件データを浮動小数点レジスタそのものに格納し、該条件データに基づいて、ストアデータをメモリにストアするか否かを判定する条件付き浮動小数点ストア命令を演算部が実行する。  また、このプロセサは、浮動小数点レジスタがＳＩＭＤ構
成で用いられるときに、ＳＩＭＤの各要素の浮動小数点レジスタに条件データを格納し、該条件データに基づいて、ＳＩＭＤストアの各要素のデータをストアするか否かを判定する条件付き浮動小数点ストア命令を演算部が実行する。
【発明の効果】
【００１６】
開示のプロセサは、コンディションコードの数に制限されることなく条件処理を実行することが可能となる。また、通常の浮動小数点演算の際に用いるリードポートで条件データの読み出しを行うこと、依存関係の検出も浮動小数点レジスタの依存関係検出回路を用いることが可能になる。よって、ハードウェアコストを抑えて条件付き浮動小数点ストア命令を実現することができる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して、本発明の実施の形態について説明する。尚、本発明の実施の形態として実施例を以下に説明するが、本発明はこれから説明する実施例に限定されることはなく、その要旨を逸脱しない範囲で様々な応用が可能であることはいうまでもない。
【００１８】
まず、本発明の実施例の概要を説明する。
本実施例のプロセサは、サーバなどの情報処理装置に設けられる。情報処理装置には、各種入出力装置、メモリ、ディスク装置などの装置が、プロセサとバスを介して接続される。
【００１９】
本実施例のプロセッサは、条件付きストア命令を行う際の条件データを浮動小数点レジスタそのものに格納する。条件データを生成するための浮動小数点比較演算命令を新たに定義し、その結果（真偽）を浮動小数点レジスタに格納する。また、複数の条件のＡＮＤやＯＲをする場合にも対応するため、条件データを格納する浮動小数点レジスタ同士のＡＮＤ、ＯＲ、ＸＯＲ、ＮＯＴといったビット論理演算命令も定義する。
【００２０】
本実施例のプロセサは、浮動小数点レジスタに格納されている、前記浮動小数点比較演算命令または論理演算命令の結果である真偽の値に基づいて条件付きストア処理を行う。このように、条件付きストア命令の条件データを浮動小数点レジスタに格納し、該浮動小数点レジスタに格納された条件データの値（真偽）に基づいて浮動小数点ストアを処理する命令を、条件付き浮動小数点ストア命令と呼ぶことにする。
【００２１】
マスクレジスタのような専用のレジスタを用意して条件データを格納する命令アーキテクチャの場合は、マスクレジスタ同士の比較演算命令、論理演算命令を定義し、ハードウェアとしては、浮動小数点レジスタとは別にマスクレジスタ用のレジスタファイルや、マスクレジスタ専用の依存関係を検出する回路が必要になる。しかし、本実施例では、浮動小数点比較演算命令や浮動小数点論理演算命令の結果である真偽の値を浮動小数点レジスタに格納するため、浮動小数点レジスタを利用することが可能で、これにより浮動小数点データの依存関係検出回路を用いることができる。すなわち、新たなハードウェアを必要としない、という効果がある。
【００２２】
図１に、条件付き浮動小数点ストア命令の際の本実施例のプロセサの動作の概略を示す。
ストアデータは、浮動小数点レジスタ１１の第１オペランド（図１の「オペランド０」に対応）から読み出され、ストアデータレジスタ１４に格納される。また条件データは、浮動小数点レジスタ１１の第２オペランド（図１の「オペランド１」に対応）から読み出される。演算器１３では、命令制御部１２から送られるオペコードを見て、条件付きストア命令であれば、条件データに基づいてストアイネーブル信号を生成する。生成されたストアイネーブル信号は、ストアイネーブルレジスタ１５に格納される。キャッシュ部１６
では、ストアイネーブルレジスタ１５の値に基づいてストアデータレジスタ１４に格納されたデータの格納が行われる。
【００２３】
ストア命令では、メモリアドレスとストアデータをキャッシュメモリに送出する。ストアデータを浮動小数点レジスタ１１から読み出すためには、読み出しポートを１つ必要とする。科学技術計算で用いられる浮動小数点積和演算では３つのレジスタデータをソースとするので、１つの演算パイプに対し、レジスタファイルは３つのリードポートを使用できる構成になっている（図２３の浮動小数点レジスタと演算器の構成を参照）。よって、実施例の条件付き浮動小数点ストア命令では、この演算パイプのリードポートを２つ利用し、ストアデータと同時に条件データの読み出しを行う。このように既にある浮動小数点レジスタ１１の３つのリードポートを利用することが可能で、新たなハードウェアを必要としない。
【００２４】
更に、浮動小数点レジスタ１１をＳＩＭＤ拡張する命令仕様とした場合に、条件付き浮動小数点ストア命令を処理するプロセサの動作を説明する図を図２に示す。
この場合も、条件を格納するレジスタ、つまり浮動小数点レジスタ１１も同時にＳＩＭＤ拡張されることになる。図２はＳＩＭＤの要素が２要素の場合を示すもので、各要素の構成は図１の構成と同様である。ただ、ＳＩＭＤ条件付きストア命令の場合、命令制御部１２から送られるオペコードは、各要素の演算器１３−０、１３−１、・・・１３−Ｎにそれぞれ入力されることとなる。
【００２５】
ＳＩＭＤの各要素に対して演算パイプがあり、それぞれにレジスタファイルのリードポートが３つ用意される（図２４のＳＩＭＤ浮動小数点レジスタと演算器の構成を参照）。それぞれの演算パイプのリードポートを２つ利用し、ストアデータと同時に条件データの読み出しを行うのは図１と同様である。
【００２６】
図１および図２に示したように、本実施例では、浮動小数点レジスタに格納されている条件データに基づいてストア処理を行う。このように浮動小数点レジスタに条件データを格納するので、本実施例では条件コードの数に制限されずに、条件付きストア命令を実行することができる。特に、浮動小数点レジスタ領域を拡張し、多くの本数の浮動小数点レジスタを備えるプロセサにおいては、より多くの条件を用いて条件付き命令を行うことが可能となる。
【００２７】
次に図３に示すプロセサを参照して、本実施例についてより詳細に説明する。
プロセサは、１次命令キャッシュ３３、２次キャッシュ／メモリ部３４、１次データキャッシュ３２、命令デコード部３５、演算処理部３６、アドレス生成部３７、コミット制御部３８、ロード処理部３９、ストア処理部４０、固定小数点レジスタ３１、浮動小数点レジスタ３０を備える。
【００２８】
命令デコード部３５は１次命令キャッシュ３３などから読み出した命令のデコードを行う。演算処理部３６は演算処理を行う演算器等で構成される。アドレス生成部３７はデコードされた命令からアクセスするアドレスを生成する。ロード処理部３９はロード命令を、ストア処理部４０はストア命令をそれぞれ処理する回路である。コミット制御部３８は、レジスタ更新、メモリ更新を制御する。
【００２９】
本実施例では、条件付き浮動小数点ストア命令として、真条件のときにストアを行う真条件浮動小数点ストア命令と、偽条件のときにストアを行う偽条件浮動小数点ストア命令を定義する。
【００３０】
図４に、条件付き浮動小数点ストア命令の命令フォーマットを示す。図４の例では、条
件付浮動小数点ストア命令は、命令種を示すオペコード部（ＯＰＣＯＤＥ［７：０］）と、メモリアドレス生成のための固定小数点レジスタアドレスを指定するＲＳ１（ＲＳ１［４：０］）、即値指示ビット（Ｉ[０]）、符号拡張付き即値フィールド（ＳＩＧＮＥＤ−ＩＭＭＯＰ［７：０］）、ストアデータとなる浮動小数点レジスタを指定するＲＤフィールド（ＲＤ［４：０］）、条件データを格納する浮動小数点レジスタを指定するＲＳ２フィールド（［４：０］）から成る。
【００３１】
メモリアドレスは、即値指示ビットＩ[０]＝１の時に、
メモリアドレス＝ＲＳ１データ＋符号拡張ＩＭＭ（８ビット即値＜＜２）
で求められる。
【００３２】
また、浮動小数点ストアデータは、ＲＤが示す浮動小数点レジスタの値である。
また、条件データは、ＲＳ２が示す浮動小数点レジスタの最上位ビット、つまり符号ビットである。
【００３３】
このように、条件付き浮動小数点ストア命令でオペランド２（ＲＳ２）のレジスタを条件レジスタに割り当てるので、ストアするメモリアドレスの指定方法は、オペランド１と即値フィールドの和とする。条件付き浮動小数点ストア命令はストアデータが単精度浮動小数点長の４バイトと倍精度浮動小数点データ長の８バイトに限定できるので、命令オペコードの即値フィールドを２ビットシフトして用いるように定義する。これによりベースアドレスＲＳレジスタと即値フィールドによるディスプレースメントの加算で広域なメモリアドレスの指定を可能にする。
【００３４】
次に、図５、図６、図７を参照して、本実施例における条件データを生成するための浮動小数点比較演算命令および浮動小数点ビット論理演算命令の定義を示す。
まず、浮動小数点比較演算命令として、fcompgt命令、fcompge命令、fcomplt命令、fcomple命令、fcompeq命令、fcompne命令を定義する。これらの浮動小数点演算命令は、２つの浮動小数点レジスタ値を比較して、真偽を浮動小数点レジスタに返す命令である。
【００３５】
fcompgt命令は、ＲＳ１＞ＲＳ２でＲＤの最上位ビットに１を応答する。
fcompge命令は、ＲＳ１≧ＲＳ２でＲＤの最上位ビットに１を応答する。
fcomplt命令は 、ＲＳ１＜ＲＳ２でＲＤの最上位ビットに１を応答する。
【００３６】
fcomple命令は、ＲＳ１≦ＲＳ２でＲＤの最上位ビットに１を応答する。
fcompeq命令は、ＲＳ１＝ＲＳ２でＲＤの最上位ビットに１を応答する。
compne命令は、ＲＳ１≠ＲＳ２でＲＤの最上位ビットに１を応答する。
【００３７】
図５に浮動小数点比較演算命令のフォーマットを示す。図５に示された浮動小数点比較演算命令は、オペコード部ＯＰＣＯＤＥ［７：０］と、ＲＳ１フィールドＲＳ１［４：０］と、符号拡張付き即値フィールドＳＩＧＮＥＤ−ＩＭＭＯＰ［８：０］と、ＲＤフィールドＲＤ［４：０］と、ＲＳ２フィールド［４：０］とを有し、オペコード（ＯＰＣＯＤＥフィールドとＳＵＢ-ＯＰＥＣＯＤＥフィールド）で、fcompgt命令やfcompge命令などの種類を区別する。図６に、浮動小数点比較演算命令処理を説明する図を示す。浮動小数点比較演算器６３は、浮動小数点レジスタ６１からのオペランド０（ＲＳ１）およびオペランド１（ＲＳ２）の値を比較し、結果を演算結果レジスタ６４に格納し、ＲＤに書き込む。本実施例では、オペランドの比較結果が真のときには、ＲＤの最上位ビットを含むすべてのビットを１にセットし、偽のときにはＲＤの最上位ビットを含むすべてのビットを０にセットする構成とする。
【００３８】
さらにｉｆ文の条件が複数の比較のＡＮＤやＯＲなど複数ある場合は、上で得た条件デ
ータのビットのＡＮＤ、ＯＲ、ＮＯＴ、ＸＯＲが必要になる。このためにＲＳ１のデータとＲＳ２のデータのビットの論理演算を行い、結果をＲＤに書き込む浮動小数点ビット論理演算命令fand命令、for命令、fnot命令、fxor 命令を定義する。浮動小数点ビット論理演算命令の命令フォーマットは図５と同様である。図７に浮動小数点ビット論理演算命令処理を説明する図を示す。浮動小数点ビット論理演算器７３は、オペランド０（ＲＳ１）およびオペランド１（ＲＳ２）の値を比較し、結果を演算結果レジスタ７４に格納し、ＲＤに書き込む。浮動小数点比較演算命令と同様に、オペランドの比較結果が真のときには、ＲＤの最上位ビットを含むすべてのビットを１にセットし、偽のときにはＲＤの最上位ビットを含むすべてのビットを０にセットする構成である。
【００３９】
尚、上述した浮動小数点演比較算命令、浮動小数点ビット論理演算命令は、倍精度浮動小数点（８バイト）と単精度浮動小数点（４バイト）についてそれぞれ定義する。オペコードで単精度浮動小数点命令か倍精度浮動小数点命令かを区別する。
【００４０】
以上、本実施例における命令フォーマット、浮動小数点比較演算命令、浮動小数点論理演算命令の定義について説明した。次にストア処理について詳細に説明する。
まず、条件付きではない浮動小数点ストア命令について説明する。条件付きではない浮動小数点ストア命令を非条件付き浮動小数点ストア命令と呼ぶことにする。非条件付き浮動小数点ストア命令の命令フォーマットを図８に示す。
【００４１】
命令フォーマットは、まずストア命令であることを示すオペコード部ＯＰＣＯＤＥ［７：０］を持つ。また、メモリアドレスを計算するために、即値オペランドを使用するかしないかを示す即値指定ビットＩ［０］を備える。Ｉ［０］＝０のときは固定小数点レジスタアドレスを指定するためのＲＳ１とＲＳ２の加算結果をメモリアドレスとする。この場合、ストア命令には８ビットの空きフィールドが存在する。Ｉ［０］＝１のときはＲＳ１と符号拡張付き即値フィールドＳＩＧＮＥＤ−ＩＭＭＯＰ１３ビットとの加算結果をメモリアドレスとする。さらにストアデータとなる浮動小数点レジスタを指定するＲＤフィールドからなる。
【００４２】
図９にストア命令の処理の説明を示す。
まず、命令デコード部９３で命令がデコードされ、その結果がメモリアドレス生成パイプライン９４を介して１次データキャッシュ９８内のストアバッファ９５内のオペコードフィールドに格納される。
【００４３】
非条件付き浮動小数点ストア命令では、ＲＳ１とＲＳ２、もしくはＲＳ１と符号拡張付き即値フィールド１３ビットとの和を生成するアドレス生成パイプライン９４を通して、ストアするメモリアドレスをストア命令の制御を行うキャッシュ部９８に送る。メモリアドレスは、１次データキャッシュ部９８内のストアバッファ９５のメモリアドレスフィールドに格納される。条件データは、浮動小数点レジスタ９１から浮動小数点演算器パイプライン９２を介して１次データキャッシュ部９８内のストアバッファ９５のストアイネーブルフィールドに格納される。ストアする浮動小数点データは、浮動小数点演算器パイプライン９２を通してキャッシュ部９８に送られる。  条件付き浮動小数点ストア命令では、ＲＳ１と符号拡張付き即値フィールド８ビットとの和を生成するアドレス生成演算パイプライン９４を通して、ストアするメモリアドレスをストア命令の制御を行うキャッシュ部９８に送る。条件付き浮動小数点ストア命令ではストアデータが浮動小数点データなので、単精度浮動小数点データの４バイトや倍精度浮動小数点データの８バイトのデータにデータ長を限定できる。図１０に示すように、命令デコードの結果、命令が条件付き浮動小数点ストア命令であると判別された場合、命令オペコードの符号拡張付き即値フィールドを２ビット左シフト（図１０の「'ＳＳＳＳ'ＩＭＭＯＰ［６：０］'００’」）」して用いるように定義することで、より高いメモリアドレスの指定を可能にする。符号拡張付き即値フィールドのシフトは、命令デコードの時点で条件付き浮動小数点ストア命令であることを判別したときに、図１０の「ＳＩＧＮＥＤ−ＩＭＭＯＰ［７：０］」→「'Ｓ'ＩＭＭＯＰ［６：０］」→「'ＳＳＳＳ'ＩＭＭＯＰ［６：０］'００’」のように２ビット左シフトを行う。符号拡張付き即値フィールドの最上位ビットＳは符号ビットとして、ＲＳ１と加算を行うときに、符号拡張を行うようにする。
【００４４】
また、ストアする浮動小数点データと、浮動小数点レジスタにある条件データは次のようにしてキャッシュ部９８に送出される。浮動小数点演算器は、入力レジスタとして３ソースオペランドの読み出しポートがある（図２３参照）。非条件付き浮動小数点ストア命令では、第１オペランドの読み出しポートを使用して、ストアデータを浮動小数点レジスタ９１から読み出し、一旦演算器（浮動小数点演算器パイプライン９２）を通して、キャッシュ部９８に送出する。条件付き浮動小数点ストアの場合は、条件を格納する浮動小数点レジスタを第２オペランドから読み出す。演算器では、命令デコード部９３から受けた命令のオペコードを見て、命令が真条件付き浮動小数点ストアであれば第２オペランドの最上位ビットが１であるときにストアイネーブル信号を１として、ストアデータと同じサイクルでキャッシュ部９８に送出する。命令のオペコードが偽条件付き浮動小数点ストアであれば、第２オペランドの最上位ビットが０のときに、ストアイネーブル信号を１として、やはりストアデータと同じサイクルでキャッシュ部９８に送出する。図１１に、真条件付き浮動小数点ストア命令または偽条件付き浮動小数点ストア命令に対してストアイネーブル信号を生成する回路を示す。図１１の回路は、図９の浮動小数点演算器パイプライン９２に含まれる回路である。
【００４５】
図１１において、オペコード解読回路１１０により解読されたオペコードが出力される。
真条件付きストア命令の場合にはＡＮＤ回路１１１に出力され、また、偽条件付きストア命令の場合にはＡＮＤ回路１１２に出力される。また、条件データ（第２オペランドの最上位ビット）は、ＡＮＤ回路１１１にはそのまま入力され、またＡＮＤ回路１１２には反転して入力される。そしてＡＮＤ回路１１１または１１２の結果がＯＲ回路１１３に入力され、ストアイネーブル信号が生成される。このように、オペコードと第２オペランドの最上位ビットによってストアイネーブル信号が生成される。
【００４６】
また、図１２にＳＩＭＤ条件付き浮動小数点ストア命令の処理の説明を示す。ＳＩＭＤ条件付き浮動小数点ストア命令のときには、各要素に対応した演算パイプが、ストアデータとストアイネーブル信号をキャッシュ部９８に同時に送出する。
【００４７】
図１３に一般的な浮動小数点データのフォーマットを示す。単精度浮動小数点データのデータフォーマットは、[３１]で符号を示し、［３０：２３］に指数、［２２：０］に仮数という構成となっている。また、倍精度浮動小数点データのデータフォーマットは、[６３]で符号を示し、［６２：５２］に指数、［５１：０］に仮数という構成となっている。条件データを浮動小数点レジスタの最上位ビット、すなわち図１３に示した符号ビットとすることで、ある浮動小数点データの正負だけが条件の場合は、比較演算命令を実行せずに、そのデータを格納するレジスタそのものを条件データとして用いて条件付き浮動小数点ストア命令を実行することが可能である。
【００４８】
図９のキャッシュ部９８のストアバッファ９５は、アドレスパイプからアドレスやオペコードなど必要な情報を受け取り、またストアデータのパイプラインからストアデータとストアイネーブル信号を受け取る。また、図１２に示すように、ＳＩＭＤ条件付き浮動小数点ストア命令のときには、キャッシュ部９８のストアバッファ９５´は各要素に対してストアデータとストアイネーブル信号を受け取る。
【００４９】
一方、図９および図１２において、コミット制御部９６は、キャッシュ部９８からそのメモリアドレスに対してトラップなどがないことの報告「処理完了通知」を受け、且つ浮動小数点演算器パイプライン９２からストアデータをキャッシュ部９８に送出したことの報告を受け取って、プログラム順序に従って命令確定（コミット）を行う。コミット時には、非条件付きストア命令と同様にストアコミットというストアデータをキャッシュに書き込む指示信号をストアバッファ９５に送る。コミット制御部９６では、非条件付きストア命令か条件付きストア命令か、あるいはＳＩＭＤか否かを区別しない。
【００５０】
図９のストアバッファ９５では、ストアコミットを受け取ったときに、対応するリクエストが条件付きストア命令であれば、ストアイネーブル信号の有無を見て、ストアイネーブルが“１”のときに、保持しているストアデータをキャッシュにストアする。非条件付きストア命令であれば、ストアイネーブル信号に関わらず、保持しているストアデータをキャッシュにストアする。
【００５１】
また、図１２のストアバッファ９５´では、ストアコミットを受け取ったポートのリクエストがＳＩＭＤであるとき、条件付きストア命令であれば、それぞれの要素のストアイネーブル信号の有無を見て、ストアイネーブルが“１”の要素のストアデータをキャッシュにストアする。非条件付きストア命令であれば、それぞれの要素のストアイネーブル信号に関わらず、保持しているストアデータをキャッシュにストアする。
【００５２】
次にストア命令処理における、ストアデータのバイパス処理について説明する。
非条件付きストアでは、ストア命令と同じアドレスに対する後続のロードリクエストを受け取ったときに、ストアバッファでアドレスの比較をする。アドレスが一致しない場合は、１次データキャッシュからデータを読み出してレジスタ部へ応答し、アドレスが一致した場合はストアデータをキャッシュ部に書き込む前にストアデータを保持するストアデータバッファからバイパスして、ロードデータをレジスタ部へ応答する。
【００５３】
しかし、条件付きストアに関しては、そのデータをキャッシュに書き込むか否かがストアイネーブルビットによって異なる。ロードアドレスが条件付ストアと一致した場合に、ストアデータ及びストアイネーブル信号がストアデータバッファにセットされるまで待ち、これらがセットされた後、ストアイネーブルが“１”のときには、ストアデータのバイパスを行い、ストアイネーブルが“０”のときは、ストアデータのバイパスを行わず、キャッシュ部からデータを読み出してレジスタ部へ応答する。
【００５４】
図１４にストアデータのバイパス処理についてフローを示す。
まず、Ｓ１で、ストアバッファのメモリアドレスを後続のロードリクエストアドレスを比較し、一致する場合にはＳ２に進む。不一致の場合には、Ｓ５に進み、１次データキャッシュのデータをロードデータとして応答する。
【００５５】
Ｓ２で、ストアバッファのオペコードが条件付きストア命令か否かを判断する。オペコードが条件付きストア命令であれば（Ｙｅｓ）Ｓ３に進み、オペコードが非条件付きストア命令であれば（Ｎｏ）Ｓ４に進み、ストアバッファのデータをロードデータとしてバイパスする。Ｓ２からＳ３に進んだ場合、ストアバッファのストアイネーブルが“１”か否かを判断し、１であれば（Ｙｅｓ）Ｓ４に進みストアバッファのデータをロードデータとしてバイパスする。ストアイネーブルが“１”でなければ（Ｎｏ）、Ｓ５に進みバイパスせずに１次データキャッシュのデータをロードデータとして応答する。
【００５６】
ＳＩＭＤ条件付きストアに関しては、ＳＩＭＤ要素ごとにそのデータをキャッシュに書き込むか否かストアイネーブルによって異なる。そのため、後続のロードリクエストとＳＩＭＤ条件付ストアのアドレスとが一致した場合に、ストアデータ及びストアイネーブル
信号がストアデータバッファにセットされるまで待ち、これらがセットされた後、該当する要素に対してストアイネーブルが“１”のときには、ストアデータのバイパスを行い、ストアイネーブルが“０”のときは、ストアデータのバイパスを行わず、キャッシュ部からデータを読み出してレジスタ部へ応答する。ＳＩＭＤ条件付きストアのフローは、図１４と同様であるため、ここでは省略する。
【００５７】
以上本発明の実施例について説明したが、上述した条件付き浮動小数点ストア命令、浮動小数点比較演算命令、浮動小数点論理演算命令、それぞれのＳＩＭＤ命令に対しては、倍精度浮動小数点および単精度浮動小数点の両方に対して定義して処理を行うものとする。
【００５８】
以上、本発明の実施例について詳細に説明したが、上述のプロセサは条件データを浮動小数点レジスタそのものに格納し、該条件データに基づいて、ストアデータをキャッシュにストアするか否かを判定する条件付き浮動小数点ストア命令を演算部が実行するところにある。つまり、条件付き浮動小数点ストア命令に関して、条件データを格納するための専用のマスクレジスタを設けずに、浮動小数点レジスタに条件データを格納するように命令を定義した。これにより、通常の浮動小数点演算の際に用いるリードポートで条件データの読み出しを行うこと、依存関係の検出も浮動小数点レジスタの依存関係検出回路を用いることが可能になり、ハードウェアの観点から見て低コストで条件付き浮動小数点ストア命令の実装が可能である。また条件データを浮動小数点レジスタに格納するので、条件データの数もコンディションコードの数の制限を受けずにコンパイラのより一層の最適化が可能になる。また浮動小数点レジスタのＳＩＭＤ拡張をすることで、条件付き浮動小数点ストア命令のＳＩＭＤ化も容易に行うことが可能である。
【００５９】
条件付きストア命令については、プログラムによって、固定小数点データの条件によって固定小数点データや浮動小数点データをストアするか否かを判断するもの、あるいは、浮動小数点データの条件によって固定小数点データをストアするか否かを判断するものもある。しかしながら、科学技術計算分野で用いられるスーパーコンピュータなどでは浮動小数点データを扱うものが多く、上述した本発明によってハードウェアの回路量とコンパイラによる最適化の観点で大きい効果が得られると考える。
【図面の簡単な説明】
【００６０】
【図１】条件付き浮動小数点ストア命令の際のプロセサの動作を説明する図である。
【図２】ＳＩＭＤ条件付き浮動小数点ストア命令の際のプロセサの動作を説明する図である。
【図３】プロセサの構成（概略）を示す図である。
【図４】条件付き浮動小数点ストア命令フォーマットを示す図である。
【図５】浮動小数点比較演算命令および浮動小数点ビット論理演算命令のフォーマットを示す図である。
【図６】浮動小数点比較演算命令の処理を説明する図である。
【図７】浮動小数点ビット論理演算命令の処理を説明する図である。
【図８】非条件付き浮動小数点ストア命令フォーマットを示す図である。
【図９】ストア処理を説明する図である。
【図１０】条件付き浮動小数点ストア命令の即値フィールドの処理を説明する図である。
【図１１】ストアイネーブル信号の生成回路を示す図である。
【図１２】ＳＩＭＤストア処理を説明する図である。
【図１３】浮動小数点データフォーマットを示す図である。
【図１４】ストアデータのバイパス処理のフローを示す図である。
【図１５】ソフトウェアパイプライニングの概念図を示す図である。
【図１６】条件分岐命令があるときのソフトウェアパイプライニングの概念図を示す図である。
【図１７】条件分岐命令と条件付き命令を説明する図である。
【図１８】条件付き命令があるときのソフトウェアパイプライニングの概念図を示す図である。
【図１９】条件付きムーブ命令で条件付きストア命令の代用したときのフローを示す図である。
【図２０】マルチコアで並列処理をする際に、条件付きムーブ命令で条件付きストア命令の代用するときに発生する問題点を説明する図である。
【図２１】条件付きストア命令を説明する図である。
【図２２】条件データが最大２つのときの条件付き命令によるソフトウェアパイプライニング概念図を示す図である。
【図２３】浮動小数点レジスタと演算器の構成を示す図である。
【図２４】ＳＩＭＤ浮動小数点レジスタと演算器の構成を示す図である。
【符号の説明】
【００６１】
１１      浮動小数点レジスタ
１２      命令制御部
１３      演算器
１４      ストアデータレジスタ
１５      ストアイネーブルレジスタ
１６      キャッシュ部
３０      浮動小数点レジスタ
３１      固定小数点レジスタ
３２      １次データキャッシュ
３３      １次命令キャッシュ
３４      ２次キャッシュ／メモリ部
３５      命令デコード部
３６      演算処理部
３７      アドレス生成部
３８      コミット制御部
３９      ロード処理部
４０      ストア処理部
６１      浮動小数点レジスタ
６２      命令制御部
６３      浮動小数点比較演算器
６４      演算結果レジスタ
７１      浮動小数点レジスタ
７２      命令制御部
７３      浮動小数点ビット論理演算器
７４      演算結果レジスタ
９１      浮動小数点レジスタ
９２      浮動小数点演算パイプ
９３      命令デコード部
９４      メモリアドレス生成パイプ
９５      ストアバッファ
９６      コミット制御部
９７      １次データキャッシュ
９８      キャッシュ部
１１０      オペコード解読回路
１１１      ＡＮＤ回路
１１２      ＡＮＤ回路
１１３      ＯＲ回路
【図１】
0005326314.tif 000002
【図２】
0005326314.tif 000003
【図３】
0005326314.tif 000004
【図４】
0005326314.tif 000005
【図５】
0005326314.tif 000006
【図６】
0005326314.tif 000007
【図７】
0005326314.tif 000008
【図８】
0005326314.tif 000009
【図９】
0005326314.tif 000010
【図１０】
0005326314.tif 000011
【図１１】
0005326314.tif 000012
【図１２】
0005326314.tif 000013
【図１３】
0005326314.tif 000014
【図１４】
0005326314.tif 000015
【図１５】
0005326314.tif 000016
【図１６】
0005326314.tif 000017
【図１７】
0005326314.tif 000018
【図１８】
0005326314.tif 000019
【図１９】
0005326314.tif 000020
【図２０】
0005326314.tif 000021
【図２１】
0005326314.tif 000022
【図２２】
0005326314.tif 000023
【図２３】
0005326314.tif 000024
【図２４】
0005326314.tif 000025