(57)【特許請求の範囲】
【請求項１】
プロセッサが実行する基本命令を複数の物理命令スロットを含むレジスタに格納し、前記複数の物理命令スロットに格納される基本命令を実行する複数の機能ユニットに供給する命令処理方法において、
前記基本命令を実行できる機能ユニットの種別を特定する第１のステップと、
論理命令スロットポインタと機能ユニットの種別との対応関係を示す命令スロットテーブルを使用して、前記機能ユニットの種別が特定された命令が配置可能であるか否かを判断する第２のステップと、
前記第２のステップにおいて配置可能と判断された場合には、前記複数の機能ユニットに基本命令が配置されたことを示す機能ユニットテーブルを使用して、前記配置可能な基本命令に対応する機能ユニットと同種の機能ユニットであってより若い番号を有する機能ユニットに対して基本命令が割り当てられていることを確認して、前記基本命令を前記複数の物理命令スロットの一つに配置する第３のステップと
を有する命令処理方法。
【請求項２】
前記第２のステップにおいて、
前記機能ユニットの種別が特定された命令が配置可能でないと判断される場合には、前記論理命令スロットポインタをインクリメントし、命令スロットテーブルを使用して前記基本命令が再度配置可能であるか否かを判断すること
を特徴とする請求項１に記載の命令処理方法。
【請求項３】
前記論理命令スロットポインタが最大値を超える場合にはエラーを出力すること
を特徴とする請求項２に記載の命令処理方法。
【請求項４】
前記第３のステップにおいて、
前記基本命令が前記複数の物理命令スロットの一つに配置される場合には、前記機能ユニットテーブルに配置されたことを示すフラグを設定すること
を特徴とする請求項１乃至３の何れか一に記載の命令処理方法。
【請求項５】
前記第３のステップにおいて、
前記基本命令が物理命令スロットに配置された後に、前記論理命令スロットポインタをインクリメントし、前記基本命令が最後の命令であるか否かを確認すること
を特徴とする請求項１乃至４の何れか一に記載の命令処理方法。
【請求項６】
実行する基本命令を複数の物理命令スロットを含むレジスタに格納し、前記複数の物理命令スロットに格納される基本命令を実行する複数の機能ユニットに供給するプロセッサに、
前記基本命令を実行できる機能ユニットの種別を特定する第１のステップと、
論理命令スロットポインタと機能ユニットの種別との対応関係を示す命令スロットテーブルを使用して、前記機能ユニットの種別が特定された命令が配置可能であるか否かを判断する第２のステップと、
前記第２のステップにおいて配置可能と判断された場合には、前記複数の機能ユニットに基本命令が配置されたことを示す機能ユニットテーブルを使用して、前記配置可能な基本命令に対応する機能ユニットと同種の機能ユニットであってより若い番号を有する機能ユニットに対して基本命令が割り当てられていることを確認して、前記基本命令を前記複数の物理命令スロットの一つに配置する第３のステップと
を実行させるためのプログラム。
【請求項７】
前記第２のステップにおいて、前記プロセッサに、
前記機能ユニットの種別が特定された命令が配置可能でないと判断される場合には、前記論理命令スロットポインタをインクリメントさせ、命令スロットテーブルを使用して前記基本命令が再度配置可能であるか否かを判断させること
を特徴とする請求項６に記載のプログラム。
【請求項８】
前記プロセッサに、前記論理命令スロットポインタが最大値を超える場合にはエラーを出力させること
を特徴とする請求項７に記載のプログラム。
【請求項９】
前記第３のステップにおいて、前記プロセッサに、
前記基本命令が前記複数の物理命令スロットの一つに配置される場合には、前記機能ユニットテーブルに配置されたことを示すフラグを設定させること
を特徴とする請求項６乃至８の何れか一に記載のプログラム。
【請求項１０】
前記第３のステップにおいて、前記プロセッサに、
前記基本命令が物理命令スロットに配置された後に、前記論理命令スロットポインタをインクリメントさせ、前記基本命令が最後の命令であるか否かを確認させること
を特徴とする請求項６乃至９の何れか一に記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
近年の計算機システムの処理能力の向上は、中央処理装置（ＣＰＵ: Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）であるプロセッサの処理能力の向上により為されてきた。このプロセッサの処理能力を向上させる手法としては、命令レベル並列度（ＩＬＰ: Ｉｎｓｔｒｕｃｔｉｏｎ Ｌｅｖｅｌ Ｐａｒａｌｌｅｌｉｓｍ）を向上する手法がある。このＩＬＰを向上させる手法としては、スーパスカラ アーキテクチャ（Ｓｕｐｅｒ-ｓｃａｌａｒ ａｒｃｈｉｔｅｃｔｕｒｅ）や、超長命令語アーキテクチャ（ＶＬＩＷ ａｒｃｈｉｔｅｃｔｕｒｅ：Ｖｅｒｙ Ｌｏｎｇ Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ  ａｒｃｈｉｔｅｃｔｕｒｅ）といった方式が知られている。
【０００２】
一方、近年では、携帯電話、プリンタ、デジタルテレビといった機器にも、マイクロプロセッサが組み込まれている。このようにプロセッサが組み込まれた機器は組み込み機器（Ｅｍｂｅｄｄｅｄ Ａｐｐｌｉｃａｔｉｏｎ Ｅｑｕｉｐｍｅｎｔ）と呼ばれ、このように組み込まれたプロセッサは、組み込みプロセッサ（Ｅｍｂｅｄｄｅｄ Ｐｒｏｃｅｓｓｏｒ）と呼ばれている。
【０００３】
近年では、このような組み込み機器に求められる処理能力が、年々高くなってきることから、組み込みプロセッサの処理能力も、年々高いものが求められるようになってきている。従って、組み込みプロセッサの実現方式として、ＩＬＰを向上させる手法を採用しているものもある。
【０００４】
その一方で、組み込み機器の分野では、機器を安価に実現することと、機器の消費電力が低いことが求められている。よって、組み込みプロセッサとして、スーパスカラ・アーキテクチャを採用した場合、回路規模が大きくなり、その消費電力が高くなる。一方、超長命令語アーキテクチャを採用した場合、命令を配置しない命令スロットに対して、無操作命令（ＮＯＰ Ｉｎｓｔｒｕｃｔｉｏｎ：Ｎｏ-ｏｐｅｒａｔｉｏｎ Ｉｎｓｔｒｕｃｔｉｏｎ）を配置する必要がある為、プログラム規模が大きくなり、大容量な記憶装置が必要とされるといった課題があった。
【０００５】
このため、特願平１１―２８１９５７(平成１１年１０月１日出願)に示されるような可変長の超長命令語アーキテクチャを採用した組み込みプロセッサがある。
【０００６】
本発明は、このようなプロセッサ向けの言語処理系において必要とされるＶＬＩＷにおける基本命令の並びを確認する技術に関するものである。
【０００７】
【従来の技術】
図１に、超長命令語アーキテクチャに基づくプロセッサの構成を従来技術として示す。ここでは、このプロセッサをＶＬＩＷプロセッサと呼ぶ。
（構成）
図１に示される従来のプロセッサは、メモリ１０、命令読出部１１、命令レジスタ１２、整数ユニット（ＩＵ：Ｉｎｔｅｇｅｒ Ｕｎｉｔ）であるＩＵ０とＩＵ１、浮動小数点数ユニット（ＦＵ：Ｆｌｏａｔｉｎｇ Ｕｎｉｔ）であるＦＵ０とＦＵ１、分岐ユニット（ＢＵ：Ｂｒａｎｃｈｉｎｇ Ｕｎｉｔ）であるＢＵ０とＢＵ１、汎用レジスタＧＲ（Ｇｅｎｅｒａｌ ｐｕｒｐｏｓｅ Ｒｅｇｉｓｔｅｒ）、浮動小数点レジスタＦＲ（Ｆｌｏａｔｉｎｇ Ｒｅｇｉｓｔｅｒ）、プログラムカウンタＰＣ（Ｐｒｏｇｒａｍ Ｃｏｕｎｔｅｒ）を備える。
【０００８】
命令読出部１１は、メモリ１０上のＰＣが示すアドレスより１ＶＬＩＷ命令分のメモリ領域をメモリから読み出し、命令レジスタ１２に書き込む。また、ＰＣを１ＶＬＩＷ命令分だけインクリメントする。
【０００９】
命令レジスタ１２は、命令読出部１１より書き込まれた命令を保持する。その命令をＩＵ、ＦＵ，ＢＵへ供給する。この供給は次の通りである。
【００１０】
命令スロット０に保持されている基本命令はＩＵ０へ供給される。命令スロット１に保持されている基本命令はＦＵ０へ供給される。命令スロット２に保持されている基本命令はＩＵ１へ供給される。命令スロット３に保持されている基本命令はＦＵ２へ供給される。命令スロット４に保持されている基本命令はＢＵ０へ供給される。命令スロット５に保持されている基本命令はＢＵ１へ供給される。
【００１１】
ＩＵ０、ＩＵ１は、整数演算命令、整数ロード命令、整数ストア命令、浮動小数点数ロード命令、浮動小数点ストア命令、無操作命令を実行する。
【００１２】
整数演算命令が供給された場合、入力オペランドデータを汎用レジスタＧＲから読み出し、整数演算を行なった後、演算結果である出力オペランドデータを汎用レジスタＧＲに書き込む。
【００１３】
整数ロード命令が供給された場合、入力オペランドデータをレジスタから読み出し、実効アドレスを計算した後、メモリ上の実効アドレスに対応する領域を読み出し、その値を汎用レジスタＧＲに書き込む。
【００１４】
整数ストア命令が供給された場合、入力オペランドデータを汎用レジスタＧＲから読み出し、実効アドレスを計算した後、メモリ上の実効アドレスに対応する領域へストアデータを書き込む。
【００１５】
浮動小数点数ロード命令が供給された場合、入力オペランドデータをレジスタから読み出し、実効アドレスを計算した後、メモリ上の実効アドレスに対応する領域を読み出し、その値を浮動小数点レジスタＦＲに書き込む。
【００１６】
浮動小数点数ストア命令が供給された場合、入力オペランドデータを浮動小数点レジスタＦＲから読み出し、実効アドレスを計算した後、メモリ上の実効アドレスに対応する領域へストアデータを書き込む。
【００１７】
無操作命令が供給された場合、何も操作をしない。
【００１８】
ＦＵ０、ＦＵ１は、浮動小数点数演算命令、無操作命令を実行する。浮動小数点数演算命令が供給された場合、入力オペランドデータを浮動小数点レジスタＦＲから読み出し、浮動小数点演算演算を行なった後、演算結果である出力オペランドデータを浮動小数点レジスタＦＲに書き込む。無操作命令が供給された場合、何も操作をしない。
【００１９】
ＢＵ０、ＢＵ１は、無条件分岐命令、条件分岐命令、無操作命令を実行する。
無条件分岐命令が供給された場合、入力オペランドデータをレジスタ（ＧＲ、ＰＣ）から読み出し、それらを用いてアドレス計算を行ない、その結果をプログラムカウンタＰＣに書き込む。条件分岐命令が供給された場合、分岐条件が成立するか否かを判定して、分岐が成立する場合には、入力オペランドデータをレジスタ（ＧＲ、ＰＣ）から読み出し、それらを用いてアドレス計算を行ない、その結果を分岐先の命令のアドレスとして、ＰＣに書き込む。無操作命令が供給された場合、何も操作をしない。
【００２０】
ここでは、ＩＵ、ＦＵ、ＢＵを機能ユニットと呼ぶ。機能ユニットは、命令レジスタから供給された基本命令を実行する。
(動作)
次に、ＶＬＩＷプロセッサの動作について説明する。
【００２１】
図２のようなプログラムが与えられたときの、図１に示されるＶＬＩＷプロセッサの動作について、図３を用いて説明する。なお、図中において、ＡＤＤは加算を行なう整数演算命令、ＦＡＤＤは加算を行う浮動小数点数演算命令であり、ＮＯＰは無操作命令である。
（時刻１）
（Ａ）命令読出部１１では、ＰＣ内の命令アドレスを用いて、図２のようにメモリ１０上に配置されたＶＬＩＷ命令１をメモリ１０から読み出し、命令レジスタ１２に書き込む。このとき命令レジスタ１２には、図３の時刻１のように格納される。
【００２２】
（Ｂ）機能ユニットでは、供給された命令を実行する。命令スロット０のＡＤＤがＩＵ０で実行される。命令スロット１のＦＡＤＤがＦＵ０で実行される。命令スロット２のＡＤＤがＩＵ１で実行される。命令スロット３のＦＡＤＤがＦＵ１で実行される。命令スロット４のＮＯＰがＢＵ０で実行される。命令スロット５のＮＯＰがＢＵ１で実行される。
【００２３】
各機能ユニットにおいて、基本命令の実行が完了することで、ＶＬＩＷ命令１の実行が完了する。
（時刻２）
（Ａ）命令読出部１１では、ＰＣ内の命令アドレスを用いて、図２のようにメモリ１０上に配置されたＶＬＩＷ命令２をメモリ１０から読み出し、命令レジスタ１２に書き込む。このとき命令レジスタ１２には、図３の時刻２のように格納される。
【００２４】
（Ｂ）機能ユニットでは、供給された命令を実行する。命令スロット０のＡＤＤがＩＵ０で実行される。命令スロット１のＮＯＰがＦＵ０で実行される。命令スロット２のＮＯＰがＩＵ１で実行される。命令スロット３のＮＯＰがＦＵ１で実行される。命令スロット４のＮＯＰがＢＵ０で実行される。命令スロット５のＮＯＰがＢＵ１で実行される。
【００２５】
各機能ユニットにおいて、基本命令の実行が完了することで、ＶＬＩＷ命令２の実行が完了する。
（時刻３）
（Ａ）命令読出部１１では、ＰＣ内の命令アドレスを用いて、図２のようにメモリ１０上に配置されたＶＬＩＷ命令３をメモリ１０から読み出し、命令レジスタ１２に書き込む。このとき命令レジスタ１２には、図３の時刻３のように格納される。
【００２６】
（Ｂ）機能ユニットでは、供給された命令を実行する。命令スロット０のＮＯＰがＩＵ０で実行される。命令スロット１のＦＡＤＤがＦＵ０で実行される。命令スロット２のＮＯＰがＩＵ１で実行される。命令スロット３のＮＯＰがＦＵ１で実行される。命令スロット４のＮＯＰがＢＵ０で実行される。命令スロット５のＮＯＰがＢＵ１で実行される。
【００２７】
各機能ユニットにおいて、基本命令の実行が完了することで、ＶＬＩＷ命令３の実行が完了する。
【００２８】
ＶＬＩＷプロセッサでは、命令読出部１１で読み出された１ＶＬＩＷ命令内の命令スロットの位置と、命令実行部で命令スロットが実行される機能ユニットとの関係は、１対１に定まる。すなわち、整数演算命令／整数ロード命令／整数ストア命令／浮動小数点数ロード命令、浮動小数点ストア命令は、整数ユニットであるＩＵ０、ＩＵ１のみで実行されるためにＶＬＩＷ命令内部の命令スロット０か命令スロット２に配置される必要がある。
【００２９】
浮動小数点数演算命令は浮動小数点数ユニットであるＦＵ０、ＦＵ１のみで実行されるために、ＶＬＩＷ命令内部の命令スロット１か命令スロット３に配置される必要がある。
【００３０】
条件分岐命令、無条件分岐命令は、分岐ユニットであるＢＵ０、ＢＵ１のみで実行されるためにＶＬＩＷ命令内部の命令スロット４か命令スロット５に配置される必要がある。そのため、ＶＬＩＷプロセッサの言語処理系では、ＶＬＩＷ命令を構成する基本命令と命令スロット番号の対応を確認する必要がある。このため、ＶＬＩＷプロセッサの言語処理系であるアセンブラ及びコンパイラにＶＬＩＷ確認部を設け、ＶＬＩＷ命令が実行可能な基本命令の並びで構成されているかどうかを確認する。そして、確認できたＶＬＩＷ命令のみをメモリ１０に書き込む。
（アセンブラ）
図４は、ＶＬＩＷプロセッサの言語処理系であるアセンブラの従来例を示すフローチャートである。アセンブラは、図４のフローチャートに示すように、字句解析部Ｓ１１、命令コード生成部Ｓ１２、ＶＬＩＷ確認部Ｓ１３、及びオブジェクト生成部Ｓ１４からなる。
【００３１】
字句解析部Ｓ１１は、アセンブリ言語プログラムのソースコードのファイルから、テキストを前から順に読み込み、読み込んだソースコードのテキストの字句を解析する。命令コード生成部Ｓ１２は、解析した字句を命令コードに変換する。ＶＬＩＷ確認部Ｓ１３は、ＶＬＩＷ命令がプロセッサの命令発行部で、命令実行部に発行可能か否かを確認する。オブジェクト生成部Ｓ１４は、発行可能なＶＬＩＷ命令をオブジェクト形式に変換して、生成したオブジェクトをオブジェクトプログラムファイルに出力する。
【００３２】
図５に、ＶＬＩＷ確認部Ｓ１３のフローチャートを示す。ＶＬＩＷ確認部Ｓ１３は、ＶＬＩＷ命令の命令スロット配置確認部Ｓ１３−１と同一レジスタ書き込み確認部Ｓ１３−２から構成される。
【００３３】
ＶＬＩＷ命令の命令スロット配置確認部Ｓ１３−１では、ＶＬＩＷ命令の各基本命令について配置可能な命令スロットに配置されているか否かを確認する。図６に、ＶＬＩＷ命令の命令スロット配置確認部Ｓ１３−１のフローチャートを示す。
【００３４】
同一レジスタ書き込み確認部Ｓ１３−２では、１つのＶＬＩＷ命令内の基本命令が、同時に同一レジスタに書き込むか否かを確認する。ＶＬＩＷ命令の命令スロット配置確認部Ｓ１３−１において、注目するＶＬＩＷ命令の基本命令が発行可能か否かを判定するアルゴリズムは、以下のとおりである。
【００３５】
まず、ステップＳ２２で、注目するＶＬＩＷ命令より、基本命令を取り出す。
次に、ステップＳ２３で、取り出した基本命令を配置している命令スロットを求める。次に、ステップＳ２４で、配置可能命令スロットテーブルから取り出した基本命令を配置可能な命令スロットを求める。そして、ステップＳ２５で、取り出した基本命令の命令スロットが配置可能な命令スロットとなっているか否かを確認する。上記ステップＳ２２−Ｓ２７を繰り返して、全ての命令スロットを処理する（ステップＳ２１）。
【００３６】
図７に、ステップＳ２４で参照される配置可能命令スロットテーブルの構成を示す。配置可能命令スロットテーブルとは、ＶＬＩＷプロセッサが有する各基本命令に対して、各命令スロット配置可能な否かの情報を保持する。
（コンパイラ）
図７は、ＶＬＩＷプロセッサの言語処理系であるコンパイラの従来例を示すフローチャートである。図示するフローチャートに示すように、コンパイラは字句解析部Ｓ３１、構文解析部Ｓ３２、意味解析部Ｓ３３、ＶＬＩＷ形成部Ｓ３４、及びアセンブリ言語記述出力部Ｓ３５からなる。
【００３７】
字句解析部Ｓ３１は、高級言語プログラムのソースコードのファイルから、テキストを前から順に読み込み、読み込んだソースコードのテキストの字句を解析する。構文解析部Ｓ３２は、プログラムの論理的構造の解明や構文規則との対応づけを行なう。意味解析部Ｓ３３では、各構成要素の意味の明確化と中間語への変換を行なう。ＶＬＩＷ形成部Ｓ３４は中間語をＶＬＩＷ命令に変換するもので、コンパイラのＶＬＩＷ確認部として機能する。アセンブリ言語記述出力部Ｓ３５は、ＶＬＩＷ命令のアセンブリ言語記述を出力する。
【００３８】
図９は、コンパイラのＶＬＩＷ形成部Ｓ３４のフローチャートを示す。ＶＬＩＷ形成部３４のＶＬＩＷ確認アルゴリズムは、以下のとおりである。まず、ステップＳ４１で、中間語表現から１基本命令を取り出せるかどうか判定する。可能であればステップＳ４２に行き、不可能であれば、Ｓ４８に行く。ステップＳ４２で、中間言語から１基本命令を取り出す。ステップＳ４３で、基本命令を命令配置テーブルに配置できるか確認する。可能であれば、ステップＳ４５に行き、不可能であれば、ステップＳ４６に行く。
【００３９】
ステップＳ４５で、命令配置テーブルに基本命令を配置し、ステップＳ４１に戻る。ステップＳ４４でＮＯの場合、ステップＳ４６で命令配置テーブルに配置された基本命令のセットをＶＬＩＷ命令として出力する。ステップｓ４７で、命令配置テーブルのすべての配置済みエントリを未配置状態にし、ステップＳ４３に戻る。
【００４０】
ステップＳ４１がＮＯの場合、命令配置テーブルに配置された基本命令のセットをＶＬＩＷ命令として出力して終了する（ステップＳ４８）。
【００４１】
【発明が解決しようとする課題】
前述した特願平１１―２８１９５７(平成１１年１０月１日出願)に示されるような可変長の超長命令語アーキテクチャを採用した組み込みプロセッサでは、ＶＬＩＷ命令の構成単位となる命令スロットと機能ユニットの対応関係が、１対多、あるいは、多対多となる。よって、言語処理系では、ＶＬＩＷ命令における（基本）命令の組み合せがプロセッサにおいて実行可能な組み合せとなっているか否かを確認する必要がある。
【００４２】
また、組み込み機器の分野は、その適用分野が広範囲であることから、処理性能が比較的低いものから処理性能が非常に高いものまで、要求される処理性能の幅が広い。これに対して、先の特許出願に示されるような可変長の超長命令語アーキテクチャを採用し、命令発行幅が異なるプロセッサとして実現することが考えられる。これにより、処理性能が比較的低いものには、命令発行幅が小さいプロセッサを、処理性能が非常に高いものには、命令発行幅が大きいプロセッサを適用することが可能となる。しかしながら、各々のプロセッサ向けに、言語処理系を個別に用意するのは不経済である。
【００４３】
従って、本発明は、このような可変長の超長命令語アーキテクチャに基づいて命令発行幅が異なるプロセッサの言語処理系に適した命令処理方法及びこの処理をコンピュータに実行させるためのプログラムを提供することを目的とする。
【００４４】
【課題を解決するための手段】
本発明は、プロセッサが実行する基本命令を複数の物理命令スロットを含むレジスタに格納し、前記複数の物理命令スロットに格納される基本命令を実行する複数の機能ユニットに供給する命令処理方法において、前記基本命令を実行できる機能ユニットの種別を特定する第１のステップと、論理命令スロットポインタと機能ユニットの種別との対応関係を示す命令スロットテーブルを使用して、前記機能ユニットの種別が特定された命令が配置可能であるか否かを判断する第２のステップと、前記第２のステップにおいて配置可能と判断された場合には、前記複数の機能ユニットに基本命令が配置されたことを示す機能ユニットテーブルを使用して、前記配置可能な基本命令に対応する機能ユニットと同種の機能ユニットであってより若い番号を有する機能ユニットに対して基本命令が割り当てられていることを確認して、前記基本命令を前記複数の物理命令スロットの一つに配置する第３のステップとを有する命令処理方法である。
【００４７】
ここで、ＶＬＩＷ命令内の基本命令の並びとして、図１１に示す２２通りのＶＬＩＷ命令を実行可能であるとする。図１１において、記号の意味は次の通りである。Ｉ０は、ＩＵ０にて実行される基本命令が配置されることを意味する。Ｉ１は、ＩＵ１にて実行される基本命令が配置されることを意味する。Ｆ０は、ＦＵ０にて実行される基本命令が配置されることを意味する。Ｆ１は、ＦＵ１にて実行される基本命令が配置されることを意味する。Ｂ０は、ＢＵ０にて実行される基本命令が配置されることを意味する。Ｂ１は、ＢＵ１にて実行される基本命令が配置されることを意味する。空欄は、基本命令を配置しないことを意味する。
【００４８】
命令読出部２１は、メモリ２０上のプログラムカウンタＰＣが示すアドレスより１ＶＬＩＷ命令分のメモリ領域をメモリ２０から読み出し、命令レジスタ２２に書き込む。また、プログラムカウンタＰＣを１ＶＬＩＷ命令分だけインクリメントする。命令レジスタ２２は、命令読出部２１より書き込まれた命令を保持する。命令発行部２３は、命令レジスタ２２から読み込んだ命令を対応する機能ユニットであるＩＵ、ＦＵ、ＢＵへ供給する。最大４命令を同時実行可能で、６つの機能ユニットうち最大４つの機能ユニットに命令を供給する。各命令スロットに保持されている基本命令は以下のように機能ユニットに供給される。
【００４９】
命令スロット０に保持されている基本命令はＩＵ０、ＦＵ０、ＢＵ０へ供給可能である。命令スロット１に保持されている基本命令はＦＵ０、ＩＵ１、ＦＵ１、ＢＵ０、ＢＵ１へ供給可能である。命令スロット２に保持されている基本命令はＩＵ１、ＦＵ１、ＢＵ０、ＢＵ１へ供給可能である。命令スロット３に保持されている基本命令はＦＵ１、ＢＵ０、ＢＵ１へ供給可能である。また、このプロセッサで許されているＶＬＩＷ命令内の基本命令の並びは、図１１の通りとする。
【００５０】
ＩＵ０、ＩＵ１は、整数演算命令、整数ロード命令、整数ストア命令、浮動小数点数ロード命令、浮動小数点ストア命令を実行する。
【００５１】
整数演算命令が供給された場合、入力オペランドデータを汎用レジスタＧＲから読み出し、整数演算を行なった後、演算結果である出力オペランドデータを汎用レジスタＧＲに書き込む。
【００５２】
整数ロード命令が供給された場合、入力オペランドデータをレジスタから読み出し、実効アドレスを計算した後、メモリ２０上の実効アドレスに対応する領域を読み出し、その値を汎用レジスタＧＲに書き込む。
【００５３】
整数ストア命令が供給された場合、入力オペランドデータを汎用レジスタＧＲから読み出し、実効アドレスを計算した後、メモリ２０上の実効アドレスに対応する領域へストアデータを書き込む。
【００５４】
浮動小数点数ロード命令が供給された場合、入力オペランドデータをレジスタから読み出し、実効アドレスを計算した後、メモリ２０上の実効アドレスに対応する領域を読み出し、その値を浮動小数点レジスタＦＲに書き込む。
【００５５】
浮動小数点数ストア命令が供給された場合、入力オペランドデータを浮動小数点レジスタＦＲから読み出し、実効アドレスを計算した後、メモリ２０上の実効アドレスに対応する領域へストアデータを書き込む。
【００５６】
ＦＵ０、ＦＵ１は、浮動小数点数演算命令を実行する。
【００５７】
浮動小数点数演算命令が供給された場合、入力オペランドデータを浮動小数点レジスタＦＲから読み出し、浮動小数点演算演算を行なった後、演算結果である出力オペランドデータを浮動小数点レジスタＦＲに書き込む。
【００５８】
ＢＵ０、ＢＵ１は、無条件分岐命令、条件分岐命令を実行する。無条件分岐命令が供給された場合、入力オペランドデータをレジスタＧＲ、ＰＣから読み出し、それらを用いてアドレス計算を行ない、その結果をプログラムカウンタＰＣに書き込む。
【００５９】
条件分岐命令が供給された場合、分岐条件が成立するか否かを判定して、分岐が成立する場合には、入力オペランドデータをレジスタＧＲ、ＰＣから読み出し、それらを用いてアドレス計算を行ない、その結果を分岐先の命令のアドレスとして、プログラムカウンタＰＣに書き込む。
【００６０】
前述したように、ＩＵ、ＦＵ、ＢＵを機能ユニットである。機能ユニットは、命令レジスタから供給された基本命令を実行する。また、可変長ＶＬＩＷプロセッサでは、ＶＬＩＷ命令は図１２のようにメモリ２０上に配置される。ＶＬＩＷ命令を構成する各命令にはパッキングフラグが設けられており、ＶＬＩＷ命令中の最後の命令のパッキングフラグはＯＮとなっている。パッキングフラグを用いることで、ＶＬＩＷ命令の終り（次のＶＬＩＷ命令の始まり）を特定することができる。
（可変長ＶＬＩＷプロセッサの第１の構成例の動作）
次に、第１の構成例の可変長ＶＬＩＷプロセッサの動作を説明する。
【００６１】
図１２のようなプログラムが与えられたときの図１０に示されるＶＬＩＷプロセッサの動作について、図１３を用いて説明する。なお、図中において、ＡＤＤは加算を行なう整数演算命令、ＦＡＤＤは加算を行う浮動小数点数演算命令で。
（時刻１）
（Ａ）命令読出部２１は、プログラムカウンタＰＣ内の命令アドレスを用いて、図１２のようにメモリ上に配置されたＶＬＩＷ命令１をメモリ２０から読み出し、命令レジスタ２２に書き込む。このとき命令レジスタには図１３の時刻１のように格納される。
【００６２】
（Ｂ）機能ユニットは、供給された命令を次の通り実行する。命令スロット０のＡＤＤがＩＵ０で実行される。命令スロット１のＦＡＤＤがＦＵ０で実行される。命令スロット２のＡＤＤがＩＵ１で実行される。命令スロット３のＦＡＤＤがＦＵ１で実行される。ＢＵ０、ＢＵ１は基本命令が供給されないため動作しない。
【００６３】
ＩＵ０、ＩＵ１、ＦＵ０、ＦＵ１において、基本命令の実行が完了することで、ＶＬＩＷ命令１の実行が完了する。
（時刻２）
（Ａ）命令読出部２１は、プログラムカウンタＰＣ内の命令アドレスを用いて、図１２のようにメモリ２０上に配置されたＶＬＩＷ命令２をメモリから読み出し、命令レジスタ２２に書き込む。このとき命令レジスタ２２には図１３の時刻２のように格納される。
【００６４】
（Ｂ）機能ユニットは、供給された命令を次の通り実行する。命令スロット０のＡＤＤがＩＵ０で実行される。ＩＵ１、ＦＵ０、ＦＵ１、ＢＵ０、ＢＵ１は基本命令が供給されないため動作しない。
【００６５】
ＩＵ０において、基本命令の実行が完了することで、ＶＬＩＷ命令２の実行が完了する。
（時刻３）
（Ａ）命令読出部２１は、プログラムカウンタＰＣ内の命令アドレスを用いて、図１２のようにメモリ上に配置されたＶＬＩＷ命令３をメモリから読み出し、命令レジスタ２２に書き込む。このとき命令レジスタ２２には図１３のように格納される。
【００６６】
（Ｂ）機能ユニットは、供給された命令を次の通り実行する。命令スロット０のＦＡＤＤがＦＵ０で実行される。ＩＵ０、ＩＵ１、ＦＵ１、ＢＵ０、ＢＵ１は基本命令が供給されないため動作しない。
【００６７】
ＦＵ０において、基本命令の実行が完了することで、ＶＬＩＷ命令３の実行が完了する。
【００６８】
ここで、ＶＬＩＷ命令における基本命令の並びは、可変長ＶＬＩＷプロセッサにおいて実行可能でなければならない。従って、可変長ＶＬＩＷ命令内を構成する基本命令の並びの条件を満たすか否かをアセンブラ及びコンパイラで判断する必要がある。
（可変長ＶＬＩＷプロセッサのアセンブラ）
図１４に、可変長ＶＬＩＷプロセッサのアセンブラのフローチャートを示す。
ＶＬＩＷプロセッサのアセンブラの構造と、可変長ＶＬＩＷプロセッサのアセンブラの構造との違いは、可変長ＶＬＩＷ確認部（図１４では参照番号Ｓ１３Ａで示す）である。
【００６９】
図１５に、可変長ＶＬＩＷ確認部のフローチャートを示す。図５に示す従来技術のＶＬＩＷプロセッサのアセンブラとの違いは、図１５に示すアセンブラが可変長ＶＬＩＷ命令内基本命令並び確認部１３Ａ−１を有する点である。可変長ＶＬＩＷ命令内基本命令並び確認部１３Ａ−１は、基本命令の並びは発行可能かどうかを確認する。図１５には、１ＶＬＩＷ命令内で、命令の組み合わせ制限に違反していないかどうかを確認する可変長ＶＬＩＷ命令の命令組み合せ確認部１３Ａ−２が設けられているが、これは必要に応じて任意に設けられるものである。
つまり、命令組み合せ確認部１３Ａ−２は省略しても良い。図１５に示す同一レジスタ書き込み確認部Ｓ１３Ａ−３は、図５に示す同一レジスタ書き込み確認部Ｓ１３−２と同じである。すなわち、同一レジスタ書き込み確認部Ｓ１３Ａ−３は、１ＶＬＩＷ命令内で、同一レジスタへの書き込み制御に違反していないかどうかを確認する。
【００７０】
なお、可変長ＶＬＩＷ確認部Ｓ１３Ａの可変長ＶＬＩＷ命令を構成する基本命令の並びを確認するアルゴリズムについては、後述する。
（可変長ＶＬＩＷプロセッサのコンパイラ）
図１６に、可変長ＶＬＩＷプロセッサのコンパイラのフローチャートを示す。
、また、図１７に、コンパイラのＶＬＩＷ形成部Ｓ３４Ａの基本命令を命令配置テーブルに配置できるか確認する部分のフローチャートを示す。図８に示すＶＬＩＷプロセッサのコンパイラの構造と、図１６に示す可変長ＶＬＩＷプロセッサのコンパイラの構造との違いは、ＶＬＩＷ形成部３４(図８)とＶＬＩＷ形成部Ｓ３４Ａ(図１６)とは、基本命令を命令配置テーブルに配置できるかを確認するためのアルゴリズムが相違する。より特定すれば、図１０のステップＳ４３のアルゴリズムと図１７のステップＳ４３Ａのアルゴリズムとは異なる。そして、ＶＬＩＷ形成部３４Ａのアルゴリズムは、図１４の可変長ＶＬＩＷ確認部Ｓ１３Ａ、より特定すれば可変長ＶＬＩＷ命令内基本命令並び確認部Ｓ１３Ａ−１と同じアルゴリズムである。なお、このアルゴリズムについては後述する。
（可変長ＶＬＩＷ命令の基本命令の並びを確認するアルゴリズム）
次に、可変長ＶＬＩＷ命令を構成する基本命令の並びを確認するアルゴリズムを説明する。
【００７１】
このアルゴリズムは可変長ＶＬＩＷ確認部Ｓ１３Ａ（図１４）の可変長ＶＬＩＷ命令内基本命令並び確認部Ｓ１３Ａ−１及びＶＬＩＷ形成部Ｓ３４Ａ（図１６）で用いられるもので、大別して以下の４通りある。
【００７２】
第１のアルゴリズムは、可変長ＶＬＩＷプロセッサの言語処理系において、可変長ＶＬＩＷ命令を構成する基本命令を実行できる機能ユニットの種別を特定する第１のステップと、基本命令を論理命令スロットに配置可能かどうかを判断する第２のステップと、配置可能と判断された基本命令と論理命令スロットに配置される他の基本命令との関係を考慮して当該配置可能と判断された基本命令をプロセッサの命令スロットに配置する第３のステップとを有する。第１のアルゴリズムは例えば、後述するように、命令種別テーブル、命令スロットテーブル、命令配置テーブル及び機能ユニットテーブルを用いる。第１のステップは、命令種別テーブルを参照して基本命令の命令オペコードから命令を実行可能な機能ユニットの種別を得る。第２のステップは、命令スロットテーブルを参照して、基本命令を論理命令スロットに配置可能かどうかを判断する。第３のステップは、命令配置テーブル及び機能ユニットテーブルを用いて命令を配置する。このようにして配置された基本命令は、ＶＬＩＷ命令内に正しい並びで配置されたものである。
【００７３】
第２のアルゴリズムは第１のアルゴリズムを変形したものであり、可変長ＶＬＩＷプロセッサの言語処理系において、可変長ＶＬＩＷ命令を構成する基本命令の命令カテゴリを特定する第１のステップと、当該命令カテゴリから実行可能な機能ユニットの種別を特定する第２のステップと、基本命令を論理命令スロットに配置可能かどうかを判断する第３のステップと、配置可能と判断された基本命令と論理命令スロットに配置される他の基本命令との関係を考慮して当該配置可能と判断された基本命令をプロセッサの命令スロットに配置する配置する第４のステップとを有する。第２のアルゴリズムは例えば、後述するように、命令種別テーブル、命令スロットテーブル、命令配置テーブル、機能ユニットテーブルに加え命令カテゴリテーブルを有する。第１のステップは、命令カテゴリテーブルを参照して、可変長ＶＬＩＷ命令を構成する基本命令の命令カテゴリを特定する。第２のステップは、命令種別テーブルを参照して、命令カテゴリから実行可能な機能ユニットの種別を特定する。第３のステップは、命令スロットテーブルを参照して、基本命令を論理命令スロットに配置可能かどうかを判断する。第４のステップは、命令配置テーブル及び機能ユニットテーブルを用いて命令を配置する。このようにして配置された基本命令は、ＶＬＩＷ命令内に正しい並びで配置されたものである。
【００７４】
第３のアルゴリズムは、可変長ＶＬＩＷプロセッサの言語処理系において、可変長ＶＬＩＷ命令を構成する基本命令を実行できる機能ユニットの種別を特定する第１のステップと、基本命令を論理命令スロットに配置可能かどうかを判断する第２のステップと、配置可能と判断された基本命令をプロセッサの命令スロットに配置する第３のステップとを有する。第３のアルゴリズムは、第１のアルゴリズムの第３のステップで行なっている論理命令スロットに配置される他の基本命令との関係を考慮することをしない。つまり、機能ユニットの同一種別内においてはどの機能ユニットにユニットに配置されていても良いという配置の条件がある場合に好適である。後述するように、第３のアルゴリズムは例えば、命令種別テーブル、命令スロットテーブル、命令配置テーブルを用いる。第１のステップは、命令種別テーブルを参照して基本命令の命令オペコードから命令を実行可能な機能ユニットの種別を得る。第２のステップは、命令スロットテーブルを参照して、基本命令を論理命令スロットに配置可能かどうかを判断する。第３のステップは、命令配置テーブル及び機能ユニットテーブルを用いて命令を配置する。このようにして配置された基本命令は、ＶＬＩＷ命令内に正しい並びで配置されたものである。
【００７５】
第４のアルゴリズムは第３のアルゴリズムを変形したものであり、可変長ＶＬＩＷプロセッサの言語処理系において、可変長ＶＬＩＷ命令を構成する基本命令の命令カテゴリを特定する第１のステップと、当該命令カテゴリから実行可能な機能ユニットの種別を特定する第２のステップと、基本命令を論理命令スロットに配置可能かどうかを判断する第３のステップと、配置可能と判断された基本命令をプロセッサの命令スロットに配置する配置する第４のステップとを有する。
第４のアルゴリズムは例えば、後述するように、命令種別テーブル、命令スロットテーブル、命令配置テーブル、機能ユニットテーブルに加え命令カテゴリテーブルを有する。第１のステップは、命令カテゴリテーブルを参照して、可変長ＶＬＩＷ命令を構成する基本命令の命令カテゴリを特定する。第２のステップは、命令種別テーブルを参照して、命令カテゴリから実行可能な機能ユニットの種別を特定する。第３のステップは、命令スロットテーブルを参照して、基本命令を論理命令スロットに配置可能かどうかを判断する。第４のステップは、命令配置テーブル及び機能ユニットテーブルを用いて命令を配置する。このようにして配置された基本命令は、ＶＬＩＷ命令内に正しい並びで配置されたものである。
【００７６】
以下、第１〜第４のアルゴリズムを順に説明する。
（第１の基本命令並び確認アルゴリズム）
第１の基本命令並び確認アルゴリズムは命令種別テーブル、命令スロットテーブル、命令配置テーブル、機能ユニットテーブルを用い、更に論理命令スロットポインタと物理命令スロットポインタを用いる。換言すれば、第１の基本命令並び確認アルゴリズムは命令種別テーブル、命令スロットテーブル、命令配置テーブル、機能ユニットテーブル、論理命令スロットポインタ、及び物理命令スロットポインタを含むデータ構造を用いている。
【００７７】
図１８に、命令種別テーブルの一例を示す。命令種別テーブルは基本命令に対して、それを実行可能な機能ユニット種別の情報を保持する。
【００７８】
図１９に、命令スロットテーブルの一例を示す。命令スロットテーブルは、論理命令スロットに対して、配置可能な機能ユニット種別を保持する。ここで論理命令スロットとは、各機能ユニットに対応して命令スロットが存在すると考えた仮想的な命令スロットを意味する。
【００７９】
図２０に、命令配置テーブルの一例を示す。命令配置テーブルは、各命令スロットに対して、基本命令を配置しているか否かの情報を保持する。ここで物理命令スロットとはＶＬＩＷ命令内の各命令スロットを意味する。
【００８０】
図２１に、機能ユニットテーブルの一例を示す。機能ユニットテーブルは、各機能ユニットに対して、すでに配置されて発行される命令があるか否かを示す情報を保持する。
【００８１】
論理命令スロットポインタは、命令スロットテーブルの論理命令スロット番号を保持する。物理命令スロットポインタは、命令配置テーブルにおいて配置済みの基本命令数を保持する。
【００８２】
図２２は、第１の基本命令並び確認アルゴリズムを示すフローチャートである。まず、ステップＳ５０で物理命令スロットポインタを０に、論理命令スロットポインタを０に初期化するステップＳ５２は、命令を実行可能な機能ユニットの種別を得るステップである。配置する命令を命令列から命令情報を取り出し、その命令情報の命令オペコードを用いて命令種別テーブルを参照して、命令を実行可能な機能ユニット種別を得る。
【００８３】
ステップＳ６０は、配置可能な最も若い論理命令スロットを求めるステップで、ステップＳ６１〜Ｓ６３を含む。ステップＳ６１は、論理命令スロットポインタが指す命令スロットテーブルの論理命令スロットの配置可能な機能ユニット欄を参照して、命令を実行可能な機能ユニット種別に対応する欄に○があれば命令は配置可能であり（Ｙｅｓ）、そうでなければ命令を配置不可とする（Ｎｏ）。
ステップＳ６１で命令が配置不可と判断した場合（Ｎｏ）、ステップＳ６２で論理命令スロットポインタをインクリメントする。論理命令スロットポインタが最大値を超えたら（Ｎｏ）、エラー終了する。論理命令スロットポインタが最大値を超えたていない場合には（Ｙｅｓ）、次の論理命令スロットに対してステップＳ６１〜Ｓ６３を繰り返す。
【００８４】
ステップＳ７０は、命令を配置するステップで、ステップＳ７１〜Ｓ７６を含む。ステップＳ６１の判断結果がＹｅｓの場合、ステップＳ７１で論理スロットが発行可能な機能ユニットの番号より若い機能ユニットに命令が配置されていることを、機能ユニットテーブルを参照して確認する。配置されていなければエラー終了する。
【００８５】
ステップＳ７１は、論理スロットが発行可能な機能ユニットの番号より若い機能ユニットに命令が配置されていることを条件（制約）とする場合に対応するものである。この条件とは例えば、機能ユニットＩＵ０に命令が配置されていなければ、機能ユニットＩＵ１に命令を配置してはならないというものである。ステップＳ７１で命令が配置可能と判断された場合、ステップＳ７２で命令情報を命令配置テーブルに配置する。更に、機能ユニットに命令を配置したこと示すフラグを機能ユニットテーブルに設定する。ステップＳ７３で、論理命令スロットポインタをインクリメントする。命令のパッキングフラグが立っているならばＶＬＩＷ命令の最後の基本命令なので（ステップＳ７４の判断はＹｅｓ）、ステップＳ７５で正常終了する。つまり、ステップＳ７５で命令スロット配置可とする。
ステップＳ７４の判断結果がＮｏの場合には、ステップＳ７６で物理命令スロットポインタをインクリメントする。
【００８６】
以上説明したステップＳ５２からＳ７０までの処理を、物理命令スロットポインタが最大値を超えない範囲で繰り返す（ステップＳ５１とＳ５４）。超えてしまったら、ステップＳ５５でＶＬＩＷ命令内の命令数オーバーとして処理を終了する。
【００８７】
このようにして第１の基本命令並び確認アルゴリズムを実行することにより、メモリ２０に格納されるＶＬＩＷ命令は可変長ＶＬＩＷプロセッサが実行することができる実行可能な機能ユニット種別を有した組み合わせとなっている。
【００８８】
以上説明した第１の基本命令並び確認アルゴリズムを前述した図１３に示す可変長ＶＬＩＷプロセッサに適用した場合の命令種別テーブルと、命令スロットテーブルをそれぞれ図２３及び図２４に示す。これらの図は、図２１に示す機能ユニットテーブルを統合した状態のテーブルを示している。
（第２の基本命令並び確認アルゴリズム）
第２の基本命令並び確認アルゴリズムは、第１の基本命令並び確認アルゴリズムで確認できる実行可能な機能ユニット種別に加え、命令カテゴリに応じた実行可能な機能ユニット番号を確認できることを特徴とする。
【００８９】
第２の基本命令並び確認アルゴリズムで用いるデータ構造は、命令種別テーブル、命令カテゴリテーブル、命令スロットテーブル、命令配置テーブル、機能ユニットテーブル、論理命令スロットポインタ、及び物理命令スロットポインタである。第１の基本命令並び確認アルゴリズムで用いるテーブルに加え、命令カテゴリテーブルを有する。
【００９０】
命令種別テーブルは、基本命令に対する命令カテゴリを保持する。図２５に命令種別テーブルの一例を示す。ここで命令カテゴリとは、命令の分類を表すものである。Ｉ_１は、整数カテゴリ１でありADD命令を含む。Ｉ_２は整数カテゴリ２でありＤＩＶ命令を含む。Ｆ_１は浮動小数点数カテゴリ１でありFADD命令を含む。Ｂ_１は、分岐カテゴリ１でありBRA命令を含む。
【００９１】
命令カテゴリテーブルは、基本命令に対して、配置可能な機能ユニット種別と機能ユニット種別毎の機能ユニット番号のビットパターンを保持する。図２６に、命令カテゴリテーブルの一例を示す。整数カテゴリＩ_２はプロセッサ上の制約から、機能ユニット番号２の機能ユニットでは処理できない。
【００９２】
命令スロットテーブルは、論理命令スロットに対する配置可能な機能ユニット種別と機能ユニット番号のビットパターンを保持する。図２７に、命令スロットテーブルの一例を示す。ここで論理命令スロットとは、各機能ユニットに対応して命令スロットが存在すると考えた仮想的な命令スロットを意味する。
【００９３】
命令配置テーブルは、各命令スロットに対するＶＬＩＷ命令を構成する基本命令の情報を保持するもので、図２０に示す第１の基本命令並び確認アルゴリズムで用いられる命令配置テーブルと同一構成である。
【００９４】
機能ユニットテーブルは、各機能ユニットに配置されている命令があるか否かを示す情報を保持するもので、図２１に示す第１の基本命令並び確認アルゴリズムで用いられる機能ユニットテーブルと同一構成である。
【００９５】
論理命令スロットポインタは、命令スロットテーブルの論理命令スロット番号を保持する。物理命令スロットポインタは、命令配置テーブルにおいて配置済みの基本命令数を保持する。
【００９６】
図２８は、第２の基本命令並び確認アルゴリズムを示すフローチャートである。前述した図２２の第１の基本命令並び確認アルゴリズムとの相違点として、図２２のステップＳ５２がステップＳ５２Ａに代わり、ステップＳ６０がＳ６０Ａに代わり、ステップＳ５７が新たに追加されている。
【００９７】
ステップＳ５０で、物理命令スロットポインタを０に、論理命令スロットポインタを０に初期化する。
【００９８】
ステップＳ５２Ａは、命令の命令カテゴリを得るステップである。配置する命令を命令列から命令情報を取り出し、その命令情報の命令オペコードを用いて命令カテゴリテーブルを参照して、命令カテゴリを得る。
【００９９】
ステップＳ５７は、命令カテゴリから実行可能な機能ユニットを得るステップである。ステップＳ５１で得た命令カテゴリを用いて命令種別テーブルを参照して、命令を実行可能な機能ユニット種別と機能ユニット種別毎の機能ユニット番号のビットパターンを得る。
【０１００】
ステップＳ６０Ａは、配置可能な最も若い論理命令スロットを求めるステップである。論理命令スロットポインタがさす命令スロットテーブルの論理命令スロットの配置可能な機能ユニット欄を参照して、命令を実行可能な機能ユニット種別に対応する欄に○があり、かつ、機能ユニット種別毎の機能ユニット番号のビットパターンのビット和をとり０でなければ命令を配置可能と判断し、そうでなければ、命令を配置不可とする。ステップＳ６１Ａで命令が配置不可と判断されれば、ステップＳ６２で論理命令スロットポインタをインクリメントする。命令が配置可能であれば、ステップＳ７１に行く。ステップＳ６３で論理命令スロットポインタが最大値を超えたら、エラー終了する。次の論理命令スロットに対してステップＳ６１Ａ、Ｓ６２、Ｓ６３を繰り返す。
【０１０１】
ステップＳ７０は命令を配置するステップである。ステップＳ７１で、論理スロットが発行可能な機能ユニットの番号より若い機能ユニットに命令が配置されていることを、機能ユニットテーブルを参照して確認して、配置されていなければエラー終了する。ステップＳ７１の判断結果がＹｅｓの場合には命令が配置可能であるので、命令情報を命令配置テーブルに配置する。更に、機能ユニットに命令を配置したこと示すフラグを機能ユニットテーブルに設定する。次に、ステップＳ７２で論理命令スロットポインタをインクリメントする。ステップＳ７４で、命令のパッキングフラグが立っているならばこの命令はＶＬＩＷ命令の最後の命令なので、ステップＳ７５で正常終了する。最後の命令でないと判断された場合には、ステップＳ７６で物理命令スロットポインタをインクリメントする。
【０１０２】
以上説明したステップＳ５２からＳ７０までの処理を、物理命令スロットポインタが最大値を超えない範囲で繰り返す（ステップＳ５１とＳ５４）。超えてしまったら、ステップＳ５５でＶＬＩＷ命令内の命令数オーバーとして処理を終了する。
【０１０３】
このようにして第２の基本命令並び確認アルゴリズムを実行することにより、メモリ２０に格納されるＶＬＩＷ命令は、可変長ＶＬＩＷプロセッサが実行することができる実行可能な機能ユニット種別に加え、命令カテゴリに応じた実行可能な機能ユニット番号を有した組み合わせとなっている。
（第３の基本命令並び確認アルゴリズム）
第３の基本命令並び確認アルゴリズムは、第１の基本命令並び確認アルゴリズムで用いていた機能ユニットテーブルを持たないデータ構造を有する。つまり、第３の基本命令並び確認アルゴリズムで用いるデータ構造は、命令種別テーブル、命令スロットテーブル、命令配置テーブル、論理命令スロットポインタ、及び物理命令スロットポインタである。
【０１０４】
図２９は、第２の基本命令並び確認アルゴリズムを示すフローチャートである。前述した図２２の第１の基本命令並び確認アルゴリズムとの相違点として、図２２のステップ７０に代えてステップ７０Ａが用いられている。ステップＳ７０Ａは、ステップ７０からステップＳ７１を取り除いた構成である。つまり、第３の基本命令並び確認アルゴリズムは、論理スロットが発行可能な機能ユニットの番号より若い機能ユニットに命令が配置されていることを、機能ユニットテーブルを参照して確認する処理をしない。従って、例えば図１１に示す基本命令の並びにおいて命令スロット１に配置されるＩ１のみで構成されるＶＬＩＷ命令も正常な基本命令の並びであると判断する。
【０１０５】
このように第３の基本命令並び確認アルゴリズムは、スッテプＳ７１の制約を持たない基本命令の並びを確認するのに適している。
（第４の基本命令並び確認アルゴリズム）
第４の基本命令並び確認アルゴリズムは、第３の基本命令並び確認アルゴリズムで用いた命令種別テーブル、命令スロットテーブル及び命令配置テーブルに加え、命令カテゴリテーブルを有する。つまり、第４の基本命令並び確認アルゴリズムで用いるデータ構造は、命令種別テーブル、命令カテゴリテーブル、命令スロットテーブル、命令配置テーブル、論理命令スロットポインタ、及び物理命令スロットポインタである。第４の基本命令並び確認アルゴリズムは第３の基本命令並び確認アルゴリズムと同様に、第１及び第２の基本命令並び確認アルゴリズムで用いる機能ユニットテーブルを持たない。
【０１０６】
図３０は、第４の基本命令並び確認アルゴリズムを示すフローチャートである。前述した図２９の第３の基本命令並び確認アルゴリズムとの相違点として、図２９のステップＳ５２がステップＳ５２Ａに代わり、ステップＳ６０がＳ６０Ａに代わり、ステップＳ５７が新たに追加されている。ステップＳ５２Ａ、Ｓ６０Ａ及びステップＳ５７は図２８を参照して説明した通りである。また、図２８の第２の基本命令並び確認アルゴリズムとの相違点は、図２８のステップＳ７０に代えて図２９に示すステップＳ７０Ａを用いる点である。
【０１０７】
このように第４の基本命令並び確認アルゴリズムは、ステップＳ７１の制約を持たない命令の配列であって、かつ命令カテゴリに応じた基本命令の並びを確認するのに適している。
【０１０８】
上記第１から第４の基本命令並び確認アルゴリズムは、図１２に示す可変長ＶＬＩＷプロセッサの第１の構成例のみならず、様々な形態の可変長ＶＬＩＷプロセッサに適用できる。以下、可変長ＶＬＩＷプロセッサの別の構成例について説明する。
（可変長ＶＬＩＷプロセッサの第２の構成例）
最大８命令同時実行可能な可変長ＶＬＩＷプロセッサを第２の構成例として図３１に示す。この構成例は、アセンブラにおける前述した第１の基本命令並び確認アルゴリズムを適用してＶＬＩＷ命令における基本命令の並びを確認して得られたものである。
【０１０９】
図３１において、可変長ＶＬＩＷプロセッサはメモリ１２０、命令読出部１２１、命令レジスタ１２２、命令発行部１２３、命令実行部１２４、汎用レジスタＧＲ、浮動小数点レジスタＦＲ、及びプログラムカウンタＰＣを有する。命令実行部１２４は整数ユニットＩＵ０、ＩＵ１、ＩＵ２及びＩＵ３、浮動小数点数ユニットＦＵ０、ＦＵ１、ＦＵ２及びＦＵ３、及び分岐ユニットＢＵ０、ＢＵ１、ＢＵ２及びＢＵ３を有する。
【０１１０】
また、ＶＬＩＷ命令内の基本命令の並びは、図３２及び図３３に示す７３通りのＶＬＩＷが実行可能であるとする。
【０１１１】
命令読出部１２１は、メモリ１２０上のPCが示すアドレスより１ＶＬＩＷ命令分のメモリ領域をメモリ１２０から読み出し、命令レジスタ１２２に書き込む。
また、プログラムカウンタＰＣを１ＶＬＩＷ命令だけインクリメントする。命令レジスタ１２２は、命令読出部１２１より書き込まれた命令を保持する。命令発行部１２３は、命令レジスタ１２２から読み込んだ命令を対応する機能ユニットであるＩＵ、ＦＵ、ＢＵへ供給する。最大８命令を同時実行可能で、１０つの機能ユニットうち最大８つの機能ユニットに命令を供給する。各命令スロットに保持されている基本命令は以下のように機能ユニットに供給される。
【０１１２】
命令スロット０に保持されている基本命令はＩＵ０、ＦＵ０、ＢＵ０へ供給可能である。命令スロット１に保持されている基本命令はＦＵ０、ＩＵ１、ＦＵ１、ＢＵ０、ＢＵ１へ供給可能である。命令スロット２に保持されている基本命令はＩＵ１、ＦＵ１、ＩＵ２、ＦＵ２、ＢＵ０、ＢＵ１へ供給可能である。命令スロット３に保持されている基本命令はＦＵ１、ＩＵ２、ＦＵ２、ＩＵ３、ＦＵ３、ＢＵ０、ＢＵ１へ供給可能である。命令スロット４に保持されている基本命令はＩＵ２、ＦＵ２、ＩＵ３、ＦＵ３、ＢＵ０へ供給可能である。命令スロット５に保持されている基本命令はＦＵ２、ＩＵ３、ＦＵ３、ＢＵ０、ＢＵ１へ供給可能である。命令スロット６に保持されている基本命令はＩＵ３、ＦＵ３、ＢＵ０、ＢＵ１へ供給可能である。命令スロット７に保持されている基本命令はＦＵ３、ＢＵ０、ＢＵ１へ供給可能である。
ＩＵ０、ＩＵ１、ＩＵ３、ＩＵ３は、整数演算命令、整数ロード命令、整数ストア命令、浮動小数点数ロード命令、浮動小数点ストア命令を実行する。
【０１１３】
整数演算命令が供給された場合、入力オペランドデータを汎用レジスタＧＲから読み出し、整数演算を行なった後、演算結果である出力オペランドデータを汎用レジスタＧＲに書き込む。整数ロード命令が供給された場合、入力オペランドデータをレジスタから読み出し、実効アドレスを計算した後、メモリ１２０上の実効アドレスに対応する領域を読み出し、その値を汎用レジスタＧＲに書き込む。整数ストア命令が供給された場合、入力オペランドデータを汎用レジスタＧＲから読み出し、実効アドレスを計算した後、メモリ１２０上の実効アドレスに対応する領域へストアデータを書き込む。浮動小数点数ロード命令が供給された場合、入力オペランドデータをレジスタから読み出し、実効アドレスを計算した後、メモリ１２０上の実効アドレスに対応する領域を読み出し、その値を浮動小数点レジスタＦＲに書き込む。浮動小数点数ストア命令が供給された場合、入力オペランドデータをFRから読み出し実効アドレスを計算した後、メモリ１２０上の実効アドレスに対応する領域へストアデータを書き込む。
【０１１４】
ＦＵ０、ＦＵ１、ＦＵ２、ＦＵ３は、浮動小数点数演算命令を実行する。浮動小数点数演算命令が供給された場合、入力オペランドデータを浮動小数点レジスタＦＲから読み出し、浮動小数点演算演算を行なった後、演算結果である出力オペランドデータを浮動小数点レジスタＦＲに書き込む。
【０１１５】
ＢＵ０、ＢＵ１無条件分岐命令、条件分岐命令を実行する。無条件分岐命令が供給された場合、入力オペランドデータをレジスタＧＲ、ＰＣから読み出し、それらを用いてアドレス計算を行ない、その結果をプログラムカウンタＰＣに書き込む。条件分岐命令が供給された場合、分岐条件が成立するか否かを判定して、分岐が成立する場合には、入力オペランドデータをレジスタＧＲ、ＰＣから読み出し、それらを用いてアドレス計算を行ない、その結果を分岐先の命令のアドレスとして、プログラムカウンタＰＣに書き込む。
【０１１６】
また、可変長ＶＬＩＷ命令を実行するプロセッサでは、ＶＬＩＷ命令は図３４のようにメモリ上に配置される。
（可変長ＶＬＩＷプロセッサの第２の構成例の動作）
図３４に示すようなプログラムが与えられたときの、図３１に示されるＶＬＩＷプロセッサの動作について、図３５を用いて説明する。なお、図中において、ＡＤＤは加算を行なう整数演算命令、ＦＡＤＤは加算を行う浮動小数点数演算命令である。
（時刻１）
（A）命令読出部１２１では、プログラムカウンタＰＣ内の命令アドレスを用いて、図３４のようにメモリ１２０上に配置されたＶＬＩＷ命令１をメモリから読み出し、命令レジスタ１２２に書き込む。このとき命令レジスタ１２２には図３５の時刻１のように格納される。
【０１１７】
（B）機能ユニットでは、供給された命令を実行する。命令スロット０のＡＤｄがＩＵ０で実行される。命令スロット１のＦＡＤＤがＦＵ０で実行される。命令スロット２のＡＤＤがＩＵ１で実行される。命令スロット３のＦＡＤＤがＦＵ１で実行される。命令スロット４のＡＤＤがＩＵ２で実行される。命令スロット５のＦＡＤＤがＦＵ２で実行される。命令スロット６のＡＤＤがＩＵ３で実行される。命令スロット７のＦＡＤＤがＦＵ３で実行される。ＢＵ０、ＢＵ１は基本命令が供給されないため動作しない。
【０１１８】
ＩＵ０、ＩＵ１、ＩＵ２、ＩＵ３、ＦＵ０、ＦＵ１、ＦＵ２、ＦＵ３において、基本命令の実行が完了することで、ＶＬＩＷ命令１の実行が完了する。
【０１１９】
最大８命令同時実行可能な上記可変長ＶＬＩＷプロセッサのアセンブラの基本命令並び確認部Ｓ１３Ａ−１に、第１の基本命令並びアルゴリズムを用いて実現した場合の命令種別テーブルを図３６に、命令スロットテーブルを図３７示す。
（可変長ＶＬＩＷプロセッサの第３の構成例）
最大４命令同時実行可能な可変長ＶＬＩＷプロセッサに、前述した第２の基本命令並び確認アルゴリズムを適用してＶＬＩＷ命令における基本命令の並びを確認した場合を、第３の構成例として以下に示す。
【０１２０】
プロセッサ構造は、第１の構成例のプロセッサ構造と同じである。可変長ＶＬＩＷの命令並び確認部１３Ａ−１のアルゴリズムは、図２８に示す第２の基本命令並び確認アルゴリズムを用いている。
【０１２１】
図３８に、第３の構成例の命令種別テーブルを示す。図３９に、第３の構成例の命令カテゴリテーブルを示す。図４０に、第３の構成例の命令スロットテーブルを示す。
（可変長ＶＬＩＷプロセッサの第４の構成例）
最大８命令同時実行可能な可変長ＶＬＩＷプロセッサに、前述した第２の基本命令並び確認アルゴリズムを適用してＶＬＩＷ命令における基本命令の並びを確認した場合を、第４の構成例として以下に示す。
【０１２２】
プロセッサ構造は、第２の構成例のプロセッサ構造と同じである。可変長ＶＬＩＷの命令並び確認部１３Ａ−１のアルゴリズムは、図２８に示す第２の基本命令並び確認アルゴリズムを用いている。
【０１２３】
図４１に、第４の構成例の命令種別テーブルを示す。図４２に、第４の構成例の命令カテゴリテーブルを示す。図４３に、第４の構成例の命令スロットテーブルを示す。
【０１２４】
以上、本発明の実施の形態を説明した。前述の第１ないし第４のアルゴリズムは、コンピュータで処理される。つまり、コンピュータが実行するプログラムに第１ないし第４のアルゴリズムを構成するステップを記述し、コンピュータにこれらのステップを実行させる。つまり、本発明はコンピュータプログラムも含む。また、本発明はこれらのプログラムを格納するコンピュータ読取可能な記録媒体をも含む。更に、本発明は第１ないし第４のアルゴリズムを構成するステップを手段とする情報処理装置をも含む。
【０１２５】
可変長ＶＬＩＷプロセッサは上述した構成・動作のプロセッサに限定されるものではなく、本発明の命令処理方法は他の構成・動作の可変長ＶＬＩＷプロセッサに適用できる。
【０１２６】
最後に、本発明の特徴の一部を以下に整理して示す。
（付記１）プロセッサが実行する命令を構成する基本命令を実行できる機能ユニットの種別を特定する第１のステップと、
基本命令を論理命令スロットに配置可能かどうかを判断する第２のステップと、
配置可能と判断された基本命令と論理命令スロットに配置される他の基本命令との関係を考慮して当該配置可能と判断された基本命令をプロセッサの命令スロットに配置する第３のステップと
を有する命令処理方法。
(付記２)プロセッサが実行する命令を構成する基本命令の命令カテゴリを特定する第１のステップと、
当該命令カテゴリから実行可能な機能ユニットの種別を特定する第２のステップと、
基本命令を論理命令スロットに配置可能かどうかを判断する第３のステップと、
配置可能と判断された基本命令と論理命令スロットに配置される他の基本命令との関係を考慮して当該配置可能と判断された基本命令をプロセッサの命令スロットに配置する配置する第４のステップと
を有する命令処理方法。
（付記３）プロセッサが実行する命令を構成する基本命令を実行できる機能ユニットの種別を特定する第１のステップと、
基本命令を論理命令スロットに配置可能かどうかを判断する第２のステップと、
配置可能と判断された基本命令をプロセッサの命令スロットに配置する第３のステップと
を有する命令処理方法。
（付記４）プロセッサが実行する命令を構成する基本命令の命令カテゴリを特定する第１のステップと、
当該命令カテゴリから実行可能な機能ユニットの種別を特定する第２のステップと、
基本命令を論理命令スロットに配置可能かどうかを判断する第３のステップと、
配置可能と判断された基本命令をプロセッサの命令スロットに配置する配置する第４のステップと
を有する命令処理方法。
（付記５）前記第２のステップは、配置可能な最も若い論理命令スロットを特定するステップを有する付記１又は３に記載の命令処理方法。
（付記６）前記第３のステップは、配置可能な最も若い論理命令スロットを特定するステップを有する付記２又は４に記載の命令処理方法。
（付記７）前記第１ないし第３のステップを、プロセッサの全ての命令スロットに対して行なう付記１又は３に記載の命令処理方法。
（付記８）前記第１ないし第４のステップを、プロセッサの全ての命令スロットに対して行なう付記２又は４に記載の命令処理方法。
（付記９）コンピュータに、
プロセッサが実行する命令を構成する基本命令を実行できる機能ユニットの種別を特定する第１のステップと、
基本命令を論理命令スロットに配置可能かどうかを判断する第２のステップと、
配置可能と判断された基本命令と論理命令スロットに配置される他の基本命令との関係を考慮して当該配置可能と判断された基本命令をプロセッサの命令スロットに配置する第３のステップと
を実行させるためのプログラム。
（付記１０）コンピュータに、
プロセッサが実行する命令を構成する基本命令の命令カテゴリを特定する第１のステップと、
当該命令カテゴリから実行可能な機能ユニットの種別を特定する第２のステップと、
基本命令を論理命令スロットに配置可能かどうかを判断する第３のステップと、
配置可能と判断された基本命令と論理命令スロットに配置される他の基本命令との関係を考慮して当該配置可能と判断された基本命令をプロセッサの命令スロットに配置する配置する第４のステップと
を実行させるためのプログラム。
（付記１１）コンピュータに、
プロセッサが実行する命令を構成する基本命令を実行できる機能ユニットの種別を特定する第１のステップと、
基本命令を論理命令スロットに配置可能かどうかを判断する第２のステップと、
配置可能と判断された基本命令をプロセッサの命令スロットに配置する第３のステップと
を実行させるためのプログラム。
（付記１２）コンピュータに、
プロセッサが実行する命令を構成する基本命令の命令カテゴリを特定する第１のステップと、
当該命令カテゴリから実行可能な機能ユニットの種別を特定する第２のステップと、
基本命令を論理命令スロットに配置可能かどうかを判断する第３のステップと、
配置可能と判断された基本命令をプロセッサの命令スロットに配置する配置する第４のステップと
を実行させるためのプログラム。
（付記１３）付記１ないし４のいずれか一項に記載の前記命令処理方法を含むプロセッサのアセンブラ。
（付記１４）付記１ないし４のいずれか一項に記載の前記命令処理方法を含むプロセッサのコンパイラ。
【０１２７】
【発明の効果】
以上説明したように、本発明によれば、可変長の超長命令語アーキテクチャに基づいて命令発行幅が異なるプロセッサの言語処理系に適した命令処理方法を提供することができる。
【図面の簡単な説明】
【図１】超長命令語アーキテクチャに基づくプロセッサの従来構成のブロック図である。
【図２】図１に示すメモリ上でのＶＬＩＷ命令の配置例を示す図である。
【図３】図１に示す命令レジスタにＶＬＩＷ命令が格納される様子を示す図である。
【図４】ＶＬＩＷプロセッサの従来のアセンブラのフローチャートである。
【図５】従来の配置可能命令スロットテーブルの一例を示す図である。
【図６】従来のアセンブラのＶＬＩＷ命令の確認部を示す図である。
【図７】従来のアセンブラのＶＬＩＷ命令の命令スロットに配置可能かどうかを確認するフローチャートである。
【図８】従来のＶＬＩＷプロセッサのコンパイラのフローチャートである。
【図９】従来のコンパイラのＶＬＩＷ形成部のフローチャートである。
【図１０】可変長ＶＬＩＷプロセッサの第１の構成例を示すブロック図である。
【図１１】図１０に示す可変長ＶＬＩＷプロセッサの実行可能なＶＬＩＷ内の基本命令の並びを示す図である。
【図１２】図１０に示すメモリ上でのＶＬＩＷ命令の配置例を示す図である。
【図１３】図１０に示す命令レジスタにＶＬＩＷ命令が格納される様子の一例を示す図である。
【図１４】本発明の一実施の形態による可変長ＶＬＩＷプロセッサのアセンブラのフローチャートを示す図である。
【図１５】図１３に示す可変長ＶＬＩＷ確認部の一構成例を示すフローチャートである。
【図１６】本発明の一実施の形態による可変長ＶＬＩＷプロセッサのコンパイラのフローチャートを示す図である。
【図１７】図１６に示すＶＬＩＷ形成部の一構成例を示すフローチャートである。
【図１８】命令格納テーブルの一例を示す図である。
【図１９】命令スロットテーブルの一例を示す図である。
【図２０】命令配置テーブルの一例を示す図である。
【図２１】機能ユニットテーブルの一例を示す図である。
【図２２】可変長ＶＬＩＷ命令を構成する基本命令の並びを確認する第１のアルゴリズムを示すフローチャートである。
【図２３】図１６に示す可変長形成部の第１の構成例における命令種別テーブルを示す図である。
【図２４】図１６に示す可変長形成部の第１の構成例における命令スロットテーブルを示す図である。
【図２５】可変長ＶＬＩＷ命令を構成する基本命令の並びを確認する第２のアルゴリズムで用いられる命令種別テーブルの一例を示す図である。
【図２６】可変長ＶＬＩＷ命令を構成する基本命令の並びを確認する第２のアルゴリズムで用いられる命令カテゴリテーブルの一例を示す図である。
【図２７】可変長ＶＬＩＷ命令を構成する基本命令の並びを確認する第２のアルゴリズムで用いられる命令スロットテーブルの一例を示す図である。
【図２８】可変長ＶＬＩＷ命令を構成する基本命令の並びを確認する第２のアルゴリズムを示すフローチャートである。
【図２９】可変長ＶＬＩＷ命令を構成する基本命令の並びを確認する第３のアルゴリズムを示すフローチャートである。
【図３０】可変長ＶＬＩＷ命令を構成する基本命令の並びを確認する第４のアルゴリズムを示すフローチャートである。
【図３１】可変長ＶＬＩＷプロセッサの第２の構成例を示すブロック図である。
【図３２】図３１に示す可変長ＶＬＩＷプロセッサで実行可能なＶＬＩＷ内の基本命令の並びを示す図（その１）である。
【図３３】図３１に示す可変長ＶＬＩＷプロセッサで実行可能なＶＬＩＷ内の基本命令の並びを示す図（その２）である。
【図３４】図３１に示すメモリ上でのＶＬＩＷ命令の配置例を示す図である。
【図３５】図３１に示す命令レジスタにＶＬＩＷ命令が格納される様子を示す図である。
【図３６】図３１に示す第２の構成例における命令種別テーブルを示す図である。
【図３７】図３１に示す第２の構成例における命令スロットテーブルを示す図である。
【図３８】可変長ＶＬＩＷプロセッサの第３の構成例における命令種別テーブルを示す図である。
【図３９】可変長ＶＬＩＷプロセッサの第３の構成例における命令カテゴリテーブルを示す図である。
【図４０】可変長ＶＬＩＷプロセッサの第３の構成例における命令スロットテーブルを示す図である。
【図４１】可変長ＶＬＩＷプロセッサの第４の構成例における命令種別テーブルを示す図である。
【図４２】可変長ＶＬＩＷプロセッサの第４の構成例における命令カテゴリテーブルを示す図である。
【図４３】可変長ＶＬＩＷプロセッサの第４の構成例における命令スロットテーブルを示す図である。
【符号の説明】
２０    メモリ
２１    命令読出部
２２    命令レジスタ
２３    命令発行部
２４    命令実行部
ＰＣ    プログラムカウンタ
ＧＲ    汎用レジスタ
ＦＲ    浮動小数点レジスタ
【図１】
0004542722.tif 000002
【図２】
0004542722.tif 000003
【図３】
0004542722.tif 000004
【図４】
0004542722.tif 000005
【図５】
0004542722.tif 000006
【図６】
0004542722.tif 000007
【図７】
0004542722.tif 000008
【図８】
0004542722.tif 000009
【図９】
0004542722.tif 000010
【図１０】
0004542722.tif 000011
【図１１】
0004542722.tif 000012
【図１２】
0004542722.tif 000013
【図１３】
0004542722.tif 000014
【図１４】
0004542722.tif 000015
【図１５】
0004542722.tif 000016
【図１６】
0004542722.tif 000017
【図１７】
0004542722.tif 000018
【図１８】
0004542722.tif 000019
【図１９】
0004542722.tif 000020
【図２０】
0004542722.tif 000021
【図２１】
0004542722.tif 000022
【図２２】
0004542722.tif 000023
【図２３】
0004542722.tif 000024
【図２４】
0004542722.tif 000025
【図２５】
0004542722.tif 000026
【図２６】
0004542722.tif 000027
【図２７】
0004542722.tif 000028
【図２８】
0004542722.tif 000029
【図２９】
0004542722.tif 000030
【図３０】
0004542722.tif 000031
【図３１】
0004542722.tif 000032
【図３２】
0004542722.tif 000033
【図３３】
0004542722.tif 000034
【図３４】
0004542722.tif 000035
【図３５】
0004542722.tif 000036
【図３６】
0004542722.tif 000037
【図３７】
0004542722.tif 000038
【図３８】
0004542722.tif 000039
【図３９】
0004542722.tif 000040
【図４０】
0004542722.tif 000041
【図４１】
0004542722.tif 000042
【図４２】
0004542722.tif 000043
【図４３】
0004542722.tif 000044