Deleted Added
full compact
atomic-v4.h (148453) atomic-v4.h (150627)
1/* $NetBSD: atomic.h,v 1.1 2002/10/19 12:22:34 bsh Exp $ */
2
3/*-
4 * Copyright (C) 2003-2004 Olivier Houchard
5 * Copyright (C) 1994-1997 Mark Brinicombe
6 * Copyright (C) 1994 Brini
7 * All rights reserved.
8 *

--- 19 unchanged lines hidden (view full) ---

28 * IN NO EVENT SHALL BRINI BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
31 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
32 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
33 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
34 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 *
1/* $NetBSD: atomic.h,v 1.1 2002/10/19 12:22:34 bsh Exp $ */
2
3/*-
4 * Copyright (C) 2003-2004 Olivier Houchard
5 * Copyright (C) 1994-1997 Mark Brinicombe
6 * Copyright (C) 1994 Brini
7 * All rights reserved.
8 *

--- 19 unchanged lines hidden (view full) ---

28 * IN NO EVENT SHALL BRINI BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
31 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
32 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
33 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
34 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 *
36 * $FreeBSD: head/sys/arm/include/atomic.h 148453 2005-07-27 20:01:45Z jhb $
36 * $FreeBSD: head/sys/arm/include/atomic.h 150627 2005-09-27 17:39:11Z jhb $
37 */
38
39#ifndef _MACHINE_ATOMIC_H_
40#define _MACHINE_ATOMIC_H_
41
42
43
44#ifndef _LOCORE

--- 77 unchanged lines hidden (view full) ---

122}
123
124static __inline void
125atomic_subtract_32(volatile u_int32_t *p, u_int32_t val)
126{
127 __with_interrupts_disabled(*p -= val);
128}
129
37 */
38
39#ifndef _MACHINE_ATOMIC_H_
40#define _MACHINE_ATOMIC_H_
41
42
43
44#ifndef _LOCORE

--- 77 unchanged lines hidden (view full) ---

122}
123
124static __inline void
125atomic_subtract_32(volatile u_int32_t *p, u_int32_t val)
126{
127 __with_interrupts_disabled(*p -= val);
128}
129
130static __inline uint32_t
131atomic_fetchadd_32(volatile uint32_t *p, uint32_t v)
132{
133 uint32_t value;
134
135 __with_interrupts_disabled(
136 {
137 value = *p;
138 *p += v;
139 });
140 return (value);
141}
142
130#else /* !_KERNEL */
131
132static __inline u_int32_t
133atomic_cmpset_32(volatile u_int32_t *p, volatile u_int32_t cmpval, volatile u_int32_t newval)
134{
135 register int done, ras_start;
136
137 __asm __volatile("1:\n"

--- 97 unchanged lines hidden (view full) ---

235 "bic %1, %1, %3\n"
236 "str %1, [%2]\n"
237 "2:\n"
238 "mov %1, #0\n"
239 "str %1, [%0]\n"
240 : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (clearmask));
241
242}
143#else /* !_KERNEL */
144
145static __inline u_int32_t
146atomic_cmpset_32(volatile u_int32_t *p, volatile u_int32_t cmpval, volatile u_int32_t newval)
147{
148 register int done, ras_start;
149
150 __asm __volatile("1:\n"

--- 97 unchanged lines hidden (view full) ---

248 "bic %1, %1, %3\n"
249 "str %1, [%2]\n"
250 "2:\n"
251 "mov %1, #0\n"
252 "str %1, [%0]\n"
253 : "=r" (ras_start), "=r" (start), "+r" (address), "+r" (clearmask));
254
255}
256
257static __inline uint32_t
258atomic_fetchadd_32(volatile uint32_t *p, uint32_t v)
259{
260 uint32_t ras_start, start;
261
262 __asm __volatile("1:\n"
263 "mov %0, #0xe0000008\n"
264 "adr %1, 2f\n"
265 "str %1, [%0]\n"
266 "adr %1, 1b\n"
267 "mov %0, #0xe0000004\n"
268 "str %1, [%0]\n"
269 "ldr %1, %2\n"
270 "add %3, %1, %3\n"
271 "str %3, %2\n"
272 "2:\n"
273 "mov %3, #0\n"
274 "str %3, [%0]\n"
275 : "=r" (ras_start), "=r" (start), "=m" (*p), "+r" (v));
276 return (start);
277}
278
279
243#endif /* _KERNEL */
244
245static __inline int
246atomic_load_32(volatile uint32_t *v)
247{
248
249 return (*v);
250}

--- 35 unchanged lines hidden (view full) ---

286#define atomic_store_rel_int atomic_store_32
287#define atomic_cmpset_rel_32 atomic_cmpset_32
288#define atomic_cmpset_rel_ptr atomic_cmpset_ptr
289#define atomic_load_acq_int atomic_load_32
290#define atomic_clear_ptr atomic_clear_32
291#define atomic_store_ptr atomic_store_32
292#define atomic_cmpset_ptr atomic_cmpset_32
293#define atomic_set_ptr atomic_set_32
280#endif /* _KERNEL */
281
282static __inline int
283atomic_load_32(volatile uint32_t *v)
284{
285
286 return (*v);
287}

--- 35 unchanged lines hidden (view full) ---

323#define atomic_store_rel_int atomic_store_32
324#define atomic_cmpset_rel_32 atomic_cmpset_32
325#define atomic_cmpset_rel_ptr atomic_cmpset_ptr
326#define atomic_load_acq_int atomic_load_32
327#define atomic_clear_ptr atomic_clear_32
328#define atomic_store_ptr atomic_store_32
329#define atomic_cmpset_ptr atomic_cmpset_32
330#define atomic_set_ptr atomic_set_32
331#define atomic_fetchadd_int atomic_fetchadd_32
294
295#endif /* _MACHINE_ATOMIC_H_ */
332
333#endif /* _MACHINE_ATOMIC_H_ */