(57)【要約】【課題】  プログラムのサイズを十分に圧縮することは困難な場合があった。【解決手段】  演算処理回路１１３は、第１命令列と第２命令列を含む変換前プログラムのうち、第１命令列と一致又は近似する第２命令列が呼出命令に置換された変換後プログラムを実行する。演算処理回路１１３は、変換後プログラムの呼出命令の実行に伴って特定された第１命令列の命令を、変換後プログラムが格納されたメモリ２１から順次フェッチする。そして、演算処理回路１１３は、メモリ２１からフェッチされた命令を利用して、呼出命令に置換された変換前プログラムの第２命令列の命令を順次実行する。【選択図】  図１
2008269052.tif 000002
【特許請求の範囲】
【請求項１】
第１命令列と第２命令列を含む変換前プログラムのうち、前記第１命令列と一致又は近似する前記第２命令列が呼出命令に置換された変換後プログラムを実行する演算処理回路であって、
前記変換後プログラムの前記呼出命令の実行に伴って特定された前記第１命令列の命令を、前記変換後プログラムが格納されたメモリから順次フェッチし、
前記メモリからフェッチされた前記命令を利用して、前記呼出命令に置換された前記変換前プログラムの前記第２命令列の命令を順次実行する、演算処理回路。
【請求項２】
前記呼出命令は、前記第１命令列に含まれる命令数、前記第１命令列の命令のメモリアドレス、それぞれが対応関係にある前記第１命令列の命令と前記第２命令列の命令間の更新情報を含むものであることを特徴とする請求項１記載の演算処理回路。
【請求項３】
前記呼出命令の前記更新情報を利用して、入力された前記第１命令列の命令を、当該命令に対応する前記第２命令列の命令に修正し、前記第２命令列の命令を実行することを特徴とする請求項２記載の演算処理回路。
【請求項４】
前記第１命令列の命令、前記呼出命令、前記第２命令列の命令、を実行する命令実行部と、
前記呼出命令の前記更新情報に基づいて、前記命令実行部による前記呼出命令の実行に伴って前記メモリからフェッチされた前記第１命令列の命令を当該命令に対応する前記第２命令列の命令に修正する命令修正部と、
前記命令実行部による前記呼出命令の実行に伴って前記メモリからフェッチされた前記第１命令列の命令が前記命令修正部に入力される前、予め前記呼出命令の前記更新情報を前記命令修正部に設定する修正制御部と、
を備えることを特徴とする請求項１記載の演算処理回路。
【請求項５】
少なくとも前記変換後プログラムの前記第１命令列の実行時に利用される第１プログラムカウンタと、
少なくとも前記変換前プログラムの前記第２命令列の実行時に利用される第２プログラムカウンタと、
をさらに備えることを特徴とする請求項４記載の演算処理回路。
【請求項６】
前記第１プログラムカウンタの出力又は前記第２プログラムカウンタの出力のいずれかを選択し出力するセレクタと、
をさらに備え、
前記修正制御部は、少なくとも前記第１命令列の命令の実行時、前記セレクタに前記第１プログラムカウンタの出力を選択出力させ、
少なくとも前記第２命令列の命令の実行時、前記セレクタに前記第２プログラムカウンタの出力を選択出力させることを特徴とする請求項５記載の演算処理回路。
【請求項７】
前記第２命令列の命令の列数は、前記第１命令列の命令の列数と同じであり、
前記第２命令列の１列目の命令は、前記第１命令列の１列目の命令と同じであることを特徴とする請求項１記載の演算処理回路。
【請求項８】
第１命令列と第２命令列を含む変換前プログラムのうち、前記第１命令列と一致又は近似する前記第２命令列が呼出命令に置換された変換後プログラムを実行する半導体集積回路であって、
前記変換後プログラムが格納されたメモリと、
前記変換後プログラムの前記呼出命令の実行に伴って特定された前記第１命令列の命令を、前記メモリから順次フェッチし、前記メモリからフェッチされた前記命令を利用して、前記呼出命令に置換された前記変換前プログラムの前記第２命令列の命令を順次実行する演算処理回路と、
を備える、半導体集積回路。
【請求項９】
前記呼出命令は、前記第１命令列に含まれる命令数、前記第１命令列の命令のメモリアドレス、それぞれが対応関係にある前記第１命令列の命令と前記第２命令列の命令間の更新情報を含むものであることを特徴とする請求項８記載の半導体集積回路。
【請求項１０】
前記呼出命令の前記更新情報を利用して、入力された前記第１命令列の命令を、当該命令に対応する前記第２命令列の命令に修正し、前記第２命令列の命令を実行することを特徴とする請求項９記載の半導体集積回路。
【請求項１１】
前記第１命令列の命令、前記呼出命令、前記第２命令列の命令、を実行する命令実行部と、
前記呼出命令の前記更新情報に基づいて、前記命令実行部による前記呼出命令の実行に伴って前記メモリからフェッチされた前記第１命令列の命令を当該命令に対応する前記第２命令列の命令に修正する命令修正部と、
前記命令実行部による前記呼出命令の実行に伴って前記メモリからフェッチされた前記第１命令列の命令が前記命令修正部に入力される前、予め前記呼出命令の前記更新情報を前記命令修正部に設定する修正制御部と、
を備えることを特徴とする請求項８記載の半導体集積回路。
【請求項１２】
少なくとも前記変換後プログラムの前記第１命令列の実行時に利用される第１プログラムカウンタと、
少なくとも前記変換前プログラムの前記第２命令列の実行時に利用される第２プログラムカウンタと、
をさらに備えることを特徴とする請求項１１記載の半導体集積回路。
【請求項１３】
前記第１プログラムカウンタの出力又は前記第２プログラムカウンタの出力のいずれかを選択し出力するセレクタと、
をさらに備え、
前記修正制御部は、少なくとも前記第１命令列の命令の実行時、前記セレクタに前記第１プログラムカウンタの出力を選択出力させ、
少なくとも前記第２命令列の命令の実行時、前記セレクタに前記第２プログラムカウンタの出力を選択出力させることを特徴とする請求項１２記載の半導体集積回路。
【請求項１４】
前記第２命令列の命令の列数は、前記第１命令列の命令の列数と同じであり、
前記第２命令列の１列目の命令は、前記第１命令列の１列目の命令と同じであることを特徴とする請求項８記載の半導体集積回路。
【請求項１５】
前記第２命令列の命令の列数は、前記第１命令列の命令の列数と同じであり、
前記第２命令列の１列目の命令は、前記第１命令列の１列目の命令と同じであることを特徴とする請求項９記載の半導体集積回路。
【請求項１６】
コンピュータを利用して、第１命令列と第２命令列を含む変換前プログラムを前記第１命令列と呼出命令を含む変換後プログラムに変換するプログラムの変換方法であって、
前記第１命令列と一致又は近似する前記第２命令列を特定し、
特定された前記第２命令列を呼出命令に置換し、
前記呼出命令に前記第１命令列の命令のアドレス情報を設定し、
前記呼出命令に前記第１命令列の命令と前記第２命令列の命令間の更新情報を設定する、プログラムの変換方法。
【請求項１７】
前記第２命令列の命令の列数は、前記第１命令列の命令の列数と同じであり、
前記第２命令列の１列目の命令は、前記第１命令列の１列目の命令と同じであることを特徴とする請求項１６記載のプログラムの変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理回路、半導体集積回路、及びプログラムの変換方法に関する。
【背景技術】
【０００２】
近年、半導体集積回路（LSI(Large Scale Integration)）の高集積化、高機能化の進展が著しい。これに伴い、LSI内でのデータ処理や内部制御のために、LSI内にCPU(Central Processing Unit)を組み込むことが行われている。特に大規模なLSIではCPU本体の他に命令メモリ、データメモリや周辺I/O等も共にLSIに組み込み、１チップでマイクロプロセッサを構成することも行われている。マイクロプロセッサにおいても、処理内容の複雑化、高度化が強く求められている。また、当然ながら、半導体製品の低コスト化の要請も著しい。
【０００３】
マイクロプロセッサの処理内容の高度化を進展させるためには、マイクロプロセッサの動作に用いられるプログラムを大規模なものにする必要がある。しかしながら、プログラムの大規模化は、メモリ容量の増大を伴い、チップ面積の増大を招いてしまう。従って、マイクロプロセッサの設計にあたっては、マイクロプロセッサの機能の高度化を果たしながら、チップ面積の増大を抑制する必要がある。より具体的には、プログラムの高機能化を行いながら、CPU本体、周辺回路、およびメモリサイズの増大を抑制する必要がある。
【０００４】
ここで、図７乃至図９を参照して、特許文献１記載の技術について説明する。図７は、従来のマイクロプロセッサのブロック図である。図８は、従来のマイクロプロセッサのマクロ命令の構成を示す説明図である。図９は、従来のマイクロプロセッサにおける修正を説明するための説明図である。
【特許文献１】特開２００６−２９３６７３号公報
【０００５】
図７に示すように、マイクロプロセッサは、定義メモリ１１１、内部バス１１２、CPU１１３を備える。CPU１１３は、内部バス１１２を介して定義メモリ１１１にアクセスする。
【０００６】
プログラム１１４は、CPU１１３が直接実行可能な命令コード(以下、命令という。)、命令セットAまたはBの実行を指示するマクロ命令A、マクロ命令B、マクロ命令AまたはBの直後に配置された修正情報A1、A2、B1を有する。
【０００７】
命令セットAは、CPU１１３が直接実行可能な複数の命令列である。マクロ命令Aの読み込みによって、命令セットAは実行対象の命令として選択され実行される。CPU１１３は、命令セットの実行前、マクロ命令A、修正情報A1又はA2に基づいて、命令セットAの一部を修正する。そして、CPU１１３は、修正された命令セットAを実行する。命令セットBについても同様である。
【０００８】
図８に、従来のマイクロプロセッサにおけるマクロ命令の構成を示す説明図を示す。図８に示すように、マクロ命令は、マクロ命令識別コード１２１、命令セット識別コード１２２、修正モード１２３、PC増加値１２４を有する。
【０００９】
マクロ命令識別コード１２１は、マクロ命令を通常の命令と区別するためのコードである。命令セット識別コード１２２は、定義メモリ１１１中に格納されている複数の命令セットを識別するためのコードである。修正モード１２３は、命令セットの具体的な修正方法を指示するコードである。なお、修正モード１２３には、修正無し(００)、上書きモード(０１)、交換モード(１０)、コピーモード(１１)の４種類がある。
【００１０】
PC増加値１２４は、マクロ命令実行後のプログラムカウンタの増加分を示す。マクロ命令の直後に配置する修正情報の大きさを表す。
【００１１】
図９に、従来のマイクロプロセッサにおける修正情報の構成の説明図を示す。図９に示すように、修正情報１３１ａ〜１３１ｃは２ワードで構成されている。上書きモード１３１ａの修正情報は、上書きする命令、上書きする位置からなる。交換モード１３１ｂの修正情報は、交換する位置１、交換する位置２からなる。コピーモード１３１ｃの修正情報は、コピー元位置、コピー先位置からなる。
【００１２】
図７のマイクロプロセッサは、プログラム１１４から命令を順次読み込んで、読み込んだ命令に基づいて所定の処理を実行する。
【００１３】
CPU１１３はマクロ命令を読み込むと、まずプログラムカウンタにPC増加値１２４を加算し、次の命令のアドレスを求め、これを保持する。次にCPU１１３は、マクロ命令の直後の修正情報を読み込んで解釈し、マクロ命令の命令識別コード１２２が指定する定義メモリ１１１内の命令セットを修正モード１２３に従い修正する。具体的には、修正モード１２３が上書きモード０１の場合、上書きする位置の命令を上書きする命令に置き換える。修正モード１２３が交換モード１０の場合、交換位置１と交換位置２の命令を入れ替える。修正モード１２３がコピーモード１１の場合、コピー元位置の命令をコピー先位置に上書きする。
【００１４】
CPU１１３はPC増加値１２４の示すワード数まで修正情報の読み込みと命令セットの修正を繰り返し行う。修正が完了すると修正された命令セットの命令を順次読み込み処理を実行する。命令セットの実行が終了すると、CPU１１３は保持したメモリアドレスの次のメモリアドレスをプログラムカウンタに書き戻し、プログラム１１４から命令を読み込み実行する通常の動作に戻る。
【００１５】
マクロ命令の修正モード１２３が修正無しである場合には、上記修正動作を行わずに命令識別コード１２２が指定する命令セットを実行する。命令セットの実行完了後の動作は修正がある場合と同様である。
【発明の開示】
【発明が解決しようとする課題】
【００１６】
上述のように、定義メモリに格納された命令セットの内容を適宜修正して実行すれば、メモリ容量の増大を抑制しつつ、多種類の類似した命令列を構成することが可能である。しかしながら、多種類の類似した命令列を構成するためには、前提として修正情報が必要となる。修正情報の比率が増大する場合には、プログラムの縮小効果が相殺され、全体としてプログラムサイズを十分に縮小することができない。命令セットの命令ステップ数が少ない場合、１つのマクロ命令で置き換えられる命令個数に対する修正情報の比率が増大し、プログラムの縮小効果が相殺されてしまう。このように、従来、プログラムのサイズを十分に圧縮することは困難な場合があった。
【課題を解決するための手段】
【００１７】
本発明にかかる演算処理回路は、第１命令列と第２命令列を含む変換前プログラムのうち、前記第１命令列と一致又は近似する前記第２命令列が呼出命令に置換された変換後プログラムを実行する演算処理回路であって、前記変換後プログラムの前記呼出命令の実行に伴って特定された前記第１命令列の命令を、前記変換後プログラムが格納されたメモリから順次フェッチし、前記メモリからフェッチされた前記命令を利用して、前記呼出命令に置換された前記変換前プログラムの前記第２命令列の命令を順次実行する。
【００１８】
本発明にかかる半導体集積回路は、第１命令列と第２命令列を含む変換前プログラムのうち、前記第１命令列と一致又は近似する前記第２命令列が呼出命令に置換された変換後プログラムを実行する半導体集積回路であって、前記変換後プログラムが格納されたメモリと、前記変換後プログラムの前記呼出命令の実行に伴って特定された前記第１命令列の命令を、前記メモリから順次フェッチし、前記メモリからフェッチされた前記命令を利用して、前記呼出命令に置換された前記変換前プログラムの前記第２命令列の命令を順次実行する演算処理回路と、を備える。
【００１９】
本発明にかかるプログラムの変換方法は、コンピュータを利用して、第１命令列と第２命令列を含む変換前プログラムを前記第１命令列と呼出命令を含む変換後プログラムに変換するプログラムの変換方法であって、前記第１命令列と一致又は近似する前記第２命令列を特定し、特定された前記第２命令列を呼出命令に置換し、前記呼出命令に前記第１命令列の命令のアドレス情報を設定し、前記呼出命令に前記第１命令列の命令と前記第２命令列の命令間の更新情報を設定する。
【発明の効果】
【００２０】
プログラムのサイズを十分に圧縮することができる。
【発明を実施するための最良の形態】
【００２１】
以下、図面を参照しつつ、本発明の実施の形態について説明する。なお、各実施の形態は、説明の便宜上、簡略化されている。図面は簡略的なものであるから、図面の記載を根拠として本発明の技術的範囲を狭く解釈してはならない。図面は、もっぱら技術的事項の説明のためのものであり、図面に示された要素の正確な大きさ等は反映していない。同一の要素には、同一の符号を付し、重複する説明は省略するものとする。
【００２２】
[第１の実施形態]
以下、図１乃至図４を用いて、第１の実施形態について説明する。図１は、マイクロプロセッサの概略的なブロック図である。図２は、プログラムの変換を説明するための説明図である。図３は、call命令の説明図である。図４は、マイクロプロセッサによる変換後プログラムの実行を説明するための説明図である。
【００２３】
図１に示すように、マイクロプロセッサ１０は、CPU１１３、内部バス２０、命令メモリ２１、データメモリ２２を備える。CPU１１３、命令メモリ２１、データメモリ２２は、それぞれ内部バス２０に接続される。CPU１１３と命令メモリ２１又はデータメモリ２２間の信号等の伝達は、内部バス２０を介して実行される。
【００２４】
CPU１１３は、命令実行部１１、プログラムカウンタ（第１プログラムカウンタ）１２、プログラムカウンタ（第２プログラムカウンタ）１３、擬似サブルーチン実行制御部１４、命令修正部１５、セレクタ１６、内部バスインターフェイス１７、演算部１８、レジスタ１９、を備える。
【００２５】
マイクロプロセッサ１０は、モノリシックな半導体チップであって、命令実行部１１〜レジスタ１９、命令メモリ２１、データメモリ２２を共通の半導体基板上に有する。
【００２６】
まず、CPU１１３の構成要素の接続関係について説明する。図１に示すように、内部バスインターフェイス１７には、レジスタ１９の出力、命令実行部１１の出力、セレクタ１６の出力、らが接続される。命令修正部１５には、内部バスインターフェイス１７の出力、擬似サブルーチン実行制御部１４の出力が接続される。命令実行部１１には、命令修正部１５の出力が接続される。プログラムカウンタ１２には、命令実行部１１の出力、擬似サブルーチン実行制御部１４の出力、らが接続される。プログラムカウンタ１３には、命令実行部１１の出力、擬似サブルーチン実行制御部１４の出力、らが接続される。擬似サブルーチン実行制御部１４には、命令実行部１１の出力が接続される。セレクタ１６には、プログラムカウンタ１２の出力、プログラムカウンタ１３の出力、擬似サブルーチン実行制御部１４の出力、らが接続される。演算部１８には、命令実行部１１の出力が接続される。レジスタ１９には、命令実行部１１の出力が接続される。演算部１８とレジスタ１９とは、相互に入出力可能である。同様に、レジスタ１９と内部バスインターフェイス１７とは、相互に入出力可能である。
【００２７】
上述の命令メモリ２１、データメモリ２２は、内部バス２０を介して、内部バスインターフェイス１７に接続される。命令メモリ２１には、後述の変換後プログラムが格納される。データメモリ２２には、処理対象データ、実行結果、プログラム実行中のレジスタ１９の値などが一時的に格納される。データメモリ２２は、CPU１１３がプログラムを実行する上で当然に必要となるものである。命令メモリ２１とデータメモリ２２は、１つのメモリモジュールとして機能する。
【００２８】
CPU１１３は、命令メモリ２１に格納された変換後プログラムを実行する。後述するように、変換後プログラムは、通常の命令に加えて、call命令３０（呼出命令）が含まれる（図３参照）。call命令３０がCPU１１３で実行されると、call命令３０によって置換された変換前プログラムの命令列がCPU１１３で実行される。これによって、プログラムサイズを圧縮しつつ、変換前プログラムの実行を実現することができる。そして、チップ面積の小さなマイクロプロセッサ１０を実現することができる。なお、マイクロプロセッサ１０の動作について後述する。
【００２９】
なお、call命令３０の実行を契機として実行される命令列又は命令を擬似サブルーチンと呼ぶ。これに対応して、call命令３０の実行を契機として実行される命令列又は命令以外の命令列又は命令をメインルーチンと呼ぶ。マイクロプロセッサ１０の通常動作時は、メインルーチンの実行時と等しい。マイクロプロセッサ１０の擬似動作時は、擬似サブルーチンの実行時と等しい。
【００３０】
以下、上述の構成要素、その動作について具体的に説明する。
【００３１】
内部バスインターフェイス１７は、内部バス２０との間で、命令やデータの転送を実行する。これにより、CPU１１３−命令メモリ２１、CPU１１３−データメモリ２２間の、命令やデータの転送が実現される。
【００３２】
内部バスインターフェイス１７は、セレクタ１６からの出力信号に基づいて特定されるメモリアドレスにある命令を命令メモリ２１からフェッチして命令修正部１５に転送する。
【００３３】
命令修正部１５は、内部バスインターフェイス１７から入力された命令を命令実行部１１に転送する。なお、上述の擬似サブルーチンの実行時には、命令修正部１５は、擬似サブルーチン実行制御部１４からの指示に基づいて内部バスインターフェイスから入力された命令を修正し、修正した命令を命令実行部１１に出力する。なお、命令修正部１５は、call命令３０の修正情報３３（図３参照）に基づいて、内部バスインターフェイス１７からの入力された命令を修正する。
【００３４】
命令実行部１１は、命令修正部１５からの命令を解釈し実行する。
【００３５】
命令実行部１１は、call命令３０を実行するとき、擬似サブルーチンの実行開始を指示する。具体的には、call命令３０に格納されたメモリアドレス情報３２をプログラムカウンタ１３に設定する。また、call命令３０に格納された修正情報３３を、擬似サブルーチン実行制御部１４に転送する。命令実行部１１は、call命令３０の実行を終えると、命令修正部１５から供給される通常の命令の解釈、実行に戻る。
【００３６】
プログラムカウンタ１２は、通常動作時に利用されるプログラムカウンタである。プログラムカウンタ１２のカウント値は、順次実行される命令の命令メモリ２１におけるメモリアドレスに設定される。プログラムカウンタ１２のカウント値は、内部バスインターフェイス１７が命令メモリ２１から命令をフェッチする度に、１ずつ加算される。なお、擬似動作時には、プログラムカウンタ１２のカウント値は加算されない。
【００３７】
プログラムカウンタ１３は、擬似動作時に利用されるプログラムカウンタである。call命令３０が命令実行部１１で実行されたとき、プログラムカウンタ１３のカウント値は、call命令３０に格納されたメモリアドレスに設定される。プログラムカウンタ１３のカウント値は、内部バスインターフェイス１７が命令メモリ２１から命令をフェッチする度に、１づつ加算される。なお、通常動作時には、プログラムカウンタ１３のカウント値は加算されない。
【００３８】
セレクタ１６は、プログラムカウンタ１２から出力された信号Ｓ１又はプログラムカウンタ１３から出力された信号Ｓ２を選択し、選択した信号Ｓ１又は信号Ｓ２を内部バスインターフェイス１７にアドレス信号Ｓ３として出力する。セレクタ１６から出力されるアドレス信号Ｓ３は、プログラムカウンタ１２又はプログラムカウンタ１３のカウント値と等しい。プログラムカウンタのカウント値に基づいて、フェッチ対象のメモリアドレスの番地が特定される。
【００３９】
call命令３０の修正情報３３の入力を受けて、擬似サブルーチン実行制御部１４は、call命令３０のメモリアドレス情報３２がカウント値に設定されたプログラムカウンタ１３からの信号Ｓ２をアドレス信号Ｓ３として出力するようにセレクタ１６を制御する。換言すると、擬似サブルーチン実行制御部１４は、プログラムカウンタ１３のカウント値をフェッチ対象のメモリアドレスとして内部バスインターフェイスに出力する。また、擬似サブルーチン実行制御部１４は、命令実行部１１から転送されたcall命令３０に格納された修正情報３３を命令修正部１５に転送する。また、擬似サブルーチン実行制御部１４は、フェッチした命令のステップ数をカウントする。
【００４０】
演算部１８は、命令実行部１１からの入力に基づいて各種の演算処理を行う。レジスタ１９は、プログラム実行中に必要な値を一時的に保持する。内部バス２０は、チップ上のバスであり、同一チップ上の他の機能モジュール等と接続されている。
【００４１】
命令メモリ２１には、命令実行部１１が直接実行可能な命令で構成された変換後プログラムが格納されている。データメモリ２２には、プログラム処理対象のデータやプログラム実行結果が格納される。また、データメモリ２２は、プログラム実行中のレジスタ１９の値の一時保存などにも利用される。内部バス２０で接続された別のメモリモジュールを利用できる場合には省略してもよい。
【００４２】
ここで、図２に、プログラムの変換を説明するための説明図を示す。図２（ａ）に、変換前プログラム４０の構成を示す。図２（ｂ）に、本発明の第１の実施形態のマイクロプロセッサ１０に供給する変換後プログラム４１の構成を示す。
【００４３】
本実施形態においては、所定の規則に基づいてプログラムが変換される。変換後プログラムは、変換前プログラムよりも命令列が少ない。換言すると、変換後プログラムは、変換前プログラムよりも圧縮されている。命令列数の削減により、プログラムサイズは効果的に圧縮される。なお、変換後プログラムは、上述の命令メモリ２１に保持され、上述のCPU１１３によって実行される。
【００４４】
図２（ａ）に示すように、メモリアドレス１（以下、メモリアドレスをaddrと表示する）の命令ａ、addr2の命令ｂを命令列１とする。
【００４５】
次に、命令列1と類似の命令列がaddr3以降にあるかどうかを検索する。
【００４６】
ここでは、図２（ａ）に示すように、１ステップ目が命令ａ、２ステップ目が命令ｂである命令列４がある。従って、命令列４を置換対象の命令列として特定する。
【００４７】
そして、命令列４の２ステップ目の命令から命令列１の２ステップ目の命令を減算し、それらの差分情報を求める。差分情報のビット数が、許容範囲内（call命令３０の修正情報３３のビット数内（図３参照））であれば、命令列４をcall命令３０に置き換える。ここでは、命令列４のステップ目の命令は、命令列１の２ステップ目の命令と同一であり、差分情報は０である。従って、命令列４をcall命令３０に置き換える。
【００４８】
続けて、命令列１に類似した命令列の検索を継続する。類似命令列として命令列６がある。命令列６を置換対象の命令列として特定し、上述と同様に、命令列６の２ステップ目の命令と命令列１の２ステップ目の命令を減算し、それらの差分情報を求める。そして、差分情報のビット数が、許容範囲内であれば、命令列６をcall命令３０に置換する。命令列６の場合、２ステップ目の命令が命令ｂ2である。命令ｂ2から命令列１の２ステップ目の命令bを引いた差分情報は、call命令３０に修正情報３３（図３参照）として格納される。
【００４９】
このように、命令列１と類似する命令列の検索と変換をプログラム終端まで行う。そして、命令列１の類似する命令列のcall命令３０への変換が完了する。
【００５０】
命令列１についての変換が完了後、他の命令列を設定し、上述と同様の処理を行う。ここでは、addr2の命令b、addr3の命令ｃを命令列２として設定する。そして、addr4以降に命令列２の類似命令列があるかどうかを検索する。
【００５１】
図２（ａ）に示すように、1ステップ目が命令ｂ2ステップ目が命令c2である命令列５がある。命令列１と同様に２ステップ目の命令の差分情報が許容範囲内であれば、命令列５をcall命令３０に置き換える。
さらに、同様にして、addr3の命令c、addr4の命令ｄを命令列３として特定し、addr5以降で命令列３の類似命令列について検索、変換を実行する。
【００５２】
同様に、次々と命令列および検索の開始アドレスを繰り下げながら命令列の検索と変換を繰り返す。そして、置換できる命令列が無くなるか、または検索開始アドレスがプログラム終端に達すれば、変換完了とし、変換後プログラム４１が生成される。
【００５３】
上述の説明から明らかなように、２ステップの命令列が１ステップのcall命令３０に置き換えられることでプログラムの命令数が削減され、最終アドレスは addr x ＞ addr mとなる。なお、上述のプログラムの変換は、上述の手順を踏まえ適切に設計されたソフトウェアがコンピュータで実行されることで実現される。
【００５４】
また、図２（ｂ）に示すように、変換前プログラム４０の命令列１に対応する変換後プログラム４１の命令列を擬似サブルーチン１と呼ぶ。擬似サブルーチン１は、命令１の実行に伴って実行される。同様に、変換前プログラム４０の命令列２に対応する変換後プログラム４１の命令列を擬似サブルーチン２と呼ぶ。他の命令列と他の擬似サブルーチン間の対応関係についても同様である。
【００５５】
call命令３０の実行ステップ数は固定されているので、擬似サブルーチンの区別はアドレス情報のみで行われる。従って、擬似サブルーチン同士は重なりを持つことが可能である。これにより、プログラムの圧縮効果をさらに高めることができる。
【００５６】
後述するように、変換後プログラム４１のcall命令３０がCPU１１３で実行されると、実行されたcall命令３０のメモリアドレス情報３２（図３参照）に基づいて、擬似サブルーチンが特定される。そして、特定された擬似サブルーチンを利用して、変換前プログラム４０の削減された命令が復元される。従って、プログラムの変換に伴って命令列数を削減したとしても、変換前プログラム４０が有していた情報自体が失われることはない。
【００５７】
なお、１ステップ目の命令が無条件ジャンプの場合、２ステップ目の命令が意味を持たない。従って、そのような命令列は、変換対象外の命令列とすれば良い。また、２ステップの命令列に既に置換されたcall命令３０を含む場合も検索対象外とすれば良い。
【００５８】
ところで、所定の命令列がcall命令３０に置換される度に、後続の命令は前詰めされる。従って、call命令３０のメモリアドレス情報３２（図３参照）は、削除された命令列数を考慮して改めて設定されるものとする。
【００５９】
ここで、図３に、上述のcall命令３０の構成図を示す。図３に示すように、call命令３０はマイクロプロセッサの命令語長１ワード分のビット長の命令である。
【００６０】
オペコード３１には、所定のビット数の信号が格納される。命令実行部１１は、call命令３０のオペコード３１により、入力された命令がcall命令３０であることを識別する。また、命令実行部１１は、オペコード３１から、擬似動作時に実行されるステップ数、命令修正位置、命令修正方法等を識別する。なお、擬似動作時に実行されるステップ数は、図２で設定した命令列数と等しく、ここでは２ステップである。命令修正位置は、ここでは、２ステップ目の命令となる。命令修正方法は、加算、減算等が例示されるが、図２で説明したように、ここでは更新情報は差分によって特定されるため、命令修正方法は加算と設定される。
【００６１】
メモリアドレス情報３２は、フェッチ対象となるべき命令の命令メモリ２１のメモリアドレス（ジャンプ先のアドレスと呼ぶこともある）を示す信号が格納される。具体的には、メモリアドレス情報３２には、設定した命令列の１ステップ目の命令のメモリアドレスを示す信号が格納される。メモリアドレス情報３２は、ジャンプ先アドレスを指定するに足るビット数を持つ。
【００６２】
修正情報３３は、上述の説明からも明らかなように、設定した命令列の２ステップ目の命令と、検索により特定された命令列の２ステップ目の命令との差分情報が格納される。差分情報のビット数が、修正情報３３のビット数内の場合、検索により特定された命令列はcall命令３０に置換される。命令修正部１５は、この差分情報を利用して、命令メモリ２１からの命令を修正し、命令実行部１１に出力する。
【００６３】
尚、図２で説明した命令列４は、次のようにcall命令３０に置換される。オペコード３１は、２ステップのcall命令３０を表す命令コード（以下call2stepと表記する）に設定される。メモリアドレス情報３２は、命令列１の先頭アドレスaddr１が設定される。修正情報３３は、命令列１の2ステップ目の命令ｂと命令列４の２ステップ目の命令ｂとの差分情報（ここでは、差分０なので０）が設定される。このように設定されたcall命令３０が、命令列４と置き換えられる。つまり、変換前プログラム４０の命令列４は、変換後プログラム４１のcall命令（call２step、addr1、０）（命令１）に置換される。
【００６４】
図２で説明した命令列５は、次のようにcall命令３０に置換される。オペコード３１は、call2stepが設定される。メモリアドレス情報３２は、命令列２の先頭アドレスaddr2が設定される。修正情報３３は、命令c2から命令列２の2ステップ目の命令cを引いた差分が設定される。つまり、変換前プログラム４０の命令列５は、変換後プログラム４１のcall命令 (call2step, addr1, (c2-c)）（命令２）に置換される。
【００６５】
また、変換前プログラム４０の命令列６は、変換後プログラム４１のcall命令（call2step, addr1, (ｂ2-b)）（命令３）に変換される。他の場合も同様である。
【００６６】
ここで、図４に、マイクロプロセッサによる変換後プログラム４１の実行を説明するための説明図を示す。図４（ａ）に、変換後プログラム４１の構成を示す説明図を示す。図４（ｂ）に、マイクロプロセッサ１０の命令実行部１１で実行される命令を実行順に上から並べた説明図を示す。なお、セレクタ１６から内部バスインターフェイス１７に入力されるフェッチ対象となるメモリアドレス（フェッチ対象アドレス）も、図４（ｂ）にあわせて示す。
【００６７】
内部バスインターフェイス１７は、図４（ａ）の５０に示すメモリアドレス順で、それぞれのメモリアドレスに格納された変換後プログラム４１の命令を順次フェッチする。
【００６８】
図４（ａ）に示すように、addr1からaddr n-1までは、call命令３０は実行されない。通常動作時、マイクロプロセッサ１０は次のように動作する。
【００６９】
セレクタ１６は、擬似サブルーチン実行制御部１４からの指示に従って、プログラムカウンタ１２を選択し、プログラムカウンタ１２からの信号Ｓ１をアドレス信号Ｓ３として内部バスインターフェイス１７に出力する。尚、信号Ｓ１は、プログラムカウンタ１２のカウント値と等しい。従って、セレクタ１６から出力されるアドレス信号Ｓ３は、プログラムカウンタ１２のカウント値と等しい。内部バスインターフェイス１７は、セレクタ１６からのアドレス信号Ｓ３に基づいて、フェッチ対象の命令が格納されている命令メモリ２１の番地を特定し、特定された番地にある命令を命令メモリ２１から読み出す。
【００７０】
命令メモリ２１から読み出された命令は、命令修正部１５を介して、内部バスインターフェイス１７から命令実行部１１に転送される。このようにして、命令メモリ２１に格納された変換後プログラム４１は実行される。なお、プログラムカウンタ１２のカウント値は、命令がフェッチされる度に１づつ加算される。
【００７１】
図４（ａ）に示すように、addr nで最初のcall命令３０である命令１が実行される。内部バスインターフェイス１７は、命令メモリ２１から読み込んだ命令１を、命令修正部１５に出力する。命令修正部１５は、命令１をそのまま命令実行部１１に出力する。命令実行部１１は、命令修正部１５からの命令１を実行する。なお、上述のように、最初のcall命令３０である命令１のアドレスはaddr 1であり、修正情報は０である。
【００７２】
命令実行部１１は、call命令３０としての命令１を実行する。具体的には、命令実行部１１は、call命令３０のメモリアドレス情報３２をプログラムカウンタ１３に設定する。換言すると、プログラムカウンタ１３のカウント値をメモリアドレス情報３２に基づいて設定する。また、命令実行部１１は、call命令３０の修正情報３３を擬似サブルーチン実行制御部１４に転送する。このようにして、擬似サブルーチンの実行が開始される。なお、このような初期設定の後、命令実行部１１は、命令修正部１５から入力される命令を、通常通り実行する。
【００７３】
擬似サブルーチン実行制御部１４は、命令実行部１１から修正情報の入力を受けると、プログラムカウンタ１３からの信号Ｓ２をアドレス信号Ｓ３として出力するようにセレクタ１６を制御する。なお、この時点では、上述のように、プログラムカウンタ１３のカウント値は、call命令３０のメモリアドレス情報３２に基づいて設定されている。
【００７４】
なお、ここでは、上述のとおり、call命令３０のメモリアドレス情報３２はaddr 1が設定されており、フェッチ対象アドレスはaddr1となる。
【００７５】
内部バスインターフェイス１７は、命令メモリ２１のメモリアドレスaddr 1にある擬似サブルーチン１の１ステップ目の命令である命令aをフェッチして命令修正部１５に出力する。
【００７６】
プログラムカウンタ１３は、擬似サブルーチン実行中に命令をフェッチする度に１ずつ加算していく。なお、擬似サブルーチン実行中、プログラムカウンタ１２はメインルーチンの実行アドレスを保持する。つまり、擬似サブルーチン実行中、プログラムカウンタ１３は、アドレスaddr nの命令１をフェッチした際、アドレスaddr nに１が加算された値addr n+1を保持する。
【００７７】
擬似サブルーチン実行制御部１４は、擬似サブルーチン１の２ステップ目の命令である命令ｂのフェッチ時に、命令修正部１５に命令の修正情報とともに命令の修正指示を出力する。具体的には、擬似サブルーチン実行制御部１４は、命令ｂが命令修正部１５に入力される前、命令修正部に命令の修正情報を格納する。
【００７８】
通常動作時、命令修正部１５は、内部バスインターフェイス１７から入力される命令をそのまま命令実行部１１に出力している。命令修正部１５は、擬似サブルーチン実行制御部１４から命令の修正指示があると、命令に修正情報を加算し、命令実行部１１に修正した命令を出力する。
【００７９】
上述のように、命令１の修正情報は0である。従って、擬似サブルーチン１の２ステップ目の命令である命令ｂは、そのまま命令修正部１５から命令実行部１１に転送される。なお、擬似サブルーチンの２ステップ目の命令に対する修正情報の加算処理は修正情報の内容に関わらず行われる。
【００８０】
擬似サブルーチン実行制御部１４は、擬似サブルーチン１の２ステップ目の命令のフェッチが終了すると、プログラムカウンタ１２からの信号Ｓ１をアドレス信号Ｓ３として出力するようにセレクタ１６を制御する。上述のように、プログラムカウンタ１２は、擬似サブルーチンの実行中は、実行時の値ｎを保持している。従って、次のフェッチ対象となるメモリアドレスは、addr n+1となる。
【００８１】
内部バスインターフェイス１７は、命令メモリ２１のメモリアドレスaddr n+1から命令ｆをフェッチし、命令修正部１５を介して、命令実行部１１に転送する。このようにして、マイクロプロセッサ１０は、通常通り、変換後プログラム４１を実行する。
【００８２】
内部バスインターフェイス１７は、その後、図４（ｂ）に示すように、プログラムカウンタ１２のカウント値に基づいて、命令メモリ２１から命令を順次読み出す。そして、命令実行部１１は、内部バスインターフェイス１７から転送された命令を順次実行する。
【００８３】
図４（ｂ）に示すように、内部バスインターフェイス１７は、addr pで命令２を命令メモリ２１から読み出し、命令修正部１５を介して、命令実行部１１に転送する。
【００８４】
図２で説明したように、命令２のメモリアドレス情報３２はaddr2、修正情報３３はc2-cである。この場合も、上述の命令１の場合と同様に、マイクロプロセッサ１０は、擬似動作状態となり、フェッチ対象アドレスはaddr2に設定される。内部バスインターフェイス１７は、addr2のメモリアドレスの命令を命令メモリ２１から読み出し、命令修正部１５を介して命令実行部１１に出力する。
【００８５】
ここでは、修正情報３３はc2-cである。従って、命令修正部１５は、擬似サブルーチン実行制御部１４から修正情報３３の内容および修正指示を受けて、擬似サブルーチン２の２ステップ目の命令である命令cに修正情報を加算する。このようにして、命令修正部１５は、命令メモリ２１からの命令cを命令c2に変更し、変更された命令c2を命令実行部１１に出力する。
【００８６】
上述のとおり、修正情報は、命令列１の２ステップ目の命令と、命令列１に基づいて特定された命令列の２ステップの命令列の２ステップ目の命令との差分値である。従って、命令cに、修正情報である（c2-c）を加算すれば、図２（ａ）の命令列５の２ステップ目の命令である命令c2は復元される。
【００８７】
擬似サブルーチン２の２ステップ目の命令フェッチが終了すると、マイクロプロセッサ１０は通常の動作状態に戻る。
【００８８】
上述の説明から明らかなように、擬似サブルーチンは、call命令の実行により呼び出され、特定数のステップ分の命令を実行して自動的にメインルーチンに復帰する動作を意味する。
【００８９】
さらに命令３についても同様の動作で擬似サブルーチンの実行が行われる。命令３の場合、call命令３０のメモリアドレス情報３２はaddr１である。従って、呼び出される擬似サブルーチンは、擬似サブルーチン１である。なお、図４には示さないが、addr q+1以降でアドレスとしてaddr3を持つcall命令があれば擬似サブルーチン３が同様に実行される。
【００９０】
次に、擬似サブルーチン実行中の相対ジャンプの実行について説明する。
【００９１】
命令実行部１１は、擬似サブルーチン実行中に相対ジャンプ命令を認識した場合には、プログラムカウンタ１２に相対値を加算又は減算して新しいアドレスを設定し、擬似サブルーチン実行制御部１４に擬似サブルーチンの途中終了を指示する。
【００９２】
擬似サブルーチン実行制御部１４は、擬似サブルーチン実行中に命令実行部１１から擬似サブルーチンの途中終了の指示を受けた場合、予定された擬似サブルーチンの実行ステップ数に到達していなくても、セレクタ１６を操作して内部バスインターフェイス１７に送るアドレス信号Ｓ３を信号Ｓ１に設定し、擬似サブルーチンの実行を終了する。上述のようにプログラムカウンタ１２はメインルーチンのアドレスを保持しているため、それに対し相対値を加減算することで擬似サブルーチン実行中の相対ジャンプが実行される。
【００９３】
本実施形態においては、上述の説明から明らかなように、修正情報を含むcall命令３０を用いて、プログラムを圧縮する。従って、修正情報を新たな命令としてプログラムに組み込む必要はない。従って、ステップ数の小さな命令列においても、プログラム圧縮の効果を十分に享受できる。
【００９４】
また、call命令による擬似サブルーチン化は、一般的なサブルーチン化とは異なり、擬似サブルーチンで実行する命令ステップ数がcall命令により特定されているため、リターン命令を必要としない。そのため、プログラム中の任意の位置の連続命令をその位置に置いたまま擬似サブルーチンとすることができるため、擬似サブルーチンを設定するための特別なメモリ領域を必要としない。
【００９５】
さらに複数の擬似サブルーチンは重なりを持っても良く、別々の擬似サブルーチンで同一の命令列を重複して定義するような無駄も発生しない。従って定義メモリなどの特別な記憶装置を持つ必要が無く、マイクロプロセッサの回路規模の増大をほとんど伴わない。
【００９６】
なお、実装するcall命令のジャンプ先での実行ステップ数は２としたが３ステップ以上のステップ数を実行するcall命令を実装することももちろん可能である。またcall命令の修正情報３３は、分割して複数の命令修正に割り当てることももちろん可能である。
【００９７】
また本実施形態ではcall命令の解釈を命令実行部１１で行うとしているが、内部バスインターフェイス１７で行い、命令フェッチの時点でcall命令を実行することももちろん可能である。
【００９８】
また本実施形態では命令の修正を命令修正部１５で行うとしているが、内部バスインターフェイス１７で行い、命令フェッチの時点で命令を修正することももちろん可能である。
【００９９】
[第２の実施形態]
以下、図５、図６を用いて、第２の実施形態について説明する。図５は、call命令の説明図である。図６は、マイクロプロセッサによる変換後プログラムの実行を説明するための説明図である。なお、マイクロプロセッサの構成は、第１の実施形態と同様である。従って、以下の説明においては、適宜、図１も参照するものとする。
【０１００】
本実施形態では、第１の実施形態とは異なり、３以上の命令をcall命令に置き換えることで、プログラムの変換を実行する。このような場合であっても、第１の実施形態と同様に、プログラムの圧縮を図ることができる。
【０１０１】
図５に、本実施形態にかかるcall命令３０ａの構成図を示す。call命令３０ａは、マイクロプロセッサの命令語長ｎ／２ワード分の長さを持つ。call命令３０は、オペコード３１、メモリアドレス情報３２、修正情報３３に加えて、ステップ３４、追加修正情報３５を有する。なお、追加修正情報３５は、追加修正情報２〜ｎ−１の区分に分割される。なお、ｎは、図６で説明するように、命令列１１の列数に対応する。
【０１０２】
ステップ３４には、ジャンプ先での実行ステップ数を指定する情報が格納される。追加修正情報３５には、擬似サブルーチンの３ステップ目の命令からｎステップ目の命令に対応した修正情報が格納される。
【０１０３】
追加修正情報３５は、1ステップの命令につついて１／２ワードのビット幅を持つ。追加修正情報３５は、ステップ３４の値に従いビット数が可変される。但し、追加修正情報３５に、１ワードに満たないフィールドを付加することは、プログラムの列数の削減効率を劣化させるため、実行ステップ数ｎは２の倍数としてｎ／２を設定できるようにするのが好適である。なお、ｎ= 2 の場合、命令長は1ワードとなり、第１の実施形態のcall命令３０と同一の動作となる。
【０１０４】
次に、プログラムの変換について図６を用いて説明する。図６（ａ）に、変換前プログラム４０の構成を示す。図６（ｂ）に、変換後プログラム４１の構成を示す。なお、プログラム中に最初に現れるｎステップの命令列を命令列１１とする。
【０１０５】
図６（ｂ）に示すように、addr n+1以降に命令列１１と１ステップ目の命令が同一で、２ステップ目の命令からｎステップ目の命令が類似したｎステップの命令列があるかを検索する。
【０１０６】
１ステップ目の命令が同一で２ステップ目からｎステップ目までの命令が類似した命令列１２があるため、命令列１２を置換対象の命令列として特定する。そして、特定された命令列１２の２ステップ目からｎステップ目の命令と、これに対応する命令列１１の命令との差分情報を求める。ここでは、命令列１１と命令列１２の２ステップ目の命令は、共に命令ｂのため差分情報は０となる。３ステップ目はc2-cで、ｎステップ目はn'-nである。
【０１０７】
このように求めた全ての差分情報のビット数が、call命令３０ａの修正情報、追加修正情報のビット数内の場合、命令列１２をcall命令３０ａに置き換える。また、call命令３０ａの修正情報３３、追加修正情報３５には、求めた差分情報を修正情報として設定する。
【０１０８】
なお、call命令３０ａのオペコードは、ｎステップのcall命令を表す命令コード（以下callnstepと表記する）が設定される。call命令３０ａのステップは、ｎが設定される。call命令３０ａのアドレスは、命令列１１の先頭アドレスaddr１が設定される。call命令３０ａの修正情報としては、命令列１１の2ステップ目の命令ｂと命令列１２の２ステップ目の命令ｂとの差分情報が設定される（ここでは差分０なので０が設定される）。call命令３０ａの追加修正情報２は、３ステップ目の命令の差分情報である（c2-c）が設定される。call命令３０ａの（n'-n）追加修正情報n-1は、ｎステップ目の命令の差分情報である（n'-n）が設定される。
【０１０９】
このように生成されたcall命令３０ａが命令列１１と置き換えられる。つまり、変換前プログラム４０の命令列１２は、call命令（callnstep、n、addr1、０、c2-c、・・、n'-n）命令１１に置換される。
【０１１０】
なお、第１の実施形態と同様にそれ以降のプログラム内に命令列１１と類似の命令列を検索、置換しプログラム終端まで検索が完了すれば命令列１１について変換が完了する。
【０１１１】
さらに命令列の開始アドレスと検索の開始アドレスを繰り下げながら別のｎステップの命令列について検索、置換を実行する。ただし、最終ステップ以外に無条件ジャンプ命令を含む命令列、call命令を含む命令列については検索を行わない。このようにして、変換後プログラム４１が生成される。
【０１１２】
ｎステップ(ｎワード)の命令列がｎ／２ワードのcall命令３０ａに置き換えられることでプログラムの命令数（ステップ数）が削減される。
【０１１３】
次に、call命令を実行する際のマイクロプロセッサの動作を説明する。本実施形態においては、擬似サブルーチンの２ステップ目の動作をｎステップ目まで繰り返す点が第１の実施形態と異なる。
【０１１４】
命令実行部１１は、call命令３０ａの実行を開始すると、call命令３０ａのメモリアドレス情報３２の値をプログラムカウンタ１３に設定し、擬似サブルーチン実行制御部１４に実行ステップ数ｎと修正情報３３を転送する。続いて、命令実行部１１は、（ｎ／２）−１ワードの追加修正情報３５を命令メモリ２１から読み取る（但し、call命令３０ａのステップ３４は３以上であるものとする）。そして、命令実行部１１は、命令メモリ２１から読み出した追加修正情報３５を、擬似サブルーチン実行制御部１４に転送する。全ての修正情報の転送が完了した時点で、命令実行部１１は、擬似サブルーチン実行制御部１４に擬似サブルーチンの実行開始を指示し、通常命令の解釈、実行に戻る。
【０１１５】
擬似サブルーチン実行制御部１４は、命令実行部１１から擬似サブルーチン実行開始の指示を受けると、プログラムカウンタ１３からの信号Ｓ２を、アドレス信号Ｓ３として内部バスインターフェイス１７に出力するようにセレクタ１６を制御する。また、擬似サブルーチン実行制御部１４は、命令フェッチ数のカウントを開始する。
【０１１６】
このようにして、フェッチ対象のメモリアドレスは、プログラムカウンタ１３のカウント値に切り替わる。そして、内部バスインターフェイス１７は、擬似サブルーチンの命令をフェッチし、命令修正部１５に転送する。
【０１１７】
擬似サブルーチン実行制御部１４は、擬似サブルーチンの２ステップ目の命令をフェッチする時に、予め命令修正部１５に命令の修正情報３３、修正指示を出力する。
【０１１８】
本実施形態では、擬似サブルーチンは、ｎステップの命令列を有する（但し、ｎは３以上の整数）。従って、擬似サブルーチン実行制御部１４は、３ステップ目以降の命令のフェッチ時、予め命令メモリ２１から命令修正部１５に追加修正情報３５を順次出力させ、修正指示を継続する。
【０１１９】
擬似サブルーチン実行制御部１４は、命令のフェッチ数がｎに達した場合、プログラムカウンタ１２からの信号Ｓ１をアドレス信号Ｓ３として内部バスインターフェイス１７に出力するようにセレクタ１６を制御する。これにより、擬似サブルーチンの実行が終了し、CPU１１３は、メインルーチンの実行に戻る。
【０１２０】
call命令３０ａの実行ステップ数には、追加修正情報３５の読み取りステップが追加される。従って、call命令３０ａの実行ステップ数は、実行ステップ数ｎに比例して増加する。しかし、追加修正情報３５を含めたcall命令３０ａのワード数は、実行しようとする擬似サブルーチンの実行ステップ数の１／２に固定されている。従って、実行時間の増加比率は擬似サブルーチンの長さに関わらず一定となる。
【０１２１】
以上説明したように、本実施形態では、３以上の命令列をcall命令に圧縮する。換言すると、３以上の命令列の擬似サブルーチン化が可能である。追加修正情報の段数は、擬似サブルーチン化する命令列の段数に比例する。従って、擬似サブルーチンの命令の列数が増加してもプログラム変換率が劣化することは無い。また、call命令の実行ステップ数の増加も擬似サブルーチンのステップ数と比例している。従って、擬似サブルーチンのステップ数による変換率、実行時間の変動が無い。
【０１２２】
また本実施形態では、１つのcall命令により擬似サブルーチンの実行ステップ数を２ステップ刻みの任意の長さに指定でき自由度が向上する。さらに変換率や動作速度の劣化が擬似サブルーチンの長さや修正量に左右されないことは、事前に変換後プログラムサイズや性能劣化を容易に予測できる、という効用もある。
【０１２３】
なお、特許文献１の場合、修正の実行に伴って追加的なステップの実行が必要となる。従って、プログラムの実行に要する時間が増大する。命令セットの命令ステップ数が小さい場合、命令セットのステップ数に対して命令の修正に要するステップ数の比率が大きくなり、実行時間の大幅な増大を招いてしまう。また、特許文献１の場合、汎用性を持たせるため、ある程度の定義数を用意する必要がある。同様に、ある程度のステップ数を用意する必要がある。このため、マイクロプロセッサの回路規模を著しく増大させてしまう。上述の実施形態によれば、これらの点も回避することができる。
【図面の簡単な説明】
【０１２４】
【図１】マイクロプロセッサの概略的なブロック図である。
【図２】プログラムの変換を説明するための説明図である。
【図３】call命令の説明図である。
【図４】マイクロプロセッサによる変換後プログラムの実行を説明するための説明図である。
【図５】call命令の説明図である。
【図６】マイクロプロセッサによる変換後プログラムの実行を説明するための説明図である。
【図７】従来のマイクロプロセッサのブロック図である。
【図８】従来のマイクロプロセッサのマクロ命令の構成を示す説明図である。
【図９】従来のマイクロプロセッサにおける修正を説明するための説明図である。
【符号の説明】
【０１２５】
１０    マイクロプロセッサ
１１    命令実行部
１２    プログラムカウンタ
１３    プログラムカウンタ
１４    擬似サブルーチン実行制御部
１５    命令修正部
１６    セレクタ
１７    内部バスインターフェイス
１８    演算部
１９    レジスタ
２０    内部バス
２１    命令メモリ
２２    データメモリ
３２    メモリアドレス情報
３３    修正情報
３４    ステップ
３５    追加修正情報
４０    変換前プログラム
４１    変換後プログラム
【図１】
2008269052.tif 000003
【図２】
2008269052.tif 000004
【図３】
2008269052.tif 000005
【図４】
2008269052.tif 000006
【図５】
2008269052.tif 000007
【図６】
2008269052.tif 000008
【図７】
2008269052.tif 000009
【図８】
2008269052.tif 000010
【図９】
2008269052.tif 000011