diff options
author | Paolo Carlini <pcarlini@suse.de> | 2005-05-25 09:25:25 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2005-05-25 09:25:25 +0000 |
commit | 5bf6892e61eee174c1ceabb561a9cd0b1b6b1c1f (patch) | |
tree | f1cabe68634621feb1b63697e0c065713bffe477 /libstdc++-v3/config/cpu | |
parent | 38fc66bac77d6b63669e89f41c05b7cca8576d15 (diff) | |
download | gcc-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.h | 38 | ||||
-rw-r--r-- | libstdc++-v3/config/cpu/ia64/atomicity.h | 4 | ||||
-rw-r--r-- | libstdc++-v3/config/cpu/powerpc/atomicity.h | 40 |
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 |