--- old/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp 2019-07-12 11:38:28.488761447 +0000 +++ new/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp 2019-07-12 11:38:27.468718613 +0000 @@ -273,7 +273,12 @@ } void G1BarrierSetAssembler::oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2) { + Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) { + + if (tmp3 == noreg) { + tmp3 = r8; + } + // flatten object address if needed if (dst.index() == noreg && dst.offset() == 0) { if (dst.base() != r3) { @@ -292,7 +297,7 @@ false /* expand_call */); if (val == noreg) { - BarrierSetAssembler::store_at(masm, decorators, type, Address(r3, 0), noreg, noreg, noreg); + BarrierSetAssembler::store_at(masm, decorators, type, Address(r3, 0), noreg, noreg, noreg, noreg); } else { // G1 barrier needs uncompressed oop for region cross check. Register new_val = val; @@ -300,7 +305,7 @@ new_val = rscratch2; __ mov(new_val, val); } - BarrierSetAssembler::store_at(masm, decorators, type, Address(r3, 0), val, noreg, noreg); + BarrierSetAssembler::store_at(masm, decorators, type, Address(r3, 0), val, noreg, noreg, noreg); g1_write_barrier_post(masm, r3 /* store_adr */, new_val /* new_val */,