blob: de9cdf86f21b873077e48ef714a197a5dbce9780 [file] [log] [blame]
Robert Sloan8ff03552017-06-14 12:40:58 -07001#include <openssl/arm_arch.h>
2
3.text
4
5
6.globl _sha1_block_data_order
7.private_extern _sha1_block_data_order
8
9.align 6
10_sha1_block_data_order:
11#ifdef __ILP32__
12 ldrsw x16,LOPENSSL_armcap_P
13#else
14 ldr x16,LOPENSSL_armcap_P
15#endif
16 adr x17,LOPENSSL_armcap_P
17 add x16,x16,x17
18 ldr w16,[x16]
19 tst w16,#ARMV8_SHA1
20 b.ne Lv8_entry
21
22 stp x29,x30,[sp,#-96]!
23 add x29,sp,#0
24 stp x19,x20,[sp,#16]
25 stp x21,x22,[sp,#32]
26 stp x23,x24,[sp,#48]
27 stp x25,x26,[sp,#64]
28 stp x27,x28,[sp,#80]
29
30 ldp w20,w21,[x0]
31 ldp w22,w23,[x0,#8]
32 ldr w24,[x0,#16]
33
34Loop:
35 ldr x3,[x1],#64
36 movz w28,#0x7999
37 sub x2,x2,#1
38 movk w28,#0x5a82,lsl#16
39#ifdef __ARMEB__
40 ror x3,x3,#32
41#else
42 rev32 x3,x3
43#endif
44 add w24,w24,w28 // warm it up
45 add w24,w24,w3
46 lsr x4,x3,#32
47 ldr x5,[x1,#-56]
48 bic w25,w23,w21
49 and w26,w22,w21
50 ror w27,w20,#27
51 add w23,w23,w28 // future e+=K
52 orr w25,w25,w26
53 add w24,w24,w27 // e+=rot(a,5)
54 ror w21,w21,#2
55 add w23,w23,w4 // future e+=X[i]
56 add w24,w24,w25 // e+=F(b,c,d)
57#ifdef __ARMEB__
58 ror x5,x5,#32
59#else
60 rev32 x5,x5
61#endif
62 bic w25,w22,w20
63 and w26,w21,w20
64 ror w27,w24,#27
65 add w22,w22,w28 // future e+=K
66 orr w25,w25,w26
67 add w23,w23,w27 // e+=rot(a,5)
68 ror w20,w20,#2
69 add w22,w22,w5 // future e+=X[i]
70 add w23,w23,w25 // e+=F(b,c,d)
71 lsr x6,x5,#32
72 ldr x7,[x1,#-48]
73 bic w25,w21,w24
74 and w26,w20,w24
75 ror w27,w23,#27
76 add w21,w21,w28 // future e+=K
77 orr w25,w25,w26
78 add w22,w22,w27 // e+=rot(a,5)
79 ror w24,w24,#2
80 add w21,w21,w6 // future e+=X[i]
81 add w22,w22,w25 // e+=F(b,c,d)
82#ifdef __ARMEB__
83 ror x7,x7,#32
84#else
85 rev32 x7,x7
86#endif
87 bic w25,w20,w23
88 and w26,w24,w23
89 ror w27,w22,#27
90 add w20,w20,w28 // future e+=K
91 orr w25,w25,w26
92 add w21,w21,w27 // e+=rot(a,5)
93 ror w23,w23,#2
94 add w20,w20,w7 // future e+=X[i]
95 add w21,w21,w25 // e+=F(b,c,d)
96 lsr x8,x7,#32
97 ldr x9,[x1,#-40]
98 bic w25,w24,w22
99 and w26,w23,w22
100 ror w27,w21,#27
101 add w24,w24,w28 // future e+=K
102 orr w25,w25,w26
103 add w20,w20,w27 // e+=rot(a,5)
104 ror w22,w22,#2
105 add w24,w24,w8 // future e+=X[i]
106 add w20,w20,w25 // e+=F(b,c,d)
107#ifdef __ARMEB__
108 ror x9,x9,#32
109#else
110 rev32 x9,x9
111#endif
112 bic w25,w23,w21
113 and w26,w22,w21
114 ror w27,w20,#27
115 add w23,w23,w28 // future e+=K
116 orr w25,w25,w26
117 add w24,w24,w27 // e+=rot(a,5)
118 ror w21,w21,#2
119 add w23,w23,w9 // future e+=X[i]
120 add w24,w24,w25 // e+=F(b,c,d)
121 lsr x10,x9,#32
122 ldr x11,[x1,#-32]
123 bic w25,w22,w20
124 and w26,w21,w20
125 ror w27,w24,#27
126 add w22,w22,w28 // future e+=K
127 orr w25,w25,w26
128 add w23,w23,w27 // e+=rot(a,5)
129 ror w20,w20,#2
130 add w22,w22,w10 // future e+=X[i]
131 add w23,w23,w25 // e+=F(b,c,d)
132#ifdef __ARMEB__
133 ror x11,x11,#32
134#else
135 rev32 x11,x11
136#endif
137 bic w25,w21,w24
138 and w26,w20,w24
139 ror w27,w23,#27
140 add w21,w21,w28 // future e+=K
141 orr w25,w25,w26
142 add w22,w22,w27 // e+=rot(a,5)
143 ror w24,w24,#2
144 add w21,w21,w11 // future e+=X[i]
145 add w22,w22,w25 // e+=F(b,c,d)
146 lsr x12,x11,#32
147 ldr x13,[x1,#-24]
148 bic w25,w20,w23
149 and w26,w24,w23
150 ror w27,w22,#27
151 add w20,w20,w28 // future e+=K
152 orr w25,w25,w26
153 add w21,w21,w27 // e+=rot(a,5)
154 ror w23,w23,#2
155 add w20,w20,w12 // future e+=X[i]
156 add w21,w21,w25 // e+=F(b,c,d)
157#ifdef __ARMEB__
158 ror x13,x13,#32
159#else
160 rev32 x13,x13
161#endif
162 bic w25,w24,w22
163 and w26,w23,w22
164 ror w27,w21,#27
165 add w24,w24,w28 // future e+=K
166 orr w25,w25,w26
167 add w20,w20,w27 // e+=rot(a,5)
168 ror w22,w22,#2
169 add w24,w24,w13 // future e+=X[i]
170 add w20,w20,w25 // e+=F(b,c,d)
171 lsr x14,x13,#32
172 ldr x15,[x1,#-16]
173 bic w25,w23,w21
174 and w26,w22,w21
175 ror w27,w20,#27
176 add w23,w23,w28 // future e+=K
177 orr w25,w25,w26
178 add w24,w24,w27 // e+=rot(a,5)
179 ror w21,w21,#2
180 add w23,w23,w14 // future e+=X[i]
181 add w24,w24,w25 // e+=F(b,c,d)
182#ifdef __ARMEB__
183 ror x15,x15,#32
184#else
185 rev32 x15,x15
186#endif
187 bic w25,w22,w20
188 and w26,w21,w20
189 ror w27,w24,#27
190 add w22,w22,w28 // future e+=K
191 orr w25,w25,w26
192 add w23,w23,w27 // e+=rot(a,5)
193 ror w20,w20,#2
194 add w22,w22,w15 // future e+=X[i]
195 add w23,w23,w25 // e+=F(b,c,d)
196 lsr x16,x15,#32
197 ldr x17,[x1,#-8]
198 bic w25,w21,w24
199 and w26,w20,w24
200 ror w27,w23,#27
201 add w21,w21,w28 // future e+=K
202 orr w25,w25,w26
203 add w22,w22,w27 // e+=rot(a,5)
204 ror w24,w24,#2
205 add w21,w21,w16 // future e+=X[i]
206 add w22,w22,w25 // e+=F(b,c,d)
207#ifdef __ARMEB__
208 ror x17,x17,#32
209#else
210 rev32 x17,x17
211#endif
212 bic w25,w20,w23
213 and w26,w24,w23
214 ror w27,w22,#27
215 add w20,w20,w28 // future e+=K
216 orr w25,w25,w26
217 add w21,w21,w27 // e+=rot(a,5)
218 ror w23,w23,#2
219 add w20,w20,w17 // future e+=X[i]
220 add w21,w21,w25 // e+=F(b,c,d)
221 lsr x19,x17,#32
222 eor w3,w3,w5
223 bic w25,w24,w22
224 and w26,w23,w22
225 ror w27,w21,#27
226 eor w3,w3,w11
227 add w24,w24,w28 // future e+=K
228 orr w25,w25,w26
229 add w20,w20,w27 // e+=rot(a,5)
230 eor w3,w3,w16
231 ror w22,w22,#2
232 add w24,w24,w19 // future e+=X[i]
233 add w20,w20,w25 // e+=F(b,c,d)
234 ror w3,w3,#31
235 eor w4,w4,w6
236 bic w25,w23,w21
237 and w26,w22,w21
238 ror w27,w20,#27
239 eor w4,w4,w12
240 add w23,w23,w28 // future e+=K
241 orr w25,w25,w26
242 add w24,w24,w27 // e+=rot(a,5)
243 eor w4,w4,w17
244 ror w21,w21,#2
245 add w23,w23,w3 // future e+=X[i]
246 add w24,w24,w25 // e+=F(b,c,d)
247 ror w4,w4,#31
248 eor w5,w5,w7
249 bic w25,w22,w20
250 and w26,w21,w20
251 ror w27,w24,#27
252 eor w5,w5,w13
253 add w22,w22,w28 // future e+=K
254 orr w25,w25,w26
255 add w23,w23,w27 // e+=rot(a,5)
256 eor w5,w5,w19
257 ror w20,w20,#2
258 add w22,w22,w4 // future e+=X[i]
259 add w23,w23,w25 // e+=F(b,c,d)
260 ror w5,w5,#31
261 eor w6,w6,w8
262 bic w25,w21,w24
263 and w26,w20,w24
264 ror w27,w23,#27
265 eor w6,w6,w14
266 add w21,w21,w28 // future e+=K
267 orr w25,w25,w26
268 add w22,w22,w27 // e+=rot(a,5)
269 eor w6,w6,w3
270 ror w24,w24,#2
271 add w21,w21,w5 // future e+=X[i]
272 add w22,w22,w25 // e+=F(b,c,d)
273 ror w6,w6,#31
274 eor w7,w7,w9
275 bic w25,w20,w23
276 and w26,w24,w23
277 ror w27,w22,#27
278 eor w7,w7,w15
279 add w20,w20,w28 // future e+=K
280 orr w25,w25,w26
281 add w21,w21,w27 // e+=rot(a,5)
282 eor w7,w7,w4
283 ror w23,w23,#2
284 add w20,w20,w6 // future e+=X[i]
285 add w21,w21,w25 // e+=F(b,c,d)
286 ror w7,w7,#31
287 movz w28,#0xeba1
288 movk w28,#0x6ed9,lsl#16
289 eor w8,w8,w10
290 bic w25,w24,w22
291 and w26,w23,w22
292 ror w27,w21,#27
293 eor w8,w8,w16
294 add w24,w24,w28 // future e+=K
295 orr w25,w25,w26
296 add w20,w20,w27 // e+=rot(a,5)
297 eor w8,w8,w5
298 ror w22,w22,#2
299 add w24,w24,w7 // future e+=X[i]
300 add w20,w20,w25 // e+=F(b,c,d)
301 ror w8,w8,#31
302 eor w9,w9,w11
303 eor w25,w23,w21
304 ror w27,w20,#27
305 add w23,w23,w28 // future e+=K
306 eor w9,w9,w17
307 eor w25,w25,w22
308 add w24,w24,w27 // e+=rot(a,5)
309 ror w21,w21,#2
310 eor w9,w9,w6
311 add w23,w23,w8 // future e+=X[i]
312 add w24,w24,w25 // e+=F(b,c,d)
313 ror w9,w9,#31
314 eor w10,w10,w12
315 eor w25,w22,w20
316 ror w27,w24,#27
317 add w22,w22,w28 // future e+=K
318 eor w10,w10,w19
319 eor w25,w25,w21
320 add w23,w23,w27 // e+=rot(a,5)
321 ror w20,w20,#2
322 eor w10,w10,w7
323 add w22,w22,w9 // future e+=X[i]
324 add w23,w23,w25 // e+=F(b,c,d)
325 ror w10,w10,#31
326 eor w11,w11,w13
327 eor w25,w21,w24
328 ror w27,w23,#27
329 add w21,w21,w28 // future e+=K
330 eor w11,w11,w3
331 eor w25,w25,w20
332 add w22,w22,w27 // e+=rot(a,5)
333 ror w24,w24,#2
334 eor w11,w11,w8
335 add w21,w21,w10 // future e+=X[i]
336 add w22,w22,w25 // e+=F(b,c,d)
337 ror w11,w11,#31
338 eor w12,w12,w14
339 eor w25,w20,w23
340 ror w27,w22,#27
341 add w20,w20,w28 // future e+=K
342 eor w12,w12,w4
343 eor w25,w25,w24
344 add w21,w21,w27 // e+=rot(a,5)
345 ror w23,w23,#2
346 eor w12,w12,w9
347 add w20,w20,w11 // future e+=X[i]
348 add w21,w21,w25 // e+=F(b,c,d)
349 ror w12,w12,#31
350 eor w13,w13,w15
351 eor w25,w24,w22
352 ror w27,w21,#27
353 add w24,w24,w28 // future e+=K
354 eor w13,w13,w5
355 eor w25,w25,w23
356 add w20,w20,w27 // e+=rot(a,5)
357 ror w22,w22,#2
358 eor w13,w13,w10
359 add w24,w24,w12 // future e+=X[i]
360 add w20,w20,w25 // e+=F(b,c,d)
361 ror w13,w13,#31
362 eor w14,w14,w16
363 eor w25,w23,w21
364 ror w27,w20,#27
365 add w23,w23,w28 // future e+=K
366 eor w14,w14,w6
367 eor w25,w25,w22
368 add w24,w24,w27 // e+=rot(a,5)
369 ror w21,w21,#2
370 eor w14,w14,w11
371 add w23,w23,w13 // future e+=X[i]
372 add w24,w24,w25 // e+=F(b,c,d)
373 ror w14,w14,#31
374 eor w15,w15,w17
375 eor w25,w22,w20
376 ror w27,w24,#27
377 add w22,w22,w28 // future e+=K
378 eor w15,w15,w7
379 eor w25,w25,w21
380 add w23,w23,w27 // e+=rot(a,5)
381 ror w20,w20,#2
382 eor w15,w15,w12
383 add w22,w22,w14 // future e+=X[i]
384 add w23,w23,w25 // e+=F(b,c,d)
385 ror w15,w15,#31
386 eor w16,w16,w19
387 eor w25,w21,w24
388 ror w27,w23,#27
389 add w21,w21,w28 // future e+=K
390 eor w16,w16,w8
391 eor w25,w25,w20
392 add w22,w22,w27 // e+=rot(a,5)
393 ror w24,w24,#2
394 eor w16,w16,w13
395 add w21,w21,w15 // future e+=X[i]
396 add w22,w22,w25 // e+=F(b,c,d)
397 ror w16,w16,#31
398 eor w17,w17,w3
399 eor w25,w20,w23
400 ror w27,w22,#27
401 add w20,w20,w28 // future e+=K
402 eor w17,w17,w9
403 eor w25,w25,w24
404 add w21,w21,w27 // e+=rot(a,5)
405 ror w23,w23,#2
406 eor w17,w17,w14
407 add w20,w20,w16 // future e+=X[i]
408 add w21,w21,w25 // e+=F(b,c,d)
409 ror w17,w17,#31
410 eor w19,w19,w4
411 eor w25,w24,w22
412 ror w27,w21,#27
413 add w24,w24,w28 // future e+=K
414 eor w19,w19,w10
415 eor w25,w25,w23
416 add w20,w20,w27 // e+=rot(a,5)
417 ror w22,w22,#2
418 eor w19,w19,w15
419 add w24,w24,w17 // future e+=X[i]
420 add w20,w20,w25 // e+=F(b,c,d)
421 ror w19,w19,#31
422 eor w3,w3,w5
423 eor w25,w23,w21
424 ror w27,w20,#27
425 add w23,w23,w28 // future e+=K
426 eor w3,w3,w11
427 eor w25,w25,w22
428 add w24,w24,w27 // e+=rot(a,5)
429 ror w21,w21,#2
430 eor w3,w3,w16
431 add w23,w23,w19 // future e+=X[i]
432 add w24,w24,w25 // e+=F(b,c,d)
433 ror w3,w3,#31
434 eor w4,w4,w6
435 eor w25,w22,w20
436 ror w27,w24,#27
437 add w22,w22,w28 // future e+=K
438 eor w4,w4,w12
439 eor w25,w25,w21
440 add w23,w23,w27 // e+=rot(a,5)
441 ror w20,w20,#2
442 eor w4,w4,w17
443 add w22,w22,w3 // future e+=X[i]
444 add w23,w23,w25 // e+=F(b,c,d)
445 ror w4,w4,#31
446 eor w5,w5,w7
447 eor w25,w21,w24
448 ror w27,w23,#27
449 add w21,w21,w28 // future e+=K
450 eor w5,w5,w13
451 eor w25,w25,w20
452 add w22,w22,w27 // e+=rot(a,5)
453 ror w24,w24,#2
454 eor w5,w5,w19
455 add w21,w21,w4 // future e+=X[i]
456 add w22,w22,w25 // e+=F(b,c,d)
457 ror w5,w5,#31
458 eor w6,w6,w8
459 eor w25,w20,w23
460 ror w27,w22,#27
461 add w20,w20,w28 // future e+=K
462 eor w6,w6,w14
463 eor w25,w25,w24
464 add w21,w21,w27 // e+=rot(a,5)
465 ror w23,w23,#2
466 eor w6,w6,w3
467 add w20,w20,w5 // future e+=X[i]
468 add w21,w21,w25 // e+=F(b,c,d)
469 ror w6,w6,#31
470 eor w7,w7,w9
471 eor w25,w24,w22
472 ror w27,w21,#27
473 add w24,w24,w28 // future e+=K
474 eor w7,w7,w15
475 eor w25,w25,w23
476 add w20,w20,w27 // e+=rot(a,5)
477 ror w22,w22,#2
478 eor w7,w7,w4
479 add w24,w24,w6 // future e+=X[i]
480 add w20,w20,w25 // e+=F(b,c,d)
481 ror w7,w7,#31
482 eor w8,w8,w10
483 eor w25,w23,w21
484 ror w27,w20,#27
485 add w23,w23,w28 // future e+=K
486 eor w8,w8,w16
487 eor w25,w25,w22
488 add w24,w24,w27 // e+=rot(a,5)
489 ror w21,w21,#2
490 eor w8,w8,w5
491 add w23,w23,w7 // future e+=X[i]
492 add w24,w24,w25 // e+=F(b,c,d)
493 ror w8,w8,#31
494 eor w9,w9,w11
495 eor w25,w22,w20
496 ror w27,w24,#27
497 add w22,w22,w28 // future e+=K
498 eor w9,w9,w17
499 eor w25,w25,w21
500 add w23,w23,w27 // e+=rot(a,5)
501 ror w20,w20,#2
502 eor w9,w9,w6
503 add w22,w22,w8 // future e+=X[i]
504 add w23,w23,w25 // e+=F(b,c,d)
505 ror w9,w9,#31
506 eor w10,w10,w12
507 eor w25,w21,w24
508 ror w27,w23,#27
509 add w21,w21,w28 // future e+=K
510 eor w10,w10,w19
511 eor w25,w25,w20
512 add w22,w22,w27 // e+=rot(a,5)
513 ror w24,w24,#2
514 eor w10,w10,w7
515 add w21,w21,w9 // future e+=X[i]
516 add w22,w22,w25 // e+=F(b,c,d)
517 ror w10,w10,#31
518 eor w11,w11,w13
519 eor w25,w20,w23
520 ror w27,w22,#27
521 add w20,w20,w28 // future e+=K
522 eor w11,w11,w3
523 eor w25,w25,w24
524 add w21,w21,w27 // e+=rot(a,5)
525 ror w23,w23,#2
526 eor w11,w11,w8
527 add w20,w20,w10 // future e+=X[i]
528 add w21,w21,w25 // e+=F(b,c,d)
529 ror w11,w11,#31
530 movz w28,#0xbcdc
531 movk w28,#0x8f1b,lsl#16
532 eor w12,w12,w14
533 eor w25,w24,w22
534 ror w27,w21,#27
535 add w24,w24,w28 // future e+=K
536 eor w12,w12,w4
537 eor w25,w25,w23
538 add w20,w20,w27 // e+=rot(a,5)
539 ror w22,w22,#2
540 eor w12,w12,w9
541 add w24,w24,w11 // future e+=X[i]
542 add w20,w20,w25 // e+=F(b,c,d)
543 ror w12,w12,#31
544 orr w25,w21,w22
545 and w26,w21,w22
546 eor w13,w13,w15
547 ror w27,w20,#27
548 and w25,w25,w23
549 add w23,w23,w28 // future e+=K
550 eor w13,w13,w5
551 add w24,w24,w27 // e+=rot(a,5)
552 orr w25,w25,w26
553 ror w21,w21,#2
554 eor w13,w13,w10
555 add w23,w23,w12 // future e+=X[i]
556 add w24,w24,w25 // e+=F(b,c,d)
557 ror w13,w13,#31
558 orr w25,w20,w21
559 and w26,w20,w21
560 eor w14,w14,w16
561 ror w27,w24,#27
562 and w25,w25,w22
563 add w22,w22,w28 // future e+=K
564 eor w14,w14,w6
565 add w23,w23,w27 // e+=rot(a,5)
566 orr w25,w25,w26
567 ror w20,w20,#2
568 eor w14,w14,w11
569 add w22,w22,w13 // future e+=X[i]
570 add w23,w23,w25 // e+=F(b,c,d)
571 ror w14,w14,#31
572 orr w25,w24,w20
573 and w26,w24,w20
574 eor w15,w15,w17
575 ror w27,w23,#27
576 and w25,w25,w21
577 add w21,w21,w28 // future e+=K
578 eor w15,w15,w7
579 add w22,w22,w27 // e+=rot(a,5)
580 orr w25,w25,w26
581 ror w24,w24,#2
582 eor w15,w15,w12
583 add w21,w21,w14 // future e+=X[i]
584 add w22,w22,w25 // e+=F(b,c,d)
585 ror w15,w15,#31
586 orr w25,w23,w24
587 and w26,w23,w24
588 eor w16,w16,w19
589 ror w27,w22,#27
590 and w25,w25,w20
591 add w20,w20,w28 // future e+=K
592 eor w16,w16,w8
593 add w21,w21,w27 // e+=rot(a,5)
594 orr w25,w25,w26
595 ror w23,w23,#2
596 eor w16,w16,w13
597 add w20,w20,w15 // future e+=X[i]
598 add w21,w21,w25 // e+=F(b,c,d)
599 ror w16,w16,#31
600 orr w25,w22,w23
601 and w26,w22,w23
602 eor w17,w17,w3
603 ror w27,w21,#27
604 and w25,w25,w24
605 add w24,w24,w28 // future e+=K
606 eor w17,w17,w9
607 add w20,w20,w27 // e+=rot(a,5)
608 orr w25,w25,w26
609 ror w22,w22,#2
610 eor w17,w17,w14
611 add w24,w24,w16 // future e+=X[i]
612 add w20,w20,w25 // e+=F(b,c,d)
613 ror w17,w17,#31
614 orr w25,w21,w22
615 and w26,w21,w22
616 eor w19,w19,w4
617 ror w27,w20,#27
618 and w25,w25,w23
619 add w23,w23,w28 // future e+=K
620 eor w19,w19,w10
621 add w24,w24,w27 // e+=rot(a,5)
622 orr w25,w25,w26
623 ror w21,w21,#2
624 eor w19,w19,w15
625 add w23,w23,w17 // future e+=X[i]
626 add w24,w24,w25 // e+=F(b,c,d)
627 ror w19,w19,#31
628 orr w25,w20,w21
629 and w26,w20,w21
630 eor w3,w3,w5
631 ror w27,w24,#27
632 and w25,w25,w22
633 add w22,w22,w28 // future e+=K
634 eor w3,w3,w11
635 add w23,w23,w27 // e+=rot(a,5)
636 orr w25,w25,w26
637 ror w20,w20,#2
638 eor w3,w3,w16
639 add w22,w22,w19 // future e+=X[i]
640 add w23,w23,w25 // e+=F(b,c,d)
641 ror w3,w3,#31
642 orr w25,w24,w20
643 and w26,w24,w20
644 eor w4,w4,w6
645 ror w27,w23,#27
646 and w25,w25,w21
647 add w21,w21,w28 // future e+=K
648 eor w4,w4,w12
649 add w22,w22,w27 // e+=rot(a,5)
650 orr w25,w25,w26
651 ror w24,w24,#2
652 eor w4,w4,w17
653 add w21,w21,w3 // future e+=X[i]
654 add w22,w22,w25 // e+=F(b,c,d)
655 ror w4,w4,#31
656 orr w25,w23,w24
657 and w26,w23,w24
658 eor w5,w5,w7
659 ror w27,w22,#27
660 and w25,w25,w20
661 add w20,w20,w28 // future e+=K
662 eor w5,w5,w13
663 add w21,w21,w27 // e+=rot(a,5)
664 orr w25,w25,w26
665 ror w23,w23,#2
666 eor w5,w5,w19
667 add w20,w20,w4 // future e+=X[i]
668 add w21,w21,w25 // e+=F(b,c,d)
669 ror w5,w5,#31
670 orr w25,w22,w23
671 and w26,w22,w23
672 eor w6,w6,w8
673 ror w27,w21,#27
674 and w25,w25,w24
675 add w24,w24,w28 // future e+=K
676 eor w6,w6,w14
677 add w20,w20,w27 // e+=rot(a,5)
678 orr w25,w25,w26
679 ror w22,w22,#2
680 eor w6,w6,w3
681 add w24,w24,w5 // future e+=X[i]
682 add w20,w20,w25 // e+=F(b,c,d)
683 ror w6,w6,#31
684 orr w25,w21,w22
685 and w26,w21,w22
686 eor w7,w7,w9
687 ror w27,w20,#27
688 and w25,w25,w23
689 add w23,w23,w28 // future e+=K
690 eor w7,w7,w15
691 add w24,w24,w27 // e+=rot(a,5)
692 orr w25,w25,w26
693 ror w21,w21,#2
694 eor w7,w7,w4
695 add w23,w23,w6 // future e+=X[i]
696 add w24,w24,w25 // e+=F(b,c,d)
697 ror w7,w7,#31
698 orr w25,w20,w21
699 and w26,w20,w21
700 eor w8,w8,w10
701 ror w27,w24,#27
702 and w25,w25,w22
703 add w22,w22,w28 // future e+=K
704 eor w8,w8,w16
705 add w23,w23,w27 // e+=rot(a,5)
706 orr w25,w25,w26
707 ror w20,w20,#2
708 eor w8,w8,w5
709 add w22,w22,w7 // future e+=X[i]
710 add w23,w23,w25 // e+=F(b,c,d)
711 ror w8,w8,#31
712 orr w25,w24,w20
713 and w26,w24,w20
714 eor w9,w9,w11
715 ror w27,w23,#27
716 and w25,w25,w21
717 add w21,w21,w28 // future e+=K
718 eor w9,w9,w17
719 add w22,w22,w27 // e+=rot(a,5)
720 orr w25,w25,w26
721 ror w24,w24,#2
722 eor w9,w9,w6
723 add w21,w21,w8 // future e+=X[i]
724 add w22,w22,w25 // e+=F(b,c,d)
725 ror w9,w9,#31
726 orr w25,w23,w24
727 and w26,w23,w24
728 eor w10,w10,w12
729 ror w27,w22,#27
730 and w25,w25,w20
731 add w20,w20,w28 // future e+=K
732 eor w10,w10,w19
733 add w21,w21,w27 // e+=rot(a,5)
734 orr w25,w25,w26
735 ror w23,w23,#2
736 eor w10,w10,w7
737 add w20,w20,w9 // future e+=X[i]
738 add w21,w21,w25 // e+=F(b,c,d)
739 ror w10,w10,#31
740 orr w25,w22,w23
741 and w26,w22,w23
742 eor w11,w11,w13
743 ror w27,w21,#27
744 and w25,w25,w24
745 add w24,w24,w28 // future e+=K
746 eor w11,w11,w3
747 add w20,w20,w27 // e+=rot(a,5)
748 orr w25,w25,w26
749 ror w22,w22,#2
750 eor w11,w11,w8
751 add w24,w24,w10 // future e+=X[i]
752 add w20,w20,w25 // e+=F(b,c,d)
753 ror w11,w11,#31
754 orr w25,w21,w22
755 and w26,w21,w22
756 eor w12,w12,w14
757 ror w27,w20,#27
758 and w25,w25,w23
759 add w23,w23,w28 // future e+=K
760 eor w12,w12,w4
761 add w24,w24,w27 // e+=rot(a,5)
762 orr w25,w25,w26
763 ror w21,w21,#2
764 eor w12,w12,w9
765 add w23,w23,w11 // future e+=X[i]
766 add w24,w24,w25 // e+=F(b,c,d)
767 ror w12,w12,#31
768 orr w25,w20,w21
769 and w26,w20,w21
770 eor w13,w13,w15
771 ror w27,w24,#27
772 and w25,w25,w22
773 add w22,w22,w28 // future e+=K
774 eor w13,w13,w5
775 add w23,w23,w27 // e+=rot(a,5)
776 orr w25,w25,w26
777 ror w20,w20,#2
778 eor w13,w13,w10
779 add w22,w22,w12 // future e+=X[i]
780 add w23,w23,w25 // e+=F(b,c,d)
781 ror w13,w13,#31
782 orr w25,w24,w20
783 and w26,w24,w20
784 eor w14,w14,w16
785 ror w27,w23,#27
786 and w25,w25,w21
787 add w21,w21,w28 // future e+=K
788 eor w14,w14,w6
789 add w22,w22,w27 // e+=rot(a,5)
790 orr w25,w25,w26
791 ror w24,w24,#2
792 eor w14,w14,w11
793 add w21,w21,w13 // future e+=X[i]
794 add w22,w22,w25 // e+=F(b,c,d)
795 ror w14,w14,#31
796 orr w25,w23,w24
797 and w26,w23,w24
798 eor w15,w15,w17
799 ror w27,w22,#27
800 and w25,w25,w20
801 add w20,w20,w28 // future e+=K
802 eor w15,w15,w7
803 add w21,w21,w27 // e+=rot(a,5)
804 orr w25,w25,w26
805 ror w23,w23,#2
806 eor w15,w15,w12
807 add w20,w20,w14 // future e+=X[i]
808 add w21,w21,w25 // e+=F(b,c,d)
809 ror w15,w15,#31
810 movz w28,#0xc1d6
811 movk w28,#0xca62,lsl#16
812 orr w25,w22,w23
813 and w26,w22,w23
814 eor w16,w16,w19
815 ror w27,w21,#27
816 and w25,w25,w24
817 add w24,w24,w28 // future e+=K
818 eor w16,w16,w8
819 add w20,w20,w27 // e+=rot(a,5)
820 orr w25,w25,w26
821 ror w22,w22,#2
822 eor w16,w16,w13
823 add w24,w24,w15 // future e+=X[i]
824 add w20,w20,w25 // e+=F(b,c,d)
825 ror w16,w16,#31
826 eor w17,w17,w3
827 eor w25,w23,w21
828 ror w27,w20,#27
829 add w23,w23,w28 // future e+=K
830 eor w17,w17,w9
831 eor w25,w25,w22
832 add w24,w24,w27 // e+=rot(a,5)
833 ror w21,w21,#2
834 eor w17,w17,w14
835 add w23,w23,w16 // future e+=X[i]
836 add w24,w24,w25 // e+=F(b,c,d)
837 ror w17,w17,#31
838 eor w19,w19,w4
839 eor w25,w22,w20
840 ror w27,w24,#27
841 add w22,w22,w28 // future e+=K
842 eor w19,w19,w10
843 eor w25,w25,w21
844 add w23,w23,w27 // e+=rot(a,5)
845 ror w20,w20,#2
846 eor w19,w19,w15
847 add w22,w22,w17 // future e+=X[i]
848 add w23,w23,w25 // e+=F(b,c,d)
849 ror w19,w19,#31
850 eor w3,w3,w5
851 eor w25,w21,w24
852 ror w27,w23,#27
853 add w21,w21,w28 // future e+=K
854 eor w3,w3,w11
855 eor w25,w25,w20
856 add w22,w22,w27 // e+=rot(a,5)
857 ror w24,w24,#2
858 eor w3,w3,w16
859 add w21,w21,w19 // future e+=X[i]
860 add w22,w22,w25 // e+=F(b,c,d)
861 ror w3,w3,#31
862 eor w4,w4,w6
863 eor w25,w20,w23
864 ror w27,w22,#27
865 add w20,w20,w28 // future e+=K
866 eor w4,w4,w12
867 eor w25,w25,w24
868 add w21,w21,w27 // e+=rot(a,5)
869 ror w23,w23,#2
870 eor w4,w4,w17
871 add w20,w20,w3 // future e+=X[i]
872 add w21,w21,w25 // e+=F(b,c,d)
873 ror w4,w4,#31
874 eor w5,w5,w7
875 eor w25,w24,w22
876 ror w27,w21,#27
877 add w24,w24,w28 // future e+=K
878 eor w5,w5,w13
879 eor w25,w25,w23
880 add w20,w20,w27 // e+=rot(a,5)
881 ror w22,w22,#2
882 eor w5,w5,w19
883 add w24,w24,w4 // future e+=X[i]
884 add w20,w20,w25 // e+=F(b,c,d)
885 ror w5,w5,#31
886 eor w6,w6,w8
887 eor w25,w23,w21
888 ror w27,w20,#27
889 add w23,w23,w28 // future e+=K
890 eor w6,w6,w14
891 eor w25,w25,w22
892 add w24,w24,w27 // e+=rot(a,5)
893 ror w21,w21,#2
894 eor w6,w6,w3
895 add w23,w23,w5 // future e+=X[i]
896 add w24,w24,w25 // e+=F(b,c,d)
897 ror w6,w6,#31
898 eor w7,w7,w9
899 eor w25,w22,w20
900 ror w27,w24,#27
901 add w22,w22,w28 // future e+=K
902 eor w7,w7,w15
903 eor w25,w25,w21
904 add w23,w23,w27 // e+=rot(a,5)
905 ror w20,w20,#2
906 eor w7,w7,w4
907 add w22,w22,w6 // future e+=X[i]
908 add w23,w23,w25 // e+=F(b,c,d)
909 ror w7,w7,#31
910 eor w8,w8,w10
911 eor w25,w21,w24
912 ror w27,w23,#27
913 add w21,w21,w28 // future e+=K
914 eor w8,w8,w16
915 eor w25,w25,w20
916 add w22,w22,w27 // e+=rot(a,5)
917 ror w24,w24,#2
918 eor w8,w8,w5
919 add w21,w21,w7 // future e+=X[i]
920 add w22,w22,w25 // e+=F(b,c,d)
921 ror w8,w8,#31
922 eor w9,w9,w11
923 eor w25,w20,w23
924 ror w27,w22,#27
925 add w20,w20,w28 // future e+=K
926 eor w9,w9,w17
927 eor w25,w25,w24
928 add w21,w21,w27 // e+=rot(a,5)
929 ror w23,w23,#2
930 eor w9,w9,w6
931 add w20,w20,w8 // future e+=X[i]
932 add w21,w21,w25 // e+=F(b,c,d)
933 ror w9,w9,#31
934 eor w10,w10,w12
935 eor w25,w24,w22
936 ror w27,w21,#27
937 add w24,w24,w28 // future e+=K
938 eor w10,w10,w19
939 eor w25,w25,w23
940 add w20,w20,w27 // e+=rot(a,5)
941 ror w22,w22,#2
942 eor w10,w10,w7
943 add w24,w24,w9 // future e+=X[i]
944 add w20,w20,w25 // e+=F(b,c,d)
945 ror w10,w10,#31
946 eor w11,w11,w13
947 eor w25,w23,w21
948 ror w27,w20,#27
949 add w23,w23,w28 // future e+=K
950 eor w11,w11,w3
951 eor w25,w25,w22
952 add w24,w24,w27 // e+=rot(a,5)
953 ror w21,w21,#2
954 eor w11,w11,w8
955 add w23,w23,w10 // future e+=X[i]
956 add w24,w24,w25 // e+=F(b,c,d)
957 ror w11,w11,#31
958 eor w12,w12,w14
959 eor w25,w22,w20
960 ror w27,w24,#27
961 add w22,w22,w28 // future e+=K
962 eor w12,w12,w4
963 eor w25,w25,w21
964 add w23,w23,w27 // e+=rot(a,5)
965 ror w20,w20,#2
966 eor w12,w12,w9
967 add w22,w22,w11 // future e+=X[i]
968 add w23,w23,w25 // e+=F(b,c,d)
969 ror w12,w12,#31
970 eor w13,w13,w15
971 eor w25,w21,w24
972 ror w27,w23,#27
973 add w21,w21,w28 // future e+=K
974 eor w13,w13,w5
975 eor w25,w25,w20
976 add w22,w22,w27 // e+=rot(a,5)
977 ror w24,w24,#2
978 eor w13,w13,w10
979 add w21,w21,w12 // future e+=X[i]
980 add w22,w22,w25 // e+=F(b,c,d)
981 ror w13,w13,#31
982 eor w14,w14,w16
983 eor w25,w20,w23
984 ror w27,w22,#27
985 add w20,w20,w28 // future e+=K
986 eor w14,w14,w6
987 eor w25,w25,w24
988 add w21,w21,w27 // e+=rot(a,5)
989 ror w23,w23,#2
990 eor w14,w14,w11
991 add w20,w20,w13 // future e+=X[i]
992 add w21,w21,w25 // e+=F(b,c,d)
993 ror w14,w14,#31
994 eor w15,w15,w17
995 eor w25,w24,w22
996 ror w27,w21,#27
997 add w24,w24,w28 // future e+=K
998 eor w15,w15,w7
999 eor w25,w25,w23
1000 add w20,w20,w27 // e+=rot(a,5)
1001 ror w22,w22,#2
1002 eor w15,w15,w12
1003 add w24,w24,w14 // future e+=X[i]
1004 add w20,w20,w25 // e+=F(b,c,d)
1005 ror w15,w15,#31
1006 eor w16,w16,w19
1007 eor w25,w23,w21
1008 ror w27,w20,#27
1009 add w23,w23,w28 // future e+=K
1010 eor w16,w16,w8
1011 eor w25,w25,w22
1012 add w24,w24,w27 // e+=rot(a,5)
1013 ror w21,w21,#2
1014 eor w16,w16,w13
1015 add w23,w23,w15 // future e+=X[i]
1016 add w24,w24,w25 // e+=F(b,c,d)
1017 ror w16,w16,#31
1018 eor w17,w17,w3
1019 eor w25,w22,w20
1020 ror w27,w24,#27
1021 add w22,w22,w28 // future e+=K
1022 eor w17,w17,w9
1023 eor w25,w25,w21
1024 add w23,w23,w27 // e+=rot(a,5)
1025 ror w20,w20,#2
1026 eor w17,w17,w14
1027 add w22,w22,w16 // future e+=X[i]
1028 add w23,w23,w25 // e+=F(b,c,d)
1029 ror w17,w17,#31
1030 eor w19,w19,w4
1031 eor w25,w21,w24
1032 ror w27,w23,#27
1033 add w21,w21,w28 // future e+=K
1034 eor w19,w19,w10
1035 eor w25,w25,w20
1036 add w22,w22,w27 // e+=rot(a,5)
1037 ror w24,w24,#2
1038 eor w19,w19,w15
1039 add w21,w21,w17 // future e+=X[i]
1040 add w22,w22,w25 // e+=F(b,c,d)
1041 ror w19,w19,#31
1042 ldp w4,w5,[x0]
1043 eor w25,w20,w23
1044 ror w27,w22,#27
1045 add w20,w20,w28 // future e+=K
1046 eor w25,w25,w24
1047 add w21,w21,w27 // e+=rot(a,5)
1048 ror w23,w23,#2
1049 add w20,w20,w19 // future e+=X[i]
1050 add w21,w21,w25 // e+=F(b,c,d)
1051 ldp w6,w7,[x0,#8]
1052 eor w25,w24,w22
1053 ror w27,w21,#27
1054 eor w25,w25,w23
1055 add w20,w20,w27 // e+=rot(a,5)
1056 ror w22,w22,#2
1057 ldr w8,[x0,#16]
1058 add w20,w20,w25 // e+=F(b,c,d)
1059 add w21,w21,w5
1060 add w22,w22,w6
1061 add w20,w20,w4
1062 add w23,w23,w7
1063 add w24,w24,w8
1064 stp w20,w21,[x0]
1065 stp w22,w23,[x0,#8]
1066 str w24,[x0,#16]
1067 cbnz x2,Loop
1068
1069 ldp x19,x20,[sp,#16]
1070 ldp x21,x22,[sp,#32]
1071 ldp x23,x24,[sp,#48]
1072 ldp x25,x26,[sp,#64]
1073 ldp x27,x28,[sp,#80]
1074 ldr x29,[sp],#96
1075 ret
1076
1077
1078.align 6
1079sha1_block_armv8:
1080Lv8_entry:
1081 stp x29,x30,[sp,#-16]!
1082 add x29,sp,#0
1083
1084 adr x4,Lconst
1085 eor v1.16b,v1.16b,v1.16b
1086 ld1 {v0.4s},[x0],#16
1087 ld1 {v1.s}[0],[x0]
1088 sub x0,x0,#16
1089 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4]
1090
1091Loop_hw:
1092 ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
1093 sub x2,x2,#1
1094 rev32 v4.16b,v4.16b
1095 rev32 v5.16b,v5.16b
1096
1097 add v20.4s,v16.4s,v4.4s
1098 rev32 v6.16b,v6.16b
1099 orr v22.16b,v0.16b,v0.16b // offload
1100
1101 add v21.4s,v16.4s,v5.4s
1102 rev32 v7.16b,v7.16b
1103.long 0x5e280803 //sha1h v3.16b,v0.16b
1104.long 0x5e140020 //sha1c v0.16b,v1.16b,v20.4s // 0
1105 add v20.4s,v16.4s,v6.4s
1106.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1107.long 0x5e280802 //sha1h v2.16b,v0.16b // 1
1108.long 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
1109 add v21.4s,v16.4s,v7.4s
1110.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1111.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1112.long 0x5e280803 //sha1h v3.16b,v0.16b // 2
1113.long 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
1114 add v20.4s,v16.4s,v4.4s
1115.long 0x5e281885 //sha1su1 v5.16b,v4.16b
1116.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1117.long 0x5e280802 //sha1h v2.16b,v0.16b // 3
1118.long 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
1119 add v21.4s,v17.4s,v5.4s
1120.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1121.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1122.long 0x5e280803 //sha1h v3.16b,v0.16b // 4
1123.long 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
1124 add v20.4s,v17.4s,v6.4s
1125.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1126.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1127.long 0x5e280802 //sha1h v2.16b,v0.16b // 5
1128.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1129 add v21.4s,v17.4s,v7.4s
1130.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1131.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1132.long 0x5e280803 //sha1h v3.16b,v0.16b // 6
1133.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
1134 add v20.4s,v17.4s,v4.4s
1135.long 0x5e281885 //sha1su1 v5.16b,v4.16b
1136.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1137.long 0x5e280802 //sha1h v2.16b,v0.16b // 7
1138.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1139 add v21.4s,v17.4s,v5.4s
1140.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1141.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1142.long 0x5e280803 //sha1h v3.16b,v0.16b // 8
1143.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
1144 add v20.4s,v18.4s,v6.4s
1145.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1146.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1147.long 0x5e280802 //sha1h v2.16b,v0.16b // 9
1148.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1149 add v21.4s,v18.4s,v7.4s
1150.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1151.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1152.long 0x5e280803 //sha1h v3.16b,v0.16b // 10
1153.long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
1154 add v20.4s,v18.4s,v4.4s
1155.long 0x5e281885 //sha1su1 v5.16b,v4.16b
1156.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1157.long 0x5e280802 //sha1h v2.16b,v0.16b // 11
1158.long 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
1159 add v21.4s,v18.4s,v5.4s
1160.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1161.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1162.long 0x5e280803 //sha1h v3.16b,v0.16b // 12
1163.long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
1164 add v20.4s,v18.4s,v6.4s
1165.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1166.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
1167.long 0x5e280802 //sha1h v2.16b,v0.16b // 13
1168.long 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
1169 add v21.4s,v19.4s,v7.4s
1170.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b
1171.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
1172.long 0x5e280803 //sha1h v3.16b,v0.16b // 14
1173.long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
1174 add v20.4s,v19.4s,v4.4s
1175.long 0x5e281885 //sha1su1 v5.16b,v4.16b
1176.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
1177.long 0x5e280802 //sha1h v2.16b,v0.16b // 15
1178.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1179 add v21.4s,v19.4s,v5.4s
1180.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b
1181.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
1182.long 0x5e280803 //sha1h v3.16b,v0.16b // 16
1183.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
1184 add v20.4s,v19.4s,v6.4s
1185.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b
1186.long 0x5e280802 //sha1h v2.16b,v0.16b // 17
1187.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1188 add v21.4s,v19.4s,v7.4s
1189
1190.long 0x5e280803 //sha1h v3.16b,v0.16b // 18
1191.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
1192
1193.long 0x5e280802 //sha1h v2.16b,v0.16b // 19
1194.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
1195
1196 add v1.4s,v1.4s,v2.4s
1197 add v0.4s,v0.4s,v22.4s
1198
1199 cbnz x2,Loop_hw
1200
1201 st1 {v0.4s},[x0],#16
1202 st1 {v1.s}[0],[x0]
1203
1204 ldr x29,[sp],#16
1205 ret
1206
1207.align 6
1208Lconst:
1209.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 //K_00_19
1210.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39
1211.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59
1212.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79
1213LOPENSSL_armcap_P:
1214#ifdef __ILP32__
1215.long _OPENSSL_armcap_P-.
1216#else
1217.quad _OPENSSL_armcap_P-.
1218#endif
1219.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
1220.align 2
1221.align 2
1222.comm _OPENSSL_armcap_P,4,4