(57)【特許請求の範囲】
【請求項１】
プロセッサにおいて丸め命令および直接値（immediate  value）を受領する段階であって、前記直接値は複数のフィールドを含み、前記直接値は前記丸め命令とともに提供される、段階と；
前記直接値の丸めモード・オーバーライド指標がアクティブであるかどうかを判定する段階と；
もしアクティブであれば、前記直接値の丸めモード・フィールドを取得する段階であって、前記丸めモード・フィールドは前記オーバーライド指標とは別個である、段階と、
前記丸め命令に応答して、前記直接値の丸めモードに従って前記プロセッサの浮動小数点ユニットにおいてソース・オペランドに対して丸め処理を実行する段階と；
前記丸め処理の間に精度例外が発生したかどうかを判定する段階と；
もし発生していれば、前記直接値の精度例外フィールドの値が精度例外が抑制されるべきでないことを示す場合には状態レジスタ中の精度例外フラグをセットし、前記精度例外フィールドの値が精度例外が抑制されるべきであることを示す場合には前記精度例外フラグをセットしない、段階とを有する、
方法。
【請求項２】
前記直接値の前記丸めモード・オーバーライド指標がアクティブでなければ、前記丸め命令に応答して、前記プロセッサの制御レジスタ内に記述されている丸めモードに従って前記丸め処理を実行する段階をさらに有する、請求項１記載の方法。
【請求項３】
前記丸め処理の実行の間、デフォルト丸めモードを含む制御レジスタの値を維持することをさらに含む、請求項１記載の方法。
【請求項４】
第一の単一命令複数データ（SIMD）オペランドの少なくとも一つの要素を丸める第一の命令を、前記第一の命令によって規定される、複数のモードのうちの一つのモードに従って実行する実行論理と、
前記実行論理に結合されたコントローラとを有するプロセッサであって、
前記コントローラは前記第一の命令および該第一の命令に関連付けられた、複数のフィールドを含む直接データ要素を受領し、前記直接データ要素のオーバーライド指標に基づいて、該オーバーライド指標を復号することによってデフォルト丸めモードがオーバーライドされるべきかどうかを判定し、前記実行論理に丸めを制御するよう制御情報を送付し、
前記実行論理は、デフォルト丸めモードがオーバーライドされるべきである場合、前記直接データ要素の、前記オーバーライド指標とは別個の丸めモード・フィールドに従って、前記少なくとも一つの要素を丸め、前記丸めの間に精度例外が発生したかどうかを判定し、もし発生していれば、前記直接データ要素の精度例外フィールドの値が精度例外が抑制されるべきでないことを示す場合には状態レジスタ中の精度例外フラグをセットし、前記精度例外フィールドの値が精度例外が抑制されるべきであることを示す場合には前記精度例外フラグをセットしない、
プロセッサ。
【請求項５】
前記複数のモードのうちの少なくとも一つのモードは前記実行論理の制御レジスタに記憶されているデフォルト丸めモードとは異なる、請求項４記載のプロセッサ。
【請求項６】
前記複数のモードのうちの前記少なくとも一つのモードに従っての前記第一の命令の実行の間、前記デフォルト丸めモードが前記制御レジスタ内に記憶されたままである、請求項５記載のプロセッサ。
【請求項７】
前記実行論理が前記少なくとも一つの要素を丸めて整数の値をもつ浮動小数点値にし、前記第一のSIMDオペランドは限られた精度の浮動小数点値を含む、請求項４記載のプロセッサ。
【請求項８】
前記実行論理が前記少なくとも一つの要素を丸めて整数値にし、前記第一のSIMDオペランドは浮動小数点値を含む、請求項４記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は丸め処理に関する。
【背景技術】
【０００２】
プロセッサはデータに対してさまざまな数学的操作を実行する。データは、たとえば種々の本来的精度をもつ整数値および浮動小数点（FP:  floating  point）値を含む種々の型のものであってよい。FP値を扱うとき、数学的操作、そうした操作のうちでも乗算または加算といった演算の結果は、より低精度フォーマットに変換される必要のある結果を生じる。したがって、FP結果を丸めるよう丸め処理（rounding  operation）が実行されることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
そのような丸め処理は種々の数学的演算の一部として実行されることができるが、一部のプロセッサ・アーキテクチャでは、データ要素に対して丸め処理を、単体の操作として実行する、あるいは複数の複雑なステップの必要なしに実行するための機能が限られていたり、あるいは全くなかったりする。たとえば、プロセッサはFP値の整数値への丸めをデフォルトの丸めモードに従って実行するよう構成されていることがある。しかしながら、所与のソース・オペランドは、さまざまな理由のため、別のモードに従って丸められる必要があることがある。そのような処理を実施するため、プロセッサの現在の構成設定状態（configuration  state）を保存し、所望される丸めモードに関する情報を含む新しい構成設定状態をロードし、丸め処理を実行し、もとのプロセッサ状態を復元するという入り組んだステップが生起することがある。これらの処理は時間がかかり、計算量を高め、過剰なプロセッサ・サイクルを消費することがある。さらに、プロセッサにおいて実行される丸め処理は典型的には限られた量の丸めモード、すなわち米国電気電子技術者協会（IEEE:  Institute  of  Electrical  and  Electronics  Engineers）規格754-1985（1985年発表）に述べられている丸めモードに従って生起するが、新しいプログラミング言語が進化するにつれ、他の丸めモードのサポートが望ましいことがありうる。
【課題を解決するための手段】
【０００４】
解決しようとする課題は請求項記載の発明によって解決される。
【図面の簡単な説明】
【０００５】
【図１】本発明のある実施形態に基づく方法の流れ図である。
【図２】本発明のある実施形態に基づくプロセッサの一部のブロック図である。
【図３】本発明のある実施形態に基づく命令との関連で使用されるべき直接データ要素（immediate  data  element）のブロック図である。
【図４】本発明のある実施形態に基づく丸め処理を実行する方法の流れ図である。
【図５】本発明のある実施形態に基づくシステムのブロック図である。
【発明を実施するための形態】
【０００６】
さまざまな実施形態において、プロセッサにおいて、たとえば該プロセッサの浮動小数点ユニット（FPU:  floating  point  unit）において丸め処理を効率的に実行するために、命令セット・アーキテクチャ（ISA:  instruction  set  architecture）の複数の丸め命令が使用されうる。米国電気電子技術者協会（IEEE:  Institute  of  Electrical  and  Electronics  Engineers）規格754-1985（1985年発表）（本稿では二進浮動小数点演算のためのIEEE規格またはIEEE規格754）に述べられている丸めモードに加えて、追加的な丸めモードに従って丸め処理を実行するために諸実施形態が使用されうる。たとえばいくつかの実施形態では、命令が、下記に述べるような中間点で零から遠いほうへの（halfway  away  from  zero）丸め処理および零から遠いほうへの（away  from  zero）丸め処理のサポートを提供してもよい。さらに、これらの丸め処理は多くのデータ型とともに使用されうる。いくつかの実装では、丸め処理は単一命令複数データ（SIMD:  single  instruction  multiple  data）データ型に対して実行されることができ、それにより命令は、パックされたデータ要素といった拡張されたデータ型に対して実行されることができる。パックされたデータ要素（packed  data  element）では、複数のデータ要素が、プロセッサの拡張されたレジスタのような単一の位置にパックされる。
【０００７】
柔軟性を受け入れ、効率的な命令実行を提供するために、諸実施形態は、ソース・オペランドに対して実行されることのできるISAベースの命令を提供しうる。これらのISAベースの命令は、ソース・オペランドの最も近い整数値への丸めを実行する丸め処理のさまざまな実装であってよい。そのようなソース・オペランドはすでに限られた精度のフォーマットにあってもよい（すなわち、算術演算の結果ではなくレジスタ／メモリから読まれたデータ）。そのような命令は、マルチメディア・アプリケーション、ゲーム・アプリケーションなどを含むさまざまなアプリケーションに使用されうる。さらに、諸実施形態は、さまざまなプログラミング言語に適用可能でありうる丸め処理を可能にするコンパイラ・ベースのプリミティブにおいて実装されてもよい。さまざまな実施形態において、丸め命令は、ソース・オペランドとして浮動小数点数を取り、それを最も近い整数値に丸め、結果をやはり整数値をもつ浮動小数点値として記憶しうることを注意しておく。
【０００８】
さまざまな実施形態において、実行の制御は、少なくとも部分的には、命令とともに受領された情報、たとえば命令とともに受信された直接データ（immediate  data）に基づいて扱われうる。種々の実装において、そのような直接データは、プロセッサによって現在使用中のデフォルト丸めモードをオーバーライドしうる。そのようなオーバーライドの場合には、直接データはさらに丸めモードの制御を提供しうる。さらに、直接データは精度例外（precision  exceptions）のオーバーライド（すなわち精度抑制（precision  suppression））を提供しうる。こうして、直接データは、特定の丸め処理の非固定制御（non-sticky  control）を提供し、それにより該処理が最小限のサイクル数で実行されうるようにするために使用されうる。これがそうでありうるのは、命令に付随して受信された直接データが丸め制御情報を含むとき、構成設定レジスタ内に存在するそのような情報を更新する必要がないことがありうるからである。ここで、構成設定レジスタは、拡張された制御・状態レジスタ（CSR:  control  and  status  register）、たとえばインテル（登録商標）アーキテクチャ（たとえばIA-32アーキテクチャ）に従ってプロセッサ内に存在するマルチメディア拡張CSR（MXCSR:  multimedia  extension  CSR）のようなものである。しかしながら、諸実施形態はさまざまなプロセッサ型において使用されうること、本発明の範囲がこの点で限定されるものではないことを理解されたい。
【０００９】
ここで図１を参照すると、本発明のある実施形態に基づく方法の流れ図が示されている。図１に示されるように、方法１００は、プロセッサ内で丸め命令および付随する直接データを受信することによって始まりうる（ブロック１１０）。たとえば、多くの実装において、ユーザー・レベル命令、たとえばISAベースの命令がプロセッサにおいて受信されうる。該命令に加え、それに付随する直接データが提供されうる。のちにさらに述べるように、そのような直接データは、処理のさまざまな側面を制御するための複数のフィールドを含みうる。
【００１０】
引き続き図１を参照すると、制御はブロック１１０から菱形１１５に進む。菱形１１５では、直接データが構成設定レジスタの丸めモードをオーバーライドするかどうかが決定される。すなわち、直接データのフィールドが、デフォルト丸めモードがオーバーライドされるべきかどうかを示すオーバーライド指標を含んでいてもよい。さまざまな実施形態において、そのようなデフォルト丸めモードは、CSR、たとえばMXCSRのような構成設定レジスタのフィールド内に存在していてもよい。ただし、本発明の範囲はこの点に関して限定されるものではない。直接データがオーバーライド指標を含む場合、制御はブロック１２０に進む。ブロック１２０では、前記命令によって指定されたソース・オペランドが、プロセッサのたとえば浮動小数点ユニット（FPU）に送付されうる。さらに、ソース・オペランドは、丸め処理の丸めモードを制御するための情報とともに送付されうる。制御情報は直接データから、すなわち直接データの丸めモード・フィールドに記述されているとおりに得られてもよい。のちにさらに述べるように、いくつかの実装では、プロセッサの制御選択器ユニットのような制御ユニットが前記命令および前記直接データを受信し、前記直接データを復号してデフォルト丸めモードがオーバーライドされるべきかどうかを決定し、もしそうであれば、直接データに記述されている丸めモードを得る。
【００１１】
引き続き図１を参照すると、菱形１１５においてもし代わりに、直接データがオーバーライド指標を含まないと判定される場合、制御はブロック１２５に進む。ブロック１２５では、ソース・オペランドは、FPUにおける実行のために送付されうる。さらに、丸め処理が、たとえば構成設定レジスタに記述されているデフォルト丸めモードに基づいて実行されうる。
【００１２】
いずれにせよ、ブロック１２０および１２５のどちらからも、制御は、丸め処理が実行されうるブロック１３０に進む。丸め処理は、入力（すなわちソース・オペランド）の端数精度を丸めモードに従って除去する。さまざまな実施形態において、丸め処理を実行する種々の仕方が実現されうる。たとえば、多くの実装では、丸め処理を実行するために、FPUが加算器および丸めユニットを含みうる。IEEE規格754に従った丸めモードを実行するために、加算器は第一のオペランドとしてのソース・オペランドと、第二のオペランドについての定数値、たとえば0とを提供されうる。加算器の出力は次いで丸めユニットに供給され、該丸めユニットが前記の結果を選択された動作モードに従って丸めうる。こうして、丸めユニットは、その入力値を丸めて整数値をとる浮動小数点結果（integral  valued  floating  point  result）にしうる。
【００１３】
他の諸実施形態では、IEEE規格754の丸めモードに加えて、追加的な丸めモードが実行されうる。そのような実装では、FPU加算器はソース・オペランドと、第二のオペランドとしての、ソース・オペランドの値および丸めモードに基づく特定のデータ値を供給されうる。これについてはのちにさらに述べる。次いで、丸め処理が前記結果に対して実行されうる。ここで、丸め処理はIEEE規格754の処理でもよい。拡張丸めモードのさらに別の実装では、ソース・オペランドおよび0の値がFPU加算器への入力に与えられてもよく、結果として得られる値が次いで、丸めユニットに送られた制御情報に従って丸められてもよい。
【００１４】
実行後、丸め処理の結果は行き先〔デスティネーション〕オペランドに記憶されてもよい（ブロック１４０）。さまざまな実施形態において、行き先オペランドはプロセッサの拡張されたメモリ・レジスタであってよい。ただし、本発明の範囲はそのように限定されるものではない。さらに、丸め処理の間に精度例外が発生したかどうかが判定されてもよい（菱形１４５）。すなわち、丸め処理が例外を起こす不精確な結果を発展させたかどうかが判定されうる。もしそうでなければ、方法１００は終結しうる。
【００１５】
もしその代わり、精度例外が起こされている場合、制御は菱形１５０に進みうる。菱形１５０では、直接データが精度例外を抑制するフィールドを含むかどうかが判定されうる。すなわち、いくつかの実装では、直接データが抑制フィールドを含んでいてもよい。このフィールドの値が、精度例外が持ち上がった場合に関連する丸め命令が精度例外を抑制すべきかどうかを示しうる。精度抑制指標が存在する場合、たとえ精度例外が発生しても、さらなる行動は取られず、方法１００は終結しうる。もしその代わり、直接データが精度例外を抑制する指標を含まない場合、制御はブロック１６０に進む。ブロック１６０において、精度例外フラグが状態レジスタ中にセットされうる。たとえば、いくつかの実装では、状態レジスタはMXCSRに対応しうる。ただし、本発明の範囲はこの点に関して限定されるものではない。状態レジスタ内のこのフラグの状態に基づいて、精度例外が持ち上げられ（raised）うる（たとえば、フラグがマスクされていない場合）。もしそうであれば、その例外に対処するために、たとえばソフトウェア・ハンドラを介した適切な処置が実行されうる。もしその代わりにフラグがマスクされている場合、たとえ精度例外が起こって、状態レジスタにフラグが立っていても、そのセットされたフラグに関して何の行動も取られなくてもよい。図１の実施形態におけるこの特定の実装を用いて記載されているが、本発明の範囲はこの点に関して限定されるものではないことは理解しておくべきである。
【００１６】
ここで図２を参照すると、本発明のある実施形態に基づくプロセッサの一部分のブロック図が示されている。図２に示されるように、プロセッサ２００は、レジスタ２０５（これは汎用プロセッサ・レジスタであってもよい）からの、たとえばマイクロ処理（μop：micro-operation）によって生成された、はいってくる命令情報と、それに付随する直接データ（immediate  data）とを受領するよう結合されている制御選択器ユニット２１０を含みうる。マイクロ処理は、所与の丸め処理を実行するためにISAの単一命令に応じて生成されうる。さまざまな実施形態において、ハードウェア、ファームウェアまたはそれらの組み合わせで実装されうる制御選択器ユニット２１０が直接データを復号する。直接データに基づいて、たとえば現在の丸め制御状態２２０を記憶する制御もしくは構成設定レジスタにおいて表されているようなプロセッサの現在の丸めモードがオーバーライドされるべきかどうかが決定されうる。もしそうであれば、制御選択器ユニット２１０は直接データのモード・フィールド、つまり丸めモード・フィールドを復号して適正な丸めモードを決定しうる。
【００１７】
制御選択器ユニット２１０は、浮動小数点ユニット（FPU）２４０に結合されていて、はいってくる情報に基づいて該ユニットに制御命令を与えてもよい。図２にさらに示されるように、いわゆる拡張された（XMM）レジスタ２３０のような拡張されたレジスタ・ファイルがプロセッサ２００内に存在していてもよい。それは、命令において丸め処理のためのソース・オペランドおよび行き先オペランドとしてはたらくよう指定されているレジスタを含みうる。このように、XMMレジスタ２３０は、FPU２４０にソース・オペランドを与え、FPU２４０から行き先オペランドを受領するためにFPU２４０に結合されうる。
【００１８】
さまざまな実施形態において、FPU２４０はデータに対して処理を実行するさまざまな回路を含みうる。図２の実施形態では、FPU２４０はFPU加算器２４２を含む。具体的には、図２に示されるように、FPU加算器２４２は、はいってくるオペランド、たとえば第一のソース・オペランドおよび第二のソース・オペランド（すなわちオペランドS1およびS2）を受領するよう結合されうる。FPU２４０はまた、FPU加算器２４２の出力に結合されたFPU丸め器２４４を含んでいてもよい。さまざまな実施形態において、FPU加算器２４２は無限精度をもつ演算結果を生成してもよい。しかしながら、記憶および他の制約から、結果は丸められて、所望のフォーマットの最終結果を、たとえば単精度または倍精度の浮動小数点要素を与えてもよい。したがって、FPU丸め器２４４は、無限に精密な結果をFPU加算器２４２から受領し、プロセッサ２００の現在の丸めモードによって指定される、あるいは命令と一緒にすなわち制御選択器ユニット２１０を介して得られた直接データからの制御に基づく、丸め処理を実行しうる。FPU丸め器２４４は、一般に、FPU加算器２４２における数学的演算の結果として発生する限りなく精密な結果を受領してもよいが、さまざまな実装では、丸め命令と一緒に与えられるソース・オペランドはすでに限られた精度のフォーマットにあってもよい。これらの例において、FPU丸め器２４４はその入力値（たとえば、与えられた丸め命令のソース・オペランドに対応する）を受領し、たとえば最も近い整数値に対応する丸められた結果を生成しうる。
【００１９】
こうして、与えられた丸め命令に基づいて、FPU２４０は、たとえばXMMレジスタ２３０の一つからの与えられたソース・オペランドに対して、制御選択器ユニット２１０からの情報によって制御されるように丸め処理を実行しうる。さらに、丸め処理の完了に際し、結果はXMMレジスタ２３０内のたとえば別のレジスタに記憶されてもよい。処理の間に精度例外が発生する場合、通常、FP状態レジスタ２２５にそのことを示すフラグがセットされうる。しかしながら、さまざまな実施形態において、丸め命令に関連付けられた直接データが精度抑制を示す場合、そのようなフラグはセットされなくてもよい。図２の実施形態ではこの特定の実装について記載されているが、本発明の範囲がこの点に関して限定されるものではないことは理解しておくべきである。たとえば、いくつかの実施形態では、たとえば丸め制御状態（rounding  control  state）２２０およびFP状態レジスタ（FP  status  register）２２５によって表されるような、制御および状態の状態（control  and  status  state）が、MXCSRのような単一のCSR内に記憶されてもよい。
【００２０】
直接データは、さまざまな形で制御選択器ユニット２１０に与えられうることを注意しておく。たとえば、いくつかの実装では、直接データは単一バイトのデータ要素の形であってもよい。ただし、本発明の範囲はそれに限定されるものではない。さらに、直接データ要素内に制御情報をエンコードするさまざまな仕方が実現されうる。ここで図３を参照すると、本発明のある実施形態に基づく直接データ要素のブロック図が示されている。図３に示されるように、直接データ要素３００は、オーバーライド指標３１０、モード制御フィールド３２０、精度オーバーライド指標３３０およびリザーブ・フィールド３４０を含む８ビット語であってもよい。図３の実施形態ではこの特定の実装について示しているが、本発明の範囲はこのように限定されるものではない。
【００２１】
図３の実施形態において、オーバーライド指標３１０は、直接データ要素３００に関連付けられた丸め命令のオーバーライド状態を決定するために使用されうる。下記の表１に示されるように、オーバーライド指標３１０は、デフォルトの丸めモード（MXCSRのような構成設定レジスタによって表現されるような）のオーバーライドを示すために論理的な低レベルにセットされうる。論理的な高い値はデフォルト・モードの使用を示す。
【００２２】
【表１】
0005475746.tif 000002
オーバーライド指標３１０がデフォルト丸めモードがオーバーライドされるべきであることを示す場合、丸め命令に関連付けられる丸めモードを決定するために丸めモード・フィールド３２０が復号されうる。下記の表２に示されるように、いくつかの実装では、IEEE規格754によって規定される４つの丸めモードを２つの拡張丸めモードとともに含む６つの丸めモードがサポートされうる。拡張丸めモードについてはのちにさらに論じる。
【００２３】
【表２】
0005475746.tif 000003
直接データ要素３００はさらに、精度抑制指標３３０を含む。この指標は、たとえ関連する命令の処理の間に精度例外が起こったとしても精度例外が状態レジスタ内の例外フラグのセットを引き起こさないようにする、不正確な結果の許容を示すためにセットされうる。
【００２４】
具体的には、下記の表３に示されるように、精度抑制指標３３０は次の形を取りうる。
【００２５】
【表３】
0005475746.tif 000004
精度抑制指標３３０はさまざまな言語、たとえばC99、フォートランおよびジャバのユーザー・レベル命令との関連で使用されうることを注意しておく。最後に、いくつかの実施形態では、リザーブ・フィールド３４０は追加的な情報のためにリザーブされうる。さらに、表１〜表３に記載される個別的な値は、指標およびフィールドの特定の位置およびサイズとともに、限定されるものではなく、さまざまな変更、修正および拡張が本発明の範囲内であることを注意しておく。
【００２６】
上記のように、多くの実装において、丸め処理は、ISAの単一命令に応じて実行されうる。このようにして、ユーザー・レベルのサポートが提供され、丸め処理は効率的に実行できる。所与のISAにおいて、複数のそのような丸め命令が存在し、個別的な丸め処理を扱うために利用可能であることがある。たとえば、倍精度および単精度の浮動小数点値やパックされた値およびスカラー値の丸めといったものである。これらの丸め命令は、浮動小数点データ要素の端数部分を切り捨てるために使用されてもよい。ISAレベルの命令の存在に加えて、直接データまたは他の制御フィールド情報のおかげで、プロセッサの現在のデフォルト状態を修正する必要なしに、（他の属性のなかでも）丸めモードの効率的なローカル制御が許容されうる。
【００２７】
下記の表４に示されるように、さまざまな型のデータ要素に対する効率的な丸め処理を可能にするために、ISAには丸め命令のさまざまな種類が存在しうる。
【００２８】
【表４】
0005475746.tif 000005
これらのISAベース命令がどのように機能するかの例として、ROUNDPD命令は、直接要素（immediate  element）（すなわちIMM8）において指定されている丸めモードによってソース・オペランド（すなわち、XMMレジスタまたはメモリから得られうる第二のオペランド）内の２つの倍精度浮動小数点値を丸め、結果を行き先オペランド（すなわち、XMMレジスタであってもよい第一のオペランド）に入れるために使用されうる。直接要素は、丸め処理のための制御フィールドを指定しうる。先の表１〜表３を参照すると、直接データのビット4（すなわち図３の指標３３０）が精度例外についてのプロセッサの振る舞いを制御しうる。一方、ビット0（すなわち図３の指標３１０）は丸めモード制御のソースを選択しうる。最後に、ビット3:1（すなわち、図３のフィールド３２０）は非固定丸めモード値を指定しうる。いくつかの実施形態では、いずれかのソース・オペランドがシグナル発生非数（SNaN:  signaling  not  a  number）であれば、それは静穏NaN（QNaN）に変換されることを注意しておく。構成設定レジスタが非正規化数を0とみなす（DAZ:  denormals  as  zeros）ようセットされている場合、非正規化数は丸めの前に0に変換されうる。構成設定レジスタが非正規化数を0にフラッシュする（FTZ:  flush  denormals  to  zeros）ようセットされている場合、非正規化数は丸めの後で0に変換されうる。
【００２９】
これらのISA命令がどのように機能しうるかのさらなる例として、ROUNDPS命令は、ソース・オペランド内の４つのパックされた単精度浮動小数点値を丸め、結果を行き先オペランドに入れるために使用されうる。例示の目的のため、具体的な丸め命令は次の形を取りうる。
【００３０】
ROUNDPS  xmm0,  xmm1,  imm8  （最も近い整数への丸め）
この命令は、第一のレジスタ、すなわちxmm1内のパックされた単精度値を取り、各値を直接データ（すなわちimm8）の丸めモードによって記述されるように最も近い整数値に丸め、結果を第二のレジスタ、すなわちxmm0に記憶しうる。下記の表５は、ソース・オペランド（すなわちxmm1）内に存在する、それぞれ限られた精度の浮動小数点値に対応する代表的な値と、行き先オペランド（すなわちxmm0）に記憶される、整数値をとる浮動小数点数、つまり元のソース値に最も近い整数値に対応する、結果として得られる丸められた値とを示している。
【００３１】
【表５】
0005475746.tif 000006
さらなる実装では、丸め処理は、ソースFP値から整数値（すなわち、整数値をとるFP値ではなく）を生成する命令に応じてであってもよいことを注意しておく。他の実装は、より低い精度の浮動小数点表現への丸めを可能にしうる。よって、諸実施形態は、構成設定レジスタ内のデフォルト丸めモードまたは命令に関連付けられた直接データに記述されているローカル丸めモードのいずれかによって制御される、標準的な丸めモードまたは特殊化された丸めモードに従ってソース値を丸める効率的な手段を提供しうる。
【００３２】
さまざまな実施形態において、直接データは、IEEE規格754の丸め処理とは異なる丸めモードを実行するような制御情報を提供しうる。これらの丸めモードは、中間点で零から遠いほうへの丸め（round  halfway  away  from  zero）および零から遠いほうへの丸め（round  away  from  zero）の丸めモードを含みうる。ここで図４を参照すると、本発明のある実施形態に基づく丸め処理を実行する方法の流れ図が示されている。図４に示されるように、方法４００は、これらの拡張された丸めモードを実行するために使用されうる。方法４００は、ソース・オペランドが0以上であるかどうかを判定することによって始まりうる（菱形４１０）。もしそうであれば、制御はブロック４２０に進み、所定の値がソース・オペランドから減算されうる（ブロック４２０）。たとえば、FP加算器が、選択されている特定の丸めモードに基づいて、ソース・オペランドから所与の値を減算しうる。もちろん、この減算は、前記所定の値についての負の値との加算として実行されうる。次いで、選択された丸め処理が、このFP加算の結果に対して実行されうる（ブロック４３０）。いくつかの実装では、打ち切り（truncate）（零への丸め（round  to  zero）とも呼ばれる）のようなIEEE規格754丸め処理が前記結果に対して実行されて拡張された丸めモードの結果が得られるのでもよい。もしその代わりに菱形４１０においてソース・オペランドが0より小さいと判定される場合、制御はブロック４４０に進む。ブロック４４０では、所定の値（これは上記と同じ値であってもよい）がFP加算器においてソース・オペランドに加算されてもよい。次いで、ブロック４５０において、選択された丸め処理が前記結果に対して実行され、結果としての丸められた値が得られる。
【００３３】
本発明の範囲はこの点に関して限定されるものではないが、中間点で零から遠いほうへの丸めの処理は、その所定の値として0.5の値を使ってもよい。一方、零から遠いほうへの丸めの処理は、1-を使ってもよい。ここで、1-とは、1より小さく1に等しくない、最も近い表現可能なFP値に対応する。単精度および倍精度のFP値について、0.5はそれぞれ0x3f000000および0x3fe0000000000000に対応しうる。単精度および倍精度のFP値について、−0.5はそれぞれ0xbf000000および0xbfe000000000000に対応しうる。単精度および倍精度のFP値について、1-はそれぞれ0x3f7fffffおよび0x3fefffffffffffffに対応しうる。単精度および倍精度のFP値について、−1-はそれぞれ0xbf7fffffおよび0xbfefffffffffffffに対応しうる。下記の表６には、これらの処理を実行するためのソース・コードの例が示されている。
【００３４】
【表６】
0005475746.tif 000007
これらの例において、処理ROUND_TOWARD_ZEROはIEEE規格754の打ち切り処理であり、加算／減算の結果に対して実行される。これらの拡張された丸めモードの処理を実行する際、前記所定の値は第二のソース・オペランドとして（たとえば図２の実施形態におけるS2のように）FP加算器に与えられてもよいことを注意しておく。あるいはまた、実施形態によっては、他の丸め処理と同様に、第二のソース・オペランドは0であってもよく、選択された拡張丸めモード処理を実施するために制御信号が丸めユニットに送られてもよい。
【００３５】
このように、さまざまな実施形態において、丸めを実行するための向上が実現されうる。これらの向上は、制御レジスタの状態を保存し、ダミーFP演算を実行し、前記状態を再セットする、またさらには数を整数に変換して浮動小数点に戻す近似的な単純化といったさまざまな処理を実行する必要を回避しうる。不正確な精度例外を抑制することにより、準拠性が異なる言語の丸めのサポートが簡略化されうる。一方、実装は、たとえばC99言語における、ある種の丸め機能についての標準的な丸めモードに従ってもよい。
【００３６】
諸実施形態は、多くの異なるシステム型において実装されうる。ここで図５を参照すると、本発明のある実施形態に基づくシステムのブロック図が示されている。図５に示されるように、マルチプロセッサ・システム５００はポイント・ツー・ポイント相互接続システムであり、ポイント・ツー・ポイントの相互接続５５０を介して結合された第一のプロセッサ５７０および第二のプロセッサ５８０を含む。図５に示されるように、プロセッサ５７０および５８０のそれぞれは、第一および第二のプロセッサ・コア（すなわち、プロセッサ・コア５７４ａおよび５７４ｂならびにプロセッサ・コア５８４ａおよび５８４ｂ）を含むマルチコア・プロセッサであってもよい。コアのそれぞれが、本発明の実施形態に基づいて、ISAレベルの命令に応じて丸め処理を実行しうることを注意しておく。
【００３７】
第一のプロセッサ５７０はさらに、ポイント・ツー・ポイントの（P-P）インターフェース５７６および５７８を含む。同様に、第二のプロセッサ５８０はP-Pインターフェース５８６および５８８を含む。図５に示されるように、メモリ・コントローラ・ハブ（MCH）
５７２および５８２はプロセッサをそれぞれのメモリ、すなわちメモリ５３２およびメモリ５３４に結合させる。これらのメモリはそれぞれのプロセッサにローカルに取り付けられたメイン・メモリの部分であってもよい。
【００３８】
第一のプロセッサ５７０および第二のプロセッサ５８０は、それぞれP-P相互接続５５２および５５４を介してチップセット５９０に結合されうる。図５に示されるように、チップセット５９０はP-Pインターフェース５９４および５９８を含む。さらに、チップセット５９０は、チップセット５９０を高性能グラフィック・エンジン５３８と結合するインターフェース５９２を含む。ある実施形態では、グラフィック・エンジン５３８をチップセット５９０に結合させるために、先進グラフィック・ポート（AGP:  Advanced  Graphics  Port）バス５３９が使用されうる。AGPバス５３９は、米国カリフォルニア州サンタクララのインテル・コーポレイションによって1998年5月4日に発表された、加速されたグラフィック・ポート・インターフェース（Accelerated  Graphics  Port  Interface）規格、第2.0版に準拠してもよい。あるいはまた、ポイント・ツー・ポイント相互接続５３９がこれらのコンポーネントを結合してもよい。
【００３９】
次いで、チップセット５９０はインターフェース５９６を介して第一のバス５１６に結合されうる。ある実施形態では、第一のバス５１６は、PCIローカル・バス規格、プロダクション・バージョン、第2.1版、1995年6月、によって定義されるような周辺コンポーネント相互接続（PCI:  Peripheral  Component  Interconnect）バスまたはPCIエクスプレス（PCI  Express（商標））バスまたは他の第三世代の入出力（I/O）相互接続バスであってもよい。ただし、本発明の範囲はそのように限定されるものではない。
【００４０】
図５に示されるように、さまざまなI/O装置５１４が、第一のバス５１６を第二のバス５２０に結合するバス・ブリッジ５１８とともに、第一のバス５１６に結合されうる。ある実施形態では、第二のバス５２０は低ピン数（LPC:  low  pin  count）バスであってもよい。第二のバス５２０にはさまざまな装置が結合されうる。それには、ある実施形態ではたとえば、キーボード／マウス５２２、通信装置５２６およびコード５３０を含みうるディスク・ドライブまたは他の大容量記憶装置といったデータ記憶ユニット５２８が含まれる。さらに、オーディオI/O５２４が第二のバス５２０に結合されていてもよい。他のアーキテクチャが可能であることを注意しておく。たとえば、図５のポイント・ツー・ポイント・アーキテクチャの代わりに、システムはマルチドロップ・バスまたは他のそのようなアーキテクチャを実装してもよい。
【００４１】
実施形態は、コードにおいて実装されてもよく、記憶媒体上に記憶されてもよい。記憶媒体がその上に記憶された命令を有し、該命令が、システムが該命令を実行するようプログラムするために使用されるのである。記憶媒体は、これに限られないが、フロッピー（登録商標）ディスク、光ディスク、コンパクト・ディスク読み出し専用メモリ（CD-ROM）、書き換え可能型コンパクト・ディスク（CD-RW）および光磁気ディスクを含む任意の型のディスク、読み出し専用メモリ（ROM）、動的ランダム・アクセス・メモリ（DRAM）、静的ランダム・アクセス・メモリ（SRAM）といったランダム・アクセス・メモリ（RAM）、消去可能なプログラム可能型読み出し専用メモリ（EPROM）、フラッシュメモリ、電気的に消去可能なプログラム可能型読み出し専用メモリ（EEPROM）といった半導体デバイス、磁気カードもしくは光カードまたは電子的な命令を記憶するために好適な他の任意の型の媒体を含みうる。
【００４２】
本発明について、限られた数の実施形態に関して記載してきたが、当業者はそうした実施形態からの数多くの修正および変形を認識するであろう。付属の請求項は本発明の真の精神および範囲にはいるそのようなすべての修正および変形をカバーすることが意図されている。
【００４３】
特願２００９−５２８５３６の出願当初の特許請求の範囲は次のとおり。
〔請求項１〕
プロセッサにおいて丸め命令および直接値（immediate  value）を受領する段階と；
前記直接値の丸めモード・オーバーライド指標がアクティブであるかどうかを判定する段階と；
もしアクティブであれば、前記丸め命令に応答して、前記直接値に記述されている丸めモードに従って前記プロセッサの浮動小数点ユニットにおいてソース・オペランドに対して丸め処理を実行する段階とを有する、
方法。
〔請求項２〕
前記直接値の前記丸めモード・オーバーライド指標がアクティブでなければ、前記丸め命令に応答して、前記プロセッサの制御レジスタ内に記述されている丸めモードに従って前記丸め処理を実行する段階をさらに有する、請求項１記載の方法。
〔請求項３〕
前記丸め処理の実行の間、デフォルト丸めモードを含む制御レジスタの値を維持することをさらに含む、請求項１記載の方法。
〔請求項４〕
丸められた結果を得るための第一のオペランドに対する丸め命令の実行を、前記丸め命令に関連付けられた制御フィールド内にオーバーライド指標が存在していれば、前記丸め命令に関連付けられた制御フィールド内に記述されている丸めモードに従って行う手段と；
前記実行を行う手段に結合された記憶手段とを有する、
システム。
〔請求項５〕
前記丸め命令および前記制御フィールドを受領し、前記制御フィールドの丸めモード部分を復号し、前記オーバーライド指標が存在していれば前記丸めモード部分から制御信号を生成する選択器手段をさらに有する、請求項４記載のシステム。
〔請求項６〕
前記実行を行う手段が、前記選択器手段からの制御信号に応答して前記第一のオペランドに対して丸め処理を実行する浮動小数点ユニットを有し、前記第一のオペランドが限られた精度の値をもつ、請求項５記載のシステム
〔請求項７〕
前記実行を行う手段のためのデフォルト丸めモードを記憶する制御レジスタをさらに有し、前記実行を行う手段が前記丸め命令の実行を、前記制御フィールド内に前記オーバーライド指標が存在していれば、前記デフォルト丸めモードとは異なる丸めモードに従って行う、請求項４記載のシステム。
〔請求項８〕
前記実行を行う手段が前記丸め命令を前記異なる丸めモードに従って実行することを、前記デフォルト丸めモードが前記制御レジスタに記憶されている間に行う、請求項７記載のシステム。
〔請求項９〕
前記実行を行う手段が前記異なる丸めモードを実行するのを、前記第一のオペランドが閾値以下である場合には前記第一のオペランドへの第一の値の加算を介して、そうでない場合には前記第一のオペランドへの第二の値の加算を介して行い、前記第一の値は前記第二の値の浮動小数点バージョンの正負を変えたものである、請求項７記載のシステム。
〔請求項１０〕
命令が記憶されている機械可読媒体であって、前記命令は機械によって実行されたときに、該機械に：
前記命令によって規定されるモードに従って丸め処理を実行する段階と；
前記丸め命令の結果を第一の記憶領域に記憶する段階とを有する方法を実行させる、
機械可読媒体。
〔請求項１１〕
前記モードが、制御レジスタに記憶されているデフォルト丸めモードとは異なる丸めモードに従って前記丸め処理の実行を引き起こすものである、請求項１０記載の機械可読媒体。
〔請求項１２〕
前記方法がさらに、前記命令に関連付けられた直接値の一部分を復号する段階をさらに有し、前記直接値の前記一部分は複数の丸めモードのうちの一つに対応する符号（code）を含む、請求項１０記載の機械可読媒体。
〔請求項１３〕
第一の単一命令複数データ（SIMD）オペランドの少なくとも一つの要素を丸める第一の命令を、前記第一の命令によって規定される、複数のモードのうちの一つのモードに従って実行する実行論理を有する、
プロセッサ。
〔請求項１４〕
前記第一の命令および前記第一の命令に関連付けられた直接データ要素を受領し、前記直接データ要素のオーバーライド指標に基づいて、デフォルト丸めモードがオーバーライドされるべきかどうかを判定するコントローラをさらに有する、請求項１３記載のプロセッサ。
〔請求項１５〕
前記実行論理が、前記デフォルト丸めモードがオーバーライドされるべきである場合、前記直接データ要素の丸めモードに従って前記少なくとも一つの要素を丸める、請求項１４記載のプロセッサ。
〔請求項１６〕
前記第一の命令は、前記実行論理のデフォルト丸めモード以外の丸めモードを示すオーバーライド指標と、前記複数のモードのうちの前記モードを示すモード・フィールドとを含む、請求項１３記載のプロセッサ。
〔請求項１７〕
前記複数のモードのうちの少なくとも一つのモードは前記実行論理の制御レジスタに記憶されているデフォルト丸めモードとは異なる、請求項１３記載のプロセッサ。
〔請求項１８〕
前記複数のモードのうちの前記少なくとも一つのモードに従っての前記第一の命令の実行の間、前記デフォルト丸めモードが前記制御レジスタ内に記憶されたままである、請求項１７記載のプロセッサ。
〔請求項１９〕
前記実行論理が前記少なくとも一つの要素を丸めて整数の値をもつ浮動小数点値にし、前記第一のSIMDオペランドは限られた精度の浮動小数点値を含む、請求項１３記載のプロセッサ。
〔請求項２０〕
前記実行論理が前記少なくとも一つの要素を丸めて整数値にし、前記第一のSIMDオペランドは浮動小数点値を含む、請求項１３記載のプロセッサ。
【図１】
0005475746.tif 000008
【図２】
0005475746.tif 000009
【図３】
0005475746.tif 000010
【図４】
0005475746.tif 000011
【図５】
0005475746.tif 000012