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); |