< prev index next >

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Print this page




1654  {
1655     Label L;
1656     __ tst(r0, JVM_ACC_ABSTRACT);
1657     __ br(Assembler::EQ, L);
1658     __ stop("tried to execute abstract method in interpreter");
1659     __ bind(L);
1660   }
1661 #endif
1662 
1663   // Since at this point in the method invocation the exception
1664   // handler would try to exit the monitor of synchronized methods
1665   // which hasn't been entered yet, we set the thread local variable
1666   // _do_not_unlock_if_synchronized to true. The remove_activation
1667   // will check this flag.
1668 
1669    const Address do_not_unlock_if_synchronized(rthread,
1670         in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()));
1671   __ mov(rscratch2, true);
1672   __ strb(rscratch2, do_not_unlock_if_synchronized);
1673 








1674   // increment invocation count & check for overflow
1675   Label invocation_counter_overflow;
1676   Label profile_method;
1677   Label profile_method_continue;
1678   if (inc_counter) {
1679     generate_counter_incr(&invocation_counter_overflow,
1680                           &profile_method,
1681                           &profile_method_continue);
1682     if (ProfileInterpreter) {
1683       __ bind(profile_method_continue);
1684     }
1685   }
1686 
1687   Label continue_after_compile;
1688   __ bind(continue_after_compile);
1689 
1690   bang_stack_shadow_pages(false);
1691 
1692   // reset the _do_not_unlock_if_synchronized flag
1693   __ strb(zr, do_not_unlock_if_synchronized);




1654  {
1655     Label L;
1656     __ tst(r0, JVM_ACC_ABSTRACT);
1657     __ br(Assembler::EQ, L);
1658     __ stop("tried to execute abstract method in interpreter");
1659     __ bind(L);
1660   }
1661 #endif
1662 
1663   // Since at this point in the method invocation the exception
1664   // handler would try to exit the monitor of synchronized methods
1665   // which hasn't been entered yet, we set the thread local variable
1666   // _do_not_unlock_if_synchronized to true. The remove_activation
1667   // will check this flag.
1668 
1669    const Address do_not_unlock_if_synchronized(rthread,
1670         in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()));
1671   __ mov(rscratch2, true);
1672   __ strb(rscratch2, do_not_unlock_if_synchronized);
1673 
1674   Label no_mdp;
1675   Register mdp = r3;
1676   __ ldr(mdp, Address(rmethod, Method::method_data_offset()));
1677   __ cbz(mdp, no_mdp);
1678   __ add(mdp, mdp, in_bytes(MethodData::data_offset()));
1679   __ profile_parameters_type(mdp, r1, r2);
1680   __ bind(no_mdp);
1681 
1682   // increment invocation count & check for overflow
1683   Label invocation_counter_overflow;
1684   Label profile_method;
1685   Label profile_method_continue;
1686   if (inc_counter) {
1687     generate_counter_incr(&invocation_counter_overflow,
1688                           &profile_method,
1689                           &profile_method_continue);
1690     if (ProfileInterpreter) {
1691       __ bind(profile_method_continue);
1692     }
1693   }
1694 
1695   Label continue_after_compile;
1696   __ bind(continue_after_compile);
1697 
1698   bang_stack_shadow_pages(false);
1699 
1700   // reset the _do_not_unlock_if_synchronized flag
1701   __ strb(zr, do_not_unlock_if_synchronized);


< prev index next >