(57)【要約】【課題】  浮動小数点数演算回路において効率的に演算対象データを供給する。【解決手段】  Ｗビット幅の命令はメモリ２００からロードストアユニット１１０を介して命令デコーダ１２０に供給される。命令中に即値として埋め込まれたＮビット幅のデータは変換回路１３０によりＦビット幅の浮動小数点数に変換され、浮動小数点数の演算器１４０による演算対象となる。変換回路１３０において変換されたデータまたは演算器による演算結果はセレクタ１５０を介してレジスタファイル１７０に格納される。変換回路１３０はＮビット幅の整数をＦビット幅の浮動小数点数に変換する整数変換器３００とＮビット幅の浮動小数点数をＦビット幅の浮動小数点数に変換する浮動小数点数変換器４００とを備えて、Ｎビット幅のデータをＦビット幅の浮動小数点数に変換する。【選択図】      図１
2006154979.tif 000002
【特許請求の範囲】
【請求項１】
所定の精度の浮動小数点数について所定の浮動小数点数演算を行う浮動小数点数演算器と、
所定のデータを前記精度の浮動小数点数に変換して前記浮動小数点数演算器の少なくとも何れかの入力に供給する変換回路と
を具備することを特徴とする浮動小数点数演算回路。
【請求項２】
前記変換回路は、整数を前記データとして前記精度の浮動小数点数に変換する整数変換器を備えることを特徴とする請求項１記載の浮動小数点数演算回路。
【請求項３】
前記変換回路は、前記精度とは異なる精度の浮動小数点数を前記データとして前記精度の浮動小数点数に変換する浮動小数点数変換器を備えることを特徴とする請求項１記載の浮動小数点数演算回路。
【請求項４】
前記変換回路は、
整数を前記データとして前記精度の浮動小数点数に変換する整数変換器と、
前記精度とは異なる精度の浮動小数点数を前記データとして前記精度の浮動小数点数に変換する浮動小数点数変換器と、
前記整数変換器または前記浮動小数点数変換器の何れかの出力を選択して前記浮動小数点数演算器の少なくとも何れかの入力に供給する変換セレクタと
を備えることを特徴とする請求項１記載の浮動小数点数演算回路。
【請求項５】
前記浮動小数点数演算器の出力または前記変換回路の出力の何れか一方を選択して出力する演算セレクタをさらに具備することを特徴とする請求項１記載の浮動小数点数演算回路。
【請求項６】
即値フィールドを有する命令の解読を行う命令デコーダと、
前記命令デコーダによって解読された前記即値フィールドに含まれるデータを所定の精度の浮動小数点数に変換する変換回路と、
前記変換回路によって変換された前記精度の浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器と、
前記浮動小数点数演算器による演算結果が格納されるレジスタと
を具備することを特徴とするプロセッサ。
【請求項７】
前記変換回路は、前記即値フィールドに含まれる整数を前記精度の浮動小数点数に変換する整数変換器を備えることを特徴とする請求項６記載のプロセッサ。
【請求項８】
前記変換回路は、前記即値フィールドに含まれる前記精度とは異なる精度の浮動小数点数を前記精度の浮動小数点数に変換する浮動小数点数変換器を備えることを特徴とする請求項６記載のプロセッサ。
【請求項９】
前記変換回路は、
前記即値フィールドに含まれる整数を前記精度の浮動小数点数に変換する整数変換器と、
前記即値フィールドに含まれる前記精度とは異なる精度の浮動小数点数を前記精度の浮動小数点数に変換する浮動小数点数変換器と、
前記整数変換器または前記浮動小数点数変換器の何れかの出力を選択して前記浮動小数点数演算器の少なくとも何れかの入力に供給する変換セレクタと
を備えることを特徴とする請求項６記載のプロセッサ。
【請求項１０】
前記浮動小数点数演算器の出力または前記変換回路の出力の何れか一方を選択して前記レジスタに出力する演算セレクタをさらに具備することを特徴とする請求項６記載のプロセッサ。
【請求項１１】
Ｎビット（Ｎは１以上の整数）の即値フィールドを有するＷビット（Ｗは１以上の整数）の命令の解読を行う命令デコーダと、
前記命令デコーダによって解読された前記即値フィールドに含まれるＮビットのデータをＦビット（Ｆは１以上の整数）の浮動小数点数に変換する変換回路と、
前記変換回路によって変換された前記Ｆビットの浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器と、
前記浮動小数点数演算器による演算結果が格納されるレジスタと
を具備することを特徴とするプロセッサ。
【請求項１２】
１６ビットの即値フィールドを有する３２ビットの命令の解読を行う命令デコーダと、
前記命令デコーダによって解読された前記即値フィールドに含まれる１６ビットの整数または浮動小数点数を３２ビットの浮動小数点数に変換する変換回路と、
前記変換回路によって変換された前記３２ビットの浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器と、
前記浮動小数点数演算器による演算結果が格納されるレジスタと
を具備することを特徴とするプロセッサ。
【請求項１３】
１６ビットの即値フィールドを有する３２ビットの命令の解読を行う命令デコーダと、
前記命令デコーダによって解読された前記即値フィールドに含まれる１６ビットの整数を３２ビットの浮動小数点数に変換する変換回路と、
前記変換回路によって変換された前記３２ビットの浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器と、
前記浮動小数点数演算器による演算結果が格納されるレジスタと
を具備することを特徴とするプロセッサ。
【請求項１４】
１６ビットの即値フィールドを有する３２ビットの命令の解読を行う命令デコーダと、
前記命令デコーダによって解読された前記即値フィールドに含まれる１６ビットの浮動小数点数を３２ビットの浮動小数点数に変換する変換回路と、
前記変換回路によって変換された前記３２ビットの浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器と、
前記浮動小数点数演算器による演算結果が格納されるレジスタと
を具備することを特徴とするプロセッサ。
【請求項１５】
Ｎビット（Ｎは１以上の整数）の即値フィールドを有する浮動小数点数演算命令を命令セットとして備えるプロセッサであって、
前記即値フィールドに含まれるＮビットのデータを抽出する命令デコーダと、
前記抽出されたＮビットのデータをＦビット（Ｆは１以上の整数）の浮動小数点数に変換する変換回路と、
前記変換回路によって変換された前記Ｆビットの浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器と
を具備することを特徴とするプロセッサ。
【請求項１６】
１６ビットの即値フィールドを有する浮動小数点数演算命令を命令セットとして備えるプロセッサであって、
前記即値フィールドに含まれる１６ビットのデータを抽出する命令デコーダと、
前記抽出された１６ビットのデータを３２ビットの浮動小数点数に変換する変換回路と、
前記変換回路によって変換された前記３２ビットの浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器と
を具備することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点数演算回路に関し、特に即値を扱う浮動小数点数演算回路ならびに即値付浮動小数点数命令を実行するプロセッサに関する。
【背景技術】
【０００２】
演算対象となるデータがメモリに保持されている場合、その演算対象データを演算回路に供給するためには、そのメモリから演算対象データを読み出す必要がある。一部のプロセッサでは、演算命令のオペランドとして演算対象データが格納されているメモリのアドレスを指定するフィールド（メモリオペランド）を設けることにより、メモリ上のデータをその演算対象とするものがある。
【０００３】
しかし、演算命令にメモリオペランドを設けた場合には、演算命令を解釈した上で指定されたメモリアドレスにアクセスする必要があり、データが揃うまでに要する時間が長くなるという問題がある。
【０００４】
そこで、近年のＲＩＳＣ（Reduced Instruction Set Computer）に代表されるロードストアアーキテクチャでは、メモリからレジスタにデータを読み出すロード命令と演算を実行する演算命令とを分離することにより１命令におけるデータ待ち時間をなくし、コンパイラによる高速化のための命令スケジューリングを容易に行うことができるようになっている。また、プロセッサに付加される演算プロセッサの命令セットについても同様のアーキテクチャが採用されるようになっている（例えば、非特許文献１参照。）。
【非特許文献１】「IA-32 Intel(R) Architecture Software Developer's Manual Volume 1: Basic Architecture」、Intel Corporation、２００４年
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このように、近年ではロード命令と演算命令とを分離したアーキテクチャが主流になっている。しかしながら、この場合、演算命令に加えてロード命令を実行する必要があり、メモリアクセスに時間を要するとともに、プログラムのコードサイズが大きくなるという問題がある。
【０００６】
これに対し、整数演算の場合には、演算命令の一部のフィールドに即値フィールドを設け、演算対象となるデータを演算命令の中に直接埋め込む形式が採用されることがある。しかし、浮動小数点数演算回路に浮動小数点数データを供給するには単精度の浮動小数点数でも３２ビットを要するため、命令長として一般的な３２ビット命令の中に即値としてそのまま埋め込むことは困難である。
【０００７】
そこで、本発明は、浮動小数点数演算回路において効率的に演算対象データを供給することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、所定の精度の浮動小数点数について所定の浮動小数点数演算を行う浮動小数点数演算器と、所定のデータを上記精度の浮動小数点数に変換して上記浮動小数点数演算器の少なくとも何れかの入力に供給する変換回路とを具備することを特徴とする浮動小数点数演算回路である。これにより、供給された所定のデータに基づいて所定の精度の浮動小数点数の演算を実行させるという作用をもたらす。
【０００９】
また、本発明の第２の側面は、即値フィールドを有する命令の解読を行う命令デコーダと、上記命令デコーダによって解読された上記即値フィールドに含まれるデータを所定の精度の浮動小数点数に変換する変換回路と、上記変換回路によって変換された上記精度の浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器と、上記浮動小数点数演算器による演算結果が格納されるレジスタとを具備することを特徴とするプロセッサである。これにより、命令の即値フィールドによるデータに基づいて所定の精度の浮動小数点数の演算を実行させるという作用をもたらす。
【００１０】
また、この第１または第２の側面において、上記変換回路は、整数を上記データとして上記精度の浮動小数点数に変換する整数変換器を備えてもよい。これにより、供給された整数に基づいて所定の精度の浮動小数点数の演算を実行させるという作用をもたらす。
【００１１】
また、この第１または第２の側面において、上記変換回路は、上記精度とは異なる精度の浮動小数点数を上記データとして上記精度の浮動小数点数に変換する浮動小数点数変換器を備えてもよい。これにより、演算器の精度とは異なる浮動小数点数に基づいて浮動小数点数の演算を実行させるという作用をもたらす。
【００１２】
また、この第１または第２の側面において、上記変換回路は、整数を上記データとして上記精度の浮動小数点数に変換する整数変換器と、上記精度とは異なる精度の浮動小数点数を上記データとして上記精度の浮動小数点数に変換する浮動小数点数変換器と、上記整数変換器または上記浮動小数点数変換器の何れかの出力を選択して上記浮動小数点数演算器の少なくとも何れかの入力に供給する変換セレクタとを備えることができる。これにより、供給された整数または演算器の精度とは異なる浮動小数点数に基づいて浮動小数点数の演算を実行させるという作用をもたらす。
【００１３】
また、この第１または第２の側面において、上記浮動小数点数演算器の出力または上記変換回路の出力の何れか一方を選択して出力する演算セレクタをさらに具備してもよい。これにより、必要に応じて浮動小数点数演算器を介した値とそれを介さない値とを適宜出力させるという作用をもたらす。
【００１４】
また、本発明の第３の側面は、Ｎビット（Ｎは１以上の整数）の即値フィールドを有するＷビット（Ｗは１以上の整数）の命令の解読を行う命令デコーダと、上記命令デコーダによって解読された上記即値フィールドに含まれるＮビットのデータをＦビット（Ｆは１以上の整数）の浮動小数点数に変換する変換回路と、上記変換回路によって変換された上記Ｆビットの浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器と、上記浮動小数点数演算器による演算結果が格納されるレジスタとを具備することを特徴とするプロセッサである。これにより、命令の即値フィールドによるＮビットデータに基づいてＦビットの浮動小数点数の演算を実行させるという作用をもたらす。
【００１５】
この第３の側面において、典型例として、Ｎビットの即値フィールドは１６ビットの即値フィールドとし、Ｗビットの命令は３２ビットの命令とし、Ｆビットの浮動小数点数は３２ビットの浮動小数点数とすることができる。このとき、１６ビットの即値フィールドには、１６ビットの整数または浮動小数点数を指定することができる。
【００１６】
また、本発明の第４の側面は、Ｎビット（Ｎは１以上の整数）の即値フィールドを有する浮動小数点数演算命令を命令セットとして備えるプロセッサであって、上記即値フィールドに含まれるＮビットのデータを抽出する命令デコーダと、上記抽出されたＮビットのデータをＦビット（Ｆは１以上の整数）の浮動小数点数に変換する変換回路と、上記変換回路によって変換された上記Ｆビットの浮動小数点数を少なくとも何れかの入力として所定の浮動小数点数演算を行う浮動小数点数演算器とを具備することを特徴とするプロセッサである。これにより、浮動小数点数演算命令に即値フィールドを設けることが可能となり、プログラムコードやメモリ等の利用効率を向上させるという作用をもたらす。
【００１７】
この第４の側面において、典型例として、Ｎビットの即値フィールドは１６ビットの即値フィールドとし、Ｆビットの浮動小数点数は３２ビットの浮動小数点数とすることができる。
【発明の効果】
【００１８】
本発明によれば、浮動小数点数演算回路において効率的に演算対象データを供給するという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００１９】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００２０】
図１は、本発明の実施の形態におけるプロセッサ１００の一構成例を示す図である。このプロセッサ１００は、バス２１０を介してメモリ２００と接続されており、ロードストアユニット１１０と、命令デコーダ１２０と、浮動小数点数演算回路１６０と、レジスタファイル１７０と、制御ユニット１９０とを備える。
【００２１】
ロードストアユニット１１０は、メモリ２００からＷビット（Ｗは１以上の整数）の命令またはＦビット（Ｆは１以上の整数）の浮動小数点数データを読み出し、または、メモリ２００に対してＦビットの浮動小数点数データを書き込むものである。
【００２２】
命令デコーダ１２０は、Ｗビットの命令をロードストアユニット１１０から受け取り、命令フォーマットに従ってデコードを行うものである。この命令デコーダ１２０におけるデコード結果は制御信号としてプロセッサ１００の各部に伝えられる。
【００２３】
浮動小数点数演算回路１６０は、命令デコーダ１２０からのＮビット（Ｎは１以上の整数）のデータとレジスタファイル１７０からのＦビットの浮動小数点数データとが供給され、所定の演算を行ってＦビットのデータを出力する。
【００２４】
レジスタファイル１７０は、Ｆビットの浮動小数点数データをＭ個（Ｍは１以上の整数）保持するレジスタである。このレジスタファイル１７０は、ロードストアユニット１１０または浮動小数点数演算回路１６０との間で書込みまたは読出しを行う。レジスタファイル１７０における何れのデータにどのようなアクセスをするかは、命令デコーダ１２０によるデコード結果に基づいて制御される。
【００２５】
また、制御ユニット１９０は、プロセッサ１００内の各ハードウェアモジュールを制御するために用いられる。
【００２６】
ここで、浮動小数点数演算回路１６０は、さらに変換回路１３０と、演算器１４０と、セレクタ１５０とを備えている。変換回路１３０は、命令デコーダ１２０からのＮビットデータを整数としてＦビット浮動小数点数データに変換する整数変換器３００と、命令デコーダ１２０からのＮビットデータをＮビット浮動小数点数としてＦビット浮動小数点数データに変換する浮動小数点数変換器４００と、整数変換器３００または浮動小数点数変換器４００の何れかの出力を選択するセレクタ１３５を備えている。また、演算器１４０は、Ｆビット浮動小数点数データ同士を演算する演算器である。セレクタ１５０は、演算器１４０の出力または変換回路１３０の出力の何れかを選択してレジスタファイル１７０に出力するものである。
【００２７】
なお、この図１ではそれぞれ、命令長をＷビット、浮動小数点数データ幅をＦビット、命令デコーダ１２０から供給されるデータ幅をＮビットとしたが、以下では典型的な例として命令長および浮動小数点数データ幅をそれぞれ３２ビットと想定する。また、命令デコーダ１２０から供給されるデータ幅を１６ビットと想定する。但し、本発明はこれに限定されるものではなく、Ｗビットの命令長におけるＮビットのデータを適宜Ｆビット浮動小数点数データに変換するよう構成することができる。
【００２８】
図２は、本発明の実施の形態における即値命令の命令フォーマットを示す図である。図２（ａ）を参照すると、この即値命令は３２ビット命令であり、６ビットの機能コード８０１、５ビットの第１オペランド８０２、５ビットの第２オペランド８０３、１６ビットの即値８０４の各フィールドを備えている。
【００２９】
機能コード８０１は、その命令のオペコードを表すフィールドである。第１および第２オペランド８０２および８０３は、その命令のオペランドであり、命令によって第２オペランド８０３は存在しない場合がある。即値８０４は、１６ビット整数または１６ビット浮動小数点数を即値として供給するものである。
【００３０】
図２（ｂ）から（ｆ）を参照すると、即値命令フォーマットによる命令の一例として、即値格納命令（浮動小数）、即値格納命令（整数）、即値加算命令、即値乗算命令、および、即値除算命令が示されている。
【００３１】
図２（ｂ）の即値格納命令（浮動小数）では、機能コード８０１として「ｆｌｄｆｉ」が指定され、オペランドとしては第１オペランド８０２にレジスタ「ｒｄ」が指定される。そして、即値８０４には１６ビットの浮動小数点数（ｆｉｍｍ１６）が指定される。この即値格納命令（浮動小数）を実行することにより、１６ビット浮動小数点数が浮動小数点数変換器４００によって３２ビット浮動小数点数に変換され、セレクタ１３５および１５０を経てレジスタｒｄに格納される。
【００３２】
図２（ｃ）の即値格納命令（整数）では、機能コード８０１として「ｆｌｄｉｉ」が指定され、オペランドとしては第１オペランド８０２にレジスタ「ｒｄ」が指定される。そして、即値８０４には１６ビットの整数（ｉｉｍｍ１６）が指定される。この即値格納命令（整数）を実行することにより、１６ビット整数が整数変換器３００によって３２ビット浮動小数点数に変換され、セレクタ１３５および１５０を経てレジスタｒｄに格納される。
【００３３】
図２（ｄ）の即値加算命令では、機能コード８０１として「ｆａｄｄｆｉ」が指定され、オペランドとしては第１オペランド８０２にレジスタ「ｒｄ」が、第２オペランド８０３にレジスタ「ｒｓ」がそれぞれ指定される。そして、即値８０４には１６ビットの浮動小数点数（ｆｉｍｍ１６）が指定される。この即値加算命令を実行することにより、１６ビット浮動小数点数が浮動小数点数変換器４００によって３２ビット浮動小数点数に変換され、セレクタ１３５を介して演算器１４０の一方の入力に供給される。そして、演算器１４０においてレジスタｒｓとの加算が行われて、その加算結果がセレクタ１５０を経てレジスタｒｄに格納される。
【００３４】
図２（ｅ）の即値乗算命令では、機能コード８０１として「ｆｍｕｌｆｉ」が指定され、オペランドとしては第１オペランド８０２にレジスタ「ｒｄ」が、第２オペランド８０３にレジスタ「ｒｓ」がそれぞれ指定される。そして、即値８０４には１６ビットの浮動小数点数（ｆｉｍｍ１６）が指定される。この即値乗算命令を実行することにより、１６ビット浮動小数点数が浮動小数点数変換器４００によって３２ビット浮動小数点数に変換され、セレクタ１３５を介して演算器１４０の一方の入力に供給される。そして、演算器１４０においてレジスタｒｓとの乗算が行われて、その乗算結果がセレクタ１５０を経てレジスタｒｄに格納される。
【００３５】
図２（ｆ）の即値除算命令では、機能コード８０１として「ｆｄｉｖｆｉ」が指定され、オペランドとしては第１オペランド８０２にレジスタ「ｒｄ」が、第２オペランド８０３にレジスタ「ｒｓ」がそれぞれ指定される。そして、即値８０４には１６ビットの浮動小数点数（ｆｉｍｍ１６）が指定される。この即値除算命令を実行することにより、１６ビット浮動小数点数が浮動小数点数変換器４００によって３２ビット浮動小数点数に変換され、セレクタ１３５を介して演算器１４０の一方の入力に供給される。そして、演算器１４０において、その変換結果によってレジスタｒｓが割られ、その除算結果がセレクタ１５０を経てレジスタｒｄに格納される。
【００３６】
図３は、本発明の実施の形態における１６ビット浮動小数点数の形式例を示す図である。図３（ａ）を参照すると、この形式例では、１ビットの符号部７２１と、５ビットの指数部７２２と、１０ビットの仮数部７２３とが示されている。
【００３７】
符号部７２１は数値の符号を表すものであり、正を表す「１」または負を表す「０」の何れかが格納される。
【００３８】
指数部７２２は、「１０」を基数とする指数を表し、「１５」が加算されたバイアス表現となっている。すなわち、図４に示すように、バイアスされる前の値において、指数を表す「−１４」から「＋１５」までの整数か、正の無限大（＋∞）、負の無限大（−∞）、または非数（ＮａＮ）を表す「＋１６」か、正のゼロ（＋０）、負のゼロ（−０）、または、非正規化数を表す「−１５」かのいずれかの値が格納される。
【００３９】
仮数部７２３は、「２」を基数として正規化された仮数を表し、正規化後に最上位ビットが省略された値が格納される。但し、１６ビット浮動小数点数では、正の非正規化数は正のゼロ（＋０）として、負の非正規化数は負のゼロ（−０）としてそれぞれ扱われる。図３（ｂ）または（ｃ）のように、１６ビット浮動小数点数において符号部７２１を「０」または「１」とし、指数部７２２および仮数部７２３を全て「０」とすると、正のゼロ（＋０）または負のゼロ（−０）を表す。
【００４０】
また、図３（ｄ）または（ｅ）のように、１６ビット浮動小数点数において符号部７２１を「０」または「１」とし、指数部７２２を「１１１１１」とし、仮数部７２３を全て「０」とすると、正の無限大（＋∞）または負の無限大（−∞）を表す。さらに図３（ｆ）のように、１６ビット浮動小数点数において符号部７２１を「０」または「１」とし、指数部７２２を「１１１１１」とし、仮数部７２３を「０」以外の値とすると、非数（ＮａＮ）を表すことになる。
【００４１】
なお、ここでは、指数部７２２として５ビット、仮数部７２３として１０ビットを想定して説明したが、本発明はこれに限られず、これ以外のビット数の組合せによってもよい。
【００４２】
図５は、本発明の実施の形態における整数変換器３００の構成例を示す図である。この整数変換器３００は、即値命令８００において即値８０４として埋め込まれた１６ビット整数７１０をＩＥＥＥ７５４の単精度（３２ビット）浮動小数点数７９０に変換するものである。この整数変換器３００は、符号判定回路３１０と、絶対値化回路３２０と、正規化回路３３０と、指数算出回路３４０と、丸めビット付加回路３５０と、丸め回路３６０と、桁上がり補正回路３７０と、ビット切捨て回路３８０とを備えている。なお、この整数変換器３００における丸めモードは、ＩＥＥＥ７５４のＲＮ（Round to Nearest）に従うものとする。
【００４３】
符号判定回路３１０は、信号線１２９により供給された１６ビット整数７１０における符号付き整数７１１の符号を判定するものであり、その判定結果は信号線３１９を介して３２ビット浮動小数点数７９０における符号７９１として供給される。また、この判定結果は絶対値化回路３２０における符号反転にも用いられる。
【００４４】
絶対値化回路３２０は、信号線１２９により供給された１６ビット整数７１０における符号付き整数７１１の絶対値を３２ビットの絶対値として出力するものである。図６を参照すると、この絶対値化回路３２０は、符号反転器３２１と、セレクタ３２２と、ビット拡張器３２３とを備える。符号反転器３２１は、信号線１２９により供給された１６ビット整数７１０における符号付き整数７１１の符号を反転させるものである。セレクタ３２２は、符号反転器３２１の入力または出力を符号判定回路３１０の判定結果に基づいて選択し、符号付き整数７１１の絶対値を出力する。ビット拡張器３２３は、セレクタ３２２から出力された１６ビットの絶対値を３２ビットの絶対値に拡張する。
【００４５】
正規化回路３３０は、絶対値化回路３２０から出力された３２ビットの絶対値を正規化した正規化数を出力するものである。図６を参照すると、この正規化回路３３０は、計数器３３１と、シフタ３３２とを備える。計数器３３１は、絶対値化回路３２０から出力された３２ビットの絶対値について、最上位ビットから最下位ビットに向かって連続している「０」の個数を計数するものである。シフタ３３２は、計数器３３１による計数結果をシフト量として、絶対値化回路３２０から出力された３２ビットの絶対値を左シフトして３２ビットの正規化数として出力する。このようにして得られた正規化数は信号線３３９により丸めビット付加回路３５０に供給され、計数器３３１による計数結果は信号線３３８により指数算出回路３４０に供給される。
【００４６】
指数算出回路３４０は、正規化回路３３０により生成された正規化数の指数を算出するものである。図７を参照すると、この指数算出回路３４０は、符号反転器３４１と、加算器３４２と、加算器３４３とを備えている。符号反転器３４１は、計数器３３１より信号線３３８を介して供給されたシフト数の計数結果の符号を反転させるものである。これにより、加算器３４２の出力は、「３１」からシフト数の計数結果を減算したものになる。また、加算器３４３は、その減算結果に「１２７」を加算するものである。これにより、正規化数の指数が算出される。このように算出された指数は、桁上がり補正回路３７０における加算器３７１およびセレクタ３７２に供給される。
【００４７】
丸めビット付加回路３５０は、正規化回路３３０により生成された正規化数の丸めビット付正規化数を生成するものである。図８を参照すると、正規化回路３３０により生成された正規化数７５０は、次のようにして丸めビット付正規化数７６０とされる。すなわち、正規化数７５０のビット３１乃至８は丸め用ビット付き正規化数７６０のビット２６乃至３となる。また、正規化数７５０のビット７は丸め用ビット付き正規化数７６０のＧｕａｒｄビット２となる。また、正規化数７５０のビット６は丸め用ビット付き正規化数７６０のＲｏｕｎｄビット１となる。正規化数７５０のビット５乃至０の論理和をとったものが丸め用ビット付き正規化数７６０のＳｔｉｃｋｙビット０となる。さらに、丸め用ビット付き正規化数７６０の最上位ビット２７には、丸め回路３６０において桁上がりを検知できるよう、「０」が設定される。
【００４８】
再び図７を参照すると、丸め回路３６０は、丸め処理を行うものであり、加算器３６１および３６２を備える。加算器３６１は、丸めビット付加回路３５０による丸め用ビット付き正規化数７６０に、そのビット３の値を加算するものである。また、加算器３６２は、加算器３６１による加算結果にさらに「３」を加算するものである。この加算結果は桁上がり補正回路３７０におけるシフタ３７３およびセレクタ３７４にデータとして供給され、また、この加算における桁上がり発生の有無が桁上がり情報として桁上がり補正回路３７０のセレクタ３７２および３７４の選択信号として供給される。
【００４９】
桁上がり補正回路３７０は、指数算出回路３４０により算出された指数および丸め回路３６０により丸め処理の施された正規化数の補正を行うものである。この桁上がり補正回路３７０は、加算器３７１と、セレクタ３７２と、シフタ３７３と、セレクタ３７４とを備えている。加算器３７１は、指数算出回路３４０により算出された指数に「１」を加算するものである。セレクタ３７２は、加算器３６２において桁上げが生じていれば加算器３７１の出力を選択し、桁上げが生じていなければ指数算出回路３４０からの指数を選択する。このセレクタ３７２の出力は信号線３７８を介して３２ビット浮動小数点数７９０における指数７９２として供給される。
【００５０】
シフタ３７３は、丸め回路３６０からの正規化数を１ビット右シフトするものである。セレクタ３７４は、加算器３６２において桁上げが生じていればシフタ３７３の出力を選択し、桁上げが生じていなければ丸め回路３６０からの正規化数を選択する。このセレクタ３７４の出力は信号線３７９を介してビット切捨て回路３８０に供給する。
【００５１】
再び図５を参照すると、ビット切捨て回路３８０は、桁上がり補正回路３７０から供給された丸め処理済み正規化数からビット２７、２６および２乃至０を切り捨てて２３ビットの仮数を生成するものである。このビット切捨て回路３８０の出力は３２ビット浮動小数点数７９０における仮数７９３として供給される。
【００５２】
図９は、本発明の実施の形態における浮動小数点数変換器４００の構成例を示す図である。この浮動小数点数変換器４００は、１６ビット浮動小数点数７２０を３２ビット浮動小数点数７９０に変換するものであり、指数変換回路４１０および仮数変換回路４２０を備えている。
【００５３】
指数変換回路４１０は、１６ビット浮動小数点数７２０における指数７２２を３２ビット浮動小数点数７９０の指数７９２に変換するものであり、加算器４１１および４１２と、セレクタ４１３とを備える。加算器４１１は、１６ビット浮動小数点数７２０のバイアス値である「１５」を減算するものである。加算器４１２は、加算器４１１による加算結果に３２ビット浮動小数点数７９０のバイアス値である１２７を加算するものである。
【００５４】
セレクタ４１３は、１６ビット浮動小数点数７２０の内容に応じて、加算器４１２による加算結果、数「２５５」、数「０」の何れかを選択するものである。すなわち、１６ビット浮動小数点数７２０が、正の無限大（＋∞）、負の無限大（−∞）または非数（ＮａＮ）の何れかであれば、３２ビット浮動小数点数７９０の指数７９２として、無限大または非数を表す「２５５」を選択する。また、１６ビット浮動小数点数７２０が、正のゼロ（＋０）、負のゼロ（−０）または非正規化数であれば、３２ビット浮動小数点数７９０の指数７９２として、ゼロを表す「０」を選択する。また、これら以外の浮動小数点数であれば、３２ビット浮動小数点数７９０の指数７９２として、加算器４１２による加算結果を選択する。
【００５５】
仮数変換回路４２０は、１６ビット浮動小数点数７２０における仮数７２３を３２ビット浮動小数点数７９０の仮数７９３に変換するものであり、セレクタ４２３を備える。このセレクタ４２３は、１６ビット浮動小数点数７２０の内容に応じて、１０ビットの仮数７２３の下位に１３ビットの「０」を補った数、１０ビットの仮数７２３の上位に１３ビットの「０」を補った数、または、２３ビットの「０」の何れかを選択する。すなわち、１６ビット浮動小数点数７２０が、正の無限大（＋∞）、負の無限大（−∞）または非数（ＮａＮ）の何れかであれば、３２ビット浮動小数点数７９０の仮数７９３として、１０ビットの仮数７２３の上位に１３ビットの「０」を補った数を選択する。また、１６ビット浮動小数点数７２０が、正のゼロ（＋０）、負のゼロ（−０）または非正規化数であれば、３２ビット浮動小数点数７９０の仮数７９３として、２３ビットの「０」を選択する。また、これら以外の浮動小数点数であれば、３２ビット浮動小数点数７９０の仮数７９３として、１０ビットの仮数７２３の下位に１３ビットの「０」を補った数を選択する。
【００５６】
なお、この浮動小数点数変換器４００においては、１６ビット浮動小数点数７２０の符号７２１は、そのまま３２ビット浮動小数点数７９０の符号７９１として使用される。
【００５７】
図１０は、本発明の実施の形態におけるプログラムコード列の一例を示す図である。ここでは、円錐の体積を求めるプログラムを一例として挙げる。これは、次式によって、半径ｒおよび高さｈに基づいて円錐の体積ｖを求めるものである。
ｖ ← （π×ｒ２×ｈ）／３
【００５８】
まず、変数ｒのメモリ領域の内容がレジスタ＄ｆ０にロードされる（ステップＳ９１１）。また、変数ｈのメモリ領域の内容がレジスタ＄ｆ１にロードされる（ステップＳ９１２）。そして、レジスタ＄ｆ０とレジスタ＄ｆ０との乗算が実行され、その乗算結果がレジスタ＄ｆ０に格納される（ステップＳ９１３）。これは、半径ｒの二乗を計算するものである。
【００５９】
続いて、レジスタ＄ｆ０とレジスタ＄ｆ１との乗算が実行され、その乗算結果がレジスタ＄ｆ０に格納される（ステップＳ９１４）。これは、半径ｒの二乗に高さｈを掛けるものである。
【００６０】
そして、レジスタ＄ｆ０と即値３．１４との乗算が実行され、その乗算結果がレジスタ＄ｆ０に格納される（ステップＳ９１６）。ここでは、図２（ｅ）において説明した即値乗算命令（ｆｍｕｌｆｉ）を用いることができる。すなわち、第１および第２のオペランド８０２および８０３をともにレジスタ＄ｆ０として、即値８０４を１６ビットの「３．１４」とすることにより、１命令で所望の演算を実現することができる。
【００６１】
続いて、レジスタ＄ｆ０を即値３．０で割る除算が実行され、その除算結果がレジスタ＄ｆ０に格納される（ステップＳ９１８）。ここでは、図２（ｆ）において説明した即値除算命令（ｆｄｉｖｆｉ）を用いることができる。すなわち、第１および第２のオペランド８０２および８０３をともにレジスタ＄ｆ０として、即値８０４を１６ビットの「３．０」とすることにより、１命令で所望の演算を実現することができる。
【００６２】
最後に、レジスタ＄ｆ０の内容が変数ｖのメモリ領域にストアされる（ステップＳ９１９）。これにより、変数ｖのメモリ領域に、円錐の体積の計算結果が格納されることになる。
【００６３】
図１１は、従来技術におけるプログラムコード列の一例を示す図である。ここでは、命令セットの一例として、非特許文献１におけるＳＳＥ命令群（Streaming SIMD Extensions instructions）を用いる。プログラムの内容は図１０の場合と同様に円錐の体積を求めるものである。
【００６４】
まず、変数ｒのメモリ領域の内容がレジスタＸＭＭ０にロードされる（ステップＳ９２１）。また、変数ｈのメモリ領域の内容がレジスタＸＭＭ１にロードされる（ステップＳ９２２）。そして、レジスタＸＭＭ０とレジスタＸＭＭ０との乗算が実行され、その乗算結果がレジスタＸＭＭ０に格納される（ステップＳ９２３）。これは、半径ｒの二乗を計算するものである。
【００６５】
続いて、レジスタＸＭＭ０とレジスタＸＭＭ１との乗算が実行され、その乗算結果がレジスタＸＭＭ０に格納される（ステップＳ９２４）。これは、半径ｒの二乗に高さｈを掛けるものである。
【００６６】
そして、定数ｐｉ（３．１４）が保持されるメモリ領域の内容がレジスタＸＭＭ１にロードされる（ステップＳ９２５）。その後、レジスタＸＭＭ０とレジスタＸＭＭ１との乗算が実行され、その乗算結果がレジスタＸＭＭ０に格納される（ステップＳ９２６）。
【００６７】
続いて、定数ｄｖ（３．０）が保持されるメモリ領域の内容がレジスタＸＭＭ１にロードされる（ステップＳ９２７）。その後、レジスタＸＭＭ０をレジスタＸＭＭ１で割る除算が実行され、その除算結果がレジスタＸＭＭ０に格納される（ステップＳ９２８）。
【００６８】
最後に、レジスタＸＭＭ０の内容が変数ｖのメモリ領域にストアされる（ステップＳ９２９）。これにより、変数ｖのメモリ領域に、円錐の体積の計算結果が格納されることになる。
【００６９】
ここで、図１０と図１１とを比較すると、図１１の従来技術ではステップＳ９２５およびステップＳ９２７において定数をメモリからロードするための命令が余分に必要となっていることがわかる。図１０の本発明の実施の形態では、定数を即値として乗算命令（ステップＳ９１６）および除算命令（ステップＳ９１８）に埋め込んでいるため、ロード命令が不要となるとともに、プログラムコードが短くなっている。
【００７０】
このように、本発明の実施の形態によれば、浮動小数点数演算回路１６０において、１６ビット整数７１０を３２ビット浮動小数点数７９０に変換する整数変換器３００と、１６ビット浮動小数点数７２０を３２ビット浮動小数点数７９０に変換する浮動小数点数変換器４００とを設けることにより、即値命令８００における１６ビットの即値８０４を３２ビット浮動小数点数７９０に変換して所望の処理を行うことができる。
【００７１】
より具体的には、第１に、数値データをメモリからロードするロード命令を削減することにより、プログラムのコードサイズを削減することができる。第２に、ロード命令が削除されることにより、メモリからのデータを待つ必要がなくなり、浮動小数点数演算回路の利用効率を向上させることができる。第３に、ロード命令が削除されることにより、メモリアクセス回数が削減され、演算回路とメモリとの間のバスの利用効率も向上させることができる。第４に、本来３２ビットを要する浮動小数点数が１６ビットの即値として命令中に埋め込まれることにより、メモリ利用効率も向上させることができる。第５に、即値を利用することにより、定数を記憶しておくためのレジスタが不要になることから、レジスタの利用効率も向上させることができる。
【００７２】
なお、本発明の実施の形態では、演算器１４０として２入力演算器を想定して説明したが、本発明はこれに限られず、例えば３入力演算器であってもよい。また、本発明の実施の形態では、演算器１４０の一つの入力に変換回路１３０を設けているが、これは複数の入力に設けるようにしてもよい。
【００７３】
また、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
【００７４】
すなわち、請求項１において、浮動小数点数演算器は例えば演算器１４０に対応する。また、変換回路は例えば変換回路１３０に対応する。
【００７５】
また、請求項２または７において、整数変換器は例えば整数変換器３００に対応する。
【００７６】
また、請求項３または８において、浮動小数点数変換器は例えば浮動小数点数変換器４００に対応する。
【００７７】
また、請求項４または９において、整数変換器は例えば整数変換器３００に対応する。また、浮動小数点数変換器は例えば浮動小数点数変換器４００に対応する。また、変換セレクタは例えばセレクタ１３５に対応する。
【００７８】
また、請求項５または１０において、演算セレクタは例えばセレクタ１５０に対応する。
【００７９】
また、請求項６、１１、１２、１３または１４において、命令デコーダは例えば命令デコーダ１２０に対応する。また、変換回路は例えば変換回路１３０に対応する。また、浮動小数点数演算器は例えば演算器１４０に対応する。また、レジスタは例えばレジスタファイル１７０に対応する。
【００８０】
また、請求項１５または１６において、命令デコーダは例えば命令デコーダ１２０に対応する。また、変換回路は例えば変換回路１３０に対応する。また、浮動小数点数演算器は例えば演算器１４０に対応する。
【産業上の利用可能性】
【００８１】
本発明の活用例として、例えば浮動小数点数演算回路または浮動小数点数演算命令を備えるプロセッサにおいて本発明を適用することができる。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施の形態におけるプロセッサ１００の一構成例を示す図である。
【図２】本発明の実施の形態における即値命令の命令フォーマットを示す図である。
【図３】本発明の実施の形態における１６ビット浮動小数点数の形式例を示す図である。
【図４】本発明の実施の形態における１６ビット浮動小数点数の指数の意味を示す図である。
【図５】本発明の実施の形態における整数変換器３００の構成例を示す図である。
【図６】本発明の実施の形態における整数変換器３００の構成例の細部を示す図である。
【図７】本発明の実施の形態における整数変換器３００の構成例の他の細部を示す図である。
【図８】本発明の実施の形態における丸めビット付加回路３５０による丸めビット付加の一例を示す図である。
【図９】本発明の実施の形態における浮動小数点数変換器４００の構成例を示す図である。
【図１０】本発明の実施の形態におけるプログラムコード列の一例を示す図である。
【図１１】従来技術におけるプログラムコード列の一例を示す図である。
【符号の説明】
【００８３】
１００  プロセッサ
１１０  ロードストアユニット
１２０  命令デコーダ
１３０  変換回路
１３５  セレクタ
１４０  演算器
１５０  セレクタ
１６０  浮動小数点数演算回路
１７０  レジスタファイル
１９０  制御ユニット
２００  メモリ
２１０  バス
３００  整数変換器
３１０  符号判定回路
３２０  絶対値化回路
３２１  符号反転器
３２２  セレクタ
３２３  ビット拡張器
３３０  正規化回路
３３１  計数器
３３２  シフタ
３４０  指数算出回路
３４１  符号反転器
３４２、３４３  加算器
３５０  丸めビット付加回路
３６０  丸め回路
３６１、３６２  加算器
３７０  桁上がり補正回路
３７１  加算器
３７２、３７４  セレクタ
３７３  シフタ
３８０  ビット切捨て回路
４００  浮動小数点数変換器
４１０  指数変換回路
４１１、４１２  加算器
４１３  セレクタ
４２０  仮数変換回路
４２３  セレクタ
【図１】
2006154979.tif 000003
【図２】
2006154979.tif 000004
【図３】
2006154979.tif 000005
【図４】
2006154979.tif 000006
【図５】
2006154979.tif 000007
【図６】
2006154979.tif 000008
【図７】
2006154979.tif 000009
【図８】
2006154979.tif 000010
【図９】
2006154979.tif 000011
【図１０】
2006154979.tif 000012
【図１１】
2006154979.tif 000013