JP3945829B2 - 仮想マシン命令を実行するための処理装置 - Google Patents

仮想マシン命令を実行するための処理装置 Download PDF

Info

Publication number
JP3945829B2
JP3945829B2 JP52133599A JP52133599A JP3945829B2 JP 3945829 B2 JP3945829 B2 JP 3945829B2 JP 52133599 A JP52133599 A JP 52133599A JP 52133599 A JP52133599 A JP 52133599A JP 3945829 B2 JP3945829 B2 JP 3945829B2
Authority
JP
Japan
Prior art keywords
instruction
instructions
unique
virtual machine
processor
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 - Fee Related
Application number
JP52133599A
Other languages
English (en)
Other versions
JP2001508907A (ja
Inventor
メンノ メナッシェ リンドワ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Philips Electronics NV
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Philips Electronics NV filed Critical Philips Electronics NV
Publication of JP2001508907A publication Critical patent/JP2001508907A/ja
Application granted granted Critical
Publication of JP3945829B2 publication Critical patent/JP3945829B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

技術分野
本発明は、仮想マシン命令を実行するための処理装置であって、前記処理装置が、前記仮想マシン命令の少なくとも一つを含む命令を格納するための命令メモリと、マイクロコントローラの特定の命令の既定のセットから、固有命令を実行するための既定のマイクロコントローラコアを有しているプロセッサを有していて、前記固有命令が、前記仮想マシン命令と異なっているマイクロコントローラと、前記命令メモリから取り込まれた少なくとも一つの仮想マシン命令を少なくとも一つの固有命令に変換するコンバータと、実行のために前記マイクロコントローラコアに固有命令を送る送り手段とを有しているプレプロセッサとを有している処理装置に関する。
本発明は、さらに、マイクロコントローラの特定の命令の既定のセットから、固有命令を実行するための、既定のマイクロコントローラコアを有するプロセッサを有するマイクロコントローラと共に使用される、プレプロセッサであって、
前記プレプロセッサが、命令メモリから取り込まれた少なくとも一つの仮想マシン命令を、少なくとも一つの固有命令に変換し、前記固有命令が前記仮想マシン命令とは異なっているコンバータと、実行のために、前記マイクロコントローラコアに固有命令を送る送り手段とを有しているプレプロセッサにも関する。
背景技術
ソースプログラムは、プログラムを実行するマイクロコントローラの固有命令の代わりに、ますます、仮想マシンの(コンパイルされた)命令で表されるようになって来ている。仮想マシンを使用する主な理由は、異なったマシン(プラットホーム)間のプログラムの可搬性である。仮想マシンの仮想マシン命令により表されるプログラムは、比較的簡単に、それらのマシンで実行される適切なインタープリタを使用して、いくつかの実際のマシンで実行させることができる。現時点で、移植可能なプログラムを使用する原動力となっているものは、Javaである。Javaプログラム(アプレットと呼ばれる)は、インターネットを介して交換され、かつ異なった命令セットを有するプロセッサを使用して、異なった固有マシンで実行させることができる。コンパイラを使用することによって、Javaアプレットは、Java仮想マシンの命令を形成するJavaバイトコード(JBCs)で表される。埋め込まれたアプリケーションに対して、仮想マシンを使用する別の原動力となっているものは、コンパクトコードのニーズである。ソフトウェアのサイズが絶えず拡大しているので、ソフトウェア圧縮技術は、以前では魅力的でなかった状況でも、ある程度の初期コストにより実用可能なものになっている。この種の手法の内の一つは、埋め込まれた特定アプリケーションに対し、固有命令よりも仮想マシン命令を用いた方がよりコンパクトにプログラムを表すことができるような適切な仮想マシンを選ぶことである。この種の仮想マシンの例は、そのコンパクトな表現で知られているスタックマシンである。埋め込まれたアプリケーションに対する特定仮想マシンは、先ず、ソースプログラムを選ばれた仮想マシン(例えばスタックマシン)の仮想マシン命令で表し、そして、さらに、コンパイル済みコードでしばしば起こる仮想マシン命令のシークエンスを、新しく定義された追加仮想マシン命令によって置換する(この場合、例えば、1つの新しい命令は、4つの既存の命令のシークエンスにより置換される)ことによって、定義することができる。
仮想マシン命令で表されるプログラムは、従来、ソフトウェア翻訳によって実行されている。プロセッサ(CPU)は、プロセッサがループ内に仮想マシン命令を取り込んで、プロセッサのマイクロコントローラコアの固有命令のシークエンスにそれをデコードし、そして各固有命令を実行する、特別なインタプリタプログラムを実行する。この手法は遅く、かつ比較的大きくなるインタプリタプログラムの追加を必要とする。実行速度を改善するためには、いわゆるJust-In-Time(JIT)コンパイル手法が、使われる。仮想マシン命令で表されるソフトウェアモジュールの始動実行の直前に、モジュールは、(固有の機械語命令で表される)固有コードにコンパイルされる。この方法の場合、モジュールは、コンパイラに対するコードに加えて二回格納されなければならない。インタプリテーションソフトウェアを追加して格納しなければならないことは、埋め込みシステムには望ましくない。この代わりに、ハードウェアインタプリタを使用することは望ましい。ハードウェアインタプリタ自身は、ウォーレン(Warren)の抽象命令セットに対するPrologプレプロセッサの形態で公知である。
Figure 0003945829
およびW.Rosenstielによる論文「ウォーレンの抽象命令セットに対するPrologプレプロセッサ」(Microprocessing and Microprogramming 18、1986年、第71-81頁)において、プレプロセッサが、Prologプログラミング言語により書かれているプログラムをモトローラ68000プロセッサ(MC68000)上でインタプリトとする点が記載されている。Prologソースプログラムを、ウォーレン氏によって定義されかつ一般にPrologプログラムを実行するために使用されている、命令に変換するためには、コンパイラが使用される。ウォーレン命令のセットは、Prologプログラムを実行するように設計されている仮想マシンを形成する。コンパイルから得られたウォーレン命令のシークエンスは、プレプロセッサを用いて、MC68000によって実行される。電源投入の後、MC68000は、固有のMC68000命令を実行することによって、先ず、ブーティング手続を実行する。ブーティング手続きが終わると、MC68000は、Prologプログラムを実行開始出来る状態になる。その実行は、既定のアドレス範囲へジャンプすることによって開始される。プレプロセッサは、この範囲にマップされているメモリマップ装置である。プレプロセッサがアドレスされると、それは、それ自身のRAMから(変換されたPrologプログラムの)ウォーレン命令を読み込み、MC68000命令および定数のシークエンスを適切に合成し、そしてこれらを実行のために直接CPUに送る。各ウォーレン命令に対するMC68000の命令は、プレプロセッサのROMに格納されている。一般に、プレプロセッサは、1つのウォーレン命令をMC68000命令のシークエンスに変換する。プレプロセッサは、プレプロセッサのRAMおよびROMの番地を生成する、それ自身のRAMコントローラおよびROMコントローラを含む。RAMコントローラは、RAM命令ポインタを管理する。連続して読み出されたMC68000の各操作により、プレプロセッサは、CPUにシークエンスの次の命令(および任意の定数)を送り出す。シークエンスが完了すると、次に、CPUに送られつつあるプログラムの次のウォーレン命令に対応するシークエンスの最初の命令が読み出される。割り込みが行われると、CPUの繰り返される読取り演算は、最後の命令(および任意の定数)の再送となる。
発明の開示
本発明の目的は、ある時点で複数の命令を含んでいるマイクロコントローラとの使用に適しているタイプのプロセッサ装置を提供することである。
この目的を達成するために、前記プロセッサは、割り込みのような既定の条件が発生すると、n(n>1)個の固有命令の既定最大値まで再送を要求するタイプであり、そして、前記プロセッサが多くの固有命令の再送を要求すると、前記送り手段が、前記要求された固有命令を再送する。本発明者は、現在のプロセッサは、命令の実行がまだ開始されていないかまたはまだ完了していない状態で、一度にいくつかの固有命令を有することができることと、パフォーマンスを向上させるためには、複数の命令を含むプロセッサの能力を利用することが望ましいことを認識した。本発明者は、プロセッサが、少なくともいくつかのすでにロードされた命令を放棄し、かつ、後のステージで(例えば、割り込みのようなある条件の発生に基づいて)いくつかの命令の再送を要求する状況に対処するためには、再送メカニズムが、要求された固有命令をプロセッサに再送する必要があるとの認識を持った。
従属項2で規定される手段によると、プレプロセッサは、最後に送られた命令を格納する、FIFOのような送りメモリを有し、送りメモリから再送を行い、命令の単純で有効な再送方法を提供する。仮想マシン命令が複数の固有命令のシークエンスに変換されるという事実から、再送される第一固有命令をシークエンスの如何なる命令にもすることが出来る。さらに、固有命令は、現在のものより前の仮想マシン命令に対応させることができる。最後に、仮想マシン命令が異なっている場合には、シークエンスの長さは、異なっていてもよい。送りメモリを使用することによって、仮想マシン命令および対応する固有命令にまで戻らずに、メモリから固有命令を単純に再送することが可能になる。
従属項3において規定される手段によれば、マイクロコントローラのパイプラインで処理されつつある命令を、再送することができる。これは、プレプロセッサを、通常パイプラインアーキテクチャを有するRISC型プロセッサと共に使用するのに特に適している。
従属項4において規定される手段によれば、プロセッサの命令キャッシュに格納されている命令を、再送することができる。これは、プレプロセッサを、通常命令キャッシュを有するRISC型プロセッサの様な最新のプロセッサと共に使用するのに、特に適している。
従属項5において規定される手段によれば、キャッシュに格納されている命令、または、パイプラインにおいて処理されつつある命令を、再送することができる。
従属項6において規定される手段によれば、送りメモリは、再送の必要がある命令に加えて、初回に供給された命令も格納することが出来る。このような方法の場合、プレプロセッサは、固有命令が実際に要求される前に、前もって固有命令を生成させることができる。これにより、初めて要求される命令をプロセッサに供給する際に発生し得る遅延を避けることが出来る。さらに、これにより、初めて要求される命令と再送命令とを1つのみの送りメカニズムにより処理することが可能となる。
従属項7において規定される手段は、初回の送り出しと再送とを統一化する単純で有効な方法を示す。すでに送られた命令およびまだ送られていない命令は、FIFOのような送りメモリ内に逐次的に格納される。理論的には、プレプロセッサは、次に要求されるであろう命令(すなわち、まだ要求されていない最初の命令)を含む送りメモリ内のメモリーロケーションを示すポインタを維持する。実際には、このメモリーロケーションは、常に送りメモリの定位置に置くことが出来る。この結果、ポインタを離して維持する必要が無くなる。プレプロセッサは、初回の送り出しに対し次にプロセッサによって要求されるであろう固有命令のアドレスを示すカウンタを有する。通常、固有命令が初めて送られるたびに、カウンタはインクリメントされる。プロセッサは、(命令ポインタを使用して)プロセッサが次に必要とする命令のアドレスを示す。これは、命令の初回の送り出しまたはその再送の要求となる。プレプロセッサは、要求されたアドレスをカウンタに格納されているアドレスと比較する。そのオフセットに基づいて、送りメモリ内の命令の位置が検索される。例えば、カウンタは、最後に送られた命令より1大きい、次に要求されるであろう命令のアドレスを格納することができる。プロセッサが、必要に応じ、この新しい命令を要求すると、オフセットはゼロとなる。論理的ポインタが新しい命令の位置を示している場合、この位置に格納されている命令がプロセッサに供給される。プロセッサが前の命令の再送を要求する場合、オフセットは、(32ビットの命令に対しバイト単位で数えて4となる一命令の単位で数えて)1または-1となる。要求された命令の位置のポインタからオフセットを減ずることによって、そのカウンタおよび論理的ポインタは、次に要求されるであろう命令の正確なアドレス/位置を格納する必要が無くなることは注目されるであろう。例えば、論理的ポインタは、最後に送られた命令も示すことができる。
従属項8において規定される手段は、送りメモリを追加する必要のない代替装置を示す。送りメモリを追加する代わりに、プレプロセッサは、プロセッサによって再送のために要求される命令を再生させることを可能にする状態情報を格納する。一例として、送られた命令を送りメモリに格納する代わりに、命令を示すポインタ、または初めに命令を生成するのに使用される情報を示すポインタをメモリに格納することもできる。
従属項9において規定される手段の場合、状態の部分はマイクロコントローラの命令ポインタに格納される。これによりプレプロセッサのコストが潜在的に減小する。
従属項10において規定される手段の場合、プレプロセッサは、少なくとも一つの仮想マシン命令に対し、仮想マシン命令を固有命令のシークエンスに変換する対応変換テーブルを有する。この変換テーブルは、例えば、ROMに格納することができる。プロセッサの命令ポインタの最下位の部分は、テーブル内のどの固有命令が必要であるかを示すために用いられる(すなわち、命令ポインタの最下位の部分は、変換テーブルオフセットインジケータとして機能する)。通常動作の間、プロセッサは命令ポインタを自動的にインクリメントさせる。プレプロセッサが、自分自身のカウンタを格納し、次に読み込まれるであろう固有命令を示すためにこのカウンタをインクリメントさせる必要がないことは有利である。プロセッサが再送を要求する場合、プロセッサは自動的に命令ポインタを前の値にセットする。この方法の場合、再送も自動的に処理することができる。
従属項11において規定される手段は、変換テーブルのオフセットに加えて、要求された固有命令が位置する変換テーブルを決定するための有効な方法を提供する。命令ポインタの既定の別の部分は、命令メモリ内に仮想マシン命令を示す仮想マシン命令ポインタを有する。この仮想マシン命令ポインタは、新しい仮想マシン命令が必要となるたびにインクリメントさせる必要がある、仮想マシンプログラムカウンタと見ることができる。プレプロセッサは、命令メモリから、仮想マシンが示す仮想マシン命令を取り込み、その取り込まれた仮想マシン命令に基づいて変換テーブルを探す。次いで、プロセッサの命令ポインタの最下位の部分が、変換テーブルのオフセットとして使用される。1つの仮想マシン命令に関する固有命令のシークエンスが完了する場合はいつでも、例えば、仮想マシン命令ポインタを目標値にセットし、命令ポインタの変換オフセット部分をリセットする明示のジャンプを、シークエンス内の最後の固有命令として使用することにより、または、一つ以上のNOP(ノーオペレーション)命令を使用して、次の仮想マシン命令を示すために仮想マシン命令ポインタをセットすることができる。この結果、変換オフセット部分のオーバーフローにより、最終的に、プロセッサは、仮想マシン命令ポインタをインクリメントさせる。命令に対するプロセッサからの各要求により仮想マシン命令を命令メモリから取り込む必要が無いと言うことは理解されるであろう。プレプロセッサは、命令メモリからすでに取り込まれたまたは取り込まれるであろう仮想マシン命令を格納するキャッシュを有するのが有利である。
完全固有命令の代替として、変換テーブルが、少なくとも変数部分を有する固有命令に対して、固有命令スケルトンを含むことは有利である。スケルトンは、オペランドの様な命令の変数要素が、例えば、対応する仮想マシン命令のパラメータから最適にロードされる、演算コードの様な固有命令の既定の固定部を有する。
従属項12において規定される手段は、仮想マシン命令ポインタの使用の代替を提供する。本実施態様の場合、変換テーブルは、固有命令または固有命令スケルトンのシークエンスを有しているいくつかのサブテーブルに、(少なくともサブテーブルの一つに)、分割される。サブテーブルは、(必ずしもその必要は無いが)、1つの仮想命令に対応する固有命令の完全なシークエンスに対応させることが出来る。実際には、仮想マシン命令の固有命令の最大シークエンスより小でも良い、4つまたは8つのみの固有命令のサブテーブルのサイズを選ぶのが望ましい。この変換テーブルオフセットインジケータは、サブテーブルのうちの1つのオフセットを示す。命令ポインタの既定の別の部分は、サブテーブルインジケータを有する。プレプロセッサは、実際に関係するサブテーブルをさがすためにサブテーブルインジケータの値を使用する。好ましくは、正常動作において、固有命令が次のサブテーブルから取り込まれるたびに、(サブテーブルが、同じ仮想マシン命令に、または異なった仮想マシン命令に関しているかに関係なく)、サブテーブルインジケータは、1単位インクリメントされる。プレプロセッサは、最後に使われたサブテーブルインジケータに関連するサブテーブルへのポインタを格納することができる。特に比較的小さいサブテーブルに対しては、シークエンスがサブテーブルの境界で確実に終了するように(命令ポインタのサブテーブルインジケータ部分の値を訂正する、飛び越し命令の使用を除去するために)、1つの仮想マシン命令に関する固有命令のシークエンスについて、NOP命令によって補数をとることができる。ほとんどのプロセッサは、ジャンプ演算よりもかなり速くNOP演算を実行することができる。
従属項13において規定される手段は、プロセッサが、命令が供給されるまで命令を要求し、バスをブロック化するデッドロック状況が、発生しないことを保証する。この場合、プレプロセッサが、それが固有命令を供給することができる前に、同じバスを介して命令メモリから最初に(仮想マシン)命令を得る必要がある。
【図面の簡単な説明】
本発明のこれらの観点および他の観点は、図面に示されている以下の実施態様を参照することにより、明らかになるであろう。
第1図は、処理装置内のプロセッサの可能な配置を示す。
第2図は、仮想マシン命令を固有命令のシークエンスに変換する変換テーブルを示す。
第3図は、送りメモリが再送り命令に使用される処理装置の一実施態様のブロック図を示す。
第4図は、送り命令と再送り命令の一体化された方法を示す。
第5図は、処理装置の命令ポインタを変換テーブルへのインデックスとして使用することを示す。
第6図は、命令ポインタの別の使用を示す。
発明を実施するための最良の形態
第1図は、処理装置100内でのプレプロセッサの4つの配置の可能性を示す。処理装置100の主要コンポーネントは、マイクロコントローラ110、命令メモリ120、プレプロセッサ130である。全ての図面において、マイクロコントローラ110は、命令メモリ120とプレプロセッサ130を有している。処理装置100は、明示されていない。マイクロコントローラ110内の全ての主要コンポーネントを(望ましくは、ワンチップ素子に)結合することにより、適切な特性を得ることが出来る。必要に応じ、マイクロコントローラバス140をマイクロコントローラ110の外まで延在させ、かつ、例えば、PCIのような外部バスに結合させて、命令メモリ120および/またはプレプロセッサ130を、マイクロコントローラ110の外に置くことも出来ることは、理解されるであろう。
命令メモリ120は、スタックマシンに対する命令のような仮想マシン命令を含む。そのような仮想マシン命令の例は、Javaバイトコードである。マイクロコントローラ110は、マイクロコントローラの特定命令の既定のセットから固有命令を実行する、固有マシンと呼ばれる既定マイクロコントローラコア114を備えたプロセッサ112を有する。埋め込まれたソフトウェアを実行するのに適するマイクロコントローラの一例は、マイクロプロセッサMIPSのようなPR3001RISC型のマイクロコントローラである。マイクロコントローラコア114の固有命令は、仮想マシンの仮想マシン命令とは異なる。このようなマイクロコントローラ110は、命令メモリ120に格納されている仮想マシン命令を直接実行することは出来ない。プロセッサ110が、命令を要求すると、プレプロセッサ130は、固有命令を生成する。固有命令を発生させるために、プレプロセッサ130は、取り出し手段134を使用して命令メモリ120から仮想マシン命令を取り出すことが出来る。プレプロセッサ130は、命令メモリ120から取り出された仮想マシン命令を少なくとも1つの固有命令に変換するコンバータ132を有する。一般的には、固有マシン命令は、固有命令のシークエンスに変換される。プレプロセッサ130は、そのシークエンスの固有命令をその実行のためにマイクロコントローラコアに送るための送り手段136を有している。仮想マシンプログラムを実行するとき、マイクロコントローラ110は、事実、プレプロセッサ130が発生する固有プログラムを実行する。通常、マイクロコントローラ110の命令ポインタが、マイクロコントローラ110が必要とする命令メモリ120内の次の命令を次に実行することを示す場合には、その命令ポインタは、プレプロセッサに次の固有命令(または前の命令の再送)が必要であることを示す。理論的には、プレプロセッサ130が、命令メモリ120内の現在の(または次の)仮想マシン命令を示す独立の仮想マシン命令ポインタを管理する。マイクロコントローラは、仮想マシン命令または仮想マシン命令ポインタの(明示的な)知識を持たない。
プロセッサ112は、既定の条件の後、n(n>1)個の固有命令の既定最大値まで再送することを要求する。プロセッサに既に存在している命令を除去する割り込みを、そのような条件としても良い。k個のステージでパイプライン処理できるプロセッサ112は、通常、一度にk個の命令を処理する。条件の発生は、全てのk個の命令を除去することになるかもしれない。1個以上の命令を除去する他の理由は、プロセッサが、h個までの命令を格納する命令キャッシュ116を有しているいることである。条件の発生は、キャッシュ116内の全てのh個の命令を除去する結果になるかもしれない。後のステージで、プロセッサ112は、仮想マシンプログラムの実行に戻り1個以上の命令の再送を要求することが出来る。この目的のために、送り手段136は、プロセッサ112による多くの固有命令の再送要求に応じて、要求された固有命令を得る手段を有する。
命令メモリ120は、固有命令も含むことが出来ることは理解されるであろう。このような固有命令は、例えば、システムを初期化する場合、またはドライバまたは埋め込まれたソフトウェアアプリケーションの特別な部分のようなある種のソフトウェアモジュールを、適切な性能を得るために固有命令にコンパイルする場合に使用することが出来る。固有メモリ120内の固有命令と仮想マシン命令の区別は、既定のアドレス範囲を仮想マシン命令に割り当てて、命令のアドレスにより行うことが出来る。他の方法は、その命令が固有命令であるのか仮想マシン命令であるのかを示す特別なビットを各命令毎に用いるか、または、現在の命令のタイプを示す特別なレジスタを使用することである(この場合、タイプが変更されるたびにレジスタの内容を変更する必要がある)。プレプロセッサ130は、固有命令が、命令メモリ120から変更されていないプロセッサ112に確実に与えられるようにする。
第1A図の場合、処理装置の主要コンポーネントは、PIバスのような汎用周辺相互接続バス140を介して相互接続されている。プレプロセッサ130は、アドレスの既定範囲がプレプロセッサに割り当てられている、メモリマップ周辺装置として機能することができる。プロセッサ110が、この範囲でアドレスを有する命令の要求をバス140に生成すると、プレプロセッサ130は、バス140に固有命令140を生成する。必要に応じて、プレプロセッサ130は、バス140を介して命令メモリ120から仮想マシン命令を取り出す。
第1Bおよび1C図の場合、プレプロセッサ130は、マイクロコントローラ110と命令メモリ120との間に位置する。プレプロセッサ130が固有命令と仮想マシン命令を区別する必要がある場合、これらの構成は、命令メモリ120に格納されている固有命令の実行を遅延させることが出来る。理解を容易にするために、第1B、1Cおよび1D図には、第1A図の全ての部分は、示していない。
第1D図の場合、プレプロセッサ130は、マイクロコントローラ110に埋め込まれている。プレプロセッサ130は、マイクロコントローラ110の命令キャッシュ116とコア114との間に位置するのが望ましい。この構成により、適切な性能が得られるが、第1B、1Cおよび1D図の構成とは異なり、マイクロコントローラ110に修正を要し、かつプレプロセッサ130は、特別仕様となるので、異なったタイプのマイクロコントローラに使用することは出来ない。
コンバータ132は、命令メモリ120から取り出された仮想マシン命令を少なくとも1つの固有メモリに変換するのに使用される。一例として、整数加算(ox60)に対するJavaのバイトコード(仮想マシン命令)は、スタックの2つのトップ要素を加え、そのスタックからそれらのトップ要素を除き、そしてその合計をスタックにプッシュすると言う結果になる。この仮想マシン命令は、MIPSプロセッサ(32ビットマシン)に対する次に示す命令(固有命令)のシークエンスに変換させることが出来る。ここで、$tospは、(スタックのトップより上に在る)スタックの最初の空の位置を示すレジスタである。
lw $a0,4($tosp) /*スタックのトップ要素をレジスタ$a0にロード
lw $a1,8($tosp) /*スタックの第二要素をレジスタ$a1にロード
add $a0,$a1,$a0 /*$a0と$a1を加え、その合計を$a0に置く
addi $tosp,$tosp,4/*スタックを1要素下げる
sw $a0,4($tosp) /*合計をスタックの新しいトップに格納する
コンバータ132は、仮想マシン命令を固有命令のシークエンスに変換するテーブルを有するのが望ましい。テーブルの各セルが、1つの対応する仮想マシン命令に対する固有命令のシークエンスを有する、一次元のテーブルを使用することが出来る。セル番号は、対応する仮想マシン命令の値に対応させることが出来る。一例として、Javaの整数加算(0x60)の固有命令のシークエンスをセル96(16進数で0x60)に置くことが出来る。固有命令のシークエンスの長さは、様々な仮想命令に対しかなり変化させることが出来るので、シークエンスは、シークエンスが即座に互いにフォローする、何の明示セルも持たない一次元テーブルに位置させるのが望ましい。そのような変換テーブル200は、第2図に示されており、ここでは、暗示セル境界が、点線で示されている。仮想マシン命令に対するシークエンスの位置を探すことを可能とするために、各仮想マシン命令(VMI〜VMI N)に対し、変換テーブル200内の対応するシークエンスの開始点を示す、コードインデックステーブル210を使用することが出来る。VMI 3に対応する変換テーブル200のセルに対し、それに関連する固有命令NI 1〜NI Mのシークエンス220が示されている。
変換の別の例が、Javaのバイトコードbipush n(バイトnをextendするサインに使用されかつ結果をスタックのトップに置く)について与えられている。この仮想マシン命令は、2つのバイト(0x16とn)からなり、第一のバイトは、演算を示し、第二のバイトは、パラメータnを与える。命令は、固有MIPS命令の次のシークエンスに変換することが出来る。
ori $a0,$0,n /*レジスタ$a0に定数nをロード*/
sll $a0,$a0,24 /*24ビット左にシフト */
sra $a0,$ao,24/*最も左のビットを複製する */
/*ことにより右へ算術桁送りして、サイン拡張 */
sw $a0,0($tosp) /*スタックの新しいトップに結果を格納 */
addi $tosp,-4 /*スタックサイズをインクリメント */
この例は、仮想マシン命令をパラメータ化することが出来ることを示している。ここで、少なくとも1つのオペランドが演算コードに従っている。コンバータ132は、変換テーブルを有している。ここで、固有命令は、フルコードまたは命令スケルトンのいずれかにより表される。一例として、命令addi $tosp,-4(前の例のシークエンスの最後の命令)は、可変部分は含まず、かつテーブル内に4バイトエントリとしてフルで置くことが出来る。命令ori $a0,$0,n(前の例のシークエンスの最初の命令)は可変部分を含み、かつ可変部分(n)を指定せずに、スケルトンとして、テーブル内に置くことが出来る。命令スケルトンに対するテーブル内のエントリは、フル命令と同じ幅(例えば、MIPSプロセッサに対し4バイト)で、一様なテーブルが得られる。固有命令スケルトンの指定されていない部分をどのように満たすかを示すためにそのテーブル内(または別のテーブル内)に別の情報を置くことも出来る。指定されていない部分を満たすのには、マイクロプログラミングを使用するのが有利である。その場合、その別の情報は、マイクロコードを有していても良いし、またそれを表示しても良い。フル固有命令と同じ構造(幅および合成)を命令スケルトンに対し使用することが有利であることは理解されるであろう。しかしながら、他の構造を使用することも出来る。
仮想マシンがスタック指向マシンである場合、スタックまたはスタックの少なくともトップ要素は、マイクロコントローラ110のレジスタにマップされるのが望ましい。このような方法で、(仮想マシンスタックを有する)メモリスタックは、レジスタスタックにマップされる。最初、$rlが(スタックのトップより上に在る)メモリスタックの最初の空の位置に一致し、$r2がメモリスタックのトップを含み、そして$r3が、メモリスタックの第2の要素を含んで、レジスタ$rl、$r2および$r3がメモリスタックの3つの連続した要素を含むと仮定すると、Javaのバイトコードbipush nを、固有MIPS命令のシークエンス:
ori $r1,$0,n
sll $r1,$r1,24
sra $r1,$r1,24
に変換することができる。この演算の後、$r1は、メモリスタックのトップを含む。同様に、最初、$r1が(スタックのトップより上に在る)メモリスタックの最初の空の位置に対応し、$r2がメモリスタックのトップを含み、かつ$r3がメモリスタックの第2要素を含む同じ位置から開始して、整数加算(0x60)のJavaバイトコード(仮想マシン命令)を、MIPS命令の次のシークエンス:
add $r3,$r2,$r3
に変換することができる。この演算の後、$r3はメモリスタックのトップを含む。
上記の実例の場合、メモリスタックのトップの位置(すなわち、メモリスタックのトップを含むレジスタ)は、コンバータ132のレジスタ138を使用して示すのが望ましい。コンバータは、適切な固有命令を発生させるために、Register Stack Pointer(RSP)と呼ばれるレジスタ138を使用する。固有命令のレジスターオペランドを指定するためには、マイクロプログラミングを用いるのが望ましい。レジスターオペランドはコンバータ132によって指定される必要があるので、この方法の場合も、固定された固有命令も可変になった。この種のオペランドは、命令スケルトンを用いて、変換テーブル200にも格納されるのが望ましい。RSPが最初のフリーレジスタを示していると仮定すると、Javaのバイトコードbipush nは、対応するマイクロコードの制御の下に固有のMIPS命令の以下のシークエンスに変換することができる:
マイクロコード 命令
rsp=1;f1g=rsp+1 ori $(rsp+1),$0,n
ftg=rsp+1;fao=rsp+1 sll $(rsp+1),$(rsp+1),24
ftg=rsp+1;fao=rsp+1 sra $(rsp+1),$(rsp+1),2
ここで、ftgは命令に対するターゲットレジスタで、そして、faoおよびfalは、それぞれ、第一および第二の命令に対する引数レジスタを示す。スタックの2つのトップ要素を加える次のJavaバイトコードiaddは、次のようなマイクロコードおよび命令となるであろう:
ftg=rsp+2;fao=rsp+2;fal=rsp+1;rsp+=1
add $(rsp+2),$(rsp+2),$(rsp+1)
第3図は、プレプロセッサ130が次に述べる送りメモリ300を有する本発明の一実施態様を示す。送りメモリ300は、最後にプロセッサに供給された少なくともn個(nは、プロセッサが再送を要求することが出来る固有命令の最大数)の命令を記憶するための部分310を有する。プロセッサ112が多くの命令の再送を要求すると、送り手段136は送りメモリ300から要求された命令を再送する。送りメモリ部分310は、FIFO機能136を有するのが望ましい。命令がプロセッサ112に初めて供給されるたびに、命令は部分310にロードされ、そして、部分310が満杯の場合、最も古い命令は除去される。k段パイプラインを有するマイクロコントローラに対しては、nはk以上であることが望ましい。同様に、h個までの命令を格納する命令キャッシュを有するプロセッサに対しては、nはh以上である。k段パイプラインとh個までの命令を格納する命令キャッシュの両方の場合には、nはk+h以上であることが望ましい。
本発明の別の実施態様の場合、送りメモリ300は、さらにm(m≧1)個の固有命令を記憶するメモリ位置320を有する。これにより、プレプロセッサ130が、前もってm個までの固有命令を初めてプロセッサに供給し、かつ、追加の命令を送りメモリ300にも格納させることが可能となる。送りメモリ300の部分320は、FIFO機能を有することが望ましい。命令がプロセッサ112に供給されるたびに、この命令は部分320から除去されて、部分310に挿入される。プレプロセッサ130は、部分320に命令を挿入する。送りメモリ300の2つのメモリ部分310および320は、結合されることが望ましい。これは、1つの一体化されたFIFOを使用することにより実行することができる。対応するポインタを有する周期的バッファのような他の変型例を、使用することもできる。
本発明の別の実施態様の場合、送りメモリ300からプロセッサ112に固有命令を初めて送る場合と再送する場合に一体化された機構が使用される。送りメモリ300は、第4図に図示されるように、逐次的に、初回に送られた命令(部分320)または再送された命令(部分310)を格納する。プレプロセッサ130は、初回の送りに対して次回プロセッサによって要求されるであろう、固有命令のアドレスを示すカウンタ400を有する。カウンタ400は、期待命令ポインタと見ることができる。プレプロセッサ130は、プロセッサから実際に要求された固有命令を示す実命令ポインタ410を受け取る。これは、これから送られるであろう命令であってもよいが、すでに送られた命令であってもよい。プレプロセッサ130は、カウンタ400に格納されているアドレスに関してプロセッサが要求する命令(410)の実アドレスのオフセットを決定する手段を有する。受け取ろうとする命令ポインタと受け取られた命令ポインタを減ずるための減算器420が、示されている。受け取られた命令ポインタが、受け取られる命令ポインタから減算される場合、結果は、0からnの範囲となる(ここで、0は、最初の新しい命令が要求されること、そして、他の値は、再送が要求されることを示す)。オフセットに基づいて、命令は、送りメモリ300に置かれ、かつプロセッサ112に供給される。位置探知は、オフセットを送りメモリ300へのポインタの値と組み合わせることによって実行するのが望ましい。プロセッサ112にまだ送られていない最初の固有命令(すなわち、通常の環境の下でこれから送られるであろう命令)を示すポインタ430が、示されている。減算器440は、ポインタ430の値からオフセットを減ずる。結果として生じる値は、所望の命令を示している。プレプロセッサ130が、これから受け取る命令ポインタと受け取られた命令ポインタとを比較したの後、これから得られる命令ポインタは、通常、受け取られた命令ポインタ+1命令にセットされる(4バイトの命令に対しては、これは、カウンタ400を4インクリメントさせることを意味する)。送りメモリ300に対して選ばれる構成に応じて、命令が初めてプロセッサ112に送られるたびに、ポインタ430の値を1インクリメントする必要があるかもしれない。例えば、シフトレジスタを、命令を初めて送ると一つシフトする送りメモリとして使う場合には、このことは必要ではない。
送りメモリ300の使用の代替として、プレプロセッサ130は、プロセッサに最後に送られた少なくともn個の命令を再生することを可能とするプレプロセッサの状態を格納する格納手段を有する。例えば、プレプロセッサ130は、最後に送られたn個の命令へのポインタ、またはこれらの命令の何れもが位置するまたは再生されることを許す他の状態情報へのポインタを格納する送りメモリ130と同様なメモリを有することが出来る。プロセッサが多くの命令の再送を要求すると、送り手段136は、格納されている状況に基づいて命令を発生させることにより要求された命令を再送するように機能する。
別の実施態様の場合、格納手段は、マイクロコントローラの命令ポインタの状態の少なくとも一部を格納するように機能する。これは、命令ポインタを状態の一部を反映している値にセットする、ジャンプ命令をマイクロコントローラに送出することによって簡単に実行させることができる。送り手段136は、命令ポインタから格納されている部分を読み出すように機能する。
第5図は、命令ポインタの状態の格納部分を示す。プレプロセッサ130は、少なくとも1つの仮想マシン命令に対し、仮想マシン命令を固有命令のシークエンスに変換する対応変換テーブルを有している。変換テーブルは、例えば、ROMに格納させることができる。変換テーブルは、前に記載したテーブルのセル220であってもよい(その例は、第2図に示されている)。この別の実施態様の場合、プロセッサの命令ポインタの最下位の部分は、テーブル内のどの固有命令(例えば、NI 1〜NI n)が必要であるかを示すために使用される(すなわち、命令ポインタの最下位の部分は、変換テーブルオフセットインジケータとして機能する)。この部分は、例えば、5ビット長にすることが出来、この場合、別の手段を使用せずに仮想マシン命令に対して最大32の固有命令を可能とする。通常の運転時、プロセッサ112は命令ポインタを自動的にインクリメントさせる。プレプロセッサ130が、カウンタ400の様に自分自身のカウンタを格納する必要は無く、また次に読みとられる固有命令を示すためにこのカウンタをインクリメントさせる必要がないことは有利である。プロセッサが再送を要求する場合、プロセッサ112は、自動的に命令ポインタを前の値にセットする。この方法でも、再送を自動的に処理することができる。第5図は、プロセッサ112の命令ポインタ500の構造を示す。ここで、最下位ビット(LSB)から始まる最下位部分510は、変換テーブルオフセットインジケータとして使用される。プレプロセッサ130は、命令ポインタ500から変換テーブルオフセットインジケータ510を抽出するための手段540を有する(これは、同様に、部分510の位置で’1’ビットおよび他の部分に対して’0’ビットの既定のビットマスクを有する命令ポインタ500へのXOR演算を含むことが出来る)。抽出された部分は、変換テーブルへのポインタとしてまたはオフセットとして直接使用することができる。
別の実施態様の場合、命令ポインタ500の既定の別の部分520は、命令メモリ120の仮想マシン命令を示す仮想マシン命令ポインタを有する。この仮想マシン命令ポインタ520は、新しい仮想マシン命令が必要となる度にインクリメントさせる必要がある、仮想マシンプログラムカウンタと見ることができる。プレプロセッサ130が、メモリマップ周辺機器である場合、命令ポインタ500の1つ以上の最上位ビットは、プレプロセッサ130に対して確保されているアドレス範囲を示すために確保されている。原則として、残りのビットは、部分520に対して使うことができる。この部分は、仮想マシンプログラムの64KBブロックを可能とする、少なくとも16ビットの幅があることが望ましい。また、第1A図のレジスタスタックポインタ138は、プリプロセッサ130がこのポインタを維持する必要無しに、命令ポインタ内でエンコードさせることができる。
プレプロセッサ130は、仮想マシン命令ポインタ520を命令ポインタ500から抽出する手段530を有する。プレプロセッサ130は、命令メモリ120から抽出された仮想マシン命令ポインタによって示される仮想マシン命令を取り出す。取り出された仮想マシン命令に基づいて、プレプロセッサ130は変換テーブルをさがす。その際、プロセッサの命令ポインタ500の最下位部分510は、変換テーブルのオフセットとして使われる。手段540は、命令ポインタ500から最下位の部分510を抽出するために使われる。それぞれの仮想マシン命令のための変換テーブルは、1つのセルが、1つの仮想マシン命令に対応する固有命令のために確保されている、1つのシーケンシャルテーブルに結合されるのが望ましい。この種のテーブルは、既述されていて、その例200は、第2図に示されている。既述したように、インデックステーブル210は、各仮想マシン命令に対する変換テーブル200の関連した部分をさがすために使用することができる。加算手段560は、変換テーブルオフセット(抽出手段540の出力)に、インデックステーブル200の出力(すなわち変換テーブル200のセルアドレス)を加算するために使用することができる。プレプロセッサ130は、命令メモリ120からすでに取り込まれたまたはこれから取り込まれる仮想マシン命令を格納するキャッシュ550を有するのが有利である。1つの仮想マシン命令に関する固有命令のシークエンスが完了した場合にはいつでも、例えば、仮想マシン命令ポインタを所望の値にセットしかつ命令ポインタの変換オフセット部分をリセットする明示のジャンプを、シークエンスの最後の固有命令として使用することにより、次の仮想マシン命令ポインタが示されるように仮想マシン命令ポインタをセットすることが出来る。命令ポインタの部分520は、部分510の次に有効性が高い部分である。この方法の場合、仮想マシン命令ポインタも、一つ以上のNOP(ノーオペレーション)命令を使用することによりインクリメントさせることができる。その結果、変換オフセット部分510のオーバーフローにより、最終的に、プロセッサ112が仮想マシン命令ポインタをインクリメントさせる。プロセッサに依っては、一つ以上のNOP命令をジャンプより速く実行することが出来る。固有命令に対するプロセッサ112からの各要求により、プレプロセッサ130が命令メモリ120から仮想マシン命令を取り込む結果になると言うことが必要ないことは注目される。
第6図に示される別の実施態様の場合、変換テーブル600は、サブテーブル602、604、606、608および609の様に、いくつかのサブテーブルに分割されている。各サブテーブルは、少なく一つの固有命令または固有命令スケルトンを有し、サブテーブルの少なくとも一つは、固有命令または固有命令スケルトンのシークエンスを有する。仮想マシン命令に対する固有命令のシークエンスは、サブテーブルの最初のエントリから始まるのが有利である。サブテーブルは、(必ずしも、この様にする必要は無いが)、1つの仮想マシン命令に対応する固有命令の完全なシークエンスに対応させることができる。サブテーブルは、シークエンスより短くてもよい。この場合、シークエンスは、逐次的に次に来るサブテーブルに続くことが望ましい。実際には、仮想マシン命令の固有命令の最大のシークエンスより小とすることが出来る4つか8つのみの固有命令のサブテーブルサイズを選ぶのが望ましい。並進テーブルオフセットインジケータ510は、サブテーブルのうちの1つのオフセットを示す。命令ポインタ500の所定の別の部分620は、サブテーブルインディケータを有する。プレプロセッサ130は、実際に関係するサブテーブルの位置を決めるために、サブテーブルインディケータ620の値を使用する。このために、プレプロセッサ130は、サブテーブルインディケータ620を命令ポインタ500から抽出する手段610を有する。通常の演算の場合において、サブテーブルインジケータは、固有命令が次のサブテーブル(そのサブテーブルが同じ仮想マシン命令に関するか異なるマシンに関するかに関係なく)から取り出されるたびに、1ユニット分インクリメントされることが望ましい。一例として、初回の仮想マシン命令のシーケンスが、110,111および112の各サブテーブル番号で逐次的にサブテーブルに格納されると仮定すると、次の仮想マシン命令は、サブテーブル85および86に格納され、そして、第三の仮想マシン命令はサブテーブル41および42に格納される。サブテーブルのサイズが、(2ビットの変換テーブルオフセットインジケータ510を使用する)4つのエントリである場合、(番号110を有するサブテーブルの)4つの固有命令の第1のシリーズは、例えば、サブテーブルインジケータ620により1の値を示すことが出来る。この場合、変換テーブルオフセットインジケータは0から3までを示す。(番号111を有するサブテーブルの)4つの固有命令の第2のシリーズは、サブテーブルインジケータ620によって2の値と示されるであろう。第3のシリーズは、サブテーブルインジケータ620よって3の値と示されるであろう。第4のシリーズは(異なる仮想マシン命令に関しているが)、下位のテーブルインジケータ620の次の値4によって示される。プレプロセッサ130は、最後に使われたサブテーブルインジケータに対する関連したサブテーブルへのポインタを格納するためのキャッシュ630を有するのが望ましい。この例では、キャッシュは次のように格納する:
Figure 0003945829
サブテーブルは、等しいサイズを有するのが望ましい。その場合には、再送の目的に対し、サブテーブルインジケータ620に基づいて、キャッシュ630のサブテーブル番号をさがして、サブテーブル番号にサイズを乗算して、そして変換テーブルオフセット510を加算することによって、命令をさがすことができる。サブテーブルは、2のパワーである等しいサイズを有するのが有利である。対応する長さ(kビットインジケータは、2kのサブテーブルサイズに対応する)を有する変換テーブルオフセットインジケータ510を使用することによって、サブテーブルインジケータは、サブテーブルの全ての命令を処理するたびに、(変換テーブルオフセットインジケータ510のオーバーフローの結果として)自動的にインクリメントされる。1つの仮想マシン命令に対する固有命令のシークエンスの終わりで、サブテーブルの境界で終了するようにシークエンスの補数をとるために付加NOP命令を使用することが出来る。この方法の場合、サブテーブルインジケータ620も、また、命令の連続したシークエンスに対する正しい値に、自動的にインクリメントされるであろう。これに代えて、変換テーブルオフセットインジケータ510をリセットし、サブテーブルインジケータ620をインクリメントさせるジャンプ命令を使用することもできる。可変サイズサブテーブルに対しては、テーブル210と同様の別のインデックステーブルを、サブテーブル番号に基づいてサブテーブルの開始アドレスをさがすために使用することができる。実際には、非常に小さいサブテーブルインジケータ620を使用することが可能である。16までの命令の再送を要求し4つのエントリを有するサブテーブルを使用しているプロセッサに対しては、2ビットサブテーブルインジケータ620の使用で充分である。この例の場合、キャッシュ630は4つのエントリしか必要としない。
サブテーブルインジケータ620に対しては、実際のサブテーブル番号を使用することもできることは、理解されるであろう。しかしながら、この場合、例えば、異なったシークエンスが始まる場合、サブテーブルインジケータ620を正しい値に設定するために、ジャンプが必要となる。また、サブテーブルインジケータ620のサイズは、全てのサブテーブル番号を表示することが出来るように、より大きくなければならないであろう。このような構成を使用することによって、サブテーブルインジケータ620と変換テーブルオフセットインジケータ510との組み合わせは、キャッシュ630を不必要にし、直接、テーブル600内のエントリを示すことができる。
本発明の別の実施態様の場合、マイクロコントローラ110は命令メモリ120とプレプロセッサ130を有する。プロセッサ112、命令メモリ120およびプレプロセッサ130は、アトミックトランザクションマイクロコントローラバス140を介して連結されている。アトミックトランザクションバスとは、命令を取り込むような読取り演算を実行するために、装置が以下のステップのシークエンスを実行するバスを意味する:
-装置が、そのバスに排他的アクセスを得る、
-装置が、バス上に要求を置くことにより(命令のような)データを要求する、
-装置が、他の装置がそのバス上にデータを置いた時にデータを得る、
-装置が、そのバスを解放し、他の装置がそのバスにアクセスすることを可能にする。
プロセッサ112は、バス140を介して固有命令の送り又は再送を要求する。プレプロセッサ130は、関連する固有命令へ変換するために、また、バス140を介して命令メモリ120から仮想マシン命令を取り込む。特別な予防措置が無い場合、プロセッサ112が固有命令を要求し、命令が供給されるまでバス140をブロックすると、デッドロックが発生することがある。この場合、それが固有命令を供給することができる前に、プレプロセッサ130は、最初に、同じバス140を介して命令メモリ120から(仮想マシン)命令を得る必要がある。この種の状況を避けるために、プレプロセッサ130は、その関連する仮想マシン命令が、プレプロセッサ130に最早存在しない固有命令の送り又は再送をプロセッサ112が要求すると、プロセッサ112によって始められたバストランザクションを完了するノーオペレーション(NOP)命令をプロセッサ112に送る手段を有する。
処理装置100が、複数のプログラムの仮想マシン命令を実行することが出来ることは有利である。例えば、処理装置100は、仮想マシン命令において表される複数のタスクをサポートする。オプションとして、いくつかのタスクは、固有命令で表すこともできる。多重仮想マシンタスクのサポートは、マイクロコントローラ110で実行されるオペレーティングシステムのタスク切換えルーチンによって実行されるのが望ましい。タスクスイッチが、トリガされる(例えば、タイマー割込みによって駆動されて、タスク切換え割込み処理ルーチンによって処理される)時、プロセッサ112からの情報を保存することに加えて、現在実行中のタスクに関連した情報が、プレプロセッサ130から保存される。この情報は、メモリに保存することができる。同じタイプの情報が、新しいタスクに対して再ロードされ、プレプロセッサ130およびプロセッサ112に与えられる。第3および4図に示した実施態様の場合、関連したプレプロセッサ情報は、送りメモリ300、カウンタ400およびポインタ430のコンテンツを含む。第5および6図に示した実施態様の場合、関連したプレプロセッサ情報は、キャッシュ550および630のコンテンツを、各々、含む。情報の保存と復元を可能とするために、プレプロセッサ130の関連した要素は、読取り可能でかつプロセッサ112の制御下で設定できるタイプである。代替として、キャッシュ550をプレプロセッサ130によって保存し復元することができることも理解されるであろう。

Claims (14)

  1. 仮想マシン命令を実行するための処理装置であって、前記処理装置が、
    前記仮想マシン命令の少なくとも一つを含む命令を格納するための命令メモリと、
    マイクロコントローラの特定の命令の既定のセットから、固有命令を実行するための既定のマイクロコントローラコアを有しているプロセッサを有していて、前記固有命令が、前記仮想マシン命令と異なっている、マイクロコントローラと、
    前記命令メモリから取り込まれた少なくとも一つの仮想マシン命令を少なくとも一つの固有命令に変換するコンバータと、実行のために前記マイクロコントローラコアに固有命令を送る送り手段とを有しているプレプロセッサとを
    有している処理装置において、
    前記プロセッサが、既定の条件が発生すると、n(n>1)個の固有命令の既定最大値まで再送を要求するタイプであり、そして、前記プロセッサが複数の固有命令の再送を要求すると、前記送り手段が、前記要求された固有命令を再送する手段を有する、
    ことを特徴とする処理装置。
  2. 前記プレプロセッサが、前記プロセッサに最後に送られた少なくともn個の命令を格納する送りメモリを有し、そして、
    前記送り手段が、前記プロセッサが複数の命令の再送を要求すると、前記送りメモリから前記要求された命令を再送するように機能する、
    ことを特徴とする請求項1に記載の処理装置。
  3. 前記マイクロコントローラが、k-ステージのパイプラインのパイプラインアーキテクチャを有し、かつnがk以上である、
    ことを特徴とする請求項2に記載の処理装置。
  4. hまでの命令を格納する命令キャッシュを有しかつnがh以上である、
    ことを特徴とする請求項2に記載の処理装置。
  5. 前記マイクロコントローラが、kステージパイプラインのパイプラインアーキテクチャを有し、そして、前記プロセッサが、hまでの命令を格納する命令キャッシュを有し、そしてnがk+h以上である、
    ことを特徴とする請求項2に記載の処理装置。
  6. 前記送りメモリが、少なくともn+m(m≧1)の固有命令を格納する位置を有し、かつ前記プレプロセッサが、前記プロセッサへの初めての送りに対しmまでの固有命令を発生させかつそれらを前記送りメモリに格納するように機能する、
    ことを特徴とする請求項2に記載の処理装置。
  7. 前記プロセッサに逐次的に送られるかまたは再送される命令が、逐次的に格納され、
    そして、前記プレプロセッサが、
    初めての送りに対し前記プロセッサが次に要求するであろう命令のアドレスを示すカウンタと、
    前記カウンタに格納されている前記アドレスに関して前記プロセッサにより要求された命令の実アドレスのオフセットを決定する手段とを有し、
    そして、前記オフセットに基づいて前記送りメモリ内の前記要求された命令をさがす、
    ことを特徴とする請求項6に記載の処理装置。
  8. 前記プレプロセッサが、少なくとも前記プロセッサに最後に送られた少なくともn個の命令を再生することが出来る前記プレプロセッサの状態を格納する格納手段を有し、
    そして、前記送り手段が、前記プロセッサが、複数の命令の再送を要求すると、前記格納された状態に基づいて前記命令を再生させることにより前記要求された命令を再送するように機能する、
    ことを特徴とする請求項1に記載の処理装置。
  9. 前記格納手段が、前記マイクロコントローラの命令ポインタの前記状態の少なくとも一部を格納するように機能し、
    そして前記送り手段が、前記命令ポインタから前記格納された部分を検索するように機能する、
    ことを特徴とする請求項8に記載の処理装置。
  10. 前記プレプロセッサが、少なくとも一つの仮想マシン命令に対し、前記仮想マシン命令を固有命令のシークエンスに変換する対応する変換テーブルを有し、
    前記テーブルが、固有命令および/または固有命令スケルトンを有し、
    前記状態が変換テーブルオフセットインジケータを有し、
    そして、前記格納手段が、前記マイクロコントローラの前記命令ポインタの既定の最下位の部分に前記変換テーブルオフセットインジケータを格納するように機能し、
    そして、前記送り手段が、前記命令ポインタ内の前記変換テーブルオフセットインジケータの制御の下で、前記変換テーブル内の固有命令または固有命令スケルトンを探すように機能する、
    ことを特徴とする請求項9に記載の処理装置。
  11. 前記状態が、さらに、前記命令メモリ内の仮想マシン命令を示す仮想マシン命令ポインタを有し、
    そして、前記格納手段が、前記仮想マシン命令ポインタを前記マイクロコントローラの前記命令ポインタの既定の別の部分に格納するように機能し、
    そして、前記プレプロセッサが、前記マイクロコントローラの前記命令ポインタ内の前記仮想マシン命令ポインタによって示される前記命令メモリ内の位置から仮想マシン命令を取り込む手段を有し、
    そして、前記送り手段が、前記取り込まれた仮想マシン命令に対応する前記変換テーブルを探すように機能する、
    ことを特徴とする請求項10に記載の処理装置。
  12. 前記変換テーブルが、固有命令または固有命令スケルトンのシークエンスを有している複数のサブテーブルに、少なくともそれらの一つに、分割され、
    前記変換テーブルオフセットインジケータがサブテーブルのオフセットを示し、
    前記状態が、さらに、サブテーブルインジケータを有し、
    そして前記格納手段が、前記サブテーブルインジケータを前記マイクロコントローラの前記命令ポインタの既定の別の部分に格納するように機能し、
    そして、前記送り手段が、前記命令ポインタの前記サブテーブルインジケータと前記変換テーブルオフセットインジケータとによって示される前記サブテーブルの位置の固有命令または固有命令スケルトンを探すように機能する、
    ことを特徴とする請求項10に記載の処理装置。
  13. 前記マイクロコントローラが、前記命令メモリおよび前記プレプロセッサを有し、
    前記プロセッサ、命令メモリおよびプレプロセッサが、アトミックトランザクションマイクロコントローラバスを介して結合されていて、
    前記プロセッサが、前記バスを介して固有命令の送り又は再送を要求するタイプで、かつ前記プレプロセッサが、関連した固有命令への変換のために、前記バスを介して前記命令メモリから仮想マシン命令を取り込むように機能し、
    前記プレプロセッサが、その関連する仮想マシン命令が、前記プレプロセッサに最早存在しない固有命令の送り又は再送を前記プロセッサが要求すると、前記プロセッサによって始められた前記バストランザクションを完了するノーオペレーション(NOP)命令を前記プロセッサに送る手段を有する、
    ことを特徴とする請求項1に記載の処理装置。
  14. マイクロコントローラの特定の命令の既定のセットから、固有命令を実行するための、既定のマイクロコントローラコアを有するプロセッサを有するマイクロコントローラと共に使用される、プレプロセッサであって、
    前記プレプロセッサが、命令メモリから取り込まれた少なくとも一つの仮想マシン命令を、少なくとも一つの固有命令に変換し、前記固有命令が前記仮想マシン命令とは異なっているコンバータと、実行のために、前記マイクロコントローラコアに固有命令を送る送り手段とを有しているプレプロセッサにおいて、
    前記送り手段が、前記プロセッサが、1個以上の固有命令の再送を要求すると、前記要求された固有命令を再送する手段を有する、
    ことを特徴とするプレプロセッサ。
JP52133599A 1997-10-02 1998-09-17 仮想マシン命令を実行するための処理装置 Expired - Fee Related JP3945829B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP97203033 1997-10-02
EP97203033.2 1997-10-02
PCT/IB1998/001432 WO1999018484A2 (en) 1997-10-02 1998-09-17 A processing device for executing virtual machine instructions

Publications (2)

Publication Number Publication Date
JP2001508907A JP2001508907A (ja) 2001-07-03
JP3945829B2 true JP3945829B2 (ja) 2007-07-18

Family

ID=8228783

Family Applications (1)

Application Number Title Priority Date Filing Date
JP52133599A Expired - Fee Related JP3945829B2 (ja) 1997-10-02 1998-09-17 仮想マシン命令を実行するための処理装置

Country Status (5)

Country Link
US (2) US6349377B1 (ja)
EP (2) EP1359501A3 (ja)
JP (1) JP3945829B2 (ja)
DE (1) DE69820027T2 (ja)
WO (1) WO1999018484A2 (ja)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
WO2000034854A2 (en) * 1998-12-08 2000-06-15 Koninklijke Philips Electronics N.V. Method of executing an interpreter program
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
WO2001061477A1 (en) * 2000-02-14 2001-08-23 Chicory Systems, Inc. Predecoding instructions to determine stack change information
GB2367654B (en) 2000-10-05 2004-10-27 Advanced Risc Mach Ltd Storing stack operands in registers
GB2367651B (en) * 2000-10-05 2004-12-29 Advanced Risc Mach Ltd Hardware instruction translation within a processor pipeline
US20020069402A1 (en) * 2000-10-05 2002-06-06 Nevill Edward Colles Scheduling control within a system having mixed hardware and software based instruction execution
GB2367653B (en) 2000-10-05 2004-10-20 Advanced Risc Mach Ltd Restarting translated instructions
EP1197847A3 (en) * 2000-10-10 2003-05-21 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6996813B1 (en) * 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
GB2369464B (en) 2000-11-27 2005-01-05 Advanced Risc Mach Ltd A data processing apparatus and method for saving return state
US7076771B2 (en) 2000-12-01 2006-07-11 Arm Limited Instruction interpretation within a data processing system
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US7181484B2 (en) * 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
US7711763B2 (en) * 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7096466B2 (en) 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US6957428B2 (en) 2001-03-27 2005-10-18 Sun Microsystems, Inc. Enhanced virtual machine instructions
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
GB2376100B (en) * 2001-05-31 2005-03-09 Advanced Risc Mach Ltd Data processing using multiple instruction sets
GB2376099B (en) * 2001-05-31 2005-11-16 Advanced Risc Mach Ltd Program instruction interpretation
GB2376098B (en) * 2001-05-31 2004-11-24 Advanced Risc Mach Ltd Unhandled operation handling in multiple instruction set systems
GB2376097B (en) 2001-05-31 2005-04-06 Advanced Risc Mach Ltd Configuration control within data processing systems
US6988261B2 (en) 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US7039904B2 (en) 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
EP1313012A1 (en) * 2001-11-15 2003-05-21 Texas Instruments France Java DSP acceleration by byte-code optimization
US7162620B2 (en) * 2002-03-13 2007-01-09 Sony Computer Entertainment Inc. Methods and apparatus for multi-processing execution of computer instructions
US7131118B2 (en) * 2002-07-25 2006-10-31 Arm Limited Write-through caching a JAVA® local variable within a register of a register bank
US9207958B1 (en) 2002-08-12 2015-12-08 Arm Finance Overseas Limited Virtual machine coprocessor for accelerating software execution
JP4127495B2 (ja) * 2002-09-05 2008-07-30 株式会社ルネサステクノロジ 情報処理装置
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
US7694301B1 (en) * 2003-06-27 2010-04-06 Nathan Laredo Method and system for supporting input/output for a virtual machine
JP4224430B2 (ja) * 2003-07-07 2009-02-12 株式会社ルネサステクノロジ 情報処理装置
GB2412192B (en) * 2004-03-18 2007-08-29 Advanced Risc Mach Ltd Function calling mechanism
US7802080B2 (en) 2004-03-24 2010-09-21 Arm Limited Null exception handling
US7930526B2 (en) 2004-03-24 2011-04-19 Arm Limited Compare and branch mechanism
US7278122B2 (en) * 2004-06-24 2007-10-02 Ftl Systems, Inc. Hardware/software design tool and language specification mechanism enabling efficient technology retargeting and optimization
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US8359585B1 (en) * 2007-01-18 2013-01-22 Advanced Testing Technologies, Inc. Instrumentation ATS/TPS mitigation utilizing I/O data stream
US8281308B1 (en) 2007-07-23 2012-10-02 Oracle America, Inc. Virtual core remapping based on temperature
WO2015057857A1 (en) * 2013-10-15 2015-04-23 Mill Computing, Inc. Computer processor employing dedicated hardware mechanism controlling the initialization and invalidation of cache lines
US10114638B2 (en) * 2014-12-15 2018-10-30 Cisco Technology, Inc. Command message generation and execution using a machine code-instruction
US9477453B1 (en) * 2015-06-24 2016-10-25 Intel Corporation Technologies for shadow stack manipulation for binary translation systems
CN112256331B (zh) * 2020-12-22 2021-04-27 鹏城实验室 虚拟机指令解析加速方法、装置和计算机存储介质

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4524415A (en) * 1982-12-07 1985-06-18 Motorola, Inc. Virtual machine data processor
US4841476A (en) * 1986-10-06 1989-06-20 International Business Machines Corporation Extended floating point operations supporting emulation of source instruction execution
US5117387A (en) * 1988-08-18 1992-05-26 Delco Electronics Corporation Microprogrammed timer processor
ES2132073T3 (es) * 1991-01-10 1999-08-16 Siemens Ag Disposicion de circuito para la reproduccion del espacio de direccionamiento logico de una unidad de procesador sobre el espacio de direccionamiento fisico de una memoria.
US5432795A (en) * 1991-03-07 1995-07-11 Digital Equipment Corporation System for reporting errors of a translated program and using a boundry instruction bitmap to determine the corresponding instruction address in a source program
US5577259A (en) 1991-09-19 1996-11-19 Unisys Corporation Instruction processor control system using separate hardware and microcode control signals to control the pipelined execution of multiple classes of machine instructions
US5577295A (en) * 1994-09-27 1996-11-26 Chrysler Corporation Three diameter hinge pin
WO1997027536A1 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. Instruction folding for a stack-based machine
EP0976029A2 (en) * 1996-01-24 2000-02-02 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
US5842017A (en) * 1996-01-29 1998-11-24 Digital Equipment Corporation Method and apparatus for forming a translation unit
DE69719269T2 (de) * 1996-08-01 2003-10-30 Ibm Absicherung der Unteilbarkeit für eine Ansammlung von transaktionellen Arbeitsschritten in einem Arbeitsflussverwaltungssystem
JP3467167B2 (ja) * 1997-04-16 2003-11-17 日本電気株式会社 プログラミング言語処理系における割込処理方法、装置およびその記録媒体
US6021273A (en) * 1997-06-30 2000-02-01 Sun Microsystems, Inc. Interpreter generation and implementation utilizing interpreter states and register caching
GB2327784B (en) * 1997-07-28 2002-04-03 Microapl Ltd A method of carrying out computer operations
US6112018A (en) * 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Apparatus for exchanging two stack registers
US6134573A (en) * 1998-04-20 2000-10-17 Ip-First, L.L.C. Apparatus and method for absolute floating point register addressing
US6314445B1 (en) * 1998-08-03 2001-11-06 International Business Machines Coproration Native function calling
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager

Also Published As

Publication number Publication date
EP1359501A2 (en) 2003-11-05
DE69820027D1 (de) 2004-01-08
US20020129225A1 (en) 2002-09-12
JP2001508907A (ja) 2001-07-03
WO1999018484A2 (en) 1999-04-15
EP0950216A2 (en) 1999-10-20
EP0950216B1 (en) 2003-11-26
US6996703B2 (en) 2006-02-07
WO1999018484A3 (en) 1999-06-24
DE69820027T2 (de) 2004-07-08
US6349377B1 (en) 2002-02-19
EP1359501A3 (en) 2007-11-21

Similar Documents

Publication Publication Date Title
JP3945829B2 (ja) 仮想マシン命令を実行するための処理装置
US6298434B1 (en) Data processing device for processing virtual machine instructions
JP4171496B2 (ja) スタックを用いる演算マシンのための命令フォールディング処理
US7080362B2 (en) Java virtual machine hardware for RISC and CISC processors
US20010010072A1 (en) Instruction translator translating non-native instructions for a processor into native instructions therefor, instruction memory with such translator, and data processing apparatus using them
WO2000034844A9 (en) Java virtual machine hardware for risc and cisc processors
KR100258650B1 (ko) 에뮬레이션 문맥 스위치 저장 및 복구를 수행하는 방법 및 프로세서
US6243668B1 (en) Instruction set interpreter which uses a register stack to efficiently map an application register state
Probst Dynamic binary translation
US20050240915A1 (en) Java hardware accelerator using microcode engine
US6553426B2 (en) Method apparatus for implementing multiple return sites
JP3193651B2 (ja) ゲスト命令をエミュレートするプロセッサ
KR950006617B1 (ko) 프로그램 동작시에 프로그램 유닛의 연결 방법 및 장치
US5933622A (en) Method for efficient handling of asynchronous events in a dynamic translation system
JP4799016B2 (ja) 機能を呼び出す方法と装置
Case Implementing the Java virtual machine
KR100267434B1 (ko) 제 1 처리 환경내에서 제 1 명령어를 에뮬레이션 환경내에서의제 2 명령어 처리 개시에 응하여 처리하는 방법 및 시스템
JP3630804B2 (ja) データ処理装置
JP2504235B2 (ja) デ―タ処理装置
WO2002044894A2 (en) Method and apparatus for processing variable length instructions
JP2005506630A (ja) 低オーバヘッドの例外チェック
EP1489492A1 (en) Two-step instruction resolution
JP2000215055A (ja) パイプラインハ―ドウェアスタック
JP2005108126A (ja) 中間コード実行システム、中間コード実行システム搭載機器

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060418

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20060328

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20060714

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20060904

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061018

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070313

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070410

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110420

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110420

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120420

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130420

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140420

Year of fee payment: 7

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

LAPS Cancellation because of no payment of annual fees