diff -r 0d7877278adf -r bc0648405d67 src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp --- a/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Wed Sep 18 20:56:19 2019 +0200 +++ b/src/hotspot/cpu/aarch64/gc/shenandoah/shenandoahBarrierSetAssembler_aarch64.cpp Wed Sep 18 20:56:20 2019 +0200 @@ -501,6 +501,7 @@ Register obj = stub->obj()->as_register(); Register res = stub->result()->as_register(); + Register addr = stub->addr()->as_register_lo(); Register tmp1 = stub->tmp1()->as_register(); Register tmp2 = stub->tmp2()->as_register(); @@ -533,6 +534,7 @@ __ bind(slow_path); ce->store_parameter(res, 0); + ce->store_parameter(addr, 1); __ far_call(RuntimeAddress(bs->load_reference_barrier_rt_code_blob()->code_begin())); __ b(*stub->continuation()); @@ -594,7 +596,12 @@ __ push_call_clobbered_registers(); __ load_parameter(0, r0); - __ mov(lr, CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier)); + __ load_parameter(1, r1); + if (UseCompressedOops) { + __ mov(lr, CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_fixup_narrow)); + } else { + __ mov(lr, CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_fixup)); + } __ blr(lr); __ mov(rscratch1, r0); __ pop_call_clobbered_registers();