blob: 7faa8475ff80d3317a7c256f5360ef092df21b62 [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001/*
2 * ====================================================================
3 * Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
4 * project. The module is, however, dual licensed under OpenSSL and
5 * CRYPTOGAMS licenses depending on where you obtain it. For further
6 * details see http://www.openssl.org/~appro/cryptogams/.
7 * ====================================================================
8 *
9 * SHA256/512 for ARMv8.
10 *
11 * Performance in cycles per processed byte and improvement coefficient
12 * over code generated with "default" compiler:
13 *
14 * SHA256-hw SHA256(*) SHA512
15 * Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**))
16 * Cortex-A53 2.38 15.6 (+110%) 10.1 (+190%(***))
17 * Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***))
18 *
19 * (*) Software SHA256 results are of lesser relevance, presented
20 * mostly for informational purposes.
21 * (**) The result is a trade-off: it's possible to improve it by
22 * 10% (or by 1 cycle per round), but at the cost of 20% loss
23 * on Cortex-A53 (or by 4 cycles per round).
24 * (***) Super-impressive coefficients over gcc-generated code are
25 * indication of some compiler "pathology", most notably code
26 * generated with -mgeneral-regs-only is significanty faster
27 * and lags behind assembly only by 50-90%.
28 */
29
30# if defined(__aarch64__)
31# define __ARM_ARCH__ 8
32# if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
33# define __ARMEB__
34# else
35# define __ARMEL__
36# endif
37#endif
38
39.text
40
41.globl sha512_block_data_order
42.type sha512_block_data_order,%function
43.align 6
44sha512_block_data_order:
45 stp x29,x30,[sp,#-128]!
46 add x29,sp,#0
47
48 stp x19,x20,[sp,#16]
49 stp x21,x22,[sp,#32]
50 stp x23,x24,[sp,#48]
51 stp x25,x26,[sp,#64]
52 stp x27,x28,[sp,#80]
53 sub sp,sp,#4*8
54
55 ldp x20,x21,[x0] // load context
56 ldp x22,x23,[x0,#2*8]
57 ldp x24,x25,[x0,#4*8]
58 add x2,x1,x2,lsl#7 // end of input
59 ldp x26,x27,[x0,#6*8]
60 adr x30,K512
61 stp x0,x2,[x29,#96]
62
63.Loop:
64 ldp x3,x4,[x1],#2*8
65 ldr x19,[x30],#8 // *K++
66 eor x28,x21,x22 // magic seed
67 str x1,[x29,#112]
68#ifndef __ARMEB__
69 rev x3,x3 // 0
70#endif
71 ror x16,x24,#14
72 add x27,x27,x19 // h+=K[i]
73 eor x6,x24,x24,ror#23
74 and x17,x25,x24
75 bic x19,x26,x24
76 add x27,x27,x3 // h+=X[i]
77 orr x17,x17,x19 // Ch(e,f,g)
78 eor x19,x20,x21 // a^b, b^c in next round
79 eor x16,x16,x6,ror#18 // Sigma1(e)
80 ror x6,x20,#28
81 add x27,x27,x17 // h+=Ch(e,f,g)
82 eor x17,x20,x20,ror#5
83 add x27,x27,x16 // h+=Sigma1(e)
84 and x28,x28,x19 // (b^c)&=(a^b)
85 add x23,x23,x27 // d+=h
86 eor x28,x28,x21 // Maj(a,b,c)
87 eor x17,x6,x17,ror#34 // Sigma0(a)
88 add x27,x27,x28 // h+=Maj(a,b,c)
89 ldr x28,[x30],#8 // *K++, x19 in next round
90 //add x27,x27,x17 // h+=Sigma0(a)
91#ifndef __ARMEB__
92 rev x4,x4 // 1
93#endif
94 ldp x5,x6,[x1],#2*8
95 add x27,x27,x17 // h+=Sigma0(a)
96 ror x16,x23,#14
97 add x26,x26,x28 // h+=K[i]
98 eor x7,x23,x23,ror#23
99 and x17,x24,x23
100 bic x28,x25,x23
101 add x26,x26,x4 // h+=X[i]
102 orr x17,x17,x28 // Ch(e,f,g)
103 eor x28,x27,x20 // a^b, b^c in next round
104 eor x16,x16,x7,ror#18 // Sigma1(e)
105 ror x7,x27,#28
106 add x26,x26,x17 // h+=Ch(e,f,g)
107 eor x17,x27,x27,ror#5
108 add x26,x26,x16 // h+=Sigma1(e)
109 and x19,x19,x28 // (b^c)&=(a^b)
110 add x22,x22,x26 // d+=h
111 eor x19,x19,x20 // Maj(a,b,c)
112 eor x17,x7,x17,ror#34 // Sigma0(a)
113 add x26,x26,x19 // h+=Maj(a,b,c)
114 ldr x19,[x30],#8 // *K++, x28 in next round
115 //add x26,x26,x17 // h+=Sigma0(a)
116#ifndef __ARMEB__
117 rev x5,x5 // 2
118#endif
119 add x26,x26,x17 // h+=Sigma0(a)
120 ror x16,x22,#14
121 add x25,x25,x19 // h+=K[i]
122 eor x8,x22,x22,ror#23
123 and x17,x23,x22
124 bic x19,x24,x22
125 add x25,x25,x5 // h+=X[i]
126 orr x17,x17,x19 // Ch(e,f,g)
127 eor x19,x26,x27 // a^b, b^c in next round
128 eor x16,x16,x8,ror#18 // Sigma1(e)
129 ror x8,x26,#28
130 add x25,x25,x17 // h+=Ch(e,f,g)
131 eor x17,x26,x26,ror#5
132 add x25,x25,x16 // h+=Sigma1(e)
133 and x28,x28,x19 // (b^c)&=(a^b)
134 add x21,x21,x25 // d+=h
135 eor x28,x28,x27 // Maj(a,b,c)
136 eor x17,x8,x17,ror#34 // Sigma0(a)
137 add x25,x25,x28 // h+=Maj(a,b,c)
138 ldr x28,[x30],#8 // *K++, x19 in next round
139 //add x25,x25,x17 // h+=Sigma0(a)
140#ifndef __ARMEB__
141 rev x6,x6 // 3
142#endif
143 ldp x7,x8,[x1],#2*8
144 add x25,x25,x17 // h+=Sigma0(a)
145 ror x16,x21,#14
146 add x24,x24,x28 // h+=K[i]
147 eor x9,x21,x21,ror#23
148 and x17,x22,x21
149 bic x28,x23,x21
150 add x24,x24,x6 // h+=X[i]
151 orr x17,x17,x28 // Ch(e,f,g)
152 eor x28,x25,x26 // a^b, b^c in next round
153 eor x16,x16,x9,ror#18 // Sigma1(e)
154 ror x9,x25,#28
155 add x24,x24,x17 // h+=Ch(e,f,g)
156 eor x17,x25,x25,ror#5
157 add x24,x24,x16 // h+=Sigma1(e)
158 and x19,x19,x28 // (b^c)&=(a^b)
159 add x20,x20,x24 // d+=h
160 eor x19,x19,x26 // Maj(a,b,c)
161 eor x17,x9,x17,ror#34 // Sigma0(a)
162 add x24,x24,x19 // h+=Maj(a,b,c)
163 ldr x19,[x30],#8 // *K++, x28 in next round
164 //add x24,x24,x17 // h+=Sigma0(a)
165#ifndef __ARMEB__
166 rev x7,x7 // 4
167#endif
168 add x24,x24,x17 // h+=Sigma0(a)
169 ror x16,x20,#14
170 add x23,x23,x19 // h+=K[i]
171 eor x10,x20,x20,ror#23
172 and x17,x21,x20
173 bic x19,x22,x20
174 add x23,x23,x7 // h+=X[i]
175 orr x17,x17,x19 // Ch(e,f,g)
176 eor x19,x24,x25 // a^b, b^c in next round
177 eor x16,x16,x10,ror#18 // Sigma1(e)
178 ror x10,x24,#28
179 add x23,x23,x17 // h+=Ch(e,f,g)
180 eor x17,x24,x24,ror#5
181 add x23,x23,x16 // h+=Sigma1(e)
182 and x28,x28,x19 // (b^c)&=(a^b)
183 add x27,x27,x23 // d+=h
184 eor x28,x28,x25 // Maj(a,b,c)
185 eor x17,x10,x17,ror#34 // Sigma0(a)
186 add x23,x23,x28 // h+=Maj(a,b,c)
187 ldr x28,[x30],#8 // *K++, x19 in next round
188 //add x23,x23,x17 // h+=Sigma0(a)
189#ifndef __ARMEB__
190 rev x8,x8 // 5
191#endif
192 ldp x9,x10,[x1],#2*8
193 add x23,x23,x17 // h+=Sigma0(a)
194 ror x16,x27,#14
195 add x22,x22,x28 // h+=K[i]
196 eor x11,x27,x27,ror#23
197 and x17,x20,x27
198 bic x28,x21,x27
199 add x22,x22,x8 // h+=X[i]
200 orr x17,x17,x28 // Ch(e,f,g)
201 eor x28,x23,x24 // a^b, b^c in next round
202 eor x16,x16,x11,ror#18 // Sigma1(e)
203 ror x11,x23,#28
204 add x22,x22,x17 // h+=Ch(e,f,g)
205 eor x17,x23,x23,ror#5
206 add x22,x22,x16 // h+=Sigma1(e)
207 and x19,x19,x28 // (b^c)&=(a^b)
208 add x26,x26,x22 // d+=h
209 eor x19,x19,x24 // Maj(a,b,c)
210 eor x17,x11,x17,ror#34 // Sigma0(a)
211 add x22,x22,x19 // h+=Maj(a,b,c)
212 ldr x19,[x30],#8 // *K++, x28 in next round
213 //add x22,x22,x17 // h+=Sigma0(a)
214#ifndef __ARMEB__
215 rev x9,x9 // 6
216#endif
217 add x22,x22,x17 // h+=Sigma0(a)
218 ror x16,x26,#14
219 add x21,x21,x19 // h+=K[i]
220 eor x12,x26,x26,ror#23
221 and x17,x27,x26
222 bic x19,x20,x26
223 add x21,x21,x9 // h+=X[i]
224 orr x17,x17,x19 // Ch(e,f,g)
225 eor x19,x22,x23 // a^b, b^c in next round
226 eor x16,x16,x12,ror#18 // Sigma1(e)
227 ror x12,x22,#28
228 add x21,x21,x17 // h+=Ch(e,f,g)
229 eor x17,x22,x22,ror#5
230 add x21,x21,x16 // h+=Sigma1(e)
231 and x28,x28,x19 // (b^c)&=(a^b)
232 add x25,x25,x21 // d+=h
233 eor x28,x28,x23 // Maj(a,b,c)
234 eor x17,x12,x17,ror#34 // Sigma0(a)
235 add x21,x21,x28 // h+=Maj(a,b,c)
236 ldr x28,[x30],#8 // *K++, x19 in next round
237 //add x21,x21,x17 // h+=Sigma0(a)
238#ifndef __ARMEB__
239 rev x10,x10 // 7
240#endif
241 ldp x11,x12,[x1],#2*8
242 add x21,x21,x17 // h+=Sigma0(a)
243 ror x16,x25,#14
244 add x20,x20,x28 // h+=K[i]
245 eor x13,x25,x25,ror#23
246 and x17,x26,x25
247 bic x28,x27,x25
248 add x20,x20,x10 // h+=X[i]
249 orr x17,x17,x28 // Ch(e,f,g)
250 eor x28,x21,x22 // a^b, b^c in next round
251 eor x16,x16,x13,ror#18 // Sigma1(e)
252 ror x13,x21,#28
253 add x20,x20,x17 // h+=Ch(e,f,g)
254 eor x17,x21,x21,ror#5
255 add x20,x20,x16 // h+=Sigma1(e)
256 and x19,x19,x28 // (b^c)&=(a^b)
257 add x24,x24,x20 // d+=h
258 eor x19,x19,x22 // Maj(a,b,c)
259 eor x17,x13,x17,ror#34 // Sigma0(a)
260 add x20,x20,x19 // h+=Maj(a,b,c)
261 ldr x19,[x30],#8 // *K++, x28 in next round
262 //add x20,x20,x17 // h+=Sigma0(a)
263#ifndef __ARMEB__
264 rev x11,x11 // 8
265#endif
266 add x20,x20,x17 // h+=Sigma0(a)
267 ror x16,x24,#14
268 add x27,x27,x19 // h+=K[i]
269 eor x14,x24,x24,ror#23
270 and x17,x25,x24
271 bic x19,x26,x24
272 add x27,x27,x11 // h+=X[i]
273 orr x17,x17,x19 // Ch(e,f,g)
274 eor x19,x20,x21 // a^b, b^c in next round
275 eor x16,x16,x14,ror#18 // Sigma1(e)
276 ror x14,x20,#28
277 add x27,x27,x17 // h+=Ch(e,f,g)
278 eor x17,x20,x20,ror#5
279 add x27,x27,x16 // h+=Sigma1(e)
280 and x28,x28,x19 // (b^c)&=(a^b)
281 add x23,x23,x27 // d+=h
282 eor x28,x28,x21 // Maj(a,b,c)
283 eor x17,x14,x17,ror#34 // Sigma0(a)
284 add x27,x27,x28 // h+=Maj(a,b,c)
285 ldr x28,[x30],#8 // *K++, x19 in next round
286 //add x27,x27,x17 // h+=Sigma0(a)
287#ifndef __ARMEB__
288 rev x12,x12 // 9
289#endif
290 ldp x13,x14,[x1],#2*8
291 add x27,x27,x17 // h+=Sigma0(a)
292 ror x16,x23,#14
293 add x26,x26,x28 // h+=K[i]
294 eor x15,x23,x23,ror#23
295 and x17,x24,x23
296 bic x28,x25,x23
297 add x26,x26,x12 // h+=X[i]
298 orr x17,x17,x28 // Ch(e,f,g)
299 eor x28,x27,x20 // a^b, b^c in next round
300 eor x16,x16,x15,ror#18 // Sigma1(e)
301 ror x15,x27,#28
302 add x26,x26,x17 // h+=Ch(e,f,g)
303 eor x17,x27,x27,ror#5
304 add x26,x26,x16 // h+=Sigma1(e)
305 and x19,x19,x28 // (b^c)&=(a^b)
306 add x22,x22,x26 // d+=h
307 eor x19,x19,x20 // Maj(a,b,c)
308 eor x17,x15,x17,ror#34 // Sigma0(a)
309 add x26,x26,x19 // h+=Maj(a,b,c)
310 ldr x19,[x30],#8 // *K++, x28 in next round
311 //add x26,x26,x17 // h+=Sigma0(a)
312#ifndef __ARMEB__
313 rev x13,x13 // 10
314#endif
315 add x26,x26,x17 // h+=Sigma0(a)
316 ror x16,x22,#14
317 add x25,x25,x19 // h+=K[i]
318 eor x0,x22,x22,ror#23
319 and x17,x23,x22
320 bic x19,x24,x22
321 add x25,x25,x13 // h+=X[i]
322 orr x17,x17,x19 // Ch(e,f,g)
323 eor x19,x26,x27 // a^b, b^c in next round
324 eor x16,x16,x0,ror#18 // Sigma1(e)
325 ror x0,x26,#28
326 add x25,x25,x17 // h+=Ch(e,f,g)
327 eor x17,x26,x26,ror#5
328 add x25,x25,x16 // h+=Sigma1(e)
329 and x28,x28,x19 // (b^c)&=(a^b)
330 add x21,x21,x25 // d+=h
331 eor x28,x28,x27 // Maj(a,b,c)
332 eor x17,x0,x17,ror#34 // Sigma0(a)
333 add x25,x25,x28 // h+=Maj(a,b,c)
334 ldr x28,[x30],#8 // *K++, x19 in next round
335 //add x25,x25,x17 // h+=Sigma0(a)
336#ifndef __ARMEB__
337 rev x14,x14 // 11
338#endif
339 ldp x15,x0,[x1],#2*8
340 add x25,x25,x17 // h+=Sigma0(a)
341 str x6,[sp,#24]
342 ror x16,x21,#14
343 add x24,x24,x28 // h+=K[i]
344 eor x6,x21,x21,ror#23
345 and x17,x22,x21
346 bic x28,x23,x21
347 add x24,x24,x14 // h+=X[i]
348 orr x17,x17,x28 // Ch(e,f,g)
349 eor x28,x25,x26 // a^b, b^c in next round
350 eor x16,x16,x6,ror#18 // Sigma1(e)
351 ror x6,x25,#28
352 add x24,x24,x17 // h+=Ch(e,f,g)
353 eor x17,x25,x25,ror#5
354 add x24,x24,x16 // h+=Sigma1(e)
355 and x19,x19,x28 // (b^c)&=(a^b)
356 add x20,x20,x24 // d+=h
357 eor x19,x19,x26 // Maj(a,b,c)
358 eor x17,x6,x17,ror#34 // Sigma0(a)
359 add x24,x24,x19 // h+=Maj(a,b,c)
360 ldr x19,[x30],#8 // *K++, x28 in next round
361 //add x24,x24,x17 // h+=Sigma0(a)
362#ifndef __ARMEB__
363 rev x15,x15 // 12
364#endif
365 add x24,x24,x17 // h+=Sigma0(a)
366 str x7,[sp,#0]
367 ror x16,x20,#14
368 add x23,x23,x19 // h+=K[i]
369 eor x7,x20,x20,ror#23
370 and x17,x21,x20
371 bic x19,x22,x20
372 add x23,x23,x15 // h+=X[i]
373 orr x17,x17,x19 // Ch(e,f,g)
374 eor x19,x24,x25 // a^b, b^c in next round
375 eor x16,x16,x7,ror#18 // Sigma1(e)
376 ror x7,x24,#28
377 add x23,x23,x17 // h+=Ch(e,f,g)
378 eor x17,x24,x24,ror#5
379 add x23,x23,x16 // h+=Sigma1(e)
380 and x28,x28,x19 // (b^c)&=(a^b)
381 add x27,x27,x23 // d+=h
382 eor x28,x28,x25 // Maj(a,b,c)
383 eor x17,x7,x17,ror#34 // Sigma0(a)
384 add x23,x23,x28 // h+=Maj(a,b,c)
385 ldr x28,[x30],#8 // *K++, x19 in next round
386 //add x23,x23,x17 // h+=Sigma0(a)
387#ifndef __ARMEB__
388 rev x0,x0 // 13
389#endif
390 ldp x1,x2,[x1]
391 add x23,x23,x17 // h+=Sigma0(a)
392 str x8,[sp,#8]
393 ror x16,x27,#14
394 add x22,x22,x28 // h+=K[i]
395 eor x8,x27,x27,ror#23
396 and x17,x20,x27
397 bic x28,x21,x27
398 add x22,x22,x0 // h+=X[i]
399 orr x17,x17,x28 // Ch(e,f,g)
400 eor x28,x23,x24 // a^b, b^c in next round
401 eor x16,x16,x8,ror#18 // Sigma1(e)
402 ror x8,x23,#28
403 add x22,x22,x17 // h+=Ch(e,f,g)
404 eor x17,x23,x23,ror#5
405 add x22,x22,x16 // h+=Sigma1(e)
406 and x19,x19,x28 // (b^c)&=(a^b)
407 add x26,x26,x22 // d+=h
408 eor x19,x19,x24 // Maj(a,b,c)
409 eor x17,x8,x17,ror#34 // Sigma0(a)
410 add x22,x22,x19 // h+=Maj(a,b,c)
411 ldr x19,[x30],#8 // *K++, x28 in next round
412 //add x22,x22,x17 // h+=Sigma0(a)
413#ifndef __ARMEB__
414 rev x1,x1 // 14
415#endif
416 ldr x6,[sp,#24]
417 add x22,x22,x17 // h+=Sigma0(a)
418 str x9,[sp,#16]
419 ror x16,x26,#14
420 add x21,x21,x19 // h+=K[i]
421 eor x9,x26,x26,ror#23
422 and x17,x27,x26
423 bic x19,x20,x26
424 add x21,x21,x1 // h+=X[i]
425 orr x17,x17,x19 // Ch(e,f,g)
426 eor x19,x22,x23 // a^b, b^c in next round
427 eor x16,x16,x9,ror#18 // Sigma1(e)
428 ror x9,x22,#28
429 add x21,x21,x17 // h+=Ch(e,f,g)
430 eor x17,x22,x22,ror#5
431 add x21,x21,x16 // h+=Sigma1(e)
432 and x28,x28,x19 // (b^c)&=(a^b)
433 add x25,x25,x21 // d+=h
434 eor x28,x28,x23 // Maj(a,b,c)
435 eor x17,x9,x17,ror#34 // Sigma0(a)
436 add x21,x21,x28 // h+=Maj(a,b,c)
437 ldr x28,[x30],#8 // *K++, x19 in next round
438 //add x21,x21,x17 // h+=Sigma0(a)
439#ifndef __ARMEB__
440 rev x2,x2 // 15
441#endif
442 ldr x7,[sp,#0]
443 add x21,x21,x17 // h+=Sigma0(a)
444 str x10,[sp,#24]
445 ror x16,x25,#14
446 add x20,x20,x28 // h+=K[i]
447 ror x9,x4,#1
448 and x17,x26,x25
449 ror x8,x1,#19
450 bic x28,x27,x25
451 ror x10,x21,#28
452 add x20,x20,x2 // h+=X[i]
453 eor x16,x16,x25,ror#18
454 eor x9,x9,x4,ror#8
455 orr x17,x17,x28 // Ch(e,f,g)
456 eor x28,x21,x22 // a^b, b^c in next round
457 eor x16,x16,x25,ror#41 // Sigma1(e)
458 eor x10,x10,x21,ror#34
459 add x20,x20,x17 // h+=Ch(e,f,g)
460 and x19,x19,x28 // (b^c)&=(a^b)
461 eor x8,x8,x1,ror#61
462 eor x9,x9,x4,lsr#7 // sigma0(X[i+1])
463 add x20,x20,x16 // h+=Sigma1(e)
464 eor x19,x19,x22 // Maj(a,b,c)
465 eor x17,x10,x21,ror#39 // Sigma0(a)
466 eor x8,x8,x1,lsr#6 // sigma1(X[i+14])
467 add x3,x3,x12
468 add x24,x24,x20 // d+=h
469 add x20,x20,x19 // h+=Maj(a,b,c)
470 ldr x19,[x30],#8 // *K++, x28 in next round
471 add x3,x3,x9
472 add x20,x20,x17 // h+=Sigma0(a)
473 add x3,x3,x8
474.Loop_16_xx:
475 ldr x8,[sp,#8]
476 str x11,[sp,#0]
477 ror x16,x24,#14
478 add x27,x27,x19 // h+=K[i]
479 ror x10,x5,#1
480 and x17,x25,x24
481 ror x9,x2,#19
482 bic x19,x26,x24
483 ror x11,x20,#28
484 add x27,x27,x3 // h+=X[i]
485 eor x16,x16,x24,ror#18
486 eor x10,x10,x5,ror#8
487 orr x17,x17,x19 // Ch(e,f,g)
488 eor x19,x20,x21 // a^b, b^c in next round
489 eor x16,x16,x24,ror#41 // Sigma1(e)
490 eor x11,x11,x20,ror#34
491 add x27,x27,x17 // h+=Ch(e,f,g)
492 and x28,x28,x19 // (b^c)&=(a^b)
493 eor x9,x9,x2,ror#61
494 eor x10,x10,x5,lsr#7 // sigma0(X[i+1])
495 add x27,x27,x16 // h+=Sigma1(e)
496 eor x28,x28,x21 // Maj(a,b,c)
497 eor x17,x11,x20,ror#39 // Sigma0(a)
498 eor x9,x9,x2,lsr#6 // sigma1(X[i+14])
499 add x4,x4,x13
500 add x23,x23,x27 // d+=h
501 add x27,x27,x28 // h+=Maj(a,b,c)
502 ldr x28,[x30],#8 // *K++, x19 in next round
503 add x4,x4,x10
504 add x27,x27,x17 // h+=Sigma0(a)
505 add x4,x4,x9
506 ldr x9,[sp,#16]
507 str x12,[sp,#8]
508 ror x16,x23,#14
509 add x26,x26,x28 // h+=K[i]
510 ror x11,x6,#1
511 and x17,x24,x23
512 ror x10,x3,#19
513 bic x28,x25,x23
514 ror x12,x27,#28
515 add x26,x26,x4 // h+=X[i]
516 eor x16,x16,x23,ror#18
517 eor x11,x11,x6,ror#8
518 orr x17,x17,x28 // Ch(e,f,g)
519 eor x28,x27,x20 // a^b, b^c in next round
520 eor x16,x16,x23,ror#41 // Sigma1(e)
521 eor x12,x12,x27,ror#34
522 add x26,x26,x17 // h+=Ch(e,f,g)
523 and x19,x19,x28 // (b^c)&=(a^b)
524 eor x10,x10,x3,ror#61
525 eor x11,x11,x6,lsr#7 // sigma0(X[i+1])
526 add x26,x26,x16 // h+=Sigma1(e)
527 eor x19,x19,x20 // Maj(a,b,c)
528 eor x17,x12,x27,ror#39 // Sigma0(a)
529 eor x10,x10,x3,lsr#6 // sigma1(X[i+14])
530 add x5,x5,x14
531 add x22,x22,x26 // d+=h
532 add x26,x26,x19 // h+=Maj(a,b,c)
533 ldr x19,[x30],#8 // *K++, x28 in next round
534 add x5,x5,x11
535 add x26,x26,x17 // h+=Sigma0(a)
536 add x5,x5,x10
537 ldr x10,[sp,#24]
538 str x13,[sp,#16]
539 ror x16,x22,#14
540 add x25,x25,x19 // h+=K[i]
541 ror x12,x7,#1
542 and x17,x23,x22
543 ror x11,x4,#19
544 bic x19,x24,x22
545 ror x13,x26,#28
546 add x25,x25,x5 // h+=X[i]
547 eor x16,x16,x22,ror#18
548 eor x12,x12,x7,ror#8
549 orr x17,x17,x19 // Ch(e,f,g)
550 eor x19,x26,x27 // a^b, b^c in next round
551 eor x16,x16,x22,ror#41 // Sigma1(e)
552 eor x13,x13,x26,ror#34
553 add x25,x25,x17 // h+=Ch(e,f,g)
554 and x28,x28,x19 // (b^c)&=(a^b)
555 eor x11,x11,x4,ror#61
556 eor x12,x12,x7,lsr#7 // sigma0(X[i+1])
557 add x25,x25,x16 // h+=Sigma1(e)
558 eor x28,x28,x27 // Maj(a,b,c)
559 eor x17,x13,x26,ror#39 // Sigma0(a)
560 eor x11,x11,x4,lsr#6 // sigma1(X[i+14])
561 add x6,x6,x15
562 add x21,x21,x25 // d+=h
563 add x25,x25,x28 // h+=Maj(a,b,c)
564 ldr x28,[x30],#8 // *K++, x19 in next round
565 add x6,x6,x12
566 add x25,x25,x17 // h+=Sigma0(a)
567 add x6,x6,x11
568 ldr x11,[sp,#0]
569 str x14,[sp,#24]
570 ror x16,x21,#14
571 add x24,x24,x28 // h+=K[i]
572 ror x13,x8,#1
573 and x17,x22,x21
574 ror x12,x5,#19
575 bic x28,x23,x21
576 ror x14,x25,#28
577 add x24,x24,x6 // h+=X[i]
578 eor x16,x16,x21,ror#18
579 eor x13,x13,x8,ror#8
580 orr x17,x17,x28 // Ch(e,f,g)
581 eor x28,x25,x26 // a^b, b^c in next round
582 eor x16,x16,x21,ror#41 // Sigma1(e)
583 eor x14,x14,x25,ror#34
584 add x24,x24,x17 // h+=Ch(e,f,g)
585 and x19,x19,x28 // (b^c)&=(a^b)
586 eor x12,x12,x5,ror#61
587 eor x13,x13,x8,lsr#7 // sigma0(X[i+1])
588 add x24,x24,x16 // h+=Sigma1(e)
589 eor x19,x19,x26 // Maj(a,b,c)
590 eor x17,x14,x25,ror#39 // Sigma0(a)
591 eor x12,x12,x5,lsr#6 // sigma1(X[i+14])
592 add x7,x7,x0
593 add x20,x20,x24 // d+=h
594 add x24,x24,x19 // h+=Maj(a,b,c)
595 ldr x19,[x30],#8 // *K++, x28 in next round
596 add x7,x7,x13
597 add x24,x24,x17 // h+=Sigma0(a)
598 add x7,x7,x12
599 ldr x12,[sp,#8]
600 str x15,[sp,#0]
601 ror x16,x20,#14
602 add x23,x23,x19 // h+=K[i]
603 ror x14,x9,#1
604 and x17,x21,x20
605 ror x13,x6,#19
606 bic x19,x22,x20
607 ror x15,x24,#28
608 add x23,x23,x7 // h+=X[i]
609 eor x16,x16,x20,ror#18
610 eor x14,x14,x9,ror#8
611 orr x17,x17,x19 // Ch(e,f,g)
612 eor x19,x24,x25 // a^b, b^c in next round
613 eor x16,x16,x20,ror#41 // Sigma1(e)
614 eor x15,x15,x24,ror#34
615 add x23,x23,x17 // h+=Ch(e,f,g)
616 and x28,x28,x19 // (b^c)&=(a^b)
617 eor x13,x13,x6,ror#61
618 eor x14,x14,x9,lsr#7 // sigma0(X[i+1])
619 add x23,x23,x16 // h+=Sigma1(e)
620 eor x28,x28,x25 // Maj(a,b,c)
621 eor x17,x15,x24,ror#39 // Sigma0(a)
622 eor x13,x13,x6,lsr#6 // sigma1(X[i+14])
623 add x8,x8,x1
624 add x27,x27,x23 // d+=h
625 add x23,x23,x28 // h+=Maj(a,b,c)
626 ldr x28,[x30],#8 // *K++, x19 in next round
627 add x8,x8,x14
628 add x23,x23,x17 // h+=Sigma0(a)
629 add x8,x8,x13
630 ldr x13,[sp,#16]
631 str x0,[sp,#8]
632 ror x16,x27,#14
633 add x22,x22,x28 // h+=K[i]
634 ror x15,x10,#1
635 and x17,x20,x27
636 ror x14,x7,#19
637 bic x28,x21,x27
638 ror x0,x23,#28
639 add x22,x22,x8 // h+=X[i]
640 eor x16,x16,x27,ror#18
641 eor x15,x15,x10,ror#8
642 orr x17,x17,x28 // Ch(e,f,g)
643 eor x28,x23,x24 // a^b, b^c in next round
644 eor x16,x16,x27,ror#41 // Sigma1(e)
645 eor x0,x0,x23,ror#34
646 add x22,x22,x17 // h+=Ch(e,f,g)
647 and x19,x19,x28 // (b^c)&=(a^b)
648 eor x14,x14,x7,ror#61
649 eor x15,x15,x10,lsr#7 // sigma0(X[i+1])
650 add x22,x22,x16 // h+=Sigma1(e)
651 eor x19,x19,x24 // Maj(a,b,c)
652 eor x17,x0,x23,ror#39 // Sigma0(a)
653 eor x14,x14,x7,lsr#6 // sigma1(X[i+14])
654 add x9,x9,x2
655 add x26,x26,x22 // d+=h
656 add x22,x22,x19 // h+=Maj(a,b,c)
657 ldr x19,[x30],#8 // *K++, x28 in next round
658 add x9,x9,x15
659 add x22,x22,x17 // h+=Sigma0(a)
660 add x9,x9,x14
661 ldr x14,[sp,#24]
662 str x1,[sp,#16]
663 ror x16,x26,#14
664 add x21,x21,x19 // h+=K[i]
665 ror x0,x11,#1
666 and x17,x27,x26
667 ror x15,x8,#19
668 bic x19,x20,x26
669 ror x1,x22,#28
670 add x21,x21,x9 // h+=X[i]
671 eor x16,x16,x26,ror#18
672 eor x0,x0,x11,ror#8
673 orr x17,x17,x19 // Ch(e,f,g)
674 eor x19,x22,x23 // a^b, b^c in next round
675 eor x16,x16,x26,ror#41 // Sigma1(e)
676 eor x1,x1,x22,ror#34
677 add x21,x21,x17 // h+=Ch(e,f,g)
678 and x28,x28,x19 // (b^c)&=(a^b)
679 eor x15,x15,x8,ror#61
680 eor x0,x0,x11,lsr#7 // sigma0(X[i+1])
681 add x21,x21,x16 // h+=Sigma1(e)
682 eor x28,x28,x23 // Maj(a,b,c)
683 eor x17,x1,x22,ror#39 // Sigma0(a)
684 eor x15,x15,x8,lsr#6 // sigma1(X[i+14])
685 add x10,x10,x3
686 add x25,x25,x21 // d+=h
687 add x21,x21,x28 // h+=Maj(a,b,c)
688 ldr x28,[x30],#8 // *K++, x19 in next round
689 add x10,x10,x0
690 add x21,x21,x17 // h+=Sigma0(a)
691 add x10,x10,x15
692 ldr x15,[sp,#0]
693 str x2,[sp,#24]
694 ror x16,x25,#14
695 add x20,x20,x28 // h+=K[i]
696 ror x1,x12,#1
697 and x17,x26,x25
698 ror x0,x9,#19
699 bic x28,x27,x25
700 ror x2,x21,#28
701 add x20,x20,x10 // h+=X[i]
702 eor x16,x16,x25,ror#18
703 eor x1,x1,x12,ror#8
704 orr x17,x17,x28 // Ch(e,f,g)
705 eor x28,x21,x22 // a^b, b^c in next round
706 eor x16,x16,x25,ror#41 // Sigma1(e)
707 eor x2,x2,x21,ror#34
708 add x20,x20,x17 // h+=Ch(e,f,g)
709 and x19,x19,x28 // (b^c)&=(a^b)
710 eor x0,x0,x9,ror#61
711 eor x1,x1,x12,lsr#7 // sigma0(X[i+1])
712 add x20,x20,x16 // h+=Sigma1(e)
713 eor x19,x19,x22 // Maj(a,b,c)
714 eor x17,x2,x21,ror#39 // Sigma0(a)
715 eor x0,x0,x9,lsr#6 // sigma1(X[i+14])
716 add x11,x11,x4
717 add x24,x24,x20 // d+=h
718 add x20,x20,x19 // h+=Maj(a,b,c)
719 ldr x19,[x30],#8 // *K++, x28 in next round
720 add x11,x11,x1
721 add x20,x20,x17 // h+=Sigma0(a)
722 add x11,x11,x0
723 ldr x0,[sp,#8]
724 str x3,[sp,#0]
725 ror x16,x24,#14
726 add x27,x27,x19 // h+=K[i]
727 ror x2,x13,#1
728 and x17,x25,x24
729 ror x1,x10,#19
730 bic x19,x26,x24
731 ror x3,x20,#28
732 add x27,x27,x11 // h+=X[i]
733 eor x16,x16,x24,ror#18
734 eor x2,x2,x13,ror#8
735 orr x17,x17,x19 // Ch(e,f,g)
736 eor x19,x20,x21 // a^b, b^c in next round
737 eor x16,x16,x24,ror#41 // Sigma1(e)
738 eor x3,x3,x20,ror#34
739 add x27,x27,x17 // h+=Ch(e,f,g)
740 and x28,x28,x19 // (b^c)&=(a^b)
741 eor x1,x1,x10,ror#61
742 eor x2,x2,x13,lsr#7 // sigma0(X[i+1])
743 add x27,x27,x16 // h+=Sigma1(e)
744 eor x28,x28,x21 // Maj(a,b,c)
745 eor x17,x3,x20,ror#39 // Sigma0(a)
746 eor x1,x1,x10,lsr#6 // sigma1(X[i+14])
747 add x12,x12,x5
748 add x23,x23,x27 // d+=h
749 add x27,x27,x28 // h+=Maj(a,b,c)
750 ldr x28,[x30],#8 // *K++, x19 in next round
751 add x12,x12,x2
752 add x27,x27,x17 // h+=Sigma0(a)
753 add x12,x12,x1
754 ldr x1,[sp,#16]
755 str x4,[sp,#8]
756 ror x16,x23,#14
757 add x26,x26,x28 // h+=K[i]
758 ror x3,x14,#1
759 and x17,x24,x23
760 ror x2,x11,#19
761 bic x28,x25,x23
762 ror x4,x27,#28
763 add x26,x26,x12 // h+=X[i]
764 eor x16,x16,x23,ror#18
765 eor x3,x3,x14,ror#8
766 orr x17,x17,x28 // Ch(e,f,g)
767 eor x28,x27,x20 // a^b, b^c in next round
768 eor x16,x16,x23,ror#41 // Sigma1(e)
769 eor x4,x4,x27,ror#34
770 add x26,x26,x17 // h+=Ch(e,f,g)
771 and x19,x19,x28 // (b^c)&=(a^b)
772 eor x2,x2,x11,ror#61
773 eor x3,x3,x14,lsr#7 // sigma0(X[i+1])
774 add x26,x26,x16 // h+=Sigma1(e)
775 eor x19,x19,x20 // Maj(a,b,c)
776 eor x17,x4,x27,ror#39 // Sigma0(a)
777 eor x2,x2,x11,lsr#6 // sigma1(X[i+14])
778 add x13,x13,x6
779 add x22,x22,x26 // d+=h
780 add x26,x26,x19 // h+=Maj(a,b,c)
781 ldr x19,[x30],#8 // *K++, x28 in next round
782 add x13,x13,x3
783 add x26,x26,x17 // h+=Sigma0(a)
784 add x13,x13,x2
785 ldr x2,[sp,#24]
786 str x5,[sp,#16]
787 ror x16,x22,#14
788 add x25,x25,x19 // h+=K[i]
789 ror x4,x15,#1
790 and x17,x23,x22
791 ror x3,x12,#19
792 bic x19,x24,x22
793 ror x5,x26,#28
794 add x25,x25,x13 // h+=X[i]
795 eor x16,x16,x22,ror#18
796 eor x4,x4,x15,ror#8
797 orr x17,x17,x19 // Ch(e,f,g)
798 eor x19,x26,x27 // a^b, b^c in next round
799 eor x16,x16,x22,ror#41 // Sigma1(e)
800 eor x5,x5,x26,ror#34
801 add x25,x25,x17 // h+=Ch(e,f,g)
802 and x28,x28,x19 // (b^c)&=(a^b)
803 eor x3,x3,x12,ror#61
804 eor x4,x4,x15,lsr#7 // sigma0(X[i+1])
805 add x25,x25,x16 // h+=Sigma1(e)
806 eor x28,x28,x27 // Maj(a,b,c)
807 eor x17,x5,x26,ror#39 // Sigma0(a)
808 eor x3,x3,x12,lsr#6 // sigma1(X[i+14])
809 add x14,x14,x7
810 add x21,x21,x25 // d+=h
811 add x25,x25,x28 // h+=Maj(a,b,c)
812 ldr x28,[x30],#8 // *K++, x19 in next round
813 add x14,x14,x4
814 add x25,x25,x17 // h+=Sigma0(a)
815 add x14,x14,x3
816 ldr x3,[sp,#0]
817 str x6,[sp,#24]
818 ror x16,x21,#14
819 add x24,x24,x28 // h+=K[i]
820 ror x5,x0,#1
821 and x17,x22,x21
822 ror x4,x13,#19
823 bic x28,x23,x21
824 ror x6,x25,#28
825 add x24,x24,x14 // h+=X[i]
826 eor x16,x16,x21,ror#18
827 eor x5,x5,x0,ror#8
828 orr x17,x17,x28 // Ch(e,f,g)
829 eor x28,x25,x26 // a^b, b^c in next round
830 eor x16,x16,x21,ror#41 // Sigma1(e)
831 eor x6,x6,x25,ror#34
832 add x24,x24,x17 // h+=Ch(e,f,g)
833 and x19,x19,x28 // (b^c)&=(a^b)
834 eor x4,x4,x13,ror#61
835 eor x5,x5,x0,lsr#7 // sigma0(X[i+1])
836 add x24,x24,x16 // h+=Sigma1(e)
837 eor x19,x19,x26 // Maj(a,b,c)
838 eor x17,x6,x25,ror#39 // Sigma0(a)
839 eor x4,x4,x13,lsr#6 // sigma1(X[i+14])
840 add x15,x15,x8
841 add x20,x20,x24 // d+=h
842 add x24,x24,x19 // h+=Maj(a,b,c)
843 ldr x19,[x30],#8 // *K++, x28 in next round
844 add x15,x15,x5
845 add x24,x24,x17 // h+=Sigma0(a)
846 add x15,x15,x4
847 ldr x4,[sp,#8]
848 str x7,[sp,#0]
849 ror x16,x20,#14
850 add x23,x23,x19 // h+=K[i]
851 ror x6,x1,#1
852 and x17,x21,x20
853 ror x5,x14,#19
854 bic x19,x22,x20
855 ror x7,x24,#28
856 add x23,x23,x15 // h+=X[i]
857 eor x16,x16,x20,ror#18
858 eor x6,x6,x1,ror#8
859 orr x17,x17,x19 // Ch(e,f,g)
860 eor x19,x24,x25 // a^b, b^c in next round
861 eor x16,x16,x20,ror#41 // Sigma1(e)
862 eor x7,x7,x24,ror#34
863 add x23,x23,x17 // h+=Ch(e,f,g)
864 and x28,x28,x19 // (b^c)&=(a^b)
865 eor x5,x5,x14,ror#61
866 eor x6,x6,x1,lsr#7 // sigma0(X[i+1])
867 add x23,x23,x16 // h+=Sigma1(e)
868 eor x28,x28,x25 // Maj(a,b,c)
869 eor x17,x7,x24,ror#39 // Sigma0(a)
870 eor x5,x5,x14,lsr#6 // sigma1(X[i+14])
871 add x0,x0,x9
872 add x27,x27,x23 // d+=h
873 add x23,x23,x28 // h+=Maj(a,b,c)
874 ldr x28,[x30],#8 // *K++, x19 in next round
875 add x0,x0,x6
876 add x23,x23,x17 // h+=Sigma0(a)
877 add x0,x0,x5
878 ldr x5,[sp,#16]
879 str x8,[sp,#8]
880 ror x16,x27,#14
881 add x22,x22,x28 // h+=K[i]
882 ror x7,x2,#1
883 and x17,x20,x27
884 ror x6,x15,#19
885 bic x28,x21,x27
886 ror x8,x23,#28
887 add x22,x22,x0 // h+=X[i]
888 eor x16,x16,x27,ror#18
889 eor x7,x7,x2,ror#8
890 orr x17,x17,x28 // Ch(e,f,g)
891 eor x28,x23,x24 // a^b, b^c in next round
892 eor x16,x16,x27,ror#41 // Sigma1(e)
893 eor x8,x8,x23,ror#34
894 add x22,x22,x17 // h+=Ch(e,f,g)
895 and x19,x19,x28 // (b^c)&=(a^b)
896 eor x6,x6,x15,ror#61
897 eor x7,x7,x2,lsr#7 // sigma0(X[i+1])
898 add x22,x22,x16 // h+=Sigma1(e)
899 eor x19,x19,x24 // Maj(a,b,c)
900 eor x17,x8,x23,ror#39 // Sigma0(a)
901 eor x6,x6,x15,lsr#6 // sigma1(X[i+14])
902 add x1,x1,x10
903 add x26,x26,x22 // d+=h
904 add x22,x22,x19 // h+=Maj(a,b,c)
905 ldr x19,[x30],#8 // *K++, x28 in next round
906 add x1,x1,x7
907 add x22,x22,x17 // h+=Sigma0(a)
908 add x1,x1,x6
909 ldr x6,[sp,#24]
910 str x9,[sp,#16]
911 ror x16,x26,#14
912 add x21,x21,x19 // h+=K[i]
913 ror x8,x3,#1
914 and x17,x27,x26
915 ror x7,x0,#19
916 bic x19,x20,x26
917 ror x9,x22,#28
918 add x21,x21,x1 // h+=X[i]
919 eor x16,x16,x26,ror#18
920 eor x8,x8,x3,ror#8
921 orr x17,x17,x19 // Ch(e,f,g)
922 eor x19,x22,x23 // a^b, b^c in next round
923 eor x16,x16,x26,ror#41 // Sigma1(e)
924 eor x9,x9,x22,ror#34
925 add x21,x21,x17 // h+=Ch(e,f,g)
926 and x28,x28,x19 // (b^c)&=(a^b)
927 eor x7,x7,x0,ror#61
928 eor x8,x8,x3,lsr#7 // sigma0(X[i+1])
929 add x21,x21,x16 // h+=Sigma1(e)
930 eor x28,x28,x23 // Maj(a,b,c)
931 eor x17,x9,x22,ror#39 // Sigma0(a)
932 eor x7,x7,x0,lsr#6 // sigma1(X[i+14])
933 add x2,x2,x11
934 add x25,x25,x21 // d+=h
935 add x21,x21,x28 // h+=Maj(a,b,c)
936 ldr x28,[x30],#8 // *K++, x19 in next round
937 add x2,x2,x8
938 add x21,x21,x17 // h+=Sigma0(a)
939 add x2,x2,x7
940 ldr x7,[sp,#0]
941 str x10,[sp,#24]
942 ror x16,x25,#14
943 add x20,x20,x28 // h+=K[i]
944 ror x9,x4,#1
945 and x17,x26,x25
946 ror x8,x1,#19
947 bic x28,x27,x25
948 ror x10,x21,#28
949 add x20,x20,x2 // h+=X[i]
950 eor x16,x16,x25,ror#18
951 eor x9,x9,x4,ror#8
952 orr x17,x17,x28 // Ch(e,f,g)
953 eor x28,x21,x22 // a^b, b^c in next round
954 eor x16,x16,x25,ror#41 // Sigma1(e)
955 eor x10,x10,x21,ror#34
956 add x20,x20,x17 // h+=Ch(e,f,g)
957 and x19,x19,x28 // (b^c)&=(a^b)
958 eor x8,x8,x1,ror#61
959 eor x9,x9,x4,lsr#7 // sigma0(X[i+1])
960 add x20,x20,x16 // h+=Sigma1(e)
961 eor x19,x19,x22 // Maj(a,b,c)
962 eor x17,x10,x21,ror#39 // Sigma0(a)
963 eor x8,x8,x1,lsr#6 // sigma1(X[i+14])
964 add x3,x3,x12
965 add x24,x24,x20 // d+=h
966 add x20,x20,x19 // h+=Maj(a,b,c)
967 ldr x19,[x30],#8 // *K++, x28 in next round
968 add x3,x3,x9
969 add x20,x20,x17 // h+=Sigma0(a)
970 add x3,x3,x8
971 cbnz x19,.Loop_16_xx
972
973 ldp x0,x2,[x29,#96]
974 ldr x1,[x29,#112]
975 sub x30,x30,#648 // rewind
976
977 ldp x3,x4,[x0]
978 ldp x5,x6,[x0,#2*8]
979 add x1,x1,#14*8 // advance input pointer
980 ldp x7,x8,[x0,#4*8]
981 add x20,x20,x3
982 ldp x9,x10,[x0,#6*8]
983 add x21,x21,x4
984 add x22,x22,x5
985 add x23,x23,x6
986 stp x20,x21,[x0]
987 add x24,x24,x7
988 add x25,x25,x8
989 stp x22,x23,[x0,#2*8]
990 add x26,x26,x9
991 add x27,x27,x10
992 cmp x1,x2
993 stp x24,x25,[x0,#4*8]
994 stp x26,x27,[x0,#6*8]
995 b.ne .Loop
996
997 ldp x19,x20,[x29,#16]
998 add sp,sp,#4*8
999 ldp x21,x22,[x29,#32]
1000 ldp x23,x24,[x29,#48]
1001 ldp x25,x26,[x29,#64]
1002 ldp x27,x28,[x29,#80]
1003 ldp x29,x30,[sp],#128
1004 ret
1005.size sha512_block_data_order,.-sha512_block_data_order
1006
1007.align 6
1008.type K512,%object
1009K512:
1010 .quad 0x428a2f98d728ae22,0x7137449123ef65cd
1011 .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
1012 .quad 0x3956c25bf348b538,0x59f111f1b605d019
1013 .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
1014 .quad 0xd807aa98a3030242,0x12835b0145706fbe
1015 .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
1016 .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
1017 .quad 0x9bdc06a725c71235,0xc19bf174cf692694
1018 .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
1019 .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
1020 .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
1021 .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
1022 .quad 0x983e5152ee66dfab,0xa831c66d2db43210
1023 .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
1024 .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
1025 .quad 0x06ca6351e003826f,0x142929670a0e6e70
1026 .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
1027 .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
1028 .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
1029 .quad 0x81c2c92e47edaee6,0x92722c851482353b
1030 .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
1031 .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
1032 .quad 0xd192e819d6ef5218,0xd69906245565a910
1033 .quad 0xf40e35855771202a,0x106aa07032bbd1b8
1034 .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
1035 .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
1036 .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
1037 .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
1038 .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
1039 .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
1040 .quad 0x90befffa23631e28,0xa4506cebde82bde9
1041 .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
1042 .quad 0xca273eceea26619c,0xd186b8c721c0c207
1043 .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
1044 .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
1045 .quad 0x113f9804bef90dae,0x1b710b35131c471b
1046 .quad 0x28db77f523047d84,0x32caab7b40c72493
1047 .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
1048 .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
1049 .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
1050 .quad 0 // terminator
1051.size K512,.-K512
1052.align 3
1053.LOPENSSL_armcap_P:
1054 .quad OPENSSL_armcap_P-.
1055.asciz "SHA512 block transform for ARMv8, CRYPTOGAMS by <appro@openssl.org>"
1056.align 2
1057.comm OPENSSL_armcap_P,4,4