(57)【特許請求の範囲】
【請求項１】
オペコードが先行命令と同一でかつ前記先行命令とのオペランド間に連続性がある命令を圧縮したことを示す圧縮情報と命令を保存すべきか否かを示す保存情報とを含む圧縮命令列が記憶されているメモリにアクセス可能なプロセッサであって、
前記メモリから所定ビット列をフェッチして前記所定ビット列が非圧縮命令を含むか否かを判断し、前記非圧縮命令を含む場合は、前記所定ビット列に含まれる前記保存情報と前記非圧縮命令とを転送し、前記非圧縮命令を含まない場合は、前記所定ビット列の先頭に位置する圧縮情報を転送するフェッチ部と、
前記フェッチ部から前記保存情報と前記非圧縮命令とが転送されてきた場合は、前記保存情報が命令を保存すべきであることを示す場合に前記非圧縮命令の命令コードおよびそのオペランドパターンをバッファに保持して、オペコードが同一でかつオペランドが規則的に連続する連続回数を示す命令カウンタの値を初期値に設定する設定処理を実行し、前記圧縮情報が転送されてきた場合は、前記バッファに保持されている命令コードと前記命令カウンタの値と前記オペランドパターンとに基づいて元の命令コードに復元し、前記命令カウンタの値を更新する更新処理を実行するデコード部と、
前記デコード部からの命令コードを実行する実行部と、
前記実行部による実行結果にしたがって前記メモリにアクセスするメモリアクセス部と、を備え、
前記フェッチ部は、
前記デコード部への転送ビット数によりプログラムカウンタの値を更新して、更新後のプログラムカウンタの値を前記デコード部に転送し、
前記デコード部は、
前記圧縮情報が転送されてきた場合は、前記更新処理による前記命令カウンタの更新前に、前記バッファに保持されている命令コードおよびそのオペランドパターンと前記命令カウンタの値と前記フェッチ部からのプログラムカウンタの値とを、前記実行部内のバッファに複写し、
前記実行部は、
前記デコード部から複写される前に、前記実行部内のバッファに複写された命令コードおよびそのオペランドパターンと命令カウンタの値と前記プログラムカウンタの値を、前記メモリアクセス部内のバッファに複写することを特徴とするプロセッサ。
【請求項２】
前記デコード部は、
前記更新処理において、前記オペランドパターンに基づいて前記バッファに保持されている命令コードからオペランドを抽出し、抽出したオペランドを前記命令カウンタの値で更新することで元の命令コードに復元することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記メモリアクセス部は、
割り込み処理が発生した場合、前記メモリアクセス部内のバッファに複写された命令コードおよびそのオペランドパターンと命令カウンタの値とプログラムカウンタの値とを退避させ、
前記フェッチ部は、
前記割り込み処理が終了した場合、前記退避させたプログラムカウンタの値に基づいて、前記割り込み発生時に前記メモリアクセス部での処理対象命令に対応するビット列をフェッチして、前記処理対象命令に対応するビット列が非圧縮命令であるか否かを判断し、非圧縮命令である場合は、前記処理対象命令に対応するビット列である非圧縮命令を転送し、前記非圧縮命令でない場合は、前記処理対象命令に対応するビット列の先頭に位置する圧縮情報を転送し、
前記デコード部は、
前記割り込み処理が終了した場合、前記退避させた命令コードおよびそのオペランドパターンと命令カウンタの値とを、前記デコード部内のバッファに複写することを特徴とする請求項１に記載のプロセッサ。
【請求項４】
オペコードが先行命令と同一でかつ前記先行命令とのオペランド間に連続性がある命令を圧縮したことを示す圧縮情報と命令を保存すべきか否かを示す保存情報とを含む圧縮命令群列が記憶されているメモリにアクセス可能なプロセッサであって、
前記メモリから所定ビット列をフェッチして前記所定ビット列における前記圧縮情報と前記保存情報と非圧縮命令との組み合わせパターンを判断し、前記保存情報と前記非圧縮命令とについては前記所定ビット列から前記保存情報と前記非圧縮命令とを特定して転送し、前記圧縮情報については前記圧縮情報を転送し、デコード部への転送ビット数によりプログラムカウンタの値を更新して、更新後のプログラムカウンタの値を前記デコード部に転送するフェッチ部と、
前記フェッチ部から前記保存情報と前記非圧縮命令とが転送されてきた場合は、前記保存情報が命令を保存すべきであることを示す場合に前記非圧縮命令の命令コードおよびそのオペランドパターンをバッファに保持して、オペコードが同一でかつオペランドが規則的に連続する連続回数を示す命令カウンタの値を初期値に設定する設定処理を実行し、前記圧縮情報が転送されてきた場合は、前記バッファに保持されている命令コードと前記命令カウンタの値と前記オペランドパターンとに基づいて元の命令コードに復元し、前記デコード部からの命令コードを実行する実行部内のバッファに複写された命令コードおよびそのオペランドパターンと前記命令カウンタの値と前記プログラムカウンタの値とが前記実行部によって前記実行部による実行結果にしたがって前記メモリにアクセスするメモリアクセス部内のバッファに複写された後に、前記バッファに保持されている命令コードおよびそのオペランドパターンと命令カウンタの値と前記フェッチ部からのプログラムカウンタの値とを前記実行部内のバッファに複写し、前記実行部内のバッファに複写した後に前記命令カウンタの値を更新する更新処理を実行する前記デコード部と、
を備えることを特徴とするプロセッサ。
【請求項５】
命令列のうち対象命令を取得し、
取得された対象命令のオペコードと前記対象命令の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記対象命令を圧縮し、
同一でない、または連続性なしと判断された場合、前記対象命令のオペコードの種類に基づいて前記対象命令を保存すべきか否かを示す保存情報を前記対象命令に付与する、
処理をコンピュータに実行させることを特徴とする圧縮プログラム。
【請求項６】
命令群列の中の対象命令群から対象命令を取得し、
取得された対象命令のオペコードと前記対象命令群に先行する先行命令群のうち前記対象命令に対応する位置の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記対象命令を圧縮し、
同一でない、または連続性なしと判断された場合、前記対象命令のオペコードの種類に基づいて前記対象命令を保存すべきか否かを示す保存情報を前記対象命令に付与する、
処理をコンピュータに実行させることを特徴とする圧縮プログラム。
【請求項７】
命令列のうち対象命令を取得し、
取得した対象命令のオペコードと前記対象命令の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断した場合、前記対象命令を圧縮し、
同一でない、または連続性なしと判断した場合、前記対象命令のオペコードの種類に基づいて前記対象命令を保存すべきか否かを示す保存情報を前記対象命令に付与する、
制御部を備えることを特徴とする圧縮装置。
【請求項８】
命令群列の中の対象命令群から対象命令を取得し、
取得した対象命令のオペコードと前記対象命令群に先行する先行命令群のうち前記対象命令に対応する位置の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断した場合、前記対象命令を圧縮し、
同一でない、または連続性なしと判断した場合、前記対象命令のオペコードの種類に基づいて前記対象命令を保存すべきか否かを示す保存情報を前記対象命令に付与する、
制御部を備えることを特徴とする圧縮装置。
【請求項９】
コンピュータが、
命令列のうち対象命令を取得し、
取得された対象命令のオペコードと前記対象命令の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記対象命令を圧縮し、
同一でない、または連続性なしと判断された場合、前記対象命令のオペコードの種類に基づいて前記対象命令を保存すべきか否かを示す保存情報を前記対象命令に付与する、
処理を実行することを特徴とする圧縮方法。
【請求項１０】
コンピュータが、
命令群列の中の対象命令群から対象命令を取得し、
取得された対象命令のオペコードと前記対象命令群に先行する先行命令群のうち前記対象命令に対応する位置の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記対象命令を圧縮し、
同一でない、または連続性なしと判断された場合、前記対象命令のオペコードの種類に基づいて前記対象命令を保存すべきか否かを示す保存情報を前記対象命令に付与する、
処理を実行することを特徴とする圧縮方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令を実行するプロセッサ、命令を圧縮するプロセッサ、圧縮プログラム、圧縮装置、および圧縮方法に関する。
【背景技術】
【０００２】
従来、圧縮判別命令で圧縮モード移行する専用命令を発行し、圧縮モード、非圧縮モードの遷移を行う技術が開示されている（たとえば、下記特許文献１，２を参照。）。当該技術では、圧縮モード中は圧縮命令コード内に保持する辞書メモリと呼ばれる命令メモリとは別のメモリアドレスを使用して辞書メモリを参照し、命令の復元を行う。
【０００３】
また、直前のオペコードの一部とオペランドの一部を保存しておき、圧縮されたコードの不足部分を保存したコードで補てんする事によって圧縮されたコードの復元を行う技術が開示されている（たとえば、下記特許文献３を参照。）。当該技術では、たとえば、命令コードのサイズが３２ビットの場合は圧縮することにより１６ビットの命令コードとなる。
【０００４】
また、ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）中に頻出する無実行命令を圧縮削減することにより命令コードサイズを減らす技術が開示されている（たとえば、下記特許文献４を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１４２６９６号公報
【特許文献２】特開２００３−０５０６９６号公報
【特許文献３】特開２００４−３５５４７７号公報
【特許文献４】特開平７−１８２１６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した特許文献１，２の従来技術では、命令メモリとは別の辞書メモリと呼ばれるメモリを利用しているため、辞書メモリの分メモリアクセス回数が増加し、消費電力が増加するという問題があった。
【０００７】
また、上述した特許文献３の従来技術では、先行する命令コードの一部を命令コードごとに保存しておく必要があるため、圧縮効率が低いという問題があった。また、上述した特許文献４の従来技術では、無実行命令しか圧縮できない。このように、命令コードの圧縮効率が低いと、圧縮前と比べてもメモリアクセス回数の削減が十分とはいえないという問題があった。
【０００８】
本発明は、上述した従来技術による問題点を解消するため、メモリ内の圧縮された一連の命令を一度でフェッチすることで、メモリアクセス回数の低減化を図ることができるプロセッサを提供することを目的とする。また、プロセッサによるメモリアクセス回数の低減化を図るために、命令コード群の圧縮率の向上を図ることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一側面によれば、オペコードが先行命令と同一でかつ前記先行命令とのオペランド間に連続性がある命令を圧縮したことを示す圧縮情報を含む圧縮命令列が記憶されているメモリにアクセス可能なプロセッサであって、前記メモリから所定ビット列をフェッチして前記所定ビット列が非圧縮命令であるか否かを判断し、非圧縮命令である場合は、前記所定ビット列である非圧縮命令を転送し、前記非圧縮命令でない場合は、前記所定ビット列の先頭に位置する圧縮情報を転送するフェッチ部と、前記フェッチ部から前記非圧縮命令が転送されてきた場合は、前記非圧縮命令の命令コードおよびそのオペランドパターンをバッファに保持して、オペコードが同一でかつオペランドが規則的に連続する連続回数を示す命令カウンタの値を初期値に設定する設定処理を実行し、前記圧縮情報が転送されてきた場合は、前記バッファに保持されている命令コードと前記命令カウンタの値と前記オペランドパターンとに基づいて元の命令コードに復元し、前記命令カウンタの値を更新する更新処理を実行するデコード部と、を備えるプロセッサが提案される。
【００１０】
また、本発明の一側面によれば、命令列のうち対象命令を取得し、取得された対象命令のオペコードと前記対象命令の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、同一かつ連続性ありと判断された場合、前記対象命令を圧縮する圧縮プログラム、圧縮装置、および圧縮方法が提案される。
【発明の効果】
【００１１】
本発明の一側面によれば、メモリ内の圧縮された一連の命令を一度でフェッチすることで、メモリアクセス回数の低減化を図ることができるという効果を奏する。また、プロセッサによるメモリアクセス回数の低減化を図るために、命令コード群の圧縮率の向上を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、命令圧縮と命令実行の流れを示す説明図である。
【図２】図２は、命令ＩＳの構造を示す説明図である。
【図３】図３は、実施の形態１にかかる圧縮装置のハードウェア構成例を示すブロック図である。
【図４】図４は、実施例１にかかる圧縮装置の機能的構成例を示すブロック図である。
【図５】図５は、判別テーブルＴの一例を示す説明図である。
【図６】図６は、実施例１にかかる圧縮処理の具体例を示す説明図である。
【図７】図７は、実施例１にかかる圧縮装置による圧縮処理手順例を示すフローチャート（その１）である。
【図８】図８は、圧縮装置１０１による圧縮処理手順例を示すフローチャート（その２）である。
【図９】図９は、実施例２にかかる命令群列の一例を示す説明図である。
【図１０】図１０は、実施例２にかかる圧縮装置の機能的構成例を示すブロック図である。
【図１１】図１１は、実施例２にかかる圧縮処理の具体例を示す説明図である。
【図１２】図１２は、実施例２にかかる圧縮装置による圧縮処理手順例を示すフローチャートである。
【図１３】図１３は、図１２に示した対象命令圧縮処理（ステップＳ１２０５）の詳細な処理手順例を示すフローチャート（その１）である。
【図１４】図１４は、図１２に示した対象命令圧縮処理（ステップＳ１２０５）の詳細な処理手順例を示すフローチャート（その２）である。
【図１５】図１５は、図１に示したプロセッサのハードウェア構成例を示すブロック図である。
【図１６】図１６は、オペランド更新部の詳細な構成例１を示す説明図である。
【図１７】図１７は、オペランド更新部の詳細な構成例２を示す説明図である。
【図１８】図１８は、オペランド更新部の詳細な構成例３を示す説明図である。
【図１９】図１９は、プロセッサの動作処理手順を示すフローチャートである。
【図２０】図２０は、実施例３にかかるパイプライン処理例を示す説明図（その１）である。
【図２１】図２１は、実施例３にかかるパイプライン処理例を示す説明図（その２）である。
【図２２】図２２は、実施例３にかかるパイプライン処理例を示す説明図（その３）である。
【図２３】図２３は、実施例３にかかるパイプライン処理例を示す説明図（その４）である。
【図２４】図２４は、実施例３にかかるパイプライン処理例を示す説明図（その５）である。
【図２５】図２５は、実施例３にかかるパイプライン処理例を示す説明図（その６）である。
【図２６】図２６は、実施例３にかかるパイプライン処理例を示す説明図（その７）である。
【図２７】図２７は、実施例３にかかるパイプライン処理例を示す説明図（その８）である。
【図２８】図２８は、実施例３にかかるパイプライン処理例を示す説明図（その９）である。
【図２９】図２９は、実施例３にかかるパイプライン処理例を示す説明図（その１０）である。
【図３０】図３０は、実施例３にかかるパイプライン処理例を示す説明図（その１１）である。
【図３１】図３１は、実施例３にかかるパイプライン処理例を示す説明図（その１２）である。
【図３２】図３２は、実施例３にかかるパイプライン処理例を示す説明図（その１３）である。
【図３３】図３３は、実施例３にかかるパイプライン処理例を示す説明図（その１４）である。
【図３４】図３４は、実施例３にかかるパイプライン処理例を示す説明図（その１５）である。
【図３５】図３５は、実施例３にかかるパイプライン処理例を示す説明図（その１６）である。
【図３６】図３６は、実施例３にかかるパイプライン処理例を示す説明図（その１７）である。
【図３７】図３７は、実施例３にかかる割り込みからの復旧処理を示す説明図（その１）である。
【図３８】図３８は、実施例３にかかる割り込みからの復旧処理を示す説明図（その２）である。
【図３９】図３９は、実施例３にかかる割り込みからの復旧処理を示す説明図（その３）である。
【図４０】図４０は、実施例３にかかる割り込みからの復旧処理を示す説明図（その４）である。
【図４１】図４１は、実施例３にかかる割り込みからの復旧処理を示す説明図（その５）である。
【図４２】図４２は、実施例３にかかる割り込みからの復旧処理を示す説明図（その６）である。
【図４３】図４３は、実施例４にかかるパイプライン処理例を示す説明図（その１）である。
【図４４】図４４は、実施例４にかかるパイプライン処理例を示す説明図（その２）である。
【図４５】図４５は、実施例４にかかるパイプライン処理例を示す説明図（その３）である。
【図４６】図４６は、実施例４にかかるパイプライン処理例を示す説明図（その４）である。
【図４７】図４７は、実施例４にかかるパイプライン処理例を示す説明図（その５）である。
【図４８】図４８は、実施例４にかかるパイプライン処理例を示す説明図（その６）である。
【図４９】図４９は、実施例４にかかるパイプライン処理例を示す説明図（その７）である。
【図５０】図５０は、実施例４にかかるパイプライン処理例を示す説明図（その８）である。
【図５１】図５１は、実施例４にかかるパイプライン処理例を示す説明図（その９）である。
【図５２】図５２は、実施例４にかかるパイプライン処理例を示す説明図（その１０）である。
【図５３】図５３は、実施例４にかかるパイプライン処理例を示す説明図（その１１）である。
【図５４】図５４は、実施例４にかかるパイプライン処理例を示す説明図（その１２）である。
【図５５】図５５は、実施例４にかかるパイプライン処理例を示す説明図（その１３）である。
【図５６】図５６は、実施例４にかかる割り込みからの復旧処理を示す説明図（その１）である。
【図５７】図５７は、実施例４にかかる割り込みからの復旧処理を示す説明図（その２）である。
【図５８】図５８は、実施例４にかかる割り込みからの復旧処理を示す説明図（その３）である。
【図５９】図５９は、実施例４にかかる割り込みからの復旧処理を示す説明図（その４）である。
【図６０】図６０は、実施例４にかかる割り込みからの復旧処理を示す説明図（その５）である。
【図６１】図６１は、実施例４にかかる割り込みからの復旧処理を示す説明図（その６）である。
【図６２】図６２は、実施例４にかかる割り込みからの復旧処理を示す説明図（その７）である。
【図６３】図６３は、実施例４にかかる割り込みからの復旧処理を示す説明図（その８）である。
【図６４】図６４は、実施例４にかかる割り込みからの復旧処理を示す説明図（その９）である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、この発明にかかるプロセッサ、圧縮装置、圧縮方法、および圧縮プログラムの実施の形態を詳細に説明する。
【００１４】
図１は、命令圧縮と命令実行の流れを示す説明図である。本実施の形態では、命令列を、コンピュータにインストールされている圧縮プログラムで圧縮する。命令列とは、連続する命令の集合であり、たとえば、アドレス順に記憶装置に格納されている。図１では、例として命令ＩＳ１〜ＩＳ６を命令列としている。命令列の中のいずれかの命令を便宜上、「命令ＩＳ」と称す。
【００１５】
図２は、命令ＩＳの構造を示す説明図である。図２では、命令ＩＳ１を例に挙げている。命令ＩＳは、オペコードとオペランドが連結された命令コードに、圧縮／非圧縮判定ビットと保存対象／非対象判別ビットが付加された情報である。なお、命令幅は一例として３２ビットとする。
【００１６】
圧縮／非圧縮判定ビットとは、その命令ＩＳが圧縮されているか否かを示す圧縮情報である。たとえば、圧縮／非圧縮判定ビットが「１」のときは圧縮を示し、「０」のときは非圧縮を示す。なお、圧縮前では、非圧縮（この例では「０」）とする。保存対象／非対象判別ビットとは、その命令ＩＳを復元元の命令として保存すべきか否かを示す保存情報である。たとえば、保存対象／非対象判別ビットが「１」のときは保存すべきであることを示し、「０」のときは保存すべきでないことを示す。なお、圧縮前では、保存すべきでない（この例では「０」）とする。
【００１７】
図１に戻り、圧縮装置１０１は、圧縮プログラムがインストールされたコンピュータである。圧縮装置１０１は、命令列ＩＳｓを圧縮する。圧縮装置１０１では、アドレスが連続する２つの命令間において、オペコードが同一であり、オペランド間に連続性がある場合に、圧縮をおこなう。たとえば、連続する命令ＩＳ１，ＩＳ２間では、オペコードがともにＡＤＤで、オペランドが１増加している。このため、命令ＩＳ２は圧縮される。
【００１８】
同様に、命令ＩＳ３も圧縮される。命令ＩＳ３，ＩＳ４間，命令ＩＳ４，ＩＳ５間，および命令ＩＳ５，ＩＳ６間では圧縮はおこなわれない。また、命令ＩＳ６については、命令ＩＳ５を無視して、命令ＩＳ４との関係で圧縮が行われる。なお、圧縮の詳細については後述する。
【００１９】
また、圧縮装置１０１により圧縮された命令群を圧縮命令群ｉｓｓと称す。圧縮命令群ｉｓｓには、復元元となる命令（圧縮されていない）と復元元の命令を参照して復元可能な圧縮命令が混在する。プロセッサ１０２は、圧縮命令群ｉｓｓをフェッチすることで、圧縮命令を復元して命令を実行する。実行の詳細については後述する。プロセッサ１０２は、圧縮装置１０１内のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）でもよく、圧縮装置１０１とは異なるコンピュータのＣＰＵでもよい。また、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）でもよい。
【００２０】
・実施の形態１
つぎに、実施の形態１について説明する。実施の形態１では、図１に示した命令圧縮について説明する。
【００２１】
（圧縮装置１０１のハードウェア構成例）
図３は、実施の形態１にかかる圧縮装置１０１のハードウェア構成例を示すブロック図である。図３において、圧縮装置１０１は、ＣＰＵ３０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、磁気ディスクドライブ３０４と、磁気ディスク３０５と、光ディスクドライブ３０６と、光ディスク３０７と、ディスプレイ３０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０９と、キーボード３１０と、マウス３１１と、スキャナ３１２と、プリンタ３１３と、を備えている。また、各構成部はバス３００によってそれぞれ接続されている。
【００２２】
ここで、ＣＰＵ３０１は、圧縮装置１０１の全体の制御を司る。ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される。磁気ディスクドライブ３０４は、ＣＰＵ３０１の制御にしたがって磁気ディスク３０５に対するデータのリード／ライトを制御する。磁気ディスク３０５は、磁気ディスクドライブ３０４の制御で書き込まれたデータを記憶する。
【００２３】
光ディスクドライブ３０６は、ＣＰＵ３０１の制御にしたがって光ディスク３０７に対するデータのリード／ライトを制御する。光ディスク３０７は、光ディスクドライブ３０６の制御で書き込まれたデータを記憶したり、光ディスク３０７に記憶されたデータをコンピュータに読み取らせたりする。
【００２４】
ディスプレイ３０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ３０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２５】
インターフェース（以下、「Ｉ／Ｆ」と略する。）３０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク３１４に接続され、このネットワーク３１４を介して他の装置に接続される。そして、Ｉ／Ｆ３０９は、ネットワーク３１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ３０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２６】
キーボード３１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス３１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２７】
スキャナ３１２は、画像を光学的に読み取り、圧縮装置１０１内に画像データを取り込む。なお、スキャナ３１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ３１３は、画像データや文書データを印刷する。プリンタ３１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００２８】
＜実施例１＞
命令には、いわゆる通常の命令と、ＶＬＩＷのような複数の命令を含む命令群がある。実施例１では、前者の命令が連続する命令列を圧縮する場合について説明し、実施例２では、後者の複数の命令を含む命令群が連続する命令群列を圧縮する場合について説明する。
【００２９】
（圧縮装置１０１の機能的構成例）
図４は、実施例１にかかる圧縮装置１０１の機能的構成例を示すブロック図である。圧縮装置１０１は、取得部４０１と、判断部４０２と、圧縮部４０３と、設定部４０４と、を備える。これら制御部となる機能（取得部４０１〜設定部４０４）は、具体的には、たとえば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶装置に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、Ｉ／Ｆ３０９により、その機能を実現する。
【００３０】
取得部４０１は、命令列のうち対象命令を取得する。具体的には、たとえば、取得部４０１は、図１に示したような命令列を、アドレス順に従って１命令ずつ読み込む。たとえば、先頭アドレス０ｘＦ０００の命令ＩＳ１から順に、命令ＩＳ２，ＩＳ３，ＩＳ４，ＩＳ５，ＩＳ６を取得する。
【００３１】
判断部４０２は、取得部４０１によって取得された対象命令のオペコードと対象命令の先行命令のオペコードが同一であり、かつ、対象命令のオペランドと先行命令のオペランドとの間に連続性があるか否かを判断する。対象命令とは今回読み込まれた命令ＩＳである。先行する命令とは、対象命令の１つ前に読み込まれた命令ＩＳである。たとえば、対象命令が命令ＩＳ２とすると、先行命令は命令ＩＳ１である。対象命令が命令ＩＳ１の場合、先行命令は存在しない。オペランド間の連続性とは、同種のオペランドが規則的に変化している状態である。
【００３２】
オペコードには、オペランドパターンが埋め込まれている。オペランドパターンとはオペランドの構造を示す。オペランドパターンは、オペランドの種類とオペランドの個数と先頭オペランドの開始位置とを含む。たとえば、命令ＩＳ１の場合、オペランドの種類はレジスタ、オペランドの個数は３個である。また、先頭オペランドの開始位置は、オペコードを１２ビットであるとすると、先頭から１５ビット目である。このオペランドパターンは、たとえば、オペコードの上位ビット列に埋め込まれるものとする。
【００３３】
判断部４０２では、オペランドパターンが対象命令と先行命令とで同一である場合、オペランドの値が連続していれば、連続性ありとする。オペランドパターンが対象命令と先行命令で同一でない場合、オペランドの値をみるまでもなく、連続性なしとする。
【００３４】
たとえば、命令ＩＳ１，ＩＳ２の場合、命令ＩＳ１のオペランドがｒ０，ｒ１６，ｒ３２であり、命令ＩＳ２のオペランドがｒ１，ｒ１７，ｒ３３である。このように、レジスタのアドレスが命令ＩＳ１，ＩＳ２間で１増加しているため、オペランドの連続性があることになる。１増加していることを示す「＋１」は連続性バッファに保持される。また、命令ＩＳ２，ＩＳ３間でも、命令ＩＳ１，ＩＳ２間と同じように、レジスタのアドレスが１増加しており、かつ、連続性バッファの値と一致する。したがって、引き続きオペランドの連続性があることになる。連続性なしとなった場合、連続性バッファは初期化される。
【００３５】
このように、レジスタのレジスタ番号やメモリアドレスの変化に規則性がある場合はオペランド間に連続性があることとなる。図１の例では、命令ＩＳ１〜ＩＳ３間で、オペコードが同一で、かつ、オペランド間に連続性があると判断される。
【００３６】
また、対象となる命令ＩＳの保存対象／非対象判別ビットが「０」（保存すべきでない）である場合、連続性バッファはそのまま維持される。たとえば、命令ＩＳ４のあとの命令ＩＳ５はＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）であり、後述するように命令ＩＳ５の保存対象／非対象判別ビットは「０」に設定される。この場合、命令ＩＳ６をプロセッサ１０２で復元するときは、命令ＩＳ５の保存対象／非対象判別ビットは「０」であるため復元されないので、さらにさかのぼって命令ＩＳ４との間で、オペコードが同一で、かつ、オペランドに連続性があるか否かが判断される。
【００３７】
オペランドの連続性については、レジスタのレジスタ番号やアドレスの規則的な増減だけではなく、変数のインクリメント、デクリメントも対象となる。また、増減幅も命令ごとに同一であれば、１でなくてもよい。また、レジスタのレジスタ番号が同一値である場合でも、連続性ありとみなす。たとえば、命令の動作を指定するような設定値の場合、同一レジスタ（のレジスタ番号）を指定する場合があるからである。この場合、増減幅を０とする。なお、即値の場合も、増減幅が同一であれば、連続性ありとみなす。また、一定の規則（たとえば、図１６に示す式に相当）で変化する場合も連続性ありとみなす。また、即値が同一値である場合であっても、連続性ありとみなす。
【００３８】
また、判断部４０２は、同一かつ連続性ありでないと判断された場合、対象命令のオペコードの種類に基づいて、対象命令を保存すべき命令であるか否かを判断することとしてもよい。命令の中には、ＨＡＬＴ，ＲＥＴ，ＲＦＥ，ＥＸＴＷ，ＮＯＰといったオペランドがないシステム命令がある。このようなシステム命令は、圧縮命令の復元元として利用されない。
【００３９】
図５は、判別テーブルＴの一例を示す説明図である。図５において、判別テーブルＴには、オペコードごとに保存対象／非対象フラグが設定されている。これにより、対象命令のオペコードがどのオペコードであるかにより、保存すべきであるか否かを判断することができる。たとえば、命令ＩＳ１のオペコードはＡＤＤであり、保存対象／非対象フラグが「１」（保存すべき）であるため、対象命令を保存すべきと判断する。
【００４０】
対象命令のオペコードが、ＨＡＬＴの場合、保存対象／非対象フラグが「０」（保存すべきでない）であるため、対象命令を保存すべきでないと判断する。なお、判別テーブルＴは、図３に示したＲＯＭ３０２、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶装置に記憶されている。
【００４１】
圧縮部４０３は、判断部４０２によって同一かつ連続性ありと判断された場合、対象命令を圧縮する。具体的には、圧縮部４０３は、判断部４０２によって同一かつ連続性ありと判断された場合、対象命令に、対象命令が圧縮されていることを示す圧縮情報を付与し、対象命令内の命令コードを削除する。たとえば、圧縮部４０３では、圧縮する場合には対象命令の圧縮／非圧縮判定ビットを「１」（圧縮）に設定して、圧縮命令にする。すなわち、圧縮する場合は、保存対象／非対象判別ビットや命令コードはすべて削除され、圧縮／非圧縮判定ビットのみとなる。これにより、たとえば、所定ビット幅（例では３２ビット。６４ビット，１２８ビット、…でもよい）の命令を１ビットに圧縮することができる。
【００４２】
設定部４０４は、判断部４０２によって同一かつ連続性ありでないと判断された場合、対象命令に、対象命令が圧縮されていないことを示す圧縮情報と、対象命令を圧縮非対象の命令として保存すべきことを示す保存情報と、を設定する。具体的には、たとえば、設定部４０４は、判断部４０２によって同一かつ連続性ありでないと判断された場合、対象命令は圧縮しないことになる。したがって、設定部４０４は、対象命令の圧縮／非圧縮判定ビットを「０」（非圧縮）に設定する。また、対象命令は非圧縮であるため、対象命令の保存対象／非対象判別ビットを「１」（保存すべき）に設定する。これにより後続命令が圧縮されると、非圧縮の対象命令は後続命令の復元元になる。
【００４３】
また、設定部４０４は、判断部４０２によって同一かつ連続性ありでないと判断された場合に判断部４０２によって保存すべきと判断された場合、対象命令に、対象命令が圧縮されていないことを示す圧縮情報と、対象命令を保存すべきことを示す保存情報と、を設定する。具体的には、たとえば、設定部４０４は、対象命令の圧縮／非圧縮判定ビットを「０」（非圧縮）に設定する。また、対象命令の保存対象／非対象判別ビットを「１」（保存すべき）に設定する。これにより後続命令が圧縮されると、非圧縮の対象命令は後続命令の復元元になる。
【００４４】
一方、設定部４０４は、判断部４０２によって同一かつ連続性ありでないと判断された場合に判断部４０２によって保存すべきでないと判断された場合、対象命令に、対象命令が圧縮されていないことを示す圧縮情報と、対象命令を復元元の命令として保存すべきでないことを示す保存情報と、を設定する。具体的には、たとえば、設定部４０４は、対象命令の圧縮／非圧縮判定ビットを「０」（非圧縮）に設定する。また、対象命令の保存対象／非対象判別ビットを「０」（保存すべきでない）に設定する。これにより、非圧縮の対象命令は後続命令の復元元にならない。
【００４５】
図６は、実施例１にかかる圧縮処理の具体例を示す説明図である。図５では、図１に示した命令群を圧縮する例を示している。圧縮装置１０１は、まず、アドレス０ｘＦ０００の命令ＩＳ１を読み込む。命令ＩＳ１の先行命令はないため、命令ＩＳ１の圧縮／非圧縮判定ビットは「０」（非圧縮）となる。また、命令ＩＳ１のオペコードはＡＤＤであるため、命令ＩＳ１の保存対象／非対象判別ビットは「１」（保存すべき）となる。このため、命令ＩＳ１については、圧縮後は、保存対象／非対象判別ビットが「０」から「１」に変化しただけである。
【００４６】
命令ＩＳ２は、先行命令ＩＳ１と同一オペコードであり、かつ、オペランドに連続性があるため、圧縮／非圧縮判定ビットが「１」になり、それ以外は削除される。命令ＩＳ３は、先行命令ＩＳ２と同一オペコードであり、かつ、オペランドに連続性があるため、圧縮／非圧縮判定ビットが「１」になり、それ以外は削除される。
【００４７】
命令ＩＳ４は、先行命令ＩＳ３と同一オペコードではない。このため、圧縮／非圧縮判定ビットが「０」に設定される。また、命令ＩＳ４のオペコードＳＴＯＲＥであるため保存すべき命令となる。したがって、保存対象／非対象判別ビットが「１」に設定される。このため、命令ＩＳ４については、圧縮後は、保存対象／非対象判別ビットが「０」から「１」に変化しただけである。
【００４８】
命令ＩＳ５は、先行命令ＩＳ４と同一オペコードではない。このため、圧縮／非圧縮判定ビットが「０」に設定される。また、命令ＩＳ５はＮＯＰであるため保存すべきでない命令となる。したがって、保存対象／非対象判別ビットが「０」に設定される。このため、命令ＩＳ５については、圧縮後は、圧縮前と同じ命令が保存される。
【００４９】
命令ＩＳ６は、先行命令ＩＳ５と同一オペコードではないが、先行命令ＩＳ５の保存対象／非対象判別ビットは「０」に設定されるため、命令ＩＳ４を先行命令とする。この場合、命令ＩＳ６は、先行命令ＩＳ４と同一オペコードであり、かつ、オペランドに連続性があるため、命令ＩＳ６の圧縮／非圧縮判定ビットが「１」になり、それ以外は削除される。このように、本実施の形態では、先行命令と同一オペコードであり、かつ、オペランドに連続性がある対象命令が連続すればするほど圧縮効率が高くなる。
【００５０】
（圧縮装置１０１による圧縮処理手順）
図７は、実施例１にかかる圧縮装置１０１による圧縮処理手順例を示すフローチャート（その１）である。まず、圧縮装置１０１は、命令群に命令があるか否かを判断する（ステップＳ７０１）。命令がない場合（ステップＳ７０１：Ｎｏ）、圧縮処理を終了する。一方、命令がある場合（ステップＳ７０１：Ｙｅｓ）、圧縮装置１０１は、取得部４０１により、対象命令を取得し（ステップＳ７０２）、判断部４０２により、先行命令と同一オペコードであるか否かを判断する（ステップＳ７０３）。同一オペコードである場合（ステップＳ７０３：Ｙｅｓ）については、図８で説明する。
【００５１】
一方、同一オペコードでない場合（ステップＳ７０３：Ｎｏ）、圧縮装置１０１は、判断部４０２により、先行命令の保存対象／非対象判別ビットを参照して、先行命令が非保存対象であるか否かを判断する（ステップＳ７０４）。非保存対象である場合（ステップＳ７０４：Ｙｅｓ）、先行命令は、オペランドがないシステム命令である。したがって、先行命令の１つ前の命令（先行命令が対象命令であったときの先行命令）と対象命令とでオペコードが同一で、かつ、オペランドの連続性がある場合がある。このため、圧縮装置１０１は、設定部４０４により、先行命令を、先行命令の１つ前の命令に変更し（ステップＳ７０５）、ステップＳ７０３に戻る。
【００５２】
ステップＳ７０５では、たとえば、対象命令が図６の命令ＩＳ６の場合、先行命令は、命令ＩＳ５のＮＯＰとなる。ＮＯＰは非保存対象であるため、先行命令ＩＳ５（ＮＯＰ）の１つ前の命令ＩＳ４を先行命令とする。
【００５３】
また、先行命令が非保存対象でない場合（ステップＳ７０４：Ｎｏ）、すなわち、保存対象である場合、圧縮装置１０１は、設定部４０４により、連続性バッファを初期化し（ステップＳ７０６）、対象命令の圧縮／非圧縮判定ビットを「０」に設定する（ステップＳ７０７）。
【００５４】
つぎに、圧縮装置１０１は、判断部４０２により、対象命令が保存すべき命令であるか否かを判断する（ステップＳ７０８）。具体的には、たとえば、判別テーブルＴを参照することで、対象命令のオペコードについて保存対象／非対象フラグが「１」の場合は保存すべき命令で、「０」の場合は保存すべきでない命令となる。
【００５５】
保存すべきである場合（ステップＳ７０８：Ｙｅｓ）、圧縮装置１０１は、設定部４０４により、対象命令の保存対象／非対象判別ビットを「１」に設定する（ステップＳ７０９）。そして、圧縮装置１０１は、圧縮／非圧縮判定ビットが「０」、保存対象／非対象判別ビットが「１」、対象命令と同一のオペコードおよびオペランドからなる非圧縮命令を圧縮バッファに保存する（ステップＳ７１０）。そして、ステップＳ７０１に戻る。
【００５６】
また、ステップＳ７０８において、保存すべきでないと判断された場合（ステップＳ７０８：Ｎｏ）、圧縮装置１０１は、設定部４０４により、対象命令の保存対象／非対象判別ビットを「０」に設定する（ステップＳ７１１）。そして、圧縮装置１０１は、圧縮／非圧縮判定ビットが「０」、保存対象／非対象判別ビットが「０」、対象命令と同一のオペコードおよびオペランドからなる非圧縮命令を圧縮バッファに保存する（ステップＳ７１２）。すなわち、対象命令をそのまま保存する。そして、ステップＳ７０１に戻る。
【００５７】
図８は、圧縮装置１０１による圧縮処理手順例を示すフローチャート（その２）である。図７のステップＳ７０３において、同一オペコードである場合（ステップＳ７０３：Ｙｅｓ）、圧縮装置１０１は、判断部４０２により、先行命令と対象命令とでオペランドパターンが同一であるか否かを判断する（ステップＳ８０１）。オペランドパターンが同一でない場合（ステップＳ８０１：Ｎｏ）、オペランドが連続せず圧縮対象外となるため、図７のステップＳ７０６に移行して、圧縮装置１０１は、設定部４０４により、連続性バッファを初期化する。
【００５８】
一方、オペランドパターンが同一である場合（ステップＳ８０１：Ｙｅｓ）、圧縮装置１０１は、先行命令のオペランドと対象命令のオペランドとの間の差分を検出する（ステップＳ８０２）。たとえば、先行命令ＩＳ１と対象命令ＩＳ２の場合、差分は「＋１」である。同様に、先行命令ＩＳ２と対象命令ＩＳ３の場合、差分は「＋１」である。
【００５９】
そして、圧縮装置１０１は、判断部４０２により、検出された差分と連続性バッファの値とが同一であるか否かを判断する（ステップＳ８０４）。先行命令ＩＳ１と対象命令ＩＳ２の場合、連続性バッファは初期化されているため、連続性バッファと同一ではない（ステップＳ８０４：Ｎｏ）。したがって、圧縮装置１０１は、設定部４０４により、連続性バッファを、検出された差分「＋１」に更新する（ステップＳ８０３）。そして、ステップＳ７０７に移行する。
【００６０】
先行命令ＩＳ２と対象命令ＩＳ３の場合、検出された差分は「＋１」であるため、連続性バッファの値「＋１」と同一である（ステップＳ８０４：Ｙｅｓ）。したがって、圧縮装置１０１は、圧縮部４０３により、対象命令の圧縮／非圧縮判定ビットを「１」に設定する（ステップＳ８０５）。このあと、圧縮装置１０１は、圧縮部４０３により、対象命令の圧縮／非圧縮判定ビットの後続ビット列（保存対象／非対象判別ビット、命令コード）を削除する（ステップＳ８０６）。これにより、圧縮／非圧縮判定ビット（＝１）のみからなる圧縮命令を圧縮バッファに保存する（ステップＳ８０７）。そして、ステップＳ７０１に移行する。
【００６１】
このように、圧縮装置１０１によれば、先行命令に対しオペコードが同一でオペランドに連続性がある対象命令を圧縮することで、命令群の高圧縮化を図ることができる。たとえば、圧縮の条件を満たすｍビットの命令がＭ個連続する場合、非圧縮状態では、（ｍ×Ｍ）ビットである。これに対し、圧縮装置１０１で圧縮すると、先頭の命令のみ非圧縮で、後続の命令が１ビット（圧縮／非圧縮判定ビット）に圧縮される。
【００６２】
したがって、圧縮サイズは（ｍ＋Ｍ−１）ビットとなる。このように、圧縮によりサイズが縮小されると、最大でバス幅分の圧縮命令を１回のフェッチで取り込むことができるため、メモリアクセス回数の低減を図ることができ、消費電力の低減化を図ることができる。また、ＮＯＰなどのシステム命令はオペランドが存在しないため、このような命令を非保存対象とすることで、復元元から除外することができ、復元処理の効率化を図ることができる。
【００６３】
＜実施例２＞
つぎに、実施例２について説明する。実施例２では、ＶＬＩＷのように複数の並列実行する命令群が連続する命令列群について圧縮する場合について説明する。
【００６４】
図９は、実施例２にかかる命令群列の一例を示す説明図である。ここでは、ＶＬＩＷを例に挙げて説明する。命令群列Ｖｓには、図１に示したような命令を複数個（図９では４個）有するＶＬＩＷ命令が複数存在する。また、命令群列Ｖｓにおいて、命令列ごとに同一位置となる命令は、太枠で囲まれている。たとえば、命令群列Ｖｓの命令列Ｖ１〜Ｖ４において、アドレス０ｘ００００の先頭命令Ａ１と、アドレス０ｘ００１０の先頭命令Ａ２と、アドレス０ｘ００２０の先頭命令Ａ３と、アドレス０ｘ００３０の先頭命令Ａ４とは、同一位置の命令となる。また、図９の命令群列Ｖｓでは、例として、１命令が実施例１と同じ３２ビット、１命令群は４命令列で構成されているため１２８ビットとする。命令の構造は図２と同様の構成となる。
【００６５】
（圧縮装置１０１の機能的構成例）
図１０は、実施例２にかかる圧縮装置１０１の機能的構成例を示すブロック図である。図１０において、圧縮装置１０１は、取得部１００１と、判断部１００２と、圧縮部１００３と、設定部１００４と、保存部１００５と、を備える。これら制御部となる機能（取得部１００１〜設定部１００４）は、具体的には、たとえば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶装置に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、Ｉ／Ｆ３０９により、その機能を実現する。
【００６６】
取得部１００１は、命令群列の中の対象命令群から対象命令を取得する。具体的には、たとえば、取得部１００１は、命令群列の先頭アドレス０ｘ００００から命令群Ｖ１，Ｖ２，Ｖ３，Ｖ４の順で取得する。また、取得部１００１は、命令群Ｖ１を取得した場合、命令Ａ１，命令Ｂ１，命令Ｃ１，命令Ｄ１の順で取得する。命令Ｄ１の取得後に、つぎにアドレス０ｘ００１０の命令群Ｖ２を取得することとなる。
【００６７】
判断部１００２は、実施例１の判断部１００２と同様の判断処理を実行するが、実施例２では、命令群単位で扱われるため、対象命令の先行命令とは、１つ前の命令ではなく、先行命令群における同一位置の命令となる。たとえば、アドレス０ｘ００１０の命令Ｂ２の先行命令は、アドレス０ｘ００１０の命令Ａ１ではなく、先行命令群Ｖ１の同一位置となる命令Ｂ１である。また、圧縮部１００３については、実施例１の圧縮部１００３と同様の圧縮処理を実行する。
【００６８】
また、設定部１００４についても、実施例１の設定部１００４と同様の設定処理を実行するが、判断部１００２と同様、対象命令の先行命令は、１つ前の命令ではなく、先行命令群における同一位置の命令となる。なお、実施例２では、連続性バッファは、各命令群の命令の位置ごとに設定される。たとえば、命令Ａ１〜Ａ４は、命令群は異なるが同一位置であるため、当該位置での連続性バッファが用意される。すなわち、図９の例では、連続性バッファは４個設定されることになる。
【００６９】
また、保存部１００５は、対象命令群の各対象命令から得られた圧縮情報群を保存するとともに、対象命令群のうち圧縮されずに保存情報が設定された非圧縮の対象命令を、圧縮情報群の後続に保存する。実施例１では、単純に書き出し順に圧縮命令および非圧縮命令を圧縮バッファに書き出していたが、実施例２では、命令群ごとに命令群内の各命令の圧縮／非圧縮判定ビットを先頭にまとめる。このようにまとめられた圧縮／非圧縮判定ビット列を「圧縮情報群」と称す。
【００７０】
保存部１００５では、圧縮バッファに圧縮情報群の領域を確保しておき、対象命令群の先頭命令から圧縮／非圧縮判定ビットを書き込む。圧縮／非圧縮判定ビットが「０」（非圧縮）である場合は、圧縮情報群の後続に、保存対象／非対象判別ビット、オペコード、およびオペランドからなる非圧縮命令を書き込むことになる。
【００７１】
保存部１００５では、このように、命令群ごとに、圧縮情報群および０個以上の非圧縮命令を圧縮バッファに書き込むが、各命令群において、１つでも命令が圧縮されている場合は、空き領域が発生するため、空き領域分シフトすることで、圧縮後の命令群列の短縮化を図ることができる。このように短縮化することで、フェッチ回数の削減が可能となり、プロセッサ１０２での処理の高速化および低消費電力化を図ることができる。
【００７２】
図１１は、実施例２にかかる圧縮処理の具体例を示す説明図である。図１１では、図９に示した命令群列を圧縮する例を示している。（Ａ）は圧縮前の命令群列、（Ｂ）は圧縮後の命令群列、（Ｃ）は短縮化後の圧縮された命令群列を示している。
【００７３】
（Ａ）において、圧縮装置１０１は、まず、アドレス０ｘ００００の命令群Ｖ１を読み込み、命令群Ｖ１をデコードして、命令Ａ１を読み込む。命令群Ｖ１の先行命令群はないため、命令Ａ１の先行命令は存在しない。したがって、命令Ａ１の圧縮／非圧縮判定ビットは「０」（非圧縮）となり、（Ｂ）において、命令群Ｖ１の圧縮情報群Ｃ１の先頭ビットに「０」が設定される。命令群Ｖ１は先頭命令群であるため、後続の命令Ｂ１，Ｃ１，Ｄ１も同様な結果となる。
【００７４】
（Ａ）において、圧縮装置１０１は、アドレス０ｘ００００の命令群Ｖ１の圧縮処理が終了すると、次のアドレス０ｘ００１０の命令群Ｖ２を対象命令群として読み込み、命令群Ｖ２をデコードして、命令Ａ２を読み込む。命令群Ｖ２の先行命令群は命令群Ｖ１であるため、命令Ａ２の先行命令は命令Ａ１である。圧縮装置１０１は、命令Ａ２が判断部１００２の圧縮条件（同一オペコード、オペランドの連続性あり）を満たしているため、命令Ａ２の圧縮／非圧縮判定ビットは「１」（圧縮）となる。したがって、（Ｂ）において、命令群Ｖ１の圧縮情報群Ｃ２の先頭ビットに「１」が設定され、保存対象／非対象判別ビット、オペコードおよびオペランドは削除される。命令群Ｖ２の後続の命令Ｂ２，Ｃ２，Ｄ２も同様な結果となる。
【００７５】
また、アドレス０ｘ００２０の命令群Ｖ３では、命令Ａ３，Ｃ３が圧縮され、命令Ｆ、ＮＯＰが非圧縮となる。同様に、アドレス０ｘ００３０の命令群Ｖ４では、命令Ａ４，Ｄ３が圧縮され、命令Ｂ３、ＮＯＰが非圧縮となる。なお、命令Ｄ３の先行命令は命令群Ｖ３のＮＯＰであるが、ＮＯＰの場合は、連続性バッファにはさらにその前の先行命令Ｄ２の差分が保持されているため、命令Ｄ３は圧縮されることになる。
【００７６】
また、（Ｂ）の状態から（Ｃ）の状態に短縮することで、短縮化された圧縮命令群列ｓｖｓがアドレス０ｘＦ１００〜０ｘＦ１２０に格納され、アドレス０ｘＦ１３０が空き領域となる。したがって、（Ａ）の状態では、バス幅が１２８ビットであるとすると、４回のメモリアクセスが必要であるが、（Ｃ）の状態では、３回のメモリアクセスとなるため、メモリアクセス回数の低減化を図ることができる。
【００７７】
（圧縮装置１０１による圧縮処理手順）
図１２は、実施例２にかかる圧縮装置１０１による圧縮処理手順例を示すフローチャートである。まず、圧縮装置１０１は、命令群列に命令群があるか否かを判断する（ステップＳ１２０１）。命令群がある場合（ステップＳ１２０１：Ｙｅｓ）、圧縮装置１０１は、取得部１００１により、対象命令群を取得し（ステップＳ１２０２）、対象命令群内の命令数Ｎ（図９の例ではＮ＝４）ビット分の圧縮情報群の領域を圧縮バッファに確保する（ステップＳ１２０３）。そして、対象命令群内の命令位置を示すインデックスｉをｉ＝１とする（ステップＳ１２０４）。図９の例では、左側からｉ＝１，２，３，４（＝Ｎ）となる。
【００７８】
このあと、圧縮装置１０１は、対象命令圧縮処理を実行する（ステップＳ１２０５）。対象命令圧縮処理（ステップＳ１２０５）では、対象命令群内のｉ番目の命令である対象命令の圧縮処理を実行する。圧縮処理の内容については、図１３および図１４で説明する。
【００７９】
対象命令について対象命令圧縮処理（ステップＳ１２０５）が実行されたあと、圧縮装置１０１は、ｉをインクリメントして（ステップＳ１２０６）、ｉ＞Ｎであるか否かを判断する（ステップＳ１２０７）。ｉ＞Ｎでない場合（ステップＳ１２０７：Ｎｏ）、対象命令圧縮処理（ステップＳ１２０５）に戻る。一方、ｉ＞Ｎである場合（ステップＳ１２０７：Ｙｅｓ）、ステップＳ１２０１に戻ることになる。
【００８０】
また、ステップＳ１２０１において、命令群がない場合（ステップＳ１２０１：Ｎｏ）、圧縮装置１０１は、保存部１００５により、圧縮バッファに格納された圧縮命令群を、図１１の（Ｃ）に示したように、空き領域についてビットシフトすることで短縮化する（ステップＳ１２０８）。これにより、一連の圧縮処理を終了する。
【００８１】
図１３は、図１２に示した対象命令圧縮処理（ステップＳ１２０５）の詳細な処理手順例を示すフローチャート（その１）である。図１３において、圧縮装置１０１は、判断部１００２により、対象命令が先行命令と同一オペコードであるか否かを判断する（ステップＳ１３０１）。同一オペコードである場合（ステップＳ１３０１：Ｙｅｓ）については、図１４で説明する。
【００８２】
一方、同一オペコードでない場合（ステップＳ１３０１：Ｎｏ）、圧縮装置１０１は、判断部１００２により、先行命令の保存対象／非対象判別ビットを参照して、先行命令が非保存対象であるか否かを判断する（ステップＳ１３０２）。非保存対象である場合（ステップＳ１３０２：Ｙｅｓ）、先行命令は、オペランドがないシステム命令である。したがって、先行命令の１つ前の命令群での同一位置命令と対象命令とでオペコードが同一で、かつ、オペランドの連続性がある場合がある。したがって、圧縮装置１０１は、設定部１００４により、先行命令を、先行命令の１つ前の命令群での同一位置命令に変更し（ステップＳ１３０３）、ステップＳ１３０１に戻る。
【００８３】
たとえば、対象命令が図１１の（Ａ）に示した命令Ｄ３の場合、先行命令は、命令群Ｖ３のＮＯＰとなる。ＮＯＰは非保存対象であるため、先行命令（ＮＯＰ）の１つ前の命令群Ｖ２での同一位置命令Ｄ２を先行命令とする。
【００８４】
また、先行命令が非保存対象でない場合（ステップＳ１３０２：Ｎｏ）、すなわち、保存対象である場合、圧縮装置１０１は、設定部１００４により、ｉ番目の位置の連続性バッファを初期化し（ステップＳ１３０４）、対象命令の圧縮／非圧縮判定ビットを「０」に設定する（ステップＳ１３０５）。
【００８５】
つぎに、圧縮装置１０１は、判断部１００２により、対象命令が保存すべき命令であるか否かを判断する（ステップＳ１３０６）。具体的には、たとえば、判別テーブルＴを参照することで、対象命令のオペコードについて保存対象／非対象フラグが「１」の場合は保存すべき命令で、「０」の場合は保存すべきでない命令となる。
【００８６】
保存すべきである場合（ステップＳ１３０６：Ｙｅｓ）、圧縮装置１０１は、対象命令の保存対象／非対象判別ビットを「１」に設定する（ステップＳ１３０７）。そして、圧縮装置１０１は、保存部１００５により、圧縮／非圧縮判定ビット「０」を、圧縮バッファ内の圧縮情報群の領域のうちｉ番目のビット位置に保存する。また、圧縮装置１０１は、保存部１００５により、保存対象／非対象判別ビットが「１」、対象命令と同一のオペコードおよびオペランドを、圧縮バッファ内の圧縮情報群の後続に保存する（ステップＳ１３０８）。このようにして、対象命令についての非圧縮命令が保存される。そして、ステップＳ１２０６に戻る。
【００８７】
また、ステップＳ１３０６において、保存すべきでないと判断された場合（ステップＳ１３０６：Ｎｏ）、圧縮装置１０１は、対象命令の保存対象／非対象判別ビットを「０」に設定する（ステップＳ１３０９）。そして、圧縮装置１０１は、圧縮／非圧縮判定ビット「０」を、圧縮バッファ内の圧縮情報群の領域のうちｉ番目のビット位置に保存する。また、圧縮装置１０１は、保存対象／非対象判別ビットが「０」、対象命令と同一のオペコードおよびオペランドを、圧縮バッファ内の圧縮情報群の後続に保存する（ステップＳ１３１０）。このようにして、対象命令についての非圧縮命令が保存される。そして、ステップＳ１２０６に戻る。
【００８８】
図１４は、図１２に示した対象命令圧縮処理（ステップＳ１２０５）の詳細な処理手順例を示すフローチャート（その２）である。図１４において、圧縮装置１０１は、図１３のステップＳ１３０１において、同一オペコードである場合（ステップＳ１３０１：Ｙｅｓ）、判断部１００２により、先行命令と対象命令とでオペランドパターンが同一であるか否かを判断する（ステップＳ１４０１）。オペランドパターンが同一でない場合（ステップＳ１４０１：Ｎｏ）、オペランドが連続せず圧縮対象外となるため、図１２のステップＳ１３０４に移行して、圧縮装置１０１は、設定部１００４により、ｉ番目の位置の連続性バッファを初期化する。
【００８９】
一方、オペランドパターンが同一である場合（ステップＳ１４０１：Ｙｅｓ）、圧縮装置１０１は、先行命令のオペランドと対象命令のオペランドとの間の差分を検出する（ステップＳ１４０２）。たとえば、先行命令Ａ１と対象命令Ａ２の場合、差分は「＋１」である。同様に、先行命令Ａ２と対象命令Ａ３の場合、差分は「＋１」である。
【００９０】
そして、圧縮装置１０１は、判断部１００２により、検出された差分と連続性バッファの値とが同一であるか否かを判断する（ステップＳ１４０３）。先行命令Ａ１と対象命令Ａ２の場合、ｉ（＝１）番目の位置の連続性バッファは初期化されているため、ｉ（＝１）番目の位置の連続性バッファと同一ではない（ステップＳ１４０３：Ｎｏ）。したがって、圧縮装置１０１は、ｉ（＝１）番目の位置の連続性バッファを、検出された差分「＋１」に更新する（ステップＳ１４０４）。そして、ステップＳ１３０５に移行する。
【００９１】
先行命令Ａ２と対象命令Ａ３の場合、検出された差分は「＋１」であるため、ｉ（＝１）番目の位置の連続性バッファの値「＋１」と同一である（ステップＳ１４０３：Ｙｅｓ）。したがって、圧縮装置１０１は、圧縮部１００３により、対象命令の圧縮／非圧縮判定ビットを「１」に設定する（ステップＳ１４０５）。このあと、圧縮装置１０１は、圧縮部１００３により、対象命令の圧縮／非圧縮判定ビットの後続ビット列（保存対象／非対象判別ビット、命令コード）を削除する（ステップＳ１４０６）。これにより、圧縮装置１０１は、圧縮／非圧縮判定ビット（＝１）のみからなる圧縮命令を、圧縮バッファの圧縮情報群の領域のｉ番目の位置に保存する（ステップＳ１４０７）。そして、ステップＳ１２０６に移行する。
【００９２】
このように、圧縮装置１０１によれば、先行命令に対しオペコードが同一でオペランドに連続性がある対象命令を圧縮することで、命令群列の高圧縮化を図ることができる。たとえば、圧縮の条件を満たすｍビットの命令がＮ個からなる命令群がＭ個連続する場合、非圧縮状態では、（ｍ×Ｎ×Ｍ）ビットである。これに対し、圧縮装置１０１で圧縮すると、先頭の命令群のみ非圧縮で、後続の命令群内の各命令が１ビット（圧縮／非圧縮判定ビット）に圧縮される。
【００９３】
したがって、圧縮サイズは（ｍ×Ｎ＋（Ｍ−１）×Ｎ）ビットとなる。このように、圧縮によりサイズが縮小されると、最大でバス幅分の圧縮命令を１回のフェッチで取り込むことができるため、メモリアクセス回数の低減を図ることができ、消費電力の低減化を図ることができる。また、ＮＯＰなどのシステム命令はオペランドが存在しないため、このような命令を非保存対象とすることで、復元元から除外することができ、復元処理の効率化を図ることができる。
【００９４】
・実施の形態２
つぎに、実施の形態２について説明する。実施の形態２では、図１に示した命令実行について説明する。実施の形態２では、図１に示したプロセッサ１０２が、命令列を読み込みながら、非圧縮命令については実行し、圧縮命令については復元元の命令を参照することで復元して、実行する。このように、圧縮された命令列をフェッチすることで、フェッチ回数、すなわち、メモリアクセス回数が低減され、消費電力の低減化を図ることができる。
【００９５】
（プロセッサ１０２のハードウェア構成例）
図１５は、図１に示したプロセッサ１０２のハードウェア構成例を示すブロック図である。プロセッサ１０２は、バスを介して、命令ＲＡＭ１５１やデータＲＡＭ１５２にアクセス可能に接続されている。バス幅は一例として３２ビットとする。命令ＲＡＭ１５１には、図６に示した圧縮命令列ｉｓｓや、図１１の（Ｂ）に示した圧縮命令列群ｖｓまたは（Ｃ）に示した圧縮命令列群ｓｖｓが格納されている。また、プロセッサ１０２は、入力装置、出力装置、通信装置、ＤＳＰ、他のＣＰＵなどの周辺モジュール（不図示）ともアクセス可能に接続されている。
【００９６】
プロセッサ１０２は、コントローラ１５３と、復旧レジスタ群１５４と、フェッチコントローラ１５５と、デコーダ１５６と、実行ユニット１５７と、メモリアクセスユニット１５８と、データレジスタ１５９と、インターラプトコントローラ１５１０と、を有する。
【００９７】
コントローラ１５３は、インターラプトコントローラ１５１０と、フェッチコントローラ１５５と、デコーダ１５６と、実行ユニット１５７と、メモリアクセスユニット１５８と、復旧レジスタ群１５４と、データレジスタ１５９と（以下、まとめて「接続先」）、に接続されている。コントローラ１５３は、接続先を制御して、ある接続先からのデータを他の接続先に転送したりする。また、コントローラ１５３は、フェッチコントローラ１５５、デコーダ１５６、実行ユニット１５７、メモリアクセスユニット１５８間のパイプライン制御をおこなう。
【００９８】
復旧レジスタ群１５４は、上段復旧レジスタ１５４１と中段復旧レジスタ１５４２と下段復旧レジスタ１５４３が直列に接続されて構成されている。また、上段復旧レジスタ１５４１はフェッチコントローラ１５５およびデコーダ１５６と接続され、中段復旧レジスタ１５４２は実行ユニット１５７に接続され、下段復旧レジスタ１５４３はメモリアクセスユニット１５８に接続されている。
【００９９】
各復旧レジスタには、それぞれ、プログラムカウンタ１１，２１，３１、命令バッファ１２，２２，３２、ＢＦＩ（Ｂｉｔ  Ｆｉｅｌｄ  Ｉｎｆｏｍａｔｉｏｎ）レジスタ１３，２３，３３、命令カウンタ１４，２４，３４を有する。プログラムカウンタ１１，２１，３１には、フェッチコントローラ１５５で計数された値が前段から転送されて保持される。命令バッファ１２，２２，３２には、デコーダ１５６で得られた命令コードが保持される。ＢＦＩレジスタ１３，２３，３３には、デコーダ１５６で得られた命令コードのオペランドパターンが保持される。命令カウンタ１４，２４，３４は、オペコードが同一でかつオペランドが規則的に連続する連続回数を示す。上段復旧レジスタ１５４１に保持された値は、中段復旧レジスタ１５４２に引き継がれ、中段復旧レジスタ１５４２に保持された値は、下段復旧レジスタ１５４３に引き継がれる。
【０１００】
フェッチコントローラ１５５は、プリフェッチバッファ１５５１と、フェッチバッファ１５５２と、プログラムカウンタ１５５３と、を有する。ここでは、プリフェッチバッファ１５５１とフェッチバッファ１５５２のビット幅は、バス幅と同一とする。フェッチコントローラ１５５は、命令ＲＡＭ１５１からバス幅分のデータをプリフェッチして、プリフェッチバッファ１５５１に保持する。
【０１０１】
また、フェッチコントローラ１５５は、フェッチバッファ１５５２に空きがある場合は、プリフェッチバッファ１５５１に残存するデータのうち先頭から順に（先入れ先出し）、フェッチバッファ１５５２に転送する。フェッチコントローラ１５５は、フェッチバッファ１５５２に保持されたデータの先頭ビットが「０」である場合、すなわち、圧縮／非圧縮判定ビット＝０の場合、非圧縮命令と判断する。この場合、フェッチコントローラ１５５は、非圧縮命令分のビット列をデコーダ１５６に転送する。
【０１０２】
一方、フェッチコントローラ１５５は、フェッチバッファ１５５２に保持されたデータの先頭ビットが「１」である場合、すなわち、圧縮／非圧縮判定ビット＝１の場合、非圧縮命令と判断する。この場合、フェッチコントローラ１５５は、圧縮命令分のビット（ビット値は圧縮されたことを示す圧縮情報＝「１」）をデコーダ１５６に転送する。
【０１０３】
プログラムカウンタ１５５３は、命令ＲＡＭ１５１からフェッチされた圧縮命令列の位置を計数する。具体的には、たとえば、プログラムカウンタ１５５３は、フェッチコントローラ１５５において非圧縮命令と判断された場合には、非圧縮命令のビット長分（たとえば、３２ビットであれば３２）、プログラムカウンタ１５５３の値をインクリメントする。一方、プログラムカウンタ１５５３は、フェッチコントローラ１５５において圧縮命令と判断された場合には、圧縮命令のビット長分（たとえば、１ビットであれば１）、プログラムカウンタ１５５３の値をインクリメントする。
【０１０４】
なお、フェッチコントローラ１５５は、フェッチバッファ１５５２からデータが転送されると、残余のデータを先頭方向にシフトする。フェッチバッファ１５５２が空の場合は、フェッチコントローラ１５５は、プリフェッチバッファ１５５１のビット幅分のデータをフェッチする。フェッチコントローラ１５５は、プログラムカウンタ１５５３の値が更新されると、更新後のプログラムカウンタ１５５３の値を、上段プログラムカウンタ１１に転送する。
【０１０５】
デコーダ１５６は、復旧レジスタ群１５４の中の上段復旧レジスタ１５４１に対しアクセス可能に接続されている。上段復旧レジスタ１５４１は、上段プログラムカウンタ１１、上段命令バッファ１２、上段ＢＦＩ（Ｂｉｔ  Ｆｉｅｌｄ  Ｉｎｆｏｍａｔｉｏｎ）レジスタ１３、上段命令カウンタ１４を有する。デコーダ１５６は、フェッチコントローラ１５５内のプログラムカウンタ１５５３の値が更新されて転送されてくると、上段プログラムカウンタ１１の値を、更新後のプログラムカウンタの値に更新する。
【０１０６】
デコーダ１５６は、フェッチコントローラ１５５から転送されてくる命令を解釈して、実行ユニット１５７に引き渡す。フェッチコントローラ１５５から転送されてくる命令には非圧縮命令と圧縮命令の２種類がある。たとえば、デコーダ１５６は、フェッチコントローラ１５５から転送されてくるデータの先頭ビットが「０」である場合、すなわち、圧縮／非圧縮判定ビット＝０の場合、非圧縮命令と判断する。一方、デコーダは、フェッチコントローラ１５５から転送されてくるデータの先頭ビットが「１」である場合、すなわち、圧縮／非圧縮判定ビット＝１の場合、非圧縮命令と判断する。
【０１０７】
デコーダ１５６は、転送されてきた命令が非圧縮命令であると判断された場合、非圧縮命令から命令コードを抽出し、抽出した命令コードを実行ユニット１５７に転送する。たとえば、図５に示したアドレス０ｘＦ１００の命令ＩＳ１が転送されてくると、先頭２ビット「０１」を除く命令コード（オペコードＡＤＤ、オペランドｒ０，ｒ１６，ｒ３２）を実行ユニット１５７に転送する。
【０１０８】
また、デコーダ１５６は、転送されてきた命令が非圧縮命令であると判断された場合、先頭から２ビット目の保存対象／非対象判別ビットにより、転送されてきた命令について上段命令バッファ１２への保存をおこなうか否かを判断する。非保存対象と判断された場合（保存対象／非対象判別ビット＝０）は、上段命令バッファ１２および上段ＢＦＩレジスタ１３への保存はおこなわない。
【０１０９】
一方、デコーダ１５６は、転送されてきた命令が保存対象と判断された場合、命令コードのオペランドパターンを解析して、上段ＢＦＩレジスタ１３に書き込む。たとえば、オペコードの上位ビットにオペランドパターンが書き込まれている場合は、オペランドパターンを上段ＢＦＩレジスタ１３に書き込む。たとえば、図６に示したアドレス０ｘＦ１００の命令ＩＳ１の場合、上段ＢＦＩレジスタ１３に書き込まれるオペランドパターンは、オペランドの種類がレジスタ、オペランドの個数が３個、先頭オペランドの開始位置が命令コードの先頭から１５ビット目という情報である。
【０１１０】
また、デコーダ１５６は、転送されてきた命令が保存対象と判断された場合、上段命令バッファ１２に命令コードを書き込む。たとえば、図６に示したアドレス０ｘＦ１００の命令ＩＳ１が転送されてくると、先頭２ビット「０１」を除く命令コード（オペコードＡＤＤ、オペランドｒ０，ｒ１６，ｒ３２）を上段命令バッファ１２に書き込む。
【０１１１】
また、デコーダ１５６は、転送されてきた命令が保存対象と判断された場合、命令カウンタを初期値に設定する。たとえば、デコーダ１５６は、初期値として１を設定する。命令カウンタは、圧縮命令が転送される都度、１ずつカウントアップし、非圧縮命令が転送されると、初期値に戻る。
【０１１２】
また、デコーダ１５６は、転送されてきた命令が圧縮命令であると判断された場合、たとえば、１ビットの圧縮情報である場合、現時点での上段ＢＦＩレジスタ１３、上段命令バッファ１２、および上段命令カウンタ１４の値に基づき、元の命令に復元する。たとえば、図６のアドレス０ｘＦ１２０の先頭（左端）のビット「１」が転送されてきた場合、命令ＩＳ２内の命令コード（オペコードがＡＤＤ，オペランドがｒ１，ｒ１７，ｒ３３）に復元する。
【０１１３】
同様に、図６のアドレス０ｘＦ１２０の先頭（左端）から２番目のビット「１」が転送されてきた場合、命令ＩＳ３内の命令コード（オペコードがＡＤＤ，オペランドがｒ２，ｒ１８，ｒ３４）に復元する。復元処理の詳細については後述する。デコーダ１５６は、復元した命令を実行ユニット１５７に転送する。デコーダ１５６は命令を復元した場合、実行ユニット１５７への転送後に、命令カウンタを１カウントアップする。
【０１１４】
また、デコーダ１５６は、非圧縮命令または復元した命令を実行ユニット１５７に転送する場合、上段復旧レジスタ１５４１の値を、中段復旧レジスタ１５４２に転送する。これにより、中段復旧レジスタ１５４２の値が更新され、実行ユニット１５７に転送された命令コードと中段復旧レジスタ１５４２の値との同期をとることができる。
【０１１５】
実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードを実行してオペランドで指定されたデータレジスタ１５９に書き出す。そして、実行ユニット１５７は、命令コードをメモリアクセスユニット１５８に転送する。この際、実行ユニット１５７は、コントローラ１５３を介して、中段復旧レジスタ１５４２内の各値を、下段復旧レジスタ１５４３に転送する。これにより、下段復旧レジスタ１５４３の値が更新され、メモリアクセスユニット１５８に転送された命令コードと下段復旧レジスタ１５４３の値との同期をとることができる。
【０１１６】
メモリアクセスユニット１５８は、実行ユニット１５７から転送されてくる命令コードにアクセス先となるデータＲＡＭ１５２のアドレスがある場合に、データＲＡＭ１５２にアクセスする。たとえば、転送されてきた命令コードのオペコードがＬＯＡＤの場合は、命令コード中のデータＲＡＭ１５２のアドレスからデータを読み込み、オペランドで指定されたデータレジスタ１５９に書き込む。また、転送されてきた命令コードのオペコードがＳＴＯＲＥの場合は、オペランドで指定されたデータレジスタ１５９の値を命令コード中のデータＲＡＭ１５２のアドレスにデータを書き出す。
【０１１７】
インターラプトコントローラ１５１０は、周辺モジュールからの割込み信号を検出する。インターラプトコントローラ１５１０は、検出された割込み信号をコントローラ１５３に伝えることで、コントローラ１５３は、フェッチコントローラ１５５、デコーダ１５６、実行ユニット１５７、メモリアクセスユニット１５８に対し、割り込まれた命令を優先実行させる。この場合、メモリアクセスユニット１５８は、下段復旧レジスタ１５４３の各値をデータＲＡＭ１５２のスタック領域１５２０に退避させる。
【０１１８】
また、インターラプトコントローラ１５１０は、周辺モジュールからの割込み処理の完了信号を検出する。インターラプトコントローラ１５１０は、検出された割込み信号をコントローラ１５３に伝えることで、コントローラ１５３は、フェッチコントローラ１５５、デコーダ１５６、実行ユニット１５７、メモリアクセスユニット１５８に対し、割り込み前の状態への復旧処理を実行させる。具体的には、たとえば、メモリアクセスユニット１５８での割り込み時の命令コードを、データＲＡＭ１５２のスタック領域１５２０に退避させられた下段レジスタの各値を用いて、デコーダ１５６で復元する。割り込み前の状態への復旧処理の詳細については後述する。
【０１１９】
（デコーダ１５６内のオペランド更新部）
つぎに、デコーダ１５６内のオペランド更新部の詳細について説明する。オペランド更新部は、上段命令バッファ１２に保持されているオペランドを、上段ＢＦＩレジスタ１３に保持されているオペランドパターンにしたがって１オペランドずつ抽出する。そして、抽出されたオペランドと命令カウンタの値により、抽出されたオペランドを更新する。更新処理内容は、たとえば、以下のとおりである。
【０１２０】
Ｏｐｅｒａｎｄ＝Ｏｐｅｒａｎｄ  ＯＰ  Ｘ・・・・・・・・・・・・・・（１）
Ｘ＝ＩＣ  ｏｒ  （ＩＣ  ＯＰ  Ｋ）・・・・・・・・・・・・・・・・・（２）
ＯＰ＝＋  ｏｒ  −  ｏｒ  ＊  ｏｒ  ／  ｏｒ  ＞＞  ｏｒ  ＜＜・・・（３）
ただし、Ｋ＝係数
【０１２１】
上記式（１）において、左辺の「Ｏｐｅｒａｎｄ」は更新後のオペランドであり、右辺の「Ｏｐｅｒａｎｄ」は更新前のオペランドである。また、上記式（１），（２）において、「ＯＰ」は操作であり、上記式（３）で規定したように、四則演算の演算子であったり、シフト操作をおこなう。「Ｘ」は変数であり、「ＩＣ」は上段命令カウンタ１４の値である。「Ｘ」は、上段命令カウンタ１４の値「ＩＣ」そのものまたは上段命令カウンタ１４の値「ＩＣ」に定数Ｋを操作した値となる。
【０１２２】
たとえば、命令ごとにオペランド（レジスタ番号や変数）が１ずつ増加する場合は、命令カウンタの値自体が１ずつカウントアップするため、「ＯＰ」をＯＰ＝“＋”とし、Ｘ＝ＩＣに設定する。これにより、式（１）は、以下のようになる。
【０１２３】
Ｏｐｅｒａｎｄ＝Ｏｐｅｒａｎｄ＋ＩＣ・・・（４）
【０１２４】
また、命令ごとにオペランド（レジスタ番号や変数）が２ずつ増加する場合は、命令カウンタの値自体が１ずつカウントアップするため、「ＯＰ」をＯＰ＝“＋”とし、Ｋ＝１に設定する。これにより、式（１）は、以下のようになる。
【０１２５】
Ｏｐｅｒａｎｄ＝Ｏｐｅｒａｎｄ＋ＩＣ＋１・・・（５）
【０１２６】
また、命令ごとにオペランド（レジスタ番号や変数）が１ずつ減少する場合は、命令カウンタの値自体が１ずつカウントアップするため、上記式（２）のＯＰ＝“＊”とし、Ｋ＝−１に設定するとともに、上記式（１）の「ＯＰ」をＯＰ＝“＋”に設定する。これにより、式（１）は、以下のようになる。
【０１２７】
Ｏｐｅｒａｎｄ＝Ｏｐｅｒａｎｄ＋｛ＩＣ＊（−１）｝・・・（６）
【０１２８】
また、命令ごとにオペランドがどのような規則的変化をするか、すなわち、「ＯＰ」と「Ｋ」の組み合わせについては、命令コードで指定される。このような回路構成は、組み合わせ回路により構築可能である。以下、具体例について説明する。
【０１２９】
図１６は、オペランド更新部の詳細な構成例１を示す説明図である。図１６において、オペランド更新部１６００は、複数の式Ａ〜式Ｚと、式設定レジスタ１６０１と、係数レジスタ１６０２と、セレクタ１６０３と、により構成される。複数の式Ａ〜式Ｚの各々は、組み合わせ回路により構成されている。式設定レジスタ１６０１には、式変更専用命令があった場合に、式Ａ〜式Ｚの中からいずれかの式を選択する式設定コードが書き込まれる。係数レジスタ１６０２には、係数変更専用命令があった場合に、値Ｋが書き込まれる。
【０１３０】
複数の式Ａ〜式Ｚの各々には、更新前のオペランド（式（１）の右辺のＯｐｅｒａｎｄ）と、上段命令カウンタ１４の値ＩＣと、係数レジスタ１６０２の値Ｋが入力される。また、セレクタ１６０３には、式設定レジスタ１６０１に書き込まれた式設定コードが入力される。セレクタからの出力が、更新後のオペランド（式（１）の左辺のＯｐｅｒａｎｄ）となる。
【０１３１】
たとえば、図６の圧縮命令列において、０ｘＦ１００の前のアドレスに、非圧縮命令として、式変更命令と係数変更命令があり、式変更命令のオペランドの値（式Ａ〜Ｚから使いたい式を指定する選択コード）が式設定レジスタ１６０１に保持され、係数変更命令のオペランドの値Ｋ＝０が係数レジスタ１６０２に保持される。
【０１３２】
たとえば、０ｘＦ１００の命令ＩＳ１の場合、式Ａが上記式（４）であるとする。式設定レジスタ１６０１には、式Ａの選択コードが保持される。これにより、命令カウンタの値ＩＣと更新前のオペランドであるレジスタ番号ｒ０と係数Ｋ＝０が入力されて、式（４）により、更新後のオペランドがｒ１となる。ｒ１６、ｒ３２についても同様である。
【０１３３】
図１７は、オペランド更新部１６００の詳細な構成例２を示す説明図である。図１６では、圧縮命令列に式変更命令と係数変更命令が含まれている例であるが、図１７では、復元元の命令のオペコード（またはその一部）が式Ａ〜式Ｚの選択コードである場合の構成例である。たとえば、オペコードがＡＤＤの場合は式Ａを選択する選択コードが設定され、オペコードがＳＴＯＲＥの場合は、セレクタ１７０３により、式Ｂを選択する選択コードが設定される。また、このような構成では、式変更命令分の命令が不要となり、圧縮率の効率化を図ることができる。
【０１３４】
図１８は、オペランド更新部１６００の詳細な構成例３を示す説明図である。図１８では、図１６に示した構成例と図１７に示した構成例のいずれかの式設定方法を選択できるようにした構成例である。図１６の構成例を選択可能であるため、オペコードが異なっていても同じ操作になる場合についても選択可能となる。
【０１３５】
具体的には、たとえば、オペランド更新部１６００は、式設定方法セレクトレジスタ１８０１、セレクタ１８０２，１８０３を有する。式設定方法セレクトレジスタ１８０１には、式設定方法変更専用命令があった場合に、オペコードか式設定レジスタに書き込まれた式設定コードのいずれかを選択する選択コードが書き込まれる。セレクタ１８０２は、式設定方法セレクトレジスタ１８０１に書き込まれた選択コードにより、オペコードか式設定レジスタに書き込まれた式設定コードのいずれかを選択する。セレクタ１８０３は、セレクタ１８０２からの選択信号により、式Ａ〜式Ｚの中から該当する式を選択して、オペランドを更新する。図１６〜図１８のいずれの構成例であっても、オペランド更新部１６００は、命令ごとのオペランドの規則的な変化に対応することができる。
【０１３６】
（プロセッサ１０２の動作処理手順）
図１９は、プロセッサ１０２の動作処理手順を示すフローチャートである。プロセッサ１０２は、フェッチコントローラ１５５によりプリフェッチ（ステップＳ１９０１）、フェッチ（ステップＳ１９０２）をおこなう。つぎに、プロセッサ１０２は、フェッチコントローラ１５５により、フェッチバッファの先頭ビットを参照して、フェッチバッファ内のビット列が圧縮命令であるか非圧縮命令であるかを判断する（ステップＳ１９０３）。非圧縮命令である場合（ステップＳ１９０３：Ｎｏ）、プロセッサ１０２は、プリフェッチバッファ１５５１により非圧縮命令分、プログラムカウンタの値をインクリメントする（ステップＳ１９０４）。
【０１３７】
このあと、プロセッサ１０２は、デコーダ１５６により、非圧縮命令が保存すべき命令であるか否かを判断する（ステップＳ１９０５）。具体的には、たとえば、先頭2ビット目の保存対象／非対象判別ビットを参照し、「１」であれば保存されるべき命令、「０」であれば保存されるべきでない命令と判断される。
【０１３８】
保存すべきでないと判断された場合（ステップＳ１９０５：Ｎｏ）、プロセッサ１０２は、デコーダ１５６により、非圧縮命令をデコードする（ステップＳ１９０６）。そして、ステップＳ１９１４に移行する。一方、保存すべきであると判断された場合（ステップＳ１９０５：Ｙｅｓ）、プロセッサ１０２は、デコーダ１５６により、非圧縮命令内の命令コードを上段命令バッファ１２に保存する（ステップＳ１９０７）。このあと、プロセッサ１０２は、デコーダ１５６により、非圧縮命令をデコードして（ステップＳ１９０８）、非圧縮命令のオペランドパターンを上段ＢＦＩレジスタ１３に保存し、上段命令カウンタ１４を初期化する（ステップＳ１９０９）。そして、ステップＳ１９１４に移行する。
【０１３９】
また、ステップＳ１９０３において、圧縮命令であると判断された場合（ステップＳ１９０３：Ｙｅｓ）、プロセッサ１０２は、フェッチコントローラ１５５により圧縮命令分プログラムカウンタの値をインクリメントする（ステップＳ１９１０）。そして、プロセッサ１０２は、デコーダ１５６により、上段命令バッファ１２に保持されている命令コードを取得する（ステップＳ１９１１）。
【０１４０】
このあと、プロセッサ１０２は、上段ＢＦＩレジスタ１３からオペランドパターンを取得することで、更新対象オペランドを特定し、上段命令カウンタ１４の値に基づいて、更新対象オペランドごとに、オペランド更新部１６００でオペランドを更新する（ステップＳ１９１２）。そして、プロセッサ１０２は、デコーダ１５６により、上段命令バッファ１２から取得した命令コード内のオペコードと更新後のオペランドを組み合わせることで、圧縮命令を圧縮前の命令に復元する（ステップＳ１９１３）。そして、ステップＳ１９１４に移行する。
【０１４１】
また、プロセッサ１０２は、ステップＳ１９１４において、フェッチコントローラ１５５によりプリフェッチしたビット列のビット長が一定サイズ以上であるか否かを判断し（ステップＳ１９１４）、一定サイズ以上である場合（ステップＳ１９１４：Ｙｅｓ）、ステップＳ１９０２に戻ってフェッチする（ステップＳ１９０２）。
【０１４２】
一方、一定サイズ以上でない場合（ステップＳ１９１４：Ｎｏ）、ステップＳ１９０１に戻ってプリフェッチをおこなう（ステップＳ１９０１）。このようにして、フェッチコントローラ１５５およびデコーダ１５６が動作することで、非圧縮命令は通常通りデコードされて実行ユニット１５７に転送され、圧縮命令は元の命令に復元されて実行ユニット１５７に転送されることになる。
【０１４３】
（パイプライン処理）
つぎに、実施の形態２にかかるパイプライン処理について説明する。パイプライン処理では、フェッチコントローラ１５５による命令フェッチ、デコーダ１５６によるレジスタリード、実行ユニット１５７による実行、メモリアクセス部によるメモリアクセスまでの処理（コミット前ステージ）が実行される。このパイプライン処理では、上述したように、デコーダ１５６によるレジスタリードのステージにおいて、オペランドを更新して圧縮前の命令コードに復元したり、割り込みが発生した場合の復旧処理が実行される。以下の実施例３では、実施例１で圧縮された圧縮命令列でのパイプライン処理を説明し、実施例４では、実施例２で圧縮された圧縮命令群列でのパイプライン処理を説明する。
【０１４４】
＜実施例３＞
（命令実行）
図２０〜図３６は、実施例３にかかるパイプライン処理例を示す説明図である。まず、図２０において、フェッチコントローラ１５５が、命令ＲＡＭ１５１のアドレス０ｘＦ１００のビット列（命令ＩＳ１）をプリフェッチバッファ１５５１にプリフェッチする。
【０１４５】
図２１において、フェッチコントローラ１５５は、プリフェッチバッファ１５５１にプリフェッチされた命令ＲＡＭ１５１のアドレス０ｘＦ１００のビット列（命令ＩＳ１）をフェッチバッファにフェッチする。また、フェッチコントローラ１５５は、フェッチにより空きになったプリフェッチバッファ１５５１に、命令ＲＡＭ１５１のアドレス０ｘＦ１２０のビット列をプリフェッチバッファ１５５１にプリフェッチする。
【０１４６】
つぎに、図２２において、フェッチコントローラ１５５は、フェッチバッファにフェッチされているアドレス０ｘＦ１００のビット列（命令ＩＳ１）が非圧縮命令であるか否かを判断する。具体的には、たとえば、フェッチコントローラ１５５は、フェッチバッファの先頭ビット（圧縮／非圧縮判定ビット）が「０」（非圧縮）か「１」（圧縮）かで判断する。アドレス０ｘＦ１００のビット列の場合、先頭ビットが「０」であるため、アドレス０ｘＦ１００のビット列は、非圧縮命令のビット列と判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ内の全ビット列を、デコーダ１５６に転送する。
【０１４７】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタを更新する。この場合、転送されるビット列は３２ビットであるため、プログラムカウンタの値は、「３２」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタの値「３２」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０１４８】
また、デコーダ１５６では、フェッチコントローラ１５５から非圧縮命令が転送されてくると、非圧縮命令の先頭から２ビット目の保存対象／非対象判別ビットを参照する。この場合、保存対象／非対象判別ビットの値が「１」（保存すべき）であるため、デコーダ１５６は、非圧縮命令内の命令コードＩＳＣ１（オペコード：ＡＤＤ、オペランド：ｒ０，ｒ１６，ｒ３２）を上段命令バッファ１２に保持する。また、デコーダ１５６は、命令コードＩＳＣ１のオペランドパターンＤ１を上段ＢＦＩレジスタ１３に保持する。そして、デコーダ１５６は、非圧縮命令が転送されてきたため、上段命令カウンタ１４を初期値である「１」に設定する。また、デコーダ１５６は、フェッチコントローラ１５５から転送されてきたプログラムカウンタの値を、上段プログラムカウンタ１１の値に設定する。
【０１４９】
つぎに、図２３において、フェッチコントローラ１５５は、アドレス０ｘＦ１２０のビット列を、プリフェッチバッファ１５５１から空きになったフェッチバッファ１５５２にプリフェッチする。また、フェッチコントローラ１５５は、命令ＲＡＭ１５１のアドレス０ｘＦ１４０のビット列を、フェッチにより空きになったプリフェッチバッファ１５５１にプリフェッチする。
【０１５０】
また、デコーダ１５６は、命令コードＩＳＣ１と上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＩＳＣ１を、データレジスタ１５９やデータＲＡＭ１５２を参照することで実行する。
【０１５１】
つぎに、図２４において、フェッチコントローラ１５５は、フェッチバッファにフェッチされているアドレス０ｘＦ１２０のビット列が非圧縮命令であるか否かを判断する。アドレス０ｘＦ１２０のビット列の場合、先頭ビットが「１」であるため、アドレス０ｘＦ１００のビット列の先頭ビットは、圧縮命令であると判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ内の先頭ビット（＝１）を、デコーダ１５６に転送する。
【０１５２】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタを更新する。この場合、転送されるビット列は先頭ビット（１ビット）であるため、プログラムカウンタの値は、「３３」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタの値「３３」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０１５３】
また、デコーダ１５６では、フェッチコントローラ１５５から圧縮命令が転送されてくると、上段命令バッファ１２に保持されている命令コードＩＳＣ１、ＢＦＩレジスタに保持されているオペランドパターンＤ１、および命令カウンタの値「１」を読み出す。そして、デコーダ１５６は、オペランド更新部１６００により、読み出した命令コードＩＳＣ１のオペランドを更新する。これにより、デコーダ１５６は、元の命令コードＩＳＣ２（オペコード：ＡＤＤ、オペランド：ｒ１，ｒ１７，ｒ３３）に復元する。
【０１５４】
また、実行ユニット１５７は、命令コードＩＳＣ２と中段復旧レジスタ１５４２の値をメモリアクセスユニット１５８に転送する。メモリアクセスユニット１５８は、下段復旧レジスタ１５４３を、中段復旧レジスタ１５４２の値に更新する。また、メモリアクセスユニット１５８は、転送されてきた命令コードのオペコードにしたがってデータＲＡＭ１５２にアクセスする。命令コードＩＳＣ１の場合、オペランドにデータＲＡＭ１５２のアドレスがないため、データＲＡＭ１５２にアクセスしないこととなる。
【０１５５】
つぎに、図２５において、デコーダ１５６は、復元した命令コードＩＳＣ２と上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。そして、デコーダ１５６は、転送後に、上段命令カウンタ１４の値を１インクリメントする。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。したがって、上段復旧レジスタ１５４１の値と中段復旧レジスタ１５４２の値は、上段命令カウンタ１４の値「２」および中段命令カウンタ２４の値「１」のみが異なることとなる。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＩＳＣ２を、データレジスタ１５９やデータＲＡＭ１５２を参照することで実行する。
【０１５６】
つぎに、図２６において、フェッチコントローラ１５５は、図２４での圧縮命令分のビット転送により１ビット空きが生じたため、フェッチバッファ内の残余ビット列（３１ビット）を１ビットシフトし、空き領域（１ビット分）に、プリフェッチバッファ１５５１の先頭ビットをフェッチする。また、メモリアクセスユニット１５８において、命令コードＩＳＣ１が処理されると、コミットステージ外の処理（ライトバック）が行われる。
【０１５７】
つぎに、図２７において、フェッチコントローラ１５５は、フェッチバッファにフェッチされているビット列が非圧縮命令であるか否かを判断する。このビット列の場合、先頭ビットが「１」であるため、フェッチバッファに保持されているビット列の先頭ビットは、圧縮命令であると判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ内の先頭ビット（＝１）を、デコーダ１５６に転送する。
【０１５８】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタを更新する。この場合、転送されるビット列は先頭ビット（１ビット）であるため、プログラムカウンタの値は、「３４」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタの値「３４」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０１５９】
また、デコーダ１５６では、フェッチコントローラ１５５から圧縮命令が転送されてくると、上段命令バッファ１２に保持されている命令コードＩＳＣ１、ＢＦＩレジスタに保持されているオペランドパターンＤ１、および命令カウンタの値「２」を読み出す。そして、デコーダ１５６は、オペランド更新部１６００により、読み出した命令コードＩＳＣ１のオペランドを更新する。これにより、デコーダ１５６は、元の命令コードＩＳＣ３（オペコード：ＡＤＤ、オペランド：ｒ２，ｒ１８，ｒ３４）に復元する。
【０１６０】
また、実行ユニット１５７は、命令コードＩＳＣ２と中段復旧レジスタ１５４２の値をメモリアクセスユニット１５８に転送する。メモリアクセスユニット１５８は、下段復旧レジスタ１５４３を、中段復旧レジスタ１５４２の値に更新する。また、メモリアクセスユニット１５８は、転送されてきた命令コードのオペコードにしたがってデータＲＡＭ１５２にアクセスする。命令コードＩＳＣ２の場合、オペランドにデータＲＡＭ１５２のアドレスがないため、データＲＡＭ１５２にアクセスしないこととなる。
【０１６１】
つぎに、図２８において、デコーダ１５６は、復元した命令コードＩＳＣ３と上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。そして、デコーダ１５６は、転送後に、上段命令カウンタ１４の値を１インクリメントする。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。したがって、上段復旧レジスタ１５４１の値と中段復旧レジスタ１５４２の値は、上段命令カウンタ１４の値「３」および中段命令カウンタ２４の値「２」のみが異なることとなる。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＩＳＣ３を、データレジスタ１５９やデータＲＡＭ１５２を参照することで実行する。
【０１６２】
つぎに、図２９において、フェッチコントローラ１５５は、図２８での圧縮命令分のビット転送により１ビット空きが生じたため、フェッチバッファ内の残余ビット列（３１ビット）を１ビットシフトし、空き領域（１ビット分）に、プリフェッチバッファ１５５１の先頭ビットをフェッチする。また、メモリアクセスユニット１５８において、命令コードＩＳＣ２が処理されると、コミットステージ外の処理（ライトバック）が行われる。
【０１６３】
つぎに、図３０において、フェッチコントローラ１５５は、フェッチバッファにフェッチされているビット列が非圧縮命令であるか否かを判断する。このビット列の場合、先頭ビットが「０」であるため、フェッチバッファ１５５２内のビット列は、非圧縮命令のビット列と判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ内の全ビット列を、デコーダ１５６に転送する。
【０１６４】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタ１５５３を更新する。この場合、転送されるビット列は３２ビットであるため、プログラムカウンタ１５５３の値は、「６６」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタの値「６６」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０１６５】
また、デコーダ１５６では、フェッチコントローラ１５５から非圧縮命令が転送されてくると、非圧縮命令の先頭から２ビット目の保存対象／非対象判別ビットを参照する。この場合、保存対象／非対象判別ビットの値が「１」（保存すべき）であるため、非圧縮命令内の命令コードＩＳＣ４（オペコード：ＳＴＯＲＥ、オペランド：ｒ３２，０ｘ００００）を上段命令バッファ１２に保持する。また、デコーダ１５６は、命令コードＩＳＣ４のオペランドパターンＤ４を上段ＢＦＩレジスタ１３に保持する。そして、デコーダ１５６は、非圧縮命令が転送されてきたため、上段命令カウンタ１４を初期値である「１」に設定する。また、デコーダ１５６は、フェッチコントローラ１５５から転送されてきたプログラムカウンタの値「６６」を、上段プログラムカウンタ１１の値「６６」に設定する。
【０１６６】
つぎに、図３１において、フェッチコントローラ１５５は、プリフェッチバッファ１５５１内の３０ビットのビット列（図３０を参照）をフェッチする。また、フェッチコントローラ１５５は、命令ＲＡＭ１５１のアドレス０ｘＦ１６０のビット列「００１」を、空きになったプリフェッチバッファ１５５１にプリフェッチする。そして、フェッチコントローラ１５５は、フェッチバッファには２ビットの空きがあるため、プリフェッチされた３ビットのうち先頭２ビット「００」を、フェッチバッファにフェッチする。これにより、フェッチバッファには、命令ＩＳ５がフェッチされたことになる。
【０１６７】
また、デコーダ１５６は、命令コードＩＳＣ４と上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＩＳＣ４を、データレジスタ１５９やデータＲＡＭ１５２を参照することで実行する。また、メモリアクセスユニット１５８において、命令コードＩＳＣ３が処理されると、コミットステージ外の処理（ライトバック）が行われる。
【０１６８】
つぎに、図３２において、フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているアドレス０ｘＦ１６０のビット列（命令ＩＳ５）が非圧縮命令であるか否かを判断する。アドレス０ｘＦ１６０のビット列の場合、先頭ビットが「０」であるため、アドレス０ｘＦ１６０のビット列は、非圧縮命令（命令ＩＳ５）のビット列と判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ１５５２内の全ビット列（命令ＩＳ５）を、デコーダ１５６に転送する。
【０１６９】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタを更新する。この場合、転送されるビット列は３２ビットであるため、プログラムカウンタの値は、「９８」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタの値「９８」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０１７０】
また、デコーダ１５６では、フェッチコントローラ１５５から非圧縮命令が転送されてくると、非圧縮命令（命令ＩＳ５）の先頭から２ビット目の保存対象／非対象判別ビットを参照する。この場合、保存対象／非対象判別ビットの値が「０」（保存すべきでない）であるため、非圧縮命令内の命令コードＩＳＣ５（ＮＯＰ）は上段命令バッファ１２に保持されない。同様に、命令コードＩＳＣ５（ＮＯＰ）のオペランドパターンも上段ＢＦＩレジスタ１３に保持されない。
【０１７１】
このように、命令コードＩＳＣ５（ＮＯＰ）のようなシステム命令コードについては、オペランドの更新処理の対象外とすることで、上段復旧レジスタ１５４１の値と後続の命令コードとにより、オペランドを更新することができる。そして、デコーダ１５６は、非圧縮命令が転送されてきたため、上段命令カウンタ１４を初期値である「１」に設定する。また、デコーダ１５６は、フェッチコントローラ１５５から転送されてきたプログラムカウンタの値「９８」を、上段プログラムカウンタ１１の値「９８」に設定する。
【０１７２】
また、実行ユニット１５７は、命令コードＩＳＣ４と中段復旧レジスタ１５４２の値をメモリアクセスユニット１５８に転送する。メモリアクセスユニット１５８は、下段復旧レジスタ１５４３を、中段復旧レジスタ１５４２の値に更新する。また、メモリアクセスユニット１５８は、転送されてきた命令コードのオペコードにしたがってデータＲＡＭ１５２にアクセスする。命令コードＩＳＣ４の場合、オペランドにデータＲＡＭ１５２のアドレス０ｘ００００があるため、データＲＡＭ１５２のアドレス０ｘ００００にアクセス（ＳＴＯＲＥ）することとなる。
【０１７３】
つぎに、図３３において、フェッチコントローラ１５５は、プリフェッチバッファ１５５１のビット列（１ビット）を、空きになったフェッチバッファ１５５２にフェッチする。また、デコーダ１５６は、命令コードＩＳＣ５と上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＩＳＣ５がＮＯＰであるため、何もしない。また、メモリアクセスユニット１５８において、命令コードＩＳＣ４が処理されると、コミットステージ外の処理（ライトバック）が行われる。
【０１７４】
つぎに、図３４において、フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているビット列が非圧縮命令であるか否かを判断する。このビット列の場合、先頭ビットが「１」であるため、フェッチバッファ１５５２に保持されているビット列の先頭ビットは、圧縮命令であると判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ１５５２内の先頭ビット（＝１）を、デコーダ１５６に転送する。
【０１７５】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタ１５５３を更新する。この場合、転送されるビット列は先頭ビット（１ビット）であるため、プログラムカウンタ１５５３の値は、「９９」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタ１５５３の値「９９」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０１７６】
また、デコーダ１５６では、フェッチコントローラ１５５から圧縮命令が転送されてくると、上段命令バッファ１２に保持されている命令コードＩＳＣ４、上段ＢＦＩレジスタ１３に保持されているオペランドパターンＤ４、および命令カウンタ１４の値「１」を読み出す。そして、デコーダ１５６は、オペランド更新部１６００により、読み出した命令コードＩＳＣ４のオペランドを更新する。これにより、デコーダ１５６は、元の命令コードＩＳＣ６（オペコード：ＳＴＯＲＥ、オペランド：ｒ３３，０ｘ０００１）に復元する。
【０１７７】
また、実行ユニット１５７は、命令コードＩＳＣ５（ＮＯＰ）と中段復旧レジスタ１５４２の値をメモリアクセスユニット１５８に転送する。メモリアクセスユニット１５８は、下段復旧レジスタ１５４３を、中段復旧レジスタ１５４２の値に更新する。また、メモリアクセスユニット１５８は、転送されてきた命令コードのオペコードにしたがってデータＲＡＭ１５２にアクセスする。命令コードＩＳＣ５の場合、ＮＯＰであるため何もしない。
【０１７８】
つぎに、図３５において、デコーダ１５６は、復元した命令コードＩＳＣ６と上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。そして、デコーダ１５６は、転送後に、上段命令カウンタ１４の値を１インクリメントする。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。したがって、上段復旧レジスタ１５４１の値と中段復旧レジスタ１５４２の値は、上段命令カウンタ１４の値「２」および中段命令カウンタ２４の値「１」のみが異なることとなる。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＩＳＣ６を、データレジスタ１５９やデータＲＡＭ１５２を参照することで実行する。
【０１７９】
つぎに、図３６において、実行ユニット１５７は、命令コードＩＳＣ６と中段復旧レジスタ１５４２の値をメモリアクセスユニット１５８に転送する。メモリアクセスユニット１５８は、下段復旧レジスタ１５４３を、中段復旧レジスタ１５４２の値に更新する。また、メモリアクセスユニット１５８は、転送されてきた命令コードのオペコードにしたがってデータＲＡＭ１５２にアクセスする。命令コードＩＳＣ６の場合、オペランドにデータＲＡＭ１５２のアドレス０ｘ０００１があるため、データＲＡＭ１５２のアドレス０ｘ０００１にアクセス（ＳＴＯＲＥ）することとなる。また、メモリアクセスユニット１５８において、命令コードＩＳＣ６が処理されると、コミットステージ外の処理（ライトバック）が行われる。
【０１８０】
このように、圧縮命令列ｉｓｓをパイプライン処理することで、デコーダ１５６により圧縮命令が復元される。したがって、プロセッサ１０２は、圧縮前の命令列と同じ命令を実行することができる。また、圧縮命令列ｉｓｓには圧縮命令が含まれているため、命令ＲＡＭ１５１からのフェッチ回数が低減される。すなわち、命令ＲＡＭ１５１に対するメモリアクセス回数が低減するため、低消費電力化を図ることができる。
【０１８１】
（割り込みからの復旧）
つぎに、上述した図２０〜図３６の命令実行中に、割り込みが発生した場合の割り込みからの復旧処理について説明する。割り込みが発生した場合、プロセッサ１０２は、コミットステージ移行の処理（ライトバック、…）を完了させてから割り込み処理を実行する。この場合、プロセッサ１０２は、コミット前ステージの処理について、下段復旧レジスタ１５４３の値を、一時的に退避させて割り込み処理を実行させ、割り込み処理が終了すると、退避させた下段復旧レジスタ１５４３の値を用いて、コミット前ステージの処理を復旧する。以下、図３１の処理内容のときに割り込みが発生した場合について図３７〜図４２を用いて説明する。
【０１８２】
図３７〜図４２は、割り込みからの復旧処理を示す説明図である。プロセッサ１０２は、インターラプトコントローラ１５１０により、周辺モジュールやタイマにより割り込みの発生を検出すると、コントローラ１５３を介して、フェッチコントローラ１５５、デコーダ１５６、実行ユニット１５７、メモリアクセスユニット１５８に対し、割り込み信号を発行することになる。
【０１８３】
まず、図３７において、メモリアクセスユニット１５８は、割り込み信号を受信すると、下段復旧レジスタ１５４３の値やその他汎用レジスタの値を、データＲＡＭ１５２のスタック領域１５２０に退避させる。
【０１８４】
つぎに、図３８において、フェッチコントローラ１５５は、割り込み信号を受信すると、プリフェッチバッファ１５５１およびフェッチバッファ１５５２をクリアして、割り込み処理に備える。同様に、デコーダ１５６、実行ユニット１５７、メモリアクセスユニット１５８は、割り込み信号を受信すると、それぞれ上段復旧レジスタ１５４１、中段復旧レジスタ１５４２、および下段復旧レジスタ１５４３の値をクリアして、割り込み処理に備える。そして、プロセッサ１０２は、割り込み処理を実行する。
【０１８５】
つぎに、図３９において、デコーダ１５６は、インターラプトコントローラ１５１０およびコントローラ１５３を介して割り込み終了信号を受信すると、スタック領域１５２０に退避させた下段命令バッファ３２の値（命令コードＩＳＣ１）、下段ＢＦＩレジスタ３３の値（オペランドパターンＤ１）、下段命令カウンタ３４の値「２」を、上段命令バッファ１２の値、上段ＢＦＩレジスタ１３の値、上段命令カウンタ１４の値に設定する。また、フェッチコントローラ１５５は、再度プリフェッチバッファ１５５１およびフェッチバッファ１５５２をクリアして、スタック領域１５２０に退避させた下段プログラムカウンタ３１の値「３４」を読み込む。
【０１８６】
つぎに、図４０において、フェッチコントローラ１５５は、スタック領域１５２０から読み出した下段プログラムカウンタ３１の値「３４」を、フェッチバッファのビット幅（３２ビット）で割る。この場合、商が「１」、余りが「１」となる。フェッチコントローラ１５５は、商「１」にフェッチバッファのビット幅（３２ビット）を乗算することで、プリフェッチさせるビット位置を特定する。この場合、商「１」×３２ビット＝３２であるため、圧縮命令列の先頭から３２ビット目からのビット列、すなわち、命令ＲＡＭ１５１のアドレス０ｘＦ１２０のビット列をプリフェッチバッファ１５５１にプリフェッチする。そして、フェッチコントローラ１５５は、プログラムカウンタ１５５３に、「３２」を設定する。
【０１８７】
つぎに、図４１において、フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているビット列が非圧縮命令であるか否かを判断する。このビット列の場合、先頭ビットが「１」であるため、フェッチされているビット列の先頭ビットは、圧縮命令と判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ１５５２内の先頭ビットを、デコーダ１５６に転送する。
【０１８８】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタ１５５３を更新する。この場合、転送されるビット列は１ビットであるため、プログラムカウンタ１５５３の値は、「３３」となる。この場合、スタック領域１５２０に退避させた下段プログラムカウンタ３１の値「３４」と不一致であるため、フェッチコントローラ１５５は、更新後のプログラムカウンタの値「３３」を、デコーダ１５６の上段プログラムカウンタ１１に転送しない。
【０１８９】
また、デコーダ１５６は、フェッチバッファ１５５２から圧縮命令が転送されてくるが、プログラムカウンタ１５５３の値が転送されてこないため、圧縮命令を破棄する。このように、フェッチコントローラ１５５のプログラムカウンタ１５５３の値と、スタック領域１５２０から読み出した下段プログラムカウンタ３１の値とが一致するまで、デコーダ１５６は、フェッチバッファ１５５２からのビット列を破棄する。これにより、誤ったビット位置で命令が復元されないことになる。
【０１９０】
つぎに、図４２において、フェッチコントローラ１５５は、図４０で１ビット転送したため、プリフェッチバッファ１５５１の先頭ビットをフェッチする。このあと、フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているビット列が非圧縮命令であるか否かを判断する。このビット列の場合、先頭ビットが「１」であるため、フェッチされているビット列の先頭ビットは、圧縮命令と判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ１５５２内の先頭ビットを、デコーダ１５６に転送する。
【０１９１】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタ１５５３を更新する。この場合、転送されるビット列は１ビットであるため、プログラムカウンタ１５５３の値は、「３４」となる。この場合、フェッチコントローラ１５５は、更新後のプログラムカウンタの値「３４」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０１９２】
また、デコーダ１５６は、フェッチバッファ１５５２から圧縮命令およびプログラムカウンタ１５５３の値が転送されてきたため、上段復旧レジスタ１５４１の値により、命令を復元する。これにより、割り込み発生時にメモリアクセスユニット１５８まで処理されていた命令コードＩＳＣ２が復元される。これ以降の処理は、図２８〜図３６と同様に実行されることとなる。これにより、正確な復旧位置で命令を復元することができる。
【０１９３】
＜実施例４＞
つぎに、実施例４について説明する。実施例４では、図１１の（Ｃ）の圧縮命令群列ｓｖｓについて命令実行する場合について説明する。圧縮命令群列ｓｖｓの場合、１つの命令群（非圧縮命令群または復元された命令群）の中に、Ｎ個（図１１の（Ａ）では４個）の命令が含まれている。したがって、上段命令バッファ１２、中段ＢＦＩレジスタ２２、下段命令バッファ２３では、命令ごとに値を保持することになる。また、実施例４では、プリフェッチバッファ１５５１およびフェッチバッファ１５５２のビット幅を、例として１２８ビットとする。
【０１９４】
図４３〜図５５は、実施例４にかかるパイプライン処理例を示す説明図である。まず、図４３において、フェッチコントローラ１５５が、命令ＲＡＭ１５１のアドレス０ｘＦ０００のビット列をプリフェッチバッファ１５５１にプリフェッチする。
【０１９５】
つぎに、図４４において、フェッチコントローラ１５５は、プリフェッチバッファ１５５１にプリフェッチされた命令ＲＡＭ１５１のアドレス０ｘＦ０００のビット列をフェッチバッファにフェッチする。また、フェッチコントローラ１５５は、フェッチにより空きになったプリフェッチバッファ１５５１に、命令ＲＡＭ１５１のアドレス０ｘＦ０１０のビット列をプリフェッチバッファ１５５１にプリフェッチする。
【０１９６】
つぎに、図４５において、フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているアドレス０ｘＦ０００のビット列が非圧縮命令であるか否かを判断する。具体的には、たとえば、フェッチコントローラ１５５は、フェッチバッファ１５５２の先頭４ビット（圧縮／非圧縮判定ビット列）の各々が「０」（非圧縮）か「１」（圧縮）かで判断する。アドレス０ｘＦ０００のビット列の場合、先頭４ビットのいずれのビットも「０」であるため、アドレス０ｘＦ０００のビット列は、４個の非圧縮命令のビット列と判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ１５５２内の全ビット列を、デコーダ１５６に転送する。
【０１９７】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタ１５５３を更新する。この場合、転送されるビット列は１２８ビットであるため、プログラムカウンタ１５５３の値は、「１２８」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタの値「１２８」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０１９８】
また、デコーダ１５６では、フェッチコントローラ１５５から非圧縮命令群が転送されてくると、非圧縮命令群を４分割する。そして、デコーダ１５６は、分割された圧縮命令の各々の先頭ビットである保存対象／非対象判別ビットを参照する。この場合、いずれも非圧縮命令も保存対象／非対象判別ビットの値が「１」（保存すべき）であるため、デコーダ１５６は、非圧縮命令内の命令コードＡ１〜Ａ４をそれぞれ上段命令バッファ１２に保持する。
【０１９９】
また、デコーダ１５６は、命令コードＡ１〜Ａ４のオペランドパターンＡ１−ＢＦＩ〜Ｄ１−ＢＦＩを上段ＢＦＩレジスタ１３に保持する。そして、デコーダ１５６は、非圧縮命令Ａ１〜Ａ４が転送されてきたため、上段命令カウンタ１４の各々を初期値である「１」に設定する。また、デコーダ１５６は、フェッチコントローラ１５５から転送されてきたプログラムカウンタの値を、上段プログラムカウンタ１１の値に設定する。
【０２００】
つぎに、図４６において、フェッチコントローラ１５５は、アドレス０ｘＦ０１０のビット列を、プリフェッチバッファ１５５１から空きになったフェッチバッファ１５５２にプリフェッチする。また、フェッチコントローラ１５５は、命令ＲＡＭ１５１のアドレス０ｘＦ０２０のビット列を、フェッチにより空きになったプリフェッチバッファ１５５１にプリフェッチする。
【０２０１】
また、デコーダ１５６は、命令コードＡ１〜Ｄ１と上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＡ１〜Ｄ１を、データレジスタ１５９やデータＲＡＭ１５２を参照することで実行する。
【０２０２】
つぎに、図４７において、フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているアドレス０ｘＦ０１０のビット列が非圧縮命令であるか否かを判断する。アドレス０ｘＦ０１０のビット列の場合、先頭４ビットのいずれのビットも「１」であるため、アドレス０ｘＦ０１０の先頭４ビットは、圧縮命令列であると判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ１５５２内の先頭４ビット（＝１１１１）を、デコーダ１５６に転送する。
【０２０３】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタを更新する。この場合、転送されるビット列は先頭４ビットであるため、プログラムカウンタの値は、「１３２」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタの値「１３２」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０２０４】
つぎに、図４８において、フェッチコントローラ１５５は、図４７での圧縮命令列分のビット転送により４ビット空きが生じたため、フェッチバッファ内の残余ビット列（１２４ビット）を４ビットシフトし、空き領域（４ビット分）に、プリフェッチバッファ１５５１の先頭４ビットをフェッチする。
【０２０５】
また、デコーダ１５６では、フェッチコントローラ１５５から圧縮命令列が転送されてくると、上段命令バッファ１２に保持されている命令コードＡ１〜Ｄ１、ＢＦＩレジスタに保持されているオペランドパターンＡ１−ＢＦＩ〜Ｄ１−ＢＦＩ、および命令カウンタの値「１」を、命令ごとに読み出す。そして、デコーダ１５６は、オペランド更新部１６００により、読み出した命令コードＡ１〜Ｄ１のオペランドを命令コードごとに更新する。これにより、デコーダ１５６は、元の命令コードＡ２〜Ｄ２に復元する。
【０２０６】
また、実行ユニット１５７は、命令コードＡ１〜Ｄ１と中段復旧レジスタ１５４２の値をメモリアクセスユニット１５８に転送する。メモリアクセスユニット１５８は、下段復旧レジスタ１５４３を、中段復旧レジスタ１５４２の値に更新する。また、メモリアクセスユニット１５８は、転送されてきた命令コードＡ１〜Ｄ１のオペコードにしたがってデータＲＡＭ１５２にアクセスする。
【０２０７】
つぎに、図４９において、デコーダ１５６は、復元した命令コードＡ２〜Ｄ２と上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。そして、デコーダ１５６は、転送後に、上段命令カウンタ１４の値をそれぞれ１インクリメントする。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。したがって、上段復旧レジスタ１５４１の値と中段復旧レジスタ１５４２の値は、上段命令カウンタ１４の値「２」および中段命令カウンタ２４の値「１」のみが異なることとなる。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＡ２〜Ｄ２を、データレジスタ１５９やデータＲＡＭ１５２を参照することで実行する。
【０２０８】
つぎに、図５０において、フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているビット列が非圧縮命令群であるか否かを判断する。このビット列の場合、先頭４ビットが「１０１０」であるため、フェッチバッファ１５５２に保持されているビット列の先頭ビットと３番目が圧縮命令であると判定される。２番目の命令は、先頭４ビットの後続にあるビット列「１  Ｆ１」と連結されて非圧縮命令となる。４番目の命令は、先頭４ビットの後続にあるビット列「０  ＮＯＰ」と連結されて非圧縮命令となる。
【０２０９】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタ１５５３を更新する。この場合、転送されるビット列は６６ビットであるため、プログラムカウンタ１５５３の値は、「１９８」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタ１５５３の値「１９８」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。また、メモリアクセスユニット１５８において、命令コードＡ１〜Ｄ１が処理されると、コミットステージ外の処理（ライトバック）が行われる。
【０２１０】
つぎに、図５１において、フェッチコントローラ１５５は、デコーダ１５６に転送した６６ビット分、先頭方向にシフトする。また、デコーダ１５６では、１番目と３番目の圧縮命令について、上段命令バッファ１２、上段ＢＦＩレジスタ１３、上段命令カウンタ１４の値を用いて、元の命令Ａ３，Ｃ３に復元する。また、２番目と４番目の命令については、デコーダ１５６は、保存対象／非対象判別ビットを参照する。２番目の命令内の保存対象／非対象判別ビットが「１」であるため、デコーダ１５６は、上段命令バッファ１２、上段ＢＦＩレジスタ１３、上段命令カウンタ１４の値を更新する。
【０２１１】
また、４番目の命令内の保存対象／非対象判別ビットが「０」であるため、デコーダ１５６は、４番目の命令コードＮＯＰについては、上段命令バッファ１２、上段ＢＦＩレジスタ１３、上段命令カウンタ１４の値を更新しない。
【０２１２】
また、実行ユニット１５７は、命令コードＡ２〜Ｄ２と中段復旧レジスタ１５４２の値をメモリアクセスユニット１５８に転送する。メモリアクセスユニット１５８は、下段復旧レジスタ１５４３を、中段復旧レジスタ１５４２の値に更新する。また、メモリアクセスユニット１５８は、転送されてきた命令コードのオペコードにしたがってデータＲＡＭ１５２にアクセスする。
【０２１３】
つぎに、図５２において、デコーダ１５６は、命令コードＡ３，Ｆ，Ｃ３，ＮＯＰと上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。そして、デコーダ１５６は、転送後に、上段命令カウンタ１４のうち、オペランド更新に用いられた１番目と３番目の命令カウンタの値を１インクリメントする。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＡ３，Ｆ，Ｃ３，ＮＯＰを、データレジスタ１５９やデータＲＡＭ１５２を参照することで実行する。
【０２１４】
つぎに、図５３において、フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているビット列が非圧縮命令群であるか否かを判断する。このビット列の場合、先頭４ビットが「１００１」であるため、フェッチバッファ１５５２に保持されているビット列の先頭ビットと４番目が圧縮命令であると判定される。２番目の命令は、先頭４ビットの後続にあるビット列「１  Ｂ３」と連結されて非圧縮命令となる。３番目の命令は、先頭４ビットの後続にあるビット列「０  ＮＯＰ」と連結されて非圧縮命令となる。
【０２１５】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタ１５５３を更新する。この場合、転送されるビット列は６６ビットであるため、プログラムカウンタ１５５３の値は、「２６４」となる。フェッチコントローラ１５５は、更新後のプログラムカウンタ１５５３の値「２６４」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。また、メモリアクセスユニット１５８において、命令コードＡ２〜Ｄ２が処理されると、コミットステージ外の処理（ライトバック）が行われる。
【０２１６】
つぎに、図５４において、デコーダ１５６では、１番目と４番目の圧縮命令について、上段命令バッファ１２、上段ＢＦＩレジスタ１３、上段命令カウンタ１４の値を用いて、元の命令Ａ４，Ｄ３に復元する。また、２番目と３番目の命令については、デコーダ１５６は、保存対象／非対象判別ビットを参照する。２番目の命令内の保存対象／非対象判別ビットが「１」であるため、デコーダ１５６は、上段命令バッファ１２、上段ＢＦＩレジスタ１３、上段命令カウンタ１４の値を更新する。
【０２１７】
また、３番目の命令内の保存対象／非対象判別ビットが「０」であるため、デコーダ１５６は、３番目の命令コードＮＯＰについては、上段命令バッファ１２、上段ＢＦＩレジスタ１３、上段命令カウンタ１４の値を更新しない。
【０２１８】
また、実行ユニット１５７は、命令コードＡ３，Ｆ，Ｃ３，ＮＯＰと中段復旧レジスタ１５４２の値をメモリアクセスユニット１５８に転送する。メモリアクセスユニット１５８は、下段復旧レジスタ１５４３を、中段復旧レジスタ１５４２の値に更新する。また、メモリアクセスユニット１５８は、転送されてきた命令コードのオペコードにしたがってデータＲＡＭ１５２にアクセスする。
【０２１９】
つぎに、図５５において、デコーダ１５６は、命令コードＡ３，Ｆ，Ｃ３，ＮＯＰと上段復旧レジスタ１５４１の値を実行ユニット１５７に転送する。そして、デコーダ１５６は、転送後に、上段命令カウンタ１４のうち圧縮命令に対応する１番目と４番目の値をそれぞれ１インクリメントする。実行ユニット１５７は、中段復旧レジスタ１５４２を、上段復旧レジスタ１５４１の値に更新する。また、実行ユニット１５７は、デコーダ１５６から転送されてきた命令コードＡ３，Ｆ，Ｃ３，ＮＯＰを、データレジスタ１５９やデータＲＡＭ１５２を参照することで実行する。
【０２２０】
このように、圧縮命令群列ｓｖｓをパイプライン処理することで、デコーダ１５６により圧縮命令群列ｓｖｓが復元される。したがって、プロセッサ１０２は、圧縮前の命令群列と同じ命令群を並列実行することができる。また、圧縮命令群列ｓｖｓには圧縮命令が含まれているため、命令ＲＡＭ１５１からのフェッチ回数が低減される。すなわち、命令ＲＡＭ１５１に対するメモリアクセス回数が低減するため、低消費電力化を図ることができる。
【０２２１】
（割り込みからの復旧）
つぎに、上述した図４３〜図５５の命令実行中に、割り込みが発生した場合の割り込みからの復旧処理について説明する。割り込みが発生した場合、プロセッサ１０２は、コミットステージ移行の処理（ライトバック、…）を完了させてから割り込み処理を実行する。この場合、プロセッサ１０２は、コミット前ステージの処理について、下段復旧レジスタ１５４３の値を、一時的に退避させて割り込み処理を実行させ、割り込み処理が終了すると、退避させた下段復旧レジスタ１５４３の値を用いて、コミット前ステージの処理を復旧する。以下、図５５の処理内容のときに割り込みが発生した場合について図５６〜図６４を用いて説明する。
【０２２２】
図５６〜図６４は、割り込みからの復旧処理を示す説明図である。プロセッサ１０２は、インターラプトコントローラ１５１０により、周辺モジュールやタイマにより割り込みの発生を検出すると、コントローラ１５３を介して、フェッチコントローラ１５５、デコーダ１５６、実行ユニット１５７、メモリアクセスユニット１５８に対し、割り込み信号を発行することになる。
【０２２３】
まず、図５６において、メモリアクセスユニット１５８は、割り込み信号を受信すると、下段復旧レジスタ１５４３の値やその他汎用レジスタ（不図示）の値を、データＲＡＭ１５２のスタック領域１５２０に退避させる。
【０２２４】
つぎに、図５７において、フェッチコントローラ１５５は、割り込み信号を受信すると、プリフェッチバッファ１５５１およびフェッチバッファ１５５２をクリアして、割り込み処理に備える。同様に、デコーダ１５６、実行ユニット１５７、メモリアクセスユニット１５８は、割り込み信号を受信すると、それぞれ上段復旧レジスタ１５４１、中段復旧レジスタ１５４２、および下段復旧レジスタ１５４３の値をクリアして、割り込み処理に備える。そして、プロセッサ１０２は、割り込み処理を実行する。
【０２２５】
つぎに、図５８において、デコーダ１５６は、インターラプトコントローラ１５１０およびコントローラ１５３を介して割り込み終了信号を受信すると、スタック領域１５２０に退避させた下段命令バッファ３２の値（命令コードＡ１，Ｆ，Ｃ１，Ｄ１）、下段ＢＦＩレジスタ３３の値（オペランドパターンＡ１−ＢＦＩ，Ｆ−ＢＦＩ，Ｃ１−ＢＦＩ，Ｄ１−ＢＦＩ）、下段命令カウンタ３４の値「２，１，２，２」を、上段命令バッファ１２の値、上段ＢＦＩレジスタ１３の値、上段命令カウンタ１４の値に設定する。また、フェッチコントローラ１５５は、再度プリフェッチバッファ１５５１およびフェッチバッファをクリアして、スタック領域１５２０に退避させた下段プログラムカウンタ３１の値「１９８」を読み込む。
【０２２６】
つぎに、図５９において、フェッチコントローラ１５５は、スタック領域１５２０から読み出した下段プログラムカウンタ３１の値「１９８」を、フェッチバッファのビット幅（１２８ビット）で割る。この場合、商が「１」、余りが「７０」となる。フェッチコントローラ１５５は、商「１」にフェッチバッファのビット幅（１２８ビット）を乗算することで、プリフェッチさせるビット位置を特定する。この場合、商「１」×１２８ビット＝１２８であるため、圧縮命令群列の先頭から１２８ビット目からのビット列、すなわち、命令ＲＡＭ１５１のアドレス０ｘＦ０１０のビット列をプリフェッチバッファ１５５１にプリフェッチする。そして、フェッチコントローラ１５５は、プログラムカウンタに、「１２８」を設定する。
【０２２７】
つぎに、図６０において、フェッチコントローラ１５５は、プリフェッチバッファ１５５１にプリフェッチされたビット列をフェッチバッファ１５５２にフェッチする。フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているビット列が非圧縮命令群であるか否かを判断する。このビット列の場合、先頭４ビットが「１１１１」であるため、先頭４ビットは、圧縮命令群であると判定される。この場合、フェッチコントローラ１５５は、フェッチバッファ１５５２内の先頭４ビット（＝１１１１）を、デコーダ１５６に転送する。
【０２２８】
また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタ１５５３を更新する。この場合、転送されるビット列は４ビットであるため、プログラムカウンタ１５５３の値は、「１３２」となる。この場合、スタック領域１５２０に退避させた下段プログラムカウンタ３１の値「１９８」と不一致であるため、フェッチコントローラ１５５は、更新後のプログラムカウンタの値「１３２」を、デコーダ１５６の上段プログラムカウンタ１１に転送しない。
【０２２９】
また、デコーダ１５６は、フェッチバッファ１５５２から圧縮命令群が転送されてくるが、プログラムカウンタ１５５３の値が転送されてこないため、圧縮命令群を破棄する。このように、フェッチコントローラ１５５のプログラムカウンタ１５５３の値と、スタック領域１５２０から読み出した下段プログラムカウンタ３１の値とが一致するまで、デコーダ１５６は、フェッチバッファ１５５２からのビット列を破棄する。これにより、誤ったビット位置で命令が復元されないことになる。
【０２３０】
つぎに、図６２において、フェッチコントローラ１５５は、図６１で４ビット転送したため、プリフェッチバッファ１５５１の先頭４ビットをフェッチする。このあと、フェッチコントローラ１５５は、フェッチバッファ１５５２にフェッチされているビット列が非圧縮命令であるか否かを判断する。このビット列の場合、先頭ビットと３番目のビットが「１」であるため、フェッチされているビット列の先頭ビットおよび３番目のビットは、圧縮命令と判定される。
【０２３１】
つぎに、図６３において、フェッチコントローラ１５５は、フェッチバッファ１５５２内の先頭６６ビットを、デコーダ１５６に転送する。また、フェッチコントローラ１５５は、転送ビット数分、プログラムカウンタ１５５３を更新する。この場合、転送されるビット列は６６ビットであるため、プログラムカウンタ１５５３の値は、「１９８」となる。この場合、スタック領域１５２０に退避させた下段プログラムカウンタ３１の値「１９８」と一致するため、フェッチコントローラ１５５は、更新後のプログラムカウンタの値「１９８」を、デコーダ１５６の上段プログラムカウンタ１１に転送する。
【０２３２】
つぎに、図６４において、デコーダ１５６は、フェッチバッファ１５５２からビット列およびプログラムカウンタ１５５３の値「１９８」が転送されてきたため、上段復旧レジスタ１５４１の値により、命令を復元する。これにより、割り込み発生時にメモリアクセスユニット１５８まで処理されていた命令コードＡ３，Ｃ３が復元される。これ以降の処理は、図５１〜図５５と同様に実行されることとなる。これにより、正確な復旧位置で命令群を復元することができる。
【０２３３】
このように、実施の形態２によれば、圧縮された命令を含む命令列／命令群列を復元しながら実行することができるため、命令ＲＡＭ１５１からのフェッチ回数が低減される。命令ＲＡＭ１５１からのフェッチ回数は、命令の圧縮率が高くなるほど、すなわち、圧縮命令数が多くなるほど元の命令列／命令群列よりも短くなる。たとえば、実施例３の場合、１回のフェッチで最大３２個の圧縮命令を取得することができるため、３２×３２個の非圧縮命令（１０２４ビット）を１回のメモリアクセスでフェッチしたことになる。
【０２３４】
また、実施例４の場合、１回のプリフェッチで最大３２個の圧縮命令群を取得することができるため、３２×３２個の非圧縮命令群（３２７６８ビット）を１回のメモリアクセスでフェッチしたことになる。したがって、命令ＲＡＭ１５１に対するアクセス回数が低減されるため、低消費電力化を図ることができる。
【０２３５】
また、コミット前ステージの各ステージにおいて後段ステージに移行する際、プロセッサ１０２は、復旧レジスタの値についてもパイプライン処理で後段ステージに引き渡している。このため、実行中に割り込みが発生した場合でも、コミット前ステージの最後段のメモリアクセスでの復旧レジスタの値を退避しておくことで、割り込み終了後に退避させた復旧レジスタの値で復旧することができる。このように、実行対象の命令列／命令群列が圧縮されていても、コミットステージに引き渡される前の命令を頭出しして命令フェッチから再実行することで、割り込み前の状態に復旧することができる。
【０２３６】
また、実施の形態２によれば、圧縮命令を復元する場合、辞書メモリなどの外部メモリにアクセスせず、プロセッサ１０２内部で復元するため、余分なメモリアクセスが不要となり、メモリアクセス回数が増加するとことはない。したがって、低消費電力化を図ることができる。また、同一オペコードが連続する場合にオペランドとなるレジスタ番号やメモリアドレスが連続番号としてコーディングされることを利用しているため、プログラマは命令コードの作成の際、同一オペコードが連続する場合にオペランドも規則的に変化するようにしておくことで、命令の高圧縮と実行時の低消費電力化を図ることができる。
【０２３７】
また、上述した実施の形態２では、命令コードの復元は、デコーダ１５６によるレジスタリードステージでおこなう例について説明したが、レジスタリードでの復元は、フェッチステージで行ってもよい。この場合、上段復旧レジスタ１５４およびオペランド更新部１６００は、フェッチコントローラ１５５に備えられ、レジスタリードステージでおこわなれる上段復旧レジスタ１５４へのデータ保持および読み出し、オペランド更新部１６００によるオペランド更新処理は、フェッチコントローラ１５５で実行されることとなる。そして、この場合、デコーダ１５６は、通常のデコード処理やデータレジスタからのリードをおこなうこととなる。
【０２３８】
以上説明したように、本実施の形態にかかるプロセッサ１０２によれば、メモリ内の圧縮された一連の命令を一度でフェッチすることで、メモリアクセス回数の低減化を図ることができるという効果を奏する。また、本実施の形態にかかる圧縮装置、圧縮方法、および圧縮プログラムによれば、プロセッサ１０２によるメモリアクセス回数の低減化を図るために、命令コード群の圧縮率の向上を図ることができるという効果を奏する。
【０２３９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２４０】
（付記１）オペコードが先行命令と同一でかつ前記先行命令とのオペランド間に連続性がある命令を圧縮したことを示す圧縮情報を含む圧縮命令列が記憶されているメモリにアクセス可能なプロセッサであって、
前記メモリから所定ビット列をフェッチして前記所定ビット列が非圧縮命令であるか否かを判断し、非圧縮命令である場合は、前記所定ビット列である非圧縮命令を転送し、前記非圧縮命令でない場合は、前記所定ビット列の先頭に位置する圧縮情報を転送するフェッチ部と、
前記フェッチ部から前記非圧縮命令が転送されてきた場合は、前記非圧縮命令の命令コードおよびそのオペランドパターンをバッファに保持して、オペコードが同一でかつオペランドが規則的に連続する連続回数を示す命令カウンタの値を初期値に設定する設定処理を実行し、前記圧縮情報が転送されてきた場合は、前記バッファに保持されている命令コードと前記命令カウンタの値と前記オペランドパターンとに基づいて元の命令コードに復元し、前記命令カウンタの値を更新する更新処理を実行するデコード部と、
を備えることを特徴とするプロセッサ。
【０２４１】
（付記２）前記デコード部は、
前記更新処理において、前記オペランドパターンに基づいて前記バッファに保持されている命令コードからオペランドを抽出し、抽出したオペランドを前記命令カウンタの値で更新することで元の命令コードに復元することを特徴とする付記１に記載のプロセッサ。
【０２４２】
（付記３）前記デコード部からの命令コードを実行する実行部と、
前記実行部による実行結果にしたがって前記メモリにアクセスするメモリアクセス部と、を備え、
前記フェッチ部は、
前記デコード部への転送ビット数によりプログラムカウンタの値を更新して、更新後のプログラムカウンタの値を前記デコード部に転送し、
前記デコード部は、
前記圧縮情報が転送されてきた場合は、前記更新処理による前記命令カウンタの更新前に、前記バッファに保持されている命令コードおよびそのオペランドパターンと前記命令カウンタの値と前記フェッチ部からのプログラムカウンタの値とを、前記実行部内のバッファに複写し、
前記実行部は、
前記デコード部から複写される前に、前記実行部内のバッファに複写された命令コードおよびそのオペランドパターンと命令カウンタの値と前記プログラムカウンタの値を、前記メモリアクセス部内のバッファに複写することを特徴とする付記１または２に記載のプロセッサ。
【０２４３】
（付記４）前記メモリアクセス部は、
割り込み処理が発生した場合、前記メモリアクセス部内のバッファに複写された命令コードおよびそのオペランドパターンと命令カウンタの値とプログラムカウンタの値とを退避させ、
前記フェッチ部は、
前記割り込み処理が終了した場合、前記退避させたプログラムカウンタの値に基づいて、前記割り込み発生時に前記メモリアクセス部での処理対象命令に対応するビット列をフェッチして、前記処理対象命令に対応するビット列が非圧縮命令であるか否かを判断し、非圧縮命令である場合は、前記処理対象命令に対応するビット列である非圧縮命令を転送し、前記非圧縮命令でない場合は、前記処理対象命令に対応するビット列の先頭に位置する圧縮情報を転送し、
前記デコード部は、
前記割り込み処理が終了した場合、前記退避させた命令コードおよびそのオペランドパターンと命令カウンタの値とを、前記デコード部内のバッファに複写することを特徴とする付記３に記載のプロセッサ。
【０２４４】
（付記５）オペコードが先行命令と同一でかつ前記先行命令とのオペランド間に連続性がある命令を圧縮したことを示す圧縮情報を含む圧縮命令群列が記憶されているメモリにアクセス可能なプロセッサであって、
前記メモリから所定ビット列をフェッチして前記所定ビット列における圧縮情報と非圧縮命令との組み合わせパターンを判断し、非圧縮命令については前記所定ビット列から非圧縮命令を特定して転送し、前記圧縮情報については前記圧縮情報を転送するフェッチ部と、
前記フェッチ部から前記非圧縮命令が転送されてきた場合は、前記非圧縮命令の命令コードおよびそのオペランドパターンをバッファに保持して、オペコードが同一でかつオペランドが規則的に連続する連続回数を示す命令カウンタの値を初期値に設定する設定処理を実行し、前記圧縮情報が転送されてきた場合は、前記バッファに保持されている命令コードと前記命令カウンタの値と前記オペランドパターンとに基づいて元の命令コードに復元し、前記命令カウンタの値を更新する更新処理を実行するデコード部と、
を備えることを特徴とするプロセッサ。
【０２４５】
（付記６）命令列のうち対象命令を取得し、
取得された対象命令のオペコードと前記対象命令の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記対象命令を圧縮する、
処理をコンピュータに実行させることを特徴とする圧縮プログラム。
【０２４６】
（付記７）前記圧縮する処理では、
同一かつ連続性ありと判断された場合、前記対象命令に、前記対象命令が圧縮されていることを示す圧縮情報を付与し、前記対象命令のオペコードおよびオペランドを削除することを特徴とする付記６に記載の圧縮プログラム。
【０２４７】
（付記８）前記判断工程によって同一かつ連続性ありでないと判断された場合、前記対象命令に、前記対象命令が圧縮されていないことを示す圧縮情報と、前記対象命令を保存すべき命令であることを示す保存情報と、を設定する処理を、前記コンピュータに実行させることを特徴とする付記６または７に記載の圧縮プログラム。
【０２４８】
（付記９）前記判断する処理では、
同一かつ連続性ありでないと判断された場合、前記対象命令のオペコードの種類に基づいて、前記対象命令を保存すべきか否かを判断し、
前記設定する処理では、
保存すべきと判断された場合、前記対象命令に、前記対象命令が圧縮されていないことを示す圧縮情報と、前記対象命令を保存すべき命令であることを示す保存情報と、を設定し、
保存すべきでないと判断された場合、前記対象命令に、前記対象命令が圧縮されていないことを示す圧縮情報と、前記対象命令を保存すべき命令でないことを示す保存情報と、を設定することを特徴とする付記８に記載の圧縮プログラム。
【０２４９】
（付記１０）命令群列の中の対象命令群から対象命令を取得し、
取得された対象命令のオペコードと前記対象命令群に先行する先行命令群のうち前記対象命令に対応する位置の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記対象命令を圧縮する、
処理をコンピュータに実行させることを特徴とする圧縮プログラム。
【０２５０】
（付記１１）前記圧縮する処理では、
同一かつ連続性ありと判断された場合、前記対象命令に、前記対象命令が圧縮されていることを示す圧縮情報を付与し、前記対象命令のオペコードおよびオペランドを削除することを特徴とする付記１０に記載の圧縮プログラム。
【０２５１】
（付記１２）同一かつ連続性ありでないと判断された場合、前記対象命令に、前記対象命令が圧縮されていないことを示す圧縮情報と、前記対象命令を保存すべき命令であることを示す保存情報と、を設定する処理を前記コンピュータに実行させることを特徴とする付記１０または１１に記載の圧縮プログラム。
【０２５２】
（付記１３）前記判断する処理では、
同一かつ連続性ありでないと判断された場合、前記対象命令のオペコードの種類に基づいて、前記対象命令を保存すべきか否かを判断し、
前記設定する処理では、
保存すべきと判断された場合、前記対象命令に、前記対象命令が圧縮されていないことを示す圧縮情報と、前記対象命令を保存すべき命令であることを示す保存情報と、を設定し、
保存すべきでないと判断された場合、前記対象命令に、前記対象命令が圧縮されていないことを示す圧縮情報と、前記対象命令を保存すべき命令でないことを示す保存情報と、を設定することを特徴とする付記１２に記載の圧縮プログラム。
【０２５３】
（付記１４）前記対象命令群の各対象命令から得られた圧縮情報群を保存するとともに、前記対象命令群のうち圧縮されずに前記保存情報が設定された非圧縮の対象命令を、前記圧縮情報群の後続に保存する処理を、前記コンピュータに実行させることを特徴とする付記１０〜１３のいずれか一つに記載の圧縮プログラム。
【０２５４】
（付記１５）前記保存する処理では、
前記対象命令群ごとに得られた保存結果群を連結することにより短縮化することを特徴とする付記１４に記載の圧縮プログラム。
【０２５５】
（付記１６）命令列のうち対象命令を取得する取得手段と、
前記取得手段によって取得された対象命令のオペコードと前記対象命令の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断する判断手段と、
前記判断手段によって同一かつ連続性ありと判断された場合、前記対象命令を圧縮する圧縮手段と、
を備えることを特徴とする圧縮装置。
【０２５６】
（付記１７）命令群列の中の対象命令群から対象命令を取得する取得手段と、
前記取得手段によって取得された対象命令のオペコードと前記対象命令群に先行する先行命令群のうち前記対象命令に対応する位置の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断する判断手段と、
前記判断手段によって同一かつ連続性ありと判断された場合、前記対象命令を圧縮する圧縮手段と、
を備えることを特徴とする圧縮装置。
【０２５７】
（付記１８）コンピュータが、
命令列のうち対象命令を取得し、
取得された対象命令のオペコードと前記対象命令の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記対象命令を圧縮する、
処理を実行することを特徴とする圧縮方法。
【０２５８】
（付記１９）コンピュータが、
命令群列の中の対象命令群から対象命令を取得し、
取得された対象命令のオペコードと前記対象命令群に先行する先行命令群のうち前記対象命令に対応する位置の先行命令のオペコードが同一であり、かつ、前記対象命令のオペランドと前記先行命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記対象命令を圧縮する、
処理を実行することを特徴とする圧縮方法。
【符号の説明】
【０２５９】
１０１  圧縮装置
１０２  プロセッサ
１５４  復旧レジスタ群
１５５  フェッチコントローラ
１５６  デコーダ
１５７  実行ユニット
１５８  メモリアクセスユニット
４０１，１００１  取得部
４０２，１００２  判断部
４０３，１００３  圧縮部
４０４，１００４  設定部
１００５  保存部
１６００  オペランド更新部
【図１】
0005770534.tif 000002
【図２】
0005770534.tif 000003
【図３】
0005770534.tif 000004
【図４】
0005770534.tif 000005
【図５】
0005770534.tif 000006
【図６】
0005770534.tif 000007
【図７】
0005770534.tif 000008
【図８】
0005770534.tif 000009
【図９】
0005770534.tif 000010
【図１０】
0005770534.tif 000011
【図１１】
0005770534.tif 000012
【図１２】
0005770534.tif 000013
【図１３】
0005770534.tif 000014
【図１４】
0005770534.tif 000015
【図１５】
0005770534.tif 000016
【図１６】
0005770534.tif 000017
【図１７】
0005770534.tif 000018
【図１８】
0005770534.tif 000019
【図１９】
0005770534.tif 000020
【図２０】
0005770534.tif 000021
【図２１】
0005770534.tif 000022
【図２２】
0005770534.tif 000023
【図２３】
0005770534.tif 000024
【図２４】
0005770534.tif 000025
【図２５】
0005770534.tif 000026
【図２６】
0005770534.tif 000027
【図２７】
0005770534.tif 000028
【図２８】
0005770534.tif 000029
【図２９】
0005770534.tif 000030
【図３０】
0005770534.tif 000031
【図３１】
0005770534.tif 000032
【図３２】
0005770534.tif 000033
【図３３】
0005770534.tif 000034
【図３４】
0005770534.tif 000035
【図３５】
0005770534.tif 000036
【図３６】
0005770534.tif 000037
【図３７】
0005770534.tif 000038
【図３８】
0005770534.tif 000039
【図３９】
0005770534.tif 000040
【図４０】
0005770534.tif 000041
【図４１】
0005770534.tif 000042
【図４２】
0005770534.tif 000043
【図４３】
0005770534.tif 000044
【図４４】
0005770534.tif 000045
【図４５】
0005770534.tif 000046
【図４６】
0005770534.tif 000047
【図４７】
0005770534.tif 000048
【図４８】
0005770534.tif 000049
【図４９】
0005770534.tif 000050
【図５０】
0005770534.tif 000051
【図５１】
0005770534.tif 000052
【図５２】
0005770534.tif 000053
【図５３】
0005770534.tif 000054
【図５４】
0005770534.tif 000055
【図５５】
0005770534.tif 000056
【図５６】
0005770534.tif 000057
【図５７】
0005770534.tif 000058
【図５８】
0005770534.tif 000059
【図５９】
0005770534.tif 000060
【図６０】
0005770534.tif 000061
【図６１】
0005770534.tif 000062
【図６２】
0005770534.tif 000063
【図６３】
0005770534.tif 000064
【図６４】
0005770534.tif 000065