(57)【特許請求の範囲】
【請求項１】
ハードウェア論理素子により実施されるコンピュータ内の方法であって、
（ａ）算術論理演算装置において第１のｎビット符号なし２進数オペランドと第２のｎビット符号付き２進数オペランドとについて第１の算術演算を行ってｎビット符号なし２進数結果を生成し、
（ｂ）前記ｎビット符号なし２進数結果に正のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｃ）前記ステップ（ｂ）でのチェックにより正のオーバーフローが存在すると判定された場合に、前記ｎビット符号なし２進数結果に値２ｎ−１を割り当て、
（ｄ）前記ｎビット符号なし２進数結果に負のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｅ）前記ステップ（ｄ）でのチェックにより負のオーバーフローが存在すると判定された場合に、前記ｎビット符号なし２進数結果に値０を割り当てる、
という各ステップを含むことからなる、方法。
【請求項２】
前記ステップ（ｂ）が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが１に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット符号なし２進数結果の最上位ビットが０に等しい場合に正のオーバーフローが存在すると判定することを含み、
前記ステップ（ｄ）が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが１に等しく、前記ｎビット符号なし２進数結果の最上位ビットが１に等しい場合に負のオーバーフローが存在すると判定することを含む、
請求項１の方法。
【請求項３】
（ｆ）前記算術論理演算装置において２つのｎビット符号付き２進数オペランドについて第２の算術演算を行ってｎビット符号付き２進数結果を生成し、
（ｇ）前記ｎビット符号付き２進数結果に正のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｈ）前記ステップ（ｇ）でのチェックにより正のオーバーフローが存在すると判定された場合に、前記ｎビット符号付き２進数結果に値２ｎ−１−１を割り当て、
（ｉ）前記ｎビット符号付き２進数結果に負のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｊ）前記ステップ（ｉ）でのチェックにより負のオーバーフローが存在すると判定された場合に、前記ｎビット符号付き２進数結果に値−２ｎ−１を割り当てる、
という各ステップを更に含む、請求項１の方法。
【請求項４】
（ｋ）前記第２の算術演算が算術論理演算装置において同時に行われる複数の並列演算の内の１つとなるように、前記ステップ（ｆ）と並列に追加の算術演算を行う、というステップを更に含む、請求項３の方法。
【請求項５】
前記ステップ（ｂ）が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが１に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット符号なし２進数結果の最上位ビットが０に等しい場合に正のオーバーフローが存在すると判定することを含み、
前記ステップ（ｄ）が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが１に等しく、前記ｎビット符号なし２進数結果の最上位ビットが１に等しい場合に負のオーバーフローが存在すると判定することを含み、
前記ステップ（ｇ）が、前記２つのｎビット符号付き２進数オペランドの最上位ビットが共に０に等しく、前記ｎビット符号付き２進数結果の最上位ビットが１に等しい場合に正のオーバーフローが存在すると判定することを含み、
前記ステップ（ｉ）が、前記２つのｎビット符号付き２進数オペランドの最上位ビットが共に１に等しく、前記ｎビット符号付き２進数結果の最上位ビットが０に等しい場合に負のオーバーフローが存在すると判定することを含む、
請求項３の方法。
【請求項６】
（ｋ）前記算術論理演算装置において２つのｎビット符号なしオペランドについて減算演算を行って（ｎ＋１）ビット符号付き２進数中間結果を生成し、
（ｌ）前記（ｎ＋１）ビット符号付き２進数中間結果が負であるか否かを判定するためのチェックを行い、
（ｍ）そのステップ（ｌ）でのチェックにより前記（ｎ＋１）ビット符号付き２進数中間結果が負であると判定された場合に、その（ｎ＋１）ビット符号付き２進数中間結果について補数演算を行ってｎビット符号なし２進数最終結果を生成する、
という各ステップを更に含む、請求項３の方法。
【請求項７】
（ｎ）前記減算演算が算術論理演算装置において同時に行われる複数の並列演算の内の１つとなるように、前記ステップ（ｋ）と並列に追加の算術演算を行う、
というステップを更に含む、請求項６の方法。
【請求項８】
（ｋ）前記算術論理演算装置においてｎビット２の補数加算器を用いて２つのｎビット２進数オペランドについて第３の算術演算を行って、オーバーフロー演算が行われることのないｎビット２進数結果を生成する、
というステップを更に含む、請求項３の方法。
【請求項９】
前記ステップ（ａ）において、前記第１の算術演算がｎビット２の補数加算器により行われる演算である、請求項１の方法。
【請求項１０】
（ｆ）ｎビット２進数オペランドを前記ステップ（ａ）を行う前にシフトする、
というステップを更に含み、
前記ステップ（ｂ）が、前記ステップ（ｆ）を行った結果として正のオーバーフローが生じるか否かを判定するためのチェックを行うことを含む、
請求項１または９の方法。
【請求項１１】
（ｆ）前記第１の算術演算が、算術論理演算装置において同時に行われる複数の並列演算の内の１つとなるように前記ステップ（ａ）と並列に追加の算術演算を行う、
というステップを更に含む、請求項１の方法。
【請求項１２】
第１のｎビット符号付き２進数オペランドと第２のｎビット符号付き２進数オペランドとについて第１の算術演算を行ってｎビット正符号付き２進数結果を生成するための算術演算手段と、
前記算術演算手段に結合され、前記第１のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット正符号付き２進数結果の最上位ビットが１に等しい場合に前記ｎビット正符号付き２進数結果に値２ｎ−１−１を割り当てるための正オーバーフロー手段と、
前記算術演算手段に結合され、前記ｎビット正符号付き２進数結果の最上位ビットが１に等しく、前記第１のｎビット符号付き２進数オペランドの最上位ビットと前記第２のｎビット符号付き２進数オペランドの最上位ビットとのどちらか１つが１に等しい場合に前記ｎビット正符号付き２進数結果に値０を割り当て、前記第１のｎビット符号付き２進数オペランドの最上位ビットと前記第２のｎビット符号付き２進数オペランドの最上位ビットとが共に１に等しい場合に前記ｎビット正符号付き２進数結果に値０を割り当てるための負オーバーフロー手段とを備える、計算システム。
【請求項１３】
ハードウェア論理素子により実施されるコンピュータ内の方法であって、
（ａ）算術論理演算装置において第１のｎビット符号付き２進数オペランドと第２のｎビット符号付き２進数オペランドとについて第１の算術演算を行ってｎビット正符号付き２進数結果を生成し、
（ｂ）  前記第１のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット正符号付き２進数結果の最上位ビットが１に等しい場合に、前記ｎビット正符号付き２進数結果に正のオーバーフローが存在すると判定し、
（ｃ）前記ステップ（ｂ）でのチェックにより正のオーバーフローが存在すると判定された場合に、前記ｎビット正符号付き２進数結果に値２ｎ−１−１を割り当て、
（ｄ）  前記ｎビット正符号付き２進数結果の最上位ビットが１に等しく、前記第１のｎビット符号付き２進数オペランドの最上位ビットと前記第２のｎビット符号付き２進数オペランドの最上位ビットとのどちらか１つが１に等しい場合に、前記ｎビット正符号付き２進数結果に負のオーバーフローが存在すると判定し、前記第１のｎビット符号付き２進数オペランドの最上位ビットと前記第２のｎビット符号付き２進数オペランドの最上位ビットとが共に１に等しい場合に負のオーバーフローが存在すると判定し、
（ｅ）前記ステップ（ｄ）でのチェックにより負のオーバーフローが存在すると判定された場合に、前記ｎビット正符号付き２進数結果に値０を割り当てる、
という各ステップを含む、方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、算術演算の結果として生じる正および負のオーバーフローの取り扱いをハードウェアにより実施することに関する。
【０００２】
【従来の技術】
計算機システムで算術演算を行う際には、正のオーバーフローまたは負のオーバーフローが生じる可能性がある。例えば、算術論理演算装置（ＡＬＵ）により２つのｎビット整数が加算される場合には、ｎ＋１ビットの結果、即ち、ｎビットの和と１ビットの桁上げ出力とが生成される。符号なし加算を用いた演算の場合、桁上げ出力がゼロのときには、その和が結果全体を与えるものとなる。しかし、桁上げ出力が１のときには「オーバーフロー」が生じる。これは、その結果を表現するにはｎビットではなくｎ＋１ビットが必要となるからである。また、符号付き数の場合には、２つのオペランドが同じ符号を有し、その演算結果が異なる符号を有するときにオーバーフローが生じる。従来、オーバーフローは一般には、ソフトウェア例外ハンドラへのトラップにより取り扱われてきた。
【０００３】
オーバーフローがまれにしか生じないが検出する必要がある場合には、ソフトウェアトラップハンドラを用いるのが許容し得る慣行となっている。しかし、オーバーフローが頻繁に生じる場合には、ソフトウェアトラップを用いたオーバーフローの取り扱いは、システム性能に悪影響を与え得るものとなる。この場合には、ソフトウェアトラップを用いるのではなく、各算術命令の後のコードに別のインラインソフトウェア命令を追加することができる。その追加のソフトウェア命令は、オーバーフローをチェックし、オーバーフローが存在する場合には、演算結果を調整するか、または一層多くのビット有する精度でそのコードを再実行する。
【０００４】
【発明が解決しようとする課題】
オーバーフローが決して起こらない用途では、ソフトウェアトラップ処理をディセーブルにすることができ、この場合には、オーバーフローをチェックするインラインソフトウェアは必要なくなる。しかし、正および／または負のオーバーフローがかなり頻繁である場合には、ソフトウェアトラップまたは追加インラインコードを用いることなく、それらオーバーフローを効率的な態様で取り扱う方法を有していることが望ましい。
【０００５】
【課題を解決するための手段】
本発明の好適な実施例によれば、正および負のオーバーフローを取り扱うコンピュータシステムが提供される。結果を表現するために割り当てられたビットにより表現可能な最大数よりも結果が大きい場合に正のオーバーフローが生じる。また、結果を表現するために割り当てられたビットにより表現可能な最小数よりも結果が小さい場合に負のオーバーフローが生じる。第１の算術演算が、第１のｎビット符号なし２進数オペランドと第２のｎビット符号付き２進数オペランドとについて行われて、ｎビット符号なし２進数結果が生成される。例えば、この算術演算は、２の補数加算器（ｔｗｏ’ｓ  ｃｏｍｐｌｅｍｅｎｔ  ａｄｄｅｒ）により行われる加算である。好適な実施例では、算術論理演算装置内のオーバーフロー検出論理回路が、算術演算の結果として生じる正のオーバーフローまたは負のオーバーフローを検出する。正のオーバーフローが存在する場合には、飽和論理（ｓａｔｕｒａｔｉｏｎ  ｌｏｇｉｃ）が２の補数加算器の出力を値２ｎ−１に置き換える。また、負のオーバーフローが存在する場合には、飽和論理が２の補数加算器の出力を値０に置き換える。
【０００６】
オーバーフロー検出論理回路は、第１のｎビット符号なし２進数オペランドの最上位ビットが１に等しく、第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、ｎビット符号なし２進数結果の最上位ビットが０に等しい場合に、正のオーバーフローが存在すると判定する。また、オーバーフロー検出論理回路は、第１のｎビット符号なし２進数オペランドの最上位ビットが０に等しく、第２のｎビット符号付き２進数オペランドの最上位ビットが１に等しく、ｎビット符号なし２進数結果の最上位ビットが１に等しい場合に、負のオーバーフローが存在すると判定する。
【０００７】
本発明の好適な実施例では、異なる算術演算については異なるオーバーフロー機構が実施されている。例えば、２つのｎビット符号付き２進数オペランドについて第２の算術演算が行われてｎビット符号付き２進数結果が生成される。この場合、算術論理演算装置内のオーバーフロー検出論理回路は、その算術演算の結果として生じる正のオーバーフローまたは負のオーバーフローも検出する。第２の算術演算の結果として生じる正のオーバーフローが存在する場合には、飽和論理が、ｎビット符号付き２進数結果に値２ｎ−１−１を割り当てる。また、第２の算術演算の結果として生じる負のオーバーフローが存在する場合には、飽和論理は、ｎビット符号付き２進数結果に値−２ｎ−１を割り当てる。
【０００８】
オーバーフロー検出論理回路は、２つのｎビット符号付き２進数オペランドの最上位ビットがともに０に等しく、ｎビット符号付き２進数結果の最上位ビットが１に等しいとき、第２の算術演算に正のオーバーフローが存在すると判定する。オーバーフロー検出論理回路はまた、２つのｎビット符号付き２進数オペランドの最上位ビットがともに１に等しく、ｎビット符号付き２進数結果の最上位ビットが０に等しい場合には、第２の算術演算に負のオーバーフローが存在すると判定する。
【０００９】
第３の算術演算は、２つのｎビット符号なしオペランドを用いた減算演算である。オーバーフロー検出論理回路は、（ｎ＋１）ビット符号付き２進数中間結果が負であるか否かを判定する。（ｎ＋１）ビット符号付き２進数中間結果が負の場合には、飽和論理は、（ｎ＋１）ビット符号付き２進数中間結果の２の（または１の）補数演算を行って、最終的なｎビット符号なし結果を生成する。
【００１０】
好適な実施例では、正および負のオーバーフローの様々な取り扱い処理をオーバーライドして（ｏｖｅｒｒｉｄｅ）、オーバーフローにかかわらず２の補数加算器の出力を用いるようにすることができる。
【００１１】
本発明の別の実施例では、第１のｎビット符号付き２進数オペランドと第２のｎビット符号付き２進数オペランドとに関して第１の算術演算が行われて、ｎビット正符号付き２進数結果が生成される。例えば、この算術演算は、２の補数加算器により行われる加算または減算である。代替実施例では、算術論理演算装置内のオーバーフロー検出論理回路が、算術演算の結果として生じる正のオーバーフローまたは負のオーバーフローを検出する。正のオーバーフローが存在する場合には、飽和論理が２の補数加算器の出力を値２ｎ−１−１に置き換える。また、負のオーバーフローが存在する場合には、飽和論理が２の補数加算器の出力を値０に置き換える。
【００１２】
オーバーフロー検出論理回路は、第１のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、ｎビット正符号付き２進数結果の最上位ビットが１に等しい場合に、正のオーバーフローが存在すると判定する。オーバーフロー検出論理回路はまた、ｎビット正符号付き２進数結果の最上位ビットが１に等しく、第１のｎビット符号付き２進数オペランドの最上位ビットと第２のｎビット符号付き２進数オペランドの最上位ビットとの何れか一方が１に等しい場合に、負のオーバーフローが存在すると判定する。
【００１３】
本発明の教示はまた、ｎビットの２の補数加算器により受容される前にプリシフタ（ｐｒｅ−ｓｈｉｆｔｅｒ）がオペランドをシフトさせる場合にも拡張可能なものである。この場合には、オーバーフロー検出論理回路は、ｎビットの２の補数加算器により受容される前に第１のｎビット符号付きまたは符号なし２進数オペランドをプリシフタが左へシフトさせる結果として生じる正または負のオーバーフローを更に検出する。
【００１４】
更に、本発明は、単一の命令に応じて多数の演算を実施するコンピュータシステムで特に良好に働くものである。この場合、第１の算術演算は、１つの算術論理演算装置内で同時に行われる複数の並列演算のうちの１つである。
【００１５】
本発明により、正のオーバーフローまたは負のオーバーフローの発生がまれではないような計算を行うコンピュータシステムの性能を向上させることが可能となる。本発明をハードウェアで実施することにより、ソフトウェアオーバーフロートラップハンドラやインライン命令を用いることなく正および負のオーバーフローを容易に取り扱うことができる。本発明はまた、正および負のオーバーフローの取り扱いに関する融通性に備えた簡単で効果的なハードウェア実施に備えるものである。
【００１６】
【実施例】
図１は、従来の演算処理装置内の演算実行データパスを示す簡略ブロック図である。起こりつつある演算のためのオペランド、および完了した演算の結果は、汎用レジスタ２５内に格納される。演算が行われると、汎用レジスタ２５内の第１のレジスタ中に格納されている第１のオペランドが第１のソースバス２１上に置かれる。その演算にもう１つのオペランドが必要な場合に、汎用レジスタ２５内の第２のレジスタ中に格納されている第２のオペランドが第２のソースバス２２上に置かれる。
【００１７】
この演算を実行した後、その結果が結果バス２３上に置かれて、汎用レジスタ２５内のレジスタにロードされるか、または他の機能ユニットに送られる。演算は、算術論理演算装置（ＡＬＵ）２６またはシフタ２９により行われる。プリシフタ２７および補数演算回路（ｃｏｍｐｌｅｍｅｎｔ  ｃｉｒｃｕｉｔｒｙ）２８は、オペランドがＡＬＵ２６により受容される前にそれらオペランドを変更するのに使用することができる。例えば、減算演算の場合には、補数演算回路２８が使用されて、オペランドのうちの１つについてそのオペランドがＡＬＵ２６内の加算器に送られる前に２の補数演算が行われる。本発明と同様に構成された単一演算処理装置システムのアーキテクチャに関する一般的な背景については、例えば、Ｒｕｂｙ  Ｂ．  Ｌｅｅの「Ｐｒｅｃｉｓｉｏｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ」（ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ，  Ｖｏｌｕｍｅ２２，  Ｎｏ．１，  Ｊａｎｕａｒｙ  １９８９，  ｐｐ．７８〜９１）を参照のこと。
【００１８】
図２は、ＡＬＵ２６により行われる算術演算の結果として生じる正および負のオーバーフローをハードウェアにより取り扱うことを考慮して、演算処理装置内の演算実行データパスを如何に変更することができるかを示すものである。下記のように、オーバーフロー信号２０４を生成するための別の回路がプリシフタ２７に付加され、この回路はまた、オーバーフロー信号２０５を生成するためにＡＬＵ２６に付加される。オーバーフロー信号２０４，２０５は、飽和選択ブロック２０２により処理されて、飽和選択信号２０６が生成される。代替的には、オーバーフロー信号２０４は、ＡＬＵ２６により受容してオーバーフロー信号２０５の生成に使用可能なものである。飽和選択信号２０６に基づいて、飽和論理２０１は、ＡＬＵ２６からのＡＬＵ結果２０７について演算を行ってオーバーフロー修正結果２０８を生成する。
【００１９】
飽和選択ブロック２０２および飽和論理２０１により行われる演算は、飽和算術を用いてオーバーフローを取り扱うものである。飽和算術では、結果は、「ｎ」個のビットに制限される。結果をｎビットで表すことができない場合には、その結果はｎビットで表現される値にクリップされる（ｃｌｉｐ）。
【００２０】
本発明の好適な実施例では、オーバーフローは幾つかの方法の内の１つにより取り扱われる。どの方法をとるかは、実行された命令による選択と現在行われている演算そのものとによって決まる。
【００２１】
第１のオーバーフローオプションは、２つのｎビット符号付き２の補数オペランドについて行われる算術演算に関するものであり、その算術演算は、ｎビット符号付き２の補数結果を生成するものである。最大のｎビット符号付き２の補数は、値２ｎ−１−１を有する。また、最小のｎビット符号付き２の補数は、値−２ｎ−１を有する。この第１のオーバーフローオプションでは、２ｎ−１−１よりも大きい値（正のオーバーフロー）を有する結果に値２ｎ−１−１が割り当てられる。また、−２ｎ−１よりも小さい値（負のオーバーフロー）を有する結果には値−２ｎ−１が割り当てられる。
【００２２】
第２のオーバーフローオプションは、１つのｎビット符号付き２の補数と１つのｎビット符号なし２進数とについて行われる算術演算に関するものであり、この演算は、ｎビット符号なし結果を生成するものである。最大のｎビット符号付き２の補数は、値２ｎ−１−１を有する。最小のｎビット符号付き２の補数は、値−２ｎ−１を有する。最大のｎビット符号なし２進数は、値２ｎ−１を有する。最小のｎビット符号なし２進数は、値０を有する。第２のオーバーフローオプションでは、２ｎ−１よりも大きい値（正のオーバーフロー）を有する結果に値２ｎ−１が割り当てられる。また、０よりも小さい値（負のオーバーフロー）を有する結果には値０が割り当てられる。
【００２３】
第３のオーバーフローオプションは、２つのｎビット符号なし２進数について行われる算術演算に関するものである。最大のｎビット符号なし２進数は値２ｎ−１を有する。最小のｎビット符号なし２進数は値０を有する。第３のオーバーフローオプションでは、モジュール式ラップアラウンド（ｍｏｄｕｌａｒ  ｗｒａｐ−ａｒｏｕｎｄ）算術が実施される。２ｎ−１よりも大きい値（正のオーバーフロー）を有する結果は、ラップアラウンドされて、負のオーバーフローの量に基づき０で始まる値が割り当てられる。例えば、２ｎ−１を１だけオーバーフローした結果には値０が割り当てられ、２ｎ−１を２だけオーバーフローした結果には値１が割り当てられ、２ｎ−１を３だけオーバーフローした結果には値２が割り当てられる、といった具合である。０よりも小さい値（負のオーバーフロー）を有する結果は、ラップアラウンドされて、オーバーフローの量に基づき２ｎ−１で始まる値が割り当てられる。例えば、０を１だけ負にオーバーフローした結果には値２ｎ−１が割り当てられ、０を２だけ負にオーバーフローした結果には値２ｎ−２が割り当てられ、０を３だけ負にオーバーフローした結果には値２ｎ−３が割り当てられる、といった具合である。第３のオーバーフローオプションはまた、ｎビット符号付き２進数についても同様に良好に働くことが当業者には理解されよう。
【００２４】
第４のオーバーフローオプションは、０〜２ｎ−１の範囲内の２つのｎビット符号なし２進数についての減算に関するものである。この減算により、（ｎ＋１）ビットの符号付き２進数が生成され、そのうち、ｎビットは差のためのもの、１ビットは符号のためのものである。しかし、２つのｎビット符号なし２進数の差の絶対値は、０〜２ｎ−１の範囲内のｎビット符号なし数となる。この場合、負のオーバーフローは、結果の絶対値をとることにより取り扱われる。これは、結果が負である場合にはその結果が２の（または１の）補数値に置き換えられる、ということを意味している。２つの符号なし数の減算では、正のオーバーフローは起こり得ない。
【００２５】
第５のオーバーフローオプションは、２つの符号付きオペランドを扱うものであり、０〜２ｎ−１−１の範囲内の正の符号付き結果を生成する。
【００２６】
第１のオーバーフローオプションは、第１のオペランドの最上位ビット（符号ビット）（Ａｎ）と、第２のオペランドの最上位ビット（符号ビット）（Ｂｎ）と、結果の最上位ビット（符号ビット）（Ｃｎ）とを検査することにより実施される。第１のオーバーフローオプションを用いた加算または減算では、各オペランドの符号ビットがともに０に等しく、結果の符号ビットが１に等しい場合に、正のオーバーフローが生じる。これは、次の数１のように表すことができる。
【００２７】
【数１】
（Ａｎ＝Ｂｎ＝０）ＡＮＤ（Ｃｎ＝１）
正のオーバーフローが存在する場合、結果に値２ｎ−１−１が割り当てられる。
【００２８】
同様に、第１のオーバーフローオプションを用いた加算では、各オペランドの符号ビットがともに１に等しく、結果の符号ビットが０に等しい場合に、負のオーバーフローが生じる。これは、次の数２のように表すことができる。
【００２９】
【数２】
（Ａｎ＝Ｂｎ＝１）ＡＮＤ（Ｃｎ＝０）
負のオーバーフローが存在する場合、結果に値−２ｎ−１が割り当てられる。
【００３０】
第２のオーバーフローオプションもまた、第１の（ｎビット符号なし２進数）オペランドの最上位ビット（Ａｎ）と、第２の（ｎビット符号付き２の補数）オペランドの最上位ビット（Ｂｎ）と、（ｎビット符号なし２進数）結果の最上位ビット（Ｃｎ）とを検査することにより実施される。第２のオーバーフローオプションを用いた加算または減算では、第２のオペランドの符号ビットと結果の最上位ビットとが共に０に等しく、第１のオペランドの最上位ビットが１に等しい場合に、正のオーバーフローが生じる。これは、次の数３のように表すことができる。
【００３１】
【数３】
（Ｂｎ＝Ｃｎ＝０）ＡＮＤ（Ａｎ＝１）
正のオーバーフローが存在する場合、結果に値２ｎ−１が割り当てられる。
【００３２】
同様に、第２のオーバーフローオプションを用いた加算または減算では、第２のオペランドの符号ビットと結果の最上位ビットとが共に１に等しく、第１のオペランドの最上位ビットが０に等しい場合に、負のオーバーフローが生じる。これは、次の数４のように表すことができる。
【００３３】
【数４】
（Ｂｎ＝Ｃｎ＝１）ＡＮＤ（Ａｎ＝０）
負のオーバーフローが存在する場合、結果に値０が割り当てられる。
【００３４】
第３のオーバーフローオプションは、標準的なｎビット２の補数加算器の演算により実施される。出力に対する付加的な変更は不要である。
【００３５】
第４のオーバーフローオプションは、減算を行うことにより実施され、中間結果が負である場合には、２の（または１の）補数演算をその中間結果に対して行って最終的な結果を形成する。第４のオーバーフローオプションの場合のオーバーフローは、Ａ−Ｂ＝Ｃである場合に次の数５により検出することができる。
【００３６】
【数５】
（Ａｎ＝０  ＡＮＤ  Ｂｎ＝１）ＯＲ（Ａｎ＝Ｂｎ  ＡＮＤ  Ｃｎ＝１）
他の飽和オプションも本発明の実施例にしたがって利用することが可能である。例えば、第５のオプションでは、第１および第２のオペランドは−２ｎ−１〜２ｎ−１−１の範囲内のｎビット符号付き数となる。結果は、０〜２ｎ−１−１の範囲内の正のｎビット符号付き数となる。両方のオペランドが共に正であり、結果の最上位ビットが１である場合に、正のオーバーフローが生じる。また、オペランドの内の少なくとも１つが負であり結果の符号が負である場合に、または、両方のオペランドが共に負である場合に、負のオーバーフローが生じる。正のオーバーフローを検出するために、次の数６に従う論理が用いられる。
【００３７】
【数６】
（Ａｎ＝Ｂｎ＝０）ＡＮＤ（Ｃｎ＝１）
また、負のオーバーフローを検出するために次の数７に従う論理が用いられる。
【００３８】
【数７】
（（Ａｎ＝１  ＯＲ  Ｂｎ＝１）ＡＮＤ（Ｃｎ＝１））ＯＲ（Ａｎ＝Ｂｎ＝１）
第５のオーバーフローオプションでは、正のオーバーフローが存在する場合には、結果は飽和して２ｎ−１−１となる。また、負のオーバーフローが存在する場合には、結果は飽和して０となる。
【００３９】
より複雑さが増すことにはなるが、本発明の好適な実施例は、プリシフタ２７を使用した結果として生じるオーバーフローもまた考慮している。図３ないし図６は、本発明の好適実施例を実施する論理を示すものである。この論理は、加算と減算とシフトおよび加算（ｓｈｉｆｔ−ａｎｄ−ａｄｄ）とシフトおよび減算（ｓｈｉｆｔ−ａｎｄ  ｓｕｂｔｒａｃｔ）との算術演算についての実施を示している。
【００４０】
図３は、オーバーフロー条件の計算を可能とするためにプリシフタ２７に付加される論理を示すものである。好適実施例では、プリシフタ２７は、第１のオペランドがＡＬＵ２６に送られる前にその第１のオペランドを左または右へ０、１、２、または３ビットだけシフトすることができる。図３の論理は、第１のオペランドのビットを左へ１、２、または３ビットだけシフトさせる際にオーバーフローが発生したときを検出する。
【００４１】
シフタの正の符号付きオーバーフローを検出するプリシフタ２７中の論理は、マルチプレクサ２６０と、インバータ２６１と、論理ＮＯＲゲート２６２と、論理ＮＯＲゲート２６３と、論理ＮＯＲゲート２６４とを含むものである。プリシフタのオペランドの上位ビットは、論理ＮＯＲゲート２６４の入力２７６に接続される。プリシフタのオペランドの上位から２番目のビットは、インバータ２６１の入力２７０と、論理ＮＯＲゲート２６２の入力２７１と、論理ＮＯＲゲート２６３の入力２７３とに接続される。プリシフタのオペランドの上位から３番目のビットは、論理ＮＯＲゲート２６２の入力２７２と、論理ＮＯＲゲート２６３の入力２７４とに接続される。プリシフタのオペランドの上位から４番目のビットは、論理ＮＯＲゲート２６３の入力２７５に接続される。マルチプレクサ２６０の入力２６９には論理１（ＶＤＤ）信号が接続される。
【００４２】
プリシフタのオペランドがシフトされなかったりまたは右へシフトされる演算の場合、ライン２６５上のゼロシフト選択信号が起動されて、マルチプレクサ２６０がライン２６９上の値を選択してその値が論理ＮＯＲゲート２６４に送られるようになる。プリシフタのオペランドが左へ１ビットシフトされる演算の場合には、ライン２６６上の１ビット左シフト選択信号が起動されて、マルチプレクサ２６０がインバータ２６１からの値を選択してその値が論理ＮＯＲゲート２６４に送られるようになる。プリシフタのオペランドが左へ２ビットシフトされる演算の場合には、ライン２６７上の２ビット左シフト選択信号が起動されて、マルチプレクサ２６０が論理ＮＯＲゲート２６２からの値を選択してその値が論理ＮＯＲゲート２６４に送られるようになる。プリシフタのオペランドが左へ３ビットシフトされる演算の場合には、ライン２６８上の３ビット左シフト選択信号が起動されて、マルチプレクサ２６０が論理ＮＯＲゲート２６３からの値を選択してその値が論理ＮＯＲゲート２６４に送られるようになる。ライン２７７上の第１のプリシフタオーバーフロー信号２７７が論理１である場合、これは、シフタの正の符号付きオーバーフローが発生したことを示している。
【００４３】
シフタの負の符号付きオーバーフローを検出するプリシフタ２７中の論理は、マルチプレクサ２８０と、インバータ２８１と、論理ＮＡＮＤゲート２８２と、論理ＮＡＮＤゲート２８３と、論理ＮＡＮＤゲート２８４とを含むものである。プリシフタのオペランドの上位ビットは、論理ＮＡＮＤゲート２８４の入力２９６に接続される。プリシフタのオペランドの上位から２番目のビットは、インバータ２８１の入力２９０と、論理ＮＡＮＤゲート２８２の入力２９１と、論理ＮＡＮＤゲート２８３の入力２９３とに接続される。プリシフタのオペランドの上位から３番目のビットは、論理ＮＡＮＤゲート２８２の入力２９２と論理ＮＡＮＤゲート２８３の入力２９４とに接続される。プリシフタのオペランドの上位から４番目のビットは、論理ＮＡＮＤゲート２８３の入力２９５に接続される。マルチプレクサ２８０の入力２８９には、論理０（接地）信号が接続される。
【００４４】
プリシフタのオペランドがシフトされなかったりまたは右へシフトされる演算の場合、ライン２８５上のゼロシフト選択信号が起動されて、マルチプレクサ２８０がライン２８９上の値を選択してその値が論理ＮＡＮＤゲート２８４に送られるようになる。プリシフタのオペランドが左へ１ビットシフトされる演算の場合には、ライン２８６上の１ビット左シフト選択信号が起動されて、マルチプレクサ２８０がインバータ２８１からの値を選択してその値が論理ＮＡＮＤゲート２８４に送られるようになる。プリシフタのオペランドが左へ２ビットシフトされる演算の場合には、ライン２８７上の２ビット左シフト選択信号が起動されて、マルチプレクサ２８０が論理ＮＡＮＤゲート２８２からの値を選択してその値が論理ＮＡＮＤゲート２８４に送られるようになる。プリシフタのオペランドが左へ３ビットシフトされる演算の場合には、ライン２８８上の３ビット左シフト選択信号が起動されて、マルチプレクサ２８０が論理ＮＡＮＤゲート２８３からの値を選択してその値が論理ＮＡＮＤゲート２８４に送られるようになる。ライン２９７上の第２のプリシフタオーバーフロー信号が論理０である場合、これは、シフタの負の符号付きオーバーフローが発生したことを示している。
【００４５】
図４は、オーバーフロー計算を行い、図３に示すプリシフタの論理による結果を考慮する、ＡＬＵ２６内のオーバーフロー論理を示すものである。ＡＬＵ２６内の加算器は、プリシフタ２７からの第１の加算器オペランドと補数演算回路２８からの第２の加算器オペランドとを受け取る。
【００４６】
オーバーフロー計算を行うＡＬＵ２６内の論理は、インバータ２１１と、インバータ２１２と、インバータ２１３と、論理ＮＯＲゲート２１４と、論理ＮＯＲゲート２１５と、論理ＮＯＲゲート２１６と、論理ＮＡＮＤゲート２１７と、論理ＮＡＮＤゲート２１８と、論理ＮＡＮＤゲート２１９と、論理ＯＲゲート２２０と、論理ＡＮＤゲート２２１とを含むものである。インバータ２１１の入力２３１には、第２の加算器オペランドの上位ビットを反転させた値が置かれる。論理ＮＡＮＤゲート２１９の入力２３８には、第１の加算器オペランドの上位ビットを反転させた値が置かれる。論理ＮＡＮＤゲート２１９の入力２３９には、第２の加算器オペランドの上位ビットを反転させた値が置かれる。論理ＮＯＲゲート２１６の入力２４０には、第１の加算器オペランドの上位ビットを反転させた値が置かれる。論理ＮＯＲゲート２１６の入力２４１には、第２の加算器オペランドの上位ビットを反転させた値が置かれる。
【００４７】
論理ＮＯＲゲート２１４の入力２２３には、加算器結果の上位ビットの桁上げ出力を反転させた値が置かれる。論理ＮＡＮＤゲート２１７の入力２３３には、加算器結果の上位ビットの桁上げ出力を反転させた値が置かれる。論理ＮＯＲゲート２１５の入力２４２には、ライン２７７からの第１のプリシフタオーバーフロー信号が置かれる。論理ＮＡＮＤゲート２１８の入力２４３には、ライン２９７からの第２のプリシフタオーバーフロー信号が置かれる。論理ＡＮＤゲート２２１の入力２３４には、加算器結果の最上位ビットから２番目のビットからの桁上げ出力の値が置かれる。論理ＡＮＤゲート２２１の入力２３５には、ライン２９７からの第２のプリシフタオーバーフロー信号が置かれる。論理ＯＲゲート２２０の入力２３６には、ライン２７７からの第１のプリシフタオーバーフロー信号が置かれる。論理ＯＲゲート２２０の入力２３７には、加算器結果の最上位ビットから２番目のビットからの桁上げ出力の値が置かれる。
【００４８】
図４の論理に示すように、オーバーフローの計算には、加算器結果の最上位ビットからの桁上げ出力ではなく、その加算器結果の最上位ビットから２番目のビットからの桁上げ出力が用いられる。当業者には理解されるように、基本的には、最上位ビットから２番目のビットからの桁上げ出力と最上位ビットへの入力とを用いて最上位ビットからの桁上げ出力に含まれる情報を導出することができ、これにより、性能がわずかに増大する。その理由は、最上位ビットからの桁上げ出力の計算を待つ必要がないことにある。
【００４９】
ＡＬＵ２６内のオーバーフロー論理は、４つの加算器オーバーフロー信号を生成する。ライン２５１上の第１の加算器オーバーフロー信号は、符号付きオペランドと符号なしオペランドとについての演算の結果として生じる正のオーバーフローが存在する場合に論理１となる。ライン２５２上の第２の加算器オーバーフロー信号は、符号付きオペランドと符号なしオペランドとについての演算の結果として生じる負のオーバーフローが存在する場合に論理０となる。ライン２５３上の第３の加算器オーバーフロー信号は、２つの符号付きオペランドについての演算の結果として生じる正のオーバーフローが存在する場合に論理０となる。ライン２５４上の第４の加算器オーバーフロー信号は、２つの符号付きオペランドについての演算の結果として生じる負のオーバーフローが存在する場合に論理１となる。
【００５０】
図５は、飽和選択論理２０２を示す論理ブロック図である。飽和選択論理２０２は、マルチプレクサ３００と、マルチプレクサ３１０と、マルチプレクサ３２０と、マルチプレクサ３３０と、インバータ３２６と、インバータ３３６とを含むものである。この飽和選択論理２０２は、図示のように、ライン２５１，２５２，２５３，２５４上のそれぞれの第１、第２、第３、第４の加算器オーバーフロー信号を受け取る。マルチプレクサ３００の入力ライン３０４には論理０（接地）信号が置かれる。マルチプレクサ３１０の入力ライン３１４には論理１（ＶＤＤ）信号が置かれる。マルチプレクサ３２０の入力ライン３２４には論理０（接地）信号が置かれる。マルチプレクサ３３０の入力ライン３３４には論理１（ＶＤＤ）信号が置かれる。
【００５１】
マルチプレクサ３００，３１０，３２０，３３０は、３つの選択信号により制御される。飽和オーバーフロー機構が２つの符号付きオペランドについて選択されるような演算となるよう演算が選択される場合には、ライン３０１上の第１の選択信号が論理１にセットされ、マルチプレクサ３００，３１０，３２０，３３０がそれぞれの上側の入力を選択してそれぞれの出力へ送る。１つの符号付きオペランドと１つの符号なしオペランドとについて飽和機構が選択されるような演算となるように演算が選択される場合には、ライン３０２上の第２の選択信号が論理１にセットされ、マルチプレクサ３００，３１０，３２０，３３０がそれぞれの中央の入力を選択してそれぞれの出力へ送る。飽和オーバーフローが発生しないような演算となるように演算が選択される場合には、ライン３０３上の第３の選択信号が論理１にセットされ、マルチプレクサ３００，３１０，３２０，３３０がそれぞれの下側の入力を選択してそれぞれの出力へ送る。
【００５２】
飽和選択論理２０２は、ライン３０５上の第１の選択飽和信号と、ライン３１５上の第２の選択飽和信号と、ライン３２５上の第３の選択飽和信号と、ライン３３５上の第４の選択飽和信号とを生成する。第１の選択飽和信号が論理１の場合には、飽和論理２０１は、結果の最上位ビットを論理１にするように命令される。第２の選択飽和信号が論理０の場合には、飽和論理２０１は、結果の最上位ビットを論理０にするように命令される。第３の選択飽和信号が論理１の場合には、飽和論理２０１は、結果の最上位ビットを除いた全てのビットを論理１にするように命令される。第４の選択飽和信号が論理０の場合には、飽和論理２０１は、結果の最上位ビットを除いた全てのビットを論理０にするように命令される。
【００５３】
図６は、飽和論理２０１を示す論理ブロック図である。飽和論理２０１は、論理ＡＮＤゲート３４１と、論理ＯＲゲート３４０と、論理ＡＮＤゲート３５１と、論理ＯＲゲート３５０とを含むものである。論理ＡＮＤゲート３５１および論理ＯＲゲート３５０は、ＡＬＵ結果２０７の最上位ビットを除いたあらゆるビット毎に複製されるものである。
【００５４】
ライン３４２上にオーバーフロー修正結果２０８の最上位ビットを生成するために、飽和論理２０１は、ライン３４４上のＡＬＵの結果２０７の最上位ビットと、ライン３０５上の第１の選択飽和信号と、ライン３１５上の第２の選択飽和信号とを受け取る。
【００５５】
また、オーバーフロー修正結果２０８の最上位ビット以外の各ビットを生成するために、論理ＡＮＤゲート３５１および論理ＯＲゲート３５０が各ビット毎に複製される。オーバーフロー修正結果２０８の最上位ビット以外の各ビット毎に、飽和論理２０１は、ライン３５４上のＡＬＵ結果２０７のビットと、ライン３２５上の第３の選択飽和信号と、ライン３３５上の第４の選択飽和信号とを受け取って、オーバーフロー修正結果２０８の対応するビットをライン３５２上に生成する。
【００５６】
図６に示す論理の後にまたはその論理と並列にインバータを設けることにより、上記の第４のオーバーフローオプションで説明した１の補数演算を実施することができる。当業者には自明であるように、２の補数演算を実施するためには、第４のオーバーフローオプションの場合には、１の桁上げ入力も必要となる。
【００５７】
第５のオプションを実施するためには更に論理を付加する必要がある。図１１は、オーバーフロー計算を行い、図３に示すプリシフタ論理による結果を考慮する、第５のオプションについてのＡＬＵ２６内のオーバーフロー論理を示すものである。第５のオプションについてオーバーフロー計算を行うＡＬＵ２６内の論理は、インバータ４１２と、インバータ４１３と、論理ＮＯＲゲート４１６と、論理ＮＡＮＤゲート４１８と、論理ＮＡＮＤゲート４１９と、論理ＯＲゲート４２０と、論理ＮＡＮＤゲート４２１とを含むものである。論理ＮＡＮＤゲート４１９の入力４３８には、第１の加算器オペランドの上位ビットを反転させた値が置かれる。論理ＮＡＮＤゲート４１９の入力４３９には、第２の加算器オペランドの上位ビットを反転させた値が置かれる。論理ＮＯＲゲート４１６の入力４４０には、第１の加算器オペランドの上位ビットを反転させた値が置かれる。論理ＮＯＲゲート４１６の入力４４１には、第２の加算器オペランドの上位ビットを反転させた値が置かれる。
【００５８】
論理ＮＡＮＤゲート４２１の入力４３４には、加算器結果の最上位ビットの次のビットからの桁上げ出力（即ち、最上位ビットへの桁上げ入力）の値が置かれる。論理ＯＲゲート４２０の入力４３７には、加算器結果の最上位ビットの次のビットからの桁上げ出力（即ち、最上位ビットへの桁上げ入力）の値が置かれる。
【００５９】
第５のオプションについてのＡＬＵ２６内のオーバーフロー論理は、２つの加算器オーバーフロー信号を生成する。ライン４５３上の第１の加算器オーバーフロー信号は、２つの符号付きオペランドについての演算の結果として生じる正のオーバーフローが存在する場合に論理０となる。ライン４５４上の第２の加算器オーバーフロー信号は、２つの符号付きオペランドについての演算の結果として生じる負のオーバーフローが存在する場合に論理１となる。
【００６０】
図１２は、第５のオプションについての飽和選択論理２０２を示す論理ブロック図である。飽和選択論理２０２は、マルチプレクサ５００と、マルチプレクサ５１０と、マルチプレクサ５２０と、マルチプレクサ５３０と、インバータ５２６と、インバータ５３６とを含むものである。第５のオプションについての飽和選択論理２０２は、図示のようにライン４５３，４５４上のそれぞれの第１および第２の加算器オーバーフロー信号を受け取る。論理０（接地）信号がマルチプレクサ５００の入力ライン５０３，５０４上に置かれる。論理０（接地）信号がマルチプレクサ５１０の入力ライン５１３上に置かれる。論理１（ＶＤＤ）信号がマルチプレクサ５１０の入力ライン５１４上に置かれる。論理０（接地）信号がマルチプレクサ５２０の入力ライン５２４上に置かれる。論理１（ＶＤＤ）信号がマルチプレクサ５３０の入力ライン５３４上に置かれる。
【００６１】
マルチプレクサ５００，５１０，５２０，５３０は２つの選択信号により制御される。第５のオプションに従って飽和オーバーフロー機構が２つの符号付きオペランドについて選択されるような演算となるように演算が選択される場合には、ライン５０１上の第１の選択信号が論理１にセットされ、マルチプレクサ５００，５１０，５２０，５３０がそれぞれの上側の入力を選択してそれぞれの出力へ送る。飽和オーバーフローが発生しないような演算となるように演算が選択される場合には、ライン５０２上の第２の選択信号が論理１にセットされ、マルチプレクサ５００，５１０，５２０，５３０がそれぞれの下側の入力を選択してそれぞれの出力へ送る。
【００６２】
第５のオプションについての飽和選択論理２０２は、ライン５０５上に第１の選択飽和信号を、ライン５１５上に第２の選択飽和信号を、ライン５２５上に第３の選択飽和信号を、ライン５３５上に第４の選択飽和信号を生成する。第１の選択飽和信号が論理１の場合、飽和論理２０１は、結果の最上位ビットを論理１にするように命令される。第２の選択飽和信号が論理０の場合には、飽和論理２０１は、結果の最上位ビットを論理０にするように命令される。第３の選択飽和信号が論理１の場合には、飽和論理２０１は、結果の最上位ビットを除いた全てのビットを論理１にするように命令される。第４の選択飽和信号が論理０の場合には、飽和論理２０１は、結果の最上位ビットを除いた全てのビットを論理０にするように命令される。
【００６３】
本発明の上記説明は、非区分化（ｎｏｎ−ｐａｒｔｉｔｉｏｎｅｄ）ＡＬＵを用いた演算について説明したものであるが、本発明はまた、データの並列処理が可能となるようにＡＬＵが区分化されている場合にも非常に有用なものである。この場合には、ＡＬＵの各区分毎に別個のオーバーフローハードウェアを用いることができる。
【００６４】
例えば、２つに区分化されたＡＬＵ２６を図７に示す。第１の区分４１は、第１のオペランドの下位ビット４２と第２のオペランドの下位ビット４３とについて演算を行って下位ビット結果４４を生成する。第２の区分５１は、第１のオペランドの上位ビット５２と第２のオペランドの上位ビット５３とについて演算を行って上位ビット結果５４を生成する。
【００６５】
制御入力４９に応じてセレクタ５０を使用して、データパス４５上の情報を第１の区分４１から第２の区分５１へ伝達させること、またはデータパス４５上の情報が第１の区分４１から第２の区分５１へと伝達する前にその情報を遮断することが可能となる。特に、フルワードオペランドについて行われる算術演算の場合に、情報を第１の区分４１からセレクタ５０を介して第２の区分５１へと伝達させることが可能である。ハーフワードオペランドについて行われる並列算術演算の場合には、セレクタ５０は、情報が第１の区分４１から第２の区分５１に伝達するのを阻止する。一般に、論理演算では、第１の区分４１から第２の区分５１へ情報が伝達することはない。
【００６６】
例えば、３２ビット幅のデータパスを有するコンピュータでは、各フルワードオペランドは３２ビットである。したがって、３２ビットのフルワードオペランドを用いて演算を行う場合には、セレクタ５０が、情報が第１の区分４１からセレクタ５０を介して第２の区分５１へと伝わることができるようにしている。１６ビットのハーフワードオペランドを用いて２つの並列演算を行う場合には、セレクタ５０は、情報が第１の区分４１からセレクタ５０を介して第２の区分５１へ伝達するのを阻止する。その代わりにライン５９上の値が区分５１に送られる。「加算」が行われている場合には、論理０が入力ライン５９上に置かれる。「減算」が行われている場合には、論理１が入力ライン５９上に置かれる。
【００６７】
本発明の好適な実施例では、図１に示すＡＬＵ２６により行われる一般的な算術演算は２の補数加算である。当業者には理解されるように、ＡＬＵにおいて２の補数加算演算を行う前に２の補数演算回路２８を用いてオペランドについて２の補数演算を行うことにより２の補数減算が実施される。また、ＡＬＵにおいて２の補数加算演算を行う前にプリシフタ２７を用いてオペランドのプリシフトを行うことにより、シフトおよび加算演算が実施される。
【００６８】
図８は、本発明の好適実施例によるＡＬＵ２６内の桁上げ伝搬加算を用いた２の補数加算器の実施態様を示すものである。代替的には、ＡＬＵ２６は、桁上げ先回り制御を用いた２の補数加算器を含むものとなる。半加算器６０は、第１のオペランドの単一ビットＸ０と第２のオペランドの単一ビットＹ０とを受け取る。この半加算器６０は、和ビットＺ０および桁上げビットＣ０を生成する。全加算器６１は、第１のオペランドの単一ビットＸ１と、第２のオペランドの単一ビットＹ１と、桁上げビットＣ０とを受け取る。この全加算器６１は、和ビットＺ１および桁上げビットＣ１を生成する。全加算器６５は、第１のオペランドの単一ビットＸｉ−１と、第２のオペランドの単一ビットＹｉ−１と、前の加算器からの桁上げビット（即ち、図示しないがＣｉ−２）とを受け取る。この全加算器６５は、和ビットＺｉ−１および桁上げビットＣｉ−１を生成する。全加算器６６は、第１のオペランドの単一ビットＸｉと第２のオペランドの単一ビットＹｉとを受け取る。全加算器６６はまた、イネーブルビット４９の値に応じて、セレクタ５０（または当業者に理解されるような等価の論理回路）を介して桁上げビットＣｉ−１を受け取る。この全加算器６６は、和ビットＺｉおよび桁上げビットＣｉを生成する。全加算器６９は、第１のオペランドの単一ビットＸｊ−１と、第２のオペランドの単一ビットＹｊ−１と、前の加算器からの桁上げビット（図示せず）とを受け取る。この全加算器６９は、和ビットＺｊ−１および桁上げビットＣｊ−１を生成する。
【００６９】
図８に示す加算器の実施例において、「ｊ」はデータパスの大きさおよびフルワード演算のビット長である。また、「ｉ」は「ｊ」を２で割ったものに等しい。例えば、「ｊ」は３２に等しく「ｉ」は１６に等しい。当業者には理解されるように、「ｊ」はいかなる値でもよく、「ｉ」は「ｊ」よりも小さいいかなる値でもよい。
【００７０】
セレクタ５０は図８にも示されている。「ｊ」ビットのフルワードオペランドを用いて演算を行う場合、イネーブルビット４９は論理１に等しく、桁上げがセレクタ５０を介して全加算器６６へ伝達することが可能となる。「ｉ」ビットのハーフワードオペランドを用いて２つの並列演算を行う場合には、イネーブルビット４９は論理０に等しく、桁上げがセレクタ５０を介して全加算器６６に伝達することが阻止される。その代わりに、ライン５９上の値が全加算器６６に送られる。「加算」が行われている場合には、論理０が入力ライン５９上に置かれる。「減算」が行われている場合には、論理１が入力ライン５９上に置かれる。
【００７１】
図７および図８は、２つの区分を有するＡＬＵ２６の実施態様を説明するものであるが、本発明の別の好適実施例に従って設計されたＡＬＵは、ＡＬＵを様々に区分することができるものである。例えば、本発明の好適な代替実施例によるＡＬＵ２６の簡略ブロック図を図９に示す。同図において、ＡＬＵ２６は４つに区分化されている。第１の区分７１は、第１のオペランドの下位ビット７２と第２のオペランドの下位ビット７３とについて演算を行って下位ビット結果７４を生成する。第２の区分８１は、第１のオペランドのビット８２と第２のオペランドのビット８３とについて演算を行って結果ビット８４を生成する。第３の区分９１は、第１のオペランドのビット９２と第２のオペランドのビット９３とについて演算を行って結果ビット９４を生成する。第４の区分１０１は、第１のオペランドの上位ビット１０２と第２のオペランドの上位ビット１０３とについて演算を行って上位ビット結果１０４を生成する。
【００７２】
制御入力７９に応じてセレクタ８０が用いられて、データパス７５上の情報が第１の区分７１から第２の区分８１へ伝達することが可能になり、または、データパス７５上の情報が第１の区分７１から第２の区分８１へ伝達する前にその情報が遮断される。特に、フルワードオペランドまたはハーフワードオペランドについて行われる算術演算の場合には、情報が第１の区分７１からセレクタ８０を介して第２の区分８１に伝達することが可能となっている。クォーターワードオペランドについて行われる並列算術演算の場合には、情報が第１の区分７１から第２の区分８１に伝達するのをセレクタ８０が阻止する。その代わりに、ライン８８上の値が区分８１に送られる。「加算」が行われている場合には論理０がライン８８上に置かれる。また、「減算」が行われている場合には論理１がライン８８上に置かれる。一般に、論理演算において区分間で情報が伝達することはない。
【００７３】
制御入力８９に応じてセレクタ９０が用いられて、データパス８５上の情報が第２の区分８１から第３の区分９１に伝達することが可能になり、または、データパス８５上の情報が第２の区分８１から第３の区分９１に伝達する前にその情報が遮断される。特に、フルワードオペランドについて行われる算術演算の場合には、情報は第２の区分８１からセレクタ９０を介して第３の区分９１に伝達することが可能となる。クォーターワードオペランドまたはハーフワードオペランドについて行われる並列算術演算の場合には、セレクタ９０は、情報が第２の区分８１から第３の区分９１に伝達するのを阻止する。その代わりに、ライン９８上の値が区分９１に送られる。「加算」が行われている場合には、論理０がライン９８上に置かれる。「減算」が行われている場合には、論理１がライン９８上に置かれる。
【００７４】
制御入力９９に応じてセレクタ１００が用いられて、データパス９５上の情報が第３の区分９１から第４の区分１０１に伝達することを可能になり、または、データパス９５上の情報が第３の区分９１から第４の区分１０１に伝達する前にその情報が遮断される。特に、フルワードオペランドおよびハーフワードオペランドについて行われる算術演算の場合には、情報は、第３の区分９１からセレクタ１００を介して第４の区分１０１に伝達することが可能となる。クォーターワードオペランドについて行われる並列算術演算の場合には、セレクタ１００は、情報が第３の区分９１から第４の区分１０１に伝達するのを阻止する。その代わりに、ライン１０８上の値が区分１０１に送られる。「加算」が行われている場合には論理０がライン１０８上に置かれる。「減算」が行われている場合には、論理１がライン１０８上に置かれる。
【００７５】
例えば、６４ビット幅のデータパスを有するコンピュータでは、各フルワードオペランドは６４ビットとなる。したがって、６４ビットのフルワードオペランドを用いて演算を行う場合には、セレクタ８０は、情報が第１の区分７１からセレクタ８０を介して第２の区分８１に伝達することを可能にし、セレクタ９０は、情報が第２の区分８１からセレクタ９０を介して第３の区分９１に伝達することを可能にし、セレクタ１００は、情報が第３の区分９１からセレクタ１００を介して第４の区分１０１に伝達することを可能にする。３２ビットのハーフワードオペランドを用いて２つの並列演算を行う場合には、セレクタ８０は、情報が第１の区分７１からセレクタ８０を介して第２の区分８１に伝達することを可能にし、セレクタ９０は、情報が第２の区分８１からセレクタ９０を介して第３の区分９１に伝達するのを阻止し、セレクタ１００は、情報が第３の区分９１からセレクタ１００を介して第４の区分１０１に伝達することを可能にする。１６ビットのクォーターワードオペランドを用いて４つの並列演算を行う場合には、セレクタ８０は、情報が第１の区分７１からセレクタ８０を介して第２の区分８１に伝達するのを阻止し、セレクタ９０は、情報が第２の区分８１からセレクタ９０を介して第３の区分９１に伝達するのを阻止し、セレクタ１００は、情報が第３の区分９１からセレクタ１００を介して第４の区分１０１に伝達するのを阻止する。
【００７６】
本発明の好適実施例による並列処理に他のグループ化を用いることもできる。例えば、６４ビット幅のデータパスを有するコンピュータにおいて、２つの１６ビットの算術演算と４つの８ビットの算術演算とが全て同時に行われるように制御入力を選択することができる。更に、合計がワードサイズ以下であれば如何なるビットの組み合わせも用いることができる。例えば、１７ビットと３ビットと１６ビットと１２ビットと５ビットと１１ビットとの算術演算の並列処理も同時に行うことができる。上述の原理は、桁上げ先回り制御式加算器にも適用可能なものである。
【００７７】
当業者には理解されるように、本発明の原理は、コンピュータシステムのＡＬＵ内の算術演算に限られるものではない。例えば、ＡＬＵにおける図示のような区分化は、データについて演算を行うコンピュータシステム内の他のエンティティにも拡張することができる。例えば、図１０は、プリシフタ２７において実施した本発明を示すものである。本発明の同一の実施例は、シフタ２９の実施にも用いることができる。プリシフタ２７およびシフタ２９の区分化は、例えば、並列のシフト・加算演算や並列のシフト演算の実施を考慮したものである。
【００７８】
図示のプリシフタ２７（またはシフタ２９）は、シフトレジスタ１ビットスライス１６０と、シフトレジスタ１ビットスライス１６１と、シフトレジスタ１ビットスライス１６５と、シフトレジスタ１ビットスライス１６６と、シフトレジスタ１ビットスライス１６９とを含むものである。
【００７９】
データが左にシフトされる場合には、入力１７１上のデータ（典型的には論理値０）が、シフトレジスタ１ビットスライス１６０への入力として用いられる。また、データが右にシフトされる場合には、セレクタ１７５が、制御入力１８２に応じて、入力１８１上のデータ（論理値０または論理値１）を選択するか、またはシフトレジスタ１ビットスライス１６９が現在記憶している値を選択して、シフトレジスタ１ビットスライス１６９に入力する。
【００８０】
シフタが区分化されるところには必ず、更なるセレクタがシフタに付加される。例えば、図１０は、シフトレジスタ１ビットスライス１６５，１６６間で区分化されたシフタを示している。同図ではセレクタ１７４およびセレクタ１７３が付加されている。区分化されたオペランドについてのシフト演算の場合には、データが左にシフトされる際に、セレクタ１７３が、制御入力１８５に応じて入力１７２上のデータ（典型的には論理値０）を選択してシフトレジスタ１ビットスライス１６６への入力として用いる。フルワードオペランドについてのシフト演算の場合には、データが左にシフトされる際に、セレクタ１７３が、シフトレジスタ１ビットスライス１６５からの出力を選択してシフトレジスタ１ビットスライス１６６への入力として用いる。
【００８１】
区分化されたオペランドについてのシフト演算の場合には、データが右にシフトされる際に、セレクタ１７４が、制御入力１８４に応じて入力１８３上のデータ（論理値０または論理値１）を選択するか、またはシフトレジスタ１ビットスライス１６６が現在記憶している値を選択して、シフトレジスタ１ビットスライス１６５に入力する。フルワードオペランドに関するシフト演算の場合には、データが右にシフトされる際に、セレクタ１７４が、シフトレジスタ１ビットスライス１６６からの出力を選択して、シフトレジスタ１ビットスライス１６５への入力として用いる。
【００８２】
図１０は、２つの区分のみを有するシフタを示したものである。ＡＬＵにおける区分化に関する上記説明から理解されるように、シフタは様々な態様で区分化することができる。例えば、６４ビットシフタは、２、４、８、１６、３２、または６４ビットの等しい大きさの区分に区分化することが可能である。加えて、各区分がそれぞれ等しい数のビットについて演算を行うことは本発明の要件ではない。
【００８３】
上記実施例は、一連の１ビットスライスからなるシフトレジスタとして実施されたプリシフタ２７およびシフタ２９について説明したものであるが、他の好適な代替実施例として、プリシフタとシフタをマルチプレクサを用いて実施したものが挙げられる。典型的には、プリシフタ２７は１レベルのマルチプレクサにより実施される。これは、プリシフタ２７が多くとも少数のビット（例えば０、１、２、３または４ビット）だけしかシフトできないのが普通だからである。シフタ２９は、典型的には３レベルのマルチプレクサにより実施される。この場合、各レベルのマルチプレクサは４→１マルチプレクサとなる。例えば、６４ビットシフタ２９では、第１レベルのマルチプレクサは、０、１６、３２または４８ビットのいずれかをシフトすることになる。第２レベルのマルチプレクサは、０、４、８または１２ビットのいずれかをシフトすることができる。第３レベルのマルチプレクサは、０、１、２または３ビットのいずれかをシフトすることができる。これにより、０から６３までのいかなる数のビットもシフトすることが可能となる。このような３段のマルチプレクサからなるシフタにおいても、１ビットスライスはなお識別することができる。しかし、当業者には理解されるように、いかなる２つのビット間のシフトも、３つのマルチプレクサ段の内の１つ以上においてブロックされなければならない場合がある。。
【００８４】
上記説明は、本発明の単なる例示としての方法および実施例を開示し説明したものである。当業者には理解されるように、本発明の思想および本質的な特徴から逸脱することなく本発明を他の特定形態で実施することが可能である。したがって、本発明の開示は、特許請求の範囲に記載の本発明の範囲の例示を意図したものであり、本発明の範囲を制限することを意図したものではない。
【００８５】
以下においては、本発明の種々の構成要件の組み合わせからなる例示的な実施態様を示す。
【００８６】
１．第１のｎビット符号なし２進数オペランドと第２のｎビット符号付き２進数オペランドとについて第１の算術演算を行ってｎビット符号なし２進数結果を生成する第１の算術演算手段と、
その第１の算術演算手段に接続され、正のオーバーフローが存在する場合に前記ｎビット符号なし２進数結果に値２ｎ−１を割り当てる、第１の正オーバーフロー手段と、
前記第１の算術演算手段に接続され、負のオーバーフローが存在する場合に前記ｎビット符号なし２進数結果に値０を割り当てる、第１の負オーバーフロー手段と
を備えることを特徴とする、計算システム。
【００８７】
２．前記第１の正オーバーフロー手段が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが１に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット符号なし２進数結果の最上位ビットが０に等しい場合に前記ｎビット符号なし２進数結果に値２ｎ−１を割り当てる手段を備え、
前記第１の負オーバーフロー手段が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが１に等しく、前記ｎビット符号なし２進数結果の最上位ビットが１に等しい場合に前記ｎビット符号なし２進数結果に値０を割り当てる手段を備えている、
前項１記載の計算システム。
【００８８】
３．２つのｎビット符号付き２進数オペランドについて第２の算術演算を行ってｎビット符号付き２進数結果を生成する第２の算術演算手段と、
その第２の算術演算手段に接続され、その第２の算術演算の結果として生じる正のオーバーフローが存在する場合に前記ｎビット符号付き２進数結果に値２ｎ−１−１を割り当てる、第２の正オーバーフロー手段と、
前記第２の算術演算手段に接続され、その第２の算術演算の結果として生じる負のオーバーフローが存在する場合に前記ｎビット符号付き２進数結果に値−２ｎ−１を割り当てる、第２の負オーバーフロー手段と
を更に備えている、前項１記載の計算システム。
【００８９】
４．前記計算システムが、単一の命令に応じて多数の演算を実施し、前記第２の算術演算が、算術論理演算装置において同時に行われる複数の並列演算の内の１つとなる、前項３記載の計算システム。
【００９０】
５．前記第１の正オーバーフロー手段が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが１に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット符号なし２進数結果の最上位ビットが０に等しい場合に前記ｎビット符号なし２進数結果に値２ｎ−１を割り当てる手段を備え、
前記第１の負オーバーフロー手段が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが１に等しく、前記ｎビット符号なし２進数結果の最上位ビットが１に等しい場合に前記ｎビット符号なし２進数結果に値０を割り当てる手段を備え、
前記第２の正オーバーフロー手段が、前記２つのｎビット符号付き２進数オペランドの最上位ビットが共に０に等しく、前記ｎビット符号付き２進数結果の最上位ビットが１に等しい場合に前記ｎビット符号付き２進数結果に値２ｎ−１−１を割り当てる手段を備え、
前記第２の負オーバーフロー手段が、前記２つのｎビット符号付き２進数オペランドの最上位ビットが共に１に等しく、前記ｎビット符号付き２進数結果の最上位ビットが０に等しい場合に前記ｎビット符号付き２進数結果に値−２ｎ−１を割り当てる手段を備えている、
前項３記載の計算システム。
【００９１】
６．２つのｎビット符号なしオペランドについて減算演算を行って（ｎ＋１）ビット符号付き２進数中間結果を生成する第３の算術演算手段と、
その第３の算術演算手段に接続され、前記（ｎ＋１）ビット符号付き２進数中間結果が負である場合にその（ｎ＋１）ビット符号付き２進数中間結果について補数演算を行うことによりｎビット符号なし２進数最終結果を提供する、第３の負オーバーフロー手段と
を更に備えている、前項３記載の計算システム。
【００９２】
７．前記計算システムが、単一の命令に応じて多数の演算を実施し、前記第３の算術演算が、算術論理演算装置において同時に行われる複数の並列演算の内の１つとなる、前項６記載の計算システム。
【００９３】
８．前記第２の算術演算手段がｎビット２の補数加算器を備え、前記計算システムが、
前記第１の正オーバーフロー手段、前記第１の負オーバーフロー手段、前記第２の正オーバーフロー手段、および前記第２の負オーバーフロー手段の演算を選択に応じてオーバーライドして前記ｎビット２の補数加算器の出力がｎビット２進数結果として用いられるようにする選択手段
を更に備えている、前項３記載の計算システム。
【００９４】
９．前記計算システムが単一の命令に応じて多数の演算を実施して、前記第１の算術演算が算術論理演算装置において同時に行われる複数の並列演算の内の１つとなる、前項８記載の計算システム。
【００９５】
１０．前記第１の算術演算手段がｎビット２の補数加算器により行われる演算を含んでいる、前項１記載の計算システム。
【００９６】
１１．前記第１の正オーバーフロー手段が、
前記第１のｎビット符号なし２進数オペランドの最上位ビットが１に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット符号なし２進数結果の最上位ビットが０に等しい場合に第１の正オーバーフロー信号を生成するオーバーフロー検出論理と、
そのオーバーフロー検出論理および前記ｎビット２の補数加算器の出力に接続され、前記第１の正オーバーフロー信号と前記第１の算術演算が行われていることを示す第１の選択とに応じて前記ｎビット２の補数加算器の出力を値２ｎ−１に置き換える、飽和論理と
を備えている、前項１０記載の計算システム。
【００９７】
１２．前記第１の負オーバーフロー手段が、
前記第１のｎビット符号なし２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが１に等しく、前記ｎビット符号なし２進数結果の最上位ビットが１に等しい場合に第１の負オーバーフロー信号を生成するオーバーフロー検出論理と、
前記第１の負オーバーフロー信号と前記第１の算術演算が行われていることを示す第１の選択とに応じて前記ｎビット２の補数加算器の出力を値０に置き換える飽和論理と
を備えている、前項１１記載の計算システム。
【００９８】
１３．前記ｎビット２の補数加算器の入力に接続され、選択に応じてｎビット２進数オペランドが前記ｎビット２の補数加算器により受容される前にそのｎビット２進数オペランドをシフトさせるプリシフタを更に備え、前記オーバーフロー検出論理が、前記ｎビット２進数オペランドが前記ｎビット２の補数加算器により受容される前にプリシフタがそのｎビット２進数オペランドを左へシフトさせる結果として生じる正のオーバーフローを更に検出する、前項１２記載の計算システム。
【００９９】
１４．前記計算システムが単一の命令に応じて多数の演算を実施し、前記第１の算術演算が算術論理演算装置において同時に行われる複数の並列演算の内の１つとなる、前項１記載の計算システム。
【０１００】
１５．ハードウェア論理素子により実施されるコンピュータ内の方法であって、この方法が、
（ａ）算術論理演算装置において第１のｎビット符号なし２進数オペランドと第２のｎビット符号付き２進数オペランドとについて第１の算術演算を行ってｎビット符号なし２進数結果を生成し、
（ｂ）前記ｎビット符号なし２進数結果に正のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｃ）そのステップ（ｂ）でのチェックにより正のオーバーフローが存在すると判定された場合に、前記ｎビット符号なし２進数結果に値２ｎ−１を割り当て、
（ｄ）前記ｎビット符号なし２進数結果に負のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｅ）そのステップ（ｄ）でのチェックにより負のオーバーフローが存在すると判定された場合に、前記ｎビット符号なし２進数結果に値０を割り当てる、
とい各ステップを含むことを特徴とする、ハードウェア論理素子により実施されるコンピュータ内の方法。
【０１０１】
１６．前記ステップ（ｂ）が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが１に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット符号なし２進数結果の最上位ビットが０に等しい場合に正のオーバーフローが存在すると判定することを含み、
前記ステップ（ｄ）が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが１に等しく、前記ｎビット符号なし２進数結果の最上位ビットが１に等しい場合に負のオーバーフローが存在すると判定することを含む、
前項１５記載の方法。
【０１０２】
１７．（ｆ）前記算術論理演算装置において２つのｎビット符号付き２進数オペランドについて第２の算術演算を行ってｎビット符号付き２進数結果を生成し、
（ｇ）そのｎビット符号付き２進数結果に正のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｈ）そのステップ（ｇ）でのチェックにより正のオーバーフローが存在すると判定された場合に、前記ｎビット符号付き２進数結果に値２ｎ−１−１を割り当て、
（ｉ）前記ｎビット符号付き２進数結果に負のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｊ）そのステップ（ｉ）でのチェックにより負のオーバーフローが存在すると判定された場合に、前記ｎビット符号付き２進数結果に値−２ｎ−１を割り当てる、
という各ステップを更に含む、前項１５記載の方法。
【０１０３】
１８．（ｋ）前記第２の算術演算が算術論理演算装置において同時に行われる複数の並列演算の内の１つとなるように前記ステップ（ｆ）と並列に追加の算術演算を行う、というステップを更に含む、前項１７記載の方法。
【０１０４】
１９．前記ステップ（ｂ）が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが１に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット符号なし２進数結果の最上位ビットが０に等しい場合に正のオーバーフローが存在すると判定することを含み、
前記ステップ（ｄ）が、前記第１のｎビット符号なし２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが１に等しく、前記ｎビット符号なし２進数結果の前記最上位ビットが１に等しい場合に負のオーバーフローが存在すると判定することを含み、
前記ステップ（ｇ）が、前記２つのｎビット符号付き２進数オペランドの最上位ビットが共に０に等しく、前記ｎビット符号付き２進数結果の最上位ビットが１に等しい場合に正のオーバーフローが存在すると判定することを含み、
前記ステップ（ｉ）が、前記２つのｎビット符号付き２進数オペランドの最上位ビットが共に１に等しく、前記ｎビット符号付き２進数結果の最上位ビットが０に等しい場合に負のオーバーフローが存在すると判定することを含む、
前項１７記載の方法。
【０１０５】
２０．（ｋ）前記算術論理演算装置において２つのｎビット符号なしオペランドについて減算演算を行って（ｎ＋１）ビット符号付き２進数中間結果を生成し、
（ｌ）前記（ｎ＋１）ビット符号付き２進数中間結果が負であるか否かを判定するためのチェックを行い、
（ｍ）そのステップ（ｌ）でのチェックにより前記（ｎ＋１）ビット符号付き２進数中間結果が負であると判定された場合に、その（ｎ＋１）ビット符号付き２進数中間結果について補数演算を行ってｎビット符号なし２進数最終結果を生成する、
という各ステップを更に含む、前項１７記載の方法。
【０１０６】
２１．（ｎ）前記減算演算が算術論理演算装置において同時に行われる複数の並列演算の内の１つとなるように前記ステップ（ｋ）と並列に追加の算術演算を行う、というステップを更に含む、前項２０記載の方法。
【０１０７】
２２．（ｆ）前記算術論理演算装置においてｎビット２の補数加算器を用いて２つのｎビット２進数オペランドについて第３の算術演算を行って、オーバーフロー演算が行われることのないｎビット２進数結果を生成する、
というステップを更に含む、前項１７記載の方法。
【０１０８】
２３．前記ステップ（ａ）において、前記第１の算術演算がｎビット２の補数加算器により行われる演算である、前項１５記載の方法。
【０１０９】
２４．（ｆ）ｎビット２進数オペランドを前記ステップ（ａ）を行う前にシフトする、というステップを更に含み、
前記ステップ（ｂ）が、前記ステップ（ｆ）を行った結果として正のオーバーフローが生じるか否かを判定するためのチェックを行うことを含む、
前項２３記載の方法。
【０１１０】
２５．（ｆ）前記第１の算術演算が、算術論理演算装置において同時に行われる複数の並列演算の内の１つとなるように前記ステップ（ａ）と並列に追加の算術演算を行う、
というステップを更に含む、前項１５記載の方法。
【０１１１】
２６．第１のｎビット符号付き２進数オペランドと第２のｎビット符号付き２進数オペランドとについて第１の算術演算を行ってｎビット正符号付き２進数結果を生成する第１の算術演算手段と、
その第１の算術演算手段に接続され、正のオーバーフローが存在する場合に前記ｎビットの正符号付き２進数結果に値２ｎ−１−１を割り当てる、第１の正オーバーフロー手段と、
前記第１の算術演算手段に接続され、負のオーバーフローが存在する場合に前記ｎビット正符号付き２進数結果に値０を割り当てる、第１の負オーバーフロー手段と
を備えることを特徴とする、計算システム。
【０１１２】
２７．前記第１の正オーバーフロー手段が、前記第１のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット正符号付き２進数結果の最上位ビットが１に等しい場合に前記ｎビット正符号付き２進数結果に値２ｎ−１−１を割り当てる手段を含み、
前記第１の負オーバーフロー手段が、前記ｎビット正符号付き２進数結果の最上位ビットが１に等しく、前記第１のｎビット符号付き２進数オペランドの最上位ビットと前記第２のｎビット符号付き２進数オペランドの最上位ビットとのどちらか１つが１に等しい場合に前記ｎビット正符号付き２進数結果に値０を割り当て、前記第１のｎビット符号付き２進数オペランドの最上位ビットと前記第２のｎビット符号付き２進数オペランドの最上位ビットとが共に１に等しい場合に前記ｎビット正符号付き２進数結果に値０を割り当てる手段を含む、
前項２６記載の計算システム。
【０１１３】
２８．ハードウェア論理素子により実施されるコンピュータ内の方法であって、この方法が、
（ａ）算術論理演算装置において第１のｎビット符号付き２進数オペランドと第２のｎビット符号付き２進数オペランドとについて第１の算術演算を行ってｎビット正符号付き２進数結果を生成し、
（ｂ）前記ｎビット正符号付き２進数結果に正のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｃ）そのステップ（ｂ）でのチェックにより正のオーバーフローが存在すると判定された場合に、前記ｎビット正符号付き２進数結果に値２ｎ−１−１を割り当て、
（ｄ）前記ｎビット正符号付き２進数結果に負のオーバーフローが存在するか否かを判定するためのチェックを行い、
（ｅ）そのステップ（ｄ）でのチェックにより負のオーバーフローが存在すると判定された場合に、前記ｎビット正符号付き２進数結果に値０を割り当てる、
という各ステップを含む、ハードウェア論理素子により実施されるコンピュータ内の方法。
【０１１４】
２９．前記ステップ（ｂ）が、前記第１のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記第２のｎビット符号付き２進数オペランドの最上位ビットが０に等しく、前記ｎビット正符号付き２進数結果の最上位ビットが１に等しい場合に正のオーバーフローが存在すると判定することを含み、
前記ステップ（ｄ）が、前記ｎビット正符号付き２進数結果の最上位ビットが１に等しく、前記第１のｎビット符号付き２進数オペランドの最上位ビットと前記第２のｎビット符号付き２進数オペランドの最上位ビットとのどちらか１つが１に等しい場合に負のオーバーフローが存在すると判定し、前記第１のｎビット符号付き２進数オペランドの最上位ビットと前記第２のｎビット符号付き２進数オペランドの最上位ビットとが共に１に等しい場合に負のオーバーフローが存在すると判定することを含む、
前項２８記載の方法。
【０１１５】
【発明の効果】
本発明は上述のように構成したので、算術演算の結果として生じる正および負のオーバーフローを効率的に取り扱うコンピュータシステムを提供することが可能となる。
【図面の簡単な説明】
【図１】従来の演算処理装置内の演算実行データパスを示す簡略ブロック図である。
【図２】本発明の好適な実施例による演算処理装置内の演算実行データパスを示す簡略ブロック図である。
【図３】本発明の好適な実施例による図２に示すプリシフタについてのオーバーフロー計算を行う論理を示す図である。
【図４】本発明の好適な実施例による図２に示す算術論理演算装置（ＡＬＵ）についてのオーバーフロー計算を行う論理を示す図である。
【図５】本発明の好適な実施例による図２に示す飽和選択論理ブロックを実施する論理を示す図である。
【図６】本発明の好適な実施例による図２に示すＡＬＵについての算術結果を表すのに用いられる飽和論理を示す図である。
【図７】本発明の好適な代替実施例による図２に示すＡＬＵの簡略ブロック図である。
【図８】本発明の好適な実施例による図２に示すＡＬＵ内の２の補数加算器の実施例を示す図である。
【図９】本発明の好適な代替実施例による図２に示すＡＬＵの代替的な簡略ブロック図である。
【図１０】本発明の好適な実施例によるプリシフタの簡略ブロック図である。
【図１１】本発明の別の好適な実施例による図２に示すＡＬＵについてのオーバーフロー計算を行う論理を示す図である。
【図１２】本発明の別の好適な実施例による図２に示す飽和選択論理ブロックを実施する論理を示す図である。
【符号の説明】
２６                  ＡＬＵ
２７                  プリシフタ
２８                  補数演算回路
２０１                飽和論理
２０２                飽和選択ブロック
２０４，２０５        オーバーフロー信号
２０６                飽和選択信号
２０７                ＡＬＵ結果
２０８                オーバーフロー修正結果
【図１】
0003589719.tif 000002
【図２】
0003589719.tif 000003
【図３】
0003589719.tif 000004
【図４】
0003589719.tif 000005
【図５】
0003589719.tif 000006
【図６】
0003589719.tif 000007
【図７】
0003589719.tif 000008
【図８】
0003589719.tif 000009
【図９】
0003589719.tif 000010
【図１０】
0003589719.tif 000011
【図１１】
0003589719.tif 000012
【図１２】
0003589719.tif 000013