説明

オーバーフロー検出方法、オーバーフロー検出装置及びオーバーフロー検出プログラム

【課題】 整数加算演算等において、少ないサイクルでオーバーフローを検出する。
【解決手段】 前記第1符号と前記第2符号との論理和を求めるステップと、前記第1符号と前記第2符号の論理積を求めるステップと、前記論理和の値が0であるならば第1予測フラグをONにするステップと、前記論理積の値が1であるならば第2予測フラグをONにするステップと、前記第1予測フラグがONであり、且つ、前記第1データと前記第2データの加算結果の符号が1である場合、又は、前記第2予測フラグがONであり、且つ、前記加算結果の符号が0である場合には、オーバーフローがあると判断するステップを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算結果にオーバーフローが発生しているか否かを検出するためのオーバーフロー検出方法、オーバーフロー検出装置及びオーバーフロー検出プログラムに関し、特に、整数演算の結果にオーバーフローが発生しているか否かを検出するためのオーバーフロー検出方法、オーバーフロー検出装置及びオーバーフロー検出プログラムに関する。
【背景技術】
【0002】
コンピュータ等においては、整数演算が行われるが、整数演算の結果オーバーフローが発生することがある。オーバーフローが発生した場合には、演算結果が正しくないため、オーバーフローを検出する必要がある。
【0003】
図1は、整数演算(特に、加算又は減算)の結果のオーバーフローを検出するための原理図である。
【0004】
図1を参照すると、符号Sから上位桁へのキャリー(「符号ビットからの桁上がり」)と演算結果より決まる符号S(「符号ビットへの桁上がり」)とが一致するか否かを見て、両者が一致しない場合に、オーバーフローが発生していると判断する。
【0005】
図2は、オーバーフローの検出を複数命令同時実行可能なCPUにより行った場合のオーバーフロー検出の方法を示すフローチャートである。
【0006】
図2を参照すると、サイクル1では、符号付きデータ1と符号付きデータ2を用意し、サイクル2では、データ1とデータ2の加算を行い、データ1とデータ2の符号ビットをマスクして、データ3とデータ4を作成し、サイクル3では、データ1とデータ2の加算の結果、「符号ビットからの桁上がり」を取り出して保持し、データ3とデータ4の加算を行い、サイクル4では、データ3とデータ4の加算の結果、「符号ビットへの桁上がり」を取り出して保持し、サイクル5では、「符号ビットからの桁上がり」と「符号ビットへの桁上がり」が等しくなければ、オーバーフローを検出する。なお、この処理において、加算を減算に置き換えても良い。
【0007】
特許文献1には、指数部中間値と有限最大値とを比較し、その結果によりオーバーフローの有無を検出する発明が記載されている。
【特許文献1】特開平6−250848号公報
【発明の開示】
【発明が解決しようとする課題】
【0008】
オーバーフローの検出をハードウエアで実施した場合、演算と並行して桁上がりの算出を行っていたため3サイクルで実現できたのだが、これをファームウエアやソフトウエアで実施した場合、図2のように演算後の結果によりオーバーフローの検出を行うため、5サイクルを要するという問題があった。よって加減算命令は使用頻度が高いため、これによりプログラムの処理性能が悪化してしまうという問題があった。
【0009】
そこで、本発明は、少ないサイクルでオーバーフローを検出することを可能とするオーバーフロー検出方法、オーバーフロー検出装置及びオーバーフロー検出プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明によれば、第1符号付き第1データの前記第1符号と第2符号付き第2データの前記第2符号との論理的な組合せ値を求めるステップと、前記第1データと前記第2データの演算結果の符号と前記組合せ値とを基に、前記演算結果にオーバーフローがあるか否かを判断するステップと、を備えることを特徴とするオーバーフロー検出方法が提供される。
【0011】
上記のオーバーフロー検出方法において、前記第1符号と前記第2符号との論理和を求めるステップと、前記第1符号と前記第2符号の論理積を求めるステップと、前記論理和の値が0であるならば第1予測フラグをONにするステップと、前記論理積の値が1であるならば第2予測フラグをONにするステップと、を備えるようにしてもよい。
【0012】
上記のオーバーフロー検出方法において、前記第1予測フラグがONであり、且つ、前記第1データと前記第2データの加算結果の符号が1である場合、又は、前記第2予測フラグがONであり、且つ、前記加算結果の符号が0である場合には、オーバーフローがあると判断するステップと、を備えるようにしてもよい。
【0013】
上記のオーバーフロー検出方法において、前記第1予測フラグがOFFであり、且つ、前記第2予測フラグがOFFである場合、オーバーフローの発生があり得ないと判断するステップを更に備えるようにしてもよい。
【0014】
上記のオーバーフロー検出方法において、前記第1符号と前記第2符号との論理和を求めるステップと、前記第1符号と前記第2符号の論理積を求めるステップと、を備えるようにしてもよい。
【0015】
上記のオーバーフロー検出方法において、前記論理和の値が0であり、且つ、前記第1データと前記第2データの加算結果の符号が1である場合、又は、前記論理積の値が1であり、且つ、前記加算結果の符号が0である場合には、オーバーフローがあると判断するステップと、を備えるようにしてもよい。
【0016】
上記のオーバーフロー検出方法において、前記論理和の値が1であり、且つ前記論理積の値が0である場合、オーバーフローの発生があり得ないと判断するステップを更に備えるようにしてもよい。
【0017】
上記のオーバーフロー検出方法において、前記第1符号と前記第2符号の反転値との論理和を求めるステップと、前記第1符号と前記第2符号の反転値の論理積を求めるステップと、前記論理和の値が0であるならば第1予測フラグをONにするステップと、前記論理積の値が1であるならば第2予測フラグをONにするステップと、を備えるようにしてもよい。
【0018】
上記のオーバーフロー検出方法において、前記第1予測フラグがONであり、且つ、前記第1データと前記第2データの減算結果の符号が1である場合、又は、前記第2予測フラグがONであり、且つ、前記減算結果の符号が0である場合には、オーバーフローがあると判断するステップと、を備えるようにしてもよい。
【0019】
上記のオーバーフロー検出方法において、前記第1予測フラグがOFFであり、且つ、前記第2予測フラグがOFFである場合、オーバーフローの発生があり得ないと判断するステップを更に備えるようにしてもよい。
【0020】
上記のオーバーフロー検出方法において、前記第1符号と前記第2符号の反転値との論理和を求めるステップと、前記第1符号と前記第2符号の反転値の論理積を求めるステップと、を備えるようにしてもよい。
【0021】
上記のオーバーフロー検出方法において、前記論理和の値が0であり、且つ、前記第1データと前記第2データの減算結果の符号が1である場合、又は、前記論理積の値が1であり、且つ、前記減算結果の符号が0である場合には、オーバーフローがあると判断するステップと、を備えるようにしてもよい。
【0022】
上記のオーバーフロー検出方法において、前記論理和の値が1であり、且つ前記論理積の値が0である場合、オーバーフローの発生があり得ないと判断するステップを更に備えるようにしてもよい。
【発明の効果】
【0023】
本発明によれば、第1符号付き第1データの前記第1符号と第2符号付き第2データの前記第2符号との論理的な組合せ値を求めるステップと、前記第1データと前記第2データの演算結果の符号と前記組合せ値とを基に、前記演算結果にオーバーフローがあるか否かを判断するステップとを備えるので、オーバーフローをあらかじめ予測することにより検出を高速化し、演算時間の短縮を図ることができる。
【発明を実施するための最良の形態】
【0024】
以下、図面を参照して本発明を実施するための最良の形態について詳細に説明する。
【0025】
[実施形態1]
まず、本発明の原理について説明すると、データ1とデータ2が共に正の数である場合、又は、データ1とデータ2が共に負の数である場合にのみ加算によりオーバーフローが発生する可能性があり、他方、データ1とデータ2のうちの一方が正の数であり、他方が負の数である場合には、加算によりオーバーフローが発生する可能性はない。
【0026】
データ1とデータ2が共に正の数である場合には、符号1と符号2は共に0であり、従って、「符号ビットからの桁上がり」は常に発生しない。従って、この場合には、「符号ビットへの桁上がり」が発生した場合に、オーバーフローが発生することとなる。
【0027】
また、データ1とデータ2が共に負の数である場合には、符号1と符号2は共に1であり、従って、「符号ビットからの桁上がり」は常に発生する。従って、この場合には、「符号ビットへの桁上がり」が発生しない場合に、オーバーフローが発生することとなる。
【0028】
この原理に従ったファームウェア又はソフトウェアによる処理を図3に示す。これは、例えば、アッセンブラにより作成されたプログラムを実行することにより実現される。
【0029】
図3を参照すると、サイクル1では、符号付きデータ1と符号付きデータ2を用意する。サイクル2では、データ1とデータ2の加算を行い、符号1と符号2の論理和を算出し、符号1と符号2の論理積を算出する。サイクル3では、論理和の値が0ならば、予測フラグ1をONにして、論理積の値が1ならば、予測フラグ2をONにする。サイクル4では、予測フラグ1がONであり、且つ、加算結果の符号(「符号ビットへの桁上がり」)が1ならば、オーバーフローを検出し、予測フラグ2がONであり、且つ、加算結果の符号(「符号ビットへの桁上がり」)が0ならば、オーバーフローを検出する。
【0030】
また、サイクル3を行わずに、サイクル4において、論理和が0であり、且つ、加算結果の符号(「符号ビットへの桁上がり」)が1ならば、オーバーフローを検出し、論理積が1であり、且つ、加算結果の符号(「符号ビットへの桁上がり」)が0ならば、オーバーフローを検出するようにしてもよい。
【0031】
予測フラグ1と予測フラグ2が共にOFFである場合には、直ちに、加算によるオーバーフローの発生はありえないと判断しても良い。又は、論理和が1であり、且つ、論理積が0である場合には、直ちに、加算によるオーバーフローの発生はありえないと判断しても良い。
【0032】
図4は、上記の方法をハードウェアを用いて行う場合のオーバーフロー検出装置の構成を示す。
【0033】
図3と図4を参照すると、サイクル2の加算は、加算器101が行う。サイクル2の論理和の算出は、論理和ゲート103が行う。サイクル2の論理積の算出は、論理積ゲート105が行う。
【0034】
サイクル3の予測フラグ1の設定は、予測フラグ1設定部107が行う。予測フラグ1設定部107は、具体的には、反転ゲートを備える。サイクル3の予測フラグ2の設定は、予測フラグ2設定部109が行う。予測フラグ2設定部109は、非反転ゲートを備える。
【0035】
サイクル4の1つめのオーバーフローの検出は、論理積ゲート111が行う。サイクル4の2つめのオーバーフローの検出は、反転ゲート113と論理積ゲート115が行う。2つのオーバーフロー検出フラグを1つにまとめることは論理和ゲート117が行う。
【0036】
オーバーフローがあり得ないことを示すオーバーフロー不検出予測信号は、反転ゲート119、121及び論理積ゲート123が行う。
【0037】
[実施形態2]
まず、本発明の原理について説明すると、データ1とデータ2のうちの一方が正の数であり、他方が負の数である場合、データ1からデータ2を引く減算によりオーバーフローが発生する可能性があり、他方、データ1とデータ2が共に正の数である場合、又は、データ1とデータ2が共に負の数である場合には、データ1からデータ2を引く減算によりオーバーフローが発生する可能性はない。
【0038】
データ1が正の数であり、データ2が負の数である場合には、”符号1”と”符号2の反転値”は共に0であり、従って、「符号ビットからの桁上がり」は常に発生しない。従って、この場合には、「符号ビットへの桁上がり」が発生した場合に、オーバーフローが発生することとなる。
【0039】
また、データ1が負の数でありデータ2が正の数である場合には、”符号1”と”符号2の反転値”は共に1であり、従って、「符号ビットからの桁上がり」は常に発生する。従って、この場合には、「符号ビットへの桁上がり」が発生しない場合に、オーバーフローが発生することとなる。
【0040】
この原理に従ったファームウェア又はソフトウェアによる処理を図5に示す。これは、例えば、アッセンブラにより作成されたプログラムを実行することにより実現される。
【0041】
図5を参照すると、サイクル1では、符号付きデータ1と符号付きデータ2を用意する。サイクル2では、データ1からデータ2を引く減算を行い、”符号1”と”符号2の反転値”の論理和を算出し、”符号1”と”符号2の反転値”の論理積を算出する。サイクル3では、論理和の値が0ならば、予測フラグ1をONにして、論理積の値が1ならば、予測フラグをONにする。サイクル4では、予測フラグ1がONであり、且つ、減算結果の符号(「符号ビットへの桁上がり」)が1ならば、オーバーフローを検出し、予測フラグ2がONであり、且つ、減算結果の符号(「符号ビットへの桁上がり」)が0ならば、オーバーフローを検出する。
【0042】
また、サイクル3を行わずに、サイクル4において、論理和が0であり、且つ、減算結果の符号(「符号ビットへの桁上がり」)が1ならば、オーバーフローを検出し、論理積が1であり、且つ、減算結果の符号(「符号ビットへの桁上がり」)が0ならば、オーバーフローを検出するようにしてもよい。
【0043】
予測フラグ1と予測フラグ2が共にOFFである場合には、直ちに、減算によるオーバーフローの発生はありえないと判断しても良い。又は、論理和が1であり、且つ、論理積が0である場合には、直ちに、減算によるオーバーフローの発生はありえないと判断しても良い。
【0044】
図6は、上記の方法をハードウェアを用いて行う場合のオーバーフロー検出装置の構成を示す。
【0045】
図5と図6を参照すると、サイクル2の減算は、加算器101が行う。サイクル2の論理和の算出は、反転ゲート125と論理和ゲート103が行う。サイクル2の論理積の算出は、反転ゲート125と論理積ゲート105が行う。
【0046】
サイクル3の予測フラグ1の設定は、予測フラグ1設定部107が行う。予測フラグ1設定部107は、具体的には、反転ゲートを備える。サイクル3の予測フラグ2の設定は、予測フラグ2設定部109が行う。予測フラグ2設定部109は、非反転ゲートを備える。
【0047】
サイクル4の1つめのオーバーフローの検出は、論理積ゲート111が行う。サイクル4の2つめのオーバーフローの検出は、反転ゲート113と論理積ゲート115が行う。2つのオーバーフロー検出フラグを1つにまとめることは論理和ゲート117が行う。
【0048】
オーバーフローがあり得ないことを示すオーバーフロー不検出予測信号は、反転ゲート119、121及び論理積ゲート123が行う。
【産業上の利用可能性】
【0049】
本発明は、コンピュータ等において整数演算のオーバーフローを検出するために利用することができる。
【図面の簡単な説明】
【0050】
【図1】オーバーフロー検出の原理を説明するための図である。
【図2】従来例によるオーバーフロー検出方法を示すフローチャートである。
【図3】本発明の実施形態1によるオーバーフロー検出方法を示すフローチャートである。
【図4】図3に示すオーバーフロー検出方法をハードウェアにより行う場合のオーバーフロー検出装置の構成を示すブロック図である。
【図5】本発明の実施形態2によるオーバーフロー検出方法を示すフローチャートである。
【図6】図5に示すオーバーフロー検出方法をハードウェアにより行う場合のオーバーフロー検出装置の構成を示すブロック図である。
【符号の説明】
【0051】
101 加算器
103 論理和ゲート
105 論理積ゲート
107 予測フラグ1設定部
109 予測フラグ2設定部
111 論理積ゲート
113 反転ゲート
115 論理積ゲート
117 論理和ゲート
119 反転ゲート
121 反転ゲート
123 論理積ゲート
125 反転ゲート

【特許請求の範囲】
【請求項1】
第1符号付き第1データの前記第1符号と第2符号付き第2データの前記第2符号との論理的な組合せ値を求めるステップと、
前記第1データと前記第2データの演算結果の符号と前記組合せ値とを基に、前記演算結果にオーバーフローがあるか否かを判断するステップと、
を備えることを特徴とするオーバーフロー検出方法。
【請求項2】
請求項1に記載のオーバーフロー検出方法において、
前記第1符号と前記第2符号との論理和を求めるステップと、
前記第1符号と前記第2符号の論理積を求めるステップと、
前記論理和の値が0であるならば第1予測フラグをONにするステップと、
前記論理積の値が1であるならば第2予測フラグをONにするステップと、
を備えることを特徴とするオーバーフロー検出方法。
【請求項3】
請求項2に記載のオーバーフロー検出方法において、
前記第1予測フラグがONであり、且つ、前記第1データと前記第2データの加算結果の符号が1である場合、又は、前記第2予測フラグがONであり、且つ、前記加算結果の符号が0である場合には、オーバーフローがあると判断するステップと、
を備えることを特徴とするオーバーフロー検出方法。
【請求項4】
請求項2に記載のオーバーフロー検出方法において、
前記第1予測フラグがOFFであり、且つ、前記第2予測フラグがOFFである場合、オーバーフローの発生があり得ないと判断するステップを更に備えることを特徴とするオーバーフロー検出方法。
【請求項5】
請求項1に記載のオーバーフロー検出方法において、
前記第1符号と前記第2符号との論理和を求めるステップと、
前記第1符号と前記第2符号の論理積を求めるステップと、
を備えることを特徴とするオーバーフロー検出方法。
【請求項6】
請求項5に記載のオーバーフロー検出方法において、
前記論理和の値が0であり、且つ、前記第1データと前記第2データの加算結果の符号が1である場合、又は、前記論理積の値が1であり、且つ、前記加算結果の符号が0である場合には、オーバーフローがあると判断するステップと、
を備えることを特徴とするオーバーフロー検出方法。
【請求項7】
請求項5に記載のオーバーフロー検出方法において、
前記論理和の値が1であり、且つ前記論理積の値が0である場合、オーバーフローの発生があり得ないと判断するステップを更に備えることを特徴とするオーバーフロー検出方法。
【請求項8】
請求項1に記載のオーバーフロー検出方法において、
前記第1符号と前記第2符号の反転値との論理和を求めるステップと、
前記第1符号と前記第2符号の反転値の論理積を求めるステップと、
前記論理和の値が0であるならば第1予測フラグをONにするステップと、
前記論理積の値が1であるならば第2予測フラグをONにするステップと、
を備えることを特徴とするオーバーフロー検出方法。
【請求項9】
請求項8に記載のオーバーフロー検出方法において、
前記第1予測フラグがONであり、且つ、前記第1データと前記第2データの減算結果の符号が1である場合、又は、前記第2予測フラグがONであり、且つ、前記減算結果の符号が0である場合には、オーバーフローがあると判断するステップと、
を備えることを特徴とするオーバーフロー検出方法。
【請求項10】
請求項8に記載のオーバーフロー検出方法において、
前記第1予測フラグがOFFであり、且つ、前記第2予測フラグがOFFである場合、オーバーフローの発生があり得ないと判断するステップを更に備えることを特徴とするオーバーフロー検出方法。
【請求項11】
請求項1に記載のオーバーフロー検出方法において、
前記第1符号と前記第2符号の反転値との論理和を求めるステップと、
前記第1符号と前記第2符号の反転値の論理積を求めるステップと、
を備えることを特徴とするオーバーフロー検出方法。
【請求項12】
請求項11に記載のオーバーフロー検出方法において、
前記論理和の値が0であり、且つ、前記第1データと前記第2データの減算結果の符号が1である場合、又は、前記論理積の値が1であり、且つ、前記減算結果の符号が0である場合には、オーバーフローがあると判断するステップと、
を備えることを特徴とするオーバーフロー検出方法。
【請求項13】
請求項11に記載のオーバーフロー検出方法において、
前記論理和の値が1であり、且つ前記論理積の値が0である場合、オーバーフローの発生があり得ないと判断するステップを更に備えることを特徴とするオーバーフロー検出方法。
【請求項14】
第1符号付き第1データの前記第1符号と第2符号付き第2データの前記第2符号との論理的な組合せ値を求める手段と、
前記第1データと前記第2データの演算結果の符号と前記組合せ値とを基に、前記演算結果にオーバーフローがあるか否かを判断する手段と、
を備えることを特徴とするオーバーフロー検出装置。
【請求項15】
請求項14に記載のオーバーフロー検出装置において、
前記第1符号と前記第2符号との論理和を求める手段と、
前記第1符号と前記第2符号の論理積を求める手段と、
前記論理和の値が0であるならば第1予測フラグをONにする手段と、
前記論理積の値が1であるならば第2予測フラグをONにする手段と、
を備えることを特徴とするオーバーフロー検出装置。
【請求項16】
請求項15に記載のオーバーフロー検出装置において、
前記第1予測フラグがONであり、且つ、前記第1データと前記第2データの加算結果の符号が1である場合、又は、前記第2予測フラグがONであり、且つ、前記加算結果の符号が0である場合には、オーバーフローがあると判断する手段と、
を備えることを特徴とするオーバーフロー検出装置。
【請求項17】
請求項15に記載のオーバーフロー検出装置において、
前記第1予測フラグがOFFであり、且つ、前記第2予測フラグがOFFである場合、オーバーフローの発生があり得ないと判断する手段を更に備えることを特徴とするオーバーフロー検出装置。
【請求項18】
請求項14に記載のオーバーフロー検出装置において、
前記第1符号と前記第2符号との論理和を求める手段と、
前記第1符号と前記第2符号の論理積を求める手段と、
を備えることを特徴とするオーバーフロー検出装置。
【請求項19】
請求項18に記載のオーバーフロー検出装置において、
前記論理和の値が0であり、且つ、前記第1データと前記第2データの加算結果の符号が1である場合、又は、前記論理積の値が1であり、且つ、前記加算結果の符号が0である場合には、オーバーフローがあると判断する手段と、
を備えることを特徴とするオーバーフロー検出装置。
【請求項20】
請求項18に記載のオーバーフロー検出装置において、
前記論理和の値が1であり、且つ前記論理積の値が0である場合、オーバーフローの発生があり得ないと判断する手段を更に備えることを特徴とするオーバーフロー検出装置。
【請求項21】
請求項14に記載のオーバーフロー検出装置において、
前記第1符号と前記第2符号の反転値との論理和を求める手段と、
前記第1符号と前記第2符号の反転値の論理積を求める手段と、
前記論理和の値が0であるならば第1予測フラグをONにする手段と、
前記論理積の値が1であるならば第2予測フラグをONにする手段と、
を備えることを特徴とするオーバーフロー検出装置。
【請求項22】
請求項21に記載のオーバーフロー検出装置において、
前記第1予測フラグがONであり、且つ、前記第1データと前記第2データの減算結果の符号が1である場合、又は、前記第2予測フラグがONであり、且つ、前記減算結果の符号が0である場合には、オーバーフローがあると判断する手段と、
を備えることを特徴とするオーバーフロー検出装置。
【請求項23】
請求項21に記載のオーバーフロー検出装置において、
前記第1予測フラグがOFFであり、且つ、前記第2予測フラグがOFFである場合、オーバーフローの発生があり得ないと判断する手段を更に備えることを特徴とするオーバーフロー検出装置。
【請求項24】
請求項14に記載のオーバーフロー検出装置において、
前記第1符号と前記第2符号の反転値との論理和を求める手段と、
前記第1符号と前記第2符号の反転値の論理積を求める手段と、
を備えることを特徴とするオーバーフロー検出装置。
【請求項25】
請求項24に記載のオーバーフロー検出装置において、
前記論理和の値が0であり、且つ、前記第1データと前記第2データの減算結果の符号が1である場合、又は、前記論理積の値が1であり、且つ、前記減算結果の符号が0である場合には、オーバーフローがあると判断する手段と、
を備えることを特徴とするオーバーフロー検出装置。
【請求項26】
請求項24に記載のオーバーフロー検出装置において、
前記論理和の値が1であり、且つ前記論理積の値が0である場合、オーバーフローの発生があり得ないと判断する手段を更に備えることを特徴とするオーバーフロー検出装置。
【請求項27】
コンピュータに請求項1乃至13の何れか1項に記載のオーバーフロー検出方法を行わせるためのオーバーフロー検出プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2006−277019(P2006−277019A)
【公開日】平成18年10月12日(2006.10.12)
【国際特許分類】
【出願番号】特願2005−91653(P2005−91653)
【出願日】平成17年3月28日(2005.3.28)
【出願人】(000168285)エヌイーシーコンピュータテクノ株式会社 (572)
【Fターム(参考)】