summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>2003-02-09 03:23:13 +0000
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>2003-02-09 03:23:13 +0000
commitb717879b20e0d5ea2cbf8da1808b8865fd6b06c9 (patch)
tree6b966d3e9a21eb917ad886cde79105cdae4c9675 /libstdc++-v3
parent9b791adb3b9983341d5f211d2e76d7b53800b1af (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--libstdc++-v3/config/cpu/hppa/atomicity.h15
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