]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libstdc++/51798 (libstdc++ atomicity performance regression due to __sync_fetch...
authorJakub Jelinek <jakub@redhat.com>
Fri, 27 Jan 2012 20:26:03 +0000 (21:26 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 27 Jan 2012 20:26:03 +0000 (21:26 +0100)
PR libstdc++/51798
* config/cpu/generic/atomicity_builtins/atomicity.h
(__exchange_and_add, __atomic_add): Use __atomic_fetch_add
with __ATOMIC_ACQ_REL semantics instead of __sync_fetch_and_add.
* include/ext/atomicity.h (__exchange_and_add, __atomic_add):
Likewise.

From-SVN: r183644

libstdc++-v3/ChangeLog
libstdc++-v3/config/cpu/generic/atomicity_builtins/atomicity.h
libstdc++-v3/include/ext/atomicity.h

index 0a455335ad7ef046a4671d32625a17cbcda26069..2dbb665a3458464d3ac1d3d72d082dee8386ca3e 100644 (file)
@@ -1,3 +1,12 @@
+2012-01-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR libstdc++/51798
+       * config/cpu/generic/atomicity_builtins/atomicity.h
+       (__exchange_and_add, __atomic_add): Use __atomic_fetch_add
+       with __ATOMIC_ACQ_REL semantics instead of __sync_fetch_and_add.
+       * include/ext/atomicity.h (__exchange_and_add, __atomic_add):
+       Likewise.
+
 2011-01-27  Rafael Avila de Espindola  <rafael.espindola@gmail.com>
 
        * libsupc++/typeinfo: Correctly match #pragma GCC visibility
index 581c41fda0de9776e1bb97edbacdfb101585c6e8..be3c1ffd9ab67434fb8c7ec186b7a4b13cbad0da 100644 (file)
@@ -1,7 +1,7 @@
 // Low-level functions for atomic operations: version for CPUs providing
 // atomic builtins -*- C++ -*-
 
-// Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2006, 2009, 2010, 2012 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -33,12 +33,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   _Atomic_word 
   __attribute__ ((__unused__))
   __exchange_and_add(volatile _Atomic_word* __mem, int __val) throw ()
-  { return __sync_fetch_and_add(__mem, __val); }
+  { return __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
 
   void
   __attribute__ ((__unused__))
   __atomic_add(volatile _Atomic_word* __mem, int __val) throw ()
-  { __sync_fetch_and_add(__mem, __val); }
+  { __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
index c63b1d463616f037be465be341ca3699914e1ef4..c603063265f9d78d67f72a7539cc1ba7965e8d75 100644 (file)
@@ -1,6 +1,6 @@
 // Support for atomic operations -*- C++ -*-
 
-// Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011
+// Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010, 2011, 2012
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -45,11 +45,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #ifdef _GLIBCXX_ATOMIC_BUILTINS
   static inline _Atomic_word 
   __exchange_and_add(volatile _Atomic_word* __mem, int __val)
-  { return __sync_fetch_and_add(__mem, __val); }
+  { return __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
 
   static inline void
   __atomic_add(volatile _Atomic_word* __mem, int __val)
-  { __sync_fetch_and_add(__mem, __val); }
+  { __atomic_fetch_add(__mem, __val, __ATOMIC_ACQ_REL); }
 #else
   _Atomic_word
   __attribute__ ((__unused__))