(57)【特許請求の範囲】
【請求項１】
コンピュータマイクロプロセッサ内で負の２値数を算術右シフトするシフト演算装置において、
該２値数を算術右シフトすべきシフト量を決定する手段と、
該シフト量の１の補数を決定する手段と、
該２値数の長さに等しい長さのマスクを生成する手段と、
該シフト量だけ該２値数について論理右シフトを行う手段と、
該シフト量の１の補数だけ該マスクについて論理左シフトを行う手段と、
該シフトされた２値数及び該シフトされたマスクを演算に対する入力として使用して、論理ＯＲ演算を行う手段と、
を備えるシフト演算装置。
【請求項２】
あるシフト量だけ負の２値数を右シフトするシフト演算装置において、
該シフト量の１の補数を決定する手段と、
前記２値数の符号を値とし前記２値数の長さに等しい長さを持つマスクを生成する手段と、
該シフト量だけ該２値数を論理右シフトする手段と、
該シフト量の１の補数だけ該マスクを論理左シフトする手段と、
該シフトされた２値数及び該シフトされたマスクの論理ＯＲを決定する手段と、
を備えるシフト演算装置。
【請求項３】
あるシフト量だけ負の２値数を右シフトするシステムにおいて、
該シフト量の１の補数を決定するための第１の決定手段と、
前記２値数の符号を値とし前記２値数の長さに等しい長さを持つマスクを生成するためのマスク生成手段と、
該シフト量だけ該２値数を論理右シフトするための第１のシフト手段と、
該シフト量の１の補数だけ前記マスクを論理左シフトするための、前記第１の決定手段に結合された第２のシフト手段と、
該シフトされた２値数及び該シフトされたマスクの論理ＯＲを決定するための、前記第１のシフト手段及び前記第２のシフト手段に結合された第２の決定手段と、
を備えるシステム。
【請求項４】
コンピュータマイクロプロセッサ内で負の２値数をあるシフト量だけ算術右シフトするためのシステムにおいて、
２値数について論理右シフト演算を行うための右シフト装置と、
該シフト量の１の補数だけ、該２値数の長さに等しい長さのマスクを論理左シフト演算するための左シフト装置と、
該左シフト装置及び該右シフト装置に結合され、該左シフト装置及び該右シフト装置を制御するためのシフトカウント制御機構と、
該右シフト装置及び該左シフト装置からの入力を受信し、２つの該入力の論理ＯＲを出力するように構成されたＯＲゲートと、
を備えるシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は一般に、コンピュータマイクロプロセッサによる数の算術及び論理シフトに関する。
【０００２】
【従来の技術】
数のシフト演算は、近代的マイクロプロセッサコードの標準的機能である。シフトは乗算及び除算演算を実施するため、並びにさまざまなマスキングその他の演算のために有用である。
【０００３】
シフト演算には、論理シフト及び算術シフトの２種類が存在する。当業者にとっては既知の通り、ｍビット２値数をシフト量ｎだけ論理右シフトすると、ｎ最上位ビット内にゼロを有し、それに続いてもとの数の（ｍ−ｎ）最上位ビットがくる新しい数が結果として得られる。例えば、数１００１１０１１が３だけ右シフトされた場合、結果は０００１００１１となる。同じ要領で、論理左シフトは、（ｍ−ｎ）最上位ビットとそれに続くｎ個のゼロから成る数を結果としてもたらす。かくして１００１１０１１が３だけ左シフトされると、結果は１１０１１０００となる。
【０００４】
論理右シフトとは異なり、算術右シフトは、シフトを行うとき数の最上位ビットを保存する。標準的には、最上位ビットは、その数の（正又は負の）符号を表わし、残りのビットは数字の絶対値を特定する。最上位ビットが１である場合、すなわち数が負である場合には、右シフトされるとその数の最上位ビット内にｎ個の１ が挿入される。例えば、上述の例においては、１００１１０１１を３だけ算術右シフトすると、結果として１１１１００１１が得られる。数が正である場合、算術右シフトが論理右シフトと全く同じ結果を生み出すことになる、という点に留意されたい。
【０００５】
【発明が解決しようとする課題】
過去において、一般に使用されたマイクロプロセッサ命令は、数を右か左にローテートさせることになるローテート機能であった。例えば、１００１１０１１を３だけ右ローテートさせると０１１１００１１となる。しかしながら現在、ローテート命令は一般的に使用されておらず、主として、より古いマイクロコードとの後方互換性（ｂａｃｋｗａｒｄ  ｃｏｍｐａｔｉｂｉｌｉｔｙ）を提供するレガシー命令として利用可能である。しかしながら、ローテータはマイクロコードシフト演算を行うために慣習的に用いられたし、現在も用いられている。
【０００６】
ローテータは比較的大きい面積をとり、又ｍビットローテータには、出力端から戻って入力端まで至るｍ本のワイヤが必要であることから、左シフト及び右シフトの両方の演算を実施する能力をなおももちながらローテータのうちの少なくとも１つを削除することが望ましかった。これは、２値数ｘを幾分かの量ｒだけ右ローテートさせることがｒの２の補数だけｘを左ローテートさせることと等価であるという認識によって可能になった。例えば、左ローテータを用いて１１０１００１０という数を３だけ右ローテートさせることは、３の２の補数である５だけこの数を左ローテートさせることと等価である。いずれの方法を用いても、結果は同じ、すなわち０１０１１０１０である。ローテータを用いて論理シフトを実施するためには、それぞれ右又は左シフトのためにゼロが最上位ビット又は最下位ビットのいずれかに付加されなくてはならなくなる。そして算術右シフトのためには、最上位ビットに対し１が付加されなくてはならなくなる。従って、ローテータに加えて、シフト演算を補完するためにマスキング論理が使用された。
【０００７】
図１は、左ローテータを用いてシフト演算を実施するためのシステム１００の従来技術の例を示す。システム１００は、シフト量ラッチ１０１、シフト量１０２、左シフト制御ライン１０４、右シフト制御ライン１０６、マルチプレクサ１１０、２の補数ハードウェア１１２、マルチプレクサ制御ライン１０８、左ローテータ１１４、マスキング論理１１６、ローテート済みデータ出力１１８、シフトカウント１２０、シフト済みデータ１２２、データラッチ１２４、シフトすべきデータ１２５、及びシフト量入力１２６を含む。ラッチ１０１は左シフト制御ライン１０４及び右シフト制御ライン１０６に結合される。左シフト制御ライン１０４はそれ自体マルチプレクサ１１０に結合されている。右シフト制御ライン１０６は、さらに、マルチプレクサ１１０に結合される２の補数ハードウェア１１２に結合されている。マルチプレクサ制御ライン１０８はさらにマルチプレクサ１１０に結合されている。マルチプレクサ１１０はさらに、同じくマスキング論理１１６に結合される左ローテータ１１４に結合されている。マスキング論理１１６はさらにローテート済みデータ出力１１８及びシフトカウント１２０に結合されている。
【０００８】
シフト量１０２はラッチ１０１を介して入力される。シフト量１０２は左シフト演算については左シフト制御ライン１０４を通して、又右シフト演算については右シフト制御ライン１０６を通して渡される。マルチプレクサ１１０はまた、マルチプレクサ制御ライン１０８にも接続され、マルチプレクサ１１０の出力チャネルは、ラッチ１２４からシフトすべきデータ１２５をも受信する左ローテータ１１４の入力チャネルに結合されている。左ローテータ１１４の出力チャネルはデータをマスキング論理１１６に送る。マスキング論理出力は、シフト済みデータ１２２である。
【０００９】
シフト量１０２は、左シフトされるためデータライン１０４を通してか、又は右シフトされるためデータライン１０６を通して渡される。制御ライン１０８は、ｍｕｘとしても知られているマルチプレクサ１１０によってどの入力が使用されるかを制御する。あらゆる右シフト演算について、シフト量１０２は、マルチプレクサ（ｍｕｘ）１１０に到達する前に、付加的な２の補数ハードウェア１１２によりその２の補数へとまず変換される。
【００１０】
２の補数を使用することで第２のローテータに必要な空間が無くなるものの、２の補数を決定してマスキング機能を実施する演算は、望ましくないほどに時間がかかり、それでもなお左ローテータ１１４及びマスキング論理１１６を必要とする。従って必要とされるのは、小さな面積を用いてローテータの必要性をなくしながら、２の補数構造及び演算よりも少ないオーバーヘッドしか必要としない、算術右シフト演算を実施する構造及び方法である。
【００１１】
【課題を解決するための手段】
本発明によると、ｎがｍ−１以下であるものとして、ｍビットの負の数字をｎだけ算術右シフトする演算を実施するための構造及び方法が提供される。該構造は、左及び右シフタ、シフトカウント、論理ＯＲゲート及び従来のデータ経路を含む。シフタは、シフトカウントに接続され、シフトすべきデータを受信するように構成されている。シフタは、それ自体出力ラッチに接続されたＯＲゲートに付加的に結合されている。右シフタは、シフトすべき数に対する論理右シフトを実行する。例えば、ｍビットの負の数をｎだけ算術右シフトすべきである場合、右シフタは、ｍビットの負の数をｎだけ論理右シフトさせる。このとき、ｎの１の補数が決定され、左シフタは、１のｍビットマスクについて左シフトを実施し、マスクをｎの１の補数だけ左シフトさせる。次に、２つのシフト演算の結果について、ＯＲ演算が実施され、ｎの２の補数を計算する必要なく所望の算術右シフト結果を生成する。
【００１２】
【発明の実施の形態】
図は、例示のみを目的として本発明の好ましい実施形態を示している。当業者であれば以下の記載から、本明細書に開示されている構造及び方法の変形実施形態を、請求対象の発明の原理から逸脱することなく利用することができる、ということを直ちに認識することだろう。
【００１３】
２の補数の削除
ここで図２を参照すると、本発明の実施形態の全体的アーキテクチャのブロック図が示されている。図２は、６３ビットの算術右シフトを実施するためのシステムを例示しているものの、別のシフト量を使用することもできるということは当業者には容易に明らかになるだろう。図２は、ラッチ１２４、入力データ１２５、右マスキング論理２２２、右シフトマルチプレクサ（ｍｕｘ）２２０、従来の左及び右シフタ（２０２，２０４）、シフト量１０２、１の補数ハードウェア２２４、１の補数セレクタｍｕｘ２２６、シフト演算ハードウェア１２０、右シフト出力２１２、左シフト出力２１４、左マスキング論理２１６、左シフト演算のためのマルチプレクサ（ｍｕｘ）２１８、ＯＲゲート２０８及び結果２１０を示している。
【００１４】
入力データ１２５は、左マスキング論理２１６、左シフトｍｕｘ２１８及び右シフトｍｕｘ２２０に結合されている入力ラッチ１２４を通して提供される。左マスキング論理２１６はさらに左シフトｍｕｘ２１８に結合されている。右シフトｍｕｘ２２０はさらに、右マスキング論理２２２、シフト演算１２０及び右シフタ２０４に結合されている。シフト演算１２０は付加的に左シフトｍｕｘ２１８及び１の補数セレクタｍｕｘ２２６に結合されている。１の補数セレクタｍｕｘ２２６はさらに６３ビット左シフタ２０２、１の補数ハードウェア２２４及びシフト量１０２に結合されている。１の補数ハードウェア２２４は付加的に、それ自体さらに右シフタ２０４に結合されるシフト量１０２に結合されている。右シフタ２０４は、さらにＯＲゲート２０８に結合される右シフト出力２１２に付加的に結合されている。左シフタ２０２もまた、ｍｕｘ２１８に対して、及びそれ自体出力データ２１０に結合されるＯＲゲート２０８にさらに結合される左シフト出力２１４に対して結合されている。
【００１５】
数字１２５をシフトすべきである場合、これはラッチ１２４を介して右シフトｍｕｘデバイス２２０内に入力される。算術右シフトの場合には、右シフトｍｕｘ２２０がシフト情報１２０を読みとり、右マスキング論理２２２からの入力を無視し、右シフタ２０４に対する入力としてデータ１２５を渡す。換言すると、左マスキング論理２１６はオール１のマスクを生成（作成）し、左シフトｍｕｘ２１８内にそのマスクを入力する。シフト演算１２０は算術右シフトを表わすことから、ｍｕｘ２１８は“１”のマスクを左シフタ２０２に渡すことになる。論理右シフトデバイス２０４の演算について、以下で図３を参照しながら詳述する。数１２５を右シフトすべきビット数を表わすシフト量１０２はまた、論理右シフトデバイス２０４、１の補数セレクタｍｕｘ２２６及び１の補数ハードウェア２２４内にも入力される。ＯＲゲート２０８の出力は、シフト量１０２だけ算術右シフトした後のもとの数１２５となる。
【００１６】
ここで図３を参照すると、４ビット数字を最高２ビットだけ論理右シフトするための従来のシフタの一実施形態が示されている。図３（ａ）は、２ビットシフタ３０４及び１ビットシフタ３０６を描いている。図３は、付加的に２ビットシフト制御量３０８、出力３１２、及び１ビットシフト制御量３１６を描いている。図３（ｂ）中の表３１０は、シフト制御量３０８、３１６に対するさまざまな入力の例を示している。２ビットシフタ３０４は、１ビットシフタ３０６に結合される。２ビットシフタ３０４は数３０２及びシフト制御量３０８の入力を受信する。シフタ３０４の出力３１２はシフト量３１６のように、シフタ３０６に対する入力として役立つ。次にシフタ３０６はデータ３１４を出力する。
【００１７】
４ビット数３０２は、Ｘ3Ｘ2Ｘ1Ｘ0として表わすことができ、シフタ３０４内に入力される。シフタ３０４は、数３０２について２ビットだけの論理右シフトを実施でき、そうでなければ単にその数３０２を未シフト状態のままにしておくこともできる。シフタ３０４がシフトを実施するか否かは、制御ライン３０８からの入力によって左右される。表３１０中に例示されているように、数３０２を０ビット又は１ビットだけシフトさせなくてはならない場合、シフタ３０４に対する入力信号３０８は０となり、シフタ３０４によっていかなるシフトも実施されなくなる。あるいは、２又は３ビットシフトを実施すべき場合、入力信号３０８は、１となり、シフタ３０４は数３０２を２だけ右シフトさせることになる。いずれの状況においても、シフタ３０４の出力３１２はこのとき、シフタ３０６に対し入力としてひき続き渡される。シフタ３０４の出力３１２はＹ3Ｙ2Ｙ1Ｙ0として表わすことができる。シフタ３０６によって何らかのシフトが行われるか否かは、信号３１６からの入力信号により左右される。ここで再度表３１０を参照すると、数３０２のための所望のシフト量が１又は３ビットであるとき、信号３１６は１であるはずであるということができる。信号３１６は、数３０２についての所望のシフト量が０又は２であるとき、０となる。ひとたびシフトが実施されたならば、必要な場合、次に結果として得られた数３１４が出力される。
【００１８】
本発明は、２の補数の数を計算する必要なく、算術右シフトを実施することができる。２の補数は、ｎだけ右ローテートさせることがｎの２の補数だけの左ローテートに等しいという考察事実に基づいて、左及び右の両方の方向にローテートさせるための単一のローテータ１１４の使用を可能にしたことから、過去において有用であった。しかしながら当業者であれば認識するように、ローテート演算はもはや必要とされず、マイクロコード命令セットから徐々に排除されつつある。単にシフト演算を実施するためだけにローテータ１１４を含めることで貴重な空間を使用し続ける代わりに、本発明は、それぞれ左及び右シフタ（２０２，２０４）を使用することにより、論理左シフト及び論理右シフトを計算する。
【００１９】
負の数の算術右シフトを実施するためには、最上位ビット内の１が符号拡張されなくてはならない。これは、以前はローテータ１１４及びマスキング論理１１６を用いて行われた。しかしながら本発明では、両方に対する必要性がなくなっている。
【００２０】
算術右シフトについては、右シフタ２０４がシフトを実施するのに使用されているが、その他の演算については、左シフタ２０２が利用可能である。かくして、そうでなければ動作停止中の左シフタ２０２を右シフタ２０４と並行して使用するオーバーヘッドは、無視できるほどのものである。
【００２１】
当業者であればわかるように、負のｍビット数１２５がｎビットだけ右シフトされたときに、同じ数の論理右シフトがｎ最上位ビット内にゼロを有することになり、同じ数の算術右シフト２１０がｎ最上位ビット内に１を有することになる。かくして論理右シフト演算の結果がわかっている場合、算術右シフト結果２１０は、ｎ最上位ビットをゼロから１に変えることによって得ることができる。このような変更を達成すべき１つの方法は、ゲート２０８といったような従来のＯＲゲートを用いてＯＲ演算を実行することによるものである。演算に対する入力は、論理右シフト演算の結果２１２及びマスク２１４となる。マスク２１４は、長さｍのものであるべきであり、そのｎ最上位ビットの各々の中に１を有することになる。
【００２２】
当該技術分野においては既知のとおり、１から成るｍビット数から始めその数をｎの２の補数だけ左シフトさせることにより、マスクを作成（生成）することができる。例えば、必要とされる演算が負の２値数１０１０１１０１（１２５）について３だけ算術右シフトを実施することであると仮定する。３だけの論理右シフトが、０００１０１０１を生み出すことになる。３の２の補数は５であり、従って適当なマスクを得るためには、１１１１１１１１が５だけ左シフトされ、結果は１１１０００００である。２つの数字のＯＲをとると１１１１０１０１が結果として得られ、これは、出発数１０１０１１０１（１２５）の正しい３だけの算術右シフト１２２である。上述した方法により得られたマスクは、正しい算術右シフト結果を決定するように働くことになるが、それはここでも２の補数の数の計算を必要とする。
【００２３】
ここで図４を参照すると、本発明の実施形態の演算のフローチャートが示されている。第１段階は、負のｍビット２値数１２５及びシフト量ｎ１０２を受取ることである（４０２）。次に、２値数１２５は、ｎだけ論理右シフトされる（４０４）。ｍビットマスクが構築され（４０６）、シフト量ｎの１の補数が決定される（４０８）。次にマスクは、ｎの１の補数によって左シフトされ（４１０）、２つの数は合わせてＯＲされる（４１２）。ＯＲ演算の結果（２１０）は次に出力される（４１４）。
【００２４】
本発明は、２の補数を計算するという必要条件を達成する。その代わり、本発明は、右シフト量１０２の１の補数のみを計算する（４０８）。ある数の１の補数を決定することは単にその数を否定するだけのことであるため、同じ数１０２の２の補数を計算することに比べて迅速な演算である。さらに、ｎの１の補数は、ｎの２の補数よりも正確に１だけ少なくなる。以上で示した例においては、シフト量ｎは３であり、その２の補数は５であった。その代わりに１の補数が計算される場合、結果は４である。上述の例で、オール１から成るｍビットマスクが５ではなく４だけ左シフトされた場合、マスクはこのとき１１１０００００ではなく１１１１００００となる。２つの結果の間の差異は、１の補数を用いたシフトによると、ｎの２の補数だけ左シフトされた後に存在するような１ではなく０が（ｎ＋１）番目の最上位ビット内にあるという結果がもたらされるという点にある。しかしながら、算術右シフトされている数１２５が負であるためにその最上位ビット内に常に１を有することから、このことが正しい算術右シフト結果２１０を得る上で障害となることはない。かくして、ｎビットだけ論理右シフトされた後、負の２値数の（ｎ＋１）番目の最上位ビットは常に１となる。その結果、ＯＲ演算のためには算術右シフトされている数字の（ｎ＋１）番目の最上位ビットが常に１であることから、マスクの（ｎ＋１）番目の最上位ビットが１であるか０であるか否かは、関係のないことであり、ＯＲ演算の結果も常に１となる。従って、マスクを得るためにｎの２の補数だけ左シフトする必要はなくむしろ、ｎの１の補数だけ左シフトする（４１０）ことしか必要でない。このことは、右シフタ２０４が一次シフトを行っている間に左シフタ２０２によって容易に行うことができ、その後２つの数のＯＲ演算４１２が続く。
【００２５】
上述の説明から、本明細書に開示されている本発明がｍビットの負の数のｎだけの算術右シフトを実施する新規で有利なシステム及び方法を提供することは明らかであろう。もはやローテータ又は特殊なマスキング論理の必要性は存在しない。
【００２６】
本発明による好ましい実施形態は以下のとおりである。
【００２７】
（付記１）  コンピュータマイクロプロセッサ内で負の２値数を算術右シフトする方法において、
該２値数を算術右シフトすべきシフト量を決定する段階と、
該シフト量の１の補数を決定する段階と、
該２値数の長さに等しい長さのマスクを生成する段階と、
該シフト量だけ該２値数について論理右シフトを行う段階と、
該シフト量の１の補数だけ該マスクについて論理左シフトを行う段階と、
該シフトされた２値数及び該シフトされたマスクを演算に対する入力として使用して、論理ＯＲ演算を行う段階と、
を備える方法。
（付記２）  該シフト量がユーザにより特定される付記１に記載の方法。
【００２８】
（付記３）  あるシフト量だけ負の２値数を右シフトする方法において、
該シフト量の１の補数を決定する段階と、
論理シフト結果を算術シフト結果へと変換するためのマスクを生成する段階と、
該シフト量だけ該２値数を論理右シフトする段階と、
該シフト量の１の補数だけ該マスクを論理左シフトする段階と、
該シフトされた２値数及び該シフトされたマスクの論理ＯＲを決定する段階と、
を備える方法。
（付記４）  該マスクが該２値数の長さと等しい長さを持つ付記３に記載の方法。
【００２９】
（付記５）  あるシフト量だけ負の２値数を右シフトするシステムにおいて、
該シフト量の１の補数を決定するための第１の決定手段と、
論理シフトを算術シフトに変換するための、前記第１の決定手段に結合された第２の決定手段と、
該シフト量だけ該２値数を論理右シフトするための、前記第１の決定手段に結合された第１のシフト手段と、
該シフト量の１の補数だけＦＩＸ「第２の決定手段」マスクを論理左シフトするための、前記第１の決定手段に結合された第２のシフト手段と、
該シフトされた２値数及び該シフトされたマスクの論理ＯＲを決定するための、前記第１のシフト手段に結合された第３の決定手段と、
を備えるシステム。
（付記６）  該第２の決定手段がマスキング用の手段を備える付記５に記載のシステム。
【００３０】
（付記７）  該マスキング用の手段が２値数の長さに等しい長さのマスクを決定するための手段をさらに備える付記６に記載のシステム。
【００３１】
（付記８）  コンピュータマイクロプロセッサ内で負の２値数を算術右シフトするためのシステムにおいて、
２値数について論理右シフト演算を行うための右シフト装置と、
２値数について論理左シフト演算を行うための左シフト装置と、
該左シフト装置及び該右シフト装置に結合され、該左シフト装置及び該右シフト装置を構成するためのシフトカウント制御機構と、
該右シフト装置及び該左シフト装置からの入力を受信し、２つの該入力の論理ＯＲを出力するように構成されたＯＲゲートと、
を備えるシステム。
（付記９）  予め定められた長さのマスクを生成するための、該左シフト装置に結合された第１のマスキング装置をさらに備える付記８に記載のシステム。
【００３２】
（付記１０）  予め定められた長さのマスクを生成するための、該右シフト装置に結合された第２のマスキング装置をさらに備える付記９に記載のシステム。
【００３３】
（付記１１）  該マスクの予め定められた長さが、シフトされている２値数の長さに等しい付記９に記載のシステム。
【図面の簡単な説明】
【図１】従来技術を示すブロック図である。
【図２】本発明によるシフト用アーキテクチャの一実施形態を例示するブロック図である。
【図３】（ａ）は本発明による最高３ビットのシフト値について符号化された論理右シフトデバイスの実施形態のブロック図であり、（ｂ）はさまざまなシフト制御量を示す表である。
【図４】本発明による算術右シフトデバイスの演算のためのプロセスの実施形態のフローチャートである。
【符号の説明】
１０１…シフト量ラッチ
１０４…左シフト制御ライン
１０６…右シフト制御ライン
１０８…マルチプレクサ制御ライン
１１０…マルチプレクサ
１１４…左ローテータ
１２４…データラッチ
２０２…左シフタ
２０４…右シフタ
２０８…ＯＲゲート
２１８…左シフトマルチプレクサ（ｍｕｘ）
２２０…右シフトマルチプレクサ（ｍｕｘ）
２２６…１の補数セレクタマルチプレクサ（ｍｕｘ）
３０４…２ビットシフタ
３０６…１ビットシフタ
【図１】
0004278320.tif 000002
【図２】
0004278320.tif 000003
【図３】
0004278320.tif 000004
【図４】
0004278320.tif 000005