(57)【要約】データプロセッサは、表の飛び越しのタスクと、カウンタ又はタイマなどの流動値によって制御されるスイッチングのスレッド若しくはタスクとを結合することによって、効率的なインタプリタ機能をインプリメントすべく命令（ジャバＳＷ）を実行する。この命令の実行は常にフローの変更を必要とする。一実施形態において、命令は命令実行完了のためにハードウェアのアクセラレータに信号を送らせる。さらに、特定のバイトコードに関連したエミュレーションコードを含むメモリ表は、別個の記憶装置の使用によって多数の指定バイトコードについて圧縮される。さらに、メモリ表の同一部分の使用は、異なるバイトコードの実行に関連して行われる。ジャババイトコードのコンテキストが説明される一方で、この命令はあらゆるプログラミング言語及びプロセッサアーキテクチャに使用し得る。
2004527824.tif 000002
【特許請求の範囲】
【請求項１】
第１のアドレスにある第１の命令を取得するための手段、及びデータ処理システムをもって前記第１の命令を実行するための手段からなるデータ処理システムでのプログラム実行方法であって、
第１の命令を実行する工程と、
前もって定義した値との値の比較が第１の結果を有する場合に、飛び先アドレスとして前記第１のアドレスに隣接していない第２のアドレスを提供し、及び、前もって定義した値との値の比較が第２の結果を有する場合に前記飛び先アドレスとして前記第１のアドレスに隣接していない第３のアドレスを提供することによって、１つの値に基づいた飛び先アドレスを選択する工程と、
飛び先アドレスへのプログラム実行へ転送することによって、前記第１の命令の実行に応じた制御の変化を常に前記プログラム実行にインプリメントする工程とからなる、プログラム実行方法。
【請求項２】
前記第１の結果は前記値が前もって定義した値より大きい旨の比較判定であり、及び前記第２の結果は、前記値が前もって定義した値以下である旨の比較判定である、請求項１に記載の方法。
【請求項３】
プログラム実行の間に減少されるアドレス値を有したプログラムカウンタの維持によって飛び先アドレスを生成する工程と、アドレス値の低位の前もって定義した数のビットを切り捨てし、及び飛び先アドレスを生成すべく結果をオフセットと比較する工程とをさらに有する請求項１に記載の方法。
【請求項４】
実行のための手段によって実行される処理命令の格納のために、前もって定義した範囲のアドレスを有する記憶装置を提供する工程をさらに有し、前記処理命令はグループに配置され、各グループはプログラムの前もって定義した処理コードに関連づけられている請求項１に記載の方法。
【請求項５】
前もって定義した数量の命令スロットの部分に記憶装置を構築する工程をさらに有し、前記部分のそれぞれの所定量は命令を記憶するために専用されている請求項４に記載の方法。
【請求項６】
前記記憶装置の部分のうちの１つから前もって定義した範囲のアドレスの外側にあるアドレスへ処理命令の実行を送信し、続いてプログラム実行を前記記憶装置の部分のうちの他の１つの前もって定義した範囲の部分へプログラム実行を転送する工程をさらに有する請求項４に記載の方法。
【請求項７】
複数のプログラム命令を格納するためのメモリと、
同メモリから前記複数のプログラム命令を取得し、及び選択的に前記複数のプログラム命令を実行するために、データバスを介して前記メモリに接続されたプロセッサと、
前記プロセッサによって実行される複数の処理命令を格納するための記憶装置と、前記複数の処理命令は、各グループが前記複数のプログラム命令のうちの前もって定義した１つに関連づけられるように複数のグループに配列されていることと、
前もって定義したアドレスでの前もって定義した処理命令を実行するとともに、前もって定義した値との値の比較が第１の結果を有する場合に、飛び先アドレスとして前記第１のアドレスに隣接していない第２のアドレスを提供し、及び、前もって定義した値との前記値の比較が第２の結果を有する場合に前記飛び先アドレスとして前記第１のアドレスに隣接していない第３のアドレスを提供することによって、１つの値に基づいた飛び先アドレスを選択するプロセッサとからなり、
前記前もって定義した処理命令の実行は、常に制御の変化をプログラム実行にインプリメントするデータ処理システム。
【請求項８】
前記プロセッサは、
前記プログラム命令を受信するための命令レジスタと、
前記プログラム命令を特定の処理コード値へ複合化するために前記命令レジスタに接続された命令デコーダと、
前記特定の処理コード値に応じて制御信号を提供するために前記命令デコーダに接続された制御回路と、
前記制御信号を受信し、及び飛び先アドレスを生成するために制御回路に接続されたアドレス発生回路と、
前記回路に応じてオペランドを格納するためにアドレス発生回路に接続されたレジスタと、
アドレス発生回路及び制御回路に接続された論理演算ユニットと、同論理演算ユニットはレジスタによって格納されたオペランドを処理することとからなる、請求項７に記載のデータ処理システム。
【請求項９】
前記制御回路は、前もって定義したグループサイズの第１の構造、又は前もって定義したグループサイズの第２の構造のいずれかを選択する、ユーザによる決定が可能な制御信号をさらに有する、請求項８に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理システムに関する。より詳細には、データ処理命令の実行を行うソフトウェアインタプリタを有したシステムに関する。
【背景技術】
【０００２】
ジャバ（Ｊａｖａ（登録商標））のプログラミング言語は、サンマイクロシステムズ社によって開発されたオブジェクト指向の高度なプログラミング言語であり、小さなパーソナルコンピュータからスーパーコンピュータまで及ぶ多様なコンピュータ上で実行されるべく十分に他のシステムに移植可能に設計してある。ジャバ（及び他の言語）で書かれた計算機プログラムは、ジャバ仮想マシン（ＪＶＭ）によって実行のための仮想マシン命令へとコンパイルされ得る。一般に、ジャバ仮想マシンは仮想マシン命令を復号化し、及び実行するインタプリタである。
【０００３】
ジャバ仮想マシンのための仮想マシン命令は、それらが１つ以上のバイトを有することを意味する、バイトコードである。バイトコードは、「クラスファイル」と呼ばれる特別のファイル形式で格納される。バイトコードに加えて、クラスファイルは他の付随的な情報と同様に記号表も有する。
【０００４】
ジャババイトコードとして１つ以上のクラスファイルで体系化された計算機プログラムは、プラットフォームに依存しない。その計算機プログラムは、ジャバ仮想マシンのインプリメントを実行可能なすべてのコンピュータ上で変更されることなく、作動され得る。ジャバ仮想マシンは「一般的な」コンピュータのソフトウェアエミュレータであるが、このことはジャバ仮想マシンの計算機プログラムがプラットフォームに依存しないことを可能にする主な要因である。
【０００５】
ジャバ仮想マシンは、ソフトウェアインタプリタとして広くインプリメントされている。従来のインタプリタは、実行の間にインタープリットされたプログラムの命令のうちの仮想命令を一度に１つの命令ずつ復号化し、及び実行する。他方ではコンパイラは、実行よりも前に仮想マシン命令をそれぞれの機械語命令に変形する結果、符号化は実行の間に仮想マシン命令上で行なわれることがない。従来のインタプリタは、命令に遭遇し、その命令を実行する前に繰り返し各命令をデコードするため、インタープリットされたプログラムの実行はコンパイルされたプログラムより典型的には遅い。コンパイルされたプログラムは、それぞれのマシン或いはコンピュータシステム上でコンパイルされたプログラムのそれぞれの機械語命令を直接実行できるためである。
【０００６】
インタープリットされたプログラムを復号化し、及び実行するためにソフトウェアインタプリタを実行させなければならないため、ソフトウェアインタプリタは、インタープリットされたプログラムには利用可能にならない資源（例えばメモリ）を消費する。これは、それぞれの機械語命令として実行することにより、ターゲットコンピュータ上で直接実行され得、そのため一般に、インタープリットされたプログラムより少ない資源を必要とする、コンパイルプログラムと対照的である。
【０００７】
従って、インタープリットされる計算機プログラムの実行速度を増加させるための新しい技術に対する必要性がある。さらに、それらが要求する資源の点から効率的なインタプリタを提供する必要がある。
【０００８】
多数の埋め込みデバイスは、ジャバ言語のプラットフォームに依存せず遍在可能な性質、及びジャバ仮想マシンのインプリメントの発展に起因してジャバを利用可能とするものになってきている。多数の低廉に埋め込まれたシステムは、専用ジャバプロセッサ又はハードウェアのアクセラレータ（例えば個別のコプロセッサ）のハードウェアオーバヘッドを回避するためにＪＶＭとしてジャバ処理機能をインプリメントすることが望ましい。ＪＶＭをインプリメントし、及びジャバプログラムを実行することへの単純なアプローチは、ソフトウェアのインタプリタの使用を介することにある。
【０００９】
インタプリタは、解釈された命令ストリームの命令取り出し、復号化及び実行の標準的機能を行う点において、プロセッサのソフトウェアバージョンをインプリメントする。インタプリタは、取り出し、デコード及び実行のステップを繰り返すプログラムループとして典型的にインプリメントされる。
【００１０】
ジャバ命令（バイトコード）が取り出されることにより、インタプリタは仮想プログラムカウンタ（ジャバＰＣ）を維持し、各解釈されたジャバ命令の復号化は、大きなケース文（スイッチ文）によってバイトコードの個々の２進法符号化に対応する節で行なわれる。各節の内のコードは、バイトコードによって定義された実際の処理を行う。
【００１１】
バイトコードを取り出し、復号化する必要があるため、各バイトコードの処理に関連付けられたオーバヘッドがある。多くのジャバ命令（バイトコード）は単純な処理を行うため、シーケンスの取り出しと復号化の部分に関連したオーバヘッドは、実行時間全体の大きな割合を占め得る。
【００１２】
ジャバ環境が複数の実行スレッドについての概念をサポートするので、インタプリタループの追加の機能は、スレッド（又はタスク）スイッチがいつ生じるか決めるために使用されるカウンタを維持することにある。
【００１３】
ジャバ仮想マシンのいくつかのインプリメントでは、スレッドスイッチ判定は実行されたジャババイトコードの数に基づく。インタプリタループが実行するたびに修正され、それを前もって定義した所定値と比較したカウンタ値を維持することによって、インタプリタはスレッドスイッチ論理をもインプリメントすることとなる。カウンタを維持しスレッドスイッチすべき時を決定することはさらに、有意なオーバヘッドを作成する。このオーバヘッドは、ソフトウェアインタプリタの処理効率を有意に限定する。
【発明を実施するための最良の形態】
【００１４】
本発明は、添付の図面によって限定されるものではなく例示のために実施例によって説明され、同一の参照符号は同一の部材を示す。以下の記載において、多数の特定の詳細は、特定の単語、バイト長など、本発明についての完全な理解を提供すべく表現されている。しかしながら、本発明がそのような特定の詳細なしで実行され得ることは、当業者にとって明白である。その他、回路は本発明を不必要に詳細を不明瞭にしないようにブロック図の形態で示されている。大部分において、タイミング考察などに関する詳細は、本発明についての完全な理解を得るために詳細は得るのには必要ではない場合には割愛されているが、当業者の想到する範囲内にある。
【００１５】
用語「バス」は、データ、アドレス、制御又はステータスなどの１つ以上の多種の情報を転送するために使用され得る、複数の信号又は導体を示すために使用される。用語「主張する」及び「否定する」は、それぞれ信号、ステータスビット、又は同様の装置が論理上真、又は論理上偽であることを示すことに言及する時に使用される。論理上真の状態が論理レベル１である場合には、論理上偽の状態は論理レベル０である。また、論理上真の状態が論理レベル０である場合には、論理上偽の状態は論理レベル１である。以下の記載及びダイアグラムにおいて、１６進法は、「0x」をプリペンディング（pre-pending ）することによっていくつかの値について使用される。したがって、数値０×ｆｆは１０進法の値２５５に相当する。
【００１６】
図１は、データ処理システム１０の一実施形態を示し、プロセッサ１２、コプロセッサ１４、コプロセッサ１６、メモリ１８、他のモジュール２０、及びバス２８を介して全て双方向接続される外部バスインタフェース２２を有する。本発明の代替の実施形態は、１つのコプロセッサ１４、２つのコプロセッサ１４，１６、若しくはより多数のコプロセッサ（図示せず）を有していてもよい。外部バスインタフェース２２は、集積回路ターミナル３５を介して外部バス２６に双方向接続されている。メモリ２４は、外部バス２６に双方向接続されている。プロセッサ１２は随意に、集積回路ターミナル３１を介してデータ処理システム１０へ外部へと接続されていてもよい。コプロセッサ１４は、随意に、集積回路ターミナル３２を介してデータ処理システム１０へ外部へと接続されていてもよい。メモリ１８は、随意に、集積回路ターミナル３３を介してデータ処理システム１０へ外部へと接続されていてもよい。他のモジュール２０は、随意に、集積回路ターミナル３４を介してデータ処理システム１０へ外部へと接続されていてもよい。プロセッサ１２は、コプロセッサインタフェース３０を介して、コプロセッサ１４及びコプロセッサ１６の両方に双方向接続される。ジャバコード実行のコンテキストにおける、データ処理システム１０内のプロセッサ１２の特定の処理を下記に参照する。
【００１７】
図２，３を参照して、ジャバプログラムの命令の従来の実行方法の例を示す。公知のインタプリタにおける一般的な重要な性能の問題は、命令フローを変更すること、及び各エミュレートされたジャババイトコード間のインタプリタオーバヘッドルーチンを実行することにおいて、ソフトウェアによって相当量の時間が費やされるという事実である。図２の命令実行ステップの例はこのポイントを強調する。図２のステップ１〜７のすべての識別されたステップは、ソフトウェアプログラムのフロー変更を必要とすることに注意すべきである。従来技術において、インタプリタオーバヘッド５４などの１つ以上のソフトウェアルーチンは、反復して飛ばされる必要があり、これは追加のインタプリタオーバヘッドを作成する。図３は図２と同一のソフトウェアルーチンを示すが、インタプリタオーバヘッドルーチンを行うために必要な時間とソフトウェアの量の関係を、ａ，ｆ，ｃなどの多様な関数のためのエミュレーションコードを実行するために必要なより少ない時間及びソフトウェアと比較として、より明白に示す。インタプリタオーバヘッドソフトウェアはジャババイトコードの取り出し、復号化、及びディスパッチを含む。ディスパッチは、エミュレートされたジャババイトコードに対応するエミュレーションコードに飛ばすために行なわれたステップである。インタプリタオーバヘッドは、スレッドスイッチングがいつ生じるか判定するためにカウンタ機能を行うためソフトウェアをさらに有することに注意する。インタプリタオーバヘッド５４のソフトウェアは、更新させられておかれなければならないジャバ仮想マシンのための仮想プログラムカウンタも有することに注意する。図２，３は、ジャバプログラムバイトコード、及び現実にジャバプログラムが必要とするバイトコードを実行するためにプロセッサ（例えば図１のプロセッサ１２）によって必要とされるエミュレーションコード表の両方を示すことに注意する。プロセッサ１２によって実行されるジャババイトコードごとについて、ジャババイトコードのエミュレーションを行うために必要とされるコードが２つのコンポーネントを必要とすることに注意する。第１のコンポーネントは現実に関数（ａ，ｆ，ｃ）を実行するためのコードであり、第２のコンポーネントは、インタプリタオーバヘッド５４のソフトウェアにエミュレーションコードの実行を返信するソフトウェアルーチンである。図３を参照すると、太線で示されたインタプリタオーバヘッドソフトウェアはジャババイトコードを実行するために必要とされるソフトウェアの非常に重要な部分となり得る。その結果、エミュレーションコードのインタプリタオーバヘッド部分を実行するために必要なソフトウェアと時間の量を効率的に減らすシステム及び方法が開示される。図２から、各関数（ａ，ｆ，ｃ）を実行するために必要なエミュレーションコードは、サイズが著しく異なることがあり典型的には異なっており、及び多くの場合比較的少量のコードである点に注意されたい。対照的に、特定のジャババイトコードを実行するために必要なエミュレーションコードと比較して、インタプリタオーバヘッド５４のソフトウェアは相当量のコードである。
【００１８】
図４を参照すると、ジャバプログラム６０、及び本発明の一実施形態により図１のプロセッサ１２によって実行され得るその対応するエミュレーションコード表６２の一実施例が示される。図４に示された本発明のプログラム実の行実施例では、各ジャババイトコードはエミュレーションコード表６２に対応するグループを有することに注意する。一般的な感覚では、本発明はジャバプログラムにのみ使用することに限定されていないので、各グループはプログラムの所定の処理コードに関連づけられる。バイトコードａ，ｆ，ｃ…のバイトコード実行は、示されるようにステップ１，２，３の順序で、コードのエミュレーションコード表６２中で検索によって生じる。図４に示された本発明の特定の実施例において、エミュレーションコード表６２中の各符号群は、０×０、０×１などのジャババイトコードの１６進法の値によって定義されるように、プロセッサ１２の命令のうちの１６個を含んでいる。１６の数は、未使用のスロットを過度に存在させずに、ほとんどのジャババイトコードをエミュレートするために十分な命令スロットを提供する値に選択されている。いくつかのジャババイトコードは、実行するために１６未満のプロセッサ１２命令を使用し、いくつかはより多く使用する。その結果、本発明の代替の実施形態は、各グループとして、プロセッサ１２の命令スロットをいくつ使用してもよいことがわかる。さらに、グループの数は、より高レベルの言語によって必要とされたバイトコードの数によって変化し得る。さらにエミュレーションコードによって飛ばされなければならない個別のルーチンとしてインタプリタオーバヘッドソフトウェアがもはや必要とされないことに注意されたい。図２に示されるような従来技術において必要とされたインタプリタオーバヘッドは、「ジャバＳＷプラスオーバヘッド」とラベルを付けられる各グループで使用されるコードの１つのブロックによって置換された。コードの「ジャバＳＷプラスオーバヘッド」ブロックは、プロセッサ１２によって実行されたエミュレーションコードの全体にわたって配信されることに注意されたい。図４に示されたソフトウェアフロー、及びエミュレーションコード表は、図２に示された従来技術と比較すると、フローステップのより少数の変更を有することに注意されたい。フローの変更は制御の変更の１つの形式であること、及び飛ばす命令をインプリメントする代わりに制御の変更が、ユーザとスーパバイザのモード間に移るようにインプリメントされる場合に、行なわれ得る処理が別の処理と成り得ることが理解される。本発明によって提供されるフローステップの変更の減少は、相当量のソフトウェアオーバヘッドを節約する。図２，４の両方の中で示された矢印が実行のために追加のソフトウェアを必要とすることに注目することは重要である。図４に示された実施形態において各ジャババイトコードには１６個の命令スロットを割り付けられているが、いくつかの特定のジャババイトコードは必ずしも１６個の全ての命令スロットを必要とするとは限らない点に注意する。他方では、いくつかのジャババイトコードは、エミュレーションコードにおいて１６個を越える命令スロットを要求する。この実施例は図５で説明さ��る。従って、図４は、図１のプロセッサ１２によって実行可能なエミュレーションコード表６２を示す。図示された形式では、コードエミュレーション表６２は、１６進法のアドレス０×０から０×ＦＦによって識別されるような各ジャババイトコードのエミュレーションに割当てられた２５６個の等しい大きさのグループを有する。従って、ジャバプログラムがプロセッサ１２によって実行される場合、図４に示されたエミュレーションコード表はより連続したフローを提供する。このより連続したフローは、従来技術（図２を参照）において必要だった、相当数のプログラムフロー変更のために必要とされていたソフトウェアオーバヘッドの量を減少させる。
【００１９】
図５を参照する。図５は、グループサイズがエミュレーションコード表６３に可能とするより多くのエミュレーションコードを必要とするジャババイトコードのために本発明がどのように使用され得るかを示している。エミュレーションコード表６３が図５に示される。図５に示される例では、ステップ１として、矢印によって示されたアドレス０×６７でエミュレーションコードの最初の部分が開始することが仮定される。ステップ２は、１６個の命令スロットが全て使用されたが、対応するバイトコードは、さらなるエミュレーションコードを必要とすることを指示している。従って、ステップ２は、エミュレーションソフトウェアフローがジャババイトコードの実行を終了するためにコードの新しく利用可能なブロックに移行する必要があることを示す。図５に示された実施例において、ステップ２は、ジャババイトコードの実行を終了するためにコードのブロックが見つけられることがある、エミュレーションコードの元のエミュレーションコード表６２の末尾を過ぎた場所へ飛ばす形態でのプログラム実行の転送を示している。この追加のコードは任意のサイズであってよく、システム資源によってのみ制限を受ける。追加のコードは、残っているジャババイトコードエミュレーションコードの記憶が実行されることを可能にすべく利用可能な資源が存在するのであれば、システムのいかなる場所にも格納され得る。従って、選択された飛び先アドレスはデータ処理システム内のアドレスの全範囲よりも小さい、所定の範囲（0 ×0 〜0 ×FF）のアドレス内にあってもよく、或いは、選択された飛び先アドレスは、利用可能な資源が存在する記憶のためのアドレスの所定範囲の外部であってもよいことが理解されるべきである。ステップ３は、一旦特定のジャババイトコードのためのエミュレーションコードが終了したならば、エミュレーションコードは、「ジャバＳＷプラスオーバヘッド」ソフトウェアが開始する位置の２５６個のグループ内のグループのうちのいずれへも飛ばすことで再送が可能である。従って、エミュレーションコード表６３の末尾にて、ジャババイトコードエミュレーションを終了するために必要なさらなるソフトウェアは、「ジャバＳＷプラスオーバヘッド」ソフトウェアを含む必要はない。この処理上の特徴は、ジャババイトコードがエミュレーションコード表６３の中で１つのグループのみを使用した場合にはエミュレートできない時に、少なくとも１つのグループの「ジャバＳＷプラスオーバヘッド」ソフトウェア部分の再使用を可能とする。
【００２０】
図６を参照すると、各グループに配信された命令スロットの数の選択は重要な問題である。選択は通常、エミュレーションコード表の全体サイズ、及び、グループサイズを越えてオーバーフローするジャババイトコード数の間のトレードオフに関連する。図６に示された実施形態は１つのグループ当たり１６個の命令スロットを使用するが、本発明の代替の実施形態は命令スロットの異なる数をグループサイズとして最適とすることもある。固定されたグループサイズを有することは、各エミュレートされたバイトコードのエミュレーションコードを指すために使用されるアドレス計算を非常に単純化することに注意されたい。これは、プロセッサ１２で各命令について演算するための相当量の時間となり得、データ処理システム１０全体の性能に著しく影響し得る。
【００２１】
さらに図６を参照すると、データ処理システム１０の性能を改善するためにデータ処理システム１０（図１、コプロセッサ１４，１６を参照）の一部として１つ以上のハードウェアによるアクセラレータが使用されてもよい。コプロセッサは、使用可能なハードウェアアクセラレータのうちの単なる一種類である。図６を参照すると、ＩＡＤＤ（整数加算）ルーチンは、ハードウェアのアクセラレータの有無に基づき、エミュレーションコード表がどのように変化するかを示すために、２つの方法で示されている。整数加算の機能は、例示の目的のみにおいて選択されている。図６の「ＩＡＤＤ」ルーチンの左側にあるのは、ハードウェアのアクセラレータが存在しない場合に、プロセッサ１２によって実行され得るソフトウェアのルーチン８０である。右側のコード８２は、ハードウェアのアクセラレータ（例えばコプロセッサ１４）が存在する場合に、プロセッサ１２によって実行され得るルーチンを示す。ジャババイトコードの実行の有意な部分を行うために、ハードウェアがアクセラレータが使用されてもよいことに注意する。図６の左右のコードブロックを比較するとハードウェアアクセラレータが使用される場合、以前にプロセッサ１２によって実行されなければならなかった、ロード及び記憶命令の相当数がもはや必要とされないことは明白である。図８に関してより詳細に記載されるように、ユーザ決定可能な制御信号は、本発明の一実施形態において提供される。この実施形態では、システムユーザに、所定のコードサイズグループの第１のエミュレーション表構造、又は異なる所定のコードサイズグループの別のエミュレーション表構造のいずれかを選択することを可能にする。ハードウェアアクセラレータ及びプロセッサは、通信を行い、及びジャババイトコードの実行を調整するために、ある種類のインタフェース又はハンドシェイクのメカニズムを有する必要があることに注意されたい。図１を参照すると、プロセッサ１２、及びコプロセッサ１４，１６は、コプロセッサインタフェース３０を介して通信する。プロセッサ１２とコプロセッサ１４，１６との間の通信は、スレッドスイッチングがジャバプログラムに生じ得るという事実によって複雑になり得る。ジャバプログラム実行の間に、ソフトウェアの少なくとも１つの部分が、タスクを切り替え、及び別のタスクがプロセッサ１２実行時間の一部を有することを可能にすることが必要か否かを判定するために周期的にチェックする必要がある。このジャワでのソフトウェアのタスク間のスイッチング、又は変更は、スレッドスイッチングと呼ばれる。図１を参照すると、プロセッサ１２は、スレッドスイッチングが生じることか否かに基づいて、有効なジャババイトコードが実行されることになっているかを条件付きでコプロセッサ１４，１６へシグナリングする。この信号はジャバＳＷ命令の実行の一部であり、プロセッサ１２もバイトコードを実行していなければ、コプロセッサがジャババイトコードを実行すべきでないため、スレッドスイッチが行われず、スレッドスイッチが行われるときには、そのときのスレッドが再開されるまで、通常実行されていたジャババイトコードは実行されないまま残される、という事実による条件付きである。コプロセッサインタフェース３０は、プロセッサ１２及びコプロセッサ１４，１６が他方によって行われているソフトウェアフローへの視程を有することを可能にすべく、スヌーピング、又は同報通信をさらに有してもよい。本発明で使用され得る、公知のプロセッサの１つからコプロセッサへのインタフェースに関する特定の情報については、参照によって本明細書に組込まれる米国特許第５，９８３，３３８号を参照することができる。
【００２２】
図６のエミュレーションコード表７２は、各グループが対応するジャババイトコードに割当てられている、２５６個のアドレス可能なグループ（０×０〜０×ｆｆ）を有する。エミュレーションコード表中のジャバスレッドスイッチングをインプリメントするために、エミュレーションコードを探し出すことが望ましい。各グループ内で命令スロットが定数であるにより、スレッドスイッチングソフトウェアのために使用可能な、割り付けられていない記憶場所はエミュレーションコード表７２にはない。従って、スレッドスイッチングコードを探し出すために、１つ以上のグループ内の未使用の命令スロットを使用することが必要である。本発明の一実施形態では、スレッドスイッチングソフトウェアルーチンは、ジャババイトコードゼロ（０）に相当する最初のグループに位置する。このグループが、例えば４つの命令スロットのみを要求する、不処理（ＮＯＰ）命令に割当てられるため、スレッドスイッチングを行うために、ソフトウェアルーチンの少なくとも一部を記憶するために１２個の未使用の命令スロットがある。スレッドスイッチングルーチンが割り付けられたスロット内に適合しない場合、エミュレーションコード表６３について図５で説明されたように、エミュレーションコード表７２の末尾を過ぎた場所へ飛ばされ得る。本発明の代替の実施形態は、エミュレーションコード表７２内の他の場所のスレッドスイッチングを行うためにソフトウェアを設けることがある。スレッドスイッチングソフトウェアを探し出すためにエミュレーションコード表７２中にあるこの第１のグループを使用することは、ハードウェアに、プロセッサ１２でハードウェアを使用して、より単純な方式で実行されるジャバＳＷ命令（さらにここに記載される）の実行することを可能とさせる。
【００２３】
図７は、上記の図４，５のエミュレーション表中で参照された「ジャバＳＷ」命令のさらなる詳細を示している。本発明の一実施形態において、ジャバＳＷ命令は、プロセッサ１２（図１を参照）によって実行される命令である。ジャバＳＷ命令の実行をさらに明確にするため、図１のプロセッサ１２の詳細な部分が、図８においてさらに提供される。図８に、命令レジスタ１１６が示されている。命令デコード１０４は、命令レジスタ１１６の出力に接続された導体１１７を介して、命令レジスタ１１６からプロセッサ１２命令を受信するための入力と、制御回路１０５の入力に接続された出力とを有する。制御回路１０５は、さらに入力１１８にて、実行されるべきジャババイトコードを受信する。制御回路１０５の出力は、マルチプレクサ（Ｍｕｘ）及びコンバイナ１０６の制御入力と、プログラムカウンタ１０８及び他のレジスタ１０９を有するレジスタ１０７の入出力端子と、算術論理演算ユニット（ＡＬＵ）１１０の入出力端子と、アドレス選択ロジック１１１とに、導体１３０を介して接続されている。インクリメント回路１１２はアドレス選択ロジック１１の第１の入力に、導体１２０を介して接続された出力を有する。飛び先アドレス１２１は、アドレス選択ロジック１１１の第２の入力に接続される。除外アドレス１２２は、アドレス選択ロジック１１１の第３の入力に接続され、ブランチアドレス１２３はアドレス選択ロジック１１１の第４の入力に接続される。Ｍｕｘとコンバイナ１０６の出力は、ジャバＳＷプログラムカウンタアドレス１２４の提供のためにアドレス選択ロジック１１１の第５の入力に接続される。導体１３３は、インクリメント回路１１２の入力と、アドレス選択ロジック１１１の出力と、制御回路１０５との間の通信のためのプログラムカウンタ１０８の入出力端子とに接続される。飛び先アドレス１２１、除外アドレス１２２、及びブランチアドレス１２３は、制御回路１０５によって提供される。Ｍｕｘ及びコンバイナ１０６は定数０×８  １００を受信するための入力と、Ｒ４＜＜１と等しい値（１桁だけ左シフトされているレジスタ１０９のレジスタＲ４にある値）を有した１０１入力と、Ｒ４＜＜５と等しい値（５桁だけ左シフトされているレジスタ１０９のレジスタＲ４にある値）を有した入力１０２と、表１０３の外側の入口箇所と、プログラムカウンタ値＋２（ＰＣ＋２）を受信するための入力とを有する。制御回路１０５は、１つ以上の導体１３４によってスイッチスレッドしきい値を受信するためにさらなる入力を有する。
【００２４】
図７を参照すると、ジャバＳＷ命令の一実施形態の処理は、「準（quasi ）Ｃ」コードの形式で記述される。一実施形態では、ジャバＳＷ命令はバイトコードエミュレーションシーケンスに飛び先を生じる。方９２は、このバイトコードエミュレーションシーケンスのアドレスが計算される方法を示している。式９２のブラケット内に入れられた部分は、ジャバＳＷ命令の実行の間にレジスタ１０７のプログラムカウンタ１０８（ＰＣ）にロードされる飛び先アドレスを示す。この値は、図８のＭｕｘ及びコンバイナ１０６によって、導体を介してアドレス選択ロジック１１１へ提供される。式９２の値「ＰＣ＋２」は、プログラムカウンタ１０８がインクリメント回路１１２によって増分された後のプログラムカウンタ値である。この増分は、プロセッサ１２の実行パイプラインの自然なステップとして生ずるため、基底アドレス値として使用するために便利である。本発明の他の実施形態では、増分されていないプログラムカウンタ値ＰＣが代わりに使用されてもよい。その後、増分されたプログラム値は、値０×ｆｆｆｆｅ０００で論理積の処理がされる。このブール演算は、（ＰＣ＋２）の値の下位１３ビットをゼロにする効果がある。生じるアドレスは、エミュレーションコード表７２（図６を参照）中の第１のバイトコード命令グループの第１の命令スロットを指す。本発明のいくつかの実施形態では、論理積が要求されないかもしれないことに注意する。代わりに、値ＰＣ＋２の下位１３ビットは切り捨てられ得る。このポインタ値が切り捨てられない場合、それは、グループサイズに対応する量だけシフトされた、レジスタ１０９のうちの１つのレジスタＲ４に格納されたジャババイトコード値で論理和の処理がされ得る。この記述された処理は、エミュレーション表７２内の正確な場所へと有効に新しいプログラムカウンタアドレスにインデックスを付ける結果、プログラムカウンタレジスタはここでプロセッサ１２によってエミュレートされることになっているジャババイトコードのための正確な命令グループの開始へ向かう。ポインタ値を形成する代替の方法は、単にレジスタＲ４に格納されたジャババイトコード値を備えたＰＣ＋２の上位１８ビットを連結し、次に３２ビットのアドレスを形成すべくその結果に５ビットのゼロをパッドすることである。飛び先アドレスは多様な方法で形成され得る。しかしながら、飛び先アドレスを形成するための多様な技術やその組み合わせにかかわらず、結果は常に、そのときのジャババイトコードに相当するエミュレーションコード表７２（図６を参照）内の正確な命令グループの開始を指すアドレスである。スレッドスイッチングが生じていない場合には、飛び先アドレスを計算するために、ここでも式９２が使用される。文９１が真の場合、スレッドスイッチングは生じない。文９１は、スイッチカウント（ＳＷＣＯＵＮＴ）しきい値（プログラムタスクの変更がデータ処理システムによって増分されるべき時点）が、別のジャバスレッドへの変更を生じさせるべきか否か判定するために掛け合わせられたか否かを測定している。従って文９１は、例えば所定値であるスイッチカウントしきい値を備えたスイッチカウント値などの、値の比較判定を必要とする。文���１が真の場合、第１の結果があり、文９１が真でない場合、第２の結果がある。しかし、文９１が真でない場合には、「条件分岐（else）」、文９３は、プログラムカウンタ１０８に格納される飛び先アドレスを計算するために使用されている式９４に帰着する。式９４におけるＡＮＤ演算が式９２に関して上記されたものと同じＡＮＤ演算であってもよい。しかし、式９４の論理和演算は、スレッドスイッチングソフトウェアを有するエミュレーションコード表９２の部分へインデックスを付けるために使用される。ここでも式９４においてＡＮＤ演算の代わりに切り捨て処理が使用される場合、その切り捨て処理の結果を、０×８で一定であるスレッドスイッチングソフトウェアへのオフセットに連結、又は組み合わせてもよい。文９５は、ジャバＳＷ命令が次にスイッチカウント値（ＳＷＣＯＵＮＴ）を減少させることを示す。本発明のさらなる実施形態は、ダウンカウンタの代わりアップカウンタを使用してもよく、或いはスイッチに遭遇する前に特定の時間を割当てるタイマを備えるなどの他の方法でスレッドスイッチングの追跡記録をしてもよいことは、明らかである。図７に示した実施形態は非常に特殊な方式で飛び先アドレスを選択するが、本発明の代替の実施形態は、式９２，９４、及び文９３をインプリメントするために他の式を使用し得る。上記に示された本発明の実施形態はバイトコードエミュレーションシーケンスに飛ばすために式９２，９４によって指定された特定のアドレスを使用するが、本発明のさらなる実施形態では、他の好適なアドレスへ飛ばすために式９２，９４を変更した方式で使用し得る。図７に示された本発明の実施形態はバイトコードエミュレーションシーケンスに飛ばすために使用されたプロセッサ１２命令を説明するが、本発明のさらなる実施形態では、多様な目的において複数の飛び先の宛先アドレスのうちの１つへジャンプするために、この種類の命令を使用し得る。本発明はこのように、ジャババイトコードエミュレーションシーケンスへ飛ばすことに限定されないが、他の種類の飛ばし方に適用可能である。さらに、文９１，９３は、複数の可能な飛び先宛先アドレスのうちの１つを選択する、任意の種類の可変条件であってもよい。文９５が随意のものであり、いくつかの実施形態では使用されなくてもよいこともまた、認識されるべきである。
【００２５】
図７に示された命令形式９０もまた、処理コードと呼ばれ得る。好適な実施形態において、命令形式９０は命令レジスタ１１６に保持され、図８の命令デコード１０４回路によって復号化され、続いて、プロセッサ１２中のジャバＳＷ命令を実行するために制御回路１０５に提供される。
【００２６】
ジャバＳＷ命令が常に行われる間に、飛ばす処理が生じることに注意されたい。その飛ばすことは随意、又は条件付きのいずれでもなく、複数の飛び先宛先アドレスのうちの１つへと常に生じるものである。
【００２７】
さらにＲ４＜＜５は、この場合にはバイトコード値である所定値が、それがレジスタＲ４にロードされる前に、５ビットだけ左シフトされていることに注意されたい。図７に示された本発明の実施形態では、各命令の長さは１６ビットであり、それにより、記憶装置を２バイト占める。５ビットの左シフトは、３２バイトの乗算、或いは１６個の命令と等しい。図６を参照すると、バイトコード値を５桁シフトすること又は３２の乗算する理由は、エミュレーションコード表７２内の正確なバイトコード命令グループにインデックスを付けるためにエミュレーションコード表７２へオフセットすることを可能にすることである。従って、値Ｒ４＜＜５は、エミュレーションコード表７２内の正確なグループの開始点に飛び先宛先アドレスポインタを移動させるために使用される。
【００２８】
本発明の代替の実施形態では、１つを越える命令を使用して、ジャバＳＷ命令機能のインプリメントを含むことがあることが認識される。本発明の一実施形態では、ジャバＳＷ命令はカウンタを制御し、かつ表の飛び先をインプリメントする能力を単一の命令として組み合わせることに注意されたい。これは、式９２又は９４のうちの一方に加えて行われる文９５として図７に示される。ジャバＳＷ命令については、命令フローの変更が常に得られ、これは条件付き分岐命令のための場合でないことに注意されたい。ジャバＳＷ命令に応じて行われたジャンプは、双方が所定の表にある（図４のエミュレーションコード表６２を参照）２つアドレスのうちの１つにある。さらに、本発明の一実施形態では、表を飛ばす宛先がジャババイトコード値及びカウンタ値の両方の関数である場合に、ジャバＳＷ命令は表を飛ばす処理を行う。本発明の一実施形態では、カウンタ値は、スレッドスイッチングがいつ生じるかを判定するためにジャバインタプリタによって使用されるスイッチカウント値（図７のＳＷＣＯＵＮＴ）であってもよい。一実施形態では、レジスタ１０９のうちの１つはカウンタとして使用されてもよい。代替の実施形態は、このスイッチカウンタ関数をインプリメントするためにプロセッサ１２の中で、ハードウェア又はソフトウェアの組み合わせと、ハードウェアとを使用してもよい。ジャバＳＷ命令の一実施形態については、カウンタ値は、飛び先の通常の入口点を、条件付きでエミュレーション表（図７，８において０×８として示されている）に戻される所定の固定入口点によって覆す。代替の実施形態は、０×８以外のアドレスを使用し得る。図７に示されるように、通常の表への入口点は、式９２の実行によって決定されたＰＣ値のアドレス計算に相当し、スレッドスイッチングが生じるべきでない場合に、生じる。スレッドスイッチングが生ずべき場合、式９２に対応する通常の表入口点は使用されない。代わりに、それはスレッドスイッチがこの場合には行われるべきなので、式９４によって定義された入口点によって覆し、通常であればエミュレートされていたであろうジャババイトコードのためのエミュレーションコードはもはや入力されない。
【００２９】
ジャバＳＷ命令は、覆されなかった表の入口点が使用される場合に、ハンドシェイク信号（コプロセッサインタフェース３０の一部）によってハードウェアのアクセラレータ（例えばコプロセッサ１４，１６）を条件付きで示す命令を提供する。このハンドシェイク信号は、プロセッサ１２が図７の式９２を実行しているか（その場合にはバイトコードがプロセッサ１２及びハードウェアアクセラレータによってエミュレートされることになっている）否か、及びプロセッサ１２が図７の式９４の実行によりスレッドスイッチングするか（その場合にはハードウェアアクセラレータがそのときのバイトコードのエミュレーションを行ってはならない）否かを判定することを、ハードウェアアクセラレータに可能とさせる。
【００３０】
さらに、ジャバＳＷ命令は、図６に示される通常の表構造が小さな組のバイトコード値によって覆されることを可能とするディスパッチ機能を提供してもよい。例えば、１６を越える命令スロットを要求し、そのために割当てられたグループサイズをオーバーフローさせる、一般的に実行されているジャババイトコードではハードウェアが提供されてよい。このハードウェアは、ジャババイトコードによって要求されたコードを実行するためにエミュレーションコード表の外部の場所へ飛ばすことをジャバＳＷ命令に強制する。そのようなディスパッチ機能をインプリメントするために必要な唯一のハードウェアは、それらの割当てられた命令スロットをオーバーフローさせるジャババイトコードの選択された組を復号化するための少量の復号化ロジックと、この選択されたジャババイトコードのためのエミュレーションコードを、エミュレーションコード表に外部の場所へ飛ばすことを可能とさせるるための対応する制御に関連して以下に記載される、図８のコンバイナ１０６の復号化ロジック及びＭｕｘへの追加の入力１０３とである。図８に関して以下に記載されるように、このデコード回路は、プロセッサ１２の制御回路１０５内に実装され得る。
【００３１】
上記したように、図８は、図１のプロセッサ１２の適切な部分の一実施形態のみを示す。繰り返すと、ジャババイトコードをエミュレートするために使用された命令は、命令デコード回路１０４によって命令レジスタ１１６から受け取られる。命令デコード回路１０４はエミュレーション命令を復号化し、制御回路１０５に復号化された結果を供給する。制御回路１０５は、これらの命令を実行するためにプロセッサ１２内の他の要素に制御信号を供給する。上記されたように、制御回路１０５は、導体１３０を介して、レジスタ１０７、算術論理演算ユニット（ＡＬＵ）１１０、及びアドレス選択ロジック１１１に双方向接続される。制御回路１０５は、Ｍｕｘ及びコンバイナ１０６に制御信号を提供する。本発明の代替の実施形態は、Ｍｕｘ及びコンバイナ１０６への、より多数、より少数、或いは異なる入力を使用してもよい。Ｍｕｘ及びコンバイナ１０６の出力は、アドレス選択ロジック１１１への入力として提供されるジャバＳＷプログラムカウンタアドレス１２４である。アドレス選択ロジック１１１は、さらに入力としてブランチアドレス１２３、除外アドレス１２２、飛び先アドレス１２１を受信する。さらに、アドレス選択ロジック１１１の出力は増加回路１１２によってインクリメントされ、次に、導体１２０経由でアドレス選択ロジック１１１への入力として中へフィード・バックされてもよい。本発明の示された実施形態では、増加回路１１２は２バイトずつアドレスをインクリメントするが、それは１つの命令と等しい。本発明の代替の実施形態では、様々な量によってアドレスをインクリメントするために増加回路１１２を使用することもある。アドレス選択ロジック１１１によるアドレス出力は導体１３３を介して、プログラムカウンタ１０８及び制御回路１０５に供給される。制御回路１０５は、飛び先アドレス１２１、除外アドレス１２２、及びブランチアドレス１２３を生成するために使用される。制御回路１０５は、１つ以上の導体１３４を介して、１つ以上のスイッチスレッドしきい値信号を受信する。上記したように、レジスタ１０７は、導体１３０，１３１，１３２を介して、算術論理演算ユニット１１０に双方向接続される。
【００３２】
示された実施形態において、Ｍｕｘ及びコンバイナ１０６への様々な入力は、データ処理システム１０に有意な柔軟性を提供する。Ｍｕｘ及びコンバイナ１０６への入力１１３は、Ｍｕｘ及びコンバイナ１０６への他の入力と組み合わせて、多様なジャバＳＷプログラムカウンタアドレス１２４値を生成するために使用されるプログラムカウンタ１０８から、このときのＰＣ＋２値を供給する。例えば、一定の０×８を提供する入力１００は、図６のエミュレーションコード表７２の第１のグループに位置するスレッドスイッチングソフトウェアルーチン７６を指すことをジャバＳＷプログラムカウンタアドレスに強制するために入力１１３と組み合わせて使用できる。スレッドスイッチングソフトウェアが必要とされるときに、この新しいプログラムカウンタアドレスが使用される。Ｍｕｘ及びコンバイナ１０６への入力１０１は、レジスタＲ４のコンテンツの位置が１桁左シフトされていることを示し、このシフトは２を乗じることと等価である。入力１０１は、エミュレーションコード表７２中のグループが単一の命令を含んでいる場合に、新しいプログラムカウンタアドレスを形成するために使用される。この命令は、対応するバイトコードをインプリメントするためのエミュレーションコードが探し出されるべき、エミュレーションコード表７２の末尾を過ぎたところで飛び先アドレスを格納するためのものである。この機能は、図９に関する記載によって以下にさらに示される。Ｍｕｘ及びコンバイナ１０６への入力１０２は、３２と等価なレジスタＲ４のコンテンツを５桁だけ左シフトしていることを示す。左シフトされた値Ｒ４＜＜５は、エミュレーションコード表７２中のグループを選択するために入力１１３と結合して使用される。そのようなシフトは、プロセッサ１２が前のジャババイトコードの実行を終了し、次のジャババイトコードの実行に移っている場合に、新しいプログラムカウンタアドレスを生成するために行なわれる調整である。Ｍｕｘ及びコンバイナ１０６への入力１０３は、通常の表構造がバイトコード値の小さな組によって覆すことを可能にする。換言すると、エミュレーションコード表７２の外側のアドレスは、表１０３外側の入口点のＭｕｘ及びコンバイナ１０６への入力信号を介して所定値に変更され得る。本発明の代替の実施形態では、データ処理システム１０の必要に基づいて異なる新しいプログラムカウンタアドレスを生成するために使用される、他のＭｕｘ及びコンバイナ１０６への入力を有することがある。エミュレーションコード表７２内のグループサイズを変更するために、Ｍｕｘ及びコンバイナ１０６への入力が使用されてもよい。示された実施形態は１つの標準グループサイズをもって説明したが、本発明の代替実施形態では、Ｍｕｘ及びコンバイナ１０６への入力によって定義された、異なるグループサイズ、或いは多数のグループサイズを使用してもよい。これは、ジャバなどの高水準言語の様々なバイトコードをエミュレートするために必要なコード長を決定する際に有意量の柔軟性をデータプロセッサシステムのユーザに１０を提供する。
【００３３】
次に図９を参照する。図９は、エミュレーションコード表が大きなバイトコード値のグループのために圧縮されることを可能にするディスパッチ機能を示す。いくつかのバイトコード値については、図５を参照して上記されたように、対応するエミュレーションコードがグループサイズが提供するより多くの命令スロットを必要とすることがある。エミュレーションコードが連続したシーケンスのままであれば、図５のステップ２，３に関連したオーバヘッドは恐らく単純化され得る。ジャババイトコード符号化では、０×ｃ０〜０×ｆｆの範囲にあるバイトコードの大部分が１６スロットのグループサイズによって提供されるよりも多数の命令スロットを必要とし、図９の代替のエミュレーションコード表８３が好適となり得る。従って、図９は、最初の１９２個の入口（入口のうちの３／４）が１６個の命令スロット（０×ｂｆ〜０×０のバイトコードに対応する入口）のグループサイズを有し、最後の６４個の入口（入口のうちの１／４）は１命令スロットのグループサイズを有する、２５６個の入口（バイトコード当たりの１つのグループ）を有した記憶素子として、エミュレーションコード表８３を示す。表をこの方式で構築することによって、０×０〜０×ｂｆのバイトコードへの入口は、上記図５，６を参照して記載したように利用され、他方０×ｃ０〜０×ｆｆのバイトコードへの入口は、対応するバイトコードのための実際のエミュレーションコードへの飛び越し命令を有する。この構造は、表のサイズを圧縮することを可能にし、図５で行われたように、これらのより複雑なバイトコードのためのエミュレーションコードは、最初の部分及び最後の部分に分割されることなく、連続した状態に残され得る。このディスパッチ機能はコードを単純化し、図５のステップ２，３を行う必要性を排除することにより、オーバヘッドを縮小する。代わりに、０×ｃ０〜０×ｆｆの範囲にあるジャババイトコードのためのエミュレーションルーチン全体に直接飛び越す、代替のステップ２が導入される。図８を再び参照すると、この表の圧縮は、ＰＣ＋２入力１１３及び制御回路１０５とともに、Ｍｕｘ及びコンバイナ１０６への入力１０１を利用することによって行われる。Ｒ４＜＜１を計測することによって、表８３の下位６４個の入口へのインデックス付けが適切に行われる。Ｍｕｘ及びコンバイナ１０６への入力１１３に対応するＰＣ＋２値は、制御回路１０５への入力１１８中の０×ｃ０〜０×ｆｆの範囲のバイトコードを復号化することに応じて、制御回路１０５によって図９の初めの入口８８を指すように修正される。その後、この修正値は、Ｍｕｘ及びコンバイナ１０６において表への入口点を選択するために、Ｒ４＜＜１と結合される。制御回路１０５には、入力１１８で受け取られたジャババイトコードの使用による、ユーザ決定可能な制御信号をさらにインプリメントされていてもよい。制御信号は、所定のグループサイズの第１のエミュレーション表構造、又は所定のグループサイズの第２のエミュレーション表構造のいずれかを選択し、図５のように構築された記憶装置で作動すべきか、或いは図９のように構築された記憶装置で作動すべきに関してユーザに柔軟性を提供する。
【００３４】
図９に示された実施形態は、圧縮された表入口を入手するためにバイトコードとして０×ｃ０〜０×ｆｆのバイトコードの特殊な選択を示しているが、本発明に従って圧縮した表入口として、代替のバイトコードグループが選択されても、或いは、異なる数のバイトコードが選択されてもよい。
【００３５】
以上より、インタプリタループに関連したオーバヘッドの様々な態様を組み合わせ、及び最小限にするデータ処理命令が提供されたことが明白である。その命令は一態様において、集積回路チップ内の記憶媒体上に格納されるか、又は、集積回路チップから独立して別個に格納されている。命令のためのハードウェアサポートは、インタプリタ関数を実装するために使用されるメモリの最適化を可能とする。その結果、実行時間、必要とされたハードウェア資源の量、及び必要とされたインタプリタソフトウェアの量の形態において、オーバヘッドが著しく縮小された。本発明は、カウンタの制御と、そこでフローの変更が常に行われる表の飛び越しのインプリメントとを結合する。ジャバＳＷ命令は、バイトコード値及びカウンタ値の両方の関数として表を飛ばした宛先をインプリメントする。カウンタ値は条件付きで、表中の通常に計算された入口点を所定の固定入口点で覆す。スレッドスイッチがインプリメントされていない場合、ジャバＳＷ命令は、さらに条件付きでハンドシェイク信号によってハードウェアアクセラレータに信号を伝える。示された実施形態では、通常のメモリ構造がバイトコード値の小さな組によって覆されることを可能とする、ディスパッチ機能が提供される。メモリ表がバイトコード値の大きなグループのために圧縮されることを可能にするディスパッチ機能も提供される。さらに、メモリ表は単純なバイトコード及び複雑なバイトコードに対応して様々なグループサイズ（例えば２，８，１６バイトなど）をサポートするために形成され得る。そのような分岐では、処理コード（バイトコード）は復号化され、そのコードはグループサイズに基づいて、選択的に分離される。
【００３６】
上記において、本発明は特定の実施形態に関して記述された。しかしながら、当業者は、請求項に記載される本発明の範囲を逸脱せずに、多様な修正及び変更を行うことが可能であることを認識する。従って、明細書及び図面は限定的な感覚で解釈されるのではなく、１つの例として認識されるものであり、全てのそのような修正は本発明の範囲に含まれるものである。当業者は、図中の要素が単純にするため、及び明瞭にするために例示されたものであり、必ずしも一定の比率で描かれていないことを認識する。例えば、本発明の実施形態についてのより良好な理解を促進するために、図中の要素のうちのいくつかの縮尺は他の要素に比べて誇張されていることがある。
【００３７】
利点、他の利点及び問題の解決策は、特定の実施形態に関して上記された。しかしながら、長所、利点、問題の解決策、並びにあらゆる長所、利点或いは解決策を生じさせ、或いはこれらをより明確にすべき任意の要素は、あらゆる請求項にとって重要であったり、必要条件であったり、本質的な特徴などのいずれかの要素として解釈されるものではない。ここに使用された用語「からなる」、「含む」及びこれらの活用は、非排他的な包含物を網羅するように意図される結果、要素のリストを含むプロセス、方法、物品、又は装置は、これらの要素のみを含むものではなく、そのようなプロセス、方法、物品或いは装置に固有の、列挙されていない他の要素を有しうるものである。
【図面の簡単な説明】
【００３８】
【図１】一実施形態によるデータ処理システムを示すブロック図。
【図２】ジャバプログラムが実行されたときのに実行フローを示す公知のコードシーケンス。
【図３】図２のジャバプログラム実行に関連したインタプリタのオーバヘッドを示す公知のダイアグラム。
【図４】本発明に従ってプログラムが実行されたときの、ジャバプログラム及び対応するエミュレーションコード表。
【図５】グループサイズが可能にするより多くのエミュレーションコードを必要とするジャバプログラム実行の本発明での例を示すコード表。
【図６】本発明による命令スロットの１つの割当てを示すエミュレーションコード表。
【図７】本発明に従ってジャバプログラム中の命令流れを切り替えるためのジャバインタプリタ命令の説明文。
【図８】本発明によりプログラム実行をインプリメントするための図１のシステムのデータプロセッサの部分を示すブロック図。
【図９】本発明に従って命令スロットの別の割当てを示す一実施形態のエミュレーションコード表。
【図１】
2004527824.tif 000003
【図２】
2004527824.tif 000004
【図３】
2004527824.tif 000005
【図４】
2004527824.tif 000006
【図５】
2004527824.tif 000007
【図６】
2004527824.tif 000008
【図７】
2004527824.tif 000009
【図８】
2004527824.tif 000010
【図９】
2004527824.tif 000011
【国際公開パンフレット】
2004527824.tif 000012
2004527824.tif 000013
2004527824.tif 000014
2004527824.tif 000015
2004527824.tif 000016
2004527824.tif 000017
2004527824.tif 000018
2004527824.tif 000019
2004527824.tif 000020
2004527824.tif 000021
2004527824.tif 000022
2004527824.tif 000023
2004527824.tif 000024
2004527824.tif 000025
2004527824.tif 000026
2004527824.tif 000027
2004527824.tif 000028
2004527824.tif 000029
2004527824.tif 000030
2004527824.tif 000031
2004527824.tif 000032
2004527824.tif 000033
2004527824.tif 000034
2004527824.tif 000035
2004527824.tif 000036
2004527824.tif 000037
2004527824.tif 000038
2004527824.tif 000039
2004527824.tif 000040
2004527824.tif 000041
2004527824.tif 000042
2004527824.tif 000043
2004527824.tif 000044
2004527824.tif 000045
2004527824.tif 000046
2004527824.tif 000047
2004527824.tif 000048
2004527824.tif 000049
2004527824.tif 000050
2004527824.tif 000051
2004527824.tif 000052
2004527824.tif 000053
2004527824.tif 000054
【国際公開パンフレット（コレクトバージョン）】
2004527824.tif 000055
2004527824.tif 000056
【国際調査報告】
2004527824.tif 000057
2004527824.tif 000058