diff -r efb2770e8288 -r 253c817653b6 src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp --- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Wed Aug 21 11:29:40 2019 -0400 +++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Wed Aug 21 18:05:31 2019 +0200 @@ -934,7 +934,7 @@ StubCodeMark mark(cgen, "StubRoutines", "shenandoah_lrb"); address start = __ pc(); - Label resolve_oop, slow_path, done; + Label resolve_oop, slow_path; // We use RDI, which also serves as argument register for slow call. // RAX always holds the src object ptr, except after the slow call, @@ -971,7 +971,6 @@ // At this point, tmp2 contains the decoded forwarding pointer. __ mov(rax, tmp2); - __ bind(done); __ pop(tmp2); __ pop(tmp1); __ ret(0); @@ -992,9 +991,14 @@ __ push(r14); __ push(r15); #endif - + __ push(rbp); + __ movptr(rbp, rsp); + __ andptr(rsp, -StackAlignmentInBytes); + __ push_FPU_state(); __ call_VM_leaf(CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier), rax); - + __ pop_FPU_state(); + __ movptr(rsp, rbp); + __ pop(rbp); #ifdef _LP64 __ pop(r15); __ pop(r14);