diff options
author | Lai Wei-Chih <Robert.Lai@mediatek.com> | 2013-07-31 18:52:30 +0800 |
---|---|---|
committer | Lai Wei-Chih <Robert.Lai@mediatek.com> | 2013-07-31 19:02:11 +0800 |
commit | 066cd5e4615399f4a70b9abaea699f1b62f394b5 (patch) | |
tree | 371192a8cb86d41a19037af48eed2afaff3ead77 | |
parent | 6b032de90cac8b6d3b20ac2310b5aa1e6f2617a1 (diff) | |
download | compiler-rt-066cd5e4615399f4a70b9abaea699f1b62f394b5.tar.gz |
Implement __sync_lock_test_and_set_4.
Change-Id: Ib986df235bd8695ee206880c2c51e33a424912db
-rw-r--r-- | lib/atomic-arm.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/atomic-arm.c b/lib/atomic-arm.c index ad82824d4..13d3b539d 100644 --- a/lib/atomic-arm.c +++ b/lib/atomic-arm.c @@ -311,6 +311,18 @@ uint32_t __sync_val_compare_and_swap_4 (volatile int32_t *ptr, int32_t oldval, i return android_atomic_cas_val(oldval, newval, ptr); } +uint32_t __sync_lock_test_and_set_4 (volatile uint32_t *ptr, uint32_t val) +{ + uint32_t status, prev; + android_memory_barrier(); + do { + prev = *ptr; + status = android_atomic_cas_bool(prev, val, ptr); + } while (__builtin_expect(status != 0, 0)); + + return prev; +} + /* __sync_op_and_fetch functions */ int32_t __sync_add_and_fetch_4(volatile int32_t *ptr, int32_t val) |