| Index: fusl/arch/arm/src/arm/atomics.s
|
| diff --git a/fusl/arch/arm/src/arm/atomics.s b/fusl/arch/arm/src/arm/atomics.s
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5c5b0e3ed481ee6f78a97509bb7892acac27b1e6
|
| --- /dev/null
|
| +++ b/fusl/arch/arm/src/arm/atomics.s
|
| @@ -0,0 +1,111 @@
|
| +.syntax unified
|
| +.text
|
| +
|
| +.global __a_barrier
|
| +.hidden __a_barrier
|
| +.type __a_barrier,%function
|
| +__a_barrier:
|
| + ldr ip,1f
|
| + ldr ip,[pc,ip]
|
| + add pc,pc,ip
|
| +1: .word __a_barrier_ptr-1b
|
| +.global __a_barrier_dummy
|
| +.hidden __a_barrier_dummy
|
| +__a_barrier_dummy:
|
| + bx lr
|
| +.global __a_barrier_oldkuser
|
| +.hidden __a_barrier_oldkuser
|
| +__a_barrier_oldkuser:
|
| + push {r0,r1,r2,r3,ip,lr}
|
| + mov r1,r0
|
| + mov r2,sp
|
| + ldr ip,=0xffff0fc0
|
| + mov lr,pc
|
| + mov pc,ip
|
| + pop {r0,r1,r2,r3,ip,lr}
|
| + bx lr
|
| +.global __a_barrier_v6
|
| +.hidden __a_barrier_v6
|
| +__a_barrier_v6:
|
| + mcr p15,0,r0,c7,c10,5
|
| + bx lr
|
| +.global __a_barrier_v7
|
| +.hidden __a_barrier_v7
|
| +__a_barrier_v7:
|
| + .word 0xf57ff05b /* dmb ish */
|
| + bx lr
|
| +
|
| +.global __a_cas
|
| +.hidden __a_cas
|
| +.type __a_cas,%function
|
| +__a_cas:
|
| + ldr ip,1f
|
| + ldr ip,[pc,ip]
|
| + add pc,pc,ip
|
| +1: .word __a_cas_ptr-1b
|
| +.global __a_cas_dummy
|
| +.hidden __a_cas_dummy
|
| +__a_cas_dummy:
|
| + mov r3,r0
|
| + ldr r0,[r2]
|
| + subs r0,r3,r0
|
| + streq r1,[r2]
|
| + bx lr
|
| +.global __a_cas_v6
|
| +.hidden __a_cas_v6
|
| +__a_cas_v6:
|
| + mov r3,r0
|
| + mcr p15,0,r0,c7,c10,5
|
| +1: .word 0xe1920f9f /* ldrex r0,[r2] */
|
| + subs r0,r3,r0
|
| + .word 0x01820f91 /* strexeq r0,r1,[r2] */
|
| + teqeq r0,#1
|
| + beq 1b
|
| + mcr p15,0,r0,c7,c10,5
|
| + bx lr
|
| +.global __a_cas_v7
|
| +.hidden __a_cas_v7
|
| +__a_cas_v7:
|
| + mov r3,r0
|
| + .word 0xf57ff05b /* dmb ish */
|
| +1: .word 0xe1920f9f /* ldrex r0,[r2] */
|
| + subs r0,r3,r0
|
| + .word 0x01820f91 /* strexeq r0,r1,[r2] */
|
| + teqeq r0,#1
|
| + beq 1b
|
| + .word 0xf57ff05b /* dmb ish */
|
| + bx lr
|
| +
|
| +.global __aeabi_read_tp
|
| +.type __aeabi_read_tp,%function
|
| +__aeabi_read_tp:
|
| +
|
| +.global __a_gettp
|
| +.hidden __a_gettp
|
| +.type __a_gettp,%function
|
| +__a_gettp:
|
| + ldr r0,1f
|
| + ldr r0,[pc,r0]
|
| + add pc,pc,r0
|
| +1: .word __a_gettp_ptr-1b
|
| +.global __a_gettp_dummy
|
| +.hidden __a_gettp_dummy
|
| +__a_gettp_dummy:
|
| + mrc p15,0,r0,c13,c0,3
|
| + bx lr
|
| +
|
| +.data
|
| +.global __a_barrier_ptr
|
| +.hidden __a_barrier_ptr
|
| +__a_barrier_ptr:
|
| + .word 0
|
| +
|
| +.global __a_cas_ptr
|
| +.hidden __a_cas_ptr
|
| +__a_cas_ptr:
|
| + .word 0
|
| +
|
| +.global __a_gettp_ptr
|
| +.hidden __a_gettp_ptr
|
| +__a_gettp_ptr:
|
| + .word 0
|
|
|