< 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,1920 **** // 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); __ 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); } 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 --- 1902,1922 ---- // 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, ! 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, ! 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,1969 **** __ 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 --- 1960,1971 ---- __ 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,2003 **** __ load_unsigned_byte(r1, Address(rbcp, 0)); // restore target bytecode __ set_method_data_pointer_for_bcp(); __ b(dispatch); } ! if (TieredCompilation || 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 --- 1981,2000 ---- __ load_unsigned_byte(r1, Address(rbcp, 0)); // restore target bytecode __ set_method_data_pointer_for_bcp(); __ b(dispatch); } ! 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); __ 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 >