(57)【要約】      （修正有）【課題】入力値に逆数演算を実施して作り出される結果値の初期推定値を発生するデータ処理装置および方法を得る。【解決手段】入力値および結果値は固定小数点値または浮動小数点値である。データ処理装置は命令を実行してデータにデータ処理演算を実施する処理論理と、結果値の初期推定値発生中に処理論理が参照するルックアップテーブルを含み、推定値命令に応答してルックアップテーブルを参照し、予め定められた範囲内の修正入力値に応じて、テーブル出力値を発生する。特定の修正入力値に対しては、入力値が固定小数点値であるか浮動小数点であるかにかかわらず、同じテーブル出力値が発生される。結果値の初期推定値をテーブル出力値から引き出すことができる。固定小数点値または浮動小数点値に逆数演算が実施されるデータ処理装置内で初期推定値発生を実施する特に効率的な技術が提供される。【選択図】図２
2006228191.tif 000002
【特許請求の範囲】
【請求項１】
入力値に逆数演算を実施することにより作り出される結果値の初期推定値を発生するデータ処理装置であって、入力値および結果値は固定小数点値または浮動小数点値であり、前記データ処理装置は、
命令を実行してデータにデータ処理演算を実施するように動作する処理論理と、
結果値の初期推定値の発生中に処理論理が参照するルックアップテーブルと、
を含み、
処理論理は推定値命令に応答してルックアップテーブルを参照し、予め定められた範囲内の修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、
結果値の初期推定値はテーブル出力値から引き出すことができるデータ処理装置。
【請求項２】
請求項１に記載のデータ処理装置であって、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じ推定値命令が使用されるデータ処理装置。
【請求項３】
請求項１に記載のデータ処理装置であって、
入力値および結果値は浮動小数点数であり、
推定値命令はオペランドとして入力値を指定するように動作することができ、
処理論理は推定値命令に応答して修正入力値を評価し、ルックアップテーブルを参照してテーブル出力値を発生し、テーブル出力値から結果値の初期推定値を引き出すように動作することができる、データ処理装置。
【請求項４】
請求項３に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆数を作り出し、処理論理はその仮数部(significand)が０.５以上１未満の範囲内である値を修正入力値として選択するように入力値を操作するように動作することができるデータ処理装置。
【請求項５】
請求項４に記載のデータ処理装置であって、処理論理は修正入力値として入力値の仮数部(significand)の有効１ビット右シフトの結果を選択するように動作することができ、結果値の初期推定値はテーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、入力値の指数部を増分かつ否定して結果値の推定値の指数部を作り出すことにより引き出されるデータ処理装置。
【請求項６】
請求項３に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆平方根を作り出し、処理論理はその仮数部(significand)が０.２５以上１未満の範囲内である値を修正入力値として選択するように入力値を操作するように動作することができるデータ処理装置。
【請求項７】
請求項６に記載のデータ処理装置であって、処理論理は、修正入力値が偶数の指数部を有するように、入力値の指数部の関連する増分と共に、入力値の仮数部(significand)の有効１ビットまたは有効２ビット右シフトの結果を修正入力値として選択するように動作することができ、結果値の初期推定値はテーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、かつ修正入力値の指数部を半分して否定することにより結果値の推定値の指数部を作り出すことにより引き出されるデータ処理装置。
【請求項８】
請求項１に記載のデータ処理装置であって、
入力値および結果値は固定小数点数であり、
修正入力値は推定値命令を実行する前に作り出され、
推定値命令はオペランドとして修正入力値を指定し、
処理論理は推定値命令に応答してルックアップテーブルを参照しテーブル出力値を発生し、
推定値命令を実行した後で後続処理ステップが実施されてテーブル出力値から結果値の初期推定値を引き出す、データ処理装置。
【請求項９】
請求項８に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆数を作り出し、修正入力値は０.５以上１未満の範囲内の値であるデータ処理装置。
【請求項１０】
請求項８に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆平方根を作り出し、修正入力値は０.２５以上１未満の範囲内の値であるデータ処理装置。
【請求項１１】
請求項８に記載のデータ処理装置であって、修正入力値は入力値の有効左シフトを実施して予め定められた範囲内の値を作り出すことにより作り出され、結果値の初期推定値は前の有効左シフトの影響を取り消すのに十分なテーブル出力値の有効右シフトを実施して作り出されるデータ処理装置。
【請求項１２】
入力値に逆数演算を実施することにより作り出される結果値の初期推定値を発生するデータ処理装置であって、入力値および結果値は固定小数点値または浮動小数点値であり、前記データ処理装置は、
命令を実行してデータにデータ処理演算を実施する処理手段と、
結果値の初期推定値の発生中に処理手段が参照するルックアップテーブルと、
を含み、
処理手段は推定値命令に応答してルックアップテーブルを参照し、予め定められた範囲内の修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、
結果値の初期推定値はテーブル出力値から引き出すことができるデータ処理装置。
【請求項１３】
入力値に逆数演算を実施することにより作り出される結果値の初期推定値を発生するデータ処理装置の動作方法であって、入力値および結果値は固定小数点値または浮動小数点値であり、前記方法は、
（ａ）入力値から予め定められた範囲内である修正入力値を評価するステップと、
（ｂ）推定値命令に応答し、処理論理を利用してルックアップテーブルを参照して、修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生されるステップと、
（ｃ）テーブル出力値から結果値の初期推定値を引き出すステップと、
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は逆数演算(reciprocal operation)の結果値の初期推定値を発生するデータ処理装置および方法に関連している。
【背景技術】
【０００２】
ｄが入力値である1/Fn(d)の形の演算である逆数演算をしばしば実施する必要があるいくつかのデータ処理アプリケーションがある。しばしば必要とされる２つのこのような逆数演算は入力値の逆数、すなわち1/d，または入力値の逆平方根、すなわち1/√d,の計算を伴う。これら特定の２つの逆数演算は、たとえば、グラフィックス処理アプリケーションでしばしば使用される。
【０００３】
このような逆数演算を実施するための専用ハードウェアを開発することができるが、典型的にはデータ処理装置をできるだけ小型のままとして、可能であればハードウェア論理を再利用するのが望ましい。
【０００４】
専用ハードウェアを必要としない逆数および逆平方根等の複素関数の結果を求める既知の技術は結果値に収束させるために計算の反復実行を利用する。１つの特定のこのような反復過程は一般的にニュートン-ラフソン法と言われている。ニュートン-ラフソン法に従って、結果値の初期推定値が作られ、次に、実際の結果値に収束させるために精緻化(refinement)ステップが反復実行される。
【０００５】
モトローラ社のAltiVec技術は逆数および逆平方根機能を評価するためにニュートン-ラフソン精緻化技術を使用する。ニュートン-ラフソン精緻化技術を利用して逆数および逆平方根を計算するデータ処理装置のもう１つの例が米国特許第6,115,733号に記載されている。これら両方のシステムにおいて、入力値に基づいて、逆数演算に対する結果値の初期推定値を求めるために初期推定値発生器が使用される。典型的に、この初期推定値を求めるのにルックアップテーブルが使用され、サポートされる各タイプの逆数演算に対して異なるルックアップテーブルが提供される。
初期推定値の品質は逆数演算の高速実行にとって重要であり、初期推定値のサイズは指定された精度に達するのに必要な反復ステップ数を規定する。
【０００６】
あるデータ処理装置では、データ処理装置は固定小数点値と浮動小数点値の両方を処理する必要がある。固定小数点データ値は２進小数点がデータ値内の予め定められた点に存在することを意味する値である。たとえば、16.16固定小数点フォーマットは３２ビット値が２進小数点の前に１６ビットを有し２進小数点の後に１６ビットを有するものと推定する。整数値は２進小数点が最下位ビットのすぐ右に存在すると考えられる固定小数点値の特定例である。
【０００７】
「正規」範囲内であると考えられる浮動小数点値は次のように表すことができ、
±1.x*2y
ここに、x=小数部(fraction)
1.x=仮数部(significand)(mantissaとしても知られる)
y=指数部
規定された正規以下範囲内の浮動小数点データ値は次のように表すことができ、
±0.x*2min
ここに、x=小数部(fraction)
0.x=仮数部(significand)(mantissaとしても知られる)
min=-126（単精度値に対して）、-1022（倍精度値に対して）
【０００８】
逆数演算の実施が浮動小数点データ値および固定小数点データ値の両方に対してサポートされる場合、各データフォーマットに対する関連する別々のルックアップテーブルと共に、各データフォーマットに対する別々の推定値論理を与える必要があると考えられる。
【特許文献１】米国特許第６，１１５，７３３号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、データ処理装置では、典型的にそのサイズはできるだけ小さいままとし、特に、データ処理装置内に設けられる論理を効率的に使用できることが望ましい。したがって、逆数演算に対する初期推定値の発生に関して、浮動小数点および固定小数点の両方に対して初期推定値の決定をサポートしながら、必要な推定値発生論理を効率的な方法でインプリメントすることができるデータ処理装置を提供することが望ましい。
【課題を解決するための手段】
【００１０】
第１の側面から見て、本発明は入力値に逆数演算を実施して作り出される結果値の初期推定値を発生するデータ処理装置を提供し、入力値および結果値は固定小数点値または浮動小数点値であり、データ処理装置は命令を実行してデータにデータ処理演算を実施するように動作する処理論理と、結果値の初期推定値発生中に処理論理により参照されるルックアップテーブルとを含み、処理論理は推定値命令に応答してルックアップテーブルを参照し、予め定められた範囲内の修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、結果値の初期推定値はテーブル出力値から引き出すことができる。
【００１１】
本発明に従って、入力値に逆数演算を実施する時に、修正入力値は予め定められた範囲内であると考えられ、次に、推定値命令に応答して処理論理はルックアップテーブルを参照し、修正入力値に応じて、テーブル出力値を発生する。ここで使用される「ルックアップテーブル」という用語はルックアップテーブルの機能性を提供する任意のインプリメンテーションをカバーするものとし、したがって、たとえば、Read Only Memory (ROM)やランダム論理を含むことができる。特定の修正入力値に対して、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生される。次に、結果値の初期推定値がテーブル出力値から引き出される。
【００１２】
本発明の方法に従って、逆数演算に対する結果値の初期推定値を求める時に、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず、同じ処理論理が使用されかつ同じルックアップテーブルが参照されて、データ処理装置内の論理を効率的に使用し固定小数点および浮動小数点用の別々のルックアップテーブルを設ける必要性を回避する。
【００１３】
ここで参照されるルックアップテーブルは全ての非例外修正入力値、すなわち、予め定められた範囲内の全ての修正入力値に対する出力値を与える。例外修正入力値に対しても出力を与えるようにルックアップテーブルがなんらかの方法で拡張されておれば、本目的に対するルックアップテーブルは全ての非例外修正入力値に対して出力を与えた部分である。一実施例では、入力値が固定小数点であるか浮動小数点であるかにかかわらず同じ推定値命令が使用される。デコーダはデコードされる命令が推定値命令であることを識別する必要しかないため、このような方法により必要な推定値命令のデコーディングは少なくなり、次に、推定値命令が固定小数点値または浮動小数点値に関連するかどうかを確認する必要なしに、必要な初期推定値発生が実施されるように推定値命令を処理論理へ送ることができる。
【００１４】
一実施例では、入力値および結果値は浮動小数点数であり、推定値命令はオペランドとして入力値を指定するように動作することができ、処理論理は推定値命令に応答して修正入力値を評価し、ルックアップテーブルを参照してテーブル出力値を発生し、テーブル出力値から結果値の初期推定値を引き出すように動作することができる。したがって、この実施例では、単一推定値命令により処理論理は必要な全ての処理ステップをインプリメントして入力値から結果値の必要な初期推定値を発生する。
一実施例では、データ処理装置は正規浮動小数点値および特殊ケース（無限大、非数値（Ｎｏｔ  ａ  Ｎｕｍｂｅｒ  ｖａｌｕｅｓ：ＮａＮｓ）およびゼロ）を処理するようにされており、正規以下値は符号付ゼロ値に揃えられる。しかしながら、後述するように、代替実施例は同じ原理を使用して正規以下値を直接処理するようすることができる。
一実施例では、逆数演算は結果値として入力値の逆数を作り出し、処理論理は修正入力値としてその仮数部(significand)が０.５以上１未満の範囲内である値を選択するように入力値を操作するように動作することができる。入力値のこのような操作を実施することにより、浮動小数点数の仮数部(significand)に対する所要範囲である１以上２未満の範囲内である結果値の推定値の仮数部(significand)を形成するのにテーブル出力値を容易に使用できることが保証される。したがって、それに続く正規化ステップは不要である。
【００１５】
特定の一実施例では、処理論理は修正入力値として入力値の仮数部(significand)の有効１ビット右シフトの結果を選択するように動作することができ、結果値の初期推定値はテーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、入力値の指数部を増分かつ否定(negate)することにより結果値の推定値の指数部を作り出すことにより引き出される。
一実施例では、逆数演算は結果値として入力値の逆平方根を作り出し、処理論理は修正入力値としてその仮数部(significand)が０.２５以上１未満の範囲内である値を選択するように入力値を操作するように動作することができる。修正入力値がこの範囲内に仮数部(significand)を有することを保証することにより、１以上２未満の範囲内に入る結果値の推定値の仮数部(significand)を形成するのにテーブル出力値を使用できることが保証され、したがって、それに続く正規化ステップを実施する必要性が回避される。
【００１６】
逆数演算が結果値として入力値の逆平方根を作り出す時に使用されるルックアップテーブルは逆数演算が結果値として入力値の逆数を作り出す時に使用されるルックアップテーブルと異なるが、前記したように、これら２種の逆数演算のいずれにおいても、同じルックアップテーブルを固定小数点および浮動小数点値の両方に使用することができる。
【００１７】
特定の一実施例では、処理論理は修正入力値が偶数である指数部を有するように、入力値の指数部の関連する増分と共に、入力値の仮数部(significand)の有効１ビットまたは有効２ビット右シフトの結果を修正入力値として選択するように動作することができ、結果値の初期推定値はテーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、かつ修正入力値の指数部を半分にして否定する(negating)ことにより結果値の推定値の指数部を作り出すことにより引き出される。その指数部が偶数である修正入力値を選択するように入力値を操作することにより、結果値の推定値の指数部を発生する時に修正入力値の指数部を半分にして否定する過程が単純化される。
【００１８】
一実施例では、入力値および結果値は固定小数点数であり、修正入力値は推定値命令を実行する前に作り出され、推定値命令はオペランドとして修正入力値を指定するように動作することができ、処理論理は推定値命令に応答してルックアップテーブルを参照してテーブル出力値を発生することができ、後続処理ステップは推定値命令の実行後に実施されてテーブル出力値から結果値の初期推定値を引き出す。したがって、この実施例では、推定値命令はオペランドとして修正入力値を受信し、次に、推定値命令を実行してルックアップテーブルのルックアップが行われるようにされる。次に、結果値の初期推定値がテーブル出力値から引き出される。修正入力値の生成およびテーブル出力値からの結果値推定値の導出は一実施例ではソフトウェアで実施される。
特定の一実施例では、逆数演算は結果値として入力値の逆数を作り出し、修正入力値は０.５以上１未満の範囲内の値である。別の実施例では、逆数演算は結果値として入力値の逆平方根を作り出し、修正入力値は０.２５以上１未満の範囲内の値である。
【００１９】
固定小数点数を処理する時は、修正入力値が入るべき予め定められた範囲に応じて、受信入力値から修正入力値を作り出すことができるいくつかの方法がある。しかしながら、一実施例では、修正入力値は入力値の有効左シフトを実施して予め定められた範囲内の値を作り出すことにより作り出され、結果値の初期推定値は前の有効左シフトの影響を取り消すのに十分なテーブル出力値の有効右シフトを実施して作り出される。
【００２０】
第２の側面から見て、本発明は入力値に逆数演算を実施して作り出される結果値の初期推定値を発生するデータ処理装置を提供し、入力値および結果値は固定小数点値または浮動小数点値であり、データ処理装置は命令を実行してデータにデータ処理演算を実施する処理手段と、結果値の初期推定値の発生中に処理手段が参照するルックアップテーブル手段とを含み、処理手段は推定値命令に応答してルックアップテーブルを参照して、予め定められた範囲内の修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、結果値の初期推定値はテーブル出力値から引き出される。
【００２１】
第３の側面から見て、本発明は入力値に逆数演算を実施することにより作り出される結果値の初期推定値を発生するデータ処理装置の動作方法を提供し、それは入力値および結果値は固定小数点値または浮動小数点値であり、前記方法は（ａ）入力値から予め定められた範囲内の修正入力値を評価し、（ｂ）推定値命令に応答して、処理論理を利用してルックアップテーブルを参照し、修正入力値に応じて、テーブル出力値を発生し、特定の修正入力値に対しては入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生され、（ｃ）テーブル出力値から結果値の初期推定値を引き出すステップを含んでいる。
【実施例】
【００２２】
単なる例として添付図に例示されている実施例について本発明をさらに説明する。図１は本発明の一実施例に従ったデータ処理装置１０を略示するブロック図である。データ処理装置１０は必要とする命令およびデータ値が格納されるメモリシステム２０に接続される。データ処理装置１０はメモリ２０から取得される一連の命令を実行するようにされている。特に、各命令は命令デコーダ７０によりメモリ２０から取得され、そこで命令はデコードされ命令に応じて適切な制御信号がデータ処理装置の他のエレメントに送られて命令により指定された操作がインプリメントされる。
【００２３】
データ処理装置１０はメモリ２０からのデータ値をデータ処理装置のレジスタファイル３０内にロードし、レジスタファイル３０からのデータ値をメモリ２０に格納するロード/ストア・ユニット６０を内蔵している。
【００２４】
データ値に算術演算を実施するために算術論理演算装置（ＡＬＵ）パイプライン５０が設けられ、ＡＬＵパイプライン５０への入力データ値は入力マルチプレクサ４０により与えられる。典型的に、ＡＬＵパイプライン５０内で算術演算を実行する時は、必要な入力データ値がレジスタファイル３０から入力マルチプレクサ４０を介してＡＬＵパイプライン５０へ送られる（これらのデータ値は算術演算を指定する命令を実行する前にレジスタファイル３０内に格納されている）。
【００２５】
ＡＬＵパイプライン５０から出力されたデータ値は適切なデスティネーションレジスタに格納するためにレジスタファイル３０へ送ることができ、さらに/またはそのデータ値が後続算術演算用入力として必要であれば入力マルチプレクサ４０への入力として転送し戻すことができる。本発明の実施例では、２つの一定値を入力マルチプレクサ４０に与えることもでき、それらは命令デコーダ７０から与えられる制御信号に応じて入力マルチプレクサ４０が選択することができる。
【００２６】
後述するように、データ処理装置が精緻化ステップの反復実行を伴う逆数演算を実施している時は、精緻化ステップの一部は乗算-累算演算の実施を必要とすることがあり、そこでは２つの値が乗算され次に定数から減じられる。特に、一実施例では、逆数演算は結果値として入力値の逆数を作り出し、ここでは必要な定数は値「２」であり、この値はレジスタファイル３０のレジスタに予めロードすることなく入力マルチプレクサ４０へ一入力の一つとして与えられる。同様に、もう１つの実施例では、逆数演算は結果値として入力値の逆平方根を作り出し、ここでは必要な定数は値「３」である。図１に示すように、やはりこの一定値はレジスタファイル３０のレジスタに最初にロードすることなく入力マルチプレクサ４０に直接与えられる。
【００２７】
図２はデータ処理装置１０内の前記したタイプの逆数演算をインプリメントするために実施されるステップのシーケンスを示すフロー図である。最初に、ステップ１１０において、逆数演算の対象である入力値がフォーマット化されてテーブルルックアップを実施するのに必要なビットを抽出することができる修正入力値を作り出し、テーブルルックアップの出力は結果値に対する初期推定値を引き出すのに使用される。
【００２８】
逆数演算は入力値として固定小数点データ値または浮動小数点データ値を指定することができる。固定小数点データ値は小数点がデータ値内の予め定められた点に存在することを意味する値である。たとえば、１６.１６固定小数点フォーマットは３２ビット値が小数点の前に１６ビットを有し、小数点の後に１６ビットを有するものと推定する。整数値は最下位ビットのすぐ右に小数点が存在すると考えられる固定小数点値の特定例である。
【００２９】
規定された正規範囲内の浮動小数点データ値は次のように表すことができ、
±1.x*2y
ここに、x=小数部(fraction)
1.x=仮数部(significand)（mantissaとしても知られる）
y=指数部
【００３０】
規定された正規以下範囲内の浮動小数点データ値は次のように表すことができ、
±0.x*2min
ここに、x=小数部(fraction)
0.x=仮数部(significand)（mantissaとしても知られる）
min=-126（単精度値に対して）、-1022（２倍精度値に対して）
【００３１】
ここに記述される実施例は正規浮動小数点値および特殊ケース（無限大、非数値（Ｎｏｔ−ａ−Ｎｕｍｂｅｒ  ｖａｌｕｅｓ：ＮａＮｓ）およびゼロ）を処理するようにされており、正規値以下は符号付ゼロ値に揃えられる。しかしながら、代替実施例はここに記述されたある原理を使用して直接正規値以下を処理するようにすることができる。
【００３２】
最初に逆数演算の対象である入力値が浮動小数点値である状況を考えると、修正入力値がＡＬＵパイプライン５０内で評価され、修正入力値の仮数部(significand)が予め定められた範囲内となるようにされる。特に、逆数演算が結果値として入力値の逆数を作り出す場合、修正入力値はその仮数部(significand)が０.５以上で１よりも小さい範囲内の値である。ステップ１１０において、修正入力値のこのような評価はオリジナル入力値により指定されるある小数部(fraction)ビットを、図３に略示するような、テーブル入力として選択できるようにするＡＬＵパイプライン５０内での入力値の適切なフォーマット化を介して達成することができる。
【００３３】
図３に示すように、単精度浮動小数点値、すなわち３２ビット値、を考えると、浮動小数点値の小数部(fraction)はビット２２から０により与えられる。入力値は1.ab..x2nの形であり、したがって、仮数部(significand)は当然１以上で２よりも小さい範囲内である。０.５以上で１よりも小さい範囲内の仮数部(significand)を作り出すために、指数値の関連する増分と共に、仮数部(significand)の有効な１ビット右シフトが必要である。したがって、修正入力値の仮数部(significand)は0.1ab...でありテーブルルックアップは0.1ab...の値に基づいて実施される。
【００３４】
しかしながら、先導する「１」が含まれる、オリジナル入力値から小数部(fraction)ビットを適切に選択するだけで同じ効果を実現できるため、実際には修正入力値を作り出すのにシフト操作を実施する必要はない。特に、図３に示すように、小数部(fraction)の最上位８ビット（Ｆ７からＦ０）が抽出されテーブルルックアップを実施するのに使用される。
【００３５】
再度浮動小数点値について、逆数演算が結果値として入力値の逆平方根を作り出す状況を考えると、ステップ１１０において実施されるフォーマット化はその仮数部(significand)が０.２５以上で１よりも小さい範囲内である修正入力値を選択する。それにより、ルックアップテーブルからの出力値を直接使用して１以上で２よりも小さい範囲内に仮数部(significand)を形成することが保証される。
【００３６】
一実施例では、図３に示すように、ステップ１１０における必要なフォーマット化は修正入力値（この段階で実際に作り出される必要はない）の形に関連する入力値の２３ビット小数部(fraction)から適切なビットを選択することができるマルチプレクサ論理によりＡＬＵパイプライン５０内で実施される。特に、この状況においてその指数部が偶数である修正入力値を作り出すように、修正入力値は入力値の指数部の関連する増分と共に、入力値の仮数部(significand)の有効１ビットまたは有効２ビット右シフトの結果であると考えることができる。次に、テーブル出力値を使用して結果値の推定値の仮数部(significand)を形成し、修正入力値の指数部を半分にしかつ否定する(negating)ことにより結果値の推定値の指数部を作り出して結果値の初期推定値を引き出すことができる。修正入力値の指数部を半分にして初期結果値の指数部を作り出す必要があるため、それが偶数の指数部を有するように修正入力値が選択される理由となる。
【００３７】
図３の最後の２つのエントリについて、入力浮動小数点値が偶数指数部を有するか奇数指数部を有するかに応じて異なるテーブル入力が発生されることが判る。特に、入力浮動小数点値が偶数指数部を有する場合には、修正入力値はその中に偶数指数部を保持するように有効２ビット右シフトから生じる値となり、入力値が奇数指数部を有する場合には、修正入力値が偶数指数部を有するように有効１ビット右シフトにより修正入力値が作り出される。
【００３８】
図３に示すビットはオリジナル入力値のビットであり、前記したように、修正入力値はこの段階で直接作り出される必要はなく、その代りオリジナル入力ビットがテーブル入力として選択される方法によりシミュレートすることができる。特に、図３に示すように、入力浮動小数点値が偶数指数部を有する場合、８ビットテーブル入力値が作り出されその最上位ビットは０であり、残りの７ビットは入力値の小数部(fraction)の最上位７ビットにより形成される。同様に、浮動小数点値が奇数指数部を有する場合、８ビットテーブル入力値は最上位ビットとして論理１値を有し、入力値の小数部(fraction)の最上位７ビットに対応する７ビットが続く。
【００３９】
次に、入力値が固定小数点値である状況について考えると、一実施例ではフォーマット化ステップ１１０は論理１値が最上位ビット位置または最上位ビット位置の次に現れるようにソフトウェアにより実施される有効シフト操作を含んでいる。次にルックアップテーブルへの入力を決定するためにＡＬＵパイプライン５０により使用されるのは得られる修正入力値であり、図３に示されているのはこの修正入力値である。特に、図３は３２ビット固定小数点値を示し、ソフトウェアは先導する１がビット位置３１またはビット位置３０となるようにオリジナル値を既に修正しているものとする。
【００４０】
逆数演算が結果値として入力値の逆数を作り出す場合、図３のトップエントリに示すように、ソフトウェアは固定小数点値の先導する１が最上位ビット位置（すなわち、ビット３１）となるように必要な左シフトを実施する。その後、ステップ１１０においてＡＬＵパイプライン５０はテーブル入力として修正入力値のビット３０から２３を形成する８ビットを選択するようにされる。
【００４１】
逆数演算が結果値として入力値の逆平方根を作り出す状況に付いて考えると、ソフトウェアは先導する１が２つの最上位ビット位置のいずれか一方となるようにオリジナルの固定小数点値の偶数ビット位置の左シフトを実施する。特に、図３に示すように、その結果最上位ビット（ビット３１）が論理ゼロ値であれば、最上位ビット位置にゼロを設定し、次に、ビット２９から２３を使用してテーブル入力の他の７ビットを形成することによりＡＬＵパイプライン５０内で８ビットテーブル値が作り出される。修正固定小数点値が最上位ビット位置に論理１値を有する場合には、テーブル入力値は最上位ビット位置に論理１値を有するように選択され、修正入力値のビット３０から２４を使用してテーブル入力値の残りの７ビットを形成する。
【００４２】
ステップ１１０におけるフォーマット化ステップに続いて、結果値Ｘ０の推定値を作り出すために図３について前記した８ビットテーブル入力値を使用して、ステップ１２０においてテーブルルックアップが実施される。逆数演算が結果値として入力値の逆平方根を作り出す時に使用されるルックアップテーブルは、逆数演算が結果値として入力値の逆数を作り出す時に使用されるルックアップテーブルとは異なるが、これら２つのタイプの逆数演算の両方に対して同じルックアップテーブルを固定小数点値および浮動小数点値の両方に使用することができる。ルックアップテーブルの出力からこの推定値が作り出される方法については図４に関してより詳細に説明する。
【００４３】
その後、ステップ１３０において、変数ｉがゼロに等しく設定され、次に、ステップ１４０においてＸｉが十分な精度であるかどうか、すなわち、結果値が所望の後続アプリケーションに対して必要な精度であるかどうかが確認される。Ｘ０は８ビットの精度を有し、それで十分なケースもある。そうであれば、プロセスはステップ１５０に分岐し、そこで値Ｘｉが結果値として返される。
【００４４】
しかしながら、Ｘｉが十分な精度であると見なされなければ、ステップ１６０においてｉは１だけ増分され、次に、ステップ１７０において精緻化ステップが実施されて結果値Ｘｉの訂正値を作り出す。実施される精緻化ステップは逆数演算が入力値の逆数を作り出すか入力値の逆平方根を作り出すかによって決まり、図５および６についてより詳細に説明する。本発明の実施例では、精緻化ステップが実施される度に結果値の精度のビット数は有効に２倍とされる。したがって、最初の反復後に結果値Ｘｉには有効に１６ビットの精度がある。
【００４５】
ステップ１７０において、プロセスはステップ１４０へループバックし、そこで結果値Ｘｉは十分な精度であるかどうか再度確認される。十分でなければ、精緻化ステップが繰り返されるが、必要な精度が作り出されておれば、プロセスはステップ１５０へ分岐しそこで結果Ｘｉが返される。
【００４６】
図４は初期推定値Ｘ０を作り出すためにテーブルルックアッププロセスが使用される方法をより詳細に示すフロー図である。ステップ２００において、フォーマット化された入力値が受信され、その後ステップ２１０においてそのフォーマット化された入力値は所要範囲内であるかどうか確認される。固定小数点入力は全ビットの左にインプリシット２進点を有するものと解釈される、すなわち、任意の入力ビッットパターンがゼロ以上で１よりも小さいと解釈される。有効な入力の範囲は、さらに、次のように制限される。
１）逆数演算が固定小数点入力の逆数を作り出している時は、範囲内は高位ビットが１であることを意味する（したがって、数は１/２以上である）。
２）逆数演算が固定小数点入力の逆平方根を作り出している時は、範囲内は高位２ビットの少なくとも１つが１であることを意味する（したがって、数は１/４以上である）。
【００４７】
浮動小数点入力に対して、フォーマット化された入力値が範囲内であるかどうかの確認はオリジナル入力浮動小数点値が規定された「正規の」範囲内であることの確認を伴うにすぎない。
【００４８】
ステップ２１０において、フォーマット化された入力値が範囲内でないことが確認されると、適切なデフォールト結果値を発生するためにステップ２２０において例外処理が実施される。特に、入力値が固定小数点値であるがＡＬＵパイプライン５０により判断された値の最上位ビット（図３参照）が逆機能を作り出す時に論理１値ではない、あるいは最上位２ビットのいずれも逆平方根機能を実施する時に論理１値ではなければ、ステップ２２０における例外処理はオール１からなる結果値を返す。
【００４９】
逆数演算が入力浮動小数点値の逆数を求めている状況を考えると、入力値がＮａＮであればステップ２２０はデフォルトＮａＮを返し、入力値がゼロまたは正規値以下であれば、例外処理ステップ２２０は同符号の無限大を返し、入力値が無限大であれば、例外処理ステップ２２０は同符号のゼロを返す。
【００５０】
逆数演算が入力浮動小数点値の逆平方根を作り出している時は、入力値がＮａＮ、負の正規または負の無限大であれば、例外処理ステップ２２０はデフォルトＮａＮを返し、入力値がゼロまたは正規値以下（正または負）であれば例外処理ステップ２２０は正の無限大値を返し、入力値が正の無限大であれば、例外処理ステップ２２０は正のゼロ値を返す。
【００５１】
ステップ２１０において、フォーマット化された入力値が範囲内であることが確認されるものと仮定すると、ステップ２３０において選択されたビットがテーブルルックアップを実施するために抽出され、このプロセスは図３について前記されている。その後、ルックアップテーブルから８ビット出力値を作り出すために、図３について前記した８ビットテーブル入力値を使用してステップ２３５においてテーブルルックアップが実施される。
【００５２】
ステップ２４０において、プロセスは入力値が固定小数点値であるか浮動小数点値であるかに応じて２つの方法のいずれかに分岐する。入力値が固定小数点値であれば、プロセスはステップ２４５へ分岐し、そこで３２ビット値の上位９ビットにテーブルルックアップ出力値が出力される（９ビットの最上位は含意論理１値である）。
【００５３】
その後、修正入力値を作り出すために実施された前の左シフト操作の影響を取り消すのに十分な右シフト操作を実施するための付加ステップが典型的にステップ２５０においてソフトウェアによりとられる。
【００５４】
入力値が浮動小数点値であれば、プロセスは替わりにステップ２５５へ分岐し、そこで初期推定値に対する指数部が計算される。前記したように、逆数演算が結果値として入力値の逆数を作り出す時は、ＡＬＵパイプラインは修正入力値として、指数部への関連する増分と共に、仮数部(significand)を所要範囲内とする仮数部(significand)の有効１ビット右シフト結果を選択する。これはルックアップテーブルからの出力を直接使用して１以上で２よりも小さい範囲内に仮数部(significand)を形成することができることを保証し、したがって、ステップ２５５において初期推定値の指数部を発生するのに必要なのは入力値の指数部を１だけ増分し、次に、その値を否定(negate)して初期推定値に対する指数部を作り出すことだけである。
【００５５】
逆数演算が結果値として入力値の逆平方根を作り出す時は、前記したように、ＡＬＵパイプラインは修正入力値として、その指数部を形成する指数部の関連する増分と共に、有効１ビットまたは２ビット右シフトの結果を選択する。ステップ２５５において、修正入力値のこの指数部が求められ、次に、修正入力値のこの指数部を２で除して結果値を否定することにより初期推定値の指数部が引き出される。入力値のオリジナル指数部の値に応じた仮数部の有効１ビットまたは２ビット右シフトの選択により修正入力値は常に偶数指数部を有するものとすれば、このプロセスは容易に実施することができる。
【００５６】
その後、ルックアップテーブルからの８ビット出力を小数部(fraction)の最上位８ビットとして使用し、かつステップ２５５で計算された指数部を指数部として使用することにより、ステップ２６０において初期浮動小数点推定値Ｘ０が発生される。符号はオリジナル入力値の符号と同じである。その後、ステップ２６５においてプロセスは終了する。
【００５７】
一実施例では、前記した両方のタイプの逆数演算に対して別々の推定値命令が与えられるが、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じ推定値命令が使用される。入力値が浮動小数点値であれば、その推定値命令はオペランドとしてオリジナル入力値を指定し、ＡＬＵパイプラインは推定値命令に応答して修正入力値を評価し、テーブルルックアッププロセスを実施し、テーブル出力値から結果値の初期推定値を引き出す。しかしながら、入力値が固定小数点値であれば、このような固定小数点数に対する多数の異なるフォーマットが与えられれば（理論上、含意２進点はソフトウェアしか知らない固定小数点値内の任意のビット位置とすることができる）、図３について前記したように、オリジナル入力値は推定値命令を発行する前にソフトウェアにより修正され、推定値命令はその修正入力値を指定する。さらに、ＡＬＵパイプライン内での推定値命令の実行は３２ビット値の上位９ビット内にテーブル出力値を作り出すにすぎず、ソフトウェアは次にオリジナル入力固定小数点値のフォーマットの知識に基づいて初期固定小数点推定値Ｘ０を発生するために任意所要のシフトを実施する責任がある。
【００５８】
図２について前記したように、一度初期推定値Ｘ０が求められると、次に、ステップ１４０においてその推定値は十分な精度であるかどうかを確認することができる。最初に入力値が固定小数点値である状況を考えると、結果値Ｘ０のオリジナル推定値は所要レベルの精度を有するケースが多い。しかしながら、そうでなければ、図２のステップ１７０で必要とされる任意の精緻化ステップがソフトウェアで実施される。
【００５９】
入力値が浮動小数点値であれば、一実施例では、図２のステップ１７０で識別される必要な精緻化ステップを実施するためにＡＬＵパイプライン５０内で実行することができる付加命令が定義される。特に、精緻化ステップは下記の計算を実施するものと考えることができる。
Ｘｉ=Ｘｉ-１*Ｍ（ここに、Ｘｉはｉ番目の反復に対する結果値の推定値）である。
【００６０】
逆数演算が入力値の逆数計算である状況では、
Ｍ=２-Ｘｉ-１*ｄ（ここに、ｄは入力値）である。
【００６１】
また、逆数演算が入力値の逆平方根計算であれば、
Ｍ=(３-Ｚｉ-１*ｄ)/2，ここに、Ｚｉ-１=(Ｘｉ-１)２である。
【００６２】
一実施例では、データ処理装置は２つの特定の命令を指定し、その一方によりデータ処理装置は逆数演算が入力値の逆数を求めている場合のＭを計算し、その他方によりデータ処理装置は逆数演算が入力値の逆平方根を求めている場合のＭを計算する。
【００６３】
逆数演算が入力値の逆数を求めている場合の精緻化ステップの実施が図５に略示されている。ステップ３００において、データ処理装置は計算Ｍ=２-Ｘｉ-１*ｄを実施するようにされる。これは、ここではvrecps命令と呼ばれる、単一命令を発行して達成される。この命令はそのオペランドの２つとしてＸｉ-１およびｄの値を含むレジスタを指定する。計算に必要な一定値２は命令デコーダ７０内の命令のデコーディングにより導かれ、それは必要な制御信号を入力マルチプレクサ４０に送って定数２を適切なポイントにおいて選択させる。
【００６４】
一実施例では、ＡＬＵパイプライン５０は２つの機能ユニット、すなわち、加算演算を処理する加算ユニットおよび乗算演算を処理する乗算ユニット、を含み各ユニットは４ステージパイプラインを含んでいる。ステップ３００で規定された計算の実施は各機能ユニットにおける４サイクル実行を含んでいる。特に、最初の４サイクルにおいて乗算演算が乗算機能ユニット内で実施され、次の４サイクルにおいて一定値２からの積の減算が加算機能ユニットにおいて実施される。したがって、このステップはＡＬＵパイプライン５０内で８クロックサイクルを要する。
【００６５】
その後、ステップ３１０において、さらに乗算機能を発行することによりＸｉ=Ｘｉ-１*Ｍの計算が実施され、この計算はＡＬＵパイプラインを通る単一パスをとるため、さらに４サイクルを要する。
【００６６】
図６は逆数演算が入力値の逆平方根を求めることである場合に精緻化ステップをインプリメントするために実施されるステップを示すフロー図である。ステップ３５０において、乗算命令が発行されて結果値の前の推定値を二乗させて値Ｚｉ-１を作り出す。これはＡＬＵパイプライン５０を通る単一パスをとるため、４サイクルを要する。
【００６７】
その後、ステップ３６０において、以後vrsqrts命令と呼ばれる単一命令が発行され、それによりデータ処理装置はＭ=(３-Ｚｉ-１*ｄ)/2の計算をするようにされ，ここに、Ｚｉ-１=(Ｘｉ-１)２である。ＡＬＵパイプラインを通る最初のパス中に乗算ステップが実施され、その後パイプラインを通る後続パスにおいて一定値３から積が減じられる。前記した精緻化命令vrecpsと同様に、一定値３は命令デコーダ７０内で実施される命令のデコーディングにより導かれ、次に、それは必要な制御信号を入力マルチプレクサ４０に送って一定値３を適切なポイントにおいて選択させる。
【００６８】
乗算-累算結果を２の因子で除算することは純粋に指数値から１を減じることにより達成され、これはＡＬＵパイプライン５０を通る第２パス中にＡＬＵパイプラインの指数パス内で実施される。
【００６９】
その後、ステップ３７０において、Ｘｉ=Ｘｉ-１*Ｍの計算が実施され、それはＡＬＵパイプライン５０を通る単一パスをとるため、さらに４サイクルを要する。
【００７０】
下記の簡単な説明は、レジスタファイル３０内の特定のレジスタをどのように使用できるかの一例の指示と共に、図５および６のプロセスをインプリメントするために発行することができる命令のシーケンスを示す。
逆数
レジスタファイル内で、reg S0はdを保持し、
reg S１はX(ここに、X=1/d)を保持し、
reg S２は仮の値を保持する。
下記の命令シーケンスが実施される。
Vrecpe S1,S0     S0内の値を使用してテーブルルックアップを実施してX0を求め、レジス
タS1内にX0を置く。
Vrecps S2,S1,S0   M=2-X0dの計算を実施し、レジスタS2内にMを置く。
Vmul S1,S2,S1     X1=X0xMの計算を実施し、レジスタS1内にX1を置く。
そこで命令VrecpsおよびVmulは結果が所望の精度を有するまで繰り返される。
逆平方根
レジスタファイル内で、reg S0はdを保持し、
reg S１はX(ここに、X=1/√d)を保持し、
reg S２は仮の値を保持する。
下記の命令シーケンスが実施される。
Vrsqrte S1,S0      S0内の値を使用してテーブルルックアップを実施してX0を求め、レジ
スタS1内にX0を置く。
Vmul S2,S1,S1      Z0=(X0)2の計算を実施し、レジスタS2内にz0を置く。
Vrsqrts S2,S2,S0   M=(3-Z0d)/2の計算を実施し、レジスタS2内にMを置く。
Vmul S1,S2,S1      X1=X0xMの計算を実施し、レジスタS1内にX1を置く。
命令Vmul, VrsqrtsおよびVmulは結果が所望の精度を有するまで繰り返される。
【００７１】
図７は図５および６の精緻化ステップをインプリメントするためにＡＬＵパイプライン５０内に設けられる論理を示すブロック図である。乗算ユニット４００が設けられそれは、パス４０２，４０４を介してそれぞれ２つの入力値ＡおよびＢを受信することができる。さらに、パス４１５を介して乗算ユニット４００に制御信号mul_instが入力されその乗算ユニットの動作を制御する。
【００７２】
累算論理４２０も設けられ、乗算ユニット４００からの出力の反転バージョンをパス４４４を介して受信し、さらにマルチプレクサ４３０からの出力をパス４４２を介して受信するようにされた加算器ユニット４４０を含んでいる。加算器ユニットはパス４４６上の+１のキャリーイン値も受信する。したがって、加算器ユニット４４０は乗算ユニット４００により発生された積をマルチプレクサ４３０からパス４４２を介して与えられた値から減じる。累算ユニット４２０の動作を制御するために、パス４５０を介して制御信号add_instが与えられる。
【００７３】
マルチプレクサ４３０は入力としてオペランドＣ、定数２および定数３を有する。図１について、マルチプレクサ４３０は実際にはＡＬＵパイプライン５０ではなく入力マルチプレクサ４０内に典型的に存在するが、図７の説明を簡単にするために、add_inst制御信号により制御される累算論理４２０の一部として示されている。
【００７４】
制御信号mul_instは正規乗算命令が実行されているかあるいは前記した精緻化命令vrecpsまたはvrsqrtsが実施されているかを乗算ユニット４００に対して確認する。この情報は乗算ユニットが任意の例外条件をどのように処理するかを決定できるようにするのに必要である。特に、オペランドＡ，Ｂの一方が+０または-０であり他方のオペランドが+無限大または-無限大であれば、正規の乗算演算に対して乗算ユニットはデフォールトＮａＮ値を出力する。しかしながら、いずれかの精緻化命令が実施されている時に同じ状況が生じると、乗算ユニットは命令がvrecps命令であれば値２を出力し命令がvrsqrts命令であれば値３/２を出力する。
【００７５】
制御信号add_instは累算論理が正規累算命令により指定された累算演算を実施しているか、あるいは命令がvrecps命令またはvrsqrts命令であるかを識別し、それによりマルチプレクサ４３０の入力の１つを適切に選択させる。また、それは加算器ユニットが加算または減算を実施するかどうかも確認する（図７には減算に対する入力パスしか示されていないが、加算に対しては乗算ユニット４００から加算器ユニット４４０へ非反転出力を与えてキャリーイン値をゼロを設定するだけでよい）。vrecpsまたはvrsqrts命令に対して、加算器ユニットは常に減算を実施する。特に、vrecps命令に対して、加算器ユニットは2-AxBの計算を実施する。vrsqrts命令に対して、加算器ユニットは(3-AxB)/2の計算を実施する。vrecps命令に対して、オペランドＡは値Ｘｉ-１でありオペランドＢは値ｄである。vrsqrts命令に対して、オペランドＡは（Ｘｉ-１）２でありオペランドＢはｄである。
【００７６】
一実施例に従った前記装置を使用して実施した逆数または逆平方根機能の６つの例を下記に示す。
１）  浮動小数点逆数
推定値プロセス
d=6=40c00000
1/d=0.1666667=3e2aaaab
6=1.1000 0000x22 浮動小数点フォーマット
したがって、小数部(fraction)は.1000 0000
ルックアッププロセスはテーブルから返される値として.01010101を作り出す
=1.01010101 プリペンドされた1を有する
最終指数部は-(exp+1)=-3
返される推定値=3e2a8000
=0.166504
精緻化ステップ
d=6.0=40c00000
X0=0.166504=3e2a8000
2=4000 0000
M=2-X0*d=4000 0000-(3e2a8000x40c00000)
=4000 0000-3f7c0009
=3f801ffc
X1 =M*X0
=3f801ffcx3e2a8000
X1=3e2aaa9b=0.1666664(すなわち、1/dへの良い近似値)
２）浮動小数点逆平方根（奇数指数部を有する）
推定値プロセス
d=0.875  =3f60 0000
1/√d=1.0690445=3f88d677
d=1.1100 0000x2-1 浮動小数点フォーマット（指数部は奇数）
=0.1110 0000x20
ルックアッププロセスはテーブルから返される値として.0001 0001を与える
=1.0001 0001 プリペンドされた1を有する
推定値指数部=-(-1+1)/2=0
返される推定値=1.00010001x20
=3f888000
精緻化ステップ
Z=X0*X0
=3f888000*3f888000
=3f919080
M=(3-Z*d)/2
=(4040 0000-(3f919080x3f600000)/2
=(4040 0000-3f7ebcco)/2
=3f8050c8
X1=X0*M
=3f888000x3f8050c8
X1=3f88d625
=1.0690352(すなわち、1/√dへの良い近似値)
３）  浮動小数点逆平方根（偶数指数部を有する）
推定値プロセス
d=6.0=40c00000
1/√d=0.4082483=3ed105eb
d=6.0=1.10000000x22 浮動小数点フォーマット（指数部は偶数）
=0.01100000x24 ２だけ右シフトの場合
テーブルルックアップにより.10100010が与えられる。
=1.10100010 １がプリペンドされている。
推定値指数部=-exp/2=-4/2=-2
返される推定値=3ed10000
精緻化ステップ
Z=X0*X0=3ed10000.3ed10000
=3e2aa100
M=(3-Z*d)/2
=(3-(3e2aa100x40c00000))/2
=(40400000-3f7ff180)/2
M=3f8003a0
X1=X0*M
=3ed10000.3f8003a0
X1=3ed105eb
=0.4082483 (すなわち、1/√dの良い近似値)
４．  1/6, 16.16フォーマットに対する固定小数点推定
入力d=6=0000000000000110.0000000000000000(２進)
ソフトウェアは先導する１が高位ビットにあるように１３だけ左シフトを実施する。
d’=1100000000000000.0000000000000000
テーブルルックアップは下記を返す。
X’=1010101010000000.0000000000000000
ソフトウェアは31-13=18ビット位置だけ右シフトして16.16フォーマットを回復する。
Ｘ０=0000000000000000.0010101010100000=0.166504
真の1/6=0.166667(６有効数字)
５．  1/√6, 16.16フォーマットに対する固定小数点推定
入力d=6=0000000000000110.0000000000000000(２進)
ソフトウェアは先導する１が高位２ビットにあるように１２だけ左シフトを実施する。
左シフトは偶数のビット位置でなければならない。
d’=0110000000000000.0000000000000000
テーブルルックアップは下記を返す。
X’=1101000100000000.0000000000000000
ソフトウェアは23-(12/2)=17ビット位置だけ右シフトして16.16フォーマットを回復する。
Ｘ０=0000000000000000.0110100010000000=.408203
真の1/√6=0.408248(６有効数字)
６．  1/√3, 16.16フォーマットに対する固定小数点推定値
入力d=3=0000000000000011.0000000000000000(２進)
ソフトウェアは先導する１が高位２ビットにあるように１４だけ左シフトを実施する。
左シフトは偶数のビット位置でなければならない。
d’=1100000000000000.0000000000000000
テーブルルックアップは下記を返す。
X’=1001001110000000.0000000000000000
ソフトウェアは23-(14/2)=16ビット位置だけ右シフトして16.16フォーマットを回復する。
Ｘ０=0000000000000000.1001001110000000=.576172
真の1/√3=0.577350(６有効数字)
【００７７】
本発明の実施例で使用される推定値命令および精緻化命令は多様な形をとることができる。図８Ａから８Ｄはこれらの命令に対するフォーマットの例を示す。特に、図８Ａは結果値として入力値の逆数を作り出す逆数演算に対する初期推定値を求めるのに使用される推定値命令の符号化を示し、図８Ｂは結果値として入力値の逆平方根を作り出す逆数演算に対する初期推定値を求めるのに使用される推定値命令の符号化を示す。いずれの場合でもＶｍ（５ビット）はソースレジスタの識別でありＶｄ（５ビット）はデスティネーションレジスタの識別である。
【００７８】
図８Ａから８Ｄに開示された実施例において、命令は実際上Single Instruction Multiple Data (ＳＩＭＤ)処理を実施するようにされたＡＬＵパイプライン上で実行するＳＩＭＤ命令である。Ｑビット（ビット６）はオペランドレジスタ内のデータが２つの３２ビットデータ値を表すか４つの３２ビットデータ値を表すかを示す。この実施例では、ＡＬＵ論理は２つの３２ビットデータ値に並列に動作することができ、したがって、一時に２つの入力値に対する推定値を計算することができる。４つの入力値に対しては、一時に２つの値がＡＬＵパイプラインのパイプラインステージに通される。Ｔビット（ビット８）はデータタイプ、すなわち、データが固定小数点データであるか浮動小数点データであるかを識別する。
【００７９】
図８Ｃはvrecps命令に対するフォーマット、すなわち、逆数演算が結果値として入力値の逆数を作り出す場合にM=2-Xi-1*dの計算を実施するのに使用される精緻化命令の例を示す。図８Ｄは、たとえば、逆数演算が結果値として入力値の逆平方根を作り出す場合に、M=(3-Zi-1*d)/2の計算を実施するのに使用されるvrsqrts命令に対する符号化を示し、Zi-1=(Xi-1)2である。
【００８０】
値ＶｍおよびＶｎはソースレジスタを識別し、値Ｖｄはデスティネーションレジスタを識別する。例示した実施例でも、命令はＳＩＭＤ処理を実施するようにされたＡＬＵパイプライン上で実行するＳＩＭＤ命令であり、Ｑビット（ビット６）はオペランドレジスタ内のデータが２つの３２ビットデータ値を表すか４つの３２ビットデータ値を表すかを示す。
【００８１】
前記説明から、前記した実施例は入力値に逆数演算を実施することにより作り出される結果値の初期推定値を求めるための効率的技術を提供することが理解できる。特に、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず、その初期値を発生するのに同じ処理論理が使用され、ルックアップテーブルへの入力として使用される特定の修正入力値に対しては、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生される。
【００８２】
さらに、前記した実施例は初期推定値から結果値を発生する時に実施される精緻化ステップをインプリメントするための非常に効率的な技術を提供する。特に、逆数演算が入力値の逆数を評価している状況、および逆数演算が入力値の逆平方根を評価している状況の両方に対して、単一精緻化命令が与えられてデータ処理装置に精緻化ステップの臨界部分を実施させる。これはコード密度を著しく改善する。さらに、精緻化ステップのその部分で必要な定数は命令自体により予め決定されており、精緻化ステップのその部分を実行する前にレジスタファイル内にロードする必要がない。精緻化ステップが実施される度に、その目的に対してレジスタファイルに書き込まれている任意の一定値は典型的にオーバライトされ、したがって、精緻化ステップを再度実行する必要があればレジスタファイル内にリライトし戻す必要があるため、これはレジスタファイルの使用効率の改善に関して特に有利である。
【００８３】
本発明の特定の実施例について説明してきたが、本発明はそれに限定はされず、発明の範囲内で多くの修正および変更を行えることがお判りであろう。たとえば、本発明の範囲を逸脱することなく従属項の特徴と独立項の特徴をさまざまに組み合わせることができる。
【図面の簡単な説明】
【００８４】
【図１】本発明の一実施例に従ったデータ処理装置のブロック図である。
【図２】逆数演算をインプリメントするために一実施例におけるデータ処理装置内で実施されるステップを示すフロー図である。
【図３】図２の過程の実行中にルックアップテーブルにアクセスするのに修正入力値がどのように使用されるかを示す図である。
【図４】一実施例に従った逆数演算の結果値に対する初期推定値の発生をより詳細に示すフロー図である。
【図５】入力値の逆数を求める時に精緻化ステップをインプリメントするために一実施例に従って実施される一連の計算を示すフロー図である。
【図６】入力値の逆平方根を求める時に精緻化ステップをインプリメントするために一実施例に従って実施される一連の計算を示すフロー図である。
【図７】図５および図６の過程をインプリメントするために図１のデータ処理装置内に設けられたエレメントを略示する図である。
【図８】ＡからＤは一実施例に従った推定値命令および精緻化ステップ命令のフォーマットを示す図である。
【符号の説明】
【００８５】
１０  データ処理装置
２０  メモリシステム
３０  レジスタファイル
４０  入力マルチプレクサ
５０  ＡＬＵパイプライン
６０  ロード/ストア・ユニット
７０  命令デコーダ
４００  乗算ユニット
４０２，４０４，４１５，４４２，４４４，４４６，４５０  パス
４２０  累算ユニット
４３０  マルチプレクサ
４４０  加算器ユニット
【図１】
2006228191.tif 000003
【図２】
2006228191.tif 000004
【図３】
2006228191.tif 000005
【図４】
2006228191.tif 000006
【図５】
2006228191.tif 000007
【図６】
2006228191.tif 000008
【図７】
2006228191.tif 000009
【図８】
2006228191.tif 000010