diff options
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | 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 7012113..62c0534 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2004-03-22 Hans-Peter Nilsson <hp@axis.com> + + * 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 <pcarlini@suse.de> * 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 965e0da..3162f6a 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 |