(57)【要約】【課題】回路規模が小さく、かつ低消費電力でループ処理を高速に実行することができるプロセッサを提供する。【解決手段】デコード部２０と演算部４０等を備え、デコード部が命令「ｊｌｏｏｐ  Ｃ６，Ｃ１：Ｃ４，ＴＡＲ，Ｒａ」を解読すると、（１）レジスタＲａが０より小さい場合にコンディションフラグＣ４に０をセットし、（２）コンディションフラグＣ２の値をコンディションフラグＣ１に転送し、コンディションフラグＣ３の値をコンディションフラグＣ２に転送し、コンディションフラグＣ４の値をコンディションフラグＣ３とＣ６に転送し、（３）レジスタＲａに−１を加算し、レジスタＲａに格納し、（４）分岐レジスタ（ＴＡＲ）示すアドレスに分岐する。ジャンプバッファに分岐先の命令が充填されていない場合は、分岐先の命令を充填する。【選択図】図１
2007102821.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラ装置であって、
前記ソースプログラムを構文解析するパーサー手段と、
解析された前記ソースプログラムを中間コードに変換する中間コード変換手段と、
前記中間コードを最適化する最適化手段と、
最適化された前記中間コードを機械語命令に変換するコード生成手段とを備え、
前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
前記最適化手段は、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のプロログ部に前記ループの直前に実行される命令を配置する
ことを特徴とするコンパイラ装置。
【請求項２】
ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラ装置であって、
前記ソースプログラムを構文解析するパーサー手段と、
解析された前記ソースプログラムを中間コードに変換する中間コード変換手段と、
前記中間コードを最適化する最適化手段と、
最適化された前記中間コードを機械語命令に変換するコード生成手段とを備え、
前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
前記最適化手段は、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のエピログ部に前記ループの直後に実行される命令を配置する
ことを特徴とするコンパイラ装置。
【請求項３】
ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイル方法であって、
前記ソースプログラムを構文解析するパーサーステップと、
解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
前記中間コードを最適化する最適化ステップと、
最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、
前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のプロログ部に前記ループの直前に実行される命令を配置する
ことを特徴とするコンパイル方法。
【請求項４】
ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイル方法であって、
前記ソースプログラムを構文解析するパーサーステップと、
解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
前記中間コードを最適化する最適化ステップと、
最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、
前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のエピログ部に前記ループの直後に実行される命令を配置する
ことを特徴とするコンパイル方法。
【請求項５】
ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンピュータ実行可能なプログラムであって、
前記ソースプログラムを構文解析するパーサーステップと、
解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
前記中間コードを最適化する最適化ステップと、
最適化された前記中間コードを機械語命令に変換するコード生成ステップとをコンピュータに実行させ、
前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のプロログ部に前記ループの直前に実行される命令を配置する
ことを特徴とするコンピュータ実行可能なプログラム。
【請求項６】
ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンピュータ実行可能なプログラムであって、
前記ソースプログラムを構文解析するパーサーステップと、
解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
前記中間コードを最適化する最適化ステップと、
最適化された前記中間コードを機械語命令に変換するコード生成ステップとをコンピュータに実行させ、
前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のエピログ部に前記ループの直後に実行される命令を配置する
ことを特徴とするコンピュータ実行可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＤＳＰ（Digital Signal Processor）やＣＰＵ（Central Processing Unit）等のプロセッサおよびそのプロセッサで実行される命令を生成するコンパイラに関し、特に、音声や画像等の信号処理に好適なプロセッサおよびコンパイラに関する。
【背景技術】
【０００２】
マルチメディア技術の発展に伴い、音声や画像の信号処理等に代表されるメディア処理を高速に実行するプロセッサが求められている。その要求に応える従来のプロセッサとして、ＳＩＭＤ（Single Instruction Multiple Data）型の命令をサポートしているプロセッサがある。例えば、米国インテル社のＰｅｎｔｉｕｍ（登録商標）／同III／同４のＭＭＸ／ＳＳＥ／ＳＳＥ２等である。インテル社のＭＭＸであれば、６４ビット長のＭＭＸレジスタに格納された最大８個の整数を対象として、１つの命令で同一のオペレーションを実行することができる。
【０００３】
このような従来のプロセッサでは、ソフトウェアパイプライニングにより処理の高速化を行なっている（非特許文献１参照。）。
【０００４】
図５６は、従来の４段のソフトウェアパイプライニングによる動作を示す図である。ソフトウェアパイプライニングを実現するため、命令を実行するか否かを示すプレディケートに用いられるフラグはプレディケートレジスタに記憶されている。また、それとは別にソフトウェアパイプライニングのプロログ部が終了するまでの回数がループカウンタに記憶され、エピログ部が終了するまでの回数がエピログカウンタに記憶されている。
【非特許文献１】オーム社開発局著「ＩＡ−６４プロセッサ基本講座」オーム社、１９９９年８月２５日、ｐ．１２９の図４．３２
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述の従来のプロセッサでは、ループカウンタ、エピログカウンタおよびプレディケートカウンタを別ハードウェア資源として管理している。このため、プロセッサ内に資源を多く持つ必要があり、回路規模が大きくなるという問題がある。
【０００６】
また、回路規模が大きくなるに伴い消費電力が大きくなるという問題もある。
そこで、本発明は、このような状況に鑑みてなされたものであり、回路規模が小さく、かつ低消費電力でループ処理を高速に実行することができるプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明に係るプロセッサは、命令を解読し実行するプロセッサであって、条件実行命令のプレディケートに用いられる複数の条件実行用フラグが記憶されたフラグレジスタと、命令を解読する解読手段と、ループ命令が前記解読手段によって解読された場合に、対象となるループをソフトウェアパイプライニングによって条件実行命令に展開した場合のエピログ部に対応する前記複数の条件実行用フラグのうちのいずれかの値に基づいて、前記ループの繰り返し処理を終了する実行手段とを備えることを特徴とする。
【０００８】
このように、ループの繰り返し処理の終了の判断が、ループをソフトウェアパイプライニングによって条件実行命令に展開した場合のエピログ部の条件実行用フラグに基づいて行われる。このため、ループ処理終了の判断のためにカウンタ等の特別なハードウェア資源を用いる必要がなく、回路規模が大きくなることはない。また、それに伴いプロセッサの消費電力を小さくすることができる。
【０００９】
また、前記フラグレジスタには、前記終了の判断に用いられるループ用フラグがさらに記憶され、前記実行手段は、前記エピログ部における前記複数の条件実行用フラグのうちのいずれかの値を前記ループ用フラグに書き込むようにしてもよい。たとえば、前記実行手段は、前記ソフトウェアパイプライニングの段数をＮ段（Ｎは３以上の整数）とし、パイプラインの段数は、前記エピログ部において処理が終了する順に昇順に数えるものとした場合に、（Ｎ−２）段目のパイプラインで実行される条件実行命令に対応する条件実行用フラグの値を、前記エピログ部において１サイクル後における前記ループ用フラグに書き込むようにする。
【００１０】
このように、ソフトウェアパイプライニングの段数により特定される条件実行用フラグの値を用いて、ループの終了の判断を行っている。このため、ソフトウェアパイプライニングの段数に関わらず、ループ処理終了の判断のためにカウンタ等の特別なハードウェア資源を用いる必要がなく、回路規模が大きくなることはない。また、それに伴いプロセッサの消費電力を小さくすることができる。
【００１１】
また、上述のプロセッサは、前記解読手段で解読される前記命令を一時的に記憶する命令バッファをさらに含み、前記解読手段は、前記エピログ部における前記条件実行用フラグの値に基づいて前記条件実行命令を実行しないと判断した場合には、前記ループが終了するまでの間前記命令バッファから前記条件実行命令を読み出さないようにしてもよい。
【００１２】
このように、エピログ部において条件実行命令が実行されなくなると、着目しているループ処理が終了するまでの間、そのソフトウェアパイプライニングでは、条件実行命令は実行されない。このため、その間、命令バッファから条件実行命令を読み出す必要がなく、それに伴いプロセッサの消費電力を小さくすることができる。
【００１３】
本発明の他の局面に係るコンパイラは、ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラであって、前記ソースプログラムを構文解析するパーサーステップと、解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、前記中間コードを最適化する最適化ステップと、最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のプロログ部に前記ループの直前に実行される命令を配置することを特徴とする。
【００１４】
このように、ループをソフトウェアパイプライニングにより展開した場合のプロログ部にループの直前に実行される命令を配置する。このため、ソフトウェアパイプライニングの空きステージを減らすことができ、高速にプログラムを実行することができる。それに伴い、このコンパイラでコンパイルされたプログラムを実行するプロセッサの消費電力を小さくすることができる。
【００１５】
本発明のさらに他の局面に係るコンパイラは、ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラであって、前記ソースプログラムを構文解析するパーサーステップと、解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、前記中間コードを最適化する最適化ステップと、最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、前記最適化ステップでは、前記中間コードに条件分岐命令が含まれている場合には、当該条件を満たす場合の条件実行命令のプレディケートに用いられるフラグと、当該条件を満たさない場合の条件実行命令のプレディケートに用いられるフラグとを異ならせて割付けることを特徴とする。
【００１６】
このように、例えばＣ言語におけるＩＦ−ＥＬＳＥ文のように所定条件の成立時に実行される命令と不成立時に実行される命令とが異なっていても、プレディケートに用いられるフラグを異ならせてそれぞれの命令に対応付ける。このことにより、フラグの値を変えるだけで条件分岐命令と等価な処理を実現することができる。このように簡易な処理で条件分岐命令を実現できるため、このコンパイラでコンパイルされたプログラムを実行するプロセッサの消費電力を小さくすることができる。
【００１７】
なお、本発明は、このような特徴的な命令を実行するプロセッサや特徴的な命令を生成するコンパイラとして実現することができるだけでなく、複数のデータ等に対する演算処理方法として実現したり、特徴的な命令を含むプログラムとして実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ等の記録媒体やインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
【発明の効果】
【００１８】
本発明に係るプロセッサによると、回路規模が小さく、かつ低消費電力でループ処理を高速に実行することができるプロセッサを提供することができる。
【発明を実施するための最良の形態】
【００１９】
本発明に係るプロセッサのアーキテクチャについて説明する。本プロセッサの命令は通常のマイコンに比べて並列性が高く、ＡＶメディア系信号処理技術分野をターゲットとして開発された汎用プロセッサである。携帯電話、モバイルＡＶ機器、デジタルＴＶ、ＤＶＤ等に共通コアを使用することにより、ソフト再利用性を向上させることができる。また、本プロセッサは、高性能・高コストパフォーマンスで多くのメディア処理を実現することができ、さらに、開発効率向上を目的とした高級言語開発環境を提供する。
【００２０】
図１は、本プロセッサの概略ブロック図である。本プロセッサ１は、命令制御部１０、デコード部２０、レジスタファイル３０、演算部４０、Ｉ／Ｆ部５０、命令メモリ部６０、データメモリ部７０、拡張レジスタ部８０及びＩ／Ｏインターフェース部９０から構成される。演算部４０は、ＳＩＭＤ型命令の演算を実行する算術論理・比較演算器４１〜４３，４８、乗算・積和演算器４４、バレルシフタ４５、除算器４６及び変換器４７からなる。乗算・積和演算器４４は、ビット精度を落とさないように、最長で６５ビットで累算する。また、乗算・積和演算器４４は、算術論理・比較演算器４１〜４３，４８と同様、ＳＩＭＤ型命令の実行が可能である。更に、このプロセッサ１は、算術論理・比較演算命令が最大４並列実行可能である。
【００２１】
図２は、算術論理・比較演算器４１〜４３，４８の概略図を示す。算術論理・比較演算器４１〜４３，４８それぞれは、ＡＬＵ部４１ａ、飽和処理部４１ｂ及びフラグ部４１ｃから構成される。ＡＬＵ部４１ａは、算術演算器、論理演算器、比較器、ＴＳＴ器からなる。対応する演算データのビット幅は、８ビット(演算器を４並列で使用)、１６ビット(演算器を２並列で使用)、３２ビットである(全演算器で３２ビットデータ処理)。更に算術演算結果に対しては、フラグ部４１ｃ等により、オーバーフローの検出とコンディションフラグの生成が行われる。各演算器、比較器、ＴＳＴ器の結果は、算術右シフト、飽和処理部４１ｂによる飽和、最大・最小値検出、絶対値生成処理が行われる。
【００２２】
図３は、バレルシフタ４５の構成を示すブロック図である。バレルシフタ４５は、セレクタ４５ａ、４５ｂ、上位バレルシフタ４５ｃ、下位バレルシフタ４５ｄ及び飽和処理部４５ｅから構成され、データの算術シフト(２の補数体系のシフト)または、論理シフト(符号なしシフト)を実行する。通常は、３２ビットもしくは、６４ビットのデータを入出力としている。レジスタ３０ａ、３０ｂに格納された被シフトデータに対して、別のレジスタまたは即値でシフト量が指定される。データは、左６３ビット〜右６３ビットの算術または論理シフトが行われ、入力ビット長で出力される。
【００２３】
また、バレルシフタ４５は、ＳＩＭＤ型命令に対して、８、１６、３２、６４ビットのデータをシフトすることができる。例えば、８ビットデータのシフトを４並列で処理することができる。
【００２４】
算術シフトは、２の補数体系のシフトであり、加算や減算時の小数点の位置合わせや、２のべき乗の乗算(２、２の２乗、２の（−１）乗、２の（−２）乗倍など)等のために行われる。
【００２５】
図４は、変換器４７の構成を示すブロック図である。変換器４７は、飽和ブロック(SAT)４７ａ、BSEQブロック４７ｂ、MSKGENブロック４７ｃ、VSUMBブロック４７ｄ、BCNTブロック４７ｅ及びILブロック４７ｆから構成される。
【００２６】
飽和ブロック(SAT)４７ａは、入力データに対する飽和処理を行う。３２ビットデータを飽和処理するブロックを２つ持つことにより、２並列のＳＩＭＤ型命令をサポートする。
【００２７】
BSEQブロック４７ｂは、MSBから連続する０か１をカウントする。
MSKGENブロック４７ｃは、指定されたビット区間を１、それ以外を０として出力する。
【００２８】
VSUMBブロック４７ｄは、入力データを指定されたビット幅に区切り、その総和を出力する。
【００２９】
BCNTブロック４７ｅは、入力データで１となっているビットの数をカウントする。
ILブロック４７ｆは、入力データを指定されたビット幅に区切り、各データブロックを入れ換えた値を出力する。
【００３０】
図５は、除算器４６の構成を示すブロック図である。除算器４６は、被除数を６４ビット、除数を３２ビットとし、商と剰余を３２ビットずつ出力する。商と剰余を求めるまでに３４サイクルを必要とする。符号付き、符号なし、両方のデータを扱うことが可能である。ただし、被除数と除数において符号の有無の設定は共通とする。その他、オーバーフローフラグ、０除算フラグを出力する機能を有する。
【００３１】
図６は、乗算・積和演算器４４の構成を示すブロック図である。乗算・積和演算器４４は、２つの３２ビット乗算器（MUL）４４ａ、４４ｂ、３つの６４ビット加算器（Adder）４４ｃ〜４４ｅ、セレクタ４４ｆ及び飽和処理部（Saturation）４４ｇから構成され、以下の乗算、積和演算を行う。
【００３２】
・３２×３２ビットのsignedの乗算、積和、積差演算
・３２×３２ビットのunsignedの乗算
・１６×１６ビットの２並列のsignedの乗算、積和、積差演算
・３２×１６ビットの２並列のsignedの乗算、積和、積差演算
【００３３】
これらの演算を整数、固定小数点フォーマット（ｈ１、ｈ２、ｗ１、ｗ２）のデータに対して行う。また、これらの演算に対し、丸め、飽和を行う。
【００３４】
図７は、命令制御部１０の構成を示すブロック図である。命令制御部１０は、命令キャッシュ１０ａ、アドレス管理部１０ｂ、命令バッファ１０ｃ〜１０ｅ，１０ｈ、ジャンプバッファ１０ｆ及びローテーション部（rotation）１０ｇから構成され、通常時及び分岐時の命令供給を行う。１２８ビットの命令バッファを４つ（命令バッファ１０ｃ〜１０ｅ，１０ｈ）持つことにより、最大並列実行数に対応している。命令制御部１０は、分岐処理に関しては、分岐実行前に、分岐先の命令をジャンプバッファ１０ｆに格納しておくとともに、後述するＴＡＲレジスタに予め分岐先アドレスを格納しておく(settar命令)。したがって、分岐時においては、命令制御部１０は、ＴＡＲレジスタに格納された分岐先アドレス、及び、ジャンプバッファ１０ｆに格納された分岐先命令を使用して、分岐を行う。
【００３５】
なお、本プロセッサ１はＶＬＩＷアーキテクチャを持つプロセッサである。ここで、ＶＬＩＷアーキテクチャとは、１つの命令語中に複数の命令(ロード、ストア、演算、分岐など)を格納し、それらを全て同時に実行するアーキテクチャである。プログラマは、並列実行可能な命令を１つの発行グループとして記述することによって、その発行グループを並列処理させることができる。本明細書では、発行グループの区切りを";;"で示す。以下に表記例を示す。
【００３６】
（例１）
mov r1, 0x23;;
この命令記述は、命令movのみを実行することを意味する。
（例２）
mov r1, 0x38
add r0, r1, r2
sub r3, r1, r2;;
これらの命令記述は、命令mov、add、subを３並列で実行することを意味する。
【００３７】
命令制御部１０は、発行グループを識別し、デコード部２０に送る。デコード部２０では、発行グループの命令を解析し、必要な資源を制御する。
【００３８】
次に、本プロセッサ１が備えるレジスタについて説明する。
本プロセッサ１のレジスタセットは、以下の表１に示される通りである。
【００３９】
【表１】
2007102821.tif 000003
【００４０】
また、本プロセッサ１のフラグセット（後述する条件フラグレジスタ等で管理されるフラグ）は、以下の表２に示される通りである。
【００４１】
【表２】
2007102821.tif 000004
【００４２】
図８は、汎用レジスタ（Ｒ０〜Ｒ３１）３０ａの構造を示す図である。汎用レジスタ（Ｒ０〜Ｒ３１）３０ａは、実行対象となっているタスクのコンテキストの一部を構成し、データまたはアドレスを格納する３２ビットのレジスタ群である。なお、汎用レジスタＲ３０およびＲ３１は、それぞれグローバルポインタ、スタックポインタとして、ハードウェアが使用する。
【００４３】
図９は、リンクレジスタ（ＬＲ）３０ｃの構造を示す図である。なお、このリンクレジスタ（ＬＲ）３０ｃと関連して、本プロセッサ１は、図示されていない退避レジスタ（ＳＶＲ）も備える。リンクレジスタ（ＬＲ）３０ｃは、関数コール時のリターンアドレスを格納する３２ビットのレジスタである。なお、退避レジスタ（ＳＶＲ）は、関数コール時の条件フラグレジスタのコンディションフラグ（CFR.CF）を退避する１６ビットのレジスタである。リンクレジスタ（ＬＲ）３０ｃは、後述する分岐レジスタ（ＴＡＲ）と同様に、ループ高速化にも使用される。下位１ビットは常に０が読み出されるが、書き込み時には０を書き込む必要がある。
【００４４】
例えば、call(brl,jmpl)命令を実行した場合には、本プロセッサ１は、リンクレジスタ（ＬＲ）３０ｃに戻りアドレスを退避し、退避レジスタ（ＳＶＲ）にコンディションフラグ(CFR.CF)を退避する。また、jmp命令を実行した場合には、リンクレジスタ（ＬＲ）３０ｃから戻りアドレス(分岐先アドレス)を取り出し、プログラムカウンタ（ＰＣ）を復帰させる。さらに、ret(jmpr)命令を実行した場合には、リンクレジスタ（ＬＲ）３０ｃから分岐先アドレス(戻りアドレス)を取り出し、プログラムカウンタ（ＰＣ）に格納(復帰)する。さらに、退避レジスタ（ＳＶＲ）からコンディションフラグを取り出し、条件フラグレジスタ（ＣＦＲ）３２のコンディションンフラグ領域CFR.CFに格納(復帰)する。
【００４５】
図１０は、分岐レジスタ（ＴＡＲ）３０ｄの構造を示す図である。分岐レジスタ（ＴＡＲ）３０ｄは、分岐ターゲットアドレスを格納する３２ビットのレジスタである。主に、ループの高速化に用いられる。下位１ビットは常に０が読み出されるが、書き込み時には０を書き込む必要がある。
【００４６】
例えば、jmp,jloop命令を実行した場合には、本プロセッサ１は、分岐レジスタ（ＴＡＲ）３０ｄから分岐先アドレスを取り出し、プログラムカウンタ（ＰＣ）に格納する。分岐レジスタ（ＴＡＲ）３０ｄに格納されたアドレスの命令が分岐用命令バッファに格納されている場合は、分岐ペナルティが０になる。分岐レジスタ（ＴＡＲ）３０ｄにループの先頭アドレスを格納しておくことでループを高速化することができる。
【００４７】
図１１は、プログラム状態レジスタ（ＰＳＲ）３１の構造を示す図である。プログラム状態レジスタ（ＰＳＲ）３１は、実行対象となっているタスクのコンテキストの一部を構成し、以下に示されるプロセッサ状態情報を格納する３２ビットのレジスタである。
【００４８】
ビットＳＷＥ：ＶＭＰ（Virtual Multi-Processor）のＬＰ（Logical Processor）切替えイネーブルを示す。「０」はＬＰ切替え不許可を示し、「１」はＬＰ切替え許可を示す。
【００４９】
ビットＦＸＰ：固定小数点モードを示す。「０」はモード０を示し、「１」はモード１を示す。
【００５０】
ビットＩＨ：割込み処理フラグであり、マスカブル割込み処理中であることを示す。「１」は割込み処理中であることを示し、「０」は割込み処理中でないことを示す。割込みが発生すると自動的にセットされる。rti命令で割込みから復帰したところが、他の割込み処理中かプログラム処理中であるのかを見分けるために使用される。
【００５１】
ビットＥＨ：エラーまたはＮＭＩを処理中であることを示すフラグである。「０」はエラー/ＮＭＩ割込み処理中でないことを示し、「１」はエラー/ＮＭＩ割込み処理中であることを示す。ＥＨ＝１のとき、非同期エラーまたはＮＭＩが発生した場合は、マスクされる。また、ＶＭＰイネーブル時はＶＭＰのプレート切り替えがマスクされる。
【００５２】
ビットＰＬ［１：０］：特権レベルを示す。「００」は特権レベル０、つまり、プロセッサアブストラクションレベルを示し、「０１」は特権レベル１（設定できない）を示し、「１０」は特権レベル２、つまり、システムプログラムレベルを示し、「１１」は特権レベル３、つまり、ユーザプログラムレベルを示す。
【００５３】
ビットＬＰＩＥ３：ＬＰ固有割込み３イネーブルを示す。「１」は割込み許可を示し、「０」は割込み不許可を示す。
【００５４】
ビットＬＰＩＥ２：ＬＰ固有割込み２イネーブルを示す。「１」は割込み許可を示し、「０」は割込み不許可を示す。
【００５５】
ビットＬＰＩＥ１：ＬＰ固有割込み１イネーブルを示す。「１」は割込み許可を示し、「０」は割込み不許可を示す。
【００５６】
ビットＬＰＩＥ０：ＬＰ固有割込み０イネーブルを示す。「１」は割込み許可を示し、「０」は割込み不許可を示す。
【００５７】
ビットＡＥＥ：ミスアライメント例外イネーブルを示す。「１」はミスアライメント例外許可を示し、「０」はミスアライメント例外不許可を示す。
【００５８】
ビットＩＥ：レベル割込みイネーブルを示す。「１」はレベル割込み許可を示し、「０」はレベル割込み不許可を示す。
【００５９】
ビットＩＭ［７：０］：割込みマスクを示す。レベル０〜７まで定義され、個々のレベルでマスクすることができる。レベル０が最も高いレベルとなる。ＩＭによりマスクされていない割込み要求のうち最も高いレベルを持った割込み要求のみがプロセッサ１に受理される。割込み要求を受理すると受理したレベル以下のレベルはハードウェアで自動的にマスクされる。IM[0]はレベル0のマスクであり、IM[1]はレベル1のマスクであり、IM[2]はレベル2のマスクであり、IM[3]はレベル3のマスクであり、IM[4]はレベル4のマスクであり、IM[5]はレベル5のマスクであり、IM[6]はレベル6のマスクであり、IM[7]はレベル7のマスクである。
【００６０】
ｒｅｓｅｒｖｅｄ：予約ビットを示す。常に０が読み出される。書き込む時は０を書き込む必要がある。
【００６１】
図１２は、条件フラグレジスタ（ＣＦＲ）３２の構造を示す図である。条件フラグレジスタ（ＣＦＲ）３２は、実行対象となっているタスクのコンテキストの一部を構成する３２ビットのレジスタであり、コンディションフラグ(条件フラグ)、オペレーションフラグ(演算フラグ)、ベクタコンディションフラグ(ベクタ条件フラグ)、演算命令用ビット位置指定フィールド、SIMDデータアライン情報フィールドから構成される。
【００６２】
ビットＡＬＮ［１：０］：アラインモードを示す。valnvc命令のアラインモードを設定する。
【００６３】
ビットＢＰＯ［４：０］：ビットポジションを示す。ビット位置指定の必要な命令で使用する。
【００６４】
ビットＶＣ０〜ＶＣ３：ベクタ条件フラグである。ＬＳＢ側のバイトあるいはハーフワードから順にＶＣ０に対応し、ＭＳＢ側がＶＣ３に対応する。
【００６５】
ビットＯＶＳ：オーバーフローフラグ(サマリー)である。飽和発生やオーバーフロー検出でセットされる。検出されなかった場合は、命令実行前の値を保持する。クリアはソフトで行う必要がある。
【００６６】
ビットＣＡＳ：キャリーフラグ(サマリー)である。addc命令でキャリーまたはsubc命令でボローが発生した場合セットされる。addc命令でキャリーもしくはsubc命令でボローが発生しなかった場合は、命令実行前の値を保持する。クリアはソフトで行う必要がある。
【００６７】
ビットＣ０〜Ｃ７：コンディションフラグである。フラグＣ７は常に値が１である。フラグＣ７へのＦＡＬＳＥ条件の反映(０書き込み)は無視される。
【００６８】
ｒｅｓｅｒｖｅｄ：予約ビットを示す。常に０が読み出される。書き込む時は０を書き込む必要がある。
【００６９】
図１３は、アキュムレータ（Ｍ０，Ｍ１）３０ｂの構造を示す図である。このアキュムレータ（Ｍ０，Ｍ１）３０ｂは、実行対象となっているタスクのコンテキストの一部を構成し、図１３（ａ）に示される３２ビットレジスタMH0-MH1（乗除算・積和用レジスタ(上位３２ビット)）と、図１３（ｂ）に示される３２ビットレジスタML0-ML1乗除算・積和用レジスタ(下位３２ビット)とからなる。
【００７０】
レジスタMH0-MH1は、乗算命令では結果の上位３２ビットを格納するのに使用される。積和命令ではアキュムレータの上位３２ビットとして使用される。また、ビットストリームを取り扱う場合に汎用レジスタと組み合わせて使用することができる。レジスタML0-ML1は、乗算命令では結果の下位３２ビットを格納するのに使用される。積和命令ではアキュムレータの下位３２ビットとして使用される。
【００７１】
図１４は、プログラムカウンタ（ＰＣ）３３の構造を示す図である。このプログラムカウンタ（ＰＣ）３３は、実行対象となっているタスクのコンテキストの一部を構成し、実行中の命令のアドレスを保持する３２ビットのカウンタである。下位１ビットは常に０が格納される。
【００７２】
図１５は、ＰＣ退避用レジスタ（ＩＰＣ）３４の構造を示す図である。このＰＣ退避用レジスタ（ＩＰＣ）３４は、実行対象となっているタスクのコンテキストの一部を構成する３２ビットのレジスタであり、下位１ビットは常に０が読み出されるが、書き込み時には０を書き込む必要がある。
【００７３】
図１６は、ＰＳＲ退避用レジスタ（ＩＰＳＲ）３５の構造を示す図である。このＰＳＲ退避用レジスタ（ＩＰＳＲ）３５は、実行対象となっているタスクのコンテキストの一部を構成し、プログラム状態レジスタ（ＰＳＲ）３１を退避するための３２ビットのレジスタであり、プログラム状態レジスタ（ＰＳＲ）３１の予約ビットに対応する部分は常に０が読み出されるが、書き込み時には０を書き込む必要がある。
【００７４】
次に、本プロセッサ１のメモリ空間について説明する。本プロセッサ１では、４ＧＢのリニアなメモリ空間を３２分割し、１２８ＭＢ単位の空間に命令ＳＲＡＭ（Static RAM）とデータＳＲＡＭが割り当てられる。この１２８ＭＢの空間を１ブロックとして、ＳＡＲ(ＳＲＡＭ Area Register)にアクセスしたいブロックを設定する。アクセスされたアドレスがＳＡＲで設定された空間である場合は、直接命令ＳＲＡＭ/データＳＲＡＭに対してアクセスを行うが、ＳＡＲで設定された空間でない場合は、バスコントローラ（ＢＣＵ）に対してアクセス要求を出する。ＢＣＵにはオン・チップ・メモリ（ＯＣＭ）、外部メモリ、外部デバイス、Ｉ／Ｏポート等が接続されており、それらのデバイスに対して読み書きを行うことができる。
【００７５】
図１７は、本プロセッサ１のパイプライン動作を示すタイミング図である。本プロセッサ１は、本図に示されるように、基本的に命令フェッチ、命令割り当て(ディスパッチ)、デコード、実行、書き込みの５段パイプラインで構成されている。
【００７６】
図１８は、本プロセッサ１による命令実行時の各パイプライン動作を示すタイミング図である。命令フェッチステージでは、プログラムカウンタ（ＰＣ）３３で指定されるアドレスの命令メモリをアクセスし、命令を命令バッファ１０ｃ〜１０ｅ，１０ｈ等に転送する。命令割り当てステージでは、分岐系命令に対する分岐先アドレス情報の出力、入力レジスタ制御信号の出力、可変長命令の割り当てを行い、命令をインストラクションレジスタ（ＩＲ）に転送する。デコードステージでは、ＩＲをデコード部２０に入力し、演算器制御信号、メモリアクセス信号を出力する。実行ステージでは、演算を実行、演算結果をデータメモリか汎用レジスタ（Ｒ０〜Ｒ３１）３０ａに出力する。書き込みステージでは、データ転送、演算結果を汎用レジスタに格納する。
【００７７】
本プロセッサ１は、ＶＬＩＷアーキテクチャにより上記の処理を最高４並列で行うことができる。したがって、図１８に示された動作については、本プロセッサ１は、図１９に示されるタイミングで並列に実行する。
【００７８】
次に、以上のように構成された本プロセッサ１の命令セットについて説明する。
以下の表３〜表５は、本プロセッサ１が実行する命令をカテゴリー別に分類した表である。
【００７９】
【表３】
2007102821.tif 000005
【００８０】
【表４】
2007102821.tif 000006
【００８１】
【表５】
2007102821.tif 000007
【００８２】
なお、表中の「演算器」は、その命令が使用する演算器を示す。演算器の略号の意味は次の通りである。つまり、「Ａ」はＡＬＵ命令、「Ｂ」は分岐命令、「Ｃ」は変換命令、「ＤＩＶ」は除算命令、「ＤＢＧＭ」はデバッグ命令、「Ｍ」はメモリアクセス命令、「Ｓ１」、「Ｓ２」はシフト命令、「Ｘ１」、「Ｘ２」は乗算命令を意味する。
【００８３】
図２０は、本プロセッサ１が実行する命令のフォーマットを示す図である。そのフォーマットには、図２０（ａ）に示される１６ビット命令フォーマットと、図２０（ｂ）に示される３２ビット命令フォーマットとがある。
【００８４】
なお、図中における略号の意味は次の通りである。つまり、「Ｅ」はエンドビット（並列実行の境界）、「Ｆ」はフォーマットビット（００、０１、１０：１６ビット命令フォーマット、１１：３２ビット命令フォーマット）、「Ｐ」はプレディケート（実行条件：８個の条件フラグＣ０〜Ｃ７のいずれかを指定）、「ＯＰ」はオペコードフィールド、「Ｒ」はレジスタフィールド、「Ｉ」は即値フィールド、「Ｄ」ディスプースメントフィールドを意味する。なお、「Ｅ」フィールドはＶＬＩＷに特有のもので、Ｅ＝０の命令は次の命令と並列に実行される。つまり、「Ｅ」フィールドによって並列度が可変のＶＬＩＷを実現している。また、プレディケートは、コンディションフラグＣ０〜Ｃ７の値に基づいて命令を実行させるか実行させないかを制御するフラグであり、分岐命令を用いることなく選択的な実行を可能にする高速化技術の一つである。
【００８５】
例えば、命令中のプレディケートを示すコンディションフラグＣ０が１の場合には、コンディションフラグＣ０が割り当てられた命令は実行されるが、０の場合には、当該命令は実行されない。
【００８６】
図２１〜図３６は、本プロセッサ１が実行する命令の概略的な機能を説明する図である。つまり、図２１は、カテゴリー「ALUadd（加算）系」に属する命令を説明する図であり、図２２は、カテゴリー「ALUsub（減算）系」に属する命令を説明する図であり、図２３は、カテゴリー「ALUlogic（論理演算）系ほか」に属する命令を説明する図であり、図２４は、カテゴリー「CMP（比較演算）系」に属する命令を説明する図であり、図２５は、カテゴリー「mul（乗算）系」に属する命令を説明する図であり、図２６は、カテゴリー「mac（積和演算）系」に属する命令を説明する図であり、図２７は、カテゴリー「msu（積差演算）系」に属する命令を説明する図であり、図２８は、カテゴリー「MEMｌd（メモリ読み出し）系」に属する命令を説明する図であり、図２９は、カテゴリー「MEMstore（メモリ書き出し）系」に属する命令を説明する図であり、図３０は、カテゴリー「BRA（分岐）系」に属する命令を説明する図であり、図３１は、カテゴリー「BSasl（算術バレルシフト）系ほか」に属する命令を説明する図であり、図３２は、カテゴリー「BSlsr（論理バレルシフト）系ほか」に属する命令を説明する図であり、図３３は、カテゴリー「CNVvaln（算術変換）系」に属する命令を説明する図であり、図３４は、カテゴリー「CNV（一般変換）系」に属する命令を説明する図であり、図３５は、カテゴリー「SATvlpk（飽和処理）系」に属する命令を説明する図であり、図３６は、カテゴリー「ETC（その他）系」に属する命令を説明する図である。
【００８７】
これらの図において、項目「ＳＩＭＤ」は、その命令の型（ＳＩＳＤ（SINGLE）かＳＩＭＤかの区別）を示し、項目「サイズ」は、演算の対象となる個々のオペランドのサイズを示し、項目「命令」は、その命令のオペコードを示し、項目「オペランド」は、その命令のオペランドを示し、項目「ＣＦＲ」は、条件フラグレジスタの変化を示し、項目「ＰＳＲ」は、プロセッサ状態レジスタの変化を示し、項目「代表的な動作」は、動作の概要を示し、項目「演算器」は、使用される演算器を示し、項目「３１１６」は、命令のサイズを示す。
【００８８】
次に、いくつかの特徴的な命令について、本プロセッサ１の動作を説明する。なお、各命令の動作の説明に用いられている各種記号の意味は、以下の表６〜表１０の通りである。
【００８９】
【表６】
2007102821.tif 000008
【００９０】
【表７】
2007102821.tif 000009
【００９１】
【表８】
2007102821.tif 000010
【００９２】
【表９】
2007102821.tif 000011
【００９３】
【表１０】
2007102821.tif 000012
【００９４】
［命令ｊｌｏｏｐ、ｓｅｔｔａｒ］
命令ｊｌｏｏｐは、ループにおける分岐とコンディションフラグ（ここでは、プレディケート）の設定とを行う命令である。例えば、
ｊｌｏｏｐ  Ｃ６，Ｃｍ，ＴＡＲ，Ｒａ
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）コンディションフラグＣｍに１をセットし、（２）レジスタＲａの値が０より小さい場合にコンディションフラグＣ６に０をセットし、（３）レジスタＲａの値に−１を加算し、レジスタＲａに格納し、（４）分岐レジスタ（ＴＡＲ）３０ｄが示すアドレスに分岐する。ジャンプバッファ１０ｆ（分岐用命令バッファ）に分岐用命令が充填されていない場合は、分岐先の命令を充填する。詳細な動作は図３７に示される通りである。
【００９５】
一方、命令ｓｅｔｔａｒは、分岐先アドレスを分岐レジスタ（ＴＡＲ）３０ｄに格納するとともにコンディションフラグ（ここでは、プレディケート）の設定を行う命令である。例えば、
ｓｅｔｔａｒ  Ｃ６，Ｃｍ，Ｄ９
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）プログラムカウンタ（ＰＣ）３３とディスプレースメント値(Ｄ９)を加算したアドレスを分岐レジスタ（ＴＡＲ）３０ｄに格納し、（２）そのアドレスの命令をフェッチしてジャンプバッファ１０ｆ（分岐用命令バッファ）に格納し、（３）コンディションフラグＣ６を１に、コンディションフラグＣｍを０にセットする。詳細な動作は図３８に示される通りである。
【００９６】
これらの命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒは、プロログエピログ除去型（以下、プロエピ除去型）のソフトウェアパイプライニングによるループの高速化に有効な命令であり、通常、対で用いられる。なお、ソフトウェアパイプライニングは、コンパイラによるループ高速化手法の１つであり、ループ構造をプロログ部、カーネル部、 エピログ部に変換し、カーネル部については、各イタレーション（繰り返し）をその前後のイタレーションとオーバーラップさせることで、複数の命令が効率的に並列実行されることを可能にする。
【００９７】
また、プロエピ除去型とは、図３９に示されるように、プロログ部及びエピログ部をプレディケートによる条件実行命令とすることで、プロログ部とエピログ部とを見かけ上、除去することである。図３９では、プロエピ除去型２ステージソフトウェアパイプライニングにおいて、コンディションフラグＣ６とＣ４は、それぞれ、エピログ命令（ステージ２）用、プロログ命令（ステージ１）用のプレディケートとなっている。
【００９８】
例えば、いま、図４０に示されるＣ言語のソースプログラムに対して、上述の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いた場合には、コンパイラは、プロエピ除去型のソフトウェアパイプライニングによって、図４１に示される機械語プログラムを生成する。
【００９９】
この機械語プログラムのループ部分（ラベルＬ０００２３〜命令ｊｌｏｏｐまで）から分かるように、コンディションフラグＣ４のセット及びリセットがそれぞれ命令ｊｌｏｏｐ及びｓｅｔｔａｒで行われ、そのための特別な命令が不要となり、ループ実行が２サイクルで済んでいる。
【０１００】
なお、本プロセッサ１は、２ステージのソフトウェアパイプライニングだけでなく、３ステージのソフトウェアパイプライニングにも適用できる命令「ｊｌｏｏｐ  Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ  Ｃ６，Ｃ２：Ｃ４，Ｄ９」を備える。これらの命令「ｊｌｏｏｐ  Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ  Ｃ６，Ｃ２：Ｃ４，Ｄ９」は、上記２ステージ用の命令「ｊｌｏｏｐ  Ｃ６，Ｃｍ，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ  Ｃ６，Ｃｍ，Ｄ９」におけるレジスタＣｍがレジスタＣ２、Ｃ３及びＣ４に拡張されたものに相当する。
【０１０１】
つまり、
ｊｌｏｏｐ  Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）レジスタＲａが０より小さい場合にコンディションフラグＣ４に０をセットし、（２）コンディションフラグＣ３の値をコンディションフラグＣ２に転送し、コンディションフラグＣ４の値をコンディションフラグＣ３とＣ６に転送し、（３）レジスタＲａに−１を加算し、レジスタＲａに格納し、（４）分岐レジスタ（ＴＡＲ）３０ｄが示すアドレスに分岐する。ジャンプバッファ１０ｆに分岐先の命令が充填されていない場合は、分岐先の命令を充填する。詳細な動作は図４２に示される通りである。
【０１０２】
また、
ｓｅｔｔａｒ  Ｃ６，Ｃ２：Ｃ４，Ｄ９
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）プログラムカウンタ（ＰＣ）３３とディスプレースメント値(Ｄ９)を加算したアドレスを分岐レジスタ（ＴＡＲ）３０ｄに格納し、（２）そのアドレスの命令をフェッチしてジャンプバッファ１０ｆ（分岐用命令バッファ）に格納し、（３）コンディションフラグＣ４とＣ６を１に、コンディションフラグＣ２とＣ３を０にセットする。詳細な動作は図４３に示される通りである。
【０１０３】
これらの３ステージ用の命令「ｊｌｏｏｐ  Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ」及び命令「ｓｅｔｔａｒ  Ｃ６，Ｃ２：Ｃ４，Ｄ９」におけるコンディションフラグの役割は、図４４に示される通りである。図４４（ａ）に示されるように、プロエピ除去型３ステージソフトウェアパイプライニングにおいて、コンディションフラグＣ２、Ｃ３、Ｃ４はそれぞれステージ３用、ステージ２用、ステージ１用のプレディケートとなっている。図４４（ｂ）は、そのときのフラグ転送による実効の推移を示す図である。
【０１０４】
例えば、いま、図４５に示されるＣ言語のソースプログラムに対して、図４２および図４３にそれぞれ示される命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いた場合には、コンパイラは、エピログ除去型のソフトウェアパイプライニングによって、図４６に示される機械語プログラムを生成する。
【０１０５】
本プロセッサ１は、さらに、４ステージのソフトウェアパイプライニングに適用可能な命令「ｊｌｏｏｐ  Ｃ６，Ｃ１：Ｃ４，ＴＡＲ，Ｒａ」および命令「ｓｅｔｔａｒ  Ｃ６，Ｃ１：Ｃ４，Ｄ９」を備える。
【０１０６】
つまり、
ｊｌｏｏｐ  Ｃ６，Ｃ１：Ｃ４，ＴＡＲ，Ｒａ
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）レジスタＲａが０より小さい場合にコンディションフラグＣ４に０をセットし、（２）コンディションフラグＣ２の値をコンディションフラグＣ１に転送し、コンディションフラグＣ３の値をコンディションフラグＣ２に転送し、コンディションフラグＣ４の値をコンディションフラグＣ３とＣ６に転送し、（３）レジスタＲａに−１を加算し、レジスタＲａに格納し、（４）分岐レジスタ（ＴＡＲ）３０ｄ示すアドレスに分岐する。ジャンプバッファ１０ｆに分岐先の命令が充填されていない場合は、分岐先の命令を充填する。詳細な動作は、図４７に示されるとおりである。
【０１０７】
一方、命令ｓｅｔｔａｒは、分岐先アドレスを分岐レジスタ（ＴＡＲ）３０ｄに格納するとともにコンディションフラグ（ここでは、プレディケート）の設定を行う命令である。例えば、
ｓｅｔｔａｒ  Ｃ６，Ｃ１：Ｃ４，Ｄ９
であれば、プロセッサ１は、アドレス管理部１０ｂ等により、（１）プログラムカウンタ（ＰＣ）３３とディスプレースメント値(Ｄ９)を加算したアドレスを分岐レジスタ（ＴＡＲ）３０ｄに格納し、（２）そのアドレスの命令をフェッチしてジャンプバッファ１０ｆ（分岐用命令バッファ）に格納し、（３）コンディションフラグＣ４とＣ６を１に、コンディションフラグＣ１とＣ２とＣ３を０にセットする。詳細な動作は図４８に示される通りである。
【０１０８】
例えば、いま、図４９に示されるＣ言語のソースプログラムに対して、図４７および図４８にそれぞれ示される命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いた場合には、コンパイラは、エピログ除去型のソフトウェアパイプライニングによって、図５０に示される機械語プログラムを生成する。
【０１０９】
図５１は、図４７および図４８にそれぞれ示される命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いた４段のソフトウェアパイプライニングによる動作を示す図である。
【０１１０】
４段のソフトウェアパイプライニングを実現するために、命令を実行するか否かを示すプレディケートに用いられるコンディションフラグＣ１〜Ｃ４が用いられる。命令Ａ、Ｂ、ＣおよびＤがそれぞれソフトウェアパイプライニングの１段、２段、３段および４段で実行される命令である。また、命令Ａ、Ｂ、ＣおよびＤには、コンディションフラグＣ４、Ｃ３、Ｃ２およびＣ１がそれぞれ対応付けられているものとする。さらに、命令ｊｌｏｏｐには、コンディションフラグＣ６が対応付けられているものとする。
【０１１１】
図５２は、図４７に示される命令ｊｌｏｏｐ用のコンディションフラグＣ６の設定方法の一例を説明するための図である。この方法は、以下の性質を利用している。すなわち、対象となるループをソフトウェアパイプライニングによって条件実行命令に展開したときのソフトウェアパイプラインの段数をＮ段（Ｎは３以上の整数）とする。すると、エピログ部において（Ｎ−２）段目のパイプラインで実行される条件実行命令に対応するコンディションフラグが０になった次のサイクルでループが終了するというものである。
【０１１２】
従って、ループ処理のプロログ部およびカーネル部においては、コンディションフラグＣ６の値は常に１に設定し、エピログ部に入った段階からコンディションフラグＣ３（ソフトウェアパイプラインの（Ｎ−２）段目に実行される条件実行命令に対応するコンディションフラグ）の値を監視し、コンディションフラグＣ３の値を１サイクル後のコンディションフラグＣ６に書き込む。このようにすることにより、命令ｊｌｏｏｐに割り当てられたコンディションフラグＣ６がループ処理の終了時には０に設定され、ループ処理から抜けることができる。例えば、図５０に示される機械語プログラムの例ではコンディションフラグＣ６が０になると、命令「ｊｌｏｏｐ  Ｃ６，Ｃ１：Ｃ４，ｔａｒ，ｒ４」は実行されずに、その次に配置された命令「ｒｅｔ」が実行され、ループ処理から抜け出すことになる。
【０１１３】
なお、図５１に示されるようにエピログ部において、あるコンディションフラグの値が０になると、そのコンディションフラグの値は、ループ処理が終了するまでの間０である。すなわち、着目しているコンディションフラグに対応する条件実行命令がループ処理が終了するまでの間実行されないことを示す。例えば、５サイクル目でコンディションフラグＣ４の値が０になった場合には、ループが終了する７サイクル目まではコンディションフラグＣ４の値は０である。このため、５サイクル目から７サイクル目まではコンディションフラグＣ４に対応する命令Ａは実行されない。
【０１１４】
よって、エピログ部においてコンディションフラグが０になった場合には、ループ処理が終了するまでの間、そのコンディションフラグに対応する命令が格納された命令バッファ１０ｃ（１０ｄ，１０ｅ，１０ｈ）より命令を読み出さないように制御を行なってもよい。
【０１１５】
また、各命令の一部分はコンディションフラグの番号を示している。このため、デコード部２０は、コンディションフラグの番号のみを命令バッファ１０ｃ（１０ｄ，１０ｅ，１０ｈ）より読出し、その番号に基づいて、コンディションフラグの値を調べ、コンディションフラグの値が０であれば、命令バッファ１０ｃ（１０ｄ，１０ｅ，１０ｈ）から命令を読み出さないようにしてもよい。
【０１１６】
また、図５３に示されるようにループの前後に実行される命令をプロログ部およびエピログ部にそれぞれ配置し、実行するようにしてもよい。例えば、ループの直前に実行される命令Ｘおよび直後に実行される命令ＹにコンディションフラグＣ５を割り当て、エピログ部およびプロログ部における空きステージにおいて命令を実行させる。これにより、エピログ部およびプロログ部における空きステージを減らすことができる。
【０１１７】
また、Ｃ言語におけるＩＦ−ＥＬＳＥ文のように所定条件の成立時に実行される命令と不成立時に実行される命令とが異なっている場合には、条件成立時に実行される条件実行命令のコンディションフラグと条件不成立時に実行される条件実行命令のコンディションフラグとを異ならせ、条件に応じてコンディションフラグの値を変える。このように簡易な処理で条件分岐命令を実現することができる。
【０１１８】
また、図５２に示される命令ｊｌｏｏｐ用のコンディションフラグＣ６の設定方法の代わりに以下に述べるようなコンディションフラグＣ６の設定方法を用いてもよい。図５４は、図４７に示される命令ｊｌｏｏｐ用のコンディションフラグＣ６の設定方法の他の一例を説明するための図である。この方法は、以下の性質を利用している。すなわち、対象となるループをソフトウェアパイプライニングによって条件実行命令に展開したときのソフトウェアパイプラインの段数をＮ段（Ｎは２以上の整数）とする。すると、エピログ部において（Ｎ−１）段目のパイプラインで実行される条件実行命令に対応するコンディションフラグが０になったサイクルと同一のサイクルでループが終了するというものである。
【０１１９】
従って、ループ処理のプロログ部およびカーネル部においては、コンディションフラグＣ６の値は常に１に設定し、エピログ部に入った段階からコンディションフラグＣ２（ソフトウェアパイプラインの（Ｎ−１）段目に実行される条件実行命令に対応するコンディションフラグ）の値を監視し、コンディションフラグＣ２の値を同一サイクル内でコンディションフラグＣ６に書き込む。このようにすることにより、命令ｊｌｏｏｐに割り当てられたコンディションフラグＣ６がループ処理の終了時には０に設定され、ループ処理から抜けることができる。
【０１２０】
さらに、以下に述べるようなコンディションフラグＣ６の設定方法を用いてもよい。図５５は、図４７に示される命令ｊｌｏｏｐ用のコンディションフラグＣ６の設定方法のさらに他の一例を説明するための図である。この方法は、以下の性質を利用している。すなわち、対象となるループをソフトウェアパイプライニングによって条件実行命令に展開したときのソフトウェアパイプラインの段数をＮ段（Ｎは４以上の整数）とする。すると、エピログ部において（Ｎ−３）段目のパイプラインで実行される条件実行命令に対応するコンディションフラグが０になった２サイクル後でループが終了するというものである。
【０１２１】
従って、ループ処理のプロログ部およびカーネル部においては、コンディションフラグＣ６の値は常に１に設定し、エピログ部に入った段階からコンディションフラグＣ４（ソフトウェアパイプラインの（Ｎ−３）段目に実行される条件実行命令に対応するコンディションフラグ）の値を監視し、コンディションフラグＣ４の値を２サイクル後のコンディションフラグＣ６に書き込む。このようにすることにより、命令ｊｌｏｏｐに割り当てられたコンディションフラグＣ６がループの終了時には０に設定され、ループから抜けることができる。
【０１２２】
なお、本実施の形態では４ステージまでのソフトウェアパイプライニングについて説明したが、５ステージ以上のソフトウェアパイプライニングについても同様であり、プレディケート用のコンディションフラグを増やせばよい。
【０１２３】
以上説明した特徴を有する機械語命令は、コンパイラにより生成される。コンパイラは、ソースプログラムを構文解析するパーサーステップと、解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、中間コードを最適化する最適化ステップと、最適化された中間コードを機械語命令に変換するコード生成ステップとを含む。
【０１２４】
以上説明したように、本実施の形態によると、ソフトウェアパイプライニングのエピログ部のコンディションフラグを用いてループ用のコンディションフラグの設定を行っている。このため、ループ処理終了の判断のためにカウンタ等の特別なハードウェア資源を用いる必要がなく、回路規模が大きくなることがない。また、それに伴いプロセッサの消費電力を小さくすることができる。
【０１２５】
また、エピログ部において条件実行命令が実行されなくなると、着目しているループ処理が終了するまでの間、そのソフトウェアパイプライニングでは、条件実行命令は実行されない。このため、その間、命令バッファから条件実行命令を読み出す必要がなく、それに伴いプロセッサの消費電力を小さくすることができる。
【０１２６】
さらに、ループの前後に実行される命令をソフトウェアパイプライニングのプロログ部およびエピログ部にそれぞれ配置することにより、ソフトウェアパイプライニングの空きステージを減らすことができ、高速にプログラムを実行することができる。それに伴い、プロセッサの消費電力を小さくすることができる。
【０１２７】
さらにまた、エピログ部において条件実行命令が実行されなくなると、着目しているループ処理が終了するまでの間、そのソフトウェアパイプライニングでは、条件実行命令は実行されない。このため、その間、命令バッファから条件実行命令を読み出す必要がなく、それに伴いプロセッサの消費電力を小さくすることができる。
【０１２８】
また、プロセッサの消費電力を小さくすることができる機械語命令を生成可能なコンパイラを提供することができる。
【産業上の利用可能性】
【０１２９】
本発明に係るプロセッサは、低消費電力で命令を実行することができる。このため、携帯電話、モバイルＡＶ機器、デジタルＴＶ、ＤＶＤ等に共通のコアプロセッサとして使用可能であり、高性能・高コストパフォーマンスなマルチメディア機器の出現が望まれる今日における実用的価値は極めて高い。
【図面の簡単な説明】
【０１３０】
【図１】本発明に係るプロセッサの概略ブロック図である。
【図２】同プロセッサの算術論理・比較演算器の概略図を示す。
【図３】同プロセッサのバレルシタの構成を示すブロック図である。
【図４】同プロセッサの変換器の構成を示すブロック図である。
【図５】同プロセッサの除算器の構成を示すブロック図である。
【図６】同プロセッサの乗算・積和演算器の構成を示すブロック図である。
【図７】同プロセッサの命令制御部の構成を示すブロック図である。
【図８】同プロセッサの汎用レジスタ（Ｒ０〜Ｒ３１）の構造を示す図である。
【図９】同プロセッサのリンクレジスタ（ＬＲ）の構造を示す図である。
【図１０】同プロセッサの分岐レジスタ（ＴＡＲ）の構造を示す図である。
【図１１】同プロセッサのプログラム状態レジスタ（ＰＳＲ）の構造を示す図である。
【図１２】同プロセッサの条件フラグレジスタ（ＣＦＲ）の構造を示す図である。
【図１３】同プロセッサのアキュムレータ（Ｍ０，Ｍ１）の構造を示す図である。
【図１４】同プロセッサのプログラムカウンタ（ＰＣ）の構造を示す図である。
【図１５】同プロセッサのＰＣ退避用レジスタ（ＩＰＣ）の構造を示す図である。
【図１６】同プロセッサのＰＳＲ退避用レジスタ（ＩＰＳＲ）の構造を示す図である。
【図１７】同プロセッサのパイプライン動作を示すタイミング図である。
【図１８】同プロセッサによる命令実行時の各パイプライン動作を示すタイミング図である。
【図１９】同プロセッサの並列動作を示す図である。
【図２０】同プロセッサが実行する命令のフォーマットを示す図である。
【図２１】カテゴリー「ALUadd（加算）系」に属する命令を説明する図である。
【図２２】カテゴリー「ALUsub（減算）系」に属する命令を説明する図である。
【図２３】カテゴリー「ALUlogic（論理演算）系ほか」に属する命令を説明する図である。
【図２４】カテゴリー「CMP（比較演算）系」に属する命令を説明する図である。
【図２５】カテゴリー「mul（乗算）系」に属する命令を説明する図である。
【図２６】カテゴリー「mac（積和演算）系」に属する命令を説明する図である。
【図２７】カテゴリー「msu（積差演算）系」に属する命令を説明する図である。
【図２８】カテゴリー「MEMｌd（メモリ読み出し）系」に属する命令を説明する図である。
【図２９】カテゴリー「MEMstore（メモリ書き出し）系」に属する命令を説明する図である。
【図３０】カテゴリー「BRA（分岐）系」に属する命令を説明する図である。
【図３１】カテゴリー「BSasl（算術バレルシフト）系ほか」に属する命令を説明する図である。
【図３２】カテゴリー「BSlsr（論理バレルシフト）系ほか」に属する命令を説明する図である。
【図３３】カテゴリー「CNVvaln（算術変換）系」に属する命令を説明する図である。
【図３４】カテゴリー「CNV（一般変換）系」に属する命令を説明する図である。
【図３５】カテゴリー「SATvlpk（飽和処理）系」に属する命令を説明する図である。
【図３６】カテゴリー「ETC（その他）系」に属する命令を説明する図である。
【図３７】命令「ｊｌｏｏｐ  Ｃ６，Ｃｍ，ＴＡＲ，Ｒａ」の詳細な動作を説明する図である。
【図３８】命令「ｓｅｔｔａｒ  Ｃ６，Ｃｍ，Ｄ９」の詳細な動作を説明する図である。
【図３９】プロエピ除去型２ステージソフトウェアパイプライニングを示す図である。
【図４０】Ｃ言語のソースプログラムのリストを示す図である。
【図４１】本実施の形態の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いて生成される機械語プログラムの例を示す図である。
【図４２】命令「ｊｌｏｏｐ  Ｃ６，Ｃ２：Ｃ４，ＴＡＲ，Ｒａ」の詳細な動作を説明する図である。
【図４３】命令「ｓｅｔｔａｒ  Ｃ６，Ｃ２：Ｃ４，Ｄ９」の詳細な動作を説明する図である。
【図４４】プロエピ除去型３ステージソフトウェアパイプライニングを示す図である。
【図４５】Ｃ言語のソースプログラムのリストを示す図である。
【図４６】本実施の形態の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いて生成される機械語プログラムの例を示す図である。
【図４７】命令「ｊｌｏｏｐ  Ｃ６，Ｃ１：Ｃ４，ＴＡＲ，Ｒａ」の詳細な動作を説明する図である。
【図４８】命令「ｓｅｔｔａｒ  Ｃ６，Ｃ１：Ｃ４，Ｄ９」の詳細な動作を説明する図である。
【図４９】Ｃ言語のソースプログラムのリストを示す図である。
【図５０】本実施の形態の命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いて生成される機械語プログラムの例を示す図である。
【図５１】図４７および図４８にそれぞれ示される命令ｊｌｏｏｐ及び命令ｓｅｔｔａｒを用いた４段のソフトウェアパイプライニングによる動作を示す図である。
【図５２】図４７に示される命令ｊｌｏｏｐ用のコンディションフラグＣ６の設定方法の一例を説明するための図である。
【図５３】ループの前後に実行される命令をプロログ部およびエピログ部にそれぞれ取り込んだ４段のソフトウェアパイプライニングによる動作を示す図である。
【図５４】図４７に示される命令ｊｌｏｏｐ用のコンディションフラグＣ６の設定方法の他の一例を説明するための図である。
【図５５】図４７に示される命令ｊｌｏｏｐ用のコンディションフラグＣ６の設定方法のさらに他の一例を説明するための図である。
【図５６】従来の４段のソフトウェアパイプライニングによる動作を示す図である。
【符号の説明】
【０１３１】
１    プロセッサ
１０    命令制御部
１０ａ  命令キャッシュ
１０ｂ  アドレス管理部
１０ｃ〜１０ｅ，１０ｈ  命令バッファ
１０ｆ  ジャンプバッファ
１０ｇ  ローテーション部
２０    デコード部
３０    レジスタファイル
３０ａ  汎用レジスタ（Ｒ０〜Ｒ３１）
３０ｂ  アキュムレータ（ＭＨ，ＭＬ）
３０ｃ  リンクレジスタ（ＬＲ）
３０ｄ  分岐レジスタ（ＴＡＲ）
３１    プログラム状態レジスタ（ＰＳＲ）
３２    条件フラグレジスタ（ＣＦＲ）
３３    プログラムカウンタ（ＰＣ）
３４    ＰＣ退避用レジスタ（ＩＰＣ）
３５    ＰＳＲ退避用レジスタ（ＩＰＳＲ）
４０    演算部
４１〜４３，４８  算術論理・比較演算器
４１ａ  ＡＬＵ部
４１ｂ  飽和処理部
４１ｃ  フラグ部
４４    積和演算器
４４ａ、４４ｂ  乗算器
４４ｃ〜４４ｅ  加算器
４４ｆ  セレクタ
４４ｇ  飽和処理部
４５    バレルシフタ
４５ａ、４５ｂ  セレクタ
４５ｃ  上位バレルシフタ
４５ｄ  下位バレルシフタ
４５ｅ  飽和処理部
４６    除算器
４７    変換器
４７ａ  SATブロック
４７ｂ  BSEQブロック
４７ｃ  MSKGENブロック
４７ｄ  VSUMBブロック
４７ｅ  BCNTブロック
４７ｆ  ILブロック
５０    Ｉ／Ｆ部
６０    命令メモリ部
７０    データメモリ部
８０    拡張レジスタ部
９０    Ｉ／Ｏインターフェース部
【図１】
2007102821.tif 000013
【図２】
2007102821.tif 000014
【図３】
2007102821.tif 000015
【図４】
2007102821.tif 000016
【図５】
2007102821.tif 000017
【図６】
2007102821.tif 000018
【図７】
2007102821.tif 000019
【図８】
2007102821.tif 000020
【図９】
2007102821.tif 000021
【図１０】
2007102821.tif 000022
【図１１】
2007102821.tif 000023
【図１２】
2007102821.tif 000024
【図１３】
2007102821.tif 000025
【図１４】
2007102821.tif 000026
【図１５】
2007102821.tif 000027
【図１６】
2007102821.tif 000028
【図１７】
2007102821.tif 000029
【図１８】
2007102821.tif 000030
【図１９】
2007102821.tif 000031
【図２０】
2007102821.tif 000032
【図２１】
2007102821.tif 000033
【図２２】
2007102821.tif 000034
【図２３】
2007102821.tif 000035
【図２４】
2007102821.tif 000036
【図２５】
2007102821.tif 000037
【図２６】
2007102821.tif 000038
【図２７】
2007102821.tif 000039
【図２８】
2007102821.tif 000040
【図２９】
2007102821.tif 000041
【図３０】
2007102821.tif 000042
【図３１】
2007102821.tif 000043
【図３２】
2007102821.tif 000044
【図３３】
2007102821.tif 000045
【図３４】
2007102821.tif 000046
【図３５】
2007102821.tif 000047
【図３６】
2007102821.tif 000048
【図３７】
2007102821.tif 000049
【図３８】
2007102821.tif 000050
【図３９】
2007102821.tif 000051
【図４０】
2007102821.tif 000052
【図４１】
2007102821.tif 000053
【図４２】
2007102821.tif 000054
【図４３】
2007102821.tif 000055
【図４４】
2007102821.tif 000056
【図４５】
2007102821.tif 000057
【図４６】
2007102821.tif 000058
【図４７】
2007102821.tif 000059
【図４８】
2007102821.tif 000060
【図４９】
2007102821.tif 000061
【図５０】
2007102821.tif 000062
【図５１】
2007102821.tif 000063
【図５２】
2007102821.tif 000064
【図５３】
2007102821.tif 000065
【図５４】
2007102821.tif 000066
【図５５】
2007102821.tif 000067
【図５６】
2007102821.tif 000068