8233500: Shenandoah: Shenandoah load barrier should save registers before calling keep alive barrier on x86
Reviewed-by: rkennke
--- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Fri Nov 22 17:45:48 2019 -0800
+++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp Tue Nov 26 14:33:56 2019 -0500
@@ -511,6 +511,7 @@
// 3: apply keep-alive barrier if needed
if (ShenandoahBarrierSet::need_keep_alive_barrier(decorators, type)) {
+ __ push_IU_state();
const Register thread = NOT_LP64(tmp_thread) LP64_ONLY(r15_thread);
assert_different_registers(dst, tmp1, tmp_thread);
NOT_LP64(__ get_thread(thread));
@@ -523,6 +524,7 @@
tmp1 /* tmp */,
true /* tosca_live */,
true /* expand_call */);
+ __ pop_IU_state();
}
}