(57)【特許請求の範囲】
【請求項１】
結果Ｒを得るためにオペランドＡおよびオペランドＢに加算演算を実行する装置であって、前記オペランドＡ、前記オペランドＢ、および前記結果Ｒは、仮数部および指数を各々有する浮動小数点値である、装置であって、
前記オペランドＡおよび前記オペランドＢに異符号加算を実行することにより生成される出力に存在するであろう先行するゼロの個数の予測に基づいてシフト表示を生成するように構成された予測回路と、
前記仮数部の加算の前に、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部にシフト演算を実行するように構成され、前記シフト演算は、前記オペランドＡおよび前記オペランドＢに対して修正された仮数部を生成するために、前記シフト表示による決定に応じて、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部の最上位ビットのいくつかを廃棄するように作用する、結果前正規化回路と、
前記オペランドＡおよび前記オペランドＢの前記指数を参照して、先行ビット相殺状態の存在を検出するように構成されたオペランド解析回路と、
前記先行ビット相殺状態の存在下で、前記結果Ｒの前記仮数部を生成するために、前記オペランドＡおよび前記オペランドＢに対する前記修正された仮数部の加算を実行するように構成された加算回路と、
を備え、
前記加算回路は、前記先行ビット相殺状態の不存在下で、前記結果Ｒの前記仮数部を生成するために、前記結果前正規化回路によって生成された前記修正された仮数部を使用することなく、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部の加算を実行し、
前記オペランドＢは２つの浮動小数点オペランドに乗算演算を実行した結果であり、前記オペランドＢは、前記結果Ｒが融合乗算累積演算の結果を表すように、入力として丸められない状態で前記装置に提供され、
前記結果Ｒの前記仮数部は、Ｎビットを有しており、前記オペランドＢの前記仮数部は、丸められない状態に起因してＮビットよりも多いビット数を有しており、
前記加算回路は、前記加算の実行時、挿入丸めを実行して丸め増分値を加算するように構成され、
前記加算回路の前に前記結果前正規化回路が動作することにより、前記オペランドＡおよび前記オペランドＢの前記修正された仮数部が、前記挿入丸めに対して正しく整置されることを確実にする装置。
【請求項２】
前記オペランド解析回路は、前記オペランドＡおよび前記オペランドＢの前記指数が同一の値または１だけ異なる値を有し、かつ前記オペランドＡと前記オペランドＢとに前記加算演算を実行するために、異符号加算が用いられる場合に、前記先行ビット相殺状態の存在を検出する、請求項１に記載の装置。
【請求項３】
前記予測回路は、前記異符号加算により、前記オペランドＡおよび前記オペランドＢのうちの小さい方のオペランドが前記オペランドＡおよび前記オペランドＢのうちの大きい方のオペランドから引かれる場合に対して、前記シフト表示を算出する、請求項１または請求項２に記載の装置。
【請求項４】
前記オペランドＡおよび前記オペランドＢのいずれがより大きいかの判定は、前記予測回路が先行ゼロ値の計算を開始する時点では得られず、
前記予測回路は、第１シフト表示候補および第２シフト表示候補を生成するように準備され、前記第１シフト表示候補は前記オペランドＡが前記オペランドＢよりも大きいことを仮定し、前記第２シフト表示候補は前記オペランドＢが前記オペランドＡよりも大きいことを仮定する、
請求項３に記載の装置。
【請求項５】
前記オペランドＡおよび前記オペランドＢのいずれが大きい方のオペランドであるかを判定するためのより大きいオペランドの判定回路と、
前記より大きいオペランドの判定回路に応答して、前記オペランドＡが前記大きい方のオペランドである場合は、前記シフト表示として、前記第１シフト表示候補を選択するように構成され、前記オペランドＢが前記大きい方のオペランドである場合は、前記シフト表示として、前記第２シフト表示候補を選択するように構成された選択回路と、
をさらに備える、請求項４に記載の装置。
【請求項６】
前記オペランドＡの前記指数の最下位ビットが前記オペランドＢの前記指数の最下位ビットと同一であるかどうかを示す比較結果を出力するように構成された比較回路をさらに備え、
前記比較結果が前記指数の前記最下位ビットが同一であることを示す場合、前記予測回路は、前記異符号加算により、前記オペランドＡおよび前記オペランドＢのうちの小さい方のオペランドが前記オペランドＡおよび前記オペランドＢの大きい方のオペランドから減算される場合に対して、前記シフト表示を計算し、
前記比較結果が前記指数の前記最下位ビットが同一でないことを示す場合、前記予測回路は、前記異符号加算により、前記オペランドＡおよび前記オペランドＢのうちの前記小さい方のオペランドの１ビット右シフトされたバージョンが前記オペランドＡおよび前記オペランドＢのうちの前記大きい方のオペランドから減算される場合に対して、前記シフト表示を計算する、
請求項３から請求項５のいずれかに記載の装置。
【請求項７】
前記加算回路は、
オーバーフロー状態が存在しないことを仮定して、第１丸め増分値を用いて前記加算を実行するように構成された第１加算回路と、
オーバーフロー状態が存在することを仮定して、第２丸め増分値を用いて前記加算を実行するように構成された第２加算回路と、
を備え、
先行ゼロ訂正状態が存在する場合には、前記加算回路は、前記結果Ｒの前記仮数部として、前記オペランドＡおよび前記オペランドＢの前記修正された仮数部から前記第２加算回路により生成された結果を出力するように構成された、
請求項１に記載の装置。
【請求項８】
前記加算回路が前記オペランドＡおよび前記オペランドＢに対する前記修正された仮数部の前記加算を実行するとき、前記先行ゼロ訂正状態は、前記第１加算回路から桁上げ出力が生成された場合に検出される、請求項７に記載の装置。
【請求項９】
前記結果前正規化回路は、前記オペランドＡおよび前記オペランドＢに対する前記修正された仮数部を生成するために、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部に左シフト演算を実行することにより、前記シフト演算を実行する、
請求項１から請求項８のいずれかに記載の装置。
【請求項１０】
前記仮数部の前記加算の前に、前記オペランドＡおよび前記オペランドＢのうちの前記小さい方のオペランドの前記仮数部と、前記オペランドＡおよび前記オペランドＢのうちの前記大きい方のオペランドの前記仮数部とを整置を実行するように構成された整置回路をさらに備え、
前記加算回路は、前記先行ビット相殺状態が存在しない場合、前記整置回路により整置された前記オペランドＡおよび前記オペランドＢの前記仮数部の加算を実行するように構成された、
請求項１から請求項９のいずれかに記載の装置。
【請求項１１】
前記整置回路は、シフトするビットの個数が前記オペランドＡおよび前記オペランドＢの前記指数の差に依存する状態で、前記オペランドＡおよび前記オペランドＢのうちの前記小さい方のオペランドの前記仮数部に右シフト演算を実行することにより、整置演算を実行する、請求項１０に記載の装置。
【請求項１２】
前記装置は、一連のパイプラインステージとして構成され、前記結果前正規化回路は、前記加算回路が配置された後続のパイプラインステージの前のパイプラインステージに配置される、請求項１から請求項１１のいずれかに記載の装置。
【請求項１３】
前記予測回路は、前記結果前正規化回路が配置された前記パイプラインステージの前の、先行するパイプラインステージに配置される、請求項１２に記載の装置。
【請求項１４】
前記加算回路の入力の前に、非正規化状態の検出に応答して、前記オペランドＡおよび前記オペランドＢに対する前記修正された仮数部に１ビット訂正右シフトを実行するシフト訂正回路をさらに備える、請求項１から請求項１３のいずれかに記載の装置。
【請求項１５】
前記非正規化状態は、前記結果Ｒの前記指数が予め定められた値をとる場合に検出される、請求項１４に記載の装置。
【請求項１６】
二重オーバーフロー状態の検出に応答して、前記加算回路の前記出力に関わりなく、前記結果Ｒの前記仮数部の全小数部ビットを論理ゼロ値として出力する、結果仮数部出力回路をさらに備える、請求項１から請求項１５のいずれかに記載の装置。
【請求項１７】
前記加算回路は、
オーバーフロー状態が存在しないことを仮定して、第１丸め増分値を用いて前記加算を実行するように構成された第１加算回路と、
オーバーフロー状態が存在することを仮定して、第２丸め増分値を用いて前記加算を実行するように構成された第２加算回路と、
を備え、
前記二重オーバーフロー状態は、異符号加算演算の実行時、前記第２加算回路から桁上げ出力が生じた場合に検出され、
前記二重オーバーフロー状態が存在する場合、前記結果の前記指数は、前記第１加算回路からの前記出力に関連する前記指数よりも２だけ大きく設定される、
請求項１６に記載の装置。
【請求項１８】
前記予測回路は、前記オペランドＡおよび前記オペランドＢに異符号加算を実行することにより生成される出力に存在するであろう先行ゼロの個数を示す先行ゼロ値を、前記シフト表示として計算するように構成された先行ゼロ予測回路を備える、請求項１から請求項１７の請求項のいずれかに記載の装置。
【請求項１９】
データ処理装置のプロセッサによって実行される方法であり、結果Ｒを生成するためにオペランドＡおよびオペランドＢに加算演算を実行する方法であって、前記オペランドＡ、前記オペランドＢ、および前記結果Ｒは、仮数部および指数を各々有する浮動小数点値である、方法であって、
前記オペランドＡおよび前記オペランドＢに異符号加算を実行することにより生成される出力において存在するであろう先行ゼロの個数の予測に基づいて、シフト表示を生成することと、
結果前正規化回路を用いて、前記仮数部の加算の前に、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部にシフト演算を実行し、前記シフト演算は、前記オペランドＡおよび前記オペランドＢに対して修正された仮数部を生成するために、前記シフト表示による決定に応じて、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部の最上位ビットのいくつかを廃棄するように作用することと、
前記オペランドＡおよび前記オペランドＢの前記指数を参照して、先行ビット相殺状態の存在を検出することと、
前記結果Ｒの前記仮数部を生成するために、前記先行ビット相殺状態の存在に応答して、前記オペランドＡおよび前記オペランドＢに対する前記修正された仮数部の加算を実行するように、加算回路を動作させることと、
を含み、
前記加算回路は、前記先行ビット相殺状態の不存在下で、前記結果Ｒの前記仮数部を生成するために、前記結果前正規化回路によって生成された前記修正された仮数部を使用することなく、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部の加算を実行し、
前記オペランドＢは２つの浮動小数点オペランドに乗算演算を実行した結果であり、前記オペランドＢは、前記結果Ｒが融合乗算累積演算の結果を表すように、入力として丸められない状態で前記装置に提供され、
前記結果Ｒの前記仮数部は、Ｎビットを有しており、前記オペランドＢの前記仮数部は、丸められない状態に起因してＮビットよりも多いビット数を有しており、
前記加算回路は、前記加算の実行時、挿入丸めを実行して丸め増分値を加算するように構成され、
前記加算回路の前に前記結果前正規化回路が動作することにより、前記オペランドＡおよび前記オペランドＢの前記修正された仮数部が、前記挿入丸めに対して正しく整置されることを確実にする方法。
【請求項２０】
結果Ｒを得るためにオペランドＡおよびオペランドＢに加算演算を実行する装置であって、前記オペランドＡ、前記オペランドＢ、前記結果Ｒは、仮数部および指数を各々有する浮動小数点値である、装置であって、
前記オペランドＡおよび前記オペランドＢに異符号加算を実行することにより生成される出力に存在するであろう先行するゼロの個数の予測に基づいてシフト表示を生成する予想手段と、
前記仮数部の加算の前に、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部にシフト演算を実行し、前記シフト演算は、前記オペランドＡおよび前記オペランドＢに対して修正された仮数部を生成するために、前記シフト表示による決定に応じて、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部の最上位ビットのいくつかを廃棄するように作用する、結果前正規化手段と、
前記オペランドＡおよび前記オペランドＢの前記指数を参照して、先行ビット相殺状態の存在を検出するオペランド解析手段と、
前記先行ビット相殺状態の存在下で、前記結果Ｒの前記仮数部を生成するために、前記オペランドＡおよび前記オペランドＢに対する前記修正された仮数部の加算を実行する加算手段と、
を備え、
前記加算手段は、前記先行ビット相殺状態の不存在下で、前記結果Ｒの前記仮数部を生成するために、前記結果前正規化手段によって生成された前記修正された仮数部を使用することなく、前記オペランドＡおよび前記オペランドＢの両方の前記仮数部の加算を実行し、
前記オペランドＢは２つの浮動小数点オペランドに乗算演算を実行した結果であり、前記オペランドＢは、前記結果Ｒが融合乗算累積演算の結果を表すように、入力として丸められない状態で前記装置に提供され、
前記結果Ｒの前記仮数部は、Ｎビットを有しており、前記オペランドＢの前記仮数部は、丸められない状態に起因してＮビットよりも多いビット数を有しており、
前記加算手段は、前記加算の実行時、挿入丸めを実行して丸め増分値を加算するように構成され、
前記加算手段の前に前記結果前正規化手段が動作することにより、前記オペランドＡおよび前記オペランドＢの前記修正された仮数部が、前記挿入丸めに対して正しく整置されることを確実にする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、結果Ｒを得るためにオペランドＡおよびオペランドＢに加算演算を実行するための装置および方法に関する。ただし、オペランドＡ、オペランドＢ、および結果Ｒは、それぞれ仮数部および指数を有する浮動小数点値である。
【背景技術】
【０００２】
浮動小数点数は、以下のように表現することができる。
±１．ｘ＊２ｙ
ただし式中で、
ｘは小数部、
１．ｘは仮数部（仮数としても知られる）、
ｙは指数である。
【０００３】
浮動小数点加算は、２つの形態、すなわち同符号加算（ＬＳＡ：ｌｉｋｅ−ｓｉｇｎｅｄ  ａｄｄｉｔｉｏｎ）または異符号加算（ＵＳＡ：ｕｎｌｉｋｅ−ｓｉｇｎｅｄ  ａｄｄｉｔｉｏｎ）を取ることができる。ＬＳＡ演算は、同符号の二つの浮動小数点オペランドが加算される場合、または異符号の２つの浮動小数点オペランドが減算される場合に実行される。同様に、ＵＳＡ演算は、異符号の２つの浮動小数点オペランドが加算される場合、または同符号の２つの浮動小数点オペランドが減算される場合である。本願において浮動小数点オペランドの加算および係るオペランドの仮数部の加算について言及するとき、それはまとめてＬＳＡ演算またはＵＳＡ演算について言及するものであると解釈されるべきであり、したがって、係る用語は加算処理および減算処理の両方を含むと理解されるであろう。
【０００４】
一般に、プロセッサは、異なるデータ処理演算を実行するために、いくつかのパイプラインユニットを有するであろう。係るパイプラインユニットの１つが、加算演算を実行するためにいくつかのパイプラインステージを備える加算器ユニットである。浮動小数点加算は、いくつかのステージ、すなわち（１）指数解析および差計算、（２）オペランド整置（ｏｐｅｒａｎｄ  ａｌｉｇｎｍｅｎｔ）、（３）加算（丸め挿入を含む場合がある）、および（４）正規化からなる。長年にわたって、加算器パイプラインにおける現状技術は、１つは近接パス（ｎｅａｒ  ｐａｔｈ）と称され他方は遠隔パス（ｆａｒ  ｐａｔｈ）と称される２つの別個のパスを加算処理の少なくとも部分に対して提供してきた。特に、このように近接／遠隔パスを分割することにより、非自明（ｎｏｎｔｒｉｖｉａｌ）な整置（ａｌｉｇｎｍｅｎｔ）および非自明な正規化が相互排他的であるという所見に基づいて、加算処理におけるクロックサイクルを節約することができる。
【０００５】
したがって、近接パスは、指数が等しいかまたは１だけ異なるオペランドに関与し、仮数部の先行ビットの相殺（ｃａｎｃｅｌｌａｔｉｏｎ）が生じる可能性を有する、ＵＳＡ演算に対して用いられる。係る差は、丸めを必要としないが、加算の後に正規化を必要とする。次に、遠隔パスは、すべての他のＵＳＡ演算およびすべてのＬＳＡ演算に対して用いられ、整置および丸めを実施するための回路を必要とするが、自明な（１ビット）正規化のみを必要とする。
【０００６】
このように分割された加算器パイプラインは、最初、Ｐ  Ｆａｒｍｗａｌｄによる博士論文「Ｏｎ  ｔｈｅ  Ｄｅｓｉｇｎ  ｏｆ  Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｄｉｇｉｔａｌ  Ａｒｉｔｈｍｅｔｉｃ  Ｕｎｉｔｓ」、Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｃａｌｉｆｏｒｎｉａ  Ｌｉｖｅｒｍｏｒｅ、１９８１年において発表され、それに続くいくつかの設計、例えば、Ａ  Ｎａｉｎｉらによる「１−ＧＨｚ  ＨＡＬ  ＳＰＡＲＣ６４  Ｄｕａｌ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｕｎｉｔ  ｗｉｔｈ  ＲＡＳ  Ｆｅａｔｕｒｅｓ」を題名とする論文、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  15ｔｈ  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ，  ２００１、および同一の譲受人の米国特許第７，４３７，４００号参照、において改良を重ねてきた。なお、これらの内容全体は、参照により本明細書に組み込まれる。
【０００７】
加算に関する演算の１つの一般的な形態が乗算累算演算（ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ  ｏｐｅｒａｔｉｏｎ）であり、この乗算累算演算は、Ａ＋Ｌ＊Ｍの形をとる。なお、式中、オペランドＬおよびオペランドＭの乗算結果は、加算のための第２オペランドＢを形成する。ＩＥＥＥ７５４−２００８規格の発表とともに、融合乗算累算（ＦＭＡ：ｆｕｓｅｄ  ｍｕｌｔｉｐｌｙ  ａｃｃｕｍｕｌａｔｅ）演算（本明細書においては、融合乗算加算演算（ｆｕｓｅｄ  ｍｕｌｔｉｐｌｙ  ａｄｄ  ｏｐｅｒａｔｉｏｎ）とも称される）が浮動小数点ユニットにとって必要なものとなった。なお、このＦＭＡ演算においては、丸められていない乗算結果がオペランドＡに加算され、次いで、丸めが加算の出力に対して実行される。専用のＦＭＡパイプラインユニットがこれまでに開発されてきたが、係る専用ユニットの提供は高コストである。一般に、係るＦＭＡユニットは、標準的な加算演算および標準的な乗算演算を実行するためにも用いられ、それにより、別個の加算器ユニットおよび別個の乗算器ユニットが不必要となる。しかしＦＭＡユニットが複雑であるために、ＦＭＡユニットは、標準的な加算演算において専用の加算器ユニットよりも一般に時間がかかり、また標準的な乗算演算の実行においても、別個の乗算器ユニットよりも一般に時間がかかることとなるであろう。演算の大部分は、実際にはＦＭＡ演算ではないが、標準的な加算および乗算に関与するため、浮動小数点ユニットの性能は顕著な影響を受ける可能性がある。
【０００８】
ＦＭＡ演算を実行するための他のメカニズムは、例えば、その内容全体が参照により本明細書に組み込まれる、同一の譲受人による同時係属中の米国特許出願第１２／５８５，６６８号のように、別個の乗算ユニットを用いてオペランドＬおよびオペランドＭの乗算を実行し、次いで、その乗算結果を丸めない状態で別個の加算器ユニットに転送し、オペランドＡに加算されるべき第２オペランドを形成することである。しかし、上述の近接／遠隔パスアーキテクチャを加算器ユニットに対して用いると、近接パスの演算において問題を生じる。特に、その問題は、オペランドの１つとして用いられる、丸められていない乗算結果が結果Ｒの長さの２倍となり、そのために近接パスにおいて相殺が存在しない場合でさえも丸めが必要となる可能性がある点である。上述のように、近接パスは一般に丸め回路を提供せず、加算の出力は、丸めの実行前に正規化される必要がある。その結果、丸めの実行を可能とするために、近接パスに別のパイプラインステージを加えることが必要となり、このことは、加算器ユニットの性能に顕著な影響を与えるものである。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
したがって、データ処理装置のための改良された浮動点加算器ユニットを提供することが望ましいことになる。
【課題を解決するための手段】
【００１０】
第１の態様によれば、本発明は、結果Ｒを得るためにオペランドＡおよびオペランドＢに加算演算を実行するための装置を提供する。なお、オペランドＡ、オペランドＢ、および結果Ｒは、それぞれ仮数部および指数を有する浮動小数点値であり、前記の装置は、オペランドＡおよびオペランドＢに異符号加算を行わせる場合に生成される出力において存在するであろう先行するゼロの個数の予測に基づいてシフト表示を生成するよう構成された予測回路と、仮数部を加算する前にオペランドＡおよびオペランドＢの両方の仮数部にシフト演算を実行するよう構成された結果前正規化回路であって、このシフト演算は、オペランドＡおよびオペランドＢに対する修正された仮数部を生成するために、シフト表示による決定に応じて、オペランドＡおよびオペランドＢの両方の仮数部のいくつかの最上位ビットを廃棄するよう作用する、結果前正規化回路と、オペランドＡおよびオペランドＢの指数を参照することにより、先行ビット相殺状態の存在を検出するよう構成されたオペランド解析回路と、前記の先行ビット相殺状態が存在する場合、結果Ｒの仮数部を生成するために、オペランドＡおよびオペランドＢに対する修正された仮数部の加算を実行するよう構成された加算回路とを備える。
【００１１】
本発明によれば、先行ゼロ予測器回路等の予測回路がシフト表示を生成するために用いられ、シフト表示は、次いで、シフトが予測回路により生成されたシフト表示に依存する範囲で、両方の入力オペランドの仮数部にシフトオペランドを実行することにより、その結果の仮数部を前正規化するために用いられる。先行ビット相殺状態が検出された場合、加算回路は、結果の仮数部を生成するために、結果前正規化回路により出力された修正された仮数部を用いて加算を実行するように準備される。係る手法は、別個の近接パスおよび遠隔パスを提供する種類の従来の先行技術に係る加算器回路よりも、かなり簡単で且つ小型の装置を提供する。
【００１２】
本発明に係る装置は、入力オペランドのうちの１つが以前の乗算器ステージの丸められていない乗算結果である場合の加算を実行することが可能である。それにより、融合乗算累算演算を簡単且つ効果的な方法で実行することが可能となる。しかし、融合乗算累算演算に対するサポートが必要とされない実施形態においてさえも、本発明の装置に係る加算器回路を用意することにより、顕著な利点を達成することができる点にも注意されたい。
【００１３】
１つの実施形態においては、オペランド解析回路は、オペランドＡおよびオペランドＢの指数が同一の値または１だけ異なる値を有する場合に、および異符号加算が前記のオペランドＡおよびオペランドＢに加算演算を実行するために用いられる場合に、先行ビット相殺状態の存在を検出する。一般的な先行技術に係る加算回路においては、係る先行ビット相殺状態は、一般的に、用いられる先行技術に係る加算回路の近接パスにおいて生じるものである。しかし、本発明の実施形態によれば、別個の近接パスは不必要であり、その代わりに、すべての他の加算演算に用いられことになる同一の加算回路が、先行ビット相殺状態の存在下でも用いられる。しかし、加算回路の動作の前に、前正規化回路により前正規化されている結果の仮数部を伴う。
【００１４】
１つの実施形態においては、予測回路は、異符号加算によりオペランドＡおよびオペランドＢのうちの小さい方のオペランドがオペランドＡおよびオペランドＢのうちの大きい方のオペランドから減算される場合に対して、シフト表示を算出する。
【００１５】
しかし、１つの実施形態においては、オペランドＡおよびオペランドＢのうちいずれが大きいかの判定は、予測回路が先行ゼロ値を算出し始める時点では得られず、予測回路は、オペランドＡがオペランドＢより大きいことを仮定する第１シフト表示候補と、オペランドＢがオペランドＡより大きいことを仮定する第２シフト表示候補とを生成するよう準備される。したがって、係る手法により、予測回路は、どちらのオペランドが大きいかを認識する前に、動作を開始することが可能となり、それにより、この手法を用いずに可能であった場合よりも、より高速に、先行ゼロの個数を判定することが可能となる。
【００１６】
１つの係る実施形態においては、この装置は、オペランドＡおよびオペランドＢのどちらが大きい方のオペランドであるかを判定するより大きいオペランドの判定回路と、より大きいオペランドの判定回路に応答して、オペランドＡが大きい方のオペランドである場合には第１シフト表示候補をシフト表示として選択し、オペランドＢが大きい方のオペランドである場合には第２シフト表示候補をシフト表示として選択するよう構成された選択回路とをさらに備える。したがって、係る実施形態においては、予測回路の動作をより大きいオペランドの判定回路の動作と並行して実行し、次いで、より大きいオペランドの判定回路からの出力に基づいて、２つのシフト表示候補の間で選択を行うことができることが理解されるであろう。
【００１７】
１つの実施形態においては、この装置は、オペランドＡの指数の最下位ビット（ＬＳＢ：ｌｅａｓｔ  ｓｉｇｎｉｆｉｃａｎｔ  ｂｉｔ）がオペランドＢの指数の最下位ビットと同一であるかどうかを示す比較結果を出力するよう構成された比較回路をさらに備える。比較結果が、これらの指数のＬＳＢが同一であることを示す場合、予測回路は、異符号加算によりオペランドＡおよびオペランドＢのうちの小さい方のオペランドがオペランドＡおよびオペランドＢのうちの大きい方のオペランドから引かれる場合に対するシフト表示を算出する。しかしながら、比較結果がこれらの指数のＬＳＢが同一でないことを示す場合、予測回路は、異符号加算によりオペランドＡおよびオペランドＢのうちの小さい方のオペランドの１ビット右シフトされたバージョンがオペランドＡおよびオペランドＢのうちの大きい方から引かれる場合に対するシフト表示を算出する。前述のように、これらのオペランドの指数が等しい場合に、またはこれらのオペランドの指数が１だけ異なる値を有する場合に、先行ビット相殺状態が生じる可能性がある。上述の実施形態により、指数が同一ではないことが比較結果により示されるとき、指数は１だけ異なると想定される。先行ビット相殺状態が実際に存在しないと判定される場合、結果前正規化回路の出力は加算回路により使用されず、したがって、予想回路の出力は効率的に無視されるため、この想定は妥当である。
【００１８】
１つの実施形態においては、加算回路は加算の実行時に、挿入丸め（ｉｎｊｅｃｔｉｏｎ  ｒｏｕｎｄｉｎｇ）を実行することにより丸め増分値を加算するよう構成され、加算回路の前に結果前正規化回路が動作することにより、確実に、オペランドＡおよびオペランドＢの修正された仮数部が挿入丸めに対して正しく整置される。これにより、計算時に加算回路の出力の後に追加的な丸め回路が不必要であるため、顕著な性能利点が提供される。これは、融合乗算累算演算がサポートされるべき場合に加算の実行後に丸めの実行を可能とするために、別のパイプラインステージを近接パスに加えることが必要とされるであろう先行技術に係る近接パスおよび遠隔パスを使用する配設に対して比較されるべきである。
【００１９】
１つの実施形態においては、加算回路は、オーバーフロー状態が存在しないことを仮定して第１丸め増分値を用いる加算を実行するよう構成された第１加算回路と、オーバーフロー状態が存在することを仮定して第２丸め増分値を用いる加算を実行するよう構成された第２加算回路とを備える。先行ゼロ訂正状態が存在する場合、加算回路は、オペランドＡおよびオペランドＢの修正された仮数部から第２加算回路により生成された結果Ｒの仮数部として出力するよう構成される。当業者に理解されるように、オペランドＡおよびオペランドＢに異符号加算を実行することにより生成される出力において存在する先行ゼロの個数を予測するために用いられる予測回路は、実際に、先行ゼロの予測される個数において最大で１ビットだけずれる可能性がある。一般に、これは、ずれの可能性を打ち消すための何らかの訂正回路の提供が必要とすることになる。しかし上述の実施形態においては、このことは、先行ゼロの予測個数が１だけずれると判定される場合、第２加算回路からの出力が結果の仮数部を形成するために用いられるという点において、２つの加算回路の存在により自動的に対処される。
【００２０】
先行ゼロ訂正状態を検出するための方法はいくつか存在するが、１つの実施形態においては、前記の加算回路がオペランドＡおよびオペランドＢに対する修正された仮数部を加算するとき、先行ゼロ訂正状態は、第１加算回路から桁上げ出力（ｃａｒｒｙ  ｏｕｔ）が生成される場合に検出される。
【００２１】
１つの実施形態においては、装置は、仮数部を加算する前に、オペランドＡおよびオペランドＢのうちの小さい方のオペランドの仮数部を、オペランドＡおよびオペランドＢのうちの大きい方のオペランドの仮数部と整置する整置動作を実行するよう構成された整置回路をさらに備え、加算回路は、前記の先行ビット相殺状態が存在しない場合、整置回路により整置されたオペランドＡおよびオペランドＢの仮数部の加算を実行するように構成される。したがって、先行ビット相殺状態が存在しない場合、結果前正規化回路の出力は無視され、それにかわって、加算回路は、大きい方のオペランドの仮数部と、小さい方のオペランドの整置された仮数部とを、整置回路から受け取る。
【００２２】
１つの実施形態においては、整置回路は、シフトするビットの個数がオペランドＡおよびオペランドＢの指数の差に依存する状態で、オペランドＡおよびオペランドＢのうちの小さい方のオペランドの仮数部に右シフト演算を実行することにより、前記の整置演算を実行する。
【００２３】
１つの実施形態においては、この装置は、一連のパイプラインステージとして構成され、結果前正規化回路は、加算回路が配置された後続のパイプラインステージの前のパイプラインステージに配置される。さらに、１つの実施形態においては、前記の予測回路は、結果前正規化回路が配置されたパイプラインステージの前の、先行するパイプラインステージに配置される。
【００２４】
１つの実施形態においては、この装置は、非正規化状態の検出に応答して、加算回路の入力の前に、オペランドＡおよびオペランドＢに対する修正された仮数部の１ビット訂正右シフトを実行するシフト訂正回路をさらに備える。次いで、これにより、非正規化状態が、正常状態のオペランドと略同様の方法で取り扱うことが可能となる。
【００２５】
非正規化状態を検出する方法はいくつか存在するが、１つの実施形態においては、非正規化状態は、結果Ｒの指数が予め定められた値となる場合に検出される。１つの例示的な実装においては、この予め定められた値は、すべてがゼロからなる指数値である。倍精度数に対して、これはｅ−１０２２の指数を指定し、係る例においては、仮数部は、０．ｘｘｘの形となる。
【００２６】
この装置への入力オペランドのうちの１つが、２つ浮動小数点オペランドに実行された乗算演算の結果であり、丸められていない入力としてこの装置に提供される場合、最終的な合計は、丸められていない乗算結果が不正確な指数を有する（すなわち、結果が丸められた後に指定されたよりも１だけ高くなる）可能性があるために、実際に結果４．０を達成することができる。次いで、乗算結果に近接する数がＵＳＡ演算により乗算結果から引かれる場合、乗算結果の指数が、加算回路のデフォルト出力に関連する結果の指数より２だけ高くなる可能性がある。係るシナリオは本明細書において二重オーバーフロー状態と称される。１つの実施形態においては、この装置は、二重オーバーフロー状態の検出に応答して、加算回路の出力に関わりなく、結果Ｒの仮数部のすべての小数部ビットを論理ゼロ値として出力する結果仮数部出力回路をさらに備える。
【００２７】
加算回路が、オーバーフロー状態が存在しないことを仮定して第１丸め増分値を用いて加算を実行するための第１加算回路と、オーバーフロー状態が存在することを仮定して第２丸め増分値を用いて加算を実行するための第２加算回路とを備える、１つの特定の実施形態においては、二重オーバーフロー状態は、異符号加算演算を実行するとき桁上げ出力が第２加算回路から生じる場合に検出される。次いで、二重オーバーフロー状態が存在する場合、結果の指数は、第１加算回路からの出力に関連する指数よりも２だけ大きく設定される。
【００２８】
予測回路は、様々な形を取り得るが、１つの実施形態においては、オペランドＡおよびオペランドＢに異符号加算を行うことにより生成される出力において存在するであろう先行ゼロの個数を示す先行ゼロ値を、シフト表示として算出するよう構成された先行ゼロ予測回路を備える。
【００２９】
第２の態様によれば、本発明は、データ処理装置内で結果Ｒを得るためにオペランドＡおよびオペランドＢに加算演算を実行するための方法を提供する。なお、オペランドＡ、オペランドＢ、および結果Ｒは、それぞれ仮数部および指数を有する浮動小数点値であり、前記の方法は、オペランドＡおよびオペランドＢに異符号加算を実行する場合に生成される出力において存在するであろう先行ゼロの個数の予測に基づいてシフト表示を生成することと、結果前正規化回路を用いて仮数部の加算の前にオペランドＡおよびオペランドＢの両方の仮数部にシフト演算を実行することであって、このシフト演算は、オペランドＡおよびオペランドＢに対する修正された仮数部を生成するために、シフト表示による決定に応じて、オペランドＡおよびオペランドＢの両方の仮数部の最上位ビットのうちのいくつかを廃棄するように作用する、ことと、オペランドＡおよびオペランドＢの指数を参照することにより、先行ビット相殺状態の存在を検出することと、加算回路を、前記の先行ビット相殺状態の存在に応答して、結果Ｒの仮数部を生成するために、オペランドＡおよびオペランドＢに対する修正された仮数部の加算を実行するよう準備することと、を含む。
【００３０】
第３の態様によれば、本発明は、結果Ｒを得るためにオペランドＡおよびオペランドＢに加算演算を実行するための装置を提供する。なお、オペランドＡ、オペランドＢ、および結果Ｒは、それぞれ仮数部および指数を有する浮動小数点値であり、前記の装置は、オペランドＡおよびオペランドＢに異符号加算を実行する場合に生成される出力において存在するであろう先行ゼロの個数の予測に基づいてシフト表示を生成するよう構成された予測手段と、仮数部を加算する前にオペランドＡおよびオペランドＢの両方の仮数部にシフト演算を実行するよう構成された結果前正規化手段であって、このシフト演算は、オペランドＡおよびオペランドＢに対する修正された仮数部を生成するために、シフト表示による決定に応じて、オペランドＡおよびオペランドＢの両方の仮数部の最上位ビットのうちのいくつかを廃棄するよう作用する、結果前正規化手段と、オペランドＡおよびオペランドＢの指数を参照することにより、先行ビット相殺状態の存在を検出するよう構成されたオペランド解析手段と、前記の先行ビット相殺状態の存在中に、結果Ｒの仮数部を生成するために、オペランドＡおよびオペランドＢに対する修正された仮数部の加算を実行するための加算手段とを備える。
【００３１】
本発明は、添付の図面に図示される本発明の実施形態を参照して、単に例示としてのみ、さらに説明されるであろう。
【図面の簡単な説明】
【００３２】
【図１】１つの実施形態に係る融合乗算加算処理ユニットの概略図である。
【図２】１つの実施形態に係る図１の加算回路の仮数部処理パス内に提供される構成要素を示す図である。
【図３Ａ】１つの実施形態に係る図２の構成要素に入力される様々な制御信号を生成するために用いることができる回路の概略図である。
【図３Ｂ】１つの実施形態に係る図２の構成要素に入力される様々な制御信号を生成するために用いることができる回路の概略図である。
【図３Ｃ】１つの実施形態に係る図２の構成要素に入力される様々な制御信号を生成するために用いることができる回路の概略図である。
【図４】図２の加算器ａｄｄ０からの出力に関連する結果の指数が１つの実施形態にしたがって算出される方法を示すフローチャートである。
【図５Ａ】１つの実施形態に係る図２の回路の動作を示すフローチャートである。
【図５Ｂ】１つの実施形態に係る図２の回路の動作を示すフローチャートである。
【図６】１つの実施形態に係る図５ＡのＬＺＡ計算の実行に必要なステップを示すフローチャートである。
【発明を実施するための形態】
【００３３】
図１は、浮動小数点処理ユニットの一部として用いられ得る融合乗算加算処理ユニット１を概略的に示す。融合乗算加算ユニットの様々な要素について以下で説明するが、浮動小数点乗算加算ユニット１は、明確さのために図１に図示しない追加的な特徴および要素を含むことになることを理解されたい、。融合乗算加算ユニット１は、融合乗算加算ユニット１は５３ビットの仮数部を有する倍精度オペランドを処理するものとして示されているが、融合乗算加算ユニット１は、２４ビットの仮数部を有する単精度オペランド（またはＮビットの仮数部を有する別の浮動小数点形式を用いて表される浮動小数点数）を処理することもできる可能性がある。
【００３４】
融合乗算加算ユニット１は、乗算回路４および加算回路８を備える。乗算回路４は、５３ビットの仮数部を有する２つのオペランドＬおよびＭを受け取る。乗算回路は乗算命令に応答して、オペランドＬおよびオペランドＭを乗算し、正規化され且つ丸められた、５３ビットの仮数部を有する積Ｌ＊Ｍをライン１０上に出力する。乗算回路４は融合乗算加算命令にも応答して、オペランドＬおよびオペランドＭを乗算し、丸められていない１０６ビットの仮数部を有する積Ｌ＊Ｍを生成する。丸められていない積Ｌ＊Ｍは、バス１２を介して加算回路８に転送される。
【００３５】
加算回路８はバス１６を介してオペランドＡを受け取る。オペランドＡは５３ビットの仮数部を有する。加算回路は、５３ビットの仮数部を有するオペランドＢおよび１０６ビットの仮数部を有する丸められていない積Ｌ＊Ｍのうちの一方または両方も受け取る。加算回路８は、融合乗算加算命令に応答して、バス１６を介して受け取られたオペランドＡを、バス１２を介して受け取られた丸められていない積Ｌ＊Ｍに加算する。加算回路は、加算命令にも応答して、オペランドＡをオペランドＢに加算する。次に、どの命令が実行されているかに関わらず、丸められた結果値Ａ＋Ｌ＊ＭまたはＡ＋Ｂが加算回路８により出力される。加算回路８の出力は、記憶のために登録ファイル（図示せず）に送ることができ、または、マルチプレクサ２０に戻されるように転送することができ、出力値は後続の命令のためのオペランドＡとして用いられるよう選択することができる。
【００３６】
乗算回路４および加算回路８の両方は、（乗算回路４の丸め回路は、乗算回路４が融合乗算加算命令を実行するために用いられるときには用いられないが）浮動小数点値を丸めるための回路を備える。浮動小数点値を丸めることは、短縮された仮数部を用いて表すことができる値を生成するために、仮数部のビット数を減少させ、短縮された仮数部に丸めの値を加えることにより、実行される。乗算ステージ４の間に丸めを実行する方法は、米国特許出願第２００６／０１１７０８０（Ａ１）号において説明され、その内容はその全体を参照により本明細書に組み込まれる。加算ステージ８の間に丸めを実行する方法は、米国特許出願第２００６／０１３６５４３（Ａ１）号に説明され、その内容はその全体が参照により本明細書に組み込まれる。これらの出願は、丸めを乗算演算または加算演算に組み込むことにより、浮動小数点値の丸めを高速化するための技法を説明する。したがって、本出願に説明する丸め回路は、乗算演算または加算演算を実行する乗算回路４または加算回路８の部分から必ずしも分離する必要はなく、丸めを実行するよう、または実行しないよう選択的に構成されてもよい同一回路の少なくとも一部を備えることができる可能性がある。
【００３７】
上述のように、融合乗算加算ユニット１は、別個の乗算ステージおよび加算ステージにおいて融合乗算加算命令を実行する。このことは、単一の融合乗算加算命令を実行するにあたってより多くの処理サイクルが必要とされることを意味するが、一連の融合乗算加算命令、加算命令、または乗算命令を実行するほうが、異なる命令の処理をインターリーブすることができるため、より高速である。単一の乗算命令または加算命令の処理も、これらの処理が、乗算回路および加算回路の両方ではなく、乗算回路または加算回路のうちの１つのみを用いて実行することができるため、先行技術に係る融合ＭＡＣユニットにおける処理よりも高速である。融合乗算加算ユニット１は、処理される用途に応じて一連の命令の処理を３パーセントから２３パーセント高速化することができるというシミュレーション結果が示されている。融合乗算加算ユニット１は、ａｘ＋ｂｙ＋ｃｚ＋ｄｗの形のドット積を計算することに特に効果的である。なぜなら、ドット積の計算は一連の融合乗算加算命令を要求するからである。
【００３８】
図１の形の回路は、同一の譲受人による同時継続中の米国特許出願第１２／５８５，６６８号において説明されており、その全内容は参照により本明細書に組み込まれる。乗算器回路４は、融合多重加算命令の実行時に加算器８に入力されるための丸められていない乗算結果を出力することができるかぎり、様々な形を取ることができる。適切な乗算器回路の１つの例が同一の譲受人による同時継続中の米国特許出願第１２／５８８，９６２号において説明されており、その全内容は参照により本明細書に組み込まれる。しかし係る乗算器を融合乗算加算演算の一部として用いる場合、丸め挿入は、乗算結果を加算器に転送する前に、実行されないことになる。
【００３９】
加算回路８の構成に関しては、別個の近接パスおよび遠隔パスを用い従来の構造を使用することにより、融合ＭＡＣ命令実行時に性能上の問題が生じる可能性がある。特に、オペランドの１つとして用いられる丸められていない乗算結果は結果Ｒの長さの２倍となり、したがって近接パスにおける相殺が存在しない場合でさえも丸めが必要となり得る。しかし、近接パスは一般に丸め回路を提供せず、加算の出力は、丸めの実行前に正規化される必要がある。その結果、丸めの実行を可能とするために、近接パスに他のパイプラインステージを加えることが必要となり、このことは、加算器ユニットの性能に顕著な影響を与えることとなるであろう。
【００４０】
図２は、上記の問題に対処するために、新規の加算回路８の仮数部処理パス内に提供される構成要素を示す図である。
【００４１】
実行ステージＥ１に示すように、例えば登録ファイル、加算器８からのオペランド転送、乗算器４からのオペランド転送、等の、オペランドＡおよびオペランドＢ（ここではｏｐａおよびｏｐｂと示される）のためのいくつかのソースが存在し、これらの様々なソースは図２においてボックス１００およびボックス１１０により概略的に示される。図２に示す実施形態においては、融合ＭＡＣ演算が実行される場合、乗算器からの丸められていない乗算結果Ｌ＊Ｍはｏｐｂソースとして図２の加算器に提供されると考えられる。図２に示す加算器ユニットの外部にある制御回路は、適切な制御信号をマルチプレクサｏｐａ＿ｍｕｘ１０５およびマルチプレクサｏｐｂ＿ｍｕｘ１１５に送信することにより、どちらの入力を選択するかを特定する。
【００４２】
次のマルチプレクサ回路１２０および１２５は、次いで、オペランドの種類（単精度、倍精度、融合乗算出力）に応じて、利用可能なビットから選択する。単純化のために、指数回路は、大部分の計算が仮数部に関するものである（指数は、ほとんどの場合、仮数部に何が起こるかを制御するために用いられる）ため、図２において図示されない。マルチプレクサ１２０および１２５からの出力は、パイプラインステージＥ１の終端におけるフリップフロップ１３０および１３５に記憶される。
【００４３】
パイプラインステージＥ２において、フリップフロップ１３０および１３５に記憶された小数部値の両方が２つのマルチプレクサ１６０および１６５に提供され、これら両方のマルチプレクサは、ｏｐａが大きい方のオペランドであるかどうかを特定するために指数パスにおいて判定された「ａ＿ｌａｒｇｅｒ」信号により制御される。次いでマルチプレクサ１６０は大きい方のオペランドに関連する小数部値を選択し、マルチプレクサ１６５は小さい方のオペランドに関連する小数部値を選択し、両方の小数部値は１０７ビットに拡張され、パイプラインステージＥ２の終端における関連付けられたフリップフロップ１７５および１８５に記憶される。特に、マルチプレクサ１６０および１６５は、先行ビットを加えることにより小数部を仮数部に変換する論理を含む。このように、正規化オペランドに対しては論理１値が加えられ、非正規化オペランドに対しては論理ゼロ値が加えられる。なお、非正規化オペランドは、オペランドが予め定められた指数値（１つの実装においては、この予め定められた指数値はすべてゼロの指数値である）を有することにより、検出される。次いでｏｐａの仮数部にゼロを埋めて、ｏｐｂの仮数部と一致するよう、１０６ビットにする（最下位ビットとして一連の論理ゼロ値を加える）ことによっても、さらなる追加ビットが両方の仮数部に加えられる。その結果、起こりうる１ビット右シフトが存在する場合にすべての情報が捉えられることが可能となる。なお、１ビット右シフトは、後述する理由のために生じる場合がある（論理的に、１ビット右シフトは仮数部に変換された後に実行される）。
【００４４】
しかし、どのオペランドがより大きいかについての判定は、パイプラインステージＥ２の後半においてのみ得られる。その情報が得られる以前において、予測回路（この場合、先行ゼロ検出回路）は、オペランドｏｐａおよびオペランドｏｐｂに異符号加算を実行することにより生成される出力に存在するであろう先行ゼロの個数の予測に基づいて、シフト表示を生成するために用いられる。このシフト表示は、先行ビット相殺状態が存在すると判定された場合、後に用いられるであろう。なお、係る先行ビット相殺状態は、ｏｐａおよびｏｐｂの指数が同一の値または１だけ異なる値を有する場合、および異符号加算がｏｐａおよびｏｐｂに加算演算を実行するために用いられる場合に、生じるものである。
【００４５】
この点に留意して、制御信号シフト１は、２つの入力指数の下位ビットが異なる（すなわちシフト１＝ 指数ａ［０］  ＸＯＲ  指数ｂ［０］）場合に、設定される。指数の差が奇数であることがシフト１により示される場合、その後先行ビット相殺状態が存在すると判定されるとき指数が１だけ異なるであろうと推定される。したがって、シフト１制御信号が設定されるとき、小さい方の小数部は、ＬＺＡ計算実行前に、１ビットだけ右シフトされる必要がある。
【００４６】
どちらのオペランドがより大きいかはまだ認識されていないため、２つのＬＺＡ回路１５０および１５５が提供され、第１のＬＺＡ回路は、小数部ａから（必要に応じて１ビットシフトされた）小数部ｂを減算し、第２のＬＺＡ回路は、小数部ｂから（必要に応じて１ビットシフとされた）小数部ａを減算する。これが実行される間に、オペランドＡおよびオペランドＢのどちらが大きいか、および２つのオペランドの間の指数の正確な差が判定される（この回路は指数の処理を行うものであり、図２には図示されないが、図３Ｃを参照して後に説明されるように、２つの減算を行う）。
【００４７】
次に、ステージＥ２の終端におけるマルチプレクサ１７０は、大きい方のオペランドから（必要に応じて１ビットシフトされた）小さい方のオペランドを減算した正確なＬＺＡ値を選択し、その値をフリップフロップ１８０に記憶する。前述のように、マルチプレクサ１６０および１６５は、大きい方のオペランドの仮数部および小さい方のオペランドの仮数部をそれぞれ選択する。マルチプレクサ１６５は、４：１のマルチプレクサであり、小さい方のオペランドの仮数部の１ビット右シフトされたバージョンを選択するよう設定されたシフト１信号にも応答する点にも注意すべきである。
【００４８】
先行ゼロ予測器回路は、当業者に理解されるように、様々な方法で構成することができる。例えば、Ｍ  Ｓｃｈｍｏｏｋｌｅｒらによる文献「Ｌｅａｄｉｎｇ  Ｚｅｒｏ  Ａｎｔｉｃｉｐａｔｉｏｎ  ａｎｄ  Ｄｅｔｅｃｔｉｏｎ  −  ａ  Ｃｏｍｐａｒｉｓｏｎ  ｏｆ  Ｍｅｔｈｏｄｓ」、１５ｔｈ  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｉｔｈｍｅｔｉｃ，  ｐａｇｅｓ  ７−１２，  Ｊｕｎｅ  ２００１、および同一の譲受人による米国特許第７，６６８，８９２号も参照されたい。なお、これらの全内容は参照により本明細書に組み込まれる。
【００４９】
パイプラインステージＥ３の開始までに、演算が同符号加算（ＬＳＡ）であるかまたは異符号加算（ＵＳＡ）であるかが認識される。指数の差が２以上であるすべてのＬＳＡおよびすべてのＵＳＡは、（指数における差が奇数である場合、ｏｐｓの仮数部はすでにマルチプレクサ１６５を介して１ビットシフトを経験していることを考慮して）右シフト回路２００を用いて指数の差だけ右シフトされたｏｐｓの仮数部を有する。指数の差がゼロまたは１であるＵＳＡ（すなわち、これらの加算は前述の先行ビット相殺状態を生じさせる）は、左シフト回路１９０および１９５を用いて、フリップフロップ１８０に記憶されたＬＺＡ値だけ左シフトされたｏｐｌおよびｏｐｓの両方を有する。しかし、適用される左シフトの量は、大きい方のオペランドの指数と非正規化値に関連する指数（例えば、すべてゼロの指数値）との間の範囲に制限される。
【００５０】
非正規化指数値ゼロおよび正規化指数値１の両方が同一の実際の指数に対応するため、結果の指数がゼロである場合、１ビット右シフト訂正が必要とされる。このことは、４：１のマルチプレクサ２０５および２１０において処理される。特に、マルチプレクサ２０５は、先行ビット相殺状態の存在に応じて、ｏｐｌの左シフトされた仮数部とｏｐｌのシフトされていない仮数部との間で選択し、非正規化訂正が必要である場合は、１ビット訂正されたバージョンを選択する。同様に、マルチプレクサ２１０は、先行ビット相殺状態の存在に応じて、ｏｐｓの左シフトされた仮数部とｏｐｓの右シフトされた仮数部との間で選択し、非正規化訂正が必要である場合は、１ビット訂正されたバージョンを選択する。
【００５１】
ステージＥ３の終端において、２つの３：２加算器２１５および２３０は、マルチプレクサ２０５および２１０からの２つの出力を、丸め定数が挿入され、加算器２３０はオーバーフローが生じないことを仮定し、加算器２１５はオーバーフローが生じることを仮定する状態で、組み合わせるために用いられる。丸め定数に関するさらなる考察が、後に提供されるであろう。両方の加算器は、桁上げ保存形式で結果を出力し、桁上げ値および保存値は、ステージＥ３の終端において、フリップフロップ２２０および２２５内、およびフリップフロップ２３５および２４０内に、それぞれ記憶される。これらのフリップフロップは、３：２加算器から生じる場合がある任意の桁上げ出力ビットを捉えるために、サイズが１０８ビットである。
【００５２】
ステージＥ４において、桁上げ保存形式は、加算され、次いで、加算器およびマルチプレクサ２５０および２５５ならびに２６０および２６５を用いて、単精度数または倍精度数として再構築される。最終結果の仮数部が次いでマルチプレクサ２７０を介して選択され、その仮数部の小数部部分が次いで結果の符号および指数とともにフリップフロップ２７５内に記憶される。フリップフロップ２７５は、１ビットの符号値、５２ビットの小数部値、および１１ビットの指数値を収容するために、サイズが６４ビットである。最終結果の仮数部がマルチプレクサ２７０により選択される方法については次の４つの可能性がある。
【００５３】
可能性１−特殊結果が選択される（これにより加算器出力が上書きされる）。特殊結果は、図２に図示しない指数論理にほぼ基づいて選択され、特殊結果は、一般に、結果の指数がすべて１である場合に検出される。特殊結果はＮａＮ（非数）および無限大等であり、特殊結果を処理する回路については当業者がよく理解するところである。
【００５４】
可能性２−非オーバーフロー加算器（ａｄｄ０）２６０のビット１０７が設定される場合、オーバーフロー加算器（ａｄｄ１）２５０の出力が選択される。しかし、１つの特定の実施形態においては、このルールに１つの例外が存在する。すなわち、この出力は、ゼロの計算結果指数を有するＵＳＡ演算に対しては選択されない。なぜなら、これはオーバーフローすることができない別個の非正規化ケースであるためである。この例外的ケースにおいては、加算器２６０の出力が選択される。
【００５５】
可能性３−（１）ａｄｄ１（ビット１０８）の桁上げ出力が設定される場合、または（２）ａｄｄ０の出力のビット１０７が設定され、ＵＳＡ演算およびゼロの計算結果指数を有する融合された入力が存在する場合（この後者のケースは非正規化二重オーバーフロー状態である）、（結果の仮数部の全小数部ビットをゼロに設定し、次いで、ａｄｄ１出力に対して計算された値よりも１だけ高い指数を選択する）オーバーフロー２結果が選択される。
【００５６】
可能性４−上述の可能性１〜３に説明したいずれの状況も存在しない場合、ａｄｄ０の出力が結果の仮数部を形成するために用いられる。
【００５７】
上述した図２の回路を見ると、回路は別個の近接パスおよび遠隔パスを有さないことがわかるであろう。従来の近接／遠隔パス加算器においては、ＬＺＡ演算は加算と同時に実行され、ＬＺＡ値は合計を正規化するために用いられる。しかし、図２の上記の説明から、ＬＺＡ演算がはるかに早期に、すなわちステージＥ４における加算の２サイクル前であるステージＥ２において、実行されることがわかるであろう。次いで、計算されたＬＺＡ値は、ステージＥ３において２つのオペランドの仮数部を左シフトし、その結果としてこれらの仮数部のいくつかの先行ビットを廃棄することにより、加算結果を前正規化するために用いられる。ＵＳＡ演算が存在する場合においてはこれらの先行ビットは加算されるとき（すなわち、すべてゼロになるとき）相殺されるため、この左シフト演算により、情報が失われることはまったくない。
【００５８】
さらに、このようにして合計を前正規化することにより、先行ビット相殺状態が存在すると判定され、したがって２つの左シフト回路１９０および１９５からの出力が加算に用いられる場合、シフトされた仮数部が丸め挿入に対して正しく整置され、そのようにして、ステージＥ４における２つの加算器２５０および２６０が、確実に、正しく丸められた結果を生成する。加えて、Ｃ  ＨｉｎｄｓおよびＤ  Ｌｕｔｚによる文献「Ａ  Ｓｍａｌｌ  ａｎｄ  Ｆａｓｔ  Ｌｅａｄｉｎｇ  Ｏｎｅ  Ｐｒｅｄｉｃｔｏｒ  Ｃｏｒｒｅｃｔｏｒ  Ｃｉｒｃｕｉｔ」、Ａｓｉｌｏｍａｒ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｓｉｇｎａｌｓ，  Ｓｙｓｔｅｍｓ，  ａｎｄ  Ｃｏｍｐｕｔｅｒｓ、１１８１〜１１８５ページ、２００５年１０月において説明されたＬＺＡ訂正問題が、ステージＥ４において２つの加算器２５０および２６０を有することにより、自動的に処理される。特に、ＬＺＡ回路の出力は、先行ゼロの個数の予測において１ビットだけずれる可能性があるが、係るエラーが存在する場合は、オーバーフローが加算器ａｄｄ０  ２６０から生じることになり、その結果、加算器ａｄｄ１  ２５０からの出力が選択される。このようにして、先行ゼロ予測のエラーが自動的に訂正されることとなる。
【００５９】
図２の加算器において、真の近接パスまたは遠隔パスは存在しない。遠隔パスを使用したであろう演算はＬＺＡ結果を無視し、小さい方のオペランドを、２つのオペランドの指数の差から計算された量だけ右シフトする。近接パスを使用したであろう演算は、ステージＥ３においてＬＺＡ結果を用いて、オペランドを左シフトする。両方の場合において、ステージＥ３の終端で３：２加算器を用いて丸め定数が加えられる。
【００６０】
融合された入力の特性により、最終合計は実際に結果４．０（マルチプレクサ２７０への制御におけるオーバーフロー２を示す）を達成することができる。これは、乗算結果が丸められず、したがって不正確な指数を有する場合があるという事実によるものである。例えば、乗算器４からの乗算結果が５4個以上の先行する１からなる場合を考える。丸められている場合には乗算結果はより高い指数を持つであろうが、しかし乗算結果は丸められていない。これに近接する数が加算器８内でＵＳＡ演算によりその値から減算される場合、指数は次の３つの値、すなわち、ａｄｄ０加算器の出力に関連する結果の指数に等しい値、ａｄｄ０加算器の出力に関連する結果の指数よりも１だけ大きい値、またはａｄｄ０加算器の出力に関連する結果の指数よりも２だけ大きい値、のいずれかを取ることができる。図４を参照して後に説明するように、加算器８がＵＳＡを処理する方法は、ａｄｄ０加算器からの出力の指数を大きい方のオペランドの指数よりも１だけ小さく設定すること（右シフト回路２００の出力が用いられると仮定して）、またはａｄｄ０加算器からの出力の指数を、大きい方のオペランドの指数からＬＺＡ値を引いた値と等しくなるよう設定し（左シフト回路１９０および１９５の出力が使われると仮定して）、その後、合計が、２番目に大きい指数にオーバーフローできるようにすることである。丸められていない（融合された）入力を用いると、２番目に高い指数へと再びオーバーフローすることが実際に可能である。したがって、前述のように（可能性３）オーバーフロー２状態を処理する必要性が生じる。
【００６１】
非正規化数の処理に関しては、これは、ステージＥ２内で適切な仮数部ビット（非正規化数に対しては、これは０であり、正規化数に対しては、これは１であろう）をｏｐｌおよびｏｐｓに挿入し、その後ステージＥ３において４：１マルチプレクサ２０５および２１０を用いてシフト量を１だけ調節することが単に必要となる。非正規化数は、その後図２を参照して説明された正常な流れを用いることにより、最終的な加算においてオーバーフロー２状態に対処する必要なしに、処理される（係る場合におけるＵＳＡ演算の結果は非化、最小の指数を有する正規化、または最小値に１を加えた指数を有する正規化となる可能性がある）。
【００６２】
図３Ａ〜図３Ｃは、１つの実施形態に係る、図２の構成要素に入力される様々な制御信号を生成するために提供することができる回路を示す。図３Ａに示すように、好適にはＸＯＲゲートの形を取り得る比較回路３００は、オペランドＡの指数およびオペランドＢの指数の両方の最下位ビットを受け取り、図２のパイプラインステージＥ２に入力される「シフト１」信号を、比較回路３００の出力において生成する。したがって、シフト１信号は、これらの指数の最下位ビットが異なる場合は、論理１値に設定され、それ以外の場合は、論理ゼロ値にクリアされることが理解されるであろう。
【００６３】
図３Ｂは、パイプラインステージＥ３の間に、マルチプレクサ２０５および２１０に入力されるＬ（左シフト）制御信号またはＲ（右シフト）制御信号を生成するために用いられる、オペランド解析回路３１０の動作を示す。特に、指数差回路３１５はオペランドＡおよびオペランドＢの指数を受け取り、これらの指数の差を判定する。ＵＳＡ検出器３２０は、両方の入力オペランドの符号と、入力命令に指定された加算演算または減算演算とから、ＵＳＡ演算が実行されるかどうかをも判定する。次いでＬ／Ｒ生成器３２５が、指数差回路３１５およびＵＳＡ検出器３２０の両方から出力を受け取る。オペランドＡおよびオペランドＢの指数が同一の値または１だけ異なる値を有し、且つ異符号加算が実行される場合、これは、先行ビット相殺状態が存在することを示し、したがってＬ出力が設定される。逆に、先行ビット相殺状態が存在しない場合、Ｒ出力が設定される。１つの値がＬを示し、他方の値がＲを示す場合、実際は、単一ビット出力信号が用いられる可能性がある。
【００６４】
図３Ｃは、図２のパイプラインステージＥ２およびＥ３において用いられる「ｅｘｐ  ｄｉｆｆ」信号および「ａ＿ｌａｒｇｅｒ」信号を生成するために用いられるより大きいオペランドの判定回路３３０の動作を概略的に示す。より大きい指数の検出器３３５は、オペランドＡおよびオペランドＢの指数から、いずれが大きい方の指数であるかを判定し、次いで、回路３４０は、ｅｘｐ  ｄｉｆｆ信号を生成するために、大きい方の指数から小さい方の指数を減算する。次いでより大きい小数部の検出器３４５がオペランドＡおよびオペランドＢの両方の小数部値を受け取り、いずれの小数部が小さいかを判定する。より大きいオペランドの検出器３５０は、より大きい指数の検出器３３５およびより大きい小数部の検出器３４５から出力を受け取り、この入力に基づいて、いずれのオペランドがより大きいかを判定する。一般に、より大きい指数の検出器３３５からの出力は、いずれが大きい方のオペランドであるかを判定するために用いられるが、指数が等しい場合は、より大きい小数部の検出器からの出力が、大きい方のオペランドを判定するために用いられる。次いでより大きいオペランドの検出器３５０は、ａ＿ｌａｒｇｅｒ信号を生成する。なお、このａ＿ｌａｒｇｅｒ信号は、オペランドＡがより大きい場合には論理１値に設定され、オペランドＢがより大きい場合には論理ゼロ値にクリアされる。
【００６５】
図４は、図２の加算器ａｄｄ  ０  ２６０から出力される結果に関連する指数を判定するために、指数処理パス（図２において図示せず）において実行されるステップを示すフローチャートである。ステップ３６０において、Ｌ値がオペランド解析回路３１０の出力において設定されているかどうかが判定される。Ｌ値が設定されている場合、次いでステップ３６５において、加算器２６０からの出力に関連する結果の指数が、大きい方のオペランドの指数から、フリップフロップ１８０に記憶されたＬＺＡ値を減算した値と等しくなるよう設定される。しかし、大きい方の指数をどの程度まで減少させるかについては制限があり、１つの特定の実施形態においては、非正規化値に関連するであろう値より低くなるよう減少させることは認められない。なお、その非正規化値に関連するであろう値は、１つの実施形態においては、すべてゼロの指数値である。
【００６６】
ステップ３６０において、Ｌ値が設定されていないと判定された場合、プロセスはステップ３７０へと進み、ステップ３７０において、異符号加算演算が実行されるかどうかが判定される。異符号加算演算が実行されないと判定された場合、プロセスはステップ３７５へと進み、ステップ３７５において、加算器２６０からの出力に関連する結果の指数が、大きい方のオペランドの指数と等しくなるよう設定される。しかし、ステップ３７０において異符号加算演算が実行されると判定された場合、プロセスはステップ３８０へと進み、ステップ３８０において、加算器２６０からの出力に関連する結果の指数が、大きい方のオペランドの指数から１を減算した値に等しくなるよう設定される。
【００６７】
加算器２６０からの出力に関連する結果の指数を判定することにより、加算器２５０からの出力に関連する結果の指数が、単に、計算された指数より１だけ大きく設定されていることが理解できるであろう。
【００６８】
加算器２６０からの出力に関連する結果の指数がすべてゼロである場合、これは、非正規化状態の存在を示し、その結果、図２のパイプラインのステージＥ３において、非正規化信号を設定させ、マルチプレクサ２０５および２１０への入力として提供される。同様に、加算器２６０からの出力に関連する結果の指数がすべて１である場合、これは、特殊な場合の存在を示し、図２のパイプラインのステージＥ４の間、マルチプレクサ２７０に入力される特殊信号を設定するために用いられる。
【００６９】
図５Ａおよび図５Ｂは、１つの実施形態に係る図２の回路の動作を示すフローチャートである。ステップ４００において、入力オペランドＡおよび入力オペランドＢが受け取られ、オペランドＢはいくつかの実施形態においてはオペランドＬおよびオペランドＭの丸められていない積算結果である。その後、先行ゼロ予測（ＬＺＡ：ｌｅａｄｉｎｇ  ｚｅｒｏ  ａｎｔｉｃｉｐａｔｉｏｎ）計算がステップ４０５で実行される。なお、このプロセスは後に図６を参照してさらに詳細に説明される。
【００７０】
その後、ステップ４１０およびステップ４１５が並行して実行され、ステップ４１０において、オペランドＡおよびオペランドＢの仮数部が、ステップ４０５で生成されたＬＺＡ結果により決定される量だけ左シフトされる。ステップ４１５において、小さい方のオペランドの仮数部は、指数の差に応じた量だけ右シフトされる。
【００７１】
その後、プロセスはステップ４２０に進み、ステップ４２０において先行ビット相殺状態が存在するかどうかが判定される。先行ビット相殺状態が存在する場合、ステップ４１０で生成された左シフトされた仮数部がステップ４２５において選択される。逆に、先行ビット相殺状態が存在しない場合、大きい方のオペランドの仮数部および小さい方のオペランドの右シフトされた仮数部がステップ４３０において選択される。
【００７２】
ステップ４２５またはステップ４３０のいずれかの後、プロセスはステップ４３５に進み、ステップ４３５において、非正規化状態が存在するかどうかが判定される。一般に、非正規化状態は、加算器２６０に関連する結果の指数がすべてゼロである場合に検出される。非正規化状態が存在すると判定された場合、プロセスはステップ４４０に進み、ステップ４４０において、選択された仮数部の１ビット訂正された右シフトが実行される。
【００７３】
ステップ４４０の後に、またはステップ４３５の直接後に、非正規化状態が存在しない場合、２つの加算演算がステップ４４５において挿入丸めを用いて実行される。第１の加算はオーバーフロー状態が存在しないことを仮定し、第２の加算はオーバーフロー状態を仮定する。
【００７４】
その後、ステップ４５０において、前述のように、特殊状態が検出されるかどうか判定される。なお、これは一般に加算器２６０からの結果に関連する指数がすべて１である場合に、成り立つ。特殊状態が存在する場合、プロセスはステップ４５５に進み、ステップ４５５において、予め定められた特殊状態が結果の仮数部として選択される。しかし、特殊状態が存在しないと仮定すると、ステップ４６０においてオーバーフロー２状態が存在するかどうかが検出される。オーバーフロー２状態の存在が検出された場合、プロセスはステップ４６５に枝分かれして進み、ステップ４６５において、結果の仮数部のすべての小数部ビットは強制的にゼロに設定される。
【００７５】
オーバーフロー２状態が存在しないと考えられる場合、ステップ４７０において、オーバーフロー状態が存在するかどうか、すなわち加算器２６０からの桁上げ出力が存在するかどうかが判定される。オーバーフロー状態が存在すると判定される場合は、第２加算器２５０の出力がステップ４７５において結果の仮数部として用いられ、一方、オーバーフロー状態が存在しない場合は、第１加算器２６０の出力が結果の仮数部として用いられる。ステップ４５５、４６５、４７５、および４８０のうちの関連する１つのステップの後、結果の仮数部がステップ４８５において出力される。
【００７６】
図６は、図５Ａのステップ４０５をさらに詳細に示すフローチャートである。ステップ５００において、オペランドＡおよびオペランドＢの指数の最下位ビットが同一であるかどうかが判定される。これらが同一である場合、プロセスはステップ５０５およびステップ５１０に進み、ステップ５０５およびステップ５１０において、第１シフト表示候補および第２シフト表示候補が生成される。なお、第１シフト表示候補はオペランドＡがより大きいことを仮定し、第２シフト表示候補はオペランドＢがより大きいことを仮定する。
【００７７】
同様に、オペランドＡおよびオペランドＢの指数の最下位ビットが同一でない場合、プロセスはステップ５１５およびステップ５２０に進み、ステップ５１５およびステップ５２０において、オペランドＡまたはオペランドＢがより大きいことをそれぞれ仮定して、第１シフト表示候補および第２シフト表示候補が再び生成される。しかし、ステップ５１５およびステップ５２０での計算においては、より小さいと仮定されたオペランドの１ビット右シフトされたバージョンが用いられる。
【００７８】
次いでプロセスはステップ５２５へと進み、ステップ５２５において、オペランドＡがオペランドＢより大きいかどうかが判定される。オペランドＡがオペランドＢより大きいと判定された場合、プロセスはステップ５３０へと進み、ステップ５３０において、第１シフト表示候補が、フリップフロップ１８０に記憶されるＬＺＡ結果として選択される。しかし、ステップ５２５においてオペランドＡがオペランドＢより大きくないと判定された場合、ステップ５３５において、第２シフト表示候補がＬＺＡ結果として選択される。ステップ５３０またはステップ５３５のいずれかの後、ステップ５４０において、ＬＺＡ結果がフリップフロップ１８０に記憶される。
【００７９】
図２においてｒｏｕｎｄ０およびｒｏｕｎｄ１として３：２加算器２１５および２３０に入力される丸めの値を、完全性のために考慮すると、これらの値は、用いられる丸めモードに依存するであろう。例えば、４つのＩＥＥＥ  ７５４丸めモード、すなわちＲＺ（ゼロへの丸め）、ＲＮ（最近接偶数への丸め）、ＲＭ（負の無限大への丸め）、およびＲＰ（正の無限大への丸め）が存在する。浮動小数点数は符号および大きさとして記憶されるため、ＲＭおよびＲＰは、それらの範囲の部分に対しては無限大への丸め（ＲＵ）として、およびそれ以外の範囲に対してはＲＺと見なすことができる。特に、ＲＰモードに対しては、任意の正の数は無限大へ丸められ（ＲＵ丸め）、任意の負の数は丸められない（ＲＺ丸め）が、一方でＲＭモードに対しては任意の負の数は無限大へと丸められ（ＲＵ丸め）、任意の正の数は丸められない（ＲＺ丸め）。したがって、すべて実際的な目的に対して、３つの丸めモードすなわちＲＺ、ＲＮ、およびＲＵのみが存在する。
【００８０】
挿入による丸めは、３つの丸めモードのうちの１つを実行する定数を加えることを意味する。挿入丸めの利点は、要求される挿入が加算の実行前に行われ、それにより、加算の出力後に別個の丸め動作が不必要となることである。まず、仮数部に２４ビットを有する単精度浮動小数点数を考えると、ＲＮモードに対しては、第２４番目のビットのすぐ右側に１が挿入される。ＲＵモードに対しては、すべて１のワードが第２４番目のビットの右側に挿入される。ＲＺモードに対しては、挿入は行われない（すなわち、ゼロの挿入値が選択される）。
【００８１】
２つの丸め定数が図２の実施形態において実際に用いられる。なぜなら、上位２４ビットの位置について何らかの不確実性が存在するためである。２つの数を合計する際に桁上げ出力が存在する場合、上位２４ビットは、桁上げ出力が存在しない場合に上位２４ビットが存在する位置から１ビット左にずれた位置に存在する。これは、ステージＥ４において２つの加算器と２つの丸め定数が提供されるためである。なお、１つの加算器は合計からの桁上げ出力が存在することを仮定し、他の加算器は桁上げ出力が存在しないと仮定する。低い方の加算器２６０の桁上げ出力ビットを見ることにより、どの加算器が正しいかを判定することができる。
【００８２】
したがって、単精度数を加える場合、低い方の加算器（ａｄｄ０）に対する挿入丸めの値ｒｏｕｎｄ０は、
上位２４ビット：ゼロ
第２５番目のビット：ＲＵまたはＲＮモードを用いる場合、１
第２６番目および残りのビット：ＲＵモードを用いる場合、１
となる。
【００８３】
単精度数を加える場合、高い方の加算器（ａｄｄ１）に対する挿入丸めの値ｒｏｕｎｄ１は、
上位２３ビット：ゼロ
第２４番目のビット：ＲＵモードまたはＲＮモードを用いる場合、１
第２５番目および残りのビット：ＲＵモードを用いる場合、１
となる。
【００８４】
倍精度数は仮数部に５３ビットを有し、したがって、第５３番目のビットの右側に挿入が行われる。それ以外は、単精度加算器に対する場合と論理はまったく同じである。したがって、倍精度数を加える場合、低い方の加算器（ａｄｄ０）に対する挿入丸めの値ｒｏｕｎｄ０は、
上位５３ビット：ゼロ
第５４番目のビット：ＲＵモードまたはＲＮモードを用いる場合、１
第５５番目および残りのビット：ＲＵモードを用いる場合、１
となる。
【００８５】
倍精度数を加算する場合、高い方の加算器（ａｄｄ１）に対する挿入丸めの値ｒｏｕｎｄ１は、
上位５２ビット：ゼロ
第５３番目のビット：ＲＵモードまたはＲＮモードを用いる場合、１
第５４番目および残りのビット：ＲＵモードを用いる場合、１
となる。
【００８６】
図２で説明した加算器によれば、加算器への入力は、同じ２つの挿入定数が常に用いられるよう準備される（先行ビット相殺状態が存在する場合に、結果の前正規化を介して）。
【００８７】
以下の文では、図２の加算回路の統合されたパスが、従来は加算器の遠隔パスを経由したであろう加算および従来は加算器の近接パスを経由したであろう加算をどのように処理するかを示す、いくつかの例が提供される。
【００８８】
浮動小数点数は、符号ビットおよび大きさとして表され、大きさは常に正である。符号ビットおよび演算（加算および減算）は、演算が同符号加算（ＬＳＡ）であるかまたは異符号加算（ＵＳＡ）であるかを判定するために、評価される。
【００８９】
ＬＳＡは、
正のＡプラス正のＢ
負のＡプラス負のＢ
正のＡマイナス負のＢ
負のＡマイナス正のＢ
である。
【００９０】
ＵＳＡは、
正のＡプラス負のＢ
負のＡプラス正のＢ
正のＡマイナス正のＢ
負のＡマイナス負のＢ
である。
【００９１】
以下の例に対しては、明確さのために、４ビットの仮数部および小さい指数のみを有する短い形式が用いられる。真の例は２４ビットまたは５３ビットの仮数部を有する。簡略のために、丸め定数は含まれない。以下の例においては、１．０１１  ｅ４として表現される数は、１．０１１×２４を示す。
【００９２】
例１
ＬＳＡ、従来の遠隔パス（ＬＳＡは常に右シフトの場合である）
１．０１１  ｅ４
＋１．１０１  ｅ２
加算を実行する前に、指数を同一にする必要がある。したがって、小さい方の数は、２桁だけ右シフトされる必要がある。
１．０１１      ｅ４
＋０．０１１０１  ｅ４
−−−−−−−−
１．１１００１  ｅ４
【００９３】
図２を参照すると、上の例において、ＬＺＡ出力１８０は無視されることになり、小さい方のオペランドは右シフト回路２００を用いて右シフトされることになり、ａｄｄ０加算器２６０からの出力が、オーバーフローが存在しないため、選択されることになる。
【００９４】
例２
ＵＳＡ右シフト、従来の遠隔パス
１．０１１  ｅ４
−１．００１  ｅ２
減算する前に、指数を同一にする必要がある。したがって、小さい方の数は、右シフト回路２００により、２桁だけ右シフトされる必要がある。
１．０１１      ｅ４
−０．０１００１  ｅ４
−−−−−−−−
１．０００１１  ｅ４
【００９５】
２の補数の演算における減算の実行方法は、減数を反転し、それと１とを被減数に加えることである（被減数−減数＝差）。減算を１ビット桁だけ左シフトし、やりやすくするように、指数を減少させる（これは減算であるため、指数は開始時点よりも１だけ少ない値となる場合があるが、大きくなることはない）。指数が減少する場合はａｄｄ０が用いられ、差が元の指数に「オーバーフロー」する場合はａｄｄ１が用いられる）。図２を参照すると、上述の内容は、１つの実施形態においては、ステージＥ２において反転器１６５に減数を反転する論理を加え、ステージＥ３において両方のマルチプレクサ２０５および２１０に両方の仮数部を左シフトする論理を加え、次いでＥ４において両方の加算器２５０および２６０に別の入力として１の値を加えることにより、達成することができる。結果として、実行された加算は、
０．１１００  ｅ３
＋１．０１１０  ｅ３
＋          １
−−−−−−−
１０．００１１  ｅ３
と示すことができる。
【００９６】
桁上げ出力は、正しい答えがオーバーフロー加算器２５０からであることを意味し、正確な答えは、１だけ大きい指数を有し、
１．０００  ｅ４  （ＲＺ丸め）
が得られる。
【００９７】
この場合、ＲＵモードまたはＲＮモードで丸めを実行した場合、答えは１．００１ｅ４となるであろう点に注意されたい。
【００９８】
例３
同一の指数、左シフトが要求され、従来の近接パスを有する、ＵＳＡ
１．１１０  ｅ４
−１．１００  ｅ４
【００９９】
２の補数の加算に変換すると、これは、
１．１１０  ｅ４
＋０．０１１  ｅ４
＋        １
−−−−−−
０．０１０  ｅ４
となる。
【０１００】
この結果は正常規化数ではない（正規化浮動小数点数は、１．ｘｘｘ×何らかの指数の形でならなければならない）。したがって、ＬＺＡ出力１８０を用いて両方のオペランドをどれだけ左シフトすべきかを認識し、次いで、左シフト回路１９０および１９５を用いて必要な左シフトを実行する。この場合、予測されたＬＺＡは３であり、したがって加算は、
０．０００  ｅ１
＋１．１１１  ｅ１  （減数を左シフトするとき、１が挿入される）
＋        １
−−−−−−
１０．０００  ｅ１
となる。
【０１０１】
桁上げ出力は、正しい答えがオーバーフロー加算器２５０からであることを意味し、正確な答えは１だけ大きい指数を有し、
１．０００  ｅ２
となる。
【０１０２】
例４
１だけずれた指数、左シフトが要求され、従来の近接パスを有する、ＵＳＡ
１．０１１  ｅ４
−１．１００  ｅ３
【０１０３】
これは、指数を同一にするために１ビット右シフト（マルチプレクサ１６５により実行される）が必要となる。
１．０１１    ｅ４
−０．１１００  ｅ４
【０１０４】
２の補数の加算に変換すると、これは、
１．０１１    ｅ４
＋１．００１１  ｅ４
＋          １
となる。
【０１０５】
予測されるＬＺＡは２であり、したがって左シフト回路１９０および１９５を利用して両方のオペランドを２だけ左シフトし、それに応じて指数を調節すると、
１．１００  ｅ２
＋０．１１１  ｅ２
＋        １
−−−−−−
１０．１００  ｅ２
が得られる。
【０１０６】
桁上げ出力は、正しい答えがオーバーフロー加算器２５０からであることを意味し、正確な答えは、１だけ大きい指数を有し、
１．０１０  ｅ３
が得られる。
【０１０７】
例５
二重オーバーフロー、従来の遠隔パスを有する、ＵＳＡ
この例に対しては、入力のうちの１つは、融合乗算加算の一部として乗算器４から出力される必要がある。この入力は他の入力の２倍の長さとなるであろう。さらに、この入力は丸められていないため、丸められた同一結果と比較すると１だけずれている指数を有する場合がある。例えば、乗算器出力が、
１．１１１＿１１１０ｅ７
であるとする（式中のアンダースコアは長いビットの列を読みやすくするためにのみ置いたものであり、他に特段の意味を有すものではない）。
【０１０８】
これはＲＵ丸めまたはＲＮ丸めにより丸める場合、
１．０００  ｅ８
が得られる。
【０１０９】
その結果、興味深い状況が生じる。すなわち、積から小さい数を減算した結果、指数が増加することとなるのである。これは本明細書では「二重オーバーフロー」と称される。例えば、
１．１１１＿１１１０  ｅ７
−１．０００            ｅ２
を考える。
【０１１０】
小さい方のオペランドを右シフトすると、
１．１１１＿１１１０  ｅ７
−０．０００＿０１００  ｅ７
が得られる。
【０１１１】
２の補数の加算に変換し、さらに減算のために１ビット左シフトを実行する（例２を参照）と、
１．１１＿１１１０  ｅ６
＋１．１１＿１０１１  ｅ６
＋                １
−−−−−−−−−−
１１．１１＿１０１０  ｅ６
が得られる。
【０１１２】
桁上げ出力は正しい答えがオーバーフロー加算器２５０からであることを意味し、したがって指数は１だけ大きくなる。しかし、丸め定数を加えた場合（ＲＮまたはＲＵ）、合計が二重オーバーフローすることに注意すべきである。
１．１１１＿１０１０  ｅ７
＋            １０００  （ＲＮ丸め定数）
−−−−−−−−−−−
１０．０００＿００１０
から、正しく丸められた答え、
１．０００  ｅ８
が得られる。
【０１１３】
図２を考慮すると、この状態を検出する方法は、より大きい加算器ａｄｄ１  ２５０からのオーバーフローを検出し、係るオーバーフローが生じた場合、結果の仮数部の全小数部ビットを強制的に１に設定し、より大きい加算器２５０の出力に関連する指数よりも１だけ大きい指数を、結果の指数として選択することである。
【０１１４】
本発明の実施形態が新規の加算器回路を提供することが、上述の内容から理解できるであろう。なお、この新規の加算器は、後に合計が計算される前に両方のオペランドを左シフトすることによる結果の前正規化が続く、早期のＬＺＡ判定（１つの実施形態においては、小数部、または実際に指数の他のビットが比較される前に行われる）が含まれる。さらに、挿入丸めは、すべの加算に対して用いられ、特に、結果の前正規化のために、先行ビット相殺を有する効果的な減算に用いることができる。これにより、特に簡単で且つ効果的な加算器回路が提供され、その結果、従来の先行技術に係る手法において用いられるような、別個の近接パスおよび遠隔パスが不必要となる。実施形態によれば、先行ゼロ訂正は不必要となる点に注意すべきである。なぜなら、先行ゼロ値が１だけずれる場合、そのずれは、図２のオーバーフロー加算器２５０からの出力の使用により自動的に訂正されるためである。
【０１１５】
実施形態に係る加算器回路は、乗算器の出力が丸められない状態で加算器回路に提供される融合乗算加算演算をサポートするために加算器回路が別個の乗算器回路に接続されている場合に、特に有益である。特に、実施形態に係る加算器回路は、融合乗算加算演算の実行時に挿入丸めの適用を可能にする。なぜなら、前正規化回路が動作することにより、先行ビット相殺が存在する場合に、入力が挿入丸めに対して正しく整置されることを確実にするためである。
【０１１６】
しかし加算器が融合乗算加算演算に対応するにあたって特に良好に適合する一方で、この基本的設計は、設計が融合乗算加算演算をサポートしない場合でも、依然として、従来の近接／遠隔パス加算器に対する改良である。融合乗算加算演算がサポートされない場合、図２のいくつかのパスのサイズが低減されることが理解されるであろう。なぜなら、両方の指数部は、倍精度値が処理されると仮定すると、サイズが５３ビットとなるからである。
【０１１７】
上述した新規の加算器の設計によれば、従来の加算器の全近接パスは２つの左シフト器および２つのＬＺＡ回路により置き換えられる。タイミングは近接／遠隔パス加算器と等価（実際のところ、融合乗算加算演算を実行する場合には、より優れたものとなる）であるが、それに加えて、加算器は、従来の近接／遠隔パス加算器よりも、かなり簡単で且つ小型なものとなる。
【０１１８】
本明細書においては本発明に係る特定の実施形態について説明してきたが、本発明がこれらの実施形態に限定されないこと、および本発明の範囲内で、多数の変更例および追加例がなわれてもよいことは、明らかであろう。例えば、本発明の範囲から逸脱することなく、以下の従属請求項の特徴と独立請求項の特徴とを様々に組み合わせることが可能である。
【図１】
0006001276.tif 000002
【図２】
0006001276.tif 000003
【図３Ａ】
0006001276.tif 000004
【図３Ｂ】
0006001276.tif 000005
【図３Ｃ】
0006001276.tif 000006
【図４】
0006001276.tif 000007
【図５Ａ】
0006001276.tif 000008
【図５Ｂ】
0006001276.tif 000009
【図６】
0006001276.tif 000010