(57)【特許請求の範囲】
【請求項１】
複数の命令を１のサイクルにおいて実行するプロセッサであって、
レジスタと命令読出手段と解読手段とアクセス手段とを含み、
前記命令読出手段は、外部のプログラムから少なくとも第１命令と第２命令とを含む複数の命令を読み出し、
前記第１命令は、前記第１命令のオペランドで記述された１のレジスタについて、前記レジスタの部分である第１領域へのアクセス指示を含み、前記第２命令は、前記第２命令のオペランドで記述された前記レジスタについて、前記レジスタの部分である第２領域へのアクセス指示を含み、
前記解読手段は、１のサイクルにおいて、読み出された命令毎に命令を解読し、命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、
前記解読情報は、少なくとも前記レジスタと前記第１領域と前記第２領域とに関する情報を含み、
前記アクセス手段は、１のサイクルにおいて、前記解読情報に含まれる前記レジスタの前記第１領域へのアクセスと、前記レジスタの前記第２領域へのアクセスとを実行し、
前記各命令は、並列実行の可否を示す並列実行情報を含み、
前記解読手段は、
前記命令に含まれている並列実行情報を基にして、１のサイクルにおいて実行する命令の集合を決定する命令発行制御部と、読み出された前記複数の命令のうち、前記集合に含まれる命令を解読し、他の命令の解読を停止する命令解読部とを含み、
前記第１命令に含まれるアクセスの対象となる前記第１領域と、前記第２命令に含まれるアクセスの対象となる前記第２領域とは、交わりがなく、それぞれ部分の領域であり、
前記第１命令は、前記レジスタの第１領域へのデータの格納指示を含み、前記第２命令は、前記レジスタの前記第２領域からのデータの参照指示を含み、
前記アクセス手段は、１のサイクルにおいて、レジスタの第１領域へのデータの格納と、前記レジスタの第２領域からのデータの参照とを実行し、
前記解読情報は、命令に含まれるオペコードを含み、
前記プロセッサは、さらに、
１のサイクルにおいて、前記解読情報に含まれるオペコードとレジスタとレジスタの領域とに関する情報とに基づいて、命令毎に演算又はメモリアクセスを行い、演算情報を生成する演算手段を含み、 
前記演算情報は、前記第１命令による第１演算情報と、前記第２命令による第２演算情報とを含み、
レジスタへデータを格納する前記アクセス手段は、
前記第１演算情報と、前記第２演算情報と、他の命令による演算情報とのうちの１の演算情報を選択し、選択した演算情報の前記第１領域に対応する情報を１のレジスタの前記第１領域へ書き込む第１選択部と、
前記第１演算情報と、前記第２演算情報と、他の命令による演算情報とのうちの１の演算情報を選択し、選択した演算情報の前記第２領域に対応する情報を１のレジスタの前記第２領域へ書き込む第２選択部と、
レジスタ書込制御部とを含み、
1のサイクルにおいて、前記解読情報に含まれる前記レジスタと前記第1領域とに関する情報に基づいて、前記第１選択部に対して、前記第1演算情報を選択し、前記第1演算情報を前記レジスタの前記第1領域に書き込むよう前記レジスタ書込制御部が制御する一方、前記解読情報に含まれる前記レジスタと前記第2領域とに関する情報に基づいて、第2命令により参照するデータを前記レジスタの前記第2領域から参照するよう制御することを特徴とするプロセッサ。
【請求項２】
複数の命令を１のサイクルにおいて実行するプロセッサであって、
レジスタと命令読出手段と解読手段とアクセス手段とを含み、
前記命令読出手段は、外部のプログラムから少なくとも第１命令と第２命令とを含む複数の命令を読み出し、
前記第１命令は、前記第１命令のオペランドで記述された１のレジスタについて、前記レジスタの部分である第１領域へのアクセス指示を含み、前記第２命令は、前記第２命令のオペランドで記述された前記レジスタについて、前記レジスタの部分である第２領域へのアクセス指示を含み、
前記解読手段は、１のサイクルにおいて、読み出された命令毎に命令を解読し、命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、
前記解読情報は、少なくとも前記レジスタと前記第１領域と前記第２領域とに関する情報を含み、
前記アクセス手段は、１のサイクルにおいて、前記解読情報に含まれる前記レジスタの前記第１領域へのアクセスと、前記レジスタの前記第２領域へのアクセスとを実行し、
前記各命令は、並列実行の可否を示す並列実行情報を含み、
前記解読手段は、
前記命令に含まれている並列実行情報を基にして、１のサイクルにおいて実行する命令の集合を決定する命令発行制御部と、読み出された前記複数の命令のうち、前記集合に含まれる命令を解読し、他の命令の解読を停止する命令解読部とを含み、
前記第１命令に含まれるアクセスの対象となる前記第１領域と、前記第２命令に含まれるアクセスの対象となる前記第２領域とは、交わりがなく、それぞれ部分の領域であり、
前記第１命令は、前記レジスタの第１領域へのデータの格納指示を含み、前記第２命令は、前記レジスタの前記第２領域へのデータの格納指示を含み、
前記アクセス手段は、１のサイクルにおいて、レジスタの第１領域へのデータの格納と、前記レジスタの第２領域へのデータの格納とを実行し、
前記解読情報は、命令に含まれるオペコードを含み、
前記プロセッサは、さらに、
１のサイクルにおいて、前記解読情報に含まれるオペコードとレジスタとレジスタの領域とに関する情報とに基づいて、命令毎に演算又はメモリアクセスを行い、演算情報を生成する演算手段を含み、
前記演算情報は、前記第１命令による第１演算情報と、前記第２命令による第２演算情報とを含み、
レジスタへデータを格納する前記アクセス手段は、
前記第１演算情報と、前記第２演算情報と、他の命令による演算情報とのうちの１の演算情報を選択し、選択した演算情報の前記第１領域に対応する情報を１のレジスタの前記第１領域へ書き込む第１選択部と、
前記第１演算情報と、前記第２演算情報と、他の命令による演算情報とのうちの１の演算情報を選択し、選択した演算情報の前記第２領域に対応する情報を１のレジスタの前記第２領域へ書き込む第２選択部と、
１のサイクルにおいて、前記解読情報に含まれる前記レジスタと前記第１領域とに関する情報に基づいて、前記第１選択部に対して、前記第１演算情報を選択し、前記第１演算情報を前記レジスタの前記第１領域へ書き込むように制御し、前記解読情報に含まれる前記レジスタと前記第２領域とに関する情報に基づいて、前記第２選択部に対して、前記第２演算情報を選択し、前記第２演算情報を前記レジスタの前記第２領域へ書き込むように制御するレジスタ書込制御部とを含むことを特徴とするプロセッサ。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体に関し、特に前記プロセッサにおける並列処理において実行サイクル数の削減を図る技術に関する。
【背景技術】
【０００２】
近年、マイクロプロセッサが組み込まれている製品が高機能化し、また高速化することに伴い、さらに高い処理性能を持つマイクロプロセッサ（以下、単に「プロセッサ」という。）が望まれている。一般に、プロセッサ上での複数の命令のスループットを高めるために、次に示すパイプライン方式が採用されている。パイプライン方式によると、命令は、連続して実行される複数の小さい単位命令に分割され、命令が実行される過程は、連続する複数の小さい過程（ステージと呼ばれる）に分割され、プロセッサは、各ステージに対応する別々の実行部（ハードウェア）を有する。各単位命令が、各ステージにおいて各実行部により順次実行されることより、１命令が実行される。前記命令に続く命令が実行される場合には、前記命令より１ステージ分だけ遅れて、各単位命令が、各ステージにおいて各実行部により実行される。このようにして、複数の命令が並行して実行される。
また、さらなる性能向上のために、個々の命令レベルで並列処理を行う方式が採用されている。ここで、命令レベルでの並列処理とは、１マシンサイクルにおいて複数の命令を同時に実行することであり、ダイナミックスケジューリングによるものとスタティックスケジューリングによるものとがある。ダイナミックスケジューリングによるものの代表例としてスーパースカラ方式がある。この方式では、プロセッサ上で複数の命令が実行されるときに、命令コードが解読され、その後、解読された命令コードにより、プロセッサの命令発行制御部（ハードウェア）が複数の命令間の依存関係を解析して並列実行可能か否かを判定し、プロセッサは、並列実行可能な適切な組み合わせの命令を並列実行する。
スタティックスケジューリングによるものの代表例としてＶＬＩＷ（ＶｅｒｙＬｏｎｇ Ｉｎｓｔｒｕｃｔｉｏｎ Ｗｏｒｄ）方式がある。この方式は、実行形式コード生成時にコンパイラ等により静的に複数の命令間の依存関係を解析し、解析結果に基づいて命令コードの移動を行って実行効率の良い命令ストリームを生成する。一般のＶＬＩＷ方式では、同時実行可能な複数の命令を一つの固定長の命令供給単位（ここでは「パケット」と呼ぶ）に記述する。
【０００３】
上記のいずれのスケジューリング方法においても、命令並列処理に際して発生するデータの依存関係によるハザードが回避される。具体的には、それぞれの命令においてデータが参照されるレジスタ名及びデータが格納されるレジスタ名に関する情報を基にして、あるレジスタに値を格納する命令とその格納値を参照する命令とが同一サイクル内において発行されないように制御される。上記ダイナミックスケジューリングの場合には、実行時に前記命令発行制御部が、上記２命令を並列実行せず逐次実行するように制御する。上記スタティックスケジューリングの場合には、コンパイル時にコンパイラが、同一サイクルに発行される命令グループ内にデータ依存関係にある命令の組み合わせが含まれないようにスケジューリングする。
【０００４】
近年、信号処理性能強化のため、基本命令に加えて、基本命令よりも大きいサイズのデータを扱うメディア処理命令を採用するプロセッサが増えてきている。メディア処理命令では、基本命令で扱うレジスタよりも大きい幅を持つレジスタに複数のデータを格納し、それらのデータを並列に処理することにより信号処理性能の向上を図っている。メディア処理命令を備えるプロセッサの中には、メディア処理命令専用のレジスタを備えるのではなく、レジスタを基本命令とメディア処理命令で共用し、基本命令においてはレジスタの一部にのみ書き込みを行うようにしているプロセッサがある。
【特許文献１】特開平０７−２９５８１１号公報
【特許文献２】特開平０７−０７３０３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このようなプロセッサにおいて、命令コード中に示されたレジスタ名を参照することにより複数の命令間の依存関係を解析する前述の命令発行制御方法を用いると、例えばあるレジスタの上位半分のみを更新する命令と、そのレジスタの下位半分のみを参照する命令との間には、命令コード中に示されるレジスタ名が同一であるので、データ依存の関係が存在するとみなされ、これらの命令は並列実行せず逐次実行されることになるという問題点がある。ここで、データ依存の関係とは、ある資源にデータを格納する命令と、そのデータを参照する命令との間の依存関係をいう。
上記の問題点を解決するために、本発明は、複数の命令を１のサイクルにおいて実行するプロセッサにおいて、並列処理を行う場合に、実行サイクル数を削減することができるプロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、本発明は、複数の命令を１のサイクルにおいて実行するプロセッサであって、レジスタと命令読出手段と解読手段とアクセス手段とを含み、前記命令読出手段は、外部のプログラムから少なくとも第１命令と第２命令とを含む複数の命令を読み出し、前記第１命令は、１のレジスタの全部又は部分である第１領域へのアクセス指示を含み、前記第２命令は、前記レジスタの全部又は部分である第２領域へのアクセス指示を含み、ここで、前記第１領域が前記レジスタの全部の領域である場合には、前記第２領域は前記レジスタの部分の領域であり、前記第２領域が前記レジスタの全部の領域である場合には、前記第１領域は前記レジスタの部分の領域であり、また、前記２個のアクセス指示のうち少なくとも１個は、前記レジスタの全部又は部分の領域へのデータの格納の指示であり、前記解読手段は、１のサイクルにおいて、読み出された命令毎に命令を解読し、命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、前記解読情報は、少なくとも前記レジスタと前記第１領域と前記第２領域とに関する情報を含み、前記アクセス手段は、１のサイクルにおいて、前記解読情報に含まれる前記レジスタの前記第１領域へのアクセスと、前記レジスタの前記第２領域へのアクセスとを実行する。
【発明の効果】
【０００７】
この構成によると、プログラム中において、１のレジスタの前記第１部分をアクセスする命令と同じレジスタの前記第２部分をアクセスする別の命令がある場合に、前記２個の命令を１のサイクルにおいて実行することができるので、従来のプロセッサと比較すると、実行サイクル数を削減することができる。
ここで、前記各命令は、並列実行の可否を示す並列実行情報を含み、前記解読手段は、前記命令に含まれている並列実行情報を基にして、１のサイクルにおいて実行する命令の集合を決定する命令発行制御部と、読み出された前記複数の命令のうち、前記集合に含まれる命令を解読し、他の命令の解読を停止する命令解読部とを含むように構成してもよい。
ここで、前記解読情報は、命令に含まれるオペコードを含み、前記プロセッサは、さらに、１のサイクルにおいて、前記解読情報に含まれるオペコードとレジスタとレジスタの領域とに関する情報とに基づいて、命令毎に演算又はメモリアクセスを行い、演算情報を生成する演算手段を含み、前記演算情報は、前記第１命令による第１演算情報と、前記第２命令による第２演算情報とを含み、レジスタへデータを格納する前記アクセス手段は、前記第１演算情報と、前記第２演算情報と、他の命令による演算情報とのうちの１の演算情報を選択し、選択した演算情報の前記第１領域に対応する情報を１のレジスタの前記第１領域へ書き込む第１選択部と、前記第１演算情報と、前記第２演算情報と、他の命令による演算情報とのうちの１の演算情報を選択し、選択した演算情報の前記第２領域に対応する情報を１のレジスタの前記第２領域へ書き込む第２選択部と、１のサイクルにおいて、前記解読情報に含まれる前記レジスタと前記第１領域とに関する情報に基づいて、前記第１選択部に対して、前記第１演算情報を選択し、前記第１演算情報を前記レジスタの前記第１領域へ書き込むように制御し、前記解読情報に含まれる前記レジスタと前記第２領域とに関する情報に基づいて、前記第２選択部に対して、前記第２演算情報を選択し、前記第２演算情報を前記レジスタの前記第２領域へ書き込むように制御するレジスタ書込制御部とを含むように構成してもよい。
【０００８】
ここで、前記第１命令に含まれるアクセスの対象となる前記第１領域と、前記第２命令に含まれるアクセスの対象となる前記第２領域とは、交わりがなく、それぞれ部分の領域であり、前記第１命令は、前記レジスタの第１領域へのデータの格納指示を含み、前記第２命令は、前記レジスタの前記第２領域からのデータの参照指示を含み、前記アクセス手段は、１のサイクルにおいて、レジスタの第１領域へのデータの格納と、前記レジスタの第２領域からのデータの参照とを実行するように構成してもよい。
ここで、前記第１命令に含まれるアクセスの対象となる前記第１領域と、前記第２命令に含まれるアクセスの対象となる前記第２領域とは、交わりがなく、それぞれ部分の領域であり、前記第１命令は、前記レジスタの第１領域へのデータの格納指示を含み、前記第２命令は、前記レジスタの前記第２領域へのデータの格納指示を含み、前記アクセス手段は、１のサイクルにおいて、レジスタの第１領域へのデータの格納と、前記レジスタの第２領域へのデータの格納とを実行するように構成してもよい。
ここで、前記第１命令に含まれるアクセスの対象となる前記第１領域と、前記第２命令に含まれるアクセスの対象となる前記第２領域とは、第３領域において重なりを有し、前記第１命令は、前記レジスタの第１領域へのデータの格納指示を含み、前記第２命令は、前記レジスタの前記第２領域へのデータの格納指示を含み、前記アクセス手段は、１のサイクルにおいて、レジスタの第１領域から第３領域を除く領域へのデータの格納と、レジスタの第３領域へのデータの格納と、前記レジスタの第２領域から第３領域を除く領域へのデータの格納とを実行するように構成してもよい。
ここで、前記アクセス手段は、前記プログラム内において、第１命令及び第２命令のうち、後方に記録されている命令により、前記レジスタの第３領域へのデータの格納を行うように決定するように構成してもよい。ここで、前記アクセス手段は、あらかじめ命令の種類毎に優先度を記憶しており、前記優先度を用いて、第１命令及び第２命令のうち、いずれの命令により、前記レジスタの第３領域へのデータの格納を行うかを決定するように構成してもよい。
【０００９】
ここで、前記解読手段は、命令解読部と命令発行制御部とを含み、前記命令解読部は、１のサイクルにおいて、読み出される命令毎に、命令の解読又は解読の停止の指示により、命令を解読し命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、又は命令の解読を停止し、ここで、前記解読される複数の命令には、少なくとも前記第１命令と前記第２命令とが含まれ、前記解読情報は、少なくとも前記レジスタと前記第１領域と前記第２領域とに関する情報を含み、前記命令発行制御部は、１のサイクルにおいて、読み出される命令毎に、命令を解読する指示を前記命令解読部へ出力することにより、前記命令解読部に対して各命令を解読するように制御し、前記命令解読部による各命令の解読後に、前記レジスタと前記第１領域と前記第２領域とに関する情報を含む解読情報を受け取り、前記第１領域と前記第２領域とが同一領域であるか否かを判断し、同一領域であると判断する場合に、前記第２命令の解読を停止する指示を前記命令解読部へ出力することにより、前記命令解読部に対して前記第２命令の解読を停止するように制御するように構成してもよい。
【００１０】
ここで、前記命令発行制御部は、命令の種類と、前記命令がデータを参照し又はデータを格納するレジスタの領域との組を複数個含む参照格納資源表を含み、前記命令発行制御部は、前記解読情報から、前記参照格納資源表を用いて、各命令に含まれるレジスタの領域に関する情報を取得するように構成してもよい。また、本発明は、高級言語により記述されたソースプログラムからオブジェクトコードを生成するコンパイル装置であって、高級言語により記述されたソースプログラムを記憶している記憶手段と、前記記憶手段からソースプログラムを読み出し、読み出したソースプログラムに翻訳処理を施して、レジスタに関する情報を含む１以上の実行形式命令から構成される実行形式プログラムを生成する実行形式コード生成手段と、前記実行形式プログラム中の１以上の実行形式命令を、各実行形式命令に含まれるレジスタの一部分の領域に関する情報に基づいて、並列実行できる複数の実行形式命令が隣接するように並べ換える命令スケジューリング手段と、並べ換えられた各実行形式命令を基にして、オブジェクトコードを生成するオブジェクトコード生成手段とを含む。
【００１１】
ここで、前記命令スケジューリング手段は、前記１以上の実行形式命令について、各実行形式命令が並べられている順序と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係解析部と、生成された前記依存関係情報に基づいて、並列実行可能な命令の集合を決定し、また、前記実行形式命令を再配置する命令再配置部と、前記決定された集合毎に、並列実行の可否を示す並列実行情報を付加する実行境界付加部とを含むように構成してもよい。
【００１２】
ここで、前記依存関係解析部は、実行形式命令の種類と、前記実行形式命令がデータを参照し、又はデータを格納するレジスタの一部分の領域との組を複数個含む参照格納資源表と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報を参照格納資源表から取得する資源取得部と、各実行形式命令が並べられている順序と、前記取得したレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係生成部とを含むように構成してもよい。
【発明を実施するための最良の形態】
【００１３】
本発明の実施の形態として、コンパイル装置及びプロセッサが組み込まれている応用装置から構成されるプログラム実行システムについて、図面を用いて詳細に説明する。
Ｉ 実施の形態１本発明に係る１の実施の形態としてのプログラム実行システム４００について説明する。プログラム実行システム４００は、図１に示すように、コンパイル装置２００及び応用装置３００から構成される。
【００１４】
コンパイル装置２００は、ソースコード記憶部１３０、コンパイル部２１０及びオブジェクトコード記憶部１４０から構成され、ソースコード記憶部１３０に記憶されているプログラムであるソースコードをコンパイルしてオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコード記憶部１４０へ書き込む。ここで、前記コンパイルは、命令の並列スケジューリングを含んでいる。ここで、ソースコードは、高級言語で記述されている。
【００１５】
応用装置３００は、プロセッサ３１０、ＲＯＭ３２０、ＲＡＭ３３０、入力部３４０、出力部３５０から構成され、コンパイル装置２００により生成されたオブジェクトコードがあらかじめＲＡＭ３３０に記憶されており、プロセッサ３１０は、ＲＡＭ３３０に記憶されているオブジェクトコードを読み出して実行する。応用装置３００は、一例としてＭＰＥＧデコーダである。
以下において、プロセッサ３１０及びコンパイル装置２００について説明する。なお、応用装置３００及びその構成要素（プロセッサ３１０を除く）は、本発明の主題ではないので、説明を省略する。
【００１６】
１ プロセッサ３１０プロセッサ３１０は、コンパイル装置により静的な並列スケジューリングが施されたオブジェクトコードを実行することを前提としたプロセッサである。
ここでは、プロセッサ３１０が解読実行する命令の構成について説明し、その後、プロセッサ３１０の構成及び動作について説明する。
１．１ 命令のフォーマットプロセッサ３１０が解読し実行する命令の構成について説明する。ここで、前記命令は、オブジェクトコード記憶部１４０に記憶されているオブジェクトコード（以下、単に、命令と呼ぶ）である。
【００１７】
図２は、プロセッサ３１０が解読し実行する命令のフォーマットを示す図である。この図において、５個の命令１５〜１９が示されている。プロセッサ３１０が解読し実行する各命令は、１個又は２個の命令構成要素（ここでは「ユニット」と呼ぶ。）により構成され、各ユニットは、２１ビットからなる。つまり、１個のユニットから構成される２１ビット命令と、２個のユニットから構成される４２ビット命令との２種類の命令フォーマットが存在する。図２に示される命令１５〜１７は、２１ビット命令であり、命令１８〜１９は、４２ビット命令である。
【００１８】
各命令は、並列実行境界情報１０とフォーマット情報１１とオペコード部１２とオペランド部１３とを含む。フォーマット情報１１は、１ビットからなり、命令が２１ビット命令及び４２ビット命令のいずれの命令であるかを示す。フォーマット情報１１が“０”である場合には、命令は、１個のユニットからなる２１ビット命令である。フォーマット情報１１が“１”である場合には、命令は、そのユニットとそれに後続するユニットとを連結して構成される２個のユニットからなる４２ビット命令である。
【００１９】
並列実行境界情報１０は、１ビットからなり、並列実行境界情報１０が含まれる命令とそれに後続する命令との間に並列実行の境界が存在するか否かを示すものである。具体的には、並列実行境界情報１０が“１”の場合には、その命令と後続命令との間に並列実行の境界が存在し、並列実行境界情報１０が“０”の場合には、並列実行の境界が存在しないことを示す。なお、この並列実行境界情報１０の利用方法の詳細については、後で述べる。
【００２０】
各命令からフォーマット情報１１と並列実行境界情報１０とを除いた残りの部分であるオペコード部１２とオペランド部１３とにおいて、各命令のオペレーションが指定される。各命令のオペレーションの指定において、２１ビット命令では１９ビットの長さ、４２ビット命令では４０ビットの長さが使用できる。具体的には、命令１５〜１９において、“Ｏｐ１”、“Ｏｐ２”、“Ｏｐ３”により示されるフィールドは、オペコード部であり、オペレーションの種類を表すオペコードが指定される。“Ｒｓ”及び“Ｒｄ”で示されるフィールドは、オペランド部であり、“Ｒｓ”で示されるフィールドでは、ソースオペランドとなるレジスタのレジスタ番号が指定され、“Ｒｄ”で示されるフィールドでは、デスティネーションオペランドとなるレジスタのレジスタ番号が指定される。
また、命令１６及び命令１８において、“ｉｍｍ５”及び“ｉｍｍ３２”で示されるフィールドは、オペランド部であり、それぞれ５ビットと３２ビットの演算用定数オペランドが指定される。命令１７及び命令１９において、“ｄｉｓｐ１３”及び“ｄｉｓｐ３１”で示されるフィールドは、オペランド部であり、それぞれ１３ビットと３１ビットの変位（ディスプレースメント）が指定される。
【００２１】
３２ビットの定数などの長い定数を扱う転送命令や演算命令、大きなディスプレースメントを指定する分岐命令は４２ビット命令で定義され、それらを除く他の命令は２１ビット命令で定義される。なお、図２を見てわかるように、４２ビット命令の構成要素である２個のユニットのうち、後ろの方のユニット（２番目のユニット）には、長い定数やディスプレースメントの一部のみが配置され、オペコードは配置されない。
１．２ アーキテクチャの概要次に、プロセッサ３１０のアーキテクチャの概要について説明する。
【００２２】
プロセッサ３１０は、コンパイル装置により静的な並列スケジューリングが施されたオブジェクトコードを実行することを前提としている。プロセッサ３１０へ供給される命令の単位と、プロセッサ３１０において実行される命令の単位とについて、図３を用いて説明する。プロセッサ３１０においては、サイクル毎に６４ビット固定長の命令が供給される。ここでは、１個の命令供給単位を「パケット」と呼び、１個の命令供給単位は、３個のユニットを含む。なお、３個分のユニットの長さは６３ビットであるが、残りの１ビットについては使用しない。
【００２３】
命令供給単位の一例を図３に示す。この図において、符号５２１、５２２及び５２３は、それぞれ命令供給単位を示しており、命令供給単位５２１は、ユニットＡ５０１、ユニットＢ５０２及びユニットＣ５０３を含み、命令供給単位５２２は、ユニットＤ５０４、ユニットＥ５０５及びユニットＦ５０６を含み、命令供給単位５２３は、ユニットＧ５０７、ユニットＨ５０８及びユニットＩ５０９を含む。また、この図において、符号５１１、５１２、５１３及び５１４は、並列実行の境界を示している。
プロセッサ３１０においては、１サイクルで並列実行の境界までのユニットにより示される命令が同時に実行される。ここで、同時に実行される１個以上の命令を「実行グループ」と呼ぶ。つまり、各サイクルにおいて並列実行境界情報が“１”である命令までの命令が並列実行されることになる。実行グループの一例を図３に示す。この図において、符号５３１、５３２、５３３及び５３４は、それぞれ実行グループを示している。実行グループ５３１は、ユニットＡ５４１及びユニットＢ５４２を含み、実行グループ５３２は、ユニットＣ５４３、ユニットＤ５４４、ユニットＥ５４５及びユニットＦ５４６を含み、実行グループ５３３は、ユニットＧ５４７を含み、実行グループ５３４は、ユニットＨ５４８及びユニットＩ５４９とを含む。
【００２４】
ユニットＡ５４１及びユニットＢ５４２により示される命令が並列実行される。次に、ユニットＣ５４３、ユニットＤ５４４、ユニットＥ５４５及びユニットＦ５４６により示される命令が並列実行される。次に、ユニットＧ５４７により示される命令が実行される。次に、ユニットＨ５４８及びユニットＩ５４９により示される命令が並列実行される。
プロセッサ３１０へ供給されながら実行されずに残ったユニットは、命令バッファに蓄積され、次のサイクル以降で実行の対象となる。つまり、プロセッサ３１０のアーキテクチャでは、固定長のパケット単位で命令を供給しておき、静的に求められた並列実行の境界を示す情報を元に、各サイクルにおいて並列度に応じた適切な数のユニットを実行していく、ということになる。この手法をとることにより、従来の固定長命令のＶＬＩＷ方式のプロセッサで発生していた無動作命令（ｎｏｐ命令）が全く無くなり、コードサイズを削減することができる。
【００２５】
また、プロセッサ３１０は、“ａｄｄ”命令（加算）や“ｌｄ”命令（メモリからのロード）などの基本命令に加えて、ＳＩＭＤ（Single Instructionstream Multiple Data stream ）型の処理を行うＳＩＭＤ命令を実行する。このＳＩＭＤ命令によってデータ並列を実現し、信号処理性能の向上を図っている。基本命令が３２ビット長のデータを扱うのに対して、ＳＩＭＤ命令では６４ビット長のデータを扱う。ただし、ＳＩＭＤ命令専用のレジスタファイルは用意されておらず、６４ビット幅の汎用レジスタを基本命令とＳＩＭＤ命令とで共用する。基本命令実行時には、汎用レジスタの下位３２ビットしか使用されない。
【００２６】
ＳＩＭＤ命令には、“ｖａｄｄｗ”命令（３２ビットデータの加算を２個含む。）、“ｖａｄｄｈ”命令（１６ビットデータの加算を４個含む。）などのデータ並列演算命令や、“ｖｃｈｎｇ”命令（６４ビットレジスタの上位３２ビットと下位３２ビットとを入れ換える。）などのデータの転送や組み替えを行う命令が含まれる。
１．３ プロセッサ３１０のハードウェア構成次に、プロセッサ３１０のハードウェア構成について図４を用いて説明する。ここで、図４は、プロセッサ３１０のハードウェア構成を示すブロック図である。
【００２７】
プロセッサ３１０は、１サイクルに最大３個の命令を並列実行するプロセッサであり、大きく分けて、命令供給発行部２０、解読部３０、実行部４０から構成される。
１．３．１ 命令供給発行部２０命令供給発行部２０は、命令フェッチ部２１、命令バッファ２２及び命令レジスタ２３から構成され、図示していない外部メモリ（応用装置３００においては、ＲＡＭ３３０）から命令群を読み出し、解読部３０へ供給する。
（１）命令フェッチ部２１命令フェッチ部２１は、３２ビットのＩＡ（インストラクションアドレス）バス及び６４ビットのＩＤ（インストラクションデータ）バスを通じて、前記外部メモリと接続されている。
【００２８】
命令フェッチ部２１は、ＰＣ部４２からアドレスを受け取る。次に、ＩＡバス及びＩＤバスを通じて、前記アドレスにより示される位置に格納されているユニット群を前記外部メモリからフェッチする。ここで、前記ユニット群は、３個のユニットからなる。次に、フェッチしたユニット群の最上位に１ビットの情報を付加して、６４ビット長のパケットを生成し、生成したパケットを命令バッファ２２に供給する。なお、６４ビットのパケットの最上位に付加された１ビットの情報が使用されることはない。
（２）命令バッファ２２命令バッファ２２は、６３ビットのバッファを２個備えており、命令フェッチ部２１からパケットの供給を受け、パケットの最上位の１ビットを除去した残りの６３ビットを蓄積する。命令バッファ２２は、６３ビットのバッファを２個備えているので、最大６個のユニットを蓄積できる。命令バッファ２２はキュー構造をとっており、命令バッファ２２に蓄積されたユニットは、蓄積された順に命令レジスタ２３の適切なレジスタに出力される。
【００２９】
また、命令バッファ２２は、制御信号線Ｋ４１を介して、後述する解読部３０の命令発行制御部３１に接続されており、命令発行制御部３１から発行されずに残ったユニットを示す情報を受け取る。前記情報を受け取った場合には、前記情報により示される発行されずに残ったユニットを含めて、蓄積された順に蓄積されたユニットを命令レジスタ２３の適切なレジスタに出力する。
（３）命令レジスタ２３命令レジスタ２３は、図４に示すように、命令レジスタＡ２３１、命令レジスタＢ２３２、命令レジスタＣ２３３及び命令レジスタＤ２３４から構成される。命令レジスタＡ２３１〜Ｄ２３４は、それぞれ２１ビットレジスタであり、命令バッファ２２から送られてきたユニットをこれらの命令レジスタの順に保持する。
図５は、命令レジスタ２３及びその周辺の構成要素の構成を示すブロック図である。この図において、符号Ｋ１２、Ｋ１３、Ｋ２１、Ｋ２２、Ｋ３１、Ｋ３２、Ｋ３３、Ｋ４１により示される破線は、制御信号線を表す。この図に示すように、命令レジスタＡ２３１及び命令レジスタＢ２３２は、それぞれ、制御信号線Ｋ２１及びＫ２２を介して、後述する命令発行制御部３１と接続されている。
１．３．２ 解読部３０解読部３０は、図４に示すように、命令発行制御部３１と命令デコーダ３２とから構成され、命令レジスタ２３に保持されている命令を解読し、その解読結果に応じて、解読結果及び制御信号を実行部４０へ出力する。
（１）命令発行制御部３１命令発行制御部３１は、命令レジスタ２３を構成する２個のレジスタ（命令レジスタＡ２３１〜Ｂ２３２）に保持されている各ユニットについて、当該ユニット内の並列実行境界情報とフォーマット情報とを参照することにより、２個のユニットを２個の命令として扱うように制御し、又は２個のユニットを１個の命令として扱うように制御し、また、並列実行の境界を越えたユニットについては、そのユニットの発行を無効化するように制御する。
【００３０】
具体的には、命令発行制御部３１は、図６に示すように、ＯＲ回路Ｘ１、Ｘ２を含む。ＯＲ回路Ｘ１は、制御信号線Ｋ２１を介して、命令レジスタＡ２３１に接続されている。また、ＯＲ回路Ｘ２は、制御信号線Ｋ２１を介して、命令レジスタＡ２３１に接続されており、制御信号線Ｋ２２を介して、命令レジスタＢ２３２に接続されている。
ＯＲ回路Ｘ１は、制御信号線Ｋ２１を介して、命令レジスタＡ２３１に格納されているユニットに含まれる並列実行境界情報とフォーマット情報とを取得し、取得した並列実行境界情報とフォーマット情報とにＯＲ演算を施して無動作命令フラグを生成する。ここで、無動作命令フラグは、１ビットからなり、“０”又は“１”の値をとる。ＯＲ回路Ｘ１は、生成した無動作命令フラグを第２命令デコーダ３４へ出力する。
【００３１】
ＯＲ回路Ｘ２は、制御信号線Ｋ２１を介して、命令レジスタＡ２３１に格納されているユニットに含まれる並列実行境界情報を取得し、制御信号線Ｋ２２を介して、命令レジスタＢ２３２に格納されているユニットに含まれる並列実行境界情報とフォーマット情報とを取得し、命令レジスタＡ２３１に格納されているユニットに含まれる並列実行境界情報と、命令レジスタＢ２３２に格納されているユニットに含まれる並列実行境界情報と、命令レジスタＢ２３２に格納されているユニットに含まれるフォーマット情報とにＯＲ演算を施して無動作命令フラグを生成する。ここで、無動作命令フラグは、１ビットからなり、“０”又は“１”の値をとる。ＯＲ回路Ｘ２は、生成した無動作命令フラグを第３命令デコーダ３５へ出力する。
【００３２】
このように、命令発行制御部３１は、並列実行境界情報とフォーマット情報とを参照することにより、必要に応じて各命令デコーダへ出力される無動作フラグを設定する。これにより、各命令デコーダにおいて、命令としてのデコードが無効化される。命令発行制御部３１は、また、各ユニットの並列実行境界情報を用いて、命令レジスタ２３に格納されたユニットの内どこまでを１サイクルで発行するかを決定し、発行されずに残ったユニットを示す情報を制御信号線Ｋ４１を介して命令バッファ２２へ伝達する。
図５からわかるように、命令デコーダは３個あり、命令レジスタＡ２３１、Ｂ２３２及びＣ２３３は、それぞれ、命令デコーダ３３、命令デコーダ３４及び命令デコーダ３５に対応しているので、命令としてデコードされる可能性のあるユニットは、命令レジスタＡ２３１、命令レジスタＢ２３２及び命令レジスタＣ２３３に格納されたユニットのみである。そこで、ユニット内の情報を参照して、これらのユニットの中で、４２ビット命令の２ユニット目にあたるものや発行されずに残るものに関しては、命令発行制御部３１は、そのユニットの命令としてのデコードを無効化する。４２ビット命令の２ユニット目にあたるユニットは、直前のユニットが構成する命令の定数オペランドの一部として直接出力される。
【００３３】
命令発行制御部３１の動作について、具体例を用いて説明する。図７に示すように、命令レジスタＡ２３１のユニット（ユニット１）のフォーマット情報が“１”である場合には、ユニット１と命令レジスタＢ２３２のユニット（ユニット２）とを連結して４２ビット命令とするので、命令発行制御部３１は、ユニット２の命令としてのデコードを無効化するために、“１”がセットされた無動作命令フラグを制御信号線Ｋ１２を介して第２命令デコーダ３４へ出力する。このとき、第２命令デコーダ３４は、ユニット２をデコードしない。ユニット２は、ユニット１が構成する命令の定数オペランドの一部として出力される。
【００３４】
また、図８に示すように、命令レジスタＡ２３１のユニット１のフォーマット情報が“０”、命令レジスタＢ２３２のユニット２のフォーマット情報が“１”である場合には、ユニット２と命令レジスタＣ２３３のユニット（ユニット３）とを連結して４２ビット命令とするので、命令発行制御部３１は、ユニット３の命令としてのデコードを無効化するために、“１”がセットされた無動作命令フラグを制御信号線Ｋ１３を介して第３命令デコーダ３５へ出力する。このとき、第３命令デコーダ３５は、ユニット３をデコードしない。ユニット３は、ユニット２が構成する命令の定数オペランド５１の一部として出力される。
【００３５】
このように、命令発行制御部３１は、フォーマット情報を参照することにより、必要に応じて各命令デコーダの無動作フラグを設定し、命令のデコードを無効化する。次に、図９に示すように、命令レジスタＡ２３１のユニット１の並列実行境界情報が“１”であり、フォーマット情報が“０”である場合には、このサイクルではユニット１までしか発行されないので、命令発行制御部３１は、ユニット２とユニット３との命令としてのデコードを無効化するために、“１”がセットされた無動作命令フラグをそれぞれ制御信号線Ｋ１２、Ｋ１３を介して第２命令デコーダ３４と第３命令デコーダ３５とへ出力する。このとき、第２命令デコーダ３４と第３命令デコーダ３５とは、ユニット２とユニット３とをデコードしない。ユニット１のみが命令として出力される。
また、図１０に示すように、命令レジスタＡ２３１のユニット１の並列実行境界情報が“０”であり、命令レジスタＢ２３２のユニット２の並列実行境界情報が“１”であり、ユニット１とユニット２とのフォーマット情報が共に“０”である場合には、このサイクルではユニット１からユニット２までの命令しか発行されないので、命令発行制御部３１は、ユニット３の命令としてのデコードを無効化するために、“１”がセットされた無動作命令フラグを制御信号線Ｋ１３を介して第３命令デコーダ３５へ出力する。このとき、第３命令デコーダ３５は、ユニット３をデコードしない。
【００３６】
このように、命令発行制御部３１は、命令レジスタに格納されている各ユニットの並列実行境界情報を参照することにより、必要に応じて各命令デコーダの無動作命令フラグを設定し、命令のデコードを無効化する。
（２）命令デコーダ３２命令デコーダ３２は、図４に示すように、第１命令デコーダ３３、第２命令デコーダ３４及び第３命令デコーダ３５から構成される。
第１命令デコーダ３３は、図５に示すように、命令レジスタＡ２３１から２１ビットのユニットを読み出し、読み出したユニットを解読して、前記ユニットが構成する命令の動作に関する制御信号を生成し、生成した制御信号を実行部４０へ出力し、命令内に置かれた定数オペランドを実行部４０のデータバス４８に転送する。ここで、第１命令デコーダ３３は、１サイクルに、１個の命令の解読と、制御信号の出力と、定数オペランドの転送とを行う。
【００３７】
第２命令デコーダ３４は、命令発行制御部３１から制御信号線Ｋ１２を介して無動作命令フラグを受け取る。受け取った無動作命令フラグが“０”である場合には、第２命令デコーダ３４は、第１命令デコーダ３３と同様に、命令レジスタＢ２３２から２１ビットのユニットを読み出し命令を解読して制御信号を生成し、生成した制御信号を実行部４０へ出力し、命令内に置かれた定数オペランドを実行部４０のデータバス４８に転送する。ここで、第２命令デコーダ３４は、１サイクルに、１個の命令の解読と、制御信号の出力と、定数オペランドの転送とを行う。受け取った無動作命令フラグが“１”である場合には、第２命令デコーダ３４は、無動作命令としての制御信号を実行部４０へ出力する。
命令レジスタＡ２３１と命令レジスタＢ２３２に格納される各ユニットが４２ビット命令を構成する場合において、図２の命令フォーマットに示すように、４２ビット命令を構成する２つのユニットのうち、２番目のユニットには定数オペランドの一部しか配置されない。つまり、この２番目のユニットにはオペコードが存在しないため、この２番目のユニットを第２命令デコーダ３４に入力する必要がない。そこで、４２ビット命令の定数オペランド５０は、図５に示すように、第１命令デコーダ３３が出力したユニット内の定数オペランド５０ａと、命令レジスタＢ２３２から無条件に直接転送された定数オペランド５０ｂとが連結されて構成されるものということになる。
【００３８】
第３命令デコーダ３５は、第２命令デコーダ３４と同様に、命令発行制御部３１から制御信号線Ｋ１３を介して無動作命令フラグを受け取る。受け取った無動作命令フラグが“０”である場合には、第３命令デコーダ３５は、第１命令デコーダ３３と同様に、命令レジスタＣ２３３から２１ビットのユニットを読み出し命令を解読して制御信号を生成し、生成した制御信号を実行部４０へ出力し、命令内に置かれた定数オペランドを実行部４０のデータバス４８に転送する。ここで、第３命令デコーダ３５は、１サイクルに、１個の命令の解読と、制御信号の出力と、定数オペランドの転送とを行う。受け取った無動作命令フラグが“１”である場合には、第３命令デコーダ３５は、無動作命令としての制御信号を実行部４０へ出力する。
【００３９】
また、上記と同様に、命令レジスタＣ２３３と命令レジスタＤ２３４に格納される各ユニットが４２ビット命令を構成する場合において、４２ビット命令の定数オペランド５２は、図５に示すように、第３命令デコーダ３５が出力したユニット内の定数５２ａと、命令レジスタＤ２３４から無条件に直接転送された定数５２ｂとが連結されて構成されるものということになる。
【００４０】
上記に説明するように、第２命令デコーダ３４は、命令レジスタＡ２３１に格納されたユニットの並列実行境界情報が“１”であるか、またはそのユニットのフォーマット情報が“１”であるときに無効化される。また、第３命令デコーダ３５は、命令レジスタＡ２３１に格納されたユニットもしくは命令レジスタＢ２３２に格納されたユニットの並列実行境界情報が“１”であるか、または命令レジスタＢ２３２に格納されたユニットのフォーマット情報が“１”であるときに無効化される。
１．３．３ 実行部４０実行部４０は、解読部３０での解読結果に基づいて、最大３つの命令を並列実行する回路ユニットであり、実行制御部４１、ＰＣ（プログラムカウンタ）部４２、レジスタファイル４３、第１演算部４４、第２演算部４５、第３演算部４６、オペランドアクセス部４７及びデータバス４８、４９からなる。また、データバス４８は、Ｌ１バス、Ｒ１バス、Ｌ２バス、Ｒ２バス、Ｌ３バス、Ｒ３バスからなり、データバス４９は、Ｄ１バス、Ｄ２バス、Ｄ３バスからからなる。
（１）実行制御部４１実行制御部４１は、解読部３０の第１命令デコーダ３３、第２命令デコーダ３４又は第３命令デコーダ３５から制御信号を受け取り、受け取った制御信号に基づいて実行部４０の各構成要素４２〜４９を制御する。実行制御部４１は、制御回路や配線から構成され、前記制御回路は、タイミング制御、動作許可禁止制御、ステータス管理、割り込み制御等を行う。
（２）ＰＣ部４２ＰＣ部４２は、次に解読実行すべき命令が置かれている外部メモリ上の位置を示すアドレスを保持している。ＰＣ部４２は、保持している前記アドレスを命令供給発行部２０の命令フェッチ部２１へ出力する。
（３）第１演算部４４、第２演算部４５及び第３演算部４６第１演算部４４、第２演算部４５及び第３演算部４６は、それぞれ２個のデータに対して算術論理演算を行うＡＬＵ及び乗算器と、シフト演算を行うバレルシフタと、入力データの上位３２ビットと下位３２ビットとを入れ換えるスワッパを内部に有する。
第１演算部４４は、Ｌ１バス及びＲ１バスを介してレジスタＲ０〜Ｒ３１に格納されている値を取得し、Ｒ１バスを介して第１命令デコーダ３３及び命令レジスタＢ２３２から出力される定数オペランドを取得し、これらの取得した値を用いて、実行制御部４１による制御の下で演算を実行し、その演算結果を上位３２ビットと下位３２ビットとに分け、演算結果の上位３２ビットと下位３２ビットデータをＤ１バスを介してそれぞれセレクタ４３２１とセレクタ４３２２とへ転送する。セレクタ４３２１とセレクタ４３２２とについては、後述する。
【００４１】
第２演算部４５は、第１演算部４４と同様に、Ｌ２バス及びＲ２バスを介してレジスタＲ０〜Ｒ３１に格納されている値を取得し、Ｒ２バスを介して第２命令デコーダ３４及び命令レジスタＣ２３３から出力される定数オペランドを取得し、これらの取得した値を用いて、実行制御部４１による制御の下で演算を実行し、その演算結果を上位３２ビットと下位３２ビットとに分け、演算結果の上位３２ビットと下位３２ビットのデータをＤ２バスを介してそれぞれセレクタ４３２１とセレクタ４３２２とへ転送する。
【００４２】
第３演算部４６は、第１演算部４４と同様に、Ｌ３バス及びＲ３バスを介してレジスタＲ０〜Ｒ３１に格納されている値を取得し、Ｒ３バスを介して第３命令デコーダ３５及び命令レジスタＤ２３４から出力される定数オペランドを取得し、これらの取得した値を用いて、実行制御部４１による制御の下で演算を実行し、その演算結果を上位３２ビットと下位３２ビットとに分け、演算結果の上位３２ビットと下位３２ビットのデータをＤ３バスを介してそれぞれセレクタ４３２１とセレクタ４３２２とへ転送する。
（４）オペランドアクセス部４７オペランドアクセス部４７は、レジスタファイル４３と前記外部メモリとの間でオペランドの転送を行う回路である。
【００４３】
具体的には、例えば、命令内で、オペコードとして“ｌｄ”（ロード）が置かれていた場合には、オペランドアクセス部４７は、前記外部メモリに置かれていた１ワード（３２ビット）のデータを取得し、取得したデータをＤ１〜Ｄ３バスのいずれかを介してレジスタファイル４３内の指定されたレジスタに書き込む。また、命令内で、オペコードとして“ｓｔ”（ストア）が置かれていた場合には、オペランドアクセス部４７は、レジスタファイル４３の指定されたレジスタの格納値をＬ１〜Ｌ３バスのいずれかを介して取得し、取得した格納値を前記外部メモリに書き込む。
（５）レジスタファイル４３レジスタファイル４３は、図１１に示すように、３２個の６４ビットレジスタＲ０〜Ｒ３１と、セレクタ４３２１、４３２２と、レジスタ書込制御部４３１とを含んでおり、セレクタ４３２１、４３２２は、それぞれ制御信号線Ｋ６１、Ｋ６２を介して、レジスタ書込制御部４３１と接続されている。図１１は、レジスタファイル４３及びその周辺の構成要素の構成を示すブロック図である。このブロック図は、レジスタファイル４３中の１つのレジスタＲ０に着目した図になっている。
レジスタＲ０〜Ｒ３１に格納された値は、第１命令デコーダ３３、第２命令デコーダ３４及び第３命令デコーダ３５での解読結果に基づいて、データバス４８を経由して第１演算部４４、第２演算部４５、第３演算部４６及びオペランドアクセス部４７に転送され、第１演算部４４、第２演算部４５、第３演算部４６及びオペランドアクセス部４７において演算又はオペランドアクセスが施され、これらの結果がデータバス４９を経由してレジスタファイル４３に送られ、レジスタＲ０〜Ｒ３１に格納される。
【００４４】
なお、レジスタファイル４３へ書き込まれるデータには、第１演算部４４〜第３演算部４６から出力されるデータとオペランドアクセス部４７から出力されるデータとがあるが、オペランドアクセス部４７から出力されるデータのパスに関しては、図１１において、図面を簡素化し構成を明確にするために、省略している。実際には、オペランドアクセス部４７の出力は、第１演算部４４〜第３演算部４６の出力パスのいずれか一つを介してレジスタに転送されることになる。
【００４５】
レジスタ書込制御部４３１は、当該サイクルで発行された最大３つの各命令の書き込みレジスタ番号と書き込み位置を示す情報とを含むセレクタ制御情報をセレクタ４３２１、４３２２へ出力する。ここで、書き込み位置を示す情報とは、その命令が上位３２ビットの領域にのみ書き込む命令であるか、下位３２ビットの領域のみに書き込む命令であるか、もしくは６４ビット全体の領域に書き込む命令であるかの情報である。
【００４６】
また、複数の命令があるレジスタの同一の位置（領域）に書き込む命令であった場合には、プログラムにおける命令の順序の情報をもとに、順序が後方（図３のユニット番号の順を参照）の命令の書き込みのみを行うようにセレクタを制御し、順序が先の命令の書込は行わないようにセレクタを制御する。実際には、プログラムにおける命令の順序にしたがって、第１演算部４４、第２演算部４５、第３演算部４６の順に命令が発行されるので、プログラムの後方の命令により演算を実行する第３演算部４６の演算結果の書き込みが最も優先され、次に第２演算部４５の演算結果の書き込みが優先されることになる。
【００４７】
セレクタ４３２１は、第１演算部４４から出力される上位３２ビットデータと、第２演算部４５から出力される上位３２ビットデータと、第３演算部４６から出力される上位３２ビットデータを受け取り、レジスタ書込制御部から出力されるセレクタ制御情報を制御信号線Ｋ６１を介して受け取り、前記セレクタ制御情報に基づいて、第１演算部４４から出力される上位３２ビットデータと、第２演算部４５から出力される上位３２ビットデータと、第３演算部４６から出力される上位３２ビットデータとのうちから１のデータを選択し、選択したデータをレジスタＲ０〜Ｒ３１のいずれか１のレジスタ（このレジスタは、セレクタ制御情報により指定される）の上位３２ビットへ書き込む。
【００４８】
セレクタ４３２２は、セレクタ４３２１と同様に、第１演算部４４から出力される下位３２ビットデータと、第２演算部４５から出力される下位３２ビットデータと、第３演算部４６から出力される下位３２ビットデータと受け取り、レジスタ書込制御部から出力されるセレクタ制御情報を制御信号線Ｋ６２を介して受け取り、前記セレクタ制御情報に基づいて、第１演算部４４から出力される下位３２ビットデータと、第２演算部４５から出力される下位３２ビットデータと、第３演算部４６から出力される下位３２ビットデータとのうちから１のデータを選択し、選択したデータをレジスタＲ０〜Ｒ３１のいずれか１のレジスタ（このレジスタは、セレクタ制御情報により指定される）の下位３２ビットへ書き込む。
【００４９】
以上説明したように、レジスタファイル４３内の６４ビットレジスタへの書き込みは、上位３２ビットの領域と下位３２ビットの領域についてそれぞれ独立に制御される。第１演算部４４〜第３演算部４６の演算結果は、上位３２ビットと下位３２ビットに分けられ、それぞれセレクタ４３２１とセレクタ４３２２に転送される。セレクタ４３２１とセレクタ４３２２とは、レジスタ書込制御部４３１の制御に基づいてレジスタに書き込むべき６４ビットデータの上位３２ビットデータと下位３２ビットデータとをそれぞれ独立に選択する。
（６）データバス４８及びデータバス４９上記ＰＣ部４２、レジスタファイル４３、第１演算部４４、第２演算部４５、第３演算部４６及びオペランドアクセス部４７は、図４に示すように、データバス４８（Ｌ１バス、Ｒ１バス、Ｌ２バス、Ｒ２バス、Ｌ３バス、Ｒ３バス）及びデータバス４９（Ｄ１バス、Ｄ２バス、Ｄ３バス）を介して接続されている。なお、Ｌ１バス及びＲ１バスはそれぞれ第１演算部４４の２つの入力ポートに、Ｌ２バス及びＲ２バスはそれぞれ第２演算部４５の２つの入力ポートに、Ｌ３バス及びＲ３バスはそれぞれ第３演算部４６の２つの入力ポートに、Ｄ１バス、Ｄ２バス及びＤ３バスはそれぞれ第１演算部４４、第２演算部４５及び第３演算部４６の出力ポートに接続されている。
【００５０】
１．４ プロセッサ３１０の動作次に、命令群を解読実行する場合を具体的な一例として取り上げ、プロセッサ３１０の動作について説明する。
（１）命令群の一例図１２は、６４ビットデータを扱う処理の一例を示すフローチャートである。
本図中、“ｕｐｐｅｒ”はレジスタの上位３２ビットを表し、“ｌｏｗｅｒ”はレジスタの下位３２ビットを表す。基本命令では“ｌｏｗｅｒ”のみを参照および更新し、ＳＩＭＤ命令のみが“ｕｐｐｅｒ”も含めて参照および更新することになる。本図に示されている命令群は、レジスタＲ２の上位とレジスタＲ３の上位とを加算して、加算結果をレジスタＲ３の上位に格納する演算と、レジスタＲ２の下位とレジスタＲ３の下位とを加算して、加算結果をレジスタＲ３の下位に格納する演算とを独立に行い（ステップＳ１００）、レジスタＲ０の下位に定数“０ｘ１２３４５６７８”（０ｘは、以下に続く数文字列が１６進数であることを表す）を転送し（ステップＳ１０１）、レジスタＲ０の上位と下位とを入れ換え（ステップＳ１０２）、レジスタＲ１に格納されている値をアドレスとして示される外部メモリ上の位置に格納されている値をレジスタＲ０の下位に格納し（ステップＳ１０３）、最後に、レジスタＲ３の上位とレジスタＲ０の上位とを加算して、加算結果をレジスタＲ０の上位に格納する演算と、レジスタＲ３の下位とレジスタＲ０の下位とを加算して、加算結果をレジスタＲ０の下位に格納する演算とを独立に行う（ステップＳ１０４）ことを示している。
【００５１】
上記に示す命令群によると、まずステップＳ１００にてレジスタＲ２とレジスタＲ３の間でＳＩＭＤ型の処理を行ない、次にステップＳ１０１〜ステップＳ１０３にてレジスタＲ０に６４ビットデータを設定し（上位は即値、下位は外部メモリから設定）、最後にステップＳ１０４にてレジスタＲ０とレジスタＲ３の間でＳＩＭＤ型の処理を行なっている。
【００５２】
図１３は、図１２に示す処理をプロセッサ３１０に行わせる場合において、前記処理を実行形式コードにより表現する場合のプログラムＰ６０の内容とプログラムＰ６０の実行の順序とを示す図である。プログラムＰ６０は、５個の命令Ｐ６１〜Ｐ６５から構成されており、命令供給単位としては２個のパケット６０、６１から構成されている。パケット６０は、２個の命令Ｐ６１〜Ｐ６２を含み、パケット６１は、３個の命令Ｐ６３〜Ｐ６６５を含んでいる。
【００５３】
命令Ｐ６１は、ステップＳ１００に対応し、命令Ｐ６２は、ステップＳ１０１に対応し、命令Ｐ６３は、ステップＳ１０２に対応し、命令Ｐ６４は、ステップＳ１０３に対応し、命令Ｐ６５は、ステップＳ１０４に対応する。プログラムＰ６０の各命令の処理内容は、実行形式コードの各フィールドにおいてニーモニックで表現されている。具体的には、命令Ｐ６１及びＰ６５におけるニーモニック“ｖａｄｄｗ”は、２つの６４ビットレジスタの上位と上位との３２ビット加算と、前記２つの６４ビットレジスタの下位と下位との３２ビット加算との２つを独立にかつ並列に行なうＳＩＭＤ型の加算を表す。命令Ｐ６２におけるニーモニック“ｍｏｖ”は、定数およびレジスタの格納値を別のレジスタの下位３２ビットへの転送を表す。命令Ｐ６３におけるニーモニック“ｖｃｈｎｇ”は、１個の６４ビットレジスタの上位３２ビットと下位３２ビットとを入れ換えを表す。命令Ｐ６４におけるニーモニック“ｌｄ”は、外部メモリからレジスタの下位３２ビットへの転送を表している。
【００５４】
ここで、“Ｒｎ”（ｎ＝０〜３１）は、レジスタファイル４３の中の一つのレジスタを示す。また、各命令の並列実行境界情報とフォーマット情報とについても、それぞれ“０”又は“１”で示している。プログラムＰ６０の各命令は、図１３に示すように、３個の実行グループに分けられる。実行グループＧ１１には、命令Ｐ６１及びＰ６２が含まれ、実行グループＧ１２には、命令Ｐ６３及びＰ６４が含まれ、実行グループＧ１３には、命令Ｐ６５が含まれ、各実行グループ毎に実行がされる。
【００５５】
すなわち、実行グループＧ１１に含まれる命令が実行され、実行グループＧ１１に含まれる命令の実行が完了すると、実行グループＧ１２に含まれる命令が実行される。次に、実行グループＧ１２に含まれる命令の実行が完了すると、実行グループＧ１３に含まれる命令が実行される。実行グループＧ１１に含まれる命令の実行においては、命令Ｐ６１とＰ６２とが並行して実行される。また、実行グループＧ１２に含まれる命令の実行においては、命令Ｐ６３とＰ６４とが並行して実行される。
【００５６】
（２）命令群を実行する場合のプロセッサ３１０の動作図１２に示す処理を実行する場合において、各実行グループごとのプロセッサ３１０の動作を説明する。
（命令のフェッチ）命令フェッチ部２１は、パケット６０を外部メモリからフェッチし、命令バッファ２２は、パケット６０を蓄積し、次に、命令フェッチ部２１は、パケット６１を外部メモリからフェッチし、命令バッファ２２は、パケット６１を蓄積する。命令バッファ２２に蓄積されているパケット６０内の命令Ｐ６１が命令レジスタＡ２３１へ転送され、命令Ｐ６２の上位及び下位がそれぞれ命令レジスタＢ２３２及び命令レジスタＣ２３３へ転送される。命令バッファ２２に蓄積されているパケット６１内の命令Ｐ６３が命令レジスタＤ２３４へ転送される。
【００５７】
（実行グループＧ１１の実行）次に、命令発行制御部３１が各ユニットの並列実行境界情報とフォーマット情報とを参照して発行を制御する。具体的には、２番目のユニットのフォーマット情報が“１”であるので、２番目のユニットと３番目のユニットを連結して１つの命令として扱う。また、１番目のユニットの並列実行境界情報が“０”であり、２番目のユニットの並列実行境界情報が“１”であるので、１番目から３番目のユニットまでの２個の命令を１サイクルで並列実行すべき命令として発行する。
【００５８】
実行部４０では、レジスタＲ２とレジスタＲ３との間で、それぞれのレジスタの上位と上位、下位と下位がそれぞれ独立に加算され、それぞれの加算結果がレジスタＲ３の上位と下位とに格納され、レジスタＲ０の下位３２ビットに定数“０ｘ１２３４５６７８”が転送される。パケット６１内の命令Ｐ６３〜Ｐ６５は、発行されずに残ったので命令バッファ２２に蓄積されている。
（実行グループＧ１２の実行）命令バッファ２２に蓄積されているパケット６１内の命令Ｐ６３が命令レジスタＡ２３１へ転送され、命令Ｐ６４が命令レジスタＢ２３２へ転送され、命令Ｐ６５が命令レジスタＣ２３３へ転送される。
【００５９】
命令発行制御部３１は、３個のユニット共フォーマット情報が“０”であるので、いずれのユニットも２１ビット命令として発行を制御する。また、１番目のユニットの並列実行境界情報が“０”であり、２番目のユニットの並列実行境界情報が“１”であるので、１番目のユニットから２番目のユニットまでの２個の命令を発行するように制御する。３番目のユニットは、発行されずに残ったので命令バッファ２２に蓄積される。
実行部４０では、第１演算部４４にてレジスタＲ０の格納値の上位３２ビットと下位３２ビットとを入れ換えた結果が生成され、またオペランドアクセス部４７にて外部メモリ内においてレジスタＲ１で示されるアドレスにより示される位置から３２ビットデータを読み込み、これらのデータが共にレジスタファイル４３に転送される。
【００６０】
次に、レジスタＲ０の上位に書き込むのは“ｖｃｈｎｇ”命令のみであるので、レジスタ書込制御部４３１は、この命令“ｖｃｈｎｇ”の結果、すなわち第１演算部４４の出力が選択されるようにセレクタ４３２１を制御し、レジスタＲ０の下位については、２つの命令共結果を書き込もうとするが、プログラム中の順序として“ｌｄ”命令の方が後方であるため、この“ｌｄ”命令の結果、すなわちオペランドアクセス部４７の出力が選択されるようにセレクタ４３２２を制御する。これによって、具体的には、このサイクルが完了した時点で、レジスタＲ０の上位３２ビットには定数“０ｘ１２３４５６７８”が、下位３２ビットにはメモリ内においてレジスタＲ１の格納値で示されるアドレスにより示される位置の格納値が格納されていることになる。
【００６１】
このようにして、同一サイクルにおいて、あるレジスタの一部の領域を変更する命令と、そのレジスタの一部または全部の領域を変更する命令とを同時に実行することが可能となる。なお、このような実行形式コードを生成するコンパイル装置と、その命令スケジューリング方法については、後で述べる。
（実行グループＧ１３の実行）命令バッファ２２に蓄積されていた１個のユニット（命令Ｐ６５）が命令レジスタＡ２３１に転送される。このユニットは、フォーマット情報が“０”であるので２１ビット命令であり、並列実行境界情報が“１”であるため、命令発行制御部３１は、１つの２１ビット命令を発行する。これで、供給されたユニットはすべて発行されたことになる。
【００６２】
実行部４０は、レジスタＲ３とレジスタＲ０との間で、上位と上位、下位と下位をそれぞれ独立に加算し、それぞれの加算結果をレジスタＲ０の上位と下位とに格納する。以上のようにして、プロセッサ３１０において図１２に示す処理を行うプログラムは３つの実行グループＧ１１〜Ｇ１３により実行される。ここで、それぞれの実行グループは同時に実行できず、実行グループ毎に順次実行される。
【００６３】
１．５ 従来のプロセッサとの比較次に、図１２に示す処理を、従来のプロセッサにより実行する場合について説明し、プロセッサ３１０の場合と比較する。
図１４は、図１２に示す処理を従来のプロセッサに行わせる場合において、前記処理を実行形式コードにより表現する場合のプログラムＰ７０の内容とプログラムＰ７０の実行の順序とを示す図である。このプログラムＰ７０は、図１３に示すプログラムＰ６０と同様に、２個のパケット７０、７１から構成されている。パケット７０には、命令Ｐ７１〜７２が含まれ、パケット７１には、命令Ｐ７３〜Ｐ７５が含まれる。各命令の処理内容は、図１３に示すコードと同様に、各フィールドにおいてニーモニックで表現されている。
【００６４】
命令Ｐ７０〜７５は、それぞれ、命令Ｐ６０〜Ｐ６５に対応して同様の命令である。なお、プログラムＰ７０とプログラムＰ６０との相違は、命令Ｐ７３における“ｖｃｈｎｇ”命令の並列実行境界情報が“１”であり、命令Ｐ６３における“ｖｃｈｎｇ”命令の並列実行境界情報が“０”である点のみである。この相違が発生する理由は、命令Ｐ７３における“ｖｃｈｎｇ”命令と命令Ｐ７４における“ｌｄ”命令のデスティネーションレジスタが共にレジスタＲ０であり、従来のコンパイル装置は、従来のプロセッサの構成では前記２個の命令は同時実行できないと判断し、このような実行形式コードを出力する。このため、図１４に示すように、４つの実行グループＧ２１〜Ｇ２４が順に実行されることとなる。実行グループＧ２１には、命令Ｐ７１及びＰ７２が含まれ、実行グループＧ２２には、命令Ｐ７３が含まれ、実行グループＧ２３には、命令Ｐ７４が含まれ、実行グループＧ２４には、命令Ｐ７５が含まる。
【００６５】
このように、従来のプロセッサでは、レジスタへの書き込みを上位と下位で独立して制御していないため、同一のレジスタに書き込む２つの命令間にハザードが生じ、同時実行することができない。したがって、図１２に示す処理の例のように、レジスタＲ０をデスティネーションレジスタとする命令が４個含まれる場合には、最低でも４つの実行グループに分かれる。ここで、それぞれの実行グループは同時に実行できず、実行グループ毎に順次実行される。
【００６６】
以上説明したように、プロセッサ３１０においては、従来のプロセッサと比較すると、実行サイクル数が１サイクル減少する。
２ コンパイル装置２００コンパイル装置２００は、プロセッサ３１０により実行されるコードを生成する。
２．１ 用語と対象プロセッサここでは、用いる用語、対象プロセッサ、コンパイル装置２００の構成及び動作について説明する。
【００６７】
まず、本説明で用いる用語の説明を行なう。「オブジェクトコード」とは、再配置可能情報を含んだ対象プロセッサ向け機械語プログラムである。連結編集がされ、未確定アドレスが決定されることにより実行形式コードに変換される。「プレデセッサ」とは、ある命令を実行する為に、それ以前に実行しておく必要のある命令である。
次に、コンパイル装置２００が対象とするプロセッサについて、説明する。コンパイル装置２００が対象とするプロセッサは、上記で説明したプロセッサ３１０である。このプロセッサは、コンパイル装置２００により付与された並列実行境界情報を参照することにより実行グループを生成し、プロセッサ自体では並列実行可能か否かの判定を行なわない。したがって、並列実行境界と並列実行境界との間、すなわち１個の実行グループ内において、同時実行可能な命令が正しく配置されていることは、コンパイル装置２００が保証する。
【００６８】
ここで、並列実行境界と並列実行境界との間に配置できる命令に対する制限は以下の通りである。命令は、以下に示す３条件が満たされた場合にのみ並列実行ができる。
（条件１）１個の実行グループ中の命令の総数は３を越えない。
（条件２）プロセッサの命令デコーダは１個の実行グループ中の３ユニット目までしか、命令としてデコードすることができない（図５参照）。
（条件３）１個の実行グループ中の命令が使用する対象プロセッサ内の資源の総和は、ＡＬＵユニット３個、メモリアクセスユニット１個及び分岐ユニット１個の和を越えない。
また、対象プロセッサは１個の実行グループ中の命令を必ずしも同時に実行するわけではない。命令の供給が追いつかないなどの理由で実行グループを２回以上に分けて実行することもある。このためコンパイル装置２００は、１個の実行グループが２回以上に分割されて実行される場合であっても、プログラムの意味動作が正しくなるように、命令群中の命令順を設定する必要がある。
【００６９】
２．２ コンパイル装置２００の構成コンパイル装置２００の構成について、図１５を用いて説明する。ここで、図１５は、コンパイル装置２００の構成を示すブロック図である。
コンパイル装置２００は、前述したように、ソースコード記憶部１３０、コンパイル部２１０及びオブジェクトコード記憶部１４０から構成され、ソースコード記憶部１３０に記憶されている高級言語で書かれたソースコードからオブジェクトコードを生成してオブジェクトコード記憶部１４０に書き込むプログラム処理装置である。コンパイル部２１０は、コンパイラ上流部１００、アセンブラコード生成部１０１、命令スケジューリング部１０２、オブジェクトコード生成部１０３を含む。
【００７０】
コンパイル装置２００は、具体的には、プロセッサ、ＲＯＭ、ＲＡＭ、ハードディスク装置などから構成される。コンパイル装置２００の各構成要素は、コンピュータプログラムを前記プロセッサに実行させるものである。
２．２．１ コンパイラ上流部１００及びアセンブラコード生成部１０１コンパイラ上流部１００は、ソースコード記憶部１３０からファイル形式で保存されている高級言語ソースコードを読み込み、構文解析及び意味解析を行なって内部形式コードを生成する。また、必要に応じて、最終的に生成される実行形式コードのサイズやその実行時間が短くなるように内部形式コードを最適化する。
【００７１】
アセンブラコード生成部１０１は、コンパイラ上流部１００により生成され、また最適化された内部形式コードからアセンブラコードを生成する。コンパイラ上流部１００及びアセンブラコード生成部１０１での処理は本発明の主眼ではなく、また、従来のコンパイル装置で行なわれてきた処理と同等であり、公知であるので、詳細についての説明は省略する。
【００７２】
２．２．２ 命令スケジューリング部１０２命令スケジューリング部１０２は、アセンブラコード生成部１０１で生成されたアセンブラコードに対し命令間の依存関係の解析、命令スケジューリング（命令順の並べ替え）及び並列実行境界の付加を行ない、アセンブラコードを対象プロセッサ向けに並列化する。命令スケジューリング部１０２は、依存関係解析部１１０、命令再配置部１１１及び実行境界付加部１１２から構成される。なお、ここでは簡単のため命令スケジューリング部１０２は基本ブロック単位で動作することとする。
【００７３】
ここで、基本ブロックとは、実行が先頭の命令から始まり、必ず最後の命令まで実行される一連の命令列のことであり、この命令列は、当該命令列の途中から当該命令列の外へ制御を移す命令を含まない。また、当該命令列の外から当該命令列の途中へ制御が移されて入り込んでくることもない。
（１）依存関係解析部１１０依存関係解析部１１０は、アセンブラコード生成部１０１により生成されたアセンブラコードを基にして、基本ブロックに含まれる命令毎に、基本ブロックに含まれる命令間の依存関係を解析し、各命令に対応するノード（節）と、各依存関係に対応するエッジ（矢印、directed edge）とから構成され命令間の依存関係を示す依存グラフを生成する。なお、依存グラフの生成方法は公知であり、例えば、論文 Instruction scheduling in the TOBEY compiler (R.J.Blainey, IBMJ.RES.DEVELOP. VOL.38 NO.5 SEPTEMBER 1994) に開示されているので、詳細についての説明は省略する。
命令間の依存関係には以下の３種類がある。
・データ依存関係ある資源にデータを格納する命令と、同じ資源からデータを参照する命令との間の依存関係。
・逆依存関係ある資源からデータを参照する命令と、同じ資源にデータを格納する命令との間の依存関係。
・出力依存関係ある資源にデータを格納する命令と、同じ資源にデータを格納する命令との間の依存関係。
いずれの依存関係にある命令も、元の命令順を変更するとプログラムの意味が異なってしまう為、命令を並べ替えるときにおいても依存関係は守る必要がある。依存グラフを説明するためのプログラムＰ８０を図１６に示す。プログラムＰ８０は、アセンブラコードにより表現されており、命令Ｐ８１〜Ｐ８７を含む。
【００７４】
また、プログラムＰ８０に対応する依存グラフＧ１００を視覚的に表現したものを図１７に示す。依存グラフＧ１００は、ノードＮ１０１〜Ｎ１０７、エッジＥ１０１〜Ｅ１０６を含む。ノードＮ１０１〜Ｎ１０７は、それぞれ命令Ｐ８１〜Ｐ８７に対応している。エッジＥ１０１〜Ｅ１０６は、それぞれ有向エッジである。エッジＥ１０３は、逆依存関係を示すエッジであり、他のエッジは、データ依存関係を示すエッジである。
【００７５】
ノードＮ１０１とノードＮ１０２とは、ノードＮ１０１からノードＮ１０２へ向かうエッジＥ１０１を介して接続されている。ノードＮ１０２とノードＮ１０３とは、ノードＮ１０２からノードＮ１０３へ向かうエッジＥ１０２を介して接続されている。ノードＮ１０３とノードＮ１０４とは、ノードＮ１０３からノードＮ１０４へ向かうエッジＥ１０３を介して接続されている。ノードＮ１０４とノードＮ１０６とは、ノードＮ１０４からノードＮ１０６へ向かうエッジＥ１０４を介して接続されている。ノードＮ１０５とノードＮ１０６とは、ノードＮ１０５からノードＮ１０６へ向かうエッジＥ１０５を介して接続されている。ノードＮ１０６とノードＮ１０７とは、ノードＮ１０６からノードＮ１０７へ向かうエッジＥ１０７を介して接続されている。
【００７６】
なお、図１７において、依存グラフＧ１００を分かりやすいように視覚的に表現しているが、依存グラフの実体は、絵ではなく、ノードとエッジとから構成されるデータの集合であることに注意を要する。従来の依存解析方法では、レジスタ１個を１つの資源として扱い、アセンブラコードに記述されたオペランドであるレジスタ名を参照することによって依存関係を解析する。
【００７７】
それに対して、コンパイル装置２００の依存関係解析部１１０は、対象プロセッサの命令セットの特徴、すなわち６４ビットレジスタの一部分の領域のみにデータを格納する命令、または前記一部分の領域からデータを参照する命令が存在することを踏まえて、レジスタの一部分の領域を１つの資源として扱う。具体的には、依存関係解析部１１０は、６４ビットレジスタの上位３２ビットの領域と下位３２ビットの領域とを独立した資源として扱う。例えば、ある６４ビットレジスタの全体を参照する命令については、そのレジスタの上位と下位との２つの資源を共に参照する命令であると認識する。また、あるレジスタの下位３２ビットのみを参照する命令については、下位３２ビットの資源のみを参照する命令であると認識し、そのレジスタの下位３２ビットの資源は、そのレジスタの上位３２ビットの資源とは全く依存関係がないものと認識する。
【００７８】
また、依存関係解析部１１０は、内部に図１８に示すような参照格納資源テーブルＴ１００を有している。参照格納資源テーブルＴ１００は、オペランドにレジスタＲｎとレジスタＲｍとを含む命令の種類と、前記命令のタイプとから構成される組を複数個含んでいる。ここで、ｎ＝０〜３１、ｍ＝０〜３１である。
命令のタイプとは、以下に示す８個のケースの組合せである。参照格納資源テーブルＴ１００において、○印は、対応するケースが前記組合せに含まれることを示し、×印は、対応するケースが前記組合せに含まれないことを示す。例えば、参照格納資源テーブルＴ１００において、命令の種類「ｍｏｖ Ｒｎ、Ｒｍ」に対応するタイプは、ケース２及びケース８に○印が付されており、他のケースには、×印が付されてるので、前記命令は、「レジスタＲｎの下位３２ビットからデータを参照し、レジスタＲｍの下位３２ビットにデータを格納する」タイプの命令であることを示している。
（ケース１）命令は、レジスタＲｎの上位３２ビットからデータを参照する。
（ケース２）命令は、レジスタＲｎの下位３２ビットからデータを参照する。
（ケース３）命令は、レジスタＲｍの上位３２ビットからデータを参照する。
（ケース４）命令は、レジスタＲｍの下位３２ビットからデータを参照する。
（ケース５）命令は、レジスタＲｎの上位３２ビットにデータを格納する。
（ケース６）命令は、レジスタＲｎの下位３２ビットにデータを格納する。
（ケース７）命令は、レジスタＲｍの上位３２ビットにデータを格納する。
（ケース８）命令は、レジスタＲｍの下位３２ビットにデータを格納する。
依存関係解析部１１０は、参照格納資源テーブルＴ１００を参照することにより、命令がどのタイプであるかを知り、これにより、命令がどの資源からデータを参照しまた、どの資源にデータを格納するかの情報を得て、この情報を基にしてノード（節）間のエッジ（矢印）からなる依存関係を生成する。このように、レジスタの上位３２ビットと下位３２ビットとを独立に管理することにより、レジスタ名のみを参照する方法に比べて、より厳密な依存関係を求めることができる。これによって、依存グラフ中の不要なエッジ（矢印）を削減し、各命令間の並列実行の可能性をより高めることができる。
【００７９】
例えば、あるレジスタの上位３２ビットのみにデータを格納する命令と同じレジスタの下位３２ビットのみからデータを参照する命令とからなる命令群がある場合、従来の依存グラフ生成方法ではレジスタ名にて依存を認識するため、これらの２つの命令間にはデータ依存関係があるものと判断する。このため、これらの２つの命令は同時実行はされない。
一方、依存関係解析部１１０は、これらの２つの命令間にはデータ依存関係は存在しないと判断し、これらの２つの命令を同時実行することが可能となる。なお、具体例については、コンパイル装置２００の具体的動作と共に、後で述べる。
（２）命令再配置部１１１命令再配置部１１１は、依存関係解析部１１０により生成された依存グラフを用いて、基本ブロック内の命令を並べ替え、対象プロセッサ向けの並列化されたアセンブラコードを生成する。命令再配置部１１１は、命令集合化部１２０を含む。
【００８０】
命令再配置部１１１の処理の詳細について、図１９に示すフローチャートを用いて説明する。命令再配置部１１１は、依存関係解析部１１０が生成した依存グラフの全てのノードについて、以下の処理（ステップＳ２〜Ｓ１０）を繰り返す（ループ１：ステップＳ１〜Ｓ１１）。
まず、命令再配置部１１１は、現時点で配置候補となり得るノードを候補ノードとして依存グラフより抽出し、候補ノードから構成される配置候補集合を生成する。ここで配置候補となり得るノードとは、「プレデセッサが全て配置完了済み」であるノードである（ステップＳ２）。次に、命令再配置部１１１は、配置候補集合の全ての候補ノードについて、以下の処理（ステップＳ４〜Ｓ８）を繰り返す（ループ２：ステップＳ３〜Ｓ９）。
【００８１】
命令再配置部１１１は、配置候補集合から現時点で配置することが最良と思われる候補ノード（以下、単に「最良ノード」と呼ぶ。）を取り出す（ステップＳ４）。最良ノードの決定方法については後述する。続いて最良ノードが、実際に配置可能か否かを判断し、可能な場合には（ステップＳ５）、仮配置ノード集合に前記最良ノードを仮配置する（ステップＳ６）。この判断は、最良ノードが前述の演算器の制約、命令数の制約および命令デコーダの制約を満たすかどうかによって決定する。
【００８２】
続いて、現時点で仮配置されている仮配置ノード集合を調べ、更に命令を仮配置することができるか否かを判断する。配置不可と判断された場合は（ステップＳ７）、ループ２を終了し処理をステップＳ１０へ移す。配置可能と判断された場合（ステップＳ７）、最良ノードが配置されたことによって新たに配置候補となり得るノードが生じたか否かを判断し、新たな配置候補が生じた場合はこれを配置候補集合に追加する（ステップＳ８）。ステップＳ８で新たに配置候補にできるのは、「（現在配置しようとしている）最良ノードのみをプレデセッサとして持ち、且つ、最良ノードとの依存関係が逆依存もしくは出力依存」のノードである。つまりここで新たな配置候補になることができるノードは、最良ノードと同じサイクルで実行することはできるが、最良ノードより前のサイクルでは実行できないノードである。
【００８３】
ループ２が終了した後、仮配置ノード集合に含まれているノードを配置ノードとして確定する（ステップＳ１０）。具体的には、仮配置ノード集合に含まれているノードに対応する命令を元の命令列から取り出し、実行境界付加部１１２へ渡すための新たな命令列に再配置する。この段階で配置候補集合の一部の命令が、同時に実行する命令群としてまとめられ確定したことになる。ステップＳ３〜ステップＳ１０により示される一連の処理は、命令集合化部１２０を構成する。
【００８４】
次に、ステップＳ４における最良ノードの決定方法について述べる。最良ノードは、依存グラフ、仮配置ノード集合を参照して、基本ブロック内の命令全体を最も短時間で実行できるであろう命令をヒューリスティックに選び出す。ここでは現時点での依存グラフにおいて依存グラフの終端までの命令の実行時間総和が最も多いものを選ぶ。この条件に合致する命令が多数ある場合には、元の命令順が早い命令を最良ノードとする。
（３）実行境界付加部１１２実行境界付加部１１２は、命令再配置部１１１のステップＳ９で配置が確定した命令群の末尾の命令に並列実行境界を付加し、並列実行境界が付加された命令群を出力する。
【００８５】
２．２．３ オブジェクトコード生成部１０３オブジェクトコード生成部１０３は、命令スケジューリング部１０２により出力された命令群（アセンブラコード）をオブジェクトコードに変換し、オブジェクトコードをファイルとしてオブジェクトコード記憶部１４０へ書き込む。
２．３ コンパイル装置２００の動作次に、コンパイル装置２００の特徴的な構成要素の動作について、具体的な命令群を用いて説明する。
コンパイル装置２００の動作を説明するために一例として用いるプログラムＰ９０を図２０に示す。プログラムＰ９０は、ソースコードからコンパイラ上流部１００及びアセンブラコード生成部１０１を経て生成されたアセンブラコードであり、命令Ｐ９１〜Ｐ９７を含む。命令Ｐ９１〜Ｐ９７の意味は以下の通りである。
・命令Ｐ９１…レジスタＲ０の上位３２ビットとレジスタＲ１の上位３２ビットとを加算して、加算結果をレジスタＲ１の上位３２ビットに格納し、レジスタＲ０の下位３２ビットとレジスタＲ１の下位３２ビットとを加算して、結果をレジスタＲ１の下位３２ビットに格納するＳＩＭＤ命令。
・命令Ｐ９２…レジスタＲ２の上位３２ビットとレジスタＲ１の上位３２ビットとを加算して、加算結果をレジスタＲ１の上位３２ビットに格納するＳＩＭＤ命令。
・命令Ｐ９３…レジスタＲ１の下位３２ビットをレジスタＲ３の下位３２ビットに転送する基本命令。
・命令Ｐ９４…レジスタＲ１の下位３２ビットに定数０ｘ３を加算して、加算結果をレジスタＲ１の下位３２ビットに格納する基本命令。
・命令Ｐ９５…レジスタＲ３の下位３２ビットをレジスタＲ４の下位３２ビットをアドレスとして示されるメモリ上の位置に格納する基本命令。
・命令Ｐ９６…定数０ｘ１２３４をレジスタＲ５の下位３２ビットに転送する基本命令。
・命令Ｐ９７…レジスタＲ５の下位３２ビットをレジスタＲ６の下位３２ビットをアドレスとして示されるメモリ上の位置に格納する基本命令。
命令スケジューリング部１０２の動作について説明する。命令スケジューリング部１０２は、プログラムＰ９０を入力として受け取る。次に、依存関係解析部１１０が起動され、依存関係解析部１１０は、プログラムＰ９０を基にして、図２１に示す依存グラフＧ１２０を生成する。この際、前述のように、依存関係解析部１１０は、コンパイラ内部に保有している参照格納資源テーブルＴ１００を参照することにより、６４ビットレジスタの上位３２ビットと下位３２ビットとを独立の資源としてとらえて依存関係を検出する。
例えば、命令Ｐ９２と命令Ｐ９３との依存関係の解析においては、依存関係解析部１１０は、命令Ｐ９２をレジスタＲ１の上位３２ビットにデータを格納する命令として認識し、命令Ｐ９３をレジスタＲ１の下位３２ビットからデータを参照する命令として認識する。このように、命令Ｐ９２と命令Ｐ９３との間において、同一の資源に関する依存関係が存在しないので、依存関係解析部１１０は、これら２命令の間には依存関係は無いものとみなし、依存グラフＧ１２０において、この２命令間のエッジ（矢印）を生成しない。
【００８６】
依存グラフＧ１２０は、ノードＮ１２１〜Ｎ１２７、エッジＥ１２１〜Ｅ１２６を含む。ノードＮ１２１〜Ｎ１２７は、それぞれ命令Ｐ９１〜Ｐ９７に対応している。エッジＥ１２１〜Ｅ１２６は、それぞれ有向エッジである。エッジＥ１２３は、逆依存関係を示すエッジであり、他のエッジは、データ依存関係を示すエッジである。
ノードＮ１２１とノードＮ１２２とは、ノードＮ１２１からノードＮ１２２へ向かうエッジＥ１２１を介して接続されている。ノードＮ１２１とノードＮ１２３とは、ノードＮ１２１からノードＮ１２３へ向かうエッジＥ１２２を介して接続されている。ノードＮ１２２とノードＮ１２４とは、ノードＮ１２２からノードＮ１２４へ向かうエッジＥ１２４を介して接続されている。ノードＮ１２３とノードＮ１２４とは、ノードＮ１２３からノードＮ１２４へ向かうエッジＥ１２３を介して接続されている。ノードＮ１２３とノードＮ１２５とは、ノードＮ１２３からノードＮ１２５へ向かうエッジＥ１２５を介して接続されている。ノードＮ１２６とノードＮ１２７とは、ノードＮ１２６からノードＮ１２７へ向かうエッジＥ１２６を介して接続されている。
【００８７】
なお、図２１において、依存グラフＧ１２０を視覚的に表現しているが、依存グラフＧ１００と同様に、依存グラフの実体は、絵ではなく、ノードとエッジとから構成されるデータの集合であることに注意を要する。次に、命令再配置部１１１が起動される。命令再配置部１１１は、図１９に示すフローチャートのステップＳ３〜Ｓ９で示されるループ２が終了する度に、ステップＳ１０において、単数または複数の命令を含むグループを配置ノードとして確定する。このグループは、同一サイクルに並列実行可能な命令の集合であり、「実行グループ」と呼ぶ。以下に、図１９に示すフローチャートのステップに沿って、各実行グループ毎に具体的に説明する。
【００８８】
（実行グループ１の決定）命令再配置部１１１は、この時点でプレデセッサの無いノードはノードＮ１２１及びＮ１２６であるので、ノードＮ１２１及びＮ１２６を候補ノードとする配置候補集合を生成する（ステップＳ２）。次に、ノードＮ１２１を最良ノードとして選ぶ（ステップＳ４）。続いて、ノードＮ１２１が配置可能か否かを判定し、ここではノードＮ１２１は配置可能と判定され（ステップＳ５）、ノードＮ１２１を仮配置する（ステップＳ６）。次に、命令再配置部１１１は、配置状態判定をし、ここでは更に配置が可能と判断され（ステップＳ７）、新たな配置候補は生じないので（ステップＳ８）、制御はループ２の先頭に戻る（ステップＳ９、Ｓ３）。まだ配置候補集合にノードがあるので、命令再配置部１１１は、ループ２を繰り返す（ステップＳ３〜Ｓ９）。
【００８９】
次に、配置候補集合にはノードＮ１２６しか残っていないので、命令再配置部１１１は、ノードＮ１２６を最良ノードとして選ぶ（ステップＳ４）。続いて、命令再配置部１１１は、ノードＮ１２６が配置可能か否かを判定し、ここでは配置可能と判定し（ステップＳ５）、仮配置ノード集合にノードＮ１２６を最良ノードとして仮配置する（ステップＳ６）。次に、配置状態判定を行い、ここでは更に配置が可能と判断する（ステップＳ７）。新たな配置候補は生じないので（ステップＳ８）、制御はループ２の先頭に戻る（ステップＳ９、Ｓ３）。この時点で配置候補集合が空なのでループ２を終了し、制御はステップＳ１０に移る。命令再配置部１１１は、仮配置ノード集合にある命令を配置する（ステップＳ１０）。
【００９０】
以上で、１番目の実行グループを求める処理を終わる。未配置ノードが残っているので、命令再配置部１１１は、さらにループ１を繰り返す（ステップＳ１０、Ｓ１）。
（実行グループ２の決定）次に、命令再配置部１１１は、この時点でプレデセッサの無いノードはノードＮ１２２、Ｎ１２３、Ｎ１２７であるので、ノードＮ１２２、Ｎ１２３、Ｎ１２７を候補ノードとする配置候補集合を生成する（ステップＳ２）。次に、ノードＮ１２２を最良ノードとして選ぶ（ステップＳ４）。続いて、ノードＮ１２２が配置可能か否かを判定し、ここでは配置可能と判定し（ステップＳ５）、ノードＮ１２２を仮配置する（ステップＳ６）。次に、命令再配置部１１１は、配置状態判定をし、ここでは更に配置が可能と判定する（ステップＳ７）。次に、新たな配置候補は生じないので（ステップＳ８）、ループ２の先頭に戻る（ステップＳ９、Ｓ３）。命令再配置部１１１は、まだ配置候補集合にノードがあるのでループ２を繰り返す（ステップＳ３〜Ｓ９）。
【００９１】
次に、命令再配置部１１１は、ノードＮ１２３を最良ノードとして選ぶ（ステップＳ４）。続いて、ノードＮ１２３が配置可能か否かを判定し、ここでは配置可能と判定し（ステップＳ５）。ノードＮ１２３を仮配置する（ステップＳ６）。次に、命令再配置部１１１は、配置状態判定をし、ここでは更に配置が可能と判断する。（ステップＳ７）。新たな配置候補は生じないので（ステップＳ８）、制御はループ２の先頭に戻る（ステップＳ９、Ｓ３）。まだ配置候補集合にノードがあるので、命令再配置部１１１は、ループ２を繰り返す（ステップＳ３〜Ｓ９）。
【００９２】
次に、配置候補集合にはノードＮ１２７しか残っていないので、命令再配置部１１１は、ノードＮ１２７を最良ノードとして選ぶ（ステップＳ４）。続いて、ノードＮ１２７が配置可能か否かを判定し、ここでは配置可能と判定し（ステップＳ５）。ノードＮ１２７を仮配置する（ステップＳ６）。次に、命令再配置部１１１は、配置状態判定を行い、すでに対象プロセッサの並列度の上限である３命令が仮配置されているので、これ以上の配置は不可能と判定し（ステップＳ７）、ループ２を中断し、制御をステップＳ１０に移す。命令再配置部１１１は、仮配置ノード集合にある命令を配置する（ステップＳ１０）。
【００９３】
以上により、２番目の実行グループを求める処理を終わる。未配置ノードが残っているので、命令再配置部１１１は、ループ１を繰り返す（ステップＳ１０、Ｓ１）。
（実行グループ３の決定）この時点でプレデセッサの無いノードはノードＮ１２４、Ｎ１２５であるので命令再配置部１１１は、ノードＮ１２４、Ｎ１２５を候補ノードとする配置候補集合を生成する（ステップＳ２）。以降の処理内容は上記の実行サイクル１の場合と同様であるので省略する。こうして、これら２つのノードが３番目の実行グループの配置命令として配置される。
【００９４】
次に、実行境界付加部１１２が起動される。実行境界付加部１１２は、命令再配置部１１１で配置された各実行グループの最後の命令の並列実行境界情報を“１”にセットし、並列実行境界が付加された命令群を出力する。続いて、オブジェクトコード生成部１０３が起動され、オブジェクトコード生成部１０３は、実行境界付加部１１２から出力された命令群をオブジェクトコードに変換し、オブジェクトコードをファイルとしてオブジェクトコード記憶部１４０へ書き込む。
【００９５】
このようにして生成された最終的な実行形式コードであるプログラムＰ１００と実行の順序を図２２に示す。なお、図２２においては、プログラムはニーモニックにより表現されているが、実際には、６４ビット単位にまとめられたビット列である。プログラムＰ１００は、７個の命令Ｐ１０１〜Ｐ１０７から構成されており、命令供給単位としては３個のパケット１５０、１５１、１５２から構成されている。パケット１５０は、３個の命令Ｐ１０１〜Ｐ１０３を含み、パケット１５１は、３個の命令Ｐ１０４〜Ｐ１０６を含み、パケット１５２は、１個の命令Ｐ１０７を含んでいる。命令Ｐ１０１〜Ｐ１０７は、それぞれ並列実行境界情報と、フォーマット情報と、命令コードとを含んでいる。
【００９６】
命令Ｐ１０１は、命令Ｐ９１に対応し、命令Ｐ１０２は、命令Ｐ９６に対応し、命令Ｐ１０３は、命令Ｐ９２に対応し、命令Ｐ１０４は、命令Ｐ９３に対応し、命令Ｐ１０５は、命令Ｐ９７に対応し、命令Ｐ１０６は、命令Ｐ９４に対応し、命令Ｐ１０７は、命令Ｐ９５に対応している。命令Ｐ１０２と命令Ｐ１０５と命令Ｐ１０７とにおいて、並列実行境界情報は、それそれ”１”であり、並列実行境界であることを示すしている。
【００９７】
上記に説明するように、３個の実行グループＧ９１、Ｇ９２、Ｇ９３が生成され、実行グループＧ９１は、命令Ｐ９１と命令Ｐ９６とを含み、実行グループＧ９２は、命令Ｐ９２と命令Ｐ９３と命令Ｐ９７とを含み、実行グループＧ９３は、命令Ｐ９４と命令Ｐ９５とを含む。実行グループＧ９１とＧ９２とＧ９３とは、この順に実行される。実行グループＧ９１内においては、命令Ｐ９１と命令Ｐ９６とが同時に実行される。実行グループＧ９２内においては、命令Ｐ９２と命令Ｐ９３と命令Ｐ９７とが同時に実行される。実行グループＧ９３内においては、命令Ｐ９４と命令Ｐ９５とが同時に実行される。
【００９８】
２．４ 従来のコンパイル装置との比較次に、図２０に示すプログラムＰ９０を、従来のコンパイル装置により処理した場合について、本発明に係るコンパイル装置２００の場合と比較する。
従来のコンパイル装置も、依存関係を解析するブロックにて依存グラフを生成する。しかし、本発明の場合と異なり、アセンブラコードに記述されたレジスタ名を参照し、レジスタ全体を一つの資源として扱って、各命令においてデータが格納される資源又はデータが参照される資源に関する情報を求め、その情報を基にして命令間の依存関係を検出する。
【００９９】
例えば、図２０に示すプログラムＰ９０に含まれる命令Ｐ９２と命令Ｐ９３との依存関係解析において、まず命令Ｐ９２はレジスタＲ１にデータを格納する命令として認識され、命令Ｐ９３はレジスタＲ１からデータを参照する命令として認識される。これにより、これら２命令の間にはレジスタＲ１に関してデータ依存関係があるとみなされ、依存グラフにおいては、この２命令にそれぞれ相当する２ノード（節）間において、データ依存関係に相当するエッジ（矢印）が生成される。このようにして生成された依存グラフＧ１３０を図２３に示す。依存グラフＧ１３０は、図２０に示すプログラムＰ９０に対応している。
【０１００】
依存グラフＧ１３０は、ノードＮ１３１〜Ｎ１３７、エッジＥ１３１〜Ｅ１３６を含む。ノードＮ１３１〜Ｎ１３７は、それぞれ命令Ｐ９１〜Ｐ９７に対応している。エッジＥ１３１〜Ｅ１３６は、それぞれ有向エッジである。エッジＥ１３４は、逆依存関係を示すエッジであり、他のエッジは、データ依存関係を示すエッジである。
ノードＮ１３１とノードＮ１３２とは、ノードＮ１３１からノードＮ１３２へ向かうエッジＥ１３１を介して接続されている。ノードＮ１３２とノードＮ１３３とは、ノードＮ１３２からノードＮ１３３へ向かうエッジＥ１３２を介して接続されている。ノードＮ１３２とノードＮ１３４とは、ノードＮ１３２からノードＮ１３４へ向かうエッジＥ１３３を介して接続されている。ノードＮ１３３とノードＮ１３４とは、ノードＮ１３３からノードＮ１３４へ向かうエッジＥ１３４を介して接続されている。ノードＮ１３３とノードＮ１３５とは、ノードＮ１３３からノードＮ１３５へ向かうエッジＥ１３５を介して接続されている。ノードＮ１３６とノードＮ１３７とは、ノードＮ１３６からノードＮ１３７へ向かうエッジＥ１３６を介して接続されている。
【０１０１】
なお、図２３において、依存グラフＧ１３０を視覚的に表現しているが、依存グラフＧ１００と同様に、依存グラフの実体は、絵ではなく、ノードとエッジとから構成されるデータの集合であることに注意を要する。従来のコンパイル装置により生成された最終的な実行形式コードであるプログラムＰ１１０と実行の順序を図２４に示す。
プログラムＰ１１０は、７個の命令Ｐ１１１〜Ｐ１１７から構成されており、命令供給単位としては３個のパケット１６０、１６１、１６２から構成されている。パケット１６０は、３個の命令Ｐ１１１〜Ｐ１１３を含み、パケット１６１は、３個の命令Ｐ１１４〜Ｐ１１６を含み、パケット１６２は、１個の命令Ｐ１１７を含んでいる。命令Ｐ１１１〜Ｐ１１７は、それぞれ並列実行境界情報と、フォーマット情報と、命令コードとを含んでいる。
【０１０２】
命令Ｐ１１１は、命令Ｐ９１に対応し、命令Ｐ１１２は、命令Ｐ９６に対応し、命令Ｐ１１３は、命令Ｐ９２に対応し、命令Ｐ１１４は、命令Ｐ９７に対応し、命令Ｐ１１５は、命令Ｐ９３に対応し、命令Ｐ１１６は、命令Ｐ９４に対応し、命令Ｐ１１７は、命令Ｐ９５に対応している。命令Ｐ１１２と命令Ｐ１１４と命令Ｐ１１６と命令Ｐ１１７とにおいて、並列実行境界情報は、それそれ”１”であり、並列実行境界であることを示すしている。
【０１０３】
３個の実行グループＧ１１１、Ｇ１１２、Ｇ１１３、Ｇ１１４が生成され、実行グループＧ１１１は、命令Ｐ９１と命令Ｐ９６とを含み、実行グループＧ１１２は、命令Ｐ９２と命令Ｐ９７とを含み、実行グループＧ１１３は、命令Ｐ９３と命令Ｐ９４とを含み、実行グループＧ１１４は、命令Ｐ９５を含む。実行グループＧ１１１とＧ１１２とＧ１１３とＧ１１４とは、この順に実行される。実行グループＧ１１１内においては、命令Ｐ９１と命令Ｐ９６とが同時に実行される。実行グループＧ１１２内においては、命令Ｐ９２と命令Ｐ９７とが同時に実行される。実行グループＧ１１３内においては、命令Ｐ９３と命令Ｐ９４とが同時に実行される。実行グループＧ１１４内においては、命令Ｐ９５が実行される。
【０１０４】
図２２と図２４を比較して明らかなように、本発明のコンパイル装置２００においては、従来のコンパイル装置と比べると、実行グループ数が１つ減っている増えている。つまり、実行サイクル数が１サイクル減っていることになる。このように本発明のコンパイル装置２００において、実行グループ数が減っているのは、コンパイル装置２００の依存関係解析部１１０が、レジスタの一部分の領域を用いて命令間の依存関係を解析するためであり、依存グラフにおいて厳密には真のデータ依存関係の無い前述の２命令間にエッジ（矢印）を生成しないことによる。
【０１０５】
II 実施の形態２上述の実施の形態１におけるプロセッサ３１０は、コンパイル装置２００により実行形式コード生成時に静的に複数の命令間の依存関係が解析され、解析結果に基づいて命令コードが移動されて生成された命令ストリームを実行する。プロセッサ３１０は、いわゆるスタティックスケジューリングに基づくプロセッサである。
以下においては、並列実行の可否をハードウェアで動的に決定するダイナミックスケジューリングに基づくプロセッサ５００についての実施の形態について説明する。なお、プロセッサ５００は、図示されていない。プロセッサ５００は、最大３命令を並列実行するスーパースカラ方式のプロセッサである。
【０１０６】
プロセッサ５００が解読し実行する命令のフォーマットは、図２に示す命令フォーマットから、並列実行境界情報を取り除いたものである。命令の供給と発行とは、プロセッサ３１０と同様になされるが、命令内に並列実行境界情報が無いので、各サイクルにおいてどの命令まで発行可能であるかどうかの検出およびその制御はプロセッサ５００が行なう。
【０１０７】
１．１ プロセッサ５００の構成プロセッサ５００のハードウェア構成については、その大部分はプロセッサ３１０のハードウェア構成と同一であるが、命令の発行制御の方法のみが異なる。以下において、プロセッサ３１０との相違点を中心として説明する。
相違点は、図４に示す命令レジスタ２３、命令デコーダ３２および命令発行制御部３１周辺の構成である。プロセッサ３１０では、コンパイル装置により並列実行の可否が静的に解析され、その結果として命令のフォーマットは、並列実行境界情報を含むので、命令発行制御部３１は、図６に示すように、命令レジスタＡ２３１及び命令レジスタＢ２３２にそれぞれ含まれる並列実行境界情報とフォーマット情報と（合わせて４ビットの情報）を読み出し、第２命令デコーダ３４及び第３命令デコーダ３５に対して無動作命令フラグを出力するという、非常に単純な構成になっている。本実施の形態のプロセッサ５００では、並列実行の可否の解析を、後述する命令発行制御部１７１で行なう。
【０１０８】
図２５は、本実施の形態のプロセッサ５００の命令レジスタ１７０及びその周辺の構成要素の構成を示すブロック図である。プロセッサ５００は、プロセッサ３１０の命令レジスタ２３、命令発行制御部３１、命令デコーダ３２に代えて、命令レジスタ１７０、命令発行制御部１７１、命令デコーダ１７５（図示していない）を備えている。
命令レジスタ１７０は、命令レジスタＡ１７０１、命令レジスタＢ１７０２、命令レジスタＣ１７０３及び命令レジスタＤ１７０４を含んでいる。命令デコーダ１７５は、第１命令デコーダ１７２、第２命令デコーダ１７３及び第３命令デコーダ１７４を含んでいる。命令発行制御部１７１は、命令レジスタ１７０に含まれる各命令レジスタに格納されているユニットのフォーマット情報を読み出し、第１命令デコーダ１７２、第２命令デコーダ１７３及び第３命令デコーダ１７４から各解読結果を受け取る。次に、命令レジスタＡ１７０１、命令レジスタＢ１７０２、命令レジスタＣ１７０３及び命令レジスタＤ１７０４に格納されている各命令の並列実行の可否を判断し、その判断結果に基づいて、第２命令デコーダ１７３及び第３命令デコーダ１７４に対して、“１”にセットされた無動作命令フラグを出力する。つまり、その命令デコーダの解読結果を無効化する。その後、各命令デコーダから実行制御部４１へ各命令の制御信号が送られる。
【０１０９】
具体的には、命令発行制御部１７１は、まず命令レジスタＡ１７０１と命令レジスタＢ１７０２に格納されたユニットのフォーマット情報をそれぞれ制御信号線Ｋ２１及びＫ２２を介して読み出し、命令レジスタＡ１７０１のユニットのフォーマット情報が“１”の場合には、第２命令デコーダ１７３へ出力する無動作命令フラグを“１”にセットし、無動作命令フラグを制御信号線Ｋ１２を介して第２命令デコーダ１７３へ出力する。また、命令レジスタＡ１７０１のユニットのフォーマット情報が“０”であり、かつ命令レジスタＢ１７０２のユニットのフォーマット情報が“１”の場合には、第３命令デコーダ１７４へ出力する無動作命令フラグを“１”にセットし、無動作命令フラグを制御信号線Ｋ１３を介して第３命令デコーダ１７４へ出力する。
【０１１０】
これらと並行して、命令発行制御部１７１は、各命令デコーダ１７２〜１７４の解読結果をそれぞれ制御信号線Ｋ５１、Ｋ５２、Ｋ５３を介して受け取り、並列実行の可否を判断する。具体的には、命令発行制御部１７１は、まず第１命令デコーダ１７２の解読結果のオペコードとオペランドから、この命令（前記オペコードとオペランドにより示される命令、第１命令と呼ぶ。）がどのレジスタのどの部分にデータを格納し、又はどの部分からデータを参照する命令であるかの情報を得る。命令発行制御部１７１は、参照格納資源テーブルＴ１００と同じテーブルを有しており、このテーブルを用いて、６４ビットレジスタの上位３２ビットと下位３２ビットとをそれぞれ独立の資源とみなし、オペコードに基づいて、それぞれの資源からデータを参照するか又はそれぞれの資源にデータを格納するかを判断する。
【０１１１】
続いて、次に他の各命令デコーダにより有効に命令が解読された場合の解読結果を参照する。具体的には、第２命令デコーダ１７３へ出力する無動作命令フラグが“１”にセットされていない場合には、第２命令デコーダ１７３の解読結果を参照し（ここで、解読された命令を第２命令と呼ぶ。）、１番目の命令と同様に資源の参照及び格納に関する情報を得る。
【０１１２】
また、第２命令デコーダ１７３へ出力する無動作命令フラグが“１”にセットされており、かつ第３命令デコーダ１７４へ出力する無動作命令フラグが“１”にセットされていない場合には、第３命令デコーダ１７４の解読結果を参照し（ここで、解読された命令を第２命令と呼ぶ。）、１番目の命令と同様に資源の参照及び格納に関する情報を得る。
ここで、資源の参照及び格納に関する情報は、実施の形態１に示すコンパイル装置２００の参照格納資源テーブルＴ１００から得られる情報と同等である。上記の第１命令及び第２命令の２命令の資源の格納および参照に関する情報から、これらの２命令の間にデータ依存の関係があるかどうかを判断し、データ依存の関係があった場合には、第２命令は第１命令と同時に実行することができないので、第２命令を解読する命令デコーダ以降の命令デコーダの無動作命令フラグを“１”にセットし、当該命令デコーダへ出力する。
【０１１３】
同様にして、第３の命令の存在を検出し、第３の命令が存在する場合には、第１の命令と第３の命令との間の依存関係及び第２の命令と第３の命令との間の依存関係を解析し、データ依存関係が存在する場合には、第３の命令を解読する命令デコーダの無動作命令フラグを“１”にセットして当該命令デコーダへ出力する。次に、当該サイクルで同時実行不可能な命令に関しては、その命令デコーダは、無動作命令を含む制御信号を実行制御部４１へ送る。
【０１１４】
最後に、命令発行制御部１７１は、このサイクルで発行されたユニット数の情報を制御信号線Ｋ４１を介して命令バッファ２２に送り、命令バッファ２２は、この情報をもとに命令バッファ中の有効なユニットを示す状態を次の状態に遷移する。１．２ プロセッサ５００の動作次に、プロセッサ５００の動作について、具体的な例を示して説明する。例としては、図２０に示すアセンブラコードによる表現されているプログラムＰ９０を用いる。プログラムＰ９０は、アセンブラ（アセンブル装置）により出力されたアセンブラコードである。
【０１１５】
プログラムＰ９０は、プロセッサ５００に対応するコンパイル装置によって命令の並べ替えが施される。この命令の並べ替えは、プロセッサ５００の命令発行制御部１７１の動作を考慮して、より高い並列度で実行することを目的として行なわれる。前記コンパイル装置によってプログラムＰ９０に対して命令の並べ替えを施し、６４ビットずつのパケットにパックして生成されたプログラムＰ１２０（実行形式コードにより表現されてる）を図２６に示す。
【０１１６】
プログラムＰ１２０は、７個の命令Ｐ１２１〜Ｐ１２７から構成されており、命令供給単位としては３個のパケット１８０、１８１、１８２から構成されている。パケット１８０は、３個の命令Ｐ１２１〜Ｐ１２３を含み、パケット１８１は、３個の命令Ｐ１２４〜Ｐ１２６を含み、パケット１８２は、１個の命令Ｐ１２７を含んでいる。命令Ｐ１２１〜Ｐ１２７は、それぞれ並列実行境界情報と、フォーマット情報と、命令コードとを含んでいる。
【０１１７】
命令Ｐ１２１は、命令Ｐ９１に対応し、命令Ｐ１２２は、命令Ｐ９６に対応し、命令Ｐ１２３は、命令Ｐ９２に対応し、命令Ｐ１２４は、命令Ｐ９３に対応し、命令Ｐ１２５は、命令Ｐ９７に対応し、命令Ｐ１２６は、命令Ｐ９４に対応し、命令Ｐ１２７は、命令Ｐ９５に対応している。以下に、プロセッサ５００が図２６に示すプログラムＰ１２０（実行形式コード）を実行する際の各サイクルにおける動作について説明する。
（第１サイクルの動作）パケット１８０がメモリから供給され、パケット１８０内の３つのユニットが順に命令レジスタ１７０に転送される。具体的には、命令Ｐ１２１（“ｖａｄｄｗ”命令を含む）が命令レジスタＡ１７０１に、命令Ｐ１２２（“ｍｏｖ”命令を含む）が命令レジスタＢ１７０２に、命令Ｐ１２３（“ｖａｄｄｈｉ”命令を含む）が命令レジスタＣ１７０３に転送される。
【０１１８】
次に、命令発行制御部１７１は、以下に示すようにして、命令の発行を制御する。命令発行制御部１７１は、まず、各命令レジスタに格納されているフォーマット情報を参照して適切な命令デコーダの無動作命令フラグをセットするが、上記３個の命令レジスタに格納されているユニットのフォーマット情報は共に“０”であるので、フォーマット情報による制御は行なわない。
【０１１９】
次に、命令発行制御部１７１は、各命令デコーダの解読結果を参照して各命令の格納または参照する資源に関する情報を得る。具体的には、命令発行制御部１７１は、命令Ｐ１２１に含まれる“ｖａｄｄｗ”命令が、レジスタＲ０及びレジスタＲ１の上位３２ビット及び下位３２ビットを共に参照してレジスタＲ１の上位３２ビット及び下位３２ビットにデータを格納する命令であると判断し、命令Ｐ１２２に含まれる“ｍｏｖ”命令が、レジスタＲ５の下位３２ビットにデータを格納する命令であると判断し、命令Ｐ１２３に含まれる“ｖａｄｄｈｉ”命令が、レジスタＲ２及びレジスタＲ１の上位３２ビットを参照し、レジスタＲ１の上位３２ビットにデータを格納する命令であると判断する。
【０１２０】
次に、命令発行制御部１７１は、各命令間にデータ依存関係が存在するかどうかを判定する。具体的には、まず、命令発行制御部１７１は、命令Ｐ１２１に含まれる“ｖａｄｄｗ”命令と命令Ｐ１２２に含まれる“ｍｏｖ”命令との間にはデータ依存関係が存在しないので、命令Ｐ１２１と命令Ｐ１２２とは同時実行可能と判断する。次に、命令Ｐ１２１に含まれる“ｖａｄｄｗ”命令と命令Ｐ１２３に含まれる“ｖａｄｄｈｉ”命令との間にはレジスタＲ１の上位３２ビットに関してデータ依存が存在すると判定するので、このサイクルで“ｖａｄｄｈｉ”命令の発行は不可能であると判断し、第３命令デコーダ１７４へ出力する無動作命令フラグを“１”にセットし、無動作命令フラグを第３命令デコーダ１７４へ出力する。
【０１２１】
以上の命令発行制御部１７１による制御により、このサイクルでは命令Ｐ１２１に含まれる“ｖａｄｄｗ”命令と命令Ｐ１２２に含まれる“ｍｏｖ”命令の２命令が発行されることになる。次に、命令発行制御部１７１は、２個のユニットを発行したという情報を命令バッファ２２へ送る。残った命令Ｐ１２３に含まれる“ｖａｄｄｈｉ”命令は、命令バッファ２２に蓄積される。
【０１２２】
実行部４０は、レジスタＲ０及びレジスタＲ１について、上位及び下位それぞれ独立に加算を行い、これらの加算結果をレジスタＲ１の上位及び下位に格納し、レジスタＲ５の下位３２ビットに定数０ｘ１２３４を転送する。
（第２サイクルの動作）パケット１８１がメモリから供給され、命令バッファ２２に蓄積されている“ｖａｄｄｈｉ”命令と、パケット１８１内の各ユニットが順に命令レジスタ１７０に転送される。具体的には、命令Ｐ１２３に含まれる“ｖａｄｄｈｉ”命令が命令レジスタＡ１７０１に、命令Ｐ１２４に含まれる“ｍｏｖ”命令以降のパケット１８１内の各ユニットが命令レジスタＢ１７０２からＤ１７０４へ順に格納されていく。
【０１２３】
次に、命令発行制御部１７１は命令の発行を制御する。具体的には、第１サイクルの場合と同様に命令レジスタ内の全てのユニットのフォーマット情報が“０”であるので、命令発行制御部１７１はフォーマット情報による制御は行なわない。次に、命令発行制御部１７１は、各命令デコーダの解読結果を参照して各命令が格納または参照する資源に関する情報を得る。そして、第１サイクルの場合と同様に各命令間の依存関係を解析する。
【０１２４】
この場合、命令Ｐ１２３に含まれる“ｖａｄｄｈｉ”命令のデスティネーションレジスタがレジスタＲ１であり、命令Ｐ１２４に含まれる“ｍｏｖ”命令のソースレジスタもレジスタＲ１であるが、“ｖａｄｄｈｉ”命令はレジスタＲ１の上位３２ビットのみに格納する命令であり、“ｍｏｖ”命令はレジスタＲ１の下位３２ビットのみを参照する命令であるので、命令発行制御部１７１は、これらの命令の間にはデータ依存関係は存在しないと判定する。同様に、命令Ｐ１２５に含まれる“ｓｔ”命令についても上記２つの命令との間にデータ依存関係が存在しないと判定し、このサイクルでは３つの命令デコーダ全ての解読結果が有効となり、３個の命令を発行する。次に、命令発行制御部１７１は、３個のユニットを発行したという情報を命令バッファ２２に送る。残った命令Ｐ１２６に含まれる“ａｄｄ”命令は命令バッファ２２に蓄積される。
【０１２５】
実行部４０は、レジスタＲ２とレジスタＲ１とのそれぞれ上位３２ビットを加算し、その加算結果をレジスタＲ１の上位３２ビットに格納し、レジスタＲ１の下位３２ビットをレジスタＲ３の下位３２ビットに転送し、レジスタＲ５の下位３２ビットをレジスタＲ６の下位３２ビットをアドレスとして示されるメモリ内の位置に転送する。
（第３サイクルの動作）パケット１８２がメモリから供給され、命令バッファ２２に蓄積されている“ａｄｄ”命令（命令Ｐ１２６に含まれる）と、パケット１８２内のユニットである“ｓｔ”命令（命令Ｐ１２７に含まれる）が順に命令レジスタ１７０（命令レジスタＡ１７０１及び命令レジスタＢ１７０２）に転送される。
【０１２６】
そして、上記に説明した各サイクルと同様にして、命令発行制御部１７１は制御を行い、このサイクルでは、命令レジスタ１７０に転送された２つの命令を同時に発行する。これにより、供給されたユニットは全て発行されたことになる。実行部４０は、レジスタＲ１の下位３２ビットに定数０ｘ３を加算し、その加算結果をレジスタＲ１の下位３２ビットに格納し、レジスタＲ３の下位３２ビットをレジスタＲ４の下位３２ビットをアドレスとして示されるメモリ内の位置に転送する。
【０１２７】
プロセッサ５００が実際に実行するサイクルＧ１２１、Ｇ１２２、Ｇ１３３を図２６に示す。サイクルＧ１２１は、命令Ｐ１２１と命令Ｐ１２２とを含む。サイクルＧ１２２は、命令Ｐ１２３と命令Ｐ１２４と命令Ｐ１２５とを含む。サイクルＧ１２３は、命令Ｐ１２６と命令Ｐ１２７とを含む。以上のようにして、プロセッサ５００は、図２６に示すプログラムＰ１２０（実行形式コード）を３サイクルで実行する。
【０１２８】
ここで、プロセッサ５００と従来のプロセッサとにおいて、プログラムＰ１２０を実行させた場合について比較する。従来のプロセッサの場合、第１サイクルにおいては、プロセッサ５００と同様に動作する。第２サイクルにおいて、従来のプロセッサは、命令レジスタＡに格納されている命令Ｐ１２３に含まれる“ｖａｄｄｈｉ”命令と命令レジスタＢに格納されている命令Ｐ１２３に含まれる“ｍｏｖ”命令との間の依存関係を判定する際に、命令コード内のレジスタ番号を参照して、レジスタ全体を１つの資源として扱い、各命令が格納または参照する資源に関する情報を得る。具体的には、“ｖａｄｄｈｉ”命令はレジスタＲ２とレジスタＲ１を参照してレジスタＲ１に格納する命令であると判断し、“ｍｏｖ”命令はレジスタＲ１を参照してレジスタＲ３に格納する命令であると判断する。このため、これら２つの命令間にはレジスタＲ１に関してデータ依存が存在すると判断し、これら２つの命令は、同時実行されない。つまり、このサイクルでは“ｖａｄｄｈｉ”命令のみが発行されることになる。
【０１２９】
これにより、図２６に示すプログラムＰ１２０（実行形式コード）を従来のプロセッサにて実行すると、図２７に示すように、サイクルＧ１３１〜Ｇ１３４の４サイクルを要することになる。サイクルＧ１３１は、命令Ｐ１２１及びＰ１２２を含み、サイクルＧ１３２は、命令Ｐ１２３を含み、サイクルＧ１３３は、命令Ｐ１２４、Ｐ１２５及びＰ１２６を含み、サイクルＧ１３４は、命令Ｐ１２７を含む。
【０１３０】
以上説明したように、従来のプロセッサによると、本発明のプロセッサ５００の場合に比べて１サイクル増えていることが分かる。図２６に示すプログラムＰ１２０（実行形式コード）内の命令をコンパイル装置によってどのように並べ替えても、従来のプロセッサにおいてこのコードの実行を４サイクルより縮めることはできない。
III その他の変形例以上、本発明に係るプロセッサおよびコンパイル装置について、実施の形態に基づいて説明したが、本発明はこれらの実施の形態に限られないことは勿論である。次のように構成してもよい。
（１）上記実施の形態のコンパイル装置では、依存関係解析部１１０は、参照格納資源テーブルＴ１００を参照して、命令と命令との間におけるレジスタの一部分の領域に関する依存関係を解析するとしているが、この構成に限らない。
【０１３１】
命令再配置部１１１が、図１９に示すフローチャートのステップＳ２において、配置候補集合を生成する際に、参照格納資源テーブルＴ１００を参照して、真に他の命令に依存していない命令の集合を求める、という構成にしてもよい。このように構成する場合においても、レジスタの一部分の領域を資源とした依存関係の検出ができるので、従来の方法に比べてより厳密な候補ノードの抽出が可能となり、並列実行の可能性が向上する。こうして、対象プロセッサでの実行サイクル数を削減するという上記実施の形態と同様の有意な効果が得られる。
（２）上記実施の形態のプロセッサおよびコンパイル装置では、レジスタを上位と下位の２つの部分に分割し、それぞれを１つの資源として扱っていたが、本発明はこの分割方法に限定されるものではない。レジスタを３つ以上の部分に分割してもよい。また、それぞれの資源を分割するビット幅を同一としなくてもよい。これを実現するためには、プロセッサでは、図１１に示すレジスタファイル及びその周辺の構成を前記分割に合致するように変更すればよい。また、コンパイル装置の命令スケジューリング部及びスーパースカラプロセッサの命令発行制御部では、図１８に示す参照格納資源テーブルＴ１００を前記分割に合致するように変更すればよい。
（３）上記実施の形態のプロセッサでは、同一サイクルにおいて、複数の命令が１個のレジスタの同一の部分の領域にデータを書き込もうとする場合には、レジスタ書込制御部４３１は、プログラムにおける順番が後方の命令の実行結果の書き込みを優先するように制御しているが、本発明は、この優先順位付けの方法に限定されるものではない。例えば、命令で指定されたオペレーションの種類によって、どちらの命令の実行結果の書き込みを優先するかを選択する構成にしてもよい。具体的には、レジスタ書込制御部４３１は、命令の種類毎に優先度をあらかじめ記憶しており、前記複数の命令の優先度を読み出し、読み出した優先度の最も高い命令について、前記レジスタの同一の部分へのデータの格納を行うように決定する。
（４）上記実施の形態のプロセッサでは、３個の命令を同時実行するように構成していたが、本発明はこの同時実行命令数に限定されるものではない。例えば、２個の命令を同時発行する構成にしてもよい。さらに多くの命令を同時発行する構成にしてもよい。
（５）上記実施の形態のプロセッサでは、可変長の命令を実行するとしているが、本発明はこの命令フォーマットに限定されるものではない。固定長の命令フォーマットを採用してもよく、この場合においても、同様の効果を奏する。
（６）本発明は、本実施の形態に示し上記に説明する手順を含むコンパイル方法であるとしてもよい。また、前記コンパイル方法をコンピュータにより実現するコンパイルプログラムであるしてもよいし、前記コンパイルプログラムからなるデジタル信号であるとしてもよい。また、本発明は、前記コンパイルプログラムをコンピュータ読み取り可能な記録媒体、例えば、フロッピー（登録商標）ディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤなどの記録媒体、に記録したものとしてもよいし、これらの記録媒体としてもよい。また、本発明は、前記コンパイルプログラムを、インターネットを代表とするネットワークを経由して伝送するものとしてもよい。
（７）本発明は、本実施の形態に示すコンパイル装置により生成された実行形式コードをコンピュータ読み取り可能な記録媒体、例えば、フロッピー（登録商標）ディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、半導体メモリなどに記録したものとしてもよいし、これらの記録媒体としてもよい。
（８）本発明は、上記に示す複数の実施の形態、これらの複数の変形例、又は複数の実施の形態及びこれらの複数の変形例の一部を組み合わるとしてもよい。
（発明の効果）上記に説明するように、本発明は、複数の命令を１のサイクルにおいて実行するプロセッサであって、レジスタと命令読出手段と解読手段とアクセス手段とを含み、前記命令読出手段は、外部のプログラムから少なくとも第１命令と第２命令とを含む複数の命令を読み出し、前記第１命令は、１のレジスタの全部又は部分である第１領域へのアクセス指示を含み、前記第２命令は、前記レジスタの全部又は部分である第２領域へのアクセス指示を含み、ここで、前記第１領域が前記レジスタの全部の領域である場合には、前記第２領域は前記レジスタの部分の領域であり、前記第２領域が前記レジスタの全部の領域である場合には、前記第１領域は前記レジスタの部分の領域であり、また、前記２個のアクセス指示のうち少なくとも１個は、前記レジスタの全部又は部分の領域へのデータの格納の指示であり、前記解読手段は、１のサイクルにおいて、読み出された命令毎に命令を解読し、命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、前記解読情報は、少なくとも前記レジスタと前記第１領域と前記第２領域とに関する情報を含み、前記アクセス手段は、１のサイクルにおいて、前記解読情報に含まれる前記レジスタの前記第１領域へのアクセスと、前記レジスタの前記第２領域へのアクセスとを実行する。
【０１３２】
この構成によると、プログラム中において、１のレジスタの前記第１部分をアクセスする命令と同じレジスタの前記第２部分をアクセスする別の命令がある場合に、前記２個の命令を１のサイクルにおいて実行することができるので、従来のプロセッサと比較すると、実行サイクル数を削減することができる。ここで、前記各命令は、並列実行の可否を示す並列実行情報を含み、前記解読手段は、前記命令に含まれている並列実行情報を基にして、１のサイクルにおいて実行する命令の集合を決定する命令発行制御部と、読み出された前記複数の命令のうち、前記集合に含まれる命令を解読し、他の命令の解読を停止する命令解読部とを含むように構成してもよい。
【０１３３】
この構成によると、命令に含まれる並列実行情報を基にして、１のサイクルに含まれない命令の解読を停止して、１のサイクルに含まれる命令のみを実行することができる。ここで、前記解読情報は、命令に含まれるオペコードを含み、前記プロセッサは、さらに、１のサイクルにおいて、前記解読情報に含まれるオペコードとレジスタとレジスタの領域とに関する情報とに基づいて、命令毎に演算又はメモリアクセスを行い、演算情報を生成する演算手段を含み、前記演算情報は、前記第１命令による第１演算情報と、前記第２命令による第２演算情報とを含み、レジスタへデータを格納する前記アクセス手段は、前記第１演算情報と、前記第２演算情報と、他の命令による演算情報とのうちの１の演算情報を選択し、選択した演算情報の前記第１領域に対応する情報を１のレジスタの前記第１領域へ書き込む第１選択部と、前記第１演算情報と、前記第２演算情報と、他の命令による演算情報とのうちの１の演算情報を選択し、選択した演算情報の前記第２領域に対応する情報を１のレジスタの前記第２領域へ書き込む第２選択部と、１のサイクルにおいて、前記解読情報に含まれる前記レジスタと前記第１領域とに関する情報に基づいて、前記第１選択部に対して、前記第１演算情報を選択し、前記第１演算情報を前記レジスタの前記第１領域へ書き込むように制御し、前記解読情報に含まれる前記レジスタと前記第２領域とに関する情報に基づいて、前記第２選択部に対して、前記第２演算情報を選択し、前記第２演算情報を前記レジスタの前記第２領域へ書き込むように制御するレジスタ書込制御部とを含むように構成してもよい。
【０１３４】
この構成によると、１のサイクルにおいて、別々の命令による別々の演算情報を、それぞれ１のレジスタの第１領域と第２領域とに書き込むことができるので、前記２個の命令を１のサイクルにおいて実行することができる。ここで、前記第１命令に含まれるアクセスの対象となる前記第１領域と、前記第２命令に含まれるアクセスの対象となる前記第２領域とは、交わりがなく、それぞれ部分の領域であり、前記第１命令は、前記レジスタの第１領域へのデータの格納指示を含み、前記第２命令は、前記レジスタの前記第２領域からのデータの参照指示を含み、前記アクセス手段は、１のサイクルにおいて、レジスタの第１領域へのデータの格納と、前記レジスタの第２領域からのデータの参照とを実行するように構成してもよい。
【０１３５】
この構成によると、１のレジスタの前記第１部分へデータを格納する命令と同じレジスタの前記第２部分からデータを参照する別の命令がある場合に、前記２個の命令を１のサイクルにおいて実行することができるので、従来のプロセッサと比較すると、実行サイクル数を削減することができる。ここで、前記第１命令に含まれるアクセスの対象となる前記第１領域と、前記第２命令に含まれるアクセスの対象となる前記第２領域とは、交わりがなく、それぞれ部分の領域であり、前記第１命令は、前記レジスタの第１領域へのデータの格納指示を含み、前記第２命令は、前記レジスタの前記第２領域へのデータの格納指示を含み、前記アクセス手段は、１のサイクルにおいて、レジスタの第１領域へのデータの格納と、前記レジスタの第２領域へのデータの格納とを実行するように構成してもよい。
【０１３６】
この構成によると、１のレジスタの前記第１部分へデータを格納する命令と同じレジスタの前記第２部分へデータを格納する別の命令がある場合に、前記２個の命令を１のサイクルにおいて実行することができるので、従来のプロセッサと比較すると、実行サイクル数を削減することができる。ここで、前記第１命令に含まれるアクセスの対象となる前記第１領域と、前記第２命令に含まれるアクセスの対象となる前記第２領域とは、第３領域において重なりを有し、前記第１命令は、前記レジスタの第１領域へのデータの格納指示を含み、前記第２命令は、前記レジスタの前記第２領域へのデータの格納指示を含み、前記アクセス手段は、１のサイクルにおいて、レジスタの第１領域から第３領域を除く領域へのデータの格納と、レジスタの第３領域へのデータの格納と、前記レジスタの第２領域から第３領域を除く領域へのデータの格納とを実行するように構成してもよい。
【０１３７】
この構成によると、１のレジスタの一部にデータを格納する命令と、同じレジスタの一部または全部にデータを格納する命令とを、同一サイクルにおいて、実行することができるので、同一サイクルにおいて１のレジスタに対して、１の命令でしか書き込むことのできない従来のプロセッサと比較すると、実行サイクル数を削減することができる。
ここで、前記アクセス手段は、前記プログラム内において、第１命令及び第２命令のうち、後方に記録されている命令により、前記レジスタの第３領域へのデータの格納を行うように決定するように構成してもよい。この構成によると、後方に記録されている有効な命令のみによりデータを格納することができる。
【０１３８】
ここで、前記アクセス手段は、あらかじめ命令の種類毎に優先度を記憶しており、前記優先度を用いて、第１命令及び第２命令のうち、いずれの命令により、前記レジスタの第３領域へのデータの格納を行うかを決定するように構成してもよい。この構成によると、優先度の高い命令のみによりデータを格納することができる。
ここで、前記解読手段は、命令解読部と命令発行制御部とを含み、前記命令解読部は、１のサイクルにおいて、読み出される命令毎に、命令の解読又は解読の停止の指示により、命令を解読し命令に含まれる少なくともレジスタとレジスタの領域とに関する解読情報を出力し、又は命令の解読を停止し、ここで、前記解読される複数の命令には、少なくとも前記第１命令と前記第２命令とが含まれ、前記解読情報は、少なくとも前記レジスタと前記第１領域と前記第２領域とに関する情報を含み、前記命令発行制御部は、１のサイクルにおいて、読み出される命令毎に、命令を解読する指示を前記命令解読部へ出力することにより、前記命令解読部に対して各命令を解読するように制御し、前記命令解読部による各命令の解読後に、前記レジスタと前記第１領域と前記第２領域とに関する情報を含む解読情報を受け取り、前記第１領域と前記第２領域とが同一領域であるか否かを判断し、同一領域であると判断する場合に、前記第２命令の解読を停止する指示を前記命令解読部へ出力することにより、前記命令解読部に対して前記第２命令の解読を停止するように制御するように構成してもよい。
【０１３９】
この構成によると、２個の命令においてアクセスされるレジスタの各部分が同一である場合に、前記２個の命令間に依存関係がないとみなして、２個の命令のうちの１個の命令の解読を停止するので、２個の命令においてアクセスされるレジスタの各部分が異なる場合には、前記２個の命令を１のサイクルにおいて実行できる。その結果、２個の命令を並列実行できる場合が増え、従来のプロセッサと比較すると、実行サイクル数を削減することができる。
【０１４０】
ここで、前記命令発行制御部は、命令の種類と、前記命令がデータを参照し又はデータを格納するレジスタの領域との組を複数個含む参照格納資源表を含み、前記命令発行制御部は、前記解読情報から、前記参照格納資源表を用いて、各命令に含まれるレジスタの領域に関する情報を取得するように構成してもよい。この構成によると、参照格納資源表から、各命令に含まれるレジスタの領域に関する情報を取得することができる。
【０１４１】
また、本発明は、高級言語により記述されたソースプログラムからオブジェクトコードを生成するコンパイル装置であって、高級言語により記述されたソースプログラムを記憶している記憶手段と、前記記憶手段からソースプログラムを読み出し、読み出したソースプログラムに翻訳処理を施して、レジスタに関する情報を含む１以上の実行形式命令から構成される実行形式プログラムを生成する実行形式コード生成手段と、前記実行形式プログラム中の１以上の実行形式命令を、各実行形式命令に含まれるレジスタの一部分の領域に関する情報に基づいて、並列実行できる複数の実行形式命令が隣接するように並べ換える命令スケジューリング手段と、並べ換えられた各実行形式命令を基にして、オブジェクトコードを生成するオブジェクトコード生成手段とを含む。
【０１４２】
この構成によると、各実行形式命令においてアクセスされるレジスタの部分を単位として、複数の実行形式命令を並べ換えるので、このコンパイル装置により出力されたオブジェクトコードを、対象プロセッサにおいて実行する場合に、複数の実行形式命令において並列実行できる場合が増え、実行サイクル数を削減することができる。このように、このコンパイル装置は、より実行サイクル数の少ない実行コードを生成することができる。
ここで、前記命令スケジューリング手段は、前記１以上の実行形式命令について、各実行形式命令が並べられている順序と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係解析部と、生成された前記依存関係情報に基づいて、並列実行可能な命令の集合を決定し、また、前記実行形式命令を再配置する命令再配置部と、前記決定された集合毎に、並列実行の可否を示す並列実行情報を付加する実行境界付加部とを含むように構成してもよい。
【０１４３】
この構成によると、各実行形式命令においてアクセスされるレジスタの部分を単位として、複数の実行形式命令間の依存関係を解析して、並列実行可能な命令の集合毎に並行実行情報を付加し、複数の実行形式命令を並べ換えて前記実行形式命令を再配置するので、このコンパイル装置により出力されたオブジェクトコードを、対象プロセッサにおいて実行することにより、プロセッサは、前記並行実行情報により容易に並行実行できる命令の集合を検出でき、また複数の実行形式命令において並列実行できる場合が増え、実行サイクル数を削減することができる。このように、このコンパイル装置は、より実行サイクル数の少ない実行コードを生成することができる。
【０１４４】
ここで、前記依存関係解析部は、実行形式命令の種類と、前記実行形式命令がデータを参照し、又はデータを格納するレジスタの一部分の領域との組を複数個含む参照格納資源表と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報を参照格納資源表から取得する資源取得部と、各実行形式命令が並べられている順序と、前記取得したレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係生成部とを含むように構成してもよい。
【０１４５】
この構成によると、参照格納資源表を用いて各実行形式命令間の依存関係を生成することができる。また、高級言語により記述されたソースプログラムを記憶している記憶手段を備えるコンパイル装置により用いられ、前記ソースプログラムからオブジェクトコードを生成するコンパイルプログラムを記録しているコンピュータ読み取り可能な記録媒体であって、前記コンパイルプログラムは、前記記憶手段からソースプログラムを読み出し、読み出したソースプログラムに翻訳処理を施して、レジスタに関する情報を含む１以上の実行形式命令から構成される実行形式プログラムを生成する実行形式コード生成ステップと、前記実行形式プログラム中の１以上の実行形式命令を、各実行形式命令に含まれるレジスタの一部分の領域に関する情報に基づいて、並列実行できる複数の実行形式命令が隣接するように並べ換える命令スケジューリングステップと、並べ換えられた各実行形式命令を基にして、オブジェクトコードを生成するオブジェクトコード生成ステップとを含む。
【０１４６】
ここで、前記命令スケジューリングステップは、前記１以上の実行形式命令について、各実行形式命令が並べられている順序と、各実行形式命令に含まれるレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係解析サブステップと、生成された前記依存関係情報に基づいて、並列実行可能な命令の集合を決定し、また、前記実行形式命令を再配置する命令再配置サブステップと、前記決定された集合毎に、並列実行の可否を示す並列実行情報を付加する実行境界付加サブステップとを含むように構成してもよい。
【０１４７】
ここで、前記コンパイル装置は、実行形式命令の種類と、前記実行形式命令がデータを参照し、又はデータを格納するレジスタの一部分の領域との組を複数個含む参照格納資源表を有し、前記依存関係解析サブステップは、各実行形式命令に含まれるレジスタの一部分の領域に関する情報を参照格納資源表から取得する資源取得サブステップと、各実行形式命令が並べられている順序と、前記取得したレジスタの一部分の領域に関する情報とに基づいて、各実行形式命令間の依存関係を示す依存関係情報を生成する依存関係生成サブステップとを含むように構成してもよい。
【０１４８】
この記録媒体に記録されているコンパイルプログラムをコンピュータにより実行することにより、前記コンパイル装置と同様の効果を奏することは明らかである。
【産業上の利用可能性】
【０１４９】
本発明にかかるプロセッサ、コンパイル装置及びコンパイルプログラムを記録している記録媒体は、プロセッサにおける並列処理において実行サイクル数の削減を図ることができる点において有用である。
【図面の簡単な説明】
【０１５０】
【図１】本発明に係る１の実施の形態としてのプログラム実行システム４００の構成を示すブロック図である。
【図２】図１に示すプログラム実行システム４００を構成する応用装置３００に組み込まれているプロセッサ３１０が実行する命令のデータ構造を示す。
【図３】プロセッサ３１０における命令供給単位と、実行グループの一例を示す。
【図４】プロセッサ３１０のハードウェア構成を示すブロック図である。
【図５】プロセッサ３１０の命令レジスタ２３及びその周辺の構成要素の構成を示すブロック図である。
【図６】プロセッサ３１０の命令発行制御部３１及びその周辺の構成要素の構成を示すブロック図である。
【図７】命令レジスタＡ２３１のユニット（ユニット１）のフォーマット情報が“１”である場合における、プロセッサ３１０の命令発行制御部３１及びその周辺の構成要素の動作を示す。
【図８】命令レジスタＡ２３１のユニット１のフォーマット情報が“０”、命令レジスタＢ２３２のユニット２のフォーマット情報が“１”である場合におけるプロセッサ３１０の命令発行制御部３１及びその周辺の構成要素の動作を示す。
【図９】命令レジスタＡ２３１のユニット１の並列実行境界情報が“１”であり、フォーマット情報が“０”である場合におけるプロセッサ３１０の命令発行制御部３１及びその周辺の構成要素の動作を示す。
【図１０】命令レジスタＡ２３１のユニット１の並列実行境界情報が“０”であり、命令レジスタＢ２３２のユニット２の並列実行境界情報が“１”であり、ユニット１とユニット２とのフォーマット情報が共に“０”である場合おけるプロセッサ３１０の命令発行制御部３１及びその周辺の構成要素の動作を示す。
【図１１】プロセッサ３１０のレジスタファイル４３及びその周辺の構成要素の構成を示すブロック図である。
【図１２】プロセッサ３１０の動作について説明するための、６４ビットデータを扱う処理の一例を示すフローチャートである。
【図１３】図１２に示す処理をプロセッサ３１０に行わせる場合のプログラムの実行形式コードの例と実行順序とを示す。
【図１４】図１２に示す処理を従来のプロセッサに行わせる場合のプログラムの実行形式コードの例と実行順序とを示す。
【図１５】コンパイル装置２００の構成を示すブロック図である。
【図１６】依存グラフを説明するためのプログラムＰ８０を示す。
【図１７】プログラムＰ８０に対応する依存グラフＧ１００を視覚的に表現したものである。
【図１８】参照格納資源テーブルの一例を示す。
【図１９】命令再配置部１１１の処理の詳細を示すフローチャートである。
【図２０】コンパイル装置２００の動作を説明するために一例として用いるプログラムＰ９０を示す。
【図２１】プログラムＰ９０を基にして、依存関係解析部１１０により生成された依存グラフＧ１２０を視覚的に表現したものである。
【図２２】プログラムＰ９０に対応し、コンパイル装置２００により生成された実行形式コードとその実行グループとを示す。
【図２３】従来のコンパイル装置により生成された依存グラフＧ１３０を視覚的に表現したものである。プログラムＰ９０に対応している。
【図２４】従来のコンパイル装置により生成された最終的な実行形式コードであるプログラムＰ１１０と実行の順序とを示す。
【図２５】本発明に係る別の１の実施の形態としてのプロセッサ５００の命令レジスタ１７０及びその周辺の構成要素の構成を示すブロック図である。
【図２６】プロセッサ５００に対応するコンパイル装置によって命令の並べ替えが施されて生成されたプログラムＰ１２０と各サイクルで実行される命令を示す。
【図２７】プログラムＰ１２０を従来のプロセッサにて実行する場合におけるサイクルを示す。
【符号の説明】
【０１５１】
２０ 命令供給発行部
２１ 命令フェッチ部
２２ 命令バッファ
２３ 命令レジスタ
３０ 解読部
３１ 命令発行制御部
３２ 命令デコーダ
３３ 第１命令デコーダ
３４ 第２命令デコーダ
３５ 第３命令デコーダ
４０ 実行部
４１ 実行制御部
４２ ＰＣ部
４３ レジスタファイル
４４ 第１演算部
４５ 第２演算部
４６ 第３演算部
４７ オペランドアクセス部
４８ データバス
４９ データバス
１００ コンパイラ上流部
１０１ アセンブラコード生成部
１０２ 命令スケジューリング部
１０３ オブジェクトコード生成部
１１０ 依存関係解析部
１１１ 命令再配置部
１１２ 実行境界付加部
１２０ 命令集合化部
１３０ ソースコード記憶部
１４０ オブジェクトコード記憶部
１７０ 命令レジスタ
１７１ 命令発行制御部
１７２ 命令デコーダ
１７３ 第１命令デコーダ
１７４ 第２命令デコーダ
１７５ 第３命令デコーダ
２００ コンパイル装置
２１０ コンパイル部
２３１ 命令レジスタＡ
２３２ 命令レジスタＢ
２３３ 命令レジスタＣ
２３４ 命令レジスタＤ
３００ 応用装置
３１０ プロセッサ
４００ プログラム実行システム
５００ プロセッサ
１７０１ 命令レジスタＡ
１７０２ 命令レジスタＢ
１７０３ 命令レジスタＣ
１７０４ 命令レジスタＤ
【図１】
0004709806.tif 000002
【図２】
0004709806.tif 000003
【図３】
0004709806.tif 000004
【図４】
0004709806.tif 000005
【図５】
0004709806.tif 000006
【図６】
0004709806.tif 000007
【図７】
0004709806.tif 000008
【図８】
0004709806.tif 000009
【図９】
0004709806.tif 000010
【図１０】
0004709806.tif 000011
【図１１】
0004709806.tif 000012
【図１２】
0004709806.tif 000013
【図１３】
0004709806.tif 000014
【図１４】
0004709806.tif 000015
【図１５】
0004709806.tif 000016
【図１６】
0004709806.tif 000017
【図１７】
0004709806.tif 000018
【図１８】
0004709806.tif 000019
【図１９】
0004709806.tif 000020
【図２０】
0004709806.tif 000021
【図２１】
0004709806.tif 000022
【図２２】
0004709806.tif 000023
【図２３】
0004709806.tif 000024
【図２４】
0004709806.tif 000025
【図２５】
0004709806.tif 000026
【図２６】
0004709806.tif 000027
【図２７】
0004709806.tif 000028