Update sysdep/sh/locks.h with atomic builtins
authorKaz Kojima <kkojima@gcc.gnu.org>
Thu, 14 Jun 2012 22:58:05 +0000 (22:58 +0000)
committerKaz Kojima <kkojima@gcc.gnu.org>
Thu, 14 Jun 2012 22:58:05 +0000 (22:58 +0000)
Update sysdep/sh/locks.h with atomic builtins
* sysdep/sh/locks.h (__cas_lock): Remove.
(__cas_start_atomic, __cas_end_atomic): Likewise.
(compare_and_swap): Call __sync_bool_compare_and_swap.

From-SVN: r188640

libjava/ChangeLog
libjava/sysdep/sh/locks.h

index e95c659e2e0a2f277a1334ac989c3617167d2897..9f7d38fa2109dbb7f4108ad680901811c355616a 100644 (file)
@@ -1,3 +1,9 @@
+2012-06-14  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       * sysdep/sh/locks.h (__cas_lock): Remove.
+       (__cas_start_atomic, __cas_end_atomic): Likewise.
+       (compare_and_swap): Call __sync_bool_compare_and_swap.
+
 2012-05-21  Benjamin Kosnik  <bkoz@redhat.com>
 
        PR libstdc++/52700
index 9a152fb30e58c7159c98556ce92e637bde4479c2..727c3aa879ccd4f83389346ec4e6ea005d74ce18 100644 (file)
@@ -14,45 +14,11 @@ details.  */
 typedef size_t obj_addr_t;     /* Integer type big enough for object   */
                                /* address.                             */
 
-static unsigned char __cas_lock = 0;
-
-inline static void
-__cas_start_atomic (void)
-{
-  unsigned int val;
-
-  do
-    __asm__ __volatile__ ("tas.b @%1; movt %0"
-                         : "=r" (val)
-                         : "r" (&__cas_lock)
-                         : "memory");
-  while (val == 0);
-}
-
-inline static void
-__cas_end_atomic (void)
-{
-  __asm__ __volatile__ (" " : : : "memory");
-  __cas_lock = 0;
-}
-
 inline static bool
 compare_and_swap (volatile obj_addr_t *addr, obj_addr_t old,
                  obj_addr_t new_val)
 {
-  bool ret;
-
-  __cas_start_atomic ();
-  if (*addr != old)
-    ret = false;
-  else
-    {
-      *addr = new_val;
-      ret = true;
-    }
-  __cas_end_atomic ();
-
-  return ret;
+  return __sync_bool_compare_and_swap (addr, old, new_val);
 }
 
 inline static void