(57)【要約】【課題】本発明は、複合条件処理を従来よりも小規模なプログラムにより短時間で実行可能とするプロセッサを提供する。【解決手段】クロックサイクルの前半において、演算部４４１乃至４４３は各々命令に応じた所定演算を行う。比較演算を行った場合は結果値を条件フラグ演算部５１へ出力する。条件フラグ演算部５１は、条件フラグレジスタ４６から読み出した値と当該結果値とを論理演算し、又は当該結果値どうしを論理演算することにより新たな条件フラグ値を算出する。当該クロックサイクルの後半において、条件フラグ演算部５１は、当該新たな条件フラグ値をゲート４５１乃至４５３の何れか条件実行命令に係るゲートへ出力することにより当該条件実行命令の無効化を制御する。条件フラグレジスタ４６は、当該クロックサイクルの終了時に当該新たな条件フラグ値を記憶する。【選択図】図２
2006209805.tif 000002
【特許請求の範囲】
【請求項１】
並列実行が可能な複数の命令を記憶する命令記憶部と、
前記命令記憶部で同時に記憶されている複数の命令の各々を解読する解読部と、
前記解読部における各々の解読の結果に応じて、複数の演算を並列に実行する演算部と、
各々が真または偽を示す値を保持する複数の条件フラグレジスタとを備えたプロセッサであって、
当該プロセッサが実行が可能な命令セット中には、
各々の命令コードにおいて、少なくとも２つのオペランドの指定、前記少なくとも２つのオペランドの値に対して実行する比較の条件の指定、及び前記複数の条件フラグレジスタの少なくとも１つの指定を行う複数の比較命令からなる比較命令群、および、
各々の命令コードにおいて、当該命令が解読された場合に実行される演算の指定および前記複数の条件フラグレジスタの少なくとも１つの指定を行い、当該指定された少なくとも１つの条件フラグレジスタに保持された値に応じて決まるフラグ値が真を示す場合に前記指定された演算の結果が有効となり、前記フラグ値が偽を示す場合に前記指定された演算の結果が無効となる複数の条件実行命令からなる条件実行命令群が含まれ、
前記演算部は、
前記命令記憶部で同時に記憶されている複数の命令の中に前記比較命令群に属する第１比較命令、第２比較命令、および前記条件実行命令群に属する第１条件実行命令が含まれていた場合、
前記第１比較命令の解読の結果に応じて、前記第１比較命令の命令コード中で指定される前記少なくとも２つのオペランドの値が前記第１比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す第１条件フラグ値の算出、および当該第１条件フラグ値の前記第１比較命令の命令コード中で指定される第１条件フラグレジスタへの格納を実行し、
前記第２比較命令の解読の結果に応じて、前記第２比較命令の命令コード中で指定される前記少なくとも２つのオペランドの値が前記第２比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す真偽値の算出、当該真偽値と前記第２比較命令の命令コード中で指定される前記第１条件フラグレジスタに保持される前の前記第１条件フラグ値とを少なくとも２つの入力とする第１論理演算による第２条件フラグ値の算出、および前記第２条件フラグ値の前記第２比較命令の命令コード中で指定される第２条件フラグレジスタへの格納を実行し、
前記第２条件フラグ値に応じて前記第１条件実行命令の演算の結果が有効となるか無効となるかが決定する
ことを特徴とするプロセッサ。
【請求項２】
前記演算部は、
前記第２比較命令の解読の結果に応じて、さらに、前記真偽値と前記第１条件フラグ値とを少なくとも２つの入力とし、前記第１論理演算と異なる第２論理演算によって第３条件フラグ値を算出し、当該第３条件フラグ値を前記第２比較命令の命令コード中で指定される第３条件フラグレジスタに格納し、
前記命令記憶部で同時に記憶されている前記複数の命令の中に前記第１比較命令、第２比較命令および前記第１条件実行命令の他に、さらに前記条件実行命令群に属する第２条件実行命令が含まれていた場合に、前記第３条件フラグ値に応じて前記第２条件実行命令の演算の結果が有効となるか無効となるかを決定する
ことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記第２条件フラグ値は、前記真偽値と前記第１条件フラグ値とを２つの入力とする論理積によって算出され、
前記第３条件フラグ値は、前記論理積の論理否定によって算出される
ことを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記第２条件フラグ値は、前記真偽値と前記第１条件フラグ値とを２つの入力とする論理和によって算出され、
前記第３条件フラグ値は、前記論理和の論理否定によって算出される
ことを特徴とする請求項２に記載のプロセッサ。
【請求項５】
前記第２条件フラグ値は、前記真偽値と前記第１条件フラグ値とを２つの入力とする論理積によって算出され、
前記第３条件フラグ値は、前記真偽値を論理否定した値と前記第１条件フラグ値とを２つの入力とする論理積によって算出される
ことを特徴とする請求項２に記載のプロセッサ。
【請求項６】
並列実行が可能な複数の命令を記憶する命令記憶部と、
前記命令記憶部で同時に記憶されている複数の命令の各々を解読する解読部と、
前記解読部における各々の解読の結果に応じて、複数の演算を並列に実行する演算部と、
各々が真または偽を示す値を保持する複数の条件フラグレジスタとを備えたプロセッサであって、
当該プロセッサが実行が可能な命令セット中には、
命令コードにおいて、少なくとも２つのオペランドの指定、前記少なくとも２つのオペランドの値に対して実行する比較の条件の指定、及び前記複数の条件フラグレジスタの少なくとも２つの指定を行う比較命令、および、
各々の命令コードにおいて、当該命令が解読された場合に実行される演算の指定および前記複数の条件フラグレジスタの少なくとも１つの指定を行い、当該指定された少なくとも１つの条件フラグレジスタに保持された値に応じて決まるフラグ値が真を示す場合に前記指定された演算の結果が有効となり、前記フラグ値が偽を示す場合に前記指定された演算の結果が無効となる複数の条件実行命令からなる条件実行命令群が含まれ、
前記演算部は、
前記命令記憶部で同時に記憶されている複数の命令の中に前記比較命令および前記条件実行命令群に属する第１条件実行命令が含まれていた場合、
前記比較命令の解読の結果に応じて、前記比較命令の命令コード中で指定される少なくとも２つのオペランドの値が前記比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す第１条件フラグ値の算出、前記第１条件フラグ値を論理否定した第２条件フラグ値の算出、前記第１条件フラグ値の前記比較命令の命令コード中で指定される第１条件フラグレジスタへの格納、および前記第２条件フラグ値の前記比較命令の命令コード中で指定される第２条件フラグレジスタへの格納を実行し、
前記第１条件フラグ値または前記第２条件フラグ値のいずれか一方に応じて前記第１の条件実行命令の演算の結果が有効となるか無効となるかを決定する
ことを特徴とするプロセッサ。
【請求項７】
前記演算部は、
前記命令記憶部で同時に記憶されている前記複数の命令の中に前記比較命令および前記第１条件実行命令の他に、さらに前記条件実行命令群に属する第２条件実行命令が含まれていた場合に、前記第１条件フラグ値に応じて前記第１条件実行命令の演算の結果が有効となるか無効となるかを決定し、前記第２条件フラグ値に応じて前記第２条件実行命令の演算の結果が有効となるか無効となるかを決定する
ことを特徴とする請求項６に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行されるプログラムの規模縮小、並びに実行並列度向上による処理時間短縮を要望されるプロセッサに関する。
【背景技術】
【０００２】
従来、パイプライン方式を用いて複数命令を並列処理することにより、プログラムの実行時間を短縮するプロセッサが実用化されている。パイプライン方式を用いるプロセッサは、命令の供給、解読、実行等の複数の部分（ステージと呼ぶ）をそれぞれ処理する並列動作可能な回路を備え、複数命令を相異なるステージで同時並列に処理する。
また、ＶＬＩＷ（Very Long Instruction Word）方式やスーパースカラ方式を用いることにより、実行時間の短縮を図っているプロセッサもある。この種のプロセッサは、個々のステージを処理する複数の並列動作可能な回路を備え、一のステージにおいて複数命令を同時並列に処理する。
【０００３】
パイプライン方式を採るプロセッサにおける実行時間の短縮効果を損なう要因の一つに、分岐命令がある。分岐命令を処理した場合、所定のステージにおいてその分岐先が確定するまでは次の命令の処理に着手できないため、上流ステージを処理する回路に待ちが生じ、この待ちが実行時間の短縮を阻む要因となる。分岐予測を行って後続命令を投機実行するプロセッサにおいても、分岐予測が外れた際には正しい命令のやり直しを余儀なくされ、実行時間の短縮が阻害される。
【０００４】
スーパースカラ方式を採るプロセッサでは、同時並列処理可能な命令数が増大することにより分岐命令を処理する頻度が高まるので、このような分岐命令の影響はさらに大きくなる。
分岐命令によって実行時間の短縮が阻害される問題を解消するために、従来のある種のプロセッサは、条件実行命令を処理する機能を備えている。条件実行命令とは、その命令が処理される際に本来の実質的な効果を生じるための条件を示す実行条件情報を付与された命令を言う。
【０００５】
当該プロセッサは、条件実行命令を処理する際、当該実行条件情報に応じて、処理された演算結果を破棄し、又はデータの転送を中止する等して、当該命令が実効を生じないように無効化する。
図３２は、そのようなプロセッサの代表的な構成例を示すブロック図である。プロセッサ９０は、クロック信号に同期して動作し、当該クロック信号の各サイクルにおいて、命令の供給、解読、及び実行それぞれのステージを並列処理可能な命令供給部２０、解読部３０、及び実行部４０からなる。各部は単一のクロックサイクルにおいて最大３個の命令を並列処理する。
【０００６】
プロセッサ９０を対象とするコンパイラは、プログラムにおいてプロセッサ９０が並列実行可能な命令群を予め判断し、当該命令群を示す並列実行境界情報を当該プログラムに付与する。プロセッサ９０は、当該並列実行境界情報によって並列処理すべき命令群を認識して、当該命令群を各クロック各ステージにおいて並列処理する。
命令供給部２０は、命令フェッチ部２１、及び命令レジスタ群２２からなり、命令レジスタ群は第１レジスタ２２１、第２レジスタ２２２、及び第３レジスタ２２３を備えている。
【０００７】
解読部３０は、命令発行制御部３１、及び命令デコーダ群３２からなり、命令デコーダ群３２は、第１命令デコーダ３２１、第２命令デコーダ３２２、及び第３命令デコーダ３２３を備えている。
実行部４０は、実行制御部４１、ＰＣ（Program Counter：プログラムカウンタ）部４２、レジスタファイル４３、第１演算部４４１、第２演算部４４２、第３演算部４４３、第１ゲート４５１、第２ゲート４５２、第３ゲート４５３、条件フラグレジスタ４６、オペランドアクセス部４７、データバス４８、及びデータバス４９を備えている。
【０００８】
命令供給部２０において、命令フェッチ部２１は、ＩＡ（Instruction Address：命令アドレス）バス、及びＩＤ（Instruction Data：命令データ）バスを介して、図示しない外部メモリから所定個数毎に命令を読み出して内部に記憶するとともに、ＰＣ部４２から与えられたアドレスによって示される命令から、並列実行境界情報により並列実行可能と示された範囲にある命令を、命令レジスタ２２１乃至２２３に記憶させる。
【０００９】
解読部３０において、命令デコーダ３２１乃至３２３は、命令発行制御部３１による制御の下で、それぞれ、命令レジスタ２２１乃至２２３に記憶されている命令を実行させるための制御信号を実行制御部４１へ出力するとともに、各命令に含まれている定数オペランドをデータバス４８へ出力する。
実行部４０において、実行制御部４１は、命令デコーダ３２１乃至３２３から指示された制御信号に基づいて、実行部４０の各構成要素を動作させる。ＰＣ部４２は、次に処理すべき命令のアドレスを命令フェッチ部２１へ出力する。
【００１０】
レジスタファイル４３は、６４個の汎用レジスタＲ０乃至Ｒ６３から構成される。各汎用レジスタは、実行制御部４１からの制御に応じて、格納されている値をデータバス４８を介して演算部４４１乃至４４３へ出力し、また、データバス４９を介して与えられるデータを記憶する。
演算部４４１乃至４４３は、それぞれ、図示しない算術論理演算を行うＡＬＵ（Arithmetic Logical Unit：数値演算ユニット）、乗算器、及びシフト演算を行うバレルシフタ等を内部に備え、入力されたデータに対して、実行制御部４１からの制御に応じた演算を行うか、又は単に通過させる。当該演算の結果、又は通過した入力データは、ゲート４５１乃至４５３へ出力されるとともに、特に、比較命令に応じて行われた比較演算の結果値は、条件フラグレジスタ４６へ出力される。
【００１１】
条件フラグレジスタ４６は、７個のレジスタＣ０乃至Ｃ６から構成される。各条件フラグレジスタは、実行制御部４１からの制御に応じて、演算部４４１乃至４４３から与えられた値を記憶するとともに、記憶している値をそれぞれゲート４５１乃至４５３へ出力する。
ゲート４５１乃至４５３は、条件フラグレジスタ４６から与えられた値が真値である場合に、それぞれ演算部４４１乃至４４３から与えられた演算の結果をデータバス４９を介してレジスタファイル４３へ出力し、偽値である場合に当該結果を破棄する。
【００１２】
オペランドアクセス部４７は、実行制御部４１からの制御に応じて、レジスタファイル４３からデータバス４９を介して与えられたデータを、ＯＡ（Operand Address：オペランドアドレス）バス、及びＯＤ（Operand Data：オペランドデータ）バスを介して図示しない外部メモリへ転送し、当該外部メモリに記憶されているデータをレジスタファイル４３へ転送する。
【００１３】
この構成によって、プロセッサ９０は、条件フラグレジスタに記憶されている値が真値の場合にのみ実質的な効果を生じる条件実行命令を実現することができる。当該条件実行命令は、当該値が偽値の場合に無効化される条件実行命令と言い換えても同義である。
条件実行命令を用いることにより、例えば、図３３のフローチャートに示した条件処理を、図３４に示した分岐命令を含まない様式のプログラムに従って実行することができる。
【００１４】
図３４のプログラムにおいて、左から第１列は命令番号、第２列は実行条件情報、第３列は命令ニーモニック、第４列はオペランド、第５列は並列実行境界情報を表す。
当該実行条件情報は、実行条件となるべき条件フラグレジスタを表し、条件フラグレジスタが示されていない場合、当該命令は無条件実行命令であることを表す。
当該並列実行境界情報は、具体的には各命令に付与される並列実行境界フラグ値であり、０が次の命令と並列実行可能であることを示し、１が次の命令と並列実行不可能であることを示す。
【００１５】
なお、実行条件情報、命令ニーモニック、オペランド、及び並列実行境界情報は、コンピュータ資源上において所定のフォーマットに従って表現されるが、当該フォーマットについては、本願発明の主眼ではないので説明を省略する。
命令１は汎用レジスタＲ０の内容とＲ１の内容とを比較し、Ｒ０＜Ｒ１の場合に条件フラグレジスタＣ０及びＣ１にそれぞれ真値及び偽値を記憶させ、その他の場合にそれぞれ偽値及び真値を記憶させるための命令である。
【００１６】
命令２及び命令３の先頭に記した［Ｃ０］及び［Ｃ１］は、両命令が、それぞれ条件フラグレジスタＣ０及びＣ１に記憶されている値が真値である場合に実効を生じる条件実行命令であることを表している。この例では、ｒ０＜ｒ１の場合に第２命令が実効を生じ第３命令は無効化され、その他の場合に第２命令が無効化され第３命令が実効を生じる。
プロセッサ９０は、このように、条件実行命令を用いることにより、分岐命令を含まない様式のプログラムに従って条件処理を実行できるので、分岐命令により実行時間の短縮が阻害される問題を解消する。
【００１７】
分岐命令を含まない様式のプログラムは、分岐命令を用いる様式のプログラムに比べて少ない命令数で記述できるので、さらに、プログラム規模を縮小する効果をも有している。
【特許文献１】特開２０００−２２２２０９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
しかしながら、従来のプロセッサ９０は、所定のクロックサイクルにおいて比較命令に応じて行われた比較演算の結果を条件フラグレジスタに一旦記憶し、次のクロックサイクル以降で、当該記憶された結果を読み出して条件実行命令を無効化するので、比較命令と当該比較命令に応じて算出された条件フラグを実行条件とする条件実行命令とを、同一サイクルにおいて並列実行できないという制約を有している。
【００１９】
このため、プロセッサ９０を対象とする従来のコンパイラは、そのような命令が同一クロックサイクルで実行できないことを示す並列実行境界情報をプログラムに付与する。例えば、図３４のプログラムに対し、命令１及び命令２、並びに命令１及び命令３が同一クロックサイクルで処理されないよう、命令１の並列実行境界フラグを１とする。この結果、プロセッサ９０は、図３４のプログラムにおける命令１を単独実行する。図３５は、プロセッサ９０がこのプログラムを実行した場合のタイミングチャートであり、各命令の各ステージが処理されるクロックサイクルを示している。
【００２０】
このように、従来のプロセッサによれば、比較命令と当該比較命令に応じて算出された条件フラグを実行条件とする条件実行命令との間で、並列度の向上による実行時間の短縮が困難であるという第１の問題がある。
また、プロセッサ９０を対象とする従来のコンパイラは、複数の比較判断を複合して行う複合条件処理について、個々の比較判断に応じて制御を分岐させる様式のプログラムを生成する。具体例を挙げれば、図３６のフローチャートに示した複合条件処理を実行させるために、図３７に示したプログラムを生成する。
【００２１】
複合条件処理について、プログラムの規模及び実行時間の面で不利となる分岐命令を用いるのは、プロセッサ９０が、複数の比較命令それぞれに応じて行われた比較判断結果を直接に論理演算する機能を持たないため、複合条件処理を条件分岐命令を用いずに表すとかえって命令数の増加を招き、分岐命令を排除する本来の目的であるプログラム規模の縮小及び実行時間の短縮に寄与しないからである。
【００２２】
このように、従来のプロセッサによれば、複合条件処理を実行するためのプログラムの規模縮小及び実行時間短縮が困難であるという第２の問題がある。
上記の問題に鑑み、本発明は、複合条件処理を従来よりも小規模なプログラムにより短時間で実行可能とするプロセッサの提供、並びに、当該プロセッサにおいて条件処理を行うための、従来よりも小規模、かつ短時間で実行可能なプログラムを生成するコンパイラの提供を目的とする。
【課題を解決するための手段】
【００２３】
上記問題を解決するため、本発明の第１の特徴を有するプロセッサは、並列実行が可能な複数の命令を記憶する命令記憶部と、前記命令記憶部で同時に記憶されている前記複数の命令の各々を解読する解読部と、前記解読部における各々の解読の結果に応じて、複数の演算を並列に実行する演算部と、前記演算部で実行される演算の結果に応じて、各々が真または偽を示す値を保持する複数の条件フラグレジスタを備えたプロセッサであって、前記プロセッサは、実行が可能な命令セット中に、各々の命令コードにおいて、少なくとも２つのオペランドの指定、前記少なくとも２つのオペランドの値に対して実行する比較の条件の指定、及び前記複数の条件フラグレジスタの少なくとも１つの指定を行う複数の比較命令からなる比較命令群、および各々の命令コードにおいて、当該命令が解読された場合に実行される演算の指定および前記複数の条件フラグレジスタの少なくとも１つの指定を行い、指定された前記少なくとも１つの条件フラグレジスタに保持された値に応じて決まるフラグ値が真を示す場合に指定された演算の結果が有効となり、前記フラグ値が偽を示す場合に指定された演算の結果が無効となる複数の条件実行命令からなる条件実行命令群を含んでおり、前記命令記憶部で同時に記憶されている前記複数の命令の中に前記比較命令群の第１の比較命令、第２の比較命令および前記条件実行命令群の第１の条件実行命令を含んでいた場合、前記解読部における前記第１の比較命令の解読の結果に応じて、前記演算部において前記第１の比較命令の命令コード中で指定される前記少なくとも２つのオペランドの値が前記第１の比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す第１条件フラグ値の算出、および前記第１条件フラグ値の前記第１の比較命令の命令コード中で指定される第１の条件フラグレジスタへの格納を実行し、前記解読部における前記第２の比較命令の解読の結果に応じて、前記演算部において前記第２の比較命令の命令コード中で指定される前記少なくとも２つのオペランドの値が前記第２の比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す真偽値の算出、前記真偽値と前記第２の比較命令の命令コード中で指定される前記第１の条件フラグレジスタに保持される前の前記第１条件フラグ値を少なくとも２つの入力とする第１の論理演算による第２条件フラグ値の算出、および前記第２条件フラグ値の前記第２の比較命令の命令コード中で指定される第２の条件フラグレジスタへの格納を実行し、前記第２条件フラグ値に応じて前記第１の条件実行命令の演算の結果が有効となるか無効となるかが決定されることを特徴とする
また本発明の第１の特徴を有するプロセッサにおいて、前記解読部における前記第２の比較命令の解読の結果に応じて、前記演算部において前記第１の論理演算によって前記第２条件フラグ値を算出すると共に、前記真偽値と前記第１条件フラグ値を少なくとも２つの入力とし、前記第１の論理演算と異なる第２の論理演算によって第３条件フラグ値を算出し、前記第３条件フラグ値を前記第２の比較命令の命令コード中で指定される第３の条件フラグレジスタに格納し、前記命令記憶部で同時に記憶されている前記複数の命令の中に前記第１の比較命令、第２の比較命令および前記第１の条件実行命令の他に、さらに前記条件実行命令群に属する第２の条件実行命令を含んでいた場合に、前記第３条件フラグ値に応じて前記第２の条件実行命令の演算の結果が有効となるか無効となるかが決定されるものであっても良い。
【００２４】
上記問題を解決するため、本発明の第２の特徴を有するプロセッサは、並列実行が可能な複数の命令を記憶する命令記憶部と、前記命令記憶部で同時に記憶されている前記複数の命令の各々を解読する解読部と、前記解読部における各々の解読の結果に応じて、複数の演算を並列に実行する演算部と、前記演算部で実行される演算の結果に応じて、各々が真または偽を示す値を保持する複数の条件フラグレジスタを備えたプロセッサであって、前記プロセッサは、実行が可能な命令セット中に、命令コードにおいて、少なくとも２つのオペランドの指定、前記少なくとも２つのオペランドの値に対して実行する比較の条件の指定、及び前記複数の条件フラグレジスタの少なくとも２つの指定を行う比較命令、および当該命令が解読された場合に実行される演算の指定および前記複数の条件フラグレジスタの少なくとも１つの指定を行い、指定された前記少なくとも１つの条件フラグレジスタに保持された値に応じて決まるフラグ値が真を示す場合に指定された演算の結果が有効となり、前記フラグ値が偽を示す場合に指定された演算の結果が無効となる複数の条件実行命令からなる条件実行命令群を含んでおり、前記命令記憶部で同時に記憶されている前記複数の命令の中に前記比較命令および前記条件実行命令群の第１の条件実行命令を含んでいた場合、前記解読部における前記比較命令の解読の結果に応じて、前記演算部において前記比較命令の命令コード中で指定される少なくとも２つのオペランドの値が前記比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す第１条件フラグ値の算出、前記第１条件フラグ値を論理否定した第２条件フラグ値の算出、前記第１条件フラグ値の前記比較命令の命令コード中で指定される第１の条件フラグレジスタへの格納、および前記第２条件フラグ値の前記比較命令の命令コード中で指定される第２の条件フラグレジスタへの格納を実行し、前記第１条件フラグ値または前記第２条件フラグ値のいずれか一方に応じて前記第１の条件実行命令の演算の結果が有効となるか無効となるかが決定されることを特徴とする。
【００２５】
また、本発明の第２の特徴を有するプロセッサにおいて、前記命令記憶部で同時に記憶されている前記複数の命令の中に前記比較命令および前記第１の条件実行命令の他に、さらに前記条件実行命令群に属する第２の条件実行命令を含んでいた場合に、前記第１条件フラグ値に応じて前記第１の条件実行命令の演算の結果が有効となるか無効となるかが決定され、前記第２条件フラグ値に応じて前記第２の条件実行命令の演算の結果が有効となるか無効となるかが決定されるものであっても良い。
【発明の効果】
【００２６】
（１）本発明のプロセッサは、第１比較条件の成否を示す第１条件フラグ値を記憶している条件フラグレジスタと、第２比較条件の成否を示す真偽値を算出し、当該真偽値と前記第１条件フラグ値とを論理演算することにより第２条件フラグ値を算出する演算手段とを備える。
この構成によれば、前記第１条件フラグ値を算出し、条件フラグレジスタに記憶させるための第１の比較命令と、当該第２条件フラグ値を算出するための第２の比較命令とを、命令セットに設け、当該プロセッサはこれらの比較命令を実行することによって、複数の比較条件各々の成否を示す真偽値を直接に演算して当該第２条件フラグ値を算出できる。即ち当該プロセッサは、複数の比較条件を複合して定まる複合比較条件の成否を示す条件フラグ値を、当該第１及び第２の比較命令に応じて算出することができる。
【００２７】
これにより、当該プロセッサは、当該条件フラグ値を実行条件とする条件実行命令を含み、かつ分岐命令を含まないプログラムによって、複合条件処理を実行できるので、当該プロセッサは、分岐命令を含まない従来よりも小規模なプログラムによって、複合条件処理を従来よりも短時間で実行する。
前記第２条件フラグ値を、前記第１条件フラグ値に代えて、又は前記１条件フラグ値と共に条件フラグレジスタに記憶し、さらに、前記第２条件フラグ値を用いて新たな条件フラグ値を算出することにより、当該プロセッサは、３以上の比較条件を複合して定まる複合比較条件に基づく複合比較条件の成否を示す条件フラグ値を算出できる。
【００２８】
（２）また、前記（１）のプロセッサにおいて、前記演算手段は、さらに、前記第２条件フラグ値の論理否定値である第３条件フラグ値を算出してもよい。
この構成によれば、前記第２条件フラグ値と当該第３条件フラグ値との双方を算出するための第３の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、比較条件の成立、不成立それぞれを示す２つの条件フラグ値を算出できる。
【００２９】
当該プロセッサは、当該条件フラグ値のそれぞれを実行条件とする条件実行命令を用い、かつ分岐命令を用いないプログラムによって、if-then-else型の複合条件処理を実行できる。
これにより、当該プロセッサは、分岐命令を用いない従来よりも小規模なプログラムによって、if-then-else型の複合条件処理を従来よりも短時間で実行する。
【００３０】
（３）また、前記（１）のプロセッサにおいて、前記演算手段は、さらに、前記真偽値の論理否定値を算出し、当該論理否定値と前記第１条件フラグ値とを論理演算することにより第４条件フラグ値を算出してもよい。
この構成によれば、前記第２条件フラグ値と当該第４条件フラグ値との双方を算出するための第４の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、前記第１条件フラグ値に応じて、比較条件の成立、不成立それぞれを示すか、若しくは、共に不成立を示す２つの条件フラグ値を算出できる。
【００３１】
入れ子構造になっている条件処理において、前記第１条件フラグ値が、内側のif-then-else型の条件処理を実行すべき条件を示す場合、前記算出される２つの条件フラグ値は、それぞれ当該内側のthen部及びelse部を実行するための条件実行命令の実行条件を表す。
これにより、当該プロセッサは、当該２つの条件フラグ値のそれぞれを実行条件とする条件実行命令を用い、かつ分岐命令を用いないプログラムによって、入れ子構造になっているif-then-else型の複合条件処理を実行できる。
【００３２】
これにより、当該プロセッサは、分岐命令を用いない従来よりも小規模なプログラムによって、入れ子構造になっているif-then-else型の複合条件処理を従来よりも短時間で実行する。
（４）本発明のプロセッサは、単一のクロックサイクルにおいて、第１比較条件の成否を示す第１条件フラグ値を算出するとともに、第２比較条件の成否を示す真偽値を算出し、当該真偽値と前記第１条件フラグ値とを論理演算することにより第２条件フラグ値を算出する演算手段を備える。
【００３３】
この構成によれば、当該第１条件フラグ値を算出するための第１の比較命令と、当該第２条件フラグ値を算出するための第２の比較命令とを、命令セットに設け、当該プロセッサはこれらの比較命令を実行することによって、複数の比較条件各々の成否を示す真偽値を直接に演算して当該第２条件フラグ値を算出できる。当該プロセッサは、当該第１及び第２の比較命令を、単一のクロックサイクルにおいて並列処理することができる。
【００３４】
これにより、当該プロセッサは、前記（１）の効果を有し、さらに、当該第１及び第２の比較命令を、単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、複合条件処理を前記（１）のプロセッサよりも短時間で実行する。
前記第２条件フラグ値を、前記第１条件フラグ値に代えて、又は前記１条件フラグ値と共に条件フラグレジスタに記憶し、さらに、前記（１）のプロセッサと組み合わせることにより、前記第２条件フラグ値を用いて新たな条件フラグ値を算出すれば、当該プロセッサは、複数のクロックサイクルに渡って３以上の比較条件を複合して定まる複合比較条件に基づく複合比較条件の成否を示す条件フラグ値を算出できる。
【００３５】
（５）また、前記（４）のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記第２条件フラグ値の論理否定値である第３条件フラグ値を算出してもよい。
この構成によれば、前記第２条件フラグ値と当該第３条件フラグ値との双方を算出するための第３の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、比較判断結果の成立、不成立それぞれを示す２つの条件フラグ値を算出できる。当該プロセッサは、前記第１及び第３の比較命令を、単一のクロックサイクルにおいて並列処理することができる。
【００３６】
これにより、当該プロセッサは、前記（２）の効果を有し、さらに、前記第１及び第３の比較命令を、単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、if-then-else型の複合条件処理を前記（２）のプロセッサよりも短時間で実行する。
（６）また、前記（４）のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記比較演算の結果値の論理否定値を算出してもよい。
【００３７】
この構成によれば、前記第２条件フラグ値と当該第４条件フラグ値との双方を算出するための第４の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、前記第１条件フラグ値に応じて、比較条件の成立、不成立それぞれを示すか、若しくは、共に不成立を示す２つの条件フラグ値を算出できる。当該プロセッサは、前記第１及び第４の比較命令を、単一のクロックサイクルにおいて並列処理することができる。
【００３８】
これにより、当該プロセッサは、前記（３）の効果を有し、さらに、前記第１及び第４の比較命令を、単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、入れ子構造になっているif-then-else型の複合条件処理を前記（３）のプロセッサよりも短時間で実行する。
（７）本発明のプロセッサは、単一のクロックサイクルにおいて、第１比較条件の成否を示す真偽値を算出し、当該真偽値に基づいて第１条件フラグ値を算出するとともに、条件実行命令に応じた演算を行う演算手段と、前記クロックサイクルにおいて、当該第１条件フラグ値に応じて当該条件実行命令に応じて行われた演算の結果を無効化する無効化手段とを備える。
【００３９】
この構成によれば、当該プロセッサは、当該第１条件フラグ値を算出するための比較命令と、当該条件実行命令とを、単一のクロックサイクルにおいて並列処理し、かつ当該クロックサイクルにおいて、当該第１条件フラグ値に応じて当該条件実行命令を無効化することができる。
これにより、当該プロセッサは、当該比較命令と当該条件実行命令とを含む条件処理プログラムを実行する場合、両命令を単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、従来よりも短時間で実行することができる。
【００４０】
（８）また、前記（７）のプロセッサは、さらに、第２比較条件の成否を示す第２条件フラグ値を記憶している条件フラグレジスタを備え、前記演算手段は、前記クロックサイクルにおいて、前記真偽値と当該第２条件フラグ値とを論理演算することにより前記第１条件フラグ値を算出してもよい。
この構成によれば、当該第２条件フラグ値を算出して条件フラグレジスタに記憶させるための第１の比較命令と、当該第１条件フラグ値を算出するための第２の比較命令とを、命令セットに設け、当該プロセッサはこれらの比較命令を実行することによって、複数の比較条件各々の成否を示す真偽値を直接に演算して当該第１条件フラグ値を算出できる。
【００４１】
即ち当該プロセッサは、当該第１の比較命令と、当該第２の比較命令と、前記条件実行命令とを含み、かつ分岐命令を含まないプログラムによって、複合条件処理を実行できる。
この場合、当該プロセッサは、当該プログラムを実行する場合、当該第２の比較命令と前記条件実行命令とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、従来よりも短時間で実行する。
【００４２】
（９）また、前記（８）のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記第１条件フラグ値の論理否定値である第３条件フラグ値を算出し、前記無効化手段は、前記クロックサイクルにおいて、前記第１条件フラグ値又は当該第３条件フラグ値の何れかに応じて前記条件実行命令に応じて行われた演算の結果を無効化してもよい。
【００４３】
この構成によれば、前記第１条件フラグ値と当該第３条件フラグ値との双方を算出するための第３の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、比較条件の成立、不成立それぞれを示す２つの条件フラグ値を算出できる。
即ち当該プロセッサは、前記第１及び第３の比較命令と、前記第１条件フラグ値を実行条件とする第１の条件実行命令と、前記第３条件フラグ値を実行条件とする第２の条件実行命令とを用い、かつ分岐命令を用いないプログラムによって、if-then-else型の複合条件処理を実行できる。
【００４４】
この場合、当該プロセッサは、当該第３の比較命令と、当該第１の条件実行命令及び当該第２の条件実行命令の一方又は両方とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、if-then-else型の複合条件処理を従来よりも短時間で実行する。
（１０）また、前記（８）のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記真偽値の論理否定値を算出し、当該論理否定値と前記第２条件フラグ値とを論理演算することにより第４条件フラグ値を算出し、前記無効化手段は、前記クロックサイクルにおいて、前記第１条件フラグ値又は当該第４条件フラグ値の何れかに応じて前記条件実行命令に応じて行われた演算の結果を無効化してもよい。
【００４５】
この構成によれば、前記第１条件フラグ値と当該第４条件フラグ値との双方を算出するための第４の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、前記第２条件フラグ値に応じて、比較条件の成立、不成立それぞれを示すか、若しくは、共に不成立を示す２つの条件フラグ値を算出できる。
即ち当該プロセッサは、前記第１及び第４の比較命令と、前記第１条件フラグ値を実行条件とする第１の条件実行命令と、前記第４条件フラグ値を実行条件とする第２の条件実行命令とを含み、かつ分岐命令を含まないプログラムによって、入れ子構造になっているif-then-else型の複合条件処理を実行できる。
【００４６】
この場合、当該プロセッサは、当該第４の比較命令と、当該第１の条件実行命令及び当該第２の条件実行命令の一方又は両方とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、入れ子構造になっているif-then-else型の複合条件処理を従来よりも短時間で実行する。
（１１）また、前記（７）のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、第２比較条件の成否を示す第２条件フラグ値を算出するとともに、前記真偽値と当該第２条件フラグ値とを論理演算することにより前記第１条件フラグ値を算出してもよい。
【００４７】
この構成によれば、当該第２条件フラグ値を算出するための第１の比較命令と、当該第１条件フラグ値を算出するための第２の比較命令とを、命令セットに設け、当該プロセッサはこれらの比較命令を実行することによって、複数の比較条件各々の成否を示す真偽値を直接に演算して当該第１条件フラグ値を算出できる。
これにより、当該プロセッサは、前記（８）の効果を有し、さらに、当該第１及び第２の比較命令、並びに前記条件実行命令を、単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、複合条件処理を前記（８）のプロセッサよりも短時間で実行する。
【００４８】
（１２）また、前記（１１）のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記第１条件フラグ値の論理否定値である第３条件フラグ値を算出し、前記無効化手段は、前記クロックサイクルにおいて、前記第１条件フラグ値又は当該第３条件フラグ値の何れかに応じて前記条件実行命令に応じて行われた演算の結果を無効化してもよい。
【００４９】
この構成によれば、前記第１条件フラグ値と当該第３条件フラグ値との双方を算出するための第３の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、比較条件の成立、不成立それぞれを示す２つの条件フラグ値を算出できる。
即ち当該プロセッサは、前記第１及び第３の比較命令と、前記第１条件フラグ値を実行条件とする第１の条件実行命令と、前記第３条件フラグ値を実行条件とする第２の条件実行命令とを含み、かつ分岐命令を含まないプログラムによって、if-then-else型の複合条件処理を実行できる。
【００５０】
これにより、当該プロセッサは、前記（９）の効果を有し、さらに、前記第１及び第３の比較命令と、当該第１の条件実行命令及び当該第２の条件実行命令の一方又は両方とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、if-then-else型の複合条件処理を前記（９）のプロセッサよりも短時間で実行する。
（１３）また、前記（１１）のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記真偽値の論理否定値を算出し、当該論理否定値と前記第２条件フラグ値とを論理演算することにより第４条件フラグ値を算出し、前記無効化手段は、前記クロックサイクルにおいて、前記第１条件フラグ値又は当該第４条件フラグ値の何れかに応じて前記条件実行命令に応じて行われた演算の結果を無効化してもよい。
【００５１】
この構成によれば、前記第１条件フラグ値と当該第４条件フラグ値との双方を算出するための第４の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、前記第２条件フラグ値に応じて、比較条件の成立、不成立それぞれを示すか、若しくは、共に不成立を示す２つの条件フラグ値を算出できる。
即ち当該プロセッサは、前記第１及び第４の比較命令と、前記第１条件フラグ値を実行条件とする第１の条件実行命令と、前記第４条件フラグ値を実行条件とする第２の条件実行命令とを含み、かつ分岐命令を含まないプログラムによって、入れ子構造になっているif-then-else型の複合条件処理を実行できる。
【００５２】
この場合、当該プロセッサは、前記第１及び第４の比較命令と、当該第１の条件実行命令及び当該第２の条件実行命令の一方又は両方とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、入れ子構造になっているif-then-else型の複合条件処理を前記（１０）のプロセッサよりも短時間で実行する。
（１４）本発明のプログラム変換方法は、対象プログラムコードから、第１比較条件の成否を評価する処理を記述している第１部分と、当該第１比較条件が成否何れかの場合に実行されるべき処理を記述している第２部分とを識別する識別ステップと、当該第１部分を、当該第１比較条件の成否を表す第１条件フラグ値を算出するための第１命令列に変換する第１変換ステップと、当該第２部分を、当該第１条件フラグ値に応じて無効化される条件実行命令からなる第２命令列に変換する第２変換ステップとを含み、当該第１命令列及び当該第２命令列は何れも分岐命令を含まないことを特徴とする。
【００５３】
この方法によれば、条件処理を行うための、分岐命令を含まず、当該対象プログラムコードよりも小規模で、かつ前記（１）乃至（１３）の各プロセッサにおいて当該対象プログラムコードよりも短時間で実行されるプログラムが生成される。
（１５）また、前記（１４）のプログラム変換方法において、前記識別ステップは、さらに、当該対象プログラムコードから、前記第１比較条件の成否が、前記第２部分が実行されるべき場合と逆の場合に実行されるべき処理を記述している第３部分を識別し、前記第１変換ステップは、前記第１部分を、前記第１条件フラグ値、及びその論理否定値である第２条件フラグ値を算出するための第３命令列に変換し、前記プログラム変換方法は、さらに、当該第３部分を、当該第２条件フラグ値に応じて無効化される条件実行命令からなる第４命令列に変換する第３変換ステップを含み、当該第３命令列及び当該第４命令列は何れも分岐命令を含まないとしてもよい。
【００５４】
この方法によれば、if-then-else型の条件処理を行うための、分岐命令を含まず、前記対象プログラムコードよりも小規模で、かつ前記（１）乃至（１３）の各プロセッサにおいて、前記対象プログラムコードよりも短時間で実行されるプログラムが生成される。
（１６）また、前記（１４）のプログラム変換方法において、前記第１比較条件の成否は、複数の個別比較条件の成否に応じて定まり、前記第１変換ステップは、前記第１部分を、当該個別条件の成否を表す条件フラグ値を算出し、当該条件フラグ値を論理演算することにより前記第１条件フラグ値を算出するための前記第１命令列に変換してもよい。
【００５５】
この方法によれば、複合条件処理を行うための、分岐命令を含まず、前記対象プログラムコードよりも小規模で、かつ前記（１）乃至（１３）の各プロセッサにおいて、前記対象プログラムコードよりも短時間で実行されるプログラムが生成される。
（１７）また、前記（１４）のプログラム変換方法において、前記識別ステップは、さらに、前記第２部分から、第２比較条件の成否を評価する処理を記述している第３部分と、当該第２比較条件が成否何れかの場合に実行されるべき処理を記述している第４部分とを識別し、前記第１変換ステップは、当該第３部分を、当該第２比較条件の成否を表す第２条件フラグ値を算出し、当該第２条件フラグ値と前記第１条件フラグ値とを論理演算することにより第３条件フラグ値を算出するための第３命令列に変換し、前記第２変換ステップは、当該第４部分を、当該第３条件フラグ値に応じて無効化される条件実行命令からなる第４命令列に変換し、当該第３命令列及び当該第４命令列は、何れも分岐命令を含まないとしてもよい。
【００５６】
この方法によれば、入れ子構造になっている条件処理を行うための、分岐命令を含まず、前記対象プログラムコードよりも小規模で、かつ前記（１）乃至（１３）の各プロセッサにおいて、前記対象プログラムコードよりも短時間で実行されるプログラムが生成される。
（１８）また、前記（１７）のプログラム変換方法において、前記識別ステップは、さらに、前記第２部分から、前記第２比較条件の成否が、前記第４部分が実行されるべき場合と逆の場合に実行されるべき処理を記述している第５部分を識別し、前記第１変換ステップは、前記第３部分を、前記第２条件フラグ値及びその論理否定値を算出し、その各々を前記第１条件フラグ値と論理演算することにより、それぞれ前記第３条件フラグ値及び第４条件フラグ値を算出するための第５命令列に変換し、前記第２変換ステップは、さらに、当該第５部分を、当該第４条件フラグ値に応じて無効化される条件実行命令からなる第６命令列に変換し、当該第５命令列及び当該第６命令列は、何れも分岐命令を含まないとしてもよい。
【００５７】
この方法によれば、入れ子構造になっているif-then-else型の条件処理を行うための、分岐命令を含まず、前記対象プログラムコードよりも小規模で、かつ前記（１）乃至（１３）の各プロセッサにおいて、前記対象プログラムコードよりも短時間で実行されるプログラムが生成される。
（１９）本発明のプログラム変換方法は、第１比較命令に応じて行われる条件フラグ値の算出処理と、第２命令に応じて当該条件フラグ値を参照して行われる所定処理とを並列実行可能なプロセッサを対象としたプログラム変換方法であって、対象プログラムにおいて、当該第１比較命令と、当該第１比較命令の実行完了後に実行されるべき第３命令と、当該第３命令よりも後に記述されている当該第２命令とを識別する識別ステップと、当該識別された第３命令と第２命令とを並べ替える再配置ステップとを含む。
【００５８】
この方法によれば、当該対象プログラムコードに含まれる、当該対象プロセッサにおいて並列実行可能な命令が一連配置され、当該対象プログラムコードに対して、変換後のプログラムの実行並列度が向上するので、もって実行時間が短縮される。
（２０）また、前記（１９）のプログラム変換方法は、さらに、前記並べ替え後の第１比較命令と第２命令とが並列実行可能であることを示す並列実行境界情報を生成する並列実行境界情報生成ステップを含んでもよい。
【００５９】
この方法によれば、前記（１９）と同様効果を有するプログラムが生成される。当該生成されたプログラムにおいて並列実行可能な命令群は、当該並列実行境界情報により示されるので、対象プロセッサは並列実行可能な命令群を判定するための回路を備える必要がない。
（２１）また、前記（１９）のプログラム変換方法において、比較条件の成否を示す真偽値を算出し、当該真偽値と前記条件フラグ値とを論理演算することにより、新たな条件フラグ値を算出する処理であるとしてもよい。
【００６０】
（２２）また、前記（１９）のプログラム変換方法において、前記所定処理は、前記条件フラグ値に応じて前記第２命令本来の処理結果を無効化する処理であるとしてもよい。
これらの方法によれば、前記（１９）と同様効果を有するプログラムが生成される。
（２３）本発明のプログラム変換装置は、対象プログラムコードから、第１比較条件の成否を評価する処理を記述している第１部分と、当該第１比較条件が成否何れかの場合に実行されるべき処理を記述している第２部分とを識別する識別手段と、当該第１部分を、当該第１比較条件の成否を表す第１条件フラグ値を算出するための第１命令列に変換する第１変換手段と、当該第２部分を、当該第１条件フラグ値に応じて無効化される条件実行命令からなる第２命令列に変換する第２変換手段とを備え、当該第１命令列及び当該第２命令列は何れも分岐命令を含まないことを特徴とする。
【００６１】
この構成によれば、当該プログラム変換装置は、条件処理を行うための、分岐命令を含まず、当該対象プログラムコードよりも小規模で、かつ前記（１）乃至（１３）の各プロセッサにおいて当該対象プログラムコードよりも短時間で実行されるプログラムを生成する。
（２４）本発明のプログラム変換装置は、第１比較命令に応じて行われる条件フラグ値の算出処理と、第２命令に応じて当該条件フラグ値を参照して行われる所定処理とを並列実行可能なプロセッサを対象としたプログラム変換装置であって、対象プログラムにおいて、当該第１比較命令と、当該第１比較命令の実行完了後に実行されるべき第３命令と、当該第３命令よりも後に記述されている当該第２命令とを識別する識別手段と、当該識別された第３命令と第２命令とを並べ替える再配置手段とを備える。
【００６２】
この構成によれば、当該プログラム変換装置は、当該対象プログラムコードに含まれる、当該対象プロセッサにおいて並列実行可能な命令を一連配置し、当該対象プログラムコードに対して、変換後のプログラムの実行並列度が向上するので、もってプログラムの実行時間を短縮する。
（２５）また、前記（２４）に記載のプログラム変換装置は、さらに、前記並べ替え後の第１比較命令と第２命令とが並列実行可能であることを示す並列実行境界情報を生成する並列実行境界情報生成手段を備えてもよい。
【００６３】
この構成によれば、当該プログラム変換装置は、前記（２４）と同様効果を有するプログラムを生成する。当該生成されたプログラムにおいて並列実行可能な命令群は、当該並列実行境界情報により示されるので、対象プロセッサは並列実行可能な命令群を判定するための回路を備える必要がない。
（２６）本発明のプログラム変換プログラムは、第１比較命令に応じて行われる条件フラグ値の算出処理と、第２命令に応じて当該条件フラグ値を参照して行われる所定処理とを並列実行可能なプロセッサを対象としたプログラム変換装置を、コンピュータを用いて実現するためのコンピュータ実行可能なプログラムであって、変換対象プログラムコードから、第１比較条件の成否を評価する処理を記述している第１部分と、当該第１比較条件が成否何れかの場合に実行されるべき処理を記述している第２部分とを識別する識別ステップと、当該第１部分を、当該第１比較条件の成否を表す第１条件フラグ値を算出するための第１命令列に変換する第１変換ステップと、当該第２部分を、当該第１条件フラグ値に応じて無効化される条件実行命令からなる第２命令列に変換する第２変換ステップとを前記コンピュータに実行させ、当該第１命令列及び当該第２命令列は何れも分岐命令を含まないことを特徴とする。
【００６４】
この構成によれば、当該プログラムにより実現されるプログラム変換装置は、条件処理を行うための、分岐命令を含まず、当該変換対象プログラムコードよりも小規模で、かつ前記（１）乃至（１３）の各プロセッサにおいて当該対象プログラムコードよりも短時間で実行されるプログラムを生成する。
（２７）本発明のプログラム変換プログラムは、第１比較命令に応じて行われる条件フラグ値の算出処理と、第２命令に応じて当該条件フラグ値を参照して行われる所定処理とを並列実行可能なプロセッサを対象としたプログラム変換装置を、コンピュータを用いて実現するためのコンピュータ実行可能なプログラムであって、変換対象プログラムにおいて、当該第１比較命令と、当該第１比較命令の実行完了後に実行されるべき第３命令と、当該第３命令よりも後に記述されている当該第２命令とを識別する識別ステップと、当該識別された第３命令と第２命令とを並べ替える再配置ステップとを前記コンピュータに実行させることを特徴とする。
【００６５】
この構成によれば、当該プログラムにより実現されるプログラム変換装置は、当該変換対象プログラムコードに含まれる、当該対象プロセッサにおいて並列実行可能な命令を一連配置し、当該対象プログラムコードに対して、変換後のプログラムの実行並列度が向上するので、もってプログラムの実行時間を短縮する。
（２８）また、前記（２７）のプログラムは、さらに、前記並べ替え後の第１比較命令と第２命令とが並列実行可能であることを示す並列実行境界情報を生成する並列実行境界情報生成ステップを前記コンピュータに実行させてもよい。
【００６６】
この構成によれば、当該プログラムにより実現されるプログラム変換装置は、前記（２７）と同様効果を有するプログラムを生成する。当該生成されたプログラムにおいて並列実行可能な命令群は、当該並列実行境界情報により示されるので、対象プロセッサは並列実行可能な命令群を判定するための回路を備える必要がない。
（２９）本発明のプログラム記録媒体は、コンピュータ読み取り可能な記録媒体であって、前記（２６）乃至（２８）の何れかのプログラムを記録していることを特徴とする。
【００６７】
この構成によれば、当該プログラム記録媒体は、前記（２６）乃至（２８）の何れかのプログラムを記録し、所期のコンピュータに移送して実行させることにより、前記（２６）乃至（２８）の何れかと同様効果を有するプログラム変換装置を実現する。
【発明を実施するための最良の形態】
【００６８】
＜１．プロセッサ＞
本実施の形態におけるプロセッサは、第１条件フラグ値と、比較命令に応じた比較演算の結果値とを論理演算することにより第２条件フラグ値を算出する機能を有する。当該第１条件フラグ値は、当該第２条件フラグ値の算出が行われるクロックサイクルにおいて条件フラグレジスタから読み出される値であってもよく、当該クロックサイクルにおいて並列実行される他の比較命令に応じて算出される値であってもよい。
【００６９】
また、当該プロセッサは、単一クロックサイクルにおいて条件フラグ値の算出と、条件実行命令に応じた処理を並列実行し、当該算出される条件フラグ値に応じて条件実行命令の実行結果を無効化する第２の機能を有する。
以下、本実施の形態におけるプロセッサについて、図面を参照しながら詳細に説明する。
＜１．１  全体構成＞
図１は、本実施の形態におけるプロセッサの全体構成を示すブロック図である。プロセッサ１０は、命令供給部２０、解読部３０、及び実行部５０から構成される。
【００７０】
プロセッサ１０における全体構成、並びに命令供給部２０及び解読部３０は、従来のプロセッサ９０における全体構成、並びに命令供給部２０及び解読部３０と同一であるため説明を省略し、実行部５０がプロセッサ９０における実行部４０と異なる点について主として説明する。
＜１．２  実行部５０の構成＞
図２は、実行部５０の構成を示すブロック図である。実行部５０は、実行部４０が備えている各構成要素に加えて、条件フラグ演算部５１を備えている。実行部４０の構成要素と同一の構成要素には同一の符号を付し、詳細な説明を省略する。
【００７１】
１つのクロックサイクルの前半期間において、実行部５０における演算部４４１乃至４４３は、実行制御部５２から与えられる制御信号に応じて、データバス４８を介して供給されるオペランドデータに対し、所定の演算を行う。特に比較演算を行った場合、その結果である真値又は偽値を、条件フラグ演算部５１へ出力する。
条件フラグ演算部５１は、実行制御部５２から与えられる制御信号に応じて、条件フラグレジスタ４６から読み出した値又は演算部４４１乃至４４３から与えられた比較演算の結果値を単に通過させ、若しくは、条件フラグレジスタ４６から読み出した値と当該比較演算の結果値とを論理演算し、又は当該比較演算の結果値どうしを論理演算することにより、条件フラグレジスタ４６に記憶させるべき条件フラグ値を算出する。
【００７２】
条件フラグ演算部５１は、当該算出した値を、条件フラグレジスタ４６へ出力すると共に、ゲート４５１乃至４５３のうち条件実行命令に応じた処理を行うゲートへも出力する。
前記クロックサイクルの後半期間において、条件フラグ演算部５１から条件フラグ値を与えられたゲートは、当該条件フラグ値が真値である場合に、対応する演算部から与えられた演算結果をデータバス４９を介してレジスタファイル４３へ出力し、偽値である場合に当該結果を破棄する。
【００７３】
また、条件フラグレジスタ４６は、条件フラグ演算部５１から与えられた値を記憶する。
＜１．３  条件フラグ演算部５１の構成＞
図３は、条件フラグ演算部５１の構成を示すブロック図である。条件フラグ演算部５１は、論理演算回路５０１乃至５０３と、セレクタ５１０乃至５５３とから構成される。
【００７４】
ＳＦ１乃至ＳＦ３、ＳＥ１乃至ＳＥ３、ＳＧ１乃至ＳＧ３、及びＳ１０乃至Ｓ３６は、それぞれ所定の制御信号が実行制御部５２から与えられる。
Ｃ０ｉｎ乃至Ｃ６ｉｎには、それぞれ条件フラグレジスタＣ０乃至Ｃ６に記憶されている値が読み出されて入力される。Ｅ１乃至Ｅ３には、それぞれ演算部４４１乃至４４３によって行われた比較演算の結果値が入力される。
【００７５】
Ｃ０ｏｕｔ乃至Ｃ６ｏｕｔには、それぞれ条件フラグレジスタＣ０乃至Ｃ６に記憶されるべき値が出力される。Ｇ１乃至Ｇ３には、それぞれゲート４５１乃至４５３を制御するための値が出力される。
以下、演算部４４１及びゲート４５１に対応するデータを処理する論理演算回路５０１とセレクタ５１０乃至５１６、５４１、及び５５１について、代表して説明する。
【００７６】
セレクタ５４１は、直前のクロックサイクルまでに算出され条件フラグレジスタＣ０乃至Ｃ６の何れかに記憶されている条件フラグ値、又は、当該クロックサイクルの前半期間の所定時期までに論理演算回路５０２又は５０３によって算出された条件フラグ値を、制御信号ＳＦ１に応じて選択し、論理演算回路５０１へ出力する。
論理演算回路５０１は、演算部４４１による比較演算の結果値Ｅ１とセレクタ５４１により選択された値Ｃ１とに対して、制御信号ＳＥ１に応じた論理演算を行うことにより１つ又は２つの値を、前記所定時期までに算出し、当該算出された値をＡ１にのみ、又はＡ１及びＢ１に出力する。当該論理演算回路の構成と、当該論理演算回路が行う論理演算については、後に詳述する。
【００７７】
セレクタ５１０乃至５１６は、それぞれ条件フラグレジスタＣ０乃至Ｃ６に対応して設けられており、Ａ１、Ｂ１、又は対応する条件フラグレジスタから読み出した値の何れかを、それぞれ制御信号Ｓ１０乃至Ｓ１６に応じて選択して出力する。
セレクタ５５１は、セレクタ５１０乃至５１６を介して選択され、条件フラグレジスタＣ０乃至Ｃ６の何れかに記憶されることとなる値を、制御信号ＳＧ１に応じて選択して出力する。
【００７８】
同様構成によって、論理演算回路５０２とセレクタ５２０乃至５２６、５４２、及び５５２は、演算部４４２及びゲート４５２に対応するデータを処理し、論理演算回路５０３とセレクタ５３０乃至５３６、５４３、及び５５３は、演算部４４３及びゲート４５３に対応するデータを処理する。
この構成によって、条件フラグ演算部５１における論理演算回路５０１乃至５０３は、クロックサイクルの前半期間において、第１条件フラグ値と、比較命令に応じて演算部４４１乃至４４３によって行われた比較演算の結果値とを論理演算して第２条件フラグ値を算出する。
【００７９】
当該第１条件フラグ値は、直前のクロックサイクルまでに算出され条件フラグレジスタＣ０乃至Ｃ６の何れかに記憶されていてもよく、また、当該クロックサイクルの前半期間の所定時期までに他の論理演算回路によって算出される値であってもよい。
当該第２条件フラグ値は、当該クロックサイクルの後半期間において、ゲート４５１乃至４５３を制御することによって条件実行命令に応じて行われた演算結果を無効化するとともに、条件フラグレジスタ４６に記憶される。
＜１．４  論理演算回路５０１の構成＞
図４は、論理演算回路５０１の構成を示すブロック図である。論理演算回路５０１は、論理積演算器６０１、論理否定演算器６０２、論理和演算器６０３、論理否定演算器６０４及び６０５、論理積演算器６０６、並びにセレクタ６０７及び６０８から構成される。
【００８０】
Ｅ１には、演算部４４１による比較演算の結果値が与えられる。
Ｃ１には、セレクタ５４１の出力値が与えられる。当該出力値は、条件フラグレジスタＣ０乃至Ｃ６の何れかに保持されている値か、又は論理演算回路５０２又は５０３によって算出された値である。
Ａ１及びＢ１には、それぞれセレクタ６０７及び６０８によって選択された値が出力される。
【００８１】
以下、論理積演算、論理和演算、及び論理否定演算を、それぞれ記号＆、｜、及び〜と表記する。
論理積演算器６０１は（Ｅ１＆Ｃ１）を算出し、論理否定演算器６０２は〜（Ｅ１＆Ｃ１）を算出する。
論理和演算器６０３は（Ｅ１｜Ｃ１）を算出し、論理否定演算器６０４は〜（Ｅ１｜Ｃ１）を算出する。
【００８２】
論理否定演算器６０５は、〜Ｅ１を算出し、論理積演算器６０６は、（〜Ｅ１＆Ｃ１）を算出する。
セレクタ６０７及び６０８は、制御信号ＳＥ１に応じて、これらの算出値を選択し、次の（１）乃至（４）の何れかに従ってＡ１及びＢ１に出力する。
（１）Ａ１：  Ｅ１、        Ｂ１：  〜Ｅ１
（２）Ａ１：（Ｅ１＆Ｃ１）、Ｂ１：〜（Ｅ１＆Ｃ１）
（３）Ａ１：（Ｅ１｜Ｃ１）、Ｂ１：〜（Ｅ１｜Ｃ１）
（４）Ａ１：（Ｅ１＆Ｃ１）、Ｂ１：（〜Ｅ１＆Ｃ１）
なお、論理演算回路５０２及び５０３の構成は、論理演算回路５０１と同一である。
＜１．５  命令セットと制御信号の詳細＞
図５は、プロセッサ１０が実行する比較命令の一覧である。命令欄は各命令のニーモニック及びオペランドを表し、意味欄は各命令に応じてプロセッサ１０が行う処理を表す。
【００８３】
図６は、当該ニーモニック表記のＣＣの部分に応じて指定される比較演算の一覧である。
以下、文脈に応じて、条件フラグレジスタＣｍを単にＣｍと表記し、汎用レジスタＲａを単にＲａと表記する。
＜１．５．１  ｃｍｐＣＣ命令＞
ｃｍｐＣＣ命令は、ＣＣの部分に図６に示した比較演算の何れかを指定する文字が表記された命令の総称である。各命令は、条件フラグレジスタＣｍ及びＣｎ、並びに汎用レジスタＲａ及びＲｂをオペランドとし、Ｃｎは省略できる。ここで、ｍ及びｎは、それぞれ条件フラグレジスタを指定する０乃至７の何れかの数字であり、ａ及びｂは、それぞれ汎用レジスタを指定する０乃至６３の何れかの数字である。
【００８４】
ｃｍｐＣＣ  Ｃｍ：Ｃｎ，Ｒａ，Ｒｂ命令に応じて、実行部５０は、Ｒａ及びＲｂに記憶されている値に対してＣＣにより指定される比較演算を行い、当該比較演算の結果値ｒｅｓｕｌｔをＣｍに記憶し、その論理否定値〜（ｒｅｓｕｌｔ）をＣｎに記憶する。
この命令は、実行部５０において実行制御部５２が具体的に次のような制御信号を発することによって処理される。
【００８５】
実行制御部５２は、クロックサイクルが開始されると、当該比較命令を処理すべき演算部４４１乃至４４３の何れかに、データバス４８を介して汎用レジスタＲａ及びＲｂに保持されている値を供給し、当該演算部は、ＣＣにより指定される比較演算を実行する。当該演算部は、その結果値を対応する論理演算回路へ出力する。
ここで、演算部４４１が当該比較演算を実行し、その結果を論理演算回路５０１へ出力した場合について、代表して説明する。
【００８６】
実行制御部５２は、論理演算回路５０１に対し、演算部４４１による比較演算結果Ｅ１及び論理否定演算器６０５の出力を、それぞれＡ１及びＢ１として選択するための制御信号ＳＥ１を与える。
また、セレクタ５１ｍ、５２ｍ、及び５３ｍに対し、Ａ１を選択するための制御信号Ｓ１ｍ、Ｓ２ｍ、及びＳ３ｍを与え、セレクタ５１ｎ、５２ｎ、及び５３ｎに対し、Ｂ１を選択するための制御信号Ｓ１ｎ、Ｓ２ｎ、及びＳ３ｎを与える（ここで、ｍ及びｎは、当該比較命令により指定された具体的な数値である）。
【００８７】
このように与えられた制御信号に応じて、セレクタ５３ｍ及びセレクタ５３ｎの出力値は、それぞれｒｅｓｕｌｔ及び〜（ｒｅｓｕｌｔ）に確定する。実行部５０の各構成要素を所定の伝播遅延時間を満たす素子で構成することにより、当該出力値はクロックサイクルの前半期間の所定時期までに確定する。
同一クロックサイクルにおいて、演算部４４２又は演算部４４３が条件フラグ値Ｃｍ又はＣｎを実行条件とする条件実行命令を並列処理している場合、当該クロックサイクルの後半期間において、セレクタ５５２又は５５３は前記出力値を選択し、ゲート４５２又はゲート４５３を制御することによって、当該条件実行命令の実行結果を無効化する。
【００８８】
Ｃｍ及びＣｎは、当該クロックサイクルの終了時に前記出力値を記憶する。
ｃｍｐＣＣ  Ｃｍ，Ｒａ，Ｒｂ命令に対する制御信号は、前述した制御信号から、論理演算回路５０１の出力Ｂ１及び条件フラグレジスタＣｎに関する制御信号を省いたものである。
ｃｍｐＣＣ命令を演算部４４２又は演算部４４３が処理する場合について、同様制御信号にて制御できるため説明を省略する。
＜１．５．２  ｃｍｐＣＣａ命令＞
ｃｍｐＣＣａ命令は、ＣＣの部分に図６に示した比較演算の何れかを指定する文字が表記された命令の総称である。各命令は、条件フラグレジスタＣｍ、Ｃｎ、及びＣｋ、並びに汎用レジスタＲａ及びＲｂをオペランドとし、Ｃｎは省略できる。ここで、ｍ、ｎ及びｋは、それぞれ条件フラグレジスタを指定する０乃至７の何れかの数字であり、ａ及びｂは、それぞれ汎用レジスタを指定する０乃至６３の何れかの数字である。
【００８９】
ｃｍｐＣＣａ  Ｃｍ：Ｃｎ，Ｒａ，Ｒｂ，Ｃｋ命令に応じて、実行部５０は、Ｒａ及びＲｂに記憶されている値に対してＣＣにより指定される比較演算を行い、当該比較演算の結果値ｒｅｓｕｌｔとＣｋの値との論理積値（ｒｅｓｕｌｔ＆Ｃｋ）を算出してＣｍに記憶し、その論理否定値〜（ｒｅｓｕｌｔ＆Ｃｋ）をＣｎに記憶する。
ここで、Ｃｋの値とは、過去のクロックサイクルにおいて比較命令に応じて算出されＣｋに既に記憶されている値か、又は、同一クロックサイクルにおいて並列処理される他の比較命令に応じて当該クロックサイクルの前半期間の所定時期までに算出される値である。
【００９０】
この命令は、実行部５０において実行制御部５２が具体的に次のような制御信号を発することによって処理される。
実行制御部５２は、クロックサイクルが開始すると、当該比較命令を処理すべき演算部４４１乃至４４３の一つに、データバス４８を介して汎用レジスタＲａ及びＲｂに保持されている値を供給し、当該演算部は、ＣＣにより指定される比較演算を実行する。当該演算部は、その結果値を対応する論理演算回路へ出力する。
【００９１】
ここで、演算部４４１が当該比較演算を実行し、その結果を論理演算回路５０１へ出力した場合について、代表して説明する。
実行制御部５２は、論理演算回路５０１に対し、論理積演算器６０１及び論理否定演算器６０２の出力を、それぞれＡ１及びＢ１として選択するための制御信号ＳＥ１を与える。
【００９２】
また、条件フラグＣｋの値が、過去のクロックサイクルにおいて算出され、既に条件フラグレジスタＣｋに記憶されている場合、セレクタ５１ｋ、５２ｋ及び５３ｋに対し、Ｃｋｉｎへの入力を単に通過させるための制御信号Ｓ１ｋ、Ｓ２ｋ、及びＳ３ｋを与えると共に、セレクタ５４１に対し、Ｃｋｉｎに入力された値を選択するための制御信号ＳＦ１を与える。
【００９３】
一方、条件フラグＣｋの値が、当該クロックサイクルにおいて並列処理される他の比較命令に応じて算出され、論理演算回路５０２又は論理演算回路５０３から得られる場合、セレクタ５２ｋ及び５３ｋに対し、当該論理演算回路からの出力を選択するための制御信号を与えると共に、セレクタ５４１に対し、セレクタ５３ｋからの出力値を選択するための制御信号ＳＦ１を与える。
【００９４】
また、セレクタ５１ｍ、５２ｍ、及び５３ｍに対し、Ａ１を選択するための制御信号Ｓ１ｍ、Ｓ２ｍ、及びＳ３ｍを与え、セレクタ５１ｎ、５２ｎ、及び５３ｎに対し、Ｂ１を選択するための制御信号Ｓ１ｎ、Ｓ２ｎ、及びＳ３ｎを与える（ここで、ｍ、ｎ及びｋは、当該比較命令により指定された具体的な数値である）。
このように与えられた制御信号に応じて、セレクタ５３ｍ及びセレクタ５３ｎの出力値は、それぞれ（ｒｅｓｕｌｔ＆Ｃｋ）及び〜（ｒｅｓｕｌｔ＆Ｃｋ）に確定する。実行部５０の各構成要素を所定の伝播遅延時間を満たす素子で構成することにより、当該出力値はクロックサイクルの前半期間の所定時期までに確定する。
【００９５】
当該クロックサイクルにおいて、演算部４４２又は演算部４４３が条件フラグ値Ｃｍ又はＣｎを実行条件とする条件実行命令を並列処理している場合、当該クロックサイクルの後半期間において、セレクタ５５２又は５５３は前記出力値を選択し、ゲート４５２又はゲート４５３を制御することによって、当該条件実行命令の実行結果を無効化する。
Ｃｍ及びＣｎは、当該クロックサイクルの終了時に前記出力値を記憶する。
【００９６】
ｃｍｐＣＣａ  Ｃｍ，Ｒａ，Ｒｂ，Ｃｋ命令に対する制御信号は、前述した制御信号から、論理演算回路５０１の出力Ｂ１及び条件フラグレジスタＣｎに関する制御信号を省いたものである。
ｃｍｐＣＣａ命令を演算部４４２又は演算部４４３が処理する場合について、同様の制御信号にて制御できるため説明を省略する。
【００９７】
なお、ｍ又はｎとｋとが同一であっても構わない。この場合、条件フラグ演算部５１はクロックサイクルの前半期間においてＣｋを読み出し、比較演算結果と論理演算することにより新たな条件フラグ値を算出し、Ｃｋは当該クロックサイクルの終了時に当該新たな条件フラグ値で内容を更新する。
＜１．５．３  ｃｍｐＣＣｏ命令＞
ｃｍｐＣＣｏ命令は、ＣＣの部分に図６に示した比較演算の何れかを指定する文字が表記された命令の総称である。各命令は、条件フラグレジスタＣｍ、Ｃｎ、及びＣｋ、並びに汎用レジスタＲａ及びＲｂをオペランドとし、Ｃｎは省略できる。ここで、ｍ、ｎ及びｋは、それぞれ条件フラグレジスタを指定する０乃至７の何れかの数字であり、ａ及びｂは、それぞれ汎用レジスタを指定する０乃至６３の何れかの数字である。
【００９８】
ｃｍｐＣＣｏ  Ｃｍ：Ｃｎ，Ｒａ，Ｒｂ，Ｃｋ命令に応じて、実行部５０は、Ｒａ及びＲｂに記憶されている値に対してＣＣにより指定される比較演算を行い、当該比較演算の結果値ｒｅｓｕｌｔとＣｋの値との論理積値（ｒｅｓｕｌｔ｜Ｃｋ）を算出してＣｍに記憶し、その論理否定値〜（ｒｅｓｕｌｔ｜Ｃｋ）をＣｎに記憶する。
ここで、Ｃｋの値とは、過去のクロックサイクルにおいて比較命令に応じて算出されＣｋに既に記憶されている値か、又は、同一クロックサイクルにおいて並列処理される他の比較命令に応じて当該クロックサイクルの前半期間の所定時期までに算出される値である。
【００９９】
この命令に応じて、実行制御部５２が発する制御信号は、論理演算回路に対し、論理和演算器６０３及び論理否定演算器６０４の出力を、それぞれＡ１及びＢ１として選択するための制御信号ＳＥ１を与える点を除いて、ｃｍｐＣＣａ命令に対する制御信号と同様である。
セレクタ５３ｍ及びセレクタ５３ｎの出力値は、クロックサイクルの前半期間の所定時期までに、それぞれ（ｒｅｓｕｌｔ｜Ｃｋ）及び〜（ｒｅｓｕｌｔ｜Ｃｋ）に確定する。
【０１００】
当該クロックサイクルにおいて、演算部４４２又は演算部４４３が条件フラグ値Ｃｍ又はＣｎを実行条件とする条件実行命令を並列処理している場合、当該クロックサイクルの後半期間において、セレクタ５５２又は５５３は前記出力値を選択し、ゲート４５２又はゲート４５３を制御することによって、当該条件実行命令の実行結果を無効化する。
Ｃｍ及びＣｎは、当該クロックサイクルの終了時に前記出力値を記憶する。
【０１０１】
ｃｍｐＣＣｏ  Ｃｍ，Ｒａ，Ｒｂ，Ｃｋ命令に対する制御信号は、前述した制御信号から、論理演算回路５０１の出力Ｂ１及び条件フラグレジスタＣｎに関する制御信号を省いたものである。
ｃｍｐＣＣｏ命令を演算部４４２又は演算部４４３が処理する場合について、同様の制御信号にて制御できるため説明を省略する。
【０１０２】
なお、ｍ又はｎとｋとが同一であっても構わない。
＜１．５．４  ｃｍｐＣＣｎ命令＞
ｃｍｐＣＣｎ命令は、ＣＣの部分に図６に示した比較演算の何れかを指定する文字が表記された命令の総称である。各命令は、条件フラグレジスタＣｍ、Ｃｎ、及びＣｋ、並びに汎用レジスタＲａ及びＲｂをオペランドとし、Ｃｎは省略できる。ここで、ｍ、ｎ及びｋは、それぞれ条件フラグレジスタを指定する０乃至７の何れかの数字であり、ａ及びｂは、それぞれ汎用レジスタを指定する０乃至６３の何れかの数字である。
【０１０３】
ｃｍｐＣＣｎ  Ｃｍ：Ｃｎ，Ｒａ，Ｒｂ，Ｃｋ命令に応じて、実行部５０は、Ｒａ及びＲｂに記憶されている値に対してＣＣにより指定される比較演算を行い、当該比較演算の結果値ｒｅｓｕｌｔ及びその論理否定値〜ｒｅｓｕｌｔのそれぞれとＣｋの値との論理積値（ｒｅｓｕｌｔ＆Ｃｋ）及び（〜ｒｅｓｕｌｔ＆Ｃｋ）を算出し、前者をＣｍに記憶し、後者をＣｎに記憶する。
【０１０４】
ここで、Ｃｋの値とは、過去のクロックサイクルにおいて比較命令に応じて算出されＣｋに既に記憶されている値か、又は、同一クロックサイクルにおいて並列処理される他の比較命令に応じて当該クロックサイクルの前半期間の所定時期までに算出される値である。
この命令に応じて、実行制御部５２が発する制御信号は、論理演算回路に対し、論理積演算器６０１及び論理否定演算器６０２の出力を、それぞれＡ１及びＢ１として選択するための制御信号ＳＥ１を与える点を除いて、ｃｍｐＣＣａ命令に対する制御信号と同様である。
【０１０５】
セレクタ５３ｍ及びセレクタ５３ｎの出力値は、クロックサイクルの前半期間の所定時期までに、それぞれ（ｒｅｓｕｌｔ＆Ｃｋ）及び（〜ｒｅｓｕｌｔ＆Ｃｋ）に確定する。
当該クロックサイクルにおいて、演算部４４２又は演算部４４３が条件フラグ値Ｃｍ又はＣｎを実行条件とする条件実行命令を並列処理している場合、当該クロックサイクルの後半期間において、セレクタ５５２又は５５３は前記出力値を選択し、ゲート４５２又はゲート４５３を制御することによって、当該条件実行命令の実行結果を無効化する。
【０１０６】
Ｃｍ及びＣｎは、当該クロックサイクルの終了時に前記出力値を記憶する。
ｃｍｐＣＣｎ  Ｃｍ，Ｒａ，Ｒｂ，Ｃｋ命令に対する制御信号は、前述した制御信号から、論理演算回路５０１の出力Ｂ１及び条件フラグレジスタＣｎに関する制御信号を省いたものである。
ｃｍｐＣＣｎ命令を演算部４４２又は演算部４４３が処理する場合について、同様の制御信号にて制御できるため説明を省略する。
【０１０７】
なお、ｍ又はｎとｋとが同一であっても構わない。
＜１．５．４  命令フォーマット＞
図７は、前記の各比較命令を、コンピュータ資源上において表す場合のフォーマットの一例である。
この例では、１つの比較命令を３２ビット長とし、当該３２ビットを分割してできる各フィールドにおいて、命令コード、オペランド、実行条件情報、並列実行境界情報を表すものとした。ＯＰは命令コード、Ｃｍ、Ｃｎ、Ｒａ、Ｒｂ及びＣｋは、上記説明に用いた記号に対応するオペランド、Ｐは実行条件情報、Ｅは並列実行境界情報を表すフィールドである。このうち特に、実行条件情報及び並列実行境界情報を表すフィールドは、比較命令を含む全ての命令に共通に設けられる。
【０１０８】
比較命令を表すためのフォーマットについては、当該フォーマットに限定するものではなく、また本願発明の主眼ではないので詳細な説明を省略する。
＜１．６  動作タイミングの具体例＞
プロセッサ１０によれば、例えば図３６のフローチャートに示した複合条件処理を、図８に示した条件分岐命令を用いない様式のプログラムによって実行させることができる。同図に含まれる命令うち、命令１乃至３のそれぞれの実行ステージが、単一のクロックサイクルにおいて並列処理される場合の、当該クロックサイクル内での詳細な動作タイミングを説明する。
【０１０９】
この例は、単一のクロックサイクルにおいて、第１の比較命令、第１の比較命令が算出する条件フラグ値を演算する第２の比較命令、及び第２の比較命令が算出する条件フラグ値に応じて無効化される条件実行命令の、それぞれの実行ステージが並列処理される場合の一具体例であって、プロセッサ１０によって新たに並列処理可能となる命令の組み合わせをもって例示している。
【０１１０】
図９は、当該実行ステージ内での詳細な処理タイミングチャートである。当該実行ステージは、前半の条件フラグ演算期間と、後半のゲート制御期間とに分かれる。命令１、命令２及び命令３は、それぞれ第１演算器、第２演算器及び第３演算器によって処理されるものとした。
当該実行ステージが開始されると、実行制御部５２からの制御信号に応じて、Ｒ１バスにレジスタＲ２の内容が出力され、Ｌ１バスに命令１に含まれる即値オペランド値０が出力され、第１演算部４４１は比較演算（Ｒ２≠０）を実行する。
【０１１１】
Ｒ２バスにレジスタＲ０の内容、Ｌ２バスにレジスタＲ１の内容が出力され、第２演算部４４２は比較演算（Ｒ０＜Ｒ１）を実行する。
Ｒ３バスにレジスタＲ０の内容、Ｌ３バスに命令３に含まれる即値オペランド値１が出力され、第３演算部４４３は加算演算（Ｒ０＋１）を実行する。
これらの各演算は、それぞれの演算器において同時並行して実行され、条件フラグ演算期間における所定時期までに、比較演算（Ｒ２≠０）の結果値Ｅ１、及び比較演算（Ｒ０＜Ｒ１）の結果値Ｅ２が確定する。
【０１１２】
Ｅ１の値は、論理演算回路５０１を単に通過してＡ１に出力され、セレクタ５１２、５２２及び５３２により選択され、Ｃ２ｏｕｔへ出力されるとともに、セレクタ５４２によって選択され論理演算回路５０２へも入力される。
論理演算回路５０２は、（Ｅ２｜Ｃ２ｏｕｔ）及び〜（Ｅ２｜Ｃ２ｏｕｔ）をそれぞれＡ２及びＢ２に出力する。セレクタ５２０及び５３０はＡ２を選択し、セレクタ５２１及び５３１はＢ２を選択し、それぞれ条件フラグ演算期間の終了時までに、Ｃ０ｏｕｔ及びＣ１ｏｕｔに出力する。
【０１１３】
ゲート制御期間において、Ｃ０ｏｕｔの値がセレクタ５５３によって選択され、ゲート４５３へ与えられる。Ｃ０ｏｕｔは真値であるため、第３演算部４４３によって算出された値（Ｒ０＋１）はＤ３バスへ出力される。
実行ステージの終了時に、条件フラグレジスタＣ０、Ｃ１及びＣ２は、それぞれＣ０ｏｕｔ、Ｃ１ｏｕｔ及びＣ２ｏｕｔの値を記憶し、Ｒ０レジスタはＤ１バスに出力された値（Ｒ０＋１）を記憶する。
【０１１４】
なお、ここでもしＣ０ｏｕｔが偽値であれば、第３演算部４４３の算出結果（Ｒ０＋１）はＤ３バスへ出力されず、命令３は当該実行ステージにおいて無効化されることとなる。 
＜１．７  まとめ＞
以上説明したように、プロセッサ１０は、第１条件フラグ値と、比較命令に応じた比較演算の結果値とを論理演算することにより第２条件フラグ値を算出する。当該第１条件フラグ値は、当該第２条件フラグ値の算出が行われるクロックサイクルにおいて条件フラグレジスタから読み出される値であってもよく、当該クロックサイクルにおいて並列実行される他の比較命令に応じて算出される値であってもよい。
【０１１５】
また、プロセッサ１０は、単一クロックサイクルにおいて条件フラグ値の算出と、条件実行命令に応じた処理を並列実行し、当該算出される条件フラグ値に応じて条件実行命令の実行結果を無効化する。
＜２．コンパイラ装置＞
本実施の形態におけるコンパイラ装置は、上述したプロセッサ１０を対象プロセッサとし、所定の条件処理を記述したプログラムを、分岐命令を含まない命令列に変換する。さらに、当該命令列おいて、実行結果の同一性が保証される限り、当該対象プロセッサによって並列実行可能な命令が一連配置されるように命令を並べ替えるとともに、当該並列実行可能な命令を示す実行境界情報を生成する。
【０１１６】
以下、本実施の形態におけるコンパイラ装置について、図面を参照しながら詳細に説明する。
＜２．１  全体構成＞
図１０は、本実施の形態におけるコンパイラ装置１００の全体構成を示すブロック図である。
【０１１７】
コンパイラ装置１００は、ソースファイル１８０に格納されているソースプログラムに基づいて対象プロセッサによって実行されるべき機械語命令列を生成し、オブジェクトファイル１９０へ出力するプログラム変換装置である。
本実施の形態では、当該ソースプログラムは、一例としてＣ言語で記述されているものとし、また、当該機械語命令列は、さらに連結編集処理を受けることによって実行可能な形式に変換されるオブジェクトコードであるとして説明する。
【０１１８】
コンパイラ装置１００は、コンパイラ上流部１１０、アセンブラコード生成部１２０、命令スケジューリング部１３０、及びオブジェクトコード生成部１４０から構成される。
アセンブラコード生成部１２０は、条件処理変換部１２１を含み、命令スケジューリング部１３１は、依存関係解析部１３１及び命令再配置部１３６を含み、依存関係解析部１３１は、データ依存判定部１３２、逆依存判定部１３３、出力依存判定部１３４、及び条件フラグ依存判定部１３５を含む。
【０１１９】
コンパイラ装置１００は、具体的にはプロセッサ、プログラムを記憶しているＲＯＭ（Read Only Memory）、作業用のＲＡＭ（Random Access Memory）、ディスク装置等のソフトウェア及びハードウェアにより実現される。前記各部の機能は、プロセッサがＲＯＭに記憶されているプログラムを実行することにより実現される。前記各部の間におけるデータの受け渡しは、ＲＡＭ、ディスク装置等のハードウェアを介して行われる。
【０１２０】
コンパイラ上流部１１０は、ソースファイル１８０からソースプログラムを読み出し、字句解析処理及び構文解析処理を行うことにより、中間コードを生成する。コンパイラ上流部１１０が行うこれらの処理は、従来のコンパイラにおいて一般的に行われている技術なので、詳細な説明を省略する。
アセンブラコード生成部１２０は、コンパイラ上流部１１０により生成された中間コードから、アセンブラコード及び当該アセンブラコードに含まれる基本ブロックを表す基本ブロック情報を生成する。
【０１２１】
ここで、基本ブロックとは、先頭命令から末尾命令までが必ず一連実行される命令列であって、途中の命令から実行が開始されることも、途中の命令から他の基本ブロックの命令へ分岐することもない命令列を言う。
アセンブラコード生成部１２０は、まず、従来のコンパイラと同様の処理を行うことにより、従来様式のアセンブラコードを生成する。このアセンブラコードは、条件処理を表す中間コードに対して分岐命令を用いて生成される。次に、条件処理変換部１２１は、当該従来様式のアセンブラコードを、条件分岐命令を用いない等価なアセンブラコードに変換する。条件処理変換部１２１における処理の詳細については後述する。
【０１２２】
命令スケジューリング部１３０において、依存関係解析部１３１は、前記変換されたアセンブラコードに含まれる各命令について、実行順序に関する依存関係を判定する。特に、条件フラグ依存判定部１３５は、対象プロセッサにおいて条件フラグレジスタを定義及び参照する命令に関する依存関係を判定する。依存関係解析部１３１は、判定された依存関係を表す依存グラフを生成する。
【０１２３】
依存関係解析部１３１において、命令再配置部１３６は、生成された依存グラフに基づいて、実行順序を変更しても同一の実行結果が得られ、かつ、対象プロセッサにおいて並列実行可能な命令を判断し、当該命令が一連配置されるように前記変換されたアセンブラコードにおいて、命令を並べ替える。さらに、命令再配置部１３６は、当該並べ替え後のアセンブラコードにおいて並列実行可能な命令を示す並列実行境界情報を生成する。命令スケジューリング部１３０における処理の詳細については後述する。
【０１２４】
オブジェクトコード生成部１４０は、前記並べ替え後のアセンブラコードと並列実行境界情報とに基づいて機械語命令列を生成し、当該機械語命令列を含むオブジェクトコードを、オブジェクトファイル１９０に記録する。
以下、従来の一般的な技術に属する事項については説明を省略し、本コンパイラにおける特徴的な処理について詳しく説明する。
＜２．２  アセンブラコード生成部１２０の詳細＞
アセンブラコード生成部１２０において、条件処理変換部１２１は、分岐命令を用いて条件処理を表した従来様式のアセンブラコードと、当該アセンブラコード中の基本ブロックを示す基本ブロック情報とを入力され、当該基本ブロック情報に基づいて、当該アセンブラコードにおいて条件処理を記述している部分を識別し、識別された部分を分岐命令を用いずに記述したアセンブラコードに変換するとともに、前記基本ブロック情報を変換後のアセンブラコード中の基本ブロックを示すように変更する。
【０１２５】
当該条件処理を記述している部分とは、所定条件の成否を評価する処理を記述している部分と、当該条件の成否何れかの場合に実行されるべき処理を記述している部分とを指し、さらに、当該条件の成否が逆の場合に実行されるべき処理を記述している部分を含んでもよい。
＜２．２．１  データ構造＞
図１１（Ａ）は、条件処理変換部１２１へ入力されるアセンブラコード情報のデータ構造及び内容の一例であり、図１１（Ｂ）のソースプログラムから中間コードを介して、アセンブラコード生成部１２０により生成される。
【０１２６】
アセンブラコード情報において、命令番号欄は命令を識別する番号を表し、ラベル欄は当該命令が分岐先等として参照される場合に用いられるラベルを表し、実行条件欄は当該命令が実質的な効果を生じるために真値であるべき条件フラグを表し、命令欄は当該命令のニーモニック表記を表す。
図１２は、条件処理変換部１２１へ入力される基本ブロック情報のデータ構造及び内容の一例であり、図１１（Ａ）のアセンブラコード情報に対してアセンブラコード生成部１２０により生成される。
【０１２７】
基本ブロック番号欄は基本ブロックを識別する番号を表し、命令範囲欄は当該基本ブロックに対応するアセンブラコード情報における命令の範囲を表し、先行ブロック欄は当該基本ブロックの先行基本ブロックを番号で表し、後続ブロック欄は当該基本ブロックの後続基本ブロックを番号で表す。
なお、図１１（Ａ）の命令を区分する区切り線は、便宜上、図１２の基本ブロック情報により示される各命令範囲を明示するために記入したものであり、アセンブラコード情報は当該区切り線を示す情報を含まない。
＜２．２．２  識別対象＞
条件処理変換部１２１は、前記基本ブロック情報において、所定の先行ブロック及び後続ブロックを有する一連の基本ブロックを検出し、当該一連の基本ブロックに対応する前記アセンブラコード情報の部分を、条件処理を記述している部分であると識別する。条件処理変換部１２１は、６種類のそのような一連の基本ブロックを検出する。
【０１２８】
条件処理変換部１２１が検出する基本ブロックは、一例として、ソースプログラムに記述されたｉｆ文の６種類の変化形（パターン）にそれぞれ対応して、アセンブラコード生成部１２０が生成する基本ブロック情報によって表される。
図１３（Ａ）乃至（Ｆ）は、当該６種類のパターンを示している。同図に示したソースプログラム中、Ａ、Ｂ及びＣはそれぞれ一つの比較演算式を表し、一例としてｘ＝ｙ等と表記される式であり、Ｂ１、Ｂ２及びＢ３は文の並びを表す。
【０１２９】
図１３（Ａ）は単一の比較演算に基づくｉｆ−ｔｈｅｎパターン、（Ｂ）は単一の比較演算に基づくｉｆ−ｔｈｅｎ−ｅｌｓｅパターン、（Ｃ）は論理積演算で結合された２つ以上の比較演算に基づくｉｆ−ｔｈｅｎパターン、（Ｄ）は論理積演算で結合された２つ以上の比較演算に基づくｉｆ−ｔｈｅｎ−ｅｌｓｅパターン、（Ｅ）は論理和演算で結合された２つ以上の比較演算に基づくｉｆ−ｔｈｅｎパターン、（Ｆ）は論理和演算で結合された２つ以上の比較演算に基づくｉｆ−ｔｈｅｎ−ｅｌｓｅパターンである。
【０１３０】
図１４（Ａ）乃至（Ｆ）は、前記各パターンのｉｆ文に対応してアセンブラコード生成部１２０が生成し、条件処理変換部１２１へ供給するアセンブラコード情報を示している。同図の命令欄に示したｃｍｐＡ  Ｃ６命令、ｃｍｐＢ  Ｃ６命令及びｃｍｐＣ  Ｃ６命令は、それぞれｉｆ文中の比較演算式Ａ、Ｂ及びＣを評価し、評価結果を条件フラグレジスタＣ６に格納するための比較命令を表し、ｃｍｐ！Ａ  Ｃ６命令、ｃｍｐ！Ｂ  Ｃ６命令及びｃｍｐ！Ｃ  Ｃ６命令は、それぞれｉｆ文中の中の比較演算式Ａ、Ｂ及びＣの逆条件を評価し、評価結果を条件フラグレジスタＣ６に格納するための比較命令を表す。
【０１３１】
一例として、比較演算式ｘ＝ｙに対応するそのような比較命令は
ｃｍｐｅｑ  Ｃ６，Ｒ０，Ｒ１
及び、
ｃｍｐｎｅ  Ｃ６，Ｒ０，Ｒ１
であり、変数ｘ及びｙをそれぞれレジスタＲ０及びＲ１に移送する命令
ｍｏｖ  Ｒ０，ｘ
ｍｏｖ  Ｒ１，ｙ
に後続して配置される。
【０１３２】
Ｂ１、Ｂ２及びＢ３は、ソースコード中の文の並びＢ１、Ｂ２及びＢ３をそれぞれ実行するための命令列を表す。説明の便宜上、Ｂ１、Ｂ２及びＢ３は、何れも分岐命令を含まないとし、各基本ブロックを仕切り線で区分して示した。
図１５（Ａ）乃至（Ｆ）は、図１４（Ａ）乃至（Ｆ）の各アセンブラコード情報に対応する基本ブロック情報であり、アセンブラコード生成部１２０により生成され、条件処理変換部１２１へ供給される。なお、同図中、先行ブロック欄及び後続ブロック欄の記号・は、図外の基本ブロック番号を表す。
【０１３３】
これらの各基本ブロックと、条件処理変換部１２１により識別される、所定条件の成否を評価する処理を記述している部分、当該条件の成否何れかの場合に実行されるべき処理を記述している部分、及び当該条件の成否が逆の場合に実行されるべき処理を記述している部分とは、次のように対応する。
図１４（Ａ）及び図１５（Ａ）において、基本ブロックｂ０が所定条件の成否を評価する処理を記述している部分であり、基本ブロックｂ１が当該条件の成立時に実行されるべき処理を記述している部分である。
【０１３４】
図１４（Ｂ）及び図１５（Ｂ）において、基本ブロックｂ０が所定条件の成否を評価する処理を記述している部分であり、基本ブロックｂ１が当該条件の成立時に実行されるべき処理を記述している部分であり、基本ブロックｂ２が当該条件の不成立時に実行されるべき処理を記述している部分である。
図１４（Ｃ）及び図１５（Ｃ）、並びに図１４（Ｅ）及び図１５（Ｅ）では、基本ブロックｂ０乃至ｂｎ−１が所定条件の成否を評価する処理を記述している部分であり、基本ブロックｂｎが当該条件の成立時に実行されるべき処理を記述している部分である。
【０１３５】
図１４（Ｄ）及び図１５（Ｄ）、並びに図１４（Ｆ）及び図１５（Ｆ）では、基本ブロックｂ０乃至ｂｎ−１が所定条件の成否を評価する処理を記述している部分であり、基本ブロックｂｎが当該条件の成立時に実行されるべき処理を記述している部分であり、基本ブロックｂｎ＋１が当該条件の不成立時に実行されるべき処理を記述している部分である。
＜２．２．３  条件処理変換部１２１の詳細＞
条件処理変換部１２１は、基本ブロック情報において先行ブロック及び後続ブロックが図１５（Ａ）乃至（Ｆ）のように示されている一連の基本ブロックを検出し、アセンブラコード情報において当該検出された基本ブロックに対応する命令列を、分岐命令を用いない等価な命令列に変換する。
【０１３６】
図１６は、条件処理変換部１２１が当該部分を検出するために用いる照合情報を示している。照合情報において、対照相対番号欄は一連の基本ブロックにおける各基本ブロックの相対位置を表し、対照先行ブロック欄は当該基本ブロックが持つべき先行ブロックを相対位置で表し、対照後続ブロック欄は当該基本ブロックが持つべき後続ブロックを相対位置で表す。
【０１３７】
同図中、先行ブロック欄及び後続ブロック欄の記号＊は、０個以上の任意の基本ブロック番号と一致することを表す。
図１７は、条件処理変換部１２１が行う照合変更処理の詳細を示すフローチャートである。
以下、図１７のフローチャートを参照しながら、当該照合変更処理について説明する。
（ステップＳ１００）基本ブロック情報の先頭基本ブロックから末尾の基本ブロックまでの各基本ブロックを順次照合起点基本ブロックとして、ステップＳ１７０までを繰り返す。
（ステップＳ１１０）照合情報（Ａ）と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
（ステップＳ１１１）パターン全体で一致したか否か判断する。
（ステップＳ１１２）パターン全体で一致した場合、変更処理（Ａ）を行い、再び基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
（ステップＳ１２０）照合情報（Ａ）が一致しない場合、照合情報（Ｂ）と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
（ステップＳ１２１）パターン全体で一致したか否か判断する。
（ステップＳ１２２）パターン全体で一致した場合、変更処理（Ｂ）を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
（ステップＳ１３０）照合情報（Ｂ）が一致しない場合、照合情報（Ｃ）と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
（ステップＳ１３１）パターン全体で一致したか否か判断する。
（ステップＳ１３２）パターン全体で一致した場合、変更処理（Ｃ）を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
（ステップＳ１４０）照合情報（Ｃ）が一致しない場合、照合情報（Ｄ）と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
（ステップＳ１４１）パターン全体で一致したか否か判断する。
（ステップＳ１４２）パターン全体で一致した場合、変更処理（Ｄ）を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
（ステップＳ１５０）照合情報（Ｄ）が一致しない場合、照合情報（Ｅ）と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
（ステップＳ１５１）パターン全体で一致したか否か判断する。
（ステップＳ１５２）パターン全体で一致した場合、変更処理（Ｅ）を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
（ステップＳ１６０）照合情報（Ｅ）が一致しない場合、照合情報（Ｆ）と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
（ステップＳ１６１）パターン全体で一致したか否か判断する。
（ステップＳ１６２）パターン全体で一致した場合、変更処理（Ｆ）を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
（ステップＳ１７０）ステップＳ１００から繰り返す。基本ブロック情報の全ての基本ブロックを照合起点基本ブロックとして、何れの照合情報とも合致しなかった場合に処理を終了する。
【０１３８】
図１８は、条件処理変換部１２１が行う照合処理の詳細を示すフローチャートである。この処理は、照合変更処理からＡ乃至Ｆの何れかの照合情報を指定して呼び出され、基本ブロック番号を保持する変数Ｂ、及び相対番号を保持する変数ｒを用いて実行される。
以下、図１８のフローチャートを参照しながら、当該照合処理について説明する。
（ステップＳ２００）変数Ｂを照合起点基本ブロック番号とする。
（ステップＳ２０１）指定された照合情報の各行を順次対象行としてステップＳ２３０までを繰り返す。
（ステップＳ２０２）変数ｒを当該対象行の対照相対番号欄の値とする。対照相対番号欄の値がｎの式で示されている場合は、初回のループにおけるステップＳ２１３で求めたｎの値を用いてｒの値を具体的に算出する。
（ステップＳ２０３）ｒ＝ｋならステップＳ２２０以降を実行し、ｋ以外であればステップＳ２１０以降を実行する。
（ステップＳ２１０）照合情報の当該対象行と、基本ブロック番号欄が（Ｂ＋ｒ）である基本ブロック情報とを照合する。
（ステップＳ２１１）一致しない場合、ステップＳ２４１へ進む。
（ステップＳ２１２）一致した場合、ｒ＝０であり、かつ処理中の照合情報がＣ乃至Ｆの何れかであれば、ステップＳ２１３を実行する。
（ステップＳ２１３）ｎを算出する。ｎの算出は、一致した後続ブロック番号のうち（Ｂ＋１）でない番号をＴとすれば、処理中の照合情報がＣ又はＤの場合は（Ｔ−Ｂ−１）により行い、Ｅ又はＦの場合は（Ｔ−Ｂ）により行う。
（ステップＳ２２０）一方ｒ＝ｋならば、ｒを順次１からｎ−２として、ステップＳ２２３までを繰り返す。なお、ステップＳ２１３で求めたｎについて１＞（ｎ−２）である場合、この繰り返し処理の本体は実行されない。
（ステップＳ２２１）照合情報の当該対象行と、基本ブロック番号欄が（Ｂ＋ｒ）である基本ブロック情報とを照合する。
（ステップＳ２２２）一致しない場合、ステップＳ２４１へ進む。
（ステップＳ２２３）ステップＳ２２０から繰り返す。
（ステップＳ２３０）ステップＳ２０１から繰り返す。
（ステップＳ２４０）パターン全体で一致したと判定する。このステップは、指定された照合情報の全ての行について一致したと判定された場合に実行される。
（ステップＳ２４１）パターン全体で一致しないと判定する。
【０１３９】
図１９は、条件処理変換部１２１が行う基本ブロック照合処理の詳細を示すフローチャートである。この処理は、照合処理から、照合起点基本ブロック番号Ｂと照合相対番号ｒとを指定して呼び出され、対照先行基本ブロック番号を保持する変数ｉ、及び対照後続基本ブロック番号を保持する変数ｊを用いて実行される。
以下、図１９のフローチャートを参照しながら、当該基本ブロック照合処理について説明する。
（ステップＳ２５０）変数ｉを、順次対象行の照合先行ブロック欄の各要素としてステップＳ２５３までを繰り返す。
（ステップＳ２５１）ｉが＊でなければ、ステップＳ２５２を実行する。
（ステップＳ２５２）基本ブロック番号欄が（Ｂ＋ｒ）である基本ブロック情報の先行ブロック欄を参照し、要素（Ｂ＋ｉ）がなければ、ステップＳ２７１へ進む。
（ステップＳ２５３）ステップＳ２５０から繰り返す。
（ステップＳ２５４）基本ブロック番号欄が（Ｂ＋ｒ）である基本ブロック情報の先行ブロック欄に未照合の要素があれば、ステップＳ２５５へ進む。
（ステップＳ２５５）対象行の照合先行ブロック欄に要素＊がなければ、ステップＳ２７１へ進む。
（ステップＳ２６０）変数ｊを、順次対象行の照合後続ブロック欄の各要素としてステップＳ２６３までを繰り返す。
（ステップＳ２６１）ｊが＊でなければ、ステップＳ２６２を実行する。
（ステップＳ２６２）基本ブロック番号欄が（Ｂ＋ｒ）である基本ブロック情報の後続ブロック欄を参照し、要素（Ｂ＋ｊ）がなければ、ステップＳ２７１へ進む。
（ステップＳ２６３）ステップＳ２６０から繰り返す。
（ステップＳ２６４）基本ブロック番号欄が（Ｂ＋ｒ）である基本ブロック情報の後続ブロック欄に未照合の要素があれば、ステップＳ２６５へ進む。
（ステップＳ２６５）対象行の照合後続ブロック欄に要素＊がなければ、ステップＳ２７１へ進む。
（ステップＳ２７０）一致したと判定する。
（ステップＳ２７１）一致しないと判定する。
【０１４０】
図２０は、条件処理変換部１２１が行う変更処理の詳細を示すフローチャートである。この処理は、照合変更処理からＡ乃至Ｆの何れかの照合情報を指定して呼び出され、基本ブロック番号を保持する変数Ｂ、及び相対番号を保持する変数ｒを用いて実行される。
以下、図２０のフローチャートを参照しながら、当該変更処理について説明する。
（ステップＳ３００）変数Ｂを照合起点基本ブロック番号とする。
（ステップＳ３０１）指定された照合情報の各行を順次対象行としてステップＳ３３０までを繰り返す。
（ステップＳ３０２）変数ｒを当該対象行の対照相対番号欄の値とする。対照相対番号欄の値がｎの式で示されている場合は、ステップＳ２１３で求めたｎの値を用いてｒの値を具体的に算出する。
（ステップＳ３０３）ｒ＝ｋならステップＳ３２０以降を実行し、ｋ以外であればステップＳ３１０以降を実行する。
（ステップＳ３１０）基本ブロック（Ｂ＋ｒ）について基本ブロック変更処理を行う。
（ステップＳ３２０）一方ｒ＝ｋならば、ｒを順次１からｎ−２として、ステップＳ３２２までを繰り返す。なお、ステップＳ２１３で求めたｎについて１＞（ｎ−２）である場合、この繰り返し処理は実行されない。
（ステップＳ３２１）基本ブロック（Ｂ＋ｒ）について基本ブロック変更処理を行う。
（ステップＳ３２２）ステップＳ３２０から繰り返す。
（ステップＳ３３０）ステップＳ３０１から繰り返す。
【０１４１】
図２１は、条件処理変換部１２１が行う基本ブロック変更処理の詳細を示すフローチャートである。この処理は、変更処理から照合起点基本ブロック番号Ｂと相対番号ｒとを指定して呼び出され、変更処理方法を示す変数ｉを用いて実行される。
以下、図２１のフローチャートを参照しながら、当該基本ブロック変更処理について説明する。
（ステップＳ４００）アセンブラコード情報において基本ブロック（Ｂ＋ｒ）に含まれる命令を変更対象とし、変数ｉを順次対象行の変更処理欄の各要素として繰り返す。
（ステップＳ４１０）ｉ＝１ならば、ステップＳ４１１を実行する。
（ステップＳ４１１）変更対象に含まれる比較命令を、逆条件を評価する比較命令に変更する。
（ステップＳ４２０）ｉ＝２ならば、ステップＳ４２１を実行する。
（ステップＳ４２１）変更対象に含まれる比較命令を、当該比較命令に応じて算出される条件フラグ値と、直前の比較命令に応じて算出される条件フラグ値とを論理積演算した値を条件フラグ値として算出するための新たな比較命令に変更する。当該新たな比較命令は、対象プロセッサにおけるｃｍｐＣＣａ命令である。
（ステップＳ４３０）ｉ＝３ならば、ステップＳ４３１を実行する。
（ステップＳ４３１）変更対象に含まれる比較命令を、当該比較命令に応じて算出される条件フラグ値と、直前の比較命令に応じて算出される条件フラグ値とを論理和演算した値を条件フラグ値として算出するための新たな比較命令に変更する。当該新たな比較命令は、対象プロセッサにおけるｃｍｐＣＣｏ命令である。
（ステップＳ４４０）ｉ＝４ならば、ステップＳ４４１を実行する。
（ステップＳ４４１）変更対象に含まれる比較命令を、当該比較命令に応じて算出される条件フラグ値を肯定条件フラグ値として算出すると共に、その論理否定値を否定条件フラグ値として算出するための新たな比較命令に変更する。当該新たな比較命令は、対象プロセッサにおける、条件フラグレジスタ対をオペランドとするｃｍｐＣＣ命令、ｃｍｐＣＣａ命令、又はｃｍｐＣＣｏ命令である。
（ステップＳ４５０）ｉ＝５ならば、ステップＳ４５１以降を実行する。
（ステップＳ４５１）変更対象に含まれる、比較命令を除く無条件実行命令を、直前の比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令に変更する。当該直前の比較命令に応じて２つの条件フラグ値が算出される場合、肯定条件フラグ値を実行条件とする条件実行命令に変更する。
（ステップＳ４５２）変更対象に、比較命令と、当該比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令とが含まれていれば、当該比較命令を、本来算出される条件フラグ値と、直前の比較命令に応じて算出される条件フラグ値とを論理積演算した値を条件フラグ値として算出するための新たな比較命令に変更する。
【０１４２】
当該比較命令に応じて肯定条件フラグ値と否定条件フラグ値とが算出される場合、両者それぞれを直前の比較命令に応じて算出された条件フラグ値と論理積演算した値を、肯定条件フラグ値及び否定条件フラグ値として算出するための新たな比較命令に変更する。
なお、このステップは上記で述べた処理の一実施形態であり、当該変更対象が、所定条件の成立時に実行されるべき処理を記述している部分であり、当該比較命令が、当該部分の中で別の所定条件の成否を評価する処理を記述している部分であり、当該比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令が、当該別の条件の成立時に実行されるべき処理を記述している部分に対応する。
（ステップＳ４５３）変更対象にラベルが含まれていれば除去する。
（ステップＳ４６０）ｉ＝６ならば、ステップＳ４６１以降を実行する。
（ステップＳ４６１）変更対象に含まれる、比較命令を除く無条件実行命令を、直前の比較命令に応じて算出される否定条件フラグ値を実行条件とする条件実行命令に変更する。
（ステップＳ４６２）変更対象に比較命令と、当該比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令とが含まれていれば、当該比較命令を、本来算出される条件フラグ値と、直前の比較命令に応じて算出される否定条件フラグ値とを論理積演算した値を条件フラグ値として算出するための新たな比較命令に変更する。
【０１４３】
当該比較命令に応じて肯定条件フラグ値と否定条件フラグ値とが算出される場合、両者それぞれを直前の比較命令に応じて算出された否定条件フラグ値と論理積演算した値を、肯定条件フラグ値及び否定条件フラグ値として算出するための新たな比較命令に変更する。
当該新たな比較命令は、対象プロセッサにおけるｃｍｐＣＣｎ命令である。
【０１４４】
なお、このステップは上記で述べた処理の一実施形態であり、当該変更対象が、所定条件の不成立時に実行されるべき処理を記述している部分であり、当該比較命令が、当該部分の中で別の所定条件の成否を評価する処理を記述している部分であり、当該比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令が、当該別の条件の成立時に実行されるべき処理を記述している部分に対応する。
（ステップＳ４６３）変更対象にラベルが含まれていれば除去する。
（ステップＳ４７０）ｉ＝７ならば、ステップＳ４７１を実行する。
（ステップＳ４７１）変更対象に含まれる分岐命令を除去する。
（ステップＳ４８０）ｉ＝８ならば、ステップＳ４８１以降を実行する。
（ステップＳ４８１）基本ブロック照合処理において最後に照合された基本ブロック情報の先行ブロック欄に未照合の要素がなかった場合、変更対象に含まれるラベルを除去する。
（ステップＳ４８２）前記未照合の要素がなかった場合には、基本ブロック情報において、基本ブロック番号がＢである行について命令範囲を基本ブロック番号がＢから（Ｂ＋ｒ）までの全ての行の命令範囲を含むように変更すると共に、後続ブロックを基本ブロック番号が（Ｂ＋ｒ）である行の後続ブロックに変更し、（Ｂ＋ｒ）を先行ブロックに含む行について先行ブロックの（Ｂ＋ｒ）をＢに変更し、基本ブロック番号が（Ｂ＋１）から（Ｂ＋ｒ）までの行を削除する。
【０１４５】
前記未照合の要素があった場合には、基本ブロック情報において、基本ブロック番号がＢである行について命令範囲を元の基本ブロック番号がＢから（Ｂ＋ｒ−１）までの全ての行の命令範囲を含むように変更すると共に、後続ブロックを（Ｂ＋ｒ）に変更し、基本ブロック番号が（Ｂ＋ｒ）の行について先行ブロックを前記未照合の要素及びＢとし、基本ブロック番号が（Ｂ＋１）から（Ｂ＋ｒ−１）までの行を削除する。
【０１４６】
何れの場合も、前記更新を行った後、基本ブロック番号を連続番号に変更し、当該変更に応じて先行ブロック及び後続ブロックを変更する。
＜２．２．４  具体例＞
前記照合変更処理を、図１１（Ａ）のアセンブラコード情報及び図１２の基本ブロック情報に適用した場合に、条件処理変換部１２１が行う具体的な処理について説明する。この具体例では、パターン全体での一致が２回検出される。
【０１４７】
１回目の照合変更処理は次のように実行される。
ステップＳ１００〜ステップＳ１７０の１回目のループでは、図１２の基本ブロック情報における基本ブロック番号が１０である行を起点行として、照合処理を行う。
ステップＳ１１０から呼び出される照合処理（Ａ）では、図１６（Ａ）の照合情報の各行と前記起点行以降の基本ブロック情報とを照合する。ステップＳ２００で変数Ｂを１０とする。
【０１４８】
ステップＳ２０１〜ステップＳ２３０の１回目のループでは、照合情報（Ａ）の第１行を対象行とし、変数ｒを当該対象行の対照相対番号０とする。ステップＳ２１０から呼び出される基本ブロック照合処理で、当該対象行と基本ブロック番号が１０である基本ブロック情報とを照合する。
先行ブロックを照合するステップＳ２５０〜ステップＳ２５３のループでは、当該対象行の対照先行ブロックが＊のみであり、前記基本ブロック情報の先行ブロックの９は未照合となり、ステップＳ２５４で未照合要素があると判断する。ステップＳ２５５では当該対象行の対照先行ブロックが＊を含んでいるのでステップＳ２６０へ進む。
【０１４９】
後続ブロックを照合するステップＳ２６０〜ステップＳ２６３のループでは、当該対象行の対照後続ブロックの要素１及び２にそれぞれＢを加えた１１及び１２と、前記基本ブロック情報の先行プロックの１１及び１２とを照合する。ステップＳ２６４では未照合要素はないのでステップＳ２７０へ進み、合致したと判定する。
ステップＳ２０１〜ステップＳ２３０の２回目のループでは、照合情報（Ａ）の第２行を対象行とし、変数ｒを当該対象行の対照相対番号１とする。ステップＳ２１０から呼び出される基本ブロック照合処理で、当該対象行と基本ブロック番号が１１である基本ブロック情報とを照合する。
【０１５０】
ステップＳ２５０〜ステップＳ２５３のループでは、当該対象行の対照先行ブロックの０にＢを加えた１０と前記基本ブロック情報の先行ブロックの１０とを照合し、ステップＳ２５４では未照合要素がないのでステップＳ２６０へ進む。
ステップＳ２６０〜ステップＳ２６３のループでは、当該対象行の対照後続ブロックの要素２にＢを加えた１２と前記基本ブロック情報の先行プロックの１２とを照合する。前記基本ブロック情報の先行プロックの１５は未照合となり、ステップＳ２６４で未照合要素があると判断する。ステップＳ２６５では当該対象行の対照後続ブロックが＊を含んでいないのでステップＳ２７１へ進み、合致しないと判定する。
【０１５１】
この結果、ステップＳ２１１からステップＳ２４１へ進み、全体合致しないと判定し、ステップＳ１１１からステップＳ１２０へ進む。
ステップＳ１２０から呼び出される照合処理（Ｂ）では、図１６（Ｂ）の照合情報の各行と前記起点行以降の基本ブロック情報とを照合する。この処理は前述した照合処理（Ａ）と同様に実行されるので、詳細な説明を省略する。
【０１５２】
照合処理（Ｂ）は、図１４（Ｂ）の照合情報の各行と、基本ブロック番号が１０である行を起点行とした基本ブロック情報とは全体合致しないと判断する。以降、照合処理（Ｃ）乃至（Ｆ）は何れも全体合致しないと判断する。
ステップＳ１００〜ステップＳ１７０の２回目のループでは、図１０の基本ブロック情報における基本ブロック番号が１１である行を起点として、照合処理を行い、照合処理（Ａ）乃至（Ｆ）は何れも全体合致しないと判断する。
【０１５３】
ステップＳ１００〜ステップＳ１７０の３回目のループでは、図１０の基本ブロック情報における基本ブロック番号が１２である行を起点として、照合処理を行い、照合処理（Ａ）が全体合致したと判定し、ステップＳ１１１からステップＳ１１２へ進み、変換処理（Ａ）が呼び出される。
変換処理（Ａ）では、ステップＳ３００で変数Ｂを１０とする。
【０１５４】
ステップＳ３０１〜ステップＳ３３０の１回目のループでは、照合情報（Ａ）の第１行を対象行とし、変数ｒを当該対象行の対照相対番号０とする。ステップＳ３１０から呼び出される基本ブロック更新処理で、当該対象行に示された変更処理１、７を、基本ブロック番号が１２である基本ブロック情報の命令範囲１０５−１０７で示された範囲のアセンブラコード情報に対して適用する。
【０１５５】
ステップＳ４００〜ステップＳ４９０の１回目のループでは、変数ｉを１とし、ステップＳ４１１で比較命令１０６の評価条件を逆転することにより、ｃｍｐｎｅ  ｃ６，ｒ１，０命令をｃｍｐｅｑ  ｃ６，ｒ１，０命令に変更する。
ステップＳ４００〜ステップＳ４９０の２回目のループでは、変数ｉを７とし、ステップＳ４７１で分岐命令１０７を除去する。
【０１５６】
ステップＳ３０１〜ステップＳ３３０の２回目のループでは、照合情報（Ａ）の第２行を対象行とし、変数ｒを当該対象行の対照相対番号１とする。基本ブロック更新処理で、当該対象行に示された変更処理５及び７を、基本ブロック番号が１３である基本ブロック情報の命令範囲１０８で示されたアセンブラコード情報に対して適用する。
ステップＳ４００〜ステップＳ４９０の１回目のループでは、変数ｉを５とする。ステップＳ４５１で、該当する無条件実行命令は命令１０８であり、当該命令を直前の比較命令１０６の肯定結果ｃ６を実行条件とする条件実行命令に変更する。ステップＳ４５２の比較命令の変更処理は、該当する比較命令がないため行われない。ステップＳ４５３のラベルの除去は、該当するラベルがないため行われない。
【０１５７】
ステップＳ３０１〜ステップＳ３３０の３回目のループでは、照合情報（Ａ）の第３行を対象行とし、変数ｒを当該対象行の対照相対番号２とする。基本ブロック更新処理で、当該対象行に示された変更処理８を、基本ブロック番号が１４である基本ブロック情報の命令範囲１０９で示されたアセンブラコード情報に対して適用する。
ステップＳ４００〜ステップＳ４９０の１回目のループでは、変数ｉを８とする。ステップＳ４８１では、基本ブロック番号が１４である基本ブロック情報の先行ブロックに未照合の要素がないので、命令１０９に付されたラベルＬ３を除去する。ステップＳ４８２では、基本ブロック番号が１３及び１４の基本ブロック情報を削除し、基本ブロック番号１２の命令範囲を１０５−１０９、後続ブロックを１６とするとともに、１４を先行ブロックに含む基本ブロック番号が１６の基本ブロック情報について、先行ブロックの１４を１２に変更する。
【０１５８】
図２２及び図２３（Ａ）は、ここまでの処理により、図１１（Ａ）のアセンブラコード情報及び図１２の基本ブロック情報がそれぞれ変更された結果であり、太字は変更箇所、取り消し線は削除箇所を示している。
ステップＳ４８２では、図２３（Ａ）の基本ブロック情報を、さらに基本ブロック番号を連続番号に変更し、当該変更に応じて先行ブロック及び後続ブロックを変更することにより、図２３（Ｂ）の基本ブロック情報に更新する。
【０１５９】
２回目の照合変更処理は次のように実行される。
前記変換処理を実行した後、処理はステップＳ１００へ戻り、図２３（Ｂ）の基本ブロック情報における先頭行から末尾行までを順次起点行として、ステップＳ１００〜ステップＳ１７０のループを繰り返す。
ステップＳ１００〜ステップＳ１７０の１回目のループにおいて、図２３（Ｂ）の基本ブロック情報における基本ブロック番号が１０である行を起点行として、図１６（Ｆ）の照合情報との全体合致が検出される。この動作について、前述した動作と異なる事項を説明する。
【０１６０】
ステップＳ１６０から呼び出される照合処理（Ｆ）では、ステップＳ２００で変数Ｂを１０とする。
ステップＳ２０１〜ステップＳ２３０の１回目のループでは、照合情報（Ｆ）の第１行を対象行とし、変数ｒを当該対象行の対照相対番号０とする。ステップＳ２１０から呼び出される基本ブロック照合処理は、当該対象行と基本ブロック番号が１０である基本ブロック情報とを照合し、合致したと判断する。
【０１６１】
ｒ＝０であり、かつ照合情報（Ｆ）と照合しているので、ステップＳ２１２からステップＳ２１３へ進み、ｎを算出する。ｎは、後続ブロック１１及び１２のうち（Ｂ＋１）でない番号１２から、１２−１０＝２と算出される。
ステップＳ２０１〜ステップＳ２３０の２回目のループでは、照合情報（Ｆ）の第２行を対象行とし、変数ｒを当該対象行の対照相対番号ｋとする。ｒ＝ｋなので、ステップＳ２０３からステップＳ２２０〜ステップＳ２２３の繰り返し処理へ進むが、１＞（ｎ−２）なので、この繰り返し処理の本体は実行されない。
【０１６２】
ステップＳ２０１〜ステップＳ２３０の３回目のループでは、照合情報（Ｆ）の第３行を対象行とし、変数ｒを当該対象行の対照相対番号ｎ−１とする。ステップＳ２１０から呼び出される基本ブロック照合処理は、当該対象行と基本ブロック番号が（Ｂ＋ｎ−１）＝１１である基本ブロック情報とを照合し、合致したと判定する。
ステップＳ２０１〜ステップＳ２３０の４回目及び５回目のループにおいて、ステップＳ２１０から呼び出される基本ブロック照合処理は合致と判定し、ステップＳ２４０で全体合致と判定する。
【０１６３】
この結果、ステップＳ１６１からステップＳ１６２へ進み、変換処理（Ｆ）が呼び出される。
変換処理（Ｆ）では、ステップＳ３００で変数Ｂを１０とする。変換処理における繰り返し処理について前述した事項は省略して、主として、アセンブラコード情報の変更処理を説明する。
【０１６４】
照合情報（Ｆ）の第１行は、命令範囲１００−１０２のアセンブラコード情報に適用され、変更処理７に対応して、ステップＳ４７１で分岐命令１０２を除去する。
照合情報（Ｆ）の第２行に対応する繰り返し処理の本体は実行されない。
照合情報（Ｆ）の第３行は、命令範囲１０３−１０４のアセンブラコード情報に適用され、変更処理１、３、４及び７にそれぞれ対応して、ステップＳ４１１では、比較命令１０３の評価条件を逆転することによりｃｍｐｎｅ  ｃ６，ｒ０，２をｃｍｐｅｑ  ｃ６，ｒ０，２に変更し、ステップＳ４１３では、さらに直前の比較命令１０１の算出結果ｃ６との論理和を算出する比較命令ｃｍｐｅｑｏ
ｃ６，ｒ０，２，ｃ６に変更し、ステップＳ４４１では、さらに元の算出結果とその論理否定値とを算出する比較命令ｃｍｐｅｑｏ  ｃ０：ｃ１，ｒ０，２，ｃ６に変更し、ステップＳ４７１では分岐命令１０４を除去する。
【０１６５】
照合情報（Ｆ）の第４行は、命令範囲１０５−１０９のアセンブラコード情報に適用される。変更処理５に対応して、ステップＳ４５１では、比較命令１０６を除く無条件実行命令１０５及び１０９を、直前の変更後の比較命令１０３の肯定結果ｃ０を実行条件とする条件実行命令に変更する。ステップ４５２では、比較命令１０６をｃｍｐｅｑｎ  ｃ６，ｒ１，０，ｃ０に変更する。ステップＳ４５３では、命令１０５に付されたラベルＬ１を削除する。
【０１６６】
また、変更処理７に対応して、ステップＳ４７１で分岐命令１０９を削除する。
照合情報（Ｆ）の第５行は、命令範囲１１０のアセンブラコード情報に適用される。変更処理６に対応して、ステップＳ４６１では、無条件実行命令１１０を、直前の変更後の比較命令１０３の否定結果ｃ１を実行条件とする条件実行命令に変更する。ステップＳ４６２の比較命令の変更処理は、該当する比較命令がないため行われない。ステップＳ４６３では、命令１１０に付されたラベルＬ２を削除する。
【０１６７】
照合情報（Ｆ）の第６行は、命令範囲１１１のアセンブラコード情報に適用される。変更処理８に対応して、ステップＳ４８１では、基本ブロック番号が１４である基本ブロック情報の先行ブロックに未照合の要素がないので、命令１１１に付されたラベルＬ４を除去する。ステップＳ４８２では、基本ブロック番号が１１乃至１４の基本ブロック情報を削除し、基本ブロック番号１０の命令範囲を１００−１１１、後続ブロックを１７に変更するとともに、１４を先行ブロックに含む基本ブロック情報について、先行ブロックの１４を１０に変更する。
【０１６８】
ステップＳ４８２では、基本ブロック情報を、さらに基本ブロック番号を連続番号に変更し、当該変更に応じて先行ブロック及び後続ブロックを変更する。
図２４及び図２５は、ここまでの処理により、図２２のアセンブラコード情報及び図２３（Ｂ）の基本ブロック情報がそれぞれ変更された結果である。
＜２．３  命令スケジューリング部１３０の詳細＞
命令スケジューリング部１３０は、条件処理変換部１２１により変換されたアセンブラコード情報と基本ブロック情報とを入力され、依存関係解析部１３１は、入力されたアセンブラコード情報における各基本ブロックを対象とし、対象基本ブロックに含まれる命令の実行順序に関する依存関係を表す依存グラフを生成し、命令再配置部１３６は、生成された依存グラフに基づいて、同一の実行結果が得られる範囲で、前記アセンブラコード情報において並列実行可能な命令が一連配置されるように命令を並べ替えると共に、当該一連配置された命令を示す並列実行境界情報を生成する。
【０１６９】
図２６は、命令スケジューリング部１３０が行う命令スケジューリング処理を示すフローチャートである。
（ステップＳ５００）基本ブロック情報に示された各基本ブロックを対象基本ブロックとして、ステップＳ５０３までを繰り返す。
（ステップＳ５０１）依存関係解析部１３１は、アセンブラコード情報における当該対象基本ブロックの命令について、依存グラフを生成する。
（ステップＳ５０２）命令再配置部１３６は、生成された依存グラフに基づいて命令を並べ替えると共に、並列実行境界情報を生成する。
（ステップＳ５０３）ステップＳ５００から繰り返す。
＜２．３．１  依存関係＞
第１命令と、後続配置された第２命令との間に実行順序に関する依存関係があるとは、第２命令を第１命令よりも先に実行した場合に、本来の順序で実行した場合と同一の実行結果が保証されないことを言う。依存関係にある先行命令をプレデセッサと言う。
【０１７０】
依存関係解析部１３１は、入力されたアセンブラコード情報における４種類の依存関係にある命令対
（１）データ依存関係にある命令対：条件フラグレジスタを除くハードウェア資源（例えば汎用レジスタ）を定義する命令と、当該ハードウェア資源を参照する命令
（２）逆依存関係にある命令対：条件フラグレジスタを含むハードウェア資源を定義する命令と、当該ハードウェア資源を定義する命令
（３）出力依存関係にある命令対：条件フラグレジスタを含むハードウェア資源を定義する命令と、当該ハードウェア資源を定義する命令
（４）条件フラグ依存関係にある命令対：条件フラグレジスタを定義する命令と、当該条件フラグレジスタを参照する命令
を判定し、当該判定結果を示す依存グラフを生成する。
【０１７１】
ここで、条件フラグレジスタを参照する命令とは、特に、前述のプロセッサにおいては、条件フラグレジスタに既に格納されているか又は格納されるべき値と、比較演算の結果値とを論理演算する比較命令、並びに条件フラグレジスタに既に格納されているか又は格納されるべき値を実行条件とする条件実行命令を指す。
依存関係にある第１命令と、後続配置された第２命令との実行順序を逆転させない限りにおいて、両者が並列実行可能である場合には、当該第２命令の実行時期を当該第１命令と同一クロックサイクルまで繰り上げることが可能である。対象プロセッサにおいて、前記依存関係（２）（３）及び（４）にある命令対が、この関係に該当する。
【０１７２】
一方、両者が並列実行不可能である場合には、当該第２命令の実行時期を第１命令の次のクロックサイクルまで繰り上げることが可能である。対象プロセッサにおいて、前記依存関係（１）にある命令対がこの関係に該当する。
図２７は、依存グラフの一例を模式的に表している。依存グラフは有向グラフであり、ノードが命令を表し、実線エッジが並列実行不可能な依存関係を表し、点線エッジが並列実行可能な依存関係を表す。
【０１７３】
なお、計算機資源上における有効グラフの表現方法については従来の公知技術に準じるものとし、説明を省略する。
＜２．３．２  依存関係解析部１３１の詳細＞
図２８は、依存関係解析部１３１が行う依存関係解析処理の詳細を示すフローチャートである。
（ステップＳ６００）対象基本ブロックに含まれる個々の命令に対応したノードを生成する。
（ステップＳ６１０）各命令対を対象として、ステップＳ６６０までを繰り返す。
（ステップＳ６２０）対象命令対がデータ依存関係にあるか否かを判断する。
（ステップＳ６２１）データ依存関係にあると判断された場合、対象命令対に対応するノード間に、データ依存関係を示す実線エッジを生成する。
（ステップＳ６３０）対象命令対が逆依存関係にあるか否かを判断する。
（ステップＳ６３１）逆依存関係にあると判断された場合、対象命令対に対応するノード間に、逆依存関係を示す点線エッジを生成する。
（ステップＳ６４０）対象命令対が出力依存関係にあるか否かを判断する。
（ステップＳ６４１）出力依存関係にあると判断された場合、対象命令対に対応するノード間に、出力依存関係を示す点線エッジを生成する。
（ステップＳ６５０）対象命令対が条件フラグ依存関係にあるか否かを判断する。
（ステップＳ６５１）条件フラグ依存関係にあると判断された場合、対象命令対に対応するノード間に、条件フラグ依存関係を示す点線エッジを生成する。
（ステップＳ６６０）ステップＳ６１０から繰り返す。
＜２．３．３  命令再配置部１３６の詳細＞
命令再配置部１３６は、依存関係にある命令の順序が逆転しない限りにおいて、前記アセンブラコード情報における並列実行可能な命令が一連配置されるように命令を並べ替えると共に、当該一連配置された命令を示す並列実行境界情報を生成する。
【０１７４】
図２９は、命令再配置部１３６が行う命令再配置処理の詳細を示すフローチャートである。この処理は、命令番号のリストを保持する変数である未配置リスト、配置候補リスト、及び仮配置リストを用いて実行される。
（ステップＳ７００）未配置リストを、対象基本ブロックに含まれる各命令の命令番号からなるリストに初期化する。
（ステップＳ７１０）未配置リストに要素がある間、ステップＳ７３２までを繰り返す。
（ステップＳ７１１）データ依存関係にある先行命令がある場合に、何れの先行命令も未配置リストに含まれない命令を配置候補命令として判定し、配置候補リストを当該命令の命令番号からなるリストに初期化する。
（ステップＳ７１２）仮配置リストを空にする。
（ステップＳ７２０）配置候補リストに要素がある間、ステップＳ７２５までを繰り返す。
（ステップＳ７２１）配置候補リストに示された命令から、次に配置した場合に、未配置リストに示された命令の実行時間が最短になると予想される命令を、最良命令として判定する。
【０１７５】
具体的には、依存グラフにおいて、配置候補リストに示された各命令に対応するノードをそれぞれ始点としてエッジで連結されたノードを全て辿り、辿ったパス上のノードに対応する命令の実行時間の総和を算出し、最大の総和が算出された始点ノードに対応する命令を最良命令と判定する。
当該最良命令の命令番号を配置候補リストから削除する。
（ステップＳ７２２）当該最良命令が、仮配置リストに示された各命令と同一クロックサイクルにおいて並列実行可能か否かを判定する。
【０１７６】
このステップにおける判定は、ハードウェア資源の個数に係る制約を考慮して行われ、対象プロセッサについて、具体的には、
（１）並列実行可能な命令数は最大で３個（命令デコーダの制約）、
（２）並列実行される命令に応じて、実際に実行部で動作可能なハードウェア資源は最大で３個の演算部４４１乃至４４３、１個のオペランドアクセス部４７、１個のＰＣ部（分岐ユニット）４２（実行部の制約）
である。当該最良命令と、仮配置リストに示された各命令とが、この制約を満たす場合のみ並列実行可能と判定する。
【０１７７】
並列実行可能でないと判定された場合、ステップＳ７２５へ進む。
（ステップＳ７２３）当該最良命令の命令番号を、仮配置リストに追加する。
（ステップＳ７２４）仮配置リストに示された命令と逆依存関係、出力依存関係、又は条件フラグ依存関係にあり、かつ未配置リストに示された命令とデータ依存関係にない命令の命令番号を、配置候補リストに追加する。
（ステップＳ７２５）ステップＳ７２０から繰り返す。
（ステップＳ７３０）仮配置リストに示された各命令を順次出力する。このとき、最後に出力する命令の並列実行境界フラグを１、それ以外の命令の並列実行境界フラグを０として出力する。
（ステップＳ７３１）仮配置リストの要素を、未配置リストから削除する。
（ステップＳ７３２）ステップＳ７１０から繰り返す。
＜２．３．４  具体例＞
前記命令スケジューリング処理を、図２４のアセンブラコード情報、及び図２５の基本ブロック情報に適用した場合の具体例について説明する。
【０１７８】
ステップＳ５００〜ステップＳ５０３のループの一つにおいて、命令スケジューリング部１３０は、基本ブロック番号が１０である基本ブロックを対象として、命令番号１００から１１１までの命令について依存関係解析処理及び命令再配置処理を行う。
依存関係解析処理では、ステップＳ６００で、命令１００、１０１、１０３、１０５、１０６、１０８、１１０、及び１１１に対応して８つのノードを生成する。ステップＳ６１０〜ステップＳ６６０のループでは、当該８つの命令のうち２つからなる全ての命令対について、データ依存関係、逆依存関係、出力依存関係、及び条件フラグ依存関係があるか否かを判定し、依存関係があると判定された命令対に対応するノード間に判定された依存関係を示すエッジを生成する。この結果、図３０に示した依存グラフが生成される。
【０１７９】
命令再配置処理では、ステップＳ７００で、未配置リストが｛１００，１０１，１０３，１０５，１０６，１０８，１１０｝に初期化される。
ステップＳ７１０〜ステップＳ７３２の１回目のループでは、ステップＳ７１１で、データ依存関係にある先行命令を持たない命令１００が配置候補命令と判定され、配置候補リストが｛１００｝に初期化される。ステップＳ７１２で、仮配置リストが空｛｝とされる。
【０１８０】
ステップＳ７２０〜ステップＳ７２５の１回目のループでは、ステップＳ７２１で命令１００が最良命令と判定され、配置候補リストは空｛｝となり、ステップＳ７２３で、仮配置リストに命令１００が追加されて｛１００｝となり、ステップＳ７２４で、配置候補リストへの追加は行われず空｛｝に維持される。
配置候補リストが空｛｝となる結果、ステップＳ７３０へ進み、命令１００が並列実行境界フラグを１として確定配置され、ステップＳ７３１で、未配置リストが｛１０１，１０３，１０５，１０６，１０８，１１０｝となる。
【０１８１】
ステップＳ７１０〜ステップＳ７３２の２回目のループでは、既配置の命令１００をプレデセッサとする命令１０１が配置候補命令と判定され、配置候補リストが｛１０１｝に初期化され、ステップＳ７１２で、仮配置リストが空｛｝とされる。
ステップＳ７２０〜ステップＳ７２５の１回目のループでは、ステップＳ７２１で命令１０１が最良命令と判定され、配置候補リストは空｛｝となり、ステップＳ７２３で、仮配置リストに命令１０１が追加されて｛１０１｝となり、ステップＳ７２４で、配置候補リストに命令１０３が追加されて｛１０３｝となる。
【０１８２】
ステップＳ７２０〜ステップＳ７２５の２回目のループでは、ステップＳ７２１で命令１０３が最良命令と判定され、配置候補リストは空｛｝となり、ステップＳ７２３で、仮配置リストに命令１０３が追加されて｛１０１，１０３｝となり、ステップＳ７２４で、配置候補リストに命令１０５が追加されて｛１０５｝となる。
ステップＳ７２０〜ステップＳ７２５の３回目のループでは、ステップＳ７２１で命令１０３が最良命令と判定され、配置候補リストは空｛｝となり、ステップＳ７２３で、仮配置リストに命令１０３が追加されて｛１０１，１０３｝となり、ステップＳ７２４で、配置候補リストに命令１０５及び命令１１０が追加されて｛１０５，１１０｝となる。
【０１８３】
ステップＳ７２０〜ステップＳ７２５の４回目のループでは、ステップＳ７２１で命令１０５が最良命令と判定され、配置候補リストは｛１１０｝となり、ステップＳ７２３で、仮配置リストに命令１０５が追加されて｛１０１，１０３，１０５｝となり、ステップＳ７２４で、命令の追加は行われず配置候補リストは｛１１０｝に維持される。
ステップＳ７２０〜ステップＳ７２５の５回目のループでは、ステップＳ７２１で命令１１０が最良命令と判定され、配置候補リストは空｛｝となり、ステップＳ７２２で、命令デコーダの個数の制限から命令１１０は仮配置リストに示された３個の命令との並列実行は不可能と判定される。
【０１８４】
配置候補リストが空｛｝となる結果、ステップＳ７３０へ進み、命令１０１及び命令１０３が並列実行境界フラグを０として確定配置され、さらに命令１０５が並列実行境界フラグを１として確定配置され、ステップＳ７３１で、未配置リストが｛１０６，１０８，１１０｝となる。
ステップＳ７１０〜ステップＳ７３２の３回目のループでは、既配置の命令１００、命令１０１、命令１０３、及び命令１０５をプレデセッサとする命令１０６及び命令１１０が配置候補命令と判定され、配置候補リストが｛１０６，１１０｝に初期化され、ステップＳ７１２で、仮配置リストが空｛｝とされる。
【０１８５】
ステップＳ７２０〜ステップＳ７２５の１回目のループでは、ステップＳ７２１で命令１０６が最良命令と判定され、配置候補リストは｛１１０｝となり、ステップＳ７２３で、仮配置リストに命令１０６が追加されて｛１０６｝となり、ステップＳ７２４で、配置候補リストに命令１０８が追加されて｛１０８，１１０｝となる。
ステップＳ７２０〜ステップＳ７２５の２回目のループでは、ステップＳ７２１で命令１０８が最良命令と判定され、配置候補リストは｛１１０｝となり、ステップＳ７２３で、仮配置リストに命令１０８が追加されて｛１０６，１０８｝となり、ステップＳ７２４で、命令の追加は行われず配置候補リストは｛１１０｝に維持される。
【０１８６】
ステップＳ７２０〜ステップＳ７２５の３回目のループでは、ステップＳ７２１で命令１１０が最良命令と判定され、配置候補リストは空｛｝となり、ステップＳ７２３で、仮配置リストに命令１１０が追加されて｛１０６，１０８，１１０｝となり、ステップＳ７２４で、命令の追加は行われず配置候補リストは空｛｝に維持される。
配置候補リストが空｛｝となる結果、ステップＳ７３０へ進み、命令１０６及び命令１０８が並列実行境界フラグを０として確定配置され、さらに命令１１０が並列実行境界フラグを１として確定配置され、ステップＳ７３１で、未配置リストが空｛｝となる。
【０１８７】
未配置リストが空｛｝となる結果、命令再配置処理は終了し、図３１に示した機械語命令列が生成される。
＜その他の変形例＞
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）本発明は、実施の形態で説明したステップを含む方法であるとしてもよい。また、これらの方法を、コンピュータシステムを用いて実現するためのコンピュータプログラムであるとしてもよいし、前記プログラムを表すデジタル信号であるとしてもよい。
【０１８８】
また、本発明は、前記プログラム又は前記デジタル信号を記録したコンピュータ読取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、半導体メモリ等であるとしてもよい。
また、本発明は、電気通信回線、無線又は有線通信回線、若しくはインターネットに代表されるネットワーク等を経由して伝送される前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【０１８９】
また、本発明は、マイクロプロセッサ及びメモリを備えたコンピュータシステムであり、前記メモリは前記プログラムを記憶しており、前記マイクロプロセッサは前記メモリに記憶されている前記プログラムに従って動作することにより、前記方法を実現するとしてもよい。
また、前記プログラム又は前記デジタル信号は、前記記録媒体に記録されて移送され、若しくは、前記ネットワーク等を経由して移送され、独立した他のコンピュータシステムにおいて実施されるとしてもよい。
（２）本実施の形態において、プロセッサ１０は、任意の条件フラグレジスタ対Ｃｍ：Ｃｎに対してそれぞれ肯定条件フラグ値及び否定条件フラグ値を格納できるとしたが、肯定条件フラグ値及び否定条件フラグ値を格納できるレジスタ対を例えば、Ｃｍ：Ｃｍ＋１（ｍ＝０、２、４の何れか）と限定してもよい。
【０１９０】
この限定をすることにより、プロセッサ１０と同等効果を有し、回路規模を縮小したプロセッサを提供できる。また、当該比較命令の命令フォーマットにおいて、条件フラグレジスタを指定するフィールドを１つ省くことができる。
（３）本実施の形態において、プロセッサ１０により実行される比較命令の一例として、汎用レジスタ間の比較条件を評価する比較命令を挙げたが、オペランドのアドレシング種別は本願発明の主要部ではない。例えば、汎用レジスタと即値オペランドとを比較する比較命令を実装してもよい。
（４）本実施の形態において、コンパイラ装置１００における条件処理変換部１２１が検出対象とするアセンブラコード情報を、一例として図１４（Ａ）乃至（Ｆ）に示すと共に、アセンブラコード生成部１２０が、これらのアセンブラコード情報を、それぞれ図１３（Ａ）乃至（Ｆ）のｉｆ文のパターンに対応して生成すると説明したが、これは、検出対象をｉｆ文に対応して生成されたアセンブラコード情報に限定する趣旨ではない。
【０１９１】
例えば、アセンブラコード生成部１２０が、３項演算子（  ？  ：  ）に対応して図１４（Ａ）乃至（Ｆ）に示したアセンブラコード情報を生成し、条件処理変換部１２１が当該アセンブラコード情報を検出対象とする場合も本発明に含まれる。
（５）本実施の形態において、コンパイラ装置１００における条件処理変換部１２１は、ソースプログラムにおいて条件処理を記述した部分に対応する中間コードから、アセンブラコード生成部１２０が一旦生成した従来様式のアセンブラコード情報を、当該アセンブラコード情報に対応する基本ブロック情報に基づいて検出し、分岐命令を含まないアセンブラコード情報に変換するものとして説明したが、アセンブラコード生成部１２０は、当該従来様式のアセンブラコード情報を生成せず、前記中間コードから直接、分岐命令を含まないアセンブラコード情報を生成してもよい。
【０１９２】
このために、コンパイラ上流部１１０は、ソースプログラムに記述されたｉｆ文及び３項演算子に対応して生成される中間コードに対して、個別の比較条件を評価する部分、当該比較条件の成立時に実行されるべき部分、及び当該比較条件の不成立時に実行されるべき部分をそれぞれ識別するための情報を含めて出力し、アセンブラコード生成部１２０は、当該情報により識別される中間コードの各部分から、分岐命令を含まないアセンブラコード情報を生成すればよい。
（６）コンパイラ装置１００において、命令スケジューリング部１３０は、アセンブラコード生成部１２０が一旦生成した従来様式のアセンブラコード情報における変換対象部分について、条件処理変換部１２１による変換前の実行所要サイクル数と、変換後の実行所要サイクル数とを比較し、前者が後者よりも小さいか等しい場合、アセンブラコード情報を変換前の状態に戻してもよい。
【０１９３】
この構成によれば、性能向上の効果を保証することができる。
【産業上の利用可能性】
【０１９４】
本発明のプロセッサによれば、条件フラグ値を実行条件とする条件実行命令を含み、かつ分岐命令を含まないプログラムによって、複合条件処理を一時に実行処理できるので、複合条件処理を短時間で実行することが可能となり、プログラムの規模縮小、並びに実行並列度向上による処理時間短縮が要望されるプロセッサして有用である。
【図面の簡単な説明】
【０１９５】
【図１】プロセッサ１０の全体構成を示すブロック図
【図２】実行部５０の構成を示すブロック図
【図３】条件フラグ演算部５１の構成を示すブロック図
【図４】論理演算回路５０１の構成を示すブロック図
【図５】プロセッサ１０が実行する比較命令の一覧を示す図
【図６】プロセッサ１０が処理する比較演算の一覧を示す図
【図７】比較命令のフォーマットの一例を示す図
【図８】プロセッサ１０によって図３６の複合条件処理を実行するためのプログラムの一例を示す図
【図９】プロセッサ１０が図８のプログラムを実行した場合の実行ステージにおける詳細なタイミングチャート
【図１０】コンパイラ装置１００の全体構成を示すブロック図
【図１１】（Ａ）アセンブラコード情報の一例を示す図、（Ｂ）前記アセンブラコード情報に対応するソースプログラムを示す図
【図１２】基本ブロック情報の一例を示す図
【図１３】（Ａ）〜（Ｆ）ソースプログラムにおけるｉｆ文の６種類のパターンを示す図
【図１４】（Ａ）〜（Ｆ）ｉｆ文の各パターンに対応するアセンブラコード情報を示す図
【図１５】（Ａ）〜（Ｆ）各アセンブラコードに対応する基本ブロック情報を示す図
【図１６】条件処理部分の検出に用いられる照合情報を示す図
【図１７】照合変更処理の詳細を示すフローチャート
【図１８】照合処理の詳細を示すフローチャート
【図１９】基本ブロック照合処理の詳細を示すフローチャート
【図２０】変更処理の詳細を示すフローチャート
【図２１】基本ブロック変更処理の詳細を示すフローチャート
【図２２】照合変更処理が適用されたアセンブラコード情報の一例を示す図
【図２３】（Ａ）及び（Ｂ）照合変更処理が適用された基本ブロック情報の一例を示す図
【図２４】照合変更処理が適用されたアセンブラコード情報の一例を示す図
【図２５】照合変更処理が適用された基本ブロック情報の一例を示す図
【図２６】命令スケジューリング処理を示すフローチャート
【図２７】模式的に表した依存グラフの一例を示す図
【図２８】依存関係解析処理の詳細を示すフローチャート
【図２９】命令再配置処理の詳細を示すフローチャート
【図３０】依存関係解析処理により生成される依存グラフの一例を示す図
【図３１】命令再配置処理により生成される機械語命令列の一例を示す図
【図３２】従来のプロセッサの一構成例を示すブロック図
【図３３】条件処理の一例を示すフローチャート
【図３４】従来のプロセッサによって図３３の条件処理を実行するためのプログラムの一例を示す図
【図３５】従来のプロセッサが図３４のプログラムを実行した場合のタイミングチャート
【図３６】複合条件処理の一例を示すフローチャート
【図３７】従来のプロセッサによって図３６の複合条件処理を実行するためのプログラムの一例を示す図
【符号の説明】
【０１９６】
１０  プロセッサ
２０  命令供給部
２１  命令フェッチ部
２２  命令レジスタ群
３０  解読部
３１  命令発行制御部
３２  命令デコーダ群
４０  実行部
４１  実行制御部
４２  ＰＣ部
４３  レジスタファイル
４６  条件フラグレジスタ
４７  オペランドアクセス部
４８  データバス
４９  データバス
５０  実行部
５１  条件フラグ演算部
５２  実行制御部
９０  プロセッサ
１００  コンパイラ装置
１１０  コンパイラ上流部
１２０  アセンブラコード生成部
１２１  条件処理変換部
１３０  命令スケジューリング部
１３１  依存関係解析部
１３１  命令スケジューリング部
１３２  データ依存判定部
１３３  逆依存判定部
１３４  出力依存判定部
１３５  条件フラグ依存判定部
１３６  命令再配置部
１４０  オブジェクトコード生成部
１８０  ソースファイル
１９０  オブジェクトファイル
２２１〜２２３  命令レジスタ
３２１〜３２３  命令デコーダ
４４１〜４４３  演算部
４５１〜４５３  ゲート
５０１〜５０３  論理演算回路
５１０〜５５３  セレクタ
６０１  論理積演算器
６０２  論理否定演算器
６０３  論理和演算器
６０４  論理否定演算器
６０５  論理否定演算器
６０６  論理積演算器
６０７〜６０８  セレクタ
【図１】
2006209805.tif 000003
【図２】
2006209805.tif 000004
【図３】
2006209805.tif 000005
【図４】
2006209805.tif 000006
【図５】
2006209805.tif 000007
【図６】
2006209805.tif 000008
【図７】
2006209805.tif 000009
【図８】
2006209805.tif 000010
【図９】
2006209805.tif 000011
【図１０】
2006209805.tif 000012
【図１１】
2006209805.tif 000013
【図１２】
2006209805.tif 000014
【図１３】
2006209805.tif 000015
【図１４】
2006209805.tif 000016
【図１５】
2006209805.tif 000017
【図１６】
2006209805.tif 000018
【図１７】
2006209805.tif 000019
【図１８】
2006209805.tif 000020
【図１９】
2006209805.tif 000021
【図２０】
2006209805.tif 000022
【図２１】
2006209805.tif 000023
【図２２】
2006209805.tif 000024
【図２３】
2006209805.tif 000025
【図２４】
2006209805.tif 000026
【図２５】
2006209805.tif 000027
【図２６】
2006209805.tif 000028
【図２７】
2006209805.tif 000029
【図２８】
2006209805.tif 000030
【図２９】
2006209805.tif 000031
【図３０】
2006209805.tif 000032
【図３１】
2006209805.tif 000033
【図３２】
2006209805.tif 000034
【図３３】
2006209805.tif 000035
【図３４】
2006209805.tif 000036
【図３５】
2006209805.tif 000037
【図３６】
2006209805.tif 000038
【図３７】
2006209805.tif 000039