(57)【要約】  汎用機能ユニットは、乗算加算及び比較テスト演算と、その他の整数及び／又は浮動小数点算術演算と、ブール演算と、フォーマット変換演算とを含む多数の演算をサポートするように構成されている。【選択図】  図４
2008520048.tif 000002
【特許請求の範囲】
【請求項１】
第１のオペランド、第２のオペランド、及び第３のオペランド、並びに、複数のサポートされた演算のうちの実行されるべき一つの演算を指定するオペコードを受け取るように構成され、更に、前記オペコードに応じて複数の制御信号を生成するように構成された入力セクションと、
前記入力セクションに結合されており、前記制御信号に応じて、前記第１のオペランドと前記第２のオペランドとの積を計算し、前記計算された積を第１の中間結果として選択するように構成可能である乗算パイプラインと、
前記入力セクションに結合されており、前記制御信号に応じて、前記第１のオペランド、第２のオペランド、及び第３のオペランドのうちの一以上に関する比較を実行し、前記比較の結果を第２の中間結果として選択するように構成可能であるテストパイプラインと、
前記乗算セクション及び前記テストパイプラインに結合されており、前記制御信号に応じて、前記第１の中間結果と前記第２の中間結果の和を計算し、前記計算された和を演算結果として選択するように構成可能である加算パイプラインと、
前記入力セクションに結合されており、前記制御信号に応じて、前記第１のオペランド、第２のオペランド、及び第３のオペランドのうちの一以上に関する指数計算を実行し、前記指数計算の結果を指数結果として選択するように構成可能である指数パイプラインと、
前記演算結果及び前記指数結果を受け取るように結合されており、前記制御信号に応じて、前記サポートされた演算のうちの前記オペコードによって指定された前記一つの演算の最終結果を生成するように構成可能である出力セクションと、
を備え、
前記複数のサポートされた演算が、浮動小数点乗算加算（ＦＭＡＤ）演算、整数乗算加算（ＩＭＡＤ）演算、及び、少なくとも一つの比較テスト演算を含む、
プロセッサの汎用機能ユニット。
【請求項２】
前記加算パイプラインは、更に、前記オペコードが前記比較テスト演算を指定する場合に、前記第１の中間結果と前記第２の中間結果を加算する前に前記第１の中間結果が零値で置き換えられるように、前記制御信号に応じて構成可能である、請求項１に記載の汎用機能ユニット。
【請求項３】
前記少なくとも一つの比較テスト演算が、最大値（ＭＡＸ）演算、最小値（ＭＩＮ）演算、及び、３値比較（ＣＭＰ）演算から構成された群から選択される一つ以上の演算を含む、請求項１に記載の汎用機能ユニット。
【請求項４】
前記少なくとも一つの比較テスト演算が、前記ＭＡＸ演算、前記ＭＩＮ演算、及び、前記ＣＭＰ演算を含み、
前記テストパイプラインが、更に、前記制御信号に応じて、
前記オペコードが前記ＭＡＸ演算を指定する場合に、前記第２の中間結果が前記第１のオペランドと前記第２のオペランドのうちの大きい方に対応し、
前記オペコードが前記ＭＩＮ演算を指定する場合に、前記第２の中間結果が前記第１のオペランドと前記第２のオペランドのうちの小さい方に対応し、
前記オペコードが前記ＣＭＰ演算を指定する場合に、前記第２の中間結果が、前記第３のオペランドが零より小さいときに前記第２のオペランドに対応し、前記第３のオペランドがゼロより小さくないときに前記第１のオペランドに対応するように、
構成可能である、請求項３に記載の汎用機能ユニット。
【請求項５】
前記少なくとも一つの比較テスト演算が、大なり演算、小なり演算、等値演算、及び、順序付け無し演算から構成された群から選択される一以上のバイナリテスト（ＳＥＴ）演算を含み、前記一以上のバイナリテスト演算のそれぞれがブール型の結果を生成する、請求項１に記載の汎用機能ユニット。
【請求項６】
前記テストパイプラインと前記出力セクションとの間に結合されており、前記テストパイプラインから前記出力セクションへブール型の補助結果を送出するように構成された補助結果パスを更に備え、
前記出力セクションが、更に、前記オペコードが前記ＳＥＴ演算のうちの一つを指定する場合に、前記ブール型の補助結果に基づいて前記最終結果を生成するように前記制御信号に応じて構成可能である、請求項５に記載の汎用機能ユニット。
【請求項７】
前記複数のサポートされた演算がビット単位ブール論理演算を更に含む、請求項１に記載の汎用機能ユニット。
【請求項８】
前記ビット単位ブール論理演算が、ＡＮＤ演算、ＯＲ演算、及び、ＸＯＲ演算にから構成されるグループから選択可能であり、
前記テストパイプラインが、
前記第１のオペランドと前記第２のオペランドのビット単位論理ＡＮＤを第１の出力として生成するように構成されたＡＮＤ回路と、
前記第１のオペランドと前記第２のオペランドのビット単位論理ＯＲを第２の出力として生成するように構成されたＯＲ回路と、
前記第１のオペランドと前記第２のオペランドのビット単位論理ＸＯＲを第３の出力として生成するように構成されたＸＯＲ回路と、
前記オペコードが前記ＡＮＤ演算と前記ＯＲ演算と前記ＸＯＲ演算のうちの一つを指定する場合に、前記第２の中間結果が前記第１の出力と前記第２の出力と前記第３の出力のうちの対応する一つとなるように、前記制御信号に応じて構成可能である選択回路と、
を有する、請求項７に記載の汎用機能ユニット。
【請求項９】
前記複数のサポートされた演算が、浮動小数点加算（ＦＡＤＤ）演算及び整数加算（ＩＡＤＤ）演算を更に含み、
前記加算パイプラインが、更に、前記制御信号に応じて前記ＦＡＤＤ演算及び前記ＩＡＤＤ演算を実行するように構成可能である、請求項１に記載の汎用機能ユニット。
【請求項１０】
前記乗算パイプラインは、更に、前記オペコードが前記ＦＡＤＤ演算又は前記ＩＡＤＤ演算を指定する場合に、前記第１のオペランドが前記第１の中間結果として選択されるように、前記制御信号に応じて構成可能である、請求項９に記載の汎用機能ユニット。
【請求項１１】
前記複数のサポートされた演算が、浮動小数点乗算（ＦＭＵＬ）演算及び整数乗算（ＩＭＵＬ）演算を更に含み、
前記乗算パイプラインが、更に、前記制御信号に応じて前記ＦＭＵＬ演算及び前記ＩＭＵＬ演算を実行するように構成可能である、請求項１に記載の汎用機能ユニット。
【請求項１２】
前記加算パイプラインは、更に、前記オペコードが前記ＦＭＵＬ演算又は前記ＩＭＵＬ演算を指定する場合に、前記第１の中間結果と前記第２の中間結果を加算する前に前記第２の中間結果が零値で置き換えられるように、前記制御信号に応じて構成可能である、請求項１１に記載の汎用機能ユニット。
【請求項１３】
前記複数のサポートされた演算が、前記第１のオペランドを入力フォーマットからターゲットフォーマットへ変換するフォーマット変換演算を更に含む、請求項１に記載の汎用機能ユニット。
【請求項１４】
前記複数のサポートされた演算が、ドメインマッピング（ＲＲＯ）演算を更に含む、請求項１に記載の汎用機能ユニット。
【請求項１５】
前記ＲＲＯ演算が、三角関数を計算する際に使用される前記第１のオペランドを限定する、請求項１４に記載の汎用機能ユニット。
【請求項１６】
前記ＲＲＯ演算が指数関数を計算する際に使用される前記第１のオペランドを限定する、請求項１４に記載の汎用機能ユニット。
【請求項１７】
前記複数のサポートされた演算が、前記第１のオペランドの小数部を返す端数処理（ＦＲＣ）演算を更に含む、請求項１に記載の汎用機能ユニット。
【請求項１８】
前記加算パイプラインが、
前記オペコードが前記ＦＭＡＤ演算を指定する場合に、前記指数パイプラインからのアライメント信号に基づいて前記第１の中間結果と前記第２の中間結果のうちの一方を右シフトするように、前記制御信号に応じて構成可能であるアライメント回路と、
前記オペコードが前記ＦＭＡＤ演算を指定する場合に、前記第１の中間結果と前記第２の中間結果の和を左シフトするように、前記制御信号に応じて構成可能である正規化回路と、
を有する、請求項１に記載の汎用機能ユニット。
【請求項１９】
前記複数のサポートされた演算が、前記第１のオペランドを左へシフトする左シフト（ＳＨＬ）演算と前記第１のオペランドを右へシフトする右シフト（ＳＨＲ）演算とを更に含み、
前記オペコードが前記ＳＨＬ演算を指定する場合に、前記正規化回路が前記左シフトを適用し、
前記オペコードが前記ＳＨＲ演算を指定する場合に、前記アライメント回路が前記右シフトを適用する、
請求項１８に記載の汎用機能ユニット。
【請求項２０】
第１のオペランド、第２のオペランド、及び第３のオペランド、並びに、複数のサポートされた演算のうちの実行されるべき一つの演算を指定するオペコードを受け取るように構成されており、更に、前記オペコードに応じて複数の制御信号を生成するように構成された入力セクションと、
前記入力セクションに結合されており、前記制御信号に応じて、前記第１のオペランドと前記第２のオペランドの積を計算し、前記計算された積を第１の中間結果として選択するように構成可能である乗算パイプラインと、
前記乗算セクション及び前記テストパイプラインに結合されており、前記制御信号に応じて、前記第１の中間結果と第２の中間結果の和を計算し、前記計算された和を演算結果として選択するように構成可能である加算パイプラインと、
前記演算結果を受け取るように結合されており、前記制御信号に応じて、前記サポートされた演算のうちの前記オペコードによって指定された前記一つの演算の最終結果を生成するように構成可能である出力セクションと、
を備え、
前記複数のサポートされた演算が、前記第１のオペランド、第２のオペランド、及び第３のオペランドを操作する浮動小数点乗算加算（ＦＭＡＤ）演算及び整数乗算加算（ＩＭＡＤ）演算を含み、
前記乗算パイプライン及び前記加算パイプラインが、更に、前記ＦＭＡＤ演算の場合に、前記最終結果が浮動小数点値を表し、前記ＩＭＡＤ演算の場合に、前記最終結果が整数値を表すように、前記制御信号に応じて構成可能である、
プロセッサの汎用機能ユニット。
【請求項２１】
前記乗算パイプラインが、
二つの係数の積を計算するように構成された乗算器ツリーと、
前記制御信号に応じて、前記第１のオペランド及び前記第２のオペランドのそれぞれの指数から積指数を計算し、前記積指数と前記第３のオペランドの指数とから和指数を計算するように構成可能である指数ロジックブロックと、
を有し、
前記オペコードが前記ＦＭＡＤ演算を指定する場合に、前記乗算器ツリーが前記第１のオペランド及び前記第２のオペランドのそれぞれの仮数を乗算し、前記指数ロジックブロックが前記積指数と前記和指数を計算する、請求項２０に記載の汎用機能ユニット。
【請求項２２】
前記複数のサポートされた演算が前記第１のオペランド及び前記第３のオペランドを操作する浮動小数点加算（ＦＡＤＤ）演算及び整数加算（ＩＡＤＤ）演算を更に含む、請求項２０に記載の汎用機能ユニット。
【請求項２３】
前記乗算パイプラインが、
第１の係数と第２の係数の積を計算するように構成された乗算器ツリーと、
前記制御信号に応じて、前記第１の係数として前記第１のオペランドを選択し、前記第２の係数として前記第２のオペランド又は１に対応する値の何れかを選択するように構成可能である乗算前選択回路と、
を有し、
前記オペコードが前記ＦＡＤＤ又はＩＡＤＤ演算を指定する場合に、前記乗算前選択回路が前記第２のオペランドを１に対応する前記値で上書きする、
請求項２２に記載の汎用機能ユニット。
【請求項２４】
前記乗算パイプラインは、前記オペコードが前記ＦＡＤＤ又はＩＡＤＤ演算を指定する場合に、前記第１の中間結果として前記第１のオペランドを供給し、前記第２の中間結果として前記第３のオペランドを供給するように構成されている迂回パスを更に有する、請求項２２に記載の汎用機能ユニット。
【請求項２５】
前記複数のサポートされた演算が前記第１のオペランド及び前記第２のオペランドを操作する浮動小数点乗算（ＦＭＵＬ）演算及び整数乗算（ＩＭＵＬ）演算を更に含む、請求項２０に記載の汎用機能ユニット。
【請求項２６】
前記加算パイプラインが、第１の加数と第２の加数の和を計算するように構成された加算器回路と、アライメントブロックと、を有し、
前記アライメントブロックが、
前記制御信号に応じて、スモールオペランドとして前記第１の中間結果と前記第２の中間結果のうちの一方を選択し、ラージオペランドとして前記第１の中間結果と前記第２の中間結果のうちの他方を選択するように構成可能であるステアリング回路と、
前記制御信号に応じて、前記スモールオペランドに右シフトを適用し、前記シフトされたスモールオペランドを前記第１の加数として選択するように構成可能である右シフト回路と、
前記制御信号に応じて、前記ラージオペランド又は零値のうちの何れかを前記第２の加数として選択するように構成可能である条件付き零回路と、
を有し、
前記オペコードが前記ＦＭＵＬ又はＩＭＵＬ演算を指定する場合に、前記第１の中間結果及び前記零値が前記第１の加数及び前記第２の加数として選択される、請求項２５に記載の汎用機能ユニット。
【請求項２７】
前記乗算パイプラインが、
第１のフィールド及び第２のフィールドを有する冗長表現で第１の係数と第２の係数の積を計算するように構成された乗算器ツリーと、
前記制御信号に応じて、前記第１のオペランド及び前記第２のオペランドを前記第１の係数及び前記第２の係数として選択するように構成可能である乗算前選択回路と、
二つの入力値の整数和を計算し、前記第１の中間結果として前記整数和を供給するように構成された中間積加算器と、
前記乗算器ツリーと前記中間積加算器との間に結合されており、前記制御信号に応じて、前記第１のフィールド及び前記第２のフィールド、又は、前記第１のオペランド及び前記第２のオペランドの何れかを前記中間積加算器へ選択的に供給するように構成可能である乗算後選択回路と、
を有する、請求項２０に記載の汎用機能ユニット。
【請求項２８】
前記複数のサポートされた演算が、絶対差の整数和（ＩＳＡＤ）演算を更に含み、
前記オペコードが前記ＩＳＡＤ演算を指定する場合に、
前記入力セクションが、前記第１のオペランド及び反転させられた前記第２のオペランドを前記乗算パイプラインへ供給し、
前記乗算後選択回路が、前記第１のオペランド及び前記反転させられた前記第２のオペランドを前記中間積加算器へ供給し、
前記加算パイプラインが、前記第１の中間結果と前記第３のオペランドの和を計算する、
請求項２７に記載の汎用機能ユニット。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
[0001]本願は、２００４年１１月１０日に出願され、本願の譲受人に譲渡された以下の米国特許出願の優先権を主張する。
・出願番号第１０／９８５，２９１号、名称“Ｍｕｌｔｉｐｕｒｐｏｓｅ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ  Ｆｕｎｃｔｉｏｎａｌ  Ｕｎｉｔ”
・出願番号第１０／９８６，５３１号、名称“Ｍｕｌｔｉｐｕｒｐｏｓｅ  Ｆｕｎｃｔｉｏｎａｌ  Ｕｎｉｔ  ｗｉｔｈ  Ｃｏｍｂｉｎｅｄ  Ｉｎｔｅｇｅｒ  ａｎｄ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ  Ｐｉｐｅｌｉｎｅ”
・出願番号第１０／９８５，６９５号、名称“Ｍｕｌｔｉｐｕｒｐｏｓｅ  Ｆｕｎｃｔｉｏｎａｌ  Ｕｎｉｔ  ｗｉｔｈ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ  ａｎｄ  Ｌｏｇｉｃａｌ  Ｔｅｓｔ  Ｐｉｐｅｌｉｎｅ”
・出願番号第１０／９８５，６７４号、名称“Ｍｕｌｔｉｐｕｒｐｏｓｅ  Ｆｕｎｃｔｉｏｎａｌ  Ｕｎｉｔ  ｗｉｔｈ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ  ａｎｄ  Ｆｏｒｍａｔ  Ｃｏｎｖｅｒｓｉｏｎ  Ｐｉｐｅｌｉｎｅ”。第１０／９８６５，２９１号。
【発明の背景】
【０００２】
[0002]本発明は、広くマイクロプロセッサに関するものであり、特にプロセッサコア用の汎用乗算加算機能ユニットに関するものである。
【０００３】
[0003]リアルタイムコンピュータアニメーションはプロセッサに極端な要求を課す。これらの要求を満たすために、専用グラフィックスプロセッシングユニットは、典型的に、高度並列アーキテクチャを実装しており、当該アーキテクチャでは、多数（例えば、１６台）のコアが並列に動作し、各コアが、プロセッシングユニットによってサポートされる演算を実行するための機能ユニットを含む複数（例えば、８台）の並列パイプラインを有している。これらの演算には、一般に、種々の整数及び浮動小数点算術演算（加算、乗算など）、ビット単位論理演算、比較演算、フォーマット変換演算等がある。パイプラインは一般に同一の設計であるため、サポートされた命令は何れのパイプラインによっても処理可能であり、したがって、各パイプラインは完全な機能ユニットのセットを必要とする。
【０００４】
[0004]従来から、各機能ユニットは、一つ又は二つの演算のみを取り扱うように特化されている。例えば、機能ユニットとしては、整数加算／減算ユニット、浮動小数点乗算ユニット、一つ以上の２値ロジックユニット、及び、整数フォーマットと浮動小数点フォーマットとの間で変換するための一つ以上のフォーマット変換ユニットがある。
【０００５】
[0005]時間とともに、グラフィックスプロセッシングユニットがサポートすることを期待される基本演算（命令）の個数が、増加してきている。オペランドＡ、Ｂ、及びＣに対してＡ×Ｂ＋Ｃを計算する３重「乗算加算」（ＭＡＤ）命令のような新しい命令が提案されている。このような演算をサポートするため機能ユニットを追加し続けることは複数の問題を引き起こす。例えば、新しい機能ユニットは各パイプラインに追加されなければならないので、追加ユニットを追加するだけのために必要とされるチップ面積は相当なものとなる。新しい機能ユニットは更に電力消費を増加させ、このことによって改良された冷却システムが必要とされる。このような因子はチップ設計の難しさ及びコストに影響する。更に、機能ユニットの台数が１サイクル中に発行され得る命令の個数を超える範囲では、機能ユニットのプロセッシング能力が非効率に使用される。
【０００６】
[0006]したがって、必要とされるチップ面積が縮小され、より効率的に使用することができる機能ユニットを提供することが望ましい。
【発明の概要】
【０００７】
[0007]本発明の実施の形態は汎用機能ユニットを提供する。ある実施の形態では、汎用機能ユニットは、以下の演算、即ち、整数オペランド及び浮動小数点オペランドの加算、乗算、並びに、乗算加算と、ブール演算、最大値演算、最小値演算、３値比較演算、及び、２値テスト演算（例えば、大なり、小なり、等値、又は、順序無し）を含むテスト演算と、左シフト演算及び右シフト演算と、整数フォーマットと浮動小数点フォーマットとの間、ある整数フォーマットと別の整数フォーマットとの間、及び、ある浮動小数点フォーマットと別の浮動小数点フォーマットとの間で変換するフォーマット変換演算と、指数関数及び三角関数を含む超越関数の引数の引数還元演算と、浮動小数点オペランドの小数部を返す端数処理演算との全てをサポートする。他の実施の形態では、汎用機能ユニットは、これらの演算の部分集合及び／又はその他の演算についてもサポートする。
【０００８】
[0008]本発明の一態様によれば、プロセッサの汎用機能ユニットは、入力セクション、乗算パイプライン、テストパイプライン、加算パイプライン、指数パイプライン、及び、出力セクションを備える。入力セクションは、第１、第２、及び、第３のオペランドと、多数のサポートされた演算のうちの実行されるべき一つの演算を指定するオペコード（オペレーションコード）と、を受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、第１のオペランドと第２のオペランドの積を計算し、計算された積を第１の中間結果として選択するように制御信号に応じて較正可能である。テストパイプラインは入力セクションに結合され、第１、第２及び第３のオペランドのうちの一つ以上に関する比較を実行し、比較の結果を第２の中間結果として選択するように制御信号に応じて較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、第１の中間結果と第２の中間結果の和を計算し、計算された和を演算結果として選択するように制御信号に応じて較正可能である。指数パイプラインは入力セクションに結合され、第１、第２及び第３のオペランドのうちの一つ以上に関する指数計算を実行し、指数計算の結果を指数結果として選択するように制御信号に応じて較正可能である。出力セクションは演算結果及び指数結果を受け取るように結合され、サポートされた演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように制御信号に応じて較正可能である。サポートされている演算は、浮動小数点乗算加算（ＦＭＡＤ）演算、整数乗算加算（ＩＭＡＤ）演算、及び、少なくとも一つの比較テスト演算を含む。
【０００９】
[0009]種々の比較テスト演算がサポートされていてもよい。例えば、ある実施の形態では、少なくとも一つの比較テスト演算は、最大値（ＭＡＸ）演算、最小値（ＭＩＮ）演算、及び、３値比較（ＣＭＰ）演算により構成された群から選択された一つ以上の演算を含む。別の実施の形態では、少なくとも一つの比較テスト演算は、大なり演算、小なり演算、等値演算、及び、順序無し演算により構成された群から選択された一つ以上の２値テスト（ＳＥＴ）演算を含み、一つ以上の２値テスト演算のそれぞれはブール結果を生成する。ブール結果を伴うＳＥＴ演算がサポートされている実施の形態では、補助的な結果パスがテストパイプラインと出力セクションとの間に結合され、テストパイプラインから出力セクションへブール補助結果を送出するように構成され、出力セクションは、更に、オペコードがＳＥＴ演算のうちの一つを指定する場合にブール補助結果に基づいて最終結果を生成するように制御信号に応じて較正可能である。
【００１０】
[0010]その他の演算もまたサポートし得る。例えば、サポートされる演算には更には、ビット単位ブール論理演算（例えば、ＡＮＤ演算、ＯＲ演算、ＸＯＲ演算）が含まれ、加算パイプラインが更に浮動小数点加算（ＦＡＤＤ）演算及び整数加算（ＩＡＤＤ）演算を実行するように制御信号に応じて較正可能な状況では、ＦＡＤＤ演算及びＩＡＤＤ演算が含まれ、乗算パイプラインが更に浮動小数点乗算（ＦＭＵＬ）演算及び整数乗算（ＩＭＵＬ）演算を実行するように制御信号に応じて較正可能な状況では、ＦＭＵＬ演算及びＩＭＵＬ演算が含まれ、第１のオペランドを入力フォーマットからターゲットフォーマットへ変換するフォーマット変換演算が含まれ、また、例えば、３角関数又は指数関数のドメインマッピング（ＲＲＯ）演算が含まれ、第１のオペランドの小数部を返す端数処理（ＦＲＣ）演算が含まれてもよい。これらの演算の種々の組み合わせ、及び、その他の演算もサポートされてもよい。
【００１１】
[0011]本発明の別の態様によれば、マイクロプロセッサは、プログラム演算を実行するように構成された機能ユニットを有する実行コアを備える。少なくとも１台の機能ユニットは、汎用機能ユニットであり、当該汎用機能ユニットは、少なくとも浮動小数点乗算加算（ＦＭＡＤ）演算と、整数乗算加算（ＩＭＡＤ）演算と、少なくとも一つの比較テスト演算とを含む複数のサポートされた演算を実行する能力を備える。汎用機能ユニットは、入力セクション、乗算パイプライン、テストパイプライン、加算パイプライン、指数パイプライン、及び、出力セクションを備える。入力セクションは、第１、第２、及び、第３のオペランドと、複数のサポートされた演算のうちの実行されるべき一つの演算を指定するオペコードと、を受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、第１のオペランドと第２のオペランドの積を計算し、計算された積を第１の中間結果として選択するように制御信号に応じて較正可能である。テストパイプラインは入力セクションに結合され、第１、第２及び第３のオペランドのうちの一つ以上に関する比較を実行し、比較の結果を第２の中間結果として選択するように制御信号に応じて較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、第１の中間結果と第２の中間結果の和を計算し、計算された和を演算結果として選択するように制御信号に応じて較正可能である。指数パイプラインは入力セクションに結合され、第１、第２及び第３のオペランドのうちの一つ以上に関する指数計算を実行し、指数計算の結果を指数結果として選択するように制御信号に応じて較正可能である。出力セクションは演算結果及び指数結果を受け取るように結合され、オペコードによって指定されたサポートされている演算のうちの一つの演算の最終結果を生成するように制御信号に応じて較正可能である。
【００１２】
[0012]本発明の更に別の態様によれば、マイクロプロセッサの機能ユニットを動作させる方法が提供される。オペコード及び一つ以上のオペランドが受け取られ、オペコードが、複数のサポートされている演算のうち一つ以上のオペランドに関して実行されるべき一つの演算を指定する。オペコード及び一つ以上のオペランドに応じて、機能ユニット内の乗算パイプラインは第１の中間結果を生成するように動作させられ、機能ユニット内のテストパイプラインは第２の中間結果を生成するように動作させられ、機能ユニット内の指数パイプラインは指数結果及びアライメント制御信号を生成するように動作させられる。機能ユニット内の加算パイプラインは、第１の中間結果と第２の中間結果を加算し、演算結果を生成するように、オペコード及びアライメント制御信号に応じて動作させられる。機能ユニットの出力セクションは、演算結果及び指数結果から最終結果を計算するように動作させられる。サポートされている演算は、浮動小数点乗算加算（ＦＭＡＤ）演算、整数乗算加算（ＩＭＡＤ）演算、及び、少なくとも一つの比較テスト演算を含む。
【００１３】
[0013]本発明の更なる態様によれば、プロセッサの汎用機能ユニットは、入力セクション、乗算パイプライン、加算パイプライン、及び、出力セクションを含む。入力セクションは、第１、第２、及び、第３のオペランドと、多数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第１のオペランドと第２のオペランドの積を計算し、計算された積を第１の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第１の中間結果と第２の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。出力セクションは演算結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。サポートされている演算は、第１、第２及び第３のオペランドを操作する浮動小数点乗算加算（ＦＭＡＤ）演算及び整数乗算加算（ＩＭＡＤ）演算を含み、乗算パイプライン及び加算パイプラインは、更に、ＦＭＡＤ演算の場合に、最終結果が浮動小数点値を表現し、ＩＭＡＤ演算の場合に、最終結果が整数値を表現するように、制御信号に応じて較正可能である。
【００１４】
[0014]また、様々なその他の演算もサポートし得る。例えば、ある実施の形態では、サポートされている演算は、第１のオペランド及び第３のオペランドを操作する浮動小数点加算（ＦＡＤＤ）演算及び整数加算（ＩＡＤＤ）演算を更に含む。別の実施の形態では、サポートされている演算は、第１のオペランド及び第２のオペランドを操作する浮動小数点乗算（ＦＭＵＬ）演算及び整数乗算（ＩＭＵＬ）演算を更に含む。更に別の実施の形態では、サポートされている演算は、絶対差の整数和（ＩＳＡＤ）演算を更に含む。
【００１５】
[0015]本発明の別の態様によれば、マイクロプロセッサが、プログラム演算を実行するように構成された機能ユニットを有する実行コアを備える。少なくとも１台の機能ユニットは、汎用機能ユニットであり、当該汎用機能ユニットは、少なくとも浮動小数点乗算加算（ＦＭＡＤ）演算と、整数乗算加算（ＩＭＡＤ）演算とを含む複数のサポートされた演算を実行する能力を備える。汎用機能ユニットは、入力セクション、乗算パイプライン、加算パイプライン、及び、出力セクションを備える。入力セクションは、第１、第２、及び、第３のオペランドと、多数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第１のオペランドと第２のオペランドの積を計算し、計算された積を第１の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第１の中間結果と第２の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。出力セクションは演算結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。乗算パイプライン及び加算パイプラインは、更に、ＦＭＡＤ演算の場合に、最終結果が浮動小数点値を表現し、ＩＭＡＤ演算の場合に、最終結果が整数値を表現するように、制御信号に応じて較正可能である。
【００１６】
[0016]本発明の更に別の態様によれば、マイクロプロセッサの機能ユニットを動作させる方法が提供される。オペコード及び一つ以上のオペランドが受け取られ、オペコードが複数個のサポートされている演算のうち一つ以上のオペランドに関して実行されるべき一つの演算を指定する。オペコード及び一つ以上のオペランドに応じて、機能ユニット内の乗算パイプラインは第１の中間結果及び第２の中間結果を生成するように動作させられる。機能ユニット内の加算パイプラインは、第１の中間結果と第２の中間結果を加算し、演算結果を生成するように、動作させられる。機能ユニットの出力セクションは、演算結果から最終結果を計算する。サポートされている演算は、浮動小数点乗算加算（ＦＭＡＤ）演算、及び、整数乗算加算（ＩＭＡＤ）演算を含む。
【００１７】
[0017]本発明の更に別の態様によれば、プロセッサの汎用機能ユニットが、入力セクション、乗算パイプライン、テストパイプライン、加算パイプライン、及び、出力セクションを備える。入力セクションは、第１、第２、及び、第３のオペランドと、複数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第１のオペランドと第２のオペランドの積を計算し、計算された積を第１の中間結果として選択するように較正可能である。テストパイプラインは入力セクションに結合され、制御信号に応じて、第１、第２及び第３のオペランドのうちの一つ以上に関する比較を実行し、比較の結果を第２の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第１の中間結果と第２の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。出力セクションは演算結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。複数のサポートされている演算は、第１、第２及び第３のオペランドを操作する整数乗算加算（ＩＭＡＤ）演算と、第１、第２及び第３のオペランドの内の少なくとも一つを操作する論理テスト演算とを含む。
【００１８】
[0018]一部の実施の形態では、論理テスト演算は、少なくとも等価性テスト、大なりテスト、及び、小なりテストを含む２値テスト（ＳＥＴ）演算のセットのうちの一つである。ある実施の形態では、論理テスト演算の第１、第２及び第３のオペランドは、整数オペランド又は浮動小数点オペランドである。一部の実施の形態では、サポートされている演算は、第１、第２及び第３のオペランドを操作する浮動小数点乗算加算（ＦＭＡＤ）演算を更に含む。その他の実施の形態では、サポートされている演算は、ビット単位ブールＡＮＤ演算、ビット単位ブールＯＲ演算、及び、ビット単位ブールＸＯＲ演算を更に含む。
【００１９】
[0019]本発明の別の態様によれば、マイクロプロセッサが、プログラム演算を実行するように構成された機能ユニットを有する実行コアを備える。少なくとも１台の機能ユニットは、汎用機能ユニットであり、当該汎用機能ユニットは、第１、第２及び第３のオペランドを操作する乗算加算（ＭＡＤ）演算と、第１、第２及び第３のオペランドのうちの少なくとも一つを操作する論理テスト演算とを含む複数のサポートされた演算を実行する能力を備えている。汎用機能ユニットは、入力セクション、乗算パイプライン、テストパイプライン、加算パイプライン、及び、出力セクションを備える。入力セクションは、第１、第２及び第３のオペランドと、複数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第１のオペランドと第２のオペランドの積を計算し、計算された積を第１の中間結果として選択するように較正可能である。テストパイプラインは入力セクションに結合され、制御信号に応じて、第１、第２及び第３のオペランドのうちの一つ以上に関する比較を実行し、比較の結果を第２の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第１の中間結果と第２の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。出力セクションは演算結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。
【００２０】
[0020]本発明の更に別の態様によれば、マイクロプロセッサの機能ユニットを動作させる方法が提供される。オペコード及び一つ以上のオペランドが受け取られ、オペコードが複数のサポートされている演算のうち一つ以上のオペランドに関して実行されるべき一つの演算を指定する。オペコード及び一つ以上のオペランドに応じて、機能ユニット内の乗算パイプラインが第１の中間結果を生成するように動作させられ、機能ユニット内のテストパイプラインが第２の中間結果を生成するように動作させられる。機能ユニット内の加算パイプラインが、第１の中間結果と第２の中間結果を加算し、演算結果を生成するように動作させられる。機能ユニットの出力セクションが、演算結果から最終結果を計算するように動作させられる。サポートされている演算は、第１、第２及び第３のオペランドを操作する乗算加算（ＭＡＤ）演算と、第１、第２及び第３のオペランドのうちの少なくとも一つを操作する論理テスト演算と、を含む。
【００２１】
[0021]本発明の更なる態様によれば、プロセッサの汎用機能ユニットは、入力セクション、乗算パイプライン、加算パイプライン、指数パイプライン、及び、出力セクションを備える。入力セクションは、第１、第２及び第３のオペランドと、複数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第１のオペランドと第２のオペランドの積を計算し、計算された積を第１の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第１の中間結果と第２の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。指数パイプラインは入力セクションに結合され、制御信号に応じて、第１、第２及び第３のオペランドのうちの一つ以上に関する指数計算を実行し、指数計算の結果を指数結果として選択するように較正可能である。出力セクションは演算結果及び指数結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。サポートされている演算は、第１、第２及び第３のオペランドを操作する乗算加算（ＭＡＤ）演算と、第１のオペランドを入力フォーマットからターゲットフォーマットへ変換するフォーマット変換演算とを含む。
【００２２】
[0022]整数演算と浮動小数点演算の種々の組み合わせをサポートすることができる。例えば、ある実施の形態では、整数ＭＡＤ演算がサポートされ、入力フォーマットとターゲットフォーマットのうちの少なくとも一方が整数フォーマットであるフォーマット変換演算が更にサポートされている。別の実施の形態では、浮動小数点ＭＡＤ演算がサポートされ、入力フォーマットとターゲットフォーマットのうち少なくとも一方が浮動小数点フォーマットであるフォーマット変換演算が更にサポートされている。更に別の実施の形態では、ＭＡＤ演算は、選択的に、浮動小数点ＭＡＤ演算と整数ＭＡＤ演算のいずれかである。
【００２３】
[0023]本発明の別の態様によれば、マイクロプロセッサが、プログラム演算を実行するように構成された機能ユニットを有する実行コアを備える。少なくとも１台の機能ユニットは、汎用機能ユニットであり、当該汎用機能ユニットは、第１、第２及び第３のオペランドを操作する少なくとも乗算加算（ＭＡＤ）演算と、第１のオペランドを入力フォーマットからターゲットフォーマットへ変換するフォーマット変換演算とを含む複数のサポートされた演算を実行する能力を備えている。汎用機能ユニットは、入力セクション、乗算パイプライン、加算パイプライン、指数パイプライン、及び、出力セクションを備える。入力セクションは、第１、第２及び第３のオペランドと、複数のサポートされている演算のうちの実行されるべき一つの演算を指定するオペコードとを受け取るように構成され、更に、オペコードに応じて制御信号を生成するように構成されている。乗算パイプラインは入力セクションに結合され、制御信号に応じて、第１のオペランドと第２のオペランドの積を計算し、計算された積を第１の中間結果として選択するように較正可能である。加算パイプラインは、乗算セクション及びテストパイプラインに結合され、制御信号に応じて、第１の中間結果と第２の中間結果の和を計算し、計算された和を演算結果として選択するように較正可能である。指数パイプラインは入力セクションに結合され、制御信号に応じて、第１、第２及び第３のオペランドのうちの一つ以上に関する指数計算を実行し、指数計算の結果を指数結果として選択するように較正可能である。出力セクションは演算結果及び指数結果を受け取るように結合され、制御信号に応じて、サポートされている演算のうちのオペコードによって指定された一つの演算の最終結果を生成するように較正可能である。
【００２４】
[0024]本発明の更に別の態様によれば、マイクロプロセッサの機能ユニットを動作させる方法が提供される。オペコード及び一つ以上のオペランドが受け取られ、オペコードが複数のサポートされている演算のうち一つ以上のオペランドに関して実行されるべき一つの演算を指定する。オペコード及び一つ以上のオペランドに応じて、機能ユニット内の乗算パイプラインが、第１の中間結果及び第２の中間結果を生成するように動作させられ、機能ユニット内のテストパイプラインが、第２の中間結果を生成するように動作させられる。機能ユニット内の指数パイプラインが、指数結果及びアライメント制御信号を生成するように動作させられる。機能ユニット内の加算パイプラインが、第１の中間結果と第２の中間結果を加算し、演算結果を生成するように、アライメント制御信号に応じて動作させられる。サポートされている演算は、少なくとも、第１、第２及び第３のオペランドを操作する乗算加算（ＭＡＤ）演算と、第１のオペランドを入力フォーマットからターゲットフォーマットへ変換するフォーマット変換演算とを含む。
【００２５】
[0025]以下の詳細な説明は、添付図面と併せて、本発明の本質及び利点の更なる理解をもたらすものである。
【発明の詳細な説明】
【００２６】
[0042]本発明の実施の形態は、グラフィックスプロセッサのような、多数の高速計算を実行する能力を備えたプロセッシングシステムの高速汎用機能ユニットを提供する。ある実施の形態では、機能ユニットは、整数又は浮動小数点フォーマットの入力オペランドＡ、Ｂ、Ｃに関してＡ×Ｂ＋Ｃを計算する３値乗算加算（「ＭＡＤ」）演算を、乗算器ツリー及び加算器回路を有するパイプラインを用いて、サポートする。ＭＡＤパイプラインのハードウェアを利用して、機能ユニットは、その他の整数及び浮動小数点算術演算を更にサポートする。機能ユニットは、多種多様な比較、フォーマット変換、及び、ビット単位演算を、僅かな規模の付加的な回路だけを用いてサポートするように更に拡張することができる。
【００２７】
I．  システム概要
Ａ．  グラフィックスプロセッサ
[0043]図１は本発明の実施の形態に係るコンピュータシステム１００のブロック図である。コンピュータシステム１００は、バス１０６を介して通信する中央処理ユニット（ＣＰＵ）１０２とシステムメモリ１０４とを備える。ユーザ入力は、バス１０６に接続された１台以上のユーザ入力装置１０８（例えば、キーボード、マウス）から受け入れられる。ビジュアル出力は、システムバス１０６に接続されたグラフィックスプロセッシングサブシステム１１２の制御下で動作するピクセルベースのディスプレイ装置１１０（例えば、従来型のＣＲＴ又はＬＣＤベースのモニター）上に提供される。システムディスク１２８、及び、１台以上のリムーバル記憶装置１２９（例えば、フロッピーディスクドライブ、コンパクトディスク（ＣＤ）ドライブ、及び／又は、ＤＶＤドライブ）のようなその他のコンポーネントは、同様にシステムバス１０６に接続されていてもよい。システムバス１０６は、ＰＣＩ（ペリフェラル・コンポーネント・インターコネクト）、ＡＧＰ（アドバンスト・グラフィックス・プロセッシング）、及び／又は、ＰＣＩ−エクスプレス（ＰＣＩ−Ｅ）といった一つ以上の様々なバスプロトコルを使用して実施され、ノースブリッジ及びサウスブリッジ（図示せず）のような適切な「ブリッジ」チップが種々のコンポーネント及び／又はバスを相互接続するために設けられていてもよい。
【００２８】
[0044]グラフィックスプロセッシングサブシステム１１２は、グラフィックスプロセッシングユニット（ＧＰＵ）１１４及びグラフィックスメモリ１１６を有し、プログラマブルプロセッサ、特定用途向け集積回路（ＡＳＩＣ）及びメモリ装置のような１台以上の集積回路装置を使用して実施され得る。ＧＰＵ１１４は、レンダリングモジュール１２０、メモリインターフェイスモジュール１２２、及び、スキャンアウトモジュール１２４を有する。レンダリングモジュール１２０は、システムバス１０６を介して供給されたグラフィックスデータからのピクセルデータ生成（例えば、種々の２次元及び３次元レンダリングアルゴリズムの実施）、ピクセルデータを格納し更新するためのグラフィックスメモリ１１６との相互作用などに関係した種々のタスクを実行するように構成されてもよい。レンダリングモジュール１２０は、好適には、ＣＰＵ１０２上で動く種々のプログラムによって供給された２次元又は３次元シーンデータからピクセルデータを生成するように構成される。レンダリングモジュール１２０の特有のコンフィギュレーションは必要に応じて変更され得るものであり、その詳細な説明は、本発明を理解するために重要ではないので、省略する。
【００２９】
[0045]メモリインターフェイスモジュール１２２は、レンダリングモジュール１２０及びスキャンアウト制御ロジック１２４と通信し、グラフィックスメモリ１１６とのあらゆる相互作用を管理する。メモリインターフェイスモジュール１２２は、システムバス１０６から受け取られたピクセルデータを、レンダリングモジュール１２０による処理無しで、グラフィックスメモリ１１６へ書き込むための経路を有することもある。メモリインターフェイスモジュール１２２の特有のコンフィギュレーションは必要に応じて変更され得るものであり、その詳細な説明は、本発明を理解するために重要ではないので、省略する。
【００３０】
[0046]グラフィックスメモリ１１６は、一般的に従来型の設計よりなる１台以上の集積回路メモリ装置を使用して実施されるものであり、ピクセルバッファ１２６のような、種々の物理的又は論理的区画を含み得る。ピクセルバッファ１２６は、画像（又は、画像の一部）のピクセルデータを格納し、当該ピクセルデータは、スキャンアウト制御ロジック１２４によって読み出され処理され、表示のためにディスプレイ装置１１０へ伝送される。このピクセルデータは、例えば、システムバス１０６を介してＧＰＵ１１４のレンダリングモジュール１２０へ供給されるか、又は、ＣＰＵ１０２上で動く種々のプロセスによって生成され、システムバス１０６を介してピクセルバッファ１２６へ供給された２次元又は３次元シーンデータから生成されてもよい。
【００３１】
[0047]スキャンアウトモジュール１２４は、ＧＰＵ１１４と共にシングルチップに集積化されるか、又は、別個のチップに実施されるものであり、ピクセルバッファ１１８からピクセルカラーデータを読み出し、表示すべきデータをディスプレイ装置１１０へ転送する。ある実施の形態では、スキャンアウトモジュール１２４は等時的に動作し、ＧＰＵ１１４内で、又は、システム１００内のその他の箇所で発生するその他の活動とは無関係に所定のリフレッシュレート（例えば、８０Ｈｚ）でピクセルデータのフレームをスキャンアウトする。一部の実施の形態では、所定のリフレッシュレートはユーザ選択可能なパラメータでもよく、スキャンアウト順序は、表示フォーマット（例えば、インターレース走査又はプログレッシブ走査）に応じて適切に変更され得る。スキャンアウトモジュール１２４は、特定の表示ハードウェアのためのカラー値の調整、及び／又は、ピクセルバッファ１２６からのピクセルデータを、例えば、グラフィックスメモリ１１６、システムメモリ１０４、又は、別のデータソース（図示せず）から得られるビデオ又はカーソルオーバーレイ画像などのデータと合成することによる複合スクリーン画像の生成のようなその他の操作も実行できる。スキャンアウトモジュール１２４の特定のコンフィギュレーションは必要に応じて変更され得るものであり、その詳細な説明は、本発明を理解するために重要ではないので、省略する。
【００３２】
[0048]システム１００の動作中に、ＣＰＵ１０２は、オペレーティングシステムプログラム、アプリケーションプログラム、及び、グラフィックスプロセッシングサブシステム１１２のためのドライバプログラムのような種々のプログラムを実行する。ドライバプログラムは、技術的に知られているように、アプリケーションプログラム及びオペレーティングシステムプログラムがグラフィックスプロセッシングサブシステム１１２の種々の機能を呼び出せるようにするＯｐｅｎＧＬ、Ｍｉｃｒｏｓｏｆｔ  ＤｉｒｅｃｔＸ、又は、Ｄ３Ｄのような従来型のアプリケーションプログラムインターフェイス（ＡＰＩ）を実施できる。グラフィックスプロセッシングサブシステム１１２の動作は、適切なコマンドバッファの使用によって、その他のシステム動作と非同期に行われてもよい。
【００３３】
[0049]本明細書で説明するシステムは説明のための例であり、変形と変更が可能であることが認識できるであろう。ＧＰＵは、例えば、１台以上の集積回路装置のような適当なテクノロジーを使用して実施することができる。ＧＰＵは、１台以上のこのようなプロセッサを含む拡張カードに実装されるか、システムマザーボード上に直接的に実装されるか、又は、システムチップセットコンポーネント（例えば、一つの一般に使用されているＰＣシステムアーキテクチャのノースブリッジチップ）に集積化されてもよい。グラフィックスプロセッシングサブシステムは、任意の量の専用グラフィックスメモリを有することができ（ある種の実施は専用グラフィックスメモリをもたない）、システムメモリと専用グラフィクスメモリを組み合わせて使用してもよい。特に、ピクセルバッファは、必要に応じて、専用グラフィックスメモリ又はシステムメモリで実施されてもよい。スキャンアウト回路は、ＧＰＵと集積化されてもよく、又は、別個のチップに設けられてもよく、また、例えば、１台以上のＡＳＩＣ、プログラマブルプロセッサエレメント、その他の集積回路テクノロジー、又は、それらの何らかの組み合わせを使用して実施することができる。更に、本発明を具現化するＧＰＵは、汎用コンピュータシステム、ビデオゲームコンソール及びその他の特定用途コンピュータシステム、ＤＶＤプレーヤー、携帯電話機、又は、携帯情報端末のようなハンドヘルド装置などを含む多種多様な装置に組み込まれてもよい。
【００３４】
Ｂ．  実行コア
[0050]図２は本発明の実施の形態に係る実行コア２００のブロック図である。例えば、実行コア２００は、上記のＧＰＵ１１４のレンダリングモジュール１２０のためのプログラマブルシェーダー等で実施し得るものであり、種々の計算を実行する命令の任意のシーケンスを実行するように構成されている。実行コア２００は、フェッチ及びディスパッチユニット２０２と、発行ユニット２０４と、汎用乗算加算（ＭＭＡＤ）機能ユニット２２０と、複数（Ｍ台）のその他の機能ユニット（ＦＵ）２２２と、レジスタファイル２２４と、を備える。各機能ユニット２２０、２２２は指定された演算を実行するように構成されている。ＭＭＡＤユニット２２０によって実行される演算については後述する。その他の機能ユニット２２２は、一般的に従来型の設計からなり、超越関数計算（例えば、サイン、コサイン、指数、及び、対数など）、逆数、テクスチャフィルタリング、メモリアクセス（例えば、ロード演算及びストア演算）、整数算術又は浮動小数点算術などのような多種多様の演算をサポートできる。
【００３５】
[0051]実行コア２００の動作中に、フェッチ及びディスパッチユニット２０２は、命令ストア（図示せず）から命令を取得し、命令を復号し、オペランド参照又はオペランドデータが関連付けられたオペコードとして、命令を発行ユニット２０４へディスパッチする。命令毎に、発行ユニット２０４は、例えば、レジスタファイル２２４から、参照されたオペランドを取得する。命令の全オペランドの準備が完了したときに、発行ユニット２０４は、オペコード及びオペランドをＭＭＡＤユニット２２０又は別の機能ユニット２２２へ送信することにより命令を発行する。発行ユニット２０４は、好適には、所与の命令を実行するために適切な機能ユニットを選択するためのオペコードを使用する。フェッチ及びディスパッチ回路２０２と発行回路２０４は、従来型のマイクロプロセッサアーキテクチャ及び技術を使用して実施することができるものであり、それらの詳細な説明は、本発明を理解するために重要ではないので、省略する。
【００３６】
[0052]ＭＭＡＤユニット２２０及びその他の機能ユニット２２２は、オペコード及び関連するオペランドを受け取り、指定された操作をオペランドに実行する。結果データは、結果値（ＯＵＴ）と条件コード（ＣＯＮＤ）の形式で提供される。この条件コードは、結果値ＯＵＴが正であるか、又は、負であるか、又は、（後述する）特別の値であるか否かといった、結果値ＯＵＴに関する一般的な情報を提供するものである。一部の実施の形態では、条件コードＣＯＮＤは、機能ユニットの動作中にエラー又は例外が発生したか否かを更に示す。結果データは、データ転送パス２２６を介してレジスタファイル２２４（又は別の宛先）へ転送される。
【００３７】
[0053]図２の実行コアは説明のための例であり、変形と変更が可能であることが認識されるであろう。フェッチ及びディスパッチユニット２０２と発行ユニット２０４は、必要に応じてイン・オーダー命令発行又はアウト・オブ・オーダー命令発行、投機実行モードなどをもつスカラーアーキテクチャ又はスーパースカラーアーキテクチャを含む、任意の所望のマイクロアーキテクチャを実施することができる。一部のアーキテクチャでは、発行元は、複数の機能ユニットのためのオペコード及び／又はオペランドを含む長命令語を発行することができる。実行コアはパイプライン型機能ユニットの系列を更に含み、あるステージの機能ユニットからの結果が、レジスタファイルへ直接的に転送されるのではなく、後段ステージの機能ユニットへ転送され、機能ユニットは単一の長命令語又は別々の命令によって制御することができる。本教示を入手できる当業者は、ＭＭＡＤユニット２２０は、任意のマイクロプロセッサにおける機能ユニットとして実施することができ、グラフィックスプロセッサ、又は、特定のプロセッサ、又は、実行コアアーキテクチャに限定されるものでないことを認識するであろう。
【００３８】
Ｃ．  ＭＭＡＤユニット
[0054]本発明の実施の形態によれば、実行コア２００は、ＭＭＡＤユニット２２０を有し、当該ＭＭＡＤユニット２２０は、最大で（ここでは、Ａ、Ｂ及びＣとして表示される）三つのオペランドに関する多数の整数及び浮動小数点演算をサポートするする。ある実施の形態では、ＭＭＡＤユニット２２０は、整数又は浮動小数点オペランドのＡ×Ｂ＋Ｃを計算する乗算加算（ＭＡＤ）パイプラインを実施し、このパイプライン内の種々の回路は、多数の他の整数演算及び浮動小数点演算を実行するために利用される。ＭＭＡＤユニット２２０の動作は、上述のようにオペランド及びオペコードをＭＭＡＤユニット２００へ供給する発行回路２０４によって制御される。発行回路２０４によってオペランドの各セットと共に供給されたオペコードは、ＭＭＡＤユニット２２０の動作を制御し、その演算のうちの一つがオペランドのセットに対して実行されることを選択的に可能にさせる。
【００３９】
[0055]ＭＭＡＤユニット２２０は、好適には、整数と浮動小数点の両方のフォーマットを含む多種多様のフォーマットのオペランドを取り扱うように設計される。本明細書に記載した実施の形態では、ＭＭＡＤユニット２２０は、（本明細書においてｆｐ３２及びｆｐ１６と称される）２通りの浮動小数点フォーマットと、（本明細書においてｕ８、ｕ１６、ｕ３２、ｓ８、ｓ１６、ｓ３２と称される）６通りの整数フォーマットとを取り扱う。これらのフォーマットをここで説明する。
【００４０】
[0056]「ＦＰ３２」は、標準的なＩＥＥＥ７５４の単精度浮動小数点フォーマットを指し、通常の浮動小数点数が１ビットの符号部と８ビットの指数ビットと２３ビットの有効数字ビットとによって表現される。指数は１２７だけ上方へバイアスされ、２−１２６から２１２７までの範囲内の指数が１から２５４までの整数を使用して表現されるようになる。「通常の」数の場合、２３ビットの有効ビットは、整数部として暗黙の１を含む２４ビットの仮数の少数部として解釈される。指数ビットが全て零である数は非正規数と呼ばれ、仮数部に暗黙の先頭の１が存在しないものとして解釈され、このような数は、例えば、計算のアンダーフローを表現することができる。指数ビットが全て１であり、有効数字ビットが全て零である（正又は負の）数は、（正又は負の）ＩＮＦと呼ばれ、この数は、例えば、計算のオーバーフローを表現できる。指数ビットが全て１であり、有効数字ビットが非零である数は非数（ＮａＮ）と呼ばれ、例えば、定義されていない値を表現するために使用することができる。零は、特殊数であると更にみなされ、指数ビットと有効数字ビットの全てが零にセットされることによって表現される。
【００４１】
[0057]「ＦＰ１６」は、グラフィックスプロセッシングにおいて多く使用される半精度フォーマットを指す。ｆｐ１６フォーマットは、ｆｐ１６が５ビットの指数ビットと１０ビットの有効数字ビットを有することを除いて、ｆｐ３２と類似している。指数は１５だけ上方へバイアスされ、通常の数の有効数字部は、整数部として暗黙の「１」を含む１１ビットの仮数の小数部として解釈される。非正規数、ＩＮＦ、ＮａＮ及び零を含む特殊数は、ｆｐ３２と同じように定義される。
【００４２】
[0058]整数フォーマットは、本明細書においては、フォーマットが符号付きであるか、又は、符号無しであるかを示すイニシャル「ｓ」又は「ｕ」と、ビットの総数を表す数（例えば、８、１６、３２）によって指定されており、従って、ｓ３２は符号付き３２ビット整数を指し、ｕ８は符号無し８ビット整数を指し、以下同様である。符号付きフォーマットの場合、好適には、２の補数表現が使用される。よって、ｕ８の場合の範囲は［０，１５］であり、ｓ８の場合の範囲は［−８，７］である。本明細書で使用される全フォーマットにおいて、最上位ビット（ＭＳＢ）はビットフィールドの左にあり、最下位ビット（ＬＳＢ）は右にある。
【００４３】
[0059]本明細書では説明の目的のために、特定のフォーマットを定義して、参照さしており、また、ＭＭＡＤユニットはこれらのフォーマットの組み合わせ又は異なったフォーマットをサポートすることができることを理解されたい。
【００４４】
[0060]種々のオペランドフォーマットを取り扱うことに加えて、ＭＭＡＤユニット２２０は、好適には、多数の異なったオペランドをサポートするように構成される。例えば、図３は、本明細書に説明したＭＭＡＤユニット２２０の実施の形態によって実行され得る演算のタイプの一覧表である。浮動小数点算術演算（３０２に掲載されている）は、ｆｐ３２又はｆｐ１６フォーマットのオペランドに対して実行可能であり、結果は入力フォーマットで返される。一部の実施の形態では、浮動小数点算術は、一つのフォーマット、例えば、ｆｐ３２だけにおいてサポートされる。加算（ＦＡＤＤ）、乗算（ＦＭＵＬ）、及び、乗算加算（ＦＭＡＤ）演算と共に、種々のオペランド比較演算がサポートされている。その中には、Ｃが零以上であり、Ｂがそうではない場合にＡを選択する３値条件付き選択演算（ＦＣＭＰ）と、オペランドＡとオペランドＢのうちの大きい方を返す最大値演算（ＦＭＡＸ）及び二つのうちの小さい方を返す最小値演算（ＦＭＩＮ）とが含まれる。２値テスト演算（ＦＳＥＴ）は、オペランドＡとオペランドＢに対する多数の２値関係テストのうちの一つを実行し、テストが満たされるか否かを示すブール値を返す。本実施の形態では、テスト可能な２値関係は、大なり（Ａ＞Ｂ）、小なり（Ａ＜Ｂ）、等価（Ａ＝Ｂ）、及び、順序無し（Ａ又はＢの何れかがＮａＮであるならば、真であるＡ？Ｂ）、並びに、否定（例えば、Ａ≠Ｂ）、及び、種々の組み合わせテスト（例えば、Ａ≧Ｂ、Ａ＜＞Ｂ、Ａ？＝Ｂなど）を含む。
【００４５】
[0061]整数算術演算（３０４に掲載されている）は、整数フォーマットのオペランドに対して実行され、結果が入力フォーマットで返される。サポートされている整数算術演算は、加算（ＩＡＤＤ）、乗算（ＩＭＵＬ）、乗算加算（ＩＭＡＤ）、条件付き選択（ＩＣＭＰ）、最大値（ＩＭＡＸ）、最小値（ＩＭＩＮ）、及び、２値テスト（ＩＳＥＴ）を含み、それらの全てが浮動小数点の対応するものと同じように定義される。更にサポートされているのは、｜Ａ−Ｂ｜＋Ｃを計算する絶対差の和（ＩＳＡＤ）演算である。
【００４６】
[0062]ビット演算（３０６に掲載されている）は、オペランドを３２ビットフィールドとして取り扱う。論理演算（ＬＯＰ）は、２値ブール演算ＡＮＤ（Ａ＆Ｂ）、ＯＲ（Ａ｜Ｂ）、及び、ＸＯＲ（Ａ∧Ｂ）を含む。ＬＯＰの結果は、オペランドＡとオペランドＢの対応するビットに関する演算の実行結果を示す３２ビットフィールドである。左シフト（ＳＨＬ）及び右シフト（ＳＨＲ）演算もまたサポートされ、オペランドＡがシフトされるべきビットフィールドを供給するために使用され、オペランドＢがシフト量を指定するために使用される。右シフトは論理的（零が新しいＭＳＢ位置に挿入される）でもよく、算術的（符号ビットが新しいＭＳＢ位置に拡張される）でもよい。
【００４７】
[0063]フォーマット変換演算（３０８に掲載されている）は、オペランドＡを一方のフォーマットから別のフォーマットへ変換する。「Ｆ２Ｆ」は、一般に、ある浮動小数点フォーマットから別の浮動小数点フォーマットへの変換を指す。一部の実施の形態では、これらの変換は、整数Ｎを用いる２Ｎによるオペランドのスケーリングも含む。更に、整数丸め付きのＦ２Ｆ変換もまたサポートされている。「Ｆ２Ｉ」は、浮動小数点フォーマットから整数フォーマットへの変換を指す。Ｆ２Ｆ変換の場合と同様に、オペランドは２Ｎによってスケール変換可能である。「Ｉ２Ｆ」は、一般に、整数から浮動小数点への変換を指し、このような演算は、２Ｎスケール変換と同様に、否定又は絶対値演算と組み合わせることが可能である。「Ｉ２Ｉ」は一方の整数フォーマットから別の整数フォーマットへの変換を指し、これらの変換も同様に絶対値又は否定演算と組み合わせる事が可能である。「ＦＲＣ」は、浮動小数点入力オペランドの小数部を返す「端数」演算である。
【００４８】
[0064]ｆｐ３２引数還元演算（３１０に掲載されている）は、レンジリダクション演算（ＰＰＯ）とも呼ばれ、（ｓｉｎ（ｘ）、ｃｏｓ（ｘ）、又は、２ｘのような）超越関数の引数ｘを使い易い数値区間に制約するため使用され、その結果、超越関数は、（例えば、図２の機能ユニット２２２のうちの１台である）機能ユニットを適切に構成することにより計算される。本実施の形態では、超越関数命令が機能ユニットへ発行される前に、その引数がオペランドＡとしてＭＭＡＤユニット２２０へ供給される。サイン関数及びコサイン関数の場合、オペランドＡは、区間［０，２π）にマッピングされ、（ＥＸ２と表示されることもある）指数関数の場合、オペランドＡは、数Ｎ＋ｆとして表現され、ここで、Ｎは整数であり、ｆは区間［０，１）である。技術的に知られているように、このような引数還元は、可能な引数の組を有界な範囲に制限することにより、超越関数のための機能ユニットの設計を簡単化することが可能である。
【００４９】
[0065]セクションII及びIIIでは、図３に示した演算の全てを実行可能であるＭＭＡＤユニット２２０について説明する。セクションIIはＭＭＡＤユニット２２０の回路構造について説明し、セクションIIIはその回路が図３に掲載した演算を実行するためにどのように使用され得るかを説明する。本明細書に記載したＭＭＡＤユニット２２０は説明のための例であり、その他の、又は、異なる機能の組み合わせが回路ブロックの適切な組み合わせを使用してサポートされ得ることが理解されるべきである。
【００５０】
II．  典型的なＭＭＡＤユニット構造
[0066]図４は、図３に示した全演算をサポートする本発明の実施の形態によるＭＭＡＤユニット２２０の簡略化されたブロック図である。本実施の形態では、ＭＭＡＤユニット２２０は、全演算のために使用される８ステージのパイプラインを実施する。各プロセッササイクルで、ＭＭＡＤユニット２２０は、（例えば、図２の発行回路２０４から）オペランド入力パス４０２、４０４、４０６を介して三つの新しいオペランド（Ａ０、Ｂ０、Ｃ０）を受け取り、オペコードパス４０８を介して実行されるべき演算を示すオペコードを受け取る。本実施の形態では、演算は図３に示した任意の演算でもよい。演算に加えて、オペコードは、好適には、オペランドの入力フォーマット（及び、結果用に使用する出力フォーマットであって、入力フォーマットと同じである場合と同じではない場合とがある出力フォーマット）を示す。図３に示した演算は、例えば、ｆｐ３２オペランドを伴うＦＭＵＬのためのあるオペコードと、ｆｐ１６オペランドを伴うＦＭＵＬのための異なったオペコードのように、複数のオペコードが演算に関連付けられていることに注意すべきである。
【００５１】
[0067]ＭＭＡＤユニット２２０は、パイプラインステージ０−７の全部を使用して各演算を処理し、信号パス４１０に３２ビット結果値（ＯＵＴ）を生成し、信号パス４１２に対応する条件コード（ＣＯＮＤ）を生成する。これらの信号は、アーキテクチャに依存して、例えば、図２に示すようにレジスタファイル２２４へ伝搬され、又は、プロセッサコアのその他のエレメントへ伝搬される。ある実施の形態では、各ステージはプロセッササイクルに対応しており、その他の実施の形態では、一つのステージ内に示したエレメントが、複数のプロセッササイクルに亘って分割されてもよく、又は、２段（又はそれ以上）のステージからのエレメントが一つのプロセッササイクルに統合されてもよい。ある実装形態では、１．５ＧＨｚで１０ステージ（サイクル）であった。
【００５２】
[0068]セクションII．Ａは、ＭＭＡＤパイプラインの概要を提供し、セクションII．Ｂ−Iは各ステージの回路ブロックを詳細に説明する。
【００５３】
Ａ．  ＭＭＡＤパイプライン
[0069]パイプラインについては、ステージ０〜２の回路ブロックがＦＭＡＤ演算中にどのように使用されるかを参照することで、まず理解することができる。ステージ０は、発行ユニット２０４又はＭＭＡＤユニット２２０において任意に実施することができるオペランドフォーマット化ステージであり、（３２ビットより短い）オペランドを揃え、一貫した形で表現する。ステージ１−３はＦＭＡＤ演算の乗算（Ａ×Ｂ＝Ｐ）部分を実行し、ステージ４−６は加算（Ｐ＋Ｃ）部分を実行する。ステージ７においては、最終結果が、信号パス４１０、４１２に分配するためフォーマット化される。ステージ７は、後述するように、特定の数の入力、オーバーフロー、アンダーフロー、又は、その他の条件の場合に、特定の出力を生成する制御ロジックを更に含む。
【００５４】
[0070]本発明の説明を容易化するため、ＭＭＡＤユニット２２０の３本の主要な内部データパスを、図４において点線の境界によって示し、本明細書では、「仮数パス」４１３、「指数パス」４１５、及び、「テストパス」４１７と称する。これらの名前はある特定の演算（例えば、ＦＭＡＤ又は比較）中に各パスに示された種々の回路ブロックによって実行される機能を言及しているが、内部データパス４１３、４１５、４１７の何れかに沿った回路ブロックは、演算に依存する形で多種多様の用途のために利用され得ることが明白になるであろう。
【００５５】
[0071]仮数パス４１３に沿って、ステージ１−３は、浮動小数点オペランドＡ及びＢの仮数を乗算する回路ブロックを有する。ステージ２の乗算器ブロック４１４は、乗算器前段ブロック４１６及び乗算器後段ブロック４１８によってサポートされている。乗算結果は、ステージ３の終わりに結果Ｒ３としてパス４２１上に供給される。ステージ４−６は、アライメントブロック４２０及び端数和ブロック４２２を有しており、これらは、結果Ｒ３ａを、浮動小数点オペランドＣの仮数と揃えて、当該仮数と加算する。この浮動小数点オペランドＣは、テストパス４１７を介してパス４１９上に結果Ｒ３ｂとして供給される。最終的な仮数は、正規化ブロック４２３において正規化され、結果Ｒ６としてステージ６の出力でパス４２５上に供給される。
【００５６】
[0072]指数パス４１５は、浮動小数点オペランドＡ、Ｂ及びＣの（Ｅａ、Ｅｂ、Ｅｃによって表示された）指数部に対して適切な演算を実行して、ＦＭＡＤ演算をサポートする。ステージ１の指数積ブロック４２４は、例えば、ＥａとＥｂを加算し、バイアス（例えば、１２７）を減算することにより、積Ａ×Ｂの指数を計算し、ステージ２の指数和ブロック４２６は、和（Ａ×Ｂ）＋Ｃの有効最終指数（ＥＦＥ）と、ステージ４のアライメントブロック４２０の動作を制御するために使用される指数差（Ｅｄｉｆｆ）とを求める。指数パス４１５に沿ったその後の回路ブロックは、ステージ３の右シフトカウントブロック４２８、ステージ４の指数インクリメントブロック４３０、及び、ステージ６の指数デクリメントブロック４３２を含んでおり、仮数結果の特性に基づいて指数ＥＦＥを調整し、最終指数Ｅ０をパス４２７上に供給する。
【００５７】
[0073]テストパス４１７の回路ブロックは、主として、ＦＭＡＤ以外の演算、特に、整数及び浮動小数点の比較演算のために使用される。テストパス４１７は、ステージ１のビット単位論理ブロック４３４と、ステージ３の比較ロジックブロック４３６とを含む。これらのエレメントの動作については後述する。ＦＭＡＤ演算中に、テストパス４１２は、オペランドＣの仮数をステージ３の出力でパス４１９へ伝搬する。
【００５８】
[0074]主要なデータパスと並列に、ＭＭＡＤユニット２２０は、パス４２９上に特殊数信号（ＳＰＣ）を生成するステージ１の特殊数検出回路４３８によって、特殊数（例えば、ｆｐ３２又はｆｐ１６オペランドの場合のＮａＮ、ＩＮＦ、非正規数、及び、零）も取り扱う。特殊数検出回路４３８は、全部で三つのオペランドＡ、Ｂ及びＣを受け取り、一般的に従来型の設計からなり、特殊数信号ＳＰＣは、所定の特殊数コードを用いて各オペランドの特殊数状態を示すために、オペランド毎に数ビット（例えば、３ビット）を含むことができる。特殊数信号ＳＰＣは、必要に応じてパイプラインからの結果（例えば、Ｒ６とＥ０）を特殊値で上書きするために、特殊数信号ＳＰＣを使用するステージ７の出力制御ブロック４４０といった種々の下流の回路ブロックへ供給されてもよく、その実施例については後述する。
【００５９】
[0075]パイプラインの最後で、出力制御ブロック４２０は、結果ＯＵＴを信号パス４１０に供給し、条件コードＣＯＮＤを信号パス４１２に供給する。条件コードは、好適には結果の他に数ビットを含んでおり、結果の性質に関する一般的な情報を搬送する。例えば、条件コードは、結果が正、負、零、ＮａＮ、ＩＮＦ、非正規数などであるか否かを示すビットを含んでいてもよい。技術的に知られているように、条件コードが結果と共に供給される場合には、その結果を後に使用する際に、処理中に結果自体ではなく、条件コードを使用することができる。一部の実施の形態では、条件コードは、演算の実行中に例外又はその他のイベントの発生を示すために使用される。別の実施の形態では、条件コードが完全に省略されてもよい。
【００６０】
[0076]データパスに加えて、ＭＭＡＤユニット２２０は、ステージ０の制御ブロック４４２によって図４では表現された制御パスを更に提供する。制御ブロック４４２は、オペコードを受け取り、種々のオペコード依存型制御信号を生成する。オペコード依存型制御信号は、本明細書においては全体的に「ＯＰＣＴＬ」として示されており、パイプラインを通るデータ伝搬と同期して各回路ブロックへ伝搬される。（ＯＰＣＴＬ信号の種々の回路ブロックへの接続は図４に示していない）。後述の通り、ＯＰＣＴＬ信号を使用して、ＭＭＡＤユニット２２０の種々の回路ブロックの動作を、オペコードに応じて、有効、無効、または、別の態様で制御することができ、その結果、異なった演算を同じパイプラインエレメントを使用して実行することができる。本明細書において参照する種々のＯＰＣＴＬ信号は、オペコード自体、又は、例えば、制御ブロック４４２内に実施された組み合わせ論理によって、オペコードから導出されたある種のその他の信号を含むことができる。一部の実施の形態では、制御ブロック４４２は、数段のパイプラインステージ内の複数の制御ブロックを使用して実施される。所与の演算中に異なるブロックに供給されたＯＰＣＴＬ信号は、同じ信号であってもよく、又は、異なる信号であってもよいことが理解されるべきである。本開示事内容に鑑みて、当業者は適当なＯＰＣＴＬ信号を構築することが可能であろう。
【００６１】
[0077]所与のステージの回路ブロックは異なる量の処理時間を必要とし、且つ、特定のステージで必要とされる時間は演算間で変化するであろうことに注意すべきである。したがって、ＭＭＡＤユニット２２０は、あるパイプラインステージから別のパイプラインステージへの異なるパス上のデータの伝搬を制御するために、種々のタイミング回路及び同期回路（図４に示されていない）を更に含むこともできる。適切なタイミング回路（例えば、ラッチ、伝送ゲートなど）が使用されることもある。
【００６２】
Ｂ．  ステージ０のエレメント
[0078]本実施の形態では、８ビット（１６ビット）整数オペランドが、３２ビットオペランドの８（１６）ビットのＬＳＢとしてＭＭＡＤユニット２２０へ送出され、ｆｐ１６オペランドは、３ビットのエクストラビット（全て零）が５ビットの指数ビットの左に挿入され、１３ビットのエクストラビット（全て零）が１０ビットの端数ビットの右に挿入された「パッド」フォーマットで送出される。ステージ０の間に、フォーマット化ブロック４００は、好適には、ある種の演算のため受信されたオペランドに更なるフォーマット化を実行する。
【００６３】
[0079]図５はフォーマット化ブロック４００のコンポーネントを表すブロック図である。受け取られた各オペランドＡ０、Ｂ０、Ｃ０は、複数のパスを並列に進み、各パス上で異なった変換が適用される。８ビットのアップコンバータ５０４、５０５、５０６は、最上位ビット（ＭＳＢ）を符号拡張することによって、８ビット整数を３２ビット整数に変換する。同様に、１６ビットのアップコンバータ５０８、５０９、５１０は、符号拡張によって１６ビット整数を３２ビット整数に変換する。オペランドＡの場合、ｆｐ１６アップコンバータブロック５１２は、指数バイアスを１５から１２７へ調整することにより、ｆｐ１６オペランドをｆｐ３２オペランドに昇格させる。
【００６４】
[0080]選択マルチプレクサ（ｍｕｘ）５１４、５１５、５１６は、（上述のようにオペコードによって指定された）オペランドフォーマットに対応するＯＰＣＴＬ信号に基づいて各オペランドの正しい入力フォーマットを選択する。ｍｕｘ５１４−５１６の後に、各オペランドパスは、条件付きインバータ回路５１８、５１９、５２０を更に有しており、これら条件付きインバータ回路を使用して、全ビットを反転させることによってオペランドの１の補数を生成することができる。条件付きインバータ回路５１８−５２０は、ＯＰＣＴＬ信号とオペランドの符号ビットとによって制御される。反転が実行される具体的なケースについては後述する。
【００６５】
[0081]一部の実施の形態では、ｆｐ１６オペランド及びｆｐ３２オペランドの場合に、３３ビット表現が内部的に使用される。この表現では、先頭の暗黙の１が有効数字ビットに追加され、その結果、２４（１１）ビットの仮数ビットがｆｐ３２（ｆｐ１６）用に伝搬される。他の実施の形態では、３２ビットより小さいフォーマットの整数オペランドが３２ビットフィールド内で任意に揃えられ、フォーマット化ブロック４００は、このようなオペランドを内部３２ビットデータパスのＬＳＢへシフトする。同様に、ｆｐ１６オペランドは、パディングすることなく送出され、フォーマット化ブロック４００は、上述のようにパディングを挿入するか、又は、その他のアライメント操作を実行することができる。
【００６６】
Ｃ．  ステージ１のエレメント
[0082]図４を再び参照する。フォーマット化ブロック４００は、オペランドＡ、Ｂ及びＣをステージ１の種々のデータパスへ供給する。ステージ１は、仮数パス４１３内の乗算器前段ブロック４１６と、指数パス４１５内の指数積ブロック４２４と、テストパス４１７のビット単位論理ブロック４３４と、上述のような特殊数検出ブロック４３８とを有する。
【００６７】
[0083]図６Ａは乗算器前段ブロック４１６のブロック図である。乗算器前段ブロック４１６は、ブース３のアルゴリズムを使用して乗算のための被乗数（オペランドＡ）と乗数（オペランドＢ）を準備し、実際の乗算はステージ２の乗算器ブロック４１４で実施される。整数オペランドＡ及びＢのケースでは、乗算器前段ブロック４１６はオペランド全体を操作し、浮動小数点オペランドのケースでは、乗算器前段ブロック４１６は、先頭の暗黙の、又は、明示の「１」を含む仮数部を操作する。よって、本説明がオペランドを指す場合には、オペランド全体、又は、仮数部だけが必要に応じて使用されていることを理解すべきである。
【００６８】
[0084]図６Ａに示すように、乗算器前段ブロック４１６は、「３Ｘ」加算器６１２、ブース３型エンコーダ６１４、及び、選択乗算器（ｍｕｘ）６１６を含む。３Ｘ加算器６１２は、略従来型の設計によるものであり、オペランドＡ（被乗数）を受け取り、乗算器ブロック４１４で使用される（例えば、Ａ＋２Ａを加算することにより）３Ａを計算する。オペランドＡ及び計算された３Ａはステージ２へ転送される。ブース３型エンコーダ６１４は、略従来型の設計によるものであり、オペランドＢ（乗数）を受け取り、従来型のブース３方式の符号化を実行し、オペランドＢのビットから重複する４ビットセグメントを生成する。他の実施の形態では、ブース３方式以外の乗算アルゴリズムが使用され、適当な乗算器前段回路が本明細書に記載した特定の回路に代わって用いられる。
【００６９】
[0085]選択ｍｕｘ６１６は、ＯＰＣＴＬ信号によって制御されて、オペランドＢと、ブース３方式で符号化されたオペランドＢと、ブース３方式で符号化された形式でレジスタ６１８、６２０に格納された定数乗数（例えば、１／２π及び１．０）との間で選択を行う。選択された値は結果ＢＢとしてステージ２へ供給される。ＦＭＵＬ又はＩＭＵＬ演算の場合には、ブース３方式で符号化されたオペランドＢが選択される。その他の演算中には、選択ｍｕｘ６１６は、（例えば、後述する比較演算のため）ブース３型エンコーダ６１４の周りでオペランドＢを迂回させるように、又は、（例えば、後述の引数還元演算、又は、フォーマット変換演算のため）レジスタ６１８、６２０からの定数乗数のうちの一方を選択するように制御され得る。その他の実施の形態では、定数乗数が使用される演算の場合には、乗数は、ＭＭＡＤユニット２２０の入力でオペランドＢ０として供給され、又は、乗数のブース方式で符号化されていない表現が乗算器前段ブロック４１６の入力で選択されて、エンコーダ６１４を使用してブース方式で符号化される。
【００７０】
[0086]図６Ｂは指数積ブロック４２４を表すブロック図である。浮動小数点算術演算の場合、指数積ブロック４２４は、オペランドＡ及びＢ用の指数ビット（Ｅａ，Ｅｂ）を受け取り、それらを第１の加算器回路６２２で加算し、積Ａ×Ｂの指数を計算する。指数積ブロック４２４は、第２の加算器回路６２４を更に有しており、当該第２の加算器回路６２４は、（正でも、負でも、零でもよい）バイアスβを和Ｅａ＋Ｅｂに加算する。バイアスレジスタ６２６は、一つ以上の候補バイアス値を格納し、ＯＰＣＴＬ信号は、演算に依存した方法で適切なバイアスを選択するために使用される。例えば、ＦＭＵＬ演算中に、バイアスβは、二つのバイアスされた指数Ｅａ及びＥｂが加算されるときに、ｆｐ１６又はｆｐ３２指数バイアスを訂正するために使用される。その他の演算中に、異なる値が、後述するように、バイアスβとして選択される。指数積ブロック４２４の出力で、選択ｍｕｘ６２８は、ＯＰＣＴＬ信号に応じて、和と二つの入力指数との間で選択を行う。結果Ｅａｂはパス４３１上のステージ２へ伝搬される。
【００７１】
[0087]結果Ｅａｂは、好適には、入力指数Ｅａ、Ｅｂより１ビット多いビットを使用して表現され、指数飽和（オーバーフロー）を下流側で検出することを可能にする。例えば、指数Ｅａ及びＥｂはそれぞれが８ビットであり、Ｅａｂは９ビットである。
【００７２】
[0088]図６Ｃはビット単位論理ブロック４３４を表すブロック図である。オペランドＡ及びＢは、ＡＮＤ２回路６３０、ＯＲ２回路６３２、及び、ＸＯＲ２回路６３４に供給される。これらの回路のそれぞれは、略従来型の設計からなり、オペランドＡ及びＢの対応するビットに対して指定された論理演算を実行し、３２ビットの候補結果を提供する。並行して、条件付きインバータ６３５が、ＦＲＣ演算中にオペランドＣを反転させ、その他の演算中には変更されていないオペランドＣを通過させるように作動される。選択ｍｕｘ６３６は、ＯＰＣＴＬ信号に応じて、種々の論理演算の結果又はオペランドＣ（若しくはその反転）のうちの一つを選択し、選択されたデータ（Ｒ１）がパス４３３上でステージ２へ伝搬される。選択ｍｕｘ６３６へのＯＰＣＴＬ信号は、オペランドＣがＭＡＤ、ＡＤＤ又はＣＭＰ演算のために選択され、論理演算結果のうちの適切な一つの演算結果が論理演算のために選択され、ＸＯＲ２回路６３４からの結果がＳＥＴ演算のために伝搬されるように構成される。一部の演算では、結果Ｒ１は下流側コンポーネントにおいて使用されず、このような例では、如何なる選択が行われてもよい。
【００７３】
[0089]ステージ１はまた、図４に示す「Ｉ２Ｆバイト」回路４４４を有する。この回路は、Ｉ２Ｆフォーマット変換演算中に使用されるものであり、ＢｙｔｅＡとしてオペランドＡの８ビットのＭＳＢを選択し、パス４３５を介してＢｙｔｅＡをステージ２へ伝搬させる。Ｉ２Ｆバイト回路４４４はまた、オペランドＡの２４ビットのＬＳＢの全てが１であるか否かを判定するＡＮＤツリー（図示せず）を含む。パス４３７上のＡＮＤツリー出力信号（Ａｎｄ２４）は、オペランドＡの２４ビットのＬＳＢ全体が１であるならば１にセットされ、そうでなければ０にセットされる単一ビットであってもよい。
【００７４】
Ｄ．  ステージ２のエレメント
[0090]図４を再度参照する。ステージ２は、仮数パス４１３上の乗算器ブロック４１４と、指数パス４１５上の指数和ブロック４２６とを有する。テストパス４１７上で、パス４３３は、データＲ１を更に処理することなくステージ３へ伝搬させる。
【００７５】
[0091]図７Ａは、乗算器ツリー７００を含む乗算器ブロック４１４のブロック図である。乗算器ツリー７００において、ブースマルチプレクサ７０４は、ステージ１からオペランドＡ、計算された結果３Ａ、及び、ブース３方式で符号化されたオペランドＢＢを受け取り、ブース乗算アルゴリズムを実施する。技術的に知られているように、ブース乗算は、ブース３方式で符号化された乗数ＢＢ中の各ビットグループに対応する（被乗数Ａの倍数である）部分積の選択を伴う。得られた部分積は桁上げ保存加算器（ＣＳＡ）ツリーを使用して加算され、桁上げ保存加算器は、本実施の形態では、３台の（３：２）ＣＳＡ７０６により構成されており、当該ＣＳＡ７０６は、２台の（３：２）ＣＳＡ７０８にデータを供給し、当該ＣＳＡ７０８は、次いで、１台の（４：２）３９ビットＣＳＡ７１０にデータを供給する。ブースマルチプレクサ７０４及びＣＳＡ７０６、７０８、７１０は、略従来型の設計であってもよい。最終出力は、冗長（和、キャリー）表現での積Ａ×Ｂである。和フィールド及びキャリーフィールドは、好適には、オペランドより大きい（例えば、ある実施の形態では、それぞれが４８ビットである）。ブース乗算以外のアルゴリズムを実施する回路を含むその他の乗算器回路が代わりに用いられてもよい。
【００７６】
[0092]ある実施の形態では、乗算器は２４ビット×２４ビットまでの乗算をサポートする。より大きなオペランド（例えば、３２ビット整数）の積は、技術的に知られているように、複数の乗算演算（例えば、複数の１６ビット×１６ビット乗算演算）を使用して合成される。その他の実施の形態では、乗算器は異なるサイズを有し、例えば、３２ビット×３２ビットまでの乗算をサポートする。このような設計上の選択は、本発明に重要ではなく、チップ面積及び性能のような検討事項に基づくものである。
【００７７】
[0093]乗算器ブロック４１４はオペランドＡ及びＢのための迂回パスを更に有する。具体的には、選択ｍｕｘ７１１は、オペランドＡと、乗算器ツリー７００からの和フィールドとを受け取り、別の選択ｍｕｘ７１３は、オペランドＢと、乗算器ツリー４１０からのキャリーフィールドとを受け取る。Ｍｕｘ７１１、７１３は共通のＯＰＣＴＬ信号によって制御されて、これによって、オペランド（Ａ，Ｂ）又は乗算結果（和，キャリー）の何れかが結果Ｒ２ａ及びＲ２ｂとして選択され、パス７１５、７１７上に伝搬される。乗算演算又はＭＡＤ演算の場合、和結果及びキャリー結果が選択されるであろう。その他の演算、例えば、ＩＳＡＤ又は最大値又は最小値の場合、オペランドＡ及びＢが後述するように選択されるであろう。結果パス７１５、７１７は、好適には、通常のオペランドより大きく（例えば、３２ビットに対して４８ビット）、したがって、オペランドＡ及びＢは、ｍｕｘ７１１、７１３によって選択されるときに、必要に応じて、先頭の零又は末尾の零を埋め込むことができることに注意すべきである。
【００７８】
[0094]図７Ｂは、差回路７１４、選択ｍｕｘ７１６、及び、８ビット優先エンコーダ７１８を含む指数和ブロック７０２のブロック図である。差回路７１４は、パス４３１上の積指数Ｅａｂと、パス４３９上のオペランドＣの指数部（Ｅｃ）とを受け取り、差（Ｅａｂ−Ｅｃ）を計算する。浮動小数点加算演算又はＭＡＤ演算中に、差回路７１４は、差の符号を表現する信号Ｓｄｉｆｆをパス７２１上に供給する。この信号は、和（Ａ×Ｂ）＋Ｃのための有効最終指数（ＥＦＥ）としてＥａｂとＥｃのうちの大きい方を選択するように選択ｍｕｘ７１６を制御するために使用される。信号ＥＦＥは、パス７２３の下流側へ伝搬される。差（Ｅｄｉｆｆ）自体は、正でも負でもよく、パス７２５上の下流側コンポーネントへ伝搬される。浮動小数点加算又はＭＡＤ以外の演算の場合、指数和ブロック７０２はその他の目的のために利用され、したがって、差回路７１４は、後述のように信号Ｓｄｉｆｆ及びＥｄｉｆｆの生成を制御するＯＰＣＴＬ信号を受け取る。
【００７９】
[0095]優先エンコーダ７１８は、オペランドＡの８ビットのＭＳＢの間で（もしあれば）先頭の１の位置を特定するために、Ｉ２Ｆ変換演算中に使用される。ＭＳＢ（信号ＢｙｔｅＡ）はパス４３５を介して優先エンコーダ７１８に供給され、優先エンコーダの出力ＢＰは、（８ビットのＭＳＢの全部が零であり、出力ＢＰが零であるならば）先頭の１のビット位置から取り出された指数を表現する。Ｉ２Ｆ変換演算中に、差回路７１４は、後述するように出力選択中に信号Ａｎｄ２４を更に使用する。
【００８０】
Ｅ．  ステージ３のエレメント
[0096]ステージ３は、仮数パス４１３上の乗算器後段ブロック４１８と、指数パス４１５上の右シフトカウント回路４２８と、テストパス４１７上の比較ロジック４３６を有する。
【００８１】
[0097]図８Ａは、中間積（ＩＰ）加算器８０４と、スティッキービットロジック８０８と、整数ｍｕｘ８１０と、入力選択ｍｕｘ８１２と、出力選択ｍｕｘ８１４とを含む乗算器後段ブロック４１８のブロック図である。ＯＰＣＴＬ信号に応じて、入力選択ｍｕｘ８１２は、（ステージ２の乗算器ブロック４１４からの）パス７１７上の結果Ｒ２ｂと、レジスタ８１６に格納された定数オペランド（値１）との間で選択を行う。後述するように、ｍｕｘ８１２のためのＯＰＣＴＬ信号は、オペランドＡの２の補数が必要とされるある種のフォーマット変換演算中に、定数オペランドを選択する。このようなケースでは、オペランドＡはステージ０で反転させられ、１がＩＰ加算器８０４を使用して加算される。その他の演算の場合、ｍｕｘ８１２は結果Ｒ２ｂを選択できる。
【００８２】
[0098]ＩＰ加算器８０４は、和ＲＰを生成するために結果Ｒ２ａとＲ２ｂ（又は、Ｒ２ａと定数オペランド）を加算する。ＩＰ加算器８０４は、パス８０５を介して和ＲＰの２ビットのＭＳＢ（ＲＰ２）を比較ロジックブロック８０６へ供給する。乗算演算又はＭＡＤ演算のケースでは、和ＲＰは積Ａ×Ｂである。その他の演算の場合、和ＲＰは、Ａ＋Ｂを表現するか（例えば、オペランドＡ及びＢが乗算器ツリー７００の周りで迂回させられた場合）、又は、〜Ａ＋１を表現できる（例えば、オペランドＡがステージ０で反転させられ、乗算器ツリー７００の周りで迂回させられ、定数オペランドが入力ｍｕｘ８１２によって選択される）。
【００８３】
[0099]上述の通り、結果Ｒ２ａ及びＲ２ｂは、通常のオペランドより幅が大きく（例えば、４８ビット）、従って、ＩＰ加算器８０４は４８ビット加算器として実施され、パスＲＰはキャリーを収容するために４９ビット幅であってもよい。乗算器後段ブロック８０２は、好適には、和ＲＰを、例えば、ＬＳＢを落とすことにより、通常のオペランド幅（例えば、３２ビット）を有する結果Ｒ３ａまで縮小する。スティッキービットロジック８０８は、略従来型の設計でもよく、好適には、（落とされたビットの一部又は全部）スティッキービットＳＢ３を収集し、後述するように丸めのためにスティッキービットを使用する下流側コンポーネントへスティッキービットを供給する。並行して、整数ｍｕｘ８１０は整数オペランドを取り扱い、ｍｕｘ８１０は、ＯＰＣＴＬ信号に応じて４９ビット和ＲＰの上位３２ビット又は下位３２ビットの何れかを選択する。選択は、オペランドＲ２ａ及びＲ２ｂが幅広いパス７１５、７１７上でどのように揃えられているかに依存する。
【００８４】
[0100]出力ｍｕｘ８１４は、演算及びオペランドフォーマットに依存するＯＰＣＴＬ信号に応じて浮動小数点パス又は整数パスから結果Ｒ３ａを選択し、Ｒ３ａをパス４２１上に供給する。加えて、迂回パス８１７は、結果Ｒ２ａをＩＰ加算器８０４の周りを迂回させ、出力ｍｕｘ８１４によって選択することを可能にし（オペランドＡであることもある）、従って、Ｒ２ａを結果Ｒ３ａとしてパス４２１上に伝搬することが可能である。
【００８５】
[0101]図４を再度参照する。右シフトカウント回路４２８はＯＰＣＴＬ信号に応答する。ＦＭＡＤ（又はＦＡＤＤ）演算中に、右シフトカウント回路４２８は、浮動小数点加数（例えば、Ａ×Ｂ＋Ｃ）のための適切なアライメントを決定するためにパス７２５上の指数差Ｅｄｉｆｆを使用する。特に、指数が小さい方の加数が右シフトされ、これによって、アライメントは大きい方の指数を使用して表現される。したがって、右シフト回路４２８は、Ａ×Ｂ又はＣが大きい方の指数を有するか否かを判定するために指数差Ｅｄｉｆｆの符号を使用し、後述するようにどちらの加数が右シフトされるかを制御するスワップ制御信号（ＳｗａｐＣｔｌ）を生成する。右シフトカウント回路４２８は、後述するように選択された加数がどの程度まで右シフトされるかを制御するシフト量信号（ＲｓｈＡｍｔ）を生成するために指数差Ｅｄｉｆｆの絶対値を更に使用する。このシフト量は、例えば、加数の幅に基づいてクランプされる。これらの信号はパス４４１上のアライメントブロック４２０へ伝搬される。
【００８６】
[0102]ＯＰＣＴＬ信号の使用によって、右シフトカウント回路４２８は、右シフトが使用され得るその他の演算のために利用される。このような使用の実施例を後述する。
【００８７】
[0103]図８Ｂは、ＡＢ符号回路８２０、２値テストロジックユニット８２２、及び、選択ｍｕｘ８２４を含む比較ロジックブロック４３６を表すブロック図である。比較ロジックブロック４３６は、入力Ｒ１、Ｒ２ａ及びＲ２ｂを受け取り、パス４１９上に結果Ｒ３ｂとして伝搬させるために、そのうちの一つを選択するように構成される。ＭＡＤ又は加算演算のケースでは、オペランドＣは入力Ｒ１として受け取られ、変更されることなく、比較ロジックブロック４３６の中を伝搬させられる。ＬＯＰ、ＣＭＰ、ＭＡＸ、ＭＩＮ及びＳＥＴ演算を含むその他の演算の場合、比較ロジックブロック４３６はその入力のうちの別の一つを選択する。
【００８８】
[0104]ＡＢ符号回路８２０は、パス８０５上でＩＰ加算器８０４（図８Ａ）から２ビットのＭＳＢであるＲＰ２を受け取る。最大値（ＦＭＡＸ又はＩＭＡＸ）、最小値（ＦＭＩＮ又はＩＭＩＮ）、又は、２値テスト（ＦＳＥＴ又はＩＳＥＴ）演算の場合、オペランドＢは、好適には、ステージ０内の条件付きインバータ５１９（図５参照）によって反転され、オペランドＡ及びＢは、上述のように選択ｍｕｘを使用してＩＰ加算器８０４へ迂回される。このようなケースでは、結果ＲＰは差Ａ−Ｂであり、ＭＳＢのＲＰ２は、差が負である（Ｂ＞Ａを意味する）か否かを示す。ＡＢ符号回路８２０はＭＳＢを受け取り、符号信号Ｓａｂ（例えば、Ａ−Ｂが正であるならばアサートされ、そうでなければ、デアサートされる１ビット信号）を生成する符号信号Ｓａｂは、パス８２１を介して２値テストロジックユニット８２２及び下流側コンポーネントへ供給される。
【００８９】
[0105]符号信号Ｓａｂに加えて、２値テストロジックユニット８２２は、パス４２９を介してステージ１の特殊数検出ブロック４３８（図４）からの特殊数信号ＳＰＣと、ＯＰＣＴＬ信号と、ステージ１のビット単位論理回路４３４からの結果Ｒ１とを受け取る。結果Ｒ１は、条件付き選択演算（ＦＣＭＰ、ＩＣＭＰ）の場合にはオペランドＣであり、ステージ３内の２値テストロジックユニット８２２がアクティブ状態であるその他の演算の場合にはＸＯＲユニット６３４の出力である。
【００９０】
[0106]これらの入力信号に応じて、２値テストロジックユニット８２２は、選択ｍｕｘ８２４の動作を制御する比較選択信号（ＣＳＥＬ）と、図４に示したようにパス８２５上でステージ７へ伝搬させられるブール結果信号（ＢＳＥＬ）とを生成する。ＣＳＥＬ信号はパス８２７を介して下流側コンポーネントへも伝搬させられる。
【００９１】
[0107]ＣＳＥＬ信号及びＢＳＥＬ信号の生成は演算に依存する。ＦＭＡＸ、ＩＭＡＸ、ＦＭＩＮ又はＩＭＩＮのケースでは、オペランドＡ及びＢは、乗算器ツリー７００の周りで迂回させられ（図７Ａ）、結果Ｒ２ａ及びＲ２ｂとして供給される。２値テストロジック８２２は、符号信号Ｓａｂに基づいてこれらの二つのオペランドのうちの一方を選択するためにＣＳＥＬ信号を生成する。
【００９２】
[0108]条件付き選択演算（ＦＣＭＰ、ＩＣＭＰ）の場合、パス４３３上の結果Ｒ１はオペランドＣである。特殊数信号ＳＰＣは、特に、オペランドＣが零（又は、その他の特殊数）であるか否かを示す。２値テストロジック８２２は、条件Ｃ≧０が満たされるか否かを判定するためにオペランドＣ及び特殊数信号ＳＰＣの符号ビットを使用し、それに応じてオペランドＡ（Ｒ２ａ）とＢ（Ｒ２ｂ）のうちの一方を選択する。
【００９３】
[0109]２値テスト演算（ＦＳＥＴ、ＩＳＥＴ）の場合、２値テストロジック８２２は、ブール型の真又は偽信号ＢＳＥＬを生成する。この信号はパス８２５を介してステージ７へ供給され、そこで、ブール結果の適切な３２ビット表現を生成するために使用される。このケースでは、パス４３３上の結果Ｒ１は３２ビットのＸＯＲ２結果を提供する。２値テストロジック８２２は四つの基本テスト、即ち、「順序無し」（Ａ？Ｂ）、「等価」（Ａ＝Ｂ）、「大なり」（Ａ＞Ｂ）、及び、「小なり」（Ａ＜Ｂ）を実行する。Ａ？Ｂテストは、ＡとＢのうちの少なくとも一方がＩＮＦ又はＮａＮである場合にブール型の真を生じ、これは、特殊数信号ＳＰＣを参照することによって判定される。Ａ＝Ｂテストは、パスＲ１上のＸＯＲ結果の全ビットが零であるならば、ブール型の真を生じる。Ａ＜Ｂテストは、パスＳａｂ上の符号信号がＡ−Ｂは負数であることを示すならば、ブール型の真を生じる。Ａ＞Ｂテストは、その他の三つのテストが全て偽を生じるならば、ブール型の真を生じる。否定テスト（等しくない、より大きくない、より小さくない、順序無しではない）は、四つの基本テストの結果を反転させることによって解決される。付加的な組み合わせテスト（例えば、Ａ≦Ｂなど）は、四つの基本テストからの結果又はそれらの否定の適当なブール型のＯＲを構築することによってサポートされる。ある実施の形態では、２値テストロジック８２２は、複数のテストを並列に実行し、ＯＰＣＴＬ信号に基づいて結果ＢＳＥＬを選択するように構成される。結果はＳＥＴ演算中に無視されるので、ｍｕｘ８２４への入力のうちのいずれかが結果Ｒ３ｂとして選択され得る。
【００９４】
Ｆ．  ステージ４のエレメント
[0110]図４を再度参照する。ステージ４は、アライメントブロック４２０及び指数インクリメントブロック４３０を含む。
【００９５】
[0111]図９はアライメントブロック４２０を表すブロック図である。ＦＭＡＤ又はＦＡＤＤ演算中に、アライメントブロック４２０は、浮動小数点加算に備えて仮数を揃えるために使用される。アライメントブロック４２０は、後述するようにその他の演算中に右シフトを実行するためにも利用される。アライメントブロック４２０のための制御信号は、部分的に、パス４４１を介して右シフトカウント回路４２８によって供給される。
【００９６】
[0112]アライメントブロック４２０は、「スモール」スワップｍｕｘ９０４及び「ラージ」スワップｍｕｘ９０６を含み、各スワップｍｕｘがパス４２１、４１９から入力Ｒ３ａ及びＲ３ｂを受け取る。スモールスワップｍｕｘ９０４及びラージスワップｍｕｘ９０６は、右シフトカウント回路４２８からのＳｗａｐＣｔｌ信号で共通に制御され、その結果、スモールスワップｍｕｘ９０４が入力Ｒ３ａ、Ｒ３ｂのうちの一方をスモールオペランドパス９０８へ向けるときに、ラージスワップｍｕｘ９０６は入力Ｒ３ｂ、Ｒ３ａの他方をラージオペランドパス９１０へ向ける。ＦＭＡＤ演算の場合、オペランドは、（Ａ×Ｂ）及びＣに対応し、指数が小さい方のオペランドがスモールオペランドパス９０８へ向けられる。
【００９７】
[0113]スモールオペランドパス９０８は、右シフト回路９１２、スティッキービットロジック９１４、シフトｍｕｘ９１６、及び、条件付きインバータ９１８を含む。右シフト回路９１２は、右シフトカウント回路８０４からのＲｓｈＡｍｔ信号によって制御されるシフト量（例えば、零から３２ビット）で、スモールオペランドパス９０８上のデータビットを右シフトする。ある実施の形態では、右シフト回路９１２は、ＲｓｈＡｍｔ信号又は別個のＯＰＣＴＬ信号（図示されず）の何れかによって、算術シフト又は論理シフトを実行するように制御される。
【００９８】
[0114]スティッキービットロジック９１４は、右シフト回路９１２によってシフトアウトされたＬＳＢの一部又は全部を取得し、後述するよう丸めに使用するためにパス９１５を介してステージ５へスティッキービットＳＢ４を供給する。ある実施の形態では、スティッキービットロジック９１４は、パスＳＢ３を介してステージ３からスティッキービットＳＢ３を更に受け取り（図８Ａを参照せよ）、スティッキービットロジック９１４が受け取られたスティッキービットＳＢ３を伝搬させるか、又は、新しいスティッキービットを生成するかを、ＯＰＣＴＬ信号に応じて制御することができる。
【００９９】
[0115]シフトｍｕｘ９１６は、前の乗算が次のビット位置にキャリーアウトを生じる場合に、アライメントを調整するために設けられている。シフトｍｕｘは、シフト量ＲｓｈＡｍｔが基礎としている指数差（Ｅｄｉｆｆ）が負である場合に、アライメントシフトの正確な実施をサポートするためにも使用される。このようなケースは、ＲｓｈＡｍｔを得るために右シフトカウント回路４２８内でＥｄｉｆｆ値を反転させ、次に、１ビットの更なる右シフトを実行させるためにシフトｍｕｘ９１６を作動させることによって取り扱われる。一部の実施の形態では、シフトｍｕｘ９１６は、オペランドが付加的な特殊ロジックを使用することなく３２ビットだけシフトされたときに零が返されるべき演算をサポートするためにも使用される。
【０１００】
[0116]条件付きインバータ９１８は、ＯＰＣＴＬ信号に応じて、一部の例では、比較ロジックブロック４３６からのＣＳＥＬ信号又はＳａｂ信号（図８Ｂを参照せよ）のようなその他の信号に応じて、スモールオペランドパス９１８上のオペランドを反転させるか、又は、反転させない。条件付き反転は、例えば、ステージ５の間に減算演算を実施するために使用され得る。出力信号Ｒ４ａはパス９０９上でステージ５へ供給される。
【０１０１】
[0117]ラージオペランドパス９１０は、条件付き零回路９２０及びシフトｍｕｘ９２２を含む。条件付き零回路９２０は、ＯＰＣＴＬ信号に応じ、パス９１０上のオペランドを零で置き換えるために使用される。条件付き零回路は、例えば、Ｒ３ａ又はＲ３ｂを変更することなく（後述する）ステージ５の加算器に通すことが望ましい演算中に使用される。ＦＭＡＤ演算の場合、条件付き零回路９２０は非アクティブ状態であり、ラージオペランドは変更されずに通過する。シフトｍｕｘ９２２は、シフトｍｕｘ９１６と同様に、前の乗算においてキャリーアウトが生じた場合に、アライメントを調整するために使用され得る。
【０１０２】
[0118]ラージオペランドパス４１０からの出力信号Ｒ４ｂはパス９１１でステージ５へ供給される。
【０１０３】
[0119]図４を再度参照する。指数インクリメントブロック４３０は、パス７２３上の有効最終指数ＥＦＥと、パス４２１上の積結果Ｒ３ａ（又は、積結果の最上位ビットだけ）とを受け取る。ＦＭＡＤ又はＦＭＵＬ演算中に、指数インクリメントブロック４３０は、乗算器後段ブロック４１８における４８ビット和とキャリー結果（Ｒ２ａ、Ｒ２ｂ）の加算が４９番目のビット位置にキャリーを生じさせたか否かを検出する。もしそうであるならば、有効最終指数ＥＦＥは１だけインクリメントされる。修正された（又は修正されていない）有効最終指数ＥＦＥ２がパス４４３を介してステージ４へ供給される。
【０１０４】
Ｇ．  ステージ５のエレメント
[0120]ステージ５は端数和ブロック４２２を含む。加算演算及びＭＡＤ演算中に、このブロックは加算を実行する。丸めを使用する全演算のための丸め処理もまたこのステージで実施される。
【０１０５】
[0121]図１０は、プラス１加算器１００２と、ＡＮＤ２回路１００４と、インバータ１００６と、丸めロジックユニット１００８と、選択ｍｕｘ１０１０とを含む端数和ブロック４２２のブロック図である。加数Ｒ４ａ及びＲ４ｂは、アライメントブロック４２０からパス９０９、９１１上に受け取られる。プラス１加算器１００２は、略従来型の設計であってもよいものであり、加数を加算し、Ｓｕｍ出力を生成し、１をＳｕｍに加算してＳｕｍ＋１出力を生成する。インバータ１００６は、Ｓｕｍ出力を反転させ、〜Ｓｕｍ出力を生成する。これらの出力は、丸めだけでなく、２の補数算術をサポートする。
【０１０６】
[0122]並行して、ＡＮＤ２回路１００４は、オペランドＲ４ａ及びＲ４ｂの対応するビットに論理ＡＮＤ演算を実行し、３２ビットの結果を供給する。ＡＮＤ２回路１００４は、後述するようにＦＲＣ演算中に使用される。その他の演算中に、ＡＮＤ２回路１００４は、迂回されるか、又は、低電力アイドル状態に入れられる。
【０１０７】
[0123]丸めロジック１００８は、略従来型の設計であってもよく、ＯＰＣＴＬ信号と、比較ロジックブロック４３６からのパス８２１上の符号信号Ｓａｂと（図８Ｂを参照せよ）、パス９１５上のスティッキービットＳＢ４と、プラス１加算器１００２からの選択されたＭＳＢ及びＬＳＢとを受け取る。これらの信号に応じて、丸めロジック１００８は、ｍｕｘ１０１０に、結果Ｒ５としてＳｕｍと、Ｓｕｍ＋１と、〜Ｓｕｍと、ＡＮＤ２出力とのうちの一つを選択するように命令し、選択された結果Ｒ５がパス１０１１に伝搬させられる。
【０１０８】
[0124]結果Ｒ５の選択は検討事項の数に依存する。例えば、丸めロジック１００８は、好適には、ＩＥＥＥ標準算術のために定義され、異なるモードが異なる結果を選択する可能性がある４通りの丸めモード（最近接、切り下げ、切り上げ、及び、切り捨て）を実施する。ＯＰＣＴＬ信号又は別の制御信号（図示せず）は、丸めモードのうちの一つを指定するため使用されてもよい。更に、選択は、フォーマット（整数又は浮動小数点）、結果の正負、絶対値又は否定が要求されたか否か、及び、類似した検討事項にも依存する。種々の丸めモードによる正数及び負数を丸める従来の規則が実施されてもよい。ＦＲＣ演算の場合、ＡＮＤ２回路１００４の出力が選択され、その他の演算の場合、この出力は無視される。
【０１０９】
Ｈ．  ステージ６のエレメント
[0125]図４を再度参照する。ステージ６は、正規化ブロック４２３及び指数デクリメントブロック４３２を含む。ＦＭＡＤ、ＦＭＵＬ又はＦＡＤＤ演算中に、正規化ブロック４２３は、先頭ビットが１になるまで、結果を左シフトすることにより仮数Ｒ５を揃えるよう動作する。本状況における左シフトは、２による乗算を意味するので、指数ＥＦＥを相応に削減する左シフト量が指数デクリメントブロック４３２に供給され、それによって、最終指数Ｅ０を生成する。その他の演算中に、正規化ブロック４２３は後述するように左シフトを実行するために利用される。
【０１１０】
[0126]図１１は正規化ブロック４２３のブロック図である。優先エンコーダ１１０８は、パス１０１１上の加算結果Ｒ５を受け取り、先頭の１の位置を判定する。この情報はシフト制御回路１１１０へ供給され、シフト制御回路が左シフト量信号ＬｓｈＡｍｔを生成する。ＬｓｈＡｍｔ信号は左シフト回路１１１２へ供給され、指数デクリメントブロック４３２（図４）へも供給される。左シフト回路１１１２は、指定されたビット数だけ結果Ｒ５を左にシフトし、結果Ｒ６をパス４２５上に供給する。指数デクリメントブロック４３２は、ＬｓｈＡｍｔ信号に従って指数ＥＦＥ２を削減し、結果として得られた最終指数Ｅ０をパス４２７上に供給する。
【０１１１】
[0127]シフト制御回路１１１０は、ＯＰＣＴＬ信号、パス４４３からのＥＦＥ２信号、及び、パス４２９からの特殊数信号ＳＰＣを更に受け取り、左シフト回路１１１２を利用してその他の状況において左シフトを実行することを可能にする。その実施例については、後述する。
【０１１２】
Ｉ．  ステージ７のエレメント
[0128]図４を再度参照すると、ステージ７は、パス４１０、４１２を介してＭＭＡＤユニット２２０の外部にあるコンポーネントへ送出するための最終結果（ＯＵＴ及びＣＯＮＤ）をフォーマット化し、選択する出力制御ブロック４４０を含む。図１２は出力制御ブロック４４０のブロック図である。浮動小数点動作の場合、フォーマットブロック１２１０は、パス４２７経由で最終指数Ｅ０を、パス４２５経由で最終仮数Ｒ６を受け取る。浮動小数点演算の場合、フォーマットブロック１２１０は、ＯＰＣＴＬ信号によって指定されたｆｐ３２又はｆｐ１６フォーマットで結果Ｒｄａｔａを生成するために値Ｅ０及びＲ６を使用する。
【０１１３】
[0129]整数演算の場合、フォーマットブロック１２１０は、結果Ｒ６を受け取り、指数Ｅ０を棄てる。フォーマットブロック１２１０は、変更されていない整数結果Ｒ６を通過させるか、又は、適切なフォーマット化を適用でき、例えば、３２ビットより少ないビットを使用する整数フォーマットのために、３２ビット結果の適切な位置に有効ビットを揃える。一部の実施の形態では、フォーマットブロック１２１０は、更に、オーバーフロー又はアンダーフローする整数出力を（例えば、指定された整数フォーマットの最大値又は最小値に）クランプする。
【０１１４】
[0130]フォーマット化された結果Ｒｄａｔａは、入力として、最終選択ｍｕｘ１２１２へ供給され、最終選択ｍｕｘは、パス４１０上の最終結果ＯＵＴとして、結果Ｒｄａｔａと一つ以上の所定の値との間で選択を行う。ある実施の形態では、所定の値は、ｆｐ１６フォーマット及びｆｐ３２フォーマットの特殊数ＮａＮ及びＩＮＦと、３２ビットブール型の真の値（例えば、０ｘ１）及び偽の値（例えば、０ｘ０）を含む。これらの選択された最終結果ＯＵＴは、更に、その結果に基づいて条件コードＣＯＮＤを生成する条件コード回路１２１８へ供給される。結果フォーマットは部分的にオペコードに依存するので、条件コード回路１２１８は、期待されるフォーマットを示すＯＰＣＴＬ信号を受け取る。条件コードの実施例については上述している。
【０１１５】
[0131]浮動小数点算術演算中に、指数飽和ロジック１２１６は、最終指数Ｅ０を受け取り、指数オーバーフロー（又はアンダーフロー）が起こったか否かを判定する。この判定は、好適には、ｆｐ１６又はｆｐ３２フォーマットが使用中であるか否かを示すＯＰＣＴＬ信号に部分的に基づいている。指数飽和ロジック１２１６からの指数飽和信号Ｅｓａｔは、最終結果選択ロジック１２１４へ供給される。
【０１１６】
[0132]最終結果選択ロジック１２１４は、ＯＰＣＴＬ信号、（ステージ１からの）パス４２９上の特殊数信号ＳＰＣ、（ステージ３からの）パス８２５上のブール型選択信号ＢＳＥＬ、及び、指数飽和信号Ｅｓａｔを含む制御信号の組み合わせに応じて、最終選択ｍｕｘ１２１２の動作を制御する。最終結果の選択は、演算及び結果フォーマット、並びに、特殊数又は飽和の発生に依存して変化する。
【０１１７】
[0133]例えば、浮動小数点算術演算の場合、最終結果選択ロジック１２１４は、好適には、特殊数に関連した算術の規則（例えば、ＮａＮがある数に加算されるか、又は、ある数によって乗算されるとＮａＮであるなど）を実施するために、特殊数信号ＳＰＣを使用する。入力オペランド（Ａ、Ｂ又はＣ）のうちの一つが特殊数であるとき、最終結果選択ロジック１２１４は、ｍｕｘ１２１２に、結果Ｒｄａｔａより優先して、対応する特殊数を選択するように命令する。更に、最終結果選択ロジック１２１４は、指数オーバーフロー又はアンダーフロー条件の場合に、特殊数（例えば、ＩＮＦ又は零）を選択するために飽和信号Ｅｓａｔも使用する。
【０１１８】
[0134]２値テスト（ＦＳＥＴ、ＩＳＥＴ）演算のケースにおいて、最終結果選択ロジック１２１４は、数値結果Ｒｄａｔａを無視して、ブール型の真と論理型の偽の出力との間で選択を行うために、ブール型の選択信号ＢＳＥＬを使用する。
【０１１９】
Ｊ．  オペランド迂回又は通過パス
[0135]上述のように、ＭＭＡＤユニット２２０は、オペランドが種々の回路ブロックの中を変更されることなく伝搬することを可能にする迂回パス又は通過パスを提供する。例えば、オペランドＡはステージ１の乗算器前段ブロック４１６を通過する（図６Ａ参照）。オペランドＡは更に、結果Ｒ２ａとしてステージ２において乗算器ツリーの周りを迂回させられ（図７Ａ参照）、結果Ｒ３ａとしてステージ３においてＩＰ加算器８０４の周りを迂回させられ（図８Ａ参照）、結果Ｒ４ａとしてスモールオペランドパス９０８の中を伝搬させられる（図９参照）。更に、条件付き零回路９２０は、強制的に結果Ｒ４ｂを零とし、その結果、オペランドＡがステージ５においてプラス１加算器１００２によって零に加算されるようにする（図１０参照）。結果Ｓｕｍが次にｍｕｘ１０１０によって選択されるならば、結果Ｒ５はオペランドＡである。
【０１２０】
[0136]同様に、オペランドＢは、ステージ１においてパスＢＢまで乗算器前段ブロック４１６の周りを迂回させられ（図６Ａ参照）、結果Ｒ２ｂとしてステージ２の乗算器ツリー７００の周りを迂回させられる（図７Ａを参照）。オペランドＣは、結果Ｒ１としてステージ１のビット単位論理ブロック４３４を通過させられ（図６Ｃを参照）、結果Ｒ３ｂとしてステージ３の比較ロジックブロック４３６を通過させられる（図８Ｂ参照）。本実施の形態では、オペランドＢ及びＣのための更なる迂回パスは設けられないが、代替的な実施の形態では、（例えば、オペランドＡに関して表された迂回と類似した）更なる迂回が必要に応じて設けられる。
【０１２１】
[0137]したがって、セクションIIIにおける動作説明は、特定のステージへ迂回させられ、又は、通過させられた種々のオペランドを参照し、ある種のステージを通る迂回パス又は通過パスを辿ることは、必ずしも後続のステージの迂回パスを追跡し続けることを要求しないことが理解されるべきである。その上、あるステージにおいて修正された値は、後続のステージを通過する迂回パスの方へ進むことができる。特定の回路ブロックが演算中に迂回される場合、そのブロックは、電力消費を削減するために非アクティブ状態にセットされるか、又は、例えば、選択ｍｕｘ又はその他の回路エレメントの使用によって、その出力が無視された状態で正常に動作することが許容される。
【０１２２】
[0138]本明細書に記載したＭＭＡＤユニットは、説明のための例であり、変形と変更が可能であることが認識認されるであろう。本明細書に記載した回路ブロックの多くは、従来通りの機能を提供し、技術的に知られている技術を使用して実施され得るので、これらのブロックの詳細な説明を省略している。演算回路のブロックへの分割を変更してもよく、ブロックを組み合わせてもよく、又変更してもよい。その上、後で明らかになるように、パイプラインステージの段数と、特定の回路ブロック又は演算の特定のステージへの割当は、変更又は変形してもよい。特定の実施形態のための回路ブロックの選択及び配置は、サポートされるべき演算の組に依存し、当業者は、本明細書に記載したブロックの全部が演算のあらゆる組み合わせのために要求されるとは限らないことを認識するであろう。
【０１２３】
III．  ＭＭＡＤユニット動作の実施例
[0139]ＭＭＡＤユニット２２０は、好適には、図３に掲載された演算の全てを面積効率に優れた方法でサポートするために上記の回路ブロックを利用する。したがって、ＭＭＡＤユニット２２０の動作は、少なくともある観点において、実行されている演算に依存する。以下のセクションは、図３に掲載した演算のそれぞれを実行するためのＭＭＡＤユニット２２０の使用について説明する。
【０１２４】
Ａ．  浮動小数点演算
[0140]ＭＭＡＤユニット２２０によってサポートされている浮動小数点演算を図３の３０２に示す。算術演算（ＦＡＤＤ、ＦＭＵＬ、ＦＭＡＤ）の場合、指数パス４１５は指数を計算するため使用され、仮数パス４１３は仮数を計算するため使用される。その他の浮動小数点演算（ＦＣＭＰ、ＦＭＩＮ、ＦＭＡＸ及びＦＳＥＴ）は、ｆｐ３２及びｆｐ１６フォーマットでは、相対的な絶対値が３２ビット符号無し整数であるかのように取り扱うことによって正確に決定されるという特性を利用し、これらの演算は仮数パス４１３及びテストパス４１７を使用して取り扱われる。
【０１２５】
１．  ＦＭＡＤ演算
[0141]ＦＭＡＤ演算は、ＭＭＡＤユニット２２０にｆｐ１６又はｆｐ３２フォーマットで供給されたオペランドＡ、Ｂ及びＣについてＡ×Ｂ＋Ｃを計算し、入力オペランドと同じフォーマットで結果を返す。
【０１２６】
[0142]ステージ０において、オペランドＡ０、Ｂ０及びＣ０が受け取られ、選択ｍｕｘ５１４−５１６（図５）の動作によって変更されることなく、オペランドＡ、Ｂ及びＣへフォーマット化ブロック４００を経て渡される。
【０１２７】
[0143]ステージ１において、乗算器前段ブロック４１６は、オペランドＡの仮数部から３Ａを計算し、ブース３は、オペランドＢの仮数部を符号化し、ブース方式で符号化された仮数をパスＢＢ上に伝搬させる。指数積ブロック４２４は、オペランドＡ及びＢの指数部（Ｅａ、Ｅｂ）を受け取り、Ｅａ＋Ｅｂを計算し、バイアスβが好適には和において正確なｆｐ１６又はｆｐ３２指数バイアスを再確定するために使用される。オペランドＣの仮数部はビット単位論理ブロック４３４へ送出され、オペランドＣがｍｕｘ６３６によって選択され（図６Ｃ）、結果Ｒ１としてパス４３３上に伝搬される。オペランドＣの指数部（Ｅｃ）は、指数パス４１５の中でパス４３９上をルーティングされる。同様にステージ１の間に、特殊数検出ブロック４３８は、オペランドＡ、Ｂ又はＣのうちの何れかが特殊数であるか否かを判定し、ステージ７で使用するためにパス４２９上に適切な特殊数信号ＳＰＣを生成する。
【０１２８】
[0144]ステージ２において、乗算器ブロック４１４は、Ａ×Ｂの仮数部を計算し、結果Ｒ２ａ及びＲ２ｂとして和フィールド及びキャリーフィールドを選択する。指数和ブロック４２６は、パス上の積指数と、パス４３１上のＥａｂと、パス４３９上のオペランドＣの指数部（Ｅｃ）とを受け取る。差ユニット７０４（図７Ｂ）は、Ｅａｂ−Ｅｃを計算し、パス７２５上に結果Ｅｄｉｆｆを伝搬させる。同様に、Ｅａｂ−Ｅｃの符号に基づいて、ＥａｂとＥｃの一方が有効最終指数ＥＦＥとして選択される。オペランドＣ（Ｒ１）の仮数はパス４３３上を通過させられる。
【０１２９】
[0145]ステージ３において、乗算器後段ブロック４１８は、和結果Ｒ２ａとキャリー結果Ｒ２ｂを加算し、結果Ｒ３ａをパス４２１上に供給する。スティッキービットロジック８０８（図８Ａ）が動作するが、本実施の形態では、スティッキービットＳＢ３は後段で無視され、積Ａ×Ｂは丸められるのではなく、切り捨てられる。右シフトカウントブロック４２８は、浮動小数点加算用にどのオペランドをシフトすべきかを決定するために、パス７２５上のＥｄｉｆｆの符号を使用し、対応するＳｗａｐＣｔｌ信号を生成する。右シフトカウントブロック４２８は、更に、選択されたオペランドをシフトする際に用いるビット数を決定するために、パスＥｄｉｆｆ上の値の絶対値を使用し、適切なＲｓｈＡｍｔ信号を生成する。比較ロジック４３６は、オペランドＣの仮数部をパス４１９上に結果Ｒ３ｂとして通過させる。
【０１３０】
[0146]ステージ４において、アライメントブロック４２０は、積Ａ×Ｂの仮数を結果Ｒ３ａとして受け取り、オペランドＣの仮数を結果Ｒ３ｂとして受け取る。右シフトカウントブロック８０４からのＳｗａｐＣｔｌ信号に基づいて、スワップｍｕｘ９０４、９０６（図９）は、オペランドの一方をスモールオペランドパス９０８へ向け、他方をラージオペランドパス９１０へ向ける。小さい方のオペランドは右シフト回路９１２によって右シフトされ、スティッキービットロジック９１４がシフトアウトされたビットからスティッキービットＳＢ４を生成する。その結果の揃えられた加数Ｒ４ａ、Ｒ４ｂはパス９０９、９１１に供給される。指数インクリメントブロック４３０（図４）は積Ａ×Ｂ（Ｒ３ａ）の仮数を受け取り、上述のように、有効最終指数ＥＦＥをインクリメントするか、又は、インクリメントしない。結果ＥＦＥ２はパス４４３へ伝搬させられる。
【０１３１】
[0147]ステージ５において、端数和ブロック４２２は揃えられた加数Ｒ４ａ及びＲ４ｂを受け取る。プラス１加算器１００２（図１０）は、Ｓｕｍ出力とＳｕｍ＋１出力を生成し、インバータ１００６は反転されたＳｕｍを生成する。丸めロジック１００８は、パスＳＢ４上のスティッキービットを受け取り、スティッキービット、選択された丸めモード、及び、プラス１加算器１００２において計算された和の符号に基づいて、Ｓｕｍ出力とＳｕｍ＋１出力との間で選択を行うために選択ｍｕｘ１０１０を制御する。結果として得られる仮数Ｒ５がパス１０１１上で伝搬される。
【０１３２】
[0148]ステージ６において、正規化ブロック４２３は仮数Ｒ５を正規化する。優先エンコーダ１１０８（図１１）は、先頭の１の位置を検出し、そのデータをシフト制御ユニット１１１０へ供給し、シフト制御ユニットは対応するＬｓｈＡｍｔ信号を生成する。左シフトブロック１１１２は仮数を左へシフトし、結果Ｒ６をパス４２５上に伝搬させる。指数デクリメントブロック４３２（図４）は、有効最終指数ＥＦＥ２をそれに応じて下方へ調整し、得られた最終指数Ｅ０をパス４２７上に伝搬させる。
【０１３３】
[0149]ステージ７において、出力制御回路４４０は最終結果を生成する。フォーマットブロック１２１０（図１２）は、指数Ｅ０及び仮数Ｒ６を受け取り、適当なフォーマット（例えば、ｆｐ３２又はｆｐ１６）でＲｄａｔａ上に正規化数を生成する。飽和ロジック１２１６は指定されたフォーマットに従って指数Ｅ０を評価し、オーバーフローがあれば検出し、適切な飽和信号Ｅｓａｔを生成する。最終結果選択ロジック１２１４は、飽和信号Ｅｓａｔと、特殊数信号ＳＰＣとを受け取る。この動作のために、最終結果選択ロジック１２１４は、ｍｕｘ１２１２に、最終結果が特殊数であるべきことをＥｓａｔ又はＳＰＣ信号が示さない限り、結果Ｒｄａｔａを選択するように命令する。そのケースでは、適切な特殊数が最終結果として選択される。上述のように、最終結果選択ロジック１２１４は、入力オペランドのうちの一つが特殊数であるケースでは、ＩＥＥＥ７５４に準拠した規則（又はその他の規則）を実施可能である。
【０１３４】
２．  ＦＭＵＬ及びＦＡＤＤ演算
[0150]浮動小数点乗算（ＦＭＵＬ）の場合、ＭＭＡＤユニット２２０はオペランドＡとして被乗数を受け取り、オペランドＢとして乗数を受け取る。値０．０（浮動小数点零）が好適にはオペランドＣとして供給される。上述したＦＭＡＤ演算は、次に、ステージ４において、スティッキービットロジック９１４（図９）が好適にはステージ３からのスティッキービットを通過させて、積を丸め処理することを可能にすることを除いて、積Ａ×Ｂ（＋０．０）を生成するように実行される。一部の実施の形態では、オペランドＣは、ステージ４の条件付き零ブロック９２０（図９）の使用によって強制的に零にされ、その結果、オペランドＣには任意の値が供給されてもよい。
【０１３５】
[0151]浮動小数点加算（ＦＡＤＤ）の場合、ＭＭＡＤユニット２２０はオペランドＡ及びＣとして加数を受け取る。ある実施の形態では、ＦＭＡＤ演算は、１．０にセットされたオペランドＢを用いて、（Ａ×１．０）＋Ｃを計算するよう実行され、オペランドＢを１．０にセットすることを、例えば、浮動小数点１．０をオペランドＢとしてＭＭＡＤユニット２２０に供給することによって、又は、レジスタ６２０からブース３方式で符号化された１．０を選択するように乗算器前段選択ｍｕｘ６１６（図６Ａ）を動作させることによって行なうことができる。
【０１３６】
[0152]ＦＡＤＤの代替的な実施の形態では、オペランドＢは（例えば、浮動小数点零を入力オペランドとしてＭＭＡＤユニット２２０に供給することにより）０．０にセットされ、オペランドＡ及びＢはステージ３へ迂回させられ、ステージ３では、和Ａ＋０．０が乗算器後段ブロック４１８内のＩＰ加算器８０４（図８Ａ）によって計算され、或いは、代替的な実施の形態では、オペランドＡは結果Ｒ３ａとしてＩＰ加算器８０４の周りを更に迂回させられる。後に続くステージは、ＦＭＡＤ演算に関する限り、Ａ＋Ｃを計算するよう動作する。
【０１３７】
３．  ＦＭＩＮ及びＦＭＡＸ演算
[0153]浮動小数点最大値（ＦＭＩＮ）及び最小値（ＦＭＩＮ）演算は、それらの二つのオペランドのうち、大きい方又は小さい方の一つを返す。上述のように、これらの、及び、その他の比較に基づく演算は、仮数パス４１３とテストパス４１７のコンポーネントを使用して取り扱われる。ＭＭＡＤユニット２２０は、ＦＭＡＸ又はＦＭＩＮ演算が実行されるオペランドＡ及びＢを受け取り、オペランドＣはいかなる値にセットされてもよい。
【０１３８】
[0154]ＦＭＩＮ及びＦＭＡＸ演算の場合、オペランドＢはステージ０で反転させられ（〜Ｂ）、オペランドＡ及び〜Ｂの３２ビット全部が、それぞれ、結果Ｒ２ａ及びＲ２ｂとしてステージ３へ通過させられる。ステージ３において、ＩＰ加算器８０４（図８Ａ）は、和Ａ＋〜Ｂ（即ち、Ａ−Ｂ）を計算する。この結果ＲＰ２の２ビットのＭＳＢは比較ロジックブロック４３６へ供給される。オペランドＡ及びＢは浮動小数点数であるが、比較演算の目的で、これらのオペランドは、ｆｐ３２及びｆｐ１６フォーマットを定義する方法を理由に、整数であるかのように減算され得ることに注意すべきである。
【０１３９】
[0155]比較ロジックブロック４３６において、ＡＢ符号回路８２０（図８Ｂ）は、パスＲＰ２上の信号を受け取り、適切な符号信号Ｓａｂを生成する。２値テストロジック８２２は上述のように選択を行い、ＦＭＡＸの場合、（Ａ＋〜Ｂ）が負であるならば（即ち、ＢがＡより大きいならば）、Ｂが選択され、そうでなければ、Ａが選択され、ＦＭＩＮの場合、（Ａ＋〜Ｂ）が負であるならば、Ａが選択され、そうでなければ、Ａが選択される。Ａ＝Ｂであるケースは、ＦＭＩＮ又はＦＭＡＸの何れのためのオペランドを選択しても正しい結果を与えるので、特別に取り扱われないことに注意すべきである。２値テストロジック８２２は、ｍｕｘ８２４にＲ２ａ（オペランドＡ）とＲ２ｂ（オペランド〜Ｂ）のうちの適切な一つを結果Ｒ３ｂとして伝搬させるよう指示する適切なＣＳＥＬ信号を生成する。
【０１４０】
[0156]ステージ４において、スモールスワップｍｕｘ９０４（図９）は、スモールオペランドパス９０８へ伝搬させるための結果Ｒ３ｂを選択し、ラージスワップｍｕｘ９０６は、結果Ｒ３ａを選択する。この結果Ｒ３ａは、ステージ３の間の演算に起因してＡ−Ｂであってもよい。右シフトカウント回路４２８を使用して、指数に関わらず、ＯＰＣＴＬ信号に応じてこの結果を生成するために、ＳｗａｐＣｔｌ信号の適切な状態を生成してもよい。ラージオペランドパス９１０において、条件付き零ブロック９１４は結果Ｒ４ｂを零にするよう作動される。スモールオペランドパス９０８において、結果Ｒ３ｂは、結果Ｒ４ａとして伝搬させられる。オペランド〜Ｂ（ステージ０で反転されている）がステージ３で選択されたならば、条件付き反転回路９１８が結果Ｒ４ａを再反転させるために使用される。このケースを検出するため、条件付き反転回路９１８はパス８２７からＣＳＥＬ信号を受け取る（図８Ｂ参照）。
【０１４１】
[0157]ステージ５において、プラス１加算器１００２（図１０）は、Ｒ４ａ（Ａ又はＢ）とＲ４ｂ（零）を加算する。和の結果（即ち、選択されたオペランドＡ又はＢ）が結果Ｒ５としてｍｕｘ１０１０によって選択される。
【０１４２】
[0158]ステージ６において、シフト制御回路１１１０（図１１）は、ＬｓｈＡｍｔを零にセットすることによって、ＯＰＣＴＬ信号に応答し、結果Ｒ５が変更されることなく結果Ｒ６として伝搬されるようにする。
【０１４３】
[0159]ステージ７において、フォーマットブロック１２１０（図１２）は、そのままの結果Ｒ６をＲｄａｔａとして供給する。Ａ又はＢが特殊数であるならば、最終結果選択ロジック１２１４は、結果Ｒｄａｔａを適切な特殊数で上書きするようにｍｕｘ１２１２を作動できる。例えば、Ａ又はＢがＮａＮであるならば、ＦＭＡＸ又はＦＭＩＮの結果は強制的にＮａＮにすることができる。
【０１４４】
４．  ＦＳＥＴ演算
[0160]２値テスト（ＦＳＥＴ）演算の場合、ＭＭＡＤユニット２２０はオペランドＡ及びＢを受け取り、いかなる値がオペランドＣとして供給されてもよい。上述のＦＭＩＮ及びＦＭＡＸ演算の場合と同様に、オペランドＢはステージ０で反転され、オペランドＡ及び〜Ｂはステージ３へ迂回され、ステージ３において、オペランドはＰＰ加算器８０２（図８Ａ）を使用して減算され、ＭＳＢのＲＰ２が比較ロジックブロック４３６へ供給される。
【０１４５】
[0161]ステージ１において、オペランドＡ及び〜Ｂは通過させられ、一方、ビット単位論理ブロック４３４が動作して、ｍｕｘ６３６（図６Ｃ）は、結果Ｒ１として伝搬させるためにＸＯＲ２ユニット６３４の結果を選択する。
【０１４６】
[0162]ステージ３において、ＡＢ符号回路８２０（図８Ｂ）は、信号ＲＰ２を受け取り、符号信号Ｓａｂを生成する。２値テストロジック８２２は、Ｓａｂ信号、ＸＯＲ２の結果（Ｒ１）、特殊数信号ＳＰＣ、及び、実行されるべき２値テストを指定するＯＰＣＴＬ信号を受け取る。２値テストロジック８２２は、上述のようにそのテストを実行し（セクションII．Ｅを参照）、ブール型の結果ＢＳＥＬをパス８２５に伝搬させる。
【０１４７】
[0163]ブール型の結果ＢＳＥＬはパス８２５上をステージ７まで伝搬する。ステージ４〜６の種々の回路ブロックは、適切な信号パスに出現することがある全ての信号を操作してもよく、又は、動作不能状態であってもよい。ステージ４−６において実行された任意の演算の結果が、出力制御ブロック４４０によって無視される。
【０１４８】
[0164]ステージ７において、最終結果選択ロジック１２１４は、ブール型の結果ＢＳＥＬを受け取り、それに応じてブール型の真（例えば、０ｘ１）と偽（例えば、０ｘ０）の値の間で選択を行うように最終選択ｍｕｘ１２１２を作動させる。結果ＢＳＥＬは、オペランドが特殊数であるか否かを正確に反映し、最終結果選択ロジック１２１４はＦＳＥＴ演算中に特殊数信号ＳＰＣを無視してもよい。
【０１４９】
５．  ＦＣＭＰ演算
[0165]３値条件付き選択演算（ＦＣＭＰ）の場合、ＭＭＡＤユニットは、オペランドＡ、Ｂ及びＣを受け取る。オペランドＡ及びＢは、それぞれ、結果Ｒ２ａ及びＲ２ｂとして、ステージ３へ通過させられる。オペランドＣは結果Ｒ１としてステージ３へ通過させられる。
【０１５０】
[0166]ステージ３で、２値テストロジック８２２（図８Ｂ）は、オペランドＣ（Ｒ１）及び特殊数信号ＳＰＣを受け取る。上述のように（セクションII．Ｅを参照）、２値テストロジック８２２は、条件Ｃ≧０が満たされたか否かを判定するためにこれらの信号を使用する。２値テストロジック８２２は、ｍｕｘ８２４に、Ｃ≧０であるならば、オペランドＡ（Ｒ２ａ）を選択し、そうでなければ、オペランドＢ（Ｒ２ｂ）を選択するように命令する。ＮａＮは零より大きくもなく、零と等しくもないので、オペランドＣがＮａＮであるとき、オペランドＢが選択されるであろう。
【０１５１】
[0167]選択された値は、ＦＭＩＮ及びＦＭＡＸ演算の場合に上述したような方法で、結果Ｒ３ｂとしてステージ７へ伝搬させられる。（結果Ｒ３ａは、ＩＰ加算器８０４（図８Ａ）からのオペランドＡとＢの和でもよく、又は、オペランドＡは結果Ｒ３ａとして選択されてもよく、何れのケースでも、結果Ｒ３ａは最終結果に影響を与えない）。ステージ７において、最終結果選択ロジック１２１４は、好適には、オペランドＣがＮａＮであるケースを検出し、伝搬された結果をＮａＮ値で上書きする。
【０１５２】
Ｂ．  整数算術
[0168]整数オペランドは指数ビットを含まない。本明細書において使用されているフォーマットでは、符号付き整数は２の補数を使用して表現され、当業者は、その他の表現で置き換えてもよいことを認識するであろう。後述するように、整数算術演算は、一般に、指数ロジックが使用されない点を除いて、整数算術演算に対応した浮動小数点算術演算と類似している。
【０１５３】
１．  ＩＭＡＤ
[0169]整数ＭＡＤ（ＩＭＡＤ）演算の場合、ＭＭＡＤユニット２２０は、Ａ×Ｂ＋Ｃを計算するために仮数パス４１３を使用する。ある種の整数フォーマットは符号無しであるが、ＭＭＡＤユニット２２０は、好適には、全てのフォーマットが符号付き３２ビットの２の補数表現であるとして取り扱い、これは、本質的に、実際のフォーマットとは無関係に正しい結果を生じる。
【０１５４】
[0170]ステージ０において、オペランドＡ、Ｂ及びＣは、必要に応じて、８ビット入力フォーマット用のブロック５０４−５０６（図５）、又は、５０８−５１０（１６ビットフォーマット用）を使用して、３２ビットに拡張される。
【０１５５】
[0171]ステージ１において、乗算器前段ブロック４１６は、３Ａと、オペランドＢのブース３方式符号化を計算する。ビット単位論理ブロック４３４はオペランドＣを結果Ｒ１として伝搬させる。
【０１５６】
[0172]ステージ２において、乗算器ブロック４１４は、Ａ×Ｂを計算し、結果Ｒ２ａ及びＲ２ｂとして積の和フィールド及びキャリーフィールドを選択する。
【０１５７】
[0173]ステージ３において、乗算器後段ブロック４１８は、ＩＰ加算器８０４（図８Ａ）を使用して和フィールドとキャリーフィールドを加算する。整数ｍｕｘ８１０は上位３２ビットを選択し、選択ｍｕｘ８１２はこれを結果Ｒ３ａとして選択する。比較ロジックブロック４３６は結果Ｒ３ｂとしてオペランドＣ（Ｒ１）を伝搬させる。
【０１５８】
[0174]ステージ４において、アライメントユニット４２０は、Ｒ３ａ（積Ａ×Ｂ）及びＲ３ｂ（オペランドＣ）を受け取る。整数加算は仮数アライメントを必要としないので、右シフトカウント回路４２８は、全てのＩＭＡＤ演算に対して一貫した状態のＳｗａｐＣｔｌ信号を生成でき、その結果、例えば、Ｒ３ａ（Ｒ３ｂ）は常にスモール（ラージ）オペランドパス９０８（９１０）（図９）へ向けられ、又は、その逆もまた同様である。代替的に、オペランドの一方が負であるならば、そのオペランドは、スモールオペランドパス９０８へルーティングされ、条件付きインバータ９１８によって反転させられる。スティッキービットロジック９１４は、パス９１５上にスティッキービットＳＢ４を生成するように動作する。
【０１５９】
[0175]ステージ５において、プラス１加算器１００２（図１０）は、値Ｒ４ａ及びＲ４ｂ（Ａ×ＢとＣを表現する）を加算し、丸めロジック１００８は、受け取られたオペランドの符号及びスティッキービットＳＢ４に基づいて、Ｓｕｍ出力、Ｓｕｍ＋１出力、及び、〜Ｓｕｍ出力のうちの適切な一つを選択する。結果Ｒ５はパス１０１１に伝搬させられる。
【０１６０】
[0176]ステージ６において、結果Ｒ５はそのまま正規化ブロック４２３を通過させられる。
【０１６１】
[0177]ステージ７において、フォーマット化ブロック１２１０は結果Ｒ６を受け取り、必要に応じて、入力オペランドフォーマットに適合するようにその結果をフォーマット化する。フォーマット化ブロック１２１０はまた、好適には、オーバーフローを検出し、結果値Ｒｄａｔａを入力フォーマットに対する最大許容値にクランプする。最終結果選択ロジック１２１４は、パスＲｄａｔａ上の値を最終結果ＯＵＴとして選択する。
【０１６２】
２．  乗算（ＩＭＵＬ）及び加算（ＩＡＤＤ）
[0178]上述のＦＭＵＬ及びＦＡＤＤ演算と同様に、整数乗算（ＩＭＵＬ）及び加算（ＩＡＤＤ）演算はＭＡＤパイプラインを利用する。ＩＭＡＤ演算の場合、ＭＭＡＤユニット２２０は、オペランドＡとして被乗数を、オペランドＢとして乗数を受け取り、値０（整数零）が好適にはオペランドＣのために供給される。上述したようなＩＭＡＤ演算は、次に、ステージ４において、スティッキービットロジック９１４（図９）がスティッキービットＳＢ３を通過させ、積が丸め処理されるようにすると有利である点を除いて、積Ａ×Ｂ（＋０）を生成するために実行される。一部の実施の形態では、オペランドＣは、ステージ４の条件付き零ブロック９２０（図９）を使用して強制的に零にされ、その結果、オペランドＣには任意の値が供給されてもよい。
【０１６３】
[0179]整数加算（ＩＡＤＤ）の場合、ＭＭＡＤユニット２２０は、オペランドＡ及びＣとして加数を受け取る。ある実施の形態では、ＩＭＡＤ演算は、（Ａ×１）＋Ｃを計算するためにオペランドＢを１にセットして実行され、オペランドＢを１にセットすることは、例えば、整数１をオペランドＢとしてＭＭＡＤユニット２２０に供給することによって、又は、レジスタ６２０若しくは異なるレジスタからブース３方式で符号化された整数１を選択するように乗算器前段選択ｍｕｘ６１６（図６Ａ）を作動することによって行われ得る。
【０１６４】
[0180]ＩＡＤＤの代替的な実施の形態では、オペランドＢは（例えば、整数零を入力オペランドとしてＭＭＡＤユニット２２０へ供給することにより）零にセットされ、オペランドＡ及びＢがステージ３へ迂回させられ、ステージ３で、和Ａ＋０が乗算器後段ブロック８０２内のＩＰ加算器８０４（図８Ａ）によって計算され、或いは、異なる実施の形態では、オペランドＡが結果Ｒ３ａとしてＩＰ加算器８０４の周りを迂回させられる。後続のステージは、Ａ＋Ｃを計算するため、ＩＭＡＤの場合と同様に動作する。
【０１６５】
３．  絶対差の和：ＩＳＡＤ
[0181]整数の場合、絶対差の和（ＩＳＡＤ）演算がサポートされている。この演算は、｜Ａ−Ｂ｜＋Ｃを計算する。ステージ０で、オペランドＡ、Ｂ及びＣが受け取られ、オペランドＢが、オペランド〜Ｂを生成するために、インバータ５１９（図５）によって反転させられる。オペランドは、その後に、ステージ１及び２を通過させられる。
【０１６６】
[0182]ステージ３において、乗算器後段ブロック４１８は、ＩＰ加算器８０４（図８Ａ）内でＡと〜Ｂを加算することによりＡ−Ｂを計算し、結果Ｒ３ａを伝搬させる。比較ロジックブロック４３６（図８Ｂ）において、ＡＢ符号回路８２０はＡ−Ｂの符号を検出し、パス８２１上でステージ４及び５へ転送される対応する符号信号Ｓａｂを生成する。２値テストロジック８２２は、オペランドＣを結果Ｒ３ｂとして伝搬させるように選択ｍｕｘ８２４を制御する。
【０１６７】
[0183]ステージ４において、Ａ−Ｂの絶対値が決定される。特に、ＩＳＡＤ演算のＳｗａｐＣｔｌ信号は、結果Ｒ３ａ（即ち、Ａ−Ｂ）がスモールオペランドパス９０８へルーティングされ、結果Ｒ３ｂ（即ち、オペランドＣ）がラージオペランドパス９１０へルーティングされるように、スワップｍｕｘ９０４及び９０６（図９）を制御する。スモールオペランドパス９０８上の条件付きインバータ９１８は、ＡＢ符号回路８２０からＳａｂ信号を受け取り、符号が負であるならば、オペランド（Ａ−Ｂ）を反転させる。よって、結果Ｒ４ａは非負整数に対応し、（正又は負の整数である）オペランドＣは結果Ｒ４ｂとして伝搬させられる。
【０１６８】
[0184]ステージ５において、プラス１加算器１００２は、パスＲ４ａとパスＲ４ｂからの値を加算する。Ｓａｂ信号に基づいて、丸めロジック１００８は、２の補数形式で正しい答えを提供するためにＳｕｍ出力又はＳｕｍ＋１出力の何れかを選択する。特に、Ａ−Ｂが非負であるならば、結果は（Ａ−Ｂ）＋Ｃとすべきであり、これはＳｕｍ出力である。Ａ−Ｂが負であるならば、結果はＣ−（Ａ−Ｂ）であり、これは２の補数ではＣ＋〜（Ａ−Ｂ）＋１として表現され、ステージ４内の条件付き反転によってＳｕｍ＋１出力である。
【０１６９】
[0185]ステージ６及び７において、結果Ｒ５は、その他の整数算術演算と同様に伝搬させられる。一部の実施の形態では、ステージ７のフォーマット化ブロック１２１４（図１２）は、上述のようにオーバーフローを検出し、取り扱う。
【０１７０】
４．  比較演算：ＩＭＩＮ、ＩＭＡＸ、ＩＳＥＴ
[0186]上述のように、浮動小数点比較ＦＭＩＮ、ＦＭＡＸ、ＦＳＥＴは、オペランドを整数として取り扱うことによって実行される。したがって、整数比較演算ＩＭＩＮ、ＩＭＡＸ及びＩＳＥＴの実施は、セクションIII．Ａ．３及びIII．Ａ．４に記載した浮動小数点比較の実施と全く同様である。
【０１７１】
５．  条件付き選択演算：ＩＣＭＰ
[0187]整数条件付き選択演算（ＩＣＭＰ）もまた浮動小数点条件付き選択演算と全く同様であり、ＭＭＡＤユニット２２０内でのこの演算の処理は、セクションIII．Ａ．５に記載したＦＣＭＰの実施と同じである。
【０１７２】
Ｃ．  ビット単位論理演算
[0188]整数算術関数及び浮動小数点算術関数に加えて、ＭＭＡＤユニット２２０は、ビットが何を表現しているかとは無関係にオペランドのビットを操作する種々のビット単位論理演算（図３の３０６に掲載されている）を更にサポートする。これらの演算は、ビット単位ブール演算ＡＮＤ、ＯＲ、及び、ＸＯＲと、ビットシフト演算ＳＨＬ（左シフト）及びＳＨＲ（右シフト）を含む。
【０１７３】
１．  ブール演算：ＡＮＤ、ＯＲ、ＸＯＲ
[0189]ブール演算は、主として、ステージ１のビット単位論理ブロック４３４によって取り扱われる。これらの演算の場合、ＭＭＡＤユニットは、二つの３２ビットオペランドＡ及びＢと（オペランドＣは無視されるので、いかなる値にセットされてもよい）、望ましいブール演算を示すオペコードとを受け取る。オペランドはステージ０の中を通過させられる。
【０１７４】
[0190]ステージ１において、ビット単位論理ブロック４３４は、オペランドＡ及びＢを受け取り、並行して、論理回路６３０、６３２、６３４（図６Ｃ）を使用して、オペランドＡ及びＢに関してビット単位ＡＮＤ、ＯＲ及びＸＯＲ演算を実行する。選択ｍｕｘ６３６は、要求されているブール演算を示すＯＰＣＴＬ信号を受け取り、対応する結果をＲ１として伝搬させる。オペランドＡ及びＢは、ステージ１の乗算器前段ブロック４１６及びステージ２の乗算器ブロック４１４を通過させられる。
【０１７５】
[0191]ステージ３において、比較ロジックブロック４３６は、ブール演算の結果Ｒ１を結果Ｒ３ｂとして伝搬させる。乗算器後段ブロック４１８は、ＡとＢを加算するか、又は、単に結果Ｒ３ａとしてＡを伝搬させ、何れのケースでも、結果Ｒ３ａは廃棄される。
【０１７６】
[0192]ステージ４において、スワップｍｕｘ９０４及び９０６（図９）は、結果Ｒ３ｂをスモールオペランドパス９０８へ向け、結果Ｒ３ａをラージオペランドパス９１０へ向ける。スモールオペランドパス９０８において、結果Ｒ３ｂ（望ましい結果）は、変更されることなく結果Ｒ４ａとして伝搬させられる。ラージオペランドパス９１０において、条件付き零回路９２０は、ＯＰＣＴＬ信号に応じて、結果Ｒ４ｂを零にする。
【０１７７】
[0193]ステージ５において、プラス１加算器１００２（図１０）は、Ｒ４ｂ（零）をＲ４ａ（ブール演算の結果）に加算し、和の結果を結果Ｒ５として選択する。ステージ６において、結果Ｒ６にシフトは適用されない。ステージ７において、結果Ｒ６は更に変更されることなく最終結果として伝搬させられ、この演算の場合にオーバーフロー又はその他の条件は起こらない。
【０１７８】
２．  ビットシフト演算：ＳＨＬ、ＳＨＲ
[0194]ＭＭＡＤユニット２２０は、ビットフィールドを左シフト（ＳＨＬ）又は右シフト（ＳＨＲ）するためにビットシフト演算を更に実行する。どちらの演算の場合も、シフトされるべき３２ビットフィールドはオペランドＡとしてＭＭＡＤユニット２２０に供給され、シフト量は、好適には、８ビット整数値をオペランドＢのｆｐ３２指数ビット位置に挿入することにより、ＭＭＡＤユニット２２０へ供給される。３１より大きなシフト量は関係がないので、シフト量データを搬送するためには８ビットであれば十分である。オペランドＢの符号ビット及び端数ビットはこれらの演算の場合に無視されるので、オペランドＣと同様にいかなる値にセットされてもよい。
【０１７９】
[0195]ＳＨＬ演算はステージ６の左シフト回路１１１２（図１１）を利用する。オペランドＡは、セクションII．Ｊにおいて説明したように、ステージ５の出力Ｒ５へ通過させられる。並行して、シフト量を示すオペランドＢの指数部Ｅｂもまた指数パス４１５の中をパス４４３上の結果ＥＦＥ２まで通過させられる。より詳細には、ステージ１において、シフト量Ｅｂは、選択ｍｕｘ６２８（図６Ｂ）の動作によって、指数積ブロック４２４を通過させられる。ステージ２において、差ブロック７１４（図７Ｂ）は、出力ＥＦＥとして（Ｅｂである）入力Ｅａｂを選択するようにｍｕｘ７１６に命令することにより、ＯＰＣＴＬ信号に応答する。指数インクリメントブロック９０２は、ＥＦＥ信号をそのままパス４４３へ通過させる。
【０１８０】
[0196]ステージ６において、シフト制御ブロック１１１０（図１１）は、パス４４３上の信号ＥＦＥ２としてシフト量Ｅｂを受け取り、その量を反映するＬｓｈＡｍｔ信号を生成する。一部の実施の形態では、シフト制御ブロック１１１０は、例えば、Ｅｂが非常に大きいならば、ＬｓｈＡｍｔ信号を３１ビットでクランプする。ＬｓｈＡｍｔ信号に応じて、左シフト回路１１１２は、適切なビット数を用いてオペランドＡ（結果Ｒ５）をシフトし、好適には、必要に応じて末尾の零を挿入する。左シフトされた結果Ｒ６はパス４２５上に伝搬させられる。一部の実施の形態では、指数デクリメントブロック４３２は、変更することなく、最終指数Ｅ０としてシフト量信号ＥＦＥ２を伝搬させる。
【０１８１】
[0197]ステージ７において、結果Ｒ６は、好適には、最終結果ＯＵＴとしてそのまま供給される。一部の実施の形態では、ステージ７は、シフト量が３１を上回るならば、結果を零にクランプするロジックを更に含み、このロジックは、シフト量を最終指数Ｅ０として受け取る飽和ロジック１２１６に組み込まれる。
【０１８２】
[0198]ＳＨＲ演算はステージ４の右シフト回路９１２（図９）を利用する。ＳＨＲ演算は、零が新しいＭＳＢ毎に挿入される論理シフトモードと、符号ビットが新しいＭＳＢに拡張される算術シフトモードの両方をサポートするために実施されてもよく、オペコードが好適には各ＳＨＲ演算のモードを選択する。
【０１８３】
[0199]上述のように、シフトされるべきオペランドはオペランドＡとして供給され、シフト量は、ｆｐ３２型のオペランドＢの指数ビットを使用して供給される。オペランドＡは、セクションII．Ｊに記載したように、ステージ３の出力（結果Ｒ３ａ）を通過させられる。
【０１８４】
[0200]並行して、シフト量Ｅｂは右シフトカウント回路８０４へ伝搬させられる。より詳細には、ステージ１において、シフト量Ｅｂは、選択ｍｕｘ６２８（図６Ｂ）の動作によって、指数積ブロック４２４を迂回してパス４３１へ渡される。ステージ２では、差ブロック７１４（図７Ｂ）は、差ＥｄｉｆｆとしてＥａｂ値を選択するようにｍｕｘ７１６に命令する。ＥＦＥ信号は無視され、何れかの候補値が必要に応じて選択され、一部の実施の形態では、Ｅａｂ値がＥＦＥ値として供給される。
【０１８５】
[0201]ステージ３において、右シフトカウント回路４２８は、Ｅｄｉｆｆ信号（即ち、Ｅｂ）に対応するＲｓｈＡｍｔ信号を生成する。ＲｓｈＡｍｔ信号は、例えば、３１ビットにクランプされる。一部の実施の形態では、右シフトカウント回路４０８は、受け取られたＯＰＣＴＬ信号に基づいて、論理シフトと算術シフトのどちらが要求されているかを判定し、対応する「シフトタイプ」ビットをＲｓｈＡｍｔ信号に組み入れる。
【０１８６】
[0202]ステージ４において、スモールスワップｍｕｘ９０４（図９）は、オペランドＡをスモールオペランドパス９０８へ向ける。ラージオペランドパス９１０上で、結果Ｒ４ｂは条件付き零回路９２０によって零にされる。スモールオペランドパス９０８上で、右シフト回路９１２は、ＲｓｈＡｍｔ信号を受け取り、指定されたビット数を用いてオペランドＡを右シフトする。一部の実施の形態では、右シフト回路９１２は、ＲｓｈＡｍｔ信号中のシフトタイプビット（論理又は算術）を検出し、それに応じて、オペランドが右シフトされるときに零又は１を新しいＭＳＢに挿入する。
【０１８７】
[0203]ステージ５において、結果Ｒ４ａ（右シフトされたオペランドＡ）は、プラス１加算器１００２（図１０）によってＲ４ｂ（零）に加算され、結果Ｒ５として選択される。ステージ６において、結果Ｒ５は、更にシフトされることなく、正規化ブロック４２３の中を伝搬する。ステージ７において、結果Ｒ６は、好適には、変更されることなく、最終結果ＯＵＴとして使用される。一部の実施の形態では、ステージ７は、シフト量Ｅｂが３１を超えるならば、結果を零にクランプするロジックを更に含み、このロジックは、左シフト演算に関して説明したようにＥｂを受け取る飽和ロジック１２１６に組み込むことが可能である。
【０１８８】
Ｄ．  フォーマット変換演算
[0204]ＭＭＡＤユニット２２０は、種々の整数フォーマット及び浮動小数点フォーマットの間の変換を更にサポートする。一部の実施の形態では、フォーマット変換は、上述の算術演算と同時に実行されないが、ある種のその他の演算はフォーマット変換と組み合わされる。例えば、種々の変換演算は、整数Ｎに関する２Ｎによるスケール変換、及び／又は、オペランドの絶対値又は否定の決定と組み合わされる。以下のセクションは、浮動小数点フォーマット間の変換と、整数フォーマット間の変換について説明する。
【０１８９】
１．  浮動小数点対浮動小数点の変換（Ｆ２Ｆ）
[0205]サポートされている浮動小数点対浮動小数点（Ｆ２Ｆ）の変換演算は、ｆｐ１６からｆｐ３２への直接変換、及び、その逆を含み、このような変換は、絶対値、否定、及び／又は、２Ｎスケール変換を更に組み込む。その上、ｆｐ１６からｆｐ１６及びｆｐ３２からｆｐ３２への整数丸め変換もサポートされている。全てのケースにおいて、変換されるべき数は、オペランドＡとしてＭＭＡＤユニット２２０へ供給され、２Ｎスケール変換が行われるべきであるならば、スケール係数Ｎは、ｆｐ３２型オペランドＢの８ビットの指数ビットＥｂを使用して供給される。ｆｐ１６及びｆｐ３２フォーマットの場合、符号ビットが設けられ、絶対値及び否定は符号ビットを操作することより実施され得る。このような操作は当技術分野で知られており、詳細な説明は省略する。
【０１９０】
[0206]ｆｐ１６からｆｐ３２への直接変換は、オペランドＡのｆｐ３２表現を生成するためにステージ０のアップコンバータ５１２（図５）を使用する。アップコンバータ５１２は、（例えば、１２７−１５＝１１２を加算することにより）ｆｐ３２に対応するように指数バイアスを調整し、１３の末尾の零を端数に付け加える。オペランドＡがｆｐ１６型非正規数でない限り、この変換は正確である。ステージ１において、特殊数検出ブロック４１４は、オペランドＡがｆｐ１６型非正規数、ＩＮＦ、又は、ＮａＮであるか否かを判定し、適切な信号をパスＳＰＣ上に生成する。
【０１９１】
[0207]オペランドＡの仮数部は、セクションII．Ｊにて上述しているように、ステージ５の出力（結果Ｒ５）へ通過させられる。オペランドＡ及びＢのそれぞれの指数部Ｅａ、Ｅｂは、ステージ１の指数積ブロック４２４へ送出され、このケースでは、指数Ｅｂが指数スケール係数Ｎである。指数Ｅａ及びＥｂは、指数積ブロック４２４において加算され、それによって、２Ｎスケール変換を実現し、結果Ｅａｂがパス４３１へ伝搬させられる。ステージ２では、指数和ブロック４２６が有効最終指数ＥＦＥとして結果Ｅａｂを伝搬させる。ステージ３では、右シフトカウント回路４２８は、零シフトに対する信号を生成することによりＯＰＣＴＬ信号に応答し、パス７２５に存在するであろうＥｄｉｆｆ信号を無視する。ステージ４で、指数インクリメントブロック４３０は変更することなく（ＥＦＥ２として）指数ＥＦＥをパス４３３へ転送する。
【０１９２】
[0208]ステージ６はｆｐ１６型非正規数を取り扱うために使用され、ｆｐ１６型非正規数の全てはｆｐ３２では正規数として表現される。上述のように、非正規数は、最小許容指数を有し、仮数に暗黙の整数１をもたない数として解釈される。ステージ６では、優先エンコーダ１１０８（図１１）がオペランドＡの仮数部における先頭の１の位置を判定する。特殊数信号ＳＰＣがオペランドＡはｆｐ１６型非正規数であることを示すならば、シフト制御回路１１１０は、先頭の１の位置に基づいてＬｓｈＡｍｔ信号を生成し、そうでなければ、シフト制御回路１１１０は零シフトに対応するＬｓｈＡｍｔ信号を生成する。左シフト回路１１１２は、指定されたシフトを仮数Ｒ５に適用し、それによって、正規化された仮数Ｒ６を生成する。指数デクリメントブロック４３２（図４）は、対応する量を使って指数ＥＦＥ２をデクリメントする。
【０１９３】
[0209]ステージ７は、入力がｆｐ１６型ＩＮＦ又はＮａＮであるケースを取り扱うため使用される。特に、特殊数信号ＳＰＣがこのような値を示すならば、最終結果選択ロジック１２１４（図１２）は、必要に応じて、正規ｆｐ３２型ＩＮＦ又はＮａＮ値を選択する。更に、２Ｎスケール変換は指数を飽和させることがあるので、飽和ロジック１２１６が、好適には、このような飽和を検出し、最終結果として適切な特殊数（例えば、ＩＮＦ）の選択を行うためにも使用される。
【０１９４】
[0210]ｆｐ３２からｆｐ１６への直接変換は、指数を８ビットから５ビットに削減し、有効数字を２３ビットから１０ビットに削減することを伴う。有効数字は、必要に応じて、丸められるか、又は、切り捨てられる。この丸め処理は、ステージ４のアライメントユニット４２０（図９）と、ステージ５の丸めロジック１００８（図１０）とを利用する。オペランドＡの仮数部（好ましくは、明示的な先頭の１を含む）は、セクションII．Ｊにおいて説明したようにステージ３の出力（結果Ｒ３ａ）へ通過させられる。
【０１９５】
[0211]ステージ１において、オペランドＡの指数部Ｅａは指数積ブロック４２４の中を通過させられ、２Ｎスケール変換は、上述したようにオペランドＢの指数部Ｅｂを加算することにより適用されてもよい。結果Ｅａｂはパス４３１に伝搬させられる。
【０１９６】
[0212]ステージ２において、指数和ブロック４２６は、例えば、１１２を減算するために差分回路７１４（図７Ｂ）を使用することにより、指数にｆｐ１６型バイアスまで再びバイアスを加え、その結果を有効最終指数ＥＦＥとして供給する。他の実施の形態では、再バイアス化は、バイアスβと指数積ブロック４２４（図６Ｂ）の加算器６２４とを使用しても実行されてもよい。指数和ブロック４２６は、好適には、ｆｐ１６型指数オーバーフロー（ＩＮＦ又はＮａＮ）及びアンダーフロー（非正規数）を更に検出する。オーバーフローの場合、指数はその最大値にクランプされる。アンダーフローの場合、指数和ブロック４２６は、アンダーフローの量（例えば、１１２−Ｅａｂ）を示すように差Ｅｄｉｆｆをセットし、有効最終指数ＥＦＥを零（最小指数）にセットする。アンダーフロー以外のケースでは、差Ｅｄｉｆｆは零にセットしてもよい。
【０１９７】
[0213]ステージ３では、右シフトカウント回路４２８は、適用されるべき右シフト量を決定するためにＥｄｉｆｆ信号を使用し、適当なＲｓｈＡｍｔ信号を生成する。ｆｐ３２からｆｐ１６への変換の場合、デフォルトシフトは１３ビットによる（したがって、結果Ｒ４ａの１１ビットのＬＳＢはｆｐ１６型仮数を搬送する）。差Ｅｄｉｆｆがこのデフォルト値に加算されて、ｆｐ１６型非正規数は最大で２４ビットまで右シフトされる。２４ビットを上回るシフトは、ｆｐ１６型の零を生じ、その結果、これに応じて、右シフトカウント回路８０４は、この演算の場合、シフト量を２４ビットにクランプすることができる。
【０１９８】
[0214]ステージ４では、スワップｍｕｘ９０４（図９）は、オペランドＡの仮数をスモールオペランドパス９０８へ向ける。ラージオペランドパス９１０上で、結果Ｒ４ｂは条件付き零ユニット９２０によって零にされる。スモールオペランドパス９０８上で、右シフト回路９１２は、ＲｓｈＡｍｔ信号に従って、仮数を右シフトし、スティッキービットロジック９１４は、好適には、スティッキービットＳＢ４を生成する。
【０１９９】
[0215]ステージ５では、結果Ｒ４ａ（オペランドＡの仮数）は、プラス１加算器１００２（図１０）によってＲ４ｂ（零）に加算される。丸めロジック１００８は、スティッキービットＳＢ４を受け取り、望ましい丸めモードに従って、Ｓｕｍ出力とＳｕｍ＋１出力との間で選択を行い、他の演算と同様に、何れかのＩＥＥＥ丸めモードが選択されてもよい。丸めロジック１００８によって選択された結果Ｒ５はパス１０１１へ伝搬させられる。
【０２００】
[0216]ステージ６では、正規化ブロック４２３は、結果Ｒ５を変更することなく通過させる。
【０２０１】
[0217]ステージ７では、フォーマットブロック１２１０（図１２）は、最終指数Ｅ０及び仮数Ｒ６を使用してｆｐ１６型の結果をフォーマット化する。指数飽和ロジック１２１６はｆｐ１６型指数オーバーフローを検出し、最終結果検出ロジック１２１４は、結果をｆｐ１６型ＩＮＦで上書きすることにより、このようなオーバーフローに応答する。更に、ステージ１の特殊数検出ブロック４３８によって検出されたｆｐ３２型ＩＮＦ又はＮａＮ入力は、ｆｐ１６型ＩＮＦ又はＮａＮを出力させることが可能である。
【０２０２】
[0218]Ｆ２Ｆ整数丸め演算は、入力フォーマットと出力フォーマットが同じであるケース（ｆｐ３２対ｆｐ３２、又は、ｆｐ１６対ｆｐ１６）で実施される。整数丸めは、オペランドによって表現された数の小数部を除去し、丸めは、標準的なＩＥＥＥ丸めモード（切り上げ、切り下げ、切り捨て、及び、最近傍）のうちのいずれかを使用する。ｆｐ３２対ｆｐ１６変換の場合と同様に、ＭＭＡＤユニット２２０は、整数丸めをサポートするために、ステージ４の右シフト回路９１２とステージ５の丸めロジック１００８とを利用する。２Ｎによるスケール変換はこの演算と組み合わせてもよい。
【０２０３】
[0219]オペランドＡの仮数は、セクションII．Ｊにおいて記載したように、ステージ３の出力（結果Ｒ３ａ）へ通過させられる。整数丸めをサポートするため、バイナリポイントの場所を決定するためにステージ１及び２の指数ロジックが使用される。ステージ１では、２Ｎスケール変換の適用に加えて、指数積ブロック４２４（図６Ｂ参照）もまたバイアスβ（例えば、ｆｐ３２の場合には１２７、ｆｐ１６の場合には１５）を減算し、結果をＥａｂとして供給する。結果Ｅａｂが零未満であるならば、その数は純然たる小数である。ステージ２では、指数和ブロック４２６が結果Ｅａｂを（信号Ｅｄｉｆｆとして）パス７２５及び（信号ＥＦＥとして）７２３へ供給する。
【０２０４】
[0220]ステージ３では、右シフトカウント回路４２８は、信号Ｅｄｉｆｆに基づいて右シフト量ＲｓｈＡｍｔを決定する。シフト量は、好適には、シフトされた仮数に対して、真のバイナリポイントがＬＳＢの直ぐ右側であるように選択される。例えば、ｆｐ３２型入力の場合、シフト量は、Ｅａｂ≦２３に対して（２３−Ｅａｂ）であり、Ｅａｂ＞２３に対して零である。右シフトカウント回路４２８はこの量を計算し、適切なＲｓｈＡｍｔ信号をアライメントブロック４２０へ供給する。
【０２０５】
[0221]ステージ４では、スモールスワップｍｕｘ９０４（図９）は、オペランドＡをスモールオペランドパス９０８へ向け、ラージオペランドパス９１０上で、条件付き零回路９２０は結果Ｒ４ｂを零にする。スモールオペランドパス９０８において、右シフト回路９１２はＲｓｈＡｍｔ信号に従って右シフトを実行し、スティッキービットロジック９１４はスティッキービットＳＢ４を生成する。
【０２０６】
[0222]ステージ５では、プラス１加算器１００２（図１０）は、結果Ｒ４ａ（オペランドＡの仮数）とＲ４ｂ（零）を加算し、丸めロジック１００８は、丸めモードと、パス５０４上のスティッキービットとに基づいて、結果Ｓｕｍと結果Ｓｕｍ＋１との間で選択を行う。
【０２０７】
[0223]ステージ６では、結果Ｒ５は入力フォーマットへ再正規化される。優先エンコーダ１１０８（図１１）は先頭の１の位置を検出し、シフト制御回路１１１０は、適切なビット数を使って仮数を左シフトさせ、末尾の零を挿入するように左シフト回路１１１２に命令する、対応するＬｓｈＡｍｔ信号を生成する。指数デクリメントブロック４３２（図４）は、好適には、ＬｓｈＡｍｔ信号を無視し、指数ＥＦＥ２をそのまま最終指数Ｅ０として供給するように構成される。
【０２０８】
[0224]ステージ７では、結果はフォーマット化され、出力として伝搬させられる。２Ｎスケール変換が飽和に達するときに、指数飽和ロジック１２１６が好適には作動される。特殊数入力（例えば、ＩＮＦ又はＮａＮ）が検出され、対応する特殊数結果が上述のように返される。
【０２０９】
２．  浮動小数点対整数の変換（Ｆ２Ｉ）
[0225]浮動小数点対整数（Ｆ２Ｉ）の変換は、上述の整数丸めＦ２Ｆ変換と同様に、ＭＭＡＤユニット２２０において実施される。変換されるべき浮動小数点数は、ｆｐ１６又はｆｐ３２フォーマットのオペランドＡとしてＭＭＡＤユニット２２０に供給される。２Ｎによるスケール変換は、上述のようにｆｐ３２型オペランドＢの指数ビットにスケール変換パラメータＮを供給することによって実施される。ある実施の形態では、ターゲット整数フォーマットは、符号付き又は符号無しの１６ビット又は３２ビットであり、ターゲットフォーマットはオペコードによって指定される。
【０２１０】
[0226]ステージ０において、オペランドＡがｆｐ１６フォーマットであるならば、アップコンバータ５１２（図５）は、上述のようにオペランドＡをｆｐ３２フォーマットへ昇格させる。絶対値及び否定もまたこのステージで適用される。絶対値の場合、符号ビットは正にセットされる。否定の場合、符号ビットは反転させられる。適用可能な否定後に、符号ビットが負であり、符号付き整数表現が要求されるならば、仮数部は条件付きインバータ５１８によって反転させられ、負の結果を要求する符号制御信号（図４には示していない）が更に伝搬させられる。
【０２１１】
[0227]ステージ１−４は、Ｆ２Ｆ整数丸め変換に関して説明したように進行し、ステージ３の右シフト制御回路４２８は、仮数が右シフトされ、ステージ４の右シフト回路９１２（図９）がシフトを適用するために使用されるときに、ＬＳＢの直ぐ右側にバイナリポイントを置くシフト量ＲｓｈＡｍｔを生成する。スティッキービットロジック９１４はスティッキービットＳＢ４を生成できる。
【０２１２】
[0228]ステージ５では、プラス１加算器１００２（図１０）は、結果Ｒ４ａ（オペランドＡの仮数）とＲ４ｂ（零）を加算し、Ｓｕｍ出力とＳｕｍ＋１出力を生成する。丸めロジック１００８は、適用可能な丸めモードに基づいて、符号付き整数フォーマットの場合は、更に、適切な２の補数表現が獲得されるようにステージ０からの符号制御信号が負の結果を示すか否かに基づいて、それらの間の選択を行う。
【０２１３】
[0229]ステージ６では、右シフトされた仮数Ｒ５はそのまま通過させられる。
【０２１４】
[0230]ステージ７では、指数飽和ロジック１２１６（図１２）は、入力浮動小数点値がターゲット整数フォーマットの最大値を超えるか否かを判定する。もしそうであるならば、結果は、最終結果選択ロジック１２１４によって最大値にクランプされる（例えば、全ビットが１にセットされる）。入力オペランドがＩＮＦである場合、出力は最大整数値にクランプされ、同様に、入力オペランドがＮａＮである場合、出力はやはり望ましい値、例えば、零にクランプされてもよい。正しくフォーマット化された整数は最終結果ＯＵＴとして送られる。３２ビットより小さな整数フォーマットの場合、結果は、必要に応じて、３２ビットフィールド内で、右揃えされるか、又は、左揃えされる。
【０２１５】
３．  整数対浮動小数点の変換（Ｉ２Ｆ）
[0231]ある実施の形態では、整数対浮動小数点（Ｉ２Ｆ）の変換演算は、符号付き又は符号無しの整数フォーマットをｆｐ３２に変換し、８ビット及び１６ビットの符号付き又は符号無しフォーマットをｆｐ１６に変換するためにサポートされている。他の変換と同様に、オプション的な否定、絶対値、及び、２Ｎスケール変換がサポートされている。オペランドＡは整数フォーマットでＭＭＡＤユニット２２０へ供給され、スケール変換パラメータＮは、上述のように、浮動小数点オペランドＢの指数ビットに供給される。
【０２１６】
[0232]ステージ０では、オペランドＡは、必要に応じて、アップコンバータ５０４、５０８（図５）によって３２ビットへアップコンバートされる。アップコンバージョンは、符号拡張又は零拡張を使用できる。オペランドＡが負であるならば、オペランドは条件付きインバータ５１８によって反転させられ、Ａが反転されたことを示す符号制御信号が伝搬させられる。この信号は浮動小数点結果の符号ビットをセットするために使用される。（絶対値が要求されるならば、符号ビットは常にその正の状態にセットされる）。
【０２１７】
[0233]浮動小数点数の指数が２３１と一致するように初期化され、次に、整数内の先頭の１の実際の位置に基づいて下方へ調整される。仮数に関して、整数の３２ビットは、整数を浮動小数点仮数フィールドに収めるために必要とされる程度（ｆｐ３２の場合には２４ビット、ｆｐ１６の場合には１１ビット）、右へシフトされる。特に、右シフトは、３２ビット整数からｆｐ３２への変換中に整数の８ビットのＭＳＢの何れかが非零であるケースで実行され、１６ビット整数からｆｐ１６への変換中に整数の５ビットのＭＳＢの何れかが非零であるケースで実行される。右シフトが行われる場合、浮動小数点結果は何れかのＩＥＥＥ丸めモードを使用して丸められる。
【０２１８】
[0234]より詳細には、ステージ１では、Ｉ２Ｆバイト回路４４４は、入力フォーマットに基づいて、オペランドＡから８ビットのＭＳＢを抽出する。３２ビット整数入力の場合、３２ビットフィールドのうちの８ビットのＭＳＢが抽出され、３２ビットフィールドに右揃えされた１６ビット整数フォーマットの場合、３２ビットフィールドのうちの最初の１６ビットが落とされ、次の８ビットのＭＳＢが抽出される。８ビット整数の場合、最後の８ビットが抽出されてもよいが、Ｉ２Ｆバイト回路４４４の結果が８ビット整数入力のため使用されないことは明らかになるであろう。上述のように、Ｉ２Ｆバイト回路４４４は、残りのビットが全て１であるか否かをテストするＡＮＤツリーを更に含み、このテストの結果（信号Ａｎｄ２４）がパス４３７上に伝搬させられる。並行して、指数積ブロック４２４は、信号Ｅａｂを、３１とｆｐ１６用の適切なバイアス（１５）又はｆｐ３２用の適切なバイアス（１２７）との合計にセットする。２Ｎスケール変換が使用されると、指数積ブロック４２４は上述のようにスケール変換パラメータＮを更に加算する。
【０２１９】
[0235]ステージ２では、指数和ブロック４２６の優先エンコーダ７１８（図７Ｂ）は、オペランドＡのＭＳＢの範囲内で先頭の１の位置を決定する。差分回路７１４は、指数差Ｅｄｉｆｆとして優先エンコーダの結果を選択し、有効最終指数ＥＦＥとして指数Ｅａｂを選択する。一部の実施の形態では、差分回路７１４は、２の補数を決めるためにオペランドに１を加算することが８ビットのＭＳＢの間に非零ビットを生じるか否かを判定するために信号Ａｎｄ２４を使用し、それに応じて優先エンコーダの結果を調整する。類似したロジックが優先エンコーダ７１８にも組み込まれてもよい。オペランドＡは、セクションII．Ｊに記載したように乗算器ブロック４１４の出力（結果Ｒ２ａ）へ迂回させられる。
【０２２０】
[0236]ステージ３では、オペランドＡがステージ０で反転させられているならば（これは上述の符号制御信号から決定される）、オペランドＢはｍｕｘ８１２（図８Ａ）を使用して強制的に１にされ、２の補数反転を完成するために、ＩＰ加算器８０４によってオペランドＡに加算される。そうでなければ、オペランドＡはパス４２１へ迂回させられる。よって、結果Ｒ３ａは、ｆｐ１６又はｆｐ３２フォーマットの仮数に関して、必要に応じて、正であることが保証される。
【０２２１】
[0237]同様にステージ３では、右シフトカウント回路４２８は、仮数が右シフトされるべきか否かを判定するために信号Ｅｄｉｆｆを使用し、もしそうであるならば、シフト量である。（先頭の零を除く）整数を表現するために必要とされるビット数が浮動小数点フォーマットにおける有効数字ビット数を超えるならば、右シフトが好適には使用される。例えば、３２ビット整数フォーマットからｆｐ３２への変換中に、仮数は、先頭の１が１番目から８番目までのビット位置の何れかにあるならば、右シフトされるべきであり、１６ビット整数フォーマットからｆｐ１６への変換中に、仮数は、先頭の１が１番目から５番目までのビット位置の何れかにあるならば、右シフトされるべきである。既に指摘しているように、優先エンコーダ７１８から来る信号Ｅｄｉｆｆは、この情報を反映し、右シフトカウント回路４２８は適切な信号ＲｓｈＡｍｔを生成する。
【０２２２】
[0238]ステージ４では、スモールスワップｍｕｘ９０４（図９）は、仮数（結果Ｒ３ａ）をスモールオペランドパス９０８へ向ける。右シフト回路９１２は、ＲｓｈＡｍｔ信号に従って、仮数を右シフトする。スティッキービットロジック９０８はスティッキービットＳＢ４を生成する。ラージオペランドパス９１０上で、条件付き零回路９２０は結果Ｒ４ｂを零にする。
【０２２３】
[0239]ステージ５では、プラス１加算器１００２（図１０）は、結果Ｒ４ａ（仮数）とＲ４ｂ（零）を加算し、丸めロジック１００８は、丸めモード及びスティッキービットＳＢ４に基づいて、Ｓｕｍ出力とＳｕｍ＋１出力との間で選択を行う。
【０２２４】
[0240]ステージ６では、仮数Ｒ５は浮動小数点表現に正規化される。正規化ブロック４２３は、先頭の１をＭＳＢ位置に置くために仮数を左シフトし、指数デクリメントブロック４３２はそれに応じて下方へ指数Ｅ０を調整する。
【０２２５】
[0241]ステージ７では、仮数Ｒ６及び指数Ｅ０は、フォーマットブロック１２１０（図１２）によってｆｐ３２型又はｆｐ１６型の数としてフォーマット化され、最終選択ｍｕｘ１２１２へ渡される。飽和ロジック１２１６はアクティブ状態であり、飽和は、幾つかの場合に、例えばｕ１６からｆｐ１６への変換中に、発生する可能性がある。飽和が発生した場合、適切な浮動小数点フォーマットのオーバーフロー値（例えば、ＩＮＦ）が選択される。
【０２２６】
[0242]３２ビット整数からｆｐ１６へのＩ２Ｆ変換は、本実施の形態では、優先エンコーダ７１８（図７Ｂ）が８ビットエンコーダであるため、サポートされていない。当業者は、優先エンコーダのサイズが設計上の選択事項であり、この変換がより大きな優先デコーダ（例えば、２１ビット）を設けることによりサポートされ得ることを認識するであろう。
【０２２７】
[0243]別の実施の形態では、優先エンコーダ７１８は、２の補数変換が実行された後に（例えば、ＩＰ加算器８０４の後で）、パイプライン内のポイントに移され得る。このケースでは、ＡＮＤツリーはプラス１演算の効果を検出するために必要とされないであろう。
【０２２８】
４．  整数対整数（Ｉ２Ｉ）の変換
[0244]整数対整数（Ｉ２Ｉ）の変換演算は、符号付きフォーマットから符号無しフォーマット、及び、その逆を含む、任意の整数フォーマットから別の任意の整数フォーマットへ変換するためサポートされている。否定（２の補数）及び絶対値のオプションがサポートされている。
【０２２９】
[0245]本実施の形態では、以下の規則がＩ２Ｉ変換におけるオーバーフローを取り扱うため適用される。第一に、符号付きフォーマットから符号無しフォーマットへの変換の場合、あらゆる負値は零にクランプされる。第二に、大きなフォーマット（即ち、ビット数の多いフォーマット）から小さなフォーマット（即ち、ビット数の少ないフォーマット）への変換の場合、オーバーフローは小さなフォーマットにおける最大許容値にクランプされる。第三に、小さなフォーマットから大きな符号無しフォーマットへの変換の場合、正値は零拡張され、大きな符号付きフォーマットへの変換の場合、符号拡張が使用される。
【０２３０】
[0246]ステージ０では、オペランドＡが受け取られる。入力フォーマットが３２ビットより小さいならば、オペランドＡは、符号拡張（又は、符号無し入力フォーマットの場合には零拡張）を使用して３２ビット（図５を参照）までアップコンバートされる。オペランドＡは、その後に、セクションII．Ｊにおいて既に説明したように、ステージ３の出力（結果Ｒ３ａ）へ通過させられる。ステージ４では、スモールスワップｍｕｘ９０４（図９）はオペランドＡをスモールオペランドパス９０８へ向け、ラージオペランドパス９１０上で、条件付き零回路９２０は結果Ｒ４ｂを零にする。スモールオペランドパス９０８において、条件付きインバータ９１８は、否定又は絶対値が要求されたか否かに基づくことなく、かつ、絶対値のケースでは、オペランドＡが正であるか負であるかに基づくことなく、オペランドＡを反転させる。
【０２３１】
[0247]ステージ５では、プラス１加算器１００２（図１０）は、Ｒ４ａ（オペランドＡ）とＲ４ｂ（零）を加算する。オペランドＡがステージ４で反転されているならば、Ｓｕｍ＋１出力が選択されて、結果は２の補数形式となる。結果Ｒ５はそのままステージ６の中を通過する。
【０２３２】
[0248]ステージ７では、出力がフォーマット化ブロック１２１０（図１２）においてフォーマット化される。より大きな符号付きフォーマットへの変換の場合、フォーマット化ブロック１２１０は、好適には、符号拡張を適用する。フォーマット化ブロック１２１０は、所定のフォーマットの場合、同様に、結果を最大許容整数にクランプし、例えば、正数の場合、ターゲットフォーマットのＭＳＢ位置の左側に１が存在するならば、出力は全て１にセットされる。
【０２３３】
５．  端数（ＦＲＣ）演算
[0249]端数（ＦＲＣ）演算は、浮動小数点（例えば、ｆｐ３２型）オペランドＡの小数部を返す。ＦＲＣ演算中に、ＭＭＡＤユニット３２０は、オペランドＡの仮数内のバイナリポイントの場所を決定するためにオペランドＡの指数部を使用し、バイナリポイントの右側の全てのビット（整数ビット）を零にセットし、バイナリポイントの右側のビット（端数ビット）を保存するマスクを適用する。
【０２３４】
[0250]ステージ０では、浮動小数点（例えば、ｆｐ１６又はｆｐ３２）オペランドＡが受け取られ、必要に応じてｆｐ３２へアップコンバートされてもよい。オペランドＣは全て零の（又は、強制的に零にされた）フィールドとして入力される。オペランドＡは、セクションII．Ｊで既に説明したようにステージ３の出力（結果Ｒ３ａ）まで通過させられる。
【０２３５】
[0251]ステージ１では、オペランドＡは通過させられるが、ビット単位論理ブロック４３４内の条件付きインバータ６３５（図６Ｃ）は、全て１のフィールドを得るためにオペランドＣを反転させ、選択ｍｕｘ６３６はこのフィールドを結果Ｒ１として選択する。他の実施の形態では、選択ｍｕｘ６３６又は別の回路が、例えば、適切なレジスタ（図示せず）から全て１のフィールドを選択するため使用される。結果Ｒ１（全て１のフィールド）は、セクションII．Ｊで既に説明したようにステージ３の出力（結果Ｒ３ｂ）まで通過させられる。
【０２３６】
[0252]同様にステージ１では、指数積ブロック４２４は、指数バイアス（例えば、ｆｐ３２型オペランドの場合に１２７）をオペランドＡの指数部Ｅａから減算し、この値を指数Ｅａｂとして転送する。ステージ２では、指数和ブロック４２６は、指数差Ｅｄｉｆｆとして、及び、有効最終指数ＥＦＥとして、Ｅａｂを供給する。
【０２３７】
[0253]ステージ３では、右シフトカウント回路４２８は、Ａのバイアスされていない指数（Ｅａｂ）に基づくシフト信号ＲｓｈＡｍｔと、結果Ｒ３ａ及びＲ３ｂをそれぞれラージオペランドパス及びスモールオペランドパスへ向ける適切なＳｗａｐＣｔｌ信号とを生成する。
【０２３８】
[0254]ステージ４では、ラージスワップｍｕｘ９０６（図９）は、オペランドＡ（結果Ｒ３ａ）をラージオペランドパス９１０へ向け、スモールスワップｍｕｘ９０４は１のフィールド（結果Ｒ３ｂ）をスモールオペランドパス９０８へ向ける。右シフト回路９１２は、ＲｓｈＡｍｔ信号に応じて、１のフィールドを右シフトすることによりマスクを形成し、論理右シフトが好適には使用される。マスクは、パス９０９上の結果Ｒ４ａとして条件付きインバータ９１８へ通過させられる。オペランドＡのバイアスされていない指数が零又は負であるならば、ＲｓｈＡｍｔ信号は好適には零シフトに対応することに注意すべきである。正の指数の場合、非零シフトが適切であり、シフトは、例えば、２４ビットに制限される。
【０２３９】
[0255]ラージオペランドパス９１０は、パス９１１上に結果Ｒ４ｂとして、オペランドＡをそのまま通過させる。並行して、指数インクリメントブロック４３０（図４）は、ＥＦＥ２として有効最終指数ＥＦＥをそのまま通過させる。
【０２４０】
[0256]ステージ５では、ＡＮＤ２回路１００４（図１０）は、マスクＲ４ａを（Ｒ４ｂとして受け取られた）オペランドＡに適用するため動作する。マスクは、オペランドＡの整数ビットを零にさせ、端数ビットに影響を与えない。選択ｍｕｘ１０１０は、Ａの端数ビットであるＡＮＤ２回路１００４からの出力を選択する。
【０２４１】
[0257]ステージ６では、正規化ブロック４２３は、結果Ｒ５を優先符号化し、正規化し、指数デクリメントブロック４３２は、最終指数Ｅ０を得るために、有効最終指数ＥＦＥ２に対応する調整を施す。
【０２４２】
[0258]ステージ７では、指数Ｅ０を含む結果Ｒ６がフォーマットブロック１２１０（図１２）によってｆｐ３２型（又はｆｐ１６型）の数としてフォーマット化され、選択のため最終選択ｍｕｘ１２１２へ渡される。特殊数ロジックは、オペランドＡがＩＮＦ又はＮａＮであるケースにおいて、計算された結果を上書きするために、必要に応じて使用される。
【０２４３】
Ｅ．  ドメインマッピング（ＲＲＯ）
[0259]引数還元演算或いはレンジリダクション演算（ＲＲＯ）とも呼ばれるドメインマッピング演算もまたＭＭＡＤユニット２２０において実施される。これらの演算は、例えば、図２の他の機能ユニット２２２の一つとして実施される別個の算術ユニットにおける種々の超越関数の計算をサポートする。ある実施の形態では、ＭＭＡＤユニット２２０は、三角関数（例えば、ｓｉｎ（ｘ）及びｃｏｓ（ｘ））と指数関数（２ｘ）の浮動小数点引数ｘを有界な範囲に限定するドメインマッピング演算を実行する。よって、ＲＲＯの場合、ＭＭＡＤユニット２２０への入力は、オペランドＡとして供給されるｆｐ３２型の数ｘである。出力は後述するように特殊な３２ビットフォーマットである。
【０２４４】
１．  三角関数のＲＲＯ
[0260]ｓｉｎ（ｘ）及びｃｏｓ（ｘ）を計算する機能ユニットは、一般に、Ｋは整数であり、かつ、０≦ｘ０＜２πであるとき、引数ｘが何よりも２πＫ＋ｘ０に還元されることを要求することにより、これらの関数の周期性を利用する。三角関数は、これにより、ｘ０を使用して計算される。一部の実施では、ｘ０は、０≦ｘＲ＜１であるとき、端数ｘＲ＝ｘ０／２πとして指定される。
【０２４５】
[0261]本発明のある実施の形態では、ＭＭＡＤユニット２２０は、１／２πによる浮動小数点乗算を実行するためにＭＡＤパイプラインの乗算ステージ（図４のステージ１−３）を利用し、結果の小数部を抽出するために残りのステージを利用することにより、三角法ＲＲＯに関してｘＲを計算する。乗算の有限数値精度が原因となって、結果は近似であるが、この近似はｘの非常に大きな値が現れないアプリケーション（例えば、グラフィックス）に適切である。
【０２４６】
[0262]三角法ＲＲＯの出力は、符号ビット、１ビットの特殊数フラグ、５ビットの予備ビット、及び、２５ビットの端数ビットを含む特殊な３２ビット固定小数点フォーマットで提供される。特殊数フラグが論理型の真にセットされると、結果は特殊数であり、予備ビット又は端数ビットの一部又は全部がどの特殊数（例えば、ＩＮＦ又はＮａＮ）であるかを指定するために使用される。
【０２４７】
[0263]ステージ０において、引数ｘはｆｐ３２フォーマットのオペランドＡ０として与えられ、オペランドＡとして通過させられる。
【０２４８】
[0264]ステージ１では、指数積ブロック４２４は、オペランドＡの指数部Ｅａを指数Ｅａｂとして通過させる。乗算器前段回路４１６において、乗算器６１６（図６Ａ）は、レジスタ６１８からの記憶されているブース３方式で符号化された１／２πの表現を、パスＢＢ上に乗数として選択する。
【０２４９】
[0265]ステージ２では、指数和ブロック４２６は、有効最終指数ＥＦＥ及び差Ｅｄｉｆｆとして指数Ｅａを選択する。乗算器ブロック６１４は、Ａ×（１／２π）を計算し、その積の和フィールド及びキャリーフィールドを結果Ｒ２ａ及びＲ２ｂとして供給する。
【０２５０】
[0266]ステージ３では、右シフトカウント回路４２８は、信号Ｅｄｉｆｆから、固定小数点結果のバイナリポイントを適切に揃えるために右シフトが実行されるべきか否かを判定する。例えば、右シフトは、指数が負であるならば、必要とされる。右シフトが必要であるならば、右シフトカウント回路４２８は適切なシフト量信号ＲｓｈＡｍｔを供給する。同様にステージ３では、ＩＰ加算器８０４（図８Ａ）が積を生成するために和フィールドとキャリーフィールド（Ｒ２ａ、Ｒ２ｂ）を加算する。上位３２ビットはｍｕｘ８１４によって結果Ｒ３ａとして選択される。スティッキービットロジック８０８は、丸め処理の際に後で使用されるスティッキービットＳＢ３を生成できる。
【０２５１】
[0267]ステージ４では、指数インクリメントブロック４３０は、上記のＦＭＵＬ及びＦＭＡＤ演算中に行われたように、ＩＰ加算器８０４のキャリーを反映させることが必要であるならば、指数を調整する。アライメントユニット４２０において、スモールスワップｍｕｘ９０４（図９）は、積結果Ｒ３ａをスモールオペランドパス９０８へ向け、右シフトカウント回路４２８によって決定された右シフトが右シフト回路９１２によって適用される。結果Ｒ４ａはパス９０９へ伝搬させられる。右シフトが適用されるならば、スティッキービットロジック９１４は新しいスティッキービットＳＢ４を生成し、そうでなければ、スティッキービットロジック９１４は、スティッキービットＳＢ３をスティッキービットＳＢ４として転送できる。ラージオペランドパス９１０において、条件付き零ユニット９２０は結果Ｒ４ｂを零にする。
【０２５２】
[0268]ステージ５では、プラス１加算器１００２（図１０）がＲ４ａ（積）とＲ４ｂ（零）を加算する。一部の実施の形態では、丸めロジック１００８は使用されず、他の実施の形態では、丸めロジック１００８がパスからのスティッキービットＳＢ４を操作する。（ＲＲＯは近似であるので、丸めが結果の精度を改善するとは限らない）。
【０２５３】
[0269]ステージ６では、正規化ブロック４２３は、バイナリポイントを適切に配置するために必要とされるならば（例えば、指数が正であるならば）、左シフトを適用する。パスＥＦＥ２上の有効最終指数は、左シフト量を決定するためにシフト制御回路１１１０によって使用され、シフトは左シフト回路１１１２によって実行される。シフトされた結果Ｒ６はパス４２５上に供給される。指数デクリメントブロック４３２は、必要に応じて、最終指数Ｅ０をそれに応じてデクリメントするが、指数はステージ７において無視される。
【０２５４】
[0270]ステージ７では、パスＲ６上の結果からの符号ビット及び２５ビットが、上述したフォーマットの３２ビット結果Ｒｄａｔａを生成するために、フォーマットブロック１２１０（図１２）によって使用される。結果Ｒｄａｔａ中の特殊数フラグは、好適には、ステージ１内の特殊数検出ブロック４３９からの特殊数信号ＳＰＣに応じてセットされ、特殊数が検出されると、端数ビット又は予備ビットの一部がどの特殊数であるかを示すために使用され得る。
【０２５５】
２．  指数関数ＥＸ２のＲＲＯ
[0271]当技術分野で知られているように、底２の指数関数（ＥＸ２（ｘ）＝２ｘ）は、Ｍが整数であり、ｆが区間［０．０，１．０）であるとき、分解ｘ＝Ｍ＋ｆを行い、次に、２Ｍ×２ｆを計算することによって算術関数ユニットにおいて実施される。２Ｍの計算は平凡であり（ビットシフト又は指数加算）、２ｆの計算はルックアップテーブルを使用して行われる。
【０２５６】
[0272]ある実施の形態では、ＭＭＡＤユニット２２０は、引数ｘの小数部を抽出することによりＥＸ２関数のためのＲＲＯを実行する。このＲＲＯは、Ｆ２Ｆ変換との関連で上述した整数丸め演算に多少類似しているが、このケースでは、バイナリポイントの右側のビットが保存される。
【０２５７】
[0273]指数ＲＲＯの出力は、符号ビットと、１ビットの特殊数フラグと、７ビットの整数ビットと、２３ビットの端数ビットとをもつ特殊な３２ビットフォーマットである。特殊数フラグが論理型の真にセットされているならば、結果は特殊数であり、整数ビット又は端数ビットの一部又は全部がどの特殊数であるかを示すために使用されてもよい。
【０２５８】
[0274]ステージ０において、引数ｘはｆｐ３２フォーマットのオペランドＡ０として与えられ、オペランドＡとして通過させられる。
【０２５９】
[0275]ステージ１では、指数積ブロック４２４は、指数Ｅａから１２７（ｆｐ３２型のバイアス）を減算し、結果Ｅａｂを生成する。後述するように、結果Ｅａｂは、バイナリポイントを揃えるために後続のステージにおいて使用されて、バイナリポイントの右側に２３ビットが存在し、左側に７ビットが存在するようになる。乗算器前段回路４１６（図６Ａ参照）において、レジスタ６２０からのブース３方式で符号化された１．０の表現がｍｕｘ６１６によって選択される。
【０２６０】
[0276]ステージ２では、指数和ブロック４２６は、有効最終指数ＥＦＥ及び差ＥｄｉｆｆとしてＥａｂを通過させる。乗算器ブロック４１４は、オペランドＡに１．０を乗じ、その積の和フィールド及びキャリーフィールドを結果Ｒ２ａ及びＲ２ｂとして供給する。
【０２６１】
[0277]ステージ３では、右シフトカウント回路４２８は、差信号Ｅｄｉｆｆから、例えば、Ｅｄｉｆｆが負であるか、又は、正であるかに基づいて、バイナリポイントを揃えるために右シフトが必要とされるか否かを判定する。右シフトが必要であるならば、右シフトカウント回路４２８は、Ｅｄｉｆｆの絶対値から決定されるシフト量を反映させるためにＲｓｈＡｍｔ信号を生成する。同様にステージ３では、ＩＰ加算器８０４（図８Ａ）が積を生成するために和フィールドとキャリーフィールド（Ｒ２ａ、Ｒ２ｂ）を加算し、ｍｕｘ８１４は、上位３２ビットを結果Ｒ３ａとして選択する。スティッキービットロジック８０８はスティッキービットＳＢ３を生成する。
【０２６２】
[0278]ステージ４では、指数インクリメントブロック４３０は、ＩＰ加算器８０４によるキャリーを反映させるために指数を調整する。アライメントユニット４２０において、スモールスワップｍｕｘ９０４（図９）は、積結果Ｒ３ａをスモールオペランドパス９０８へ向け、右シフトカウント回路８０４によって決定された右シフトが右シフト回路９１２によって適用され、それによって、結果Ｒ４ａを生成する。右シフトが適用されるならば、スティッキービットロジック９１４は、右シフト量に基づいて新しいスティッキービットＳＢ４を生成し、そうでなければ、スティッキービットＳＢ３がスティッキービットＳＢ４として伝搬させられる。ラージオペランドパス９１０において、条件付き零ユニット９２０は結果Ｒ４ｂを零にする。
【０２６３】
[0279]ステージ５では、プラス１加算器１００２（図１０）が結果Ｒ４ａ（積Ａ×１）とＲ４ｂ（零）を加算する。一部の実施の形態では、丸めロジック１００８は結果Ｒ５としてＳｕｍ出力を選択し、他の実施の形態では、丸めロジック１００８は、Ｓｕｍ出力とＳｕｍ＋１出力との間で選択を行うためにスティッキービットＳＢ４を使用できる。
【０２６４】
[0280]ステージ６では、正規化ブロック４２３は、バイナリポイントを適切に配置するために（必要とされるならば）（例えば、指数が正であるならば）、左シフトを適用する。有効最終指数ＥＦＥ２は、左シフト量を決定するためにシフト制御回路１１１０によって使用され、シフトは左シフト回路１１１２によって実行される。このシフトされた結果Ｒ６はパス４２５上に供給される。指数デクリメントブロック４３２は、必要に応じて、指数をそれに応じてデクリメントする。
【０２６５】
[0281]ステージ７では、フォーマットブロック１２１０（図１２）は、結果Ｒ６を、７ビットの整数ビットと２３ビットの端数ビットをもつ固定小数点表現に変換する。指数飽和ロジック１２１６は飽和を検出するため使用され、飽和のケースでは、（上述した特殊な出力フォーマットで）ＩＮＦが結果として選択されてもよい。
【０２６６】
IV．  更なる実施の形態
[0282]本発明を特定の実施の形態に関して説明したが、当業者は種々の変更が可能であることを認識するであろう。例えば、ＭＭＡＤユニットは、より多くの、より少数の、又は、異なった機能を組み合わせてサポートし、どのようなフォーマット、又は、どのようなフォーマットの組み合わせのオペランド及び結果でもサポートするように実施される。
【０２６７】
[0283]本明細書において説明した種々の迂回パス及びパススルーは変更してもよい。一般に、回路ブロックの周りの迂回パスを説明している場合には、そのパスは、そのブロック内の一致演算（即ち、零を加算するようなオペランドに影響を与えない演算）によって置き換えてもよく、逆もまた同様である。所定の演算中に迂回される回路ブロックは待機状態（例えば、電力削減状態）に置かれてもよく、又は、例えば、選択マルチプレクサ又はその他の回路の動作を用いて、下流側ブロックによりその結果を無視される状態で通常どおりに作動されてもよい。
【０２６８】
[0284]ＭＭＡＤパイプラインのステージへの分割の仕方は任意である。パイプラインは、何段のステージを収容してもよく、各ステージにおけるコンポーネントの組み合わせは必要に応じて変えられる。本明細書における特定のブロックに割り当てられた機能性は、パイプラインステージを越えて分離されてもよく、例えば、乗算器ツリーが複数のステージを占めることがある。
【０２６９】
[0285]種々のブロックの機能性は更に変更されることもある。一部の実施の形態では、例えば、異なる加算器回路又は乗算器回路が使用され、乗算のためのブース３方式符号化（又はその他の符号化）の使用は必須ではない。
【０２７０】
[0286]更に、ＭＭＡＤユニットを、理解を容易にするために回路ブロックの観点から説明しているが、当業者は、ブロックが多種多様の回路コンポーネント及びレイアウトを使用して実施されること、並びに、本明細書に記載したブロックが特定のコンポーネントの組又は物理的なレイアウトに限定されないことを理解するであろう。ブロックは必要に応じて物理的に組み合わされ、又は、分離される。
【０２７１】
[0287]プロセッサは実行コア内に１台以上のＭＭＡＤユニットを収容する。例えば、スーパースカラー命令発行（即ち、１サイクル当たり二つ以上の命令の発行）が望まれるならば、複数のＭＭＡＤユニットが実施され、異なったＭＭＡＤユニットは異なった機能の組み合わせをサポートする。プロセッサは複数の実行コアを収容してもよく、各コアがその固有の（複数の）ＭＭＡＤユニットを所有してもよい。
【０２７２】
[0288]更に、本発明をグラフィックスプロセッサに関して説明してきたが、当業者は、本発明が、数値演算コプロセッサ、ベクトルプロセッサ、又は、汎用プロセッサのようなその他のプロセッサにおいても利用され得ることを理解するであろう。
【０２７３】
[0289]したがって、本発明を特定の実施の形態に関して説明してきたが、本発明は特許請求の範囲内であらゆる変更物及び均等物を網羅することを意図されていることが理解されるであろう。
【図面の簡単な説明】
【０２７４】
【図１】本発明の実施の形態に係るコンピュータシステムのブロック図である。
【図２】本発明の実施の形態に係る実行コアの一部分のブロック図である。
【図３】本発明の実施の形態に係る汎用乗算加算（ＭＭＡＤ）ユニットにおいて実行される演算の一覧表である。
【図４】本発明の実施の形態に係るＭＭＡＤユニットのブロック図である。
【図５】図４のＭＭＡＤユニットのオペランドフォーマット化ブロックのブロック図である。
【図６Ａ】図４のＭＭＡＤユニットの乗算器前段ブロックのブロック図である。
【図６Ｂ】図４のＭＭＡＤユニットの指数積ブロックのブロック図である。
【図６Ｃ】図４のビット単位論理ブロックのブロック図である。
【図７Ａ】図４のＭＭＡＤユニットの乗算器ブロックのブロック図である。
【図７Ｂ】図４のＭＭＡＤユニットの指数和ブロックのブロック図である。
【図８Ａ】図４のＭＭＡＤユニットの乗算器後段ブロックのブロック図である。
【図８Ｂ】図４のＭＭＡＤユニットの比較ロジックブロックのブロック図である。
【図９】図４のＭＭＡＤユニットのアライメントブロックのブロック図である。
【図１０】図４のＭＭＡＤユニットの端数和ブロックのブロック図である。
【図１１】図４のＭＭＡＤユニットの正規化ブロックのブロック図である。
【図１２】図４のＭＭＡＤユニットの出力制御ブロックのブロック図である。
【図１】
2008520048.tif 000003
【図２】
2008520048.tif 000004
【図３】
2008520048.tif 000005
【図４】
2008520048.tif 000006
【図５】
2008520048.tif 000007
【図６Ａ】
2008520048.tif 000008
【図６Ｂ】
2008520048.tif 000009
【図６Ｃ】
2008520048.tif 000010
【図７Ａ】
2008520048.tif 000011
【図７Ｂ】
2008520048.tif 000012
【図８Ａ】
2008520048.tif 000013
【図８Ｂ】
2008520048.tif 000014
【図９】
2008520048.tif 000015
【図１０】
2008520048.tif 000016
【図１１】
2008520048.tif 000017
【図１２】
2008520048.tif 000018
【国際調査報告】
2008520048.tif 000019