(57)【要約】【課題】本発明の目的は、中間コード（Ｊａｖａバイトコード）を命令実行部が解釈可能な命令列に変換する命令変換回路において、仮想計算機（ＶＭ）のバージョンに対応できる機構を提供することにある。【解決手段】中間コードのうち第１命令群に属する命令はハードウェアにより解釈可能な命令に変換し、第２命令群に属する命令はソフトウェアによって変換する。命令変換回路は、中間コードが第１命令群と第２命令群のいずれに属するかを再定義可能に記憶するための記憶領域を有するよう情報処理装置を構成する。【効果】バージョンの違うＶＭでも、設定レジスタの内容を設定することにより、同一ハードウェアで命令変換を行うことができる。また、ＶＭがバージョンアップされた場合でも、ハードウェアを作り直すことなく同一のハードウェアで命令変換を行うことが可能になる。【選択図】　図１
2004127255.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
第１命令セットを固有命令として実行するための命令実行部と、
第２命令セットのうち第１命令群に属する命令を前記第１命令セットに変換して前記命令実行部に供給するための命令変換回路とを備え、
前記情報処理装置は、前記第２命令セットのうち前記命令変換回路で変換しない第２命令群に属する命令が入力された場合には、ソフトウェアによって前記第１命令セットに変換して前記命令実行部で実行し、
前記命令変換回路は、前記第２命令セットのうち前記第１命令群と前記第２命令群の何れかに属するかを再定義可能に記憶するための第１記憶領域を有する情報処理装置。
【請求項２】
請求項１において、
前記第２命令セットに属する命令群は、複数の命令カテゴリに分類され、
前記第１記憶領域は、前記複数の命令カテゴリ毎に、前記第１命令群と前記第２命令群の何れかに属するかを記憶する情報処理装置。
【請求項３】
請求項２において、前記複数の命令カテゴリには、ローカル変数アクセス命令群、配列アクセス命令群、３２ビット演算命令群、６４ビット演算命令群、浮動小数点命令群、スタック操作命令群、サブルーチンジャンプ／リターン命令群、フロー制御命令群の何れか一つが含まれる情報処理装置。
【請求項４】
請求項１において、前記命令変換回路は、前記第２命令セットが入力されると前記第１記憶領域の情報を参照して、前記第１命令群に該当する場合には当該命令変換回路に含まれる命令変換テーブルにより前記第１命令フォーマットに変換し、前記第２命令群にに属する場合には前記ソフトウェアに入力された命令の実行を委ねる情報処理装置。
【請求項５】
請求項１において、前記ソフトウェアは前記第１命令セットで記述される情報処理装置。
【請求項６】
請求項１において、
前記命令変換回路は、前記ソフトウェアの第１バージョンで定義されたオペコードとその処理を行うための制御回路と、前記ソフトウェアがバージョン変更された際に前記制御回路におけるオペコードとその処理の対応関係を変更するための第２記憶領域を有する情報処理装置。
【請求項７】
請求項６において、
前記命令変換回路は、前記第２命令セットにおいて定義される定義される配列又はフィールドをメモリ上に配置するための情報を再定義可能に記憶する第３記憶領域を有する情報処理装置。
【請求項８】
請求項７において、
前記第３記憶領域は、
前記第２命令セットにおいて定義される配列をメモリ上に配置する場合のメモリ上の先頭アドレスから前記配列の先頭エントリまでのオフセット値を記憶するための第１領域と、
前記配列をメモリ上に配置する場合のメモリ上の先頭アドレスから配列の配列長を格納するフィールドまでのオフセット値を記憶するための第２領域と、
前記第２命令セットにおいて定義されるフィールドをメモリ上に配置する場合のメモリ上の先頭アドレスから前記フィールドの先頭エントリまでのオフセット値を記憶するための第３領域を有する情報処理装置。
【請求項９】
情報処理装置であって、
第１命令セットを固有命令として実行するための命令実行部と、
第２命令セットのうち第１命令群に属する命令を前記第１命令セットに変換して前記命令実行部に供給するための命令変換回路とを備え、
前記情報処理装置は、前記第２命令セットのうち前記命令変換回路で変換しない第２命令群に属する命令が入力された場合には、ソフトウェアによって前記第１命令セットに変換して前記命令実行部で実行され、
前記命令変換回路は、前記ソフトウェアの第１バージョンで定義されたオペコードとその処理を記憶する制御回路と、前記ソフトウェアがバージョン変更された際に前記制御回路におけるオペコードとその処理の対応関係を変更するための第２記憶領域を有する情報処理装置。
【請求項１０】
請求項９において、
前記制御回路は、前記ソフトウェアの第１バージョンで定義されたオペコードとその処理の対応関係の他に前記ソフトウェアの第２バージョンで定義されたオペコードとその処理の対応関係を記憶し、
前記第２記憶領域は、前記制御回路が前記第１バージョンまたは第２バージョンの何れかに対応するかを再定義可能に指定するための領域を有する情報処理装置。
【請求項１１】
請求項９において、
前記制御回路は、前記ソフトウェアの第１バージョンで定義されたオペコードとその処理対応関係を記憶し、
前記第２記憶領域は、前記前記制御回路に記憶されるオペコードとその処理の対応関係の一部を無効とすることを再定義可能に指定するための第１領域と、
前記第１領域によって無効とされた処理に対する新たなオペコードを再定義可能に記憶するための第２領域を有する情報処理装置。
【請求項１２】
請求項９において、
前記第２命令セットはＪａｖａバイトコードであり、
前記ソフトウェアは前記Ｊａｖａバイトコードを前記情報処理装置で実行するソフトウェア・バーチャル・マシンであり、
前記第２記憶領域は、前記Ｊａｖａバイトコードのうち拡張バイトコードのオペコードとその処理内容の対応関係を再設定可能とする情報処理装置。
【請求項１３】
情報処理装置であって、
固有命令を実行するための命令実行部と、
Ｊａｖａバイトコードのうちの第１命令群に属する命令を前記固有命令に変換して前記命令実行部に供給するための命令変換回路とを備え、
前記情報処理装置は、前記Ｊａｖａバイトコードのうち前記命令変換回路で変換しない第２命令群に属する命令が入力された場合には、ソフトウェア・バーチャル・マシンによって前記固有命令に変換して前記命令実行部で実行され、
前記命令変換回路は、前記Ｊａｖａバイトコードの前記第１命令群と前記第２命令群と区分を再定義するための第１記憶領域と、前記Ｊａｖａバイトコードのオペコードとその処理の対応関係を再定義するための第２記憶領域と、前記Ｊａｖａバイトコードにおいて定義される配列又はフィールドをメモリ上に配置するための情報を再定義するための第３記憶領域を有する情報処理装置。
【請求項１４】
請求項１３において、
前記情報処理装置は、前記第１から第３記憶領域に所定の値を書き込むことにより前記ソフトウェア・バーチャル・マシンのバージョン変更に対応可能とされる情報処理装置。
【請求項１５】
請求項１４において、
前記Ｊａｖａバイトコードは、複数の命令カテゴリに分類され、
前記第１記憶領域は、前記複数の命令カテゴリ毎に、前記第１命令群と前記第２命令群の何れかに属するかを記憶する情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は情報処理装置、特に中間言語を高速に実行するための情報処理装置における中間言語のバージョンの互換性に関する。
【０００２】
【従来の技術】
近年、Ｊａｖａ言語（Ｊａｖａは登録商標である）で記述されたアプリケーションが携帯電話や携帯端末で急速に広がっている。Ｊａｖａとはサン・マイクロシステムズ社により開発されたＣ＋＋に類似したオブジェクト指向プログラミング言語である。なお、”Ｊａｖａ”はサン・マイクロシステムズ社の登録商標である。Ｊａｖａ言語が受けいれられる要因として、Ｊａｖａ言語で記述されたプログラムは、中間言語の形式で配布され仮想マシンを用いてマシン固有のＣＰＵ命令（固有命令）に変換して実行される特徴が挙げられる。実行時において仮想マシンを備えるＣＰＵであれば、ＣＰＵの種類に依存せずにＪａｖａアプリケーションを実行することができるので移植性が高い。なお、中間言語とは、Ｊａｖａの実行オブジェクトを生成するためのコンパイルの結果であり、Ｊａｖａバイトコードまたは省略してバイトコードとも呼ばれる。
【０００３】
仮想マシン（以下”ＶＭ”と呼ぶ）は、一般にソフトウェア（これを以下”ソフトＶＭ”と呼ぶ）で提供されるが、各バイトコードをインタプリタで解釈実行するために一般には低速である。このため、使用頻度の高いバイトコードをハードウェア実行することで高速化を行うハードウェアアクセラレータが知られている。ハードウェアアクセラレータの例については非特許文献１及びその翻訳である非特許文献２に記載される。
【非特許文献１】
Ｊａｖａ　ｔｏ　ｇｏ　：　Ｐａｒｔ　１；　Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ　Ｒｅｐｏｒｔ，　ｖｏｌ．　１５，　ｎｏ．　２，　Ｆｅｂ．　２００１
【非特許文献２】
「日経エレクトロニクス」，　ｎｏ．　７９７，　ｐｐ．　１６８−１７６，　２００１．６．４
【０００４】
【発明が解決しようとする課題】
本願発明者等は、本願に先だってハードウェアアクセラレータでバイトコードを処理する際のＶＭのバージョンアップについて検討を行った。即ち、ハードウェアアクセラレータは一般には特定のバージョンのＶＭを前提としてそのＶＭで定義される全部又は一部の命令をハードウェアで実行することにより高速化を図るものである。従って、一つのハードウェアアクセラレータを作成した後、ＶＭのバージョンが変更されるとハードウェアが正しく動作しなくなる場合が生ずる。これに対応するためにＶＭのバージョンアップに合わせてハードウェアを変更するとハードウェアの開発効率が良くない。
【０００５】
ＶＭの仕様はサン・マイクロシステムズ社により決定される。サン・マイクロシステムズ社はＪａｖａ２として複数の仕様を公開しており、そのうち組み込み機器向けの仕様はＪ２ＭＥである。この仕様にはさらに、ネットワーク情報機器用のＣＤＣと、ＣＰＵやメモリに制限のある携帯型ネットワーク情報機器用のＣＬＤＣの２つがある。両者の基本的なバイトコードのセットは同一である。
【０００６】
基本バイトコードとは別に、ＪａｖａＶＭの実装依存の仕様として、拡張バイトコードがある。これは基本バイトコードの割り当てであまっているコード空間に新たに拡張バイトコードを割り当てて、Ｊａｖａ実行中に、複雑なバイトコードを単純な拡張バイトコードに置き換えることが認められている。拡張バイトコードはＶＭの仕様として定められているのではなく、独自に処理内容を決められるが、Ｓｕｎが示す参照実装が事実上の標準となっている。ＣＤＣとＣＬＤＣでは拡張バイトコードのセットが異なる。さらに、それぞれの参照実装のマイナーバージョンアップでも、拡張バイトコードの処理内容が変わったり、同じ処理をするバイトコードでもオペコードの割り当てが変わってしまう。これらのＶＭの差異はソフトウェアインタプリタでは容易に改造できるが、ハードウェアで拡張バイトコードの実行をサポートしようとすると、ＶＭがバージョンアップする毎に新たなハードウェアを作らなければ対応できない。これではハードウェア開発の効率が良くないことに本願発明者等は気がついた。このほか、Ｊａｖａの仕様にあるフィールド、配列の構造がＶＭのバージョンによって異なる場合があり、ＶＭにあわせてハードウェアを作成するのも効率が悪い。
【０００７】
本発明の目的は、ＶＭによって定義される命令をハードウェアで実行する際にＶＭのバージョンに柔軟に対応することができる情報処理装置を提供することにある。
【０００８】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。すなわち、第１命令セットを固有命令として実行するための命令実行部と、第２命令セットのうち第１命令群に属する命令を前記第１命令セットに変換して前記命令実行部に供給するための命令変換回路とを備え、前記情報処理装置は、前記第２命令セットのうち前記命令変換回路で変換しない第２命令群に属する命令が入力された場合には、ソフトウェアによって前記第１命令セットに変換して前記命令実行部で実行し、前記命令変換回路は、前記第２命令セットのうち前記第１命令群と前記第２命令群の何れかに属するかを再定義可能に記憶するための第１記憶領域を有するよう情報処理装置を構成する。
【０００９】
更に望ましくは、前記命令変換回路は、前記ソフトウェアの第１バージョンで定義されたオペコードとその処理を行うための制御回路と、前記ソフトウェアがバージョン変更された際に前記制御回路におけるオペコードとその処理の対応関係を変更するための第２記憶領域を第１記憶領域に追加して又は代替して設けるようすると良い。
【００１０】
更に望ましくは、前記命令変換回路は、前記第２命令セットにおいて定義される定義される配列やフィールドをメモリ上に配置するための情報を再定義可能に記憶する第３記憶領域を第１記憶領域に追加して又は代替して設けるようすると良い。
【００１１】
【発明の実施の形態】
以下、本発明に係る情報処理装置及びシステムの好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、特に制限されないが、公知のＣＭＯＳ（相補型ＭＯＳトランジスタ）やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような１個の半導体基板上に形成される。
（１）システムの構成
図１に、本発明の情報処理システムの実施例を示す。図１のプロセッサチップＣＰＵ４は、一般的なプロセッサと同様、Ｊａｖａバイトコードとは異なるプロセッサ固有の命令セット（固有命令）を持っている。特に制限されないが、この実施例のＣＰＵ４には、フェッチ部（フェッチ回路）４１、命令変換部（命令変換回路）２、デコード部（命令デコード回路）４２、命令実行部（命令実行回路）４３が、１個の半導体基板上に形成されている。メモリ装置３は、Ｊａｖａバイトコード、ソフトＶＭ、フレーム等Ｊａｖａを実行するための情報を保持している。更に、メモリ装置３は、固有命令で記述されたアプリケーションソフトウェアやソフトウェアの実行のためのワーク領域なども含む。尚、メモリ装置３は、キャッシュメモリのようなＳＲＡＭ、メインメモリとなるべきＤＲＡＭ、又はそのキャッシュメモリとメインメモリの両方を持つものを想定しており、各々がＣＰＵ４と同一チップであっても別々のチップであっても構わない。
【００１２】
メモリ装置３から通常のＣＰＵ４の固有命令が供給された場合は、命令変換部２を介さない経路（４１→４２→４３）で実行される。一方、メモリ装置３からバイトコードが供給された場合は、フェッチ部４１を通り、命令変換部２にバイトコードが入力され、入力されたバイトコードは固有命令列に変換され、デコード部４２、実行部４３に送られ実行される。
【００１３】
ＣＰＵ４に変換回路２が命令変換を行うサポートバイトコード（第１命令群）が入力された場合、バイトコード変換テーブル２１で、Ｊａｖａバイトコードから１の固有命令又は固有命令列に変換される。変換回路２が命令変換を行わずソフトＶＭで命令変換を行う非サポートコード（第２命令群）が入力された場合、制御回路２２で検知し、バイトコード変換テーブル２１からソフトＶＭへ切り替えるための命令列が出力され、この命令列が実行されてソフトＶＭへ処理が移る。
【００１４】
以上のように、本願発明ではサポートバイトコードと非サポートバイトコードに応じて、命令変換回路とソフトＶＭが選択的に処理を行う。ここで、命令変換回路は、ハードウェアであるために、特定のバージョンのＶＭを前提として設計される。ところがＶＭのバージョンが変更されると、定義の変更のために変更されたバージョンのＶＭでコンパイルしたバイトコードは、古いバージョンのＶＭで作り込んでしまった命令変換回路では所望の動作をしない場合が生ずる。そこで、本願発明者等はＶＭのバージョン変更の内容について検討した結果、過去及び将来のＶＭの変更に対応するには以下詳述するパラメータを再定義可能に記憶する設定レジスタ１によって対応することを見いだした。
【００１５】
即ち、この設定レジスタ１の値を再設定することによりＶＭのバージョン変更に柔軟に対応できることになる。典型的にはＶＭバージョン１を前提として命令変換回路を作成した場合には、そのバージョン１に対応するソフトＶＭと設定レジスタ１の第１パラメータテーブルをメモリ装置３に記憶する。ここでＣＰＵ２に電源が投入されて初期化を行う際に第１パラメータがメモリ装置から設定レジスタ１にロードされ命令変換回路の初期設定がなされる。このようして命令変換回路はバージョン１のソフトＶＭとセットになって動作する。　尚、第１パラメータは特別な変更を指示しなければ設定レジスタ１にデフォルト値として初期値で設定するようにしても良い。
【００１６】
次にＶＭのバージョンが変更となりバージョン２になった場合には、バージョン１に代えてバージョン２のソフトＶＭとそれに対をなす第２パラメータテーブルをメモリ装置に記憶する。この場合は命令変換回路はバージョン２のソフトＶＭとセットになってバージョン２のＶＭでも動作させることができるようになる。
【００１７】
更に本願発明では各々バージョン１とバージョン２の両者でコンパイルされた２つのバイトコードアプリケーションが存在している場合でも、各バージョンのソフトＶＭとパラメータテーブルを対として切り替えることで実行可能となる。
【００１８】
ここで、設定レジスタ１は少なくとも実行バイトコード指定レジスタ（第１記憶領域）１１を含み、更に拡張バイトコード指定レジスタ（第２記憶領域）１２を含むと好ましく、更に配列／フィールドオフセットレジスタ（第３記憶領域）１３を含むと好ましい。以下それぞれのレジスタの役わりを詳細に示す。
（２）サポートバイトコードの指定方法
レジスタが実行バイトコード指定レジスタ１１は、ハードウェアで実行するバイトコードを指定するレジスタである。バイトコードごとに、全オペコード分のレジスタを用意する方法と、カテゴリ毎にレジスタを用意する方法が考えられる。ここでは、特に制限されないがレジスタサイズが小さくて済む後者の方式を好ましい実施例として示す。
【００１９】
図２に実行バイトコード指定レジスタ１１の詳細を示す。本願では約２３０のバイトコードをとくに制限されないがローカル変数アクセス命令群、配列アクセス命令群、３２ビット演算命令群、６４ビット演算命令群、浮動小数点命令群、スタック操作命令群、サブルーチンジャンプ／リターン命令群、フロー制御命令群などを含む１４のカテゴリに分類した。それぞれのカテゴリに１つまたは複数のバイトコードが含まれる。カテゴリ１実行指定レジスタＣＡＴ１＿ＲＥＧは１番目のカテゴリのバイトコードをサポート命令として扱うか、非サポート命令として扱うかを”１”又は”０”で指定する１ビットのレジスタである。他のカテゴリについても同様にＣＡＴ２＿ＲＥＧからＣＡＴ１４＿ＲＥＧで指定する。
【００２０】
図３にバイトコード指定レジスタ１１の設定と、バイトコードがハードウェアで実行されるかソフトＶＭで実行されるかの例を表で示す。バイトコードＢＣとしてＢＣ１、ＢＣ２、．．．は、それぞれカテゴリ１ＣＡＴ１、カテゴリ２ＣＡＴ２．．．に分類されていたと考える。この場合第１パラメータテーブルＰＡＲＡ１を実行バイトコード指定レジスタ１１に設定した場合（ＣＡＴ１＿ＲＥＧ＝１，　ＣＡＴ２＿ＲＥＧ＝１，　ＣＡＴ３＿ＲＥＧ＝０，．．．）には、図３の例示範囲ではＢＣ５がＳの記号で示すようにソフトＶＭで実行される。一方、ＢＣ１からＢＣ４は、Ｈの記号で示すようにハードウェアで実行されるように設定される。
【００２１】
また、第２パラメータテーブルＰＡＲＡ２を実行バイトコード指定レジスタ１１に設定した場合（ＣＡＴ１＿ＲＥＧ＝１，　ＣＡＴ２＿ＲＥＧ＝０，　ＣＡＴ３＿ＲＥＧ＝１，．．．）には、図３の例示範囲ではＢＣ２とＢＣ４がソフトＶＭで実行され、ＢＣ１、ＢＣ３、ＢＣ５はハードウェアで実行されるように設定される。
【００２２】
実行バイトコード指定レジスタ１１に設定する典型例は以下の通りである。プロセッサがシステムに搭載後にＶＭのバージョンが変わり、例えば配列の構造が変わった場合、配列アクセスに関わるバイトコードが属するカテゴリのカテゴリ実行指定ビットを非サポート命令として扱うように設定する。このように設定すると、制御回路２２が配列アクセスのバイトコードを非サポートバイトコードとして検知し、バイトコード変換テーブル２１がソフトＶＭに切り替えるための命令列を発行し、ソフトＶＭへ操作が移ることで，このバイトコードはソフトＶＭで実行される。このように、ＶＭのバージョンの差異により配列の構造が合わなくなった場合には、非サポート命令として扱うことで、配列構造の異なったＶＭにも対応することができる。その他，浮動小数の表現方法がＶＭのバージョンで異なったり、エンディアンの仕様で６４ビット演算が行えなくなった場合なども、該当するカテゴリ実行指定ビットを非サポート命令として扱うように設定し、ソフトＶＭに処理を渡すことで対応することができる。
【００２３】
本実施例ではカテゴリ毎にレジスタを用意する方法を実施例としてしめしたが、それに限定されることはない。即ち、Ｊａｖａバイトコードはオペコードの数は約２３０程度であり、１つのオペコードについて１ビットのレジスタを割り当てても２３０ものラッチレジスタを要することとなるため命令変換回路の回路規模を増大してしまい、カテゴリ毎に記憶すると回路規模が低減できる。しかし、一般にオペコードの数が少ない命令セットを扱う場合には前オペコード分にレジスタを方法をとっても回路規模は大きな問題とはならない。
（３）拡張バイトコードの指定方法
図５に、拡張バイトコードの処理内容やオペコードの番号の割り当てがＶＭのバージョンによって異なる様子を示す。まず拡張バイトコードとは、Ｊａｖａにおいてｉｌｏａｄやｉａｄｄ等の基本命令の他に、基本命令を高速に実行するため、定義されているｇｅｔｆｉｅｌｄ＿ｑｕｉｃｋ等のＶＭに特有の拡張命令を指定するバイトコードある。図５において、まず処理内容が異なる例として、拡張バイトコードの一つＥＸＢＣ５はバージョン１のＶＭ１ではオペコード２３４に割り当てられていたとする。これに対して、バージョン２のＶＭ２では拡張バイトコードＥＸＢＣ５はサポートされないためＮＯＮで示している。次にオペコードの番号の割り当てがバージョンにより異なる例を示す。即ち拡張バイトコードＥＸＢＣ１の処理は、ＶＭ１では２３０番に割り当てられるのに対して、ＶＭ２では２３５番に割り当てられている。このバージョンの差を解消するためのレジスタが、拡張バイトコードマップレジスタ１２である。
【００２４】
図４に拡張バイトコード指定レジスタ１２の詳細を示す。このレジスタ１２は、特定ＶＭバージョン指定レジスタＶＭ＿ＶＥＲ＿ＲＥＧ、オペコードオーバーライドイネーブル指定レジスタＯＶＲＥＮ＿ＲＥＧ、オペランドフォーマット指定レジスタＯＰＦＭ＿ＲＥＧ、拡張バイトコード指定レジスタＥＸＢＣ１＿ＲＥＧ，　ＥＸＢＣ２＿ＲＥＧ，　ＥＸＢＣ３＿ＲＥＧ，　．．．を含む。
【００２５】
特定ＶＭバージョン指定レジスタＶＭ＿ＶＥＲ＿ＲＥＧは、例えばバージョン１とバージョン２のＶＭが既に存在してる場合に”０”によりバージョン１を指定し、”１”によりバージョン２を指定するものである。更に多くのバージョンが存在する場合にはこのＶＭ＿ＶＥＲ＿ＲＥＧのビット幅を拡張することでバージョンの指定をすればよい。ここで、制御回路２２は、製造時に確定しているバージョン１とバージョン２の両方のＶＭに対する拡張命令のオペコードと処理を予めが記憶してものとする。従って、特定ＶＭバージョン指定レジスタＶＭ＿ＶＥＲ＿ＲＥＧは、制御回路２２に対してバージョン１とバージョン２のいずれの対応関係の処理を行うかを指定するスイッチとして働く。
【００２６】
これに対して、プロセッサがシステムに搭載後にＶＭのバージョンが変わり、想定していた拡張バイトコードのオペコードが合わなくなった場合、オペコードオーバーライドイネーブル指定レジスタＯＶＲＥＮ＿ＲＥＧを、イネーブルに設定にし、拡張バイトコード指定レジスタＥＸＢＣ１＿ＲＥＧには、拡張バイトコードＥＸＢＣ１の処理に合ったオペコードを設定する。例えば図５の例で、ＥＸＢＣ１はバージョン１では２３０、バージョン２では２３５である。このバージョン１と２の切り替えは、上述の通りＶＭバージョン指定レジスタＶＭ＿ＶＥＲ＿ＲＥＧで変更できる。これに対して、バージョン３で更に変更されＥＸＢＣ１に２４０が割り当てられた場合にＯＶＲＥＮ＿ＲＥＧを”１”に設定し、ＥＸＢＣ１＿ＲＥＧに”２４０”を設定する。他の拡張バイトコード指定レジスタ　ＥＸＢＣ２＿ＲＥＧ，　ＥＸＢＣ３＿ＲＥＧ，　．．も同様に指定する。命令変換部２に入力されたバイトコードが拡張バイトコード指定レジスタに設定されたオペコードと一致するかを制御回路２２が検知し、一致すると対応する命令列をバイトコード変換テーブル２１が出力し、一致しない場合は非サポート処理に移るための命令列を出力して、ソフトＶＭに処理を渡す。
【００２７】
オペランドフォーマット指定レジスタＯＰＦＭ＿ＲＥＧは、フィールド系拡張バイトコードのオペランドフォーマットの指定方法を変更するために使用する。フィールドにアクセスするバイトコードのオペランドは、バージョンに応じて変更になる場合があることに対応するためである。フィールド系拡張命令は、オペコードが１バイトとそれに連続する２バイトのオペランドの合計３バイトで指定される。しかし、後ろ２バイトのオペランドは（１）第１オペランド有効／第２オペランド有効、（２）第１オペランド有効／第２オペランド無効、（３）第１オペランド無効／第２オペランド有効となるような変更が想定される。オペランドフォーマット指定レジスタＯＰＦＭ＿ＲＥＧに”００”、”０１”、”１０”のような値を指定することにより（１）〜（３）のようなオペランドフォーマットの変更が可能とされる。尚、ＯＰＦＭ＿ＲＥＧは、ＯＶＲＥＮ＿ＲＥＧの設定がイネーブルとされるときに設定を必要とし、デフォルト値を利用する場合には設定を必要としない。
【００２８】
以上の通り、拡張バイトコードの詳細なバージョン変更に対応する手段を示したが、さらに拡張バイトコードがＶＭのバージョンアップにより上記の方法では対応できなくなった場合は、実行バイトコード指定レジスタ１１を非サポート命令に設定し、ソフトＶＭで対応する。従って、ＶＭのバージョン変更の吸収という点に着目すれば、実行バイトコード指定レジスタ１１のほうがより本質的である。実行バイトコード指定レジスタ１１の意義は、更に、ハードウェア性能の維持と言う点にある。
（４）配列／フィールドオフセットの指定方法
配列やフィールドの構造がＶＭのバージョンにより違う構造である場合がある。現状のＶＭは配列の先頭にヘッダ部分があり、ヘッダ部分のオフセットを足したアドレスでデータにアクセスする。今後、ヘッダ部分ＨＥＡＤＥＲのオフセットがＶＭによって変更される事もあり得ると考え、配列／フィールドオフセットレジスタ１３には図６に示すように、配列先頭オフセットレジスタＡＴＯＰ＿ＲＥＧを設けて、オフセットを変更できる仕様とした。また、配列長ＬＥＮは配列のヘッダ部分の中にあり、配列長のフィールドまでのオフセットを配列長フィールドオフセットレジスタＡＬＥＮ＿ＲＥＧで設定する。これらの設定すると、バイトコード変換テーブル２１が、その設定に対応した命令列を出力する。フィールドに対しても同様で、フィールド先頭オフセットレジスタＦＴＯＰ＿ＲＥＧを設けて、特殊命令テーブル２３から対応した命令列を発行する。なお，Ｊａｖａにおける配列とフィールドの概念図を図７に示す。図において（Ａ）が配列オフセット指定レジスタ、（Ｂ）が配列長フィールドオフセット指定レジスタ、（Ｃ）がフィールドオフセット指定レジスタのそれぞれの設定内容を示している。
【００２９】
さらにＶＭのバージョンアップにより上記の方法では対応できなくなった場合は、実行バイトコード指定レジスタ１１を非サポート命令に設定し、ソフトＶＭで対応する。従って、ＶＭのバージョン変更の吸収という点に着目すれば、実行バイトコード指定レジスタ１１のほうがより本質的である。配列／フィールドオフセットレジスタ１３の意義は、更に、ハードウェア性能の維持と言う点にある。
【００３０】
以上サポートバイトコードの指定方法、拡張バイトコードの指定方法、配列／フィールドオフセットの指定方法に分類し対応するレジスタ１１〜１３を例示して示した。レジスタ１１〜１３の分類及びその中の詳細なレジスタのまとまりは便宜上のものであり、結果的に本願のレジスタに対応する情報の記憶領域があれば本願の目的は達成できるのでそのような改変を行ってもよい。ここで示したレジスタは、揮発性の読み書き可能なラッチを想定しているが、一般には再定義可能な記憶領域があればよい。
（５）スタックトップ指定方法
Ｊａｖａでは，変数をスタックに蓄えてから演算を行なう。レジスタ数の限られた一般の汎用ＣＰＵでスタック構造を実現する場合，メモリ内にデータ領域を割り当て，メモリとレジスタ間でデータを転送することで実現する。この場合、データをメモリ内に積み重ね、スタックトップポインタと呼ばれるメモリに積み重ねた複数のデータの先頭のアドレスを覚えることで効率を良く実現できる。Ｊａｖａの変数でスタック構造が採用されたのは，スタック構造により汎用レジスタを１つ占有するだけで済み，汎用レジスタ数の異なるＣＰＵに対して容易に対応可能なためである。ただし、ＶＭのバージョンによって、スタックトップポインタの構造が異なる場合がある。即ち、バージョン１（ＶＭ１）では、スタックトップポインタが示すアドレスには無効なデータ（ｉｎｖａｌｉｄ）が格納されており、その次のアドレスから有効なデータが格納される。それに対し、バージョン２（ＶＭ２）では、スタックトップポインタが示すアドレスから有効なデータが保持される。
この相違は、同じバイトコードが入力された場合であってもＶＭのバージョンによってＣＰＵの処理が異なってしまうことを意味することを本願発明者は見出した。即ち、汎用レジスタからデータをメモリに転送する際又はメモリから汎用レジスタにデータを転送する際に、転送先又は転送元のメモリのアドレスをバージョンにより変更しなければならない。そこで、本願発明者等は、命令変換部ＢＴから出力される命令をＶＭのバージョンにより切り換える構成を採用した。具体的には、汎用レジスタＲ０からメモリに転送する際には、バージョン１（ＶＭ１）では、ＭＯＶ　Ｒ０，＠Ｒ１０＋という『ポストインクリメント型データ転送命令』を出力し、バージョン２（ＶＭ２）では、ＭＯＶ　Ｒ０，＠＋Ｒ１０という『プレインクリメント型データ転送命令』を出力するように構成した。ここで、＠Ｒ１０＋、＠＋Ｒ１０は、転送先のメモリのアドレスを示しているおり，符号はメモリの増加を，符号の位置はポスト／プレを示している。これによりスタックトップポインタの構造が異なるバージョンのＶＭに対応することを可能となる。
命令の切り換えの方法の１つの実施例について図１０を用いて説明する。ここで、バージョン１に対応する命令ＭＯＶ　Ｒ０，＠Ｒ１０＋とバージョン２に対応する命令ＭＯＶ　Ｒ０，＠＋Ｒ１０とを比較すると、転送先のメモリのアドレスのみが相違する。従って、バイトコード変換テーブルＴＡＢＬＥにバージョン１又はバージョン２のどちらか一方の命令を格納し、置換部（置換回路）ＣＯＮＶにおいて、バイトコード変換テーブルＴＡＢＥＬから読み出された情報を変換する構成とすることによりバージョン１及びバージョン２に対応することが可能となる。置換部ＣＯＮＶは、図４において示したバージョン情報を格納しているレジスタである特定バージョン指定レジスタＶＭ−ＶＥＲ＿ＲＥＧの情報に従って命令を置換する。このように構成することにより、それぞれのバージョンに対応する命令をバイトコード変換テーブルに格納する場合と比較して、バイトコード変換テーブルを小さくすることが可能となる。なお、置換部（置換回路）ＣＯＮＶにおいて、変換するか否かは、制御信号ＣＯＮＴにより制御される。制御信号ＣＯＮＴは、汎用レジスタからメモリへの置換が必要な際に入力される。また、図１０では、特定バージョン指定レジスタＶＭ＿ＶＥＲ＿ＲＥＧによりＶＭのバージョンに対応させたが、新たにスタックトップポインタレジスタを設けてもよい。この場合、ＶＭのバージョンによらず、スタックトップポインタの構造のみに対応するのでシステムへの適用が容易となる。更には、バイトコード変換テーブルＴＡＢＬＥには、バージョン１とバージョン２の共通部分のみを格納し、相違部分を特定バージョン指定レジスタＶＭ＿ＶＥＲ＿ＲＥＧの情報によって置換部ＣＯＮＶで付加する構成でもよい。
【００３１】
図８は本発明の第２の実施例である。本実施例はＣＰＵ４の外部に命令変換部２がありこの命令変換部が固有命令を実行するＣＰＵとは独立の半導体チップに形成されている点が図１の実施例とは異なる。命令変換部が別チップなので既存のＣＰＵチップに適用できる利点がある。設定レジスタ１は、第１の実施例と同様であり、図１の実施例と同様にＶＭのバージョンの違いに対応できる。
【００３２】
図９に本発明の好適な応用例としての携帯情報システムの構成図を示す。より具体的には携帯電話の構成の一例である。大きく分けて、通信部分とアプリケーション部分から構成される。通信部分は、電波を送受信するアンテナ（ＲＦ）部８３、ベースバンドのモデム、コーデックを行うベースバンドプロセッサ（ＢＡＳＥＢＡＮＤ）部８１、主記憶（ＭＥＭ）８２である。アプリケーション部分は、本発明の実施例のバイトコードアクセラレータ１０を備えるＣＰＵ１を内蔵するマイクロプロセッサ（ＰＲＯＣＥＳＳＯＲ）７０において、インターフェース（Ｉ／Ｆ）７３を介してアプリケーションプロセッサとベースバンドプロセッサが接続され、周辺インターフェース（ＰＥＲＩＰＨＥＲＡＬ）７４を介してカメラ（ＣＭＲ）７５、メモリカード（ＣＡＲＤ）７６、音源ＩＣ（ＳＯＤ）７７、キー（ＫＥＹ）７８が接続され、外部バスを介して液晶（ＬＣＤ）７９、主記憶（ＭＥＭ）８０が接続される。本システム構成例は、携帯電話向けであったが、携帯情報端末やデジタルカメラなど多様なシステム構成例が考えられる。
【００３３】
本システム構成例では、例えば、次のようにメモリが使用される。Ｊａｖａアプリケーションは、外部サーバーよりアンテナ８３を介して配給され、ベースバンドプロセッサ８１を使用し、主記憶８２に格納される。ソフトＶＭは主記憶８０か主記憶８２のどちらに配置してもよい。ソフトＶＭのインタプリタ部はアクセス頻度が高いため、内蔵メモリ上に配置されることが望ましい。この発明により、バージョンの異なるＶＭでコンパイルされたＪａｖａアプリケーションがダウンロードされた場合でもハードウェアアクセラレータを利用して高速に実行できるため、携帯情報システムの付加価値を高めることができる。
【００３４】
以上の本願発明はＪａｖａを例にして説明したが、それに限られることはなく、同様の中間言語及びＶＭを固有命令を命令セットで実行するプロセッサに対するハードウェアアクセラレータに適用できる。
【００３５】
【発明の効果】
上記手法により、異なるＶＭでも、設定レジスタの内容を設定することにより、同一ハードウェアで命令変換することができる。また、ＶＭがバージョンアップされた場合でも、ハードウェアを作り直すことなく同一のハードウェアで命令変換を行うことが可能である。
【図面の簡単な説明】
【図１】本発明によるプロセッサの概略ブロック図。
【図２】実行バイトコード指定レジスタのブロック図。
【図３】実行バイトコード指定レジスタの設定例。
【図４】拡張バイコードマップレジスタのブロック図。
【図５】ＶＭバージョンの違いによる拡張バイトコードの割り当ての違いの例。
【図６】配列／フィールドオフセットレジスタのブロック図。
【図７】配列／フィールドの構造。
【図８】本発明によるアクセラレータの概略ブロック図。
【図９】本発明による携帯システムの概略ブロック図。
【図１０】本発明による命令置換を実現する概略ブロック図。
【符号の説明】
１…設定レジスタ（ＲＥ）、２…命令変換部（ＢＴ）、３…メモリ装置（ＭＥＭ）、４…プロセッサ（ＣＰＵ）、１１…実行バイトコード指定レジスタ（ＲＥＧ１）、１２…拡張バイトコード指定レジスタ（ＲＥＧ２）、１３…配列／フィールドオフセットレジスタ（ＲＥＧ３）、２１…バイトコード変換テーブル（ＴＡＢＬＥ）、２２…制御回路（ＣＴＲＬ）、４１…フェッチ部（ＦＥ）、４２…デコード部（ＤＥ）、４３…実行部（ＥＸ）。
【図１】
2004127255.tif 000003
【図２】
2004127255.tif 000004
【図３】
2004127255.tif 000005
【図４】
2004127255.tif 000006
【図５】
2004127255.tif 000007
【図６】
2004127255.tif 000008
【図７】
2004127255.tif 000009
【図８】
2004127255.tif 000010
【図９】
2004127255.tif 000011
【図１０】
2004127255.tif 000012