(57)【要約】【課題】  レジスタを指定するのに必要なビット数が少なくて済む縮小化された命令セットをもつＶＬＩＷプロセッサを提供する。【解決手段】  レジスタファイル１２、第１〜第３演算器１４ａ〜１４ｃ演算器等を備え、長命令語を実行するＶＬＩＷプロセッサ１０であって、長命令語には、レジスタファイル１２の中から少なくとも１つを指定するレジスタ指定フィールドと複数の命令とが含まれ、各命令のオペランドには、レジスタ指定フィールドで指定されたレジスタをソースレジスタ及びデスティネーションレジスタとして使用するか否かを示すビットｓｒｃ１、ｓｒｃ２、ｄｓｔが含まれる。【選択図】        図１
2005227942.tif 000002
【特許請求の範囲】
【請求項１】
複数のレジスタと複数の演算器を備える、長命令語を実行するプロセッサであって、
前記長命令語には、前記複数のレジスタの中から少なくとも１つを指定するレジスタ指定フィールドと、前記演算器を用いた演算を指定する複数の命令と、前記レジスタ指定フィールドで指定されたレジスタと当該レジスタを使用する命令との対応関係を示すレジスタ割当情報とが含まれ、
前記プロセッサはさらに、
前記レジスタ指定フィールドで指定されたレジスタの値を出力する出力ポートと、
前記レジスタ割当情報が示す対応関係に従って、前記出力ポートから出力された値が前記演算器に入力されるように選択制御をする入力選択制御手段とを備える
ことを特徴とするプロセッサ。
【請求項２】
前記プロセッサはさらに、
前記レジスタ指定フィールドで指定されたレジスタに値を格納するための入力ポートと、
前記レジスタ割当情報が示す対応関係に従って、前記演算器で得られた演算結果が前記入力ポートを介して前記レジスタに格納されるように選択制御をする出力選択制御手段とを備える
ことを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記レジスタ割当情報は、前記複数の命令中のレジスタオペランドとして分散して配置され、
各命令中のレジスタオペランドは、当該命令のソースレジスタ及びデスティネーションレジスタとして前記レジスタ指定フィールドで指定されたレジスタを使用するか否かを示す
ことを特徴とする請求項１記載のプロセッサ。
【請求項４】
前記レジスタ割当情報は、前記長命令語中の連続するビット位置に配置され、前記レジスタ指定フィールドで指定されたレジスタを使用する命令を前記複数の命令の中から特定する情報を含む
ことを特徴とする請求項１記載のプロセッサ。
【請求項５】
前記レジスタ指定フィールドは、複数のレジスタを指定し、
前記レジスタ割当情報は、前記レジスタ指定フィールドで指定された複数のレジスタを予め定められた順序に従って前記複数の命令に割り当てる情報である
ことを特徴とする請求項１記載のプロセッサ。
【請求項６】
前記レジスタ指定フィールドは、複数のレジスタを指定する複数のレジスタ部を含み、
前記レジスタ割当情報は、前記長命令語における前記複数のレジスタ部の並び順と前記複数の命令の並び順とに従って、前記レジスタを重複することなく前記命令に割り当てていく
ことを特徴とする請求項５記載のプロセッサ。
【請求項７】
前記プロセッサはさらに、前記演算器による演算結果を保持するテンポラリレジスタを備え、
前記レジスタ指定フィールド及び前記レジスタ割当情報の少なくとも１つは、前記複数のレジスタ及び前記テンポラリレジスタの中から少なくとも１つを指定する
ことを特徴とする請求項１記載のプロセッサ。
【請求項８】
前記プロセッサは、前記複数の演算器それぞれに対応する複数のテンポラリレジスタを備える
ことを特徴とする請求項７記載のプロセッサ。
【請求項９】
前記テンポラリレジスタは、対応する前記演算器が新たな演算結果を生成する度に当該演算結果を新たに保持するパイプラインステージ間のレジスタである
ことを特徴とする請求項８記載のプロセッサ。
【請求項１０】
前記プロセッサは、前記複数の演算器のうちの２以上の演算器による演算結果を選択的に保持するテンポラリレジスタを備える
ことを特徴とする請求項７記載のプロセッサ。
【請求項１１】
複数のレジスタと複数の演算器を備えるプロセッサを対象とし、命令列を長命令語列に変換するコンパイラであって、
前記命令列を同時実行可能な複数の命令からなる命令グループに分類する命令グループ分類ステップと、
分類された各命令グループを、当該命令グループで使用されるレジスタを指定するレジスタ指定フィールドと、前記複数の命令を特定する複数の命令コードと、前記レジスタ指定フィールドで指定されたレジスタと当該レジスタを使用する命令との対応関係を示すレジスタ割当情報とが含まれる長命令語フォーマットに変換するフォーマット変換ステップと、
長命令語フォーマットに変換された各命令グループを対応する機械語に変換する機械語命令変換ステップと
を含むことを特徴とするコンパイラ。
【請求項１２】
前記命令グループ分類ステップは、
前記レジスタ指定フィールドで指定可能なレジスタの個数を考慮することなく、前記演算器の個数を考慮して命令グループを生成するグループ化ステップと、
生成された命令グループで使用されるレジスタの個数が前記レジスタ指定フィールドで指定可能なレジスタの個数を超えているか否かを判定する制約判定ステップと、
超えていると判定された場合に、当該命令グループを、前記レジスタ指定フィールドで指定可能な個数のレジスタを用いる命令グループに分割する命令分割ステップとを含む
ことを特徴とする請求項１１記載のコンパイラ。
【請求項１３】
前記プロセッサはさらに、前記演算器による演算結果を保持するテンポラリレジスタを備え、
前記レジスタ指定フィールドは、前記複数のレジスタ及び前記テンポラリレジスタの中から少なくとも１つを指定する
ことを特徴とする請求項１１記載のコンパイラ。
【請求項１４】
前記コンパイラはさらに、
前記複数のレジスタ及び前記テンポラリレジスタのうち、前記複数のレジスタだけを前記命令に割り付ける汎用レジスタ割付ステップと、
前記レジスタが割り付けられた命令について、オペランドを前記テンポラリレジスタに置き換えることが可能か否かを判定する置換判定ステップと、
置き換え可能と判定された命令のオペランドを前記テンポラリレジスタに置き換える置換ステップとを含む
ことを特徴とする請求項１３記載のコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ及びそのコンパイラに関し、特に、複数の命令を同時に実行するＶＬＩＷプロセッサ等に関する。
【背景技術】
【０００２】
従来、複数の実行ユニットを備え、長命令語に含まれる複数の命令を各クロックサイクルで同時に実行するＶＬＩＷプロセッサが各種提案されている（たとえば、特許文献１参照）。
【０００３】
図１５（ａ）は、従来のＶＬＩＷプロセッサが実行する長命令語の命令フォーマットの例を示す図である。ここでは、並列実行可能な３つの命令＃１〜＃３が置かれる３つの命令フィールドからなる長命令語が示されている。各命令フィールドは、レジスタ演算命令であれば、その演算の種類を示すオペコードと、演算の対象を示すオペランド（例えば、２つのソースレジスタｓｒｃ１及びｓｒｃ２と、１つのデスティネーションレジスタｄｓｔを指定するレジスタ指定部）とからなる。
【０００４】
図１５（ｂ）は、このような長命令語を実行する従来のＶＬＩＷプロセッサのアーキテクチャ（ここでは、レジスタへの入出力に着目したアーキテクチャ）の例を示す図である。ここでは、レジスタファイルと、３つの演算器を備えるアーキテクチャが示されている。
【０００５】
このような従来のＶＬＩＷプロセッサによって、例えば、２つのレジスタに格納された値を演算し、その結果を１つのレジスタに格納するというレジスタ演算命令が最大３つまで同時に実行され、処理の高速化が図られている。
【特許文献１】特開２００４−００５７３３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記のような従来のＶＬＩＷプロセッサの長命令語は、図１５（ａ）に示されるように、各命令フィールドについて最大３つのレジスタ指定部（ｓｒｃ１、ｓｒｃ２、ｄｓｔ）をもつために、１つの長命令語に含まれるレジスタ指定部の総ビット数が極めて大きくなるという問題ある。
【０００７】
たとえば、３２個のレジスタからなるレジスタファイルを備えるＶＬＩＷプロセッサであれば、１つのレジスタを指定するのに５ビットが必要となるので、図１５（ａ）に示された命令フォーマットであれば、各命令フィールドについて最大１５ビットのレジスタ指定部、つまり、長命令語全体として、最大４５ビットものレジスタ指定部が必要となる。そのために、ＶＬＩＷプロセッサの命令パスに関連する回路の規模が大きくなってしまう。
【０００８】
さらに、図１５（ａ）に示されるような命令フォーマットによれば、演算器の入力ポートに同時に接続するレジスタ数は最大６個となるために、図１５（ｂ）に示されるように、レジスタファイルに６個の出力ポートを設けておく必要があり、この点においても回路規模が大きくなってしまうという問題がある。
【０００９】
そこで、本発明は、このような問題点に鑑みてなされたものであり、レジスタを指定するのに必要なビット数が少なくて済む縮小化された命令セットをもつＶＬＩＷプロセッサ等を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本発明に係るプロセッサは、複数のレジスタと複数の演算器を備える、長命令語を実行するプロセッサであって、前記長命令語には、前記複数のレジスタの中から少なくとも１つを指定するレジスタ指定フィールドと、前記演算器を用いた演算を指定する複数の命令と、前記レジスタ指定フィールドで指定されたレジスタと当該レジスタを使用する命令との対応関係を示すレジスタ割当情報とが含まれ、前記プロセッサはさらに、前記レジスタ指定フィールドで指定されたレジスタの値を出力する出力ポートと、前記レジスタ割当情報が示す対応関係に従って、前記出力ポートから出力された値が前記演算器に入力されるように選択制御をする入力選択制御手段とを備えることを特徴とする。つまり、ソースレジスタについて、長命令語に含まれる各命令のオペランド指定の共通化が図られている。
【００１１】
そして、前記プロセッサはさらに、前記レジスタ指定フィールドで指定されたレジスタに値を格納するための入力ポートと、前記レジスタ割当情報が示す対応関係に従って、前記演算器で得られた演算結果が前記入力ポートを介して前記レジスタに格納されるように選択制御をする出力選択制御手段とを備えてもよい。つまり、デスティネーションレジスタについても、長命令語に含まれる各命令のオペランド指定の共通化が図られていてもよい。
【００１２】
ここで、前記レジスタ割当情報は、前記複数の命令中のレジスタオペランドとして分散して配置され、各命令中のレジスタオペランドは、当該命令のソースレジスタ及びデスティネーションレジスタとして前記レジスタ指定フィールドで指定されたレジスタを使用するか否かを示す構成としてもよい。
【００１３】
これによって、長命令語には、各命令で使用されるレジスタをまとめて指定するレジスタ指定フィールドが置かれ、各命令中には、レジスタ指定フィールドで指定されたレジスタを使用するか否かを示す短い情報だけが置かれるので、長命令語のサイズがコンパクト化される。
【００１４】
そして、１つの長命令語で使用可能なレジスタの個数は、レジスタ指定フィールドで指定可能な個数に制限されるので、例えば、最高で３個のソースレジスタと１個のデスティネーションレジスタを使用することができると制限することで、レジスタファイルに設ける出力ポート及び入力ポートの個数が少なくて済む。
【００１５】
なお、前記レジスタ割当情報は、前記長命令語中の連続するビット位置に配置され、前記レジスタ指定フィールドで指定されたレジスタを使用する命令を前記複数の命令の中から特定する情報を含んでもよい。つまり、各命令のオペランドに関する情報を長命令語中の１箇所にまとめて配置する命令フォーマットであってもよい。
【００１６】
また、前記レジスタ指定フィールドは、複数のレジスタを指定し、前記レジスタ割当情報は、前記レジスタ指定フィールドで指定された複数のレジスタを予め定められた順序に従って前記複数の命令に割り当てる情報であってもよい。たとえば、前記レジスタ指定フィールドは、複数のレジスタを指定する複数のレジスタ部を含み、前記レジスタ割当情報は、前記長命令語における前記複数のレジスタ部の並び順と前記複数の命令の並び順とに従って、前記レジスタを重複することなく前記命令に割り当てていってもよい。つまり、レジスタ指定部の並び順及び命令フィールドの並び順で優先的にレジスタを暗黙的に割り当ててもよい。
【００１７】
また、前記プロセッサはさらに、前記演算器による演算結果を保持するテンポラリレジスタを備え、前記レジスタ指定フィールドは、前記複数のレジスタ及び前記テンポラリレジスタの中から少なくとも１つを指定してもよい。つまり、汎用レジスタだけでなく、演算結果を一時的に保持する専用のレジスタを各命令のオペランドの対象としてもよい。
【００１８】
ここで、前記プロセッサは、前記複数の演算器それぞれに対応する複数のテンポラリレジスタを備えてもよいし、前記テンポラリレジスタは、対応する前記演算器が新たな演算結果を生成する度に当該演算結果を新たに保持するパイプラインステージ間のレジスタであってもよいし、前記プロセッサは、前記複数の演算器のうちの２以上の演算器による演算結果を選択的に保持するテンポラリレジスタを備えてもよい。つまり、テンポラリレジスタとして、各演算器に固有のレジスタであってもよいし、パイプラインステージ間のレジスタであってもよいし、複数の演算器によって共用されるレジスタであってもよい。
【００１９】
また、上記目的を達成するために、本発明に係るコンパイラは、複数のレジスタと複数の演算器を備えるプロセッサを対象とし、命令列を長命令語列に変換するコンパイラであって、前記命令列を同時実行可能な複数の命令からなる命令グループに分類する命令グループ分類ステップと、分類された各命令グループを、当該命令グループで使用されるレジスタを指定するレジスタ指定フィールドと、前記複数の命令を特定する複数の命令コードと、前記レジスタ指定フィールドで指定されたレジスタと当該レジスタを使用する命令との対応関係を示すレジスタ割当情報とが含まれる長命令語フォーマットに変換するフォーマット変換ステップと、長命令語フォーマットに変換された各命令グループを対応する機械語に変換する機械語命令変換ステップとを含むことを特徴とする。つまり、通常のフォーマットの長命令語を本発明のプロセッサに固有のフォーマットに変換する特徴的なステップを含む。
【００２０】
ここで、前記命令グループ分類ステップは、前記レジスタ指定フィールドで指定可能なレジスタの個数を考慮することなく、前記演算器の個数を考慮して命令グループを生成するグループ化ステップと、生成された命令グループで使用されるレジスタの個数が前記レジスタ指定フィールドで指定可能なレジスタの個数を超えているか否かを判定する制約判定ステップと、超えていると判定された場合に、当該命令グループを、前記レジスタ指定フィールドで指定可能な個数のレジスタを用いる命令グループに分割する命令分割ステップとを含んでもよい。つまり、レジスタ制約を考慮することなく命令グループを作成し、レジスタ制約を違反した命令グループを分割する。
【００２１】
また、前記プロセッサはさらに、前記演算器による演算結果を保持するテンポラリレジスタを備え、前記レジスタ指定フィールドは、前記複数のレジスタ及び前記テンポラリレジスタの中から少なくとも１つを指定してもよい。このとき、前記コンパイラはさらに、前記複数のレジスタ及び前記テンポラリレジスタのうち、前記複数のレジスタだけを前記命令に割り付ける汎用レジスタ割付ステップと、前記レジスタが割り付けられた命令について、オペランドを前記テンポラリレジスタに置き換えることが可能か否かを判定する置換判定ステップと、置き換え可能と判定された命令のオペランドを前記テンポラリレジスタに置き換える置換ステップとを含む構成とすればよい。これによって、汎用レジスタだけでなく、テンポラリレジスタを含めて、共通のレジスタ指定フィールドを持つ特徴的な命令フォーマットの長命令語を生成するコンパイラが実現される。
【発明の効果】
【００２２】
本発明により、長命令語に含まれる各命令で使用されるレジスタをまとめて指定するレジスタ指定フィールドが長命令語に含まれ、長命令語に含まれる各命令のオペランドとしては、レジスタ指定フィールドで指定されたレジスタの使用に関する短い情報だけが配置されるので、長命令語のサイズが小さくなる。よって、命令メモリへのバス幅を減らす、もしくは命令メモリへのアクセス回数を減らす事が可能になるため、命令メモリへのバストラフィックが改善される事による性能の向上、および命令メモリアクセスによる消費電力を抑える事につながる。つまり、本発明のプロセッサは、長命令語のフェッチ、保持、解読等に関連する回路規模が小さくて済む。
【００２３】
また、長命令語で使用されるレジスタの総数は、レジスタ指定フィールドで指定されるレジスタの個数に限定されるので、その個数を小さい値とすることで、レジスタファイルに設けるべき出力ポートの数や入力ポートの数が少なくて済み、この点においても、プロセッサの回路規模が小さくて済む。
【００２４】
以上のように、本発明により、小さい回路規模で複数の演算を並列に実行するパフォーマンスの高いＶＬＩＷプロセッサが実現され、特に、機器組み込み用のプロセッサとして実用的価値が極めて高い。
【発明を実施するための最良の形態】
【００２５】
以下、本発明に係るＶＬＩＷプロセッサ及びコンパイラについて図面を用いて詳細に説明する。
（実施の形態１）
図１は、実施の形態１におけるＶＬＩＷプロセッサが実行する長命令語の命令フォーマットを示す図である。本図に示されるように、この長命令語は、４７ビット長であり、１つのレジスタ指定フィールドと３つの命令フィールドとから構成される。
【００２６】
レジスタ指定フィールドは、３つの命令フィールドで使用されるレジスタを指定する共通のフィールドであり、４つのレジスタ指定部（１つのデスティネーションレジスタｄｓｔ、３つのソースレジスタｓｒｃＡ〜Ｃを指定するビットフィールド）からなる。各レジスタ指定部ｄｓｔ、ｓｒｃＡ〜Ｃは、本ＶＬＩＷプロセッサが備える３２個の汎用レジスタ（レジスタファイル）のうちの１個を指定するための５ビットからなる。
【００２７】
３つの命令フィールド（第１〜第３命令フィールド）は、並列実行可能な３つの命令（命令＃１〜＃３）を配置するフィールドであり、各命令フィールドには、レジスタ演算命令であれば、６ビットのオペコードと３ビットのオペランドが置かれる。
３ビットのオペランドは、その長命令語のレジスタ指定フィールドで指定されているレジスタを使用するか否かを示す。具体的には、オペランドの第１ビットｓｒｃ１は、レジスタ指定フィールドで指定されているソースレジスタ（ｓｒｃＡ〜Ｃの１つ）を、その命令の第１ソースレジスタとして使用する（「１」）か否か（「０」）を示し、第２ビットｓｒｃ１は、レジスタ指定フィールドで指定されているソースレジスタ（ｓｒｃＡ〜Ｃの１つ）を、その命令の第２ソースレジスタとして使用する（「１」）か否か（「０」）を示し、第３ビットｄｓｔは、レジスタ指定フィールドで指定されているデスティネーションレジスタｄｓｔを、その命令のデスティネーションレジスタとして使用する（「１」）か否か（「０」）を示す。
【００２８】
ここで、各命令で使用される具体的なレジスタの割り当てについては、以下のルールが存在する。つまり、
（１）レジスタ指定フィールドで指定された４つのレジスタ（ｄｓｔ、ｓｒｃＡ〜Ｃ）は、その長命令語に含まれる３つの命令のいずれかによって使用され、２以上の命令によって重複的に使用されることはない。
（２）レジスタ指定フィールドで指定された３つのソースレジスタｓｒｃＡ〜Ｃは、優先順位の高い方から、ｓｒｃＡ、ｓｒｃＢ、ｓｒｃＣの順で各命令によって使用される。
（３）レジスタ指定フィールドで指定された３つのソースレジスタｓｒｃＡ〜Ｃは、優先順位の高い方から、命令＃１、命令＃２、命令＃３の順で割り当てられる。
【００２９】
たとえば、命令＃１〜命令＃３のオペランド（ｓｒｃ１、ｓｒｃ２、ｄｓｔ）が、それぞれ、「１００」、「１１１」、「０００」である場合には、命令＃１は、レジスタｓｒｃＡをソースとし、命令＃２は、レジスタｓｒｃＢ及びｓｒｃＣをソース、レジスタｄｓｔをデスティネーションとし、命令＃３は、レジスタをオペランドに含まないことを意味する。
【００３０】
図２は、本実施の形態におけるＶＬＩＷプロセッサ１０のハードウェア構成を示すブロック図である。なお、本図では、本ＶＬＩＷプロセッサ１０の特徴的な箇所、つまり、レジスタ演算に関連する構成要素だけが示され、メモリとのデータ転送を行う入出力ポート等の一般的な構成要素は省略されている。また、図中の実線は主にデータの流れを示し、破線は主に制御の流れを示す。
【００３１】
本図に示されるように、ＶＬＩＷプロセッサ１０は、命令レジスタ１１、レジスタファイル１２、入力セレクタ１３、第１〜第３演算器１４ａ〜１４ｃ、出力セレクタ１５、解読器１６を備える。
命令レジスタ１１は、メモリからフェッチした長命令語を保持するレジスタである。
レジスタファイル１２は、３２個の汎用レジスタの集まりであり、命令レジスタ１１に保持された長命令語のレジスタ指定フィールドにおける３つのソースレジスタ指定部ｓｒｃＡ〜Ｃが示す３つのレジスタの値を入力セレクタ１３に出力する３つの出力ポートと、その長命令語のレジスタ指定フィールドにおけるデスティネーションレジスタ指定部ｄｓｔが示す１つのレジスタに出力セレクタ１５から出力される値を格納するための１つの入力ポートを有する。
【００３２】
入力セレクタ１３は、解読器１６による制御の下で、レジスタファイル１２から出力された３つの値を第１〜第３演算器１４ａ〜１４ｃのいずれかに振り分けて出力する。
第１〜第３演算器１４ａ〜１４ｃは、ＡＬＵ等であり、最大２つの入力値を演算し、その結果を出力セレクタ１５に出力する。
出力セレクタ１５は、解読器１６による制御の下で、第１〜第３演算器１４ａ〜１４ｃの中から選択した１つの演算器からの出力値をレジスタファイル１２（命令レジスタ１１に保持された長命令語のレジスタ指定フィールドにおけるデスティネーションレジスタ指定部ｄｓｔが示す１つのレジスタ）に出力する。
【００３３】
解読器１６は、命令レジスタ１１に保持された長命令語に含まれる３つの命令を解読して各構成要素を制御する回路であり、例えば、３つの命令＃１〜＃３に含まれるソースレジスタ指定ビットｓｒｃ１及びｓｒｃ２に従って入力セレクタ１３を制御するとともにデスティネーションレジスタ指定ビットｄｓｔに従って出力セレクタ１５を制御することで、長命令語のレジスタ指定フィールドで指定されたレジスタが上記ルールに従って命令＃１〜＃３のソース又はデスティネーションとして使用されるように制御する。
【００３４】
次に、以上のように構成された本実施の形態におけるＶＬＩＷプロセッサ１０の具体的な動作について説明する。
図３（ａ）は、長命令語の例を示す。ここでは、３つの命令＃１〜＃３を含む長命令語が示されている。命令＃１（ａｄｄ  ｒ４、ｒ１、ｒ２）は、レジスタｒ１の値とレジスタｒ２の値とを加算し、その結果をレジスタｒ４に格納する命令であり、命令＃２（ｓｔ  （０）、ｒ３）は、レジスタｒ３の値をメモリの第０番地に格納する命令であり、命令＃３（ｂｒ  ＡＡＡ）は、番地ＡＡＡに分岐する命令である。
【００３５】
図３（ｂ）は、図３（ａ）に示された長命令語のビットパターン（あるいは、その意味）を示す図である。図３（ｂ）に示されるように、レジスタ指定フィールドのデスティネーションレジスタ指定部ｄｓｔはレジスタｒ４を示し、ソースレジスタ指定部ｓｒｃＡ〜Ｃはそれぞれレジスタｒ１、ｒ２、ｒ３を示し、命令＃１はオペコード「ａｄｄ」とオペランド「１１１」を示し、命令＃２はオペコード「ｓｔ  （０）」とオペランド「１００」を示し、命令＃３はオペコード「ｂｒ  ＡＡＡ」とオペランド「０００」を示している。
【００３６】
このような長命令語をフェッチしたＶＬＩＷプロセッサ１０は、次の動作をする。
命令レジスタ１１に保持された長命令語のレジスタ指定フィールドに含まれる３つのソースレジスタ指定部ｓｒｃＡ〜Ｃの値に基づいて、レジスタファイル１２は、３つのレジスタｒ１、ｒ２、ｒ３の格納値を３つの出力ポートを介して入力セレクタ１３に出力する。同様に、デスティネーション指定部ｄｓｔの値に基づいて、出力セレクタ１５から出力される値が入力ポートを介してレジスタｒ４に入力されるように接続制御する。
【００３７】
一方、解読器１６は、命令＃１のオペランドが「１１１」であることから、ソースレジスタ指定部ｓｒｃＡ及びｓｒｃＢで指定されたレジスタｒ１及びｒ２の値が第１演算器１４ａに入力されるように入力セレクタ１３を制御するとともにその演算結果がデスティネーションレジスタ指定部ｄｓｔで指定されたレジスタｒ４に格納されるように出力セレクタ１５を制御し、命令＃２のオペランドが「１００」であることから、ソースレジスタ指定部ｓｒｃＣで指定されたレジスタｒ３の値が第２演算器１４ｂに入力されるように入力セレクタ１３を制御する。なお、レジスタ演算と関連しない制御（命令「ｓｔ」に関るメモリ転送、命令「ｂｒ」に関るプログラムカウンタの更新等）については、通常のＶＬＩＷプロセッサと同様の動作をする。
【００３８】
その結果、第１演算器１４ａにおいてレジスタｒ１の値とレジスタｒ２の値とが加算され、その結果がレジスタｒ４に格納され（つまり、「ａｄｄ  ｒ４、ｒ１、ｒ２」が実行され）、第２演算器１４ｂにおいてレジスタｒ３の値が（第２演算器１４ｂを通過した後に）メモリの第０番地に格納され、実行制御が番地ＡＡＡに分岐するという処理が並列実行される。
【００３９】
以上のように、本実施の形態におけるＶＬＩＷプロセッサ１０によれば、長命令語には、各命令フィールドに共通のレジスタ指定部が置かれるとともに、各命令フィールドにはレジスタを使用するか否かを示す小さな情報だけが配置される。よって、命令サイズがコンパクト化され、本発明に係るＶＬＩＷプロセッサ１０は、従来よりも小さな回路規模で実現され得る。さらに、本実施の形態におけるＶＬＩＷプロセッサ１０のレジスタファイル１２は、３つの出力ポートと１つの入力ポートを備えるだけで済むので、この点においてもハードウェアの複雑度が軽減される。
【００４０】
図４は、本発明に係るＶＬＩＷプロセッサ１０をターゲットとするコンパイラ２０の構成を示す機能ブロック図である。このコンパイラ２０は、Ｃ言語等の高級言語で記述されたソースプログラム２５をＶＬＩＷプロセッサ１０用の機械語プログラム２６に変換するコンパイラであり、中間言語変換部２１、命令グループ化部２２、フォーマット変換部２３及び機械語命令変換部２４から構成される。
【００４１】
中間言語変換部２１は、高級言語で記述されたソースプログラム２５を構文解析等することで、中間言語の命令列に変換する。ここで、中間言語は、このコンパイラ２０に特有の言語であり、機械語命令に１対１に対応するアセンブラ命令に近い表現形式であるが、具体的なリソース（３２個のレジスタ等）が割り当てられる前の論理的な表現形式で記述される。
【００４２】
命令グループ化部２２は、中間言語変換部２１で出力された命令列を長命令語の単位でグループ化することで、並列化スケジューリングを行う。このとき、ＶＬＩＷプロセッサ１０が備えるリソースの範囲内で可能な限り３つの命令が１つの長命令語にパック化されるようにグループ化する。たとえば、レジスタに関しては、ソースとして最大３個のレジスタが使用され、デスティネーションとして最大１個のレジスタが使用される範囲内で３つの命令を１つの長命令語にグループ化する。
【００４３】
フォーマット変換部２３は、命令グループ化部２２で生成された命令グループごとに、命令グループに含まれる複数の命令を、図１に示される命令フォーマットに変換する。つまり、１つの命令グループに含まれる複数の命令で使用される全てのレジスタを抽出することで、レジスタ指定フィールドを生成し、各命令が使用するレジスタとレジスタ指定フィールドとを対応づけることで、各命令中のオペランドを生成する。たとえば、図３（ａ）に示される３つの命令からなる命令グループを図３（ｂ）に示されるフォーマットの長命令語に変換する。このときに、レジスタ等のリソースの割り当ても行う。
【００４４】
機械語命令変換部２４は、フォーマット変換部２３によるフォーマット変換が終わった長命令語の列に対して、長命令語に含まれる各命令を対応する機械語命令に置き換えることで、機械語プログラム２６を生成する。
図５は、以上のように構成されたコンパイラ２０の特徴的な動作を示すフローチャートである。ここでは、命令グループ化部２２によるグループ化、つまり、図１に示される長命令語のフォーマットに依存する命令のグループ化の詳細な手順が示されている。
【００４５】
命令グループ化部２２は、まず、中間言語変換部２１から出力された命令列に対して、レジスタ制約（ここでは、１つの長命令語で使用されるソースレジスタの最大個数が３で、デスティネーションレジスタの最大個数が１）を考慮することなく、３つの命令が１つの長命令語にパック化されるように、グループ化を行う（Ｓ１０）。
次に、命令グループ化部２２は、いまグループ化した長命令語について、上記レジスタ制約が満たされているか否かを判定する（Ｓ１１）。
【００４６】
その結果、レジスタ制約が満たされていない場合には（Ｓ１２でＮｏ）、その長命令語を、レジスタ制約が満たされた長命令語の集まりとなるように、分割する（Ｓ１３）。
たとえば、２つのソースレジスタと１つのデスティネーションレジスタを使用する命令＃１と、１つのソースレジスタを使用する命令＃２と、２つのソースレジスタと１つのデスティネーションレジスタを使用する命令＃３とがパック化された長命令語については、レジスタ制約が満たされていないので、例えば、命令＃１及び命令＃２からなる第１の長命令語と、命令＃２だけからなる第２の長命令語に分割する。なお、分割によって得られた長命令語のうち、レジスタ制約に余裕がある長命令語（例えば、上記例における第２の長命令語）については、上記ステップＳ１０以下を繰り返すことで、他の命令とのパック化の対象としてもよい。
【００４７】
以上のように、本実施の形態におけるコンパイラ２０によれば、ソースプログラム２５からＶＬＩＷプロセッサ１０用の機械語プログラム２６が生成される。つまり、ＶＬＩＷプロセッサ１０の長命令語の命令フォーマットに依存するレジスタ制約を考慮した長命令語列が生成される。
なお、本実施の形態のＶＬＩＷプロセッサ１０では、長命令語のレジスタ指定フィールドで指定された４つのレジスタを各命令が重複して使用しないこととなっていたが（ルール（１））、若干のハードウェア規模の増大を許容するならば、この制約を外してもよい。たとえば、レジスタ指定フィールドで指定しているレジスタｒ１を命令＃１と命令＃２がソースレジスタとして同時に使用してもよい。この場合には、各命令のソースレジスタ指定部及びオペランド指定部として、ｓｒｃＡ〜Ｃのいずれかを特定する２ビットを割り当てればよい。レジスタを指定するために各命令中に５ビットが必要とされた従来の長命令語よりも命令サイズが全体として縮小化されることには変りない。
【００４８】
また、本実施の形態の長命令語では、各命令中のオペランドがレジスタ指定フィールドで指定されたレジスタを使用するか否かを示したが、レジスタを使用しない場合には、そのことをオペコードが示すように命令マップを定義してもよい。たとえば、オペコードによって、その命令が使用するソースレジスタ及びデスティネーションレジスタの個数が特定され、オペランドでは、その個数に対応した可変長のビット数が割り当てられるように命令マップを定義してもよい。
【００４９】
（実施の形態２）
次に、本発明の実施の形態２におけるＶＬＩＷプロセッサ及びコンパイラについて説明する。本実施の形態におけるＶＬＩＷプロセッサは、実施の形態１と同様の特徴的な命令フォーマットの長命令語を実行するプロセッサであるが、レジスタファイルとは別個に、演算結果を一時的に格納するテンポラリレジスタをさらに備えることを特徴とする。以下、実施の形態１と異なる点を中心に説明する。
【００５０】
図６は、実施の形態２におけるＶＬＩＷプロセッサが実行する長命令語の命令フォーマットを示す図である。本図に示されるように、この長命令語は、５６ビット長であり、１つのレジスタ指定フィールドと３つの命令フィールドとから構成される。
レジスタ指定フィールドを構成する各レジスタ指定部ｄｓｔ、ｓｒｃＡ〜Ｃは、それぞれ、本実施の形態のＶＬＩＷプロセッサが備える３２個の汎用レジスタのうちの１個を指定するための５ビットからなる点で実施の形態１と同様であるが、各命令フィールドのオペランドが６ビットである点で実施の形態１と異なる。
【００５１】
６ビットのオペランドは、第１ソースレジスタを指定する２ビットの第１ソース指定部ｓｒｃ１と、第２ソースレジスタを指定する２ビットの第２ソース指定部ｓｒｃ２と、デスティネーションレジスタを指定する２ビットのデスティネーション指定部ｄｓｔとからなる。
２ビットの各指定部ｓｒｃ１、ｓｒｃ２及びｄｓｔのうちの第１ビット（各２ビットのうちの上位ビット）は、実施の形態１における各命令フィールドのオペランドと同様であり、その長命令語のレジスタ指定フィールド（ｄｓｔ、ｓｒｃＡ〜Ｃ）で指定されているレジスタ（つまり、汎用レジスタ）を使用するか否かを示す。一方、第２ビット（各２ビットのうちの下位ビット）は、本実施の形態におけるＶＬＩＷプロセッサが備える３つのテンポラリレジスタのうち、その命令フィールドに対応するテンポラリレジスタを使用する（「１」）か否か（「０」）を示す。
【００５２】
たとえば、命令＃１のソース指定部ｓｒｃ１が「０１」であれば、その命令＃１は、第１演算器用のテンポラリレジスタをソースレジスタとして使用することを意味し、命令＃２のデスティネーション指定部ｄｓｔが「０１」であれば、その命令＃２は、第２演算器用のテンポラリレジスタをデスティネーションレジスタとして使用することを意味し、命令＃３のソース指定部ｓｒｃ２が「１０」であれば、その命令＃３は、その長命令語のレジスタ指定フィールドで指定されたレジスタをソースレジスタとして使用することを意味する。
【００５３】
図７は、本実施の形態におけるＶＬＩＷプロセッサ３０のハードウェア構成を示すブロック図である。本図に示されるように、ＶＬＩＷプロセッサ３０は、命令レジスタ３１、レジスタファイル１２、入力セレクタ３３、第１〜第３演算器１４ａ〜１４ｃ、出力セレクタ１５、解読器３６及び３つのテンポラリレジスタ３７ａ〜３７ｃを備える。なお、実施の形態１と同様の構成要素には同一の符号を付し、その説明を省略する。
【００５４】
命令レジスタ３１は、メモリからフェッチした５６ビット長の長命令語を保持するレジスタである。
入力セレクタ３３は、解読器３６による制御の下で、レジスタファイル１２から出力された３つの値及び３つのテンポラリレジスタ３７ａ〜３７ｃから出力された値を第１〜第３演算器１４ａ〜１４ｃのいずれかに振り分けて出力する。
【００５５】
解読器３６は、命令レジスタ３１に保持された長命令語に含まれる３つの命令を解読して各構成要素を制御する回路であり、例えば、３つの命令＃１〜＃３に含まれるソースレジスタ指定ビットｓｒｃ１及びｓｒｃ２に従って入力セレクタ３３及びテンポラリレジスタ３７ａ〜３７ｃへの格納を制御するとともにデスティネーションレジスタ指定ビットｄｓｔに従って出力セレクタ１５を制御することで、長命令語のレジスタ指定フィールドで指定されたレジスタ及びテンポラリレジスタ３７ａ〜３７ｃが上記ルールに従って命令＃１〜＃３のソース又はデスティネーションとして使用されるように制御する。
【００５６】
テンポラリレジスタ３７ａ〜３７ｃは、それぞれ、第１〜第３演算器１４ａ〜１４ｃの演算結果を一時的に格納するレジスタであり、解読器３６からの格納指示を受けたときにだけ、演算結果を取り込む。
【００５７】
次に、以上のように構成された本実施の形態におけるＶＬＩＷプロセッサ３０の具体的な動作について説明する。
【００５８】
図８（ａ）は、長命令語の例を示す。ここでは、３つの命令＃１〜＃３を含む長命令語が示されている。命令＃１（ａｄｄ  ｒ８、ＲｅｇＡ、ｒ２）は、テンポラリレジスタ３７ａ（ＲｅｇＡ）の値とレジスタｒ２の値とを加算し、その結果をレジスタｒ８に格納する命令であり、命令＃２（ｎｏｔ  ＲｅｇＢ、ｒ５）は、レジスタｒ５の値を反転し、その結果をテンポラリレジスタ３７ｂ（ＲｅｇＢ）に格納する命令であり、命令＃３（ｓｔ  （０）、ｒ１）は、レジスタｒ１の値をメモリの第０番地に格納する命令である。
【００５９】
図８（ｂ）は、図８（ａ）に示された長命令語のビットパターン（あるいは、その意味）を示す図である。図８（ｂ）に示されるように、レジスタ指定フィールドのデスティネーションレジスタ指定部ｄｓｔはレジスタｒ８を示し、ソースレジスタ指定部ｓｒｃＡ〜Ｃはそれぞれレジスタｒ２、ｒ５、ｒ１を示し、命令＃１はオペコード「ａｄｄ」とオペランド「０１１０１０」を示し、命令＃２はオペコード「ｎｏｔ」とオペランド「１００００１」を示し、命令＃３はオペコード「ｓｔ  （０）」とオペランド「１０００００」を示している。
【００６０】
このような長命令語をフェッチしたＶＬＩＷプロセッサ３０は、次の動作をする。
命令レジスタ３１に保持された長命令語のレジスタ指定フィールドに含まれる３つのソースレジスタ指定部ｓｒｃＡ〜Ｃの値に基づいて、レジスタファイル１２は、３つのレジスタｒ２、ｒ５、ｒ１の格納値を３つの出力ポートを介して入力セレクタ３３に出力する。同様に、デスティネーション指定部ｄｓｔの値に基づいて、出力セレクタ１５から出力される値が入力ポートを介してレジスタｒ８に入力されるように接続制御する。
【００６１】
一方、解読器３６は、命令＃１のオペランドが「０１１０１０」であることから、テンポラリレジスタ３７ａの値及びソースレジスタ指定部ｓｒｃＡで指定されたレジスタｒ２の値が第１演算器１４ａに入力されるように入力セレクタ３３を制御するとともにその演算結果がデスティネーションレジスタ指定部ｄｓｔで指定されたレジスタｒ８に格納されるように出力セレクタ１５を制御し、命令＃２のオペランドが「１００００１」であることから、ソースレジスタ指定部ｓｒｃＢで指定されたレジスタｒ５の値が第２演算器１４ｂに入力されるように入力セレクタ３３を制御するとともにその演算結果がテンポラリレジスタ３７ｂに格納されるようにテンポラリレジスタ３７ｂを制御し、命令＃３のオペランドが「１０００００」であることから、ソースレジスタ指定部ｓｒｃＣで指定されたレジスタｒ１の値が第３演算器１４ｃに入力されるように入力セレクタ３３を制御する。
【００６２】
その結果、第１演算器１４ａにおいてテンポラリレジスタ３７ａ（ＲｅｇＡ）の値とレジスタｒ２の値とが加算され、その結果がレジスタｒ８に格納され（つまり、「ａｄｄ  ｒ８、ＲｅｇＡ、ｒ２」が実行され）、第２演算器１４ｂにおいてレジスタｒ５の値が反転され、その結果がテンポラリレジスタ３７ｂ（ＲｅｇＢ）に格納され（つまり、「ｎｏｔ  ＲｅｇＢ、ｒ５」が実行され）、第３演算器１４ｃにおいてレジスタｒ１の値が（第３演算器１４ｃを通過した後に）メモリの第０番地に格納されという処理が並列実行される。
【００６３】
以上のように、本実施の形態におけるＶＬＩＷプロセッサ３０によれば、長命令語には、各命令フィールドに共通のレジスタ指定部が置かれるとともに、各命令フィールドには汎用レジスタ及びテンポラリレジスタを使用するか否かを示す小さな情報だけが配置される。よって、実施の形態１と同様に、命令サイズがコンパクト化され、本発明に係るＶＬＩＷプロセッサ３０は、従来よりも小さな回路規模で実現され得る。さらに、本実施の形態におけるＶＬＩＷプロセッサ３０のレジスタファイル１２は、３つの出力ポートと１つの入力ポートを備えるだけで済むので、この点においてもハードウェアの複雑度が軽減される。
【００６４】
また、本実施の形態におけるＶＬＩＷプロセッサ３０は、演算結果を一時的に格納するテンポラリレジスタを備えるので、３２個の汎用レジスタだけを備える実施の形態１に比べ、レジスタ制約が緩やかとなり、長命令語のパック化率、つまり、命令の並列度が向上され得る。
【００６５】
図９（ａ）及び（ｂ）は、本実施の形態におけるＶＬＩＷプロセッサ３０が備えるテンポラリレジスタ３７ａ〜３７ｃの効果を説明するための図であり、図９（ａ）は、テンポラリレジスタを使用しないときのプログラムリストを示し、図９（ｂ）は、テンポラリレジスタを使用した同一処理内容のプログラムリストを示す。
【００６６】
これら２つのプログラムを比較して分かるように、テンポラリレジスタを使用することで、必要な汎用レジスタの個数が減少し、第２〜第５命令の３つの命令を１つの長命令語（この長命令語は図８に示されたものと同一）にパック化することが可能となっている。つまり、図９（ａ）に示された第２〜第５命令の３つの命令に着目すると、合計４つのソースレジスタと２つのデスティネーションレジスタを使用しているのでレジスタ制約（最高３つのソースレジスタと１つのデスティネーションレジスタ）を満たしていないが、図９（ｂ）に示された第２〜第５命令の３つの命令はレジスタ制約を満たしている。したがって、テンポラリレジスタを割り当てることで、３つの命令を１つの長命令語にまとめることが可能となり、命令の並列化の度合いが向上している。
【００６７】
なお、本実施の形態におけるＶＬＩＷプロセッサ３０をターゲットとするコンパイラは、基本的には、実施の形態１と同様の機能構成を備える。ただし、本実施の形態におけるコンパイラの命令グループ化部は、実施の形態１の機能に加えて、テンポラリレジスタ３７ａ〜３７ｃの割り付けを考慮した命令のグループ化を行う。
【００６８】
図１０は、本実施の形態におけるコンパイラの命令グループ化部によるテンポラリレジスタを考慮したグループ化の詳細な手順が示されている。
【００６９】
命令グループ化部は、まず、中間言語変換部２１から出力された命令列に対して、レジスタ制約（ここでは、１つの長命令語で使用されるソースレジスタの最大個数が３で、デスティネーションレジスタの最大個数が１）を考慮することなく、３つの命令が１つの長命令語にパック化されるように、グループ化を行う（Ｓ２０）。
【００７０】
次に、命令グループ化部は、いまグループ化した長命令語について、上記レジスタ制約が満たされているか否かを判定する（Ｓ２１）。このとき、オペランドのレジスタについて、テンポラリレジスタを使用することが可能か否かも検討する。つまり、命令列において、演算結果をレジスタに格納し、その後にそのレジスタを参照している箇所があるときには、そのレジスタをテンポラリレジスタに割り当てることによって、可能な限り、上記レジスタ制約が満たされるように検討する。
【００７１】
その結果、テンポラリレジスタを使用することによってレジスタ制約が満たされる場合には（Ｓ２２でＹｅｓ）、汎用レジスタをテンポラリレジスタに置き換え（Ｓ２４）、レジスタ制約が満たされない場合には（Ｓ２２でＮｏ）、その長命令語を、レジスタ制約が満たされた長命令語の集まりとなるように、分割する（Ｓ２３）。これによって、可能な限りテンポラリレジスタを使用した機械語プログラム２６が生成される。
【００７２】
以上のように、本実施の形態におけるコンパイラによれば、ソースプログラム２５からＶＬＩＷプロセッサ３０用の機械語プログラム２６が生成される。つまり、ＶＬＩＷプロセッサ３０の長命令語の命令フォーマットに依存するレジスタ制約を考慮し、かつ、可能な限りテンポラリレジスタを使用した並列度の高い長命令語列が生成される。
【００７３】
なお、本実施の形態のＶＬＩＷプロセッサ３０では、第１〜第３演算器１４ａ〜１４ｃごとに、それぞれ、１個のテンポラリレジスタ３７ａ〜３７ｃが備えられていたが、図１１に示されるＶＬＩＷプロセッサのように、２以上の演算器が１つのテンポラリレジスタを共用する構成であってもよい。この場合には、同一の長命令語内の２以上の命令によって共用テンポラリレジスタに同時に演算結果を格納することがないように、また、共用テンポラリレジスタの生存区間において、その値が共用している演算器によって破壊されることがないように、コンパイラが保証すればよい。
【００７４】
また、本実施の形態のＶＬＩＷプロセッサ３０では、第１〜第３演算器１４ａ〜１４ｃからの演算結果をテンポラリレジスタ３７ａ〜３７ｃに格納するか否かが選択可能であったが、図１２に示される回路図のように、演算結果をテンポラリレジスタに常に格納する構成であってもよい。言い換えると、演算結果をラッチするようなパイプライン間のレジスタを本実施の形態のテンポラリレジスタとして使用してもよい。このようなレジスタは、演算器からの出力値を保持した後、演算器が次の新たな演算を実行するまでの間、その値を保持し続けているので、この期間において、本実施の形態におけるテンポラリレジスタと同様の扱いをすることができるからである。
【００７５】
以上、本発明に係るＶＬＩＷプロセッサ及びコンパイラについて、実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではない。
【００７６】
たとえば、上記実施の形態では、長命令語の各命令中にオペランドレジスタの使用に関する情報（使用する／しない）が置かれたが、本発明は、このような命令フォーマットだけに限られず、図１３（ａ）に示される命令フォーマットのように、各命令のオペランドレジスタの割り当てに関する情報だけをまとめたレジスタ割当フィールドを長命令語に設けてもよい。
【００７７】
図１３（ａ）に示される命令フォーマットは、図１に示される命令フォーマットの変形例に相当し、例えば、長命令語の最下位５ビットに、命令＃１〜命令＃３のオペランドレジスタの割り当てルールを示すレジスタ割当フィールドが置かれている。このレジスタ割当フィールドは、ソースレジスタの割り当てを指定する３ビットのソース指定部ｓｒｃとデスティネーションレジスタの割り当てを指定する２ビットのデスティネーション指定部ｄｓｔからなる。ソース指定部ｓｒｃは、図１３（ｂ）に示されるように、命令＃１〜命令＃３それぞれで使用するソースレジスタの個数の組み合わせを示し、デスティネーション指定部ｄｓｔは、デスティネーションレジスタを使用する命令の位置（「命令＃１」、「命令＃２」、「命令＃３」、「いずれも命令も使用せず」等）を示す。このような割り当てルールを示すレジスタ割当フィールドを長命令語中に配置することで、各命令中にレジスタオペランドに関する情報を配置する必要がなくなり、全体として、長命令語のサイズが縮小され得る。
【００７８】
また、実施の形態２では、テンポラリレジスタを使用する命令フォーマットの例として、図６及び図８（ｂ）に示されたが、本発明は、このような命令フォーマットに限定されるのではない。たとえば、図１４に示されるように、各命令のオペランドを５ビットで構成してもよい。図１４は、図８（ｂ）と同一内容の他の命令フォーマットの例を示している。ここでは、５ビットのオペランドは、上位から、２ビットの各ソース指定部ｓｒｃ１、ｓｒｃ２と、１ビットのデスティネーション指定部ｄｓｔとからなる。２ビットの各ソース指定部ｓｒｃ１、ｓｒｃ２は汎用レジスタまたはどのテンポラリレジスタをソースレジスタとして使用するかを示し、デスティネーション指定部ｄｓｔは汎用レジスタまたは各演算器付属のテンポラリレジスタのどちらを使用するかを示す。なお、レジスタ指定を行う必要がないという情報はオペコード部に含まれる。この命令フォーマットによれば、いずれの命令＃１〜＃３であっても、ソースレジスタとして指定できるテンポラリレジスタは、その位置に対応するテンポラリレジスタに制限されることがない（いずれのテンポラリレジスタＲｅｇＡ〜Ｃをも指定することができる）。
【００７９】
また、上記実施の形態では、長命令語に３つの命令が含まれたが、本発明は、このような並列度に限定されるものではなく、４つの命令や、それ以上の命令が含まれてもよい。並列度が大きくなるほど、本発明の命令フォーマットによる効果（命令サイズの縮小化）が顕著となってくる。
【産業上の利用可能性】
【００８０】
本発明に係るプロセッサは、複数の命令を同時に実行するＶＬＩＷプロセッサ等として、特に、小さな回路規模で高い処理性能が要求されるプロセッサとして、例えば、ＤＶＤプレーヤや携帯電話機等の電子機器に組み込まれるプロセッサとして利用することができる。
【図面の簡単な説明】
【００８１】
【図１】実施の形態１におけるＶＬＩＷプロセッサが実行する長命令語の命令フォーマットを示す図である。
【図２】ＶＬＩＷプロセッサのハードウェア構成を示すブロック図である。
【図３】（ａ）は、長命令語の例を示し、（ｂ）は、そのビットパターン（あるいは、その意味）を示す図である。
【図４】本発明に係るＶＬＩＷプロセッサをターゲットとするコンパイラの構成を示す機能ブロック図である。
【図５】コンパイラの特徴的な動作を示すフローチャートである。
【図６】実施の形態２におけるＶＬＩＷプロセッサが実行する長命令語の命令フォーマットを示す図である。
【図７】ＶＬＩＷプロセッサのハードウェア構成を示すブロック図である。
【図８】（ａ）は、長命令語の例を示し、（ｂ）は、そのビットパターン（あるいは、その意味）を示す図である。
【図９】（ａ）は、テンポラリレジスタを使用しないときのプログラムリストを示し、（ｂ）は、テンポラリレジスタを使用した同一内容のプログラムリストを示す。
【図１０】実施の形態２におけるコンパイラの命令グループ化部によるテンポラリレジスタを考慮したグループ化の詳細な手順を示すフローチャートである。
【図１１】テンポラリレジスタを共用するＶＬＩＷプロセッサのハードウェア構成を示すブロック図である。
【図１２】パイプラインステージ間のレジスタをテンポラリレジスタとするＶＬＩＷプロセッサのハードウェア構成を示すブロック図である。
【図１３】各命令のオペランドレジスタの割り当てに関する情報をまとめたレジスタ割当フィールドをもつ長命令語の命令フォーマットの例を示す図である。
【図１４】テンポラリレジスタの指定が可能な命令フォーマットの他の例を示す図である。
【図１５】（ａ）は、従来のＶＬＩＷプロセッサが実行する長命令語の命令フォーマットの例を示す図であり、（ｂ）は、このような長命令語を実行する従来のＶＬＩＷプロセッサのアーキテクチャの例を示す図である。
【符号の説明】
【００８２】
１０、３０    ＶＬＩＷプロセッサ
１１、３１    命令レジスタ
１２    レジスタファイル
１３、３３    入力セレクタ
１４ａ〜１４ｃ  演算器
１５    出力セレクタ
１６、３６    解読器
２０    コンパイラ
２１    中間言語変換部
２２    命令グループ化部
２３    フォーマット変換部
２４    機械語命令変換部
２５    ソースプログラム
２６    機械語プログラム
３７ａ〜３７ｃ  テンポラリレジスタ
【図１】
2005227942.tif 000003
【図２】
2005227942.tif 000004
【図３】
2005227942.tif 000005
【図４】
2005227942.tif 000006
【図５】
2005227942.tif 000007
【図６】
2005227942.tif 000008
【図７】
2005227942.tif 000009
【図８】
2005227942.tif 000010
【図９】
2005227942.tif 000011
【図１０】
2005227942.tif 000012
【図１１】
2005227942.tif 000013
【図１２】
2005227942.tif 000014
【図１３】
2005227942.tif 000015
【図１４】
2005227942.tif 000016
【図１５】
2005227942.tif 000017