Blob Blame History Raw
# HG changeset patch
# User hshi
# Date 1455640059 0
#      Tue Feb 16 16:27:39 2016 +0000
# Node ID f90e98d9a3e53ffa6d4611bec799d8a9b338d82c
# Parent  225180d970c1fd447b87de8122016cdbfaea0dff
8147805: aarch64: C1 segmentation fault due to inline Unsafe.getAndSetObject
Summary: In Aarch64 LIR_Assembler.atomic_op, keep stored data reference register in decompressed forms as it may be used later
Reviewed-by: aph
Contributed-by: hui.shi@linaro.org, felix.yang@linaro.org

diff -r 225180d970c1 -r f90e98d9a3e5 src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp
--- openjdk/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp	Thu Jan 21 22:17:05 2016 +0000
+++ openjdk/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp	Tue Feb 16 16:27:39 2016 +0000
@@ -3202,7 +3202,8 @@
       Register obj = as_reg(data);
       Register dst = as_reg(dest);
       if (is_oop && UseCompressedOops) {
-	__ encode_heap_oop(obj);
+        __ encode_heap_oop(rscratch1, obj);
+        obj = rscratch1;
       }
       assert_different_registers(obj, addr.base(), tmp, rscratch2, dst);
       Label again;