summaryrefslogtreecommitdiff
path: root/deskutils/lightning/files/patch-mozilla-js-src-jslock.cpp
blob: c1a29f393d1843aa68d236be9519e3a5da4e8fa3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
--- mozilla/js/src/jslock.cpp.orig	2010-01-23 15:40:12.000000000 +0100
+++ mozilla/js/src/jslock.cpp	2010-01-23 15:45:20.000000000 +0100
@@ -133,7 +133,7 @@
     return (int)res;
 }
 
-#elif defined(SOLARIS) && defined(sparc) && defined(ULTRA_SPARC)
+#elif defined(__sparc)
 
 static JS_ALWAYS_INLINE int
 NativeCompareAndSwap(jsword *w, jsword ov, jsword nv)
@@ -142,13 +142,18 @@
     unsigned int res;
     JS_ASSERT(ov != nv);
     asm volatile ("\
-stbar\n\
-cas [%1],%2,%3\n\
-cmp %2,%3\n\
-be,a 1f\n\
-mov 1,%0\n\
-mov 0,%0\n\
-1:"
+                  membar #StoreLoad | #LoadLoad\n"
+#                 if defined (__sparc64__)
+                    "casx [%1],%2,%3\n"
+#                 else
+                    "cas [%1],%2,%3\n" /* 32-bit version */
+#                 endif
+                  "membar #StoreLoad | #LoadLoad\n"
+                  "cmp %2,%3\n"
+                  "be,a 1f\n"
+                  "mov 1,%0\n"
+                  "mov 0,%0\n"
+                  "1:"
                   : "=r" (res)
                   : "r" (w), "r" (ov), "r" (nv));
     return (int)res;