(57)【要約】【課題】モードの移行を高速に行なうハードウェアアクセラレータを提供する。【解決手段】スタックベースの中間言語（バイトコード）をレジスタベースの命令に変換するバイトコードアクセラレータＢＣＡを備える情報処理装置において、命令フェッチ部ＦＥＴとデコード部ＤＥＣの間にＢＣＡと命令切換のためのセレクタＳＥＬを配置し、ＢＣＡとレジスタファイルＲＥＧ＿ＦＩＬＥとの間にデータ転送経路（Ｐ４、Ｐ５）を設ける。バイトコードアクセラレータＢＣＡが起動されると、変換されたＣＰＵ命令がセレクタＳＥＬにてＰ３側が選択されデコード部ＤＥＣに供給される。中間言語がＢＣＡで変換できない場合、ソフト処理を行うためにモードが移行する。モード移行を行う処理中に、データ転送経路（Ｐ４とＰ５）を用いて、ＢＣＡとＲＥＧ＿ＦＩＬＥの間でのＢＣＡの内部情報の転送を並行して行うことで高速にモード切替が可能となる。【選択図】　図１
2004030222.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
複数のレジスタと、
第１フォーマット命令を固有命令として実行するための命令実行部と、
命令変換回路とを有し、
第２フォーマットで記述された第１プログラムを実行する際に、前記情報処理装置は、前記命令変換回路によって前記第１プログラムに含まれる第１命令群を前記第１フォーマット命令に変換して実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって前記第１プログラムに含まれる第２命令群を前記第１フォーマット命令に変換して実行する第２動作モードを有し、
前記第１動作モードと前記第２動作モードとの間の動作モードの移行に際し、当該動作モードの移行動作と、前記複数のレジスタの少なくとも一つと前記命令変換回路との間のデータ転送動作とを並列に行う情報処理装置。
【請求項２】
請求項１に記載の情報処理装置は、前記命令実行部で実行する命令のアドレスを保持するプログラムカウンタを有し、
情報処理装置は、前記第１モードから前記第２モードに移行するための命令を受けると、前記第１フォーマット命令に変換すべき前記第１命令群に属する命令のアドレスを前記プログラムカウンタに設定するための第１命令と、前記命令変換回路の起動前のプログラムカウンタの値を前記複数のレジスタの一つに退避する第２命令と、前記複数のレジスタの他の一つに保持されたスタック情報を前記命令変換回路に設定する第３命令とが実行される情報処理装置。
【請求項３】
請求項２において、
前記第１命令は分岐命令であって、
前記命令実行部は、前記第１命令による分岐命令の遅延スロットを利用して前記第２命令及び前記第３命令を並列に実行する情報処理装置。
【請求項４】
請求項２において、前記命令変換回路は、前記第１モードから前記第２モードに移行するための命令を受けると、休止状態から命令変換のための動作状態へと移行する情報処理装置。
【請求項５】
請求項１に記載の情報処理装置は、前記命令実行部で実行する命令のアドレスを保持するプログラムカウンタを有し、
情報処理装置は、前記第２モードから前記第１モードに移行するための命令を受けると、前記変換ソフトウェアを実行するためのアドレスを前記プログラムカウンタに設定するための第４命令と、前記第１フォーマット命令に変換すべき前記第２命令群に属する命令のアドレスを前記複数のレジスタの一つに設定するための第５命令と、前記命令変換回路に保持されたスタック情報を前記複数のレジスタの他の一つに退避する第６命令とが実行される情報処理装置。
【請求項６】
請求項５において、
前記第４命令は分岐命令であって、
前記命令実行部は、前記第４命令による分岐命令の遅延スロットを利用して前記第５命令及び前記第６命令を並列に実行する情報処理装置。
【請求項７】
請求項５において、前記命令変換回路は、前記第２モードから前記第１モードに移行するための命令を受けると、動作状態から命令変換を停止する休止状態へと移行する情報処理装置。
【請求項８】
請求項１に記載の情報処理装置は、前記命令変換回路と前記複数のレジスタの少なくとも一つとの間でデータ転送を行うためのデータ転送経路を有する情報処理装置。
【請求項９】
請求項１において、命令変換回路は、第１命令群に属する場合には変換テーブル部を用いて第１フォーマット命令に命令変換を行う情報処理装置。
【請求項１０】
情報処理装置であって、
第１フォーマット命令又は第２フォーマット命令が供給される命令入力部と、
複数のレジスタを含むレジスタファイルと、
前記レジスタファイルを利用して前記第１フォーマット命令をその固有命令として実行する命令実行部と、
前記第２フォーマット命令を前記命令入力部が受けた際に、当該第２フォーマット命令を前記第１フォーマット命令に変換して前記命令実行部に供給するための命令変換回路と、
前記命令変換回路と前記レジスタファイルの間でデータ転送を行うためのデータ転送経路とを備える情報処理装置。
【請求項１１】
請求項１０において、
前記第２フォーマット命令のうち第１命令群を前記命令入力部が受けた際に、前記命令変換回路は、前記第１命令群に属する命令を前記第１フォーマット命令に変換して前記命令実行部に供給し、
前記第２フォーマット命令のうち第２命令群を前記命令入力部が受けた際に、前記第１フォーマット命令で作成された変換ソフトウェアは、前記第２命令群に属する命令を前記第１フォーマット命令に変換して前記命令実行部に供給する情報処理装置。
【請求項１２】
請求項１１において、前記第２命令群は、前記命令変換回路が命令の変換をサポートしない命令である情報処理装置。
【請求項１３】
請求項１１において、
前記情報処理装置は、前記実行部が実行すべき命令のアドレスを保持するプログラムカウンタレジスタを更に有し、
前記命令変換回路が起動される際に、前記第２フォーマット命令に変換すべき前記第１命令群に含まれる命令のアドレスを前記プログラムカウンタレジスタに設定する動作と並列して、前記複数のレジスタの一つに記憶された内部情報を前記転送経路を介して前記命令変換回路に設定する動作を行う情報処理装置。
【請求項１４】
請求項１３において、
前記第１フォーマット命令はレジスタベースの命令であり、
前記第２フォーマット命令はスタックベースの命令であり、
前記内部情報は、前記複数のレジスタをスタックとして利用するためのスタック割り当て情報である情報処理装置。
【請求項１５】
請求項１３において、前記命令実行部は、パイプライン構造を有するものであって、分岐命令の遅延スロットを利用して、前記命令変換回路を起動するための複数の命令を実行する情報処理装置。
【請求項１６】
請求項１１において、
前記情報処理装置は、前記実行部が実行すべきアドレスを保持するプログラムカウンタレジスタを更に有し、
前記命令変換回路の変換動作を停止して前記第２命令群に属する命令を前記変換ソフトウェアによって前記第１フォーマット命令に変換する動作に移行する際に、前記変換ソフトウェアを実行するためのアドレスを前記プログラムカウンタレジスタに設定する動作と並列して、前記命令変換回路に記憶された内部情報として前記転送経路を介して前記複数のレジスタの一つに退避する動作を行う情報処理装置。
【請求項１７】
携帯情報システムであって、
アンテナと、
アンテナから得られる信号を符号処理する第１情報処理装置と、
前記第１情報処理装置に結合された第１主記憶と、
複数のレジスタ、第１フォーマット命令を実行するためのものであってレジスタベースの処理を行う命令実行部、命令変換回路を有し、前記第１主記憶をアクセス可能とされる第２情報処理装置と、
前記第２情報処理装置に結合された第２主記憶と
前記アンテナを介して前記第１主記憶に転送されてきた第２フォーマットで記述されたプログラムを実行する際に、前記第２情報処理装置は、前記命令変換回路によって前記第２フォーマット命令の第１命令群を前記第１フォーマット命令に変換する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって前記第２フォーマットの第２命令群を前記第１フォーマット命令に変換して実行する第２動作モードを有し、
前記第１動作モードと前記第２動作モードとの間の動作モードの移行に際し、当該動作モードの移行、と前記複数のレジスタと前記命令変換回路との間のデータ転送を並列に行う携帯情報システム。
【請求項１８】
請求項１７において、前記変換ソフトウェアは前記第２主記憶に記憶される携帯情報システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロプロセッサに使用される半導体集積回路、特に所定の中間言語をマイクロプロセッサの固有命令に変換するハードウェア加速回路を搭載する情報処理装置に関する。
【０００２】
【従来の技術】
近年、Ｊａｖａ言語で記述されたアプリケーションが携帯電話や携帯端末で急速に広がっている。Ｊａｖａとはサン・マイクロシステムズ社により開発されたＣ＋＋に類似したオブジェクト指向プログラミング言語である。なお、”Ｊａｖａ”はサン・マイクロシステムズ社の登録商標である。Ｊａｖａ言語が受けいられる要因として、Ｊａｖａ言語は、中間言語に対して仮想マシンを用いてマシン固有のＣＰＵ命令に変換して実行される特徴が挙げられる。仮想マシンを備えるＣＰＵであれば、ＣＰＵの種類に依存せずにＪａｖａアプリケーションを実行することができるので移植性が高い。なお、中間言語とは、Ｊａｖａの実行オブジェクトを生成するためのコンパイルの結果であり、バイトコードとも呼ばれる。
【０００３】
仮想マシン（以下”ＶＭ”と呼ぶ）は、一般にソフトウェア（これを以下”ソフトＶＭ”と呼ぶ）で提供されるが、各バイトコードをインタプリタで解釈実行するために低速であり、使用頻度の高いバイトコードをハードウェア実行することで高速化を行なう例が知られている。これらの例の一つには特表２０００−５０７０１５（対応国際公開：ＷＯ９８／２１６５５、国際出願番号：ＰＣＴ／ＵＳ０７／２０９８０）がある。
【０００４】
【発明が解決しようとする課題】
本願に先立ち、本願発明者等は上述のＪａｖａに代表されるような中間言語の命令（バイトコード）のソフトＶＭによる命令変換とハードウェアによる命令変換の整合性について検討を行った。即ち、バイトコードの実行時にターゲットとなるマイクロコンピュータの固有言語（以下ＣＰＵ命令と呼ぶ）に命令変換するハードウェアを採用する場合に、全てのバイトコードをハードウェアで変換できるのが理想である。しかし、バイトコードの中には複雑な機能を有し、変換するとＣＰＵ命令で数十から数百命令に及ぶバイトコードが存在する。このため、全てのバイトコードをハードウェア実行することは困難であり、一部のバイトコードのみをサポートしている。即ち、全てのバイトコードをハードウェア処理しようとするとハードウェアが増大しすぎてしまうからである。従って、ハードウェア処理とソフトウェア処理の切替えが必要となってくる。
【０００５】
図９に本願発明者等の、ハードウェア処理とソフトウェア処理の切替えの検討図を示す。図９（Ａ）は、バイトコードによるアプリケーションソフトウェアＡＰＰ１と、ＣＰＵ命令によるアプリケーションソフトウェアＡＰＰ２がメモリマップ上に配置されている様子を示す。ＡＰＰ２はＣＰＵ命令ＮＣによるものなので、直接実行が可能であり実行にあたり命令を変換する必要はない。
【０００６】
これに対してバイトコードによるＡＰＰ１は、ＣＰＵ命令に変換しなければ実行できない。ＡＰＰ１は、命令の変換実行という観点でみると以下の３種類の命令群を含んでいる。即ち、Ｃ１はバイトコードの内第１命令群に属する命令であり、ソフトＶＭで変換される命令である。Ｃ１はハードウェア変換器ではサポートされない命令となる。次に、Ｃ２は第２命令群に属し、ハードウェア変換器により処理される。最後に、Ｃ３は第３命令群に属し、実行時にＪａｖａ例外が検出された場合である。Ｊａｖａ例外とは、Ｊａｖａ言語の意味制約に違反したことを表す。例えば、除数ゼロでの整数除算などの例外的な計算状況はＡｒｉｔｈｍｅｔｉｃＥｘｃｅｐｔｉｏｎと定義される。Ｊａｖａ例外検出時は、制御をソフトＶＭに移し、ソフトＶＭに含まれるエラー処理ルーチンにより処理される。Ｃ３を放置するとマイクロコンピュータ自体の暴走を招くことがあるので、適切なエラー処理が必要となるためである。
【０００７】
図９（Ｂ）にＣ１からＣ３による命令群の実行の様子を示す。ＳはソフトＶＭによる処理、Ｈがハードウェアによる処理を表す。ここでＳからＨに移行するには、ハードウエアの起動処理ＡＣＴ＿Ｈが追加され、逆にＨからＳに移行するにはハードウェアの終了及びソフトＶＭの起動処理ＥＮＤ＿Ｈが追加される。即ち、本願発明者等は、ハードウェア非実行と実行のバイトコードが交互に現われＳとＨを頻繁に切り替えたり、ハードウェア処理中にＪａｖａ例外が発生するとＡＣＴ＿ＨやＥＮＤ＿Ｈが発生し処理を低下させることに気がついた。
【０００８】
本願発明の目的の一つは、ハードウェア処理とソフトウェア処理の切替えを高速に行うことにある。
【０００９】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。すなわち、複数のレジスタと、第１フォーマット命令を固有命令として実行するための命令実行部と、命令変換回路とを有し、第２フォーマットで記述された第１プログラムを実行する際に、前記情報処理装置は、前記命令変換回路によって前記第１プログラムに含まれる第１命令群を前記第１フォーマット命令に変換して実行する第１動作モードと、前記第１フォーマット命令で記述された変換ソフトウェアによって前記第１プログラムに含まれる第２命令群を前記第１フォーマット命令に変換して実行する第２動作モードを有し、前記第１動作モードと前記第２動作モードとの間の動作モードの移行に際し、当該動作モードの移行動作と、前記複数のレジスタの少なくとも一つと前記命令変換回路との間のデータ転送動作とを並列に行うようにする。
【００１０】
また、本願発明の別な側面によれば情報処理装置に命令変換回路とレジスタファイルの間でデータ転送を行うためのデータ転送経路とを備えるようにすると良い。
【００１１】
【発明の実施の形態】
以下、本発明に係るデータ処理装置の好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、特に制限されないが、公知のＣＭＯＳ（相補型ＭＯＳトランジスタ）やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような１個の半導体基板上に形成される。
【００１２】
まず、図１に本発明の実施例のバイトコードアクセラレータの構成図を示す。ＣＰＵはキャッシュＣＡＣＨＥと命令バスＩ＿ＢＵＳ及びデータバスＤ＿ＢＵＳを介して接続される。ＣＰＵは、命令を供給する命令フェッチ部（一般には命令入力部）ＦＥＴ、中間言語のバイトコードをＣＰＵ本来の固有命令に変換するバイトコードアクセラレータ（一般には命令変換回路）ＢＣＡ、命令フェッチ部出力とバイトコードアクセラレータ出力のＣＰＵ命令を選択するセレクタＳＥＬ、命令のデコードを行うデコード部ＤＥＣ、命令の演算と実行を行う命令実行部ＥＸＥ、制御信号を生成する制御部ＣＴＬ、プログラムカウンタＰＣ、レジスタファイルＲＥＧ＿ＦＩＬＥ、レジスタファイルとバイトコードアクセラレータＢＣＡ間のデータ転送経路Ｐ４、Ｐ５から構成される。特に制限されないが、この実施例ではレジスタファイルには１６本の汎用レジスタが含まれ、レジスタＲ０からＲ１５の名前で呼ばれる。
【００１３】
図９で前述したように固有のＣＰＵ命令で記述されたＡＰＰ２を実行する際には、セレクタＳＥＬは常にＰ１のパスを選択して、ＣＰＵ命令を実行し、ＢＣＡは全く動作させない。これに対して図９で前述したバイトコードで記述されたＡＰＰ１を実行する際にはＳＥＬによってＰ１またはＰ３の何れかを選択してＤＥＣに供給する。ソフトＶＭでバイトコードを実行させる場合にはセレクタはＰ１を選択する。一方、ＢＣＡを利用して処理する場合にはＰ２からＰ３を経てセレクタで選択されＤＥＣに供給される。
【００１４】
バイトコードアクセラレータＢＣＡは、変換テーブル部ＴＲＳ＿ＴＢＬ、スタック制御部ＳＴＫ＿ＣＴＬ、制御レジスタ部ＣＴＬ＿ＲＥＧから構成される。変換テーブル部では、スタックベースのバイトコードからレジスタベースの複数のＣＰＵ命令に変換する。変換テーブル部ＴＲＳ＿ＴＢＬは、ハードウェア実行をサポートする全バイトコードに対して、対応する固有のＣＰＵ命令がテーブル形式で格納されており、変換されたＣＰＵ命令が何番目の命令であるかを示すカウント情報を管理する。
【００１５】
カウント情報は変換テーブル部内のステートマシンにより生成される。そのカウント情報を用いてテーブルを参照することによりバイトコードから固有の複数のＣＰＵ命令に変換することができる。バイトコードは１バイトから数バイト長までの可変長である。変換テーブル部は各バイトコードのバイトコード長を把握しており、固有のＣＰＵ命令に変換終了後、命令フェッチ部に使用バイトコード長Ｐ６を介して通知し、新たなバイトコードをＰ２を介して受け取る。
【００１６】
本方式がソフトＶＭに対して高速に変換できる理由を述べる。ソフトＶＭでは、バイトコードをインタプリタにて１つずつ解釈実行するための命令処理ループが存在する。ソフトＶＭ内にバイトコードに対応して固有のＣＰＵ命令に変換するテーブルが用意されており、ループ内でのバイトコード実行においては、そのテーブルを参照するためにテーブル分岐が必要である。以上のように、ソフトＶＭではインタプリタ部の命令処理ループオーバヘッドとテーブル分岐オーバヘッドが存在するため、それらを必要としない本方式が高速である。
【００１７】
スタック制御部ＳＴＫ＿ＣＴＬは、ＣＰＵのレジスタファイル中の汎用レジスタＲ０〜Ｒ７のうち、本数は特に規定されないが、上位７つのスタックを７本の汎用レジスタに割り付けた場合の割り付けの状況やスタックのトップやボトム等のスタック情報を管理する。即ち、Ｊａｖａによるバイトコードはいわゆるスタックを想定している。これに対して、本願の対象とするＣＰＵはいわゆるレジスタであり、そのままでは整合性が良くない。レジスタによりスタック処理を行うには主記憶上にスタックを作ればよいが、主記憶へのアクセスでは遅くなってしまう。このため、オペランドスタックの上位を汎用レジスタの一部（一例としてはＲ０〜Ｒ７）に割り当てることにより、スタックベースのバイトコードをレジスタベースのＣＰＵ命令に効率的に変換することができる。オペランドスタックをレジスタ上に割り当てるもう一つの利点として、レジスタ上の前命令の結果を次の命令に使用できるため、スタックマシンに比べ、ロードストア命令を減らすことができる。
【００１８】
スタック制御部は、各ＣＰＵ命令において変化するオペランドスタックの状態に対応して各命令における汎用レジスタのスタック情報を管理する。
【００１９】
最後に、制御レジスタ部ＣＴＬ＿ＲＥＧにはバイトコードアクセラレータのイネーブルビットが含まれる。バイトコードアクセラレータを使用可能とするためには、まず制御レジスタのイネーブルビットを設定する。そして、バイトコードアクセラレータは、特定のＣＰＵ命令を検出することで起動し、バイトコードの変換を開始する。
【００２０】
それでは，本発明の実施例の特長となる動作を説明する。バイトコードアクセラレータＢＣＡは起動の際、（１）ＣＰＵのプログラムカウンタＰＣにＪａｖａ命令（バイトコード）のアドレス（ＪａｖａＰＣ）を設定する動作と（２）ＣＰＵの汎用レジスタ（例えばＲ１０）に記憶されたスタック情報と変換テーブル部のカウント情報から構成される内部情報をバイトコードアクセラレータのＲＥＧ＿ＣＴＬに設定しなければならない。プログラムカウンタの設定は、レジスタファイル中の一つの汎用レジスタ（例えばＲ１１）から、実行部ＥＸＥ、制御部ＣＴＬを経て、プログラムカウンタＰＣに汎用レジスタに格納されたＪａｖａ命令のアドレスを設定する。このとき、並行して、レジスタファイルＲＥＧ＿ＦＩＬＥの一つの汎用レジスタ（例えばＲ１０）に記憶されたスタック情報と変換テーブル部のカウントから成る内部情報をデータ転送経路Ｐ４を介してバイトコードアクセラレータＢＣＡのレジスタ制御部ＲＥＧ＿ＣＴＬに設定する。
【００２１】
また、バイトコードアクセラレータＢＣＡは終了の際、（１）ＣＰＵのプログラムカウンタにソフトＶＭのＣＰＵ命令アドレスを設定する動作と、（２）バイトコードアクセラレータの内部情報をＣＰＵの汎用レジスタに待避する動作と、（３）ＣＰＵのプログラムカウンタのＪａｖａバイトコードのアドレス（ＪａｖａＰＣ）を汎用レジスタに退避する動作、とを行わなければならない。ＣＰＵのプログラムカウンタにソフトＶＭのＣＰＵ命令アドレスを設定する動作は、ＢＣＡが該当する動作を行う分岐命令に変換して出力し、セレクタにて該当命令が選択され、デコード部、制御部を経てプログラムカウンタＰＣに設定される。このとき、並行して、プログラムカウンタのＪａｖａＰＣから制御部、実行部を経てレジスタファイルＲＥＧ＿ＦＩＬＥの一つの汎用レジスタ（例えばＲ１１）に設定し、ＢＣＡから内部情報をデータ転送経路Ｐ５を用いてレジスタファイルＲＥＧ＿ＦＩＬＥの一つの汎用レジスタ（例えばＲ１０）に設定する。
【００２２】
以上のように、本発明では、データ転送経路Ｐ４，Ｐ５を設けたことが一つの特徴である。これによりバイトコードアクセラレータＢＣＡとレジスタファイルＲＥＧ＿ＦＩＬＥとの間のバイトコードの内部情報のデータ転送が容易になり、ひいてはプログラムカウンタの設定と並行してバイトコードの内部情報の転送を可能にする。
【００２３】
図２に本発明のバイトコードアクセラレータＢＣＡの状態遷移図を示す。ＢＣＡは停止、休止、及び実行の３つの動作状態がある。リセット後は常に停止状態ＨＡＬＴに遷移する（ＲＥＳＥＴ）。停止状態では、ＢＣＡは使用不可の状態であり、起動することができない。
【００２４】
バイトコードの変換実行を行うためには、制御レジスタのイネーブルビットを１に設定し、休止状態ＩＤＬＥに遷移する（ＥＮＡＢＬＥ）。休止状態では、ＢＣＡが使用可能の状態であり、ＢＣＡの起動命令を検出することができる。この状態では、ＣＰＵ命令で記述されたソフトＶＭ、もしくはＣＰＵ命令のソフトウェアが稼動している状態である。
【００２５】
更に、ＢＣＡの起動シーケンスを実行することにより実行状態ＥＸＥＣとなる（ＡＣＴ）。実行状態では、ＢＣＡがハードウェアでバイトコードを実行している状態である。
【００２６】
一方、ＢＣＡの終了シーケンスを実行することにより、ＢＣＡは休止状態になる（ＤＥＡＣＴ）。また、実行状態であってもバイトコードアクセラレータがハードウェア実行を行わず、ソフトＶＭで処理する非サポートバイトコード処理、ＮｕｌｌｐｏｉｎｔｅｒＥｘｃｅｐｔｉｏｎなどのＪａｖａ実行時例外が発生した場合のＪａｖａ例外処理、ＴＬＢミスなどのＣＰＵ例外や割込み処理を行う場合、終了シーケンスを行う。
【００２７】
バイトコードアクセラレータＢＣＡはバイトコードのハードウェア実行を行い、それ以外のソフトウェアによる実装部分と協調して仮想マシンを構成する。このソフトウェアによる実装部分がソフトＶＭである。本発明の実施例のＢＣＡとソフトＶＭとの動作の分担及び相互の遷移状態を図３に示す。
【００２８】
ソフトＶＭ　ＳＯＦＴ＿ＶＭは、ソフトＶＭ実行の初期設定を行う初期化部分（ＩＮＩＴＩＡＬＩＺＥ）３６、バイトコードアクセラレータを起動する際の起動命令が置かれたフックアップ（ＨＯＯＫＵＰ）部分３７、ソフトウェアで解釈実行を行うために各バイトコードの処理開始アドレスを示すディスパッチテーブル（ＤＩＳＰＡＴＣＨ　ＴＡＢＬＥ）３８、ディスパッチテーブルに示されたアドレスの指す固有ＣＰＵ命令列が配置され、ソフトウェアで解釈実行を行うインタプリタ部（ＩＮＴＥＲＰＲＥＴＥＲ）３９、Ｊａｖａ例外発生時に適切な例外処理を行うためのＪａｖａ例外ハンドラ（ＪＡＶＡ　ＥＸＰ　ＨＡＮＤＬＥＲ）４０から構成される。
【００２９】
非サポートバイトコード時３２は、ディスパッチテーブル３８の該当するバイトコードよりインタプリタの処理アドレスが与えられ、インタプリタ３９上で解釈実行を行う。ディスパッチテーブルは８ビットのバイトコード数分の２５６個の配列で構成される。
【００３０】
Ｊａｖａ実行時にＢＣＡにおいて検出されたＪａｖａ既定の例外事象３３はソフトＶＭのＪａｖａ例外ハンドラ４０で処理される。Ｊａｖａ例外の識別子はバイトコードアクセラレータＢＣＡが与える。
【００３１】
ＣＰＵ例外や割込み発生時（ＥＸＰ／ＩＮＴＲ）３４には、ソフトＶＭとは別のＣＰＵ例外／割込みハンドラ４１によりソフトウェアにより適切な処理が行われる。
【００３２】
ＨＯＯＫＵＰ３７はバイトコードアクセラレータＢＣＡを起動する際にソフトウェアで実行すべき起動命令が配置されたソフトウェアルーチンである。非サポートバイトコードをインタプリタで実行した後、Ｊａｖａ例外ハンドラあるいはＣＰＵ例外／割込みハンドラはＨＯＯＫＵＰ３７に分岐後、ＢＣＡが起動される。ここで、ＨＯＯＫＵＰ３７は１箇所ではなく、複数箇所存在してもよい。例えば、非サポートバイトコードの処理はソフトＶＭのインタプリタ部分、インタプリタの各バイトコード処理部分の末尾に起動命令を置いてもよい。
【００３３】
本発明の実施例の起動シーケンスを図４に示す。休止状態のバイトコードアクセラレータＢＣＡは起動命令として、ＣＰＵの特定の命令（Ｊ＿ＪＰ）の発行を検出して実行状態となる。より具体的には、ソフトＶＭが一連のバイトコードを変換実行している時にソフトＶＭのインタプリタ（図３の３９）はバイトコードを一つずつ実行するたびにＨＯＯＫＵＰルーチンに分岐する。ＨＯＯＫＵＰルーチンには起動命令が置かれている。ＢＣＡが休止状態（ＩＤＬＥ）のとき、ＣＰＵが起動命令Ｊ＿ＪＰをフェッチすると、ＢＣＡは起動命令を検出し、以下の３命令をＣＰＵに起動シーケンスとして供給する。ＣＰＵはＪ＿ＪＰ命令の実行を中止し、次の３命令を実行する。
（１）　ＪＭＰ　　　＠Ｒｊｐ
（２）　Ｂ＿ＬＤＣ　　Ｒｓｃ
（３）　Ｂ＿ＭＯＶＡ　　　＠（０，ＰＣ），　Ｒｊｐ
（１）最初のＪＭＰ　　　＠Ｒｊｐ命令では、ＣＰＵのプログラムカウンタＰＣをこれからＢＣＡで処理するバイトコードのアドレス（ＪａｖａＰＣ）に設定する命令である。ソフトＶＭではＲｊｐに常にＪａｖａＰＣを置いているため、ＲｊｐをＰＣに転送すればよい。特に制限されないが、Ｒｊｐは汎用レジスタのＲ１１とされる。このＰＣで示されるバイトコードからバイトコードアクセラレータＢＣＡによる実行が開始される。そして、プログラムカウンタを設定する前に並行して以下の（２）と（３）の２命令を実行する。
（２）Ｂ＿ＬＤＣ　　Ｒｓｃ命令では、汎用レジスタＲｓｃ上にあるバイトコードアクセラレータの内部状態をバイトコードアクセラレータに設定する。内部状態には、命令カウンタ情報とレジスタスタック情報から構成される。特に制限されないが、Ｒｓｃは汎用レジスタのＲ１０とされる。内部状態を汎用レジスタで待避回復を行うことにより、ＣＰＵ例外／割込み時にバイトコードアクセラレータの内部状態を正確に復帰できる。このとき、ＲｓｃはソフトＶＭ上では変更を行わないことが必要である。
（３）Ｂ＿ＭＯＶＡ　　　＠（０，ＰＣ），　Ｒｊｐ命令において、Ｊ＿ＪＰ命令発行時のプログラムカウンタの値を保存する。この値はＨＯＯＫＵＰを指しており、バイトコードアクセラレータ起動時の命令のアドレスとしてＲｊｐに保持され、ＣＰＵ例外／割込み時の復帰アドレスとして使用される。ＣＰＵ例外／割込み時の復帰方法は、ＨＯＯＫＵＰに分岐した後、ＢＣＡが起動される。
【００３４】
図５に本発明の実施例の起動シーケンスのタイムチャートの一例を示す。本実施例のＣＰＵは、パイプライン６段を想定しておりで、命令フェッチＩＦ、バイトコード変換Ｂ、デコードＩＤ、実行ＥＸ、メモリアクセスＭＡ、レジスタライトＷＢで構成される。
【００３５】
時刻ｔ０においてバイトコードアクセラレータＢＣＡは、ＩＤステージのＣＰＵの特定命令Ｊ＿ＪＰ命令を検出し、時刻ｔ０にてＣＰＵに対してＩＤ＿ＣＡＮＣＥＬ信号をアサートし、ＩＤステージのキャンセルを通知すると同時に、Ｂステージで起動シーケンスの供給を開始する。ＣＰＵは時刻ｔ０にてＪ＿ＪＰ命令をキャンセルする。
【００３６】
そしてＢＣＡは、シーケンスの先頭を表すためにＩＮＳＴ＿ＦＩＲＳＴ信号をアサートし、ＣＰＵに通知する。ＣＰＵは割込みの受付をバイトコード間の境界とするためにＩＮＳＴ＿ＦＩＲＳＴ信号を使用する。
【００３７】
ＪＭＰ　＠Ｒｊｐ命令からＮＯＰ命令までが起動シーケンスである。ＢＣＡはＮＯＰ命令が時刻ｔ３においてシーケンスの最後であることを表すためにＩＮＳＴ＿ＬＡＳＴ信号をアサートし、ＣＰＵに通知する。ＣＰＵはプログラムカウンタの更新と次に述べる分岐命令の遅延スロットの終了信号としてＩＮＳＴ＿ＬＡＳＴ信号を使用する。
【００３８】
分岐命令ＪＭＰ　＠Ｒｊｐ命令のターゲットは時刻ｔ４においてＢＣＡで処理される最初のバイトコードｉｃｏｎｓｔ＿１である。このとき、ＪＭＰ命令とｉｃｏｎｓｔ＿１の間の３命令、すなわちＢ＿ＬＤＣ、Ｂ＿ＭＯＶＡ、ＮＯＰ命令はＪＭＰ命令と並行して動作することができ、分岐命令の遅延スロットとみなすことができる。ＣＰＵは遅延スロットの範囲を、ＩＮＳＴ＿ＬＡＳＴ信号により知ることができる。遅延スロット命令が複数ある場合、遅延スロットで発生した例外の戻り番地が分岐命令となるため区別できないという問題が生じるが、上記３命令ではＣＰＵ例外を起こさないため問題は発生しない。割込みに関しても、ＩＮＳＴ＿ＦＩＲＳＴ信号を用いてシーケンスの先頭のみ受付けることにすれば、例外と同じく問題は発生しない。従って、起動シーケンスのＪＭＰ命令は３命令の遅延分岐命令をもつ分岐命令とみなすことができる。
【００３９】
Ｂ＿ＬＤＣ　Ｒｓｃ命令は時刻ｔ３において汎用レジスタＲｓｃをバイトコードアクセラレータＢＣＡに転送する。ＢＣＡは、時刻ｔ４で最初のバイトコードを変換する前に、時刻ｔ３でスタック情報と変換テーブル部のカウント情報からなる内部情報を基に内部のステートマシンを設定する。
【００４０】
Ｂ＿ＭＯＶＡ　＠（０，ＰＣ），　Ｒｊｐ命令は時刻ｔ６において、Ｊ＿ＪＰ命令のアドレスＨＯＯＫＵＰをＲｊｐに転送する。そして、時刻ｔ４において、最初のバイトコードのハードウェア実行が開始される。
【００４１】
以上の通り、バイトコードアクセラレータＢＣＡの起動に必要な処理を分岐命令の遅延スロットを利用して実行するため、ＢＣＡの起動動作のオーバヘッドが軽減される。この遅延スロットによる命令実行を可能する構成上の工夫は図１に示したＰ４、Ｐ５のＢＣＡとレジスタファイル間のデータ転送経路である。
【００４２】
図６に、本発明の実施例の終了シーケンスの一例として、ＢＣＡの非サポートバイトコードによる終了シーケンスを示す。ＢＣＡがバイトコードをハードウェアで実行できないと判断すると、非サポートバイトコードとして、ソフトＶＭ上のインタプリタにて実行するために、ＢＣＡは実行状態から休止状態に遷移し、ソフトＶＭでのソフトウェア処理に移行する。レジスタ上のオペランドスタック上にデータがある場合は、レジスタのデータをまずメモリに待避する。ここでは、メモリ待避後のシーケンスを示す。次の４命令から構成される。
（１）　Ｂ＿ＭＯＶ．Ｌ　　　　＠（＃ｏｐ，　Ｒｄｐ），　Ｒ０
（２）　ＪＭＰ　＠Ｒ０
（３）　Ｂ＿ＭＯＶＡ　　　　＠（０，ＰＣ），　Ｒｊｐ
（４）　Ｂ＿ＳＴＣ　　　　　Ｒｓｃ
（１）まず、Ｂ＿ＭＯＶ．Ｌ　＠（＃ｏｐ，Ｒｄｐ），Ｒ０命令により，該当バイトコードの処理アドレスは、バイトコード＃ｏｐをインデクスとし、ディスパッチテーブルのベースアドレスＲｄｐとの和から該当バイトコード処理アドレスを汎用レジスタＲ０にロードする。
（２）次に、ＪＭＰ　＠Ｒ０命令でＲ０で示すアドレスへ分岐し、ターゲットから非サポートバイトコードのソフトウェア処理を開始する。そして、この分岐命令と並行して、次の２命令が実行される。
（３）Ｂ＿ＭＯＶＡ　＠（０，ＰＣ），Ｒｊｐ命令で、非サポートバイトコードのＪａｖａＰＣをレジスタＲｊｐに設定する。Ｒｊｐはこの実施例では汎用レジスタのＲ１１である。
（４）そして、Ｂ＿ＳＴＣ　Ｒｓｃ命令により、バイトコードアクセラレータのスタック情報と変換テーブル部のカウント情報からなる内部情報を汎用レジスタＲｓｃ上に設定する。Ｒｓｃはこの実施例では汎用レジスタのＲ１０である。
この分岐命令とレジスタ転送の並行処理により、終了処理が高速化される。そして、ＪＭＰ　＠Ｒ０命令でソフトＶＭへのターゲットへの分岐が実行されると、バイトコードアクセラレータＢＣＡは休止状態（ＩＤＬＥ）に遷移する。
【００４３】
終了シーケンスの一例として、ＢＣＡのハードウェア実行を行わない非サポートバイトコードの場合について述べたが、Ｊａｖａ例外の時もＪａｖａ例外ハンドラに分岐する際に、Ｊａｖａ例外識別コードの設定、ＪａｖａＰＣのＲｊｐへの設定とバイトコードアクセラレータの内部情報の汎用レジスタＲｓｃへの設定を分岐処理と並行して実行し、非サポートバイトコードと同様に終了処理が高速化される。Ｊａｖａ例外識別コードの設定とは、Ｊａｖａ例外の種別をＢＣＡからＳｏｆｔＶＭに示すために汎用レジスタに識別コードを設定することを示す。例えば、ＮｕｌｌＰｏｉｎｔｅｒＥｘｃｅｐｔｉｏｎは０である。特に制限されないが、汎用レジスタはＲ０を使用する。
【００４４】
ＣＰＵ例外／割込みの処理では、バイトコードアクセラレータの内部情報の汎用レジスタＲｓｃへの設定、プログラムカウンタにＣＰＵ例外／割込みハンドラからの戻りアドレスとしてＨＯＯＫＵＰを設定、ＪａｖａＰＣのＲｊｐへの設定を行った後、ＢＣＡは休止状態に遷移します。そして、通常のＣＰＵ例外／割込み処理を行う。
【００４５】
図７に本発明の実施例の終了シーケンスのタイムチャートの一例を示す。ＢＣＡはハードウェアで実行ができない非サポートバイトコードｎｅｗを検出すると終了シーケンスの命令列を供給し、休止状態（ＩＤＬＥ）に遷移する。そして、ＣＰＵが終了シーケンスの命令列を実行後、ソフトＶＭに制御を移す。レジスタスタック上にデータがある場合は、レジスタのデータをメモリに待避する。ここでは、レジスタスタック上にデータがなく、メモリ待避が不要な場合のシーケンスを示している。
【００４６】
時刻ｔ０においてバイトコードアクセラレータＢＣＡは、Ｂステージの非サポートバイトコードｎｅｗ命令を検出すると同じ時刻ｔ０にＢステージで終了シーケンスの供給を開始する。実施例の起動シーケンスと同様に、ＢＣＡはシーケンスの先頭を表すためにＩＮＳＴ＿ＦＩＲＳＴ信号をアサートし、ＣＰＵに通知する。Ｂ＿ＭＯＶ．Ｌ命令からＢ＿ＳＴＣ命令までが終了シーケンスである。Ｂ＿ＳＴＣ命令はシーケンスの最後であり、ＢＣＡは時刻ｔ３においてシーケンスの最後を表すためにＩＮＳＴ＿ＬＡＳＴ信号をアサートし、ＣＰＵに通知する。同時刻ｔ３において、ＢＣＡはＣＰＵに休止状態であることを通知するために、ＩＮＳＴ＿ＥＮＡＢＬＥ信号をネゲートする。ＣＰＵはＩＮＳＴ＿ＥＮＡＢＬＥ信号がネゲートされることによって、図１のセレクタＳＥＬはＰ１側を選択し、ＢＣＡ側のＣＰＵ命令を選択しない。
【００４７】
分岐命令ＪＭＰ　＠Ｒ０命令のターゲットは時刻ｔ５においてソフトＶＭ上の最初のＣＰＵ命令がデコードされる。このとき、ＪＭＰ命令とそのＣＰＵ命令の間の２命令、すなわちＢ＿ＭＯＶＡ、Ｂ＿ＳＴＣ命令はＪＭＰ命令と並行して動作することができ、起動シーケンスのときと同様に分岐命令の遅延スロットとみなすことができる。遅延スロットの範囲は、ＩＮＳＴ＿ＬＡＳＴ信号により知ることができる。
【００４８】
時刻ｔ５において、分岐の結果、プログラムカウンタＰＣに該当バイトコードのディスパッチテーブルのアドレス（ＤＩＳＰ）が設定され、ソフトＶＭ上でのＣＰＵ命令の実行が開始される。
【００４９】
Ｂ＿ＭＯＶＡ　＠（０，ＰＣ），　Ｒｊｐ命令では時刻ｔ６において、ＣＰＵは、プログラムカウンタのＪａｖａＰＣを汎用レジスタＲｊｐに書き込む。Ｂ＿ＳＴＣ　Ｒｓｃ命令では時刻ｔ７において、ＣＰＵはバイトコードアクセラレータの内部情報ＳＴＡＴＵＳを汎用レジスタＲｓｃに書き込む。
【００５０】
図８に本発明のの好適な応用例としての携帯情報システムの構成図を示す。より具体的には携帯電話の構成の一例である。大きく分けて、通信部分とアプリケーション部分から構成される。通信部分は、電波を送受信するアンテナ（ＲＦ）部８３、ベースバンドのモデム、コーデックを行うベースバンドプロセッサ（ＢＡＳＥＢＡＮＤ）部８１、主記憶（ＭＥＭ）８２である。アプリケーション部分は、本発明の実施例のバイトコードアクセラレータ１０を備えるＣＰＵ１を内蔵するマイクロプロセッサ（ＰＲＯＣＥＳＳＯＲ）７０において、インターフェース（Ｉ／Ｆ）７３を介してアプリケーションプロセッサとベースバンドプロセッサが接続され、周辺インターフェース（ＰＥＲＩＰＨＥＲＡＬ）７４を介してカメラ（ＣＭＲ）７５、メモリカード（ＣＡＲＤ）７６、音源ＩＣ（ＳＯＤ）７７、キー（ＫＥＹ）７８が接続され、外部バスを介して液晶（ＬＣＤ）７９、主記憶（ＭＥＭ）８０が接続される。本システム構成例は、携帯電話向けであったが、携帯情報端末やデジタルカメラなど多様なシステム構成例が考えられる。
【００５１】
本システム構成例では、例えば、次のようにメモリが使用される。Ｊａｖａアプリケーションは、外部サーバーよりアンテナ８３を介して配給され、ベースバンドプロセッサ８１を使用し、主記憶８２に格納される。ソフトＶＭは主記憶８０か主記憶８２のどちらに配置してもよい。ソフトＶＭのインタプリタ部はアクセス頻度が高いため、内蔵メモリ上に配置されることが望ましい。この発明により、バイトコードの処理が高速に行えるため、携帯情報システムの付加価値を高めることができる。
【００５２】
以上本願の発明をＪａｖａバイトコードを例にして説明したが、本願はそれにそれに限られることはなく、本願の趣旨の範囲内で変形可能である。即ち、本願発明は、一つの命令コード体系を別の命令コード体系にハードウェアアクセラレータを用いて変換して実行するような情報処理装置に一般的に用いることができる。
【００５３】
以上本願発明の実施例による効果をまとめると以下の通りである。バイトコードアクセラレータを内蔵することによって、Ｊａｖａのバイトコードは高速に実行される一方、ハードウェア処理とソフトウェア処理の切替のオーバヘッドの削減が必須となっている。そこで、本発明では、処理モードを切替えるための分岐命令の実行と並行して、バイトコードアクセラレータの内部情報の転送を行うことで、従来は、内部情報の転送を行った後に分岐命令を実行する逐次処理に対して高速となる。処理モードの切替としては、バイトコードアクセラレータの起動処理、非サポートバイトコード、Ｊａｖａ例外発生による終了処理、あるいはＣＰＵ例外／割込み発生による終了処理の際に行われ、頻度が高く、バイトコード実行の高速化に寄与する。
【００５４】
【発明の効果】
本願発明によれば、中間言語のハードウェア処理とソフトウェア処理の切替えの高速化が図れる。
【図面の簡単な説明】
【図１】本発明の実施例の構成図。
【図２】本発明の実施例の状態遷移図。
【図３】本発明の実施例のソフトＶＭの構成図。
【図４】本発明の実施例の起動シーケンス。
【図５】本発明の実施例の起動シーケンスのタイムチャート。
【図６】本発明の実施例の終了シーケンス。
【図７】本発明の実施例の終了シーケンスのタイムチャート。
【図８】本発明の実施例のシステム構成図。
【図９】ソフトＶＭとハードウェアアクセラレータによるバイトコードの処理を示す図。
【符号の説明】
ＣＰＵ…中央情報処理装置、ＣＰＵ＿ＣＯＲＥ…ＣＰＵの中心部、　ＣＡＣＨＥ…キャッシュ、　ＦＥＴ…命令フェッチ部、　ＳＥＬ…セレクタ、　ＤＥＣ…デコード部、　ＥＸＥ…実行部、ＣＴＬ…制御部、　ＰＣ…プログラムカウンタ
ＲＥＧ＿ＦＩＬＥ…レジスタファイル　ＢＣＡ…バイトコードアクセラレータ、ＴＲＳ＿ＴＢＬ…変換テーブル部、　ＲＥＧ＿ＣＴＬ…レジスタ制御部、　ＣＴＬ＿ＲＥＧ…制御レジスタ部、　Ｄ＿ＢＵＳ…データバス、Ｉ＿ＢＵＳ…命令バス、Ｐ１…ＣＰＵ命令パス、　Ｐ２…バイトコード入力パス、　Ｐ３…バイトコード出力パス、Ｐ４，Ｐ５…内部情報の転送経路、　ＨＡＬＴ…停止状態　ＩＤＬＥ…休止状態　ＥＸＥＣ…実行状態、　３０…バイトコードアクセラレータで発生するイベント　３１…起動時　３２…非サポートバイトコード時　３３…Ｊａｖａ例外発生時　３４…ＣＰＵ例外と割込み発生時、　３５…ソフトＶＭ　、３６…初期化ルーチン部、　３７…ＨＯＯＫＵＰ部、　３８…ディスパッチテーブル部、　３９…インタプリタ部、　４０…Ｊａｖａ例外ハンドラ、　４１…ＣＰＵ例外／割込みハンドラ、　５０…ソフトＶＭＨＯＯＫＵＰ部の起動命令、５１…バイトコードアクセラレータでの変換命令列、　５４…ディスパッチテーブル、　５５…インタプリタ、７０…マイクロプロセッサ、　７３…ベースバンドプロセッサとの接続インターフェース、　７４…周辺インターフェース、　７５…カメラ、　７６…メモリカード、　７７…音源ＬＳＩ、　７８…キーボード、７９…液晶、　８０…主記憶、　８１：ベースバンドプロセッサ、　８２…主記憶、　８３…ＲＦアンテナ。
【図１】
2004030222.tif 000003
【図２】
2004030222.tif 000004
【図３】
2004030222.tif 000005
【図４】
2004030222.tif 000006
【図５】
2004030222.tif 000007
【図６】
2004030222.tif 000008
【図７】
2004030222.tif 000009
【図８】
2004030222.tif 000010
【図９】
2004030222.tif 000011