(57)【要約】【課題】正規化数だけの演算のレイテンシを悪化させることなく、非正規化数をハードウェアにより制御を複雑化させずに高速に処理することができる演算処理装置を提供する。【解決手段】命令を発行する命令制御部と、命令制御部から発行された命令に応じて浮動小数点演算を行う演算部と、演算部での浮動小数点演算に係るデータにおける非正規化数の検出を行う非正規化数検出部と、浮動小数点演算に係るデータが非正規化数である場合に、そのデータに対して処理を行う処理部とを有し、命令制御部は、命令の完了処理を行う際、完了処理を行う命令が非正規化数を検出した命令である場合、非正規化数を処理する非正規化数処理モードに遷移し、その命令の再実行を演算部に指示するとともに、処理部に非正規化数と検出されたデータに対する処理を指示する。【選択図】図３
2018195129.tif 000002
【特許請求の範囲】
【請求項１】
命令を発行する命令制御部と、
前記命令制御部から発行された命令に応じて浮動小数点演算を行う演算部と、
前記演算部での浮動小数点演算に係るデータにおける非正規化数の検出を行う検出部と、
前記浮動小数点演算に係るデータが非正規化数である場合に、該データに対して処理を行う処理部とを有し、
前記命令制御部は、命令の完了処理を行う際、完了処理を行う命令が非正規化数を検出した命令である場合、非正規化数を処理する非正規化数処理モードに遷移し、該命令の再実行を前記演算部に指示するとともに、前記処理部に前記非正規化数と検出されたデータに対する処理を指示することを特徴とする演算処理装置。
【請求項２】
前記非正規化数処理モードでは、実行中の後続命令を破棄し、後続命令の実行を抑止し１つの命令を実行することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記処理部は、前記演算部での浮動小数点演算に係る前記非正規化数のデータに対して、正規化数として扱うための前処理又は後処理を行うことを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
前記非正規化数処理モードに遷移する場合、非正規化数が検出された命令以降の命令の情報を破棄することを特徴とする請求項１〜３の何れか１項に記載の演算処理装置。
【請求項５】
演算処理装置の命令制御部が命令を発行し、
前記命令制御部から発行された命令に応じて前記演算処理装置の演算部が浮動小数点演算を行い、
前記演算部での浮動小数点演算に係るデータにおける非正規化数の検出を前記演算処理装置の検出部が行い、
前記浮動小数点演算に係るデータが非正規化数である場合に、前記演算処理装置の処理部が該データに対して処理を行い、
前記命令制御部が、命令の完了処理を行う際、完了処理を行う命令が非正規化数を検出した命令である場合、非正規化数を処理する非正規化数処理モードに遷移し、該命令の再実行を前記演算部に指示するとともに、前記処理部に前記非正規化数と検出されたデータに対する処理を指示することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
浮動小数点数は、ＩＥＥＥ７５４−２００８において標準形式が定められており、図１３（Ａ）に示すように、符号部（Ｓ）１３０１、指数部（Ｅ）１３０２、及び仮数部（Ｆ）１３０３で表現される。また、浮動小数点数は、図１３（Ｂ）に示すように正規化数に加えて、非正規化数、無限大、非数、及びゼロの４種類の数が定められている。
【０００３】
正規化数は、小数部を表す仮数部とは別に整数部に１の値を持ち、“（−１）S×２(E-bias)×１．Ｆ”で表される。この整数ビットは隠しビットと呼ばれる。残りの４つの数のうち、数値計算が必要となるのは非正規化数のみである。非正規化数は、正規化数とは異なり整数部（隠しビット）が１とならない数であり、バイアスされた指数を表す指数部は０であるが表現される数の指数の値は指数部が１となり、“（−１）S×２(E-bias+1)×０．Ｆ”で表される。
【０００４】
正規化数と非正規化数を表す各形式の違いは、隠しビット及び指数部の表す指数の値である。また、浮動小数点演算における正規化数と非正規化数の処理の違いとして、丸め処理が挙げられる。正規化数の処理において、演算結果の整数ビットが０となった場合に１が現れるまで仮数を左シフトする。この処理は正規化とよばれ、丸め処理は正規化された値に対して行われる。一方、演算結果が非正規化数となる場合、整数ビットが０の状態で丸め処理を行うように定められている。そのため、正規化数の場合と同様に整数部に１が現れるまで仮数を左シフトして丸め処理を行った場合、異なる結果となる。
【０００５】
非正規化数を扱う方法として、＜１＞〜＜３＞の方法が使用されている。
＜１＞非正規化数を演算器で検出し、ソフトウェアによって非正規化数を処理する。
＜２＞演算器内に非正規化数を処理する回路を追加し、演算器単体で非正規化数を処理する。
＜３＞非正規化数をハードウェアで処理するが、制御回路と協調して通常時とは異なる動作で非正規化数を処理する。
【０００６】
＜１＞の方法については、マルチスレッドやＳＩＭＤ（Single Instruction Multiple Data）演算等に対応した複数の計算資源を持つプロセッサにおいて非正規化数を含む例外処理を検出、管理する方法が特許文献１、２、３に開示されている。また、非正規化数の検出を高速、高効率に行う方法が特許文献４、５、６に開示されている。特許文献１〜６の何れもハードウェアによる非正規化数の検出方法に関して記載されているが、ソフトウェアでの処理の具体的な方法については記載されていない。
【０００７】
＜２＞の方法については、浮動小数点積和演算器内に非正規化数を処理する回路を追加し、演算器単体で処理する方法が特許文献７、８、９に開示されている。入力が非正規化数である場合の隠しビット及び指数部の値の補正に加え、出力が非正規化数となる場合に正規化シフトのシフト量を補正する方法が示されている。
【０００８】
＜３＞の方法については、非正規化数の出現を検出する演算器と非正規化数入力の前処理を行う演算器と非正規化数出力の後処理を行う演算器とを有し、非正規化数を検出した場合に通常とは異なる制御に分岐し、それらの演算器を用いて処理する方法が特許文献１０、１１、１２に開示されている。特許文献１０では、１つの浮動小数点演算命令を複数のマイクロ命令に分割し、それらを組み合わせることで命令を実行する。特許文献１１では、入出力それぞれについて検出回路及び正規化処理回路又は非正規化処理回路を有し、必要に応じて各処理回路の結果をフィードバックすることにより非正規化数を処理する。特許文献１２では、非正規化数入力の検出及び前処理を行う演算器を有し、入力が非正規化数である場合に制御回路に信号を送信し、前処理結果を用いて演算を行う。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】米国特許第９０２６７０５号明細書
【特許文献２】米国特許第７３７３４８９号明細書
【特許文献３】米国特許第６３７８０６７号明細書
【特許文献４】米国特許第７４３７５３８号明細書
【特許文献５】米国特許第６１５１８６９号明細書
【特許文献６】特表２００２−５０８８６４号公報
【特許文献７】米国特許第９３１７２５０号明細書
【特許文献８】米国特許第８２６０８３７号明細書
【特許文献９】米国特許第５９４３２４９号明細書
【特許文献１０】特開２０１５−２２８２２６号公報
【特許文献１１】特開平８−３０５５４６号公報
【特許文献１２】特開平６−１６１７０８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ソフトウェアによる非正規化数の演算は、多くの命令を組み合わせることで実行されるため、演算に要するレイテンシが大きくなってしまう。また、演算器内に非正規化数を処理する回路を追加すると、回路が複雑になるとともに、非正規化数が現れない場合のディレイが大きくなることがある。浮動小数点演算命令を複数のマイクロ命令を用いて実行する場合、非正規化数を処理するために命令を追加するのでハードウェアの制御が複雑になり、特許文献１１や特許文献１２の方法では、非正規化数を検出した時点で制御を分岐して後続命令を抑止するので制御が複雑になる。
【００１１】
１つの側面では、本発明の目的は、正規化数だけの演算のレイテンシを悪化させることなく、非正規化数をハードウェアにより制御を複雑化させずに高速に処理することができる演算処理装置を提供することにある。
【課題を解決するための手段】
【００１２】
演算処理装置の一態様は、命令を発行する命令制御部と、命令制御部から発行された命令に応じて浮動小数点演算を行う演算部と、演算部での浮動小数点演算に係るデータにおける非正規化数の検出を行う検出部と、浮動小数点演算に係るデータが非正規化数である場合に、そのデータに対して処理を行う処理部とを有する。命令制御部は、命令の完了処理を行う際、完了処理を行う命令が非正規化数を検出した命令である場合、非正規化数を処理する非正規化数処理モードに遷移し、その命令の再実行を演算部に指示するとともに、処理部に非正規化数と検出されたデータに対する処理を指示する。
【発明の効果】
【００１３】
発明の一態様においては、正規化数だけの演算のレイテンシを悪化させることなく、非正規化数をハードウェアにより制御を複雑化させずに高速に処理することができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、第１の実施形態における演算処理装置の構成例を示す図である。
【図２】図２は、第１の実施形態における動作例を示すフローチャートである。
【図３】図３は、第１の実施形態における演算実行部の構成例を示す図である。
【図４】図４は、図３に示した浮動小数点積和演算器の構成例を示す図である。
【図５】図５は、図４に示したフォーマット回路の構成例を示す図である。
【図６】図６は、図４に示した指数計算回路Ａの構成例を示す図である。
【図７】図７は、図３に示した非正規化数処理用回路の構成例を示す図である。
【図８】図８は、第２の実施形態における演算実行部の構成例を示す図である。
【図９】図９（Ａ）は、図８に示した逆数テーブル演算器の構成例を示す図であり、図９（Ｂ）は、図９（Ａ）に示した指数計算回路の構成例を示す図である。
【図１０】図１０は、図８に示した非正規化数処理用回路の構成例を示す図である。
【図１１】図１１は、第３の実施形態における演算実行部の構成例を示す図である。
【図１２】図１２は、図１１に示した処理回路の構成例を示す図である。
【図１３】図１３（Ａ）及び図１３（Ｂ）は、浮動小数点数を説明する図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態を図面に基づいて説明する。
【００１６】
（第１の実施形態）
本発明の第１の実施形態について説明する。
図１は、第１の実施形態における演算処理装置としてのＣＰＵ（Central Processing Unit）の構成例を示す図である。ＣＰＵ１００は、命令制御部１１０、演算実行部１２０及びキャッシュ制御部１３０を有する。
【００１７】
ＣＰＵ１００において実行する命令は、命令制御部１１０から発行される。命令制御部１１０は、命令をフェッチしてデコードしたり、命令を完了（コミット）させたりする処理を行う。本実施形態では、命令はプログラムの順番とは無関係にアウトオブオーダーで実行され、命令のコミット時にリオーダされる。命令のリオーダは、演算が終了した命令をエントリバッファ１１１に格納し、プログラム順にコミットすることで行われる。なお、本実施形態ではアウトオブオーダー実行方式を用いるが、これに限定されるものではなく、インオーダー実行形式であってもよい。
【００１８】
演算実行部１２０は、演算制御部１２１、演算部１２２、レジスタファイル１２３、及びリオーダバッファ１２４を有し、命令制御部１１０から発行された命令に応じた処理を実行する。演算制御部１２１は、命令制御部１１０から発行された命令を、どの演算部で実行するか振り分けを行い演算部１２２に通知する。演算部１２２は、浮動小数点演算器及び非正規化数処理用回路を有しており、指示された命令に応じた演算処理を実行する。演算部１２２による演算結果はリオーダバッファ１２４に格納され、命令制御部１１０により命令がコミット（完了）された際に、リオーダバッファ１２４に格納された演算結果がレジスタファイル１２３に書き込まれる。レジスタファイル１２３は、演算処理に用いるデータや演算結果であるデータを記憶する。
【００１９】
キャッシュ制御部１３０は、キャッシュメモリ１３１を有する。キャッシュ制御部１３０は、キャッシュメモリ１３１に係る制御を行い、演算実行部１２０のレジスタファイル１２３とキャッシュメモリ１３１との間やキャッシュメモリ１３１とメモリ１４０との間でのデータ転送に係る制御を行う。キャッシュメモリ１３１は、主記憶装置であるメモリ（メインメモリ）１４０に記憶されているデータの一部を格納する。
【００２０】
図２は、ＣＰＵ１００での命令実行の例を示すフローチャートである。ステップＳ２０１にて、命令制御部１１０が演算実行部１２０に命令を発行する。ステップＳ２０２にて、演算実行部１２０は、命令制御部１１０からの命令を演算部１２２で実行する。このとき、演算実行部１２０の演算部１２２は、入出力データにおける非正規化数の検出を行い、入出力データにおいて非正規化数が現れるか否かを判定する。演算実行部１２０の演算部１２２は、演算が終了すると、演算結果及び非正規化数の検出結果を出力する。
【００２１】
ステップＳ２０３にて、演算実行部１２０の演算部１２２から出力された演算結果がリオーダバッファ１２４に格納され、終了した命令及びその命令での非正規化数の検出結果が命令制御部１１０のエントリバッファ１１１に格納される。例えば、エントリバッファ１１１に判定フラグを設け、非正規化数が検出された場合、判定フラグを立てるようにする。エントリバッファ１１１に格納された非正規化数の検出結果は、対応する命令の完了まで保持される。なお、終了した命令と非正規化数の検出結果とをエントリバッファ１１１に格納するようにしているが、終了した命令と非正規化数の検出結果とが対応付けられて格納されていればよく、非正規化数の検出結果をエントリバッファ１１１とは異なる格納部に格納するようにしてもよい。
【００２２】
そして、ステップＳ２０４にて、命令の完了処理時（エントリバッファ１１１のトップに来た際）、命令制御部１１０は、コミット（完了）する命令における非正規化数の検出結果に基づいて、非正規化数が検出されたか否かを判定する。その結果、非正規化数が検出されたと判定した場合（ステップＳ２０４のＹＥＳ）、ＣＰＵ１００は非正規化数処理モードに遷移して非正規化数処理を実行する。非正規化数処理モードでは、プログラム順に並べたときの後続命令の実行を抑止する１命令モードとして動作し、エントリバッファ及びリオーダバッファに格納された値を破棄するとともに、実行中の後続命令も破棄した上で、非正規化数が検出された命令を再実行する。一方、ステップＳ２０４での判定の結果、非正規化数が検出されていないと判定した場合（ＮＯ）、ステップＳ２０７へ進む。
【００２３】
非正規化数処理では、ステップＳ２０５にて、命令制御部１１０は、非正規化数処理モードで演算実行部１２０に命令を再発行する。ステップＳ２０６にて、演算実行部１２０は、命令制御部１１０からの命令を演算部１２２で再実行する。このとき、入出力データに非正規化数が現れることが命令制御部１１０から演算実行部１２０の演算部１２２に通知され、演算部１２２は、非正規化数処理モードで動作するとともに、非正規化数処理用の回路を用いて入力の前処理や演算結果の後処理を行う。そして、演算実行部１２０の演算部１２２からの演算結果がリオーダバッファ１２４に格納され、終了した命令が命令制御部１１０のエントリバッファ１１１に格納されて、ステップＳ２０７へ進む。
【００２４】
ステップＳ２０７にて、命令制御部１１０は命令をコミットしてステップＳ２０１に戻り、後続の命令実行を行う。なお、非正規化数処理モードである場合、ステップＳ２０７において命令をコミットする際、通常の処理モードに遷移してステップＳ２０１に戻る。また、非正規化数処理モードである場合、命令の再実行に要するレイテンシを予め決定し、そのレイテンシが経過することで演算処理の終了として命令をコミットするようにしてもよい。
【００２５】
図３は、第１の実施形態における演算実行部１２０の構成例を示す図である。図３において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。図３には、演算実行部１２０の演算部１２２に、浮動小数点積和演算器３０１及び非正規化数処理用回路３０２を有する例を示している。浮動小数点積和演算器３０１は、レジスタ３０３、３０４、３０５に保持されたオペランド（入力データ）ＯＰ１、ＯＰ２、ＯＰ３の積和演算を行い、演算結果ＳＧ７を出力する。図４に浮動小数点積和演算器３０１の構成例を示す。
【００２６】
図４は、浮動小数点積和演算器３０１の構成例を示す図である。浮動小数点積和演算器３０１は、乗算器４０１、加算器４０２、桁合わせ回路４０３、非正規化数検出回路４０４、フォーマット回路４０５、４０６、４０７、４１２、指数計算回路４０８、４１１、正規化回路４０９、丸め回路４１０、例外検出回路４１３、及びセレクタ４１４を有する。
【００２７】
乗算器４０１は、フォーマット回路４０５、４０６を介して入力されるレジスタ３０３、３０４に保持されたオペランドＯＰ１、ＯＰ２の仮数部を乗算処理して演算結果を出力する。加算器４０２は、乗算器４０１から出力される演算結果と、フォーマット回路４０７を介して入力されるレジスタ３０５に保持されたオペランドＯＰ３の仮数部とを加算処理して演算結果を出力する。なお、オペランドＯＰ３の仮数部は、指数計算回路Ａ４０８の計算結果に基づいて、桁合わせ回路４０３によって桁合わせ処理された後に加算器４０２に入力される。このようにして、オペランドＯＰ１とオペランドＯＰ２とを乗算し、乗算結果にオペランドＯＰ３を加算して得られる積和演算結果（仮数部）が出力される。
【００２８】
非正規化数検出回路４０４は、浮動小数点積和演算器３０１の入出力データにおける非正規化数の検出を行い、検出結果を信号ＳＧ１、ＳＧ３、ＳＧ５により出力する。非正規化数検出回路４０４は、フォーマット回路４０５〜４０７を介して入力されるレジスタ３０３〜３０５に保持されたオペランドＯＰ１〜ＯＰ３、及び積和演算の演算結果が非正規化数であるか否かを判定する。判定の結果、非正規化数検出回路４０４は、入力されるオペランドＯＰ１〜ＯＰ３及び積和演算の演算結果の少なくとも１つが非正規化数であれば信号ＳＧ１を出力する。また、非正規化数検出回路４０４は、入力されるオペランドＯＰ１〜ＯＰ３が非正規化数であれば各オペランド毎に信号ＳＧ３（ＳＧ３Ａ〜ＳＧ３Ｂ）を出力し、積和演算の演算結果が非正規化数であれば信号ＳＧ５を出力する。
【００２９】
フォーマット回路４０５〜４０７は、入力されたデータから演算する浮動小数点数のサイズ（本例では倍精度又は単精度）に応じて、指数部及び仮数部（隠しビットを含む）を成形する。フォーマット回路４０５〜４０７の構成例を図５に示す。図５には、一例としてフォーマット回路４０５の構成例を示したが、フォーマット回路４０６、４０７も同様に構成される。
【００３０】
フォーマット回路４０５は、セレクタ５０１、５０２、５０３を有する。セレクタ５０１には、入力データＳＩのうち、倍精度浮動小数点数の指数部に対応するビット、及び単精度浮動小数点数の指数部に対応するビットが入力される。また、セレクタ５０２には、入力データＳＩのうち、倍精度浮動小数点数の仮数部に対応するビット、及び単精度浮動小数点数の仮数部に対応するビットが入力される。セレクタ５０１、５０２は、命令制御部１１０からの信号ＳＧ４により指定される浮動小数点数のサイズに応じて、入力の一方を選択して出力する。
【００３１】
また、セレクタ５０３は、隠しビットの値１及び０が入力され、非正規化数検出回路４０４から出力される信号ＳＧ３Ａに応じて、一方の値を選択して出力する。セレクタ５０３は、非正規化数でないことを信号ＳＧ３Ａが示す場合には値１を選択して出力し、非正規化数であることを信号ＳＧ３Ａが示す場合には値０を選択して出力する。セレクタ５０１の出力が指数部ＳＧＥとなり、セレクタ５０３の出力とセレクタ５０２の出力とを結合したものが仮数部ＳＧＭとなる。フォーマット回路４０５は、指数部ＳＧＥと仮数部ＳＧＭとを結合し浮動小数点数ＳＧＦとして出力する。
【００３２】
図４に戻り、指数計算回路Ａ４０８は、入力されるオペランドの指数部ＯＰ１Ｅ、ＯＰ２Ｅ、ＯＰ３Ｅから、正規化される前の演算結果の指数を計算する。指数計算回路Ａ４０８の構成例を図６に示す。指数計算回路Ａ４０８は、セレクタ６０１、６０３、６０５、６０９、加算器６０２、６０４、６０６、６０７、及び減算器６０８、６０９を有する。
【００３３】
セレクタ６０１には、オペランドＯＰ１の指数部ＯＰ１Ｅ、及びそれに加算器６０２により１を加えた値が入力される。同様に、セレクタ６０３には、オペランドＯＰ２の指数部ＯＰ２Ｅ、及びそれに加算器６０４により１を加えた値が入力され、セレクタ６０５には、オペランドＯＰ３の指数部ＯＰ３Ｅ、及びそれに加算器６０６により１を加えた値が入力される。なお、加算器６０２、６０４、６０６による処理は非正規化数への補正に相当するが、非正規化数の指数部のすべてのビットの値は０であるので、最下位ビットに１を立てることで実現してもよい。
【００３４】
セレクタ６０１、６０３、６０５は、非正規化数検出回路４０４から出力される信号ＳＧ３（ＳＧ３Ａ〜ＳＧ３Ｃ）に応じて、一方の値を選択して出力する。セレクタ６０１、６０３、６０５は、非正規化数でないことを信号ＳＧ３が示す場合にはオペランドの指数部ＯＰ１Ｅ、ＯＰ２Ｅ、ＯＰ３Ｅを選択して出力し、非正規化数であることを信号ＳＧ３が示す場合には加算器６０２、６０４、６０６の出力を選択して出力する。加算器６０７は、セレクタ６０１の出力とセレクタ６０３の出力とを加算する。減算器６０８は、命令制御部１１０からの信号ＳＧ４により指定される浮動小数点数のサイズに応じてセレクタ６０９から出力される値１０２３又は１２７を、加算器６０７の出力から減算する。これにより、オペランドＯＰ１、ＯＰ２の乗算結果の指数が計算される。
【００３５】
減算器６０９は、セレクタ６０５の出力と減算器６０８の出力との減算処理を行い、演算結果を出力する。減算器６０９の出力によりオペランドＯＰ１、ＯＰ２の乗算結果とオペランドＯＰ３の大小関係がわかる。また、セレクタ６１０は、セレクタ６０５の出力及び減算器６０８の出力が入力され、減算器６０９の出力（演算結果）に応じて一方を選択して正規化される前の演算結果の指数ＯＵＴＥとして出力する。
【００３６】
図４に戻り、正規化回路４０９は、加算器４０２の出力、すなわちオペランドＯＰ１〜ＯＰ３を積和演算した演算結果（仮数部）を正規化する。丸め回路４１０は、正規化回路４０９により正規化された値に対して丸め処理を行う。指数計算回路Ｂ４１１は、指数計算回路Ａ４０８により計算された正規化前の演算結果の指数ＯＵＴＥと、正規化回路４０９及び丸め回路４１０の処理結果とに基づいて、正規化された演算結果の指数を計算する。
【００３７】
フォーマット回路４１２は、指数計算回路Ｂ４１１の出力及び丸め回路４１０の出力から演算結果の指数部及び仮数部を成形して出力する。例外検出回路４１３は、ＩＥＥＥ７５４−２００８で定められた例外を検出する。セレクタ４１４は、フォーマット回路４１２の出力又は例外検出回路４１３の出力を、浮動小数点積和演算器３０１での演算結果ＳＧ７として出力する。
【００３８】
図３に戻り、非正規化数処理用回路３０２は、非正規化数処理モードであるときに非正規化数に係る処理を行う。非正規化数処理用回路３０２は、セレクタ３０６及びレジスタ３０３を介して、浮動小数点積和演算器３０１での演算結果ＳＧ７がオペランドＯＰ１として入力される。非正規化数処理用回路３０２は、入力されるオペランドＯＰ１の指数部の値に応じて、オペランドＯＰ１に対するシフト処理や丸め処理を行い、演算結果ＳＧ９を出力する。
【００３９】
非正規化数処理用回路３０２は、オペランドＯＰ１の指数部の値が負である場合、オペランドＯＰ１が非正規化数となるので、指数部の値が正となるまで右シフトを行い結果を丸める。また、非正規化数処理用回路３０２は、オペランドＯＰ１の指数部の値が正である場合には、オペランドＯＰ１が非正規化数とならないので、右シフトを行わずに丸め処理を行う。図７に非正規化数処理用回路３０２の構成例を示す。
【００４０】
図７は、非正規化数処理用回路３０２の構成例を示す図である。非正規化数処理用回路３０２は、制御回路７０１、指数計算回路７０２、右シフタ回路７０３、丸め回路７０４、指数計算回路７０５、フォーマット回路７０６、及び例外検出回路７０７を有する。制御回路７０１は、非正規化数処理モードであることを示す命令制御部１１０からの信号ＳＧ２に基づいて、セレクタ３０６の選択制御信号ＳＧ８を出力する。
【００４１】
指数計算回路７０２は、入力されるオペランドＯＰ１の指数部に基づいて、右シフタ回路７０３におけるシフト量を計算する。右シフタ回路７０３は、指数計算回路７０２の計算結果に基づいて、オペランドＯＰ１の指数部の値が正となるまでオペランドＯＰ１の仮数部を右シフトする。丸め回路７０４は、右シフタ回路７０３から出力された値に対して丸め処理を行う。
【００４２】
指数計算回路７０５は、指数計算回路７０２により計算された指数と丸め回路７０４の処理結果とに基づいて演算結果の指数を計算する。フォーマット回路７０６は、指数計算回路７０５の出力及び丸め回路７０４の出力から演算結果の指数部及び仮数部を成形して演算結果ＳＧ９を出力する。例外検出回路７０７は、アンダーフロー及び不正確の２つの例外を検出する。
【００４３】
図３に戻り、セレクタ３０７は、浮動小数点積和演算器３０１からの演算結果ＳＧ７又は非正規化数処理用回路３０２からの演算結果ＳＧ９の一方を出力する。セレクタ３０７は、非正規化数処理モードでない場合、浮動小数点積和演算器３０１からの演算結果ＳＧ７を選択して出力し、非正規化数処理モードである場合、非正規化数処理用回路３０２からの演算結果ＳＧ９を選択して出力する。セレクタ３０７から出力された演算結果ＳＧ７又はＳＧ９は、レジスタ３０８を介してリオーダバッファ１２４に格納される。論理和演算（ＯＲ）ゲート３０９は、浮動小数点積和演算器３０１及び非正規化数処理用回路３０２からの例外通知が入力される。例外判定部３１０は、ＯＲゲート３０９の出力に基づいて例外が発生したかを判定し、例外が発生した場合に命令制御部１１０に通知する。
【００４４】
次に、第１の実施形態における動作について説明する。
命令制御部１１０からの命令に応じて演算実行部１２０が浮動小数点積和演算器３０１を用いる命令を実行する際、浮動小数点積和演算器３０１の非正規化数検出回路４０４が、入出力データにおける非正規化数の検出を行う。入出力データにおいて非正規化数が検出されない場合、演算実行部１２０は、浮動小数点積和演算器３０１を用いて通常の演算処理を行い演算結果ＳＧ７を出力する。
【００４５】
一方、入出力データにおいて非正規化数が検出された場合、演算実行部１２０の浮動小数点積和演算器３０１は、命令制御部１１０に信号ＳＧ１を出力する。そして、非正規化数が検出された命令が命令制御部１１０でコミット処理（完了処理）される際に、信号ＳＧ１を基にＣＰＵ１００が非正規化数処理モードへと遷移する。非正規化数処理モード中、命令制御部１１０は各演算器に非正規化数処理モードであることを示す信号ＳＧ２を出力する。また、非正規化数処理モードでは、以下のようにして、非正規化数が検出された命令を演算実行部１２０で再実行する。
【００４６】
非正規化数処理モードに遷移すると、命令制御部１１０のエントリバッファ及び演算実行部１２０のリオーダバッファ１２４の値を破棄する。また、実行中の後続命令も破棄した上で、後続命令の実行を抑止する１命令モードとして動作し、非正規化数が検出された命令を実行する。
【００４７】
演算実行部１２０の浮動小数点積和演算器３０１は、非正規化数が検出された命令の演算を開始し、入力されたオペランドＯＰ１〜ＯＰ３が非正規化数であるか否かを非正規化数検出回路４０４において判定する。入力されたオペランドＯＰ１〜ＯＰ３に非正規化数が含まれている場合、非正規化数検出回路４０４からフォーマット回路４０５〜４０７及び指数計算回路Ａ４０８に信号ＳＧ３をフィードバックし、再び演算の初めから開始する。このとき、フォーマット回路４０５〜４０７内で仮数部の隠しビットを０に落とし、指数計算回路Ａ４０８において指数部の補正を行う。
【００４８】
浮動小数点積和演算器３０１では、丸め処理を除いて通常と同じ演算を行って結果を出力する。このとき、非正規化数検出回路４０４が、演算の結果が非正規化数となるか否かを判定し、非正規化数となる場合には非正規化数処理用回路３０２に信号ＳＧ５を出力する。本実施形態では、丸め処理を行わない方法として、ＩＥＥＥ７５４−２００８で定められた０方向丸めを行い、ガードビット、ラウンドビット、及びスティッキービットの丸め処理に必要な情報であるＳＧ６を浮動小数点積和演算器３０１の正規化回路４０９から非正規化数処理用回路３０２に出力する。
【００４９】
このようにして非正規化数処理用回路３０２に、浮動小数点積和演算器３０１からの信号ＳＧ５、ＳＧ６が入力され、加えて浮動小数点積和演算器３０１の演算結果ＳＧ７が入力されて、演算結果ＳＧ７に対する処理が行われる。ここで、浮動小数点積和演算器３０１の演算結果ＳＧ７を非正規化数処理用回路３０２へ入力するためのデータバイパスは、通常の演算時にも使用されるパスであり、本実施形態の適用に際しハードウェアの追加は不要である。また、通常、レジスタ３０３にどのデータパスからのデータを格納するかは命令制御部１１０により指示されるが、非正規化数処理モードでは、非正規化数処理用回路３０２が選択制御信号ＳＧ８を用いて決定する。
【００５０】
浮動小数点積和演算器３０１の演算結果ＳＧ７の指数部の値が負である場合、命令の演算結果が非正規化数となる。このとき、非正規化数処理用回路３０２は、演算結果ＳＧ７の指数部の値が正となるまで仮数部の右シフトを行って結果を丸め、演算結果ＳＧ９を出力する。一方、浮動小数点積和演算器３０１の演算結果ＳＧ７の指数部の値が正である場合、演算結果が非正規化数とならず、非正規化数処理用回路３０２は右シフトを行わずに丸め処理を行って演算結果ＳＧ９を出力する。ここでは、浮動小数点積和演算器３０１からの信号ＳＧ５に基づいてシフト量を０とした上で、浮動小数点積和演算器３０１において通常行われる丸め処理を実行して結果を出力する。
【００５１】
このようにして演算結果ＳＧ９を出力して非正規化数処理用回路３０２による演算が終了し、非正規化数が検出された命令がコミットされた後に、ＣＰＵ１００は、非正規化数処理モードから通常の処理モードへ遷移して、後続命令の実行を開始する。
【００５２】
第１の実施形態によれば、演算処理において非正規化数が検出された場合、命令のコミット処理（完了処理）を行う際に、非正規化数が検出された命令を再実行させることで、正規化数だけの演算のレイテンシを悪化させることなく、非正規化数をハードウェアにより制御を複雑化させずに高速に処理することができる。
【００５３】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。第２の実施形態における情報処理装置としてのＣＰＵの全体構成や命令実行等は、第１の実施形態と同様であるので、その説明は省略する。図８は、第２の実施形態における演算実行部１２０の構成例を示す図である。図８において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。
【００５４】
図８には、演算実行部１２０の演算部１２２に、浮動小数点逆数テーブル演算器８０１及び非正規化数処理用回路８０２を有する例を示している。浮動小数点逆数テーブル演算器８０１は、レジスタ８０３に保持されたオペランドＯＰ１についての浮動小数点数の逆数近似演算を行い、演算結果（オペランドＯＰ１の逆数値）ＳＧ１３を出力する。レジスタ８０３には、非正規化数処理モードでない場合にはセレクタ８０４を介してレジスタファイル１２３からのデータが格納され、非正規化数処理モードである場合にはセレクタ８０４を介して非正規化数処理用回路８０２の演算結果ＳＧ１２が格納される。図９（Ａ）に浮動小数点逆数テーブル演算器８０１の構成例を示す。
【００５５】
図９（Ａ）は、浮動小数点逆数テーブル演算器８０１の構成例を示す図である。浮動小数点逆数テーブル演算器８０１は、テーブル参照回路９０１、指数計算回路９０２、フォーマット回路９０３、セレクタ９０４、及び例外検出回路９０５を有する。テーブル参照回路９０１は、入力されるレジスタ８０３に保持されたオペランドＯＰ１の仮数部の値をインデックスとしてテーブルを参照し、オペランドＯＰ１の逆数の仮数部を出力する。
【００５６】
指数計算回路９０２は、例えば図９（Ｂ）に示すように構成され、入力されるオペランドＯＰ１の指数部ＯＰ１Ｅ及び非正規化数処理用回路８０２からの信号ＳＧ１１に基づいて、オペランドＯＰ１の逆数の指数部ＯＵＴＥを計算して出力する。信号ＳＧ１１は、オペランドＯＰ１の指数部の値が負であることを示す信号である。指数計算回路９０２は、信号ＳＧ１１を指数部の符号ビットとして（２×ｂｉａｓ−１）と指数部ＯＰ１Ｅとの減算を減算器９１１で行い、演算結果を逆数の指数部ＯＵＴＥとして出力する。
【００５７】
フォーマット回路９０３は、指数計算回路９０２の出力及びテーブル参照回路９０１の出力から演算結果の指数部及び仮数部を成形して出力する。セレクタ９０４は、フォーマット回路９０３の出力又は例外検出回路９０５の出力を、浮動小数点逆数テーブル演算器８０１での演算結果ＳＧ１３として出力する。例外検出回路９０５は、ＩＥＥＥ７５４−２００８で定められた例外を検出する。
【００５８】
非正規化数処理用回路８０２は、入力されるレジスタ８０３に保持されたオペランドＯＰ１が非正規化数である場合、非正規化数を正規化する。非正規化数処理用回路８０２は、オペランドＯＰ１が非正規化数である場合、正規化したオペランドＯＰ１の指数部の値が負であることを示す信号ＳＧ１１を出力するとともに、オペランドＯＰ１を正規化した演算結果ＳＧ１２を出力する。図１０に非正規化数処理用回路８０２の構成例を示す。
【００５９】
図１０は、非正規化数処理用回路８０２の構成例を示す図である。非正規化数処理用回路８０２は、制御回路１００１、非正規化数検出回路１００２、リーディングゼロカウンタ（ＬＺＣ：Leading Zero Counter）回路１００３、左シフタ回路１００４、指数計算回路１００５、フォーマット回路１００６、及びセレクタ１００７を有する。制御回路１００１は、非正規化数処理モードであることを示す命令制御部１１０からの信号ＳＧ２に基づいて、セレクタ８０４の選択制御信号ＳＧ８を出力する。
【００６０】
非正規化数検出回路１００２は、入力されるレジスタ８０３に保持されたオペランドＯＰ１が非正規化数であるか否かを判定し、判定結果をセレクタ１００７の選択制御信号として出力する。ＬＺＣ回路１００３は、入力されるオペランドＯＰ１の仮数部の先頭の連続する０の数を計数する。左シフタ回路１００４は、ＬＺＣ回路１００３で計数された０の数に応じて、オペランドＯＰ１の仮数部を左シフトする。指数計算回路１００５は、ＬＺＣ回路１００３で計数された０の数をオペランドＯＰ１の指数部から減算する。これにより、非正規化数であるオペランドＯＰ１を正規化する。また、正規化された非正規化数の指数部の値は０より小さい値となるため、指数計算回路１００５は、指数部が負の値であることを示す信号ＳＧ１１を出力する。
【００６１】
フォーマット回路１００６は、指数計算回路１００５の出力及び左シフタ回路１００４の出力から正規化した非正規化数の指数部及び仮数部を成形して出力する。セレクタ１００７は、入力されるオペランドＯＰ１が非正規化数である場合、フォーマット回路１００６の出力を演算結果ＳＧ１２として出力し、入力されるオペランドＯＰ１が非正規化数でない場合、オペランドＯＰ１をそのまま演算結果ＳＧ１２として出力する。
【００６２】
レジスタ８０５は、浮動小数点逆数テーブル演算器８０１から出力される演算結果ＳＧ１３を格納する。レジスタ８０５に格納された演算結果ＳＧ１３は、リオーダバッファ１２４に格納される。例外判定部３１０は、浮動小数点逆数テーブル演算器８０１からの出力に基づいて例外が発生したかを判定し、例外が発生した場合に命令制御部１１０に通知する。
【００６３】
第２の実施形態において、命令制御部１１０からの命令に応じて演算実行部１２０が浮動小数点逆数テーブル演算器８０１を用いる命令を実行する際、入力データにおける非正規化数の検出を行う。入力データにおいて非正規化数が検出されない場合、演算実行部１２０は、浮動小数点逆数テーブル演算器８０１を用いて通常の演算処理を行い演算結果ＳＧ１３を出力する。
【００６４】
一方、入力データにおいて非正規化数が検出された場合、命令制御部１１０に信号ＳＧ１を出力する。そして、非正規化数が検出された命令が命令制御部１１０でコミット処理（完了処理）される際に、信号ＳＧ１を基にＣＰＵ１００が非正規化数処理モードへと遷移する。非正規化数処理モード中、命令制御部１１０は各演算器に非正規化数処理モードであることを示す信号ＳＧ２を出力する。また、非正規化数処理モードでは、以下のようにして、非正規化数が検出された命令を演算実行部１２０で再実行する。
【００６５】
非正規化数処理モードに遷移すると、命令制御部１１０のエントリバッファ及び演算実行部１２０のリオーダバッファ１２４の値を破棄する。また、実行中の後続命令も破棄した上で、後続命令の実行を抑止する１命令モードとして動作し、非正規化数が検出された命令を実行する。
【００６６】
演算実行部１２０の非正規化数処理用回路８０２は、入力されたオペランドＯＰ１が非正規化数であるか否かを判定する。入力されたオペランドＯＰ１が非正規化数である場合、仮数部の先頭に連続する０の数をＬＺＣ（Leading Zero Count）回路１００３において決定する。その数に応じてオペランドＯＰ１の仮数部を左シフタ回路１００４により左シフトし、指数部を指数計算回路１００５により減算することで、非正規化数のオペランドＯＰ１を正規化する。正規化された非正規化数の指数部の値は０より小さい値となるため、指数部の値が負であることを浮動小数点数逆数テーブル演算器８０１に報告する信号ＳＧ１１を生成して出力する。
【００６７】
このようにして浮動小数点逆数テーブル演算器８０１に、非正規化数処理用回路８０２からの信号ＳＧ１１が入力され、加えて非正規化数処理用回路８０２の演算結果ＳＧ１２が入力される。ここで、非正規化数処理用回路８０２の演算結果ＳＧ１２を浮動小数点逆数テーブル演算器８０１へ入力するためのデータバイパスは、通常の演算時にも使用されるパスであり、本実施形態の適用に際しハードウェアの追加は不要である。また、通常、レジスタ８０３にどのデータパスからのデータを格納するかは命令制御部１１０により指示されるが、非正規化数処理モードでは、非正規化数処理用回路８０２が選択制御信号ＳＧ８を用いて決定する。
【００６８】
浮動小数点逆数テーブル演算器８０１での仮数部の計算は、入力されるオペランドＯＰ１が正規化数である場合と同様に行い、指数部の計算は、信号ＳＧ１１を指数部の符号ビットとして計算する。このようにして浮動小数点逆数テーブル演算器８０１が演算結果ＳＧ１３を出力して浮動小数点逆数テーブル演算器８０１による演算が終了し、非正規化数が検出された命令がコミットされた後に、ＣＰＵ１００は、非正規化数処理モードから通常の処理モードへ遷移して、後続命令の実行を開始する。
【００６９】
第２の実施形態によれば、入力データが非正規化数である場合に、入力データを正規化して処理することで、正規化数だけの演算のレイテンシを悪化させることなく、非正規化数をハードウェアにより制御を複雑化させずに高速に処理することができる。
【００７０】
（第３の実施形態）
次に、本発明の第３の実施形態について説明する。第３の実施形態における情報処理装置としてのＣＰＵの全体構成や命令実行等は、第１の実施形態と同様であるので、その説明は省略する。第３の実施形態における演算実行部１２０は、図３に示した第１の実施形態における浮動小数点積和演算器３０１を複数設け、ＳＩＭＤ演算を行う。
【００７１】
図１１は、第３の実施形態における演算実行部１２０の構成例を示す図である。図１１においては、２並列のＳＩＭＤ演算器を一例として示しているが、これに限定されるものではなく、ｎ個の浮動小数点積和演算器３０１を用いることでｎ並列のＳＩＭＤ演算器を実現することが可能である。
【００７２】
図１１において、図１、図３に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。また、図１１において、各浮動小数点積和演算器３０１に係る構成については符号に異なる添え字を付加し、第１の浮動小数点積和演算器３０１Ａに係る構成には符号に添え字Ａを付加し、第２の浮動小数点積和演算器３０１Ｂに係る構成には符号に添え字Ｂを付加して示している。
【００７３】
第３の実施形態における演算実行部１２０は、処理回路１１０１により非正規化数の処理を行う。処理回路１１０１は、非正規化数処理用回路３０２及び制御回路１１０２を有する。制御回路１１０２は、図１２に示すように選択制御回路１２０１、セレクタ１２０２、１２０３、１２０４、及びレジスタ１２０５Ａ、１２０５Ｂ、１２０６Ａ、１２０６Ｂ、１２０７Ａ、１２０７Ｂを有する。
【００７４】
選択制御回路１２０１は、セレクタ１２０２、１２０３、１２０４を制御する。セレクタ１２０２には、レジスタ３０３Ａに保持されたオペランドＯＰ１（ＯＰＡ）がレジスタ１２０５Ａを介して入力され、レジスタ３０３Ｂに保持されたオペランドＯＰ１（ＯＰＢ）がレジスタ１２０５Ｂを介して入力される。セレクタ１２０３には、第１の浮動小数点積和演算器３０１Ａからの信号ＳＧ５Ａがレジスタ１２０６Ａを介して入力され、第２の浮動小数点積和演算器３０１Ｂからの信号ＳＧ５Ｂがレジスタ１２０６Ｂを介して入力される。また、セレクタ１２０４には、第１の浮動小数点積和演算器３０１Ａからの信号ＳＧ６Ａがレジスタ１２０７Ａを介して入力され、第２の浮動小数点積和演算器３０１Ｂからの信号ＳＧ６Ｂがレジスタ１２０７Ｂを介して入力される。
【００７５】
セレクタ１２０２、１２０３、１２０４は、選択制御回路１２０１からの選択制御信号に対応する浮動小数点積和演算器３０１に係るオペランド及び信号を選択して非正規化数処理用回路３０２に出力する。すなわち、例えば選択制御回路１２０１からの選択制御信号により第１の浮動小数点積和演算器３０１Ａに係るオペランド及び信号を出力するよう指示された場合、セレクタ１２０２、１２０３、１２０４は、オペランドＯＰＡ、信号ＳＧ５Ａ、ＳＧ６Ａをそれぞれ選択して非正規化数処理用回路３０２に出力する。また、例えば選択制御回路１２０１からの選択制御信号により第２の浮動小数点積和演算器３０１Ｂに係るオペランド及び信号を出力するよう指示された場合、セレクタ１２０２、１２０３、１２０４は、オペランドＯＰＢ、信号ＳＧ５Ｂ、ＳＧ６Ｂをそれぞれ選択して非正規化数処理用回路３０２に出力する。
【００７６】
命令制御部１１０からの命令に応じて演算実行部１２０が浮動小数点積和演算器３０１Ａ、３０１Ｂを用いるＳＩＭＤ命令を実行する際、浮動小数点積和演算器３０１Ａ、３０１Ｂの非正規化数検出回路４０４が、入出力データにおける非正規化数の検出を行う。何れの浮動小数点積和演算器３０１Ａ、３０１Ｂでも入出力データにおいて非正規化数が検出されない場合、演算実行部１２０は、浮動小数点積和演算器３０１Ａ、３０１Ｂを用いて通常の演算処理を行い演算結果ＳＧ７Ａ、ＳＧ７Ｂを出力する。
【００７７】
入出力データにおいて非正規化数が検出された浮動小数点積和演算器３０１（３０１Ａ、３０１Ｂ）は、命令制御部１１０に信号ＳＧ１（ＳＧ１Ａ、ＳＧ１Ｂ）を出力する。そして、非正規化数が検出されたＳＩＭＤ命令が命令制御部１１０でコミット処理（完了処理）される際に、非正規化数が検出された浮動小数点積和演算器３０１（３０１Ａ、３０１Ｂ）が１つでもある場合、信号ＳＧ１（ＳＧ１Ａ、ＳＧ１Ｂ）を基にＣＰＵ１００が非正規化数処理モードへと遷移する。非正規化数処理モード中、命令制御部１１０は各演算器に非正規化数処理モードであることを示す信号ＳＧ２を出力する。また、非正規化数処理モードでは、以下のようにして、非正規化数が検出されたＳＩＭＤ命令を演算実行部１２０で再実行する。
【００７８】
非正規化数処理モードに遷移すると、命令制御部１１０のエントリバッファ及び演算実行部１２０のリオーダバッファ１２４の値を破棄する。また、実行中の後続命令も破棄した上で、後続命令の実行を抑止する１命令モードとして動作し、非正規化数が検出されたＳＩＭＤ命令を実行する。
【００７９】
演算実行部１２０の浮動小数点積和演算器３０１Ａ、３０１Ｂは、非正規化数が検出されたＳＩＭＤ命令の演算を開始する。選択制御回路１２０１による制御によって各浮動小数点積和演算器３０１（３０１Ａ、３０１Ｂ）の非正規化数用処理を順番に開始する。選択制御回路１２０１は、例えばカウンタとして実装することで各浮動小数点積和演算器３０１（３０１Ａ、３０１Ｂ）に対する値を順番に選択することが可能である。本実施形態では非正規化数処理用回路３０２を１つだけ設けているが、複数設けることにより並列処理を行ってもよい。演算方法は、第１の実施形態と同様である。ここで、非正規化数処理モードにおいてＳＩＭＤ命令の演算を行う場合、例外としてアンダーフロー、不正確に加え、オーバーフローが発生する可能性がある。したがって、丸めにより発生するオーバーフローを含めた３つの例外が、先に検出された浮動小数点積和演算器での例外と論理和を取ることでマージされる。
【００８０】
非正規化数処理用回路３０２による演算が終了し、非正規化数が検出された命令がコミットされた後に、ＣＰＵ１００は、非正規化数処理モードから通常の処理モードへ遷移して、後続命令の実行を開始する。
【００８１】
第３の実施形態によれば、第１の実施形態と同様に、演算処理において非正規化数が検出された場合、命令のコミット処理（完了処理）を行う際に、非正規化数が検出された命令を再実行させることで、正規化数だけの演算のレイテンシを悪化させることなく、非正規化数をハードウェアにより制御を複雑化させずに高速に処理することができる。
【００８２】
なお、前述した説明では、演算に用いる浮動小数点形式は、倍精度及び単精度を一例として説明したが、それらに限定されるものではない。また、資源（リソース）を追加することにより、６４ビットに単精度浮動小数点数を並べ、同時に処理する単精度のデュアル処理も可能である。また、前述した各実施形態では、１種類の演算器に対する非正規化数処理の例を示しているが、それらの実施形態を合わせて適用することにより複数種の演算器に対しても非正規化数処理モードを追加することが可能である。
【００８３】
また、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００８４】
１００  ＣＰＵ
１１０  命令制御部
１１１  エントリバッファ
１２０  演算実行部
１２１  演算制御部
１２２  演算部
１２３  レジスタファイル
１２４  リオーダバッファ
１３０  キャッシュ制御部
１３１  キャッシュメモリ
１４０  メモリ
３０１  浮動小数点積和演算器
３０２、８０２  非正規化数処理用回路
３０３〜３０５  レジスタ
８０１  浮動小数点逆数テーブル演算器
【図１】
2018195129.tif 000003
【図２】
2018195129.tif 000004
【図３】
2018195129.tif 000005
【図４】
2018195129.tif 000006
【図５】
2018195129.tif 000007
【図６】
2018195129.tif 000008
【図７】
2018195129.tif 000009
【図８】
2018195129.tif 000010
【図９】
2018195129.tif 000011
【図１０】
2018195129.tif 000012
【図１１】
2018195129.tif 000013
【図１２】
2018195129.tif 000014
【図１３】
2018195129.tif 000015
【手続補正書】
【提出日】平成30年5月16日(2018.5.16)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００３
【補正方法】変更
【補正の内容】
【０００３】
正規化数は、小数部を表す仮数部とは別に整数部に１の値を持ち、“（−１）S×２(E-bias)×１．Ｆ”で表される。この整数ビットは隠しビットと呼ばれる。残りの４つの数のうち、数値計算が必要となるのは非正規化数のみである。非正規化数は、正規化数とは異なり整数部（隠しビット）が１とならない数であり、バイアスされた指数を表す指数部は０であるが表現される数の指数の値は指数部が１となり、“（−１）S×２(E-bias+1)×０．Ｆ”で表される。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
【特許文献１】米国特許第９０２６７０５号明細書
【特許文献２】米国特許第７３７３４８９号明細書
【特許文献３】米国特許第６３７８０６７号明細書
【特許文献４】米国特許第７４３７５３８号明細書
【特許文献５】米国特許第６１５１６６９号明細書
【特許文献６】特表２００２−５０８８６４号公報
【特許文献７】米国特許第９３１７２５０号明細書
【特許文献８】米国特許第８２６０８３７号明細書
【特許文献９】米国特許第５９４３２４９号明細書
【特許文献１０】特開２０１５−２２８２２６号公報
【特許文献１１】特開平８−３０５５４６号公報
【特許文献１２】特開平６−１６１７０８号公報
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】変更
【補正の内容】
【００２８】
非正規化数検出回路４０４は、浮動小数点積和演算器３０１の入出力データにおける非正規化数の検出を行い、検出結果を信号ＳＧ１、ＳＧ３、ＳＧ５により出力する。非正規化数検出回路４０４は、フォーマット回路４０５〜４０７を介して入力されるレジスタ３０３〜３０５に保持されたオペランドＯＰ１〜ＯＰ３、及び積和演算の演算結果が非正規化数であるか否かを判定する。判定の結果、非正規化数検出回路４０４は、入力されるオペランドＯＰ１〜ＯＰ３及び積和演算の演算結果の少なくとも１つが非正規化数であれば信号ＳＧ１を出力する。また、非正規化数検出回路４０４は、入力されるオペランドＯＰ１〜ＯＰ３が非正規化数であれば各オペランド毎に信号ＳＧ３（ＳＧ３Ａ〜ＳＧ３Ｃ）を出力し、積和演算の演算結果が非正規化数であれば信号ＳＧ５を出力する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】変更
【補正の内容】
【００３２】
図４に戻り、指数計算回路Ａ４０８は、入力されるオペランドの指数部ＯＰ１Ｅ、ＯＰ２Ｅ、ＯＰ３Ｅから、正規化される前の演算結果の指数を計算する。指数計算回路Ａ４０８の構成例を図６に示す。指数計算回路Ａ４０８は、セレクタ６０１、６０３、６０５、６１０、６１９、加算器６０２、６０４、６０６、６０７、及び減算器６０８、６０９を有する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００３４
【補正方法】変更
【補正の内容】
【００３４】
セレクタ６０１、６０３、６０５は、非正規化数検出回路４０４から出力される信号ＳＧ３（ＳＧ３Ａ〜ＳＧ３Ｃ）に応じて、一方の値を選択して出力する。セレクタ６０１、６０３、６０５は、非正規化数でないことを信号ＳＧ３が示す場合にはオペランドの指数部ＯＰ１Ｅ、ＯＰ２Ｅ、ＯＰ３Ｅを選択して出力し、非正規化数であることを信号ＳＧ３が示す場合には加算器６０２、６０４、６０６の出力を選択して出力する。加算器６０７は、セレクタ６０１の出力とセレクタ６０３の出力とを加算する。減算器６０８は、命令制御部１１０からの信号ＳＧ４により指定される浮動小数点数のサイズに応じてセレクタ６１９から出力される値１０２３又は１２７を、加算器６０７の出力から減算する。これにより、オペランドＯＰ１、ＯＰ２の乗算結果の指数が計算される。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００６２
【補正方法】変更
【補正の内容】
【００６２】
レジスタ８０５は、浮動小数点逆数テーブル演算器８０１から出力される演算結果ＳＧ１３を格納する。レジスタ８０５に格納された演算結果ＳＧ１３は、リオーダバッファ１２４に格納される。例外判定部８０６は、浮動小数点逆数テーブル演算器８０１からの出力に基づいて例外が発生したかを判定し、例外が発生した場合に命令制御部１１０に通知する。
【手続補正７】
【補正対象書類名】図面
【補正対象項目名】図４
【補正方法】変更
【補正の内容】
【図４】
2018195129.tif 000016
【手続補正８】
【補正対象書類名】図面
【補正対象項目名】図５
【補正方法】変更
【補正の内容】
【図５】
2018195129.tif 000017
【手続補正９】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2018195129.tif 000018