diff options
author | cognet <cognet@FreeBSD.org> | 2006-02-06 18:29:05 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2006-02-06 18:29:05 +0000 |
commit | 0ac58cd215f88d7bd3272bf9917f962346f567e9 (patch) | |
tree | 5ff4e9ca56fb43a3dd4ec22ec85d3317c8f4d7c3 /sys/arm/include | |
parent | 41e16a89f7b9a86d35e3c165afa1a6deef30b6e8 (diff) | |
download | FreeBSD-src-0ac58cd215f88d7bd3272bf9917f962346f567e9.zip FreeBSD-src-0ac58cd215f88d7bd3272bf9917f962346f567e9.tar.gz |
Use memory clobbers, to be on the safe side.
Suggested by: jhb
Diffstat (limited to 'sys/arm/include')
-rw-r--r-- | sys/arm/include/atomic.h | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/sys/arm/include/atomic.h b/sys/arm/include/atomic.h index 9a50b3c..603fd64 100644 --- a/sys/arm/include/atomic.h +++ b/sys/arm/include/atomic.h @@ -163,7 +163,7 @@ atomic_cmpset_32(volatile u_int32_t *p, volatile u_int32_t cmpval, volatile u_in "moveq %1, #1\n" "movne %1, #0\n" : "=r" (ras_start), "=r" (done) - ,"+r" (p), "+r" (cmpval), "+r" (newval)); + ,"+r" (p), "+r" (cmpval), "+r" (newval) : : "memory"); return (done); } @@ -185,7 +185,8 @@ atomic_add_32(volatile u_int32_t *p, u_int32_t val) "2:\n" "mov %1, #0\n" "str %1, [%0]\n" - : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val)); + : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val) + : : "memory"); } static __inline void @@ -207,7 +208,8 @@ atomic_subtract_32(volatile u_int32_t *p, u_int32_t val) "mov %1, #0\n" "str %1, [%0]\n" - : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val)); + : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val) + : : "memory"); } static __inline void @@ -229,7 +231,8 @@ atomic_set_32(volatile uint32_t *address, uint32_t setmask) "mov %1, #0\n" "str %1, [%0]\n" - : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (setmask)); + : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (setmask) + : : "memory"); } static __inline void @@ -250,7 +253,8 @@ atomic_clear_32(volatile uint32_t *address, uint32_t clearmask) "2:\n" "mov %1, #0\n" "str %1, [%0]\n" - : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (clearmask)); + : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (clearmask) + : : "memory"); } @@ -272,7 +276,8 @@ atomic_fetchadd_32(volatile uint32_t *p, uint32_t v) "2:\n" "mov %3, #0\n" "str %3, [%0]\n" - : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (v)); + : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (v) + : : "memory"); return (start); } |