(57)【要約】【課題】入力値に逆数演算を実施して結果値Ｘを作り出すデータ処理装置を得る。【解決手段】逆数演算は結果値に収束させる精緻化ステップの反復実行を伴い、精緻化ステップはXi=Xi-1*Mの計算を実施し、Xiは精緻化ステップのｉ番目の反復に対する結果値の推定値、Mは精緻化ステップの一部分により求められる値である。データ処理装置はレジスタデータストア、およびその中のデータの処理操作を実施する命令を実行する処理論理を含む。処理論理は単一精緻化命令に応答して、入力値、結果値の前の推定値から引き出された値、および定数が入力値として使用される乗算-累算演算を実施して精緻化ステップの一部をインプリメントする。定数はレジスタデータストアを参照せずに単一精緻化命令から決定される。これにより、コード密度およびレジスタデータストアのレジスタの使用効率が改善される。【選択図】図１
2006228190.tif 000002
【特許請求の範囲】
【請求項１】
入力値「ｄ」に逆数演算を実施して結果値「Ｘ」を作り出すデータ処理装置であって、逆数演算は結果値に収束させる精緻化ステップの反復実行を伴い、精緻化ステップは下記の計算を実施し、
Ｘｉ=Ｘｉ-１*Ｍ
ここで、Ｘｉは精緻化ステップのｉ番目の反復に対する結果値の推定値であり、Ｍは精緻化ステップの一部により求められる値であり、データ処理装置は、
データを格納するように動作する複数のレジスタを有するレジスタデータストアと、
レジスタデータストア内に保存されたデータにデータ処理操作を実施する命令を実行するように動作する処理論理と、を含み、
処理論理は単一精緻化命令に応答して、入力値、結果値の前の推定値から引き出された値および定数が入力として使用される少なくとも乗算-累算演算を実施することにより、精緻化ステップの前記部分をインプリメントし、定数はレジスタデータストアを参照せずに単一精緻化命令から決定されるデータ処理装置。
【請求項２】
請求項１に記載のデータ処理装置であって、乗算-累算演算は、
入力値および結果値の前の推定値から引き出された値を乗じて中間値を作り出すステップと、
中間値を定数から減じるステップと、
を含むデータ処理装置。
【請求項３】
請求項１に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆数を作り出し、結果値の前の推定値から引き出された値は結果値の前の推定値であるデータ処理装置。
【請求項４】
請求項３に記載のデータ処理装置であって、処理論理は下記の計算
Ｍ=２-Ｘｉ-１*ｄ
を実施することにより精緻化ステップの前記部分をインプリメントするように動作するデータ処理装置。
【請求項５】
請求項１に記載のデータ処理装置であって、逆数演算は結果値として入力値の逆平方根を作り出し、結果値の前の推定値から引き出された値は結果値の前の推定値の二乗であるデータ処理装置。
【請求項６】
請求項５記載のデータ処理装置であって、処理論理は下記の計算
Ｍ=(３-Ｚｉ-１*ｄ)/2、ここで、Ｚｉ-１=(Ｘｉ-１)2
を実施することにより精緻化ステップの前記部分をインプリメントするように動作するデータ処理装置。
【請求項７】
請求項１に記載のデータ処理装置であって、入力値および結果値の前の推定値から引き出された値は単一精緻化命令を実行する前にレジスタデータストア内に格納されるデータ処理装置。
【請求項８】
請求項１に記載のデータ処理装置であって、精緻化ステップの最初の反復において結果値の前の推定値は入力値の予め定められたビットに応じて選択される初期推定値であり、精緻化ステップの後続反復において結果値の前の推定値は精緻化ステップの先行する反復の出力であるデータ処理装置。
【請求項９】
請求項１に記載のデータ処理装置であって、入力値および結果値は浮動小数点数であるデータ処理装置。
【請求項１０】
請求項１に記載のデータ処理装置であって、処理論理はパイプラインデータ処理ユニットであるデータ処理装置。
【請求項１１】
入力値「ｄ」に逆数演算を実施して結果値「Ｘ」を作り出すデータ処理装置であって、逆数演算は結果値に収束させる精緻化ステップの反復実行を伴い、精緻化ステップは下記の計算を実施し、
Ｘｉ=Ｘｉ-１*Ｍ
ここで、Ｘｉは精緻化ステップのｉ番目の反復に対する結果値の推定値であり、Ｍは精緻化ステップの一部により求められる値であり、データ処理装置は、
データを格納するように動作する複数のレジスタを有するレジスタデータストアと、
レジスタデータストア内に保存されたデータにデータ処理操作を実施する命令を実行する処理手段と、を含み、
処理手段は単一精緻化命令に応答して、入力値、結果値の前の推定値から引き出された値および定数が入力として使用される少なくとも乗算-累算演算を実施することにより、精緻化ステップの前記部分をインプリメントし、定数はレジスタデータストア手段を参照せずに単一精緻化命令から決定されるデータ処理装置。
【請求項１２】
入力値「ｄ」に逆数演算を実施して結果値「Ｘ」を作り出すデータ処理装置の動作方法であって、逆数演算は結果値に収束させる精緻化ステップの反復実行を伴い、精緻化ステップは下記の計算を実施し、
Ｘｉ=Ｘｉ-１*Ｍ
ここで、Ｘｉは精緻化ステップのｉ番目の反復に対する結果値の推定値であり、Ｍは精緻化ステップの一部により求められる値であり、データ処理装置はデータを格納するように動作する複数のレジスタを有するレジスタデータストアと、レジスタデータストア内に保存されたデータにデータ処理操作を実施する命令を実行するように動作する処理論理とを含み、前記方法は、
単一精緻化命令に応答して、入力値、結果値の前の推定値から引き出された値および定数が入力として使用される少なくとも乗算-累算演算を処理論理内で実施することにより精緻化ステップの前記部分をインプリメントするステップと、
乗算-累算演算に使用される定数をレジスタデータストア手段を参照せずに単一精緻化命令から決定するステップと、
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は入力値に逆数演算(reciprocal operation)を実施して結果値を作り出すデータ処理装置および方法に関連している。
【背景技術】
【０００２】
ｄが入力値である1/Fn(d)の形の演算である逆数演算をしばしば実施する必要があるいくつかのデータ処理アプリケーションがある。しばしば必要とされる２つのこのような逆数演算は入力値の逆数、すなわち1/d，または入力値の逆平方根、すなわち1/√d,の計算を伴う。これら特定の２つの逆数演算は、たとえば、グラフィックス処理アプリケーションでしばしば使用される。
【０００３】
このような逆数演算を実施するための専用ハードウェアを開発することができるが、典型的にはデータ処理装置をできるだけ小型のままとして、可能であればハードウェア論理を再利用するのが望ましい。
【０００４】
専用ハードウェアを必要としない逆数および逆平方根等の複素関数の結果を求める既知の技術は結果値に収束させるために計算の反復実行を利用する。１つの特定のこのような反復過程は一般的にニュートン-ラフソン法と言われている。ニュートン-ラフソン法に従って、結果値の初期推定値が作られ、次に、実際の結果値に収束させるために精緻化(refinement)ステップが反復実行される。
【０００５】
モトローラ社のAltiVec技術は逆数および逆平方根機能を評価するためにニュートン-ラフソン精緻化技術を使用する。モトローラ社のAltiVec技術により取り入れられた方法に従って、レジスタ内に必要な一定値をロードし、次に、結果値に対する初期推定値を求めるいくつかの命令が発行され、その後一連の乗算-累算命令が発行されて精緻化ステップを実施する。
【０００６】
データ処理装置では、典型的にその演算速度を高めながら消費電力を低減することが望ましい。前記したような逆数演算の処理に関して、逆数演算をインプリメントしかつレジスタの使用効率を改善するのに必要なコードのコード密度を高めて、消費電力を低減しかつ演算速度を改善するのが望ましい。レジスタの使用に関して、精緻化ステップが実施される度にワーキングレジスタにロードされている任意の一定値は典型的に精緻化ステップ実行中にオーバライトされるため、効率が特に影響を受け、精緻化ステップを繰り返す必要がある場合、必要な定数をワーキングレジスタに再ロードする必要がある。
【０００７】
米国特許第6,115,733号は逆数および逆平方根を計算する技術を記述している。ニュートン-ラフソン法が再び使用され、精緻化ステップはその過程の一部として２つの値を乗算して積を作り出し、次に、それが定数から減じられる過程を含んでいる。これは典型的にある形の乗算-累算演算によりインプリメントされ、必要な定数は最初にワーキングレジスタにロードされている。しかしながら、米国特許第6,115,733号の技術では、このような乗算-累算演算は実施されず、単に必要な乗算を実施し、次に、結果を反転して乗算-累算演算の結果の近似値を発生することによりこのような乗算-累算演算の結果の推定値が発生される。これは必要な定数をレジスタにロードする必要性を回避してレジスタファイルをより効率的に使用し、さらにレジスタに定数をロードするためにロード命令が実施される必要性をなくす。
【０００８】
したがって、米国特許第6,115,733号の技術はコード密度を幾分改善し、ワーキングレジスタをより効率的に使用する。しかしながら、この改善を得るために、米国特許第6,115,733号の技術は精緻化ステップの一部の必要な計算を真の計算が実施された場合に実施されている結果の近似値を作り出す異なる計算と置換する。
【特許文献１】米国特許第６，１１５，７３３号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００９】
したがって、精緻化ステップの一部として実施される真の計算により作り出されている結果の近似値しか作り出さない異なる計算で必要な計算を置換することを必要とせずに、コード密度のこのような改善を可能としレジスタの効率的な使用を達成する技術を開発することが望ましい。
【課題を解決するための手段】
【００１０】
第１の側面から見て、本発明は入力値「ｄ」に逆数演算を実施して結果値「Ｘ」を作り出すデータ処理装置を提供し、逆数演算は精緻化ステップを反復実行して結果値に収束させることを伴い、精緻化ステップはＸｉ＝Ｘｉ-１*Ｍの計算を実施し、Ｘｉは精緻化ステップのｉ番目の反復に対する結果値の推定値であり、Ｍは精緻化ステップの一部により決定される値であり、データ処理装置はデータを格納するように動作する複数のレジスタを有するレジスタデータストア、レジスタデータストア内に保存されたデータにデータ処理操作を実施する命令を実行するように動作する処理論理を含み、処理論理は単一精緻化命令に応答して入力値、結果値の前の推定値から引き出された値および定数が入力として使用される少なくとも乗算-累算演算を実施することにより精緻化ステップの前記部分をインプリメントし、定数はレジスタデータストアを参照することなく単一精緻化命令から決定される。
【００１１】
本発明に従って、単一精緻化命令が精緻化ステップの臨界部分をインプリメントするために与えられ、精緻化ステップのその臨界部分が必要とする定数を保持するレジスタを必要とせず、したがって、その定数をレジスタにロードするロード命令の必要性を回避する。米国特許第6,115,733号に較べて、入力値、結果値の前の推定値から引き出された値および定数を使用して真の乗算-累算演算が実施されるが、単一精緻化命令自体が使用される定数を決定して、乗算-累算演算を実施する前にレジスタデータストアに定数をロードする必要性を回避する。
【００１２】
さらに、単一命令を使用して精緻化ステップのその臨界部分を実施させることによりコード密度が著しく改善される。したがって、前記技術は必要な結果値に収束させる精緻化ステップの反復実行を伴う逆数演算を実施するための特に効率的な機構を提供することが判っている。
【００１３】
乗算-累算演算は多様な形をとることができる。しかしながら、一実施例では、乗算-累算演算は入力値および結果値の前の推定値から引き出された値を乗じて中間値を作り出すステップと、定数から中間値を減じるステップとを含んでいる。前記したように、定数は単一精緻化ステップから直接決定され、したがって、レジスタデータストアにロードする必要がない。
【００１４】
逆数演算は多様な形をとることができる。一実施例では、逆数演算は結果値として入力値の逆数を作り出し、結果値の前の推定値から引き出された値は結果値の前の推定値である。特定の一実施例では、処理論理はＭ＝２-Ｘｉ-１*ｄの計算を実施することにより精緻化ステップの前記部分をインプリメントするように動作する。したがって、この実施例では、精緻化ステップの値Ｍを計算する部分は乗算-累算演算しか含まず、精緻化ステップのこの部分は単一精緻化命令によりインプリメントされる。
【００１５】
別の実施例では、逆数演算は結果値として入力値の逆平方根を作り出し、結果値の前の推定値から引き出された値は結果値の前の推定値の二乗である。特定の一実施例では、処理論理はＭ=(３-Ｚi-1*ｄ)/2の計算を実施することにより精緻化ステップの前記部分をインプリメントするように動作し、Ｚi-1=(Ｘi-1)2である。
【００１６】
したがって、この実施例では、精緻化ステップの値Ｍを作り出すのに使用される部分は値Ｍを作り出すために半分にされる値を作り出す乗算-累算演算を伴う。一実施例では、入力値および結果値は浮動小数点数であり、乗算-累算演算からの出力を半分にすることは乗算-累算演算により作り出される指数値から１を減じて達成される。
【００１７】
一実施例では、入力値および結果値の前の推定値から引き出された値は単一精緻化命令を実行する前にレジスタデータストア内に格納される。次に、単一精緻化命令内の２つのオペランドが、それぞれ、入力値および結果値の前の推定値から引き出された値を含むレジスタデータストアのレジスタを指定することができる。
【００１８】
一実施例では、精緻化ステップの最初の反復における結果値の前の推定値は入力値の予め定められたビットに応じて選択される初期推定値であり、精緻化ステップの後続反復における結果値の前の推定値は精緻化ステップの先行する反復の出力である。典型的に、初期推定値はルックアップテーブルを参照して決定され、ルックアップ過程を実施するのに入力値の予め定められたビットが使用される。
【００１９】
処理論理は多様な形をとることができる。しかしながら、一実施例では、処理論理はパイプラインデータ処理ユニットである。
【００２０】
第２の側面から見て、本発明は入力値「ｄ」に逆数演算を実施して結果値「Ｘ」を作り出すデータ処理装置を提供し、逆数演算は結果値に収束させる精緻化ステップの反復実行を伴い、精緻化ステップはＸｉ=Ｘｉ-１*Ｍの計算を実施し、Ｘｉは精緻化ステップのｉ番目の反復に対する結果値の推定値であり、Ｍは精緻化ステップの一部により決定される値であり、データ処理装置はデータを格納するように動作する複数のレジスタを有するレジスタデータストア手段、レジスタデータストア内に保存されたデータにデータ処理操作を実施する命令を実行する処理手段を含み、処理手段は単一精緻化命令に応答して入力値、結果値の前の推定値から引き出された値および定数が入力として使用される少なくとも乗算-累算演算を実施することにより精緻化ステップの前記部分をインプリメントし、定数はレジスタデータストアを参照することなく単一精緻化命令から決定される。
【００２１】
第３の側面から見て、本発明は入力値「ｄ」に逆数演算を実施して結果値「Ｘ」を作り出すデータ処理装置の動作方法を提供し、逆数演算は結果値を収束させるための精緻化ステップの反復実行を伴い、精緻化ステップはＸｉ=Ｘｉ-１*Ｍの計算を実施し、Ｘｉは精緻化ステップのｉ番目の反復に対する結果値の推定値であり、Ｍは精緻化ステップの一部により決定される値であり、データ処理装置はデータを格納するように動作する複数のレジスタを有するレジスタデータストアを含み、処理論理はレジスタデータストア内に保存されたデータにデータ処理操作を実施する命令を実行するように動作し、前記方法は単一精緻化命令に応答して入力値、結果値の前の推定値から引き出された値および定数が入力として使用される少なくとも乗算-累算演算を処理論理内で実施することにより精緻化ステップの前記部分をインプリメントするステップと、乗算-累算演算に対して使用される定数をレジスタデータストアを参照することなく単一精緻化命令から決定するステップとを含んでいる。
【実施例】
【００２２】
単なる例として添付図に例示されている実施例について本発明をさらに説明する。図１は本発明の一実施例に従ったデータ処理装置１０を略示するブロック図である。データ処理装置１０は必要とする命令およびデータ値が格納されるメモリシステム２０に接続される。データ処理装置１０はメモリ２０から取得される一連の命令を実行するようにされている。特に、各命令は命令デコーダ７０によりメモリ２０から取得され、そこで命令はデコードされ命令に応じて適切な制御信号がデータ処理装置の他のエレメントに送られて命令により指定された操作がインプリメントされる。
【００２３】
データ処理装置１０はメモリ２０からのデータ値をデータ処理装置のレジスタファイル３０内にロードし、レジスタファイル３０からのデータ値をメモリ２０に格納するロード/ストア・ユニット６０を内蔵している。
【００２４】
データ値に算術演算を実施するために算術論理演算装置（ＡＬＵ）パイプライン５０が設けられ、ＡＬＵパイプライン５０への入力データ値は入力マルチプレクサ４０により与えられる。典型的に、ＡＬＵパイプライン５０内で算術演算を実行する時は、必要な入力データ値がレジスタファイル３０から入力マルチプレクサ４０を介してＡＬＵパイプライン５０へ送られる（これらのデータ値は算術演算を指定する命令を実行する前にレジスタファイル３０内に格納されている）。
【００２５】
ＡＬＵパイプライン５０から出力されたデータ値は適切なデスティネーションレジスタに格納するためにレジスタファイル３０へ送ることができ、さらに/またはそのデータ値が後続算術演算用入力として必要であれば入力マルチプレクサ４０への入力として転送し戻すことができる。本発明の実施例では、２つの一定値を入力マルチプレクサ４０に与えることもでき、それらは命令デコーダ７０から与えられる制御信号に応じて入力マルチプレクサ４０が選択することができる。
【００２６】
後述するように、データ処理装置が精緻化ステップの反復実行を伴う逆数演算を実施している時は、精緻化ステップの一部は乗算-累算演算の実施を必要とすることがあり、そこでは２つの値が乗算され次に定数から減じられる。特に、一実施例では、逆数演算は結果値として入力値の逆数を作り出し、ここでは必要な定数は値「２」であり、この値はレジスタファイル３０のレジスタに予めロードすることなく入力マルチプレクサ４０へ一入力の一つとして与えられる。同様に、もう１つの実施例では、逆数演算は結果値として入力値の逆平方根を作り出し、ここでは必要な定数は値「３」である。図１に示すように、やはりこの一定値はレジスタファイル３０のレジスタに最初にロードすることなく入力マルチプレクサ４０に直接与えられる。
【００２７】
図２はデータ処理装置１０内の前記したタイプの逆数演算をインプリメントするために実施されるステップのシーケンスを示すフロー図である。最初に、ステップ１１０において、逆数演算の対象である入力値がフォーマット化されてテーブルルックアップを実施するのに必要なビットを抽出することができる修正入力値を作り出し、テーブルルックアップの出力は結果値に対する初期推定値を引き出すのに使用される。
【００２８】
逆数演算は入力値として固定小数点データ値または浮動小数点データ値を指定することができる。固定小数点データ値は小数点がデータ値内の予め定められた点に存在することを意味する値である。たとえば、１６.１６固定小数点フォーマットは３２ビット値が小数点の前に１６ビットを有し、小数点の後に１６ビットを有するものと推定する。整数値は最下位ビットのすぐ右に小数点が存在すると考えられる固定小数点値の特定例である。
【００２９】
規定された正規範囲内の浮動小数点データ値は次のように表すことができ、
±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である。
【００８０】
値ＶｍおよびＶｎはソースレジスタを識別し、値Ｖｄはデスティネーションレジスタを識別する。例示した実施例でも、命令はＳＩＭＤ処理を実施するようにされたＡＬＵパイプライン上で実行するＳＩＭＤ命令であり、Ｑビット（ビット６）はオペランドレジスタ内のデータが２つの３２ビットデータ値を表すか４つの３２ビットデータ値を表すかを示す。
【００８１】
前記説明から、前記した実施例は入力値に逆数演算を実施することにより作り出される結果値の初期推定値を求めるための効率的技術を提供することが理解できる。特に、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず、その初期値を発生するのに同じ処理論理が使用され、ルックアップテーブルへの入力として使用される特定の修正入力値に対しては、入力値が固定小数点値であるか浮動小数点値であるかにかかわらず同じテーブル出力値が発生される。
【００８２】
さらに、前記した実施例は初期推定値から結果値を発生する時に実施される精緻化ステップをインプリメントするための非常に効率的な技術を提供する。特に、逆数演算が入力値の逆数を評価している状況、および逆数演算が入力値の逆平方根を評価している状況の両方に対して、単一精緻化命令が与えられてデータ処理装置に精緻化ステップの臨界部分を実施させる。これはコード密度を著しく改善する。さらに、精緻化ステップのその部分で必要な定数は命令自体により予め決定されており、精緻化ステップのその部分を実行する前にレジスタファイル内にロードする必要がない。精緻化ステップが実施される度に、その目的に対してレジスタファイルに書き込まれている任意の一定値は典型的にオーバライトされ、したがって、精緻化ステップを再度実行する必要があればレジスタファイル内にリライトし戻す必要があるため、これはレジスタファイルの使用効率の改善に関して特に有利である。
【００８３】
本発明の特定の実施例について説明してきたが、本発明はそれに限定はされず、発明の範囲内で多くの修正および変更を行えることがお判りであろう。たとえば、本発明の範囲を逸脱することなく従属項の特徴と独立項の特徴をさまざまに組み合わせることができる。
【図面の簡単な説明】
【００８４】
【図１】本発明の一実施例に従ったデータ処理装置のブロック図である。
【図２】逆数演算をインプリメントするために一実施例におけるデータ処理装置内で実施されるステップを示すフロー図である。
【図３】図２の過程の実行中にルックアップテーブルにアクセスするのに修正入力値がどのように使用されるかを示す図である。
【図４】一実施例に従った逆数演算の結果値に対する初期推定値の発生をより詳細に示すフロー図である。
【図５】入力値の逆数を求める時に精緻化ステップをインプリメントするために一実施例に従って実施される一連の計算を示すフロー図である。
【図６】入力値の逆平方根を求める時に精緻化ステップをインプリメントするために一実施例に従って実施される一連の計算を示すフロー図である。
【図７】図５および図６の過程をインプリメントするために図１のデータ処理装置内に設けられたエレメントを略示する図である。
【図８】ＡからＤは一実施例に従った推定値命令および精緻化ステップ命令のフォーマットを示す図である。
【符号の説明】
【００８５】
１０  データ処理装置
２０  メモリシステム
３０  レジスタファイル
４０  入力マルチプレクサ
５０  ＡＬＵパイプライン
６０  ロード/ストア・ユニット
７０  命令デコーダ
４００  乗算ユニット
４０２，４０４，４１５，４４２，４４４，４４６，４５０  パス
４２０  累算ユニット
４３０  マルチプレクサ
４４０  加算器ユニット
【図１】
2006228190.tif 000003
【図２】
2006228190.tif 000004
【図３】
2006228190.tif 000005
【図４】
2006228190.tif 000006
【図５】
2006228190.tif 000007
【図６】
2006228190.tif 000008
【図７】
2006228190.tif 000009
【図８】
2006228190.tif 000010