github.com/afumu/libc@v0.0.6/musl/src/thread/arm/atomics.s (about) 1 .syntax unified 2 .text 3 4 .global __a_barrier_dummy 5 .hidden __a_barrier_dummy 6 .type __a_barrier_dummy,%function 7 __a_barrier_dummy: 8 bx lr 9 10 .global __a_barrier_oldkuser 11 .hidden __a_barrier_oldkuser 12 .type __a_barrier_oldkuser,%function 13 __a_barrier_oldkuser: 14 push {r0,r1,r2,r3,ip,lr} 15 mov r1,r0 16 mov r2,sp 17 ldr ip,=0xffff0fc0 18 bl 1f 19 pop {r0,r1,r2,r3,ip,lr} 20 bx lr 21 1: bx ip 22 23 .global __a_barrier_v6 24 .hidden __a_barrier_v6 25 .type __a_barrier_v6,%function 26 __a_barrier_v6: 27 .arch armv6t2 28 mcr p15,0,r0,c7,c10,5 29 bx lr 30 31 .global __a_barrier_v7 32 .hidden __a_barrier_v7 33 .type __a_barrier_v7,%function 34 __a_barrier_v7: 35 .arch armv7-a 36 dmb ish 37 bx lr 38 39 .global __a_cas_dummy 40 .hidden __a_cas_dummy 41 .type __a_cas_dummy,%function 42 __a_cas_dummy: 43 mov r3,r0 44 ldr r0,[r2] 45 subs r0,r3,r0 46 streq r1,[r2] 47 bx lr 48 49 .global __a_cas_v6 50 .hidden __a_cas_v6 51 .type __a_cas_v6,%function 52 __a_cas_v6: 53 .arch armv6t2 54 mov r3,r0 55 mcr p15,0,r0,c7,c10,5 56 1: ldrex r0,[r2] 57 subs r0,r3,r0 58 strexeq r0,r1,[r2] 59 teqeq r0,#1 60 beq 1b 61 mcr p15,0,r0,c7,c10,5 62 bx lr 63 64 .global __a_cas_v7 65 .hidden __a_cas_v7 66 .type __a_cas_v7,%function 67 __a_cas_v7: 68 .arch armv7-a 69 mov r3,r0 70 dmb ish 71 1: ldrex r0,[r2] 72 subs r0,r3,r0 73 strexeq r0,r1,[r2] 74 teqeq r0,#1 75 beq 1b 76 dmb ish 77 bx lr 78 79 .global __a_gettp_cp15 80 .hidden __a_gettp_cp15 81 .type __a_gettp_cp15,%function 82 __a_gettp_cp15: 83 mrc p15,0,r0,c13,c0,3 84 bx lr 85 86 /* Tag this file with minimum ISA level so as not to affect linking. */ 87 .object_arch armv4t 88 .eabi_attribute 6,2 89 90 .data 91 .align 2 92 93 .global __a_barrier_ptr 94 .hidden __a_barrier_ptr 95 __a_barrier_ptr: 96 .word __a_barrier_dummy 97 98 .global __a_cas_ptr 99 .hidden __a_cas_ptr 100 __a_cas_ptr: 101 .word __a_cas_dummy 102 103 .global __a_gettp_ptr 104 .hidden __a_gettp_ptr 105 __a_gettp_ptr: 106 .word __a_gettp_cp15