Date: Sun, 31 Jan 99 16:09:04 JST From: SHUDO Kazuyuki Subject: [JavaHouse-Brewers:23236] shuJIT 0.2.7 To: java-house-brewers at java-house.etl.go.jp (JavaHouse Brewers ML) Message-Id: <199901310708.QAA05654@cafe.muraoka.info.waseda.ac.jp> 首藤です。 Sun 社の JVM (JDK,JRE) / Linux,FreeBSD / x86 用の JIT コンパイラ、 shuJIT の 0.2.7 をリリースしました。 http://www.shudo.net/jit/index-j.html (日本語) http://www.shudo.net/jit/ (英語) 主な変更点 (0.2.6 -> 0.2.7) - OS の signal を利用することで (*)、 生成するコード中での null check をほぼ省けた。 - 64bit 整数型のシフトのコードを変更した。(gcc 2.7 のもの -> egcs のもの) 主な変更点 (0.2.5 -> 0.2.6) - class initializer は JIT 困憊^H^Hコンパイルしないようにした。 - メソッド呼び出しの性能を改善した。 各種処理を行うタイミングの変更による。 (*) signal の利用とは、SIGSEGV を利用して NullPointerException を検出することです。 少なくとも TYA (JIT for Linux/FreeBSD) は以前から行っていて 私も実装したいと思っていたのですが、Linux 2.0.X の制約から 堅牢でなく汚いコードが必要となるので、涙を飲んで我慢していました。 まあ堅牢な方法を思いついたので今回実装しました。 signal を利用しない場合、参照が null であるか否かを判定 するコードを生成する必要がありますが、明に判定せずに、 null (Sun JVM では 0 番地) にアクセスしてしまった時点で 発生する SIGSEGV をとらえて、場合によっては NullPointerException が発生した、と処理します。 以下、JDK for Linux と最近の glibc について。 手もとの Linux なシステムで libc を glibc 2.0.7 から 2.0.110 に入れ換えたところ、JDK 1.1.7v1a が動作しなくなっ て焦りました。JDK を自分でコンパイルし直せば動作しそうな のですが、配布されているバイナリは最近の glibc に対応し ていません。この問題に対して移植チームのひとりは 「最近の glibc には JDK 1.2 で対応する」 と答えたそうです。glibc を新しくしようと考えている方はご注意を。 egcs-1.1.1 と binutils-2.9.1.0.19a のパッケージ (RPM) を 発見し、喜び勇んでインストールしたところ、egcs が動きません。 どうも libc も新しくする必要がある気配なので glibc 2.0.110 を インストールしたら JDK 1.1.7v1a が動かなかった…と。はまりました。 環境を元に戻して、ついでに Linux 2.2.1 をインストールして、 手もとのマシン (Dynabook SS 3000) で音を鳴らすために OPL3SAx ドライバをモジュールにして使う方法を調べて、カーネルハックして… で 2日間潰れてしまいました… SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh at muraoka.info.waseda.ac.jp