xref: /optee_os/lib/libutils/ext/arch/arm/atomic_a32.S (revision 78b7c7c7653f8bff42fe44d31a79d7f6bbfd4d47)
1/* SPDX-License-Identifier: BSD-2-Clause */
2/*
3 * Copyright (c) 2015-2016, Linaro Limited
4 * All rights reserved.
5 */
6
7#include <asm.S>
8
9/* uint32_t atomic_inc32(uint32_t *v); */
10FUNC atomic_inc32 , :
11	ldrex	r1, [r0]
12	add	r1, r1, #1
13	strex	r2, r1, [r0]
14	cmp	r2, #0
15	bne	atomic_inc32
16	mov	r0, r1
17	bx	lr
18END_FUNC atomic_inc32
19
20/* uint32_t atomic_dec32(uint32_t *v); */
21FUNC atomic_dec32 , :
22	ldrex	r1, [r0]
23	sub	r1, r1, #1
24	strex	r2, r1, [r0]
25	cmp	r2, #0
26	bne	atomic_dec32
27	mov	r0, r1
28	bx	lr
29END_FUNC atomic_dec32
30