diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-09-16 15:47:21 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-09-16 15:47:21 +0000 |
commit | adb0401dac41c81571722312d4586b2693f95aa6 (patch) | |
tree | ea2b52e3c258d6b6d9356977c683c7f72a4a5fd5 /libgo/go/sync/atomic/atomic.c | |
parent | 5548ca3540bccbc908a45942896d635ea5f1c23f (diff) | |
download | gcc-adb0401dac41c81571722312d4586b2693f95aa6.tar.gz |
Update Go library to r60.
From-SVN: r178910
Diffstat (limited to 'libgo/go/sync/atomic/atomic.c')
-rw-r--r-- | libgo/go/sync/atomic/atomic.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/libgo/go/sync/atomic/atomic.c b/libgo/go/sync/atomic/atomic.c index e2d9b242fbd..6660a7d4a91 100644 --- a/libgo/go/sync/atomic/atomic.c +++ b/libgo/go/sync/atomic/atomic.c @@ -95,3 +95,31 @@ AddUintptr (uintptr_t *val, uintptr_t delta) { return __sync_add_and_fetch (val, delta); } + +int32_t LoadInt32 (int32_t *addr) + asm ("libgo_sync.atomic.LoadInt32"); + +int32_t +LoadInt32 (int32_t *addr) +{ + int32_t v; + + v = *addr; + while (! __sync_bool_compare_and_swap (addr, v, v)) + v = *addr; + return v; +} + +uint32_t LoadUint32 (uint32_t *addr) + asm ("libgo_sync.atomic.LoadUint32"); + +uint32_t +LoadUint32 (uint32_t *addr) +{ + uint32_t v; + + v = *addr; + while (! __sync_bool_compare_and_swap (addr, v, v)) + v = *addr; + return v; +} |