1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
| | .syntax unified
.text
.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:
.arch armv6
.arm
push {r0,r1,r2,r3,ip,lr}
mov r1,r0
mov r2,sp
ldr ip,=0xffff0fc0
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
.arm
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:
.arch armv7-a
.arm
dmb ish
bx lr
.global __a_barrier_m
.hidden __a_barrier_m
.type __a_barrier_m,%function
__a_barrier_m:
.arch armv6-m
.thumb
dmb
bx lr
.global __a_cas_dummy
.hidden __a_cas_dummy
.type __a_cas_dummy,%function
__a_cas_dummy:
.arch armv7-a
.arm
mov r3,r0
ldr r0,[r2]
subs r0,r3,r0
bne 1f
str r1,[r2]
1: bx lr
.global __a_cas_v6
.hidden __a_cas_v6
.type __a_cas_v6,%function
__a_cas_v6:
.arch armv6t2
.arm
mov r3,r0
mcr p15,0,r0,c7,c10,5
1: ldrex r0,[r2]
subs r0,r3,r0
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
.arm
mov r3,r0
dmb ish
1: ldrex r0,[r2]
subs r0,r3,r0
strexeq r0,r1,[r2]
teqeq r0,#1
beq 1b
dmb ish
bx lr
.global __a_cas_m
.hidden __a_cas_m
.type __a_cas_m,%function
__a_cas_m:
.arch armv7-m
.thumb
mov r3,r0
dmb
1: ldrex r0,[r2]
subs r0,r3,r0
bne 1b
strex r0,r1,[r2]
tst r0,r0
bne 1b
dmb
bx lr
.global __a_cas_intmask_m
.hidden __a_cas_intmask_m
.type __a_cas_intmask_m,%function
__a_cas_intmask_m:
.arch armv6-m
.thumb
mov r3,r0
dmb
cpsid i
1: ldr r0,[r2]
subs r0,r3,r0
bne 1b
str r1,[r2]
cpsie i
dmb
bx lr
.global __a_gettp_cp15
.hidden __a_gettp_cp15
.type __a_gettp_cp15,%function
__a_gettp_cp15:
.arch armv6
.arm
mrc p15,0,r0,c13,c0,3
bx lr
.global __a_gettp_cp15_m
.hidden __a_gettp_cp15_m
.type __a_gettp_cp15_m,%function
__a_gettp_cp15_m:
.arch armv7-m
.thumb
mrc p15,0,r0,c13,c0,3
bx lr
.global __a_gettp_syscall_m
.hidden __a_gettp_syscall_m
.type __a_gettp_syscall_m,%function
__a_gettp_syscall_m:
.arch armv6-m
.thumb
push {r7}
movs r7,#0xf
lsls r7,r7,#16
adds r7,#6 /* ARM get_tls syscall (0xf0006) */
svc 0
pop {r7}
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 __a_barrier_dummy
.global __a_cas_ptr
.hidden __a_cas_ptr
__a_cas_ptr:
.word __a_cas_dummy
.global __a_gettp_ptr
.hidden __a_gettp_ptr
__a_gettp_ptr:
.word __a_gettp_cp15
|