JP2003202994A - Javaコンパイラ、及び、当該Javaコンパイラが使用するコンパイル情報の生成装置 - Google Patents

Javaコンパイラ、及び、当該Javaコンパイラが使用するコンパイル情報の生成装置

Info

Publication number
JP2003202994A
JP2003202994A JP2002298479A JP2002298479A JP2003202994A JP 2003202994 A JP2003202994 A JP 2003202994A JP 2002298479 A JP2002298479 A JP 2002298479A JP 2002298479 A JP2002298479 A JP 2002298479A JP 2003202994 A JP2003202994 A JP 2003202994A
Authority
JP
Japan
Prior art keywords
template
operand
machine language
code
embedding
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.)
Granted
Application number
JP2002298479A
Other languages
English (en)
Other versions
JP4163927B2 (ja
Inventor
Takuji Kawamoto
琢二 川本
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2002298479A priority Critical patent/JP4163927B2/ja
Publication of JP2003202994A publication Critical patent/JP2003202994A/ja
Application granted granted Critical
Publication of JP4163927B2 publication Critical patent/JP4163927B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 バイトコードコンパイル実行に要するメモリ
量及びCPU負荷を小さくできると共に、インタプリタ
との間で細かい単位の切り替えを行えるJavaコンパ
イラを提供する。 【解決手段】 機械語生成部13は、バイトコード中の
オペコードを元に、テンプレート16から当該バイトコ
ードの処理内容に対応する機械語命令列を得る。オペラ
ンド埋込部14は、オペランド埋込情報17に示される
規則に従って、バイトコード中のオペランド値を当該機
械語命令列に埋め込む。テンプレートにおける機械語命
令列は、インタプリタのソースコードをコンパイル及び
アセンブルして得られたものであり、オペランド埋込情
報は、前記コンパイル及びアセンブルを、オペランドに
異なる即値を設定しながら繰り返し実行して得られた複
数パターンのアセンブリコード及びオブジェクトコード
の差分から求められたものである。

Description

【発明の詳細な説明】
【0001】
【発明が属する技術分野】本発明は、Javaバイトコ
ードから機械語命令列を生成するためのJavaコンパ
イラであって特にJavaプログラム実行に当たってイ
ンタプリタと共に動作する場合があるJavaコンパイ
ラ、そして、これが使用するコンパイル情報を生成する
コンパイル情報生成装置に関する。
【0002】
【従来の技術】最近、Javaプログラムは普及が進ん
でおり、携帯電話をはじめとする家電製品にもJava
プログラムの実行環境を備えるものが増えている(「J
ava」は、米国 Sun Microsystems, Inc.の商標また
は登録商標)。家電製品上でのJavaプログラム実行
は、Javaプログラムを直接実行するプログラムであ
るインタプリタによって行われるのが一般的であるが、
インタプリタによる実行は一般的に処理速度が遅いた
め、携帯電話においてJavaプログラムのゲームを実
行するなどの新サービスにおいては、特に処理速度に関
して不満がある。
【0003】Javaプログラムの実行を高速化する方
法として、高速なJIT(Just−in−Time)
型のJavaコンパイラを使ってバイトコードを機械語
命令列に変換する方法、あるいは、インタプリタとJa
vaコンパイラとを実行環境に共存させ、部分部分でイ
ンタプリタとJavaコンパイラとを切り替えながらJ
avaプログラムを実行する、というハイブリッド(混
在実行)などの方法がある(ハイブリッド方式に関して
は、例えば特許文献1に開示されている)。
【0004】図13は、従来のJIT型Javaコンパ
イラの構成とそのコンパイル処理の流れとを示す図であ
る。Javaバイトコード(Javaプログラムの実行
単位、1命令に相当)を受け取ったJavaコンパイラ
1300において、先ず、中間コード生成部1301が
バイトコードを中間コードに変換する。その後、最適化
部1302が、実行環境のCPUの属性に合わせて中間
コードの最適化(レジスタやスタックフレームに関連す
る部分の書き換え)を行う(ここで、レジスタやオペラ
ンドスタック構造が実行環境のCPUの属性に合わせて
最適化される)。そして、コード生成部1303が、最
適化後の中間コードを機械語命令列に変換し、オペラン
ドを埋め込む。
【0005】
【特許文献1】特開2000−267862号公報
【0006】
【特許文献2】特開2000−347873号公報
【0007】
【特許文献3】特開2000−347875号公報
【0008】
【非特許文献1】Manjunath, G. and Krishnan, V. : A
small Hybrid JIT for Embedded Systems, ACM SIGPLA
N Notices Vol.35,No4,April, pp.44-49(2000)
【0009】
【発明が解決しようとする課題】しかしながら、こうし
た従来型Javaコンパイラの使用は、高性能のCPU
及び豊富なメモリ資源を有するパーソナルコンピュータ
でのJavaプログラム実行を前提としており、CPU
性能やメモリ資源に関して制約のある家電製品上のJa
va実行環境へ導入しようとすると、以下のような問題
がある。
【0010】その問題とは、(1)中間コード生成用プ
ログラム及び最適化処理用プログラム、そして、中間コ
ードを格納するためのメモリが大きく、メモリ資源が不
足する場合があること、(2)中間コード生成及び最適
化処理の処理量が大きいため、能力の低い家電用CPU
はこの部分の処理に長時間を要し、高速化の効果が得ら
れないこと、である。
【0011】また、ハイブリッド方式を採用した家電製
品でJavaバイトコードを実行する場合、メモリの制
約のため、細かい単位でインタプリタ実行とJavaコ
ンパイル実行とを切り替えることが好ましいが、従来の
ハイブリッド方式でこうした切り替えを行おうとすれ
ば、切り替えの度に、データをスタックして使用するイ
ンタプリタとデータをレジスタに割り付けて使用するJ
avaコンパイラとの間でデータの扱いに整合を取るた
めの処理が発生する。これによって、CPU処理負荷が
著しく増大するため、家電製品の実行環境において従来
のJavaコンパイラをハイブリッド方式で使用するこ
とには無理がある。
【0012】本発明は上記課題に鑑み、家電機器などメ
モリ容量及びCPU性能に制限のある機器上で使用する
のに適したJavaプログラムであって、Java実行
環境においてインタプリタとの間で細かい単位の切り替
えを行ってもJavaプログラムの高速実行を可能とす
るJavaコンパイラを提供すること、さらに、こうし
たJavaコンパイラが利用するコンパイル情報を生成
するコンパイル情報生成装置及び方法を提供すること、
を目的とする。
【0013】
【課題を解決するための手段】上記の目的を達成するた
めに、本発明のJavaコンパイラは、実行環境におい
てJavaプログラムをバイトコード単位で機械語命令
列に変換するJavaコンパイラであって、各種バイト
コードとその処理内容を記述した機械語命令列とを対応
づけた機械語テンプレートを保持するテンプレート保持
手段と、前記テンプレート保持手段が保持する機械語テ
ンプレートを用いてバイトコードから機械語命令列を生
成する機械語命令生成手段と、各種バイトコードに含ま
れるオペランド値について、機械語命令列への埋め込み
の際の規則を示すオペランド埋込情報を保持する埋込情
報保持手段と、前記埋込情報保持手段が保持するオペラ
ンド埋込情報が示す規則に従って、前記機械語命令生成
手段によって生成された機械語命令列にオペランド値を
埋め込むオペランド埋込手段と、を有し、前記テンプレ
ート保持手段が保持する機械語テンプレートに含まれる
機械語命令列は、バイトコード実行用のインタプリタの
コンパイル及びアセンブルによって得られるオブジェク
トコードから生成されたものであり、前記埋込情報保持
手段が保持するオペランド埋込情報は、前記インタプリ
タのコンパイル及びアセンブルを前記インタプリタ中の
オペランド部分に異なる即値を設定しながら繰り返し実
行させることで得られた複数パターンのアセンブリコー
ド及びオブジェクトコードに表れるオペランド値の差分
を元に求められたものであることを特徴とする。
【0014】テンプレートを用いてバイトコードを直接
機械語命令列に変換することで中間コードを生成及び最
適化する処理を省いているので、メモリ容量及びCPU
処理性能に制限のある実行環境で使用するのに適してい
る。さらに、前記Javaコンパイラは前記実行環境で
前記インタプリタと共存した状態で動作し、前記テンプ
レート保持手段が保持するテンプレートに含まれる機械
語命令列は、前記インタプリタにおいてバイトコードの
処理内容を記述した部分であるテンプレート用ソースコ
ードを前記インタプリタのソースコードと共に単一ファ
イルとしてコンパイル及びアセンブルして得られるオブ
ジェクトコードから生成されたものであること、とすれ
ば、テンプレートを用いてバイトコードを機械語命令列
に変換する本Javaコンパイラとインタプリタとの間
ではデータの扱いに整合が取れている。そのため、本J
avaコンパイラについては、メモリ容量及びCPU処
理性能に制限のある実行環境でも、インタプリタとの間
で細かい単位の切り替えを行う形のハイブリッド方式で
の使用が可能となり、Javaプログラムを高速実行で
きる。
【0015】また、こうしたテンプレート及びオペラン
ド埋込情報は、実行環境にあってJavaバイトコード
を機械語命令列に変換するJavaコンパイラが使用す
る変換用のテンプレート及びオペランド埋込情報を生成
するコンパイル情報生成装置であって、バイトコード実
行用のインタプリタのソースコードから各種バイトコー
ドの処理内容が記述された部分をテンプレート用ソース
コードとして切り出す切出し手段と、前記テンプレート
用ソースコードをコンパイルして各種バイトコードの処
理内容を表すテンプレート用アセンブリコードを得るア
センブリコード生成手段と、前記テンプレート用アセン
ブリコードをアセンブルして各種バイトコードの処理内
容を表すテンプレート用オブジェクトを得るオブジェク
ト生成手段と、前記アセンブリコード生成手段によるコ
ンパイル及び前記オブジェクト生成手段によるアセンブ
ルを、前記テンプレート用ソースコードにおけるオペラ
ンド部分に異なる即値を設定しながら繰り返し実行させ
る繰り返し制御手段と、前記オブジェクト生成手段が生
成したテンプレート用オブジェクトから、各種バイトコ
ードを示す識別情報とその処理内容に対応する機械語命
令列とを対応づけたテンプレートを生成するテンプレー
ト生成手段と、前記繰り返し制御手段の制御に従って前
記アセンブリコード生成手段が各種バイトコード毎に生
成した複数のテンプレート用アセンブリコード、及び、
前記繰り返し制御手段の制御に従って前記オブジェクト
生成手段が各種バイトコード毎に生成した複数のテンプ
レート用オブジェクト、に表れるオペランド値の差分を
元に、バイトコード中のオペランド値をその処理内容に
対応する機械語命令列へ埋め込む際の規則を示すオペラ
ンド埋込情報を各種バイトコード毎に生成する埋込情報
生成手段と、を有する、というコンパイル情報生成装置
によって生成することができる。
【0016】
【発明の実施の形態】以下、本発明のJIT型Java
コンパイラ(以下、単に「JITコンパイラ」とい
う)、及び当該JITコンパイラがコンパイル実行に当
たって使用するコンパイル情報を生成するためのコンパ
イル情報生成装置に関する実施の形態を、図面を参照し
ながら説明する。 (JITコンパイラ) (概要)本実施の形態におけるJITコンパイラは、機
械語テンプレート及びオペランド埋込情報(あわせて
「コンパイル情報」という)を用いてJavaプログラ
ムをバイトコード単位で機械語命令列に変換するもので
あり、当該機械語テンプレート及びオペランド埋込情報
は、各種Java実行環境で共通して用いられるインタ
プリタのCソースコードから生成されたものである。従
来のJavaコンパイラが行っている、バイトコードか
ら中間コードへ変換処理及び中間コードの最適化処理
(図13参照)を行わない分、本JITコンパイラは使
用メモリ量やCPU負荷が小さい。また、本JITコン
パイラが生成する機械語命令列は、インタプリタと同様
のスタックマシンとして動作する。そのため、本JIT
コンパイラをハイブリッド方式の実行環境で使用して
も、インタプリタとの切り替え時に整合を取るための処
理が発生しない。その分CPU負荷が軽くなり、Jav
aプログラム実行速度が向上する。
【0017】(構成)以下、本実施の形態におけるJI
Tコンパイラの構成及び処理内容について説明する。図
1は、本実施の形態におけるJITコンパイラ1の構成
を、同JITコンパイラ1が動作するJavaプログラ
ム実行環境Eにおいて示す図である。このJavaプロ
グラム実行環境Eにおいて、JITコンパイラ1は、イ
ンタプリタ3と共に動作するハイブリッド実行の形で、
Javaプログラムをバイトコード単位で機械語命令列
に変換する。同実行環境E上では、他に、生成された機
械語命令列を実行する機械語命令実行装置4、JITコ
ンパイラ1とインタプリタ3との間の実行切替を制御す
る切替装置2などが動作している。
【0018】JITコンパイラ1は、アドレス管理部1
1、分離部12、機械語生成部13、オペランド埋込部
14を有し、更に、アドレス変換テーブル15、テンプ
レート16、オペランド埋込情報17を有する。テンプ
レート16は、各種バイトコードの識別子(オペコー
ド)とこれに対応する機械語命令列(オペランド部分を
空値とした形式のもの)との組合せ(テンプレート素片
データ)の集合である。バイトコードから得たオペコー
ドをキーにテンプレート16を検索すれば、当該バイト
コードに対応する処理内容の機械語命令列が得られる。
【0019】オペランド埋込情報17は、各種バイトコ
ードについて、当該バイトコードに含まれるオペランド
を対応する機械語命令列に埋め込む際のルールを示す情
報である。分離部12は、切替装置2から出力されてく
る1命令分のバイトコードをオペコード部分とオペラン
ド部分とに分離して、オペコード部分を機械語生成部1
3に、オペランド部分をオペランド埋込部14に出力す
る。
【0020】機械語生成部13は、受け取ったオペコー
ド部分の値をキーにしてテンプレート16を検索し、当
該バイトコードの処理内容に対応する機械語命令列を読
み出してオペランド埋込部14に出力する。オペランド
埋込部14は、機械語生成部13から受け取った、オペ
ランド部分が空値の機械語命令列に、分離部12から受
け取ったバイトコードのオペランド部分の内容を、対応
するオペランド埋込情報に応じた形で機械語命令列に埋
め込む。この時、必要であれば、バイトコードにおける
オペランド値をオペランド埋込情報の内容に応じて変換
する。例えば、バイトコードにおけるオペランドがロー
カル変数配列中のある要素の配列番号である場合は、当
該要素の配列先頭からのオフセットに変換する。
【0021】また、オペランドがアドレス(分岐先アド
レス)の場合は、バイトコードにおけるオペランド値
(当該バイトコードの先頭アドレスからの見た相対アド
レスの値)を、アドレス管理部11が管理するアドレス
変換テーブル15の内容をもとに機械語アドレス値に変
換(当該バイトコードに対応する機械語命令列の先頭ア
ドレスに上記の相対アドレスを加える処理)を行った上
で機械語命令列に埋め込む。この変換を可能とするため
に、アドレス管理部11はバイトコードのアドレスと当
該バイトコードに対応する機械語命令のアドレスとの組
をアドレス変換テーブル15に設定しておく。そして、
切替装置2からバイトコードとそのアドレスとが出力さ
れてくると、バイトコードに含まれるオペコードをキー
にテンプレート16を検索して当該バイトコードに対応
する機械語命令列の長さを得る。そして、これら情報を
用いてアドレス変換テーブルの内容を更新する。なお、
オペランドがアドレスか否かは、JITコンパイラが各
種バイトコードの構文情報を保持しておいて、これを各
構成部が参照して判定することにしても良いし、アドレ
スオペランドに関するオペランド埋込情報に、アドレス
であることを示す情報を付加しておくことにしてもよ
い。
【0022】オペランド埋込の完了によって、当該バイ
トコードの機械語への変換は完了する。そして、オペラ
ンド埋込部14は、結果の機械語命令列を機械語命令実
行装置4に出力し、これを実行させる。以下、具体的な
バイトコードを例に、JITコンパイラ1の処理を説明
する。図2は、バイトコード例として示す“bipus
h”命令(オペランドスタックに整数値を積む命令)に
関して、そのバイトコード21と変換後の機械語命令列
24の内容、さらに、対応するテンプレート素片データ
22及びオペランド埋込情報23の内容を示す。なお、
“bipush”を含め、Javaオペコードは通常1
バイトの16進データで表現されるが、ここでは説明の
便宜上“bipush”という文字列で表記している。
【0023】図2に示す“bipush”命令用テンプ
レート素片データ22は、2バイト長の“bipus
h”バイトコードが4バイトの機械語命令列“0x4D
260000”に対応することを示している。また、同
図に示す“bipush”命令用のオペランド埋込情報
23の内容は、オペランドの数が1つであり、当該オペ
ランドの「埋込場所」、「サイズ及び符号」、「エンデ
ィアン」(データの埋め込み順序)が、それぞれ「3バ
イト目」、「2バイト長、符号あり」、「リトルエンデ
ィアン」であることを示している。
【0024】そして、計算式情報は、バイトコードにお
けるオペランドの値を、「1倍した上で0を加える」と
いう計算式に代入して得られる結果を機械語命令列にオ
ペランド値として設定することを示す。「1倍した上で
0を加える」とはバイトコードにおけるオペランド値を
そのまま機械語命令列に設定することを示す。計算式の
内容がこのようになるのは、bipushにおけるオペ
ランドが定数だからである。
【0025】bipushの場合、先ず、分離部12が
バイトコードの先頭1バイト(オペコード値)を読み出
し、それが“bipush”であることを認識する。そ
して先頭1バイト(オペコード)を機械語生成部13
に、後続1バイト(オペランド)をオペランド埋込部1
4にそれぞれ出力する。機械語生成部13は、テンプレ
ート16の中から“bipush”オペコードに対応す
るテンプレート素片データ22を参照して機械語命令列
“0x4D260000”を読み出し、オペランド埋込
部14に出力する。
【0026】オペランド埋込部14は、機械語生成部1
3から機械語命令列が出力されてくると、オペランド埋
込情報23を参照しながら、分離部12から得たオペラ
ンド値“0x9E”を機械語命令列中に埋め込む。ここ
では、当該オペランド値を、機械語命令列の3バイト目
からの2バイト長(3、4バイト目)のエリアに「リト
ルエンディアン」で「符号付き」で埋め込む。また、埋
め込みに当たっては、バイトコード中のオペランド値を
埋込情報の「計算式」の指定に従って変換したうえで埋
め込む。計算式は「1倍した上で0を加える」という内
容なので変換結果は変わらず“0x9E”(1バイト)
のままである。2バイトのエリアに埋め込むのでパッド
データを加えて2バイト長にする必要があるが、負の符
号付きデータなので0xFFを追加する。リトルエンデ
ィアンであることから、オペランド埋め込みエリアの先
頭バイト(3バイト目)のエリアに“0x9E”を埋め
込み、4バイト目のエリアには“0xFF”を埋める。
そして、完成した機械語命令列“0x4D269EF
F”を機械語命令実行装置4に出力する。 (まとめ)上記の通り、本実施の形態によるJITコン
パイラは、機械語テンプレートを用いてバイトコードを
機械語命令列に変換する方式なので、従来のJITコン
パイラのように中間コードが発生せず、メモリ消費量が
小さい。さらに、使用する機械語テンプレートは、実行
環境で共に動作するインタプリタの内容をもとに生成し
たテンプレート素片用Cソースコードを当該インタプリ
タのCソースコードと1つのファイルに併せて、実行環
境用CPUの属性を反映したGCC(GNUC Compile
r)でコンパイルした結果から生成している(詳細は後
述)。1つのファイルにしてコンパイルしているため、
実行環境においてインタプリタとハイブリッド構成で使
用してもデータの扱い(オペランド割り付けなど)の不
一致が発生しない(すなわち、従来のJITコンパイラ
をハイブリッド方式で使用する場合のような切り替え時
の整合性確保の処理が発生しない)ので、性能の低いC
PUを使用する実行環境においてもハイブリッド方式に
よる処理速度の向上を実現できる。
【0027】(備考)なお、本実施の形態におけるJa
vaコンパイラを、よりリアルタイム性に優れたAOT
(ahead-of-time)コンパイラとして用いることも可能
である。その場合、Javaプログラムを構成するバイ
トコードについては、プログラム実行開始前に、Jav
aコンパイラで機械語変換してから実行するのかインタ
プリタで実行するのかが基本ブロック単位で決定され
る。そして、機械語変換してから実行すると決定された
バイトコードはJavaコンパイラによって、プログラ
ム実行開始前の段階で機械語列に変換される。 (コンパイル情報生成装置)次いで、上記のJITコン
パイラ1が使用するコンパイル情報(テンプレート及び
オペランド埋込情報)を生成するコンパイル情報生成装
置10について説明する。
【0028】(概要)本コンパイル情報生成装置10
は、上で述べたようなコンパイル情報を生成する装置で
ある。そのために、先ずインタプリタのソースコードか
らテンプレート用Cソースコードを生成する。そして、
生成したテンプレート用Cソースコードをインタプリタ
のCソースコードと併せて、実行環境のCPU属性を反
映したGCC(GNU C Compiler)でコンパイルした
結果得られるアセンブリコード、及び、これをさらにア
センブルした結果得られるオブジェクトコードからテン
プレート及びオペランド埋込情報を生成する。
【0029】以下、本コンパイル情報生成装置10の構
成及び処理内容について、図面を参照しながら説明す
る。 (構成)図3は、コンパイル情報生成装置10の構成を
示すブロック図である。コンパイル情報生成装置10
は、C言語で記述されたインタプリタソースコードか
ら、機械語テンプレート及びオペランド埋込情報を生成
する。
【0030】インタプリタは、バイトコードをそのまま
実行するためのプログラムであり、入力されてくるバイ
トコードの命令の種類(オペコードの値)に応じてsw
itch文で処理を振り分ける。振り分け先は、それぞ
れ1種類の命令のバイトコードに対応する処理が記述さ
れたcase節である。各case節には、対応するバ
イトコードの処理内容がC言語で記述されているので、
その内容をコンパイル、アセンブルして得られるオブジ
ェクトコードは、当該バイトコードの処理内容を機械語
命令列として表したものになる。コンパイル情報生成装
置10は、この機械語命令列を当該バイトコード用の機
械語テンプレートに流用する。
【0031】コンパイル情報生成装置10は、前処理部
101、コンパイル管理部102、分離処理部103、
アセンブル実行部104、繰り返し制御部105、差分
検出部106を有する。また、機械語テンプレート及び
オペランド埋込情報の生成に必要な各種情報を格納する
ための記憶部107を有する。図4は、本実施の形態に
おけるコンパイル情報生成装置10による生成処理の工
程を示す図である。生成工程は大きく分けて、 (1)「前処理工程」:インタプリタの命令処理部のc
ase節を切り出してテンプレート用Cソースコードと
し、コンパイル可能な形に書き換える。この時、テンプ
レート用Cソースコードのオペランド部分には、オペラ
ンド埋込情報の生成処理の便宜を考慮した即値を設定し
ておく。 (2)「コンパイル工程」:インタプリタとテンプレー
ト用Cソースコードを単一ファイルにまとめたうえで、
Java実行環境のCPU属性を反映したGCCでコン
パイルする。 (3)「分離工程」:(2)の結果得られるアセンブリ
コードをインタプリタ部分とテンプレート部分とに分離
して別々に保存する。以下、それぞれをインタプリタア
センブリコード、テンプレート用アセンブリコードとい
う。 (4)「1次差分検出工程」:(1)〜(3)の処理
を、テンプレート用Cソースコードに設定するオペラン
ド即値を変えながら複数回繰り返し実行して、各種バイ
トコードに関し、それぞれオペランド即値が異なる複数
パターンのテンプレート用アセンブリコードを生成した
後、これらを比較して差分検出を行う(差分はオペラン
ド部分にのみ表れる)。そして、検出した差分に基づい
て各種バイトコード毎のオペランド埋込情報を生成す
る。ただし、テンプレート用アセンブリコードの差分だ
けからでは、オペランド埋込情報の全ての項目を得るこ
とはできない。残り項目は後続の「2次差分検出工程」
で求められる。 (5)「アセンブル工程」:テンプレート用アセンブリ
コードをアセンブルして機械語命令列からなるテンプレ
ート用オブジェクトコードを生成する。そして、テンプ
レート用オブジェクトコードから機械語テンプレートを
生成し、保存する。 (6)「2次差分検出工程」:テンプレート用アセンブ
リコードのアセンブル処理を、オペランド即値を変えな
がら複数回繰り返し、それぞれオペランド即値が異なる
複数パターンのテンプレート用オブジェクトコードを生
成し、これらのオペランド部分の差分検出を行う。そし
て、検出した差分に基づいてオペランド埋込情報の項目
のうち上記「1次差分検出工程」で求められなかったも
のを求め、オペランド埋込情報を完成する。
【0032】以下、上記工程の各々について詳しく説明
する。コンパイル情報生成処理は、外部からの起動指示
に応じて開始される。 (前処理工程)前処理工程は前処理部101が行う。前
処理部101は、繰り返し制御部105からの起動指示
に応じて処理を開始し、まず、インタプリタCソース
コード501から命令処理部分(命令処理部Cソースコ
ード502)を抽出する。
【0033】次いで、命令処理部Cソースコード50
2に対し、インタプリタ用マクロ定義503を適用して
インタプリタ用Cソースコード505に変換する。そし
て、同じ命令処理部Cソースコード502にテンプレ
ート用マクロ定義504を適用してテンプレート用Cソ
ースコード506に変換する。この処理において、イ
ンタプリタにのみ必要でテンプレートでは不要となる内
容(オペコードのフェッチ及びデコード、プログラムカ
ウンタの更新)は削除する。
【0034】前処理部101は、インタプリタ用Cソー
スコード505、テンプレート用Cソースコード50
6、そして、インタプリタCソースコード501から命
令処理部Cソースコード502を除いた部分(前処理部
Cソースコード507及び後処理部Cソースコード50
8)をコンパイル実行部102に出力する。上記処理の
うち、は、1回のコンパイラ生成処理につき1回の
み実行されるが、の処理のみは後述する繰り返し制御
部105の指示に従って繰り返し実行される。そして、
各実行において、テンプレート用マクロ定義504のオ
ペランド部分に設定される即値が書き換えられる。すな
わち、オペランド即値が異なる複数パターンのテンプレ
ート用Cソースコード506が出力される。設定すべき
オペランド即値は繰り返し制御部105からの実行指示
に付加されたパラメータの形で前処理部101に通知さ
れるものとする。
【0035】図5は、インタプリタの命令処理部Cソー
スコード502、そして、これから前処理部101が生
成するテンプレート用Cソースコード506、インタプ
リタ用Cソースコード505の一部を示す。図6は、イ
ンタプリタ用Cソースコード505に適用されるインタ
プリタ用マクロ定義503、テンプレート用Cソースコ
ード506の生成に用いられるテンプレート用マクロ定
義504の一例を示す。
【0036】インタプリタ命令処理部502は、swi
tch文と複数のcase節とから成り、OPE_CO
DE(オペコードの値、すなわち、バイトコードの命令
の種類)に応じてSWITCH文で処理(CASE節)
を振り分ける形式となっている。マクロ定義を使ってs
witch文を記述し分ける都合上、C言語のswit
ch文のマクロ記述は大文字SWITCHを使用してい
る。以下、大文字でSWITCH文と書いた場合は、そ
れがマクロ記述を指しているものとする。CASE節、
BREAK文についても同様である。
【0037】図6(a)に示すインタプリタ用マクロ定
義503は、インタプリタの命令処理部Cソースコード
502におけるCASE節内の処理の記述をプログラム
カウンタ(pc)を用いた形式に書き換える(#def
ine文714〜719)。また、SWITCH文、そ
して、各CASE節の開始と終端を示すCASE文及び
BREAK文については、記述形式を変更する(#de
fine文711〜713)。
【0038】例えば、#define文715によっ
て、オペコードを示す“OPE_CODE()”という
記述は、プログラムカウンタを用いた“pc[]”とい
う記述に書き換えられる。また、数値を表すオペラン
ド、例えば、「符号あり1バイト(OPE_SCHAR
(n))」、「符号なし2バイト(OPE_USHRT
(n))」は、それぞれ、#define文716、7
19によって、プログラムカウンタpcを用いた記述、
“(char)pc[n]”、“((pc[n]<<8+
pc[n+1])”に書き換えられる。
【0039】また、図には示していないが、アドレスを
表すオペランド、例えば、「2バイトアドレス(OPE
_ADDR2(n))」は、“pc+(short)
(pc[n]*256+pc[n+1])”に書き換え
られる。オペランドを表すマクロの引数nは、Java
バイトコードにおける当該オペランドの先頭位置からの
オフセット(オペランドオフセット)であり、マクロを
用いて書き換えた後、nはプログラムカウンタpcのイ
ンデックスとなる。
【0040】なお、プログラムカウンタのインクリメン
トを行う“INCREMENT_PC(value)”
は、#define文714によって“pc+=(va
lue)”と書き変えられる。図6(b)に示すテンプ
レート用マクロ定義504は、インタプリタ命令処理部
502における個々のCASE節をテンプレート用Cソ
ースコードとして切り出し、各種オペランドに即値を設
定する。また、テンプレートにおいて不要となる種類の
処理が記述された文を削除する。具体的にはオペランド
フェッチ処理、プログラムカウンタ更新処理が除かれ
る。
【0041】マクロによるテンプレート切り出しは、S
WITCH文、CASE文、BREAK文に対応する3
つの#define文721〜723によって行われ
る。SWITCH文はテンプレートには不要なので、ダ
ミーラベル(template_table[0])へ
のgoto文に置き換える。CASE文はテンプレート
の開始位置を示すラベルに置き換える。対応するオペコ
ードを明示するために、ラベルの末尾には、対応するC
ASE文の引数(オペコードを示す16進1バイトのデ
ータ、「0x01」など)を付加する。
【0042】BREAK文については、テンプレートの
終端位置であることを示すために、前出のダミーラベル
(template_table[0])へのgoto
文に置き換える。各種オペランドに対しては#defi
ne文724〜729によって即値が設定されるが、上
で述べた通り、即値の内容は変更される。図6(b)に
示したのは即値の一例であり、これに固定されない。
【0043】図6に示したもの以外にも、インタプリタ
内の呼出関数についても、インタプリタ用、テンプレー
ト用それぞれのマクロで書き換える。以下、メソッド呼
出関数“int invoke_virtual(in
t index)”を例に説明する。インタプリタ用マ
クロの場合、#define文で“INVOKE_VI
RTUAL(index)”を“invoke_vir
tual(value)”に書き換える。テンプレート
用マクロの場合、“INVOKE_VIRTUAL(i
ndex)”を、前記“invoke_virtual
(value)”の間接参照呼出に書き換える。
【0044】具体的には、インタプリタの前処理部Cソ
ースコードのmain_loop()内にint(*)
(int)型の自動変数 ind_invoke_vi
rtualを設けて、テンプレートでは(*ind_i
nvoke_virtual)(index)を呼び出
すこととする。ind_invoke_virtual
の初期化は前処理部Cソースコード507内で行う。 (コンパイル工程)コンパイル工程は、コンパイル管理
部102が行う。コンパイル管理部102は、前述の前
処理工程によって得られたインタプリタ用Cソースコー
ド505()、テンプレート用Cソースコード506
()、インタプリタ501における前処理部Cソース
コード507(図4参照)()及び後処理部Cソース
コード508(図4参照)()を、→→→の
順で、がメイン関数(main_loop())内に
含まれる形で、一つにまとめて単一ファイルとする。そ
して、コンパイル管理部102は、GCC(図外)に当
該ファイルを渡してコンパイルを行わせる。ここで使用
されるGCCは、生成中のJavaコンパイラのターゲ
ットとなるJava実行環境で使用されるCPUの属性
を反映したものであり、当該CPU属性に関する情報
は、コンパイル情報生成処理開始時に繰り返し制御部1
05が起動指示に付属するパラメータとして受け取り、
GCCに反映しておく。その後、コンパイル結果のアセ
ンブリコード509がGCCから出力されてくると、コ
ンパイル管理部102は、これを分離処理部103に送
って、分離処理の開始を指示する。
【0045】インタプリタの用Cソースコードとテンプ
レート用Cソースコードとを単一ファイルにしてコンパ
イルするのは、両者で共通する変数をアセンブリコード
において共有化するためである。こうしてコンパイルす
ることで、両ソースコードに共通する変数は、同じオフ
セットに割り当てられることになる。それによって、ア
センブリコードから後述する手順で生成される機械語テ
ンプレートに含まれる変数は、Java実行環境で実際
に使用する時点でも、上記GCCによってコンパイルさ
れたインタプリタのアセンブリコードにおける同名変数
とオフセットが共通となる。よって、従来のような共通
変数のオフセット不整合による問題は発生せず、この不
整合解消のための処理が不要となる分CPU負荷が軽い
ので、低性能のCPUを使用する環境でもハイブリッド
方式によるコンパイル処理高速化を実現できる。また、
上で述べた通り、関数呼出における関数ラベルについて
は、マクロによる書き換えで、インタプリタ部分におい
ては自動変数として保持し、テンプレート部分ではこの
関数ラベルを間接参照呼出しする、という形にしてある
ので、両者をまとめてコンパイルすることで、テンプレ
ート部分からインタプリタ内の関数を呼び出す場合にも
関数ラベル解決の処理は不要となる。
【0046】(分離工程)分離処理部103は、コンパ
イル管理部102から受けとったアセンブリコード50
9を、テンプレート部分(テンプレート素片アセンブリ
コード511)とインタプリタ部分(インタプリタアセ
ンブリコード510)とに分離する。1つのテンプレー
ト素片アセンブリコードは、インタプリタのうち1種類
の命令のバイトコードに対応する部分(命令処理部Cソ
ースコード502における1つのCASE節)に相当
し、当該バイトコードの処理内容を示す。
【0047】図7に、切り出し処理の具体例を示す。以
下、同図を参照しながら分離処理部103の処理内容を
説明する。図7はアセンブリコード509の一部と、そ
こから切り出された2つのテンプレート素片アセンブリ
コード511、そしてインタプリタアセンブリコード5
10の一部を示す。分離処理部103は、アセンブリコ
ード509を先頭からサーチして、変数“templa
te_table”を検出し、この変数以降の部分から
テンプレート素片アセンブリコードの切り出しを開始す
る。それ以降は、“template_label”節
を1つのテンプレート素片アセンブリコードとして切り
出して保存する。切り出しに当たっては、対象の“te
mplate_label”の次の行から“templ
ate_table”への分岐命令の行までトレースし
て、その間の処理命令文をテンプレート素片アセンブリ
コードとする。ただし、“template_tabl
e”以外への分岐(ジャンプ)命令が存在すれば、分岐
先の命令処理部分も含めて1つのテンプレート素片アセ
ンブリコードとする。ただし、分岐命令を示す文(“j
mp.L2033”など)、分岐先ラベル(“.L20
33”など)はテンプレート素片アセンブリコードには
含めない。また、各テンプレート素片アセンブリコード
には、対応する“template_label”文の
うちバイトコード種別を示す識別情報(オペコード)部
分(“_0xnn”)を識別子として付加しておく。こ
れによって、オペコードをキーにテンプレート素片アセ
ンブリコードを検索することが可能となる。
【0048】図7に示す例のうち、iload命令に対
応するアセンブリコードについては、途中に分岐命令が
ないので、行701,702,703,704を切り出
してiload用のテンプレート素片アセンブリコード
を生成する。一方、iload_1命令に対応するアセ
ンブリコードについては、途中に分岐命令“jmp.L
2033”があるため、行705,706に加えて、分
岐先の行703,704も含んだテンプレート素片アセ
ンブリコードを生成する。
【0049】分離処理部103は、各テンプレート素片
アセンブリコードに対応するオペコードの情報を付加し
たうえで、全テンプレート素片アセンブリコードをまと
めて「アセンブリテンプレート」として、マクロ定義に
設定したオペランド即値のデータと共に保存する。 (1次差分検出工程)1次差分検出工程は、繰り返し制
御部105と差分検出部106とによって行われる。こ
のうち繰り返し制御部105は、オペランド即値を変え
ながら、これまでに述べたテンプレート用アセンブリコ
ード生成までの処理を繰り返し実行させ、オペランド即
値の異なる複数パターンのアセンブリテンプレート(テ
ンプレート用アセンブリコードの集合)を生成させる。
差分検出部106は、各種バイトコードについて、複数
パターンのテンプレート用アセンブリコードのオペラン
ドに表れる差分をもとに、当該バイトコード用のオペラ
ンド埋込情報(一部項目は除く)を生成する。
【0050】先ず、繰り返し制御部106は、各構成部
に対し、上記の前処理工程から分離工程までの処理を繰
り返し実行させる。その際、繰り返し制御部105は、
各実行毎に図6(b)に示したテンプレート用マクロ定
義504における数値オペランド及びアドレスオペラン
ド用#define文におけるオペランド即値を書き換
える。
【0051】図8は、繰り返し制御部106が設定する
オペランド即値の複数のパターンを表形式で示す図であ
る。オペランド即値は4パターンある(すなわち、繰り
返しは4回行われる)。また、各パターンにおいても対
象オペランドの属性(長さ、符号の有無)に応じて値は
異なる。パターン(1)、(2)、(3)は、いずれの
オペランド即値も、当該オペランドのバイトコードにお
けるオフセットに相当する値n(プログラムカウンタの
引数)を含む計算式となっており、nに関わる部分の値
を変化させている(n+1、n、2n)。パターン
(4)はnを含まない定数値となっている。
【0052】繰り返し制御部105は、図8で示す4パ
ターンのうち1パターンのオペランド即値をテンプレー
ト用マクロ定義504中のオペランド部分に設定する
と、当該テンプレート用マクロ定義504と命令処理部
Cソースコード502とを用いてテンプレート用Cソー
スコード506を生成するよう前処理部101に指示す
る。それ以降の処理はすでに述べた通りである。そし
て、分離処理部103からアセンブリテンプレートの生
成完了の通知を受けると、繰り返し制御部105は次の
パターンのオペランド即値をテンプレート用マクロ定義
504に設定して上記の処理を繰り返す。そして、これ
を4回繰り返した後、得られた4パターンのアセンブリ
テンプレートを差分検出部106に送って1次差分検出
(オペランド埋込情報生成)の処理を開始させる。その
際、各アセンブリテンプレートには、それぞれに使用し
たオペランド即値のパターン識別情報を付加しておく。
【0053】差分検出部106は、各種バイトコードに
関し、4パターンのアセンブリテンプレートを検索して
オペランド即値の異なる4パターンのテンプレート用ア
センブリコードを読み出し、それらのオペランド部分の
差分を抽出することで、当該バイトコードのオペランド
を機械語命令列に埋め込む際のルールであるオペランド
埋込情報を生成する。
【0054】図9は、オペランド埋込情報の構成とその
一例(オペコード:iincの場合)とを示す図であ
る。iincは、int型のローカル変数に整数を加算
する命令であり、オペランドは2つ(「ローカル変数」
及び「整数」)である。オペランド埋込情報900は、
どの種類の命令のバイトコードに対応するかを示す識別
情報(オペコード)である識別情報部910と当該バイ
トコードの各オペランドに対応する情報であるオペラン
ド部920とから成る。オペランド部920の数は、各
バイトコードのオペランド数によって異なる。
【0055】オペランド部920は更に、バイトコード
におけるオペランドの位置をバイトコード先頭からのオ
フセットで示すオフセット部、機械語命令列におけるオ
ペランドの埋め込み開始位置を示す埋込位置情報部、機
械語命令列におけるオペランドの埋め込み領域のサイズ
を示す埋込サイズ部、オペランドの符号の有無を示す符
号部、計算式情報部から成る。計算式情報部は、バイト
コードにおけるオペランドの値を機械語命令列用に変換
するための1次計算式(Xn+Y)を表す2種類の数値
(倍率:X、加算値:Y)が格納される。式の倍率値X
は実行環境におけるローカル変数配列の1要素の長さ、
加算値Yは同配列先頭のヘッダ長に相当する。
【0056】図9に示すiincの場合、1つ目のオペ
ランドに対応するオペランド部920aの内容は、当該
オペランドについて、埋め込み位置が機械語命令列の先
頭から「8」バイト目であり、埋め込みサイズは「2」
バイト、符号は「なし」で、オペランド値を変換する際
の計算式が「4n+0」で表される、ということを示し
ている。同様に2つ目のオペランドに対応するオペラン
ド部920bの内容は、当該オペランドについて、埋め
込み位置が機械語命令列の先頭から「12」バイト目で
あり、埋め込みサイズは「1」バイト、符号は「あり」
で、「1n+0」の計算式によってオペランド値を変換
する、ということを示している。ただし、「1n+0」
の計算式で変換した結果は元と同じ値になる。これは、
第2オペランドが定数値だからであり、バイトコード中
のオペランド値がそのまま機械語命令列のオペランド値
として埋め込まれることを示す。
【0057】ただし、図9に示したオペランド埋込情報
の項目のうち、埋め込み位置情報はアセンブリコードか
らは求めることができない。そこで、1次差分検出工程
では、後述する2次差分検出工程で埋め込み位置情報を
求める手がかりとなる仮情報(埋め込み行番号、埋め込
みオペランド番号)を求めて、埋め込み位置情報の代わ
りに設定しておく。
【0058】以下、図9に示した命令iincの例を参
照しながら、1次差分検出工程におけるオペランド埋込
情報の生成処理について説明する。図10は、命令ii
ncを例に、オペランド埋込情報が生成される際に参照
される4パターンのテンプレート素片アセンブリコード
1021〜1024、それらの生成時に使用されたテン
プレート用マクロ定義の一部内容1031〜1034、
そして、インタプリタ用Cソースコードのうちiinc
に対応するCASE節のCソースコード1010を示し
ている。
【0059】1次差分検出工程は、比較対象のテンプレ
ート素片アセンブリコードのパターン、検出した差分か
ら求める埋込情報の種類によって、さらに3つの工程に
分かれる。先ず、第1の工程として、差分検出部106
は、マクロ定義でオペランド即値に「1」差を設けた2
パターンのテンプレート素片アセンブリコード(図10
の例ではマクロ定義1031、1032、そして、テン
プレート素片アセンブリコード1021、1022)を
比較して、計算式情報のうちの倍率と仮情報(埋め込み
行番号、埋め込みオペランド番号)とを求める。
【0060】差分検出部106によるテンプレート素片
アセンブリコードの比較の凡その手順は以下の通りであ
る。先ず、アセンブラ命令を示すキーワードを検出し
て、これを元にテンプレート素片アセンブリコードを行
に分け、さらに、区切り記号(カッコ、カンマなど)を
基に行を単語に分ける。そして、対応する位置にある単
語同士を比較する。
【0061】テンプレート素片アセンブリコード102
1、1022の場合、いずれもmovl行(1行目)と
addl行(2行目)の2つの行から成り、movl行
は両者が完全に一致する。これは、movl行ではバイ
トコード中のオペランドは使用されないことを意味す
る。一方、addl行では、2つめの単語(“$−7
7”と“$−78”)と3つめの単語(“776”と
“772”)とで差分が生じている。この結果から、i
incのオペランドが2つであり、両オペランドともア
センブリコードの2行目(addl行)に埋め込まれる
ことが分かる。
【0062】差分検出部106は、検出したオペランド
数(「2」)に応じて、iinc用オペランド埋込情報
を格納する領域を確保する。そして、iincを示す識
別子(0x84)を識別情報部910に格納する。そし
て、2つのオペランド部920a、920bには、埋め
込み行番号(両方とも「2」)、埋め込みオペランド番
号(それぞれ「1」、「2」)を格納する。
【0063】次いで、差分検出部106は、2つのオペ
ランド(オペランド番号が「1」であるオペランドの値
「“$−77”と“$−78”($は数値であること示
す記号)」、オペランド番号が「2」であるオペランド
の値「“776”と“772”」)におけるオペランド
値の差分から、それぞれの、計算式情報の一部(倍率)
を求める。これら値は、計算式:「X×(マクロ定義の
オペランド即値)+Y」の計算結果なので、マクロ定義
における両者のオペランド即値の差が「1」であること
を考えると、それぞれの差分は「X×1(=X)」に相
当する。よって、1つ目のオペランドに関する倍率は
「776−772=4」、2つ目のオペランドに関する
倍率は「−77−(−78)=1」となる。差分検出部
106は、求めた倍率をオペランド埋込情報の2つのオ
ペランド部に格納する(埋め込みオペランド番号「1」
のオペランドには「1」、埋め込みオペランド番号
「2」のオペランドには「4」)。
【0064】次に、第2の工程として、差分検出部10
6は、オペランド埋め込み情報のうち「オフセット」と
「埋め込みサイズ」を求める。また、オペランドに関し
て符号の有無を示す情報を取得する。この工程で参照さ
れる2つのテンプレート素片データは、マクロ定義にお
けるオペランド即値の変数部分の比が1:2(nと2
n)となる組み合わせである。図10の例では、テンプ
レート素片アセンブリコード1022、1023である
(対応するマクロ定義はマクロ定義1032、103
3)。
【0065】差分検出部106は、先ず、オフセットの
値(バイトコードにおけるオペランドの位置、すなわ
ち、マクロ定義の即値における変数n)を求める。テン
プレート素片アセンブリコード1022、1023それ
ぞれにおけるオペランド即値は、それぞれ、式で表すと
「(n+定数)×倍率+加算値」、「(2n+定数)×
倍率+加算値」(「n+定数」、「2n+定数」はそれ
ぞれマクロ定義1032、1033で設定された即値)
となる。よって、両者の差分は「n×倍率」となる。
【0066】そこで、テンプレート素片アセンブリコー
ド1022、1023におけるオペランド即値の差分
(「−76−(−78)=2」、「776−772=
4」)を第1検出工程で算出した計算式の倍率
(「1」、「4」)で割る。この結果、オペランド番号
が「1」のオペランドについては、オフセットは「2」
と算出され、オペランド番号が「2」のオペランドのオ
フセットは「1」となる。このオフセット値から、アセ
ンブリコードにおけるオペランドの出現順序とバイトコ
ードにおけるオペランドの出現順序が逆になっているこ
とが分かる。
【0067】また、符号の有無については、iinc命
令の構文情報(コンパイル情報生成装置10が予め保持
しているもの)を参照して知る。すなわち、第1オペラ
ンド(オフセットが「1」のオペランド)は「符号な
し」、第2オペランド(オフセットが「2」のオペラン
ド)は「符号あり」。差分検出部106は、こうして得
た各オペランドに関するオフセット値及び符号の有無の
情報を、オペランド埋込情報に設定する。また、各オペ
ランドの「バイトコードにおける長さ」についてもii
nc命令の構文情報から取得する。この情報は、第3の
工程においてオペランドの埋め込みサイズ(機械語命令
列におけるサイズ)を算出する際に使用される。
【0068】第3の工程で、差分検出部106は、マク
ロ定義で定数値のみのオペランド即値を設定した結果の
テンプレート素片アセンブリコード1124、第1の工
程で算出した計算式の倍率値、第2の工程で取得した
「バイトコードにおけるオペランドの長さ」の情報を用
いて、「計算式における加算値」及び「埋め込みサイ
ズ」を検出する。
【0069】差分検出部106は、“倍率値×固定値+
加算値=テンプレート素片アセンブリコードにおけるオ
ペランド値”という式に、既に求めた倍率値、テンプレ
ート素片アセンブリコード生成時のマクロ定義1034
に設定されていた即値(固定値)、テンプレート素片ア
センブリコード1024におけるオペランド値を代入し
て加算値を求める。
【0070】すなわち、“1×(−0x50)+加算値
=−80”、“4×0xc0+加算値=768”である
が、“0x50”、“0xc0”は10進数でそれぞれ
「80」、「192」となるので、これらの式は“1×
(−80)+加算値=−80”、“4×192+加算値
=768”と書き変えられる。この式を解くと加算値は
いずれも「0」となる。
【0071】ついで、差分検出部106は、完成した計
算式とバイトコードにおけるオペランド長とを元に、埋
め込みサイズ(機械語命令列におけるオペランドの長
さ)を求める。差分検出部106は、埋め込みサイズ
を、バイトコードにおけるオペランド値の長さに、この
オペランド値が計算式に代入されることで生じる桁上が
り分の長さを加えた値として計算する。
【0072】1つめのオペランドは、「1倍して0を加
えた値(=そのままの値)」を機械語命令列に埋め込む
ので、桁上がりは発生せず、バイトコードにおけるオペ
ランド長と等しい埋め込みサイズ(1バイト)とすれば
よい。また、もう一方のオペランドは、バイトコードに
おけるオペランド長が1バイトであり、その値は計算式
によって4倍されたうえで機械語命令列に埋め込まれ
る。4倍されるとは2進数で2ビット左シフト(2桁の
桁上がり)が生じることを意味する。加算値は0なので
それによる桁上がりはない。合計の桁上がりは2ビット
なので、バイト長で言えば1バイトだけ埋め込み領域サ
イズを拡張すれば足りるので、第1オペランドの埋め込
みサイズは1+1=2バイトとすればよい。
【0073】ただし、上記の算出方法で求めた埋め込み
サイズは、必要最小限のサイズであって、実際のサイズ
はこの必要最小限より長めになっている場合もある。実
際、iincにおけるオペランド番号「2」のオペラン
ドの場合、実行時には4バイトサイズのエリアに設定さ
れる。符号なしのオペランドでは、実際より短めに算出
した値に基づいてオペランド埋込を行っても、埋め込み
エリアに初期値「0」を設定していれば問題は生じない
が、符号付きオペランドの場合、Javaコンパイラが
オペランド埋込情報を元に短めにオペランド値を設定
し、機械語命令実行装置が実際の長いエリアでオペラン
ド値を参照すると、実行結果は不正になってしまう。そ
こで、埋め込みサイズについては、2次差分検出工程で
テンプレート素片のオブジェクトを元にチェックを行
う。その内容は後述する。
【0074】差分検出部106は、こうして求めた計算
式の加算値、埋め込みサイズの値を追加してオペランド
埋込情報を完成する。差分検出部106は、上記のii
ncの例で示した処理を、全ての種類の命令のバイトコ
ードについて行い、オペランド埋込情報を得る。その
後、全オペランド埋込情報を記憶部107に格納する。 (アセンブル)アセンブリ実行部104は、各テンプレ
ート素片アセンブリコードをアセンブルし、テンプレー
ト素片オブジェクトを得る。そして、当該テンプレート
素片オブジェクトに対応するバイトコードの識別情報
(オペコード)などの情報を付加してテンプレート素片
データを生成する。そして、全テンプレート素片アセン
ブリコードに以上の処理を行うと、結果として得たテン
プレート素片データを全てまとめて、機械語テンプレー
ト513として保存する。また、インタプリタアセンブ
リコードをアセンブルして得たインタプリタオブジェク
ト512を記憶部107に保存する。
【0075】図11はテンプレート素片データ1100
の構成を示す模式図である。各テンプレート素片データ
は、対応するバイトコードの命令の種類を示すオペコー
ド値1110にアセンブルして得られたテンプレート素
片オブジェクトコード(機械語命令列)1150を組み
合わせたものであり、その他にも、ワイドプレフィクス
の有無を示すプレフィクス情報1120、対応するバイ
トコードのサイズを示すバイトコードサイズ値113
0、機械語命令列1150のサイズである機械語命令列
サイズ値1140が含まれる。
【0076】機械語命令列サイズ1140については、
アセンブル処理の結果得られた機械語命令列のサイズを
設定する。オペコード値及びバイトコードサイズは、当
該テンプレート素片が対応するバイトコードの文法に関
する情報であり、予め決まっている。 (2次差分検出工程)差分検出部106は、テンプレー
ト素片アセンブリコードのオペランド部分に任意の数値
を設定したうえで、これをアセンブル実行部104にア
センブルさせる処理を数回繰り返し、その結果得られる
数種類のオブジェクトコードに表れるオペランド値の差
分と、1次差分検出工程で生成したオペランド埋込情報
の仮情報とを参照して、オペランド埋込情報のうち「埋
込位置」の情報を得るとともに1次検出で求めた「埋め
込みサイズ」を検証する。また、差分検出部106は、
オペランド値を機械語命令列へ埋め込む際のルール(上
位バイトから下位バイトへ、又はその逆)であるエンデ
ィアンを求める。エンディアンは実行環境ごとに決ま
り、全種類の命令のバイトコードに共通である。
【0077】先ず、差分検出部106は、エンディアン
検出のために、テンプレート素片アセンブリコードの中
から、符号付き4バイト数値オペランドを含むバイトコ
ードに対応するテンプレート素片アセンブリコードを検
出し、この数値オペランドに“0xf0e0d0c0”
という即値を設定した上で、アセンブル実行部104に
アセンブルを行わせる。そして、アセンブルの結果得ら
れるオブジェクトコードにおける数値オペランドの内容
を取得する。その中での“0xf0”、“0xe0”、
“0xd0”、“0xc0”の各バイトの並びがどうな
っているかによってエンディアンを検出する。求めたエ
ンディアンは各テンプレート素片データに設定しても良
いし、機械語テンプレートのヘッダ部分に設定しても良
い。以下の説明は「リトルエンディアン」であった場合
の内容である。
【0078】「埋込位置」の検出のためには、テンプレ
ート用アセンブリコードのターゲットとなるオペランド
に、機械語命令列でオペランド部分の開始位置1バイト
にのみ差分が生じるようなオペランド即値を設定する
(以下の説明で用いる即値は1例であって、これに限定
されない)。図12は、iincを対象とした2次差分
検出に用いる、3種類のオペランド即値が設定されたテ
ンプレート用アセンブリコード1201〜1203と、
それぞれをアセンブルして得られるオブジェクトコード
(機械語命令列)1211〜1213とを示す。
【0079】テンプレート用アセンブリコード1201
には、2つのオペランドの両方に「0」を設定する。テ
ンプレート用アセンブリコード1201には、2つのオ
ペランドの両方に「0」を設定する。これをアセンブル
して得られるオブジェクトコード1211では、オペラ
ンド部分は全て0x00となる。
【0080】テンプレート用アセンブリコード1202
には、2つのオペランドのうち1つ目に「1($
1)」、もう一方には「0」を設定する。そして、結果
のオブジェクトコード1212をオブジェクトコード1
211と比較すると、12バイト目が不一致であり、オ
ブジェクトコード1212の12バイト目には「0x0
1」という値が出現している。差分検出部106は、こ
の結果から、1つ目のオペランド(オペランド番号=
1、オフセット=2)の埋込位置を「12バイト目」と
算出する。
【0081】次いで、テンプレート用アセンブリコード
1203には、2つのオペランドのうち1つ目に
「0」、もう一方には「1」を設定する。そして、結果
のオブジェクトコード1213をオブジェクトコード1
211と比較すると、8バイト目が不一致であり、オブ
ジェクトコード1213の8バイト目には「0x01」
という値が出現している。差分検出部106は、この結
果から、2つ目のオペランド(オペランド番号=2、オ
フセット=1)の埋込位置を「8バイト目」と算出す
る。
【0082】さらに、差分検出部106は、1次差分検
出で求めた埋込サイズの検証を行う。ただし、対象は
「符号あり」のオペランドに限る。ここでは、「オペラ
ンド番号=1、オフセット=2」のオペランドが対象と
なる。検証を行うのは、符号ありオペランドの場合、埋
め込みサイズを誤って短く算出すると符号拡張の問題が
発生するためである。
【0083】具体的には、差分検出部106は、テンプ
レート用アセンブリコード中の当該オペランドに負の値
(例えば“−1”)を設定(テンプレート用アセンブリ
コード1202で、$1を$−1に置き換えた形に)し
たうえでアセンブル処理させ、オブジェクトコードに表
れるオペランド値をチェックする。1次差分検出で求め
た「1バイト」というサイズが正しければ、12バイト
目のみに「0xFF」という値が表れるはずである。例
えば12バイト目を含む複数バイトに「0xFFFF」
といった値が表れれば、2バイトであるものを誤って1
バイトと検出していたことになるので、その結果に応じ
て「埋込サイズ」を修正する。
【0084】また、差分検出部106は、コンパイル情
報生成処理の後処理として、記憶部107に格納された
機械語テンプレートに含まれる各テンプレート素片デー
タの機械語命令列におけるオペランド埋め込み領域につ
いては、対応するオペランド埋込情報を参照しながらゼ
ロクリアする。 (まとめ)上記のような本コンパイル情報生成装置10
によって生成された機械語テンプレート及びオペランド
埋込情報を、Javaバイトコードの機械語命令列変換
処理に用いた場合、従来のJITコンパイラのように中
間コードが発生せず、メモリ消費量が小さい。
【0085】さらに、使用する機械語テンプレートは、
実行環境で共に動作するインタプリタの内容をもとに生
成したテンプレート用Cソースコードを当該インタプリ
タのCソースコードと併せて単一ファイルとしてコンパ
イルした結果から生成されているので、実行環境におい
てインタプリタとハイブリッド構成で使用してもオペラ
ンド割り付けなどデータの扱いの不一致が発生せず、従
来のJITコンパイラをハイブリッド方式で使用する場
合のような切替時の整合性確保の処理が発生しない。そ
の分CPU負荷が軽くなり、CPUやメモリに制限のあ
る実行環境でもハイブリッド方式による処理速度向上を
実現できる。
【0086】また、本実施の形態のコンパイル情報生成
装置が生成するテンプレートは、単にインタプリタの命
令実行部(switch文のcase節)を切出しただ
けのものではなく、テンプレート用ソースコードを切出
すに当たって、テンプレート用マクロ定義を用いてオペ
ランドフェッチやプログラムカウンタ操作の処理を含ま
ない形に最適化し、そのうえでインタプリタソースコー
ドと単一ファイルにまとめてコンパイルしている。その
ため、例えば、インタプリタの実行イメージのcase
節をテンプレートに流用する方式に比べれば、使用メモ
リ量が少なく、実行性能も優っている。
【0087】また、本実施の形態のJavaコンパイラ
が使用するテンプレート及びオペランド情報について
は、インタプリタを実行環境のCPUに対応したコンパ
イラ(GCC)でコンパイルした結果から生成すること
で、実行環境のCPU属性を反映した内容とされる。そ
のため、ある実行環境用に使用していた本実施の形態J
ITコンパイラを他の実行環境のCPUに移植する場
合、本実施の形態のコンパイル情報生成装置にパラメー
タとしてCPU属性を入力するだけで、移植先CPUに
対応したテンプレート及びオペランド埋込情報が自動的
に生成される。さらに、本JITコンパイラのうちテン
プレート及びオペランド埋込情報を参照してバイトコー
ドを機械語に変換するプログラム部分の処理、及び、本
コンパイル情報生成装置の処理は、CPUに依存しない
汎用的なものなので、移植する際にも変更が不要であ
る。よって、本実施の形態のJITコンパイラを他の実
行環境に移植するのに要する作業は、移植先CPUの属
性情報をコンパイル情報生成装置にパラメータとして入
力し、その結果、自動的に得られるコンパイル情報(テ
ンプレート及びオペランド埋込情報)を、移植前のJI
Tコンパイラが使用していたものと置き換える、という
作業のみとなる。 (備考)なお、実行環境で使用されるCPUの種類によ
っては、上で述べた実施の形態そのままでは対応できな
い場合があって、個別に対応が必要である。すなわち、
CPUによっては機械語のオペランドとして32ビット
の即値を扱えないものがあり、(1)32ビットのオペ
ランド即値をバイト境界でない2つの値に分割する、あ
るいは、(2)オペランド即値をデータとして別領域に
配列の形で再配置して、機械語にはこの配列を参照する
ためのデータを設定する、などの処理を行う。
【0088】そこで、(1)のタイプの場合、コンパイ
ル情報生成装置は、パラメータとして分割の仕様(何ビ
ットと何ビットに分割するか)に関する情報の入力を受
け付ける。さらに、2次差分検出において、差分検出部
は、複数パターンのテンプレート素片データ(機械語命
令)における32ビットオペランドを比較して差分を検
出する際に、この分割仕様を考慮し、2つの値を1つの
オペランド値として認識する。
【0089】また、(2)のタイプの場合、Javaコ
ンパイラのアドレス管理部が実行時に、間接参照される
32ビットオペランド用の配列領域を確保して、この領
域に32ビットオペランドの即値を格納する。そして、
格納した領域のアドレスをオペランド埋込部に通知す
る。オペランド埋込部はこの通知されたアドレスを参照
する内容の機械語命令列を生成する。
【0090】なお、1次差分検出、2次差分検出におい
てオペランドに設定された具体的な即値(図8、図1
2)は例として示したものである。オペランド埋込情報
の各項目の上記算出手順を適用できる値であれば、即値
はこれらの例に限定されない。また、オペランドの差分
からオペランド埋込情報を生成する方式についても、上
記の説明は一例であり、異なる差分検出や参照の仕方も
考えられる。例えば、オペランドの埋込サイズについて
は、エンディアンを逆にして「埋込位置」を2度検出す
れば埋め込みエリアの両端位置が分かるので、そこから
サイズを算出することができる。
【0091】
【発明の効果】以上の説明から明らかなように、本発明
のJavaコンパイラは、実行環境においてJavaプ
ログラムをバイトコード単位で機械語命令列に変換する
Javaコンパイラであって、各種バイトコードとその
処理内容を記述した機械語命令列とを対応づけた機械語
テンプレートを保持するテンプレート保持手段と、前記
テンプレート保持手段が保持する機械語テンプレートを
用いてバイトコードから機械語命令列を生成する機械語
命令生成手段と、各種バイトコードに含まれるオペラン
ド値について、機械語命令列への埋め込みの際の規則を
示すオペランド埋込情報を保持する埋込情報保持手段
と、前記埋込情報保持手段が保持するオペランド埋込情
報が示す規則に従って、前記機械語命令生成手段によっ
て生成された機械語命令列にオペランド値を埋め込むオ
ペランド埋込手段と、を有し、前記テンプレート保持手
段が保持する機械語テンプレートに含まれる機械語命令
列は、バイトコード実行用のインタプリタのコンパイル
及びアセンブルによって得られるオブジェクトコードか
ら生成されたものであり、前記埋込情報保持手段が保持
するオペランド埋込情報は、前記インタプリタのコンパ
イル及びアセンブルを前記インタプリタ中のオペランド
部分に異なる即値を設定しながら繰り返し実行させるこ
とで得られた複数パターンのアセンブリコード及びオブ
ジェクトコードに表れるオペランド値の差分を元に求め
られたものであること、を特徴とする。これによれば、
中間コードの生成、最適化などの処理や中間コード保存
用のメモリが不要なので、Javaコンパイル実行時の
使用メモリ量及びCPU負荷を小さくできる。また、他
の実行環境に移植する場合は、テンプレート及びオペラ
ンド埋込情報を移植先環境に適用されるものに交換する
だけでよいので、移植性にも優れているといえる。
【0092】また、前記Javaコンパイラは前記実行
環境で前記インタプリタと共存した状態で動作し、前記
テンプレート保持手段が保持するテンプレートに含まれ
る機械語命令列は、前記インタプリタにおいてバイトコ
ードの処理内容を記述した部分であるテンプレート用ソ
ースコードを前記インタプリタのソースコードと共に単
一ファイルとしてコンパイル及びアセンブルして得られ
るオブジェクトコードから生成されたものであること、
という特徴を有する、とすれば、ハイブリッド方式を採
用した環境においてインタプリタとの間で細かい単位の
切り替えを行ってもJavaプログラム実行を高速で行
える、という効果が生じる。
【0093】また、上に述べたような効果は、同様のコ
ンパイル手順からなるコンパイル方法、計算機を上記の
コンパイラとして動作させるためのコンパイラプログラ
ムによっても達成できる。また、上記の効果を達成する
Javaコンパイラが使用するテンプレート及び埋込情
報は、実行環境にあってJavaバイトコードを機械語
命令列に変換するJavaコンパイラが使用する変換用
のテンプレート及びオペランド埋込情報を生成するコン
パイル情報生成装置であって、バイトコード実行用のイ
ンタプリタのソースコードから各種バイトコードの処理
内容が記述された部分をテンプレート用ソースコードと
して切り出す切出し手段と、前記テンプレート用ソース
コードをコンパイルして各種バイトコードの処理内容を
表すテンプレート用アセンブリコードを得るアセンブリ
コード生成手段と、前記テンプレート用アセンブリコー
ドをアセンブルして各種バイトコードの処理内容を表す
テンプレート用オブジェクトを得るオブジェクト生成手
段と、前記アセンブリコード生成手段によるコンパイル
及び前記オブジェクト生成手段によるアセンブルを、前
記テンプレート用ソースコードにおけるオペランド部分
に異なる即値を設定しながら繰り返し実行させる繰り返
し制御手段と、前記オブジェクト生成手段が生成したテ
ンプレート用オブジェクトから、各種バイトコードを示
す識別情報とその処理内容に対応する機械語命令列とを
対応づけたテンプレートを生成するテンプレート生成手
段と、前記繰り返し制御手段の制御に従って前記アセン
ブリコード生成手段が各種バイトコード毎に生成した複
数のテンプレート用アセンブリコード、及び、前記繰り
返し制御手段の制御に従って前記オブジェクト生成手段
が各種バイトコード毎に生成した複数のテンプレート用
オブジェクト、に表れるオペランド値の差分を元に、バ
イトコード中のオペランド値をその処理内容に対応する
機械語命令列へ埋め込む際の規則を示すオペランド埋込
情報を各種バイトコード毎に生成する埋込情報生成手段
と、を有するという特徴を有するコンパイル情報生成装
置によって生成される。また、こうしたテンプレート及
び埋込情報は、同様の生成手順からなるコンパイル情報
生成方法、計算機を上記のコンパイル情報生成装置とし
て動作させるためのコンパイル情報生成プログラムによ
っても生成できる。
【0094】また、前記アセンブリコード生成手段につ
いて、前記テンプレート用ソースコードをコンパイルす
る際、前記実行環境におけるCPUの属性を反映したソ
ースコード用コンパイラを用いてコンパイルを行うこ
と、としてもよい。そうすれば、ある実行環境用に使用
していたJavaコンパイラを他の実行環境に移植する
場合、コンパイル情報生成装置にパラメータとして移植
先CPUの属性情報を入力するだけで、移植先CPUに
対応したテンプレート及びオペランド埋込情報が自動的
に生成でき、移植に要する作業の負荷は非常に軽い。
【図面の簡単な説明】
【図1】本発明に関わるJavaコンパイラの実施の形
態における構成を、同JITコンパイラ1が動作するJ
avaプログラム実行環境において示す図である。
【図2】同実施の形態におけるバイトコード及び、その
変換後の機械語命令列の一例を、対応するテンプレート
素片データ及びオペランド埋込情報の内容と共に示す図
である。
【図3】本発明に関わるJavaコンパイル情報生成装
置の本実施の形態における構成を示すブロック図であ
る。
【図4】同実施の形態におけるコンパイル情報生成装置
による生成処理の工程を示す図である。
【図5】同実施の形態におけるインタプリタの命令処理
部Cソースコード及び、これから生成されるテンプレー
ト用Cソースコードとインタプリタ命令処理部Cソース
コードとの一部を示す図である。
【図6】同実施の形態におけるインタプリタ用マクロ定
義及びテンプレート用マクロ定義の内容を示す図であ
る。
【図7】同実施の形態における切り出し処理の具体例を
示す図である。
【図8】同実施の形態においてテンプレート用マクロ定
義に設定されるオペランド即値の例を表形式で示す図で
ある。
【図9】同実施の形態におけるオペランド埋込情報の構
成とその一例とを示す図である。
【図10】本実施の形態においてオペランド埋込情報生
成の際に参照される複数種類のテンプレート用アセンブ
リコード及び、それらの生成使用されたテンプレート用
マクロ定義の内容を示す図である。
【図11】同実施の形態におけるテンプレート素片デー
タの構成を示す模式図である。
【図12】本実施の形態においてオペランド埋込情報生
成の際に参照される複数種類のテンプレート用アセンブ
リコード及び、それから生成されたオブジェクトコード
の内容を示す図である。
【図13】従来のJITコンパイラの構成とそのコンパ
イル処理の流れとを示す図である。
【符号の説明】
1 JITコンパイラ 11 アドレス管理部 12 分離部 13 機械語生成部 14 オペランド埋込部 15 アドレス変換テーブル 16 テンプレート 17 オペランド埋込情報 10 コンパイル情報生成装置 101 前処理部 102 コンパイル管理部 103 分離処理部 104 アセンブル実行部 105 繰り返し制御部 106 差分検出部 107 記憶部

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】 実行環境においてJavaプログラムを
    バイトコード単位で機械語命令列に変換するJavaコ
    ンパイラであって、 各種バイトコードとその処理内容を記述した機械語命令
    列とを対応づけた機械語テンプレートを保持するテンプ
    レート保持手段と、 前記テンプレート保持手段が保持する機械語テンプレー
    トを用いてバイトコードから機械語命令列を生成する機
    械語命令生成手段と、 各種バイトコードに含まれるオペランド値について、機
    械語命令列への埋め込みの際の規則を示すオペランド埋
    込情報を保持する埋込情報保持手段と、 前記埋込情報保持手段が保持するオペランド埋込情報が
    示す規則に従って、前記機械語命令生成手段によって生
    成された機械語命令列にオペランド値を埋め込むオペラ
    ンド埋込手段と、を有し、 前記テンプレート保持手段が保持する機械語テンプレー
    トに含まれる機械語命令列は、バイトコード実行用のイ
    ンタプリタのコンパイル及びアセンブルによって得られ
    るオブジェクトコードから生成されたものであり、 前記埋込情報保持手段が保持するオペランド埋込情報
    は、前記インタプリタのコンパイル及びアセンブルを前
    記インタプリタ中のオペランド部分に異なる即値を設定
    しながら繰り返し実行させることで得られた複数パター
    ンのアセンブリコード及びオブジェクトコードに表れる
    オペランド値の差分を元に求められたものであることを
    特徴とするJavaコンパイラ。
  2. 【請求項2】 前記Javaコンパイラは前記実行環境
    で前記インタプリタと共存した状態で動作し、 前記テンプレート保持手段が保持するテンプレートに含
    まれる機械語命令列は、前記インタプリタにおいてバイ
    トコードの処理内容を記述した部分であるテンプレート
    用ソースコードを前記インタプリタのソースコードと共
    に単一ファイルとしてコンパイル及びアセンブルして得
    られるオブジェクトコードから生成されたものであるこ
    と、 を特徴とする請求項1に記載のJavaコンパイラ。
  3. 【請求項3】 実行環境においてJavaプログラムを
    バイトコード単位で機械語命令列に変換するJavaコ
    ンパイル方法であって、 各種バイトコードとその処理内容を記述した機械語命令
    列とを対応づけた機械語テンプレートを用いてバイトコ
    ードから機械語命令列を生成する機械語命令生成手段
    と、 各種バイトコードに含まれるオペランド値について、機
    械語命令列への埋め込みの際の規則を示すオペランド埋
    込情報に従って、前記機械語命令生成ステップにおいて
    生成された機械語命令列にオペランド値を埋め込むオペ
    ランド埋込ステップとを有し、 前記機械語テンプレートに含まれる機械語命令列は、バ
    イトコード実行用のインタプリタのコンパイル及びアセ
    ンブルによって得られるオブジェクトコードから生成さ
    れたものであり、 前記オペランド埋込情報は、前記インタプリタのコンパ
    イル及びアセンブルを前記インタプリタ中のオペランド
    部分に異なる即値を設定しながら繰り返し実行させるこ
    とで得られた複数パターンのアセンブリコード及びオブ
    ジェクトコードに表れるオペランド値の差分を元に求め
    られたものであることを特徴とするJavaコンパイル
    方法。
  4. 【請求項4】 実行環境にあってJavaバイトコード
    を機械語命令列に変換するJavaコンパイル方法をコ
    ンピュータに実行させるためのプログラムであって、前
    記Javaコンパイル方法が、 各種バイトコードとその処理内容を記述した機械語命令
    列とを対応づけた機械語テンプレートを用いてバイトコ
    ードから機械語命令列を生成する機械語命令生成手段
    と、 各種バイトコードに含まれるオペランド値について、機
    械語命令列への埋め込みの際の規則を示すオペランド埋
    込情報に従って、前記機械語命令生成ステップにおいて
    生成された機械語命令列にオペランド値を埋め込むオペ
    ランド埋込ステップとを有し、 前記機械語テンプレートに含まれる機械語命令列は、バ
    イトコード実行用のインタプリタのコンパイル及びアセ
    ンブルによって得られるオブジェクトコードから生成さ
    れたものであり、 前記オペランド埋込情報は、前記インタプリタのコンパ
    イル及びアセンブルを前記インタプリタ中のオペランド
    部分に異なる即値を設定しながら繰り返し実行させるこ
    とで得られた複数パターンのアセンブリコード及びオブ
    ジェクトコードに表れるオペランド値の差分を元に求め
    られたものであることを特徴とするプログラム。
  5. 【請求項5】 実行環境にあってJavaバイトコード
    を機械語命令列に変換するJavaコンパイラが使用す
    る変換用のテンプレート及びオペランド埋込情報を生成
    するコンパイル情報生成装置であって、 バイトコード実行用のインタプリタのソースコードから
    各種バイトコードの処理内容が記述された部分をテンプ
    レート用ソースコードとして切り出す切出し手段と、 前記テンプレート用ソースコードをコンパイルして各種
    バイトコードの処理内容を表すテンプレート用アセンブ
    リコードを得るアセンブリコード生成手段と、 前記テンプレート用アセンブリコードをアセンブルして
    各種バイトコードの処理内容を表すテンプレート用オブ
    ジェクトを得るオブジェクト生成手段と、 前記アセンブリコード生成手段によるコンパイル及び前
    記オブジェクト生成手段によるアセンブルを、前記テン
    プレート用ソースコードにおけるオペランド部分に異な
    る即値を設定しながら繰り返し実行させる繰り返し制御
    手段と、 前記オブジェクト生成手段が生成したテンプレート用オ
    ブジェクトから、各種バイトコードを示す識別情報とそ
    の処理内容に対応する機械語命令列とを対応づけたテン
    プレートを生成するテンプレート生成手段と、 前記繰り返し制御手段の制御に従って前記アセンブリコ
    ード生成手段が各種バイトコード毎に生成した複数のテ
    ンプレート用アセンブリコード、及び、前記繰り返し制
    御手段の制御に従って前記オブジェクト生成手段が各種
    バイトコード毎に生成した複数のテンプレート用オブジ
    ェクト、に表れるオペランド値の差分を元に、バイトコ
    ード中のオペランド値をその処理内容に対応する機械語
    命令列へ埋め込む際の規則を示すオペランド埋込情報を
    各種バイトコード毎に生成する埋込情報生成手段と、を
    有することを特徴とするコンパイル情報生成装置。
  6. 【請求項6】 前記Javaコンパイラは、前記実行環
    境において前記インタプリタと共存して、ハイブリッド
    構成で使用されるものであり、 前記アセンブリコード生成手段は、前記テンプレート用
    ソースコードをコンパイルする際、前記インタプリタと
    併せて1つのファイルとしてコンパイルすること、 を特徴とする請求項5に記載のコンパイル情報生成装
    置。
  7. 【請求項7】 前記アセンブリコード生成手段は、前記
    テンプレート用ソースコードをコンパイルする際、前記
    実行環境におけるCPUの属性を反映したソースコード
    用コンパイラを用いてコンパイルを行うこと、 を特徴とする請求項5又は6に記載のコンパイル情報生
    成装置。
  8. 【請求項8】 実行環境にあってJavaバイトコード
    を機械語命令列に変換するJavaコンパイラが使用す
    る変換用のテンプレート及びオペランド埋込情報を生成
    するコンパイル情報生成方法であって、 バイトコード実行用のインタプリタのソースコードから
    各種バイトコードの処理内容が記述された部分をテンプ
    レート用ソースコードとして切り出す切出しステップ
    と、 前記テンプレート用ソースコードをコンパイルして各種
    バイトコードの処理内容を表すテンプレート用アセンブ
    リコードを得るアセンブリコード生成ステップと、 前記テンプレート用アセンブリコードをアセンブルして
    各種バイトコードの処理内容を表すテンプレート用オブ
    ジェクトを得るオブジェクト生成ステップと、 前記アセンブリコード生成ステップ及び前記オブジェク
    ト生成ステップを、前記テンプレート用ソースコードに
    おけるオペランド部分に異なる即値を設定しながら繰り
    返し実行させる繰り返し制御ステップと、 前記オブジェクト生成ステップにおいて生成されたテン
    プレート用オブジェクトから、各種バイトコードを示す
    識別情報とその処理内容に対応する機械語命令列とを対
    応づけたテンプレートを生成するテンプレート生成ステ
    ップと、 前記繰り返し制御ステップの制御に従って、前記アセン
    ブリコード生成ステップで各種バイトコード毎に生成さ
    れた複数のテンプレート用アセンブリコード、及び前記
    繰り返し制御ステップの制御に従って、前記オブジェク
    ト生成ステップにおいて各種バイトコード毎に生成され
    た複数のテンプレート用オブジェクト、に表れるオペラ
    ンド値の差分を元に、バイトコード中のオペランド値を
    その処理内容に対応する機械語命令列へ埋め込む際の規
    則を示すオペランド埋込情報を各種バイトコード毎に生
    成する埋込情報生成ステップと、を有することを特徴と
    するコンパイル情報生成方法。
  9. 【請求項9】 実行環境にあってJavaバイトコード
    を機械語命令列に変換するJavaコンパイラが使用す
    る変換用のテンプレート及びオペランド埋込情報を生成
    するコンパイル情報生成方法をコンピュータに実行させ
    るためのプログラムであって、前記コンパイル情報生成
    方法が、 バイトコード実行用のインタプリタのソースコードから
    各種バイトコードの処理内容が記述された部分をテンプ
    レート用ソースコードとして切り出す切出しステップ
    と、 前記テンプレート用ソースコードをコンパイルして各種
    バイトコードの処理内容を表すテンプレート用アセンブ
    リコードを得るアセンブリコード生成ステップと、 前記テンプレート用アセンブリコードをアセンブルして
    各種バイトコードの処理内容を表すテンプレート用オブ
    ジェクトを得るオブジェクト生成ステップと、 前記アセンブリコード生成ステップ及び前記オブジェク
    ト生成ステップを、前記テンプレート用ソースコードに
    おけるオペランド部分に異なる即値を設定しながら繰り
    返し実行させる繰り返し制御ステップと、 前記オブジェクト生成ステップにおいて生成されたテン
    プレート用オブジェクトから、各種バイトコードを示す
    識別情報とその処理内容に対応する機械語命令列とを対
    応づけたテンプレートを生成するテンプレート生成ステ
    ップと、 前記繰り返し制御ステップの制御に従って、前記アセン
    ブリコード生成ステップで各種バイトコード毎に生成さ
    れた複数のテンプレート用アセンブリコード、及び前記
    繰り返し制御ステップの制御に従って、前記オブジェク
    ト生成ステップにおいて各種バイトコード毎に生成され
    た複数のテンプレート用オブジェクト、に表れるオペラ
    ンド値の差分を元に、バイトコード中のオペランド値を
    その処理内容に対応する機械語命令列へ埋め込む際の規
    則を示すオペランド埋込情報を各種バイトコード毎に生
    成する埋込情報生成ステップと、を有することを特徴と
    するプログラム。
JP2002298479A 2001-10-31 2002-10-11 Javaコンパイラ、及び、当該Javaコンパイラが使用するコンパイル情報の生成装置 Expired - Fee Related JP4163927B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002298479A JP4163927B2 (ja) 2001-10-31 2002-10-11 Javaコンパイラ、及び、当該Javaコンパイラが使用するコンパイル情報の生成装置

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2001334008 2001-10-31
JP2001-334008 2001-10-31
JP2002298479A JP4163927B2 (ja) 2001-10-31 2002-10-11 Javaコンパイラ、及び、当該Javaコンパイラが使用するコンパイル情報の生成装置

Publications (2)

Publication Number Publication Date
JP2003202994A true JP2003202994A (ja) 2003-07-18
JP4163927B2 JP4163927B2 (ja) 2008-10-08

Family

ID=27666702

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002298479A Expired - Fee Related JP4163927B2 (ja) 2001-10-31 2002-10-11 Javaコンパイラ、及び、当該Javaコンパイラが使用するコンパイル情報の生成装置

Country Status (1)

Country Link
JP (1) JP4163927B2 (ja)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1311343C (zh) * 2004-01-17 2007-04-18 三星电子株式会社 用于改进爪哇虚拟机性能的方法和系统
JP2008299835A (ja) * 2007-06-04 2008-12-11 Samsung Electronics Co Ltd ジャバ変換加速装置および方法
JP2009509277A (ja) * 2005-08-29 2009-03-05 ソニー株式会社 ディスクオーサリングのテンプレート化コマンド
JP4844971B2 (ja) * 2003-04-22 2011-12-28 インターナショナル・ビジネス・マシーンズ・コーポレーション インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
JP2012512449A (ja) * 2008-12-16 2012-05-31 インターナショナル・ビジネス・マシーンズ・コーポレーション 演算データ構造
JP2015507793A (ja) * 2011-12-23 2015-03-12 ザ アリゾナ ボード オブ リージェンツ オン ビハーフ オブ ザ ユニバーシティー オブ アリゾナ データベース管理システムにおけるマイクロ特化の方法
CN106663019A (zh) * 2014-05-13 2017-05-10 甲骨文国际公司 处理值类型
US10365900B2 (en) 2011-12-23 2019-07-30 Dataware Ventures, Llc Broadening field specialization
KR20190092564A (ko) * 2017-01-26 2019-08-07 알리바바 그룹 홀딩 리미티드 서비스 처리 방법 및 장치
US10733099B2 (en) 2015-12-14 2020-08-04 Arizona Board Of Regents On Behalf Of The University Of Arizona Broadening field specialization
US12045653B2 (en) 2017-06-22 2024-07-23 Dataware Ventures, Llc Field specialization to reduce memory-access stalls and allocation requests in data-intensive applications

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4844971B2 (ja) * 2003-04-22 2011-12-28 インターナショナル・ビジネス・マシーンズ・コーポレーション インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
CN1311343C (zh) * 2004-01-17 2007-04-18 三星电子株式会社 用于改进爪哇虚拟机性能的方法和系统
JP2009509277A (ja) * 2005-08-29 2009-03-05 ソニー株式会社 ディスクオーサリングのテンプレート化コマンド
US8213771B2 (en) 2005-08-29 2012-07-03 Sony Corporation Templatized commands in disc authoring
US9038039B2 (en) 2007-06-04 2015-05-19 Samsung Electronics Co., Ltd. Apparatus and method for accelerating java translation
JP2008299835A (ja) * 2007-06-04 2008-12-11 Samsung Electronics Co Ltd ジャバ変換加速装置および方法
CN101344857A (zh) * 2007-06-04 2009-01-14 三星电子株式会社 用于加速Java翻译的设备和方法
JP2012512449A (ja) * 2008-12-16 2012-05-31 インターナショナル・ビジネス・マシーンズ・コーポレーション 演算データ構造
JP2018014142A (ja) * 2011-12-23 2018-01-25 ザ アリゾナ ボード オブ リージェンツ オン ビハーフ オブ ザ ユニバーシティー オブ アリゾナ データベース管理システムにおけるマイクロ特化の方法
JP2015507793A (ja) * 2011-12-23 2015-03-12 ザ アリゾナ ボード オブ リージェンツ オン ビハーフ オブ ザ ユニバーシティー オブ アリゾナ データベース管理システムにおけるマイクロ特化の方法
US10365900B2 (en) 2011-12-23 2019-07-30 Dataware Ventures, Llc Broadening field specialization
CN106663019A (zh) * 2014-05-13 2017-05-10 甲骨文国际公司 处理值类型
CN106663019B (zh) * 2014-05-13 2020-02-07 甲骨文国际公司 处理值类型
US10733099B2 (en) 2015-12-14 2020-08-04 Arizona Board Of Regents On Behalf Of The University Of Arizona Broadening field specialization
KR20190092564A (ko) * 2017-01-26 2019-08-07 알리바바 그룹 홀딩 리미티드 서비스 처리 방법 및 장치
US10782998B2 (en) 2017-01-26 2020-09-22 Alibaba Group Holding Limited Blockchain-based transaction processing method and apparatus
US10817330B2 (en) 2017-01-26 2020-10-27 Advanced Technologies Co., Ltd. Service processing method and apparatus
KR102201844B1 (ko) * 2017-01-26 2021-01-13 어드밴스드 뉴 테크놀로지스 씨오., 엘티디. 서비스 처리 방법 및 장치
US11099887B2 (en) 2017-01-26 2021-08-24 Advanced New Technologies Co., Ltd. Service processing method and apparatus
US12045653B2 (en) 2017-06-22 2024-07-23 Dataware Ventures, Llc Field specialization to reduce memory-access stalls and allocation requests in data-intensive applications

Also Published As

Publication number Publication date
JP4163927B2 (ja) 2008-10-08

Similar Documents

Publication Publication Date Title
US6438745B1 (en) Program conversion apparatus
US7313773B1 (en) Method and device for simulator generation based on semantic to behavioral translation
Fraser et al. A code generation interface for ANSI C
CA1273708A (en) System for generating software source code components
EP1074911B1 (en) Aspect-oriented programming
US5396631A (en) Compiling apparatus and a compiling method
KR100643268B1 (ko) 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템
Cifuentes et al. Specifying the semantics of machine instructions
US20040230958A1 (en) Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
WO1999057635A1 (en) Encoding machine-specific optimizations in generic byte code by using local variables as pseudo-registers
Fauth et al. Automated generation of DSP program development tools using a machine description formalism
JP4163927B2 (ja) Javaコンパイラ、及び、当該Javaコンパイラが使用するコンパイル情報の生成装置
Aslam et al. Optimized java binary and virtual machine for tiny motes
US9280326B1 (en) Compiler retargeting based on instruction semantic models
Fraser A language for writing code generators
KR100771057B1 (ko) 모바일 플랫폼의 중간 언어 변환 장치 및 그 방법
Troger et al. Analysis of virtual method invocation for binary translation
Glossner et al. Sandbridge software tools
Fraser et al. The lcc 4. x code-generation interface
WO2001057654A2 (en) Preprocessing of interfaces to allow fast call of native elements
Krohn A parallel approach to code generation for Fortran like compilers
Sunitha Compiler construction
Johnstone et al. Reverse compilation of Digital Signal Processor assembler source to ANSI-C
Cao et al. Compiler backend generation for application specific instruction set processors
TR2022021848A1 (tr) Genel ayriştirici i̇şlemci̇si̇

Legal Events

Date Code Title Description
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: 20080122

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080408

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080605

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: 20080701

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: 20080725

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

Free format text: PAYMENT UNTIL: 20110801

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4163927

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20110801

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20120801

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20130801

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees