X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2Farm%2Fatomics.s;h=da50508d8d45ceb659fdd2ea4883a0b60f979925;hb=85050ac5a2677a8ebf2722e93b5c037ec675c036;hp=5c5b0e3ed481ee6f78a97509bb7892acac27b1e6;hpb=e617b9eea9d45b170eabadf5ca96ca0536c538be;p=musl diff --git a/src/thread/arm/atomics.s b/src/thread/arm/atomics.s index 5c5b0e3e..da50508d 100644 --- a/src/thread/arm/atomics.s +++ b/src/thread/arm/atomics.s @@ -1,111 +1,106 @@ .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 +.type __a_barrier_dummy,%function __a_barrier_dummy: bx lr + .global __a_barrier_oldkuser .hidden __a_barrier_oldkuser +.type __a_barrier_oldkuser,%function __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 + bl 1f pop {r0,r1,r2,r3,ip,lr} bx lr +1: bx ip + .global __a_barrier_v6 .hidden __a_barrier_v6 +.type __a_barrier_v6,%function __a_barrier_v6: + .arch armv6t2 mcr p15,0,r0,c7,c10,5 bx lr + .global __a_barrier_v7 .hidden __a_barrier_v7 +.type __a_barrier_v7,%function __a_barrier_v7: - .word 0xf57ff05b /* dmb ish */ + .arch armv7-a + 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 +.type __a_cas_dummy,%function __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 +.type __a_cas_v6,%function __a_cas_v6: + .arch armv6t2 mov r3,r0 mcr p15,0,r0,c7,c10,5 -1: .word 0xe1920f9f /* ldrex r0,[r2] */ +1: ldrex r0,[r2] subs r0,r3,r0 - .word 0x01820f91 /* strexeq r0,r1,[r2] */ + 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 +.type __a_cas_v7,%function __a_cas_v7: + .arch armv7-a mov r3,r0 - .word 0xf57ff05b /* dmb ish */ -1: .word 0xe1920f9f /* ldrex r0,[r2] */ + dmb ish +1: ldrex r0,[r2] subs r0,r3,r0 - .word 0x01820f91 /* strexeq r0,r1,[r2] */ + strexeq r0,r1,[r2] teqeq r0,#1 beq 1b - .word 0xf57ff05b /* dmb ish */ + 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: +.global __a_gettp_cp15 +.hidden __a_gettp_cp15 +.type __a_gettp_cp15,%function +__a_gettp_cp15: mrc p15,0,r0,c13,c0,3 bx lr +/* Tag this file with minimum ISA level so as not to affect linking. */ +.object_arch armv4t +.eabi_attribute 6,2 + .data +.align 2 + .global __a_barrier_ptr .hidden __a_barrier_ptr __a_barrier_ptr: - .word 0 + .word __a_barrier_dummy .global __a_cas_ptr .hidden __a_cas_ptr __a_cas_ptr: - .word 0 + .word __a_cas_dummy .global __a_gettp_ptr .hidden __a_gettp_ptr __a_gettp_ptr: - .word 0 + .word __a_gettp_cp15