(57)【要約】【課題】複数の命令列で構成される機械語による命令データのサイズ効率を向上させる。【解決手段】命令データ圧縮装置１０３は、命令データに含まれる命令列を解析し、命令列ごとに、よりデータ量が少ないメタ命令に置き換え、メタ命令で置き換えた元の命令列が示されるメタ命令辞書データを生成し、メタ命令に置き換えられた圧縮命令データとメタ命令辞書データを命令データ格納装置１０６に格納し、圧縮命令データ実行装置１０４は、圧縮命令データとメタ命令辞書データを命令データ格納装置１０６から取得し、圧縮命令データの実行中にメタ命令が実行対象となった場合は、メタ命令辞書データに示される命令列を実行する。【選択図】図１
2011243134.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令列が含まれる機械語によるプログラムであって、命令列ごとにデータ長が異なるプログラムを入力するプログラム入力部と、
前記プログラム入力部により入力されたプログラムの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える命令置き換え部と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを生成するメタ命令辞書データ生成部と、
前記命令書き換え部により命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力するプログラム出力部とを有することを特徴とするプログラム圧縮装置。
【請求項２】
前記プログラム入力部は、
命令が示される命令コードと前記命令コードの命令の対象となる０バイト以上のパラメータ値とが組み合わされている命令列が複数含まれるプログラムを入力し、
前記命令置き換え部は、
前記プログラムにおいて命令コードとパラメータ値との組み合わせが共通する２以上の命令列を抽出し、抽出した２以上の命令列のそれぞれを、共通するメタ命令に置き換えることを特徴とする請求項１に記載のプログラム圧縮装置。
【請求項３】
前記命令置き換え部は、
前記プログラムにおいて命令コードとパラメータ値との組み合わせが共通する命令列の個数を計数し、計数した個数と当該命令列のデータ量から前記プログラムでの当該命令列のデータ総量を算出し、当該命令列に対するメタ命令のデータ量とメタ命令辞書データのデータ量との合計を算出し、メタ命令のデータ量とメタ命令辞書データのデータ量の合計が命令列のデータ総量よりも少ない場合に、命令列をメタ命令で置き換えることを特徴とする請求項２に記載のプログラム圧縮装置。
【請求項４】
前記プログラム入力部は、
前記命令コードとして、命令を識別するための命令識別番号が記述されている命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
前記プログラムに含まれている命令列を、前記命令識別番号の番号体系においてメタ命令用に割り当てられている命令識別番号に置き換えることを特徴とする請求項２又は３に記載のプログラム圧縮装置。
【請求項５】
前記プログラム入力部は、
前記命令コードとして、命令を識別するための命令識別番号が記述されている命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
前記プログラムに含まれている命令列を、前記プログラムに含まれている複数の命令列において使用されていない未使用の命令識別番号に置き換えることを特徴とする請求項２〜４のいずれかに記載のプログラム圧縮装置。
【請求項６】
前記プログラム入力部は、
前記複数の命令列の少なくとも一部として、相互に命令コードの命令内容は共通するがパラメータ値のデータ型が異なっているため命令コードが異なっている共通命令異データ型命令列が２以上含まれるプログラムを入力し、更に、共通命令異データ型命令列ごとにパラメータ値のデータ型が示されるデータ型情報を入力し、
前記命令置き換え部は、
前記プログラムにおいて命令コードの命令内容とパラメータ値との組み合わせが共通する２以上の共通命令異データ型命令列を抽出し、抽出した２以上の共通命令異データ型命令列のそれぞれを、共通するメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた共通命令異データ型命令列が示されるメタ命令辞書データを生成し、
前記プログラム出力部は、
前記命令書き換え部により共通命令異データ型命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データと、前記データ型情報とを対応付けて出力することを特徴とする請求項２〜５のいずれかに記載のプログラム圧縮装置。
【請求項７】
前記プログラム入力部は、
前記複数の命令列の一部として、プログラムの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コードとメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値とが組み合わされているアドレス管理命令列が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられるプログラムを入力し、
前記命令置き換え部は、
前記プログラムにおいてアドレス管理命令コードとアドレス指定パラメータ値との組み合わせが共通する２以上のアドレス管理命令列を抽出し、抽出した２以上アドレス管理命令列のそれぞれを、共通するメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられたアドレス管理命令列が示されるメタ命令辞書データを生成し、
前記プログラム出力部は、
前記命令書き換え部によりアドレス管理命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力することを特徴とする請求項２〜６のいずれかに記載のプログラム圧縮装置。
【請求項８】
前記プログラム入力部は、
前記複数の命令列の一部として、プログラムの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コードとメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値とが組み合わされているアドレス管理命令列が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられるプログラムを入力し、
前記命令置き換え部は、
特定の命令列群に含まれるアドレス管理命令のアドレス指定パラメータ値を、他の命令列群に含まれるアドレス管理命令のアドレス指定パラメータ値と一致するように書換え、前記特定の命令列群における命令列の並びと前記他の命令列群における命令列の並びを共通にし、前記特定の命令列群と前記他の命令列群を共通のメタ命令で置き換え、
前記メタ命令辞書データ生成部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列群が示されるメタ命令辞書データを生成し、
前記プログラム出力部は、
前記命令書き換え部により命令列群がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力することを特徴とする請求項２〜７のいずれかに記載のプログラム圧縮装置。
【請求項９】
前記命令置き換え部は、
２以上のプログラムに存在する共通の命令列に対しては共通のメタ命令を割り当てて、各プログラムの命令列をメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
前記命令置き換え部のメタ命令への置き換え結果に基づき、２以上のプログラムに共通して用いられる１つのメタ命令辞書データを生成することを特徴とする請求項１〜８のいずれかに記載のプログラム圧縮装置。
【請求項１０】
前記命令置き換え部は、
前記プログラムを複数個の部分集合に分けるとともに、部分集合単位で命令列をメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
部分集合ごとにメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各部分集合に付加することを特徴とする請求項１〜９のいずれかに記載のプログラム圧縮装置。
【請求項１１】
前記命令置き換え部は、
１つのプログラム内の記述内容が相互に異なっている２以上の命令列にも同じメタ命令を割り当てて命令列をメタ命令に置き換え、
前記メタ命令辞書データ生成部は、
同じメタ命令に対して異なる命令列が対応付けられている２以上のメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各命令列に付加することを特徴とする請求項１〜１０のいずれかに記載のプログラム圧縮装置。
【請求項１２】
前記プログラム入力部は、
前記複数の命令列の一部として、所定のジャンプ先命令列へのジャンプ命令が記述されるジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
命令列ごとにメタ命令に置き換えるか否かを判断しメタ命令に置き換える命令列を指定した後であって置き換え対象の命令列をメタ命令に置き換える前に、メタ命令に置き換えられることになる置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係を解析し、置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係が所定の条件に合致する場合に、ジャンプ命令列に対する補正処理を行い、ジャンプ命令列に対する補正処理の後に、置き換え対象の命令列をメタ命令に置き換えることを特徴とする請求項１〜１１のいずれかに記載のプログラム圧縮装置。
【請求項１３】
前記命令置き換え部は、
解析の結果、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれていない場合、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれる場合、
ジャンプ命令列とジャンプ先命令列がともに置き換え命令列群に含まれず、ジャンプ命令列とジャンプ先命令列との間に１つ以上の置き換え命令列群が存在する場合、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列がジャンプ命令列の置き換え命令列群とは別の置き換え命令列群に含まれる場合の少なくともいずれかにおいて、ジャンプ命令列に対する補正処理を行うことを特徴とする請求項１２に記載のプログラム圧縮装置。
【請求項１４】
前記プログラム入力部は、
ジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれていない場合に、
ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれず、前記置き換え命令列群のメタ命令への置き換えにより前記ジャンプ命令列のジャンプオフセット値が前記ジャンプ先命令列を指し示さない状態になっていることを前記プログラムの実行装置に対して通知するジャンプアウト通知を前記ジャンプ命令列に記述することを特徴とする請求項１３に記載のプログラム圧縮装置。
【請求項１５】
前記プログラム入力部は、
ジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれる場合に、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれ、前記置き換え命令列群のメタ命令への置き換えにより前記ジャンプ命令列のジャンプオフセット値が前記ジャンプ先命令列を指し示さない状態になっていることを前記プログラムの実行装置に対して通知するジャンプイン通知を前記ジャンプ命令列に記述することを特徴とする請求項１３又は１４に記載のプログラム圧縮装置。
【請求項１６】
前記プログラム入力部は、
ジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているジャンプ命令列が含まれるプログラムを入力し、
前記命令置き換え部は、
ジャンプ命令列とジャンプ先命令列がともに置き換え命令列群に含まれず、ジャンプ命令列とジャンプ先命令列との間に１つ以上の置き換え命令列群が存在する場合に、
前記ジャンプ命令列と前記ジャンプ先命令列との間に存在する置き換え命令列群のデータ総量と、当該置き換え命令列群を置き換えることになるメタ命令のデータ総量とに基づき、前記ジャンプ命令列のジャンプオフセット値を変更することを特徴とする請求項１３〜１５のいずれかに記載のプログラム圧縮装置。
【請求項１７】
命令列が、当該命令列よりもデータ量が少ないメタ命令に置き換えられている機械語によるプログラムを入力するプログラム入力部と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを入力するメタ命令辞書データ入力部と、
前記プログラムの実行時に、指定する位置を移動させながら実行対象とすべき前記プログラム内の位置を指定するプログラム位置指定部と、
前記プログラムの実行時に、所定の場合に、前記プログラム内の所定の位置の情報を一時的に保存するプログラム位置退避部と、
前記プログラム位置指定部により指定されている指定位置のプログラム内容がメタ命令であるかどうかを判断し、前記指定位置のプログラム内容がメタ命令でない命令列である場合に前記指定位置の命令列を実行し、前記指定位置のプログラム内容がメタ命令である場合に、当該メタ命令の直後の位置の情報を前記プログラム位置退避部に保存させ、前記メタ命令辞書データ内の当該メタ命令に対応付けられている命令列を実行するプログラム実行部とを有することを特徴とするプログラム実行装置。
【請求項１８】
前記プログラム位置退避部は、
前記プログラム実行部が前記メタ命令辞書データ内のメタ命令に対応付けられている命令列を実行している間は前記メタ命令の直後の位置の情報を保存し、前記プログラム実行部により前記メタ命令辞書データ内のメタ命令に対応付けられている命令列の実行が完了した際に、保存している位置の情報を削除することを特徴とする請求項１７に記載のプログラム実行装置。
【請求項１９】
前記プログラム位置退避部は、
前記プログラム実行部により前記メタ命令辞書データ内のメタ命令に対応付けられている命令列の実行が完了した際に、保存している位置の情報を前記プログラム位置指定部に通知し、
前記プログラム位置指定部は、
前記プログラム位置退避部により通知された位置を次に前記プログラム実行部が実行対象とすべきプログラム内の位置として指定することを特徴とする請求項１７又は１８に記載のプログラム実行装置。
【請求項２０】
前記プログラム実行装置は、
前記プログラム位置退避部に初期値以外の情報が保存されているか否か、前記プログラムに含まれるメタ命令の連続数分前記メタ命令辞書データに示される命令列が繰り返し実行されたか否かの少なくともいずれかにより、メタ命令に置き換えられた命令列の実行が完了したか否かを判断可能であることを特徴とする請求項１７〜１９のいずれかに記載のプログラム実行装置。
【請求項２１】
前記プログラム入力部は、
命令コードの命令内容と命令コードが対象とするパラメータ値が各々で共通するがパラメータ値のデータ型が各々で異なっているため命令コードが異なっている２以上の共通命令異データ型命令列がメタ命令に置き換えられているプログラムを入力するとともに、共通命令異データ型命令列ごとにパラメータ値のデータ型が示されるデータ型情報を入力し、
前記メタ命令辞書データ入力部は、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた共通命令異データ型命令列が示されるメタ命令辞書データを入力し、
前記プログラム実行部は、
前記プログラム位置指定部により指定されている指定位置のプログラム内容が共通命令異データ型命令列を置き換えたメタ命令である場合に、当該メタ命令で置き換えられている共通命令異データ型命令列のパラメータ値のデータ型を前記データ型情報を参照して判別し、前記メタ命令辞書データ内の当該メタ命令に対応付けられている共通命令異データ型命令列を、判別したパラメータ値のデータ型に対応させて実行することを特徴とする請求項１７〜２０のいずれかに記載のプログラム実行装置。
【請求項２２】
前記プログラム入力部は、
複数個の部分集合に分けられ、部分集合ごとに対応するメタ命令辞書データの識別子が示されているプログラムを入力し、
前記メタ命令辞書データ入力部は、
部分集合ごとに生成された複数個のメタ命令辞書データを入力し、
前記プログラム実行部は、
前記プログラムの実行の際に、部分集合ごとに、部分集合に示されている識別子に従い、対応するメタ命令辞書データを参照することを特徴とする請求項１７〜２１のいずれかに記載のプログラム実行装置。
【請求項２３】
前記プログラム入力部は、
２以上の命令列が含まれる命令列群がメタ命令に置き換えられており、メタ命令に置き換えられた置き換え命令列群に、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列が含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されているプログラムを入力し、
前記プログラム実行部は、
前記ジャンプ命令列の実行時に、前記ジャンプ命令列に所定のジャンプアウト通知が記述されているか否かを判断し、前記ジャンプ命令列に前記ジャンプアウト通知が記述されている場合に、前記ジャンプ命令列がメタ命令に置き換えられたことにより前記ジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、前記ジャンプ命令列以降のプログラム内容を解析して、前記ジャンプ命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ先命令列を実行することを特徴とする請求項１７〜２２のいずれかに記載のプログラム実行装置。
【請求項２４】
前記プログラム実行部は、
前記ジャンプ命令列に前記ジャンプアウト通知が記述されている場合に、前記ジャンプ命令列のジャンプオフセット値と、前記ジャンプ命令列から前記置き換え命令列群の終端までの命令長と、前記置き換え命令列群のメタ命令以降の命令列の命令長とに基づく解析を行い、前記ジャンプ命令列のジャンプ先命令列を検索することを特徴とする請求項２３に記載のプログラム実行装置。
【請求項２５】
前記プログラム実行部は、
前記置き換え命令列群のメタ命令以降に他のメタ命令が存在する場合に、前記メタ命令辞書データを参照して、当該他のメタ命令に対応する命令列の命令長を導出することを特徴とする請求項２４に記載のプログラム実行装置。
【請求項２６】
前記プログラム入力部は、
２以上の命令列が含まれる命令列群がメタ命令に置き換えられており、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列がメタ命令外に含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されており、前記ジャンプ命令列のジャンプ先命令列が前記メタ命令に置き換えられた置き換え命令列群に含まれているプログラムを入力し、
前記プログラム実行部は、
前記ジャンプ命令列の実行時に、前記ジャンプ命令列に所定のジャンプイン通知が記述されているか否かを判断し、前記ジャンプ命令列に前記ジャンプイン通知が記述されている場合に、前記ジャンプ命令列のジャンプ先命令列がメタ命令に置き換えられたことにより前記ジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、前記ジャンプ命令列以降のプログラム内容を解析して、前記ジャンプ命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ先命令列を実行することを特徴とする請求項１７〜２５のいずれかに記載のプログラム実行装置。
【請求項２７】
前記プログラム実行部は、
前記ジャンプ命令列に前記ジャンプイン通知が記述されている場合に、前記ジャンプ命令列のジャンプオフセット値と、前記ジャンプ命令列以降の命令列の命令長とに基づく解析を行い、前記ジャンプ命令列のジャンプ先命令列を検索することを特徴とする請求項２６に記載のプログラム実行装置。
【請求項２８】
前記プログラム実行部は、
前記ジャンプ命令列以降にメタ命令が存在する場合に、前記メタ命令辞書データを参照して、当該メタ命令に対応する命令列の命令長を導出することを特徴とする請求項２７に記載のプログラム実行装置。
【請求項２９】
前記プログラム入力部は、
命令が示される命令コードと前記命令コードの命令の対象となるパラメータ値とが組み合わされている命令例が、メタ命令に置き換えられて又はメタ命令に置き換えられずに含まれるプログラムを入力し、
プログラム実行部は、
命令列の実行の際に、当該命令列のパラメータ値のデータ型を判定し、判定したパラメータ値のデータ型に対応させて当該命令列の命令コードの命令を実行することを特徴とする請求項１７〜２８のいずれかに記載のプログラム実行装置。
【請求項３０】
複数の命令列が含まれる機械語によるプログラムであって、命令列ごとにデータ長が異なるプログラムを入力するプログラム入力処理と、
前記プログラム入力処理により入力されたプログラムの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える命令置き換え処理と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを生成するメタ命令辞書データ生成処理と、
前記命令書き換え処理により命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成処理により生成されたメタ命令辞書データとを対応付けて出力するプログラム出力処理とをコンピュータに実行させることを特徴とするプログラム。
【請求項３１】
命令列が、当該命令列よりもデータ量が少ないメタ命令に置き換えられている機械語によるプログラムを入力するプログラム入力処理と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを入力するメタ命令辞書データ入力処理と、
前記プログラムの実行時に、指定する位置を移動させながら実行対象とすべき前記プログラム内の位置を指定するプログラム位置指定処理と、
前記プログラムの実行時に、所定の場合に、前記プログラム内の所定の位置の情報を一時的に保存するプログラム位置退避処理と、
前記プログラム位置指定処理により指定されている指定位置のプログラム内容がメタ命令であるかどうかを判断し、前記指定位置のプログラム内容がメタ命令でない命令列である場合に前記指定位置の命令列を実行し、前記指定位置のプログラム内容がメタ命令である場合に、当該メタ命令の直後の位置の情報を前記プログラム位置退避処理に保存させ、前記メタ命令辞書データ内の当該メタ命令に対応付けられている命令列を実行するプログラム実行処理とをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロコンピュータ、データプロセッサ等のハードウェア的、もしくはソフトウェア的に実現されたデータ処理装置に関するものである。
例えばハードウェア的には中央演算処理装置（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、以下ＣＰＵ）、ソフトウェア的には仮想中央演算処理装置（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ、以下ＶＭ）等が対象として挙げられる。
【背景技術】
【０００２】
ＣＰＵやＶＭは実装された環境において、様々なデータ処理を行い、環境の様々な制御を行う装置である。
通常、ＣＰＵやＶＭは具体的にどのようなデータ処理を行うかは同じ環境に実装された記憶装置等に格納されているプログラムに記述されており、そのプログラムを読み込んで、その内容を逐次解釈し、解釈結果に従った処理を実行する。
プログラムは通常命令とそれに付随する０個以上のパラメータの列で構成され、ＣＰＵやＶＭはその処理対象となる命令と付随するパラメータを読み込んで処理を実施する。
ＣＰＵやＶＭは次にどの命令を処理すべきかを示す情報を保持するために、一般的にプログラム・カウンタ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ、以下ＰＣ）と呼ばれるレジスタを利用する。
ＰＣは記憶装置に格納されている処理対象となっているプログラム中の次に処理すべき命令のアドレスを保持しており、ＣＰＵやＶＭはＰＣの保持するアドレスの命令を処理し、処理完了後にＰＣを次の命令が格納されているアドレスに移動させる。この一連の処理を繰り返す事によって、プログラムに記述された内容の処理を逐次実行する。
処理に必要なデータはＣＰＵやＶＭが持つレジスタやスタック等の高速にアクセス可能な記憶装置から取得し処理を行う。
そのレジスタやスタックへのデータのセットを行う命令があり、大容量であるが低速な記憶装置や別のレジスタやスタックからデータを取得してセットする。
【０００３】
一方で、近年の情報処理機器の発展に伴い、携帯電話やスマートフォン、カーナビゲーションシステム等、様々な機器でＣＰＵやＶＭを実装した小型移動情報処理装置が開発され、様々なサービスを実現している。
これらの小型移動情報処理装置は一般的なパーソナル・コンピューターと比較すると小型であるために基板面積が小さく、十分な容量を持つメモリを実装する事が難しい。
また、近年の提供サービスの高度化、複雑化に伴い、ソフトウェアが使用するメモリ量は増加しており、過去に十分な容量であったとしても、全てのサービスを実現するには容量が不足する課題も多々発生している。
また、より少ない容量のメモリでサービスが実現できるようになると原価低減につながり、価格面での競争力を強化できるため、同一サービスであっても如何にして使用するメモリ量を抑制して実現するかは、今もなお重要かつ、緊急の課題となっている。
【０００４】
このような課題に対して特許文献１では、命令のオペコード部の語長の長い命令を高頻度で使用する場合、予め予約されているコード長の短いオペコードに置き換え、置き換え前後のオペコードをレジスタに書き込んでおく事によって、プログラムの圧縮を行っている。
【０００５】
また、特許文献２は、プログラム中の各関数において使用されている命令に新たなインデックを定義し、そのインデックスを命令のオペコード部として扱い、関数と組でインデックスから命令を解決するテーブルを持つ事でインデックスがオペコードよりサイズを小さく設定する事で、プログラムの圧縮を実現している。
また、特許文献３ではプログラム中の分岐の距離、即値データのサイズ、レジスタの利用頻度等を分析し、各命令コードやレジスタ指定のサイズが小さくなるように新たな命令セットアーキテクチャを再定義し、その命令セットに従って再作成したプログラムの動的ステップ数から論理演算手段の演算能力を判定し、命令セットから実命令セットへのデコード手段を設計する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−２２４１９９号公報
【特許文献２】特開２００６−７９４５１号公報
【特許文献３】特開平１０−０３１５８８号公報
【非特許文献】
【０００７】
【非特許文献１】「コンパイラの構成と最適化」、中田育夫、朝倉書店、ＩＳＢＮ  ４−２５４−１２１３９−３  Ｃ３０４１
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１では語長の長いオペコード部を持つ命令が高頻度に使用された場合にのみ、プログラムの圧縮を実現できるが、全ての命令のオペコード部が同一語長の場合や、語長が短いオペコード部を持つ命令が高頻度で使用された場合にプログラムの圧縮が行われないという課題がある。
また、特許文献２は実行時に全てのインデックスをテーブルに従って本来の命令にデコードする必要があり、実行時の処理速度低下を招くという課題がある。
また、特許文献３では個別のプログラムに対応して最適な命令セット、デコード設計を実現するため、処理内容に依存する事になり、任意のプログラムに適用した場合、分析過程からやりなおさなければならないという課題がある。
【０００９】
この発明は、上記のような課題を解決することを主な目的の一つとしており、ＣＰＵやＶＭが処理対象とする命令データのサイズ効率を向上させることを主な目的とする。
また、命令データを解釈・実行する際に間接的に必要となる処理を削減することを主な目的とする。
【００１０】
本発明に係るプログラム圧縮装置は、
各々のデータ長が固定されていない複数の命令列が含まれる機械語によるプログラムを入力するプログラム入力部と、
前記プログラム入力部により入力されたプログラムの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える命令置き換え部と、
前記メタ命令と対応付けて、前記メタ命令に置き換えられた命令列が示されるメタ命令辞書データを生成するメタ命令辞書データ生成部と、
前記命令書き換え部により命令列がメタ命令に置き換えられたプログラムと、前記メタ命令辞書データ生成部により生成されたメタ命令辞書データとを対応付けて出力するプログラム出力部とを有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、命令列ごとに解析を行い、命令列ごとにメタ命令に置き換えてプログラムのデータ量を圧縮する。このため、圧縮されたプログラムを実行する際に、命令列のどこまでが圧縮されているかを判断する必要がなく、プログラム実行時のオーバーヘッドを軽減することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係る情報処理端末の構成例を示す図。
【図２】実施の形態１に係る情報処理端末の基本アクティビティを示す図。
【図３】実施の形態１に係るソースコード受け付け処理シーケンスを示す図。
【図４】実施の形態１に係る命令データ生成および圧縮要求に対する処理シーケンスを示す図。
【図５】実施の形態１に係る命令データ実行処理シーケンスを示す図。
【図６】実施の形態１に係るソースコードの例を示す図。
【図７】実施の形態１に係る命令列のデータ形式の例を示す図。
【図８】実施の形態１に係る命令識別番号、処理名、パラメータサイズの対応の例を示す図。
【図９】実施の形態１に係る命令名を利用して表現した命令データの例を示す図。
【図１０】実施の形態１に係る命令データの例を示す図。
【図１１】実施の形態１に係る命令データ圧縮処理の例を示す図。
【図１２】実施の形態１に係る同一命令列出現回数カウント処理の例を示す図。
【図１３】実施の形態１に係る命令ＩＤ別出現回数記録テーブル要素のデータ構造の例を示す図。
【図１４】実施の形態１に係るパラメータ別出現回数記録テーブル要素のデータ構造の例を示す図。
【図１５】実施の形態１に係る命令ＩＤ別出現回数記録テーブルの例を示す図。
【図１６】実施の形態１に係る圧縮対象命令列テーブル生成処理の例を示す図。
【図１７】実施の形態１に係る圧縮対象命令列テーブルの要素の例を示す図。
【図１８】実施の形態１に係る命令データ圧縮変換処理の例を示す図。
【図１９】実施の形態１に係る圧縮対象命令列テーブルの例を示す図。
【図２０】実施の形態１に係るメタ命令辞書データの例を示す図。
【図２１】実施の形態１に係るメタ命令で置換した命令データの例を示す図。
【図２２】実施の形態１に係る圧縮命令データ実行装置の構成例を示す図。
【図２３】実施の形態１に係る圧縮命令データ実行装置の実行処理手順の例を示す図。
【図２４】実施の形態１に係る圧縮命令データ実行装置の状態例を示す図。
【図２５】実施の形態１に係る圧縮命令データ実行装置の状態例を示す図。
【図２６】実施の形態４に係る類似するソースコードの例を示す図。
【図２７】実施の形態４に係る類似するソースコードに対する命令データの例を示す図。
【図２８】実施の形態４に係る圧縮命令データ変換処理手順の例を示す図。
【図２９】実施の形態４に係る変数識別情報変更前の圧縮命令データの例を示す図。
【図３０】実施の形態４に係る変数識別情報変更後の圧縮命令データの例を示す図。
【図３１】実施の形態５に係る複数のメタ命令辞書データを生成した場合の圧縮命令データの例を示す図。
【図３２】実施の形態５に係る複数のメタ命令辞書データを生成した場合の圧縮命令データの例を示す図。
【図３３】実施の形態６に係るジャンプ命令種別判定処理の例を示す図。
【図３４】実施の形態６に係るジャンプ命令情報リストの要素のデータ構造の例を示す図。
【図３５】実施の形態６に係るジャンプ命令変更処理の例を示す図。
【図３６】実施の形態６に係る圧縮命令データ実行装置におけるジャンプ・アウト命令処理の例を示す図。
【図３７】実施の形態６に係る圧縮命令データ実行装置におけるジャンプ・イン命令処理の例を示す図。
【図３８】実施の形態６に係る圧縮命令データ実行装置における実行処理手順の例を示す図。
【図３９】実施の形態１に係る圧縮処理時の処理最小単位の考え方を示す図。
【図４０】実施の形態１に係るパラメータが別命令列に分離した場合の問題点を示す図。
【図４１】実施の形態１に係る復元処理前のメモリ空間を示す図。
【図４２】実施の形態１に係る復元処理後のメモリ空間を示す図。
【図４３】実施の形態３に係る型によってサイズが異なる場合のメモリ配置例を示す図。
【図４４】実施の形態３に係る型によってサイズが異なる場合のメモリ配置例を示す図。
【図４５】実施の形態３に係る型に関係なくサイズが同一の場合のメモリ配置例を示す図。
【図４６】実施の形態６に係る状況１〜４を示す図。
【図４７】実施の形態６に係るジャンプ・アウト命令とジャンプ先との関係を示す図。
【図４８】実施の形態１に係る命令データ圧縮装置の構成例を示す図。
【図４９】実施の形態１〜６に係る情報処理端末装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【００１３】
実施の形態１．
本実施の形態では、少なくとも命令データ生成装置と、命令データ圧縮装置、圧縮命令データ実行装置の三つからなるシステムを想定している。
命令データ生成装置とは、ソフトウェア開発技術者があるアプリケーションをソフトウェアとして実現するため、開発したソースコードを入力として、圧縮命令データ実行装置が解釈・実行可能な命令で置き換えた命令データ（機械語によるプログラム）を生成し、その命令データを出力とする。
命令データ圧縮装置とは、命令データ生成装置が生成した命令データを入力として、命令データの内部を解析し、入力された命令データよりもサイズが小さくなるように変換を行い、変換した結果である圧縮命令データを生成し、圧縮命令データを出力とする。
命令データ圧縮装置は、プログラム圧縮装置の例である。
圧縮命令データ実行装置は、命令データもしくは圧縮命令データを入力として、それらの中に記述されている命令を解釈し、適切な処理を実行する事でソースコードに記述されていた内容と同一の処理を情報処理装置内で実現する。
ここで圧縮命令データ実行装置は圧縮命令データのみではなく、非圧縮状態の命令データも入力として受け付ける事が可能であり、どちらも処理可能であり、かつ命令データを実行する際には不要であるが圧縮命令データを実行する際に必要となる処理を最小限に抑える。
圧縮命令データ実行装置は、プログラム実行装置の例である。
【００１４】
命令データ生成装置、命令データ圧縮装置、圧縮命令データ実行装置の実現方法は特に限定せず、ハードウェアとして実現されても構わないし、ある特定の情報処理端末装置内で実行されるソフトウェアとして実現されても構わない。
以下では説明を簡単にするため、ソフトウェアとして実現された場合のみを取り上げて説明する。
【００１５】
また命令データ生成装置、命令データ圧縮装置、圧縮命令データ実行装置が実行される情報処理端末装置は一つに閉じている必要はなく、それぞれを独立した情報処理端末装置で実行する場合や、例えば命令データ生成装置と命令データ圧縮装置は一つの情報処理端末装置で実行し、圧縮命令データ実行装置のみ別の情報処理端末装置で実行すると言ったように、複数を一つの情報処理端末装置で実行する構成としても構わない。
複数の情報処理端末装置で構成する場合には、その情報処理端末装置間をネットワークで接続し、各装置間で通信可能として、自動処理できるようにしても構わないし、情報処理端末装置間のデータ移動は人手を伴った、例えばメモリカードなどにデータを保存し、そのメモリカードを別の情報処理端末装置に挿入し、そこから各装置への入力として利用すると言った方式でも構わない。
以下では説明を簡単にするため、命令データ生成装置、命令データ圧縮装置、圧縮命令データ実行装置が一つの情報処理端末装置で実行されている場合のみを取り上げて説明する。
また、同様に説明を簡単にするため、以下では全ての処理は逐次直列実行を基本とするが、並列実行やストリーミング実行で処理しても問題はない。
【００１６】
図１は、本実施に係る情報処理端末装置１００の構成を図示したブロック図である。
情報処理端末装置１００に対する全ての要求は中央制御装置１０１が受け付け、その要求内容に従って命令データ生成装置１０２、命令データ圧縮装置１０３、圧縮命令データ実行装置１０４、ソースコード格納装置１０５に処理を実行させる。
ソースコード格納装置１０５は情報処理端末装置１００において圧縮命令データに変換する対象となるソースコードを格納する記憶装置である。
命令データ格納装置１０６は命令データ生成装置１０２および命令データ圧縮装置１０３が生成する命令データおよび圧縮命令データを格納する記憶装置である。
命令データ生成装置１０２はソースコード格納装置１０５に格納されている全てのソースコードから一つ以上の指定されたソースコードを取得し、解析を行い、命令データに変換する処理を実施する処理装置である。
命令データ圧縮装置１０３は命令データ格納装置１０６に格納されている全ての命令データから一つ以上の指定された命令データを取得し、解析を行い、指定された命令データの合計サイズよりも合計サイズが小さくなる一つ以上の圧縮命令データに変換する処理を実施する処理装置である。
以下では命令データと言う場合には命令データ生成装置１０２が生成した命令データおよび命令データ圧縮装置１０３が生成した圧縮命令データ両方を指す用語とし、厳密に命令データ生成装置１０２が生成した命令データのみをさす場合には非圧縮命令データと呼ぶ事とする。
圧縮命令データ実行装置１０４は命令データ格納装置１０６に格納されている全ての命令データおよび圧縮命令データから指定されたデータを取得し、そのデータに記載されている命令に従い処理を逐次実行する処理装置である。
【００１７】
以下で本実施の形態に係る情報処理端末装置１００における基本処理シーケンスについて図２、図３、図４、図５を用いて説明を行う。
【００１８】
図２は本実施の形態に係る情報処理端末装置１００において必要となる処理を示したアクティビティ図である。
本実施の形態に係る情報処理端末装置１００は、ソースコードを圧縮命令データに変換し、その変換した圧縮命令データを元にソースコードで記述された内容の処理を実行するシステムである。
そのため、本実施の形態においては少なくとも処理対象となるソースコードをシステムに認識させるための処理対象ソースコード格納処理、格納されたソースコードの全てもしくは一部から、圧縮命令データを生成する命令データ／圧縮命令データ生成処理と、生成された圧縮命令データを元にソースコードに記述された内容の処理を実行する命令データ／圧縮命令データ実行処理の３種類の処理が必要となる。
【００１９】
図３は、前記処理対象ソースコード格納処理の具体的な処理シーケンスの一例を図示したものである。
中央制御装置１０１は上位から処理対象ソースコード登録要求を受けるとソースコード格納処理を開始する。
処理対象ソースコード登録要求には少なくとも登録対象となる一つ以上のソースコードもしくはそのソースコードを一意に識別可能な、例えばソースコードのファイル名や、識別番号などの、情報が含まれており、中央制御装置１０１はその情報をもとにソースコード格納装置に格納するソースコードを特定し、取得する。
中央制御装置１０１は取得したソースコードをソースコード格納装置１０５に対して格納し、その処理結果を示す処理結果ＩＤをソースコード格納装置１０５から受け取る。
この処理結果ＩＤの内容に応じて、正常終了したのか、エラーが発生したのかを上位に通知し、処理は完了する。
【００２０】
図４は、前記命令データ／圧縮命令データ生成処理の具体的な処理シーケンスの一例を図示したものである。
【００２１】
中央制御装置１０１は、上位より命令データ／圧縮命令データ生成要求を受けると命令データ生成処理を開始する。
命令データ生成要求には少なくとも命令データ生成の対象となる一つ以上のソースコード格納装置１０５に格納されているソースコードを一意に識別可能な情報が含まれており、中央制御装置１０１はその情報をもとに命令データ生成処理を行うべきソースコードを特定し、命令データ生成処理を実行する。
また、命令データ生成要求は命令データ生成要求を実施するに当たり、必要となるソースコード全ての識別情報を保持している必要はなく、適時必要なソースコードを本処理中でソースコード格納装置１０５から検索し、取得する事としても構わない。
【００２２】
中央制御装置１０１は命令データ／圧縮命令データ生成要求を受けると、その要求に含まれているソースコード識別情報一式をもとに命令データ生成開始処理を命令データ生成装置１０２に対して開始させる。
命令データ生成装置１０２は、ソースコード識別情報一式に対応するソースコードをソースコード格納装置１０５から取得し、命令データ生成処理を実行する。
この命令データ生成処理の具体的な処理内容は、例えば非特許献１に記載されている様な一般的なコンパイラで適用される字句解析、構文解析、意味解析、最適化等の処理を実施し、その処理結果から実行環境である圧縮命令データ実行装置１０４が解釈可能な目的コードである命令データを生成する事である。
命令データ生成処理でエラーが発生していない場合には、ソースコードより正しい命令データが生成された事を意味するため、その場合には生成された命令データを命令データ格納装置１０６に格納し、最後に中央制御装置１０１に対して命令データ生成処理の処理結果を示す処理結果ＩＤを返す。
命令データ格納装置１０６に格納された命令データには各々を一意に識別可能な識別情報が付加され格納されるが、ソースコードの識別情報と同一の識別情報で命令データを識別可能として格納されている事が望ましい。
同一ではない場合にはソースコードの識別情報とそのソースコードから生成された命令データの識別情報を紐付けする情報を保持しておく事が望ましい。
逆に、命令データ生成処理においてエラーが発生している場合には、ソースコードより正しい命令データが生成されていない事を意味するため、その場合には命令データ格納装置１０６への命令データ格納処理は実施せず、発生したエラーを示す処理結果ＩＤを中央制御装置１０１に返し、命令データ生成処理は終了する。
なお、命令データ生成装置１０２は命令データ生成処理を開始する際に、最初にソースコード識別情報一式に対応するソースコードに対応する命令データが既に命令データ格納装置１０６に格納されているか確認を行い、格納されているものがある場合にはそれに対応するソースコードへの命令データ生成処理は実施しないものとしても構わない。
命令データ生成装置１０２より処理結果ＩＤを受け取った中央制御装置１０１は、その処理結果ＩＤがエラーを示す場合には、以降の処理を実施せず、上位にエラーが発生した事を通知し、処理は完了する。
逆に、処理結果ＩＤが正常終了を示す場合、中央制御装置１０１は命令データ圧縮装置１０３に対して、命令データ圧縮処理を開始させる。
【００２３】
命令データ圧縮装置１０３は、中央制御装置１０１から命令データ圧縮開始命令を受け、命令データ圧縮処理を開始する。
命令データ圧縮開始命令には圧縮対象となる命令データの識別情報は少なくとも一つ以上含まれており、その識別情報をもとに圧縮対象となる命令データを命令データ格納装置１０６から取得し、命令データ圧縮処理を実施する。
命令データ圧縮処理の具体的な処理内容については後述する。
【００２４】
命令データ圧縮処理でエラーが発生せず、少なくとも圧縮前の命令データのサイズよりも命令データ圧縮処理で生成された圧縮命令データのサイズが小さくなった場合には、その圧縮命令データを命令データ格納装置１０６に格納する。
この時、圧縮命令データに対しては一意に識別可能な識別情報が付加されて格納され、その識別情報はソースコードの識別情報、または命令データの識別情報と同一の識別情報である事が望ましい。
もし同一の識別情報ではない場合には、ソースコードの識別情報および命令データの識別情報とそれらから生成された圧縮命令データの識別情報を紐付けする情報を保持しておくことが望ましい。
最後に、命令データ圧縮装置１０３は命令データ圧縮処理の成功を示す処理結果ＩＤを中央制御装置１０１に返す。
逆に命令データ圧縮処理でエラーが発生した場合、もしくは圧縮前の命令データのサイズと圧縮命令データのサイズが同一である、もしくは圧縮命令データのサイズの方が大きい場合には、命令データの圧縮に失敗しているため、発生したエラーを示す処理結果ＩＤもしくは圧縮命令データのサイズが命令データのサイズ以上となった事を示す処理結果ＩＤを中央制御装置１０１に返す。
【００２５】
命令データ圧縮装置１０３から処理結果ＩＤを受けた中央制御装置１０１は、その処理結果ＩＤを上位にエラーが発生した事を通知し、処理は完了する。
【００２６】
図５は、前記命令データ／圧縮命令データ実行処理の具体的な処理シーケンスの一例を図示したものである。
【００２７】
中央制御装置１０１は上位より実行要求を受けると、その要求に従い圧縮命令データ実行装置１０４に対して、命令データ／圧縮命令データ実行の開始命令を行う。上位より受け取る実行要求には実行対象となるソースコード、命令データ、圧縮命令データのうち少なくとも一つに対する識別情報が一つ以上含まれており、その識別情報を元に処理対象となる命令データ、圧縮命令データを特定する。
【００２８】
中央制御装置１０１より命令データ／圧縮命令データ実行の開始命令を受けた圧縮命令データ実行装置１０４は、実行対象の識別情報から処理対象となる命令データ、圧縮命令データを命令データ格納装置１０６から取得する。
この時、命令に含まれる識別情報がソースコードに対応するものであった場合には、そのソースコードに対応する命令データもしくは圧縮命令データに対する識別情報をソースコードの識別情報と紐付け情報をもとに取得してから最終的に命令データもしくは圧縮命令データを取得する。
同様に命令に含まれる識別情報が命令データに対応するものであった場合には、その命令データに対応する圧縮命令データが存在するかどうか紐付け情報を利用して確認し、存在する場合には圧縮命令データを命令データ格納装置１０６から取得し、存在しない場合には命令データを命令データ格納装置１０６から取得する。
最後に命令に含まれる識別情報が圧縮命令データに対応するものであった場合は、その識別情報をもとに命令データ格納装置１０６より対象となる圧縮命令データを取得する。
命令データもしくは圧縮命令データを取得後、圧縮命令データ実行装置１０４は実行前準備を実施し、命令データ／圧縮命令データ実行に必要な情報、状況を構築する。
その後、命令データ／圧縮命令データ実行を開始し、実行終了後に実行のために準備した情報や状況の終了処理を行い、最後に実行結果を中央制御装置１０１に返し、終了となる。
処理結果を受け取った中央制御装置１０１はその処理結果を上位に返し、命令データ／圧縮命令データ実行処理は終了となる。
【００２９】
以上までで、本実施の形態に係る情報処理端末装置１００における基本処理シーケンスについて図２、図３、図４、図５を用いて説明を行ったが、この説明では各処理ブロックを直列で処理する事として説明していたが、必ずしもそのような処理形式で行う必要はない。
例えば、前記命令データ／圧縮命令データ生成処理における命令データ生成開始処理で単一のソースコードのみを処理対象とせずに、複数のソースコードを一括して処理対象として処理を行っても構わないし、複数のソースコードを直列で処理せずに並列処理しても構わない。
【００３０】
次に本実施の形態で扱うソースコードに関する具体的な説明を行う。
【００３１】
ソースコードとは最終的に生成されるソフトウェアが実行すべき処理内容について人間、もしくは何らかのツールがある言語仕様の構文規則に従い記述したデータの事を指す。
ソースコードは人間がその内容を容易に解読可能である事を目的の一つとしており、通常は従うべき構文規則はソースコードがテキスト形式のデータである事を前提としている。
本実施の形態ではＣ言語の構文規則に従ったソースコードを扱う事とするが、これは本実施の形態がＣ言語の構文規則のみに適用可能である事を示すものではなく、Ｃ＋＋言語やＪａｖａ（登録商標）言語などその他任意の言語仕様であっても本実施の形態は適用可能である。
【００３２】
図６は、ソースコードの一例である。
このソースコードの一例は前述の通りＣ言語の構文規則に従ったものである。
一行目は整数型の変数ａに対して３を代入する事を意味している。
二行目は整数型の変数ｂに対して４を代入する事を意味している。
三行目は整数型の変数ｃに対して変数ａと変数ａを加算した結果を代入する事を意味している。
変数ａは直前までの処理で３が代入されているため、ｃに代入される値はその加算結果である６となる。
【００３３】
次に本実施の形態で扱う命令データに関する具体的な説明を行う。
【００３４】
命令データは命令データ生成装置１０２が中央制御装置１０１より指定されたソースコードを入力として命令データ生成処理を実施した際に、その処理結果として生成される機械語によるデータの事を指す。
命令データは圧縮命令データ実行装置１０４が解釈可能なデータ形式で表現されている。
一般的に命令データは、人間が解釈可能である事を必ずしも必要としておらず、圧縮命令データ実行装置１０４が効率的に解釈できる事が優先される。
そのため、命令データのデータ形式はバイナリ形式となっている事が一般的である。
また、命令データは前記のバイナリ形式のデータと共にソースコードやソースコードの構文解析木などの付加情報を付加しておいても構わない。
【００３５】
図７は、命令列のデータ形式の一例を示した図である。
【００３６】
この例では命令列は命令ＩＤ部とそれに続くパラメータ部の組を最小データ構造としている。
命令ＩＤ部には圧縮命令データ実行装置が持つ処理セットに対して一意に振られている命令識別番号を格納する領域である。
本実施の形態では命令ＩＤ部は１ｂｙｔｅの固定長として説明を行うが、固定長である必要はなく、可変長でもよい。
次に、パラメータ部は対応する命令ＩＤ部に格納されている命令識別番号に対応する処理を圧縮命令データ実行装置１０４が実行する場合に必要な情報を格納する領域である。
本実施の形態では命令ＩＤ部に格納されている命令識別番号によってパラメータ部のサイズおよびパラメータ部に格納されるパラメータ数は決定される可変長として説明を行うが、全ての命令において同一サイズのパラメータ部を持つ固定長としてもよい。
【００３７】
図８は、命令列における命令識別番号と具体的命令内容およびパラメータ部サイズの対応の一例である。
【００３８】
命令ＩＤ部は１ｂｙｔｅであるため、命令識別番号も０から２５５までの値をとることが可能である。
各命令識別番号に対応する具体的な処理内容は適時説明を行うため、ここでは詳細は省略し、対応する処理の処理名とその処理で必要となるパラメータ部のサイズの対応が付けられている。
例えば、命令ＩＤ部に５が格納されている場合、圧縮命令データ実行装置１０４は処理名ｐｏｐｖに対応する処理を実施しなければならず、またその際に命令識別番号直後に続くパラメータ部のサイズは０ｂｙｔｅである事を意味している。
ある命令列を圧縮命令データ実行装置１０４が解釈する内容は、その命令列を生成する際に処理対象となったソースコードの内容と意味的な変質が生じないようになっており、その同質性は命令データ生成装置１０２および命令データ圧縮装置１０３が保証するものである。
ここで「意味的な変質が生じない」とは、ソースコードで記述された内容に従って処理を行った結果と、命令データで記述された内容に従って処理を行った結果が任意の入力に対して、かならず出力が一致する事を意味し、その処理過程が同一である事を求めるものではない。
つまり、ソースコードに記載されていないが圧縮命令データ実行装置１０４で処理する際に都合のよい命令に置き換えたり、内部的に必要となる処理を追加する事や、非特許文献１などに記載されている最適化を命令データ生成装置１０２もしくは命令データ圧縮装置１０３で実施しても構わないことを意味する。
【００３９】
図９は、図６に示したソースコードを処理対象として、図８に示す命令識別番号構成（命令セット）に従い、命令データ生成装置１０２が生成した命令データを、命令名を用いてニーモニック表現した一例である。
【００４０】
処理ｄｅｆｌｏｃａｌｖａｒは圧縮命令データ実行装置が保持するローカル変数領域としてパラメータに指定された個数だけ変数領域を新たに確保する処理である。
本実施の形態では単一変数領域のサイズは４ｂｙｔｅ固定長を前提としており、パラメータ部に記載の内容３は領域を確保すべき変数の個数を示している。
この３変数とは変数ａ，ｂ，ｃの事である。
ここで単一変数領域のサイズを固定長としているが、必ずしも固定長である必要はないが、固定長とする事によってより効果的な後述する圧縮命令データの生成を行う事が可能となる。
次に２行目から４行目でソースコードの１行目に対応する処理が記載されている。
処理ｎｕｍｂｅｒはパラメータ部に記載の整数値を圧縮命令データ実行装置１０４が保持するスタック領域にプッシュする処理である。
ここでパラメータ部に記載の３とは変数ａへの代入値３の事である。
次に、処理ｓｅｔｎａｍｅはスタック領域の先頭の値をポップした後、パラメータ部に記載のオフセット位置の変数領域に対して代入し、その代入した値をスタック領域にプッシュする処理である。
ここでパラメータ部に記載の０とは宣言されている変数ａに対するオフセット値である。
本明細書では特に断りがない限りソースコード中に出現順にオフセット値を割り振り、オフセット値はその変数が宣言される直前までに宣言済みの変数の個数としている。
次に、処理ｐｏｐｖはスタックの先頭要素を削除する処理である。
この処理を実施する事で直前のｓｅｔｎａｍｅの最後に行った代入値をスタック領域にプッシュした結果をスタックから開放し、スタックに値が残る事を防止している。
この処理はソースコード中に明記されていないが、圧縮命令データ実行装置１０４が処理を行うに当たり、必要となる処理である。
以上でソースコードの一行目に対応する命令データの処理が終わる。
【００４１】
その直後にソースコードの二行目に対応する命令データが５行目から７行目に記載される。
ソースコードの二行目はソースコードの一行目と同一の構造を持っており、変数名とその変数に代入する値が異なるのみであるため、処理ｎｕｍｂｅｒおよび処理ｓｅｔｎａｍｅに対するパラメータ部の値のみが異なっている。
【００４２】
最後に８行目から１２行目はソースコードの３行目に対応する命令コードが記載されている。
８行目および９行目には処理ｎａｍｅが記載されており、それぞれパラメータ部に記載のオフセット位置の変数領域に格納されている値をスタック領域にプッシュする処理である。
１０行目には処理ａｄｄが記載されており、スタック領域の先頭２要素をポップし、その２要素を加算した結果をスタックにプッシュする処理である。ここまでの命令コードによってソースコードの三行目の一部である「ａ＋ａ」の処理が記述された事になる。
次に、１１行目の処理ｓｅｔｎａｍｅでスタックの先頭に格納されている「ａ＋ａ」の結果の値をポップし、変数ｃに代入し、その代入した値をスタックにプッシュを行い、最後の１２行目の命令ｐｏｐｖで直前の処理ｓｅｔｎａｍｅの最後にプッシュした値をスタックからポップして削除し、ソースコードの３行目に対応する記述は完了する。
【００４３】
図１０は、図９で示したニーモニック表現の命令データを１６進数で表現した一例である。
通常命令データをバイナリ形式として扱う場合にはこのような形式で表現される事になる。
【００４４】
次に、本実施の形態で扱う圧縮命令データに関する具体的な説明を行う。
【００４５】
圧縮命令データとは、命令データ圧縮装置１０３が指定された一つ以上の命令データを処理対象として処理を行い、その命令データの意味的な同質性は保証してその命令データよりもデータサイズが小さくなるように変換を行った結果の命令データの事である。
図１１を用い、図４における命令データ圧縮処理の具体例を一つ挙げ、説明する。
【００４６】
命令データから圧縮命令データを生成するためには、命令データにおける重複する命令列を集計する処理（同一命令列出現回数カウント）を実施する。
ここで命令列とは命令ＩＤ部とパラメータ部の組が一つ以上連続するデータの事を指す。
つまり、本実施の形態では、命令データを任意のバイナリ形式のデータとしてデータ圧縮処理を実施するのではなく、命令としての意味的な構成を最小単位として命令データの圧縮を実施する。この点の詳細は後述する。
次に集計した命令列の出現回数に関する情報からどの命令列を圧縮対象とするのが効果的かを判断し、圧縮対象となる命令列に関する情報をテーブルデータとして作成する処理（圧縮対象命令列テーブル生成）を実施する。
最後に圧縮対象となった命令列を命令データ中から検索し、メタ命令に置き換えることで命令データの意味的な同質性を保持したままデータサイズを削減し、圧縮命令データを生成する処理（命令データ圧縮変換）を実施し、圧縮命令データ生成処理を完了する。
【００４７】
次に、図１１に示す処理を実現するため、本実施の形態に係る命令データ圧縮装置１０３は、例えば図４８に示す構成を有する。
ここでは、図４８に従って、本実施の形態に係る命令データ圧縮装置１０３の構成例を説明する。
【００４８】
命令データ格納装置アクセス部１０３１は、命令データ格納装置１０６から複数の命令列が含まれる機械語による命令データ（プログラム）を入力する。
前述したように、命令列は、命令が示される命令コード（命令ＩＤ部）と命令コードの命令の対象となる０バイト以上のパラメータ値（パラメータ部）とが組み合わされている。
また、命令データ格納装置アクセス部１０３１は、後述の命令解釈・圧縮部１０３２により命令列がメタ命令に置き換えられた後の圧縮命令データと、後述のメタ命令辞書データ生成部１０３６により生成されたメタ命令辞書データとを対応付けて命令データ格納装置１０６に出力する。
命令データ格納装置アクセス部１０３１は、プログラム入力部及びプログラム出力部の例である。
【００４９】
命令解釈・圧縮部１０３２は、命令データ格納装置アクセス部１０３１により入力された命令データの各命令列を解析し、所定の条件を満たす命令列を、当該命令列よりもデータ量が少ないメタ命令に置き換える。
命令解釈・圧縮部１０３２は、命令置き換え部の例である。
命令解釈・圧縮部１０３２は、同一命令列出現回数カウント部１０３３、圧縮対象命令テーブル生成部１０３４、命令データ圧縮変換部１０３５に区別される。
【００５０】
同一命令列出現回数カウント部１０３３は、命令データ格納装置アクセス部１０３１により入力された命令データにおいて命令コードとパラメータ値との組み合わせが共通する命令列の個数を計数する。
【００５１】
圧縮対象命令テーブル生成部１０３４は、同一命令列出現回数カウント部１０３３が計数した命令列の出現回数に関する情報からどの命令列を圧縮対象とするのが効果的かを判断し、圧縮対象となる命令列を示す圧縮対象命令列テーブルを生成する。
つまり、圧縮対象命令テーブル生成部１０３４は、命令列ごとに、同一命令列出現回数カウント部１０３３が計数した命令列の個数と命令列１つあたりのデータ量から命令データにおけるデータ総量を算出し、その命令列に対するメタ命令のデータ量とメタ命令辞書データのデータ量との合計を算出し、メタ命令のデータ量とメタ命令辞書データのデータ量の合計がその命令列のデータ総量よりも少ない場合に、その命令列をメタ命令で置き換えると決定し、圧縮対象命令列テーブルに加える。
【００５２】
命令データ圧縮変換部１０３５は、圧縮対象命令テーブル生成部１０３４により圧縮対象とされた命令列を命令データ中から検索し、メタ命令に置き換えることで命令データの意味的な同質性を保持したままデータサイズを削減し、圧縮命令データを生成する処理（命令データ圧縮変換）を実施し、圧縮命令データ生成処理を完了する。
より具体的には、命令データ圧縮変換部１０３５は、圧縮対象命令列テーブルに示される命令コードとパラメータ値との組み合わせに一致する命令列を抽出し、抽出した命令列をメタ命令に置き換える。
圧縮対象命令列テーブルに示される命令コードとパラメータ値との組み合わせに一致する命令列が２以上存在する場合は、それら２以上の命令列を共通するメタ命令に置き換える。
【００５３】
メタ命令辞書データ生成部１０３６は、メタ命令辞書データを生成する。
メタ命令辞書データは、メタ命令と対応付けて、メタ命令に置き換えられた命令列が示されるデータである。
【００５４】
命令圧縮時情報記憶部１０３７は、命令解釈・圧縮部１０３２が圧縮処理中に利用する記憶手段である。
【００５５】
以下では、命令データ圧縮装置１０３の動作例について順に具体例を挙げ説明を行う。
【００５６】
図１２は、図１１における同一命令列出現回数カウント処理の具体的な一例の処理を図示したものである。
同一命令列出現回数カウント処理は、図４８に示した同一命令列出現回数カウント部１０３３により行われる。
なお、前述の通り、出現回数をカウントする対象は命令列であり、１つの命令列に複数の命令ＩＤ部が含まれる場合が考えられるが、ここでは命令列には単一の命令ＩＤ部のみ含まれているものとして説明する。
【００５７】
処理１２０１では、同一命令列出現回数カウント部１０３３は、命令毎に出現回数を記録するための記録領域を確保し、その内容を初期化する。
ここで用いられる記録領域は、例えば命令圧縮時情報記憶部１０３７である。
【００５８】
図１３は命令ＩＤ別出現回数記録テーブルの要素のデータ構造の一例を図示したものである。
命令識別番号領域はその要素で出現回数を集計する命令の命令ＩＤの値を格納する領域である。
この領域は命令ＩＤ別出現回数記録テーブルを配列として実装した場合にはその配列のインデックスで代用する事も可能である。
パラメータ別出現回数記録テーブル領域は、その要素で出現回数を集計する命令のその直後に続くパラメータ部の値別で出現回数を集計するためのテーブルデータのアドレスを格納する領域である。
パラメータ部が存在しない命令の場合には、アドレスではなく、直接出現回数を保持しても構わないし、パラメータ部が存在する命令と同様に参照先のパラメータ別出現回数記録テーブルで出現回数を記録しても構わない。
【００５９】
図１４はパラメータ別出現回数記録テーブルの要素のデータ構造の一例を図示したものである。
パラメータ部には集計対象となる命令列の命令ＩＤ部直後のパラメータ部の値を直接、もしくは間接参照で保持するための領域である。
出現回数記録領域には、集計対象となる命令ＩＤおよびパラメータ部の値を組とした命令列が命令データに何回出現しているかを集計した結果を記録するための領域である。
パラメータ別出現回数記録テーブルはパラメータ部の値毎に出現回数を記録しなければならないため、固定長配列で管理するのは効率がよくないため、リスト形式や連想配列形式のテーブル管理を行う事を想定している。
【００６０】
処理１２０１の説明に戻る。
記憶領域の確保および初期化に関しては、同一命令列出現回数カウント部１０３３は、命令ＩＤ別出現回数記録テーブルが例えば固定長配列である場合には命令セットで定義されている命令の個数と同数の要素を持つように記憶領域を確保し、各要素に対してその要素で出現回数を記録する命令の命令ＩＤの値を命令識別番号領域に代入し、パラメータ別出現回数記録テーブルに対しては初期値、例えば０やＮＵＬＬポインタなどを代入して初期化を行う。
初期化完了後に処理１２０２に遷移する。
【００６１】
処理１２０２では、同一命令列出現回数カウント部１０３３は、処理対象となっている一つ以上の命令データのうち、まだ処理を行っていない命令データから一つを選択し、その命令データの先頭を指し示すポインタｐｔを作り出す。
このポインタｐｔは、以降の処理で現在処理対象となっている命令データ中の処理すべき命令ＩＤ部の位置を示すために利用する。
ｐｔ作成後、処理１２０３に遷移する。
【００６２】
処理１２０３では、同一命令列出現回数カウント部１０３３は、現時点でのポインタｐｔが処理対象の命令データの終端に到達しているかを判定する。
もし、終端に到達している場合、現在処理対象となっている命令データ中の全ての命令ＩＤ部の処理を完了したことを意味しており、次の命令データの検索処理を実施するため処理１２０４に遷移する。
逆に終端に到達していない場合には処理対象の命令データ中にｐｔで指し示す位置以降のデータは処理されていない事を意味しているため、それらに対する処理を継続するため処理１２０５へ遷移する。
【００６３】
処理１２０４では、同一命令列出現回数カウント部１０３３は、現在処理対象の命令データは全て処理完了したため、次に処理対象とすべき命令データ、つまり処理対象となっていない命令データが存在するか検索する。
その検索の結果、処理対象とすべき命令データが存在しない場合には、ここで処理すべき全ての命令データに対して処理を完了しているため、本処理をもって同一命令列出現回数カウント処理は終了となる。
逆に処理対象とすべき命令データが存在する場合には、その命令データを処理対象として処理１２０２へ遷移する。
【００６４】
処理１２０５では、同一命令列出現回数カウント部１０３３は、ｐｔが指し示す命令ＩＤ部の値に対応する命令識別番号が命令セットに存在するか確認し、対応する命令の情報を取り出す。
ここで取り出す情報は少なくともパラメータ部のサイズ情報などが考えられる。
情報の取り出し完了後、処理１２０６へ遷移する。
【００６５】
処理１２０６では、同一命令列出現回数カウント部１０３３は、ｐｔが指し示す命令ＩＤ部の値に対応する命令に関する出現回数を記録するための命令ＩＤ別出現回数記録テーブルの要素（以下、ｃｏｕｎｔと表記）を取り出す。
この時、ｃｏｕｎｔのパラメータ別出現回数記録テーブル領域がＮＵＬＬである場合には、パラメータ別出現回数記録テーブルを作成し、ｃｏｕｎｔのパラメータ別出現回数記録テーブル領域にそのアドレスを代入する。
処理完了後に処理１２０７に遷移する。
【００６６】
処理１２０７では、同一命令列出現回数カウント部１０３３は、ｐｔが指し示す命令ＩＤ部の直後に続くパラメータ部を検索キーとしてｃｏｕｎｔのパラメータ別出現回数記録テーブル領域で指し示すパラメータ別出現回数記録テーブルから対応する要素（以下、ｔａｒｇｅｔと表記）を検索する。
ここで、パラメータ部が存在しない命令に対する命令識別番号が、ｐｔが指し示す命令ＩＤ部に記載されている場合には、検索キーを指定せずにｃｏｕｎｔのパラメータ別出現回数記録テーブル領域で指し示すパラメータ別出現回数記録テーブルの先頭要素を検索する。
検索処理完了後、処理１２０８に遷移する。
【００６７】
処理１２０８では、同一命令列出現回数カウント部１０３３は、処理１２０７で検索したｔａｒｇｅｔが見つかっているか否かで条件分岐を行う。
ｔａｒｇｅｔが見つかっていない場合には、ｐｔが指し示す命令ＩＤと直後のパラメータ部の組は初めて見つかった事を意味するため、初検索時の処理となる処理１２０９へ遷移する。
逆にｔａｒｇｅｔが見つかっている場合には、既にその組み合わせの命令列は見つかっている事を意味し、２回目以降の出現回数記録処理となる処理１２１３へ遷移する。
【００６８】
処理１２０９では、同一命令列出現回数カウント部１０３３は、ｐｔで指し示す位置から始まる命令列は初めて見つかったため、ｃｏｕｎｔ中に対応する要素であるｔａｒｇｅｔが存在していない。
そのため、対応するパラメータ別出現回数記録要素を新規に作成・初期化し、それをｔａｒｇｅｔとし処理１２１０に遷移する。
【００６９】
処理１２１０では、同一命令列出現回数カウント部１０３３は、ｔａｒｇｅｔの出現回数記録領域に１を代入し、処理１２１１へ遷移する。
【００７０】
処理１２１１では、同一命令列出現回数カウント部１０３３は、ｐｔで指し示す命令列のパラメータ部の値をキーとしてｔａｒｇｅｔをｃｏｕｎｔに登録する。
以上の処理１２０９から処理１２１１によって初めて見つかった命令列に対する出現回数記録処理が完了する。
処理１２１１が終了後、処理１２１２に遷移する。
【００７１】
次に処理１２１３では、同一命令列出現回数カウント部１０３３は、ｐｔが指し示す命令列に対応するｔａｒｇｅｔが見つかっているため、ｔａｒｇｅｔの出現回数記録領域の値に１加算した値を、ｔａｒｇｅｔの出現回数記録領域に代入し、出現回数を更新する。
代入処理終了後、処理１２１２へ遷移する。
以上で、ｐｔが指し示す位置から開始される命令列に対する出現回数更新処理は完了する。
そのため、処理１２１２では、同一命令列出現回数カウント部１０３３は、次に処理すべき命令列の命令ＩＤ部にｐｔをシフトさせる処理を行う。
シフトするサイズに関しては、処理１２０５で取得したパラメータ部のサイズ情報から算出する。
シフトが完了後、新たなｐｔに対する処理を実施するため処理１２０３へ遷移する。
【００７２】
以上で説明した命令ＩＤ別出現回数記録テーブルの作成・初期化処理は命令列に単一の命令ＩＤ部のみ含まれていることを前提としているが、命令列は前述の通り複数の命令ＩＤ部を含む事が想定されている。
そのため、複数の命令ＩＤ部を含む命令列の出現回数の集計を実施する必要があるが、単一の命令ＩＤ部のみを前提とした方法を再帰的に繰り返す事で実現可能である。
以降では複数の命令ＩＤ部を含む事が可能である事として説明を行う。
【００７３】
例えば、複数回出現した命令列に対して、その命令列の直後以降を一つの命令データと見なし、同様の集計方法を実施し、その結果を組み合わせる事で複数の命令ＩＤ部を含む命令列の出現回数の集計が実現される。
その際に、複数回出現した命令列が各命令データのどの位置に出現したかを示す情報を格納する、出現位置情報リストを命令ＩＤ別出現回数記録テーブルの要素のデータ構造に追加し、その出現位置を記録する処理を処理１２１３および処理１２１０に追加し、処理１６０７で圧縮対象命令テーブルに上記出現位置情報リストも併せて登録する処理を追加する事で、それ以降の処理でもどの命令データ中のどの位置から圧縮対象命令列が記述されているかを把握可能となり、上記再帰処理を同一圧縮対象命令列が開始される位置からの処理に限定が可能となり、処理効率を向上させる事も可能である。
以降の説明では出現位置情報リストが命令ＩＤ別出現回数記録テーブルおよび、圧縮対象命令テーブルの要素に含まれるものとして説明を行う。
【００７４】
また、以上で説明した出現回数集計方法は一例であり、それ以外の手順で集計したとしても構わない。
【００７５】
図１６は図１１における、圧縮対象命令列テーブル生成処理の具体的な一例である。
圧縮対象命令列テーブル生成処理は、図４８に示した圧縮対象命令テーブル生成部１０３４により行われる。
【００７６】
圧縮命令データは処理対象となる一つ以上の命令データ中の全ての命令列の中から、サイズ削減率などを考慮し、一つ以上の命令列を、少なくともその命令列よりもサイズの小さいメタ命令で置き換えることによって全体として命令データよりもサイズを小さくした命令データである。
メタ命令は圧縮命令データ実行装置１０４で解釈する場合、対応する命令識別番号、もしくは付随するパラメータ部の値等によって、そのメタ命令が存在する位置の本来の命令列を識別し、メタ命令を実行する代わりに本来の命令列を実行する。
そのため、圧縮命令データには前述のメタ命令で置換された命令データと共に、メタ命令に対応する命令識別番号、もしくは付随するパラメータ部の値等をキーとして本来の命令列を知るための、情報が必要となる。その情報として圧縮対象命令列テーブルを生成するのが圧縮対象命令列テーブル生成処理である。
【００７７】
処理１６０１では、圧縮対象命令テーブル生成部１０３４が、圧縮対象命令列テーブル（以下、ｔａｂｌｅと表記）の実体を生成する。
このテーブルは、最終的に幾つの命令列が集計されたのか未知の場合には可変長配列やリスト構造などで実現する。
ここではリスト構造を仮定し説明を行う。実体生成完了後に処理１６０２へ遷移する。
【００７８】
図１７は圧縮対象命令列テーブルの要素に関するデータ構造の一例を図示している。
【００７９】
命令列記憶領域では、登録されている命令列もしくはその命令列に関する情報を記録する領域である。
重要度記録領域は、その命令列をメタ命令に置き換えた場合の圧縮可能なサイズなどから判断し算出する重要度を記録する領域である。
最終的に全ての命令列に対する重要度を算出し、重要度の高い順に圧縮対象とする命令列を決定する。
なお、圧縮対象命令列テーブルは、図４８の命令圧縮時情報記憶部１０３７を用いて作成される。
【００８０】
処理１６０２では、圧縮対象命令テーブル生成部１０３４は、同一命令列出現回数カウント処理で生成した命令別出現回数記録テーブルからテーブルの先頭要素（以下、ｃｏｕｎｔと表記）を取り出す処理を行う。
取り出し完了後、処理１６０３に遷移する。
【００８１】
処理１６０３では、圧縮対象命令テーブル生成部１０３４は、ｃｏｕｎｔのパラメータ別出現回数記録テーブルから参照可能なパラメータ別出現回数記録テーブルから未処理要素の有無によって条件分岐を行う。
未処理要素が存在しない場合には、ｃｏｕｎｔの要素全てを処理完了したため、新たな処理対象を探すため処理１６０８へ遷移する。
逆に未処理要素が存在する場合にはその未処理要素を処理するため処理１６０４へ遷移する。
【００８２】
処理１６０４では、圧縮対象命令テーブル生成部１０３４は、その未処理要素（以下、ｔａｒｇｅｔと表記）を取得し、処理１６０５へ遷移する。
【００８３】
処理１６０５では、圧縮対象命令テーブル生成部１０３４は、ｔａｒｇｅｔが対応する命令列をメタ命令で置き換えた場合に圧縮効果があるか判定を行う。
圧縮効果は、例えば以下の不等号式が成立する場合には圧縮効果があると判定する。
［命令列長］−［メタ命令長］＞０
判定処理終了後、処理１６０６へ遷移する。
【００８４】
処理１６０６では、圧縮対象命令テーブル生成部１０３４は、処理１６０５の判定結果をもとに、ｔａｒｇｅｔが対応する命令列を圧縮対象命令列テーブルに登録するかどうかを判定し分岐処理を行う。
通常は処理１６０５で圧縮効果があると判定された場合には、テーブル登録を行うため、処理１６０７へ遷移し、圧縮効果がないと判定された場合には次の要素を処理するため、処理１６０３へ遷移する。
【００８５】
処理１６０７では、圧縮対象命令テーブル生成部１０３４は、ｔａｒｇｅｔが対応する命令列に関して圧縮対象命令列テーブルへ情報登録を行う。
この際に、その命令列の重要度を算出し、その結果と共に一つの要素を構成し登録を行う。
ここで重要度は例えば以下の式で算出した値等が考えられる。
ここでメタ命令辞書データ登録情報長とはメタ命令で置き換えた場合、メタ命令から本来の命令列を取り出すための情報源となるメタ命令辞書データにこの命令列を登録した場合のデータ長を意味する。
（［命令列長］−［メタ命令長］）×［命令列出現回数］−［メタ命令辞書データ登録情報長］
【００８６】
処理１６０８では、圧縮対象命令テーブル生成部１０３４は、現在のｃｏｕｎｔに登録されているパラメータ別出現回数記録テーブル要素は全て処理完了しているため、次の処理対象となる未処理要素の有無で分岐処理を行う。
未処理要素が存在する場合には、処理１６０９へ、存在しない場合には処理１６１０へ遷移する。
【００８７】
処理１６０９では未処理要素が存在するため、圧縮対象命令テーブル生成部１０３４は、その要素をｃｏｕｎｔとして処理１６０３へ遷移する。
【００８８】
処理１６１０では未処理要素が存在しない、つまり全ての命令列に関して処理が完了したことを意味するため、圧縮対象命令テーブル生成部１０３４は、ｔａｂｌｅから最終的な圧縮対象命令列テーブルを生成する。
メタ命令で置換可能な命令列の個数は通常、上限が設けられるため、その上限数をここでＮとした場合、ｔａｂｌｅ内の全要素を重要度でソートし、上位Ｎ以下は圧縮対象から排除して、残ったＮ個の命令列を最終圧縮対象命令列として確定し、各要素から重要度を削除したｔａｂｌｅをメタ命令辞書データとし、処理を完了する。
【００８９】
図１８は、図１１における、命令データ圧縮変換処理の具体的な一例である。
本処理では圧縮対象命令列テーブル生成処理で生成したメタ命令辞書データに登録された命令列を処理対象となっている全ての命令データから検索し、その命令列を適切なメタ命令で置き換える処理を行う。
【００９０】
以下ではメタ命令の具体的な例を挙げる。
メタ命令の具体的な例として命令セットの未使用命令識別番号空間を利用する例を挙げる。
本実施の形態では、命令識別番号は１バイトの固定長と仮定しており、命令識別番号は０から２５５、１６進数表記では０ｘ００から０ｘＦＦまでの２５６通りの番号を割り振る事が可能である。
そのうち、例えば０ｘＦ０から０ｘＦ９までが具体的な通常命令が割り当てられていない未使用命令識別番号であったとすれば、その０ｘＦ０から０ｘＦ９までをメタ命令用として予約する事でメタ命令を０ｘＦ０から０ｘＦ９で表現する事が可能である。
この方法であればメタ命令は１バイトで表現可能となる。
その場合、メタ命令辞書データの要素数は最大で１０個までとなり、０ｘＦ０は先頭要素の命令列に対応し、０ｘＦ１は２番目の命令列に対応といった方法でメタ命令と圧縮対象命令列の対応を決定する事が可能となる。
【００９１】
未使用命令識別番号空間が連続していない場合でも、同様に未使用命令識別番号にメタ命令を割り振る事も可能である。
その場合の一つの方法として未使用命令識別番号のうち、一つをメタ命令用として定義し、メタ命令にパラメータ部を少なくとも１つ持たせ、そのパラメータにメタ命令辞書データ中の対応する圧縮対象命令列が格納されている要素のインデックス値を保持させて、対応付ける方法が考えられる。
この方法の場合にはメタ命令長は２バイト以上となる。
【００９２】
その他に、メタ命令辞書データに圧縮対象命令列と組にして対応するメタ命令の命令識別番号の値を登録し、メタ命令を圧縮命令データ実行装置で処理する際にはメタ命令辞書データから処理対象のメタ命令と同じ値を持つ要素を検索して対応付ける事も可能である。
この方法の場合にはメタ命令長は１バイトとなるが、上記の通り圧縮命令データ実行装置で処理する際の対応する命令列の検索処理が必要となる。
【００９３】
次に、メタ命令の具体的な例として命令セットの使用済み命令識別番号空間のうち、処理対象となっている命令データ全てで使用されることがなかった命令識別番号をメタ命令として利用する例を挙げる。
この方法では命令識別番号空間の全てが既に命令が割り振られている場合や、未使用命令識別番号が存在するが、その個数以上に圧縮対象メタ命令が存在する場合に、未使用命令識別番号の個数を超えてメタ命令を定義する場合に有効である。
この方法の場合にはどの命令識別番号をメタ命令に置き換えたのかを示す情報をメタ命令辞書データ等の圧縮命令データ中に記録する必要がある。
【００９４】
また、メタ命令辞書データに登録される命令列が決められた長さの命令長に限定できるとは限らない。
そのような登録される命令列の命令長が不定の場合には登録時にその命令の命令長も併せて登録する。
【００９５】
図１１における、命令データ圧縮変換処理の具体例を、図１８を用いて説明する。
なお、命令データ圧縮変換処理は図４８に示した命令データ圧縮変換部１０３５により行われる。
【００９６】
処理１８０１では、命令データ圧縮変換部１０３５は、処理対象の全ての命令データの中から未処理の命令データを一つ選択し、その命令データの先頭の命令部をポインタｐｔで指し示し、処理１８０２に遷移する。
【００９７】
処理１８０２では、命令データ圧縮変換部１０３５は、ｐｔが指し示す内容は命令データの終端であるかどうかを判定し、その結果によって分岐処理を行う。
終端である場合には、その命令データに記述されている命令列全てを処理した事を意味し、処理１８０３に遷移する。
終端ではない場合には、その命令データには未処理命令列が存在し、その先頭はｐｔが指し示す命令列である事を意味し、処理１８０４に遷移する。
【００９８】
処理１８０３では、命令データ圧縮変換部１０３５は、処理対象の全ての命令データの中に未処理の命令データが存在するか判定し、その結果によって分岐処理を行う。
未処理命令データが存在する場合には、その未処理命令データを処理するため、処理１８０１に遷移する。
一方、未処理命令データが存在しない場合には、全ての処理対象命令データに対する処理を完了したことを意味するため、命令データ圧縮変換処理を終了する。
【００９９】
処理１８０４では、命令データ圧縮変換部１０３５は、ｐｔが指し示す位置からの命令列がメタ命令辞書データに登録されているか検索する。
検索が完了したら、処理１８０５に遷移する。
【０１００】
処理１８０５では、命令データ圧縮変換部１０３５は、処理１８０４の検索結果によって分岐処理を行う。
検索の結果、一致する命令列が存在した場合には処理１８０６へ遷移し、一致する命令列が存在しない場合には処理１８０７に遷移する。
【０１０１】
処理１８０６では、命令データ圧縮変換部１０３５は、一致する命令列がメタ命令辞書データに存在しているため、ｐｔが指し示す位置からの命令列はメタ命令で置換する。
置換終了後に処理１８０７に遷移する。
【０１０２】
処理１８０７では、ｐｔが指し示す位置からの命令列は処理が完了しているため、命令データ圧縮変換部１０３５は、その命令列長分だけｐｔをシフトさせ、次の命令列の先頭を指し示す様に更新する。
シフト処理完了後に処理１８０２に遷移する。
【０１０３】
以上で、処理対象となった全ての命令データをメタ命令辞書データに登録されている命令列をメタ命令で置き換えることで圧縮命令データを生成が完了する。
【０１０４】
図１５は図９で取り上げた命令データに対し、図１２で示した同一命令列出現回数カウント処理を適用した場合に最終的に生成される、命令ＩＤ別出現回数記録テーブルの一例である。
命令識別番号とパラメータ別出現回数記録テーブルの領域は、図１３に示したものである。
そして、パラメータ別出現回数記録テーブルの要素であるパラメータ部と出現回数記録領域は、図１４に示したものである。
【０１０５】
図１９は、図１５に挙げた命令ＩＤ別出現回数記録テーブルに基づき図１６で示した圧縮対象命令列テーブル生成処理を実施した場合に生成される、圧縮対象命令列テーブルの一例であり、図２０はその圧縮対象命令列テーブルに基づき生成されるメタ命令辞書データの一例である。
【０１０６】
この例ではメタ命令は連続する未使用命令識別番号空間を利用して定義される前提で、メタ命令長は１として生成している。
圧縮対象命令列テーブルで重要度が０よりも大きくなるのは命令列ｎａｍｅ（０）のみであり、その他はメタ命令辞書データに命令列を登録する事で増加するデータサイズ増加を考慮すると、サイズ削減効果がない事を意味している。
このメタ命令辞書データには命令列ｎａｍｅ（０）のみがメタ命令に変換する事で命令データのサイズ削減に寄与できる事を意味する。
【０１０７】
図２１は、図９に示した命令データに対して図２０に示したメタ命令辞書データに基づき図１８に示した命令データ圧縮変換処理を実施した結果生成される、命令データの一例である。
【０１０８】
ｎａｍｅ（０）に対応する「０Ｄ００」がメタ命令「Ｆ０」に置き換えられることによって命令データとしては３バイトのサイズ削減となり、メタ命令辞書データは２バイトであり、全体として圧縮前の命令データと圧縮命令データを比較すると１バイトのサイズ削減となる。
ただし、メタ命令辞書データに登録される命令列の命令長が不定長である場合には、例えばメタ命令辞書データに命令長として１バイトの整数領域が追加する事があり、その場合にはサイズ削減効果はなくなる。
ただし、今回は説明を簡略化するため、処理対象となる命令データが小さいためであるが、一般的には例示した命令データよりもデータサイズは大きくなるため、出現回数が上がればサイズ削減効果が発生する。
【０１０９】
例えば、画像データの圧縮であれば、最小単位データサイズ（そのサイズ以下に分割して圧縮処理を行わないサイズ）はＲＧＢの３バイト、単なるバイナリデータであれば１バイトの様に固定されているが、本実施の形態に係る命令データ圧縮装置１０３では、最小単位データサイズは固定値ではなく可変である。
つまり、命令識別番号とそれに付随する全てのパラメータを最小単位とするため、処理最小単位のサイズは可変（厳密には命令識別番号によってその位置での処理最小単位が決まる）である。
例えば、図３９の様に、ある位置の命令識別番号が４バイト分のパラメータを伴う場合、その位置のデータの処理最小単位は５バイト（命令識別番号が１バイト固定を前提）となる。
つまり、先頭３バイトのみが圧縮命令列として登録され、残り２ｂｙｔｅが非圧縮命令列に残るような命令列が分割されるような圧縮処理は行わない。
そして、次の位置の命令識別番号がパラメータを伴わない場合、その位置のデータの処理最小単位は１バイトとなる。
このように、本実施の形態に係る命令データ圧縮装置１０３では、命令列ごとに最小単位データサイズが変化する。
【０１１０】
このような方式を採用する理由は、後述するように、圧縮命令データ実行装置１０４での処理を簡略化するためである。
例えば図４０の様に、ある命令識別番号と第１のパラメータ（Ｐａｒａｍ１）は非圧縮命令列に含まれているが、その命令に付随する第２のパラメータ（Ｐａｒａｍ２）、第３のパラメータ（Ｐａｒａｍ３）は圧縮命令列に含まれている等の状況が発生すると、圧縮命令データ実行装置１０４ではプログラムカウンタ（ＰＣ）に相当する処理対象命令指示手段の位置情報を退避させるだけではなく、その命令に付随するパラメータのどこからが圧縮命令列に記述されているかを知る手段が新たに必要となる。
しかし、そのような手段を実現した場合には、実行時の処理負荷を増大させる欠点があり、その欠点を回避するため、必ず「ある命令列に記述されている場合、必ずその命令に付随するパラメータは同一の命令列に連続して記述される」事を保証するために上記の処理最小単位の決定方法を採用している。
【０１１１】
次に、圧縮命令データ実行装置１０４における命令データおよび圧縮命令データ実行処理の具体的手順を挙げて説明する。
【０１１２】
従来の圧縮された命令データをもとに処理を遂行するデータ処理装置は、圧縮された命令データから非圧縮状態の命令データを復元し、復元された命令データを用いて処理を遂行する。
しかし、その方法を用いた場合には圧縮状態の命令データと復元された命令データの両方をデータ処理装置内に記憶する必要があり、記憶領域を圧迫する。
また、命令データの圧縮処理が必須であり、命令データの実行処理時間が長くなる問題がある。
以上の問題を解決するため、本実施の形態に係る圧縮命令データ実行装置１０４は圧縮命令データからの命令データ復元処理を不要とし、処理時間短縮と記憶領域圧迫軽減を実現する。
【０１１３】
ここで、「圧縮された命令データから非圧縮状態の命令データを復元」することは、「メモリ上に確保されている圧縮命令データに対して何らかの処理を行い、メモリ上に確保した領域に圧縮前の命令データを再現する」行為を意味する。
つまり、従来のデータ処理装置では、「圧縮された命令データから非圧縮状態の命令データを復元」する際に、圧縮前のデータを再現するためのメモリ領域を確保しなければならない。
ただし、メモリに限定する必要はなく、上記記載の「メモリ」を「ＨＤＤ」に置き換えても同じであり、何らかの上限のある資源を消費する事によって圧縮前のデータを再現する行為が必要となる。
メモリ空間を利用して説明すると、「復元」処理前にメモリ空間が図４１の様に、ある領域が確保された状態でその中に圧縮データが存在している。
その状態で、何らかの処理を行う事で非圧縮データが再現され、その再現先として新たなメモリ領域を確保した状態である図４２のような状態が復元後の状態となる。
本実施の形態に係る圧縮命令データ実行装置１０４は、「圧縮命令データを非圧縮状態の命令データに復元せずに圧縮命令データの実行が可能」であるため、図４２の状態を作り出すことなく、図４１の状態で処理を継続する。
このため、本実施の形態に係る圧縮命令データ実行装置１０４は、使用メモリ量の削減効果があり、例えば、組込み機器の様なリソース制約の厳しい環境で有効である。
【０１１４】
本実施の形態では、圧縮命令データ実行装置１０４を図２２の構成とする事で圧縮命令データからの命令データ復元処理を不要とし、処理時間短縮と記憶領域圧迫軽減を実現する。
【０１１５】
図２２において、命令データ格納装置アクセス部１０４１は、命令データを解釈・実行するために、実行対象となる命令データが格納されている命令データ格納装置１０６へのアクセスを行う。
つまり、命令データ格納装置アクセス部１０４１は、命令データ圧縮装置１０３により命令列がメタ命令に置き換えられている命令データを命令データ格納装置１０６から入力する。
また、命令データ格納装置アクセス部１０４１は命令データの入力とともに、命令データ格納装置１０６からメタ命令辞書データを入力する。
命令データ格納装置アクセス部１０４１は、プログラム入力部及びメタ命令辞書データ入力部の例である。
【０１１６】
命令実行時情報記憶部１０４２は、実行対象となる命令データを実行する際に保持すべき情報を記憶する。
命令実行時情報記憶部１０４２は、処理対象命令位置記憶部１０４３、処理対象命令位置退避部１０４４、メタ命令辞書データ保持部１０４５に大別される。
【０１１７】
処理対象命令位置記憶部１０４３は、処理対象命令位置情報を記憶する。
処理対象命令位置情報は、後述の命令列解釈・実行部１０４６で実行対象の命令データのどの位置の命令列が現在の処理対象であるかを示すための情報であり、処理対象命令位置情報は前述のプログラマブルカウンタ（ＰＣ）に相当する。
つまり、命令実行時情報記憶部１０４２は、命令データの実行時に、指定する位置を移動させながら実行対象とすべき命令データ内の位置を指定する。
処理対象命令位置記憶部１０４３は、プログラム位置指定部の例である。
【０１１８】
処理対象命令位置退避部１０４４は、処理対象命令位置記憶部１０４３で記憶している処理対象命令位置情報を一時的に退避（一時的に保存）するための手段である。
より具体的には、処理対象命令位置退避部１０４４は後述の命令列解釈・実行部１０４６がメタ命令辞書データ内のメタ命令に対応付けられている命令列を実行している間はメタ命令の直後の位置の情報を保存し、メタ命令辞書データ内のメタ命令に対応付けられている命令列の実行が完了した際に、保存している位置の情報を処理対象命令位置記憶部１０４３に通知し、通知後に、保存している位置の情報を削除する。
そして、処理対象命令位置記憶部１０４３は、処理対象命令位置退避部１０４４から通知された位置を次に命令列解釈・実行部１０４６が実行対象とすべき命令データ内の位置として指定する。
処理対象命令位置退避部１０４４は、プログラム位置退避部の例である。
【０１１９】
メタ命令辞書データ保持部１０４５は、命令データ格納装置アクセス部１０４１が入力したメタ命令辞書データを保持する。
【０１２０】
命令列解釈・実行部１０４６は、実行対象となる命令データを実際に解釈する。
命令列解釈・実行部１０４６は、メタ命令解釈・実行部１０４７を備える。
メタ命令解釈・実行部１０４７は、通常の命令以外のメタ命令を解釈・実行する。
命令列解釈・実行部１０４６は、処理対象命令位置記憶部１０４３の処理対象命令位置情報により指定されている指定位置の内容がメタ命令であるかどうかを判断し、指定位置の内容がメタ命令でない通常の命令列である場合には、そのまま指定位置の命令列を実行する。
一方、指定位置の内容がメタ命令である場合は、命令列解釈・実行部１０４６は当該メタ命令の直後の位置の情報を処理対象命令位置退避部１０４４に保存させ、メタ命令辞書データ内の当該メタ命令に対応付けられている命令列をメタ命令解釈・実行部１０４７が実行する。
なお、命令列解釈・実行部１０４６は、プログラム実行部の例である。
【０１２１】
通常、データ処理装置で命令データを実行する場合、ある命令データから別の命令データを呼び出す事が可能であり、呼び出された命令データの実行が完了するまで、呼び出し側の命令データの実行は一次停止する。
この時、呼び出された側と呼び出し側の双方の命令データに対する処理対象命令位置情報を保持しておく必要がある。
そのため、処理対象命令位置記憶部１０４３は実行対象の命令データ一つに対して処理対象命令位置情報を記憶する領域が一つ必要となり、通常はスタック形式などで管理される。
同様に、本実施の形態に係る処理対象命令位置退避部１０４４で処理対象位置情報が記憶されている領域の情報を別の記憶領域に退避する場合も命令データ一つに対して退避先領域が一つ必要となり、同様にスタック形式などで管理される。
【０１２２】
図２３は圧縮命令データ実行装置１０４における命令データおよび圧縮命令データの実行処理の具体的手順を図示したものである。
この処理が開始される前に、圧縮命令データ実行装置１０４は図５の実行前準備処理によって、実行対象の圧縮命令データ中の命令データの先頭位置を処理対象命令位置情報として処理対象命令位置記憶部１０４３により、既にその情報を保持した状態となる事を想定して説明を行う。
終端の判定方法は命令データの最後に終端を示す命令識別番号を記録し、その番号をもって判定する方法や、命令データ毎にデータサイズ情報を組みで保持しておき、処理対象命令位置情報の位置から命令データの先頭位置を引いた値が組みとして保持されているデータサイズ−１以上となるかどうかで判定する方法が考えられる。
【０１２３】
処理２３０１では、命令列解釈・実行部１０４６が、現在の処理対象命令位置情報が指し示すデータが終端であるかどうかで分岐処理を行う。
終端である場合には、この命令データに関する処理は全て完了したため本処理は終了する。
終端ではない場合には、現在の処理対象命令位置情報が指し示す命令列を実行するため、処理２３０２へ遷移する。
【０１２４】
処理２３０２では、命令列解釈・実行部１０４６が、処理対象命令位置情報が指し示す位置から始まる命令列の命令識別番号を取得し、どの命令を実行すべきか判定を行う。
この判定方法は例えばＣ＋＋言語を用いて実装する場合には命令識別番号の値を条件としてｓｗｉｔｃｈ文で各々の命令の具体的処理に分岐させる方法等が考えられる。
この判定処理は処理２３０３に対応し、従来の命令セットで定義されている通常命令に対応する命令識別番号の場合には処理２３０５へ遷移し、メタ命令に対応する命令識別番号の場合には処理２３０４に遷移する。
【０１２５】
処理２３０３におけるメタ命令の判定方法に関して、いくつかの具体例を以下に挙げる。
【０１２６】
メタ命令が未使用命令識別番号空間に割り振る場合には、例えばｓｗｉｔｃｈ文のｄｅｆａｕｌｔとして判定された命令識別番号は全てメタ命令として判定する事が考えられる。
また、特定の命令が割り振られているが、命令データ中では使用されていない命令識別番号を利用してメタ命令に再定義する場合には、通常の命令識別番号の判定処理の前に、メタ命令辞書データなどに記録されているメタ命令に置き換えられた命令識別番号情報に一致するか判定し、一致する場合にはメタ命令と判定し処理２３０４へ遷移し、それ以外の場合には通常の命令識別番号の処理判定に遷移する方法が考えられる。
【０１２７】
処理２３０４では、現在の処理対象命令位置情報が指し示す命令はメタ命令であるため、命令列解釈・実行部１０４６は、対応する圧縮対象命令列の実行準備処理を行う。
具体的には、命令列解釈・実行部１０４６は、現在の処理対象命令位置情報にメタ命令長分だけシフトさせた位置情報の値を、処理対象命令位置退避部１０４４内の退避領域に退避させる。
次に、命令列解釈・実行部１０４６が、メタ命令辞書データから、メタ命令に対応する圧縮対象命令列を検索し、その先頭位置を、処理対象命令位置記憶部１０４３の処理対象命令位置情報に上書きする。
以上の処理を行う事で処理対象命令位置情報はメタ命令に対応する圧縮対象命令列の先頭を指し示し、処理対象命令位置退避部１０４４にはメタ命令直後の命令の命令ＩＤ部のアドレスが格納される。
【０１２８】
以上の処理２３０４を実施する前後の圧縮命令データ実行装置１０４の具体的な状態例をそれぞれ図２４、図２５に図示する。
【０１２９】
処理対象命令位置記憶部１０４３は、前述のように、処理対象命令位置情報を記憶するための領域である。
処理対象命令位置退避部１０４４は、前述のように、処理対象命令位置記憶部１０４３に記憶されている処理対象命令位置情報を退避させるための領域である。
メタ命令辞書データ保持部１０４５は、前述のように、現在処理中の圧縮命令データに含まれるメタ命令辞書データを保持するための領域である。
【０１３０】
図２４の処理対象命令位置記憶部１０４３の処理対象命令位置情報が指し示しているのは、処理２３０４を実行する直前はメタ命令の命令識別番号を持つ命令ＩＤ部である。
このメタ命令はメタ命令辞書データ中の圧縮対象命令列２に対応しているものとする。
また、処理対象命令位置退避部１０４４は、現在はメタ命令辞書データ中の圧縮対象命令列の実行を行っていないため、ＮＵＬＬ参照となる。
【０１３１】
図２５は、処理２３０４を実行した直後の状態を示している。
つまり、命令列解釈・実行部１０４６は、現在の処理対象命令位置情報にメタ命令長分だけシフトさせた値を処理対象命令位置退避部１０４４の退避領域に退避させる。
このため、図２５では、処理対象命令位置退避部１０４４は、実行対象のメタ命令の次の命令列を指し示す。
また、命令列解釈・実行部１０４６が、メタ命令辞書データから、メタ命令に対応する命令列を検索し、その先頭位置を、処理対象命令位置記憶部１０４３の処理対象命令位置情報に上書きする。
このため、図２５では、処理対象命令位置記憶部１０４３の処理対象命令位置情報は、メタ命令辞書データ内の圧縮対象命令列２を指し示す。
【０１３２】
処理２３０４完了後に命令列解釈・実行部１０４６は処理対象命令位置記憶部１０４３の処理対象命令位置情報を用いて再度処理２３０３を実行する事によって、圧縮命令データから非圧縮状態の命令データを復元する事なく、メタ命令辞書データ中の対応する圧縮対象命令列の先頭から処理を開始する事が出来る。
また、メタ命令に対応する圧縮対象命令列を実行している最中かどうかの判定はこの場合には処理対象命令位置退避部１０４４がＮＵＬＬ参照ではないかどうかで判定する事が可能である。
【０１３３】
処理２３０５では、命令列解釈・実行部１０４６は、処理２３０３で判定された命令識別番号に対応する具体的な処理を実行する。
処理対象がメタ命令であれば、メタ命令解釈・実行部１０４７が処理２３０５を行う。
実行完了後に処理２３０６に遷移する。
【０１３４】
処理２３０６では、処理対象命令位置記憶部１０４３が、処理２３０５で処理した命令の次に存在する命令ＩＤ部の位置に処理対象命令情報を更新し、次の命令を実行するための準備を実施する。
更新終了後に処理２３０７に遷移する。
【０１３５】
処理２３０７では、現在の処理対象がメタ命令辞書データ中の圧縮対象命令列である場合には、その命令列の実行が終了しているかどうかを判定し、終了している場合には処理２３０８へ遷移し、終了していない場合および処理対象は圧縮対象命令列ではなく通常の命令データである場合には処理２３０１に遷移する。
【０１３６】
圧縮対象命令列を実行しているかどうかは処理対象命令位置退避部１０４４を用いて判定する方法が考えられる。
例えばＮＵＬＬ終端であれば（処理対象命令位置退避部１０４４が初期値を保存している場合）、現在、退避されている処理対象命令位置情報が存在しないため圧縮対象命令列を実行中ではないと判断可能である。
圧縮対象命令列の実行終了判定は処理２３０１と同様に処理対象命令位置情報が終端となっているかどうかで判定する事が可能である。
また、圧縮対象命令列中にメタ命令がある場合には圧縮対象命令列の終端を意味するとして、メタ命令を処理対象命令位置情報領域で指し示している場合には終端であると判定する方法等も考えられる。
更に、実行中の圧縮対象命令列と共にその命令長情報が共にメタ命令辞書データに登録されている場合、その命令長情報と同じだけ圧縮対象命令列を処理した事を終了判定基準とする方法も考えられる。
メタ命令辞書データに登録されている圧縮対象命令列の命令長が固定長もしくは固定数の命令数の場合には、その固定長もしくは固定数の命令数だけ圧縮対象命令列を処理した事を終了判定基準とする方法も考えられる。
特に圧縮対象命令列に含まれる命令数が１に限定されている場合には、処理対象命令位置情報退避領域がＮＵＬＬでない事を終了判定基準とする方法も考えられる。
このように、処理対象命令位置退避部１０４４に初期値以外の情報が保存されているか否か、命令データに含まれるメタ命令の連続数分だけメタ命令辞書データに示される命令列が繰り返し実行されたか否かにより、メタ命令に置き換えられた命令列の実行が完了したか否かを判断可能である。
【０１３７】
処理２３０８では、現在処理対象の圧縮対象命令列の実行が終了した状態であるため、メタ命令実行を終了し通常の命令列の実行に復帰する処理を行う。
具体的には、処理対象命令位置退避部１０４４が保存している位置情報を処理対象命令位置記憶部１０４３に通知し、処理対象命令位置記憶部１０４３が処理対象命令位置退避部１０４４から通知された位置を指定する。
また、処理対象命令位置退避部１０４４はＮＵＬＬ値を記憶する。
復帰処理完了後に処理２３０１へ遷移する。
【０１３８】
以上の処理を繰返し実行する事により、命令データ中のメタ命令からメタ命令辞書データ中の対応する圧縮対象命令列への実行を圧縮命令データから非圧縮状態の命令データに復元することなく、実行する事が可能となる。
【０１３９】
このように、本実施の形態によれば、データ圧縮装置において、命令列のデータサイズに応じて最小単位データサイズを変化させ、命令列ごとにメタ命令に置き換える。
このため、必ず１つの命令に付随するパラメータは同一の命令列に連続して記述され、圧縮命令データ実行装置においてメタ命令に置き換えられている命令列を実行する場合に、圧縮命令データ実行装置はメタ命令から命令と全てのパラメータを取得することができる。
これにより、圧縮命令データ実行装置は、パラメータのどこまでが圧縮されているかを判断する必要がなく、命令データ実行時のオーバーヘッドを軽減することができる。
【０１４０】
また、圧縮命令データ実行時に圧縮命令データから命令データを復元する処理を不要とし、これにより処理時間を短縮することができ、また、使用メモリ量を削減することができる。
【０１４１】
なお、以上までで説明した命令データおよび圧縮命令データ実行手順では圧縮対象命令列にメタ命令が含まれない（メタ命令がネストされていない）事を前提としている。
圧縮対象命令列にメタ命令が含まれる事を許容する場合には、処理対象命令位置退避部１０４４を現在処理対象の命令データに対して可変個数用意可能とするためにスタック構造などとする必要がある。
【０１４２】
また、処理２３０４で処理対象命令位置情報を退避する際に、その位置情報をスタック先頭にプッシュすると共に、処理２３０８で処理対象命令位置情報を復帰する際には、処理対象命令位置退避部１０４４のスタックの先頭要素をポップし、その位置情報を処理対象命令位置記憶部１０４３に代入する事となる。
また、処理２３０７で必要な圧縮対象命令列を実行しているかどうかの判定に関しては処理対象命令位置退避部１０４４のスタックの要素数が０であるかどうかで判定する事となる。
【０１４３】
以上、本実施の形態では、
少なくとも以下で説明する命令データ生成装置、命令データ圧縮装置と圧縮命令データ実行装置から構成されるシステムであり、
命令データ生成装置は、
ソースコードを解析し、規定されている命令セットに従って、命令データに変換する命令データ生成手段を備え、
命令データ圧縮装置は、
命令データ生成手段で生成された命令データを、命令データに出現するパラメータを含む命令および命令列の出現頻度に応じて、メタ命令に置き換え、置き換えた命令および命令列はメタ命令辞書データとして命令データの一部とすることによって、表現内容は同質で命令データの長さを短くなるように命令データを変換する命令データ圧縮手段を備え、
圧縮命令データ実行装置は、
命令データ生成装置もしくは命令データ圧縮装置が生成した命令データを格納する記憶手段と、
記憶手段に格納された命令データにおける次に処理すべき位置を示す処理対象命令指示手段と、
処理対象命令指示手段が保持する位置情報を一時的に保存する処理対象命令指示情報退避手段を備え、
メタ命令を処理する際に、処理対象命令指示手段の保持する位置情報を処理対象命令指示情報退避手段に保存し、処理対象命令指示手段にメタ命令に対応する命令もしくは命令列の先頭の位置情報を保存するメタ命令開始手段を備え、
圧縮命令データで表現される処理内容に従い、処理を遂行する命令データ圧縮および実行システムを説明した。
そして、圧縮命令データ実行装置は圧縮命令データを非圧縮状態の命令データに復元せずに圧縮命令データの実行を可能であり、復元処理分の処理負荷軽減および、非圧縮状態の命令データを記憶するためのメモリ使用量を削減する事が出来ることを説明した。
【０１４４】
また、本実施の形態では、メタ命令は以下のうち少なくとも一つで定義されることを説明した。
命令セットの特定のオペコードを一つ割り振られている。
命令セットにおいて未定義のオペコード空間を全て、もしくはその一部をメタ命令として割り振る。
ソースコードから命令データを生成した際に命令セットとして定義されているが、命令データには出現しなかった命令のオペコード空間の全て、もしくはその一部をメタ命令として割り振る（この場合には、圧縮命令データの一部として命令セットのうちどの命令がメタ命令であるかを示す命令セット・メタ命令対応情報を新たに追加する）。
【０１４５】
また、本実施の形態では、
圧縮命令データ実行装置は、メタ命令辞書データに格納されている命令もしくは命令データ内の命令を実行しているかを判定するメタ命令実行判定手段を備え、判定方法は処理対象命令指示情報退避手段に指示情報が退避されているか否かで判断する事を説明した。
これにより、メタ命令辞書データに登録されている命令データを実行しているかどうかの判定が最小限の処理で実現できる。
【０１４６】
また、本実施の形態では、
圧縮命令データ実行装置は、メタ命令辞書データ内命令もしくは命令列の終了を判定するメタ命令実行終了判定手段を備え、メタ命令実行終了判定手段が終了と判定した場合に、処理対象命令指示情報退避手段が保持する位置情報を処理対象命令指示手段に復帰させ、処理対象命令指示情報退避手段の内容を初期化するメタ命令終了手段を備える事を説明した。
つまり、メタ命令辞書データに登録されている命令データの実行から、それまで実行していた命令データへの復帰方法を説明した。
【０１４７】
また、本実施の形態では、圧縮命令データ実行装置の備えるメタ命令実行終了判定手段では以下の基準のうち少なくとも一つを用いる事を説明した。
処理対象命令指示情報退避手段が保持する情報が初期値でない事、
メタ命令開始手段実行後、特定回数命令実行処理が行われた事、
メタ命令辞書データに、命令もしくは命令列と共に登録されているその命令長情報と同数だけメタ命令開始手段実行後、特定回数命令実行処理が行われた事。
【０１４８】
実施の形態２．
ここまでで説明した命令データ圧縮装置１０３および圧縮命令データ実行装置１０４では、圧縮命令データ実行装置１０４のアーキテクチャは一般的なＣＰＵであっても適用可能である。
しかし、一般的なＣＰＵアーキテクチャではパラメータ部に与えられる値はレジスタ指定、即値、変位値などが記述され、通常は同じ命令識別番号であったとしても、これらの値が異なる場合、ここまでで説明した方法では異なる命令として扱うため、圧縮する事が出来ない。
【０１４９】
また、一般的にソースコード上では同じ処理であっても扱うデータの型によって命令識別番号が異なる処理として扱われる。そのため、この場合もここまでで説明した方法では異なる命令として扱うため、圧縮する事が出来ない。
【０１５０】
本実施の形態では、これらの点に対応する圧縮命令データ実行装置１０４および命令セットを説明する。
【０１５１】
前述の通り通常は命令で取り扱うデータの型によって処理する内容が異なってくる関係で、データ型が異なる場合は命令識別番号が異なるものとして定義されるか、命令識別番号はデータ型で共通であるがどのデータ型を扱うのかパラメータとして識別情報を与える。
そのため、ソースコード上は記述が同一だとしても扱うデータ型が異なるため生成される命令データは異なる結果となる場合があり、一致確率が下がり、圧縮率が低くなる。
そこで、本実施の形態に係る命令データ圧縮装置１０３及び圧縮命令データ実行装置１０４は取り扱うデータの値と共に、そのデータの型を示す型識別情報を組として一つのデータとして扱う。
これにより、命令識別番号に、もしくは型を示すパラメータを必要とする事なく、処理対象となるデータのデータ型を知る事が可能とする事によって、扱うデータ型によってソースコード上は同一処理であっても命令識別番号を異なるものとして定義する必要性や、データ型を指示するパラメータの必要性を排除する事が可能となる。
このような性質を持つ命令データ圧縮装置１０３及び圧縮命令データ実行装置１０４に対する命令セットとして、同一処理内容で扱うデータの型が異なる場合であっても、命令識別番号は全て同一とする命令セットを定義する事が可能となり、結果として命令列の一致確率を上げることが出来る。
【０１５２】
加算演算に関する命令を例に挙げて具体的に説明する。
この加算演算で取り扱い可能なデータ型が整数型、浮動小数点型、ブール型、文字列型の４種類があるとする。
その場合、通常の圧縮命令データ実行装置では、扱う型毎に加算演算に関する命令識別番号が定義される事になるため、加算演算に関してだけで４種類定義される事になる。
そのため、例えば、同型同士の加算演算が複数の箇所に存在したとしても、それぞれの加算演算で扱うデータ型が異なる場合には、全て異なる命令識別番号となり、同一命令列として扱う事が出来ない。
【０１５３】
例えば、加算命令Ａｄｄが整数型に対してはＡｄｄ＿ｉと定義され、浮動小数点型に対してはＡｄｄ＿ｆと定義され、ブール型に対してはＡｄｄ＿ｂと定義され、文字列型に対してはＡｄｄ＿ｓと定義される場合を考える。
ここで、ソースコード中に、
ａ＋ｂ
という記述があった場合、変数ａ，ｂが共に整数型の場合は、例えば、
Ａｄｄ＿ｉ  ａ，ｂ
というバイトコードが出力される。
しかし、変数が浮動小数点型の場合には、
Ａｄｄ＿ｆ  ａ，ｂ
というバイトコードが出力され、整数型の場合と異なるバイトコードが出力される事になる。
同様に変数がブール型、文字列型の場合には、
Ａｄｄ＿ｂ  ａ，ｂ
Ａｄｄ＿ｓ  ａ，ｂ
となり、異なるバイトコードになる。
このように、ソースコード上は「ａ＋ｂ」と言う同一の表現であったとしても、命令が取り扱う種別（型）と依存した形式の命令セットの場合、ａ，ｂの型の違いによって生成される命令列は異なる命令列だとして扱われ、上記の型が異なる４種類の「ａ＋ｂ」を同一命令列であるとして圧縮対象とする事は出来ない。
【０１５４】
一方で、命令が型とは独立で定義されている場合、つまりＡｄｄ命令一つで任意の型のオペランドに対する加算命令を定義する場合、変数ａ，ｂが整数型、浮動小数点型、ブール型、文字列型どれであったとしても、
Ａｄｄ  ａ，ｂ
と同じバイトコードで表現可能である。
よって、命令が取り扱う種別（型）と独立した形式の命令セットの場合、ａ，ｂの型が何であっても、生成されるバイトコードは同一となり、４種類の「ａ＋ｂ」を同一命令列として圧縮対象とする事ができる。
よって、命令が型に依存している場合よりも、独立している場合の方が、命令が同じ命令になりやすいため、命令列の一致確率があがる（上記例のように型が４種類の場合には一致確率が４倍）。
【０１５５】
本実施の形態に係る命令データ圧縮装置１０３では、上記のＡｄｄ＿ｉ、Ａｄｄ＿ｆ、Ａｄｄ＿ｂ、Ａｄｄ＿ｓのように、相互に命令コードの命令内容は共通するがパラメータ値のデータ型が異なっているため命令コードが異なっている命令列（以下、共通命令異データ型命令列という）を共通のメタ命令に置き換えることにより圧縮効率を向上させる。
本実施の形態に係る命令データ圧縮装置１０３の構成例は図４８に示したものと同様である。
【０１５６】
命令データ格納装置アクセス部１０３１は、命令データ格納装置１０６から、共通命令異データ型命令列が２以上含まれる命令データを入力し、更に、共通命令異データ型命令列ごとにパラメータ値のデータ型が示される型識別情報（データ型情報）を入力する。
また、同一命令列出現回数カウント部１０３３は、命令ＩＤ部の命令内容（Ａｄｄ＿ｉ、Ａｄｄ＿ｆ、Ａｄｄ＿ｂ、Ａｄｄ＿ｓのＡｄｄ部分）とパラメータ部との組み合わせが共通する２以上の共通命令異データ型命令列を抽出し、出現回数をカウントする。
圧縮対象命令テーブル生成部１０３４は、同一命令列出現回数カウント部１０３３のカウント結果に基づき、実施の形態１と同様に、圧縮対象命令テーブルを生成する。
更に、命令データ圧縮変換部１０３５は、実施の形態１と同様に、圧縮対象命令テーブルに従って命令列をメタ命令に置き換える。
このとき、命令ＩＤ部の命令内容とパラメータ部との組み合わせが共通する共通命令異データ型命令列がメタ命令の対象になっている場合は、これら共通命令異データ型命令列のそれぞれを共通するメタ命令に置き換える。
また、メタ命令辞書データ生成部１０３６は、実施の形態１と同様に、メタ命令辞書データを生成する。なお、共通命令異データ型命令列については、例えば、Ａｄｄ＿ｉ、Ａｄｄ＿ｆ、Ａｄｄ＿ｂ、Ａｄｄ＿ｓをまとめた命令ＩＤを記述する。
そして、命令データ格納装置アクセス部１０３１は、共通命令異データ型命令列がメタ命令に置き換えられた命令データと、メタ命令辞書データと、型識別情報（データ型情報）とを対応付けて命令データ格納装置１０６に出力する。
【０１５７】
また、本実施の形態に係る圧縮命令データ実行装置１０４の構成例も図２２に示したものと同様である。
【０１５８】
命令データ格納装置アクセス部１０４１は、命令データ格納装置１０６から、共通命令異データ型命令列がメタ命令に置き換えられた命令データと、メタ命令辞書データと、型識別情報（データ型情報）とを入力する。
メタ命令解釈・実行部１０４７は、処理対象命令位置記憶部１０４３の処理対象命令位置情報により指定されている指定位置の内容が共通命令異データ型命令列を置き換えたメタ命令である場合に、当該メタ命令で置き換えられている共通命令異データ型命令列のパラメータ値のデータ型を型識別情報を参照して判別する。
そして、メタ命令辞書データ内の当該メタ命令に対応付けられている共通命令異データ型命令列を、判別したパラメータ値のデータ型に対応させて実行する。
【０１５９】
なお、上記の方式、つまり、命令データ圧縮装置１０３が命令データ、メタ命令辞書データとともに型識別情報を出力し、圧縮命令データ実行装置１０４が型識別情報を参照してオペランドの型を判別する方式に代えて、以下の方式を用いるようにしてもよい。
【０１６０】
命令セットは任意の命令体系でも効果があるが、より圧縮効率を向上させる方法の一つとして、命令で処理する対象となるデータ（以下、オペランド）の型に依存しない命令セット（以下、型自由命令セット）に対してプログラム圧縮装置を適用する方法が考えられる。
以下でオペランドの型に依存する命令セット（以下、型依存命令セット）と型独立命令セットでの一致確率の違いについて説明する。
双方の命令セットで取り扱い可能なデータ型として整数型と浮動小数点型があるとする。また、それらのデータに対して実施可能な処理の一つとして加算処理があるとする。
この時、型依存命令セットの場合、定義される命令は型に依存して定義されるため、
・整数値をオペランドに取る加算処理命令Ａｄｄ＿ｉ
・浮動小数点値をオペランドに取る加算処理命令Ａｄｄ＿ｆ
の二種類の加算処理命令が定義される事になる。
一方で、型自由命令セットの場合、定義される命令は型に依存しない定義となるため、
・任意の型のオペランドを取る加算命令Ａｄｄ
の一種類の加算処理命令が定義される事になる。
この時プログラムの一部に２変数をオペランドとして扱う加算処理の記述があった場合、型依存命令セットの場合には２変数の型が何であるかによって生成される加算処理命令は異なり、変数の型が整数型の場合にはＡｄｄ＿ｉが生成され、浮動小数点型の場合にはＡｄｄ＿ｆが生成される。
一方で、型自由命令セットの場合には、変数の型に依存せず必ずＡｄｄが生成される。
つまり、型自由命令セットでコード化することによって、生成される命令が異なる確率をその命令で対応可能な型の種類数だけ上昇させる効果がある事を意味している。
よって、プログラムをコード化する際に型自由命令セットに変換する事によって、コード中に出現する命令の一致確率を上昇させる事が可能となり、圧縮率を向上させる事が可能となる。
具体的に上記例の場合であれば処理対象の型が整数型と浮動小数点型の二種類であるため、型依存命令セットに対して型自由命令セットは２倍の命令一致確率になる。
ただし、型依存命令セットを処理対象とするプログラム実行装置と比較して、型自由命令セットを処理対象とするプログラム実行装置は命令自体に取り扱うオペランドの型情報が含まれていない分、命令実行時に処理対象となるオペランドの型を検証し、どの型に対する処理を実行しなければならないのかを逐次判断する処理が必要となる。
【０１６１】
つまり、本方式では、命令データ圧縮装置１０３が入力するプログラムには、オペランドが整数型であっても浮動小数点型であっても共通にＡｄｄという命令コードが記述されている。
このため、Ａｄｄ＿ｉやＡｄｄ＿ｆのように型依存命令セットで命令コードが記述されている場合に比べて、命令コードの一致確率が向上し、命令データ圧縮装置１０３における圧縮率を向上させることができる。
本方式では、命令データ圧縮装置１０３は、命令データとメタ命令辞書データのみを出力し、圧縮命令データ実行装置１０４は、命令データとメタ命令辞書データのみを入力する。
また、圧縮命令データ実行装置１０４において命令列解釈・実行部１０４６は、実施の形態１と同様にして、命令データ内のメタ命令に置き換えられている部分はメタ命令辞書データに示されている命令列を実行し、メタ命令に置き換えられてない部分はそのまま命令列を実行する。
なお、命令列の実行の際に（メタ命令に置き換えられている命令列の実行及びメタ命令に置き換えられていない命令列の実行の両者）、命令列解釈・実行部１０４６は、オペランドのパラメータ値のデータ型を判定し、判定したデータ型に対応させて命令コードの命令を実行する。
つまり、前出の例に従えば、Ａｄｄ命令を実行する際に、命令列解釈・実行部１０４６は、オペランドのデータ型が整数型なのか浮動小数点型なのかを判定し、整数型であれば整数型に対応させたＡｄｄ命令を実行し（Ａｄｄ＿ｉを実行することに相当）、浮動小数点型であれば浮動小数点型に対応させたＡｄｄ命令を実行する（Ａｄｄ＿ｆを実行することに相当）。
なお、ここでは、整数型と浮動小数点型という２種類のデータ型を対象にして説明したが、ブール型、文字列型を含めた４種類のデータ型に対して共通に型自由命令セットＡｄｄを用い、圧縮命令データ実行装置１０４においてオペランドが４種類のデータ型のいずれであるかを判定してＡｄｄ命令を実行することができる。
【０１６２】
本実施の形態によれば、例えば、４種類のデータ型に対応する演算処理全てを一つの命令識別番号で表現可能となり、扱うデータ型の違いに関係なく同一命令識別番号による命令列で表現可能となり、加算演算に関する命令列の一致確率は対応するデータ型の個数に対応して４倍に上がる。
【０１６３】
以上、本実施の形態では、
命令データ生成手段および命令データ圧縮手段において、命令セットとして命令が取り扱うデータの種別とは独立して定義されているセットを利用して命令データを生成する事を説明した。
つまり、整数型、浮動小数点型、文字列型の加算命令は通常Ａｄｄ＿ｉ、Ａｄｄ＿ｆ、Ａｄｄ＿ｓ等に異なる命令として実装されるが、動的型判定処理を圧縮命令データ実行装置に持つ事で加算命令を一つのＡｄｄにまとめることが可能となり、一致する確率が上がる事ができる。
【０１６４】
実施の形態３．
圧縮命令データ実行装置１０４は、自身が取り扱う全てのデータのサイズを同一固定長で表現可能とする事によって、メモリアドレスを実際のメモリアドレス値から、実行時のメモリ空間を配列として見た時の配列インデックス（オフセット表現）で表現する事が可能となる。
たとえばローカル変数のメモリ配置はそのコンテキスト内での変数出現順に先頭から順に積み上げて配置する方式をとり、データサイズを４バイト固定長とした場合、配列インデックスでメモリアドレスを表現する方法は実際のメモリアドレスで表現する方法と比較し、メモリアドレスの取りうる値の集合は４分の１となる。
とりうる値の集合が４分の１になっているため、これだけの条件だけであるコンテキスト下におけるある変数が別のコンテキスト下のある変数とメモリアドレスが一致する確率は４倍高くなり、パラメータ部の一致確率が上がることを示している。
【０１６５】
例えばある関数中に変数宣言として、
ｂｏｏｌ  ａ，ｂ；
ｉｎｔ  ｃ；
と記述されているとする。
一般的に変数に割り当てるメモリサイズは型によって異なり、ｂｏｏｌ型の場合には１ｂｙｔｅ、ｉｎｔ型の場合は４ｂｙｔｅ、ｓｈｏｒｔ型の場合には２ｂｙｔｅなどの様になる。
この場合、ローカル変数の場合にはスタック領域に宣言順に領域が確保され、アライメント等を考慮すると例えば図４３の様なメモリ配置になる。なお、図４３におけるハッチング部分は、使用されていないアドレスを示す。
変数ａのアドレスは０ｘ１２３４００００となり、変数ｂのアドレスは０ｘ１２３４０００１、変数ｃのアドレスは０ｘ１２３４０００４と言った形で各変数の識別子はメモリアドレス（と同等、通常はベースアドレスからのオフセット）の値が利用される。
【０１６６】
この状況で変数ｃをスタックにプッシュする命令を生成した場合、
Ｎａｍｅ  ４
となる。
ここで「４」はベースアドレスとなる０ｘ１２３４００００からの変数ｃのオフセット値となる。
同様の条件下で、
ｂｏｏｌ  ａ；
ｉｎｔ  ｂ；
ｂｏｏｌ  ｃ；
と変数宣言された場合には、図４４の様なメモリ配置になり、変数ａ，ｂ，ｃのアドレスは０ｘ１２３４００００，０ｘ１２３４０００４，０ｘ１２３４０００８となり、変数の宣言順が同じだとしても、その変数の前に宣言されている変数の型によってアドレス位置は影響を受け、変化してしまう。
そのため、同様に変数ｃをスタックにプッシュする命令を生成した場合、
Ｎａｍｅ  ８
となり、上記の命令列とは異なるものとして生成される事になる。
よって、同じ宣言順序であったとしても変数の識別情報が異なるため、生成される命令列は同一にならない。
一方で、型に依存せず変数に割り当てるメモリサイズを固定（今回の例では４バイト固定長）とした場合には、上記２種類の変数宣言であったとしても、図４５のようになり、各変数のメモリ領域は変数の宣言順によってのみ決める事が可能となる。
よって、変数ｃをスタックにプッシュする命令を生成した場合、どの変数宣言の場合であっても宣言順序が同じであるため、
Ｎａｍｅ  ２
となり。
ここでパラメータの「２」は変数宣言順序から１引いた値となっている。
このような性質を有する事によって、ローカル変数の識別情報はメモリアドレスの３２ビットから、４バイト固定長とした場合には３０ビットで表現する事が可能になる。
２ビット分、つまり４分の１の集合で全ての変数を表現できるようになるため、単純に一致比較する集合の要素数が４分の１になるため、一致確率は４倍に上がる。
【０１６７】
本実施の形態に係る命令データ圧縮装置１０３は、上記のようにデータ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられている命令データを圧縮する。
本実施の形態に係る命令データ圧縮装置１０３の構成例は図４８に示したものと同様である。
【０１６８】
本実施の形態では、命令データ格納装置アクセス部１０３１は、命令データの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コード（上記の命令Ｎａｍｅ）とメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値（上記の「４」、「８」、「２」等）とが組み合わされているアドレス管理命令列（上記のＮａｍｅ  ４、  Ｎａｍｅ  ８、  Ｎａｍｅ  ２等）が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられる命令データを入力する。
また、同一命令列出現回数カウント部１０３３は、アドレス管理命令コードとアドレス指定パラメータ値との組み合わせが共通する２以上のアドレス管理命令列を抽出し、出現回数をカウントする。
圧縮対象命令テーブル生成部１０３４は、同一命令列出現回数カウント部１０３３のカウント結果に基づき、実施の形態１と同様に、圧縮対象命令テーブルを生成する。
更に、命令データ圧縮変換部１０３５は、実施の形態１と同様に、圧縮対象命令テーブルに従って命令列をメタ命令に置き換える。
このとき、アドレス管理命令コードとアドレス指定パラメータ値との組み合わせが共通するアドレス管理命令列がメタ命令の対象になっている場合は、これらアドレス管理命令列のそれぞれを共通するメタ命令に置き換える。
また、メタ命令辞書データ生成部１０３６は、実施の形態１と同様に、メタ命令辞書データを生成する。
また、命令データ格納装置アクセス部１０３１は、アドレス管理命令列がメタ命令に置き換えられた命令データと、メタ命令辞書データとを対応付けて命令データ格納装置１０６に出力する。
なお、圧縮命令データ実行装置１０４の動作は、実施の形態１と同様である。
【０１６９】
以上、本実施の形態では、
命令データ生成手段および命令データ圧縮手段において、命令セットとしてメモリの位置を示すメモリアドレスが抽象化されたオフセット表現で定義されているセットを利用して命令データを生成する事を説明した。
つまり、通常はブール型、整数型、浮動小数点型で消費するメモリサイズが異なるため、メモリの位置指定は番地指定する必要があるが、全ての型を同一サイズとする事で、アドレスではなく配列のインデックスの様な番地よりも密度の低い値で表現可能となる。
そのため、メモリ参照用のパラメータが取りうる値の種類が少なくなり、一致する確率が上がる。
【０１７０】
実施の形態４．
本実施の形態では、実施の形態３と同様に、データ型にかかわらず全ての変数に対して同一のメモリサイズが割り当てられる場合に、あるコンテキスト下のある二つ以上のローカル変数に対するメモリアドレスを交換することによって、別のコンテキスト下にある変数とのメモリアドレスが一致する確率を上げることができる。
【０１７１】
本実施の形態に係る方式を図２６、図２７および図２８を利用して説明する。
【０１７２】
図２６は二つの類似するソースコードの一例である。
左側の関数ｆｕｎｃＡと右側の関数ｆｕｎｃＢはどちらも台形の面積を求める関数である。
しかし、ｆｕｎｃＡの場合には引数ａおよび引数ｂが上底、下底で、引数ｃが高さを表すが、ｆｕｎｃＢの場合には上底、下底を表すのは引数ｃおよび引数ｂで、高さを表すのは引数ａとなっている点で異なっている。
これらの関数を命令データに変換した結果の一例が図２７である。
左側の命令データ２７０１が図２６における関数ｆｕｎｃＡに対する命令データであり、右側の命令データ２７０７が図２６における関数ｆｕｎｃＢに対する命令データである。
前述の通り、ローカル変数のメモリ配置はそのコンテキスト内での変数出現順に先頭から順に積み上げて配置する方式を取っており、変数の識別情報はその変数の出現順序に等しくなる。
そのため、変数ａ、ｂおよびｃに対する識別情報は、関数ｆｕｎｃＡではそれぞれ命令データ中のパラメータ２７０１、パラメータ２７０２、パラメータ２７０３の０、１、２となり、関数ｆｕｎｃＢではそれぞれ命令データ中のパラメータ２７０４、パラメータ２７０５、パラメータ２７０６の２、１、０となる。
そのため、関数の処理内容は同一であっても、変数の出現順序が異なることにより、生成される命令データは完全一致せず、変数の識別情報がパラメータに含まれない命令のみが一致する部分一致にとどまっている。
しかし、この命令データでは変数ａおよびｃの識別情報がどちらかの命令データにおいて逆に設定される事で、関数ｆｕｎｃＡと関数ｆｕｎｃＢの命令データは完全一致させることが可能である。
【０１７３】
図２８は、上記観察をもとに一旦命令データ圧縮装置１０３が生成した圧縮命令データを処理対象の命令データとして変数識別情報を変更する事によって、圧縮対象命令列のサイズ拡大を行う処理に関する処理手順の一例である。
この処理は例えば、図１８の処理１８０３で処理対象となる命令データがないと判定された後に実施する等、処理対象のソースコードに対する圧縮命令データが全て生成された状況で実施する事を想定としており、必ずしも処理１８０３の直後で実施しなければならないわけではない。
なお、ここでは、図２８の処理は、命令データ圧縮変換部１０３５が行うものとして説明するが、必ずしも命令データ圧縮変換部１０３５が行わなければならないわけではなく、例えば、同一命令列出現回数カウント部１０３３が行ってもよい。
【０１７４】
処理２８０１では、命令データ圧縮変換部１０３５は、処理対象となる全ての圧縮命令データで、少なくとも一つ以上の本処理を実施していない圧縮命令データがあるか否かを判定する処理である。
ここで、未処理の圧縮命令デーが存在しない場合には、処理対象が現状では存在しない事を意味するため、速やかに本処理を終了する。
逆に一つ以上の未処理圧縮命令データが存在する場合には処理２８０２へ遷移する。
【０１７５】
処理２８０２では、命令データ圧縮変換部１０３５が、処理２８０１で見つかった未処理の圧縮命令データの中から一つを選択し、処理済フラグを立て、以降の処理ではベースとなる圧縮命令データとして取り扱う準備を実施し、処理２８０３へ遷移する。
また、説明を簡単にするため、この圧縮命令データをＡと表記する。
【０１７６】
処理２８０３では、命令データ圧縮変換部１０３５は、処理対象となる全ての圧縮命令データのうち、Ａ以外でかつＡと以降の処理を実施していない圧縮命令データがあるか否かを判定する。
ここで、未処理の圧縮命令データが存在しない場合には、Ａに対する以降の処理を全ての圧縮命令データに対して実施済みである事を意味するため、処理２８０１へ遷移し、他の圧縮命令データをベースとして処理を実施する。
逆に未処理圧縮命令データが存在する場合には処理２８０４へ遷移する。
【０１７７】
処理２８０４では、命令データ圧縮変換部１０３５は、処理２８０３で見つかったＡに対する未処理の圧縮命令データの中から一つを選択し、Ａに対する処理済みフラグを立て、処理２８０５へ遷移する。
また、説明を簡単にするため、ここで選択した圧縮命令データをＢと表記する。
【０１７８】
処理２８０５では、命令データ圧縮変換部１０３５は、処理対象となった圧縮命令データＡおよびＢに関して、相互に変数識別情報がパラメータ部に記載されている箇所は比較対象外、つまり任意の値であっても一致しているものと仮定して、一致箇所の判定を実施し、判定結果全てを合わせてＸと表記する。
この際の一致判定はどのような基準を用いて一致判定を行っても構わないが、通常は命令データ中における一致判定された領域の合計サイズが最大となる基準や、一致判定された領域のうち、個別に最大サイズになるような基準を用いる。
例えば、図２７における二つの命令データがＡおよびＢに対応するものと仮定した場合、パラメータ２７０１からパラメータ２７０６までの６個のパラメータ部が変数識別情報であるため、そのパラメータ部は一致していると仮定して命令データ間の一致比較を行う。
そのため、この場合には先頭から最後まで連続して一致しているものとして判定される。
処理終了後に、処理２８０６へ遷移する。
【０１７９】
処理２８０６では、命令データ圧縮変換部１０３５は、処理２８０５で一致した領域中の変数識別情報が記載されているパラメータ部で不一致している箇所があるかを判定する。
この処理では例えば、図２７における二つの命令データの場合にはパラメータ２７０１からパラメータ２７０６までが不一致パラメータ部として判定され、その結果を引き継ぎ、処理２８０７へ遷移する。
【０１８０】
処理２８０７では、命令データ圧縮変換部１０３５は、処理２８０６の処理結果を受け、不一致のパラメータ部における変数識別情報の値を変更する事によって、処理２８０５では判定対象外としたパラメータ部も含めて完全一致する箇所の判定を実施する。
例えば、図２７の二つの命令データに対して本処理を適用した場合、パラメータ２７０１とパラメータ２７０３の値を入れ替える事によって、双方の命令データが最初から最後まで完全一致する。
処理２８０７では変数識別情報の値変更と共に、その変更によって、命令データが変更前の処理と矛盾が生じていないか検証を行い、矛盾が生じた場合には他のパターンでの変更を試み、矛盾が発生しない変更パターンが出るまで、もしくは変更パターンがなくなるまで繰返し、変更を行う。
矛盾の発生しない変更パターンが見つかった場合、もしくは変更パターンがなくなった場合には処理２８０８へ遷移する。
【０１８１】
処理２８０８では、命令データ圧縮変換部１０３５は、処理２８０７で行った変更の前後の圧縮命令データ間で比較を行い、変更後の圧縮率が向上しているか判定を行う。
圧縮率が向上している場合には処理２８１０へ遷移し、圧縮率が向上していない、もしくは既に変更パターンがなくなっている場合には処理２８０９へ遷移する。
【０１８２】
処理２８０９では、命令データ圧縮変換部１０３５は、処理２８０７で行った変更では圧縮率が向上しなかったため、他の変更パターンで圧縮率が向上するか再実施するため、他の変更パターンが存在するかチェックする。
他の変更パターンが存在する場合には処理２８０７へ遷移し、他の変更パターンが存在しない場合には処理２８０３へ遷移する。
【０１８３】
なお、処理２８０７、処理２８０８、処理２８０９では最初に圧縮率が変更前よりも向上する変更パターンが見つかると処理２８１０へ遷移しているが、全ての変更パターンに対して処理２８０７を適用し、最も圧縮率の向上が大きかった変更パターンを持って処理２８１０へ遷移する方法も考えられる。
【０１８４】
処理２８１０では、命令データ圧縮変換部１０３５は、処理２８０８で圧縮率が向上したと判定された変更パターンをＡとＢに適用した場合に、その圧縮対象命令列を用いて他の命令データを圧縮した場合の圧縮命令データの生成および、圧縮率の算出を行う。
圧縮命令データ生成および圧縮率算出が終了後、処理２８１１へ遷移する。
ここで圧縮率は単純に全体の命令データのサイズ算出だけでも構わない。
【０１８５】
処理２８１１では、命令データ圧縮変換部１０３５は、処理２８１０で求めた圧縮率をもとに全体での圧縮率向上が達成されているかを判定する。
ここで圧縮率が向上している場合には、処理２８１２へ遷移し、圧縮率が向上していない場合には処理２８０３へ遷移する。
【０１８６】
処理２８１２では、命令データ圧縮変換部１０３５は、処理２８１１で圧縮率が向上していると判定された変更パターンを命令データＡおよびＢに適用した結果生成される圧縮命令列を用いて、再度全ての命令データを圧縮した結果を現在の圧縮命令データとして採用する。
採用後、処理２８０３へ遷移し、全ての命令データに対して変数識別情報の変更で圧縮効率が向上するかどうかを検証し、最適な圧縮命令データの生成を完了させる。
【０１８７】
図２７の二つの命令データに対し、図３０に図示する本処理を適用した場合の圧縮命令データと、図２９に図示する適用しなかった場合の圧縮命令データのサイズ比較を行う。
本処理を適用しない場合の圧縮命令データでは、３行目から４行目までのｎａｍｅ  １およびａｄｄが一つ目の圧縮対象命令列となり、６行目から９行目までのｍｕｌ、ｎｕｍｂｅｒ  ２、ｄｉｖ、ｒｅｔｕｒｎが二つ目の圧縮対象命令列となり、具体的には図２９が一例となる。
データ２９０１はデータ２７０１に対応する命令データ、データ２９０２はデータ２７０７に対応する命令データであり、本処理ではデータ２７０１の２行目と４行目の変数識別情報を置換した場合の結果を示している。
データ２０９３は命令データ圧縮装置によって圧縮対象命令列を登録しているメタ命令辞書データである。
圧縮前はデータ２７０１およびデータ２７０７のデータサイズは１７バイトであり合計は３４バイトとなる。
一方データ２９０１、データ２９０２およびデータ２９０３のデータサイズはそれぞれ１０バイト、１０バイト、１３バイトで合計３３バイトとなり、１バイト分のサイズ削減となる。
一方で本処理適用後のデータ３００１、データ３００２、データ３００３のデータサイズはそれぞれ２バイト、２バイト、１８バイトの合計２０バイトとなり、圧縮前のデータサイズに対して１４バイト、本処理適用前の圧縮命令データに対して１３バイトの圧縮が実現され、変数識別情報を変更する事によって、一致する命令列の領域を拡大する事によって、圧縮率が向上させる事が可能である事を示している。
【０１８８】
このように、本実施の形態では、命令データ格納装置アクセス部１０３１は、命令データの実行時にパラメータ値が格納されるメモリアドレスを管理するためのアドレス管理命令コード（上記の命令ｎａｍｅ）とメモリアドレスがオフセット表現で指定されるアドレス指定パラメータ値（上記の「０」、「１」、「２」等）とが組み合わされているアドレス管理命令列（上記のｎａｍｅ  ０、ｎａｍｅ  １、ｎａｍｅ  ２等）が含まれ、データ型にかかわらず全てのパラメータ値に同一のメモリサイズが割り当てられる命令データを入力する。
命令データ圧縮変換部１０３５は、特定のコンテキスト（命令列群）に含まれるアドレス管理命令のアドレス指定パラメータ値を、他のコンテキスト（命令列群）に含まれるアドレス管理命令のアドレス指定パラメータ値と一致するように書換え、特定のコンテキストにおける命令列の並びと他のコンテキストにおける命令列の並びを共通にし、特定のコンテキストの命令列と他のコンテキストの命令列を共通のメタ命令で置き換える。
これにより、圧縮率を向上させることができる。
【０１８９】
以上、本実施の形態では、命令データ圧縮手段において、あるメモリ領域のオフセット値を別のオフセット値で置き換えるメモリオフセット変換手段と、置き換え前と置き換え後で置き換えたメモリオフセットを含む命令もしくは命令列の出現頻度を比較する出現頻度比較手段とを備え、その比較結果に応じて置き換え前と置き換え後のどちらを圧縮命令データとして採用するべきかを判断する採用圧縮命令データ判定手段を備える事を説明した。
例えば異なる複数の関数で「ａ＋ｂ」という記述があった場合に変数のインデックスが違う場合（関数Ａではそれぞれが０，１で表現されるが関数Ｂでは２，３で表現されているなどの場合）はこれに対応する命令データは異なる事になるが、どちらかの変数のインデックスを他方のインデックスに変更して、命令データを一致させる事が可能となる。
データサイズが一致していない場合にはメモリアドレスのアライメントを意識する必要があり、簡単には置き換えることが出来ないが、データサイズが同じならばアライメントを意識する必要が無くなる。
【０１９０】
実施の形態５．
以上までで説明してきた命令データ生成装置および命令データ圧縮装置は、例えばある一つのアプリケーションの挙動を記述した全てのソースコードに対して一つのメタ命令辞書データが生成される事を前提として説明を行ってきた。
しかし、そのアプリケーションの規模が大きくなるに従い、機能単位による記述内容の偏りなどが発生するなどによって、全てのソースコードに対して一つのメタ命令辞書データで圧縮命令データを生成する事が必ずしも最適な圧縮率を実現するとは限らない。
このため、全てのソースコードを何らかの基準（例えば、固定データサイズごと、機能ごと）を持って、独立した部分集合に分割し、部分集合毎に一つのメタ命令辞書データを生成し、それらを統合して全体での圧縮命令データを生成する事によって、圧縮率の向上が実現する事が可能となる。
【０１９１】
命令データの部分集合に対して一つのメタ命令辞書データを生成する場合、どの命令データではどのメタ命令辞書データを利用して圧縮命令データ実行装置が実行する必要があるかを示す情報を圧縮命令データに格納する必要がある。
一つの方法としては全てのメタ命令辞書データに対してメタ命令辞書データ識別番号を割り振り、各命令データの内部にその命令データで利用するメタ命令辞書データ識別番号を格納する方法などが考えられる。
【０１９２】
図３１は、複数のメタ命令辞書データを圧縮命令データ生成時に生成した場合のデータ構造の一例を図示している。
【０１９３】
この圧縮命令データには４種類の命令データ３１０１、３１０２、３１０３、３１０４と、２種類のメタ命令辞書データ３１０５、３１０６が存在する。
メタ命令辞書データ３１０５のメタ命令辞書データ識別番号は＃１、メタ命令辞書データ３１０６のメタ命令辞書データ識別番号は＃２としている。
この例では、各命令データの先頭領域に１バイト分のその命令データに対応するメタ命令辞書データのメタ命令辞書データ識別番号を格納する対応辞書識別番号領域を新たに加え、その直後に命令列が続くデータ構造として表現している。
命令データ３１０１、３１０２、３１０３、３１０４の対応辞書識別番号はそれぞれ１、１、２、１となっており、これが意味する事は、圧縮命令データ実行装置１０４は命令データ３１０１、３１０２、３１０４を実行する場合には、メタ命令辞書データ３１０５を利用し、命令辞書データ３１０３を実行する場合には、メタ命令辞書データ３１０６を利用して、メタ命令に対応する圧縮対象命令列を検索する事を意味している。
【０１９４】
以上の様な複数のメタ命令辞書データを生成する圧縮命令データ生成処理を実行する場合、部分集合を決定するための基準としては、各命令データで出現する命令識別番号や命令列のヒストグラムなどの類似度や偏りを利用して、分布状況が類似する命令データで部分集合を形成するような方法が考えられる。
【０１９５】
このような部分集合を形成するためには、図４の命令データ圧縮装置１０３における命令データ圧縮処理の最初に実施し、その後の命令データ圧縮処理は生成された部分集合を一つの単位として処理を行い、全ての部分集合に対して処理完了後に、各命令データの先頭に対応するメタ命令辞書データ識別番号を格納し、関連付けを行うなどの圧縮命令データ生成処理方法が考えられる。
【０１９６】
図３１に示す方式を実現するために、本実施の形態の命令データ圧縮装置１０３では、命令データ圧縮変換部１０３５が、命令データを複数個の部分集合に分けるとともに、部分集合単位で命令列をメタ命令に置き換える。
また、メタ命令辞書データ生成部１０３６は、部分集合ごとにメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各部分集合に付加する。
また、本実施の形態の圧縮命令データ実行装置１０４では、命令データ格納装置アクセス部１０４１は、複数個の部分集合に分けられ、部分集合ごとに対応するメタ命令辞書データの識別子が示されている命令データを入力し、また、部分集合ごとに生成された複数個のメタ命令辞書データを入力する。
そして、命令列解釈・実行部１０４６は、命令データの実行の際に、部分集合ごとに、部分集合に示されている識別子に従い、対応するメタ命令辞書データを参照する。
【０１９７】
以上では、各命令データは１つのメタ命令辞書データのみを使用する例を説明しているが、各命令データが使用するメタ命令辞書データは１つに限らなくてもよい。
例えば、メタ命令のパラメータとして対応辞書識別番号を付加する事によって、一つの命令データ中に出現するメタ命令単位で利用するメタ命令辞書データを変更する事を可能としても構わない。
このような構成にする事は、命令データ全体で特に偏りがなく、一つのメタ命令辞書データに格納可能な圧縮対象命令列数をオーバーして圧縮可能な圧縮対象命令列が発生した場合等に、命令辞書データを複数に分割登録する事が可能となる利点がある。
【０１９８】
図３２は、複数のメタ命令辞書データを圧縮命令データ生成時に生成した場合のデータ構造の更なる一例である。
ここでは、単一の命令データが二つのメタ命令辞書データを利用する例を示している。
圧縮命令データは一つの命令データ３２０１と二つのメタ命令辞書データ３２０２および３２０３で構成されている。
命令データ３２０１は少なくとも命令データ３１０１命令列を含み、その中に記載されているメタ命令には少なくとも二種類のパラメータが付随しており、一つは各メタ命令に対応するメタ命令辞書データを示すメタ命令辞書データ識別番号と、その対応するメタ命令辞書データ中のどの圧縮対象命令データが対応する命令列であるかを指定する、命令列識別番号を持つ。
二つのメタ命令辞書データにはそれぞれに唯一割り振られたメタ命令辞書データ識別番号が定義されており、ここではメタ命令辞書データ３２０２に割り振られたメタ命令辞書データ識別番号は＃０１、メタ命令辞書データ３２０３に割り振られたメタ命令辞書データ識別番号は＃０２としている。
命令データ３１３１命令列には少なくとも二つのメタ命令３２０４および３２０５が記述されている。
メタ命令３２０４とメタ命令３２０５は、それぞれ異なる命令列を対象にしているが共通の命令識別番号（例えば０ｘＦ０）が割り当てられているメタ命令である。
各メタ命令には前述の通り、パラメータ部にはパラメータが二種類存在し、一番目のパラメータがメタ命令辞書データ識別番号で、二番目のパラメータが命令列識別番号となっている。
メタ命令３２０４の一番目のパラメータの値は０１であるため、このメタ命令に対応するメタ命令辞書データはメタ命令辞書データ識別番号が０１であるメタ命令辞書データ３２０２である事が分かる。
一方で、メタ命令３２０５の一番目のパラメータの値は０２であるため、このメタ命令に対応するメタ命令辞書データはメタ命令辞書データ識別番号が０２であるメタ命令辞書データ３２０３である事が分かる。
圧縮命令データ実行装置１０４が命令データ３２０１を処理する際にメタ命令３２０４および３２０５を実行する場合、始めに一番目のパラメータを読み込み、その値に対応するメタ命令辞書データを選択する処理が必要となる。
次に二番目のパラメータを読み込み、先ほど選択したメタ命令辞書データから二番目のパラメータの値に対応する命令列識別番号を持つ圧縮対象命令列を取り出す。
それ以降の処理は前述の実行方式と同様に処理可能となる。
【０１９９】
図３２に示す方式を実現するために、本実施の形態の命令データ圧縮装置１０３では、命令データ圧縮変換部１０３５が、１つのプログラム内の記述内容が相互に異なっている２以上の命令列にも同じメタ命令を割り当てて命令列をメタ命令に置き換える。
そして、メタ命令辞書データ生成部１０３６は、同じメタ命令に対して異なる命令列が対応付けられている２以上のメタ命令辞書データを生成し、対応するメタ命令辞書データの識別子を各命令列に付加する。
【０２００】
また、図３１では、２以上の部分集合において共通の命令列があれば共通のメタ命令に置き換えるようにしているが、図３１の方式を２以上の命令データに適用してもよい。
つまり、命令データ圧縮変換部１０３５は、２以上の命令データにおいて共通の命令列がある場合は、共通の命令列に共通メタ命令を割り当てて、命令列をメタ命令に置き換えるようにしてもよい。
そして、メタ命令辞書データ生成部１０３６は、命令データ圧縮変換部１０３５のメタ命令への置き換え結果に基づき、２以上の命令データで共通に利用されるメタ命令辞書データを生成する。
この場合は、２以上の命令データに対して、１つのメタ命令辞書データが用いられる。
【０２０１】
以上、本実施の形態では、
一つ以上のソースコードから構成されるソースコード集合に対して命令データ圧縮装置を適用した際に、少なくとも二つ以上にソースコードを分類し、分類毎に一つのメタ命令辞書データを生成する事を特徴とする。また、分類を決定するための分類決定手段を備える事を説明した。
より具体的には、分類決定手段は「出現頻度の偏りが大きくなる」、「全体として圧縮命令データのサイズが最小となる」等の基準を利用する。
また個々のメタ命令辞書データを唯一に識別するための識別情報を割り振り、その命令辞書データが有効な命令列に対して、有効なメタ命令辞書データの識別情報を付加する。
複数のソースコードから複数のメタ命令辞書データを生成する事で、一致する命令列がソース毎に偏りがある場合や、一致する命令列が多すぎて一つのメタ命令辞書データに収まらない場合には、メタ命令辞書データを複数に分割する事で、効果的な圧縮命令データを生成できる。
【０２０２】
また、本実施の形態では、
圧縮命令データ実行装置において、命令列に付加されているメタ命令辞書データの識別情報を元に使用すべきメタ命令辞書データを選択するメタ命令辞書データ選択手段を備える事を説明した。
つまり、複数のメタ命令辞書データとメタ命令のひもづけ方法を説明した。
【０２０３】
本実施の形態では、
一つ以上のソースコードから構成されるソースコード集合に対して、命令データ圧縮装置を適用した際に、ソースコード全てに対して一つのメタ命令辞書データを生成する事を説明した。
つまりは、一つのソースコードで一つの圧縮命令データを生成するばかりではなく、複数のソースコードで一つの圧縮命令データを生成できることを特徴とする。複数ソースコードを一つの圧縮命令データとする事でより圧縮効率がよくなる。
【０２０４】
実施の形態６．
次に、本実施の形態では、命令データ圧縮処理の適用制約条件を削減する方式について説明を行う。
【０２０５】
通常プログラム言語で記述可能な処理シーケンスは直列処理だけではなく、条件分岐処理や繰返し処理といった実行制御処理も記述可能となっている。
条件分岐処理とは処理中に参照もしくは生成された何らかの値の内容によって命令データ中の特定箇所にジャンプする処理の事であり、Ｃ言語などではｉｆ文やｓｗｉｔｃｈ文などがそれに相当する。
また、繰返し処理とは条件分岐処理を応用した制御処理であり、ある値がある基準を満たす場合は特定箇所にジャンプし、ジャンプ先の箇所と基準判定箇所の命令列が基準を満たす間、繰返し実行する処理の事であり、Ｃ言語などではｆｏｒ文やｗｈｉｌｅ文などがそれに相当する。
上記の様な非連続的な移動を行う命令の命令名をｇｏｔｏと表記する事とする。また、命令ｇｏｔｏをジャンプ命令列又はジャンプ命令ともいう。
この命令ｇｏｔｏはパラメータ部に少なくとも一つのパラメータを持ち、そのパラメータはｇｏｔｏからジャンプ先命令までのオフセット値であるジャンプオフセット値を持つとする。
命令ｇｏｔｏを伴った命令データを命令データ圧縮処理で処理すると、命令データの長さが変更される特性上、ｇｏｔｏからジャンプ先の命令までの間で長さが変更になった分を考慮してジャンプオフセット値を更新しないといけない。
そのため、今まで説明してきた圧縮命令データ実行装置および命令セットでは以下の状況に対応する事が出来ず、適切なジャンプ先にジャンプする事が出来ないため、以下の状況が発生した場合にはその状況を含む領域は命令データ圧縮装置１０３で圧縮しないように制限する必要があり、結果として圧縮効率が低下する。
【０２０６】
［状況１］
図４６（ａ）に示すように、圧縮対象命令列に命令ｇｏｔｏ（５０１）が記述されており、そのジャンプ先（５０２）がその圧縮対象命令列の範囲外の非圧縮対象命令列に記述されている命令である場合である。
【０２０７】
［状況２］
図４６（ｂ）に示すように、圧縮対象命令列１に命令ｇｏｔｏ（５０１）が記述されており、そのジャンプ先（５０２）がその圧縮対象命令列の範囲外であり、他の圧縮対象命令列２に記載されている命令である場合である。
【０２０８】
［状況３］
図４６（ｃ）に示すように、非圧縮対象命令列に命令ｇｏｔｏ（５０１）が記述されており、そのジャンプ先（５０２）がある圧縮対象命令列に記載の命令である場合である。
【０２０９】
［状況４］
図４６（ｄ）に示すように、命令ｇｏｔｏ（５０１）が記載されており、その命令ｇｏｔｏ（５０１）とジャンプ先（５０２）の命令の間に圧縮対象命令列が少なくとも一つ以上存在する場合である。
【０２１０】
これらの状況は全て、命令ｇｏｔｏ（５０１）のパラメータに記載のオフセットをそのままにして圧縮して実行処理を行った場合、命令ｇｏｔｏ（５０１）とジャンプ先（５０２）の間にメタ命令に置換される命令列が存在するため、オフセット値が正しいジャンプ先を示さなくなるという問題が発生する。
本実施の形態では、この問題を解決するために新たにジャンプ処理に対応する命令としてジャンプ・イン命令とジャンプ・アウト命令を設ける。
【０２１１】
ここで、ジャンプ・イン命令とジャンプ・アウト命令の概要を説明する。
例えば［状況１］において、圧縮対象命令列内の命令ｇｏｔｏ（５０１）のジャンプオフセット値が最初２０であるとする。
また、命令ｇｏｔｏ（５０１）の直後に１０バイト分の圧縮対象命令列が存在し、この圧縮対象命令列がメタ命令に置き換えられると、５バイトに圧縮されるとする。
命令ｇｏｔｏ（５０１）のジャンプオフセット値である２０バイトは、圧縮前の命令列長１０バイトを前提にした２０バイト先の位置をジャンプ先としている。
１０バイトの圧縮対象命令列がメタ命令に置き換えられて５バイトに圧縮されると５バイト分の誤差が生じる。
そして、命令ｇｏｔｏ（５０１）のオフセット値を２０バイトのままにして圧縮命令データ実行装置１０４が命令ｇｏｔｏ（５０１）を処理すると、次のプログラムカウンタは命令ｇｏｔｏ（５０１）の２０バイト分先の命令を参照する事になるが、５バイト分の誤差が生じるため、本来のジャンプ先とは異なる不正な領域を参照する事になる。
このような問題を回避するために［状況１］に対応するジャンプ命令があった場合には、命令データ圧縮装置１０３が、データ圧縮時に命令ｇｏｔｏ（５０１）をジャンプ・アウト命令に置き換える。
ジャンプ・アウト命令及びジャンプ・イン命令は、メタ命令への置換によりジャンプオフセット値が正しいジャンプ先を指し示していないことを圧縮命令データ実行装置１０４に通知する命令である。
圧縮命令データ実行装置１０４は、ジャンプ・アウト命令を実行しようとするときには、現在の圧縮対象命令列は終了したものとして、非圧縮対象命令列に復帰させた直後に圧縮対象命令列の圧縮分を計算してジャンプオフセット値を調節して正しいジャンプ先の命令を探索する。
上記の具体例であれば、当初のオフセットは２０で命令ｇｏｔｏ（５０１）直後の命令列は５バイト圧縮されるため（２０−５）で１５バイトがジャンプ・アウト命令のパラメータ（ジャンプオフセット値）となる。
【０２１２】
同様の考え方でジャンプ先（５０２）が圧縮対象命令列に存在する場合にはジャンプ・イン命令に置き換え、圧縮命令データ実行装置１０４はジャンプ・イン命令の実行の際に、圧縮量を計算しながらジャンプオフセット値を調節して正しいジャンプ先の命令を探索する。
【０２１３】
［状況４］のみ命令ｇｏｔｏ（５０１）はそのままで、パラメータのオフセット値のみを書き換える事で対応可能であるため、対応する新規ジャンプ命令は定義しない。
【０２１４】
このように、本実施の形態では、上記の［状況１］〜［状況４］に対応する新たな命令（ジャンプ・アウト命令、ジャンプ・イン命令）を命令セットに追加し、その命令（ジャンプ・アウト命令、ジャンプ・イン命令）を生成する事が可能な命令データ生成装置１０２、命令データ圧縮装置１０３、およびその命令を実行可能とする圧縮命令データ実行装置１０４を持つ。
そして、これにより、圧縮範囲を限定せずに全ての処理対象となる命令データに対して圧縮処理を実施する事を可能とする。
【０２１５】
図３３は、命令データ圧縮装置１０３において、上記［状況１］から［状況４］に合致するジャンプ命令列（命令ｇｏｔｏ）を判定するためのジャンプ命令種別判定処理手順の一例である。
【０２１６】
本処理は図１８における処理１８０１から処理１８０２に遷移する直前に実施する事を想定している。
なお、図３３に出現する変数名で図１８にも同名の変数名が出現するが、それぞれは独立した異なる変数である。
なお、図３３の処理は、命令データ圧縮変換部１０３５が実行する。
【０２１７】
処理３３０１では、命令データ圧縮変換部１０３５は、処理対象となっている命令データの先頭命令を指すポインタを設定し、そのポインタをｐｔとしている。
ポインタ設定完了後に処理３３０２へ遷移する。
【０２１８】
処理３３０２では、命令データ圧縮変換部１０３５は、処理対象となっている命令データの中に記述されている全てのジャンプ命令列に関する情報を登録するためのジャンプ命令情報リストを初期化する。
図３４は、上記ジャンプ命令情報リストにおけるリスト要素のデータ構造の一例である。
少なくとも、その要素に記述されている情報がどのジャンプ命令列に対応するかを示す場所情報と、そのジャンプ命令列が少なくとも上記［状況１］から［状況４］のどの状況にある命令であるかを示す種別情報を要素に持つ。
処理３３０２でジャンプ命令情報リストの初期化が完了後に処理３３０３へ遷移する。
【０２１９】
処理３３０３では、命令データ圧縮変換部１０３５は、ｐｔが命令コードの終端を指しているかどうか判定する。
その判定結果が終端を指している場合には、処理対象の命令データに対するジャンプ命令種別判定処理が完了したことを意味し、ジャンプ命令種別判定処理を終了する。
その時点でジャンプ命令情報リストには処理対象の命令データに記述されているジャンプ命令の情報が登録されている。
逆にその判定結果が終端を指していない場合には処理３３０４へ遷移し、命令データ中の未処理命令に関する処理を継続する。
【０２２０】
処理３３０４では、命令データ圧縮変換部１０３５は、ｐｔが指し示す命令がジャンプ命令であるか判定する。
その判定結果がジャンプ命令ではない場合、処理３３０５へ遷移し、逆に判定結果がジャンプ命令である場合には処理３３０６へ遷移する。
【０２２１】
処理３３０５では、命令データ圧縮変換部１０３５は、ｐｔが指し示す命令はジャンプ命令ではないため、ｐｔが指し示す命令の直後の命令にｐｔをシフトさせ、処理３３０３へ遷移する。
【０２２２】
処理３３０６では、命令データ圧縮変換部１０３５は、ｐｔが指し示す命令はジャンプ命令であるため、そのジャンプ命令の情報をジャンプ命令情報リストに登録するための要素を生成し、その要素をジャンプ命令情報リストに登録する。
リストへの登録が完了後に処理３３０７へ遷移する。
【０２２３】
処理３３０７以降では現在ｐｔが指し示すジャンプ命令の種別判定を行う。
処理３３０７では、命令データ圧縮変換部１０３５は、ジャンプ命令が圧縮対象命令列に含まれているかを判定する。
その判定結果が圧縮対象命令列に含まれている場合には処理３３０９へ、圧縮対象命令列に含まれていない場合には処理３３０８へ遷移する。
処理３３０７におけるジャンプ命令が圧縮対象命令列に含まれているかの具体的な判定方法は、例えば、対象となるジャンプ命令が圧縮対象命令列テーブルに登録されている圧縮対象命令列の一部であるかを判定する事で実現可能である。
この判定処理は、比較対象の圧縮対象命令列の要素に含まれる出現位置情報リスト中の処理対象の命令データに関する位置情報から始まる圧縮対象命令列が、ｐｔが指し示す命令を含むか否かで判定可能である。
【０２２４】
処理３３０８では、命令データ圧縮変換部１０３５は、ｐｔが指し示すジャンプ命令のジャンプ先の命令が圧縮対象命令列の中に含まれる命令かどうかを判定する。
ジャンプ先の命令の特定方法はジャンプ命令のパラメータ部に含まれるオフセット値をｐｔに加算する事でジャンプ先の命令の番地を得る事が可能である。
また、その命令が圧縮対象命令列の中に含まれるかどうかは処理３３０７でジャンプ命令の圧縮対象命令列に含まれているかを判定した処理と同様の方法を用いる事で実現可能である。
処理３３０８の判定結果が圧縮対象命令列内の命令である場合には処理３３１１へ、逆に圧縮対象命令列内の命令ではない場合には処理３３１０へ遷移する。
【０２２５】
処理３３０９では、命令データ圧縮変換部１０３５は、ｐｔが指し示すジャンプ命令のジャンプ先の命令が同じ圧縮対象命令列の中に含まれる命令がどうかを判定する。
この判定処理は処理３３０８で説明した判定方法を用いる事で実現可能である。
この判定結果が圧縮対象命令列内の命令である場合には処理３３１３へ、逆に圧縮対象命令列内の命令ではない場合には処理３３１２へ遷移する。
【０２２６】
処理３３１０では、ｐｔが指し示すジャンプ命令およびそのジャンプ命令のジャンプ先の命令は圧縮対象命令列には含まれていないため、［状況４］もしくは通常状況（ジャンプ命令もジャンプ先も圧縮対象ではない状況）である通常ジャンプ命令種別である事が判明する。
そのため、命令データ圧縮変換部１０３５は、ジャンプ命令情報の種別情報に通常ジャンプ命令種別を示す値を設定し、処理３３１４に遷移する。
【０２２７】
処理３３１１では、ｐｔが指し示すジャンプ命令は圧縮対象命令列には含まれないが、ジャンプ先の命令は圧縮対象命令列に含まれるため、［状況３］にある事が判明する。
そのため、ジャンプ命令情報の種別情報にメタ命令内ジャンプ命令種別を示す値を設定し、処理３３１４に遷移する。
【０２２８】
処理３３１２では、命令データ圧縮変換部１０３５は、ｐｔが指し示すジャンプ命令は圧縮対象命令列に含まれるが、ジャンプ先の命令はジャンプ命令が含まれる圧縮対象命令列に含まれないため、［状況１］もしくは［状況２］にある事が分かる。
この二つの状況判定はジャンプ命令変更処理で実施するため、ここではジャンプ命令情報の種別情報に、メタ命令外ジャンプ命令種別を示す値を設定し、処理３３１４に遷移する。
処理３３１３では、ｐｔが指し示すジャンプ命令およびそのジャンプ命令のジャンプ先の命令は同一圧縮対象命令列に含まれるため、［状況４］もしくは通常状況にある事が分かる。
この二つの状況判定はジャンプ命令変更処理で実施するため、命令データ圧縮変換部１０３５は、ここではジャンプ命令情報の種別情報に通常ジャンプ命令種別を示す値を設定し、処理３３１４に遷移する。
【０２２９】
処理３３１４では、命令データ圧縮変換部１０３５は、現在のジャンプ命令情報の場所情報にｐｔが保持する番地を設定し、処理３３０５へ遷移し、次の命令に対する処理を繰り返す。
【０２３０】
以上の処理を行う事で処理対象となっている命令データ中に記述されている全てのジャンプ命令の種別判定が完了する。
【０２３１】
図３５はジャンプ命令種別判定処理で求めたジャンプ命令種別情報をもとにジャンプ命令を書き換えるジャンプ命令変更処理の処理手順の一例である。
本処理は、図１８における処理１８０１から処理１８０２に遷移する直前にあって、図３３のフローの終了後に実施するなどが考えられる。
また、図３５の処理は、命令データ圧縮変換部１０３５が実行する。
【０２３２】
ジャンプ命令変更処理の具体的内容の説明を行う前に、ジャンプ命令を書き換えるための新たな命令を以下で説明する。
【０２３３】
［状況１］および［状況２］に該当するジャンプ命令を書き換えるための新たな命令としてジャンプ・アウト命令を命令セットに新たに定義する。
このジャンプ・アウト命令は圧縮対象命令列からのジャンプ処理に対応するジャンプ命令であり、圧縮命令データ実行装置１０４で処理する際にその状況に特化した処理を実施するために必要となる。
換言すれば、圧縮命令データ実行装置１０４にジャンプ命令が含まれている圧縮対象命令領域内での圧縮量を計算しながらジャンプ先を探索させる命令である。
【０２３４】
［状況３］に該当するジャンプ命令を書き換えるための新たな命令としてジャンプ・イン命令を命令セットに新たに定義する。
このジャンプ・イン命令は非圧縮対象命令列から圧縮対象命令列へのジャンプ処理に対応するジャンプ命令であり、圧縮命令データ実行装置１０４で処理する際にその状況に特化した処理を実施するために必要となる。
換言すれば、圧縮命令データ実行装置１０４にジャンプ先が含まれる圧縮対象命令領域内の圧縮量を計算しながらジャンプ先を探索させる命令である。
【０２３５】
それ以外の状況におけるジャンプ命令に対する命令書換えは実施しないが、［状況４］に該当するジャンプ命令全てに関してはジャンプオフセット値となるパラメータ値を更新する。
【０２３６】
ここで説明した新たな命令セットはあくまでも一例であり、他の命令を定義する事で問題を解決する事も可能であるが、以下の説明ではジャンプ・イン命令およびジャンプ・アウト命令を用いた例を説明する。
【０２３７】
ジャンプ命令変更処理の具体的内容の説明に戻る。
処理３５０１では、命令データ圧縮変換部１０３５は、処理対象命令データのジャンプ命令情報リストから未処理の要素を取得し、以降の処理における処理対象要素とする。
要素取得処理完了後、処理３５０２へ遷移する。
【０２３８】
処理３５０２では、命令データ圧縮変換部１０３５は、処理３５０１で取得した未処理要素が存在するかどうかを判定する。
未処理要素が存在しない場合にはジャンプ命令情報リストの全ての要素を処理完了した事を意味するため、ジャンプ命令変更処理は終了する。
逆に未処理要素が存在した場合には、処理３５０３へ遷移する。
【０２３９】
処理３５０３では、命令データ圧縮変換部１０３５は、処理対象となっている要素の種別情報を読み取り、その内容によって処理分岐を行う。
種別情報が通常ジャンプ命令種別の場合には処理３５０４へ、メタ命令内ジャンプ命令種別の場合には処理３５０５へ、メタ命令外ジャンプ命令種別の場合には処理３５０６へ遷移する。
【０２４０】
処理３５０４では、命令データ圧縮変換部１０３５は、処理対象となる要素に対応するジャンプ命令とそのジャンプ命令でのジャンプ先の命令の間に圧縮対象命令列が存在しているかどうかを判定する。
判定の結果、圧縮対象命令列が存在する場合には処理３５０７へ遷移する。
逆に圧縮対象命令列が存在しない場合には処理３５０１へ遷移し、ジャンプ命令情報リストの次の要素への処理を継続する。
【０２４１】
処理３５０７では、命令データ圧縮変換部１０３５は、処理対象のジャンプ命令のパラメータ部に記載されているオフセット値を書き換える処理を行う。
処理３５０７で対象とするジャンプ命令は、ジャンプ先の命令との間に少なくとも一つ以上の圧縮対象命令列が存在している。
圧縮対象命令列は、命令データ圧縮変換でその箇所は、メタ命令で置き換えられることを意味しており、結果としてジャンプ命令とジャンプ先命令の間に存在する命令データ長が変更される。
よって、ジャンプ命令のパラメータ部に記載されているジャンプオフセット値をそのままにして圧縮命令データ実行装置１０４が実行した場合、適切な命令へのジャンプ処理が実施できなくなる。
処理３５０７は上記の問題を解消するために実施されるものであり、命令データ圧縮変換部１０３５は、処理対象のジャンプ命令のパラメータ部のジャンプオフセット値Ｏｆｆｓｅｔを以下の算出式のもと新ジャンプオフセット値ＮｅｗＯｆｆｓｅｔを算出し、その結果をパラメータ部の新たなジャンプオフセット値として再設定する。
【０２４２】
【数１】
2011243134.tif 000003
【０２４３】
なお上記算出式でｘは処理対象ジャンプ命令からジャンプ先命令の間に存在する圧縮対象命令列を要素とする集合を意味し、ｌｅｎｇｔｈ（ｘ）は圧縮対象命令列ｘの命令列長を意味し、ｌｅｎｇｔｈ（ｍｅｔａＯＰ）はメタ命令の命令長を意味している。
つまり、上記算出式は圧縮前に求められたジャンプオフセット値から間に存在する全ての圧縮対象命令列の命令長を引き、置き換えられる個数分のメタ命令の命令長を加算し、圧縮命令データとした場合のジャンプオフセット値を算出している。
処理３５０７でジャンプオフセット値を更新完了後、処理３５０１へ遷移する。
【０２４４】
処理３５０５では、命令データ圧縮変換部１０３５は、メタ命令内ジャンプ命令種別に判定されたジャンプ命令に対する処理を実施する。
ここでは処理対象となるジャンプ命令の命令識別番号をジャンプ・イン命令の命令識別番号に書き換える。
書換え完了後に処理３５０４へ遷移する。
【０２４５】
処理３５０６では、命令データ圧縮変換部１０３５は、メタ命令外ジャンプ命令種別に判定されたジャンプ命令に対する処理を実施する。
ここでは処理対象となるジャンプ命令の命令識別番号をジャンプ・アウト命令の命令識別番号に書き換える。
書換え完了後に処理３５０４へ遷移する。
【０２４６】
以上で説明したジャンプ命令変更処理により、命令データ圧縮処理を実施する上で影響のあるジャンプ命令に対する命令を適切に更新する事が可能となる。
【０２４７】
次に、以上までに説明したジャンプ・イン命令およびジャンプ・アウト命令に書換えを行った圧縮命令データの実行処理方法について説明を行う。
図３８はジャンプ・イン命令およびジャンプ・アウト命令を実行する機能を有する圧縮命令データ実行装置１０４における圧縮命令データ実行処理手順の具体例であり、図２３に示した圧縮命令データ実行処理手順に対して処理３８０１および処理３８０２を加えた構成となっている。
処理３８０１および処理３８０２はそれぞれ処理２３０３で現在の処理対象命令の命令識別番号からその命令がジャンプ・アウト命令である、ジャンプ・イン命令であると判定された場合に実行される処理となっており、それぞれではジャンプ先の命令を検索する処理を実施する。
図３８の処理は、圧縮命令データ実行装置１０４の命令列解釈・実行部１０４６が行う。
【０２４８】
図３６は処理３８０１の具体的な処理手順の一例を示した図である。
図３６の処理も、命令列解釈・実行部１０４６が行う。
図３６の処理は、概要を述べると、初めてジャンプ・アウト命令を実行する場合にはジャンプ先命令を検索する処理を行い、そのジャンプ先をキャッシュに保存してからジャンプを行い、同じジャンプ命令を２回以上実行する場合、ジャンプ先は同じであるため、キャッシュからジャンプ先情報を取得してジャンプを行う処理である。
また、ここで、ジャンプ先の検索方法の概要を述べる。
まず、図４７に示すように、ジャンプ・アウト命令（５０１）以降の圧縮対象命令領域の命令列長（Ｌｅｎｇｔｈ（Ｒ））を求め、ジャンプ・アウト命令（５０１）のオフセット値（Ｏｆｆｓｅｔ）から命令列長（Ｌｅｎｇｔｈ（Ｒ））を減算し、当該圧縮対象命令領域以降にある命令列の命令列長（Ｏｆｆｓｅｔ−Ｌｅｎｇｔｈ（Ｒ））を求める。
そして、所定の命令列長（Ｌｅｎｇｔｈ（ｏｐ））ごとに位置を後ろに移動させ、また、圧縮命令領域ではメタ命令の元の命令列の命令列長を導出し、移動量が命令列長（Ｏｆｆｓｅｔ−Ｌｅｎｇｔｈ（Ｒ））と一致した位置がジャンプ先となる。
以下、図３６の各処理を説明する。
【０２４９】
処理３６０１では、命令列解釈・実行部１０４６は、現在の処理対象命令のジャンプ・アウト命令のジャンプオフセット値Ｏｆｆｓｅｔを取得する。
取得完了後に処理３６０２へ遷移する。
【０２５０】
処理３６０２では、命令列解釈・実行部１０４６は、現在の処理対象命令のジャンプ・アウト命令に関するキャッシュ情報をジャンプ・アウト命令キャッシュ情報リストから検索する。
検索完了後に処理３６０３へ遷移する。
ここでジャンプ・アウト命令キャッシュ情報リストとは、あるジャンプ・アウト命令を処理した直後の圧縮命令データ実行装置における少なくとも処理対象命令位置記憶手段の記憶情報および処理対象命令位置退避手段の退避情報を情報として、当該ジャンプ・アウト命令の位置情報をキーとして管理するリストである。
これはジャンプ命令がジャンプ処理を実施する場合には必ず同じ命令へジャンプするため、２回目以降はジャンプ先命令を検索する処理を省略するために利用する。
【０２５１】
処理３６０３では、命令列解釈・実行部１０４６は、処理３６０２で検索したキャッシュ情報が存在するかどうか判定する。
その判定の結果、キャッシュ情報が存在しない場合には処理３６０５へ遷移し、ジャンプ先命令の検索処理を実施する。
逆に判定の結果、キャッシュ情報が存在する場合には処理３６０４へ遷移する。
【０２５２】
処理３６０４では、命令列解釈・実行部１０４６は、検索されたキャッシュ情報をもとに処理対象のジャンプ・アウト命令を実施した場合の処理対象命令位置記憶部１０４３によって記憶される記憶情報および、処理対象命令位置退避部１０４４によって退避される退避情報を再現させる。
再現完了後にジャンプ・アウト命令実行処理を終了する。
【０２５３】
処理３６０５以降ではジャンプ・アウト命令のジャンプ先検索を実施する。
処理３６０５では、命令列解釈・実行部１０４６は、現在処理対象となっている圧縮対象命令列の未実行命令列長Ｌｅｎｇｔｈ（Ｒ）を算出する。
この値は例えば処理対象となっている圧縮対象命令列の終端番地から現在の処理対象命令位置情報の番地を引く事で求める事ができる。
算出終了後、処理３６０６へ遷移する。
【０２５４】
処理３６０６では、命令列解釈・実行部１０４６は、圧縮命令データ実行装置１０４で現在処理対象となっている圧縮対象命令列に対するメタ命令実行を終了させる。
これはジャンプ・アウト命令が現在処理対象となっている圧縮対象命令列より先の命令へジャンプするための命令である事から必要となる。
この処理を実施後、処理対象命令位置記憶部１０４３によって記憶される処理対象命令位置情報は、今まで実行していた圧縮対象命令列を実行するトリガーとなったメタ命令の直後の命令の先頭番地を指し、処理対象命令位置退避部１０４４によって記憶される処理対象命令位置退避情報は上記メタ命令が実行される直前の状態に戻される。
メタ命令実行終了処理完了後、処理３６０７へ遷移する。
【０２５５】
処理３６０７では、命令列解釈・実行部１０４６は、ジャンプ先命令を検索するための準備処理を行う。
具体的には、あとジャンプすべきオフセット値である残ジャンプオフセット値を記憶する変数ｉの初期化である。
ｉには残るジャンプオフセット値、例えば具体的にはＯｆｆｓｅｔからＬｅｎｇｔｈ（Ｒ）を引いた値（Ｏｆｆｓｅｔ−Ｌｅｎｇｔｈ（Ｒ））を代入する。
初期化処理完了後、処理３６０８へ遷移する。
【０２５６】
処理３６０８では、命令列解釈・実行部１０４６は、残ジャンプオフセット値が残っているか、つまりはｉが０より大きい値となっているかを判別する。
その判別の結果残っていない場合には処理３６０９へ遷移し、逆に残っている場合には処理３６１０へ遷移する。
【０２５７】
処理３６０９では、命令列解釈・実行部１０４６は、残ジャンプオフセット値が残っていない場合に遷移する処理であり、現在の処理対象命令位置記憶部１０４３によって記憶されている処理対象命令位置情報および、処理対象命令位置退避部１０４４によって退避されている処理対象命令位置退避情報で示される命令列における処理対象命令こそがジャンプ・アウト命令によってジャンプすべき命令であると判別した状況である。
よって、この処理対象命令位置情報および、処理対象命令位置退避情報を、今回のジャンプ・アウト命令実行処理のトリガーとなったジャンプ・アウト命令が記述されている番地をキーとしてジャンプ・アウト命令キャッシュ情報リストに登録する。
登録終了後、本ジャンプ・アウト命令実行処理は終了する。
【０２５８】
処理３６１０では、命令列解釈・実行部１０４６は、現在の処理対象命令位置情報が指し示す命令がメタ命令であるか判定する。
判定の結果、メタ命令ではない場合には処理３６１１へ、逆にメタ命令である場合には処理３６１４へ遷移する。
【０２５９】
処理３６１１では、命令列解釈・実行部１０４６は、現在の処理対象命令位置情報は通常命令であり、かつジャンプオフセット値は残っている状況である。
そのため、この命令の次へジャンプするための処理対象命令位置情報の指す命令の命令長（Ｌｅｎｇｔｈ（ｏｐ））を取得する。
取得後、処理３６１２へ遷移する。
【０２６０】
処理３６１２では、命令列解釈・実行部１０４６は、処理３６１１で取得した命令長（Ｌｅｎｇｔｈ（ｏｐ））を利用して残ジャンプオフセット値を更新する。
具体的には例えば残ジャンプオフセット値から命令長（Ｌｅｎｇｔｈ（ｏｐ））を引く事が考えられる。
更新完了後、処理３６１３へ遷移する。
【０２６１】
処理３６１３では、命令列解釈・実行部１０４６は、処理対象命令位置情報を次の命令の先頭番地に更新し、処理３６０８へ遷移する。
【０２６２】
処理３６１４では、命令列解釈・実行部１０４６は、現在の処理対象命令位置情報はメタ命令であり、かつジャンプオフセット値は残っている状況である。
そのため、このメタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理が必要となる。
そこで、処理３６１４では、命令列解釈・実行部１０４６は、メタ命令が指定する圧縮対象命令列をメタ命令辞書データから取得する。
取得完了後、処理３６１５へ遷移する。
【０２６３】
処理３６１５では、命令列解釈・実行部１０４６は、メタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理を行う。
具体的には例えば残ジャンプオフセット値と、メタ命令が指定する圧縮対象命令列の命令列長を比較して、一致するかもしくは残ジャンプオフセット値のほうが小さい場合にはその圧縮対象命令列内にジャンプ先命令が存在すると判定する事が考えられる。
この判定の結果、圧縮対象命令内にジャンプ先が存在する場合には処理３６１７へ、逆に圧縮対象命令内にジャンプ先が存在しない場合には処理３６１６へ遷移する。
【０２６４】
処理３６１６は、現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にはジャンプ先命令は存在せず、そのメタ命令以降にジャンプ先命令が存在する状況で処理される。
そのため、処理３６１６では、命令列解釈・実行部１０４６は、残ジャンプオフセット値を更新する。
この更新では例えば、その圧縮対象命令列の命令列長（Ｌｅｎｇｔｈ（ｏｐ））だけ残ジャンプオフセット値から引いた値に更新する事が考えられる。更新終了後、処理３６１３に遷移する。
【０２６５】
処理３６１７は現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にジャンプ先命令が存在する状況で処理される。
そこで、命令実行時情報記憶部１０４２で記憶する情報をそのジャンプ先命令を適切に実行するために必要な情報に書き換える処理を行う。
具体的には例えば、少なくとも処理対象命令位置退避部１０４４で退避される情報として、現時点での処理対象命令位置記憶部１０４３によって記憶されている処理対象命令位置情報を退避させた後、処理対象命令位置記憶部１０４３によって記録される処理対象命令位置情報をその圧縮対象命令列内のジャンプ先命令を指し示す情報に更新するなどが考えられる。
処理完了後に処理３６０９に遷移する。
【０２６６】
以上の処理を行う事によって、ジャンプ・アウト命令に対する圧縮命令データ実行装置１０４における適切な処理が可能となり、あるジャンプ・アウト命令に対して初回実行時にはそのジャンプ・アウト命令でジャンプすべきジャンプ先命令を検索し、そのジャンプ先命令を実行するために必要な命令実行時情報をジャンプ・アウト命令キャッシュ情報リストに登録する。
二回目以降の実行ではジャンプ・アウト命令キャッシュ情報リストに登録されている情報からジャンプ先命令を実行するために必要な命令実行時情報を復元させる事でジャンプ先命令の検索処理を回避している。
【０２６７】
図３７は処理３８０２の具体的な処理手順の一例を示した図である。
処理３８０２と処理３８０１は類似した処理手順を取る事になるが、処理３８０２ではジャンプ・イン命令に対する処理となっているため、処理３８０１では必要となるジャンプ先命令を検索するループの手前のメタ命令実行状態からの復帰処理が必要なくなる。
それ以外の処理は処理３８０２と処理３８０１では同じとなる。
そのため、処理３８０１の説明で利用したジャンプ・アウト命令キャッシュ情報リストを処理３８０２の処理でも同一のものを利用して処理しても構わないが、図３７では当該リストの事をジャンプ・イン命令キャッシュ情報リストと呼び、異なるリストとして記述している。
しかし、リストの基本構成および機能に関してはジャンプ・アウト命令キャッシュ情報リストと同一であるとしている。
【０２６８】
図３７の処理も、図３６と同様に、初めてジャンプ・イン命令を実行する場合にはジャンプ先命令を検索する処理を行い、そのジャンプ先をキャッシュに保存してからジャンプを行い、同じジャンプ命令を２回以上実行する場合、ジャンプ先は同じであるため、キャッシュからジャンプ先情報を取得してジャンプを行う処理である。
また、図３７の場合は、ジャンプ・イン命令は非圧縮命令領域にありジャンプ先が圧縮命令領域にある。
このため、図３７では、ジャンプ・イン命令から所定の命令列長（Ｌｅｎｇｔｈ（ｏｐ））ごとに位置を後ろに移動させ、また、圧縮命令領域ではメタ命令の元の命令列の命令列長を導出し、移動量がジャンプ・イン命令のオフセット値と一致した位置がジャンプ先となる。
なお、図３７の処理も、命令列解釈・実行部１０４６が実行する。
以下、図３７の各処理を説明する。
【０２６９】
処理３７０１では、命令列解釈・実行部１０４６は、現在の処理対象命令のジャンプ・イン命令のジャンプオフセット値Ｏｆｆｓｅｔを取得する。
取得完了後に処理３７０２へ遷移する。
【０２７０】
処理３７０２では、命令列解釈・実行部１０４６は、現在の処理対象命令のジャンプ・イン命令に関するキャッシュ情報をジャンプ・イン命令キャッシュ情報リストから検索する。
検索完了後に処理３７０３へ遷移する。
【０２７１】
処理３７０３では、命令列解釈・実行部１０４６は、処理３７０２で検索したキャッシュ情報が存在するかどうか判定する。
その判定の結果、キャッシュ情報が存在しない場合には処理３７０４へ遷移し、ジャンプ先命令の検索処理を実施する。
逆に判定の結果、キャッシュ情報が存在する場合には処理３７０７へ遷移する。
【０２７２】
処理３７０７では、命令列解釈・実行部１０４６は、ジャンプ先命令を検索するための準備処理を行う。
具体的には、あとジャンプすべきオフセット値である残ジャンプオフセット値を記憶する変数ｉの初期化である。
ｉには残るジャンプオフセット値、例えば具体的にはＯｆｆｓｅｔからジャンプ・イン命令の命令長を引いた値を代入する。初期化処理完了後、処理３７０８へ遷移する。
【０２７３】
処理３７０８では、命令列解釈・実行部１０４６は、残ジャンプオフセット値が残っているか、つまりはｉが０より大きい値となっているかを判別する。
その判別の結果残っていない場合には処理３７０９へ遷移し、逆に残っている場合には処理３７１０へ遷移する。
【０２７４】
処理３７０９では、命令列解釈・実行部１０４６は、残ジャンプオフセット値が残っていない場合に遷移する処理であり、現在の処理対象命令位置記憶部１０４３によって記憶されている処理対象命令位置情報および、処理対象命令位置退避部１０４４によって退避されている処理対象命令位置退避情報で示される命令列における処理対象命令こそがジャンプ・イン命令によってジャンプすべき命令であると判別した状況である。
よって、この処理対象命令位置情報および、処理対象命令位置退避情報を、今回のジャンプ・イン命令実行処理のトリガーとなったジャンプ・イン命令が記述されている番地をキーとしてジャンプ・イン命令キャッシュ情報リストに登録する。
登録終了後、本ジャンプ・イン命令実行処理は終了する。
【０２７５】
処理３７１０では、命令列解釈・実行部１０４６は、現在の処理対象命令位置情報が指し示す命令がメタ命令であるか判定する。
判定の結果、メタ命令ではない場合には処理３７１１へ、逆にメタ命令である場合には処理３７１４へ遷移する。
【０２７６】
処理３７１１では、命令列解釈・実行部１０４６は、現在の処理対象命令位置情報は通常命令であり、かつジャンプオフセット値は残っている状況である。
そのため、この命令の次へジャンプするための処理対象命令位置情報の指す命令の命令長（Ｌｅｎｇｔｈ（ｏｐ））を取得する。
取得後、処理３７１２へ遷移する。
【０２７７】
処理３７１２では、命令列解釈・実行部１０４６は、処理３７１１で取得した命令長（Ｌｅｎｇｔｈ（ｏｐ））を利用して残ジャンプオフセット値を更新する。
具体的には例えば残ジャンプオフセット値から命令長（Ｌｅｎｇｔｈ（ｏｐ））を引く事が考えられる。更新完了後、処理３７１３へ遷移する。
【０２７８】
処理３７１３では、命令列解釈・実行部１０４６は、処理対象命令位置情報を次の命令の先頭番地に更新し、処理３７０８へ遷移する。
【０２７９】
処理３７１４では、命令列解釈・実行部１０４６は、現在の処理対象命令位置情報はメタ命令であり、かつジャンプオフセット値は残っている状況である。
そのため、このメタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理が必要となる。
そこで、処理３７１４では、メタ命令が指定する圧縮対象命令列をメタ命令辞書データから取得する。
取得完了後、処理３７１５へ遷移する。
【０２８０】
処理３７１５では、命令列解釈・実行部１０４６は、メタ命令が指定する圧縮対象命令列内にジャンプ先命令が存在するかどうか判定処理を行う。
具体的には例えば残ジャンプオフセット値と、メタ命令が指定する圧縮対象命令列の命令列長を比較して、一致するかもしくは残ジャンプオフセット値のほうが小さい場合にはその圧縮対象命令列内にジャンプ先命令が存在すると判定する事が考えられる。
この判定の結果、圧縮対象命令内にジャンプ先が存在する場合には処理３７１７へ、逆に圧縮対象命令内にジャンプ先が存在しない場合には処理３７１６へ遷移する。
【０２８１】
処理３７１６は、現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にはジャンプ先命令は存在せず、そのメタ命令以降にジャンプ先命令が存在する状況で処理される。
そのため、処理３７１６では、残ジャンプオフセット値を更新する。この更新では例えば、その圧縮対象命令列の命令列長だけ残ジャンプオフセット値から引いた値に更新する事が考えられる。
更新終了後、処理３７１３に遷移する。
【０２８２】
処理３７１７は現在の処理対象命令位置情報が指し示すメタ命令に対応する圧縮対象命令列内にジャンプ先命令が存在する状況で処理される。
そこで、命令実行時情報記憶部１０４２で記憶する情報をそのジャンプ先命令を適切に実行するために必要な情報に書き換える処理を行う。
具体的には例えば、命令列解釈・実行部１０４６は、少なくとも処理対象命令位置退避部１０４４で退避される情報として、現時点での処理対象命令位置記憶部１０４３によって記憶されている処理対象命令位置情報を退避させた後、処理対象命令位置記憶部１０４３によって記録される処理対象命令位置情報をその圧縮対象命令列内のジャンプ先命令を指し示す情報に更新するなどが考えられる。
処理完了後に処理３７０９に遷移する。
【０２８３】
以上の処理を行う事によって、ジャンプ・イン命令に対する圧縮命令データ実行装置１０４における適切な処理が可能となり、あるジャンプ・イン命令に対して初回実行時にはそのジャンプ・イン命令でジャンプすべきジャンプ先命令を検索し、そのジャンプ先命令を実行するために必要な命令実行時情報をジャンプ・イン命令キャッシュ情報リストに登録する。
二回目以降の実行ではジャンプ・イン命令キャッシュ情報リストに登録されている情報からジャンプ先命令を実行するために必要な命令実行時情報を復元させる事でジャンプ先命令の検索処理を回避している。
【０２８４】
このように、本実施の形態に係る命令データ圧縮装置１０３では、命令データ格納装置アクセス部１０３１は、所定のジャンプ先命令列へのジャンプ命令が記述されるジャンプ命令列が含まれる命令データを入力する場合がある。
そして、命令データ圧縮変換部１０３５は、命令列ごとにメタ命令に置き換えるか否かを判断しメタ命令に置き換える命令列を指定した後であって置き換え対象の命令列をメタ命令に置き換える前に、メタ命令に置き換えられることになる置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係を解析し、置き換え命令列群とジャンプ命令列とジャンプ先命令列との位置関係が所定の条件に合致する場合に、ジャンプ命令列に対する補正処理を行い、ジャンプ命令列に対する補正処理の後に、置き換え対象の命令列をメタ命令に置き換える。
命令データ圧縮変換部１０３５は、ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれていない場合（［状況１］、［状況２］）、
ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれる場合（［状況３］）、
ジャンプ命令列とジャンプ先命令列がともに置き換え命令列群に含まれず、ジャンプ命令列とジャンプ先命令列との間に１つ以上の置き換え命令列群が存在する場合（［状況４］）において、ジャンプ命令列に対する補正処理を行う。
【０２８５】
［状況１］、［状況２］の場合に、命令データ圧縮変換部１０３５は、ジャンプ命令列が置き換え命令列群に含まれ、ジャンプ先命令列が同じ置き換え命令列群に含まれず、置き換え命令列群のメタ命令への置き換えによりジャンプ命令列のジャンプオフセット値がジャンプ先命令列を指し示さない状態になっていることを圧縮命令データ実行装置１０４に対して通知する命令識別番号（ジャンプアウト通知）をジャンプ命令列に記述してジャンプ・アウト命令とする。
【０２８６】
［状況３］の場合に、命令データ圧縮変換部１０３５は、ジャンプ命令列が置き換え命令列群に含まれず、ジャンプ先命令列が置き換え命令列群に含まれ、置き換え命令列群のメタ命令への置き換えによりジャンプ命令列のジャンプオフセット値がジャンプ先命令列を指し示さない状態になっていることを圧縮命令データ実行装置１０４に対して通知する命令識別番号（ジャンプイン通知）をジャンプ命令列に記述してジャンプ・イン命令とする。
【０２８７】
また、［状況４］の場合に、命令データ圧縮変換部１０３５は、ジャンプ命令列とジャンプ先命令列との間に存在する置き換え命令列群のデータ総量と、当該置き換え命令列群を置き換えることになるメタ命令のデータ総量とに基づき、ジャンプ命令列のジャンプオフセット値を変更する。
【０２８８】
また、上記のように、本実施の形態に係る圧縮命令データ実行装置１０４では、命令データ格納装置アクセス部１０４１は、２以上の命令列が含まれる命令列群がメタ命令に置き換えられており、メタ命令に置き換えられた置き換え命令列群に、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列が含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されている命令データを入力する場合がある。
命令列解釈・実行部１０４６は、ジャンプ命令列の実行時に、ジャンプ命令列がジャンプ・アウト命令列であるかを判断し、ジャンプ・アウト命令列である場合に、ジャンプ・アウト命令列がメタ命令に置き換えられたことによりジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、ジャンプ・アウト命令列以降のデータ内容を解析して、ジャンプ・アウト命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ・アウト命令列を実行する。
【０２８９】
また、命令列解釈・実行部１０４６は、ジャンプ・アウト命令列である場合である場合に、ジャンプ・アウト命令列のジャンプオフセット値（図４７のＯｆｆｓｅｔ）と、ジャンプ・アウト命令列から置き換え命令列群の終端までの命令長（図４７のＬｅｎｇｔｈ（Ｒ））と、置き換え命令列群のメタ命令以降の命令列の命令長（Ｏｆｆｓｅｔ−Ｌｅｎｇｔｈ（Ｒ））とに基づく解析を行い、ジャンプ・アウト命令列のジャンプ先命令列を検索する。
【０２９０】
また、命令データ格納装置アクセス部１０４１は、２以上の命令列が含まれる命令列群がメタ命令に置き換えられており、所定のジャンプ先命令列へのジャンプ命令が記述されているジャンプ命令列がメタ命令外に含まれ、ジャンプ命令列にはジャンプ先命令列までのオフセット値がジャンプオフセット値として記述されており、ジャンプ命令列のジャンプ先命令列が前記メタ命令に置き換えられた置き換え命令列群に含まれている命令データを入力する場合がある。
命令列解釈・実行部１０４６は、ジャンプ命令列の実行時に、ジャンプ命令列がジャンプ・イン命令列であるかを判断し、ジャンプ・イン命令列である場合に、ジャンプ・イン命令列のジャンプ先命令列がメタ命令に置き換えられたことによりジャンプオフセット値がジャンプ先命令列を指し示していないと判断し、ジャンプ・イン命令列以降のプログラム内容を解析して、ジャンプ・イン命令列のジャンプ先命令列を検索し、検索したジャンプ先命令列にジャンプして当該ジャンプ・イン命令列を実行する。
【０２９１】
また、命令列解釈・実行部１０４６は、ジャンプ・イン命令列である場合である場合に、ジャンプ・イン命令列のジャンプオフセット値と、ジャンプ・イン命令列以降の命令列の命令長とに基づく解析を行い、ジャンプ・イン命令列のジャンプ先命令列を検索する。
【０２９２】
また、命令列解釈・実行部１０４６は、置き換え命令列群のメタ命令以降に他のメタ命令が存在する場合に、メタ命令辞書データを参照して、当該他のメタ命令に対応する命令列の命令長を導出する。
【０２９３】
以上までで説明した圧縮命令データ実行装置１０４で圧縮命令データを非圧縮の命令データに展開せずに実行するための具体的な方式を説明し、その上でジャンプ命令に対する新たな命令セットの定義および、ジャンプ命令の書換え処理、および書換え後の命令の処理内容について説明を行った。
ただし、ここで説明したジャンプ・イン命令およびジャンプ・アウト命令の構成に限定する趣旨ではなく、少なくともジャンプ命令を別の命令に書き換える事によって、非連続的な命令データである圧縮命令データにおけるジャンプ処理を適切に処理可能とする方法であれば、どのような構成であっても構わない。
例えば、本実施の形態ではジャンプ命令を書き換える命令としてジャンプ・イン命令およびジャンプ・アウト命令の二種類を用意している。
しかし、以上までの説明で分かるとおりこれらの２命令の処理内容は非常に似通っているため、一つの命令に統合して表現し、圧縮命令データ実行装置１０４によって処理する際に、ジャンプ命令が記述されている命令列が圧縮対象命令データであるか否かで処理を切り替える事で実現する事も可能である。
【０２９４】
さらに例えば、本実施の形態では書き換えられたジャンプ命令に対するジャンプ先命令は、その命令の初回実行時に検索する方法を取っているが、その検索を命令データ圧縮装置１０３において実施し、その結果をジャンプ命令が書き換えられる別の命令のパラメータに加える方法をとっても構わない。
この場合、本実施の形態におけるジャンプ・イン命令に対するパラメータはジャンプオフセット値を、
非圧縮命令列におけるジャンプオフセット値
圧縮命令列内におけるジャンプオフセット値
に分割して記述して検索結果を記述する必要があり、パラメータ部のサイズ拡大が必要になる場合がある。
【０２９５】
また本実施の形態におけるジャンプ・アウト命令に対応する命令は、ジャンプ先が圧縮命令対象命令列内に存在する場合には、ジャンプ先命令が記述されている圧縮対象命令列内に対するオフセット値（圧縮対象命令列内オフセット値）が必要になると共に、ジャンプ命令が記述されている圧縮大正命令列とジャンプ先命令が記述されている圧縮対象命令列の間をつなぐ圧縮対象命令列の命令列長（圧縮対象命令列間オフセット値）もパラメータとして必要となる。
この二種類のパラメータは、ジャンプ命令が記述されている圧縮対象命令列が同じだとしても、それが適用される命令データの内容や位置によって異なる値を持つため、通常はジャンプ命令を書き換える別の命令のパラメータとして入れる事は通常、圧縮率低下を招く。
そのため、ジャンプ命令が記述されている圧縮対象命令列が置き換えられるメタ命令のパラメータとしてその値を記述する必要が発生する。
例えば、メタ命令のパラメータとして内部に存在するジャンプ・アウト命令の個数と、ジャンプ・アウト命令の出現順にそのジャンプ・アウト命令に対する圧縮対象命令列内オフセット値と圧縮対象命令列間オフセット値をパラメータとして持つようにメタ命令の定義を行う必要がある。
一方で、ジャンプ・アウト命令に関しては特にパラメータは必要がなくなる。
【０２９６】
以上、本実施の形態では、
命令データ圧縮手段においてメタ命令に置き換えられた命令もしくは命令列内の命令にジャンプ命令が存在し、そのジャンプ先がメタ命令辞書データに登録されている命令もしくは命令列の範囲を超過してジャンプし、かつそのジャンプ先の命令がメタ命令に登録されている命令もしくは命令列内の命令ではない場合に、そのジャンプ命令をメタ命令外ジャンプ命令に置き換えるメタ命令外ジャンプ変換手段を備えることを説明した。
【０２９７】
また、本実施の形態では、
命令データ圧縮手段において、ジャンプ命令に対し、そのジャンプ命令とそのジャンプ先の命令の間に少なくとも一つ以上のメタ命令に置き換えられる命令列が存在する場合、ジャンプ命令のパラメータとなるジャンプオフセット値を書き換える事を説明した。
つまり、メタ命令に書き換えられた箇所の長さが短くなるため、ジャンプオフセット値を書き換えないと正しいジャンプ先にジャンプできない事を解消できる。
【０２９８】
また、本実施の形態では、
命令データ圧縮手段においてメタ命令に置き換えられた命令もしくは命令内の命令にジャンプ命令が存在し、そのジャンプ先がメタ命令辞書データに登録されている命令もしくは命令列の範囲を超過してジャンプし、かつそのジャンプ先の命令がメタ命令に登録されている場合に、そのジャン命令をメタ命令間ジャンプ命令に置き換えるメタ命令間ジャンプ変換手段を備える事を説明した。
【０２９９】
また、本実施の形態では、
命令データ圧縮手段においてメタ命令に置き換えられなかった命令もしくは命令列内の命令がジャンプ命令であり、そのジャンプ先がメタ命令辞書データに登録されている命令もしくは命令列内の特定命令である場合、そのジャンプ命令をメタ命令内ジャンプ命令に置き換えるメタ命令内ジャンプ変換手段を備える事を説明した。
【０３００】
最後に、実施の形態１〜６に示した情報処理端末装置１００のハードウェア構成例について説明する。
図４９は、実施の形態１〜６に示す情報処理端末装置１００のハードウェア資源の一例を示す図である。
なお、図４９の構成は、あくまでも情報処理端末装置１００のハードウェア構成の一例を示すものであり、情報処理端末装置１００のハードウェア構成は図４９に記載の構成に限らず、他の構成であってもよい。
また、ここでは、１つの情報処理端末装置１００に、中央制御装置１０１〜命令データ格納装置１０６の機能が含まれている例を前提にしているが、中央制御装置１０１〜命令データ格納装置１０６の各々が複数の情報処理端末装置により実現される場合は、図４９は、少なくとも命令データ圧縮装置１０３及び圧縮命令データ実行装置１０４の各々のハードウェア構成例を意味している。
【０３０１】
図４９において、情報処理端末装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
実施の形態１〜６で説明した「ソースコード格納装置１０５」「命令データ格納装置１０６」、「命令圧縮時情報記憶部１０３７」「命令実行時情報記憶部１０４２」は、ＲＡＭ９１４、磁気ディスク装置９２０等により実現される。
通信ボード９１５、キーボード９０２、マウス９０３、スキャナ装置９０７、ＦＤＤ９０４などは、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【０３０２】
通信ボード９１５は、例えば、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）、ＳＡＮ（ストレージエリアネットワーク）などに接続されている。
【０３０３】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。
プログラム群９２３のプログラムは、ＣＰＵ９１１がオペレーティングシステム９２１、ウィンドウシステム９２２を利用しながら実行する。
【０３０４】
また、ＲＡＭ９１４には、ＣＰＵ９１１に実行させるオペレーティングシステム９２１のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、ＲＡＭ９１４には、ＣＰＵ９１１による処理に必要な各種データが格納される。
【０３０５】
また、ＲＯＭ９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置９２０にはブートプログラムが格納されている。
情報処理端末装置１００の起動時には、ＲＯＭ９１３のＢＩＯＳプログラム及び磁気ディスク装置９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムによりオペレーティングシステム９２１が起動される。
【０３０６】
上記プログラム群９２３には、実施の形態１〜６の説明において「〜部」（「命令圧縮時情報記憶部１０３７」及び「命令実行時情報記憶部１０４２」以外、以下同様）、「〜手段」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
【０３０７】
ファイル群９２４には、実施の形態１〜６の説明において、「〜の判断」、「〜の計算」、「〜の導出」、「〜の算出」、「〜の比較」、「〜の評価」、「〜の更新」、「〜の設定」、「〜のセット」、「〜の登録」、「〜の選択」、「〜の検索」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出される。
そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１〜６で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。
データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。
また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【０３０８】
また、実施の形態１〜６の説明において「〜部」、「〜手段」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。
すなわち、実施の形態１〜６で説明したフローチャートに示すステップ、手順、処理により、本発明に係る情報処理端末装置１００（命令データ圧縮装置１０３、圧縮命令データ実行装置１０４）を方法発明として把握することができる。
また、「〜部」、「〜手段」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。
或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。
プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。
すなわち、プログラムは、実施の形態１〜６の「〜部」、「〜手段」としてコンピュータを機能させるものである。あるいは、実施の形態１〜６の「〜部」、「〜手段」の手順や方法をコンピュータに実行させるものである。
【０３０９】
このように、実施の形態１〜６に示す情報処理端末装置１００は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」、「〜手段」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【０３１０】
１００  情報処理端末装置、１０１  中央制御装置、１０２  命令データ生成装置、１０３  命令データ圧縮装置、１０４  圧縮命令データ実行装置、１０５  ソースコード格納装置、１０６  命令データ格納装置、１０３１  命令データ格納装置アクセス部、１０３２  命令解釈・圧縮部、１０３３  同一命令列出現回数カウント部、１０３４  圧縮対象命令テーブル生成部、１０３５  命令データ圧縮変換部、１０３６  メタ命令辞書データ生成部、１０３７  命令圧縮時情報記憶部、１０４１  命令データ格納装置アクセス部、１０４２  命令実行時情報記憶部、１０４３  処理対象命令位置記憶部、１０４４  処理対象命令位置退避部、１０４５  メタ命令辞書データ保持部、１０４６  命令列解釈・実行部、１０４７  メタ命令解釈・実行部。
【図１】
2011243134.tif 000004
【図２】
2011243134.tif 000005
【図３】
2011243134.tif 000006
【図４】
2011243134.tif 000007
【図５】
2011243134.tif 000008
【図６】
2011243134.tif 000009
【図７】
2011243134.tif 000010
【図８】
2011243134.tif 000011
【図９】
2011243134.tif 000012
【図１０】
2011243134.tif 000013
【図１１】
2011243134.tif 000014
【図１２】
2011243134.tif 000015
【図１３】
2011243134.tif 000016
【図１４】
2011243134.tif 000017
【図１５】
2011243134.tif 000018
【図１６】
2011243134.tif 000019
【図１７】
2011243134.tif 000020
【図１８】
2011243134.tif 000021
【図１９】
2011243134.tif 000022
【図２０】
2011243134.tif 000023
【図２１】
2011243134.tif 000024
【図２２】
2011243134.tif 000025
【図２３】
2011243134.tif 000026
【図２４】
2011243134.tif 000027
【図２５】
2011243134.tif 000028
【図２６】
2011243134.tif 000029
【図２７】
2011243134.tif 000030
【図２８】
2011243134.tif 000031
【図２９】
2011243134.tif 000032
【図３０】
2011243134.tif 000033
【図３１】
2011243134.tif 000034
【図３２】
2011243134.tif 000035
【図３３】
2011243134.tif 000036
【図３４】
2011243134.tif 000037
【図３５】
2011243134.tif 000038
【図３６】
2011243134.tif 000039
【図３７】
2011243134.tif 000040
【図３８】
2011243134.tif 000041
【図３９】
2011243134.tif 000042
【図４０】
2011243134.tif 000043
【図４１】
2011243134.tif 000044
【図４２】
2011243134.tif 000045
【図４３】
2011243134.tif 000046
【図４４】
2011243134.tif 000047
【図４５】
2011243134.tif 000048
【図４６】
2011243134.tif 000049
【図４７】
2011243134.tif 000050
【図４８】
2011243134.tif 000051
【図４９】
2011243134.tif 000052