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

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

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

Powered by Google App Engine
This is Rietveld 408576698