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