From aff202aef66aa82d7a4fb85dab26e6a48ac2952d Mon Sep 17 00:00:00 2001 From: hp Date: Mon, 22 Mar 2004 01:37:04 +0000 Subject: [PATCH] * config/cpu/cris/atomicity.h (__atomic_add): Remove "static inline" and attribute-unused. Qualify parameter __mem with "volatile". (__exchange_and_add): Ditto. Add back memory clobber to asm. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79804 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 7 +++++++ libstdc++-v3/config/cpu/cris/atomicity.h | 20 ++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 7012113bc94..62c0534484b 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2004-03-22 Hans-Peter Nilsson + + * config/cpu/cris/atomicity.h (__atomic_add): Remove "static + inline" and attribute-unused. Qualify parameter __mem with + "volatile". + (__exchange_and_add): Ditto. Add back memory clobber to asm. + 2004-03-20 Paolo Carlini * testsuite/27_io/basic_istream/extractors_arithmetic/char/2.cc: diff --git a/libstdc++-v3/config/cpu/cris/atomicity.h b/libstdc++-v3/config/cpu/cris/atomicity.h index 965e0da6ea0..3162f6ada3b 100644 --- a/libstdc++-v3/config/cpu/cris/atomicity.h +++ b/libstdc++-v3/config/cpu/cris/atomicity.h @@ -31,9 +31,8 @@ namespace __gnu_cxx { - static inline _Atomic_word - __attribute__ ((__unused__)) - __exchange_and_add(_Atomic_word* __mem, int __val) + _Atomic_word + __exchange_and_add(volatile _Atomic_word* __mem, int __val) { int __tmp; _Atomic_word __result; @@ -49,9 +48,12 @@ namespace __gnu_cxx " bwf 0b \n" " clearf \n" : "=&r" (__result), "=m" (*__mem), "=&r" (__tmp) - : "r" (__mem), "g" (__val), "m" (*__mem)); + : "r" (__mem), "g" (__val), "m" (*__mem) + /* The memory clobber must stay, regardless of + current uses of this function. */ + : "memory"); #else - __asm__ __volatile__ (" move $ccr,$r9 \n" + __asm__ __volatile__ (" move $ccr,$r9 \n" " di \n" " move.d %4,%2 \n" " move.d [%3],%0 \n" @@ -60,14 +62,16 @@ namespace __gnu_cxx " move $r9,$ccr \n" : "=&r" (__result), "=m" (*__mem), "=&r" (__tmp) : "r" (__mem), "g" (__val), "m" (*__mem) - : "r9"); + : "r9", + /* The memory clobber must stay, regardless of + current uses of this function. */ + "memory"); #endif return __result; } void - __attribute__ ((__unused__)) - __atomic_add(_Atomic_word* __mem, int __val) + __atomic_add(volatile _Atomic_word* __mem, int __val) { __exchange_and_add(__mem, __val); } } // namespace __gnu_cxx -- 2.11.0