Vhex-kernel/src/kernel/util/atomic.s

28 lines
582 B
ArmAsm

.global _atomic_start
.global _atomic_end
.type _atomic_start, @function
.type _atomic_end, @function
.align 2
_atomic_start:
stc sr, r1 ! Get SR register.
mov.l .bl_mask, r0 ! Get SR.BL mask.
or r0, r1 ! Set SR.BL to 1.
ldc r1, sr ! Update SR register.
rts ! Exit.
nop ! (db) nop.
_atomic_end:
stc sr, r1 ! Get SR regiter.
mov.l .bl_mask, r0 ! Get SR.BL register.
not r0, r0 ! Get correct mask to remove the SR.BL bit.
and r0, r1 ! Set SR.BL to 0.
ldc r1, sr ! Update SR register.
rts ! Exit.
nop ! (db) nop.
.align 4
.bl_mask: .long (1 << 28)
.end