Hi all! I'm happy to announce the release 0.1.0 of Jato! Jato is an open source, JIT-only virtual machine for Java that aims to support the JVM specification version 2 including 1.5 amendments. It is not complete but you can run some Java applications with it on 32-bit x86 Linux machines. Jato uses Boehm GC as its garbage collector and GNU Classpath to provide essential Java run-time libraries. A port to the x86-64 architecture is currently ongoing. Highlights of this release: - Boehm GC integrated to the VM (Tomek, Pekka) - Fixes to make Eclipse Java compiler (ECJ) work (Tomek) - Lots of fixes to the x86-64 port (Eduard-Gabriel) You can download the full source distribution here: http://www.kernel.org/pub/software/java/jato/jato-0.1.0.tar.bz2 or fetch the latest sources from the git repository: git clone git://git.kernel.org/pub/scm/java/jato/jato.git If you have questions, comments, or suggestions, feel free to drop by at #jato on irc.freenode.net or send an email to our mailing list at: http://groups.google.com/group/jatovm?hl=en For more information, please check out the Jato home page at: http://www.jatovm.org/ Pekka --- Changes from v0.0.2 to v0.1.0: ------------------------------ Eduard - Gabriel Munteanu (46): x86-64: use 2 slots for J_LONG and J_DOUBLE x86-64: add lopc variants of membase emitters x86-64: implement INSN_MOV_MEMLOCAL_REG for XMM registers vm: true conversion of double to uint64_t x86-64: implement EXPR_FVALUE x86-64: handle float/double distinction in is_64bit_reg() x86-64: implement INSN_MOV_REG_MEMBASE for XMM registers x86-64: proper handling of float args in insn selector x86-64: implement FP conversions x86-64: implement float/double comparison x86-64: can't push 64-bit imm jit: assign correct vm_types to FP fixed registers x86-64: fix float temporary store x86-64: fix EXPR_LOCAL store x86-64: implement float instance field store x86-64: ifdef l2d/d2l conversion constants x86-64: implement float and integer register multiplication x86-64: reverse argument passing order in EXPR_NEWARRAY x86-64: refactor and fix memindex emitters x86: use offsetof() instead of sizeof() in array_deref Preliminary GDB support x86-64: save and change %rbp before saving other registers Provide annotations for asm functions. x86-64: fix throw_from_trampoline() x86-64: fix native_call_gp() according to args map changes x86-64: save and restore XMM registers x86-64: REX comes after legacy prefixes x86: move lopc helpers into x86-64 code x86-64: fix operands order for XMM movs Add myself to AUTHORS x86-64: add FIXME concerning the changes to the stack frame x86-64: ifdef encode_reg() x86-64: implement INSN_DIV_REG_REG x86-64: implement INSN_NEG_REG x86-64: make EXPR_LOCAL stores work on register arguments x86-64: remove obsolete fields from stack frame jit: don't allocate space in stack frame for register arguments x86-64: handle %r13 correctly in memindex emitters x86-64: correct handling of instance field expressions x86-64: don't set reg2 in insn-selector where it isn't needed x86-64: implement STMT_CHECKCAST x86-64: implement array_deref stores x86-64: fix operand order in conversion emitters x86-64: implement EXPR_INSTANCEOF x86-64: implement INSN_MOVZX_16_REG_REG Fix CFLAGS in BoehmGC makefile Pekka Enberg (90): x86: Pass insn to operand emitters x86: Pass insn to single operand emitters x86: Pass insn to two operand emitters x86: Unify NO_OPERANDS, SINGLE_OPERAND, and TWO_OPERAND emission x86: Move emitter data types to emit-code.c x86: Unify BRANCH instruction emission regression: Fix DupTest on HotSpot regression: Partial fix for SubroutineTest on HotSpot regression: Fix WideTest on HotSpot regression: Fix InvokeTest on HotSpot regression: Fix PopTest on HotSpot x86: Don't pass "regs" to gc_start() gc: Unify gc_jit_safepoint() and gc_signal_safepoint() gc: Look up compilation unit for root set scanning gc: Add copyright banner to vm/gc.c vm: Remove use of NOT_IMPLEMENTED from vm/method.c gc: Simplify gc_scan_rootset() regression: Run tests that verify VM startup first x86-64: Fix emit-code.c build breakage Makefile: Fix monoburg directory for "clean" target x86-64: Fix count_java_arguments() parameter in pack_args() vm: Fix assertion in stack_trace_elem_type_name() vm: Remove JamVM compat macros x86-64: ifdef unused code in emit-code.c vm: Fix test breakage x86-64: Fix test breakage caused by uninitialized ->args_map x86-64: Fix liveness-test.c x86-64: Fix "make test" Fix up .gitignore x86-64: Fix args.h breakage vm: Introduce "-Xmaps" command line options jit: Shrink basic blocks in shrink_compilation_unit() jit: Fix memory leak in inline_subroutines() jit: Fix memory leak in allocate_registers() jit: Don't use "struct insn" for fixups jit: Free LIR data structures in shrink_basic_block() jit: NOT_IMPLEMENTED removal from load-store-bc.c Fix "job server not available" error for -jN builds Add Clojure to torture tests Add Scimark to torture tests Add JUnit to torture tests vm: NOT_IMPLEMENTED removal from class.c monoburg: Make makefile more distcc friendly vm: Remove unused resolve.c vm: Remove NOT_IMPLEMENTED from jni.c vm: Use warn() instead of NOT_IMPLEMENTED in preload.c runtime: Throw OutOfMemoryError instead of using NOT_IMPLEMENTED vm: Introduce VM error helper functions vm: Convert class.c to use VM error helpers cafebabe: Add missing include to header file vm: Convert classloader.c to use VM error helpers vm: Convert string.c to use VM error helpers runtime: Convert reflection.c to use VM error helpers regression: Use @SuppressWarnings to silence unnecessary warnings regression: Paramterize Class type to reduce build noise vm: Code cleanups to vm/object.c x86: Fix native call clobber lists x86: Unify native_call_eax() and native_call_long() x86: Clean up do_native_call() x86-64: Fix native_call_gp() return value jit: Improve compile error message gc: Import Boehm GC sources to the tree vm: Wire up Boehm GC to our GC infrastructure boehmgc: Remove unused Makefiles boehmgc: Use separate Makefile for boehmgc runtime: Implement VMRuntime.gc() vm: Print out better error message for unrecognized commands Makefile: Only build program for 'make' vm: '-XmxSIZE' command line option for maximum heap size runtime: Fix Field.get() et al for instance fields regression: Replace assertObjectEquals() with assertEquals() regression: Fix compilation warnings in some of the tests runtime: Implement VMRuntime.availableProcessors() scripts: Add script to run ECJ under Jato vm: Introduce -Xnogc command line option vm: Add signal handler for SIGILL vm: Bump up default heap size to 128 MB gc: Flush stderr immediately for GC debug printouts vm: Enable GC by default Makefile: Add 'make torture' target vm: Merge bytecodes.c to bytecode.c test/x86: Remove useless tests test/jit: Remove unused test cases Revert "gc: Flush stderr immediately for GC debug printouts" vm: Make get_vmtype_size() a static inline function jit: Fix typo in jit/trampoline.c jit: Convert compilation unit mutex to spinlock Revert "jit: Convert compilation unit mutex to spinlock" jit: Use optimistic checking for ->is_compiled jit: Clean up jit/trampoline.c Tomek Grabiec (16): x86: improve backtrace printing vm: fix boehmgc integration with jato vm: check for exception after calling getSystemClassLoader() runtime: fix native_vmclass_get_declared_methods() jit: fix tableswitch/lookupswitch support in subroutine inlining vm: do not print native symbol for JIT stack trace elements vm: implement JNI handler for CallVoidMethodA() vm: fix main thread creation runtime: implement VMThread.yield() jit: print PC of failing instruction during conversion x86: use error() rather than die() jit: do not push expressions of type byte, char and short onto mimic stack jit: mark EXPR_*_INSTANCE_FIELD as not always pure. jit: remove explicit type checking in convert_array_load() jit: remove unnecessary locking on fixup_site vm: use vm_free() to free bucket's fields