summaryrefslogtreecommitdiffstats
path: root/vm/Atomic.h
diff options
context:
space:
mode:
authorbuzbee <buzbee@google.com>2011-09-27 11:47:28 -0700
committerbuzbee <buzbee@google.com>2011-09-27 16:59:35 -0700
commit4185972e211b0c84b9fe7d90c56b28cc15e474fa (patch)
tree8182adea9ecc6ec9fa00a0291313340f94959e9c /vm/Atomic.h
parent927765c9a80a730d73bd40e2ef60ccaa01652449 (diff)
downloadandroid_dalvik-4185972e211b0c84b9fe7d90c56b28cc15e474fa.tar.gz
android_dalvik-4185972e211b0c84b9fe7d90c56b28cc15e474fa.tar.bz2
android_dalvik-4185972e211b0c84b9fe7d90c56b28cc15e474fa.zip
Fix memory barriers (Issue 3338450)
Add extra memory barrier on volatile stores. Change-Id: Id4a4750cdfc910eda2f0b44ead0af2a569b5735e
Diffstat (limited to 'vm/Atomic.h')
-rw-r--r--vm/Atomic.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/vm/Atomic.h b/vm/Atomic.h
index c7e965fb0..6f7100ba0 100644
--- a/vm/Atomic.h
+++ b/vm/Atomic.h
@@ -31,7 +31,7 @@
* quasiatomic operations that are performed on partially-overlapping
* memory.
*
- * None of these provide a memory barrier.
+ * Only the "Sync" versions of these provide a memory barrier.
*/
/*
@@ -41,6 +41,13 @@
extern "C" int64_t dvmQuasiAtomicSwap64(int64_t value, volatile int64_t* addr);
/*
+ * Swap the 64-bit value at "addr" with "value". Returns the previous
+ * value. Provides memory barriers.
+ */
+extern "C" int64_t dvmQuasiAtomicSwap64Sync(int64_t value,
+ volatile int64_t* addr);
+
+/*
* Read the 64-bit value at "addr".
*/
extern "C" int64_t dvmQuasiAtomicRead64(volatile const int64_t* addr);