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