(57)【要約】【課題】命令を圧縮することによりプログラムメモリの容量を削減し、圧縮した命令を小さな回路規模で伸張することができる圧縮命令処理装置を提供することを課題とする。【解決手段】圧縮命令処理装置は、圧縮対象の命令コードと参照命令コードとの差分コードを含む圧縮命令コードを伸張し、伸張した命令コードを出力する圧縮命令伸張回路（１０３）と、前記圧縮命令伸張回路により伸張された命令コードを記憶する命令バッファ（１０４）と、前記圧縮命令伸張回路により伸張された命令コードを実行する実行部（１０９）とを有し、前記圧縮命令伸張回路は、前記命令バッファ内の命令コードを前記参照命令コードとして入力し、前記参照命令コード及び前記圧縮命令コード内の差分コードを加算することにより、前記伸張した命令コードを出力する。【選択図】図１
2012098893.tif 000002
【特許請求の範囲】
【請求項１】
圧縮対象の命令コードと参照命令コードとの差分コードを含む圧縮命令コードを伸張し、伸張した命令コードを出力する圧縮命令伸張回路と、
前記圧縮命令伸張回路により伸張された命令コードを記憶する命令バッファと、
前記圧縮命令伸張回路により伸張された命令コードを実行する実行部とを有し、
前記圧縮命令伸張回路は、前記命令バッファ内の命令コードを前記参照命令コードとして入力し、前記参照命令コード及び前記圧縮命令コード内の差分コードを加算することにより、前記伸張した命令コードを出力することを特徴とする圧縮命令処理装置。
【請求項２】
前記命令バッファは、複数の命令コードを記憶する複数のエントリを有し、
前記圧縮命令コードは、前記参照命令コードが格納されている前記命令バッファ内のエントリの番号を含み、
前記圧縮命令伸張回路は、前記圧縮命令コード内の前記エントリの番号が示す前記命令バッファのエントリから前記参照命令コードを入力し、前記参照命令コード及び前記圧縮命令コード内の差分コードを加算することを特徴とする請求項１記載の圧縮命令処理装置。
【請求項３】
前記圧縮命令コードは、前記圧縮対象の命令コードのフィールド毎の差分コードを含み、
前記圧縮命令伸張回路は、前記フィールド毎に前記加算を行うことを特徴とする請求項１又は２記載の圧縮命令処理装置。
【請求項４】
前記実行部は、次に実行する命令が非同期処理であるときには、前記圧縮命令伸張回路により伸張された命令コードを前記命令バッファに書き込む処理を禁止することを特徴とする請求項１〜３のいずれか１項に記載の圧縮命令処理装置。
【請求項５】
前記圧縮命令コードは、命令コードが圧縮されていることを示す圧縮命令識別情報を含み、
前記圧縮命令伸張回路は、入力された命令コード内に前記圧縮命令識別情報が存在するときには前記伸張された命令コードを出力し、入力された命令コード内に前記圧縮命令識別情報が存在しないときには前記入力された非圧縮の命令コードをそのまま出力することを特徴とする請求項１〜４のいずれか１項に記載の圧縮命令処理装置。
【請求項６】
前記実行部は、前記命令バッファを介して、前記圧縮命令伸張回路により伸張された命令コードを実行することを特徴とする請求項１〜５のいずれか１項に記載の圧縮命令処理装置。
【請求項７】
前記実行部は、前記命令バッファを介さずに、前記圧縮命令伸張回路により伸張された命令コードを実行することを特徴とする請求項１〜５のいずれか１項に記載の圧縮命令処理装置。
【請求項８】
命令コードを記憶するための命令ＦＩＦＯと、
圧縮対象の命令コードを前記命令ＦＩＦＯに順次格納し、前記圧縮対象の命令コードを圧縮するために、前記命令ＦＩＦＯ内の命令コードのうちの１個を参照命令コードとして選択する選択部と、
前記圧縮対象の命令コードと前記選択部により選択された参照命令コードとの差分の情報を含む圧縮命令コードを生成する生成部と
を有することを特徴とする圧縮命令生成装置。
【請求項９】
さらに、前記圧縮対象の命令コードのアドレスと前記圧縮命令コードのアドレスとの対応関係を記録し、前記圧縮命令コードが分岐命令であるときには前記分岐命令の分岐先アドレスを、前記圧縮対象の命令コードのアドレスから前記圧縮命令コードのアドレスに変換する変換部を有することを特徴とする請求項８記載の圧縮命令生成装置。
【請求項１０】
前記命令ＦＩＦＯは、複数の命令コードを記憶する複数のエントリを有し、
前記生成部は、前記参照命令コードが格納されている前記命令ＦＩＦＯ内のエントリの番号を含む前記圧縮命令コードを生成することを特徴とする請求項８又は９記載の圧縮命令生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮命令処理装置及び圧縮命令生成装置に関する。
【背景技術】
【０００２】
プログラムメモリ容量の削減と、プログラムのフェッチによるバスアクセスの低減のため、ＣＰＵが実行するプログラムをコード圧縮してメモリに格納し、ＣＰＵが命令実行時に圧縮されたプログラムを動的に展開（伸張）する多くの取り組みが行われている。プログラム圧縮の手法には、大きく統計的な手法を用いたものと、辞書式な手法を用いたものがある。前者には、ハフマン符号を用いてキャッシュライン単位で圧縮を掛けるもの等があり、後者には、複数の命令を１命令に置き換えるもの等がある。
【０００３】
統計的な手法を用いたものは、キャッシュライン単位でビットデータを扱うため各ラインの圧縮解除は独立して可能であり、またキャッシュには固定長コードが展開されるためＣＰＵはコード圧縮を意識しないでよい等のメリットがある反面、可変長コードを復号するために辞書式な手法より時間が掛かる点や、キャッシュラインが固定長であるのに対してメモリには可変長コードが格納されているため、アドレス変換のための索引テーブルが必要になる点がデメリットとなる。辞書式な手法では、辞書テーブルに登録する命令数の多さがネックとなる。
【０００４】
また、マイクロプロセッサの処理対象であるプログラムを構成する命令を保持する記憶装置を備え、この記憶装置は、複数ステップの命令を各命令に対応したインデックスを用いて１つの命令に多重化した圧縮命令を保持可能とされ、さらに、圧縮命令の各々のインデックスともとの展開命令との関係を示す命令対応表と、記憶装置から圧縮命令を取得したときに命令対応表を用いてインデックスから展開命令への伸長を行うとともに、その圧縮命令の処理中は記憶装置への電力供給の停止制御を行う手段とを備えたマイクロプロセッサにおける命令供給装置が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１４２６９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
圧縮命令を伸張する際に、辞書テーブル又は命令対応表を用いると、回路規模が大きくなってしまう。
【０００７】
本発明の目的は、命令を圧縮することによりプログラムメモリの容量を削減し、圧縮した命令を小さな回路規模で伸張することができる圧縮命令処理装置及び圧縮命令生成装置を提供することである。
【課題を解決するための手段】
【０００８】
圧縮命令処理装置は、圧縮対象の命令コードと参照命令コードとの差分コードを含む圧縮命令コードを伸張し、伸張した命令コードを出力する圧縮命令伸張回路と、前記圧縮命令伸張回路により伸張された命令コードを記憶する命令バッファと、前記圧縮命令伸張回路により伸張された命令コードを実行する実行部とを有し、前記圧縮命令伸張回路は、前記命令バッファ内の命令コードを前記参照命令コードとして入力し、前記参照命令コード及び前記圧縮命令コード内の差分コードを加算することにより、前記伸張した命令コードを出力する。
【０００９】
また、圧縮命令生成装置は、命令コードを記憶するための命令ＦＩＦＯと、圧縮対象の命令コードを前記命令ＦＩＦＯに順次格納し、前記圧縮対象の命令コードを圧縮するために、前記命令ＦＩＦＯ内の命令コードのうちの１個を参照命令コードとして選択する選択部と、前記圧縮対象の命令コードと前記選択部により選択された参照命令コードとの差分の情報を含む圧縮命令コードを生成する生成部とを有する。
【発明の効果】
【００１０】
命令を圧縮することによりプログラムメモリの容量を削減することができる。また、圧縮した命令を小さな回路規模で伸張することができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施形態による圧縮命令処理装置の構成例を示す図である。
【図２】第２の実施形態による圧縮命令処理装置の構成例を示す図である。
【図３】図３（Ａ）〜（Ｇ）は圧縮命令コードの生成方法を説明するための図である。
【図４】図４（Ａ）〜（Ｃ）は図３（Ｇ）の圧縮命令コードの具体的な生成方法を示す図である。
【図５】圧縮命令伸張回路の構成例を示す図である。
【図６】第３の実施形態による圧縮命令生成装置のハードウェア構成例を示す図である。
【図７】圧縮命令生成装置による圧縮命令コードの生成方法を示すフローチャートである。
【図８】命令圧縮処理部の処理を示すフローチャートである。
【発明を実施するための形態】
【００１２】
（第１の実施形態）
図１は、第１の実施形態による圧縮命令処理装置の構成例を示す図である。圧縮命令処理装置は、命令メモリ１０１、第１の命令バッファ１０２、圧縮命令伸張回路１０３、第２の命令バッファ１０４、セレクタ１０５〜１０７、インバータ１０８及び実行部１０９を有する。命令メモリ１０１は、例えば命令キャッシュメモリであり、圧縮命令コードを記憶する。第１の命令バッファ１０２は、命令メモリ１０１から読み出された圧縮命令コードＳ１１１をバッファリングし、圧縮命令コードＳ１１２を出力する。圧縮命令伸張回路１０３は、圧縮命令コードＳ１１２を伸張し、伸張した命令コードＳ１１３を出力する。ライトイネーブル信号ＷＥが「１」になると、第２のバッファ１０４には命令コードＳ１１３が書き込まれる。第２の命令バッファ１０４は、命令コードＳ１１３をバッファリングし、セレクタ１０６を介して命令コードＳ１１５を出力する。セレクタ１０７は、非同期処理信号Ｓ１１７が「１」のときには命令コードＳ１１３を選択し、非同期処理信号Ｓ１１７が「０」のときには命令コードＳ１１５を選択し、命令コードＳ１１６を出力する。実行部Ｓ１１６は、命令コードＳ１１６を実行し、次に実行する命令コードが非同期処理であるときには非同期処理信号Ｓ１１７を「１」にし、次に実行する命令コードが同期処理であるときには非同期処理信号Ｓ１１７を「０」にする。非同期処理は、非同期に発生する命令コードであり、例えば、割り込み処理、トラップ処理、例外処理及び条件分岐処理等である。同期処理は、非同期処理以外の通常の処理であり、順次実行される命令である。インバータ１０８は、非同期処理信号Ｓ１１７を論理反転し、ライトイネーブル信号ＷＥを出力する。圧縮命令伸張回路１０３は、圧縮命令コードＳ１１２に応じて、選択信号ＳＥＬを出力する。セレクタ１０５は、選択信号ＳＥＬに応じて、第２の命令バッファ１０４内の命令コードを選択し、命令コードＳ１１４を圧縮命令伸張回路１０３に出力する。圧縮命令伸張回路１０３は、命令コードＳ１１４を参照し、圧縮命令コードＳ１１２を伸張する。
【００１３】
圧縮命令コードＳ１１１は、圧縮対象の命令コードと参照する命令コードＳ１１４との差分を取ることにより生成される。本実施形態では、第２の命令バッファ１０４に蓄積された先行命令コードＳ１１４と圧縮対象の命令コードとの差分により、圧縮命令コードＳ１１１を生成する。
【００１４】
第２の命令バッファ１０４は、複数の命令コードＳ１１３を記憶する複数のエントリを有する。例えば、第２の命令バッファ１０４が８個のエントリを有する場合では、圧縮したい命令の前に実行される命令を８個まで第２の命令バッファ１０４に蓄積しておく。そして、圧縮したい命令が第１の命令バッファ１０２に格納された次のサイクルで、圧縮命令伸張回路１０３は、第２の命令バッファ１０４内の選択された命令コードＳ１１４を参照し、圧縮命令コードＳ１１２を伸張し、伸張された命令コードＳ１１３を出力する。
【００１５】
非同期に発生する割り込み処理、トラップ処理、及び例外処理等の発生時には、プログラムシーケンスは割り込みハンドラに遷移する。この場合は、非同期処理信号Ｓ１１７が「１」になり、第２の命令バッファ１０４の内容は保持され、セレクタ１０７は、命令コードＳ１１３を選択し、実行部１０７へ命令コードＳ１１３を直接供給する。
【００１６】
図３（Ａ）〜（Ｇ）は、圧縮命令コードＳ１１１の生成方法を説明するための図である。図３（Ａ）の非圧縮命令コードを圧縮することにより、図３（Ｃ）の圧縮命令コードを生成する。
【００１７】
図３（Ａ）は非圧縮命令コード（圧縮対象の命令コード）のフォーマット例を示す。非圧縮命令コードは、例えば、８ビットのオペレーションコード（オペコード）３０１、４ビットの第１のオペランド３０２及び４ビットの第２のオペランド３０３の３個のフィールドを有する。
【００１８】
図３（Ｂ）は命令コードのアセンブラ、オペコード３０１、及びオペレーションを示す。ここでは、同期処理の命令コードを示す。例えば、アセンブラの「ａｄｄ  ａ，ｂ」の場合、オペレコード３０１が「ａｄｄ」であり、第１のオペランドが「ａ」であり、第２のオペランド３０３が「ｂ」である。「ａｄｄ」のオペコード３０１は「００００００００」で表わされ、オペレーションは「ａ＝ｂ＋ｃ」の演算を行う。
【００１９】
図３（Ｃ）は、圧縮命令コードＳ１１１のフォーマット例を示す図である。圧縮命令コードＳ１１１は、圧縮命令識別ビット（圧縮命令識別情報）３１１、オペコード差分コード３１２、第１のオペランド差分コード３１３、第２のオペランド差分コード３１４、及び命令バッファエントリ番号コード３１５を有する。オペコード差分コード３１２、第１のオペランド差分コード３１３及び第２のオペランド差分コード３１４は、省略されることがある。
【００２０】
図３（Ｄ）は、圧縮命令識別ビット３１１を説明するための図である。圧縮命令識別ビット３１１は、０が非圧縮命令コードであることを示し、１が圧縮命令コードであることを示す。圧縮命令識別ビット３１１の「１」は、命令コードが圧縮されていることを示す圧縮命令識別情報である。
【００２１】
図３（Ｅ）は、オペコード差分コード３１２、第１のオペランド差分コード３１３及び第２のオペランド差分コード３１４を説明するための図である。オペコード差分コード３１２、第１のオペランド差分コード３１３及び第２のオペランド差分コード３１４は、圧縮対象の命令コードのフィールド毎の差分コード（差分情報）であり、圧縮対象の命令コードと参照命令コードＳ１１４との間におけるオペコード３０１、第１のオペランド３０２及び第２のオペランド３０３の差分を示す。差分コード３１２〜３１４は、それぞれ差分値が０、１、−１、２、−２のときの差分コードを示し、差分値が０のときには省略できる。差分コード３１２〜３１４は、最終ビットが０になるので、各フィールドの終わりを識別することができる。
【００２２】
図３（Ｆ）は、命令バッファエントリ番号コード３１５を説明するための図である。第２の命令バッファ１０４は、例えば８個のエントリを有し、８個のエントリの番号を０〜７で表す。圧縮対象の命令コードは、第２の命令バッファ１０４の中で自己の命令コードに最も近い命令コードを参照命令コードＳ１１４として選択することができる。その参照命令コードＳ１１４が格納されている第２の命令バッファ１０４内のエントリの番号が、命令バッファエントリ番号コード３１５となる。
【００２３】
図３（Ｇ）は、圧縮前の命令コード（非圧縮命令コード）３２１及び圧縮後の圧縮命令コード３２２の例を示す図である。１番目の命令コード「ｍｏｖ  ０，＠４」は、第２の命令バッファ１０４が空であるので、圧縮前の命令コード３２１を圧縮せずにそのまま圧縮後の命令コード３２２にする。この場合、非圧縮であるため、命令コード３２２の先頭の圧縮命令識別ビット３１１は０になる。すなわち、命令コードが圧縮されていることを示す圧縮命令識別ビット３１１の「１」が存在しない。
【００２４】
２番目の命令コード「ｍｏｖ  １，＠５」は、第２の命令バッファ１０４内の１番目の命令コード「ｍｏｖ  ０，＠４」を参照命令コードＳ１１４として圧縮する。この場合、圧縮を行うので、圧縮命令識別ビット３１１が「１」になる。すなわち、命令コードが圧縮されていることを示す圧縮命令識別ビット３１１の「１」が存在する。圧縮対象の命令コード「ｍｏｖ  １，＠５」のオペコード３０１が「０００１０００１」であり、参照命令コード「ｍｏｖ  ０，＠４」のオペコード３０１が「０００１００００」であるので、オペコード差分コード３１２は両者の差分値が１であるので「１１０」になる。また、圧縮対象の命令コード「ｍｏｖ  １，＠５」の第１のオペランド３０２が「０１００」であり、参照命令コード「ｍｏｖ  ０，＠４」の第１のオペランド３０２が「０１００」であるので、第１のオペランド差分コード３１３は両者の差分値が０であるので省略される。また、圧縮対象の命令コード「ｍｏｖ  １，＠５」の第２のオペランド３０３が「００００」であり、参照命令コード「ｍｏｖ  ０，＠４」の第２のオペランド３０３が「００００」であるので、第２のオペランド差分コード３１４は両者の差分値が０であるので省略される。また、参照命令コード「ｍｏｖ  ０，＠４」は、第２の命令バッファ１０４内のエントリ番号＝０に格納されているので、命令バッファエントリ番号コード３１５は「００００」になる。
【００２５】
同様に、３番目の命令コード「ａｄｄ  ０，１」は、第２の命令バッファ１０４内の類似の命令コードがないため、圧縮前の命令コード３２１を圧縮せずにそのまま圧縮後の命令コード３２２にする。この場合、非圧縮であるため、命令コード３２２の先頭の圧縮命令識別ビット３１１は０になる。
【００２６】
同様に、４番目の命令コード「ｍｏｖ  ＠６，０」は、第２の命令バッファ１０４内の２番目の命令コード「ｍｏｖ  １，＠５」を参照命令コードＳ１１４として圧縮する。この場合、圧縮を行うので、圧縮命令識別ビット３１１が「１」になる。オペコード差分コード３１２は、両者の差分値が１であるので「１１０」になる。第１のオペランド差分コード３１３は、両者の差分値が２であるので「１１１１０」になる。第２のオペランド差分コード３１４は、両者の差分値が０であるので省略される。また、参照命令コード「ｍｏｖ  １，＠５」は、第２の命令バッファ１０４内のエントリ番号＝１に格納されているので、命令バッファエントリ番号コード３１５は「０００１」になる。
【００２７】
図４（Ａ）〜（Ｃ）は、図３（Ｇ）の圧縮命令コードの具体的な生成方法を示す図である。図４（Ａ）は、図３（Ｇ）と同じ命令（１）〜（４）についての圧縮前の命令コード４０１及び圧縮後の命令コード４０２を示す。図４（Ｂ）は命令（１）〜（４）についての第１の命令バッファ１０２及び第２の命令バッファ１０４の時間推移を示す。ここで、バッファＢ１−ｎは第１の命令バッファ１０２のエントリ番号ｎを表し、バッファＢ２−ｎは第２の命令バッファ１０４のエントリ番号ｎを表す。図４（Ｃ）は、各時刻の命令（１）〜（４）の圧縮処理を示す。
【００２８】
圧縮命令（１）〜（４）は、図１に示すように、順番に命令メモリ１０１から第１の命令バッファ１０２にフェッチされ、第２の命令バッファ１０４に順次送られるため、圧縮命令コードの生成過程においても、このシーケンスを模倣する。
【００２９】
時刻ｔ１では、命令（１）が第１の命令バッファ１０２のエントリ番号１（Ｂ１-１）に格納され、命令（２）が第１の命令バッファ１０２のエントリ番号０（Ｂ１-０）に格納されるものとし、このとき第２の命令バッファ１０４にはまだ命令が格納されていないものとする。時刻ｔ１では、第２の命令バッファ１０４が空であるため、命令（１）が参照できる命令は無く、圧縮後の命令コード４０２は、非圧縮の命令コードのままとする。
【００３０】
時刻ｔ２では、命令（２）が第１の命令バッファ１０２のエントリ番号１（Ｂ１−１）に格納され、命令（１）が第２の命令バッファ１０４のエントリ番号０（Ｂ２−０）に格納されるため、命令（２）は命令（１）を参照命令候補にできる。命令（１）を参照命令コードとした場合の圧縮命令コードは圧縮前の命令コードを基に圧縮可能であることから、圧縮後の命令コードは、命令（１）を参照命令コードとして生成する。命令（２）の圧縮方法は、図３（Ｇ）と同じである。
【００３１】
時刻ｔ３では、命令（３）が第１の命令バッファ１０２のエントリ番号１（Ｂ１−１）に格納され、第２の命令バッファ１０４には、命令（１）及び命令（２）が入ることになるため、命令（３）は命令（２）及び命令（１）を参照命令候補にできる。これらの参照命令候補を使用した圧縮後の命令コードは、圧縮前の命令コードよりビット数が多くなってしまうため、圧縮命令コードとしては、圧縮せずに元の命令コードを採用する。
【００３２】
時刻ｔ４では、命令（４）が第１の命令バッファ１０２のエントリ番号１（Ｂ１−１）に格納され、第２の命令バッファ１０４には、命令（１）、命令（２）及び命令（３）が入ることになるため、命令（４）は命令（３）、命令（２）及び命令（１）を参照命令候補にできる。命令（２）を参照命令コードとした場合、命令（４）の圧縮率が最も高くなるため、命令（２）を参照命令コードとして命令（４）を圧縮する。命令（４）の圧縮方法は、図３（Ｇ）と同じである。
【００３３】
以下、順次このように図１のハードウェアの動作を模倣しながら、圧縮命令コードの生成を行えばよい。
【００３４】
次に、図１の圧縮命令処理装置の動作を説明する。命令メモリ１０１は、圧縮命令コード及び非圧縮命令コードを記憶する。第１の命令バッファ１０２は、命令メモリ１０１から読み出された命令コードＳ１１１をバッファリングし、命令コードＳ１１２を出力する。圧縮命令伸張回路１０３は、参照命令コードＳ１１４を参照し、圧縮命令コードＳ１１２を伸張し、伸張した命令コードＳ１１３を出力する。
【００３５】
図５は、圧縮命令伸張回路１０３の構成例を示す図である。デコーダ５０１は、命令コードＳ１１２の図３（Ｃ）の各フィールドを解読し、圧縮命令識別ビット３１１、オペコード差分コード３１２、第１のオペランド差分コード３１３、第２のオペランド差分コード３１４、及び命令バッファエントリ番号コード３１５を出力する。
【００３６】
命令バッファエントリ番号コード３１５は、選択信号ＳＥＬとして図１のセレクタ１０５に出力される。図１において、セレクタ１０５は、選択信号ＳＥＬが示す第２の命令バッファ１０４のエントリ番号に格納されている命令コードＳ１１４を圧縮命令伸張回路１０３に出力する。
【００３７】
図５に示すように、参照命令コードＳ１１４は、オペコード３０１、第１のオペランド３０２及び第２のオペランド３０３に分離される。加算器５０２は、参照命令コードＳ１１４のオペコード３０１及び圧縮命令コードＳ１１２のオペコード差分コード３１２を加算し、伸張後のオペコードＳ５３１を出力する。加算器５０３は、参照命令コードＳ１１４の第１のオペランド３０２及び圧縮命令コードＳ１１２の第１のオペランド差分コード３１３を加算し、伸張後の第１のオペランドＳ５３２を出力する。加算器５０４は、参照命令コードＳ１１４の第２のオペランド３０３及び圧縮命令コードＳ１１２の第２のオペランド差分コード３１４を加算し、伸張後の第２のオペランドＳ５３３を出力する。セレクタ５０５は、入力した命令コードＳ１１２の圧縮命令識別ビット３１１が「１」のときには、オペコードＳ５３１、第１のオペランドＳ５３２及び第２のオペランドＳ５３３を伸張後の命令コードＳ１１３として出力する。伸張後の命令コードＳ１１３は、圧縮前の命令コードと同じである。また、セレクタ５０５は、入力した命令コードＳ１１２の圧縮命令識別ビット３１１が「０」のときには、命令コードＳ１１２が非圧縮命令コードであることを示すので、入力した非圧縮の命令コードＳ１１２をそのまま命令コードＳ１１３として出力する。
【００３８】
図１において、実行部１０９は、次に実行する命令が非同期処理である場合には、非同期で発生する命令を処理するために「１」の非同期処理信号Ｓ１１７を出力し、次に実行する命令が同期処理である場合には、第２の命令バッファ１０４にフェッチされている命令を処理するために「０」の非同期処理信号Ｓ１１７を出力する。非同期処理は、例えば、割り込み処理、トラップ処理、例外処理及び条件分岐処理等であり、非同期で命令が発生するため、次に実行する命令が予測できないため、実行部１０９は、第２の命令バッファ１０４内の命令コードをクリアする。また、そのような理由で、非同期処理の場合、命令コードを圧縮しないで命令メモリ１０１に格納しておく。すなわち、非同期処理の場合は、図３（Ｃ）の圧縮命令識別ビット３１１が０になり、非圧縮命令コードが命令メモリ１０１に格納される。非同期処理の場合、実行部１０９が「１」の非同期処理信号Ｓ１１７を出力し、セレクタ１０７は、命令コードＳ１１３を選択し、命令コードＳ１１６を実行部１０９に出力する。
【００３９】
インバータ１０８は、非同期処理信号Ｓ１１７を論理反転し、ライトイネーブル信号ＷＥを出力する。ライトイネーブル信号ＷＥが「１」のときに第２の命令バッファ１０４に命令コードＳ１１３が書き込まれ、ライトイネーブル信号ＷＥが「０」のときには第２の命令バッファ１０４に命令コードＳ１１３が書き込まれない。すなわち、非同期処理信号Ｓ１１７が「０」のときにライトイネーブル信号ＷＥが「１」になり、第２の命令バッファ１０４に命令コードＳ１１３が書き込まれる。実行部１０９は、次に実行する命令が非同期処理であるときには、非同期処理信号Ｓ１１７を「１」にし、命令コードＳ１１３を第２の命令バッファ１０４に書き込む処理を禁止する。セレクタ１０６は、第２の命令バッファ１０４にフェッチされた次に実行する命令コードを選択し、命令コードＳ１１６を出力する。セレクタ１０７は、非同期処理信号Ｓ１１７が「０」のときには命令コードＳ１１５を選択し、非同期処理信号Ｓ１１７が「１」のときには命令コードＳ１１３を選択し、命令コードＳ１１６を実行部１０９に出力する。実行部１０９は、入力された命令コードＳ１１６を実行し、次に実行する命令が非同期処理の場合には「１」の非同期処理信号Ｓ１１７を出力し、次に実行する命令が同期処理の場合には「０」の非同期処理信号Ｓ１１７を出力する。
【００４０】
（第２の実施形態）
図２は、第２の実施形態による圧縮命令処理装置の構成例を示す図である。本実施形態（図２）は、第１の実施形態（図１）に対して、圧縮命令伸張回路１０３が出力する命令コードＳ１１３のパスが異なる。以下、本実施形態が第１の実施形態と異なる点を説明する。実行部１０９は、非同期処理信号Ｓ１１７に関係なく、命令コードＳ１１３を実行し、非同期処理信号Ｓ１１７を出力する。ライトイネーブル信号ＷＥが「１」のとき、第２の命令バッファ１０４に命令コードＳ１１３が書き込まれる。
【００４１】
本実施形態では、実行部１０９は、第２の命令バッファ１０４を介さないで、圧縮命令伸張回路１０３の命令コードＳ１１３を直接入力し、実行する。そのため、第２の命令バッファ１０４の内容を更新する契機は様々に考えることができる。例えば、命令コードを実行するタイミングで、第２の命令バッファ１０４内で最も参照されていない命令コードのエントリに命令コードＳ１１３を上書きしても良い。また、すべての圧縮命令コードＳ１１１の中に、書き込むべき第２の命令バッファ１０４のエントリ番号を入れておき、そのエントリ番号に各命令コードＳ１１３を書き込むようにしてもよい。非同期処理信号Ｓ１１７が「１」の場合には、第１の実施形態と同様に、第２の命令バッファ１０４の内容は保持される。
【００４２】
本実施形態では、第１の実施形態に対して、命令メモリ１０１及び実行部１０９間のパスにおける命令バッファ段数が少ないため、命令メモリ１０１のアクセスレイテンシが存在する系では不利である。しかし、本実施形態は、第２の命令バッファ１０４内で参照できる命令が命令の実行順に強く依存する第１の実施形態に比べて、参照する命令の選択自由度が高いために、高い圧縮率を期待できる。
【００４３】
第１及び第２の実施形態のいずれも、コンパイラは、分岐命令により実行命令順が変化することを考慮する必要がある。第２の実施形態では、第２の命令バッファ１０４を命令内の書き込みエントリ番号で明示的に更新する場合を除き、プログラムの命令列の格納順において、分岐先、又は分岐元の命令を跨いで命令を参照することは、ループや無条件ジャンプ等の命令の実行順序が保証できる場合を除いて禁止する必要がある。命令内の書き込みエントリ番号で明示的に更新する場合でも、コンパイラが圧縮命令コードを生成する段階では、分岐命令による実行シーケンスの変化を意識して、圧縮命令コードが伸張される時点での第２の命令バッファ１０４に格納される命令コードを正確に予測する必要がある。
【００４４】
第１の実施形態では、第２の命令バッファ１０４はＦＩＦＯ（ファーストインファーストアウト）であるため、第２の命令バッファ１０４に格納する命令数が第２の命令バッファ１０４のエントリ数を超えた場合、格納順の古い命令から順に削除（上書き）していくことになる。これに対し、第２の実施形態は、この限りではなく、例えばどの命令が参照されたかどうかの履歴を取り、参照順の古い（最も参照された時刻が早い）命令から順に削除（上書き）していくアルゴリズムを採用したり、任意のエントリに上書きするようにしたりする等して、圧縮率を更に向上させることができる。
【００４５】
（第３の実施形態）
図６は、第３の実施形態による圧縮命令生成装置のハードウェア構成例を示す図である。圧縮命令生成装置は、例えばパーソナルコンピュータ（ＰＣ）であり、上記の圧縮命令コードを生成する。バス６０１には、中央処理装置（ＣＰＵ）６０２、ＲＯＭ６０３、ＲＡＭ６０４、ネットワークインタフェース６０５、入力装置６０６、出力装置６０７及び外部記憶装置６０８が接続されている。ＣＰＵ６０２は、データの処理又は演算を行うと共に、バス６０１を介して接続された各種構成要素を制御するものである。ＲＯＭ６０３には、予めＣＰＵ６０２の制御手順（コンピュータプログラム）を記憶させておき、このコンピュータプログラムをＣＰＵ６０２が実行することにより、起動する。外部記憶装置６０８にコンピュータプログラムが記憶されており、そのコンピュータプログラムがＲＡＭ６０４にコピーされてＣＰＵ６０２により実行される。ＲＡＭ６０４は、データの入出力、送受信のためのワークメモリ、各構成要素の制御のための一時記憶として用いられる。外部記憶装置６０８は、例えばハードディスク記憶装置やＣＤ−ＲＯＭ等であり、電源を切っても記憶内容が消えない。ＣＰＵ６０２は、ＲＡＭ６０４内のコンピュータプログラムを実行することにより、後述の図７及び図８の処理を行う。ネットワークインタフェース６０５は、インターネット等のネットワークに接続するためのインタフェースである。入力装置６０６は、例えばキーボード及びマウス等であり、各種指定又は入力等を行うことができる。出力装置６０７は、ディスプレイ及びプリンタ等である。
【００４６】
本実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体及び上記のプログラム等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００４７】
図７は、図６の圧縮命令生成装置による圧縮命令コードの生成方法を示すフローチャートである。命令圧縮の対象は、ユーザープログラム７０１である。ユーザープログラム７０１は、図１又は図２の圧縮命令処理装置に実行させるための高級言語のプログラムである。ステップ７０２では、コンパイラは、高級言語のユーザープログラム７０１をコンパイルし、マシン語のオブジェクトコード（命令コード）７０３を生成する。コンパイラは、図６の圧縮命令生成装置がコンパイラのプログラムを実行することにより実現される。ステップ７０４では、命令圧縮処理部は、オブジェクトコード７０３を圧縮し、圧縮オブジェクトコード（圧縮命令コード）７０５を生成する。その詳細は、後に図８を参照しながら説明する。命令圧縮処理部は、図６の圧縮命令生成装置が命令圧縮処理部のプログラムを実行することにより実現される。例えば、命令圧縮処理部は、図３（Ｇ）の命令コード３２１を圧縮し、命令コード３２２を生成する。
【００４８】
これに対し、割り込みや例外等の非同期処理の命令は、ドライバ７０６として用意される。ドライバ７０６は、命令圧縮の対象外である。ステップ７０７では、コンパイラは、高級言語のドライバ７０６をコンパイルし、マシン語の非圧縮のオブジェクトコード（命令コード）７０８を生成する。
【００４９】
ステップ７０９では、リンカは、圧縮オブジェクトコード７０５及びオブジェクトコード７０８をリンクし、実行バイナリコード（命令コード）７１０を生成する。リンカは、図６の圧縮命令生成装置がリンカのプログラムを実行することにより実現される。実行バイナリコード７１０は、図１又は図２の命令メモリ１０１に格納され、図１又は図２の圧縮命令処理装置により上記の処理が行われる。
【００５０】
図８は、図７のステップ７０４の命令圧縮処理部の処理を示すフローチャートである。命令圧縮処理部８０２は、図６の圧縮命令生成装置（パーソナルコンピュータ）が実行する命令圧縮処理部のプログラムの処理を示す。メモリ８０１は、図６のＲＡＭ６０４及び／又は外部記憶装置６０８に対応し、命令圧縮処理部８０２で用いられる各種記憶領域が用意される。
【００５１】
オブジェクトコード７０３は、図７の圧縮前のオブジェクトコード（圧縮対象の命令コード）７０３であり、メモリ８０１に格納される。ステップ８２１では、命令圧縮処理部８０２は、命令コード列のオブジェクトコード７０３から１命令コードずつ順次読み込む。次に、ステップ８２２では、命令圧縮処理部８０２の格納部は、読み込んだ命令をメモリ８０１上の命令ＦＩＦＯ８１２に１つずつ順次格納する。命令ＦＩＦＯ８１２は、図１又は図２のハードウェアの第２の命令バッファ１０４を模倣したものであり、命令ＦＩＦＯ８１２に格納された命令のみが、参照命令コードＳ１１４の候補となり得る。命令ＦＩＦＯ８１２は、複数の命令コードを記憶する複数のエントリを有する。命令ＦＩＦＯ８１２は、第２の命令バッファ１０４と同じエントリ数を持ち、命令格納時にフル（満杯）だった場合のみ、最も古い命令コードを捨てる。なお、命令圧縮処理部８０２は、図１又は図２の圧縮命令処理装置と同様に、圧縮対象の命令が分岐命令であった場合には、命令ＦＩＦＯ８１２の内容をクリアする。但し、無条件分岐の場合はその限りではない。
【００５２】
次に、ステップ８２３では、命令圧縮処理部８０２の選択部は、上記で読み込んだ現在の命令コードと命令ＦＩＦＯ８１２内の命令コードとを比較し、図３（Ａ）〜（Ｇ）の圧縮（符号化）ルールに則り、最も圧縮効率の高い命令ＦＩＦＯ８１２内の命令コードを参照命令コードＳ１１４として選択する。すなわち、選択部は、圧縮対象の命令コードを圧縮するために、命令ＦＩＦＯ８１２内の命令コードのうちの１個を参照命令コードＳ１１４として選択する。
【００５３】
次に、ステップ８２４では、命令圧縮処理部８０２の生成部は、図３（Ａ）〜（Ｇ）の圧縮ルールに則り、選択した参照命令コードＳ１１４を基に、上記の読み込んだ現在の命令コードを圧縮し、圧縮命令コードを仮オブジェクトコード８１３として生成し、一旦メモリ８０１に格納しておく。仮オブジェクトコード８１３は、圧縮命令コードであり、図３（Ｃ）のフォーマットを有し、現在の圧縮対象の命令コードと参照命令コードＳ１１４との差分コードを含む。同時に、命令圧縮処理部８０２の記録部は、圧縮前の命令コードのアドレスと圧縮後の命令コードのアドレスが分かっているため、圧縮前の命令コードのアドレス（先頭アドレス）で圧縮後の命令コードのアドレス（先頭アドレス）が引けるように、その両方のアドレス（先頭アドレス）を圧縮前後命令アドレスデータ８１４としてメモリ８０１に記録しておく。圧縮前後命令アドレスデータ８１４は、圧縮前（圧縮対象）の命令コードのアドレスと圧縮後の命令コード（圧縮命令コード）のアドレスとの対応関係を有するデータである。
【００５４】
次に、ステップ８２５では、命令圧縮処理部８０２の取得部は、このようにして一旦全てのオブジェクトコードを圧縮した後、圧縮前のオブジェクトコード７０３及び圧縮後の仮オブジェクトコード８１３の先頭から分岐命令をトレースする。この時、トレースされた分岐命令の分岐先アドレスは、まだ圧縮前の状態のオブジェクトコードのアドレスである。命令圧縮処理部８０２は、圧縮前後命令アドレスデータ８１４を参照し、圧縮前の命令コードの分岐先アドレスから圧縮後の命令コードの分岐先アドレスを取得する。
【００５５】
次に、ステップ８２６では、命令圧縮処理部８０２の変換部は、圧縮後の命令コードが分岐命令であるときには分岐命令の分岐先アドレスを、圧縮前の命令コードのアドレスから圧縮後の命令コードのアドレスに変換し、最終的な圧縮後のオブジェクトコード７０５を生成する。
【００５６】
以上のように、第１〜第３の実施形態によれば、圧縮命令コードを命令メモリ（キャッシュメモリ）１０１に格納することにより、命令メモリ１０１の容量の削減又は命令メモリ１０１のキャッシュヒット率の向上に寄与する。また、図１又は図２の圧縮命令処理装置は、大きなアドレス変換用の検索テーブル又は辞書テーブルを必要としないため、回路規模を小さくすることができる。
【００５７】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００５８】
１０１  命令メモリ
１０２  第１の命令バッファ
１０３  圧縮命令伸張回路
１０４  第２の命令バッファ
１０５〜１０７  セレクタ
１０８  インバータ
１０９  実行部
【図１】
2012098893.tif 000003
【図２】
2012098893.tif 000004
【図３】
2012098893.tif 000005
【図４】
2012098893.tif 000006
【図５】
2012098893.tif 000007
【図６】
2012098893.tif 000008
【図７】
2012098893.tif 000009
【図８】
2012098893.tif 000010