(57)【特許請求の範囲】
【請求項１】
実行プログラムがデコードされる前に、実行プログラムに含まれる圧縮命令を伸長して元の伸長命令列に戻す命令伸長手段と、
定義された圧縮命令が前記命令伸長手段により伸長されるように、圧縮伸長対応表に基づいて前記命令伸長手段を再構成する再構成手段と、
実行プログラムの中から伸長命令列のパターンの出現頻度を検出する命令列頻度検出手段と、
前記命令列頻度検出手段によって検出された頻度に基づいて圧縮する伸長命令列を選択し、選択した伸長命令列の圧縮命令を定義し、伸長命令列と定義された圧縮命令との対応関係を表す圧縮伸長対応表を作成する圧縮命令定義手段と、
前記圧縮命令定義手段により作成された圧縮伸長対応表に基づいて、実行プログラム中に含まれる伸長命令列を圧縮命令に変換する変換手段と、
圧縮しようとする命令列（伸長命令列）のパターンならびに該伸長命令列を圧縮した際の圧縮命令のフォーマットが予め登録された命令列パターンテンプレートと、を有し、
前記命令列頻度検出手段は、前記命令列パターンテンプレートを参照して、実行プログラムの中から前記命令列パターンテンプレートに登録された伸長命令列のパターンの出現頻度を検出し、
前記圧縮命令定義手段は、前記命令列頻度検出手段によって検出された頻度に基づいて圧縮する伸長命令列を選択し、選択した伸長命令列の圧縮命令を定義し、前記命令列パターンテンプレートを参照して伸長命令列と定義された圧縮命令との対応関係を表す圧縮伸長対応表を作成することを特徴とする情報処理装置。
【請求項２】
前記命令列頻度検出手段は、被検出伸長命令列に含まれる命令のフィールド値を実行プログラムの実行結果が変わらないという条件の下で変更し、前記被検出伸長命令列が前記被検出伸長命令列の検出以前に既に検出された既検出伸長命令列と一致する場合は、前記被検出伸長命令列を前記既検出伸長命令列と同じ伸長命令列として頻度を求め、及び／又は被検出伸長命令列に含まれる命令の前記被検出伸長命令列中の配置順序を実行プログラムの実行結果が変わらないという条件の下で変更し、前記被検出伸長命令列が前記被検出伸長命令列の検出以前に既に検出された既検出伸長命令列と一致する場合は、前記被検出伸長命令列を前記既検出伸長命令列と同じ伸長命令列として頻度を求めることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記再構成手段は、デコードされた命令を実行する命令実行手段に含まれていることを特徴とする請求項１又は２記載の情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、実行プログラム内の命令コードに応じて圧縮命令を伸長する命令伸長部が最適化された情報処理装置に関する。
【０００２】
【従来の技術】
プロセッサ組み込み機器においては、プロセッサの命令メモリサイズは、機器のコストを左右する。命令メモリサイズが少ないほどコスト的に有利になる。そこで、命令メモリサイズを小さくするための方法の一つに、命令圧縮及び伸長の技術がある。
【０００３】
圧縮されていない命令の場合、アドレスレジスタにより指定されてメモリ部から読み出された命令は、命令レジスタに保持された後、マルチプレクサを介して命令デコード部に与えられてデコードされる。
【０００４】
一方、圧縮されている命令の場合、メモリ部から読み出されて命令レジスタに保持された圧縮命令は、命令伸長部により伸長された後、マルチプレクサを介して命令デコード部に与えられてデコードされる。
【０００５】
文献「“Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｏｐｔｉｍｉｚａｔｉｏｎ  Ｍａｎｕａｌ”，１９９７，  Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ  」によれば、この文献に記載されているプロセッサでは、命令メモリに格納されている“ｍａｃｒｏ−ｉｎｓｔｒｕｃｔｉｏｎ”が一般に複数の“ｍｉｃｒｏ−ｏｐｓ”に伸長された上で実行されるとある。また、文献「“ＴＭＳ３２０Ｃ３ｘ  Ｕｓｅｒ’ｓ  Ｇｕｉｄｅ”，１９９７，  ＴＥＸＡＳ  ＩＮＳＴＲＵＭＥＮＴＳ」によれば、例えば“ＭＰＹＩ３｜｜ＡＤＤＩＹ３”という命令は、レジスタフィールドで指定できるレジスタ番号の範囲を制約するなど使い方を制約することで、“ＭＰＹＩ３”という命令と“ＡＤＤＩＹ３”  という２つの命令が圧縮された形で定義されている。
【０００６】
【発明が解決しようとする課題】
このような圧縮命令は、そもそも多くのアプリケーションの命令コードにしばしば出現する連続した命令列を圧縮したものであるといえる。しかし実際には、アプリケーションは多種多様であり、あるプロセッサで定義された圧縮命令群は、特定のアプリケーション群に対しては有効であっても、別のアプリケーション群に対しては有効ではない場合も多かった。
【０００７】
そこで、アプリケーション毎に圧縮命令が最適化されたプロセッサを用いることが考えられるが、アプリケーションによって使うプロセッサを変更するのでは効率が極めて悪い。それは、プロセッサの変更の度にプロセッサの基本アーキテクチャや開発環境の理解を必要とするからである。一方、ユーザの必要とする圧縮命令をサポートしているプロセッサがないといった場合も多い。これは、ある程度大きな出荷数を見込めるアプリケーションに適した圧縮命令しかサポートしていないプロセッサが多いためである。
【０００８】
以上説明したように、従来の情報処理装置にあって、圧縮命令はそれぞれの装置毎に固定的に決められていた。そのため、この装置によって実行されるあるアプリケーションプログラムにおいては、定義された圧縮命令は有効に作用するが、別なアプリケーションプログラムにあっては定義された圧縮命令は有効に機能しない場合があった。このような場合には、圧縮命令を使用した十分な効果が得られないといった不具合を招いていた。
【０００９】
そこでこの発明の目的は、実行プログラム中の命令数の削減を可能とし、実行プログラムの記憶領域の小型化を達成する情報処理装置を提供することにある。
【００１０】
【課題を解決するための手段】
本発明の特徴は、情報処理装置であって、圧縮命令及び非圧縮命令を保持することが可能な命令レジスタと、前記命令レジスタから圧縮命令を受け取り、伸長して複数の伸長命令からなる伸長命令列に戻し、前記複数の伸長命令を少なくとも１クロックサイクルずつずらして順次出力することが可能な命令伸長手段と、前記命令レジスタから前記圧縮命令を受け取り、前記命令伸長手段から前記複数の伸長命令を受け取った場合に、前記圧縮命令ではなく前記複数の伸長命令を出力することが可能で、かつ前記命令レジスタから前記非圧縮命令を受け取った場合は、この非圧縮命令を出力可能な命令選択手段と、定義された圧縮命令が前記命令伸長手段により伸長されるように、圧縮伸長対応表に基づいて前記命令伸長手段を再構成する再構成手段と、を有することにある。
【００１１】
この発明によれば、プログラム毎に命令伸長手段を再構成するようにしたので、各プログラムの内容に応じて命令数を削減することが可能となり、プログラムを格納する記憶領域の小型化を達成することができる。
【００１２】
【発明の実施の形態】
以下、図面を用いてこの発明の実施形態を説明する。
【００１３】
（第１実施形態）
まず、図１〜８に基づいて第１実施形態を説明する。
【００１４】
図１は第１の実施形態に係る情報処理装置の構成を示す図である。図１において、この実施形態の情報処理装置は、プロセッサ１５１ならびに命令伸長部再構成手段９を備える。プロセッサ１５１は、アドレスレジスタ１００、命令レジスタ１０２、マルチプレクサ１０４、命令キャッシュ１０５、命令デコード部１２と、命令デコード部１２でデコードされた命令を実行する命令実行部１３ならびに命令伸長部１４を含む。
【００１５】
命令伸長部再構成手段９には、圧縮伸長対応表７が入力される。命令伸長部再構成手段９は、圧縮伸長対応表７に基づいて、命令伸長部１４を再構成する。
【００１６】
図２に圧縮伸長対応表７の一例を示す。
【００１７】
メインメモリ１０１には、圧縮済み実行オブジェクト１１０が入力される。
【００１８】
図３に、圧縮済み実行オブジェクト１１０の内容をアセンブラ言語で表した場合の一例を示す。
【００１９】
命令伸長部１４は、圧縮命令を伸長して元の伸長命令列に変換するものであり、外部から変更可能に構成されており、例えば、プロセッサ１５１が物理的に実装されたものである場合には、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ  （ＦＰＧＡ）やＰｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ａｒｒａｙなどで構成され、あるいはプロセッサ１５１が各種Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇａｇｅ  （ＨＤＬ）、各種ＣＡＤ用記述言語やＮｅｔｌｉｓｔ、及びそれらに対する制約条件、各種設定ファイルで定義されている場合には、命令伸長部１４の構成（記述）そのものが変更可能な形で定義されていると捉えることができる。
【００２０】
図４及び図５に、命令伸長部１４をＨＤＬにより定義する場合の一例を示す。同図は、Ｖｅｒｉｌｏｇという一般的なＨＤＬ記述による例である。また、同図は、図２に示す２命令で１組の圧縮命令を２つ定義できる場合の例である。
【００２１】
図６に示す内容のファイルを作成し、そのファイルの名前を図４の３行目でインクルードしている”ｃｏｍｐｒｅｓｓ＿ｅｘｐａｎｄ＿ｔａｂｌｅ”として、図４及び図５と一緒に合成すれば、命令伸長部１４が構成される。
【００２２】
命令伸長部再構成手段９は、図４及び図５に示すファイルが参照する図６に示すファイルを書き換えることにより命令伸長部１４を再構成することができる。
【００２３】
また、図４及び図５に示す記述そのものを書き換えることにより命令伸長部１４を再構成しても良い。つまり、プロセッサ１５１全体の構成を規定しているＨＤＬ記述の中で、図４及び図５に示す”ｍｏｄｕｌｅ  ｅｘｐａｎｄｅｒ”が参照されているならば、参照されている”ｍｏｄｕｌｅ  ｅｘｐａｎｄｅｒ”を命令伸長部１４とみなし、参照されている”ｍｏｄｕｌｅ  ｅｘｐａｎｄｅｒ”全部を生成することを命令伸長部１４の再構成とみなすことができる。
【００２４】
次に、命令伸長部１４をＦＰＧＡにより構成する場合について説明する。
【００２５】
ＦＰＧＡは、内部にセルを複数持っていて、各セルは，複数のＦ／Ｆ（フリップフロップ）と、ロジックの代わりになるスイッチの集まりにより構成されている。そして、碁盤目上にならんだセルとセルの間（碁盤の黒い線の部分）に配線が通っていて、それとセルがどう接続するかに関して、スイッチが付加されている。これらの構成をどう決めるかについての情報を、パケットの形で流し込むと、電源が供給されている限り、その状態を保持する。つまり、あるパケットは、あるセル内の（ロジックになる）スイッチの状態を決め、あるパケットは、あるセルとある配線との接続スイッチの状態を決め、全部決め終わるとそれを保持する。
【００２６】
本発明では、たとえば、上記ｐａｒａｍｅｔｅｒ記述部分を実現するＦＰＧＡ部分を、同一プロセッサ内に混載し、且つ、パケットを流し込む端子を、チップのＩ／Ｏとして確保することで、実現することができる。
【００２７】
次に圧縮命令の伸長を、図７及び図８に基づいて説明する。
【００２８】
図７は、第１実施形態におけるアドレスレジスタ１００と、メインメモリ１０１と、命令レジスタ１０２と、マルチプレクサ１０４と、命令キャッシュ１０５と、命令デコード部１２、命令実行部１３と、命令伸長部１４との接続関係を示す図である。
【００２９】
図７において、アドレスレジスタ１００により指定されて命令キャッシュ１０５又はメインメモリ１０１から読み出される命令は、非圧縮命令又は圧縮命令のいずれかである。非圧縮命令が読み出された場合、その非圧縮命令は、命令レジスタ１０２に保持された後、マルチプレクサ１０４を介して命令デコード部１２に与えられてデコードされる。一方、圧縮命令が読み出された場合、その圧縮命令は、命令レジスタ１０２に保持され、命令伸長部１４により伸長された後、マルチプレクサ１０４を介して命令デコード部１２に与えられてデコードされる。
【００３０】
図８は、非圧縮命令と圧縮命令を読み込み、これらをデコードする際の動作タイミングチャートである。
図８に示すように、命令伸長部１４は、例えば圧縮命令Ｂを伸長して命令ｂ１，ｂ２，ｂ３を出力するとともに、命令デコード部１２へ各クロック信号で入力される命令が、図８に示すように命令Ａ，ｂ１，ｂ２，ｂ３という順序になるように、圧縮命令Ｂと伸長命令ｂ１をマルチプレクサ１０４で選択するための選択制御信号を生成し、また命令ｂ１，ｂ２，ｂ３の命令を命令デコード部１２へ供給した後に、圧縮命令Ｂの後の非圧縮命令Ｃが供給されるようアドレスレジスタ１００の値を保持する保持信号を生成する。
【００３１】
圧縮命令Ｂを被圧縮命令ｂ１，ｂ２，ｂ３に伸長し、図８に示すように順次供給するには、命令ｂ１はそのまま出力し、命令ｂ２は１つのフリップフロップを経由後に出力し、命令ｂ３は２つのフリップフロップを経由後に出力するように制御される。
【００３２】
上記の如く第１実施形態においては、圧縮伸長対応表７に基づいて命令伸長部再構成手段９が命令伸長部１４を再構成し、再構成された命令伸長部１４が圧縮済み実行オブジェクト１１０中の圧縮命令を伸長し、伸長された命令列が命令デコード部１２でデコードされ、命令実行部１３で実行される。
【００３３】
そして、圧縮済み実行オブジェクト１１０が、別の新たな圧縮済み実行オブジェクトに交換されたら、その新たな圧縮済み実行オブジェクト中に存在する新たな圧縮命令とその新たな圧縮命令に対応する伸長命令との関係を規定した新たな圧縮伸長対応表に基づいて命令伸長部再構成手段９が、命令伸長部１４を再構成する。そして、再構成された命令伸長部１４が新たな圧縮済み実行オブジェクト中の新たな圧縮命令を伸長し、伸長された命令列が命令デコード部１２でデコードされ、命令実行部１３で実行される。
【００３４】
このように第１実施形態においては、実行プログラム毎に命令伸長部が最適に構成されるので、それぞれの実行プログラムの内容に応じて命令数を削減することが可能となり、これにより実行プログラムを格納するメインメモリ１０１の容量を低減して小型化することができる。
【００３５】
なお、第１実施形態においては、プロセッサの外のメインメモリ１０１から、命令キャッシュ１０５及び命令レジスタ１０２を経て、命令伸長部１４へ圧縮命令が入力されるが、下記の様な態様でも良い。
【００３６】
プロセッサの外のメインメモリから、プロセッサの中の命令レジスタを経て、命令伸長部に入力する。
【００３７】
プロセッサの外のＲＯＭから、プロセッサの中の命令レジスタを経て、命令伸長部に入力する。
【００３８】
プロセッサの外のメインメモリから、プロセッサの中の命令用ＳＲＡＭ及び命令レジスタを経て、命令伸長部に入力する。
【００３９】
プロセッサの外のＲＯＭから、プロセッサの中の命令キャッシュ及び命令レジスタを経て、命令伸長部に入力する。
【００４０】
プロセッサの外のＲＯＭから、プロセッサの中の命令用ＳＲＡＭ及び命令レジスタを経て、命令伸長部に入力する。
【００４１】
プロセッサの中のＲＯＭから、命令レジスタを経て、命令伸長部に入力する。
【００４２】
通常、命令用ＳＲＡＭは、アドレスの領域を２つのバンクに分け、メインメモリからＳＲＡＭバンク１へのプログラムのダイレクトメモリアクセス転送と、既に転送されているＳＲＡＭバンク２から命令レジスタを通して命令伸長部への命令の供給とを同時に行う。ＳＲＡＭバンク２の命令を使い切ると、バンクが切り替わって、つまりダイレクトメモリアクセスや命令レジスタのアクセスするアドレス領域が変わって、同様の動作が行われる。
【００４３】
（第２実施形態）
次に、図９に基づいて第２実施形態を説明する。
【００４４】
同図に示すように、第２実施形態が第１実施形態と相違する点は、命令実行部２２が、図１に示す命令伸長部再構成手段９の機能を兼ね備え、圧縮伸長対応表７を参照して命令伸長部１４を再構成するようにしたことであり、他は第１実施形態と同様である。
【００４５】
命令実行部２２が、圧縮伸長対応表７を参照する方法としては、１）圧縮伸長対応表７の全てあるいは一部をオペランドとして持つ命令を定義して、それら定義され更に圧縮済み実行オブジェクト１１０に埋め込まれた、一つまたは複数の命令の組で命令伸長部再構成手段９を提供する、図９に示す方法や、２）メインメモリ１０１やプロセッサ内のデータ用ＳＲＡＭ上に圧縮伸長対応表７を置いて、命令実行部２２が、ｌｏａｄ命令などを用いてこれを参照する方法や、３）命令実行部２２自体に、圧縮伸長対応表７を内蔵してしまう方法などがある。
【００４６】
命令実行部２２自体に、圧縮伸長対応表７を内蔵してしまうには、命令伸長部１４を再構成するのと同様の手段を用いる。
【００４７】
このような第２実施形態においても、第１実施形態と同様の効果が得られる。
【００４８】
（第３実施形態）
次に、図１０〜１３に基づいて第３実施形態を説明する。
【００４９】
図１０は、第３実施形態の全体構成を示す図である。第３実施形態は、命令頻度検出手段４０１及び圧縮命令定義手段６０１を用いて圧縮伸長対応表７を作成し、オブジェクト変換手段８０１を用いて圧縮済み実行オブジェクト１１１を作成する点が、第１実施形態と相違する。
図１１は、アセンブラソースファイル２０３及び命令列頻度データ５０１の内容を示す図である。同図に基づいて、命令列頻度検出手段４０１を説明する。
【００５０】
命令列頻度検出手段４０１は、アセンブラソースファイル２０３の命令列を２命令ごとに比較して命令列の出現頻度を求め、命令列頻度データ５０１を得る。
【００５１】
例えば、アセンブラソースファイル２０３の
１行目の命令
ｓｌｌ  ｒ２，  ｒ２，  １６
と、２行目の命令
ｌｗ  ｒ３，  ０（ｒ２）
から命令列
ｓｌｌ  ｒ２，  ｒ２，  １６
ｌｗ  ｒ３，  ０（２）
の頻度＝１とカウントする。
【００５２】
同様に、２行目の命令
ｌｗ  ｒ３，  ０（ｒ２）
と、３行目の命令
ｌｗ  ｒ３，  ０（５）
から命令列
ｌｗ  ｒ３，  ０（ｒ２）
ｌｗ  ｒ３，  ０（５）
の頻度＝１とカウントする。同様にして、３行目と４行目、４行目と５行目についても命令列の頻度をカウントする。
【００５３】
そして、５行目の命令
ｓｌｌ  ｒ２，  ｒ２，  １６
は１行目の命令と同じであり、６行目の命令
ｌｗ  ｒ３，  ０（ｒ２）
も２行目の命令と同じであるから、５行目と６行目の命令列は、１行目と２行目の命令列と同じである。よって命令列
ｓｌｌ  ｒ２，  ｒ２，  １６
ｌｗ  ｒ３，  ０（２）
の頻度＝２とカウントする。
【００５４】
このようにして、命令列頻度データ５０１を作成する。そして、命令列
ｓｌｌ  ｒ２，  ｒ２，  １６
ｌｗ  ｒ３，  ０（ｒ２）
に対して、ｃｏｍｐｌｅｓｓ＿ｉｎｓｔ＿０  ｒ２，  ｒ３という圧縮命令名を付け、圧縮伸長対応表７を作成する。
【００５５】
図１２に圧縮伸長対応表７の一例を示す。この圧縮伸長対応表７に基づいてアセンブラソースファイルを圧縮して圧縮済みアセンブラソースファイルを作成する。図１３に圧縮済みアセンブラソースファイルの一例を示す。
【００５６】
次に、図１４〜１７に基づいて、命令列頻度検出手段４０１の変形例について説明する。
【００５７】
命令列頻度検出手段４０１は、被検出伸長命令列に含まれる命令のフィールド値を実行プログラムの実行結果が変わらないという条件の下で変更し、被検出伸長命令列が被検出伸長命令列の検出以前に既に検出された既検出伸長命令列と一致する場合は、被検出伸長命令列を既検出伸長命令列と同じ伸長命令列として頻度を求めるようにしてもよい。
【００５８】
図１４に基づいて具体的に説明する。アセンブラソースファイル２０の１行目と２行目を比較する際、１行目に現れた２つのレジスタｒ２と、２行目に現れた１つのレジスタｒ２とをいずれもｒＡとし、２行目に現れたレジスタｒ３をｒＢとする。そして、１行目の命令
ｓｌｌ  ｒ２，  ｒ２，１６
と、２行目の命令
ｌｗ  ｒ３，  ０（ｒ２）
の命令列
ｓｌｌ  ｒＡ，  ｒＡ，  １６
ｌｗ  ｒＢ，  ０（ｒＡ）
を、頻度＝１とカウントする。
【００５９】
同様に、５行目の命令と６行目の命令も、命令列
ｓｌｌ  ｒＡ，  ｒＡ，  １６
ｌｗ  ｒＢ，  ０（ｒＡ）
となるので、この命令列の頻度＝２とカウントする。
【００６０】
さらに、８行目のレジスタｒ９と、９行目のレジスタｒ９とをいずれもｒＡとし、９行目のレジスタｒ３をｒＢとすると、８行目の命令
ｓｌｌ  ｒ９，  ｒ９，  １６
と、９行目の命令
ｌｗ  ｒ３，  ０（ｒ９）
の命令列も
ｓｌｌ  ｒＡ，  ｒＡ，  １６
ｌｗ  ｒＢ，  ０（ｒＡ）
となるので、頻度＝３とカウントする。
【００６１】
また、６行目の命令
ｌｗ  ｒ３，  ０（ｒ２）
と、７行目の命令
ａｄｄｕ  ｒ３，  ｒ３，  ｒ２
の命令列、及び
９行目の命令
ｌｗ  ｒ３，  ０（ｒ９）
と、１０行目の命令
ａｄｄｕ  ｒ３，  ｒ３，  ｒ９
の命令列は、ともに
ｌｗ  ｒＡ，  ０（ｒＢ）
ａｄｄｕ  ｒＡ，  ｒＡ，  ｒＢ
となるので、頻度＝２とカウントする。
【００６２】
また、１１行目の命令
ｍｕｌｔ  ｒ４，  ｒ７，  ｒ４
と、１２行目の命令
ｓｒａ  ｒ４，  ｒ４，  １５
の命令列、及び
１５行目の命令
ｍｕｌｔ  ｒ３，  ｒ７，  ｒ３
と、１６行目の命令
ｓｒａ  ｒ３，  ｒ３，  １５
の命令列は、ともに
ｍｕｌｔ  ｒＡ，  ｒＢ，  ｒＡ
ｓｒａ  ｒＡ，  ｒＡ，  １５
となるので、頻度＝２とカウントする。その他の命令列は頻度＝１である。このようにして図１４の命令列頻度データ５０２を得る。
【００６３】
この結果、図１５に示す２つの命令列
ｓｌｌ  ｒＡ，  ｒＡ，  １６
ｌｗ  ｒＢ，  ０（ｒＡ）
と
ｍｕｌｔ  ｒＡ，  ｒＢ，  ｒＡ
ｓｒａ  ｒＡ，  ｒＡ，  １５
及び、図１６に示す１つの命令列
ｌｗ  ｒＡ，  ０（ｒＢ）
ａｄｄｕ  ｒＡ，  ｒＡ，  ｒＢ
が圧縮命令の候補になる。
【００６４】
圧縮命令を定義する条件を頻度＝２以上とした場合は、上記３つ全てに対して圧縮命令を定義しうる。圧縮命令を定義する条件を頻度＝３以上とした場合は、命令列
ｓｌｌ  ｒＡ，  ｒＡ，  １６
ｌｗ  ｒＢ，  ０（ｒＡ）
のみに圧縮命令を定義する。圧縮命令は、他の圧縮命令と区別できればよいので、例えば
ｃｏｍｐｌｅｓｓ＿ｉｎｓｔ＿１  ｒＡ，  ｒＢ  ＝  ｛ｓｌｌ  ｒＡ，  ｒＡ，  １６  ；  ｌｗ  ｒＢ，  ０（ｒＡ）｝
ｃｏｍｐｌｅｓｓ＿ｉｎｓｔ＿２  ｒＡ，  ｒＢ  ＝  ｛ｌｗ  ｒＡ，  ０（ｒＢ）  ；  ａｄｄｕ  ｒＡ，  ｒＡ，  ｒＢ｝
ｃｏｍｐｌｅｓｓ＿ｉｎｓｔ＿３  ｒＡ，  ｒＢ  ＝  ｛ｍｕｌｔ  ｒＡ，  ｒＢ，  ｒＡ  ；  ｓｒａ  ｒＡ，  ｒＡ，  １５｝
というように定義すればよい。
【００６５】
なお、圧縮命令定義手段６０１は、複数の圧縮命令の候補に含まれる命令が存在する場合、検出頻度によって、実際に定義する圧縮命令を選択する必要がある。
【００６６】
具体的には、９行目の命令
ｌｗ  ｒ３，  ０（ｒ９）
は、２つの圧縮命令の候補
ｃｏｍｐｌｅｓｓ＿ｉｎｓｔ＿１  ｒＡ，  ｒＢ  ＝  ｛ｓｌｌ  ｒＡ，  ｒＡ，  １６  ；  ｌｗ  ｒＢ，  ０（ｒＡ）｝
ｃｏｍｐｌｅｓｓ＿ｉｎｓｔ＿２  ｒＡ，  ｒＢ  ＝  ｛ｌｗ  ｒＡ，  ０（ｒＢ）  ；  ａｄｄｕ  ｒＡ，  ｒＡ，  ｒＢ｝
に含まれてしまうので、検出頻度が大きい
ｃｏｍｐｌｅｓｓ＿ｉｎｓｔ＿１  ｒＡ，  ｒＢ  ＝  ｛ｓｌｌ  ｒＡ，  ｒＡ，  １６  ；  ｌｗ  ｒＢ，  ０（ｒＡ）｝
を定義する圧縮命令として選択し、
ｃｏｍｐｌｅｓｓ＿ｉｎｓｔ＿２  ｒＡ，  ｒＢ  ＝  ｛ｌｗ  ｒＡ，  ０（ｒＢ）  ；  ａｄｄｕ  ｒＡ，  ｒＡ，  ｒＢ｝
は定義する圧縮命令として選択しない。
【００６７】
図１５に示す圧縮伸長対応表７を用いて、図１４に示すアセンブラソースファイル２０４を圧縮した圧縮済みアセンブラソースファイルを図１７に示す。
【００６８】
また、伸長命令列に含まれる命令のビット幅と伸長命令列を圧縮した圧縮命令のビット幅は同一となるように圧縮命令のフォーマットを設定することが好ましい。
【００６９】
ビット幅を同一にすることにより以下の効果が得られる。ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）プロセッサでは、一つには、ＣＩＳＣ（Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）プロセッサに比べ命令フェッチと命令デコードを簡単化することで、高速化（つまり、周波数の向上）を実現している。この簡単化のための手段の一つとして、命令のビット幅の固定化がある。これにより、特別な操作なしに、命令レジスタの常に同じ場所から、命令コードやレジスタ番号を参照することが可能になるので、当該操作にかかる時間が必要ない分、高速化が可能になる。そして、本発明は、命令列の圧縮に関するものであり、場合によっては、圧縮後の命令のビット幅を被圧縮命令より短くすることも考えられるが、アプリケーションの要求仕様によっては、上記のような高速化とのトレードオフを考慮して、敢えて、短くしない方がよい。
【００７０】
また、命令列頻度検出手段４０１は、被検出伸長命令列に含まれる命令の被検出伸長命令列中の配置順序を実行プログラムの実行結果が変わらないという条件の下で変更し、被検出伸長命令列が被検出伸長命令列の検出以前に既に検出された既検出伸長命令列と一致する場合は、被検出伸長命令列を既検出伸長命令列と同じ伸長命令列として頻度を求めるようにしてもよい。
【００７１】
例えば、命令列
ａｄｄｕ  ｒ１，ｒ２，ｒ３
ａｄｄｕ  ｒ４，ｒ５，ｒ６
と、命令列
ａｄｄｕ  ｒ４，ｒ５，ｒ６
ａｄｄｕ  ｒ１，ｒ２，ｒ３
等である。
【００７２】
第３実施形態においても、第１実施形態と同様の効果が得られる。また、命令列頻度検出手段４０１と、圧縮命令定義手段６０１とを用いて、実行プログラム毎に最適な圧縮伸長対応表７を迅速、容易に作成することができる。さらに、圧縮伸長対応表７を用いて実行プログラム毎に最適な圧縮済み実行プログラム１０を迅速、容易に作成することができる。
【００７３】
（第４実施形態）
次に、図１８〜２０に基づいて、第４実施形態を説明する。
【００７４】
図１８は、第４実施形態にかかる情報処理装置の構成を示す図である。第４実施形態は、命令頻度検出手段４０３が命令列パターンテンプレート３を用いて命令列頻度データ５０３を作成する点が、第３実施形態と相違する。
【００７５】
命令列パターンテンプレート３は、プロセッサ１５１で実行できる命令セットにおいて圧縮しようとする命令列（伸長命令列）と圧縮命令のパターン、ならびに伸長命令列を圧縮した際の圧縮命令のフォーマットが予め登録されているテンプレートである。圧縮命令は他に定義された圧縮命令と区別できればよいので、例えば圧縮命令１、圧縮命令２……といったように割り付けるようにすればよい。また、伸長命令列に含まれる命令のビット幅と伸長命令列を圧縮した圧縮命令のビット幅は同一となるように圧縮命令のフォーマットを設定するようにしてもよい。
【００７６】
命令列頻度検出手段４０３は、命令列パターンテンプレート３を参照し、プロセッサ１５１で実行しようとするソースプログラムとなる実行オブジェクト２の命令列と命令列パターンテンプレート３に登録されている命令列パターンをパターンマッチングにより比較して命令列パターンを検出しその出現頻度を求め、命令列頻度データ５０３を得る。
【００７７】
命令列頻度検出手段４０３も、命令列頻度検出手段４０１と同様に、被検出伸長命令列に含まれる命令のフィールド値を実行プログラムの実行結果が変わらないという条件の下で変更し、被検出伸長命令列が被検出伸長命令列の検出以前に既に検出された既検出伸長命令列と一致する場合は、被検出伸長命令列を既検出伸長命令列と同じ伸長命令列として頻度を求めるようにしてもよい。
【００７８】
また、命令列頻度検出手段４０１と同様に、被検出伸長命令列に含まれる命令の被検出伸長命令列中の配置順序を実行プログラムの実行結果が変わらないという条件の下で変更し、被検出伸長命令列が被検出伸長命令列の検出以前に既に検出された既検出伸長命令列と一致する場合は、被検出伸長命令列を既検出伸長命令列と同じ伸長命令列として頻度を求めるようにしてもよい。
【００７９】
圧縮命令定義手段６は、命令列頻度検出手段４０３で得られた命令列頻度データ５０３を受けて、このデータに基づいて例えば予め与えられた頻度値より高い値の命令列を選び出して圧縮命令を定義し、命令列パターンテンプレート３を参照して定義された圧縮命令と対応する伸長命令列との対応関係を示す圧縮伸長対応表７を作成する。
【００８０】
図１９に命令列パターンテンプレート３の一例を示す。２命令の命令列を圧縮した圧縮命令であって、同図に示すような形の命令パターンに対応する圧縮命令を３つまで定義可能とする。
【００８１】
図２０に実行オブジェクト２に対応するアセンブラソースファイル及び命令列頻度データの一例を示す。図１９に対応する命令列、すなわち変数となる部分が２つまでの命令列を、アセンブラソースファイル２０１の中からサーチすると、図２０に示す命令列頻度データ５０３が得られる。
【００８２】
「２命令の命令列を圧縮する」とは、例えば１行目の命令
ｓｌｌ  ｒ４，  ｒ４，  １６
と、２行目の命令
ｌｗ  ｒ７，  ０（ｒ４）
という２命令からなる命令列
ｓｌｌ  ｒ４，  ｒ４，  １６
ｌｗ  ｒ７，  ０（ｒ４）
を圧縮するという意である。
【００８３】
また「変数となる部分が２つまでの命令列」については、例えば１〜２行目の命令列
ｓｌｌ  ｒ４，  ｒ４，  １６
ｌｗ  ｒ７，  ０（ｒ４）
は、変数となる部分がｒ４とｒ７の２つなので、「変数となる部分が２つまでの命令列」に該当するが、
２〜３行目の命令列
ｌｗ  ｒ７，０（ｒ４）
ｌｗ  ｒ３，０（ｒ５）
は、変数となる部分がｒ３，ｒ４，ｒ５，ｒ７の４つなので、「変数となる部分が２つまでの命令列」に該当しない。
【００８４】
そして、命令列頻度データに基づいて圧縮命令を定義する命令列の候補を選択し、図１５に示したような圧縮伸長対応表７を作成する。
【００８５】
オブジェクト変換手段８は、圧縮命令定義手段６で作成された圧縮伸長対応表７を参照して、実行オブジェクト２の中の伸長命令列を圧縮命令に変換して圧縮済み実行オブジェクト１１２を作成し、作成した圧縮済み実行オブジェクト１１２をメインメモリ１０１に記憶させる。
【００８６】
命令伸長部再構成手段９は、圧縮命令定義手段６で作成された圧縮伸長対応表７を参照して、命令伸長部１４が定義された圧縮命令を伸長して元の伸長命令列に戻すように命令伸長部１４を再構成する。命令伸長部１４が上記したようにＦＰＧＡで実装されている場合は、命令伸長部再構成手段９はＦＰＧＡのコンフィギュレータとして構成され、一方命令伸長部１４が上記したようにＨＤＬで定義されている場合には、命令伸長部再構成手段９は定義されているＨＤＬ記述に変換する変換フィルターとして構成される。また、命令伸長部再構成手段９は、既に実装されている圧縮命令を命令伸長部１４から削除する。
【００８７】
このような構成において、プロセッサ１５１で実行される実行オブジェクト２は、命令列パターンテンプレート３に登録された命令列が命令列頻度検出手段４０３により検索されて、検出された命令列の出現頻度に応じて圧縮命令が圧縮命令定義手段６により定義され、定義された圧縮命令とこの圧縮命令に対応した伸長命令列との圧縮伸長対応表７が圧縮命令定義手段６により作成され、作成された圧縮伸長対応表７に基づいてプロセッサ１５１の命令伸長部１４が命令伸長部再構成手段９により再構成され、さらに圧縮伸長対応表７に基づいて実行オブジェクト２の伸長命令列が定義された圧縮命令に変換されて圧縮済み実行オブジェクト１１２が作成され、作成された圧縮済み実行オブジェクト１１２はメインメモリ１０１に与えられて一旦メインメモリ１０１に格納され、メインメモリ１０１に格納された圧縮済み実行オブジェクト１１２の中の圧縮命令は命令伸長部１４で伸長されて元の伸長命令列に戻された後、命令デコード部１２でデコードされて実行される。一方、このプロセッサ１５１で先の実行オブジェクトとは異なる他の実行オブジェクトを実行する場合には、上述したと同様にして圧縮命令が定義された後、命令伸長部１４が命令伸長部再構成手段９により再構成され、圧縮済み実行オブジェクト１１２がプロセッサ１５１で実行される。
【００８８】
このように第４実施形態においては、１つのプロセッサにおいて、実行プログラム毎に圧縮命令が最適に定義されるので、それぞれの実行プログラムの内容に応じて命令数を削減することが可能となり、これにより実行プログラムを格納するメモリ部１０１の容量を低減して小型化することができる。
【００８９】
（第５実施形態）
次に、図２１〜２４に基づいて、第５実施形態について説明する。
【００９０】
図２１は第５実施形態に係る情報処理装置の構成を示す図である。図２１に示す装置の特徴とするところは、図１８に示す装置に比べて、プロセッサ１で実行されるプログラムは、実行オブジェクトとしてではなく例えば図２２（Ａ）に示すようなアセンブラソースファイル２０２として定義されて与えられ、このアセンブラソースファイルをオブジェクトプログラムに変換するとともに、圧縮伸長対応表７に基づいてアセンブラソースファイルに含まれる伸長命令列を圧縮命令に変換するオブジェクト生成手段２１を図１８に示すオブジェクト変換手段８に代えて設け、また命令実行部２２が図１８に示す命令伸長部再構成手段９の機能を備えて圧縮伸長対応表７を参照して命令伸長部１４を再構成するようにしたことにあり、他は図１８に示す装置と同様である。
【００９１】
アセンブラソースファイル２０２の命令列頻度データの一例を図２３に示す。この頻度データ５に基づいて圧縮命令定義手段６により作成される圧縮伸長対応表７は、例えば図２４（Ａ）に示すようになり、これに基づいて図２２（Ａ）に示すアセンブラソースプログラムは、同図（Ｂ）に示すように、定義された圧縮命令を含んで変換される。
【００９２】
このように、この発明はオリジナルの命令コードの形式や、命令伸長部再構成手段９の機能がプロセッサの内部又は外部にあるかなどには依存しない。
【００９３】
このような構成においても、第４実施形態と同様の効果が得られる。
【００９４】
【発明の効果】
以上説明したように、本発明によれば、実行プログラム毎に命令伸長部が最適に構成されるので、それぞれの実行プログラムの内容に応じて命令数を削減することが可能となり、これにより実行プログラムを格納するメインメモリの容量を低減して小型化することができる。
【００９５】
また、命令列頻度検出手段と、圧縮命令定義手段とを用いて、実行プログラム毎に最適な圧縮伸長対応表を迅速、容易に作成することができる。
【図面の簡単な説明】
【図１】第１の実施形態に係る情報処理装置の構成を示す図である。
【図２】図１に示す圧縮伸長対応表の一例を示す図である。
【図３】図１に示す圧縮済み実行オブジェクトの内容をアセンブラ言語で表した場合の一例を示す図である。
【図４】図１に示す命令伸長部をＨＤＬにより定義する場合の一例を示す図である。
【図５】図４の命令伸長部をＨＤＬにより定義する場合の一例の続きを示す図である。
【図６】図４の定義ファイルがインクルードする”ｃｏｍｐｒｅｓｓ＿ｅｘｐａｎｄ＿ｔａｂｌｅ”の一例を示す図である。
【図７】図１に示すプロセッサ及メインメモリの構成例を示す図である。
【図８】図７に示すプロセッサ内部の動作タイミングチャートを示す図である。
【図９】第２の実施形態に係る情報処理装置の構成を示す図である。
【図１０】第３の実施形態に係る情報処理装置の構成を示す図である。
【図１１】図１０に示すアセンブラソースファイルと命令列頻度データの一例を示す図である。
【図１２】図１０に示す圧縮伸長対応表の一例を示す図である。
【図１３】図１０に示す圧縮済み実行オブジェクトの内容をアセンブラ言語で表した場合の一例を示す図である。
【図１４】図１０に示すアセンブラソースファイルと命令列頻度データの他の例を示す図である。
【図１５】図１０に示す圧縮伸長対応表の他の例を示す図である。
【図１６】圧縮命令として定義しない命令列の例を示す図である。
【図１７】図１０に示す圧縮済み実行オブジェクトの内容をアセンブラ言語で表した場合の他の例を示す図である。
【図１８】第４の実施形態に係る情報処理装置の構成を示す図である。
【図１９】図１８に示す命令列パターンテンプレートの一例を示す図である。
【図２０】図１８に示す実行オブジェクトの内容をアセンブラ言語で表した場合の一例と図１８に示す命令列頻度データの一例を示す図である。
【図２１】第５の実施形態に係る情報処理装置の構成を示す図である。
【図２２】図２１に示すアセンブラソースファイル及びこのファイルから生成された圧縮済み実行オブジェクトファイルの内容をアセンブラ言語で表した場合の一例を示す図である。
【図２３】図２１に示す命令列頻度データの一例を示す図である。
【図２４】図２１に示す圧縮伸長対応表の一例を示す図である。
【符号の説明】
７  圧縮伸長対応表
９  命令伸長部再構成手段
１２  命令デコード部
１３  命令実行部
１４  命令伸長部
１００  アドレスレジスタ
１０１  メインメモリ
１０２  命令レジスタ
１０４  マルチプレクサ
１０５  命令キャッシュ
１１０  圧縮済み実行オブジェクト
１５１  プロセッサ
【図１】
0003585800.tif 000002
【図２】
0003585800.tif 000003
【図３】
0003585800.tif 000004
【図４】
0003585800.tif 000005
【図５】
0003585800.tif 000006
【図６】
0003585800.tif 000007
【図７】
0003585800.tif 000008
【図８】
0003585800.tif 000009
【図９】
0003585800.tif 000010
【図１０】
0003585800.tif 000011
【図１１】
0003585800.tif 000012
【図１２】
0003585800.tif 000013
【図１３】
0003585800.tif 000014
【図１４】
0003585800.tif 000015
【図１５】
0003585800.tif 000016
【図１６】
0003585800.tif 000017
【図１７】
0003585800.tif 000018
【図１８】
0003585800.tif 000019
【図１９】
0003585800.tif 000020
【図２０】
0003585800.tif 000021
【図２１】
0003585800.tif 000022
【図２２】
0003585800.tif 000023
【図２３】
0003585800.tif 000024
【図２４】
0003585800.tif 000025