< prev index next >

src/hotspot/cpu/zero/cppInterpreter_zero.cpp

Print this page
rev 49290 : [mq]: JDK-8199735.01.patch


 258     }
 259     InvocationCounter *counter = mcs->invocation_counter();
 260     counter->increment();
 261     if (counter->reached_InvocationLimit(mcs->backedge_counter())) {
 262       CALL_VM_NOCHECK(
 263         InterpreterRuntime::frequency_counter_overflow(thread, NULL));
 264       if (HAS_PENDING_EXCEPTION)
 265         goto unwind_and_return;
 266     }
 267   }
 268 
 269   // Lock if necessary
 270   BasicObjectLock *monitor;
 271   monitor = NULL;
 272   if (method->is_synchronized()) {
 273     monitor = (BasicObjectLock*) istate->stack_base();
 274     oop lockee = monitor->obj();
 275     markOop disp = lockee->mark()->set_unlocked();
 276 
 277     monitor->lock()->set_displaced_header(disp);
 278     if (Atomic::cmpxchg((markOop)monitor, lockee->mark_addr(), disp) != disp) {
 279       if (thread->is_lock_owned((address) disp->clear_lock_bits())) {
 280         monitor->lock()->set_displaced_header(NULL);
 281       }
 282       else {
 283         CALL_VM_NOCHECK(InterpreterRuntime::monitorenter(thread, monitor));
 284         if (HAS_PENDING_EXCEPTION)
 285           goto unwind_and_return;
 286       }
 287     }
 288   }
 289 
 290   // Get the signature handler
 291   InterpreterRuntime::SignatureHandler *handler; {
 292     address handlerAddr = method->signature_handler();
 293     if (handlerAddr == NULL) {
 294       CALL_VM_NOCHECK(InterpreterRuntime::prepare_native_call(thread, method));
 295       if (HAS_PENDING_EXCEPTION)
 296         goto unlock_unwind_and_return;
 297 
 298       handlerAddr = method->signature_handler();




 258     }
 259     InvocationCounter *counter = mcs->invocation_counter();
 260     counter->increment();
 261     if (counter->reached_InvocationLimit(mcs->backedge_counter())) {
 262       CALL_VM_NOCHECK(
 263         InterpreterRuntime::frequency_counter_overflow(thread, NULL));
 264       if (HAS_PENDING_EXCEPTION)
 265         goto unwind_and_return;
 266     }
 267   }
 268 
 269   // Lock if necessary
 270   BasicObjectLock *monitor;
 271   monitor = NULL;
 272   if (method->is_synchronized()) {
 273     monitor = (BasicObjectLock*) istate->stack_base();
 274     oop lockee = monitor->obj();
 275     markOop disp = lockee->mark()->set_unlocked();
 276 
 277     monitor->lock()->set_displaced_header(disp);
 278     if (lockee->cas_set_mark((markOop)monitor, disp) != disp) {
 279       if (thread->is_lock_owned((address) disp->clear_lock_bits())) {
 280         monitor->lock()->set_displaced_header(NULL);
 281       }
 282       else {
 283         CALL_VM_NOCHECK(InterpreterRuntime::monitorenter(thread, monitor));
 284         if (HAS_PENDING_EXCEPTION)
 285           goto unwind_and_return;
 286       }
 287     }
 288   }
 289 
 290   // Get the signature handler
 291   InterpreterRuntime::SignatureHandler *handler; {
 292     address handlerAddr = method->signature_handler();
 293     if (handlerAddr == NULL) {
 294       CALL_VM_NOCHECK(InterpreterRuntime::prepare_native_call(thread, method));
 295       if (HAS_PENDING_EXCEPTION)
 296         goto unlock_unwind_and_return;
 297 
 298       handlerAddr = method->signature_handler();


< prev index next >