(57)【特許請求の範囲】
【請求項１】
複数の命令を供給するための命令供給手段と、
前記複数の命令を各々解読するための解読手段と、
有効なオペレーションを実行する命令又は命令の集合を決定するための命令発行制御手段と、
前記複数の命令中に各命令の動作が指定され、当該指定に基づいて１つ又は複数のオペレーションを実行するための実行手段とを備えたプロセッサであって、
前記命令発行制御手段は、前記解読手段にて解読された命令群の中から、複数の命令の機能が単一の命令で実現可能であるような少なくとも２つの命令を検出し、前記少なくとも２つの命令を単一の命令として置き換えるとともに、前記単一の命令と前記少なくとも２つの命令に後続する有効な命令とを前記実行手段に転送するように制御する機能を有することを特徴とするプロセッサ。
【請求項２】
請求項１記載のプロセッサにおいて、
前記命令発行制御手段は、当サイクルにて実行対象にも削除対象にも結合対象にもならずに残った命令群を検出し、それらの命令群を次サイクル以降で発行の対象とするように制御する機能を更に有することを特徴とするプロセッサ。
【請求項３】
高級言語で記述されたプログラムのソースコードを実行形式コードに変換するためのコンパイル装置であって、
前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直すための命令スケジューリング手段を備え、
前記命令スケジューリング手段は、
並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行うための命令再配置手段を有し、
前記命令再配置手段は、複数の命令の機能が単一の命令で実現可能であって、いずれの実行条件ともが真となる場合がある少なくとも２つの命令の組み合わせを検出し、前記少なくとも２つの命令を構成要素に含む命令の集合が同一サイクルで並列実行されるよう配置することを特徴とするコンパイル装置。
【請求項４】
請求項３記載のコンパイル装置において、
前記命令スケジューリング手段は、前記命令再配置手段の結果に基づき、命令内に並列実行の境界であるか否かを示す並列実行境界情報を付加するための実行境界付加手段を更に有することを特徴とするコンパイル装置。
【請求項５】
請求項３記載のコンパイル装置において、
同一サイクルで並列実行されるよう配置された前記命令の集合を構成する命令の数は、前記少なくとも２つの命令を構成する命令の数より多いことを特徴とするコンパイル装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ及びコンパイル装置に関し、特に並列処理において演算器の効率的活用により性能の向上を図る技術に関するものである。
【背景技術】
【０００２】
近年のマイクロプロセッサ応用製品の高機能化及び高速化に伴い、高い処理性能を持つマイクロプロセッサ（以下、単に「プロセッサ」という。）が望まれている。一般に、各命令のスループットを高めるために、１つの命令をいくつかの処理単位（ここでは「ステージ」と呼ぶ）に分割し、各ステージを別々のハードウェアで実行することにより、複数の命令を並行して処理できるようにするパイプライン方式が採用されている。また、パイプライン方式のような空間的な並列処理に加えて、時間的に命令レベルでの並列処理を行うＶＬＩＷ（Very Long Instruction Word）方式やスーパースカラ方式にて性能向上を図っている。
【０００３】
プロセッサの性能向上を妨げる主要因の１つとして分岐処理のオーバーヘッドがある。このオーバーヘッドは、上記パイプライン処理のステージ数が増すほど、命令供給のペナルティが大きくなる。また、命令並列処理を行った場合、並列度が向上すればするほど、分岐命令の頻度が増加し、オーバーヘッドが顕在化してくる。
【０００４】
そこで、このオーバーヘッドを解消する従来技術として、各命令に実行条件を示す情報を付加し、その条件が成立するときにのみ命令で示されたオペレーションを実行する、という条件付き実行方式がある。この方式では、実行時に各命令に付加された実行条件に対応する条件フラグを参照し、条件が成立しなかった場合には、その命令の実行結果を無効化する、すなわち無動作命令として実行させる。
【０００５】
例えば、図１０に示した条件分岐を含むフローの処理を、各命令に実行条件を示す情報を付加する方式で記述すると、図１１のようなプログラムになる。図１１において、Ｃ０及びＣ１は、命令に付加された条件を示しており、それに対応する条件フラグの値が真の場合にはその命令が実行され、偽の場合にはその命令は無動作命令として実行される。この例では、まず命令１（比較命令）の比較結果がＣ０に格納される。それと同時にＣ１にはＣ０と逆の条件が設定される。したがって、命令２と命令３のうちいずれか一方に関して、実際にオペレーションが実行され、残りの一方は無動作命令として実行される。この結果、分岐処理が不要となり、分岐処理のオーバーヘッドを解決している。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
前述の従来の条件付き実行方式では、条件が不成立の場合、当該命令は無動作命令として動作することになり、実質はオペレーションを実行しないことになる。したがって、２命令が並列に記述され、２つの演算器を使用しているにもかかわらず、実際には１つの演算器しか有効に活用できていない。その結果、プログラムに記述された並列度に対して、実効性能が低くなってしまうという問題点がある。
【０００７】
本発明はかかる問題点に鑑みてなされたものであり、ハードウェアの有効利用を達成し、性能を向上させたプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、請求項１の発明は、複数の命令を供給するための命令供給手段と、前記複数の命令を各々解読するための解読手段と、有効なオペレーションを実行する命令又は命令の集合を決定するための命令発行制御手段と、前記複数の命令中に各命令の動作が指定され、当該指定に基づいて１つ又は複数のオペレーションを実行するための実行手段とを備えたプロセッサにおいて、前記命令発行制御手段は、前記解読手段にて解読された命令群の中から、複数の命令の機能が単一の命令で実現可能であるような少なくとも２つの命令を検出し、前記少なくとも２つの命令を単一の命令として置き換えるとともに、前記単一の命令と前記少なくとも２つの命令に後続する有効な命令とを前記実行手段に転送するように制御する機能を有することとしたものである。これにより、元々実行手段中の複数の演算器を使用する予定であった命令を単一の演算器で実行させるようにすることができ、演算器の利用効率が高まり、実効性能を向上させることができる。
【０００９】
請求項２の発明では、前記命令発行制御手段は、当サイクルにて実行対象にも削除対象にも結合対象にもならずに残った命令群を検出し、それらの命令群を次サイクル以降で発行の対象とするように制御する機能を更に有することとした。これにより例外の発生やコンパイル装置の不良により、あるサイクルにて発行されずに残った命令が存在しても、誤動作を引き起こすことなく正確に実行を継続することができる。
【００１０】
また、請求項３の発明は、高級言語で記述されたプログラムのソースコードを実行形式コードに変換するためのコンパイル装置において、前記ソースコード中の命令を、並列実行すべき複数の命令が隣接するように並べ直すための命令スケジューリング手段を備え、前記命令スケジューリング手段は、並列実行可能な命令の集合をサイクル毎に区分できるように命令の並べ替えを行うための命令再配置手段を有し、前記命令再配置手段は、複数の命令の機能が単一の命令で実現可能であって、いずれの実行条件ともが真となる場合がある少なくとも２つの命令の組み合わせを検出し、前記少なくとも２つの命令を構成要素に含む命令の集合が同一サイクルで並列実行されるよう配置することとしたものである。これにより、条件付き実行方式を採用するプロセッサにおいて、命令の結合を考慮して、搭載された演算器の個数以上の数の命令を１サイクルに配置することができるようになり、実効性能を向上させることができる。
【００１１】
請求項４の発明では、前記命令スケジューリング手段は、前記命令再配置手段の結果に基づき、命令内に並列実行の境界であるか否かを示す並列実行境界情報を付加するための実行境界付加手段を更に有することとした。
【００１２】
また、請求項５の発明では、同一サイクルで並列実行されるよう配置された前記命令の集合を構成する命令の数は、前記少なくとも２つの命令を構成する命令の数より多いこととした。
【発明の効果】
【００１３】
本発明によれば、ハードウェアの有効利用を達成し、性能を向上させたプロセッサを提供することができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明に係るプロセッサ、コンパイル装置及びコンパイル方法の実施の形態について、図面を用いて詳細に説明する。
【００１５】
［実施の形態１：プロセッサ］
（命令フォーマットとアーキテクチャの概要）
まず、図１（ａ）〜（ｃ）を用いて、本発明に係るプロセッサが解読実行する命令の構造について説明する。図１（ａ）〜（ｃ）は、本プロセッサの命令フォーマットを示す図である。本プロセッサの各命令は、３２ビットの固定長であり、各命令は１ビットの並列実行境界情報（Ｅ：end bit）１０を保持している。この情報は、当該命令とそれに後続する命令との間に並列実行の境界が存在するか否かを示すものである。具体的には、並列実行境界情報Ｅが“１”の場合にはその命令と後続命令との間に並列実行の境界が存在し、並列実行境界情報Ｅが“０”の場合には並列実行の境界が存在しないことになる。この情報の利用方法については後で述べる。
【００１６】
また、各命令は３ビットの実行条件情報（Ｐ：predicate）１１を保持している。この実行条件情報Ｐは、後述する図５中の８個の条件フラグＣ０〜Ｃ７（３１１）のうち当該命令を実行するか否かの条件が格納された条件フラグを指定するものである。この実行条件情報Ｐで指定された条件フラグの値が“１”の場合には当該命令で指定されたオペレーションを実行し、条件フラグの値が“０”の場合にはオペレーションを実行しない。
【００１７】
各命令の命令長から並列実行境界情報Ｅと実行条件情報Ｐとを除いた２８ビットの部分にてオペレーションを指定する。具体的には、“Ｏｐ１”、“Ｏｐ２”及び“Ｏｐ３”のフィールドでは、オペレーションの種類を表すオペコードを、“Ｒｓ”のフィールドでは、ソースオペランドとなるレジスタのレジスタ番号を、“Ｒｄ”のフィールドでは、デスティネーションオペランドとなるレジスタのレジスタ番号をそれぞれ指定する。また、“ｉｍｍ”のフィールドでは、演算用定数オペランドを指定する。そして、“ｄｉｓｐ”のフィールドでは、変位（ディスプレースメント）を指定する。
【００１８】
次に、図２（ａ）及び（ｂ）を用いて、本プロセッサのアーキテクチャの概要について説明する。本プロセッサは、静的な並列スケジューリングを前提としたプロセッサである。
【００１９】
命令の供給は、図２（ａ）に示すように、毎サイクル１２８ビット固定長の命令供給単位（ここでは「パケット」と呼ぶ。）で４命令ずつ供給する。そして、命令の実行は、図２（ｂ）に示すように、１サイクルで並列実行の境界までの命令（ここでは「実行単位」と呼ぶ。）を同時実行する。つまり、各サイクルにおいて並列実行境界情報Ｅが“１”である命令までの命令を並列実行することになる。供給されながら実行されなかった命令は、命令バッファ内に残され、次のサイクル以降で実行の対象となる。
【００２０】
つまり、このアーキテクチャでは、固定長のパケット単位で命令を供給しておき、静的に求めた情報を元に、各サイクルにおいて並列度に応じた適切な数の命令を発行していく、ということになる。この手法をとることにより、通常の固定長命令のＶＬＩＷ方式で発生していた無動作命令（ｎｏｐ命令）が全く無くなり、コードサイズを削減することができる。
【００２１】
（プロセッサのハードウェア構成）
図３は、本発明に係るプロセッサのハードウェア構成を示すブロック図である。本プロセッサは、２つの演算器を持つ並列実行プロセッサであり、大きく分けて、命令供給部２０、解読部３０、実行部４０から構成される。
【００２２】
命令供給部２０は、図示されていない外部メモリから命令群を供給し、解読部３０に出力するものであり、命令フェッチ部２１、命令バッファ２２及び命令レジスタ２３からなる。
【００２３】
命令フェッチ部２１は、３２ビットのＩＡ（インストラクションアドレス）バス及び１２８ビットのＩＤ（インストラクションデータ）バスを通じて図示されていない外部メモリから命令のブロックをフェッチし、内部の命令キャッシュに保持するとともに、ＰＣ（プログラムカウンタ）部４２から出力されたアドレスに相当する命令群を命令バッファ２２に供給する。
【００２４】
命令バッファ２２は、１２８ビットのバッファを２個備えており、命令フェッチ部２１によって供給された命令を蓄積しておくために用いられる。命令バッファ２２へは、命令フェッチ部２１から１２８ビット単位でパケットが供給される。命令バッファ２２に蓄積された命令は、命令レジスタ２３の適切なレジスタに出力される。
【００２５】
命令レジスタ２３は、４個の３２ビットレジスタ２３１〜２３４からなり、命令バッファ２２から送られてきた命令を保持するためのものである。命令レジスタ２３の周辺については、別の図面において更に詳細な構成を示している。
【００２６】
解読部３０は、命令レジスタ２３に保持された命令を解読し、その解読結果に応じた制御信号を実行部４０に出力するものであり、大きく分けて、命令発行制御部３１、命令デコーダ３２及び命令無効化方法選択部３８からなる。
【００２７】
命令発行制御部３１は、命令レジスタ２３の４個のレジスタ２３１〜２３４に保持された命令に対して、命令内の実行条件情報Ｐと、それに対応する条件フラグとを参照することによって、条件フラグの値が偽である命令に関しては、その命令自体を実質的に削除するといった処理を行う。ただし、命令無効化方法選択部３８で解読部３０が選択された場合に限る。また、命令発行制御部３１は、命令内の並列実行境界情報Ｅを参照することによって、並列実行の境界を越えた命令について、その命令の発行を無効化するといった発行に関する制御を行う。なお、命令発行制御部３１については、別の図面において更に詳細な動作説明を行う。
【００２８】
命令デコーダ３２は、命令レジスタ２３に格納された命令群を解読する装置であり、第１命令デコーダ３３、第２命令デコーダ３４、第３命令デコーダ３５及び第４命令デコーダ３６からなる。これらのデコーダ３３〜３６の各々は、基本的に１サイクルに１つの命令を解読し、実行部４０に制御信号を与える。また、命令内に置かれた定数オペランドについては、各命令デコーダから実行部４０のデータバス４８に転送される。
【００２９】
命令無効化方法選択部３８は、条件フラグが偽であり実行する必要のない命令を、解読部３０にて無効化するのか実行部４０にて無効化するのかを選択する。具体的には、後述する命令発行制御部３１の条件フラグ有効情報３１２（図５）にて、当該命令の条件フラグが有効である、つまり確定していると示された場合には、解読部３０にて無効な命令の削除を行い、そうでない場合には、実行部４０の書き込み制御部４６にて当該命令の実行結果の書き込みを無効化する。
【００３０】
実行部４０は、解読部３０での解読結果に基づいて、最大２つのオペレーションを並列実行する回路ユニットであり、実行制御部４１、ＰＣ部４２、レジスタファイル４３、第１演算器４４、第２演算器４５、書き込み制御部４６、オペランドアクセス部４７及びデータバス４８，４９からなる。
【００３１】
実行制御部４１は、解読部３０での解読結果に基づいて実行部４０の各構成要素４２〜４９を制御する制御回路や配線の総称であり、タイミング制御、動作許可禁止制御、ステータス管理、割り込み制御などの回路を有する。
【００３２】
ＰＣ部４２は、次に解読実行すべき命令が置かれている図示されていない外部メモリ上のアドレスを、命令供給部２０内の命令フェッチ部２１に出力する。
【００３３】
レジスタファイル４３は、６４個の３２ビットレジスタ（Ｒ０〜Ｒ６３）から構成される。これらのレジスタに格納された値は、命令デコーダ３２での解読結果に基づいて、データバス４８を経由して第１演算器４４及び第２演算器４５に転送され、そこで演算が施され、又はそこを単に通過した後に、データバス４９を経由してレジスタファイル４３又はオペランドアクセス部４７に送られる。
【００３４】
第１演算器４４及び第２演算器４５は、それぞれ２個の３２ビットデータに対して算術論理演算を行うＡＬＵや乗算器と、シフト演算を行うバレルシフタとを内部に有し、実行制御部４１による制御の下で演算を実行する。
【００３５】
書き込み制御部４６は、ある命令を実行部４０にて無効化することが命令無効化方法選択部３８にて選択された場合のみ、当該命令の条件フラグの内容が偽であったとき、当該命令の実行結果をレジスタファイル４３に書き込まないように制御を行う。これにより、当該命令に関しては、無動作命令（ｎｏｐ命令）を実行した場合と同等の結果となる。
【００３６】
オペランドアクセス部４７は、レジスタファイル４３と図示されていない外部メモリとの間でオペランドの転送を行う回路である。具体的には、例えば、命令内で、オペコードとして“ｌｄ”（ロード）が置かれていた場合には、外部メモリに置かれていた１ワード（３２ビット）のデータがオペランドアクセス部４７を経てレジスタファイル４３の指定されたレジスタにロードされ、また、オペコードとして“ｓｔ”（ストア）が置かれていた場合には、レジスタファイル４３の指定されたレジスタの格納値が外部メモリにストアされる。
【００３７】
上記ＰＣ部４２、レジスタファイル４３、第１演算器４４、第２演算器４５、書き込み制御部４６及びオペランドアクセス部４７は、図示されるように、データバス４８（Ｌ１バス、Ｒ１バス、Ｌ２バス、Ｒ２バス）及びデータバス４９（Ｄ１バス、Ｄ２バス）で接続されている。なお、Ｌ１バス及びＲ１バスは第１演算器４４の２つの入力ポートに、Ｌ２バス及びＲ２バスは第２演算器４５の２つの入力ポートに、Ｄ１バス及びＤ２バスは第１演算器４４及び第２演算器４５の出力ポートにそれぞれ接続されている。
【００３８】
（命令レジスタ２３の周辺の構成と命令発行制御部３１の動作）
図４は、命令レジスタ２３の周辺の構成を示すブロック図である。図中、破線の矢印は制御信号を表す。
【００３９】
命令レジスタ２３は、Ａレジスタ２３１、Ｂレジスタ２３２、Ｃレジスタ２３３及びＤレジスタ２３４の４個の３２ビットレジスタからなる。命令レジスタ２３には、命令バッファ２２から命令が供給される。
【００４０】
第１〜第４命令デコーダ３３，３４，３５，３６は、各々３２ビットの命令を入力とし、それを解読して、その命令の動作に関する制御信号を出力するとともに、命令内に配置された定数オペランドを出力する。図４の５０及び５１は、各々実行が確定した命令の定数オペランドである。
【００４１】
また、第２〜第４命令デコーダ３４，３５，３６には、制御信号として１ビットの無動作命令フラグが入力される。このフラグを“１”にセットすると、そのデコーダは出力として無動作命令に相当する制御信号を出力する。つまり、無動作命令フラグをセットすることにより、その命令デコーダのデコードを無効化することができる。
【００４２】
そして、命令発行制御部３１は、命令レジスタ２３に格納された命令内の情報を参照して、並列実行の境界以降の命令のデコードを無効化するための無動作命令フラグの生成と、実行条件が真であり、かつ実行部４０でオペレーションを実行すべき有効な命令を選択するための実行命令セレクタ３７１，３７２の制御と、それに対応した制御信号を選択するための実行命令セレクタ３７３，３７４の制御とを行う。
【００４３】
図５は、本プロセッサの命令発行制御部３１とその周辺回路の構成を示したものである。命令発行制御部３１は、まず各命令内の並列実行境界情報Ｅを参照し、このサイクルでどこまでの命令を発行するのかを決める。そして、このサイクルで発行されない命令に対応する命令デコーダの無動作命令フラグを“１”にセットすることにより、そのデコーダの出力を無動作命令に相当する制御信号にする。この無動作命令フラグの生成は、図５の命令発行制御部３１の右半部に示されたような簡単な論理回路（ＯＲゲート）３１４，３１５で実現することができる。それと同時に、どれだけの命令が発行されずに残ったのかの情報を命令バッファ２２に伝達する。
【００４４】
具体的に説明すると、Ａレジスタ２３１の命令の並列実行境界情報Ｅが“１”の場合には、第２、第３及び第４命令デコーダ３４，３５，３６のデコードを無効化する。また、Ｂレジスタ２３２の命令の並列実行境界情報Ｅが“１”の場合には、第３及び第４命令デコーダ３５，３６のデコードを無効化する。そして、Ｃレジスタ２３３の命令の並列実行境界情報Ｅが“１”の場合には、第４命令デコーダ３６のデコードを無効化することになる。
【００４５】
更に、命令発行制御部３１は、各命令内の実行条件情報Ｐを参照し、条件フラグが偽となる命令、すなわち実行する必要のない命令に関して、その命令自体を実質的に削除してしまうように、図４の実行命令セレクタ３７１〜３７４を制御する。本プロセッサでは、各サイクル最大４命令をデコードするが、実際にオペレーションが実行されるのはたかだか２命令ということになる。これによって、実行条件が偽の場合に実行部４０にて無動作命令が実行されてしまい、演算器４４，４５の利用効率が悪くなるという問題点を解決している。
【００４６】
これを実現するために、命令発行制御部３１は、実行命令選択制御部３１３を備えている。実行命令選択制御部３１３は、８個の条件フラグ（Ｃ０〜Ｃ７）３１１のうち命令内に指定された実行条件情報Ｐに対応する条件フラグを参照することにより、オペレーションを実行する必要のない命令を検出し、その命令を選択せず、後続の有効な命令を選択するように実行命令セレクタ３７１〜３７４を制御する。非選択の命令自体が実質的に削除されることになる。条件フラグ３１１は８個の１ビットレジスタＣ０〜Ｃ７からなり、各命令内の３ビットの実行条件情報Ｐをデコードすることにより指定される。ただし、条件フラグＣ７の値は常に“１”であり、常に実行する命令は、実行条件としてＣ７を指定することになる。プログラム中での記述ではＣ７の指定は省略することができる。
【００４７】
ただし、条件フラグを更新する命令において、条件フラグが確定するのは、実行ステージすなわち実行部４０なので、前サイクルにおいて、ある条件フラグを更新する命令を実行している場合、次サイクルの解読ステージすなわち解読部３０にてその条件フラグは確定しておらず、命令の削除可否の判断を行うことができない。この状態を検出するために、条件フラグ有効情報３１２が備えられている。
【００４８】
条件フラグ有効情報３１２は、各条件フラグ毎にその値が有効であるか否かの１ビットの値を保持しており、解読部３０にてある条件フラグを更新する命令を実行することが判明した際に、その条件フラグの有効情報を“０”に設定し、実行部４０においてその条件フラグの値の更新が完了すると、その条件フラグの有効情報を“１”に設定する。
【００４９】
命令発行制御部３１では、各命令の実行条件情報Ｐを参照した後、条件フラグ有効情報３１２を参照して、各実行条件に対応する条件フラグの値が有効であるか否かを検出する。そして、有効でなかった場合、すなわち条件フラグ有効情報３１２の該当ビットが“０”であった場合、当該命令自体の削除は行わない。当該命令はそのまま実行部４０に発行され、条件フラグが確定した時点で、必要であればその命令の実行結果の書き込みを無効化する。
【００５０】
条件フラグの値が有効であった場合、すなわち条件フラグ有効情報３１２の該当ビットが“１”であった場合、当該命令の実行条件情報Ｐで指定された条件フラグ３１１内の１ビットを参照し、その値が“１”であった場合には、その命令をそのまま実行部４０に発行し、値が“０”であった場合には、その命令自体を実質的に削除するように実行命令セレクタ３７１〜３７４を制御する。
【００５１】
つまり、ある命令の実行条件情報Ｐが“０”である場合、直前の命令において対応する条件フラグが更新される場合には、実行部４０においてその命令の実行結果を無効化し、そうでない場合には、解読部３０において、その命令自体を実質的に削除してしまうことになる。
【００５２】
図６は、具体的な命令列を実行した際のパイプライン処理のタイミングを示す図である。ここでは、３つの命令を上から順に１命令ずつ実行した場合を想定している。最初の命令はレジスタＲ０の内容とレジスタＲ１の内容とを比較して、一致していれば条件フラグＣ０に“１”を設定し、そうでなければ“０”を設定する比較命令であり、次の命令は、条件フラグＣ０の内容が“１”の場合のみ、レジスタＲ３の内容からレジスタＲ２の内容の減算を行って、結果をレジスタＲ３に書き込む減算命令であり、最後の命令は、条件フラグＣ０の内容が“１”の場合のみ、レジスタＲ４の内容とレジスタＲ５の内容との加算を行って、結果をレジスタＲ５に書き込む加算命令である。
【００５３】
図６中、各命令の右側に、それぞれの命令の命令フェッチステージ（ＩＦ）、解読ステージ（ＤＥＣ）、実行ステージ（ＥＸ）のタイミングを示している。ここでは、最初の比較命令の結果が偽、すなわちＣ０が“０”になった場合を仮定している。
【００５４】
図６を見てわかるように、最初の比較命令の解読ステージ（ＤＥＣ）にて、Ｃ０を更新する命令であることが検出され、Ｃ０の有効情報が“０”に設定され、実行ステージ（ＥＸ）にて、比較結果が確定した後で、Ｃ０の有効情報が“１”に設定される。
【００５５】
後続の減算命令、加算命令ともにＣ０を条件として実行する命令であるが、比較命令の直後の減算命令に関しては、解読ステージ（ＤＥＣ）の段階でＣ０の値が有効でないため命令自体の削除は行わず、実行ステージ（ＥＸ）に発行され、そのステージにて実行結果が無効化される。一方、加算命令に関しては、解読ステージ（ＤＥＣ）の時点でＣ０の値が確定しているため、解読ステージ（ＤＥＣ）にて命令自体が実質的に削除され、実行ステージ（ＥＸ）へは発行されない。この場合、空いた演算器を加算命令の後続の命令で活用できることになる。
【００５６】
以上のような制御による命令の無効化後においても、発行されずに残った命令が存在した場合、命令発行制御部３１は残った命令の個数を命令バッファ２２に伝達し、命令バッファ２２内でそれらの命令が無効化されず、次のサイクルにおいて再び命令レジスタ２３に転送されるように制御する。
【００５７】
このように、図１に示したような命令フォーマットをとり、図４及び図５に示したような構成にすることで、演算器を有効活用する命令発行制御を行うことができる。
【００５８】
（プロセッサの動作）
次に、具体的な命令を解読実行した場合の本実施形態のプロセッサの動作について説明する。
【００５９】
図７は、条件付き実行を含むプログラムの一部を示す図である。このプログラムは５個の命令で構成されており、各命令の処理内容はニーモニックで表現されている。具体的には、ニーモニック“ａｄｄ”は、定数又はレジスタの格納値とレジスタの格納値との加算を表し、ニーモニック“ｓｕｂ”は、レジスタの格納値からの定数又はレジスタの格納値の減算を表し、ニーモニック“ｓｔ”は、レジスタの格納値のメモリへの転送を表し、ニーモニック“ｍｏｖ”は、定数又はレジスタの格納値のレジスタへの転送を表している。
【００６０】
また、“Ｒｎ（ｎ＝０〜６３）”はレジスタファイル４３の中の１つのレジスタを示す。そして、各命令の並列実行境界情報Ｅについても“０”又は“１”で示してある。更に、実行条件情報Ｐで指定される条件フラグについて、各命令の先頭に“［  ］”で囲んで記述してある。記述していない命令は常に実行する命令である。
【００６１】
以下、各実行単位ごとの本プロセッサの動作を説明する。ただし、ここでは、最初の時点で、条件フラグＣ０の値が“１”、Ｃ１の値が“０”で確定しているものとする。
【００６２】
（実行単位１）
命令１、命令２、命令３及び命令４を含むパケットが外部メモリから供給され、それぞれ命令レジスタ２３に転送される。次に命令発行制御部３１が各命令の並列実行境界情報Ｅを参照する。この場合、命令３の並列実行境界情報が“１”であるため、第４命令デコーダ３６の解読結果を無効化、すなわち無動作命令とする。
【００６３】
次に、命令発行制御部３１は各命令の実行条件情報Ｐを参照する。命令１の実行条件フラグはＣ０であり、Ｃ０の値は“１”で確定しているので、命令１を第１番目の命令として実行するように、オペランドの選択を実行命令セレクタ３７１で制御し、解読結果を選択するように実行命令セレクタ３７３を制御する。次に命令２の実行条件フラグはＣ１であり、Ｃ１の値は“０”で確定しているので、命令２自体は実質的に削除し、オペレーションの実行は行わない。そして、後続の命令３は常に実行される命令なので、命令３を第２番目の命令として実行するように、オペランドの選択を実行命令セレクタ３７２で制御し、解読結果を選択するように実行命令セレクタ３７４を制御する。結果的に命令１と命令３が実行する命令として実行部４０に送られ、発行されなかった命令４は、命令バッファ２２内に残される。
【００６４】
実行部４０では、レジスタＲ０の格納値に１を加えた値がレジスタＲ０に格納され、レジスタＲ１の格納値とレジスタＲ２の格納値とを加えた値がレジスタＲ２に格納される。
【００６５】
（実行単位２）
命令バッファ２２に残された命令４と、新たに外部メモリから供給された命令５とが順に命令レジスタ２３に転送される。次に命令発行制御部３１が各命令の並列実行境界情報Ｅを参照する。この場合、命令５の並列実行境界情報が“１”であるため、第３命令デコーダ３５及び第４命令デコーダ３６の解読結果を無効化、すなわち無動作命令とする。
【００６６】
命令４及び命令５は、共に常に実行される命令であるので、第１番目の命令として命令４を、第２番目の命令として命令５を実行部４０に送るように、実行命令セレクタ３７１〜３７４を制御する。これで、供給された全ての命令が発行されたことになる。
【００６７】
実行部４０では、レジスタＲ０の格納値が外部メモリ内のレジスタＲ３で示されるアドレスに転送され、レジスタＲ２の格納値がレジスタＲ４に転送される。
【００６８】
以上のように、図７に示したプログラムは、本プロセッサにおいて２つの実行単位で実行される。本プロセッサでは、演算器４４，４５の個数より多くの命令をデコードしておき、不要な命令を適宜削除することにより、これら演算器４４，４５の効率的な活用を図っている。この例においても、各サイクルとも、実行部４０において２つのオペレーションを実行しており、搭載された演算器４４，４５が効率的に活用されている。
【００６９】
（従来の命令発行制御部を持つプロセッサとの比較）
次に、図７に示した処理を、従来技術として挙げた、条件実行命令を全て実行部へ発行し、この実行部において適宜無効化するようなプロセッサに行わせた場合を仮定して、本発明に係るプロセッサの場合と比較する。
【００７０】
図８は、従来のプロセッサの命令レジスタの周辺の構成を示すブロック図である。従来のプロセッサとしては、本発明のプロセッサと同様に２つの演算器を持つものとし、命令フォーマットは、図１の本発明のプロセッサの命令フォーマットと同様とする。２並列のプロセッサなので、命令レジスタ２３ａはＡレジスタ２３１ａ及びＢレジスタ２３２ａを、命令デコーダ３２ａは第１命令デコーダ３３ａ及び第２命令デコーダ３４ａをそれぞれ備える。５０ａ、５１ａは各々定数オペランドである。命令発行制御部３１ａでは、Ａレジスタ２３１ａに格納された命令の並列実行境界情報Ｅに応じて、第２命令デコーダ３４ａの解読結果を無効化する、という制御を行う。
【００７１】
図９は、図７に示したプログラムの処理を、従来の命令発行制御部３１ａを持つプロセッサで実行させるプログラムを示す図である。図９のプログラムは、並列実行境界情報Ｅ以外の部分は、図７のプログラムと同一である。並列実行境界情報Ｅは、最大２命令が同時発行されるように設定されている。
【００７２】
以下、各実行単位ごとの従来のプロセッサの動作を説明する。ただし、ここでは、最初の時点で、条件フラグＣ０の値が“１”、Ｃ１の値が“０”で確定しているものとする。
【００７３】
（実行単位１）
命令１、命令２、命令３及び命令４を含むパケットが外部メモリから供給され、命令１と命令２が順に命令レジスタ２３ａに転送される。次に命令発行制御部３１ａがＡレジスタ２３１ａに格納された命令１の並列実行境界情報Ｅを参照する。この場合、命令１の並列実行境界情報Ｅは“０”であるため、第２命令デコーダ３４ａの解読結果は無効化しない。したがって、命令１と命令２の両方を実行部に送ることになる。発行されなかった命令３及び命令４は、命令バッファに残される。
【００７４】
実行部では、命令１の実行条件フラグであるＣ０が“１”であるため、レジスタＲ０の格納値に１を加えた値がレジスタＲ０に格納される。そして、命令２の実行条件フラグであるＣ１が“０”であるため、命令２に対応するオペレーションは実行されないか、もしくは実行後の結果を無効化し、結果的に無動作命令を実行したのと同様になる。
【００７５】
（実行単位２）
命令バッファに残された命令３及び命令４が順に命令レジスタ２３ａに転送され、新たに外部メモリから命令５が供給される。次に命令発行制御部３１ａがＡレジスタ２３１ａに格納された命令３の並列実行境界情報Ｅを参照する。この場合、命令３の並列実行境界情報Ｅが“０”であるため、第２命令デコーダ３４ａの解読結果は無効化しない。したがって、命令３と命令４の両方を実行部に送ることになる。発行されなかった命令５は、命令バッファ２２に残される。
【００７６】
実行部では、命令３及び命令４は共に常に実行される命令であるので、これら２つの命令に対応するオペレーションが実行される。具体的には、レジスタＲ１の格納値とレジスタＲ２の格納値とを加えた値がレジスタＲ２に格納され、レジスタＲ０の格納値が外部メモリ上の、レジスタＲ３で示されるアドレスに転送される。
【００７７】
（実行単位３）
命令バッファに残された命令５が命令レジスタ２３ａに転送される。次に命令発行制御部３１ａがＡレジスタ２３１ａに格納された命令５の並列実行境界情報Ｅを参照する。この場合、命令５の並列実行境界情報Ｅが“１”であるため、第２命令デコーダ３４ａの解読結果を無効化する。したがって、命令５のみが発行される。これで、供給された全ての命令が発行されたことになる。
【００７８】
実行部では、命令５は常に実行される命令であるので、命令５に対応したオペレーションが実行される。具体的には、レジスタＲ２の格納値がレジスタＲ４に転送される。
【００７９】
以上のように、図９に示したプログラムは、従来の命令発行制御部３１ａを持つプロセッサにおいて３つの実行単位で実行され、本発明のプロセッサの場合に比べて、１つ多い実行単位で実行されることになる。これは、従来の命令発行制御部３１ａを持つプロセッサでは、条件付き実行命令の条件が偽であった場合、その命令は無動作命令として実行されてしまい、搭載されている演算器を無駄に使用してしまうところに起因している。
【００８０】
［実施の形態２：コンパイル装置］
次に、上述の実施の形態１におけるプロセッサで実行するコードを生成するためのコンパイル装置、及びそのコンパイル方法に関する実施の形態について説明する。
【００８１】
（用語説明）
まず、ここで用いる用語を説明する。
・オブジェクトコード
再配置可能情報を含んだ対象プロセッサ向け機械語プログラムをいう。連結編集を行い未確定アドレスを決定することにより実行形式コードに変換することができる。
・プレデセッサ
ある命令を実行するために、それ以前に実行しておく必要のある命令をいう。
・実行グループ
コンパイル装置によって、同一サイクルに並列実行可能であるものをグループ化した命令群をいう。
・基本ブロック
実行が先頭から始まり、必ず最後まで実行される一連の命令列のことであり、ブロックの途中でブロックを出ることや、ブロックの途中からブロックに入ることがないものをいう。
【００８２】
（対象プロセッサ）
本コンパイル装置が対象とするプロセッサは、上記実施の形態１で説明したプロセッサである。このプロセッサは、コンパイル装置にて付与された並列実行境界情報Ｅを参照することにより実行グループを生成し、ハードウェアでは並列実行可能か否かの判定を行わない。したがって、並列実行境界間すなわち実行グループ内に、同時実行可能な命令が正しく配置されていることは、コンパイル装置が保証することになる。並列実行境界間に配置できる命令に対する制約は、
（１）並列実行グループ中の命令の総数は４を越えない（命令デコーダの制約）、
（２）並列実行グループ中の命令のうち、実際に実行部にてオペレーションが実行される命令の個数は２を越えない（実行命令数の制約）、
（３）並列実行グループ中の命令のうち、実際に実行部にて使用する対象プロセッサ資源の総和は、２ＡＬＵユニット、１メモリアクセスユニット、１分岐ユニットを越えない（演算器の制約）、
である。命令は、これら３つの制約が満たされた場合のみ並列実行ができる。
【００８３】
（コンパイル装置の構成）
図１２は、本発明の実施形態２におけるコンパイル装置の構成及び関連するデータを示すブロック図である。本コンパイル装置は、高級言語で書かれたソースコード１２０からオブジェクトコード１３０を生成するプログラム処理装置であり、コンパイラ上流部１００、アセンブラコード生成部１０１、命令スケジューリング部１０２、オブジェクトコード生成部１０３からなる。
【００８４】
コンパイラ上流部１００は、ファイル形式で保存されている高級言語ソースコード１２０を読み込み、構文解析及び意味解析を行って内部形式コードを生成する。更に必要に応じて、最終的に生成される実行形式コードのサイズやその実行時間が短くなるように内部形式コードを最適化する。
【００８５】
アセンブラコード生成部１０１は、コンパイラ上流部１００により生成、最適化された内部形式コードからアセンブラコードを生成する。
【００８６】
コンパイラ上流部１００及びアセンブラコード生成部１０１での処理は本発明の主眼ではなく、また、従来のコンパイル装置で行われてきた処理と同等であるので、詳細説明は省略する。
【００８７】
（命令スケジューリング部１０２）
命令スケジューリング部１０２は、アセンブラコード生成部１０１で生成されたアセンブラコードに対し、命令に付加された各条件間の排他性の解析、命令間の依存関係の解析、命令の再配置（命令順の並べ替え）及び並列実行境界の付加を行い、アセンブラコードを対象プロセッサ向けに並列化する。命令スケジューリング部１０２は、条件排他性解析部１１０、依存関係解析部１１１、命令再配置部１１２及び実行境界付加部１１３から構成される。
【００８８】
命令スケジューリング部１０２内では、まず条件排他性解析部１１０が動作する。その後、各基本ブロックごとに、依存関係解析部１１１、命令再配置部１１２及び実行境界付加部１１３が動作する。各部の詳細な動作は以下のとおりである。
【００８９】
条件排他性解析部１１０は、条件フラグの排他性を解析し、各基本ブロックの先頭と、各条件フラグ更新命令に対して条件排他情報テーブルを生成していく。条件排他情報テーブルは、全ての条件フラグの組み合わせに対して、条件が排他であるか否かの情報を持つ配列である。条件排他情報テーブルの具体例については、後で示す（図１６）。ここでは、全ての条件フラグの組み合わせが排他でない情報テーブルのことを無排他テーブルと呼ぶ。
【００９０】
図１３は、条件排他性解析部１１０での処理手順を示すフローチャートである。条件排他性解析部１１０では、各命令に相当するコンパイル装置内部の中間コードを、下向きに探索して行き、各基本ブロックの先頭及び各条件フラグ更新命令に対して、条件排他情報テーブルを設定していく。
【００９１】
まず、現時点で有効である有効テーブルＴｖを無排他テーブルで初期化する（ステップＳ１１）。以後、各基本ブロックについて、下向きに探索していく（ステップＳ１２）。
【００９２】
ある基本ブロックに関する判定（ステップＳ１３）の結果、当該基本ブロックの先行基本ブロックが１つだけの場合は、当該基本ブロック先頭テーブルに有効テーブルＴｖを設定し（ステップＳ１４）、そうでない場合は、その時点での排他関係が特定できないので、当該基本ブロック先頭テーブルに無排他テーブルを設定する（ステップＳ１５）。
【００９３】
次に、基本ブロック内の各命令について探索していく（ステップＳ１６）。比較命令などの条件フラグを更新する命令を発見すると（ステップＳ１７）、その命令が同時に排他な条件を設定する命令であるかどうかを判定する（ステップＳ１８）。同時に排他な条件を設定する命令は、図１１の命令１の条件フラグＣ０とＣ１を更新する比較命令などが該当する。
【００９４】
同時に排他な条件を設定する命令である場合、まず有効テーブルＴｖ内の当該命令で更新する条件フラグに該当する部分を全て偽に設定しておいて、その後、当該命令で排他に設定される条件フラグの組のみ真に設定する。そして、当該命令用の排他情報テーブルに有効テーブルＴｖを設定する（ステップＳ１９）。
【００９５】
同時に排他な条件を設定しない命令である場合、当該命令で更新する条件フラグに関する排他性が崩れるので、有効テーブルＴｖ内の当該命令で更新する条件フラグに該当する部分を全て偽に設定する。そして、当該命令用の排他情報テーブルに有効テーブルＴｖを設定する（ステップＳ２０）。
【００９６】
以上を、各基本ブロック毎に繰り返していく（ステップＳ２１、Ｓ２２）。これによって、全基本ブロックの先頭及び条件フラグを設定する全ての命令について、それぞれの時点での条件フラグの排他性に関する情報を保持することができる。
【００９７】
依存関係解析部１１１は、処理対象に含まれる命令間の依存関係を解析し、依存グラフとして表現する。命令間の依存関係には以下の３種類がある。いずれの依存関係にある命令も、元の命令順を変更するとプログラムの意味が異なってしまうため、命令並べ替え時においても依存関係は守る必要がある。
・データ依存関係
ある資源を定義する命令と、同じ資源を参照する命令との間の依存関係。
・逆依存関係
ある資源を参照する命令と、同じ資源を定義する命令との間の依存関係。
・出力依存関係
ある資源を定義する命令と、同じ資源を定義する命令との間の依存関係。
【００９８】
依存関係解析部１１１では、処理対象に含まれる各命令毎に、これに対応するノード（節）を、また各依存関係毎に、これに対応するエッジ（矢印）を生成し、依存グラフを生成する。この際、参照及び定義する資源に関して依存のある２命令間であっても、それぞれの命令の実行条件が排他である、すなわち同時に成立することはないことが保証されれば、それら２命令が共に資源を参照又は定義することはありえないので、その２命令間には依存関係が存在しないことになる。したがって、それら２命令に対応するノード間にはエッジを生成しない。
【００９９】
これを実現するため、先行する命令Ａと命令Ｂに関して、条件排他性解析部１１０で設定された排他情報テーブルを利用して、２命令の実行条件が排他であるか否かを検出する必要がある。この排他性の検出を行うアルゴリズムを図１４に示す。
【０１００】
まず、命令Ａの実行条件フラグをＣｎとする（ステップＳ３１）。そして、命令Ａの実行時点での有効な排他情報を求めるため、命令Ａから上向きに探索していき、条件フラグを更新する命令を発見するか、基本ブロックの先頭に到達した時点で、該当する排他情報テーブルを有効テーブルＴｖとする（ステップＳ３２）。
【０１０１】
次に、命令Ｂまでの経路をたどるため、命令Ａから下向きに探索していく（ステップＳ３３）。命令Ｂを発見した場合（ステップＳ３４）、その時点での有効テーブルＴｖを参照して、条件フラグＣｎと命令Ｂの実行条件との排他関係を求めて終了する（ステップＳ３５）。Ｃｎ以外の条件フラグを更新する命令を発見した場合（ステップＳ３６）、その命令に対応する排他情報テーブルで有効テーブルＴｖを更新して、継続する（ステップＳ３７）。条件フラグＣｎを更新する命令を発見した場合（ステップＳ３８）、排他性を保証できなくなるので偽を返す（ステップＳ３９）。以上を繰り返す（ステップＳ４０）。
【０１０２】
このようにして、資源の定義及び参照関係と、実行条件の排他性との両方を解析して、各命令間の依存関係を構築していく。
【０１０３】
具体例として、図１５に示したアセンブラコードに対する条件排他性解析部１１０及び依存関係解析部１１１の適用結果を説明する。
【０１０４】
図１６は、図１５のアセンブラコードの命令２（比較命令）に対応する条件排他情報テーブルを示す図である。条件排他情報テーブルは、条件フラグＣ０〜Ｃ７の全ての組み合わせに対する排他性を示す配列である。この場合は、命令２によって、条件フラグＣ０と条件フラグＣ１とが排他であることが設定されることになる。
【０１０５】
図１７は、依存関係解析部１１１の出力である依存グラフを示す図である。図１７中、実線はデータ依存関係を、破線は逆依存関係を示す。命令２（比較命令）は命令１で更新されるレジスタＲ０を参照するため、データ依存があり、命令３及び命令４は命令２で更新される条件フラグＣ０及びＣ１を参照するため、データ依存関係がある。ここで、命令３ではレジスタＲ２を更新し、命令４ではレジスタＲ２を参照しているため、一見すると命令３から命令４へのデータ依存関係が存在するように見える。しかし、それぞれの命令の実行条件であるＣ０及びＣ１は命令２によって排他な条件として設定されているため、図１６に示した条件排他情報テーブルを参照することにより２命令が共に実行されることがあり得ないことが判明し、これら２命令間には依存関係は存在しないものとする。
【０１０６】
図１２の説明に戻って、命令再配置部１１２は、依存関係解析部１１１で生成された依存グラフを用いて、処理対象の命令を並べ替え、対象プロセッサ向けの並列化されたアセンブラコードを生成する。命令再配置部１１２の処理の詳細は以下のとおりである。
【０１０７】
図１８は、命令再配置部１１２での処理手順を示すフローチャートである。命令再配置部１１２は、依存関係解析部１１１が生成した依存グラフの全てのノードについて、以下のループ１の処理（ステップＳ５２〜Ｓ６０）を繰り返す（ステップＳ５１、Ｓ６１）。
【０１０８】
まず、命令再配置部１１２は、現時点で配置候補となり得るノードを依存グラフより抽出し配置候補ノード集合とする（ステップＳ５２）。ここで配置候補となり得るノードとは、「プレデセッサが全て配置完了済み」であるノードである。
【０１０９】
次に、命令再配置部１１２は、配置候補ノード集合の全ての候補ノードについて、以下のループ２の処理（ステップＳ５４〜Ｓ５８）を繰り返す（ステップＳ５３、Ｓ５９）。
【０１１０】
まず、配置候補ノード集合から現時点で配置することが最良と思われるノード（以下、単に「最良ノード」と呼ぶ。）を取り出す（ステップＳ５４）。最良ノードの決定方法については後述する。続いて最良ノードが、実際に配置可能か否かを判断し（ステップＳ５５）、可能な場合は仮配置する（ステップＳ５６）。この判断は、前述のプロセッサの解読ステージでの命令自体の削除の効果を有効に活かすため、既に仮配置されているノードと最良ノードとの実行条件の排他性を考慮しつつ、前述の演算器の制約、実行命令数の制約及び命令デコーダの制約を満たすかどうかによって決定する。条件排他性の考慮には、条件排他性解析部１１０の結果を用いる。ただし、実行条件フラグを更新する命令の次のサイクルにおいては、当該実行条件で実行される命令自体の削除は行われないことも考慮する。つまり、この場合は実行条件の排他性を考慮せず、純粋に演算器や実行命令数の制約で配置可能性を判定する。
【０１１１】
続いて、現時点で仮配置されているノード集合を調べ、更に命令を配置することができるか否かを判断する（ステップＳ５７）。配置不可と判断された場合はループ２を終了し処理をステップＳ６０へ移す。
【０１１２】
配置可能と判断された場合、最良ノードが配置されたことによって新たに配置候補となり得るノードが生じたか否かを判断し、新たな配置候補が生じた場合はこれを配置候補ノードに追加する（ステップＳ５８）。ステップＳ５８で新たに配置候補にできるのは、「（現在配置しようとしている）最良ノードのみをプレデセッサとして持ち、かつ、最良ノードとの依存関係が逆依存もしくは出力依存」のノードである。つまり、ここで新たな配置候補になることができるノードは、最良ノードと同じサイクルで実行することはできるが、最良ノードより前のサイクルでは実行できないノードである。
【０１１３】
ループ２が終了した後、仮配置ノード集合に含まれているノードを確定する（ステップＳ６０）。具体的には、仮配置ノード集合に含まれているノードに対応する命令を元の命令列から取り出し、実行境界付加部１１３へ渡すための新たな命令列に再配置する。この段階で配置候補ノードの一部が、同時に実行する命令群としてまとめられ確定したことになる。
【０１１４】
次に、ステップＳ５４における最良ノードの決定方法について述べる。最良ノードは、依存グラフ、仮配置領域を参照して、処理対象の命令全体を最も短時間で実行できるであろう命令をヒューリスティックに選び出す。ここでは現時点での依存グラフにおいて依存グラフの終端までの命令の実行時間総和が最も短いものを選ぶ。この条件に合致する命令が多数ある場合には、元の命令順が早い命令を最良ノードとする。
【０１１５】
再び図１２に戻って、実行境界付加部１１３は、命令再配置部１１２のステップＳ６０で配置が確定した命令群の末尾毎に並列実行境界情報Ｅを設定する。
【０１１６】
オブジェクトコード生成部１０３は、命令スケジューリング部１０２が出力したアセンブラコードをオブジェクトコード１３０に変換し、ファイルとして出力する。
【０１１７】
（コンパイル装置の動作）
次に、本コンパイル装置の特徴的な構成要素の動作について、具体的な命令を用いて説明する。
【０１１８】
図１９は、ソースコードをコンパイラ上流部１００に入力し、アセンブラコード生成部１０１を経て生成されたアセンブラコードである。命令スケジューリング部１０２は図１９のコードを入力として受け取る。図１９に含まれる各命令の意味は以下のとおりである。
・命令１…レジスタＲ０の格納値と定数０とが一致しているかを比較し、真偽を条件フラグＣ０に設定し、その逆の条件を条件フラグＣ１に設定する。
・命令２…条件フラグＣ０の値が真の場合にのみ、レジスタＲ１の格納値とレジスタＲ２の格納値とを加算してレジスタＲ２に格納する。
・命令３…条件フラグＣ１の値が真の場合にのみ、レジスタＲ２の格納値とレジスタＲ３の格納値とを加算してレジスタＲ３に格納する。
・命令４…条件フラグＣ０の値が真の場合にのみ、レジスタＲ１の格納値とレジスタＲ３の格納値とを加算してレジスタＲ３に格納する。
・命令５…条件フラグＣ１の値が真の場合にのみ、レジスタＲ３の格納値とレジスタＲ４の格納値とを加算してレジスタＲ４に格納する。
・命令６…条件フラグＣ０の値が真の場合にのみ、レジスタＲ２の格納値とレジスタＲ４の格納値とを加算してレジスタＲ４に格納する。
・命令７…条件フラグＣ１の値が真の場合にのみ、レジスタＲ３の格納値とレジスタＲ５の格納値とを加算してレジスタＲ５に格納する。
【０１１９】
以下、命令スケジューリング部１０２の動作を説明する。まず、条件排他性解析部１１０と依存関係解析部１１１とが起動され、依存グラフが生成される。図１９のコード例では、命令１で生成した条件フラグＣ０とＣ１が、命令２以降において排他であることを考慮しつつ、資源の定義及び参照関係を解析する。図２０に、生成された依存グラフを示す。
【０１２０】
次に、命令再配置部１１２が起動される。図１８のフローチャートに沿って説明すると、まず第１サイクルで、配置候補ノード集合を生成する（ステップＳ５２）。図２０の依存グラフから、ここでは命令１のみが配置候補ノードとなる。次に最良ノードを取り出す（ステップＳ５４）。ここでは、自動的に命令１が選択される。そして、配置可能判定ステップ（Ｓ５５）において、配置可能であると判定される。更に、配置状態判定ステップ（Ｓ５７）においても、まだ配置可能であると判定されるが、配置候補ノード追加ステップ（Ｓ５８）において追加対象となる命令が存在しないため、配置ノード確定ステップ（Ｓ６０）にて、第１サイクルは命令１のみを発行するように確定される。
【０１２１】
次のサイクルでは、命令２、命令３及び命令４が配置候補ノードとなる。命令２及び命令３が順に最良ノードとして選ばれ、仮配置される。次に、命令４が最良ノードとして選ばれ、配置可能判定ステップ（Ｓ５５）に入る。ここで、条件排他性を考慮した判定が行われるわけであるが、直前のサイクルで実行条件Ｃ０及びＣ１の値が更新されているため、このサイクルではＣ０及びＣ１を実行条件とする命令の解読ステージでの削除は実施されない。したがって、既に仮配置されている命令２及び命令３が削除されることがないので、ハードウェアに搭載した演算器の制限により、命令４は同時発行不可能、すなわち配置不可能と判定される。こうして、第２サイクルでは、命令２及び命令３を発行するように確定される。
【０１２２】
次のサイクルでは、命令４、命令５、命令６及び命令７が配置候補ノードとなる。命令４及び命令５が順に最良ノードとして選ばれ、仮配置される。次に、命令６が最良ノードとして選ばれ、配置可能判定ステップ（Ｓ５５）に入る。ここで、条件排他性を考慮した判定が行われる。命令６が実際にオペレーションを実行する場合、すなわち命令６の実行条件フラグＣ０が真である場合には、条件フラグＣ１は偽であるため、Ｃ１を実行条件とする命令５はオペレーションを実行せず、演算器を使用しない。したがって、命令４及び命令６の組み合わせにおいて演算器の制約を満たしているので、命令６は配置可能と判定される。次に命令７が最良ノードとして選ばれるが、上記と同様に、命令７がオペレーションを実行する場合、命令４及び命令６は削除されるため、命令５及び命令７のみの組み合わせによって演算器の制約を判定し、命令７は配置可能と判定される。こうして、第３サイクルでは、命令４、命令５、命令６及び命令７を発行するように確定される。これで、未配置のノードが無くなったので、命令再配置部１１２の処理が完了する。
【０１２３】
最後に、実行境界付加部１１３が起動される。ここでは、上記の命令再配置部１１２による配置された命令群の末尾の命令に並列実行境界情報Ｅを設定していく。具体的には、命令１、命令３及び命令７の並列実行境界情報Ｅに“１”を設定し、残りの命令の並列実行境界情報Ｅには“０”を設定する。
【０１２４】
以上で、命令スケジューリング部１０２の処理が完了する。続いてオブジェクトコード生成部１０３が起動され、オブジェクトコードが出力される。
【０１２５】
図２１に、最終的な実行形式コードを示す。実際の実行形式コードは１２８ビット単位にまとめられたビット列である。図２１に示した実行形式コードは、本発明に係る２個の演算器を持つプロセッサにて、３つの実行グループで実行される。
【０１２６】
（従来のコンパイル装置との比較）
次に、図１９に示したアセンブラコードを、本発明のコンパイル装置の構成をとらない従来のコンパイル装置にてコンパイルした場合を仮定して、本発明に係るコンパイル装置の場合と比較する。対象プロセッサは、本発明のプロセッサと同様に２個の演算器を備えたプロセッサとする。
【０１２７】
従来のコンパイル装置は、命令再配置部において違いがある。まず、最初のサイクルでは、依存関係のため命令１のみ発行する。次のサイクルでは、命令２、命令３及び命令４が候補となるが、１サイクルに２つという演算器の制約のため、命令２及び命令３のみを発行する。次のサイクルでは、命令４、命令５、命令６及び命令７が候補となるが、演算器の制約のため、命令４及び命令５のみを発行する。次のサイクルでは、命令６及び命令７が候補となり、演算器の制約を満たすため、両方の命令が発行される。こうして、命令再配置が完了する。実行境界付加部では、具体的には、命令１、命令３、命令５及び命令７の並列実行境界情報Ｅに“１”を設定し、残りの命令の並列実行境界情報Ｅには“０”を設定する。以上で命令スケジューリング処理が完了する。
【０１２８】
図２２に、結果として生成される実行形式コードを示す。図２２に示した実行形式コードは、２個の演算器を持つプロセッサにて４つの実行グループで実行される。
【０１２９】
図２１と図２２を比較すると、従来のコンパイル装置の生成コード（図２２）では、本発明のコンパイル装置の生成コード（図２１）の場合に比べ、実行グループが１つ増えている。つまり、実行サイクル数が１サイクル増していることになる。このように実行グループ数が増加したのは、本発明の命令スケジューリング部１０２のような構成をとらなかったために、全ての命令が実行ステージへ発行されるものとして扱ってしまい、ハードウェアに搭載された演算器の個数を上限とした配置しかできないためである。一方、本発明のコンパイル装置では、命令自体の無効化を考慮してハードウェアに搭載された演算器の個数以上の数の命令を１サイクルに配置することが可能であり、演算器を有効活用することができる。
【０１３０】
なお、本実施形態で示されるコンパイル装置の処理手順をフレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどの記録媒体に入れることにより、本実施形態で示されるコンパイル装置をコンピュータで実現できる。
【０１３１】
また、本実施形態で示されるコンパイル装置により生成された実行形式コードをフレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、半導体メモリなどの記録媒体に入れることもできる。
【０１３２】
［実施の形態３：プロセッサ］
次に、上記実施の形態１のプロセッサを拡張したプロセッサの実施の形態について説明する。
【０１３３】
本プロセッサのハードウェア構成については、大部分は前述の第１の実施の形態のプロセッサと同一であるが、実行グループ内に配置される命令群の実行条件情報の配置に制限が加わっている。具体的には、１つの実行グループ内には、同一の実行条件を持つ命令は必ず連続して配置される、という制限である。後述する実施の形態４のコンパイル装置は、この制限に従ってコードを生成する。これによって、プロセッサとしては、命令発行制御部の構成が異なってくることになる。
【０１３４】
（命令発行制御部の構成と動作）
図２３は、本実施の形態のプロセッサの命令発行制御部１４０とその周辺回路の構成を示したものである。図２３中の命令発行制御部１４０のほとんどの部分は、図５に示した実施の形態１のプロセッサのものと同一である。異なる点は、実行命令選択制御部１４１の制御方法と、実行命令選択制御部１４１の後段に命令結合部１４２が追加されていることの２点である。
【０１３５】
まず、実行命令選択制御部１４１は、実施の形態１で示したのと同様に、実行条件が偽となる命令について命令自体を実質的に削除する制御を行うのであるが、前述のように実施の形態１の場合と異なり、命令の配置順に制限が加わっているため、それを積極的に活用する。具体的には、命令配置順には、同一の実行条件情報を持つ命令は連続して配置される、という制限があるので、まず解読後の命令群を各実行条件毎に分類する。命令配置順の制限により、この分類は容易に行うことができる。
【０１３６】
次に、実行条件フラグの値が“０”で確定しているか否かを、分類された各実行条件毎に検査する。“０”で確定している条件フラグを実行条件とする命令群は、まとめて削除するように制御し、実際に実行部４０へ発行すべき命令群を決定する。これによって、条件フラグの検査回数を最小にとどめ、複数の命令の削除可能性を同時に検出することができ、実行部４０へ発行すべき命令の検出を高速かつ簡単に行うことができる。
【０１３７】
次に、実行命令選択制御部１４１による命令の削除後、命令群は命令結合部１４２に入力される。ここでは、実際に実行部４０にてオペレーションを実行することが確定した命令群について、複数の命令を１つの複合命令として結合できるか否かを検出し、結合可能な場合には、当該命令の制御信号を新規複合命令に変更し、オペランドの結合を行い、後続側の命令を実行命令選択制御部１４１と同様に削除するように制御する。こうして、命令結合部１４２からは、ハードウェアとして搭載された演算器の個数に応じた２つの命令に対応する制御信号とオペランドデータとが出力され、実行部４０に転送される。これらの命令は、それぞれ複数の命令の複合命令である可能性もあることになる。
【０１３８】
（プロセッサの動作）
次に、図２４を用いて、本プロセッサの具体的な動作について説明する。図２４は、条件付き実行命令を含むプログラムの一例を示す図である。このプログラムは、４個の命令で構成されており、表記は図９のプログラムと同じである。ニーモニック“ｌｓｒ”は、レジスタの格納値の論理右シフトを表している。
【０１３９】
以下、各実行単位ごとの本プロセッサの動作を説明する。ただし、ここでは、最初の時点で、条件フラグＣ０の値が“０”、Ｃ１の値が“１”で確定しているものとする。
【０１４０】
（実行単位１）
命令１、命令２、命令３及び命令４を含むパケットが外部メモリから供給され、それぞれ命令レジスタ２３に転送される。次に、命令発行制御部１４０が各命令の並列実行境界情報Ｅを参照する。この場合、命令１、命令２、命令３の並列実行境界情報Ｅがいずれも“０”であるため、命令デコーダの解読結果の無効化は行わない。
【０１４１】
次に、命令発行制御部１４０は各命令の実行条件情報Ｐを参照し、実行命令選択制御部１４１にて、オペレーションを実行する命令を選択する。命令１は常に実行する命令である。命令２の実行条件フラグはＣ０であり、Ｃ０の値は“０”で確定しているので、命令２自体は実質的に削除し、オペレーションの実行は行わない。後続の命令３及び命令４の実行条件フラグは共にＣ１であるので、条件フラグＣ１を１度だけ参照し、Ｃ１の値が“１”で確定しているので、命令３と命令４を共に実行対象とする。こうして、命令１、命令３及び命令４が、次の命令結合部１４２に送られる。
【０１４２】
命令結合部１４２では、入力された命令群の全ての組み合わせについて、複合命令が生成可能か否かを判定する。この場合、命令１（シフト命令）と命令４（加算命令）とを結合してシフト加算命令を生成できることを検出する。そして、第１番目の命令として、シフト加算に対応する制御信号とオペランドが、第２番目の命令として、命令３に対応する制御信号とオペランドがそれぞれ実行部４０に送られる。これで、供給された命令は全て発行されたことになる。
【０１４３】
実行部４０では、レジスタＲ３の格納値をレジスタＲ１の格納値の分だけ論理右シフトした値にレジスタＲ２の格納値を加えた値がレジスタＲ２に格納され、レジスタＲ０の格納値に１を加えた値がレジスタＲ０に格納される。
【０１４４】
以上のように、図２４に示したプログラムは、本プロセッサにおいて１つの実行単位で実行される。本プロセッサでは、確定した実行条件による命令自体の削除後、命令同士を結合して１つの複合命令とすることを試みる。これによって、実質の演算効率を高めることが可能となる。また、同一の実行条件を持った命令が連続して配置されるという制限を利用して、実際にオペレーションを実行する命令を解読ステージにて選択する処理の高速化を図っている。
【０１４５】
［実施の形態４：コンパイル装置］
次に上述の実施の形態３におけるプロセッサで実行するコードを生成するコンパイル装置、及びそのコンパイル方法に関する実施の形態について説明する。
【０１４６】
本コンパイル装置の構成については、大部分は前述の第２の実施の形態のコンパイル装置と同一であるが、１つの実行グループ内の命令について、それぞれの実行条件に応じて配置に制限がある点と、プロセッサの解読ステージにおける命令の結合を考慮に入れている点とが異なる。具体的には、命令スケジューリング部の構成が異なることになる。
【０１４７】
（命令スケジューリング部）
本実施の形態のコンパイル装置の命令スケジューリング部は、第２の実施の形態における命令スケジューリング部１０２と同様に、条件排他性解析部、依存関係解析部、命令再配置部、及び実行境界付加部から構成されるが、異なる点は命令再配置部の再配置の方法のみである。
【０１４８】
図２５に、本実施の形態のコンパイル装置の命令再配置部のフローチャートを示す。本実施の形態のコンパイル装置の命令再配置部の処理手順は、実施の形態２のコンパイル装置の命令再配置部１１２の処理手順と大部分は同一であるが、配置可能か否かを判定する部分と、配置ノード確定後に配置順序を調整する点とが異なる。具体的には、図２５中のステップＳ７１〜Ｓ８２のうち、配置可能判定（ステップＳ７５）と配置順序調整（ステップＳ８１）とが、図１８に示したフローと異なることになる。
【０１４９】
実施の形態２のコンパイル装置と同様に、条件排他性解析部及び依存関係解析部を経て、依存グラフが生成され、命令再配置部に移ってくる。そして、条件排他性を考慮した依存グラフに基づいて命令の再配置を行っていくわけであるが、ステップＳ７４にて最良ノードを選択した後、ステップＳ７５にて配置可能判定を行う際に、仮配置済みのノード群と最良ノードについて、実行条件の排他性だけでなく、全ての組み合わせについての命令結合の可能性も考慮して、配置可能判定を行う。つまり、ある２つのノードが結合可能であった場合、それら２つのノードを合わせて１つの命令として扱い、配置可能判定を行う。
【０１５０】
更に、ステップＳ８０にて当該サイクルで配置可能となったノードが確定した後、ステップＳ８１にて配置順序の調整を行う。具体的には、当該サイクルで配置可能となったノード群をそれぞれ実行条件ごとに分類し、同一の実行条件を持つノードが必ず連続して配置されるように、ノードの配置順序を調整する。これによって、ハードウェアにおける制御の簡単化を図っている。
【０１５１】
（コンパイル装置の動作）
図２６を用いて、本コンパイル装置の特徴的な構成要素の動作について具体的な命令を用いて説明する。図２６は、コンパイラ上流部及びアセンブラコード生成部を経て生成されたアセンブラコードの一例である。命令スケジューリング部は、図２６のコードを入力として受け取る。図２６に含まれる各命令の意味は以下のとおりである。ただし、条件フラグＣ０とＣ１は、命令１以前の命令によって排他な関係となっていることを想定している。
・命令１…レジスタＲ３の格納値をレジスタＲ１の格納値の分だけ論理右シフトする。
・命令２…条件フラグＣ１の値が真の場合にのみ、レジスタＲ０の格納値に１を加算してレジスタＲ０に格納する。
・命令３…条件フラグＣ０の値が真の場合にのみ、レジスタＲ０の格納値から１を減算してレジスタＲ０に格納する。
・命令４…条件フラグＣ１の値が真の場合にのみ、レジスタＲ１の格納値とレジスタＲ２の格納値とを加算してレジスタＲ２に格納する。
【０１５２】
以下、命令スケジューリング部の動作について説明する。まず、条件排他性解析部と依存関係解析部が起動され、依存グラフが生成される。この例では、条件フラグＣ０とＣ１が排他であることを考慮しつつ、資源の定義及び参照関係を解析する。
【０１５３】
次に、命令再配置部が起動される。図２５のフローチャートに沿って説明すると、まず配置候補ノード集合を生成する（ステップＳ７２）。ここでは命令１のみが配置候補ノードとなる。次に最良ノードを取り出す（ステップＳ７４）。ここでは、自動的に命令１が選択される。そして、配置可能判定（ステップＳ７５）において、配置可能であると判定される。更に、配置状態判定（ステップＳ７７）においても、まだ配置可能であると判定される。そして、配置候補ノード追加（ステップＳ７８）において、追加対象となる命令として、命令２、命令３及び命令４が配置候補ノードに追加される。
【０１５４】
そして、再び戻って最良ノードを取り出す（ステップＳ７４）。ここでは、まず命令２が選択されて、配置可能であると判定される（ステップＳ７５）。
【０１５５】
その後、再び戻って最良ノードを取り出す（ステップＳ７４）。ここでは、命令３が選択される。そして、命令２と命令３の実行条件は排他であるので、２個という演算器の制約を満たし、配置可能であると判定される（ステップＳ７５）。
【０１５６】
更に、戻って最良ノードを取り出す（ステップＳ７４）。ここでは、残った命令４が自動的に選択される。そして、配置可能判定を行う（ステップＳ７５）のであるが、実行条件Ｃ０が真であると仮定した場合には、命令１と命令３のみが有効となるので演算器の制約を満たす。一方、実行条件Ｃ１が真であると仮定した場合には、命令１、命令２及び命令４の３つの命令が有効となってしまう。ここで、これらの全ての組み合わせについて、命令の結合可能性を検討する。ここでは、命令１と命令４を結合して、ハードウェアに備えられたシフト加算命令とすることが可能であると判定され、結果的に２つの命令が有効となるので、配置可能であると判定される。
【０１５７】
以上で、全ての命令が第１サイクルに配置されたことになり、配置ノードを確定する（ステップＳ８０）。次に、各ノードを実行条件で分類し、配置順序の調整を行う（ステップＳ８１）。具体的には、命令２と命令４の実行条件がＣ１で同一なので、命令２と命令４が連続して配置されるように、配置順を、命令１、命令２、命令４、命令３の順に並べ直す。以上で、命令再配置部の処理が完了する。
【０１５８】
最後に、実行境界付加部が起動される。ここでは、上記の命令再配置部による配置された命令群の末尾の命令に並列実行境界情報を設定していく。具体的には、命令３の並列実行境界情報に“１”を設定し、残りの命令の並列実行境界情報には“０”を設定する。以上で命令スケジューリング部の処理が完了する。
【０１５９】
以上のように、本実施の形態のコンパイル装置では、図２６に示した命令列は、１つの実行グループで実行されるようにコンパイルされる。ここには、配置可能判定（ステップＳ７５）において、プロセッサの解読ステージでの命令の結合を考慮したことの効果が現れている。更に、同一の実行条件を持つ命令を連続して配置するように調整することにより、プロセッサの解読ステージにて有効な命令を選択する際の制御を簡単化することができる。
【０１６０】
なお、本実施形態で示されるコンパイル装置の処理手順をフレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどの記録媒体に入れることにより、本実施形態で示されるコンパイル装置をコンピュータで実現できる。
【０１６１】
また、本実施形態で示されるコンパイル装置により生成された実行形式コードをフレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、半導体メモリなどの記録媒体に入れることもできる。
【０１６２】
以上、本発明に係るプロセッサ及びコンパイル装置について、実施形態に基づいて説明したが、本発明はこれらの実施形態に限られないことは勿論である。変形例を以下に列挙する。
【０１６３】
（１）上記実施の形態のプロセッサ及びコンパイル装置では、固定長の命令を実行することを想定していたが、本発明はこのような命令フォーマットに限定されるものではない。可変長の命令フォーマットを採用しても本発明の有意性は保たれる。
【０１６４】
（２）上記実施の形態のプロセッサ及びコンパイル装置では、２個の演算器を持つことを想定していたが、本発明はこの演算器数に限定されるものではない。１個の演算器もしくは３個以上の演算器を持つプロセッサを想定しても、本発明の有意性は保たれる。
【０１６５】
（３）上記実施の形態のプロセッサ及びコンパイル装置では、コンパイル装置が静的に命令並列性を抽出することを想定していたが、本発明はこの命令並列処理方式に限定されるものではない。例えば、ハードウェアで動的に命令並列性を抽出するスーパースカラ方式を採用しても、本発明の有意性は保たれる。この場合、本発明の命令フォーマットから並列実行境界情報Ｅを除去し、この情報に依存する処理を全て命令発行制御部にて動的に検出しながら実施すればよい。
【０１６６】
（４）上記実施の形態のコンパイル装置の命令再配置部では、図１８中のステップＳ５４における最良ノードの決定方法として、依存グラフの終端までの実行時間の総和を用いていたが、本発明は、この選択基準に限定されるものではない。例えば、複数の実行フローの中で特定のパスを優先的に選択するようにしてもよい。この場合、最良ノードの取り出し（ステップＳ５４）の際に、ある特定の実行条件を持つ命令の優先度を高めておく。これによって、実行頻度の高いパスなどの、特定の実行パスに特化したスケジューリングを行うことができる。
【０１６７】
（５）上記実施の形態のプロセッサの命令発行制御部では、最初に現れる並列実行境界情報Ｅが“１”となっている命令以降の命令の解読結果を必ず無効化していたが、必ずしもその必要はない。命令発行制御部内の実行命令選択制御部にて、実行部に転送すると判断した命令が、前記最初に現れる並列実行境界情報Ｅが“１”である命令以前に１つも存在しなかった場合、当該サイクル全体を削除し、次に現れる並列実行境界情報Ｅが“１”である命令までの命令群をこのサイクルでの発行対象とすればよい。つまり、並列実行境界情報Ｅが“１”である命令以前に有効なオペレーションを実行すべきと判定された命令が１つでも存在した場合にのみ、その命令を並列実行の境界とみなして以降の命令の解読結果を無効化し、そうでなかった場合には、その命令の並列実行境界情報Ｅは無視し、後続の命令の並列実行境界情報Ｅを参照することにより新たな並列実行の境界を検出すればよい。これによって、更に実行サイクル数を削減することができる。
【産業上の利用可能性】
【０１６８】
以上説明してきたとおり、本発明によれば、ハードウェアの有効利用を達成し、性能を向上させたプロセッサを提供することが可能であり、特に並列処理において演算器の効率的活用により性能の向上を図る技術として有用である。
【図面の簡単な説明】
【０１６９】
【図１】（ａ）〜（ｃ）は本発明の実施形態１に係るプロセッサが実行する命令の構造を示す図である。
【図２】（ａ）及び（ｂ）は同プロセッサにおける命令の供給と発行の概念を示す図である。
【図３】同プロセッサのハードウェア構成を示すブロック図である。
【図４】同プロセッサの命令レジスタ周辺の構成を示すブロック図である。
【図５】同プロセッサの命令発行制御部とその周辺の回路構成を示す図である。
【図６】同プロセッサにて命令列を実行した際のパイプラインのタイミングを示す図である。
【図７】条件付き実行命令を含むプログラムの一部を示す図である。
【図８】従来の命令発行制御部を持つプロセッサの命令レジスタ周辺の構成を示すブロック図である。
【図９】図７のプログラムの処理を従来の命令発行制御部を持つプロセッサで行わせるプログラムを示す図である。
【図１０】条件分岐を含む処理のフローを示す図である。
【図１１】図１０のフローの処理を条件付き実行方式で記述したプログラムを示す図である。
【図１２】本発明の実施形態２におけるコンパイル装置の構成及び関連するデータを示すブロック図である。
【図１３】同コンパイル装置における条件排他性解析部の処理手順を示すフローチャートである。
【図１４】同コンパイル装置における２命令間の実行条件排他性検出の処理手順を示すフローチャートである。
【図１５】アセンブラコードの一例を示す図である。
【図１６】図１５のアセンブラコードの命令２に対応する条件排他情報テーブルを示す図である。
【図１７】図１５に対応する依存グラフである。
【図１８】同コンパイル装置における命令再配置部の処理手順を示すフローチャートである。
【図１９】アセンブラコードの一例を示す図である。
【図２０】図１９に対応する依存グラフである。
【図２１】図１９に対応する実行形式コードを示す図である。
【図２２】図１９のコードを従来のコンパイル装置でスケジューリングした場合の実行形式コードの一例を示す図である。
【図２３】本発明の実施の形態３に係るプロセッサの命令発行制御部とその周辺の回路構成を示す図である。
【図２４】条件付き実行命令を含むプログラムの一部を示す図である。
【図２５】本発明の実施の形態４に係るコンパイル装置における命令再配置部の処理手順を示すフローチャートである。
【図２６】アセンブラコードの一例を示す図である。
【符号の説明】
【０１７０】
１０    並列実行境界情報（Ｅ）
１１    実行条件情報（Ｐ）
２０    命令供給部（命令供給手段）
２１    命令フェッチ部
２２    命令バッファ
２３    命令レジスタ
２３１  Ａレジスタ
２３２  Ｂレジスタ
２３３  Ｃレジスタ
２３４  Ｄレジスタ
３０    解読部
３１    命令発行制御部（命令発行制御手段）
３１１  条件フラグ
３１２  条件フラグ有効情報
３１３  実行命令選択制御部
３１４，３１５  論理回路
３２    命令デコーダ（解読手段）
３３    第１命令デコーダ
３４    第２命令デコーダ
３５    第３命令デコーダ
３６    第４命令デコーダ
３７１〜３７４  実行命令セレクタ
３８    命令無効化方法選択部（命令無効化方法選択手段）
４０    実行部（実行手段）
４１    実行制御部
４２    ＰＣ（プログラムカウンタ）部
４３    レジスタファイル
４４    第１演算器
４５    第２演算器
４６    書き込み制御部（実行結果無効化手段）
４７    オペランドアクセス部
４８，４９  データバス
１００  コンパイラ上流部
１０１  アセンブラコード生成部
１０２  命令スケジューリング部（命令スケジューリング手段）
１０３  オブジェクトコード生成部
１１０  条件排他性解析部（条件排他性解析手段）
１１１  依存関係解析部（依存関係解析手段）
１１２  命令再配置部（命令再配置手段）
１１３  実行境界付加部（実行境界付加手段）
１２０  ソースコード
１３０  オブジェクトコード
１４０  命令発行制御部（命令発行制御手段）
１４１  実行命令選択制御部
１４２  命令結合部
【図１】
0003727324.tif 000002
【図２】
0003727324.tif 000003
【図３】
0003727324.tif 000004
【図４】
0003727324.tif 000005
【図５】
0003727324.tif 000006
【図６】
0003727324.tif 000007
【図７】
0003727324.tif 000008
【図８】
0003727324.tif 000009
【図９】
0003727324.tif 000010
【図１０】
0003727324.tif 000011
【図１１】
0003727324.tif 000012
【図１２】
0003727324.tif 000013
【図１３】
0003727324.tif 000014
【図１４】
0003727324.tif 000015
【図１５】
0003727324.tif 000016
【図１６】
0003727324.tif 000017
【図１７】
0003727324.tif 000018
【図１８】
0003727324.tif 000019
【図１９】
0003727324.tif 000020
【図２０】
0003727324.tif 000021
【図２１】
0003727324.tif 000022
【図２２】
0003727324.tif 000023
【図２３】
0003727324.tif 000024
【図２４】
0003727324.tif 000025
【図２５】
0003727324.tif 000026
【図２６】
0003727324.tif 000027