src/cpu/x86/vm/templateInterpreter_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/cpu/x86/vm

src/cpu/x86/vm/templateInterpreter_x86_64.cpp

Print this page
rev 5411 : 8026251: New type profiling points: parameters to methods
Summary: x86 interpreter and c1 type profiling for parameters on method entries
Reviewed-by:


1480   }
1481   {
1482     Label L;
1483     __ testl(rax, JVM_ACC_ABSTRACT);
1484     __ jcc(Assembler::zero, L);
1485     __ stop("tried to execute abstract method in interpreter");
1486     __ bind(L);
1487   }
1488 #endif
1489 
1490   // Since at this point in the method invocation the exception
1491   // handler would try to exit the monitor of synchronized methods
1492   // which hasn't been entered yet, we set the thread local variable
1493   // _do_not_unlock_if_synchronized to true. The remove_activation
1494   // will check this flag.
1495 
1496   const Address do_not_unlock_if_synchronized(r15_thread,
1497         in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()));
1498   __ movbool(do_not_unlock_if_synchronized, true);
1499 

1500   // increment invocation count & check for overflow
1501   Label invocation_counter_overflow;
1502   Label profile_method;
1503   Label profile_method_continue;
1504   if (inc_counter) {
1505     generate_counter_incr(&invocation_counter_overflow,
1506                           &profile_method,
1507                           &profile_method_continue);
1508     if (ProfileInterpreter) {
1509       __ bind(profile_method_continue);
1510     }
1511   }
1512 
1513   Label continue_after_compile;
1514   __ bind(continue_after_compile);
1515 
1516   // check for synchronized interpreted methods
1517   bang_stack_shadow_pages(false);
1518 
1519   // reset the _do_not_unlock_if_synchronized flag




1480   }
1481   {
1482     Label L;
1483     __ testl(rax, JVM_ACC_ABSTRACT);
1484     __ jcc(Assembler::zero, L);
1485     __ stop("tried to execute abstract method in interpreter");
1486     __ bind(L);
1487   }
1488 #endif
1489 
1490   // Since at this point in the method invocation the exception
1491   // handler would try to exit the monitor of synchronized methods
1492   // which hasn't been entered yet, we set the thread local variable
1493   // _do_not_unlock_if_synchronized to true. The remove_activation
1494   // will check this flag.
1495 
1496   const Address do_not_unlock_if_synchronized(r15_thread,
1497         in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()));
1498   __ movbool(do_not_unlock_if_synchronized, true);
1499 
1500   __ profile_parameters_type(rax, rcx, rdx);
1501   // increment invocation count & check for overflow
1502   Label invocation_counter_overflow;
1503   Label profile_method;
1504   Label profile_method_continue;
1505   if (inc_counter) {
1506     generate_counter_incr(&invocation_counter_overflow,
1507                           &profile_method,
1508                           &profile_method_continue);
1509     if (ProfileInterpreter) {
1510       __ bind(profile_method_continue);
1511     }
1512   }
1513 
1514   Label continue_after_compile;
1515   __ bind(continue_after_compile);
1516 
1517   // check for synchronized interpreted methods
1518   bang_stack_shadow_pages(false);
1519 
1520   // reset the _do_not_unlock_if_synchronized flag


src/cpu/x86/vm/templateInterpreter_x86_64.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File