(57)【特許請求の範囲】
【請求項１】
２つの第１オペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な第１の演算器と、
２つの第２オペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される第２の演算器と、
２つの第３オペランドのそれぞれとして即値のみが入力される第３の演算器と、
入力された演算実行命令に基づき、前記演算実行命令に係る演算における２つの第４オペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、判定結果に応じて前記演算を前記第１の演算器と前記第２の演算器と前記第３の演算器のいずれかに実行させる制御部と、
を有し、
前記制御部は、前記２つの第４オペランドがいずれも即値であると判定した場合に、前記演算を前記第３の演算器に実行させることを特徴とする演算処理装置。
【請求項２】
２つの第１オペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な第１の演算器と、
２つの第２オペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される第２の演算器と、
入力された演算実行命令に基づき、前記入力された演算実行命令における第１のソースオペランドと第２のソースオペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、判定結果に応じて前記入力された演算実行命令に係る演算を前記第１の演算器と前記第２の演算器のいずれかに実行させる制御部と、
を有し、
前記第２の演算器は、前記２つの第２オペランドのうち、一方の入力を受ける入力ポートとして前記第１のソースオペランドに対応する第１の入力ポートを備えるとともに、他方の入力を受ける入力ポートとして前記第２のソースオペランドに対応する第２の入力ポートを備え、
前記制御部は、前記第２のソースオペランドに即値が指定され、前記第１のソースオペランドにレジスタまたは即値のいずれかが指定されていた場合、前記入力された演算実行命令に係る演算を前記第２の演算器に実行させる、
ことを特徴とする演算処理装置。
【請求項３】
前記制御部は、前記入力された演算実行命令に係る演算が可換演算であり、前記第１のソースオペランドに即値が指定され、前記第２のソースオペランドにレジスタが指定されていた場合、前記入力された演算実行命令における前記第１のソースオペランドと前記第２のソースオペランドとを入れ替えて得られる入れ替え後の演算実行命令に係る演算を前記第２の演算器に実行させることを特徴とする請求項２記載の演算処理装置。
【請求項４】
前記制御部は、前記入力された演算実行命令に係る演算が非可換演算であり、前記第１のソースオペランドに即値が指定され、前記第２のソースオペランドにレジスタが指定されていた場合、前記入力された演算実行命令に係る演算を前記第２の演算器に実行させるとともに、前記第２の演算器に対して入力される前記２つの第２オペランドの値を入れ替えて演算を行うように制御することを特徴とする請求項２または３記載の演算処理装置。
【請求項５】
前記第１の演算器および前記第２の演算器にそれぞれ対応付けて設けられ、前記制御部からの演算実行命令を自身が備える演算キューに一時的に保持し、当該演算キュー内の演算実行命令を発行準備が整った演算実行命令から順に自身に対応する演算器に発行するリザベーションステーションを備え、
前記制御部は、前記入力された演算実行命令に係る演算が非可換演算であり、前記第１のソースオペランドに即値が指定され、前記第２のソースオペランドにレジスタが指定されていた場合、前記入力された演算実行命令を前記第２の演算器に対応するリザベーションステーションの演算キューに登録するとともに、登録した演算実行命令にソースオペランドを入れ替えるように指示する指示情報を付加し、
前記第２の演算器に対応するリザベーションステーションは、前記指示情報が付加された演算実行命令を前記第２の演算器に発行する際、前記第２の演算器に対して入力される前記２つの第２オペランドの値を入れ替えるように指示する、
ことを特徴とする請求項４記載の演算処理装置。
【請求項６】
前記制御部は、前記第１のソースオペランドと前記第２のソースオペランドのいずれかに定数を出力するレジスタが指定された場合、当該ソースオペランドに即値が指定されたものと見なして、前記入力された演算実行命令に係る演算を実行させる演算器を選択することを特徴とする請求項２〜５のいずれか１項に記載の演算処理装置。
【請求項７】
２つの第１オペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な第１の演算器と、
２つの第２オペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される第２の演算器と、
入力された演算実行命令に基づき、前記演算実行命令に係る演算における２つの第３オペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、判定結果に応じて前記演算を前記第１の演算器と前記第２の演算器のいずれかに実行させる制御部と、
を有し、
少なくとも前記第２の演算器が複数設けられ、前記第１の演算器の数より前記第２の演算器の数の方が多いことを特徴とする演算処理装置。
【請求項８】
２つの第１オペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な第１の演算器と、
２つの第２オペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される第２の演算器と、
入力された演算実行命令に基づき、前記入力された演算実行命令に係る演算における２つの第３オペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、判定結果に応じて前記演算を前記第１の演算器と前記第２の演算器のいずれかに実行させる制御部と、
前記第１の演算器および前記第２の演算器にそれぞれ対応付けて設けられ、前記制御部からの演算実行命令を自身が備える演算キューに一時的に保持し、当該演算キュー内の演算実行命令を発行準備が整った演算実行命令から順に自身に対応する演算器に発行するリザベーションステーションと、
を有し、
前記制御部は、前記２つの第３オペランドのうち少なくとも一方が即値であると判定したとき、前記第２の演算器に対応するリザベーションステーションの演算キューに空きエントリがある場合には、当該演算キューに対して前記入力された演算実行命令を登録し、前記第２の演算器に対応するリザベーションステーションの演算キューに空きエントリがない場合には、前記入力された演算実行命令を前記第１の演算器に対応するリザベーションステーションの演算キューに登録することを特徴とする演算処理装置。
【請求項９】
制御部が、入力された演算実行命令に基づき、前記演算実行命令に係る演算における２つの第４オペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、
前記制御部が、判定結果に応じて、前記演算を、２つの第１オペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な第１の演算器と、２つの第２オペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される第２の演算器と、２つの第３オペランドのそれぞれとして即値のみが入力される第３の演算器のいずれかに実行させる、
処理を含み、
前記制御部は、前記判定により、前記２つの第４オペランドがいずれも即値であると判定した場合に、前記演算を前記第３の演算器に実行させることを特徴とする演算処理方法。
【請求項１０】
演算処理装置における演算処理方法であって、
前記演算処理装置の制御部が、入力された演算実行命令に基づき、前記入力された演算実行命令に係る演算における２つの第３オペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、
前記制御部が、判定結果に応じて、前記演算を、２つの第１オペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な、前記演算処理装置の第１の演算器と、２つの第２オペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される、前記演算処理装置の第２の演算器のいずれかに実行させる、
処理を含み、
前記演算処理装置は、前記第１の演算器および前記第２の演算器にそれぞれ対応付けて設けられ、前記制御部からの演算実行命令を自身が備える演算キューに一時的に保持し、当該演算キュー内の演算実行命令を発行準備が整った演算実行命令から順に自身に対応する演算器に発行するリザベーションステーションを有し、
前記制御部は、前記判定により、前記２つの第３オペランドのうち少なくとも一方が即値であると判定したとき、前記第２の演算器に対応するリザベーションステーションの演算キューに空きエントリがある場合には、当該演算キューに対して前記入力された演算実行命令を登録し、前記第２の演算器に対応するリザベーションステーションの演算キューに空きエントリがない場合には、前記入力された演算実行命令を前記第１の演算器に対応するリザベーションステーションの演算キューに登録する、
ことを特徴とする演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）などの演算処理装置において演算性能を向上させる手法の１つとして、演算器を複数設け、各演算器に演算処理を並列に実行させる方法が知られている。複数の演算器を有する演算処理装置としては、例えば、同時にデコードされた複数の命令を、演算器ごとに設けられたリザベーションステーションに振り分け、リザベーションステーションの制御により命令を演算器にアウトオブオーダで実行させることで、各演算器の利用効率を向上させたものがある。
【０００３】
演算器の数を増加させて演算処理の並列度を高めるほど、演算処理装置の演算性能を向上させることができる。しかしながら、演算器の数を増加させると、各演算器がレジスタファイルとの間でデータを受け渡すためのポートの数も増加して、配線の面積が増大するという問題がある。また、配線の面積の増加に伴って配線の長さも長くなることから、演算器とレジスタファイルとの間の伝送遅延が大きくなり、演算処理装置の性能を低下させる原因にもなる。
【０００４】
演算器の増加に伴うレジスタファイルへのライトパスの増加を抑制する技術としては、例えば、命令のデコード結果を基に、命令を実行する演算器とその演算結果の書き込み先レジスタとを判定するようにしたものがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３８７５１号公報
【特許文献２】特開平１０−９１４４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、加減算器や論理演算器などの演算器は、一般的に、２つの演算ソースを基に演算を行い、１つの演算結果を出力する。この場合、レジスタファイルから演算器へのリードパスは２本存在し、演算器からレジスタファイルへのライトパスは１本存在することになる。従って、このような構成の演算器を１つ増やすごとに、リードパスは２本増えてしまう。このため、演算器の数を増加させた際の配線面積の増大や伝送遅延の増大といった問題は、ライトパス側よりもリードパス側の方がより顕著に生じる。
【０００７】
本発明はこのような課題に鑑みてなされたものであり、レジスタからのリードパスの数が増大することを抑制しつつ、演算性能を高めることが可能な演算処理装置および演算処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、第１の演算器、第２の演算器および制御部を有する演算処理装置が提供される。この演算処理装置において、第１の演算器は、２つのオペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能である。また、第２の演算器は、２つのオペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される。また、制御部は、入力された演算実行命令に基づき、入力された演算実行命令に係る演算における２つのオペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、判定結果に応じて、入力された演算実行命令に係る演算を第１の演算器と第２の演算器のいずれかに実行させる。
【０００９】
また、上記目的を達成するために、上記の演算処理装置と同様の処理が実行される演算処理方法が提供される。
【発明の効果】
【００１０】
上記の演算処理装置および演算処理方法によれば、レジスタからのリードパスの数が増大することを抑制しつつ、演算性能を高めることができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る演算処理装置の構成例を示す図である。
【図２】第２の実施の形態に係る演算処理装置の構成例を示す図である。
【図３】汎用演算器における入出力信号の例を示す図（その１）である。
【図４】汎用演算器における入出力信号の例を示す図（その２）である。
【図５】汎用演算器における入出力信号の例を示す図（その３）である。
【図６】レジスタファイルから演算器への読み出しパスを示す図である。
【図７】演算処理装置の比較例を示す図である。
【図８】レジスタファイルの構成例を示す図である。
【図９】命令制御部の内部構成例を示す図である。
【図１０】デコーダに入力される演算実行命令のフォーマットの例を示す図である。
【図１１】第２の実施の形態におけるデコーダの処理を示すフローチャートである。
【図１２】第２の実施の形態におけるデコーダの回路構成例を示す図である。
【図１３】第３の実施の形態で使用される汎用演算器における入出力信号の例を示す図である。
【図１４】第３の実施の形態におけるデコーダおよびリザベーションステーションの構成例と、伝送される信号の例について示す図である。
【図１５】第３の実施の形態におけるデコーダの処理を示すフローチャートである。
【図１６】第３の実施の形態におけるデコーダの回路構成例を示す図である。
【図１７】第４の実施の形態におけるデコーダおよびリザベーションステーションの構成例と、伝送される信号の例について示す図である。
【図１８】第４の実施の形態におけるデコーダの処理を示すフローチャートである。
【図１９】第４の実施の形態におけるデコーダの回路構成例を示す図である。
【図２０】第５の実施の形態における命令制御部の内部構成例と、伝送される信号の例を示す図である。
【図２１】第５の実施の形態におけるデコーダおよびディスパッチャの処理を示すフローチャートである。
【図２２】命令制御部内で伝送される信号の例を示す図である。
【図２３】ディスパッチャの内部構成例を示す第１の図である。
【図２４】ディスパッチャの内部構成例を示す第２の図である。
【図２５】ディスパッチャの内部構成例を示す第３の図である。
【図２６】第６の実施の形態における命令制御部の構成例を示す図である。
【発明を実施するための形態】
【００１２】
以下、実施の形態について図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る演算処理装置の構成例を示す図である。
【００１３】
図１に示す演算処理装置１は、演算実行命令をデコードし、そのデコード結果に応じた演算処理を実行する装置である。この演算処理装置１は、例えば、一般的にＣＰＵ、ＭＰＵ（Microprocessor Unit）などと呼ばれる半導体回路として実現される。演算処理装置１は、演算器１１，１２、制御部１３およびレジスタファイル１４を備える。
【００１４】
演算器１１は、それぞれオペランド（演算対象）が入力される２つの入力ポート１１ａ，１１ｂを備え、各入力ポート１１ａ，１１ｂに入力されたデータに対する演算を実行する。演算器１２も同様に、それぞれオペランドが入力される２つの入力ポート１２ａ，１２ｂを備え、各入力ポート１２ａ，１２ｂに入力されたデータに対する演算を実行する。これらの演算器１１，１２は、演算を並列に実行可能である。また、演算器１１が実行可能な演算の種類と、演算器１２が実行可能な演算の種類とは同じであってよい。
【００１５】
ただし、演算器１１と演算器１２とでは、オペランドとして入力されるソースデータが異なる。図１では、演算器１１，１２に対する入力パスのうち、レジスタファイル１４から読み出された値（以下、「レジスタ値」と呼ぶ）が伝送される入力パスを太線矢印で示し、即値が伝送される入力パスを点線矢印で示す。なお、図１の例では、即値は制御部１３から出力されるものとするが、即値は制御部１３以外の処理部から出力されてもよい。
【００１６】
演算器１１の入力ポート１１ａは、レジスタ値と即値のいずれの入力も受けることができる。また、演算器１１の入力ポート１１ｂも、レジスタ値と即値のいずれの入力も受けることができる。従って、演算器１１は、２つのオペランドが両方ともレジスタ値である演算と、一方のオペランドがレジスタ値で他方のオペランドが即値である演算と、２つのオペランドが両方とも即値である演算とを実行可能である。
【００１７】
一方、演算器１２の入力ポート１２ａは、レジスタ値と即値のいずれの入力も受けることができる。しかしながら、演算器１２の入力ポート１２ｂは、即値の入力のみ受けることができる。従って、演算器１２は、一方のオペランドがレジスタ値で他方のオペランドが即値である演算と、２つのオペランドが両方とも即値である演算とを実行可能である。
【００１８】
制御部１３は、演算実行命令に基づいて、演算器１１と演算器１２のいずれかに、演算実行命令に係る演算を実行させる。制御部１３は、演算実行命令に基づき、この演算実行命令に係る演算における２つのオペランドのそれぞれがレジスタ値と即値のいずれであるかを判定する。そして、制御部１３は、判定結果に応じて、演算器１１と演算器１２のいずれかに演算実行命令に係る演算を実行させる。
【００１９】
例えば、制御部１３は、演算実行命令に係る演算における２つのオペランドが両方ともレジスタ値であると判定した場合、この演算実行命令に係る演算を演算器１１に実行させる。また、制御部１３は、演算実行命令に係る演算における２つのオペランドのうち少なくとも一方が即値であると判定した場合、この演算実行命令に係る演算を演算器１１，１２のいずれかに実行させる。なお、制御部１３は、例えば、演算器１１，１２のそれぞれに対して選択信号を出力することにより、演算を実行させる演算器を選択する。
【００２０】
また、図１では例として、制御部１３は、演算実行命令のデコード機能、レジスタファイル１４から演算器へのデータ読み出し制御機能、演算器に対する即値の出力機能を備えるものとするが、これらの各機能は、制御部１３以外の処理部が実現してもよい。ここで、データ読み出し制御機能とは、デコードされた演算実行命令内のソースオペランドに記述されたレジスタアドレスをレジスタファイル１４に出力して、レジスタアドレスに対応するレジスタから、演算を実行させる演算器に対してデータを出力させる機能である。また、即値の出力機能とは、デコードされた演算実行命令内のソースオペランドに記述された即値を、演算を実行させる演算器に対して出力する機能である。
【００２１】
以上の構成の演算処理装置１では、演算器１１と演算器１２のそれぞれによって演算を並列に実行させることができる。このため、例えば演算器１１のみを設けた場合と比較して、演算性能を向上させることができる。
【００２２】
また、一方の演算器１２の入力ポート１２ｂに即値のみ入力させる構成としたことで、レジスタファイル１４から各演算器への入力パスが３本になる。例えば、演算器１１を２台設けた場合には、レジスタファイル１４から各演算器への入力パスは４本になるのに対して、図１の構成によれば、レジスタファイル１４から各演算器への入力パスを３本に留めることができる。
【００２３】
すなわち、図１の演算処理装置１によれば、演算器を１台のみ設けた場合と比較して、レジスタファイル１４から各演算器への入力パスの数が増大することを抑制しつつ、演算性能を向上させることができる。レジスタファイル１４から各演算器への入力パスの数を抑制できることにより、配線の面積を抑制できる。また、配線の面積抑制によって配線の長さも短縮されるので、演算器とレジスタファイル１４との間の伝送遅延も抑制され、伝送遅延によって演算性能が低下することを抑止できる。
【００２４】
なお、図１では、演算器１１，１２をそれぞれ１つずつ設けたが、演算器１１，１２のそれぞれを複数設けてもよい。このとき、演算器１１の数より演算器１２の数を多くすることにより、レジスタファイル１４から各演算器への入力パスの数を抑制する効果が大きくなる。
【００２５】
また、上記の演算器１１，１２に加えて、２つの入力ポートの両方に即値のみが入力される演算器が設けられてもよい。この場合にも、レジスタファイル１４から各演算器への入力パスの数を抑制する効果が大きくなる。
【００２６】
〔第２の実施の形態〕
図２は、第２の実施の形態に係る演算処理装置の構成例を示す図である。
図２に示す演算処理装置１００は、汎用演算器１１０，１２０，１３０，１４０、アドレス演算器１５０，１６０，１７０、キャッシュメモリ１８０、命令制御部２００およびレジスタファイル３００を備える。
【００２７】
命令制御部２００は、図示しないメモリから演算実行命令を取得して、取得した演算実行命令をデコードする。命令制御部２００は、演算実行命令のデコード結果に応じて、汎用演算器１１０，１２０，１３０，１４０、アドレス演算器１５０，１６０，１７０のいずれか１つを選択し、選択した演算器に対してデコード結果に応じた演算処理を実行させる。また、命令制御部２００は、いずれかの演算器に演算処理を実行させる際に、レジスタファイル３００からの読み出しデータ（レジスタ値）または、演算実行命令に記述された即値、もしくはレジスタ値と即値の両方を、演算処理を実行させる演算器に入力するように制御する。
【００２８】
レジスタファイル３００は、複数のレジスタを備える。レジスタファイル３００内の各レジスタには、汎用演算器１１０，１２０，１３０，１４０による演算結果や図示しないメモリから読み出されたデータなどが格納される。
【００２９】
汎用演算器１１０，１２０，１３０，１４０のそれぞれは、命令制御部２００によってデコードされる演算実行命令のうち、例えば、加算命令、減算命令、乗算命令および除算命令に応じた演算処理を実行する。汎用演算器１１０，１２０，１３０，１４０は、命令制御部２００からの要求に応じて、互いに並列に演算処理を実行できる。
【００３０】
また、汎用演算器１１０，１２０，１３０，１４０のそれぞれは、入力された２つのオペランドに対して演算を行う。後述するように、汎用演算器１１０は、２つのオペランドのそれぞれとして、レジスタファイル３００からの読み出しデータ（レジスタ値）と命令制御部２００からの即値のいずれの入力も受けることができる。また、汎用演算器１２０，１３０のそれぞれは、２つのオペランドのうち、一方のオペランドとしてレジスタ値と即値のいずれの入力も受けることができるが、他方のオペランドとして即値の入力のみ受けることができる。汎用演算器１４０は、２つのオペランドのそれぞれとして即値の入力のみ受けることができる。なお、汎用演算器１１０，１２０，１３０，１４０のそれぞれによる演算結果は、レジスタファイル３００、または図示しないメモリなどに出力される。
【００３１】
アドレス演算器１５０，１６０，１７０のそれぞれは、命令制御部２００によってデコードされる演算実行命令のうち、ロード命令およびストア命令に応じたアドレス演算処理を実行する。アドレス演算器１５０，１６０，１７０は、命令制御部２００からの要求に応じて、互いに並列に演算処理を実行できる。
【００３２】
また、アドレス演算器１５０，１６０，１７０のそれぞれは、２つのオペランドの入力を受けて演算を行う。後述するように、アドレス演算器１５０は、２つのオペランドのそれぞれとして、レジスタ値と即値のいずれの入力も受けることができる。また、アドレス演算器１６０，１７０のそれぞれは、２つのオペランドのうち、一方のオペランドとしてレジスタ値と即値のいずれの入力も受けることができるが、他方のオペランドとして即値の入力のみ受けることができる。
【００３３】
キャッシュメモリ１８０は、図示しないメモリのデータをキャッシュする。例えば、アドレス演算器１５０，１６０，１７０のそれぞれは、ロード命令のデコード結果に応じて、メモリからのデータの読み出しアドレスを計算し、算出した読み出しアドレスをキャッシュメモリ１８０に出力する。この場合、キャッシュメモリ１８０は、入力された読み出しアドレスに対応するデータを、レジスタファイル３００に格納する。また、例えば、アドレス演算器１５０，１６０，１７０のそれぞれは、ストア命令のデコード結果に応じて、メモリに対するデータの書き込みアドレスを計算し、算出した書き込みアドレスをキャッシュメモリ１８０に出力する。この場合、キャッシュメモリ１８０は、レジスタファイル３００から書き込みデータを読み込み、入力された書き込みアドレスに対応する自身の記憶領域に書き込みデータを書き込むとともに、書き込みデータを図示しないメモリにも書き込む。
【００３４】
次に、各演算器における入出力信号について説明する。図３〜図５は、汎用演算器における入出力信号の例を示す図である。
図３〜図５に示すように、汎用演算器１１０，１２０，１４０のそれぞれは、２つの入力ポートＩＮ１，ＩＮ２を備え、入力ポートＩＮ１，ＩＮ２のそれぞれに入力されたデータに対して演算処理を行う。また、図示しないが、汎用演算器１３０も同様に、２つの入力ポートＩＮ１，ＩＮ２を備え、入力ポートＩＮ１，ＩＮ２のそれぞれに入力されたデータに対して演算処理を行う。
【００３５】
ここで、命令制御部２００に入力される演算実行命令には、最大２つのソースオペランドが記述されるものとし、演算実行命令内の２つのソースオペランドのうちの一方を第１ソースオペランド、他方を第２ソースオペランドと呼ぶことにする。このとき、各汎用演算器において、入力ポートＩＮ１は第１ソースオペランドに対応付けられており、入力ポートＩＮ２は第２ソースオペランドに対応付けられている。すなわち、入力ポートＩＮ１には、演算実行命令内の第１ソースオペランドに基づくデータが入力され、入力ポートＩＮ２には、演算実行命令内の第２ソースオペランドに基づくデータが入力される。
【００３６】
図３に示すように、汎用演算器１１０の入力ポートＩＮ１には、レジスタファイル３００からのレジスタ値と、命令制御部２００からの即値とが、ＭＵＸ（Multiplexer）１１１を介して選択的に入力される。また、汎用演算器１１０の入力ポートＩＮ２にも同様に、レジスタファイル３００からのレジスタ値と、命令制御部２００からの即値とが、ＭＵＸ１１２を介して選択的に入力される。
【００３７】
また、図４に示すように、汎用演算器１２０の入力ポートＩＮ１には、レジスタファイル３００からのレジスタ値と、命令制御部２００からの即値とが、ＭＵＸ１２１を介して選択的に入力される。一方、汎用演算器１２０の入力ポートＩＮ２には、命令制御部２００からの即値のみが入力される。
【００３８】
なお、図示しないが、汎用演算器１３０の入力ポートＩＮ１，ＩＮ２に入力される信号の組合せは、汎用演算器１２０と同様になっている。すなわち、汎用演算器１３０の入力ポートＩＮ１には、レジスタファイル３００からのレジスタ値と、命令制御部２００からの即値とが選択的に入力される。一方、汎用演算器１３０の入力ポートＩＮ２には、命令制御部２００からの即値のみが入力される。
【００３９】
また、図５に示すように、汎用演算器１４０の入力ポートＩＮ１，ＩＮ２のいずれにも、命令制御部２００からの即値が入力される。
なお、図３〜図５に示すように、汎用演算器１１０，１２０，１４０のそれぞれによって演算された演算結果は、レジスタファイル３００に書き込まれる。また、図示しないが、汎用演算器１３０によって演算された演算結果も、同様に、レジスタファイル３００に書き込まれる。演算結果の書き込み先は、演算実行命令内のディスティネーションオペランドにおいて指定されたアドレスであり、命令制御部２００によって書き込み先の指定が行われる。
【００４０】
また、図３〜図５に示すように、汎用演算器１１０，１２０，１４０のそれぞれには、命令制御部２００からの演算種別指定信号が入力される。汎用演算器１１０，１２０，１４０のそれぞれは、入力された演算種別指定信号によって指定された種別の演算を実行する。演算の種別としては、加算、減算、乗算、除算などがある。なお、図示しないが、汎用演算器１３０も、他の汎用演算器と同様に、命令制御部２００からの演算種別指定信号を受信し、受信した演算種別指定信号によって指定された種別の演算を実行する。
【００４１】
また、演算種別指定信号は、例えば、演算種別ごとに用意された選択信号群として実現される。この場合、各汎用演算器に入力される選択信号のうち１つのみがオンになり、その他の選択信号がすべてオフになることで、演算の種別が指定される。
【００４２】
なお、図示しないが、アドレス演算器１５０，１６０，１７０のそれぞれについても、汎用演算器と同様に、２つの入力ポートＩＮ１，ＩＮ２を備え、入力ポートＩＮ１，ＩＮ２のそれぞれに入力されたデータに対して演算処理を行う。そして、アドレス演算器１５０の入力ポートＩＮ１，ＩＮ２に入力される信号の組合せは、汎用演算器１１０と同様になっている。すなわち、アドレス演算器１５０の入力ポートＩＮ１は、レジスタファイル３００からのレジスタ値と、命令制御部２００からの即値のいずれの入力も受けることができる。また、アドレス演算器１５０の入力ポートＩＮ２も同様に、レジスタファイル３００からのレジスタ値と、命令制御部２００からの即値のいずれの入力も受けることができる。
【００４３】
また、アドレス演算器１６０の入力ポートＩＮ１，ＩＮ２に入力される信号の組合せと、アドレス演算器１７０の入力ポートＩＮ１，ＩＮ２に入力される信号の組合せとは、汎用演算器１２０，１３０と同様になっている。すなわち、アドレス演算器１６０，１７０のそれぞれの入力ポートＩＮ１は、レジスタファイル３００からのレジスタ値と、命令制御部２００からの即値のいずれの入力も受けることができる。一方、アドレス演算器１６０，１７０のそれぞれの入力ポートＩＮ２は、命令制御部２００からの即値の入力のみ受けることができる。
【００４４】
なお、ロード命令やストア命令では、２つのソースオペランドにともに即値が設定されることはない。このため、入力ポートＩＮ１，ＩＮ２のいずれにも即値のみが入力されるアドレス演算器は必要とならない。
【００４５】
ところで、各演算器の入力ポートに入力されるオペランドは、レジスタ値か、あるいはそれ以外かの２通りに分類できる。演算器におけるオペランドがレジスタ値以外になる場合の典型例は、オペランドが即値になる場合である。
【００４６】
また、演算器におけるオペランドがレジスタ値かそれ以外かを判別しにくい例として、いわゆるバイパス演算が行われる場合がある。バイパス演算では、演算実行命令のソースオペランドにおいてレジスタが指定されている場合であっても、高速処理を目的として、直前の演算結果が演算器へのオペランドとして転用される。さらに、バイパス演算の一種として、他のパイプラインからの結果が演算器へオペランドとして転用される場合もある。これらのバイパス演算では、演算実行命令のソースオペランドにおいてレジスタが指定されているにもかかわらず、結果的に、レジスタの実体を使用せずに演算が実行されることになる。
【００４７】
しかしながら、演算器におけるオペランドがレジスタ値かそれ以外かを、バイパスの有無の判別より後にならないと判別できない構成の場合には、バイパスが発生しなかったと仮定することで、演算器におけるオペランドをレジスタ値と判別することができるようになる。一方、演算器におけるオペランドがレジスタ値かそれ以外かを、バイパスの有無が判別された時点で判別してよい構成の場合には、演算器におけるオペランドをレジスタ値以外と判別することができるようになる。
【００４８】
演算器におけるオペランドを、レジスタ値かそれ以外かという２通りに場合分けできれば、演算器における２つのオペランドの組合せを、レジスタを使用する数によって次の３種類に分類できる。１つは、演算器における２つのオペランドがともにレジスタ値となるケース（すなわち、レジスタが２つ使用されるケース）である。他の１つは、演算器における一方のオペランドがレジスタ値で、他方のオペランドがレジスタ値以外となるケース（すなわち、レジスタが１つ使用されるケース）である。さらに他の１つは、演算器における２つのオペランドがともにレジスタ値以外となるケース（すなわち、レジスタが使用されないケース）である。なお、ＭＯＶ命令のような定数を設定する命令や転送命令など、ソースオペランドが１つだけ指定される演算実行命令に応じた演算は、上記の３種類の分類のうち、レジスタが１つ使用されるケースか、レジスタが使用されないケースのいずれかに分類できる。
【００４９】
このように、演算器における２つのオペランドの組合せをレジスタの使用数によって３種類に分類できることから、演算器を複数設けて演算の並列度を高める場合に、それらすべての演算器を、２つのオペランドの両方にレジスタ値を入力可能な構成にしなくてもよいと考えることができる。例えば、演算器における一方のオペランドのみがレジスタ値となる演算は、一方の入力ポートにのみレジスタ値が入力される演算器によって実行できる。また、演算器における２つのオペランドがともにレジスタ値以外となる演算は、レジスタ値の入力が不可能な演算器によって実行できる。
【００５０】
そこで、本実施の形態の演算処理装置１００では、上記３種類のそれぞれの分類に対応する３種類の演算器を設けた。すなわち、第１の種類の演算器は、２つのオペランドの両方をレジスタ値とすることが可能な演算器（例えば、汎用演算器１１０およびアドレス演算器１５０）である。第２の種類の演算器は、一方のオペランドのみをレジスタ値とすることが可能な演算器（例えば、汎用演算器１２０，１３０およびアドレス演算器１６０，１７０）である。第３の種類の演算器は、２つのオペランドの両方が即値とされる演算器（例えば、汎用演算器１４０）である。
【００５１】
このような３種類の演算器を設けることにより、演算の並列度が向上するだけでなく、次の図に示すように、レジスタファイル３００から演算器への読み出しパスの数を減らすことができるという効果を奏するようになる。
【００５２】
図６は、レジスタファイルから演算器への読み出しパスを示す図である。なお、この図６では、レジスタファイル３００と各演算器との間に介在するＭＵＸについては図示を省略している。
【００５３】
汎用演算器１１０の入力ポートＩＮ１，ＩＮ２、汎用演算器１２０の入力ポートＩＮ１、汎用演算器１３０の入力ポートＩＮ１のそれぞれには、レジスタファイル３００からの読み出しパスが接続されている。また、アドレス演算器１５０の入力ポートＩＮ１，ＩＮ２、アドレス演算器１６０の入力ポートＩＮ１、アドレス演算器１７０の入力ポートＩＮ１のそれぞれにも、レジスタファイル３００からの読み出しパスが接続されている。なお、汎用演算器１４０には、レジスタファイル３００からの読み出しパスは接続されない。
【００５４】
この図６より、演算処理装置１００では、汎用演算器が４個、アドレス演算器が３個設けられ、各演算器に対するレジスタファイル３００からの読み出しパスが合計８本設けられている。
【００５５】
ここで、２つのオペランドの両方としてレジスタ値を入力可能な演算器を複数設けた演算処理装置を比較例として示し、この比較例と本実施の形態の演算処理装置１００とを比較する。図７は、演算処理装置の比較例を示す図である。
【００５６】
この図７では、図６に対応する構成要素については同じ符号を付して示している。すなわち、図７の演算処理装置５００では、入力ポートＩＮ１，ＩＮ２のそれぞれにレジスタファイル３００からの読み出しパスが接続された汎用演算器１１０が、２個設けられている。さらに、入力ポートＩＮ１，ＩＮ２のそれぞれにレジスタファイル３００からの読み出しパスが接続されたアドレス演算器１５０も、２個設けられている。
【００５７】
この図７より、演算処理装置５００では、汎用演算器、アドレス演算器がそれぞれ２個ずつ設けられ、各演算器に対するレジスタファイル３００からの読み出しパスが合計８本設けられている。図７の演算処理装置５００と図６の演算処理装置１００とを比較すると、図６の演算処理装置１００は、図７の演算処理装置５００より演算器の設置数が多いにもかかわらず、レジスタファイル３００から演算器への読み出しパスの本数は演算処理装置５００と同じ数になっている。入力される演算実行命令のうち、２つのソースオペランドの両方がレジスタを示す命令は一部に過ぎないことを考慮すると、図６の演算処理装置１００では、図７の演算処理装置５００と比較して、演算器の数の増加により演算の並列度が高まると言える。すなわち、本実施の形態の演算処理装置１００では、レジスタファイルから演算器への読み出しパスが増大することを抑制しつつ、演算器を多く設置し、演算効率を向上させることができる。
【００５８】
次に、図８は、レジスタファイルの構成例を示す図である。なお、図８では、レジスタファイル３００における各演算器への読み出し回路部分のみを示している。
レジスタファイル３００は、複数のレジスタ３０１ａ，３０１ｂ，３０１ｃ，・・・を備える。また、レジスタファイル３００は、汎用演算器１１０の入力ポートＩＮ１，ＩＮ２、汎用演算器１２０，１３０のそれぞれの入力ポートＩＮ１、アドレス演算器１５０の入力ポートＩＮ１，ＩＮ２、アドレス演算器１６０，１７０のそれぞれの入力ポートＩＮ１という合計８個の入力ポートのそれぞれに対して、レジスタに格納された値を供給する選択回路３１１〜３１８を備える。選択回路３１１〜３１８のそれぞれには、命令制御部２００からレジスタ番号が入力される。選択回路３１１〜３１８のそれぞれは、入力されたレジスタ番号に対応するレジスタに格納された値を、対応する演算器に対して出力する。
【００５９】
なお、命令制御部２００によって演算実行命令がアウトオブオーダで実行される場合、レジスタファイル３００の実装方式としては、例えば、リネーミングレジスタ方式や、レジスタ更新バッファ方式などの種々の方式を適用可能である。
【００６０】
次に、命令制御部による各演算器の制御処理について説明する。なお、以下の説明では、主として、汎用演算器１１０，１２０，１３０，１４０に対する制御処理について図を用いて説明し、アドレス演算器１５０，１６０，１７０に対する制御処理についての説明を適宜省略する。
【００６１】
図９は、命令制御部の内部構成例を示す図である。
命令制御部２００は、命令レジスタ（ＩＷＲ：Instruction Word Register）２０１〜２０４、デコーダ２１１〜２１４およびリザベーションステーション２２１〜２２３を備えている。
【００６２】
命令レジスタ２０１〜２０４のそれぞれは、命令フェッチ部（図示せず）によってメモリ（図示せず）からフェッチされた演算実行命令を、一時的に保持する。デコーダ２１１は、命令レジスタ２０１に保持された演算実行命令を読み込んでデコードする。デコーダ２１２は、命令レジスタ２０２に保持された演算実行命令を読み込んでデコードする。デコーダ２１３は、命令レジスタ２０３に保持された演算実行命令を読み込んでデコードする。デコーダ２１４は、命令レジスタ２０４に保持された演算実行命令を読み込んでデコードする。
【００６３】
命令制御部２００では、デコーダ２１１〜２１４を備えたことにより、最大４つの演算実行命令を同時に発行することが可能である。なお、デコーダの設置数は４個に限らない。また、デコーダ２１１〜２１４は、例えば、互いに演算実行命令の依存関係をチェックすることで、必要に応じて、演算実行命令をいずれか１つのデコーダのみから発行し、複数のデコーダから演算実行命令が同時に発行されないようにしてもよい。
【００６４】
デコーダ２１１〜２１４のそれぞれは、デコードした演算実行命令が、加算、減算、乗算、除算など、汎用演算器によって実行可能な演算の実行を要求するものである場合には、デコードした演算実行命令を、リザベーションステーション２２１〜２２３のいずれかに出力する。後述するように、デコーダ２１１〜２１４のそれぞれは、デコードした演算実行命令内の２つのソースオペランドに記述された情報の組合せに応じて、リザベーションステーション２２１〜２２３から１つを選択し、選択したリザベーションステーションに対して演算実行命令のデコード結果を出力する。
【００６５】
リザベーションステーション２２１〜２２３のそれぞれは、デコーダ２１１〜２１４から出力された演算実行命令を一時的に保持する演算キューを備える。リザベーションステーション２２１〜２２３のそれぞれは、演算キューに保持した演算実行命令のうち、リソースの準備が整った命令から順に、汎用演算器に対して発行する。
【００６６】
本実施の形態では、リザベーションステーションは、２つのオペランドに入力可能なデータの組合せに応じた汎用演算器の種類ごとに設けられる。リザベーションステーション２２１は、入力ポートＩＮ１，ＩＮ２の両方にレジスタ値を入力可能である汎用演算器１１０に対応付けられている。すなわち、リザベーションステーション２２１は、演算キューに保持した演算実行命令を汎用演算器１１０に発行する。
【００６７】
また、リザベーションステーション２２２は、入力ポートＩＮ１にのみレジスタ値を入力可能である汎用演算器１２０，１３０に対応付けられている。すなわち、リザベーションステーション２２２は、演算キューに保持した演算実行命令を、汎用演算器１２０，１３０のいずれかに対して発行する。なお、リザベーションステーション２２２は、例えば、リソースの準備が整った演算実行命令が現れたとき、汎用演算器１２０，１３０のうち演算処理が実行されていない汎用演算器に対して、演算実行命令を発行する。
【００６８】
さらに、リザベーションステーション２２３は、入力ポートＩＮ１，ＩＮ２のいずれにもレジスタ値が入力されない汎用演算器１４０に対応付けられている。すなわち、リザベーションステーション２２３は、演算キューに保持した演算実行命令を汎用演算器１４０に対して発行する。
【００６９】
なお、このように、リザベーションステーションが、２つのオペランドに入力可能なデータの組合せに応じた汎用演算器の種類ごとに設けられていることから、デコーダ２１１〜２１４のそれぞれは、デコードした演算実行命令の出力先のリザベーションステーションを選択することで、実質的に、演算を実行させる汎用演算器を選択していると言える。
【００７０】
リザベーションステーション２２１〜２２３のそれぞれは、リソースの準備が整った演算実行命令が現れたとき、例えば、次のように動作する。リザベーションステーション２２１〜２２３のそれぞれは、演算実行命令に記述された命令コードに基づき、演算を実行させる汎用演算器に対して、演算の種別を示す演算種別指定信号を送信する。なお、演算種別指定信号が、それぞれ個別の演算の種別に対応する選択信号群からなる場合には、リザベーションステーション２２１〜２２３のそれぞれは、選択信号群のうち１つの選択信号のみをオンにする。
【００７１】
また、リザベーションステーション２２１〜２２３のそれぞれは、演算実行命令のソースオペランドにレジスタ番号が設定されていた場合には、レジスタファイル３００に対してレジスタ番号を指定し、指定したレジスタ番号に対応するレジスタに保持されたデータを、演算を実行させる汎用演算器に出力させる。さらに、リザベーションステーション２２１〜２２３のそれぞれは、演算実行命令のソースオペランドに即値が設定されていた場合には、演算を実行させる汎用演算器に対して、即値を送信する。また、リザベーションステーション２２１〜２２３のそれぞれは、演算実行命令のソースオペランドに設定された値（例えばレジスタ番号）によっては、即値を生成して、生成した即値を、演算を実行させる汎用演算器に送信する場合もある。
【００７２】
なお、図示しないが、命令制御部２００は、例えば、アドレス演算器１５０，１６０，１７０のそれぞれに対応するリザベーションステーションを備えている。これらのリザベーションステーションは、ＲＳＡ（Reservation Station for Address generate）と呼ばれるものである。デコーダ２１１〜２１４のそれぞれは、デコードした演算実行命令が、ロード命令やストア命令など、アドレス演算器での処理を要求するものである場合には、デコードした演算実行命令を、いずれかのＲＳＡ内の演算キューに出力する。デコーダ２１１〜２１４のそれぞれは、デコードした演算実行命令内の２つのソースオペランドに記述された情報の組合せに応じて、演算実行命令の出力先のＲＳＡを選択する。各ＲＳＡは、デコーダ２１１〜２１４から入力された演算実行命令を演算キューに保持し、演算キューに保持した演算実行命令のうち、リソースの準備が整った命令から順に、対応するアドレス演算器に対して発行する。
【００７３】
次に、デコーダ２１１〜２１４の処理についてより詳しく説明する。デコーダ２１１〜２１４はそれぞれ同じ構成であって同じ処理を実行可能であるので、以下、例としてデコーダ２１１の処理についてのみ説明する。
【００７４】
図１０は、デコーダに入力される演算実行命令のフォーマットの例を示す図である。この図１０では、例として、「ＳＰＡＲＣ  Ｖ９」において規定された命令セットの例を挙げる。なお、「ＳＰＡＲＣ」は、ＳＰＡＲＣインターナショナル（SPARC International, Inc）の登録商標である。
【００７５】
「ＳＰＡＲＣ  Ｖ９」における演算実行命令は、３２ビットのデータとなっている。デコーダ２１１は、第１９ビットから第２４ビットまでの６ビットの値と、第３０ビットおよび第３１ビットの２ビットの値との組合せにより、演算の種類を判別する。汎用演算器で実行される演算実行命令の場合、第３０ビットおよび第３１ビットの２ビットのコードとして、「１０」が設定される。また、第１９ビットから第２４ビットまでの６ビットのコード（以下、「ｏｐ３」とする）としては、例えば、加算を示す場合には、下位４ビットが「０ｘ００」、残りの２ビットがそれぞれ「０」と設定され、減算を示す場合には、下位４ビットが「０ｘ０４」、残りの２ビットがそれぞれ「０」と設定される。
【００７６】
第２５ビットから第２９ビットまでの５ビットの値は、演算結果を格納するレジスタの番号（以下、「ｒｄ」とする）を示す。第１４ビットから第１８ビットまでの５ビット分の領域は、第１ソースオペランドである。第１ソースオペランドの領域に記述された５ビットの値は、演算器の入力ポートＩＮ１に入力するデータの読み出し元のレジスタ番号（以下、「ｒｓ１とする」）を示す。
【００７７】
第０ビットから第１２ビットまでの１３ビット分の領域は、第２ソースオペランドであり、第１３ビットの値は、第２ソースオペランドにレジスタ番号と即値のいずれが設定されているかを示す。第１３ビットの値が「０」である場合、図１０の上段に示すように、第２ソースオペランドにはレジスタ番号が設定される。この場合、第０ビットから第４ビットまでの５ビットの値は、演算器の入力ポートＩＮ２に入力するデータの読み出し元のレジスタ番号（以下、「ｒｓ２」とする）を示し、第５ビットから第１２ビットまでの領域には、固定値「００００００００」が設定される。一方、第１３ビットの値が「１」である場合、図１０の下段に示すように、第２ソースオペランドには、１３ビットの符号付き即値（以下、「ｓｉｍｍ１３」とする）が設定される。
【００７８】
図１０の上段に示した演算実行命令は、アセンブリ言語では「ｏｐ３  ％ｒｓ１，％ｒｓ２，％ｒｄ」と記述される。この演算実行命令は、レジスタ番号「ｒｓ１」，「ｒｓ２」にそれぞれ記憶された値を用いて「ｏｐ３」で指定される演算を実行し、演算結果をレジスタ番号「ｒｄ」に格納するように指示するものである。また、図１０の下段に示した演算実行命令は、アセンブリ言語では「ｏｐ３  ％ｒｓ１，ｓｉｍｍ１３，％ｒｄ」と記述される。この演算実行命令は、レジスタ番号「ｒｓ１」に記憶された値と即値「ｓｉｍｍ１３」とを用いてコード「ｏｐ３」で指定される演算を実行し、演算結果をレジスタ番号「ｒｄ」に格納するように指示するものである。
【００７９】
以上の図１０に示したように、デコーダ２１１に入力される演算実行命令では、基本的に、第１ソースオペランドとしてレジスタ番号が指定され、第２ソースオペランドとしてレジスタ番号または即値が指定される。
【００８０】
また、図１０の命令セットでは、ソースオペランドにおいてレジスタ番号「ｇ０」が指定された場合には、レジスタ番号「ｇ０」に対応するレジスタからは常に定数「０」が読み出される。そこで、デコーダ２１１は、ソースオペランドにおいてレジスタ番号「ｇ０」が指定された場合、ソースオペランドに即値「０」が指定されたと見なして、レジスタ番号「ｇ０」の代わりに即値「０」を出力する。なお、以下の説明では、ソースオペランドに指定されるレジスタ番号として、定数が読み出されるレジスタ番号「ｇ０」を、定数でない値が読み出されるレジスタ番号「ｒｓ１」，「ｒｓ２」とは区別して示す。
【００８１】
また、上記においては、定数の読み出しを指定するレジスタ番号として「ｇ０」を例示したが、デコーダ２１１は、「０」以外の他の定数の読み出しを指定するレジスタ番号がソースオペランドに指定された場合でも、「ｇ０」と同様に即値が指定されたと見なして処理すればよい。
【００８２】
ここで、第１ソースオペランドおよび第２ソースオペランドにそれぞれ指定されるデータ種（ｒｓ１，ｒｓ２，ｓｉｍｍ１３，ｇ０）の組合せパターンとしては、次の６通りが考えられる。なお、下記の各パターンにおいて、例えば、「ｒｓ１，ｒｓ２」は、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定され、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されることを示す。
【００８３】
パターン１：ｒｓ１，ｒｓ２
パターン２：ｒｓ１，ｇ０
パターン３：ｇ０，ｒｓ２
パターン４：ｇ０，ｇ０
パターン５：ｒｓ１，ｓｉｍｍ１３
パターン６：ｇ０，ｓｉｍｍ１３
デコーダ２１１は、演算実行命令の第１ソースオペランドおよび第２ソースオペランドにそれぞれ指定されたデータ種の組合せパターンを判別し、判別した組合せパターンに応じて、演算を実行させる演算器を選択する。上記の６通りの組合せパターンのうち、第２ソースオペランドにおいて実体を伴うレジスタが指定されるものは、パターン１とパターン３である。また、第１ソースオペランドおよび第２ソースオペランドの両方において実体を伴うレジスタが指定されないものは、パターン４とパターン６である。
【００８４】
そこで、本実施の形態では、デコーダ２１１は、第２ソースオペランドにおいて実体を伴うレジスタが指定される数に応じて、上記の組合せパターンを次の３種類のグループに分類する。そして、デコーダ２１１は、各グループに対応する演算器に対して演算実行命令を発行するように制御する。
【００８５】
グループＡ１：パターン１（ｒｓ１，ｒｓ２）、パターン３（ｇ０，ｒｓ２）
グループＢ１：パターン２（ｒｓ１，ｇ０）、パターン５（ｒｓ１，ｓｉｍｍ１３）
グループＣ１：パターン４（ｇ０，ｇ０）、パターン６（ｇ０，ｓｉｍｍ１３）
図１１は、第２の実施の形態におけるデコーダの処理を示すフローチャートである。この図１１の処理は、デコードした演算実行命令が汎用演算器によって実行可能な演算の実行を要求するものであると判定した場合に、デコーダ２１１によって実行されるものである。
【００８６】
［ステップＳ１１］デコーダ２１１は、演算実行命令における第２ソースオペランドに、実体を伴うレジスタの番号「ｒｓ２」が指定されているかを判定する。デコーダ２１１は、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されている場合（Ｓ１１：Ｙｅｓ）には、ステップＳ１２の処理を実行する。一方、デコーダ２１１は、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されていない場合（Ｓ１１：Ｎｏ）には、ステップＳ１３の処理を実行する。
【００８７】
［ステップＳ１２］第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されている場合（Ｓ１１：Ｙｅｓ）、第１ソースオペランドと第２ソースオペランドの組合せパターンは、上記のグループＡ１に属するパターン１またはパターン３となる。この場合、デコーダ２１１は、入力ポートＩＮ１，ＩＮ２の両方にレジスタ値を入力可能な汎用演算器１１０で演算するように制御する。すなわち、デコーダ２１１は、デコードした演算実行命令を、汎用演算器１１０に対応するリザベーションステーション２２１にキューイングする。
【００８８】
［ステップＳ１３］デコーダ２１１は、演算実行命令における第１ソースオペランドに、実体を伴うレジスタの番号「ｒｓ１」が指定されているかを判定する。デコーダ２１１は、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されている場合（Ｓ１３：Ｙｅｓ）には、ステップＳ１４の処理を実行する。一方、デコーダ２１１は、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されていない場合（Ｓ１３：Ｎｏ）には、ステップＳ１５の処理を実行する。
【００８９】
［ステップＳ１４］第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されておらず（Ｓ１１：Ｎｏ）、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されている場合（Ｓ１３：Ｙｅｓ）、第１ソースオペランドと第２ソースオペランドの組合せパターンは、上記のグループＢ１に属するパターン２またはパターン５となる。この場合、デコーダ２１１は、入力ポートＩＮ２に命令制御部２００からの即値のみが入力されるが、入力ポートＩＮ１にレジスタ値を入力可能な汎用演算器１２０または汎用演算器１３０で演算するように制御する。すなわち、デコーダ２１１は、デコードした演算実行命令を、汎用演算器１２０，１３０に対応するリザベーションステーション２２２にキューイングする。
【００９０】
［ステップＳ１５］第１ソースオペランドおよび第２ソースオペランドのいずれにもレジスタ番号「ｒｓ１」，「ｒｓ２」が指定されていない場合（Ｓ１１：Ｎｏ，Ｓ１３：Ｎｏ）、第１ソースオペランドおよび第２ソースオペランドの組合せパターンは、上記のグループＣ１に属するパターン４またはパターン６となる。この場合、デコーダ２１１は、入力ポートＩＮ１，ＩＮ２の両方とも命令制御部２００からの即値のみが入力される汎用演算器１４０で演算するように制御する。すなわち、デコーダ２１１は、デコードした演算実行命令を、汎用演算器１４０に対応するリザベーションステーション２２３にキューイングする。
【００９１】
なお、上記のステップＳ１２，Ｓ１４において、デコーダ２１１は、ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定されていた場合、ソースオペランドを定数に対応する即値に置換して、リザベーションステーション２２１またはリザベーションステーション２２２にキューイングする。ただし、ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定されていた場合に、リザベーションステーション２２１またはリザベーションステーション２２２に対してはソースオペランドの置換を行わずにキューイングを行い、リザベーションステーション２２１またはリザベーションステーション２２２からの命令発行時に、ソースオペランドに指定されたレジスタ番号「ｇ０」を定数に対応する即値に置換するようにしてもよい。
【００９２】
以上の図１１の処理では、ソースオペランドの組合せパターンがグループＡ１に属する場合、演算実行命令はリザベーションステーション２２１にキューイングされる。また、ソースオペランドの組合せパターンがグループＢ１に属する場合、演算実行命令はリザベーションステーション２２２にキューイングされる。また、ソースオペランドの組合せパターンがグループＣ１に属する場合、演算実行命令はリザベーションステーション２２３にキューイングされる。
【００９３】
ここで、上記処理では、ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定された場合、このソースオペランドを即値と見なして処理する。これにより、第２ソースオペランドにレジスタ番号「ｇ０」が指定されたパターン２を、汎用演算器１１０ではなく汎用演算器１２０，１３０のいずれかで処理できるようになり、汎用演算器１１０で処理すべき演算実行命令の数を減らし、演算処理を分散させることができる。特に、本実施の形態では、入力ポートＩＮ１，ＩＮ２の両方にレジスタ値を入力可能な汎用演算器より、入力ポートＩＮ１にのみレジスタ値を入力可能な汎用演算器の数を多くした。このことから、レジスタ番号「ｇ０」が指定されたソースオペランドを即値と見なすことで生じる演算処理の分散効果が、より顕著になる。
【００９４】
また、図示しないが、命令制御部２００は、例えば、アドレス演算器１５０，１６０，１７０のそれぞれに対応するリザベーションステーションを備えている。これらのリザベーションステーションは、ＲＳＡ（Reservation Station for Address generate）と呼ばれるものである。デコーダ２１１〜２１４のそれぞれは、デコードした演算実行命令が、ロード命令やストア命令など、アドレス演算器での処理を要求するものである場合には、デコードした演算実行命令を、いずれかのＲＳＡ内の演算キューに出力する。デコーダ２１１〜２１４のそれぞれは、デコードした演算実行命令内の２つのソースオペランドに記述された情報の組合せに応じて、演算実行命令の出力先のＲＳＡを選択する。
【００９５】
演算実行命令によりアドレス演算器での処理を要求する命令が指定された場合にも、デコーダ２１１〜２１４は、図１１と同様の判定手順により、処理を実行させるアドレス演算器に対応するリザベーションステーション（前述のＲＳＡ）を選択する。例えば、第１ソースオペランドと第２ソースオペランドの組合せパターンがグループＡ１に属するパターンである場合、デコーダ２１１は、アドレス演算器１５０に対応するＲＳＡに対して演算実行命令をキューイングする（ステップＳ１２に対応）。また、第１ソースオペランドと第２ソースオペランドの組合せパターンがグループＢ１に属するパターンである場合、デコーダ２１１は、アドレス演算器１６０，１７０に対応するＲＳＡに対して演算実行命令をキューイングする（ステップＳ１４に対応）。なお、アドレス演算器での処理を要求する演算実行命令では、第１ソースオペランドと第２ソースオペランドの組合せパターンは、グループＣ１に属するパターンにはならない。
【００９６】
各ＲＳＡは、デコーダ２１１〜２１４から入力された演算実行命令を内部の演算キューに保持し、演算キューに保持した演算実行命令のうち、リソースの準備が整った命令から順に、対応するアドレス演算器に対して発行する。
【００９７】
図１２は、第２の実施の形態におけるデコーダの回路構成例を示す図である。なお、この図１２では、主として加算命令に関する回路構成を示し、その他の構成の図示を省略する。また、図１２は、例としてデコーダ２１１の回路構成例を示すが、デコーダ２１２〜２１４のそれぞれも同じ構成の回路を有する。
【００９８】
図１２に示すように、デコーダ２１１は、ＡＮＤ（論理積）ゲート２３１〜２３７、ＯＲ（論理和）ゲート２３８〜２４２およびバッファ２４３を備える。
ＡＮＤゲート２３１，２３２は、加算（ＡＤＤ）命令の入力を判定するゲート回路である。ＡＮＤゲート２３１には、命令レジスタ２０１からの演算実行命令のうち、第３０ビットの反転値と、第３１ビットの値とが入力される。また、ＡＮＤゲート２３２には、命令レジスタ２０１からの演算実行命令のうちの第１９ビットから第２４ビットまでの値をすべて反転した値が入力される。ＡＮＤゲート２３１は、第３０ビットの値が「０」、第３１ビットの値が「１」のとき、出力をオンにし、ＡＮＤゲート２３２は、第１９ビットから第２４ビットまでのすべての値が「０」のとき、出力をオンにする。すなわち、入力された演算実行命令によって加算命令の実行が指定されたとき、ＡＮＤゲート２３１，２３２の各出力はオンになる。
【００９９】
ＡＮＤゲート２３２の出力信号は、ＯＲゲート２３８に入力される。また、ＯＲゲート２３８の他の入力には、他の可換演算命令が指定されたことを判定する判定回路からの出力信号が入力される。他の可換演算命令とは、例えば乗算命令である。乗算命令が指定されたことを判定する判定回路は、演算実行命令における第１９ビットから第２４ビットまでの値（ｏｐ３）のうち、下位４ビットが「０ｘ０９」であり、残りの２ビットがともに「０」である場合に、出力をオンにする。ＯＲゲート２３８は、演算実行命令により可換演算の実行が指定された場合に、出力をオンにする。なお、図１２に示す回路は、ＡＮＤゲート２３２以外は、加算、乗算などの可換演算命令に関して共用される。
【０１００】
ＡＮＤゲート２３３は、命令レジスタ２０１からの演算実行命令の第１ソースオペランドに、実体を伴うレジスタの番号「ｒｓ１」が指定されているかを判定するゲート回路である。ＡＮＤゲート２３３には、演算実行命令の第１４ビットから第１８ビットまでの値をすべて反転した値が入力される。ＡＮＤゲート２３３は、演算実行命令の第１４ビットから第１８ビットまでの値がすべて「０」の場合、すなわち、第１ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定されていた場合に、出力をオンにする。一方、ＡＮＤゲート２３３は、演算実行命令の第１４ビットから第１８ビットまでのビットのうち少なくとも１つのビットに「１」が設定されている場合、すなわち、第１ソースオペランドに実体を伴うレジスタの番号「ｒｓ１」が指定されている場合に、出力をオフにする。
【０１０１】
ＡＮＤゲート２３４、ＯＲゲート２３９およびバッファ２４３は、命令レジスタ２０１からの演算実行命令の第２ソースオペランドに、実体を伴うレジスタの番号「ｒｓ２」が指定されているかを判定する回路である。ＡＮＤゲート２３４には、演算実行命令の第１３ビットの値と第０ビットから第４ビットまでの値とをすべて反転した値が入力される。バッファ２４３には、演算実行命令の第１３ビットの値が入力される。ＡＮＤゲート２３４およびバッファ２４３の各出力信号は、ＯＲゲート２３９に入力される。
【０１０２】
ＡＮＤゲート２３４は、演算実行命令の第１３ビットが「１」の場合、すなわち、第２ソースオペランドに即値「ｓｉｍｍ１３」が指定されている場合に、出力をオフにする。この場合には、バッファ２４３の出力がオンになることから、ＯＲゲート２３９の出力もオンになる。なお、バッファ２４３は、入力された第１３ビットの値をＯＲゲート２３９に出力するタイミングを、ＡＮＤゲート２３４の出力タイミングと合わせる。
【０１０３】
また、ＡＮＤゲート２３４は、演算実行命令の第１３ビットが「０」であり、かつ、第０ビットから第４ビットまでのビットのうち少なくとも１つのビットに「１」が設定されている場合、すなわち、第２ソースオペランドに実体を伴うレジスタの番号「ｒｓ２」が指定されている場合に、出力をオフにする。この場合、バッファ２４３の出力もオフになり、ＯＲゲート２３９の出力もオフになる。
【０１０４】
また、ＡＮＤゲート２３４は、演算実行命令の第１３ビットが「０」であり、かつ、第０ビットから第４ビットまでがすべて「０」である場合、すなわち、第２ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定されている場合には、出力をオンにする。この場合、ＯＲゲート２３９の出力もオンになる。
【０１０５】
ＡＮＤゲート２３５〜２３７は、演算実行命令をリザベーションステーション２２１〜２２３のいずれにキューイングすべきかを判定する回路である。ＡＮＤゲート２３５には、ＡＮＤゲート２３１およびＯＲゲート２３８からの各出力信号と、ＯＲゲート２３９からの出力信号を反転した信号とが入力される。ＡＮＤゲート２３６には、ＡＮＤゲート２３１およびＯＲゲート２３８，２３９からの各出力信号と、ＡＮＤゲート２３３からの出力信号を反転した信号とが入力される。ＡＮＤゲート２３７には、ＡＮＤゲート２３１，２３３およびＯＲゲート２３８，２３９からの各出力信号が入力される。
【０１０６】
命令レジスタ２０１からの演算実行命令により、可換演算以外の演算（例えば、減算などの非可換演算）の実行が命令された場合、すなわち、ＡＮＤゲート２３１とＯＲゲート２３８のうち少なくとも一方の出力がオフの場合には、ＡＮＤゲート２３５〜２３７のいずれの出力もオフになる。一方、命令レジスタ２０１からの演算実行命令により加算などの可換演算の実行が命令された場合、すなわち、ＡＮＤゲート２３１およびＯＲゲート２３８の各出力信号がともにオンである場合には、次のような動作が行われる。
【０１０７】
第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＡ１に属するパターン１またはパターン３となる場合、すなわち、ＯＲゲート２３９の出力がオフの場合には、ＡＮＤゲート２３５の出力がオンになる。このとき、ＡＮＤゲート２３６，２３７の各出力はともにオフになる。ＡＮＤゲート２３５からの出力信号は、ＯＲゲート２４０を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ１＿ＳＥＬとしてリザベーションステーション２２１に出力される。ＡＮＤゲート２３５の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ１＿ＳＥＬがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令をリザベーションステーション２２１にキューイングする。
【０１０８】
第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＢ１に属するパターン２またはパターン５となる場合、すなわち、ＯＲゲート２３９の出力がオンになり、ＡＮＤゲート２３３の出力がオフになる場合には、ＡＮＤゲート２３６の出力がオンになる。このとき、ＡＮＤゲート２３５，２３７の各出力はともにオフになる。ＡＮＤゲート２３６からの出力信号は、ＯＲゲート２４１を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ１＿ＳＥＬとしてリザベーションステーション２２２に出力される。ＡＮＤゲート２３６の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ１＿ＳＥＬがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令をリザベーションステーション２２２にキューイングする。
【０１０９】
第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＣ１に属するパターン４またはパターン６となる場合、すなわち、ＯＲゲート２３９およびＡＮＤゲート２３３の各出力がともにオンの場合には、ＡＮＤゲート２３７の出力がオンになる。このとき、ＡＮＤゲート２３５，２３６の各出力はともにオフになる。ＡＮＤゲート２３７からの出力信号は、ＯＲゲート２４２を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬとしてリザベーションステーション２２３に出力される。ＡＮＤゲート２３７の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令をリザベーションステーション２２３にキューイングする。
【０１１０】
以上の図１２の回路により、命令レジスタ２０１からの演算実行命令により加算などの可換演算の実行が命令された場合において、図１１に示した処理が実行される。なお、図示しないが、デコーダ２１１には、可換演算以外の演算の実行命令が入力された場合に、演算実行命令のキューイング先を選択する選択回路も別途設けられる。選択回路は、実行が要求される演算の種類に応じてさらに複数設けられる場合もある。各選択回路からは、リザベーションステーション２２１を選択する場合にオンになる選択信号が、ＯＲゲート２４０に入力される。また、各選択回路からは、リザベーションステーション２２２を選択する場合にオンになる選択信号が、ＯＲゲート２４１に入力される。さらに、各選択回路からは、リザベーションステーション２２３を選択する場合にオンになる選択信号が、ＯＲゲート２４２に入力される。
【０１１１】
以上説明した第２の実施の形態では、レジスタファイル３００から演算器への読み出しパスが増大することを抑制しつつ、演算器の設置数を多くすることができる。そして、演算実行命令における第１ソースオペランドと第２ソースオペランドの組合せパターンに応じて、演算を実行させる演算器を振り分けることにより、複数設けた演算器を効率よく使用し、演算の並列度を高めることができる。
【０１１２】
なお、以上説明した第２の実施の形態では、汎用演算器１１０，１２０，１３０，１４０を設けた構成とした。しかしながら、例えば汎用プロセッサの場合、演算実行命令の両方のソースオペランドに、実体を伴うレジスタの番号が指定されないというケースはほとんど存在しない。このことから、入力ポートＩＮ１，ＩＮ２のいずれにも即値が入力される汎用演算器１４０を設けないようにしてもよい。この場合、図９に示したリザベーションステーション２２３も不要となる。汎用演算器１４０が設けられないようにした場合、デコーダは、ソースオペランドの組合せパターンが、上記のグループＣ１に属するパターン４またはパターン６であるときには、演算実行命令のキューイング先としてリザベーションステーション２２２を選択すればよい。
【０１１３】
〔第３の実施の形態〕
第３の実施の形態に係る演算処理装置では、第２の実施の形態におけるデコーダ２１１〜２１４による演算器の選択処理を、次のように変形する。前述した、第１ソースオペランドと第２ソースオペランドの組合せパターンのうち、２つのソースオペランドの両方において実体を伴うレジスタが指定されるのは、パターン１のみである。また、２つのソースオペランドのうち一方にのみ実体を伴うレジスタが指定されるのは、パターン２，３，５である。そこで、第３の実施の形態における各デコーダ２１１〜２１４は、２つのソースオペランドにおいて実体を伴うレジスタが指定される数に応じて、上記の組合せパターンを次の３種類のグループに分類する。そして、各デコーダ２１１〜２１４は、各グループに対応する演算器に対して演算実行命令を発行するように制御する。
【０１１４】
グループＡ２：パターン１（ｒｓ１，ｒｓ２）
グループＢ２：パターン２（ｒｓ１，ｇ０）、パターン３（ｇ０，ｒｓ２）、パターン５（ｒｓ１，ｓｉｍｍ１３）
グループＣ２：パターン４（ｇ０，ｇ０）、パターン６（ｇ０，ｓｉｍｍ１３）
また、上記のグループＢ２では、２つのソースオペランドのうち一方にのみ実体を伴うレジスタが指定されるが、実体を伴うレジスタを第１ソースオペランドまたは第２ソースオペランドのどちらにも指定できるようにする。このような分類を可能にするために、デコーダおよび汎用演算器１２０，１３０に、第１ソースオペランドと第２ソースオペランドとを転置する機能を設ける。
【０１１５】
図１３は、第３の実施の形態で使用される汎用演算器における入出力信号の例を示す図である。なお、図１３では、図４に対応する構成要素については同じ符号を付して示している。
【０１１６】
第３の実施の形態に係る演算処理装置では、入力ポートＩＮ１，ＩＮ２のうち一方にのみレジスタ値を入力可能な汎用演算器１２０，１３０の入力段に、オペランドを転置するセレクタを設ける。図１３では例として、汎用演算器１２０における入出力信号の例を示す。汎用演算器１２０の入力ポートＩＮ１，ＩＮ２のそれぞれの入力段には、セレクタ１１３，１１４がそれぞれ設けられる。
【０１１７】
セレクタ１１３，１１４のそれぞれは、２つの入力ポートを備える。セレクタ１１３の一方の入力ポートには、レジスタファイル３００からのレジスタ値と命令制御部２００からの即値とが、ＭＵＸ１１１を介して選択的に入力される。また、セレクタ１１４の一方の入力ポートにも同様に、レジスタファイル３００からのレジスタ値と命令制御部２００からの即値とが、ＭＵＸ１１１を介して選択的に入力される。一方、セレクタ１１３の他方の入力ポート、およびセレクタ１１４の他方の入力ポートには、命令制御部２００からの即値が入力される。
【０１１８】
命令制御部２００からは、セレクタ１１３，１１４に対して転置指示信号が出力される。セレクタ１１３には、命令制御部２００からの転置指示信号がそのまま入力され、セレクタ１１４には、命令制御部２００からの転置指示信号を反転した信号が入力される。例えば、転置指示信号がオフである場合、セレクタ１１３は一方の入力ポートへの入力信号を選択し、セレクタ１１４は他方の入力ポートへの入力信号を選択する。この場合、第２の実施の形態の場合と同様に、汎用演算器１２０の入力ポートＩＮ１には、レジスタ値および即値のどちらも入力可能であり、汎用演算器１２０の入力ポートＩＮ２には、即値のみが入力される。
【０１１９】
一方、転置指示信号がオンである場合、セレクタ１１３は他方の入力ポートへの入力信号を選択し、セレクタ１１４は一方の入力ポートへの入力信号を選択する。この場合、汎用演算器１２０の入力ポートＩＮ１には、即値のみが入力され、汎用演算器１２０の入力ポートＩＮ２には、レジスタ値および即値のどちらも入力可能となる。すなわち、転置指示信号がオンになると、演算実行命令における第１ソースオペランドで指定されたデータと第２ソースオペランドで指定されたデータとが、転置されて汎用演算器１２０に入力される。
【０１２０】
なお、図示しないが、汎用演算器１３０の入力ポートＩＮ１，ＩＮ２に入力される信号の組合せも、図１３に示した汎用演算器１２０と同様になっている。
図１４は、第３の実施の形態におけるデコーダおよびリザベーションステーションの構成例と、伝送される信号の例について示す図である。なお、この図１４では、図９に対応する構成要素には同じ符号を付して示している。
【０１２１】
本実施の形態では、汎用演算器１１０に対応するリザベーションステーション２２１と、汎用演算器１４０に対応するリザベーションステーション２２３については、第２の実施の形態と同様の構成となっている。一方、本実施の形態では、汎用演算器１２０，１３０に対応するリザベーションステーション２２２は、デコーダ２１１〜２１４のそれぞれから出力された演算実行命令を保持する演算キュー２５２を備えるが、この演算キュー２５２には、演算実行命令にそれぞれ対応付けて転置フラグ２５２ａも保持される。転置フラグ２５２ａは、対応付けられた演算実行命令に応じた演算を汎用演算器１２０，１３０のいずれかに実行させる際に、オペランドの転置を行うか否かを示すフラグである。
【０１２２】
本実施の形態のデコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ２＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ２＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＣ２＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１，ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２を出力する。また、本実施の形態のデコーダ２１１は、命令レジスタ２０１からの演算実行命令の第１ソースオペランドと第２ソースオペランドとを転置することが可能な転置回路２５１をさらに備える。転置回路２５１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１がオンであるとき、演算実行命令の第１ソースオペランドと第２ソースオペランドとを転置して、リザベーションステーション２２２にキューイングする。
【０１２３】
選択信号ＩＷＲ１＿ＧｒｏｕｐＡ２＿ＳＥＬは、リザベーションステーション２２１に出力される。デコーダ２１１は、演算実行命令の第１ソースオペランドと第２ソースオペランドとの組合せパターンが前述のグループＡ２に属するパターンである場合に、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ２＿ＳＥＬをオンにする。このとき、デコーダ２１１は、リザベーションステーション２２１に対して演算実行命令をキューイングする。
【０１２４】
選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１，ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２は、リザベーションステーション２２２に出力される。デコーダ２１１は、演算実行命令の第１ソースオペランドと第２ソースオペランドとの組合せパターンが前述のグループＢ２に属するパターンである場合に、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１，ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２のいずれかをオンにする。
【０１２５】
デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとの組合せパターンがパターン２またはパターン５である場合には、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿ＳＥＬをオンにする。このとき、デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとを転置回路２５１で転置させることなく、演算実行命令をリザベーションステーション２２２にキューイングする。
【０１２６】
また、デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとの組合せパターンがパターン３であり、かつ、演算実行命令が可換演算の実行命令である場合には、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１をオンにする。このとき、デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとを転置回路２５１で転置させた状態で、演算実行命令をリザベーションステーション２２２にキューイングする。
【０１２７】
また、デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとの組合せパターンがパターン３であり、かつ、演算実行命令が非可換演算の実行命令である場合には、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２をオンにする。このとき、デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとを転置回路２５１で転置させることなく、演算実行命令をリザベーションステーション２２２にキューイングする。また、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２がオンになった場合、リザベーションステーション２２２は、演算キュー２５２に登録された演算実行命令に対応する転置フラグ２５２ａをオンとする。
【０１２８】
ここで、リザベーションステーション２２２は、第２の実施の形態の場合と同様に、演算キュー２５２に登録された演算実行命令のうち、演算リソースの準備が整った演算実行命令から順に、汎用演算器１２０，１３０のいずれかに発行する。ただし、リザベーションステーション２２２は、演算キュー２５２に登録された演算実行命令を発行する際、発行する演算実行命令に対応付けられた転置フラグ２５２ａがオンである場合には、発行先の汎用演算器に対応するセレクタ１１３，１１４に出力する転置指示信号をオンにする。これにより、演算実行命令の発行先の汎用演算器においては、入力ポートＩＮ１，ＩＮ２にそれぞれ入力されるオペランドが、セレクタ１１３，１１４によって入れ替えられる。一方、リザベーションステーション２２２は、発行する演算実行命令に対応付けられた転置フラグ２５２ａがオフである場合には、発行先の汎用演算器に対応するセレクタ１１３，１１４に出力する転置指示信号をオフにする。
【０１２９】
選択信号ＩＷＲ１＿ＧｒｏｕｐＣ２＿ＳＥＬは、リザベーションステーション２２３に出力される。デコーダ２１１は、演算実行命令の第１ソースオペランドと第２ソースオペランドとの組合せパターンが前述のグループＣ２に属するパターンである場合に、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ２＿ＳＥＬをオンにする。このとき、デコーダ２１１は、リザベーションステーション２２３に対して演算実行命令をキューイングする。
【０１３０】
なお、以上の図１４ではデコーダ２１１について説明したが、デコーダ２１２〜２１４のそれぞれも、デコーダ２１１と同様の構成を有する。また、上記の図１４では、汎用演算器に対応するリザベーションステーションについて説明したが、アドレス演算器に対応するリザベーションステーション（ＲＳＡ）とデコーダ２１１〜２１４との間でも、図１４と同様の動作が行われればよい。
【０１３１】
図１５は、第３の実施の形態におけるデコーダの処理を示すフローチャートである。この図１５の処理は、デコードした演算実行命令が汎用演算器によって実行可能な演算の実行を要求するものであると判定した場合に、デコーダ２１１によって実行されるものである。
【０１３２】
［ステップＳ２１］デコーダ２１１は、演算実行命令における第２ソースオペランドに、実体を伴うレジスタの番号「ｒｓ２」が指定されているかを判定する。デコーダ２１１は、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されている場合（Ｓ２１：Ｙｅｓ）には、ステップＳ２２の処理を実行する。一方、デコーダ２１１は、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されていない場合（Ｓ２１：Ｎｏ）には、ステップＳ２４の処理を実行する。
【０１３３】
［ステップＳ２２］デコーダ２１１は、演算実行命令における第１ソースオペランドに、実体を伴うレジスタの番号「ｒｓ１」が指定されているかを判定する。デコーダ２１１は、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されている場合（Ｓ２２：Ｙｅｓ）には、ステップＳ２３の処理を実行する。一方、デコーダ２１１は、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されていない場合（Ｓ２２：Ｎｏ）には、ステップＳ２６の処理を実行する。
【０１３４】
［ステップＳ２３］第１ソースオペランドと第２のソースオペランドの両方に実体を伴うレジスタの番号が指定されている場合（Ｓ２１：Ｙｅｓ，Ｓ２２：Ｙｅｓ）、各ソースオペランドの組合せパターンは、上記のグループＡ２に属するパターン１となる。この場合、デコーダ２１１は、入力ポートＩＮ１，ＩＮ２の両方にレジスタ値を入力可能な汎用演算器１１０で演算するように制御する。すなわち、デコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ２＿ＳＥＬをオンにして、デコードした演算実行命令を、汎用演算器１１０に対応するリザベーションステーション２２１にキューイングする。
【０１３５】
［ステップＳ２４］デコーダ２１１は、演算実行命令における第１ソースオペランドに、実体を伴うレジスタの番号「ｒｓ１」が指定されているかを判定する。デコーダ２１１は、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されている場合（Ｓ２４：Ｙｅｓ）には、ステップＳ２９の処理を実行する。一方、デコーダ２１１は、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されていない場合（Ｓ２４：Ｎｏ）には、ステップＳ２５の処理を実行する。
【０１３６】
［ステップＳ２５］第１ソースオペランドおよび第２ソースオペランドの両方に実体を伴うレジスタの番号が指定されていない場合（Ｓ２１：Ｎｏ，Ｓ２４：Ｎｏ）、各ソースオペランドの組合せパターンは、上記のグループＣ２に属するパターン４またはパターン６となる。この場合、デコーダ２１１は、入力ポートＩＮ１，ＩＮ２の両方とも命令制御部２００からの即値のみが入力される汎用演算器１４０で演算するように制御する。すなわち、デコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ２＿ＳＥＬをオンにして、デコードした演算実行命令を、汎用演算器１４０に対応するリザベーションステーション２２３にキューイングする。
【０１３７】
［ステップＳ２６］デコーダ２１１は、演算実行命令の第１９ビットから第２４ビットまでのコード値「ｏｐ３」に基づき、実行を要求された演算が可換演算であるかを判定する。実行を要求された演算が可換演算である場合（Ｓ２６：Ｙｅｓ）、デコーダ２１１は、ステップＳ２７の処理を実行する。一方、実行を要求された演算が非可換演算である場合（Ｓ２６：Ｎｏ）、デコーダ２１１は、ステップＳ２８の処理を実行する。
【０１３８】
［ステップＳ２７］第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されており（Ｓ２１：Ｙｅｓ）、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されていない場合（Ｓ２２：Ｎｏ）、第１ソースオペランドと第２ソースオペランドの組合せパターンは、上記のグループＢ２に属するパターン３となる。ここで、実行を要求された演算が可換演算である場合（Ｓ２６：Ｙｅｓ）には、演算実行命令における各ソースオペランドを入れ替えて処理を続行することが可能である。この場合、デコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１をオンにして、転置回路２５１に、第１ソースオペランドと第２ソースオペランドとを転置させる。
【０１３９】
［ステップＳ２８］第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されており（Ｓ２１：Ｙｅｓ）、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されていない場合（Ｓ２２：Ｎｏ）、第１ソースオペランドと第２ソースオペランドの組合せパターンは、上記のグループＢ２に属するパターン３となる。ただし、実行を要求された演算が非可換命令である場合（Ｓ２６：Ｎｏ）には、リザベーションステーションにキューイングする段階では第１ソースオペランドと第２ソースオペランドとを入れ替えることはできない。この場合、デコーダ２１１は、リザベーションステーション２２２への演算実行命令のキューイング時に、キューイングした演算実行命令に対応する転置フラグ２５２ａをオンにするように制御する。具体的には、デコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２をオンにする。
【０１４０】
［ステップＳ２９］デコーダ２１１は、入力ポートＩＮ２に命令制御部２００からの即値のみが入力されるが、入力ポートＩＮ１にレジスタ値を入力可能な汎用演算器１２０または汎用演算器１３０で演算するように制御する。
【０１４１】
ここで、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されておらず（Ｓ２１：Ｎｏ）、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されている場合（Ｓ２４：Ｙｅｓ）、第１ソースオペランドと第２ソースオペランドの組合せパターンは、上記のグループＢ２に属するパターン２またはパターン５となる。この場合、デコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿ＳＥＬをオンにして、デコードした演算実行命令を、各ソースオペランドを転置することなく、汎用演算器１２０，１３０に対応するリザベーションステーション２２２にキューイングする。このとき、演算実行命令に対応付けて登録される転置フラグ２５２ａはオフになる。
【０１４２】
また、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されており（Ｓ２１：Ｙｅｓ）、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されておらず（Ｓ２２：Ｎｏ）、実行を要求された演算が可換演算である場合（Ｓ２６：Ｙｅｓ）には、ステップＳ２７の処理により、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１がオンになる。この場合、ステップＳ２９では、デコーダ２１１は、デコードした演算実行命令をリザベーションステーション２２２にキューイングするが、演算キュー２５２に登録された演算実行命令は、転置回路２５１によって元の第１ソースオペランドと第２ソースオペランドとが入れ替えられた状態となる。また、このとき、演算実行命令に対応付けて登録される転置フラグ２５２ａはオフになる。
【０１４３】
また、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されており（Ｓ２１：Ｙｅｓ）、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されておらず（Ｓ２２：Ｎｏ）、実行を要求された演算が可換演算でない場合（Ｓ２６：Ｎｏ）には、ステップＳ２８の処理により、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２がオンになる。この場合、ステップＳ２９では、デコーダ２１１は、デコードした演算実行命令を、各ソースオペランドを転置することなく、リザベーションステーション２２２にキューイングする。このとき、演算実行命令に対応付けて登録される転置フラグ２５２ａはオンになる。
【０１４４】
図１６は、第３の実施の形態におけるデコーダの回路構成例を示す図である。
なお、この図１６では、図１２に対応する構成要素には同じ符号を付して示す。また、図１６では、可換演算、非可換演算のそれぞれの例として加算（ＡＤＤ）、減算（ＳＵＢ）を挙げ、主として加算命令および減算命令に関する回路構成を示して、その他の構成の図示を省略する。さらに、図１６は、例としてデコーダ２１１の回路構成例を示すが、デコーダ２１２〜２１４のそれぞれも同じ構成の回路を有する。
【０１４５】
図１６に示すように、第３の実施の形態におけるデコーダ２１１は、ＡＮＤゲート２３１〜２３３，２６１〜２６９、ＯＲゲート２３８，２３９，２７０〜２７６およびバッファ２４３を備える。
【０１４６】
図１２で説明したように、ＡＮＤゲート２３１，２３２は、加算命令の入力を判定するゲート回路である。入力された演算実行命令によって加算命令の実行が指定されたとき、ＡＮＤゲート２３１，２３２の各出力はオンになる。ＡＮＤゲート２３２の出力信号は、ＯＲゲート２３８に入力される。ＯＲゲート２３８の他の入力には、他の可換演算命令が指定されたことを判定する判定回路からの出力信号が入力される。従って、ＯＲゲート２３８は、演算実行命令により可換演算の実行が指定された場合に、出力をオンにする。
【０１４７】
また、図１２で説明したように、ＡＮＤゲート２３３は、命令レジスタ２０１からの演算実行命令の第１ソースオペランドに、実体を伴うレジスタの番号「ｒｓ１」が指定されているかを判定するゲート回路である。ＡＮＤゲート２３３は、演算実行命令の第１ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定されていた場合に、出力をオンにする。一方、ＡＮＤゲート２３３は、演算実行命令の第１ソースオペランドに実体を伴うレジスタの番号「ｒｓ１」が指定されている場合に、出力をオフにする。
【０１４８】
また、図１２で説明したように、ＡＮＤゲート２３４、ＯＲゲート２３９およびバッファ２４３は、命令レジスタ２０１からの演算実行命令の第２ソースオペランドに、実体を伴うレジスタの番号「ｒｓ２」が指定されているかを判定する回路である。ＡＮＤゲート２３４は、演算実行命令の第２ソースオペランドに即値「ｓｉｍｍ１３」が指定されている場合に、出力をオフにする。この場合には、バッファ２４３の出力がオンになることから、ＯＲゲート２３９の出力もオンになる。また、ＡＮＤゲート２３４は、演算実行命令の第２ソースオペランドに実体を伴うレジスタの番号「ｒｓ２」が指定されている場合に、出力をオフにする。この場合、バッファ２４３の出力もオフになり、ＯＲゲート２３９の出力もオフになる。また、ＡＮＤゲート２３４は、演算実行命令の第２ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定されている場合には、出力をオンにする。この場合、ＯＲゲート２３９の出力もオンになる。
【０１４９】
ＡＮＤゲート２６１は、ＡＮＤゲート２３１と協働することで減算命令の入力を判定する。減算命令が指定される場合、演算実行命令のコード「ｏｐ３」は、下位４ビットが「０ｘ０２」、残りの２ビットがともに「０」とされる。ＡＮＤゲート２６１には、命令レジスタ２０１からの演算実行命令のうちの第１９ビットから第２４ビットまでのコード「ｏｐ３」が入力されるが、これらのビットのうち、第２１ビットの値はＡＮＤゲート２６１にそのまま入力され、それ以外のビットの値は反転してＡＮＤゲート２６１に入力される。演算実行命令によって減算命令の実行が指定されたとき、ＡＮＤゲート２３１，２６１の各出力はともにオンになる。
【０１５０】
ＡＮＤゲート２６１の出力信号は、ＯＲゲート２７０に入力される。また、ＯＲゲート２７０の他の入力には、他の非可換演算命令が指定されたことを判定する判定回路からの出力信号が入力される。他の非可換演算命令とは、例えば除算命令である。除算命令が指定されたことを判定する判定回路は、演算実行命令における第１９ビットから第２４ビットまでのコード「ｏｐ３」のうち、下位４ビットが「０ｘ０ｄ」であり、残りの２ビットがともに「０」である場合に、出力をオンにする。ＯＲゲート２７０は、演算実行命令により非可換演算の実行が指定された場合に、出力をオンにする。
【０１５１】
ＡＮＤゲート２６２は、命令レジスタ２０１からの演算実行命令の第１ソースオペランドに、実体を伴うレジスタの番号「ｒｓ１」が指定されているかを判定するゲート回路である。ＡＮＤゲート２６２は、演算実行命令の第１ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定されていた場合に、出力をオンにする。一方、ＡＮＤゲート２６２は、演算実行命令の第１ソースオペランドに実体を伴うレジスタの番号「ｒｓ１」が指定されている場合に、出力をオフにする。なお、ＡＮＤゲート２６２の機能は、ＡＮＤゲート２３３によって代用することもできる。
【０１５２】
ＡＮＤゲート２６３，２６４は、命令レジスタ２０１からの演算実行命令の第２ソースオペランドに、実体を伴うレジスタの番号「ｒｓ２」が指定されているかを判定する回路である。ＡＮＤゲート２６３には、演算実行命令の第０ビットから第４ビットまでの値が入力される。第０ビットから第４ビットまでのすべての値が「０」の場合（例えば、第２ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定されている場合）、ＡＮＤゲート２６３の出力はオンになり、その他の場合にはＡＮＤゲート２６３の出力はオフになる。
【０１５３】
ＡＮＤゲート２６４には、ＡＮＤゲート２６３からの出力を反転した信号と、演算実行命令の第１３ビットの値を反転した信号とが入力される。演算実行命令の第１３ビットの値が「１」である場合、すなわち、第２ソースオペランドに即値「ｓｉｍｍ１３」が指定されている場合には、ＡＮＤゲート２６４の出力はオフになる。また、演算実行命令の第１３ビットの値が「０」であり、かつ、第０ビットから第４ビットまでがすべて「０」の場合、すなわち、第２ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定されている場合にも、ＡＮＤゲート２６４の出力はオフになる。従って、第２ソースオペランドに実体を伴うレジスタの番号「ｒｓ２」が指定されている場合に、ＡＮＤゲート２６４の出力はオンになる。
【０１５４】
ＯＲゲート２７１には、ＯＲゲート２３８，２７０からの各出力信号が入力される。前述のように、ＯＲゲート２３８は、演算実行命令により可換演算の実行が指定された場合に出力をオンにし、ＯＲゲート２７０は、演算実行命令により非可換演算の実行が指定された場合に出力をオンにする。従って、ＯＲゲート２７１は、演算実行命令により可換演算または非可換演算の実行が指定されたとき、出力をオンにする。
【０１５５】
ＡＮＤゲート２６５〜２６９は、演算実行命令をリザベーションステーション２２１〜２２３のいずれにキューイングすべきかを判定する回路である。ＡＮＤゲート２６５には、ＡＮＤゲート２３１，２６４およびＯＲゲート２７１からの各出力信号と、ＡＮＤゲート２３３およびＯＲゲート２３９からの各出力信号を反転した信号とが入力される。ＡＮＤゲート２６６には、ＡＮＤゲート２３１およびＯＲゲート２３９，２７１からの各出力信号と、ＡＮＤゲート２３３からの出力信号を反転した信号とが入力される。ＡＮＤゲート２６７には、ＡＮＤゲート２３１，２３３およびＯＲゲート２３９，２７１からの各出力信号が入力される。ＡＮＤゲート２６８には、ＡＮＤゲート２３１，２６２，２６４およびＯＲゲート２３８からの各出力信号が入力される。ＡＮＤゲート２６９には、ＡＮＤゲート２３１，２６２，２６４およびＯＲゲート２７０からの各出力信号が入力される。
【０１５６】
ここで、演算実行命令により可換演算または非可換演算のいずれかの実行が指定された場合、ＡＮＤゲート２３１およびＯＲゲート２７１の各出力はともにオンになる。この場合、ＡＮＤゲート２６５〜２６９は、次のように動作する。
【０１５７】
第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＡ２に属するパターン１となる場合、ＡＮＤゲート２３３およびＯＲゲート２３９の各出力がともにオフになり、ＡＮＤゲート２６４の出力がオンになる。このとき、ＡＮＤゲート２６５の出力がオンになる。ＡＮＤゲート２６５からの出力信号は、ＯＲゲート２７２を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ２＿ＳＥＬとしてリザベーションステーション２２１に出力される。ＡＮＤゲート２６５の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ２＿ＳＥＬがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令をリザベーションステーション２２１にキューイングする。
【０１５８】
第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＢ２に属するパターン２またはパターン５になるとき、ＯＲゲート２３９の出力がオンになり、ＡＮＤゲート２３３の出力がオフになる。このとき、ＡＮＤゲート２６６の出力がオンになる。ＡＮＤゲート２６６からの出力信号は、ＯＲゲート２７３を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿ＳＥＬとしてリザベーションステーション２２２に出力される。ＡＮＤゲート２６６の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿ＳＥＬがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令を、ソースオペランドを転置しないままでリザベーションステーション２２２にキューイングする。
【０１５９】
第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＣ２に属するパターン４またはパターン６となる場合には、ＯＲゲート２３９およびＡＮＤゲート２３３の各出力がともにオンになり、ＡＮＤゲート２６７の出力がオンになる。ＡＮＤゲート２６７からの出力信号は、ＯＲゲート２７４を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ２＿ＳＥＬとしてリザベーションステーション２２３に出力される。ＡＮＤゲート２６７の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ２＿ＳＥＬがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令をリザベーションステーション２２３にキューイングする。
【０１６０】
次に、第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＢ２に属するパターン３になる場合には、ともにＡＮＤゲート２６８，２６９に入力されるＡＮＤゲート２６２，２６４の各出力は、ともにオンになる。この場合、実行を要求された演算が可換演算か非可換演算かによって、次のような動作が行われる。
【０１６１】
実行を要求された演算が可換演算である場合、ＯＲゲート２３８の出力がオンになり、ＯＲゲート２７０の出力がオフになる。このとき、ＡＮＤゲート２６８の出力がオンになり、ＡＮＤゲート２６９の出力はオフになる。ＡＮＤゲート２６８からの出力信号は、ＯＲゲート２７５を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１として、デコーダ２１１内の転置回路２５１とリザベーションステーション２２２とに出力される。ＡＮＤゲート２６８の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１がオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令を、転置回路２５１によってソースオペランドを転置させた状態で、リザベーションステーション２２２にキューイングする。
【０１６２】
一方、実行を要求された演算が非可換演算である場合、ＯＲゲート２３８の出力がオフになり、ＯＲゲート２７０の出力がオンになる。このとき、ＡＮＤゲート２６９の出力がオンになり、ＡＮＤゲート２６８の出力はオフになる。ＡＮＤゲート２６９からの出力信号は、ＯＲゲート２７６を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２としてリザベーションステーション２２２に出力される。ＡＮＤゲート２６９の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２がオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令を、ソースオペランドを転置しないままで、リザベーションステーション２２２にキューイングする。リザベーションステーション２２２は、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２がオンになったとき、演算キュー２５２に登録された演算実行命令に対応付けられた転置フラグ２５２ａをオンにする。
【０１６３】
以上の図１６の回路により、命令レジスタ２０１からの演算実行命令により加算などの可換演算の実行が命令された場合において、図１５に示した処理が実行される。なお、図示しないが、本実施の形態のデコーダ２１１には、可換演算命令および非可換演算命令以外の演算実行命令が入力された場合に、演算実行命令のキューイング先を選択する選択回路も別途設けられる。選択回路は、実行が要求される処理の種類に応じてさらに複数設けられる場合もある。各選択回路には、演算実行命令のキューイング先ごとに選択するか否かを判定する、図１６のＡＮＤゲート２６５〜２６９に相当する判定回路が設けられ、各判定回路からの出力が、ＯＲゲート２７２〜２７６に入力される。
【０１６４】
以上説明した第３の実施の形態では、演算実行命令のソースオペランドの一方において実体を伴うレジスタが指定された場合に、ソースオペランドを転置することを可能にした。これにより、第２の実施の形態と比較して、入力ポートＩＮ１のみにレジスタ値を入力可能な演算器がより積極的に使用されるようになる。このため、例えば、入力ポートＩＮ１，ＩＮ２の両方にレジスタ値を入力可能な演算器に対して演算要求が集中することが少なくなり、その結果、全体の演算効率が向上する。また、入力ポートＩＮ１のみにレジスタ値を入力可能な演算器の数を多くするほど、演算効率を向上させることができる。
【０１６５】
〔第４の実施の形態〕
上記の第３の実施の形態では、演算実行命令のソースオペランドの一方において実体を伴うレジスタが指定された場合に、実行を要求された演算が可換演算または非可換演算のいずれであっても、入力ポートＩＮ１のみにレジスタ値を入力可能な演算器に演算を実行させた。これに対して、以下の第４の実施の形態では、演算実行命令のソースオペランドの一方において実体を伴うレジスタが指定された場合には、実行を要求された演算が可換演算である場合のみ、入力ポートＩＮ１のみにレジスタ値を入力可能な演算器に演算を実行させる。
【０１６６】
ここで、前述した第１ソースオペランドと第２ソースオペランドの組合せパターンのうち、パターン３を、可換演算の実行が要求された場合のパターン３−１と、非可換演算の実行が要求された場合のパターン３−２とにさらに分類する。第４の実施の形態における各デコーダ２１１〜２１４は、上記の組合せパターンを次の３種類のグループに分類し、各グループに対応する演算器に対して演算実行命令を発行するように制御する。
【０１６７】
グループＡ３：パターン１（ｒｓ１，ｒｓ２）、パターン３−２（ｇ０，ｒｓ２：非可換演算）
グループＢ３：パターン２（ｒｓ１，ｇ０）、パターン３−１（ｇ０，ｒｓ２：可換演算）、パターン５（ｒｓ１，ｓｉｍｍ１３）
グループＣ３：パターン４（ｇ０，ｇ０）、パターン６（ｇ０，ｓｉｍｍ１３）
本実施の形態では、汎用演算器およびアドレス演算器に入力される信号（レジスタ値または即値）の組合せは、第２の実施の形態と同様になっている。すなわち、汎用演算器１２０，１３０では、入力ポートＩＮ１にはレジスタ値と即値のいずれも入力可能である一方、入力ポートＩＮ２には即値のみが入力される。
【０１６８】
図１７は、第４の実施の形態におけるデコーダおよびリザベーションステーションの構成例と、伝送される信号の例について示す図である。なお、この図１７は、図１４に対応する構成要素には同じ符号を付して示している。
【０１６９】
本実施の形態のリザベーションステーション２２１〜２２３の構成は、第２の実施の形態と同様である。これらのうち、汎用演算器１２０，１３０に対応するリザベーションステーション２２２は、内部の演算キューに演算実行命令のみ保持し、第３の実施の形態で使用された転置フラグを保持しない。
【０１７０】
本実施の形態のデコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ３＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ３＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＣ３＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐを出力する。また、本実施の形態のデコーダ２１１は、第３の実施の形態と同様に、演算実行命令の第１ソースオペランドと第２ソースオペランドとを転置することが可能な転置回路２５１を備える。転置回路２５１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐがオンのとき、第１ソースオペランドと第２ソースオペランドとを転置させて、リザベーションステーション２２２に出力する。
【０１７１】
選択信号ＩＷＲ１＿ＧｒｏｕｐＡ３＿ＳＥＬは、リザベーションステーション２２１に出力される。デコーダ２１１は、演算実行命令の第１ソースオペランドと第２ソースオペランドとの組合せパターンが前述のグループＡ３に属するパターンである場合に、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ３＿ＳＥＬをオンにする。このとき、デコーダ２１１は、リザベーションステーション２２１に対して演算実行命令をキューイングする。
【０１７２】
選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐは、リザベーションステーション２２２に出力される。デコーダ２１１は、演算実行命令の第１ソースオペランドと第２ソースオペランドとの組合せパターンが前述のグループＢ３に属するパターンである場合に、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐのいずれかをオンにする。
【０１７３】
デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとの組合せパターンがパターン２またはパターン５である場合には、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿ＳＥＬをオンにする。このとき、デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとを転置回路２５１で転置させることなく、演算実行命令をリザベーションステーション２２２にキューイングする。
【０１７４】
また、デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとの組合せパターンがパターン３−１である場合には、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐをオンにする。このとき、デコーダ２１１は、第１ソースオペランドと第２ソースオペランドとを転置回路２５１で転置させた状態で、演算実行命令をリザベーションステーション２２２にキューイングする。
【０１７５】
また、デコーダ２１１は、第１ソースオペランドと第２ソースオペランドの組合せパターンが前述のグループＣ３に属するパターン４またはパターン６である場合には、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ３＿ＳＥＬをオンにする。このとき、デコーダ２１１は、リザベーションステーション２２３に対して演算実行命令をキューイングする。
【０１７６】
なお、以上の図１７ではデコーダ２１１について説明したが、デコーダ２１２〜２１４のそれぞれも、デコーダ２１１と同様の構成を有する。また、上記の図１７では、汎用演算器に対応するリザベーションステーションについて説明したが、アドレス演算器に対応するリザベーションステーション（ＲＳＡ）とデコーダ２１１〜２１４との間でも、図１７と同様の動作が行われればよい。
【０１７７】
図１８は、第４の実施の形態におけるデコーダの処理を示すフローチャートである。この図１８の処理は、デコードした演算実行命令が汎用演算器によって実行可能な演算の実行を要求するものであると判定した場合に、デコーダ２１１によって実行されるものである。
【０１７８】
［ステップＳ４１〜Ｓ４４］ステップＳ４１，Ｓ４２，Ｓ４３，Ｓ４４の判定処理は、それぞれ図１５のステップＳ２１，Ｓ２２，Ｓ２６，Ｓ２４の判定処理と同様であるので、ここでは説明を省略する。
【０１７９】
［ステップＳ４５］第１ソースオペランドと第２ソースオペランドの両方に実体を伴うレジスタの番号が指定されている場合（Ｓ４１：Ｙｅｓ，Ｓ４２：Ｙｅｓ）、各ソースオペランドの組合せパターンは、上記のグループＡ３に属するパターン１となる。また、第２ソースオペランドには実体を伴うレジスタの番号「ｒｓ２」が指定されている（Ｓ４１：Ｙｅｓ）が、第１ソースオペランドには実体を伴うレジスタの番号「ｒｓ１」が指定されておらず（Ｓ４２：Ｎｏ）、かつ、実行を要求された演算が非可換演算である（Ｓ４３：Ｎｏ）場合、各ソースオペランドの組合せパターンは、グループＡ３に属するパターン３−２となる。
【０１８０】
これらの場合、デコーダ２１１は、入力ポートＩＮ１，ＩＮ２の両方にレジスタ値を入力可能な汎用演算器１１０で演算するように制御する。すなわち、デコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ３＿ＳＥＬをオンにして、デコードした演算実行命令を、汎用演算器１１０に対応するリザベーションステーション２２１にキューイングする。
【０１８１】
［ステップＳ４６］第１ソースオペランドおよび第２ソースオペランドの両方に実体を伴うレジスタの番号が指定されていない場合（Ｓ４１：Ｎｏ，Ｓ４４：Ｎｏ）、各ソースオペランドの組合せパターンは、上記のグループＣ３に属するパターン４またはパターン６となる。この場合、デコーダ２１１は、入力ポートＩＮ１，ＩＮ２の両方とも命令制御部２００からの即値のみが入力される汎用演算器１４０で演算するように制御する。すなわち、デコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ３＿ＳＥＬをオンにして、デコードした演算実行命令を、汎用演算器１４０に対応するリザベーションステーション２２３にキューイングする。
【０１８２】
［ステップＳ４７］第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されており（Ｓ４１：Ｙｅｓ）、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されておらず（Ｓ４２：Ｎｏ）、かつ、実行を要求された演算が可換演算である（Ｓ４３：Ｙｅｓ）場合、各ソースオペランドの組合せパターンは、グループＢ３に属するパターン３−１となる。この場合、演算実行命令における各ソースオペランドを入れ替えて処理を続行することが可能であるので、デコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐをオンにして、転置回路２５１に、第１ソースオペランドと第２ソースオペランドとを転置させる。
【０１８３】
［ステップＳ４８］デコーダ２１１は、入力ポートＩＮ２に命令制御部２００からの即値のみが入力されるが、入力ポートＩＮ１にレジスタ値を入力可能な汎用演算器１２０または汎用演算器１３０で演算するように制御する。
【０１８４】
ここで、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されておらず（Ｓ４１：Ｎｏ）、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されている場合（Ｓ４４：Ｙｅｓ）、第１ソースオペランドと第２ソースオペランドの組合せパターンは、上記のグループＢ３に属するパターン２またはパターン５となる。この場合、デコーダ２１１は、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿ＳＥＬをオンにして、デコードした演算実行命令を、各ソースオペランドを転置することなく、汎用演算器１２０，１３０に対応するリザベーションステーション２２２にキューイングする。
【０１８５】
また、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されており（Ｓ４１：Ｙｅｓ）、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されておらず（Ｓ４２：Ｎｏ）、かつ、実行を要求された演算が可換演算である（Ｓ４３：Ｙｅｓ）場合には、ステップＳ４７の処理により、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐがオンになる。この場合、ステップＳ４８では、デコーダ２１１は、デコードした演算実行命令をリザベーションステーション２２２にキューイングするが、キューイングされる演算実行命令は、転置回路２５１によって元の第１ソースオペランドと第２ソースオペランドとが入れ替えられた状態となる。
【０１８６】
図１９は、第４の実施の形態におけるデコーダの回路構成例を示す図である。
なお、この図１９では、図１６に対応する構成要素には同じ符号を付して示す。また、図１９では、図１６と同様に、可換演算、非可換演算のそれぞれの例として加算（ＡＤＤ）、減算（ＳＵＢ）を挙げ、主として加算命令および減算命令に関する回路構成を示して、その他の構成の図示を省略する。さらに、図１９は、例としてデコーダ２１１の回路構成例を示すが、デコーダ２１２〜２１４のそれぞれも同じ構成の回路を有する。
【０１８７】
図１９に示すように、第４の実施の形態のデコーダ２１１は、ＡＮＤゲート２３１〜２３３，２６１〜２６４，２８１〜２８５、ＯＲゲート２３８，２３９，２７０，２７１，２８６〜２８９およびバッファ２４３を備える。これらの回路要素のうち、ＡＮＤゲート２３１〜２３３，２６１〜２６４、ＯＲゲート２３８，２３９，２７０，２７１およびバッファ２４３の接続関係および動作については、図１６と同様であるので、説明を省略する。
【０１８８】
ＡＮＤゲート２８１には、ＡＮＤゲート２３３およびＯＲゲート２３８からの各出力信号が入力される。また、ＡＮＤゲート２８１は、各入力信号の論理積をとった結果を反転させて出力する。ＡＮＤゲート２３３からの出力信号は、演算実行命令の第１ソースオペランドに定数を示すレジスタ番号「ｇ０」が指定された場合に、オンになる。また、ＯＲゲート２３８からの出力信号は、演算実行命令により可換演算の実行が要求された場合に、オンになる。従って、ＡＮＤゲート２８１からの出力信号は、可換演算／非可換演算に関係なく、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定された場合、または、非可換演算が要求され、なおかつ第１ソースオペランドにレジスタ番号「ｇ０」が指定された場合に、オンになる。
【０１８９】
ＡＮＤゲート２８２〜２８５は、演算実行命令をリザベーションステーション２２１〜２２３のいずれにキューイングすべきかを判定する回路である。ＡＮＤゲート２８２には、ＡＮＤゲート２３１，２８１およびＯＲゲート２７１からの各出力信号と、ＯＲゲート２３９からの各出力信号を反転した信号とが入力される。ＡＮＤゲート２８３には、ＡＮＤゲート２３１およびＯＲゲート２３９，２７１からの各出力信号と、ＡＮＤゲート２３３からの出力信号を反転した信号とが入力される。ＡＮＤゲート２８４には、ＡＮＤゲート２３１，２３３およびＯＲゲート２３９，２７１からの各出力信号が入力される。ＡＮＤゲート２８５には、ＡＮＤゲート２３１，２６２，２６４およびＯＲゲート２３８からの各出力信号が入力される。
【０１９０】
ここで、演算実行命令により可換演算または非可換演算のいずれかの実行が指定された場合、ＡＮＤゲート２３１およびＯＲゲート２７１の各出力はともにオンになる。この場合、ＡＮＤゲート２８２〜２８４は、次のように動作する。
【０１９１】
第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＡ３に属するパターン１となる場合、ＡＮＤゲート２８１の出力はオンになり、ＯＲゲート２３９の出力はオフになる。また、演算実行命令により非可換演算の実行が指定され、かつ、各ソースオペランドの組合せパターンがグループＡ３に属するパターン３−２となる場合にも、同様に、ＡＮＤゲート２８１の出力はオンになり、ＯＲゲート２３９の出力はオフになる。これらの場合、ＡＮＤゲート２８２の出力がオンになる。ＡＮＤゲート２８２からの出力信号は、ＯＲゲート２８６を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ３＿ＳＥＬとしてリザベーションステーション２２１に出力される。ＡＮＤゲート２８２の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＡ３＿ＳＥＬがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令をリザベーションステーション２２１にキューイングする。
【０１９２】
第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＢ３に属するパターン２またはパターン５になるとき、ＯＲゲート２３９の出力がオンになり、ＡＮＤゲート２３３の出力がオフになる。このとき、ＡＮＤゲート２８３の出力がオンになる。ＡＮＤゲート２８３からの出力信号は、ＯＲゲート２８７を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿ＳＥＬとしてリザベーションステーション２２２に出力される。ＡＮＤゲート２８３の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿ＳＥＬがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令を、ソースオペランドを転置しないままでリザベーションステーション２２２にキューイングする。
【０１９３】
第１ソースオペランドと第２ソースオペランドの組合せパターンが、上記のグループＣ３に属するパターン４またはパターン６となる場合には、ＯＲゲート２３９およびＡＮＤゲート２３３の各出力がともにオンになり、ＡＮＤゲート２８４の出力がオンになる。ＡＮＤゲート２８４からの出力信号は、ＯＲゲート２８８を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ３＿ＳＥＬとしてリザベーションステーション２２３に出力される。ＡＮＤゲート２８４の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ３＿ＳＥＬがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令をリザベーションステーション２２３にキューイングする。
【０１９４】
次に、演算実行命令により可換演算の実行が指定された場合、ＡＮＤゲート２３１およびＯＲゲート２３８の各出力がともにオンになる。この状態で、各ソースオペランドの組合せパターンが、グループＢ３に属するパターン３−１になるとき、ＡＮＤゲート２６２，２６４の各出力がともにオンになり、その結果、ＡＮＤゲート２８５の出力がオンになる。ＡＮＤゲート２８５からの出力信号は、ＯＲゲート２８９を介して、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐとして、デコーダ２１１内の転置回路２５１とリザベーションステーション２２２とに出力される。ＡＮＤゲート２８５の出力がオンになり、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐがオンになったとき、デコーダ２１１は、命令レジスタ２０１からの演算実行命令を、転置回路２５１によってソースオペランドを転置させた状態で、リザベーションステーション２２２にキューイングする。
【０１９５】
以上の図１９の回路により、命令レジスタ２０１からの演算実行命令により加算などの可換演算の実行が命令された場合において、図１８に示した処理が実行される。なお、図示しないが、本実施の形態のデコーダ２１１には、可換演算命令および非可換演算命令以外の演算実行命令が入力された場合に、演算実行命令のキューイング先を選択する選択回路も別途設けられる。選択回路は、実行が要求される処理の種類に応じてさらに複数設けられる場合もある。各選択回路には、演算実行命令のキューイング先ごとに選択するか否かを判定する、図１９のＡＮＤゲート２８２〜２８５に相当する判定回路が設けられ、各判定回路からの出力が、ＯＲゲート２８６〜２８９に入力される。
【０１９６】
以上説明した第４の実施の形態では、演算実行命令のソースオペランドの一方において実体を伴うレジスタが指定された場合に、可換演算の実行が要求された場合のみ、デコーダの内部でソースオペランドを転置することを可能にした。これにより、第２の実施の形態と比較して、入力ポートＩＮ１のみにレジスタ値を入力可能な演算器がより積極的に使用されるようになり、入力ポートＩＮ１，ＩＮ２の両方にレジスタ値を入力可能な演算器に対して演算要求が集中することが少なくなる。また、第３の実施の形態と比較した場合、演算器側にオペランドを転置する回路を設けたり、この回路を制御するためにリザベーションステーションの演算キューに転置フラグを登録する必要がなくなるので、全体の回路構成を単純化し、製造コストや回路面積を抑制することができる。
【０１９７】
〔第５の実施の形態〕
前述した第２〜第４の実施の形態では、ソースオペランドの組合せパターンに応じて、入力される信号が異なる３種類の演算器のうち１つのみを選択し、選択した演算器に演算を実行させていた。しかしながら、実際には、１つの組合せパターンについて、複数種類の演算器のいずれでも演算を実行させることが可能な場合がある。
【０１９８】
例えば、第２の実施の形態で分類したグループのうち、グループＢ１に属するパターン２，５については、汎用演算器１２０，１３０だけでなく、汎用演算器１１０を用いて演算することも可能である。また、グループＣ１に属するパターン４，６については、汎用演算器１４０だけでなく、汎用演算器１１０，１２０，１３０のいずれを用いて演算することも可能である。
【０１９９】
そこで、以下の第５の実施の形態に係る演算処理装置では、リザベーションステーションの演算キューの状態に応じて、演算を実行させる演算器を変更可能にする。
図２０は、第５の実施の形態における命令制御部の内部構成例と、伝送される信号の例を示す図である。なお、この図２０では、図９に対応する構成要素については同じ符号を付して示す。
【０２００】
第５の実施の形態における命令制御部２００は、命令レジスタ２０１〜２０４、デコーダ２１１〜２１４、リザベーションステーション２２１〜２２３およびディスパッチャ４００を備えている。
【０２０１】
以下の説明では、命令レジスタ２０１〜２０４、デコーダ２１１〜２１４およびリザベーションステーション２２１〜２２３の基本的な構成および処理は、例として第２の実施の形態と同じであるものとする。ただし、デコーダ２１１〜２１４のそれぞれから出力される選択信号は、ディスパッチャ４００に入力される。また、リザベーションステーション２２１〜２２３のそれぞれは、内部に備える演算キューの状態をディスパッチャ４００に通知する機能をさらに備える。
【０２０２】
ディスパッチャ４００は、デコーダ２１１〜２１４のそれぞれから選択信号によって指定された演算実行命令の出力先を、出力先のリザベーションステーション内の演算キューの状態に応じて変更する。例えば、ディスパッチャ４００は、デコーダにより演算実行命令のキューイング先としてリザベーションステーション２２３が指定されたとき、リザベーションステーション２２３の演算キューが満杯である場合には、キューイング先をリザベーションステーション２２２に変更する。また、ディスパッチャ４００は、デコーダにより演算実行命令のキューイング先としてリザベーションステーション２２２が指定されたとき、リザベーションステーション２２２の演算キューが満杯である場合には、キューイング先をリザベーションステーション２２１に変更する。
【０２０３】
図２１は、第５の実施の形態におけるデコーダおよびディスパッチャの処理を示すフローチャートである。この図２１の処理は、デコードした演算実行命令が汎用演算器によって実行可能な演算の実行を要求するものであると判定した場合に、デコーダ２１１およびディスパッチャ４００によって実行されるものである。
【０２０４】
［ステップＳ６１］デコーダ２１１は、演算実行命令における第２ソースオペランドに、実体を伴うレジスタの番号「ｒｓ２」が指定されているかを判定する。デコーダ２１１は、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されている場合（Ｓ６１：Ｙｅｓ）には、演算実行命令のキューイング先としてリザベーションステーション２２１を選択する選択信号ＩＷＲ１＿ＧｒｏｕｐＡ１＿ＳＥＬ（図１２参照）をオンにする。この場合、次にステップＳ６２の処理が実行される。一方、デコーダ２１１は、第２ソースオペランドにレジスタ番号「ｒｓ２」が指定されていない場合（Ｓ６１：Ｎｏ）には、ステップＳ６５の処理を実行する。
【０２０５】
［ステップＳ６２］ディスパッチャ４００は、リザベーションステーション２２１がキューフルであるかを判定する。ここで、「キューフル」とは、リザベーションステーション２２１内の演算キューに、デコーダ２１１からの演算実行命令を格納可能な空きエントリが存在しないことを示す。ディスパッチャ４００は、リザベーションステーション２２１がキューフルである場合（Ｓ６２：Ｙｅｓ）には、ステップＳ６３の処理を実行する。一方、ディスパッチャ４００は、リザベーションステーション２２１がキューフルでない場合（Ｓ６２：Ｎｏ）には、ステップＳ６４の処理を実行する。
【０２０６】
［ステップＳ６３］ディスパッチャ４００は、リザベーションステーション２２１がキューフルでなくなるまで待つように、デコーダ２１１または命令レジスタ２０１に指示する。ここで、上記のステップＳ６２においてリザベーションステーション２２１がキューフルである場合には、ステップＳ６３でのディスパッチャ４００の指示に応じて、命令レジスタ２０１からの新たな演算実行命令の発行が停止される。そして、要求された演算を実行可能な汎用演算器に対応するリザベーションステーションのいずれかがキューフルでなくなるまでの間、新たな演算実行命令の発行が停止された状態のまま、ステップＳ６１からの処理が繰り返される。
【０２０７】
［ステップＳ６４］ディスパッチャ４００は、デコーダ２１１でデコードされた演算実行命令を汎用演算器１１０で演算するように制御する。すなわち、ディスパッチャ４００は、デコードされた演算実行命令を、汎用演算器１１０に対応するリザベーションステーション２２１にキューイングする。
【０２０８】
［ステップＳ６５］デコーダ２１１は、演算実行命令における第１ソースオペランドに、実体を伴うレジスタの番号「ｒｓ１」が指定されているかを判定する。デコーダ２１１は、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されている場合（Ｓ６５：Ｙｅｓ）には、演算実行命令のキューイング先としてリザベーションステーション２２２を選択する選択信号ＩＷＲ１＿ＧｒｏｕｐＢ１＿ＳＥＬ（図１２参照）をオンにする。この場合、次にステップＳ６６の処理が実行される。一方、デコーダ２１１は、第１ソースオペランドにレジスタ番号「ｒｓ１」が指定されていない場合（Ｓ６５：Ｎｏ）には、演算実行命令のキューイング先としてリザベーションステーション２２３を選択する選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ（図１２参照）をオンにする。この場合、次にステップＳ６８の処理が実行される。
【０２０９】
［ステップＳ６６］ディスパッチャ４００は、リザベーションステーション２２２がキューフルであるかを判定する。ディスパッチャ４００は、リザベーションステーション２２２がキューフルである場合（Ｓ６６：Ｙｅｓ）には、ステップＳ６２の処理を実行する。一方、ディスパッチャ４００は、リザベーションステーション２２２がキューフルでない場合（Ｓ６６：Ｎｏ）には、ステップＳ６７の処理を実行する。
【０２１０】
［ステップＳ６７］ディスパッチャ４００は、デコーダ２１１でデコードされた演算実行命令を汎用演算器１２０または汎用演算器１３０で演算するように制御する。すなわち、ディスパッチャ４００は、デコードされた演算実行命令を、汎用演算器１２０，１３０に対応するリザベーションステーション２２２にキューイングする。
【０２１１】
［ステップＳ６８］ディスパッチャ４００は、リザベーションステーション２２３がキューフルであるかを判定する。ディスパッチャ４００は、リザベーションステーション２２３がキューフルである場合（Ｓ６８：Ｙｅｓ）には、ステップＳ６６の処理を実行する。一方、ディスパッチャ４００は、リザベーションステーション２２３がキューフルでない場合（Ｓ６８：Ｎｏ）には、ステップＳ６９の処理を実行する。
【０２１２】
［ステップＳ６９］ディスパッチャ４００は、デコーダ２１１でデコードされた演算実行命令を汎用演算器１４０で演算するように制御する。すなわち、ディスパッチャ４００は、デコードされた演算実行命令を、汎用演算器１４０に対応するリザベーションステーション２２３にキューイングする。
【０２１３】
以上の図２１の処理では、ディスパッチャ４００は、デコーダ２１１から演算実行命令のキューイング先を選択する選択信号の入力を受けたとき、選択されたキューイング先のリザベーションステーションがキューフルであるかを判定する。ディスパッチャ４００は、選択されたキューイング先のリザベーションステーションがキューフルである場合には、演算実行命令のキューイング先を、要求された演算処理を実行可能な演算器に対応し、かつキューフルでない他のリザベーションステーションに変更する。
【０２１４】
例えば、デコードした演算実行命令の各ソースオペランドの組合せパターンが、前述のグループＣ１に属するパターン４またはパターン６である場合（Ｓ６１：Ｎｏ，Ｓ６５：Ｎｏ）、デコーダ２１１は、演算実行命令のキューイング先として汎用演算器１４０に対応するリザベーションステーション２２３を選択する。このとき、ディスパッチャ４００は、リザベーションステーション２２３がキューフルであるかを判定する（Ｓ６８）。リザベーションステーション２２３がキューフルでない場合（Ｓ６８：Ｎｏ）、演算実行命令は、リザベーションステーション２２３にキューイングされる（Ｓ６９）。
【０２１５】
一方、リザベーションステーション２２３がキューフルである場合（Ｓ６８：Ｙｅｓ）、ディスパッチャ４００は、上記のパターン４またはパターン６のソースオペランドを処理可能である汎用演算器１２０，１３０に対応するリザベーションステーション２２２が、キューフルであるかを判定する（Ｓ６６）。リザベーションステーション２２２がキューフルでない場合（Ｓ６６：Ｎｏ）、ディスパッチャ４００は、演算実行命令をキューイング先をリザベーションステーション２２２に決定する（Ｓ６７）。
【０２１６】
また、リザベーションステーション２２２がキューフルである場合（Ｓ６６：Ｙｅｓ）、ディスパッチャ４００は、上記のパターン４またはパターン６に係る演算を実行可能である汎用演算器１１０に対応するリザベーションステーション２２１が、キューフルであるかを判定する（Ｓ６２）。リザベーションステーション２２１がキューフルでない場合（Ｓ６２：Ｎｏ）、ディスパッチャ４００は、演算実行命令のキューイング先をリザベーションステーション２２１に決定する（Ｓ６４）。一方、リザベーションステーション２２１がキューフルである場合（Ｓ６２：Ｙｅｓ）、ディスパッチャ４００は、リザベーションステーション２２１〜２２３のいずれかがキューフルでなくなるまでの間、デコーダ２１１が新たな演算実行命令をデコードしないように制御する（Ｓ６３）。
【０２１７】
以上のようなディスパッチャ４００の処理により、演算実行命令のキューイング先が分散するようになり、キューフルであるために演算実行命令のキューイング動作を一時的に停止するという事態が発生しにくくなるとともに、演算の並列度が向上する。その結果、演算処理装置全体の演算速度が向上する。
【０２１８】
次に、第５の実施の形態における命令制御部２００の内部構成の一例について説明する。まず、図２２は、命令制御部内で伝送される信号の例を示す図である。
図１２において説明したように、デコーダ２１１は、演算実行命令の各ソースオペランドの組合せパターンに応じて、リザベーションステーション２２１を選択する選択信号ＩＷＲ１＿ＧｒｏｕｐＡ１＿ＳＥＬと、リザベーションステーション２２２を選択する選択信号ＩＷＲ１＿ＧｒｏｕｐＢ１＿ＳＥＬと、リザベーションステーション２２３を選択する選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬのいずれかをオンにする。
【０２１９】
デコーダ２１２〜２１４も、デコーダ２１１と同様の選択信号を出力する。デコーダ２１２は、演算実行命令の各ソースオペランドの組合せパターンに応じて、リザベーションステーション２２１を選択する選択信号ＩＷＲ２＿ＧｒｏｕｐＡ１＿ＳＥＬと、リザベーションステーション２２２を選択する選択信号ＩＷＲ２＿ＧｒｏｕｐＢ１＿ＳＥＬと、リザベーションステーション２２３を選択する選択信号ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬのいずれかをオンにする。
【０２２０】
また、デコーダ２１３は、演算実行命令の各ソースオペランドの組合せパターンに応じて、リザベーションステーション２２１を選択する選択信号ＩＷＲ３＿ＧｒｏｕｐＡ１＿ＳＥＬと、リザベーションステーション２２２を選択する選択信号ＩＷＲ３＿ＧｒｏｕｐＢ１＿ＳＥＬと、リザベーションステーション２２３を選択する選択信号ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬのいずれかをオンにする。
【０２２１】
さらに、デコーダ２１４は、演算実行命令の各ソースオペランドの組合せパターンに応じて、リザベーションステーション２２１を選択する選択信号ＩＷＲ４＿ＧｒｏｕｐＡ１＿ＳＥＬと、リザベーションステーション２２２を選択する選択信号ＩＷＲ４＿ＧｒｏｕｐＢ１＿ＳＥＬと、リザベーションステーション２２３を選択する選択信号ＩＷＲ４＿ＧｒｏｕｐＣ１＿ＳＥＬのいずれかをオンにする。
【０２２２】
一方、リザベーションステーション２２１〜２２３は、それぞれが備える演算キューの状態をディスパッチャ４００に通知することが可能なキュー制御部２２１ａ〜２２３ａをそれぞれ具備する。
【０２２３】
キュー制御部２２１ａは、リザベーションステーション２２１の演算キューの状態を示すキュー状態信号ＲＳ＿Ａ＿ＦＵＬＬ，ＲＳ＿Ａ＿ＬＥ１，ＲＳ＿Ａ＿ＬＥ２，ＲＳ＿Ａ＿ＬＥ３を、ディスパッチャ４００に出力する。キュー制御部２２１ａは、リザベーションステーション２２１の演算キューにおける空きエントリ数が０の場合に、キュー状態信号ＲＳ＿Ａ＿ＦＵＬＬをオンにする。また、キュー制御部２２１ａは、リザベーションステーション２２１の演算キューにおける空きエントリ数が１のとき、キュー状態信号ＲＳ＿Ａ＿ＬＥ１をオンにする。さらに、キュー制御部２２１ａは、リザベーションステーション２２１の演算キューにおける空きエントリ数が２のとき、キュー状態信号ＲＳ＿Ａ＿ＬＥ２をオンにする。また、キュー制御部２２１ａは、リザベーションステーション２２１の演算キューにおける空きエントリ数が３のとき、キュー状態信号ＲＳ＿Ａ＿ＬＥ３をオンにする。
【０２２４】
キュー制御部２２２ａ，２２３ａのそれぞれも、キュー制御部２２１ａと同様のキュー状態信号をディスパッチャ４００に出力する。すなわち、キュー制御部２２２ａは、リザベーションステーション２２２の演算キューにおける空きエントリ数が０，１，２，３である場合に、それぞれキュー状態信号ＲＳ＿Ｂ＿ＦＵＬＬ，ＲＳ＿Ｂ＿ＬＥ１，ＲＳ＿Ｂ＿ＬＥ２，ＲＳ＿Ｂ＿ＬＥ３をオンにする。また、キュー制御部２２３ａは、リザベーションステーション２２３の演算キューにおける空きエントリ数が０，１，２，３である場合に、それぞれキュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬ，ＲＳ＿Ｃ＿ＬＥ１，ＲＳ＿Ｃ＿ＬＥ２，ＲＳ＿Ｃ＿ＬＥ３をオンにする。
【０２２５】
ディスパッチャ４００は、リザベーションステーション２２１〜２２３のそれぞれからのキュー状態信号に応じて、デコーダ２１１〜２１４のそれぞれにおいてデコードされた演算実行命令の最終的なキューイング先を決定する。ディスパッチャ４００は、演算実行命令のキューイング先としてリザベーションステーション２２１を選択する選択信号ＩＷＲ１＿ＲＳ＿Ａ＿ＳＥＬ，ＩＷＲ２＿ＲＳ＿Ａ＿ＳＥＬ，ＩＷＲ３＿ＲＳ＿Ａ＿ＳＥＬ，ＩＷＲ４＿ＲＳ＿Ａ＿ＳＥＬと、演算実行命令のキューイング先としてリザベーションステーション２２２を選択する選択信号ＩＷＲ１＿ＲＳ＿Ｂ＿ＳＥＬ，ＩＷＲ２＿ＲＳ＿Ｂ＿ＳＥＬ，ＩＷＲ３＿ＲＳ＿Ｂ＿ＳＥＬ，ＩＷＲ４＿ＲＳ＿Ｂ＿ＳＥＬと、演算実行命令のキューイング先としてリザベーションステーション２２３を選択する選択信号ＩＷＲ１＿ＲＳ＿Ｃ＿ＳＥＬ，ＩＷＲ２＿ＲＳ＿Ｃ＿ＳＥＬ，ＩＷＲ３＿ＲＳ＿Ｃ＿ＳＥＬ，ＩＷＲ４＿ＲＳ＿Ｃ＿ＳＥＬとを出力する。
【０２２６】
また、ディスパッチャ４００は、命令レジスタ２０１〜２０４に対して、出力制御信号ＩＷＲ１＿ＦＵＬＬ＿ＲＥＴＲＹ，ＩＷＲ２＿ＦＵＬＬ＿ＲＥＴＲＹ，ＩＷＲ３＿ＦＵＬＬ＿ＲＥＴＲＹ，ＩＷＲ４＿ＦＵＬＬ＿ＲＥＴＲＹをそれぞれ出力する。命令レジスタ２０１〜２０４は、それぞれ出力制御信号ＩＷＲ１＿ＦＵＬＬ＿ＲＥＴＲＹ，ＩＷＲ２＿ＦＵＬＬ＿ＲＥＴＲＹ，ＩＷＲ３＿ＦＵＬＬ＿ＲＥＴＲＹ，ＩＷＲ４＿ＦＵＬＬ＿ＲＥＴＲＹがオンになっている間、新たな演算実行命令の出力を停止する。
【０２２７】
ここで、ディスパッチャ４００は、デコーダ２１１〜２１４に対して優先度を付与する。本実施の形態では、例として、優先度が高い方から順にデコーダ２１１，２１２，２１３，２１４とする。ディスパッチャ４００は、複数の演算実行命令のキューイング先として同じリザベーションステーションが選択された場合に、優先度の高いデコーダからの演算実行命令を、選択されたリザベーションステーションに優先的にキューイングする。
【０２２８】
このような優先度に基づくキューイング先の選択処理においては、例えば、デコーダ２１４からの演算実行命令のキューイング先としてリザベーションステーション２２１が選択されたとき、たとえリザベーションステーション２２１の演算キューにおいて３つの空きエントリが存在したとしても、他のデコーダ２１１〜２１３のいずれもキューイング先としてリザベーションステーション２２１を選択した場合には、デコーダ２１１〜２１３からの各演算実行命令が優先的にリザベーションステーション２２１にキューイングされ、デコーダ２１４からの演算実行命令のキューイングは待ち状態となる。このように、最も優先度の低いデコーダ２１４からの演算実行命令のキューイングが不可能な状態は、各リザベーションステーションの演算キューにおける空きエントリ数が０の場合だけでなく、空きエントリ数が１，２，３のいずれの場合でもあり得る。そこで、ディスパッチャ４００は、各リザベーションステーションのキュー制御部から、演算キューの空きエントリ数が０，１，２，３のそれぞれであることの通知を受けることにより、デコーダの優先度に応じて演算実行命令のキューイング先を適切に選択する。
【０２２９】
図２３は、ディスパッチャの内部構成例を示す第１の図である。
この図２３では、ディスパッチャが備える回路のうち、リザベーションステーション２２３を演算実行命令のキューイング先とするか否かを判定する判定回路４０１を示す。この判定回路４０１は、ＡＮＤゲート４１１〜４２６、ＯＲゲート４３１〜４３５およびゲート回路４４１を備える。
【０２３０】
ＡＮＤゲート４１１，４１２は、デコーダ２１１からの演算実行命令のキューイング先をリザベーションステーション２２３とするか否かを決定する機能を果たす。ＡＮＤゲート４１１には、デコーダ２１１からの選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬと、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬとが入力される。ＡＮＤゲート４１１からの出力は、選択信号ＩＷＲ１＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂとして、次の図２４に示す、リザベーションステーション２２２をキューイング先とするか否かを判定する回路に出力される。この選択信号ＩＷＲ１＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂは、デコーダ２１１からの演算実行命令のキューイング先候補をリザベーションステーション２２２に変更する場合に、オンになる。ＡＮＤゲート４１２には、ＡＮＤゲート４１１からの出力を反転した信号と、デコーダ２１１からの選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬとが入力される。ＡＮＤゲート４１２からの出力は、デコーダ２１１からの演算実行命令のキューイング先としてリザベーションステーション２２３を最終的に選択するかを示す選択信号ＩＷＲ１＿ＲＳ＿Ｃ＿ＳＥＬとして、リザベーションステーション２２３に出力される。
【０２３１】
ここで、デコーダ２１１によりキューイング先としてリザベーションステーション２２３が選択されていない場合、すなわち、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬがオフの場合には、選択信号ＩＷＲ１＿ＲＳ＿Ｃ＿ＳＥＬ，ＩＷＲ１＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂもともにオフになる。また、デコーダ２１１によりキューイング先としてリザベーションステーション２２３が選択された場合、すなわち、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬがオンになった場合には、次のような動作が行われる。
【０２３２】
リザベーションステーション２２３の演算キューにおける空きエントリ数が１以上の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬがオフの場合には、選択信号ＩＷＲ１＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。この場合、デコーダ２１１からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。一方、リザベーションステーション２２３の演算キューにおける空きエントリ数が０の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬがオンの場合には、選択信号ＩＷＲ１＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。この場合、デコーダ２１１からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２３３】
次に、ＡＮＤゲート４１３〜４１５およびＯＲゲート４３１は、デコーダ２１２からの演算実行命令のキューイング先をリザベーションステーション２２３とするか否かを決定する機能を果たす。ＡＮＤゲート４１３には、デコーダ２１１からの選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬと、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＬＥ＿１とが入力される。ＯＲゲート４３１には、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬと、ＡＮＤゲート４１３からの出力信号とが入力される。ＡＮＤゲート４１４には、ＯＲゲート４３１からの出力信号と、デコーダ２１２からの選択信号ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬとが入力される。
【０２３４】
ＡＮＤゲート４１４からの出力は、選択信号ＩＷＲ２＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂとして、次の図２４に示す、リザベーションステーション２２２をキューイング先するか否かを判定する回路に出力される。この選択信号ＩＷＲ２＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂは、デコーダ２１２からの演算実行命令のキューイング先候補をリザベーションステーション２２２に変更する場合に、オンになる。ＡＮＤゲート４１５には、ＡＮＤゲート４１４からの出力を反転した信号と、デコーダ２１２からの選択信号ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬとが入力される。ＡＮＤゲート４１５からの出力は、デコーダ２１２からの演算実行命令のキューイング先としてリザベーションステーション２２３を最終的に選択するかを示す選択信号ＩＷＲ２＿ＲＳ＿Ｃ＿ＳＥＬとして、リザベーションステーション２２３に出力される。
【０２３５】
ここで、デコーダ２１２によりキューイング先としてリザベーションステーション２２３が選択されていない場合、すなわち、選択信号ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬがオフの場合には、選択信号ＩＷＲ２＿ＲＳ＿Ｃ＿ＳＥＬ，ＩＷＲ２＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂもともにオフになる。また、デコーダ２１２によりキューイング先としてリザベーションステーション２２３が選択された場合、すなわち、選択信号ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬがオンになった場合には、次のような動作が行われる。
【０２３６】
リザベーションステーション２２３の演算キューにおける空きエントリ数が２以上の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬ，ＲＳ＿Ｃ＿ＬＥ＿１がともにオフの場合には、選択信号ＩＷＲ２＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。この場合、デコーダ２１２からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。
【０２３７】
また、リザベーションステーション２２３の演算キューにおける空きエントリ数が０の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬがオンの場合には、選択信号ＩＷＲ２＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。この場合、デコーダ２１２からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２３８】
また、リザベーションステーション２２３の演算キューにおける空きエントリ数が１の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＬＥ＿１がオンであり、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬがオフの場合には、優先度の高いデコーダ２１１によりリザベーションステーション２２３がキューイング先として選択されているか否かによって、次のような動作が行われる。
【０２３９】
デコーダ２１１によりリザベーションステーション２２３がキューイング先として選択されていない場合には、デコーダ２１２からの演算実行命令をリザベーションステーション２２３にキューイング可能である。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬがオフになり、ＡＮＤゲート４１３の出力がオフになることから、選択信号ＩＷＲ２＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。従って、デコーダ２１２からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。
【０２４０】
一方、デコーダ２１１によりリザベーションステーション２２３がキューイング先として選択されている場合には、デコーダ２１１からの演算実行命令がリザベーションステーション２２３に優先的にキューイングされる。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬがオンになり、ＡＮＤゲート４１３の出力がオンになることから、選択信号ＩＷＲ２＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。従って、デコーダ２１２からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２４１】
次に、ＡＮＤゲート４１６〜４２０およびＯＲゲート４３２，４３３は、デコーダ２１３からの演算実行命令のキューイング先をリザベーションステーション２２３とするか否かを決定する機能を果たす。ＡＮＤゲート４１７およびＯＲゲート４３２には、ともに、デコーダ２１１からの選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬと、デコーダ２１２からの選択信号ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬとが入力される。ＡＮＤゲート４１６には、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＬＥ＿１と、ＯＲゲート４３２からの出力信号とが入力される。ＡＮＤゲート４１８には、ＡＮＤゲート４１７からの出力信号と、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＬＥ＿２とが入力される。ＯＲゲート４３３には、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬと、ＡＮＤゲート４１６，４１８からの各出力信号とが入力される。
【０２４２】
ＡＮＤゲート４１９からの出力は、選択信号ＩＷＲ３＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂとして、次の図２４に示す、リザベーションステーション２２２をキューイング先とするか否かを判定する回路に出力される。この選択信号ＩＷＲ３＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂは、デコーダ２１３からの演算実行命令のキューイング先候補をリザベーションステーション２２２に変更する場合に、オンになる。ＡＮＤゲート４２０には、ＡＮＤゲート４１９からの出力を反転した信号と、デコーダ２１３からの選択信号ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬとが入力される。ＡＮＤゲート４２０からの出力は、デコーダ２１３からの演算実行命令のキューイング先としてリザベーションステーション２２３を最終的に選択するかを示す選択信号ＩＷＲ３＿ＲＳ＿Ｃ＿ＳＥＬとして、リザベーションステーション２２３に出力される。
【０２４３】
ここで、デコーダ２１３によりキューイング先としてリザベーションステーション２２３が選択されていない場合、すなわち、選択信号ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬがオフの場合には、選択信号ＩＷＲ３＿ＲＳ＿Ｃ＿ＳＥＬ，ＩＷＲ３＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂもともにオフになる。また、デコーダ２１３によりキューイング先としてリザベーションステーション２２３が選択された場合、すなわち、選択信号ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬがオンである場合には、次のような動作が行われる。
【０２４４】
まず、リザベーションステーション２２３の演算キューにおける空きエントリ数が３以上の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬ，ＲＳ＿Ｃ＿ＬＥ＿１，ＲＳ＿Ｃ＿ＬＥ＿２がすべてオフの場合には、選択信号ＩＷＲ３＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。この場合、デコーダ２１３からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。
【０２４５】
次に、リザベーションステーション２２３の演算キューにおける空きエントリ数が０の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬがオンの場合には、選択信号ＩＷＲ３＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。この場合、デコーダ２１３からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２４６】
次に、リザベーションステーション２２３の演算キューにおける空きエントリ数が１の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＬＥ＿１がオンであり、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬがオフの場合には、優先度の高いデコーダ２１１またはデコーダ２１２によりリザベーションステーション２２３がキューイング先として選択されているか否かによって、次のような動作が行われる。
【０２４７】
デコーダ２１１，２１２がいずれもリザベーションステーション２２３をキューイング先として選択していない場合には、デコーダ２１３からの演算実行命令をリザベーションステーション２２３にキューイング可能である。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬがいずれもオフになり、ＡＮＤゲート４１６〜４１８の各出力がいずれもオフになることから、選択信号ＩＷＲ３＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。従って、デコーダ２１３からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。
【０２４８】
一方、デコーダ２１１，２１２の少なくとも一方がリザベーションステーション２２３をキューイング先として選択している場合には、デコーダ２１１，２１２からの演算実行命令がリザベーションステーション２２３に優先的にキューイングされる。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬの少なくとも一方がオンになり、ＡＮＤゲート４１６の出力がオンになることから、選択信号ＩＷＲ３＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。従って、デコーダ２１３からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２４９】
次に、リザベーションステーション２２３の演算キューにおける空きエントリ数が２の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＬＥ＿２がオンであり、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬ，ＲＳ＿Ｃ＿ＬＥ＿１がともにオフの場合には、優先度の高いデコーダ２１１，２１２の両方によりリザベーションステーション２２３がキューイング先として選択されているか否かによって、次のような動作が行われる。
【０２５０】
デコーダ２１１，２１２の両方がリザベーションステーション２２３をキューイング先として選択している場合には、デコーダ２１１，２１２からの演算実行命令がリザベーションステーション２２３に優先的にキューイングされる。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬがいずれもオンになり、ＡＮＤゲート４１７，４１８の各出力がオンになることから、選択信号ＩＷＲ３＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。従って、デコーダ２１３からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２５１】
一方、デコーダ２１１，２１２のうちの少なくとも一方がリザベーションステーション２２３をキューイング先として選択していない場合には、デコーダ２１３からの演算実行命令をリザベーションステーション２２３にキューイング可能である。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬのうち少なくとも一方がオフになり、ＡＮＤゲート４１６〜４１８の各出力がいずれもオフになることから、選択信号ＩＷＲ３＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。従って、デコーダ２１３からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。
【０２５２】
次に、ＡＮＤゲート４２１〜４２６、ＯＲゲート４３４，４３５およびゲート回路４４１は、デコーダ２１４からの演算実行命令のキューイング先をリザベーションステーション２２３とするか否かを決定する機能を果たす。ＡＮＤゲート４２３およびＯＲゲート４３４には、ともに、デコーダ２１１〜２１３からの選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬが入力される。ＡＮＤゲート４２１には、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＬＥ＿１と、ＯＲゲート４３４からの出力信号とが入力される。ＡＮＤゲート４２４には、ＡＮＤゲート４２３からの出力信号と、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＬＥ＿３とが入力される。
【０２５３】
ゲート回路４４１は、３つのＡＮＤゲートと、各ＡＮＤゲートからの出力を入力とするＯＲゲートとからなる。ここで、ゲート回路４４１が備えるＡＮＤゲートを、図２３における上側から順に、第１ＡＮＤゲート、第２ＡＮＤゲート、第３ＡＮＤゲートと呼ぶ。ゲート回路４４１の第１ＡＮＤゲートには、デコーダ２１１，２１２からの選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬが入力される。ゲート回路４４１の第２ＡＮＤゲートには、デコーダ２１１，２１３からの選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬが入力される。ゲート回路４４１の第３ＡＮＤゲートには、デコーダ２１２，２１３からの選択信号ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬが入力される。
【０２５４】
ＡＮＤゲート４２２には、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＬＥ＿２と、ゲート回路４４１のＯＲゲートからの出力信号とが入力される。ＯＲゲート４３５には、リザベーションステーション２２３のキュー制御部２２３ａからのキュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬと、ＡＮＤゲート４２１，４２２，４２４からの各出力信号とが入力される。ＡＮＤゲート４２５には、ＯＲゲート４３５からの出力信号と、デコーダ２１４からの選択信号ＩＷＲ４＿ＧｒｏｕｐＣ１＿ＳＥＬとが入力される。
【０２５５】
ＡＮＤゲート４２５からの出力は、選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂとして、次の図２４に示す、リザベーションステーション２２２をキューイング先とするか否かを判定する回路に出力される。この選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂは、デコーダ２１４からの演算実行命令のキューイング先候補をリザベーションステーション２２２に変更する場合に、オンになる。ＡＮＤゲート４２６には、ＡＮＤゲート４２５からの出力を反転した信号と、デコーダ２１４からの選択信号ＩＷＲ４＿ＧｒｏｕｐＣ１＿ＳＥＬとが入力される。ＡＮＤゲート４２６からの出力は、デコーダ２１４からの演算実行命令のキューイング先としてリザベーションステーション２２３を最終的に選択するかを示す選択信号ＩＷＲ４＿ＲＳ＿Ｃ＿ＳＥＬとして、リザベーションステーション２２３に出力される。
【０２５６】
ここで、デコーダ２１４によりキューイング先としてリザベーションステーション２２３が選択されていない場合、すなわち、選択信号ＩＷＲ４＿ＧｒｏｕｐＣ１＿ＳＥＬがオフの場合には、選択信号ＩＷＲ４＿ＲＳ＿Ｃ＿ＳＥＬ，ＩＷＲ４＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂもともにオフになる。また、デコーダ２１４によりキューイング先としてリザベーションステーション２２３が選択された場合、すなわち、選択信号ＩＷＲ４＿ＧｒｏｕｐＣ１＿ＳＥＬがオンである場合には、次のような動作が行われる。
【０２５７】
まず、リザベーションステーション２２３の演算キューにおける空きエントリ数が４以上の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬ，ＲＳ＿Ｃ＿ＬＥ＿１，ＲＳ＿Ｃ＿ＬＥ２，ＲＳ＿Ｃ＿ＬＥ＿３がすべてオフの場合には、選択信号ＩＷＲ４＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。この場合、デコーダ２１４からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。
【０２５８】
次に、リザベーションステーション２２３の演算キューにおける空きエントリ数が０の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬがオンの場合には、選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。この場合、デコーダ２１４からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２５９】
次に、リザベーションステーション２２３の演算キューにおける空きエントリ数が１の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＬＥ＿１がオンであり、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬがオフの場合には、優先度の高いデコーダ２１１〜２１３のいずれかによりリザベーションステーション２２３がキューイング先として選択されているか否かによって、次のような動作が行われる。
【０２６０】
デコーダ２１１〜２１３がいずれもリザベーションステーション２２３をキューイング先として選択していない場合には、デコーダ２１４からの演算実行命令をリザベーションステーション２２３にキューイング可能である。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬがいずれもオフになり、ＡＮＤゲート４２１〜４２４の各出力がいずれもオフになることから、選択信号ＩＷＲ４＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。従って、デコーダ２１４からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。
【０２６１】
また、デコーダ２１１〜２１３の少なくとも１つがリザベーションステーション２２３をキューイング先として選択している場合には、デコーダ２１１〜２１３からの演算実行命令がリザベーションステーション２２３に優先的にキューイングされる。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬの少なくとも一方がオンになり、ＡＮＤゲート４２１の出力がオンになることから、選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。従って、デコーダ２１４からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２６２】
次に、リザベーションステーション２２３の演算キューにおける空きエントリ数が２の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＬＥ＿２がオンであり、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬ，ＲＳ＿Ｃ＿ＬＥ＿１がともにオフの場合には、優先度の高いデコーダ２１１〜２１３のうち２つ以上のデコーダによってリザベーションステーション２２３がキューイング先として選択されているか否かによって、次のような動作が行われる。
【０２６３】
デコーダ２１１〜２１３のうち、キューイング先としてリザベーションステーション２２３を選択しているデコーダが２つ以上存在する場合には、デコーダ２１１〜２１３からの演算実行命令がリザベーションステーション２２３に優先的にキューイングされる。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬのうち２つ以上がオンになり、ＡＮＤゲート４２２がオンになることから、選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。従って、デコーダ２１４からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２６４】
一方、デコーダ２１１〜２１３のうち、キューイング先としてリザベーションステーション２２３を選択しているデコーダが１つ以下である場合には、デコーダ２１４からの演算実行命令をリザベーションステーション２２３にキューイング可能である。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬのうち１つのみがオンになり、ＡＮＤゲート４２１〜４２４の各出力がいずれもオフになることから、選択信号ＩＷＲ４＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。従って、デコーダ２１４からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。
【０２６５】
次に、リザベーションステーション２２３の演算キューにおける空きエントリ数が３の場合、すなわち、キュー状態信号ＲＳ＿Ｃ＿ＬＥ＿３がオンであり、キュー状態信号ＲＳ＿Ｃ＿ＦＵＬＬ，ＲＳ＿Ｃ＿ＬＥ＿１，ＲＳ＿Ｃ＿ＬＥ＿２がすべてオフの場合には、優先度の高いデコーダ２１１〜２１３のすべてがリザベーションステーション２２３をキューイング先として選択しているか否かによって、次のような動作が行われる。
【０２６６】
デコーダ２１１〜２１３のすべてがキューイング先としてリザベーションステーション２２３を選択している場合には、デコーダ２１１〜２１３からの演算実行命令がリザベーションステーション２２３に優先的にキューイングされる。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬのすべてがオンになり、ＡＮＤゲート４２３，４２４がともにオンになることから、選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂがオンになる。従って、デコーダ２１４からの演算実行命令のキューイング先候補が、リザベーションステーション２２２に変更される。
【０２６７】
一方、デコーダ２１１〜２１３のうち、キューイング先としてリザベーションステーション２２３を選択しているデコーダが２つ以下である場合には、デコーダ２１４からの演算実行命令をリザベーションステーション２２３にキューイング可能である。この場合、選択信号ＩＷＲ１＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ２＿ＧｒｏｕｐＣ１＿ＳＥＬ，ＩＷＲ３＿ＧｒｏｕｐＣ１＿ＳＥＬのうちの少なくとも１つはオフになり、ＡＮＤゲート４２１〜４２４の各出力がいずれもオフになることから、選択信号ＩＷＲ４＿ＲＳ＿Ｃ＿ＳＥＬがオンになる。従って、デコーダ２１４からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション２２３にキューイングされる。
【０２６８】
図２４は、ディスパッチャの内部構成例を示す第２の図である。
この図２４では、ディスパッチャ４００が備える回路のうち、リザベーションステーション２２２を演算実行命令のキューイング先とするか否かを判定する回路を示す。リザベーションステーション２２２を演算実行命令のキューイング先とするか否かを判定する回路としては、判定回路４０２と、ＯＲゲート４５１〜４５４とを含む。
【０２６９】
判定回路４０２の回路構成および動作は、図２３に示した判定回路４０１と同じである。そこで、図２４では、判定回路４０２が備える論理回路を、図２３の判定回路４０１と同じ符号を用いて示し、判定回路４０２における動作の説明を省略する。
【０２７０】
ＯＲゲート４５１には、デコーダ２１１からの選択信号ＩＷＲ１＿ＧｒｏｕｐＢ１＿ＳＥＬと、図２３の判定回路４０１からの選択信号ＩＷＲ１＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂとが入力される。ＯＲゲート４５１からの出力は、判定回路４０２内のＡＮＤゲート４１１〜４１３，４１７，４２３、ＯＲゲート４３２，４３４、ゲート回路４４１の第１ＡＮＤゲートおよび第２ＡＮＤゲートに入力される。
【０２７１】
ＯＲゲート４５２には、デコーダ２１２からの選択信号ＩＷＲ２＿ＧｒｏｕｐＢ１＿ＳＥＬと、図２３の判定回路４０１からの選択信号ＩＷＲ２＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂとが入力される。ＯＲゲート４５２からの出力は、判定回路４０２内のＡＮＤゲート４１４，４１５，４１７，４２３、ＯＲゲート４３２，４３４、ゲート回路４４１の第１ＡＮＤゲートおよび第３ＡＮＤゲートに入力される。
【０２７２】
ＯＲゲート４５３には、デコーダ２１３からの選択信号ＩＷＲ３＿ＧｒｏｕｐＢ１＿ＳＥＬと、図２３の判定回路４０１からの選択信号ＩＷＲ３＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂとが入力される。ＯＲゲート４５３からの出力は、判定回路４０２内のＡＮＤゲート４１９，４２０，４２３、ＯＲゲート４３４、ゲート回路４４１の第２ＡＮＤゲートおよび第３ＡＮＤゲートに入力される。
【０２７３】
ＯＲゲート４５４には、デコーダ２１４からの選択信号ＩＷＲ４＿ＧｒｏｕｐＢ１＿ＳＥＬと、図２３の判定回路４０１からの選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｃ＿ＴＯ＿Ｂとが入力される。ＯＲゲート４５４からの出力は、判定回路４０２内のＡＮＤゲート４２５，４２６に入力される。
【０２７４】
判定回路４０２内のＡＮＤゲート４１１からの出力は、選択信号ＩＷＲ１＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａとして、次の図２５に示す、リザベーションステーション２２１をキューイング先とするか否かを判定する回路に出力される。判定回路４０２内のＡＮＤゲート４１２からの出力は、選択信号ＩＷＲ１＿ＲＳ＿Ｂ＿ＳＥＬとしてリザベーションステーション２２２に出力される。
【０２７５】
デコーダ２１１により演算実行命令のキューイング先としてリザベーションステーション２２２が選択されたとき、リザベーションステーション２２２の演算キューに空きエントリがある場合には、選択信号ＩＷＲ１＿ＲＳ＿Ｂ＿ＳＥＬがオンになる。この場合、デコーダ２１１からの演算実行命令がリザベーションステーション２２２にキューイングされる。一方、リザベーションステーション２２２の演算キューに空きエントリがない場合には、選択信号ＩＷＲ１＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａがオンになる。この場合、デコーダ２１１からの演算実行命令のキューイング先候補が、リザベーションステーション２２１に変更される。
【０２７６】
判定回路４０２内のＡＮＤゲート４１４からの出力は、選択信号ＩＷＲ２＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａとして、次の図２５に示す、リザベーションステーション２２１をキューイング先とするか否かを判定する回路に出力される。判定回路４０２内のＡＮＤゲート４１５からの出力は、選択信号ＩＷＲ２＿ＲＳ＿Ｂ＿ＳＥＬとしてリザベーションステーション２２２に出力される。
【０２７７】
デコーダ２１２により演算実行命令のキューイング先としてリザベーションステーション２２２が選択されたとき、リザベーションステーション２２２の演算キューに、デコーダ２１２からの演算実行命令を格納可能な空きエントリがある場合には、選択信号ＩＷＲ２＿ＲＳ＿Ｂ＿ＳＥＬがオンになる。この場合、デコーダ２１２からの演算実行命令がリザベーションステーション２２２にキューイングされる。一方、リザベーションステーション２２２の演算キューに、デコーダ２１２からの演算実行命令を格納可能な空きエントリがない場合には、選択信号ＩＷＲ２＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａがオンになる。この場合、デコーダ２１２からの演算実行命令のキューイング先候補が、リザベーションステーション２２１に変更される。
【０２７８】
判定回路４０２内のＡＮＤゲート４１９からの出力は、選択信号ＩＷＲ３＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａとして、次の図２５に示す、リザベーションステーション２２１をキューイング先とするか否かを判定する回路に出力される。判定回路４０２内のＡＮＤゲート４２０からの出力は、選択信号ＩＷＲ３＿ＲＳ＿Ｂ＿ＳＥＬとしてリザベーションステーション２２２に出力される。
【０２７９】
デコーダ２１３により演算実行命令のキューイング先としてリザベーションステーション２２２が選択されたとき、リザベーションステーション２２２の演算キューに、デコーダ２１３からの演算実行命令を格納可能な空きエントリがある場合には、選択信号ＩＷＲ３＿ＲＳ＿Ｂ＿ＳＥＬがオンになる。この場合、デコーダ２１３からの演算実行命令がリザベーションステーション２２２にキューイングされる。一方、リザベーションステーション２２２の演算キューに、デコーダ２１３からの演算実行命令を格納可能な空きエントリがない場合には、選択信号ＩＷＲ３＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａがオンになる。この場合、デコーダ２１３からの演算実行命令のキューイング先候補が、リザベーションステーション２２１に変更される。
【０２８０】
判定回路４０２内のＡＮＤゲート４２５からの出力は、選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａとして、次の図２５に示す、リザベーションステーション２２１をキューイング先とするか否かを判定する回路に出力される。判定回路４０２内のＡＮＤゲート４２６からの出力は、選択信号ＩＷＲ４＿ＲＳ＿Ｂ＿ＳＥＬとしてリザベーションステーション２２２に出力される。
【０２８１】
デコーダ２１４により演算実行命令のキューイング先としてリザベーションステーション２２２が選択されたとき、リザベーションステーション２２２の演算キューに、デコーダ２１４からの演算実行命令を格納可能な空きエントリがある場合には、選択信号ＩＷＲ４＿ＲＳ＿Ｂ＿ＳＥＬがオンになる。この場合、デコーダ２１４からの演算実行命令がリザベーションステーション２２２にキューイングされる。一方、リザベーションステーション２２２の演算キューに、デコーダ２１４からの演算実行命令を格納可能な空きエントリがない場合には、選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａがオンになる。この場合、デコーダ２１４からの演算実行命令のキューイング先候補が、リザベーションステーション２２１に変更される。
【０２８２】
図２５は、ディスパッチャの内部構成例を示す第３の図である。
この図２５では、ディスパッチャ４００が備える回路のうち、リザベーションステーション２２１を演算実行命令のキューイング先とするか否かを判定する回路を示す。リザベーションステーション２２１を演算実行命令のキューイング先とするか否かを判定する回路としては、判定回路４０３と、ＯＲゲート４６１〜４６４とを含む。
【０２８３】
判定回路４０３の回路構成および動作は、図２３に示した判定回路４０１と同じである。そこで、図２５では、判定回路４０３が備える論理回路を、図２３の判定回路４０１と同じ符号を用いて示し、判定回路４０３における動作の説明を省略する。
【０２８４】
ＯＲゲート４６１には、デコーダ２１１からの選択信号ＩＷＲ１＿ＧｒｏｕｐＡ１＿ＳＥＬと、図２４の判定回路４０２からの選択信号ＩＷＲ１＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａとが入力される。ＯＲゲート４６１からの出力信号は、判定回路４０３内のＡＮＤゲート４１１〜４１３，４１７，４２３、ＯＲゲート４３２，４３４、ゲート回路４４１の第１ＡＮＤゲートおよび第２ＡＮＤゲートに入力される。
【０２８５】
ＯＲゲート４６２には、デコーダ２１２からの選択信号ＩＷＲ２＿ＧｒｏｕｐＡ１＿ＳＥＬと、図２４の判定回路４０２からの選択信号ＩＷＲ２＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａとが入力される。ＯＲゲート４６２からの出力信号は、判定回路４０３内のＡＮＤゲート４１４，４１５，４１７，４２３、ＯＲゲート４３２，４３４、ゲート回路４４１の第１ＡＮＤゲートおよび第３ＡＮＤゲートに入力される。
【０２８６】
ＯＲゲート４６３には、デコーダ２１３からの選択信号ＩＷＲ３＿ＧｒｏｕｐＡ１＿ＳＥＬと、図２４の判定回路４０２からの選択信号ＩＷＲ３＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａとが入力される。ＯＲゲート４６３からの出力信号は、判定回路４０３内のＡＮＤゲート４１９，４２０，４２３、ＯＲゲート４３４、ゲート回路４４１の第２ＡＮＤゲートおよび第３ＡＮＤゲートに入力される。
【０２８７】
ＯＲゲート４６４には、デコーダ２１４からの選択信号ＩＷＲ４＿ＧｒｏｕｐＡ１＿ＳＥＬと、図２４の判定回路４０２からの選択信号ＩＷＲ４＿ＧＲＯＵＰ＿Ｂ＿ＴＯ＿Ａとが入力される。ＯＲゲート４６４からの出力信号は、判定回路４０３内のＡＮＤゲート４２５，４２６に入力される。
【０２８８】
判定回路４０３内のＡＮＤゲート４１１からの出力は、出力制御信号ＩＷＲ１＿ＦＵＬＬ＿ＲＥＴＲＹとして命令レジスタ２０１に出力される。判定回路４０３内のＡＮＤゲート４１２からの出力は、選択信号ＩＷＲ１＿ＲＳ＿Ａ＿ＳＥＬとしてリザベーションステーション２２１に出力される。
【０２８９】
デコーダ２１１により演算実行命令のキューイング先としてリザベーションステーション２２１が選択されたとき、リザベーションステーション２２１の演算キューに空きエントリがある場合には、選択信号ＩＷＲ１＿ＲＳ＿Ａ＿ＳＥＬがオンになる。この場合、デコーダ２１１からの演算実行命令がリザベーションステーション２２１にキューイングされる。一方、リザベーションステーション２２１の演算キューに空きエントリがない場合には、出力制御信号ＩＷＲ１＿ＦＵＬＬ＿ＲＥＴＲＹがオンになる。この場合、命令レジスタ２０１からの新たな演算実行命令の出力が停止される。
【０２９０】
判定回路４０３内のＡＮＤゲート４１４からの出力は、出力制御信号ＩＷＲ２＿ＦＵＬＬ＿ＲＥＴＲＹとして命令レジスタ２０２に出力される。判定回路４０３内のＡＮＤゲート４１５からの出力は、選択信号ＩＷＲ２＿ＲＳ＿Ａ＿ＳＥＬとしてリザベーションステーション２２１に出力される。
【０２９１】
デコーダ２１２により演算実行命令のキューイング先としてリザベーションステーション２２１が選択されたとき、リザベーションステーション２２１の演算キューに、デコーダ２１２からの演算実行命令を格納可能な空きエントリがある場合には、選択信号ＩＷＲ２＿ＲＳ＿Ａ＿ＳＥＬがオンになる。この場合、デコーダ２１２からの演算実行命令がリザベーションステーション２２１にキューイングされる。一方、リザベーションステーション２２１の演算キューに、デコーダ２１２からの演算実行命令を格納可能な空きエントリがない場合には、出力制御信号ＩＷＲ２＿ＦＵＬＬ＿ＲＥＴＲＹがオンになる。この場合、命令レジスタ２０２からの新たな演算実行命令の出力が停止される。
【０２９２】
判定回路４０３内のＡＮＤゲート４１９からの出力は、出力制御信号ＩＷＲ３＿ＦＵＬＬ＿ＲＥＴＲＹとして命令レジスタ２０３に出力される。判定回路４０３内のＡＮＤゲート４２０からの出力は、選択信号ＩＷＲ３＿ＲＳ＿Ａ＿ＳＥＬとしてリザベーションステーション２２１に出力される。
【０２９３】
デコーダ２１３により演算実行命令のキューイング先としてリザベーションステーション２２１が選択されたとき、リザベーションステーション２２１の演算キューに、デコーダ２１３からの演算実行命令を格納可能な空きエントリがある場合には、選択信号ＩＷＲ３＿ＲＳ＿Ａ＿ＳＥＬがオンになる。この場合、デコーダ２１３からの演算実行命令がリザベーションステーション２２１にキューイングされる。一方、リザベーションステーション２２１の演算キューに、デコーダ２１３からの演算実行命令を格納可能な空きエントリがない場合には、出力制御信号ＩＷＲ３＿ＦＵＬＬ＿ＲＥＴＲＹがオンになる。この場合、命令レジスタ２０３からの新たな演算実行命令の出力が停止される。
【０２９４】
判定回路４０３内のＡＮＤゲート４２５からの出力は、出力制御信号ＩＷＲ４＿ＦＵＬＬ＿ＲＥＴＲＹとして命令レジスタ２０４に出力される。判定回路４０３内のＡＮＤゲート４２６からの出力は、選択信号ＩＷＲ４＿ＲＳ＿Ａ＿ＳＥＬとしてリザベーションステーション２２１に出力される。
【０２９５】
デコーダ２１４により演算実行命令のキューイング先としてリザベーションステーション２２１が選択されたとき、リザベーションステーション２２１の演算キューに、デコーダ２１４からの演算実行命令を格納可能な空きエントリがある場合には、選択信号ＩＷＲ４＿ＲＳ＿Ａ＿ＳＥＬがオンになる。この場合、デコーダ２１４からの演算実行命令がリザベーションステーション２２１にキューイングされる。一方、リザベーションステーション２２１の演算キューに、デコーダ２１４からの演算実行命令を格納可能な空きエントリがない場合には、出力制御信号ＩＷＲ４＿ＦＵＬＬ＿ＲＥＴＲＹがオンになる。この場合、命令レジスタ２０４からの新たな演算実行命令の出力が停止される。
【０２９６】
以上の図２２〜図２５に示した命令制御部２００では、デコーダ２１１〜２１４に優先度を付与し、優先度の高いデコーダからの演算実行命令をリザベーションステーション内の演算キューの空きエントリに優先的にキューイングするようにした。これにより、複数のデコーダによって同時にデコードされた演算実行命令のキューイング先として、同じリザベーションステーションが選択された場合でも、キューイング動作をできるだけ停止させずに演算処理を実行させることができるようになる。従って、演算処理装置における演算の並列度を高め、処理効率を向上させることができる。
【０２９７】
なお、以上説明した第５の実施の形態では、各デコーダによるキューイング先の選択処理として第２の実施の形態での処理を適用したが、例えば、第３の実施の形態あるいは第４の実施の形態でのキューイング先の選択処理を適用することも可能である。例えば、第３の実施の形態でのキューイング先の選択処理を適用する場合には、ディスパッチャ４００は、デコーダ２１１から出力される選択信号のうち、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ２＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ１，ＩＷＲ１＿ＧｒｏｕｐＢ２＿Ｓｗａｐ２のいずれかがオンになったときに、キューイング先としてリザベーションステーション２２２が選択されたと判定すればよい。同様に、第４の実施の形態でのキューイング先の選択処理を適用する場合には、ディスパッチャ４００は、デコーダ２１１から出力される選択信号のうち、選択信号ＩＷＲ１＿ＧｒｏｕｐＢ３＿ＳＥＬ，ＩＷＲ１＿ＧｒｏｕｐＢ３＿Ｓｗａｐのいずれかがオンになったときに、キューイング先としてリザベーションステーション２２２が選択されたと判定すればよい。
【０２９８】
〔第６の実施の形態〕
上記の第２〜第５の実施の形態では、リザベーションステーションに演算実行命令をキューイングする前に、ソースオペランドの組合せパターンに応じて演算器の選択を行った。しかしながら、以下の第６の実施の形態のように、演算器の選択を、リザベーションステーションから演算実行命令を発行した後の段階で行ってもよい。
【０２９９】
図２６は、第６の実施の形態における命令制御部の構成例を示す図である。なお、図２６では、図９に対応する構成要素については同じ符号を付して示す。
図２６に示すリザベーションステーション２２４には、例えば、汎用演算器で実行可能な演算が指示された演算実行命令がキューイングされるものとする。デコーダ２１１ａ〜２１４ａのそれぞれは、命令レジスタ２０１〜２０４から取得した演算実行命令をデコードして、指定された演算を実行可能な演算器に対応するリザベーションステーションに、演算実行命令をキューイングする。
【０３００】
ディスパッチャ４７０は、リザベーションステーション２２４から発行された演算実行命令におけるソースオペランドの組合せパターンに基づいて、指示された演算を実行させる汎用演算器を選択する。ディスパッチャ４７０は、例えば、図１１、図１５、図１８のいずれかの処理手順に従って、汎用演算器を選択すればよい。また、例えば、ディスパッチャ４７０が図１５または図１８の処理手順に従って汎用演算器を選択する場合には、ディスパッチャ４７０の内部に、演算実行命令内のソースオペランドを転置する回路が設けられればよい。ただし、ソースオペランドを転置する必要がある演算実行命令（上記のパターン３に対応）を汎用演算器１２０，１３０ではなく汎用演算器１１０に実行させる場合には、ソースオペランドを転置する必要はなくなる。
【０３０１】
以上の第６の実施の形態においても、レジスタファイル３００から演算器への読み出しパスが増大することを抑制しつつ、演算器の設置数を多くすることができる、という効果を得ることができる。
【０３０２】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  ２つのオペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な第１の演算器と、
２つのオペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される第２の演算器と、
入力された演算実行命令に基づき、前記入力された演算実行命令に係る演算における２つのオペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、判定結果に応じて前記入力された演算実行命令に係る演算を前記第１の演算器と前記第２の演算器のいずれかに実行させる制御部と、
を有することを特徴とする演算処理装置。
【０３０３】
（付記２）  ２つのオペランドのそれぞれとして即値のみが入力される第３の演算器をさらに有し、
前記制御部は、前記入力された演算実行命令に係る演算における２つのオペランドがいずれも即値であると判定した場合に、前記入力された演算実行命令に係る演算を前記第３の演算器に実行させる、
ことを特徴とする付記１記載の演算処理装置。
【０３０４】
（付記３）  前記第２の演算器は、オペランドの入力を受ける入力ポートとして、前記入力された演算実行命令の第１のソースオペランドに対応する第１の入力ポートと、前記入力された演算実行命令の第２のソースオペランドに対応する第２の入力ポートとを備え、
前記制御部は、前記入力された演算実行命令の第２のソースオペランドにレジスタが指定され、前記入力された演算実行命令の第１のソースオペランドにレジスタまたは即値のいずれかが指定されていた場合、前記入力された演算実行命令に係る演算を前記第２の演算器に実行させる、
ことを特徴とする付記１または２記載の演算処理装置。
【０３０５】
（付記４）  前記制御部は、前記入力された演算実行命令に係る演算が可換演算であり、前記入力された演算実行命令の第１のソースオペランドに即値が指定され、前記入力された演算実行命令の第２のソースオペランドにレジスタが指定されていた場合、前記入力された演算実行命令の第１のソースオペランドと第２のソースオペランドとを入れ替え、入れ替え後の演算実行命令に係る演算を前記第２の演算器に実行させることを特徴とする付記３記載の演算処理装置。
【０３０６】
（付記５）  前記制御部は、前記入力された演算実行命令に係る演算が非可換演算であり、前記入力された演算実行命令の第１のソースオペランドに即値が指定され、前記入力された演算実行命令の第２のソースオペランドにレジスタが指定されていた場合、前記入力された演算実行命令に係る演算を前記第２の演算器に実行させるとともに、前記第２の演算器に対して入力される２つのオペランドを入れ替えて演算を行うように制御することを特徴とする付記３または４記載の演算処理装置。
【０３０７】
（付記６）  前記第１の演算器および前記第２の演算器にそれぞれ対応付けて設けられ、演算実行命令を自身が備える演算キューに一時的に保持し、演算キュー内の演算実行命令を発行準備が整った演算実行命令から順に自身に対応する演算器に発行するリザベーションステーションを備え、
前記制御部は、前記入力された演算実行命令に係る演算が非可換演算であり、前記入力された演算実行命令の第１のソースオペランドに即値が指定され、前記入力された演算実行命令の第２のソースオペランドにレジスタが指定されていた場合、前記入力された演算実行命令を前記第２の演算器に対応するリザベーションステーションの演算キューに登録するとともに、登録した演算実行命令にソースオペランドを入れ替えるように指示する指示情報を付加し、
前記第２の演算器に対応するリザベーションステーションは、前記指示情報が付加された演算実行命令を前記第２の演算器に発行する際、前記第２の演算器に対して入力される２つのオペランドを入れ替えるように指示する、
ことを特徴とする付記５記載の演算処理装置。
【０３０８】
（付記７）  前記制御部は、前記入力された演算実行命令に係る演算における２つのオペランドの両方がレジスタからの読み出しデータであると判定した場合、前記入力された演算実行命令に係る演算を前記第１の演算器に実行させ、前記入力された演算実行命令に係る演算における２つのオペランドのうち少なくとも一方が即値であると判定した場合、前記入力された演算実行命令に係る演算を前記第１の演算器または前記第２の演算器のいずれかに実行させることを特徴とする付記１または２記載の演算処理装置。
【０３０９】
（付記８）  前記制御部は、前記入力された演算実行命令のソースオペランドにおいて定数を出力するレジスタが指定された場合、当該ソースオペランドに即値が指定されたものと見なして、前記入力された演算実行命令に係る演算を実行させる演算器を選択することを特徴とする付記３〜７のいずれか１つに記載の演算処理装置。
【０３１０】
（付記９）  少なくとも前記第２の演算器が複数設けられ、前記第１の演算器の数より前記第２の演算器の数の方が多いことを特徴とする付記１〜８のいずれか１つに記載の演算処理装置。
【０３１１】
（付記１０）  前記第１の演算器および前記第２の演算器にそれぞれ対応付けて設けられ、演算実行命令を自身が備える演算キューに一時的に保持し、演算キュー内の演算実行命令を発行準備が整った演算実行命令から順に自身に対応する演算器に発行するリザベーションステーションを備え、
前記制御部は、前記入力された演算実行命令に係る演算における２つのオペランドのうち少なくとも一方が即値であると判定したとき、前記第２の演算器に対応するリザベーションステーションの演算キューに空きエントリがある場合には、当該演算キューに対して前記入力された演算実行命令を登録し、前記第２の演算器に対応するリザベーションステーションの演算キューに空きエントリがない場合には、前記入力された演算実行命令を前記第１の演算器に対応するリザベーションステーションの演算キューに登録する、
ことを特徴とする付記１または２記載の演算処理装置。
【０３１２】
（付記１１）  前記制御部は、並列に入力されたそれぞれの演算実行命令に係る演算を前記第１の演算器と前記第２の演算器のいずれに実行させるかを判定する複数の判定部を備え、
前記各判定部には優先度が付与され、
前記制御部は、前記複数の判定部のうち２以上の判定部が、入力された演算実行命令に係る演算を前記第２の演算器に実行させると同時に判定した場合、前記第２の演算器に対応するリザベーションステーションの演算キューにおける空きエントリに対して、優先度の高い判定部からの演算実行命令を優先的に登録する、
ことを特徴とする付記１０記載の演算処理装置。
【０３１３】
（付記１２）  前記制御部は、前記複数の判定部のうち２以上の判定部が、入力された演算実行命令に係る演算を前記第２の演算器に実行させると同時に判定した場合、前記第２の演算器に対応するリザベーションステーションの演算キューにおける空きエントリに対して、優先度の高い判定部からの演算実行命令を優先的に登録した結果、前記第２の演算器に対応するリザベーションステーションの演算キューに演算実行命令を登録できない判定部が発生した場合には、当該判定部からの演算実行命令を前記第１の演算器に対応するリザベーションステーションの演算キューにおける空きエントリに登録することを特徴とする付記１１記載の演算処理装置。
【０３１４】
（付記１３）  制御部が、入力された演算実行命令に基づき、前記入力された演算実行命令に係る演算における２つのオペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、
前記制御部が、判定結果に応じて、前記入力された演算実行命令に係る演算を、２つのオペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な第１の演算器と、２つのオペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される第２の演算器のいずれかに実行させる、
ことを特徴とする演算処理方法。
【符号の説明】
【０３１５】
１  演算処理装置
１１，１２  演算器
１１ａ，１１ｂ，１２ａ，１２ｂ  入力ポート
１３  制御部
１４  レジスタファイル
【図１】
0005625903.tif 000002
【図２】
0005625903.tif 000003
【図３】
0005625903.tif 000004
【図４】
0005625903.tif 000005
【図５】
0005625903.tif 000006
【図６】
0005625903.tif 000007
【図７】
0005625903.tif 000008
【図８】
0005625903.tif 000009
【図９】
0005625903.tif 000010
【図１０】
0005625903.tif 000011
【図１１】
0005625903.tif 000012
【図１２】
0005625903.tif 000013
【図１３】
0005625903.tif 000014
【図１４】
0005625903.tif 000015
【図１５】
0005625903.tif 000016
【図１６】
0005625903.tif 000017
【図１７】
0005625903.tif 000018
【図１８】
0005625903.tif 000019
【図１９】
0005625903.tif 000020
【図２０】
0005625903.tif 000021
【図２１】
0005625903.tif 000022
【図２２】
0005625903.tif 000023
【図２３】
0005625903.tif 000024
【図２４】
0005625903.tif 000025
【図２５】
0005625903.tif 000026
【図２６】
0005625903.tif 000027