(57)【要約】【課題】小さいサイズの命令コードを適用可能とすることによって、チップ面積および消費電力の低減を図る。【解決手段】複数のスロットを有する命令を処理する演算処理装置１であって、前記各スロットには、それぞれオペレーションと当該オペレーションの圧縮／非圧縮情報を含むデータが格納され、前記演算処理装置は、第１命令の第１スロットに格納された第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、圧縮された前記第１オペレーションのデータに従って、前記第１命令よりも前の第２命令における第２スロットのオペレーションを参照し、前記第１オペレーションを合成するデコードユニット１０１を有する。【選択図】図１７
2013131137.tif 000002
【特許請求の範囲】
【請求項１】
複数のスロットを有する命令を処理する演算処理装置であって、
前記各スロットには、それぞれオペレーションと当該オペレーションの圧縮／非圧縮情報を含むデータが格納され、
前記演算処理装置は、
第１命令の第１スロットに格納された第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、圧縮された前記第１オペレーションのデータに従って、前記第１命令よりも前の第２命令における第２スロットのオペレーションを参照し、前記第１オペレーションを合成するデコードユニットを有する、
ことを特徴とする演算処理装置。
【請求項２】
さらに、
前記第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、前記デコードユニットにより合成された前記第１オペレーションのデータを選択し、前記第１オペレーションの圧縮／非圧縮情報が「非圧縮」を示す場合、非圧縮の前記第１オペレーションのデータを選択するセレクタを有する、
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記デコードユニットは、
前記複数のスロットを有する命令を受け取って、前記各スロットに格納されたオペレーションを分配する命令分配機と、
前記各スロットに対して設けられ、該各スロットに格納されたオペレーションが圧縮されているときに、当該スロットのオペレーションを合成する複数の命令合成ブロックと、を有する、
ことを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項４】
前記デコードユニットは、さらに、
前記各スロットに対してそれぞれ設けられた複数の命令バッファ，複数の命令カウンタおよび複数のオペレーションバッファを有し、
前記各命令合成ブロックは、前記複数の命令バッファの出力および前記複数の命令カウンタの出力を受け取ってオペレーションの合成を行う、
ことを特徴とする請求項３に記載の演算処理装置。
【請求項５】
前記デコードユニットは、
前記第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、前記第２命令における第２スロットの命令バッファおよび命令カウンタの情報を、前記第１スロットの命令バッファおよび命令カウンタにコピーし、それらの情報から前記第１オペレーションを合成し、次の命令を合成するために前記第１スロットの命令カウンタの値をインクリメントする、
ことを特徴とする請求項４に記載の演算処理装置。
【請求項６】
前記デコードユニットは、さらに、
前記各スロットに対してそれぞれ設けられた複数のオペレーションバッファを有し、
前記各命令合成ブロックは、前記複数のオペレーションバッファの出力を受け取ってオペレーションの合成を行う、
ことを特徴とする請求項３に記載の演算処理装置。
【請求項７】
前記デコードユニットは、
前記第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、前記第２命令における第２スロットのオペレーションバッファの情報を、前記第１スロットのオペレーションバッファに設定して前記第１オペレーションを合成する、
ことを特徴とする請求項６に記載の演算処理装置。
【請求項８】
前記命令合成ブロックによる圧縮されたオペレーションの合成は、オペレーションの種類ごとに決まった規則に従って行う、
ことを特徴とする請求項３乃至請求項７のいずれか１項に記載の演算処理装置。
【請求項９】
複数のスロットを有する命令を圧縮する命令圧縮方法であって、
圧縮対象としている第１命令の第１オペレーションと、当該第１オペレーションよりも前の第２命令の第２オペレーションを比較し、
前記第１オペレーションと前記第２オペレーションが同じ種類であり、且つ、前記第１オペレーションと前記第２オペレーションのオペランドの差分が種類ごとに定められている値と等しいときに、前記第１オペレーションを圧縮する、
ことを特徴とする命令圧縮方法。
【請求項１０】
複数のスロットを有する命令を圧縮する命令圧縮プログラムであって、
コンピュータに、
圧縮対象としている第１命令の第１オペレーションと、当該第１オペレーションよりも前の第２命令の第２オペレーションを比較する手順と、
前記第１オペレーションと前記第２オペレーションが同じ種類であり、且つ、前記第１オペレーションと前記第２オペレーションのオペランドの差分が種類ごとに定められている値と等しいときに、前記第１オペレーションを圧縮する手順と、を実行させることを特徴とする命令圧縮プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願で言及する実施例は、演算処理装置、命令圧縮方法および命令圧縮プログラムに関する。
【背景技術】
【０００２】
近年、例えば、家電製品には、製品の特定の機能を実現するためのコンピュータシステムである組み込み機器(組み込みシステム)が利用されている。すなわち、身の回りの電子制御されている製品は、ほぼ組み込みシステムといってよい。
【０００３】
ところで、組み込み機器が提供する機能は、かつては製品のコストに対する制限から単純なものであった。しかしながら、半導体製造技術の進化や製品の付加価値を向上させるという目的から、より複雑な機能が求められるようになっており、最近では、特に、信号処理に対する要求が高くなっている。
【０００４】
一方、組み込み機器は、製品に組み込まれるという形態であるため、それらを実装するためのコストはできるだけ低く抑えるのが好ましい。ここで、実装コストに関連する条件としては、コンピュータを搭載する半導体チップの大きさや半導体を駆動するための電源の大きさなどが挙げられる。
【０００５】
また、最近では、ソフトウェアの開発コストが上昇していることから、ソフトウェア開発基盤を統一し、できるだけ１つの種類のコンピュータアーキテクチャを様々な分野の製品に適用するのが好ましい。
【０００６】
従って、組み込み機器に対する要請としては、小さなチップサイズ、電力対性能比、並びに、プログラミングの柔軟性といったものがある。このような要請を満たすコンピュータアーキテクチャとして、ＶＬＩＷ(Very Long Instruction Word)方式の演算処理装置(プロセッサ)が利用されている。
【０００７】
ところで、従来、ＶＬＩＷ方式のプロセッサとしては、様々なものが提案されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１１−２８２６７４号公報
【特許文献２】特表２００５−５３５９７４号公報
【特許文献３】特開平０７−１８２１６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述したように、家電製品などに組み込まれるコンピュータシステムである組み込み機器において、小さなチップサイズ，電力対性能比およびプログラミングの柔軟性等を満たすものとして、ＶＬＩＷ方式のプロセッサ(ＶＬＩＷプロセッサ)が利用されている。
【００１０】
ここで、ＶＬＩＷプロセッサの命令は、複数のスロットに分割され、それぞれのスロットには、処理内容であるオペレーションが格納される。これにより、１つのＶＬＩＷ命令を実行することで複数のオペレーションを並列に実行することができ、通常のプロセッサと比較して高い性能を得ることが可能になる。
【００１１】
また、ＶＬＩＷ命令を処理するＶＬＩＷプロセッサは、スーパースカラプロセッサと異なり、実行時にプログラムから並列性を抽出する必要がないため、消費電力を低減することができる。
【００１２】
しかしながら、ＶＬＩＷプロセッサは、例えば、命令間の依存関係やスロットで実行できる命令の種類の制約のために、無効オペレーションを入れざるを得ない場合が発生する。
【００１３】
また、コンパイラは、ソースコード中にループを見つけるとアンローリングし、ソフトウェアパイプライン化して性能を引き出そうとする。このとき、１回のループが２つ３つに展開される。
【００１４】
すなわち、ＶＬＩＷプロセッサは、例えば、無効オペレーションが入り、或いは、コンパイラが行う最適化によって、命令コードのサイズが増加する傾向にある。このように、命令コードのサイズが増加すると、少ない消費電力で高い性能を引き出すことが可能なＶＬＩＷプロセッサでも、消費電力の低減の効果が損なわれることにもなる。
【００１５】
すなわち、命令コードのサイズが大きいと、それを格納するために大きな容量の命令メモリを用意しなければならず、チップ面積が大きくなるため、コストの増大を招く。また、チップ面積が大きくなると、それに伴って消費する電力も増加し、さらに、多くの命令を読み出すには電力を要するため、消費電力が増大することになる。
【課題を解決するための手段】
【００１６】
一実施形態によれば、複数のスロットを有する命令を処理する演算処理装置であって、前記各スロットには、それぞれオペレーションと当該オペレーションの圧縮／非圧縮情報を含むデータが格納され、デコードユニットを有する演算処理装置が提供される。
【００１７】
前記デコードユニットは、第１命令の第１スロットに格納された第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、圧縮された前記第１オペレーションのデータに従って、前記第１オペレーションを合成する。
【００１８】
この第１オペレーションの合成は、前記第１命令よりも前の第２命令における第２スロットのオペレーションを参照し、前記第１オペレーションを合成する。
【発明の効果】
【００１９】
開示の演算処理装置によれば、小さいサイズの命令コードを適用可能とすることによって、チップ面積および消費電力を低減することができるという効果を奏する。
【図面の簡単な説明】
【００２０】
【図１】図１は、ＶＬＩＷ命令の一例を説明するための図である。
【図２】図２は、図１のＶＬＩＷ命令のフォーマットを説明するための図である。
【図３】図３は、本実施例の演算処理装置に適用される命令コードの表現方法の一例を説明するための図である。
【図４】図４は、本実施例の演算処理装置に適用される命令の例を説明するための図である。
【図５】図５は、本実施例の演算処理装置におけるオブジェクトファイルの生成の一例を説明するためのフローチャートである。
【図６】図６は、本実施例の演算処理装置におけるアセンブラの処理の一例を説明するためのフローチャートである。
【図７】図７は、図６における基本ブロックの変換処理を実現する基本ブロック変換部の一例を示すブロック図である。
【図８】図８は、図７の基本ブロック変換部における処理をより詳細に説明するためのフローチャートである。
【図９】図９は、図８における命令圧縮処理をより詳細に説明するためのフローチャートである。
【図１０】図１０は、図７における圧縮判定機構の一例を示すブロック図である。
【図１１】図１１は、図１０の圧縮判定機構における処理を説明するためのフローチャートである。
【図１２】図１２は、オペランドの差分の規定値の例を示す図である。
【図１３】図１３は、圧縮対象のアセンブリ列の一例を示す図である。
【図１４】図１４は、図１３のアセンブリ列に対応する圧縮しない場合の命令の長さを示す図である。
【図１５】図１５は、図１３のアセンブリ列に対応する、本実施例の命令圧縮方法により圧縮した場合の命令の長さを示す図である。
【図１６】図１６は、本実施例の演算処理装置が適用されるシステムの一例を示すブロック図である。
【図１７】図１７は、本実施例の演算処理装置の一例を示すブロック図である。
【図１８】図１８は、図１７におけるデコードユニットの一例を示すブロック図である。
【図１９】図１９は、図１８における命令合成ブロックの一例を示すブロック図である。
【図２０】図２０は、図１８および図１９を参照して説明したにおけるデコードユニットによるスロット３の処理を説明するための図である。
【図２１】図２１は、図１７におけるデコードユニットの他の例を示すブロック図である。
【図２２】図２２は、図２１における命令合成ブロックの一例を示すブロック図である。
【図２３】図２３は、図２１および図２２を参照して説明したにおけるデコードユニットによるスロット３の処理を説明するための図である。
【図２４】図２４は、本実施例の命令圧縮プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００２１】
まず、演算処理装置、命令圧縮方法および命令圧縮プログラムの実施例を詳述する前に、ＶＬＩＷ(Very Long Instruction Word)命令、および、ＶＬＩＷ命令のフォーマットを説明する。図１は、ＶＬＩＷ命令の一例を説明するための図である。
【００２２】
図１に示されるように、ＶＬＩＷ方式の演算処理装置(ＶＬＩＷプロセッサ)に適用されるＶＬＩＷ命令は、複数のスロットに分割され、各スロットには、それぞれ処理内容であるオペレーションＡ〜Ｄが格納される。
【００２３】
ＶＬＩＷプロセッサは、図１に示されるような１つのＶＬＩＷ命令を実行することで、複数のオペレーションＡ〜Ｄを並列に実行することができ、通常のプロセッサと比較して高い性能を得ることができる。
【００２４】
図２は、図１のＶＬＩＷ命令のフォーマットを説明するための図である。図２(ａ)および図２(ｂ)に示されるように、ＶＬＩＷ命令のフォーマットとしては、２種類考えられる。
【００２５】
すなわち、図２(ａ)に示されるＶＬＩＷ命令のフォーマットは、例えば、４つのオペレーションＡ〜Ｄに対して、オペレーションの圧縮／非圧縮情報Ａ１〜Ｄ１を命令の先頭にまとめて格納し、その後に、オペレーションＡ２〜Ｄ３を格納するものである。
【００２６】
また、図２(ｂ)に示されるＶＬＩＷ命令のフォーマットは、例えば、４つのオペレーションＡ〜Ｄに対して、スロットごとにオペレーションの圧縮／非圧縮情報Ａ１〜Ｄ１とオペレーションＡ２〜Ｄ２を順に並べて格納するものである。
【００２７】
以下、演算処理装置、命令圧縮方法および命令圧縮プログラムの実施例を、添付図面を参照して詳述する。なお、本実施例は、上述した図２(ｂ)に示すようなスロットごとにオペレーションの圧縮／非圧縮情報とオペレーションを順に並べて格納する命令フォーマットを対象とする。
【００２８】
まず、本実施例に適用するアーキテクチャの例を説明する。本実施例の記載では、４スロットのＶＬＩＷ命令、および、４スロットのＶＬＩＷ命令を処理するＶＬＩＷプロセッサ(演算処理装置)を例として説明する。
【００２９】
ただし、本実施例の適用は、このような４スロットのＶＬＩＷ命令およびそれを処理するＶＬＩＷプロセッサに限定されるものではなく、様々な変形が可能なのはいうまでもない。
【００３０】
次に、本実施例に適用する命令コードの例を説明する。図３は、本実施例の演算処理装置に適用される命令コードの表現方法の一例を説明するための図である。ここで、前述したように、圧縮／非圧縮情報は、スロットごとに格納される(埋め込まれる)ようになっている。
【００３１】
図３に示されるように、圧縮／非圧縮情報は、１ビットの情報とされ、オペレーションが圧縮されている場合、例えば、直前の命令の４つのスロットから１つのスロットを参照するために２ビットの圧縮オペレーションを形成する。なお、オペレーションが圧縮されていない場合には、オペレーションの機械語を形成する。
【００３２】
さらに、非圧縮オペレーションは３１ビットとされ、オペコードに７ビット、ソースオペランド１に８ビット、ソースオペランド２に８ビット、そして、デスティネーションオペランドに８ビットを割り当てるようになっている。
【００３３】
図４は、本実施例の演算処理装置に適用される命令の例を説明するための図である。本実施例に適用される命令としては、例えば、ＮＯＰ命令、ＬＤ命令、ＡＤＤ命令、ＡＤＤ−Ｉ命令、および、ＣＭＰ命令が定義される。
【００３４】
ＮＯＰ命令は、オペコードが『０』で、何もしない命令であり、ＬＤ命令は、オペコードが『１』で、ソースオペランド１のレジスタで指定されるアドレスからメモリの内容を読み込んで、デスティネーションオペランドのレジスタに格納する命令である。
【００３５】
また、ＡＤＤ命令は、オペコードが『２』で、ソースオペランド１とソースオペランド２のレジスタの内容を加算し、デスティネーションオペランドのレジスタに格納する命令である。
【００３６】
さらに、ＡＤＤ−Ｉ命令は、オペコードが『３』で、ソースオペランド１の即値とソースオペランド２のレジスタの内容を加算し、デスティネーションオペランドに格納する命令である。
【００３７】
そして、ＣＭＰ命令は、オペコードが『４』で、ソースオペランド１とソースオペランド２のレジスタの内容を比較し、等しければ『０』を、等しくなければ『１』をデスティネーションオペランドのレジスタに格納する命令である。もちろん、これらの命令は、単なる例であり、他の様々な命令を定義することも可能である。
【００３８】
次に、図５および図６を参照して、圧縮された命令を作成するためのアセンブラの実施例を説明する。すなわち、図５を参照して、プログラムを含むコンパイラツールチェインの処理を示し、その後、図６を参照して、アセンブラ内部の処理を説明する。
【００３９】
図５は、本実施例の演算処理装置におけるオブジェクトファイルの生成の一例を説明するためのフローチャートであり、図６は、本実施例の演算処理装置におけるアセンブラの処理の一例を説明するためのフローチャートである。
【００４０】
図５に示されるように、オブジェクトファイルの生成は、ＳＴ１１〜ＳＴ１３の３つのステップに分かれている。まず、コンパイル(Compile)ステップＳＴ１１では、ソースコードを解析して、機械語に直接対応するアセンブリ表現のコードを出力する。
【００４１】
次に、アセンブリ(Assembly)ステップＳＴ１２に進んで、アセンブリ表現のコードを受け取り、再配置可能なオブジェクトコードを出力する。さらに、リンク(Link)ステップＳＴ１３に進んで、複数のオブジェクトコードを受け取り、マシン実行可能なオブジェクトファイルを生成する。
【００４２】
なお、図５に示すフローチャートは、単なる例であり、ソースコードからマシン実行可能なオブジェクトファイルを作成する方法は、様々なものが存在するのはいうまでもない。
【００４３】
次に、図６に示されるように、アセンブラの処理は、ＳＴ２１〜ＳＴ２５の５つのステップに分かれている。初めの構文解析(Syntax Analysis)ステップＳＴ２１では、与えられたアセンブリ表現のコードを解析する。この段階で機械語の命令列の内容(機械語表現)が明らかになる。ただし、分岐先アドレスについては、アドレスの計算が終了していないため、この段階では不定である。
【００４４】
次に、フロー解析(Flow Analysis)ステップＳＴ２２に進んで、分岐と合流を解析する。つまり、命令列のどの部分で分岐が発生し、どの部分で合流するのかを解析する。この段階で、分岐と合流が発生しない区間、いわゆる基本ブロック(Basic Block)となる命令列が確定する。
【００４５】
さらに、基本ブロックの変換(Basic Block Transformation)ステップＳＴ２３に進んで、得られた基本ブロックの命令(機械語)を、後述する方法により圧縮する。この段階で、各基本ブロックの長さが確定する。
【００４６】
次に、分岐先アドレスの生成(Calculate Branch Address)ステップＳＴ２４に進んで、基本ブロックの長さの情報から分岐先アドレスを生成する。この段階で、全ての命令列の内容(機械語表現)が明らかになる。
【００４７】
最後に、オブジェクトコードの出力(Output Object Code)ステップＳＴ２５において、命令列の機械語表現を出力してアセンブラの処理を終了する。
【００４８】
図７は、図６における基本ブロックの変換処理(ＳＴ２３)を実現する基本ブロック変換部の一例を示すブロック図であり、図８は、図７の基本ブロック変換部における処理をより詳細に説明するためのフローチャートである。
【００４９】
図７に示されるように、基本ブロック変換部は、命令バッファ１１，前命令バッファ１２，変換機構１３，圧縮判定機構１４，選択機構１６，出力命令バッファ１７および出力バッファ１８を有する。なお、圧縮判定機構１４は、オペレーションバッファ１５を含む。
【００５０】
前述したように、基本ブロックの変換ステップＳＴ２３では、基本ブロックの命令を受け取って処理を実行する。すなわち、基本ブロック変換部では、処理を開始すると、出力バッファ１８を初期化(ステップＳＴ３１)した後、基本ブロックのアセンブリコードの列を受け取って、アセンブリコードの１つの命令を命令バッファ１１に読み込む(ステップＳＴ３１)。
【００５１】
さらに、その命令バッファ１１のアセンブリコードを、変換機構１３により機械語に変換して出力する(ステップＳＴ３３)。ここで、命令を圧縮しない場合は、この機械語がそのまま出力される。
【００５２】
ここで、命令バッファ１１の内容は、前命令バッファ１２にコピーされ(ステップＳＴ３４)、圧縮判定機構１５により処理すべきコードが残っているかどうかを判定する(ステップＳＴ３５)。
【００５３】
そして、処理すべきコードが残っていると判定する(ステップＳＴ３５のＹｅｓ)と、ステップＳＴ３６に進んで、次のアセンブリコードの１つの命令を命令バッファ１１に読み込む(ステップＳＴ３６)。
【００５４】
そして、圧縮判定機構１５は、命令バッファ１１と前命令バッファ１２の命令のオペレーションを比較し、命令バッファ１１中の命令のそれぞれのオペレーションが圧縮できるかどうかを判定して処理を行う(ステップＳＴ３７)。
【００５５】
すなわち、圧縮判定機構１５が圧縮できると判定すると、その情報(圧縮可能情報)と、圧縮の参照元となる前命令のスロット番号を選択機構１６に送る。なお、圧縮判定機構１６の処理については、後に詳述する。
【００５６】
選択機構１６は、圧縮しない場合の機械語、並びに、圧縮可能情報とスロット番号を受け取り、圧縮可能であればスロット番号を選択し、また、圧縮不可能であれば機械語を選択して、出力命令バッファ１７に格納する。
【００５７】
圧縮／非圧縮の判定はオペレーションごとに行うため、それらの出力を蓄えるバッファが必要になる。それが、出力命令バッファ１７である。ここで、１命令分の処理が終了すると、出力命令バッファ１７の内容を出力バッファ１８に追記する。
【００５８】
そして、基本ブロック全ての命令の変換が終了する(ステップＳＴ３５のＮｏ)と、ステップＳＴ３８に進んで、出力バッファ１８の内容とその大きさを、前述したステップＳＴ２４の分岐先アドレスの生成(分岐先アドレス生成部)に出力する。
【００５９】
図９は、図８における命令圧縮処理をより詳細に説明するためのフローチャートであり、図８のステップＳＴ３７の処理を詳述するためのものである。命令圧縮処理を開始すると、出力バッファ１８を初期化(ステップＳＴ４１)した後、ステップＳＴ４２〜ステップＳＴ４８の処理を１からスロット数(Ｓ番目)まで(Ｓ)繰り返す。
【００６０】
すなわち、ステップＳＴ４３では、命令バッファ１１のＳ番目のスロットオペレーションを圧縮判定機構１４に設けられたオペレーションバッファ１５に保存して、ステップＳＴ４４に進む。
【００６１】
ステップＳＴ４４では、オペレーションバッファ１５に保存されたオペレーションと前命令バッファ１２のそれぞれのオペレーションを比較し、圧縮できるオペレーションを探す。
【００６２】
そして、ステップＳＴ４５において、圧縮できるオペレーションが見つかった場合(Ｙｅｓ)には、ステップＳＴ４６に進んで、圧縮を表す符号と継続元のスロット番号を出力命令バッファバッファ１７に保存する。
【００６３】
一方、圧縮できるオペレーションが見つからなかった場合(Ｎｏ)には、ステップＳＴ４７に進んで、非圧縮を表す符号とオペレーションバッファ１５に保存されたオペレーションに対応する機械語を出力命令バッファバッファ１７に保存する。
【００６４】
このようにして、ステップＳＴ４２〜ステップＳＴ４８の処理をＳ番目のスロットまで繰り返して終了した場合には、ステップＳＴ４９に進んで、出力命令バッファバッファ１７の内容を出力バッファ１８に出力する。
【００６５】
次に、圧縮判定機構１４を図１０および図１１を参照して説明する。図１０は、図７における圧縮判定機構の一例を示すブロック図であり、図１１は、図１０の圧縮判定機構における処理を説明するためのフローチャートである。
【００６６】
図１０に示されるように、圧縮判定機構１４は、オペコード比較部２１，オペランドの差分取得部２２，圧縮判定テーブル２３および差分比較部２４を含む。
【００６７】
ここで、圧縮判定の対象としている命令のオペレーション(現オペレーション)は、例えば、圧縮判定機構１４に設けられたオペレーションバッファ１５から取得し、また、前の命令のオペレーション(前オペレーション)は、前命令バッファ１２から取得する。
【００６８】
圧縮判定機構１４は、現オペレーションと前オペレーションをそれぞれ比較し、圧縮が可能かどうかを判定する。ここで、圧縮が可能な場合は、例えば、次の２つの条件を満たすことで判定する。
【００６９】
すなわち、ステップＳＴ５１の現オペレーションと前オペレーションが同じ種類かどうか、並びに、ステップＳＴ５２の現オペレーションと前オペレーションのオペランドの差分が種類ごとに定められている値と等しいかどうかにより判定する。
【００７０】
従って、現オペレーションと前オペレーションが同じ種類であって、且つ、現オペレーションと前オペレーションのオペランドの差分が種類ごとに定められている値に等しい場合に、ステップＳＴ５３に進んで、圧縮可能と判定する。
【００７１】
なお、現オペレーションと前オペレーションの種類が異なる、または、現オペレーションと前オペレーションのオペランドの差分が種類ごとに定められている値とは相違する場合には、ステップＳＴ５４に進んで、圧縮不可能と判定する。
【００７２】
ただし、上述した圧縮判定方法は、単なる例であり、他の様々な圧縮判定方法を適用することも可能である。具体的に、現オペレーションと前オペレーションのオペランドの差分に関して、初めの差分は『２』にしておき、残りの差分は『１』とするといった差分の値に変化を持たせ、或いは、圧縮判定の規則をオペレーションの種類ごとに予め決めることもできる。
【００７３】
図１２は、オペランドの差分の規定値の例を示す図であり、ＬＤオペレーション(命令)，ＡＤＤオペレーション，ＡＤＤ−Ｉオペレーション，ＣＭＰオペレーションおよびＮＯＰオペレーションに関する差分の規定値を示している。
【００７４】
すなわち、図１２は、圧縮判定テーブル２３の例を示し、この圧縮判定テーブル２３には、オペコードごとに、圧縮が可能なオペランドの差分が格納されている。
【００７５】
例えば、ＬＤオペレーションの場合、第１オペランドと第３オペランドのそれぞれが『１』だけ変化するオペレーション同士であれば圧縮可能と判定する。また、ＡＤＤオペレーションの場合、第１オペランド〜第３オペランドの全てが『１』だけ変化するオペレーション同士であれば圧縮可能と判定する。
【００７６】
さらに、ＡＤＤ−Ｉオペレーションの場合、第１オペランドおよび第２オペランドは変化せず、第３オペランドが『１』だけ変化するオペレーション同士であれば圧縮が可能と判定する。
【００７７】
そして、ＣＯＭＰオペレーションの場合、第２オペランドと第３オペランドのそれぞれが『１』だけ変化するオペレーション同士であれば圧縮可能と判定する。なお、ＮＯＰオペレーションのようにオペランドを持たないオペレーションの場合には、オペコードの種類が一致するだけで圧縮が可能と判定すればよい。
【００７８】
図１３は、圧縮対象のアセンブリ列の一例を示す図である。図１３に示されるように、圧縮対象のアセンブリ列が、例えば、４つのスロット０〜スロット３を有する命令１〜命令４の場合を考える。
【００７９】
図１４は、図１３のアセンブリ列に対応する圧縮しない場合の命令の長さを示す図であり、図１５は、図１３のアセンブリ列に対応する、本実施例の命令圧縮方法により圧縮した場合の命令の長さを示す図である。
【００８０】
なお、図１４および図１５における上位２ビットの『０ｘ』は、１６進数(４ビット)であることを示すためのものである。従って、各スロットにおける非圧縮命令(オペレーション)は、４ビット×８＝３２ビットとなる。
【００８１】
まず、ＬＤオペレーションに注目すると、図１３に示されるように、命令１のスロット０では『ＬＤ １，５』、命令２のスロット０では『ＬＤ ２，６』、命令３のスロット０では『ＬＤ ３，７』，命令４のスロット０では『ＬＤ ４，８』と変化している。なお、ＬＤオペレーションに関しては、第１オペランド(ソースオペランド)および第３オペランド(デスティネーションオペランド)の２つのオペランドが示されている。
【００８２】
ここで、ＬＤオペレーションは、図１２を参照して説明したように、第１オペランドと第３オペランドのそれぞれが『１』だけ変化するオペレーション同士であれば圧縮可能と判定する。従って、ＬＤオペレーションに関しては、命令２のスロット０，命令３のスロット０および命令４のスロット０で圧縮することができる。
【００８３】
すなわち、図１５に示されるように、ＬＤオペレーションに関して、命令２のスロット０，命令３のスロット０および命令４のスロット０は、全て前の命令のスロット０を参照するため、全て『１００』として３ビットデータに圧縮される。
【００８４】
ここで、圧縮された３ビットデータ『１００』において、最上位ビット(先頭ビット)が圧縮／非圧縮情報を示し、『１』のときは圧縮可能なオペレーションであることを示す。さらに、最上位ビットが『１』のとき、それに続く下位２ビット(後続２ビット)が前の命令のどのスロットのオペレーションを参照するかを示す。
【００８５】
従って、圧縮された命令２のスロット０の『１００』は、命令１のスロット０のオペレーションを参照することを示し、圧縮された命令３のスロット０の『１００』は、命令２のスロット０のオペレーションを参照することを示す。さらに、圧縮された命令４のスロット０の『１００』は、命令３のスロット０のオペレーションを参照することを示す。
【００８６】
次に、ＡＤＤ−Ｉオペレーションに注目すると、図１３に示されるように、命令１のスロット１では『ＡＤＤ−Ｉ ＃８，４，１２』、命令２のスロット１では『ＡＤＤ−Ｉ ＃８，４，１３』と変化している。また、例えば、命令３のスロット２では『ＡＤＤ−Ｉ ＃８，４，１４』、命令４のスロット２では『ＡＤＤ−Ｉ ＃８，４，１５』と変化している。
【００８７】
ここで、ＡＤＤ−Ｉオペレーションは、図１２を参照して説明したように、第１オペランドおよび第２オペランドは変化せず、第３オペランドが『１』だけ変化するオペレーション同士であれば圧縮が可能と判定する。従って、ＡＤＤ−Ｉオペレーションに関しては、命令２のスロット１，命令３のスロット２および命令４のスロット２で圧縮することができる。
【００８８】
すなわち、図１５に示されるように、ＡＤＤ−Ｉオペレーションに関して、命令２のスロット１，命令３のスロット２は、前の命令のスロット１を参照するため、『１０１』として圧縮され、また、命令４のスロット２は、前の命令のスロット２を参照するため、１１０』として圧縮される。
【００８９】
従って、圧縮された命令２のスロット１の『１０１』は、命令１のスロット２のオペレーションを参照することを示し、圧縮された命令４のスロット２の『１１０』は、命令３のスロット２のオペレーションを参照することを示す。
【００９０】
また、ＡＤＤオペレーションに注目すると、図１３に示されるように、命令１のスロット２では『ＡＤＤ ８，９，１０』、命令１のスロット３では『ＡＤＤ ４，８，０』、命令２のスロット３では『ＡＤＤ ５，９，１』と変化している。
【００９１】
ここで、ＡＤＤオペレーションは、図１２を参照して説明したように、第１オペランド〜第３オペランドの全てが『１』だけ変化するオペレーション同士であれば圧縮可能と判定する。従って、ＡＤＤオペレーションに関しては、命令２のスロット３で圧縮することができる。
【００９２】
すなわち、図１５に示されるように、ＡＤＤオペレーションに関して、命令２のスロット３は、命令１のスロット２に対しては圧縮可能と判定されないが、命令１のスロット３に対しては圧縮可能と判定され、『１１１』として圧縮される。従って、圧縮された命令２のスロット３の『１１１』は、命令１のスロット３のオペレーションを参照することを示す。
【００９３】
さらに、ＣＭＰオペレーションに注目すると、図１３に示されるように、命令３のスロット１では『ＣＭＰ ８，９，１１』、命令４のスロット１では『ＣＭＰ ８，１０，１２』と変化している。
【００９４】
ここで、ＣＭＰオペレーションは、図１２を参照して説明したように、第２オペランドと第３オペランドのそれぞれが『１』だけ変化するオペレーション同士であれば圧縮可能と判定する。
【００９５】
すなわち、図１５に示されるように、ＣＭＰオペレーションに関して、命令４のスロット１は、前の命令のスロット１を参照するため、『１０１』として圧縮される。従って、圧縮された命令４のスロット１の『１０１』は、命令３のスロット１のオペレーションを参照することを示す。
【００９６】
なお、ＮＯＰオペレーションは、オペコードの種類が一致するだけで圧縮可能と判定するため、図１５に示されるように、命令３のスロット３で『１１０』として圧縮することができ、また、命令４のスロット３で『１１１』として圧縮することができる。
【００９７】
このように、各スロットの最上位ビットは、圧縮／非圧縮情報を示すものであり、『１』のときは圧縮可能な(圧縮された)オペレーションであることを示し、『０』のときは圧縮不可能な(圧縮されていない)オペレーションであることを示す。
【００９８】
そして、各スロットの最上位ビットが『１』のとき、それに続く下位２ビットが１つ前の命令のどのスロットのオペレーションを参照するかを示す。すなわち、下位２ビットが『００』のときはスロット０、『０１』のときはスロット１、『１０』のときはスロット３、そして、『１１』のときはスロット４のオペレーションを参照することを示す。
【００９９】
以上において、圧縮対象のアセンブリ列で最初に現れるオペレーション、並びに、圧縮可能となる判定条件を満たさないオペレーションは、圧縮されることなくそのまま機械語に変換される。
【０１００】
次に、本実施例の命令圧縮方法を適用した場合と適用しない場合の命令の長さを比較する。まず、図１４に示されるように、圧縮しない場合の命令１〜命令４の長さは、図１３のアセンブリ列をそのまま機械語に変換するため、例えば、３２ビット×１６＝５１２ビットになる。
【０１０１】
すなわち、前述したように、上位２ビットの『０ｘ』は、１６進数であることを示すため、各スロットにおける非圧縮のオペレーションは、４ビット×８＝３２ビットであり、それが１６スロット(１６オペレーションン)あるため、５１２ビットとなる。
【０１０２】
一方、図１５に示されるように、図１３のアセンブリ列に対して、上述した各オペレーションの圧縮処理を実施すると、命令１はそのままで圧縮することはできないが、命令２では、ＬＤ，ＡＤＤ−ＩおよびＡＤＤの各オペレーションを圧縮することができる。
【０１０３】
さらに、図１５に示されるように、命令３では、ＬＤ，ＡＤＤ−ＩおよびＮＯＰの各オペレーションを圧縮することができ、また、命令４では、ＬＤ，ＣＭＰ，ＡＤＤ−ＩおよびＮＯＰの各オペレーションを圧縮することができる。
【０１０４】
従って、本実施例の命令圧縮方法を適用して圧縮した場合の命令１〜命令４の長さは、３２ビット×６＋３ビット×１０＝２２２ビットとなり、圧縮しない場合の５１２ビットの半分以下に低減させることが可能になる。
【０１０５】
その結果、後述するように、圧縮された命令と処理する本実施例の演算処理装置では、小さいサイズの命令コードを適用可能とすることによって、チップ面積および消費電力を低減することができることになる。
【０１０６】
以上の説明は、１つの命令(ＶＬＩＷ命令)が４つのスロットを有し、圧縮対象とする命令がその直前の命令を参照する場合を説明したが、１つの命令に含まれるスロット数は４スロットに限定されるものではなく、参照する命令も直前の命令でなくてもよい。
【０１０７】
具体的に、１つの命令に含まれるスロット数が４スロットではなく８スロットの場合には、例えば、参照するスロットを指定するためのビット数が２ビットから３ビットに増えることになる。
【０１０８】
また、参照する命令が直前の命令(直前の１つの命令)ではなく、直前の命令とさらにその前の命令(直前の２つの命令)の場合には、例えば、その直前の２つの命令のどちらの命令を参照するかを指定するビットが増えることになる。
【０１０９】
このように、本実施例は、４スロットを有する命令および直前の１つの命令を参照するものに限定されず、複数のスロットを有する命令および前の命令を参照して行う命令圧縮方法、並びに、その圧縮命令を処理する演算処理装置に幅広く適用することができる。
【０１１０】
図１６は、本実施例の演算処理装置が適用されるシステムの一例を示すブロック図であり、図１７は、本実施例の演算処理装置の一例を示すブロック図である。
【０１１１】
図１６に示されるように、本実施例の演算処理装置(プロセッサ)１は、例えば、バス４を経由して様々な外部入出力装置５と繋がれると共に、専用の配線を経由して命令メモリ２およびデータメモリ３と繋がれる。
【０１１２】
命令メモリ２は、プロセッサ１が実行するプログラムの命令を格納するメモリであり、この中には、前述のようにして圧縮された命令列が格納されている。もちろん、命令メモリ２の中には、圧縮ができない場合には、その圧縮されていない命令列も格納されている。そして、プロセッサ１は、命令メモリ２に対して命令アドレスを入力し、その命令アドレスに対応する命令を受け取る。
【０１１３】
データメモリ３は、プログラムのデータを格納する装置であり、プロセッサ１は、プログラムの命令を解析し、命令に従った動作を実行する。すなわち、プロセッサ１は、データメモリ３にデータアドレスを入力し、そのデータアドレスに対応するメモリ領域に対してデータの書き込みおよび読み出しを行う。
【０１１４】
外部入出力装置５は、このアーキテクチャの外部からの入力と出力を表し、例えば、磁気記憶装置、ネットワークインターフェース、各種センサ類およびディスプレイ等であり、形態は様々である。
【０１１５】
バス４は、プロセッサ１と上記の様々な外部入出力装置４とを接続するためのものである。なお、図１６に示すプロセッサを用いたシステムは、単なる例であり、本実施例は、様々なシステムに対して幅広く適用することができるのはいうまでもない。
【０１１６】
次に、上述のようにして圧縮された命令列を解釈および実行する、すなわち、命令実行手段を備える本実施例のプロセッサを、図１７を参照して説明する。
【０１１７】
図１７に示されるように、プロセッサ１は、デコードユニット１０１，実行ユニット１０２，レジスタファイル１０３，および，ロードストア(ＬＤ／ＳＴ)ユニット１０４を含む。さらに、プロセッサ１は、命令長検出部(ＩＬブロック)１０５，プログラムカウンタ(ＰＣ)１０６，セレクタ(ｓｅｌ)１０７，および，パイプラインレジスタ１８１〜１８４を含む。
【０１１８】
ここで、プロセッサ１は、パイプラインレジスタ１８１〜１８４により区切られた５段のパイプラインステージを有する。この５段のパイプラインステージは、命令フェッチ(Instruction Fetch)，命令デコード(Instruction Decode)，命令実行(Instruction Execution)，メモリアクセス(Memory Access)，および，レジスタライトバック(Register Writeback)の各ステージである。
【０１１９】
まず、命令フェッチステージでは、プログラムカウンタ１０６で指定されたアドレスに従って命令メモリ２から命令を読み取り、パイプラインレジスタ１８１を経由して命令デコードユニット１０１(命令デコードステージ)に送る。なお、１つの命令の長さは、各スロットのオペレーションが圧縮されているため、命令ごとに異なる。
【０１２０】
そこで、ＩＬブロック１０５で読み取った命令の実際の長さに従って、その長さに対応させてプログラムカウンタ１０６の値を更新する。なお、プログラムカウンタ１０６の入力には、ＩＬブロック１０５からの命令の実際の長さのほかに、分岐先アドレスも与えられ、これらは、セレクタ１０７により選択してプログラムカウンタ１０６に入力される。
【０１２１】
命令デコードステージでは、圧縮された命令を展開し、命令の実行に応じて必要なデータをレジスタファイル１０３から読み取る。この命令デコードステージの詳細は、後に詳述する。
【０１２２】
命令実行ステージでは、展開された命令を実行する。なお、プロセッサ１は、ＶＬＩＷプロセッサなので、例えば、４つのオペレーションを実行可能である。また、オペレーションの内容によっては、ＬＤ／ＳＴユニット１０４にアクセスし、データメモリ３にリクエストを出し、或いは、プログラムカウンタ１０６の値を更新するといった処理を実行する。
【０１２３】
メモリアクセスステージでは、データメモリ３から読み出したデータを受け取る。そして、最後のレジスタライトバックステージでは、命令の実行結果をレジスタファイル１０３に格納し、命令の実行を完了する。
【０１２４】
図１８は、図１７におけるデコードユニットの一例を示すブロック図である。図１８に示されるように、デコードユニット１０１は、命令分配機(Instruction Divider)１１１，および，スロット０〜スロット３に対応した複数の命令合成ブロック1120〜1123を含む。
【０１２５】
さらに、デコードユニット１０１は、スロット０〜スロット３に対応した複数の命令バッファ1130〜1133，複数の命令カウンタ1140〜1143，および，複数のオペレーションバッファ1150〜1153を含む。
【０１２６】
命令フェッチステージから送られた命令は、命令分配機１１１に入力され、ここで、命令はスロットごとの圧縮オペレーションに分割される。そして、それぞれの圧縮オペレーションは、スロットごとの命令合成ブロック０〜３(1120〜1123)に入力され、実行ユニットが解釈できるように命令が展開(合成)される。
【０１２７】
スロットごとの命令合成ブロック1120〜1123には、それぞれ前述した圧縮オペレーションのほかに、前のサイクルで全ての命令合成ブロック1120〜1123が出力したInst-BUF-R[0]〜Inst-BUF-R[3]およびInst-CNT-R[0]〜Inst-CNT-R[3]が入力される。
【０１２８】
そして、命令合成ブロック1120〜1123は、圧縮オペレーションの内容に応じて、新たなInst-BUF-R[0]〜Inst-BUF-R[3]およびInst-CNT-R[0]〜Inst-CNT-R[3]、並びに、実行ユニットが解釈可能なOperation-R[0]〜Operation-R[3]を出力する。なお、この命令合成ブロック1120〜1123は、後に詳述する。
【０１２９】
ここで、Inst-BUF-R[0]〜Inst-BUF-R[3]は、命令バッファ1130〜1133に格納され、Inst-CNT-R[0]〜Inst-CNT-R[3]は、命令カウンタ1140〜1143に格納され、そして、Operation-R[0]〜Operation-R[3]は、オペレーションバッファ1150〜1153に格納される。
【０１３０】
すなわち、命令バッファ1130〜1133は、オペレーションを展開する元となるオペレーションInst-BUF-R[0]〜Inst-BUF-R[3]を格納する。本実施例では、元となるオペレーションを、オペレーションの種類ごとに決まった規則で変化させ、オペランドが異なるオペレーションの系列を作成する。従って、Inst-BUF-R[0]〜Inst-BUF-R[3]には、その系列の初めのオペレーションが格納される。
【０１３１】
命令カウンタ1140〜1143は、オペレーションが変化する系列のうち、現在展開するオペレーションが何番目にあるのかを示すInst-CNT-R[0]〜Inst-CNT-R[3]を格納する。この値は、例えば、初めのオペレーションの次のオペレーションについては『１』となる。
【０１３２】
命令バッファ1130〜1133に格納されたInst-BUF-R[0]〜Inst-BUF-R[3]および命令カウンタ1140〜1143に格納されたInst-CNT-R[0]〜Inst-CNT-R[3]は、パイプラインレジスタ１８２を経由して後段の命令実行ステージに送られる。
【０１３３】
このようにすることで、例外が起きたときに、その例外が発生したステージのInst-BUF-RおよびInst-CNT-Rを保存し、復帰する時にそれらの値も復帰させることにより、基本ブロックの途中からでも命令の実行を再開することが可能になる。
【０１３４】
図１９は、図１８における命令合成ブロックの一例を示すブロック図である。図１９に示されるように、命令合成ブロック１１２(1120〜1123)は、セレクタ(ｓｅｌ)２０１〜２０５，合成部２０６，零設定部２０７，および，＋１加算部２０８を含む。
【０１３５】
ここで、命令合成ブロック１１２は、命令分配機１１１から各スロットに与えられるオペレーションが、圧縮オペレーションか否かにより処理の内容が変わる。なお、圧縮オペレーションであるか否かは、オペレーションの最初の位置(先頭のビット)で判定する。具体的に、各スロットの最上位ビットが『０』であれば、圧縮されていないと判定し、逆に、各スロットの最上位ビットが『１』であれば、圧縮されていると判定する。
【０１３６】
また、前に図１５を参照して詳述したように、各スロットの最上位ビットが『１』のとき、圧縮された３ビットのデータにおける最上位ビットに続く下位２ビットが１つ前の命令のどのスロットのオペレーションを参照するかを指定する。
【０１３７】
具体的に、１つの命令が４つのスロット０〜スロット３を含む場合、下位２ビットが『００』のときはスロット０、『０１』のときはスロット１、『１０』のときはスロット３、そして、『１１』のときはスロット４のオペレーションを参照する。
【０１３８】
まず、オペレーションが圧縮されていない場合(各スロットの最上位ビットが『０』)、命令合成ブロック１１２から出力されるInst-BUF-R，Inst-CNT-RおよびOperation-Rは、次のように処理して求められる。
【０１３９】
すなわち、オペレーションが圧縮されていない場合、Operation-Rは、入力オペレーションの圧縮ビットを除いた部分、Inst-BUF-Rは、入力オペレーションの圧縮ビットを除いた部分、そして、Inst-CNT-Rは『１』となる。
【０１４０】
次に、オペレーションが圧縮されている場合(各スロットの最上位ビットが『１』)、入力側のそれぞれ４つのInst-BUF-R[0]〜Inst-BUF-R[3]およびInst-CNT-R[0]〜Inst-CNT-R[3]から１つずつ選択し、それらから命令を合成(復元)する。
【０１４１】
すなわち、オペレーションが圧縮されている場合、セレクタ２０１によりInst-BUF-R[0]〜Inst-BUF-R[3]のうち、圧縮された３ビットのデータにおける下位２ビットにより指定された１つ前の命令のスロットのオペレーションを選択して出力する。
【０１４２】
さらに、オペレーションが圧縮されている場合、セレクタ２０２によりInst-CNT-R[0]〜Inst-CNT-R[3]のうち、圧縮された３ビットのデータにおける下位２ビットにより指定された１つ前の命令のスロットのオペレーションを選択して出力する。
【０１４３】
このように、オペレーションが圧縮されている場合には、入力オペレーションのビット(例えば、圧縮された３ビットのデータ)における下位２ビットの値をキーにしてセレクタ２０１および２０２で選択し、それらを合成部２０６で合成する。
【０１４４】
合成部２０６は、セレクタ２０１および２０２で選択された圧縮オペレーションのInst-BUF-RおよびInst-CNT-Rを受け取り、前述した図１２に示すオペランドの差分の規定値に従ってオペレーションを合成してセレクタ２０４に出力する。
【０１４５】
すなわち、図１２には、オペランドの差分が示されているため、それらとInst-CNT-Rとの積を合成後のオペレーションのオペランドの差分とし、Inst-BUF-Rのオペランドに加算することでオペレーションの合成(復元)を行うことができる。ここで、カウンタの情報を持つことにより、特定の回数にあるオペレーションのみ差分を変えるといった実装も可能である。
【０１４６】
セレクタ２０５は、初期値として零設定部２０７からの値『０』を選択し、それ以降は、セレクタ２０２の出力を選択して、＋１加算部２０８に出力する。＋１加算部２０８では、入力された値に対して＋１だけインクリメントし、Inst-CNT-Rとして出力する。
【０１４７】
図２０は、図１８および図１９を参照して説明したにおけるデコードユニットによるスロット３の動作を説明するための図である。すなわち、図２０は、入力されたオペレーションのバイナリ列と、その命令(オペレーション)を展開した後のInst-BUF-R[3]，Inst-CNT-R[3]およびOperation-R[3]の値を表している。
【０１４８】
具体的に、図２０は、図１５におけるスロット３のオペレーションが与えられた場合におけるデコードユニット１０１の動作を説明するためのものである。なお、他のスロットの動作も本質的に変わらないため、スロット３のみを説明する。
【０１４９】
図１５および図２０に示されるように、命令１のスロット３では、非圧縮のオペレーション『０ｘ０２０４０８００』が入力されるため、Inst-BUF-R[3]およびOperation-R[3]には、入力されたオペレーションの圧縮ビットを除いた部分がそのまま入る。ここで、Inst-CNT-R[3]には『１』が入る。
【０１５０】
次に、命令２のスロット３では、圧縮されたオペレーション『１１１』が入力される。すなわち、最上位ビット(先頭ビット)の『１』により圧縮されていることが分かる。また、この圧縮された３ビットデータ『１１１』の下位２ビット(後続２ビット)『１１』により指定スロット(参照スロット)がスロット３であることが分かる。従って、スロット３(つまり、同じスロット３)のInst-BUF-R[3]とInst-CNT-R[3]から命令を生成する。
【０１５１】
図２０に示されるように、命令のオペコードは『０ｘ０２』であり、ＡＤＤオペレーションであることが分かる。また、図１２から、ＡＤＤオペレーションのオペランド差分の規定値は『１，１，１』なので、それぞれのオペランドに『１』加算して『０ｘ０２０５０９０１』のOperation-R[3]を得る。
【０１５２】
命令３のスロット３では、圧縮されたオペレーション『１１０』が入力されるが、下位２ビットが『１０』なので、指定スロットはスロット２となる。従って、スロット２からオペレーションを生成する。
【０１５３】
ここで、スロット２には、ＮＯＰオペレーションがあるため、このＮＯＰオペレーションから次のオペレーションを生成する。ただし、ＮＯＰオペレーションはオペランドを持たないため、同じオペレーションが続くことになる。なお、カウンタの値は、スロット２での値を継承して『２』となる。
【０１５４】
最後の命令４のスロット３も、圧縮されたオペレーション『１１１』が入力されるが、下位２ビットが『１１』なので、指定スロットは、スロット３となる。従って、前のＮＯＰオペレーションをそのまま生成する。なお、カウンタの値は、＋１インクリメントして『３』となる。以上のようにして、命令を順に展開して、実行する。
【０１５５】
図２１は、図１７におけるデコードユニットの他の例を示すブロック図である。前述した図１８のデコードユニット１０１では、圧縮された命令を展開(合成)するために、Inst-BUF-RおよびInst-CNT-Rの２つの情報を使用していた。これに対して、図２１に示すデコードユニット１０１’では、これら２つの情報Inst-BUF-RおよびInst-CNT-Rを不要としている。
【０１５６】
すなわち、２つの情報を削減することでオペランドの差分が固定になってしまうが、図２１に示すデコードユニット１０１’では、使用する命令バッファ1130〜1133および命令カウンタ1140〜1143を削減することができる。これにより、回路の占有面積を低減することが可能になる。
【０１５７】
なお、プロセッサ１およびその周辺回路は、前述した図１８のデコードユニット１０１を適用する場合と同様であるが、図１７を参照した命令デコードステージ(デコードユニット)が異なっている。
【０１５８】
すなわち、図２１に示されるように、デコードユニット１０１’は、命令分配機１１１，命令合成ブロック1120'〜1123'，および，オペレーションバッファ1150〜1153を含む。
【０１５９】
命令フェッチステージから送られた命令は、命令分配機１１１に入力され、ここで、命令はスロットごとの圧縮オペレーションに分割される。そして、それぞれの圧縮オペレーションは、スロットごとの命令合成ブロック０〜３(1120'〜1123')に入力され、実行ユニットが解釈できるように命令が展開される。
【０１６０】
スロットごとの命令合成ブロック1120'〜1123'には、それぞれ前述した圧縮オペレーションのほかに、前のサイクルで全ての命令合成ブロック1120'〜1123'が出力したOperation-R[0]〜Operation-R[3]が入力される。
【０１６１】
すなわち、命令合成ブロック1120'〜1123'は、入力されたオペレーションと展開されたオペレーションから、次に実行すべきオペレーションを得るようになっている。
【０１６２】
図２２は、図２１における命令合成ブロックの一例を示すブロック図である。図２２に示されるように、命令合成ブロック１１２’(1120'〜1123')は、セレクタ(ｓｅｌ)２０１，２０４および合成部２０９を含む。
【０１６３】
ここで、命令合成ブロック１１２’は、命令分配機１１１から各スロットに与えられるオペレーションが、圧縮オペレーションか否かにより処理の内容が変わるのは、図１９を参照して説明した命令合成ブロック１１２と同様である。
【０１６４】
すなわち、オペレーションが圧縮されていなければ、入力されたオペレーションをセレクタ２０４で選択してそのまま出力する。また、オペレーションが圧縮されていれば、前のサイクルで出力したオペレーションを命令圧縮コードから選択し、図１２のように、オペレーションの種類ごとに予め定められているオペランドの差分を加算してオペレーションを出力する。
【０１６５】
図２３は、図２１および図２２を参照して説明したにおけるデコードユニットによるスロット３の動作を説明するための図である。すなわち、図２３は、入力されたオペレーションのバイナリ列と、その命令(オペレーション)を展開した後のOperation-R[3]の値を表している。
【０１６６】
具体的に、図２３は、図１５におけるスロット３のオペレーションが与えられた場合におけるデコードユニット１０１の動作を説明するためのものである。なお、他のスロットの動作も本質的に変わらないため、スロット３のみを説明する。
【０１６７】
図１５および図２３に示されるように、命令１のスロット３では、非圧縮のオペレーション『０ｘ０２０４０８００』が入力されるため、Operation-R[3]には、入力されたオペレーションの圧縮ビットを除いた部分がそのまま入る。
【０１６８】
次に、命令２のスロット３では、圧縮されたオペレーション『１１１』が入力される。すなわち、最上位ビット(先頭ビット)の『１』により圧縮されていることが分かり、また、下位２ビット(後続２ビット)『１１』により指定スロット(参照スロット)がスロット３であることが分かる。従って、スロット３(つまり、同じスロット３)のOperation-R[3]から命令を生成する。
【０１６９】
図２３に示されるように、命令のオペコードは『０ｘ０２』であり、ＡＤＤオペレーションであることが分かる。また、図１２から、ＡＤＤオペレーションのオペランド差分の規定値は『１，１，１』なので、それぞれのオペランドに『１』加算して『０ｘ０２０５０９０１』のOperation-R[3]を得る。
【０１７０】
命令３のスロット３では、圧縮されたオペレーション『１１０』が入力されるが、下位２ビットが『１０』なので、指定スロットはスロット２となる。従って、スロット２からオペレーションを生成する。
【０１７１】
ここで、スロット２には、ＮＯＰオペレーションがあるため、このＮＯＰオペレーションから次のオペレーションを生成する。ただし、ＮＯＰオペレーションはオペランドを持たないため、同じオペレーションが続くことになる。なお、カウンタの値は、スロット２での値を継承して『２』となる。
【０１７２】
最後の命令４のスロット３も、圧縮されたオペレーション『１１１』が入力されるが、下位２ビットが『１１』なので、指定スロットは、スロット３となる。従って、前のＮＯＰオペレーションをそのまま生成する。以上のようにして、命令を順に展開して、実行する。
【０１７３】
以上のように、本実施例の演算処理装置によれば、小さいサイズの命令コードを適用可能とすることによって、チップ面積および消費電力を低減することができる。
【０１７４】
図２４は、本実施例の命令圧縮プログラムを実行するコンピュータの一例を示す図である。図２４において、参照符号３１０は処理装置(コンピュータ)、３２０はプログラム(データ)提供者、そして、３３０は可搬型記録媒体を示している。
【０１７５】
本実施例は、例えば、図２４に示すようなコンピュータ３１０に対するプログラム(データ)として与えられ、コンピュータ３１０により実行される。コンピュータ３１０は、プロセッサを含むコンピュータ本体３１１、および、コンピュータ本体３１１に対してプログラム(データ)を与え或いは処理された結果を格納するメモリ(例えば、ＲＡＭ(Random Access Memory)やハードディスク)３１２等を備える。
【０１７６】
コンピュータ３１０に提供されたプログラムは、ローディングされてコンピュータ３１０のメインメモリ上で実行される。
【０１７７】
プログラム提供者３２０は、プログラムを格納する手段(回線先メモリ：例えば、ＤＡＳＤ(Direct Access Storage Device))３２１を有し、例えば、インターネット等の回線を介してプログラムをコンピュータ３１０に提供する。或いは、ＣＤ−ＲＯＭやＤＶＤ等の光ディスクまたは磁気ディスクや磁気テープといった可搬型記録媒体３３０を介してコンピュータ３１０に提供する。
【０１７８】
本実施例の命令圧縮プログラムを記録した媒体は、コンピュータ３１０側のメモリ３１２、回線先メモリ３２１、および、可搬型記録媒体３３０等の様々なものを含むのはいうまでもない。
【０１７９】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【０１８０】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
複数のスロットを有する命令を処理する演算処理装置であって、
前記各スロットには、それぞれオペレーションと当該オペレーションの圧縮／非圧縮情報を含むデータが格納され、
前記演算処理装置は、
第１命令の第１スロットに格納された第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、圧縮された前記第１オペレーションのデータに従って、前記第１命令よりも前の第２命令における第２スロットのオペレーションを参照し、前記第１オペレーションを合成するデコードユニットを有する、
ことを特徴とする演算処理装置。
【０１８１】
（付記２）
さらに、
前記第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、前記デコードユニットにより合成された前記第１オペレーションのデータを選択し、前記第１オペレーションの圧縮／非圧縮情報が「非圧縮」を示す場合、非圧縮の前記第１オペレーションのデータを選択するセレクタを有する、
ことを特徴とする付記１に記載の演算処理装置。
【０１８２】
（付記３）
前記第２命令は、前記第１命令の１つ前の命令である、
ことを特徴とする付記１または付記２に記載の演算処理装置。
【０１８３】
（付記４）
前記オペレーションの圧縮／非圧縮情報は、対応する前記各スロットの先頭の位置に格納されている、
ことを特徴とする付記１乃至付記３のいずれか１項に記載の演算処理装置。
【０１８４】
（付記５）
前記デコードユニットは、
前記複数のスロットを有する命令を受け取って、前記各スロットに格納されたオペレーションを分配する命令分配機と、
前記各スロットに対して設けられ、該各スロットに格納されたオペレーションが圧縮されているときに、当該スロットのオペレーションを合成する複数の命令合成ブロックと、を有する、
ことを特徴とする付記１乃至付記４のいずれか１項に記載の演算処理装置。
【０１８５】
（付記６）
前記デコードユニットは、さらに、
前記各スロットに対してそれぞれ設けられた複数の命令バッファ，複数の命令カウンタおよび複数のオペレーションバッファを有し、
前記各命令合成ブロックは、前記複数の命令バッファの出力および前記複数の命令カウンタの出力を受け取ってオペレーションの合成を行う、
ことを特徴とする付記５に記載の演算処理装置。
【０１８６】
（付記７）
前記命令合成ブロックは、
前記第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、前記第２命令における第２スロットの命令バッファおよび命令カウンタの情報を、前記第１スロットの命令バッファおよび命令カウンタにコピーし、それらの情報から前記第１オペレーションを合成し、次の命令を合成するために前記第１スロットの命令カウンタの値をインクリメントする、
ことを特徴とする付記６に記載の演算処理装置。
【０１８７】
（付記８）
前記デコードユニットは、さらに、
前記各スロットに対してそれぞれ設けられた複数のオペレーションバッファを有し、
前記各命令合成ブロックは、前記複数のオペレーションバッファの出力を受け取ってオペレーションの合成を行う、
ことを特徴とする付記５に記載の演算処理装置。
【０１８８】
（付記９）
前記命令合成ブロックは、
前記第１オペレーションの圧縮／非圧縮情報が「圧縮」を示す場合、前記第２命令における第２スロットのオペレーションバッファの情報を、前記第１スロットのオペレーションバッファに設定して前記第１オペレーションを合成する、
ことを特徴とする付記８に記載の演算処理装置。
【０１８９】
（付記１０）
前記命令合成ブロックによる圧縮されたオペレーションの合成は、オペレーションの種類ごとに決まった規則に従って行う、
ことを特徴とする付記５乃至付記９のいずれか１項に記載の演算処理装置。
【０１９０】
（付記１１）
前記演算処理装置は、ＶＬＩＷ方式のプロセッサである、
ことを特徴とする付記１乃至付記１０のいずれか１項に記載の演算処理装置。
【０１９１】
（付記１２）
複数のスロットを有する命令を圧縮する命令圧縮方法であって、
圧縮対象としている第１命令の第１オペレーションと、当該第１オペレーションよりも前の第２命令の第２オペレーションを比較し、
前記第１オペレーションと前記第２オペレーションが同じ種類であり、且つ、前記第１オペレーションと前記第２オペレーションのオペランドの差分が種類ごとに定められている値と等しいときに、前記第１オペレーションを圧縮する、
ことを特徴とする命令圧縮方法。
【０１９２】
（付記１３）
前記第１オペレーションを圧縮するとき、対応するスロットの最初の位置に当該第１オペレーションの圧縮／非圧縮情報を格納すると共に、それに続く後続位置に前記第２オペレーションに対応する第２スロットの情報を格納する、
ことを特徴とする付記１２に記載の命令圧縮方法。
【０１９３】
（付記１４）
前記第２命令は、前記第１命令の１つ前の命令である、
ことを特徴とする付記１２または付記１３に記載の命令圧縮方法。
【０１９４】
（付記１５）
複数のスロットを有する命令を圧縮する命令圧縮プログラムであって、
コンピュータに、
圧縮対象としている第１命令の第１オペレーションと、当該第１オペレーションよりも前の第２命令の第２オペレーションを比較する手順と、
前記第１オペレーションと前記第２オペレーションが同じ種類であり、且つ、前記第１オペレーションと前記第２オペレーションのオペランドの差分が種類ごとに定められている値と等しいときに、前記第１オペレーションを圧縮する手順と、を実行させることを特徴とする命令圧縮プログラム。
【符号の説明】
【０１９５】
１    演算処理装置(ＶＬＩＷプロセッサ)
２    命令メモリ
３    データメモリ
４    バス
５    外部入出力装置
１１    命令バッファ
１２    前命令バッファ
１３    変換機構
１４    圧縮判定機構
１５    オペレーションバッファ
１６    選択機構
１７    出力命令バッファ
１８    出力バッファ
２１    オペコード比較部
２２    オペランドの差分取得部
２３    圧縮判定テーブル
２４    差分比較部
１０１    デコードユニット
１０２    実行ユニット
１０３    レジスタファイル
１０４    ロードストア(ＬＤ／ＳＴ)ユニット
１０５    命令長検出部(ＩＬブロック)
１０６    プログラムカウンタ(ＰＣ)
１０７    セレクタ(ｓｅｌ)
１１１    命令分配機
１１２，1120〜1123，1120'〜1123'    命令合成ブロック
１８１〜１８４    パイプラインレジスタ
1130〜1133    命令バッファ
1140〜1143    命令カウンタ
1150〜1153    オペレーションバッファ
【図１】
2013131137.tif 000003
【図２】
2013131137.tif 000004
【図３】
2013131137.tif 000005
【図４】
2013131137.tif 000006
【図５】
2013131137.tif 000007
【図６】
2013131137.tif 000008
【図７】
2013131137.tif 000009
【図８】
2013131137.tif 000010
【図９】
2013131137.tif 000011
【図１０】
2013131137.tif 000012
【図１１】
2013131137.tif 000013
【図１２】
2013131137.tif 000014
【図１３】
2013131137.tif 000015
【図１４】
2013131137.tif 000016
【図１５】
2013131137.tif 000017
【図１６】
2013131137.tif 000018
【図１７】
2013131137.tif 000019
【図１８】
2013131137.tif 000020
【図１９】
2013131137.tif 000021
【図２０】
2013131137.tif 000022
【図２１】
2013131137.tif 000023
【図２２】
2013131137.tif 000024
【図２３】
2013131137.tif 000025
【図２４】
2013131137.tif 000026