(57)【要約】      （修正有）【課題】ＳＩＭＤ命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理する。【解決手段】ＳＩＭＤ浮動小数点演算の数値例外を特定するステップと、前記ＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ部分結果を生成するため、第１ＳＩＭＤマイクロ演算を開始するステップと、前記ＳＩＭＤ浮動小数点演算の第２Ｐａｃｋｅｄ部分結果を生成するため、第２ＳＩＭＤマイクロ演算を開始するステップと、前記第１及び第２Ｐａｃｋｅｄ部分結果を合成し、前記合成された第１及び第２Ｐａｃｋｅｄ部分結果の第１要素を非正規化して非正規化要素を有する第３Ｐａｃｋｅｄ結果を生成するため、ＳＩＭＤ非正規化マイクロ演算を開始するステップと、前記ＳＩＭＤ浮動小数点演算の第３Ｐａｃｋｅｄ結果を格納するステップと、前記第３Ｐａｃｋｅｄ結果の非正規化要素を特定するフラグを前記第１Ｐａｃｋｅｄ部分結果に設定するステップと、を有する。【選択図】図２
2014002767.tif 000002
【特許請求の範囲】
【請求項１】
ＳＩＭＤ（Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ−Ｄａｔａ）命令を実行するプロセッサにおいて浮動小数点例外を処理する方法であって、
前記プロセッサの浮動小数点例外ユニットの例外回路において、ＳＩＭＤ浮動小数点演算の数値例外を特定するステップと、
前記浮動小数点例外ユニットにおいて、前記ＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ部分結果を生成するため、第１ＳＩＭＤマイクロ演算を開始するステップと、
前記浮動小数点例外ユニットにおいて、前記ＳＩＭＤ浮動小数点演算の第２Ｐａｃｋｅｄ部分結果を生成するため、第２ＳＩＭＤマイクロ演算を開始するステップであって、前記ＳＩＭＤ浮動小数点演算の第１及び第２Ｐａｃｋｅｄ部分結果を生成するのに利用される１以上のＰａｃｋｅｄソースオペランドのセットが、それらの元の表現の幅で格納される、前記第２ＳＩＭＤマイクロ演算を開始するステップと、
前記第１及び第２Ｐａｃｋｅｄ部分結果を合成し、前記合成された第１及び第２Ｐａｃｋｅｄ部分結果の第１要素を非正規化して非正規化要素を有する第３Ｐａｃｋｅｄ結果を生成するため、前記浮動小数点例外ユニットにおいて、ＳＩＭＤ非正規化マイクロ演算を開始するステップと、
前記ＳＩＭＤ浮動小数点演算の第３Ｐａｃｋｅｄ結果を格納するステップと、
前記第３Ｐａｃｋｅｄ結果の非正規化要素を特定するフラグを前記第１Ｐａｃｋｅｄ部分結果に設定するステップと、
を有する方法。
【請求項２】
前記ＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ部分結果に対するＳＩＭＤ正規化マイクロ演算を開始するステップをさらに有する、請求項１記載の方法。
【請求項３】
前記第１ＳＩＭＤマイクロ演算を開始する前に前記第２ＳＩＭＤマイクロ演算を開始するステップをさらに有する、請求項１記載の方法。
【請求項４】
前記ＳＩＭＤ浮動小数点演算がＳＩＭＤ浮動小数点乗算器において少なくとも部分的に実行される場合、第３ＳＩＭＤマイクロ演算を開始するステップをさらに有する、請求項１記載の方法。
【請求項５】
前記ＳＩＭＤ浮動小数点演算が前記ＳＩＭＤ浮動小数点乗算器において少なくとも部分的に実行される場合、前記第３ＳＩＭＤマイクロ演算を開始しないステップをさらに有する、請求項４記載の方法。
【請求項６】
ＳＩＭＤ（Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ−Ｄａｔａ）浮動小数点演算の数値例外を処理するための命令及びデータを格納する非一時的なマシーンアクセス可能な記憶媒体を有する製造物であって、
前記命令は、マシーンによりアクセスされると、前記マシーンに、
プロセッサの浮動小数点例外ユニットの例外回路において、前記ＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ部分結果を生成するため、第１ＳＩＭＤマイクロ演算を開始するステップと、
前記浮動小数点例外ユニットにおいて、前記ＳＩＭＤ浮動小数点演算の第２Ｐａｃｋｅｄ部分結果を生成するため、第２ＳＩＭＤマイクロ演算を開始するステップであって、前記ＳＩＭＤ浮動小数点演算の第１及び第２Ｐａｃｋｅｄ部分結果を生成するのに利用される１以上のＰａｃｋｅｄソースオペランドのセットがそれらの元の表現の幅で格納される、前記第２ＳＩＭＤマイクロ演算を開始するステップと、
前記第１及び第２Ｐａｃｋｅｄ部分結果を合成し、前記合成された第１及び第２Ｐａｃｋｅｄ部分結果の第１要素を非正規化して非正規化要素を有する第３Ｐａｃｋｅｄ結果を生成するため、前記浮動小数点例外回路において、ＳＩＭＤ非正規化マイクロ演算を開始するステップと、
前記ＳＩＭＤ浮動小数点演算の第３Ｐａｃｋｅｄ結果を格納するステップと、
前記第３Ｐａｃｋｅｄ結果の非正規化要素を特定するフラグを前記第１Ｐａｃｋｅｄ部分結果に設定するステップと、
を実行させる製造物。
【請求項７】
前記命令は、マシーンによりアクセスされると、前記マシーンに、前記ＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ部分結果に対してＳＩＭＤ正規化マイクロ演算を開始するステップを実行させる、請求項６記載の製造物。
【請求項８】
前記命令は、マシーンによりアクセスされると、前記マシーンに、前記第１ＳＩＭＤマイクロ演算の開始前に前記第２ＳＩＭＤマイクロ演算を開始するステップを実行させる、請求項６記載の製造物。
【請求項９】
前記命令は、マシーンによりアクセスされると、前記マシーンに、前記ＳＩＭＤ浮動小数点演算がＳＩＭＤ浮動小数点乗算器において少なくとも部分的に実行される場合、前記第３ＳＩＭＤマイクロ演算を開始するステップを実行させる、請求項６記載の製造物。
【請求項１０】
前記命令は、マシーンによりアクセスされると、前記マシーンに、前記ＳＩＭＤ浮動小数点演算がＳＩＭＤ浮動小数点乗算器において少なくとも部分的に実行されない場合、前記第３ＳＩＭＤマイクロ演算を開始しないステップを実行させる、請求項６記載の製造物。
【請求項１１】
ＳＩＭＤ（Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ−Ｄａｔａ）浮動小数点演算について複数のＰａｃｋｅｄ浮動小数点オペランドと複数のＰａｃｋｅｄ浮動小数点結果とを格納するレジスタファイルと、
第１ＳＩＭＤ浮動小数点演算の数値例外を特定する例外生成回路と、
前記数値例外に応答して、前記ＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ結果を生成するため、第１ＳＩＭＤマイクロ演算を開始するマイクロコード例外ハンドラと、
を有するプロセッサであって、
前記マイクロコード例外ハンドラはさらに、
前記数値例外に応答して、前記ＳＩＭＤ浮動小数点演算の第２Ｐａｃｋｅｄ結果を生成するため、第２ＳＩＭＤマイクロ演算を開始し、
前記数値例外に応答して、前記第１及び第２Ｐａｃｋｅｄ結果を合成し、前記合成された第１及び第２Ｐａｃｋｅｄ結果の要素を非正規化し、前記非正規化要素を有する第３Ｐａｃｋｅｄ結果を生成し、前記ＳＩＭＤ浮動小数点演算の第３Ｐａｃｋｅｄ結果を格納し、前記第３Ｐａｃｋｅｄ結果の非正規化された第１要素を特定するフラグを前記第１Ｐａｃｋｅｄ結果に設定する、ＳＩＭＤ非正規化マイクロ演算を開始し、
前記ＳＩＭＤ浮動小数点演算の第１及び第２Ｐａｃｋｅｄ部分結果を生成するのに用いられる１以上のＰａｃｋｅｄソースオペランドのセットが、それらの元の表現の幅で格納されるプロセッサ。
【請求項１２】
シングル精度及びダブル精度の加算を実行する浮動小数点加算手段と、
オペランド及び結果の非正規化要素を検出する例外回路と、
を有する、請求項１１記載のプロセッサ。
【請求項１３】
シングル精度及びダブル精度の乗算を実行する浮動小数点乗算手段と、
オペランド及び結果の非正規化要素を検出する例外回路と、
を有する、請求項１１記載のプロセッサ。
【請求項１４】
シングル精度及びダブル精度の非正規化を実行する浮動小数点非正規化手段を有する、請求項１１記載のプロセッサ。
【請求項１５】
ＳＩＭＤ（Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ−Ｄａｔａ）浮動小数点実行手段を有するプロセッサを有する装置であって、
前記ＳＩＭＤ浮動小数点実行手段は、
シングル精度及びダブル精度の加算を実行し、オペランド及び結果の非正規化要素を検出する例外回路を有する浮動小数点加算手段と、
シングル精度及びダブル精度の乗算を実行し、オペランド及び結果の非正規化要素を検出する例外回路を有する浮動小数点乗算手段と、
シングル精度及びダブル精度の非正規化を実行する浮動小数点非正規化手段と、
ＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ部分結果を生成する第１ＳＩＭＤマイクロ演算と、第１ＳＩＭＤ浮動小数点演算の第２Ｐａｃｋｅｄ部分結果を生成する第２ＳＩＭＤマイクロ演算と、前記第１ＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ部分結果と第２Ｐａｃｋｅｄ部分結果とを合成し、非正規化要素を有する第３Ｐａｃｋｅｄ結果を生成するため前記合成された第１及び第２Ｐａｃｋｅｄ部分結果の第１要素を非正規化するＳＩＭＤ非正規化マイクロ演算とを含む複数のＳＩＭＤマイクロ演算を格納するマイクロコードストレージと、
を有し、
前記プロセッサは、前記第１ＳＩＭＤ浮動小数点演算の第１及び第２Ｐａｃｋｅｄ部分結果を生成するのに用いられる１以上のＰａｃｋｅｄソースオペランドのセットをそれらの元の表現の幅で格納し、
前記第３Ｐａｃｋｅｄ結果の非正規化要素を特定するフラグが、前記第１Ｐａｃｋｅｄ部分結果と共に格納される装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にマイクロプロセッサの分野に関する。より詳細には、本開示は、ＳＩＭＤ（Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ−Ｄａｔａ）命令を実行するプロセッサにおいて浮動小数点例外を処理するための効率的な技術に関する。
【背景技術】
【０００２】
浮動小数点演算のためのＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ）規格（ＩＥＥＥ７５４）は、シングル精度（３２ビット）、ダブル精度（６４ビット、シングル拡張精度（４３ビット以上、通常使用されない）、及びダブル拡張精度（７９ビット以上、通常８０ビットにより実現される）の浮動小数点数がどのように表現されるか規定すると共に（負のゼロ、非正規化、無限及びＮａＮ（Ｎｏｔ  ａ  Ｎｕｍｂｅｒ）を含む）、演算がこれらに対してどのように実行されるべきかを規定する。当該規格では、３２ビット値のみが要求され、その他は任意的なものである。それはまた、４つの丸めモードと５つの例外（例外が発生したとき、発生したときに何が起きるかを含む）とを規定する。
【０００３】
指数は、（２ｅ−１）−１によりバイアスされている（ただし、ｅは指数フィールドに用いられるビット数である）。例えば、シングル精度数は８ビットの指数を有し、このため、その指数は、それに加えられた２７−１＝１２７により格納され、“１２７によりバイアスされる”と呼ばれる。通常のシングル精度指数は、−１２６〜１２７の範囲となる。１２８の指数は、プラス又はマイナス無限大のために確保される。−１２７の指数（すべてゼロ）は、プラス又はマイナスゼロのために確保される（又は、非正規化のためだが、非正規化のケースでは、使用されるバイアスは（２ｅ−１）−２、すなわち、１２７でなく１２６である。これは、仮数の最上位ビットが１でなくゼロであるという前提のためである）。テーブル１において、シングル精度浮動小数点表現のいくつかの具体例が示される。
【０００４】
【表１】
2014002767.tif 000003
正規化浮動小数点数は、ｖ＝ｓ×２ｅ×ｍである。ただし、ｓ，ｅ，ｍは、
符号ビットが０であるとき、ｓ＝＋１（正の数で＋０）
符号ビットが１であるとき、ｓ＝−１（負の数で−０）
ｅ＝ｅｘｐｏｎｅｎｔ−ｂｉａｓ（すなわち、指数は、それに加えられたｂｉａｓと共に格納される）
ｍ＝１．ｆｒａｃｔｉｏｎ（バイナリによる）（すなわち、仮数は、インプリシットな先頭ビット値１の後に、基数点が続き、その後にｆｒａｃｔｉｏｎのバイナリビットが続く）
である。従って、１≦ｍ＜２である。
【０００５】
非正規化数（ｄｅｎｏｒｍａｌ  ｎｕｍｂｅｒ，ｄｅｎｏｒｍａｌｉｚｅｄ  ｎｕｍｂｅｒ，ｓｕｂｎｏｒｍａｌ  ｎｕｍｂｅｒ）は、最小の正規化数より小さいが、ゼロではない数（絶対値において）である。非正規化の生成は、結果が小さいとき計算がゆっくりと精度を失う可能性があるため、漸近的アンダーフローとしばしば呼ばれる。ＩＥＥＥ７５４規格が書かれていたとき、非正規化数は、インテル８０８７浮動小数点個コプロセッサにより実現された。この実現形態は、非正規化が実際的な実現形態によりサポート可能であることを示していた。
【０００６】
正規化浮動小数点表現では、仮数の先頭ビットは１に等しいと仮定される。それが１に等しいと知られているため、仮数の先頭ビットは、一部の浮動小数点表現では、省略され、指数値が対応して調整されるかもしれない。非正規化値は、正規化された形式により表現できない値（すなわち、ゼロでない仮数による可能な最小の指数を有する）である。浮動小数点単位（ＦＰＵ）の一部の実現形態は、非正規化数をハードウェアにより直接的にはサポートしないが、ある種のソフトウェア又はマイクロコードのサポートにトラップする。これはユーザには透過であるかもしれないが、非正規化数を生成又は使用する計算を正規化数に対する同様の計算よりはるかに低速なものにしうる。
【０００７】
現在のプロセッサはまた、浮動小数点数に対してＳＩＭＤ（Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ−Ｄａｔａ）を実行する命令を有するかもしれない。これらのＳＩＭＤ演算が非正規化を生成又は使用するとき、マイクロコードを利用したハードウェア又はソフトウェアにより演算を処理するのに例外がトリガーされるかもしれない。非正規化をハードウェアによりサポートする１つの方法は、非正規化を小さな正規化として単に処理するのに十分な精度を有するより広範な内部表現によるものである。例えば、シングル精度非正規化に関する例外がトリガーされる場合、マイクロコードは、シングル精度オペランドを正規化ダブル精度オペランドに変換し、より広範な表現に対して演算を再実行し、その後に結果を非正規化し、シングル精度に戻すかもしれない。同様に、ダブル精度非正規化は、ダブル拡張精度正規化として処理されるかもしれない。１つの欠点は、非正規化数を生成又は使用する計算が正規化数に対する同様の計算よりはるかに低速なものになることである。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従って、ＳＩＭＤ命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理する技術が所望される。
【課題を解決するための手段】
【０００９】
上記課題を解決するため、本発明の一特徴は、ＳＩＭＤ（Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ−Ｄａｔａ）命令を実行するプロセッサにおいて浮動小数点例外を処理する方法であって、ＳＩＭＤ浮動小数点演算の数値例外を特定するステップと、前記ＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ部分結果を生成するため、第１ＳＩＭＤマイクロ演算を開始するステップと、前記ＳＩＭＤ浮動小数点演算の第２Ｐａｃｋｅｄ部分結果を生成するため、第２ＳＩＭＤマイクロ演算を開始するステップと、前記第１及び第２Ｐａｃｋｅｄ部分結果を合成し、前記合成された第１及び第２Ｐａｃｋｅｄ部分結果の第１要素を非正規化して非正規化要素を有する第３Ｐａｃｋｅｄ結果を生成するため、ＳＩＭＤ非正規化マイクロ演算を開始するステップと、前記ＳＩＭＤ浮動小数点演算の第３Ｐａｃｋｅｄ結果を格納するステップと、前記第３Ｐａｃｋｅｄ結果の非正規化要素を特定するフラグを前記第１Ｐａｃｋｅｄ部分結果に設定するステップと、を有する方法に関する。
【発明の効果】
【００１０】
本発明によると、ＳＩＭＤ命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、スカラー及びＰａｃｋｅｄ  ＩＥＥＥ浮動小数点数を格納するための一例となるストレージフォーマットを示す。
【図２】図２は、ＳＩＭＤ浮動小数点命令を実行し、ＳＩＭＤ浮動小数点例外を効率的に処理する技術を使用するプロセッサを有するシステムの一実施例を示す。
【図３】図３は、ＳＩＭＤ浮動小数点命令を実行し、ＳＩＭＤ浮動小数点例外を効率的に処理する技術を使用するプロセッサの一実施例を示す。
【図４】図４は、ＳＩＭＤ命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理する装置の他の実施例を示す。
【図５ａ】図５ａは、Ｐａｃｋｅｄ浮動小数点数の内部表現を格納するための一例となるストレージフォーマットを示す。
【図５ｂ】図５ｂは、Ｐａｃｋｅｄ浮動小数点数の内部表現を格納するための一例となるストレージフォーマットを示す。
【図６】図６は、ＳＩＭＤ浮動小数点加算器において特定の数値例外を処理するためのプロセスの一実施例のフロー図を示す。
【図７】図７は、ＳＩＭＤ浮動小数点乗算器において特定の共通例外を処理するためのプロセスの一実施例のフロー図を示す。
【図８】図８は、ＳＩＭＤ浮動小数点命令を実行するプロセッサにおいて数値例外を処理するためのプロセスの他の実施例のフロー図を示す。
【発明を実施するための形態】
【００１２】
以下、図面に基づいて本発明の実施の形態を説明する。
【００１３】
ＳＩＭＤ（Ｓｉｎｇｌｅ−Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ−Ｄａｔａ）命令を実行するプロセッサにおいて浮動小数点例外を実行するための方法及び装置が開示される。一実施例では、数値例外が、ＳＩＭＤ浮動小数点演算について特定され、ＳＩＭＤマイクロ演算のペアが、ＳＩＭＤ浮動小数点演算のパック（ｐａｃｋｅｄ）された結果の２つのパックされた部分的な結果を生成するため実行される。以下の開示における数値例外は、非正規化入力値を特定することによって、又は非正規化出力値を結果として生成しうるアンダーフロー状態を特定することによってトリガーされる例外を少なくとも含むと理解され、このため、マイクロコードの使用を必要とするかもしれない。ＳＩＭＤ非正規化マイクロ演算は、２つのパックされた部分的な結果を合成し、合成された２つのパックされた部分的な結果の１以上の要素を非正規化して、１以上の非正規化要素を有するＳＩＭＤ浮動小数点演算のパックされた結果を生成するため実行される。非正規化要素を特定するため、パックされた部分結果及び／又はパックされた結果と共に、フラグが設定及び格納されてもよい。
【００１４】
一実施例では、ＳＩＭＤ正規化マイクロ演算が、乗算（又は除算、平方根若しくは変換）であるとき、ＳＩＭＤ浮動小数点演算の実行前に、正規化された擬似的な内部浮動小数点表現を生成するため実行される。このような擬似的な内部浮動小数点表現は、非正規化要素の対応する何れの擬似的な内部浮動小数点表現が非正規化要素の実際の内部浮動小数点表現に変換される必要があるかを示すために設定されるフラグと共に、正規化Ｐａｃｋｅｄ浮動小数点オペランドと同じレジスタに格納されてもよい。このような非正規化要素の擬似的な内部浮動小数点表現では、仮数は正規化され、指数は、実際の内部浮動小数点表現のより広範な指数に容易に復元できるように格納されてもよい。例えば、仮数の先頭からのゼロの個数が非正規化の指数から減算される場合（実際の内部浮動小数点表現のより広範な指数フォーマットにおいてバイアスされる）、上位ビットは一定（１０など）であってもよく、擬似的な内部浮動小数点表現から落とすことができ、容易に復元できる。
【００１５】
このため、このような技術は、スカラー演算に変換し、少数のさらなるマイクロ演算の実行しか要することなく、ＳＩＭＤ浮動小数点例外を同時に透過的に処理するのに利用されてもよい。
【００１６】
本発明の上記及び他の実施例は、以下の教示に従って実現されてもよく、本発明のより広範な趣旨及び範囲から逸脱することなく、各種改良及び変更が以下の教示において可能であることが明らかであるべきである。このため、明細書及び図面は、限定的なものでなく例示的なものであるとみなされるべきであり、本発明は、請求項とそれに均等なものに関してのみ規定されるべきである。以下の説明では、本発明の完全な理解を提供するため、多数の具体的な詳細が与えられる。しかしながら、当業者は、これらの具体的な詳細が本発明の実施例を実施するのに必ずしも必要でないことを理解するであろう。さらに、本発明の実施例を不明りょうにしないため、周知の電気構造及び回路は詳細には与えられていない。
【００１７】
ますます多くのコンピュータシステムがインターネットやマルチメディアアプリケーションにおいて使用されるに従って、さらなるプロセッササポートが導入されてきた。例えば、ＳＩＭＤ整数／浮動小数点命令及びＳＳＥ（Ｓｔｒｅａｍｉｎｇ  ＳＩＭＤ  Ｅｘｔｅｎｓｉｏｎ）は、特定のプログラムタスクを実行するのに必要とされる命令の総数を減少させる命令である。これらの命令は、複数のデータ要素に対してパラレルに処理することによって、ソフトウェアのパフォーマンスを高速化することが可能である。この結果、ビデオ、発話及び画像／フォト処理を含む広範なアプリケーションにおけるパフォーマンスの向上が実現できる。マイクロプロセッサと同様のタイプの論理回路の実現は、通常はいくつかの問題を伴う。さらに、ＳＩＭＤ演算の複雑さは、しばしばデータを正しく処理及び操作するため、さらなる回路の必要をもたらす。
【００１８】
図１は、スカラー及びＰａｃｋｅｄ  ＩＥＥＥ浮動小数点数を格納するための一例となるストレージフォーマット１０１〜１０５を示す。シングル精度フォーマット１０１は、符号ビット１１１と、８つの指数ビットと、２３の仮数ビット１１３との３２ビットを有する。ダブル精度フォーマット１０２は、符号ビット１２１と、１１の指数ビット１２２と、５２の仮数ビット１２３との６４ビットを有する。ダブル拡張精度フォーマット１０３は、符号ビット１３１と、１５の指数ビット１３２と、６４の仮数ビット１３３との８０ビットを有する。ＩＥＥＥ浮動小数点数の各ストレージフォーマットにおいて、仮数１１２，１２２，１３２はまた、１に等しいことが前提とされるインプリシットな最上位ビットＪを有するかもしれない。このため、例えば、ダブル精度フォーマット１０２の５２ビットの仮数が１６進数値“２３４５６７８９ＡＢＣＤＥ”を格納していた場合、表現される１６進数値は、インプリシットなＪビットに続く小数点を有する１．２３４５６７８９ＡＢＣＤＥとなる。その指数は、（２ｅ−１）−１だけバイアスされる（ただし、ｅは指数フィールドに使用されるビット数である）。このため、シングル精度フォーマット１０１の８ビットの指数は１２７だけバイアスされ、ダブル精度フォーマット１０２の１１ビットの指数は１０２３だけバイアスされる。
【００１９】
Ｐａｃｋｅｄシングル精度フォーマット１０４は、１２８ビットを有し、３２ビットの各部分１４１〜１４４が、シングル精度フォーマット１０１を有するシングル精度浮動小数点数を格納する。Ｐａｃｋｅｄダブル精度フォーマット１０５はまた、１２８ビットを有し、６４ビットの各部分１５１〜１５２が、ダブル精度フォーマット１０２を有するダブル精度浮動小数点数を格納する。Ｐａｃｋｅｄシングル精度フォーマット１０４とＰａｋｃｅｄダブル精度フォーマット１０５とは、ＳＩＭＤ浮動小数点演算を実行するのに有用であることが知られている。Ｐａｃｋｅｄシングル精度フォーマット１０４とＰａｃｋｅｄダブル精度フォーマット１０５とは、１２８ビットを有すると示されているが、本発明はこれに限定されるものでないことが理解されるであろう。特に、本発明の実施例は、ＳＩＭＤ浮動小数点演算を実行するため、２５６、５１２又はそれ以上のデータビットを有するＰａｃｋｅｄシングル精度及びＰａｃｋｅｄダブル精度浮動小数点数のためのフォーマットを含むものであってもよい。
【００２０】
これらのＳＩＭＤ浮動小数点演算が非正規化を生成又は使用するとき、例外（おそらくマスクされている）が、ソフトウェア又はハードウェア及び／又はマイクロコードを使用して演算を処理するためトリガーされるかもしれない。従来のプロセッサでは、このような例外の処理は、Ｐａｃｋｅｄ浮動小数点数をより広範な表現のスカラー浮動小数点数に変換し、この広範な表現に対してスカラー演算として演算を再実行し、その後に、必要に応じて結果を非正規化し、Ｐａｃｋｅｄ浮動小数点数に戻す処理を有していたかもしれない。上述されるように、このような非正規化数を生成又は使用する計算の処理は、特にＰａｃｋｅｄ浮動小数点数のフォーマットが２５６、５１２又はそれ以上のデータビットを有する場合には、正規化数に対する同様の計算よりはるかに低速になるかもしれない。このため、ＳＩＭＤ命令を実行するプロセッサにおいて浮動小数点例外を処理するための開示されるより効率的な技術が必要とされる。
【００２１】
図２は、ＳＩＭＤ浮動小数点命令を実行し、ＳＩＭＤ浮動小数点例外を処理するより効率的な技術を利用するプロセッサ３００を有するシステム２００の一実施例を示す。システム２００は、ここに開示される実施例のように、本発明によりＳＩＭＤ浮動小数点演算を実行するためのアルゴリズムを実行するロジックを含む実行ユニットを使用する、プロセッサ３００などのコンポーネントを有する。システム２００は、他のシステム（他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックスなどを有するＰＣを含む）がまた利用されてもよいが、典型的には、カリフォルニア州サンタクララのインテルコーポレイションから入手可能なＰＥＮＴＩＵＭ（登録商標）ＩＩＩ、ＰＥＮＴＩＵＭ（登録商標）４、ＣＥＬＥＲＯＮ（登録商標）、ＸＥＯＮＴＭ、ＩＴＡＮＩＵＭ（登録商標）、ＣＥＮＴＲＩＮＯ（登録商標）、ＣＯＲＥＴＭＤｕｏ、ＣＯＲＥＴＭ２Ｄｕｏ及び／又はＣＯＲＥＴＭ２  Ｑｕａｄマイクロプロセッサに基づく処理システムである。一実施例では、一例となるシステム２００は、他のオペレーティングシステム（ＭＡＣ  ＯＳ（登録商標）Ｘ  ＬＥＯＰＡＲＤ（登録商標）オペレーティングシステム、ＵＮＩＸ（登録商標）及びＬｉｎｕｘ（登録商標）など）、埋め込みソフトウェア及び／又はグラフィカルユーザインタフェースがまた利用可能であるが、ワシントン州レッドモンドのマイクロソフトコーポレイションかた入手可能なあるバージョンのＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムを実行してもよい。本発明は、何れか特定のハードウェア回路とソフトウェアの組み合わせに限定されるものでない。
【００２２】
プロセッサ３００は、本発明によるＰａｃｋｅｄ浮動小数点データに対してＳＩＭＤ命令を実行する１以上の実行ユニット２０３を有する。本実施例は、単独のプロセッサデスクトップ又はサーバシステムに関して説明されるが、他の実施例は、マルチプロセッサシステムに含まれうる。一実施例のシステム２００は、ハブアーキテクチャの一例である。コンピュータシステム２００は、データ信号を処理するプロセッサ３００を有する。プロセッサ３００は、ＣＩＳＣ（Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）マイクロプロセッサ、ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｉｎｇ）マイクロプロセッサ、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）マイクロプロセッサ、命令セットの組み合わせを実現するプロセッサ又はデジタル信号プロセッサなどの他の何れかのプロセッサ装置とすることが可能である。プロセッサ３００は、プロセッサ３００とシステム２００の他のコンポーネントとの間でデータ信号を送信可能なプロセッサバス２１０に接続される。システム２００の各要素は、当業者に周知な従来の機能を実行する。
【００２３】
一実施例では、プロセッサ３００は、レベル１（Ｌ１）内部キャッシュメモリ２０７を有する。アーキテクチャに依存して、プロセッサ３００は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することが可能である。あるいは、他の実施例では、キャッシュメモリは、プロセッサ３００の外部に配設可能である。他の実施例はまた、特定の実現形態及び要求に依存して、内部キャッシュと外部キャッシュの双方の組み合わせを有することも可能である。レジスタファイル２０８は、ＳＩＭＤ及び／若しくはスカラーレジスタ、整数レジスタ、浮動小数点レジスタ、状態レジスタ及び命令ポインタレジスタを含む各種レジスタに異なるタイプのデータを格納可能である。
【００２４】
整数演算及び浮動小数点演算を実行するためのロジックを含む実行ユニット２０３がまた、プロセッサ３００に配設される。プロセッサ３００はまた、マイクロコードを用いてハードウェアにより例外処理を実行するため、及び／又は特定のマイクロ命令のためのマイクロコードを格納するマイクロコード（ｕｃｏｄｅ）ＲＯＭを有する。本実施例では、実行ユニット２０３は、ＳＩＭＤ浮動小数点命令を含むＰａｃｋｅｄ命令セット２０９を処理するためのロジックを有する。命令を実行するための関連する回路と共に、Ｐａｃｋｅｄ命令セット２０９を汎用プロセッサ３００の命令セットに含めることによって、多くのマルチメディアアプリケーションにより使用される演算は、汎用プロセッサ３００のＰａｃｋｅｄデータを用いて実行されてもよい。従って、多くのマルチメディアアプリケーションは、Ｐａｃｋｅｄデータに対して演算を実行するため、プロセッサのデータバスの幅全体を用いることによって、より効率的に加速及び実行可能である。これは、１回に１つのデータ要素によって、１以上の演算を実行するためプロセッサのデータバスを介し少数のデータ単位を伝送する必要を解消することが可能である。
【００２５】
実行ユニット２０３の他の実施例がまた、マイクロコントローラ、埋め込みプロセッサ、グラフィック装置、ＤＳＰ、及び他のタイプの論理回路により利用可能である。システム２００は、メモリ２２０を有する。メモリ２２０は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）装置、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）装置、フラッシュメモリ装置又は他のメモリ装置とすることが可能である。メモリ２２０は、プロセッサ３００により実行可能なデータ信号により表される命令及び／又はデータを格納可能である。
【００２６】
システムロジックチップ２１６が、プロセッサバス２１０とメモリ２２０とに接続される。図示された実施例におけるシステムロジックチップ２１６は、メモリコントローラハブ（ＭＣＨ）である。プロセッサ３００は、プロセッサバス２１０を介しＭＣＨ２１６と通信可能である。ＭＣＨ２１６は、命令及びデータの格納のため、またグラフィックコマンド、データ及びテクスチャの格納のため、高帯域幅メモリパス２１８をメモリ２２０に提供する。ＭＣＨ２１６は、プロセッサ３００と、メモリ２２０と、システム２００の他のコンポーネントとの間でデータ信号を誘導し、プロセッサバス２１０と、メモリ２２０と、システムＩ／Ｏ２２２との間でデータ信号をブリッジするためのものである。一部の実施例では、システムロジックチップ２１６は、グラフィックコントローラ２１２と接続するためのグラフィックポートを提供可能である。ＭＣＨ２１６は、メモリインタフェース２１８を介しメモリ２２０に接続される。グラフィックカード２１２は、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）インターコネクト２１４を介しＭＣＨ２１６に接続される。
【００２７】
一部の実施例によるシステム２００は、ＭＣＨ２１６をＩ／Ｏコントローラハブ（ＩＣＨ）２３０に接続するための専用のハブインタフェースバス２２２を有する。ＩＣＨ２３０は、ローカルＩ／Ｏバスを介しいくつかのＩ／Ｏ装置との直接的な接続を提供する。ローカルＩ／Ｏバスは、各周辺装置をメモリ２２０、チップセット及びプロセッサ３００に接続するための高速Ｉ／Ｏバスである。一部の具体例は、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）２２８、無線トランシーバ２２６、データストレージ２２４、ユーザ入力及びキーボードインタフェースを含むレガシーＩ／Ｏコントローラ、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）などのシリアル拡張ポート、並びにネットワークコントローラ２３４である。データストレージ装置２２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭ装置、フラッシュメモリ装置又は他の大容量ストレージ装置を有することが可能である。システム２００の一部の実施例では、ＭＣＨ２１６とＩＣＨ２３０とは、単一のシステムロジックチップ２０１に一体化されてもよい。他の実施例では、ＭＣＨ２１６は、メモリ２２０への直接的なプロセッサ３００のアクセスのため、プロセッサ３００に直接一体化されてもよい。システム２００の他の実施例では、プロセッサ３００は、チップ上のシステムに直接一体化されてもよい。チップ上のシステムの一実施例は、プロセッサ３００とメモリ２２０とを有する。このようなシステムのメモリ２２０は、フラッシュメモリである。フラッシュメモリ２２０は、プロセッサ３００及び他のシステムコンポーネントと同一ダイ上に設けることも可能である。さらに、メモリコントローラやグラフィックコントローラなどの他のロジックブロックがまた、チップ上のシステムに設けることも可能である。
【００２８】
図３は、ＳＩＭＤ浮動小数点命令を実行し、ＳＩＭＤ浮動小数点例外を処理するための効率的な技術を利用するプロセッサ３００の一実施例を示す。イン・オーダフロントエンド３０１は、実行されるマクロ命令をフェッチし、プロセッサパイプラインにおける以降の使用のためそれらを用意するプロセッサ３００の一部である。本実施例のフロントエンド３０１は、複数のユニットを有する。命令プリフェッチャ３２６は、メモリ２２０及び／又はＩ−キャッシュ３２７からマクロ命令をフェッチし、マシーンが実行方法を知っているマイクロ命令又はマイクロ処理（マイクロｏｐ又はｕｏｐとも呼ばれる）と呼ばれるプリミティブにそれらを復号化する命令デコーダ３２８に提供する。マイクロｏｐキャッシュ３３０は、復号化されたマイクロｏｐを取得し、復号化することなく以降の再実行のためそれらを格納する。マイクロｏｐキャッシュ３３０の一部の実施例は、マイクロｏｐをプログラムにより順序付けされたシーケンス又はトレースに構成するトレースキャッシュを実行用のマイクロｏｐキュー３３４に有してもよい。一部の実施例では、デコーダ３２８又はマイクロｏｐキャッシュ３３０のトレースキャッシュが複雑なマクロ命令に遭遇すると、マイクロコードＲＯＭ３４４が、当該演算を完了させるのに必要なマイクロｏｐを提供するかもしれない。
【００２９】
多数のマクロ命令が、単独のマイクロｏｐに変換されるが、他のマクロ命令は、演算全体を完了させるため、複数のマイクロｏｐを必要とする。一実施例では、４より多くのマイクロｏｐがマクロ命令を完了させるため必要とされる場合、デコーダ３２８は、マクロ命令を実行するため要求されたマイクロｏｐを提供するよう、マイクロコードＲＯＭ３４４にアクセスする。
【００３０】
一実施例では、浮動小数点演算の例外は、ＳＩＭＤ浮動小数点命令を実行するプロセッサ３００における非正規化などの例外ケースをサポートするように浮動小数点演算を再実行するため、マイクロコードＲＯＭ３４４における少数のマイクロｏｐに符号化及び処理可能である。
【００３１】
ＳＩＭＤ及び他のマルチメディアタイプの命令は、複雑な命令とみなされる。ほとんどの浮動小数点関連命令はまた、複雑な命令である。また、命令デコーダ３２８が複雑なマクロ命令に遭遇するとき、マイクロコードＲＯＭ３４４は、当該マクロ命令のマイクロコードシーケンスを抽出するため、適切な位置においてアクセスされる。当該マクロ命令を実行するのに必要とされる各種マイクロｏｐが、適切な整数及び浮動小数点実行ユニットにおける実行のため、アウト・オブ・オーダ実行エンジン３０３に通信される。
【００３２】
アウト・オブ・オーダ実行エンジン３０３は、実行のためマイクロ命令が準備される場所である。アウト・オブ・オーダ実行ロジックは、マイクロ命令がパイプラインを進捗し、実行のためスケジューリングされるとき、パフォーマンスを最適化するため、マイクロ命令のフローを円滑化及び再配置するためのいくつかのバッファを有する。アロケータリネーマロジック３３３は、各マイクロｏｐが実行のため必要とするマシーンバッファ及びリソースを割当て、レジスタファイルの各エントリに論理レジスタをリネームする。アロケータリネーマロジック３３３の一実施例はまた、メモリ演算のためのメモリキュー３３１、整数又は不動点演算のための整数キュー３３２、及び浮動小数点演算のための浮動小数点キュー３３６を含む各種キューにおける各マイクロｏｐのためのエントリを割り当てる。これらのキュー（それぞれ３３１，３３２，３３６など）から、マイクロｏｐは、リード／ライトユニット３１１、整数実行ユニット３１２及び浮動小数点実行ユニット３１６による実行のため、メモリスケジューラ３２１、整数スケジューラ３０２及び浮動小数点スケジューラ３０６によりスケジューリングされる。マイクロｏｐスケジューラ３２１，３０２，３０６は、マイクロｏｐが実行準備ができた時点を、スケジューラの従属する入力レジスタオペランドソースが準備ができたか否かと、マイクロｏｐがそれらの演算を完了させるのに必要とする実行リソースの利用性とに基づき判断する。実行ユニット３１１，３１２，３１６のそれぞれ又は何れかがスカラー又はＳＩＭＤ演算を実行するための重複した実行ユニットを有してもよいことは理解されるであろう。
【００３３】
レジスタファイルバイパスネットワーク３０８は、スケジューラ３２１，３０２，３０６と実行ユニット３１１，３１２，３１６との間にある。レジスタファイルバイパスネットワーク３０８の一部の実施例では、整数演算と浮動小数点演算のための個別のレジスタファイルがあってもよい。このような実施例の各レジスタファイルは、レジスタファイルにまだ書かれていない完了直後の結果を新たな従属するマイクロｏｐにバイパス又は転送可能なバイパスネットワークを有してもよく、互いにデータを通信可能であってもよい。他の実施例では、レジスタファイルバイパスネットワーク３０８は統合されてもよい。レジスタファイルバイパスネットワーク３０８の他の実施例は、ＳＩＭＤ浮動小数点演算のためのＰａｃｋｅｄ浮動小数点ソースオペランドとＰａｃｋｅｄ浮動小数点結果とを含むＰａｋｃｅｄソース及びデスティネーションオペランドを格納するため、少なくとも２５６ビット幅のレジスタエントリを有する。
【００３４】
マイクロｏｐスケジューラ３２１，３０２，３０６の一部の実施例は、ペアレントロードが実行を終了する前に、従属する演算をディスパッチしてもよい。マイクロｏｐがプロセッサ３００において投機的にスケジューリング及び実行されるとき、プロセッサ３００はまた、メモリミスを処理するためのロジックを有する。データキャッシュにおいてデータロードがミスした場合、一時的に誤ったデータによりスケジューラを放置したパイプラインにおいて伝送中の従属演算が存在しうる。リプレイ機構は、誤ったデータを使用する命令を追跡及び再実行するかもしれない。従属演算のみが、リプレイされる必要があり、独立演算は完了可能であるかもしれない。マイクロｏｐの実行が完了すると、それらは、リオーダリタイアロジック３１０によってシーケンシャルプログラム順序にリタイアされる。
【００３５】
浮動小数点実行ユニット３１６の一実施例は、例えば、数値例外などを含むＳＩＭＤ浮動小数点演算の例外を特定するための例外回路３４６を有する。マイクロコードＲＯＭ３４４又はある特殊な有限状態マシーン（例外回路３４６などの）に常駐するマイクロコード例外ハンドラは、数値例外に応答して、マイクロコードＲＯＭ３４４を使用して、当該例外に遭遇したＳＩＭＤ浮動小数点演算のＳＩＭＤマイクロ演算シーケンスを開始する。一実施例では、ＳＩＭＤマイクロ演算は、ＳＩＭＤ浮動小数点演算のＰａｃｋｅｄ  結果の２つのＰａｃｋｅｄ部分結果を生成する。ＳＩＭＤ非正規化マイクロ演算は、これら２つのＰａｋｃｅｄ部分結果を合成し、１以上の非正規化要素を有するＳＩＭＤ浮動小数点演算のＰａｃｋｅｄ結果を生成するため、合成されたＰａｃｋｅｄ部分結果の１以上の要素を非正規化する。これらの要素の１以上においいて非正規化結果を特定するためのフラグが設定され、Ｐａｃｋｅｄ部分結果と共に格納される。この場合、一部の実施例では、Ｐａｃｋｅｄ部分結果の１つの正規化は、非正規化マイクロ演算前に要求されるかもしれない。
【００３６】
マイクロコード例外ハンドラの一実施例では、マイクロコードＲＯＭ３４４がまた、乗算であるとき、ＳＩＭＤ浮動小数点演算のためのＳＩＭＤマイクロ演算シーケンスの一部として、正規化された擬似的な内部浮動小数点表現を生成するため、ＳＩＭＤ正規化マイクロ演算を開始するのに利用されてもよい。正規化された擬似的な内部浮動小数点表現により表現される非正規化結果を特定するためのフラグが設定され、Ｐａｋｃｅｄ結果と共に格納されてもよい。本実施例では、ＳＩＭＤ浮動小数点演算が加算であるとき、ＳＩＭＤ正規化マイクロ演算は不要であるかもしれない。なぜなら、ＳＩＭＤ浮動小数点加算器は、ＳＩＭＤ浮動小数点加算の入力として非正規化値を含むＰａｃｋｅｄオペランドを受け入れることが可能であるためである。一部の実施例では、非正規化要素を特定し、正規化された擬似的な内部浮動小数点表現から実際の内部浮動小数点表現を再構成することを可能にするためのフラグが設定され、正規化された擬似的な内部浮動小数点表現と共に格納されるかもしれない。
【００３７】
このため、上述されるようなマイクロコード支援機構は、マイクロコードＲＯＭ３４４を使用して、ＳＩＭＤ浮動小数点例外を透過的に処理するようにしてもよい。
【００３８】
図４は、ＳＩＭＤ命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理するための装置４６０の他の実施例を示す。装置４６０は、浮動小数点実行ユニット３１６に動作接続されたレジスタファイルバイパスネットワーク３０８を有する。ＳＩＭＤ浮動小数点実行ユニット３１６の一実施例は、ＳＩＭＤ浮動小数点加算ユニット（ＦＡＵ）４００と、ＳＩＭＤ浮動小数点乗算ユニット（ＦＭＵ）４２０とを有する。一実施例では、ＳＩＭＤ  ＦＡＵ４００及び／又はＳＩＭＤ  ＦＭＵ４２０はまた、浮動小数点正規化ユニット（ＦＮＵ）４１０と、ＳＩＭＤ浮動小数点非正規化ユニット（ＦＤＵ）４３０とを有してもよい。
【００３９】
ＳＩＭＤ  ＦＡＵ４００は、シングル精度浮動小数点値のための内部の浮動小数点表現を用いてシングル精度加算を実行可能な複数の浮動小数点加算器と、ダブル精度浮動小数点値のための内部の浮動小数点表現を用いてダブる精度加算を実行可能な複数の浮動小数点加算器とを有してもよい浮動小数点加算器４０１，４０２，．．．，４０８を有する。ＳＩＭＤ  ＦＡＵ４００の一実施例では、１つおきの浮動小数点加算器４０１，４０２，．．．，４０８は、シングル精度加算とダブル精度加算の両方を実行可能である。ＳＩＭＤ  ＦＡＵ４００の他の実施例では、浮動小数点加算器４０１，４０２，．．．，４０８は、それぞれシングル精度加算及び／又はダブル精度加算を実行するよう分割及び／又は合成されてもよい。浮動小数点加算器４０１，４０２，．．．，４０８の各実施例は、浮動小数点オペランド要素の仮数を揃えるための配置回路と、浮動小数点オペランド要素の仮数を加算する加算回路とを有する。
【００４０】
ＳＩＭＤ  ＦＡＵ４００はまた、浮動小数点加算器４０１，４０２，．．．，４０８にそれぞれ接続される例外回路４４１，４４２，．．．，４４８を有する。例外回路４４１，４４２，．．．，４４８の一部の実施例は、ＳＩＭＤ浮動小数点加算演算のＰａｃｋｅｄオペランドの非正規化要素を検出する非正規化検出回路と、非正規化結果を含むＳＩＭＤ浮動小数点加算演算の例外結果を特定する例外生成回路と有する。例外回路４４１，４４２，．．．，４４８の各実施例はまた、特定された例外結果に応答して、マイクロｏｐシーケンスを開始し、ＳＩＭＤ浮動小数点加算演算を再実行するため、マイクロコードＲＯＭ３４４に動作接続されるかもしれない。ＳＩＭＤ  ＦＡＵ４００の一部の実施例では、浮動小数点加算器４０１，４０２，．．．，４０８の配置回路は、対応する第２要素が非正規化でない場合、バイアスされていない指数差分（すなわち、バイアスされた指数差分でなく）に従って、対応する第２要素の仮数により非正規化第１要素の仮数を揃えることができるが、第１要素と第２要素の双方が非正規化であるとき、配置を変更しない。これらの実施例では、浮動小数点加算器４０１，４０２，．．．，４０８はまた、結果として得られた和がＳＩＭＤ浮動小数点加算演算のＰａｃｋｅｄ結果の正規化結果要素として表現可能である場合、結果としての和を（ＦＮＵ４１０などを介し）丸め及び再正規化するようにしてもよい。浮動小数点加算器４０１，４０２，．．．，４０８（又は正規化手段４１１，４１２，．．．，４１８）の各実施例がまた、結果がＳＩＭＤ浮動小数点加算演算のＰａｃｋｅｄ結果の正規化結果要素として表現できないと判断された場合、Ｐａｃｋｅｄ結果の非正規化要素として加算結果を特定するためのフラグを設定するようにしてもよい。
【００４１】
レジスタファイルバイパスネットワーク３０８の各実施例はまた、ＳＩＭＤ浮動小数点演算のＰａｃｋｅｄ結果を格納し、Ｐａｃｋｅｄ結果の非正規化要素として結果要素を特定する何れかのフラグを格納するための結果ストレージ回路を有する。
【００４２】
ＳＩＭＤ  ＦＮＵ４１０は、シングル精度浮動小数点値のための内部の浮動小数点表現を用いてシングル精度正規化を実行可能な複数の浮動小数点正規化手段と、ダブル精度浮動小数点値のための内部の浮動小数点表現を用いてダブル精度正規化を実行可能な複数の浮動小数点正規化手段とを有する浮動小数点正規化手段４１１，４１２，．．．，４１８を有する。ＳＩＭＤ  ＦＮＵ４１０の一実施例では、１つおきの浮動小数点正規化手段４１１，４１２，．．．，４１８が、シングル精度正規化とダブル精度正規化の双方を実行可能である。ＳＩＭＤ  ＦＮＵ４１０の他の実施例では、浮動小数点正規化手段４１１，４１２，．．．，４１８は、それぞれシングル及び／又はダブル精度正規化を実行するため、分割及び／又は合成されてもよい。浮動小数点正規化手段４１１，４１２，．．．，４１８の各実施例はまた、同時的なシングル及び／又はダブル精度丸め及び正規化を実行するための仮数丸め回路を有してもよい。浮動小数点正規化手段４１１，４１２，．．．，４１８の一部の実施例は、Ｐａｃｋｅｄオペランドの擬似的な内部浮動小数点表現への正規化において定数（１０など）を利用することができるかもしれない。
【００４３】
ＳＩＭＤ  ＦＭＵ４２０は、シングル精度浮動小数点値のための内部的な浮動小数点表現を用いてシングル精度乗算を実行可能な複数の浮動小数点乗算器と、ダブル精度浮動小数点値のための内部的な浮動小数点表現を用いてダブル精度乗算を実行可能な複数の浮動小数点乗算器とを有する浮動小数点乗算器４２１，４２２，．．．，４２８を有する。ＳＩＭＤ  ＦＭＵ４２０の一実施例では、１つおきの浮動小数点乗算器４２１，４２２，．．．，４２８は、シングル精度乗算とダブル精度乗算の両方を実行可能である。ＳＩＭＤ  ＦＭＵ４２０の他の実施例では、浮動小数点乗算器４２１，４２２，．．．，４２８は、シングル及び／又はダブル精度乗算をそれぞれ実行するため、分割及び／又は合成されてもよい。
【００４４】
ＳＩＭＤ  ＦＭＵ４２０はまた、浮動小数点乗算器４２１，４２２，．．．，４２８に接続される例外回路４５１，４５２，．．．，４５８を有する。例外回路４５１，４５２，．．．，４５８の一部の実施例は、ＳＩＭＤ浮動小数点乗算演算のＰａｃｋｅｄオペランドの非正規化要素を検出する非正規化検出回路と、非正規化結果を含むＳＩＭＤ浮動小数点乗算演算の例外結果を特定する例外生成回路とを有する。例外回路４５１，４５２，．．．，４５８はまた、Ｐａｃｋｅｄオペランドの検出された非正規化要素に応答して、又は特定された例外結果に応答して、ＳＩＭＤ浮動小数点乗算演算を再実行するため、マイクロｏｐシーケンスを開始するために、マイクロコードＲＯＭ３４４に動作接続されてもよい。
【００４５】
浮動小数点乗算器４２１，４２２，．．．，４２８の各実施例は、比較に基づき例外オペランド要素との乗算のいくつかの共通結果（ゼロ、最小の表現可能な非正規化又は任意的には無限大など）を予測し、当該予測の結果を例外を回避するため乗算結果として格納する指数比較回路及び予測手段を有してもよい。他方、このような例外オペランド要素との乗算の共通結果が予測されないとき、受信したオペランドに対して乗算が実行され、発生した例外がここに開示された他の技術（プロセス８０１など）に従って処理されてもよい。
【００４６】
ＳＩＭＤ  ＦＤＵ４３０は、シングル精度浮動小数点値のための内部的な浮動小数点表現を用いてシングル精度非正規化を実行可能な複数の浮動小数点非正規化手段と、ダブル精度浮動小数点値のための内部的な浮動小数点表現を用いてダブル精度非正規化を実行可能な複数の浮動小数点非正規化手段とを有する浮動小数点非正規化手段４３１，４３２，．．．，４３８を有する。ＳＩＭＤ  ＦＤＵ４３０の一実施例では、１つおきの浮動小数点非正規化手段４３１，４３２，．．．，４３８は、シングル精度非正規化とダブル精度非正規化の双方を実行可能である。ＳＩＭＤ  ＦＤＵ４３０の他の実施例では、浮動小数点非正規化手段４３１，４３２，．．．，４３８は、シングル及び／又はダブル精度非正規化を実行するため、分割及び／又は合成されてもよい。浮動小数点非正規化手段４３１，４３２，．．．，４３８の各実施例はまた、同時的なシングル及び／又はダブル精度丸め及び非正規化を実行する仮数丸め回路を有してもよい。浮動小数点非正規化手段４３１，４３２，．．．，４３８の一部の実施例は、Ｐａｃｋｅｄ部分結果のペアの非正規化において一定の非正規化指数値（−１２６又は−１０２２など）を利用可能であるかもしれない。
【００４７】
ＳＩＭＤ  ＦＮＵ４１０の各実施例は、正規化及び／又は非正規化コンポーネントの浮動小数点要素を有するＰａｃｋｅｄオペランドの擬似的な内部浮動小数点表現を生成するよう動作可能であってもよい。ＳＩＭＤ  ＦＡＵ４００とＳＩＭＤ  ＦＭＵ４２０の各実施例は、正規化モードでは正規化コンポーネントの浮動小数点要素を有する１つのＰａｃｋｅｄ結果を生成するよう動作可能であり、数値例外処理モードでは正規化及び／又は非正規化コンポーネントの浮動小数点要素を有するＰａｃｋｅｄ結果の２つのＰａｃｋｅｄ部分結果を生成するよう動作可能であってもよい。数値例外処理モードの一実施例では、フェーズ１Ｐａｃｋｅｄ部分結果とフェーズ２Ｐａｃｋｅｄ部分結果とが、２つのＰａｃｋｅｄ部分結果を構成するように、レジスタファイルの別々の格納位置に格納されるかもしれない（時間的順序において異なって又は同時に）。マイクロコードＲＯＭ３４４の各実施例はまた、ＳＩＭＤ  ＦＡＵ４００とＳＩＭＤ  ＦＭＵ４２０に、それらが数値例外処理モードのフェーズ１又はフェーズ２において実行しているか示すためのマイクロｏｐを有してもよい。ＳＩＭＤ  ＦＤＵ４３０の各実施例は、正規化及び／又は非正規化コンポーネントの浮動小数点要素を有するＰａｃｋｅｄ結果の２つのＰａｃｋｅｄ部分結果を受信し、正規化及び／又は非正規化コンポーネントの浮動小数点要素を有する１つのＰａｃｋｅｄ結果を生成するよう動作可能であってもよい。
【００４８】
図５ａは、Ｐａｃｋｅｄ浮動小数点数の内部表現を格納するための一例となるストレージフォーマット５１０と５０２とを示す。フォーマット５０１と５０２は、シングル精度浮動小数点数のペアを用いて示されるが、フォーマット５０１，５０２は、典型的には、より広範なＰａｃｋｅｄ浮動小数点オペランド（例えば、４つのシングル精度要素又は２つのダブル精度要素を有するＰａｃｋｅｄオペランド、又は８つのシングル精度要素又は４つのダブル精度要素を有するＰａｃｋｅｄオペランドなど）を単に示している。
【００４９】
フォーマット５０１は、ＳＩＭＤ浮動小数点演算のためのＰａｃｋｅｄシングル精度デスティネーションオペランドのＰａｃｋｅｄ部分結果のペア（レジスタファイルバイパスネットワーク３０８などのＳＩＭＤレジスタファイルにおける）の一例を示す。フォーマット５０１は、シングル精度要素のペアを有し、各ペアは、符号ビット（Ｓ５１１）、１０の指数ビット（Ｅｘ５１９及びＥｘｐ８  ５１２）、及び２８の仮数ビット（Ｏ５１５、イクスプリットビットＪ５１６、Ｍａｎｔ２３  ５１３及びＧＲＳ５１７）を有する第１要素と、符号ビット（Ｓ５２１）、１０の指数ビット（Ｅｘ５２９及びＥｘｐ８  ５２２）、及び２８の仮数ビット（Ｏ５２５、イクスプリットビットＪ５２６、Ｍａｎｔ２３  ５２３及びＧＲＳ５２７）を含む第２要素の３９ビットを有する。フォーマット５０１は、第１要素及び／又は第２要素がそれぞれ非正規化要素であるか特定するためのフラグビットＩＭＤＮ５１４及び５２４のペアを含む。
【００５０】
フォーマット５０１の一実施例では、シングル精度要素のペアのコンポーネントが、２つのＰａｃｋｅｄデータレジスタに格納される。第１Ｐａｃｋｅｄデータレジスタは、フラグビットＩＭＤＮ５１４，５２４のペア、符号ビットＳ５２１（ビット６３など）、指数ビットＥｘｐ８  ５２２（ビット６２〜５５など）、仮数ビットＭａｎｔ２３  ５２３（ビット５４〜３２など）、符号ビットＳ５１１（ビット３１など）、指数ビットＥｘｐ８  ５１２（ビット３０〜２３など）、及び仮数ビットＭａｎｔ２３  ５１３（ビット２２〜０など）を有し、第２Ｐａｃｋｅｄデータレジスタは、２つの最上位仮数ビットＯ５２５とＪ５２６（ビット６３と５９など）、指数ビットＥｘ５２９（ビット６２〜６１など）、３つの最下位仮数ビットＧＲＳ５２７（ビット４２〜４０など）、２つの最上位仮数ビットＯ５１５とＪ５１６（ビット３４〜３３など）、指数ビットＥｘ５１９（ビット３２〜３１など）、及び３つの最下位仮数ビットＧＲＳ５１７（ビット６〜４など）を有する。
【００５１】
Ｐａｃｋｅｄ要素のコンポーネントがＰａｃｋｅｄ部分結果のペアとして２つのＰａｃｋｅｄデータレジスタに格納される特定位置は、Ｐａｃｋｅｄ部分結果のペアからのＰａｃｋｅｄ要素のコンポーネントを浮動小数点計算ユニット（非正規化のためのＳＩＭＤ  ＦＡＵ４００及び／又はＳＩＭＤ  ＦＤＵ４３０など）の内部浮動小数点表現に多重化することを容易にするため、設計者により選択されるかもしれないことは理解されるであろう。
【００５２】
フォーマット５０２は、ＳＩＭＤ浮動小数点演算のためのＰａｃｋｅｄソースオペランドの内部浮動小数点表現（ＦＡＵ４００などの浮動小数点計算ユニットなどにおける）の一例を示す。フォーマット５０１と同様に、フォーマット５０２は、シングル精度要素のペアの内部表現を有する。それぞれは、符号ビット（Ｓ５１１）、１０の指数ビット（Ｅｘ５１９及びＥｘｐ８  ５１２）、及び２８の仮数ビット（Ｏ５１５，Ｊ５１６，Ｍａｎｔ２３  ５１３及びＧＲＳ５１７）を含む第１要素と、符号ビット（Ｓ５２１）、１０の指数ビット（Ｅｘ５２９及びＥｘｐ８  ５２２）、及び２８の仮数ビット（Ｏ５２５，Ｊ５２６，Ｍａｎｔ２３  ５２３，ＧＲＳ５２７）を含む第２要素との３９ビットを有する。フォーマット５０２の一実施例では、浮動小数点計算ユニットの内部浮動小数点表現は、第１要素のためのＥｘ５１９とＥｘｐ８  ５１２（ビット９〜０など）と、第２要素のためのＥｘ５２９及びＥｘｐ８  ５２２（ビット９〜０など）とを別々の指数を格納する。フォーマット５０２の本実施例では、これら２つの要素の仮数は、Ｐａｃｋｅｄ仮数として格納され、第１仮数は、Ｏ５１５（ビット６７など）、Ｊ５１６（ビット６６など）、Ｍａｎｔ２３  ５１３（ビット６５〜４３など）及びＧＲＳ５１７（ビット４２〜４０など）を有し、第２仮数は、Ｏ５２５（ビット３１など）、Ｊ５２６（ビット３０など）、Ｍａｎｔ２３  ５２３（ビット２９〜７など）及びＧＲＳ５２７（ビット６〜４など）を有し、それぞれの最下位ビットにゼロパディングを有する（ビット３９〜３２とビット３〜０など）。
【００５３】
図５ｂは、Ｐａｃｋｅｄ浮動小数点数の内部表現を格納するための一例となるストレージフォーマット５０３，５０４を示す。フォーマット５０３，５０４は、１つのダブル精度浮動小数点数を用いて示されるが、フォーマット５０３，５０４は、典型的には、広範なＰａｃｋｅｄ浮動小数点オペランド（４つのシングル精度要素又は２つのダブル精度要素を有するＰａｃｋｅｄオペランド、又は８つのシングル精度要素又は４つのダブル精度要素を有するＰａｃｋｅｄオペランドなど）を単に示す。
【００５４】
フォーマット５０３は、ＳＩＭＤ浮動小数点演算のＰａｃｋｅｄオペランドのダブル精度デスティネーションオペランド要素のＰａｃｋｅｄ部分結果のペア（レジスタファイルバイパスネットワーク３０８などのＳＩＭＤレジスタファイルにおける）の一例を示す。フォーマット５０３は、符号ビット（Ｓ５３１）、１３以上の指数ビット（Ｅｘ５３９及びＥｘｐ１１  ５３２）、及び５７の仮数ビット（Ｏ５３５、イクスプリシットビットＪ５３６、Ｍａｎｔ５２  ５３３及びＧＲＳ５３７）を含む７１以上のビットを有するダブル精度要素のＰａｃｋｅｄ部分結果のペアを含む。フォーマット５０３は、各ダブル精度要素に係り、当該要素が非正規化要素であるか特定するフラグビットＩＭＤＮ５３４を有する。
【００５５】
Ｐａｃｋｅｄ要素のコンポーネントがＰａｃｋｅｄ部分結果のペアとして２つのＰａｃｋｅｄデータレジスタに格納される具体的な位置が、Ｐａｃｋｅｄ部分結果のペアからのＰａｃｋｅｄ要素のコンポーネントを浮動小数点計算ユニットの内部的な浮動小数点表現に多重化することを容易にするよう設計者により選択されるかもしれない。
【００５６】
フォーマット５０４は、ＳＩＭＤ浮動小数点演算のＰａｃｋｅｄオペランドのＰａｃｋｅｄソースオペランド要素の内部的な浮動小数点表現（ＦＡＵ４００などの浮動小数点計算ユニットにおける）の一例を示す。フォーマット５０３と同様に、フォーマット５０４は、符号ビット（Ｓ５３１）、１３以上の指数ビット（Ｅｘ５３９及びＥｘｐ１１  ５３２）、及び５７の仮数ビット（Ｏ５３５，Ｊ５３６，Ｍａｎｔ５２  ５３３，ＧＲＳ５３７）を含む７１以上のビットを有するダブル精度要素の内部表現を含む。フォーマット５０４の一実施例では、浮動小数点計算ユニットの内部的な浮動小数点表現は、各要素について別々の指数Ｅｘ５３９及びＥｘｐ１１  ５３２を格納する（ビット１６〜０など）。フォーマット５０４の本実施例では、Ｐａｃｋｅｄ要素の仮数は、Ｐａｃｋｅｄ仮数として格納されてもよく、第１仮数は、それぞれの最下位ビットにゼロパディングを有する（ビット１０〜０など）、Ｏ５３５（ビット６７など）、Ｊ５３６（ビット６６など）、Ｍａｎｔ５２  ５３３（ビット６５〜１４など）及びＧＲＳ５３７（ビット１４〜１１など）を有する。
【００５７】
内部的なストレージフォーマット５０１〜５０４を用いて、Ｐａｃｋｅｄ浮動小数点データは固定サイズのレジスタに格納され、ＳＩＭＤ浮動小数点例外は、スカラー演算に変換し、少数のさらなるマイクロ演算の実行しか必要とすることなく、透過的に処理されるかもしれない。また、フォーマット５０１，５０２，５０３及び／又は５０４の実施例では、いくつかのビット（Ｏ５２５，Ｊ５２６，Ｏ５３５及び／又はＪ５３６など）がインプリシットに表現されることは理解されるであろう。
【００５８】
図６は、ＳＩＭＤ浮動小数点加算器における特定の数値例外を処理するためのプロセス６０２の一実施例のフロー図を示す。ここに開示されるプロセス６０１と他のプロセスは、専用のハードウェア、又は汎用マシーン、特定用途マシーン若しくはこれらの組み合わせにより実行可能なソフトウェア若しくはファームウェア処理コードを有する処理ブロックにより実行される。ここに開示されるプロセス６０１と他のプロセスの一部の実施例は、マシーン実行可能な命令又は状態遷移により実現される。これらの命令又は状態遷移は、命令又は状態遷移によりプログラムされる汎用又は特定用途プロセッサに本発明の各ステップを実行させるのに利用可能である。
【００５９】
本発明は、本発明のプロセスを実行するようコンピュータ（又は他の電子装置）をプログラムするのに利用可能な命令又は状態遷移を格納したマシーン若しくはコンピュータ可読媒体を有するコンピュータプログラムプロダクト又はソフトウェア若しくはマイクロコードパッチとして提供されてもよい。このようなソフトウェアは、システム又はネットワークサーバのメモリ内に格納可能である。同様に、コードは、ネットワークを介し又は他のコンピュータ可読媒体により配布可能である。このため、マシーン可読媒体は、マシーン（コンピュータなど）により可読な形式により情報を格納又は送信するための何れかの機構を有してもよく、限定されることなく、フロッピー（登録商標）ディスケット、光ディスク、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、光磁気ディスク、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  ＥＰＲＯＭ）、磁気若しくは光カード、フラッシュメモリ、インターネット、電気、光、音響若しくは他の形式の伝搬信号の伝送を含む。
【００６０】
処理ブロック６１１において開始され、ＳＩＭＤ浮動小数点加算演算のＰａｃｋｅｄオペランドの非正規化オペランド要素が、ＳＩＭＤ  ＦＡＵの浮動小数点加算回路の１つに受付される。処理ブロック６１２において、ＳＩＭＤ浮動小数点加算演算の第２Ｐａｃｋｅｄオペランドの対応する第２エペランド要素がまた非正規化であるか判断される。一実施例では、非正規化オペランドと対応する第２オペランドとが、非正規化検出回路により検出されてもよい（回路４４１〜４４８の１つなど）
対応する第２オペランド要素が非正規化でない場合、非正規化オペランド要素と対応する第２オペランド要素とが、処理ブロック６１３においてアライメント回路に入力され、非正規化オペランド要素の仮数がバイアスされていない指数差分に従って、対応する第２オペランド要素の仮数に揃えられる。そうでない場合、対応する第２オペランド要素がまた非正規化である場合、非正規化オペランド要素と対応する第２オペランド要素の仮数はすでに揃えられており、このため、処理は直接処理ブロック６１４に移行して、仮数が浮動小数点加算回路により加算される。
【００６１】
処理ブロック６１５において、加算の結果がＳＩＭＤ浮動小数点加算演算のＰａｃｋｅｄ結果の正規化浮動小数点の結果の要素として表現できるか判断される。そうである場合、処理ブロック６１６において結果としての和が正規化される。そうでない場合、結果としての和は、処理ブロック６１７において単に丸められ、処理ブロック６１８において再び正規化され（Ｏが１に等しい場合、１ビットだけ右シフトされるなど）、ＳＩＭＤ浮動小数点加算演算のＰａｃｋｅｄ結果が処理ブロック６１９において格納されると、非正規化結果がＰａｃｋｅｄ結果の要素として格納されてもよい。ＳＩＭＤ浮動小数点加算演算のＰａｃｋｅｄ結果を格納する結果ストレージ回路がまた、処理ブロック６１５において、結果としての和が正規化浮動小数点の結果要素として表現できないと判断された場合、結果としての和を特定するフラグをＰａｃｋｅｄ結果の非正規化結果要素として格納してもよいことが理解されるであろう。
【００６２】
プロセス６０１の各実施例はさらなる支援を必要とすることなく（マイクロコードなどから）、ＳＩＭＤ実行ユニット（ＳＩＭＤ浮動小数点実行ユニット３１６など）におけるＳＩＭＤ浮動小数点演算における非正規化などの共通する例外入力を処理するかもしれないということが理解されるであろう。
【００６３】
図７は、ＳＩＭＤ浮動小数点乗算器において特定の共通の（マスクされた）例外を処理するプロセス７０１の一実施例のフロー図を示す。処理ブロック７１１において、ＳＩＭＤ浮動小数点乗算演算のＰａｃｋｅｄオペランドの例外オペランド要素は、ＳＩＭＤ  ＦＭＵの浮動小数点乗算回路の１つにおいて受付される。処理ブロック７１２において、対応するオペランド要素の指数が比較される。この比較に基づき、例外オペランド要素による乗算の対応する結果の予測が、処理ブロック７１３において行われる。処理ブロック７１４において、この結果がゼロであると予想された場合、処理は処理ブロック７１７に移行し、予測されたゼロの値が結果として格納される。そうでない場合、処理は処理ブロック７１５に移行し、結果が表現可能な最小の非正規化となるよう予測される場合、処理は処理ブロック７１７に移行して、予測された表現可能な最小の非正規化値が結果として格納される。そうでない場合、処理は、任意的には処理ブロック７１６に継続し、結果が無限大であると予測された場合、処理は処理ブロック７１７に移行して、予測された無限大の値が結果として格納される。そうでない場合、処理ブロック７１８において、乗算が受け付けたオペランドに対して実行され、発生した例外が、ここに開示される他の技術に従って処理される（プロセス８０１などのように）。
【００６４】
プロセス７０１の各実施例は、さらなる支援を必要とすることなく（マイクロコードなどから）ＳＩＭＤ実行ユニット（ＳＩＭＤ浮動小数点実行ユニット３１６など）においてＳＩＭＤ浮動小数点演算の共通する例外結果を予測及び処理するようにしてもよいことが理解されるであろう。このように通常発生するケースでは、例外ケースを処理するためのペナルティは実質的に解消又は軽減されるかもしれない。あるいは、スカラー演算に変換し、少数の追加的なマイクロ演算しか実行することを要することなく、ＳＩＭＤ浮動小数点例外を処理するための技術が、残りのケースにおいて利用されてもよい。
【００６５】
図８は、ＳＩＭＤ浮動小数点命令を実行するプロセッサにおいて非正規化浮動小数点例外を処理するプロセス８０１の他の実施例のフロー図を示す。処理ブロック８１１において、ＳＩＭＤ浮動小数点演算のための数値例外が特定される。数値例外に応答して、必要に応じて１以上の任意的な正規化マイクロ演算が処理ブロック８１２において開始される。プロセス８１０の一実施例では、正規化マイクロ演算は、ＳＩＭＤ浮動小数点演算がＳＩＭＤ浮動小数点乗算器によって少なくとも部分的に実行される場合に開始される（乗算、除算、平方根又はシングルからダブル精度への変換など）。正規化マイクロ演算の結果として、Ｐａｃｋｅｄオペランドは、非正規化を有したＳＩＭＤ浮動小数点演算のオリジナルのＰａｃｋｅｄオペランドの正規化された擬似的な内部浮動小数点表現として格納されてもよい。プロセス８０１の一実施例では、ＳＩＭＤ浮動小数点加算器が入力として非正規化を含むオペランドを受付可能であるとき、ＳＩＭＤ浮動小数点演算がＳＩＭＤ浮動小数点かさっきにより実行される場合（加算／減算又はダブルからシングル精度への変換など）、正規化マイクロ演算は不要である。
【００６６】
処理ブロック８１３において、第１ＳＩＭＤマイクロ演算がＳＩＭＤ浮動小数点演算の第１Ｐａｃｋｅｄ部分結果を生成するため開始され、第２ＳＩＭＤマイクロ演算が、ＳＩＭＤ浮動小数点演算の第２Ｐａｃｋｅｄ部分結果を生成するため開始される。プロセス８０１の一部の実施例では、第１及び第２ＳＩＭＤマイクロ演算は、それらがＳＩＭＤ浮動小数点演算のＰａｃｋｅｄ結果に対して格納されるＰａｃｋｅｄ部分結果のペアを生成する限り、何れかの順序により実行されてもよいことが理解されるであろう。
【００６７】
処理ブロック８１４において、ＳＩＭＤ非正規化マイクロ演算が、Ｐａｃｋｅｄ部分結果のペアを合成し、必要に応じて対応する非正規化要素を有するＰａｃｋｅｄ結果を生成するよう合成されたＰａｃｋｅｄ部分結果の何れかの要素を非正規化するよう開始される。ＳＩＭＤ  ＦＡＵ４００の一部の実施例では、Ｐａｃｋｅｄ部分結果のペアの合成はまた、数値例外処理モードのフェーズ１においてＰａｃｋｅｄ部分結果を正規化することを含むかもしれない。処理ブロック８１５において、Ｐａｃｋｅｄ結果の非正規化要素を特定するため、例外フラグ（ＩＭＤＮ５１４及び５２４又は５３４など）が計算される。これらの例外フラグは、処理ブロック８１６において、ＳＩＭＤ浮動小数点演算のＰａｃｋｅｄ結果と共に結果として格納される。
【００６８】
プロセス８０１の各実施例は、非正規化を生成し、再実行を必要とするＳＩＭＤ浮動小数点例外を処理するために利用可能な効率的な技術を提供することが理解されるであろう。このような例外は、スカラー演算に変換し、少数の追加的なマイクロ演算の実行しか必要とすることなく、透過的に処理されるかもしれない。
【００６９】
上記説明は、本発明の好適な実施例を示すためのものである。上記説明から、特に成長が速くさらなる進歩が容易には予想されない技術分野において、本発明は、添付した請求項とそれの均等の範囲内の本発明の原理から逸脱することなく、当業者により構成及び詳細について変更可能であることが明らかである。
【符号の説明】
【００７０】
２００  システム
２０３  実行ユニット
２０７  キャッシュメモリ
２０８  レジスタファイル
２０９  Ｐａｃｋｅｄ命令セット
２１０  プロセッサバス
２２０  メモリ
３００  プロセッサ
【図１】
2014002767.tif 000004
【図２】
2014002767.tif 000005
【図３】
2014002767.tif 000006
【図４】
2014002767.tif 000007
【図５ａ】
2014002767.tif 000008
【図５ｂ】
2014002767.tif 000009
【図６】
2014002767.tif 000010
【図７】
2014002767.tif 000011
【図８】
2014002767.tif 000012