1619 __ ba_short(Loverflow); 1620 } 1621 1622 // If there's no MDO, increment counter in MethodCounters* 1623 __ bind(Lno_mdo); 1624 Address backedge_counter(Rcounters, 1625 in_bytes(MethodCounters::backedge_counter_offset()) + 1626 in_bytes(InvocationCounter::counter_offset())); 1627 __ increment_mask_and_jump(backedge_counter, increment, mask, G4_scratch, O0, 1628 Assembler::notZero, &Lforward); 1629 __ bind(Loverflow); 1630 1631 // notify point for loop, pass branch bytecode 1632 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), l_cur_bcp); 1633 1634 // Was an OSR adapter generated? 1635 // O0 = osr nmethod 1636 __ br_null_short(O0, Assembler::pn, Lforward); 1637 1638 // Has the nmethod been invalidated already? 1639 __ ld(O0, nmethod::entry_bci_offset(), O2); 1640 __ cmp_and_br_short(O2, InvalidOSREntryBci, Assembler::equal, Assembler::pn, Lforward); 1641 1642 // migrate the interpreter frame off of the stack 1643 1644 __ mov(G2_thread, L7); 1645 // save nmethod 1646 __ mov(O0, L6); 1647 __ set_last_Java_frame(SP, noreg); 1648 __ call_VM_leaf(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_begin), L7); 1649 __ reset_last_Java_frame(); 1650 __ mov(L7, G2_thread); 1651 1652 // move OSR nmethod to I1 1653 __ mov(L6, I1); 1654 1655 // OSR buffer to I0 1656 __ mov(O0, I0); 1657 1658 // remove the interpreter frame 1659 __ restore(I5_savedSP, 0, SP); 1660 | 1619 __ ba_short(Loverflow); 1620 } 1621 1622 // If there's no MDO, increment counter in MethodCounters* 1623 __ bind(Lno_mdo); 1624 Address backedge_counter(Rcounters, 1625 in_bytes(MethodCounters::backedge_counter_offset()) + 1626 in_bytes(InvocationCounter::counter_offset())); 1627 __ increment_mask_and_jump(backedge_counter, increment, mask, G4_scratch, O0, 1628 Assembler::notZero, &Lforward); 1629 __ bind(Loverflow); 1630 1631 // notify point for loop, pass branch bytecode 1632 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), l_cur_bcp); 1633 1634 // Was an OSR adapter generated? 1635 // O0 = osr nmethod 1636 __ br_null_short(O0, Assembler::pn, Lforward); 1637 1638 // Has the nmethod been invalidated already? 1639 __ ldub(O0, nmethod::state_offset(), O2); 1640 __ cmp_and_br_short(O2, 0, Assembler::notEqual, Assembler::pn, Lforward); 1641 1642 // migrate the interpreter frame off of the stack 1643 1644 __ mov(G2_thread, L7); 1645 // save nmethod 1646 __ mov(O0, L6); 1647 __ set_last_Java_frame(SP, noreg); 1648 __ call_VM_leaf(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_begin), L7); 1649 __ reset_last_Java_frame(); 1650 __ mov(L7, G2_thread); 1651 1652 // move OSR nmethod to I1 1653 __ mov(L6, I1); 1654 1655 // OSR buffer to I0 1656 __ mov(O0, I0); 1657 1658 // remove the interpreter frame 1659 __ restore(I5_savedSP, 0, SP); 1660 |