JPH1185534A - インタプリタ状態及びレジスタキャシングを利用するインタプリタの発生及び実現 - Google Patents

インタプリタ状態及びレジスタキャシングを利用するインタプリタの発生及び実現

Info

Publication number
JPH1185534A
JPH1185534A JP10184702A JP18470298A JPH1185534A JP H1185534 A JPH1185534 A JP H1185534A JP 10184702 A JP10184702 A JP 10184702A JP 18470298 A JP18470298 A JP 18470298A JP H1185534 A JPH1185534 A JP H1185534A
Authority
JP
Japan
Prior art keywords
interpreter
virtual machine
state
operand stack
registers
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.)
Pending
Application number
JP10184702A
Other languages
English (en)
Inventor
Robert Griesemer
グリーセマー ロバート
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH1185534A publication Critical patent/JPH1185534A/ja
Pending legal-status Critical Current

Links

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/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
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

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)

Abstract

(57)【要約】 【課題】 インタープリットされているコンピュータプ
ログラムの実行速度を向上させる新しい技法に対する必
要性がある。さらに、インタプリタが必要とする資源に
関して、効率的なインタプリタを提供するための必要性
がある。 【解決手段】 オペランドスタックを使って、インター
プリットされるプログラムの実行速度を向上させるシス
テムと方法が提供される。オペランドスタックの最上位
のための値は1つ以上のレジスタ(305、405、4
07、409)に格納される。インタプリタの状態は、
1つ以上のレジスタに格納されるオペランドスタックの
最上位のための値のデータタイプを示している。インタ
プリタに要求されているメモリに関して高速で効率的な
インタプリタを生成することができる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソフトウェアイン
タプリタのインプリメンテーション及び生成に関する。
より具体的には、スタックベースの(stack-based)操
作を最適化するためにレジスタを利用するJavaTM
想マシンのためのインタプリタを実現し、また生成する
ことに関する。
【0002】
【従来の技術】JavaTMプログラム言語は、サンマイ
クロシステムズによって開発され、また小さなパーソナ
ルコンピュータからスーパーコンピュータに至る幅広い
範囲のコンピュータ上において実行されるに持ち運びに
十分であるように設計された、オブジェクト指向の高級
プログラミング言語である。JavaTM(または他の言
語)で記述されたコンピュータプログラムは、Java
TM仮想マシンによって実行されるための仮想マシン命令
にコンパイルされることができる。一般に、JavaTM
仮想マシンは、仮想マシン命令をデコードし、また実行
するインタプリタである。
【0003】JavaTM仮想マシンのための仮想マシン
命令はバイトコードであり、そのことは、その仮想マシ
ン命令が1以上のバイトを含むことを意味する。そのバ
イトコードは、「クラスファイル」と呼ばれる特別のフ
ァイル形式に格納される。そのバイトコードに加えて、
クラスファイルはシンボルテーブルおよび他の付属の情
報を含んでいる。
【0004】1つ以上のクラスファイルにおいてJav
aバイトコードとして具現化されているコンピュータプ
ログラムは、プラットフォームに依存しない。コンピュ
ータプログラムは、Java仮想マシンのインプリメン
テーションを走らすことができる任意のコンピュータ上
において、変形されずに(unmodified)、実行されるこ
とができる。Java仮想マシンは、Java仮想マシ
ンのためのコンピュータプログラムがプラットフォーム
に依存しないことを可能にしている主な因子である、
「一般的な(generic)」コンピュータのソフトウェア
エミュレータである。
【0005】
【発明が解決しようとする課題】Java仮想マシン
は、一般にソフトウェアインタープリタとして実現され
る。伝統的なインタープリタは、実行中にひと時に一命
令毎に、インタープリットされた(interpret、解釈さ
れた)プログラムの仮想マシン命令をデコードし、また
実行する。一方、コンパイラは、実行中にデコードが行
われないように、実行に先だってソースコードを固有の
マシン命令にデコードする。伝統的なインタプリタは、
各命令に出会うたび毎に繰り返しその命令が実行される
前に命令をデコードするので、コンパイルされたプログ
ラムの固有のマシン命令は固有のマシンまたはコンピュ
ータシステム上においてデコードを必要とすることなく
実行されることができるので、インタープリットされた
プログラムの実行は、典型的には、コンパイルされたプ
ログラムの実行よりかなり遅くなる。
【0006】インタープリットされたプログラムをデコ
ードして、実行するために、ソフトウェアインタープリ
タが実行されなければならないので、ソフトウェアイン
タープリタは、資源(例えば、メモリ)を消費して、し
たがって、その資源は、インタープリットされたプログ
ラムにもはや利用可能でない。これは、固有のマシン命
令を実行するコンパイルされたプログラムとは際立って
対称的であって、それゆえ、コンパイルされたプログラ
ムは、対象のコンピュータ上において直接に実行される
ことができ、したがって、インタープリットされたプロ
グラムよりも多くの資源を一般的に自由に利用できる。
【0007】そのため、インタープリットされているコ
ンピュータプログラムの実行速度を向上させる新しい技
法に対する必要性がある。さらに、インタプリタが必要
とする資源に関して、効率的なインタプリタを提供する
ための必要性がある。
【0008】
【課題を解決するための手段】一般に、本発明のいくつ
かの実施例は、インタープリタによって実行されるコン
ピュータプログラムの実行速度を増加させる革新的なシ
ステムおよび方法を提供する。このインタプリタは、仮
想マシン命令を実行するために利用されるオペランドス
タックを含む。オペランドスタックの最上位のための値
は、1つ以上のレジスタに格納されて、この値は、スタ
ックベースの仮想マシン命令の実行速度が向上されるこ
とを可能にする。インタープリタの状態は、1つ以上の
レジスタに格納されたオペランドスタックの最上位ため
の値のデータタイプを示すために利用される。この発明
の場合、プログラムは、レジスタを用いて、より効率的
な方法でインタープリットされることができる。加え
て、インタープリタのサイズは、小さく保たれ、より多
くの資源がインタープリットされたプログラムのために
利用可能であることを可能にする。この発明のいくつか
の実施例が以下に記載される。
【0009】ある実施例においては、オペランドスタッ
クを含むインタプリタをインプリメントするためのコン
ピュータでインプリメントされる方法が提供される。オ
ペランドスタックの最上位のための値は、スタック上に
格納される代わりに、少なくとも1つのレジスタに格納
される。多くの伝統的なコンピュータは、異なったデー
タタイプを格納するためのレジスタを有する。そのた
め、スタックの最上位のための値は、そのデータタイプ
に適した1つ以上のレジスタに格納されて、インタープ
リタの状態は、1つ以上のレジスタに格納されるオペラ
ンドスタックの最上位のための値のデータタイプを示す
ために利用される。好ましい実施例においては、インタ
プリタはJava仮想マシンであり、またインタプリタ
の状態は、整数、倍長整数、単精度浮動小数点数、およ
び倍精度浮動小数点数を含むことができる。
【0010】別の実施例においては、1つ以上のレジス
タにオペランドスタックの最上位のための値を格納する
インタプリタを生成するための、コンピュータでインプ
リメントされる方法が提供される。インタープリタの状
態は、1つ以上のレジスタに格納されるオペランドスタ
ックの最上位のための値のデータタイプを示している。
インタプリタを生成するために、コンピュータは、可能
な全ての仮想命令およびインタプリタの状態にわたって
(through)ループすることができる。各繰り返しにお
いて、仮想マシン命令およびインタプリタの状態が選択
されることができる。選択された状態が、選択された仮
想マシン命令の実行に先立って期待されるインタプリタ
の状態と違っているならば、期待された状態にインタプ
リタを置くようにインタプリタのためのコンピュータコ
ードが生成される。ひとたび、選択された仮想マシン命
令の実行に先立って期待される状態にそのインタプリタ
があることがわかると、選択された仮想マシン命令を実
行するようにインタプリタのためのコンピュータコード
が生成される。選択された仮想マシン命令に対する期待
された状態は、仮想マシン命令を実行する前のインタプ
リタの期待される状態と、仮想マシン命令を実行した後
の現在のインタプリタの状態とを格納し仮想マシン命令
によってインデックス付けされたテーブルをアクセスす
ることによって獲得されることができる。さらに、選択
された仮想マシン命令を実行するインタプリタのための
コンピュータコードは、テーブルにおいて特定された関
数を呼ぶことによって生成されることができる。
【0011】他の実施例においては、コンピュータで可
読な媒体によって格納され、仮想マシン命令のインタプ
リタのためのデータ構造が提供される。このデータ構造
は、仮想マシン命令によってインデックス付けされ、且
つ多重のフィールドを有するテーブルである。テーブル
のある1つのフィールドには、仮想マシン命令の実行前
のインタプリタの期待される状態が格納される。テーブ
ルの別のフィールドには、仮想マシン命令の実行後のイ
ンタプリタの現在の状態が格納される。さらに、テーブ
ルのフィールドは、仮想マシン命令を実行するためにイ
ンタプリタのためのコンピュータコードを生成する関数
へのポインタを格納するために利用されることができ
る。好ましい実施例においては、インタプリタの状態
は、1つ以上のレジスタに格納されているインタプリタ
のオペランドスタックの最上位のための値のデータタイ
プを示す。
【0012】他の実施例においては、仮想マシン命令の
インタプリタのためのコンピュータで可読な媒体によっ
て格納されたデータ構造が提供される。データ構造は、
仮想マシン命令によってインデックス付けされ、且つ多
重のフィールドを有するテーブルであって、各フィール
ドは、インタプリタの状態に関連付けられ、またインデ
ックス付けされた仮想マシン命令を実行するインタプリ
タ内のロケーションへのポインタを格納する。インタプ
リタの状態は、1つ以上のレジスタに格納されたインタ
プリタのオペランドスタックの最上位のための値のデー
タタイプを示すことができる。好ましい実施例において
は、インタプリタの状態は、整数、倍長整数、単精度浮
動小数点数、および倍精度浮動小数点数である。
【0013】本発明の他の特徴や利点は、添付図面に関
連して以下の詳細な説明を見れば容易に明らかになる。
【0014】
【発明の実施の形態】
定義 マシン命令 − オペレーションコード(オペコード)
と随意に(optionally)1つ以上のオペランドによって
特定される操作を実行することをコンピュータに指示す
る命令 仮想マシン命令 − ソフトウェアでエミュレートされ
る(software emulated)マイクロプロセッサまたはコ
ンピュータのアーキテクチャのためのマシン命令(仮想
コードとも呼ばれる)。 固有の(Native)マシン命令 − 特定のマイクロプロ
セッサまたはコンピュータのアーキテクチャのために設
計されたマシン命令(ネイティブコードとも呼ばれ
る)。 クラス − クラスの各オブジェクトが含むデ
ータおよびメソッドを定義するオブジェクト指向のデー
タタイプ。 関数 − ソフトウェアルーチン(サブルーチン、手続
き、メンバ関数、およびメソッドとも呼ばれる)。 オペランドスタック − 実行中にマシン命令によって
使用するためにオペランドを格納するために利用するス
タック。 バイトコードポインタ(BCP) − 実行されている
現在のJava仮想マシン命令(例えば、バイトコー
ド)を指すポインタ。 プログラムカウンタ(PC) − 実行されているイン
タプリタの(典型的には、固有の)マシン命令を指すポ
インタ。 インタプリタ − 典型的にはコンピュータプログラム
における各命令を翻訳し、次に実行するソフトウェアま
たはハードウェア内のプログラム。 インタプリタ生成器 − インタプリタを生成するソフ
トウェアまたはハードウェアにおけるプログラム。
【0015】概要 以下に続く記述において、本発明が、Java仮想マシ
ン命令(バイトコード)を実行するためのJava仮想
マシンをインプリメントする(implement、実現する)
好ましい実施例を参照して記述される。特に、IBMパ
ーソナルコンピュータ(Intel x86マイクロプ
ロセッサアーキテクチャ)の固有のマシン命令を含んで
例示が記述される。しかしながら、この発明は、特別の
言語、コンピュータアーキテクチャ、または特定のイン
プリメンテーション(implementation、実現)に限られ
るものではない。したがって、以下に続く実施例の記述
は、例示のためであって、限定のためではない。
【0016】図1は、本発明の実施例のソフトウェアを
実行するために使用されることができるコンピュータシ
ステムの例を図示している。図1は、ディスプレイ3、
スクリーン5、キャビネット7、キーボード9、マウス
11を含むコンピュータシステム1を示している。マウ
ス11は、グラフィカルユーザインターフェースを用い
て対話する(interact)ための1つ以上のボタンを有す
ることができる。キャビネット7は、本発明をインプリ
メントするコンピュータコードと、本発明とともに使用
するデータ、などを組み込むソフトウェアプログラムを
格納し、また検索するために使用することができるCD
−ROMドライブ13、システムメモリ、およびハード
ドライブ(図2を見よ)を収納する。コンピュータで可
読な例示的な記憶媒体としてCD−ROM15が示され
ているけれども、フロッピーディスク、テープ、フラッ
シュメモリ、およびハードドライブを含むコンピュータ
で可読な他の記憶媒体を使用することもできる。さら
に、(例えば、インターネットを含むネットワークにお
ける)キャリア波(carrier wave)で具現化されたデー
タ信号が、コンピュータで可読な記憶媒体であることも
できる。
【0017】図2は、本発明の実施例のソフトウェアを
実行するために使用されるコンピュータシステム1のシ
ステムブロック図を示す。図1にあるように、コンピュ
ータシステム1は、モニタ3およびキーボード9、並び
にマウス11を含む。コンピュータシステム1は、更
に、中央プロセッサ51、システムメモリ53、固定記
憶装置55(例えば、ハードドライブ)、リムーバブル
(removable、着脱可能な)記憶装置57(例えば、C
D−ROMドライブ)、ディスプレイアダプタ59、サ
ウンドカード61、スピーカ63、およびネットワーク
インターフェース65といった、サブシステムを含む。
本発明とともに使用するために適した他のコンピュータ
システムは、付加的な、または、少数のサブシステムを
含むこともある。例えば、別のコンピュータシステム
は、1つより多いプロセッサ51(例えば、マルチプロ
セッサシステム)、キャッシュメモリを含むこともでき
るでしょう。
【0018】コンピュータシステム1のシステムバスア
ーキテクチャは、矢印67で表わされる。しかしなが
ら、これらの矢印は、サブシステムをリンクするために
役立つ相互接続のスキームの例示である。例えば、中央
プロセッサをシステムメモリおよびディスプレイアダプ
タに接続するためにローカルバスを利用することもでき
るでしょう。図2に示されたコンピュータシステム1
は、本発明と共に使用するために適したコンピュータシ
ステムの単なる例である。サブシステムの異なった構成
を有する他のコンピュータアーキテクチャを利用するこ
とができる。
【0019】典型的には、Javaプログラミング言語
で記述されたコンピュータプログラムは、Java仮想
マシン命令またはバイトコードにコンパイルされ、これ
らは、その後に、Java仮想マシンによって実行され
る。そのバイトコードは、インタープリテーションのた
めにJava仮想マシンへ入力されるクラスファイルに
格納される。図3は、インタープリタである、Java
仮想マシンによる実行を通して、単純な一片のJava
ソースコードの進行(progression)を示している。
【0020】Javaソースコード101は、Java
で記述された古典的なHelloWorldプログラム
を含んでいる。ソースコードは、その後に、ソースコー
ドをバイトコードにコンパイルするバイトコードコンパ
イラ103に入力される。バイトコードは、ソフトウェ
アがエミュレートする(software emulated)コンピュ
ータによって実行されるので、仮想マシン命令である。
典型的には、仮想マシン命令はジェネリック(generi
c)である(すなわち、特定のマイクロプロセッサまた
はコンピュータのアーキテクチャのために設計されたも
のではない)が、しかし、このことは要求されていな
い。バイトコードコンパイラは、Javaプログラムの
ためのバイトコードを含むJavaクラスファイル10
5を出力する。
【0021】Javaクラスファイルは、Java仮想
マシン107へ入力される。Java仮想マシンは、J
avaクラスファイル内のバイトコードをデコードし
て、実行するインタプリタである。このJava仮想マ
シンは、インタプリタであるが、しかしこれはマイクロ
プロセッサまたはコンピュータのアーキテクチャ(例え
ば、ハードウェアには存在しないかもしれないマイクロ
プロセッサまたはコンピュータアーキテクチャ)をソフ
トウェアでエミュレートするので、通例、仮想マシンと
して参照される。
【0022】インタプリタは、以下のプロセスを繰り返
し実行することによってバイトコードプログラムを実行
することができる。 実行 − 現在のバイトコードの操作を実行する。 進行 − バイトコードポインタを次のバイトコードに
進める。 ディスパッチ − バイトコードポインタにおけるバイ
トコードをフェッチして、そのバイトコードを実行する
こと(implementation)(すなわち、実行ステップ)へ
ジャンプする。 実行ステップは、特定のバイトコードの操作を実行する
(implement)。進行ステップは、バイトコードポイン
タが次のバイトコードを指すように、そのポインタをイ
ンクリメントする。最後に、ディスパッチステップは、
現在のバイトコードポインタのところの(at)バイトコ
ードをフェッチして、そのバイトコードを実行する固有
のマシンコードの一片へジャンプする。バイトコードの
ための、実行−進行−ディスパッチシーケンスの実行
は、一般に「インタープリテーションサイクル(implem
entation cycle)」と呼ばれる。
【0023】好ましい実施例においては、インタプリタ
は前述のインタープリテーションサイクルを利用するけ
れども、本発明との関連において他の多くのインタープ
リテーションサイクルを利用できる。例えば、インタプ
リタは、ディスパッチ−実行−進行のインタプリテーシ
ョンサイクルを実行することができ、または、各サイク
ルにおいてより多くの若しくはより少ないステップがあ
ってもよい。したがって、この発明は、ここで記載され
た実施例に限られない。
【0024】Java仮想マシンの実現および生成 Java仮想マシンのための仮想マシン命令は、スタッ
クベースの命令を含む。このため、仮想マシンのオペラ
ンドうちの1つ以上は、オペランドスタックに格納され
ることがある。オペランドスタックを説明する前に、一
般的なスタックについて議論することが利益があるかも
しれない。
【0025】図4(a)は、データ203を格納するス
タック201を示している。このスタックを用いて、デ
ータ値をスタックの最上位(トップ)に「プッシュ」す
ることができる。代わりに、データ値を「ポップ」して
スタックの最上位から離す(off)ことができる。概念
的には、スタックの最上位だけがアクセスされることが
でき、それで、そのスタックは、最も最近にスタックに
プッシュされたデータが、ポップされスタックから離れ
るべき最初のデータであることを意味するファーストイ
ン・ファーストアウト(FIFO)のデータ構造であ
る、として知られている。スタックポインタ(SP)2
05は、スタック201の最上位を差し指す。このた
め、SPは、データ値がスタック201上にプッシュさ
れるとき、そしてポップされスタックから離されるとき
変化する。簡単のために、ここに記載されたスタック
は、メモリ内で上方に成長するように示され、また記載
されているが、しかしながら、これは単なるグラフィカ
ルな表現であって、当業者は、スタックが他の多くの方
法(例えば、メモリの下の方へ成長する方法)で示さ
れ、且つ/または実現されることができることを容易に
認識する。
【0026】Java仮想マシンのための仮想マシン命
令は、図4(a)に示されたスタックに類似したオペラ
ンドスタックを実現することを求める。より具体的に
は、Java仮想マシンにおけるオペランドスタック
は、実行中にバイトコードによる使用のためにオペラン
ドを格納するように利用される。以下は、どのようにオ
ペランドスタックがJava仮想マシンにおいて利用さ
れるかを示すために助けとなり得る一例である。
【0027】Javaソースコードが、ステイトメント
X:=A+Bを含むとし、ここで、X、A、Bは整数変
数である。このステイトメントは、以下のバイトコード
にコンパイルされる。 1. ILOAD A 2. ILOAD B 3. IADD 4. ISTORE X 各バイトコードに先行する「I」は、このバイトコード
によって操作されたデータタイプが整数であることを示
している。倍長(long)整数には「L」、単精度浮動少
数点数(single-precision floating point)には
「F」、倍精度浮動小数点数(double-precision float
ing point)には「D」によって命名される他のデータ
タイプのための対応するバイトコードが存在する。Ja
va仮想マシンにおいては、整数データタイプは32ビ
ットであり、倍長整数データタイプは64ビットであ
り、単精度浮動小数点数データタイプは32ビットであ
り、倍精度浮動小数点数データタイプは64ビットであ
る。以下に記述されるように、仮想マシンにおけるこれ
らのデータタイプのサイズは、仮想マシンをインプリメ
ントするコンピュータシステムにおけるサイズと同じで
はない場合もある(例えば、IBMパーソナルコンピュ
ータにおける通常の整数データタイプは、16ビットで
あり、64ビットの倍長整数のための直接のサポートは
ない)、そこで、Java仮想マシン命令と、仮想マシ
ンがインプリメントされているコンピュータに指図する
固有のマシン命令とを区別することが重要である。
【0028】最初のILOADバイトコードは、変数A
の値をオペランドスタック上にロードする。同様に、2
番目のILOADバイトコードは、変数Bの値をオペラ
ンドスタック上にロードする。バイトコードIADD
は、2つのデータ値をポップしてオペランドスタックか
ら離して、この2つの値を加えて、その和をオペランド
スタック上にプッシュする。予測されるように、IST
OREバイトコードは、データ値、この例では和の値、
をポップしてオペランドスタックから離し、それを変数
Xに格納する。この単純な例示は、Javaバイトコー
ドがどのようにオペランドスタックを使うかを概念的に
示している。
【0029】本発明のいくつかの実施例は、データ値が
オペランドスタックにプッシュされるときにしばしば、
引き続いて(オペランドスタックの最上位を修正しない
介在(intervening)バイトコードを持ち、または持た
ずに)その値がポップされオペランドスタックから離れ
るという事実を利点に持つ。典型的には、オペランドス
タックはメモリにインプリメントされるが、本発明のい
くつかの実施例の場合には、オペランドスタックの最上
位に関する値は、1つ以上のレジスタに格納される。レ
ジスタはメモリより速いアクセス時間を有するので、オ
ペランドスタックの最上位のためのアクセス時間は縮小
され、インタープリット(解釈)されたプログラムのよ
り高速なインタープリテーションに帰着する。
【0030】図4(b)は、データ303を格納するオ
ペランドスタック301を示している。データ303
は、レジスタ305に格納されたオペランドスタックの
最上位のためのデータ値と、メモリ上のデータ値との両
方を含む。スタックポインタ’(SP’)307は、オ
ペランドスタック301の最上位の概念的には直後のデ
ータタイプを差し指す。この議論は、単一のオペランド
スタックに焦点を当てているることに注目すべきであ
る。しかしながら、本発明に従ってインプリメントされ
ることができる(例えば、異なるスレッドおよびメソッ
ドのための)単一のコンピュータシステムに複数のオペ
ランドスタックがあることがある。
【0031】伝統的なコンピュータシステムでは、典型
的には、あるレジスタは特定のデータタイプを格納する
ためにより適合している状態で、多くの異なったレジス
タを有する。例えば、コンピュータは32ビット幅のレ
ジスタ、および64ビット幅のレジスタを有することが
できる。仮想的なコンピュータ上の整数が32ビット値
であり、一方、倍長整数が64ビット値であるならば、
そのデータ値のサイズを満たすレジスタにそのデータを
格納したことがより効率的である。さらに、コンピュー
タシステムは、単精度浮動小数点数または倍精度浮動小
数点数のような特定のデータタイプを格納するように設
計されたレジスタを有することがある。
【0032】より具体的には、IBMパーソナルコンピ
ュータ(Intel x86アーキテクチャ)は、多く
の異なったタイプのレジスタを含む。32ビットレジス
タ(例えば、EAX)、および浮動小数点数レジスタ
(例えば、F(0))がある。加えて、Intel x
86マイクロプロセッサのデータタイプのいくつかは、
Java仮想マシンにおける対応物とは異なったサイズ
を有する。例えば、通常の整数データタイプは、Int
el 80386マイクロプロセッサにおいて、16ビ
ット幅であり、また倍長整数データタイプは、32ビッ
ト幅である。これらのデータタイプは、Java仮想マ
シンの対応物の半分のサイズである。そのため、Jav
a仮想マシンがx86マシン上にインプリメントされて
いる好ましい実施例においては、Java仮想マシンに
おける整数は、x86マシンにおける倍長整数と同じサ
イズ(すなわち、両方とも32ビット値)である。
【0033】以前に述べたように、命令が仮想マシンの
命令、または、固有のマシン命令のどちらかであること
を心にとどめておくことは重要である。Java仮想マ
シン命令は、アセンブリ言語と似ていて、幸いなこと
に、簡単に識別可能な違いがある。Java仮想マシン
のために記述されたバイトコードにおいては、そのバイ
トコードが関係する(pertain)データタイプがその命
令に先行する(例えば、ISTOREにおいて、「I」
が整数を表わす)。これはデータタイプが命令に引き続
く(例えば、POPLにおいて「L」は倍長整数を表わ
す)x86マイクロプロセッサのためのアセンブリコー
ド(または、固有のマシン命令)とは際立って対照的で
ある。このことは、本発明のすべての実施例に対して真
実ではなさそうだけれども、この区別が、ここで記述さ
れた好ましい実施例の読者の理解を助けることが望まれ
る。
【0034】図4(b)に手短に戻ると、たった1つの
レジスタのみが示され、またオペランドスタック301
が異なったデータタイプを格納するために利用されるこ
とができるので、1つの問題があり、そのため、オペラ
ンドスタックの最上位のための値を格納するために利用
可能な異なったレジスタを有することが望ましい。図4
(c)は、x86マイクロプロセッサ上にインプリメン
トされたJava仮想マシンのためのオペランドスタッ
ク401を示している。オペランドスタック401は、
レジスタ405、407、または409の1つに格納さ
れたオペランドスタックの最上位のための値と、メモリ
内のデータ値との両方を含むデータ403を格納する。
好ましい実施例においては、レジスタ405は、オペラ
ンドスタックの最上位のための仮想マシン整数を格納す
るための32ビットレジスタ(EAX)である。レジス
タ407は、オペランドスタックの最上位のための仮想
マシン倍長整数を格納するための2つの32ビットレジ
スタ(EDX、EAX)の組合わせである。レジスタ4
09は、単精度浮動小数点数と倍精度浮動小数点数との
両方を格納するための64ビット浮動小数点数レジスタ
(F(0))である。特定のレジスタの指定(designat
ion)は、本発明をより良く図示するように設けられ、
しかしながら、本発明は、いかなる特定のレジスタおよ
びコンピュータアーキテクチャに限定されないことを理
解すべきである。
【0035】スタックポインタ’(SP’)411は、
概念的にはオペランドスタック401の最上位の直後を
差し指している。いま、オペランドスタックの最上位の
ための値を格納していることができる1つを越えるレジ
スタがあるとすると、どのレジスタ(register)または
レジスタ達(registers)がこの値を格納したかを知る
ことが望ましい。1つの技法は、オペランドスタックの
最上位上の値のデータタイプを示す値をメモリ内にまた
はレジスタ内に格納することであろう。このことによっ
て、この値は、オペランドスタックの最上位を格納する
正しいレジスタまたはレジスタ達を決定するためにアク
セスされ得るであろう。
【0036】この技法は作用する場合もあるけれども、
その技法を不満足にするかもしれないいくつかの重要な
欠点がある。例えば、オペランドスタックの最上位のデ
ータタイプを特別に決定することは、オペランドスタッ
クの最上位を格納するためにレジスタを利用するという
パフォーマンスの向上を相殺することもある。
【0037】本発明のいくつかの実施例の場合、インタ
プリタは、複数の状態において動作する。各状態は、1
つ以上のレジスタに格納されたオペランドスタックの最
上位の値のデータタイプを表わしている。その状態は、
時間における任意の点においてインタプリタの本来備わ
っている(inherently)特質であり、このため、オペラ
ンドスタックの最上位のデータタイプを決定することは
必要とされない。
【0038】好ましい実施例においては、インタプリタ
は以下のような5つの異なった状態の1つにあり得る。 ITOS − オペランドスタックの最上位(TOS)と
して(for)整数がレジスタ(register(s))に格納され
る LTOS − TOSとして倍長整数がレジスタ(regist
er(s))に格納される FTOS − TOSとして単精度浮動小数点数がレジス
タ(register(s))に格納される DTOS − TOSとして倍精度浮動小数点数がレジス
タ(register(s))に格納される VTOS − TOSが現在のところレジスタ(register
(s))に格納されていないことを示すvoid TOS 上記のように、VTOS状態は他の状態とは異なり、な
ぜならオペランドスタックの最上位が現在のところどの
レジスタにも格納されていないことを示すからである。
データ値がオペランドスタックにプッシュされ、ポップ
され離されるとき、インタプリタはVTOS状態と他の
状態の1つとの間を交互に変動することが明らかである
べきである。
【0039】インタプリタの異なった状態を管理するこ
とを手助けする(assist)ために、図5に示されるテン
プレート表(データ構造)501が、本発明のいくつか
の実施例において利用される。テンプレート表501
は、バイトコード503によってインデックス付けさ
れ、フィールド505、507、509を含む表であ
る。テンプレート表501は、200を越える(over)
レコード(例えば、各バイトコードのために1つ)を有
することができるけれども、本発明を最も良く表示する
と考えられる部分集合のみが示されている。
【0040】仮想マシン命令(または、バイトコード)
が、テンプレート表501をインデックス付けするため
に利用される。フィールド505は、仮想マシン命令5
03が実行される前の、期待されているインタプリタの
状態を格納する。例えば、ISTOREバイトコード
(すなわち、オペランドスタックの最上位上に整数を格
納する)が実行される前に、1つ以上のレジスタにオペ
ランドスタックの最上位のための整数があることを示し
ているITOS状態にインタプリタがある、ことが期待
されている。インタプリタが期待した状態に実行中にい
ないならば、それは必ずしもエラーを示すのではない
が、しかし、以下に詳しく記述されるように、本発明の
好ましい実施例は、バイトコード列において多くのエラ
ーを検出できる。
【0041】フィールド507は、仮想マシン命令50
3を実行するためにインタプリタのためのコンピュータ
コード(または、「テンプレート」、そしてこのため
「テンプレート表」)を生成する関数へのポインタを格
納する。好ましい実施例においては、関数の名前はバイ
トコードの名前と同一であり、その関数は、C++プログ
ラミング言語で書かれている。
【0042】最後に、フィールド509は、仮想マシン
命令503を実行した後のインタプリタの現在の状態を
格納する。例えば、ISTOREバイトコードが実行さ
れた後は、1つ以上のレジスタに格納された整数はポッ
プされオペランドスタックから離されるので、インタプ
リタの現在の状態はVTOSである。
【0043】好ましい実施例においては、フィールド5
05は、仮想マシン命令が実行される前の、期待されて
いるインタプリタの状態を格納して、フィールド509
は、仮想マシン命令が実行された後の、インタプリタの
現在の状態を格納する。しかしながら、他の実施例にお
いては、フィールド505は、フィールド507に明示
されているテンプレート関数が実行される前の、期待さ
れているインタプリタの状態を格納して、フィールド5
09は、このテンプレート関数が実行された後の、イン
タプリタの現在の状態を格納する。言い換えると、イン
タプリタの状態は、仮想マシン命令の代わりにテンプレ
ート関数に基づくことができる。
【0044】テンプレート表について説明してきたが、
しかし、インタプリタの生成中に、他の表(「ディスパ
ッチ表」)が、テンプレート表と結合して利用される。
図6は、仮想マシン命令603によってインデックス付
けされ、フィールド605、607、609、611、
および613を含むディスパッチ表601の並びを示
す。フィールド605は、ITOS状態のためのインデ
ックス付けされた仮想マシン命令を実行するインタプリ
タにおけるロケーション(位置)またはアドレスへのポ
インタを格納する。同様に、フィールド607、60
9、611、および613は、それぞれ、LTOS状
態、FTOS状態、DTOS状態、およびVTOS状態
のためのインデックス付けされた仮想マシン命令を実行
するインタプリタ内のロケーションまたはアドレスへの
ポインタを格納する。このため、各フィールドは、イン
タプリタの状態に関連付けられている。フィールドの値
は、生成されたインタプリタ内部へのポインタであるか
ら、表示されていない。
【0045】インタプリタは、典型的にはソフトウェア
プログラム自身であることを思い出すと、ディスパッチ
表は、インタプリタプログラムのコンピュータコード内
の異なるロケーションへのジャンプ表である。言い換え
ると、実行されるべき次のバイトコードが、一旦、フェ
ッチされると、インタプリタは、次のバイトコード(イ
ンデックスとして利用された)と、ジャンプのロケーシ
ョンのためのフィールド605、607、609、61
1、および613のうちの1つを明示するインタプリタ
の現在の状態とによって明示されたディスパッチ表にお
いて指定されたロケーションへジャンプする。このよう
に、インタプリタのプログラムカウンタは、ディスパッ
チ表に明示されたアドレスへセットされる。好ましい実
施例においては、ディスパッチ表601は、各インタプ
リタの状態ために1つの、単一次元の表の5つとして実
現されている。
【0046】テンプレート表およびディスパッチ表は、
1つの表(または、それについては2つを越える表)と
して実現されることができるのは明らかである。しかし
ながら、好ましい実施例においては、テンプレート表お
よびディスパッチ表は、別個の表であり、というのは、
テンプレート表は、インタプリタの生成中に単独で利用
される場合があり、したがって、インタープリタが生成
された後に処分されることがある。ディスパッチ表は、
インタープリタ生成中に生成され、または、値が埋めら
れて、そして、インタプリタの実行中に有効に利用され
る。これらにもかかわらず、これらの表における情報
は、当業者に知られている多くのデータ構造において多
くの方法で実現されることができる。
【0047】さて、テンプレート表およびディスパッチ
表を説明してきたので、どのようにインタプリタが生成
されるかを記述することは適切であるかもしれない。図
7は、インタプリタを生成するプロセスを示している。
一般的に、そのプロセスは、すべての仮想マシン命令お
よびインタプリタの状態の組み合わせにわたって循環す
ることによって、インタプリタを生成する。これは、入
れ子にされた(nested)ループ、単一ループ、または他
の制御構造を用いて実現されることができる。好適な実
施の形態においては、入れ子にされたループが利用され
る。
【0048】ステップ701では、コンピュータシステ
ムは、(例えば、仮想マシン命令にわたるループを通し
て1回繰り返すことによって)仮想マシン命令を選択す
る。システムは、インタプリタの状態をステップ703
において選択する。一旦、仮想マシン命令およびインタ
プリタの状態が選択されると、図7における残りのプロ
セスは、インタプリタが、選択された状態に現在のとこ
ろいるとき、選択された仮想マシン命令を扱う、インタ
プリタのためのコンピュータコードを生成する。図面
は、例示の目的のために本発明の実施例のための流れ図
を示しているけれど、これはステップの特定の順序また
は組み合わせを意味するものではない。一般的に、発明
の範囲をはずれることなく、ステップは、順序を変えら
れ、組み合わされ、または削除されることができる。
【0049】ステップ705においては、システムは、
選択された仮想マシン命令およびインタプリタの状態が
合法(legal)であるかを決定する。ある実施例におい
ては、これは、テンプレート表(図5を見よ)を利用し
て、選択されたバイトコードに対するインタプリタの期
待された状態を決定することによって達成される。期待
された状態が選択された状態と同じならば、そのとき、
選択された仮想マシン命令および状態の組み合わせは合
法である。
【0050】期待された状態が、選択された状態と異な
るとしても、これは、この組み合わせが非合法(illega
l)であることを必ずしも意味しない。代わりに、シス
テムは、選択された状態から期待された状態への(オペ
ランドスタックを破損する(corrupt)ことがないこと
を意味する)合法的な方法があるかどうかを決定する。
例えば、期待された状態がITOSであり、また選択さ
れた状態がVTOSであれば、インタプリタは、メモリ
に格納されているオペランドスタック内の最上位データ
値を1つ以上のレジスタ内に移動する(例えば、SP’
で指し示されたデータ値をレジスタに格納して、その
後、SP’をデクレメントする)ことによって、ITO
S状態に置かれることができる。他の例として、期待さ
れた状態がITOSであり、また選択された状態がDT
OSであるならば、オペランドスタックの最上位が現在
のところ倍精度浮動小数点数であるので、インタプリタ
をITOS状態に置くための合法的な方法がない。
【0051】一般的に、VTOS状態から任意の他の状
態に移り、または、任意の他の状態からVTOSへ移る
ことは合法である。その理由は、インタプリタ状態のこ
のような遷移(shift)は、典型的には、メモリから1
つ以上のレジスタへ、または、その逆にデータ値を移動
することを含むからである。
【0052】選択された仮想マシン命令およびインタプ
リタ状態が合法であるなら、システムはステップ707
においてプロローグのコンピュータコードを生成するこ
とができる。プロローグのコンピュータコードは、選択
された仮想マシン命令を実行する前に、都合よく生成さ
れる任意のコードである。一般的に、プロローグは、選
択された仮想マシン命令および選択されたインタプリタ
状態に依存する場合がある。例えば、(選択された仮想
マシン命令のための)インタプリタの期待された状態
が、選択されたインタプリタ状態と異なるならば、プロ
ローグは、インタプリタを期待された状態に置くための
コンピュータコードを含むことができる。インタプリタ
の期待された状態および選択された状態が同じであれ
ば、プロローグのコンピュータコードを生成する必要は
ない場合もある。
【0053】ステップ709において、インタプリタが
選択された仮想マシン命令を実行するようにコンピュー
タコードを生成するために、システムは、選択された仮
想マシン命令のためのテンプレート関数を呼び出す。好
ましい実施例においては、図5で示されたテンプレート
表を選択された仮想マシン命令を用いてインデックス付
けすることによってテンプレート関数が呼び出される。
次に、そのテンプレート関数(または、その関数のため
のアドレス)へのポインタを格納するフィールド、フィ
ールド507がアクセスされ、そのテンプレート関数が
呼び出される。
【0054】テンプレート関数は、選択された仮想マシ
ン命令を実行するためのコンピュータコードを生成す
る。テンプレート関数の例を少し説明することは役に立
つであろう。前に述べたように、好ましい実施例におい
ては、テンプレート関数は、x86マイクロプロセッサ
のためのC++やJavaプログラミング言語で書かれて
いる。以下のものが、バイトコードILOADのための
テンプレート関数である。 ILOADメソッドは、Java仮想マシンの場合には
(for)TEMPLATE_TABLEと呼ばれるクラ
スに対して定義される。ILOADバイトコードは、オ
ペランドスタックに整数をプッシュするので、同じ名前
によるテンプレート関数は、整数であるパラメータを有
する。MOVLメソッドは、Nの値をレジスタに置くこ
とによってオペランドスタックにNの値をプッシュする
ASSEMBLERオブジェクトのためのC++関数であ
る。MOVLは、Java仮想マシンでは整数であるが
x86マイクロプロセッサでは倍長整数である32ビッ
ト値を移すx86アセンブリ言語命令に対応することを
思い出そう。
【0055】他の例として、以下のものは、バイトコー
ドIADDのためのテンプレート関数である。 IADDメソッドは、Java仮想マシンの場合には
(for)TEMPLATE_TABLEと呼ばれるクラ
スに対して定義される。IADDバイトコードのための
期待される状態はITOSであり、そのため、レジスタ
(この例ではEAX)に格納されているオペランドスタ
ックの最上位に整数があるべきである。まず、SP’ポ
インタ(これはx86マイクロプロセッサでのESPポ
インタであることができる)によって指し示される値
は、POPLメソッドを利用してポップされスタックか
ら離される。今、われわれが説明しているスタックは、
目的の(target)マイクロプロセッサ上のメモリに格納
されている固有のスタック(図4(b)および図4
(c)の左側を見よ)であることを理解するのは重要で
ある。このため、SP’ポインタによって指し示される
データ値は、レジスタEDXに移され、次いで、SP’
がデクレメントされる。
【0056】この時点で、オペランドスタックの最上位
は、レジスタEAXに格納されて、オペランドスタック
の次に高位のデータ値は、EDXに格納される。ADD
Lメソッドは、EAXおよびEDXに格納されている値
を加え、その総和をEAXに格納するアセンブリ言語命
令に対応する。すると、EAXレジスタは、オペランド
スタックの最上位として(for)適切なレジスタに所望
の総和を格納して、これは、選択された関数IADDの
実行の後に、図5のテンプレート表に明示されているよ
うに、インタプリタがITOS状態にあることを意味し
ている。
【0057】上で説明されたように、好ましい実施例に
おいては、オブジェクトは、インタプリタにおいて利用
される各アセンブリ言語命令のためのメソッドを含むア
センブラのために具体例を上げて示される。単純にする
ため、メソッドの名前は、アセンブリ言語命令と同じで
ある。アセンブラオブジェクトを使うことは、インタプ
リタの生成のためには有益であることが見いだされ、な
ぜなら、特別なアセンブラが利用されることを必要とし
ないからである。ある実施例においては、テンプレート
関数は、所望なコンピュータアーキテクチャのためのア
センブリ言語で書かれることができる。
【0058】ステップ711では、システムは、エピロ
ーグのコンピュータコードを生成する。エピローグは、
次の仮想マシン命令を実行するためにインタプリタを設
定するコンピュータコードである。このため、エピロー
グは、前に説明されたインタプリタの進行ステップおよ
びディスパッチステップを実行する。
【0059】最初に、プロローグのコンピュータコード
は、次の仮想マシン命令をフェッチする。選択された仮
想マシン命令の実行の後の現在のインタプリタの状態が
(例えば、図5のテンプレート表のフィールド509か
ら)わかるので、次の仮想マシン命令を実行するように
インタプリタ内の位置(ロケーション)を決定するため
に、次の仮想マシン命令を図6のディスパッチ表へのイ
ンデックス(またはオフセット)として利用できる。エ
ピローグ内のコンピュータコードは、図8を参照して、
より詳細に説明されるが、しかし一般的には、エピロー
グは、選択された仮想マシンおよび現在のインタープリ
タの状態に依存する。
【0060】システムは、ステップ701においてイン
タプリタのためのコンピュータコードを生成するため
に、仮想マシン命令/インタプリタ状態がもっとあるか
どうかを決定する。もしあれば、プロセスは、ステップ
701に戻り、そして別の繰り返し(iteration)が実
行される。
【0061】ステップ705に戻って、選択された仮想
マシン命令およびインタプリタ状態が非合法であると決
定されたならば、システムは、ステップ715において
エラーを処理するためのコンピュータコードを生成でき
る。一般的に言って、エラーは非合法のバイトコードシ
ーケンスである。好ましい実施例では、このエラーが生
じたことをユーザに知らせる命令へジャンプするコンピ
ュータコードが、インタプリタのために生成される。こ
の方法で検出されたエラーの数は、バイトコード検証器
(ヴェリファイア、verifier)によって検出されたエラ
ーほど多くはないけれど、バイトコード検証器を使うこ
とが要求されず、または、不可能であるならば、この方
法は特に望ましい場合がある。ある実施例では、エラー
をチェックすること及びステップ707およびステップ
715を処理することは、省略されることができる。
【0062】図8は、インタプリタのためのエピローグ
のコンピュータコードを生成するプロセスを示してい
る。エピローグのコンピュータコードは、図7のステッ
プ711において生成されるが、しかしエピローグのコ
ンピュータコードを生成する特定の実施例は、図8を参
照して説明される。ステップ801においては、次の仮
想マシン命令をフェッチするコンピュータコードが生成
される。次の仮想マシン命令は、現在のバイトコードへ
次のバイトコードポインタをインクリメントすることに
よって、またそれからそのバイトコードポインタによっ
て指し示され、且つ参照されたバイトコードをフェッチ
することによって、フェッチされることができる。仮想
マシン命令のサイズは、Javaバイトコードにおける
ように変化するので、好ましい実施例においては、各バ
イトコードのサイズを格納するために表が利用されて、
バイトコードポインタは、バイトコードを指し示すため
に、表内のサイズ分だけ(by)インクリメントされるこ
とができる。
【0063】一旦、次の仮想マシン命令がフェッチされ
ると、システムは、ステップ803において、ディスパ
ッチ表へのオフセットを計算するためのコンピュータコ
ードを生成する。そのオフセットは、図6のディスパッ
チ表の開始アドレスへ加えられるとき、次のバイトコー
ドおよび現在のインタプリタ状態によってインデックス
付けされたフィールドに帰着する数である。好ましい実
施例においては、ディスパッチ表は、各インタプリタ状
態に対して一つである、単一次元の5つの表(または補
助表)である。インタプリタの現在の状態は、どの補助
表(subtable)を使うかを決定する。補助表における各
フィールドのサイズは、固定されたサイズ(例えば、4
バイト)であることができ、そのため、オフセットを計
算することは、次のバイトコード値を固定サイズ倍する
ことを含む。ディスパッチ表が単一の2次元表である実
施例においては、2次元配列にオフセットを計算する技
術分野における当業者によく知られている多くの技法
が、利用されることができる。さらに、この発明は表に
限られるのではなく、リンクされたリスト、およびハッ
シュ表、等を含むような任意の数のデータ構造を利用し
て実現されることができる。
【0064】ステップ805においては、システムは、
ディスパッチ表内のオフセットのところにあるフィール
ドによって明示されている、インタプリタにおける位置
(ロケーション)またはアドレスへジャンプするための
コンピュータコードを生成する。ディスパッチ表は、イ
ンタプリタ自身のコンピュータコード内にアドレスを格
納するジャンプ表である。インタープリットしている中
に、エピローグのコンピュータコードは、そのインタプ
リタの進行ステップおよびディスパッチステップを実行
する。しかしながら、他の実施例は、プロローグに進行
ステップを置き、エピローグにディスパッチステップを
置くことができる。したがって、この発明は、ここで説
明された特定の実現されたものに限定されない。
【0065】上記のものは、本発明の好ましい実施例を
記述した。概念的には、インタプリタ状態、ITOS、
LTOS、FTOS、DTOS、VTOSの各々に対し
て1つある、生成された5つの別個のインタプリタがあ
ると考えることができる。しかしながら、実際には、仮
想マシン命令/インタプリタ状態の組み合わせの多く
は、非合法であり、それで、5つの別のインタプリタは
生成されない。さらに、仮想マシン命令を実行するコン
ピュータコードは共有されることができ、それで、本発
明に従うインタプリタは、伝統的なインタプリタよりも
サイズがずっと大きくなることはない。仮想マシン命令
を実行するコンピュータコードがどのように共有される
ことができるかをよりはっきりと見るために、見本のバ
イトコードのためのコンピュータコードがインタプリタ
のためにどのように生成されることができるかを説明す
ることは、読者に役に立つかもしれない。
【0066】例 図7を参照して説明されたように、可能な仮想マシン命
令およびインタプリタ状態の組み合わせ(combinatio
n)の間を次々と(through)循環し、またはループする
ことによって、インタプリタを生成することができる。
インタプリタが生成されるとき、異なった仮想マシン命
令およびインタプリタ状態の結合(combination)のた
めのエントリポイントまたはジャンプポイントを保持す
るためにインタプリタの実行中にディスパッチ表が利用
された状態で、各仮想マシン命令のためのコンピュータ
コードのセクションが生成される。したがって、生成さ
れたインタプリタは、ディスパッチ表、および異なる仮
想マシン命令を実行する(またはエラーを処理する)一
連のコンピュータコードのセクションを含むことができ
る。
【0067】この例の場合、IADDバイトコードを実
行するコンピュータコードが、どのように生成されるか
が記述される。図9は、IADDバイトコードに関連す
る(pertain)ディスパッチ表901の部分を示してい
る。ディスパッチ表の構造は、図6を参照して説明され
たものと同じである。要するに、ディスパッチ表は、仮
想マシン命令903によってインデックス付けされ、ま
たインタプリタの各状態に対して1フィールドである、
フィールド905、907、909、911、および9
13を含む。
【0068】IADDバイトコードのための10進数の
値は、括弧内に示されているように96である。インタ
プリタがITOS状態ならば、ポインタAIは、IAD
Dバイトコードを実行するインタプリタにおける位置
(ロケーション)またはアドレスを差し指す。同様に、
インタプリタが、それぞれ、LTOS、FTOS、DT
OS、VTOSの状態にあるとき、AL、AF、AD、AV
は、IADDバイトコードを実行するインタプリタにお
ける位置(ロケーション)またはアドレスを差し指す。
【0069】ディスパッチ表901におけるポインタ
は、インタプリタのために生成されたコンピュータコー
ドの一連のセクション内のアドレスを差し指す。図10
は、インタプリタのために生成されたコンピュータコー
ドの一連のセクションを示す。コンピュータコードの各
セクションは、特定のバイトコードを実行する。セクシ
ョン1003は、IADDバイトコードの実行のための
コンピュータコードを含む。示されているように、セク
ション1003は、2つのPOPL命令と1つのADD
L命令を含む。これらの命令は、x86マイクロプロセ
ッサのためのアセンブリ言語(または、固有のマシン命
令)であり、そして以下のように生成された。
【0070】インタプリタ生成中に、インタプリタがI
TOSまたはVTOS状態にあるとき、IADDバイト
を実行するために、アセンブリ言語の命令の以下のセク
ションが生成されることができる。
【0071】 ITOS VTOS POPL EDX POPL EAX ADDL EAX,EDX POPL EDX <DISPATCH/ADVANCE> ADDL EAX,EDX <DISPATCH/ADVANCE>。
【0072】簡単のために、ディスパッチステップおよ
び進行ステップを実行するコンピュータコードは、明示
的に示されていない。示されるように、コンピュータコ
ードの2つのセクション間の唯一の違いは、インタプリ
タがVTOS状態にあるとき、付加的な命令があること
である。POPL EAXは値をポップし固有のマシン
のスタックから離して、それをレジスタEAXに置く。
この命令は、(図7のステップ707を見よ)IADD
バイトコードのために期待された状態であるITOSへ
インタプリタがVTOS状態から遷移する(シフトす
る、shift)ために、プロローグとして生成された。
【0073】POPL EDX命令およびADDL命令
は、テンプレート表(前の例と図7のステップ709を
見よ)においてアクセスされたテンプレート関数IAD
D()によって生成された。さらに、ディスパッチステ
ップや進行ステップを実現するコンピュータコードは、
エピローグのコンピュータコード(図7のステップ71
1を見よ)である。コードの各セクションは、最初のア
センブリ言語命令のみによって異なるので、コンピュー
タコードの単一のセクションにアクセスするためにポイ
ンタが利用されることができる。
【0074】故に、インタプリタがITOS状態または
VTOS状態のいずれかにあるとき、セクション100
3は、IADDバイトコードを実行するためのコンピュ
ータコードを含んでいる。図10に示されるように、図
9のディスパッチ表901からのポインタAVは、セク
ション1003の最初の命令を差し指し、このため、V
TOS状態からITOS状態へインタプリタを置く(pu
t)初期命令が実行される。インタプリタがITOS状
態にあるので、ディスパッチ表からのポインタAIは、
セクション1003における2番目の命令を差し指す。
示されているように、インタプリタがVTOS状態また
はITOS状態にあろうとなかろうと、ポインタAI
よって明示されるコンピュータコードは、IADDバイ
トコードを実行するようにインタプリタに指示する。
【0075】ディスパッチ表901において、IADD
バイトコードに対するLTOS、FTOS、DTOS状
態は、そのバイトコードに対する非合法の状態を表わし
ている。故に、ポインタAL、AF、ADポインタは、エ
ラーを処理する図10におけるコンピュータコードのセ
クション1005を差し指す。セクション1005にお
けるコンピュータコードは、典型的には、インタプリタ
が非合法状態(図7のステップ715も見よ)に置かれ
たことをユーザに示している。簡単のために、エラーを
処理するコンピュータコードの1つのセクションが示さ
れているが、しかしながら、コンピュータコードの2以
上のセクション(または、エラーチェックが望まれてい
ないならば、なし)が利用されることができる。加え
て、仮想マシン命令の実行またはエラーを処理するコン
ピュータコードのセクションが、任意の順序に配置され
ることができる。
【0076】例を説明してきたが、図11に示されるよ
うに1つの実施例に従って、インタプリタを用いて仮想
マシン命令の実行するプロセスを説明することは役に立
つことがある。示されたプロセスは、ここで説明される
ように生成されたインタプリタにおいて仮想マシン命令
を実行するために利用されることができる。しかしなが
ら、そのプロセスは、他の方式において生成されたイン
タプリタを用いて利用されることができ、そのため、記
載されたインタプリタ生成が、インタプリタを実現する
ことを限定するものとして受け取られるべきではない。
【0077】ステップ1101において、コンピュータ
システムは、インタプリタを期待された状態に置き、こ
こで、期待された状態とは、選択された仮想マシン命令
が実行される前の、期待されるインタプリタの状態であ
る。他の実施例においては、期待された状態は、選択さ
れた仮想マシン命令を実行するインタプリタにおけるコ
ンピュータコード(例えば、テンプレート関数によって
生成されたコンピュータコード)が行われる前の、期待
されるそのインタプリタ状態である。ステップ1101
は、インタプリタの実行中に生じて、またインタプリタ
の生成中に図7のステップ707において生成されたプ
ロローグのコンピュータコードに対応する。システムが
期待された状態にあるならば、このステップは、省略さ
れることができる。
【0078】ステップ1103において、システムは、
選択された仮想マシン命令を実行する。このステップは
インタプリタ実行中に生じ、インタプリタの生成中に図
7のステップ709においてテンプレート関数によって
生成されたコンピュータコードに対応する。
【0079】一旦、選択された仮想マシン命令が実行さ
れたら、システムは、ステップ1105において次の仮
想マシン命令をフェッチする。次の仮想マシン命令を利
用して、システムは、ステップ1107においてディス
パッチ表へのオフセットを計算する。選択された仮想マ
シン命令が実行された後でのインタプリタの現在の状態
は知られている。したがって、次の仮想マシン命令と共
に現在の状態が利用され、次の仮想マシン命令を実行す
るためにインタプリタにおける位置を明示するディスパ
ッチ表へのオフセットを計算することができる。各イン
タプリタ状態に対して1つある、多重の単一次元の補助
表として、ディスパッチ表が実現される好ましい実施例
においては、現在の状態は、補助表を明示して、またオ
フセットは、次の仮想マシン命令を利用して(例えば、
仮想マシン命令*固定サイズ)計算される。
【0080】ステップ1109において、システムはデ
ィスパッチ表におけるオフセットのところのフィールド
に格納されたインタプリタにおけるアドレスまたは位置
(ロケーション)にジャンプする。フィールドは、次の
仮想マシン命令を実行するインタプリタの位置(ロケー
ション)へのポインタを含むことができる。このため、
そのジャンプをすると、次の仮想マシン命令に対してス
テップ1101へシステムが戻る。
【0081】ステップ1105、1107、1109
は、インタプリタの実行中に生じて、またインタプリタ
の生成中に図7のステップ711においてエピローグの
コンピュータコードによって生成されたコンピュータコ
ードに対応する。図11で示された発明の実施例の場
合、明示的なエラーチェックは要求されていないことを
注目すべきである。その代わりに、エラーがあったら、
システムは、ステップ1109においてエラーを処理す
るためのコンピュータコードにジャンプする。故に、エ
ラーをチェックすることは、効率に関して大きな影響な
しに達成されることができる。
【0082】結論 上記は、本発明の好ましい実施例の完全な記述である一
方で、様々な代替物、変形物、および均等物が使用され
ることができる。本発明は、上で記述された実施例に適
切な変形を成すことによって、同等に利用可能なものに
なることは明らかである。例えば、記述された実施例
は、Java仮想マシンをインタープリットするバイト
コードの効率を上昇することに関連しているが、しか
し、現在の発明の方針は、容易に他のシステムおよび言
語に適用されることができる。従って、上記の記載は、
等価物の全範囲とともに、書かれた特許請求の範囲(im
pendedclaims)の集まりおよび境界によって定義される
発明の範囲に限定してものとして受け取るべきではな
い。
【図面の簡単な説明】
【図1】図1は、本発明の実施例のソフトウェアを実行
するために利用されることができるコンピュータシステ
ムの例を示す概略図である。
【図2】図2は、図1のコンピュータシステムのシステ
ムブロック図である。
【図3】図3は、Javaソースコードプログラムがど
のように実行されるかを示す概念図である。
【図4】図4(a)は、スタックを示す概念図であり、
図4(b)は、本発明のオペランドスタックを示す概念
図であって、ここでオペランドスタックの最上位に関す
る値はレジスタに格納されている。図4(c)は、本発
明のオペランドスタックを示す概略図であり、ここでマ
ルチプルレジスタ、および異なったデータタイプを格納
するレジスタはオペランドスタックの最上位に関する値
を格納することができる。
【図5】図5は、インタプリタ状態、およびテンプレー
ト関数を組織化するために、インタプリタ発生中に使用
されたテンプレート表図である。
【図6】図6は、インタプリタ実行中に生成されるディ
スパッチ表図であって、この図面は、インタプリタの実
行フローを指示するために利用された、インタプリタ内
のロケーションへのポインタを格納する。
【図7】図7は、1つ以上のレジスタに格納されるオペ
ランドスタックの最上位に関する値のデータタイプを示
すためにインタプリタの状態を利用しているインタプリ
タを生成するプロセス図である。
【図8】図8は、インタプリタの進行ステップおよびデ
ィスパッチステップを実行するエピローグのコンピュー
タコードを生成するプロセス図である。
【図9】図9は、バイトコードIADDを実行するため
の図6のディスパッチ表図の部分を示す概念図である。
【図10】図10は、仮想マシン命令を実行し、またエ
ラーを処理するインタプリタのコンピュータコードのセ
クションを示す概念図である。
【図11】図11は、本発明の実施例に従う、インタプ
リタを用いて仮想マシン命令を実行するプロセスを示す
プロセス図である。
【符号の説明】
1…コンピュータシステム、3…ディスプレイ、5…ス
クリーン、7…キャビネット、9…キーボード、11…
マウス、13、15…CD−ROMドライブ、51…中
央プロセッサ、53…システムメモリ、55…固定記憶
装置、57…リムーバブル記憶装置、59…ディスプレ
イアダプタ、61…サウンドカード、63…スピーカ、
65…ネットワークインタフェース、101…Java
ソースコード、103…バイトコードコンパイラ、10
5…Javaクラスファイル、107…Java仮想マ
シン、201、301、401…オペラントスタック、
203、303、403…データ、205、307、4
11…スタックポインタ(SP)、305、405、4
07、409…レジスタ 501…テンプレート表(データ構造)、503…バイ
トコード、505、507、509…フィールド、60
1…ディスパッチ表、603…仮想マシン命令、60
5、607、609、611、613…フィールド、9
01…ディスパッチ表、903…仮想マシン命令、90
5、907、909、911、913…フィールド、1
003、1005…セクション、

Claims (16)

    【特許請求の範囲】
  1. 【請求項1】 複数のレジスタを含むコンピュータシス
    テムにおいて最上位を有するオペランドスタックを含む
    インタプリタをインプリメントする方法であって、 該複数のレジスタのうちの少なくとも1つのレジスタに
    該オペランドスタックの最上位のための値を格納するス
    テップと、 該少なくとも1つのレジスタに格納されている該オペラ
    ンドスタックの最上位のための該値のデータタイプを示
    すために、インタプリタの状態を利用するステップと、
    を備える方法。
  2. 【請求項2】 該データタイプは、整数、倍長整数、単
    精度浮動小数点数、および倍精度浮動小数点数からなる
    群から選択される、請求項1に記載の方法。
  3. 【請求項3】 該データタイプは、該オペランドスタッ
    クの最上位のための該値が該少なくとも1つのレジスタ
    に現在のところ格納されていないことを示すボイドであ
    る、請求項1または2に記載の方法。
  4. 【請求項4】 該オペランドスタックの最上位を利用す
    る命令は、該少なくとも1つのレジスタをアクセスす
    る、請求項1〜3のいずれか1つに記載の方法。
  5. 【請求項5】 該複数のレジスタは、異なるデータタイ
    プの値を格納するために使用される少なくとも2つのレ
    ジスタを含む、請求項1〜4のいずれかに記載の方法。
  6. 【請求項6】 該インタプリタの状態によって示された
    データタイプは、該オペランドスタックの最上位を格納
    する該複数のレジスタうちの少なくとも1つを指定す
    る、請求項1〜5に記載の方法。
  7. 【請求項7】 該インタプリタはJava仮想マシンで
    ある、請求項1〜6のいずれかに記載の方法。
  8. 【請求項8】 複数のレジスタを含むコンピュータシス
    テムにおいて該少なくとも1つのレジスタにオペランド
    スタックの最上位のための値を格納するインタプリタを
    発生する方法であって、 該インタプリタによってインタープリットされるべき仮
    想マシン命令を選択するステップを備え、 該インタプリタの状態を選択するステップを備え、該イ
    ンタプリタの状態は、該複数のレジスタの少なくとも1
    つのレジスタに格納される該オペランドスタックの最上
    位のための値のデータタイプを示し、 該選択された状態が期待された状態と異なる場合、該選
    択された仮想マシン命令に対する該期待された状態に該
    インタプリタを置くための、インタプリタのためのコン
    ピュータコードを発生するステップを備え、 該インタプリタのためのコンピュータコードを生成し、
    該選択された仮想マシン命令を実行するステップを備え
    る、方法。
  9. 【請求項9】 該選択された仮想関数のための該期待さ
    れた状態は、仮想マシン命令を実行する前に該インタプ
    リタの期待された状態を格納する、仮想マシン命令によ
    ってインデックス付けされる表をアクセスすることによ
    って、獲得される、請求項8に記載の方法。
  10. 【請求項10】 該表は、該仮想マシン命令の実行後の
    該インタプリタの現在の状態を格納する、請求項9に記
    載の方法。
  11. 【請求項11】 該表は、該インタプリタのためのコン
    ピュータコードを発生し該仮想マシン命令を実行する関
    数へのポインタを格納する、請求項9に記載の方法。
  12. 【請求項12】 該選択された関数を実行する該インタ
    プリタのためのコンピュータコードは、該インタプリタ
    のためのコンピュータコードを発生し該仮想マシン関数
    を実行する関数へのポインタを格納する、仮想マシン命
    令によってインデックス付けされた表に指定された関数
    を呼ぶことによって発生される、請求項8〜11のいず
    れかに記載の方法。
  13. 【請求項13】 次の仮想マシンコードをフェッチする
    該インタプリタのためのコンピュータコードを発生する
    ステップを、更に備える請求項8〜12に記載の方法。
  14. 【請求項14】 該選択された仮想マシン命令の実行の
    後のインタプリタの現在の状態のための次の仮想マシン
    命令を実行する該インタプリタにおけるロケーションへ
    ジャンプするための該インタプリタのためのコンピュー
    タコードを発生するステップを、更に備える請求項8〜
    13のいずれかに記載の方法。
  15. 【請求項15】 該選択された仮想マシン命令が選択さ
    れた状態にとって非合法である場合、インタプリタにお
    ける該ロケーションはエラーを処理する、請求項8〜1
    4の何れかに記載の方法。
  16. 【請求項16】 該インタプリタはJava仮想マシン
    である、請求項8〜15に記載の方法。
JP10184702A 1997-06-30 1998-06-30 インタプリタ状態及びレジスタキャシングを利用するインタプリタの発生及び実現 Pending JPH1185534A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/885008 1997-06-30
US08/885,008 US6021273A (en) 1997-06-30 1997-06-30 Interpreter generation and implementation utilizing interpreter states and register caching

Publications (1)

Publication Number Publication Date
JPH1185534A true JPH1185534A (ja) 1999-03-30

Family

ID=25385926

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10184702A Pending JPH1185534A (ja) 1997-06-30 1998-06-30 インタプリタ状態及びレジスタキャシングを利用するインタプリタの発生及び実現

Country Status (3)

Country Link
US (2) US6021273A (ja)
EP (1) EP0889401A3 (ja)
JP (1) JPH1185534A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002169696A (ja) * 2000-12-04 2002-06-14 Mitsubishi Electric Corp データ処理装置
WO2003025743A1 (fr) * 2001-09-12 2003-03-27 Hitachi, Ltd. Systeme processeur ayant un accelerateur java
US7200741B1 (en) 1999-11-22 2007-04-03 Nec Electronics Corporation Microprocessor having main processor and co-processor

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6960133B1 (en) * 2000-08-28 2005-11-01 Igt Slot machine game having a plurality of ways for a user to obtain payouts based on selection of one or more symbols (power pays)
EP0941508B1 (en) * 1997-10-02 2007-01-17 Koninklijke Philips Electronics N.V. Variable instruction set computer
EP1359501A3 (en) * 1997-10-02 2007-11-21 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6748587B1 (en) * 1998-01-02 2004-06-08 Hewlett-Packard Development Company, L.P. Programmatic access to the widest mode floating-point arithmetic supported by a processor
US6345387B1 (en) 1998-04-30 2002-02-05 Cosa Technologies, Inc. Coherent object system architecture
US6075942A (en) * 1998-05-04 2000-06-13 Sun Microsystems, Inc. Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers
US6256752B1 (en) * 1998-07-24 2001-07-03 International Business Machines Corporation Method and apparatus for dynamic swappable bytecode loop in java virtual machines
US6205578B1 (en) * 1998-08-14 2001-03-20 Ati International Srl Interpreter for stack-based languages
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
EP1062577A2 (en) * 1998-12-08 2000-12-27 Koninklijke Philips Electronics N.V. Method of executing an interpreter program
US6691308B1 (en) * 1999-12-30 2004-02-10 Stmicroelectronics, Inc. Method and apparatus for changing microcode to be executed in a processor
US6813762B1 (en) * 2000-02-22 2004-11-02 Freescale Semiconductor, Inc. Method for processing program files in a programming language capable of dynamic loading
FR2809200B1 (fr) * 2000-05-17 2003-01-24 Bull Cp8 Procede de securisation d'un langage du type a donnees typees, notamment dans un systeme embarque et systeme embarque de mise en oeuvre du procede
US6769985B1 (en) 2000-05-31 2004-08-03 Igt Gaming device and method for enhancing the issuance or transfer of an award
US7699699B2 (en) 2000-06-23 2010-04-20 Igt Gaming device having multiple selectable display interfaces based on player's wagers
US7695363B2 (en) * 2000-06-23 2010-04-13 Igt Gaming device having multiple display interfaces
SE0002440D0 (sv) 2000-06-28 2000-06-28 Virtutech Ab Interpreter
US6935955B1 (en) 2000-09-07 2005-08-30 Igt Gaming device with award and deduction proximity-based sound effect feature
US6739973B1 (en) * 2000-10-11 2004-05-25 Igt Gaming device having changed or generated player stimuli
US6857063B2 (en) 2001-02-09 2005-02-15 Freescale Semiconductor, Inc. Data processor and method of operation
US7080373B2 (en) * 2001-03-07 2006-07-18 Freescale Semiconductor, Inc. Method and device for creating and using pre-internalized program files
US6749502B2 (en) * 2001-03-21 2004-06-15 Igt Gaming device having a multi-characteristic matching game
GB0120611D0 (en) * 2001-08-24 2001-10-17 Igt Uk Ltd Video display systems
US7901291B2 (en) 2001-09-28 2011-03-08 Igt Gaming device operable with platform independent code and method
US7666098B2 (en) 2001-10-15 2010-02-23 Igt Gaming device having modified reel spin sounds to highlight and enhance positive player outcomes
US7708642B2 (en) * 2001-10-15 2010-05-04 Igt Gaming device having pitch-shifted sound and music
US6848996B2 (en) * 2001-10-15 2005-02-01 Igt Gaming device with sound recording changes associated with player inputs
US7117488B1 (en) * 2001-10-31 2006-10-03 The Regents Of The University Of California Safe computer code formats and methods for generating safe computer code
ATE381059T1 (de) * 2001-10-31 2007-12-15 Aplix Corp System zum ausführen von zwischenkode, methode zum ausführen von zwischenkode, und computerprogrammprodukt zum ausführen von zwischenkode
EP1308838A3 (en) * 2001-10-31 2007-12-19 Aplix Corporation Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code
US6976254B2 (en) * 2001-11-28 2005-12-13 Esmertec Ag Inter-method control transfer for execution engines with memory constraints
US7506322B2 (en) * 2001-12-13 2009-03-17 Synopsys, Inc. System and method of utilizing a hardware component to execute an interpretive language
US7272827B2 (en) * 2002-04-03 2007-09-18 International Business Machines Corporation Statically detecting externally referenced interfaces of a program
US7124237B2 (en) * 2002-10-03 2006-10-17 Seagate Technology Llc Virtual machine emulation in the memory space of a programmable processor
US7789748B2 (en) * 2003-09-04 2010-09-07 Igt Gaming device having player-selectable music
US7105736B2 (en) * 2003-09-09 2006-09-12 Igt Gaming device having a system for dynamically aligning background music with play session events
US7496897B1 (en) * 2004-03-17 2009-02-24 Timesys Corporation Multiple code sets for multiple execution contexts
US8043155B2 (en) * 2004-10-18 2011-10-25 Igt Gaming device having a plurality of wildcard symbol patterns
US8726248B2 (en) * 2008-06-12 2014-05-13 Oracle America, Inc. Method and apparatus for enregistering memory locations
US8591308B2 (en) 2008-09-10 2013-11-26 Igt Gaming system and method providing indication of notable symbols including audible indication
US8402381B2 (en) * 2008-09-23 2013-03-19 International Business Machines Corporation Automatically arranging widgets of a model within a canvas using iterative region based widget relative adjustments
US8460090B1 (en) 2012-01-20 2013-06-11 Igt Gaming system, gaming device, and method providing an estimated emotional state of a player based on the occurrence of one or more designated events
US8740689B2 (en) 2012-07-06 2014-06-03 Igt Gaming system and method configured to operate a game associated with a reflector symbol
US9245407B2 (en) 2012-07-06 2016-01-26 Igt Gaming system and method that determines awards based on quantities of symbols included in one or more strings of related symbols displayed along one or more paylines
US9192857B2 (en) 2013-07-23 2015-11-24 Igt Beat synchronization in a game
US9947170B2 (en) 2015-09-28 2018-04-17 Igt Time synchronization of gaming machines
US10802854B2 (en) * 2019-08-30 2020-10-13 Alibaba Group Holding Limited Method and apparatus for interpreting bytecode instruction stream

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0390900B1 (en) * 1988-09-20 1996-08-14 Digital Equipment Corporation Generic code sharing arrangement for digital data processing system
SE469956B (sv) * 1991-11-27 1993-10-11 Icl Systems Ab Förfarande och arrangemang för att minska mängden information som krävs vid enhetlig revidering av programvara i ett flertal användarenheter i ett datorsystem
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
JP3130446B2 (ja) * 1995-05-10 2001-01-31 松下電器産業株式会社 プログラム変換装置及びプロセッサ
US5678044A (en) * 1995-06-02 1997-10-14 Electronic Data Systems Corporation System and method for improved rehosting of software systems
US6094528A (en) * 1996-10-24 2000-07-25 Sun Microsystems, Inc. Method and apparatus for system building with a transactional interpreter

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7200741B1 (en) 1999-11-22 2007-04-03 Nec Electronics Corporation Microprocessor having main processor and co-processor
JP2002169696A (ja) * 2000-12-04 2002-06-14 Mitsubishi Electric Corp データ処理装置
WO2003025743A1 (fr) * 2001-09-12 2003-03-27 Hitachi, Ltd. Systeme processeur ayant un accelerateur java

Also Published As

Publication number Publication date
EP0889401A3 (en) 2006-02-08
US6021273A (en) 2000-02-01
EP0889401A2 (en) 1999-01-07
US6192516B1 (en) 2001-02-20

Similar Documents

Publication Publication Date Title
JPH1185534A (ja) インタプリタ状態及びレジスタキャシングを利用するインタプリタの発生及び実現
US6910205B2 (en) Interpreting functions utilizing a hybrid of virtual and native machine instructions
US10055237B2 (en) Virtual machine coprocessor for accelerating software execution
US6381737B1 (en) Automatic adapter/stub generator
EP3314422B1 (en) Extending a virtual machine instruction set architecture
US6385660B2 (en) Site specific message dispatch in object-oriented systems
JP3377419B2 (ja) 命令列生成方法及び装置、変換方法、及びコンピュータ
US7802249B2 (en) Techniques for implementing pluggable virtual machines
US6298477B1 (en) Method and apparatus for selecting ways to compile at runtime
US6317796B1 (en) Inline database for receiver types in object-oriented systems
US6205578B1 (en) Interpreter for stack-based languages
US6122638A (en) Object-oriented processor and method for caching intermediate data in an object-oriented processor
US7574588B2 (en) Time-multiplexed speculative multi-threading to support single-threaded applications
US6256784B1 (en) Interpreter with reduced memory access and improved jump-through-register handling
JP2001519953A (ja) マイクロプロセッサの改良
EP1442363A1 (en) Speculative execution for java hardware accelerator
US7926044B2 (en) Method, apparatus and computer program for executing a program
EP0924603A2 (en) Compiler controlled dynamic scheduling of program instructions
US7752424B2 (en) Null value checking instruction
Hariprakash et al. Hardware compilation for high performance Java processors

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050628

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050628

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060721

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060801

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20061027

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20061101

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070130

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070320