summaryrefslogtreecommitdiffstats
path: root/sys/arm/include
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2006-02-05 22:06:12 +0000
committercognet <cognet@FreeBSD.org>2006-02-05 22:06:12 +0000
commit2d37c104efb23f565a4e87f30b758879c781c7b5 (patch)
tree09aeb9222ec6e25aed878a6e6dc243ce8a93346a /sys/arm/include
parent4cd971d35d0224553926d1a325da1e80421fafc1 (diff)
downloadFreeBSD-src-2d37c104efb23f565a4e87f30b758879c781c7b5.zip
FreeBSD-src-2d37c104efb23f565a4e87f30b758879c781c7b5.tar.gz
Backout rev 1.12. It would have been a good thing, if gcc was smart enough
not to generate bad code.
Diffstat (limited to 'sys/arm/include')
-rw-r--r--sys/arm/include/atomic.h42
1 files changed, 18 insertions, 24 deletions
diff --git a/sys/arm/include/atomic.h b/sys/arm/include/atomic.h
index aae130a..9a50b3c 100644
--- a/sys/arm/include/atomic.h
+++ b/sys/arm/include/atomic.h
@@ -154,17 +154,16 @@ atomic_cmpset_32(volatile u_int32_t *p, volatile u_int32_t cmpval, volatile u_in
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, %2\n"
+ "ldr %1, [%2]\n"
"cmp %1, %3\n"
- "streq %4, %2\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)
- ,"=m" (*p), "+r" (cmpval), "+r" (newval)
- : "m" (*p));
+ ,"+r" (p), "+r" (cmpval), "+r" (newval));
return (done);
}
@@ -180,14 +179,13 @@ atomic_add_32(volatile u_int32_t *p, u_int32_t val)
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, %2\n"
+ "ldr %1, [%2]\n"
"add %1, %1, %3\n"
- "str %1, %2\n"
+ "str %1, [%2]\n"
"2:\n"
"mov %1, #0\n"
"str %1, [%0]\n"
- : "=r" (ras_start), "=r" (start), "=m" (*p), "+r" (val)
- : "m" (*p));
+ : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val));
}
static __inline void
@@ -202,15 +200,14 @@ atomic_subtract_32(volatile u_int32_t *p, u_int32_t val)
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, %2\n"
+ "ldr %1, [%2]\n"
"sub %1, %1, %3\n"
- "str %1, %2\n"
+ "str %1, [%2]\n"
"2:\n"
"mov %1, #0\n"
"str %1, [%0]\n"
- : "=r" (ras_start), "=r" (start), "=m" (*p), "+r" (val)
- : "m" (*p));
+ : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (val));
}
static __inline void
@@ -225,15 +222,14 @@ atomic_set_32(volatile uint32_t *address, uint32_t setmask)
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, %2\n"
+ "ldr %1, [%2]\n"
"orr %1, %1, %3\n"
- "str %1, %2\n"
+ "str %1, [%2]\n"
"2:\n"
"mov %1, #0\n"
"str %1, [%0]\n"
- : "=r" (ras_start), "=r" (start), "=m" (*address), "+r" (setmask)
- : "m" (*address));
+ : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (setmask));
}
static __inline void
@@ -248,14 +244,13 @@ atomic_clear_32(volatile uint32_t *address, uint32_t clearmask)
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, %2\n"
+ "ldr %1, [%2]\n"
"bic %1, %1, %3\n"
- "str %1, %2\n"
+ "str %1, [%2]\n"
"2:\n"
"mov %1, #0\n"
"str %1, [%0]\n"
- : "=r" (ras_start), "=r" (start), "=m" (*address), "+r" (clearmask)
- : "m" (*address));
+ : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (clearmask));
}
@@ -271,14 +266,13 @@ atomic_fetchadd_32(volatile uint32_t *p, uint32_t v)
"adr %1, 1b\n"
"mov %0, #0xe0000004\n"
"str %1, [%0]\n"
- "ldr %1, %2\n"
+ "ldr %1, [%2]\n"
"add %3, %1, %3\n"
- "str %3, %2\n"
+ "str %3, [%2]\n"
"2:\n"
"mov %3, #0\n"
"str %3, [%0]\n"
- : "=r" (ras_start), "=r" (start), "=m" (*p), "+r" (v)
- : "m" (*p));
+ : "=r" (ras_start), "=r" (start), "+r" (p), "+r" (v));
return (start);
}
OpenPOWER on IntegriCloud