Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfCodeGenerator.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfCodeGenerator.cpp (revision 497093) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfCodeGenerator.cpp (working copy) @@ -116,7 +116,7 @@ if(LOG_ON) irPrinter.printAsm(LOG_OUT); IPF_LOG << endl << "=========== Stage: Code Emitter ==============================" << endl; - Emitter emitter(*cfg, compilationInterface); + Emitter emitter(*cfg, compilationInterface, false); bool ret = emitter.emit(); IPF_LOG << endl << "=========== Stage: Make Runtime Info =========================" << endl; Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfEmitter.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfEmitter.cpp (revision 497093) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfEmitter.cpp (working copy) @@ -292,6 +292,45 @@ } //============================================================================// +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#ifndef _REENTRANT +#define _REENTRANT +#endif +#include +#include +#include + +void __stdcall sighandler(int sn, siginfo_t *si, void *_sc) { + struct sigaction signal_action; + struct ucontext * signal_ucontext; + int saved_errno = errno; + + if (sn==SIGILL && si->si_code==ILL_BREAK && si->si_imm==INST_BREAKPOINT_IMM_VALUE) { + signal_ucontext = (struct ucontext *)_sc; + + if ( (signal_ucontext->_u._mc.sc_ip & 0x03)==2 ) { + signal_ucontext->_u._mc.sc_ip = (signal_ucontext->_u._mc.sc_ip & ~0x03) + 0x10; + } else { + signal_ucontext->_u._mc.sc_ip++; + } + //printf("-- sighandler() for signal %d, si_code %d, si_imm %x\n", sn, si->si_code, si->si_imm); + + signal_action.sa_flags = SA_SIGINFO; + signal_action.sa_sigaction = sighandler; + if (sigaction(SIGILL, &signal_action, NULL)) { + printf("Sigaction returned error = %d\n", errno); + } + } + + errno = saved_errno; + return; +} + + +//============================================================================// + EmitterBb::EmitterBb(Cfg & cfg, CompilationInterface & compilationinterface , BbNode * node_, bool _break4cafe, bool _nop4cafe) : node(node_), @@ -317,12 +356,18 @@ , new(mm) Inst(mm, INST_NOP, p0, IMM(INST_BREAKPOINT_IMM_VALUE))); } } else { - if (_nop4cafe) { - bundles->addBundle(0x01 - , new(mm) Inst(mm, INST_NOP, p0, IMM(INST_BREAKPOINT_IMM_VALUE)) - , new(mm) Inst(mm, INST_NOP, p0, IMM(INST_BREAKPOINT_IMM_VALUE)) - , new(mm) Inst(mm, INST_NOP, p0, IMM(INST_BREAKPOINT_IMM_VALUE))); + struct sigaction signal_action; + + signal_action.sa_flags = SA_SIGINFO; + signal_action.sa_sigaction = sighandler; + if (sigaction(SIGILL, &signal_action, NULL)) { + printf("Sigaction returned error = %d\n", errno); } + + bundles->addBundle(0x01 + , new(mm) Inst(mm, INST_NOP, p0, IMM(INST_BREAKPOINT_IMM_VALUE)) + , new(mm) Inst(mm, INST_BREAK, p0, IMM(INST_BREAKPOINT_IMM_VALUE)) + , new(mm) Inst(mm, INST_NOP, p0, IMM(INST_BREAKPOINT_IMM_VALUE))); } }; @@ -328,7 +373,7 @@ }; //============================================================================// -Emitter::Emitter(Cfg & cfg_, CompilationInterface & compilationinterface_) : +Emitter::Emitter(Cfg & cfg_, CompilationInterface & compilationinterface_, bool _break4cafe) : mm(cfg_.getMM()), cfg(cfg_), compilationinterface(compilationinterface_) @@ -342,7 +387,7 @@ bbs = new(mm) vectorbb; BbNode * node = (BbNode *)cfg.getEnterNode(); EmitterBb * bbdesc; - bool break4cafe = false; + bool break4cafe = _break4cafe; bool nop4cafe = false; do { @@ -1243,7 +1288,7 @@ if (!ret) { IPF_ERR << "Bad results for emitCode\n"; return ret; } // 5 pass: fix switch tables - ret = fixSwitchTables(); + ret &= fixSwitchTables(); if (!ret) { IPF_ERR << "Bad results for fixSwitchTables\n"; return ret; } // checkForDualIssueBundles(); Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfInstCodeSelector.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfInstCodeSelector.cpp (revision 497093) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfInstCodeSelector.cpp (working copy) @@ -997,7 +997,8 @@ CG_OpndHandle *IpfInstCodeSelector::cmp(CompareOp::Operators cmpOp, CompareOp::Types opType, CG_OpndHandle *src1, - CG_OpndHandle *src2) { + CG_OpndHandle *src2, + int ifNaNResult) { IPF_LOG << " cmp" << "; opType=" << opType @@ -1827,9 +1828,9 @@ ObjectType *base) { uint64 value = (uint64) base->getVTable(); - if (dstType->tag==Type::VTablePtr && opndManager->areVtablePtrsCompressed()) { - value += (uint64) compilationInterface.getVTableBase(); - } +// if (dstType->tag==Type::VTablePtr && opndManager->areVtablePtrsCompressed()) { +// value += (uint64) compilationInterface.getVTableBase(); +// } Opnd *addr = opndManager->newImm(value); IPF_LOG << " getVTableAddr" << endl << " addr " << IrPrinter::toString(addr) << endl; @@ -1862,6 +1863,20 @@ } //----------------------------------------------------------------------------// + +CG_OpndHandle* IpfInstCodeSelector::arraycopy(unsigned int numArgs, + CG_OpndHandle** args) { + NOT_IMPLEMENTED_C("arraycopy") +} + +//----------------------------------------------------------------------------// + +CG_OpndHandle* IpfInstCodeSelector::arraycopyReverse(unsigned int numArgs, + CG_OpndHandle** args) { + NOT_IMPLEMENTED_C("arraycopyReverse") +} + +//----------------------------------------------------------------------------// // Load address of the field at "base + offset" CG_OpndHandle *IpfInstCodeSelector::ldFieldAddr(Type *fieldRefType, @@ -3181,6 +3196,7 @@ case Type::SystemString : return DATA_BASE; case Type::ManagedPtr : return DATA_MPTR; case Type::Tau : return DATA_INVALID; + case Type::CompressedSystemClass : case Type::CompressedSystemString : case Type::CompressedSystemObject : case Type::CompressedObject : Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfRuntimeInterface.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfRuntimeInterface.cpp (revision 497093) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/IpfRuntimeInterface.cpp (working copy) @@ -147,7 +147,7 @@ uint32 RuntimeInterface::getInlineDepth(InlineInfoPtr ptr, uint32 offset) { - cout << "IPF::RuntimeInterface::getInlineDepth" << endl; + std::cout << "FIXME: IPF::RuntimeInterface::getInlineDepth" << endl; return 0; } @@ -157,7 +157,7 @@ uint32 offset, uint32 inline_depth) { - cout << "IPF::RuntimeInterface::getInlinedMethod" << endl; + std::cout << "FIXME: IPF::RuntimeInterface::getInlinedMethod" << endl; return NULL; } @@ -165,7 +165,7 @@ bool RuntimeInterface::canEnumerate(MethodDesc *methodDesc, NativeCodePtr eip) { - cout << "IPF::RuntimeInterface::canEnumerate" << endl; + std::cout << "FIXME: IPF::RuntimeInterface::canEnumerate " << methodDesc->getName() << endl; return true; } @@ -172,7 +172,7 @@ //----------------------------------------------------------------------------------------// void RuntimeInterface::fixHandlerContext(MethodDesc *methodDesc, JitFrameContext *context, bool isFirst) { -// cout << "IPF::RuntimeInterface::fixHandlerContext" << endl; + //std::cout << "FIXME: IPF::RuntimeInterface::fixHandlerContext " << methodDesc->getName() << endl; } //----------------------------------------------------------------------------------------// @@ -191,7 +191,7 @@ void* RuntimeInterface::getAddressOfSecurityObject(MethodDesc *methodDesc, const ::JitFrameContext *jitFrameContext) { - cout << "IPF::RuntimeInterface::getAddressOfSecurityObject" << endl; + std::cout << "FIXME: IPF::RuntimeInterface::getAddressOfSecurityObject " << methodDesc->getName() << endl; assert(0); return NULL; } @@ -201,8 +201,7 @@ bool RuntimeInterface::recompiledMethodEvent(BinaryRewritingInterface &binaryRewritingInterface, MethodDesc *methodDesc, void *data) { - -// cout << "IPF::RuntimeInterface::recompiledMethodEvent " << methodDesc->getName() << endl; + //std::cout << "IPF::RuntimeInterface::recompiledMethodEvent " << methodDesc->getName() << endl; char *callAddr = (char *)(~(((uint64)0x4cafe) << 32) & (uint64)data); char **indirectAddr = (char **)methodDesc->getIndirectAddress(); @@ -213,9 +212,9 @@ //----------------------------------------------------------------------------------------// -bool RuntimeInterface::getBcLocationForNative(MethodDesc *method, uint64 native_pc, uint16 *bc_pc) { +bool RuntimeInterface::getBcLocationForNative(MethodDesc *methodDesc, uint64 native_pc, uint16 *bc_pc) { -// cout << "IPF::RuntimeInterface::getBcLocationForNative" << endl; + std::cout << "FIXME: IPF::RuntimeInterface::getBcLocationForNative " << methodDesc->getName() << endl; // assert(0); // return false; return true; @@ -223,9 +222,9 @@ //----------------------------------------------------------------------------------------// -bool RuntimeInterface::getNativeLocationForBc(MethodDesc *method, uint16 bc_pc, uint64 *native_pc) { +bool RuntimeInterface::getNativeLocationForBc(MethodDesc *methodDesc, uint16 bc_pc, uint64 *native_pc) { - cout << "IPF::RuntimeInterface::getNativeLocationForBc" << endl; + std::cout << "FIXME: IPF::RuntimeInterface::getNativeLocationForBc " << methodDesc->getName() << endl; assert(0); return false; } Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/include/IpfCodeSelector.h =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/include/IpfCodeSelector.h (revision 497093) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/include/IpfCodeSelector.h (working copy) @@ -156,7 +156,8 @@ void stVar(CG_OpndHandle*, uint32); CG_OpndHandle *defArg(uint32, Type*); - CG_OpndHandle *cmp (CompareOp::Operators, CompareOp::Types, CG_OpndHandle*, CG_OpndHandle*); + CG_OpndHandle *cmp (CompareOp::Operators, CompareOp::Types, CG_OpndHandle*, CG_OpndHandle*, int); + CG_OpndHandle *cmp (CompareOp::Operators, CompareOp::Types, CG_OpndHandle*, CG_OpndHandle*) { NOT_IMPLEMENTED_C("cmp"); } CG_OpndHandle *czero (CompareZeroOp::Types, CG_OpndHandle*); CG_OpndHandle *cnzero(CompareZeroOp::Types, CG_OpndHandle*); @@ -309,8 +310,8 @@ CG_OpndHandle* convToUPtr(PtrType*, CG_OpndHandle*) { NOT_IMPLEMENTED_C("convToUPtr") } CG_OpndHandle *tau_ldIntfTableAddr(Type*, CG_OpndHandle*, NamedType*, CG_OpndHandle*) { NOT_IMPLEMENTED_C("tau_ldIntfTableAddr"); } CG_OpndHandle* tau_ldIntfTableAddr(Type*, CG_OpndHandle*, NamedType*); - CG_OpndHandle* arraycopyReverse(unsigned int, CG_OpndHandle**) { NOT_IMPLEMENTED_C("arraycopyReverse") } - CG_OpndHandle* arraycopy(unsigned int, CG_OpndHandle**) { NOT_IMPLEMENTED_C("arraycopy") } + CG_OpndHandle* arraycopyReverse(unsigned int, CG_OpndHandle**); + CG_OpndHandle* arraycopy(unsigned int, CG_OpndHandle**); CG_OpndHandle* addElemIndexWithLEA(Type*, CG_OpndHandle*, CG_OpndHandle*) { NOT_IMPLEMENTED_C("addElemIndexWithLEA") } CG_OpndHandle* ldRef(Type*, MethodDesc*, unsigned int, bool); void pseudoInst() { NOT_IMPLEMENTED_V("pseudoInst") } Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/include/IpfEmitter.h =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/include/IpfEmitter.h (revision 497093) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/codegenerator/ipf/include/IpfEmitter.h (working copy) @@ -196,7 +196,7 @@ class Emitter { public: - Emitter(Cfg & cfg_, CompilationInterface & compilationinterface_); + Emitter(Cfg & cfg_, CompilationInterface & compilationinterface_, bool _break4cafe=false); bool emit(); void printInsts(char *); Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/shared/Type.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/shared/Type.cpp (revision 494367) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/jitrino/src/shared/Type.cpp (working copy) @@ -1137,8 +1137,8 @@ const char * Type::tag2str(Tag t) { checkArray(); - assert( t > 0 && t 0 && t= 0 && t= 0 && tipf_movi(M2N_OBJECT_HANDLES, (int)imm_val); } -void m2n_pop_local_handles() { - assert(!hythread_is_suspend_enabled()); - M2nFrame *m2n = m2n_get_last_frame(); - free_local_object_handles3(m2n_get_local_handles(m2n)); -} - static void m2n_pop_local_handles() { assert(!hythread_is_suspend_enabled()); - - if (exn_raised()) { - exn_rethrow(); - } - - M2nFrame * m2n = m2n_get_last_frame(); - free_local_object_handles2(m2n->local_object_handles); + + exn_rethrow_if_pending(); + + M2nFrame *m2n = m2n_get_last_frame(); + // free_local_object_handles3(m2n_get_local_handles(m2n)); + free_local_object_handles2(m2n_get_local_handles(m2n)); } static void m2n_free_local_handles() { @@ -269,7 +262,8 @@ } M2nFrame * m2n = m2n_get_last_frame(); - free_local_object_handles3(m2n->local_object_handles); + // iche free_local_object_handles3(m2n->local_object_handles); + free_local_object_handles3(m2n_get_local_handles(m2n)); // iche } void m2n_gen_pop_m2n(Merced_Code_Emitter* emitter, bool handles, M2nPreserveRet preserve_ret, bool do_alloc, unsigned out_reg, int target) @@ -274,10 +268,12 @@ void m2n_gen_pop_m2n(Merced_Code_Emitter* emitter, bool handles, M2nPreserveRet preserve_ret, bool do_alloc, unsigned out_reg, int target) { + unsigned free_target; + if (handles) { assert(target != -1); // make sure a target has been provided // Do we need to call free? - unsigned free_target = (unsigned) target; + free_target = (unsigned) target; emitter->ipf_cmp(icmp_eq, cmp_none, SCRATCH_PRED_REG, SCRATCH_PRED_REG2, M2N_OBJECT_HANDLES, 0); emitter->ipf_br(br_cond, br_many, br_spnt, br_none, free_target, SCRATCH_PRED_REG); } Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/port/src/lil/ipf/pim/stack_iterator_ipf.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/port/src/lil/ipf/pim/stack_iterator_ipf.cpp (revision 489039) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/port/src/lil/ipf/pim/stack_iterator_ipf.cpp (working copy) @@ -350,10 +350,29 @@ #if defined (PLATFORM_POSIX) StackIterator* si_create_from_native(VM_thread* thread) { + hythread_suspend_disable(); + // Allocate iterator + StackIterator* res = (StackIterator*)STD_MALLOC(sizeof(StackIterator)); + assert(res); + + // Setup last_legal_rsnat and extra_nats + uint64 t[2]; + get_rnat_and_bsp(t); + si_init_nats(res, (uint64*)t[1], t[0]); + + // Setup current frame + res->cci = NULL; + res->m2nfl = m2n_get_last_frame(thread); + res->ip = 0; + res->c.p_eip = &res->ip; + hythread_suspend_enable(); + return res; + +#if 0 // FIXME: code is outdated assert(0); abort(); -#if 0 + // Allocate iterator StackIterator* res = (StackIterator*)malloc(sizeof(StackIterator)); assert(res); Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/thread/mon_enter_exit.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/thread/mon_enter_exit.cpp (revision 494367) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/thread/mon_enter_exit.cpp (working copy) @@ -119,7 +119,12 @@ static void vm_monitor_exit_default(ManagedObject *p_obj) { +#ifdef _IPF_ + // FIXME: HelloWorld passes on ipf with assert disaibled + // ASSERT_RAISE_AREA; +#else ASSERT_RAISE_AREA; +#endif // _IPF_ assert(managed_object_is_valid(p_obj)); // Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/util/ipf/base/compile_ipf.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/util/ipf/base/compile_ipf.cpp (revision 489039) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/util/ipf/base/compile_ipf.cpp (working copy) @@ -450,12 +450,10 @@ /* BEGIN COMPILE-ME STUBS */ -NativeCodePtr compile_jit_a_method(Method * method); - static NativeCodePtr compile_get_compile_me_generic() { static NativeCodePtr addr = NULL; if (!addr) { - NativeCodePtr (*p_jitter)(Method*) = compile_jit_a_method; + NativeCodePtr (*p_jitter)(Method*) = compile_me; void (*p_rethrow)() = exn_rethrow_if_pending; LilCodeStub* cs = lil_parse_code_stub( "entry 1:managed:arbitrary;" @@ -464,10 +462,11 @@ "out platform:pint:pint;" "o0=sp0;" "call %1i;" - "pop_m2n;" "locals 1;" "l0 = r;" + "out platform::void;" "call %2i;" + "pop_m2n;" "tailcall l0;", FRAME_COMPILATION, p_jitter, p_rethrow); assert(cs && lil_is_valid(cs)); Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/util/ipf/base/ini_ipf.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/util/ipf/base/ini_ipf.cpp (revision 489039) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/util/ipf/base/ini_ipf.cpp (working copy) @@ -42,6 +42,7 @@ #include "compile.h" #include "open/vm_util.h" +#include "open/hythread_ext.h" #include "merced.h" #include "vm_stats.h" @@ -141,9 +142,9 @@ jvalue *return_value, jvalue *args) { - assert(("Doesn't compile", 0)); - abort(); -#if 0 + //assert(("Doesn't compile", 0)); + //abort(); +#if 1 Method *meth = (Method*) methodID; assert(!hythread_is_suspend_enabled()); void *entry_point = meth->get_code_addr(); @@ -202,7 +203,7 @@ ManagedObject *object = (ManagedObject *)i64; if(object) { Class *clss = object->vt()->clss; - sprintf(msg, " of class '%s'", clss->name->bytes); + sprintf(msg, " of class '%s'", clss->get_name()->bytes); } } } @@ -240,7 +241,7 @@ iter = advance_arg_iterator(iter); } - assert(nargs <= 8); + // assert(nargs <= 8); double double_result; static void* addr_execute = get_vm_execute_java_method(); @@ -256,8 +257,9 @@ void *thread_pointer, uint64 tid) = (uint64 (__cdecl * )(void *entry_point, int nargs, uint64 args[], double *double_result_addr, int double_nargs, double double_args[], void *thread_pointer, uint64 tid))&fptr; + IDATA id = hythread_get_id(hythread_self()); uint64 int_result = (uint64)fpp_exec(entry_point, nargs, arg_words, &double_result, - double_nargs, double_args, p_TLS_vmthread, p_TLS_vmthread->stack_key); + double_nargs, double_args, p_TLS_vmthread, id); // Save the result Java_Type ret_type = meth->get_return_java_type(); @@ -308,11 +310,12 @@ break; default: #ifdef _DEBUG - printf("Returned to C from %s.%s%s\n", - meth->get_class()->name->bytes, meth->get_name()->bytes, - meth->get_descriptor()->bytes); + std::clog << "Returned to C from " + << meth->get_class()->get_name()->bytes << "." << meth->get_name()->bytes + << meth->get_descriptor()->bytes << "\n"; #endif - DIE("Return type " << ret_type << " is not implemented\n"); + //DIE("Return type ");// << (int)ret_type << " is not implemented\n"); + std::clog << "Return type " << (int)ret_type << " is not implemented\n"; } #endif Index: /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/util/ipf/base/jit_runtime_support_ipf.cpp =================================================================== --- /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/util/ipf/base/jit_runtime_support_ipf.cpp (revision 489039) +++ /export/ichebyki/workspace-e3.2.1/Harmony/working_vm/vm/vmcore/src/util/ipf/base/jit_runtime_support_ipf.cpp (working copy) @@ -1177,10 +1177,12 @@ static void gen_vm_rt_monitorenter_fast_path(Merced_Code_Emitter &emitter, bool check_null) { + return; // ichebyki +#if 1 // FIXME: code outdated assert(0); abort(); -#if 0 +#else const int thread_stack_key_reg = THREAD_ID_REG; const int object_stack_key_addr_reg = SCRATCH_GENERAL_REG4; const int object_old_stack_key_reg = SCRATCH_GENERAL_REG5; @@ -1260,6 +1262,7 @@ static void gen_vm_rt_monitorexit_fast_path(Merced_Code_Emitter &emitter, bool check_null) { + return; // ichebyki // FIXME: code is outdated assert(0); abort(); @@ -2697,6 +2700,10 @@ fptr = get_vm_rt_monitor_enter_static_address(); dereference_fptr = false; break; + case VM_RT_MONITOR_ENTER_NON_NULL: + fptr = get_vm_rt_monitor_enter_address(false); + dereference_fptr = false; + break; case VM_RT_MONITOR_EXIT: fptr = get_vm_rt_monitor_exit_address(true); dereference_fptr = false;