Blame pr3559-use_ldrexd_for_atomic_reads_on_armv7_zero.patch

Alex Kashchenko d6f9d06
# HG changeset patch
Alex Kashchenko d6f9d06
# User aph
Alex Kashchenko d6f9d06
# Date 1338206478 14400
Alex Kashchenko d6f9d06
#      Mon May 28 08:01:18 2012 -0400
Alex Kashchenko d6f9d06
# Node ID 6275d7b419091092752d5a1854194c98897892ba
Alex Kashchenko d6f9d06
# Parent  be1379a186ba527b32c93a83e04c9600735fe44b
Alex Kashchenko d6f9d06
PR3559: Use ldrexd for atomic reads on ARMv7.
Alex Kashchenko d6f9d06
Alex Kashchenko d6f9d06
2012-05-28  Andrew Haley  <aph@redhat.com>
Alex Kashchenko d6f9d06
Alex Kashchenko d6f9d06
	* os_linux_zero.hpp (atomic_copy64): Use ldrexd for atomic reads
Alex Kashchenko d6f9d06
	on ARMv7.
Alex Kashchenko d6f9d06
Alex Kashchenko d6f9d06
diff --git openjdk.orig/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.hpp openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.hpp
Alex Kashchenko d6f9d06
--- openjdk.orig/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.hpp
Alex Kashchenko d6f9d06
+++ openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.hpp
Alex Kashchenko d6f9d06
@@ -54,6 +54,12 @@
Alex Kashchenko af80df1
                   "std %0, %1\n"
Alex Kashchenko af80df1
                   : "=&f"(tmp), "=Q"(*(volatile double*)dst)
Alex Kashchenko af80df1
                   : "Q"(*(volatile double*)src));
Alex Kashchenko d6f9d06
+#elif defined(__ARM_ARCH_7A__)
Alex Kashchenko d6f9d06
+    jlong tmp;
Alex Kashchenko d6f9d06
+    asm volatile ("ldrexd  %0, [%1]\n"
Alex Kashchenko d6f9d06
+                  : "=r"(tmp)
Alex Kashchenko d6f9d06
+                  : "r"(src), "m"(src));
Alex Kashchenko d6f9d06
+    *(jlong *) dst = tmp;
Alex Kashchenko d6f9d06
 #else
Alex Kashchenko d6f9d06
     *(jlong *) dst = *(jlong *) src;
Alex Kashchenko d6f9d06
 #endif