44 lines
968 B
ArmAsm
44 lines
968 B
ArmAsm
.thumb
|
|
.syntax unified
|
|
|
|
.text
|
|
|
|
.globl atomic_inc32
|
|
.type atomic_inc32, %function
|
|
|
|
atomic_inc32:
|
|
1: ldrex r2, [r0]
|
|
add r2, r2, r1
|
|
strex r3, r2, [r0]
|
|
teq r3, #0
|
|
bne 1b
|
|
mov r0, r2
|
|
bx lr
|
|
|
|
|
|
.globl atomic_dec32
|
|
.type atomic_dec32, %function
|
|
|
|
atomic_dec32:
|
|
1: ldrex r2, [r0]
|
|
sub r2, r2, r1
|
|
strex r3, r2, [r0]
|
|
teq r3, #0
|
|
bne 1b
|
|
mov r0, r2
|
|
bx lr
|
|
|
|
.globl atomic_dec32le0
|
|
.type atomic_dec32le0, %function
|
|
|
|
atomic_dec32le0:
|
|
1: ldrex r2, [r0]
|
|
cmp r2, #0
|
|
ble 1b
|
|
sub r2, r2, r1
|
|
strex r3, r2, [r0]
|
|
teq r3, #0
|
|
bne 1b
|
|
mov r0, r2
|
|
bx lr
|