Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: third_party/boringssl/linux-arm/crypto/sha/sha512-armv4.S

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

Powered by Google App Engine
This is Rietveld 408576698