< 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   Register tmp1 = r1;
1675   Register tmp2 = r2;
1676   Register mdp  = r4;
1677   Label no_mdp;
1678   __ ldr(mdp, Address(rmethod, Method::method_data_offset()));
1679   __ cbz(mdp, no_mdp);
1680   __ add(mdp, mdp, in_bytes(MethodData::data_offset()));
1681   __ profile_parameters_type(mdp, tmp1, tmp2);
1682   __ bind(no_mdp);
1683 
1684   // increment invocation count & check for overflow
1685   Label invocation_counter_overflow;
1686   Label profile_method;
1687   Label profile_method_continue;
1688   if (inc_counter) {
1689     generate_counter_incr(&invocation_counter_overflow,
1690                           &profile_method,
1691                           &profile_method_continue);
1692     if (ProfileInterpreter) {
1693       __ bind(profile_method_continue);
1694     }
1695   }
1696 
1697   Label continue_after_compile;
1698   __ bind(continue_after_compile);
1699 
1700   bang_stack_shadow_pages(false);
1701 
1702   // reset the _do_not_unlock_if_synchronized flag
1703   __ strb(zr, do_not_unlock_if_synchronized);


< prev index next >