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 8*d9925536SJerome Forissier .section .note.GNU-stack,"",%progbits 9*d9925536SJerome Forissier 10e17dd72aSJens Wiklander/* uint32_t atomic_inc32(uint32_t *v); */ 11e17dd72aSJens WiklanderFUNC atomic_inc32 , : 12e17dd72aSJens Wiklander ldrex r1, [r0] 13e17dd72aSJens Wiklander add r1, r1, #1 14e17dd72aSJens Wiklander strex r2, r1, [r0] 15e17dd72aSJens Wiklander cmp r2, #0 16e17dd72aSJens Wiklander bne atomic_inc32 17e17dd72aSJens Wiklander mov r0, r1 18e17dd72aSJens Wiklander bx lr 19e17dd72aSJens WiklanderEND_FUNC atomic_inc32 20e17dd72aSJens Wiklander 21e17dd72aSJens Wiklander/* uint32_t atomic_dec32(uint32_t *v); */ 22e17dd72aSJens WiklanderFUNC atomic_dec32 , : 23e17dd72aSJens Wiklander ldrex r1, [r0] 24e17dd72aSJens Wiklander sub r1, r1, #1 25e17dd72aSJens Wiklander strex r2, r1, [r0] 26e17dd72aSJens Wiklander cmp r2, #0 27e17dd72aSJens Wiklander bne atomic_dec32 28e17dd72aSJens Wiklander mov r0, r1 29e17dd72aSJens Wiklander bx lr 30e17dd72aSJens WiklanderEND_FUNC atomic_dec32 31