(57)【要約】【課題】即値演算命令の実行時間を短縮する。【解決手段】演算処理装置において、命令デコーダは、即値と定数とを乗算し、乗算結果とレジスタファイルに保持されるデータとの演算を実行する即値演算命令をデコードした場合、第１のシフト制御情報と第２のシフト制御情報とを定数に基づいて生成する。演算器は、即値と定数との積を算出する第１の演算部と、積とレジスタファイルに保持されるデータとの演算を実行する第２の演算部とを有する。第１の演算部は、命令デコーダから受信する即値を第１のシフト制御情報に基づいてビットシフトした第１のシフト値を生成し、即値または即値の補数を第２のシフト制御情報に基づいてビットシフトした値または”０”である第２のシフト値を生成し、第１のシフト値と第２のシフト値とを加算することで積を算出する。【選択図】図１
2019067375.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードする命令デコーダと、演算に使用するデータを保持するレジスタファイルと、前記命令デコーダがデコードした命令に基づいて演算を実行する演算器とを有する演算処理装置において、
前記命令デコーダは、即値と定数とを乗算し、乗算結果と前記レジスタファイルに保持されるデータとの演算を実行する即値演算命令をデコードした場合、第１のシフト制御情報と第２のシフト制御情報とを定数に基づいて生成するシフト制御部を有し、
前記演算器は、即値と定数との積を算出する第１の演算部と、前記積と前記レジスタファイルに保持されるデータとの演算を実行する第２の演算部とを有し、
前記第１の演算部は、
前記命令デコーダから受信する即値を前記第１のシフト制御情報に基づいてビットシフトした第１のシフト値を生成する第１のシフト部と、
即値または即値の補数を前記第２のシフト制御情報に基づいてビットシフトした値または”０”である第２のシフト値を生成する第２のシフト部と、
前記第１のシフト値と前記第２のシフト値とを加算することで前記積を算出する加算部とを有することを特徴とする演算処理装置。
【請求項２】
前記定数は、２ａ＋ｃ・２ｂ（ａ、ｂは”０”以上の整数、ｃは”−１”、”０”、”１”のいずれか）で表され、
前記第１のシフト部は、即値を前記第１のシフト制御情報に基づいてａビットシフトし、
前記第２のシフト部は、即値または即値の補数を前記第２のシフト制御情報に基づいてｂビットシフトすることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記第１の演算部は、前記レジスタファイルから前記第２の演算部にデータを読み出すサイクル中に動作することを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項４】
前記第１のシフト部は、
ａを”１”以上の整数とする複数通りの値「２ａ」の各々に対応して、即値をａビットシフトする第１のシフタと、
前記第１のシフタによりシフトされた即値または前記命令デコーダから出力される即値のいずれかを、前記第１のシフト制御情報に基づいて前記第１のシフト値として選択する第１の選択部とを有し、
前記第２のシフト部は、
ｃを”１”とし、ｂを”１”以上の整数とする複数通りの値「ｃ・２ｂ」の各々に対応して、即値をｂビットシフトする第２のシフタと、
即値の補数を生成する補数生成部と、
ｃを”−１”とし、ｂを”１”以上の整数とする複数通りの値「ｃ・２ｂ」の各々に対応して、前記補数生成部が生成した補数をｂビットシフトする第３のシフタと、
前記第２のシフタによりシフトされた即値、前記命令デコーダから出力される即値、前記第３のシフタによりシフトされた補数、前記補数生成部が生成した補数、または”０”のいずれかを、前記第２のシフト制御情報に基づいて前記第２のシフト値として選択する第２の選択部とを有することを特徴とする請求項２または請求項３に記載の演算処理装置。
【請求項５】
前記補数生成部は、即値の各ビットの論理を反転して補数を生成し、
前記シフト制御部は、前記第３のシフタによりシフトされた補数または前記補数生成部が生成した補数を前記第２の選択部に選択させる前記第２のシフト制御情報を生成する場合、前記加算部にキャリーを出力し、
前記加算部は、前記第１のシフト値と前記第２のシフト値と前記キャリーが示す値とを加算して前記積を生成することを特徴とする請求項４に記載の演算処理装置。
【請求項６】
前記シフト制御部は、
前記即値演算命令に含まれるコードに基づいて定数を算出する定数算出部と、
前記定数算出部が算出した定数に基づいて、前記第１のシフト制御情報と前記第２のシフト制御情報とを生成する制御情報生成部とを有することを特徴とする請求項１ないし請求項５のいずれか１項に記載の演算処理装置。
【請求項７】
即値と定数との乗算結果と前記レジスタファイルに保持されるデータとの演算を実行することなく、即値と定数との乗算結果を出力する前記即値演算命令を前記命令デコーダがデコードした場合、前記第２の演算部は、前記積と”０”とを加算する演算を実行することを特徴とする請求項１ないし請求項６のいずれか１項に記載の演算処理装置。
【請求項８】
前記演算処理装置はさらに、前記命令デコーダでデコードされた命令を保持し、保持した命令を前記演算器が実行可能な順に出力する実行制御部を有し、
前記命令デコーダが出力する前記第１のシフト制御情報および前記第２のシフト制御情報は、前記実行制御部を介して前記第１の演算部に出力されることを特徴とする請求項１ないし請求項７のいずれか１項に記載の演算処理装置。
【請求項９】
即値と定数とを乗算し、乗算結果とレジスタファイルに保持されるデータとの演算を実行する即値演算命令を実行する演算器において、
即値と定数との積を算出する第１の演算部と、前記積と前記レジスタファイルに保持されるデータとの演算を実行する第２の演算部とを有し、
前記第１の演算部は、
命令デコーダから受信する即値を前記命令デコーダから受信する第１のシフト制御情報に基づいてビットシフトした第１のシフト値を生成する第１のシフト部と、
即値または即値の補数を前記命令デコーダから受信する第２のシフト制御情報に基づいてビットシフトした値または”０”である第２のシフト値を生成する第２のシフト部と、
前記第１のシフト値と前記第２のシフト値とを加算することで前記積を算出する加算部とを有することを特徴とする演算器。
【請求項１０】
命令をデコードする命令デコーダと、演算に使用するデータを保持するレジスタファイルと、前記命令デコーダがデコードした命令に基づいて演算を実行する演算器とを有する演算処理装置の制御方法において、
前記命令デコーダが、即値と定数とを乗算し、乗算結果と前記レジスタファイルに保持されるデータとの演算を実行する即値演算命令をデコードした場合、第１のシフト制御情報と第２のシフト制御情報とを定数に基づいて生成し、
前記演算器が、
前記命令デコーダから出力される即値を前記第１のシフト制御情報に基づいてビットシフトした第１のシフト値を生成し、
即値または即値の補数を前記第２のシフト制御情報に基づいてビットシフトした値または”０”である第２のシフト値を生成し、
前記第１のシフト値と前記第２のシフト値とを加算することで、即値と定数との積を算出し、
前記積と前記レジスタファイルに保持されるデータとの演算を実行することで前記即値演算命令を実行することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、演算器および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）等の演算処理装置は、命令をフェッチステージ、
デコードステージ、実行ステージ等の複数のステージに分けて実行する命令パイプラインを有し、命令パイプラインの各ステージの動作には、通常、単一のクロックサイクルが必要とされる。命令パイプラインにより複数の命令を順次処理することで、命令が完了するまで次の命令の実行を開始しない場合と比べて命令の処理効率は向上する。命令パイプラインの各ステージの実行に必要な処理時間は、処理時間に必要とされる時間が最も長いステージの動作周波数で決まる。演算処理装置の動作タイミングにおいて、この処理時間に必要とされる時間が最も長いステージは、動作可能な最大動作周波数に影響を与えるクリティカルパスとなる。例えば、複数の命令の中に他の命令に比べて実行に必要な処理時間が長い特定命令がある場合、当該特定命令を処理する実行ステージがクリティカルパスとなり、当該特定命令を処理する実行ステージの動作可能周波数に合わせて全てのステージの処理時間が決定される。この場合、前述したクリティカルパスとなる特定命令を実行可能な演算処理装置は、当該特定命令を持たない演算処理装置に比べて、動作可能なクロックの周波数は低くなり、処理性能は低下する。
【０００３】
そこで、実行ステージの前段のデコードステージ中に特定命令の実行を開始することで、クロックの周波数を、特定命令を持たない場合と同様の周波数に設定し、演算処理装置の処理性能の低下を抑止する手法が提案されている（例えば、特許文献１参照）。例えば、レジスタが保持するデータと即値とを乗算する命令において、直前の命令の実行により得られたデータが乗算に使用するレジスタに格納される場合がある。この場合、直前の命令を実行した演算器が出力するデータであってレジスタに格納する前のデータと、デコードステージにおいて命令から取り出される即値との乗算が、デコードステージ中に開始される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−１８２９０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
例えば、即値と定数とを乗算し、乗算結果とレジスタファイルが保持するデータとの演算を実行する即値演算命令を、乗算器と加算器とを含む演算部を使用して実行する場合、まず、即値と定数とが乗算器により乗算される。次に、乗算器による乗算結果とレジスタファイルから読み出される値とが加算器により加算され、即値演算命令の演算結果が得られる。すなわち、演算部を使用した即値演算命令の実行は、演算部に含まれる乗算器と加算器とを順次使用して２つのフローに分けて実行される。演算部を２回使用して１つの命令を実行する場合、演算部を１回使用して１つの命令を実行する場合に比べて、演算回数が増え、演算の実行時間は長くなり、処理性能は低下する。
【０００６】
１つの側面では、本発明は、即値と定数とを乗算し、乗算結果とレジスタファイルが保持するデータとの演算を実行する即値演算命令の実行時間を短縮することを目的とする。
【課題を解決するための手段】
【０００７】
一つの実施態様では、命令をデコードする命令デコーダと、演算に使用するデータを保持するレジスタファイルと、命令デコーダがデコードした命令に基づいて演算を実行する演算器とを有する演算処理装置において、命令デコーダは、即値と定数とを乗算し、乗算結果とレジスタファイルに保持されるデータとの演算を実行する即値演算命令をデコードした場合、第１のシフト制御情報と第２のシフト制御情報とを定数に基づいて生成するシフト制御部を有し、演算器は、即値と定数との積を算出する第１の演算部と、積とレジスタファイルに保持されるデータとの演算を実行する第２の演算部とを有し、第１の演算部は、命令デコーダから受信する即値を第１のシフト制御情報に基づいてビットシフトした第１のシフト値を生成する第１のシフト部と、即値または即値の補数を第２のシフト制御情報に基づいてビットシフトした値または”０”である第２のシフト値を生成する第２のシフト部と、第１のシフト値と第２のシフト値とを加算することで積を算出する加算部とを有する。
【発明の効果】
【０００８】
１つの側面では、本発明は、即値と定数とを乗算し、乗算結果とレジスタファイルが保持するデータとの演算を実行する即値演算命令の実行時間を短縮することができる。
【図面の簡単な説明】
【０００９】
【図１】演算処理装置、演算器および演算処理装置の制御方法の一実施形態を示す図である。
【図２】図１に示す演算処理装置が即値演算命令を実行する場合の動作の一例を示す図である。
【図３】演算処理装置、演算器および演算処理装置の制御方法の別の実施形態を示す図である。
【図４】図３に示す命令デコーダの一例を示す図である。
【図５】図３に示す即値演算部の一例を示す図である。
【図６】即値演算命令で使用するデータの総ビット幅と、ＳＩＭＤ演算に使用する各データのビット幅とに応じて設定される定数の一例を示す図である。
【図７】図４に示すシフトデコーダの動作の概要を示す図である。
【図８】図３に示す演算処理装置が即値演算命令を実行する場合の動作の一例を示す図である。
【図９】即値演算命令を実行する他の演算処理装置と、他の演算処理装置の動作の概要を示す図である。
【図１０】即値演算命令を実行する他の演算処理装置と、他の演算処理装置の動作の概要を示す図である。
【図１１】図９および図１０に示す演算処理装置が即値演算命令を実行する場合の動作の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を用いて実施形態を説明する。信号および情報が伝達される信号線には、信号名および情報名と同じ符号を使用する。
【００１１】
図１は、演算処理装置、演算器および演算処理装置の制御方法の一実施形態を示す。図１に示す演算処理装置１００は、例えば、ＲＩＳＣ（Reduced Instruction Set Computer）型のプロセッサであり、命令デコーダ１、レジスタファイル２および演算器３を有する。演算処理装置１００は、即値演算命令の受信に基づいて、定数Ｐと即値ＩＭとを乗算し、乗算結果とレジスタファイル２が保持するデータＤＴとの演算を実行する機能を有する。即値演算命令は、式（１）、（２）、（３）に示す演算を実行する命令であり、式（１）−（３）毎に命令コードが異なる。符号Ｘｓは、符号Ｘｓで示されるレジスタが保持するデータを示し、符号Ｘｄは、即値演算命令の演算結果および演算結果が格納されるレジスタを示す。以下では、レジスタＸｓが保持するデータは、データＸｓとも称される。
Ｘｄ＝Ｐ・ＩＭ‥‥（１）
Ｘｄ＝Ｘｓ＋Ｐ・ＩＭ‥‥（２）
Ｘｄ＝Ｘｓ−Ｐ・ＩＭ‥‥（３）
命令デコーダ１は、図示しない命令バッファ等から出力される命令ＩＮＳＴをデコードし、デコード結果に基づいてレジスタファイル２の動作を制御する選択情報ＲＳＥＬと、演算器３等の動作を制御する各種の制御情報を生成する。命令デコーダ１は、即値演算命令をデコードした場合、選択情報ＲＳＥＬ、即値ＩＭおよびシフト制御情報ＳＦＴ１、ＳＦＴ２等を生成する。例えば、選択情報ＲＳＥＬおよびシフト制御情報ＳＦＴ１、ＳＦＴ２等の制御情報は、制御信号として出力される。
【００１２】
式（１）に示す即値演算命令は、即値ＩＭと、式（４）で示される定数Ｐとを乗算する命令である。式（２）に示す即値演算命令は、即値ＩＭと、式（４）で示される定数Ｐとを乗算し、レジスタファイル２に保持されるデータＤＴと乗算により得られる値（＝Ｐ・ＩＭ）とを加算する命令である。式（３）に示す即値演算命令は、即値ＩＭと、式（４）で示される定数Ｐとを乗算し、レジスタファイル２に保持されるデータＤＴから乗算により得られる値（＝Ｐ・ＩＭ）を減算する命令である。以下では、主に式（２）に示す即値演算命令を実行する場合について説明される。
Ｐ＝２ａ＋ｃ・２ｂ（ａ、ｂは”０”以上の整数、ｃは”−１”、”０”、”１”のいずれか）  ‥‥（４）
特に限定されないが、図1に示す命令ＩＳＮＴのビット数は、命令ＩＮＳＴの種類に依
存せず、３２ビット等に固定される。命令ＩＳＮＴが即値演算命令の場合、命令ＩＮＳＴは、即値演算命令を識別する値を示す命令コードＩＣＯＤＥと、即値ＩＭと、定数Ｐに対応するコードＣＯＤＥと、レジスタファイル２内のレジスタを識別するレジスタ番号ＲＥＧＮとを含む。
【００１３】
命令デコーダ１は、定数算出部１ｂおよび制御情報生成部１ｃを含むシフト制御部１ａを有する。定数算出部１ｂは、即値演算命令に含まれるコードＣＯＤＥに基づいて定数Ｐを算出する。なお、定数算出部１ｂは、コードＣＯＤＥと定数Ｐとの関係を示すテーブルを参照することでコードＣＯＤＥから定数Ｐを生成してもよい。
【００１４】
制御情報生成部１ｃは、定数算出部１ｂが算出した定数Ｐに基づいて、シフト制御情報ＳＦＴ１、ＳＦＴ２を生成する。すなわち、シフト制御部１ａは、命令デコーダ１が即値演算命令をデコードした場合、定数Ｐに基づいてシフト制御情報ＳＦＴ１、ＳＦＴ２を生成する。なお、命令デコーダ１は、即値演算命令をデコードした場合、即値演算命令に含まれる即値ＩＭを取り出して演算器３に出力する。シフト制御情報ＳＦＴ１は、第１のシフト制御情報の一例であり、シフト制御情報ＳＦＴ２は、第２のシフト制御情報の一例である。
【００１５】
レジスタファイル２は、図示しない複数のレジスタを有する。複数のレジスタの各々は、命令デコーダ１からの選択情報ＲＳＥＬに基づいて選択される。例えば、選択情報ＲＳＥＬは、複数のレジスタのレジスタファイル２内での位置を示すアドレスである。そして、レジスタファイル２は、選択情報ＲＳＥＬに基づいて選択したレジスタからデータＤＴを読み出し、あるいは、選択情報ＲＳＥＬに基づいて選択したレジスタに演算器３等から出力されるデータを格納する。
【００１６】
演算器３は、演算部４、５を有する。演算部４は、シフト部６、７および加算部８を有する。演算部４は、第１の演算部の一例であり、演算部５は、第２の演算部の一例である。シフト部６は、第１のシフト部の一例であり、シフト部７は、第２のシフト部の一例である。
【００１７】
シフト部６は、シフト制御情報ＳＦＴ１に基づいて、２進数で表される即値ＩＭを上位側にａビットシフトしたシフト値ＩＭＳ１を生成する。すなわち、シフト部６は、即値ＩＭを式（４）に示す”２ａ”で乗じたシフト値ＩＭＳ１を生成する。シフト値ＩＭＳ１は、第１のシフト値の一例である。
【００１８】
シフト部７は、シフト制御情報ＳＦＴ２に基づいて、２進数で表される即値ＩＭまたは即値ＩＭの補数を上位側にｂビットシフトしたシフト値ＩＭＳ２または”０”を示すシフト値ＩＭＳ２を生成する。すなわち、シフト部７は、即値ＩＭを式（４）に示す”ｃ・２ｂ”で乗じたシフト値ＩＭＳ２を生成する。シフト値ＩＭＳ２は、第２のシフト値の一例である。なお、シフト制御情報ＳＦＴ２は、即値ＩＭまたは即値ＩＭの補数のいずれをシフトするかを示す情報を含む。
【００１９】
加算部８は、シフト値ＩＭＳ１、ＩＭＳ２を加算して加算値ＡＤＴを生成する機能を有し、例えば、全加算器である。ここで、加算値ＡＤＴは、式（５）に示すように、即値ＩＭと定数Ｐとの積ＩＭ・Ｐである。
ＡＤＴ＝ＩＭ・２ａ＋ＩＭ・（ｃ・２ｂ）＝ＩＭ・（２ａ＋ｃ・２ｂ）＝ＩＭ・Ｐ  ‥‥（５）
演算部５は、２つの入力を有し、例えば、加算値ＡＤＴと、レジスタファイル２において選択情報ＲＳＥＬで選択されるレジスタＸｓに保持されるデータＤＴとの演算を実行し、演算により得られたデータを演算結果ＲＳＬＴとして出力する。式（２）に示す即値演算命令を実行する場合、演算部５は、データＤＴと加算値ＡＤＴとを加算した値を演算結果ＲＳＬＴとして出力する。式（３）に示す即値演算命令を実行する場合、演算部５は、データＤＴから加算値ＡＤＴを減算した値を演算結果ＲＳＬＴとして出力する。式（１）に示す即値演算命令を実行する場合、演算部５は、レジスタファイル２に保持されるデータＤＴを使用せず、”０”と加算値ＡＤＴとを加算した値を演算結果ＲＳＬＴとして出力する。演算結果ＲＳＬＴは、レジスタファイル２において符号Ｘｄで示されるレジスタに格納される。例えば、演算部５による即値演算命令の演算は、演算部５が有する全加算器により実行される。
【００２０】
なお、演算部５は、全加算器以外に、乗算器、除算器または論理演算器等を有してもよい。そして、演算部５は、即値演算命令以外の命令である乗算命令または加算命令等を実行する場合、レジスタファイル２において２つの選択情報ＲＳＥＬで選択される２つのレジスタに保持された２つのデータＤＴの演算を実行する。
【００２１】
図２は、図１に示す演算処理装置１００が即値演算命令を実行する場合の動作の一例を示す。すなわち、図２は、演算処理装置１００の制御方法の一例を示す。図２の下側のかぎ括弧内に示す動作（Ｂ）、（Ｃ）は、比較対象である他の演算処理装置の動作の例を示す。なお、演算処理装置１００は、命令を複数のステージに分けて処理する命令パイプラインを有する。命令パイプラインの各ステージは１サイクル（例えば、クロックサイクル）で実行される。
【００２２】
動作（Ａ）のサイクル１において、命令デコーダ１は、受信した即値演算命令をデコードし、選択情報ＲＳＥＬおよび即値ＩＭを生成し、定数算出部１ｂで定数Ｐを算出し、制御情報生成部１ｃでシフト制御情報ＳＦＴ１、ＳＦＴ２を生成する。命令デコーダ１に定数算出部１ｂを設けることで、コード化された定数Ｐが即値演算命令に記述される場合にも、命令をデコードするステージにおいて、定数Ｐを算出することができる。そして、命令デコーダ１の制御情報生成部１ｃは、定数算出部１ｂが算出した定数Ｐに基づいて、命令をデコードするステージにおいて、シフト制御情報ＳＦＴ１、ＳＦＴ２を生成できる。命令をデコードするステージにおいて定数Ｐおよびシフト制御情報ＳＦＴ１、ＳＦＴ２を生成できるため、後述するサイクル２において、命令を演算器３に投入するタイミングが遅れることを抑止することができる。この結果、各ステージの時間を延ばすことなく、即値演算命令を実行することができる。
【００２３】
次に、サイクル２において、命令デコーダ１は、選択情報ＲＳＥＬ、即値ＩＭおよびシフト制御情報ＳＦＴ１、ＳＦＴ２を出力することで、レジスタファイル２および演算器３に命令を投入する。次に、サイクル３において、選択情報ＲＳＥＬを受信したレジスタファイル２は、選択情報ＲＳＥＬが示すレジスタからデータＤＴを読み出し、演算器３に出力する。また、サイクル３において、演算部４のシフト部６は、シフト制御情報ＳＦＴ１に基づいて、即値ＩＭをシフトする動作を実行し、シフト値ＩＭＳ１を生成する。演算部４のシフト部７は、シフト制御情報ＳＦＴ２に基づいて、即値ＩＭをシフトする動作を実行し、シフト値ＩＭＳ２を生成する。演算部４の加算部８は、シフト部６、７から出力されるシフト値ＩＭＳ１、ＩＭＳ２を加算し、加算値ＡＤＴ（すなわち、Ｐ・ＩＭ）を生成する。
【００２４】
定数Ｐと即値ＩＭとの積は、被乗数を乗数の各桁で乗じて得られる複数の部分積を桁毎に加算するＣＳＡ（Carry Save Adder）を有する乗算器ではなく、２つのシフト部６、７と加算部８とを有する演算部４により算出される。換言すれば、演算部４は、乗算”Ｐ・ＩＭ”を、即値ＩＭをシフトする動作と、シフトにより得られたシフト値ＩＭＳ１、ＩＭＳ２を加算する動作により実行することができる。
【００２５】
演算部４の論理段数は、ＣＳＡを有する乗算器の論理段数に比べて少ない。ＣＳＡを持たない演算部４により定数Ｐと即値ＩＭとの乗算を実行することで、即値演算命令における乗算”Ｐ・ＩＭ”は、レジスタファイル２からデータＤＴを読み出すサイクル中に実行することができる。すなわち、レジスタファイル２からデータＤＴを読み出す処理と並列に乗算”Ｐ・ＩＭ”を実行することができる。
【００２６】
次に、サイクル４において、演算部５が有する加算器は、例えば、演算部４からの加算値ＡＤＴとレジスタファイル２からのデータＤＴ（Ｘｓ）とを加算する。そして、サイクル５において、式（１）−（３）に示す即値演算命令の演算結果ＲＳＬＴ（例えば、Ｘｓ＋Ｐ・ＩＭ）が演算器３から出力され、レジスタファイル２のレジスタＸｄに格納される。即値演算命令の実行は、例えば、演算部５が有する加算器が実行する加算命令の実行と同様に、５サイクルで完了する。
【００２７】
かぎ括弧内に示す動作（Ｂ）は、図１に示す演算部４を使用せずに、演算部５を使用して即値演算命令を実行する場合の動作の例を示す。まず、サイクル１において、命令デコーダ１は、即値演算命令をデコードし、選択情報ＲＳＥＬおよび即値ＩＭを生成し、定数Ｐを算出する。動作（Ｂ）では、命令デコーダ１は、シフト制御情報ＳＦＴ１、ＳＦＴ２を生成しない。
【００２８】
次に、サイクル２において、命令デコーダ１は、即値ＩＭおよび定数Ｐを演算部５に出力することで、演算部５が有する乗算器に命令を投入し、１番目のフローが開始される。次に、サイクル３からサイクル６において、乗算器は、定数Ｐと即値ＩＭとの乗算を実行し、サイクル６で演算結果ＲＳＬＴ（＝Ｐ・ＩＭ）を得る。例えば、乗算器はＣＳＡを有する。ＣＳＡでは、部分積の数が多いほど加算器の段数が増加し、演算時間が長くなる。このため、乗算器による乗算は、複数のサイクル（複数のステージ）を使用して実行される。演算結果ＲＳＬＴ（＝Ｐ・ＩＭ）は、サイクル６の終了前に演算部５が有する加算器にバイパスされる。
【００２９】
一方、サイクル５において、命令デコーダ１は、選択情報ＲＳＥＬを出力することで、レジスタファイル２に命令を投入し、２番目のフローが開始される。例えば、演算処理装置１００は、命令デコーダ１から出力される各種制御信号（すなわち、命令）を保持し、保持した各種制御信号を演算器３が実行可能な順に出力するリザベーションステーション等の実行制御部（図１には図示せず）を有する。そして、実行制御部は、サイクル５において選択情報ＲＳＥＬを出力する。サイクル６において、選択情報ＲＳＥＬを受信したレジスタファイル２は、選択情報ＲＳＥＬが示すレジスタＸｓからデータＤＴを読み出し、演算部５に出力する。
【００３０】
サイクル７において、演算部５が有する加算器は、乗算器からバイパスされる演算結果ＲＳＬＴ（＝Ｐ・ＩＭ）とレジスタファイル２から出力されるデータＤＴ（Ｘｓ）とを加算する。そして、サイクル７において、演算結果ＲＳＬＴ（例えば、Ｘｓ＋Ｐ・ＩＭ）が演算器３から出力され、レジスタファイル２のレジスタＸｄに格納される。動作（Ｂ）では、即値演算命令は、２つのフローに分けて演算部５の乗算器と加算器とを順次動作させて実行されるため、７サイクルで実行される。
【００３１】
かぎ括弧内に示す動作（Ｃ）は、図１に示す演算部４の代わりに、ＣＳＡを有する即値の演算用の乗算器を有する演算処理装置が即値演算命令の乗算（Ｐ・ＩＭ）を実行する場合の動作の例を示す。
【００３２】
まず、サイクル１において、命令デコーダは、命令ＩＮＳＴを受信し、即値演算命令をデコードし、選択情報ＲＳＥＬおよび即値ＩＭを生成し、定数Ｐを算出する。命令デコーダは、シフト制御情報ＳＦＴ１、ＳＦＴ２を生成しない。次に、サイクル２において、命令デコーダは、選択情報ＲＳＥＬ、即値ＩＭおよび定数Ｐを出力することで、レジスタファイルと乗算（Ｐ・ＩＭ）を実行する乗算器とに命令を投入する。
【００３３】
次に、サイクル３において、選択情報ＲＳＥＬを受信したレジスタファイルは、選択情報ＲＳＥＬが示すレジスタからデータＤＴ（Ｘｓ）を読み出し、図１に示す演算部５と同様の演算部が有する加算器に出力する。また、サイクル３において、乗算（Ｐ・ＩＭ）を実行する乗算器は、命令デコーダから受信する定数Ｐと即値ＩＭとの乗算を実行し、乗算結果を得る。但し、ＣＳＡを有する乗算器では、動作（Ｂ）と同様に、乗算（Ｐ・ＩＭ）の実行に４サイクルが掛かる。パイプライン処理を実行する各ステージの時間は、処理時間が最も長いステージの時間に合わせて設定される。このため、動作（Ｃ）を実行する演算処理装置では、各サイクルの時間は、例えば、動作（Ａ）、（Ｂ）に示すサイクルの時間の４倍に設定される。
【００３４】
次に、サイクル４において、演算部が有する加算器は、乗算器から受信した乗算結果（Ｐ・ＩＭ）とレジスタファイルから受信したデータＤＴ（Ｘｓ）とを加算する。そして、サイクル５において、演算結果ＲＳＬＴ（例えば、Ｘｓ＋Ｐ・ＩＭ）が演算器から出力され、レジスタＸｄに格納される。かぎ括弧内に示す動作（Ｃ）では、即値演算命令は、５サイクルで実行される。但し、１サイクルの時間が動作（Ａ）、（Ｂ）に示す１サイクルの時間の４倍に設定されるため、実際には、即値演算命令の実行には、２０サイクル分の演算時間が掛かる。
【００３５】
以上、図１に示す実施形態では、定数Ｐが”２ａ＋ｃ・２ｂ”で示される即値演算命令を実行する場合、乗算”Ｐ・ＩＭ”を実行する演算部４を、２つのシフト部６、７と加算部８により実現することができる。すなわち、乗算”Ｐ・ＩＭ”を実行する演算部４の回路規模（論理段数）を、ＣＳＡを有する乗算器の回路規模（論理段数）に比べて削減することができる。これにより、レジスタファイル２からデータＤＴを読み出すサイクル中に乗算”Ｐ・ＩＭ”を実行することができる。換言すれば、演算処理装置１００が有する命令パイプラインの各ステージの時間を延ばすことなく、演算”Ｐ・ＩＭ”を実行する演算部４を演算処理装置１００に追加することができる。この結果、定数Ｐと即値ＩＭとを乗算し、乗算結果とレジスタファイル２が保持するデータＤＴとの演算を実行する即値演算命令を、演算部５が有する加算器が実行する加算命令と同じサイクル数で実行することができる。すなわち、即値演算命令を実行する場合、図２で説明した動作（Ｂ）、（Ｃ）に比べて、実行時間を短縮することができる。
【００３６】
命令デコーダ１に定数算出部１ｂを設けることで、即値演算命令にコード化された定数Ｐが記述される場合にも、命令デコーダ１が命令をデコードするステージ（＝サイクル１）において、定数Ｐを算出することができる。そして、命令デコーダ１の制御情報生成部１ｃは、定数算出部１ｂが算出した定数Ｐに基づいて、命令デコーダ１が命令をデコードするステージ（＝サイクル１）において、シフト制御情報ＳＦＴ１、ＳＦＴ２を生成することができる。したがって、レジスタファイル２からデータＤＴを読み出すサイクルが開始される前に定数Ｐの算出およびシフト制御情報ＳＦＴ１、ＳＦＴ２の生成を実行することができる。この結果、レジスタファイル２からデータＤＴを読み出すサイクル中に乗算”Ｐ・ＩＭ”を実行することができる。
【００３７】
図３は、演算処理装置、演算器および演算処理装置の制御方法の別の実施形態を示す。図１に示す要素と同一または同様の要素については、同じ符号を付し、詳細な説明は省略する。図３に示す演算処理装置１０２は、例えば、ＲＩＳＣ型のプロセッサであり、命令デコーダ１０、リザベーションステーション２０、レジスタファイル３０および演算器４０を有する。演算器４０は、即値演算部５０、セレクタ７２、７４、演算部８０および複数のレジスタ９１、９２、９３、９４、９５、９６を有する。なお、即値演算部５０を除き、演算器４０の各構成要素は、ＳＩＭＤ（Single Instruction Multiple Data）演算を実行可能にするため、複数のベクトルデータを並列に演算する複数の要素を有する。
【００３８】
即値演算部５０は、第１の演算部の一例であり、演算部８０は、第２の演算部の一例である。レジスタ９１、９２、９３、９４、９５、９６は、クロックに同期してデータ等を保持するラッチ回路を含み、命令パイプラインの各ステージの境界に設けられる。
【００３９】
命令デコーダ１０は、図示しない命令バッファ等から出力される命令ＩＮＳＴをデコードし、デコード結果に基づいてレジスタファイル３０の動作を制御する選択情報ＲＳＥＬと、演算器４０等の動作を制御する各種の制御情報とを生成する。命令ＩＳＮＴの形式は、図１に例示した命令ＩＮＳＴと同様に、命令コードＩＣＯＤＥと、命令コードＩＣＯＤＥに応じたレジスタ番号ＲＥＧＮ等の所定数のパラメータとを含む。命令ＩＳＮＴのビット数は、命令ＩＮＳＴの種類に依存せず、３２ビット等に固定される。制御情報は、シフト制御情報ＳＦＴ１、ＳＦＴ２、キャリーＣＡＲＹおよび選択情報ＲＳＥＬ、ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬを含み、信号として出力される。
【００４０】
命令デコーダ１０は、即値演算部５０を演算の実行に使用する即値演算命令をデコードした場合、選択情報ＲＳＥＬ、即値ＩＭ、シフト制御情報ＳＦＴ１、ＳＦＴ２、キャリーＣＡＲＹおよび選択情報ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬを生成する。即値演算命令の形式は、図１と同じであり、命令コードＩＣＯＤＥ、即値ＩＭ、定数Ｐに対応するコードＣＯＤＥ、およびレジスタ番号ＲＥＧＮを含む。即値演算命令は、上述した式（１）−（３）に示す演算を実行する命令であり、式（１）−（３）中の定数Ｐは、上述した式（４）により示される。
【００４１】
命令デコーダ１０は、即値演算部５０を演算の実行に使用しない乗算命令または加算命令等の演算部８０で実行する命令をデコードした場合、選択情報ＲＳＥＬ、ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬ等を生成する。即値ＩＭ、シフト制御情報ＳＦＴ１、ＳＦＴ２、キャリーＣＡＲＹは生成されない。命令デコーダ１０が出力する情報は、演算器４０に命令を実行させる情報であるため、以下では命令情報とも称される。命令デコーダ１０の例は、図４に示される。
【００４２】
リザベーションステーション２０は、命令デコーダ１０から出力される命令情報を保持する図示しない複数のエントリを有し、エントリに保持した命令情報を演算器４０が実行可能な順に出力する。リザベーションステーション２０は、演算器４０で実行する命令の順序をデータの依存関係に応じて入れ換えることで、アウトオブオーダ実行を制御する。リザベーションステーション２０は、実行制御部の一例である。
【００４３】
レジスタファイル３０は、命令デコーダ１０からの選択情報ＲＳＥＬ（例えば、アドレス）に基づいて選択される複数のレジスタＲＥＧ（ＲＥＧ０、ＲＥＧ１、ＲＥＧ２、...）を有する。そして、レジスタファイル３０は、選択情報ＲＳＥＬが示すレジスタＲＥＧからデータ（ＤＴ１、ＤＴ２）を読み出し、読み出したデータを選択情報ＲＳＥＬに基づいてレジスタ９１、９２の少なくともいずれかに出力する。また、レジスタファイル３０は、レジスタ９６から出力される演算結果ＲＳＬＴ、または図示しないデータキャッシュから出力されるデータを選択情報ＲＳＥＬが示すレジスタに格納する。
【００４４】
１つの命令で複数のデータの演算を並列に実行するために、レジスタファイル３０の各レジスタＲＥＧには、複数のデータが格納される。すなわち、各レジスタＲＥＧは、ＳＩＭＤ型のベクトルレジスタである。各レジスタＲＥＧには、固定小数点数または浮動小数点数が格納可能であるが、即値演算命令の実行時には、固定小数点数が格納される。固定小数点数を扱う場合、各レジスタＲＥＧには、８ビット、１６ビット、３２ビットまたは６４ビットのいずれかの複数のデータが格納される。レジスタＲＥＧに格納されるデータの数は、図６で説明される。なお、レジスタファイル３０は、ＳＩＭＤ型のレジスタＲＥＧ以外に、整数型のレジスタを有してもよい。
【００４５】
即値演算部５０は、即値ＩＭとシフト制御情報ＳＦＴ１、ＳＦＴ２とキャリーＣＡＲＹとに基づいて、上述した式（１）−（３）中の定数Ｐと即値ＩＭとの積（Ｐ・ＩＭ）を算出し、算出した積をセレクタ７４に出力する。即値演算部５０の例は、図５に示される。
【００４６】
セレクタ７２は、レジスタ９１、９５から出力されるデータまたは”０”を選択情報ＳＥＬ１に基づいて選択し、選択したデータをオペランドデータＯＰ１としてレジスタ９３に出力する。セレクタ７２が選択したデータは、データキャッシュにも出力されてもよい。セレクタ７４は、即値演算部５０またはレジスタ９２、９５、９６から出力されるデータを選択情報ＳＥＬ２に基づいて選択し、選択したデータをオペランドデータＯＰ２としてレジスタ９４に出力する。レジスタ９３、９４が保持するオペランドデータＯＰ１、ＯＰ２は、演算部８０に出力される。
【００４７】
演算部８０は、加算器ＡＤＤ、乗算器ＭＵＬ、論理積演算器ＡＮＤおよび論理和演算器ＯＲ等の複数の演算器を有する。例えば、加算器ＡＤＤは、２つの入力を有し、レジスタ９３、９４から出力される固定小数点数のオペランドデータＯＰ１、ＯＰ２を加算する全加算器である。加算器ＡＤＤは、加算により得られたデータを演算結果ＲＳＬＴとしてレジスタ９５に出力する。なお、演算部８０が有する演算器は、図３に示す演算器に限定されず、除算器ＤＩＶまたはシフト演算器ＳＦＴ等の他の演算器を有してもよい。また、演算部８０は、浮動小数点数を演算する演算器を有してもよい。レジスタ９５は、演算部８０から受信した演算結果ＲＳＬＴを保持し、保持した演算結果ＲＳＬＴをレジスタファイル３０への中継用のレジスタ９６に出力する。
【００４８】
図４は、図３に示す命令デコーダ１０の一例を示す。命令デコーダ１０は、デコード部１２およびシフト制御部１４を有する。シフト制御部１４は、定数算出部１６およびシフトデコーダ１８を有する。シフトデコーダ１８は、制御情報生成部の一例である。
【００４９】
デコード部１２は、受信した命令ＩＮＳＴをデコードし、選択情報ＯＰＳＥＬ、ＳＥＬ１、ＳＥＬ２を生成する。デコード部１２は、命令ＩＮＳＴにレジスタ番号ＲＥＧＮが含まれる場合、レジスタ番号ＲＥＧＮに基づいて、選択情報ＲＳＥＬを生成する。デコード部１２は、命令ＩＮＳＴが即値演算命令の場合、命令ＩＮＳＴに含まれる即値ＩＭとコードＣＯＤＥを取り出して出力する。
【００５０】
シフト制御部１４の定数算出部１６は、即値演算命令に含まれるコードＣＯＤＥに基づいて定数Ｐを算出する。なお、定数算出部１６は、コードＣＯＤＥと定数Ｐとの関係を示すテーブルを参照することでコードＣＯＤＥから定数Ｐを生成してもよい。シフト制御部１４のシフトデコーダ１８は、定数算出部１６から出力される定数Ｐに基づいてシフト制御情報ＳＦＴ１、ＳＦＴ２およびキャリーＣＡＲＹを生成する。シフトデコーダ１８の動作の例は、図７に示される。
【００５１】
図５は、図３に示す即値演算部５０の一例を示す。即値演算部５０は、補数生成部５２、複数のシフタ５４、シフタ５６ａ、５６ｂ、セレクタ５８、６０、加算器６２および複数のレジスタ６４、６５、６６、６７を有する。シフタ５４は、第１のシフタの一例であり、シフタ５６ａは、第２のシフタの一例であり、シフタ５６ｂは、第３のシフタの一例である。セレクタ５８は第１の選択部の一例であり、セレクタ６０は第２の選択部の一例である。シフタ５４およびセレクタ５８は、第１のシフト部の一例であり、補数生成部５２、シフタ５６ａ、５６ｂおよびセレクタ６０は、第２のシフト部の一例である。加算器６２は、加算部の一例である。
【００５２】
補数生成部５２は、レジスタ６４を介してリザベーションステーション２０から受信する即値ＩＭのビット値を反転して即値ＩＭの補数／ＩＭ（１の補数）を生成し、生成した補数／ＩＭをシフタ５６ｂおよびセレクタ６０に出力する。
【００５３】
なお、補数生成部５２は、補数生成部５２の入力データ（即値ＩＭ）の右側（最下位ビット側、以下同様）に付加ビット“０”を付け加え、この付加ビットが追加された入力データの補数（１の補数）を生成する。
【００５４】
例えば、入力データ（即値ＩＭ）が２進数表記で”００１１”の場合、補数生成部５２は、”００１１”の最下位ビット（ＬＳＢ；Least Significant Bit）の右側に”０”が付加されることで生成されるビット列（００１１０）の各ビットを反転する。つまり、入力データ”００１１”の場合、補数生成部５２は”１１００１”を補数／ＩＭとして出力する。
【００５５】
なお、補数生成部５２によって付加された付加ビット”０”（これは、補数生成部５２による演算の結果、”１”に反転される）は、シフタ５６ｂで使用される。付加ビットは、シフタ５６ｂの演算が完了した後は不要なため、補数／ＩＭがセレクタ６０に入力される際に削除される。詳細は後述する。
【００５６】
各シフタ５４は、レジスタ６４を介してリザベーションステーション２０から受信する即値ＩＭをシフトする。各シフタ５４に付した数値は、即値ＩＭを上位ビット側にシフトするビット数を示す。すなわち、各シフタ５４は、上述した式（４）において、ａを”１”以上の整数とする値２ａに対応して、即値ＩＭをａビットシフトする。例えば、”＜＜８”を付けたシフタ５４は、即値ＩＭ（２進数）を上位ビット側に８ビットシフトし、シフト値ＩＭＳを出力する。これにより、即値ＩＭを２５６倍したシフト値ＩＭＳが生成される。”＜＜２”を付けたシフタ５４は、即値ＩＭ（２進数）を上位ビット側に２ビットシフトし、シフト値ＩＭＳとして出力する。これにより、即値ＩＭを４倍したシフト値ＩＭＳが生成される。なお、即値演算部５０は、即値ＩＭを上位ビット側に９ビット以上シフトするシフタ５４を有してもよい。
【００５７】
逆に、即値演算命令によって指定される定数Ｐ（即値演算命令に含まれるコードＣＯＤＥに基づいて算出される定数Ｐ）が特定の値に限定される場合、即値演算部５０は１つのシフタ５４のみを有する構成でもよい。例えば、即値演算命令によって指定される定数Ｐが、”Ｐ＝２２＋ｃ・２ｂ”（ａ＝”２”、ｂは”０”以上の整数、ｃは”−１”、”０”、”１”のいずれか）で表される値に限定されている場合、即値演算部５０は、即値を２ビット左シフトするシフタ５４のみを有していればよい。
【００５８】
セレクタ５８は、シフタ５４から出力される複数のシフト値ＩＭＳまたは即値ＩＭのいずれかを、シフト制御情報ＳＦＴ１に基づいて選択し、選択した値をシフト値ＩＭＳ１として出力する。セレクタ５８は、”０”から”８”のいずれかを示すシフト制御情報ＳＦＴ１を受信し、受信したシフト制御情報ＳＦＴ１の値と同じ番号の入力で受信する複数のシフト値ＩＭＳまたは即値ＩＭのいずれかを選択する。複数のシフタ５４およびセレクタ５８は、式（５）に示す”ＩＭ・２ａ”を算出し、シフト値ＩＭＳ１として出力する。
【００５９】
シフタ５６ａは、レジスタ６４を介してリザベーションステーション２０から受信する即値ＩＭ（２進数）を上位ビット側に１ビットシフトし、シフト値ＩＭＳとして出力する。すなわち、シフタ５６ａは、式（４）において、ｃを”１”とし、ｂを”１”以上の整数とする値ｃ・２ｂに対応して、即値ＩＭをｂビットシフトする。
【００６０】
シフタ５６ｂは、補数生成部５２から受信する補数／ＩＭ（２進数）を上位ビット側に１ビットシフトし、シフト値ＩＭＳとして出力する。シフタ５６ｂが補数／ＩＭをシフトするとき、補数生成部５２によって付加された付加ビット”１”も左シフトされる。シフト操作の後、シフトされたデータの最右ビット（付加ビットに相当する位置のビット）は削除される（つまりシフタ５６ｂに出力されない）。例えば、補数生成部５２から受信する補数／ＩＭが２進数表記で”１１００１”の場合、シフタ５６ｂは”１１００１”を左シフトすることで”１００１０”を算出し、この計算結果（１００１０）の上位４ビットをシフト値ＩＭＳとして出力する。つまり、シフト値ＩＭＳは”１００１”である。なお、”１１００１”の最右ビットの“１”は付加ビットであり、元の即値ＩＭは４ビット長のデータである。これにより、シフタ５６ｂは、式（４）において、ｃを”−１”とし、ｂを”１”以上の整数とする値ｃ・２ｂに対応して、補数／ＩＭをｂビットシフトする。
【００６１】
図５に示す例では、シフタ５６ａにより即値ＩＭを２倍したシフト値ＩＭＳが生成され、シフタ５６ｂにより補数／ＩＭを２倍したシフト値ＩＭＳが生成される。なお、即値演算部５０は、即値ＩＭを上位ビット側に２ビット以上シフトするシフタ５６ａを有してもよく、補数／ＩＭを上位ビット側に２ビット以上シフトするシフタ５６ｂを有してもよい。即値演算部５０が、補数／ＩＭを２ビット以上左シフトするシフタ５６ｂを有するのであれば、補数生成部５２は複数の付加ビットを付加する。例えば、即値演算部５０が、補数／ＩＭをｎビット左シフトするシフタ５６ｂを有する場合（ｎは１より大きい整数である）、補数生成部５２はｎビットの”０”を即値ＩＭの右側に付加してから、補数（１の補数）の計算を行う。さらに、シフト量が互いに異なる複数のシフタ５６ａと、シフト量が互いに異なる複数のシフタ５６ｂとが、即値演算部５０に設けられてもよい。
【００６２】
セレクタ６０は、シフタ５６ａ、５６ｂから出力される２つのシフト値ＩＭＳ、即値ＩＭ、補数／ＩＭまたは”０”のいずれかを、シフト制御情報ＳＦＴ２に基づいて選択し、選択した値をシフト値ＩＭＳ２として出力する。セレクタ６０は、”０”から”４”のいずれかを示すシフト制御情報ＳＦＴ２を受信し、受信したシフト制御情報ＳＦＴ２の値と同じ番号の入力で受信する２つのシフト値ＩＭＳ、即値ＩＭ、補数／ＩＭまたは”０”のいずれかを選択する。補数生成部５２、シフタ５６ａ、５６ｂおよびセレクタ６０は、即値ＩＭを式（５）に示す”ＩＭ・（ｃ・２ｂ）”を算出し、シフト値ＩＭＳ２として出力する。
【００６３】
係数ｃが”０”の場合、セレクタ６０は、”０”のシフト制御情報ＳＦＴ２を受信し、”０”をシフト値ＩＭＳ２として出力する。係数ｃが”１”の場合、セレクタ６０は、”１”または”２”のシフト制御情報ＳＦＴ２を受信し、即値ＩＭを２倍したシフト値ＩＭＳまたは即値ＩＭのいずれかをシフト値ＩＭＳ２として出力する。係数ｃが”−１”の場合、セレクタ６０は、”３”または”４”のシフト制御情報ＳＦＴ２を受信し、補数／ＩＭを２倍したシフト値ＩＭＳまたは補数／ＩＭのいずれかをシフト値ＩＭＳ２として出力する。
【００６４】
なお、補数／ＩＭがセレクタ６０の”３”の入力に入力される場合、補数生成部５２によって補数／ＩＭに付加されている付加ビットは入力されない。同様に、シフタ５６ｂは付加ビットを含まないシフト値ＩＭＳを出力するので、付加ビットはセレクタ６０の”４”の入力に入力されない。
【００６５】
加算器６２は、例えば、全加算器であり、シフト値ＩＭＳ１、ＩＭＳ２とキャリーＣＡＲＹとを加算して加算値ＡＤＴ（＝Ｐ・ＩＭ）を生成し、生成した加算値ＡＤＴをレジスタ６７に出力する。これにより、式（５）に示す定数Ｐと即値ＩＭとの乗算を、ＣＳＡを有する乗算器に比べて論理段数が少ない簡易な即値演算部５０により実行することができる。換言すれば、即値演算部５０は、定数Ｐと即値ＩＭとの乗算を、ＣＳＡを有する乗算器に比べて、短い演算時間で実行することができる。
【００６６】
なお、係数ｃが”−１”の場合、加算器６２は、”１”のキャリーＣＡＲＹを受信する。すなわち、補数生成部５２が生成した補数／ＩＭ（１の補数）に基づいてセレクタ６０が出力するシフト値ＩＭＳ２にキャリーＣＡＲＹが加算されることで、加算器６２は、シフト値ＩＭＳ２を２の補数として扱うことができる。補数生成部５２で即値ＩＭの２の補数を生成せずに、加算器６２に与えるキャリーＣＡＲＹにより２の補数を生成することで、補数生成部５２は、即値ＩＭの各ビットの論理を反転するインバータ（ＮＯＴ回路）を有すればよい。したがって、補数生成部５２の論理規模を、２の補数を生成する補数生成部の論理規模に比べて小さくすることができる。
【００６７】
図６は、即値演算命令で使用するデータの総ビット幅ＶＬと、ＳＩＭＤ演算に使用する各データのビット幅Ｅとに応じて設定される定数Ｐの一例を示す。図６では、説明を分かりやすくするため、演算式に対応する４つのグループＧｒ（ＧｒＡ、ＧｒＢ、ＧｒＣ、ＧｒＤ）に分けて定数Ｐを記載する。各グループＧｒにおいて、即値演算命令に含まれるコードＣＯＤＥから得られる定数Ｐは、太枠で囲った２４個の値のいずれかである。なお、即値演算命令に含まれるコードＣＯＤＥから得られる定数Ｐは、図６に示す４つのグループＧｒの演算式を使用して得られる値に限定されず、他の演算式を使用して得られる定数Ｐであって、”２ａ＋ｃ・２ｂ”で示される定数Ｐでもよい。すなわち、演算処理装置１０２は、上述した式（４）を満足する定数Ｐであれば、図６に示す定数Ｐ以外の即値演算命令を実行可能である。
【００６８】
総ビット幅ＶＬは、図３に示す各レジスタＲＥＧのビット幅であり、即値演算命令を実行する演算処理装置毎に設定され、２のｎ乗（例えば、ｎは６以上の整数）で示される。図３に示す演算処理装置１０２では、例えば、総ビット幅ＶＬは、５１２ビット（ｎ＝９）であり、各レジスタＲＥＧは、６４ビットのビット幅を有する８個のサブレジスタを有する。ＳＩＭＤ演算に使用する各データ（ベクトル）のビット幅Ｅは、命令コードＩＣＯＤＥに応じて８ビット、１６ビット、３２ビット、６４ビットのいずれかに設定される。換言すれば、式（１）−（３）に示す即値演算命令の各々は、さらに、データ（ベクトル）が８ビット、１６ビット、３２ビット、６４ビットのいずれかである４つの命令に分けられる。
【００６９】
総ビット幅ＶＬが５１２ビットの場合にビット幅Ｅ毎に設定される定数Ｐの値は、二重の太枠内に示される。なお、総ビット幅ＶＬ（上限）が５１２ビットの演算処理装置１０２は、総ビット幅ＶＬが２５６ビット、１２８ビットまたは６４ビットに対応する定数Ｐの値を使用して即値演算命令を実行可能である。
【００７０】
グループＧｒＡにおける定数Ｐは式（６）で示される。式（６）に示す総ビット幅ＶＬを各データのビット幅Ｅで除して得られる定数Ｐは、ＳＩＭＤ演算に使用する各データ（ベクトル）の数を示す。総ビット幅ＶＬが５１２ビットでビット幅Ｅが８ビットの場合、定数Ｐは６４であり、総ビット幅ＶＬが５１２ビットでビット幅Ｅが１６ビットの場合、定数Ｐは３２である。
Ｐ＝ＶＬ／Ｅ  ‥‥（６）
グループＧｒＢでは、定数Ｐは式（７）で示される。グループＧｒＣでは、定数Ｐは式（８）で示される。式（８）中の”ｍｏｄ”は、”ＶＬ／Ｅ”を”４”で除して余りを求める剰余演算を示す。グループＧｒＤでは、定数Ｐは式（９）で示される。式（９）中の”ｍｏｄ”は、”ＶＬ／Ｅ”を”３”で除して余りを求める剰余演算を示す。
Ｐ＝”ＶＬ／Ｅ≦２ｎを満たす最小の２ｎ”  ‥‥（７）
Ｐ＝ＶＬ／Ｅ−（ＶＬ／Ｅ  ｍｏｄ  ４）  ‥‥（８）
Ｐ＝ＶＬ／Ｅ−（ＶＬ／Ｅ  ｍｏｄ  ３）  ‥‥（９）
総ビット幅ＶＬが５１２ビットの場合、定数算出部１６（図４）は、即値演算命令に含まれるコードＣＯＤＥ（図１）に基づいて定数Ｐ＝”６４”、”３２”、”１６”、”８”、”６３”、”３０”、”１５”、”６”のいずれかを算出する。
【００７１】
図７は、図４に示すシフトデコーダ１８の動作の概要を示す。なお、図７では、シフトデコーダ１８は、即値演算命令に含まれるコードＣＯＤＥに基づいて、図６に太枠で示した全ての定数Ｐを算出可能である。定数Ｐは、上述した式（４）に示したように、”２ａ＋ｃ・２ｂ”で表すことができる。
【００７２】
例えば、総ビット幅ＶＬが５１２ビットに対応する即値演算命令に含まれるコードＣＯＤＥのみを命令デコーダ１０がデコードする場合、シフトデコーダ１８は、図７に示す動作の一部を実行できればよい。すなわち、シフトデコーダ１８は、網掛けで示すＮｏ．６、８、９、１０、１１、１５、１６、１７に示す定数Ｐに対応するシフト制御情報ＳＦＴ１、ＳＦＴ２およびキャリーＣＡＲＹを生成できればよい。例えば、図７に示す”Ｎｏ．”は、即値演算命令に含まれるコードＣＯＤＥの値である。
【００７３】
シフトデコーダ１８は、即値演算命令に含まれるコードＣＯＤＥ（すなわち、Ｎｏ．）に対応する定数Ｐを算出し、定数Ｐから式（４）に示す指数ａ、ｂと係数ｃとを算出する。そして、シフトデコーダ１８は、指数ａの値を示すシフト制御情報ＳＦＴ１を出力する。また、シフトデコーダ１８は、係数ｃが”０”の場合、”０”を示すシフト制御情報ＳＦＴ２を出力する。シフトデコーダ１８は、係数ｃが”１”で指数ｂが”０”の場合、”１”を示すシフト制御情報ＳＦＴ２を出力し、係数ｃが”１”で指数ｂが”１”の場合、”２”を示すシフト制御情報ＳＦＴ２を出力する。シフトデコーダ１８は、係数ｃが”−１”で指数ｂが”０”の場合、”３”を示すシフト制御情報ＳＦＴ２を出力し、係数ｃが”−１”で指数ｂが”１”の場合、”４”を示すシフト制御情報ＳＦＴ２を出力する。さらに、シフトデコーダ１８は、係数ｃが”０”または”１”の場合、”０”を示すキャリーＣＡＲＹを出力し、係数ｃが”−１”の場合、”１”を示すキャリーＣＡＲＹを出力する。
【００７４】
図８は、図３に示す演算処理装置１０２が即値演算命令を実行する場合の動作の一例を示す。すなわち、図８は、演算処理装置１０２の制御方法の一例を示す。図８では、主に式（２）に示した即値演算命令が実行される場合の動作が説明される。命令パイプラインは、命令が順次転送される複数のステージＤ、ＤＴ、Ｐ、ＰＴ、Ｂ１、Ｂ２、Ｘ、Ｕを有し、各ステージは１サイクル（例えば、クロックサイクル）で実行される。以下では、ステージＤ、ＤＴ、Ｐ、ＰＴ、Ｂ１、Ｂ２、Ｘ、Ｕが実行されるサイクルは、それぞれＤサイクル、ＤＴサイクル、Ｐサイクル、ＰＴサイクル、Ｂ１サイクル、Ｂ２サイクル、Ｘサイクル、Ｕサイクルとも称される。
【００７５】
まず、Ｄサイクルにおいて、命令デコーダ１０は、即値演算命令をデコードし、定数Ｐを算出し、即値演算命令から即値ＩＭを取り出す。命令デコーダ１０は、定数Ｐに基づいてシフト制御情報ＳＦＴ１、ＳＦＴ２およびキャリーＣＡＲＹを生成する。さらに、命令デコーダ１０は、選択情報ＲＳＥＬ、ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬ等を生成する。なお、式（１）に示したデータＸｓとの演算を含まない即値演算命令の演算を実行する場合、命令デコーダ１０は、レジスタファイル３０の動作を制御する選択情報ＲＳＥＬを生成しない。
【００７６】
次に、ＤＴサイクルにおいて、命令デコーダ１０は、即値ＩＭ、シフト制御情報ＳＦＴ１、ＳＦＴ２、キャリーＣＡＲＹおよび選択情報ＲＳＥＬ、ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬ等をリザベーションステーション２０に転送する。
【００７７】
次に、Ｐサイクルにおいて、リザベーションステーション２０は、複数のエントリに保持された命令の中から演算器４０に投入する命令を決定する。図８に示す例では、即値演算命令を実行するための制御情報を保持するエントリが選択される。なお、図８では、即値演算命令を実行するための制御情報を保持するエントリが選択されるため、Ｐサイクルは、ＤＴサイクルの次のサイクルに実行される。しかしながら、リザベーションステーション２０が、他の命令を実行するために他のエントリを選択した場合、即値演算命令の実行用のＤＴサイクルとＰサイクルの間に空きサイクルが挿入される。
【００７８】
次に、ＰＴサイクルにおいて、リザベーションステーション２０は、Ｐサイクルで投入を決定した即値演算命令を演算器４０およびレジスタファイル３０に投入する。すなわち、リザベーションステーション２０は、選択情報ＲＳＥＬをレジスタファイル３０に出力し、即値ＩＭ、シフト制御情報ＳＦＴ１、ＳＦＴ２、キャリーＣＡＲＹおよび選択情報ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬを演算器４０に出力する。
【００７９】
次に、Ｂ１サイクルにおいて、レジスタファイル３０は、選択情報ＲＳＥＬに基づいて、レジスタＲＥＧ（Ｘｓ）を選択し、選択したレジスタＲＥＧからのデータＤＴ１（Ｘｓ）を読み出す。また、Ｂ１サイクルにおいて、即値演算部５０は、即値ＩＭ、シフト制御情報ＳＦＴ１、ＳＦＴ２およびキャリーＣＡＲＹに基づいて、定数Ｐと即値ＩＭとの積を算出し、加算値ＡＤＴとして出力する。レジスタファイル３０からデータを読み出すＢ１サイクル中に、積Ｐ×ＩＭを算出することで、レジスタファイル３０から読み出したデータと、積Ｐ×ＩＭとをＢ２サイクルで演算部８０に出力することができる。なお、式（１）に示した即値演算命令の演算を実行する場合、レジスタファイル３０からのデータの読み出しは実行されない。
【００８０】
次に、Ｂ２サイクルにおいて、演算器４０は、演算部８０の加算器ＡＤＤで加算するデータを決定する。すなわち、セレクタ７２は、選択情報ＳＥＬ１に基づいてレジスタ９１から出力されるデータＤＴ１（Ｘｓ）を選択し、選択したデータＤＴ１をレジスタ９３に出力する。なお、式（１）に示した即値演算命令の演算を実行する場合、セレクタ７２は”０”を選択する。セレクタ７４は、選択情報ＳＥＬ２に基づいて即値演算部５０から出力される加算値ＡＤＴ（＝Ｐ・ＩＭ）を選択し、選択した加算値ＡＤＴをレジスタ９４に出力する。
【００８１】
次に、Ｘサイクルにおいて、演算部８０の加算器ＡＤＤは、レジスタ９３、９４から受信するデータＤＴ１（Ｘｓ）と加算値ＡＤＴ（＝Ｐ・ＩＭ）との加算を実行し、加算結果ＲＳＬＴ（Ｘｓ＋Ｐ・ＩＭ）をレジスタ９５に出力する。なお、式（１）に示した即値演算命令の演算を実行する場合、加算器ＡＤＤは、レジスタ９３から受信する”０”と、レジスタ９４から受信する加算値ＡＤＴ（＝Ｐ・ＩＭ）との加算を実行し、加算結果ＲＳＬＴ（Ｐ・ＩＭ）をレジスタ９５に出力する。式（１）に示した即値演算命令の演算を実行する場合、セレクタ７２に”０”を選択させることで、即値演算部５０および加算器ＡＤＤを用いて式（１）−（３）に示した即値演算命令の全てを実行することができ、回路規模の増加を抑制することができる。また、式（３）に示した即値演算命令の演算を実行する場合、加算器ＡＤＤは、データＤＴ１（Ｘｓ）から加算値ＡＤＴ（＝Ｐ・ＩＭ）を差し引く減算を実行し、減算結果ＲＳＬＴ（Ｘｓ−Ｐ・ＩＭ）をレジスタ９５に出力する。
【００８２】
そして、式（２）の演算が実行される場合、Ｕサイクルにおいて、演算結果ＲＳＬＴ（Ｘｓ＋Ｐ・ＩＭ）がレジスタ９５から出力され、即値演算命令の実行が完了する。一方、式（１）の演算が実行される場合、Ｕサイクルにおいて、演算結果ＲＳＬＴ（Ｐ・ＩＭ）がレジスタ９５から出力される。式（３）の演算が実行される場合、Ｕサイクルにおいて、演算結果ＲＳＬＴ（Ｘｓ−Ｐ・ＩＭ）がレジスタ９５から出力される。即値演算命令の実行に掛かるサイクル数（＝８）は、加算器ＡＤＤにより実行される通常の加算命令の実行に掛かるサイクル数と同じである。
【００８３】
図９および図１０は、即値演算命令を実行する他の演算処理装置２００と、他の演算処理装置２００の動作の概要を示す。図３に示す演算処理装置１０２と同様の要素については、同じ符号を付し、詳細な説明は省略する。図９および図１０に示す太線は、即値演算命令を実行する場合のデータおよび制御情報の流れと、動作する演算器とを示す。演算処理装置２００は、命令デコーダ２１０、リザベーションステーション２２０、レジスタファイル３０および演算器２４０を有する。
【００８４】
命令デコーダ２１０は、シフト制御情報ＳＦＴ１、ＳＦＴ２およびキャリーＣＡＲＹの代わりに定数Ｐを出力する機能を有することを除き、図３に示す命令デコーダ１０と同様である。換言すれば、命令デコーダ２１０は、図４に示すシフトデコーダ１８を持たず、定数算出部１６が算出した定数Ｐをリザベーションステーション２２０に出力する。リザベーションステーション２２０は、シフト制御情報ＳＦＴ１、ＳＦＴ２およびキャリーＣＡＲＹの代わりに定数Ｐを保持することを除き、図３に示すリザベーションステーション２０と同様である。
【００８５】
演算器２４０は、図３に示す即値演算部５０を持たないことと、図３に示すセレクタ７２、７４の代わりにセレクタ２７２、２７４を有することとを除き、図３に示す演算器４０と同様である。セレクタ２７２は、レジスタ９１、９５から出力されるデータ、”０”または定数Ｐを選択情報ＳＥＬ１に基づいて選択し、選択したデータをオペランドデータＯＰ１としてレジスタ９３に出力する。セレクタ２７４は、即値ＩＭ、レジスタ９２、９５、９６から出力されるデータまたは演算部８０から出力される演算結果ＲＳＬＴを選択情報ＳＥＬ２に基づいて選択し、選択したデータをオペランドデータＯＰ２としてレジスタ９４に出力する。
【００８６】
図９において、即値演算命令をデコードした命令デコーダ２１０は、選択情報ＲＳＥＬ、定数Ｐ、即値ＩＭおよび選択情報ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬを生成する。選択情報ＲＳＥＬは、図１０でレジスタファイル３０からデータを読み出すために使用される。選択情報ＯＰＳＥＬは、図９で乗算器ＭＵＬを動作させるための情報と、図１０で加算器ＡＤＤを動作させるための情報とを含む。
【００８７】
リザベーションステーション２２０は、上述した式（１）−（３）中の定数Ｐと即値ＩＭとの積を乗算器ＭＵＬに算出させるために、定数Ｐ、即値ＩＭおよび選択情報ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬを出力する。セレクタ２７２は、選択情報ＳＥＬ１に基づいて、定数Ｐを選択し、選択した定数Ｐを演算部８０に向けて出力する。セレクタ２７４は、選択情報ＳＥＬ２に基づいて、即値ＩＭを選択し、選択した即値ＩＭを演算部８０に向けて出力する。演算部８０は、選択情報ＯＰＳＥＬに基づいて乗算器ＭＵＬを動作させ、定数Ｐと即値ＩＭとを乗算し、乗算により得られる演算結果ＲＳＬＴ（Ｐ×ＩＭ）を出力する。
【００８８】
次に、図１０において、リザベーションステーション２２０は、例えば、上述した式（２）に示したデータＸｓとデータ（Ｐ×ＩＭ）との和を加算器ＡＤＤに算出させるために、選択情報ＲＳＥＬ、ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬを出力する。セレクタ２７２は、選択情報ＳＥＬ１に基づいて、レジスタ９１を介してレジスタファイル３０から出力されるデータＤＴ１（Ｘｓ）を選択し、選択したデータＤＴ１（Ｘｓ）を演算部８０に向けて出力する。セレクタ２７４は、選択情報ＳＥＬ２に基づいて、演算結果ＲＳＬＴ（Ｐ×ＩＭ）を選択し、選択した演算結果ＲＳＬＴ（Ｐ×ＩＭ）を演算部８０に向けて出力する。演算部８０は、選択情報ＯＰＳＥＬに基づいて加算器ＡＤＤを動作させ、データＸｓと乗算結果Ｐ×ＩＭとを加算し、加算により得られる演算結果ＲＳＬＴ（Ｘｓ＋Ｐ×ＩＭ）を出力する。
【００８９】
これにより、式（２）に示した演算（すなわち、即値演算命令）が実行される。図３に示した即値演算部５０を持たない演算処理装置２００では、即値演算命令は、図９および図１０に示すように、２つのフローに分けて実行される。
【００９０】
図１１は、図９および図１０に示す演算処理装置１０２が即値演算命令を実行する場合の動作の一例を示す。図８と同様の動作については、詳細な説明は省略する。図１１に示す第１フローは、定数Ｐと即値ＩＭとを乗算する図９に示す動作に対応し、図１１に示す第２フローは、データＸｓと乗算結果Ｐ×ＩＭとを加算する図１０に示す動作に対応する。
【００９１】
まず、第１フローのＤサイクルにおいて、命令デコーダ２１０は、即値演算命令をデコードし、命令から即値ＩＭを取り出し、定数Ｐを算出し、リザベーションステーション２２０に出力する各種制御情報を生成する。次に、ＤＴサイクルにおいて、命令デコーダ２１０は、生成した各種制御情報をリザベーションステーション２２０に出力する。
【００９２】
次に、Ｐサイクルにおいて、リザベーションステーション２２０は、定数Ｐと即値ＩＭとの乗算を実行するための制御情報の演算器２４０への投入を決定する。次に、ＰＴサイクルにおいて、リザベーションステーション２２０は、Ｐサイクルで投入を決定した制御情報を演算器２４０に投入する。
【００９３】
次に、Ｂ１サイクルでは、レジスタファイル３０は、リザベーションステーション２２０から制御情報を受信しないため、動作しない。次に、Ｂ２サイクルにおいて、セレクタ２７２、２７４が動作することで、演算部８０に投入するデータ（すなわち、定数Ｐと即値ＩＭ）が決定し、データが乗算器ＭＵＬに出力される。この後、複数のＸサイクルが実行され、乗算器ＭＵＬは、定数Ｐと即値ＩＭとの乗算を実行する。例えば、乗算器ＭＵＬは、内蔵するＣＳＡを使用して乗算を実行するため、乗算の実行には、複数サイクルが掛かる。乗算器ＭＵＬは、サイクル（ｋ−２）で演算結果ＲＳＬＴを得る。演算結果ＲＳＬＴは、レジスタ９５に保持される前にセレクタ２７４に転送される。
【００９４】
乗算器ＭＵＬによる乗算の実行中に第２フローが開始される。まず、第２フローのＰサイクルにおいて、リザベーションステーション２２０は、データＸｓと乗算結果Ｐ×ＩＭとの加算を実行させるための選択情報ＲＳＥＬ、ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬの出力を決定する。次に、ＰＴサイクルにおいて、リザベーションステーション２２０は、Ｐサイクルで投入を決定した選択情報ＲＳＥＬをレジスタファイル３０に投入し、Ｐサイクルで投入を決定した選択情報ＳＥＬ１、ＳＥＬ２、ＯＰＳＥＬを演算器２４０に投入する。
【００９５】
次に、Ｂ１サイクルにおいて、レジスタファイル３０は、選択情報ＲＳＥＬに基づいて、データＸｓを保持するレジスタＲＥＧを選択し、選択したレジスタＲＥＧからのデータＸｓの読み出し処理を実行する。次に、Ｂ２サイクル（ｋ−２サイクル）において、選択情報ＳＥＬ１、ＳＥＬ２に基づいてセレクタ２７２、２７４が動作する。セレクタ２７２は、レジスタファイル３０から出力されたデータＸｓを選択し、選択したデータＸｓを即値演算部５０に向けて出力する。セレクタ２７４は、演算部８０からバイパスされた演算結果ＲＳＬＴであるデータＰ×ＩＭを選択し、選択したデータＰ×ＩＭを即値演算部５０に向けて出力する。
【００９６】
次に、第２フローのＸサイクルにおいて、演算部８０の加算器ＡＤＤは、選択情報ＯＰＳＥＬに基づいて、データＸｓとデータＰ×ＩＭとの加算を実行する。すなわち、式（２）に示す加算が実行される。そして、Ｕサイクルにおいて、演算結果ＲＳＬＴがレジスタ９５から出力され、即値演算命令の実行が完了する。
【００９７】
以上、図３から図８に示す実施形態においても、図１および図２に示す実施形態と同様の効果を得ることができる。すなわち、即値演算命令で実行される乗算”Ｐ・ＩＭ”（式（１）−（３））を、ＣＳＡを有する乗算器ＭＵＬではなく、補数生成部５２、シフタ５４、５６ａ、５６ｂ、セレクタ５８、６０および加算器６２を含む即値演算部５０により実行することができる。論理段数が乗算器ＭＵＬより小さい即値演算部５０を使用することで、レジスタファイル３０からデータＤＴ１（Ｘｓ）を読み出すサイクル中に乗算”Ｐ・ＩＭ”を実行することができる。この結果、即値演算命令を、演算部８０が有する加算器ＡＤＤが実行する加算命令と同じサイクル数で実行することができ、即値演算命令を２フローで実行する場合に比べて、実行時間を短縮することができ、演算処理装置１０２の処理性能を向上することができる。
【００９８】
命令デコーダ１０に定数算出部１６を設けることで、即値演算命令にコード化された定数Ｐが記述される場合にも、命令をデコードするステージＤにおいて、定数Ｐを算出することができる。そして、シフトデコーダ１８が、定数Ｐに基づいてシフト制御情報ＳＦＴ１、ＳＦＴ２およびキャリーＣＡＲＹを生成することで、レジスタファイル３０からデータＤＴ１（Ｘｓ）を読み出すサイクル中に乗算”Ｐ・ＩＭ”を実行することができる。
【００９９】
さらに、図３から図８に示す実施形態では、加算器６２に与えるキャリーＣＡＲＹにより２の補数を生成することで、補数生成部５２は、即値ＩＭの２の補数を生成せずに、インバータにより即値ＩＭの各ビットの論理を反転して１の補数をすればよい。これにより、補数生成部５２の論理規模を、２の補数を生成する機能を含む補数生成部の論理規模に比べて小さくすることができる。また、式（１）に示した即値演算命令の演算を実行する場合、セレクタ７２に”０”を選択させることで、即値演算部５０および加算器ＡＤＤを用いて式（１）−（３）に示した即値演算命令の全てを実行することができ、回路規模の増加を抑制することができる。
【０１００】
また、演算処理装置の構成は、上述した構成に限定されない。例えば、上述した実施形態では、即値演算部５０の補数生成部５２が、補数生成部５２の入力データ（即値ＩＭ）の右側に付加ビット”０”を付加し、付加ビットの付された入力データの補数（１の補数）を生成する。しかしながら別の実施形態では、即値演算部５０の補数生成部５２は、即値ＩＭの右側に付加ビット”０”を付加せず、付加ビットを含まない即値ＩＭをシフタ５６ｂに送信してもよい。その代わりにシフタ５６ｂは、補数／ＩＭが左シフトされる場合、最下位ビット（ＬＳＢ）に”１”をセットする機能を有する。なお、即値演算部５０が、補数／ＩＭをｎビット（ｎは１より大きい整数）左シフトするシフタ５６ｂを別に有する場合、当該シフタ５６ｂは、ｎビット左シフトされた補数／ＩＭの下位ｎビットに”１”をセットする。
【０１０１】
例えば、即値ＩＭが２進数表記で”００１１”の場合、補数生成部５２は”１１００”を補数／ＩＭとして出力する。続いてシフタ５６ｂが補数／ＩＭ（１１００）を受信すると、シフタ５６ｂはこの値”１１００”を１ビット左シフトし、シフトされた値のＬＳＢに”１”をセットする。その結果、このシフタ５６ｂによって得られるシフト値は”１００１”になる。
【０１０２】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１０３】
１…命令デコーダ；１ａ…シフト制御部；１ｂ…定数算出部；１ｃ…制御情報生成部；２…レジスタファイル；３…演算器；４、５…演算部；６、７…シフト部；８…加算部；１０…命令デコーダ；１２…デコード部；１４…シフト制御部；１６…定数算出部；１８…シフトデコーダ；２０…リザベーションステーション；３０…レジスタファイル；４０…演算器；５０…即値演算部；５２…補数生成部；５４…シフタ；５６ａ、５６ｂ…シフタ；５８、６０…セレクタ；６２…加算器；６４、６５、６６、６７…レジスタ；７２、７４…セレクタ；８０…演算部；９１、９２、９３、９４、９５、９６…レジスタ；１００、１０２、２００…演算処理装置；２１０…命令デコーダ；２２０…リザベーションステーション；２４０…演算器；２７２、２７４…セレクタ；ＡＤＤ…加算器；ＡＤＴ…加算値；ＡＮＤ…論理積演算器；ＣＡＲＹ…キャリー；ＤＴ１、ＤＴ２…データ；ＩＣＯＤＥ…命令コード；ＩＭ…即値；／ＩＭ…補数；ＩＭＳ、ＩＭＳ１、ＩＭＳ２…シフト値；ＩＮＳＴ…命令；ＭＵＬ…乗算器；ＯＰ１、ＯＰ２…オペランドデータ；ＯＰＳＥＬ…選択情報；ＯＲ…論理和演算器；Ｐ…定数；ＲＥＧＮ…レジスタ番号；ＲＳＥＬ…選択情報；ＲＳＬＴ…演算結果；ＳＥＬ１、ＳＥＬ２…選択情報；ＳＦＴ１、ＳＦＴ２…シフト制御情報
【図１】
2019067375.tif 000003
【図２】
2019067375.tif 000004
【図３】
2019067375.tif 000005
【図４】
2019067375.tif 000006
【図５】
2019067375.tif 000007
【図６】
2019067375.tif 000008
【図７】
2019067375.tif 000009
【図８】
2019067375.tif 000010
【図９】
2019067375.tif 000011
【図１０】
2019067375.tif 000012
【図１１】
2019067375.tif 000013