JP4216182B2 - 複数の命令セットを用いるデータ処理 - Google Patents
複数の命令セットを用いるデータ処理 Download PDFInfo
- Publication number
- JP4216182B2 JP4216182B2 JP2003500729A JP2003500729A JP4216182B2 JP 4216182 B2 JP4216182 B2 JP 4216182B2 JP 2003500729 A JP2003500729 A JP 2003500729A JP 2003500729 A JP2003500729 A JP 2003500729A JP 4216182 B2 JP4216182 B2 JP 4216182B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- hardware
- program
- conversion unit
- software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Description
(技術分野)
本発明は、データ処理システムの分野に関する。より詳しくは、本発明は、2つ以上の命令セットからの命令を実行することが可能なデータ処理システムに関する。
【0002】
(背景技術)
2つ以上の命令セットからの命令を実行することが可能なデータ処理システムが提供されていることが周知である。このようなシステムの例としては、32ビットARM命令セットと16ビットのThumb命令セットの双方を実行することが可能な英国のケンブジッリ市のARM社製のプロセッサがある。
【0003】
2つ以上の命令セットを実行する最近に開発されたタイプのデータ処理システムは、それ自身のネイティブな命令セットとJava(登録商標)バイトコード命令の双方を実行することを追求するするものである。具体的には、Javaバイトコードを実行する特定目的用のハードウエアを提供するJava加速技法が提案され、開発されているいうことである。このような方式の例として、ネイティブなARM命令もまた実行するプロセッサコアを用いてJavaバイトコードの実行を提供する英国のケンブリッジ市のARM社設計のJazelleアーキテクチャ機能拡張がある。
【0004】
上記の技法の問題は、幾つかのJavaバイトコードが、Jazelleがもたらす比較的単純なアーキテクチャのハードウエア機能拡張によって実行されるのにはあまり適していないという点である。そのため、より複雑なJavaバイトコードは、サポートソフトウエアに送られて実行される。このような方式は、実行に際して遭遇し、また必要とされるJavaのバイトコードをすべて完全にカバーしながらも、ハードウエアJava加速システムの複雑さを抑制することが可能である。しかしながら、特定の状況に適すように開発され、また時間と共に進化するJavaの加速用ハードウエアの様々な実現例は、様々なJavaバイトコードを、与えられるハードウエアメカニズムによって実行されるのではなく、ソフトウエアの実行によってサポートすることを要求する。これは、別のサポート用ソフトウエアのセットを、Javaの加速用ハードウエアの各バージョン毎に開発してテストしなければならず、不利点となる。これは、高価で時間がかかる。
【0005】
上記の周知のJavaの加速技法のさらなる問題は、Javaのバイトコードを実行しているときに、システムの動作をデバッグしたりトレースするのが比較的困難であることである。特に、ハードウエアによって実行される1つのJavaバイトコードは、実際には、プロセッサコアが実行しなければならない多くのディスクリートな処理動作を意味し、さらにJavaバイトコードを加速用ハードウエアによって極小的に扱う方法では、ブレークポイント、ステップ毎の処理、あるいは他の有用な診断技法を容易に挿入することが不可能である。
【0006】
(発明の開示)
1つの態様によれば、本発明は、第1のプログラム命令セットから得られたプログラム命令又は第2のプログラム命令セットから得られたプログラム命令の制御下においてデータを処理する装置であって、該装置は、
前記第2のプログラム命令セットの内のプログラム命令を、シーケンス終了命令で終了する、前記第1のプログラム命令セットの内のプログラム命令のシーケンスとして解釈するように動作するソフトウエア命令インタープリタ(解釈手段)と、
前記シーケンス終了命令に応答して、
(i)前記第2の命令セットに対するハードウエア命令実行ユニットが利用可能でない場合、前記第2の命令セットの内の次のプログラム命令の解釈を、前記ソフトウエア命令インタープリタを用いて始動し、
(ii)前記第2の命令セットに対する前記ハードウエア命令実行ユニットが利用可能である場合、前記第2の命令セットの内の前記次のプログラム命令の実行を、前記ハードウエア命令実行ユニットを用いて始動する、
命令デコーダと、
を備える。
【0007】
本発明は、第2の命令セット(例えば、Javaバイトコード)の内の命令を第1の命令セット(例えば、ネイティブ命令のシーケンス)の内の命令のシーケンスとして実行する場合に、シーケンス終了命令として用いられる新しい命令を提供する。このシーケンス終了命令は、利用可能なハードウエア命令実行ユニットの存在又は不在に応答して、第2の命令セットの内の次の命令の処理をハードウエア命令実行ユニットを用いて始動するか、又は、ソフトウエア命令インタープリタの使用を継続する。したがって、第2の命令セットの全ての命令を処理する能力を持つソフトウエア命令インタープリタが提供され、しかも、それが必要とされる場合にしか使用されない。それは、このようなハードウエア命令実行ユニットが利用可能(例えば、存在してイネーブルされている)である場合には、シーケンス終了命令は、デフォルトとして、次の命令をハードウエア命令実行ユニットに渡すからである。特定のハードウエア実行メカニズムが第2の命令セットの内の特定の命令をサポートしない場合、これは、ソフトウエア命令インタープリタに転送されて、必要に応じて実行されるが、ハードウエア実行メカニズムが存在すると、そのハードウエアを用いてバイトコードの実行が試行される。うまくいけば、より迅速であるからである。
【0008】
第2の命令セットの内の次の命令に、ソフトウエア解釈又はハードウエア実行を受けさせるように動作可能なシーケンス終了命令を提供することは、双方の動作モードをサポートするための余分のセットアップと処理がソフトウエアインタープリタ内で必要となり、しかも、ハードウエア実行が全く起こらないということがあり得るため、不利点となると考えられる得る。しかしながら、実際は、後続のハードウエア処理を始動する準備に必要とされるタイプの処理動作は、しばしば、ソフトウエア解釈内で既に着手されているか、又は、レジスタのインターロック等、他の有用な処理が必ずしも可能でない処理サイクル内で容易に提供される。したがって、シーケンス終了命令は、双方のタイプの後続動作を、ソフトウエア命令インタープリタ内の驚くほど少ないオーバーヘッドでサポートすることが可能である。
【0009】
アクティブなハードウエア実行手段(executor)の検出は、様々な形態を取り得ることが理解されるであろう。しかしながら、好ましい実施形態では、この検出には、少なくとも1つのハードウエア命令実行ユニットフラグが用いられる。このようなフラグは、ソフトウエアの制御下で比較的容易にセットされ、また、ハードウエア命令実行ユニットが存在するかどうか及び/又はハードウエア命令実行ユニットがアクティブであるかどうかなどの情報を提供することが可能である。
【0010】
シーケンス終了命令の後で第2の命令セットの内の次の命令を引き続いて処理することを容易化してその速度を上げるためには、シーケンス終了命令は、ソフトウエア命令インタープリタ(もしこれが呼び出されるメカニズムであれば)によって使用されるソフトウエア解釈の開始アドレスを指定するのが望ましい。全体的な動作速度を向上させながらも現行の命令の実行速度を不当に損なうことなく次の命令の解釈を開始するポインタを準備する機会は、現行の命令のソフトウエア解釈の内によくあることが分かっている。
【0011】
次の命令の解釈のためのこの開始アドレスは、ソフトウエア命令インタープリタに様々な方法で渡される。しかしながら、これを実現する好ましいメカニズムは、このアドレスを、シーケンス終了命令内のオペランドとして指定されたレジスタ内に、又は、この目的のためにシーケンス終了命令によって常に用いられる所定のレジスタ内に渡すことである。
【0012】
ハードウエア実行開始アドレスをハードウエア命令実行ユニットによって使用されるように提供する類似のメカニズムもまた、提供される。
【0013】
ソフトウエア命令インタープリタを提供する便利で、柔軟性があり強個な方法は、各々が第2の命令セット内の対応する命令を代理する第1の命令セットのプログラム命令の複数のシーケンスとして提供することである。これらのコードフラグメントは、オプションとして、第2の命令セット内のプログラム命令によってインデックスされたポインタのテーブルを介してアクセスされる。これらのポインタのテーブルのベースアドレスはベースアドレスレジスタ内に提供され、これは、ソフトウエア命令インタープリタコードをより融通性のあるものとする便利なメカニズムである。
【0014】
本発明は広い範囲の状況下で応用可能であることが理解されるが、本発明は、第1の命令セットがプロセッサコアのネイティブな命令セットであり、第2の命令セットがJavaバイトコード命令であり、また、シーケンス終了命令がプロセッサコアのネイティブな命令であるような状況下では特に良好に適していることが理解されよう。
【0015】
別の態様によれば、本発明は、第1のプログラム命令セットからのプログラム命令又は第2のプログラム命令セットからのプログラム命令の制御下でデータを処理する方法であって、該方法は、
ソフトウエア命令インタープリタを用いて、前記第2のプログラム命令セットの内のプログラム命令を、シーケンス終了命令で終了する、前記第1のプログラム命令セットの内のプログラム命令のシーケンスへ解釈するステップと、
前記シーケンス終了命令に応答して
(i)前記第2のプログラム命令セットに対するハードウエア命令実行ユニットが利用可能でない場合、前記第2の命令セットの内の次のプログラム命令の解釈を、前記ソフトウエア命令インタープリタを用いて始動し、
(ii)前記第2の命令セットに対する前記ハードウエア命令実行ユニットが利用可能である場合、前記第2の命令セットの内の前記次のプログラム命令の実行を、前記ハードウエア命令実行ユニットを用いて始動する、
ステップと、
を含む。
【0016】
さらに別の態様によれば、本発明は、第1のプログラム命令セットからのプログラム命令又は第2のプログラム命令セットからのプログラム命令の制御下でデータを処理するデータ処理装置を制御するコンピュータプログラムプロダクツを提供し、該コンピュータプログラムプロダクツは、
前記第2のプログラム命令セットの内のプログラム命令を、シーケンス終了命令で終了する、前記第1のプログラム命令セットの内のプログラム命令のシーケンスへ解釈するように動作するソフトウエア命令インタープリタロジックであり、該シーケンス終了命令が、
(i)前記第2のプログラム命令セットに対するハードウエア命令実行ユニットが利用可能でない場合、前記第2の命令セットの内の次のプログラム命令の解釈を、前記ソフトウエア命令インタープリタロジックを用いて始動し、
(ii)前記第2のプログラム命令に対する前記ハードウエア命令実行ユニットが利用可能である場合、前記第2の命令セットの内の前記次のプログラム命令の実行を、前記ハードウエア命令実行ユニットを用いて始動する、
ように働く、前記ソフトウエア命令インタープリタロジック、
を含む。
【0017】
このコンピュータプログラムプロダクツは、ハードウエアアクセラレータと関連して使用されるサポートコードという形態を取る。このサポートコードは、例えば、データストレージ媒体上に、又は、埋め込み処理システム内のファームウエアとしてもしくは、所望次第では、動的にダウンロードされて提供される。
本発明の実施形態は、添付図面を参照して、記載する。
【0018】
(発明を実施するための最良の形態)
図1は、ARMプロセッサなどのプロセッサコア4とバイトコード変換ハードウエア6(Jazelleとも呼ばれる)とを組み込むデータ処理システム2を示す。プロセッサコア4は、レジスタバンク8と、命令デコーダ10と、レジスタバンク8のレジスタ内にストアされているデータ値に対して様々なデータ処理演算を実行するデータ経路12とを含む。バイトコード変換ハードウエア6が現時点でイネーブルされているかディスエーブルされているかを制御するフラグ20を含むレジスタ18が、備えられている。加えて、バイトコード変換ハードウエアが現時点でアクティブであるかインアクティブであるかを示すフラグ21を含むレジスタ19が、備えられている。言い換えれば、フラグ21は、データ処理システムが現時点でJavaバイトコードと実行しているかARM命令を実行しているかを示す。他の実施形態では、レジスタ18と19は、フラグ20と21の双方を含む1つのレジスタであり得ることが理解されるであろう。
【0019】
動作中、Javaバイトコードが実行中であり、バイトコード変換ハードウエア6がアクティブであれば、Javaバイトコードが、バイトコード変換ハードウエア6によって受領されて、(この特定の非制限的な実施形態では)対応するARM命令のシーケンスを発生する、又は少なくともプロセッサコア制御信号を表すARM命令を発生し、これらの命令は次にプロセッサコア4に渡される。したがって、バイトコード変換ハードウエア6は、1つのJavaバイトコードを、プロセッサコア4によって実行される対応するARM命令のシーケンスにマッピングする。バイトコード変換ハードウエアがインアクティブであれば、それはバイパスされ、ノーマルなARM命令をARM命令デコーダ10に供給して、そのネイティブな命令セットにしたがってプロセッサコア4を制御することが可能となる。ARM命令のこれらのシーケンスは、等しくThumb命令のシーケンス及び/又は様々な命令セットからの命令の混合物であり得るが、このような代替例は予見されることであり、範囲に含まれることが全体にわたって理解されるであろう。
【0020】
バイトコード変換ハードウエア6は、単に、遭遇することがあり得るJavaバイトコードのサブセットのためのハードウエア変換サポートにしかならないことが理解されるであろう。ある種のJavaバイトコードは、ハードウエア中にあるこれらのコードを試行して、対応するARM命令動作にマッピングすることは効率的ではないような広範囲でまた抽象的な処理を必要とする。したがって、バイトコード変換ハードウエア6は、このようなハードウエアによりサポートされていないバイトコードに遭遇すると、ARMネイティブ命令で書かれたソフトウエア命令インタープリタをトリガーして、このハードウエアサポートされていないJavaバイトコードによって指定された処理を実行するようにさせる。
【0021】
このソフトウエア命令インタープリタは、解釈される考えられるJavaバイトコード全てに対するソフトウエアサポートとなるように作成してもよい。バイトコード変換ハードウエア6が存在していてイネーブルされると、通常ハードウエアサポートされていないJavaバイトコードだけが、ソフトウエア命令インタープリタ内の関連のコードフラグメントに参照される。しかしながら、バイトコード変換ハードウエア6が存在しない場合又は(デバッグの最中などで)ディスエーブルされている場合、Javaバイトコードはすべて、ソフトウエア命令インタープリタに参照される。
【0022】
図2に、ソフトウエア命令インタープリタの作用を略式に示す。Javaバイトコードのストリーム22は、Javaプログラムを表す。これらのJavaバイトコードには、オペランドが散在している。したがって、所与のJavaバイトコードの実行に続いて、次に実行されるJavaバイトコードは、すぐ後のバイト位置出現するか、又は、オペランドバイトが介在している場合は数バイト後に出現する。
【0023】
図2に示すように、バイト変換ハードウエア6によってサポートされていないJavaバイトコードBC4に遭遇する。これによって、バイトコード変換ハードウエア6内で例外がトリガーされ、このため、バイトコードBC4を指標として用いてポインタテーブル24内で検索が実行されて、ハードウエアサポートされていないバイトコードBC4によって指定される処理を実行するコードフラグメント26を指すポインタP#4が読み取られる。ポインタテーブルのベースアドレス値もまた、レジスタにストアされる。次に、この選択されたコードセグメントに、R14がサポートされていないバイトコードBC4を指している状態で入る。
【0024】
図示するように、バイトコードが取り得る値は256個あるので、ポインタテーブル24は256個のポインタを含んでいる。同様に、最大で256個のARMネイティブ命令コードフラグメントが与えられ、これで、考えられるどのJavaバイトコードによって指定される処理でも実行される。(2つのバイトコードが同じコードフラグメントを使用しているような場合では256個以下である場合もあり得る。)バイトコード変換ハードウエア6は、一般的には、単純なJavaバイトコードの多くに対してハードウエアサポートを提供し、これで、処理速度が向上し、また、この場合、ソフトウエア命令インタープリタ内の対応するコードフラグメントは、デバッグ中又は、後述するようなプリフェッチアボートなどの状況下などで強制された場合を例外として、決して用いられることはない。しかしながら、これらは一般的には、単純で短いコードフラグメントであるため、これらを提供することによってもたらされる追加のメモリオーバーヘッドは比較的わずかである。さらに、このわずかな追加のメモリオーバーヘッドは、またソフトウエア命令インタープリタの一般的な性質と、バイトコード変換ハードウエアが存在しない又はディスエーブルされている状況での考えられるあらゆるJavaバイトコードに対処するその機能とによって少なくとも埋め合わされる。
【0025】
図2のコードフラグメント26は各々が、シーケンス終了命令BXJによって終了されるのがわかるであろう。このシーケンス終了命令BXJの作用は、図3に図示するように、データ処理システム2の状態によって異なる。図3は、ソフトウエア命令インタープリタ内でコードフラグメント26によって実行される処理を非常に略式な形態で図示するフローチャートである。ステップ28では、解釈されているJavaバイトコードによって指定された動作が実行される。ステップ30では、次に実行されるJavaバイトコードがバイトコードストリーム22から読み取られ、この次のJavaバイトコードに対応するJavaバイトコードストリーム22内のバイトコードポインタが、レジスタバンク8のレジスタ、すなわちR14内にストアされる。このように、図2のJavaバイトコードBC4の場合、次のJavaバイトコードはBC5であり、レジスタR14に、JavaバイトコードBC5のメモリロケーションを指すポインタがロードされる。
【0026】
ステップ32では、次のJavaバイトコードBC5に対応するポインタテーブル24内のポインタがポインタテーブル24から読み取られて、レジスタバンク8のレジスタ、すなわちレジスタR12内にストアされる。
【0027】
図3では、ステップ28、30及び32が別々にそして連続的に実行されているところが示されていることが理解されるであろう。しかしながら、周知のプログラム技法にしたがって、ステップ30と32の処理を、ステップ28の処理内でインタリーブし、これによって、ステップ28の処理内のさもなければ無駄になっていた処理機会(サイクル)を利用するようにすれば便利である。したがって、ステップ30と32の処理は、比較的少ない実行速度のオーバーヘッドで実行可能である。
【0028】
ステップ34は、オペランドとして指定されているレジスタR14と供にシーケンス終了命令BXJを実行する。
【0029】
BXJ命令をステップ34で実行するのに先立って、システムの状態は、レジスタR14内にストアされているJavaバイトコードストリーム22内の次のバイトコードを指すポインタと、レジスタR12内にストアされているその次のJavaバイトコードに対応するコードフラグメントを指すポインタとでセットアップされている。この特定のレジスタの選択は、シーケンス終了命令に対するオペランドとして指定されたり、アーキテクチャによって予め設定され定義された非選択、一方選択又は双方選択と変化し得る。
【0030】
ステップ28、30、32及び34の大部分はソフトウエア的なステップである。図3におけるステップ34に続くステップの大部分はハードウエア的なステップであり、別の識別可能プログラム命令無しで発生する。ステップ36で、ハードウエアが、バイトコード変換ハードウエア6がアクティブであるかないか検出する。このハードウエアは、バイトコード変換ハードウエア6が存在してイネーブル状態にあるかを示すレジスタフラグを読み取ってよってこの検出を実行する。バイトコード変換ハードウエア6がアクティブ状態で存在するかどうかの判断は、他のメカニズムによってもよい。
【0031】
バイトコード変換ハードウエア6が存在していてイネーブルされていれば、ステップ38に進み、ここで、制御権が、バイトコードハードウエア6がその次のバイトコードとして実行することを試行すべきバイトコードストリーム22内のバイトコードを指すバイトコードポインタを指定するレジスタR14のコンテンツと共にバイトコード変換ハードウエア6に渡される。次に、図示されるコードフラグメント26の作用が終了する。
【0032】
反対に、バイトコード変換ハードウエア6が存在しない、又は、このバイトコード変換ハードウエアがディスエーブルされているとステップ36で判断された場合、ステップ40に進み、ここで、ARM命令コード内のジャンプによって、レジスタR12内にストアされているアドレスによって指し示されるソフトウエア命令インタープリタ内のコードフラグメントの実行が開始される。このように、次のコードフラグメントの迅速な実行が始動され、これによって、処理速度における利点が生じる。
【0033】
図4に、特定のコードフラグメントを詳細に示す。この特定の例は、iaddというニモニックを持つ整数加算Javaバイトコードである。
【0034】
第1のARMネイティブ命令は、1つインクレメントされたレジスタR14中のバイトコードポインタを用いて、次のバイトコード値を読み取る(整数加算(add)命令にはそれに続くバイトコードオペランドはなく、したがって、次のバイトコードは直接現在のバイトコードに続く)。レジスタR14中のバイトコードポインタもまた、インクレメントされた値に更新される。
【0035】
第2と第3の命令は、加算されるべき2つの整数のオペランド値をスタックから検索する。
【0036】
第4の命令は、されなければ、レジスタR0に関連するレジスタにより無駄になるであろう処理サイクルを利用して、レジスタR4中にストアされている次のバイトコードに対するコードフラグメントのアドレス値を検索して、このアドレスをレジスタR12内にストアする。レジスタRexcを用いて、ポインタ24のテーブルの開始を指すベースポインタをストアする。
【0037】
第5の命令は、Javaバイトコードによって指定された整数加算を実行する。
第6の命令は、Javaバイトコードの結果をスタックに戻しストアする。
【0038】
最終的な命令は、オペランドR12で指定されたシーケンス終了命令BXJである。レジスタR12は、ソフトウエア解釈が要求された場合に次のJavaバイトコードをソフトウエア解釈するために必要となるARMコードフラグメントのアドレスをストアしている。BXJ命令を実行することによって、バイトコード変換ハードウエア6がイネーブルされた状態で存在するかどうかが判断される。これが存在していれば、制御権は、次のバイトコードアドレスを指定するレジスタR14中にストアされているオペランドと共にこのバイトコード変換ハードウエア6に渡る。バイトコード変換ハードウエア6がアクティブな状態で存在しない場合、レジスタR12内のアドレス値によって指されている次のバイトコードに対するコードフラグメントの実行が開始される。
【0039】
図5に、図1のそれと類似したデータ処理システム42を略式に示すが、この場合、バイトコード変換ハードウエア6が与えられていない点が異なる。このシステムでは、フラグ21は常に、ARM命令が実行中であることを示し、BXJ命令でJavaバイトコード実行を入れようとする試行が常に、フラグ20が無視された状態で、バイトコード変換ハードウエア6がディスエーブルされているように扱われる。
【0040】
図6に、Javaバイトコードを実行する際のシステム42によって実行される処理のフローチャートを示す。これは、同じソフトウエアインタープリタコードが使用されているという点で図3の処理に類似しているが、この場合、シーケンス終了命令BXJが実行された時、ハードウエアバイトコードサポートの可能性は全くなく、したがって、処理は常に、ジャンプ命令に続いて、R12によって次のJavaバイトコードに対するコードフラグメントであると指し示されるコードフラグメントを実行する点が異なる。
【0041】
この場合、ソフトウエア命令インタープリタはARMネイティブ命令として与えられていることが理解されるであろう。ソフトウエア命令インタープリタ(及び他のサポートコード)は、本来、別のコンピュータプログラムプロダクツとして提供されることがある。このコンピュータプログラムプロダクツは、フロッピディスクやCDなどの記録媒体を介して配布されたり、又は、ネットワークリンクを介して動的にダウンロードされたりする。本発明が特に良好に適している埋め込み処理アプリケーションの文脈では、ソフトウエア命令インタープリタは、埋め込みシステム内にある読み出し専用メモリや他の不揮発性プログラムストレージデバイス内にファームウエアとして提供されたりする。
【0042】
図7に、Javaバイトコードとそれらが指定する処理動作との間の関係を示す。図7から分かるように、8ビットJavaバイトコードは、互いの異なった256個のバイトコード値となり得る。これらのJavaバイトコードの内の最初の203個は、以前に説明したiaddなど、Java基準内で指定されている対応する処理動作へ、固定に結合されている。最後の2つのJavaバイトコード、すなわち254と255は、Java仮想マシン規格中に、定義済みの実現例であるとして記載されている。したがって、Java実現例は、自由に、これらのバイトコードに対して固定の結合を割り当てる。代替例では、Java実現例は、これらを、プログラム可能な結合を有するものとして扱うことを選ぶ。Jazelleは、これらのバイトコードに対して固定の結合を指定する。バイトコード値203と253との間(双方の値を含めて)で、プログラム可能な結合をユーザの所望のように指定される。これらは一般的に、バイトコードと処理動作間に結合を与えるために用いられるが、この例には、実行時間中に分解される迅速形態のバイトコードがある(アジソン・ウエスレイ(Addison Wesley)出版、リンドホルム(Tim Lindholm)とエリン(Frank Yellin)によって著された「Java仮想マシン規格」、ISBN 0−2−1−63452−Xを参照)。
【0043】
図7を見れば、ハードウエア加速された解釈技法は固定の結合を取り扱うにはよく適しているが、プログラム可能な結合を取り扱うにはあまり適していないことが理解されるであろう。対応するコードフラグメントによって表される関連のバイトコードの解釈のように、プログラム可能な結合の全てをソフトウエア解釈技法を用いて扱うことは可能であるが、これは性能が重要なバイトコードの場合には遅いものとなり得る。
【0044】
図8に、プログラム可能変換テーブルの1形態を示す。このプログラム可能変換テーブル100は、連想メモリ(content addressable memory)という形態を取っている。変換されるバイトコードは、CAMルックアップアレイ102に入力される。このアレイ102が一致するバイトコードエントリを含んでいれば、ヒットが発生し、これは、対応する動作指定値を出力させるが、すなわち、
【0045】
CAMテーブル中に一致するバイトコードエントリがあれば、ハードウエアは動作指定コードを用いて、ハードウエア中で実行されるべき動作を決定して、その動作を実行して、次のバイトコードに移り、
【0046】
CAMテーブル中に一致するバイトコードエントリがなければ、バイトコードはハードウエアのサポートがなされていないものとして扱われ、そのコードフラグメントがコールされる。
【0047】
この例では、動作指定値は4ビット値であり、また、ヒットを生じたCAMエントリは、バイトコードbc6に対応している。図7を見れば理解されるように、このようなプログラム可能変換を受けるバイトコードはすべて、その最上位の2ビットが“1”であり、したがって、このバイトコードの最下位の6ビットだけを、アレイ102に入力する必要がある。
【0048】
この例のプログラム可能変換テーブル100は、8個のエントリを有している。存在するエントリの数は、個のタスクに対して専用とすることが望ましいハードウエアリソースの分量によって異なる。ある例では、たった4つのエントリが与えられているが、他の例では、10個のエントリが適切であったりする。また、考えられるプログラム可能な結合のバイトコード1毎にエントリを与えることも可能である。
【0049】
利用可能なプログラム可能マッピングリソースが、最初に最も重要な変換で満たされると、より重要でない変換はソフトウエア解釈されることが理解されるであろう。ソフトウエアインタープリタをプログラム可能変換テーブルと組み合わせて提供することによって、システムの構成とテーブルのプログラミングとが、どれほど多くのエントリが利用可能であるかを知る必要なく可能となるが、それは、テーブルがオーバーフローしても、必要とされる変換が、ソフトウエアインタープリタによってトラップされて実行されるからである。
【0050】
図9に、第2の例のプログラム可能変換テーブル104を示す。この例では、変換テーブルはランダムアクセスメモリという形態を取っているが、ここで、変換されるバイトコードは、デコーダ106に入力されることになっており、このデコーダが、バイトコードを、各々が動作指定コードを表す4ビットワードのRAMアレイ108に対するアドレスとして扱う。この場合、動作指定コードは、常に、バイトコードに対するものである。その結果、このタイプのテーブルは、1つの付加動作指定コードを用いるが、これは、「このバイトコードに対するコードフラグメントをコール」することを指定するものである。
【0051】
図10は、図8の例の形態を取ったプログラム可能マッピングハードウエアインタープリタの初期化と構成を示す略式のフローチャートである。実際問題として、このフローチャートに図示された作用の様々な部分は、ソフトウエア初期化命令とこれらの命令に対応するハードウエアとによって、それぞれ実行される。
【0052】
ステップ110では、既存の全てのテーブルエントリをクリアし、テーブル中のトップのエントリを指すポインタをセットする働きをするテーブル初期化命令が実行される。これに続いて、初期化コードが、コプロセッサレジスタロードなどのプログラム命令を用いてマッピングを変換テーブル中にロードする。これらテーブルロード命令の様々な形態は、特定の状況と環境によって異なる。プログラム可能マッピングハードウエアインタープリタシステムは、これらの命令に応答して、Javaバイトコードなどのプログラム命令値とこれと関連する動作値とをステップ112で受領する。ステップ114で、非サポート動作トラップハードウエアが、プログラムされている動作値が、このプログラム可能マッピングハードウエアインタープリタによってサポートされている値であることをチェックする。動作値のセットが異なれば、これをサポートするプログラム可能マッピングハードウエアインタープリタも異なり、したがって、それ自身の固有のトラップハードウエアを備えられる。このトラップハードウエアは、特定のシステムが、例えば、それが動作値0、1、2、3、4、5、6、7、8及び10をサポートしているが9はしていないことが分かっていれば比較的単純なものとなる。ハードウエアコンパレータは、ステップ114で、動作値を、それが9という値と比較してそれと等しいか調べ、9が検出されれば、プログラミングを拒絶して、ステップ116に処理を分岐させる。
【0053】
ステップ114が、動作値がサポートされていることを示していると、ステップ118は、プログラム可能マッピングテーブルの最後まで既に達しているかどうかチェックして判断する。プログラム可能マッピングテーブルが既にいっぱいであれば、新しいマッピングが追加されることなく、再度ステップ116に進む。ステップ118をハードウエア内に設けることは、サポートコードは、どれほどのエントリが利用可能であるかを知ることなく、プログラム可能マッピングテーブルをプログラムすることを試みて、オーバーフローエントリを単に拒絶するだけであることを意味する。したがって、プログラマは、最も重要なマッピングをテーブルプログラミングの最初に位置付けして、これらのマッピングが利用可能なスロットを獲得することを保証すべきである。どれほどのプログラム可能スロットが利用可能であるかをサポートコードが知る必要がないということは、1つのセットのサポートコードが複数のプラットフォーム上で動作することを意味する。
【0054】
テーブルが空のエントリを有していると、新しいマッピングがこのエントリ中にステップ120で書き込まれ、次に、テーブルポインタがステップ122で進められる。
【0055】
ステップ116で、システムは、より多くのプログラム命令値をプログラム可能マッピングテーブル中にプログラムすべきであるかテストする。ステップ116は一般的には、サポートコードが、システムの初期化中に、可能な限り多くのマッピングをプログラムすることを試みるソフトウエアステップである。
【0056】
図9に示すようにRAMテーブルを初期化する場合、図10に関連して述べたプロセスは、次の修正を受けて実行される:
【0057】
ステップ110では、テーブルは、図9のアレイ108中の全てのテーブルエントリを、各エントリがどのバイトコードにも一致しないように図8中のアレイ102をセッティングすることによってではなく、図9中のアレイ108中の全てのテーブルエントリを「このバイトコードに対するバイトコードフラグメントをコールする」ようにセッティングすることによってクリアされる;
ステップ110では、初期化する変換テーブルポインタは無い;
ステップ118は存在しない、それは、変換テーブルポインタが無いからであり;
ステップ120は「プログラム命令値によって示されたテーブルエントリに対する書き込み動作値」となり;
ステップ122は存在しない、それは変換テーブルポインタが無いからである。
【0058】
図11に、Javaバイトコード解釈に用いられる処理パイプラインの1部分を示す。処理パイプライン124は、変換ステージ126とJavaデコードステージ128を含んでいる。後続のステージ130は、実現例によって様々な形態を取り得る。
【0059】
Javaバイトコードストリームから取られたワードは、スイングバッファ132の2つの半分に交番にロードされる。通常は、マルチプレクサ133は、現行のバイトコードとそのオペランドをスイングバッファ132から選択して、それをマルチプレクサ137を介してラッチ134に送付する。スイングバッファ132が、パイプラインがフラッシュされていたり他の理由によって空である場合、マルチプレクサ135は、Javaバイトコードストリームの入力ワードから直接該当するバイトコードを選択して、それをラッチ134に送付する。
【0060】
バイトコードに対して第1のデコーディングサイクルが、ラッチ134中のバイトコードに、第1サイクルデコーダ146によって実行される。ハードウエアサポートされているバイトコードがオペランドを持っている場合に備えて、マルチプレクサはさらにオペランドをスイングバッファ132から選択して、それらを第1サイクルデコーダ146に送付する。これらのマルチプレクサは、図中には示されていないが、マルチプレクサ133に類似のものである。一般的に、第1サイクルデコーダ146は、バイトコード入力に対してよりもオペランドに対してはより緩やかなタイミング要件を有しており、このため、マルチプレクサ135及び137並びにラッチ134によって形成されるバイパス経路に類似したバイパス経路は、オペランドに対しては必要ない。
【0061】
スイングバッファ132が、ラッチ134中のバイトコードに対して持っているオペランドバイトが不十分である場合、第1サイクルデコーダ146は、十分なオペランドバイトが利用可能となるまで中断する。
【0062】
第1サイクルデコーダ146の出力は、ARM命令(又はARM命令を表すプロセッサコア制御信号のセット)であり、これが、後続のパイプラインステージ130にマルチプレクサ142を介して渡される。第2の出力は、ラッチ138に対してマルチプレクサ139を介して書き込まれた動作指定コードである。この動作指定コードは、これが1サイクルバイトコードであるかどうかを指定するビット140を含んでいる。
【0063】
次のサイクルでは、後続のバイトコードが、第1サイクルデコーダ146によって前述したようにデコーディングされる。ビット140が1サイクルバイトコードであることを示していれば、そのバイトコードはデコーディングされ、後続のパイプラインステージ130を前述したように制御する。
【0064】
ビット140が、複数サイクルバイトコードであることを示している場合、第1サイクルデコーダ146は中断し、マルチサイクル又は変換済みデコーダ144がラッチ138中の動作指定コードをデコードして、ARM命令(又はARM命令を表すプロセッサコア制御信号のセット)を発生し、これをマルチプレクサ142が、第1サイクルデコーダ146の対応する出力の代わりに後続のパイプラインステージ130に渡す。マルチサイクル又は変換済みデコーダはまた、さらなる動作指定コードを生成し、これが、また第1サイクルデコーダ146の対応する出力の代わりに、ラッチ138にマルチプレクサ139を介して書き込まれる。このさらなる動作指定コードもまた、これが、複数サイクルバイトコードに対して生成される最後のARM命令であるかどうかを指定するビット140を含む。このマルチサイクル又は変換済みデコーダ144は、ビット140が、最後のARM命令が生成されたことを示すまで、上記のようにさらなるARM命令を発生し続け、次に、第1サイクルデコーダ146は、中断状態であることを止めて、後続のバイトコードのために第1のARM命令を生成する。
【0065】
上記のプロセスは、ラッチ134中のバイトコードを変換する必要がある場合、3つの方法で修正される。第1の方法として、バイトコードが、スイングバッファ132からマルチプレクサ133によって抽出され、バイトコードトランスレータ136によって変換されて、動作指定コードが発生され、これがラッチ138にマルチプレクサ139を介して書き込まれる。この動作指定コードは、そのビット140が、再度のARM命令が現行のバイトコードに対して生成されたものではないことを示すようにセットされており、これで、マルチプレクサ142とマルチプレクサ139は、マルチサイクル又は変換済みデコーダ144の出力を、第1サイクルデコーダ146の出力の代わりに、変換されたバイトコードの第1のサイクルで選択する。
【0066】
第2の方法として、マルチサイクル又は変換済みデコーダ144は、後続のパイプラインステージ130に渡されるべきARM命令の全てと、ラッチ138に戻して書き込まれるべきその対応するさらなる動作指定コードとを発生し、変換を必要としないバイトコードの場合のように第1のサイクル後ではこれらを発生しない。
【0067】
第3の方法として、バイトコードが直接にラッチ134に対してマルチプレクサ135を介して書き込まれており、したがって、スイングバッファ132中には存在せず、直前のサイクルでバイトコードトランスレータ136によって変換されているわけがない場合、第1サイクルデコーダ146は、バイトコードトランスレータ136に対して、それが、再スタートしてあるサイクルにわたって中断しなければならないことを信号で通知する。これによって、第1サイクルデコーダ146が中断を止めた場合に、ラッチ138が、変換済みのバイトコードに対する有効な動作指定コードを保持することが保証される。
【0068】
図11から分かるように、変換パイプラインのステージは、プログラム可能変換ステップによって必要とされる処理を、パイプライン中に効果的に隠す、即ち畳み込むことが可能となる、これは、バッファリングされた命令が、事前に変換され、必要に応じてパイプラインの残余の部分に流し込まれるからである。
【0069】
図11から分かるように、この例の実施形態では、固定されたマッピングハードウエアインタープリタは、第1サイクルデコーダ146と、自身が第1サイクルデコーダ146による第1サイクルのデコーディングを受けたマルチサイクルのバイトコードをデコーディングするモードで動作するマルチサイクル又は変換済みデコーダ144とから主として形成されているものと考えることが可能である。この例におけるプログラム可能マッピングハードウエアインタープリタは、バイトコードトランスレータ136と、この場合、プログラム可能バイトコードの変換に続いて動作するマルチサイクル又は変換済みデコーダ144とから形成されているものと考えることが可能である。固定マッピングハードウエアインタープリタとプログラム可能マッピングハードウエアインタープリタは、互いに異なった様々な方法で提供されるが、また、抽象的な観点からすれば互いに異なった自身の機能を保持しながらも、かなり共通のハードウエアを共有している。これら様々な可能性はすべて、上記の本技法の範囲に含まれる。
【0070】
図12に、仮想メモリのページ境界204にまたがる2つの32ビット命令ワード200と202を示す。これは、1kBのページ境界であるが、他のページサイズも可能である。
【0071】
第1の命令ワード200は、仮想メモリシステム内の適切にマッピングされている仮想メモリページ中にある。第2の命令ワード202は、仮想メモリシステム内にマッピングされているこのステージにはない仮想メモリページ中に存在する。したがって、第1バイトが命令ワード200内にあり第2バイトが命令ワード202内にある2バイトの可変長命令206は、その第2バイトと関連するプリフェッチアボートを有する。例えば、命令ワードがアラインメントされた命令をサポートするだけの従来のプリフェッチアボート処理メカニズムは、この状況を取り扱うことが不可能であり、また、例えば、実際にアボートに至ったその可変長命令ワード206の第2バイトを含む命令ワード202に焦点を合わせるのではなく、可変長命令206の第1バイトとを含む命令ワード200のフェッチ動作を調査して修復することをシークしかねない。
【0072】
図13に、図12に示すタイプのプリフェッチアボートを処理するメカニズムを含むJavaバイトコードを処理するデータ処理システム内の命令パイプライン208の部分を示す。命令バッファは、2つの命令ワードレジスタ210と212を含み、これらは各々が32ビットの命令ワードをストアする。Javaバイトコードは、各々が、8ビット長であり、ゼロ又は1つ以上のオペランド値がそれに伴っている。マルチプレクサ214のグループは、デコーディングされるべき現行のJavaバイトコード命令の第1バイトのアドレスを示す現行のJavaバイトコードポインタ位置によって、適切なバイトを命令ワードレジスタ210と212内から選択する働きをする。
【0073】
命令ワードレジスタ210と212の各々に対して、それぞれ命令アドレスレジスタ216及び218並びにプリフェッチアボートフラグレジスタ220及び222が関連している。これらの関連したレジスタは、それぞれが、自身が関連する命令ワードのアドレスと、その命令ワードがメモリシステムからフェッチされたときにプリフェッチアボートが発生したかどうかとをストアする。この情報は、パイプラインを通じて、命令ワード自身と共に渡されるが、それは、この情報が一般的には、パイプラインをさらに下って必要とされるからである。
【0074】
マルチプレクサ224、226及び228によって、入力バッファ装置を、所望次第でバイパスすることが可能となる。このタイプの動作は既述した。命令パイプライン208は、分かりやすいように、既述した命令パイプラインの全ての特徴を図示しているわけではないことが理解されるであろう。同様に、既述の命令パイプラインは、命令パイプライン208の全ての特徴を図示しているわけではない。実際、システムは、この2つの命令パイプラインに示す機能の組み合わせを備えている。
【0075】
命令パイプライン208のバイトコードデコーディングステージ内で、バイトコードデコーダ230は、マルチプレクサ224からの少なくともJavaバイトコードに、また、オプションとして、マルチプレクサ226と228からの1バイト又は2バイトのオペランドに応答して、マッピングされた1つ以上の命令又は対応する制御信号を発生し、パイプライン中のさらなるステージまで達して、デコーディングされたJavaバイトコードに対応する処理を実行する。
【0076】
図12に示すタイプのプリフェッチアボートが発生すると、Javaバイトコード自身は有効であるが、それに続くオペランド値は有効ではなく、また、正しい動作は、プリフェッチアボートが修復されない限り発生しない。バイトコード例外ジェネレータ232は、レジスタ216及び218からの命令ワードアドレス並びにレジスタ220及び222からのプリフェッチアボートフラグに応答して、図12に示す状況のタイプの発生を検出する。バイトコード例外ジェネレータ232は、このような状況を検出すると、マルチプレクサ234に対して、バイトコードデコーダ230によってではなく、バイトコード例外ジェネレータ自身によって発生された命令又は制御信号を後続のステージに対して、発行させる。バイトコード例外ジェネレータ232は、図12のプリフェッチアボート状況を検出すると、それに応答して、ハードウエアにそのJavaバイトコードを解釈されるのではなくて、アボートされているJavaバイトコードをエミュレートするARM32ビットコードフラグメントの実行をトリガーする。このようにして、プリフェッチアボートを受けた可変長Java命令は自身は実行されないが、その替わり、32ビットARM命令のシーケンスによって置き換えられる。命令をエミュレートするために用いられたARM命令は、1つ以上のオペランドバイトをロードするときにデータのアボートを受ける可能性が高く、これらのデータアボートは、プリフェッチアボートが、これらのバイトが元来第2の命令ワード202の1部としてフェッチされたという同じ理由で発生し、また、さらなるプリフェッチ及びデータアボートが、ARM32ビットコードフラグメントの実行中に発生する可能性がある。これらのアボートの全てが、ARM命令の実行中に発生し、したがって、既存のアボート例外ハンドラルーチンによって処理されるであろう。
【0077】
バイトコードがフェッチされたときに発生したプリフェッチアボートはこのように抑制される(すなわち、ARMコアまでは達しない)。その替わりに、ARM命令シーケンスが実行され、また、これらのARM命令で発生するいかなるアボートは、問題があったバイトコードをステップオーバーされるような既存のメカニズムを用いて取り扱う。バイトコードをアボートで取って換えるエミュレート用ARM命令が実行された後で、バイトコードの実行が再開される。
【0078】
バイトコード自身にプリフェッチアボートがあると、プリフェッチアボートと印付けされたARM命令が、ARMパイプラインの残余に渡される。パイプラインの実行ステージに到達すると、それは、プリフェッチアボート例外を発生させるが、これはARM命令に対するプリフェッチアボートを処理する完全に標準的な方法である。
【0079】
バイトコードにプリフェッチアボートは存在しないが、図12に示すように、そのオペランドの内の1つ以上がそうであるばあい、そのバイトコードに対するソフトウエアコードフラグメントがコールされる。ARMパイプラインの残余に渡されて、コードフラグメントをコールさせたいかなるARM命令も、プリフェッチアボートを印付けされず、したがって、それがパイプラインの実行ステージに到達すると正常に実行される。
【0080】
図14に、図12に示す状況のタイプを検出するためにバイトコード例外ジェネレータ232によって用いられるタイプの論理式を示す。図13(ブロック210、216及び220が1つの半分を形成し、一方、ブロック212、218及び222が他方の半分を形成しているが、これは、図13中のこれらのエレメントの周りの鎖線によって示されている)で“Half1”で示されているが、スイングバッファのどちらか一方の半分が、第1の命令ワード(図12中の200)を現時点で保持しており、また、“Half2”で示されるスイングバッファの他方の半分が、第2の命令ワード(図12中の202)を保持している。ここで、PA(Half1)は、ブロック220と222のどちらであれそのコンテンツはHalf1中にあり、Half2も同様であることを意味するものとする。
【0081】
次に、図12に記載する状況は、PA(Half1)が偽であり、PA(Half2)が真であり、また、バイトコードおよびそのオペランドが、スイングバッファの2つの半分同士間の境界にまたがっていることを示している。(印付けされたページ境界が有るという事実は、単純に通常は、2つのPA()値が互いに異なっていることが可能であるための要件であるからである。)
【0082】
スイングバッファの半分が各々ワードをストアしており、また、ハードウエアサポートされているバイトコードが最大で2つのオペランドに制限されているような好ましい設計においては、バイトコードおよびそのオペランドが境界にまたがるかどうかを判断するための式は:
((オペランドの数=1)AND(bcaddr[1:0]))
OR((オペランドの数=2)AND(bcaddr[1]=1))
ここで、bcaddrは、バイトコードのアドレスである。これによって、図14に示す論理式を誘導することが可能である。
【0083】
プリフェッチアボートを識別する他の技法、例えば、メモリページの境界から所定の距離内から始まる可変長命令を用いてもよい。
【0084】
図15に、Javaバイトコードの解釈と関連するサポートコードの構造体を略式に示す。これは、前述の図に類似しているが、この場合、バイトコード例外イベントによってトリガーされるバイトコード例外処理コードフラグメントを指すポインタが含まれていることを示している。したがって、Javaバイトコードは各々が、その動作をエミュレートする関連のARMコードフラグメントを有している。さらに、発生するバイトコード例外は各々が、ARM例外処理コードの関連部分を有している。図示されている場合では、バイトコードプリフェッチアボート取り扱いルーチン236が、既述のタイプのプリフェッチアボートがバイトコード例外ジェネレータ232によって検出されるとトリガーされるように備えられている。このアボート処理コード236が作用して、そのトリガーを生じさせた可変長命令の開始時でバイトコードを識別し、次に、コードフラグメントの集合内のそのバイトコードに対する対応するエミュレーションコードを呼び出す。
【0085】
図16は、バイトコード例外ジェネレータ232の動作と後続の処理を略式に示すフローチャートである。ステップ238は、図14の式が真であるかどうか判断する働きをする。この式が偽であれば、このプロセスは終了する。
【0086】
ステップ238が、図12中に示す状況のタイプを示している場合、バイトコード例外ジェネレータ232によって始動されるべきバイトコードプリフェッチアボート例外をトリガーするステップ246が、実行される。バイトコード例外ジェネレータ232は、ARMコードバイトコードプリフェッチアボートハンドラ236の実行を単純にトリガーする。アボートハンドラ236は、ステップ248で、可変長命令を開始させるバイトコードを識別する働きをし、次にステップ250で、この識別されたバイトコードをエミュレートするARM命令のコードフラグメントの実行をトリガーする。
【0087】
プリフェッチアボートを取り扱う上記のメカニズムは、オペランドの数が4つ以下(すなわち、合計で5バイト以下)である状況では良好に作用するが、そうでない場合、バイトコードとそのオペランドが第2のバッファからオーバーフローする可能性がある。実際、それに対してハードウエア加速メカニズムを提供することが望ましいバイトコードはすべて、0、1又は2つのオペランドを有し、残余のバイトコードはあらゆる場合にソフトウエアで処理されるが、これは主としてそれが複雑であるからである。
【0088】
図17に、複数のユーザモードプロセッサ302、304、306及び308を制御するオペレーティングシステムを示す。オペレーティングシステム300は、スーパーバイザモードで動作し、他のプロセス302、304、306及び308はユーザモードで動作するが、このユーザモードは、オペレーティングシステム300がスーパーバイザモードで動作する場合よりシステムの構成制御パラメータに対して有するアクセス権が小さい。
【0089】
図17に図示するように、プロセス302と308は、それぞれ別のJava仮想マシンに関連している。これらのJava仮想マシン302と308は各々、それ自身の構成データがバイトコード変換マッピングデータ310及び312並びに構成レジスタデータ314及び316から形成されている。実際、1セットのJava加速ハードウエアが、プロセス302と308の双方を実行するために設けられているが、これら互いに異なるプロセスがJava加速ハードウエアを用いているときは、これらは各々が、それが、自身の関連する構成データ310、312、314及び316で構成されていることを必要とすることが理解されるであろう。したがって、オペレーティングシステム300が、直前のプロセスが使用していたものとは異なったJava加速ハードウエアを用いて、あるプロセスに実行を切り替えると、そのJava加速ハードウエアは、再初期化して再構成しなければならない。オペレーティングシステム300は、Java加速ハードウエアの再初期化と再構成を自分自身では実行しないが、Java加速ハードウエアと関連する構成有効インジケータを無効な状態にセットすることによってそれが実行されるべきであることを示す。
【0090】
図18に、ネイティブ命令セット(例えば、ARM命令セット)と関連のJava加速ハードウエア322を有するプロセッサコアを含むデータ処理システム318を略式に示す。メモリ324は、ARM命令又はJavaバイトコードという形態を持つコンピュータプログラムコードをストアする。Javaバイトコードの場合、これらは、Java加速ハードウエア322中を通過し、ここで、解釈されてARM命令(又はARM命令に対応する制御信号)のストリームとなり、これが次にプロセッサコア320によって実行される。Java加速ハードウエア322は、それに対してJavaバイトコードを実行することが望ましいJava仮想マシンの各々に対してプログラミングを必要とするバイトコード変換テーブル326を含んでいる。さらに、構成データレジスタ328とオペレーティングシステム制御レジスタ330が、Java加速ハードウエア322内に備えられていて、その構成を制御している。オペレーティングシステム制御レジスタ330内には、構成有効インジケータがフラグCVという形態で含まれているが、このフラグは、セットされていると、Java加速ハードウエア322の構成が有効であり、セットされていないと、それが無効であることを示す。
【0091】
Java加速ハードウエア322は、それがJavaバイトコードを実行することを求めるときには、構成有効インジケータに反応して、構成有効インジケータが、無効形態にあるJava加速ハードウエア322に対する構成データに対応していれば、構成無効例外をトリガーする。構成無効例外ハンドラは、プリフェッチアボートハンドラについて上述したそれと類似した仕方で提供されるARMコードルーチンであったりする。ハードウエアメカニズムはJava加速ハードウエア322内に装備されるが、このハードウエアは、構成有効インジケータを、構成データが有効であることを示す形態にセットするが、それは、構成例外がトリガーされており、しかも、それが、新しい有効構成データが、実際に、しかるべき位置に書き込まれる以前であるからである。このように、構成データが実際に書き込まれる前に構成有効インジケータをセットすることは直感に反するように思われるかも知れないが、この方式は、かなり利点があって、構成データのセッティングの途中でプロセスがスワップすると発生することがある問題を避けることが可能である。次に、構成例外ルーチンは、自身が対応するJava仮想マシンに対する必要とされる構成データを、バイトコード変換テーブルエントリを既述したように書き込み、また、他の構成データレジスタ値328を必要に応じて書き込むことによってセットアップする。構成例外コードは、構成データの書き込みが、他のどのようなタスクがJava加速ハードウエア322によって実行されるにしても、それ以前に完了することを保証しなければならない。
【0092】
図19に、オペレーティングシステム300の動作を略式に示す。ステップ332で、オペレーティングシステムは、プロセスの切り替えが検出されるのを待つ。プロセスの切り替えが検出されたら、ステップ334で、新しいプロセスが、Java加速ハードウエア322(また、前述したように、Jazelleとも呼ばれる)を用いるプロセスであるかどうか判断する。Java加速ハードウエア322が使用されていない場合、ステップ336に進み、ここで、Java加速ハードウエア322はディスエーブルされ、次に、ステップ339に進み、ここで、新しいプロセスが実行される。Java加速ハードウエア322が用いられている場合、ステップ338に進み、ここで、読み出されている新しいプロセスが、オペレーティングシステム300によって記録されているのと同じ、Java加速ハードウエア322のストア済みの現行のオーナであるかどうか判断される。オーナが変わっていなかった場合(すなわち、新しいプロセスが、事実、Java加速ハードウエア322を最後に使用したプロセスである場合)、ステップ337に進み、ここで、Java加速ハードウエア322はイネーブルされて、次に、ステップ339に進む。この新しいプロセスがストアされている現行のオーナではない場合、ステップ340に進み、ここで、構成有効インジケータがセットされて、Java加速ハードウエア322の現行の構成が有効ではないことを示す。これが、この構成の変化を管理するオペレーティングシステム300の責任の限界であり、構成データの実際の更新は、自分自身の例外処理メカニズムと共に動作するJava加速ハードウエア322のタスクとして委ねられる。
【0093】
ステップ340の後、ステップ342が、ステップ337と次にステップ339に実行制御が渡される以前に、ストアされている現行のオーナを新しいプロセスとなるように更新する働きをする。
【0094】
図20に、Java加速ハードウエア322によって実行される動作を示す。ステップ344で、Java加速ハードウエア322は、実行すべきバイトコードが受領されるのを待つ。バイトコードが受領されると、ハードウエアは、構成有効インジケータが、Java加速ハードウエア322の構成が有効であることを示しているかどうか、ステップ346を用いてチェックする。この構成が有効であれば、ステップ348に進み、ここで、受領されたバイトコードが実行される。
【0095】
構成が無効であれば、ステップ350に進み、ここで、Java加速ハードウエア322は、ハードウエアメカニズムを用いて、構成有効インジケータを、それが、構成が有効であることを示すようにセットする。これはまた、所望次第で例外ハンドラ内のプログラム命令によって実行することも可能である。構成無効例外ハンドラは、コードフラグメントを指すポインタのテーブルと関連の例外の各々を処理するための適切なコードフラグメントとの組み合わせ、例えば、命令のソフトウエアエミュレーション、この場合におけるようなプリフェッチアボート(それは双方とも既述した)又は構成例外として提供してもよい。
【0096】
ステップ354は、構成無効例外を作成し、また、必要な構成データをJava加速ハードウエア322に書き込む働きをするARMコードを実行する働きをする。このARMコードは、プログラム可能変換テーブル326に存在するコプロセッサレジスタ書き込みと、他の構成レジスタ330とから成るシーケンスという形態を取り得る。ステップ354の後で、ステップ356は、Javaバイトコードプログラムにジャンプして戻り、オリジナルのバイトコードの実行を再試行する。
【0097】
ステップ354又はステップ358中にプロセスの切り替えが発生すれば、それまでの構成のセットアップが、他のプロセスによって無効とされ、また、構成有効インジケータがオペレーティングシステムによってクリアされる可能性がある。図20の手順では、この結果、344−346−350−352−354とループを再度巡回する、すなわち、再構成が最初から再試行されることになる。バイトコードが結局、実際的に実行されると、構成は有効であることが保証される。
【0098】
図21に、さらに浮動小数点サブシステムを組み込む図1に示すようなデータ処理システムを示す。非対応(unhandled)浮動小数点演算が発生すると、浮動小数点サブシステムは、この非対応浮動小数点演算をARMコードで処理するメカニズムとなる。
【0099】
このようなサブシステムの例に、英国ケンブリッジ市のARM社製のVFPソフトウエアエミュレータシステムがある。VFPソフトウエアエミュレータシステムの場合、全ての浮動小数点演算は、非対応浮動小数点演算として扱われるが、それは、浮動小数点演算を実行するハードウエアが存在しないからである。したがって、浮動小数点演算はすべて、VFPの動作をARMコードでエミュレートする備えられたメカニズムを用いて処理される。
【0100】
このようなシステムの場合、非対応浮動小数点演算は正確である、すなわち、非対応浮動小数点演算の検出のポイントは、非対応浮動小数点演算の発生のポイントと同じである。
【0101】
図22に、浮動小数点演算レジスタと非対応動作状態フラグをさらに組み込む、図1と21に示すようなデータ処理システムを示す。
【0102】
このようなサブシステムの例に、英国のケンブリッジ市のARM社製のVFPハードウエアシステムがある。VFPハードウエアシステムの場合、あるタイプの浮動小数点演算だけが、非対応浮動小数点演算として扱われ、残余はVFPハードウエアによって処理される。
【0103】
非対応浮動小数点演算を受ける演算のクラスには、次のものがある:
−ゼロによる除算
−NaNを伴う演算
−無限を伴う演算
−非正規化された数を伴う演算
【0104】
このようなシステムの場合、非対応浮動小数点演算は不正確である、すなわち、非対応浮動小数点演算の検出のポイントは、必ずしも非対応浮動小数点演算の発生のポイントと同じではない。
【0105】
非対応VFP演算は、VFPコプロセッサが、通常はARM命令ストリームの1部を形成するが、図1に示すバイトコードトランスレータの存在下では、バイトコードがARM命令とVFP命令の組み合わせに変換された結果であるVFP命令を受け入れることを拒絶すると発生する。
【0106】
非対応VFP演算がARM命令ストリームの1部として発生する場合、非対応VFP演算を処理するARMメカニズムが、非対応命令例外を発生して、未定義命令ベクトル上にインストールされた未定義命令ハンドラを実行することになっている。
【0107】
VFPソフトウエアシステムの場合、全てのVFP演算は非対応VFP演算として扱われて、同じARMメカニズムが適用され、未定義命令例外が発生されて、未定義命令ハンドラが実行される。
【0108】
非対応VFP演算がARM命令ストリームの1部として発生すると、未定義命令ハンドラは、命令ストリームを検査することによって、非対応VFP演算をもたらした命令が実際にVFP命令であり、他の未定義命令ではないことを理解することが可能であり、また、未定義命令ハンドラは、特権モードで実行されるに連れて、必要とされるコプロセッサ命令を発行して、VFPプロセッサから必要とするいかなる内部状態でも抽出して、この必要とされた命令をソフトウエアで完了することが可能である。未定義命令ハンドラは、ARM命令ストリーム中で識別された命令とVFPの内部状態との双方を用いて、非対応演算を処理する。
【0109】
VFPを実現すると、非対応演算をもたらした命令は、非対応演算が検出された時に実行中であった命令とは同じではない場合が多い。非対応演算は、前に発行され、後続のARM命令と平行に実行されているが、非対応状態に遭遇する命令によってもたらされている。VFPは、これを、後続のVFP命令を受け入れることを拒絶することによって信号通知し、VFPに質問して非対応演算のオリジナルの原因を発見することが可能なVFP未定義命令ハンドラを入力させる。
【0110】
Jazelleが、VFPサブシステムを含むシステムに統合されると、次のことが当てはまる:
−Java浮動小数点命令が、対応するVFP命令を直接にコア内で、VFP命令との直接的対応性を有する信号のセットを用いて発行する。
−VFPは、非対応動作に遭遇すると、非対応動作状態を信号通知する。
−Jazelleは、非対応動作信号を、それがコアに送られることを防止することによって、また、非対応命令ハンドラが、ARM命令ストリーム中のVFP命令が不正確動作(であること)を信号通知すると発生するように実行することを防止することによってインターセプトする。替わりに、Jazelleは、JazelleVMサポートコードによって処理されるJazelleVFP例外を発生する。
【0111】
VMサポートコードは、このようなVFP例外に遭遇すると、FMRX Rd命令や、FPSCR命令などのVFP‘no−operaton‘命令、すなわち、Jazelle状態をそのままに残すなんらかのVFP命令を実行すべきである。これによって、VFPハードウエアがサポートコードに同期し、また、浮動小数点演算レジスタが、この場合非対応動作としてセットされるべき非対応動作状態フラグと共に指定したいかなるVFP演算も完了する。一旦演算が完了したら、非対応動作状態フラグはクリアされる。
【0112】
この方式は、Jazelleによって発行された命令シーケンスは、参照してその全体をここに組み込む、2000年10月5日に提出された英国同時係属特許出願第0024404.0号に記載されておるように再開始可能であるという事実を利用している。この技法と共に上記の参考文献に記載の技法を用いることによって、非対応動作をもたらしたVFP命令の発生をもたらした命令を再開始することが可能となる。
【0113】
図23に、Javaバイトコードトランスレータによって発行された対応するVFP命令を、Java浮動小数点演算の各々に対して示す。ここで、発行されたVFP命令だけを図示しており、Javaバイトコードトランスレータは、VFP命令と共に追加のARM命令を発行することがあることに注意されたい。Jazelleバイトコードトランスレータはまた、追加のVFPロードを発行して、浮動小数点値をロード又はストアする。
【0114】
図24に、‘dmul’バイトコード命令とそれに続く‘dcmpg’命令から成るJavaバイトコードのシーケンスに対するJazelleによって発行される、命令又は命令に対応する信号のシーケンスを示す。図示のシーケンスは、(dmul、dcmpg)バイトコードシーケンスを、倍精度レジスタD0、D1及びD2がJava実行スタックのトップから3番目のエレメント、トップから2番目のエレメント及びトップのエレメントをそれぞれ保持し、また、バイトコードシーケンスの整数結果が整数レジスタR0中に置かれる時点で実行することになっている場合に発生する。
【0115】
図25、27、29及び30に、非対応浮動小数点演算が、変換された命令シーケンスの様々なポイントで発生するときの動作のシーケンスを示す。図25と29は、非対応浮動小数点演算が、FMULD命令によってもたらされたときの動作のシーケンスを示す。図27と30は、非対応浮動小数点演算がFCMPD命令によってもたらされたときの動作のシーケンスを示す。図25と27は、非対応浮動小数点演算の信号通知が不正確であるときの動作のシーケンスを示す。図29と30は、非対応浮動小数点演算の信号通知が正確であるときの動作のシーケンスを示す。
【0116】
上記から分かるように、次に示す4つのイベントシーケンスが考えられる:
1)図25:不正確な非対応動作検出、システムは不正確な非対応動作検出を用いているにもかかわらず、非対応動作を信号通知するJavaバイトコードは、それをもたらしたものと同じである。
2)図27:不正確な非対応動作検出、システムは不正確な非対応動作検出を用いているにもかかわらず、非対応動作を信号通知するJavaバイトコードは、それをもたらしたものと同じである。これは、第2のJavaバイトコード‘dcmpg’が、1つのJavaバイトコードに対して2つのVFP命令を発行し、この内の最初のものが非対応動作をもたらし、2番目のものがそれを信号通知するからである。
3)図29:正確な非対応動作検出、非対応動作を信号通知するJavaバイトコードは、それをもたらしたものと同じである。
4)図30:正確な非対応動作検出、非対応動作を信号通知するJavaバイトコードは、それをもたらしたものと同じであるが、‘dcmpg’バイトコードを実行した結果発行されたこの2つのVFP命令の内のどちらが非対応動作をもたらして信号通知したか分からない。
【0117】
上記の再開始技法をこの技法と組み合わせると、これらの考えられるイベントシーケンスの全てを正確に処理することが可能となる。
【0118】
図26と28に、それぞれ図25と27に図示する動作のシーケンスに対応してもたらされた非対応動作の直後の時点における浮動小数点演算レジスタの状態と非対応動作状態フラグを示す。
【0119】
すべて2000年10月5日に提出された英国同時係属特許出願第0024399.8号、第00244020.0号、第00224404.6号及び第0024396号並びに、これまたJavaバイトコード解釈システムを記載している、2000年11月20日に提出された英国特許出願第0028249.1号及び2000年12月7日に提出された米国特許出願第09/731,060号を参照のこと。これらの同時係属出願は、その全体を参照してここに組み込む。
【図面の簡単な説明】
【図1】 バイトコード変換ハードウエアを組み込むデータ処理システムの図である。
【図2】 バイトコードのソフトウエア命令解釈を示す略図である。
【図3】 シーケンス終了命令で終了するソフトウエア命令インタープリタ内のコードセグメントの動作を略式に表すフローチャートである。
【図4】 バイトコードの代わりに実行されるコードフラグメントの例の図である。
【図5】 ハードウエアバイトコード実行サポートを有しない例示のデータ処理システムの例の図である。
【図6】 図5のシステムで動作する場合のソフトウエア命令インタープリタの作用を示すフローチャートである。
【図7】 Javaバイトコードと処理動作間のマッピングの図である。
【図8】 コンテンツアドレス可能メモリという形態でのプログラム可能変換テーブルの図である。
【図9】 ランダムアクセスメモリという形態でのプログラム可能変換テーブルの図である。
【図10】 プログラム可能変換テーブルの初期化とプログラミングを示す略式のフローチャートである。
【図11】 Javaバイトコード解釈を実行するシステム内の処理パイプラインのある部分を示す略図である。
【図12】 2つの命令ワードと2つの仮想メモリページにまたがる可変長命令を示す略図である。
【図13】 図12に示すタイプのプリフェッチアボートを取り扱うメカニズムを含むデータ処理システムパイプラインのある部分を示す略図である。
【図14】 図12に示すタイプのプリフェッチアボートがどのようにして検出されるかを指定する1つの方法である論理式を示す図である。
【図15】 アボートの取り扱いと命令のエミュレーションのためのサポートコードの配置を示す略図である。
【図16】 可変長バイトコード命令のプリフェッチアボートを取り扱うために実行される処理を示す略式のフローチャートである。
【図17】 オペレーティングシステムとこのオペレーティングシステムによって制御される様々なプロセス間の関係を示す図である。
【図18】 プロセッサコアとJavaアクセラレータを含む処理システムを示す図である。
【図19】 Javaアクセラレータの構成を制御する際におけるオペレーティングシステムの略式に動作を示すフローチャートである。
【図20】 Java仮想マシンが、Java加速メカニズムの構成を制御する際に自身が使用しているJava加速メカニズムと共に実行する動作を示す略式のフローチャートである。
【図21】 図1に示すようなバイトコード変換ハードウエアとさらに浮動小数点サブシステムを組み込むデータ処理システムを示す図である。
【図22】 図1のようなバイトコード変換ハードウエアと、図21のような浮動小数点サブシステムと、さらに、浮動小数点演算レジスタ及び非対応動作状態フラグを組み込むデータ処理システムを示す図である。
【図23】 Java浮動小数点命令に対して発生されたARM浮動小数点命令を示す図である。
【図24】 Javaの‘dmul’命令と‘dcmpg’命令とに対するJava加速ハードウエアによって発生されるARM命令のシーケンスを示す図である。
【図25】 ‘dmul’命令を実行し、次に、‘dcmpg’命令を実行する場合の動作のシーケンスを示す図であり、ここで、非対応浮動小数点演算が、Javaの‘dmul’命令に対するJava加速ハードウエアによって発生されたFCMPD命令の実行によって引き起こされ、図示されるこの動作のシーケンスは、図22に対応する不正確な非対応動作の検出を使用するシステム用である。
【図26】 図25のFMULD命令の実行後の、浮動小数点演算レジスタと非対応 動作状態フラグの状態を示す図である。
【図27】 ‘dmul’命令を実行し、次に、‘dcmpg’命令を実行する場合の動作のシーケンスを示す図であり、ここで、非対応浮動小数点演算が、Javaの‘dcmpg’命令に対するJava加速ハードウエアによって発生されたFCMPD命令の実行によって引き起こされ、図示されるこの動作のシーケンスは、図22に対応する不正確な非対応動作の検出を使用するシステム用である。
【図28】 図27のFCMPD命令の実行後の、浮動小数点演算レジスタと非対応動作状態フラグの状態を示す図である。
【図29】 ‘dmul’命令を実行し、次に、‘dcmpg’命令を実行する場合の動作のシーケンスを示す図であり、ここで、非対応浮動小数点演算が、Javaの‘dmul’命令に対するJava加速ハードウエアによって発生されたFMULD命令の実行によって引き起こされ、図示されるこの動作のシーケンスは、図21に対応する正確な非対応動作を検出するシステム用である。
【図30】 ‘dmul’命令を実行し、次に、‘dcmpg’命令を実行する場合の動作のシーケンスを示す図であり、ここで、非対応浮動小数点演算が、Javaの‘dcmpg’命令に対するJava加速ハードウエアによって発生されたFCMPD命令の実行によって引き起こされ、図示されるこの動作のシーケンスは、図21に対応する正確な非対応動作を検出するシステム用である。
Claims (48)
- 第1のプログラム命令セットからのプログラム命令又は第2のプログラム命令セットからのプログラム命令の制御下でデータを処理する装置において、該装置が、
プロセッサコアと、
前記プロセッサコアによって実行されることよって、前記第2のプログラム命令セットの内のプログラム命令を、シーケンス終了命令で終了する、前記第1のプログラム命令セットの内のプログラム命令のシーケンスとして解釈するように動作するソフトウエア命令インタープリタと、
を備え、
前記プロセッサコア内の命令デコーダ回路は、前記シーケンス終了命令に反応して、
(i)前記第2の命令セットに対するハードウエア命令変換ユニットが利用可能でない場合、前記第2の命令セットの内の次のプログラム命令の解釈を、前記ソフトウエア命令インタープリタを用いて始動し、
(ii)前記第2の命令セットに対する前記ハードウエア命令変換ユニットが利用可能である場合、前記第2の命令セットの内の前記次のプログラム命令の変換を、前記ハードウエア命令変換ユニットを用いて始動する、
前記装置。 - 前記ハードウエア命令変換ユニットが、
(i)前記ハードウエア命令変換ユニットがイネーブルされていないため、又は
(ii)ハードウエア命令変換ユニットが存在しないため、
利用可能でない、請求項1に記載の装置。 - 前記命令デコーダ回路は、少なくとも1つのハードウエア命令変換ユニットフラグに反応して、ハードウエア命令変換ユニットが利用可能であるかどうか検出する、請求項1又は2に記載の装置。
- 前記ソフトウェア命令インタープリタは、前記第1の命令セットの内のプログラム命令の複数のシーケンスを含み、前記複数のシーケンスが、前記第2の命令セットの内のプログラム命令にそれぞれ対応しており、
前記シーケンス終了命令が、前記第2の命令セットの内の前記次のプログラム命令を解釈するように働く前記第1の命令セットの内のプログラム命令の前記複数のシーケンスの内の更なるシーケンスの前記ソフトウエア命令インタープリタ内のソフトウエア解釈開始アドレスを指定し、前記ソフトウエア命令インタープリタが、前記ハードウエア命令変換ユニットが利用可能でない場合に前記複数のシーケンスの内の前記更なるシーケンスを用いる、請求項1、2又は3に記載の装置。 - 前記シーケンス終了命令が、前記ソフトウエア解釈開始アドレスをストアするレジスタをオペランドとして指定する、請求項4に記載の装置。
- 前記シーケンス終了命令が、前記ソフトウエア解釈開始アドレスをストアするため、所定のレジスタを用いる、請求項4に記載の装置。
- 前記シーケンス終了命令が、前記第2の命令セットの内の前記次のプログラム命令を指すハードウエア変換開始アドレスを指定し、前記ハードウエア変換開始アドレスを前記ハードウエア命令変換ユニットが使用して、前記ハードウエア命令変換ユニットが利用可能であれば、前記第2の命令セットの内の前記次のプログラム命令にアクセスする、請求項1〜6の内のどれかに記載の装置。
- 前記シーケンス終了命令が、前記ハードウエア変換開始アドレスをストアするために、所定のレジスタを用いる、請求項7に記載の装置。
- 前記シーケンス終了命令が、前記ハードウエア変換開始アドレスをストアするレジスタを指定するオペランドを含む、請求項7に記載の装置。
- 前記ソフトウエア命令インタープリタが、前記第1の命令セットの内のプログラム命令の複数のシーケンスを含み、前記複数のシーケンスが、前記第2の命令セットの内のプログラム命令にそれぞれ対応する、請求項1〜3の内のどれかに記載の装置。
- 前記ソフトウエア命令インタープリタが、前記複数のシーケンスを指すポインタのテーブルを含む、請求項10に記載の装置。
- 前記ポインタテーブル内のエントリが、解釈される予定の、前記第2の命令セットの内のプログラム命令によって索引付けされる、請求項11に記載の装置。
- 前記ポインタテーブルのベースアドレスが、ベースアドレスレジスタ内にストアされる、請求項11及び12の内のどちらか記載の装置。
- 前記第1の命令セットの内の前記プログラム命令が、前記プロセッサコアによって実行されるネイティブプログラム命令である、請求項1〜13の内のどれかに記載の装置。
- 前記ハードウエア命令変換ユニットが、バイトコード命令を前記プロセッサコアによって実行される1つ以上のネイティブプログラム命令に変換する、請求項14に記載の装置。
- 前記シーケンス終了命令が、前記第1の命令セットのメンバーである、請求項1〜15の内のどれかに記載の装置。
- 第1のプログラム命令セットからのプログラム命令又は第2のプログラム命令セットからのプログラム命令の制御下でデータを処理する方法において、該方法は、
プロセッサコアが実行するソフトウエア命令インタープリタが、前記第2のプログラム命令セットの内のプログラム命令を、シーケンス終了命令で終了する、前記第1のプログラム命令セットの内のプログラム命令のシーケンスとして解釈するステップと、
前記プロセッサコア内の命令デコーダ回路が、前記シーケンス終了命令に反応して
(i)前記第2のプログラム命令セットに対するハードウエア命令変換ユニットが利用可能でない場合、前記第2の命令セットの内の次のプログラム命令の解釈を、前記ソフトウエア命令インタープリタを用いて始動し、
(ii)前記第2のプログラム命令セットに対する前記ハードウエア命令変換ユニットが利用可能である場合、前記第2の命令セットの内の前記次のプログラム命令の変換を、前記ハードウエア命令変換ユニットを用いて始動する、
ステップと、
を含む方法。 - 前記ハードウエア命令変換ユニットが、
(i)前記ハードウエア命令変換ユニットがイネーブルされていない、又は
(ii)ハードウエア命令変換ユニットが存在しない、
ために利用可能でない、請求項17に記載の方法。 - 少なくとも1つのハードウエア命令変換ユニットフラグを用いて、前記命令デコーダ回路がハードウエア命令変換ユニットが利用可能であるかどうか検出する、請求項17と18のどちらかに記載の方法。
- 前記ソフトウエア命令インタープリタが、前記第1命令セットの内のプログラム命令の複数のシーケンスを含み、前記複数のシーケンスが、前記第2の命令セットの内のプログラム命令にそれぞれ対応しており、前記シーケンス終了命令が、前記第2の命令セットの内の前記次のプログラム命令を解釈するように働く前記第1の命令セットの内のプログラム命令の前記複数のシーケンスの内の更なるシーケンスの前記ソフトウエア命令インタープリタ内のソフトウエア解釈開始アドレスを指定し、前記ソフトウエア命令インタープリタが、前記ハードウエア命令変換ユニットが利用可能でない場合に前記複数のシーケンスの内の前記更なるシーケンスを用いる、請求項17、18又は19に記載の方法。
- 前記シーケンス終了命令が、前記ソフトウエア解釈開始アドレスをストアするレジスタをオペランドとして指定する、請求項20に記載の方法。
- 前記シーケンス終了命令が、前記ソフトウエア解釈開始アドレスをストアするため、所定のレジスタを用いる、請求項18に記載の方法。
- 前記シーケンス終了命令が、前記第2の命令セットの内の前記次のプログラム命令を指すハードウエア変換開始アドレスを指定し、前記ハードウエ変換開始アドレスを前記ハードウエア命令変換ユニットが使用して、前記ハードウエア命令変換ユニットが利用可能であれば、前記第2の命令セットの内の前記次のプログラム命令にアクセスする、請求項17〜22の内のどれかに記載の方法。
- 前記シーケンス終了命令が、前記ハードウエア変換開始アドレスをストアするために、所定のレジスタを用いる、請求項23に記載の方法。
- 前記シーケンス終了命令が、前記ハードウエア変換開始アドレスをストアするレジスタを指定するオペランドを含む、請求項23に記載の方法。
- 前記ソフトウエア命令インタープリタが、前記第1命令セットの内のプログラム命令の複数のシーケンスを含み、前記複数のシーケンスが、前記第2の命令セットの内のプログラム命令にそれぞれ対応する、請求項17〜19の内のどれかに記載の方法。
- 前記ソフトウエア命令インタープリタが、前記複数のシーケンスを指すポインタのテーブルを含む、請求項26に記載の方法。
- 前記ポインタテーブル内のエントリが、解釈される予定の、前記第2の命令セットの内のプログラム命令によって索引付けされる、請求項27に記載の方法。
- 前記ポインタテーブルのベースアドレスが、ベースアドレスレジスタ内にストアされる、請求項27及び28の内のどちらかに記載の方法。
- 前記第1の命令セットの内の前記プログラム命令が、前記プロセッサコアによって実行されるネイティブプログラム命令である、請求項17〜28の内のどれかに記載の方法。
- 前記ハードウエア命令変換ユニットが、バイトコード命令を前記プロセッサコアによって実行される1つ以上のネイティブプログラム命令に変換する、請求項30に記載の方法。
- 前記シーケンス終了命令が、前記第1の命令セットのメンバーである、請求項17〜31の内のどれかに記載の方法。
- 第1のプログラム命令セットからのプログラム命令又は第2のプログラム命令セットからのプログラム命令の制御下でデータを処理するデータ処理装置を制御するコンピュータプログラムを記録したデータストレージ媒体において、該コンピュータプログラムは、プロセッサコアにより実行されるソフトウエア命令インタープリタロジックを含み、
前記ソフトウエア命令インタープリタロジックを動作させることにより、前記第2のプログラム命令セットの内のプログラム命令を、シーケンス終了命令で終了する、前記第1のプログラム命令セットの内のプログラム命令のシーケンスとして解釈し、
該シーケンス終了命令により、
(i)前記第2のプログラム命令セットに対するハードウエア命令変換ユニットが利用可能でない場合、前記プロセッサコア内の命令デコーダ回路が、前記第2の命令セットの内の次のプログラム命令の解釈を、前記ソフトウエア命令インタープリタロジックを用いて始動し、
(ii)前記第2の命令プログラムに対する前記ハードウエア命令変換ユニットが利用可能である場合、前記プロセッサコア内の命令デコーダ回路が、前記第2の命令セットの内の前記次のプログラム命令の変換を、前記ハードウエア命令変換ユニットを用いて始動する、
前記コンピュータプログラムを記録したデータストレージ媒体。 - 前記ハードウエア命令変換ユニットが、
(i)前記ハードウエア命令変換ユニットがイネーブルされていない、又は
(ii)ハードウエア命令変換ユニットが存在しない、
ために利用可能でない、請求項33に記載のコンピュータプログラムを記録したデータストレージ媒体。 - 少なくとも1つのハードウエア命令変換ユニットフラグを用いて、ハードウエア命令変換ユニットが利用可能であるかどうか検出する、請求項33と34のどちらかに記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記ソフトウェア命令インタープリタは、前記第1命令セットの内のプログラム命令の複数のシーケンスを含み、前記複数のシーケンスが、前記第2の命令セットの内のプログラム命令にそれぞれ対応しており、前記シーケンス終了命令が、前記第2の命令セットの内の前記次のプログラム命令を解釈するように働く前記第1の命令セットの内のプログラム命令の前記複数のシーケンスの内の更なるシーケンスの前記ソフトウエア命令インタープリタ内のソフトウエア解釈開始アドレスを指定し、前記ソフトウエア命令インタープリタロジックが、前記ハードウエア命令変換ユニットが利用可能でない場合に前記複数のシーケンスの内の前記更なるシーケンスを用いる、請求項33、34又は35に記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記シーケンス終了命令が、前記ソフトウエア解釈開始アドレスをストアするレジスタをオペランドとして指定する、請求項36に記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記シーケンス終了命令が、前記ソフトウエア解釈開始アドレスをストアするため、所定のレジスタを用いる、請求項36に記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記シーケンス終了命令が、前記第2の命令セットの内の前記次のプログラム命令を指すハードウエア変換開始アドレスを指定し、前記ハードウエア変換開始アドレスを前記ハードウエア命令変換ユニットが使用して、前記ハードウエア命令変換ユニットが利用可能であれば、前記第2の命令セットの内の前記次のプログラム命令にアクセスする、請求項33〜38の内のどれかに記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記シーケンス終了命令が、前記ハードウエア変換開始アドレスをストアするために、所定のレジスタを用いる、請求項39に記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記シーケンス終了命令が、前記ハードウエア変換開始アドレスをストアするレジスタを指定するオペランドを含む、請求項39に記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記ソフトウエア命令インタープリタが、前記第1命令セットの内のプログラム命令の複数のシーケンスを含み、前記複数のシーケンスが、前記第2の命令セットの内のプログラム命令にそれぞれ対応する、請求項33〜35の内のどれかに記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記ソフトウエア命令インタープリタが、前記複数のシーケンスを指すポインタのテーブルを含む、請求項42に記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記ポインタテーブル内のエントリが、解釈される予定の、前記第2のセットの命令の内のプログラム命令によって索引付けされる、請求項43に記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記ポインタテーブルのベースアドレスが、ベースアドレスレジスタ内にストアされる、請求項43及び44の内のどちらかに記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記第1の命令セットの内の前記プログラム命令が、前記プロセッサコアによって実行されるネイティブプログラム命令である、請求項33〜45の内のどれかに記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記ハードウエア命令変換ユニットが、バイトコード命令を前記プロセッサコアによって実行される1つ以上のネイティブプログラム命令に変換する、請求項46に記載のコンピュータプログラムを記録したデータストレージ媒体。
- 前記シーケンス終了命令が、前記第1の命令セットのメンバーである、請求項33〜47の内のどれかに記載のコンピュータプログラムを記録したデータストレージ媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB0113199A GB2376100B (en) | 2001-05-31 | 2001-05-31 | Data processing using multiple instruction sets |
PCT/GB2002/000688 WO2002097613A1 (en) | 2001-05-31 | 2002-02-18 | Data processing using multiple instruction sets |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008003900A Division JP2008123545A (ja) | 2001-05-31 | 2008-01-11 | 複数の命令セットを用いるデータ処理 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004520663A JP2004520663A (ja) | 2004-07-08 |
JP4216182B2 true JP4216182B2 (ja) | 2009-01-28 |
Family
ID=9915617
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003500729A Expired - Lifetime JP4216182B2 (ja) | 2001-05-31 | 2002-02-18 | 複数の命令セットを用いるデータ処理 |
JP2008003900A Abandoned JP2008123545A (ja) | 2001-05-31 | 2008-01-11 | 複数の命令セットを用いるデータ処理 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008003900A Abandoned JP2008123545A (ja) | 2001-05-31 | 2008-01-11 | 複数の命令セットを用いるデータ処理 |
Country Status (12)
Country | Link |
---|---|
US (1) | US6965984B2 (ja) |
EP (1) | EP1390841B1 (ja) |
JP (2) | JP4216182B2 (ja) |
KR (1) | KR100816781B1 (ja) |
CN (1) | CN1327338C (ja) |
DE (1) | DE60203612T2 (ja) |
GB (1) | GB2376100B (ja) |
IL (2) | IL155058A0 (ja) |
MY (1) | MY131818A (ja) |
RU (1) | RU2281547C2 (ja) |
TW (1) | TWI242158B (ja) |
WO (1) | WO2002097613A1 (ja) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6532531B1 (en) * | 1996-01-24 | 2003-03-11 | Sun Microsystems, Inc. | Method frame storage using multiple memory circuits |
WO2003025743A1 (fr) * | 2001-09-12 | 2003-03-27 | Hitachi, Ltd. | Systeme processeur ayant un accelerateur java |
GB2382175A (en) * | 2001-11-20 | 2003-05-21 | Hewlett Packard Co | Reconfigurable processor |
JP4049578B2 (ja) * | 2001-12-12 | 2008-02-20 | ユニ・チャーム株式会社 | 吸収性物品装着用ショーツ |
US7831807B1 (en) * | 2002-06-20 | 2010-11-09 | Unisys Corporation | System and method for expanding the instruction set of an instruction processor |
EP1387253B1 (en) * | 2002-07-31 | 2017-09-20 | Texas Instruments Incorporated | Dynamic translation and execution of instructions within a processor |
EP1391821A3 (en) * | 2002-07-31 | 2007-06-06 | Texas Instruments Inc. | A multi processor computing system having a java stack machine and a risc based processor |
EP1387250B8 (en) * | 2002-07-31 | 2012-02-29 | Texas Instruments Inc. | Processor that accomodates multiple instruction sets and multiple decode modes |
EP1387249B1 (en) * | 2002-07-31 | 2019-03-13 | Texas Instruments Incorporated | RISC processor having a stack and register architecture |
US20040031022A1 (en) * | 2002-08-02 | 2004-02-12 | Masayuki Kabasawa | Information processing device for multiple instruction sets with reconfigurable mechanism |
GB0309056D0 (en) * | 2003-04-22 | 2003-05-28 | Transitive Technologies Ltd | Block translation optimizations for program code conversion |
EP1489491A1 (en) * | 2003-06-19 | 2004-12-22 | Texas Instruments Incorporated | Dynamically changing the semantic of an instruction |
JP2009032263A (ja) * | 2003-07-07 | 2009-02-12 | Renesas Technology Corp | 情報処理装置 |
JP4224430B2 (ja) | 2003-07-07 | 2009-02-12 | 株式会社ルネサステクノロジ | 情報処理装置 |
US7770169B2 (en) * | 2004-05-17 | 2010-08-03 | Oracle America, Inc. | Thread rendezvous for read-only code in an object-oriented computing environment |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
US7769983B2 (en) * | 2005-05-18 | 2010-08-03 | Qualcomm Incorporated | Caching instructions for a multiple-state processor |
US20070288909A1 (en) * | 2006-06-07 | 2007-12-13 | Hong Kong Applied Science and Technology Research Institute Company Limited | Hardware JavaTM Bytecode Translator |
KR100781340B1 (ko) * | 2006-09-18 | 2007-11-30 | 삼성전자주식회사 | 사용자 정의 확장 연산을 처리하는 연산 시스템 및 방법 |
US7711927B2 (en) * | 2007-03-14 | 2010-05-04 | Qualcomm Incorporated | System, method and software to preload instructions from an instruction set other than one currently executing |
KR101407629B1 (ko) | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
US8510488B2 (en) * | 2007-08-08 | 2013-08-13 | Ricoh Company, Limited | Function control apparatus and function control method |
US9021234B2 (en) | 2009-01-30 | 2015-04-28 | Nec Corporation | Indirect designation of physical configuration number as logical configuration number based on correlation information, within parallel computing |
RU2461887C1 (ru) * | 2011-08-10 | 2012-09-20 | Федеральное Государственное Унитарное Предприятие Ордена Трудового Красного Знамени Научно-Исследовательский Институт Радио (Фгуп Ниир) | Способ передачи информации на мобильный терминал для обеспечения безопасности жизнедеятельности абонентов |
US8914615B2 (en) | 2011-12-02 | 2014-12-16 | Arm Limited | Mapping same logical register specifier for different instruction sets with divergent association to architectural register file using common address format |
US9471344B1 (en) * | 2012-03-27 | 2016-10-18 | Marvell International Ltd. | Hardware support for processing virtual machine instructions |
CN103678340B (zh) * | 2012-09-07 | 2016-09-14 | 腾讯科技(深圳)有限公司 | 浏览器引擎的运行方法、装置、浏览器及终端 |
CN102930322B (zh) * | 2012-09-29 | 2015-08-26 | 上海复旦微电子集团股份有限公司 | 智能卡和指令的处理方法 |
CN105573814A (zh) * | 2015-09-01 | 2016-05-11 | 北京中电华大电子设计有限责任公司 | 一种java卡局部变量字节码采用芯片硬件解析执行的方法 |
GB2548601B (en) * | 2016-03-23 | 2019-02-13 | Advanced Risc Mach Ltd | Processing vector instructions |
CN111142940B (zh) * | 2019-12-23 | 2023-06-30 | 成都海光微电子技术有限公司 | 处理器与软件的适配方法、装置、处理器、芯片和设备 |
Family Cites Families (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3889243A (en) | 1973-10-18 | 1975-06-10 | Ibm | Stack mechanism for a data processor |
US4236204A (en) | 1978-03-13 | 1980-11-25 | Motorola, Inc. | Instruction set modifier register |
US4587632A (en) | 1980-05-27 | 1986-05-06 | At&T Bell Laboratories | Lookahead stack oriented computer |
US4922414A (en) | 1982-12-17 | 1990-05-01 | Symbolics Inc. | Symbolic language data processing system |
DE3726192A1 (de) | 1987-08-06 | 1989-02-16 | Otto Mueller | Stacksteuerung |
US5136696A (en) | 1988-06-27 | 1992-08-04 | Prime Computer, Inc. | High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions |
US5440749A (en) | 1989-08-03 | 1995-08-08 | Nanotronics Corporation | High performance, low cost microprocessor architecture |
US5455775A (en) | 1993-01-25 | 1995-10-03 | International Business Machines Corporation | Computer design system for mapping a logical hierarchy into a physical hierarchy |
GB2289354B (en) * | 1994-05-03 | 1997-08-27 | Advanced Risc Mach Ltd | Multiple instruction set mapping |
GB2289353B (en) | 1994-05-03 | 1997-08-27 | Advanced Risc Mach Ltd | Data processing with multiple instruction sets |
US6496922B1 (en) * | 1994-10-31 | 2002-12-17 | Sun Microsystems, Inc. | Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation |
US5638525A (en) | 1995-02-10 | 1997-06-10 | Intel Corporation | Processor capable of executing programs that contain RISC and CISC instructions |
US5752035A (en) | 1995-04-05 | 1998-05-12 | Xilinx, Inc. | Method for compiling and executing programs for reprogrammable instruction set accelerator |
US5619665A (en) * | 1995-04-13 | 1997-04-08 | Intrnational Business Machines Corporation | Method and apparatus for the transparent emulation of an existing instruction-set architecture by an arbitrary underlying instruction-set architecture |
US6076155A (en) * | 1995-10-24 | 2000-06-13 | S3 Incorporated | Shared register architecture for a dual-instruction-set CPU to facilitate data exchange between the instruction sets |
US5838948A (en) | 1995-12-01 | 1998-11-17 | Eagle Design Automation, Inc. | System and method for simulation of computer systems combining hardware and software interaction |
US6038643A (en) | 1996-01-24 | 2000-03-14 | Sun Microsystems, Inc. | Stack management unit and method for a processor having a stack |
KR100513138B1 (ko) * | 1996-01-24 | 2005-09-07 | 선 마이크로시스템즈 인코퍼레이티드 | 네트워크 또는 로컬 메모리로부터 수신된 명령 세트를실행하는 프로세서 및 컴퓨터 시스템 |
DE69713400T2 (de) | 1996-01-24 | 2002-10-31 | Sun Microsystems Inc | Prozessor mit Bereichsüberprüfung bei Matrixzugriffen |
KR100529416B1 (ko) | 1996-01-24 | 2006-01-27 | 선 마이크로시스템즈 인코퍼레이티드 | 스택기반컴퓨터를위한명령폴딩방법및장치 |
US6535903B2 (en) * | 1996-01-29 | 2003-03-18 | Compaq Information Technologies Group, L.P. | Method and apparatus for maintaining translated routine stack in a binary translation environment |
US5742802A (en) | 1996-02-16 | 1998-04-21 | International Business Machines Corporation | Method and system for efficiently mapping guest instruction in an emulation assist unit |
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
US6031992A (en) | 1996-07-05 | 2000-02-29 | Transmeta Corporation | Combining hardware and software to provide an improved microprocessor |
US5926832A (en) | 1996-09-26 | 1999-07-20 | Transmeta Corporation | Method and apparatus for aliasing memory data in an advanced microprocessor |
EP0938703B1 (en) | 1996-11-13 | 2003-07-02 | Paran, Arik | Real time program language accelerator |
US5953741A (en) | 1996-11-27 | 1999-09-14 | Vlsi Technology, Inc. | Stack cache for stack-based processor and method thereof |
US5937193A (en) * | 1996-11-27 | 1999-08-10 | Vlsi Technology, Inc. | Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof |
US5875336A (en) | 1997-03-31 | 1999-02-23 | International Business Machines Corporation | Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system |
US6009499A (en) | 1997-03-31 | 1999-12-28 | Sun Microsystems, Inc | Pipelined stack caching circuit |
US5892966A (en) | 1997-06-27 | 1999-04-06 | Sun Microsystems, Inc. | Processor complex for executing multimedia functions |
US6088786A (en) | 1997-06-27 | 2000-07-11 | Sun Microsystems, Inc. | Method and system for coupling a stack based processor to register based functional unit |
US6003126A (en) | 1997-07-01 | 1999-12-14 | International Business Machines | Special instruction register including allocation field utilized for temporary designation of physical registers as general registers |
US6317872B1 (en) | 1997-07-11 | 2001-11-13 | Rockwell Collins, Inc. | Real time processor optimized for executing JAVA programs |
DE69839913D1 (de) * | 1997-10-02 | 2008-10-02 | Koninkl Philips Electronics Nv | Datenverarbeitungsgerät zur verarbeitung von befeh |
EP1359501A3 (en) | 1997-10-02 | 2007-11-21 | Koninklijke Philips Electronics N.V. | A processing device for executing virtual machine instructions |
US6009509A (en) | 1997-10-08 | 1999-12-28 | International Business Machines Corporation | Method and system for the temporary designation and utilization of a plurality of physical registers as a stack |
US6122638A (en) | 1997-11-26 | 2000-09-19 | International Business Machines Corporation | Object-oriented processor and method for caching intermediate data in an object-oriented processor |
US6070173A (en) | 1997-11-26 | 2000-05-30 | International Business Machines Corporation | Method and apparatus for assisting garbage collection process within a java virtual machine |
US6148391A (en) | 1998-03-26 | 2000-11-14 | Sun Microsystems, Inc. | System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses |
US6374286B1 (en) | 1998-04-06 | 2002-04-16 | Rockwell Collins, Inc. | Real time processor capable of concurrently running multiple independent JAVA machines |
US6332215B1 (en) * | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US6338134B1 (en) | 1998-12-29 | 2002-01-08 | International Business Machines Corporation | Method and system in a superscalar data processing system for the efficient processing of an instruction by moving only pointers to data |
GB2358261B (en) * | 2000-01-17 | 2004-06-09 | Advanced Risc Mach Ltd | Data processing with native and interpreted program instruction words |
AU2001241486A1 (en) * | 2000-02-14 | 2001-08-27 | Chicory Systems, Inc. | System including cpu and code translator for translating code from a second instruction set to a first instruction set executable by the cpu |
-
2001
- 2001-05-31 GB GB0113199A patent/GB2376100B/en not_active Revoked
-
2002
- 2002-02-18 CN CNB028110641A patent/CN1327338C/zh not_active Expired - Lifetime
- 2002-02-18 EP EP02711108A patent/EP1390841B1/en not_active Expired - Lifetime
- 2002-02-18 WO PCT/GB2002/000688 patent/WO2002097613A1/en active IP Right Grant
- 2002-02-18 JP JP2003500729A patent/JP4216182B2/ja not_active Expired - Lifetime
- 2002-02-18 KR KR1020037014804A patent/KR100816781B1/ko active IP Right Grant
- 2002-02-18 IL IL15505802A patent/IL155058A0/xx unknown
- 2002-02-18 RU RU2003112628/09A patent/RU2281547C2/ru not_active IP Right Cessation
- 2002-02-18 DE DE60203612T patent/DE60203612T2/de not_active Expired - Lifetime
- 2002-02-28 MY MYPI20020712A patent/MY131818A/en unknown
- 2002-04-30 US US10/134,468 patent/US6965984B2/en not_active Expired - Lifetime
- 2002-05-13 TW TW091109944A patent/TWI242158B/zh not_active IP Right Cessation
-
2003
- 2003-03-24 IL IL155058A patent/IL155058A/en active IP Right Grant
-
2008
- 2008-01-11 JP JP2008003900A patent/JP2008123545A/ja not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
WO2002097613A1 (en) | 2002-12-05 |
US6965984B2 (en) | 2005-11-15 |
DE60203612T2 (de) | 2006-03-09 |
CN1327338C (zh) | 2007-07-18 |
EP1390841A1 (en) | 2004-02-25 |
JP2008123545A (ja) | 2008-05-29 |
GB2376100B (en) | 2005-03-09 |
MY131818A (en) | 2007-09-28 |
KR20040007562A (ko) | 2004-01-24 |
IL155058A0 (en) | 2003-10-31 |
TWI242158B (en) | 2005-10-21 |
GB0113199D0 (en) | 2001-07-25 |
KR100816781B1 (ko) | 2008-03-26 |
US20020188825A1 (en) | 2002-12-12 |
IL155058A (en) | 2010-12-30 |
DE60203612D1 (de) | 2005-05-12 |
EP1390841B1 (en) | 2005-04-06 |
JP2004520663A (ja) | 2004-07-08 |
RU2281547C2 (ru) | 2006-08-10 |
CN1513137A (zh) | 2004-07-14 |
GB2376100A (en) | 2002-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4216182B2 (ja) | 複数の命令セットを用いるデータ処理 | |
US5944841A (en) | Microprocessor with built-in instruction tracing capability | |
JP2610104B2 (ja) | 命令オペレーション・コードの検査装置及び方法 | |
JP3615770B2 (ja) | アドレスされた構成部分の思索の失敗を検出するメモリ・コントローラ | |
US7089539B2 (en) | Program instruction interpretation | |
JP2001504957A (ja) | 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置 | |
US5574887A (en) | Apparatus and method for emulation routine pointer prefetch | |
US7162611B2 (en) | Unhandled operation handling in multiple instruction set systems | |
JP2001519953A (ja) | マイクロプロセッサの改良 | |
US20240061682A1 (en) | Load chunk instruction and store chunk instruction | |
US6907515B2 (en) | Configuration control within data processing systems | |
US20070156386A1 (en) | Linearization of page based memory for increased performance in a software emulated central processing unit | |
JP3621116B2 (ja) | 先進のプロセッサのための変換メモリ保護装置 | |
JP3652956B2 (ja) | エミュレーション装置 | |
US7676652B2 (en) | Executing variable length instructions stored within a plurality of discrete memory address regions | |
WO2001061475A1 (en) | Transforming a stack-based code sequence to a register based code sequence |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040401 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070420 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070720 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070727 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070817 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20070914 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080111 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20080220 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20080314 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080929 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20081105 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4216182 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111114 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111114 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121114 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121114 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131114 Year of fee payment: 5 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |