Index: vm/vmcore/src/jit/jit_runtime_support.cpp =================================================================== --- vm/vmcore/src/jit/jit_runtime_support.cpp (revision 614454) +++ vm/vmcore/src/jit/jit_runtime_support.cpp (working copy) @@ -2170,9 +2170,9 @@ ASSERT_THROW_AREA; Global_Env* env = VM_Global_State::loader_env; - if (obj == NULL) { + if (obj == (ManagedObject*)VM_Global_State::loader_env->managed_null) { exn_throw_by_class(env->java_lang_NullPointerException_Class); - return NULL; + return obj; } Method* m = NULL; @@ -2222,9 +2222,9 @@ ASSERT_THROW_AREA; Global_Env* env = VM_Global_State::loader_env; - if (obj == NULL) { + if (obj == (ManagedObject*)VM_Global_State::loader_env->managed_null) { exn_throw_by_class(env->java_lang_NullPointerException_Class); - return NULL; + return obj; } Method* m = NULL; @@ -2356,7 +2356,7 @@ ///OPCODE_CHECKCAST static void *rth_checkcast_withresolve(Class_Handle klass, unsigned cp_idx, ManagedObject* obj) { - if (obj==NULL) { + if (obj == (ManagedObject*)VM_Global_State::loader_env->managed_null) { return obj; } Index: vm/jitrino/src/jet/cg_meth.cpp =================================================================== --- vm/jitrino/src/jet/cg_meth.cpp (revision 614454) +++ vm/jitrino/src/jet/cg_meth.cpp (working copy) @@ -805,7 +805,6 @@ char* helper = opcod == OPCODE_INVOKESTATIC ? rt_helper_get_invokestatic_addr_withresolve : rt_helper_get_invokespecial_addr_withresolve; gen_call_vm(cs_get_is_addr, helper, 0, m_klass, cpIndex); - runlock(cs_get_is_addr); } else { assert(opcod == OPCODE_INVOKEVIRTUAL || opcod == OPCODE_INVOKEINTERFACE); static const CallSig cs_get_iv_addr(CCONV_HELPERS, iplatf, i32, jobj); @@ -816,7 +815,6 @@ Val vcpIdx(cpIndex); gen_args(cs_get_iv_addr, 0, &vclass, &vcpIdx, &thiz); gen_call_vm(cs_get_iv_addr, helper, 3); - runlock(cs_get_iv_addr); } rlock(gr_ret); //WARN: call addr is in gr_ret -> lock it @@ -923,7 +921,7 @@ if (args[i] == 0) { break; } - rlock(*args[0]); + rlock(*args[i]); } // 2nd, generate moves for (unsigned i=0; i generate code to request offset static const CallSig cs_get_offset(CCONV_HELPERS, iplatf, i32, i32); gen_call_vm(cs_get_offset, rt_helper_field_get_offset_withresolve, 0, fieldOp.enclClass, fieldOp.cpIndex, fieldOp.isPut()); - runlock(cs_get_offset); rlock(gr_ret); Val& ref = vstack(ref_depth, true); runlock(gr_ret); @@ -254,7 +253,6 @@ } else { //field is not resolved -> generate code to request address static const CallSig cs_get_addr(CCONV_HELPERS, iplatf, i32, i32); gen_call_vm(cs_get_addr, rt_helper_field_get_address_withresolve, 0, fieldOp.enclClass, fieldOp.cpIndex, fieldOp.isPut()); - runlock(cs_get_addr); where = Opnd(jt, gr_ret, 0); } } Index: vm/jitrino/src/jet/cg_obj.cpp =================================================================== --- vm/jitrino/src/jet/cg_obj.cpp (revision 614454) +++ vm/jitrino/src/jet/cg_obj.cpp (working copy) @@ -120,7 +120,6 @@ assert(lazy); static CallSig ci_get_class_withresolve(CCONV_HELPERS, iplatf, i32); gen_call_vm(ci_get_class_withresolve, rt_helper_get_class_withresolve, 0, enclClass, cpIndex); - runlock(ci_get_class_withresolve); klassVal = Val(jobj, gr_ret); } else { klass = resolve_class(m_compileHandle, enclClass, cpIndex); @@ -212,7 +211,6 @@ Val vcpIdx(cpIdx); gen_args(cs_with_resolve, 0, &vclass, &vcpIdx, &tos); gen_call_vm(cs_with_resolve, helper, 3); - runlock(cs_with_resolve); vpop();//pop obj gen_save_ret(opcode == OPCODE_CHECKCAST ? jobj : i32); } Index: vm/jitrino/src/jet/enc.cpp =================================================================== --- vm/jitrino/src/jet/enc.cpp (revision 614454) +++ vm/jitrino/src/jet/enc.cpp (working copy) @@ -371,14 +371,24 @@ mov(Opnd(i32, sp, cs.off(i)), val); } else { +#ifdef _EM64T_ + long val = va_arg(valist, long); + mov(Opnd(i64, sp, cs.off(i)), val); +#else int val = lo32((jlong)(int_ptr)addr); mov(Opnd(i32, sp, cs.off(i)), val); val = hi32((jlong)(int_ptr)addr); mov(Opnd(i32, sp, cs.off(i)+4), val); +#endif } } else if (jt==i64) { +#ifdef _EM64T_ + long val = va_arg(valist, long); + mov(gr == gr_x ? Opnd(i64, sp, cs.off(i)) : Opnd(i64, gr), val); +#else assert(false); +#endif } else { int val = va_arg(valist, int);