Blob Blame History Raw
diff -up webkitgtk-2.4.10/Source/WTF/wtf/Atomics.h.arm64_gcc webkitgtk-2.4.10/Source/WTF/wtf/Atomics.h
--- webkitgtk-2.4.10/Source/WTF/wtf/Atomics.h.arm64_gcc	2016-04-05 13:17:49.467473861 +0200
+++ webkitgtk-2.4.10/Source/WTF/wtf/Atomics.h	2016-04-05 13:18:00.812429048 +0200
@@ -113,6 +113,20 @@ inline bool weakCompareAndSwap(volatile
         : "r"(expected), "r"(newValue)
         : "memory");
     result = !result;
+#elif CPU(ARM64) && COMPILER(GCC)
+    unsigned tmp;
+    unsigned result;
+    asm volatile(
+        "mov %w1, #1\n\t"
+        "ldxr %w2, [%0]\n\t"
+        "cmp %w3, %w2\n\t"
+        "b.ne 0f\n\t"
+        "stxr %w1, %w4, [%0]\n\t"
+        "0:"
+        : "+r"(location), "=&r"(result), "=&r"(tmp)
+        : "r"(expected), "r"(newValue)
+        : "memory");
+    result = !result;
 #elif CPU(ARM64)
     unsigned tmp;
     unsigned result;
@@ -153,6 +167,20 @@ inline bool weakCompareAndSwap(void*vola
         : "memory"
         );
     return result;
+#elif CPU(ARM64) && COMPILER(GCC)
+    bool result;
+    void* tmp;
+    asm volatile(
+        "mov %w1, #1\n\t"
+        "ldxr %x2, [%0]\n\t"
+        "cmp %x3, %x2\n\t"
+        "b.ne 0f\n\t"
+        "stxr %w1, %x4, [%0]\n\t"
+        "0:"
+        : "+r"(location), "=&r"(result), "=&r"(tmp)
+        : "r"(expected), "r"(newValue)
+        : "memory");
+    return !result;
 #elif CPU(ARM64)
     bool result;
     void* tmp;