(57)【特許請求の範囲】
【請求項１】
高級言語プログラムから、複数の操作を同時並列に実行し操作結果をフラグに反映するプロセッサを対象とする長語命令形式の機械命令プログラムを生成するコンパイル方法であって、
１つの機械命令の中に、
複数の操作記述と、
操作結果の前記フラグへの反映の仕方に関するフラグ制御記述と
を含む機械命令を生成する機械命令生成ステップ
を含み、
前記フラグ制御記述は、
同一の機械命令の中に含まれる前記複数の操作記述による操作の結果を前記フラグに反映させる順序を特定する情報で構成される
ことを特徴とするコンパイル方法。
【請求項２】
高級言語プログラムから、複数の操作を同時並列に実行し操作結果をフラグに反映するプロセッサを対象とする長語命令形式の機械命令プログラムを生成するコンパイル方法であって、
１つの機械命令の中に、
複数の操作記述と、
操作結果の前記フラグへの反映の仕方に関するフラグ制御記述と
を含む機械命令を生成する機械命令生成ステップ
を含み、
前記フラグ制御記述は、
同一の機械命令の中に含まれる前記複数の操作記述の内から、前記フラグに操作の結果を反映させるいくつかを抽出し、抽出された前記いくつかの操作記述による操作の結果を前記フラグに反映させる順序を特定する情報で構成される
ことを特徴とするコンパイル方法。
【請求項３】
前記機械命令の一語に含まれる前記操作記述の数が、前記プロセッサにより同時並列に実行される操作の最大数に等しい
ことを特徴とする請求項１または２記載のコンパイル方法。
【請求項４】
複数の操作を指定する長語命令形式の命令を実行するプロセッサであって、
同時並列に実行できる数の操作記述と、操作結果のフラグへの反映の仕方に関するフラグ制御記述とを同時に含む命令を取出し、
前記操作記述による操作を並列実行するとともに、
前記フラグ制御記述に従って前記並列実行による操作結果をフラグに反映し、
前記フラグ制御記述は、
同一の機械命令の中に含まれる前記複数の操作記述による操作の結果を前記フラグに反映させる順序を特定する情報で構成される
ことを特徴とするプロセッサ。
【請求項５】
複数の操作を指定する長語命令形式の命令を実行するプロセッサであって、
同時並列に実行できる数の操作記述と、操作結果のフラグへの反映の仕方に関するフラグ制御記述とを同時に含む命令を取出し、
前記操作記述による操作を並列実行するとともに、
前記フラグ制御記述に従って前記並列実行による操作結果をフラグに反映し、
前記フラグ制御記述は、
同一の機械命令の中に含まれる前記複数の操作記述の内から、前記フラグに操作の結果を反映させるいくつかを抽出し、抽出された前記いくつかの操作記述による操作の結果を前記フラグに反映させる順序を特定する情報で構成される
ことを特徴とするプロセッサ。
【請求項６】
複数の操作を指定する長語命令形式の命令を実行するプロセッサであって、
同時並列に実行できる数の操作記述と、操作結果のフラグへの反映の仕方に関するフラグ制御記述とを同時に含む命令を取出す命令読出し手段と、
前記操作記述を解読し、解読結果に基づいて操作を並列実行する命令解読実行手段と、
前記フラグ制御記述に従って、前記命令解読実行手段における操作結果をフラグに反映するフラグ生成保持手段と
を備え、
前記フラグ制御記述は、
同一の機械命令の中に含まれる前記複数の操作記述の内から、前記フラグに操作の結果を反映させる１つを特定する情報で構成され、
前記命令解読実行手段は、それぞれがフラグを生成するための原始データであって並列に実行できる数に等しい組の原始データを出力し、
前記フラグ生成保持手段は、
前記フラグ制御記述に従って、前記命令解読実行手段が出力する前記原始データの組から１つを選択するセレクタと、
前記セレクタが出力する原始データを用いてフラグデータを生成するフラグ生成手段と、
前記フラグ生成手段が生成するフラグデータを保持するフラグレジスタとからなる
ことを特徴とするプロセッサ。
【請求項７】
複数の操作を指定する長語命令形式の命令を実行するプロセッサであって、
同時並列に実行できる数の操作記述と、操作結果のフラグへの反映の仕方に関するフラグ制御記述とを同時に含む命令を取出す命令読出し手段と、
前記操作記述を解読し、解読結果に基づいて操作を並列実行する命令解読実行手段と、
前記フラグ制御記述に従って、前記命令解読実行手段における操作結果をフラグに反映するフラグ生成保持手段と
を備え、
前記フラグ制御記述は、
同一の機械命令の中に含まれる前記複数の操作記述による操作の結果を前記フラグに反映させる順序を特定する情報で構成される
ことを特徴とするプロセッサ。
【請求項８】
複数の操作を指定する長語命令形式の命令を実行するプロセッサであって、
同時並列に実行できる数の操作記述と、操作結果のフラグへの反映の仕方に関するフラグ制御記述とを同時に含む命令を取出す命令読出し手段と、
前記操作記述を解読し、解読結果に基づいて操作を並列実行する命令解読実行手段と、
前記フラグ制御記述に従って、前記命令解読実行手段における操作結果をフラグに反映するフラグ生成保持手段と
を備え、
前記フラグ制御記述は、
同一の機械命令の中に含まれる前記複数の操作記述の内から、前記フラグに操作の結果を反映させるいくつかを抽出し、抽出された前記いくつかの操作記述による操作の結果を前記フラグに反映させる順序を特定する情報で構成される
ことを特徴とするプロセッサ。
【請求項９】
前記命令解読実行手段は、それぞれがどのフラグが変化するかの情報であって並列に実行できる数に等しい組の情報と、それぞれがフラグを生成するための原始データであって並列に実行できる数に等しい組の原始データとを出力し、
前記フラグ生成保持手段は、
前記フラグ制御記述と前記情報とに従って、フラグ毎に、前記命令解読実行    手段が出力する前記原始データの組のいずれを用いるかを決定し、決定され    た原始データを用いてフラグデータを生成するフラグ生成手段と、
前記フラグ生成手段が生成するフラグデータを保持するフラグレジスタとからなる
ことを特徴とする請求項７または８記載のプロセッサ。
【請求項１０】
前記フラグ生成手段は、前記フラグ制御記述により特定される順序が後である操作を優先して、前記操作に関するフラグデータを生成することを特徴とする請求項９記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンパイラとプロセッサと記録媒体とに関し、特にVLIW(Very Long Instruction Word)方式のプロセッサにおけるフラグ制御に関するものおよびそのコンパイラおよびその機械命令プログラムを記録した記録媒体に関する。
【０００２】
【従来の技術】
近年の電子技術の発展により、高性能なプロセッサが普及し、あらゆる分野で用いられている。そのようなプロセッサでは命令の並列処理により高い性能を達成している。VLIWと呼ばれるアーキテクチャも命令の並列処理の１つの形態であり、VLIWアーキテクチャを採るプロセッサ（以下、「VLIWプロセッサ」という。）は、内部に複数のオペレーションユニットを備え、１つの命令に置かれたスロットと呼ばれる複数のフィールドに指定されたオペレーションを同時並列に実行する。このようなVLIWプロセッサの機械命令プログラムは、コンパイラによって高級言語で記述されたプログラムにおけるオペレーションレベルでの並列性が検出されスケジューリングされた後に生成されたものである。機械命令プログラムは実行コードとも呼ばれる。
【０００３】
古典的なVLIWプロセッサは、スロット毎に役割が固定されており、例えば、演算オペレーションを指定する第１スロットとロードストアオペレーションを指定する第２スロットと分岐オペレーションを指定する第３スロットとからなる命令語を有するものがある。このようなVLIWプロセッサでは、演算結果の状態を示すフラグは第１スロットで指定されるオペレーションによってのみ反映される。
【０００４】
しかしスロット毎に役割が固定されているため、コンパイラにおいて抽出される並列性の度合いが低くなる。演算とロードストアと分岐のオペレーションは平均すると概ね３分の１ずつの割合で出現するが、局所的なそれらの頻度は大きくばらつくため、例えば演算オペレーションが集中するような場合、上記例示したVLIWプロセッサでは十分な並列度を確保することができない。
【０００５】
そこで今日的なVLIWプロセッサでは、スロット毎に役割を固定させない方式をとるものが多い。図１７はそのような従来技術におけるVLIW方式のプロセッサの命令構成図である。命令フォーマットは同図（ａ）に示すように命令は６４ビット長であり、それぞれが１１ビットの３つのスロットからなり、いずれのスロットも均等にオペレーションを指定することができる。１１ビットの各スロットは、５ビットのオペコード（op）と３ビットのソースオペランド（src）と３ビットのデスティネーションオペランド（dst）からなり、同図（ｂ）に示すビット列が割付けられている。ここで、フラグが変化するオペレーションは同時には１つしか指定できないが、いずれのスロットに指定しても構わない。
【０００６】
図１８は同従来技術におけるプロセッサの概略構成図である。このプロセッサは３つのオペレーションを並列実行し、図１７（ａ）に示すような第１から第３の３つのスロットからなる命令の列で構成されるプログラムがROM４１に格納され、それぞれのスロットに書かれたオペレーションが第１命令解読器４５から第３命令解読器４７で解読された後、第１操作ユニット５８から第３操作ユニット６０で実行される。第１操作ユニット５８から第３操作ユニット６０のそれぞれから出力されるフラグ生成のための原始データはセレクタ６１において１つが選択され、フラグ生成ユニット６２でＣ、Ｖ、Ｎ、Ｚの各フラグが生成され、フラグレジスタ６３に各フラグが格納される。セレクタ６１における選択は、フラグが変化するオペレーションが指定されたスロットを第１命令解読器４５から第３命令解読器４７が特定することで達成される。なお、Ｃフラグは桁上げを、Ｖフラグはオーバフローを、Ｎフラグは負数を、Ｚフラグはゼロを表す。
【０００７】
【発明が解決しようとする課題】
しかしながら、上記の従来技術では、全ての演算オペレーションについてフラグが変化するオペコードとフラグが変化しないオペコードとの２種類ずつ持つためにオペコードの長さが長くなって命令長が長くなり、結果的にプログラムサイズが増大するという問題がある。
【０００８】
図１７に示す例では、四則演算および論理演算オペレーションについてフラグ変化の有無を区分する２種類のオペコードのためにオペコードが５ビット必要になる。一方、オペランドとして８本のレジスタの１つを選択するとすれば、１スロットの長さは、オペコード５ビットとオペランド３ビットの２つを合わせて１１ビットになる。３並列の場合、３スロットを３２ビットでは表現できず、通常、命令語長は２のべき乗数のビット長で表現するために命令語長が６４ビットになり、３１ビットもの未使用領域（図１７（ａ）のreservedで表す領域）が生じることになりコード効率が著しく低下する。コード効率とは、一連の操作をどれだけ少ないプログラムサイズで実現できるかという尺度である。
【０００９】
そこで、本発明はかかる点に鑑みてなされたものであり、並列度の向上とコード効率の低下の抑止とを両立するコンパイラおよびプロセッサを提供することを目的とする。
【００１０】
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【００１１】
【課題を解決するための手段】
上記課題を解決するために、本発明によれば、コンパイラが操作結果のフラグへの反映の仕方に関するフラグ制御記述を含む機械命令を生成し、プロセッサがフラグ制御記述に従って並列実行による操作結果をフラグに反映する。
【００１２】
つまり上記課題を解決するために、本発明のコンパイラは、高級言語プログラムから、複数の操作を同時並列に実行し操作結果をフラグに反映するプロセッサを対象とする長語命令形式の機械命令プログラムを生成するコンパイラであって、１つの機械命令の中に、複数の操作記述と、操作結果の前記フラグへの反映の仕方に関するフラグ制御記述とを含む機械命令を生成する機械命令生成手段を備えることを特徴とする。
【００１３】
つまり上記課題を解決するために、本発明のプロセッサは、複数の操作を指定する長語命令形式の命令を実行するプロセッサであって、同時並列に実行できる数の操作記述と、操作結果のフラグへの反映の仕方に関するフラグ制御記述とを同時に含む命令を取出し、前記操作記述による操作を並列実行するとともに、前記フラグ制御記述に従って前記並列実行による操作結果をフラグに反映することを特徴とする。
【００１４】
また本発明のプロセッサは、複数の操作を指定する長語命令形式の命令を実行するプロセッサであって、同時並列に実行できる数の操作記述と、操作結果のフラグへの反映の仕方に関するフラグ制御記述とを同時に含む命令を取出す命令読出し手段と、前記操作記述を解読し、解読結果に基づいて操作を並列実行する命令解読実行手段と、前記フラグ制御記述に従って、前記命令解読実行手段における操作結果をフラグに反映するフラグ生成保持手段とを備えたことを特徴とする。
【００１５】
つまり上記課題を解決するために、本発明の記録媒体は、複数の操作を同時並列に実行し操作結果をフラグに反映するプロセッサによって実行される機械命令プログラムを記録した記録媒体であって、１つの機械命令が、複数の操作記述と、操作結果の前記フラグへの反映の仕方に関するフラグ制御記述とを含む構成であることを特徴とする。
【００１６】
また本発明の記録媒体は、プロセッサによって実行される機械命令プログラムを記録した記録媒体であって、同時並列に実行できる数の操作記述と、操作結果のフラグへの反映の仕方に関するフラグ制御記述とを同時に含む長語命令形式の命令を取出す第１ステップと、前記操作記述による操作を並列実行する第２ステップと、前記フラグ制御記述に従って前記並列実行による操作結果をフラグに反映する第３ステップとをプロセッサに実行させるための機械命令プログラムを記録した記録媒体である。
【００１７】
上記のコンパイラ、プロセッサまたは記録媒体におけるフラグ制御記述は、同一の機械命令の中に含まれる前記複数の操作記述の内から、前記フラグに操作の結果を反映させる１つを特定する情報で構成されるとしてもよい。
【００１８】
上記のコンパイラ、プロセッサまたは記録媒体におけるフラグ制御記述は、同一の機械命令の中に含まれる前記複数の操作記述による操作の結果を前記フラグに反映させる順序を特定する情報で構成されるとしてもよい。
【００１９】
上記のコンパイラ、プロセッサまたは記録媒体におけるフラグ制御記述は、同一の機械命令の中に含まれる前記複数の操作記述の内から、前記フラグに操作の結果を反映させるいくつかを抽出し、抽出された前記いくつかの操作記述による操作の結果を前記フラグに反映させる順序を特定する情報で構成されるとしてもよい。
【００２０】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を用いて詳細に説明する。
【００２１】
（実施の形態１）
１．コンパイラ
１．１  コンパイラの構成
図１は、本発明の第１の実施形態におけるコンパイラの構成を示すブロック図である。
【００２２】
コンパイラ１０２は、ユーザが記述したＣ言語プログラムのファイル１０１を翻訳し、機械命令プログラムのファイル１１０を出力する。
【００２３】
コンパイラ１０２は、Ｃ言語プログラムのファイル１０１を読込用バッファ１０４に読み込むファイル読込部１０３と、読込用バッファ１０４に読み込まれたＣ言語プログラムの構文や意味を解析して逐次実行形式の中間コードを生成し逐次中間コード用バッファ１０６に書き込む構文解析部１０５と、逐次中間コード用バッファ１０６に格納された逐次中間コードを入力して命令の３並列実行を目的とする命令のスケジューリングを行い、機械命令プログラムを生成し出力用バッファ１０８に書き込む機械命令生成部１０７と、出力用バッファ１０８に格納された機械命令プログラムをファイル１１０に出力するファイル出力部１０９とから構成される。機械命令生成部１０７を除く各要素は、公知の技術に基づいて構成すればよいのでここでは説明を省略する。
【００２４】
図２は、機械命令生成部１０７の構成を示すブロック図である。機械命令生成部１０７は、依存関係抽出部１２０と並列中間コード生成部１２１とフラグ制御コード生成部１２２とから構成される。依存関係抽出部１２０は、逐次中間コード用バッファ１０６から入力される複数の逐次中間コード間の依存関係を検出してパラメータ化する。並列中間コード生成部１２１は、依存関係抽出部１２０で作られた依存関係のパラメータを用いて逐次実行形式の中間コードから並列実行形式の中間コードを生成する。フラグ制御コード生成部１２２は、並列中間コード生成部１２１で生成される並列中間コードを対応する機械命令に割り当てるとともに、フラグが変化するオペレーションを含むスロットがあるかどうかに基づいてフラグ制御コードを生成する。フラグ制御コードとは、並列に実行される３つのスロットのいずれのオペレーションの結果をフラグに反映させるかを指定する２ビットのコードであって、０１は第１スロット、１０は第２スロット、１１は第３スロットのオペレーションの結果をフラグに反映させることを指定し、００はいずれのスロットのオペレーションの結果もフラグに反映させないことを指定するものとする。
【００２５】
図３は、フラグ制御コード生成部１２２におけるフラグ制御コードの生成フローを示したフローチャートである。この生成フローは、以下の動作例を用いて詳細に説明する。
【００２６】
１．２  コンパイラの動作例
図４は、Ｃ言語プログラムの例を示すプログラムリストである。図４のＣ言語プログラムには、配列変数x[i]と配列変数y[i]との積をiについて累算するいわゆる積和演算を行うループのみが記述されている。
【００２７】
以下に、図４のプログラムリストを入力とした場合における上記構成をもつコンパイラの動作について図１から図８を用いて説明する。
【００２８】
ファイル読込部１０３は、ユーザが記述したＣ言語プログラム１０１を読み込み、読込用バッファ１０４に格納する。
【００２９】
構文解析部１０５は、読込用バッファ１０４に格納されたＣ言語プログラムを取り出して構文解析を行い、逐次実行形式の中間コードを逐次中間コード用バッファ１０６に出力する。図５は、このとき逐次中間コード用バッファ１０６に格納される逐次中間コードプログラムを示したリストである。各コードの意味は以下の通りである。
（逐次中間コード１）
ポインタXの示すメモリ領域から値を取り出して変数xに格納する。
（逐次中間コード２）
ポインタYの示すメモリ領域から値を取り出して変数yに格納する。
（逐次中間コード３）
変数xと変数yとの積を求め一時変数t1に格納する。
（逐次中間コード４）
変数aと一時変数t1との和を求め変数aに格納する。
（逐次中間コード５）
ポインタXを４減らす。
（逐次中間コード６）
ポインタYを４減らす。
（逐次中間コード７）
変数iを１減らす。[F]は、この結果をフラグに反映することを意味する。
（逐次中間コード８）
フラグが「大なり（＞）」を満たすならば逐次中間コード１へ分岐する。
【００３０】
次に、機械命令生成部１０７における依存関係抽出部１２０は、逐次中間コード用バッファ１０６に格納された逐次中間コード列を取り出し、逐次中間コード間の依存関係を解析してパラメータ化する。図６は、図５に示す逐次中間コードプログラムにおける依存関係のパラメータ化に関する説明図である。逐次中間コード１の実行結果である変数xは逐次中間コード３において参照される。また逐次中間コード１を実行する前に逐次中間コード５を実行してポインタXを更新してはならない。従って、逐次中間コード３および逐次中間コード５は逐次中間コード１に依存する。以上の解析により、図６の依存関係有向グラフのイおよびニと依存関係パラメータＰ１が決定される。以下同様に、逐次中間コード３および逐次中間コード６は逐次中間コード２に依存し（依存関係有向グラフのロおよびホ、依存関係パラメータＰ２）、逐次中間コード４は逐次中間コード３に依存し（依存関係有向グラフのハ、依存関係パラメータＰ３）、逐次中間コード８は逐次中間コード７に依存する（依存関係有向グラフのヘ、依存関係パラメータＰ７）。依存関係パラメータＰ４からＰ６およびＰ８は他に依存関係を与えないことを示す。
【００３１】
続いて、並列中間コード生成部１２１は、依存関係抽出部１２０で作られた依存関係のパラメータを用いて逐次実行形式の中間コードから並列実行形式の中間コードを生成する。図７は、図６の依存関係パラメータＰ１〜Ｐ８を用いて図５の逐次中間コードプログラムを並列実行形式に並べ変えた並列中間コードプログラムのリストである。ここで並列度は最大３である。各コードの意味は以下の手順に従って生成される。
（並列中間コード１）
逐次中間コード１および逐次中間コード２は並列に実行可能であるが、他の逐次中間コードはいずれもこれらと依存関係を有するため、並列中間コード１は逐次中間コード１と逐次中間コード２とから構成される。
（並列中間コード２）
逐次中間コード３は、互いに依存関係のない逐次中間コード５および逐次中間コード７と並列に実行可能であるため、並列中間コード２は逐次中間コード３と逐次中間コード５と逐次中間コード７とから構成される。
（並列中間コード３）
逐次中間コード４は、互いに依存関係のない逐次中間コード６および逐次中間コード８と並列に実行可能であるため、並列中間コード３は逐次中間コード４と逐次中間コード６と逐次中間コード８とから構成される。
【００３２】
次に、フラグ制御コード生成部１２２は、並列中間コード生成部１２１で生成される並列中間コードを対応する機械命令に割り当てるとともに、フラグが変化するオペレーションを含むスロットがあるかどうかに基づいてフラグ制御コードを生成して出力用バッファ１０８に出力する。図８は、図７の並列中間コードプログラムをもとに生成された機械命令プログラムのリストである。なお、機械命令プログラムは本来０と１のビット列であるが、意味を表すために図８ではニモニック表記してある。各命令とも、セミコロン（；）で区切られた左から、フラグ制御コード、第１スロット、第２スロット、第３スロットである。各命令の意味および生成の手順は以下の通りである。
（命令１）
ポインタXおよびポインタYをレジスタR0およびレジスタR1に割り付け、変数xおよび変数yをレジスタR2およびレジスタR3に割り付ける。命令の第１スロットは逐次中間コード１に相当し、R0の間接参照によるデータをR2に転送するLD操作である。第２スロットは逐次中間コード２に相当し、R1の間接参照によるデータをR3に転送するLD操作である。第３スロットは対応する逐次中間コードがないため、NOP操作となる。NOP操作は、例えばレジスタR7をレジスタR7へ転送するなどの操作で実現されるが、解かりやすくするためにここではNOPと表記する。そしていずれのスロットの操作の結果もフラグに反映しないので、図３におけるステップS301、ステップS303、ステップS305、ステップS307と処理されてフラグ制御コードとして００が生成される。
（命令２）
変数iおよび一時変数t1をレジスタR4およびレジスタR3に割り付ける。命令の第１スロットは逐次中間コード３に相当し、R2とR3の積を求め結果をR3に格納するMUL操作である。第２スロットは逐次中間コード５に相当し、R0から４を引いて結果をR0に格納するSUB操作である。第３スロットは逐次中間コード７に相当し、R4から１を引いて結果をR4に格納するSUB操作である。このとき第３スロットの操作の結果をフラグに反映するので、図３におけるステップS301、ステップS303、ステップS305、ステップS306と処理されてフラグ制御コードとして１１が生成される。
（命令３）
変数aをレジスタR5に割り付ける。命令の第１スロットは逐次中間コード４に相当し、R3とR5の和を求め結果をR5に格納するADD操作である。第２スロットは逐次中間コード６に相当し、R1から４を引いて結果をR1に格納するSUB操作である。第３スロットは逐次中間コード８に相当し、フラグが「大なり（＞）」を満たすならば２命令前、即ち命令１に分岐するBGT操作である。そしていずれのスロットの操作の結果もフラグに反映しないので、図３におけるステップS301、ステップS303、ステップS305、ステップS307と処理されてフラグ制御コードとして００が生成される。
【００３３】
最後に、ファイル出力部１０９は出力用バッファ１０８に格納された機械命令プログラムをファイル１１０に出力する。
【００３４】
以上のように、図４のＣ言語プログラムは図８の機械命令プログラムに変換される。なお、上記動作例では図３における未通過のステップがあるが、第１スロットの操作の結果をフラグに反映する場合は、図３におけるステップS301、ステップS302と処理されてフラグ制御コードとして０１が生成され、第２スロットの操作の結果をフラグに反映する場合は、図３におけるステップS301、ステップS303、ステップS304と処理されてフラグ制御コードとして１０が生成される。
【００３５】
２．プロセッサ
２．１  命令の構成
図９は本発明の第１の実施形態におけるプロセッサの命令構成図である。命令フォーマットは同図（ａ）に示すように命令は３２ビット長であり、２ビットのフラグ制御コードを指示するためのフラグ制御フィールドと、それぞれが１０ビットの３つのスロットからなり、いずれのスロットも均等にオペレーションを指定することができる。１０ビットの各スロットは、４ビットのオペコード（op）と３ビットのソースオペランド（src）と３ビットのデスティネーションオペランド（dst）からなり、同図（ｂ）に示すビット列が割り付けられている。ここで、フラグが変化するオペレーションは同時には１つしか指定できないが、いずれのスロットに指定しても構わない。第１スロットの操作の結果をフラグに反映するときはフラグ制御コードを０１に、第２スロットの操作の結果をフラグに反映するときはフラグ制御コードを１０に、第３スロットの操作の結果をフラグに反映するときはフラグ制御コードを１１にし、いずれのスロットの操作の結果もフラグに反映しないときはフラグ制御コードを００にする。オペコードは００００のMOV操作から１１１１のST操作まで１６種類が割り当てられている。オペランドは３ビットでレジスタR0からR7の１つを選択する。
【００３６】
２．２  プロセッサの構成
図１０は、同実施形態におけるプロセッサの概略構成図である。
【００３７】
このプロセッサは、命令フェッチステージ（以下、IFステージ）、解読およびレジスタ読出しステージ（以下、DECステージ）、実行ステージ（以下、EXステージ）の３つのステージからなる３段パイプライン構造を成している。
【００３８】
図１０において、１は機械命令プログラムを格納するROM、２と３と４は機械命令（以下、命令と略す。）の第１スロットと第２スロットと第３スロットの内容を格納するそれぞれＩ１ラッチとＩ２ラッチとＩ３ラッチ、５と６と７はそれぞれＩ１ラッチ２とＩ２ラッチ３とＩ３ラッチ４に保持された命令の第１スロットと第２スロットと第３スロットの内容を解読しプロセッサ各部を制御する第１命令解読器と第２命令解読器と第３命令解読器、８はオペランドを格納するレジスタファイル、９と１０と１１はそれぞれＩ１ラッチ２とＩ２ラッチ３とＩ３ラッチ４の内容の一部とレジスタファイル８の出力との２入力から１つを選択するＤ１セレクタとＤ２セレクタとＤ３セレクタ、１２と１３と１４はそれぞれＤ１セレクタ９とＤ２セレクタ１０とＤ３セレクタ１１の出力を格納するＤ１１ラッチとＤ１２ラッチとＤ１３ラッチ、１５と１６と１７はレジスタファイル８の出力を格納するＤ２１ラッチとＤ２２ラッチとＤ２３ラッチ、１８はＤ１１ラッチ１２およびＤ２１ラッチ１５の内容を用いて算術論理演算やロード・ストアなど全ての操作を行う第１操作ユニット、１９はＤ１２ラッチ１３およびＤ２２ラッチ１６の内容を用いて算術論理演算やロード・ストアなど全ての操作を行う第２操作ユニット、２０はＤ１３ラッチ１４およびＤ２３ラッチ１７の内容を用いて算術論理演算やロード・ストアなど全ての操作を行う第３操作ユニットで、第１操作ユニット１８と第２操作ユニット１９と第３操作ユニット２０の出力はともにレジスタファイル８に接続される。２１は命令のフラグ制御フィールドの内容を格納するＩ０ラッチ、２２はＩ０ラッチ２１の内容を格納するＤ０ラッチ、２３は第１操作ユニット１８から第３操作ユニット２０のそれぞれから出力されるフラグ生成のための原始データの１つを選択して出力するセレクタ、２４はセレクタ２３で選択された原始データに基づいてＣ、Ｖ、Ｎ、Ｚの各フラグを生成するフラグ生成ユニット、２５はフラグ生成ユニット２４で生成された各フラグを格納するフラグレジスタ、２６は第１命令解読器５から第３命令解読器７のいずれかが条件分岐操作を解読した場合にフラグレジスタ２５の各フラグの状態に基づいて分岐するか否かを決定する分岐ユニット、２７は分岐ユニット２６から分岐の指示があればその分岐先に従って命令列をフェッチし、分岐の指示がなければ連続する命令列をシーケンシャルにフェッチする命令フェッチユニットである。
【００３９】
セレクタ２３は、Ｄ０ラッチ２２の値が０１ならば第１操作ユニット１８から出力される原始データを選択し、１０ならば第２操作ユニット１９から出力される原始データを選択し、１１ならば第３操作ユニット２０から出力される原始データを選択し、００ならば機能しない。またフラグ生成ユニット２４は、Ｄ０ラッチ２２の値が０１ならば第１命令解読器５の指示に従ってセレクタ２３が出力する原始データを用いて各フラグを生成し、生成したフラグのみをフラグレジスタ２５の対応する位置に格納する。例えば、第１命令解読器５がADD操作を解読する場合は全てのフラグについて、AND操作を解読する場合はＮフラグとＺフラグとについて、TST操作を解読する場合はＺフラグだけについてフラグを生成しフラグレジスタ２５を更新する。同様に、Ｄ０ラッチ２２の値が１０ならば第２命令解読器６の指示に従い、１１ならば第３命令解読器７の指示に従う。Ｄ０ラッチ２２の値が００ならばいずれのフラグも更新しない。なお、Ｃフラグは桁上げを、Ｖフラグはオーバフローを、Ｎフラグは負数を、Ｚフラグはゼロを表す。
【００４０】
２．３  プロセッサの動作例
以下に、図８の機械命令プログラムがROM１に格納された場合における上記構成をもつプロセッサの動作について図１１を用いて説明する。なお、図８の命令１におけるNOP操作はMOV R7,R7で実現されているものとする。
【００４１】
図１１は、図８の機械命令プログラムがROM１に格納された場合におけるプロセッサの動作タイミング図である。同図は、プロセッサの動作をパイプラインのIFステージでROM１から読出される命令、DECステージで解読される命令、EXステージで実行される命令をマシンサイクルと呼ばれるタイミング毎に示している。以下、時間が経過する順にタイミング毎にその動作を説明する。
【００４２】
（タイミングt1）
・IFステージ：命令１
命令１がROM１から読出され、命令１のフラグ制御コード００および第１スロットから第３スロットがそれぞれＩ０ラッチ２１およびＩ１ラッチ２からＩ３ラッチ４に格納される。
【００４３】
（タイミングt2）
・DECステージ：命令１
Ｉ１ラッチ２に格納された命令１の第１スロットが第１命令解読器５で解読される。解読された結果としてLD操作であることが判明する。この解読に基づいてレジスタファイル８からレジスタR0が読出され、読出された値がＤ１１ラッチ１２に格納される。同時に、Ｉ２ラッチ３に格納された命令１の第２スロットが第２命令解読器６で解読される。解読された結果としてLD操作であることが判明する。この解読に基づいてレジスタファイル８からレジスタR1が読出され、読出された値がＤ１２ラッチ１３に格納される。さらに同時に、Ｉ３ラッチ４に格納された命令１の第３スロットが第３命令解読器７で解読される。解読された結果としてNOP操作（MOV R7,R7）であることが判明する。この解読に基づいてレジスタファイル８からレジスタR7が読出され、読出された値がＤ１３ラッチ１４に格納される。これらと同時に、Ｉ０ラッチ２１の値００がＤ０ラッチ２２に格納される。また分岐ユニット２６は第１命令解読器５から第３命令解読器７のいずれもが分岐操作を解読していないことから機能せず、従って命令フェッチユニット２７はシーケンシャルなフェッチを続けることになる。
・IFステージ：命令２
命令２がROM１から読出され、命令２のフラグ制御コード１１および第１スロットから第３スロットがそれぞれＩ０ラッチ２１およびＩ１ラッチ２からＩ３ラッチ４に格納される。
【００４４】
（タイミングt3）
・EXステージ：命令１
Ｄ１１ラッチ１２に格納されたレジスタR0の値をアドレスとしてメモリからデータを読み出す操作が第１操作ユニット１８にて行われ、読み出しデータはレジスタファイル８のレジスタR2に格納される。同時に、Ｄ１２ラッチ１３に格納されたレジスタR1の値をアドレスとしてメモリからデータを読み出す操作が第２操作ユニット１９にて行われ、読み出しデータはレジスタファイル８のレジスタR3に格納される。さらに同時に、Ｄ１３ラッチ１４に格納されたレジスタR7の値をそのまま出力する操作が第３操作ユニット２０にて行われ、出力データはレジスタファイル８のレジスタR7に格納される。これらと同時に、Ｄ０ラッチ２２の値００によりセレクタ２３は機能せず、フラグ生成ユニット２４はフラグレジスタ２５のいずれのフラグも更新しない。
・DECステージ：命令２
Ｉ１ラッチ２に格納された命令２の第１スロットが第１命令解読器５で解読される。解読された結果としてMUL操作であることが判明する。この解読に基づいてレジスタファイル８からレジスタR2とR3とが読出され、読出された値がそれぞれＤ１１ラッチ１２とＤ２１ラッチ１５とに格納される。同時に、Ｉ２ラッチ３に格納された命令２の第２スロットが第２命令解読器６で解読される。解読された結果としてSUB操作であることが判明する。この解読に基づいて命令中の即値４がＤ２セレクタ１０を経由してＤ１２ラッチ１３に格納されるとともに、レジスタファイル８からレジスタR0が読出され、読出された値がＤ２２ラッチ１６に格納される。さらに同時に、Ｉ３ラッチ４に格納された命令２の第３スロットが第３命令解読器７で解読される。解読された結果としてSUB操作であることが判明する。この解読に基づいて命令中の即値１がＤ３セレクタ１１を経由してＤ１３ラッチ１４に格納されるとともに、レジスタファイル８からレジスタR4が読出され、読出された値がＤ２３ラッチ１７に格納される。これらと同時に、Ｉ０ラッチ２１の値１１がＤ０ラッチ２２に格納される。また分岐ユニット２６は第１命令解読器５から第３命令解読器７のいずれもが分岐操作を解読していないことから機能せず、従って命令フェッチユニット２７はシーケンシャルなフェッチを続けることになる。
・IFステージ：命令３
命令３がROM１から読出され、命令２のフラグ制御コード００および第１スロットから第３スロットがそれぞれＩ０ラッチ２１およびＩ１ラッチ２からＩ３ラッチ４に格納される。
【００４５】
（タイミングt4）
・EXステージ：命令２
Ｄ１１ラッチ１２に格納されたレジスタR2の値とＤ２１ラッチ１５に格納されたレジスタR3の値との間で乗算操作が第１操作ユニット１８にて行われ、操作結果はレジスタファイル８のレジスタR3に格納される。同時に、Ｄ１２ラッチ１３に格納された値４とＤ２２ラッチ１６に格納されたレジスタR0の値との間で減算操作（R0から４を引く）が第２操作ユニット１９にて行われ、操作結果はレジスタファイル８のレジスタR0に格納される。さらに同時に、Ｄ１３ラッチ１４に格納された値１とＤ２３ラッチ１７に格納されたレジスタR4の値との間で減算操作（R4から１を引く）が第３操作ユニット２０にて行われ、操作結果はレジスタファイル８のレジスタR4に格納される。これらと同時に、Ｄ０ラッチ２２の値１１によりセレクタ２３は第３操作ユニット２０からの原始データ（この場合は、最上位ビットおよびその次位のビットの桁上げ、結果の最上位ビットおよび結果の全ビットがゼロか否かの情報）を選択し、フラグ生成ユニット２４は第３命令解読器７からの全フラグ更新の指示に基づきＣ、Ｖ、Ｎ、Ｚフラグを生成しフラグレジスタ２５を更新する。Ｃフラグは最上位ビットからの桁上げを、Ｖフラグは最上位ビットおよびその次位のビットの桁上げの排他的論理和を、Ｎフラグは結果の最上位ビットを、Ｚフラグは結果の全ビットがゼロである情報をフラグとして用いる。
・DECステージ：命令３
Ｉ１ラッチ２に格納された命令３の第１スロットが第１命令解読器５で解読される。解読された結果としてADD操作であることが判明する。この解読に基づいてレジスタファイル８からレジスタR3とR5とが読出され、読出された値がそれぞれＤ１１ラッチ１２とＤ２１ラッチ１５とに格納される。同時に、Ｉ２ラッチ３に格納された命令３の第２スロットが第２命令解読器６で解読される。解読された結果としてSUB操作であることが判明する。この解読に基づいて命令中の即値４がＤ２セレクタ１０を経由してＤ１２ラッチ１３に格納されるとともに、レジスタファイル８からレジスタR1が読出され、読出された値がＤ２２ラッチ１６に格納される。さらに同時に、Ｉ３ラッチ４に格納された命令２の第３スロットが第３命令解読器７で解読される。解読された結果としてBGT操作であることが判明する。これらと同時に、Ｉ０ラッチ２１の値００がＤ０ラッチ２２に格納される。また分岐ユニット２６は第３命令解読器７がBGT操作を解読していることに基づいて、同じタイミングで更新されたフラグレジスタ２５を参照して分岐条件、即ち「大なり（＞）」が満たされるか否かを判定し、満たされるならば第３スロット中の即値-2により２命令前からフェッチするように命令フェッチユニット２７に指示を与え、満たされないならば命令フェッチユニット２７に何も指示を与えず従って命令フェッチユニット２７はシーケンシャルなフェッチを続けることになる。なお、BGT操作における分岐条件の判定はＣフラグとＺフラグの否定との論理積が真ならば条件満足、偽ならば条件不満足として行われる。なおこのタイミングでは条件が満たされるものとする。
【００４６】
（タイミングt5）
・EXステージ：命令３
Ｄ１１ラッチ１２に格納されたレジスタR3の値とＤ２１ラッチ１５に格納されたレジスタR5の値との間で加算操作が第１操作ユニット１８にて行われ、操作結果はレジスタファイル８のレジスタR5に格納される。同時に、Ｄ１２ラッチ１３に格納された値４とＤ２２ラッチ１６に格納されたレジスタR1の値との間で減算操作（R1から４を引く）が第２操作ユニット１９にて行われ、操作結果はレジスタファイル８のレジスタR1に格納される。さらに同時に、Ｄ１３ラッチ１４に格納された値-2に基づいて分岐操作が第３操作ユニット２０にて行われる。これらと同時に、Ｄ０ラッチ２２の値００によりセレクタ２３は機能せず、フラグ生成ユニット２４はフラグレジスタ２５のいずれのフラグも更新しない。
・IFステージ：命令１
タイミングt4での分岐ユニット２６における分岐条件が満たされたことにより、命令フェッチユニット２７は再び命令１をROM１から読出し、命令１のフラグ制御コード００および第１スロットから第３スロットがそれぞれＩ０ラッチ２１およびＩ１ラッチ２からＩ３ラッチ４に格納される。
【００４７】
以下、命令３における分岐条件が満たされなくなるまで、タイミングt2からt5に記す動作を繰り返すことになる。
【００４８】
なお、上記の動作例ではフラグ制御コードが１１のときだけを説明したが、１１以外のときも全く同様である。即ち、フラグ制御コードが０１または１０の場合は、セレクタ２３はそれぞれ第１操作ユニット１８または第２操作ユニット１９からの原始データを選択し、フラグ生成ユニット２４はそれぞれ第１命令解読器５または第２命令解読器６からのフラグ更新の指示に基づき各フラグを生成しフラグレジスタ２５を更新する。どのフラグを生成し更新するかはオペコード指定される操作の内容で決まる。
【００４９】
３．記録媒体
本発明の記録媒体の実施の形態として、図８の機械命令プログラムを記録した磁気ディスク（フロッピーディスクやハードディスクなど）、光ディスク（CD-ROMやPDなど）、光磁気ディスク、半導体メモリ（ROMやフラッシュメモリなど）がある。
【００５０】
以上のように本実施の形態によれば、スロットに指定できるオペレーションが制限されず並列度の向上が保たれたまま、コンパイラのフラグ制御コード生成部１２２がフラグを変化させる操作を含むスロットを特定してフラグ制御コードを生成するためにオペコードの長さが短くなって、コード効率が向上する。図１７および図１８の従来技術では１命令が６４ビットであるのに対して本実施形態では１命令が３２ビットで同様の機能を指定できることから、コード効率が２倍高くなっていることがわかる。
【００５１】
なお、本実施形態のプロセッサでは、３つの命令解読器と３つの操作ユニットを設けて最大３並列実行を達成しているが、これらを４つずつ設けて４並列実行してもよいし、あるいはそれ以上であってもよい。４並列実行の場合は、フラグ制御コードを３ビットにして第１から第４スロットの操作のフラグへの反映といずれのスロットも反映させないこととを指定するようにしてもよいし、フラグ制御コードは２ビットのままにしておいて第１から第４スロットのいずれかの操作をフラグへ反映するようにして、フラグを変化させない場合はフラグ反映が指定されたスロットにはフラグ変化を伴わない操作を指定するようにしてもよいし、同じくフラグ制御コードは２ビットのままにしておいて第１から第３スロットの操作のフラグへの反映といずれのスロットも反映させないこととを指定するようにして、第４スロットの操作はフラグへ反映されないとしてもよい。
【００５２】
（実施の形態２）
実施の形態２は、実施の形態１のフラグ制御コードを、第１スロットの操作の結果をフラグに反映させるか、第１と第２スロットの操作の結果をこの順にフラグに反映させるか、第１から第３スロットの操作の結果をこの順にフラグに反映させるか、いずれのスロットの操作もフラグに反映させないかを指定するものに代えたものである。
【００５３】
１．コンパイラ
コンパイラの構成および動作は、フラグ制御コード生成部１２２の動作を除いて実施の形態１に記したものと同じである。フラグ制御コード生成部１２２は次の原理に基づいて動作する。
【００５４】
フラグ制御コード生成部１２２は、第１スロットの操作の結果をフラグに反映させると判断するとフラグ制御コードを０１にし、第１と第２スロットの操作の結果をこの順にフラグに反映させると判断するとフラグ制御コードを１０にし、第１から第３スロットの操作の結果をこの順にフラグに反映させると判断するとフラグ制御コードを１１にし、いずれのスロットの操作もフラグに反映させないと判断するとフラグ制御コードを００にする。
【００５５】
２．プロセッサ
２．１  命令の構成
図１２は本発明の第２の実施形態におけるプロセッサの命令構成図である。命令フォーマットは同図（ａ）に示すように、図９（ａ）に示す第１の実施形態におけるプロセッサの命令フォーマットと同一であり、同図（ｂ）に示すビット列の内、フラグ制御コードのビット割り付けのみが異なっている。即ち、フラグが変化するオペレーションは同時にいくつも指定できるが、指定できるスロットはフラグを反映させるオペレーションの数により制限される。第１スロットの操作の結果をフラグに反映するときはフラグ制御コードを０１に、第１と第２スロットの操作の結果をこの順にフラグに反映するときはフラグ制御コードを１０に、第１から第３スロットの操作の結果をこの順にフラグに反映するときはフラグ制御コードを１１にし、いずれのスロットの操作の結果もフラグに反映しないときはフラグ制御コードを００にする。
【００５６】
２．２  プロセッサの構成
図１３は、同実施形態におけるプロセッサの概略構成図である。
【００５７】
図１３において実施の形態１におけるプロセッサと同一の構成要素には同一の符号を付している。３１と３２と３３は、それぞれ実施の形態１のプロセッサにおける第１命令解読器５と第２命令解読器６と第３命令解読器７の機能に加えて、変化するフラグの種別を識別する２ビットの情報を出力する第１命令解読器と第２命令解読器と第３命令解読器であり、上記２ビットの情報はいずれも、００のときはいずれのフラグも変化しないことを、０１のときはＺフラグのみが変化することを、１０のときはＮフラグとＺフラグが変化することを、１１のときは全てのフラグが変化することを示す。また３４は第１命令解読器３１からの上記２ビットの情報を保持するＤ３ラッチ、３５は第２命令解読器３２からの上記２ビットの情報を保持するＤ４ラッチ、３６は第３命令解読器３３からの上記２ビットの情報を保持するＤ５ラッチである。３７は、Ｄ３ラッチ３４の値（これをG1とする）、Ｄ４ラッチ３５の値（これをG2とする）、Ｄ５ラッチ３６の値（これをG3とする）およびＤ０ラッチ２２の内容（これをFCとする）に基づいて、第１操作ユニット１８から第３操作ユニット２０からの原始データを用いてＣ、Ｖ、Ｎ、Ｚフラグを生成するフラグ生成リオーダユニットである。その他の構成は、実施の形態１におけるプロセッサと同一である。
【００５８】
図１４はフラグ生成リオーダユニット３７の各フラグの生成論理を示した真理値表であり、G1、G2、G3およびFCにより、Ｃフラグの生成論理SC、Ｖフラグの生成論理SV、Ｎフラグの生成論理SNおよびＺフラグの生成論理SZを決定する。SCからSZの欄の「１」は各フラグを第１操作ユニット１８からの原始データを用いて生成することを示し、「２」は各フラグを第２操作ユニット１９からの原始データを用いて生成することを示し、「３」は各フラグを第３操作ユニット２０からの原始データを用いて生成することを示し、「０」はフラグを変化させないことを示す。またG1からG3の欄の「＊＊」は無視（don't care）を意味する。原始データは、最上位ビットおよびその次位のビットの桁上げ、結果の最上位ビットおよび結果の全ビットがゼロか否かの情報で構成され、Ｃフラグは最上位ビットからの桁上げを、Ｖフラグは最上位ビットおよびその次位のビットの桁上げの排他的論理和を、Ｎフラグは結果の最上位ビットを、Ｚフラグは結果の全ビットがゼロである情報をフラグとして用いる点は、第１の実施形態のプロセッサと同じである。
【００５９】
２．３  プロセッサの動作例
以下に、図１６の命令Ａが実行される場合のプロセッサの動作について説明する。
【００６０】
命令Ａのフラグ制御コードは１１、第１スロットはR0とR1の和を求め結果をR1に格納するADD操作、第２スロットはR2とR3の論理和を求め結果をR3に格納するSUB操作、第３スロットはR4とゼロとを比較するTST操作である。
・IFステージ
命令ＡがROM１から読出され、命令Ａのフラグ制御コード１１および第１スロットから第３スロットがそれぞれＩ０ラッチ２１およびＩ１ラッチ２からＩ３ラッチ４に格納される。
・DECステージ（IFステージの動作のマシンサイクル）
Ｉ１ラッチ２に格納された命令Ａの第１スロットが第１命令解読器３１で解読される。解読された結果としてADD操作であることが判明する。この解読に基づいてレジスタファイル８からレジスタR0とR1とが読出され、読出された値がそれぞれＤ１１ラッチ１２とＤ２１ラッチ１５とに格納される。同時に、Ｉ２ラッチ３に格納された命令Ａの第２スロットが第２命令解読器３２で解読される。解読された結果としてOR操作であることが判明する。この解読に基づいてレジスタファイル８からレジスタR2とR3とが読出され、読出された値がそれぞれＤ１２ラッチ１３とＤ２２ラッチ１６とに格納される。さらに同時に、Ｉ３ラッチ４に格納された命令Ａの第３スロットが第３命令解読器３３で解読される。解読された結果としてTST操作であることが判明する。この解読に基づいてレジスタファイル８からレジスタR4が読出され、読出された値がＤ２３ラッチ１７に格納される。これらと同時に、Ｉ０ラッチ２１の値１１がＤ０ラッチ２２に格納され、第１命令解読器３１でADD操作が解読されることにより値１１（ADD操作は全てのフラグが変化）がＤ３ラッチ３４に格納され、第２命令解読器３２でOR操作が解読されることにより値１０（OR操作はＮフラグとＺフラグが変化）がＤ４ラッチ３５に格納され、第３命令解読器３３でTST操作が解読されることにより値０１（TST操作はＺフラグのみが変化）がＤ５ラッチ３６に格納される。また分岐ユニット２６は第１命令解読器５から第３命令解読器７のいずれもが分岐操作を解読していないことから機能せず、従って命令フェッチユニット２７はシーケンシャルなフェッチを続けることになる。
・EXステージ（DECステージの動作のマシンサイクル）
Ｄ１１ラッチ１２に格納されたレジスタR0の値とＤ２１ラッチ１５に格納されたレジスタR1の値との間で加算操作が第１操作ユニット１８にて行われ、操作結果はレジスタファイル８のレジスタR1に格納される。同時に、Ｄ１２ラッチ１３に格納されたレジスタR2の値とＤ２２ラッチ１６に格納されたレジスタR3の値との間で論理和操作が第２操作ユニット１９にて行われ、操作結果はレジスタファイル８のレジスタR3に格納される。さらに同時に、Ｄ２３ラッチ１７に格納されたレジスタR4の値とゼロとの間で比較操作（R4から０を引く）が第３操作ユニット２０にて行われ、操作結果はどこにも格納されない。これらと同時に、Ｄ０ラッチ２２の値１１によりFC=11が、Ｄ３ラッチ３４の値１１によりG1=11が、Ｄ４ラッチ３５の値１０によりG2=10が、Ｄ５ラッチ３６の値０１によりG3=01がそれぞれフラグ生成リオーダユニット３７に入力され、図１５の下から７つ目の欄に示すように、SC=1に基づいて第１操作ユニット１８の最上位ビットからの桁上げをＣフラグとし、SV=1に基づいて第１操作ユニット１８の最上位ビットおよびその次位のビットの桁上げの排他的論理和をＶフラグとし、SN=2に基づいて第２操作ユニット１９の結果の最上位ビットをＮフラグとし、SZ=3に基づいて第３操作ユニット２０の結果の全ビットがゼロである情報をＺフラグとしてＣ、Ｖ、Ｎ、Ｚフラグを生成しフラグレジスタ２５を更新する。このようにフラグ生成リオーダユニット３７は、ADD操作とSUB操作とTST操作とをあたかもこの順に逐次実行したかのようにフラグ生成を行う。
【００６１】
なお、上記の動作例ではFC=11かつG1=11かつG2=10かつG3=01のときだけを説明したが、これ以外のときも全く同様である。即ち、図１４、図１５の真理値表に従ってＣ、Ｖ、Ｎ、Ｚフラグのそれぞれを第１操作ユニット１８から第３操作ユニット２０の原始データを用いて生成すればよい。
【００６２】
３．記録媒体
本発明の記録媒体の実施の形態として、図１６の命令を記録した磁気ディスク（フロッピーディスクやハードディスクなど）、光ディスク（CD-ROMやPDなど）、光磁気ディスク、半導体メモリ（ROMやフラッシュメモリなど）がある。
【００６３】
以上のように本実施の形態によれば、第１の実施形態と同様にコード効率が向上することに加えて、フラグを変化させる操作の位置とフラグ変化の順序とを特定するフラグ制御コードを生成することにより、複数のスロットでフラグが変化するオペレーションを指定することができ、一層の並列度向上が見込まれる。これは例えば、ADD操作におけるオーバフローの有無とSUB操作における結果の符号とTST操作における比較結果との三者のそれぞれにより多方向に分岐するような場合に、ADD操作のＶフラグとSUB操作のＮフラグとTST操作のＺフラグがいずれもフラグレジスタ２５に反映されるため、図１６の命令Ａのように１つの命令で３つの操作を並列に実行することができるからである。
【００６４】
なお、本実施形態のプロセッサでは、１つの操作をフラグに反映させる場合、２つの操作をフラグに反映させる場合、３つの操作をフラグに反映させる場合のそれぞれについて１通りずつを指定できる２ビットのフラグ制御コードを持たせているが、このビット数を増やして、１つの操作をフラグに反映させる場合における操作の選択の３通りと、２つの操作をフラグに反映させる場合における操作の選択と順序の６通りと、３つの操作をフラグに反映させる場合における順序の６通りの全てまたは一部を指定するようにしてもよい。
【００６５】
また、３つの命令解読器と３つの操作ユニットを設けて最大３並列実行を達成しているが、これらを４つずつ設けて４並列実行してもよいし、あるいはそれ以上であってもよい。
【００６６】
以上、本発明に係るコンパイラ及びプロセッサについて、上記の２つの実施形態に基づいて説明したが、本発明はこれら実施形態に限られないことは勿論である。即ち、
（１）上記の２つの実施形態では、コンパイラにおいて、フラグ制御コード生成部１２２が機械命令生成時にフラグ制御コードを生成しているが、並列中間コード生成部１２１が並列中間コード生成時にフラグ制御コードを生成するようにしてもよい。
（２）上記の２つの実施形態のプロセッサは、命令フェッチ、解読、実行の３段パイプラインで構成されるとしているが、パイプラインの段数は何段であってもよいし、パイプラインを採らなくともよい。
【００６７】
【発明の効果】
以上の説明から明らかなように、本発明に係るコンパイラ、プロセッサおよび記録媒体は、フラグが変化する操作記述とフラグが変化しない操作記述との２種類を持たせる必要がないために操作記述の長さが長くならず、また機械命令が含み得る操作記述に制限がないために、コード効率の向上と命令並列度の向上とが同時に図られ、特にマルチメディア関連の製品開発において非常に有用であり、マルチメディア関連産業の進歩発展に多大な貢献をするものである。
【図面の簡単な説明】
【図１】実施形態に係るコンパイラの構成を示すブロック図
【図２】同実施形態に係るコンパイラの機械命令生成部１０７の構成を示すブロック図
【図３】同実施形態に係るコンパイラのフラグ制御コード生成部１２２におけるフラグ制御コードの生成フローを示したフローチャート
【図４】Ｃ言語プログラムの例を示すプログラムリストを示す図
【図５】図４に示すＣ言語プログラムを入力として与えた場合に、同実施形態に係るコンパイラの逐次中間コード用バッファ１０６に格納された逐次中間コードプログラムを示したリストを示す図
【図６】図５に示す逐次中間コードプログラムにおける依存関係のパラメータ化に関する説明図
【図７】図４に示すＣ言語プログラムを入力として与えた場合に、同実施形態に係るコンパイラの並列中間コード生成部１２１が生成する並列中間コードプログラムを示したリストを示す図
【図８】図４に示すＣ言語プログラムを入力として与えた場合に、同実施形態に係るコンパイラにより生成された機械命令プログラムを示したリストを示す図
【図９】実施形態１に係るプロセッサの命令構成図
【図１０】同実施形態に係るプロセッサの概略構成図
【図１１】同実施形態に係るプロセッサの図８の機械命令プログラムに対応した動作タイミング図
【図１２】実施形態２に係るプロセッサの命令構成図
【図１３】同実施形態に係るプロセッサの概略構成図
【図１４】同実施形態に係るプロセッサのフラグ生成リオーダユニット３４の各フラグの生成論理を示した真理値表図
【図１５】同実施形態に係るプロセッサの機械命令の例示図
【図１６】同実施形態に係るプロセッサの機械命令の例示図
【図１７】従来技術におけるプロセッサの命令構成図
【図１８】同従来技術におけるプロセッサの概略構成図
【符号の説明】
１  ROM
２  Ｉ１ラッチ
３  Ｉ２ラッチ
４  Ｉ３ラッチ
５  第１命令解読器
６  第２命令解読器
７  第３命令解読器
８  レジスタファイル
９  Ｄ１セレクタ
１０  Ｄ２セレクタ
１１  Ｄ３セレクタ
１２  Ｄ１１ラッチ
１３  Ｄ１２ラッチ
１４  Ｄ１３ラッチ
１５  Ｄ２１ラッチ
１６  Ｄ２２ラッチ
１７  Ｄ２３ラッチ
１８  第１操作ユニット
１９  第２操作ユニット
２０  第３操作ユニット
２１  Ｉ０ラッチ
２２  Ｄ０ラッチ
２３  セレクタ
２４  フラグ生成ユニット
２５  フラグレジスタ
２６  分岐ユニット
２７  命令フェッチユニット
３１  第１命令解読器
３２  第２命令解読器
３３  第３命令解読器
３４  Ｄ３ラッチ
３５  Ｄ４ラッチ
３６  Ｄ５ラッチ
３７  フラグ生成リオーダユニット
１０１  Ｃ言語プログラム
１０２  コンパイラ
１０３  ファイル読込部
１０４  読込用バッファ
１０５  構文解析部
１０６  逐次中間コード用バッファ
１０７  機械命令生成部
１０８  出力用バッファ
１０９  ファイル出力部
１１０  機械命令プログラム
１２０  依存関係抽出部
１２１  並列中間コード生成部
１２２  フラグ制御コード生成部
【図１】
0004006887.tif 000002
【図２】
0004006887.tif 000003
【図３】
0004006887.tif 000004
【図４】
0004006887.tif 000005
【図５】
0004006887.tif 000006
【図６】
0004006887.tif 000007
【図７】
0004006887.tif 000008
【図８】
0004006887.tif 000009
【図９】
0004006887.tif 000010
【図１０】
0004006887.tif 000011
【図１１】
0004006887.tif 000012
【図１２】
0004006887.tif 000013
【図１３】
0004006887.tif 000014
【図１４】
0004006887.tif 000015
【図１５】
0004006887.tif 000016
【図１６】
0004006887.tif 000017
【図１７】
0004006887.tif 000018
【図１８】
0004006887.tif 000019