genirq: Dont allow affinity mask to be updated on IPIs
[deliverable/linux.git] / arch / arm / crypto / sha512-core.S_shipped
1
2 @ ====================================================================
3 @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
4 @ project. The module is, however, dual licensed under OpenSSL and
5 @ CRYPTOGAMS licenses depending on where you obtain it. For further
6 @ details see http://www.openssl.org/~appro/cryptogams/.
7 @
8 @ Permission to use under GPL terms is granted.
9 @ ====================================================================
10
11 @ SHA512 block procedure for ARMv4. September 2007.
12
13 @ This code is ~4.5 (four and a half) times faster than code generated
14 @ by gcc 3.4 and it spends ~72 clock cycles per byte [on single-issue
15 @ Xscale PXA250 core].
16 @
17 @ July 2010.
18 @
19 @ Rescheduling for dual-issue pipeline resulted in 6% improvement on
20 @ Cortex A8 core and ~40 cycles per processed byte.
21
22 @ February 2011.
23 @
24 @ Profiler-assisted and platform-specific optimization resulted in 7%
25 @ improvement on Coxtex A8 core and ~38 cycles per byte.
26
27 @ March 2011.
28 @
29 @ Add NEON implementation. On Cortex A8 it was measured to process
30 @ one byte in 23.3 cycles or ~60% faster than integer-only code.
31
32 @ August 2012.
33 @
34 @ Improve NEON performance by 12% on Snapdragon S4. In absolute
35 @ terms it's 22.6 cycles per byte, which is disappointing result.
36 @ Technical writers asserted that 3-way S4 pipeline can sustain
37 @ multiple NEON instructions per cycle, but dual NEON issue could
38 @ not be observed, see http://www.openssl.org/~appro/Snapdragon-S4.html
39 @ for further details. On side note Cortex-A15 processes one byte in
40 @ 16 cycles.
41
42 @ Byte order [in]dependence. =========================================
43 @
44 @ Originally caller was expected to maintain specific *dword* order in
45 @ h[0-7], namely with most significant dword at *lower* address, which
46 @ was reflected in below two parameters as 0 and 4. Now caller is
47 @ expected to maintain native byte order for whole 64-bit values.
48 #ifndef __KERNEL__
49 # include "arm_arch.h"
50 # define VFP_ABI_PUSH vstmdb sp!,{d8-d15}
51 # define VFP_ABI_POP vldmia sp!,{d8-d15}
52 #else
53 # define __ARM_ARCH__ __LINUX_ARM_ARCH__
54 # define __ARM_MAX_ARCH__ 7
55 # define VFP_ABI_PUSH
56 # define VFP_ABI_POP
57 #endif
58
59 #ifdef __ARMEL__
60 # define LO 0
61 # define HI 4
62 # define WORD64(hi0,lo0,hi1,lo1) .word lo0,hi0, lo1,hi1
63 #else
64 # define HI 0
65 # define LO 4
66 # define WORD64(hi0,lo0,hi1,lo1) .word hi0,lo0, hi1,lo1
67 #endif
68
69 .text
70 #if __ARM_ARCH__<7
71 .code 32
72 #else
73 .syntax unified
74 # ifdef __thumb2__
75 # define adrl adr
76 .thumb
77 # else
78 .code 32
79 # endif
80 #endif
81
82 .type K512,%object
83 .align 5
84 K512:
85 WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd)
86 WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc)
87 WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019)
88 WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118)
89 WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe)
90 WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2)
91 WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1)
92 WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694)
93 WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3)
94 WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65)
95 WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483)
96 WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5)
97 WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210)
98 WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4)
99 WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725)
100 WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70)
101 WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926)
102 WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df)
103 WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8)
104 WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b)
105 WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001)
106 WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30)
107 WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910)
108 WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8)
109 WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53)
110 WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8)
111 WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb)
112 WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3)
113 WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60)
114 WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec)
115 WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9)
116 WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b)
117 WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207)
118 WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178)
119 WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6)
120 WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b)
121 WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493)
122 WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c)
123 WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a)
124 WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817)
125 .size K512,.-K512
126 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
127 .LOPENSSL_armcap:
128 .word OPENSSL_armcap_P-sha512_block_data_order
129 .skip 32-4
130 #else
131 .skip 32
132 #endif
133
134 .global sha512_block_data_order
135 .type sha512_block_data_order,%function
136 sha512_block_data_order:
137 #if __ARM_ARCH__<7
138 sub r3,pc,#8 @ sha512_block_data_order
139 #else
140 adr r3,sha512_block_data_order
141 #endif
142 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
143 ldr r12,.LOPENSSL_armcap
144 ldr r12,[r3,r12] @ OPENSSL_armcap_P
145 tst r12,#1
146 bne .LNEON
147 #endif
148 add r2,r1,r2,lsl#7 @ len to point at the end of inp
149 stmdb sp!,{r4-r12,lr}
150 sub r14,r3,#672 @ K512
151 sub sp,sp,#9*8
152
153 ldr r7,[r0,#32+LO]
154 ldr r8,[r0,#32+HI]
155 ldr r9, [r0,#48+LO]
156 ldr r10, [r0,#48+HI]
157 ldr r11, [r0,#56+LO]
158 ldr r12, [r0,#56+HI]
159 .Loop:
160 str r9, [sp,#48+0]
161 str r10, [sp,#48+4]
162 str r11, [sp,#56+0]
163 str r12, [sp,#56+4]
164 ldr r5,[r0,#0+LO]
165 ldr r6,[r0,#0+HI]
166 ldr r3,[r0,#8+LO]
167 ldr r4,[r0,#8+HI]
168 ldr r9, [r0,#16+LO]
169 ldr r10, [r0,#16+HI]
170 ldr r11, [r0,#24+LO]
171 ldr r12, [r0,#24+HI]
172 str r3,[sp,#8+0]
173 str r4,[sp,#8+4]
174 str r9, [sp,#16+0]
175 str r10, [sp,#16+4]
176 str r11, [sp,#24+0]
177 str r12, [sp,#24+4]
178 ldr r3,[r0,#40+LO]
179 ldr r4,[r0,#40+HI]
180 str r3,[sp,#40+0]
181 str r4,[sp,#40+4]
182
183 .L00_15:
184 #if __ARM_ARCH__<7
185 ldrb r3,[r1,#7]
186 ldrb r9, [r1,#6]
187 ldrb r10, [r1,#5]
188 ldrb r11, [r1,#4]
189 ldrb r4,[r1,#3]
190 ldrb r12, [r1,#2]
191 orr r3,r3,r9,lsl#8
192 ldrb r9, [r1,#1]
193 orr r3,r3,r10,lsl#16
194 ldrb r10, [r1],#8
195 orr r3,r3,r11,lsl#24
196 orr r4,r4,r12,lsl#8
197 orr r4,r4,r9,lsl#16
198 orr r4,r4,r10,lsl#24
199 #else
200 ldr r3,[r1,#4]
201 ldr r4,[r1],#8
202 #ifdef __ARMEL__
203 rev r3,r3
204 rev r4,r4
205 #endif
206 #endif
207 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
208 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
209 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
210 mov r9,r7,lsr#14
211 str r3,[sp,#64+0]
212 mov r10,r8,lsr#14
213 str r4,[sp,#64+4]
214 eor r9,r9,r8,lsl#18
215 ldr r11,[sp,#56+0] @ h.lo
216 eor r10,r10,r7,lsl#18
217 ldr r12,[sp,#56+4] @ h.hi
218 eor r9,r9,r7,lsr#18
219 eor r10,r10,r8,lsr#18
220 eor r9,r9,r8,lsl#14
221 eor r10,r10,r7,lsl#14
222 eor r9,r9,r8,lsr#9
223 eor r10,r10,r7,lsr#9
224 eor r9,r9,r7,lsl#23
225 eor r10,r10,r8,lsl#23 @ Sigma1(e)
226 adds r3,r3,r9
227 ldr r9,[sp,#40+0] @ f.lo
228 adc r4,r4,r10 @ T += Sigma1(e)
229 ldr r10,[sp,#40+4] @ f.hi
230 adds r3,r3,r11
231 ldr r11,[sp,#48+0] @ g.lo
232 adc r4,r4,r12 @ T += h
233 ldr r12,[sp,#48+4] @ g.hi
234
235 eor r9,r9,r11
236 str r7,[sp,#32+0]
237 eor r10,r10,r12
238 str r8,[sp,#32+4]
239 and r9,r9,r7
240 str r5,[sp,#0+0]
241 and r10,r10,r8
242 str r6,[sp,#0+4]
243 eor r9,r9,r11
244 ldr r11,[r14,#LO] @ K[i].lo
245 eor r10,r10,r12 @ Ch(e,f,g)
246 ldr r12,[r14,#HI] @ K[i].hi
247
248 adds r3,r3,r9
249 ldr r7,[sp,#24+0] @ d.lo
250 adc r4,r4,r10 @ T += Ch(e,f,g)
251 ldr r8,[sp,#24+4] @ d.hi
252 adds r3,r3,r11
253 and r9,r11,#0xff
254 adc r4,r4,r12 @ T += K[i]
255 adds r7,r7,r3
256 ldr r11,[sp,#8+0] @ b.lo
257 adc r8,r8,r4 @ d += T
258 teq r9,#148
259
260 ldr r12,[sp,#16+0] @ c.lo
261 #if __ARM_ARCH__>=7
262 it eq @ Thumb2 thing, sanity check in ARM
263 #endif
264 orreq r14,r14,#1
265 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
266 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
267 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
268 mov r9,r5,lsr#28
269 mov r10,r6,lsr#28
270 eor r9,r9,r6,lsl#4
271 eor r10,r10,r5,lsl#4
272 eor r9,r9,r6,lsr#2
273 eor r10,r10,r5,lsr#2
274 eor r9,r9,r5,lsl#30
275 eor r10,r10,r6,lsl#30
276 eor r9,r9,r6,lsr#7
277 eor r10,r10,r5,lsr#7
278 eor r9,r9,r5,lsl#25
279 eor r10,r10,r6,lsl#25 @ Sigma0(a)
280 adds r3,r3,r9
281 and r9,r5,r11
282 adc r4,r4,r10 @ T += Sigma0(a)
283
284 ldr r10,[sp,#8+4] @ b.hi
285 orr r5,r5,r11
286 ldr r11,[sp,#16+4] @ c.hi
287 and r5,r5,r12
288 and r12,r6,r10
289 orr r6,r6,r10
290 orr r5,r5,r9 @ Maj(a,b,c).lo
291 and r6,r6,r11
292 adds r5,r5,r3
293 orr r6,r6,r12 @ Maj(a,b,c).hi
294 sub sp,sp,#8
295 adc r6,r6,r4 @ h += T
296 tst r14,#1
297 add r14,r14,#8
298 tst r14,#1
299 beq .L00_15
300 ldr r9,[sp,#184+0]
301 ldr r10,[sp,#184+4]
302 bic r14,r14,#1
303 .L16_79:
304 @ sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7))
305 @ LO lo>>1^hi<<31 ^ lo>>8^hi<<24 ^ lo>>7^hi<<25
306 @ HI hi>>1^lo<<31 ^ hi>>8^lo<<24 ^ hi>>7
307 mov r3,r9,lsr#1
308 ldr r11,[sp,#80+0]
309 mov r4,r10,lsr#1
310 ldr r12,[sp,#80+4]
311 eor r3,r3,r10,lsl#31
312 eor r4,r4,r9,lsl#31
313 eor r3,r3,r9,lsr#8
314 eor r4,r4,r10,lsr#8
315 eor r3,r3,r10,lsl#24
316 eor r4,r4,r9,lsl#24
317 eor r3,r3,r9,lsr#7
318 eor r4,r4,r10,lsr#7
319 eor r3,r3,r10,lsl#25
320
321 @ sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6))
322 @ LO lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26
323 @ HI hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6
324 mov r9,r11,lsr#19
325 mov r10,r12,lsr#19
326 eor r9,r9,r12,lsl#13
327 eor r10,r10,r11,lsl#13
328 eor r9,r9,r12,lsr#29
329 eor r10,r10,r11,lsr#29
330 eor r9,r9,r11,lsl#3
331 eor r10,r10,r12,lsl#3
332 eor r9,r9,r11,lsr#6
333 eor r10,r10,r12,lsr#6
334 ldr r11,[sp,#120+0]
335 eor r9,r9,r12,lsl#26
336
337 ldr r12,[sp,#120+4]
338 adds r3,r3,r9
339 ldr r9,[sp,#192+0]
340 adc r4,r4,r10
341
342 ldr r10,[sp,#192+4]
343 adds r3,r3,r11
344 adc r4,r4,r12
345 adds r3,r3,r9
346 adc r4,r4,r10
347 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
348 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
349 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
350 mov r9,r7,lsr#14
351 str r3,[sp,#64+0]
352 mov r10,r8,lsr#14
353 str r4,[sp,#64+4]
354 eor r9,r9,r8,lsl#18
355 ldr r11,[sp,#56+0] @ h.lo
356 eor r10,r10,r7,lsl#18
357 ldr r12,[sp,#56+4] @ h.hi
358 eor r9,r9,r7,lsr#18
359 eor r10,r10,r8,lsr#18
360 eor r9,r9,r8,lsl#14
361 eor r10,r10,r7,lsl#14
362 eor r9,r9,r8,lsr#9
363 eor r10,r10,r7,lsr#9
364 eor r9,r9,r7,lsl#23
365 eor r10,r10,r8,lsl#23 @ Sigma1(e)
366 adds r3,r3,r9
367 ldr r9,[sp,#40+0] @ f.lo
368 adc r4,r4,r10 @ T += Sigma1(e)
369 ldr r10,[sp,#40+4] @ f.hi
370 adds r3,r3,r11
371 ldr r11,[sp,#48+0] @ g.lo
372 adc r4,r4,r12 @ T += h
373 ldr r12,[sp,#48+4] @ g.hi
374
375 eor r9,r9,r11
376 str r7,[sp,#32+0]
377 eor r10,r10,r12
378 str r8,[sp,#32+4]
379 and r9,r9,r7
380 str r5,[sp,#0+0]
381 and r10,r10,r8
382 str r6,[sp,#0+4]
383 eor r9,r9,r11
384 ldr r11,[r14,#LO] @ K[i].lo
385 eor r10,r10,r12 @ Ch(e,f,g)
386 ldr r12,[r14,#HI] @ K[i].hi
387
388 adds r3,r3,r9
389 ldr r7,[sp,#24+0] @ d.lo
390 adc r4,r4,r10 @ T += Ch(e,f,g)
391 ldr r8,[sp,#24+4] @ d.hi
392 adds r3,r3,r11
393 and r9,r11,#0xff
394 adc r4,r4,r12 @ T += K[i]
395 adds r7,r7,r3
396 ldr r11,[sp,#8+0] @ b.lo
397 adc r8,r8,r4 @ d += T
398 teq r9,#23
399
400 ldr r12,[sp,#16+0] @ c.lo
401 #if __ARM_ARCH__>=7
402 it eq @ Thumb2 thing, sanity check in ARM
403 #endif
404 orreq r14,r14,#1
405 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
406 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
407 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
408 mov r9,r5,lsr#28
409 mov r10,r6,lsr#28
410 eor r9,r9,r6,lsl#4
411 eor r10,r10,r5,lsl#4
412 eor r9,r9,r6,lsr#2
413 eor r10,r10,r5,lsr#2
414 eor r9,r9,r5,lsl#30
415 eor r10,r10,r6,lsl#30
416 eor r9,r9,r6,lsr#7
417 eor r10,r10,r5,lsr#7
418 eor r9,r9,r5,lsl#25
419 eor r10,r10,r6,lsl#25 @ Sigma0(a)
420 adds r3,r3,r9
421 and r9,r5,r11
422 adc r4,r4,r10 @ T += Sigma0(a)
423
424 ldr r10,[sp,#8+4] @ b.hi
425 orr r5,r5,r11
426 ldr r11,[sp,#16+4] @ c.hi
427 and r5,r5,r12
428 and r12,r6,r10
429 orr r6,r6,r10
430 orr r5,r5,r9 @ Maj(a,b,c).lo
431 and r6,r6,r11
432 adds r5,r5,r3
433 orr r6,r6,r12 @ Maj(a,b,c).hi
434 sub sp,sp,#8
435 adc r6,r6,r4 @ h += T
436 tst r14,#1
437 add r14,r14,#8
438 #if __ARM_ARCH__>=7
439 ittt eq @ Thumb2 thing, sanity check in ARM
440 #endif
441 ldreq r9,[sp,#184+0]
442 ldreq r10,[sp,#184+4]
443 beq .L16_79
444 bic r14,r14,#1
445
446 ldr r3,[sp,#8+0]
447 ldr r4,[sp,#8+4]
448 ldr r9, [r0,#0+LO]
449 ldr r10, [r0,#0+HI]
450 ldr r11, [r0,#8+LO]
451 ldr r12, [r0,#8+HI]
452 adds r9,r5,r9
453 str r9, [r0,#0+LO]
454 adc r10,r6,r10
455 str r10, [r0,#0+HI]
456 adds r11,r3,r11
457 str r11, [r0,#8+LO]
458 adc r12,r4,r12
459 str r12, [r0,#8+HI]
460
461 ldr r5,[sp,#16+0]
462 ldr r6,[sp,#16+4]
463 ldr r3,[sp,#24+0]
464 ldr r4,[sp,#24+4]
465 ldr r9, [r0,#16+LO]
466 ldr r10, [r0,#16+HI]
467 ldr r11, [r0,#24+LO]
468 ldr r12, [r0,#24+HI]
469 adds r9,r5,r9
470 str r9, [r0,#16+LO]
471 adc r10,r6,r10
472 str r10, [r0,#16+HI]
473 adds r11,r3,r11
474 str r11, [r0,#24+LO]
475 adc r12,r4,r12
476 str r12, [r0,#24+HI]
477
478 ldr r3,[sp,#40+0]
479 ldr r4,[sp,#40+4]
480 ldr r9, [r0,#32+LO]
481 ldr r10, [r0,#32+HI]
482 ldr r11, [r0,#40+LO]
483 ldr r12, [r0,#40+HI]
484 adds r7,r7,r9
485 str r7,[r0,#32+LO]
486 adc r8,r8,r10
487 str r8,[r0,#32+HI]
488 adds r11,r3,r11
489 str r11, [r0,#40+LO]
490 adc r12,r4,r12
491 str r12, [r0,#40+HI]
492
493 ldr r5,[sp,#48+0]
494 ldr r6,[sp,#48+4]
495 ldr r3,[sp,#56+0]
496 ldr r4,[sp,#56+4]
497 ldr r9, [r0,#48+LO]
498 ldr r10, [r0,#48+HI]
499 ldr r11, [r0,#56+LO]
500 ldr r12, [r0,#56+HI]
501 adds r9,r5,r9
502 str r9, [r0,#48+LO]
503 adc r10,r6,r10
504 str r10, [r0,#48+HI]
505 adds r11,r3,r11
506 str r11, [r0,#56+LO]
507 adc r12,r4,r12
508 str r12, [r0,#56+HI]
509
510 add sp,sp,#640
511 sub r14,r14,#640
512
513 teq r1,r2
514 bne .Loop
515
516 add sp,sp,#8*9 @ destroy frame
517 #if __ARM_ARCH__>=5
518 ldmia sp!,{r4-r12,pc}
519 #else
520 ldmia sp!,{r4-r12,lr}
521 tst lr,#1
522 moveq pc,lr @ be binary compatible with V4, yet
523 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
524 #endif
525 .size sha512_block_data_order,.-sha512_block_data_order
526 #if __ARM_MAX_ARCH__>=7
527 .arch armv7-a
528 .fpu neon
529
530 .global sha512_block_data_order_neon
531 .type sha512_block_data_order_neon,%function
532 .align 4
533 sha512_block_data_order_neon:
534 .LNEON:
535 dmb @ errata #451034 on early Cortex A8
536 add r2,r1,r2,lsl#7 @ len to point at the end of inp
537 VFP_ABI_PUSH
538 adrl r3,K512
539 vldmia r0,{d16-d23} @ load context
540 .Loop_neon:
541 vshr.u64 d24,d20,#14 @ 0
542 #if 0<16
543 vld1.64 {d0},[r1]! @ handles unaligned
544 #endif
545 vshr.u64 d25,d20,#18
546 #if 0>0
547 vadd.i64 d16,d30 @ h+=Maj from the past
548 #endif
549 vshr.u64 d26,d20,#41
550 vld1.64 {d28},[r3,:64]! @ K[i++]
551 vsli.64 d24,d20,#50
552 vsli.64 d25,d20,#46
553 vmov d29,d20
554 vsli.64 d26,d20,#23
555 #if 0<16 && defined(__ARMEL__)
556 vrev64.8 d0,d0
557 #endif
558 veor d25,d24
559 vbsl d29,d21,d22 @ Ch(e,f,g)
560 vshr.u64 d24,d16,#28
561 veor d26,d25 @ Sigma1(e)
562 vadd.i64 d27,d29,d23
563 vshr.u64 d25,d16,#34
564 vsli.64 d24,d16,#36
565 vadd.i64 d27,d26
566 vshr.u64 d26,d16,#39
567 vadd.i64 d28,d0
568 vsli.64 d25,d16,#30
569 veor d30,d16,d17
570 vsli.64 d26,d16,#25
571 veor d23,d24,d25
572 vadd.i64 d27,d28
573 vbsl d30,d18,d17 @ Maj(a,b,c)
574 veor d23,d26 @ Sigma0(a)
575 vadd.i64 d19,d27
576 vadd.i64 d30,d27
577 @ vadd.i64 d23,d30
578 vshr.u64 d24,d19,#14 @ 1
579 #if 1<16
580 vld1.64 {d1},[r1]! @ handles unaligned
581 #endif
582 vshr.u64 d25,d19,#18
583 #if 1>0
584 vadd.i64 d23,d30 @ h+=Maj from the past
585 #endif
586 vshr.u64 d26,d19,#41
587 vld1.64 {d28},[r3,:64]! @ K[i++]
588 vsli.64 d24,d19,#50
589 vsli.64 d25,d19,#46
590 vmov d29,d19
591 vsli.64 d26,d19,#23
592 #if 1<16 && defined(__ARMEL__)
593 vrev64.8 d1,d1
594 #endif
595 veor d25,d24
596 vbsl d29,d20,d21 @ Ch(e,f,g)
597 vshr.u64 d24,d23,#28
598 veor d26,d25 @ Sigma1(e)
599 vadd.i64 d27,d29,d22
600 vshr.u64 d25,d23,#34
601 vsli.64 d24,d23,#36
602 vadd.i64 d27,d26
603 vshr.u64 d26,d23,#39
604 vadd.i64 d28,d1
605 vsli.64 d25,d23,#30
606 veor d30,d23,d16
607 vsli.64 d26,d23,#25
608 veor d22,d24,d25
609 vadd.i64 d27,d28
610 vbsl d30,d17,d16 @ Maj(a,b,c)
611 veor d22,d26 @ Sigma0(a)
612 vadd.i64 d18,d27
613 vadd.i64 d30,d27
614 @ vadd.i64 d22,d30
615 vshr.u64 d24,d18,#14 @ 2
616 #if 2<16
617 vld1.64 {d2},[r1]! @ handles unaligned
618 #endif
619 vshr.u64 d25,d18,#18
620 #if 2>0
621 vadd.i64 d22,d30 @ h+=Maj from the past
622 #endif
623 vshr.u64 d26,d18,#41
624 vld1.64 {d28},[r3,:64]! @ K[i++]
625 vsli.64 d24,d18,#50
626 vsli.64 d25,d18,#46
627 vmov d29,d18
628 vsli.64 d26,d18,#23
629 #if 2<16 && defined(__ARMEL__)
630 vrev64.8 d2,d2
631 #endif
632 veor d25,d24
633 vbsl d29,d19,d20 @ Ch(e,f,g)
634 vshr.u64 d24,d22,#28
635 veor d26,d25 @ Sigma1(e)
636 vadd.i64 d27,d29,d21
637 vshr.u64 d25,d22,#34
638 vsli.64 d24,d22,#36
639 vadd.i64 d27,d26
640 vshr.u64 d26,d22,#39
641 vadd.i64 d28,d2
642 vsli.64 d25,d22,#30
643 veor d30,d22,d23
644 vsli.64 d26,d22,#25
645 veor d21,d24,d25
646 vadd.i64 d27,d28
647 vbsl d30,d16,d23 @ Maj(a,b,c)
648 veor d21,d26 @ Sigma0(a)
649 vadd.i64 d17,d27
650 vadd.i64 d30,d27
651 @ vadd.i64 d21,d30
652 vshr.u64 d24,d17,#14 @ 3
653 #if 3<16
654 vld1.64 {d3},[r1]! @ handles unaligned
655 #endif
656 vshr.u64 d25,d17,#18
657 #if 3>0
658 vadd.i64 d21,d30 @ h+=Maj from the past
659 #endif
660 vshr.u64 d26,d17,#41
661 vld1.64 {d28},[r3,:64]! @ K[i++]
662 vsli.64 d24,d17,#50
663 vsli.64 d25,d17,#46
664 vmov d29,d17
665 vsli.64 d26,d17,#23
666 #if 3<16 && defined(__ARMEL__)
667 vrev64.8 d3,d3
668 #endif
669 veor d25,d24
670 vbsl d29,d18,d19 @ Ch(e,f,g)
671 vshr.u64 d24,d21,#28
672 veor d26,d25 @ Sigma1(e)
673 vadd.i64 d27,d29,d20
674 vshr.u64 d25,d21,#34
675 vsli.64 d24,d21,#36
676 vadd.i64 d27,d26
677 vshr.u64 d26,d21,#39
678 vadd.i64 d28,d3
679 vsli.64 d25,d21,#30
680 veor d30,d21,d22
681 vsli.64 d26,d21,#25
682 veor d20,d24,d25
683 vadd.i64 d27,d28
684 vbsl d30,d23,d22 @ Maj(a,b,c)
685 veor d20,d26 @ Sigma0(a)
686 vadd.i64 d16,d27
687 vadd.i64 d30,d27
688 @ vadd.i64 d20,d30
689 vshr.u64 d24,d16,#14 @ 4
690 #if 4<16
691 vld1.64 {d4},[r1]! @ handles unaligned
692 #endif
693 vshr.u64 d25,d16,#18
694 #if 4>0
695 vadd.i64 d20,d30 @ h+=Maj from the past
696 #endif
697 vshr.u64 d26,d16,#41
698 vld1.64 {d28},[r3,:64]! @ K[i++]
699 vsli.64 d24,d16,#50
700 vsli.64 d25,d16,#46
701 vmov d29,d16
702 vsli.64 d26,d16,#23
703 #if 4<16 && defined(__ARMEL__)
704 vrev64.8 d4,d4
705 #endif
706 veor d25,d24
707 vbsl d29,d17,d18 @ Ch(e,f,g)
708 vshr.u64 d24,d20,#28
709 veor d26,d25 @ Sigma1(e)
710 vadd.i64 d27,d29,d19
711 vshr.u64 d25,d20,#34
712 vsli.64 d24,d20,#36
713 vadd.i64 d27,d26
714 vshr.u64 d26,d20,#39
715 vadd.i64 d28,d4
716 vsli.64 d25,d20,#30
717 veor d30,d20,d21
718 vsli.64 d26,d20,#25
719 veor d19,d24,d25
720 vadd.i64 d27,d28
721 vbsl d30,d22,d21 @ Maj(a,b,c)
722 veor d19,d26 @ Sigma0(a)
723 vadd.i64 d23,d27
724 vadd.i64 d30,d27
725 @ vadd.i64 d19,d30
726 vshr.u64 d24,d23,#14 @ 5
727 #if 5<16
728 vld1.64 {d5},[r1]! @ handles unaligned
729 #endif
730 vshr.u64 d25,d23,#18
731 #if 5>0
732 vadd.i64 d19,d30 @ h+=Maj from the past
733 #endif
734 vshr.u64 d26,d23,#41
735 vld1.64 {d28},[r3,:64]! @ K[i++]
736 vsli.64 d24,d23,#50
737 vsli.64 d25,d23,#46
738 vmov d29,d23
739 vsli.64 d26,d23,#23
740 #if 5<16 && defined(__ARMEL__)
741 vrev64.8 d5,d5
742 #endif
743 veor d25,d24
744 vbsl d29,d16,d17 @ Ch(e,f,g)
745 vshr.u64 d24,d19,#28
746 veor d26,d25 @ Sigma1(e)
747 vadd.i64 d27,d29,d18
748 vshr.u64 d25,d19,#34
749 vsli.64 d24,d19,#36
750 vadd.i64 d27,d26
751 vshr.u64 d26,d19,#39
752 vadd.i64 d28,d5
753 vsli.64 d25,d19,#30
754 veor d30,d19,d20
755 vsli.64 d26,d19,#25
756 veor d18,d24,d25
757 vadd.i64 d27,d28
758 vbsl d30,d21,d20 @ Maj(a,b,c)
759 veor d18,d26 @ Sigma0(a)
760 vadd.i64 d22,d27
761 vadd.i64 d30,d27
762 @ vadd.i64 d18,d30
763 vshr.u64 d24,d22,#14 @ 6
764 #if 6<16
765 vld1.64 {d6},[r1]! @ handles unaligned
766 #endif
767 vshr.u64 d25,d22,#18
768 #if 6>0
769 vadd.i64 d18,d30 @ h+=Maj from the past
770 #endif
771 vshr.u64 d26,d22,#41
772 vld1.64 {d28},[r3,:64]! @ K[i++]
773 vsli.64 d24,d22,#50
774 vsli.64 d25,d22,#46
775 vmov d29,d22
776 vsli.64 d26,d22,#23
777 #if 6<16 && defined(__ARMEL__)
778 vrev64.8 d6,d6
779 #endif
780 veor d25,d24
781 vbsl d29,d23,d16 @ Ch(e,f,g)
782 vshr.u64 d24,d18,#28
783 veor d26,d25 @ Sigma1(e)
784 vadd.i64 d27,d29,d17
785 vshr.u64 d25,d18,#34
786 vsli.64 d24,d18,#36
787 vadd.i64 d27,d26
788 vshr.u64 d26,d18,#39
789 vadd.i64 d28,d6
790 vsli.64 d25,d18,#30
791 veor d30,d18,d19
792 vsli.64 d26,d18,#25
793 veor d17,d24,d25
794 vadd.i64 d27,d28
795 vbsl d30,d20,d19 @ Maj(a,b,c)
796 veor d17,d26 @ Sigma0(a)
797 vadd.i64 d21,d27
798 vadd.i64 d30,d27
799 @ vadd.i64 d17,d30
800 vshr.u64 d24,d21,#14 @ 7
801 #if 7<16
802 vld1.64 {d7},[r1]! @ handles unaligned
803 #endif
804 vshr.u64 d25,d21,#18
805 #if 7>0
806 vadd.i64 d17,d30 @ h+=Maj from the past
807 #endif
808 vshr.u64 d26,d21,#41
809 vld1.64 {d28},[r3,:64]! @ K[i++]
810 vsli.64 d24,d21,#50
811 vsli.64 d25,d21,#46
812 vmov d29,d21
813 vsli.64 d26,d21,#23
814 #if 7<16 && defined(__ARMEL__)
815 vrev64.8 d7,d7
816 #endif
817 veor d25,d24
818 vbsl d29,d22,d23 @ Ch(e,f,g)
819 vshr.u64 d24,d17,#28
820 veor d26,d25 @ Sigma1(e)
821 vadd.i64 d27,d29,d16
822 vshr.u64 d25,d17,#34
823 vsli.64 d24,d17,#36
824 vadd.i64 d27,d26
825 vshr.u64 d26,d17,#39
826 vadd.i64 d28,d7
827 vsli.64 d25,d17,#30
828 veor d30,d17,d18
829 vsli.64 d26,d17,#25
830 veor d16,d24,d25
831 vadd.i64 d27,d28
832 vbsl d30,d19,d18 @ Maj(a,b,c)
833 veor d16,d26 @ Sigma0(a)
834 vadd.i64 d20,d27
835 vadd.i64 d30,d27
836 @ vadd.i64 d16,d30
837 vshr.u64 d24,d20,#14 @ 8
838 #if 8<16
839 vld1.64 {d8},[r1]! @ handles unaligned
840 #endif
841 vshr.u64 d25,d20,#18
842 #if 8>0
843 vadd.i64 d16,d30 @ h+=Maj from the past
844 #endif
845 vshr.u64 d26,d20,#41
846 vld1.64 {d28},[r3,:64]! @ K[i++]
847 vsli.64 d24,d20,#50
848 vsli.64 d25,d20,#46
849 vmov d29,d20
850 vsli.64 d26,d20,#23
851 #if 8<16 && defined(__ARMEL__)
852 vrev64.8 d8,d8
853 #endif
854 veor d25,d24
855 vbsl d29,d21,d22 @ Ch(e,f,g)
856 vshr.u64 d24,d16,#28
857 veor d26,d25 @ Sigma1(e)
858 vadd.i64 d27,d29,d23
859 vshr.u64 d25,d16,#34
860 vsli.64 d24,d16,#36
861 vadd.i64 d27,d26
862 vshr.u64 d26,d16,#39
863 vadd.i64 d28,d8
864 vsli.64 d25,d16,#30
865 veor d30,d16,d17
866 vsli.64 d26,d16,#25
867 veor d23,d24,d25
868 vadd.i64 d27,d28
869 vbsl d30,d18,d17 @ Maj(a,b,c)
870 veor d23,d26 @ Sigma0(a)
871 vadd.i64 d19,d27
872 vadd.i64 d30,d27
873 @ vadd.i64 d23,d30
874 vshr.u64 d24,d19,#14 @ 9
875 #if 9<16
876 vld1.64 {d9},[r1]! @ handles unaligned
877 #endif
878 vshr.u64 d25,d19,#18
879 #if 9>0
880 vadd.i64 d23,d30 @ h+=Maj from the past
881 #endif
882 vshr.u64 d26,d19,#41
883 vld1.64 {d28},[r3,:64]! @ K[i++]
884 vsli.64 d24,d19,#50
885 vsli.64 d25,d19,#46
886 vmov d29,d19
887 vsli.64 d26,d19,#23
888 #if 9<16 && defined(__ARMEL__)
889 vrev64.8 d9,d9
890 #endif
891 veor d25,d24
892 vbsl d29,d20,d21 @ Ch(e,f,g)
893 vshr.u64 d24,d23,#28
894 veor d26,d25 @ Sigma1(e)
895 vadd.i64 d27,d29,d22
896 vshr.u64 d25,d23,#34
897 vsli.64 d24,d23,#36
898 vadd.i64 d27,d26
899 vshr.u64 d26,d23,#39
900 vadd.i64 d28,d9
901 vsli.64 d25,d23,#30
902 veor d30,d23,d16
903 vsli.64 d26,d23,#25
904 veor d22,d24,d25
905 vadd.i64 d27,d28
906 vbsl d30,d17,d16 @ Maj(a,b,c)
907 veor d22,d26 @ Sigma0(a)
908 vadd.i64 d18,d27
909 vadd.i64 d30,d27
910 @ vadd.i64 d22,d30
911 vshr.u64 d24,d18,#14 @ 10
912 #if 10<16
913 vld1.64 {d10},[r1]! @ handles unaligned
914 #endif
915 vshr.u64 d25,d18,#18
916 #if 10>0
917 vadd.i64 d22,d30 @ h+=Maj from the past
918 #endif
919 vshr.u64 d26,d18,#41
920 vld1.64 {d28},[r3,:64]! @ K[i++]
921 vsli.64 d24,d18,#50
922 vsli.64 d25,d18,#46
923 vmov d29,d18
924 vsli.64 d26,d18,#23
925 #if 10<16 && defined(__ARMEL__)
926 vrev64.8 d10,d10
927 #endif
928 veor d25,d24
929 vbsl d29,d19,d20 @ Ch(e,f,g)
930 vshr.u64 d24,d22,#28
931 veor d26,d25 @ Sigma1(e)
932 vadd.i64 d27,d29,d21
933 vshr.u64 d25,d22,#34
934 vsli.64 d24,d22,#36
935 vadd.i64 d27,d26
936 vshr.u64 d26,d22,#39
937 vadd.i64 d28,d10
938 vsli.64 d25,d22,#30
939 veor d30,d22,d23
940 vsli.64 d26,d22,#25
941 veor d21,d24,d25
942 vadd.i64 d27,d28
943 vbsl d30,d16,d23 @ Maj(a,b,c)
944 veor d21,d26 @ Sigma0(a)
945 vadd.i64 d17,d27
946 vadd.i64 d30,d27
947 @ vadd.i64 d21,d30
948 vshr.u64 d24,d17,#14 @ 11
949 #if 11<16
950 vld1.64 {d11},[r1]! @ handles unaligned
951 #endif
952 vshr.u64 d25,d17,#18
953 #if 11>0
954 vadd.i64 d21,d30 @ h+=Maj from the past
955 #endif
956 vshr.u64 d26,d17,#41
957 vld1.64 {d28},[r3,:64]! @ K[i++]
958 vsli.64 d24,d17,#50
959 vsli.64 d25,d17,#46
960 vmov d29,d17
961 vsli.64 d26,d17,#23
962 #if 11<16 && defined(__ARMEL__)
963 vrev64.8 d11,d11
964 #endif
965 veor d25,d24
966 vbsl d29,d18,d19 @ Ch(e,f,g)
967 vshr.u64 d24,d21,#28
968 veor d26,d25 @ Sigma1(e)
969 vadd.i64 d27,d29,d20
970 vshr.u64 d25,d21,#34
971 vsli.64 d24,d21,#36
972 vadd.i64 d27,d26
973 vshr.u64 d26,d21,#39
974 vadd.i64 d28,d11
975 vsli.64 d25,d21,#30
976 veor d30,d21,d22
977 vsli.64 d26,d21,#25
978 veor d20,d24,d25
979 vadd.i64 d27,d28
980 vbsl d30,d23,d22 @ Maj(a,b,c)
981 veor d20,d26 @ Sigma0(a)
982 vadd.i64 d16,d27
983 vadd.i64 d30,d27
984 @ vadd.i64 d20,d30
985 vshr.u64 d24,d16,#14 @ 12
986 #if 12<16
987 vld1.64 {d12},[r1]! @ handles unaligned
988 #endif
989 vshr.u64 d25,d16,#18
990 #if 12>0
991 vadd.i64 d20,d30 @ h+=Maj from the past
992 #endif
993 vshr.u64 d26,d16,#41
994 vld1.64 {d28},[r3,:64]! @ K[i++]
995 vsli.64 d24,d16,#50
996 vsli.64 d25,d16,#46
997 vmov d29,d16
998 vsli.64 d26,d16,#23
999 #if 12<16 && defined(__ARMEL__)
1000 vrev64.8 d12,d12
1001 #endif
1002 veor d25,d24
1003 vbsl d29,d17,d18 @ Ch(e,f,g)
1004 vshr.u64 d24,d20,#28
1005 veor d26,d25 @ Sigma1(e)
1006 vadd.i64 d27,d29,d19
1007 vshr.u64 d25,d20,#34
1008 vsli.64 d24,d20,#36
1009 vadd.i64 d27,d26
1010 vshr.u64 d26,d20,#39
1011 vadd.i64 d28,d12
1012 vsli.64 d25,d20,#30
1013 veor d30,d20,d21
1014 vsli.64 d26,d20,#25
1015 veor d19,d24,d25
1016 vadd.i64 d27,d28
1017 vbsl d30,d22,d21 @ Maj(a,b,c)
1018 veor d19,d26 @ Sigma0(a)
1019 vadd.i64 d23,d27
1020 vadd.i64 d30,d27
1021 @ vadd.i64 d19,d30
1022 vshr.u64 d24,d23,#14 @ 13
1023 #if 13<16
1024 vld1.64 {d13},[r1]! @ handles unaligned
1025 #endif
1026 vshr.u64 d25,d23,#18
1027 #if 13>0
1028 vadd.i64 d19,d30 @ h+=Maj from the past
1029 #endif
1030 vshr.u64 d26,d23,#41
1031 vld1.64 {d28},[r3,:64]! @ K[i++]
1032 vsli.64 d24,d23,#50
1033 vsli.64 d25,d23,#46
1034 vmov d29,d23
1035 vsli.64 d26,d23,#23
1036 #if 13<16 && defined(__ARMEL__)
1037 vrev64.8 d13,d13
1038 #endif
1039 veor d25,d24
1040 vbsl d29,d16,d17 @ Ch(e,f,g)
1041 vshr.u64 d24,d19,#28
1042 veor d26,d25 @ Sigma1(e)
1043 vadd.i64 d27,d29,d18
1044 vshr.u64 d25,d19,#34
1045 vsli.64 d24,d19,#36
1046 vadd.i64 d27,d26
1047 vshr.u64 d26,d19,#39
1048 vadd.i64 d28,d13
1049 vsli.64 d25,d19,#30
1050 veor d30,d19,d20
1051 vsli.64 d26,d19,#25
1052 veor d18,d24,d25
1053 vadd.i64 d27,d28
1054 vbsl d30,d21,d20 @ Maj(a,b,c)
1055 veor d18,d26 @ Sigma0(a)
1056 vadd.i64 d22,d27
1057 vadd.i64 d30,d27
1058 @ vadd.i64 d18,d30
1059 vshr.u64 d24,d22,#14 @ 14
1060 #if 14<16
1061 vld1.64 {d14},[r1]! @ handles unaligned
1062 #endif
1063 vshr.u64 d25,d22,#18
1064 #if 14>0
1065 vadd.i64 d18,d30 @ h+=Maj from the past
1066 #endif
1067 vshr.u64 d26,d22,#41
1068 vld1.64 {d28},[r3,:64]! @ K[i++]
1069 vsli.64 d24,d22,#50
1070 vsli.64 d25,d22,#46
1071 vmov d29,d22
1072 vsli.64 d26,d22,#23
1073 #if 14<16 && defined(__ARMEL__)
1074 vrev64.8 d14,d14
1075 #endif
1076 veor d25,d24
1077 vbsl d29,d23,d16 @ Ch(e,f,g)
1078 vshr.u64 d24,d18,#28
1079 veor d26,d25 @ Sigma1(e)
1080 vadd.i64 d27,d29,d17
1081 vshr.u64 d25,d18,#34
1082 vsli.64 d24,d18,#36
1083 vadd.i64 d27,d26
1084 vshr.u64 d26,d18,#39
1085 vadd.i64 d28,d14
1086 vsli.64 d25,d18,#30
1087 veor d30,d18,d19
1088 vsli.64 d26,d18,#25
1089 veor d17,d24,d25
1090 vadd.i64 d27,d28
1091 vbsl d30,d20,d19 @ Maj(a,b,c)
1092 veor d17,d26 @ Sigma0(a)
1093 vadd.i64 d21,d27
1094 vadd.i64 d30,d27
1095 @ vadd.i64 d17,d30
1096 vshr.u64 d24,d21,#14 @ 15
1097 #if 15<16
1098 vld1.64 {d15},[r1]! @ handles unaligned
1099 #endif
1100 vshr.u64 d25,d21,#18
1101 #if 15>0
1102 vadd.i64 d17,d30 @ h+=Maj from the past
1103 #endif
1104 vshr.u64 d26,d21,#41
1105 vld1.64 {d28},[r3,:64]! @ K[i++]
1106 vsli.64 d24,d21,#50
1107 vsli.64 d25,d21,#46
1108 vmov d29,d21
1109 vsli.64 d26,d21,#23
1110 #if 15<16 && defined(__ARMEL__)
1111 vrev64.8 d15,d15
1112 #endif
1113 veor d25,d24
1114 vbsl d29,d22,d23 @ Ch(e,f,g)
1115 vshr.u64 d24,d17,#28
1116 veor d26,d25 @ Sigma1(e)
1117 vadd.i64 d27,d29,d16
1118 vshr.u64 d25,d17,#34
1119 vsli.64 d24,d17,#36
1120 vadd.i64 d27,d26
1121 vshr.u64 d26,d17,#39
1122 vadd.i64 d28,d15
1123 vsli.64 d25,d17,#30
1124 veor d30,d17,d18
1125 vsli.64 d26,d17,#25
1126 veor d16,d24,d25
1127 vadd.i64 d27,d28
1128 vbsl d30,d19,d18 @ Maj(a,b,c)
1129 veor d16,d26 @ Sigma0(a)
1130 vadd.i64 d20,d27
1131 vadd.i64 d30,d27
1132 @ vadd.i64 d16,d30
1133 mov r12,#4
1134 .L16_79_neon:
1135 subs r12,#1
1136 vshr.u64 q12,q7,#19
1137 vshr.u64 q13,q7,#61
1138 vadd.i64 d16,d30 @ h+=Maj from the past
1139 vshr.u64 q15,q7,#6
1140 vsli.64 q12,q7,#45
1141 vext.8 q14,q0,q1,#8 @ X[i+1]
1142 vsli.64 q13,q7,#3
1143 veor q15,q12
1144 vshr.u64 q12,q14,#1
1145 veor q15,q13 @ sigma1(X[i+14])
1146 vshr.u64 q13,q14,#8
1147 vadd.i64 q0,q15
1148 vshr.u64 q15,q14,#7
1149 vsli.64 q12,q14,#63
1150 vsli.64 q13,q14,#56
1151 vext.8 q14,q4,q5,#8 @ X[i+9]
1152 veor q15,q12
1153 vshr.u64 d24,d20,#14 @ from NEON_00_15
1154 vadd.i64 q0,q14
1155 vshr.u64 d25,d20,#18 @ from NEON_00_15
1156 veor q15,q13 @ sigma0(X[i+1])
1157 vshr.u64 d26,d20,#41 @ from NEON_00_15
1158 vadd.i64 q0,q15
1159 vld1.64 {d28},[r3,:64]! @ K[i++]
1160 vsli.64 d24,d20,#50
1161 vsli.64 d25,d20,#46
1162 vmov d29,d20
1163 vsli.64 d26,d20,#23
1164 #if 16<16 && defined(__ARMEL__)
1165 vrev64.8 ,
1166 #endif
1167 veor d25,d24
1168 vbsl d29,d21,d22 @ Ch(e,f,g)
1169 vshr.u64 d24,d16,#28
1170 veor d26,d25 @ Sigma1(e)
1171 vadd.i64 d27,d29,d23
1172 vshr.u64 d25,d16,#34
1173 vsli.64 d24,d16,#36
1174 vadd.i64 d27,d26
1175 vshr.u64 d26,d16,#39
1176 vadd.i64 d28,d0
1177 vsli.64 d25,d16,#30
1178 veor d30,d16,d17
1179 vsli.64 d26,d16,#25
1180 veor d23,d24,d25
1181 vadd.i64 d27,d28
1182 vbsl d30,d18,d17 @ Maj(a,b,c)
1183 veor d23,d26 @ Sigma0(a)
1184 vadd.i64 d19,d27
1185 vadd.i64 d30,d27
1186 @ vadd.i64 d23,d30
1187 vshr.u64 d24,d19,#14 @ 17
1188 #if 17<16
1189 vld1.64 {d1},[r1]! @ handles unaligned
1190 #endif
1191 vshr.u64 d25,d19,#18
1192 #if 17>0
1193 vadd.i64 d23,d30 @ h+=Maj from the past
1194 #endif
1195 vshr.u64 d26,d19,#41
1196 vld1.64 {d28},[r3,:64]! @ K[i++]
1197 vsli.64 d24,d19,#50
1198 vsli.64 d25,d19,#46
1199 vmov d29,d19
1200 vsli.64 d26,d19,#23
1201 #if 17<16 && defined(__ARMEL__)
1202 vrev64.8 ,
1203 #endif
1204 veor d25,d24
1205 vbsl d29,d20,d21 @ Ch(e,f,g)
1206 vshr.u64 d24,d23,#28
1207 veor d26,d25 @ Sigma1(e)
1208 vadd.i64 d27,d29,d22
1209 vshr.u64 d25,d23,#34
1210 vsli.64 d24,d23,#36
1211 vadd.i64 d27,d26
1212 vshr.u64 d26,d23,#39
1213 vadd.i64 d28,d1
1214 vsli.64 d25,d23,#30
1215 veor d30,d23,d16
1216 vsli.64 d26,d23,#25
1217 veor d22,d24,d25
1218 vadd.i64 d27,d28
1219 vbsl d30,d17,d16 @ Maj(a,b,c)
1220 veor d22,d26 @ Sigma0(a)
1221 vadd.i64 d18,d27
1222 vadd.i64 d30,d27
1223 @ vadd.i64 d22,d30
1224 vshr.u64 q12,q0,#19
1225 vshr.u64 q13,q0,#61
1226 vadd.i64 d22,d30 @ h+=Maj from the past
1227 vshr.u64 q15,q0,#6
1228 vsli.64 q12,q0,#45
1229 vext.8 q14,q1,q2,#8 @ X[i+1]
1230 vsli.64 q13,q0,#3
1231 veor q15,q12
1232 vshr.u64 q12,q14,#1
1233 veor q15,q13 @ sigma1(X[i+14])
1234 vshr.u64 q13,q14,#8
1235 vadd.i64 q1,q15
1236 vshr.u64 q15,q14,#7
1237 vsli.64 q12,q14,#63
1238 vsli.64 q13,q14,#56
1239 vext.8 q14,q5,q6,#8 @ X[i+9]
1240 veor q15,q12
1241 vshr.u64 d24,d18,#14 @ from NEON_00_15
1242 vadd.i64 q1,q14
1243 vshr.u64 d25,d18,#18 @ from NEON_00_15
1244 veor q15,q13 @ sigma0(X[i+1])
1245 vshr.u64 d26,d18,#41 @ from NEON_00_15
1246 vadd.i64 q1,q15
1247 vld1.64 {d28},[r3,:64]! @ K[i++]
1248 vsli.64 d24,d18,#50
1249 vsli.64 d25,d18,#46
1250 vmov d29,d18
1251 vsli.64 d26,d18,#23
1252 #if 18<16 && defined(__ARMEL__)
1253 vrev64.8 ,
1254 #endif
1255 veor d25,d24
1256 vbsl d29,d19,d20 @ Ch(e,f,g)
1257 vshr.u64 d24,d22,#28
1258 veor d26,d25 @ Sigma1(e)
1259 vadd.i64 d27,d29,d21
1260 vshr.u64 d25,d22,#34
1261 vsli.64 d24,d22,#36
1262 vadd.i64 d27,d26
1263 vshr.u64 d26,d22,#39
1264 vadd.i64 d28,d2
1265 vsli.64 d25,d22,#30
1266 veor d30,d22,d23
1267 vsli.64 d26,d22,#25
1268 veor d21,d24,d25
1269 vadd.i64 d27,d28
1270 vbsl d30,d16,d23 @ Maj(a,b,c)
1271 veor d21,d26 @ Sigma0(a)
1272 vadd.i64 d17,d27
1273 vadd.i64 d30,d27
1274 @ vadd.i64 d21,d30
1275 vshr.u64 d24,d17,#14 @ 19
1276 #if 19<16
1277 vld1.64 {d3},[r1]! @ handles unaligned
1278 #endif
1279 vshr.u64 d25,d17,#18
1280 #if 19>0
1281 vadd.i64 d21,d30 @ h+=Maj from the past
1282 #endif
1283 vshr.u64 d26,d17,#41
1284 vld1.64 {d28},[r3,:64]! @ K[i++]
1285 vsli.64 d24,d17,#50
1286 vsli.64 d25,d17,#46
1287 vmov d29,d17
1288 vsli.64 d26,d17,#23
1289 #if 19<16 && defined(__ARMEL__)
1290 vrev64.8 ,
1291 #endif
1292 veor d25,d24
1293 vbsl d29,d18,d19 @ Ch(e,f,g)
1294 vshr.u64 d24,d21,#28
1295 veor d26,d25 @ Sigma1(e)
1296 vadd.i64 d27,d29,d20
1297 vshr.u64 d25,d21,#34
1298 vsli.64 d24,d21,#36
1299 vadd.i64 d27,d26
1300 vshr.u64 d26,d21,#39
1301 vadd.i64 d28,d3
1302 vsli.64 d25,d21,#30
1303 veor d30,d21,d22
1304 vsli.64 d26,d21,#25
1305 veor d20,d24,d25
1306 vadd.i64 d27,d28
1307 vbsl d30,d23,d22 @ Maj(a,b,c)
1308 veor d20,d26 @ Sigma0(a)
1309 vadd.i64 d16,d27
1310 vadd.i64 d30,d27
1311 @ vadd.i64 d20,d30
1312 vshr.u64 q12,q1,#19
1313 vshr.u64 q13,q1,#61
1314 vadd.i64 d20,d30 @ h+=Maj from the past
1315 vshr.u64 q15,q1,#6
1316 vsli.64 q12,q1,#45
1317 vext.8 q14,q2,q3,#8 @ X[i+1]
1318 vsli.64 q13,q1,#3
1319 veor q15,q12
1320 vshr.u64 q12,q14,#1
1321 veor q15,q13 @ sigma1(X[i+14])
1322 vshr.u64 q13,q14,#8
1323 vadd.i64 q2,q15
1324 vshr.u64 q15,q14,#7
1325 vsli.64 q12,q14,#63
1326 vsli.64 q13,q14,#56
1327 vext.8 q14,q6,q7,#8 @ X[i+9]
1328 veor q15,q12
1329 vshr.u64 d24,d16,#14 @ from NEON_00_15
1330 vadd.i64 q2,q14
1331 vshr.u64 d25,d16,#18 @ from NEON_00_15
1332 veor q15,q13 @ sigma0(X[i+1])
1333 vshr.u64 d26,d16,#41 @ from NEON_00_15
1334 vadd.i64 q2,q15
1335 vld1.64 {d28},[r3,:64]! @ K[i++]
1336 vsli.64 d24,d16,#50
1337 vsli.64 d25,d16,#46
1338 vmov d29,d16
1339 vsli.64 d26,d16,#23
1340 #if 20<16 && defined(__ARMEL__)
1341 vrev64.8 ,
1342 #endif
1343 veor d25,d24
1344 vbsl d29,d17,d18 @ Ch(e,f,g)
1345 vshr.u64 d24,d20,#28
1346 veor d26,d25 @ Sigma1(e)
1347 vadd.i64 d27,d29,d19
1348 vshr.u64 d25,d20,#34
1349 vsli.64 d24,d20,#36
1350 vadd.i64 d27,d26
1351 vshr.u64 d26,d20,#39
1352 vadd.i64 d28,d4
1353 vsli.64 d25,d20,#30
1354 veor d30,d20,d21
1355 vsli.64 d26,d20,#25
1356 veor d19,d24,d25
1357 vadd.i64 d27,d28
1358 vbsl d30,d22,d21 @ Maj(a,b,c)
1359 veor d19,d26 @ Sigma0(a)
1360 vadd.i64 d23,d27
1361 vadd.i64 d30,d27
1362 @ vadd.i64 d19,d30
1363 vshr.u64 d24,d23,#14 @ 21
1364 #if 21<16
1365 vld1.64 {d5},[r1]! @ handles unaligned
1366 #endif
1367 vshr.u64 d25,d23,#18
1368 #if 21>0
1369 vadd.i64 d19,d30 @ h+=Maj from the past
1370 #endif
1371 vshr.u64 d26,d23,#41
1372 vld1.64 {d28},[r3,:64]! @ K[i++]
1373 vsli.64 d24,d23,#50
1374 vsli.64 d25,d23,#46
1375 vmov d29,d23
1376 vsli.64 d26,d23,#23
1377 #if 21<16 && defined(__ARMEL__)
1378 vrev64.8 ,
1379 #endif
1380 veor d25,d24
1381 vbsl d29,d16,d17 @ Ch(e,f,g)
1382 vshr.u64 d24,d19,#28
1383 veor d26,d25 @ Sigma1(e)
1384 vadd.i64 d27,d29,d18
1385 vshr.u64 d25,d19,#34
1386 vsli.64 d24,d19,#36
1387 vadd.i64 d27,d26
1388 vshr.u64 d26,d19,#39
1389 vadd.i64 d28,d5
1390 vsli.64 d25,d19,#30
1391 veor d30,d19,d20
1392 vsli.64 d26,d19,#25
1393 veor d18,d24,d25
1394 vadd.i64 d27,d28
1395 vbsl d30,d21,d20 @ Maj(a,b,c)
1396 veor d18,d26 @ Sigma0(a)
1397 vadd.i64 d22,d27
1398 vadd.i64 d30,d27
1399 @ vadd.i64 d18,d30
1400 vshr.u64 q12,q2,#19
1401 vshr.u64 q13,q2,#61
1402 vadd.i64 d18,d30 @ h+=Maj from the past
1403 vshr.u64 q15,q2,#6
1404 vsli.64 q12,q2,#45
1405 vext.8 q14,q3,q4,#8 @ X[i+1]
1406 vsli.64 q13,q2,#3
1407 veor q15,q12
1408 vshr.u64 q12,q14,#1
1409 veor q15,q13 @ sigma1(X[i+14])
1410 vshr.u64 q13,q14,#8
1411 vadd.i64 q3,q15
1412 vshr.u64 q15,q14,#7
1413 vsli.64 q12,q14,#63
1414 vsli.64 q13,q14,#56
1415 vext.8 q14,q7,q0,#8 @ X[i+9]
1416 veor q15,q12
1417 vshr.u64 d24,d22,#14 @ from NEON_00_15
1418 vadd.i64 q3,q14
1419 vshr.u64 d25,d22,#18 @ from NEON_00_15
1420 veor q15,q13 @ sigma0(X[i+1])
1421 vshr.u64 d26,d22,#41 @ from NEON_00_15
1422 vadd.i64 q3,q15
1423 vld1.64 {d28},[r3,:64]! @ K[i++]
1424 vsli.64 d24,d22,#50
1425 vsli.64 d25,d22,#46
1426 vmov d29,d22
1427 vsli.64 d26,d22,#23
1428 #if 22<16 && defined(__ARMEL__)
1429 vrev64.8 ,
1430 #endif
1431 veor d25,d24
1432 vbsl d29,d23,d16 @ Ch(e,f,g)
1433 vshr.u64 d24,d18,#28
1434 veor d26,d25 @ Sigma1(e)
1435 vadd.i64 d27,d29,d17
1436 vshr.u64 d25,d18,#34
1437 vsli.64 d24,d18,#36
1438 vadd.i64 d27,d26
1439 vshr.u64 d26,d18,#39
1440 vadd.i64 d28,d6
1441 vsli.64 d25,d18,#30
1442 veor d30,d18,d19
1443 vsli.64 d26,d18,#25
1444 veor d17,d24,d25
1445 vadd.i64 d27,d28
1446 vbsl d30,d20,d19 @ Maj(a,b,c)
1447 veor d17,d26 @ Sigma0(a)
1448 vadd.i64 d21,d27
1449 vadd.i64 d30,d27
1450 @ vadd.i64 d17,d30
1451 vshr.u64 d24,d21,#14 @ 23
1452 #if 23<16
1453 vld1.64 {d7},[r1]! @ handles unaligned
1454 #endif
1455 vshr.u64 d25,d21,#18
1456 #if 23>0
1457 vadd.i64 d17,d30 @ h+=Maj from the past
1458 #endif
1459 vshr.u64 d26,d21,#41
1460 vld1.64 {d28},[r3,:64]! @ K[i++]
1461 vsli.64 d24,d21,#50
1462 vsli.64 d25,d21,#46
1463 vmov d29,d21
1464 vsli.64 d26,d21,#23
1465 #if 23<16 && defined(__ARMEL__)
1466 vrev64.8 ,
1467 #endif
1468 veor d25,d24
1469 vbsl d29,d22,d23 @ Ch(e,f,g)
1470 vshr.u64 d24,d17,#28
1471 veor d26,d25 @ Sigma1(e)
1472 vadd.i64 d27,d29,d16
1473 vshr.u64 d25,d17,#34
1474 vsli.64 d24,d17,#36
1475 vadd.i64 d27,d26
1476 vshr.u64 d26,d17,#39
1477 vadd.i64 d28,d7
1478 vsli.64 d25,d17,#30
1479 veor d30,d17,d18
1480 vsli.64 d26,d17,#25
1481 veor d16,d24,d25
1482 vadd.i64 d27,d28
1483 vbsl d30,d19,d18 @ Maj(a,b,c)
1484 veor d16,d26 @ Sigma0(a)
1485 vadd.i64 d20,d27
1486 vadd.i64 d30,d27
1487 @ vadd.i64 d16,d30
1488 vshr.u64 q12,q3,#19
1489 vshr.u64 q13,q3,#61
1490 vadd.i64 d16,d30 @ h+=Maj from the past
1491 vshr.u64 q15,q3,#6
1492 vsli.64 q12,q3,#45
1493 vext.8 q14,q4,q5,#8 @ X[i+1]
1494 vsli.64 q13,q3,#3
1495 veor q15,q12
1496 vshr.u64 q12,q14,#1
1497 veor q15,q13 @ sigma1(X[i+14])
1498 vshr.u64 q13,q14,#8
1499 vadd.i64 q4,q15
1500 vshr.u64 q15,q14,#7
1501 vsli.64 q12,q14,#63
1502 vsli.64 q13,q14,#56
1503 vext.8 q14,q0,q1,#8 @ X[i+9]
1504 veor q15,q12
1505 vshr.u64 d24,d20,#14 @ from NEON_00_15
1506 vadd.i64 q4,q14
1507 vshr.u64 d25,d20,#18 @ from NEON_00_15
1508 veor q15,q13 @ sigma0(X[i+1])
1509 vshr.u64 d26,d20,#41 @ from NEON_00_15
1510 vadd.i64 q4,q15
1511 vld1.64 {d28},[r3,:64]! @ K[i++]
1512 vsli.64 d24,d20,#50
1513 vsli.64 d25,d20,#46
1514 vmov d29,d20
1515 vsli.64 d26,d20,#23
1516 #if 24<16 && defined(__ARMEL__)
1517 vrev64.8 ,
1518 #endif
1519 veor d25,d24
1520 vbsl d29,d21,d22 @ Ch(e,f,g)
1521 vshr.u64 d24,d16,#28
1522 veor d26,d25 @ Sigma1(e)
1523 vadd.i64 d27,d29,d23
1524 vshr.u64 d25,d16,#34
1525 vsli.64 d24,d16,#36
1526 vadd.i64 d27,d26
1527 vshr.u64 d26,d16,#39
1528 vadd.i64 d28,d8
1529 vsli.64 d25,d16,#30
1530 veor d30,d16,d17
1531 vsli.64 d26,d16,#25
1532 veor d23,d24,d25
1533 vadd.i64 d27,d28
1534 vbsl d30,d18,d17 @ Maj(a,b,c)
1535 veor d23,d26 @ Sigma0(a)
1536 vadd.i64 d19,d27
1537 vadd.i64 d30,d27
1538 @ vadd.i64 d23,d30
1539 vshr.u64 d24,d19,#14 @ 25
1540 #if 25<16
1541 vld1.64 {d9},[r1]! @ handles unaligned
1542 #endif
1543 vshr.u64 d25,d19,#18
1544 #if 25>0
1545 vadd.i64 d23,d30 @ h+=Maj from the past
1546 #endif
1547 vshr.u64 d26,d19,#41
1548 vld1.64 {d28},[r3,:64]! @ K[i++]
1549 vsli.64 d24,d19,#50
1550 vsli.64 d25,d19,#46
1551 vmov d29,d19
1552 vsli.64 d26,d19,#23
1553 #if 25<16 && defined(__ARMEL__)
1554 vrev64.8 ,
1555 #endif
1556 veor d25,d24
1557 vbsl d29,d20,d21 @ Ch(e,f,g)
1558 vshr.u64 d24,d23,#28
1559 veor d26,d25 @ Sigma1(e)
1560 vadd.i64 d27,d29,d22
1561 vshr.u64 d25,d23,#34
1562 vsli.64 d24,d23,#36
1563 vadd.i64 d27,d26
1564 vshr.u64 d26,d23,#39
1565 vadd.i64 d28,d9
1566 vsli.64 d25,d23,#30
1567 veor d30,d23,d16
1568 vsli.64 d26,d23,#25
1569 veor d22,d24,d25
1570 vadd.i64 d27,d28
1571 vbsl d30,d17,d16 @ Maj(a,b,c)
1572 veor d22,d26 @ Sigma0(a)
1573 vadd.i64 d18,d27
1574 vadd.i64 d30,d27
1575 @ vadd.i64 d22,d30
1576 vshr.u64 q12,q4,#19
1577 vshr.u64 q13,q4,#61
1578 vadd.i64 d22,d30 @ h+=Maj from the past
1579 vshr.u64 q15,q4,#6
1580 vsli.64 q12,q4,#45
1581 vext.8 q14,q5,q6,#8 @ X[i+1]
1582 vsli.64 q13,q4,#3
1583 veor q15,q12
1584 vshr.u64 q12,q14,#1
1585 veor q15,q13 @ sigma1(X[i+14])
1586 vshr.u64 q13,q14,#8
1587 vadd.i64 q5,q15
1588 vshr.u64 q15,q14,#7
1589 vsli.64 q12,q14,#63
1590 vsli.64 q13,q14,#56
1591 vext.8 q14,q1,q2,#8 @ X[i+9]
1592 veor q15,q12
1593 vshr.u64 d24,d18,#14 @ from NEON_00_15
1594 vadd.i64 q5,q14
1595 vshr.u64 d25,d18,#18 @ from NEON_00_15
1596 veor q15,q13 @ sigma0(X[i+1])
1597 vshr.u64 d26,d18,#41 @ from NEON_00_15
1598 vadd.i64 q5,q15
1599 vld1.64 {d28},[r3,:64]! @ K[i++]
1600 vsli.64 d24,d18,#50
1601 vsli.64 d25,d18,#46
1602 vmov d29,d18
1603 vsli.64 d26,d18,#23
1604 #if 26<16 && defined(__ARMEL__)
1605 vrev64.8 ,
1606 #endif
1607 veor d25,d24
1608 vbsl d29,d19,d20 @ Ch(e,f,g)
1609 vshr.u64 d24,d22,#28
1610 veor d26,d25 @ Sigma1(e)
1611 vadd.i64 d27,d29,d21
1612 vshr.u64 d25,d22,#34
1613 vsli.64 d24,d22,#36
1614 vadd.i64 d27,d26
1615 vshr.u64 d26,d22,#39
1616 vadd.i64 d28,d10
1617 vsli.64 d25,d22,#30
1618 veor d30,d22,d23
1619 vsli.64 d26,d22,#25
1620 veor d21,d24,d25
1621 vadd.i64 d27,d28
1622 vbsl d30,d16,d23 @ Maj(a,b,c)
1623 veor d21,d26 @ Sigma0(a)
1624 vadd.i64 d17,d27
1625 vadd.i64 d30,d27
1626 @ vadd.i64 d21,d30
1627 vshr.u64 d24,d17,#14 @ 27
1628 #if 27<16
1629 vld1.64 {d11},[r1]! @ handles unaligned
1630 #endif
1631 vshr.u64 d25,d17,#18
1632 #if 27>0
1633 vadd.i64 d21,d30 @ h+=Maj from the past
1634 #endif
1635 vshr.u64 d26,d17,#41
1636 vld1.64 {d28},[r3,:64]! @ K[i++]
1637 vsli.64 d24,d17,#50
1638 vsli.64 d25,d17,#46
1639 vmov d29,d17
1640 vsli.64 d26,d17,#23
1641 #if 27<16 && defined(__ARMEL__)
1642 vrev64.8 ,
1643 #endif
1644 veor d25,d24
1645 vbsl d29,d18,d19 @ Ch(e,f,g)
1646 vshr.u64 d24,d21,#28
1647 veor d26,d25 @ Sigma1(e)
1648 vadd.i64 d27,d29,d20
1649 vshr.u64 d25,d21,#34
1650 vsli.64 d24,d21,#36
1651 vadd.i64 d27,d26
1652 vshr.u64 d26,d21,#39
1653 vadd.i64 d28,d11
1654 vsli.64 d25,d21,#30
1655 veor d30,d21,d22
1656 vsli.64 d26,d21,#25
1657 veor d20,d24,d25
1658 vadd.i64 d27,d28
1659 vbsl d30,d23,d22 @ Maj(a,b,c)
1660 veor d20,d26 @ Sigma0(a)
1661 vadd.i64 d16,d27
1662 vadd.i64 d30,d27
1663 @ vadd.i64 d20,d30
1664 vshr.u64 q12,q5,#19
1665 vshr.u64 q13,q5,#61
1666 vadd.i64 d20,d30 @ h+=Maj from the past
1667 vshr.u64 q15,q5,#6
1668 vsli.64 q12,q5,#45
1669 vext.8 q14,q6,q7,#8 @ X[i+1]
1670 vsli.64 q13,q5,#3
1671 veor q15,q12
1672 vshr.u64 q12,q14,#1
1673 veor q15,q13 @ sigma1(X[i+14])
1674 vshr.u64 q13,q14,#8
1675 vadd.i64 q6,q15
1676 vshr.u64 q15,q14,#7
1677 vsli.64 q12,q14,#63
1678 vsli.64 q13,q14,#56
1679 vext.8 q14,q2,q3,#8 @ X[i+9]
1680 veor q15,q12
1681 vshr.u64 d24,d16,#14 @ from NEON_00_15
1682 vadd.i64 q6,q14
1683 vshr.u64 d25,d16,#18 @ from NEON_00_15
1684 veor q15,q13 @ sigma0(X[i+1])
1685 vshr.u64 d26,d16,#41 @ from NEON_00_15
1686 vadd.i64 q6,q15
1687 vld1.64 {d28},[r3,:64]! @ K[i++]
1688 vsli.64 d24,d16,#50
1689 vsli.64 d25,d16,#46
1690 vmov d29,d16
1691 vsli.64 d26,d16,#23
1692 #if 28<16 && defined(__ARMEL__)
1693 vrev64.8 ,
1694 #endif
1695 veor d25,d24
1696 vbsl d29,d17,d18 @ Ch(e,f,g)
1697 vshr.u64 d24,d20,#28
1698 veor d26,d25 @ Sigma1(e)
1699 vadd.i64 d27,d29,d19
1700 vshr.u64 d25,d20,#34
1701 vsli.64 d24,d20,#36
1702 vadd.i64 d27,d26
1703 vshr.u64 d26,d20,#39
1704 vadd.i64 d28,d12
1705 vsli.64 d25,d20,#30
1706 veor d30,d20,d21
1707 vsli.64 d26,d20,#25
1708 veor d19,d24,d25
1709 vadd.i64 d27,d28
1710 vbsl d30,d22,d21 @ Maj(a,b,c)
1711 veor d19,d26 @ Sigma0(a)
1712 vadd.i64 d23,d27
1713 vadd.i64 d30,d27
1714 @ vadd.i64 d19,d30
1715 vshr.u64 d24,d23,#14 @ 29
1716 #if 29<16
1717 vld1.64 {d13},[r1]! @ handles unaligned
1718 #endif
1719 vshr.u64 d25,d23,#18
1720 #if 29>0
1721 vadd.i64 d19,d30 @ h+=Maj from the past
1722 #endif
1723 vshr.u64 d26,d23,#41
1724 vld1.64 {d28},[r3,:64]! @ K[i++]
1725 vsli.64 d24,d23,#50
1726 vsli.64 d25,d23,#46
1727 vmov d29,d23
1728 vsli.64 d26,d23,#23
1729 #if 29<16 && defined(__ARMEL__)
1730 vrev64.8 ,
1731 #endif
1732 veor d25,d24
1733 vbsl d29,d16,d17 @ Ch(e,f,g)
1734 vshr.u64 d24,d19,#28
1735 veor d26,d25 @ Sigma1(e)
1736 vadd.i64 d27,d29,d18
1737 vshr.u64 d25,d19,#34
1738 vsli.64 d24,d19,#36
1739 vadd.i64 d27,d26
1740 vshr.u64 d26,d19,#39
1741 vadd.i64 d28,d13
1742 vsli.64 d25,d19,#30
1743 veor d30,d19,d20
1744 vsli.64 d26,d19,#25
1745 veor d18,d24,d25
1746 vadd.i64 d27,d28
1747 vbsl d30,d21,d20 @ Maj(a,b,c)
1748 veor d18,d26 @ Sigma0(a)
1749 vadd.i64 d22,d27
1750 vadd.i64 d30,d27
1751 @ vadd.i64 d18,d30
1752 vshr.u64 q12,q6,#19
1753 vshr.u64 q13,q6,#61
1754 vadd.i64 d18,d30 @ h+=Maj from the past
1755 vshr.u64 q15,q6,#6
1756 vsli.64 q12,q6,#45
1757 vext.8 q14,q7,q0,#8 @ X[i+1]
1758 vsli.64 q13,q6,#3
1759 veor q15,q12
1760 vshr.u64 q12,q14,#1
1761 veor q15,q13 @ sigma1(X[i+14])
1762 vshr.u64 q13,q14,#8
1763 vadd.i64 q7,q15
1764 vshr.u64 q15,q14,#7
1765 vsli.64 q12,q14,#63
1766 vsli.64 q13,q14,#56
1767 vext.8 q14,q3,q4,#8 @ X[i+9]
1768 veor q15,q12
1769 vshr.u64 d24,d22,#14 @ from NEON_00_15
1770 vadd.i64 q7,q14
1771 vshr.u64 d25,d22,#18 @ from NEON_00_15
1772 veor q15,q13 @ sigma0(X[i+1])
1773 vshr.u64 d26,d22,#41 @ from NEON_00_15
1774 vadd.i64 q7,q15
1775 vld1.64 {d28},[r3,:64]! @ K[i++]
1776 vsli.64 d24,d22,#50
1777 vsli.64 d25,d22,#46
1778 vmov d29,d22
1779 vsli.64 d26,d22,#23
1780 #if 30<16 && defined(__ARMEL__)
1781 vrev64.8 ,
1782 #endif
1783 veor d25,d24
1784 vbsl d29,d23,d16 @ Ch(e,f,g)
1785 vshr.u64 d24,d18,#28
1786 veor d26,d25 @ Sigma1(e)
1787 vadd.i64 d27,d29,d17
1788 vshr.u64 d25,d18,#34
1789 vsli.64 d24,d18,#36
1790 vadd.i64 d27,d26
1791 vshr.u64 d26,d18,#39
1792 vadd.i64 d28,d14
1793 vsli.64 d25,d18,#30
1794 veor d30,d18,d19
1795 vsli.64 d26,d18,#25
1796 veor d17,d24,d25
1797 vadd.i64 d27,d28
1798 vbsl d30,d20,d19 @ Maj(a,b,c)
1799 veor d17,d26 @ Sigma0(a)
1800 vadd.i64 d21,d27
1801 vadd.i64 d30,d27
1802 @ vadd.i64 d17,d30
1803 vshr.u64 d24,d21,#14 @ 31
1804 #if 31<16
1805 vld1.64 {d15},[r1]! @ handles unaligned
1806 #endif
1807 vshr.u64 d25,d21,#18
1808 #if 31>0
1809 vadd.i64 d17,d30 @ h+=Maj from the past
1810 #endif
1811 vshr.u64 d26,d21,#41
1812 vld1.64 {d28},[r3,:64]! @ K[i++]
1813 vsli.64 d24,d21,#50
1814 vsli.64 d25,d21,#46
1815 vmov d29,d21
1816 vsli.64 d26,d21,#23
1817 #if 31<16 && defined(__ARMEL__)
1818 vrev64.8 ,
1819 #endif
1820 veor d25,d24
1821 vbsl d29,d22,d23 @ Ch(e,f,g)
1822 vshr.u64 d24,d17,#28
1823 veor d26,d25 @ Sigma1(e)
1824 vadd.i64 d27,d29,d16
1825 vshr.u64 d25,d17,#34
1826 vsli.64 d24,d17,#36
1827 vadd.i64 d27,d26
1828 vshr.u64 d26,d17,#39
1829 vadd.i64 d28,d15
1830 vsli.64 d25,d17,#30
1831 veor d30,d17,d18
1832 vsli.64 d26,d17,#25
1833 veor d16,d24,d25
1834 vadd.i64 d27,d28
1835 vbsl d30,d19,d18 @ Maj(a,b,c)
1836 veor d16,d26 @ Sigma0(a)
1837 vadd.i64 d20,d27
1838 vadd.i64 d30,d27
1839 @ vadd.i64 d16,d30
1840 bne .L16_79_neon
1841
1842 vadd.i64 d16,d30 @ h+=Maj from the past
1843 vldmia r0,{d24-d31} @ load context to temp
1844 vadd.i64 q8,q12 @ vectorized accumulate
1845 vadd.i64 q9,q13
1846 vadd.i64 q10,q14
1847 vadd.i64 q11,q15
1848 vstmia r0,{d16-d23} @ save context
1849 teq r1,r2
1850 sub r3,#640 @ rewind K512
1851 bne .Loop_neon
1852
1853 VFP_ABI_POP
1854 bx lr @ .word 0xe12fff1e
1855 .size sha512_block_data_order_neon,.-sha512_block_data_order_neon
1856 #endif
1857 .asciz "SHA512 block transform for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>"
1858 .align 2
1859 #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
1860 .comm OPENSSL_armcap_P,4,4
1861 #endif
This page took 0.069968 seconds and 5 git commands to generate.