src/cpu/sparc/vm/templateTable_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8048721 Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/templateTable_sparc.cpp

Print this page




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 


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