aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/config/cpu
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2005-05-25 09:25:25 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2005-05-25 09:25:25 +0000
commit5bf6892e61eee174c1ceabb561a9cd0b1b6b1c1f (patch)
treef1cabe68634621feb1b63697e0c065713bffe477 /libstdc++-v3/config/cpu
parent38fc66bac77d6b63669e89f41c05b7cca8576d15 (diff)
downloadgcc-5bf6892e61eee174c1ceabb561a9cd0b1b6b1c1f.zip
gcc-5bf6892e61eee174c1ceabb561a9cd0b1b6b1c1f.tar.gz
gcc-5bf6892e61eee174c1ceabb561a9cd0b1b6b1c1f.tar.bz2
atomicity.h: Use the builtins for atomic memory operations.
2005-05-25 Paolo Carlini <pcarlini@suse.de> * config/cpu/alpha/atomicity.h: Use the builtins for atomic memory operations. * config/cpu/powerpc/atomicity.h: Likewise. * config/cpu/ia64/atomicity.h: Do not include ia64intrin.h. From-SVN: r100139
Diffstat (limited to 'libstdc++-v3/config/cpu')
-rw-r--r--libstdc++-v3/config/cpu/alpha/atomicity.h38
-rw-r--r--libstdc++-v3/config/cpu/ia64/atomicity.h4
-rw-r--r--libstdc++-v3/config/cpu/powerpc/atomicity.h40
3 files changed, 10 insertions, 72 deletions
diff --git a/libstdc++-v3/config/cpu/alpha/atomicity.h b/libstdc++-v3/config/cpu/alpha/atomicity.h
index 4eb311b..24a4feb 100644
--- a/libstdc++-v3/config/cpu/alpha/atomicity.h
+++ b/libstdc++-v3/config/cpu/alpha/atomicity.h
@@ -1,6 +1,7 @@
// Low-level functions for atomic operations: Alpha version -*- C++ -*-
-// Copyright (C) 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005
+// 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
@@ -29,47 +30,16 @@
#include <bits/atomicity.h>
-/* @@@ With gas we can play nice .subsection games to get the
- non-predicted branch pointing forward. But Digital assemblers
- don't understand those directives. This isn't a terribly
- important issue, so just ignore it. */
-
namespace __gnu_cxx
{
_Atomic_word
__attribute__ ((__unused__))
__exchange_and_add(volatile _Atomic_word* __mem, int __val)
- {
- register int __result, __tmp;
-
- __asm__ __volatile__ (
- "\n$Lxadd_%=:\n\t"
- "ldl_l %0,%3\n\t"
- "addl %0,%4,%1\n\t"
- "stl_c %1,%2\n\t"
- "beq %1,$Lxadd_%=\n\t"
- "mb"
- : "=&r"(__result), "=&r"(__tmp), "=m"(*__mem)
- : "m" (*__mem), "r"(__val));
-
- return __result;
- }
+ { return __sync_fetch_and_add(__mem, __val); }
void
__attribute__ ((__unused__))
__atomic_add(volatile _Atomic_word* __mem, int __val)
- {
- register _Atomic_word __result;
-
- __asm__ __volatile__ (
- "\n$Ladd_%=:\n\t"
- "ldl_l %0,%2\n\t"
- "addl %0,%3,%0\n\t"
- "stl_c %0,%1\n\t"
- "beq %0,$Ladd_%=\n\t"
- "mb"
- : "=&r"(__result), "=m"(*__mem)
- : "m" (*__mem), "r"(__val));
- }
+ { __sync_fetch_and_add(__mem, __val); }
} // namespace __gnu_cxx
diff --git a/libstdc++-v3/config/cpu/ia64/atomicity.h b/libstdc++-v3/config/cpu/ia64/atomicity.h
index 0c3ab33..c651b84 100644
--- a/libstdc++-v3/config/cpu/ia64/atomicity.h
+++ b/libstdc++-v3/config/cpu/ia64/atomicity.h
@@ -1,6 +1,7 @@
// Low-level functions for atomic operations: IA64 version -*- C++ -*-
-// Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2003, 2004, 2005
+// 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
@@ -28,7 +29,6 @@
// the GNU General Public License.
#include <bits/atomicity.h>
-#include <ia64intrin.h>
namespace __gnu_cxx
{
diff --git a/libstdc++-v3/config/cpu/powerpc/atomicity.h b/libstdc++-v3/config/cpu/powerpc/atomicity.h
index 7314944..d3e1e74 100644
--- a/libstdc++-v3/config/cpu/powerpc/atomicity.h
+++ b/libstdc++-v3/config/cpu/powerpc/atomicity.h
@@ -1,6 +1,7 @@
// Low-level functions for atomic operations: PowerPC version -*- C++ -*-
-// Copyright (C) 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005
+// 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
@@ -29,48 +30,15 @@
#include <bits/atomicity.h>
-#ifdef __PPC405__
-#define _STWCX "sync \n\tstwcx. "
-#else
-#define _STWCX "stwcx. "
-#endif
-
namespace __gnu_cxx
{
_Atomic_word
__attribute__ ((__unused__))
__exchange_and_add(volatile _Atomic_word* __mem, int __val)
- {
- _Atomic_word __tmp, __res;
- __asm__ __volatile__ (
- "/* Inline exchange & add */\n"
- "0:\t"
- "lwarx %0,0,%3 \n\t"
- "add%I4 %1,%0,%4 \n\t"
- _STWCX " %1,0,%3 \n\t"
- "bne- 0b \n\t"
- "/* End exchange & add */"
- : "=&b"(__res), "=&r"(__tmp), "=m" (*__mem)
- : "r" (__mem), "Ir"(__val), "m" (*__mem)
- : "cr0");
- return __res;
- }
+ { return __sync_fetch_and_add(__mem, __val); }
void
__attribute__ ((__unused__))
__atomic_add(volatile _Atomic_word* __mem, int __val)
- {
- _Atomic_word __tmp;
- __asm__ __volatile__ (
- "/* Inline atomic add */\n"
- "0:\t"
- "lwarx %0,0,%2 \n\t"
- "add%I3 %0,%0,%3 \n\t"
- _STWCX " %0,0,%2 \n\t"
- "bne- 0b \n\t"
- "/* End atomic add */"
- : "=&b"(__tmp), "=m" (*__mem)
- : "r" (__mem), "Ir"(__val), "m" (*__mem)
- : "cr0");
- }
+ { __sync_fetch_and_add(__mem, __val); }
} // namespace __gnu_cxx