xref: /optee_os/lib/libutils/ext/arch/arm/atomic_a64.S (revision 181f84921804f9b8e2d24027eca1d916d6e15a44)
11bb92983SJerome Forissier/* SPDX-License-Identifier: BSD-2-Clause */
2e17dd72aSJens Wiklander/*
3e17dd72aSJens Wiklander * Copyright (c) 2015-2016, Linaro Limited
4e17dd72aSJens Wiklander */
5e17dd72aSJens Wiklander
6e17dd72aSJens Wiklander#include <asm.S>
7e17dd72aSJens Wiklander
8e17dd72aSJens Wiklander
9e17dd72aSJens Wiklander/* uint32_t atomic_inc32(uint32_t *v); */
10e17dd72aSJens WiklanderFUNC atomic_inc32 , :
11e17dd72aSJens Wiklander	ldaxr	w1, [x0]
12e17dd72aSJens Wiklander	add	w1, w1, #1
13e17dd72aSJens Wiklander	stxr	w2, w1, [x0]
14e17dd72aSJens Wiklander	cmp	w2, #0
15e17dd72aSJens Wiklander	bne	atomic_inc32
16e17dd72aSJens Wiklander	mov	w0, w1
17e17dd72aSJens Wiklander	ret
18e17dd72aSJens WiklanderEND_FUNC atomic_inc32
19e17dd72aSJens Wiklander
20e17dd72aSJens Wiklander/* uint32_t atomic_dec32(uint32_t *v); */
21e17dd72aSJens WiklanderFUNC atomic_dec32 , :
22e17dd72aSJens Wiklander	ldaxr	w1, [x0]
23e17dd72aSJens Wiklander	sub	w1, w1, #1
24e17dd72aSJens Wiklander	stxr	w2, w1, [x0]
25e17dd72aSJens Wiklander	cmp	w2, #0
26e17dd72aSJens Wiklander	bne	atomic_dec32
27e17dd72aSJens Wiklander	mov	w0, w1
28e17dd72aSJens Wiklander	ret
29e17dd72aSJens WiklanderEND_FUNC atomic_dec32
30e17dd72aSJens Wiklander
31*181f8492SRuchika GuptaBTI(emit_aarch64_feature_1_and     GNU_PROPERTY_AARCH64_FEATURE_1_BTI)
32