(57)【要約】【課題】本発明の目的は、中間コード（Ｊａｖａバイトコード）を命令実行部が解釈可能な命令列に変換する命令変換回路において、小さいハードウェア規模でバイトコード実行性能を向上させる機構を提供することにある。【解決手段】第１フォーマット命令を固有命令として実行するための命令実行部２５と、入力した第２フォーマット命令を前記第１フォーマット命令に変換して前記命令実行部２５に供給する命令変換回路２２と、一部をオペランドスタックに割り当て可能なレジスタファイル２８とを備え、前記命令変換回路２２は、前記レジスタファイル２８の複数のレジスタ、あるいは複数のレジスタ群をオペランドスタックに割り当てるか否かを指定するための記憶領域を有する。【効果】実行する中間コードに最適な数のレジスタをオペランドスタックに割り当てることにより、中間コードの実行性能を向上させる。さらに、オペランドスタックとメモリ間のデータ転送を行う専用ハードウェアを不要となり、ハードウェア規模が削減される。【選択図】図１
2004133641.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
第１フォーマット命令を固有命令として実行するための命令実行部と、
入力した第２フォーマット命令を前記第１フォーマット命令に変換して前記命令実行部に供給する命令変換回路と、
一部をオペランドスタックに割り当て可能なレジスタファイルとを備え、
前記命令変換回路は、前記レジスタファイルの複数のレジスタ、あるいは複数のレジスタ群をオペランドスタックに割り当てるか否かを指定するための記憶領域を有することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記命令変換回路は、前記レジスタファイル上に格納された有効なオペランドスタックエントリの先頭位置を特定可能なポインタ、底位置を特定可能なポインタのうち少なくとも一方を記憶するための記憶領域を有することを特徴とする情報処理装置。
【請求項３】
請求項１に記載の情報処理装置において、
前記命令変換回路は、前記レジスタファイル上に格納された有効なオペランドスタックエントリ数を特定可能な状態を記憶するための記憶領域を有することを特徴とする情報処理装置。
【請求項４】
請求項２に記載の情報処理装置において、
前記第１フォーマット命令のうち、所定のフィールドの値が、前記ポインタを記憶するための記憶領域が所定の状態であることに応答して変化することを特徴とする情報処理装置。
【請求項５】
請求項２に記載の情報処理装置において、
前記ポインタを記憶するための記憶領域が所定の状態であることに応答して、前記第１フォーマット命令が前記第２フォーマット命令から変換された命令ではない所定の命令に置換されることを特徴とする情報処理装置。
【請求項６】
請求項３に記載の情報処理装置において、
前記第１フォーマット命令のうち、所定のフィールドの値が、前記エントリ数を特定可能な状態を記憶するための記憶領域が所定の状態であることに応答して変化することを特徴とする情報処理装置。
【請求項７】
請求項３に記載の情報処理装置において、
前記エントリ数を特定可能な状態を記憶するための記憶領域が所定の状態であることに応答して、前記第１フォーマット命令が前記第２フォーマット命令から変換された命令ではない所定の命令に置換されることを特徴とする情報処理装置。
【請求項８】
請求項１から７に記載の情報処理装置において、
前記第２フォーマット命令はＪａｖａバイトコードであり、
前記オペランドスタックはＪａｖａオペランドスタックであることを特徴とする情報処理装置。
【請求項９】
請求項１において、
前記レジスタファイルを構成するレジスタのうち、４本以上のレジスタを前記オペランドスタックに割り当てることを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報処理装置に関し、特にレジスタファイルの一部をオペランドスタックとして割り当て可能な情報処理装置における処理性能向上に関する。
【０００２】
【従来の技術】
近年、Ｊａｖａ言語で記述されたアプリケーションが携帯電話や携帯端末で急速に広がっている。Ｊａｖａとはサン・マイクロシステムズ社により開発されたＣ＋＋に類似したオブジェクト指向プログラミング言語である。なお、”Ｊａｖａ”はサン・マイクロシステムズ社の登録商標である。Ｊａｖａ言語が受け入れられる要因として、Ｊａｖａ言語で記述されたプログラムは、中間言語の形式で配布され、仮想マシンを用いてマシン固有のＣＰＵ命令（固有命令）に変換して実行される特徴が挙げられる。実行時において仮想マシンを備えるＣＰＵであれば、ＣＰＵの種類に依存せずにＪａｖａアプリケーションを実行することができるので移植性が高い。なお、中間言語とは、Ｊａｖａの実行オブジェクトを生成するためのコンパイルの結果であり、Ｊａｖａバイトコードまたは省略してバイトコードとも呼ばれる。
【０００３】
仮想マシン（以下”ＶＭ”と呼ぶ）は、一般にソフトウェア（これを以下”ソフトＶＭ”と呼ぶ）で提供されるが、各バイトコードをインタプリタで解釈実行するため、一般には低速である。このため、使用頻度の高いバイトコードをハードウェア実行することで高速化を行うハードウェアアクセラレータが知られている。ハードウェアアクセラレータの例については、非特許文献１に記載される。
【０００４】
【特許文献１】
特開平７−１１０７７２号公報
【非特許文献１】
Ｊａｖａ　ｔｏ　ｇｏ：Ｐａｒｔ　１；Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ　Ｒｅｐｏｒｔ、Ｖｏｌ．１５、Ｎｏ．２、Ｆｅｂ．２００１
【０００５】
【発明が解決しようとする課題】
本願発明者は、本願に先立ってＣＰＵと協調動作するハードウェアアクセラレータでバイトコードを処理する際の、オペランドスタックの実装とバイトコード実行性能について検討を行った。ここで、協調動作とは、ＣＰＵおよびハードウェアアクセラレータがそれぞれ所定の機能を分担して実行することにより、バイトコードが実行されることを示す。協調動作の一例として、ハードウェアアクセラレータがバイトコードをＣＰＵ命令に翻訳し、ＣＰＵが翻訳された命令を実行することによりバイトコードを実行することが挙げられる。以下、ハードウェアアクセラレータがＣＰＵ命令に翻訳可能なバイトコードをサポートバイトコード、翻訳不可能なバイトコードを非サポートバイトコードとする。
【０００６】
一般に、オペランドスタックはメモリ上に配置され、バイトコード実行時にはオペランドスタック、すなわちメモリへのアクセスが頻発する。実効的にメモリアクセスを高速化し、バイトコード実行性能を向上させるため、例えばＣＰＵのレジスタファイルの一部をオペランドスタックとして割り当てることでメモリアクセス頻度を削減することが有効である。特にサポートバイトコードを連続して実行する場合、より多くの本数のレジスタをオペランドスタックとして割り当てることでその効果を高めることができる。しかし、ハードウェアアクセラレータおよびソフトＶＭの実装にも依存するが、非サポートバイトコードをソフトウェアで実行する場合、あるいは所定のイベントによりレジスタファイル上のオペランドスタックをすべてメモリに書き戻す必要が生じた場合のオーバヘッドを考慮すると、必ずしもより多くのレジスタをオペランドスタックとして割り当てることが性能向上に寄与するわけではないことがわかった。
【０００７】
さらに、ハードウェアアクセラレータを携帯電話のようなバッテリ駆動システムに搭載する場合、駆動時間を延ばすため、低消費電力であることが期待される。そのため、バイトコード実行性能を極端に低下させることなく、ハードウェアアクセラレータのハードウェア規模を削減することが重要である。
【０００８】
本発明の一つの目的は、メモリ上のオペランドへのアクセスを削減することによりバイトコード実行性能を向上させるため、オペランドスタックとして割り当てるレジスタ数を最適に指定する手段を提供することにある。
【０００９】
また、本発明の他の一つの目的は、ソフトＶＭの移植性を高めたハードウェア規模の小さい情報処理装置を提供することである。
【００１０】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記のとおりである。すなわち、第１フォーマット命令を固有命令として実行するための命令実行部と、入力した第２フォーマット命令を前記第１フォーマット命令に変換して前記命令実行部に供給するための命令変換回路と、一部をオペランドスタックに割り当て可能なレジスタファイルを備え、前記命令変換回路は、前期レジスタファイルの複数のレジスタ、あるいは複数のレジスタ群をオペランドスタックに割り当てるか否かを指定するための記憶領域を有するよう、情報処理装置を構成する。
【００１１】
更に望ましくは、前記レジスタファイル上に格納された有効なオペランドスタックエントリの先頭位置を特定可能なポインタ、底位置を特定可能なポインタのうち少なくとも一方、および前記レジスタファイル上に格納された有効なオペランドスタックエントリ数を特定可能な状態を記憶するための記憶領域を有するよう、情報処理装置を構成すると良い。
【００１２】
更に望ましくは、前記第１フォーマット命令のうち、所定のフィールドの値が、前記レジスタファイル上に格納された有効なオペランドスタックエントリの先頭位置を特定可能なポインタ、底位置を特定可能なポインタのうち少なくとも一方を記憶するための記憶領域、もしくは前記エントリ数を特定可能な状態を記憶するための記憶領域が所定の状態であることに応答して変化するよう、情報処理装置を構成すると良い。
【００１３】
更に望ましくは、前記レジスタファイル上に格納された有効なオペランドスタックエントリの先頭位置を特定可能なポインタ、底位置を特定可能なポインタのうち少なくとも一方を記憶するための記憶領域、もしくは前記エントリ数を特定可能な状態を記憶するための記憶領域が所定の状態であることに応答して、前記第１フォーマット命令が前記第２フォーマット命令から変換された命令ではない所定の命令に置換されるよう、情報処理装置を構成すると良い。
【００１４】
【発明の実施の形態】
以下、本発明に係る情報処理装置の好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、公知のＣＭＯＳ（相補型ＭＯＳトランジスタ）やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような一つの半導体基板上に形成される。
【００１５】
図１に、本発明の情報処理システムの実施例を示す。図１のプロセッサチップ２０は、一般的なプロセッサと同様、Ｊａｖａバイトコードとは異なるプロセッサ固有の命令セット（固有命令）を持っている。特に制限されないが、この実施例のＣＰＵ２０には、命令フェッチ部２１、命令変換部２２、命令セレクタ２３、命令デコード部２４、命令実行部２５、データメモリ制御部２６、レジスタ制御部２７、レジスタファイル２８が、１個の半導体基板上に形成されている。命令メモリ１０には、図示しないがＪａｖａバイトコード、ソフトＶＭ、プログラム等、データメモリ３０には、図示しないがフレーム、オペランドスタック、データ等、ソフトウェアを実行するための情報を保持している。なお、命令メモリ１０およびデータメモリ３０は、情報を保持できるものであれば良く、例えば、キャッシュメモリのようなＳＲＡＭ、メインメモリのようなＤＲＡＭ、またはそのキャッシュメモリとメインメモリの両方を持つもの等が挙げられる。また、特に制限されないが、命令メモリ１０やデータメモリ３０がＣＰＵ２０と同一チップであっても別々のチップであっても構わない。
【００１６】
命令フェッチ部２１は、命令メモリ１０からの命令供給を制御し、フェッチした命令を命令変換部（命令変換回路）２２に供給する。命令変換部２２は、命令変換テーブル１００、命令変換制御部１１０、および制御レジスタ１２０を含み、入力バイトコードおよび内部状態から固有命令列を生成する。命令セレクタ２３では、命令フェッチ部２１および命令変換部２２のいずれかの出力を命令デコード部２４に供給するかを選択する。命令デコード部２４は、入力された固有命令をデコードし、命令実行部２５、およびデータメモリ制御部２６は、それぞれデコード結果に基づき、命令の実行およびデータメモリ３０へのアクセス制御を行う。レジスタ制御部２７は、命令実行結果をレジスタ２８に格納する。レジスタファイル２８は、特に制限されないが、１６本のレジスタにより構成される。
【００１７】
命令メモリ１０から通常のＣＰＵ２０の固有命令が供給された場合は、命令変換部２２を介さない経路（２１→２３→２４→２５）で実行される。一方、命令メモリ１０からバイトコードが供給された場合は、命令フェッチ部２１を通り、命令変換部２２にバイトコードが入力され、入力されたバイトコードは固有命令列に変換され、命令セレクタ２３を通り、命令デコード部２４、命令実行部２５に送られ実行される。なお、本実施例では、命令変換部２２は、ＪａｖａバイトコードをＣＰＵ２０の固有命令列に変換する構成として説明したが、これに限定されるものではない。即ち、命令変換部２２は、入力されたフォーマット命令を異なるフォーマット命令に変換する構成であればよい。以下、命令変換部２２を構成する制御レジスタ１２０、命令変換制御部１１０および命令変換テーブル１００について説明し、その動作について詳しく述べる。
【００１８】
図２に、本発明における制御レジスタ１２０の実施例を示す。特に制限されないが、制御レジスタ１２０は、ハードウェアによりバイトコードを実行する際に参照されるすべてのＪａｖａリソースについて、ＣＰＵ２０の備える１６本のレジスタのうち、それぞれどのレジスタまたはレジスタ群に割り当てるかを指定する９つの４ビットフィールド１２１〜１２９により構成される。Ｊａｖａリソースのレジスタへの割り当てを任意に指定可能とすることにより、既存のソフトＶＭの移植が容易となるだけでなく、レジスタ割り当てを最適化し、ソフトＶＭによるバイトコード実行性能を向上させる手段を提供する。一般に、最適なレジスタ割り当ては、ＶＭのバージョンや実行するＪａｖａアプリケーションにより異なるため、制御レジスタ１２０を実装しない従来のハードウェアにおいては、特定のＶＭバージョンやＪａｖａアプリケーションに特化して最適化されたハードウェアを必要に応じて複数開発しなければならないという開発効率低下の問題が発生するが、制御レジスタ１２０を実装することによりこの問題を解決することができる。
【００１９】
フィールド１２１、１２２は、それぞれバイトコード実行中の中間結果を格納するスクラッチとして割り当てるレジスタ群の開始レジスタ番号、終了レジスタ番号を指定するフィールドであり、これらの番号の範囲に含まれるレジスタがすべてスクラッチとして本数可変に割り当てられる。特に制限されないが、スクラッチに割り当てられたレジスタの内容は、ソフトＶＭ内の命令実行により破壊されてもよいよう、命令変換部２２を構成する。
【００２０】
フィールド１２３〜１２４は、それぞれオペランドスタックとして割り当てるレジスタ群の開始レジスタ番号、終了レジスタ番号を指定するフィールドであり、これらの番号の範囲に含まれるレジスタがすべてオペランドスタックとして本数可変に割り当てられ、論理的にリングバッファを構成する。特に制限されないが、オペランドスタックに割り当てられたレジスタの内容は、ソフトＶＭ内の命令実行により破壊されないよう、ソフトＶＭ内でレジスタの内容を退避・回復する必要がある。また、ハードウェア実行をサポートするバイトコードに依存するが、バイトコード実行中にオペランドスタックの有効エントリの不足、および空きエントリの不足が同時に発生しないことを保証するため、４本以上のレジスタをオペランドスタックに割り当てることが望ましい。
【００２１】
フィールド１２５〜１２９は、それぞれ所定の内部状態、Ｊａｖａプログラムカウンタ、ディスパッチテーブルアドレス、Ｊａｖａオペランドスタックポインタ、ローカル変数ポインタを格納するレジスタのレジスタ番号を指定するフィールドである。特に制限されないが、これらのレジスタの内容は、ソフトＶＭ内の命令実行により破壊されないよう、ソフトＶＭ内でレジスタの内容を退避・回復する必要がある。
【００２２】
制御レジスタ１２０は、ハードウェアによりバイトコードを実行する際に参照されるすべてのレジスタを指定するが、ＣＰＵ２０の命令セットアーキテクチャにより、例えばＲ０レジスタを暗黙的にスクラッチレジスタに割り当ててもよい。
【００２３】
また、制御レジスタ１２０の設定により指定されなかったレジスタは、ハードウェアによりバイトコードを実行する際に参照されず、その内容もハードウェアによるバイトコード実行中に更新されることがないため、例えばソフトＶＭ内で使用される所定の変数を、制御レジスタ１２０で指定されないレジスタに格納し、ソフトＶＭによるバイトコード実行性能を向上させることが可能となる。
【００２４】
制御レジスタ１２０は、レジスタの割り当てを指定できればよいので、例えばＲＡＭ、不揮発性メモリで実現してもよい。また、特定のＶＭバージョンやＪａｖａアプリケーションに特化して最適化された、レジスタの割り当てを可変とする必要がないハードウェアを提供する場合は、ハードワイヤードで実現してもよい。
【００２５】
図３に、制御レジスタ１２０の設定により、レジスタファイルの一部をオペランドスタックに割り当てた場合のオペランドスタック格納状態の例を示す。図３（ａ）は、有効なオペランドスタックの連続であり、ｓ０、ｓ１、ｓ２…はそれぞれオペランドスタックの先頭、先頭から１エントリ下、先頭から２エントリ下の内容を示す。一方、図３（ｂ）は、ソフトウェア上は連続しているオペランドスタックのうち、ｓ０〜ｓ３がオペランドスタックに割り当てられた５本のレジスタ２００に、ｓ４以降がメモリ上のスタック領域２１０にそれぞれ分割して格納され、さらにレジスタ２００には空きエントリ２０１が存在する状態を示す。ここで、Ｒｓ０〜Ｒｓ３は、それぞれオペランドスタックの先頭〜先頭から３エントリ下に割り当てられたレジスタを参照するため、命令変換制御部１１０において使用される識別子である。なお、図３においては、ソフトウェア上の特定のスタックエントリｓｋは、レジスタ２００、もしくはメモリ上のスタック領域２１０のいずれか一方にのみ存在するが、双方に存在するように構成してもよい。また、ソフトウェア上の有効なスタックエントリが、オペランドスタックに割り当てられたレジスタの本数以上の場合に、必ずレジスタ２００の全エントリが有効であるように構成してもよいことは言うまでもない。
【００２６】
制御レジスタ１２０の設定に基づき、命令変換制御部１１０はレジスタ上のオペランドスタックを管理する。すなわち、前記識別子Ｒｓ０〜Ｒｓ３からオペランドスタックに割り当てられたレジスタ番号へ変換するとともに、命令フェッチ部２１から供給されたバイトコードを実行するために必要となる有効なオペランドスタックの格納されたエントリの確保、もしくは有効なオペランドスタックの格納されてないエントリ、すなわち空きエントリの確保を行う。
【００２７】
図４に、本発明における命令変換制御部１１０の実施例を示す。先頭位置ポインタ３００（Ｐｔｏｐ）、底位置ポインタ３０１（Ｐｂｏｔ）は、それぞれレジスタ上の有効なオペランドスタックエントリのうち、先頭位置および底位置を識別するポインタであり、０〜（オペランドスタックに割り当てられたレジスタ数−１）の範囲の値をとる。特に制限されないが、先頭位置ポインタおよび底位置ポインタは、少なくともいずれか一方のみ存在すればよい。有効エントリ数３０２（Ｎｖｓｔ）は、レジスタ上の有効なオペランドスタックエントリ数を示す。スタック制御部３１０には、前記先頭位置ポインタ３００、底位置ポインタ３０１、有効エントリ数３０２、および命令変換テーブル１００との間のインタフェース３２０、制御レジスタ１２０との間のインタフェース３２１が接続される。前記インタフェース３２０は、特に制限されないが、バイトコード実行に必要なレジスタ上の有効なオペランドスタックエントリ数Ｓｍｉｎ、バイトコード実行前後でのオペランドスタックエントリ数の差Ｓｄｉｆ、識別子Ｒｓ０〜Ｒｓ３により指示されるリネーム前ソースレジスタ番号ＲＮｓｖ、およびリネーム前デスティネーションレジスタ番号ＲＮｄｖ、前記リネーム前ソースレジスタ番号、リネーム前デスティネーションレジスタ番号をそれぞれリネームしたソースレジスタ番号ＲＮｓ、およびデスティネーションレジスタ番号ＲＮｄを含む。更に望ましくは、前記インタフェース３２０は、バイトコード実行に必要なレジスタ上の有効なオペランドスタックエントリ数が不足している場合に命令変換テーブル１００に対し所定の動作を要求する信号、およびバイトコード実行に必要なレジスタ上の空きオペランドスタックエントリ数が不足している場合に命令変換テーブル１００に対し所定の動作を要求する信号を含む。命令変換制御部１１０は以下の処理を行う。
【００２８】
（１）スピルイン要求制御：前記有効エントリ数３０２が、バイトコード実行に必要な最低数Ｓｍｉｎ以上であるかどうかを判定する。更に望ましくは、最低数未満の場合には、メモリ上の先頭位置にあるオペランドスタックエントリの内容をレジスタ上の空きオペランドスタックエントリに転送（以下、スピルイン動作とする）し、レジスタ上の有効なエントリ数を増加させるため、命令変換テーブル１００に対し、インタフェース３２０を介して所定の要求信号（スピルイン要求信号）を出力する。
【００２９】
（２）スピルアウト要求制御：制御レジスタ１２０により設定されるオペランドスタックに割り当てるレジスタ数、および前記有効エントリ数３０２の差として定義されるレジスタ上の空きオペランドスタックエントリ数が、バイトコード実行前後でのオペランドスタックエントリ数の差Ｓｄｉｆ以上であるかどうかを判定する。更に望ましくは、最低数未満の場合には、レジスタ上の底位置にあるオペランドスタックエントリの内容をメモリ上の先頭位置にあるオペランドスタックエントリの隣にある空きオペランドスタックエントリに転送（以下、スピルアウト動作とする）し、レジスタ上の空きエントリ数を増加させるため、命令変換テーブル１００に対し、インタフェース３２０を介して所定の要求信号（スピルアウト要求信号）を出力する。
【００３０】
（３）レジスタリネーム処理：命令変換テーブル１００がデコードしたリネーム前ソースレジスタ番号ＲＮｓｖ、リネーム前デスティネーションレジスタ番号ＲＮｄｖを受け、それぞれ対応するソースレジスタ番号ＲＮｓ、デスティネーションレジスタ番号ＲＮｄを命令変換テーブル１００に対して出力する。なお、特に制限されないが、本レジスタリネーム処理に、バイトコード実行に必要なレジスタ上の有効なオペランドスタックエントリ数Ｓｍｉｎ、あるいはバイトコード実行前後でのオペランドスタックエントリ数の差Ｓｄｉｆのうち、少なくとも一方を利用してもよい。
【００３１】
（４）状態更新処理：スピルイン動作、スピルアウト動作、またはバイトコード実行の完了時、先頭位置ポインタ３００、底位置ポインタ３０１、および有効エントリ数３０２の内容を更新する。
【００３２】
なお、特に制限しないが、スピルイン要求信号およびスピルアウト要求信号は、必ず一方のみがアサートされるよう命令変換制御部１１０を構成してもよいし、両方がアサートされた場合には命令変換テーブル１００内で優先度判定を行うよう構成してもよい。
【００３３】
図５に、リネーム処理の動作例を示す。本動作例においては、（ｂ）に示すように、制御レジスタ１２０の設定によりレジスタのうちＲ２〜Ｒ６がオペランドスタックとして割り当てられ、リングバッファを構成する。命令変換制御部１１０の内部状態である先頭位置ポインタ３００、底位置ポインタ３０１は、特に制限されないが、それぞれ指示する対象エントリがオペランドスタックとして割り当てられたレジスタのうち、最も番号の小さいエントリから順に値０、１、…の値をとるものとする。（ｂ）に示す命令変換制御部１１０の内部状態、すなわち、先頭位置ポインタ３００、底位置ポインタ３０１、有効エントリ数３０２の値がそれぞれ１、３、４であることは、レジスタ上のスタック先頭エントリ、スタック底エントリがそれぞれＲ３、Ｒ５であり、スタック先頭から順にＲ３、Ｒ２、Ｒ６、Ｒ５の４エントリに有効なオペランドスタックが格納されていることを示す（Ｒ４の内容は無効である）。このとき、命令変換制御部１１０は、ソースレジスタ番号、デスティネーションレジスタ番号それぞれについて、（ａ）に示すリネーム動作を行う。すなわち、リネーム前レジスタ番号ＲＮｓｖ（またはＲＮｄｖ）としてＲｓ０、Ｒｓ１、Ｒｓ２、Ｒｓ３を示す識別子を受け、対応するレジスタ番号ＲＮｓ（またはＲＮｄ）としてＲ３、Ｒ２、Ｒ６、Ｒ５を示す識別子を命令変換テーブル１００に対し出力する。なお、特に制限されないが、本レジスタリネーム処理に、Ｓｍｉｎ、あるいはＳｄｉｆのうち少なくとも一方を利用し、前記リネーム動作例と異なる動作をしてもよい。
【００３４】
図６に、ポインタ更新の動作例を示す。本動作例においては、バイトコードの実行によりオペランドスタックエントリが２増加する。このとき、バイトコード実行前後の先頭位置ポインタ３００、底位置ポインタ３０１、有効エントリ数３０２の値が（ｂ）に示すように変化し、対応するオペランドスタック格納状態は（ａ）に示すように変化する。ここで、先頭位置ポインタ３００および底位置ポインタ３０１は、０〜（オペランドスタックに割り当てられたレジスタ数−１）のいずれかの値をとるよう命令変換制御部１１０を構成するので、先頭位置ポインタ３００の値がラップアラウンドされていることに注意されたい。このラップアラウンド処理の必要性は、オペランドスタックに割り当てるレジスタ数が固定されている場合、ポインタの状態変化の組み合わせが限られているため比較的容易に判定することが可能である。ところが、本実施例のように割り当て数を可変とする場合、その組み合わせが急激に増大することにより判定論理が複雑となり、特に高周波数動作が必要な情報処理装置においては、判定論理が動作周波数を制限する可能性があるという問題が発生する。この問題は、例えば先頭位置ポインタ３００および底位置ポインタ３０１の両方を備え、判定論理の複雑さを緩和することにより解決できる。
【００３５】
命令変換テーブル１００は、命令フェッチ部２１から供給されたバイトコードから、該バイトコードの実行に必要なレジスタ上のオペランドスタックエントリ数Ｓｍｉｎ、バイトコード実行前後でのオペランドスタックエントリ数の差Ｓｄｉｆ、リネーム前ソースレジスタ番号ＲＮｓｖ、およびリネーム前デスティネーションレジスタ番号ＲＮｄｖをデコードする。さらに、命令変換制御部１１０が出力するソースレジスタ番号ＲＮｓおよびデスティネーションレジスタ番号ＲＮｄを利用し、固有命令列を出力する。更に望ましくは、命令変換テーブル１００は、命令変換制御部１１０が出力するスピルイン要求信号、またはスピルアウト要求信号を受理すると、それぞれ命令フェッチ部２１が供給するバイトコードから変換された命令ではない、所定のメモリロード命令、メモリストア命令を出力する。なお、本実施例においては、スピルイン要求信号に対し、スピルアウト要求信号の方がより優先度が高いことを特徴とする。
【００３６】
図７に、命令変換部２２におけるバイトコード変換処理フローの概要を示す。所定の手段によりバイトコード変換処理が起動（ステップ４００）されると、命令変換制御部１１０は、その内部状態および命令変換テーブル１００から供給されるデコード結果に基づき、スピルイン要求信号およびスピルアウト要求信号を生成する。スピルアウト要求が発生（ステップ４０１）すると、命令変換テーブル１００は所定のスピルアウト処理（ステップ４１０）を行う。スピルアウト要求が発生せず、かつスピルイン要求が発生（ステップ４０２）すると、命令変換テーブル１００は所定のスピルイン処理（ステップ４１１）を行う。スピルアウト要求、スピルイン要求いずれも発生しない場合、命令変換テーブル１００はバイトコードの実行を開始可能と判断し、命令変換制御部１１０からのリネーム結果を利用しながら該バイトコードの固有命令への展開（ステップ４１２）を行う。該バイトコードの実行が完了すると、命令フェッチ部２１に対し次バイトコードのフェッチ（ステップ４１３）を要求し、次バイトコードの実行を開始する。以下、スピルアウト処理フロー、スピルイン処理フロー、バイトコード実行フローの詳細を説明する。
【００３７】
図８に、スピルアウト処理フローを示す。スピルアウト処理が開始（ステップ５００）されると、命令変換テーブル１００は、命令フェッチ部２１から供給された実行中のバイトコードから変換された命令ではなく、レジスタ上の底位置ポインタ３０１が示すオペランドスタックエントリをメモリにストアするためのメモリストア命令を出力（ステップ５０１）する。ここで、特に限定されないが、前記メモリストア命令はユーザがプログラム可能な固有命令、もしくはユーザがプログラム不可能なスピルアウト処理専用の固有命令であり、メモリへストアすべきレジスタのレジスタ番号は、ソースレジスタ番号ＲＮｓまたはデスティネーションレジスタ番号ＲＮｄとして、命令変換制御部１１０から命令変換テーブル１００に供給される。前記メモリストア命令の出力が完了すると、命令変換制御部１１０は、現在の有効エントリ数３０２に応じ（ステップ５０２）、内部状態である底位置ポインタ３０１および有効エントリ数３０２の内容を適切に更新（ステップ５０３〜５０４）し、スピルアウト処理が完了（ステップ５０５）する。
【００３８】
図９に、スピルイン処理フローを示す。スピルイン処理が開始（ステップ６００）されると、命令変換テーブル１００は、命令フェッチ部２１から供給された実行中のバイトコードから変換された命令ではなく、メモリのオペランドスタックエントリをレジスタ上の底位置ポインタ３０１が示すエントリ（有効エントリ数３０２が０の場合）、もしくは底位置ポインタ３０１の内容を１デクリメントした値が示すエントリ（有効エントリ数３０２が０でない場合）にロードするためのメモリロード命令を出力（ステップ６０１）する。ここで、特に限定されないが、前記メモリロード命令はユーザがプログラム可能な固有命令、もしくはユーザがプログラム不可能なスピルイン処理専用の固有命令であり、メモリからロードすべきレジスタのレジスタ番号は、ソースレジスタ番号ＲＮｓまたはデスティネーションレジスタ番号ＲＮｄとして、命令変換制御部１１０から命令変換テーブル１００に供給される。前記メモリロード命令の出力が完了すると、命令変換制御部１１０は、現在の有効エントリ数３０２に応じ（ステップ６０２）、内部状態である底位置ポインタ３０１および有効エントリ数３０２の内容を適切に更新（ステップ６０３〜６０４）す、スピルイン処理が完了（ステップ６０５）する。
【００３９】
図１０に、バイトコード実行処理フローを示す。バイトコード実行開始前に、実行に必要な有効なオペランドスタックエントリ、空きオペランドスタックエントリとも確保されていることに注意されたい。バイトコード実行が開始（ステップ７００）されると、命令変換テーブル１００は該バイトコードから変換される、Ｌ個の固有命令からなる固有命令列を順に供給（ステップ７０１〜７０４）する。この固有命令列は、オペランドスタックのロード、ストア命令を含まず、バイトコード実行結果を生成するための命令のみで構成され、オペランドスタックのロード、ストアは、スピルイン要求またはスピルアウト要求が発生した場合のみ、所定の命令を挿入、実行することにより実現される。このため、スピル処理専用ハードウェアが不要になり、さらに命令変換テーブル１００の論理規模を最小化するとともに、バイトコード実行性能を向上させることができる。特に限定されないが、バイトコード実行中、命令変換制御部１１０の内部状態である先頭位置ポインタ３００、底位置ポインタ３０１、および有効エントリ数３０２はその内容を保持する。固有命令列の出力が完了すると、命令変換制御部１１０は、現在の有効エントリ３０２およびバイトコード実行前後でのオペランドスタックエントリ数の差Ｓｄｉｆに応じ（ステップ７０５）、内部状態である先頭位置ポインタ３００および有効エントリ数３０２の内容を適切に更新（ステップ７０６〜７０７）する。
【００４０】
【発明の効果】
上記手法により、情報処理装置の処理速度を向上させることができる。また、情報処理装置のハードウェア規模を削減できる。
【図面の簡単な説明】
【図１】本発明によるプロセッサのブロック図。
【図２】制御レジスタ１２０の実施例。
【図３】オペランドスタック格納状態の例。
【図４】命令変換制御部１１０の実施例。
【図５】リネーム処理の動作例。
【図６】ポインタ更新の動作例。
【図７】バイトコード変換処理フロー概要。
【図８】スピルアウト処理フロー。
【図９】スピルイン処理フロー。
【図１０】通常処理フロー。
【符号の説明】
１０：命令メモリ、２０：ＣＰＵ、３０：データメモリ、１００：命令変換テーブル、１１０：命令変換制御部、１２０：制御レジスタ、２００：オペランドスタックとして割り当てられたレジスタ群、２１０：メモリ上のスタック領域、３００：先頭位置ポインタ、３０１：底位置ポインタ、３０２：有効エントリ数。
【図１】
2004133641.tif 000003
【図２】
2004133641.tif 000004
【図３】
2004133641.tif 000005
【図４】
2004133641.tif 000006
【図５】
2004133641.tif 000007
【図６】
2004133641.tif 000008
【図７】
2004133641.tif 000009
【図８】
2004133641.tif 000010
【図９】
2004133641.tif 000011
【図１０】
2004133641.tif 000012