(57)【特許請求の範囲】
【請求項１】
浮動小数点値を整数浮動小数点値に丸めるための整数浮動小数点への丸め演算を実行するように構成された処理回路であって、前記浮動小数点値が仮数および指数を有する、処理回路と、
整数浮動小数点への浮動小数点丸め命令の実行に応答して、整数浮動小数点への前記丸め演算を実行するために前記処理回路を制御するように構成された制御回路と
を備える、データ処理装置であって、
前記処理回路が、
前記浮動小数点値の前記指数に応じて、基本値をシフト量だけシフトすることにより丸め値を生成するように構成されたシフト回路と、
合計値を生成するために、前記丸め値を前記浮動小数点値の前記仮数に加算するように構成された加算回路と、
前記仮数の小数値ビット位置に対応するビット位置を有する前記合計値のビットをクリアするためのマスクを生成するように構成されたマスク生成回路と、
前記整数浮動小数点値を生成するために、前記マスクを前記合計値に適用するように構成されたマスキング回路と
を含む、データ処理装置。
【請求項２】
前記シフト回路が、前記丸め値を生成するために前記基本値を右シフトするように構成されている、請求項１に記載のデータ処理装置。
【請求項３】
前記丸め値が、前記浮動小数点値の前記仮数の最上位小数値ビットのビット位置に対応するビット位置に先頭の非ゼロビットを有する、請求項１および請求項２のいずれか一つに記載のデータ処理装置。
【請求項４】
前記基本値が、非ゼロ値を有する最上位ビットを有し、かつ
前記シフト回路が、前記基本値を（Ｅ−ＢＩＡＳ＋１）ビット位のシフト量だけ右シフトするように構成されていて、Ｅが前記浮動小数点値の前記指数であり、ＢＩＡＳが前記浮動小数点値の指数バイアスである、
請求項１ないし請求項３のいずれか一つに記載のデータ処理装置。
【請求項５】
前記マスキング回路が、ビット単位のＡＮＤ演算を前記合計値および前記マスクに適用するように構成されたＡＮＤゲートを含む、請求項１ないし請求項４のいずれか一つに記載のデータ処理装置。
【請求項６】
前記仮数の小数値ビット位置に対応するビット位置における前記マスクのビットがゼロのビット値を有する、請求項５に記載のデータ処理装置。
【請求項７】
前記仮数の整数値ビット位置に対応するビット位置における前記マスクのビットが１のビット値を有する、請求項６に記載のデータ処理装置。
【請求項８】
前記マスク生成回路が、前記丸め値に基づいて前記マスクを生成するように構成されている、請求項１ないし請求項７のいずれか一つに記載のデータ処理装置。
【請求項９】
前記制御回路が、浮動小数点加算命令の実行に応答して、前記シフト回路および前記加算回路を使用して加算演算を実行するために、前記処理回路を制御するように構成されている、請求項１ないし請求項８のいずれか一つに記載のデータ処理装置。
【請求項１０】
前記浮動小数点値が、２つの整数浮動小数点値の間にある値の場合に、前記処理回路が、整数浮動小数点への前記丸め演算中に、前記浮動小数点値を前記２つの整数浮動小数点値のどちらに丸めるべきかを選択するための、少なくとも１つの丸めモードを有する、請求項１ないし請求項９のいずれか一つに記載のデータ処理装置。
【請求項１１】
前記処理回路が、複数の丸めモードを有し、整数浮動小数点への前記浮動小数点丸め命令が、整数浮動小数点への前記丸め演算に対して、前記複数の丸めモードのうちのどれが使用されるべきかを指定する、請求項１０に記載のデータ処理装置。
【請求項１２】
前記処理回路が、前記浮動小数点値を、最大の絶対値を有する、前記２つの整数浮動小数点値のうちの１つに丸めるための、ゼロから離れる丸め（ＲＵ）丸めモードを有する、請求項１０および請求項１１のいずれか一つに記載のデータ処理装置。
【請求項１３】
前記ＲＵ丸めモードにおいて、前記基本値の全てのビットが非ゼロビット値を有する、請求項１２に記載のデータ処理装置。
【請求項１４】
前記処理回路が、前記浮動小数点値を、前記２つの整数浮動小数点値のうちの最も近い値に丸め、前記２つの整数浮動小数点値の真ん中にある浮動小数点値が、偶数値である、前記２つの整数浮動小数点値のうちの１つに丸められるための、最近似値、偶数丸め（ＲＮＥ）丸めモードを有する、請求項１０ないし請求項１３のいずれか一つに記載のデータ処理装置。
【請求項１５】
前記ＲＮＥ丸めモードにおいて、前記基本値の最上位ビットが非ゼロビット値を有し、前記基本値の残りのビットがゼロビット値を有する、請求項１４に記載のデータ処理装置。
【請求項１６】
前記ＲＮＥ丸めモードにおいて、前記浮動小数点値が前記２つの整数浮動小数点値の真ん中にあり、かつ、前記仮数の最下位整数値ビットがゼロビット値を有する場合に、前記マスク生成回路が、前記マスクを修正するように構成され、かつ、前記マスキング回路が、前記仮数の前記最下位整数値ビットに対応するビット位置を有する前記合計値のビットをクリアするために、前記修正されたマスクを前記合計値に適用するように構成されている、請求項１４および請求項１５のいずれか一つに記載のデータ処理装置。
【請求項１７】
前記マスク生成回路が、前記マスクを１ビット位だけ左シフトすることにより前記マスクを修正するように構成されている、請求項１６に記載のデータ処理装置。
【請求項１８】
前記処理回路が、前記浮動小数点値を、最小の絶対値を有する、前記２つの整数浮動小数点値のうちの１つに丸めるための、ゼロ方向への丸め（ＲＺ）丸めモードを有する、請求項１０ないし請求項１７のいずれか一つに記載のデータ処理装置。
【請求項１９】
前記ＲＺ丸めモードにおいて、前記丸め値の全てのビットがゼロに設定され、その後、前記ゼロに設定された丸め値が、前記合計値を生成するために、前記仮数に加算され、前記マスクが前記ゼロに設定されていない丸め値を使用して生成される、請求項１８に記載のデータ処理装置。
【請求項２０】
請求項１ないし請求項１９のいずれか一つに記載のデータ処理装置に対応する仮想マシン実行環境を提供するために、コンピュータを制御するためのコンピュータプログラムを格納するコンピュータ可読記憶媒体。
【請求項２１】
浮動小数点値を整数浮動小数点値に丸めるための整数浮動小数点への丸め演算を実行するための処理手段であって、前記浮動小数点値が仮数および指数を有する、処理手段と、
整数浮動小数点への浮動小数点丸め命令の実行に応答して、整数浮動小数点への前記丸め演算を実行するために前記処理手段を制御するための制御手段と
を含む、データ処理装置であって、
前記処理手段が、
前記浮動小数点値の前記指数に応じて、基本値をシフト量だけシフトすることにより丸め値を生成するためのシフト手段と、
合計値を生成するために、前記丸め値を前記浮動小数点値の前記仮数に加算するための加算手段と、
前記仮数の小数値ビット位置に対応するビット位置を有する前記合計値のビットをクリアするためのマスクを生成するためのマスク生成手段と、
前記整数浮動小数点値を生成するために、前記マスクを前記合計値に適用するためのマスキング手段と
を含む、データ処理装置。
【請求項２２】
浮動小数点値を整数浮動小数点値に丸めるための整数浮動小数点への丸め演算を実行するための方法であって、前記浮動小数点値が仮数および指数を有し、前記方法が、
前記浮動小数点値の前記指数に応じて、基本値をシフト量だけシフトすることにより丸め値を生成するステップと、
合計値を生成するために、前記丸め値を前記浮動小数点値の前記仮数に加算するステップと、
前記仮数の小数値ビット位置に対応するビット位置を有する前記合計値のビットをクリアするためのマスクを生成するステップと、
前記整数浮動小数点値を生成するために、前記マスクを前記合計値に適用するステップと
を含み、
前記方法が、整数浮動小数点への浮動小数点丸め命令の実行に応答して、処理回路によって実行される、
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理の分野に関する。特に、本発明は、浮動小数点値を整数浮動小数点値に丸めるための装置および方法に関する。
【背景技術】
【０００２】
従来技術の説明
浮動小数点数について算術演算を実行するためのプロセッサが知られている。浮動小数点表現では、数は、仮数１．Ｆ、指数Ｅおよび符号ビットＳを使用して表される。符号ビットＳは、浮動小数点数が正であるか負であるかを表し、仮数１．Ｆは、浮動小数点数の有効数字を表し、指数Ｅは、仮数に対する基点（２進小数点としても知られている）の位置を表す。指数の値を変更することにより、基点は、仮数内を左右に「浮動（ｆｌｏａｔ）」できる。これは、所定の数のビットに対して、浮動小数点表現が、（基点が、仮数内で固定位置を有する）固定小数点表現よりも幅広い範囲の数を表すことができることを意味する。しかし、追加の範囲は、ビットのいくつかが指数を格納するために使用されるので、精度を低下させて達成される。時々、浮動小数点算術演算は、仮数に対して使用されるビット数よりも多くの有効ビットをもつ結果を生成する。これが生じると、結果は、利用可能な数の有効ビットを使用して表すことができる値に丸められる。
【０００３】
添付の図面の図１は、浮動小数点数がレジスタまたはメモリ内にどのように格納されるかを示す。単精度の表現では、浮動小数点数を格納するために３２ビットが使用される。１ビットが符号ビットＳとして使用され、８ビットが指数Ｅを格納するために使用され、２３ビットが、仮数１．Ｆの小数部分Ｆを格納するために使用される。２３ビットの小数部分Ｆは、１の値を有する暗黙ビットと共に、２４ビットの仮数１．Ｆを構成する。基点は、当初は、仮数の暗黙ビットと２３の格納ビットとの間に置かれていると推定される。格納された指数Ｅは、表された浮動小数点数において基点が、Ｅ−１２７が負である場合その最初の位置から（Ｅ−１２７）位だけ左にシフトされるように（例えば、Ｅ−１２７＝−２の場合、１．０１の仮数は０．０１０１を表す）、またはＥ−１２７が正である場合には、その最初の位置から（Ｅ−１２７）位だけ右にシフトされるように（例えば、Ｅ−１２７＝２の場合、１．０１の仮数は１０１を表す）、固定値１２７によってバイアスされる。バイアスは、従って、基点の負および正の両方のシフトが、格納された指数Ｅの正の値によって表すことができるので、２つの浮動小数点値の指数を比較することをより簡単にするために使用される。図１に示すように、格納された表現Ｓ［３１］、Ｅ［３０：２３］、Ｆ［２２：０］は、値（−１）Ｓ×１．Ｆ［２２：０］×２（Ｅ−１２７）をもつ数を表す。この形式での単精度浮動小数点数は、「正規（normal）」と見なされる。計算された浮動小数点値が正規でない（例えば、基点が、仮数の最も左の２ビット間以外の位置で生成されている）場合、それは、仮数を左または右シフトさせ、その結果、数が（−１）Ｓ×１．Ｆ［２２：０］×２Ｅ−１２７の形式になるまで、指数を調整することによって正規化される。
【０００４】
仮数および指数が６４の格納ビットを使用して表される、倍精度形式も提供される。６４の格納ビットは、１つの符号ビット、１１ビットの指数および５３ビット仮数１．Ｆの５２ビットの小数部分Ｆを含む。倍精度形式では、指数Ｅは、１０２３の値によってバイアスされる。従って、倍精度形式では、格納された表現Ｓ［６３］、Ｅ［６２：５２］、Ｆ［５１：０］は、浮動小数点値（−１）Ｓ×１．Ｆ［５１：０］×２Ｅ−１０２３を表す。
【０００５】
本願では、いくつかの例が単精度浮動小数点形式に準拠して説明される。しかし、本発明は倍精度形式（または任意の他の浮動小数点形式）にも適用され得ること、および後続の図に示すビット値は、使用されている浮動小数点形式に適切な値で置き換えられ得ることが理解されるであろう。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
浮動小数点演算の一種は、浮動小数点値を整数浮動小数点値に丸める演算である、整数浮動小数点への丸め演算（ＦＲＩＮＴ）である。例えば、６．７５の浮動小数点値は、隣接した整数値６．０または７．０のうちの１つに丸めることができる。本技術は、ＦＲＩＮＴ演算の実行に関連した待ち時間を減らすことを目的とする。
【課題を解決するための手段】
【０００７】
一態様から見ると、本発明は、
浮動小数点値を整数浮動小数点値に丸めるための整数浮動小数点への丸め演算を実行するように構成された処理回路であって、前記浮動小数点値が仮数および指数を有する、処理回路と、
整数浮動小数点への浮動小数点丸め命令の実行に応答して、整数浮動小数点への前記丸め演算を実行するために前記処理回路を制御するように構成された制御回路と
を含むデータ処理装置であって、
前記処理回路が、
前記浮動小数点値の前記指数に応じて、基本値をシフト量だけシフトすることにより、丸め値（rounding value）を生成するように構成されたシフト回路と、
合計値を生成するために、前記丸め値を前記浮動小数点値の前記仮数に加算するように構成された加算回路と、
前記仮数の小数値（fractional-valued）ビット位置に対応するビット位置を有する前記合計値のビットをクリアするためのマスクを生成するように構成されたマスク生成回路と、
前記整数浮動小数点値を生成するために、前記マスクを前記合計値に適用するように構成されたマスキング回路と
を含む、データ処理装置を提供する。
【０００８】
整数浮動小数点への丸め演算（ＦＲＩＮＴ）は、通常、ソフトウェアで実装されている。しかし、本技術は、このアプローチは、各命令が別々にフェッチされ、復号されて実行される必要があるので遅い、と認識する。
【０００９】
ＦＲＩＮＴ演算をハードウェアで実行するための処理回路、および単一の整数浮動小数点への浮動小数点丸め命令（ＦＲＩＮＴ命令）の実行に応答して、ＦＲＩＮＴ演算を実行するためにその処理回路を制御するための制御回路を提供することにより、ＦＲＩＮＴ演算が、以前のソフトウェア実施態様におけるよりも迅速に実行できる。
【００１０】
本技術は、標準的な浮動小数点ハードウェア回路では、丸めは、仮数内の所定の固定位置、通常は、仮数の最下位ビット、で行われるように制限されているとも認識する。しかし、丸めが仮数の最下位ビットにおいてのみ行うことができる場合、仮数は、浮動小数点値を整数浮動小数点値に変換するために右シフトされる必要があり得、その後、シフトされた値の最下位ビットについて丸めを実行する。丸められた値は、次いで、値を正規の浮動小数点形式に変換して戻すために、丸められた値を左シフトすることにより正規化される必要がある。かかる左シフトは、通常、他の浮動小数点演算には必要ではなく、そのため、かかる左シフトを実行するためのハードウェアを処理回路に追加することは、処理サイクルを処理回路に追加して、回路を複雑にし、ほとんどの他の浮動小数点演算の処理を遅くする。
【００１１】
この問題を回避するため、本技術は、丸められる浮動小数点値の指数に応じて、基本値をシフト量だけシフトすることにより丸め値を生成するシフト回路、および生成された丸め値を浮動小数点値の仮数に加算するための加算回路を提供する。合計値内に残るいずれの小数値ビット値も、マスクを合計値に適用することによりクリアできる。シフトは丸め値を生成するために適用されるので、仮数に対してシフトは必要でなく、そのため、仮数とシフトされた丸め値との加算から得られる合計値は、正規化された浮動小数点値である。後続の左シフトを実行する必要がなく、そのため、整数浮動小数点への丸め演算を実行するための効率的なハードウェア機構が実装できる。
【００１２】
ＦＲＩＮＴ命令を実行する全ての事例に対して、シフト回路、加算回路、マスク生成回路およびマスキング回路を使用する必要はないことが理解されるであろう。丸められる浮動小数点値の値が、シフト、加算およびマスキングを実際に実行する必要なしで、丸められた結果が容易に判断できるような事例があり得る。例えば、丸められる浮動小数点値が既に整数である場合、丸めはその値に影響を及ぼさず、そのため、入力値をそのまま出力レジスタに書き込むことができる。また、浮動小数点値の大きさが１未満の場合、丸められた結果は０または１であり、これは、整数浮動小数点への丸め演算の完全な実行を必要とすることなく、判断できる。従って、制御回路は、処理回路の完全な丸め機能を使用する必要があるかどうかを、命令ごとに判断し得る。
【００１３】
同等な左シフトを使用することにより丸め値を構築することは可能であるが、丸め値を生成するために、基本値を右シフトすることが、シフト回路にとって最も好都合であり得る。
【００１４】
仮数のビットの数値は、指数の関数である。一般に、ビットのいくつかは１．０より大きいかまたは１．０に等しい値を表し（整数値ビット）、ビットのいくつかは１．０未満の値を表す（小数値ビット）。
【００１５】
丸め値は、浮動小数点値の仮数の最上位小数値ビットのビット位置に対応するビット位置で、先頭の非ゼロビットを有し得る。仮数の最上位小数値ビットは、２分の１（half）の値を表すビットである。仮数に２分の１を加算することおよび合計内のどの小数値ビットもクリアすることは、浮動小数点値を最も近い整数に丸めるための技術である。他の丸め技術は、２分の１を超えるが１未満の値を加算することにより実装できる。両方の場合において、丸め値の先頭の非ゼロビットが、最上位小数値ビット位置である。
【００１６】
基本値は、非ゼロ値を有する最上位ビットを有し得る。シフト回路は、基本値を（Ｅ−ＢＩＡＳ＋１）ビット位のシフト量だけ右シフトするように構成され得るが、ここでＥは浮動小数点値の指数を表し、ＢＩＡＳは浮動小数点値の指数バイアスを表す。このシフトは、先頭の非ゼロビットが、２分の１の値に対応する最上位小数値ビット位置にシフトされることを可能にする。
【００１７】
マスキング回路は、ビット単位のＡＮＤ演算を合計値およびマスクに適用するように構成されたＡＮＤゲートを含み得る。仮数の小数値ビット位置に対応するビット位置におけるマスクのビットは、ゼロのビット値を有し得るが、他方、仮数の整数値ビット位置に対応するビット位置におけるマスクのビットは、１のビット値を有し得る。このように、マスクは、整数浮動小数点値を生成するため、合計値の小数値ビットをクリアするために使用できる。
【００１８】
マスクは、例えば、マスク基本値をシフトすることによるなど、いくつかの方法で生成され得るが、丸め値に基づいて生成されることはマスクにとって好都合であり得る。これは、さらなるシフトを実行する必要性を回避できる。前述のように、丸め値の先頭の非ゼロビットは、最上位小数値ビット位置であり、これは、マスク内の先頭のゼロビットに対応する。従って、丸め値は、容易にマスクに変換できる。例えば、マスクは、丸め値の先頭の非ゼロビットよりも上位であるビット位置を非ゼロビット値に、およびマスクの残りのビット位置をゼロビット値にして、生成され得る。
【００１９】
処理回路は、ＦＲＩＮＴ演算のみならず、他の浮動小数点演算を実行することが可能であり得る。一例では、制御回路は、浮動小数点加算命令の実行に応答して、浮動小数点加算演算を実行するために処理回路を制御し得る。シフト回路および加算回路は、加算演算およびＦＲＩＮＴ演算の両方に対して使用され得る。ＦＲＩＮＴ演算および加算演算を実行するために回路を共有することにより、回路領域が縮小できる。
【００２０】
浮動小数点値は、２つの隣接した整数値の間に存在する。２つの整数値のどちらを丸め結果とすべきかを判断するための異なる規則が実装され得る。従って、処理回路は、ＦＲＩＮＴ演算中に、浮動小数点値がどの整数値に丸められるかを選択するための少なくとも１つの丸めモードが提供され得る。処理回路が、複数の丸めモードを有する場合、ＦＲＩＮＴ命令は、ＦＲＩＮＴ演算に対してどの丸めモードが使用されるべきかを指定し得る。例えば、異なる命令の演算コードが、各異なるＦＲＩＮＴ演算を制御するために使用され得るか、または単一の演算コードを有する命令が、どの丸めモードが使用されるかを指定する丸めモード指定フィールドを有し得る。
【００２１】
例えば、処理回路は、浮動小数点値を、最大の絶対値を有する、２つの隣接した整数のうちの１つに丸めるための、ゼロから離れる丸め（ＲＵ：round away from zero）丸めモードを有し得る。例えば、２．２５の値は、ＲＵ丸めモードでは整数３．０に丸められ得るが、−２．２５の値は整数−３．０に丸められるだろう。
【００２２】
ＲＵ丸めモードでは、基本値の全てのビットが、非ゼロビット値（０ｂ１１１１１１１…または１の２進列の基本値）を有し得る。基本値が丸め値を生成するためにシフトされる場合、丸め値は、各小数値ビット位置において非ゼロビット値を有し得、１０進演算を使用する場合に０．９９９…の１０進値に対応する。これは、丸め値を仮数に加算することおよびマスクを使用して合計の小数値ビットをクリアすることは、浮動小数点値よりも大きい隣接した整数という結果となるだろうということを意味する。例えば、０．９９９…を値２．２に加算すると、合計の３．１９９９…が得られ、小数値ビットをクリアすると、３．０の正しく丸められた整数浮動小数点値が得られる。整数浮動小数点への丸め演算が既に整数である値について実行される場合、０．９９９…の加算は、浮動小数点値の整数値ビットを変更せず、そのため、合計の小数値ビットのマスキングは、元の整数浮動小数点値をもたらす。
【００２３】
別の丸めモードは、浮動小数点値を、２つの隣接した整数浮動小数点値のうちの最も近い値に丸め、２つの整数浮動小数点値の真ん中にある浮動小数点値は、２つの整数浮動小数点値のうちの偶数値である１つに丸められるための、最近似値、偶数丸め（ＲＮＥ：round nearest, tie to even）丸めモードであり得る。例えば、値２．９は、最も近い整数浮動小数点値の３．０に丸められ得るが、値３．５および４．５は両方とも最も近い偶数の整数浮動小数点値の４．０に丸められるであろう。このモードは、２つの整数の真ん中にある値が常に切り上げられた場合に生じ得る、高い方の整数への丸めバイアスを回避するために有用であり得る。
【００２４】
ＲＮＥ丸めモードは、最上位ビットが非ゼロビット値を有し、残りのビットがゼロビット値を有する基本値（すなわち、０ｂ１０００…の基本値）を提供することにより、本技術内で実装され得る。従って、基本値が、丸め値を生成するためにシフトされる場合、丸め値は２分の１の値を有する。２分の１を仮数に加算して、いずれの小数値ビットもクリアすることにより、仮数が、最も近い整数浮動小数点値に丸められる。例えば、２分の１を２．３の値に加算すると、２．８の合計を生じ、小数値ビットをクリアすると、丸められた値の２．０が得られる。他方、２分の１を２．９の値に加算すると、３．４の合計を生じ、次いで、小数値ビットをクリアすると、丸められた整数浮動小数点値の３．０が得られ、それは、２．９に最も近い整数である。
【００２５】
ＲＮＥ丸めモードでは、２分の１を加算すると奇数値になる場合、それは、浮動小数点値が２つの整数の真ん中にあり、仮数の最下位整数値ビットがゼロビット値を有するときに生じるが、結果の値が、偶数値を生成するために修正される。本技術は、マスクを仮数および丸め値の合計に適用すると、仮数の最下位整数値ビットに対応するビット位置を有する合計値のビットをクリアできるように、マスクを修正することにより、偶数の結果を確実にする便利な方法を提供する。例えば、現在、最下位整数値ビット位置に対応する非ゼロビット値があるように、マスクは１ビット位置だけ左にシフトできる。これは、マスクが合計値に適用される場合に、偶数値を生成するために最下位ビットがクリアされるであろうことを確実にする。
【００２６】
別の丸めモードは、浮動小数点値を、最小の絶対値を有する、２つの隣接した整数浮動小数点値のうちの１つに丸めるための、ゼロ方向への丸め（ＲＺ：round towards zero）丸めモードであり得る。この丸めモードは、既存の整数値ビットを保持しながら、いずれの小数値ビットも捨てる、浮動小数点値の切り捨てに相当する。
【００２７】
ＲＺ丸めモードを使用して丸める場合、浮動小数点値の整数部分は同じままであるので、丸め定数を仮数の整数値部分に加算する必要がない。しかし、本技術は、もし、ＲＺ丸めモードを実行するために、他の丸めモードに対するのと同じ回路が使用されるならば、ＦＲＩＮＴ演算がより効率的に実装できることを認識する。従って、丸め値が、依然としてＲＺ丸めモードに対して計算され得、丸め値を生成した後、ゼロにされた丸め値を仮数に加算して合計値を生成する前に、丸め値の全てのビットがゼロに設定され得る。たとえ、ゼロにされていない丸め値がＲＺ丸めモードでの加算に必要なくても、マスクを生成可能にするために丸め値を計算することは依然として有用である。
【００２８】
別の態様から見ると、本発明は、前述のデータ処理装置に対応する仮想マシン実行環境を提供するために、コンピュータを制御するためのコンピュータプログラムを格納する持続性コンピュータ可読記憶媒体を提供する。従って、コンピュータは、前述の処理回路を実際には有する必要はないが、プログラム命令を、あたかもそれらが実際の回路上で実行されているかのように、実行するための実行環境を提供するための仮想マシンプログラムを実行し得る。
【００２９】
別の態様から見ると、本発明は、
浮動小数点値を整数浮動小数点値に丸めるための整数浮動小数点への丸め演算を実行するための処理手段であって、前記浮動小数点値が仮数および指数を有する、処理手段と、
整数浮動小数点への浮動小数点丸め命令の実行に応答して、整数浮動小数点への前記丸め演算を実行するために前記処理手段を制御するための制御手段と
を含むデータ処理装置であって、
前記処理手段が、
前記浮動小数点値の前記指数に応じて、基本値をシフト量だけシフトすることにより丸め値を生成するためのシフト手段と、
合計値を生成するために、前記丸め値を前記浮動小数点値の前記仮数に加算するための加算手段と、
前記仮数の小数値ビット位置に対応するビット位置を有する前記合計値のビットをクリアするためのマスクを生成するためのマスク生成手段と、
前記整数浮動小数点値を生成するために、前記マスクを前記合計値に適用するためのマスキング手段と
を含む、データ処理装置を提供し得る。
【００３０】
さらなる態様から見ると、本発明は、浮動小数点値を整数浮動小数点値に丸めるための整数浮動小数点への丸め演算を実行するための方法であって、前記浮動小数点値が仮数および指数を有する、当該方法を提供し得、前記方法は、
前記浮動小数点値の前記指数に応じて、基本値をシフト量だけシフトすることにより、丸め値を生成するステップと、
合計値を生成するために、前記丸め値を前記浮動小数点値の前記仮数に加算するステップと、
前記仮数の小数値ビット位置に対応するビット位置を有する前記合計値のビットをクリアするためのマスクを生成するステップと、
前記整数浮動小数点値を生成するために、前記マスクを前記合計値に適用するステップと
を含み、
前記方法は、整数浮動小数点への浮動小数点丸め命令の実行に応答して、処理回路によって実行される。
【００３１】
本発明のさらに特定の好ましい態様が、付随の独立クレームおよび従属クレームに示される。従属クレームの特徴は、必要に応じて、およびクレーム内に明示的に示されている以外の組み合わせで、独立クレームの特徴と組み合わされ得る。
【００３２】
本発明の前述、ならびに他の目的、特徴および利点は、添付の図面に関連して読まれる例示的な実施形態の以下の詳細な説明から明らかであろう。
【図面の簡単な説明】
【００３３】
【図１】浮動小数点数表現を示す。
【図２】ＦＲＩＮＴ演算を実行するための処理回路を示す。
【図３】ＦＲＩＮＴ命令を実行する方法を示す。
【図４】浮動小数点値をシフトする際に状態フラグを計算する例を示す。
【図５】浮動小数点演算を実行するための処理パイプラインの一部を示す。
【図６】本技術を使用したＲＵ丸めの一例を示す。
【図７】ＲＮＥ丸めの一例を示す。
【図８】ＲＺ丸めの一例を示す。
【図９】仮想マシン実施態様の一例を示す。
【発明を実施するための形態】
【００３４】
図２は、仮数１．Ｆおよび指数Ｅを有する浮動小数点値を整数浮動小数点値に丸めるためのＦＲＩＮＴ演算を実行するための処理回路２を有する処理装置の一部を概略的に示す。制御回路４は、ＦＲＩＮＴ演算を実行するために処理回路を制御するために提供される。制御回路４は、ＦＲＩＮＴ命令の実行に応答して、ＦＲＩＮＴ演算を実行するために処理回路２の様々な要素を制御するための制御信号を生成する。処理回路２は、例示された以外の他の要素を含み得ること、およびＦＲＩＮＴ演算を実行するために例示された要素は略図であり、同じ操作が他のハードウェアを使用して実行され得ることが理解されるであろう。
【００３５】
処理回路２は、丸められる浮動小数点値の仮数１．Ｆを格納するためのレジスタ８および丸め定数を構築するための基本値を格納するためのレジスタ１０を含む。処理回路２は、基本値Ｂを右シフトするための右シフター１２および、状態フラグＬ、Ｇ、Ｓを生成するために仮数１．Ｆを右シフトするための右シフター１４も含む。マルチプレクサ１６は、右シフター１２によって生成された丸め値またはゼロ値のいずれかを選択するように配置され、加算器１８は、合計値を生成するために、マルチプレクサ１６の出力をシフトされていない仮数１．Ｆに加算するために提供される。
【００３６】
マスク生成回路２０も、右シフター１２によって生成された丸め値に基づいてマスクを生成するために提供され、マスク修正回路２２は、マスクを修正するために提供されて、修正されたマスク（マスク´）を生成する。別のマルチプレクサ２４は、マスク生成回路２０によって生成されたマスク、またはマスク修正回路２２によって生成された修正されたマスクのいずれかを選択する。ＡＮＤゲート２６を含むマスキング回路が、選択されたマスクを加算器１８によって生成された合計値に適用するために提供される。ＡＮＤゲート２６の出力は、出力レジスタ３０に置かれる整数浮動小数点値である。
【００３７】
図３は、図２に示す処理回路２を使用してＦＲＩＮＴ命令を実行する方法を示す。ステップ５０で、制御回路４が、現在実行されている命令がＦＲＩＮＴ命令であるか否かを判断する。そうである場合、ステップ５２で、制御回路４が、（Ｅ−ＢＩＡＳ＋１）の値を判断するが、ここで、Ｅは、丸められている浮動小数点値の指数であり、ＢＩＡＳは、指数バイアス（例えば、単精度浮動小数点値に対して１２７）である。
【００３８】
（Ｅ−ＢＩＡＳ＋１）の値がＮよりも大きい場合（ここで、Ｎは、非暗黙の仮数ビットＦ（すなわち、仮数１．Ｆの暗黙のビット１を除く）の数である）、丸められる値は既に整数である。この場合、ステップ５４で、制御回路４が処理回路２を制御して、変更されていない浮動小数点値の仮数を出力する。
【００３９】
あるいは、ステップ５２で、（Ｅ−ＢＩＡＳ＋１）の値がゼロより小さいか、またはゼロに等しい場合、丸められる値の大きさは０と１との間であり、そのため、丸められた結果は、０または１のいずれかになるであろう。この場合、ステップ５６で、制御回路４が処理回路２を制御して、丸められた結果を生成し得る。この状況では、丸められた結果は、処理回路２の完全な加算およびマスキング機能を起動する必要なく、仮数および現在の丸めモードに直接基づいて計算できる。
【００４０】
他方、（Ｅ−ＢＩＡＳ＋１）の値がゼロより大きく、かつＮより小さいかまたはＮに等しい場合には、ステップ６０で、右シフター１４が仮数１．Ｆ（暗黙ビット１を含む）を（Ｎ−（Ｅ−ＢＩＡＳ））ビット位だけ右シフトする。これは、仮数を整数値に変換して、ステップ６２で、状態フラグＬ、Ｇ、Ｓの計算を可能にする。状態フラグＬ、Ｇ、Ｓは、浮動小数点値が偶数であるか奇数であるか、および浮動小数点値が２つの整数値の真ん中にあるかどうかに関する情報を提供する。これは、例えば、ＲＮＥ丸めモードにおいて、値が切り上げられるべきか、または切り下げられるべきかを判断するために有用である。
【００４１】
図４は、ステップ６０および６２で、状態フラグが生成され得る方法の一例を示す。浮動小数点値の仮数が整数に変換される（図４の例では、８ビット位だけ右シフトによって）場合、「最下位（least）」状態フラグＬは、シフトされた値の最下位ビットの値を取り、それは、元の仮数内の最下位整数値ビットに対応する。Ｌフラグは、浮動小数点値が偶数（Ｌ＝０の場合）か奇数（Ｌ＝１の場合）かを示す。
【００４２】
「ガード（guard）」フラグＧは、シフトされた結果から１ビット位だけ外にシフトされたビットの値を取り、それは、元の仮数の最上位小数値ビットに対応する。すなわち、仮数が整数に変換された場合に、このビットは右シフトに起因して失われたであろうが、ガードフラグＧがこのビットの値を保持して、元の仮数の小数値部が、０と０．４９９９…との間にあるか（Ｇ＝０の場合）、または０．５と０．９９９９…との間にあるか（Ｇ＝１の場合）を示す。
【００４３】
「スティッキー（sticky）」フラグＳは、最上位小数値ビットを除き、仮数の小数値ビットのいずれかが１の値を有する場合、１の値を取る。従って、スティッキーフラグＳは、最上位小数値ビット以外の小数値ビットのＯＲ結合に相当する。実際には、仮数の右シフト時に、シフトされた結果内でＳフラグ位置を超えてシフトされたビットのいずれかが１の値を有する場合、Ｓフラグは、フラグを１に設定することにより計算され得、その結果、いずれかのさらにシフトで出されたビットの値に関わらず、１の値を保持する。Ｓフラグは、浮動小数点値が整数値もしくは半整数値のちょうど上にあるか（Ｓ＝０の場合）、または整数値と半整数値との間のどこかにあるか（Ｓ＝１の場合）どうかを示す。
【００４４】
ステップ６０で、仮数が、Ｌ、ＧおよびＳフラグを計算する目的で、右シフトされることが理解されるであろう。右シフトされた仮数は、ＦＲＩＮＴ演算の残りに対して使用されない。
【００４５】
その一方、ステップ６４で、制御回路４が、整数浮動小数点への丸め演算に対して、どの丸めモードが使用されるかを判断する。各丸めモードは、２つの隣接した整数浮動小数点値間にある浮動小数点値に対して、どの整数浮動小数点値に浮動小数点値が丸められるかを判断するための異なる規則を提供し得る。例えば、処理回路２は、以下の丸めモードのうちの任意の１つまたは複数を提供し得る。
・ゼロから離れる丸め（ＲＵ）丸めモード。ＲＵ丸めモードでは、２つの整数浮動小数点値の間にある浮動小数点値が、最大の絶対値を有する、２つの整数浮動小数点値のうちの１つに丸められる。例えば、ＲＵ丸めモードでは、２．９の値は、整数３．０に丸められ得、−３．２の値は−４．０の値に丸められるだろう。
・浮動小数点値を、２つの隣接した整数浮動小数点値のうちの最も近い値に丸め、２つの整数浮動小数点値の真ん中にある浮動小数点値が、整数浮動小数点値のうちの、偶数値である１つに丸められるための、最近似値、偶数丸め（ＲＮＥ）丸めモード。例えば、２．９の値は、整数３．０に丸められ得るが、２．５の値は、最も近い偶数の整数値２．０に丸められるであろう。
・浮動小数点値を、最小の絶対値を有する、２つの整数浮動小数点値のうちの１つに丸めるためのゼロ方向への丸め（ＲＺ）丸めモード。例えば、２．３および−２．８の値は、それぞれ、整数値２．０および−２．０に丸められるであろう。
・浮動小数点値を、２つの整数浮動小数点値のうちの、正の無限大に最も近接している１つに丸めるための、正の無限大への丸め（ＲＰ：round towards positive infinity）丸めモード。例えば、２．２の値は、整数値の３．０に丸められ得、−２．４の値は整数値の−２．０に丸められるであろう。
・浮動小数点値を、負の無限大に最も近接している、２つの隣接した整数浮動小数点値のうちの１つに丸めるための、負の無限大への丸め（ＲＭ：round towards negative infinity）丸めモード。例えば、３．２の値は、整数値の３．０に丸められ得、−６．９の値は−７．０に丸められるであろう。
【００４６】
本明細書の残りは、ＲＵ、ＲＺおよびＲＮＥ丸めモードのみについて説明する。これは、ＲＰおよびＲＭ丸めモードは、他の丸めモードに対する処理を使用して実装できるためである。ＲＰ丸めモードは、丸められる浮動小数点値が正である場合にＲＵ丸めモードを、また、浮動小数点値が負である場合にＲＺ丸めモードを使用して実装できる。逆に、ＲＭ丸めモードは、丸められる浮動小数点が正である場合にＲＺ丸めモードを、丸められる浮動小数点が負である場合にＲＵ丸めモードを実行することにより実装できる。浮動小数点値の符号ビットが、ＲＰおよびＲＭの事例に対してＲＵまたはＲＺ丸めを使用するかを選択するために使用できる。従って、ＲＵおよびＲＺ丸めに対する後の参照は、暗黙的にＲＰおよびＲＭ丸めの特徴も記述する。
【００４７】
従って、ステップ６４で、丸めモードが判断される。例えば、制御回路４は、ＦＲＩＮＴ命令の演算コードに基づいて、またはどの丸めモードが使用されるべきかを指定する命令内のフィールドに基づいて、これを行い得る。あるいは、処理回路が１つの丸めモードだけをサポートする場合は、この丸めモードが使用される。ＲＰまたはＲＭ丸めモードは、丸められる値の符号ビットに基づいて、ＲＵおよびＲＺ丸めモードのうちの適切な１つを選択することにより使用できる。使用される丸めモードがＲＵの場合は、ステップ６６で、制御回路４が処理回路２を制御して、０ｂ１１１１１１１１…の基本値を基本値レジスタ１０に格納する。他方、丸めモードがＲＺまたはＲＮＥ丸めモードの場合は、ステップ６８で、制御回路４が処理回路２を制御して、０ｂ１０００００００…の基本値を基本値レジスタ１０にロードする。
【００４８】
ステップ７０で、右シフター１２が、基本値レジスタ１０内に格納された基本値を、（Ｅ−ＢＩＡＳ＋１）ビット位のシフト量だけ右シフトして、丸め値Ｒを生成する。ステップ７２で、制御回路４が、どの丸めモードが使用されているかを判断する。丸めモードがＲＰまたはＲＮＥの場合は、ステップ７４で、制御回路４がマルチプレクサ１６を制御して、右シフター１２によって生成された丸め値Ｒを加算回路１８に提供し、それは、丸め値Ｒを仮数１Ｆに加算する。他方、丸めモードがＲＺ丸めモードの場合は、ステップ７６で、制御回路４がマルチプレクサ１６を制御して、ゼロ値を加算器１８に提供することにより丸め値をゼロに設定し、それは、ゼロ値を仮数１Ｆに加算する。加算回路１８によって実行された加算の結果が、合計値として出力される。
【００４９】
その一方、ステップ８０で、制御回路４が、マスク生成回路２０を制御して、右シフター１２によってステップ７０で生成された丸め値Ｒを使用してマスクを生成する。ＲＺ丸めモードの事例においてさえ、マスク生成器２０は依然としてそのゼロに設定されていない状態で丸め値Ｒを使用する。マスク生成器２０は、１のビット値を丸め値Ｒの先頭の非ゼロビットの位置よりも上位である任意のビット位置に、および０のビット値を任意の残りのビット位置に設定して、マスクを生成する。丸め値Ｒの先頭の非ゼロビットが、仮数１．Ｆの最上位小数値ビットに対応するビット位置にあるので、マスクは、仮数１．Ｆの整数値ビット位置に対応する１のビット値、および仮数１．Ｆの小数値ビット位置に対応する０のビット値を有するであろう。
【００５０】
ステップ８２で、制御回路４は、丸めモードがＲＮＥ丸めモードであるかどうかをチェックし、かつ、右シフター１４によってステップ６２で生成された状態フラグＬ、Ｇ、Ｓの値をチェックする。丸めモードがＲＮＥ丸めモードでないか、Ｌフラグがゼロに等しくないか、Ｇフラグが１に等しくないか、またはＳフラグがゼロに等しくない場合、マスクは修正される必要がなく、そのため、ステップ８４で、制御回路４がマルチプレクサ２４を制御して、修正されていないマスクをＡＮＤゲート２６に渡す。ＡＮＤゲート２６は、加算回路１８によって生成された合計にそのマスクを適用する。これは、整数の仮数を生成するために、合計の小数値ビットをクリアする。整数の仮数は、他の浮動小数点演算を実行する場合に処理回路２によってアクセスできる、出力レジスタ３０内に置かれる。
【００５１】
他方、ステップ８２で、ＲＮＥ丸めモードが使用されていると判断される場合、マスクは、浮動小数点値が２つの整数の真ん中にあるときに、値が偶数値に丸められることを確実にするために修正される必要があり得る。状態フラグがＬ＝０、Ｇ＝１、Ｓ＝０の値を有する場合、元の浮動小数点は２つの整数のちょうど真ん中にあり、値の切り上げは、奇数値という結果になるであろう。従って、この場合、マスクは、ステップ８６で、マスク生成器２０によって生成されたマスクを１ビット位だけ左シフトすることにより、マスク修正回路２２によって修正される。これは、小数値ビット位置に加えて、仮数の最下位整数値ビット位置も０の値を有するマスクビットに対応する、マスクを生成する。マルチプレクサ２４は、修正されたマスクをＡＮＤゲート２６に提供し、それは、修正されたマスクを、加算回路１８によって生成された合計に適用する。これは、合計値の小数値ビットを全てクリアし、最下位整数値ビットもクリアして、要求されたＲＮＥ丸めモードのように、丸められた整数浮動小数点値が偶数値であることを確実にする。結果は、次いで、出力レジスタ３０に置かれる。
【００５２】
故に、図２および図３に示すように、整数浮動小数点への丸め演算の異なる丸めモードがハードウェアで実装でき、従って、操作の異なる段階を実行するために複数命令を使用するソフトウェア実施態様よりも迅速に実行できる。さらに、整数浮動小数点への丸め演算の加算およびマスキング部が、シフトされた仮数ではなく、元の仮数について実行されるので、ＡＮＤゲート２６によって生成される結果は、既に正規化され、そのため、浮動小数点値を正規化するためにさらに左シフトを実行する必要がない。従って、左シフターを処理パイプラインの終わりに追加する必要がなく、このようにして、処理回路２を使用した浮動小数点演算のより迅速な処理を可能にする。
【００５３】
ＦＲＩＮＴ演算を実行するための回路は、他の浮動小数点演算を実行するための回路と、少なくとも一部共有され得る。図５は、浮動小数点加算演算を実行するための処理回路の一例を示す。加算演算を実行する場合、加算される２つの浮動小数点値が、処理回路２の段階Ｅ１において、レジスタｏｐａおよびｏｐｂに置かれる。段階Ｅ３で、各オペランド内に同じ重みを有するビット値を位置合わせするために、オペランドの１つが、２つの値の指数間の差に応じたシフト量だけシフトされ得る。次いで、段階Ｅ４で、位置合わせされた値が、合計値を生成するために加算される。
【００５４】
図５に示す処理回路２の一部が、ＦＲＩＮＴ演算を実行するために再使用できる。丸められる仮数が、図２のレジスタ８に対応するレジスタｏｐａ内に置かれ得、基本値Ｂが図２のレジスタ１０に対応するレジスタｏｐｂ内に置かれ得る。次いで、図２に示す右シフター１２が、図５の処理回路２の段階Ｅ３における右シフターを使用して実装できる。また、図２の加算器１８は、図５の段階Ｅ４で示す加算器を使用して実装できる。この例では、図２のマスク生成および修正回路２０、２２、ＡＮＤゲート２６および右シフター１４は、加算回路と共有されず、そのため、図５に示す加算回路に加えて提供されるであろう。可能であれば、異なる処理操作に対して回路を共有することにより、電力消費および回路領域を削減できる。
【００５５】
故に、ＦＲＩＮＴ演算を実行する際に、仮数および基本値を段階Ｅ１およびＥ２で回路に入力できる。段階Ｅ３で、丸め値が、右シフター１２を使用して、基本値から構築できる。段階Ｅ４で、仮数および丸め値が、合計値を生成するために加算できる。マスクは、図２に示すような回路２０、２２、２４、２６を使用して、生成されて、合計に適用されるであろう。
【００５６】
図５から、処理回路の段階Ｅ４は、仮数および丸め値の２つの合計を実際に生成すると考えられるであろう。これは、浮動小数点加算演算およびＦＲＩＮＴ演算の両方に対する事例であり得る。合計値が正規化されているときに、丸めが指数において増加を生じる場合に備えて、２つの合計が計算される。指数に対する２つの可能な結果に対して２つの合計を計算し、次いで、正しい結果である合計を選択することにより、段階Ｅ４後に、結果値を正規化する必要がなく、そのため、演算を実行するために必要とされる処理サイクルの数が削減できる。
【００５７】
図６は、本技術を使用してＲＵ丸めを実行する一例を示す。例えば、整数浮動小数点への丸め（ＦＲＩＮＴ）命令が、２．２５の浮動小数点値のＲＵ丸めを実行するために実行されて、３．０の整数浮動小数点結果を生じる。２．２５に相当する浮動小数点値の格納された形式を図６に示す。暗黙ビットを含め、仮数１．Ｆが０ｂ１００１００００…である。ＲＵ丸めモードが使用されているので、基本値Ｂが０ｂ１１１１１１１１…に設定される。Ｌ、ＧおよびＳフラグはＲＵ丸めモードに対して関連性がないので、これらのフラグの計算は図６に示されていないが、これらのフラグは、たとえ整数浮動小数点への丸め演算に対して実際には必要でなくても、依然として計算され得ることが理解されるであろう。
【００５８】
指数Ｅが１２８で、指数バイアスが１２７であり、そのためＥ−ＢＩＡＳ＋１＝２である。従って、基本値Ｂは、図６に示すように、２ビット位だけ右シフトされて、０ｂ００１１１１１１…の丸め値Ｒを生成する。丸め値は、次いで、マスク生成回路２０によってマスク内で変換されて、丸め値Ｒ内の先頭の非ゼロビットの左のビット値が１の値を有し、他のビットが０の値を有する、０ｂ１１００００００…のマスクを生じる。加算回路１８が、次いで、仮数１．Ｆを丸め値Ｒに加算して、０ｂ１１００１１１１…の合計値を生成する。マスクが、次いで、全ての小数値ビットをクリアするために、その合計値に適用されて、０ｂ１１００００００…の結果を生じる。丸められた仮数内の暗黙の１が、次いで除去されて、仮数の残り（０ｂ１００００…）が出力レジスタ３０内に格納される。図６の下部に示すように、この値は、３．０の整数浮動小数点値に対応し、それは、ＲＵ丸めに対する正しい丸められた結果である。
【００５９】
図７は、本技術を使用してＲＮＥ  ＦＲＩＮＴを実行する一例を示す。この例では、ＦＲＩＮＴが６．５の値に適用される。ＲＮＥ丸めが使用され、値が２つの整数の真ん中にあるので、値は、整数値の６．０である、最も近い偶数値に丸められる。浮動小数点値６．５の格納された表現が、図７の上部に示される。暗黙の１ビットが格納された仮数と組み合わされて、図７に示す、０ｂ１１０１００００…の仮数１．Ｆを生成する。指数Ｅが１２９で、指数バイアスＢＩＡＳが１２７で、仮数の明示的に示されたビットの数（暗黙の１ビットを除く）Ｎが２３である。従って、Ｅ−ＢＩＡＳ＋１＝３およびＮ−（Ｅ−ＢＩＡＳ）＝２１である。
【００６０】
ＲＮＥ丸めでは、偶数値をもたらすためにマスクが修正される必要があるかどうかを判断するために、状態フラグＬ、Ｇ、Ｓが必要とされる。それ故、Ｌ、ＧおよびＳフラグの計算が図７に示されている。Ｎ−（Ｅ−ＢＩＡＳ）＝２１なので、右シフター１４が、仮数１．Ｆを２１ビット位だけ右シフトして、仮数を整数値に変換する。Ｌ、Ｇ、Ｓフラグは、次いで、図４に示すように計算されて、図７に示すように、Ｌ＝０、Ｇ＝１、Ｓ＝０を生じる。これは、元の仮数の整数値ビットが偶数値を有すること、および小数値ビットがちょうど２分の１の値を有することを示す。
【００６１】
ＲＮＥ丸めが実行されているので、基本値Ｂは０ｂ１０００００００…である。Ｅ−ＢＩＡＳ＋１＝３なので、右シフター１２が、基本値Ｂを３ビット位だけ右シフトして、０ｂ０００１００００…の丸め値Ｒを生じる。マスク生成器２０は、丸め値Ｒをマスク０ｂ１１１００００００…に変換する。ＲＮＥ丸めが使用され、Ｌ＝０、Ｇ＝１およびＳ＝０であるので、マスクは、偶数の丸め結果を確実にするために修正される必要がある。マスク修正回路２２は、従って、マスクを１ビット位だけ左シフトして、修正されたマスク０ｂ１１００００００…を生じる。
【００６２】
その一方、加算回路１８は、シフトされていない仮数１．Ｆを丸め値Ｒに加算して、０ｂ１１１０００００…の合計を生成する。修正されたマスクが次いで、その合計に適用されて、０ｂ１１００００００…の丸められた仮数を生成し、その中で、小数値ビットおよび最下位整数値ビットの両方がクリアされている。先頭の１が次いで除去されて、残りのビットがＦとして出力レジスタ３０に格納される。図７の下部に示すように、格納された丸められた値は、６．０の正しい丸められた値に対応する。
【００６３】
図８は、６．７５の値を整数値６．０に丸めるために、ＲＺ丸めを使用する一例を示すが、それは、ゼロの最も近くにある隣接した整数である。６．７５の値は、図８の上部に示されたコード化を使用して、浮動小数点形式で表される。暗黙の先頭の１ビットを含め、仮数１．Ｆは０ｂ１１０１１０００…である。指数Ｅ＝１２９で、指数バイアスＢＩＡＳ＝１２７であり、そのためＥ−ＢＩＡＳ＋１＝３である。再度、Ｌ、ＧおよびＳフラグの計算は、これはＲＺ丸めに必要ではないために、図示されていないが、処理回路２はそれでもこれらのフラグを計算し得ることが理解されるであろう。
【００６４】
ＲＺ丸めが使用されるので、０ｂ１０００００００…の基本値Ｂが基本値レジスタ１０内にロードされる。ＲＺ丸めに対しては、丸め値が、それを仮数に加算する前に、ゼロに設定されるので、必要なら、先頭の非ゼロビットを有する任意の他の基本値（例えば、０ｂ１１１１１１１１…または０ｂ１０１０１０１０…）もＲＺ丸めに対して使用でき、そのため、重要なのは、正しいマスクを生成するために、基本値の先頭ビットが１の値を有することである、ということが理解されるであろう。基本値Ｂは、３ビット位だけ右シフトされて、丸め値０ｂ０００１００００…を生成する。マスク生成回路２０は、丸め値Ｒを使用して、合計値の小数値ビットをクリアするためのマスク０ｂ１１１０００００…を生成する。
【００６５】
ＲＺ丸めが使用されているので、丸め値Ｒが、マルチプレクサ１６によってゼロに設定され、その後、そのゼロに設定された丸め値を仮数１．Ｆに加算する。それ故、仮数１．Ｆは、合計値内で変化されないままである。マスク生成回路２０によって生成されたマスクが、次いで、合計に適用されて、丸められた整数浮動小数点値が生成される。仮数の先頭ビットが除去されて、仮数の残りの部分がレジスタ３０に格納される。図８の下部に示すように、丸められた値の表現は、６．０の正しい整数値に相当する。
【００６６】
図９は、いくつかの実施形態で使用され得る仮想マシン実施態様を示す。前述の実施形態は、関係する技術をサポートする特定の処理ハードウェアを操作するための装置および方法の観点から、本技術を実装するが、いわゆる、ハードウェア装置の仮想マシン実施態様を提供することも可能である。これらの仮想マシン実施態様は、仮想マシンプログラム１０２をサポートするホストオペレーティングシステム１０４を通常実行するホストプロセッサ１０６上で実行する。合理的な速度で実行する仮想マシン実施態様を提供するために、通常、大規模で強力なプロセッサが必要とされるが、かかるアプローチは、互換性または再使用のために、別のプロセッサにネイティブなコードを実行する要望がある場合など、ある状況においては正当化され得る。仮想マシンプログラム１０２は、アプリケーションプログラム（またはオペレーティングシステム）１００を実行して、実際のハードウェア装置によるプログラムの実行によって与えられ得るのと同じ結果を与えることができる。従って、プログラム命令は、仮想マシンプログラム１０２を使用して、アプリケーションプログラム１００内から実行され得る。
【００６７】
本発明の例示的な実施形態が、添付の図を参照して本明細書で詳述されてきたが、本発明は、それらの正確な実施形態に制限されないこと、ならびに様々な変更および修正が、添付の請求項によって定義される本発明の範囲および精神から逸脱することなく、当業者によりその中で達成できることを理解されたい。
【図１】
0006006803.tif 000002
【図２】
0006006803.tif 000003
【図３】
0006006803.tif 000004
【図４】
0006006803.tif 000005
【図５】
0006006803.tif 000006
【図６】
0006006803.tif 000007
【図７】
0006006803.tif 000008
【図８】
0006006803.tif 000009
【図９】
0006006803.tif 000010