changeset 6735:6774b8e70603 icedtea-2.6.19 icedtea-2.6.20pre00

8224828, PR3741: aarch64: rflags is not correct after safepoint poll Reviewed-by: aph, adinn Contributed-by: Xiang Yuan <yuanxiang4@huawei.com>
author fyang
date Tue, 16 Jul 2019 08:14:51 +0100
parents 5e713e212064
children a9e5052ad011
files src/cpu/aarch64/vm/aarch64.ad src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp
diffstat 2 files changed, 4 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/aarch64.ad	Tue May 28 11:15:11 2019 -0400
+++ b/src/cpu/aarch64/vm/aarch64.ad	Tue Jul 16 08:14:51 2019 +0100
@@ -11399,9 +11399,10 @@
 // TODO
 // provide a near and far version of this code
 
-instruct safePoint(iRegP poll)
+instruct safePoint(rFlagsReg cr, iRegP poll)
 %{
   match(SafePoint poll);
+  effect(KILL cr);
 
   format %{
     "ldrw zr, [$poll]\t# Safepoint: poll for GC"
--- a/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp	Tue May 28 11:15:11 2019 -0400
+++ b/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp	Tue Jul 16 08:14:51 2019 +0100
@@ -118,7 +118,7 @@
   int frame_size_in_words = frame_size_in_bytes / wordSize;
   *total_frame_words = frame_size_in_words;
 
-  // Save registers, fpu state, and flags.
+  // Save Integer and Float registers.
 
   __ enter();
   __ push_CPU_state();
@@ -2827,7 +2827,7 @@
   bool cause_return = (poll_type == POLL_AT_RETURN);
   bool save_vectors = (poll_type == POLL_AT_VECTOR_LOOP);
 
-  // Save registers, fpu state, and flags
+  // Save Integer and Float registers.
   map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words);
 
   // The following is basically a call_VM.  However, we need the precise