Hi all! I'm proud to announce the release 0.0.2 of Jato! Jato is a JIT-only virtual machine for Java that can run some Java applications under GNU/Linux on modern 32-bit x86 CPUs that support the SSE2 instruction set. A port to the x86-64 machine architecture is currently being developed. Jato depends on GNU Classpath to provide core Java runtime classes. The VM is licensed under the GPLv2 with GNU Classpath linking exception. You can download the full source distribution at at the following location: http://www.kernel.org/pub/software/java/jato/jato-0.0.2.tar.bz2 or fetch the latest sources from the git repository: git clone git://git.kernel.org/pub/scm/java/jato/jato.git This release has bunch of fixes to make some new programs run under Jato: - Java Tris: http://bit.ly/7wrE4H - Clojure REPL: http://clojure.org/ - DaCapo: http://www.dacapobench.org/ There's also lots of infrastructure work for garbage collection (not functional yet) and fixes to the x86-64 port (also not fully functional). 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 refer to Jato home page at: http://www.jatovm.org/ Pekka --- Changes from v0.0.1 to v0.0.2: ------------------------------ Arthur HUILLET (1): Added dependencies installation instructions for Arch Linux Eduard - Gabriel Munteanu (16): vm: record type information in args_map x86-64: move received parameters to non-fixed registers x86-64: make EXPR_LOCAL use the non-fixed registers x86-64: don't propagate fixed register in EXPR_ARG_THIS x86-64: implement INSN_MOV_REG_MEMINDEX x86-64: handle %r13 properly in indirect calls x86-64: implement STMT_ARRAY_CHECK(array_check) properly x86-64: implement STMT_ARRAY_STORE_CHECK(reg, reg) properly x86-64: define all XMM registers x86-64: add XMM register encodings buffer: introduce buffer_append_str() x86-64: add long (multi-byte) opcode variant of __emit_reg_reg() x86-64: XMM args register assignment x86-64: emitter for XMM to XMM move x86-64: parse method arguments by accessing the linked-list x86-64: implement exception_check() Pekka Enberg (86): Use gzip in scripts/make-release Add include/vm/version.h to .gitignore x86: Kill useless get_greg() wrapper x86: Register state saving x86-64: Register state saving gc: Pass register state to gc_start() and gc_safepoint() gc: Remove dead code Fix JAR file loading error message Bump up java.version to 1.6 Implement Method.getModifiersInternal() vm: Sort natives table Implement AtomicLong.VMSupportsCS8() x86: Separate 32 and 64-bit atomic.h Implement Unsafe.compareAndSwapLong() regression: Move reflection API tests to new package Move LICENSE to top level jit: rename subroutines_should_not_occure() to fail_subroutine_bc() jit: Move reference to header of jit/subroutine.c jit: clean up includes in jit/subroutine.c Update README Fix typo in README x86: Fix instruction selector deadlock in invoke() mmix: Fix native call function signatures Move reflection.c and unsafe.c to runtime directory runtime: Extract stack walker implementation runtime: Move unsafe.h to include/runtime runtime: Move VM runtime implementation to runtime.c runtime: Move VM class implementation to class.c runtime: Implement Field.getLong() Move cafebabe to proper top-level directories x86: Cleanup emit-code.c runtime: Rename to_primitive_value() to to_jlong_value() x86: Use lookup table for register numbers x86-64: Use lookup table for register numbers x86: Unify __encode_reg() implementations x86: Unify x86 XMM register names x86: Unify general purpose register numbers x86: Fix register encoding function names x86: Mark object allocation points as safepoints x86: Make non-globally used function static x86: Introduce ->flags to struct insn x86: Shrink struct insn to 128 bytes x86: Use uint32_t for offsets and reoder struct members x86-64: Fix native_call() signature x86: Use 16 bits for bytecode offsets jit: Add ->flags member in struct live_interval vm: Fix preload error messages x86: Fix up SSE class field fixup problem Remove generated source file from the tree Fix BUILD_ARCH on OpenSolaris 10 Add OpenSolaris 10 dependencies to README Fix gitignore file x86: Move fixup_static() next to fixup_static_at() x86: Fix fixup_static() for REX prefixed SSE instructions x86: Improve SSE instruction detection x86-64: Fix emit-code.c compilation jit: Remove gc_map_init() function arch: Introduce NR_GP_REGISTERS constant vm: Add DIV_ROUND_UP helper macro jit: Add a struct for register maps x86,ppc: Remove obsolete throw_exception_from_signal() gc: Make gc_start() a static function vm: Cleanups to vm/thread.c Add deadlock debugging instructions to README jit: Fix GC_REGISTER_MAP_SIZE to use BITS_PER_LONG x86: Cleanup use-def bitmask definitions x86: Use "unsigned long" for instruction flags x86: Merge use-def.c into instruction.c x86: Use instruction flags for insn_is_branch() and insn_is_call() x86: Coding style cleanups to instruction.c x86: Uninline some functions from arch/instruction.h x86: Fix MAX_REG_OPERANDS definition x86-64: Fix native_call_gp() clobber list vm: Add support for GNU Classpath 0.98 x86: Remove unused INSN_MOV_IP_THREAD_LOCAL_MEMBASE type x86: Remove unused INSN_PUSH_MEMBASE type x86: Remove unused INSN_XOR_IMM_REG type x86: Remove unused INSN_MOV_IP_REG type x86: Unify single operand emitter function signatures x86: Don't wrap function signature on multiple lines x86: Fix more wrapped function signatures x86: Fix some single operand emitters x86: Fix emit_test_imm_memdisp() argument names Makefile: Remove unnecessary definitions vm: Add missing include to vm/gc.h Jato v0.0.2 Tomek Grabiec (51): README: fix package dependencies for Ubuntu vm: parse method and field type on initialization vm: implement java/lang/reflect/Method.getReturnType() vm: fix parse_method_type() vm: move monitor operations to vm/monitor.c vm: unify code in vm_monitor_wait() and vm_monitor_timedwait() vm: implement thread interruption operations. x86: introduce valgrind workaround for exception guards. vm: fix vm_jni_get_static_double_field() vm: fix vm_jni_set_static_*() vm: implement all GetStatic*Field() JNI functions vm: fix vm_jni_new_object_a() vm: fix pack_args() cafebabe: fix bug in cafebabe_stream_close() vm: fix call_virtual_method() vm: fix unwrap_and_set_field() vm: rename unwrap_and_set_field() to unwrap() vm: do not return <init> and <clinit> methods in native_vmclass_get_declared_methods() jit: fix bug in spill_interval() jit: skip conversion of unreachable basic blocks vm: change call result return method for vm_call_method_*() so that it can handle any type vm: implement unwrap() for J_LONG and J_DOUBLE vm: rename encapsulate_value() to wrap() vm: fix call_static_method() and call_virtual_method() vm: fix native_vmclass_get_declared_methods() regression: fix TestCase.assertObjectEquals() x86: make native_call() hard crash for not implemented types. regression: add regression test for method invokation via reflection vm: fix bug in native_field_get() jit: fix print_exception_table() jit: handle exception handlers covering subroutines in subroutine inlining. vm: do not return jboolean from VM natives. runtime: move VMClassLoader natives to runtime/classloader.c vm: fix loading of array classes. vm: make class cache recognize different classloaders. vm: implement VMClassLoader.defineClass() x86: cleanup in call.c x86, vm: implement support for invoking methods with J_LONG return type in reflection. mmix: fix compilation error on make check jit: fix conversion of dup_x2 when second value is J_LONG or J_DOUBLE x86: Add missing result conversion after native method invocations. jit: fix get_reload_before_insn() jit: fix dead code in __insert_spill_reload_insn() jit: make API to insert_reload_insn() the same as for insert_spill_insn() jit: set bytecode offset of spill/reload instructions properly jit: cleanup in spill-reload.c x86: fix is_sse_insn() vm: fix init_stack_trace_elem_current() x86: make all safepoint instructions do a safepoint poll before. gc: rewrite GC stop-the-world algorithm. gc: Fix stop-the-world on SMP