$Id$

[20000903]

$B%P%$%H%3!<%IL?Na(B invokespecial, invokestatic $B$G8F$S=P$7$r(B
$B>JN,$G$-$k>l9g$K!"%P%$%H%3!<%IL?Na$r(B JVM $B$KB8:_$7$J$$(B shuJIT $BFbItL?Na(B
(invokeignored_static, invokeignored_static_quick) $B$K=q$-49$($F$7$^$C$F$$$?!#(B
$B=$@0!#(B
(compile.c)

$B8F$P$l$?%a%=%C%I$,Nc30$r(B throw $B$7$?$+$I$&$+$NH=Dj$r!"(B
callee $B$+$i(B caller $B$K0\$7$?!#(B
$B$3$l$^$G(B JIT compiled code $B$+$i$N(B return $B;~$K!"(B
%eax $B$K(B !exceptionOccurred(ee) $B$rF~$l$F$$$?$,!"$3$l$r>J$$$?!#(B
return $B8e$K(B %eax $B$,6u$$$?!#(B
(code.c)

0.6.4 $B%j%j!<%9!#(B

[20000902]

dstore, fstore, dastore, fastore $B$K$D$$$F$b!"D>A0$NFbItL?Na(B dst, fst $B$H(B
combine $B$9$k(B peephole $B:GE,2=$r<BAu$7$?!#(B
Linpack benchmark $B$N7k2L$,(B 13.205 $B$K8~>e(B (Pentium II / 333 MHz)$B!#(B
(optimize.c, code.c)

[20000901]

$BIbF0>.?tE@?t$NG[Ns$+$i(B faload, daload $B$GCM$rF@$k:]$K!"(B
$B%9%?%C%/$d@0?t%l%8%9%?$r7PM3$5$;$J$$$?$a$N(B peephole $B:GE,2=$r<BAu$7$?!#(B
$BFbItL?NaNs(B laload, flush_cache, dld $B$r(B daload_dld $B$KJQ49$9$k!#(B
Linpack benchmark $B$N7k2L$,(B 9.035 -> 11.257 $B$H8~>e(B (Pentium II / 333 MHz)$B!#(B
(optimize.c, code.c)

$BFbItL?NaNs(B dst, fill_cache, lstore $B$r(B dst_dstore $B$KJQ49$9$k(B
peephole $B:GE,2=$r<BAu!#(B
(code.c, optimize.c)

[20000829]

0.6.3 $B%j%j!<%9!#(B

$B$3$l$^$GFbItL?Na$NHV9f$O(B 256 $B$+$i;O$a$F$$$?$H$3$m!"(B
230 $B$+$i(B 253 $B$^$G$NCM$b;H$&$3$H$K$7$F!"(B
$BFbItL?Na$N:GBgHV9f$r(B 333 $B$+$i(B 309 $B$H>.$5$/$7$?!#(B
libshujit.so $B$N%5%$%:$,Ls(B 4 KB $B8:>/!#(B
$BFbItL?Na$R$H$D$"$?$j(B 200 $B%P%$%H>CHq$7$F$$$k!#(B
(opcodes_internal.h)

$B%k!<%W$N@hF,$r(B 16 $B%P%$%H6-3&$K(B align $B$9$k$?$a$K!"$3$l$^$GC1$K(B
0x90 (nop) $B$r5M$a$F$$$?$H$3$m!"(B0xeb XX (jmp XX) $B$r5M$a$k$h$&$K$7$?!#(B
(compile.c)

[20000828]

$B%9%?%C%/>uBV$N99?7(B (updateStates()) $B$N%P%0$r=$@0!#(B
goto, ret $BL?Na$N8e$N>uBV$r%^%/%m(B STATE_AFTER_JUMP $B$NCM$K@_Dj$7B;$M$F$$$?!#(B
CaffeineMark 3.0 $B$N(B Logic, String $B$N%9%3%"$,Bg$-$/8~>e(B
(Logic: 4900 -> 5900, String: 1800 -> 2350)$B!#(B
(compile.c)

$B%8%c%s%WL?Na$N<!$@$1$G$J$/!"(Breturn, [ilfda]return $BL?Na$N8e$N>uBV$b(B
updateStates() $BFb$G(B 0 $B$K8GDj$9$k$h$&$K$7$?!#(B
(compile.c)

[20000827]

$BFbItL?Na(B inv_vir_varspace $B$K$F!"K\Mh$J$i%m!<%+%kJQ?t$NNN0h$O(B
mb->nlocal - mb->args_size $B$H$9$Y$-$H$3$m!">r7oJ,4t$r8:$i$9$?$a(B
$BC1$K(B mb->nlocal $B$K$7$?!#(B
(code.c)

[20000826]

resolveExcRetSwitch() (compile.c) $B$G$b!"(B
jmp (0xe9) XX XX XX XX $B$r(B jmp (0xeb) XX $B$K=q$-49$($k$h$&$K$7$?!#(B
(see [20000822])
(compile.c)

0.6.2 $B%j%j!<%9!#(B

$B4X?t8F$S=P$7$N:]$K(B %esi $B$r%9%?%C%/$KB`Hr$9$k$N$r$d$a$?!#(B
$B%^%/%m(B FUNCCALL* (code.h) $B$+$i!"(Bpushl, popl $B$r:o=|!#(B
(code.h)

$B%a%=%C%I8F$S=P$7$N:]$K(B %esi $B$r%9%?%C%/$KB`Hr$9$k$N$r$d$a$?!#(B
$BFbItL?Na(B inv_core $B$N%3!<%I(B (code.c) $B$rJQ99!#(B
(code.c)

[20000825]

invoke* $BL?Na$r!"$$$/$D$+$NFbItL?Na$KJ,3d!#(B
(opcodes_internal.h, code.c, compile.c)

invokevirtual $BL?Na$KBP$7$F!"$3$l$^$G>o$K(B
$B%^%/%m(B obj_array_methodtable() (interpreter.h) $BAjEv$N(B
$B%3!<%I$r@8@.$7$F$-$?$H$3$m!"(Bjava.lang.Object $B0J30$KBP$9$k8F$S=P$7$KBP$7$F$O(B
$B%^%/%m(B obj_methodtable() $BAjEv$N%3!<%I$r@8@.$9$k$h$&$K$7$?!#(B
(code.c, compile.c)

[20000822]

resolveJumpInstructions() (compile.c) $B$K$F!"(B
jmp (0xe9) XX XX XX XX $B$r(B jmp (0xeb) XX $B$K=q$-49$($k$h$&$K$7$?!#(B
CaffeineMark 3.0 $B$N(B Logic $B$N%9%3%"$,Bg$-$/8~>e(B: 4400 -> 4900$B!#(B
(compile.c)

[20000821]

monitorenter, monitorexit $BL?Na$G(B monitorEnter2(), monitorExit2() $B$r8F$S=P$9:]!"(B
TOS $BIU6a$rJ];}$9$k%l%8%9%?(B %edx, %ecx $B$NJ]B8$rK:$l$F$$$?!#(B
(code.c)

$BFbItL?Na(B invokeignored_quick $B$G$b(B SIGSEGV $B$G(B NullPointerException $B$r(B
$B8!=P$9$k$h$&$K$7$?!#$3$l$^$G$OL@<(E*$K(B NULL $B$+$I$&$+%A%'%C%/$7$F$$$?!#(B
(code.c)

static bind $B2DG=$J%a%=%C%I$N8F$S=P$7$rFbItL?Na(B invokeignored_* $B$KJQ99$9$k:]!"(B
$B%3%s%9%H%i%/%?8F$S=P$7$K$D$$$F$O(B null check $B$N%3!<%I$r@8@.$7$J$$$h$&$K$7$?!#(B
null $B$KBP$9$k%3%s%9%H%i%/%?8F$S=P$7$O5/$-F@$J$$$N$G!#(B
(compile.c)

$B$"$k%3!<%I$r0lEY$@$1<B9T$5$;$k$?$a$N<+8J=q$-49$($NJ}K!$rJQ$($?!#(B
nop $BL?Na$r>e=q$-$9$kJ}K!$+$i!"(Bjmp XX (0xeb XX) $B$r>e=q$-$9$kJ}K!$KJQ$($?!#(B
(code.c)

0.6.1 $B%j%j!<%9!#(B

[20000820]

athrow, monitor{enter,exit} $BL?Na$G$b(B SIGSEGV $B$G(B NullPointerException $B$r(B
$B8!=P$9$k$h$&$K$7$?!#$3$l$^$G$OL@<(E*$K(B NULL $B$+$I$&$+%A%'%C%/$7$F$$$?!#(B
$B%^%/%m(B NULL_TEST_CANT_BE_ELIMINATED() (code.h) $B$rGS$7$?!#(B
(code.c, code.h)

$B<+8J=q$-49$($,$^$C$?$/9T$o$l$F$$$J$+$C$?$N$r=$@0!#(B
(code.c)

[20000818]

$B%^%/%m(B OBJ_ARRAY_METHODTABLE() (code.h) $B$N$o$:$+$JL5BL$r>J$-!"(B
destination $B$r(B %eax $B$KFC2=$5$;$?HG(B OBJ_ARRAY_METHODTABLE_TO_EAX $B$rMQ0U$7$?!#(B
(code.h)

[20000817]

$B%a%=%C%I8F$S=P$7;~$N=hM}$G!"(Bcompiled code $B$rD>@\8F$S=P$9:]$K$O(B
$BITMW$J$b$N(B (returnpc $B$H(B lastpc $B$N@_Dj(B) $B$r:o8:!#(B
(code.c)

0.6.0 $B%j%j!<%9!#(B

[20000816]

JIT compiled code $B$+$i$N%a%=%C%I8F$S=P$7$G!"(B
$B8F$S=P$7@h$,(B JIT compiled code $B$+$I$&$+$NH=Dj$r(B
invocationHelper() (runtime.c) $B$+$i(B compiled code $B$K0\$7$?!#(B
(code.c, runtime.c)

JIT compiled code $B$I$&$7$,D>@\8F$S9g$&$H(B JavaFrame $B$,:n@.$5$l$J$$$N$G!"(B
framePrev() (compiler.c) $B$r$-$A$s$H<BAu$7$?!#(B
framePrev() $B$+$i%U%l!<%`%]%$%s%?(B (%ebp) $B$rF@$i$l$k$h$&$K!"(B
EE()->current_frame->vars $B$K$=$N;~E@$N(B %ebp $B$rF~$l$k$h$&$K$7$?!#(B
(code.c)

$B;EJ}$J$/!"%a%=%C%I$N%3%s%Q%$%k8e$K(B
  methodblock->fb.access |= ACC_MACHINE_COMPILED
$B$H$9$k$h$&$K$7$?!#(B
$B$3$l$r$7$F$*$+$J$$$H!"(BJVM $B$O%3%s%Q%$%k:Q$_%U%l!<%`$H$_$J$7$F$/$l$J$$$?$a!#(B
(compile.c)

JIT compiled code $B$I$&$78F$S=P$9>u67$G$-$A$s$HF/$/$h$&$J(B
$BFbItL?Na(B direct_inv $B$r<BAu$7$?!#(B
$B$3$NFbItL?Na$O(B static bind $B2DG=$J%a%=%C%I$NF,$KA^F~$5$l!"(B
$B8F$S=P$785$N%3!<%I$r=q$-49$($k!#(B
(code.c)

[20000814]

code DB $B$K%3!<%I$rJ]B8$9$kA0$K!"(Btableswitch, lookupswitch $BL?Na$N$?$a$K(B
assembledCode() (code.c) $B$N%"%I%l%9$r2r7h$7$F$7$^$C$F$$$?!#(B
assembledCode() $B$N%"%I%l%92r7h$r(B resolveExcRetSwitch() ($BJ]B8A0(B) $B$+$i(B
resolveDynamicConstants() ($B%m!<%I8e(B) $B$K0\$7$?!#(B
(compile.c)

code DB $B$rM-8z$K$7$?>l9g!"FbItL?Na(B invokestatic_quick $B$O;H$o$:$K!"(B
invokestatic $BL?Na$r;H$&$h$&$K$7$?!#(B
$B%/%i%9$,=i4|2=:Q$_$G$"$k$3$H$r2>Dj$G$-$J$$$?$a!#(B
(compile.c)

getstatic{,2}$B$K$D$$$F$b!"(B
code DB $B$,M-8z$J>l9g$K$O(B quick $BL?Na$r;H$o$J$$$h$&$K$7$?!#(B
demo/applet/WireFrame/example1.html $B$GLdBj$,5/$-$?!#(B
(compile.c)

invocationHelper() (runtime.c) $B$K$F!"(BJIT compiled code $B$r8F$S=P$9:]$K$O(B
info = (CodeInfo *)method->CompiledCodeInfo $B$r<B9T$7$J$/$F:Q$`$h$&$K$7$?!#(B
(runtime.c)

[20000813]

$B;H$($J$/$J$C$F$$$?(B code DB $B5!G=$,$-$A$s$HF0:n$9$k$h$&$K$7$?!#(B
(compile.c)

[20000811]

Blackdown JDK 1.2.2 FCS $B$G$O!"(BRC4 $B$^$G$H$O0[$J$j!"(B
EE()->exceptionKind $B$,(B EXCKIND_NONE $B0J30!"(B
$B$D$^$j(B exceptionOccurred(ee) $B$,??$N>uBV$@$H!"(B
constant pool $B$N%(%s%H%j$N2r7h(B (ResolveClassConstantFromClass2()) $B$,<:GT$9$k!#(B
searchCatchFrame() (runtime.c) $B$GLdBj$,82:_2=$7$?$N$G!"(B
Resolve..() $B$r8F$S=P$9:]$O(B EE()->exceptionKind $B$r(B
EXCKIND_NONE $B$K$9$k$h$&$K$7$?!#(B
(runtime.c)

[20000810]

compiler.h $B$+$i!"FbItL?Na$N(B #define $B$r(B opcodes_internal.h $B$KJ,N%$7$?!#(B
(compiler.h)

[20000809]

makePCTable() (compile.c) $BCf$G!"(B
processAnOpcode() $B$,<:GT$7$?>l9g$K(B -1 $B$rJV$9$H$$$&2>Dj$r;_$a$?!#(B
(compile.c)

[20000731]

ldiv $BL?Na$G(B __divdi3(), __moddi3() $B$r8F$S=P$9:]!"(B
%ebp, %esi ($BJQ?t(B vars $BAjEv(B) $B$@$1$G$J$/!"(B%ebx $B$b%P%C%/%"%C%W!"(B
signal handler $B$G%j%9%H%"$9$k$h$&$K$7$?!#(B
$B4D6-$K$h$C$F$O(B %ebx $B$r2u$5$l$k$3$H$,$"$k$?$a!#(B
(code.c, signal.c)

symbolInSystemClassLoader() $B$G%7%s%\%k$N%"%I%l%9$rC5$9:]!"(B
FreeBSD $B>e$N(B JDK 1.2.2 $B$G$O(B jre/lib/i386/classic/libjvm.so $B$+$i$b(B
$BC5$9$h$&$K$7$?!#(B
(linker.c)

[20000727]

once_in_new() (runtime.c) $B$G!"8=:_<B9TCf$N%a%=%C%I$,=jB0$9$k%/%i%9$r!"(B
ee->current_frame->current_method->fb.clazz $B$H$7$F<hF@$9$k$N$r;_$a!"(B
$B0z?t$H$7$F<u$1<h$k$h$&$K$7$?!#(B
JIT compiled code $B$I$&$7$ND>@\8F$S=P$7$G(B JavaFrame $B$r:n$i$J$$>l9g$G$b(B
$B$&$^$/F0$/$h$&$K!#(B
(runtime.c, code.c, compiler.h)

[20000722]

$BFbItL?Na(B direct_inv $B$rDI2C!#$3$NL?Na$O!"(B
compiled -> invocationHelper() -> invokeJITCompiledMethod() -> compiled
$B$H$$$&(B call chain $B$r!"D>@\8F$S=P$7(B (compiled -> compiled) $B$K(B
$B<+8J=q$-49$($9$k!#(B
back trace $B$NJd@0(B (JITInterface.CompiledFramePrev() $B$N=hM}(B) $B$OL$<BAu!#(B
compiled code $B$N(B 2$BEYL\$N8F$S=P$7$G!"<+8J=q$-49$($,5/$3$k!#(B
1$BEYL\$O!"(BcompileAndInvokeMethod() -> invokeJITCompiled() -> compiled $B$H!"(B
call chain $B$,DL>o$H$O0[$J$k$?$a!#(B
(code.c, compile.c, compiler.h)

[20000716]

invocationHelper() (runtime.c) $B$+$i(B JIT compiled code $B$X$NJV$jCM$r!"(B
ee->exceptionKind $B$K$7$?!#(B
(runtime.c, code.c)

[20000715]

invokeJITCompiledMethod() (invoker.c) $B$+$i(B JIT compiled code $B$r8F$s$@:]!"(B
$B$3$l$^$G$O(B JIT compiled code $BB&$G(B opcode[-1] (, opcode[-2]) $B$KJV$jCM$r(B
$B@_Dj$7$F$$$?$H$3$m!"(BinvokeJITCompiledMethod() $BB&$G9T$&$h$&$K$7$?!#(B
(invoker.c, code.c)

JIT compiled code $B$+$i(B return $B$9$k:]!"(B
%eax $B$K(B ee->exceptionKind $B$rF~$l$k$h$&$K$7$?!#(B
JIT compiled code $B$I$&$7D>@\8F$s$@>l9g$KHw$($F!#(B
(code.c)

[20000714]

JIT compiled code $B$+$i(B invocationHelper() (runtime.c) $B$r8F$s$GLa$C$?8e!"(B
%ecx, %edx $B$NFbMF$rGK2u$7$J$$$h$&$K$7$?!#(B
JIT compiled code $B$I$&$7D>@\8F$S9g$($k$h$&$K$9$k$?$a$NI[@P!#(B
(code.c, compile.c)

[20000712]

$BNc30$N(B instantiation $B=hM}(B ($BFbItL?Na(B exc_new) $B$b(B
compiled code $B$N30(B ($B4X?t(B exceptionHandlerWrapper) $B$K0\$7$?!#(B
(see [20000710])
(compile.c, code.c)

[20000710]

invokeignored_static $BL?Na$K$b!"%/%i%9$N=i4|2=%3!<%I$r;}$?$J$$(B
invokeignored_static_quick $BL?Na$H$$$&%P%j%(!<%7%g%s$rMQ0U$7$?!#(B
(compile.c, code.c)

$BNc30$r07$&%3!<%I(B ($BFbItL?Na(B exception_handler) $B$N=hM}$r!"(B
compiled code $B$N30(B ($B4X?t(B exceptionHandlerWrapper) $B$K0\F0!#(B
$B@8@.$5$l$k%3!<%I$N%5%$%:$r:o8:!#(B
(code.c)

[20000708]

invokestatic, invokestatic_quick $BL?Na$N<B9T;~!"(B
$B%/%i%9$,=i4|2=:Q$_$+$r>o$K%A%'%C%/$7$F$7$^$C$F$$$?$N$r;_$a$?!#(B
$B%3%s%Q%$%k;~$K=i4|2=:Q$_$N%/%i%9$K$D$$$F$O!"=i4|2=%3!<%I$r@8@.$7$J$$!#(B
(compile.c, code.c)

[20000706]

$B<+8J=q$-49$($NJ}K!$rJQ99!#(B
1 $B%P%$%H$:$D(B 2$B2s=q$-49$($F$$$?$H$3$m!"(B2 $B%P%$%H$^$H$a$F=q$-49$($k$h$&$K$7$?!#(B
$BB>$N%9%l%C%I$,<B9TCf$N%3!<%I$r=q$-49$($k>l9g$N0BA4@-$,8~>e!#(B
(code.c)

getstatic, putstatic, getstatic2, putstatic2 $BL?Na$N<B9T;~!"(B
$B%/%i%9$,=i4|2=:Q$_$+$r>o$K%A%'%C%/$7$F$7$^$C$F$$$?$N$r;_$a$?!#(B
$B%3%s%Q%$%k;~$K=i4|2=:Q$_$N%/%i%9$K$D$$$F$O!"=i4|2=%3!<%I$r@8@.$7$J$$!#(B
(compile.c, code.c)

[20000430]

0.5.2 $B%j%j!<%9!#(B

[20000429]

$B%k!<%W$N@hF,$r(B 16 $B%P%$%H6-3&$K@0Ns$9$k$h$&$K$7$?!#(B
(compile.c)

configure $B%9%/%j%W%H$,(B pgcc $B$rG'<1$9$k$h$&$K$7$?!#(B
(configure.in)

pre-assembled code $BCf$N>r7oJ,4tL?Na$r!"(B
$BJ,4t3NN($r9MN8$7$?$b$N$KJQ99$7$?!#(B
(code.c)

[20000426]

0.5.1 $B%j%j!<%9!#(B

[20000425]

0.5.0 $B%j%j!<%9!#(B

JDK 1.1 $BMQ$N4X?t(B InitClass() (in runtime.c) $B$K$F!"(B
ResolveClass() (JDK $BFb4X?t(B) $B$r8F$VA0$K(B methodblock->info $B$r(B
$B=i4|2=$7$F$*$/$h$&$K$7$?!#(B
$B$3$N$?$a$K(B initializeClassForJIT() (in compiler.c) $B$N%$%s%?%U%'!<%9$rJQ$($?!#(B
ResolveClass() $B$,(B InitializeForCompiler() (JDK $BFb4X?t(B) $B$r8F$VA0$K(B
methodblock->info $B$,MW5a$5$l$F(B SIGSEGV $B$,H/@8$7$F$$$?!#(B
JPython 1.1 $B$GH/3P!#(B
[Thanks $B9b66=(L@$5$s(B <htaka@nalgo.co.jp> for a bug report]
(runtime.c, compiler.c, compiler.h)

lookupswitch $BL?Na$G(B npairs $B$,(B 0 $B$N>l9g$rA[Dj$7$F$$$J$+$C$?$N$r=$@0!#(B
JPython 1.1 $B$GH/3P!#(B
[Thanks $B9b66=(L@$5$s(B <htaka@nalgo.co.jp> for a bug report]
(code.c)

$BIbF0>.?tE@?t$N%9%H%"!"%m!<%I$r=|5n$9$k:GE,2=$r!"(B
$BC1@:EY?t$K$D$$$F$O9T$o$J$$$h$&$K$7$?!#(B
$B4]$a@:EY$rG\@:EY$K@_Dj$7$?$^$^$G(B
Java $B8@8l;EMM$,Dj$a$k%;%^%s%F%#%/%9$r<i$k$?$a!#(B
(optimize.c)

[20000424]

basic block $B$rG'<1$9$k$h$&$K$7$?!#(B
makeBlockStruct() (in compile.c) $B$rMQ0U!#(B
peephole $B:GE,2=$N:]$K4pK\%V%m%C%/$r$^$?$$$G$N:GE,2=$rM^@)$9$k$?$a!#(B
(compile.c, compiler.h, optimize.c)

[20000423]

$BFbItL?Na$,J];}$9$k%P%$%H%3!<%I>e$N%W%m%0%i%`%+%&%s%?$r!"(B
$B%P%$%H%3!<%IL?Na$H$7$F$OB8:_$7$J$$L?Na$K$D$$$F$b(B
$B$-$A$s$H$7$?CM$,F~$k$h$&$K$7$?!#(B
processAnOpcode() (in compile.c) $B$N%$%s%?%U%'!<%9$rJQ99!#(B
$B%8%c%s%W@h$,$-$A$s$H$"$k%P%$%H%3!<%IL?Na$N@hF,$r;X$9$h$&$K!#(B
(compile.c, compiler.h)

$BFbItL?NaI=$N%(%s%H%j$r:o=|$9$k(B pctableDelete(), pctableNDelete() (computil.c)
$B$N%P%0$r=$@0!#(B
(computil.c)

$BG\@:EY?t$N;MB'1i;;L?Na(B (dadd, dsub, dmul, ddiv) $B$d(B
frem $B$J$I$N(B pre-assembled code $B$rJQ99!#(B
$B:GE,2=$7$d$9$$$h$&$KC1@:EY?t$HF1$8J}<0$K$7$?!#(B
$B$3$N$?$a$K!"FbItL?Na(B dld8 $B$rDI2C!#(B
$B$3$NJQ99$K$h$j!"%W%m%0%i%`$K$h$C$F$OCY$/$J$C$?!#(B
(code.c, compiler.h, compile.c)

optimize.c $B$K!"FbItL?Na$r(B peephole $B:GE,2=$9$k4X?t(B
optimizeInternalCode() $B$rMQ0U!#(B
$B%^%/%m(B OPTIMIZE_INTERNAL_CODE (in compiler.h) $B$G(B
$B:GE,2=$r9T$&$+H]$+$r@)8f$9$k!#(B
(optimize.c, compiler.h)

FPU $B$N%l%8%9%?$+$i%a%b%j$X$N%9%H%"!"%m!<%I$r(B combine $B$9$k:GE,2=$r<BAu!#(B
Linpack benchmark $B$N7k2L$,(B 1.11 $BG\$K$J$C$?!#(B
(optimize.c)

[20000422]

x86 $B$N(B cdq $BL?Na$r(B movl %eax,%edx, sarl $31,%edx $B$H(B 2$BL?Na$KJ,3d!#(B
$B$7$+$7@0?t$N=|;;!">jM>L?Na(B (idiv, irem) $B$G$O(B
$B1i;;$K$+$+$k;~4V$,;YG[E*$J$N$G@-G=8~>e$O8+$($:!#(B
(code.c)

compiler.h $B$G%^%/%m(B FORCE_DOUBLE_PRECISION $B$,Dj5A$5$l$?>l9g!"(B
JIT $B=i4|2=;~$K4]$a@:EY$rG\@:EY$K@_Dj$9$k$h$&$K$7$?!#(B
$BG\@:EY$K@_Dj$9$k$3$H$G!"%G%U%)%k%H$G3HD%@:EY$K$J$C$F$$$k(B
JDK 1.1.X for Linux $B$N$h$&$J4D6-$G$b3N<B$K(B
JLS $B$N5,DjDL$j$N%;%^%s%F%#%/%9$rC#@.$G$-$k!#(B
(compiler.h, compiler.c, compile.c, code.c)

$BIbF0>/?tE@?t$N;MB'1i;;L?Na(B ([fd]{add,sub,mul,div}) $B$r(B
$BJ#?t$NFbItL?Na$KJ,2r$7$?!#(B
$BNc(B: $BDL>o$O(B dmul -> dld, dmul, dst
strictfp $B$N>l9g$O(B dmul -> strict_dprep, dld,
strict_dscdown, dmul, strict_dscup, dst, strict_dsettle
(compiler.h, code.c, compile.c)

$BFbItL?Na(B fill_cache $B$H5U$K!"%l%8%9%?(B %ecx, %edx $B$NFbMF$r(B
$B%9%?%C%/$K=q$-La$9(B flush_cache $BL?Na$rMQ0U!#(B
(code.c)

[20000421]

$BFbItL?Na$rJ];}$9$k9=B$BN(B pcentry $B$K!"%a%s%P(B operand $B$rDI2C!#(B
$B%3%s%Q%$%k$N=i4|CJ3,$GL?Na$N%*%Z%i%s%I$r$3$3$K3JG<$7$F$*$/!#(B
$B8eB3%Q%9$K$F!"%P%$%H%3!<%I$NNN0h$r;2>H$9$kI,MW$,$[$H$s$I$J$/$J$C$?!#(B
peephole $B:GE,2=$X$NI[@P!#(B
(compiler.h, compile.c)

$B%P%$%H%3!<%IL?Na(B [ifa]load_[0123] $B$KBP1~$9$kFbItL?Na$r(B iload $B$K!"(B
[ld]store_[0123] $B$KBP1~$9$kFbItL?Na$r(B lload $B$KJQ99!#(B
$B$3$l$^$G$O%P%$%H%3!<%IL?Na(B == $BFbItL?Na$@$C$?!#(B
(code.c, compile.c)

sysAssert() $B$r;H$$;O$a$?!#(B
(compile.c)

[20000420]

$BFbItL?Na$,%/%i%9%U%!%$%kCf$NL?Na$H0[$J$kN`$NL?Na$K(B
wide prefix $B$,IU$$$F$$$?>l9g$K!"FbItL?Na$X$NJQ49$r$7B;$M$F$$$?!#(B
(see [20000419])
(compile.c)

$B%P%$%H%3!<%IL?Na$N%+%&%s%HJ}K!$r=$@0!#(B(see [19990815])
$B9=B$BN(B CompilerContext $B$N%a%s%P(B ninsn $B$N07$$$rJQ$($?!#(B
(compile.c, computil.c)

[20000419]

FreeBSD $B$G$b(B libc, libm $B$r(B JVM_LoadLibrary() $B$9$k$N$r;_$a$?!#(B
constants.c $BCf$NI=(B ($BG[Ns(B) func_table[][][] $BCf$KD>@\4X?tL>$r=q$-!"(B
$B%"%I%l%9$O%@%$%J%_%C%/%j%s%+$K2r7h$7$F$b$i$&$3$H$K$7$?$3$H$KH<$&JQ99!#(B
(see [19990223])
(compiler.c)

processAnOpcode() (in compile.c) $B$G$N(B wide $BL?Na72$N07$$$KLdBj$,$"$C$?!#(B
wide prefix $B$,IU$$$?L?Na$rFbItL?Na$KJQ49$7$F$$$J$+$C$?!#=$@0!#(B
[Thanks to $B;VB<$5$s(B <kouya@flab.fujitsu.co.jp>]
(compile.c)

[20000415]

$B%7%s%\%k$N2r7hJ}K!$rJQ99$7$?!#(B
$B$3$l$^$G$O4X?tL>$NJ8;zNs$r(B constants.c $BCf$NI=(B ($BG[Ns(B) $B$KJ];}$7$F$$$?$H$3$m!"(B
$B$O$8$a$+$iI=$K$O4X?t$N%"%I%l%9$rF~$l$F$*$/$h$&$K$7$?!#(B
$B$3$l$KH<$$!"(BinitFunctionSymbols() (in compile.c) $B$,ITMW$K$J$C$?!#(B
[Thanks to $B4];3$5$s(B <fuyuhik8@is.titech.ac.jp>]
(gentable.rb, compile.c, compiler.c)

[20000330]

compiler.h $B$G%^%/%m(B STRICT_FSCALE_USE_FLOAT $B$,Dj5A$5$l$F$$$J$$>l9g$K(B
(double $B7?$G$O$J$/(B) $B@0?t7?$G(B scale $B$rMQ0U$9$k$h$&$K$7$?!#(B
(code.c)

[20000221]

0.4.2 $B%j%j!<%9!#(B

[20000214]

$B%*%W%7%g%s(B cmplatload $B$,$-$A$s$HF/$/$h$&$K$7$?!#(B
initializeClass() $B$K$F!"(BcompileClass() $B$r(B
$B%a%=%C%I$N(B JIT $B8~$1=i4|2==hM}$N8e$G8F$V$h$&$K$7$?!#(B
$B$^$?!"(BJIT $B$N=i4|2=;~$K$9$G$K%m!<%I$5$l$F$$$k%/%i%9$O!"(B
$B$9$Y$F$r=i4|2=$7$F$+$i%3%s%Q%$%k$9$k$h$&$K$7$?!#(B
(compiler.c)

[20000210]

0.4.1 $B%j%j!<%9!#(B

[20000206]

JNI $B$N%M%$%F%#%V%a%=%C%I$rD>@\8F$S=P$9:]$K(B(see [19990827])$B!"(B
synchronized $B%a%=%C%I$+$I$&$+$NH=DjK!$r8m$C$F$$$?!#(B
access & ACC_SYNCHRONIZED $B$H=q$/$Y$-$H$3$m$r(B access & ACC_STATIC $B$H!D=$@0!#(B
(runtime.c)

$B%^%/%m(B EXPAND_JAVASTACK{,_FOR_NATIVE}, CREATE_JAVAFRAME{,_FOR_NATIVE} $B$r(B
$B=q$-49$($?!#(B
(compiler.h)

[20000130]

`fstp %st(0)' $B$r(B `ffreep %st(0)' $B$H(B `fcompp' $B$KCV$-49$($?!#(B
(code.c)

[20000101]

0.4.0 $B%j%j!<%9!#(B

[19991228]

JIT $B$N%7%0%J%k%O%s%I%i$+$iL\E*$N(B sigcontext $B$^$GE~C#$9$kJ}K!$r!"(B
$B$"$i$+$8$a(B JIT $B=i4|2=;~$K5a$a$F$*$/$h$&$K$7$?!#(B
examineSigcontextNestCount() $B$r(B JIT $B$N%7%0%J%k%O%s%I%i$K@_Dj$7!"(B
int $0x3 $B$G3d$j9~$_$rH/@8$5$;!"$=$N4X?tFb$GE~C#K!$r5a$a$k!#(B
native threads $B$H(B green threads $B$GC5$7J}$,0[$J$k!#(B
[Thanks to OpenJIT team <openjit@is.titech.ac.jp>]
(signal.c, compiler.h)

$B%9%?%C%/>e$GL\E*$N(B sigcontext $B$rC5$9:]!"$3$l$^$G$O(B
$B%;%0%a%s%H%l%8%9%?(B ds,es,fs,gs $B$NCM$r<j$,$+$j$K$7$F$$$?$,!"(B
%eip $B%l%8%9%?(B ($B%W%m%0%i%`%+%&%s%?(B) $B$r<j$,$+$j$K;H$&$h$&$K$7$?!#(B
(signal.c)

sigcontext $B$rC5$9:]$N<j$,$+$jJQ99$KH<$C$FITMW$K$J$C$?(B
$BJQ?t(B reg_[gfed]s $B$*$h$S$=$N=i4|2==hM}$r:o=|$7$?!#(B
(compiler.h, compiler.c)

JDK 1.1 $B$G(B #include ARCH/sysmacros_md.h $B$9$k:]$K!"(B
JDK_HOME/include(-old)/green_threads $B%G%#%l%/%H%j$,B8:_$9$k$+H]$+$K$h$C$F(B
$B%^%/%m(B NATIVE $B$r(B #define $B$9$k$+$7$J$$$+$r7h$a$M$P$J$i$J$$!#(B
$B$=$N$?$a$K!"(Bconfigure $B$G(B green_threads $B%G%#%l%/%H%j$NM-L5$rH=Dj$9$k$h$&$K$7$?!#(B
(configure.in, config.h.in)

Linux 2.2 $B$,;}$C$F$$$k(B <asm/ucontext.h> $B$r(B Linux 2.0 $B$O;}$C$F$$$J$$$N$G!"(B
$B$3$N%X%C%@$NB8:_$r(B configure $B$GD4$Y$k$h$&$K$7$?!#(B
(configure.in, config.h.in)

examineSigcontextNestCount() $B$r<B9T$9$k$?$a$N3d$j9~$_$r!"(B
0x3 $B$+$i(B 0x10 $B$K$7$?!#(B0x3 (SIGTRAP) $B$r;H$&$H!"(B
$B$=$l0J9_(B gdb $B$,=hM}$rB3$1$i$l$J$/$J$C$F$7$^$&$?$a!#(B
int $0x3 $B$H$=$l0J30$G$O!"(Bsigcontext.sc_eip $B$NCM(B
(int $0x3 $B$G$O<!$NL?Na$r;X$9!"B>$O(B int $BL?Na$r;X$9(B) $B$d(B
$BL?Na$N%5%$%:(B (int $0x3 $B$O(B 1$B%P%$%H!"B>$O(B 2$B%P%$%H(B) $B$,0[$J$k$N$GCm0U!#(B
(compiler.c, signal.c)

$B?7$7$$(B (2.9.5.0.22) binutils $B$K$J$C$F!"(B
objdump $B$K$h$k(B `call $BB(CM(B' $B$N%G%#%9%"%;%s%V%k7k2L$,JQ$o$C$?!#(B
$B<!$N9T$K(B `XXX: R_386_PC32 *ABS*' $B$rI=<($9$k$h$&$K$J$C$?!#(B
$B$=$l$K1~$8$F!"(Bgentable.rb $B$K$F4X?tL>(B *ABS* $B$r%9%-%C%W$9$k$h$&$K$7$?!#(B
(gentable.rb)

$B?7$7$$(B binutils $B$O(B jmp 0x707070 $B$r(B jmp 0x70706c $B$K%"%;%s%V%k$9$k$N$G!"(B
$BBP:v$H$7$F!"%8%c%s%W@h%"%I%l%9$N3JG<@h$N(B pre-assembled code $BCf$G$NI=8=K!!"(B
$B$D$^$j(B code.h $B$N%^%/%m(B ADDR_* $B$NCM$rJQ99$7!"(Bgentable.rb $B$b$=$l$KBP1~$5$;$?!#(B
(code.h, gentable.rb)

code.h $B$N%^%/%m(B ADDR_* $B$ONc$($P(B 0x70707010 $B$H$7$F$*$$$F!"(B
$B%G%#%9%"%;%s%V%k7k2L$+$i(B /70 70 70/ $B$rC5$9$h$&$K$7$?!#(B
$B$7$+$7(B binutils $B$N%P!<%8%g%s$K$h$C$F$O(B 3$B$D$a$N(B 70 $B$,<!$N9T$KI=<($5$l$F(B
/70 70 70/ $B$,%^%C%A$7$J$/$J$C$?!#$=$N$?$a!"(B/70 70/ $B$GC5$9$h$&$K$7$?!#(B
(gentable.rb, code.h)

[19991227]

sigcontext $B$NC5$7J}$rJQ99!#C1$K%9%?%C%/$r$J$a$F$$$?$H$3$m!"(B
$B%Y!<%9%]%$%s%?$r$?$0$C$FC5$9$h$&$K$7$?!#(B
ebp + 3 $B$,(B sigcontext_t * $B7?$+$I$&$+$GH=Dj$9$k!#(B
[Thanks to OpenJIT team <openjit@is.titech.ac.jp>]
glibc 2.1.2 $B$N(B LinuxThreads $B$O(B sigcontext $B$r(B 2$B$D%9%?%C%/$KCV$$$F$7$^$$!"(B
$B$R$H$D$a$K8+IU$+$C$?(B sigcontext $B$rJQ99$7$F$b!"(B
$B%7%0%J%k%O%s%I%i$+$iLa$C$?:]$KH?1G$5$l$J$$!#(B
$B$=$N$?$a!":G8e$K8+IU$1$?(B ebp $B$r:NMQ$9$k!#(B
(compiler.c)

signalHandler() $B$+$iNc30=hM}$X$NI|5"$N$?$a$K!"$3$l$^$G$OL\E*$N%"%I%l%9$K(B
$BC1$K%8%c%s%W$7$F$$$?$H$3$m!"(B
Linux $B$G$O(B %ebp $B$r@_Dj$7$F(B return $B$9$k$h$&$K!"(B
FreeBSD $B$G$O(B sigreturn(sigcontext_t *) $B$r;H$&$h$&$K$7$?!#(B
[Thanks to OpenJIT team <openjit@is.titech.ac.jp>]
FreeBSD $B$G9T$C$F$$$?%7%0%J%k$N(B unmask (sigprocmask(SIG_UNBLOCK, ...)) $B$O(B
$BITMW$K$J$C$?!#(B
(compiler.c)

$B%7%0%J%k%O%s%I%i$N:F@_Dj$N$?$a$NJQ?t(B
struct sigaction sigActForHandler $B$rGS$7$?!#(B
(compiler.c)

[19991223]

copyright $BI=<($NG/$K(B 2000 $B$r2C$($?!#(B
$B$?$@$7!"(BMetaVM $B$N$?$a$N(B Java $B$N%=!<%9%3!<%I$O(B 1999 $B$N$^$^$K$7$?!#(B

[19991222]

JIT $B$N=i4|2=4X?t(B java_lang_Compiler_start $B$,(B
java.lang.Compiler $B%/%i%9$,:F%m!<%I$K$h$C$FJ#?t2s8F$P$l$F$7$^$&LdBj$X$N(B
$BBP=hK!$rJQ99!#%U%i%0$G8!=P$7$F$$$?$H$3$m!"(BCompiler $B%/%i%9$K(B sticky $BB0@-$r(B
$BIUM?$9$k$3$H$K$7$?(B (CCSet(..., Sticky))$B!#(B(see [19990514])
(compiler.c)

[19991209]

shuJIT $B$G$O!"%U%#!<%k%I%"%/%;%9$@$1$G$J$/!"%a%=%C%I8F$S=P$7$K$D$$$F$b(B
$B$-$A$s$H(B VerifyFieldAccess $B$G%"%/%;%98"8B%A%'%C%/$r9T$C$F$$$k!#(B
(see [19991003]) $B$3$N%A%'%C%/$K$h$C$F!"(Binner $B%/%i%9$+$i(B/$B$X$N%"%/%;%9$G$b(B
IllegalAccessError $B$,H/@8$7$F$7$^$C$F$$$?!#(B
inner $B%/%i%9$+$i$_$N%"%/%;%9$r5v$9$h$&$K7j$r$"$1$?!#(B
NetBeans 2.1.2 $B$GLdBj$K$J$C$F$$$?!#(B
(compile.c)

[19991204]

JDK 1.2 $B$N>l9g!"%7%0%J%k%O%s%I%i$+$iNc30=hM}%3!<%I$X$N%8%c%s%W$O(B
$BC1$K(B return TRUE $B$9$l$P$h$$$O$:$,(B (see [19990725])
JDK 1.2.2rc2 for Linux $B$K$F!"(Breturn $B8e$K(B
SIGSEGV $B$,H/@8$7$F$7$^$&$N$G!"(BJDK 1.2 $B$G$b(B JDK 1.1 $B$HF1$8J}K!$G(B
$B%8%c%s%W$9$k$h$&$K$7$?!#(B
(compiler.c)

[19991106]

strictfp $B$N(B scaling $B$r(B fscale $BL?Na$G9T$&>l9g!"(B
scale $B$r(B double $B7?(B(64bit) $B$G$O$J$/!"(Bint $B7?(B(32bit) $B$GMQ0U$7$F$*$/J}K!$rMQ0U!#(B
$B%^%/%m(B STRICT_FSCALE_USE_INT $B$G@)8f!#(B
FPU $B%l%8%9%?(B - $B%a%b%j4V$N%H%i%U%#%C%/:o8:$rA@$&(B
$B!D$,!"CY$/$J$C$?(B (on PentiumII)$B!#$N$G5Q2<!#(B
(compiler.h, code.c)

int $B7?(B(32bit) $B$r$d$a$F!"(Bfloat $B7?(B(32bit) $B$K$7$?!#(B
$B%^%/%m(B STRICT_FSCALE_USE_FLOAT $B$G@)8f!#(B
double $B7?(B(64bit) $B$N>l9g$H@-G=$,$[$\JQ$o$i$J$$!#(B
(compiler.h, code.c)

[19991016]

64bit $B@0?t(B(long)$B7?$N(B 0$B=|;;$G!"(B__divdi3() $BCf$GH/@8$7$?(B SIGFPE $B$r(B
$B$-$A$s$H07$($F$$$J$+$C$?$N$r=$@0!#(B
(compiler.c, code.c)

glibc 2.1 $B$G!"(Bstdout $B$N%7%s%\%k!"<hF@J}K!$,JQ$o$C$?$3$H$KBP1~!#(B
(code.h)

$B%9%?%C%/>e$G9=B$BN(B sigcontext $B$rC5$9I}$r9-$2$?!#(B50 word -> 100 word$B!#(B
glibc 2.1 $B$G$O(B 70 $B$r1[$($F$$$k$?$a!#(B
(compiler.c)

0.3.13 $B%j%j!<%9!#(B

[19991006]

0.3.12 $B%j%j!<%9!#(B

[19991004]

java.lang.Math#exp() $B$N(B special inlining $B$r;_$a$?!#(B
$BMQ0U$7$?%M%$%F%#%V%3!<%I$N5sF0$,!"%$%s%?%W%j%?$J$IB>$N=hM}7O$H$O0[$J$k!#(B
JDK 1.2 $B$G$O$8$a$FH/3P$7$?!#(B
$BG\@:EYIbF0>.?tE@?t$rJ8;zNs$KJQ49$9$kJ}K!$,(B JDK 1.1 $B$H$O0c$&$i$7$$!#(B
(compile.c)

strictfp $B$N$?$a$N(B scale $B$r$"$i$+$8$a(B FPU $B%l%8%9%?$K%m!<%I$9$k$+$7$J$$$+!"(B
$B%^%/%m(B STRICT_PRELOAD (compiler.h) $B$GA*$Y$k$h$&$K$7$?!#(B
$B2?$b9M$($:$K%W%j%m!<%I$7$F$7$^$&$H!"(Bstrictfp $B%a%=%C%I$,(B
strictfp $B%a%=%C%I$r8F$V$3$H$G!"(BFPU $B%l%8%9%?$,0n$l$F$^$:$$$3$H$K$J$k$N$G!#(B
$B$3$l$r2~A1$G$-$k$^$G!"%W%j%m!<%I$OE`7k!#(B
(code.c, compiler.h)

private, protected $B%U%#!<%k%I$X$N%"%/%;%9%A%'%C%/(B (see [19991003]) $B$O!"(B
JDK 1.2 $B0J9_$G$N$_9T$&$h$&$K$7$?!#(BJDK 1.1 $B$G$O%A%'%C%/$7$J$$!#(B
JDK 1.1 $B$N(B javac (sun.tools.{java.*,javac.*}) $B$O!"%"%/%;%5%a%=%C%I$,(B
$B%3%s%Q%$%k;~$K%$%s%i%$%sE83+$5$l$F$7$^$C$F$*$j!"(B
$B%A%'%C%/$r87$7$/$9$k$H(B IllegalAccessError $B$G(B javac $B$,F0$+$J$$!#(B
(compile.c)

[19991003]

final $B%U%#!<%k%I$X$N%"%/%;%9(B (*field*) $B$@$1$G$J$/(B (see [19990828])$B!"(B
$B<!$N>l9g$K$b(B IllegalAccessError $B$,(B throw $B$5$l$k$h$&$K$7$?!#(B
$B%A%'%C%/$K(B JDK $BCf$N4X?t(B VerifyFieldAccess() (classinitialize.c) $B$r;HMQ!#(B
  - private $B%U%#!<%k%I!"%a%=%C%I$X$N%"%/%;%9!"8F$S=P$7!#(B
  - protected $B%U%#!<%k%I!"%a%=%C%I$X$NJL%Q%C%1!<%8$+$i$N%"%/%;%9!"8F$S=P$7!#(B
$B$?$@$7!"8F$S=P$7$K$D$$$F(B invokeinterface $B$N>l9g$r?<$/9M;!$7$F$$$J$$!#(B
(compile.c)

strictfp $B$N$?$a$N(B scale down and up $B$N=hM}$r!"(Bx86 $B$N(B 
fscale $BL?Na$G9T$&$h$&$K$7$?!#$?$@$7!"$3$l$^$G$N>h;;$G9T(B
$B$&J}K!$HA*Br$7$F(B (compiler.h $B$N%^%/%m(B USE_FSCALE) $B%3%s%Q(B
$B%$%k$G$-$k$h$&$K$7$?!#(B
(code.c, compiler.h)

[19990928]

strictfp $B$G!"(Bscale down and up $B$N$?$a$N(B scale $B$r!"(B
$B%a%=%C%I$N@hF,$G$"$i$+$8$a(B FPU $B%l%8%9%?$K%m!<%I$7$F$*$/$h$&$K$7$?!#(B
$BFbItL?Na(B strict{enter,exit} $B$N=hM}(B ($B4]$a@:EY$N@_Dj(B) $B$r(B
fppc_{save,restore} $B$K0\$7!"(Bstrict{enter,exit} $B$G%m!<%I$r9T$&$h$&$K$7$?!#(B
$B$3$l$^$G$OI,MW$J$H$-$K%a%b%j$+$i%m!<%I$7$F$$$?!#(B
(code.c)

dadd, dsub, dmul, ddiv $BL?Na$N(B pre-assembled $B%3!<%ICf$NL?Na=g$rJQ99!#(B
dmul, ddiv $B$G<c43$N9bB.2=!#(B
(code.c)

[19990925]

JDK $B$N%$%s%?%W%j%?$,(B assembly code $BHG$+(B C $B8@8lHG$+$r!"(B
compiler.h $BCf$G7h$aBG$D$N$G$O$J$/!"(Bconfigure $B$G<1JL$9$k$h$&$K$7$?!#(B
JDK for FreeBSD $B$,!"(B1.1.8 V99-9-22 $BHG$+$i(B assembly code $BHG$r;H$$;O$a$?$?$a!#(B
(configure.in, config.h.in, compiler.h)

0.3.11 $B%j%j!<%9!#(B

[19990922]

processAnOpcode() (compile.c) $B$K$F%/%i%9$N%m!<%I(B
(ResolveClassConstantFromClass2()) $B$K<:GT$7$?>l9g!"(B
$B%3%s%Q%$%k$r$"$-$i$a$k$N$G$O$J$/!"(BNoClassDefFoundError $B$r(B throw $B$9$k%3!<%I$r(B
$B@8@.$9$k$h$&$K$7$?!#(B
(compiler.h, code.c, compile.c)

[19990910]

0.3.10 $B%j%j!<%9!#(B

[19990909]

0.3.9 $B%j%j!<%9!#(B

compileMethod() (compile.c) $B$K$F!"%3%s%Q%$%k$,<:GT$7$?>l9g(B
$BNc30$r%/%j%"(B (exceptionClear(ee)) $B$9$k$h$&$K$7$?!#(B
$B%$%s%?%W%j%?$K<B9T$5$;$k:]!"Nc30$,;D$C$F$$$k$H$^$:$$!#(B
JMF 2.0 $B$GLdBj$,H/8=$7$?!#(B
(compile.c)

[19990908]

$B9=B$BN(B sigcontext $B$N<hF@J}K!$rJQ99!#(B
$BC1=c$K:G=i$N(B 2$B2s$OC5:w$9$k$N$r;_$a!"%*%U%;%C%H$,M-8z$+$I$&$+$rKh2sH=Dj$7!"(B
$BL58z$J$iC5:w$9$k$h$&$K$7$?!#(B
signalHandler() (compiler.c) $BCf$N!"(B
signal $BH/@8;~$K<B9T$5$l$F$$$?$N$O(B compiled code $B$G$"$k$H$$$&2>Dj$r=|5n!#(B
(compiler.c)

$B9=B$BN(B sigcontext $B$rC5:w$9$k$?$a$N(B key $B$H$7$F!"(B
linux $B$G$O%l%8%9%?(B gs, fs, es, ds$B!"(BFreeBSD $B$G$O(B es, ds, cs, ss $B$rMQ$$$F$-$?!#(B
$B$3$l$r(B gs, fs, es, ds $B$GE}0l$7$?!#(B
(compiler.c, compiler.h)

implements $B$7$F$$$k$O$:$N(B interface $B$r(B implements $B$7$F$$$J$$>l9g$K(B
getInterfaceMethod() (runtime.c) $B$G(B invokeInterfaceError() $B$r8F$s$G(B
IncompatibleClassChangeError $B$r@8@.$9$k!#(B
$B$=$N:]$K!"(BinvokeInterfaceError() $B$K$-$A$s$H%W%m%0%i%`%+%&%s%?$r(B
$BEO$9$h$&$K$7$?!#(B
(runtime.c, compiler.h)

[19990907]

$BJQ?t(B runtime_debug $B$HF1MM$K!"(Bcompile_debug $B$r@_$1$?!#(B
(compile.c, computil.c)

makePCTable() $BCf$G;2>H$9$k$h$j8e(B (updateStates()) $B$G(B
CompilerContext.may_throw $B$r99?7$7$F$$$?!#(B
$B$3$l$r(B processAnOpcode() $BCf$G99?7$9$k$h$&$K=$@0!#(B
(compile.c)

JIT $B%3%s%Q%$%kCf$NGSB>=hM}$N$?$a$K(B Class $B%/%i%9$N%*%V%8%'%/%H$N(B
$B%b%K%?$r<hF@$7$F$$$?$H$3$m!"(BJIT $B%3%s%Q%$%iMQ$N%b%K%?$rMQ0U$7$?!#(B
$B9=B$BN(B CodeInfo $B$K%a%s%P(B monitor $B$rMQ0U!#(B
(compiler.h, invoker.c)

processAnOpcode() (compile.c) $B$K$F(B CompilerContext.may_throw $B$r99?7$9$k:]!"(B
$BJQ?t(B code_opcode $B$G$O$J$/D4@0A0$N(B opcode $B$r;2>H$7$F$$$?!#(B
(compile.c)

[19990903]

processAnOpcode() (compile.c) $B$+$i!"(B
stack state $B$N@_Dj$r(B updateStates() $B$H$7$FJ,N%$7$?!#(B
$B$3$l$KH<$$!"(BprocessAnOpcode() $B$N0z?t$bJQ99!#(B
peephole $B:GE,2=$X$NI[@P!#(B
(compile.c)

[19990830]

$BFbItL?Na(B exc_handler $B$r(B exc_new $B$H(B exc_handler $B$KJ,$1!"(B
$B%a%=%C%I$,Nc30I=$r;}$?$J$$>l9g$O(B exc_handler $B$r@8@.$7$J$$$h$&$K$7$?!#(B
(compiler.h, code.c, compile.c)

[19990829]

$BNc30$r(B throw $B$7F@$k%P%$%H%3!<%IL?Na$r4^$`%a%=%C%I$KBP$7$F!"(B
$BFbItL?Na(B exc_handler $B$r@8@.$9$k$h$&$K$7$?!#(B
$B$=$N$?$a$K%^%/%m(B OPC_THROW, OPC_SIGNAL $B$rMQ0U!#(B
(compiler.h, code.c, compile.c)

[19990828]

configure $B$r(B gcc 2.9X $B$KBP1~$5$;$?!#(B
(configure.in)

$B<+8J=q$-49$($G%9%-%C%W$9$k(B pre-assembled code $B$r!"(B
$B%3%s%Q%$%i$N@-<A$N1F6A$r$h$j<u$1$K$/$$$b$N$K$7$?!#(B
getstatic*, invokestatic $BL?Na$N$?$a$K(B
once_InitClass() (runtime.c) $B$rMQ0U$7$?!#(B
egcs 1.0.3, 1.1.2 $B$H(B gcc 2.95.1 $B$G(B ..._REWRITE_OFFSET $B$NCM$,JQ$o$C$?$?$a!#(B
(code.c)

0.3.8 $B%j%j!<%9!#(B

final $B%U%#!<%k%I$X$N%"%/%;%9$G(B
$B$-$A$s$H(B IllegalAccessError $B$,(B throw $B$5$l$k$h$&$K$7$?!#(B
$BK\Mh$O%P%$%H%3!<%I%Y%j%U%!%$%"$,$O$8$/$Y$-$+!)(B
$BFbItL?Na(B throw_illegalaccess $B$r@_$1!"(BprocessAnOpcode() (compile.c) $B$K$F(B
final $B%U%#!<%k%I$X$N(B putfield* $B$r(B throw_illegalaccess $B$KJQ49$9$k$h$&$K$7$?!#(B
$BFbItL?Na(B exception_handler $B$r@8@.$9$k$+$7$J$$$+$NH=Dj$r!"(B
makePCTable() (compile.c) $BCf$GD>@\9T$&$N$G$O$J$/!"(B
$B9=B$BN(B CompilerContext $B$N%a%s%P(B may_throw $B$r;2>H$9$k$h$&$K$7$?!#(B
(compiler.h, code.c, compile.c)

invokeinterface $BL?Na$G$b$-$A$s$H(B SIGSEGV $B$,H/@8$9$k$h$&$K!"(B
*obj $B$r?($k%3!<%I$rDI2C$7$?!#(B(cf. 19990826 $B$N(B invokespecial)
NetBeans $B$NF0:n%F%9%H$GLdBj$,H=L@$7$?!#(B
(code.c)

$B4X?t8F$S=P$7Fb$GNc30$,H/@8$7$?$+$I$&$+$N%A%'%C%/$r(B
$B<+8J=q$-49$($G%9%-%C%W$7$F$$$J$+$C$?!#%9%-%C%W$9$k$h$&$K$7$?!#(B
(code.c)

getInterfaceMethod() (runtime.c) $B8F$S=P$78e$NNc30%A%'%C%/$O(B
$B0lEY9T$o$l$l$P$h$$$?$a!"<+8J=q$-49$($G%9%-%C%W$9$k$h$&$K$7$?!#(B
(code.c)

[19990827]

old fashion $B$N%M%$%F%#%V%a%=%C%I$r!"(B
invoker $B$r7PM3$;$:$KD>@\8F$S=P$9$h$&$K$7$?!#(B
invocationHelper() (runtime.c) $B$K$F!"(B
invoker $B$,(B invoke{,Synchronized}NativeMethod $B$@$C$?>l9g!"(B
JDK $B$N(B invoke...() $B4X?t$r;H$o$:$KD>@\(B call $B$9$k!#(B
(runtime.c)

[19990826]

processAnOpcode() (compile.c) $BCf$N(B ResolveClassConstantFromClass2() $B$N(B
$B8F$S=P$7$K$F!"Bh(B 4$B0z?t$N;XDjJ}K!$,0lIt8m$C$F$$$?$N$rD{@5!#(B
`CONSTANT_...' -> `1 << CONSTANT_...'
(compile.c)

invokespecial $BL?Na$G$-$A$s$H(B SIGSEGV $B$,H/@8$9$k$h$&$K!"(B
*obj $B$r?($k%3!<%I$rDI2C$7$?!#(B
(code.c)

JNI $B$N%M%$%F%#%V%a%=%C%I$r!"(Binvoker $B$r7PM3$;$:$KD>@\8F$S=P$9$h$&$K$7$?!#(B
invocationHelper() (runtime.c) $B$K$F!"(B
invoker $B$,(B invokeJNI{,Synchronized}NativeMethod $B$@$C$?>l9g!"(B
JDK $B$N(B invoke...() $B4X?t$r;H$o$:$KD>@\(B mb->code $B$r(B call $B$9$k!#(B
(runtime.c)

[19990825]

Java $B%9%?%C%/%U%l!<%`$NMQ0U$r%^%/%m(B (CREATE_JAVAFRAME()) $B$K$7$?!#(B
(compiler.h, invoker.c)

[19990824]

invokeJITCompiledMethod() (invoker.c) $BCf$G(B
alloca(3) $B$rI,MW$J$H$-$@$18F$V$h$&$K$7$?!#(B
(invoker.c)

$B9=B$BN(B CodeInfo $B$K%a%s%P(B char *terse_sig $B$rDI2C!#(B
JDK 1.2 $B$N(B mb->terse_sig $B$HF1$8$b$N!#(B
$B$=$l$r(B prepareCompiledCodeInfo() (computil.c) $B$G=i4|2=$9$k$h$&$K$7$?!#(B
(compiler.h, computil.c)

[19990822]

$BFbItL?Na$N%*%Z%3!<%I$H$7$F(B 254(0xfe), 255(0xff) $B$r;H$o$J$$$h$&$K$7$?!#(B
$B$=$l$>$l(B impdep1, impdep2 $BL?Na$J$N$G!#(B(cf. VM spec. 6.2 Reserved Opcodes)
(compiler.h)

$BFbItL?Na(B sqrt,sin,cos,tan,atan2,atan,exp,log,floor,ceil $B$rMQ0U$7!"(B
java.lang.Math $B%/%i%9$N%a%=%C%I$r(B pre-assembled code $B$K(B
$B%$%s%i%$%sE83+$9$k$h$&$K$7$?!#(B
(compiler.h, code.c, compile.c)

private $B%a%=%C%I$@$1$G$J$/(B final $B%a%=%C%I$b(B invokevirtual $BL?Na$+$i(B
invokespecial $BL?Na$KJQ49$9$k$h$&$K$7$?!#(B
(compile.c)

[19990821]

$B9=B$BN(B pcentry $B$N%a%s%P(B byteoff $B$N7?$r(B uint32_t $B$+$i(B int32_t $B$K=$@0!#(B
pctableGet() (computil.c) $BCf$NHf3S$G(B -1 $B$,(B 2^32-1 $B$H$7$F07$o$l$F(B
FreeBSD $B$G(B Swing $B$r;HMQ$7$?>l9g$KLdBj$,5/$-$F$$$?!#(B
(compiler.h)

compiled code $B$+$i(B invocationHelper() (runtime.c) $B$r8F$S=P$9:]$K(B
%esi, %ebx $B$rJ]B8!"I|5"$9$k$h$&$K$7$?!#(B
invocationHelper() $BCf$G(B invokeJITCompiledCode() $B%X%8%c%s%W$9$k$?$a!"(B
invocationHelper() $B$K$h$k(B %esi $B$J$I$NI|5"$r4|BT$G$-$J$$$?$a!#(B
(code.c)

$B%*%W%7%g%s(B frcstrictfp $B$rMQ0U!#(B
$B$9$Y$F$N(B Java $B%a%=%C%I$K(B strictfp $B$N%;%^%s%F%#%/%9$r6/@)$9$k!#(B
(compiler.h, compiler.c, compile.c)

0.3.7 $B%j%j!<%9!#(B

[19990820]

make $B;~$K(B config.h $B$,B8:_$7$J$$>l9g!"(B./configure $B$r<B9T$9$k$N$r;_$a!"(B
$B7Y9p$7$F=*N;$9$k$h$&$K$7$?!#(B
(GNUmakefile.in)

0.3.6 $B%j%j!<%9!#(B

[19990818]

fmul, dmul, fdiv, ddiv $BL?Na$N(B strictfp $BHG$G$"$k!"(B
$BFbItL?Na(B fmul_strict, ... $B$rMQ0U$7$?!#(B
Java Grande Forum $B$N(B Numerical Working Group $B$,?d>)$9$k5;K!$r<BAu!#(B
FP-strict $B$NJ8L.$G$O!"(Boverflow $B$r8!=P$9$k$?$a$N(B store-reload technique$B!"(B
underflow $B$r8!=P$7!"$-$A$s$H(B gradual underflow $B$5$;$k$?$a$N(B scale down and up
$B$r9T$&$h$&$K$7$?!#(B
$B;29M(B: Improving Java for Numerical Computation,
      http://math.nist.gov/javanumerics/
(compiler.h, code.c)

[19990817]

invokeinterface $BL?Na$G(B getInterfaceMethod() (runtime.c) $B$r8F$S=P$7$?8e!"(B
$BNc30$,H/@8$7$?$+$I$&$+$r%A%'%C%/$9$k$h$&$K$7$?!#(B
(code.c)

make $B;~$K(B config.h $B$,B8:_$7$J$$>l9g!"(B./configure $B$r<B9T$9$k$h$&$K$7$?!#(B
(GNUmakefile.in)

0.3.5 $B%j%j!<%9!#(B

$BNc30H/@8;~$K%9%?%C%/$r%/%j%"$9$kJ}K!$r8m$C$F$$$?!#(B
(code.c)

strictfp $B$,;XDj$5$l$?%a%=%C%I$G$O!"(B
$B%a%=%C%I$NF,$G(B FPU $B$N4]$a@:EY$rG\@:EY$K$7!"(B
$BKvHx$G85$N(B control word $B$KLa$9$h$&$K$7$?!#(B
$B$=$N$?$a$K!"FbItL?Na(B strictenter, strictexit $B$rMQ0U!#(B
strictfp $BBP1~$N=`Hw!#(B
(code.c, compiler.h, compile.c)

$B%*%W%7%g%s(B ignstrictfp $B$rMQ0U!#(B
class, method modifier$B!"(Bstrictfp $B$rL5;k$9$k!#(B
(compiler.h, compiler.c, compile.c)

[19990816]

$B%P%$%H%3!<%I$r=q$-49$($k:]$K$-$A$s$H(B
$B%m%C%/(B (CODE_LOCK(): JDK 1.2, BINCLASS_LOCK(): JDK 1.1) $B$9$k$h$&$K$7$?!#(B
(compile.c)

$BFbItL?Na(B invokeignored_nocheck $B$r(B invokeignored_static $B$K2~L>!#(B
(compiler.h, compile.c)

$BFbItL?Na(B invokeignored_static $B$G$b%/%i%9$N=i4|2=$r8F$V$h$&$K$7$?!#(B
(code.c, compile.c)

[19990815]

$B%8%c%s%WL?Na$N<!$NL?Na$N(B state $B$r(B 2 $B$+$i(B 0 $B$KJQ99$7$?!#(B
$B%9%?%C%/$K2?$b@Q$^$l$F$$$J$$>uBV$G(B state 2 $B$KA+0\$9$k$3$H$G!"(B
$BM>7W$J(B pop $B$,5/$-$F%9%?%C%/%]%$%s%?$,2a>j$KLa$j!"%9%?%C%/$,GK2u$5$l$F$$$?!#(B
(code.h)

$BFbIt(B opcode$B!"(Bepilogue $B$rF3F~!#(B
syncexit $B$H(B methodtail $B$N$I$A$i$+$r%a%=%C%IKvHx$HH=CG$9$k$N$G$O$J$/!"(B
epilogue $B$rKvHx$HH=CG$9$k$h$&$K$7$?!#(B
(compile.c, compiler.h)

compiled code $B@hF,$G$N(B %edx, %ecx $B$NJ]B8!"KvHx$G$NI|5"$r;_$a$?!#(B
(code.c)

$BNc30I=$r;}$C$F$$$J$$%a%=%C%I$KBP$7$F$O!"FbItL?Na(B exc_handler $B$r(B
$B@8@.$7$J$$$h$&$K$7$?!#@8@.%3!<%INL$r:o8:!#(B
(compile.c)

$B9=B$BN(B CompilerContext $B$K%a%s%P(B ninsn $B$rDI2C!#(B
$B%*%W%7%g%s(B codesize $B$N$?$a$KDL>o$N%P%$%H%3!<%IL?Na$N?t$r5-21$9$k!#(B
(compiler.h, computil.c)

ExecuteJava() $B$r8F$VA0$K!"(Bprofiling $BMQ$N%3!<%I$rF~$l$?!#(B
(runtime.c, invoker.c)

SignalError() $B$r!"Nc30H/@8$N$?$S$K8F$V$N$G$O$J$/(B
$BFbItL?Na(B exc_handler $B$G0l3g$7$F8F$V$h$&$K$7$?!#(B
$B@8@.%3!<%INL$r:o8:!#(B
(code.h, code.c)

0.3.4 $B%j%j!<%9!#(B

[19990814]

compiled code $B$N6I=jJQ?t$NNN0h$r!"%"%;%s%V%j%3!<%I$G$O$J$/(B
alloca(3) $B$G3NJ]$9$k$h$&$K$7$?!#(B
(invoker.c)

$B%7%s%\%k$N2r7h$r%3%s%Q%$%k$NEY$G$O$J$/$F!"(B
JIT $B%3%s%Q%$%i=i4|2=$K0l3g$7$F9T$&$h$&$K$7$?!#(B
(compile.c)

$BFbIt(B opcode $B$r(B 1$B%P%$%H$+$i(B 2$B%P%$%H$K$7$?!#(B
(code.h, gentable.rb)

$B%b%K%?$N<hF@!"3+J|$r!"(BinvokeJITCompiledMethod() (invoker.c) $B$+$i(B
compiled code $B$K0\$7$?!#(B
$BFbIt(B opcode$B!"(Bopc_syncenter, opc_syncexit $B$rMQ0U!#(B
$B$3$N(B compiled code $B$O(B frame->monitor $B$N@_Dj$r$7$J$$$3$H$KCm0U!#(B
(code.c, compiler.h, invoker.c)

(MetaVM) synchronized $B%a%=%C%I$N8F$S=P$7$*$h$S=*N;;~$K!"(B
$B1s3V%*%V%8%'%/%H$N%b%K%?$r<hF@!"3+J|$9$k$h$&$K$7$?!#(B
(code.c)

[19990813]

Linux $B$G$b(B (struct sigaction).sa_flags $B$K(B SA_RESETHAND $B$r%;%C%H$9$k$h$&$K$7!"(B
signalHandler() (compiler.c) $BCf$G%7%0%J%k%O%s%I%i$r:F@_Dj$9$k$h$&$K$7$?!#(B
(compiler.c)

[19990808]

compiled code $B$N6I=jJQ?t$N(B base $B$r!"(Bjavaframe->vars $B7PM3$G$O$J$/!"(B
$B0z?t$G<uEO$7$9$k$h$&$K$7$?!#(B
(invoker.c, code.c)

invoke* $BL?Na$N(B pre-assembled code $BCf$N!"(B
$B6I=jJQ?t$,@jM-$9$k%a%b%jNL$r7W;;$9$k%3!<%I(B ($B%^%/%m(B VARSPACE_*) $B$rJQ99$7$?!#(B
(code.c)

[19990806]

tableswitch $BL?Na$N%8%c%s%W@hI=$r:n@.$7$?8e!"(B
$B%3!<%I@8@.%P%C%U%!$X$N%]%$%s%?$r8m$C$F@_Dj$7$F$$$?!#=$@0!#(B
(compile.c)

0.3.3 $B%j%j!<%9!#(B

[19990804]

compiled method $B$+$i$N%a%=%C%I8F$S=P$7(B (invocationHelper()) $B$G!"(B
mb->invoker $B$,(B compileAndInvokerMethod() $B$@$C$?:]$K$b(B
restack (native -> interpreter) $B$9$k$h$&$K$7$?!#(B
compileAndInvokerMethod() $B$G(B JIT $B%3%s%Q%$%k$,5/$-$?>l9g$K(B
restack $B$,(B 2$BEY5/$-$FHa$7$$$,!"%3%s%Q%$%k$7$J$$>l9g$N$?$a$K!#(B
(runtime.c)

[19990803]

$B%*%W%7%g%s(B ($B4D6-JQ?t(B JAVA_COMPILER_OPT) $B$N(B parse $BJ}K!$rJQ99!#(B
(compiler.c, compiler.h)

$B%*%W%7%g%s(B cmplthreshold $B$rMQ0U!#(B
cmplthreshold=<$B@0?t(B> $B$H@_Dj$9$k$H!"%a%=%C%I$O$=$N2s?t8F$P$l$?;~E@$G(B
$B%3%s%Q%$%k$5$l$k!#(B
(compiler.c, compiler.h, invoker.c)

[19990731]

$BIbF0>/?tE@?t$r@0?t$KJQ49$9$k(B [fd]2[il] $BL?Na$N(B pre-assembled code $B$rJQ99$7$?!#(B
$B$3$l$^$G$O%9%?%C%/%]%$%s%?$,;X$9%"%I%l%9$h$j2<0L$NNN0h!"(B
$B$D$^$jL$;HMQ$N%9%?%C%/NN0h$K(B FPU control word $B$rJ]B8$7$F$$$?$,!"(B
$B;HMQCf$NNN0h$KJ]B8$9$k$h$&$K$7$?!#(B
$BL$;HMQ%9%?%C%/NN0h$KJ]B8$7$F$*$$$?(B FPU control word $B$NCM$,GK2u$5$l$F(B
$BNc30$N%^%9%/$,$O$:$l$?$?$a$K(B SIGFPE $B$,H/@8$7$F$$$?62$l$,$"$k!#(B
(code.c)

$B%3%s%Q%$%k40N;;~$K!"(Bmb->access $B$N(B ACC_MACHINE_COMPILED $B%S%C%H$rN)$F$k$N$r(B
$B;_$a$?!#$3$l$K$h$j!"%/%i%9%U%!%$%k$,(B LineNumberTable $B$r;}$C$F$$$k>l9g(B
--- javac -g $B$G%3%s%Q%$%k$5$l$?>l9g(B --- $B$K!"%=!<%9%3!<%ICf$N9T$,I=<($5$l$k!#(B
$B$^$?!"$3$NF0:n$O(B compiler.h $BCf$N(B #undef CONTROL_COMPILED_FLAG $B9T$G@)8f$G$-$k!#(B
(compile.c, compiler.h)

0.3.2 $B%j%j!<%9!#(B

[19990730]

SIGFPU $B$N860x$rC5$k$?$a!"(Bcompiler.c $B$K(B
fillFPUEnv() $B$H(B ShowFPUEnv() $B$rMQ0U$7$?!#(B
(compiler.c)

[19990725]

JDK 1.2 $B$N>l9g!"%7%0%J%k%O%s%I%i$+$iNc30%O%s%I%i%X@)8f$r0\$9J}K!$rJQ$($?!#(B
$B$3$l$^$G$O!"%l%8%9%?$NI|5"$J$I(B sigreturn(2) $BAjEv$N=hM}$r<+A0$G9T$C$?8e$G(B
$B%8%c%s%W$7$F$$$?$,!"(Bsigcontext $B9=B$BNCf$N%W%m%0%i%`%+%&%s%?$r@_Dj$7$F(B
$BC1$K(B return $B$9$k$h$&$K$7$?!#(B
sigprocmask(2) $B$G%^%9%/$r30$9$J$I$N:Y$+$J%W%i%C%H%U%)!<%`$K1~$8$?=hM}$K$D$$$F(B
$B9MN8$9$kI,MW$,$J$$!#(B
(compiler.c)

signalHandler() (compiler.c) $BCf$G!"(BsignalHandler() $B<+?H$r(B
$B%7%0%J%k%O%s%I%i$H$7$F:F@_Dj$7$F$$$?$,!"(B
$B%7%0%J%k%O%s%I%i$,%j%;%C%H$5$l$J$$(B Linux $B$G$O:F@_Dj$r;_$a$?!#(B
(compiler.c)

JDK 1.2 $B$@$1$G$J$/(B 1.1 $B$G$b!"%/%i%9=i4|2=$N%?%$%_%s%0$,(B JLS $B$N5-=RDL$j$K(B
$B$J$k$h$&$K$7$?!#(Bsee [19990514], [19990521]$B!#(B
JDK 1.2 $B$N(B InitClass() $B$NBe$o$j$r(B JDK 1.1 $BMQ$KMQ0U$7$?!#(B
$B$3$l$O!"%^%/%m$G$O$J$/4X?t$G$J$1$l$P$J$i$J$$!#(B
$B%^%/%m$K$7$?>l9g!"<+8J=q$-49$($N%*%U%;%C%H$rJQ99$9$kI,MW$,@8$8$k!#(B
JDK 1.2 $B$N>l9g!"$9$G$K(B InitClass() $B$,8F$P$l$?$+$r(B CCIs(cb, Initialized) $B$G(B
$BH=Dj$9$k$,!"(B1.1 $B$G$O(B ResolveClass() $B$,8F$P$l$?$+$r(B CCIs(cb, Resolved) $B$G(B
$BH=Dj$9$k!#(B
(code.c, compile.c, runtime.c)

[19990724]

CompilerContext $B$N%a%s%P(B ee $B$N=i4|2==hM}$r!"(B
newCompilerContext() $B$+$i(B resetCompilerContext() $B$K0\$7$?!#(B
$B%3%s%Q%$%kCf(B (processAnOpcode()) $B$K8m$C$?(B ee $B$r(B ResolveClassConstant...() $B$K(B
$BEO$7$F!"8m$C$?<gBN$K$h$k%m%C%/$,$J$5$l$F!"(B
AWT $B$r;H$&%W%m%0%i%`$,%G%C%I%m%C%/$7$F$$$?!#(B
(computil.c)

invokeJITCompiledMethod() (invoker.c) $BCf$G!"8F$S=P$785$,(B
compiled code $B$+%$%s%?%W%j%?$+$NH=DjJ}K!$rJQ99!#(B
$B$3$l$^$G$O(B mb->invoker $B$r(B invokeJITCompiledMethod() $B$HHf3S$7$F$$$?$,!"(B
$B$3$NJ}K!$@$H!"%$%s%?%W%j%?$G<B9TCf$K%3%s%Q%$%k$,40N;$7$?>l9g$K8mH=Dj$,5/$3$k!#(B
$BA0%a%=%C%I(B->returnpc $B$,A0%a%=%C%I$N%P%$%H%3!<%I$r;X$7$F$$$k$+$I$&$+!"(B
$B$GH=Dj$9$k$h$&$K$7$?!#(B
(invoker.c)

resolveDynamicConstants() (compile.c) $B$K$F(B multianewarray $BL?Na$N>l9g$N=hM}$r(B
ResolveClassConstant() $B$+$i(B ResolveClassConstantFromClass() $B$KJQ99!#(B
ResolveClassConstant() $B$N$H$-$O!"(B
jdk1.2/demo/applets/SpreadSheet/ $B$K$F!"(BNoClassDefFoundError $B$,=P$F$$$?(B
(compile.c)

invokeJITCompiledMethod() (invoker.c) $B$K$F!"?7$?$J(B JavaFrame $B$N%a%s%P(B
constant_pool $B$r(B NULL $B$G=i4|2=$9$k$h$&$K$7$?!#(B
$B$3$l$^$G$O=i4|2=$;$:$K$$$?!#(B
JDK 1.2 $B$GMQ0U$5$l$?%^%/%m(B IS_JIT_FRAME(...) $B$,!"(B
$B%a%s%P(B constant_pool $B$r(B NULL $B$+$I$&$+%A%'%C%/$9$k$N$G!#(B
(invoker.c)

[19990719]

32bit $B@0?t$N=|;;(B (idiv, irem $BL?Na(B) $B$G!"(B0x80000000 / (or %) -1 $B$r(B
$B8!=P$9$k$?$a$N=|?t%A%'%C%/$NBP>]$,8m$C$F$$$?!#(B
  (%edx $B$,=|?t(B), %ecx = %edx, cdq, %edx $B$r%A%'%C%/(B
$B$H$7$F$7$^$C$F$$$?!#%A%'%C%/;~!"(B%edx $B$K$O=|?t$G$O$J$/(B
$BHo=|?t$N>e0L(B 32bit $B$,F~$C$F$$$?!#(B
(code.c)

[19990711]

sigcontext $B9=B$BN$NL>A0$r(B `struct sigcontext' $B$GE}0l!#(B
`struct sigcontext_struct' $B$O;H$o$J$$!#(B
(compiler.h, configure.in)

0.3.1b $B%j%j!<%9!#(B

[19990709]

#include <asm/sigcontext.h> $B$NA0$K!"(B
#define sigcontext_struct sigcontext $B$H=q$$$?!#(B
(compiler.h)
glibc 2.X $B$G$O(B <asm/sigcontext.h> $B$rD>@\$G$O$J$/(B 
<sigcontext.h> $B$r(B include $B$9$k$3$H$G>e5-$NCV$-49$((B
(sigcontext_struct -> sigcontext) $B$,$J$5$l$k!#(B
$B$7$+$7(B libc5 $B$O(B <sigcontext.h> $B$r;}$?$J$$$?$a!"(B
shuJIT $B$N%=!<%9$G$O(B #include <asm/sigcontext.h> $B$H=q$-$?$$!#(B

0.3.1a $B%j%j!<%9!#(B

[19990705]

ELF $B$N(B FreeBSD (>= 3.0) $B$KBP1~$7$?!#(B
  - gentable.rb $B$K$F!"%7%s%\%kL>@hF,$N(B `_' $B$r<h$j5n$k$N$O(B
    FreeBSD 2.X $B$N>l9g$N$_$K!#(B

0.3.1 $B%j%j!<%9!#(B

[19990701]

configure $B$,(B ruby $B%3%^%s%I$r8+IU$1$i$l$J$$>l9g!"(B
$B7Y9p$rH/$7$F=*N;$9$k$h$&$K$7$?!#(B
(configure.in)

Makefile $B$NL>A0$r0JA0$N$h$&$K(B GNUmakefile $B$KLa$7$?!#(B
(configure.in)

make distclean $B$@$1$G$J$/!"(B
make clean $B$G(B config.cache $B$r:o=|$9$k$h$&$K$7$?!#(B
(GNUmakefile.in)

[19990630]

signal handler $B$G!"(BSIGSEGV, SIGBUS $B$@$1$G$J$/!"(B
$B=|;;(B (idiv, irem, ldiv, lrem) $B$GH/@8$9$k(B SIGFPE $B$b07$&$h$&$K$7$?!#(B
0 $B=|;;$G(B ArithmeticException $B$rH/@8$5$;!"(B
MIN_VALUE / -1 $B$G7k2L$r(B MIN_VALUE $B$K!"(BMIN_VALUE % -1 $B$G7k2L$r(B 0 $B$K$9$k!#(B
$B$?$@$7!"(Blong $B7?$N(B MIN_VALUE [/%] -1 $B$K$D$$$F$O(B
$B%i%$%V%i%j4X?t$,E,@Z$K07$&$3$H$r4|BT$7$F2?$b$7$J$$!#(B
(compiler.c, compiler.h, compile.c, code.c, computil.c)

$B=>Mh$N%^%/%m(B EXC_BY_SIGNAL $B$r(B NULLEXC_BY_SIGNAL $B$KJQ99$7!"(B
ARITHEXC_BY_SIGNAL $B$r?7@_!#(B
EXC_BY_SIGNAL $B$O$3$N(B 2$B$D$N(B or $B$H$7$?!#(B
(compiler.h, code.h, compiler.c)

$B9=B$BN(B throwentry $B$K%a%s%P(B opcode $B$rDI2C!"(B
throwtableAdd() $B$K$F(B opcode $B$bEPO?$9$k$h$&$K$7$?!#(B
(compiler.h, computil.c)

ldiv, lrem $BL?Na$N(B pre-assembled code $B$K$F!"(B
%ebp $B%l%8%9%?$r%9%?%C%/$K@Q$s$GJ]B8$9$k$h$&$K$7$?!#(B
0 $B=|;;$N:]$K(B signal handler $B$,MxMQ$9$k!#(B
(code.c, compiler.c)

[19990524]

code.c $B$N%3%s%Q%$%k%U%i%0$K(B -fno-omit-frame-pointer $B$rDI2C!#(B
(Makefile.in)

codedb.c $B$NF,$K(B #include "config.h" $B$rDI2C!#(B
$B@hF,$G%^%/%m(B CODE_DB $B$,I,MW$J$?$a!#(B
0.3.0 $B$O$-$A$s$HF0$$$F$$$J$+$C$?!D(B

0.3.0a $B%j%j!<%9!#(B

[19990523]

0.3.0 $B%j%j!<%9!#(B
maintenance release $B$G$"$k(B 0.2.11 $B$b%j%j!<%9!#(B

[19990522]

autoconf $B$KBP1~!#(B
./configure; make $B$G%3%s%Q%$%k$G$-$k$h$&$K$7$?!#(B
def.mk $B$OITMW$K$J$C$?$N$G:o=|!#(B
(configure.in, acconfig.h, Makefile.in, $BB>B??t(B)
autoheader $B%3%^%s%I$G(B config.h.in $B$r@8@.!"(B
autoconf $B%3%^%s%I$G(B configure $B$r@8@.$9$k!#(B

FreeBSD 2.2.7, gcc 2.7.2.1 $B$G(B code.c $B$r%3%s%Q%$%k$G$-$J$/$J$C$F$$$k!#(B
$B%l%8%9%?3d$jIU$1$NLdBj$i$7$$!#(B

new $BL?Na$N<+8J=q$-49$($NJ}K!$rJQ99$7$?!#(B
$B%*%U%;%C%H$N!"%3%s%Q%$%i$N@-<A$X$N0MB8$,<e$^$C$?!#(B
(code.c)

[19990521]

getstatic, putstatic, getstatic2, putstatic2 $BL?Na$N<B9T;~!"(B
$B%/%i%9$,=i4|2=$5$l$F$$$J$$>l9g$K(B (!CCIs(cb, Initialized))
InitClass() $B$r8F$V$h$&$K$7$?!#(B
19990514 $B$NJQ99(B (new, invoke* $BL?Na$G(B InitClass()) $B$N1dD9!#(B
$B$3$l$K$h$C$F(B JDK 1.2 $B$G(B javac $B$,F0:n$7$?!#(B
(code.c, compile.c)

[19990517]

$B%^%/%m(B FAST_INVOKER $B$rGQ$7$?!#(B
(runtime.c, compiler.h)

[19990516]

19990514 $B$KGQ$7$?(B sym_ $B$r:F$SMQ0U!#(B
$B4X?t$N%"%I%l%9$,!"MxMQ$9$k;~E@$G2r7h$5$l$F$$$J$$>l9g$,$"$k$N$G!#(B
(compiler.h, compiler.c, invoker.c, runtime.c)

$B%^%/%m(B OBJ_ARRAY_METHODTABLE() (code.h) $BCf$N(B
$BBg0hJQ?t(B classJavaLangObject $B$NCM$r<hF@$9$k:]$K!"(B
edx $B$J$IM>7W$J%l%8%9%?$,;H$o$l$F$$$?!#(Bedi $B0J30$N;HMQ$rM^@)$7$?!#(B
(code.h)

invocationHelper() (runtime.c) $B$K$F!"(B
JIT $B$,(B disable $B$5$l$?>u67(B (java.lang.Compiler#disable()) $B$G!"(B
invoker $B$H$7$F(B compileAndInvokeMethod() $B$r;H$C$F$$$?%P%0$r=$@0!#(B
(runtime.c)

[19990515]

$B%7%s%\%k$N2r7h$K(B JDK 1.2 $B$N(B classLoaderLink() $B$r;H$&$H(B
Java $B$N%a%=%C%I$r8F$S=P$7$F4r$7$/$J$$$N$G!"(B
$BF1Ey(B (+$B&A(B) $B$N(B C $B$N4X?t(B simbolInSystemClassLoader() $B$r=q$$$?!#(B
(linker.c, compiler.h, GNUmakefile)

[19990514]

invoke*(), compileAndInvokeMethod() $B$N%"%I%l%9$rJ];}$9$kJQ?t(B
sym_* $B$rGQ$7$?!#(B
(compiler.h, compiler.c, invoker.c, runtime.c)

FreeBSD 3.0 $B0J>e$G$O(B /usr/lib/aout $B$K$"$k(B a.out $BHG(B libc, libm $B$r(B
$B%m!<%I$9$k$h$&$K$7$F$$$?$H$3$m!"(BELF $BHG$r%m!<%I$9$k$h$&$K$7$?!#(B
(compiler.h)

java_lang_Compiler_start() $B$GGSB>@)8f$r9T$&$h$&$K$7$?!#(B
(compiler.c)

JDK 1.2 $B$N>l9g!"%/%i%9$r=i4|2=(B (InitClass()) $B$N%?%$%_%s%0$r(B
JLS $B$N5-=RDL$j(B (first active use) $B$K$7$?!#(B
new $BL?Na$H(B invoke* $BL?Na$N<B9T;~!"(B
$B$^$@=i4|2=$,9T$o$l$F$$$J$$$J$i(B (!CCIs(cb, Initialized)) $B8F$V!#(B
$B<+8J=q$-49$($r9T$o$J$$(B ($B%^%/%m(B NO_REWRITE $B$,Dj5A$5$l$F$$$k(B) $B>l9g$O!"(B
$B<B9TCf$K(B InitClass() $B$r8F$V$h$&$K$9$k$H<B9T$N$?$S$K8F$s$G$7$^$&$N$G!"(B
$B%3%s%Q%$%k;~$K8F$s$G$*$$$F$7$^$&!#(B
(code.c, compile.c)

[19990513]

type_table[index] & CONSTANT_POOL_ENTRY_RESOLVED $B$r(B
CONSTANT_POOL_TYPE_TABLE_IS_RESOLVED(type_table, index) $B$K=q$-49$($?!#(B
(compile.c, runtime.c)

[19990511]

invocationHelper() (runtime.c) $B$G!"(Bmb->invoker $B$r!"(B
$B%m!<%+%kJQ?t(B invoker $B$KCV$-49$($?!#(B
invocationHelper() $B<B9TCf$KB>$N%9%l%C%I$,(B
mb->invoker $B$r=q$-49$($k>l9g$KHw$($F!#(B
(runtime.c)

invoker $B$NL>A0$rJV$9(B nameOfInvoker() $B$rMQ0U!#(B
(runtime.c)

JDK 1.2 $B$G!"(BExpandJavaStack() $B$r;H$C$F<!$N(B JavaStack $B$rF@$?:]$K!"(B
ee->current_frame->optop $B$K(B tmp_frame $B$r=q$-La$7$F$7$^$C$F$$$?!#=$@0!#(B
(invoker.c)

[19990510]

$B%^%/%m(B ACC_BEING_COMPILED (19990419 $B$KDj5A(B) $B$rGQ$7$?!#(B
$BBe$o$j$K!"%3%s%Q%$%kCf$N%a%=%C%I$O(B invoker $B$r%$%s%?%W%j%?8F$S=P$7$K(B
$B@_Dj$9$k$h$&$K$7$?!#(B
(compiler.h, invoker.c)

$B%3%s%Q%$%k$NGSB>@)8f$r!"(BcompileAndInvokeMethod() (invoker.c) $B$+$i(B
compileMethod() (compile.c) $B$K0\$7$?!#(B
(compile.c, invoker.c)

[19990430]

monitorEnter(), monitorExit() $B$r!"(BJDK 1.2 $B$G$O$=$l$>$l(B
monitorEnter2(), monitorExit2() $B$r;H$&$h$&$KA4BN$r=q$-49$($?!#(B
(invoker.c, computil.c, code.c)

[19990424]

19990419 $B$NJQ99$K$h$C$F%3%s%Q%$%kCf$N%a%=%C%I$,(B
ineterpret $B<B9T$5$lF@$k$h$&$K$J$C$?$?$a!"(B
interpret $B;~$K(B inlining $B$,9T$o$l$F(B CompilerContext $B$N(B pctable $B$,(B
$B%P%$%H%3!<%I$H?)$$0c$$F@$k$h$&$K$J$C$?!#(B(VoyagerClassLoader#<init> $B$GH/@8(B)
$B%a%=%C%I$,8F$S=P$5$l$?2s?t$r(B CodeInfo $BCf$K5-O?$9$k$h$&$K$7!"(B
makePCTable() (compile.c) $BCf$G(B processAnOpcode() $B$r8F$VEY$K(B
$B$=$N2s?t$r%A%'%C%/$7!"8F$S=P$7$,5/$-$F$$$?>l9g$K$O(B makePCTable() $B$N=hM}$r(B
$B$d$j$J$*$9$h$&$K$7$?!#(B
$B%a%=%C%I8F$S=P$7$,>/$7CY$/$J$C$?!#MW2~A1!#(B
(compiler.h, invoker.c, compile.c)

[19990419]

java.lang.Compiler#disable() $B$,8F$P$l$?>u67$G$b!"(B
compileMethod() $B$G$O%3%s%Q%$%k$r9T$&$h$&$K$7$?!#(B
(compile.c)

$B%3%s%Q%$%kCf$N%a%=%C%I$KBP$7$F(B compileAndInvokeMethod() $B$,8F$P$l$?>l9g$O(B
interpret $B$9$k$h$&$K$7$?!#(B
$B%a%=%C%I$,%3%s%Q%$%k$5$l$F$$$k$3$H$rI=$9$?$a$K!"(B
$B%^%/%m(B ACC_BEING_COMPILED $B$rDj5A!#(B
(invoker.c, compiler.h)

$B%3%s%Q%$%kA0$N%a%=%C%I$b(B ACC_MACHINE_COMPILED $B$r%;%C%H$7$F$$$?$H$3$m!"(B
$B%3%s%Q%$%k8e$K$O$8$a$F%;%C%H$9$k$h$&$K$7$?!#(B
(compile.c, invoker.c, runtime.c)

[19990418]

JDK 1.2 for Linux $B$X$NBP1~$r3+;O!#(B
java full version "Linux_JDK_1.2_pre-release-v1"

[19990402]

FreeBSD $B$G$b!"%^%/%m(B __ELF__ $B$,Dj5A$5$l$F$$$?$i!"(B
$B%7%s%\%kF,$X$N(B `_' $B$NDI2C$O$7$J$$$h$&$K$7$?!#(B
(code.h)

[19990331]

(MetaVM) MetaVM $B%5!<%P$K(B -p <port no.> $B%*%W%7%g%s$r<BAu$7$?!#(B
$BBP1~$9$k%W%m%Q%F%#$H$7$F(B metavm.port $B$r8+$k$h$&$K$7$?!#(B
(MetaVMServer.java, VMAddress.java)

[19990321]

(MetaVM) MetaVM $BM-8z;~$O!"(Blibshujit.so $B$G$O$J$/(B libmetavm.so $B$,(B
$B:n$i$l$k$h$&$K$7$?!#(B
(GNUMakefile)

(MetaVM) Skeleton $B$G%j%/%(%9%H=hM}Cf$K%G%P%C%0%a%C%;!<%8$r=PNO$9$k:]!"(B
$B=PNOA0$K(B MetaVM.remoteTransparency(false) $B$r8F$V$h$&$K$7$?!#(B
(Skeleton.java)

(MetaVM) $B%3%s%9%H%i%/%?(B (<init>) $B$O(B methodblock->fb.offset $B$,I,$:(B 0 $B$G!"(B
$B1s3V8F$S=P$7$G<B9T$5$l$F$$$J$+$C$?!#(B
$B%W%m%H%3%k$rJQ99$7!"<B9T$5$l$k$h$&$K$7$?!#(B
(proxy.java, Proxy.java, Skeleton.java, VMOperation.java, vmop.c)

(MetaVM) DistObjectInputStream $B$K!"%/%i%9%m!<%@$r@_Dj$G$-$k$h$&$K$7$?!#(B
($B%a%=%C%I(B DistObjectInputStream#classLoader(ClassLoader cl))
$B$=$N%9%H%j!<%`$+$i%*%V%8%'%/%H$,FI$^$l$k:]!"(B
$B%/%i%9$O$=$N%m!<%@$+$i%m!<%I$5$l$k!#(B
(DistObjectInputStream.java)

(MetaVM) Proxy $B$+$i%/%i%9@8@.MW5a(B (NEW, NEWARRAY, ANEWARRAY, MULTIANEWARRAY) $B$r(B
$BAw$k:]!"%/%i%9%m!<%I85(B (VMAddress $B7?(B) $B$bAw$k$h$&$K$7$?!#(B
Skeleton $B$O%/%i%9$r$=$3$+$i%m!<%I$7!"$^$?%M%C%H%o!<%/%/%i%9%m!<%@$r(B
ObjectInputStream $B$K@_Dj$9$k!#(B
(code.c, proxy.java, Proxy.java, Skeleton.java)

(MetaVM) Skeleton $B$,!"(BREFERENCE $BMW5a$N:](B Proxy $B$K(B
$B%/%i%9%m!<%I85(B (VMAddress $B7?(B)$B$rJV$7!"(BProxy $BB&$O$=$3$+$i%m!<%I$9$k$h$&$K$7$?!#(B
$B=>Mh$O(B Class#forName() $B$r8F$s$G%m!<%+%k$+$i%m!<%I$7$F$7$^$C$F$$$?!#(B
(Skeleton.java,Proxy.java)

[19990317]

(MetaVM) reset $B%3%^%s%I$N=hM}$G!"(BSystem#gc() $B$r8F$V$h$&$K$7$?!#(B
(MetaVMServer.java)

[19990316]

(MetaVM) MetaVM $B$r1s3V@)8f$9$k%D!<%k(B metavmctl $B$rMQ0U$7!"(B
reset $B%3%^%s%I$r<BAu$7$?!#(Breset $B%3%^%s%I$K$h$C$F!"(B
export$BI=!"1s3V%/%i%9%m!<%@!"%/%i%9G[Aw%G!<%b%s$,=i4|2=$5$l$k!#(B
(MetaVMController.java, metavmctl, Skeleton.java, MetaVMServer.java,
 ExportTable.java, RemoteClassLoader.java, ClassDistributionDaemon.java)

(MetaVM) $B%^%/%m(B METAVM_ARRAY $B$r(B METAVM_NO_ARRAY $B$H$$$&(B
$B5U$NLr3d$N%^%/%m$GCV$-49$($?!#(B
(compile.c, code.c, def.mk)

[19990315]

(MetaVM) $B%/%i%9(B VMAddress $B$K(B writeObject(), readObject() $B$r<BAu$7$?!#(B
(VMAddress.java)

(MetaVM) $B%W%m%Q%F%#(B metavm.hostanme $B$G!"(B
$B%m!<%+%k$N%[%9%HL>$r;XDj$G$-$k$h$&$K$7$?!#(B
(VMAddress.java)

(MetaVM) $B%M%C%H%o!<%/%/%i%9%m!<%@$r(B MOBA $B$+$i0\?"$7$?!#(B
$B%*%V%8%'%/%H$N1s3V@8@.;~$K$b!"%/%i%9$N%m!<%I85$r(B
$BC10l(B JVM $B$HF1$8$K$7$?!#(B
(ClassDistributionDaemon.java, ClassDistributor.java,
 LocalClassLoader.java, RemoteClassLoader.java)

(MetaVM) JNI $B$N(B NewGlobalRef() $B$r8F$s$@:]$K!"(B
$B$b$H$N(B jobject $B7?JQ?t$r(B NewGlobalRef() $B$NJV$jCM$GCV$-49$($k$h$&$K$7$?!#(B
(vmop.c, proxy.c, byvalue.c)

[19990306]

(MetaVM) $B1s3V8F$S=P$7$N%W%m%H%3%k$rJQ99!#(B
$B%a%=%C%IL>(B, signature $B$rAw$k$N$r;_$a!"(B
methodtable $BCf$N(B index (uint16_t) $B$rAw$k$h$&$K$7$?!#(B
$BNc30$,H/@8$7$J$+$C$?>l9g$K$O(B null $B$G$O$J$/(B (byte)0 $B$rJV$9$h$&$K$7$?!#(B
$BDL?.NL:o8:!"$*$h$S!"J8;zNs$+$i$N%a%=%C%IC5:w$N:o8:$K$h$j!"9bB.2=!#(B
(code.c, proxy.c, Proxy.java, Skeleton.java, VMOperation.java, vmop.c)

(MetaVM) metavm $B%3%^%s%I(B (MetaVMServer.java) $B$K(B
-n (TCP_NODELAY) $B%*%W%7%g%s$rMQ0U$7$?!#(B
(MetaVMServer.java)

[19990301]

(JITDO) $B%a%=%C%I8F$S=P$7$N0z?t(B (Object[])$B!"(Bmultianewarray $B$N0z?t(B (int[]) $B$r(B
Proxy $B$KJQ2=$5$;$:$KE>Aw$9$k$?$a$K(B wrap $B$9$k%/%i%9!"(B
ArrayOfObjectWrapper, ArrayOfIntWrapper $B$rMQ0U$7$?!#(B

(JITDO) $B$3$l$^$G;2>H7?$NG[Ns(B ([L..., [[...) $B$O(B Copyable $B$@$C$?$,!"(B
$B$"$i$f$kG[Ns$r(B Copyable $B$G$J$/$7$?!#(B

(JITDO) $B;2>H7?$NG[Ns$b1s3V@8@.$9$k$h$&$K$7$?!#(B

(JITDO) ExportTable#expire() $B$G(B
$B$-$A$s$H(B expire $B$,9T$o$l$F$$$J$+$C$?LdBj$KBP=h!#(B
(ExportTable.java)
  
(JITDO) JITDO $B$r(B MetaVM $B$H2~L>!#(B
$B$D$$$G$K%/%i%9(B Copyable $B$r(B ByValue $B$H2~L>!#(B

[19990227]

(JITDO) JITDO.instantiationVM() $B$r8F$P$:$H$b(B remote flag $B$,(B on$B!"(B
$B$D$^$j(B Proxy $B$,1s3V%*%V%8%'%/%H$K8+$($k$h$&$K$7$?!#(B
JIT $B%3%s%Q%$%i$N=i4|2=(B (java_lang_Compiler_start()) $B;~$K(B
on $B$K$9$k$h$&$K$7$?!#(B
(compiler.c)

(JITDO) $B%*%V%8%'%/%H$KBP$9$kA`:n;~$K(B remote flag $B$N%A%'%C(B
$B%/!"%*%V%8%'%/%H(B instanceof Proxy $B$H$$$&=g$G%A%'%C%/$7$F(B
$B$$$?$H$3$m!"%A%'%C%/=g$r5U$K$7$?!#(B
remote flag $B$N%G%U%)%k%HCM$r(B on $B$K$7$?$N$r<u$1$F!"(B
$B%m!<%+%k<B9T$N@-G=8~>e$N$?$a!#(B
(code.c)

(JITDO) DistObject*Stream $B$K(B Buffered*Stream $B$r$+$^$7$?!#(B
JITDOServer $B$N(B -b $B%*%W%7%g%s$+%W%m%Q%F%#(B metavm.bufsize $B$G(B
$B%P%C%U%!%5%$%:$r;XDj$G$-$k$h$&$K$7$?!#(B
(Proxy.java, Skeleton.java, JITDO.java, JITDOServer.java)

(JITDO) $B%W%m%Q%F%#(B metavm.tcp_nodelay $B$,(B true, yes, enable $B$J$I$N>l9g!"(B
$B:n$C$?%=%1%C%H$KBP$7$F(B setTcpNoDelay(true) $B$r8F$V$h$&$K$7$?!#(B
(Proxy.java, JITDOServer.java, JITDO.java)

[19990228]

(JITDO) $B%*%V%8%'%/%H$N0LCV(B (VMAddress) $B$rF@$k%a%=%C%I(B
Proxy#address() $B$rMQ0U$7$?!#(B
(Proxy.java)

$B%G%P%C%0;~!"(Bcheckcast, instanceof $BL?Na$G%/%i%9L>$r=PNO$9$k$h$&$K$7$?!#(B
(code.c)

(JITDO) forceToImplement() $B$G85$N(B imethodtable $B$r(B free() $B$G2rJ|$7$F$$$?$,!"(B
$B$3$l$r;_$a$?!#J#?t%/%i%9$G6&M-$5$lF@$k$N$GC1=c$K2rJ|$O$G$-$J$$!#(B
$B%a%b%j%j!<%/$r5/$3$7F@$k(B...
(type.c)

[19990226]

(JITDO) arraylength $BL?Na$KBP1~!#(B

[19990225]

(JITDO) $B%/%i%9L>$rJQ99!#(B
JitdoController -> JITDO
JitdoServer -> JITDOServer
RequestServer -> Skeleton

(JITDO) $B$3$l$^$GG[Ns7?$O(B Copyable $B$@$C$?$,!"(B
$B4pK\7?$NG[Ns$O(B Copyable $B$G$J$/$7$?!#(B

(JITDO) $BG[Ns$X$N1s3V;2>H$O8=<BE*$G$O$J$$$HH=CG!#(B
$B4JC1$KIQHK$K8F$S=P$5$l$k(B System#arraycopy() $B$G:$$C$?$3$H$K$J$k$N$G!#(B
$B%^%/%m(B JITDO_ARRAY $B$r?7@_$7$FA*Br$G$-$k$h$&$K$7$?!#(B

[19990224]

(JITDO) $B;2>H7?$N%U%#!<%k%I$KBP$7$F$b(B
32bit $B7?$NFI$_=q$-$,$J$5$l$F$$$?$N$r=$@0!#(B
(compile.c)

(JITDO) $BG[Ns$NFI$_=q$-$r(B JITDO $BBP1~$K$7$?!#(B
$BG[Ns$N@8@.$N(B JITDO $BBP1~$O40N;$7$F$$$J$$!#(B
(code.c, proxy.c, metavm.h)

[19990223]

$B%i%$%V%i%j$r(B sysAddDLSegment() $B$9$k;EAH$_$rJQ99$7$?!#(B
FreeBSD $B$N$_(B libc, libm $B$N(B sysAddDLSegment() $B$r%O!<%I%3!<%I$7$F$$$?$H$3$m!"(B
$B$h$j(B generic $B$J;EAH$_$K$7!"$5$i$K4D6-JQ?t$GJQ99$G$-$k$h$&$K$7$?!#(B
$B%G%U%)%k%H$G(B FreeBSD 4.0-current $B$KBP1~$7$?!#(B
(compiler.c, compiler.h)

(JITDO) $B1s3V%*%V%8%'%/%H$KBP$9$k(B monitorenter, monitorexit $B$KBP1~$5$;$?!#(B
(code.c, Protocol.java, Proxy.java, RequestServer.java, proxy.c, 

0.2.10 $B%j%j!<%9!#(B
IGNORE_DISABLE $B$O(B #undef $B$KLa$7$?!#(B

[19990222]

(JITDO) $B$-$A$s$HF0:n$5$;$k$3$H$,$G$-$?!#(B

[19990221]

checkcast, instanceof $BL?Na$N(B pre-assembled code $B$K(B
ClassClass * $B$r=q$-9~$`2s?t$r(B 1$B2s$K$7$?!#(B
(code.c, compile.c)

[19990220]

invoke* $BL?Na$N(B pre-assembled code $BCf$G!"(B%ecx $B$H(B %edi $B$NLr3d$rF~$l49$($?!#(B
(code.c)

(JITDO) $BBgI}$KJQ99!#(B
(code.c)

[19990214]

$B%U%!%$%kF,$N(B copyright $BI=<($b$-$A$s$H(B GPL $B$N$b$N$K$7$?!#(B

__asm__ $B$r(B asm $B$K=q$-49$($?!#(B

native code $B$+$i(B invokeMethod() (runtime.c) $B$r8F$V:]$K!"(B
$B8F$S=P$7;~E@$N%9%?%C%/%]%$%s%?$r(B push $B$9$k$N$G$O$J$/!"(B
native code $B$G6I=jJQ?t$N%Y!<%9$r7W;;$7$F$*$$$F$=$l$r(B push $B$9$k$h$&$K$7$?!#(B
(code.c, runtime.c)

0.2.9a $B%j%j!<%9!#(B
0.2.9 $B$G(B #define IGNORE_DISABLE $B$H$7$?$@$1!#(Bjava Linpack $B$N7k2L$,NI$$$N$G!#(B
jre Linpack $B$G$N7k2L$O(B #undef $B$NJ}$,NI$$!#IT;W5D!#(B

[19990210]

FreeBSD $B$G$O!"(Bsignal handler $B$r:F@_Dj$9$k:]$K(B
$B$=$N(B signal (SIGSEGV or SIGBUS) $B$r(B unblock $B$9$k$h$&$K$7$?!#(B
signal handler $B<B9TCf$O$=$N(B signal $B$O(B block $B$5$l$F$$$k$N$G!"(B
unblock $B$7$F$*$+$J$$$H<!2s$N(B NullPointerException $BH/@8;~$K%O%s%0$9$k!#(B
(compiler.c)

CompilerContext $B$rI,MW$JEY$K(B malloc(), free() $B$7$F$$$?$N$r;_$a!"(B
CompilerContext $B$N%W!<%k$r@_$1$F:FMxMQ$9$k$h$&$K$7$?!#(B
computil.c $B$N30$+$i$O(B newCompilerContext() $B$G$O$J$/(B getCompilerContext()$B!"(B
freeCompilerContext() $B$G$O$J$/(B releaseCompilerContext() $B$r;H$&$Y$7!#(B
(computil.c, compiler.h, compile.c)

throwtable $B$N%G%U%)%k%H$N%5%$%:$r>.$5$/$7$?!#(B1024 -> 8$B!#(B
$B%a%b%j$rBg$-$/?)$&860x$@$C$?!#(B
javac $B$G(B 45MB $B$[$I?)$C$F$$$?$H$3$m!"(B25MB $B$/$i$$$K$J$C$?!#(B
(compiler.h)

0.2.9 $B%j%j!<%9!#(B

[19990209]

$B%*%W%7%g%s(B cmplatload $B$rMQ0U!#(B
$B%/%i%9$r%m!<%I$7$?;~E@$G%a%=%C%I$9$Y$F$r%3%s%Q%$%k$9$k!#(B
JIT $B$,5/F0$7$?;~E@$G$9$G$K%m!<%I$5$l$F$$$k%/%i%9$N%a%=%C%I$b%3%s%Q%$%k$9$k!#(B
$B$^$@$-$A$s$HF0:n$7$J$$!#(BSIGSEGV $B$GMn$A$k!#(B
(compiler.c, compiler.h)

FreeBSD $B$G(B EXC_BY_SIGNAL $B$rM-8z$K$9$k$H!"$^$l$K(B SIGALRM $B$GMn$A$kLdBj$KBP=h!#(B
FreeBSD $B$G$O!"(Bsignal handler $B$,8F$P$l$?:]$K(B signal $B$KBP1~$9$k(B
handler $B$,%/%j%"$5$l$F$7$^$&$N$G!"(BsignalHandler() (compiler.c) $B$G(B
intrInitMD() $B$r8F$V$3$H$G$9$Y$F$N(B signal handler $B$r:F@_Dj$7$F$$$?!#(B
$B$H$3$m$,(B JDK for FreeBSD $B$N(B intrInitMD() $B$G$O(B SIGALRM $B$KBP$9$kITMW$J@_Dj$r(B
$B$7$F$$$k$?$a!"(BGreen Threads $B$,@_Dj$7$?(B handler $B$r>e=q$-$7$F$7$^$C$F$$$?!#(B
intrInitMD() $B$r8F$V$N$r;_$a!"I,MW$J:F@_Dj$N$_9T$&$h$&$K$7$?!#(B
(compiler.c)

OS $B$K$+$+$o$i$:!"(BEXC_BY_SIGNAL $B$,M-8z$J>l9g$K(B
signal handler $BFb$G(B handler $B$r:F@_Dj$9$k$h$&$K$7$?!#(B
JDK $B$N(B signalHandlerPanic() $B$r7PM3$;$:$KL\E*$N(B handler $B$,8F$P$l$k$h$&$K!#(B
$BH<$$!"(Bsigcontext $B$r:G=i$N(B 2$B2s$OC5:w$9$k$h$&$K$7$?!#(B
(compiler.c)

[19990208]

0.2.8 $B%j%j!<%9!#(B

[19990207]

gdbm_*(), dbm_*() $B$N%"%I%l%92r7h$r%j%s%+$KMj$i$:$K!"(B
dlopen(), dlsym() $B$G9T$&$h$&$K$7$?!#(B
libgdbm.so, libndbm.so $B$,$J$/$H$bF0:n$9$k$h$&$K!#(B
(compiler.c, codedb.c, compiler.h)

code DB $BFb$r1\Mw$9$k%D!<%k(B codedbinfo $B$rMQ0U!#(B
(codedbinfo.c, GNUmakefile)

[19990206]

writeCode() (compile.c) $BCf$G$9$Y$F9T$C$F$$$?Dj?t$N2r7h$N$&$A!"(B
$B<B9T$N$?$S$KJQ$o$jF@$k$b$N$N2r7h$r(B resolveDynamicConstants() $B$KJ,N%$7$?!#(B
(compile.c)

$B%^%/%m(B GET_SIGCONTEXT $B$rDj5A$7$?>l9g!"(BEXC_BY_SIGNAL $B$K$+$+$o$i$:!"(B
signal handler $B$G(B struct sigcontext $B$NCf?H$rI=<($9$k$h$&$K$7$?!#(B
$B%G%P%C%0$N$?$a!#(B
(compiler.c, runtime.c, compiler.h)

getstatic, putstatic $B$,(B constant pool $B$+$i;2>H$9$k(B $B%U%#!<%k%I$r(B
$B2r7h(B (ResolveClassConstant*()) $B$7K:$l$F$$$?$N$r=$@0!#(B
(compile.c)

$B9=B$BN(B throwentry $B$N3F%a%s%P$N%5%$%:$rJQ99!#(B
throwentry $B$NI=$b(B code DB $B$K5-O?$9$kI,MW$,$"$k$?$a!"%5%$%:$r>.$5$/$7$?!#(B
(compiler.h)

$B@8@.$7$?(B native code $B$r%U%!%$%k$KJ]B8!":FMxMQ$9$k5!G=$r<BAu!#(B
def.mk $BCf$N(B CODE_DB $B$rM-8z$K$7$F%3%s%Q%$%k$7!"(B
$B%*%W%7%g%s(B codedb $B$GMxMQ$G$-$k!#(B
(def.mk, GNUmakefile, codedb.c, compile.c, compiler.c, compiler.h, computil.c)

gcc 2.7 $BMQ$N%"%;%s%V%j%3!<%I=$@0%9%/%j%W%H(B postcmpl.rb $B$r!"(B
$B%3%s%Q%$%i$,@8@.$7$?ItJ,$OJQ99$7$J$$$h$&$K$7$?!#(B
`leal \.?LC' $B$K%^%C%A$7$F!"$+$D<!$N9T$,(B `#APP' $B$@$C$?>l9g$N$_!"(B
leal $B$r(B pushl $B$KCV49$9$k!#(B
(postcmpl.rb)

[19990205]

native code $B$+$i(B invokeMethod() (runtime.c) $B$r8F$V:]$K!"(B
%edi, %esi $B$r%9%?%C%/$KB`Hr$9$k$N$r$d$a$?!#%a%=%C%I8F$S=P$79bB.2=!#(B
(code.c)

invokeMethod() (runtime.c) $B$N0z?t$N=g$rJQ$($?!#(B
mb->invoker() $B$r8F$S=P$9:]$K0z?t(B 4$B$D$N(B push $B$r>J$3$&$H$$$&7W2h$X$NI[@P!#(B
$B7W2h$OFU:B!D(B
(runtime.c, compiler.h, code.c)

$B%*%W%7%g%s(B igndisable $B$@$1$G$J$/!"%^%/%m(B IGNORE_DISABLE $B$G!"(B
java.lang.Compiler#disable(),enable() $B$rL58z2=$G$-$k$h$&$K$7$?!#(B
(compiler.c, runtime.c, invoker.c, compiler.h)

invokeMethod() $BCf$G!"@8@.$5$l$?(B native code $B$r8F$V:]$N(B
$B>r7oH=CG$r$R$H$D8:$i$7$?!#%a%=%C%I8F$S=P$79bB.2=!#(B
(runtime.c)

[19990201]

struct sigcontext $B$rC5$95/E@$NI=8=J}K!$rJQ$($?!#(B
$B$R$H$DL\$N6I=jJQ?t$N%"%I%l%9(B + 16 -> &uc
(compiler.c)

[19990130]

signal $B$rMxMQ$7$F(B null check $B$r:o8:$7$?!#(B
$B$"$k>l9g$K(B SIGSEGV or SIGBUS $B$r(B NullPointerException $B$H8+Jo$9!#(B
(code.c, code.h, compiler.c compiler.h)

pre-assembled code $B$NF,$K!"$=$N%3!<%I$,(B NullPointerException $B$r(B
throw $B$7F@$k$+$I$&$+$N%U%i%0$r2C$($?!#(B
(code.h, code.c, gentable.rb)

$B9=B$BN(B CodeInfo $B4X78$N4X?t$r(B runtime.c $B$+$i(B computil.c $B$K0\$7$?!#(B
(runtime.c, computil.c)

$B9=B$BN(B CompilerContext $B$N%a%s%P$G$"$C$?(B
exc_handler_nativeoff, finish_return_nativeoff
$B$r9=B$BN(B CodeInfo $B$K0\$7$?!#(B
signal handler $B$+$iNc30%O%s%I%i$N%"%I%l%9$r8+IU$1$k$?$a$K(B
$B<B9TCf$K$b(B exc_handler_nativeoff $B$,I,MW$H$J$C$?$?$a!#(B
(compiler.h, compile.c)

0.2.7 $B%j%j!<%9!#(B

[19990127]

long $B7?$N(B shift $BL?Na(B (lshl, lshr, lushr) $B$N(B pre-assembled code $B$N(B
$B%P%0$r=$@0!#$d$O$j(B egcs-1.0.3 $B$,@8@.$9$k%3!<%I$,%Y!<%9!#(B
(code.c)

writeCode() (compile.c) $BCf$N!"@8@.$7$?%3!<%I$r=q$-9~$`%"%I%l%9(B
cc->bufp $B$r%-%c%C%7%e$9$kJQ?t(B bufp $B$NCM$,!"%P%C%U%!3HD%$N:]$K(B
obsolete $B$K$J$k%P%0$r=$@0!#(B
$B?t%u7nA0$K$bF1MM$N%P%0$KG:$^$5$l$?5-21$,!D(B
(compile.c)

$B>e5-=$@0$KH<$$!"%^%/%m(B lastBufend()$B!"9=B$BN(B 
CompilerContext $B$N%a%s%P(B lastbufp_off $B$,ITMW$K$J$j!":o=|!#(B
(compiler.h, computil.c)

[19990121]

pre-assembled code $BCf$N%i%Y%kL>$N%9%Z%k%_%9$rD{@5!#(B
  exc_hanlder_shift_done -> exc_handler_shift_done
(code.c)

long $B7?$N(B shift $BL?Na(B (lshl, lshr, lushr) $B$G!"(B
`rorb $1,%cl' $B$r(B `rorb %cl' $B$H$7$?!#(B
(code.c)

iload_*, lload_* $BL?Na$G!"(B
`movl 0(%esi),...' $B$r(B `movl (%esi),...' $B$H$7$?!#(B
(code.c)

invokeJITCompiledMethod() (invoker.c) $BCf$G!"(B
invoke{,Synchronized}JavaMethod() $B$r8F$S=P$9Be$o$j$K=hM}$r=q$-2<$7$?!#(B
$B%a%=%C%I8F$S=P$7$N9bB.2=!#(B
(invoker.c)

invokeJITCompiledMethod() $BCf$K(B profiling (java -prof) $B$N$?$a$N(B
$B;~4V7WB,%3!<%I$rF~$l$?!#$?$@$7!"%G%U%)%k%H$G$OL58z2=$7$F$"$k!#(B
$B%^%/%m(B ENABLE_PROFILING $B$GM-8z$K!#(B
(invoker.c)

0.2.6 $B%j%j!<%9!#(B

long $B7?$N(B shift $BL?Na(B (lshl, lshr, lushr) $B$N(B pre-assembled code $B$r!"(B
gcc-2.7.2.3 $B$N@8@.$9$k$b$N$+$i(B egcs-1.0.3 $B$N$=$l$KJQ99$7$?!#(B
(code.c)

[19990120]

$B@8@.$9$k(B native code $B$NF,$G9T$C$F$$$?(B native code $B$N%"%I%l%9$r5a$a$k=hM}(B
  nativecode = mb->CompiledCode
$B$r!"%"%I%l%9$rI,MW$H$9$k3F2U=j(B
  exc_handler, ret, tableswitch, lookupswitch, new(rewrite)
$B$K0\$7$?!#6I=jJQ?t(B nativecode $B$r:o=|!#(B
$B%a%=%C%I8F$S=P$7$N9bB.2=!#(B
(code.c)

$BNc30H/@8;~$K%9%?%C%/$r%/%j%"$9$k$?$a$K!"%9%?%C%/$N%Y!<%9$r(B
native code $B$N6I=jJQ?t(B ostack $B$KJ]B8$7$F$$$?!#(B
$B$3$N(B ostack $B$r:o=|$7!"Nc30H/@8;~$K%"%I%l%9$r7W;;$9$k$h$&$K$7$?!#(B
(code.c)

native code $B$N6I=jJQ?t$N$?$a$K(B 48$B%P%$%H3NJ]$7$F$$$?$H$3$m!"(B
$B:GDc8BI,MW$J(B 4$B%P%$%H$K8:$i$7$?!#(B
(code.c)

[19990118]

class initializer $B$O%3%s%Q%$%k$7$J$$$h$&$K$7$?!#(B
(compiler.c)

$B%*%W%7%g%s(B cmplclinit $B$rMQ0U!#(B
class initializer $B$r%3%s%Q%$%k$9$k!#(B
(compiler.c, compiler.h)

[19990117]

0.2.5 $B%j%j!<%9!#(B

[19990110]

GNU bash, version 2.01.1(1)-release $B$G$O!"%7%'%k%9%/%j%W%H(B
  for subdir in ; do ...
$B$H(B in $B$N8e$,6u$@$H(B syntax error $B$K$J$kLdBj$KBP=h!#(B
bash 1.14.7 $B$G$O(B error $B$K$J$i$J$+$C$?!#(B
[Thanks $B9b66=(L@$5$s(B <htaka@nalgo.co.jp> for a bug report]
(GNUmakefile)

[19990109]

$B3F%P%$%H%3!<%IL?Na$N(B pre-assembled code $B$r(B
x86 $B$GL$Dj5A$G$"$k(B 0xf1 $B$G6h@Z$k$h$&$K$7$?!#(B
$B$3$l$^$G$O(B 0x0f, 0x0f $B$G6h@Z$C$F$-$?$N$@$,!"(B
$B$3$l$,(B AMD 3D Now! $BL?Na$N(B prefix $B$H$7$F;H$o$l!"(B
3D Now! $BL?Na$KBP1~$7$?(B GNU binutils $B$,=P$F$-$?$?$a!#(B
[Thanks $B9b66=(L@$5$s(B <htaka@nalgo.co.jp> for a bug report]
(code.h, gentable.rb)

[19990107]

$B4X?t(B invokeCompiledMethod() $B$r(B invokeJITCompiledMethod() $B$K2~L>!#(B
(invoker.c, compiler.c, compiler.h, runtime.c)

0.2.4 $B%j%j!<%9!#(B

[19990106]

java_lang_Compiler_start() (compiler.c) $B$,J#?t2s8F$P$l$?>l9g$K!"(B
2$B2sL\0J9_$O=i4|2=$r<B9T$7$J$$$h$&$K$7$?!#(B
$B%/%i%9(B java.lang.Compiler $B$,(B GC $B$G2s<}$5$l$F:F$S%m!<%I$5$l!"(B
Compiler#<clinit> -> Compiler#initialize() -> java_lang_Compiler_start() $B$H(B
$B:F$S8F$P$l$F$7$^$&$3$H$,$"$k$?$a!#(B
Swing $B$N(B javax.swing.UIManager#initialize() $B$G(B
java.lang.Compiler#disable(),enable() $B$r8F$V$?$a$K(B
java.lang.Compiler $B$,:F$S%m!<%I$5$l$k!#(B
(compiler.c)

$B%*%W%7%g%s(B igndisable $B$N5sF0$rJQ99!#(B
$B$=$b$=$b(B java.lang.Compiler#disable(), enable() $B$,F/$+$J$$$h$&$K$7$?!#(B
(compiler.c, invoker.c, compile.c)

bool_t UseLosslessQuickOpcodes $B$r8m$C$F(B FALSE $B$K$7$F$$$?$H$3$m!"(B
TRUE $B$KD>$7$?!#(B
(compiler.c)

java.lang.Compiler#disable(), enable() $B$,$-$A$s$HF/$/$h$&$K$7$?!#(B
$BM>7W$J%A%'%C%/$NJ,!"%a%=%C%I8F$S=P$7$N@-G=$O<c43Dc2<$9$k!)(B
disable $B$5$l$F$$$k>l9g!"(B
compileAndInvokeMethod() (invoker.c) $B$K$F!"%P%$%H%3!<%I$r8F$S=P$7!"(B
invokeMethod() (runtime.c) $B$K$F!"(BcompileAndInvokeMethod() $B$r8F$V$J$i(B
restack $B$9$k$h$&$K$7$?!#(B
(invoker.c, runtime.c)

[19990105]

$B%*%W%7%g%s(B igndisable $B$rMQ0U!#(B
java.lang.Compiler#disable() $B$rL58z2=$9$k!#(B
(compiler.c, compiler.h)

compileAndInvokeMethod() (invoker.c) $B$K$F!"(BJIT $B$,(B disalble $B$5$l$F$$$?$i(B
JDK $BFb$N(B invoke*Method() $B$r8F$V$h$&$K$7$?!#(B

$BJQ?t(B `sym_$B4X?tL>(B' $B$H$7$F!"(BinvokeAbstractMethod(), invokeLazyNativeMethod() $B$N(B
$B%"%I%l%9$rMQ0U$7$?!#(B
(compiler.c, compiler.h)

access2invoker() (computil.c) $B$G!"(BinvokeAbstractMethod $B$J$I(B
$BD>@\4X?t$N%"%I%l%9$rMxMQ$9$kBe$o$j$K(B sysDynamicLink() $B$G2r7h$7$F$*$$$?(B 
sym_invokeAbstractMethod $B$J$I$rMxMQ$9$k$h$&$K$7$?!#(B
(computil.c)

[19990104]

invokeMethod() (in runtime.c) $BCf$G!"(Bstatic $B%a%=%C%I8F$S=P$7$N:]$K(B
$B%/%i%9%*%V%8%'%/%H$rF@$k=hM}$r(B pre-assembled code (code.c) $B$K0\$7$?!#(B
CaffeineMark 3.0 $B$N(B Float, String $B$N7k2L$O8~>e!"(B
Linpack benchmark $B$N7k2L$ODc2<$7$?(B ???
(runtime.c, code.c)

[19990103]

$B%/%l%8%C%H!"Cx:n8"I=<($K(B `1999' $B$rDI2C!#(B

FreeBSD, gcc 2.7.2.1 $B$G(B make $B$,DL$k$h$&$K!"(B
GNUmakefile $B$N(B code.s $B<~JU$r=$@0!#(B
(GNUmakefile)

invokeMethod() (in runtime.c) $B$X$NJQ99$G(B Linpack for
Java $B$,$+$J$jCY$/$J$C$F$$$?$N$r!"(Bshujit-0.2.3 $B$N(B 
runtime.c $B$r;29M$K=$@0!#(B
(runtime.c)

[19981231]

$BJ8;zNs$N%"%I%l%9$r(B push $B$9$k%3!<%I(B (PUSH_CONSTSTR(...) in code.h) $B$G!"(B
gcc 2.7.2.[13] $B$G$OM>7W$J%l%8%9%?(B (esi) $B$r;H$C$FFbMF$r2u$7$F$$$?!#(B
egcs 1.0.3 $B$N@8@.$9$k%3!<%I$G$OLdBj$,$J$+$C$?!#(B
gcc 2.7.X $B$G(B code.o $B$r@8@.$9$k:]$O!"(Bcode.s $B$r(B
ruby $B%9%/%j%W%H(B (postcmpl.rb) $B$G=$@0$9$k$h$&$K$7$?!#(B
[Thanks $B9b66=(L@$5$s(B <htaka@nalgo.co.jp>
 and Justin Wells $B$5$s(B <justin@semiotek.com> for bug reports]
(postcmpl.rb, GNUmakefile)

[19981228]

invokeMethod() $B$J$I$G$N(B prepareCompiledCodeInfo() $B$N8F$S=P$7$r(B
initializeClass(), compileClass() (compiler.c) $B$K0\F0$7$?!#(B
(runtime.c, compiler.c)

[19981227]

struct CatchFrame (oobj.h) $B$K%a%s%P(B state $B$r2C$($?(B
CatchFrame_w_state $B7?$rMQ0U!#(B
(compiler.h)

$BFbItL?Na(B exc_handler $BCf$G!"H/8+$7$?Nc30%O%s%I%i$,2>Dj$9$k(B state $B$K(B
$BA+0\$9$k$h$&$K$7$?!#(B
(code.c)

[19981216]

$B%a%=%C%I$4$H$NNc30%O%s%I%i$X$N%8%c%s%W(B (SIGNAL_ERROR* in code.h) $B$G!"(B
state 0 $B$KA+0\$7$F$*$/$h$&$K$7$?!#(B
(code.h, code.c)

[19981129]

checkcast $BL?Na$G!"(B
$BBP>]%*%V%8%'%/%H$,(B null $B$N>l9g$K(B is_instance_of() $B$r8F$P$J$$$h$&$K$7$?!#(B

[19981030]

(JITDO) JITDO $B%5!<%PFb$N(B thread pool $B$r:n$jD>$7$?!#(B
(NET/shudo/metavm/{ThreadPool,JitdoServer,RequestServer}.java)

[19981022]

JVM $B$K(B SIGQUIT $B$rAw$k$HFbIt>uBV$r%@%s%W$9$k$O$:$,(B SIGSEGV $B$,H/@8$7$F$$$?!#(B
signalHandler() $BCf$G!"(BshowStackFrames(EE()) $B$r;_$a$?!#(B
(compiler.c)

(JITDO) JITDO $B%5!<%P$NOHAH$,$G$-$?!#(B
$B5/F0%9%/%j%W%H(B metavm/bin/metavm $B$rMQ0U!#(B

[19981017]

(JITDO) Runtime Compiler $B$K$h$k(B JVM $B$NJ,;6%*%V%8%'%/%HBP1~!"(B
JITDO (JIT Ditributed Object) $B<BAu3+;O!#(B
(metavm/, NET/shudo/metavm/)

[19981010]

32bit $B@0?t$N=|;;(B (idiv $BL?Na(B) $B$G!"(Bstate 4 $B$K8B$j!"(B
$BHd=|?t$r(B 64bit $B$KId9f3HD%(B (x86 $B$N(B CDQ $BL?Na(B) $B$9$k$N$rK:$l$F$$$?!#=$@0!#(B
Swing $B$N(B JTextArea, JTextField $B$GJ8;z$,IA2h$5$l$J$$%P%0$N1s0x$H$J$C$F$$$?!#(B
(code.c)

32bit $B@0?t$N=|;;(B (idiv $BL?Na(B) $B$G!"Hd=|?t$r(B 64bit $B$KId9f3HD%$9$kA0$K(B
EDX $B%l%8%9%?$rL5BL$K(B 0 $B%/%j%"$7$F$$$?$N$r>J$$$?!#(B
(code.c)

0.2.3 $B%j%j!<%9!#(B

[19981005]

Linux $B$G$O!"(Blibc $B$N<oN`$K$h$C$F(B
$B%^%/%m(B RESOLVE_SYMBOL_ON_CODE $B$rJQ$($k$h$&$K$7$?!#(B
(compiler.h)

[19981004]

compiledCode() -> assembledCode() $B$H4X?tL>$rJQ$($?!#(B
(code.c, compile.c, compiler.[hc], gentable.rb)

[19981003]

dlopen(..., RTLD_LAZY) $B$G%m!<%I$7$?%i%$%V%i%jCf$N4X?t$N%"%I%l%9$r!"(B
$B$=$N4X?t$r<B9T$9$kA0$KF@$i$l$k$+(B (Linux libc5)$B!"F@$i$l$J$$$+(B (FreeBSD) $B$K(B
$B0MB8$7$J$$%3!<%I$H$7$?!#JQ?t(B `sym_$B4X?tL>(B' $B$NF3F~!#(B
(compiler.c, compiler.h, compile.c)

libc5 $B$N4D6-$G$O(B dlopen(), dlsym() $B$G%"%I%l%9$rF@$?4X?t$N%3!<%I$r(B
$B=q$-49$($i$l$k$N$G!"$"$i$+$8$a4X?t$N%"%I%l%9$r2r7h!"=q$-9~$s$G$$$?$,!"(B
$B%3!<%I$,=q$-49$(2DG=$G$"$k$3$H$r2>Dj$9$k$N$r;_$a$?!#(B
$B%^%/%m(B RESOLVE_SYMBOL_ON_CODE $B$r(B #undef$B!#(B
glibc2 $BBP1~$N0l4D$G$b$"$k!#(B
(compiler.h)

0.2.2 $B%j%j!<%9!#(B

[19981001]

$B8F$S=P$5$l$?%a%=%C%I$,%3%s%Q%$%k$5$l$k:]!"%3%s%Q%$%kCf$K(B
$B5/$3$kJL$N%a%=%C%I8F$S=P$7$K$h$C$F0z?t$,GK2u$5$l$k$3$H$,$"$kLdBj$KBP=h!#(B
AWT $B$G:8C<$N(B MenuBar $B$NJ8;z$,I=<($5$l$J$$%P%0$N1s0x$H$J$C$F$$$?!#(B
(invoker.c)

[19980928]

FreeBSD $B$G4X?t(B fmod() $B$N%"%I%l%9$r2r7h$G$-$F$$$J$+$C$?$N$G!"(B
libc $B$HF1MM$K(B libm $B$b$"$i$+$8$a(B sysAddDLSegment() $B$7$F$*$/$h$&$K$7$?!#(B
(compiler.c)

0.2.1 $B%j%j!<%9!#(B

[19980927]

$B%*%W%7%g%s(B dontcmplvmcls $B$rMQ0U!#(B
JIT $B=i4|2=;~$K4{$K%m!<%I$5$l$F$$$k%/%i%9$O%3%s%Q%$%k$7$J$$!#(B
(compiler.c, compiler.h)

[19980926]

new $BL?Na$G!"(Bnative code $B$,<+?H$r=q$-49$($k:]$N%*%U%;%C%H!"(B
FreeBSD $B$N>l9g$NCM$r5-=R!#(B
(code.c)

FreeBSD $B$GF0:n!#(B
javac, CaffeineMark 3.0 $BB>$GF0:n$r3NG'!#(B

0.2 $B%j%j!<%9!#(B

[19980925]

lmul $BL?Na(B (64bit $B@0?t$N>h;;(B) $B$r!"4X?t8F$S=P$7$+$i<+A0$N<BAu$K@ZBX$($?!#(B
FreeBSD $BHG(B JDK $B$G$O4X?t(B (__muldi3()) $B$rMxMQ$G$-$J$$$N$G!#(B
(code.c)

[19980922]

FreeBSD $B$N(B dlsym() $B$G$O!"(Bshared library $B$r(B dlopen(..., RTLD_LAZY) $B$7$?>l9g$K!"(B
$B4X?t$N%"%I%l%9$O$=$N4X?t$,<B9T$5$l$k$^$G(B (?) $B2r7h$5$l$J$$$h$&$J$N$G!"(B
$B4X?t$N%"%I%l%9$rD>@\F@$h$&$H$7$F$$$k%3!<%I$r(B
sysDynamicLink() $B$r;H$&$h$&$K$7$?!#(B
(compile.c)

FreeBSD $B$N>l9g!"(Bgentable.rb $B$,(B constants.c $BCf$N4X?t%F!<%V%k$r@8@.$9$k:]$K(B
$B4X?tL>$NF,$N(B `_' $B$r:o=|$9$k$h$&$K$7$?!#(B
(gentable.rb)

Linux $B$G$O(B sysDynamicLink() $B$G(B libc $BCf$N%7%s%\%k$N%"%I%l%9$rF@$i$l$k$,!"(B
FreeBSD $B$G$OF@$i$l$J$$!#(B
$BF@$i$l$k$h$&$K(B libc $B$r(B sysAddDLSegment() $B$7$F$*$/$h$&$K$7$?!#(B
(compiler.c)

[19980921]

$B%*%W%7%g%s(B ($B4D6-JQ?t(B JAVA_COMPILER_OPT $B$GM?$($k(B)$B!"(Bcodesize $B$rMQ0U!#(B
$B%a%=%C%I$4$H$N!"(Bbyte code $B$NL?Na?t!"%5%$%:!"@8@.$5$l$?%3!<%I$N%5%$%:$NI=$r(B
$B%U%!%$%k(B `jit_codesize' $B$K=PNO$9$k!#(B
(compiler.c, compile.c, compiler.h)

$B%3!<%I%5%$%:$N9g7W!"@8@.$5$l$?%3!<%I(B / byte code $B$NHf$r7W;;$9$k(B
ruby $B%9%/%j%W%H$rMQ0U!#(B
(rate_codesize.rb)

[19980920]

0.1 $B%j%j!<%9!#(B

[19980919]

$B%"%;%s%V%j%3!<%I$+$i$N4X?t8F$S=P$7J}K!$r(B FreeBSD $B$KBP1~$5$;$?!#(B
stdout$B!"%7%s%\%k$KIU$/(B `_' $B$J$I!#(B
(code.h, code.c)

[19980912]

$B:#$^$G$O!"(BJIT $B%3%s%Q%$%i$N=i4|2=;~$K!"4X?t$N%7%s%\%k$,%m!<%I$5$l$?%"%I%l%9$r(B
native code $B$N%F%s%W%l!<%H$K=q$-9~$s$G$*$/$3$H$G!"(BJIT $B%3%s%Q%$%k;~$N(B
dlsym() ($B<B:]$O(B sysDynamicLink()) $B$N8F$S=P$7$r:o8:$7$F$$$?!#(B
Linux $B$G$O!"(Bdlopen(), dlsym() $B$G%"%I%l%9$rF@$?4X?t$N%3!<%I$r=q$-49$($i$l$k$,!"(B
FreeBSD $B$G$O(B Bus Error $B$H$J$k$N$G!">e5-$N:GE,2=$r9T$&$+9T$o$J$$$+(B
$B%^%/%m(B RESOLVE_SYMBOL_ON_CODE $B$G@)8f$G$-$k$h$&$K$7$?!#%G%U%)%k%H$O(B disable$B!#(B
(compile.c, compiler.c)

[19980826]

FreeBSD 2.2.5R $B$N(B /usr/bin/as (GNU assembler 1.92.3) $B$,(B
rdtsc $BL?Na$r<u$1IU$1$J$$$N$G!"(B.byte 0x0f,0x31 $B$K$7$?!#(B
(x86tsc.c)

[19980824]

code.o $B$N@8@.;~!"(Bcode.c -> code.s -> code.o $B$H%"%;%s%V%j%3!<%I$r(B
$B7PM3$5$;$k$N$r;_$a$?!#(B
(Makefile)

[19980823]

FreeBSD $B$G$N%3%s%Q%$%k$N$?$a$K<c43=$@0!#(B
(compile.c, gentable.rb)

[19980817]

$B4D6-JQ?t(B JAVA_COMPILER_OPT $B$G!"(BJIT compiler $B$K(B
$B%*%W%7%g%s$rM?$($k;EAH$_$rMQ0U$7$?!#(B
`,' $B$^$?$O(B ` ' $B$G6h@Z$C$F3F%*%W%7%g%s$rM?$($k!#(B
(compiler.c, compiler.h)
$B%*%W%7%g%s$H$7$F(B quiet, outcode $B$rMQ0U!#(B
(compile.c)

[19980816]

invokeignored_quick $BL?Na$G!"(Bnull check $B$,ITMW$J>l9g$KBP1~$7$?!#(B
$BFbIt(B opcode $B$K(B invokeignored_nocheck $B$r?7@_!#(B
$BL?Na$N0z?t$N0UL#$r4*0c$$$7$F$$$?(B (pc[2]: $B%A%'%C%/$,MW$k$+$I$&$+(B)$B!#(B
(code.c, compile.c)

iinc $BL?Na$KBP$9$k(B native $B%3!<%I$r!"(B
  MOV $BA}J,(B,register
  ADD register,$BJQ?t(B
$B$+$i(B
  ADD $BA}J,(B,$BJQ?t(B
$B$KJQ99!#(B
(code.c, compile.c)

[19980815]

binutils 2.9.1.0.7 $B$N(B as $B$G%"%;%s%V%k$,DL$k$h$&$K=$@0!#(B
(code.c)

code.s $B$N(B postprocess $B$r;_$a$?!#(B
C $B%3%s%Q%$%i$r(B gcc 2.7.2.X $B$+$i(B egcs 1.0.3 $B$KJQ99$7$?$H$3$m!"(B
$BDj?t$N(B push ($B%^%/%m(B PUSH_CONSTSTR()) $B$N%3!<%I$,JQ$o$C$?$?$a!#(B

$BDj?tG[Ns(B opcode_length $B$NMWAG$N7?$r(B unsigned short $B$+$i(B unsigned char $B$K$7$?!#(B
SPARC $B>e$N(B gcc 2.6.3 $B$G$O!"(Bgcc $B$N%P%0$+!"(B
unsigned short $B$K$7$F$*$/I,MW$,$"$C$?!#(B
(opcodes.pl)

$B%/%m%C%/?t$N7WB,$KHw$($F(B x86tsc.o $B$r%j%s%/$9$k$h$&$K$7$?!#(B
x86 $B$N(B RDTSC $BL?Na$r;H$&!#(B
(Makefile)

ldiv, lrem, instanceof $BL?Na$N%3!<%I$rB?>/9bB.2=!#(B
(code.c)

static $B$G$J$$%a%=%C%I8F$S=P$7$N>l9g!"%a%C%;!<%8Aw?.@h(B
$B%*%V%8%'%/%H$,(B null $B$+$I$&$+!"%"%;%s%V%i$H(B invokeMethod() $B$G(B
2$B=E$K%A%'%C%/$7$F$$$?$N$r>J$$$?!#(B
(runtime.c)

[19980813]

$BB?<!85G[Ns$N3NJ](B (multianewarray) $B8e$K!"<!85?t$r(B pop $B$7K:$l$F$$$?$N$r(B fix$B!#(B
(code.c, compile.c)

[19980810]

$B%a%C%;!<%8Aw?.@h%*%V%8%'%/%H$,(B null $B$@$C$?>l9g$K(B
$B@5$7$/(B NullPointerException $B$r(B throw $B$9$k$h$&$K$7$?!#(B(code.c)

[19980809]

invokevirtual $B$G(B private method $B$r8F$s$G$$$k>l9g!"(B
invokespecial $B$N%3!<%I$r@8@.$9$k$h$&$K$7$?!#(B
(processAnOpcode() in compile.c)
tya1.0/demo/TestOpcodeField $B$K$F!"%/%i%9(B TestOpcode $B$N%a%=%C%I$G(B
mb->fb.u.offset $B$,(B 0 $B$N$^$^=i4|2=$5$l$F$$$J$$(B
-> methodtable $B$N(B index $B$G%a%=%C%I$rC5$;$J$$$?$a!#(B

[19980807]

restack $B$r:o8:$7$?!#(B
$BL$%3%s%Q%$%k$N%a%=%C%I$+(B native methods $B$+$i(B compiled method $B$r!"(B
$B$^$?$O$=$N5U$N>l9g$K$N$_(B restack $B$9$k!#(B

[19980803]

new_quick -> new $B$N=q$-49$(AjEv$N$3$H$r!"(B
compiled code $B$G$b9T$&$h$&$K$7$?!#(B(code.c, compile.c)

[19980802]

$B$-$A$s$HF0:n$9$k$h$&$K$J$C$?!#(B

[19980711]

pre-assembled code $B$r(B C $B$G5-=R$7$?Bh(B 1$BHG$,(B
$B$"$^$j$KCY$$(B ($B%$%s%?%W%j%?$h$j(B ;_;) $B$N$G!"%"%;%s%V%i$r;H$C$F=q$-D>$73+;O!#(B

[19980710]

$BBh(B 1$BHG$,$-$A$s$HF0$$$?!#(B

[19980615]

$B3+H/$r;O$a$?!#(B
