RFR: JDK-8229977: Shenandoah: save/restore FPU state aroud LRB runtime call
rkennke at redhat.com
Wed Aug 21 16:10:37 UTC 2019
Nightlies show failures in CAS/CAE related jcstress tests, and they only
seem to affect float/double variants.
The root cause is JDK-8228369 which removed
save_vector_registers()/restore_vector_registers() around the LRB
runtime call. It turns out that we actually need them, because the LRB
stub is used by C1/C2 CAS intrinsics.
Instead of re-introducing save/restore_vector_registers(), my proposed
change uses push/pop_FPU_state() which uses whatever the platform
supports (e.g. fxsave/fxrestore) to push the whole FPU state on stack. A
little quirk is the requirement on 16-byte-alignment of the stack, hence
the extra setup code for this.
The failing tests are passing with this change, and
hotspot_gc_shenandoah is happy too.
More information about the hotspot-gc-dev