13f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#include "arm_arch.h"
23f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
33f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.text
43f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
53f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.globl	sha512_block_data_order
63f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.type	sha512_block_data_order,%function
73f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.align	6
83f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Rootsha512_block_data_order:
93f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x29,x30,[sp,#-128]!
103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x29,sp,#0
113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x19,x20,[sp,#16]
133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x21,x22,[sp,#32]
143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x23,x24,[sp,#48]
153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x25,x26,[sp,#64]
163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x27,x28,[sp,#80]
173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	sub	sp,sp,#4*8
183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x20,x21,[x0]				// load context
203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x22,x23,[x0,#2*8]
213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x24,x25,[x0,#4*8]
223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x2,x1,x2,lsl#7	// end of input
233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x26,x27,[x0,#6*8]
243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	adr	x30,K512
253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x0,x2,[x29,#96]
263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.Loop:
283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x3,x4,[x1],#2*8
293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8			// *K++
303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x21,x22				// magic seed
313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x1,[x29,#112]
323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x3,x3			// 0
343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x24,#14
363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x19			// h+=K[i]
373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x6,x24,x24,ror#23
383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x25,x24
393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x26,x24
403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x3			// h+=X[i]
413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x20,x21			// a^b, b^c in next round
433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x6,ror#18	// Sigma1(e)
443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x6,x20,#28
453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x17			// h+=Ch(e,f,g)
463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x20,x20,ror#5
473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x16			// h+=Sigma1(e)
483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x27			// d+=h
503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x21			// Maj(a,b,c)
513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x6,x17,ror#34	// Sigma0(a)
523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x28			// h+=Maj(a,b,c)
533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x27,x27,x17			// h+=Sigma0(a)
553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x4,x4			// 1
573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x5,x6,[x1],#2*8
593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x17			// h+=Sigma0(a)
603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x23,#14
613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x28			// h+=K[i]
623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x7,x23,x23,ror#23
633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x24,x23
643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x25,x23
653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x4			// h+=X[i]
663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x27,x20			// a^b, b^c in next round
683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x7,ror#18	// Sigma1(e)
693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x7,x27,#28
703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x17			// h+=Ch(e,f,g)
713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x27,x27,ror#5
723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x16			// h+=Sigma1(e)
733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x26			// d+=h
753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x20			// Maj(a,b,c)
763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x7,x17,ror#34	// Sigma0(a)
773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x19			// h+=Maj(a,b,c)
783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x26,x26,x17			// h+=Sigma0(a)
803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x5,x5			// 2
823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x17			// h+=Sigma0(a)
843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x22,#14
853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x19			// h+=K[i]
863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x8,x22,x22,ror#23
873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x23,x22
883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x24,x22
893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x5			// h+=X[i]
903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x26,x27			// a^b, b^c in next round
923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x8,ror#18	// Sigma1(e)
933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x8,x26,#28
943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x17			// h+=Ch(e,f,g)
953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x26,x26,ror#5
963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x16			// h+=Sigma1(e)
973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x25			// d+=h
993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x27			// Maj(a,b,c)
1003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x8,x17,ror#34	// Sigma0(a)
1013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x28			// h+=Maj(a,b,c)
1023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
1033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x25,x25,x17			// h+=Sigma0(a)
1043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
1053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x6,x6			// 3
1063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
1073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x7,x8,[x1],#2*8
1083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x17			// h+=Sigma0(a)
1093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x21,#14
1103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x28			// h+=K[i]
1113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x9,x21,x21,ror#23
1123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x22,x21
1133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x23,x21
1143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x6			// h+=X[i]
1153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
1163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x25,x26			// a^b, b^c in next round
1173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x9,ror#18	// Sigma1(e)
1183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x9,x25,#28
1193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x17			// h+=Ch(e,f,g)
1203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x25,x25,ror#5
1213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x16			// h+=Sigma1(e)
1223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
1233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x24			// d+=h
1243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x26			// Maj(a,b,c)
1253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x9,x17,ror#34	// Sigma0(a)
1263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x19			// h+=Maj(a,b,c)
1273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
1283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x24,x24,x17			// h+=Sigma0(a)
1293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
1303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x7,x7			// 4
1313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
1323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x17			// h+=Sigma0(a)
1333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x20,#14
1343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x19			// h+=K[i]
1353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x10,x20,x20,ror#23
1363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x21,x20
1373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x22,x20
1383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x7			// h+=X[i]
1393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
1403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x24,x25			// a^b, b^c in next round
1413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x10,ror#18	// Sigma1(e)
1423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x10,x24,#28
1433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x17			// h+=Ch(e,f,g)
1443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x24,x24,ror#5
1453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x16			// h+=Sigma1(e)
1463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
1473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x23			// d+=h
1483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x25			// Maj(a,b,c)
1493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x10,x17,ror#34	// Sigma0(a)
1503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x28			// h+=Maj(a,b,c)
1513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
1523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x23,x23,x17			// h+=Sigma0(a)
1533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
1543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x8,x8			// 5
1553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
1563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x9,x10,[x1],#2*8
1573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x17			// h+=Sigma0(a)
1583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x27,#14
1593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x28			// h+=K[i]
1603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x11,x27,x27,ror#23
1613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x20,x27
1623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x21,x27
1633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x8			// h+=X[i]
1643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
1653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x23,x24			// a^b, b^c in next round
1663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x11,ror#18	// Sigma1(e)
1673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x11,x23,#28
1683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x17			// h+=Ch(e,f,g)
1693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x23,x23,ror#5
1703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x16			// h+=Sigma1(e)
1713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
1723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x22			// d+=h
1733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x24			// Maj(a,b,c)
1743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x11,x17,ror#34	// Sigma0(a)
1753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x19			// h+=Maj(a,b,c)
1763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
1773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x22,x22,x17			// h+=Sigma0(a)
1783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
1793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x9,x9			// 6
1803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
1813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x17			// h+=Sigma0(a)
1823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x26,#14
1833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x19			// h+=K[i]
1843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x12,x26,x26,ror#23
1853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x27,x26
1863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x20,x26
1873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x9			// h+=X[i]
1883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
1893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x22,x23			// a^b, b^c in next round
1903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x12,ror#18	// Sigma1(e)
1913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x12,x22,#28
1923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x17			// h+=Ch(e,f,g)
1933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x22,x22,ror#5
1943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x16			// h+=Sigma1(e)
1953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
1963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x21			// d+=h
1973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x23			// Maj(a,b,c)
1983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x12,x17,ror#34	// Sigma0(a)
1993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x28			// h+=Maj(a,b,c)
2003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
2013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x21,x21,x17			// h+=Sigma0(a)
2023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
2033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x10,x10			// 7
2043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
2053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x11,x12,[x1],#2*8
2063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x17			// h+=Sigma0(a)
2073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x25,#14
2083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x28			// h+=K[i]
2093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x13,x25,x25,ror#23
2103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x26,x25
2113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x27,x25
2123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x10			// h+=X[i]
2133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
2143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x21,x22			// a^b, b^c in next round
2153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x13,ror#18	// Sigma1(e)
2163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x13,x21,#28
2173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x17			// h+=Ch(e,f,g)
2183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x21,x21,ror#5
2193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x16			// h+=Sigma1(e)
2203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
2213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x20			// d+=h
2223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x22			// Maj(a,b,c)
2233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x13,x17,ror#34	// Sigma0(a)
2243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x19			// h+=Maj(a,b,c)
2253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
2263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x20,x20,x17			// h+=Sigma0(a)
2273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
2283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x11,x11			// 8
2293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
2303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x17			// h+=Sigma0(a)
2313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x24,#14
2323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x19			// h+=K[i]
2333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x14,x24,x24,ror#23
2343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x25,x24
2353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x26,x24
2363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x11			// h+=X[i]
2373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
2383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x20,x21			// a^b, b^c in next round
2393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x14,ror#18	// Sigma1(e)
2403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x14,x20,#28
2413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x17			// h+=Ch(e,f,g)
2423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x20,x20,ror#5
2433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x16			// h+=Sigma1(e)
2443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
2453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x27			// d+=h
2463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x21			// Maj(a,b,c)
2473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x14,x17,ror#34	// Sigma0(a)
2483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x28			// h+=Maj(a,b,c)
2493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
2503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x27,x27,x17			// h+=Sigma0(a)
2513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
2523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x12,x12			// 9
2533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
2543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x13,x14,[x1],#2*8
2553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x17			// h+=Sigma0(a)
2563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x23,#14
2573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x28			// h+=K[i]
2583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x15,x23,x23,ror#23
2593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x24,x23
2603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x25,x23
2613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x12			// h+=X[i]
2623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
2633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x27,x20			// a^b, b^c in next round
2643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x15,ror#18	// Sigma1(e)
2653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x15,x27,#28
2663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x17			// h+=Ch(e,f,g)
2673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x27,x27,ror#5
2683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x16			// h+=Sigma1(e)
2693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
2703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x26			// d+=h
2713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x20			// Maj(a,b,c)
2723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x15,x17,ror#34	// Sigma0(a)
2733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x19			// h+=Maj(a,b,c)
2743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
2753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x26,x26,x17			// h+=Sigma0(a)
2763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
2773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x13,x13			// 10
2783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
2793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x17			// h+=Sigma0(a)
2803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x22,#14
2813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x19			// h+=K[i]
2823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x0,x22,x22,ror#23
2833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x23,x22
2843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x24,x22
2853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x13			// h+=X[i]
2863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
2873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x26,x27			// a^b, b^c in next round
2883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x0,ror#18	// Sigma1(e)
2893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x0,x26,#28
2903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x17			// h+=Ch(e,f,g)
2913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x26,x26,ror#5
2923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x16			// h+=Sigma1(e)
2933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
2943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x25			// d+=h
2953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x27			// Maj(a,b,c)
2963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x0,x17,ror#34	// Sigma0(a)
2973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x28			// h+=Maj(a,b,c)
2983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
2993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x25,x25,x17			// h+=Sigma0(a)
3003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
3013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x14,x14			// 11
3023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
3033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x15,x0,[x1],#2*8
3043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x17			// h+=Sigma0(a)
3053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x6,[sp,#24]
3063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x21,#14
3073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x28			// h+=K[i]
3083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x6,x21,x21,ror#23
3093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x22,x21
3103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x23,x21
3113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x14			// h+=X[i]
3123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
3133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x25,x26			// a^b, b^c in next round
3143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x6,ror#18	// Sigma1(e)
3153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x6,x25,#28
3163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x17			// h+=Ch(e,f,g)
3173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x25,x25,ror#5
3183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x16			// h+=Sigma1(e)
3193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
3203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x24			// d+=h
3213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x26			// Maj(a,b,c)
3223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x6,x17,ror#34	// Sigma0(a)
3233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x19			// h+=Maj(a,b,c)
3243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
3253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x24,x24,x17			// h+=Sigma0(a)
3263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
3273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x15,x15			// 12
3283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
3293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x17			// h+=Sigma0(a)
3303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x7,[sp,#0]
3313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x20,#14
3323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x19			// h+=K[i]
3333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x7,x20,x20,ror#23
3343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x21,x20
3353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x22,x20
3363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x15			// h+=X[i]
3373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
3383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x24,x25			// a^b, b^c in next round
3393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x7,ror#18	// Sigma1(e)
3403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x7,x24,#28
3413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x17			// h+=Ch(e,f,g)
3423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x24,x24,ror#5
3433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x16			// h+=Sigma1(e)
3443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
3453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x23			// d+=h
3463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x25			// Maj(a,b,c)
3473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x7,x17,ror#34	// Sigma0(a)
3483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x28			// h+=Maj(a,b,c)
3493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
3503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x23,x23,x17			// h+=Sigma0(a)
3513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
3523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x0,x0			// 13
3533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
3543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x1,x2,[x1]
3553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x17			// h+=Sigma0(a)
3563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x8,[sp,#8]
3573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x27,#14
3583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x28			// h+=K[i]
3593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x8,x27,x27,ror#23
3603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x20,x27
3613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x21,x27
3623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x0			// h+=X[i]
3633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
3643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x23,x24			// a^b, b^c in next round
3653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x8,ror#18	// Sigma1(e)
3663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x8,x23,#28
3673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x17			// h+=Ch(e,f,g)
3683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x23,x23,ror#5
3693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x16			// h+=Sigma1(e)
3703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
3713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x22			// d+=h
3723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x24			// Maj(a,b,c)
3733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x8,x17,ror#34	// Sigma0(a)
3743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x19			// h+=Maj(a,b,c)
3753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
3763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x22,x22,x17			// h+=Sigma0(a)
3773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
3783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x1,x1			// 14
3793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
3803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x6,[sp,#24]
3813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x17			// h+=Sigma0(a)
3823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x9,[sp,#16]
3833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x26,#14
3843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x19			// h+=K[i]
3853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x9,x26,x26,ror#23
3863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x27,x26
3873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x20,x26
3883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x1			// h+=X[i]
3893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
3903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x22,x23			// a^b, b^c in next round
3913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x9,ror#18	// Sigma1(e)
3923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x9,x22,#28
3933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x17			// h+=Ch(e,f,g)
3943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x22,x22,ror#5
3953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x16			// h+=Sigma1(e)
3963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
3973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x21			// d+=h
3983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x23			// Maj(a,b,c)
3993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x9,x17,ror#34	// Sigma0(a)
4003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x28			// h+=Maj(a,b,c)
4013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
4023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	//add	x21,x21,x17			// h+=Sigma0(a)
4033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef	__ARMEB__
4043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	rev	x2,x2			// 15
4053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
4063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x7,[sp,#0]
4073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x17			// h+=Sigma0(a)
4083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x10,[sp,#24]
4093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x25,#14
4103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x28			// h+=K[i]
4113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x9,x4,#1
4123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x26,x25
4133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x8,x1,#19
4143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x27,x25
4153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x10,x21,#28
4163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x2			// h+=X[i]
4173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x25,ror#18
4183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x9,x9,x4,ror#8
4193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
4203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x21,x22			// a^b, b^c in next round
4213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x25,ror#41	// Sigma1(e)
4223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x10,x10,x21,ror#34
4233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x17			// h+=Ch(e,f,g)
4243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
4253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x8,x8,x1,ror#61
4263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x9,x9,x4,lsr#7	// sigma0(X[i+1])
4273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x16			// h+=Sigma1(e)
4283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x22			// Maj(a,b,c)
4293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x10,x21,ror#39	// Sigma0(a)
4303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x8,x8,x1,lsr#6	// sigma1(X[i+14])
4313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x3,x3,x12
4323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x20			// d+=h
4333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x19			// h+=Maj(a,b,c)
4343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
4353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x3,x3,x9
4363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x17			// h+=Sigma0(a)
4373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x3,x3,x8
4383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.Loop_16_xx:
4393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x8,[sp,#8]
4403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x11,[sp,#0]
4413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x24,#14
4423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x19			// h+=K[i]
4433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x10,x5,#1
4443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x25,x24
4453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x9,x2,#19
4463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x26,x24
4473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x11,x20,#28
4483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x3			// h+=X[i]
4493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x24,ror#18
4503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x10,x10,x5,ror#8
4513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
4523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x20,x21			// a^b, b^c in next round
4533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x24,ror#41	// Sigma1(e)
4543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x11,x11,x20,ror#34
4553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x17			// h+=Ch(e,f,g)
4563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
4573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x9,x9,x2,ror#61
4583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x10,x10,x5,lsr#7	// sigma0(X[i+1])
4593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x16			// h+=Sigma1(e)
4603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x21			// Maj(a,b,c)
4613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x11,x20,ror#39	// Sigma0(a)
4623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x9,x9,x2,lsr#6	// sigma1(X[i+14])
4633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x4,x4,x13
4643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x27			// d+=h
4653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x28			// h+=Maj(a,b,c)
4663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
4673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x4,x4,x10
4683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x17			// h+=Sigma0(a)
4693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x4,x4,x9
4703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x9,[sp,#16]
4713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x12,[sp,#8]
4723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x23,#14
4733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x28			// h+=K[i]
4743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x11,x6,#1
4753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x24,x23
4763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x10,x3,#19
4773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x25,x23
4783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x12,x27,#28
4793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x4			// h+=X[i]
4803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x23,ror#18
4813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x11,x11,x6,ror#8
4823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
4833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x27,x20			// a^b, b^c in next round
4843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x23,ror#41	// Sigma1(e)
4853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x12,x12,x27,ror#34
4863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x17			// h+=Ch(e,f,g)
4873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
4883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x10,x10,x3,ror#61
4893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x11,x11,x6,lsr#7	// sigma0(X[i+1])
4903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x16			// h+=Sigma1(e)
4913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x20			// Maj(a,b,c)
4923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x12,x27,ror#39	// Sigma0(a)
4933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x10,x10,x3,lsr#6	// sigma1(X[i+14])
4943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x5,x5,x14
4953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x26			// d+=h
4963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x19			// h+=Maj(a,b,c)
4973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
4983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x5,x5,x11
4993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x17			// h+=Sigma0(a)
5003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x5,x5,x10
5013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x10,[sp,#24]
5023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x13,[sp,#16]
5033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x22,#14
5043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x19			// h+=K[i]
5053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x12,x7,#1
5063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x23,x22
5073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x11,x4,#19
5083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x24,x22
5093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x13,x26,#28
5103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x5			// h+=X[i]
5113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x22,ror#18
5123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x12,x12,x7,ror#8
5133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
5143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x26,x27			// a^b, b^c in next round
5153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x22,ror#41	// Sigma1(e)
5163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x13,x13,x26,ror#34
5173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x17			// h+=Ch(e,f,g)
5183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
5193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x11,x11,x4,ror#61
5203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x12,x12,x7,lsr#7	// sigma0(X[i+1])
5213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x16			// h+=Sigma1(e)
5223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x27			// Maj(a,b,c)
5233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x13,x26,ror#39	// Sigma0(a)
5243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x11,x11,x4,lsr#6	// sigma1(X[i+14])
5253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x6,x6,x15
5263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x25			// d+=h
5273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x28			// h+=Maj(a,b,c)
5283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
5293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x6,x6,x12
5303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x17			// h+=Sigma0(a)
5313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x6,x6,x11
5323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x11,[sp,#0]
5333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x14,[sp,#24]
5343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x21,#14
5353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x28			// h+=K[i]
5363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x13,x8,#1
5373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x22,x21
5383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x12,x5,#19
5393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x23,x21
5403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x14,x25,#28
5413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x6			// h+=X[i]
5423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x21,ror#18
5433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x13,x13,x8,ror#8
5443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
5453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x25,x26			// a^b, b^c in next round
5463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x21,ror#41	// Sigma1(e)
5473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x14,x14,x25,ror#34
5483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x17			// h+=Ch(e,f,g)
5493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
5503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x12,x12,x5,ror#61
5513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x13,x13,x8,lsr#7	// sigma0(X[i+1])
5523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x16			// h+=Sigma1(e)
5533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x26			// Maj(a,b,c)
5543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x14,x25,ror#39	// Sigma0(a)
5553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x12,x12,x5,lsr#6	// sigma1(X[i+14])
5563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x7,x7,x0
5573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x24			// d+=h
5583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x19			// h+=Maj(a,b,c)
5593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
5603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x7,x7,x13
5613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x17			// h+=Sigma0(a)
5623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x7,x7,x12
5633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x12,[sp,#8]
5643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x15,[sp,#0]
5653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x20,#14
5663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x19			// h+=K[i]
5673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x14,x9,#1
5683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x21,x20
5693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x13,x6,#19
5703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x22,x20
5713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x15,x24,#28
5723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x7			// h+=X[i]
5733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x20,ror#18
5743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x14,x14,x9,ror#8
5753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
5763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x24,x25			// a^b, b^c in next round
5773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x20,ror#41	// Sigma1(e)
5783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x15,x15,x24,ror#34
5793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x17			// h+=Ch(e,f,g)
5803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
5813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x13,x13,x6,ror#61
5823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x14,x14,x9,lsr#7	// sigma0(X[i+1])
5833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x16			// h+=Sigma1(e)
5843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x25			// Maj(a,b,c)
5853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x15,x24,ror#39	// Sigma0(a)
5863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x13,x13,x6,lsr#6	// sigma1(X[i+14])
5873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x8,x8,x1
5883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x23			// d+=h
5893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x28			// h+=Maj(a,b,c)
5903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
5913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x8,x8,x14
5923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x17			// h+=Sigma0(a)
5933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x8,x8,x13
5943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x13,[sp,#16]
5953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x0,[sp,#8]
5963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x27,#14
5973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x28			// h+=K[i]
5983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x15,x10,#1
5993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x20,x27
6003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x14,x7,#19
6013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x21,x27
6023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x0,x23,#28
6033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x8			// h+=X[i]
6043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x27,ror#18
6053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x15,x15,x10,ror#8
6063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
6073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x23,x24			// a^b, b^c in next round
6083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x27,ror#41	// Sigma1(e)
6093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x0,x0,x23,ror#34
6103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x17			// h+=Ch(e,f,g)
6113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
6123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x14,x14,x7,ror#61
6133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x15,x15,x10,lsr#7	// sigma0(X[i+1])
6143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x16			// h+=Sigma1(e)
6153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x24			// Maj(a,b,c)
6163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x0,x23,ror#39	// Sigma0(a)
6173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x14,x14,x7,lsr#6	// sigma1(X[i+14])
6183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x9,x9,x2
6193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x22			// d+=h
6203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x19			// h+=Maj(a,b,c)
6213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
6223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x9,x9,x15
6233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x17			// h+=Sigma0(a)
6243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x9,x9,x14
6253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x14,[sp,#24]
6263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x1,[sp,#16]
6273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x26,#14
6283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x19			// h+=K[i]
6293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x0,x11,#1
6303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x27,x26
6313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x15,x8,#19
6323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x20,x26
6333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x1,x22,#28
6343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x9			// h+=X[i]
6353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x26,ror#18
6363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x0,x0,x11,ror#8
6373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
6383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x22,x23			// a^b, b^c in next round
6393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x26,ror#41	// Sigma1(e)
6403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x1,x1,x22,ror#34
6413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x17			// h+=Ch(e,f,g)
6423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
6433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x15,x15,x8,ror#61
6443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x0,x0,x11,lsr#7	// sigma0(X[i+1])
6453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x16			// h+=Sigma1(e)
6463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x23			// Maj(a,b,c)
6473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x1,x22,ror#39	// Sigma0(a)
6483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x15,x15,x8,lsr#6	// sigma1(X[i+14])
6493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x10,x10,x3
6503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x21			// d+=h
6513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x28			// h+=Maj(a,b,c)
6523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
6533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x10,x10,x0
6543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x17			// h+=Sigma0(a)
6553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x10,x10,x15
6563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x15,[sp,#0]
6573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x2,[sp,#24]
6583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x25,#14
6593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x28			// h+=K[i]
6603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x1,x12,#1
6613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x26,x25
6623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x0,x9,#19
6633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x27,x25
6643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x2,x21,#28
6653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x10			// h+=X[i]
6663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x25,ror#18
6673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x1,x1,x12,ror#8
6683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
6693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x21,x22			// a^b, b^c in next round
6703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x25,ror#41	// Sigma1(e)
6713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x2,x2,x21,ror#34
6723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x17			// h+=Ch(e,f,g)
6733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
6743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x0,x0,x9,ror#61
6753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x1,x1,x12,lsr#7	// sigma0(X[i+1])
6763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x16			// h+=Sigma1(e)
6773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x22			// Maj(a,b,c)
6783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x2,x21,ror#39	// Sigma0(a)
6793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x0,x0,x9,lsr#6	// sigma1(X[i+14])
6803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x11,x11,x4
6813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x20			// d+=h
6823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x19			// h+=Maj(a,b,c)
6833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
6843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x11,x11,x1
6853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x17			// h+=Sigma0(a)
6863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x11,x11,x0
6873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x0,[sp,#8]
6883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x3,[sp,#0]
6893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x24,#14
6903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x19			// h+=K[i]
6913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x2,x13,#1
6923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x25,x24
6933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x1,x10,#19
6943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x26,x24
6953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x3,x20,#28
6963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x11			// h+=X[i]
6973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x24,ror#18
6983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x2,x2,x13,ror#8
6993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
7003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x20,x21			// a^b, b^c in next round
7013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x24,ror#41	// Sigma1(e)
7023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x3,x3,x20,ror#34
7033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x17			// h+=Ch(e,f,g)
7043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
7053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x1,x1,x10,ror#61
7063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x2,x2,x13,lsr#7	// sigma0(X[i+1])
7073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x16			// h+=Sigma1(e)
7083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x21			// Maj(a,b,c)
7093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x3,x20,ror#39	// Sigma0(a)
7103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x1,x1,x10,lsr#6	// sigma1(X[i+14])
7113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x12,x12,x5
7123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x27			// d+=h
7133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x28			// h+=Maj(a,b,c)
7143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
7153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x12,x12,x2
7163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x17			// h+=Sigma0(a)
7173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x12,x12,x1
7183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x1,[sp,#16]
7193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x4,[sp,#8]
7203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x23,#14
7213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x28			// h+=K[i]
7223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x3,x14,#1
7233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x24,x23
7243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x2,x11,#19
7253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x25,x23
7263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x4,x27,#28
7273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x12			// h+=X[i]
7283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x23,ror#18
7293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x3,x3,x14,ror#8
7303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
7313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x27,x20			// a^b, b^c in next round
7323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x23,ror#41	// Sigma1(e)
7333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x4,x4,x27,ror#34
7343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x17			// h+=Ch(e,f,g)
7353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
7363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x2,x2,x11,ror#61
7373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x3,x3,x14,lsr#7	// sigma0(X[i+1])
7383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x16			// h+=Sigma1(e)
7393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x20			// Maj(a,b,c)
7403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x4,x27,ror#39	// Sigma0(a)
7413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x2,x2,x11,lsr#6	// sigma1(X[i+14])
7423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x13,x13,x6
7433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x26			// d+=h
7443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x19			// h+=Maj(a,b,c)
7453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
7463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x13,x13,x3
7473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x17			// h+=Sigma0(a)
7483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x13,x13,x2
7493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x2,[sp,#24]
7503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x5,[sp,#16]
7513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x22,#14
7523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x19			// h+=K[i]
7533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x4,x15,#1
7543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x23,x22
7553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x3,x12,#19
7563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x24,x22
7573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x5,x26,#28
7583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x13			// h+=X[i]
7593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x22,ror#18
7603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x4,x4,x15,ror#8
7613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
7623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x26,x27			// a^b, b^c in next round
7633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x22,ror#41	// Sigma1(e)
7643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x5,x5,x26,ror#34
7653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x17			// h+=Ch(e,f,g)
7663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
7673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x3,x3,x12,ror#61
7683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x4,x4,x15,lsr#7	// sigma0(X[i+1])
7693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x16			// h+=Sigma1(e)
7703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x27			// Maj(a,b,c)
7713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x5,x26,ror#39	// Sigma0(a)
7723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x3,x3,x12,lsr#6	// sigma1(X[i+14])
7733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x14,x14,x7
7743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x25			// d+=h
7753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x28			// h+=Maj(a,b,c)
7763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
7773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x14,x14,x4
7783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x17			// h+=Sigma0(a)
7793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x14,x14,x3
7803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x3,[sp,#0]
7813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x6,[sp,#24]
7823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x21,#14
7833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x28			// h+=K[i]
7843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x5,x0,#1
7853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x22,x21
7863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x4,x13,#19
7873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x23,x21
7883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x6,x25,#28
7893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x14			// h+=X[i]
7903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x21,ror#18
7913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x5,x5,x0,ror#8
7923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
7933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x25,x26			// a^b, b^c in next round
7943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x21,ror#41	// Sigma1(e)
7953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x6,x6,x25,ror#34
7963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x17			// h+=Ch(e,f,g)
7973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
7983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x4,x4,x13,ror#61
7993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x5,x5,x0,lsr#7	// sigma0(X[i+1])
8003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x16			// h+=Sigma1(e)
8013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x26			// Maj(a,b,c)
8023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x6,x25,ror#39	// Sigma0(a)
8033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x4,x4,x13,lsr#6	// sigma1(X[i+14])
8043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x15,x15,x8
8053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x24			// d+=h
8063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x19			// h+=Maj(a,b,c)
8073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
8083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x15,x15,x5
8093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x17			// h+=Sigma0(a)
8103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x15,x15,x4
8113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x4,[sp,#8]
8123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x7,[sp,#0]
8133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x20,#14
8143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x19			// h+=K[i]
8153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x6,x1,#1
8163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x21,x20
8173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x5,x14,#19
8183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x22,x20
8193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x7,x24,#28
8203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x15			// h+=X[i]
8213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x20,ror#18
8223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x6,x6,x1,ror#8
8233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
8243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x24,x25			// a^b, b^c in next round
8253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x20,ror#41	// Sigma1(e)
8263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x7,x7,x24,ror#34
8273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x17			// h+=Ch(e,f,g)
8283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
8293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x5,x5,x14,ror#61
8303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x6,x6,x1,lsr#7	// sigma0(X[i+1])
8313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x16			// h+=Sigma1(e)
8323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x25			// Maj(a,b,c)
8333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x7,x24,ror#39	// Sigma0(a)
8343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x5,x5,x14,lsr#6	// sigma1(X[i+14])
8353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x0,x0,x9
8363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x23			// d+=h
8373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x28			// h+=Maj(a,b,c)
8383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
8393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x0,x0,x6
8403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x17			// h+=Sigma0(a)
8413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x0,x0,x5
8423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x5,[sp,#16]
8433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x8,[sp,#8]
8443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x27,#14
8453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x28			// h+=K[i]
8463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x7,x2,#1
8473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x20,x27
8483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x6,x15,#19
8493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x21,x27
8503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x8,x23,#28
8513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x0			// h+=X[i]
8523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x27,ror#18
8533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x7,x7,x2,ror#8
8543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
8553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x23,x24			// a^b, b^c in next round
8563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x27,ror#41	// Sigma1(e)
8573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x8,x8,x23,ror#34
8583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x17			// h+=Ch(e,f,g)
8593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
8603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x6,x6,x15,ror#61
8613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x7,x7,x2,lsr#7	// sigma0(X[i+1])
8623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x16			// h+=Sigma1(e)
8633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x24			// Maj(a,b,c)
8643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x8,x23,ror#39	// Sigma0(a)
8653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x6,x6,x15,lsr#6	// sigma1(X[i+14])
8663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x1,x1,x10
8673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x22			// d+=h
8683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x19			// h+=Maj(a,b,c)
8693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
8703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x1,x1,x7
8713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x17			// h+=Sigma0(a)
8723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x1,x1,x6
8733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x6,[sp,#24]
8743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x9,[sp,#16]
8753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x26,#14
8763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x19			// h+=K[i]
8773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x8,x3,#1
8783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x27,x26
8793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x7,x0,#19
8803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x19,x20,x26
8813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x9,x22,#28
8823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x1			// h+=X[i]
8833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x26,ror#18
8843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x8,x8,x3,ror#8
8853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x19			// Ch(e,f,g)
8863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x22,x23			// a^b, b^c in next round
8873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x26,ror#41	// Sigma1(e)
8883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x9,x9,x22,ror#34
8893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x17			// h+=Ch(e,f,g)
8903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x28,x28,x19			// (b^c)&=(a^b)
8913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x7,x7,x0,ror#61
8923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x8,x8,x3,lsr#7	// sigma0(X[i+1])
8933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x16			// h+=Sigma1(e)
8943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x28,x23			// Maj(a,b,c)
8953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x9,x22,ror#39	// Sigma0(a)
8963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x7,x7,x0,lsr#6	// sigma1(X[i+14])
8973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x2,x2,x11
8983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x21			// d+=h
8993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x28			// h+=Maj(a,b,c)
9003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x28,[x30],#8		// *K++, x19 in next round
9013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x2,x2,x8
9023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x17			// h+=Sigma0(a)
9033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x2,x2,x7
9043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x7,[sp,#0]
9053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	x10,[sp,#24]
9063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x16,x25,#14
9073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x28			// h+=K[i]
9083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x9,x4,#1
9093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x17,x26,x25
9103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x8,x1,#19
9113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bic	x28,x27,x25
9123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ror	x10,x21,#28
9133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x2			// h+=X[i]
9143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x25,ror#18
9153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x9,x9,x4,ror#8
9163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	orr	x17,x17,x28			// Ch(e,f,g)
9173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x28,x21,x22			// a^b, b^c in next round
9183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x16,x16,x25,ror#41	// Sigma1(e)
9193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x10,x10,x21,ror#34
9203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x17			// h+=Ch(e,f,g)
9213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	and	x19,x19,x28			// (b^c)&=(a^b)
9223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x8,x8,x1,ror#61
9233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x9,x9,x4,lsr#7	// sigma0(X[i+1])
9243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x16			// h+=Sigma1(e)
9253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x19,x19,x22			// Maj(a,b,c)
9263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x17,x10,x21,ror#39	// Sigma0(a)
9273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	eor	x8,x8,x1,lsr#6	// sigma1(X[i+14])
9283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x3,x3,x12
9293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x20			// d+=h
9303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x19			// h+=Maj(a,b,c)
9313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x19,[x30],#8		// *K++, x28 in next round
9323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x3,x3,x9
9333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x17			// h+=Sigma0(a)
9343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x3,x3,x8
9353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	cbnz	x19,.Loop_16_xx
9363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
9373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x0,x2,[x29,#96]
9383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	x1,[x29,#112]
9393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	sub	x30,x30,#648		// rewind
9403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
9413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x3,x4,[x0]
9423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x5,x6,[x0,#2*8]
9433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x1,x1,#14*8			// advance input pointer
9443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x7,x8,[x0,#4*8]
9453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x20,x20,x3
9463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x9,x10,[x0,#6*8]
9473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x21,x21,x4
9483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x22,x22,x5
9493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x23,x23,x6
9503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x20,x21,[x0]
9513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x24,x24,x7
9523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x25,x25,x8
9533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x22,x23,[x0,#2*8]
9543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x26,x26,x9
9553f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	x27,x27,x10
9563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	cmp	x1,x2
9573f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x24,x25,[x0,#4*8]
9583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stp	x26,x27,[x0,#6*8]
9593f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	b.ne	.Loop
9603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
9613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x19,x20,[x29,#16]
9623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	sp,sp,#4*8
9633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x21,x22,[x29,#32]
9643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x23,x24,[x29,#48]
9653f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x25,x26,[x29,#64]
9663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x27,x28,[x29,#80]
9673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldp	x29,x30,[sp],#128
9683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ret
9693f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.size	sha512_block_data_order,.-sha512_block_data_order
9703f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
9713f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.align	6
9723f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.type	K512,%object
9733f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny RootK512:
9743f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x428a2f98d728ae22,0x7137449123ef65cd
9753f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
9763f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x3956c25bf348b538,0x59f111f1b605d019
9773f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x923f82a4af194f9b,0xab1c5ed5da6d8118
9783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xd807aa98a3030242,0x12835b0145706fbe
9793f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
9803f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x72be5d74f27b896f,0x80deb1fe3b1696b1
9813f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x9bdc06a725c71235,0xc19bf174cf692694
9823f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xe49b69c19ef14ad2,0xefbe4786384f25e3
9833f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
9843f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x2de92c6f592b0275,0x4a7484aa6ea6e483
9853f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x5cb0a9dcbd41fbd4,0x76f988da831153b5
9863f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x983e5152ee66dfab,0xa831c66d2db43210
9873f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xb00327c898fb213f,0xbf597fc7beef0ee4
9883f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xc6e00bf33da88fc2,0xd5a79147930aa725
9893f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x06ca6351e003826f,0x142929670a0e6e70
9903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x27b70a8546d22ffc,0x2e1b21385c26c926
9913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x4d2c6dfc5ac42aed,0x53380d139d95b3df
9923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x650a73548baf63de,0x766a0abb3c77b2a8
9933f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x81c2c92e47edaee6,0x92722c851482353b
9943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xa2bfe8a14cf10364,0xa81a664bbc423001
9953f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xc24b8b70d0f89791,0xc76c51a30654be30
9963f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xd192e819d6ef5218,0xd69906245565a910
9973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xf40e35855771202a,0x106aa07032bbd1b8
9983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x19a4c116b8d2d0c8,0x1e376c085141ab53
9993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
10003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
10013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
10023f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x748f82ee5defb2fc,0x78a5636f43172f60
10033f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x84c87814a1f0ab72,0x8cc702081a6439ec
10043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x90befffa23631e28,0xa4506cebde82bde9
10053f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xbef9a3f7b2c67915,0xc67178f2e372532b
10063f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xca273eceea26619c,0xd186b8c721c0c207
10073f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
10083f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x06f067aa72176fba,0x0a637dc5a2c898a6
10093f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x113f9804bef90dae,0x1b710b35131c471b
10103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x28db77f523047d84,0x32caab7b40c72493
10113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
10123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x4cc5d4becb3e42b6,0x597f299cfc657e2a
10133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0x5fcb6fab3ad6faec,0x6c44198c4a475817
10143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	0	// terminator
10153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.size	K512,.-K512
10163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.align	3
10173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.LOPENSSL_armcap_P:
10183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	.quad	OPENSSL_armcap_P-.
10193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.asciz	"SHA512 block transform for ARMv8, CRYPTOGAMS by <appro@openssl.org>"
10203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.align	2
10213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.comm	OPENSSL_armcap_P,4,4
1022