src/cpu/x86/vm/templateInterpreter_x86_32.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_32.cpp

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


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

1493   // increment invocation count & check for overflow
1494   Label invocation_counter_overflow;
1495   Label profile_method;
1496   Label profile_method_continue;
1497   if (inc_counter) {
1498     generate_counter_incr(&invocation_counter_overflow, &profile_method, &profile_method_continue);
1499     if (ProfileInterpreter) {
1500       __ bind(profile_method_continue);
1501     }
1502   }
1503   Label continue_after_compile;
1504   __ bind(continue_after_compile);
1505 
1506   bang_stack_shadow_pages(false);
1507 
1508   // reset the _do_not_unlock_if_synchronized flag
1509   __ get_thread(rax);
1510   __ movbool(do_not_unlock_if_synchronized, false);
1511 
1512   // check for synchronized methods




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


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