diff options
Diffstat (limited to 'libstdc++-v3/config/cpu/alpha/atomicity.h')
-rw-r--r-- | libstdc++-v3/config/cpu/alpha/atomicity.h | 38 |
1 files changed, 4 insertions, 34 deletions
diff --git a/libstdc++-v3/config/cpu/alpha/atomicity.h b/libstdc++-v3/config/cpu/alpha/atomicity.h index 4eb311b509a..24a4feb1b64 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 |