diff options
| author | Olivier Houchard <cognet@FreeBSD.org> | 2005-05-24 21:42:31 +0000 |
|---|---|---|
| committer | Olivier Houchard <cognet@FreeBSD.org> | 2005-05-24 21:42:31 +0000 |
| commit | fa7e20fdd44dffaeddbd7d277ccc6d2133bd1c75 (patch) | |
| tree | 12f091eb261568049595ae9b7ac55b6b1b921927 /sys/arm/include | |
| parent | 6ffb8d33c70c67e297f0e5bf6c90ea63485cd02a (diff) | |
Notes
Diffstat (limited to 'sys/arm/include')
| -rw-r--r-- | sys/arm/include/atomic.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/arm/include/atomic.h b/sys/arm/include/atomic.h index e44a25cf5c32..30f0fcd8bc1c 100644 --- a/sys/arm/include/atomic.h +++ b/sys/arm/include/atomic.h @@ -143,6 +143,8 @@ atomic_cmpset_32(volatile u_int32_t *p, volatile u_int32_t cmpval, volatile u_in "cmp %1, %3\n" "streq %4, [%2]\n" "2:\n" + "mov %1, #0\n" + "str %1, [%0]\n" "moveq %1, #1\n" "movne %1, #0\n" : "=r" (ras_start), "=r" (done) @@ -166,6 +168,8 @@ atomic_add_32(volatile u_int32_t *p, u_int32_t val) "add %1, %1, %3\n" "str %1, [%2]\n" "2:\n" + "mov %1, #0\n" + "str %1, [%0]\n" : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val)); } @@ -185,6 +189,9 @@ atomic_subtract_32(volatile u_int32_t *p, u_int32_t val) "sub %1, %1, %3\n" "str %1, [%2]\n" "2:\n" + "mov %1, #0\n" + "str %1, [%0]\n" + : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val)); } @@ -204,6 +211,9 @@ atomic_set_32(volatile uint32_t *address, uint32_t setmask) "orr %1, %1, %3\n" "str %1, [%2]\n" "2:\n" + "mov %1, #0\n" + "str %1, [%0]\n" + : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (setmask)); } @@ -223,6 +233,8 @@ atomic_clear_32(volatile uint32_t *address, uint32_t clearmask) "bic %1, %1, %3\n" "str %1, [%2]\n" "2:\n" + "mov %1, #0\n" + "str %1, [%0]\n" : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (clearmask)); } |
