(57)【要約】【課題】メモリ内の圧縮された一連の命令を一度でフェッチすることで、メモリアクセス回数の低減化を図ること。また、プロセッサによるメモリアクセス回数の低減化を図ること。【解決手段】圧縮装置１０１は、ＶＬＩＷ命令Ｖ内の命令ＩＳを、当該命令ＩＳとオペコードＯＣが同一かつオペランドＳＯ１，ＳＯ２，ＤＯに連続性があり、当該命令ＩＳの復元に使用される命令ＩＳの位置を示す圧縮命令ｃに変換する。これにより、圧縮装置１０１は、ＶＬＩＷ命令Ｖを、よりメモリサイズが小さい圧縮ＶＬＩＷ命令ｖに変換することができる。プロセッサ１０２は、圧縮装置１０１により生成された圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの示す位置の命令ＩＳから圧縮元である命令ＩＳを復元し、復元した命令ＩＳを実行することができる。これにより、プロセッサ１０２は、記憶装置へのアクセス回数を低減し、消費電力の低減化を図ることができる。【選択図】図１
2013257670.tif 000002
【特許請求の範囲】
【請求項１】
メモリにアクセス可能なプロセッサであって、
圧縮元であるＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令内の或る命令を圧縮した圧縮命令、前記ＶＬＩＷ命令内の非圧縮命令、および前記圧縮命令の前記ＶＬＩＷ命令内での位置を示す圧縮情報が含まれている圧縮ＶＬＩＷ命令列であって、前記圧縮命令が、前記或る命令から前記或る命令の復元に使用される命令の位置を示す情報に変換された命令であり、前記復元に使用される命令が、前記ＶＬＩＷ命令および前記ＶＬＩＷ命令の先行ＶＬＩＷ命令に含まれ、かつ、前記或る命令とオペコードが同一でかつ前記或る命令とのオペランド間に連続性がある命令である前記圧縮ＶＬＩＷ命令列を記憶する前記メモリから、或る圧縮ＶＬＩＷ命令をフェッチして、前記或る圧縮ＶＬＩＷ命令における圧縮情報に基づいて、前記或る圧縮ＶＬＩＷ命令の中から前記圧縮命令および前記非圧縮命令のうち少なくともいずれかを特定して、転送するフェッチ部と、
前記フェッチ部によって前記圧縮命令が転送された場合、前記或る圧縮ＶＬＩＷ命令および前記或る圧縮ＶＬＩＷ命令に先行する圧縮ＶＬＩＷ命令のうち少なくとも前記或る圧縮ＶＬＩＷ命令の中から、前記圧縮命令が示す位置に該当する命令を選択し、選択した命令のオペコードおよびオペランドの連続性に基づいて、前記或る命令を復元して、復元された前記或る命令および前記非圧縮命令を実行する実行部に転送するとともに、前記フェッチ部によって前記非圧縮命令が転送された場合、前記非圧縮命令を前記実行部に転送するデコード部と、
を有することを特徴とするプロセッサ。
【請求項２】
前記デコード部は、
前記ＶＬＩＷ命令内での各命令の位置に対応する命令バッファ群を有し、
前記フェッチ部によって前記圧縮命令が転送された場合、前記命令バッファ群のうち、復元された前記或る命令の位置に対応する命令バッファに、前記或る命令を保持するとともに、前記フェッチ部によって前記非圧縮命令が転送された場合、前記命令バッファ群のうち、前記非圧縮命令の位置に対応する命令バッファに前記非圧縮命令を保持し、
前記フェッチ部によって後続の圧縮ＶＬＩＷ命令がフェッチされ、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令が転送された場合、前記命令バッファ群に保持されたＶＬＩＷ命令と前記後続の圧縮ＶＬＩＷ命令との中から、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令が示す位置に該当する命令を選択し、選択した命令のオペコードおよびオペランドの連続性に基づいて、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令の圧縮元である命令を復元することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記デコード部は、
前記ＶＬＩＷ命令内での各命令の位置に対応する命令バッファ群を有し、
前記フェッチ部によって前記圧縮命令が転送された場合、前記命令バッファ群のうち、復元された前記或る命令の位置に対応する命令バッファに、前記或る命令の復元に使用した命令を保持するとともに、前記フェッチ部によって前記非圧縮命令が転送された場合、前記命令バッファ群のうち、前記非圧縮命令の位置に対応する命令バッファに前記非圧縮命令を保持し、
前記フェッチ部によって後続の圧縮ＶＬＩＷ命令がフェッチされ、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令が転送された場合、前記命令バッファ群に保持されたＶＬＩＷ命令と前記後続の圧縮ＶＬＩＷ命令との中から、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令が示す位置に該当する命令を選択し、選択した命令のオペコードおよびオペランドの連続性に基づいて、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令の圧縮元である命令を復元することを特徴とする請求項１に記載のプロセッサ。
【請求項４】
前記デコード部は、
前記ＶＬＩＷ命令内の各命令の位置に対応する命令カウンタ群を有し、
前記フェッチ部によって前記非圧縮命令が転送された場合、前記非圧縮命令の位置に対応する命令カウンタの値を初期値に設定し、前記フェッチ部によって前記圧縮命令が転送された場合、前記或る命令の位置に対応する命令カウンタの値を、前記選択した命令の位置に対応する命令カウンタの値に１を加算した加算後の値に更新することを特徴とする請求項３に記載のプロセッサ。
【請求項５】
コンピュータに、
ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令列の中の圧縮対象ＶＬＩＷ命令から圧縮対象命令を取得し、
前記圧縮対象ＶＬＩＷ命令および前記圧縮対象ＶＬＩＷ命令の先行ＶＬＩＷ命令のいずれかに含まれる前記圧縮対象命令以外のいずれかの命令のオペコードと前記圧縮対象命令のオペコードとが同一であり、かつ、前記いずれかの命令のオペランドと前記圧縮対象命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記圧縮対象命令を前記いずれかの命令の位置を示す圧縮命令に変換する、
処理を実行させることを特徴とする圧縮プログラム。
【請求項６】
前記変換する処理では、
同一かつ連続性ありと判断された場合、前記圧縮対象命令に、前記いずれかの命令が前記圧縮対象ＶＬＩＷ命令に含まれるか否かを示す第１の復元情報および前記いずれかの命令を含むＶＬＩＷ命令内の前記いずれかの命令の位置を示す第２の復元情報を含む圧縮命令と、前記圧縮対象命令が圧縮されていることを示す圧縮情報と、を付与し、前記圧縮対象命令のオペコードおよびオペランドを削除することを特徴とする請求項５に記載の圧縮プログラム。
【請求項７】
前記圧縮対象ＶＬＩＷ命令の各圧縮対象命令から得られた圧縮情報群の末尾に、前記圧縮対象ＶＬＩＷ命令のうち非圧縮命令と圧縮命令とを連結する、
処理を前記コンピュータに実行させることを特徴とする請求項５または６に記載の圧縮プログラム。
【請求項８】
ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令列の中の圧縮対象ＶＬＩＷ命令から圧縮対象命令を取得する取得部と、
前記圧縮対象ＶＬＩＷ命令および前記圧縮対象ＶＬＩＷ命令の先行ＶＬＩＷ命令のいずれかに含まれる前記圧縮対象命令以外のいずれかの命令のオペコードと前記取得部によって取得された圧縮対象命令のオペコードとが同一であり、かつ、前記いずれかの命令のオペランドと前記圧縮対象命令のオペランドとの間に連続性があるか否かを判断する判断部と、
前記判断部によって同一かつ連続性ありと判断された場合、前記圧縮対象命令を前記いずれかの命令の位置を示す圧縮命令に変換する変換部と、
を有することを特徴とする圧縮装置。
【請求項９】
コンピュータが、
ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令列の中の圧縮対象ＶＬＩＷ命令から圧縮対象命令を取得し、
前記圧縮対象ＶＬＩＷ命令および前記圧縮対象ＶＬＩＷ命令の先行ＶＬＩＷ命令のいずれかに含まれる前記圧縮対象命令以外のいずれかの命令のオペコードと前記圧縮対象命令のオペコードとが同一であり、かつ、前記いずれかの命令のオペランドと前記圧縮対象命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記圧縮対象命令を前記いずれかの命令の位置を示す圧縮命令に変換する、
処理を実行することを特徴とする圧縮方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ、圧縮装置、圧縮方法、および圧縮プログラムに関する。
【背景技術】
【０００２】
従来、複数の命令を含むＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令を読み込み、ＶＬＩＷ命令内の複数の命令を並列実行できるプロセッサがある。当該プロセッサは、家電製品などの電気機器に組み込まれ、組み込み機器として動作する場合がある。
【０００３】
ここで、組み込み機器になるプロセッサについて、運用コストや製造コストなどの各種コストの低減化が図られている。例えば、ＶＬＩＷ命令列を圧縮してメモリサイズを低減しておくことにより、プロセッサがＶＬＩＷ命令列をフェッチするために行う記憶装置へのアクセス回数を低減し、運用コストになる消費電力の低減化を図る場合がある。
【０００４】
ＶＬＩＷ命令列の圧縮技術として、ＶＬＩＷ命令列のうち、変換対象のＶＬＩＷ命令を、先行するＶＬＩＷ命令との差分を示す情報に変換して、ＶＬＩＷ命令列のメモリサイズを小さくする技術がある（例えば、下記特許文献１を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００２−５３３８０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術では、ＶＬＩＷ命令列内のＶＬＩＷ命令間の差分が大きい場合、ＶＬＩＷ命令列の圧縮効率が低くなる。ここで、１２８ビットのＶＬＩＷ命令「０ｘ  ０００１１１２１  ０００２１２２２  ０００３１３２３  ０００４２４３４」（３２ビットの命令を４つ含むＶＬＩＷ命令であり、便宜上、命令の区切りをスペースにより示す。）が変換対象のＶＬＩＷ命令である場合を例に挙げる。この場合、先行するＶＬＩＷ命令が「０ｘ  ０Ｆ０１１１２１  ０００２１２２２  ０００３１３２３  ０００４２４３４」であれば、差分は１２０ビットの「０ｘＦ００００００００００００００００００００００００００００００」になる。結果として、ＶＬＩＷ命令の圧縮効率が低くなる。
【０００７】
また、ＶＬＩＷ命令の圧縮効率が低い場合、プロセッサがＶＬＩＷ命令をフェッチするために行う記憶装置へのアクセス回数が低減されない場合がある。例えば、プロセッサのバス幅が１２８ビットであって、上述した変換対象のＶＬＩＷ命令と先行するＶＬＩＷ命令との２５６ビットのデータをフェッチする場合、プロセッサの記憶装置へのアクセス回数は２回になる。また、上述した差分と先行するＶＬＩＷ命令との合計２４８ビットのデータをフェッチする場合も、同様に、プロセッサの記憶装置へのアクセス回数は２回になる。結果として、圧縮前後において、プロセッサの記憶装置へのアクセス回数は低減されない。
【０００８】
本発明は、メモリ内の圧縮された一連の命令を一度でフェッチすることで、メモリアクセス回数の低減化を図ることを目的とする。また、プロセッサによるメモリアクセス回数の低減化を図ることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一側面によれば、メモリにアクセス可能なプロセッサであって、圧縮元であるＶＬＩＷ命令内の或る命令を圧縮した圧縮命令、ＶＬＩＷ命令内の非圧縮命令、および圧縮命令のＶＬＩＷ命令内での位置を示す圧縮情報が含まれている圧縮ＶＬＩＷ命令列であって、圧縮命令が、或る命令から或る命令の復元に使用される命令の位置を示す情報に変換された命令であり、復元に使用される命令が、ＶＬＩＷ命令およびＶＬＩＷ命令の先行ＶＬＩＷ命令に含まれ、かつ、或る命令とオペコードが同一でかつ或る命令とのオペランド間に連続性がある命令である圧縮ＶＬＩＷ命令列を記憶するメモリから、或る圧縮ＶＬＩＷ命令をフェッチして、或る圧縮ＶＬＩＷ命令における圧縮情報に基づいて、或る圧縮ＶＬＩＷ命令の中から圧縮命令および非圧縮命令のうち少なくともいずれかを特定して、デコード部に転送するフェッチ部と、フェッチ部によって圧縮命令が転送された場合、或る圧縮ＶＬＩＷ命令および或る圧縮ＶＬＩＷ命令に先行する圧縮ＶＬＩＷ命令のうち少なくとも或る圧縮ＶＬＩＷ命令の中から、圧縮命令が示す位置に該当する命令を選択し、選択した命令のオペコードおよびオペランドの連続性に基づいて、或る命令を復元して、復元された或る命令および非圧縮命令を実行する実行部に転送するとともに、フェッチ部によって非圧縮命令が転送された場合、非圧縮命令を実行部に転送するデコード部と、を有するプロセッサが提案される。
【００１０】
また、本発明の一側面によれば、ＶＬＩＷ命令列の中の圧縮対象ＶＬＩＷ命令から圧縮対象命令を取得し、圧縮対象ＶＬＩＷ命令および圧縮対象ＶＬＩＷ命令の先行ＶＬＩＷ命令のいずれかに含まれる圧縮対象命令以外のいずれかの命令のオペコードと圧縮対象命令のオペコードとが同一であり、かつ、いずれかの命令のオペランドと圧縮対象命令のオペランドとの間に連続性があるか否かを判断し、同一かつ連続性ありと判断された場合、圧縮対象命令をいずれかの命令の位置を示す圧縮命令に変換する圧縮装置、圧縮方法、および圧縮プログラムが提案される。
【発明の効果】
【００１１】
本発明の一側面によれば、メモリ内の圧縮された一連の命令を一度でフェッチすることで、メモリアクセス回数の低減化を図ることができる。また、プロセッサによるメモリアクセス回数の低減化を図ることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、ＶＬＩＷ命令列の圧縮とＶＬＩＷ命令列の実行との流れを示す説明図である。
【図２】図２は、ＶＬＩＷ命令Ｖの内容を示す説明図である。
【図３】図３は、実施の形態にかかる圧縮装置１０１のハードウェア構成例を示すブロック図である。
【図４】図４は、圧縮装置１０１の機能的構成例を示すブロック図である。
【図５】図５は、圧縮装置１０１による圧縮処理の具体例を示す説明図（その１）である。
【図６】図６は、圧縮装置１０１による圧縮処理の具体例を示す説明図（その２）である。
【図７】図７は、圧縮装置１０１によるＶＬＩＷ命令間圧縮処理の詳細な処理手順を示すフローチャートである。
【図８】図８は、圧縮装置１０１によるＶＬＩＷ命令間参照圧縮変換処理の詳細な処理手順を示すフローチャートである。
【図９】図９は、圧縮装置１０１によるＶＬＩＷ命令内圧縮処理の詳細な処理手順を示すフローチャートである。
【図１０】図１０は、圧縮装置１０１によるＶＬＩＷ命令内参照圧縮変換処理の詳細な処理手順を示すフローチャートである。
【図１１】図１１は、圧縮装置１０１による圧縮可能／不可能判定処理の詳細な処理手順を示すフローチャートである。
【図１２】図１２は、図１に示したプロセッサ１０２のハードウェア構成例を示すブロック図である。
【図１３】図１３は、プロセッサ１０２の詳細なハードウェア構成例を示す説明図である。
【図１４】図１４は、図１３におけるデコードユニット１３０１の一例を示すブロック図である。
【図１５】図１５は、図１４における命令合成ブロックの一例を示すブロック図である。
【図１６】図１６は、パイプライン処理例を示す説明図（その１）である。
【図１７】図１７は、パイプライン処理例を示す説明図（その２）である。
【図１８】図１８は、パイプライン処理例を示す説明図（その３）である。
【図１９】図１９は、パイプライン処理例を示す説明図（その４）である。
【図２０】図２０は、パイプライン処理例を示す説明図（その５）である。
【図２１】図２１は、図１６〜図２０に示した命令デコードステージにおけるスロット２の命令ＩＳに対するデコードユニット１３０１の動作を示す説明図である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、この発明にかかるプロセッサ、圧縮装置、圧縮方法、および圧縮プログラムの実施の形態を詳細に説明する。圧縮装置は、ＶＬＩＷ命令列を、インストールされている圧縮プログラムにより圧縮する。ＶＬＩＷ命令列とは、連続するＶＬＩＷ命令の集合であり、例えば、圧縮装置が有する記憶装置にアドレス順に格納されている。ＶＬＩＷ命令とは、並列実行される命令の集合である。
【００１４】
プロセッサは、圧縮装置により圧縮されたＶＬＩＷ命令列から、圧縮前のＶＬＩＷ命令列を復元する。そして、プロセッサは、複数の演算ユニットを有し、復元したＶＬＩＷ命令列のＶＬＩＷ命令ごとに、ＶＬＩＷ命令内の各命令を並列実行する。ここで、図１を用いて、ＶＬＩＷ命令列の圧縮とＶＬＩＷ命令列の実行との流れについて説明する。
【００１５】
図１は、ＶＬＩＷ命令列の圧縮とＶＬＩＷ命令列の実行との流れを示す説明図である。上述したように、圧縮装置１０１は、ＶＬＩＷ命令列Ｖｓを、インストールされている圧縮プログラムにより圧縮するコンピュータである。圧縮装置１０１として使用されるコンピュータのハードウェアについては、例えば、図３を用いて後述する。図１の例では、ＶＬＩＷ命令列Ｖｓは、ＶＬＩＷ命令Ｖ１，Ｖ２を含むとする。ここで、図２を用いて、ＶＬＩＷ命令Ｖの内容について説明する。
【００１６】
図２は、ＶＬＩＷ命令Ｖの内容を示す説明図である。ＶＬＩＷ命令Ｖは、プロセッサ１０２が有する複数の演算ユニットの各々に対応する記憶領域に分割されており、各々の記憶領域に命令が格納されている。ＶＬＩＷ命令Ｖに含まれる命令は、格納された記憶領域に対応する演算ユニットによって、各々、並列実行される。
【００１７】
図２の例では、ＶＬＩＷ命令Ｖは、４つの記憶領域に分割されており、４命令を含む。１命令は３２ビットである。１ＶＬＩＷ命令Ｖは、４命令を含むため、１２８ビットである。以降、複数の演算ユニットの各々に対応する記憶領域を「スロット」と称す。図２の例では、０番目〜３番目までのスロット０〜スロット３がある。また、ＶＬＩＷ命令Ｖの中のいずれかの命令を「命令ＩＳ」と称す。
【００１８】
ＶＬＩＷ命令Ｖの中の命令ＩＳは、オペコードＯＣとソースオペランドＳＯ１とソースオペランドＳＯ２とディスティネーションオペランドＤＯとが連結された情報である。命令ＩＳには、圧縮／非圧縮判定ビットが付加されている。図２の例では、ＶＬＩＷ命令Ｖ内の４命令分の圧縮／非圧縮判定ビットは、ＶＬＩＷ命令Ｖの先頭にまとめて付与されている。
【００１９】
ソースオペランドＳＯ１，ＳＯ２とは、命令ＩＳの引数、または引数を格納したアドレスを示す情報である。ディスティネーションオペランドＤＯとは、命令ＩＳの実行結果を格納するアドレスを示す情報である。
【００２０】
オペコードＯＣとは、命令ＩＳの内容を示す情報である。命令ＩＳの内容には、例えば、ソースオペランドＳＯ１が示す格納場所からデータを読み出してディスティネーションオペランドＤＯが示す格納場所に格納するＬＤ命令（ロード命令）がある。また、命令ＩＳの内容には、例えば、ソースオペランドＳＯ１，ＳＯ２の値を加算してディスティネーションオペランドＤＯが示す格納場所に格納するＡＤＤ命令（加算命令）がある。
【００２１】
また、オペコードＯＣによって、オペランドパターンは一意に判定される。オペランドパターンは、オペランドの種類を示す情報とオペランドの個数と先頭オペランドの開始位置を示す情報である。図２の例では、命令ＩＳ０のオペランドの種類はレジスタと即値である。また、ＬＤ命令はソースオペランドＳＯ２を使用しないため、オペランドの個数は２個である。また、先頭オペランドの開始位置は、命令ＩＳ０の先頭から８ビット目である。
【００２２】
圧縮／非圧縮判定ビットとは、対応する命令ＩＳが圧縮されているか否かを示す圧縮情報である。例えば、圧縮／非圧縮判定ビットが「１」のときは圧縮を示し、「０」のときは非圧縮を示す。圧縮前では、例えば、非圧縮（この例では「０」）とする。
【００２３】
図１に戻り、圧縮装置１０１は、或る２つの命令ＩＳ間において、オペコードＯＣが同一であり、かつ、オペランド間に連続性があるか否かを判定する。次に、圧縮装置１０１は、同一かつ連続性がある場合、当該連続性を用いることにより、２つの命令ＩＳのうち、一方の命令ＩＳを参照して、他方の命令ＩＳが復元可能になるように、他方の命令ＩＳを圧縮する。これにより、圧縮装置１０１は、ＶＬＩＷ命令列Ｖｓ内のいずれかの命令ＩＳを圧縮して当該命令ＩＳのメモリサイズを小さくすることにより、ＶＬＩＷ命令列Ｖｓのメモリサイズを小さくすることができる。
【００２４】
ここで、一方の命令ＩＳとは、例えば、２つの命令ＩＳのうち、アドレスが小さい方の命令ＩＳである。他方の命令ＩＳとは、例えば、２つの命令ＩＳのうち、アドレスが大きい方の命令ＩＳである。また、圧縮装置１０１により圧縮された命令ＩＳを「圧縮命令ｃ」と称し、圧縮命令ｃを含むＶＬＩＷ命令Ｖを「圧縮ＶＬＩＷ命令ｖ」と称し、圧縮ＶＬＩＷ命令ｖを含むＶＬＩＷ命令列Ｖｓを「圧縮ＶＬＩＷ命令列ｖｓ」と称す。圧縮ＶＬＩＷ命令ｖには、圧縮されていない命令ＩＳと、他の命令ＩＳを参照して復元可能な圧縮命令ｃと、が混在する。
【００２５】
図１の例では、命令ＩＳ０，ＩＳ２，ＩＳ５は、オペコードＯＣが同一でありオペランド間に連続性がある命令ＩＳとする。そのため、圧縮装置１０１は、例えば、命令ＩＳ２，ＩＳ５を圧縮し、圧縮命令ｃ１，ｃ３を生成する。また、命令ＩＳ１，ＩＳ４，ＩＳ６は、オペコードＯＣが同一でありオペランド間に連続性がある命令ＩＳとする。そのため、圧縮装置１０１は、例えば、命令ＩＳ４，ＩＳ６を圧縮し、圧縮命令ｃ２，ｃ４を生成する。また、命令ＩＳ３，ＩＳ７は、オペコードＯＣが同一でありオペランド間に連続性がある命令ＩＳとする。そのため、圧縮装置１０１は、例えば、命令ＩＳ７を圧縮し、圧縮命令ｃ５を生成する。
【００２６】
オペランド間に連続性がある命令ＩＳとしては、例えば、オペランドＳＯ１，ＳＯ２，ＤＯが「＋１」ずつ変化するＡＤＤ命令がある。圧縮命令ｃは、ＶＬＩＷ命令列Ｖｓ内における圧縮元である命令ＩＳの復元のために参照される命令ＩＳの位置を示す復元情報である。以降、圧縮元である命令ＩＳの復元のために参照される命令ＩＳを、「参照先命令ＩＳ」と称す。
【００２７】
圧縮命令ｃは、スロット特定ビットと同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットとを含む。スロット特定ビットとは、参照先命令ＩＳが格納されたスロットのスロット番号を示す復元情報である。例えば、スロット特定ビットが「００」のときはスロット番号０を示し、スロット特定ビットが「０１」のときはスロット番号１を示し、スロット特定ビットが「１０」のときはスロット番号２を示し、スロット特定ビットが「１１」のときはスロット番号３を示す。
【００２８】
同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットとは、参照先命令ＩＳが圧縮命令ｃと同一の圧縮ＶＬＩＷ命令ｖ内に存在するか否かを示す復元情報である。例えば、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットが「１」のときは参照先命令ＩＳが非同一ＶＬＩＷ命令Ｖ内に存在することを示し、「０」のときは参照先命令ＩＳが同一ＶＬＩＷ命令Ｖ内に存在することを示す。
【００２９】
例えば、圧縮命令ｃ１は、参照先命令ＩＳ０が圧縮命令ｃ１と同一の圧縮ＶＬＩＷ命令ｖ内のスロット０に存在するため、スロット特定ビット「００」と同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビット「０」とを含む。圧縮装置１０１によるＶＬＩＷ命令Ｖの圧縮の詳細については、図５および図６を用いて後述する。
【００３０】
プロセッサ１０２は、圧縮ＶＬＩＷ命令列ｖｓをフェッチし、フェッチした圧縮ＶＬＩＷ命令列ｖｓ内の各々の圧縮ＶＬＩＷ命令ｖを復元して、復元により得られたＶＬＩＷ命令Ｖを実行する。ここで、圧縮ＶＬＩＷ命令列ｖｓのメモリサイズが圧縮前のＶＬＩＷ命令列Ｖｓより小さくなっているため、プロセッサ１０２は、圧縮前のＶＬＩＷ命令列Ｖｓをフェッチするよりも、フェッチ回数を低減することができる。そして、プロセッサ１０２は、フェッチによるメモリアクセス回数を低減することにより、消費電力の低減化を図ることができる。プロセッサ１０２によるＶＬＩＷ命令Ｖの実行の詳細については、図１６〜図２１を用いて後述する。
【００３１】
プロセッサ１０２は、圧縮装置１０１内のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）でもよく、圧縮装置１０１とは異なるコンピュータのＣＰＵでもよい。また、プロセッサ１０２は、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）でもよい。プロセッサ１０２のハードウェアについては、例えば、図１２を用いて後述する。
【００３２】
（圧縮装置１０１のハードウェア構成例）
図３は、実施の形態にかかる圧縮装置１０１のハードウェア構成例を示すブロック図である。図３において、圧縮装置１０１は、ＣＰＵ３０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、磁気ディスクドライブ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）３０４と、磁気ディスク３０５と、光ディスクドライブ３０６と、光ディスク３０７と、ディスプレイ３０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０９と、キーボード３１０と、マウス３１１と、スキャナ３１２と、プリンタ３１３と、を備えている。また、各構成部はバス３００によってそれぞれ接続されている。
【００３３】
ここで、ＣＰＵ３０１は、圧縮装置１０１の全体の制御を司る。ＲＯＭ３０２は、圧縮プログラムやブートプログラムなどのプログラムを記憶している。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される。磁気ディスクドライブ３０４は、ＣＰＵ３０１の制御に従って磁気ディスク３０５に対するデータのリード／ライトを制御する。磁気ディスク３０５は、磁気ディスクドライブ３０４の制御で書き込まれたデータを記憶する。
【００３４】
光ディスクドライブ３０６は、ＣＰＵ３０１の制御に従って光ディスク３０７に対するデータのリード／ライトを制御する。光ディスク３０７は、光ディスクドライブ３０６の制御で書き込まれたデータを記憶したり、光ディスク３０７に記憶されたデータをコンピュータに読み取らせたりする。
【００３５】
ディスプレイ３０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ３０８は、例えば、液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３６】
インターフェース（以下、「Ｉ／Ｆ」と略する。）３０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク３１４に接続され、このネットワーク３１４を介して他の装置に接続される。そして、Ｉ／Ｆ３０９は、ネットワーク３１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ３０９には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００３７】
キーボード３１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス３１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３８】
スキャナ３１２は、画像を光学的に読み取り、圧縮装置１０１内に画像データを取り込む。なお、スキャナ３１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ３１３は、画像データや文書データを印刷する。プリンタ３１３には、例えば、レーザプリンタやインクジェットプリンタを採用することができる。なお、光ディスクドライブ３０６、光ディスク３０７、ディスプレイ３０８、キーボード３１０、マウス３１１、スキャナ３１２、およびプリンタ３１３の少なくともいずれか１つは、なくてもよい。
【００３９】
（圧縮装置１０１の機能的構成例）
次に、図４を用いて、圧縮装置１０１の機能的構成例について説明する。図４は、圧縮装置１０１の機能的構成例を示すブロック図である。圧縮装置１０１は、取得部４０１と、判断部４０２と、変換部４０３と、保存部４０４と、出力部４０５と、を含む。
【００４０】
取得部４０１と、判断部４０２と、変換部４０３と、保存部４０４と、出力部４０５とは、具体的には、例えば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶装置に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、Ｉ／Ｆ３０９により、その機能を実現する。
【００４１】
取得部４０１は、ＶＬＩＷ命令列Ｖｓの中の圧縮対象ＶＬＩＷ命令から圧縮対象命令を取得する。ここで、圧縮対象命令とは、オペコードＯＣとオペランドＳＯ１，ＳＯ２，ＤＯとのうち少なくともオペコードＯＣを含むデータであり、例えば、上述した命令ＩＳである。圧縮対象ＶＬＩＷ命令とは、並列実行される複数の命令ＩＳを含むデータであり、例えば、上述したＶＬＩＷ命令Ｖである。ＶＬＩＷ命令列とは、連続する複数のＶＬＩＷ命令Ｖを含むデータであり、例えば、上述したＶＬＩＷ命令列Ｖｓである。これにより、判断部４０２は、取得部４０１によって取得された命令ＩＳが圧縮可能か否かを判断することができる。
【００４２】
判断部４０２は、圧縮対象ＶＬＩＷ命令および圧縮対象ＶＬＩＷ命令の先行ＶＬＩＷ命令のいずれかの中から、圧縮対象命令以外のいずれかの命令ＩＳを特定する。次に、判断部４０２は、特定した命令ＩＳのオペコードＯＣと圧縮対象命令のオペコードＯＣとが同一であり、かつ、特定した命令ＩＳのオペランドＳＯ１，ＳＯ２，ＤＯと圧縮対象命令のオペランドＳＯ１，ＳＯ２，ＤＯとの間に連続性があるか否かを判断する。
【００４３】
ここで、いずれかの命令ＩＳとは、圧縮対象命令の１つ前のＶＬＩＷ命令に含まれるＩＳあるいは同一ＶＬＩＷ命令の先行スロットの命令ＩＳであり、上述した参照先命令ＩＳの候補になる命令ＩＳである。
【００４４】
図１の例では、圧縮対象命令が命令ＩＳ０の場合、参照先命令ＩＳの候補は存在しない。また、圧縮対象命令が命令ＩＳ４であれば、参照先命令ＩＳの候補は命令ＩＳ０〜ＩＳ３である。また、圧縮対象命令が命令ＩＳ７であれば、参照先命令ＩＳの候補は命令ＩＳ０〜ＩＳ６である。オペランド間に連続性があるとは、同種のオペランドが規則的に変化している状態である。
【００４５】
判断部４０２は、具体的には、例えば、圧縮対象命令と特定した命令ＩＳとでオペコードが同一である場合、オペランドの値が連続していれば、連続性ありと判断する。また、判断部４０２は、圧縮対象命令と特定した命令ＩＳとでオペコードが同一でない場合、オペランドの値の参照結果に関わらず、連続性なしと判断する。
【００４６】
判断部４０２は、より具体的には、図１の例では、命令ＩＳ４と１つ前のＶＬＩＷ命令Ｖ１の各命令ＩＳと、を比較する。ここで、判断部４０２は、圧縮対象命令になる命令ＩＳ４と命令ＩＳ１とのオペコードＯＣが同一、かつ、オペランド間に連続性ありと判断する。換言すれば、判断部４０２は、命令ＩＳ４を圧縮する場合、命令ＩＳ１が参照先命令ＩＳとして使用できると判断する。
【００４７】
オペランド間に連続性があるとは、例えば、命令ＩＳ１，ＩＳ４がともにＡＤＤ命令であり、命令ＩＳ４のオペランドＳＯ１，ＳＯ２，ＤＯが、命令ＩＳ１のオペランドＳＯ１，ＳＯ２，ＤＯに、ＡＤＤ命令の規定値「１，１，１」の各々を加算した値になることである。命令ＩＳの種類ごとの規定値は、例えば、上述したＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶領域に記憶されているとする。
【００４８】
判断結果は、例えば、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶領域に記憶される。これにより、変換部４０３は、判断部４０２によって同一かつ連続性ありと判断された場合、圧縮対象命令が圧縮可能であるとして、圧縮対象命令を圧縮することができる。
【００４９】
変換部４０３は、判断部４０２によって同一かつ連続性ありと判断された場合、圧縮対象命令をいずれかの命令ＩＳの位置を示す圧縮命令ｃに変換する。ここで、いずれかの命令ＩＳとは、判断部４０２によって同一かつ連続性ありと判断された命令ＩＳであり、上述した参照先命令ＩＳである。
【００５０】
変換部４０３は、具体的には、例えば、判断部４０２によって同一かつ連続性ありと判断された場合、圧縮対象命令に、圧縮対象命令が圧縮されていることを示す圧縮情報を付与する。次に、変換部４０３は、圧縮対象命令に、いずれかの命令ＩＳが圧縮対象ＶＬＩＷ命令に含まれるか否かを示す第１の復元情報およびいずれかの命令ＩＳを含むＶＬＩＷ命令Ｖ内のいずれかの命令ＩＳの位置を示す第２の復元情報を含む圧縮命令ｃを付与する。そして、変換部４０３は、圧縮対象命令のオペコードＯＣおよびオペランドＳＯ１，ＳＯ２，ＤＯを削除する。
【００５１】
ここで、圧縮情報とは、圧縮対象命令が圧縮されていることを示す情報であり、上述した圧縮／非圧縮判定ビットである。例えば、圧縮／非圧縮判定ビットが「１」のときは圧縮を示し、「０」のときは非圧縮を示す。
【００５２】
第１の復元情報とは、参照先命令ＩＳが圧縮命令ｃと同一の圧縮ＶＬＩＷ命令ｖ内に存在するか否かを示す情報であり、上述した同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットである。例えば、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットが「１」のときは参照先命令ＩＳが非同一ＶＬＩＷ命令Ｖ内に存在することを示し、「０」のときは参照先命令ＩＳが同一ＶＬＩＷ命令Ｖ内に存在することを示す。
【００５３】
第２の復元情報とは、参照先命令ＩＳが格納されたスロットのスロット番号を示す情報であり、上述したスロット特定ビットである。例えば、スロット特定ビットが「００」のときはスロット番号０を示し、スロット特定ビットが「０１」のときはスロット番号１を示し、スロット特定ビットが「１０」のときはスロット番号２を示し、スロット特定ビットが「１１」のときはスロット番号３を示す。
【００５４】
変換部４０３は、より具体的には、図１の例では、作業バッファに格納された圧縮対象命令になる命令ＩＳ４のオペコードＯＣとオペランドを削除する。次に、変換部４０３は、作業バッファに圧縮されたことを示す圧縮／非圧縮判定ビット「１」を格納する。そして、変換部４０３は、参照先命令ＩＳ１が格納されたスロットのスロット番号が「１」のため、スロット特定ビット「０１」を、作業バッファに格納する。
【００５５】
次に、変換部４０３は、参照先命令ＩＳ１が圧縮対象命令になる命令ＩＳ４と非同一のＶＬＩＷ命令Ｖ内にあるため、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビット「１」を、作業バッファに格納する。結果として、変換部４０３は、３２ビットの圧縮対象命令になる命令ＩＳ４を４ビットの圧縮命令ｃ２「１０１１」に変換する。
【００５６】
変換されたデータは、例えば、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶領域に記憶される。これにより、変換部４０３は、圧縮対象命令を４ビットデータに変換することができる。
【００５７】
保存部４０４は、圧縮対象ＶＬＩＷ命令の各圧縮対象命令から得られた圧縮情報群の末尾に、圧縮対象ＶＬＩＷ命令のうち非圧縮命令ＩＳと圧縮命令ｃとを連結する。非圧縮命令ＩＳとは、作業バッファに格納されたが変換部４０３によって変換されなかった命令ＩＳである。
【００５８】
保存部４０４は、具体的には、例えば、出力バッファに圧縮ＶＬＩＷ命令列ｖｓの領域を確保しておく。出力バッファは、例えば、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶領域に存在する。次に、保存部４０４は、変換部４０３によって変換された圧縮／非圧縮判定ビット「１」が付与された圧縮命令ｃ、または作業バッファに格納された圧縮／非圧縮判定ビット「０」が付与された非圧縮命令ＩＳを、出力バッファに格納する。
【００５９】
ここで、保存部４０４は、ＶＬＩＷ命令Ｖ内の各命令ＩＳの圧縮／非圧縮判定ビットを先頭にまとめて格納し、後続に圧縮命令ｃや非圧縮命令ＩＳを格納してもよい。これにより、保存部４０４は、圧縮ＶＬＩＷ命令列ｖｓの短縮化を図ることができる。
【００６０】
出力部４０５は、出力バッファに格納された圧縮ＶＬＩＷ命令列ｖｓを出力する。出力形式としては、例えば、ディスプレイ３０８への表示、プリンタ３１３への印刷出力、Ｉ／Ｆ３０９によるプロセッサ１０２への送信がある。また、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶領域に記憶することとしてもよい。
【００６１】
これにより、圧縮装置１０１の利用者は、出力された圧縮ＶＬＩＷ命令列ｖｓを記憶させたプロセッサ１０２を製造することができる。また、プロセッサ１０２が製造済みであれば、圧縮装置１０１の利用者は、出力された圧縮ＶＬＩＷ命令列ｖｓを、プロセッサ１０２に入力することができる。また、プロセッサ１０２は、実行する圧縮ＶＬＩＷ命令列ｖｓを取得することができる。
【００６２】
また、ここでは、参照先命令ＩＳの候補は、圧縮対象命令と同一のＶＬＩＷ命令Ｖ内の圧縮対象命令より前のスロット命令ＩＳとしたが、これに限らない。例えば、参照先命令ＩＳの候補は、圧縮対象命令と同一のＶＬＩＷ命令Ｖ内の圧縮対象命令より格納先アドレスが大きい命令ＩＳであってもよい。具体的には、例えば、スロット０の命令ＩＳが圧縮対象命令である場合、スロット１〜３の命令ＩＳを参照先命令ＩＳの候補にしてもよい。この場合、プロセッサ１０２は、或るスロット番号のスロットの圧縮命令ｃを復元するために、或るスロット番号より大きいスロット番号のスロットの圧縮命令ｃまたは非圧縮命令ＩＳを参照する。
【００６３】
・実施の形態１
次に、実施の形態１について説明する。実施の形態１では、図１に示した命令圧縮について説明する。実施の形態１では、図１に示した圧縮装置１０１が、ＶＬＩＷ命令列Ｖｓを読み込む。
【００６４】
圧縮装置１０１は、具体的には、例えば、プログラムのソースコードに対して、コンパイル（Ｃｏｍｐｉｌｅ）処理を実行する。圧縮装置１０１は、コンパイル処理において、プログラムのソースコードを読み込み、ソースコードを解析して、機械語に直接対応するアセンブリ表現のコードを生成する。以降、アセンブリ表現のコードを、「アセンブリコード」と称す。
【００６５】
次に、圧縮装置１０１は、アセンブリ（Ａｓｓｅｍｂｌｙ）処理を実行する。圧縮装置１０１は、アセンブリ処理において、構文解析（Ｓｙｎｔａｘ  Ａｎａｌｙｓｉｓ）を行い、アセンブリコードを解析する。次に、圧縮装置１０１は、フロー解析（Ｆｌｏｗ  Ａｎａｌｙｓｉｓ）を行い、プログラムの実行経路（フロー）の分岐と合流を解析する。これにより、圧縮装置１０１は、プログラムのどの部分で分岐が発生し、プログラムのどの部分で合流するのかを解析する。そして、圧縮装置１０１は、分岐と合流が発生しない基本ブロック（Ｂａｓｉｃ  Ｂｌｏｃｋ）となるＶＬＩＷ命令Ｖを生成する。
【００６６】
次に、圧縮装置１０１は、生成された基本ブロックとなるＶＬＩＷ命令Ｖを一つずつ読み込み、参照先命令ＩＳを参照して復元できるように、ＶＬＩＷ命令列Ｖｓの命令ＩＳを圧縮していく。このように、圧縮装置１０１は、命令ＩＳを圧縮することにより、ＶＬＩＷ命令列Ｖｓのメモリサイズを小さくすることができる。
【００６７】
また、圧縮装置１０１の利用者は、プロセッサ１０２が有するＶＬＩＷ命令列Ｖｓの格納に使用される記憶装置（例えば、図１２に後述する命令メモリ１２０１）に、物理的サイズが小さい記憶装置を採用することができ、消費電力の低減化を図ることができる。また、プロセッサ１０２は、圧縮ＶＬＩＷ命令列ｖｓをフェッチすることで、圧縮されていないＶＬＩＷ命令列Ｖｓをフェッチする場合に比べて、フェッチ回数、すなわち、メモリアクセス回数が低減されるため、消費電力の低減化を図ることができる。
【００６８】
（圧縮処理の具体例）
次に、図５および図６を用いて、圧縮装置１０１による圧縮処理の具体例について説明する。圧縮処理は、基本ブロックとなるＶＬＩＷ命令Ｖの中の命令ＩＳを圧縮する処理である。
【００６９】
図５および図６は、圧縮装置１０１による圧縮処理の具体例を示す説明図である。まず、図５に、圧縮の対象になるＶＬＩＷ命令列Ｖｓを示す。図５（Ａ）の例では、ＶＬＩＷ命令列Ｖｓは、４つのＶＬＩＷ命令Ｖ１〜Ｖ４を含む。ＶＬＩＷ命令Ｖ１〜Ｖ４は、アセンブリ処理により生成された分岐や合流が発生しない基本ブロックとなる命令ＩＳの集合であり、各々、４命令ＩＳを含む。
【００７０】
図５（Ａ）の例では、１命令ＩＳは、３２ビットとする。また、１ＶＬＩＷ命令Ｖは、４命令ＩＳを含むため、１２８ビットとする。ＶＬＩＷ命令列Ｖｓは、ＶＬＩＷ命令Ｖ１〜Ｖ４を含むため、５１２ビットとする。各命令ＩＳに関する圧縮／非圧縮判定ビットは、ＶＬＩＷ命令Ｖの先頭にまとめられている。
【００７１】
また、図５（Ｂ）に示すように、ＶＬＩＷ命令Ｖは、図５（Ａ）に示した各命令ＩＳの圧縮／非圧縮判定ビットを、ＶＬＩＷ命令Ｖの各命令ＩＳの先頭に付与したものであってもよい。命令ＩＳとしては、例えば、ＮＯＰ命令、ＬＤ命令、ＡＤＤ命令、ＡＤＤ−Ｉ命令、および、ＣＭＰ命令が挙げられる。
【００７２】
ＮＯＰ命令は、処理を行わないことを示す命令ＩＳである。ＮＯＰ命令におけるオペランドＳＯ１，ＳＯ２，ＤＯの連続性とは、例えば、オペランドＳＯ１，ＳＯ２，ＤＯが変化しないこと（ＮＯＰ命令ではオペランドＳＯ１，ＳＯ２，ＤＯを使用しないため）である。
【００７３】
また、ＬＤ命令は、ソースオペランドＳＯ１により指定されるアドレスの内容を読み込んで、ディスティネーションオペランドＤＯにより指定されるアドレスに格納する命令ＩＳである。ＬＤ命令におけるオペランドＳＯ１，ＳＯ２，ＤＯの連続性とは、例えば、ソースオペランドＳＯ１，ディスティネーションオペランドＤＯが「＋１」ずつ変化し、ソースオペランドＳＯ２が変化しないことである。
【００７４】
また、ＡＤＤ命令は、ソースオペランドＳＯ１とソースオペランドＳＯ２により指定されるアドレスの内容を加算し、ディスティネーションオペランドＤＯにより指定されるアドレスに格納する命令ＩＳである。ＡＤＤ命令におけるオペランドＳＯ１，ＳＯ２，ＤＯの連続性とは、例えば、オペランドＳＯ１，ＳＯ２，ＤＯが「＋１」ずつ変化することである。
【００７５】
また、ＡＤＤ−Ｉ命令は、ソースオペランドＳＯ１の即値とソースオペランドＳＯ２により指定されるアドレスの内容を加算し、ディスティネーションオペランドＤＯにより指定されるアドレスに格納する命令ＩＳである。ＡＤＤ−Ｉ命令におけるオペランドＳＯ１，ＳＯ２，ＤＯの連続性とは、例えば、ソースオペランドＳＯ１が変化せず、ソースオペランドＳＯ２，ディスティネーションオペランドＤＯが「＋１」ずつ変化することである。
【００７６】
また、ＣＭＰ命令は、ソースオペランドＳＯ１とソースオペランドＳＯ２により指定されるアドレスに格納された内容を比較する命令ＩＳである。ＣＭＰ命令は、比較した内容が等しければ「０」を、比較した内容が等しくなければ「１」を、ディスティネーションオペランドＤＯにより指定されるアドレスに格納する命令ＩＳである。ＣＭＰ命令におけるオペランドＳＯ１，ＳＯ２，ＤＯの連続性とは、例えば、オペランドＳＯ１，ＳＯ２，ＤＯが「＋１」ずつ変化することである。
【００７７】
そのほか、命令ＩＳとしては、ＨＡＬＴ，ＲＥＴ，ＲＦＥ，ＥＸＴＷなどがある。これらの連続性がある命令ＩＳのオペランドＳＯ１，ＳＯ２，ＤＯの変化量は、例えば、命令ＩＳの種類ごとの規定値として、上述したＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶領域に記憶される。
【００７８】
ここでは、オペランドＳＯ１，ＳＯ２，ＤＯの変化量として「０」または「＋１」を挙げたが、これに限らない。オペランドＳＯ１，ＳＯ２，ＤＯは２以上ずつ増加してもよい。また、オペランドＳＯ１，ＳＯ２，ＤＯは減少してもよい。
【００７９】
次に、図６に、図５（Ａ）に示したＶＬＩＷ命令列Ｖｓの圧縮装置１０１による圧縮の詳細を示す。図６（Ａ）は図５（Ａ）に示した圧縮前のＶＬＩＷ命令列Ｖｓ、図６（Ｂ）は圧縮後のＶＬＩＷ命令列ｖｓ、図６（Ｃ）は短縮化後の圧縮ＶＬＩＷ命令列ｓｖｓである。
【００８０】
図６（Ａ）において、まず、圧縮装置１０１は、アドレス０ｘ００００のＶＬＩＷ命令Ｖ１を読み込み、ＶＬＩＷ命令Ｖ１をデコードして、命令ＩＳ０〜ＩＳ３を読み込む。そして、圧縮装置１０１は、ＶＬＩＷ命令Ｖ１の圧縮処理を開始する。ここで、デコードとは、ＶＬＩＷ命令Ｖから、ＶＬＩＷ命令Ｖに含まれる命令ＩＳを取り出すことをいう。圧縮装置１０１は、具体的には、例えば、ＶＬＩＷ命令Ｖ１の先頭４ビットの圧縮／非圧縮判定ビット群を用いてＶＬＩＷ命令Ｖ１の各命令ＩＳが非圧縮と判定し、後続の７ビットずつの命令ＩＳを取り出す。
【００８１】
ここで、命令ＩＳ０について、命令ＩＳ０の参照先命令ＩＳの候補が存在しないため、命令ＩＳ０の復元に使用できる参照先命令ＩＳは存在しない。そのため、圧縮装置１０１は、命令ＩＳ０が圧縮できないと判定し、図６（Ｂ）に示すように、命令ＩＳ０の圧縮／非圧縮判定ビットに「０」を設定する。換言すれば、圧縮装置１０１は、命令ＩＳ０を圧縮しない。
【００８２】
また、命令ＩＳ１について、命令ＩＳ１の参照先命令ＩＳの候補になる命令ＩＳ０が存在するが、命令ＩＳ１と命令ＩＳ０とはオペコードＯＣが非同一である。そのため、圧縮装置１０１は、後続の命令ＩＳ１が圧縮できないと判定し、図６（Ｂ）に示すように、命令ＩＳ１の圧縮／非圧縮判定ビットに「０」を設定する。換言すれば、圧縮装置１０１は、命令ＩＳ１を圧縮しない。
【００８３】
また、命令ＩＳ２について、命令ＩＳ２の参照先命令ＩＳの候補になる命令ＩＳ０，ＩＳ１が存在し、命令ＩＳ２と命令ＩＳ０とのオペコードＯＣが同一であり、かつオペランドに連続性がある。そのため、圧縮装置１０１は、命令ＩＳ２と同一ＶＬＩＷ命令Ｖ内に存在する命令ＩＳ０を参照先命令ＩＳにして、命令ＩＳ２を圧縮できると判定する。
【００８４】
ここで、圧縮装置１０１は、図６（Ｂ）に示すように、命令ＩＳ２の圧縮／非圧縮判定ビットに「１」を設定する。そして、圧縮装置１０１は、スロット特定ビットに参照先命令ＩＳ０のスロット番号０を示す「００」を設定し、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットに参照先命令ＩＳ０が命令ＩＳ２と同一のＶＬＩＷ命令Ｖ内に存在することを示す「０」を設定する。換言すれば、圧縮装置１０１は、３２ビットの命令ＩＳ２を、４ビットの圧縮命令ｃ「１０００」にする。
【００８５】
また、命令ＩＳ３について、圧縮装置１０１は、命令ＩＳ１と同様に、圧縮できないと判定して圧縮／非圧縮判定ビットに「０」を設定する。換言すれば、圧縮装置１０１は、命令ＩＳ３を圧縮しない。次に、圧縮装置１０１は、アドレス０ｘ００００のＶＬＩＷ命令Ｖ１の圧縮処理が終了すると、次のアドレス０ｘ００８０のＶＬＩＷ命令Ｖ２を読み込み、ＶＬＩＷ命令Ｖ２をデコードして、命令ＩＳ４〜ＩＳ７を読み込む。そして、圧縮装置１０１は、ＶＬＩＷ命令Ｖ２の圧縮処理を開始する。
【００８６】
ここで、命令ＩＳ４について、命令ＩＳ４の参照先命令ＩＳの候補になる命令ＩＳ０〜ＩＳ３が存在し、命令ＩＳ４と命令ＩＳ１とのオペコードＯＣが同一であり、かつオペランドに連続性がある。そのため、圧縮装置１０１は、命令ＩＳ４と非同一のＶＬＩＷ命令Ｖ内に存在する命令ＩＳ１を参照先命令ＩＳにして、命令ＩＳ４を圧縮できると判定する。
【００８７】
ここで、圧縮装置１０１は、図６（Ｂ）に示すように、命令ＩＳ４の圧縮／非圧縮判定ビットに「１」を設定する。そして、圧縮装置１０１は、スロット特定ビットに参照先命令ＩＳ１のスロット番号１を示す「０１」を設定し、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットに参照先命令ＩＳ１が命令ＩＳ２と非同一のＶＬＩＷ命令Ｖ内に存在することを示す「１」を設定する。換言すれば、圧縮装置１０１は、３２ビットの命令ＩＳ４を、４ビットの圧縮命令ｃ「１０１１」にする。
【００８８】
また、命令ＩＳ５について、圧縮装置１０１は、命令ＩＳ４と同様に、命令ＩＳ５と非同一のＶＬＩＷ命令Ｖ内に存在する命令ＩＳ２を参照先命令ＩＳにして、命令ＩＳ５を圧縮できると判定する。ここで、圧縮装置１０１は、図６（Ｂ）に示すように、命令ＩＳ５の圧縮／非圧縮判定ビットに「１」を設定し、スロット特定ビットに「１０」を設定し、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットに「１」を設定する。換言すれば、圧縮装置１０１は、３２ビットの命令ＩＳ５を、４ビットの圧縮命令ｃ「１１０１」にする。
【００８９】
また、命令ＩＳ６について、圧縮装置１０１は、命令ＩＳ２と同様に、命令ＩＳ６と同一ＶＬＩＷ命令Ｖ内に存在する命令ＩＳ４を参照先命令ＩＳにして、命令ＩＳ６を圧縮できると判定する。次に、圧縮装置１０１は、図６（Ｂ）に示すように、命令ＩＳ６の圧縮／非圧縮判定ビットに「１」を設定し、スロット特定ビットに「００」を設定し、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットに「０」を設定する。換言すれば、圧縮装置１０１は、３２ビットの命令ＩＳ６を、４ビットの圧縮命令ｃ「１０００」にする。
【００９０】
また、命令ＩＳ７について、圧縮装置１０１は、命令ＩＳ４と同様に、命令ＩＳ７と非同一のＶＬＩＷ命令Ｖ内に存在する命令ＩＳ３を参照先命令ＩＳにして、命令ＩＳ７を圧縮できると判定する。次に、圧縮装置１０１は、図６（Ｂ）に示すように、命令ＩＳ７の圧縮／非圧縮判定ビットに「１」を設定し、スロット特定ビットに「１１」を設定し、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットに「１」を設定する。換言すれば、圧縮装置１０１は、３２ビットの命令ＩＳ７を、４ビットの圧縮命令ｃ「１１１１」にする。
【００９１】
以降、圧縮装置１０１は、ＶＬＩＷ命令Ｖ１，Ｖ２と同様にして、ＶＬＩＷ命令Ｖ３，Ｖ４の圧縮処理を実行する。これにより、圧縮装置１０１は、ＶＬＩＷ命令列Ｖｓを圧縮することができる。
【００９２】
また、図６（Ｂ）の状態から図６（Ｃ）の状態に短縮することにより、５１２ビットのＶＬＩＷ命令列は、１７６ビットの短縮化された圧縮ＶＬＩＷ命令列ｓｖｓになる。そのため、圧縮装置１０１は、１７６ビットの短縮化された圧縮ＶＬＩＷ命令列ｓｖｓを、アドレス０ｘ００００から０ｘ００ＦＦまでに格納することができる。結果として、アドレス０ｘ０１００以降は空き領域になる。
【００９３】
その後、圧縮装置１０１は、例えば、プロセッサ１０２に圧縮ＶＬＩＷ命令列ｖｓを入力する。ここで、圧縮装置１０１は、例えば、圧縮ＶＬＩＷ命令列ｖｓをプロセッサ１０２が実行可能なオブジェクトコードに変換しておいてもよい。これにより、プロセッサ１０２は、実行する圧縮ＶＬＩＷ命令列ｖｓを取得することができる。
【００９４】
ここで、プロセッサ１０２のバス幅が１２８ビットであるとする。バス幅とは、プロセッサ１０２が有する記憶装置からプロセッサ１０２が一度に読み込めるビット長である。そのため、図６（Ａ）に示した５１２ビットのＶＬＩＷ命令列Ｖｓが記憶装置に格納されている場合、プロセッサ１０２は、５１２ビット／１２８ビット＝４であるから、ＶＬＩＷ命令列Ｖｓの読み込みに４回のメモリアクセスを行うことになる。
【００９５】
一方、図６（Ｃ）に示した１７６ビットの短縮化された圧縮ＶＬＩＷ命令列ｓｖｓが記憶装置に格納されている場合、プロセッサ１０２は、１７６ビット／１２８ビット＝約１．３であるから、短縮化された圧縮ＶＬＩＷ命令列ｓｖｓの読み込みに２回のメモリアクセスを行うことになる。このように、プロセッサ１０２は、メモリアクセス回数を低減化し、消費電力の低減化を図ることができる。
【００９６】
また、圧縮装置１０１は、圧縮装置１０１の利用者に圧縮ＶＬＩＷ命令列ｖｓを通知してもよい。圧縮装置１０１の利用者は、出力された圧縮ＶＬＩＷ命令列ｖｓを、製造済みのプロセッサ１０２に入力することができる。これにより、圧縮装置１０１の利用者は、プロセッサ１０２のメモリアクセス回数の低減化を図り、消費電力の低減化を図ることができる。
【００９７】
また、圧縮装置１０１の利用者は、出力された圧縮ＶＬＩＷ命令列ｖｓを記憶させたプロセッサ１０２を製造することができる。この場合、圧縮装置１０１の利用者は、ＶＬＩＷ命令列Ｖｓより圧縮ＶＬＩＷ命令列ｖｓのメモリサイズが小さくなっているため、プロセッサ１０２が有する記憶装置（例えば、図１２に後述する命令メモリ１２０１）の物理的サイズを小さくして、プロセッサ１０２を製造することができる。これにより、圧縮装置１０１の利用者は、プロセッサ１０２の記憶装置の物理的サイズの増大を抑制し、消費電力の増大を抑制することができる。
【００９８】
（ＶＬＩＷ命令間圧縮処理）
次に、図７を用いて、圧縮装置１０１によるＶＬＩＷ命令間圧縮処理の詳細な処理手順について説明する。ＶＬＩＷ命令間圧縮処理は、圧縮対象の命令ＩＳが、参照先命令ＩＳと非同一のＶＬＩＷ命令Ｖ内に存在する場合に、圧縮対象の命令ＩＳを圧縮する処理である。
【００９９】
図７は、圧縮装置１０１によるＶＬＩＷ命令間圧縮処理の詳細な処理手順を示すフローチャートである。ここで、圧縮装置１０１が有する記憶装置は、圧縮結果を格納する出力バッファと、圧縮対象の命令ＩＳを格納するバッファと、圧縮対象の命令ＩＳの命令ＩＳを格納する前命令バッファと、を含む。
【０１００】
図７に示すように、まず、圧縮装置１０１は、出力バッファを初期化する（ステップＳ７０１）。次に、圧縮装置１０１は、命令バッファに基本ブロックのアセンブリコードを読み込む（ステップＳ７０２）。
【０１０１】
そして、圧縮装置１０１は、命令バッファのアセンブリコードを出力する（ステップＳ７０３）。次に、圧縮装置１０１は、命令バッファを前命令バッファにコピーする（ステップＳ７０４）。
【０１０２】
そして、圧縮装置１０１は、未処理のアセンブリコードが残っているか否かを判定する（ステップＳ７０５）。ここで、未処理のアセンブリコードが残っている場合（ステップＳ７０５：Ｙｅｓ）、圧縮装置１０１は、未処理のアセンブリコードの中の基本ブロックのアセンブリコードを命令バッファに読み込む（ステップＳ７０６）。
【０１０３】
次に、圧縮装置１０１は、前命令バッファと命令バッファを比較して、命令バッファのアセンブリコードを圧縮する（ステップＳ７０７）。そして、圧縮装置１０１は、圧縮したアセンブリコードを出力バッファに出力する（ステップＳ７０８）。次に、圧縮装置１０１は、ステップＳ７０４に戻る。
【０１０４】
一方、ステップＳ７０５において、未処理のアセンブリコードが残っていない場合（ステップＳ７０５：Ｎｏ）、圧縮装置１０１は、出力バッファの内容を出力する（ステップＳ７０９）。次に、圧縮装置１０１は、ＶＬＩＷ命令間圧縮処理を終了する。
【０１０５】
これにより、圧縮装置１０１は、ＶＬＩＷ命令Ｖを圧縮することができる。また、圧縮装置１０１は、図７に示したＶＬＩＷ命令間圧縮処理と、図９に後述するＶＬＩＷ命令内圧縮処理と、の処理結果を用いて、ＶＬＩＷ命令Ｖ内の命令ＩＳをＶＬＩＷ命令間およびＶＬＩＷ命令内のいずれかの命令ＩＳから復元できるように変換してもよい。これにより、圧縮装置１０１は、図６（Ｂ）の圧縮ＶＬＩＷ命令ｖを生成することができる。
【０１０６】
（ＶＬＩＷ命令間参照圧縮変換処理）
次に、図８を用いて、圧縮装置１０１によるＶＬＩＷ命令間参照圧縮変換処理の詳細な処理手順について説明する。ＶＬＩＷ命令間参照圧縮変換処理は、図７のステップＳ７０７およびステップＳ７０８に示した処理の詳細である。
【０１０７】
図８は、圧縮装置１０１によるＶＬＩＷ命令間参照圧縮変換処理の詳細な処理手順を示すフローチャートである。図８に示すように、まず、圧縮装置１０１は、変数Ｓに０を設定する（ステップＳ８０１）。次に、圧縮装置１０１は、命令バッファのＳ番目のスロットの命令ＩＳを作業バッファに保存する（ステップＳ８０２）。そして、圧縮装置１０１は、作業バッファの命令ＩＳと、前命令バッファの各々の命令ＩＳと、を比較し、圧縮できる命令ＩＳを探索する（ステップＳ８０３）。
【０１０８】
次に、圧縮装置１０１は、圧縮できる命令ＩＳがあるか否かを判定する（ステップＳ８０４）。ステップＳ８０４の判定の詳細については、図１１を用いて後述する。
【０１０９】
ここで、圧縮できる命令ＩＳがある場合（ステップＳ８０４：Ｙｅｓ）、圧縮装置１０１は、圧縮を表す圧縮／非圧縮判定ビット「１」を作業バッファに保存する。また、圧縮装置１０１は、参照先命令ＩＳが非同一ＶＬＩＷ命令内に存在することを表す同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビット「１」と、参照先命令ＩＳのスロット番号を表すスロット特定ビットと、を作業バッファに保存する（ステップＳ８０５）。次に、圧縮装置１０１は、ステップＳ８０７に移行する。
【０１１０】
一方、圧縮できる命令ＩＳがない場合（ステップＳ８０４：Ｎｏ）、圧縮装置１０１は、非圧縮を表す圧縮／非圧縮判定ビット「０」と、命令バッファの命令ＩＳと、を作業バッファに保存する（ステップＳ８０６）。次に、圧縮装置１０１は、ステップＳ８０７に移行する。
【０１１１】
そして、ステップＳ８０７において、圧縮装置１０１は、変数Ｓに１を加算する（ステップＳ８０７）。次に、圧縮装置１０１は、Ｓがスロット数以上であるか否かを判定する（ステップＳ８０８）。ここで、Ｓがスロット数より小さい場合（ステップＳ８０８：Ｎｏ）、圧縮装置１０１は、ステップＳ８０２に戻る。
【０１１２】
一方、Ｓがスロット数以上である場合（ステップＳ８０８：Ｙｅｓ）、圧縮装置１０１は、作業バッファの内容を出力バッファに出力する（ステップＳ８０９）。次に、圧縮装置１０１は、ＶＬＩＷ命令間参照圧縮変換処理を終了する。これにより、圧縮装置１０１は、命令ＩＳを圧縮することができる。
【０１１３】
（ＶＬＩＷ命令内圧縮処理）
次に、図９を用いて、圧縮装置１０１によるＶＬＩＷ命令内圧縮処理の詳細な処理手順について説明する。ＶＬＩＷ命令内圧縮処理は、圧縮対象の命令ＩＳが、参照先命令ＩＳと同一ＶＬＩＷ命令Ｖ内に存在する場合に、圧縮対象の命令ＩＳを圧縮する処理である。
【０１１４】
図９は、圧縮装置１０１によるＶＬＩＷ命令内圧縮処理の詳細な処理手順を示すフローチャートである。図９に示すように、まず、圧縮装置１０１は、出力バッファを初期化する（ステップＳ９０１）。次に、圧縮装置１０１は、未処理のアセンブリコードが残っているか否かを判定する（ステップＳ９０２）。
【０１１５】
ここで、未処理のアセンブリコードが残っている場合（ステップＳ９０２：Ｙｅｓ）、圧縮装置１０１は、命令バッファに基本ブロックのアセンブリコードを読み込む（ステップＳ９０３）。次に、圧縮装置１０１は、図１０に示すＶＬＩＷ命令内参照圧縮変換処理を実行し、圧縮したアセンブリコードを出力バッファに出力する（ステップＳ９０４）。そして、圧縮装置１０１は、ステップＳ９０２に戻る。
【０１１６】
一方、ステップＳ９０２において、未処理のアセンブリコードが残っていない場合（ステップＳ９０２：Ｎｏ）、圧縮装置１０１は、出力バッファの内容を出力する（ステップＳ９０５）。次に、圧縮装置１０１は、ＶＬＩＷ命令内圧縮処理を終了する。
【０１１７】
これにより、圧縮装置１０１は、ＶＬＩＷ命令Ｖを圧縮することができる。また、圧縮装置１０１は、図７に示したＶＬＩＷ命令間圧縮処理と、図９に示したＶＬＩＷ命令内圧縮処理と、の処理結果を用いて、ＶＬＩＷ命令Ｖを圧縮してもよい。
【０１１８】
（ＶＬＩＷ命令内参照圧縮変換処理）
次に、図１０を用いて、圧縮装置１０１によるＶＬＩＷ命令内参照圧縮変換処理の詳細な処理手順について説明する。ＶＬＩＷ命令内参照圧縮変換処理は、図９のステップＳ９０４に示した処理の詳細である。
【０１１９】
図１０は、圧縮装置１０１によるＶＬＩＷ命令内参照圧縮変換処理の詳細な処理手順を示すフローチャートである。図１０に示すように、まず、圧縮装置１０１は、変数Ｓに０を設定する（ステップＳ１００１）。次に、圧縮装置１０１は、命令バッファのＳ番目のスロットの命令ＩＳを作業バッファに保存する（ステップＳ１００２）。そして、圧縮装置１０１は、作業バッファの命令ＩＳと命令バッファの各々の命令ＩＳとを比較し、圧縮できる命令ＩＳを探索する（ステップＳ１００３）。
【０１２０】
次に、圧縮装置１０１は、圧縮できる命令ＩＳがあるか否かを判定する（ステップＳ１００４）。ステップＳ１００４の判定の詳細については、図１１を用いて後述する。
【０１２１】
ここで、圧縮できる命令ＩＳがある場合（ステップＳ１００４：Ｙｅｓ）、圧縮装置１０１は、圧縮を表す圧縮／非圧縮判定ビット「１」を作業バッファに保存する。また、圧縮装置１０１は、参照先命令ＩＳが同一ＶＬＩＷ命令内に存在することを表す同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビット「０」と、参照先命令ＩＳのスロット番号を表すスロット特定ビットと、を作業バッファに保存する（ステップＳ１００５）。次に、圧縮装置１０１は、ステップＳ１００７に移行する。
【０１２２】
一方、圧縮できる命令ＩＳがない場合（ステップＳ１００４：Ｎｏ）、圧縮装置１０１は、非圧縮を表す圧縮／非圧縮判定ビット「０」と、命令バッファの命令ＩＳと、を作業バッファに保存する（ステップＳ１００６）。次に、圧縮装置１０１は、ステップＳ１００７に移行する。
【０１２３】
そして、ステップＳ１００７において、圧縮装置１０１は、変数Ｓに１を加算する（ステップＳ１００７）。次に、圧縮装置１０１は、Ｓがスロット数以上であるか否かを判定する（ステップＳ１００８）。ここで、Ｓがスロット数より小さい場合（ステップＳ１００８：Ｎｏ）、圧縮装置１０１は、ステップＳ１００２に戻る。
【０１２４】
一方、Ｓがスロット数以上である場合（ステップＳ１００８：Ｙｅｓ）、圧縮装置１０１は、作業バッファの内容を出力バッファに出力する（ステップＳ１００９）。次に、圧縮装置１０１は、ＶＬＩＷ命令内参照圧縮変換処理を終了する。これにより、圧縮装置１０１は、命令ＩＳを圧縮することができる。
【０１２５】
（圧縮可能／不可能判定処理）
次に、図１１を用いて、圧縮装置１０１による圧縮可能／不可能判定処理の詳細な処理手順について説明する。圧縮可能／不可能判定処理は、図８のステップＳ８０４、または、図１０のステップＳ１００４に示した判定の詳細である。
【０１２６】
図１１は、圧縮装置１０１による圧縮可能／不可能判定処理の詳細な処理手順を示すフローチャートである。図１１において、まず、圧縮装置１０１は、比較元（圧縮対象の命令ＩＳ）と比較先とが同一オペコードＯＣか否かを判定する（ステップＳ１１０１）。ここで、同一オペコードＯＣでない場合（ステップＳ１１０１：Ｎｏ）、圧縮装置１０１は、比較元の命令ＩＳは圧縮不可能と判定して（ステップＳ１１０３）、圧縮可能／不可能判定処理を終了する。
【０１２７】
一方、同一オペコードＯＣである場合（ステップＳ１１０１：Ｙｅｓ）、圧縮装置１０１は、比較元と比較先との命令ＩＳのオペランドの差分が、オペコードＯＣの種類ごとの所定値と一致するか否かを判定する（ステップＳ１１０２）。ここで、所定値と一致しない場合（ステップＳ１１０２：Ｎｏ）、圧縮装置１０１は、比較元の命令ＩＳは圧縮不可能と判定して（ステップＳ１１０３）、圧縮可能／不可能判定処理を終了する。
【０１２８】
一方、所定値と一致する場合（ステップＳ１１０２：Ｙｅｓ）、圧縮装置１０１は、比較元の命令ＩＳは圧縮可能と判定して（ステップＳ１１０４）、圧縮可能／不可能判定処理を終了する。これにより、圧縮装置１０１は、比較元の命令ＩＳが圧縮可能か否かを判定することができる。
【０１２９】
・実施の形態２
次に、実施の形態２について説明する。実施の形態２では、図１に示した命令実行について説明する。実施の形態２では、図１に示したプロセッサ１０２が、ＶＬＩＷ命令列Ｖｓを読み込みながら、非圧縮命令ＩＳについては実行し、圧縮命令ｃについては参照先命令ＩＳを参照することで復元して、実行する。このように、プロセッサ１０２が圧縮命令ｃを復元して実行する機能を有するため、プロセッサ１０２の有する記憶装置は、圧縮ＶＬＩＷ命令列ｖｓを格納すればよい。
【０１３０】
これにより、プロセッサ１０２は、圧縮ＶＬＩＷ命令列ｖｓを記憶装置からフェッチするため、ＶＬＩＷ命令列Ｖｓをフェッチする場合と比べて、フェッチ回数、すなわち、メモリアクセス回数を低減することができ、消費電力の低減化を図ることができる。また、プロセッサ１０２の有する記憶装置（例えば、図１２に後述する命令メモリ１２０１）は、圧縮していないＶＬＩＷ命令列Ｖｓを格納する場合の記憶装置と比べて、物理的サイズが小さい記憶装置により実現することができるため、消費電力が低減化される。
【０１３１】
（プロセッサ１０２のハードウェア構成例）
次に、図１２を用いて、図１に示したプロセッサ１０２のハードウェア構成例について説明する。
【０１３２】
図１２は、図１に示したプロセッサ１０２のハードウェア構成例を示すブロック図である。図１２に示すように、プロセッサ１０２は、例えば、専用の配線を経由して命令メモリ１２０１およびデータメモリ１２０２と接続されるとともに、バス１２０３を経由して様々な外部入出力装置１２０４と接続される。
【０１３３】
命令メモリ１２０１は、プロセッサ１０２が実行するプログラムの命令ＩＳを格納するメモリである。命令メモリ１２０１には、上述した圧縮命令ｃや非圧縮命令ＩＳが格納される。プロセッサ１０２は、命令メモリ１２０１に対して命令アドレスを入力し、命令アドレスに対応する命令ＩＳを読み出す。
【０１３４】
データメモリ１２０２は、プログラムのデータを格納するメモリである。データメモリ１２０２には、図５を用いて説明した命令ＩＳの種類ごとの規定値が格納されていてもよい。データメモリ１２０２には、例えば、ＮＯＰ命令に対応する規定値として「０，０，０」が格納される。ここで、「０，０，０」の各々の値は、オペランドＳＯ１，ＳＯ２，ＤＯの各々に対する規定値である。また、データメモリ１２０２には、例えば、ＬＤ命令に対応する規定値として「１，０，１」が格納される。また、データメモリ１２０２には、例えば、ＡＤＤ命令に対応する規定値として「１，１，１」が格納される。
【０１３５】
外部入出力装置１２０４は、このアーキテクチャの外部からの入力と出力を表す。外部入出力装置１２０４は、例えば、磁気記憶装置、ネットワークインターフェース、各種センサ類およびディスプレイなどである。バス１２０３は、プロセッサ１０２と上記の様々な外部入出力装置１２０４とを接続するためのものである。次に、図１２に示したプロセッサ１０２の詳細について、図１３を用いて説明する。
【０１３６】
図１３は、プロセッサ１０２の詳細なハードウェア構成例を示す説明図である。図１３に示すように、プロセッサ１０２は、デコードユニット１３０１、実行ユニット１３０２、レジスタファイル１３０３、および、ロードストア（ＬＤ／ＳＴ）ユニット１３０４を含む。さらに、プロセッサ１０２は、命令長検出部（ＩＬブロック）１３０５、プログラムカウンタ（ＰＣ）１３０６、セレクタ（ｓｅｌ）１３０７、および、パイプラインレジスタ１３０８〜１３１１を含む。
【０１３７】
ここで、プロセッサ１０２は、パイプラインレジスタ１３０８〜１３１１により区切られた５段のパイプラインステージを有する。この５段のパイプラインステージは、命令フェッチ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ）、命令デコード（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ）、命令実行（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｅｘｅｃｕｔｉｏｎ）、メモリアクセス（Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）、および、レジスタライトバック（Ｒｅｇｉｓｔｅｒ  Ｗｒｉｔｅｂａｃｋ）のステージである。
【０１３８】
まず、プロセッサ１０２は、圧縮元であるＶＬＩＷ命令Ｖ内の或る命令ＩＳを圧縮した圧縮命令ｃ、ＶＬＩＷ命令Ｖ内の非圧縮命令ＩＳ、および圧縮命令ｃのＶＬＩＷ命令Ｖ内での位置を示す圧縮情報が含まれている圧縮ＶＬＩＷ命令列ｖｓをフェッチする。次に、プロセッサ１０２は、或る圧縮ＶＬＩＷ命令ｖにおける圧縮情報に基づいて、或る圧縮ＶＬＩＷ命令ｖの中から圧縮命令ｃおよび非圧縮命令ＩＳのうち少なくともいずれかを特定して、命令デコードステージに転送する。
【０１３９】
プロセッサ１０２は、例えば、命令フェッチステージでは、プログラムカウンタ１３０６で指定されたアドレスに従って命令メモリ１２０１から圧縮命令ｃまたは命令ＩＳを読み取る。次に、プロセッサ１０２は、読み取った圧縮命令ｃまたは命令ＩＳを、パイプラインレジスタ１３０８を経由してデコードユニット１３０１（命令デコードステージ）に転送する。読み取る命令長は、各スロットの命令ＩＳが圧縮されているか否かにより異なる。
【０１４０】
そのため、プロセッサ１０２は、ＩＬブロック１３０５で読み取った実際の命令長の分、プログラムカウンタ１３０６の値を更新する。プログラムカウンタ１３０６の入力には、ＩＬブロック１３０５で読み取った実際の命令長のほかに、分岐先アドレスも与えられる。命令ＩＳの実際の長さと分岐先アドレスとは、セレクタ１３０７により選択されてプログラムカウンタ１３０６に入力される。
【０１４１】
プロセッサ１０２は、命令デコードステージでは、デコードユニット１３０１により、圧縮元である命令ＩＳを復元する。デコードユニット１３０１は、具体的には、例えば、命令フェッチステージから圧縮命令ｃが転送された場合、或る圧縮ＶＬＩＷ命令ｖおよび或る圧縮ＶＬＩＷ命令ｖに先行する圧縮ＶＬＩＷ命令ｖのうち少なくとも或る圧縮ＶＬＩＷ命令ｖの中から、圧縮命令ｃが示す位置に該当する命令ＩＳを選択する。
【０１４２】
次に、デコードユニット１３０１は、選択した命令ＩＳのオペコードＯＣおよびオペランドＳＯ１，ＳＯ２，ＤＯの連続性に基づいて、或る命令ＩＳを復元して、復元された或る命令ＩＳおよび非圧縮命令ＩＳを実行する命令実行ステージに転送する。また、デコードユニット１３０１は、命令フェッチステージから非圧縮命令が転送された場合、非圧縮命令を命令実行ステージに転送する。
【０１４３】
また、プロセッサ１０２は、命令デコードステージにおいて、デコードユニット１３０１により、命令ＩＳの実行に応じて必要なデータをレジスタファイル１３０３から読み取る。
【０１４４】
ここで、まず、デコードユニット１３０１が、圧縮ＶＬＩＷ命令列ｖｓの先頭の圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃを復元する場合の具体例について説明する。後続の圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元の具体例については後述する。
【０１４５】
この場合、デコードユニット１３０１は、命令バッファ群を有する。ここで、命令バッファ群は、ＶＬＩＷ命令Ｖ内の各命令ＩＳの位置に対応する記憶領域群（例えば、図１４に後述する命令バッファ１４３０〜１４３３）である。換言すれば、命令バッファは、スロットごとに存在する。
【０１４６】
デコードユニット１３０１は、圧縮命令ｃが転送された場合、取得した命令ＩＳの中から、圧縮命令ｃが示す位置にある参照先命令ＩＳを選択する。そして、デコードユニット１３０１は、選択した参照先命令ＩＳから圧縮元である命令ＩＳを復元する。デコードユニット１３０１は、具体的には、例えば、参照先命令ＩＳのオペコードＯＣと、参照先命令ＩＳのオペランドＳＯ１，ＳＯ２，ＤＯに規定値を加算した加算後のオペランドＳＯ１，ＳＯ２，ＤＯと、を連結する。これにより、デコードユニット１３０１は、圧縮元である命令ＩＳを復元する。
【０１４７】
次に、デコードユニット１３０１は、圧縮元である命令ＩＳの位置に対応する命令バッファに圧縮元である命令ＩＳを保持する。そして、デコードユニット１３０１は、圧縮元である命令ＩＳを命令実行ステージに転送する。また、デコードユニット１３０１は、非圧縮命令ＩＳが転送された場合、非圧縮命令ＩＳの位置に対応する命令バッファに非圧縮命令ＩＳを保持する。次に、デコードユニット１３０１は、非圧縮命令ＩＳを命令実行ステージに転送する。
【０１４８】
これにより、デコードユニット１３０１は、命令フェッチステージから今回転送されてきた圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃから復元された命令ＩＳを、次回に転送されてくる圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に使用することができる。また、デコードユニット１３０１は、命令フェッチステージから今回転送されてきた圧縮ＶＬＩＷ命令ｖ内の非圧縮命令ＩＳを、次回に転送されてくる圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に使用することができる。
【０１４９】
次に、デコードユニット１３０１が、圧縮ＶＬＩＷ命令列ｖｓの先頭の圧縮ＶＬＩＷ命令ｖに後続する圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃを復元する場合の具体例について説明する。
【０１５０】
この場合、デコードユニット１３０１は、命令バッファ群に保持された各命令ＩＳを取得する。命令バッファには、上述したように、前回にデコードユニット１３０１により復元された命令ＩＳ、または前回にデコードユニット１３０１に転送された非圧縮命令ＩＳが、スロットごとに格納されている。次に、デコードユニット１３０１は、命令フェッチステージから転送された圧縮ＶＬＩＷ命令ｖの各命令ＩＳを取得する。
【０１５１】
そして、デコードユニット１３０１は、圧縮命令ｃが転送された場合、取得した命令ＩＳの中から、圧縮命令ｃが示す位置にある参照先命令ＩＳを選択する。そして、デコードユニット１３０１は、選択した参照先命令ＩＳから圧縮元である命令ＩＳを復元する。
【０１５２】
次に、デコードユニット１３０１は、圧縮元である命令ＩＳの位置に対応する命令バッファに圧縮元である命令ＩＳを保持する。そして、デコードユニット１３０１は、圧縮元である命令ＩＳを命令実行ステージに転送する。また、デコードユニット１３０１は、非圧縮命令ＩＳが転送された場合、非圧縮命令ＩＳの位置に対応する命令バッファに非圧縮命令ＩＳを保持する。次に、デコードユニット１３０１は、非圧縮命令ＩＳを命令実行ステージに転送する。
【０１５３】
これにより、デコードユニット１３０１は、命令フェッチステージから今回転送されてきた圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃから復元された命令ＩＳを、次回に転送されてくる圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に使用することができる。また、デコードユニット１３０１は、命令フェッチステージから今回転送されてきた圧縮ＶＬＩＷ命令ｖ内の非圧縮命令ＩＳを、次回に転送されてくる圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に使用することができる。
【０１５４】
また、デコードユニット１３０１は、命令カウンタ群（例えば、図１４に後述する命令カウンタ１４４０〜１４４３）を有してもよい。命令カウンタの値は、圧縮ＶＬＩＷ命令ｖ内の各命令ＩＳの位置に対応し、オペコードＯＣが同一でかつオペランドＳＯ１，ＳＯ２，ＤＯが規則的に連続する連続回数を示す。デコードユニット１３０１は、非圧縮命令ＩＳが転送された場合は、非圧縮命令ＩＳの位置に対応する命令カウンタに初期値を設定する。また、デコードユニット１３０１は、圧縮命令ｃが転送された場合、圧縮命令ｃの位置に対応する命令カウンタを、参照先命令ＩＳの位置に対応する命令カウンタの値に１を加算した加算後の値に更新する。
【０１５５】
これにより、デコードユニット１３０１は、命令カウンタの値が或る連続回数を示す場合に命令ＩＳの復元方法を変更するといったことができる。この場合、デコードユニット１３０１は、具体的には、例えば、命令カウンタの値が或る連続回数を示す場合に、圧縮元である命令ＩＳの復元に使用する規定値を変更することができる。また、デコードユニット１３０１は、命令カウンタの値を用いて命令ＩＳの復元を行うことができる。
【０１５６】
ここでは、命令バッファには、前回にデコードユニット１３０１により復元された圧縮元の命令ＩＳや、前回にデコードユニット１３０１に転送された非圧縮命令ＩＳが格納されたが、これに限らない。例えば、命令バッファには、例えば、前回にデコードユニット１３０１により復元に使用された参照先命令ＩＳや、前回にデコードユニット１３０１に転送された非圧縮命令ＩＳが格納されていてもよい。
【０１５７】
この場合、デコードユニット１３０１は、命令バッファ群に保持された各命令ＩＳを取得し、命令フェッチステージから転送された圧縮ＶＬＩＷ命令ｖの各命令ＩＳを取得する。次に、デコードユニット１３０１は、取得した命令ＩＳの中から、圧縮命令ｃが示す位置にある参照先命令ＩＳを選択する。ここで、デコードユニット１３０１は、圧縮命令ｃが示す位置にある参照先命令ＩＳが、過去に圧縮命令ｃから復元された命令ＩＳである場合、過去に圧縮命令ｃからの復元に使用した参照先命令ＩＳを選択する。
【０１５８】
そして、デコードユニット１３０１は、選択した参照先命令ＩＳから圧縮元である命令ＩＳを復元する。デコードユニット１３０１は、具体的には、例えば、命令カウンタの値と規定値との積を、参照先命令ＩＳのオペランドＳＯ１，ＳＯ２，ＤＯに加算し、加算後のオペランドＳＯ１，ＳＯ２，ＤＯを生成する。次に、デコードユニット１３０１は、参照先命令ＩＳのオペコードＯＣと、生成した加算後のオペランドＳＯ１，ＳＯ２，ＤＯと、を連結する。これにより、デコードユニット１３０１は、圧縮元である命令ＩＳを復元する。
【０１５９】
次に、デコードユニット１３０１は、圧縮元である命令ＩＳの位置に対応する命令バッファに圧縮命令ｃの復元に使用した参照先命令ＩＳを保持する。そして、デコードユニット１３０１は、圧縮元である命令ＩＳを命令実行ステージに転送する。また、デコードユニット１３０１は、非圧縮命令ＩＳが転送された場合、非圧縮命令ＩＳの位置に対応する命令バッファに非圧縮命令ＩＳを保持する。次に、デコードユニット１３０１は、非圧縮命令ＩＳを命令実行ステージに転送する。
【０１６０】
これにより、デコードユニット１３０１は、命令フェッチステージから今回転送されてきた圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に使用した参照先命令ＩＳを、次回に転送されてくる圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に使用することができる。また、デコードユニット１３０１は、命令フェッチステージから今回転送されてきた圧縮ＶＬＩＷ命令ｖ内の非圧縮命令ＩＳを、次回に転送されてくる圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に使用することができる。命令デコードステージの詳細については、図１６〜図２１を用いて後述する。
【０１６１】
プロセッサ１０２は、命令実行ステージでは、実行ユニット１３０２により、命令デコードステージから転送された命令ＩＳを実行する。実行ユニット１３０２は、例えば、４つの命令ＩＳを並列実行可能である。実行ユニット１３０２は、命令ＩＳの内容によっては、ＬＤ／ＳＴユニット１３０４にアクセスし、データメモリ１２０２にリクエストを出し、あるいは、プログラムカウンタ１３０６の値を更新するといった処理を実行する。
【０１６２】
プロセッサ１０２は、メモリアクセスステージでは、データメモリ１２０２から読み出したデータを受け取る。そして、プロセッサ１０２は、最後のレジスタライトバックステージでは、命令ＩＳの実行結果をレジスタファイル１３０３に格納し、命令ＩＳの実行を終了する。次に、図１４を用いて、デコードユニット１３０１の詳細について説明する。
【０１６３】
図１４は、図１３におけるデコードユニット１３０１の一例を示すブロック図である。図１４に示すように、デコードユニット１３０１は、命令分配機（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｉｖｉｄｅｒ）１４００、および、スロット０〜スロット３に対応した複数の命令合成ブロック１４２０〜１４２３を含む。また、デコードユニット１３０１は、スロット０〜スロット３に対応した複数の命令バッファ１４３０〜１４３３、および、複数の命令カウンタ１４４０〜１４４３を含む。
【０１６４】
ここで、命令バッファ１４３０〜１４３３には、参照先命令ＩＳの候補が格納される。命令カウンタ１４４０〜１４４３は、命令ＩＳが変化する系列のうち、現在の命令ＩＳが何番目にあるのかを示す値が格納される。
【０１６５】
命令フェッチステージから転送された圧縮命令ｃまたは非圧縮命令ＩＳは、命令分配機１４００に入力される。ここで、圧縮命令ｃまたは非圧縮命令ＩＳは、スロットごとに分配される。そして、圧縮命令ｃは、スロットごとの命令合成ブロック１４２０〜１４２３のいずれかに入力され、実行ユニット１３０２が実行できるように復元される。
【０１６６】
具体的には、例えば、スロットごとの命令合成ブロック１４２０〜１４２３には、それぞれ、スロットごとの命令Ｏｐｅｒａｔｉｏｎ［０］〜Ｏｐｅｒａｔｉｏｎ［３］が入力される。命令Ｏｐｅｒａｔｉｏｎ［］は、スロットごとに分配された圧縮命令ｃまたは非圧縮命令ＩＳである。
【０１６７】
また、スロットごとの命令合成ブロック１４２０〜１４２３には、それぞれ、命令合成ブロック１４２０〜１４２３が前回に出力した命令Ｉｎｓｔ−ＢＵＦ［０］〜Ｉｎｓｔ−ＢＵＦ［３］が入力される。また、スロットごとの命令合成ブロック１４２０〜１４２３には、それぞれ、命令合成ブロック１４２０〜１４２３が前回に出力した命令カウンタの値Ｉｎｓｔ−ＣＮＴ［０］〜Ｉｎｓｔ−ＣＮＴ［３］が入力される。
【０１６８】
ここで、ｉ番目のスロットに対応する命令合成ブロックを、「命令合成ブロック１４２ｉ」と称す。ｉ番目のスロットに対応する命令合成ブロック１４２ｉには、スロット番号「ｉ」より小さいスロット番号「０〜ｉ−１」に対応する命令合成ブロックが今回に出力した命令Ｏｐｅｒａｔｉｏｎ−Ｒ［０］〜Ｏｐｅｒａｔｉｏｎ−Ｒ［ｉ−１］が入力される。また、ｉ番目の命令合成ブロック１４２ｉには、スロット番号「ｉ」より小さいスロット番号「０〜ｉ−１」に対応する命令合成ブロックが今回に出力した命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［０］〜Ｉｎｓｔ−ＶＣＮＴ［ｉ−１］が入力される。
【０１６９】
そして、命令合成ブロック１４２ｉは、圧縮命令ｃまたは非圧縮命令ＩＳの内容に応じて、新たな命令Ｉｎｓｔ−ＢＵＦ［ｉ］および命令カウンタの値Ｉｎｓｔ−ＣＮＴ［ｉ］を出力する。また、命令合成ブロック１４２ｉは、実行ユニット１３０２が実行可能な命令Ｏｐｅｒａｔｉｏｎ−Ｒ［ｉ］および命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［ｉ］を出力する。ｉが３の場合、命令合成ブロック１４２ｉは、命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［ｉ］を出力しなくてもよい。命令合成ブロック１４２０〜１４２３の詳細については、図１５を用いて後述する。
【０１７０】
ここで、出力された命令Ｉｎｓｔ−ＢＵＦ［０］〜Ｉｎｓｔ−ＢＵＦ［３］は、命令バッファ１４３０〜１４３３に格納される。すなわち、命令バッファ１４３０〜１４３３は、命令ＩＳの復元に使用される参照先命令ＩＳの候補として、命令Ｉｎｓｔ−ＢＵＦ［０］〜Ｉｎｓｔ−ＢＵＦ［３］に上書きして格納される。従って、命令Ｉｎｓｔ−ＢＵＦ［０］〜Ｉｎｓｔ−ＢＵＦ［３］には、命令ＩＳの系列の末尾の命令ＩＳが格納される。
【０１７１】
出力された命令カウンタの値Ｉｎｓｔ−ＣＮＴ［０］〜Ｉｎｓｔ−ＣＮＴ［３］は、命令カウンタ１４４０〜１４４３に格納される。従って、命令Ｉｎｓｔ−ＣＮＴ［］の値は、命令ＩＳが変化する系列のうち、現在の命令ＩＳが何番目にあるのかを示す値になり、例えば、初めの命令ＩＳの次の命令ＩＳについては「１」となる。
【０１７２】
上述のように、デコードユニット１３０１は、復元のために参照される参照先命令ＩＳを、命令ＩＳの種類ごとに決まった規則で変化させ、オペランドが異なる命令ＩＳの系列を作成する。デコードユニット１３０１は、例えば、命令Ｉｎｓｔ−ＢＵＦ［０］〜Ｉｎｓｔ−ＢＵＦ［３］のオペランドＳＯ１，ＳＯ２，ＤＯに、種類ごとに決まった規定値を加算して、圧縮元である命令ＩＳを復元する。
【０１７３】
命令バッファ１４３０〜１４３３に格納された命令Ｉｎｓｔ−ＢＵＦ［０］〜Ｉｎｓｔ−ＢＵＦ［３］は、パイプラインレジスタ１３０９を経由して後段の命令実行ステージに転送される。また、命令カウンタ１４４０〜１４４３に格納された命令カウンタの値Ｉｎｓｔ−ＣＮＴ［０］〜Ｉｎｓｔ−ＣＮＴ［３］は、パイプラインレジスタ１３０９を経由して後段の命令実行ステージに転送される。また、命令Ｏｐｅｒａｔｉｏｎ−Ｒ［］は、パイプラインレジスタ１３０９を経由して後段の命令実行ステージに転送されて、実行される。
【０１７４】
このようにして、プロセッサ１０２は、例外が起きたときに、例外が発生したステージのＩｎｓｔ−ＢＵＦおよびＩｎｓｔ−ＣＮＴを保存し、復帰するときにＩｎｓｔ−ＢＵＦおよびＩｎｓｔ−ＣＮＴを復帰させる。これにより、プロセッサ１０２は、基本ブロックの途中から命令ＩＳの実行を再開することができる。
【０１７５】
図１４の例では、命令カウンタ１４４０〜１４４３に命令カウンタの値Ｉｎｓｔ−ＣＮＴ［０］〜Ｉｎｓｔ−ＣＮＴ［３］が格納されたが、これに限らない。例えば、命令カウンタ１４４０〜１４４３はなくてもよい。この場合、命令バッファ１４３０〜１４３３は、復元された最新の命令を命令Ｉｎｓｔ−ＢＵＦ［０］〜Ｉｎｓｔ−ＢＵＦ［３］として格納する。その後、デコードユニット１３０１は、命令Ｉｎｓｔ−ＢＵＦ［０］〜Ｉｎｓｔ−ＢＵＦ［３］のオペランドＳＯ１，ＳＯ２，ＤＯに、命令ＩＳの種類ごとの規定値を加算して、圧縮元である命令ＩＳを復元する。従って、命令Ｉｎｓｔ−ＢＵＦ［０］〜Ｉｎｓｔ−ＢＵＦ［３］には、命令ＩＳの系列の末尾の命令ＩＳが格納される。
【０１７６】
また、命令バッファ１４３０〜１４３３には、命令ＩＳの系列の先頭の命令ＩＳが格納されてもよい。この場合、デコードユニット１３０１は、先頭の命令ＩＳのオペランドＳＯ１，ＳＯ２，ＤＯに、命令ＩＳの種類ごとの規定値と命令カウンタの値との積を加算して、圧縮元である命令ＩＳを復元することになる。
【０１７７】
また、図１４の例では、プロセッサ１０２は、ｉ番目のスロットの圧縮命令ｃの復元に、ｉより小さいスロット番号のスロットの圧縮命令ｃまたは非圧縮命令ＩＳを参照したが、これに限らない。例えば、プロセッサ１０２は、ｉ番目のスロットの圧縮命令ｃの復元に、ｉより大きいスロット番号のスロットの圧縮命令ｃまたは非圧縮命令ＩＳを参照してもよい。
【０１７８】
この場合、ｉ番目のスロットに対応する命令合成ブロック１４２ｉには、スロット番号「ｉ」より大きいスロット番号「ｉ＋１〜３」に対応する命令合成ブロックが今回に出力した命令Ｏｐｅｒａｔｉｏｎ−Ｒ［ｉ＋１］〜Ｏｐｅｒａｔｉｏｎ−Ｒ［３］が入力される。また、ｉ番目の命令合成ブロック１４２ｉには、スロット番号「ｉ」より大きいスロット番号「ｉ＋１〜２」に対応する命令合成ブロックが今回に出力した命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［ｉ＋１］〜Ｉｎｓｔ−ＶＣＮＴ［２］が入力される。
【０１７９】
図１５は、図１４における命令合成ブロックの一例を示すブロック図である。図１５に示すように、命令合成ブロック１４２０〜１４２３は、セレクタ（ｓｅｌ）１５０１，１５０２、合成部１５０３、セレクタ１５０４，１５０５、合成部１５０６、セレクタ１５０７〜１５０９、＋１加算部１５１０、１設定部１５１１、およびセレクタ１５１２を含む。図１５の例では、命令合成ブロック１４２０〜１４２３のうち、ｉ番目のスロットに対応する命令合成ブロック１４２ｉの動作について説明する。
【０１８０】
ここで、命令合成ブロック１４２ｉは、命令分配機１４００から処理対象になるｉ番目のスロットの命令Ｏｐｅｒａｔｉｏｎ［ｉ］の入力を受ける。命令合成ブロック１４２ｉは、処理対象の命令Ｏｐｅｒａｔｉｏｎ［ｉ］が、圧縮命令ｃか非圧縮命令ＩＳかにより処理の内容を変える。
【０１８１】
命令合成ブロック１４２ｉは、圧縮命令ｃか非圧縮命令ＩＳかを、処理対象の命令Ｏｐｅｒａｔｉｏｎ［ｉ］に付与された圧縮／非圧縮判定ビットにより判定する。命令合成ブロック１４２ｉは、具体的には、圧縮／非圧縮判定ビットが「０」であれば非圧縮命令ＩＳと判定し、圧縮／非圧縮判定ビットが「１」であれば圧縮命令ｃと判定する。
【０１８２】
また、上述したように、各スロットに対応する圧縮／非圧縮判定ビットが「１」のとき、圧縮命令ｃになる３ビットのデータが、どのＶＬＩＷ命令Ｖ内のどのスロットの命令ＩＳが参照先命令ＩＳであるかを指定する復元情報である。
【０１８３】
例えば、ＶＬＩＷ命令Ｖが４つのスロット０〜スロット３を含む場合、圧縮命令ｃに含まれる２ビットのスロット特定ビットが「００」のときは、スロット特定ビットは、スロット０に参照先命令ＩＳがあることを示す。同様に、スロット特定ビットは、「０１」のときはスロット１に、「１０」のときはスロット２に、「１１」のときはスロット３に、参照先命令ＩＳがあることを示す。
【０１８４】
また、例えば、圧縮命令ｃに含まれる１ビットの同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットが「０」のときは、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットは、処理対象の命令ＩＳと同一ＶＬＩＷ命令Ｖ内に参照先命令ＩＳがあることを示す。また、圧縮命令ｃに含まれる１ビットの同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットが「１」のときは、同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットは、処理対象の命令ＩＳと非同一のＶＬＩＷ命令Ｖ内に参照先命令ＩＳがあることを示す。
【０１８５】
セレクタ１５０１は、今回に命令分配機１４００に入力されたＶＬＩＷ命令Ｖ内の０番目〜ｉ−１番目のスロットの命令Ｏｐｅｒａｔｉｏｎ−Ｒ［０〜ｉ−１］の入力を受ける。セレクタ１５０１は、キーとして圧縮命令ｃのスロット特定ビットを用いて、入力されたＶＬＩＷ命令Ｖ内の命令Ｏｐｅｒａｔｉｏｎ−Ｒ［０〜ｉ−１］の中からいずれかの命令Ｏｐｅｒａｔｉｏｎ―Ｒ［］を選択する。セレクタ１５０１は、選択した命令Ｏｐｅｒａｔｉｏｎ―Ｒ［］を、合成部１５０３に出力する。
【０１８６】
セレクタ１５０２は、今回に命令分配機１４００に入力されたＶＬＩＷ命令Ｖ内の０番目〜ｉ−１番目のスロットに対応する命令カウンタの値の入力を受ける。セレクタ１５０２は、キーとして圧縮命令ｃのスロット特定ビットを用いて、入力された命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［０〜ｉ−１］の中から、いずれかの命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［］を選択する。セレクタ１５０２は、選択した命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［］を、合成部１５０３およびセレクタ１５０９に出力する。
【０１８７】
合成部１５０３は、セレクタ１５０１が選択した命令Ｏｐｅｒａｔｉｏｎ−Ｒ［］とセレクタ１５０２が選択した命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［］の入力を受ける。合成部１５０３は、セレクタ１５０１が選択した命令Ｏｐｅｒａｔｉｏｎ−Ｒ［］とセレクタ１５０２が選択した命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［］とを用いて、圧縮元である命令ＩＳの候補を合成する。合成部１５０３は、圧縮元である命令ＩＳの候補を、セレクタ１５０７に出力する。
【０１８８】
セレクタ１５０４は、前回に命令分配機１４００に入力されたＶＬＩＷ命令Ｖ内の０番目〜３番目のスロットに対応する命令Ｉｎｓｔ−ＢＵＦ［０〜３］の入力を受ける。セレクタ１５０４は、キーとして圧縮命令ｃのスロット特定ビットを用いて、入力されたＶＬＩＷ命令Ｖ内の命令Ｉｎｓｔ−ＢＵＦ［０〜３］の中からいずれかの命令Ｉｎｓｔ−ＢＵＦ［］を選択する。セレクタ１５０４は、選択した命令Ｉｎｓｔ−ＢＵＦ［］を、合成部１５０６に出力する。
【０１８９】
セレクタ１５０５は、前回に命令分配機１４００に入力されたＶＬＩＷ命令Ｖ内の０番目〜３番目のスロットに対応する命令カウンタの値Ｉｎｓｔ−ＣＮＴ［０〜３］の入力を受ける。セレクタ１５０５は、キーとして圧縮命令ｃのスロット特定ビットを用いて、入力された命令カウンタの値Ｉｎｓｔ−ＣＮＴ［０〜３］の中から、いずれかの命令カウンタの値Ｉｎｓｔ−ＣＮＴ［］を選択する。セレクタ１５０５は、選択した命令カウンタの値Ｉｎｓｔ−ＣＮＴ［］を、合成部１５０６およびセレクタ１５０９に出力する。
【０１９０】
合成部１５０６は、セレクタ１５０４が選択した命令Ｉｎｓｔ−ＢＵＦ［］とセレクタ１５０５が選択した命令カウンタの値Ｉｎｓｔ−ＣＮＴ［］の入力を受ける。合成部１５０６は、セレクタ１５０４が選択した命令Ｉｎｓｔ−ＢＵＦ［］とセレクタ１５０５が選択した命令カウンタの値Ｉｎｓｔ−ＣＮＴ［］とを用いて、圧縮元である命令ＩＳの候補を合成する。合成部１５０６は、圧縮元である命令ＩＳの候補を、セレクタ１５０７に出力する。
【０１９１】
セレクタ１５０７は、合成部１５０３，１５０６により合成された圧縮元である命令ＩＳの候補の入力を受ける。セレクタ１５０７は、キーとして圧縮命令ｃの同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットを用いて、合成部１５０３，１５０６により合成された圧縮元である命令ＩＳの候補のうち、いずれかを選択する。セレクタ１５０７は、選択結果を、セレクタ１５０８に出力する。
【０１９２】
セレクタ１５０８は、セレクタ１５０７により選択された命令ＩＳの候補と、処理対象の命令Ｏｐｅｒａｔｉｏｎ［ｉ］と、の入力を受ける。セレクタ１５０８は、キーとして圧縮／非圧縮判定ビットを用いて、セレクタ１５０７により選択された命令ＩＳの候補と、処理対象の命令Ｏｐｅｒａｔｉｏｎ［ｉ］と、のうち、いずれかを選択する。セレクタ１５０８は、選択結果を、命令Ｉｎｓｔ−ＢＵＦ［ｉ］および命令Ｏｐｅｒａｔｉｏｎ−Ｒ［ｉ］として出力する。
【０１９３】
セレクタ１５０９は、セレクタ１５０２により選択された命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［］とセレクタ１５０５により選択された命令カウンタの値Ｉｎｓｔ−ＣＮＴ［］と、の入力を受ける。セレクタ１５０９は、キーとして同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットを用いて、入力された命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［］と入力された命令カウンタの値Ｉｎｓｔ−ＣＮＴ［］とのうち、いずれかを選択する。セレクタ１５０９は、選択結果を、＋１加算部１５１０に出力する。
【０１９４】
＋１加算部１５１０は、セレクタ１５０９による選択結果の入力を受ける。＋１加算部１５１０は、セレクタ１５０９による選択結果に１を加算する。＋１加算部１５１０は、加算後の値を、セレクタ１５１２に出力する。１設定部１５１１は、１を、セレクタ１５１２に出力する。
【０１９５】
セレクタ１５１２は、キーとして圧縮／非圧縮判定ビットを用いて、命令合成ブロック１４２ｉに入力された命令Ｏｐｅｒａｔｉｏｎ［ｉ］が非圧縮命令ＩＳか圧縮命令ｃか否かを判断する。セレクタ１５１２は、非圧縮命令ＩＳであれば初期値として１設定部１５１１からの値「１」を選択し、圧縮命令ｃであればセレクタ１５０９の出力に、＋１加算部１５１２により１加算された値を選択する。次に、セレクタ１５１２は、選択結果を命令カウンタの値Ｉｎｓｔ−ＣＮＴ［ｉ］および命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［ｉ］として出力する。
【０１９６】
（命令実行）
次に、図１６〜図２０を用いて、パイプライン処理例について説明する。パイプライン処理例は、図１２に示したプロセッサ１０２内の５段のパイプラインステージの各々における処理の内容を示す。
【０１９７】
図１６〜図２０は、パイプライン処理例を示す説明図である。まず、図１６において、プロセッサ１０２は、命令フェッチステージにおいて、プログラムカウンタ１３０６により指定されるアドレスに従って、命令メモリ１２０１からＶＬＩＷ命令Ｖ１を読み取る。ここで、プロセッサ１０２は、ＩＬブロック１３０５により読み取ったＶＬＩＷ命令Ｖ１の実際の長さに従って、プログラムカウンタ１３０６の値を更新する。
【０１９８】
次に、プロセッサ１０２は、パイプラインレジスタ１３０８を経由して、読み取ったＶＬＩＷ命令Ｖ１を命令デコードステージに転送する。そして、プロセッサ１０２は、命令フェッチステージにおいて、プログラムカウンタ１３０６により指定されるアドレスに従って、命令メモリ１２０１からＶＬＩＷ命令Ｖ２を読み取る。ここで、プロセッサ１０２は、ＩＬブロック１３０５により読み取ったＶＬＩＷ命令Ｖ２の実際の長さに従って、プログラムカウンタ１３０６の値を更新する。
【０１９９】
また、プロセッサ１０２は、命令デコードステージにおいて、命令ＩＳ０の圧縮／非圧縮判定ビット「０」を参照して、命令ＩＳ０が圧縮されていないと判定する。そして、プロセッサ１０２は、命令ＩＳ０を、命令Ｉｎｓｔ−ＢＵＦ［０］として命令バッファ１４３０に格納する。次に、プロセッサ１０２は、命令Ｉｎｓｔ−ＣＮＴ［０］を初期化する。初期化とは、例えば、「１」を設定することである。そして、プロセッサ１０２は、命令ＩＳの実行に使用するデータをレジスタファイル１３０３から読み取る。
【０２００】
また、図１７において、プロセッサ１０２は、命令デコードステージにおいて、命令ＩＳ１の圧縮／非圧縮判定ビット「０」を参照して、命令ＩＳ１が圧縮されていないと判定する。そして、プロセッサ１０２は、命令ＩＳ１を、命令Ｉｎｓｔ−ＢＵＦ［１］として命令バッファ１４３１に格納する。次に、プロセッサ１０２は、命令Ｉｎｓｔ−ＣＮＴ［１］を初期化する。そして、プロセッサ１０２は、命令ＩＳの実行に使用するデータをレジスタファイル１３０３から読み取る。
【０２０１】
また、図１８において、プロセッサ１０２は、命令デコードステージにおいて、命令ＩＳ２の圧縮／非圧縮判定ビット「１」を参照して、命令ＩＳ２が圧縮命令ｃであると判定する。そして、プロセッサ１０２は、命令ＩＳ２のスロット特定ビット「００」と同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビット「０」とを参照し、参照先命令ＩＳが命令ＩＳ２と同一ＶＬＩＷ命令内にあるスロット０の命令ＩＳ０であると特定する。次に、プロセッサ１０２は、特定した参照先命令ＩＳ０を用いて、命令ＩＳ２を復元する。
【０２０２】
プロセッサ１０２は、具体的には、例えば、参照先命令ＩＳ０のオペコードＯＣが「ＬＤ」を示すため、「ＬＤ」のオペランドＳＯ１，ＳＯ２，ＤＯの更新に使用する規定値「１，０，１」を特定する。規定値は、例えば、データメモリ１２０２に格納されている。
【０２０３】
そして、プロセッサ１０２は、参照先命令ＩＳ０のオペランドＳＯ１，ＳＯ２，ＤＯ「ａｄｒ１  ０  ｒ１」に規定値「１，０，１」の各々を加算した「ａｄｒ２  ０  ｒ２」を生成する。ここで、ａｄｒ２はａｄｒ１に１を加算した値とする。ｒ２はｒ１に１を加算した値とする。次に、プロセッサ１０２は、参照先命令ＩＳ０のオペコードＯＣ「ＬＤ」と、加算後のオペランドＳＯ１，ＳＯ２，ＤＯ「ａｄｒ２  ０  ｒ２」と、を連結して、圧縮元である命令ＩＳ２「ＬＤ  ａｄｒ２  ０  ｒ２」を復元する。
【０２０４】
そして、プロセッサ１０２は、復元した命令ＩＳ２を、命令Ｉｎｓｔ−ＢＵＦ［２］として命令バッファ１４３２に格納する。次に、プロセッサ１０２は、命令Ｉｎｓｔ−ＣＮＴ［２］を、参照先命令ＩＳ０に対応する命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［０］に１を加算した値に更新する。そして、プロセッサ１０２は、命令ＩＳ２の実行に使用するデータをレジスタファイル１３０３から読み取る。
【０２０５】
また、図１９において、プロセッサ１０２は、命令デコードステージにおいて、命令ＩＳ３の圧縮／非圧縮判定ビット「０」を参照して、命令ＩＳ３が圧縮されていないと判定する。そして、プロセッサ１０２は、命令ＩＳ３を、命令Ｉｎｓｔ−ＢＵＦ［３］として命令バッファ１４３３に格納する。次に、プロセッサ１０２は、命令Ｉｎｓｔ−ＣＮＴ［３］を初期化する。そして、プロセッサ１０２は、命令ＩＳの実行に使用するデータをレジスタファイル１３０３から読み取る。命令デコードステージの詳細については、図２１を用いて後述する。
【０２０６】
また、図２０において、プロセッサ１０２は、パイプラインレジスタ１３０９を経由して、復元されたＶＬＩＷ命令Ｖを命令実行ステージに転送する。次に、プロセッサ１０２は、命令実行ステージにおいて、復元されたＶＬＩＷ命令Ｖを実行する。
【０２０７】
また、プロセッサ１０２は、パイプラインレジスタ１３０８を経由して、ＶＬＩＷ命令Ｖ２を命令デコードステージに転送する。次に、プロセッサ１０２は、命令デコードステージにおいて、ＶＬＩＷ命令Ｖ２を復元する。また、プロセッサ１０２は、命令フェッチステージにおいて、プログラムカウンタ１３０６により指定されるアドレスに従って、命令メモリ１２０１からＶＬＩＷ命令Ｖ３を読み取る。
【０２０８】
以降、同様に、プロセッサ１０２は、パイプラインレジスタ１３０８〜１３１１を経由して、ＶＬＩＷ命令Ｖを５段のパイプラインステージの各々に順に転送する。このように、プロセッサ１０２は、命令フェッチステージにおいて、プログラムカウンタ１３０６を参照して命令メモリからＶＬＩＷ命令Ｖを読み取る。また、プロセッサ１０２は、命令デコードステージにおいて、圧縮ＶＬＩＷ命令ｖを復元する。また、プロセッサ１０２は、命令実行ステージにおいて、復元した命令ＩＳを実行する。また、プロセッサ１０２は、メモリアクセスステージにおいて、データメモリ１２０２から読み出したデータを受け取る。また、プロセッサ１０２は、レジスタライトバックステージにおいて、命令ＩＳの実行結果をレジスタファイル１３０３に格納し、命令ＩＳの実行を終了する。
【０２０９】
図２１は、図１６〜図２０に示した命令デコードステージにおけるスロット２の命令ＩＳに対するデコードユニット１３０１の動作を示す説明図である。図２１に、入力されたスロット２の圧縮命令ｃと、圧縮命令ｃを復元した場合の命令Ｉｎｓｔ−ＢＵＦ［２］、命令カウンタの値Ｉｎｓｔ−ＣＮＴ［２］、命令Ｏｐｅｒａｔｉｏｎ−Ｒ［２］および命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［２］の内容を示す。
【０２１０】
図１６〜図２０に示すように、デコードユニット１３０１は、圧縮ＶＬＩＷ命令ｖ１について、スロット２に対応する圧縮／非圧縮判定ビット「１」が入力されるため、スロット２に対応する命令ＩＳが、圧縮されており、圧縮命令ｃ「０００」であると判定する。次に、デコードユニット１３０１は、圧縮命令ｃ「０００」から、圧縮命令ｃと同一ＶＬＩＷ命令Ｖ内にあるスロット０の命令ＩＳ０を、参照先命令ＩＳとして特定する。
【０２１１】
そして、デコードユニット１３０１は、参照先命令ＩＳ０のオペコードＯＣが「ＬＤ」を示すため、「ＬＤ」のオペランドＳＯ１，ＳＯ２，ＤＯの更新に使用する規定値「１，０，１」を特定する。次に、デコードユニット１３０１は、参照先命令ＩＳ０のオペランドＳＯ１，ＳＯ２，ＤＯ「ａｄｒ１  ０  ｒ１」に規定値「１，０，１」の各々を加算した「ａｄｒ２  ０  ｒ２」を生成する。
【０２１２】
そして、デコードユニット１３０１は、参照先命令ＩＳ０のオペコードＯＣ「ＬＤ」と、加算後のオペランドＳＯ１，ＳＯ２，ＤＯ「ａｄｒ２  ０  ｒ２」と、を連結して、圧縮元である命令ＩＳ２「ＬＤ  ａｄｒ２  ０  ｒ２」を復元する。次に、デコードユニット１３０１は、復元した参照先命令ＩＳ２を、命令Ｉｎｓｔ−ＢＵＦ［２］として命令バッファ１４３２に格納する。次に、プロセッサ１０２は、命令カウンタの値Ｉｎｓｔ−ＣＮＴ［２］を、参照先命令ＩＳ０に対応する命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［０］に１を加算した値に更新する。
【０２１３】
また、デコードユニット１３０１は、命令Ｏｐｅｒａｔｉｏｎ−Ｒ［２］として、復元した命令ＩＳ２を出力する。以降、デコードユニット１３０１は、同様に、圧縮ＶＬＩＷ命令ｖ２〜ｖ４について、命令Ｉｎｓｔ−ＢＵＦ［２］、命令カウンタの値Ｉｎｓｔ−ＣＮＴ［２］、命令Ｏｐｅｒａｔｉｏｎ−Ｒ［２］、および命令カウンタの値Ｉｎｓｔ−ＶＣＮＴ［２］を生成する。
【０２１４】
以上説明したように、圧縮命令ｃは、圧縮元である命令ＩＳの復元に使用する命令ＩＳの位置を示す。プロセッサ１０２は、圧縮ＶＬＩＷ命令列ｖｓの或る圧縮ＶＬＩＷ命令ｖをフェッチし、圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃが示す位置の命令ＩＳから圧縮元である命令ＩＳを復元することができる。これにより、プロセッサ１０２は、圧縮命令ｃが示す位置の命令ＩＳから圧縮元である命令ＩＳを復元して、圧縮元である命令ＩＳを実行することができる。
【０２１５】
また、圧縮ＶＬＩＷ命令列ｖｓのメモリサイズが圧縮前のＶＬＩＷ命令列Ｖｓより小さい。そのため、プロセッサ１０２は、圧縮前のＶＬＩＷ命令列Ｖｓをフェッチするためのメモリアクセス回数より少ないメモリアクセス回数で、圧縮ＶＬＩＷ命令列ｖｓをフェッチすることができる。結果として、プロセッサ１０２は、メモリアクセス回数が少ないため、消費電力の低減化を図ることができる。
【０２１６】
また、プロセッサ１０２は、今回フェッチした圧縮ＶＬＩＷ命令ｖ内の非圧縮命令ＩＳを、当該非圧縮命令ＩＳの位置に対応するバッファ（図１４の例では命令バッファ１４３０〜１４３３）に格納しておく。これにより、プロセッサ１０２は、次回フェッチする圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に、バッファに格納された非圧縮命令ＩＳを使用することができる。
【０２１７】
また、プロセッサ１０２は、今回フェッチした圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃが示す位置の命令ＩＳから復元した命令ＩＳを、当該圧縮命令ｃの位置に対応するバッファ（図１４の例では命令バッファ１４３０〜１４３３）に格納しておく。これにより、プロセッサ１０２は、次回フェッチする圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に、バッファに格納された命令ＩＳを使用することができる。
【０２１８】
また、プロセッサ１０２は、図１４に示したように、バッファに格納された各命令ＩＳと、今回フェッチした圧縮ＶＬＩＷ命令ｖ内の各命令ＩＳとの中から、圧縮命令ｃが示す位置の命令ＩＳを特定し、圧縮元である命令ＩＳを復元することができる。これにより、プロセッサ１０２は、命令ＩＳの復元を回路的に実現することができる。
【０２１９】
また、プロセッサ１０２は、今回フェッチした圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃが示す位置の命令ＩＳを、当該圧縮命令ｃの位置に対応するバッファ（図１４の例では命令バッファ１４３０〜１４３３）に格納しておく。これにより、プロセッサ１０２は、次回フェッチする圧縮ＶＬＩＷ命令ｖ内の圧縮命令ｃの復元に、バッファに格納された命令ＩＳを使用することができる。
【０２２０】
また、プロセッサ１０２は、バッファに格納された各命令ＩＳと、今回フェッチした圧縮ＶＬＩＷ命令ｖ内の各命令ＩＳとの中から、圧縮命令ｃが示す位置の命令ＩＳを特定し、圧縮元である命令ＩＳを復元することができる。これにより、プロセッサ１０２は、命令ＩＳの復元を回路的に実現することができる。
【０２２１】
また、プロセッサ１０２は、圧縮ＶＬＩＷ命令ｖ内の各命令ＩＳの位置に対応し、オペコードＯＣが同一でかつオペランドが規則的に連続する連続回数を示す命令カウンタ（図１４の例では命令カウンタ１４４０〜１４４３）を有する。プロセッサ１０２は、フェッチしたＶＬＩＷ命令Ｖ内の非圧縮命令ＩＳの位置に対応する命令カウンタを初期化する。また、プロセッサ１０２は、命令カウンタを、フェッチしたＶＬＩＷ命令Ｖ内の圧縮命令ｃの位置に対応する命令カウンタに１加算した値に更新する。これにより、プロセッサ１０２は、命令ＩＳの復元に、命令カウンタを使用することができる。
【０２２２】
また、プロセッサ１０２は、参照先命令ＩＳのオペランドを抽出し、参照先命令ＩＳのオペコードＯＣに対応する規定値を抽出したオペランドに加算した加算後のオペランドを、参照先命令ＩＳのオペコードＯＣに付与する。これにより、プロセッサ１０２は、圧縮元である命令ＩＳを復元することができる。
【０２２３】
また、プロセッサ１０２は、参照先命令ＩＳのオペランドを抽出し、参照先命令ＩＳのオペコードＯＣに対応する規定値と命令カウンタとを用いて抽出したオペランドを更新した更新後のオペランドを、参照先命令ＩＳのオペコードＯＣに付与する。これにより、プロセッサ１０２は、圧縮元である命令ＩＳを復元することができる。
【０２２４】
圧縮装置１０１は、ＶＬＩＷ命令列Ｖｓの命令ＩＳを、当該命令ＩＳの復元に使用する参照先命令ＩＳの位置を示す圧縮命令ｃに変換する。これにより、圧縮装置１０１は、ＶＬＩＷ命令列Ｖｓを、圧縮ＶＬＩＷ命令列ｖｓに変換することができる。結果として、圧縮装置１０１は、プロセッサ１０２が有するＶＬＩＷ命令列Ｖｓの格納に使用される記憶装置の物理的サイズの増大を抑制し、消費電力の増大を抑制することができる。また、プロセッサ１０２は、圧縮命令ｃにより参照先命令ＩＳを特定し、参照先命令ＩＳから圧縮元である命令ＩＳを復元し、圧縮元である命令ＩＳを実行することができる。
【０２２５】
また、圧縮装置１０１は、ＶＬＩＷ命令列Ｖｓの命令ＩＳを、スロット特定ビットと同一ＶＬＩＷ命令内／非同一ＶＬＩＷ命令内判定ビットとを含む圧縮命令ｃに変換する。これにより、圧縮装置１０１は、所定ビットの命令ＩＳ（図２の例では３２ビット）を、４ビットまで小さくすることができる。また、プロセッサ１０２は、４ビットの圧縮命令ｃにより、圧縮元である命令ＩＳを含むＶＬＩＷ命令Ｖの各命令ＩＳと当該ＶＬＩＷ命令Ｖの直前のＶＬＩＷ命令Ｖの各命令ＩＳとの中から、参照先命令ＩＳを特定する。次に、プロセッサ１０２は、特定した参照先命令ＩＳから圧縮元である命令ＩＳを復元し、圧縮元である命令ＩＳを実行することができる。
【０２２６】
また、圧縮装置１０１は、圧縮ＶＬＩＷ命令列ｖｓ内の圧縮／非圧縮判定ビットと非圧縮命令ＩＳと圧縮命令ｃとを連結しておくことにより、圧縮ＶＬＩＷ命令列ｖｓに空き領域がなくなるようにする。これにより、プロセッサ１０２は、メモリアクセス回数の低減化を図り、消費電力の低減化を図ることができる。
【０２２７】
なお、本実施の形態で説明した圧縮方法は、予め用意された圧縮プログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本圧縮プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本圧縮プログラムは、インターネットなどのネットワークを介して配布してもよい。
【０２２８】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２２９】
（付記１）メモリにアクセス可能なプロセッサであって、
圧縮元であるＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令内の或る命令を圧縮した圧縮命令、前記ＶＬＩＷ命令内の非圧縮命令、および前記圧縮命令の前記ＶＬＩＷ命令内での位置を示す圧縮情報が含まれている圧縮ＶＬＩＷ命令列であって、前記圧縮命令が、前記或る命令から前記或る命令の復元に使用される命令の位置を示す情報に変換された命令であり、前記復元に使用される命令が、前記ＶＬＩＷ命令および前記ＶＬＩＷ命令の先行ＶＬＩＷ命令に含まれ、かつ、前記或る命令とオペコードが同一でかつ前記或る命令とのオペランド間に連続性がある命令である前記圧縮ＶＬＩＷ命令列を記憶する前記メモリから、或る圧縮ＶＬＩＷ命令をフェッチして、前記或る圧縮ＶＬＩＷ命令における圧縮情報に基づいて、前記或る圧縮ＶＬＩＷ命令の中から前記圧縮命令および前記非圧縮命令のうち少なくともいずれかを特定して、転送するフェッチ部と、
前記フェッチ部によって前記圧縮命令が転送された場合、前記或る圧縮ＶＬＩＷ命令および前記或る圧縮ＶＬＩＷ命令に先行する圧縮ＶＬＩＷ命令のうち少なくとも前記或る圧縮ＶＬＩＷ命令の中から、前記圧縮命令が示す位置に該当する命令を選択し、選択した命令のオペコードおよびオペランドの連続性に基づいて、前記或る命令を復元して、復元された前記或る命令および前記非圧縮命令を実行する実行部に転送するとともに、前記フェッチ部によって前記非圧縮命令が転送された場合、前記非圧縮命令を前記実行部に転送するデコード部と、
を有することを特徴とするプロセッサ。
【０２３０】
（付記２）前記デコード部は、
前記ＶＬＩＷ命令内での各命令の位置に対応する命令バッファ群を有し、
前記フェッチ部によって前記圧縮命令が転送された場合、前記命令バッファ群のうち、復元された前記或る命令の位置に対応する命令バッファに、前記或る命令を保持するとともに、前記フェッチ部によって前記非圧縮命令が転送された場合、前記命令バッファ群のうち、前記非圧縮命令の位置に対応する命令バッファに前記非圧縮命令を保持し、
前記フェッチ部によって後続の圧縮ＶＬＩＷ命令がフェッチされ、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令が転送された場合、前記命令バッファ群に保持されたＶＬＩＷ命令と前記後続の圧縮ＶＬＩＷ命令との中から、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令が示す位置に該当する命令を選択し、選択した命令のオペコードおよびオペランドの連続性に基づいて、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令の圧縮元である命令を復元することを特徴とする付記１に記載のプロセッサ。
【０２３１】
（付記３）前記デコード部は、
前記選択した命令から前記オペコードと前記オペランドを抽出し、前記オペコードに対応する規定値を前記オペランドに加算した加算後のオペランドと、前記オペコードと、を連結することにより、前記或る命令を復元することを特徴とする付記１または２に記載のプロセッサ。
【０２３２】
（付記４）前記デコード部は、
前記ＶＬＩＷ命令内での各命令の位置に対応する命令バッファ群を有し、
前記フェッチ部によって前記圧縮命令が転送された場合、前記命令バッファ群のうち、復元された前記或る命令の位置に対応する命令バッファに、前記或る命令の復元に使用した命令を保持するとともに、前記フェッチ部によって前記非圧縮命令が転送された場合、前記命令バッファ群のうち、前記非圧縮命令の位置に対応する命令バッファに前記非圧縮命令を保持し、
前記フェッチ部によって後続の圧縮ＶＬＩＷ命令がフェッチされ、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令が転送された場合、前記命令バッファ群に保持されたＶＬＩＷ命令と前記後続の圧縮ＶＬＩＷ命令との中から、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令が示す位置に該当する命令を選択し、選択した命令のオペコードおよびオペランドの連続性に基づいて、前記後続の圧縮ＶＬＩＷ命令内の圧縮命令の圧縮元である命令を復元することを特徴とする付記１に記載のプロセッサ。
【０２３３】
（付記５）前記デコード部は、
前記ＶＬＩＷ命令内の各命令の位置に対応する命令カウンタ群を有し、
前記フェッチ部によって前記非圧縮命令が転送された場合、前記非圧縮命令の位置に対応する命令カウンタの値を初期値に設定し、前記フェッチ部によって前記圧縮命令が転送された場合、前記或る命令の位置に対応する命令カウンタの値を、前記選択した命令の位置に対応する命令カウンタの値に１を加算した加算後の値に更新することを特徴とする付記４に記載のプロセッサ。
【０２３４】
（付記６）前記デコード部は、
前記選択した命令から前記オペコードと前記オペランドを抽出し、前記オペコードに対応する規定値と前記選択した命令の位置に対応する命令カウンタの値との積を前記オペランドに加算した加算後のオペランドと、前記オペコードと、を連結することにより、前記或る命令を復元する復元処理を実行することを特徴とする付記５に記載のプロセッサ。
【０２３５】
（付記７）コンピュータに、
ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令列の中の圧縮対象ＶＬＩＷ命令から圧縮対象命令を取得し、
前記圧縮対象ＶＬＩＷ命令および前記圧縮対象ＶＬＩＷ命令の先行ＶＬＩＷ命令のいずれかに含まれる前記圧縮対象命令以外のいずれかの命令のオペコードと前記圧縮対象命令のオペコードとが同一であり、かつ、前記いずれかの命令のオペランドと前記圧縮対象命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記圧縮対象命令を前記いずれかの命令の位置を示す圧縮命令に変換する、
処理を実行させることを特徴とする圧縮プログラム。
【０２３６】
（付記８）前記変換する処理では、
同一かつ連続性ありと判断された場合、前記圧縮対象命令に、前記いずれかの命令が前記圧縮対象ＶＬＩＷ命令に含まれるか否かを示す第１の復元情報および前記いずれかの命令を含むＶＬＩＷ命令内の前記いずれかの命令の位置を示す第２の復元情報を含む圧縮命令と、前記圧縮対象命令が圧縮されていることを示す圧縮情報と、を付与し、前記圧縮対象命令のオペコードおよびオペランドを削除することを特徴とする付記７に記載の圧縮プログラム。
【０２３７】
（付記９）前記圧縮対象ＶＬＩＷ命令の各圧縮対象命令から得られた圧縮情報群の末尾に、前記圧縮対象ＶＬＩＷ命令のうち非圧縮命令と圧縮命令とを連結する、
処理を前記コンピュータに実行させることを特徴とする付記７または８に記載の圧縮プログラム。
【０２３８】
（付記１０）ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令列の中の圧縮対象ＶＬＩＷ命令から圧縮対象命令を取得する取得部と、
前記圧縮対象ＶＬＩＷ命令および前記圧縮対象ＶＬＩＷ命令の先行ＶＬＩＷ命令のいずれかに含まれる前記圧縮対象命令以外のいずれかの命令のオペコードと前記取得部によって取得された圧縮対象命令のオペコードとが同一であり、かつ、前記いずれかの命令のオペランドと前記圧縮対象命令のオペランドとの間に連続性があるか否かを判断する判断部と、
前記判断部によって同一かつ連続性ありと判断された場合、前記圧縮対象命令を前記いずれかの命令の位置を示す圧縮命令に変換する変換部と、
を有することを特徴とする圧縮装置。
【０２３９】
（付記１１）コンピュータが、
ＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）命令列の中の圧縮対象ＶＬＩＷ命令から圧縮対象命令を取得し、
前記圧縮対象ＶＬＩＷ命令および前記圧縮対象ＶＬＩＷ命令の先行ＶＬＩＷ命令のいずれかに含まれる前記圧縮対象命令以外のいずれかの命令のオペコードと前記圧縮対象命令のオペコードとが同一であり、かつ、前記いずれかの命令のオペランドと前記圧縮対象命令のオペランドとの間に連続性があるか否かを判断し、
同一かつ連続性ありと判断された場合、前記圧縮対象命令を前記いずれかの命令の位置を示す圧縮命令に変換する、
処理を実行することを特徴とする圧縮方法。
【符号の説明】
【０２４０】
１０１  圧縮装置
１０２  プロセッサ
４０１  取得部
４０２  判断部
４０３  変換部
４０４  保存部
４０５  出力部
１３０１  デコードユニット
【図１】
2013257670.tif 000003
【図２】
2013257670.tif 000004
【図３】
2013257670.tif 000005
【図４】
2013257670.tif 000006
【図５】
2013257670.tif 000007
【図６】
2013257670.tif 000008
【図７】
2013257670.tif 000009
【図８】
2013257670.tif 000010
【図９】
2013257670.tif 000011
【図１０】
2013257670.tif 000012
【図１１】
2013257670.tif 000013
【図１２】
2013257670.tif 000014
【図１３】
2013257670.tif 000015
【図１４】
2013257670.tif 000016
【図１５】
2013257670.tif 000017
【図１６】
2013257670.tif 000018
【図１７】
2013257670.tif 000019
【図１８】
2013257670.tif 000020
【図１９】
2013257670.tif 000021
【図２０】
2013257670.tif 000022
【図２１】
2013257670.tif 000023