8147805: aarch64: C1 segmentation fault due to inline Unsafe.getAndSetObject
authorhshi
Wed, 20 Jan 2016 04:56:51 -0800
changeset 35584 bd3f4749a19c
parent 35583 3e83096ee8e5
child 35586 2aeb1ca2c40b
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
hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp
--- a/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp	Wed Jan 20 17:00:17 2016 -1000
+++ b/hotspot/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp	Wed Jan 20 04:56:51 2016 -0800
@@ -3169,7 +3169,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;