28 lines
582 B
ArmAsm
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
|