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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
|
#include "arm_arch.h"
.text
#if defined(__thumb2__) && !defined(__APPLE__)
.syntax unified
.thumb
#else
.code 32
#undef __thumb2__
#endif
.align 5
.globl _OPENSSL_atomic_add
#ifdef __thumb2__
.thumb_func _OPENSSL_atomic_add
#endif
_OPENSSL_atomic_add:
#if __ARM_ARCH__>=6
Ladd: ldrex r2,[r0]
add r3,r2,r1
strex r2,r3,[r0]
cmp r2,#0
bne Ladd
mov r0,r3
bx lr
#else
stmdb sp!,{r4,r5,r6,lr}
ldr r2,Lspinlock
adr r3,Lspinlock
mov r4,r0
mov r5,r1
add r6,r3,r2 @ &spinlock
b .+8
Lspin: bl sched_yield
mov r0,#-1
swp r0,r0,[r6]
cmp r0,#0
bne Lspin
ldr r2,[r4]
add r2,r2,r5
str r2,[r4]
str r0,[r6] @ release spinlock
ldmia sp!,{r4,r5,r6,lr}
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
#endif
.globl _OPENSSL_cleanse
#ifdef __thumb2__
.thumb_func _OPENSSL_cleanse
#endif
_OPENSSL_cleanse:
eor ip,ip,ip
cmp r1,#7
#ifdef __thumb2__
itt hs
#endif
subhs r1,r1,#4
bhs Lot
cmp r1,#0
beq Lcleanse_done
Little:
strb ip,[r0],#1
subs r1,r1,#1
bhi Little
b Lcleanse_done
Lot: tst r0,#3
beq Laligned
strb ip,[r0],#1
sub r1,r1,#1
b Lot
Laligned:
str ip,[r0],#4
subs r1,r1,#4
bhs Laligned
adds r1,r1,#4
bne Little
Lcleanse_done:
#if __ARM_ARCH__>=5
bx lr
#else
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
#endif
.globl _CRYPTO_memcmp
#ifdef __thumb2__
.thumb_func _CRYPTO_memcmp
#endif
.align 4
_CRYPTO_memcmp:
eor ip,ip,ip
cmp r2,#0
beq Lno_data
stmdb sp!,{r4,r5}
Loop_cmp:
ldrb r4,[r0],#1
ldrb r5,[r1],#1
eor r4,r4,r5
orr ip,ip,r4
subs r2,r2,#1
bne Loop_cmp
ldmia sp!,{r4,r5}
Lno_data:
rsb r0,ip,#0
mov r0,r0,lsr#31
#if __ARM_ARCH__>=5
bx lr
#else
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
#endif
#if __ARM_MAX_ARCH__>=7
.align 5
.globl __armv7_neon_probe
#ifdef __thumb2__
.thumb_func __armv7_neon_probe
#endif
__armv7_neon_probe:
vorr q0,q0,q0
bx lr
.globl __armv7_tick
#ifdef __thumb2__
.thumb_func __armv7_tick
#endif
__armv7_tick:
#ifdef __APPLE__
mrrc p15,0,r0,r1,c14 @ CNTPCT
#else
mrrc p15,1,r0,r1,c14 @ CNTVCT
#endif
bx lr
.globl __armv8_aes_probe
#ifdef __thumb2__
.thumb_func __armv8_aes_probe
#endif
__armv8_aes_probe:
#if defined(__thumb2__) && !defined(__APPLE__)
.byte 0xb0,0xff,0x00,0x03 @ aese.8 q0,q0
#else
.byte 0x00,0x03,0xb0,0xf3 @ aese.8 q0,q0
#endif
bx lr
.globl __armv8_sha1_probe
#ifdef __thumb2__
.thumb_func __armv8_sha1_probe
#endif
__armv8_sha1_probe:
#if defined(__thumb2__) && !defined(__APPLE__)
.byte 0x00,0xef,0x40,0x0c @ sha1c.32 q0,q0,q0
#else
.byte 0x40,0x0c,0x00,0xf2 @ sha1c.32 q0,q0,q0
#endif
bx lr
.globl __armv8_sha256_probe
#ifdef __thumb2__
.thumb_func __armv8_sha256_probe
#endif
__armv8_sha256_probe:
#if defined(__thumb2__) && !defined(__APPLE__)
.byte 0x00,0xff,0x40,0x0c @ sha256h.32 q0,q0,q0
#else
.byte 0x40,0x0c,0x00,0xf3 @ sha256h.32 q0,q0,q0
#endif
bx lr
.globl __armv8_pmull_probe
#ifdef __thumb2__
.thumb_func __armv8_pmull_probe
#endif
__armv8_pmull_probe:
#if defined(__thumb2__) && !defined(__APPLE__)
.byte 0xa0,0xef,0x00,0x0e @ vmull.p64 q0,d0,d0
#else
.byte 0x00,0x0e,0xa0,0xf2 @ vmull.p64 q0,d0,d0
#endif
bx lr
#endif
.globl _OPENSSL_wipe_cpu
#ifdef __thumb2__
.thumb_func _OPENSSL_wipe_cpu
#endif
_OPENSSL_wipe_cpu:
#if __ARM_MAX_ARCH__>=7
ldr r0,LOPENSSL_armcap
adr r1,LOPENSSL_armcap
ldr r0,[r1,r0]
#ifdef __APPLE__
ldr r0,[r0]
#endif
#endif
eor r2,r2,r2
eor r3,r3,r3
eor ip,ip,ip
#if __ARM_MAX_ARCH__>=7
tst r0,#1
beq Lwipe_done
veor q0, q0, q0
veor q1, q1, q1
veor q2, q2, q2
veor q3, q3, q3
veor q8, q8, q8
veor q9, q9, q9
veor q10, q10, q10
veor q11, q11, q11
veor q12, q12, q12
veor q13, q13, q13
veor q14, q14, q14
veor q15, q15, q15
Lwipe_done:
#endif
mov r0,sp
#if __ARM_ARCH__>=5
bx lr
#else
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
#endif
.globl _OPENSSL_instrument_bus
#ifdef __thumb2__
.thumb_func _OPENSSL_instrument_bus
#endif
_OPENSSL_instrument_bus:
eor r0,r0,r0
#if __ARM_ARCH__>=5
bx lr
#else
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
#endif
.globl _OPENSSL_instrument_bus2
#ifdef __thumb2__
.thumb_func _OPENSSL_instrument_bus2
#endif
_OPENSSL_instrument_bus2:
eor r0,r0,r0
#if __ARM_ARCH__>=5
bx lr
#else
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
#endif
.align 5
#if __ARM_MAX_ARCH__>=7
LOPENSSL_armcap:
.word OPENSSL_armcap_P-.
#endif
#if __ARM_ARCH__>=6
.align 5
#else
Lspinlock:
.word atomic_add_spinlock-Lspinlock
.align 5
.data
.align 2
atomic_add_spinlock:
.word 0
#endif
.comm _OPENSSL_armcap_P,4
.non_lazy_symbol_pointer
OPENSSL_armcap_P:
.indirect_symbol _OPENSSL_armcap_P
.long 0
.private_extern _OPENSSL_armcap_P
|