< prev index next >

src/cpu/sparc/vm/templateInterpreter_sparc.cpp

Print this page

        

*** 202,211 **** --- 202,225 ---- address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state, int step) { address entry = __ pc(); __ get_constant_pool_cache(LcpoolCache); // load LcpoolCache + #if INCLUDE_JVMCI + // Check if we need to take lock at entry of synchronized method. + if (UseJVMCICompiler) { + Label L; + Address pending_monitor_enter_addr(G2_thread, JavaThread::pending_monitorenter_offset()); + __ ldbool(pending_monitor_enter_addr, Gtemp); // Load if pending monitor enter + __ cmp_and_br_short(Gtemp, G0, Assembler::equal, Assembler::pn, L); + // Clear flag. + __ stbool(G0, pending_monitor_enter_addr); + // Take lock. + lock_method(); + __ bind(L); + } + #endif { Label L; Address exception_addr(G2_thread, Thread::pending_exception_offset()); __ ld_ptr(exception_addr, Gtemp); // Load pending exception. __ br_null_short(Gtemp, Assembler::pt, L); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_pending_exception));
*** 347,357 **** } // Allocate monitor and lock method (asm interpreter) // ebx - Method* // ! void InterpreterGenerator::lock_method(void) { __ ld(Lmethod, in_bytes(Method::access_flags_offset()), O0); // Load access flags. #ifdef ASSERT { Label ok; __ btst(JVM_ACC_SYNCHRONIZED, O0); --- 361,371 ---- } // Allocate monitor and lock method (asm interpreter) // ebx - Method* // ! void TemplateInterpreterGenerator::lock_method() { __ ld(Lmethod, in_bytes(Method::access_flags_offset()), O0); // Load access flags. #ifdef ASSERT { Label ok; __ btst(JVM_ACC_SYNCHRONIZED, O0);
< prev index next >