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

Side by Side Diff: openssl/crypto/sha/asm/sha512-armv4.S

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

Powered by Google App Engine
This is Rietveld 408576698