diff options
author | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-02-09 03:23:13 +0000 |
---|---|---|
committer | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-02-09 03:23:13 +0000 |
commit | b717879b20e0d5ea2cbf8da1808b8865fd6b06c9 (patch) | |
tree | 6b966d3e9a21eb917ad886cde79105cdae4c9675 /libstdc++-v3 | |
parent | 9b791adb3b9983341d5f211d2e76d7b53800b1af (diff) | |
download | gcc-b717879b20e0d5ea2cbf8da1808b8865fd6b06c9.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62593 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | 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 <dave.anglin@nrc-cnrc.gc.ca> + + * 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 <pcarlini@unitus.it> * 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 <int __inst> struct __Atomicity_lock { - static volatile int __attribute__ ((aligned (16))) _S_atomicity_lock; + static volatile int _S_atomicity_lock; }; template <int __inst> -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 |