(57)【特許請求の範囲】
【請求項１】
浮動小数点計算ユニット、浮動小数点レジスタ、および浮動小数点ステータスレジスタを有するコンピュータを動作させる方法であって、
前記浮動小数点ステータスレジスタ内に、それぞれがフラグ情報および制御情報を含むメイン・ステータスフィールドおよび少なくとも１つの代替ステータスフィールドを設けるステップと、
浮動小数点計算ユニット内で第１の演算を実施し、該第１の演算を前記浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させるステップと、
浮動小数点計算ユニット内で、前記第１の演算と共に第２の演算を実施し、該第２の演算を前記浮動小数点ステータスレジスタ内の代替ステータスフィールドと関連させるステップと、を含み、前記第１および第２の演算は、前記メイン・ステータスフィールドおよび代替ステータスフィールド内に別個のフラグおよび制御情報を含み、前記第１の演算は、投機的でない演算を含み、前記第２の演算は、投機的な演算を含み、
前記投機的な演算が確約されるとき、前記代替ステータスフィールド内のフラグ情報を検査するステップを含む、コンピュータ動作方法。
【請求項２】
前記代替ステータスフィールド内のフラグ情報を検査するステップが例外を示さない場合、第３の演算の実行に進むステップをさらに含む、請求項１に記載のコンピュータ動作方法。
【請求項３】
前記フラグ情報を検査するステップは、前記代替ステータスフィールド内のフラグ情報を前記メイン・ステータスフィールド内のフラグ情報と比較するステップと、前記代替ステータスフィールド内のフラグ情報が、前記メイン・ステータスフィールド内のフラグ情報と異なるとき、回復演算に分岐するステップを含む、請求項１に記載のコンピュータ動作方法。
【請求項４】
前記フラグ情報を検査するステップは、前記代替ステータスフィールド内のフラグ情報を、浮動小数点ステータスレジスタ内のトラップ許可ビットと比較するステップと、前記代替ステータスフィールド内のフラグ情報が前記浮動小数点ステータスレジスタ内の許可されるトラップに対応する場合、回復演算に分岐するステップを含む、請求項１に記載のコンピュータ動作方法。
【請求項５】
前記回復演算は、投機的な演算を再実行するステップと、投機的な演算の再実行を前記浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させるステップを含む、請求項３に記載のコンピュータ動作方法。
【請求項６】
前記投機的な演算を実施するステップは、第１および第２の投機的な演算を実施し、該第１および第２の投機的な演算を前記浮動小数点ステータスレジスタ内の単一の代替ステータスフィールドと関連させることを含む、請求項１に記載のコンピュータ動作方法。
【請求項７】
さらに、前記第１および第２の投機的な演算の１つが確約されるとき、前記代替ステータスフィールド内のフラグ情報を検査するステップを含む、請求項６に記載のコンピュータ動作方法。
【請求項８】
前記フラグ情報を検査するステップは、前記代替ステータスフィールド内のフラグ情報を前記メイン・ステータスフィールド内のフラグ情報と比較するステップと、前記代替ステータスフィールド内のフラグ情報が前記メイン・ステータスフィールド内のフラグ情報と異なるとき、回復演算に分岐するステップを含む、請求項７に記載のコンピュータ動作方法。
【請求項９】
前記フラグ情報を検査するステップは、前記代替ステータスフィールド内のフラグ情報を、前記浮動小数点ステータスレジスタ内のトラップ許可ビットと比較するステップと、代替ステータスフィールド内のフラグ情報が前記浮動小数点ステータスレジスタ内の許可されるトラップに対応するとき、回復演算に分岐するステップを含む、請求項７に記載のコンピュータ動作方法。
【請求項１０】
前記回復演算は、確約される投機的な演算を再実行するステップと、確約される投機的な演算の再実行を前記浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させるステップと、前記代替ステータスフィールド内のフラグ情報をクリアするステップと、前記浮動小数点ステータスレジスタ内の代替ステータスフィールドで確約されていない投機的な演算を再実行するステップを含む、請求項８に記載のコンピュータ動作方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、コンピュータ内の浮動小数点ユニットのアーキテクチャに関し、特に、性能の向上のため、２つまたはそれ以上のステータスフィールドを利用する浮動小数点ユニットに関する。
【０００２】
【従来の技術】
一般に、コンピュータ内で浮動算術演算を実施するための浮動小数点ユニットは、浮動小数点計算ユニットと、オペランド、中間結果および同類のものを保持するための１組の浮動小数点レジスタと、浮動小数点ステータスレジスタを含む。浮動小数点計算ユニットは、一般にパイプライン化されており、異なる浮動小数点計算の異なる演算を同時に実施することができる。浮動小数点ステータスレジスタは、精度制御および丸め制御のような浮動小数点計算を制御する制御情報を含む。さらに、浮動小数点ステータスレジスタは、浮動小数点計算の間に発生した例外を記録するオーバフローおよびゼロ除算フラグのようなフラグ情報を含む。
【０００３】
浮動小数点ユニットは、典型的に、ANSI/IEEE浮動小数点標準第754-1985号に準拠するよう構成される。この標準は、浮動小数点データタイプ、多様な算術演算およびその他の演算、並びに例外の処理を指定している。すべての点でIEEE浮動小数点標準を満たし、かつ、先行技術の欠点を克服し性能を向上させる追加の機能をもつ浮動小数点ユニットを提供することが望ましい。
【０００４】
従来の浮動小数点ステータスレジスタは、上述したように制御情報およびフラグ情報を含むハードウェア・レジスタである。制御情報は、ソフトウェアによって設定され、フラグ情報は、浮動小数点計算の実行に応じて設定される。従来、制御情報は、浮動小数点ステータスレジスタの内容を汎用レジスタにコピーし、汎用レジスタの内容を変更し、汎用レジスタの内容を浮動小数点ステータスレジスタに戻すことによって変更される。浮動小数点ステータスレジスタ内のフラグ情報も、同様の方法でクリアすることができる。従って、制御情報を更新しフラグ情報をクリアする演算は、比較的時間がかかる。その上、浮動小数点ステータスレジスタ内の制御情報が更新されるとき、パイプライン化された浮動小数点計算ユニットをフラッシュする必要があり、これにより部分的に完了された計算をアボートし性能を低下させことになる。これらの欠点のため、浮動小数点ステータスレジスタの頻繁な更新は一般に回避される。
【０００５】
投機的(推測的)な演算の実行は、プロセッサ性能を向上させるための既知の技法である。プロセッサを最大限に利用するため、実行に必要なオペランドが利用可能であれば、プログラムの中の後に現れる命令を前の命令と並行に実行するようにスケジュールすることができる。通常、プログラム内には分岐命令があるので、命令が実行を要求するかどうかを前もって判断できないことがある。しかし、プロセッサの資源が使用されていない状態であれば、たとえそれらの命令の実行が後で不要であると判断されるとしても、命令を投機的に実行することによってプロセッサの性能を改善することができる。投機的に実行された命令の実行をプログラムが最終的に必要とする場合、性能の改善が得られる。投機的な命令の実行が必要とされない場合、結果は捨てられる。
【０００６】
浮動小数点ステータスレジスタは、フラグビット形式のフラグ情報、つまり「フラグ」を含む。フラグは、浮動小数点計算の実行の間に生じる例外を記録する。さらに例外は、割込みを生成することがある。投機的な実行の場合、投機的な実行の結果は後で捨てられることがあるので、例外を直ちに報告することは望ましくない。それにもかわらず、一般に、浮動小数点ユニットは、投機的な演算に関するフラグを投機的でない演算と同様に処理する。
【０００７】
フラグ情報内に記録される例外の１つとして、計算結果の中の指数(exponent)が指定されたレンジを越えるオーバフロー例外がある。レンジは、浮動小数点数を記憶するために使用されるメモリ形式によって、または結果のユーザによって設定することができる。しかし、浮動小数点ユニットは、オーバフロー例外の報告を生じさせるような、レンジを越える浮動小数点数を処理することができる。これは、オーバフロー例外の不必要な報告という問題を生じる。例えば、浮動小数点計算は典型的にいくつかの演算を伴う。ある計算の中で、計算が続行することが許される場合、最終の結果がオーバフロー例外を生じさせなくても、中間演算の結果がオーバフロー例外を生じさせることがある。実行を遅らせたり終わらせることがあるので、例外の不必要な報告は避けることが望ましい。
【０００８】
浮動小数点計算中に浮動数を処理する別の側面は、「ビッグ・エンディアン(big endian)」および「リトル・エンディアン(little endian)」形式に関連する。ビッグ・エンディアン形式で、データワードは、その最上位バイトがメモリワードの最上位バイトに対応するようにメモリに記憶される。リトル・エンディアン形式では、データワードは、その最下位バイトがメモリワードの最上位バイトに対応するようにメモリに記憶される。プロセッサが両方の形式を効率的に処理することが要求されうる。
【０００９】
【発明が解決しようとする課題】
上記の欠点の１つまたは複数を軽減し、または排除する浮動小数点アーキテクチャを提供することが望ましい。
【００１０】
【課題を解決するための手段】
この発明の第１の側面によれば、浮動小数点計算ユニット、浮動小数点レジスタ、および浮動小数点ステータスレジスタを有するコンピュータを動作させる方法が提供される。浮動小数点ステータスレジスタは、メイン・ステータスフィールドおよび少なくとも１つの代替ステータスフィールドを含む。それぞれのステータスフィールドは、フラグ情報および制御情報を含む。第１の演算が、浮動小数点計算ユニット内で実施され、該第１の演算は、浮動小数点ステータスレジスタ内のメイン・ステータスフィールドに関連する。第２の演算が、浮動小数点計算ユニット内で実施され、該第２の演算は、浮動小数点ステータスレジスタ内の代替ステータスフィールドと関連する。従って、第１および第２の演算は、メインおよび代替ステータスフィールド内にそれぞれ別個のフラグおよび制御情報をもつ。第１および第２の演算は、第１および第２の演算を指定する浮動小数点命令の中の制御ビットに応じて、それぞれメインおよび代替ステータスフィールドと関連することができる。
【００１１】
第１の演算は、投機的でない演算を含むことができ、第２の演算は、投機的な演算を含むことができる。投機的な演算が確約されるとき、投機的な演算に関連する代替ステータスフィールド内のフラグ情報が検査される。代替ステータスフィールド内のフラグ情報が例外を示さない場合、第３の演算の実行に進むことができる。
【００１２】
フラグ情報は、代替ステータスフィールド内のフラグ情報を、メイン・ステータスフィールド内のフラグ情報および浮動小数点ステータスレジスタ内のトラップ許可(イネーブル)ビットと比較することによって検査することができる。回復演算への分岐は、代替ステータスフィールド内のフラグ情報がメイン・ステータスフィールド内のフラグ情報と異なるとき、または代替ステータスフィールド内のフラグ情報が浮動小数点ステータスレジスタ内の許可されるトラップに対応するときに行われる。回復演算は、投機的な演算を再実行し、投機的な演算の再実行を浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させることを含む。
【００１３】
２つ以上の投機的な演算を、浮動小数点ステータスレジスタ内の１つの代替ステータスフィールドと関連させることができる。投機的な演算の１つが確約されるとき、代替ステータスフィールド内のフラグ情報が検査される。代替ステータスフィールド内のフラグ情報が例外を示さなければ、第３の演算の実行に進むことができる。
【００１４】
代替ステータスフィールド内のフラグ情報は、代替ステータスフィールド内のフラグ情報をメイン・ステータスフィールド内のフラグ情報および浮動小数点ステータスレジスタ内のトラップ許可ビットと比較することによって検査することができる。回復演算への分岐は、代替ステータスフィールド内のフラグ情報がメイン・ステータスフィールド内のフラグ情報と異なるとき、または代替ステータスフィールド内のフラグ情報が浮動小数点ステータスレジスタ内の許可されるトラップに対応するときに生じる。
【００１５】
回復演算は、確約される投機的な演算を再実行するステップと、確約される投機的な演算の再実行を浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させるステップと、代替ステータスフィールド内のフラグ情報をクリアするステップと、確約されていない投機的な演算を再実行するステップと、確約されていない投機的な演算の再実行を浮動小数点ステータスレジスタ内の代替ステータスフィールドと関連させるステップを含む。
【００１６】
浮動小数点ステータスレジスタは、複数の代替ステータスフィールドを含むことができる。代替ステータスフィールドの少なくとも１つは回転することができ、従って回転する代替ステータスフィールドは、異なる演算サイクルに異なる演算と関連する。
【００１７】
それぞれの代替ステータスフィールドは、投機的な演算の実行中の例外に起因する割込みを防ぐためのトラップ禁止(ディスエーブル)ビットを含むことができる。代替ステータスフィールドに対応する演算が投機的な演算であるとき、トラップ禁止ビットが設定されうる。トラップ禁止ビットが設定されているとき、例外は代替ステータスフィールドのフラグには記録されるが、割込みを生じない。
【００１８】
この発明の別の側面によると、浮動小数点計算を実施する装置が提供される。この装置は、浮動小数点計算ユニット、浮動小数点レジスタ、および浮動小数点ステータスレジスタをもつコンピュータを備える。浮動小数点ステータスレジスタは、メイン・ステータスフィールドおよび少なくとも１つの代替ステータスフィールドを含む。メイン・ステータスフィールドおよび代替ステータスフィールドはそれぞれ、浮動小数点演算を制御するための制御情報、および、浮動小数点演算の間に生じた１つまたは複数の例外を記録するためのフラグ情報を含む。さらにこの装置は、浮動小数点計算ユニット内で第１の演算を実施し、該第１の演算を浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させる手段と、浮動小数点計算ユニット内で第２の演算を実施し、該第２の演算を浮動小数点ステータスレジスタ内の代替ステータスフィールドと関連させる手段を備える。第１および第２の演算は、メインおよび代替ステータスフィールド内にそれぞれ別個の制御およびフラグ情報を有する。
【００１９】
【発明の実施の形態】
この発明をより良く理解するため、添付の図面が参照されこの中で取り入れられる。
【００２０】
図１に、浮動小数点ユニットおよび関連するプロセッサ要素の簡略ブロック図を示す。図１に示される要素は、中央処理装置(CPU)の一部を構成する。命令シーケンサ10は、実行されているプログラムの命令を処理し復号化する。命令は、メモリ12内のオペランドのアドレスを含む。実行されている命令のタイプに依存して、メモリ12からのオペランドは、汎用レジスタ(GR)14または浮動小数点レジスタ(FR)16に供給される。プロセッサは、典型的に、多くの浮動小数点レジスタを含む。浮動小数点オペランドは、浮動小数点計算を実施するため、浮動小数点レジスタ16から浮動小数点計算ユニット20および22に供給される。浮動小数点計算の結果は、浮動小数点レジスタ16に返される。プロセッサは、１つまたは複数の浮動小数点計算ユニットを含むことができる。浮動小数点ステータスレジスタ24は、浮動小数点計算を制御する制御情報、および浮動小数点計算の間に生じた例外を記録するフラグ情報を含む。浮動小数点レジスタ16、浮動小数点計算ユニット20、22、および浮動小数点ステータスレジスタ24は、プロセッサの浮動小数点ユニットを構成する。
【００２１】
図２に、浮動小数点ステータスレジスタ24の適当な形式の一例を示す。64ビット・アーキテクチャを示している。浮動小数点ステータスレジスタ24は、トラップ・フィールド40、メイン・ステータスフィールド42(sf0)、および少なくとも１つの代替ステータスフィールドを含む。図2の例で、浮動小数点ステータスレジスタ24は、トラップ・フィールド40、メイン・ステータスフィールド42(sf0)、代替ステータスフィールド44(sf1)、46(sf2)および48(sf3)、および予約ビット50を含む。以下に述べるように、メイン・ステータスフィールド42および代替ステータスフィールド44、46および48は、異なる命令または命令グループに関連することができ、浮動小数点演算の制御および監視を向上させる。
【００２２】
一例として、トラップ・フィールド40は、ビット位置0に無効な演算の浮動小数点例外フォールトを、ビット位置1にデノーマル(denormal)/非正規(unnormal)オペランドの浮動小数点例外フォールトを、ビット位置2にゼロ除算浮動小数点例外フォールトを、ビット位置3にオーバフロー浮動小数点例外トラップを、ビット位置4にアンダーフロー浮動小数点例外トラップを、ビット位置5に不正確な浮動小数点例外トラップを含むことができる。それぞれのケースで、それぞれのビットが設定されているとき、フォールトまたはトラップは禁止(ディスエーブル)される。
【００２３】
図３に、それぞれのステータスフィールドsf0、sf1、sf2およびsf3の適当な形式の一例を示す。それぞれのステータスフィールドは、浮動小数点計算を制御するための制御情報、および浮動小数点計算の間に生じた状況を示すためのフラグ情報を含む。
【００２４】
図４に、適当なビット割当ての例を示す。制御ビットは、ゼロにフラッシュ・モード(ビット0)、最も広いレンジ指数(ビット1)、精度制御(ビット3:2)、丸め制御(ビット5:4)、およびトラップ禁止(ビット6)を含む。フラグビットは、無効な演算(ビット7)、デノーマル/非正規オペランド(ビット8)、ゼロ除算(ビット9)、オーバフロー(ビット10)、アンダーフロー(ビット11)および不正確(ビット12)を含む。
【００２５】
代替ステータスフィールドの数、メインおよび代替ステータスフィールド内のビット数、ならびにステータスフィールド内のビット割当ては、この発明の範囲内で変更することができることが分かるであろう。さらに、ステータスレジスタは、より多くのまたはより少ない予約ビットを含むことができ、予約ビットは、任意の所望の方法で分布させることができる。
【００２６】
この発明の機能に従って、浮動小数点命令セットは、浮動小数点ステータスレジスタの指定されたフィールドを更新するための命令を含む。それぞれのステータスフィールド内の制御情報に関して、fsetc.sfxで示される浮動小数点制御設定命令を使用して、ステータスフィールドx(sfx)内の制御ビットを更新する。ここで、xはステータスフィールドの番号を表す。より具体的に述べると、指定されたステータスフィールドの制御ビットは、メイン・ステータスフィールドsf0の制御ビットを命令内のマスクフィールドと論理積演算し、メイン・ステータスフィールドsf0の制御ビットを命令内の第２マスクフィールドと論理和演算することによって、初期化することができる。こうして、制御フィールド内の指定されたビットが設定され、またはクリアされ、メイン・ステータスフィールドsf0からコピーを作ることができる。
【００２７】
さらに、浮動小数点命令セットは、fclrf.sfxで示される浮動小数点フラグクリア命令を含む。フラグクリア命令は、ステータスフィールドx内のフラグをクリアする。上述したように、ステータスフィールド内のフラグビットは、浮動小数点計算の間に生じる例外の結果として設定することができる。フラグビットは、それらがクリアされるまで設定されたままであることを意味する「スティッキービット」とみなされる。浮動小数点制御設定命令および浮動小数点フラグクリア命令は、浮動小数点ステータスレジスタの指定されたステータスフィールド内のビットが、他のステータスフィールドまたは同じステータスフィールドの他のサブセットに影響を及ぼすことなく設定されまたはクリアされることを可能にする。こうして、読み取り-変更-書き込み演算を必要とすることなく、また、浮動小数点パイプラインを中止したりフラッシュすることなく、浮動小数点ステータスレジスタを更新することができる。
【００２８】
浮動小数点制御設定命令および浮動小数点フラグクリア命令は、浮動小数点ステータスレジスタの指定されたサブフィールドが設定され、またはクリアされることを可能にする命令として記述されうる。上で述べたように、指定されたステータスフィールドの制御ビットを設定し、またはクリアすることができ、指定されたステータスフィールドのフラグビットをクリアすることができる。より一般的には、指定されたステータスフィールドの１つもしくは複数のビット、または指定されたステータスフィールドのサブフィールドを設定し、またはクリアすることができる。以下に述べるように、このように浮動小数点ステータスレジスタを更新する能力は、性能の向上をもたらす。
【００２９】
図5および図6に関して、複数の浮動小数点ステータスフィールドの動作および利用を示す例を述べる。図5は、投機的な実行を利用しないプログラムセグメントの例を示す。図6および図7は、性能を向上させるため投機的な実行を利用する図5のプログラムセグメントの異なるバージョンを示す。図5ないし図7は、プログラムセグメントの簡略図であり、実際のプログラムセグメントは、コンピュータ制御のための追加の命令を含むことができることが分かるであろう。
【００３０】
図5で、分岐命令102が浮動小数点命令100の後に続く。分岐命令102の結果に依存して、プログラムセグメントは命令106および108に進むことができ、または命令104に分岐することができる。
【００３１】
図5のプログラムセグメントを実行する際、プロセッサの性能を向上させるため投機的な実行を利用することが望ましい。命令が投機的に実行されるとき、命令は、それらがプログラム・シーケンス内に現れるよりも早く実行されるので、結果は、プログラム・シーケンス内の適切な箇所で利用できる。投機的な実行は、プロセッサ資源が利用可能であって他で使用されていない期間に有利である。また投機的な実行は、命令が実行に複数サイクルを必要とし、通常に実行される場合にプログラム実行の遅延をもたらすところでも有利である。１つの例はメモリアクセス命令である。投機的に実行される命令は、一般に分岐命令の後に続くので、それらは、プログラムの実行を完了するために最終的に要求されないことがある。例えば、命令106が投機的に実行され、分岐命令102が命令104に分岐することになる場合、命令106は要求されない。しかし、分岐命令102が、命令106を実行することになる場合、命令106の投機的な実行によって性能が高められる。図5で、命令100、104、106および108はそれぞれ、浮動小数点ステータスレジスタ内のメイン・ステータスフィールドsf0を利用する。
【００３２】
ここで図6を参照して、投機的な実行を利用するため、図5のプログラムセグメントが変更されている。図5および図6の中の同じ命令は同じ参照数字をもつ。図6に示すように、図5の命令104および106にそれぞれ対応する命令104Aおよび106Aは、分岐命令102の前に実行される。命令104Aおよび106Aは、分岐命令102の直前に実行されるように示されている。しかし、命令104Aおよび106Aは、これらの命令の実行に必要なデータが利用可能である分岐命令102の前のどの時間に実行されてもよいことが分かるであろう。なお、１つの命令または命令シーケンスを投機的に実行してもよい。
【００３３】
投機的でない命令である命令100は、メイン・ステータスフィールドsf0に割り当てられる。投機的な命令104Aおよび106Aは、浮動小数点ステータスレジスタ内の代替ステータスフィールドsf2およびsf3にそれぞれ割り当てられる。代替ステータスフィールドsf2およびsf3内のフラグビットが命令104Aおよび106Aの実行の前にクリアされることを保証するため、fclrf.sf2およびfclrf.sf3で示されるフラグクリア命令110を使用して、代替ステータスフィールドsf2およびsf3内のフラグビットをクリアする。
【００３４】
それぞれの浮動小数点命令は、その命令によって使用されおよびそれに関連するステータスフィールドを指定するフィールドを含むことが好ましい。浮動小数点ステータスレジスタが、メイン・ステータスフィールドおよび３つの代替ステータスフィールドを含む場合、浮動小数点ポイント命令内の２ビット・フィールドが、ステータスフィールドを指定する。
【００３５】
図5および図6を参照して、図5の命令104が、図6のフラグ検査命令120と置き換えられていることが分かるであろう。さらに、図5の命令106は、図6のフラグ検査命令122と置き換えられている。fchkf.sf2で示されるフラグ検査命令120は、代替ステータスフィールドsf2内のフラグビットを検査する。同様に、fchkf.sf3で示されるフラグ検査命令122は、代替ステータスフィールドsf3内のフラグビットを検査する。
【００３６】
ステータスフィールド内に設定されるフラグビットはどれも、関連する命令または命令シーケンスの実行中に生じた例外を示す。例外は、フラグビット内に記録され、プログラム割込みを生じさせる潜在性をもっている。しかし、投機的な実行の場合、投機的な命令が実際に必要であると判断されるまで、メイン・ステータスフィールド内のフラグビットの設定またはプログラム割込みは行われるべきではない。投機的に実行された命令が捨てられる場合、割込みは、プロセッサ演算に不必要な遅延を与え、不適当にプログラムに割り込むことになる。以下に述べるように、代替ステータスフィールドは、投機的な実行の間の例外を記録し、投機的に実行された命令が確約される時間になるまで従来の例外の報告を遅らせる機構を提供する。
【００３７】
図2ないし図4に図示し上述した浮動小数点ステータスレジスタの構成は、投機的な実行の間に生じる割込みが遅延され、または完全に回避されることを可能にする。再び図3および図4を参照して、制御ビットは、トラップ禁止(trap disable:TD)ビットを含む。TDビットが、１つまたは複数の代替ステータスフィールド内に設定されているとき、そのステータスフィールドに関連する命令の実行の間の例外は、割込みを生じさせない。投機的に実行された命令が必要とされ、または確約されるとき、fchkf.sfxで示される浮動小数点フラグ検査命令が、代替ステータスフィールドx内のフラグビットを検査する。より具体的には、浮動小数点フラグ検査命令は、代替ステータスフィールドx内のフラグビットを、メイン・ステータスフィールドsf0内のフラグビットおよび浮動小数点ステータスレジスタ内のトラップ許可(イネーブル)ビットと比較する。回復演算への分岐は、1)代替ステータスフィールドsfxに設定されているフラグビットが、浮動小数点ステータスレジスタ内の許可されるトラップに対応する場合、または、2)代替ステータスフィールドsfxに設定されているフラグビットが、メイン・ステータスフィールドsf0内に設定されていない場合に生じる。
【００３８】
再び図6を参照して、命令104Aおよび106Aの投機的な実行の間、トラップ禁止ビットが、代替ステータスフィールドsf2およびsf3に設定される。代替ステータスフィールドsf2およびsf3内のフラグビットは、命令104Aおよび106Aの実行の間に生じる例外の結果として設定することができる。しかし、TDビットが、プログラム割込みを防ぐ。プログラムが、命令120または命令122に進むとき、浮動小数点フラグ検査命令が実行される。詳しく述べると、分岐命令102は、投機的に実行された命令106Aが確約されることを要求すると仮定する。プログラムは、分岐命令102からフラグ検査命令122に進む。命令122は、代替ステータスフィールドsf3内のフラグビットを、メイン・ステータスフィールドsf0内のフラグビットおよび浮動小数点ステータスレジスタ内のトラップ許可ビットと比較する。回復演算126への分岐は、1)代替ステータスフィールドsf3に設定されているフラグビットが、浮動小数点ステータスレジスタ内の許可されるトラップに対応する場合、または、2)代替ステータスフィールドsf3に設定されているフラグビットが、メイン・ステータスフィールドsf0に設定されていない場合、に生じる。これらの条件のいずれも満たされない場合、回復演算126は不要であり、プログラムは直接命令108へ進む。
【００３９】
回復演算126は、投機的に実行された１つまたは複数の命令、この例では命令106Aの再実行を伴う。再実行の間、再実行される命令は、メイン・ステータスフィールドsf0に関連する。１つまたは複数のフラグビットが、メイン・ステータスフィールドsf0に設定されうる。対応するトラップが許可される場合、割込みを行うことができる。こうして、投機的に実行された命令106Aが確約されるまで、例外の報告は遅らされる。分岐命令102が命令120の実行を必要とする場合に、命令106Aに関連する例外の報告が回避される。
【００４０】
分岐命令102が、投機的に実行された命令106Aではなく命令104Aが確約されることを要求する場合、プログラムは、上述したのと同様にフラグ検査命令120に進む。命令120は、代替ステータスフィールドsf2内のフラグビットを、メイン・ステータスフィールドsf0内のフラグビットおよび浮動小数点ステータスレジスタ内のトラップ許可ビットと比較する。回復演算124への分岐は、1)代替ステータスフィールドsf2に設定されているフラグビットが、浮動小数点ステータスレジスタ内の許可されるトラップに対応する場合、または、2)代替ステータスフィールドsf2に設定されているフラグビットが、メイン・ステータスフィールドsf0に設定されていない場合、に生じる。これらの条件のいずれも満たされない場合、回復演算124は不要であり、プログラムは命令108へジャンプする。
【００４１】
回復演算124は、投機的に実行された１つまたは複数の命令、この例では命令104Aの再実行を含む。再実行の間、再実行される命令は、メイン・ステータスフィールドsf0に関連する。１つまたは複数のフラグビットが、メイン・ステータスフィールドsf0に設定されうる。対応するトラップが許可される場合、割込みを行うことができる。
【００４２】
TDビットは、メイン・ステータスフィールドsf0内では使用されず、投機的でない命令は、典型的にメイン・ステータスフィールドsf0に割り当てられる。メイン・ステータスフィールドsf0に割り当てられた命令が実行されるとき、例外は直ちに報告される。
【００４３】
いくつかの例で、実行されている投機的な命令または命令シーケンスの数が、浮動小数点ステータスレジスタ内で利用可能な代替ステータスフィールドの数を越えることがある。その場合、２以上の投機的に実行される命令または命令シーケンスは、浮動小数点ステータスレジスタ内の１つの代替ステータスフィールドによって共有することができる。この状況で、１つまたは複数のフラグビットが、共有される代替ステータスフィールド内に設定されるとき、代替ステータスフィールドを共有する命令のうちのどれが１つまたは複数のフラグビットを設定させたかに関して曖昧さがある。この困難を克服するための技法を図7を参照して説明する。
【００４４】
図7で、投機的な実行を利用するため、図5のプログラムセグメントが再び変更されている。図5および図7の中の同じ命令は、同じ参照数字をもつ。図7に示すように、図5の命令104および106にそれぞれ対応する命令104Bおよび106Bは、分岐命令102の前に実行される。
【００４５】
投機的でない命令である命令100は、メイン・ステータスフィールドsf0に割り当てられる。投機的な命令104Bおよび106Bは、浮動小数点ステータスレジスタ内の代替ステータスフィールドsf2に割り当てられ、それを共有する。命令104Bおよび106Bの実行前に代替ステータスフィールドsf2内のフラグビットがクリアされることを保証するため、fclrf.sf2で示されるフラグクリア命令130を使用して、代替ステータスフィールドsf2内のフラグビットをクリアする。
【００４６】
さらに図5および図7を参照して、図5の命令104は、図7のfchkf.sf2で示されるフラグ検査命令132と置き換えられる。さらに、図5の命令106は、図7のfchkf.sf2で示されるフラグ検査命令134と置き換えられる。フラグ検査命令132および134はそれぞれ、代替ステータスフィールドsf2内のフラグビットを検査する。
【００４７】
図7のプログラムセグメントの中で、命令104Bおよび106Bのどちらかまたは両方の実行の間の例外は、代替ステータスフィールドsf2内のフラグビットを設定することができる。トラップ禁止ビットが代替ステータスフィールドsf2に設定されるので、命令104Bおよび106Bが投機的に実行されるとき、例外は報告されない。
【００４８】
分岐命令102に続き、フラグ検査命令132またはフラグ検査命令134が実行される。フラグ検査命令132または134は、代替ステータスフィールドsf2内のフラグビットを、メイン・ステータスフィールドsf0内のフラグビットおよび浮動小数点ステータスレジスタ内のトラップ許可ビットと比較する。回復演算への分岐は、1)代替ステータスフィールドsf2に設定されているフラグビットが、浮動小数点ステータスレジスタ内の許可されるトラップに対応する場合、または、2)代替ステータスフィールドsf2に設定されているフラグビットが、メイン・ステータスフィールドsf0に設定されていない場合に、生じる。詳しく述べると、フラグ検査命令132は回復演算140に分岐し、フラグ検査命令134は回復演算142に分岐する。上記の条件のどちらも満たされない場合、それぞれの回復演算は不要であり、プログラムは直接命令108に進む。
【００４９】
代替ステータスフィールドsf2は、この例で命令104Bおよび106Bによって共有されるので、命令104Bおよび106Bのどちらが１つまたは複数のフラグビットを設定させたかを代替ステータスフィールドsf2のみから判断することはできない。この情報を判断するため、回復演算140および142は次のように動作する。初めに、確約される投機的な命令または命令シーケンスが再実行され、メイン・ステータスフィールドsf0が、再実行された命令に関連する。命令の再実行が確約されている間、１つまたは複数のフラグビットが、メイン・ステータスフィールドsf0に設定されうる。さらに、対応するトラップが浮動小数点ステータスレジスタ内で許可されている場合、割込みが生じる。次に、共有された代替ステータスフィールドがクリアされる。それから、代替ステータスフィールドを共有するが、このとき確約されていない命令または命令シーケンスが再実行される。代替ステータスフィールドが、確約されていない命令の再実行に関連する。確約されていない命令の再実行の間に生じる例外は、代替ステータスフィールド内のフラグビットを設定させる。回復演算のこのシーケンスは、代替ステータスフィールドから確約された命令または命令シーケンスに対するフラグ情報を効果的に除去し、それをメイン・ステータスフィールドに移す。代替ステータスフィールドは、代替ステータスフィールドを共有するが確約されなかった残りの命令に対するフラグ情報を保持する。
【００５０】
再び図7の例を参照して、投機的に実行された命令106Bが確約されることを分岐命令102が要求すると仮定する。プログラムは、フラグ検査命令134に進む。フラグ検査命令134は、代替ステータスフィールドsf2内のフラグビットを、メイン・ステータスフィールドsf0内のフラグビットおよび浮動小数点ステータスレジスタ内のトラップ許可ビットと比較する。回復演算142への分岐は、1)代替ステータスフィールドsf2に設定されているフラグビットが、浮動小数点ステータスレジスタ内の許可されるトラップに対応する場合、または、2)代替ステータスフィールドsf2に設定されているフラグビットが、メイン・ステータスフィールドsf0に設定されていない場合、に生じる。これらの条件のどちらも満たされない場合、回復演算142は不要であり、プログラムは直接命令108に進む。
【００５１】
回復演算142は、投機的に実行された命令106Bの再実行を伴う。再実行の間、１つまたは複数のフラグビットが、メイン・ステータスフィールドsf0に設定されうる。対応するトラップが許可される場合、割込みを生じさせることができる。代替ステータスフィールドsf2内のフラグビットがクリアされ、投機的に実行された命令104Bが再実行される。命令104Bの再実行の間、１つまたは複数のフラグビットが、代替ステータスフィールドsf2に設定されうるが、代替ステータスフィールドsf2内のトラップ禁止ビットが割込みを防ぐ。ここで、代替ステータスフィールドsf2は、プログラム実行の間の後の時間に確約されうる投機的に実行される命令104Bに対するフラグ情報のみを含む。
【００５２】
図6および図7のプログラムセグメントは、命令の再実行を生じさせ、それによって短期的に性能を低下させることに気付くであろう。しかし、プログラムの実行のインスタンスの大部分で、例外は生じない。それらのケースで、命令の再実行は必要とされず、全体の性能は投機的な実行によって高められる。
【００５３】
投機的な実行の場合、代替ステータスフィールドは、投機的な実行の間に生じる例外が、メイン・ステータスフィールドsf0に影響を及ぼすことなく記録されることを可能にする。それぞれの代替ステータスフィールド内のトラップ禁止ビットは、不適当な割込みの発生を防ぐ。それぞれの命令が確約されるとき、投機的に実行された命令に関連するフラグ情報が利用される。
【００５４】
浮動小数点ステータスレジスタ内の複数のステータスフィールドの利用を投機的な実行に関連して上述した。しかし、浮動小数点ステータスレジスタの複数のステータスフィールド構成は、通常の投機的でない実行の間に有用である。例えば、浮動小数点ステータスレジスタの従来の読み取り-変更-書き込み更新によって必要とされる遅延をまねくことなく、プログラム・シーケンス内の異なる命令に対して異なる制御ビットを利用することが望ましい。したがって、異なる浮動小数点命令について異なる丸めおよび/または切捨てモードを利用することが望ましい。これは、異なる命令を浮動小数点ステータスレジスタ内の異なるステータスフィールドと関連させることによって達成することができる。こうして、異なるステータスフィールドに関連する命令は、異なる制御ビットをもつことができる。投機的でない実行の場合、トラップ禁止ビットはリセットされたままである。したがって、例外は直ちに報告される。
【００５５】
回転レジスタ(rotating registers)は、実行に複数サイクルを必要とする命令をもつプログラム・ループの実行を速めるために利用されている。回転レジスタは、プログラム・ループの複数の繰り返しが並行に実行されることを可能にする。命令がレジスタを参照するとき、レジスタは、論理的レジスタとみなされ、対応する物理的レジスタは、ループのそれぞれの繰り返しごとにインクリメントされる。したがって、いくつかの繰り返しが、異なるレジスタの中で進行中になりうる。
【００５６】
浮動小数点ステータスレジスタ内の１つまたは複数の代替ステータスフィールドは、回転レジスタと関連することができる。回転ステータスフィールドは、異なる時間にプログラム・ループの異なる繰り返しと関連する。概して、浮動小数点ステータスレジスタは、固定される１つまたは複数のステータスフィールド、および回転する１つまたは複数のステータスフィールドを含むことができる。
【００５７】
図8を参照して、浮動小数点ステータスレジスタ24を更新する技法の一例を述べる。浮動小数点計算ユニット20は、ステージ200、202、204、206および208を含むパイプライン・アーキテクチャをもつ。従来技術で知られているように、パイプライン化された計算ユニットの異なるステージは、同時に異なる演算を実施して動作速度を増加させる。１つの命令はいくつかの演算を必要とすることがあるので、計算ユニットの複数ステージによって同時に実施される演算は、１つの命令または２以上の命令に関連することができる。簡潔にするため、図8は、浮動小数点計算ユニットの各ステージにつき１つの命令を示す。さらに、図8に、メイン・ステータスフィールドsf0および代替ステータスフィールドsf1、sf2およびsf3を含む浮動小数点ステータスレジスタ24が示されている。先に述べたように、それぞれのステータスフィールドは、制御ビットCおよびフラグビットFを含む。
【００５８】
浮動小数点計算ユニット20は、異なる浮動小数点命令がパイプライン化された計算ユニットの異なるステージで実行されているときの一時点で示されている。それぞれの浮動小数点命令は、ステータスフィールドsf0、sf1、sf2およびsf3の１つと関連し、またはそれを参照する。従って、例えばステージ204は、fmpyで示される浮動小数点乗算命令を含み、この命令は、代替ステータスフィールドsf3を参照する。浮動小数点計算ユニット20のそれぞれのステージ200、202、204、206および208は、参照されるステータスフィールドからの制御ビットのコピーを含む。制御ビットは、命令と共にパイプライン化された計算ユニットの中を伝搬し、その命令を制御するために使用される。これは、ステータスフィールドが動的に更新されることを可能にし、従ってプログラム・シーケンス内の異なる命令は、異なる制御情報を利用することができる。
【００５９】
ステータス情報に関する図8の装置の動作を以下に述べる。浮動小数点ステータスレジスタ24は、浮動小数点制御設定fsetc.sfx(ここで、xは参照されるステータスフィールドを示す)および浮動小数点フラグクリア(fclrf.sfx)を含む浮動小数点命令によって更新される。浮動小数点制御設定およびフラグクリア命令は、浮動小数点プログラム・シーケンス内に組み込まれ、他の浮動小数点命令と共にパイプライン化された浮動小数点計算ユニットの中を伝搬する。上述したように、浮動小数点制御設定およびフラグクリア命令は、他のステータスフィールドに影響を及ぼすことなく、また、同じステータスフィールド内の他のサブフィールドに影響を及ぼすことなく、浮動小数点ステータスレジスタの指定されたサブフィールドが迅速に更新されることを可能にする。
【００６０】
図8の例で、フラグクリア命令220は、浮動小数点計算ユニット20から出てきた。命令220は、メイン・ステータスフィールドsf0内のフラグビットをリセットさせる。この演算は、図示されるようにパイプライン化された計算ユニットの出力で実施することができる。命令220の後に続き、例えばステージ200および208内の命令のようなメイン・ステータスフィールドsf0を示すパイプライン内の命令は、それぞれの演算の間に生じる例外の結果として、メイン・ステータスフィールドsf0に１つまたは複数のフラグビットを設定することができる。
【００６１】
ステージ208は、ステータスフィールドsf0が制御ビット01010を含むことを示す。ステージ202の制御設定命令は、ステータスフィールドsf0の制御ビットを11111に更新している。それゆえ、パイプライン内のステージ202から上流にあり、ステータスフィールドsf0を参照するそれらの命令は、制御ビット11111を利用する。対照的に、ステージ202の下流にあり、ステータスフィールドsf0を参照するそれらの命令は、制御ビット01010を使用する。このように、異なる命令は、同じステータスフィールドから異なる制御情報を利用することができることが分かるだろう。制御情報は、演算を遅延させることなく動的に更新することができる。
【００６２】
fsetc.sf2で示される制御設定命令224は、パイプライン化された計算ユニット20の第１ステージ200に入るところである。命令224は、ステータスフィールドsf2内の制御ビットを、例えば01001に設定することができる。こうして、命令224の上流にあって、ステータスフィールドsf2を参照するそれらの命令は、新しい制御ビットを利用する。
【００６３】
制御情報を必要とするそれぞれの浮動小数点命令は、それがパイプライン化された浮動小数点計算ユニットに入るとき、参照されるステータスフィールドから制御情報を読み取ることができる。参照されるステータスフィールドが、命令の完了前に更新されるとしても、その制御情報は、命令と共にパイプラインを通して運ばれ、その命令の実行を制御する。従って、例えば、ステータスフィールドsf0を参照するステージ208の命令は、それがパイプライン化された計算ユニットに入るときに、ステータスフィールドsf0から制御ビット01010を取得した。ステージ208の命令がパイプラインから出る前にステータスフィールドsf0内の制御ビットがステージ202の制御設定命令によって変更されるとしても、それらの制御ビットが命令の実行を制御する。この構成は、高い柔軟性を与え、ステータス情報を変更するための従来の技法に関連する遅延を避ける。
【００６４】
図8の構成は、制御設定命令がパイプライン化された計算ユニットの入力に達するとき、それが参照されるステータスフィールド内の制御ビットを更新し、フラグクリア命令がパイプライン化された計算ユニットから出るとき、それが参照されるステータスフィールド内のフラグビットをクリアするプロトコルを利用する。さらに、制御情報を必要とするそれぞれの浮動小数点命令は、それがパイプライン化された計算ユニットに入るとき、参照されるステータスフィールドを読み取る。この発明の範囲内で、異なるプロトコルを利用することができることが理解されるであろう。例えば、制御設定命令およびフラグクリア命令は、パイプライン化された計算ユニットに対して早いまたは遅い時間に浮動小数点ステータスレジスタを更新することができる。さらに、浮動小数点命令は、パイプライン化された計算ユニットに対して早いまたは遅い時間に、参照されるステータス情報を読み取ることができる。
【００６５】
IEEE標準に従うメモリ内の浮動小数点数の記憶装置に適した形式を図9に示す。単精度表現250は、８ビット指数252、および23ビット仮数(mantissaまたはsignificand)254を含む。２倍精度表現260は、11ビット指数262および52ビット仮数264を含む。拡張２倍表現270は、15ビット指数272および63ビット仮数274を含む。４倍精度表現280は、15ビット指数282および112ビット仮数284を含む。それぞれの表現は、符号ビットを含む。これらの表現の中で最も大きい指数は、15ビットである。
【００６６】
浮動小数点レジスタ16(図1)の中で使用されるレジスタ形式の一例を図10に示す。レジスタ形式は、符号ビット288、17ビットを有する指数フィールド290、64ビットを有する仮数フィールド292を含む。このように、レジスタ形式の指数フィールド290は、メモリ表現のどの指数フィールドよりも大きい。レジスタ形式の指数フィールドは、メモリ形式で支援される最も広い指数フィールドより少なくとも２ビット広いことが好ましい。
【００６７】
一般に、従来技術の浮動小数点ユニットは、結果の指数が所与のレンジを越えるとき、オーバフロー例外を示すフラグビットがステータスレジスタに設定されるように構成される。レンジは、メモリ形式に基づいて選択される。従って、指数がメモリに記憶することができるレンジを越える場合、オーバフロー例外が発生する。同じレンジが、計算の任意の中間ステップおよび最終ステップに適用される。
【００６８】
多くの計算の中で、中間ステップは、メモリ形式の指数レンジを越える結果を生じるが、最終結果は、メモリ形式の指数レンジの範囲内にある。従って、浮動小数点レジスタを含む浮動小数点計算ユニットが、メモリ形式の指数レンジより広い指数レンジを処理する能力をもつところで、最終結果がメモリ形式の指数レンジの範囲内にある限り、中間ステップの間のオーバフロー例外の発生は不要である。
【００６９】
上記のタイプの浮動小数点計算の例を図11に図示する。直角三角形の斜辺計算がブロック300に示されている。斜辺Cは、辺AおよびBの２乗の和の平方根として計算される。図示される例で、メモリ形式は、指数が９以下であり、AおよびBの値が109に等しいことを要求する。AおよびBの値は、中間ステップ302の斜辺の公式に代入される。追加の中間ステップ304、306および308は、ステップ310で最終結果を導く。指数は、ステップ304および306でメモリ形式のレンジを越えることに注意しなければならない。しかし、ステップ310の最終結果の指数は、メモリ形式のレンジの範囲内(９以下)である。浮動小数点計算ユニットは、中間ステップ302-308で生成されるレンジで指数を処理することができることを前提とすると、ステップ310の最終結果は、メモリ形式の指数レンジの範囲内にあるので、これらの中間ステップのオーバフロー例外の発生は不要である。詳しく述べると、最終結果のみがメモリ形式で記憶されればよい。
【００７０】
この発明の機能に従って、浮動小数点ステータスレジスタ24(図1ないし図4)は、最も広いレンジ指数(WRE)ビットを含む。最も広いレンジ指数ビットは、第１および第２の指数レンジと関連する。最も広いレンジ指数ビットのセット状態に対応しうる第１指数レンジは、浮動小数点計算ユニットの指数レンジ、典型的にはレジスタ形式の指数レンジに関連することができる。最も広いレンジ指数ビットのリセット状態に対応しうる第２指数レンジは、メモリ形式の指数レンジに関連することができる。WREビットがセットされているとき、典型的に中間結果である結果が第１指数レンジに適合しない場合は例外が発生する。WREビットがリセットされているとき、典型的に最終結果である結果が第２指数レンジに適合しない場合は例外が発生する。結果があらかじめ決められた条件を満たす場合、結果とそれぞれの指数レンジとの非適合性が確立される。例として、WREビットがセットされているとき、結果の指数が第１指数レンジを越えていれば、オーバフロー例外が発生しうる。WREビットがリセットされているとき、結果の指数が第２指数レンジを越えていれば、オーバフロー例外が発生しうる。こうして、WREビットがセットされているとき、対応する計算の指数レンジは、１または複数ビット増やすことができる。計算の中間ステップの間、指数がメモリ形式のレンジを越えるとしても、計算の中間ステップは、オーバフロー例外を生じることなく進むことができる。再び図11を参照して、WREビットは、ステップ302、304、306および308でセットされ、最後のステップ310でリセットされる。こうして、計算は、オーバフロー例外の発生なく完了に向けて進み、最終結果の指数はメモリ形式に適合する。以下で述べるように、WREビットを使用して、他のタイプの例外の報告を制御することができる。
【００７１】
WREビットは、上述したように２以上の浮動小数点ステータスフィールドをもつアーキテクチャ、および１つの浮動小数点ステータスフィールドをもつアーキテクチャの中で使用することができる。浮動小数点ステータスレジスタが２またはそれ以上のステータスフィールドをもつとき、計算の中間ステップは、セットされたWREビットをもつ代替ステータスフィールドを参照し、計算の最終ステップは、リセットされたWREビットをもつメイン・ステータスフィールドsf0を参照することができる。浮動小数点ステータスレジスタが１つのステータスフィールドをもつとき、WREビットは、中間ステップの間は設定されており、計算の最終ステップの前にリセットされる。
【００７２】
WREビットは、メモリ形式を使用してメモリに計算の最終結果を書き込むことに関連して記述された。より一般的に、WREビットは、中間結果の指数が最終結果の指数より大きい必要がある応用に使用することができる。従って、例えば最終結果は、指定された形式で外部装置に伝送することができる。WREビットのセットおよびリセット状態に関連する第１および第２指数レンジのサイズは、特定のアーキテクチャに依存する。上で述べたように、第１指数レンジは、第２指数レンジより少なくとも２ビット広いことが好ましい。
【００７３】
WREビットは、オーバフロー例外を防ぐことに限定されない。WREビットを使用して、例えばアンダーフロー例外、不正確例外、または、計算の中間ステップでは記録される必要がないが最終ステップで記録される必要がある任意の他の例外を防ぐことができる。WREビットは、不要な例外の発生を防ぎ、それによって性能を向上させる。
【００７４】
浮動小数点ステータスレジスタ内の制御ビットとしてWREビットを説明した。別の実施例で、WREビットは、命令形式で指定することができる。この方法の不利な点は、命令が特別なビットまたは特別な状態をもつ必要があることである。この方法の利点は、浮動小数点ステータスレジスタの更新が必要でないことである。どちらの場合も、WREビットは、プログラマによって制御される。
【００７５】
この発明の更なる機能は、「ビッグ・エンディアン」(big endian:BE)および「リトル・エンディアン」(little endian:LE)形式を用いた演算に関連する。ビッグ・エンディアン形式では、データワードは、その最上位バイトがメモリワードの最上位バイトに対応するようメモリに記憶される。リトル・エンディアン形式で、データワードは、その最下位バイトがメモリワードの最上位バイトに対応するようメモリに記憶される。データは、両方の形式でメモリに記憶することができるが、それらの形式の１つだけがプロセッサのレジスタ内で許される。ビッグ・エンディアンまたはリトル・エンディアン形式は、制御レジスタ内のエンディアン制御ビットによって制御することができる。ビッグ・エンディアン/リトル・エンディアン制御ビットの状態は、ソフトウェアによって制御される。
【００７６】
上述したように、浮動小数点データは、図9に示すIEEE形式のメモリに記憶することができ、IEEE形式とは異なるレジスタ形式で浮動小数点レジスタ内で処理することができる。いくつかのプロセッサ演算において、浮動小数点データは、レジスタ形式からIEEE形式に変換され、メモリに記憶される。逆の場合も同様である。スピル(spill)/フィル(fill)演算として知られる他のプロセッサ演算では、浮動小数点データは、最初に浮動小数点数をIEEE形式に変換することなく、レジスタ形式でメモリに書き込まれる。同様に、浮動小数点データがメモリから読み取られるとき、それはすでにレジスタ形式であり、形式変換は必要とされない。スピル/フィル演算は、例えばプログラムが割り込まれるときに実施することができる。
【００７７】
スピル/フィル演算を図12および図13に関して説明する。浮動小数点レジスタ形式を図12にバイト表現で示す。詳しく述べると、レジスタ形式400は、8バイトs0-s7をもつ仮数(significand:有効数字)、2バイトe0およびe1を有する指数404、１符号バイトのse2を含む。浮動小数点レジスタ形式400は、合計82ビットをもつ。
【００７８】
浮動小数点レジスタ形式の82ビットは、図13に示すように、ビッグ・エンディアンまたはリトル・エンディアン形式で128ビット・メモリフィールドに記憶することができる。図13で、形式420は、リトル・エンディアン形式でレジスタ形式のスピル/フィル演算の結果を示す。形式424は、ビッグ・エンディアン形式のスピル/フィル演算の結果を示す。それぞれの形式の左側の数字は、増大するメモリアドレスを示す。リトル・エンディアン形式420では、仮数の最下位バイトs0が、128ビット・メモリフィールドの最も低いメモリアドレスに記憶される。ビッグ・エンディアン形式424では、仮数の最下位バイトs0が、128ビット・メモリフィールドの最も高いメモリアドレスに記憶される。それぞれのケースで、128ビットフィールドの中のゼロは、それぞれの浮動小数点数の最上位ビットである。図13で、破線430、432および434は、8バイトワードの境界を示しており、第１および第２の連続するメモリワードを規定する。このように、リトル・エンディアン形式では、仮数は、ワード境界430と432の間の第１メモリワードに記憶され、指数および符号は、ワード境界432と434の間の第2メモリワードに記憶される。ビッグ・エンディアン形式では、指数および符号は、ワード境界430と432の間の第１メモリワードに記憶され、仮数は、ワード境界432と434の間の第２メモリワードに記憶される。
【００７９】
リトル・エンディアン形式420およびビッグ・エンディアン形式424は共に、仮数が8バイトアクセスでアクセスされることを可能にし、指数および符号が8バイトアクセスでアクセスされることを可能にする。すなわち、BEおよびLE形式のどちらの形式でも、指数および符号は一方の8バイトワードに閉じ込められ、仮数は他方の8バイトワードに閉じ込められるので、浮動小数点数のどちらかまたは両方の成分に別個にアクセスすることができる。さらに、図13に図示し上述した形式420および424は、既存のデータに影響を及ぼすことなく、ゼロによって占有される位置の浮動小数点フィールドに制御ビットを加えることを許す。詳しく述べると、制御ビットおよび他の情報をLE形式420のバイト11-15に加えることができ、そのような情報は、BE形式424のバイト0-4に加えることもできる。
【００８０】
この発明の好ましい実施例として現在考えられるものを図示し説明したが、当業者であればこの発明の範囲から逸脱することなく多様な変更および修正を行うことができることが分かるであろう。
【００８１】
本発明は例として次の実施態様を含む。
【００８２】
（１）浮動小数点計算ユニット、浮動小数点レジスタ、および浮動小数点ステータスレジスタを有するコンピュータを動作させる方法であって、
上記浮動小数点ステータスレジスタ内に、それぞれがフラグ情報および制御情報を含むメイン・ステータスフィールドおよび少なくとも１つの代替ステータスフィールドを設けるステップと、
浮動小数点計算ユニット内で第１の演算を実施し、該第１の演算を上記浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させるステップと、
浮動小数点計算ユニット内で第２の演算を実施し、該第２の演算を上記浮動小数点ステータスレジスタ内の代替ステータスフィールドと関連させるステップと、
を含み、上記第１および第２の演算は、上記メイン・ステータスフィールドおよび代替ステータスフィールド内に別個のフラグおよび制御情報をもつ、コンピュータ動作方法。
【００８３】
（２）上記第１の演算は、投機的でない演算を含み、上記第２の演算は、投機的な演算を含み、さらに、上記投機的な演算が確約されるとき、上記代替ステータスフィールド内のフラグ情報を検査するステップを含む、上記(1)に記載のコンピュータ動作方法。
【００８４】
（３）さらに、上記代替ステータスフィールド内のフラグ情報を検査するステップが例外を示さない場合、第３の演算の実行に進むステップを含む、上記(2)に記載のコンピュータ動作方法。
【００８５】
（４）上記フラグ情報を検査するステップは、上記代替ステータスフィールド内のフラグ情報を上記メイン・ステータスフィールド内のフラグ情報と比較するステップと、上記代替ステータスフィールド内のフラグ情報が、上記メイン・ステータスフィールド内のフラグ情報と異なるとき、回復演算に分岐するステップを含む、上記(2)に記載のコンピュータ動作方法。
【００８６】
（５）上記フラグ情報を検査するステップは、上記代替ステータスフィールド内のフラグ情報を、浮動小数点ステータスレジスタ内のトラップ許可ビットと比較するステップと、上記代替ステータスフィールド内のフラグ情報が上記浮動小数点ステータスレジスタ内の許可されるトラップに対応する場合、回復演算に分岐するステップを含む、上記(2)に記載のコンピュータ動作方法。
【００８７】
（６）上記回復演算は、投機的な演算を再実行するステップと、投機的な演算の再実行を上記浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させるステップを含む、上記(4)または(5)に記載のコンピュータ動作方法。
【００８８】
（７）上記投機的な演算を実施するステップは、第１および第２の投機的な演算を実施し、該第１および第２の投機的な演算を上記浮動小数点ステータスレジスタ内の単一の代替ステータスフィールドと関連させることを含む、上記(2)に記載のコンピュータ動作方法。
【００８９】
（８）さらに、上記第１および第２の投機的な演算の１つが確約されるとき、上記代替ステータスフィールド内のフラグ情報を検査するステップを含む、上記(7)に記載のコンピュータ動作方法。
【００９０】
（９）上記フラグ情報を検査するステップは、上記代替ステータスフィールド内のフラグ情報を上記メイン・ステータスフィールド内のフラグ情報と比較するステップと、上記代替ステータスフィールド内のフラグ情報が上記メイン・ステータスフィールド内のフラグ情報と異なるとき、回復演算に分岐するステップを含む、上記(8)に記載のコンピュータ動作方法。
【００９１】
（１０）上記フラグ情報を検査するステップは、上記代替ステータスフィールド内のフラグ情報を、上記浮動小数点ステータスレジスタ内のトラップ許可ビットと比較するステップと、代替ステータスフィールド内のフラグ情報が上記浮動小数点ステータスレジスタ内の許可されるトラップに対応するとき、回復演算に分岐するステップを含む、上記(8)に記載のコンピュータ動作方法。
【００９２】
（１１）上記回復演算は、確約される投機的な演算を再実行するステップと、確約される投機的な演算の再実行を上記浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させるステップと、上記代替ステータスフィールド内のフラグ情報をクリアするステップと、確約されていない投機的な演算を再実行するステップと、確約されていない投機的な演算の再実行を上記浮動小数点ステータスレジスタ内の代替ステータスフィールドと関連させるステップを含む、上記(9)または(10)に記載のコンピュータ動作方法。
【００９３】
（１２）上記フラグ情報を検査するステップは、上記代替ステータスフィールド内のフラグ情報を検査するステップが例外を示さない場合、第３の演算の実行に進むことを含む、上記(8)に記載のコンピュータ動作方法。
【００９４】
（１３）上記浮動小数点ステータスレジスタ内に少なくとも１つの代替ステータスフィールドを設けるステップは、上記浮動小数点ステータスレジスタ内に複数の代替ステータスフィールドを設けることを含む、上記(1)に記載のコンピュータ動作方法。
【００９５】
（１４）上記代替ステータスフィールドの少なくとも１つは回転し、回転するステータスフィールドは、異なる演算サイクルに異なる演算と関連する、上記(13)に記載のコンピュータ動作方法。
【００９６】
（１５）上記第２の演算を実施するステップは、第１および第２の投機的な演算を実施し、上記第１および第２の投機的な演算を上記代替ステータスフィールドの異なるものと関連させることを含む、上記(13)に記載のコンピュータ動作方法。
【００９７】
（１６）上記少なくとも１つの代替ステータスフィールドを設けるステップは、上記第２の演算の実行中の例外に起因する割込みを防ぐため、上記代替ステータスフィールド内にトラップ禁止ビットを設けることを含む、上記(1)に記載のコンピュータ動作方法。
【００９８】
（１７）さらに、上記第２の演算が投機的な演算であるとき、上記トラップ禁止ビットを設定するステップを含み、上記割込みは、投機的な演算が確約されるまで遅延される、上記(16)に記載のコンピュータ動作方法。
【００９９】
（１８）上記第１および第２の演算をそれぞれメインおよび代替ステータスフィールドと関連させるステップは、第１および第２の演算を指定する浮動小数点命令の中の１つまたは複数の制御ビットに応じて実施される、上記(1)に記載のコンピュータ動作方法。
【０１００】
（１９）浮動小数点計算を実施する装置であって、
浮動小数点計算ユニット、浮動小数点レジスタ、および浮動小数点ステータスレジスタを有するコンピュータであって、上記浮動小数点ステータスレジスタはメイン・ステータスフィールドおよび少なくとも１つの代替ステータスフィールドを含み、上記メイン・ステータスフィールドおよび上記代替ステータスフィールドはそれぞれ浮動小数点演算を制御するための制御情報および浮動小数点演算の間に生じた１つまたは複数の例外を記録するためのフラグ情報を含む、コンピュータと、
浮動小数点計算ユニット内で第１の演算を実施し、該第１の演算を上記浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させる手段と、
浮動小数点計算ユニット内で第２の演算を実施し、該第２の演算を上記浮動小数点ステータスレジスタ内の代替ステータスフィールドと関連させる手段と、
を備え、上記第１および第２の演算は、上記メインおよび代替ステータスフィールド内にそれぞれ別個の制御およびフラグ情報をもつ、浮動小数点演算を実施する装置。
【０１０１】
（２０）上記第１の演算を実施する手段は、投機的でない演算を実施する手段を含み、上記第２の演算を実施する手段は、投機的な演算を実施する手段を含み、さらに、上記投機的な演算が確約されるとき、上記代替ステータスフィールド内のフラグ情報を検査する手段を備える、上記(19)に記載の装置。
【０１０２】
（２１）さらに、上記代替ステータスフィールド内のフラグ情報を検査する手段が例外を示さない場合、第３の演算の実行に進む手段を含む、上記(20)に記載の装置。
【０１０３】
（２２）上記フラグ情報を検査する手段は、上記代替ステータスフィールド内のフラグ情報を、上記メイン・ステータスフィールド内のフラグ情報と比較する手段と、上記代替ステータスフィールド内のフラグ情報が上記メイン・ステータスフィールド内のフラグ情報と異なるとき、回復演算に分岐する手段を含む、上記(20)に記載の装置。
【０１０４】
（２３）上記フラグ情報を検査する上記手段は、上記代替ステータスフィールド内のフラグ情報を浮動小数点ステータスレジスタ内のトラップ許可ビットと比較する手段と、上記代替ステータスフィールド内のフラグ情報が、上記浮動小数点ステータスレジスタ内で許可されるトラップに対応するとき、回復演算に分岐する手段を含む、上記(20)に記載の装置。
【０１０５】
（２４）さらに、投機的な演算を再実行する手段および投機的な演算の再実行を上記浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させる手段を有する上記回復演算を実行する手段を備える、上記(22)または(23)に記載の装置。
【０１０６】
（２５）上記投機的な演算を実施する手段は、第１および第２の投機的な演算を実施し、該第１および第２の投機的な演算を上記浮動小数点ステータスレジスタ内の単一の代替ステータスフィールドと関連させる手段を含む、上記(20)に記載の装置。
【０１０７】
（２６）さらに、上記第１および第２の投機的な演算の１つが確約されるとき、上記代替ステータスフィールド内のフラグ情報を検査する手段を含む、上記(25)に記載の装置。
【０１０８】
（２７）上記フラグ情報を検査する手段は、上記代替ステータスフィールド内のフラグ情報を上記メイン・ステータスフィールド内のフラグ情報と比較する手段と、上記代替ステータスフィールド内のフラグ情報が上記メイン・ステータスフィールド内のフラグ情報と異なるとき、回復演算に分岐する手段を含む、上記(26)に記載の装置。
【０１０９】
（２８）上記フラグ情報を検査する手段は、上記代替ステータスフィールド内のフラグ情報を上記浮動小数点ステータスレジスタ内のトラップ許可ビットと比較する手段と、代替ステータスフィールド内のフラグ情報が上記浮動小数点ステータスレジスタ内で許可されるトラップに対応するとき、回復演算に分岐する手段を含む、上記(26)に記載の装置。
【０１１０】
（２９）さらに、確約される投機的な演算を再実行する手段、確約される投機的な演算の再実行を上記浮動小数点ステータスレジスタ内のメイン・ステータスフィールドと関連させる手段、上記代替ステータスフィールド内のフラグ情報をクリアする手段、確約されていない投機的な演算を再実行する手段、および確約されていない投機的な演算の再実行を上記浮動小数点レジスタ内の代替ステータスフィールドと関連させる手段を含む上記回復演算を実行する手段を備える、上記(27)または(28)に記載の装置。
【０１１１】
（３０）上記フラグ情報を検査する手段は、上記代替ステータスフィールド内のフラグ情報を検査する手段が例外を示さない場合、第３の演算の実行に進む手段を含む、上記(26)に記載の装置。
【０１１２】
（３１）上記浮動小数点ステータスレジスタは、複数の代替ステータスフィールドを含む、上記(19)に記載の装置。
【０１１３】
（３２）上記第２の演算を実施する手段は、第１および第２の投機的な演算を実施する手段、および該第１および第２の投機的な演算を上記代替ステータスフィールドの異なるものと関連させる手段を含む、上記(31)に記載の装置。
【０１１４】
（３３）上記代替ステータスフィールドの少なくとも１つは、異なる演算サイクルに異なる演算と関連する回転する代替ステータスフィールドを含む、上記(31)に記載の装置。
【０１１５】
（３４）上記浮動小数点ステータスレジスタの代替ステータスフィールドは、上記第２の演算の実行中の例外に起因する割込みを防ぐためのトラップ禁止ビットを含む、上記(19)に記載の装置。
【０１１６】
（３５）さらに、上記第２の演算が投機的な演算であるとき、上記トラップ禁止ビットを設定する手段を含み、上記割込みは、投機的な演算が確約されるまで遅延される、上記(34)に記載の装置。
【０１１７】
（３６）上記第１および第２の演算をメインおよび代替ステータス・フィールドと関連させる手段は、第１および第２の演算を指定する浮動小数点命令の中の１つまたは複数の制御ビットに応じる、上記(19)に記載の装置。
【０１１８】
【発明の効果】
本発明によれば、パイプライン浮動小数点ユニットの中で、投機的な演算の間に生じた例外をすぐに報告せずにステータスレジスタ内に記録することにより、不必要なプログラム割込みを防ぐことができる。
【図面の簡単な説明】
【図１】浮動小数点ユニットおよび関連するプロセッサ要素の簡略ブロック図。
【図２】浮動小数点ステータスレジスタの形式の一例を示す図。
【図３】それぞれの浮動小数点ステータスフィールドの形式の一例を示す図。
【図４】それぞれの浮動小数点ステータスフィールド内のビット割当ての一例を示す図。
【図５】投機的な演算を伴わないプログラムセグメントの一例を示すフローチャート。
【図６】第１の投機的実行方法に従う図5のプログラムセグメントの実行を示すフローチャート。
【図７】第２の投機的実行方法に従う図5のプログラムセグメントの実行を示すフローチャート。
【図８】それぞれのステージごとに制御ビットのコピーをもつパイプライン化された浮動小数点計算ユニットの簡略ブロック図。
【図９】異なる浮動小数点データタイプを記憶するために使用されるメモリ形式を示す図。
【図１０】ビット表現で浮動小数点レジスタ形式の一例を示す図。
【図１１】最も広いレンジの指数制御ビットがオーバフロー例外の報告を回避する浮動小数点計算の例を示すフローチャート。
【図１２】バイト表現で浮動小数点レジスタ形式の一例を示す図。
【図１３】スピルおよびフィル演算の間、ビッグ・エンディアンおよびリトル・エンディアン形式で浮動小数点数を記憶するためのメモリ形式を示す図。
【符号の説明】
１６            浮動小数点レジスタ
２０,２２       浮動小数点計算ユニット
２４            浮動小数点ステータスレジスタ
４２            メイン・ステータスレジスタ
４４,４６,４８    代替ステータスレジスタ
４００          レジスタ形式
４２０          リトルエンディアン形式
４４０          ビッグエンディアン形式
【図１】
0004219507.tif 000002
【図２】
0004219507.tif 000003
【図３】
0004219507.tif 000004
【図４】
0004219507.tif 000005
【図５】
0004219507.tif 000006
【図６】
0004219507.tif 000007
【図７】
0004219507.tif 000008
【図８】
0004219507.tif 000009
【図９】
0004219507.tif 000010
【図１０】
0004219507.tif 000011
【図１１】
0004219507.tif 000012
【図１２】
0004219507.tif 000013
【図１３】
0004219507.tif 000014