OSDN Git Service

libstdc++/5037
authorljrittle <ljrittle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 Dec 2001 00:59:11 +0000 (00:59 +0000)
committerljrittle <ljrittle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 Dec 2001 00:59:11 +0000 (00:59 +0000)
        * config/cpu/sparc/sparc32/bits/atomicity.h
        (struct __Atomicity_lock<__inst>): Add.
        (__Atomicity_lock<__inst>::_S_atomicity_lock): Add.
        (__exchange_and_add): Use __Atomicity_lock<0>::_S_atomicity_lock
        instead of lock local to static function.
        (__atomic_add): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47782 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/config/cpu/sparc/sparc32/bits/atomicity.h

index 0d14cf9..71848d1 100644 (file)
@@ -1,3 +1,14 @@
+2001-12-07  Nathan Myers  <ncm@cantrip.org>
+           Loren Rittle <ljrittle@acm.org>
+
+       libstdc++/5037
+       * config/cpu/sparc/sparc32/bits/atomicity.h
+       (struct __Atomicity_lock<__inst>): Add.
+       (__Atomicity_lock<__inst>::_S_atomicity_lock): Add.
+       (__exchange_and_add): Use __Atomicity_lock<0>::_S_atomicity_lock
+       instead of lock local to static function.
+       (__atomic_add): Likewise.
+
 2001-12-07  Phil Edwards  <pme@gcc.gnu.org>
 
        * src/globals.cc:  Remove __GTHREADS guard.
index 6f9412c..5254913 100644 (file)
 
 typedef int _Atomic_word;
 
+template <int __inst>
+struct __Atomicity_lock
+{
+  static unsigned char _S_atomicity_lock;
+};
+
+template <int __inst>
+unsigned char __Atomicity_lock<__inst>::_S_atomicity_lock = 0;
+
 static int
 __attribute__ ((__unused__))
 __exchange_and_add (volatile _Atomic_word* __mem, int __val)
 {
-  static unsigned char __lock;
   _Atomic_word __result, __tmp;
 
   __asm__ __volatile__("1:     ldstub  [%1], %0\n\t"
@@ -44,13 +52,13 @@ __exchange_and_add (volatile _Atomic_word* __mem, int __val)
                       "        bne     1b\n\t"
                       "         nop"
                       : "=&r" (__tmp)
-                      : "r" (&__lock)
+                      : "r" (&__Atomicity_lock<0>::_S_atomicity_lock)
                       : "memory");
   __result = *__mem;
   *__mem += __val;
   __asm__ __volatile__("stb    %%g0, [%0]"
                       : /* no outputs */
-                      : "r" (&__lock)
+                      : "r" (&__Atomicity_lock<0>::_S_atomicity_lock)
                       : "memory");
   return __result;
 }
@@ -59,7 +67,6 @@ static void
 __attribute__ ((__unused__))
 __atomic_add (volatile _Atomic_word* __mem, int __val)
 {
-  static unsigned char __lock;
   _Atomic_word __tmp;
 
   __asm__ __volatile__("1:     ldstub  [%1], %0\n\t"
@@ -67,12 +74,12 @@ __atomic_add (volatile _Atomic_word* __mem, int __val)
                       "        bne     1b\n\t"
                       "         nop"
                       : "=&r" (__tmp)
-                      : "r" (&__lock)
+                      : "r" (&__Atomicity_lock<0>::_S_atomicity_lock)
                       : "memory");
   *__mem += __val;
   __asm__ __volatile__("stb    %%g0, [%0]"
                       : /* no outputs */
-                      : "r" (&__lock)
+                      : "r" (&__Atomicity_lock<0>::_S_atomicity_lock)
                       : "memory");
 }