From 5053bdf8341e2af288d18c4fd07eb216d6732879 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Sun, 9 Feb 2003 03:23:13 +0000 Subject: [PATCH] atomicity.h (__Atomicity_lock<__inst>::_S_atomicity_lock): Correct alignment. * hppa/atomicity.h (__Atomicity_lock<__inst>::_S_atomicity_lock): Correct alignment. (__exchange_and_add, __atomic_add): Use PA 2.0 ordered store to reset lock. From-SVN: r62593 --- libstdc++-v3/ChangeLog | 7 +++++++ libstdc++-v3/config/cpu/hppa/atomicity.h | 15 +++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 588d23dec30..703000de407 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2003-02-08 John David Anglin + + * hppa/atomicity.h (__Atomicity_lock<__inst>::_S_atomicity_lock): + Correct alignment. + (__exchange_and_add, __atomic_add): Use PA 2.0 ordered store to reset + lock. + 2003-02-07 Paolo Carlini * testsuite/27_io/filebuf_virtuals.cc (test08): Fix for diff --git a/libstdc++-v3/config/cpu/hppa/atomicity.h b/libstdc++-v3/config/cpu/hppa/atomicity.h index eefb32d4a8e..d99ac34d0b3 100644 --- a/libstdc++-v3/config/cpu/hppa/atomicity.h +++ b/libstdc++-v3/config/cpu/hppa/atomicity.h @@ -25,11 +25,12 @@ typedef int _Atomic_word; template struct __Atomicity_lock { - static volatile int __attribute__ ((aligned (16))) _S_atomicity_lock; + static volatile int _S_atomicity_lock; }; template -volatile int __Atomicity_lock<__inst>::_S_atomicity_lock = 1; +volatile int +__Atomicity_lock<__inst>::_S_atomicity_lock __attribute__ ((aligned (16))) = 1; /* Because of the lack of weak support when using the hpux som linker, we explicitly instantiate the atomicity lock @@ -58,8 +59,9 @@ __exchange_and_add (volatile _Atomic_word* __mem, int __val) result = *__mem; *__mem = result + __val; - __asm__ __volatile__(""); - lock = tmp; + /* Reset lock with PA 2.0 "ordered" store. */ + __asm__ __volatile__ ("stw,ma %1,0(%0)" + : : "r" (&lock), "r" (tmp) : "memory"); return result; } @@ -80,8 +82,9 @@ __atomic_add (_Atomic_word* __mem, int __val) : "r" (&lock)); *__mem += __val; - __asm__ __volatile__(""); - lock = tmp; + /* Reset lock with PA 2.0 "ordered" store. */ + __asm__ __volatile__ ("stw,ma %1,0(%0)" + : : "r" (&lock), "r" (tmp) : "memory"); } #endif