Fixed: Compiler not thread-safe... STOP/RESTART operates on a global without any lock... Fixed: By making a thread-specific compiler disabled flag. Fixed: (TODO: Implemented concurrent compilation and make sure no race condition) - Bug: jit input code array allocated in jit_compile.c without using SableJIT class loader interface. Same thing for the exceptionHandlingOffsets array and maybe others.... - Bug: some local vars in jit_sablejit.h CALLCODE and maybe elsewhere are unnecessarily reread. For each var after compiled_code() call, check if needs to be reread. --- stack_offsets_diff issue Solution to implement: Remove stack_offsets_diff from sequence struct. Store in vm->instructions instead if inst affect stack in a fix way, otherwise store MAX_INT. BUGS - fix this before getting into trouble... jint *stack_offsets_diff; is added to the sequence data structure. stack_offsets_diff[j] is inst[j + 1].stack_size - inst[j].stack_size delta stack size... NOTE: To search: Can these be kept in vm-\>instructions? Can some instruction affect the stack differently depending on their arguments? I guess the invokes? But is current implementation always correct???? if instruction stack size depends on arguments, our implementation is incorrect... If these instruction may be inlined... oh oh INVOKE* MULTIANEWARRAY affect the size depending on their args... ok because marked as uninlineable... TODO: store how instructions that affect the stack in a fix way in vm->instructions[i]... Use a dummy value (ex: MAX_INT) if does it variably (like the INVOKE etc...). stack_offsets_diff will be no longer required. Also, can use an: assert(inst->stack_delta != MAX_INT) as safety check when inlined stack offsets array is constructed. --------------------------- makeCheckpoint (see comment in code) Fixed: maxUsed not resetted... Fixed: If CFLAGS variable defined (even to empty) when inlined/ppc is built, SableVM will segfault. Fixed: _sjf_callback_NATIVE_STATIC_METHOD_compiled_code _sjf_callback_NATIVE_NONSTATIC_METHOD_compiled_code Do not undo compiled code assumptions (init locals to NULL, sync code etc.) Fixed: inlined-jit-verbose (with signals for exceptions) - sigseg for test cases... Fixed: jit signals does not work in debug mode (need to set env->sigsegv_expected etc.) Fixed: (some regs was not properly freed in div implementation) OutOfReg exceptions - on some x86 benchmarks... compress direct/jit (does not happens if --enable-sablejit-testing???) maybe memory corruption or "lucky" for boolean array???