--- old/src/cpu/x86/vm/templateTable_x86_64.cpp 2014-09-08 15:36:17.765739016 +0200 +++ new/src/cpu/x86/vm/templateTable_x86_64.cpp 2014-09-08 15:36:17.489739008 +0200 @@ -1751,9 +1751,8 @@ __ testptr(rax, rax); // test result __ jcc(Assembler::zero, dispatch); // no osr if null // nmethod may have been invalidated (VM may block upon call_VM return) - __ movl(rcx, Address(rax, nmethod::entry_bci_offset())); - __ cmpl(rcx, InvalidOSREntryBci); - __ jcc(Assembler::equal, dispatch); + __ cmpb(Address(rax, nmethod::state_offset()), 0); + __ jcc(Assembler::notEqual, dispatch); // We have the address of an on stack replacement routine in eax // We need to prepare to execute the OSR method. First we must --- old/src/share/vm/interpreter/bytecodeInterpreter.cpp 2014-09-08 15:36:17.817739018 +0200 +++ new/src/share/vm/interpreter/bytecodeInterpreter.cpp 2014-09-08 15:36:17.553739010 +0200 @@ -330,7 +330,7 @@ if (do_OSR) { \ nmethod* osr_nmethod; \ OSR_REQUEST(osr_nmethod, branch_pc); \ - if (osr_nmethod != NULL && osr_nmethod->osr_entry_bci() != InvalidOSREntryBci) { \ + if (osr_nmethod != NULL && osr_nmethod->is_in_use()) { \ intptr_t* buf; \ /* Call OSR migration with last java frame only, no checks. */ \ CALL_VM_NAKED_LJF(buf=SharedRuntime::OSR_migration_begin(THREAD)); \ --- old/src/share/vm/code/nmethod.hpp 2014-09-08 15:36:17.781739017 +0200 +++ new/src/share/vm/code/nmethod.hpp 2014-09-08 15:36:17.477739008 +0200 @@ -756,7 +756,7 @@ // support for code generation static int verified_entry_point_offset() { return offset_of(nmethod, _verified_entry_point); } static int osr_entry_point_offset() { return offset_of(nmethod, _osr_entry_point); } - static int entry_bci_offset() { return offset_of(nmethod, _entry_bci); } + static int state_offset() { return offset_of(nmethod, _state); } // RedefineClasses support. Mark metadata in nmethods as on_stack so that // redefine classes doesn't purge it. --- old/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java 2014-09-08 15:36:17.849739019 +0200 +++ new/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java 2014-09-08 15:36:17.497739008 +0200 @@ -107,7 +107,6 @@ private Runtime1 runtime1; /** These constants come from globalDefinitions.hpp */ private int invocationEntryBCI; - private int invalidOSREntryBCI; private ReversePtrs revPtrs; private VMRegImpl vmregImpl; private int reserveForAllocationPrefetch; @@ -295,7 +294,6 @@ stackBias = db.lookupIntConstant("STACK_BIAS").intValue(); invocationEntryBCI = db.lookupIntConstant("InvocationEntryBci").intValue(); - invalidOSREntryBCI = db.lookupIntConstant("InvalidOSREntryBci").intValue(); // We infer the presence of C1 or C2 from a couple of fields we // already have present in the type database @@ -733,11 +731,6 @@ return invocationEntryBCI; } - /** FIXME: figure out where to stick this */ - public int getInvalidOSREntryBCI() { - return invalidOSREntryBCI; - } - // FIXME: figure out where to stick this public boolean wizardMode() { return true; --- old/src/cpu/sparc/vm/templateTable_sparc.cpp 2014-09-08 15:36:17.841739019 +0200 +++ new/src/cpu/sparc/vm/templateTable_sparc.cpp 2014-09-08 15:36:17.485739008 +0200 @@ -1636,8 +1636,8 @@ __ br_null_short(O0, Assembler::pn, Lforward); // Has the nmethod been invalidated already? - __ ld(O0, nmethod::entry_bci_offset(), O2); - __ cmp_and_br_short(O2, InvalidOSREntryBci, Assembler::equal, Assembler::pn, Lforward); + __ ldub(O0, nmethod::state_offset(), O2); + __ cmp_and_br_short(O2, 0, Assembler::notEqual, Assembler::pn, Lforward); // migrate the interpreter frame off of the stack --- old/src/share/vm/runtime/vmStructs.cpp 2014-09-08 15:36:17.781739017 +0200 +++ new/src/share/vm/runtime/vmStructs.cpp 2014-09-08 15:36:17.465739007 +0200 @@ -2519,7 +2519,6 @@ /*********************************************/ \ \ declare_constant(InvocationEntryBci) \ - declare_constant(InvalidOSREntryBci) \ \ /***************/ \ /* OopMapValue */ \ --- old/src/share/vm/utilities/globalDefinitions.hpp 2014-09-08 15:36:17.785739017 +0200 +++ new/src/share/vm/utilities/globalDefinitions.hpp 2014-09-08 15:36:17.489739008 +0200 @@ -882,8 +882,7 @@ // Handy constants for deciding which compiler mode to use. enum MethodCompilation { - InvocationEntryBci = -1, // i.e., not a on-stack replacement compilation - InvalidOSREntryBci = -2 + InvocationEntryBci = -1 // i.e., not a on-stack replacement compilation }; // Enumeration to distinguish tiers of compilation --- old/src/cpu/x86/vm/templateTable_x86_32.cpp 2014-09-08 15:36:17.825739018 +0200 +++ new/src/cpu/x86/vm/templateTable_x86_32.cpp 2014-09-08 15:36:17.497739008 +0200 @@ -1724,9 +1724,8 @@ __ testptr(rax, rax); // test result __ jcc(Assembler::zero, dispatch); // no osr if null // nmethod may have been invalidated (VM may block upon call_VM return) - __ movl(rcx, Address(rax, nmethod::entry_bci_offset())); - __ cmpl(rcx, InvalidOSREntryBci); - __ jcc(Assembler::equal, dispatch); + __ cmpb(Address(rax, nmethod::state_offset()), 0); + __ jcc(Assembler::notEqual, dispatch); // We have the address of an on stack replacement routine in rax, // We need to prepare to execute the OSR method. First we must @@ -1734,8 +1733,7 @@ __ mov(rbx, rax); // save the nmethod - const Register thread = rcx; - __ get_thread(thread); + __ get_thread(rcx); call_VM(noreg, CAST_FROM_FN_PTR(address, SharedRuntime::OSR_migration_begin)); // rax, is OSR buffer, move it to expected parameter location __ mov(rcx, rax); --- old/src/cpu/ppc/vm/interp_masm_ppc_64.cpp 2014-09-08 15:36:17.885739020 +0200 +++ new/src/cpu/ppc/vm/interp_masm_ppc_64.cpp 2014-09-08 15:36:17.509739009 +0200 @@ -1166,9 +1166,9 @@ beq(CCR0, overflow_with_error); // Has the nmethod been invalidated already? - lwz(Rtmp, nmethod::entry_bci_offset(), R3_RET); - cmpwi(CCR0, Rtmp, InvalidOSREntryBci); - beq(CCR0, overflow_with_error); + lbz(Rtmp, nmethod::state_offset(), R3_RET); + cmpwi(CCR0, Rtmp, 0); + bne(CCR0, overflow_with_error); // Migrate the interpreter frame off of the stack. // We can use all registers because we will not return to interpreter from this point. --- old/src/share/vm/code/nmethod.cpp 2014-09-08 15:36:17.885739020 +0200 +++ new/src/share/vm/code/nmethod.cpp 2014-09-08 15:36:17.509739009 +0200 @@ -1364,8 +1364,6 @@ // Remove from list of active nmethods if (method() != NULL) method()->method_holder()->remove_osr_nmethod(this); - // Set entry as invalid - _entry_bci = InvalidOSREntryBci; } void nmethod::log_state_change() const { --- old/src/cpu/ppc/vm/templateTable_ppc_64.cpp 2014-09-08 15:36:17.897739020 +0200 +++ new/src/cpu/ppc/vm/templateTable_ppc_64.cpp 2014-09-08 15:36:17.577739011 +0200 @@ -1674,9 +1674,9 @@ __ beq(CCR0, Lforward); // Has the nmethod been invalidated already? - __ lwz(R0, nmethod::entry_bci_offset(), R3_RET); - __ cmpwi(CCR0, R0, InvalidOSREntryBci); - __ beq(CCR0, Lforward); + __ lbz(R0, nmethod::state_offset(), R3_RET); + __ cmpwi(CCR0, R0, 0); + __ bne(CCR0, Lforward); // Migrate the interpreter frame off of the stack. // We can use all registers because we will not return to interpreter from this point. --- old/src/cpu/sparc/vm/interp_masm_sparc.cpp 2014-09-08 15:36:17.901739020 +0200 +++ new/src/cpu/sparc/vm/interp_masm_sparc.cpp 2014-09-08 15:36:17.537739010 +0200 @@ -2407,8 +2407,8 @@ br_null_short(O0, Assembler::pn, overflow_with_error); // Has the nmethod been invalidated already? - ld(O0, nmethod::entry_bci_offset(), O2); - cmp_and_br_short(O2, InvalidOSREntryBci, Assembler::equal, Assembler::pn, overflow_with_error); + ldub(O0, nmethod::state_offset(), O2); + cmp_and_br_short(O2, 0, Assembler::notEqual, Assembler::pn, overflow_with_error); // migrate the interpreter frame off of the stack