(57)【要約】【課題】  シフト演算回路の回路サイズを従来に比べて小さくする。【解決手段】  シフト演算回路は、ビット番号の一部が重複する複数の内部バスにそれぞれ接続されるとともに、入力データを分割した複数の分割データのいずれかと、複数のシフト量信号のいずれかとを受け、対応する内部バスにおいて基準のビット位置から対応するシフト量信号が示すシフト量だけシフトさせた範囲に、対応する分割データを出力する複数のシフト回路と、第１モード中に、シフト量が共通の複数のシフト量信号を複数のシフト回路に出力するとともに、第２モード中に、複数のシフト回路毎のシフト量信号を、複数の内部バスにおいてビット番号が重複しないシフト範囲を示すシフト量信号に変換するシフト制御回路と、複数の内部バスにおいて、ビット番号が重複するビットから有効な分割データを選択するビット選択回路を有する。【選択図】    図１
2018128727.tif 000002
【特許請求の範囲】
【請求項１】
入力データのビット幅より大きいビット幅を有し、ビット番号の一部が重複する複数の内部バスのいずれかである対応内部バスにそれぞれ接続されるとともに、入力データを分割した複数の分割データのいずれかである対応分割データと、複数のシフト量信号のいずれかである対応シフト量信号とを受け、前記対応内部バスにおいて基準のビット位置から前記対応シフト量信号が示すシフト量だけシフトさせた範囲に前記対応分割データをそれぞれ出力する複数のシフト回路と、
第１モード中に、シフト量が共通の複数のシフト量信号をそれぞれ受け、受けた複数のシフト量信号を前記対応シフト量信号として前記複数のシフト回路にそれぞれ出力するとともに、第２モード中に、前記複数のシフト回路毎にシフト量信号を受け、受けたシフト量信号を、前記複数の内部バスにおいてビット番号が重複しないシフト範囲を示す対応シフト量信号に変換して前記複数のシフト回路にそれぞれ出力するシフト制御回路と、
前記複数の内部バスにおいて、ビット番号が重複するビットから有効な対応分割データを選択して出力バスに出力するビット選択回路を有することを特徴とするシフト演算回路。
【請求項２】
前記複数の内部バスのそれぞれにおける前記基準のビット位置は、分割データのビット幅分ずらして割り当てられることを特徴とする請求項１記載のシフト演算回路。
【請求項３】
前記複数のシフト回路の各々は、前記対応内部バスにおいて前記対応分割データを出力しないビットを論理０に設定する機能を有し、
前記ビット選択回路は、前記複数の内部バスにおいてビット番号が重複するビットが入力に接続された複数のオア回路を有することを特徴とする請求項１または請求項２記載のシフト演算回路。
【請求項４】
前記シフト制御回路は、前記第２モード中に、前記複数のシフト回路にそれぞれ出力する対応シフト量信号における所定数の上位ビットを、互いに異なる論理に設定することを特徴とする請求項１ないし請求項３のいずれか１項記載のシフト演算回路。
【請求項５】
前記複数の内部バスにおいてビット番号が重複しないビットに出力される対応分割データを前記出力バスに出力するバッファ回路を、さらに有することを特徴とする請求項１ないし請求項４のいずれか１項記載のシフト演算回路。
【請求項６】
入力データのビット幅より大きいビット幅を有し、ビット番号の一部が重複する複数の内部バスのいずれかである対応内部バスにそれぞれ接続された複数のシフト回路とを有するシフト演算回路のシフト演算方法において、
前記複数のシフト回路の各々が、入力データを分割した複数の分割データのいずれかである対応分割データと、複数のシフト量信号のいずれかである対応シフト量信号とを受け、前記対応内部バスにおいて基準のビット位置から前記対応シフト量信号が示すシフト量だけシフトさせた範囲に前記対応分割データをそれぞれ出力し、
前記シフト演算回路が有するシフト制御回路が、第１モード中に、シフト量が共通の複数のシフト量信号をそれぞれ受け、受けた複数のシフト量信号を前記対応シフト量信号として前記複数のシフト回路にそれぞれ出力するとともに、第２モード中に、前記複数のシフト回路毎にシフト量信号を受け、受けたシフト量信号を、前記複数の内部バスにおいてビット番号が重複しないシフト範囲を示す対応シフト量信号に変換して前記複数のシフト回路にそれぞれ出力し、
前記シフト演算回路が有するビット選択回路が、前記複数の内部バスにおいて、ビット番号が重複するビットから有効な対応分割データを選択して出力バスに出力することを特徴とするシフト演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シフト演算回路およびシフト演算方法に関する。
【背景技術】
【０００２】
近時、画像処理等で使用するデータをＣＰＵ（Central Processing Unit）等のプロセッサを用いて効率的に処理するために、１つの命令コードに基づいて複数のデータを並列に演算するＳＩＭＤと称する手法が提案されている。ここで、ＳＩＭＤは、Single Instruction Multiple Dataの略である。
【０００３】
この種のプロセッサは、加算器、論理ユニットまたはシフタ等の複数の演算器を有し、命令がスカラモードを示す場合、複数の演算器を結合して動作させ、命令がベクトルモードを示す場合、複数の演算器を互いに独立して動作させる（例えば、特許文献１参照）。また、この種のプロセッサは、シフトデータ選択回路を介して互いに接続される一対のシフタと一対のＡＬＵ（Arithmetic Logic Unit）とを有する。そして、プロセッサは、ＡＬＵを分割せずに動作させるモードでは、ＡＬＵを結合して動作させるとともにシフタを結合して動作させる。プロセッサは、ＡＬＵを分割して動作させるモードでは、ＡＬＵを互いに独立して動作させ、シフタを互いに独立して動作させる（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平８−５０５７５号公報
【特許文献２】特開２００９−１５５５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、浮動小数点加算器等の演算器にＳＩＭＤ機能を搭載する場合、演算器の各要素は、ＳＩＭＤ命令以外の通常命令を実行する場合とＳＩＭＤ命令を実行する場合とで機能が切り替えられる。例えば、浮動小数点加算器または浮動小数点乗算加算器において、仮数の桁合わせ実行するためのシフト演算回路は、ＳＩＭＤ命令の実行時に、分割された複数のデータをそれぞれシフトする複数のシフト回路を有する。複数のシフト回路に供給されるデータのビットが重複する場合、ビットが重複しない場合に比べてシフト回路の回路規模は増大する。しかしながら、ビットを重複させずに複数のシフト回路にデータを供給させる手法は提案されていない。
【０００６】
１つの側面では、本発明は、シフト演算回路の回路サイズを従来に比べて小さくすることを目的とする。
【課題を解決するための手段】
【０００７】
一つの実施態様では、シフト演算回路は、入力データのビット幅より大きいビット幅を有し、ビット番号の一部が重複する複数の内部バスのいずれかである対応内部バスにそれぞれ接続されるとともに、入力データを分割した複数の分割データのいずれかである対応分割データと、複数のシフト量信号のいずれかである対応シフト量信号とを受け、対応内部バスにおいて基準のビット位置から対応シフト量信号が示すシフト量だけシフトさせた範囲に対応分割データをそれぞれ出力する複数のシフト回路と、第１モード中に、シフト量が共通の複数のシフト量信号をそれぞれ受け、受けた複数のシフト量信号を対応シフト量信号として複数のシフト回路にそれぞれ出力するとともに、第２モード中に、複数のシフト回路毎にシフト量信号を受け、受けたシフト量信号を、複数の内部バスにおいてビット番号が重複しないシフト範囲を示す対応シフト量信号に変換して複数のシフト回路にそれぞれ出力するシフト制御回路と、複数の内部バスにおいて、ビット番号が重複するビットから有効な対応分割データを選択して出力バスに出力するビット選択回路を有する。
【０００８】
別の実施態様では、入力データのビット幅より大きいビット幅を有し、ビット番号の一部が重複する複数の内部バスのいずれかである対応内部バスにそれぞれ接続された複数のシフト回路とを有するシフト演算回路のシフト演算方法において、複数のシフト回路の各々が、入力データを分割した複数の分割データのいずれかである対応分割データと、複数のシフト量信号のいずれかである対応シフト量信号とを受け、対応内部バスにおいて基準のビット位置から対応シフト量信号が示すシフト量だけシフトさせた範囲に対応分割データをそれぞれ出力し、シフト演算回路が有するシフト制御回路が、第１モード中に、シフト量が共通の複数のシフト量信号をそれぞれ受け、受けた複数のシフト量信号を対応シフト量信号として複数のシフト回路にそれぞれ出力するとともに、第２モード中に、複数のシフト回路毎にシフト量信号を受け、受けたシフト量信号を、複数の内部バスにおいてビット番号が重複しないシフト範囲を示す対応シフト量信号に変換して複数のシフト回路にそれぞれ出力し、シフト演算回路が有するビット選択回路が、複数の内部バスにおいて、ビット番号が重複するビットから有効な対応分割データを選択して出力バスに出力する。
【発明の効果】
【０００９】
１つの側面では、本発明は、シフト演算回路の回路サイズを従来に比べて小さくすることができる。
【図面の簡単な説明】
【００１０】
【図１】シフト演算回路の一実施形態を示す図である。
【図２】図１に示すシフト演算回路が搭載される演算処理装置の一例を示す図である。
【図３】図２に示す浮動小数点加算器の一例を示す図である。
【図４】図１に示すシフト制御回路の一例を示す図である。
【図５】図１に示すバッファ回路とビット選択回路の一例を示す図である。
【図６】図１に示すシフト演算回路の通常モードでの動作の一例を示す図である。
【図７】図１に示すシフト演算回路のＳＩＭＤモードでの動作の一例を示す図である。
【図８】図１に示すシフト演算回路にパリティビットを予測するパリティ予測器を内蔵する場合の一例を示す図である。
【図９】図８に示すシフト演算回路において、データとパリティビットとの割り当ての一例を示す図である。
【図１０】シフト演算回路の別の例を示す図である。
【図１１】シフト演算回路の別の実施形態を示す図である。
【図１２】図１１に示すシフト制御回路の一例を示す図である。
【図１３】図１１に示すバッファ回路とビット選択回路の一例を示す図である。
【図１４】図１１に示すシフト演算回路の通常モードでの動作の一例を示す図である。
【図１５】図１１に示すシフト演算回路のＳＩＭＤモードでの動作の一例を示す図である。
【図１６】シフト演算回路の別の実施形態を示す図である。
【図１７】図１６に示すシフト制御回路の一例を示す図である。
【図１８】図１６に示すバッファ回路とビット選択回路の一例を示す図である。
【図１９】図１６に示すシフト演算回路の通常モードでの動作の一例を示す図である。
【図２０】図１６に示すシフト演算回路のＳＩＭＤモードでの動作の一例を示す図である。
【図２１】図１６に示すシフト演算回路のシフト動作の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を用いて実施形態を説明する。
【００１２】
図１は、シフト演算回路の一実施形態を示す。図１に示すシフト演算回路１００は、シフト制御回路１０、１１、シフト回路２０ａ、２０ｂ、バッファ回路３０、３１およびビット選択回路４０を有する。
【００１３】
シフト制御回路１０は、シフト回路２０ａのシフト量を示す７ビットのシフト量信号ＳＡＨ［６：０］を受け、シフト量信号ＳＡＨ［６：０］の論理をモード信号ＳＩＭＤに応じて変更し、シフト量信号ＳＡＨ１［６：０］として出力する。なお、モード信号ＳＩＭＤは、図２に示す演算処理装置２００が、ＳＩＭＤ命令に基づいてＳＩＭＤ演算を実行するＳＩＭＤモード中に論理１に設定され、通常の命令に基づいて単一の演算を実行する通常モード中に論理０に設定される。通常モードは、第１モードの一例であり、ＳＩＭＤモードは、第２モードの一例である。
【００１４】
シフト制御回路１１は、シフト回路２０ｂのシフト量を示す７ビットのシフト量信号ＳＡＬ［６：０］を受け、シフト量信号ＳＡＬ［６：０］の論理をモード信号ＳＩＭＤに応じて変更し、シフト量信号ＳＡＬ１［６：０］として出力する。なお、シフト制御回路１０、１１は、１つのシフト制御回路としてシフト演算回路１００に設けられてもよい。以下では、シフト量信号ＳＡＨ［６：０］、ＳＡＬ［６：０］、ＳＡＨ１［６：０］、ＳＡＬ１［６：０］は、ビット番号を省略して、シフト量信号ＳＡＨ、ＳＡＬ、ＳＡＨ１、ＳＡＬ１とも称される。
【００１５】
モード信号ＳＩＭＤが通常モードを示す場合、シフト量信号ＳＡＨ［６：０］、ＳＡＬ［６：０］は、互いに同じ値に設定される。モード信号ＳＩＭＤがＳＩＭＤモードを示す場合、シフト量信号ＳＡＨ［６：０］、ＳＡＬ［６：０］は、互いに独立して設定される。
【００１６】
例えば、ＳＩＭＤモード中、シフト量信号ＳＡＨ１の最上位ビットＳＡＨ１［６］は論理０に設定され、シフト量信号ＳＡＬ１の最上位ビットＳＡＬ１［６］は論理１に設定される。最上位ビットＳＡＨ１［６］が論理０に設定されたシフト量信号ＳＡＨ１は、”０
”から”６３”のいずれかを示し、最上位ビットＳＡＬ１［６］が論理１に設定されたシフト量信号ＳＡＬ１は、”６４”から”１２７”のいずれかを示す。換言すれば、ＳＩＭＤモード中、シフト量信号ＳＡＨ［６：０］、ＳＡＬ［６：０］は、内部バスＲＨ［１９１：３３］、ＲＬ［１５９：１］において、ビット番号が重複しないシフト範囲を示すシフト量信号ＳＡＨ１［６：０］、ＳＡＬ１［６：０］に変換される。シフト制御回路１０、１１の例は、図４に示される。
【００１７】
シフト回路２０ａは、６４ビットの入力データＤ［６３：０］を分割した３２ビットの分割データＤ［６３：３２］と、シフト量信号ＳＡＨ１［６：０］とを受ける。シフト回路２０ａは、内部バスＲＨ［１９１：３３］において、シフト量信号ＳＡＨ１［６：０］が示すシフト量を基準のビット位置ＲＨ［１９１］からシフトさせた範囲に分割データＤ［６３：３２］を出力する。以下では、入力データＤ［６３：０］は、データＤ［６３：０］とも称され、分割データＤ［６３：３２］は、データＤ［６３：３２］とも称される。また、内部バスＲＨ［１９１：３３］に伝達されるデータは、データＲＨ［１９１：３３］とも称される。
【００１８】
シフト回路２０ａは、データＤ［６３：３２］を、シフト量信号ＳＡＨ１の値に応じて、上位側から下位側に向けてビットシフトし、１５９ビットのデータＲＨ［１９１：３３］として出力する。すなわち、シフト回路２０ａは、データＤ［６３：３２］をシフト量信号ＳＡＨ１の値（０ビットから１２７ビットのいずれか）だけ右シフトする。シフト回路２０ａは、１５９ビットのデータＲＨ［１９１：３３］のうち、データＤ［６３：３２］として出力する３２ビットを除く１２７ビットを論理０に設定する機能を有する。
【００１９】
シフト回路２０ｂは、入力データＤ［６３：０］を分割した３２ビットの分割データＤ［３１：０］と、シフト量信号ＳＡＬ１［６：０］とを受ける。シフト回路２０ｂは、内部バスＲＬ［１５９：１］において、シフト量信号ＳＡＬ１［６：０］が示すシフト量を基準のビット位置ＲＬ［１５９］からシフトさせた範囲に分割データＤ［３１：０］を出力する。以下では、分割データＤ［３１：０］は、データＤ［３１：０］とも称され、内部バスＲＬ［１５９：１］に伝達されるデータは、データＲＬ［１５９：１］とも称される。
【００２０】
シフト回路２０ｂは、データＤ［３１：０］を、シフト量信号ＳＡＬ１の値に応じて、上位側から下位側に向けてビットシフトし、１５９ビットのデータＲＬ［１５９：１］として出力する。すなわち、シフト回路２０ｂは、データＤ［３１：０］をシフト量信号ＳＡＬ１の値（０ビットから１２７ビットのいずれか）だけ右シフトする。シフト回路２０ｂは、１５９ビットのデータＲＬ［１５９：１］のうち、データＤ［３１：０］として出力する３２ビットを除く１２７ビットを論理０に設定する機能を有する。
【００２１】
シフト回路２０ａに接続される内部バスＲＨ［１９１：３３］のうちのビットＲＨ［１５９：３３］と、シフト回路２０ｂに接続される内部バスＲＬ［１５９：１］のうちのビットＲＬ［１５９：３３］とは、ビット番号が互いに重複する。一方、シフト回路２０ｂにおける基準のビット位置ＲＬ［１５９］は、シフト回路２０ａにおける基準のビット位置ＲＨ［１９１］に対して、分割データＤ［６３：３２］のビット幅分ずらして割り当てられる。これにより、図６で説明するように、通常モードにおいて、互いに異なるシフト回路２０ａ、２０ｂに供給される分割データＤ［６３：３２］、Ｄ［３１：０］を連続するデータＤ［６３：０］として出力バスＲ［１９１：１］に出力することができる。以下では、出力バスＲ［１９１：１］に伝達されるデータは、データＲ［１９１：１］とも称される。
【００２２】
シフト回路２０ａ、２０ｂは、互いに同じ回路であり、回路データ（マクロデータ）は共通である。このため、例えば、シフト回路２０ａの設計データをシフト回路２０ｂに利用することができ、シフト回路２０ａ、２０ｂを別々に設計する場合に比べてシフト回路２０ａ、２０ｂの設計期間を短縮することができる。
【００２３】
バッファ回路３０は、シフト回路２０ａから出力されるデータＲＨ［１９１：３３］のうち、上位の３２ビットのデータＲＨ［１９１：１６０］をデータＲ［１９１：１６０］として出力する。すなわち、バッファ回路３０は、内部バスＲＨ［１９１：３３］において、内部バスＲＬ［１５９：１］とビット番号が重複しないビットＲＨ［１９１：１６０］に出力されるデータＲＨ［１９１：１６０］を出力バス［１９１：１６０］に出力する。
【００２４】
バッファ回路３１は、シフト回路２０ｂから出力されるデータＲＬ［１５９：１］のうち、下位の３２ビットのデータＲＬ［３２：１］をデータＲ［３２：１］として出力する。バッファ回路３１は、内部バスＲＬ［１５９：１］において、ＲＨ［１９１：３３］とビット番号が重複しないビットＲＬ［３２：１］に出力されるデータＲＬ［３２：１］を出力バス［３２：１］に出力する。
【００２５】
ビット選択回路４０は、シフト回路２０ａから出力されるデータＲＨ［１５９：３３］とシフト回路２０ｂから出力されるデータＲＬ［１５９：３３］の中から有効なビットを選択し、出力バスＲ［１５９：３３］に出力する。データＲ［１５９：３３］のうち、有効なビットは、最小で３２ビットであり、最大で６４ビットである。以下では、データＤ［６３：０］、ＲＨ［１９１：３３］、ＲＬ［１５９：１］、Ｒ［１９１：１］は、ビット番号を省略して、データＤ、ＲＨ、ＲＬ、Ｒとも称される。
【００２６】
そして、シフト演算回路１００は、通常モード中、入力されるデータＤ［６３：０］を、シフト量信号ＳＡＨ、ＳＡＬの値（同じ論理値）だけ右シフトし、データＲ［１９１：１］のいずれか６４ビットとして出力する。一方、シフト演算回路１００は、ＳＩＭＤモード中、入力されるデータＤ［６３：３２］を、シフト量信号ＳＡＨの値だけ右シフトし、データＲ［１９１：９５］のうちのいずれか３２ビットとして出力する。また、シフト演算回路１００は、ＳＩＭＤモード中、入力されるデータＤ［３１：０］を、シフト量信号ＳＡＬの値だけ右シフトし、データＲ［９５：１］のうちのいずれか３２ビットとして出力する。通常モードでのシフト演算回路１００の動作の例は、図６に示され、ＳＩＭＤモードでのシフト演算回路１００の動作の例は、図７に示される。
【００２７】
図２は、図１に示すシフト演算回路１００が搭載される演算処理装置の一例を示す。演算処理装置２００は、命令キャッシュ５０、命令バッファ５２、デコード部５４、リザベーションステーション部５６および演算実行部５８を有する。演算処理装置２００は、ＣＰＵ等のプロセッサであり、図２では、プロセッサに搭載されるプロセッサコアの一部が示される。
【００２８】
命令キャッシュ５０は、例えば、二次キャッシュまたはメインメモリ等から転送される命令を格納する一次命令キャッシュである。命令バッファ５２は、命令キャッシュ５０から転送される命令を順次保持し、保持した命令をデコード部５４に順次出力する。デコード部５４は、命令バッファ５２から転送される命令を解読し、解読した命令に含まれる命令コードおよびレジスタ番号等をリザベーションステーション部５６に投入する。
【００２９】
リザベーションステーション部５６は、演算命令を保持する複数のエントリを含むリザベーションステーションＲＳＥ（Reservation Station for Execution）を有する。また、リザベーションステーション部５６は、ロード命令およびストア命令等のメモリアクセス命令を保持する複数のエントリを含むリザベーションステーションＲＳＡ（Reservation Station for Address）を有する。
【００３０】
リザベーションステーションＲＳＥは、エントリに保持した演算命令の依存関係を判定し、判定した依存関係に基づいて、エントリに保持した演算命令の中から実行可能な演算命令を選択する。リザベーションステーションＲＳＥは、選択した演算命令を演算実行部５８に投入する。リザベーションステーションＲＳＡは、エントリに保持したメモリアクセス命令の依存関係を判定し、判定した依存関係に基づいて、エントリに保持したメモリアクセス命令の中から実行可能なロード命令またはストア命令を選択する。リザベーションステーションＲＳＡは、選択したロード命令またはストア命令を演算実行部５８に投入する。
【００３１】
演算実行部５８は、固定小数点演算部６０、浮動小数点演算部６２、論理演算部６４、アドレス演算部６６およびレジスタ部６８を有する。固定小数点演算部６０は、固定小数点数の加算または減算を実行する加算器ＡＤＤと、固定小数点数の乗算または除算を実行する乗算器ＭＵＬとを有する。浮動小数点演算部６２は、浮動小数点数の加算または減算を実行する加算器ＦＡＤＤと、浮動小数点数の乗算または除算を実行する乗算器ＦＭＵＬとを有する。また、浮動小数点演算部６２は、浮動小数点数の乗算と加算とを実行する乗算加算器ＦＭＡとを有する。図１に示すシフト演算回路１００は、浮動小数点用の加算器ＦＡＤＤに搭載される。なお、シフト演算回路１００は、浮動小数点用の乗算加算器ＦＭＡに搭載されてもよい。
【００３２】
例えば、加算器ＦＡＤＤ、乗算器ＦＭＵＬおよび乗算加算器ＦＭＡは、ＳＩＭＤ演算を実行する機能を有する。ＳＩＭＤ演算では、１つの命令に基づいて複数の演算が並列に実行されるため、ＳＩＭＤ命令の第１オペランドおよび第２オペランドの各々には、演算用の複数のデータが分割して格納される。
【００３３】
論理演算部６４は、アンド論理の演算を実行する論理積演算器ＡＮＤと、オア論理の演算を実行する論理和演算器ＯＲと、シフト演算を実行するシフト演算器ＳＦＴとを有する。アドレス演算部６６は、リザベーションステーションＲＳＡから投入されるメモリアクセス命令に基づいて、アクセスアドレスを計算し、計算したアクセスアドレスを図示しないデータキャッシュ等に出力する。
【００３４】
レジスタ部６８は、命令で指定される複数の汎用レジスタと、演算結果等を一時的に保持する複数のレジスタ（アップデートバッファ）とを有する。例えば、各レジスタは、６４ビットである。
【００３５】
図３は、図２に示す浮動小数点加算器ＦＡＤＤの一例を示す。浮動小数点加算器ＦＡＤＤは、比較器ＣＭＰ、入れ替えスイッチＳＷ、減算器ＳＵＢ１、右シフタＲＳＦＴ、加算器ＡＤＤ１、リーディングゼロ予測器ＲＺＰ、正規化シフタＮＲＭＳＦＴおよび加算器ＡＤＤ２を有する。図１に示すシフト演算回路１００は、例えば、右シフタＲＳＦＴとして浮動小数点加算器ＦＡＤＤに搭載される。
【００３６】
以下では、通常モードにおける浮動小数点加算器ＦＡＤＤの動作が説明される。図３に示す浮動小数点加算器ＦＡＤＤは、指数ＥＸＰ１および仮数ＦＲＣ１を含む６４ビットのオペランドＯＰ１と、指数ＥＸＰ２および仮数ＦＲＣ２を含む６４ビットのオペランドＯＰ２とを加算し、加算結果を示す指数ＥＸＰおよび仮数ＦＲＣを出力する。オペランドＯＰ１、ＯＰ１および加算結果は、図２に示すレジスタ部６８の汎用レジスタに保持される。
【００３７】
例えば、ＩＥＥＥ（The Institute of Electrical and Electronics Engineers）７５４（浮動小数点数演算標準）では、６４ビットの浮動小数点数は、１ビットの符号部と１１ビットの指数部と５２ビットの仮数部とを含む。図２では、符号部（符号ビット）の記載は省略される。また、ＩＥＥＥ７５４では、浮動小数点数は、正規化された最上位ビットがヒドンビットとして省略されているが、入れ替えスイッチＳＷの出力では、ヒドンビットが補われているとする。
【００３８】
比較器ＣＭＰは、指数ＥＸＰ１、ＥＸＰ２の大小を比較し、指数ＥＸＰ２が指数ＥＸＰ１より大きい場合、指数ＥＸＰ１、ＥＸＰ２を入れ換えるためのスイッチ制御信号ＳＷＣを入れ替えスイッチＳＷに出力する。比較器ＣＭＰは、指数ＥＸＰ１が指数ＥＸＰ２以上の場合、指数ＥＸＰ１、ＥＸＰ２を入れ換えないためのスイッチ制御信号ＳＷＣを入れ替えスイッチＳＷに出力する。減算器ＳＵＢ１は、入れ替えスイッチＳＷから出力される指数ＥＸＰ１、ＥＸＰ２の差を求め、求めた差を示す差分信号ＤＩＦを右シフタＲＳＦＴおよび加算器ＡＤＤ２に出力する。ここで、通常モードにおいて、差分信号ＤＩＦの値は、図１に示すシフト量信号ＳＡＲ［６：０］、ＳＡＬ［６：０］として、右シフタＲＳＦＴに供給される。
【００３９】
右シフタＲＳＦＴは、オペランドＯＰ１、ＯＰ２のうちの値が小さい方の仮数（ＦＲＣ１またはＦＲＣ２の一方）を差分信号ＤＩＦの値だけ右シフトし、加算器ＡＤＤ１およびリーディングゼロ予測器ＲＺＰに出力する。入れ替えスイッチＳＷから右シフタＲＳＦＴに供給される仮数は、図１に示すデータＤ［６３：０］に含まれる。右シフタＲＳＦＴの動作により、仮数部ＦＲＣ１（またはＦＲＣ２）の一方の桁が、仮数ＦＲＣ１（またはＦＲＣ２）の他方に合わせられ、桁が合わせられた仮数ＦＲＣ１、ＦＲＣ２が加算器ＡＤＤ１で加算される。なお、ＳＩＭＤ演算を実行するために、右シフタＲＳＦＴ（すなわち、シフト演算回路１００）は、図１に示すように、データＤ［６３：３２］、Ｄ［３１：０］を独立にシフトするシフト回路２０ａ、２０ｂを有する。ＳＩＭＤ演算を実行するＳＩＭＤモード時のシフト演算回路１００の動作の例は、図７に示される。
【００４０】
加算器ＡＤＤ１は、桁が合わせられた仮数ＦＲＣ１、ＦＲＣ２を加算し、加算結果を正規化シフタＮＲＭＳＦＴに出力する。リーディングゼロ予測器ＲＺＰは、桁が合わせられた仮数ＦＲＣ１、ＦＲＣ２を用いて、加算器ＡＤＤ１による加算結果において、上位ビット側に最初に”１”が現れるまでの”０”の数を予測する。そして、リーディングゼロ予測器ＲＺＰは、予測した数をシフト量として正規化シフタＮＳＦＴおよび加算器ＡＤＤ２に出力する。
【００４１】
正規化シフタＮＲＭＳＦＴは、リーディングゼロ予測器ＲＺＰが予測したシフト量に基づいて、加算器ＡＤＤ１による加算結果（仮数）をビットシフトすることで、加算結果の上位ビット側に最初に現れる”１”をヒドンビットに設定する。そして、正規化シフタＮＲＭＳＦＴは、正しいヒドンビットを有する仮数ＦＲＣを出力する。加算器ＡＤＤ２は、減算器ＳＵＢ１からの差分信号ＤＩＦの値とシフト量の値とを加算し、加算結果を指数ＥＸＰとして出力する。
【００４２】
なお、浮動小数点加算器ＦＡＤＤは、ＳＩＭＤモード中、オペランドＯＰ１、ＯＰ２にそれぞれ含まれる３２ビットの浮動小数点数を互いに加算するとともに、オペランドＯＰ１、ＯＰ２にそれぞれ含まれる他の３２ビットの浮動小数点数を互いに加算する。すなわち、演算処理装置２００は、オペランドＯＰ１、ＯＰ２に含まれる２組の浮動小数点データを独立に加算するＳＩＭＤ演算機能を有する。ＳＩＭＤモード中、浮動小数点加算器ＦＡＤＤの各要素は、２組の浮動小数点データを加算する機能に切り替わるが、回路の詳細は省略される。なお、シフト演算回路１００が図２に示す乗算加算器ＦＭＡに搭載される場合にも、シフト演算回路１００は、図３と同様に、乗算加算器ＦＭＡの加算器内に右シフタＲＳＦＴとして搭載される。
【００４３】
図４は、図１に示すシフト制御回路１０、１１の一例を示す。シフト制御回路１０は、インバータＩＶを介してモード信号ＳＩＭＤを受けるアンド回路ＡＮＤと、シフト量信号ＳＡＨ［５：０］をシフト量信号ＳＡＨ１［５：０］として出力する複数のバッファＢＵＦとを有する。アンド回路ＡＮＤは、通常モード中（ＳＩＭＤ＝”０”）、シフト量信号ＳＡＨの最上位ビットＳＡＨ［６］を、シフト量信号ＳＡＨ１［６］として出力し、ＳＩＭＤモード中（ＳＩＭＤ＝”１”）、シフト量信号ＳＡＨ１［６］を”０”に設定する。すなわち、シフト制御回路１０は、ＳＩＭＤモード中、シフト量信号ＳＡＨ［５：０］に応じて、０ビットから６３ビットのシフト量を示すシフト量信号ＳＡＨ１［６：０］を出力する。
【００４４】
シフト制御回路１１は、モード信号ＳＩＭＤを受けるオア回路ＯＲと、シフト量信号ＳＡＬ［５：０］をシフト量信号ＳＡＬ１［５：０］として出力する複数のバッファＢＵＦとを有する。オア回路ＯＲは、通常モード中、シフト量信号ＳＡＬの最上位ビットＳＡＬ［６］を、シフト量信号ＳＡＬ１［６］として出力し、ＳＩＭＤモード中、シフト量信号ＳＡＬ１［６］を”１”に設定する。すなわち、シフト制御回路１１は、ＳＩＭＤモード中、シフト量信号ＳＡＨ［５：０］に応じて、６４ビットから１２７ビットのシフト量を示すシフト量信号ＳＡＬ１［６：０］を出力する。
【００４５】
アンド回路ＡＮＤとオア回路ＯＲにより、シフト回路２０ａ、２０ｂにそれぞれ出力するシフト量信号ＳＡＨ１［６：０］、ＳＡＬ１［６：０］の最上位ビットＳＡＨ１［６］、ＳＡＬ１［６］は、互いに異なる論理に設定される。これにより、ＳＩＭＤモードにおいて、図７で説明するように、シフト量信号ＳＡＨ［６：０］とシフト量信号ＳＡＬ［６：０］とが互いに独立して設定される場合にも、データＤ［６３：３２］とデータＤ［３１：０］が衝突することを抑止することができる。
【００４６】
図５は、図１に示すバッファ回路３０、３１とビット選択回路４０の一例を示す。バッファ回路３０は、データＲＨ［１９１：１６０］をデータＲ［１９１：１６０］として出力する複数のバッファＢＵＦを有する。バッファ回路３１は、データＲＬ［３２：１］をデータＲ［３２：１］として出力する複数のバッファＢＵＦを有する。
【００４７】
ビット選択回路４０は、ビット番号が互いに重複する１２７ビットのデータＲＨ［１５９：３３］、ＲＬ［１５９：３３］の各ビットのオア論理をデータＲとして出力する複数のオア回路ＯＲを有する。すなわち、データＲ［１５９：３３］の各ビットは、データＲＨ［１５９：３３］とデータＲＬ［１５９：３３］の各ビットの一方が論理１の場合、論理１に設定される。
【００４８】
シフト回路２０ａは、内部バスＲＨにおいて、有効な３２ビットのデータＤ［６３：３２］が出力されるビットを除く１２７ビットを論理０に設定する機能を有する。シフト回路２０ｂは、内部バスＲＬにおいて、有効な３２ビットのデータＤ［３１：０］が出力されるビットを除く１２７ビットを論理０に設定する機能を有する。また、図６および図７に示すように、データＲＨ［１５９：３３］、ＲＬ［１５９：３３］のうち、同じビット番号のデータＲＨ、ＲＬに有効なデータＤが同時に出力されることはない。このため、ビット選択回路４０の各オア回路ＯＲの２つの入力の一方には、必ず論理０が供給される。したがって、ビット番号が互いに重複するデータＲＨ［１５９：３３］、ＲＬ［１５９：３３］の各ビットをオア回路ＯＲで受けることで、ビット選択回路４０は、制御信号を用いることなく有効なデータを選択して出力バスＲ［１５９：３３］に出力できる。
【００４９】
図６は、図１に示すシフト演算回路１００の通常モード（ＳＩＭＤ＝”０”）での動作の一例を示す。すなわち、図６は、シフト演算回路１００によるシフト演算方法の一例を示す。図６において、シフト量信号ＳＡＨ１［６：０］、ＳＡＬ１［６：０］を示す７ビットの”＊”は、各ビットの値が”０”または”１”に設定されることを示す。
【００５０】
シフト回路２０ａは、ビットＲＨ［１９１］を基準にして、データＤ［６３：３２］の各ビットの位置をシフト量信号ＳＡＨ１［６：０］に応じて、０ビットから１２７ビットの範囲でシフトし、データＲＨ［１９１：３３］として出力する。シフト回路２０ｂは、ビットＲＬ［１５９］を基準にして、データＤ［３１：０］の各ビットの位置を、シフト量信号ＳＡＬ１［６：０］に応じて０ビットから１２７ビットの範囲でシフトし、データＲＬ［１５９：１］として出力する。
【００５１】
シフト回路２０ａ、２０ｂがシフトの基準にするビットは、３２ビットずれているため、シフト回路２０ａが出力するデータＲＨのビット範囲と、シフト回路２０ｂが出力するデータＲＬのビット範囲とは、３２ビットずれる。また、通常モードでは、シフト量信号ＳＡＨ１［６：０］の値とシフト量信号ＳＡＬ１［６：０］の値とは、互いに同じである。このため、シフト演算回路１００は、データＤ［６３：０］のシフト動作において、データＤ［６３：３２］、Ｄ［３１：０］を、データＲＨとデータＲＬのビット番号とを重複させることなく、データＲとして出力することができる。すなわち、データＤ［６３：３２］、Ｄ［３１：０］が衝突することを抑止することができる。また、シフト演算回路１００は、データＲＨとデータＲＬのビット番号を空けることなく、データＤ［６３：０］を６４ビットのまとまったデータＲとして出力することができる。
【００５２】
図６の下側のかぎ括弧内に示す出力バスＲ［１９１：１］は、シフト量信号ＳＡＨ１、ＳＡＬ１に応じてデータＤ［６３：０］が現れるビット位置の例を示す。シフト量信号ＳＡＨ１、ＳＡＬ１の数値の末尾の符号ｈは、数値が１６進数であることを示す。なお、シフト量信号ＳＡＨ１の値は、シフト演算回路１００に供給されるシフト量信号ＳＡＨの値と同じであり、シフト量信号ＳＡＬ１の値は、シフト演算回路１００に供給されるシフト量信号ＳＡＬの値と同じである。
【００５３】
シフト量信号ＳＡＨ１、ＳＡＬ１が”００ｈ”の場合（０ビット右シフト）、データＤ［６３：３２］は、データＲ［１９１：１６０］として出力され、データＤ［３１：０］は、データＲ［１５９：１２８］として出力される。シフト回路２０ａは、データＤ［６３：３２］が現れないデータＲＨ［１５９：３３］の各ビットを”０”に設定する。シフト回路２０ｂは、データＤ［３１：０］が現れないデータＲＬ［１２７：１］の各ビットを”０”に設定する。このため、ビット選択回路４０は、データＲ［１２８：３３］の各ビットを”０”に設定する。バッファ回路３１は、データＲ［３２：１］の各ビットを”０”に設定する。
【００５４】
シフト量信号ＳＡＨ１、ＳＡＬ１が”１９ｈ”の場合（２５ビット右シフト）、データＤ［６３：３２］は、データＲ［１６６：１３５］として出力され、データＤ［３１：０］は、データＲ［１３４：１０３］として出力される。シフト回路２０ａは、データＤ［６３：３２］が現れないデータＲＨ［１９１：１６７］、ＲＨ［１３４：３３］の各ビットを”０”に設定する。シフト回路２０ｂは、データＤ［３１：０］が現れないデータＲＬ［１５９：１３５］、ＲＬ［１０２：１］の各ビットを”０”に設定する。このため、バッファ回路３０は、データＲ［１９１：１６７］の各ビットを”０”に設定する。ビット選択回路４０は、データＲ［１０２：３３］の各ビットを”０”に設定する。バッファ回路３１は、データＲ［３２：１］の各ビットを”０”に設定する。
【００５５】
シフト量信号ＳＡＨ１、ＳＡＬ１が”６Ｅｈ”の場合（１１０ビット右シフト）、データＤ［６３：３２］は、データＲ［８１：５０］として出力され、データＤ［３１：０］は、データＲ［４９：１８］として出力される。シフト回路２０ａは、データＤ［６３：３２］が現れないデータＲＨ［１９１：８２］、ＲＨ［４９：３３］の各ビットを”０”に設定する。シフト回路２０ｂは、データＤ［３１：０］が現れないデータＲＬ［１５９：５０］、ＲＬ［１７：１］の各ビットを”０”に設定する。このため、バッファ回路３０は、データＲ［１９１：１６０］の各ビットを”０”に設定する。ビット選択回路４０は、データＲ［１５９：８２］の各ビットを”０”に設定する。バッファ回路３１は、データＲ［１７：１］の各ビットを”０”に設定する。
【００５６】
シフト量信号ＳＡＨ１、ＳＡＬ１が”７Ｆｈ”の場合（１２７ビット右シフト）、データＤ［６３：３２］は、データＲ［６４：３３］として出力され、データＤ［３１：０］は、データＲ［３２：１］として出力される。シフト回路２０ａは、データＤ［６３：３２］が現れないデータＲＨ［１９１：６４］の各ビットを”０”に設定する。シフト回路２０ｂは、データＤ［３１：０］が現れないデータＲＬ［１５９：３３］の各ビットを”０”に設定する。このため、バッファ回路３０は、データＲ［１９１：１６０］の各ビットを”０”に設定する。ビット選択回路４０は、データＲ［１５９：６５］の各ビットを”０”に設定する。
【００５７】
図７は、図１に示すシフト演算回路１００のＳＩＭＤモード（ＳＩＭＤ＝”１”）での動作の一例を示す。すなわち、図７は、シフト演算回路１００によるシフト演算方法の別の例を示す。図６と同様の動作については、詳細な説明は省略する。なお、ＳＩＭＤモードでは、図１に示すシフト量信号ＳＡＨ１［６：０］とシフト量信号ＳＡＬ１［６：０］は、互いに独立して設定される。
【００５８】
ＳＩＭＤモードでは、シフト量信号ＳＡＨ１［６：０］の最上位ビットＳＡＨ１［６］は、”０”に固定され、シフト量信号ＳＡＬ１［６：０］の最上位ビットＳＡＬ１［６］は、”１”に固定される。すなわち、ＳＩＭＤモードでは、シフト量信号ＳＡＨ１、ＳＡＬ１の所定数のビットは、互いに異なる論理に設定される。このため、シフト回路２０ａは、ビットＲＨ［１９１］を基準にして、データＤ［６３：３２］の各ビットの位置を、シフト量信号ＳＡＨ１［６：０］に応じて、０ビットから６３ビットの範囲でシフトし、データＲＨ［１９１：９７］として出力する。シフト回路２０ｂは、ビットＲＨ［１５９］を基準にして、データＤ［３１：０］の各ビットの位置を、シフト量信号ＳＡＬ１［６：０］に応じて、０ビットから６３ビットの範囲でシフトし、データＲＬ［９５：１］として出力する。すなわち、ＳＩＭＤモードでは、シフト回路２０ａが出力するデータＲＨのビット範囲と、シフト回路２０ｂが出力するデータＲＬのビット範囲とは、重複しない。
【００５９】
図７の下側のかぎ括弧内の一番上において、シフト量信号ＳＡＨが”００ｈ”の場合、シフト量信号ＳＡＨ１も”００ｈ”に設定され（０ビット右シフト）、データＤ［６３：３２］は、データＲ［１９１：１６０］として出力される。一方、シフト量信号ＳＡＬが”２５ｈ”の場合、シフト量信号ＳＡＬ１は”６５ｈ”に設定され（１０１ビット右シフト）、データＤ［３１：０］は、データＲ［５８：２７］として出力される。
【００６０】
図７の下側のかぎ括弧内の中央において、シフト量信号ＳＡＨが”３Ｆｈ”の場合、シフト量信号ＳＡＨ１も”３Ｆｈ”に設定され（６３ビット右シフト）、データＤ［６３：３２］は、データＲ［１２８：９７］として出力される。一方、シフト量信号ＳＡＬが”００ｈ”の場合、シフト量信号ＳＡＬ１は”４０ｈ”に設定され（６４ビット右シフト）、データＤ［３１：０］は、データＲ［９５：６４］として出力される。
【００６１】
図７の下側のかぎ括弧内の一番下において、シフト量信号ＳＡＨが”１０ｈ”の場合、シフト量信号ＳＡＨ１も”１０ｈ”に設定され（１６ビット右シフト）、データＤ［６３：３２］は、データＲ［１７５：１４４］として出力される。一方、シフト量信号ＳＡＬが”３Ｆｈ”の場合、シフト量信号ＳＡＬ１は”７Ｆｈ”に設定され（１２７ビット右シフト）、データＤ［３１：０］は、データＲ［３２：１］として出力される。
【００６２】
このように、ＳＩＭＤモードでは、データＤ［６３：３２］は、データＲ［１９１：９７］の範囲に出力され、データＤ［３１：０］は、データＲ［９５：１］の範囲に出力される。このため、図１に示すシフト量信号ＳＡＨ［６：０］とシフト量信号ＳＡＬ［６：０］とが互いに独立して設定される場合にも、データＤ［６３：３２］とデータＤ［３１：０］が衝突することを抑止することができる。
【００６３】
図８は、図１に示すシフト演算回路１００にパリティビットを予測するパリティ予測器を内蔵する場合の一例を示す。図１と同じ要素には、同じ符号を付し、詳細な説明は省略する。
【００６４】
パリティ予測器を内蔵するシフト演算回路１００Ｐは、図１に示すシフト回路２０ａ、２０ｂの代わりにシフト回路２０Ｐａ、２０Ｐｂを有する。また、シフト演算回路１００Ｐは、図１に示すバッファ回路３０、３１の代わりにバッファ回路３０Ｐ、３１Ｐを有し、図１に示すビット選択回路４０の代わりにビット選択回路４０Ｐを有する。シフト演算回路１００Ｐは、データＤ［６３：０］とパリティビットＤＰ［１５：０］とを受け、データＤ［６３：０］の誤りを検出する。パリティビットＤＰ［１５：０］の各ビットは、データＤ［６３：０］の４ビット毎に付加される。
【００６５】
パリティ予測器ＰＰａ、ＰＰｂは、シフト回路２０Ｐａ、２０Ｐｂ内にそれぞれ搭載される。各パリティ予測器ＰＰａ、ＰＰｂは、４ビットのデータＤ毎にパリティビットＤＰを算出する排他的論理和回路を有し、パリティビットＤＰは、シフト回路２０Ｐａ、２０Ｐｂにおいて、データを順次シフトする複数のステージ毎に算出される。このため、各パリティ予測器ＰＰａ、ＰＰｂは、各シフト回路２０Ｐａ、２０Ｐｂのサイズの数十パーセントを占める。
【００６６】
シフト回路２０Ｐａは、データＤ［６３：３２］のビット位置をシフト量信号ＳＡＨ１［６：０］に応じてシフトし、データＲＨ［１９１：３３］とパリティビットＲＰＨ［４７：８］として出力する。パリティビットＲＰＨ［４７：８］の各ビットは、データＲＨ［１９１：３３］の４ビット毎に付加される。シフト回路２０Ｐｂは、データＤ［３１：０］のビット位置をシフト量信号ＳＡＬ１［６：０］に応じてシフトし、データＲＬ［１５９：１］とパリティビットＲＰＬ［３９：０］として出力する。パリティビットＲＰＨ［３９：０］の各ビットは、データＲＬ［１５９：１］の４ビット毎に付加される。
【００６７】
シフト回路２０Ｐａのパリティ予測器ＰＰａは、データＤ［６３：３２］をシフトする毎にパリティビットを生成することで、データＲＨ［１９１：３３］の出力とともにパリティビットＲＰＨ［４７：８］を出力する。同様に、シフト回路２０Ｐｂのパリティ予測器ＰＰｂは、データＤ［３１：０］をシフトする毎にパリティビットを生成することで、データＲＬ［１５９：１］の出力とともにパリティビットＲＰＬ［３９：０］を出力する。すなわち、パリティ予測器ＰＰａは、データＲＨ［１９１：３３］を用いることなくパリティビットＲＰＨ［４７：８］を予測でき、パリティ予測器ＰＰｂは、データＲＬ［１５９：１］を用いることなくパリティビットＰＬ［３９：０］を予測できる。
【００６８】
バッファ回路３０Ｐは、データＲＨ［１９１：１６０］をデータＲ［１９１：１６０］として出力するとともに、データＲＨ［１９１：１６０］に対応するパリティビットＲＰＨ［４７：４０］をパリティビットＲＰ［４７：４０］として出力する。バッファ回路３１Ｐは、データＲＬ［３２：１］をデータＲ［３２：１］として出力するとともに、データＲＬ［３２：１］に対応するパリティビットＲＰＬ［７：０］をパリティビットＲＰ［７：０］として出力する。
【００６９】
ビット選択回路４０Ｐは、データＲＨ［１５９：３３］とデータＲＬ［１５９：３３］の中から有効なビットを選択し、データＲ［１５９：３３］として出力する。また、ビット選択回路４０Ｐは、パリティビットＲＰＨ［３９：８］とパリティビットＲＰＬ［３９：８］の中から有効なビットを選択し、パリティビットＲＰ［３９：８］として出力する。なお、パリティビットＲＰ［４７：０］の各ビットは、データＲ［１９１：１］の４ビット毎に付加される。データＲ［１９１：１］とともに出力されるパリティビットＲＰ［４７：０］は、データＲ［１９１：１］の供給先の回路において、データＲ［１９１：１］の誤りを検出するために使用される。
【００７０】
図９は、図８に示すシフト演算回路１００Ｐにおいて、データとパリティビットとの割り当ての一例を示す。パリティビットＤＰ［１５：０］の各ビットは、データＤ［６３：０］の４ビット毎に付加される。パリティビットＲＰＨ［４７：８］の各ビットは、データＲＨ［１９１：３３］の４ビット毎に付加される。パリティビットＲＰＨ［３９：０］の各ビットは、データＲＬ［１５９：１］の４ビット毎に付加される。
【００７１】
パリティビットＲＰ［４７：０］の各ビットは、データＲ［１９１：１］の４ビット毎に付加される。パリティビットをデータビットの間に挿入することで、シフト回路２０Ｐａ、２０Ｐｂにおいて、パリティビットを伝達する信号の配線長を、パリティビットをデータビットの間に挿入しない場合に比べて短くすることができる。
【００７２】
図１０は、シフト演算回路の別の例を示す。図１に示すシフト演算回路１００と同様の要素または同様の機能については、詳細な説明は省略する。図１０に示すシフト演算回路１０２は、シフト回路２８、２９、バッファ回路３９およびセレクタ回路４９を有する。なお、シフト演算回路１０２がパリティ予測器を内蔵する場合、括弧内に示すパリティビットＤＰ、ＲＰＨ、ＲＰＬ、ＲＰが付加される。以下では、シフト演算回路１０２がパリティ予測器を内蔵せず、パリティビットＤＰ、ＲＰＨ、ＲＰＬ、ＲＰが付加されない場合について説明される。
【００７３】
シフト回路２８は、通常モード中（ＳＩＭＤ＝”０”）、６４ビットのデータＤ［６３：０］を、シフト量信号ＳＡＨ［６：０］の値に応じて、上位側から下位側に向けてビットシフトし、１９１ビットのデータＲＨ［１９１：１］として出力する。すなわち、シフト回路２８は、データＤ［６３：０］をシフト量信号ＳＡＨの値（０ビットから１２７ビットのいずれか）だけ右シフトする。また、シフト回路２８は、ＳＩＭＤモード中（ＳＩＭＤ＝”１”）、３２ビットのデータＤ［６３：３２］を、シフト量信号ＳＡＨ［５：０］の値に応じて、上位側から下位側に向けてビットシフトし、９５ビットのデータＲＨ［１９１：９７］として出力する。すなわち、シフト回路２８は、データＤ［６３：３２］をシフト量信号ＳＡＨの値（０ビットから６３ビットのいずれか）だけ右シフトする。
【００７４】
シフト回路２９は、ＳＩＭＤモード中のみ動作し（ＳＩＭＤ＝”１”）、３２ビットのデータＤ［３１：０］を、シフト量信号ＳＡＬ［５：０］の値に応じて、上位側から下位側に向けてビットシフトし、９５ビットのデータＲＨ［９５：１］として出力する。すなわち、シフト回路２９は、データＤ［３１：０］をシフト量信号ＳＡＬの値（０ビットから６３ビットのいずれか）だけ右シフトする。
【００７５】
バッファ回路３９は、シフト回路２８から出力されるデータＲＨ［１９１：１］のうち、上位の９６ビットのデータＲＨ［１９１：９６］をデータＲ［１９１：９６］として出力する。セレクタ回路４９は、通常モード中（ＳＩＭＤ＝”０”）、データＲＨ［９５：１］を選択し、ＳＩＭＤモード中（ＳＩＭＤ＝”１”）、データＲＬ［９５：１］を選択し、選択したデータをデータＲ［９５：１］として出力する。
【００７６】
図１０に示すシフト演算回路１０２では、データＤ［３１：０］は、シフト回路２８、２９に重複して供給される。ＳＩＭＤモード中、シフト回路２８は、データＤ［３１：０］をシフトしないため、シフト回路２８には、ＳＩＭＤモード中に動作しない無駄な回路が存在する。また、シフト回路２８、２９は、それぞれ独立に設計されるため、図１に示すシフト回路２０ａ、２０ｂに比べて設計期間が長くなる。
【００７７】
さらに、シフト回路２８は６４ビットのデータＤ［６３：０］を受けて動作し、シフト回路２９は、３２ビットのデータＤ［３１：０］を受けて動作するため、入力されるデータＤのビット数の合計は、９６ビットである。これは、図１に示すシフト回路２０ａ、２０ｂに入力されるデータＤのビット数の合計（６４ビット）より３２ビット多い。
【００７８】
シフト演算回路１０２がパリティ予測器を内蔵する場合、シフト回路２８、２９への入力ビット数の合計は、１２０ビットであり、図８に示すシフト演算回路１００Ｐのシフト回路２０Ｐａ、２０Ｐｂの入力ビット数の合計（８０ビット）より４０ビット多い。
【００７９】
例えば、シフト回路の回路規模は、入力データのビット数に依存して、指数関数的に増加する。このため、図１０に示すシフト演算回路１０２の回路規模は、図１に示すシフト演算回路１００の回路規模より大きくなる。シフト演算回路１０２がパリティ予測器を内蔵する場合、シフト演算回路１０２の回路規模は、図８に示すシフト演算回路１００Ｐの回路規模よりさらに大きくなる。換言すれば、図１に示すシフト演算回路１００では、データＤ［６３：３２］、Ｄ［３１：０］が重複することなくシフト回路２０ａ、２０ｂにそれぞれ供給される。このため、シフト演算回路１００のサイズを、データＤ［６３：０］の一部が重複して複数のシフト回路２８、２９に供給されるシフト演算回路１００Ｐ等のサイズに比べて小さくすることができる。
【００８０】
以上、図１から図１０に示す実施形態では、ビットが重複しないデータＤ［６３：３２］、Ｄ［３１：０］をシフト回路２０ａ、２０ｂにそれぞれ供給して、通常モードでのシフト動作とＳＩＭＤモードでのシフト動作とを実行することができる。これにより、ビットが重複して複数の他のシフト回路に供給される場合に比べて、シフト回路２０ａ、２０ｂに供給されるデータＤのビット数の合計を少なくすることができる。例えば、シフト回路２０ａ、２０ｂに供給されるデータＤのビット数の合計（６４ビット）を、図１０に示すシフト演算回路１０２のシフト回路２８、２９に供給されるデータＤのビット数の合計（９６ビット）の３分の２にすることができる。この結果、シフト回路２０ａ、２０ｂの回路規模をシフト回路２８、２９の回路規模に比べて小さくすることができ、シフト演算回路１００の回路サイズを小さくすることができる。また、シフト回路２０ａ、２０ｂは、互いに同じ回路であるため、図１０に示すシフト回路２８、２９の両方をそれぞれ設計する場合に比べて、設計期間を短縮することができる。
【００８１】
基準のビット位置ＲＬ［１５９］、ＲＨ［１９１］を分割データＤ［６３：３２］のビット幅分ずらして割り当てることで、分割データＤ［６３：３２］、Ｄ［３１：０］を連続するデータＤ［６３：０］として出力バスＲ［１９１：１］に出力することができる。換言すれば、通常モードにおいて、データＤ［６３：３２］、Ｄ［３１：０］が衝突することを抑止することができる。
【００８２】
ビット番号が互いに重複するデータＲＨ［１５９：３３］、ＲＬ［１５９：３３］の各ビットをオア回路ＯＲで受けることで、ビット選択回路４０は、制御信号を用いることなく有効なデータＤを選択して出力バスＲ［１５９：３３］に出力することができる。
【００８３】
ＳＩＭＤモードにおいて、シフト量信号ＳＡＨ１［６：０］の上位ビットＳＡＨ１［６］とシフト量信号ＳＡＬ１［６：０］の上位ビットＳＡＬ１［６］との論理は、互いに逆に設定される。これにより、シフト量信号ＳＡＨ［６：０］とシフト量信号ＳＡＬ［６：０］とが互いに独立して設定される場合にも、データＤ［６３：３２］とデータＤ［３１：０］が衝突することを抑止することができる。
【００８４】
図１１は、シフト演算回路の別の実施形態を示す。図１に示す要素と同一または同様の要素については、同一の符号を付し、詳細な説明は省略する。この実施形態のシフト演算回路１０４は、シフト制御回路１０、１３、１４、シフト回路２０ａ、２２ａ、２２ｂ、バッファ回路３０、３２およびビット選択回路４２を有する。シフト演算回路１０４は、図１に示すシフト演算回路１００と同様に、図２に示す演算処理装置２００の浮動小数点用の加算器ＦＡＤＤまたは乗算加算器ＦＭＡに搭載可能である。
【００８５】
なお、シフト演算回路１０４がパリティ予測器を内蔵する場合、括弧内に示すパリティビットＤＰ、ＲＰＨ、ＲＰＬＨ、ＲＰＬ、ＲＰが付加される。以下では、シフト演算回路１０４がパリティ予測器を内蔵せず、パリティビットＤＰ、ＲＰＨ、ＲＰＬＨ、ＲＰＬ、ＲＰが付加されない場合について説明される。シフト演算回路１０４は、図１に示すシフト演算回路１００と同様に、図２に示す演算処理装置２００の浮動小数点用の加算器ＦＡＤＤまたは乗算加算器ＦＭＡに搭載可能である。
【００８６】
シフト制御回路１０の回路構成および機能は、図１に示すシフト制御回路１０の回路構成および機能と同じである。シフト制御回路１３は、シフト量信号ＳＡＬＨ［６：０］の論理をモード信号ＳＩＭＤに応じて変更し、シフト量信号ＳＡＬＨ１［６：０］として出力する。シフト制御回路１３は、ＳＩＭＤモード時にシフト量信号ＳＡＬＨ１［６：０］の上位２ビットＳＡＬＨ１［６：５］が”１０”に設定されることを除き、図１に示すシフト制御回路１１と同様に動作する。
【００８７】
シフト制御回路１４は、ＳＩＭＤモード時にシフト量信号ＳＡＬ１［６：０］の上位２ビットＳＡＬ１［６：５］が”１１”に設定されることを除き、図１に示すシフト制御回路１１と同様に動作する。通常モードでは（ＳＩＭＤ＝”０”）、シフト量信号ＳＡＨ［６：０］、ＳＡＬＨ［６：０］、ＳＡＬ［６：０］は、互いに同じ値に設定される。ＳＩＭＤモードでは（ＳＩＭＤ＝”１”）、シフト量信号ＳＡＨ［６：０］、ＳＡＬＨ［６：０］、ＳＡＬ［６：０］は、互いに独立して設定される。
【００８８】
シフト回路２０ａの回路構成および機能は、図１に示すシフト回路２０ａの回路構成および機能と同じである。シフト回路２２ａは、６４ビットのデータＤ［６３：０］のうち１６ビットのデータＤ［３１：１６］を、シフト量信号ＳＡＬＨ１の値に応じて、上位側から下位側に向けてビットシフトし、１４３ビットの内部バスＲＬＨ［１５９：１７］に出力する。すなわち、シフト回路２２ａは、データＤ［３１：１６］をシフト量信号ＳＡＬＨ１の値（０ビットから１２７ビットのいずれか）だけ右シフトする。以下では、内部バスＲＬＨ［１５９：１７］に伝達されるデータは、データＲＬＨ［１５９：１７］とも称される。シフト回路２２ａは、１４３ビットのデータＲＬＨ［１５９：１７］のうち、データＤ［３１：１６］として出力する１６ビットを除く１２７ビットを”０”に設定する機能を有する。
【００８９】
シフト回路２２ｂは、６４ビットのデータＤ［６３：０］のうち１６ビットのデータＤ［１５：０］を、シフト量信号ＳＡＬ１の値に応じて、上位側から下位側に向けてビットシフトし、１４３ビットのデータＲＬ［１４３：１］として出力する。すなわち、シフト回路２２ｂは、データＤ［１５：０］をシフト量信号ＳＡＬ１の値（０ビットから１２７ビットのいずれか）だけ右シフトする。シフト回路２２ｂは、１４３ビットのデータＲＬ［１４３：１］のうち、データＤ［１５：０］として出力する１６ビットを除く１２７ビットを”０”に設定する機能を有する。なお、シフト回路２２ａ、２２ｂは、互いに同じ回路であり、回路データ（マクロデータ）は共通であるため、シフト回路２２ａ、２２ｂを別々に設計する場合に比べてシフト回路２２ａ、２２ｂの設計期間を短縮することができる。
【００９０】
バッファ回路３０の回路構成および機能は、図１に示すバッファ回路３０の回路構成および機能と同じである。バッファ回路３２は、シフト回路２２ｂから出力されるデータＲＬ［１４３：１］のうち、下位の１６ビットのデータＲＬ［１６：１］をデータＲ［１６：１］として出力する。
【００９１】
ビット選択回路４２は、シフト回路２０ａから出力されるデータＲＨ［１５９：３３］と、シフト回路２２ａから出力されるデータＲＬＨ［１５９：１７］と、シフト回路２２ｂから出力されるデータＲＬ［１４３：１７］とを受ける。ビット選択回路４２は、データＲＨ［１５９：３３］、データＲＬＨ［１５９：１７］、データＲＬ［１４３：１７］の中から有効なビットを選択し、データＲ［１５９：１７］として出力する。データＲ［１５９：１７］のうち、有効なビットは、最小で３２ビットであり、最大で６４ビットである。
【００９２】
図１２は、図１１に示すシフト制御回路１０、１３、１４の一例を示す。シフト制御回路１０の回路構成および機能は、図４に示すシフト制御回路１０の回路構成および機能と同じである。すなわち、シフト制御回路１０は、ＳＩＭＤモード中、シフト量信号ＳＡＨ［５：０］に応じて、０ビットから６３ビットのシフト量を示すシフト量信号ＳＡＨ１［６：０］を出力する。
【００９３】
シフト制御回路１３は、モード信号ＳＩＭＤを受けるオア回路ＯＲと、インバータＩＶを介してモード信号ＳＩＭＤを受けるアンド回路ＡＮＤとを有する。また、シフト制御回路１３は、シフト量信号ＳＡＬＨ［４：０］をシフト量信号ＳＡＬＨ１［４：０］として出力する複数のバッファＢＵＦとを有する。オア回路ＯＲとアンド回路ＡＮＤの出力（ＳＡＬＨ１［６：５］）は、ＳＩＭＤモード中、”１０”に設定される。すなわち、シフト制御回路１３は、ＳＩＭＤモード中、シフト量信号ＳＡＬＨ［４：０］に応じて、６４ビットから９５ビットのシフト量を示すシフト量信号ＳＡＬＨ１［６：０］を出力する。
【００９４】
シフト制御回路１４は、モード信号ＳＩＭＤを受けるオア回路ＯＲ１、ＯＲ２と、シフト量信号ＳＡＬ［４：０］をシフト量信号ＳＡＬ１［４：０］として出力する複数のバッファＢＵＦとを有する。オア回路ＯＲ１、ＯＲ２の出力（ＳＡＨＬ１［６：５］）は、ＳＩＭＤモード中、”１１”に設定される。すなわち、シフト制御回路１４は、ＳＩＭＤモード中、シフト量信号ＳＡＬ［４：０］に応じて、９６ビットから１２７ビットのシフト量を示すシフト量信号ＳＡＬ１［６：０］を出力する。
【００９５】
図１３は、図１１に示すバッファ回路３０、３２とビット選択回路４２の一例を示す。バッファ回路３０の回路構成および機能は、図５に示すバッファ回路３０の回路構成および機能と同じである。バッファ回路３２は、データＲＬ［１６：１］をデータＲ［１６：１］として出力する複数のバッファＢＵＦを有する。
【００９６】
ビット選択回路４２は、データＲ［１５９：１４４］に対応するデータＲＨ、ＲＬＨの各ビットのオア論理を演算する複数の２入力のオア回路ＯＲを有する。また、ビット選択回路４２は、データＲ［１４３：３３］に対応するデータＲＨ、ＲＬＨ、ＲＬの各ビットのオア論理を演算する複数の３入力のオア回路ＯＲを有する。さらに、ビット選択回路４２は、データＲ［３２：１７］に対応するデータＲＬＨ、ＲＬの各ビットのオア論理を演算する複数の２入力のオア回路ＯＲを有する。すなわち、データＲ［１５９：１７］の各ビットは、データＲＨ［１５９：３３］とデータＲＬＨ［１５９：３３］とデータＲＬ［１４３：１７］の各ビットのいずれかが論理１の場合、論理１に設定される。
【００９７】
図１１に示すシフト回路２０ａ、２２ａ、２２ｂは、有効なビットを除くビットを論理０に設定する機能を有する。また、図１４および図１５に示すように、データＤ［６３：０］が、同じビット番号の内部バスＲＨ、ＲＬＨ、ＲＬに同時に出力されることはない。このため、有効なデータＤが、ビット選択回路４２の各オア回路ＯＲの複数の入力に同時に供給されることはない。したがって、ビット番号が互いに重複するデータＲＨ、ＲＬＨ、ＲＬの各ビットをオア回路ＯＲで受けることで、ビット選択回路４２は、制御信号を用いることなく有効なデータを選択して出力バスＲ［１５９：１７］に出力することができる。
【００９８】
図１４は、図１１に示すシフト演算回路１０４の通常モード（ＳＩＭＤ＝”０”）での動作の一例を示す。すなわち、図１４は、シフト演算回路１０４によるシフト演算方法の一例を示す。図６と同様の動作については、詳細な説明は省略する。
【００９９】
シフト回路２０ａの動作は、図６と同じである。シフト回路２２ａは、ビットＲＬＨ［１５９］を基準にして、データＤ［３１：１６］の各ビットの位置を、シフト量信号ＳＡＬＨ１［６：０］に応じて、０ビットから１２７ビットの範囲でシフトし、データＲＬＨ［１５９：１７］として出力する。シフト回路２２ｂは、ビットＲＬ［１４３］を基準にして、データＤ［１５：０］の各ビット位置をシフト量信号ＳＡＬ１［６：０］に応じて、０ビットから１２７ビットの範囲でシフトし、データＲＬ［１４３：１］として出力する。
【０１００】
シフト回路２０ａが出力するデータＲＨのビット範囲と、シフト回路２２ａが出力するデータＲＬＨのビット範囲とは、３２ビットずれている。シフト回路２２ａが出力するデータＲＬＨのビット範囲と、シフト回路２２ｂが出力するデータＲＬのビット範囲とは、１６ビットずれている。また、通常モードでは（ＳＩＭＤ＝”０”）、シフト量信号ＳＡＨ［６：０］、ＳＡＬＨ［６：０］、ＳＡＬ［６：０］は、互いに同じ値に設定される。このため、シフト演算回路１０４は、データＤ［６３：０］のシフト動作において、データＤ［６３：３２］、Ｄ［３１：１６］、Ｄ［１５：０］を、データＲＨ、ＲＬＨ、ＲＬのビット番号を互いに重複させることなく、データＲとして出力することができる。また、シフト演算回路１０４は、データＲＨ、ＲＬＨ、ＲＬのビット番号を空けることなく、データＲとして出力することができる。
【０１０１】
図１４の下側のかぎ括弧内に示すデータＲ［１９１：１］は、シフト量信号ＳＡＨ１、ＳＡＬＨ１、ＳＡＬ１に応じてデータＤ［６３：０］が現れるビット位置の例を示す。データＤ［６３：０］が現れるビット位置は、図６と同様である。
【０１０２】
図１５は、図１１に示すシフト演算回路１０４のＳＩＭＤモード（ＳＩＭＤ＝”１”）での動作の一例を示す。すなわち、図１５は、シフト演算回路１０４によるシフト演算方法の別の例を示す。図７と同様の動作については、詳細な説明は省略する。なお、ＳＩＭＤモードでは、図１に示すシフト量信号ＳＡＨ１［６：０］、ＳＡＬＨ１［６：０］、ＳＡＬ１［６：０］は、互いに独立して設定される。
【０１０３】
ＳＩＭＤモードでは、シフト量信号ＳＡＨ１［６：０］の最上位ビットＳＡＨ１［６］は、”０”に固定され、シフト量信号ＳＡＬＨ１［６：０］の上位ビットＳＡＬＨ１［６：５］は、”１０”に固定される。また、シフト量信号ＳＡＬ１［６：０］の上位ビットＳＡＬ１［６：５］は、”１１”に固定される。すなわち、ＳＩＭＤモードでは、シフト量信号ＳＡＨ１、ＳＡＬＨ１、ＳＡＬ１の上位２ビットは、互いに異なる論理に設定される。
【０１０４】
シフト回路２０ａは、図７と同様に動作する。すなわち、シフト回路２０ａは、ビットＲＨ［１９１］を基準にして、データＤ［６３：３２］の各ビットの位置を、シフト量信号ＳＡＨ１［６：０］に応じて０ビットから６３ビットの範囲でシフトし、データＲＨ［１９１：９７］として出力する。
【０１０５】
シフト回路２２ａは、ビットＲＬＨ［１５９］を基準にして、データＤ［３１：１６］の各ビットの位置を、シフト量信号ＳＡＬＨ１［６：０］に応じて６４ビットから９５ビットの範囲でシフトし、データＲＬＨ［９５：４９］として出力する。シフト回路２２ｂは、ビットＲＬ［１４３］を基準にして、１６ビットのデータＤ［１５：０］の各ビットの位置を、シフト量信号ＳＡＬ１［６：０］に応じて９６ビットから１２７ビットの範囲でシフトし、データＲＬ［４７：１］として出力する。すなわち、ＳＩＭＤモードでは、シフト回路２０ａが出力するデータＲＨのビット範囲と、シフト回路２２ａが出力するデータＲＬＨのビット範囲と、シフト回路２２ｂが出力するデータＲＬのビット範囲とは、重複しない。
【０１０６】
図１５のかぎ括弧内の上側において、シフト量信号ＳＡＨが”００ｈ”の場合、シフト量信号ＳＡＨ１も”００ｈ”に設定され（０ビット右シフト）、データＤ［６３：３２］は、データＲ［１９１：１６０］として出力される。シフト量信号ＳＡＬＨが”００ｈ”の場合、シフト量信号ＳＡＬＨ１は”４０ｈ”に設定され（６４ビット右シフト）、データＤ［３１：１６］は、データＲ［９５：８０］として出力される。シフト量信号ＳＡＬが”００ｈ”の場合、シフト量信号ＳＡＬ１は”６０ｈ”に設定され（９６ビット右シフト）、データＤ［１５：０］は、データＲ［４７：３２］として出力される。
【０１０７】
図１５のかぎ括弧内の下側において、シフト量信号ＳＡＨが”３Ｆｈ”の場合、シフト量信号ＳＡＨ１も”３Ｆｈ”に設定され（６３ビット右シフト）、データＤ［６３：３２］は、データＲ［１２８：９７］として出力される。シフト量信号ＳＡＬＨが”１Ｆｈ”の場合、シフト量信号ＳＡＬＨ１は”５Ｆｈ”に設定され（９５ビット右シフト）、データＤ［３１：１６］は、データＲ［６４：４９］として出力される。シフト量信号ＳＡＬが”１Ｆｈ”の場合、シフト量信号ＳＡＬ１は”７Ｆｈ”に設定され（１２７ビット右シフト）、データＤ［１５：０］は、データＲ［１６：１］として出力される。
【０１０８】
このように、ＳＩＭＤモードでは、データＤ［６３：３２］は、データＲ［１９１：９７］の範囲に出力され、データＤ［３１：１６］は、データＲ［９５：４９］の範囲に出力され、データＤ［１５：０］は、データＲ［４７：１］の範囲に出力される。したがって、図１１に示すシフト量信号ＳＡＨ［６：０］、ＳＡＬＨ［６：０］、ＳＡＬ［６：０］が互いに独立して設定される場合にも、データＤ［６３：３２］、Ｄ［３１：１６］、Ｄ［１５：０］が衝突することを抑止することができる。
【０１０９】
以上、図１１から図１５に示す実施形態においても、図１から図１０に示す実施形態と同様の効果を得ることができる。例えば、シフト演算回路１０４の回路サイズを、ビットが重複して供給される複数のシフト回路を含む他のシフト演算回路の回路サイズに比べて小さくすることができる。
【０１１０】
３つのシフト回路２０ａ、２２ａ、２２ｂにそれぞれ接続される内部バスＲＨ、ＲＬＨ、ＲＬの基準のビット位置を、分割データＤのビット幅分ずらすことで、通常モードにおいて、データＤが衝突することを抑止することができる。ビット番号が互いに重複するデータＲＨ、ＲＬＨ、ＲＬの各ビットを２入力または３入力のオア回路ＯＲで受けることで、ビット選択回路４２は、制御信号を用いることなく有効なデータＤを選択することができる。ＳＩＭＤモードにおいて、シフト量信号ＳＡＨ１、ＳＡＬＨ１、ＳＡＬの上位２ビットの論理を互いに相違させることで、データＤ［６３：３２］、Ｄ［３１：１６］、Ｄ［１５：０］が衝突することを抑止することができる。
【０１１１】
図１６は、シフト演算回路の別の実施形態を示す。図１および図１１に示す要素と同一または同様の要素については、同一の符号を付し、詳細な説明は省略する。この実施形態のシフト演算回路１０６は、シフト制御回路１５、１６、１３、１４、シフト回路２２ｃ、２２ｄ、２２ａ、２２ｂ、バッファ回路３３、３２およびビット選択回路４４を有する。
【０１１２】
シフト演算回路１０６は、図１に示すシフト演算回路１００と同様に、図２に示す演算処理装置２００の浮動小数点用の加算器ＦＡＤＤまたは乗算加算器ＦＭＡに搭載可能である。この場合、ＳＩＭＤ演算では、４つに分割されたデータ（オペランド）を用いて演算が並列に実行される。
【０１１３】
なお、シフト演算回路１０６がパリティ予測器を内蔵する場合、括弧内に示すパリティビットＤＰ、ＲＰＨ、ＲＰＨＨ、ＲＰＬＨ、ＲＰＬ、ＲＰが付加される。以下では、シフト演算回路１０６がパリティ予測器を内蔵せず、パリティビットＤＰ、ＲＰＨ、ＲＰＨＨ、ＲＰＬＨ、ＲＰＬ、ＲＰが付加されない場合について説明される。
【０１１４】
シフト制御回路１５は、シフト量信号ＳＡＨ［６：０］の論理をモード信号ＳＩＭＤに応じて変更し、シフト量信号ＳＡＨ１［６：０］として出力する。シフト制御回路１６は、シフト量信号ＳＡＨＨ［６：０］の論理をモード信号ＳＩＭＤに応じて変更し、シフト量信号ＳＡＨＨ１［６：０］として出力する。シフト制御回路１３の回路構成および機能は、図１１に示すシフト制御回路１３の回路構成および機能と同じであり、シフト制御回路１４の回路構成および機能は、図１１に示すシフト制御回路１４の回路構成および機能と同じである。
【０１１５】
シフト回路２２ｃ、２２ｄ、２２ａ、２２ｂは、図１１に示すシフト回路２２ａ、２２ｂと同じ回路構成を有する。このため、シフト回路２２ｃ、２２ｄ、２２ａ、２２ｂの回路データ（マクロデータ）を共通にすることができ、シフト回路２２ｃ、２２ｄ、２２ａ、２２ｂを別々に設計する場合に比べて、設計期間を短縮することができる。シフト回路２２ａの動作は、図１１に示すシフト回路２２ａの動作と同じであり、シフト回路２２ｂの動作は、図１１に示すシフト回路２２ｂの動作と同じである。
【０１１６】
シフト回路２２ｃは、６４ビットのデータＤ［６３：０］のうち１６ビットのデータＤ［６３：４８］を、シフト量信号ＳＡＨ１の値に応じて、上位側から下位側に向けてビットシフトし、１４３ビットの内部バスＲＨ［１９１：４９］に出力する。すなわち、シフト回路２２ｃは、データＤ［６３：４８］をシフト量信号ＳＡＨ１の値（０ビットから１２７ビットのいずれか）だけ右シフトする。
【０１１７】
シフト回路２２ｄは、６４ビットのデータＤ［６３：０］のうち１６ビットのデータＤ［４７：３２］を、シフト量信号ＳＡＨＨ１の値に応じて、上位側から下位側に向けてビットシフトし、１４３ビットの内部バスＲＨＨ［１７５：３３］に出力する。すなわち、シフト回路２２ｄは、データＤ［４７：３２］をシフト量信号ＳＡＨＨ１の値（０ビットから１２７ビットのいずれか）だけ右シフトする。以下では、内部バスＲＨＨ［１７５：３３］に伝達されるデータは、データＲＨＨ［１７５：３３］とも称される。
【０１１８】
バッファ回路３２の回路構成および機能は、図１１に示すバッファ回路３２の回路構成および機能と同じである。バッファ回路３３は、バッファ回路３２と同じ回路構成を有する。バッファ回路３３は、シフト回路２２ｃから出力されるデータＲＨ［１９１：４９］のうち、上位の１６ビットのデータＲＨ［１９１：１７６］をデータＲ［１９１：１７６］として出力する。
【０１１９】
ビット選択回路４４は、シフト回路２２ｃから出力されるデータＲＨ［１７５：４９］と、シフト回路２２ｄから出力されるデータＲＨＨ［１７５：３３］とを受ける。また、ビット選択回路４４は、シフト回路２２ａから出力されるデータＲＬＨ［１５９：１７］と、シフト回路２２ｂから出力されるデータＲＬ［１４３：１７］とを受ける。ビット選択回路４４は、データＲＨ［１７５：４９］、データＲＨＨ［１７５：３３］、データＲＬＨ［１５９：１７］、データＲＬ［１４３：１７］の中から有効なビットを選択し、データＲ［１７５：１７］として出力する。データＲ［１７５：１７］のうち、有効なビットは、最小で４８ビットであり、最大で６４ビットである。
【０１２０】
図１７は、図１６に示すシフト制御回路１５、１６、１３、１４の一例を示す。シフト制御回路１３は、図１１に示すシフト制御回路１３と同じであり、シフト制御回路１４の回路構成および機能は、図１１に示すシフト制御回路１４の回路構成および機能と同じである。
【０１２１】
シフト制御回路１５は、インバータＩＶを介してモード信号ＳＩＭＤを受けるアンド回路ＡＮＤ１、ＡＮＤ２と、シフト量信号ＳＡＨ［４：０］をシフト量信号ＳＡＨ１［４：０］として出力する複数のバッファＢＵＦとを有する。アンド回路ＡＮＤ１、ＡＮＤ２の出力（ＳＡＨ１［６：５］）は、ＳＩＭＤモード中、”００”に設定される。すなわち、シフト制御回路１５は、ＳＩＭＤモード中、シフト量信号ＳＡＨ［４：０］に応じて、０ビットから３１ビットのシフト量を示すシフト量信号ＳＡＨ１［６：０］を出力する。
【０１２２】
シフト制御回路１６は、インバータＩＶを介してモード信号ＳＩＭＤを受けるアンド回路ＡＮＤと、モード信号ＳＩＭＤを受けるオア回路ＯＲとを有する。また、シフト制御回路１６は、シフト量信号ＳＡＨＨ［４：０］をシフト量信号ＳＡＨＨ１［４：０］として出力する複数のバッファＢＵＦとを有する。アンド回路ＡＮＤとオア回路ＯＲの出力（ＳＡＨＨ１［６：５］）は、ＳＩＭＤモード中、”０１”に設定される。すなわち、シフト制御回路１６は、ＳＩＭＤモード中、シフト量信号ＳＡＨＨ［４：０］に応じて、３２ビットから６３ビットのシフト量を示すシフト量信号ＳＡＨＨ１［６：０］を出力する。
【０１２３】
図１８は、図１６に示すバッファ回路３３、３２とビット選択回路４４の一例を示す。バッファ回路３２の回路構成および機能は、図１３に示すバッファ回路３２の回路構成および機能と同じである。バッファ回路３３は、データＲＨ［１９１：１７６］をデータＲ［１９１：１７６］として出力する複数のバッファＢＵＦを有する。
【０１２４】
ビット選択回路４４は、データＲ［１７５：１６０］に対応するデータＲＨ、ＲＨＨの各ビットのオア論理を演算する複数の２入力のオア回路ＯＲを有する。また、ビット選択回路４４は、データＲ［１５９：１４４］に対応するデータＲＨ、ＲＨＨ、ＲＬＨの各ビットのオア論理を演算する複数の３入力のオア回路ＯＲを有する。さらに、ビット選択回路４４は、データＲ［１４３：４９］に対応するデータＲＨ、ＲＨＨ、ＲＬＨ、ＲＬの各ビットのオア論理を演算する複数の４入力のオア回路ＯＲを有する。
【０１２５】
また、ビット選択回路４４は、データＲ［４８：３３］に対応するデータＲＨＨ、ＲＬＨ、ＲＬの各ビットのオア論理を演算する複数の３入力のオア回路ＯＲを有する。さらに、ビット選択回路４４は、データＲ［３２：１７］に対応するデータＲＬＨ、ＲＬの各ビットのオア論理を演算する複数の２入力のオア回路ＯＲを有する。すなわち、データＲ［１７５：１７］の各ビットは、データＲＨ［１７５：４９］とデータＲＨＨ［１７５：３３］とデータＲＬＨ［１５９：１７］と、データＲＬ［１４３：１７］の各ビットのいずれかが論理１の場合、論理１に設定される。
【０１２６】
図１６に示すシフト回路２２ｃ、２２ｄ、２２ａ、２２ｂは、有効なビットを除くビットを論理０に設定する機能を有する。また、図１９および図２０に示すように、データＤ［６３：０］が、同じビット番号の内部バスＲＨ、ＲＨＨ、ＲＬＨ、ＲＬに同時に出力されることはない。このため、有効なデータＤが、ビット選択回路４４の各オア回路ＯＲの複数の入力に同時に供給されることはない。したがって、ビット番号が互いに重複するデータＲＨ、ＲＨＨ、ＲＬＨ、ＲＬの各ビットをオア回路ＯＲで受けることで、ビット選択回路４４は、制御信号を用いることなく有効なデータを選択して出力バスＲ［１７５：１７］に出力することができる。
【０１２７】
図１９は、図１６に示すシフト演算回路１０６の通常モード（ＳＩＭＤ＝”０”）での動作の一例を示す。すなわち、図１９は、シフト演算回路１０６によるシフト演算方法の一例を示す。図６および図１４と同様の動作については、詳細な説明は省略する。
【０１２８】
シフト回路２２ｃは、ビットＲＨ［１９１］を基準にして、データＤ［６３：４８］の各ビットの位置を、シフト量信号ＳＡＨ１［６：０］に応じて０ビットから１２７ビットの範囲でシフトし、データＲＨ［１９１：４９］として出力する。シフト回路２２ｄは、ビットＲＨ［１７５］を基準にして、データＤ［４７：３２］の各ビットの位置を、シフト量信号ＳＡＨＨ１［６：０］に応じて、０ビットから１２７ビットの範囲でシフトし、データＲＨＨ［１７５：３３］として出力する。シフト回路２２ａ、２２ｂの動作は、図１４と同じである。
【０１２９】
シフト回路２２ｃが出力するデータＲＨのビット範囲と、シフト回路２２ｄが出力するデータＲＨＨのビット範囲とは、１６ビットずれている。シフト回路２２ｄが出力するデータＲＨＨのビット範囲と、シフト回路２２ａが出力するデータＲＬＨのビット範囲とは、１６ビットずれている。シフト回路２２ａが出力するデータＲＬＨのビット範囲と、シフト回路２２ｂが出力するデータＲＬのビット範囲とは、１６ビットずれている。また、通常モードでは（ＳＩＭＤ＝”０”）、シフト量信号ＳＡＨ［６：０］、ＳＡＨＨ［６：０］、ＳＡＬＨ［６：０］、ＳＡＬ［６：０］は、互いに同じ値に設定される。このため、シフト演算回路１０６は、シフト動作において、データＤ［６３：４８］、Ｄ［４７：３２］、Ｄ［３１：１６］、Ｄ［１５：０］を、データＲＨ、ＲＨＨ、ＲＬＨ、ＲＬのビット番号を互いに重複させることなく、データＲとして出力できる。また、シフト演算回路１０６は、データＲＨ、ＲＨＨ、ＲＬＨ、ＲＬのビット番号を空けることなく、データＲとして出力することができる。
【０１３０】
図２０は、図１６に示すシフト演算回路１０６のＳＩＭＤモード（ＳＩＭＤ＝”１”）での動作の一例を示す。すなわち、図２０は、シフト演算回路１０６によるシフト演算方法の別の例を示す。図７および図１５と同様の動作については、詳細な説明は省略する。なお、ＳＩＭＤモードでは、図１に示すシフト量信号ＳＡＨ１［６：０］、ＳＡＨＨ１［６：０］、ＳＡＬＨ１［６：０］、ＳＡＬ１［６：０］は、互いに独立して設定される。
【０１３１】
ＳＩＭＤモードでは、シフト量信号ＳＡＨ１［６：０］の上位ビットＳＡＨ１［６：５］は、”００”に固定され、シフト量信号ＳＡＨＨ１［６：０］の上位ビットＳＡＨＨ１［６：５］は、”０１”に固定される。また、シフト量信号ＳＡＬＨ１［６：０］の上位ビットＳＡＬＨ１［６：５］は、”１０”に固定され、シフト量信号ＳＡＬ１［６：０］の上位ビットＳＡＬ１［６：５］は、”１１”に固定される。すなわち、ＳＩＭＤモードでは、シフト量信号ＳＡＨ１、ＳＡＨＨ１、ＳＡＬＨ１、ＳＡＬ１の上位２ビットは、互いに異なる論理に設定される。
【０１３２】
シフト回路２２ｃは、ビットＲＨ［１９１］を基準にして、データＤ［６３：４８］の各ビットの位置を、シフト量信号ＳＡＨ１［６：０］に応じて０ビットから３１ビットの範囲でシフトし、データＲＨ［１９１：１４５］として出力する。シフト回路２２ｄは、ビットＲＨＨ［１７５］を基準にして、データＤ［４７：３２］の各ビットの位置を、シフト量信号ＳＡＨＨ１［６：０］に応じて３２ビットから６３ビットの範囲でシフトし、データＲＨＨ［１４３：９７］として出力する。シフト回路２２ａ、２２ｂの動作は、図１５に示すシフト回路２２ａ、２２ｂの動作と同じである。
【０１３３】
図２０に示すように、ＳＩＭＤモードでは、データＤ［６３：４８］は、データＲ［１９１：１４５］の範囲に出力され、データＤ［４７：３２］は、データＲ［１４３：９７］の範囲に出力される。データＤ［３１：１６］は、データＲ［９５：４９］の範囲に出力され、データＤ［１５：０］は、データＲ［４７：１］の範囲に出力される。すなわち、シフト回路２２ｃ、２２ｄ、２２ａ、２２ｂが出力するデータＲＨ、ＲＨＨ、ＲＬＨ、ＲＬのビット範囲は、互いに重複しない。このため、シフト量信号ＳＡＨ、ＳＡＨＨ、ＳＡＬＨ、ＳＡＬが互いに独立して設定される場合にも、データＤ［６３：４８］、データＤ［４７：３２］、Ｄ［３１：１６］、Ｄ［１５：０］が衝突することを抑止することができる。
【０１３４】
図２１は、図１６に示すシフト演算回路１０６のシフト動作の一例を示す。通常モードにおいて、例えば、シフト量信号ＳＡＨ、ＳＡＨＨ、ＳＡＬＨ、ＳＡＬが”００ｈ”の場合、シフト量信号ＳＡＨ１、ＳＡＨＨ１、ＳＡＬＨ１、ＳＡＬ１も”００ｈ”に設定される（０ビット右シフト）。この場合、データＤ［６３：４８］、Ｄ［４７：３２］、Ｄ［３１：１６］、Ｄ［１５：０］は、データＲ［１９１：１２８］として出力される。シフト量信号ＳＡＨ、ＳＡＨＨ、ＳＡＬＨ、ＳＡＬが”１９ｈ”の場合、シフト量信号ＳＡＨ１、ＳＡＨＨ１、ＳＡＬＨ１、ＳＡＬ１も”１９ｈ”に設定される（２５ビット右シフト）。この場合、データＤ［６３：４８］、Ｄ［４７：３２］、Ｄ［３１：１６］、Ｄ［１５：０］は、データＲ［１６６：１０３］として出力される。
【０１３５】
シフト量信号ＳＡＨ、ＳＡＨＨ、ＳＡＬＨ、ＳＡＬが”６Ｅｈ”の場合、シフト量信号ＳＡＨ１、ＳＡＨＨ１、ＳＡＬＨ１、ＳＡＬ１も”６Ｅｈ”に設定される（１１０ビット右シフト）。この場合、データＤ［６３：４８］、Ｄ［４７：３２］、Ｄ［３１：１６］、Ｄ［１５：０］は、データＲ［８１：１８］として出力される。シフト量信号ＳＡＨ、ＳＡＨＨ、ＳＡＬＨ、ＳＡＬが”７Ｆｈ”の場合、シフト量信号ＳＡＨ１、ＳＡＨＨ１、ＳＡＬＨ１、ＳＡＬ１も”７Ｆｈ”に設定される（１２７ビット右シフト）。この場合、データＤ［６３：４８］、Ｄ［４７：３２］、Ｄ［３１：１６］、Ｄ［１５：０］は、データＲ［６４：１］として出力される。
【０１３６】
一方、ＳＩＭＤモードにおいて、例えば、シフト量信号ＳＡＨ、ＳＡＨＨ、ＳＡＬＨ、ＳＡＬが”００ｈ”、”１Ｆｈ”、”００ｈ”、”１Ｆｈ”に設定される。この場合、シフト量信号ＳＡＨ１、ＳＡＨＨ１、ＳＡＬＨ１、ＳＡＬ１は、”００ｈ”、”３Ｆｈ”、”４０ｈ”、”７Ｆｈ”に設定される。この場合、データＤ［６３：４８］は、データＲ［１９１：１７６］として出力され、データＤ［４７：３２］は、データＲ［１１２：９７］として出力される。データＤ［３１：１６］は、データＲ［９５：８０］として出力され、Ｄ［１５：０］は、データＲ［１６：１］として出力される。
【０１３７】
また、ＳＩＭＤモードにおいて、シフト量信号ＳＡＨ、ＳＡＨＨ、ＳＡＬＨ、ＳＡＬが”１Ｆｈ”、”００ｈ”、”１Ｆｈ”、”００ｈ”に設定される。この場合、シフト量信号ＳＡＨ１、ＳＡＨＨ１、ＳＡＬＨ１、ＳＡＬ１は、”１Ｆｈ”、”２０ｈ”、”５Ｆｈ”、”６０ｈ”に設定される。この場合、データＤ［６３：４８］は、データＲ［１６０：１４５］として出力され、データＤ［４７：３２］は、データＲ［１４３：１２８］として出力される。データＤ［３１：１６］は、データＲ［６４：４９］として出力され、Ｄ［１５：０］は、データＲ［４７：３２］として出力される。
【０１３８】
なお、図１６に示すモード信号ＳＩＭＤを２ビットにすることで、シフト演算回路１０６を演算器に搭載する演算処理装置２００は、３２ビットデータ（２分割）のＳＩＭＤ演算と、１６ビットデータ（４分割）のＳＩＭＤ演算とをそれぞれ実行可能である。この場合、２分割のＳＩＭＤ演算を実行する第１のＳＩＭＤモード中、シフト制御回路１５、１６は、シフト量信号ＳＡＨ１［６：０］、ＳＡＨＨ１［６：０］の最上位ビットＳＡＨ１［６］、ＳＡＨＨ１［６］を論理０に設定する。シフト制御回路１３、１４は、シフト量信号ＳＡＬＨ１［６：０］、ＳＡＬ１［６：０］の最上位ビットＳＡＬＨ１［６］、ＳＡＬ１［６］を論理１に設定する。これにより、シフト演算回路１０６は、図７と同様に動作する。４分割のＳＩＭＤ演算を実行する第２のＳＩＭＤモードの動作は、図２０と同じである。
【０１３９】
以上、図１６から図２１に示す実施形態においても、図１から図１５に示す実施形態と同様の効果を得ることができる。例えば、シフト演算回路１０６の回路サイズを、ビットが重複して供給される複数のシフト回路を含む他のシフト演算回路の回路サイズに比べて小さくすることができる。
【０１４０】
４つのシフト回路２２ｃ、２２ｄ、２２ａ、２２ｂにそれぞれ接続される内部バスＲＨ、ＲＨＨ、ＲＬＨ、ＲＬの基準のビット位置を、分割データＤのビット幅分ずらすことで、通常モードにおいて、データＤが衝突することを抑止することができる。ビット番号が互いに重複するデータＲＨ、ＲＨＨ、ＲＬＨ、ＲＬの各ビットを２入力、３入力または４入力のオア回路ＯＲで受けることで、ビット選択回路４４は、制御信号を用いることなく有効なデータＤを選択することができる。ＳＩＭＤモードにおいて、シフト量信号ＳＡＨ１、ＳＡＨＨ１、ＳＡＬＨ１、ＳＡＬ１の上位２ビットの論理を互いに相違させることで、データＤ［６３：４８］、Ｄ［４７：３２］、Ｄ［３１：１６］、Ｄ［１５：０］が衝突することを抑止することができる。さらに、図１６から図２１に示す実施形態では、モード信号ＳＩＭＤを２ビットにすることで、シフト演算回路１０６を、２分割または４分割のＳＩＭＤ演算を実行可能にすることができる。
【０１４１】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１４２】
１０、１１、１３、１４、１５、１６…シフト制御回路；２０ａ、２０ｂ、２０Ｐａ、２０Ｐｂ、２２ａ、２２ｂ、２２ｃ、２２ｄ、２８、２９…シフト回路；３０、３０Ｐ、３１、３１Ｐ、３２、３３、３９…バッファ回路；４０、４０Ｐ、４２、４４、４９…ビット選択回路；５０…命令キャッシュ；５２…命令バッファ；５４…デコード部；５６…リザベーションステーション部；５８…演算実行部；６０…固定小数点演算部；６２…浮動小数点演算部；６４…論理演算部；６６…アドレス演算部；６８…レジスタ部；１００、１００Ｐ、１０２、１０４、１０６…シフト演算回路；２００…演算処理装置；ＡＤＤ、ＡＤＤ１、ＡＤＤ２…加算器；Ｄ…データ；ＦＡＤＤ…加算器；ＣＭＰ…比較器；ＦＭＵＬ…乗算器；ＭＵＬ…乗算器；ＮＲＭＳＦＴ…正規化シフタ；Ｒ、ＲＨ、ＲＨＨ、ＲＨＬ、ＲＬ…データ；ＲＳＡ、ＲＳＥ…リザベーションステーション；ＲＳＦＴ…右シフタ；ＲＺＰ…リーディングゼロ予測器；ＳＡＨ、ＳＡＨ１、ＳＡＨＨ、ＳＡＨＨ１、ＳＡＬ、ＳＡＬ１、ＳＡＬＬ、ＳＡＬＬ１…シフト量信号；ＳＦＴ…シフト演算器；ＳＩＭＤ…モード信号；ＳＵＢ１…減算器；ＳＷ…入れ替えスイッチ
【図１】
2018128727.tif 000003
【図２】
2018128727.tif 000004
【図３】
2018128727.tif 000005
【図４】
2018128727.tif 000006
【図５】
2018128727.tif 000007
【図６】
2018128727.tif 000008
【図７】
2018128727.tif 000009
【図８】
2018128727.tif 000010
【図９】
2018128727.tif 000011
【図１０】
2018128727.tif 000012
【図１１】
2018128727.tif 000013
【図１２】
2018128727.tif 000014
【図１３】
2018128727.tif 000015
【図１４】
2018128727.tif 000016
【図１５】
2018128727.tif 000017
【図１６】
2018128727.tif 000018
【図１７】
2018128727.tif 000019
【図１８】
2018128727.tif 000020
【図１９】
2018128727.tif 000021
【図２０】
2018128727.tif 000022
【図２１】
2018128727.tif 000023