diff options
author | buzbee <buzbee@google.com> | 2011-09-27 11:47:28 -0700 |
---|---|---|
committer | buzbee <buzbee@google.com> | 2011-09-27 16:59:35 -0700 |
commit | 4185972e211b0c84b9fe7d90c56b28cc15e474fa (patch) | |
tree | 8182adea9ecc6ec9fa00a0291313340f94959e9c /vm/Atomic.h | |
parent | 927765c9a80a730d73bd40e2ef60ccaa01652449 (diff) | |
download | android_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.h | 9 |
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); |