< prev index next >
src/hotspot/cpu/aarch64/templateTable_aarch64.cpp
Print this page
rev 49237 : 8173100: AArch64: -XX:-UseOnStackReplacement does not work together with -XX:+TieredCompilation
Summary: Fix hotspot jtreg test compiler/interpreter/DisableOSRTest.java failure on AArch64.
Reviewed-by: duke
@@ -1902,19 +1902,21 @@
// Increment the MDO backedge counter
const Address mdo_backedge_counter(r1, in_bytes(MethodData::backedge_counter_offset()) +
in_bytes(InvocationCounter::counter_offset()));
const Address mask(r1, in_bytes(MethodData::backedge_mask_offset()));
__ increment_mask_and_jump(mdo_backedge_counter, increment, mask,
- r0, rscratch1, false, Assembler::EQ, &backedge_counter_overflow);
+ r0, rscratch1, false, Assembler::EQ,
+ UseOnStackReplacement ? &backedge_counter_overflow : &dispatch);
__ b(dispatch);
}
__ bind(no_mdo);
// Increment backedge counter in MethodCounters*
__ ldr(rscratch1, Address(rmethod, Method::method_counters_offset()));
const Address mask(rscratch1, in_bytes(MethodCounters::backedge_mask_offset()));
__ increment_mask_and_jump(Address(rscratch1, be_offset), increment, mask,
- r0, rscratch2, false, Assembler::EQ, &backedge_counter_overflow);
+ r0, rscratch2, false, Assembler::EQ,
+ UseOnStackReplacement ? &backedge_counter_overflow : &dispatch);
} else { // not TieredCompilation
// increment counter
__ ldr(rscratch2, Address(rmethod, Method::method_counters_offset()));
__ ldrw(r0, Address(rscratch2, be_offset)); // load backedge counter
__ addw(rscratch1, r0, InvocationCounter::count_increment); // increment counter
@@ -1958,12 +1960,12 @@
__ cmpw(r0, rscratch1);
__ br(Assembler::HS, backedge_counter_overflow); // Intel == Assembler::aboveEqual
}
}
}
- }
__ bind(dispatch);
+ }
// Pre-load the next target bytecode into rscratch1
__ load_unsigned_byte(rscratch1, Address(rbcp, 0));
// continue with the bytecode @ target
@@ -1979,25 +1981,20 @@
__ load_unsigned_byte(r1, Address(rbcp, 0)); // restore target bytecode
__ set_method_data_pointer_for_bcp();
__ b(dispatch);
}
- if (TieredCompilation || UseOnStackReplacement) {
+ if (UseOnStackReplacement) {
// invocation counter overflow
__ bind(backedge_counter_overflow);
__ neg(r2, r2);
__ add(r2, r2, rbcp); // branch bcp
// IcoResult frequency_counter_overflow([JavaThread*], address branch_bcp)
__ call_VM(noreg,
CAST_FROM_FN_PTR(address,
InterpreterRuntime::frequency_counter_overflow),
r2);
- if (!UseOnStackReplacement)
- __ b(dispatch);
- }
-
- if (UseOnStackReplacement) {
__ load_unsigned_byte(r1, Address(rbcp, 0)); // restore target bytecode
// r0: osr nmethod (osr ok) or NULL (osr not possible)
// w1: target bytecode
// r2: scratch
< prev index next >