(57)【特許請求の範囲】
【請求項１】
第１、第２、第３のオペランドに浮動小数点乗算・累加（ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ）演算を実行するデータ処理装置であって、
第２と第３のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成する乗算器と、
丸め済み乗算結果と第１オペランドを加算して最終結果を生成し、丸め処理して丸め済み最終結果を生成する加算器と、
第１の単一命令に応答して、前記加算器からの丸め済み最終結果が第１オペランドから丸め済み乗算結果を減算した値に等しくなるように前記乗算器および加算器を制御する制御ロジックとを有し、
前記制御ロジックが、第１の単一命令および第１、第２、第３オペランドの符号値に応答して動作する基本決定ロジックを含み、同符号加算（ｌｉｋｅ−ｓｉｇｎｅｄ  ａｄｄｉｔｉｏｎ：ＬＳＡ）演算か、異符号加算（ｕｎｌｉｋｅ−ｓｉｇｎｅｄ  ａｄｄｉｔｉｏｎ：ＵＳＡ）演算のいずれの演算を前記加算器に実行させるかを前記基本決定ロジックによって決定し、その決定に依存する制御信号を前記基本決定ロジックで生成し、
更に、基本決定ロジックを内蔵し、最終結果の初期符号値を生成するように構成された符号計算ロジックを有し、
第１の単一命令に応答して第１オペランドの符号を初期符号値として選択するように、前記符号計算ロジックを構成し、
前記加算器で生成される合計値が負の場合、最終結果の生成前にその符号を反転し、更に、ＵＳＡ演算実行による合計値が正のときに初期符号値を反転し、合計値が負のときには初期符号をそのまま使うように構成した符号調整ロジックを有し、
最終結果がゼロの場合、所定の丸めモードによって示される符号値で初期符号値を置換するように前記符号調整ロジックを構成した、
前記データ処理装置。
【請求項２】
第１、第２、第３のオペランドに浮動小数点乗算・減算（ｍｕｌｔｉｐｌｙ−ｓｕｂｔｒａｃｔ）演算を実行するデータ処理装置であって、
第２と第３のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成する乗算器と、
丸め済み乗算結果と符号反転第１オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成する加算器と、
第１の単一命令に応答して、前記加算器からの丸め済み最終結果が符号反転第１オペランドから丸め済み乗算結果を減算した値に等しくなるように前記乗算器および加算器を制御する制御ロジックとを有し、
前記制御ロジックが、第１の単一命令および第１、第２、第３オペランドの符号値に応答して動作する基本決定ロジックを含み、同符号加算（ｌｉｋｅ−ｓｉｇｎｅｄ  ａｄｄｉｔｉｏｎ：ＬＳＡ）演算か、異符号加算（ｕｎｌｉｋｅ−ｓｉｇｎｅｄ  ａｄｄｉｔｉｏｎ：ＵＳＡ）演算のいずれの演算を前記加算器に実行させるかを前記基本決定ロジックによって決定し、その決定に依存する制御信号を前記基本決定ロジックで生成し、
更に、基本決定ロジックを内蔵し、最終結果の初期符号値を生成するように構成された符号計算ロジックを有し、
第１の単一命令に応答して第１オペランドの反転符号に等しい初期符号値を選択するように、前記符号計算ロジックを構成し、
前記加算器で生成される合計値が負の場合、最終結果の生成前にその符号を反転し、更に、ＵＳＡ演算実行による合計値が正のときに初期符号値を反転し、合計値が負のときには初期符号をそのまま使うように構成した符号調整ロジックを有し、
最終結果がゼロの場合、所定の丸めモードによって示される符号値で初期符号値を置換するように前記符号調整ロジックを構成した、
前記データ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
（発明の背景）
本発明は第1、第2、第３オペランドに浮動小数点演算を適用するためのデータ処理装置および方法に関するものである。
【０００２】
【従来の技術】
データ処理装置は一般に、データに対して様々な浮動小数点計算を実行することを求められる。浮動小数点計算の実行に汎用プロセッサがあまり適さないため、専用の浮動小数点ユニット（ＦＰＵ）の開発が進められてきた。
【０００３】
通常必要とされる１つの浮動小数点計算は、2つの数の積に第3の数を加算する乗算・累加（ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ）演算すなわちＡ＋（Ｂ＊Ｃ）である。乗算命令に続いて個別累加命令を実行することによって乗算・累加演算を実行することができるが、この方法は比較的遅い。そのため、高速で乗算・累加演算を実行する専用ＦＰＵの開発に関心が高まっている。
【０００４】
乗算・累加演算の高速化や回路の単純化を意図したＦＰＵの例として、米国特許４，９６９，１１８、米国特許５，２４１，４９３、米国特許５，３７５，０７８、米国特許５，５３０，６６３、ＥＰ−Ａ−０，６４５，６９９、米国特許４，８６６，６５２、米国特許４，８４１，４６７がある。また、個別ロジックユニットとして乗算器と加算器を保有することも可能である。
【０００５】
頻繁に使用されるもう１つの同様の浮動小数点計算に乗算・減算（ｍｕｌｔｉｐｌｙ−ｓｕｂｔｒａｃｔ）演算すなわち−Ａ＋（Ｂ＊Ｃ）があり、これも通常は同じ乗算・累加ロジックを使用して実行することができるが、加算器に入力する前に値Ａの符号を反転する。
【０００６】
上記乗算・累加および乗算・減算演算の実行に加えて、乗算・累加および乗算・減算演算の符号反転バージョンも、コンパイラで使用される一般計算、複合乗算ルーチン、高速フーリエ変換（ＦＦＴ）／フィルタ・ルーチンに有用である。
【０００７】
乗算・減算演算の符号反転バージョンを実行するための命令については、インテル社の「ＩＡ−６４  Ａｐｐｌｉｃａｔｉｏｎ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｇｕｉｄｅ，Ｒｅｖ  １．0」の７〜５９ページに記述されている。ここで、「浮動小数点型の負の乗算・加算」（ｆｌｏａｔｉｎｇ−ｐｏｉｎｔ  ｎｅｇａｔｉｖｅ  ｍｕｌｔｉｐｌｙ−ａｄｄ）命令は、２つの浮動小数点レジスタ値の積を無限精度で計算し、符号変換し、次に、積と第３の浮動小数点レジスタ値を無限精度で加算すると定義される。丸めは最終結果で実行される。したがって、このインテル命令はＡ−（Ｂ＊Ｃ）で表現される。
【０００８】
浮動小数点計算を様々なデータ処理装置で処理するための方法における一貫したアプローチを確立するために、１９８５年に１つの規格「ＩＥＥＥ  Ｓｔａｎｄａｒｄ  ｆｏｒ  Ｂｉｎａｒｙ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ａｒｉｔｈｍｅｔｉｃ”，  ＡＮＳＩ／ＩＥＥＥ  Ｓｔｄ  ７５４−１９８５，  Ｔｈｅ  Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃ  Ｅｎｇｉｎｅｅｒｓ，  Ｉｎｃ．，  Ｎｅｗ  Ｙｏｒｋ，  １００１７」（以後、本明細書ではＩＥＥＥ７５４−１９８５規格と呼ぶ）が作られた。この規格の１つの定義によれば、乗算は丸め動作で完了し、同様に加算または累加演算も丸め動作で完了する。ＩＥＥＥ７５４−１９８５規格ではさらに、ＩＥＥＥ７５４−１９８５規格に適合すると考えられる多くの丸め動作を定義している。
【０００９】
上記のインテル手法によると、「ヒューズド」乗算・累加（“ｆｕｓｅｄ”  ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ）回路が使用される結果として、上記命令が効率的に処理されるが、累加演算前に乗算結果を独立して決定することができない。また、乗算の全ビット（ｎ×ｎビット乗算では２ｎビット）を含む内部精度で乗算が実行され、次に、すべての乗算ビットを用いて累加演算が実行される。したがって、乗算結果に対する丸め動作は、次の累加演算で乗算結果を使用する前には実行されない。したがって、丸め動作は乗算結果に対して実行されると規定しているＩＥＥＥ７５４−１９８５規格に準拠しないことは明らかである。
【００１０】
乗算・累加および乗算・減算演算の符号反転バージョンを実行する別の方法では、通常通りに乗算・累加および乗算・減算演算の実行後に、ＦＰＵから出力された最終結果の符号が反転される。このようにして、符号反転すなわち−（Ａ＋（Ｂ＊Ｃ））および−（−Ａ＋（Ｂ＊Ｃ））を実行することができ、これら演算によって所望の代数演算結果が得られる。
【００１１】
ＩＢＭパワーアーキテクチャでは実際に、乗算・加算を上記タイプの符号反転関数で定義している。「ｔｈｅ  ＰｏｗｅｒＰＣ  ６０１  ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｕｓｅｒ’ｓ  Ｍａｎｕａｌ，  （ＩＢＭ）  ５２Ｇ７４８４  （ＭＰＲ６０１ＵＭＵ−０２）  ｏｒ  （ＭＯＴ）  ＭＰＣ６０１ＵＭ／ＡＤ，  ＲＥＶ  １」のページ１０−７６〜１０−７９で、ＩＢＭパワーアーキテクチャは以下４つの命令を規定している。
ｆｎｍａｄｄｘ：    frD=-([(frA)*(frC)]+(frB))
ｆｎｍａｄｄｓｘ：  （上記に同じ、ただし単精度データ）
ｆｎｍｓｕｂｘ：    frD=-([(frA)*(frC)]-(frB))
ｆｎｍｓｕｂｓｘ：  （上記に同じ、ただし単精度データ）
【００１２】
インテルのアプローチと同様に、ＩＢＭも、ヒューズド乗算・累加ユニットを使用するので、ＩＥＥＥ７５４−１９８５規格に準拠する結果は保証されない。
【００１３】
ＩＢＭの命令と同様の乗算・加算符号反転関数を実行する２つの命令がＭＩＰＳ  ＩＶアーキテクチャでも定義されており、それらは以下の通りである
ＮＭＡＤＤ．ｆｍｔ：  fd=-((fs*ft)+fr)
ＮＭＳＵＢ．ｆｍｔ：  fd=-((fs*ft)-fr)
【００１４】
Ｃｈａｒｌｅｓ  Ｐｒｉｃｅによる「ｔｈｅ  ”ＭＩＰＳ  ＩＶ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ”，  Ｒｅｖｉｓｉｏｎ  ３．２，  Ｓｅｐｔｅｍｂｅｒ１９８５」のページＢ−７９〜Ｂ−７８には、「ｆｓの値とＦＰＲ  ｆｔの値の乗算で中間積を得る。その積とＦＰＲ  ｆｒの値の加算またはその積からＦＰＲ  ｆｒの値の減算が実行される。その結果から得られる和は無限精度で計算され、ＦＣＳＲにおける現在の丸めモードにしたがって丸められ、符号ビット変更によって符号反転され、ＦＰＲ  ｆｄに書き込まれる。」と記載されている。
【００１５】
ＭＩＰＳアーキテクチャは乗算器と加算器を別々のロジックユニットとして保有するので、乗算・累加演算を実行するとき、乗算器ユニットの出力に丸めを適用し、次に、この出力を加算器ロジックユニットに入力することによって、加算器ロジックユニットの出力が丸められる。したがって、この場合は式−（−Ａ＋（Ｂ＊Ｃ））および−（Ａ＋（Ｂ＊Ｃ））に対して、ＩＥＥＥ７５４−１９８５に準拠する結果が得られる。
【００１６】
また、式−（−Ａ＋（Ｂ＊Ｃ））は数学的に式Ａ−（Ｂ＊Ｃ）と等価であり、同様に式−（Ａ＋（Ｂ＊Ｃ））は数学的に式−Ａ−（Ｂ＊Ｃ）と等価であるので、ＭＩＰＳで使用されるタイプの命令を使用して式Ａ−（Ｂ＊Ｃ）または−Ａ−（Ｂ＊Ｃ）に対する数学的に正しい結果を得ることができる。
【００１７】
（発明の概要）
第１の態様において本発明は第１、第２、第３のオペランドに浮動小数点型乗算・累加演算を実行するデータ処理装置を提供する。この装置は、第２、第３オペランドを乗算し、丸め処理して、丸め済み乗算結果を生成する乗算器と、丸め済み乗算結果と第１オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成する加算器と、第１の単一命令に応答して、加算器からの丸め済み最終結果が第１オペランドから丸め済み乗算結果を減算した値に等しくなるように乗算器および加算器を制御する制御ロジックとを有する。
【００１８】
計算−（−Ａ＋（Ｂ＊Ｃ））を実行するための上記従来技術による命令では式Ａ−（Ｂ＊Ｃ）に対しては正しい数学的結果が得られるが、ある特定の状況、特に結果がゼロ値になる場合にはその式に対して正しい符号付結果が得られないことが知られている。これについては詳しく後述する。
【００１９】
ＩＥＥＥ７５４−１９８５規格では、それに準拠すると考えられる多くの丸めモードが定義されており、これら丸めモードにおいて逆符号数値の加算や同符号数値の減算の結果がゼロになるときの結果の表し方が定義されている。
【００２０】
結果がこのようにゼロになるのは加算または減算される数が等しいときまたはゼロのときである。それとは無関係に、ＩＥＥＥ７５４−１９８５では、丸めモードＲＮ（ｒｏｕｎｄ  ｔｏ  ｎｅａｒｅｓｔ）、ＲＺ（ｒｏｕｎｄ  ｔｏ  ｚｅｒｏまたはｃｈｏｐ）、ＲＰ  （ｒｏｕｎｄ  ｔｏ  ｐｌｕｓ  ｉｎｆｉｎｉｔｙ）において、逆符号数値の加算や同符号数値の減算の結果がゼロになるときには正のゼロとし、それに対してＲＭ（ｒｏｕｎｄ  ｔｏ  ｍｉｎｕｓ  ｉｎｆｉｎｉｔｙ）においては、負のゼロとすることを規定している。
【００２１】
上記を前提として、ＡとＢ＊Ｃの大きさと符号が等しいときに、下記表のような符号付ゼロ結果が生じる。
0004418578.tif 000002
【００２２】
したがって、数学的には前述のＭＩＰＳ  ＩＶ命令は、式Ａ−（Ｂ＊Ｃ）の正しい演算結果の数値計算には十分だったが、＋０と−０が同じ数を表すので、それらの命令を使用して得られる結果から上記例の式に対する正しい符号付結果が得られないことは明らかである。
【００２３】
実際のシステム、例えばＪａｖａ言語を使用するシステムの中には、この差を重要視するものがあることが分かっている。ＩＥＥＥ７５４−１９８５規格では、＋０と−０に対して異なったビットパターン表現が規定され、続いてそれらに施される算術演算の結果に関していくらか挙動が異なるので、厳密にビット単位の正確さ（ｂｉｔ−ｅｘａｃｔ）を要求するある種のシステム、たとえばＪａｖａ言語を使用するシステムは影響を受ける。従って、その種のシステムにおいては、式Ａ−（Ｂ＊Ｃ）の結果を得るために−（−Ａ＋（Ｂ＊Ｃ））の数値計算命令を使用することはできない。
【００２４】
もう一つ、この差が重要になるのは、古いコードを再使用するときである。個別の乗算命令実行後に丸め処理してＡ−（Ｂ＊Ｃ）などの式の数値を求める古いコードを移植し、そして個別の減算命令実行後に丸め処理する場合に重要なことは、Ａ−（Ｂ＊Ｃ）の数値計算に新たにどのような単一命令を使用しても同じ結果が得られることである。
【００２５】
本発明によると、第１オペランドから丸め済み乗算結果を減算した値に等しい丸め済み結果を生成するための第１の単一命令を高速で実行するように構成した乗算・累加ロジックによって上記問題は処理され、式Ａ−（Ｂ＊Ｃ）を数値計算するときにＩＥＥＥ７５４−１９８５に準拠する結果が得られる。
【００２６】
また、ある種の専門分野以外において、実際には−（−Ａ＋（Ｂ＊Ｃ））よりもＡ−（Ｂ＊Ｃ）の表現が一般的であるので、式Ａ−（Ｂ＊Ｃ）の数値計算にＩＥＥＥ７５４−１９８５準拠のゼロ結果を与える本発明の第１の単一命令は、いくつかの応用分野で前述の従来技術命令よりも有用であることが判明している。
【００２７】
好ましい実施例では、この第１命令をＦＮＭＡＣ命令と呼び、符号反転乗算・累加（ｎｅｇａｔｅ  ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ）命令と考えてよい。
【００２８】
制御ロジックは、特定の命令の適切な実行を確実にするために乗算器および加算器の一般的な制御を行い、通常は乗算器、加算器への入力や、乗算器、加算器で実行される動作タイミングを制御する。好ましい実施例では、第１の単一命令および第１、第２、第３オペランドの符号値に応答して、同符号加算（ＬＳＡ）演算か、異符号加算（ＵＳＡ）演算のいずれの演算を加算器に実行させるかを決定し、その決定に依存する制御信号を生成する基本決定ロジックが制御ロジックに含まれる。
【００２９】
基本決定ロジックは具体的に、第１の単一命令に応答して、第２、第３オペランドの符号値から丸め済み乗算結果の符号値を決定し、そして、第１オペランドの符号と丸め済み乗算結果の符号が同一ならば加算器でＵＳＡ演算を実行、また、第１オペランドの符号と丸め済み乗算結果の符号が異なっていれば、加算器でＬＳＡ演算を実行することを決定するように構成される。
【００３０】
丸め済み乗算結果と加算するために第１オペランドか符号反転第１オペランドのいずれかを選択するマルチプレクサを加算器に設け、ＵＳＡ演算には符号反転第１オペランドを選択、そしてＬＳＡ演算には第１オペランドを選択するための制御信号をマルチプレクサに供給することが好ましい。
【００３１】
好ましい実施例において、本装置には更に、基本決定ロジックを内蔵し、最終結果の初期符号値を生成するように構成された符号計算ロジックが含まれる。符号計算ロジックは第１の単一命令に応答して第１オペランドの符号を初期符号値として選択するように構成されることが好ましい。
【００３２】
好ましい実施例によれば、加算器で生成される合計値が負の場合、最終結果の生成前にその符号は反転される。本装置には更に、ＵＳＡ演算実行による合計値が正のときに初期符号値を反転し、合計値が負のときには初期符号をそのまま使うように構成した符号調整ロジックが含まれる。
【００３３】
符号調整ロジックは、最終結果がゼロの場合、所定の丸めモードによって示される符号値で初期符号値を置換するように構成される。これにより、ＩＥＥＥ７５４−１９８５規格への準拠、特に特定の丸めモードにおける加算または減算に関してこの規格が定義するゼロ結果表示法への準拠が確実になる。
【００３４】
丸め済み最終結果を生成するために、所定の丸めモードで指定される通りに最終結果の丸め動作を実行する丸めロジックを本装置に設けることが好ましい。
【００３５】
好ましい実施例において、制御ロジックは第２の単一命令に応答して、加算器からの丸め済み最終結果が、符号反転第１オペランドから丸め済み乗算結果を減算した値に等しくなるように、乗算器および加算器を制御する。
【００３６】
計算−（−Ａ＋（Ｂ＊Ｃ））を実行するための上記従来技術による命令では式Ａ−（Ｂ＊Ｃ）に対しては正しい数学的結果が得られるが、ある特定の状況、特に結果がゼロ値になる場合にはその式に対して正しい符号付結果が得られないことが知られている。しかし、本発明の好ましい実施例によれば、第１オペランドから丸め済み乗算結果を減算した値に等しい丸め済み結果を生成するための第１の単一命令を高速で実行するように乗算・累加ロジックが構成され、式Ａ−（Ｂ＊Ｃ）を数値計算するときにＩＥＥＥ７５４−１９８５に準拠する結果が得られる。
【００３７】
好ましい実施例では、この第２命令はＦＮＭＳＣ命令と呼ばれ、符号反転乗算・減算命令と考えてよい。
【００３８】
第２の態様において本発明は第１、第２、第３のオペランドに浮動小数点型乗算・減算演算を実行するデータ処理装置を提供する。この装置は、第２と第３のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成する乗算器と、丸め済み乗算結果と符号反転第１オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成する加算器と、第１の単一命令に応答して、加算器からの丸め済み最終結果が符号反転第１オペランドから丸め済み乗算結果を減算した値に等しくなるように乗算器および加算器を制御する制御ロジックとを有する。
【００３９】
本発明の第２の態様によれば、符号反転第１オペランドから丸め済み乗算結果を減算した値に等しい丸め済み結果を生成するための第１の単一命令を高速で実行するように乗算・累加ロジックを構成することによって、式−Ａ−（Ｂ＊Ｃ）を数値計算するときにＩＥＥＥ７５４−１９８５に準拠する結果が得られる。
【００４０】
この第２の態様では、好ましい実施例における第２命令はＦＮＭＳＣ命令と呼ばれ、符号反転乗算・減算（ｎｅｇａｔｅ−ｍｕｌｔｉｐｌｙ  ｓｕｂｔｒａｃｔ）命令と考えてよい。
【００４１】
好ましい実施例の基本決定ロジックは、第１の単一命令に応答して、第１オペランドの符号と丸め済み乗算結果の符号が同一ならば加算器によってＬＳＡ演算を実行、また、第１オペランドの符号と丸め済み乗算結果の符号が異なっていれば、加算器によってＵＳＡ演算を実行することを決定するように構成される。
【００４２】
この態様ではまた、好ましい実施例の符号計算ロジックは、第１の単一命令に応答して第１オペランドの反転符号に等しい初期符号値を選択するように構成される。
【００４３】
第３の態様では、本発明は、データ処理装置において第１、第２、第３のオペランドに浮動小数点乗算・累加演算を実行する方法を提供する。この方法は、第２と第３のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成するように乗算器を構成するステップと、丸め済み乗算結果と第１オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成するように加算器を構成するステップと、第１の単一命令に応答して、加算器からの丸め済み最終結果が第１オペランドから丸め済み乗算結果を減算した値に等しくなるように乗算器および加算器を制御するステップとを含む。
【００４４】
第４の態様では、本発明は、データ処理装置において第１、第２、第３のオペランドに浮動小数点乗算・減算演算を実行する方法を提供する。この方法は、第２と第３のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成するように乗算器を構成するステップと、丸め済み乗算結果と符号反転第１オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成するように加算器を構成するステップと、第１の単一命令に応答して、加算器からの丸め済み最終結果が符号反転第１オペランドから丸め済み乗算結果を減算した値に等しくなるように乗算器および加算器を制御するステップとを含む。
【００４５】
【実施例】
付図に示される好ましい実施例に従って、以下に本発明の詳細を説明する。
【００４６】
【好ましい実施例の説明】
図１はメインプロセッサ２４、浮動小数点ユニット（ＦＰＵ）コプロセッサ２６、キャッシュメモリ２８、主記憶装置３０、入出力システム３２を含むデータ処理システム２２を示す。メインプロセッサ２４、キャッシュメモリ２８、主記憶装置３０、入出力システム３２はメインバス３４を通して接続される。コプロセッサバス３６はメインプロセッサ２４を浮動小数点ユニットコプロセッサ２６に接続する。
【００４７】
動作中、メインプロセッサ２４（ＡＲＭコアとも呼ばれる）はキャッシュメモリ２８、主記憶装置３０、入出力システム３２とのインタラクションを含む一般タイプのデータ処理動作を制御するデータ処理命令ストリームを実行する。データ処理命令ストリーム中にはコプロセッサ命令が埋め込まれている。メインプロセッサ２４は、これらコプロセッサ命令が付属コプロセッサで実行されるタイプであることを認識する。従って、メインプロセッサ２４はこれらのコプロセッサ命令をコプロセッサバス３６上に送出し、そこからいずれかの付属コプロセッサがそのコプロセッサ命令を受け取る。その場合、ＦＰＵコプロセッサ２６は、それを自己宛てのものと識別すれば、そのコプロセッサ命令を受け入れて実行する。この識別はコプロセッサ命令に含まれるコプロセッサ番号フィールドによって行われる。
【００４８】
図２は図１のＦＰＵコプロセッサ２６を詳細に示すブロック図である。図２に示されるように、ＦＰＵ２６は、浮動小数点演算を実行するデータ経路ブロック６０と、コプロセッサバス３６を通してメインプロセッサ２４とインタフェースするコプロセッサインタフェース８０と、浮動小数点演算の入力値と浮動小数点演算の結果などを格納するレジスタファイル７０とを有する。
【００４９】
浮動小数点命令がメインプロセッサからＦＰＵ２６に渡されると、コプロセッサインタフェース８０はそれを受け取って、ＦＰＵ２６がその浮動小数点命令を処理し得るか否かを決定する。そして、新しい命令の受信時に何らかの理由でデータ経路要素ブロック６０がその命令の実行を開始することができない場合、コプロセッサインタフェース８０はそれをメインプロセッサに通知する。しかし、命令が実行可能な場合は、コプロセッサインタフェース８０は、浮動小数点演算を開始するために制御信号を生成してデータ経路要素ブロック６０に渡す。
【００５０】
浮動小数点演算の実行前に、演算用の入力値がデータバスを介してレジスタファイル７０に渡される。そして、入力値が適切なソースレジスタに格納されるように、コプロセッサインタフェース８０からレジスタファイル７０に制御信号が送られる。
【００５１】
浮動小数点演算が開始されると、レジスタファイル７０からデータ経路要素ブロック６０にソースレジスタの内容が出力される。そして、浮動小数点演算が完了すると、演算結果はデータ経路要素ブロックからレジスタファイル７０に渡され、適切な宛先レジスタに格納される。
【００５２】
ＦＰＵ２６などのＦＰＵは、適切な浮動小数点命令に応答して浮動小数点乗算・累加演算（Ａ＋（Ｂ＊Ｃ））あるいは浮動小数点乗算・減算演算（−Ａ＋（Ｂ＊Ｃ））を実行するように構成することができる。ＦＰＵ２６は、図３Ａに示されるヒューズド乗算・累加ＦＰＵか、図３Ｂに示される「チェーンド」乗算・累加（“ｃｈａｉｎｅｄ”  ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ）ＦＰＵのいずれでもよい。
【００５３】
図３Ａには、Ａ＋（Ｂ＊Ｃ）タイプまたは−Ａ＋（Ｂ＊Ｃ）タイプの関数を実行するように構成されたヒューズド乗算・累加ＦＰＵ用の指数、仮数経路が示される。Ａ、Ｂ、Ｃの指数は指数ユニット１００に供給され、そこでＡの指数と積（Ｂ＊Ｃ）の指数の差に基づくアライメント信号と共に、結果の初期指数値が決定される。さらに、ＢおよびＣの仮数は部分乗算器１２０に渡され、そこでキャリー／セーブ（ｃａｒｒｙ／ｓａｖｅ）形式の積が生成される。また、Ａの仮数はアライメントシフタ／補数器１１０を通過し、−Ａ＋（Ｂ＊Ｃ）を計算する場合は、その仮数は反転され、アライメント信号に基づいてシフトされる。
【００５４】
キャリーセーブ加算器／最終加算器（ｃａｒｒｙ−ｓａｖｅ  ａｄｄｅｒ  ａｎｄ  ｆｉｎａｌ  ａｄｄｅｒ）ブロック１３０は、独自に乗算Ｂ＊Ｃの結果を決定しないで結果を生成するためにアライメントシフタ／補数器回路１１０および部分乗算器１２０の出力を処理する。結果は正規化回路（ｎｏｒｍａｌｉｚｅｒ）１４０で正規化され、指数調整ブロック１６０において指数値に必要な調整が施される。最後に丸めブロック１５０によって丸めが実行され、丸めの結果として必要な新たな調整が指数調整ブロック１６０によって実行される。
【００５５】
これとは対照的に、チェーンド乗算・累加ＦＰＵは図３Ｂに示すような動作をする。同様に、要素１００、１１０、１２０は図３Ａに関する記述と同様に動作する。しかし、部分乗算器１２０からの出力はキャリーセーブ加算器／最終積加算器（ｃａｒｒｙ  ｓａｖｅ  ａｄｄｅｒｓ  ａｎｄ  ｆｉｎａｌ  ｐｒｏｄｕｃｔ  ａｄｄｅｒ）１７０に渡され、そこで積算結果が求められた後、丸め回路１８０によって丸められる。この丸め処理の結果として指数調整が必要な場合は、指数調整ブロック１６０に通知される。
【００５６】
次に、最終合計加算器１９０はアライメントシフタ／補数器ブロック１１０および丸め回路１８０の出力に基づいて加算を実行する。その結果は図３Ａに関する説明と同様に正規化回路１４０および丸め回路１５０によって処理される。
【００５７】
前述のように、乗算・累加および乗算・減算の符号反転バージョンを生成するための従来技術アプローチでは、乗算・累加演算（Ａ＋（Ｂ＊Ｃ））または乗算・減算演算（−Ａ＋（Ｂ＊Ｃ））が実行され、その結果は符号反転ロジックへ出力され、そこで、乗算・累加または乗算・減算演算の符号反転バージョンが必要であると仮定して結果の符号反転が実行される。したがって、その場合、ヒューズドＦＰＵか、チェーンドＦＰＵかにかかわらず、最終結果は式−（Ａ＋（Ｂ＊Ｃ））または−（−Ａ＋（Ｂ＊Ｃ））に等しくなる。前述のように、このような乗算・累加および乗算・減算演算の符号反転バージョンは代数的に正しい結果を与えるが、Ｂ＊ＣがＡに等しいときに式−Ａ−（Ｂ＊Ｃ）およびＡ−（Ｂ＊Ｃ）の数値計算には、ＩＥＥＥ７５４−１９８５規格で要求される正しい符号付ゼロ値が得られない。
【００５８】
前述した従来技術のもう一方のタイプは、図３Ａに関して説明したヒューズド乗算・累加演算ＦＰＵを使用して、式Ａ−（Ｂ＊Ｃ）の数値計算命令を実行し、そして最終結果だけが丸め処理される。前述のように、ＩＥＥＥ７５４−１９８５規格では乗算結果に対して丸め処理を施すように規定しているので、この方法は規格に準拠しない。
【００５９】
本発明の好ましい実施例では、この問題は以下のようにして解決される。図２に示されるＦＰＵ２６のデータ要素経路６０は、ＦＭＡＣ命令に応答してチェーンド浮動小数点乗算・累加演算（Ａ＋（Ｂ＊Ｃ））を実行するか、またはＦＭＳＣ命令に応答してチェーンド浮動小数点乗算・減算演算（−Ａ＋（Ｂ＊Ｃ））を実行するように構成される。本発明の好ましい実施例によれば、新たな２つの命令が以下の通り定義される。
ＦＮＭＡＣ：  Ａ−（Ｂ＊Ｃ）
ＦＮＭＳＣ：  −Ａ−（Ｂ＊Ｃ）
【００６０】
ＦＮＭＡＣ命令を符号反転乗算・累加命令、ＦＮＭＳＣ命令を符号反転乗算・減算命令と考えることができる。これらの命令が乗算・累加および乗算・減算演算の符号反転バージョンに対して代数的に正しい結果を与えると共に、ＩＥＥＥ７５４−１９８５規格で要求される正確な符号付ゼロ値を与えることも分かっている。
【００６１】
図４はＦＮＭＡＣおよびＦＮＭＳＣ命令に基づいて乗算・累加および乗算・減算演算の符号反転バージョンを生成する際に本発明の好ましい実施例で使用される各要素のブロック図である。レジスタ３００、３１０、３２０は浮動小数点演算で使用されるＡ、Ｂ、Ｃの入力オペランドを供給する。オペランドの符号値は符号計算ロジック７００に、指数値は指数ロジック２３０に、仮数値は仮数ロジック２２０にそれぞれ渡される。図５Ａ、図５Ｂとの関連で後述するが、符号計算Ｓブロック７００は結果の符号の初期決定を経路２５０上に出力し、そして仮数ロジック２２０で実行される加算を制御するために使用される信号を経路２４５上に出力する。
【００６２】
仮数ロジックの中に含まれる乗算・加算段からある種の信号が経路２６０、２６５を介して符号調整ロジック７２０に送られ、この符号調整ロジックには更に使用中の丸めモードが指示される。図５Ａ、図５Ｂに関連して詳しく後述するが、符号調整ロジック７２０は符号調整が必要であるか否を決定する。
【００６３】
指数ロジック２３０において、入力オペランドの指数に基づいて最終結果の指数値が求められ、そしてアライメント値が生成され、そのアライメント値は仮数に適用される演算を実行する仮数ロジックに経路２７０を通して渡される。更に、仮数ロジック２２０で生成される１つ以上の信号が経路２７５上に送出され、その信号は最終結果の指数値を調節するために指数ロジックで使用される。これについても図５Ａ、図５Ｂに関する説明で詳しく述べる。
【００６４】
図５Ａ、図５Ｂは図４のロジックを更に詳しく示すブロック図である。Ｄ段（デコード段）においてレジスタ３００、３１０、３２０からＡ、Ｂ、Ｃの入力オペランドがそれぞれ供給される。Ａ、Ｂ、Ｃの仮数はレジスタ３０５、３１５、３２５に渡される。各オペランドの符号ビットは結果の符号を初期決定するために符号計算ブロック７００に入力される。この決定はＡ入力オペランドがＢオペランドとＣオペランドの積よりも大きいという任意の仮定に基づく。この仮定が正しくないことも有り得るが、その場合は、図５Ａ、図５Ｂに関して後述するように、図５Ａ、図５Ｂのロジックによって自動的に補償される。
【００６５】
また、当業者には明らかなように、浮動小数点加法演算には、同符号加法演算と、異符号加法演算の２種類がある。同符号加法演算（ＬＳＡ）では、加算の場合は入力オペランドの符号が同一、減算の場合は入力オペランドの符号が互いに異なる。異符号加法演算（ＵＳＡ）では、加算の場合は入力オペランドの符号が互いに異なり、減算の場合は入力オペランドの符号が同一である。また、どのタイプの加法演算を使用するかを決定するのも、符号計算ブロック７００であるが、それについては以下に説明する。
【００６６】
符号計算ブロック７００が実行する初期符号計算においては、入力符号ビットＡ符号、Ｂ符号、Ｃ符号（０は正、１は負を表す）、命令（加算か減算の選択）、積の符号反転（ＦＮＭＡＣおよびＦＮＭＳＣ命令について）を行うか否か、が考慮される。積の符号（Ｐ−Ｓｉｇｎ）はＢの符号とＣの符号の排他的論理和である。演算がＦＮＭＡＣかＦＮＭＳＣのいずれかならば、ＮｅｇａｔｅＰｒｏｄｕｃｔ（反転積）信号が真（すなわち、１）になる。その場合、Ｐ−Ｓｉｇｎの値は反転する。
【００６７】
表１は様々な入力信号の値に応じて符号計算ブロック７００から出力されるＩｎｉｔｉａｌＳｉｇｎ信号およびＵＳＡＳｅｌｅｃｔ信号の値を示す。
0004418578.tif 000003
表１
【００６８】
表１において、最初の４項目はＦＭＡＣ命令、２つ目の４項目はＦＮＭＡＣ命令、３つ目の４項目はＦＭＳＣ命令、最後の４項目はＦＮＭＳＣ命令にそれぞれ関連する。ＩｎｉｔｉａｌＳｉｇｎ値はレジスタ７０５に格納され、ＵＳＡ−Ｓｅｌｅｃｔ信号はレジスタ７１５に収納される。
【００６９】
Ｄ段でも、指数計算ブロック７１０は結果の初期指数値と、アライナ４６０を駆動するＡｌｉｇｎＳｈｉｆｔＣｏｕｎｔ（アラインシフトカウント）信号とを生成する。初期指数値は、Ａ入力オペランド指数と計算された積の指数（Ｂ入力オペランド指数とＣ入力オペランド指数の和）のいずれか大きい方である。ＡｌｉｇｎＳｈｉｆｔＣｏｕｎｔはＡ入力オペランド指数値と計算された積の指数の差に基づく。初期指数はレジスタ７２５に格納され、ＡｌｉｇｎＳｈｉｆｔＣｏｕｎｔ値はレジスタ７３５に格納される。
【００７０】
Ｅｌ段では、インバータ３３０はコンプリメント（補数）Ａ入力オペランドを生成する。補数Ａ入力は１の補数形式でＥ３段のエンド・アラウンド・キャリー（ｅｎｄ−ａｒｏｕｎｄ−ｃａｒｒｙ）加算器５４０に残される。入力信号ＵＳＡＳｅｌｅｃｔに基づいてＡ入力オペランドまたは補完Ａ入力オペランドを選択するマルチプレクサ３６０によって被加算数が生成される。ＵＳＡの場合は常に補数Ａ入力オペランドが選択され、ＬＳＡ場合は常にＡ入力オペランドが選択される。マルチプレクサ３６０の出力はレジスタ４００に書き込まれる。そして、３番目のＥ３段における加算に先立って仮数を積に合わせるために、被加算数はＥ２段階のアライナ４６０によってＡｌｉｇｎＳｈｉｆｔＣｏｕｎｔ）値に基づいてシフトされ、アライナ４６０からの出力はレジスタ５２０に書き込まれる。このようにすると、設計上は大規模になるが、いくつかの経路（ｐａｔｈ）が省略され、ハードウェアのスピードとの妥協が得られる。
【００７１】
他の実施例では、Ａ入力の指数と、Ｂ入力とＣ入力の積の指数を利用して、Ａ入力か、ＢとＣの積のいずれか小さい方を求め、その小さい方のデータを選択して反転、シフトすることができる。
【００７２】
Ｅｌ段において乗算器３８０はＢ入力オペランドの仮数とＣ入力オペランドの仮数を乗算してＭＳｕｍ（乗算和）およびＭＣａｒｒｙ（乗算桁上げ）を出力する。これらはレジスタ４２０、４４０にそれぞれ書き込まれる。レジスタのＭＳｕｍおよびＭＣａｒｒｙデータはＥ２段で加算器４８０によって加算され、Ｒｍｏｄｅ信号で指定される現在の丸めモードと所要最終精度にしたがって丸められる。丸められた積の値はレジスタ５３０に書き込まれる。
【００７３】
Ｅ３段において、エンド・アラウンド・キャリー（ｅｎｄ−ａｒｏｕｎｄ−ｃａｒｒｙ）加算器５４０によって最終的に被加算数と積の加算が実行される。加算器から出力されるＦｉｎａｌＳｕｍ（最終和）の結果が正（加算器５４０のＦｉｎａｌＳｕｍのＭＳＢが０）の場合、変更の必要はなく、結果が負（加算器５４０のＦｉｎａｌＳｕｍのＭＳＢが１）の場合は単純に出力の反転が行われる。この反転はインバータ５６０によって実行され、そして、マルチプレクサ５８０は、エンド・アラウンド・キャリー加算器５４０で生成されるＦｉｎａｌＳｕｍ  ＭＳＢ信号から得られるＲｅｓｕｌｔＮｅｇａｔｉｖｅ（結果負）信号に応じて、反転値または非反転値をＡｄｄＲｅｓｕｌｔ（加算結果）値として選択する。そのＡｄｄＲｅｓｕｌｔ値はレジスタ６１０に書き込まれる。
【００７４】
先頭０及び１（Ｌｅａｄｉｎｇ  ０  ａｎｄ  １）検出器６００はＦｉｎａｌＳｕｍの結果における最上位の「１」と最上位の「０」の位置を計算する。ＦｉｎａｌＳｕｍの結果が正の場合、Ｅ４段におけるＮｏｒｍＳｈｉｆｔＣｏｕｎｔ（ノルムシフトカウント）値の生成に最上位の１の位置を使用して結果が正規化され、初期指数が調整され、一方、結果が負の場合、反転前のＦｉｎａｌＳｕｍ値で検出された最上位ゼロの位置を使用してＮｏｒｍＳｈｉｆｔＣｏｕｎｔ値が生成される。
【００７５】
Ｅ４段において、レジスタ６１０の出力はＥ３段で計算されたＮｏｒｍＳｈｉｆｔＣｏｕｎｔ値と共に正規化回路６３０に入力される。正規化回路６３０は、ＡｄｄＲｅｓｕｌｔを右に２桁あるいは左に複数桁シフトする機能を備えている。ＬＳＡ演算では、ＮｏｒｍＳｈｉｆｔＣｏｕｎｔ値は＋２、＋１または０であろう。ＵＳＡ演算では、仮数のサイズをｎとして、ＮｏｒｍＳｈｉｆｔＣｏｕｎｔ値は＋１、０、または−１〜ｎであろう。ＡｄｄＲｅｓｕｌｔ値は、ＮｏｒｍＳｈｉｆｔＣｏｕｎｔ値が負であれば右シフトによって正規化され、ＮｏｒｍＳｈｉｆｔＣｏｕｎｔが正であれば左シフトによって正規化される。指数調整は、Ｅ４段において指数調整（ＥｘｐＡｄｊｕｓｔ  １）ブロック７３０でＮｏｒｍＳｈｉｆｔＣｏｕｎｔ値の加算によって実行される。
【００７６】
正規化の結果がゼロであるとき、Ｅ４段においてゼロ検出ブロック６４０からＺｅｒｏＲｅｓｕｌｔ信号が出力される。
【００７７】
また、Ｅ４段において、Ｄ段からの初期符号値は、加算器５４０から出力されたＦｉｎａｌＳｕｍのＭＳＢ（このＭＳＢはレジスタ８１５に格納されている）およびゼロ検出ブロック６４０の結果に基づいて符号調整ロジック７２０によって調整される。ＭＳＢがゼロ（すなわち、ＦｉｎａｌＳｕｍが正）であって演算がＵＳＡだったとすれば、Ｅｌ段の積が不正確と言うより被加算数を反転するという任意決定が誤りであったことになり、結果符号を生成するために初期符号を反転する必要がある。ＭＳＢが１（すなわち、ＦｉｎａｌＳｕｍが負で、ＵＳＡ演算の時だけに可能）ならば、積が正しいと言うよりむしろ被加算数を反転するという任意決定が正しかったので、初期符号が結果符号になる。演算がＬＳＡだったならば、被加算数は反転されないから、符号調整ロジック７２０による初期符号値の調整は行われない。
【００７８】
ＦｉｎａｌＳｕｍ値がゼロならば、符号調整ロジック７２０は初期符号をＩＥＥＥ７５４−１９８５規格で規定されるゼロ結果符号値に変更する。具体的に、丸めモードがＲＰ、ＲＮまたはＲＺならば、結果符号は０（すなわち、正）に設定されるが、丸めモードがＲＭならば、結果符号は１（すなわち、負）に設定される。この結果符号はレジスタ８２５に格納される。
【００７９】
結果がゼロでない場合、Ｅ５段の丸め回路６８０は、ＲＭｏｄｅ（丸めモード）信号によって指定される現在の丸めモードで所望の最終精度に結果を丸め、そして、指数ビットおよび符号ビットからなるこの結果はレジスタファイルに戻される。丸め動作によって仮数がオーバーフローする場合は、指数調整（ＥｘｐＡｄｊｕｓｔ２）ブロック７４０で指数をインクリメントすることにより結果指数（ＲｅｓｕｌｔＥｘｐ）値が形成され、結果仮数は右への１桁シフトされる。
【００８０】
演算の最終結果は結果符号ビット、結果指数値、結果仮数値で構成される。
【００８１】
以上の記述から分かるように、本発明の好ましい実施例では２つの新しい命令が提供される。すなわち、１つは、ＢとＣを乗算し、その積の符号を反転し、符号反転された積にＡを加算することと同等の結果を与えるＦＮＭＡＣ、そしてもう１つは、ＢとＣを乗算し、その積の符号を反転し、Ａの符号を反転し、符号反転された積と符号反転されたＡを加算することと同等の結果を与えるＦＮＭＳＣである。
【００８２】
これらの命令を使用することにより、ＩＥＥＥ７５４−１９８５規格に準拠する乗算・累加と乗算・減算演算の符号反転バージョンが得られる。これらは複雑な乗算ルーチン、ＦＦＴおよびフィルタ・ルーチン、コンパイラで使用される一般計算に有用である。例えば、ＪａｖａプラットホームではＩＥＥＥ７５４−１９８５規格に準拠するゼロの扱いが要求されるので、その規格に準拠する結果を生成することは重要である。
【００８３】
最後に、Ａ−（Ｂ＊Ｃ）の数値計算にヒューズドＦＰＵを使う従来技術アプローチではＩＥＥＥ７５４−１９８５準拠の結果が得られないことを説明するために、Ａ−（Ｂ＊Ｃ）の数値計算時のヒューズド演算、Ａ−（Ｂ＊Ｃ）の数値計算ためのチェーンド演算、そして個別のＩＥＥＥ７５４乗算／符号反転／加算演算の相違点を以下に述べる。
【００８４】
符号反転乗算・加算は式Ｆ＝Ａ（Ｂ＊Ｃ）の関数で定義することができる。ただし、Ｆ、Ａ、Ｂ、Ｃは符号ビット、指数（バイアス有りまたは無し）、暗示（ｉｍｐｌｉｅｄ）整数ビット、ｎビット有意数（ｓｉｇｎｉｆｉｃａｎｄ）を含む浮動小数点数値である。浮動小数点数値は以下のように定義される。
Ｘ＝−１S＊（１+ｆ＊２-n）＊２E
ただし、Ｘは不動小数点数値
Ｓは符号ビット（正は０、負は１）
ｆはｎビット・有意数
Ｅは指数（ここではバイアス無しとする）
【００８５】
この説明において、ａ＝２n＋ｆとして、正のＸはａ＊２-n＊２Eで定義される。正のＡは
Ａ＝ａ＊２-n＊２E
で表すことができる。
【００８６】
各２進値の最上位ビットが１であれば、２ｎ＋１ビットの２進値の積は２ｎ＋ｌまたは２ｎ＋２ビットを含む第３の２進値である。ｎビット有意数の浮動小数点システムでは上位ｎ＋１ビットだけが有意であると考えられるが、下位ｎビットまたはｎ＋１ビットは結果に適用される丸め値を決定するときに使用される。
【００８７】
この例では、積を丸めるときにＡオペランドに一致するように積が選択され、丸める前よりわずかに小さい。２ｎ＋１ビットからなる積を考えると、ＢとＣの積は、丸める前の状態で次のようになる。
(B*C)UR=((a-1)*2-n+d*2-2n)*2E
ただし、ａ−１は上位ｎ＋１ビットの値、ｄは下位ｎビットの値である。
【００８８】
また、ｄは、その値によって積の丸め処理が実行されるように指定され、その結果、丸められた積は次のようになる。
(B*C)R=(a*2-n)*2E
【００８９】
ヒューズド符号反転乗算・加算演算では、丸める前のＡオペランドにＢとＣの積が加算される。すなわち、
Sum=  A-(B*C)=    (a*2-n)*2E-((a-1) *2-n+d*2-2n)*2E
Sum=              2E*(2-n*(a-a+1)-d*2-2n)
Sum=              2E*(2-n-d*2-2n)
【００９０】
チェーンド符号反転乗算・加算演算では、積は最初にｎビットに丸められ、その後でＡオペランドと加算される。すなわち、
Sum=  A-(B*C)=    (a*2-n)*2E-(a*2-n)*2E
Sum=              +0
【００９１】
Ａオペランドが負で、積（Ｂ＊Ｃ）も負の場合、ヒューズド符号反転乗算・加算演算の結果は次のようになる。
-(2E*(2-n-d*2-2n))
ただし、チェーンド符号反転乗算・加算は＋０を返す。
なお、この２つの結果は値も、符合も異なる。
【００９２】
乗算・加算演算ファミリを備えていないプロセッサでは、符号反転乗算・加算関数は、最初にＢとＣの乗算、次にその積を丸めることによって実行される。続いて、積の符号反転、そして最後に、Ａオペランドと符号反転積の加算、またはＡから積の減算が実行される。この一連の演算を実行するプロセッサはチェーンド符号反転乗算・加算と同様に＋０を生成する。これが重要な点は、この関数を個別の乗算、符号反転、加算、またはチェーンド符号反転乗算・加算のいずれで実行するにしても、ヒューズド符号反転乗算・加算を実行するプロセッサを使用するか、ＩＥＥＥ７５４準拠のプロセッサを使用するかによって、この関数に付随し、演算の符号または演算結果の大小に依存するコードの挙動が異なることである。
【００９３】
以上に本発明の特定の実施例を記述したが、本発明は上記に限定されることなく、発明の範囲内で多くの変更、追加が可能であることは明らかである。例えば、好ましい実施例では、物理的に切り離されたコプロセッサを備えたＣＰＵにしたがって記述されているが、必ずしもその必要はない。例えば、浮動小数点ユニットはメインプロセッサに内蔵されていてもよい。また、独立請求項の特徴を利用して、本発明の範囲から逸脱することなく従属請求項の特徴を様々に組み合わせることが可能である。
【図面の簡単な説明】
【図１】本発明の好ましい実施例によるデータ処理装置の各要素を示すブロック図。
【図２】本発明の好ましい実施例によるＦＰＵコプロセッサの各要素を示すブロック図。
【図３Ａ】典型的なヒューズド乗算・累加ＦＰＵを示すブロック図。
【図３Ｂ】典型的なチェーンド乗算・累加ＦＰＵを示すブロック図。
【図４】乗算・累加および乗算・減算演算の符号反転バージョンを得るために本発明の好ましい実施例で使用される各要素を示すブロック図。
【図５Ａ】図４のロジックを更に詳細に示すブロック図。
【図５Ｂ】図４のロジックを更に詳細に示すブロック図。
【符号の説明】
２４  メインプロセッサ
２６  コプロセッサ
２８  キャッシュメモリ
３０  主記憶装置
３２  入出力システム
３４  メインバス
３６  コプロセッサバス
６０  データ経路ブロック
７０  レジスタファイル
８０  コプロセッサインタフェース
１１０  アライメントシフタ／補数器
１４０  正規化回路
１５０  丸めブロック
１６０  指数調整ブロック
１８０  丸め回路
１９０  最終合計加算器
【図１】
0004418578.tif 000004
【図２】
0004418578.tif 000005
【図３Ａ】
0004418578.tif 000006
【図３Ｂ】
0004418578.tif 000007
【図４】
0004418578.tif 000008
【図５Ａ】
0004418578.tif 000009
【図５Ｂ】
0004418578.tif 000010