xref: /freebsd/sys/contrib/openzfs/module/icp/asm-aarch64/sha2/sha256-armv8.S (revision 61145dc2b94f12f6a47344fb9aac702321880e43)
1*61145dc2SMartin Matuska// SPDX-License-Identifier: Apache-2.0
22a58b312SMartin Matuska/*
32a58b312SMartin Matuska * Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved.
42a58b312SMartin Matuska *
52a58b312SMartin Matuska * Licensed under the Apache License, Version 2.0 (the "License");
62a58b312SMartin Matuska * you may not use this file except in compliance with the License.
72a58b312SMartin Matuska * You may obtain a copy of the License at
82a58b312SMartin Matuska *
92a58b312SMartin Matuska *     https://www.apache.org/licenses/LICENSE-2.0
102a58b312SMartin Matuska *
112a58b312SMartin Matuska * Unless required by applicable law or agreed to in writing, software
122a58b312SMartin Matuska * distributed under the License is distributed on an "AS IS" BASIS,
132a58b312SMartin Matuska * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
142a58b312SMartin Matuska * See the License for the specific language governing permissions and
152a58b312SMartin Matuska * limitations under the License.
162a58b312SMartin Matuska */
172a58b312SMartin Matuska
182a58b312SMartin Matuska/*
192a58b312SMartin Matuska * Portions Copyright (c) 2022 Tino Reichardt <milky-zfs@mcmilk.de>
202a58b312SMartin Matuska * - modified assembly to fit into OpenZFS
212a58b312SMartin Matuska */
222a58b312SMartin Matuska
232a58b312SMartin Matuska#if defined(__aarch64__)
242a58b312SMartin Matuska
251719886fSMartin Matuska	.section	.note.gnu.property,"a",@note
261719886fSMartin Matuska	.p2align	3
271719886fSMartin Matuska	.word	4
281719886fSMartin Matuska	.word	16
291719886fSMartin Matuska	.word	5
301719886fSMartin Matuska	.asciz	"GNU"
311719886fSMartin Matuska	.word	3221225472
321719886fSMartin Matuska	.word	4
331719886fSMartin Matuska	.word	3
341719886fSMartin Matuska	.word	0
352a58b312SMartin Matuska.text
362a58b312SMartin Matuska
372a58b312SMartin Matuska.align	6
382a58b312SMartin Matuska.type	.LK256,%object
392a58b312SMartin Matuska.LK256:
402a58b312SMartin Matuska	.long	0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
412a58b312SMartin Matuska	.long	0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
422a58b312SMartin Matuska	.long	0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
432a58b312SMartin Matuska	.long	0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
442a58b312SMartin Matuska	.long	0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
452a58b312SMartin Matuska	.long	0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
462a58b312SMartin Matuska	.long	0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
472a58b312SMartin Matuska	.long	0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
482a58b312SMartin Matuska	.long	0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
492a58b312SMartin Matuska	.long	0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
502a58b312SMartin Matuska	.long	0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
512a58b312SMartin Matuska	.long	0xd192e819,0xd6990624,0xf40e3585,0x106aa070
522a58b312SMartin Matuska	.long	0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
532a58b312SMartin Matuska	.long	0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
542a58b312SMartin Matuska	.long	0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
552a58b312SMartin Matuska	.long	0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
562a58b312SMartin Matuska	.long	0	//terminator
572a58b312SMartin Matuska.size	.LK256,.-.LK256
582a58b312SMartin Matuska
592a58b312SMartin Matuska.globl	zfs_sha256_block_armv7
602a58b312SMartin Matuska.type	zfs_sha256_block_armv7,%function
612a58b312SMartin Matuska.align	6
622a58b312SMartin Matuskazfs_sha256_block_armv7:
63f7f4bd06SMartin Matuska	hint	#34					// bti c
642a58b312SMartin Matuska	stp	x29,x30,[sp,#-128]!
652a58b312SMartin Matuska	add	x29,sp,#0
662a58b312SMartin Matuska
672a58b312SMartin Matuska	stp	x19,x20,[sp,#16]
682a58b312SMartin Matuska	stp	x21,x22,[sp,#32]
692a58b312SMartin Matuska	stp	x23,x24,[sp,#48]
702a58b312SMartin Matuska	stp	x25,x26,[sp,#64]
712a58b312SMartin Matuska	stp	x27,x28,[sp,#80]
722a58b312SMartin Matuska	sub	sp,sp,#4*4
732a58b312SMartin Matuska
742a58b312SMartin Matuska	ldp	w20,w21,[x0]				// load context
752a58b312SMartin Matuska	ldp	w22,w23,[x0,#2*4]
762a58b312SMartin Matuska	ldp	w24,w25,[x0,#4*4]
772a58b312SMartin Matuska	add	x2,x1,x2,lsl#6	// end of input
782a58b312SMartin Matuska	ldp	w26,w27,[x0,#6*4]
792a58b312SMartin Matuska	adr	x30,.LK256
802a58b312SMartin Matuska	stp	x0,x2,[x29,#96]
812a58b312SMartin Matuska
822a58b312SMartin Matuska.Loop:
832a58b312SMartin Matuska	ldp	w3,w4,[x1],#2*4
842a58b312SMartin Matuska	ldr	w19,[x30],#4			// *K++
852a58b312SMartin Matuska	eor	w28,w21,w22				// magic seed
862a58b312SMartin Matuska	str	x1,[x29,#112]
872a58b312SMartin Matuska#ifndef	__AARCH64EB__
882a58b312SMartin Matuska	rev	w3,w3			// 0
892a58b312SMartin Matuska#endif
902a58b312SMartin Matuska	ror	w16,w24,#6
912a58b312SMartin Matuska	add	w27,w27,w19			// h+=K[i]
922a58b312SMartin Matuska	eor	w6,w24,w24,ror#14
932a58b312SMartin Matuska	and	w17,w25,w24
942a58b312SMartin Matuska	bic	w19,w26,w24
952a58b312SMartin Matuska	add	w27,w27,w3			// h+=X[i]
962a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
972a58b312SMartin Matuska	eor	w19,w20,w21			// a^b, b^c in next round
982a58b312SMartin Matuska	eor	w16,w16,w6,ror#11	// Sigma1(e)
992a58b312SMartin Matuska	ror	w6,w20,#2
1002a58b312SMartin Matuska	add	w27,w27,w17			// h+=Ch(e,f,g)
1012a58b312SMartin Matuska	eor	w17,w20,w20,ror#9
1022a58b312SMartin Matuska	add	w27,w27,w16			// h+=Sigma1(e)
1032a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
1042a58b312SMartin Matuska	add	w23,w23,w27			// d+=h
1052a58b312SMartin Matuska	eor	w28,w28,w21			// Maj(a,b,c)
1062a58b312SMartin Matuska	eor	w17,w6,w17,ror#13	// Sigma0(a)
1072a58b312SMartin Matuska	add	w27,w27,w28			// h+=Maj(a,b,c)
1082a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
1092a58b312SMartin Matuska	//add	w27,w27,w17			// h+=Sigma0(a)
1102a58b312SMartin Matuska#ifndef	__AARCH64EB__
1112a58b312SMartin Matuska	rev	w4,w4			// 1
1122a58b312SMartin Matuska#endif
1132a58b312SMartin Matuska	ldp	w5,w6,[x1],#2*4
1142a58b312SMartin Matuska	add	w27,w27,w17			// h+=Sigma0(a)
1152a58b312SMartin Matuska	ror	w16,w23,#6
1162a58b312SMartin Matuska	add	w26,w26,w28			// h+=K[i]
1172a58b312SMartin Matuska	eor	w7,w23,w23,ror#14
1182a58b312SMartin Matuska	and	w17,w24,w23
1192a58b312SMartin Matuska	bic	w28,w25,w23
1202a58b312SMartin Matuska	add	w26,w26,w4			// h+=X[i]
1212a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
1222a58b312SMartin Matuska	eor	w28,w27,w20			// a^b, b^c in next round
1232a58b312SMartin Matuska	eor	w16,w16,w7,ror#11	// Sigma1(e)
1242a58b312SMartin Matuska	ror	w7,w27,#2
1252a58b312SMartin Matuska	add	w26,w26,w17			// h+=Ch(e,f,g)
1262a58b312SMartin Matuska	eor	w17,w27,w27,ror#9
1272a58b312SMartin Matuska	add	w26,w26,w16			// h+=Sigma1(e)
1282a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
1292a58b312SMartin Matuska	add	w22,w22,w26			// d+=h
1302a58b312SMartin Matuska	eor	w19,w19,w20			// Maj(a,b,c)
1312a58b312SMartin Matuska	eor	w17,w7,w17,ror#13	// Sigma0(a)
1322a58b312SMartin Matuska	add	w26,w26,w19			// h+=Maj(a,b,c)
1332a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
1342a58b312SMartin Matuska	//add	w26,w26,w17			// h+=Sigma0(a)
1352a58b312SMartin Matuska#ifndef	__AARCH64EB__
1362a58b312SMartin Matuska	rev	w5,w5			// 2
1372a58b312SMartin Matuska#endif
1382a58b312SMartin Matuska	add	w26,w26,w17			// h+=Sigma0(a)
1392a58b312SMartin Matuska	ror	w16,w22,#6
1402a58b312SMartin Matuska	add	w25,w25,w19			// h+=K[i]
1412a58b312SMartin Matuska	eor	w8,w22,w22,ror#14
1422a58b312SMartin Matuska	and	w17,w23,w22
1432a58b312SMartin Matuska	bic	w19,w24,w22
1442a58b312SMartin Matuska	add	w25,w25,w5			// h+=X[i]
1452a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
1462a58b312SMartin Matuska	eor	w19,w26,w27			// a^b, b^c in next round
1472a58b312SMartin Matuska	eor	w16,w16,w8,ror#11	// Sigma1(e)
1482a58b312SMartin Matuska	ror	w8,w26,#2
1492a58b312SMartin Matuska	add	w25,w25,w17			// h+=Ch(e,f,g)
1502a58b312SMartin Matuska	eor	w17,w26,w26,ror#9
1512a58b312SMartin Matuska	add	w25,w25,w16			// h+=Sigma1(e)
1522a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
1532a58b312SMartin Matuska	add	w21,w21,w25			// d+=h
1542a58b312SMartin Matuska	eor	w28,w28,w27			// Maj(a,b,c)
1552a58b312SMartin Matuska	eor	w17,w8,w17,ror#13	// Sigma0(a)
1562a58b312SMartin Matuska	add	w25,w25,w28			// h+=Maj(a,b,c)
1572a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
1582a58b312SMartin Matuska	//add	w25,w25,w17			// h+=Sigma0(a)
1592a58b312SMartin Matuska#ifndef	__AARCH64EB__
1602a58b312SMartin Matuska	rev	w6,w6			// 3
1612a58b312SMartin Matuska#endif
1622a58b312SMartin Matuska	ldp	w7,w8,[x1],#2*4
1632a58b312SMartin Matuska	add	w25,w25,w17			// h+=Sigma0(a)
1642a58b312SMartin Matuska	ror	w16,w21,#6
1652a58b312SMartin Matuska	add	w24,w24,w28			// h+=K[i]
1662a58b312SMartin Matuska	eor	w9,w21,w21,ror#14
1672a58b312SMartin Matuska	and	w17,w22,w21
1682a58b312SMartin Matuska	bic	w28,w23,w21
1692a58b312SMartin Matuska	add	w24,w24,w6			// h+=X[i]
1702a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
1712a58b312SMartin Matuska	eor	w28,w25,w26			// a^b, b^c in next round
1722a58b312SMartin Matuska	eor	w16,w16,w9,ror#11	// Sigma1(e)
1732a58b312SMartin Matuska	ror	w9,w25,#2
1742a58b312SMartin Matuska	add	w24,w24,w17			// h+=Ch(e,f,g)
1752a58b312SMartin Matuska	eor	w17,w25,w25,ror#9
1762a58b312SMartin Matuska	add	w24,w24,w16			// h+=Sigma1(e)
1772a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
1782a58b312SMartin Matuska	add	w20,w20,w24			// d+=h
1792a58b312SMartin Matuska	eor	w19,w19,w26			// Maj(a,b,c)
1802a58b312SMartin Matuska	eor	w17,w9,w17,ror#13	// Sigma0(a)
1812a58b312SMartin Matuska	add	w24,w24,w19			// h+=Maj(a,b,c)
1822a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
1832a58b312SMartin Matuska	//add	w24,w24,w17			// h+=Sigma0(a)
1842a58b312SMartin Matuska#ifndef	__AARCH64EB__
1852a58b312SMartin Matuska	rev	w7,w7			// 4
1862a58b312SMartin Matuska#endif
1872a58b312SMartin Matuska	add	w24,w24,w17			// h+=Sigma0(a)
1882a58b312SMartin Matuska	ror	w16,w20,#6
1892a58b312SMartin Matuska	add	w23,w23,w19			// h+=K[i]
1902a58b312SMartin Matuska	eor	w10,w20,w20,ror#14
1912a58b312SMartin Matuska	and	w17,w21,w20
1922a58b312SMartin Matuska	bic	w19,w22,w20
1932a58b312SMartin Matuska	add	w23,w23,w7			// h+=X[i]
1942a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
1952a58b312SMartin Matuska	eor	w19,w24,w25			// a^b, b^c in next round
1962a58b312SMartin Matuska	eor	w16,w16,w10,ror#11	// Sigma1(e)
1972a58b312SMartin Matuska	ror	w10,w24,#2
1982a58b312SMartin Matuska	add	w23,w23,w17			// h+=Ch(e,f,g)
1992a58b312SMartin Matuska	eor	w17,w24,w24,ror#9
2002a58b312SMartin Matuska	add	w23,w23,w16			// h+=Sigma1(e)
2012a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
2022a58b312SMartin Matuska	add	w27,w27,w23			// d+=h
2032a58b312SMartin Matuska	eor	w28,w28,w25			// Maj(a,b,c)
2042a58b312SMartin Matuska	eor	w17,w10,w17,ror#13	// Sigma0(a)
2052a58b312SMartin Matuska	add	w23,w23,w28			// h+=Maj(a,b,c)
2062a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
2072a58b312SMartin Matuska	//add	w23,w23,w17			// h+=Sigma0(a)
2082a58b312SMartin Matuska#ifndef	__AARCH64EB__
2092a58b312SMartin Matuska	rev	w8,w8			// 5
2102a58b312SMartin Matuska#endif
2112a58b312SMartin Matuska	ldp	w9,w10,[x1],#2*4
2122a58b312SMartin Matuska	add	w23,w23,w17			// h+=Sigma0(a)
2132a58b312SMartin Matuska	ror	w16,w27,#6
2142a58b312SMartin Matuska	add	w22,w22,w28			// h+=K[i]
2152a58b312SMartin Matuska	eor	w11,w27,w27,ror#14
2162a58b312SMartin Matuska	and	w17,w20,w27
2172a58b312SMartin Matuska	bic	w28,w21,w27
2182a58b312SMartin Matuska	add	w22,w22,w8			// h+=X[i]
2192a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
2202a58b312SMartin Matuska	eor	w28,w23,w24			// a^b, b^c in next round
2212a58b312SMartin Matuska	eor	w16,w16,w11,ror#11	// Sigma1(e)
2222a58b312SMartin Matuska	ror	w11,w23,#2
2232a58b312SMartin Matuska	add	w22,w22,w17			// h+=Ch(e,f,g)
2242a58b312SMartin Matuska	eor	w17,w23,w23,ror#9
2252a58b312SMartin Matuska	add	w22,w22,w16			// h+=Sigma1(e)
2262a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
2272a58b312SMartin Matuska	add	w26,w26,w22			// d+=h
2282a58b312SMartin Matuska	eor	w19,w19,w24			// Maj(a,b,c)
2292a58b312SMartin Matuska	eor	w17,w11,w17,ror#13	// Sigma0(a)
2302a58b312SMartin Matuska	add	w22,w22,w19			// h+=Maj(a,b,c)
2312a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
2322a58b312SMartin Matuska	//add	w22,w22,w17			// h+=Sigma0(a)
2332a58b312SMartin Matuska#ifndef	__AARCH64EB__
2342a58b312SMartin Matuska	rev	w9,w9			// 6
2352a58b312SMartin Matuska#endif
2362a58b312SMartin Matuska	add	w22,w22,w17			// h+=Sigma0(a)
2372a58b312SMartin Matuska	ror	w16,w26,#6
2382a58b312SMartin Matuska	add	w21,w21,w19			// h+=K[i]
2392a58b312SMartin Matuska	eor	w12,w26,w26,ror#14
2402a58b312SMartin Matuska	and	w17,w27,w26
2412a58b312SMartin Matuska	bic	w19,w20,w26
2422a58b312SMartin Matuska	add	w21,w21,w9			// h+=X[i]
2432a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
2442a58b312SMartin Matuska	eor	w19,w22,w23			// a^b, b^c in next round
2452a58b312SMartin Matuska	eor	w16,w16,w12,ror#11	// Sigma1(e)
2462a58b312SMartin Matuska	ror	w12,w22,#2
2472a58b312SMartin Matuska	add	w21,w21,w17			// h+=Ch(e,f,g)
2482a58b312SMartin Matuska	eor	w17,w22,w22,ror#9
2492a58b312SMartin Matuska	add	w21,w21,w16			// h+=Sigma1(e)
2502a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
2512a58b312SMartin Matuska	add	w25,w25,w21			// d+=h
2522a58b312SMartin Matuska	eor	w28,w28,w23			// Maj(a,b,c)
2532a58b312SMartin Matuska	eor	w17,w12,w17,ror#13	// Sigma0(a)
2542a58b312SMartin Matuska	add	w21,w21,w28			// h+=Maj(a,b,c)
2552a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
2562a58b312SMartin Matuska	//add	w21,w21,w17			// h+=Sigma0(a)
2572a58b312SMartin Matuska#ifndef	__AARCH64EB__
2582a58b312SMartin Matuska	rev	w10,w10			// 7
2592a58b312SMartin Matuska#endif
2602a58b312SMartin Matuska	ldp	w11,w12,[x1],#2*4
2612a58b312SMartin Matuska	add	w21,w21,w17			// h+=Sigma0(a)
2622a58b312SMartin Matuska	ror	w16,w25,#6
2632a58b312SMartin Matuska	add	w20,w20,w28			// h+=K[i]
2642a58b312SMartin Matuska	eor	w13,w25,w25,ror#14
2652a58b312SMartin Matuska	and	w17,w26,w25
2662a58b312SMartin Matuska	bic	w28,w27,w25
2672a58b312SMartin Matuska	add	w20,w20,w10			// h+=X[i]
2682a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
2692a58b312SMartin Matuska	eor	w28,w21,w22			// a^b, b^c in next round
2702a58b312SMartin Matuska	eor	w16,w16,w13,ror#11	// Sigma1(e)
2712a58b312SMartin Matuska	ror	w13,w21,#2
2722a58b312SMartin Matuska	add	w20,w20,w17			// h+=Ch(e,f,g)
2732a58b312SMartin Matuska	eor	w17,w21,w21,ror#9
2742a58b312SMartin Matuska	add	w20,w20,w16			// h+=Sigma1(e)
2752a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
2762a58b312SMartin Matuska	add	w24,w24,w20			// d+=h
2772a58b312SMartin Matuska	eor	w19,w19,w22			// Maj(a,b,c)
2782a58b312SMartin Matuska	eor	w17,w13,w17,ror#13	// Sigma0(a)
2792a58b312SMartin Matuska	add	w20,w20,w19			// h+=Maj(a,b,c)
2802a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
2812a58b312SMartin Matuska	//add	w20,w20,w17			// h+=Sigma0(a)
2822a58b312SMartin Matuska#ifndef	__AARCH64EB__
2832a58b312SMartin Matuska	rev	w11,w11			// 8
2842a58b312SMartin Matuska#endif
2852a58b312SMartin Matuska	add	w20,w20,w17			// h+=Sigma0(a)
2862a58b312SMartin Matuska	ror	w16,w24,#6
2872a58b312SMartin Matuska	add	w27,w27,w19			// h+=K[i]
2882a58b312SMartin Matuska	eor	w14,w24,w24,ror#14
2892a58b312SMartin Matuska	and	w17,w25,w24
2902a58b312SMartin Matuska	bic	w19,w26,w24
2912a58b312SMartin Matuska	add	w27,w27,w11			// h+=X[i]
2922a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
2932a58b312SMartin Matuska	eor	w19,w20,w21			// a^b, b^c in next round
2942a58b312SMartin Matuska	eor	w16,w16,w14,ror#11	// Sigma1(e)
2952a58b312SMartin Matuska	ror	w14,w20,#2
2962a58b312SMartin Matuska	add	w27,w27,w17			// h+=Ch(e,f,g)
2972a58b312SMartin Matuska	eor	w17,w20,w20,ror#9
2982a58b312SMartin Matuska	add	w27,w27,w16			// h+=Sigma1(e)
2992a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
3002a58b312SMartin Matuska	add	w23,w23,w27			// d+=h
3012a58b312SMartin Matuska	eor	w28,w28,w21			// Maj(a,b,c)
3022a58b312SMartin Matuska	eor	w17,w14,w17,ror#13	// Sigma0(a)
3032a58b312SMartin Matuska	add	w27,w27,w28			// h+=Maj(a,b,c)
3042a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
3052a58b312SMartin Matuska	//add	w27,w27,w17			// h+=Sigma0(a)
3062a58b312SMartin Matuska#ifndef	__AARCH64EB__
3072a58b312SMartin Matuska	rev	w12,w12			// 9
3082a58b312SMartin Matuska#endif
3092a58b312SMartin Matuska	ldp	w13,w14,[x1],#2*4
3102a58b312SMartin Matuska	add	w27,w27,w17			// h+=Sigma0(a)
3112a58b312SMartin Matuska	ror	w16,w23,#6
3122a58b312SMartin Matuska	add	w26,w26,w28			// h+=K[i]
3132a58b312SMartin Matuska	eor	w15,w23,w23,ror#14
3142a58b312SMartin Matuska	and	w17,w24,w23
3152a58b312SMartin Matuska	bic	w28,w25,w23
3162a58b312SMartin Matuska	add	w26,w26,w12			// h+=X[i]
3172a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
3182a58b312SMartin Matuska	eor	w28,w27,w20			// a^b, b^c in next round
3192a58b312SMartin Matuska	eor	w16,w16,w15,ror#11	// Sigma1(e)
3202a58b312SMartin Matuska	ror	w15,w27,#2
3212a58b312SMartin Matuska	add	w26,w26,w17			// h+=Ch(e,f,g)
3222a58b312SMartin Matuska	eor	w17,w27,w27,ror#9
3232a58b312SMartin Matuska	add	w26,w26,w16			// h+=Sigma1(e)
3242a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
3252a58b312SMartin Matuska	add	w22,w22,w26			// d+=h
3262a58b312SMartin Matuska	eor	w19,w19,w20			// Maj(a,b,c)
3272a58b312SMartin Matuska	eor	w17,w15,w17,ror#13	// Sigma0(a)
3282a58b312SMartin Matuska	add	w26,w26,w19			// h+=Maj(a,b,c)
3292a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
3302a58b312SMartin Matuska	//add	w26,w26,w17			// h+=Sigma0(a)
3312a58b312SMartin Matuska#ifndef	__AARCH64EB__
3322a58b312SMartin Matuska	rev	w13,w13			// 10
3332a58b312SMartin Matuska#endif
3342a58b312SMartin Matuska	add	w26,w26,w17			// h+=Sigma0(a)
3352a58b312SMartin Matuska	ror	w16,w22,#6
3362a58b312SMartin Matuska	add	w25,w25,w19			// h+=K[i]
3372a58b312SMartin Matuska	eor	w0,w22,w22,ror#14
3382a58b312SMartin Matuska	and	w17,w23,w22
3392a58b312SMartin Matuska	bic	w19,w24,w22
3402a58b312SMartin Matuska	add	w25,w25,w13			// h+=X[i]
3412a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
3422a58b312SMartin Matuska	eor	w19,w26,w27			// a^b, b^c in next round
3432a58b312SMartin Matuska	eor	w16,w16,w0,ror#11	// Sigma1(e)
3442a58b312SMartin Matuska	ror	w0,w26,#2
3452a58b312SMartin Matuska	add	w25,w25,w17			// h+=Ch(e,f,g)
3462a58b312SMartin Matuska	eor	w17,w26,w26,ror#9
3472a58b312SMartin Matuska	add	w25,w25,w16			// h+=Sigma1(e)
3482a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
3492a58b312SMartin Matuska	add	w21,w21,w25			// d+=h
3502a58b312SMartin Matuska	eor	w28,w28,w27			// Maj(a,b,c)
3512a58b312SMartin Matuska	eor	w17,w0,w17,ror#13	// Sigma0(a)
3522a58b312SMartin Matuska	add	w25,w25,w28			// h+=Maj(a,b,c)
3532a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
3542a58b312SMartin Matuska	//add	w25,w25,w17			// h+=Sigma0(a)
3552a58b312SMartin Matuska#ifndef	__AARCH64EB__
3562a58b312SMartin Matuska	rev	w14,w14			// 11
3572a58b312SMartin Matuska#endif
3582a58b312SMartin Matuska	ldp	w15,w0,[x1],#2*4
3592a58b312SMartin Matuska	add	w25,w25,w17			// h+=Sigma0(a)
3602a58b312SMartin Matuska	str	w6,[sp,#12]
3612a58b312SMartin Matuska	ror	w16,w21,#6
3622a58b312SMartin Matuska	add	w24,w24,w28			// h+=K[i]
3632a58b312SMartin Matuska	eor	w6,w21,w21,ror#14
3642a58b312SMartin Matuska	and	w17,w22,w21
3652a58b312SMartin Matuska	bic	w28,w23,w21
3662a58b312SMartin Matuska	add	w24,w24,w14			// h+=X[i]
3672a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
3682a58b312SMartin Matuska	eor	w28,w25,w26			// a^b, b^c in next round
3692a58b312SMartin Matuska	eor	w16,w16,w6,ror#11	// Sigma1(e)
3702a58b312SMartin Matuska	ror	w6,w25,#2
3712a58b312SMartin Matuska	add	w24,w24,w17			// h+=Ch(e,f,g)
3722a58b312SMartin Matuska	eor	w17,w25,w25,ror#9
3732a58b312SMartin Matuska	add	w24,w24,w16			// h+=Sigma1(e)
3742a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
3752a58b312SMartin Matuska	add	w20,w20,w24			// d+=h
3762a58b312SMartin Matuska	eor	w19,w19,w26			// Maj(a,b,c)
3772a58b312SMartin Matuska	eor	w17,w6,w17,ror#13	// Sigma0(a)
3782a58b312SMartin Matuska	add	w24,w24,w19			// h+=Maj(a,b,c)
3792a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
3802a58b312SMartin Matuska	//add	w24,w24,w17			// h+=Sigma0(a)
3812a58b312SMartin Matuska#ifndef	__AARCH64EB__
3822a58b312SMartin Matuska	rev	w15,w15			// 12
3832a58b312SMartin Matuska#endif
3842a58b312SMartin Matuska	add	w24,w24,w17			// h+=Sigma0(a)
3852a58b312SMartin Matuska	str	w7,[sp,#0]
3862a58b312SMartin Matuska	ror	w16,w20,#6
3872a58b312SMartin Matuska	add	w23,w23,w19			// h+=K[i]
3882a58b312SMartin Matuska	eor	w7,w20,w20,ror#14
3892a58b312SMartin Matuska	and	w17,w21,w20
3902a58b312SMartin Matuska	bic	w19,w22,w20
3912a58b312SMartin Matuska	add	w23,w23,w15			// h+=X[i]
3922a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
3932a58b312SMartin Matuska	eor	w19,w24,w25			// a^b, b^c in next round
3942a58b312SMartin Matuska	eor	w16,w16,w7,ror#11	// Sigma1(e)
3952a58b312SMartin Matuska	ror	w7,w24,#2
3962a58b312SMartin Matuska	add	w23,w23,w17			// h+=Ch(e,f,g)
3972a58b312SMartin Matuska	eor	w17,w24,w24,ror#9
3982a58b312SMartin Matuska	add	w23,w23,w16			// h+=Sigma1(e)
3992a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
4002a58b312SMartin Matuska	add	w27,w27,w23			// d+=h
4012a58b312SMartin Matuska	eor	w28,w28,w25			// Maj(a,b,c)
4022a58b312SMartin Matuska	eor	w17,w7,w17,ror#13	// Sigma0(a)
4032a58b312SMartin Matuska	add	w23,w23,w28			// h+=Maj(a,b,c)
4042a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
4052a58b312SMartin Matuska	//add	w23,w23,w17			// h+=Sigma0(a)
4062a58b312SMartin Matuska#ifndef	__AARCH64EB__
4072a58b312SMartin Matuska	rev	w0,w0			// 13
4082a58b312SMartin Matuska#endif
4092a58b312SMartin Matuska	ldp	w1,w2,[x1]
4102a58b312SMartin Matuska	add	w23,w23,w17			// h+=Sigma0(a)
4112a58b312SMartin Matuska	str	w8,[sp,#4]
4122a58b312SMartin Matuska	ror	w16,w27,#6
4132a58b312SMartin Matuska	add	w22,w22,w28			// h+=K[i]
4142a58b312SMartin Matuska	eor	w8,w27,w27,ror#14
4152a58b312SMartin Matuska	and	w17,w20,w27
4162a58b312SMartin Matuska	bic	w28,w21,w27
4172a58b312SMartin Matuska	add	w22,w22,w0			// h+=X[i]
4182a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
4192a58b312SMartin Matuska	eor	w28,w23,w24			// a^b, b^c in next round
4202a58b312SMartin Matuska	eor	w16,w16,w8,ror#11	// Sigma1(e)
4212a58b312SMartin Matuska	ror	w8,w23,#2
4222a58b312SMartin Matuska	add	w22,w22,w17			// h+=Ch(e,f,g)
4232a58b312SMartin Matuska	eor	w17,w23,w23,ror#9
4242a58b312SMartin Matuska	add	w22,w22,w16			// h+=Sigma1(e)
4252a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
4262a58b312SMartin Matuska	add	w26,w26,w22			// d+=h
4272a58b312SMartin Matuska	eor	w19,w19,w24			// Maj(a,b,c)
4282a58b312SMartin Matuska	eor	w17,w8,w17,ror#13	// Sigma0(a)
4292a58b312SMartin Matuska	add	w22,w22,w19			// h+=Maj(a,b,c)
4302a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
4312a58b312SMartin Matuska	//add	w22,w22,w17			// h+=Sigma0(a)
4322a58b312SMartin Matuska#ifndef	__AARCH64EB__
4332a58b312SMartin Matuska	rev	w1,w1			// 14
4342a58b312SMartin Matuska#endif
4352a58b312SMartin Matuska	ldr	w6,[sp,#12]
4362a58b312SMartin Matuska	add	w22,w22,w17			// h+=Sigma0(a)
4372a58b312SMartin Matuska	str	w9,[sp,#8]
4382a58b312SMartin Matuska	ror	w16,w26,#6
4392a58b312SMartin Matuska	add	w21,w21,w19			// h+=K[i]
4402a58b312SMartin Matuska	eor	w9,w26,w26,ror#14
4412a58b312SMartin Matuska	and	w17,w27,w26
4422a58b312SMartin Matuska	bic	w19,w20,w26
4432a58b312SMartin Matuska	add	w21,w21,w1			// h+=X[i]
4442a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
4452a58b312SMartin Matuska	eor	w19,w22,w23			// a^b, b^c in next round
4462a58b312SMartin Matuska	eor	w16,w16,w9,ror#11	// Sigma1(e)
4472a58b312SMartin Matuska	ror	w9,w22,#2
4482a58b312SMartin Matuska	add	w21,w21,w17			// h+=Ch(e,f,g)
4492a58b312SMartin Matuska	eor	w17,w22,w22,ror#9
4502a58b312SMartin Matuska	add	w21,w21,w16			// h+=Sigma1(e)
4512a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
4522a58b312SMartin Matuska	add	w25,w25,w21			// d+=h
4532a58b312SMartin Matuska	eor	w28,w28,w23			// Maj(a,b,c)
4542a58b312SMartin Matuska	eor	w17,w9,w17,ror#13	// Sigma0(a)
4552a58b312SMartin Matuska	add	w21,w21,w28			// h+=Maj(a,b,c)
4562a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
4572a58b312SMartin Matuska	//add	w21,w21,w17			// h+=Sigma0(a)
4582a58b312SMartin Matuska#ifndef	__AARCH64EB__
4592a58b312SMartin Matuska	rev	w2,w2			// 15
4602a58b312SMartin Matuska#endif
4612a58b312SMartin Matuska	ldr	w7,[sp,#0]
4622a58b312SMartin Matuska	add	w21,w21,w17			// h+=Sigma0(a)
4632a58b312SMartin Matuska	str	w10,[sp,#12]
4642a58b312SMartin Matuska	ror	w16,w25,#6
4652a58b312SMartin Matuska	add	w20,w20,w28			// h+=K[i]
4662a58b312SMartin Matuska	ror	w9,w4,#7
4672a58b312SMartin Matuska	and	w17,w26,w25
4682a58b312SMartin Matuska	ror	w8,w1,#17
4692a58b312SMartin Matuska	bic	w28,w27,w25
4702a58b312SMartin Matuska	ror	w10,w21,#2
4712a58b312SMartin Matuska	add	w20,w20,w2			// h+=X[i]
4722a58b312SMartin Matuska	eor	w16,w16,w25,ror#11
4732a58b312SMartin Matuska	eor	w9,w9,w4,ror#18
4742a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
4752a58b312SMartin Matuska	eor	w28,w21,w22			// a^b, b^c in next round
4762a58b312SMartin Matuska	eor	w16,w16,w25,ror#25	// Sigma1(e)
4772a58b312SMartin Matuska	eor	w10,w10,w21,ror#13
4782a58b312SMartin Matuska	add	w20,w20,w17			// h+=Ch(e,f,g)
4792a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
4802a58b312SMartin Matuska	eor	w8,w8,w1,ror#19
4812a58b312SMartin Matuska	eor	w9,w9,w4,lsr#3	// sigma0(X[i+1])
4822a58b312SMartin Matuska	add	w20,w20,w16			// h+=Sigma1(e)
4832a58b312SMartin Matuska	eor	w19,w19,w22			// Maj(a,b,c)
4842a58b312SMartin Matuska	eor	w17,w10,w21,ror#22	// Sigma0(a)
4852a58b312SMartin Matuska	eor	w8,w8,w1,lsr#10	// sigma1(X[i+14])
4862a58b312SMartin Matuska	add	w3,w3,w12
4872a58b312SMartin Matuska	add	w24,w24,w20			// d+=h
4882a58b312SMartin Matuska	add	w20,w20,w19			// h+=Maj(a,b,c)
4892a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
4902a58b312SMartin Matuska	add	w3,w3,w9
4912a58b312SMartin Matuska	add	w20,w20,w17			// h+=Sigma0(a)
4922a58b312SMartin Matuska	add	w3,w3,w8
4932a58b312SMartin Matuska.Loop_16_xx:
4942a58b312SMartin Matuska	ldr	w8,[sp,#4]
4952a58b312SMartin Matuska	str	w11,[sp,#0]
4962a58b312SMartin Matuska	ror	w16,w24,#6
4972a58b312SMartin Matuska	add	w27,w27,w19			// h+=K[i]
4982a58b312SMartin Matuska	ror	w10,w5,#7
4992a58b312SMartin Matuska	and	w17,w25,w24
5002a58b312SMartin Matuska	ror	w9,w2,#17
5012a58b312SMartin Matuska	bic	w19,w26,w24
5022a58b312SMartin Matuska	ror	w11,w20,#2
5032a58b312SMartin Matuska	add	w27,w27,w3			// h+=X[i]
5042a58b312SMartin Matuska	eor	w16,w16,w24,ror#11
5052a58b312SMartin Matuska	eor	w10,w10,w5,ror#18
5062a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
5072a58b312SMartin Matuska	eor	w19,w20,w21			// a^b, b^c in next round
5082a58b312SMartin Matuska	eor	w16,w16,w24,ror#25	// Sigma1(e)
5092a58b312SMartin Matuska	eor	w11,w11,w20,ror#13
5102a58b312SMartin Matuska	add	w27,w27,w17			// h+=Ch(e,f,g)
5112a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
5122a58b312SMartin Matuska	eor	w9,w9,w2,ror#19
5132a58b312SMartin Matuska	eor	w10,w10,w5,lsr#3	// sigma0(X[i+1])
5142a58b312SMartin Matuska	add	w27,w27,w16			// h+=Sigma1(e)
5152a58b312SMartin Matuska	eor	w28,w28,w21			// Maj(a,b,c)
5162a58b312SMartin Matuska	eor	w17,w11,w20,ror#22	// Sigma0(a)
5172a58b312SMartin Matuska	eor	w9,w9,w2,lsr#10	// sigma1(X[i+14])
5182a58b312SMartin Matuska	add	w4,w4,w13
5192a58b312SMartin Matuska	add	w23,w23,w27			// d+=h
5202a58b312SMartin Matuska	add	w27,w27,w28			// h+=Maj(a,b,c)
5212a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
5222a58b312SMartin Matuska	add	w4,w4,w10
5232a58b312SMartin Matuska	add	w27,w27,w17			// h+=Sigma0(a)
5242a58b312SMartin Matuska	add	w4,w4,w9
5252a58b312SMartin Matuska	ldr	w9,[sp,#8]
5262a58b312SMartin Matuska	str	w12,[sp,#4]
5272a58b312SMartin Matuska	ror	w16,w23,#6
5282a58b312SMartin Matuska	add	w26,w26,w28			// h+=K[i]
5292a58b312SMartin Matuska	ror	w11,w6,#7
5302a58b312SMartin Matuska	and	w17,w24,w23
5312a58b312SMartin Matuska	ror	w10,w3,#17
5322a58b312SMartin Matuska	bic	w28,w25,w23
5332a58b312SMartin Matuska	ror	w12,w27,#2
5342a58b312SMartin Matuska	add	w26,w26,w4			// h+=X[i]
5352a58b312SMartin Matuska	eor	w16,w16,w23,ror#11
5362a58b312SMartin Matuska	eor	w11,w11,w6,ror#18
5372a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
5382a58b312SMartin Matuska	eor	w28,w27,w20			// a^b, b^c in next round
5392a58b312SMartin Matuska	eor	w16,w16,w23,ror#25	// Sigma1(e)
5402a58b312SMartin Matuska	eor	w12,w12,w27,ror#13
5412a58b312SMartin Matuska	add	w26,w26,w17			// h+=Ch(e,f,g)
5422a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
5432a58b312SMartin Matuska	eor	w10,w10,w3,ror#19
5442a58b312SMartin Matuska	eor	w11,w11,w6,lsr#3	// sigma0(X[i+1])
5452a58b312SMartin Matuska	add	w26,w26,w16			// h+=Sigma1(e)
5462a58b312SMartin Matuska	eor	w19,w19,w20			// Maj(a,b,c)
5472a58b312SMartin Matuska	eor	w17,w12,w27,ror#22	// Sigma0(a)
5482a58b312SMartin Matuska	eor	w10,w10,w3,lsr#10	// sigma1(X[i+14])
5492a58b312SMartin Matuska	add	w5,w5,w14
5502a58b312SMartin Matuska	add	w22,w22,w26			// d+=h
5512a58b312SMartin Matuska	add	w26,w26,w19			// h+=Maj(a,b,c)
5522a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
5532a58b312SMartin Matuska	add	w5,w5,w11
5542a58b312SMartin Matuska	add	w26,w26,w17			// h+=Sigma0(a)
5552a58b312SMartin Matuska	add	w5,w5,w10
5562a58b312SMartin Matuska	ldr	w10,[sp,#12]
5572a58b312SMartin Matuska	str	w13,[sp,#8]
5582a58b312SMartin Matuska	ror	w16,w22,#6
5592a58b312SMartin Matuska	add	w25,w25,w19			// h+=K[i]
5602a58b312SMartin Matuska	ror	w12,w7,#7
5612a58b312SMartin Matuska	and	w17,w23,w22
5622a58b312SMartin Matuska	ror	w11,w4,#17
5632a58b312SMartin Matuska	bic	w19,w24,w22
5642a58b312SMartin Matuska	ror	w13,w26,#2
5652a58b312SMartin Matuska	add	w25,w25,w5			// h+=X[i]
5662a58b312SMartin Matuska	eor	w16,w16,w22,ror#11
5672a58b312SMartin Matuska	eor	w12,w12,w7,ror#18
5682a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
5692a58b312SMartin Matuska	eor	w19,w26,w27			// a^b, b^c in next round
5702a58b312SMartin Matuska	eor	w16,w16,w22,ror#25	// Sigma1(e)
5712a58b312SMartin Matuska	eor	w13,w13,w26,ror#13
5722a58b312SMartin Matuska	add	w25,w25,w17			// h+=Ch(e,f,g)
5732a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
5742a58b312SMartin Matuska	eor	w11,w11,w4,ror#19
5752a58b312SMartin Matuska	eor	w12,w12,w7,lsr#3	// sigma0(X[i+1])
5762a58b312SMartin Matuska	add	w25,w25,w16			// h+=Sigma1(e)
5772a58b312SMartin Matuska	eor	w28,w28,w27			// Maj(a,b,c)
5782a58b312SMartin Matuska	eor	w17,w13,w26,ror#22	// Sigma0(a)
5792a58b312SMartin Matuska	eor	w11,w11,w4,lsr#10	// sigma1(X[i+14])
5802a58b312SMartin Matuska	add	w6,w6,w15
5812a58b312SMartin Matuska	add	w21,w21,w25			// d+=h
5822a58b312SMartin Matuska	add	w25,w25,w28			// h+=Maj(a,b,c)
5832a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
5842a58b312SMartin Matuska	add	w6,w6,w12
5852a58b312SMartin Matuska	add	w25,w25,w17			// h+=Sigma0(a)
5862a58b312SMartin Matuska	add	w6,w6,w11
5872a58b312SMartin Matuska	ldr	w11,[sp,#0]
5882a58b312SMartin Matuska	str	w14,[sp,#12]
5892a58b312SMartin Matuska	ror	w16,w21,#6
5902a58b312SMartin Matuska	add	w24,w24,w28			// h+=K[i]
5912a58b312SMartin Matuska	ror	w13,w8,#7
5922a58b312SMartin Matuska	and	w17,w22,w21
5932a58b312SMartin Matuska	ror	w12,w5,#17
5942a58b312SMartin Matuska	bic	w28,w23,w21
5952a58b312SMartin Matuska	ror	w14,w25,#2
5962a58b312SMartin Matuska	add	w24,w24,w6			// h+=X[i]
5972a58b312SMartin Matuska	eor	w16,w16,w21,ror#11
5982a58b312SMartin Matuska	eor	w13,w13,w8,ror#18
5992a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
6002a58b312SMartin Matuska	eor	w28,w25,w26			// a^b, b^c in next round
6012a58b312SMartin Matuska	eor	w16,w16,w21,ror#25	// Sigma1(e)
6022a58b312SMartin Matuska	eor	w14,w14,w25,ror#13
6032a58b312SMartin Matuska	add	w24,w24,w17			// h+=Ch(e,f,g)
6042a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
6052a58b312SMartin Matuska	eor	w12,w12,w5,ror#19
6062a58b312SMartin Matuska	eor	w13,w13,w8,lsr#3	// sigma0(X[i+1])
6072a58b312SMartin Matuska	add	w24,w24,w16			// h+=Sigma1(e)
6082a58b312SMartin Matuska	eor	w19,w19,w26			// Maj(a,b,c)
6092a58b312SMartin Matuska	eor	w17,w14,w25,ror#22	// Sigma0(a)
6102a58b312SMartin Matuska	eor	w12,w12,w5,lsr#10	// sigma1(X[i+14])
6112a58b312SMartin Matuska	add	w7,w7,w0
6122a58b312SMartin Matuska	add	w20,w20,w24			// d+=h
6132a58b312SMartin Matuska	add	w24,w24,w19			// h+=Maj(a,b,c)
6142a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
6152a58b312SMartin Matuska	add	w7,w7,w13
6162a58b312SMartin Matuska	add	w24,w24,w17			// h+=Sigma0(a)
6172a58b312SMartin Matuska	add	w7,w7,w12
6182a58b312SMartin Matuska	ldr	w12,[sp,#4]
6192a58b312SMartin Matuska	str	w15,[sp,#0]
6202a58b312SMartin Matuska	ror	w16,w20,#6
6212a58b312SMartin Matuska	add	w23,w23,w19			// h+=K[i]
6222a58b312SMartin Matuska	ror	w14,w9,#7
6232a58b312SMartin Matuska	and	w17,w21,w20
6242a58b312SMartin Matuska	ror	w13,w6,#17
6252a58b312SMartin Matuska	bic	w19,w22,w20
6262a58b312SMartin Matuska	ror	w15,w24,#2
6272a58b312SMartin Matuska	add	w23,w23,w7			// h+=X[i]
6282a58b312SMartin Matuska	eor	w16,w16,w20,ror#11
6292a58b312SMartin Matuska	eor	w14,w14,w9,ror#18
6302a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
6312a58b312SMartin Matuska	eor	w19,w24,w25			// a^b, b^c in next round
6322a58b312SMartin Matuska	eor	w16,w16,w20,ror#25	// Sigma1(e)
6332a58b312SMartin Matuska	eor	w15,w15,w24,ror#13
6342a58b312SMartin Matuska	add	w23,w23,w17			// h+=Ch(e,f,g)
6352a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
6362a58b312SMartin Matuska	eor	w13,w13,w6,ror#19
6372a58b312SMartin Matuska	eor	w14,w14,w9,lsr#3	// sigma0(X[i+1])
6382a58b312SMartin Matuska	add	w23,w23,w16			// h+=Sigma1(e)
6392a58b312SMartin Matuska	eor	w28,w28,w25			// Maj(a,b,c)
6402a58b312SMartin Matuska	eor	w17,w15,w24,ror#22	// Sigma0(a)
6412a58b312SMartin Matuska	eor	w13,w13,w6,lsr#10	// sigma1(X[i+14])
6422a58b312SMartin Matuska	add	w8,w8,w1
6432a58b312SMartin Matuska	add	w27,w27,w23			// d+=h
6442a58b312SMartin Matuska	add	w23,w23,w28			// h+=Maj(a,b,c)
6452a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
6462a58b312SMartin Matuska	add	w8,w8,w14
6472a58b312SMartin Matuska	add	w23,w23,w17			// h+=Sigma0(a)
6482a58b312SMartin Matuska	add	w8,w8,w13
6492a58b312SMartin Matuska	ldr	w13,[sp,#8]
6502a58b312SMartin Matuska	str	w0,[sp,#4]
6512a58b312SMartin Matuska	ror	w16,w27,#6
6522a58b312SMartin Matuska	add	w22,w22,w28			// h+=K[i]
6532a58b312SMartin Matuska	ror	w15,w10,#7
6542a58b312SMartin Matuska	and	w17,w20,w27
6552a58b312SMartin Matuska	ror	w14,w7,#17
6562a58b312SMartin Matuska	bic	w28,w21,w27
6572a58b312SMartin Matuska	ror	w0,w23,#2
6582a58b312SMartin Matuska	add	w22,w22,w8			// h+=X[i]
6592a58b312SMartin Matuska	eor	w16,w16,w27,ror#11
6602a58b312SMartin Matuska	eor	w15,w15,w10,ror#18
6612a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
6622a58b312SMartin Matuska	eor	w28,w23,w24			// a^b, b^c in next round
6632a58b312SMartin Matuska	eor	w16,w16,w27,ror#25	// Sigma1(e)
6642a58b312SMartin Matuska	eor	w0,w0,w23,ror#13
6652a58b312SMartin Matuska	add	w22,w22,w17			// h+=Ch(e,f,g)
6662a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
6672a58b312SMartin Matuska	eor	w14,w14,w7,ror#19
6682a58b312SMartin Matuska	eor	w15,w15,w10,lsr#3	// sigma0(X[i+1])
6692a58b312SMartin Matuska	add	w22,w22,w16			// h+=Sigma1(e)
6702a58b312SMartin Matuska	eor	w19,w19,w24			// Maj(a,b,c)
6712a58b312SMartin Matuska	eor	w17,w0,w23,ror#22	// Sigma0(a)
6722a58b312SMartin Matuska	eor	w14,w14,w7,lsr#10	// sigma1(X[i+14])
6732a58b312SMartin Matuska	add	w9,w9,w2
6742a58b312SMartin Matuska	add	w26,w26,w22			// d+=h
6752a58b312SMartin Matuska	add	w22,w22,w19			// h+=Maj(a,b,c)
6762a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
6772a58b312SMartin Matuska	add	w9,w9,w15
6782a58b312SMartin Matuska	add	w22,w22,w17			// h+=Sigma0(a)
6792a58b312SMartin Matuska	add	w9,w9,w14
6802a58b312SMartin Matuska	ldr	w14,[sp,#12]
6812a58b312SMartin Matuska	str	w1,[sp,#8]
6822a58b312SMartin Matuska	ror	w16,w26,#6
6832a58b312SMartin Matuska	add	w21,w21,w19			// h+=K[i]
6842a58b312SMartin Matuska	ror	w0,w11,#7
6852a58b312SMartin Matuska	and	w17,w27,w26
6862a58b312SMartin Matuska	ror	w15,w8,#17
6872a58b312SMartin Matuska	bic	w19,w20,w26
6882a58b312SMartin Matuska	ror	w1,w22,#2
6892a58b312SMartin Matuska	add	w21,w21,w9			// h+=X[i]
6902a58b312SMartin Matuska	eor	w16,w16,w26,ror#11
6912a58b312SMartin Matuska	eor	w0,w0,w11,ror#18
6922a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
6932a58b312SMartin Matuska	eor	w19,w22,w23			// a^b, b^c in next round
6942a58b312SMartin Matuska	eor	w16,w16,w26,ror#25	// Sigma1(e)
6952a58b312SMartin Matuska	eor	w1,w1,w22,ror#13
6962a58b312SMartin Matuska	add	w21,w21,w17			// h+=Ch(e,f,g)
6972a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
6982a58b312SMartin Matuska	eor	w15,w15,w8,ror#19
6992a58b312SMartin Matuska	eor	w0,w0,w11,lsr#3	// sigma0(X[i+1])
7002a58b312SMartin Matuska	add	w21,w21,w16			// h+=Sigma1(e)
7012a58b312SMartin Matuska	eor	w28,w28,w23			// Maj(a,b,c)
7022a58b312SMartin Matuska	eor	w17,w1,w22,ror#22	// Sigma0(a)
7032a58b312SMartin Matuska	eor	w15,w15,w8,lsr#10	// sigma1(X[i+14])
7042a58b312SMartin Matuska	add	w10,w10,w3
7052a58b312SMartin Matuska	add	w25,w25,w21			// d+=h
7062a58b312SMartin Matuska	add	w21,w21,w28			// h+=Maj(a,b,c)
7072a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
7082a58b312SMartin Matuska	add	w10,w10,w0
7092a58b312SMartin Matuska	add	w21,w21,w17			// h+=Sigma0(a)
7102a58b312SMartin Matuska	add	w10,w10,w15
7112a58b312SMartin Matuska	ldr	w15,[sp,#0]
7122a58b312SMartin Matuska	str	w2,[sp,#12]
7132a58b312SMartin Matuska	ror	w16,w25,#6
7142a58b312SMartin Matuska	add	w20,w20,w28			// h+=K[i]
7152a58b312SMartin Matuska	ror	w1,w12,#7
7162a58b312SMartin Matuska	and	w17,w26,w25
7172a58b312SMartin Matuska	ror	w0,w9,#17
7182a58b312SMartin Matuska	bic	w28,w27,w25
7192a58b312SMartin Matuska	ror	w2,w21,#2
7202a58b312SMartin Matuska	add	w20,w20,w10			// h+=X[i]
7212a58b312SMartin Matuska	eor	w16,w16,w25,ror#11
7222a58b312SMartin Matuska	eor	w1,w1,w12,ror#18
7232a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
7242a58b312SMartin Matuska	eor	w28,w21,w22			// a^b, b^c in next round
7252a58b312SMartin Matuska	eor	w16,w16,w25,ror#25	// Sigma1(e)
7262a58b312SMartin Matuska	eor	w2,w2,w21,ror#13
7272a58b312SMartin Matuska	add	w20,w20,w17			// h+=Ch(e,f,g)
7282a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
7292a58b312SMartin Matuska	eor	w0,w0,w9,ror#19
7302a58b312SMartin Matuska	eor	w1,w1,w12,lsr#3	// sigma0(X[i+1])
7312a58b312SMartin Matuska	add	w20,w20,w16			// h+=Sigma1(e)
7322a58b312SMartin Matuska	eor	w19,w19,w22			// Maj(a,b,c)
7332a58b312SMartin Matuska	eor	w17,w2,w21,ror#22	// Sigma0(a)
7342a58b312SMartin Matuska	eor	w0,w0,w9,lsr#10	// sigma1(X[i+14])
7352a58b312SMartin Matuska	add	w11,w11,w4
7362a58b312SMartin Matuska	add	w24,w24,w20			// d+=h
7372a58b312SMartin Matuska	add	w20,w20,w19			// h+=Maj(a,b,c)
7382a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
7392a58b312SMartin Matuska	add	w11,w11,w1
7402a58b312SMartin Matuska	add	w20,w20,w17			// h+=Sigma0(a)
7412a58b312SMartin Matuska	add	w11,w11,w0
7422a58b312SMartin Matuska	ldr	w0,[sp,#4]
7432a58b312SMartin Matuska	str	w3,[sp,#0]
7442a58b312SMartin Matuska	ror	w16,w24,#6
7452a58b312SMartin Matuska	add	w27,w27,w19			// h+=K[i]
7462a58b312SMartin Matuska	ror	w2,w13,#7
7472a58b312SMartin Matuska	and	w17,w25,w24
7482a58b312SMartin Matuska	ror	w1,w10,#17
7492a58b312SMartin Matuska	bic	w19,w26,w24
7502a58b312SMartin Matuska	ror	w3,w20,#2
7512a58b312SMartin Matuska	add	w27,w27,w11			// h+=X[i]
7522a58b312SMartin Matuska	eor	w16,w16,w24,ror#11
7532a58b312SMartin Matuska	eor	w2,w2,w13,ror#18
7542a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
7552a58b312SMartin Matuska	eor	w19,w20,w21			// a^b, b^c in next round
7562a58b312SMartin Matuska	eor	w16,w16,w24,ror#25	// Sigma1(e)
7572a58b312SMartin Matuska	eor	w3,w3,w20,ror#13
7582a58b312SMartin Matuska	add	w27,w27,w17			// h+=Ch(e,f,g)
7592a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
7602a58b312SMartin Matuska	eor	w1,w1,w10,ror#19
7612a58b312SMartin Matuska	eor	w2,w2,w13,lsr#3	// sigma0(X[i+1])
7622a58b312SMartin Matuska	add	w27,w27,w16			// h+=Sigma1(e)
7632a58b312SMartin Matuska	eor	w28,w28,w21			// Maj(a,b,c)
7642a58b312SMartin Matuska	eor	w17,w3,w20,ror#22	// Sigma0(a)
7652a58b312SMartin Matuska	eor	w1,w1,w10,lsr#10	// sigma1(X[i+14])
7662a58b312SMartin Matuska	add	w12,w12,w5
7672a58b312SMartin Matuska	add	w23,w23,w27			// d+=h
7682a58b312SMartin Matuska	add	w27,w27,w28			// h+=Maj(a,b,c)
7692a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
7702a58b312SMartin Matuska	add	w12,w12,w2
7712a58b312SMartin Matuska	add	w27,w27,w17			// h+=Sigma0(a)
7722a58b312SMartin Matuska	add	w12,w12,w1
7732a58b312SMartin Matuska	ldr	w1,[sp,#8]
7742a58b312SMartin Matuska	str	w4,[sp,#4]
7752a58b312SMartin Matuska	ror	w16,w23,#6
7762a58b312SMartin Matuska	add	w26,w26,w28			// h+=K[i]
7772a58b312SMartin Matuska	ror	w3,w14,#7
7782a58b312SMartin Matuska	and	w17,w24,w23
7792a58b312SMartin Matuska	ror	w2,w11,#17
7802a58b312SMartin Matuska	bic	w28,w25,w23
7812a58b312SMartin Matuska	ror	w4,w27,#2
7822a58b312SMartin Matuska	add	w26,w26,w12			// h+=X[i]
7832a58b312SMartin Matuska	eor	w16,w16,w23,ror#11
7842a58b312SMartin Matuska	eor	w3,w3,w14,ror#18
7852a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
7862a58b312SMartin Matuska	eor	w28,w27,w20			// a^b, b^c in next round
7872a58b312SMartin Matuska	eor	w16,w16,w23,ror#25	// Sigma1(e)
7882a58b312SMartin Matuska	eor	w4,w4,w27,ror#13
7892a58b312SMartin Matuska	add	w26,w26,w17			// h+=Ch(e,f,g)
7902a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
7912a58b312SMartin Matuska	eor	w2,w2,w11,ror#19
7922a58b312SMartin Matuska	eor	w3,w3,w14,lsr#3	// sigma0(X[i+1])
7932a58b312SMartin Matuska	add	w26,w26,w16			// h+=Sigma1(e)
7942a58b312SMartin Matuska	eor	w19,w19,w20			// Maj(a,b,c)
7952a58b312SMartin Matuska	eor	w17,w4,w27,ror#22	// Sigma0(a)
7962a58b312SMartin Matuska	eor	w2,w2,w11,lsr#10	// sigma1(X[i+14])
7972a58b312SMartin Matuska	add	w13,w13,w6
7982a58b312SMartin Matuska	add	w22,w22,w26			// d+=h
7992a58b312SMartin Matuska	add	w26,w26,w19			// h+=Maj(a,b,c)
8002a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
8012a58b312SMartin Matuska	add	w13,w13,w3
8022a58b312SMartin Matuska	add	w26,w26,w17			// h+=Sigma0(a)
8032a58b312SMartin Matuska	add	w13,w13,w2
8042a58b312SMartin Matuska	ldr	w2,[sp,#12]
8052a58b312SMartin Matuska	str	w5,[sp,#8]
8062a58b312SMartin Matuska	ror	w16,w22,#6
8072a58b312SMartin Matuska	add	w25,w25,w19			// h+=K[i]
8082a58b312SMartin Matuska	ror	w4,w15,#7
8092a58b312SMartin Matuska	and	w17,w23,w22
8102a58b312SMartin Matuska	ror	w3,w12,#17
8112a58b312SMartin Matuska	bic	w19,w24,w22
8122a58b312SMartin Matuska	ror	w5,w26,#2
8132a58b312SMartin Matuska	add	w25,w25,w13			// h+=X[i]
8142a58b312SMartin Matuska	eor	w16,w16,w22,ror#11
8152a58b312SMartin Matuska	eor	w4,w4,w15,ror#18
8162a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
8172a58b312SMartin Matuska	eor	w19,w26,w27			// a^b, b^c in next round
8182a58b312SMartin Matuska	eor	w16,w16,w22,ror#25	// Sigma1(e)
8192a58b312SMartin Matuska	eor	w5,w5,w26,ror#13
8202a58b312SMartin Matuska	add	w25,w25,w17			// h+=Ch(e,f,g)
8212a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
8222a58b312SMartin Matuska	eor	w3,w3,w12,ror#19
8232a58b312SMartin Matuska	eor	w4,w4,w15,lsr#3	// sigma0(X[i+1])
8242a58b312SMartin Matuska	add	w25,w25,w16			// h+=Sigma1(e)
8252a58b312SMartin Matuska	eor	w28,w28,w27			// Maj(a,b,c)
8262a58b312SMartin Matuska	eor	w17,w5,w26,ror#22	// Sigma0(a)
8272a58b312SMartin Matuska	eor	w3,w3,w12,lsr#10	// sigma1(X[i+14])
8282a58b312SMartin Matuska	add	w14,w14,w7
8292a58b312SMartin Matuska	add	w21,w21,w25			// d+=h
8302a58b312SMartin Matuska	add	w25,w25,w28			// h+=Maj(a,b,c)
8312a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
8322a58b312SMartin Matuska	add	w14,w14,w4
8332a58b312SMartin Matuska	add	w25,w25,w17			// h+=Sigma0(a)
8342a58b312SMartin Matuska	add	w14,w14,w3
8352a58b312SMartin Matuska	ldr	w3,[sp,#0]
8362a58b312SMartin Matuska	str	w6,[sp,#12]
8372a58b312SMartin Matuska	ror	w16,w21,#6
8382a58b312SMartin Matuska	add	w24,w24,w28			// h+=K[i]
8392a58b312SMartin Matuska	ror	w5,w0,#7
8402a58b312SMartin Matuska	and	w17,w22,w21
8412a58b312SMartin Matuska	ror	w4,w13,#17
8422a58b312SMartin Matuska	bic	w28,w23,w21
8432a58b312SMartin Matuska	ror	w6,w25,#2
8442a58b312SMartin Matuska	add	w24,w24,w14			// h+=X[i]
8452a58b312SMartin Matuska	eor	w16,w16,w21,ror#11
8462a58b312SMartin Matuska	eor	w5,w5,w0,ror#18
8472a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
8482a58b312SMartin Matuska	eor	w28,w25,w26			// a^b, b^c in next round
8492a58b312SMartin Matuska	eor	w16,w16,w21,ror#25	// Sigma1(e)
8502a58b312SMartin Matuska	eor	w6,w6,w25,ror#13
8512a58b312SMartin Matuska	add	w24,w24,w17			// h+=Ch(e,f,g)
8522a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
8532a58b312SMartin Matuska	eor	w4,w4,w13,ror#19
8542a58b312SMartin Matuska	eor	w5,w5,w0,lsr#3	// sigma0(X[i+1])
8552a58b312SMartin Matuska	add	w24,w24,w16			// h+=Sigma1(e)
8562a58b312SMartin Matuska	eor	w19,w19,w26			// Maj(a,b,c)
8572a58b312SMartin Matuska	eor	w17,w6,w25,ror#22	// Sigma0(a)
8582a58b312SMartin Matuska	eor	w4,w4,w13,lsr#10	// sigma1(X[i+14])
8592a58b312SMartin Matuska	add	w15,w15,w8
8602a58b312SMartin Matuska	add	w20,w20,w24			// d+=h
8612a58b312SMartin Matuska	add	w24,w24,w19			// h+=Maj(a,b,c)
8622a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
8632a58b312SMartin Matuska	add	w15,w15,w5
8642a58b312SMartin Matuska	add	w24,w24,w17			// h+=Sigma0(a)
8652a58b312SMartin Matuska	add	w15,w15,w4
8662a58b312SMartin Matuska	ldr	w4,[sp,#4]
8672a58b312SMartin Matuska	str	w7,[sp,#0]
8682a58b312SMartin Matuska	ror	w16,w20,#6
8692a58b312SMartin Matuska	add	w23,w23,w19			// h+=K[i]
8702a58b312SMartin Matuska	ror	w6,w1,#7
8712a58b312SMartin Matuska	and	w17,w21,w20
8722a58b312SMartin Matuska	ror	w5,w14,#17
8732a58b312SMartin Matuska	bic	w19,w22,w20
8742a58b312SMartin Matuska	ror	w7,w24,#2
8752a58b312SMartin Matuska	add	w23,w23,w15			// h+=X[i]
8762a58b312SMartin Matuska	eor	w16,w16,w20,ror#11
8772a58b312SMartin Matuska	eor	w6,w6,w1,ror#18
8782a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
8792a58b312SMartin Matuska	eor	w19,w24,w25			// a^b, b^c in next round
8802a58b312SMartin Matuska	eor	w16,w16,w20,ror#25	// Sigma1(e)
8812a58b312SMartin Matuska	eor	w7,w7,w24,ror#13
8822a58b312SMartin Matuska	add	w23,w23,w17			// h+=Ch(e,f,g)
8832a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
8842a58b312SMartin Matuska	eor	w5,w5,w14,ror#19
8852a58b312SMartin Matuska	eor	w6,w6,w1,lsr#3	// sigma0(X[i+1])
8862a58b312SMartin Matuska	add	w23,w23,w16			// h+=Sigma1(e)
8872a58b312SMartin Matuska	eor	w28,w28,w25			// Maj(a,b,c)
8882a58b312SMartin Matuska	eor	w17,w7,w24,ror#22	// Sigma0(a)
8892a58b312SMartin Matuska	eor	w5,w5,w14,lsr#10	// sigma1(X[i+14])
8902a58b312SMartin Matuska	add	w0,w0,w9
8912a58b312SMartin Matuska	add	w27,w27,w23			// d+=h
8922a58b312SMartin Matuska	add	w23,w23,w28			// h+=Maj(a,b,c)
8932a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
8942a58b312SMartin Matuska	add	w0,w0,w6
8952a58b312SMartin Matuska	add	w23,w23,w17			// h+=Sigma0(a)
8962a58b312SMartin Matuska	add	w0,w0,w5
8972a58b312SMartin Matuska	ldr	w5,[sp,#8]
8982a58b312SMartin Matuska	str	w8,[sp,#4]
8992a58b312SMartin Matuska	ror	w16,w27,#6
9002a58b312SMartin Matuska	add	w22,w22,w28			// h+=K[i]
9012a58b312SMartin Matuska	ror	w7,w2,#7
9022a58b312SMartin Matuska	and	w17,w20,w27
9032a58b312SMartin Matuska	ror	w6,w15,#17
9042a58b312SMartin Matuska	bic	w28,w21,w27
9052a58b312SMartin Matuska	ror	w8,w23,#2
9062a58b312SMartin Matuska	add	w22,w22,w0			// h+=X[i]
9072a58b312SMartin Matuska	eor	w16,w16,w27,ror#11
9082a58b312SMartin Matuska	eor	w7,w7,w2,ror#18
9092a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
9102a58b312SMartin Matuska	eor	w28,w23,w24			// a^b, b^c in next round
9112a58b312SMartin Matuska	eor	w16,w16,w27,ror#25	// Sigma1(e)
9122a58b312SMartin Matuska	eor	w8,w8,w23,ror#13
9132a58b312SMartin Matuska	add	w22,w22,w17			// h+=Ch(e,f,g)
9142a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
9152a58b312SMartin Matuska	eor	w6,w6,w15,ror#19
9162a58b312SMartin Matuska	eor	w7,w7,w2,lsr#3	// sigma0(X[i+1])
9172a58b312SMartin Matuska	add	w22,w22,w16			// h+=Sigma1(e)
9182a58b312SMartin Matuska	eor	w19,w19,w24			// Maj(a,b,c)
9192a58b312SMartin Matuska	eor	w17,w8,w23,ror#22	// Sigma0(a)
9202a58b312SMartin Matuska	eor	w6,w6,w15,lsr#10	// sigma1(X[i+14])
9212a58b312SMartin Matuska	add	w1,w1,w10
9222a58b312SMartin Matuska	add	w26,w26,w22			// d+=h
9232a58b312SMartin Matuska	add	w22,w22,w19			// h+=Maj(a,b,c)
9242a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
9252a58b312SMartin Matuska	add	w1,w1,w7
9262a58b312SMartin Matuska	add	w22,w22,w17			// h+=Sigma0(a)
9272a58b312SMartin Matuska	add	w1,w1,w6
9282a58b312SMartin Matuska	ldr	w6,[sp,#12]
9292a58b312SMartin Matuska	str	w9,[sp,#8]
9302a58b312SMartin Matuska	ror	w16,w26,#6
9312a58b312SMartin Matuska	add	w21,w21,w19			// h+=K[i]
9322a58b312SMartin Matuska	ror	w8,w3,#7
9332a58b312SMartin Matuska	and	w17,w27,w26
9342a58b312SMartin Matuska	ror	w7,w0,#17
9352a58b312SMartin Matuska	bic	w19,w20,w26
9362a58b312SMartin Matuska	ror	w9,w22,#2
9372a58b312SMartin Matuska	add	w21,w21,w1			// h+=X[i]
9382a58b312SMartin Matuska	eor	w16,w16,w26,ror#11
9392a58b312SMartin Matuska	eor	w8,w8,w3,ror#18
9402a58b312SMartin Matuska	orr	w17,w17,w19			// Ch(e,f,g)
9412a58b312SMartin Matuska	eor	w19,w22,w23			// a^b, b^c in next round
9422a58b312SMartin Matuska	eor	w16,w16,w26,ror#25	// Sigma1(e)
9432a58b312SMartin Matuska	eor	w9,w9,w22,ror#13
9442a58b312SMartin Matuska	add	w21,w21,w17			// h+=Ch(e,f,g)
9452a58b312SMartin Matuska	and	w28,w28,w19			// (b^c)&=(a^b)
9462a58b312SMartin Matuska	eor	w7,w7,w0,ror#19
9472a58b312SMartin Matuska	eor	w8,w8,w3,lsr#3	// sigma0(X[i+1])
9482a58b312SMartin Matuska	add	w21,w21,w16			// h+=Sigma1(e)
9492a58b312SMartin Matuska	eor	w28,w28,w23			// Maj(a,b,c)
9502a58b312SMartin Matuska	eor	w17,w9,w22,ror#22	// Sigma0(a)
9512a58b312SMartin Matuska	eor	w7,w7,w0,lsr#10	// sigma1(X[i+14])
9522a58b312SMartin Matuska	add	w2,w2,w11
9532a58b312SMartin Matuska	add	w25,w25,w21			// d+=h
9542a58b312SMartin Matuska	add	w21,w21,w28			// h+=Maj(a,b,c)
9552a58b312SMartin Matuska	ldr	w28,[x30],#4		// *K++, w19 in next round
9562a58b312SMartin Matuska	add	w2,w2,w8
9572a58b312SMartin Matuska	add	w21,w21,w17			// h+=Sigma0(a)
9582a58b312SMartin Matuska	add	w2,w2,w7
9592a58b312SMartin Matuska	ldr	w7,[sp,#0]
9602a58b312SMartin Matuska	str	w10,[sp,#12]
9612a58b312SMartin Matuska	ror	w16,w25,#6
9622a58b312SMartin Matuska	add	w20,w20,w28			// h+=K[i]
9632a58b312SMartin Matuska	ror	w9,w4,#7
9642a58b312SMartin Matuska	and	w17,w26,w25
9652a58b312SMartin Matuska	ror	w8,w1,#17
9662a58b312SMartin Matuska	bic	w28,w27,w25
9672a58b312SMartin Matuska	ror	w10,w21,#2
9682a58b312SMartin Matuska	add	w20,w20,w2			// h+=X[i]
9692a58b312SMartin Matuska	eor	w16,w16,w25,ror#11
9702a58b312SMartin Matuska	eor	w9,w9,w4,ror#18
9712a58b312SMartin Matuska	orr	w17,w17,w28			// Ch(e,f,g)
9722a58b312SMartin Matuska	eor	w28,w21,w22			// a^b, b^c in next round
9732a58b312SMartin Matuska	eor	w16,w16,w25,ror#25	// Sigma1(e)
9742a58b312SMartin Matuska	eor	w10,w10,w21,ror#13
9752a58b312SMartin Matuska	add	w20,w20,w17			// h+=Ch(e,f,g)
9762a58b312SMartin Matuska	and	w19,w19,w28			// (b^c)&=(a^b)
9772a58b312SMartin Matuska	eor	w8,w8,w1,ror#19
9782a58b312SMartin Matuska	eor	w9,w9,w4,lsr#3	// sigma0(X[i+1])
9792a58b312SMartin Matuska	add	w20,w20,w16			// h+=Sigma1(e)
9802a58b312SMartin Matuska	eor	w19,w19,w22			// Maj(a,b,c)
9812a58b312SMartin Matuska	eor	w17,w10,w21,ror#22	// Sigma0(a)
9822a58b312SMartin Matuska	eor	w8,w8,w1,lsr#10	// sigma1(X[i+14])
9832a58b312SMartin Matuska	add	w3,w3,w12
9842a58b312SMartin Matuska	add	w24,w24,w20			// d+=h
9852a58b312SMartin Matuska	add	w20,w20,w19			// h+=Maj(a,b,c)
9862a58b312SMartin Matuska	ldr	w19,[x30],#4		// *K++, w28 in next round
9872a58b312SMartin Matuska	add	w3,w3,w9
9882a58b312SMartin Matuska	add	w20,w20,w17			// h+=Sigma0(a)
9892a58b312SMartin Matuska	add	w3,w3,w8
9902a58b312SMartin Matuska	cbnz	w19,.Loop_16_xx
9912a58b312SMartin Matuska
9922a58b312SMartin Matuska	ldp	x0,x2,[x29,#96]
9932a58b312SMartin Matuska	ldr	x1,[x29,#112]
9942a58b312SMartin Matuska	sub	x30,x30,#260		// rewind
9952a58b312SMartin Matuska
9962a58b312SMartin Matuska	ldp	w3,w4,[x0]
9972a58b312SMartin Matuska	ldp	w5,w6,[x0,#2*4]
9982a58b312SMartin Matuska	add	x1,x1,#14*4			// advance input pointer
9992a58b312SMartin Matuska	ldp	w7,w8,[x0,#4*4]
10002a58b312SMartin Matuska	add	w20,w20,w3
10012a58b312SMartin Matuska	ldp	w9,w10,[x0,#6*4]
10022a58b312SMartin Matuska	add	w21,w21,w4
10032a58b312SMartin Matuska	add	w22,w22,w5
10042a58b312SMartin Matuska	add	w23,w23,w6
10052a58b312SMartin Matuska	stp	w20,w21,[x0]
10062a58b312SMartin Matuska	add	w24,w24,w7
10072a58b312SMartin Matuska	add	w25,w25,w8
10082a58b312SMartin Matuska	stp	w22,w23,[x0,#2*4]
10092a58b312SMartin Matuska	add	w26,w26,w9
10102a58b312SMartin Matuska	add	w27,w27,w10
10112a58b312SMartin Matuska	cmp	x1,x2
10122a58b312SMartin Matuska	stp	w24,w25,[x0,#4*4]
10132a58b312SMartin Matuska	stp	w26,w27,[x0,#6*4]
10142a58b312SMartin Matuska	b.ne	.Loop
10152a58b312SMartin Matuska
10162a58b312SMartin Matuska	ldp	x19,x20,[x29,#16]
10172a58b312SMartin Matuska	add	sp,sp,#4*4
10182a58b312SMartin Matuska	ldp	x21,x22,[x29,#32]
10192a58b312SMartin Matuska	ldp	x23,x24,[x29,#48]
10202a58b312SMartin Matuska	ldp	x25,x26,[x29,#64]
10212a58b312SMartin Matuska	ldp	x27,x28,[x29,#80]
10222a58b312SMartin Matuska	ldp	x29,x30,[sp],#128
10232a58b312SMartin Matuska	ret
10242a58b312SMartin Matuska.size	zfs_sha256_block_armv7,.-zfs_sha256_block_armv7
10252a58b312SMartin Matuska
10262a58b312SMartin Matuska.globl	zfs_sha256_block_armv8
10272a58b312SMartin Matuska.type	zfs_sha256_block_armv8,%function
10282a58b312SMartin Matuska.align	6
10292a58b312SMartin Matuskazfs_sha256_block_armv8:
1030f7f4bd06SMartin Matuska	hint		#34				// bti c
10312a58b312SMartin Matuska.Lv8_entry:
10322a58b312SMartin Matuska	stp		x29,x30,[sp,#-16]!
10332a58b312SMartin Matuska	add		x29,sp,#0
10342a58b312SMartin Matuska
10352a58b312SMartin Matuska	ld1		{v0.4s,v1.4s},[x0]
10362a58b312SMartin Matuska	adr		x3,.LK256
10372a58b312SMartin Matuska
10382a58b312SMartin Matuska.Loop_hw:
10392a58b312SMartin Matuska	ld1		{v4.16b-v7.16b},[x1],#64
10402a58b312SMartin Matuska	sub		x2,x2,#1
10412a58b312SMartin Matuska	ld1		{v16.4s},[x3],#16
10422a58b312SMartin Matuska	rev32		v4.16b,v4.16b
10432a58b312SMartin Matuska	rev32		v5.16b,v5.16b
10442a58b312SMartin Matuska	rev32		v6.16b,v6.16b
10452a58b312SMartin Matuska	rev32		v7.16b,v7.16b
10462a58b312SMartin Matuska	orr		v18.16b,v0.16b,v0.16b		// offload
10472a58b312SMartin Matuska	orr		v19.16b,v1.16b,v1.16b
10482a58b312SMartin Matuska	ld1		{v17.4s},[x3],#16
10492a58b312SMartin Matuska	add		v16.4s,v16.4s,v4.4s
10502a58b312SMartin Matuska	.inst	0x5e2828a4	//sha256su0 v4.16b,v5.16b
10512a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
10522a58b312SMartin Matuska	.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
10532a58b312SMartin Matuska	.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
10542a58b312SMartin Matuska	.inst	0x5e0760c4	//sha256su1 v4.16b,v6.16b,v7.16b
10552a58b312SMartin Matuska	ld1		{v16.4s},[x3],#16
10562a58b312SMartin Matuska	add		v17.4s,v17.4s,v5.4s
10572a58b312SMartin Matuska	.inst	0x5e2828c5	//sha256su0 v5.16b,v6.16b
10582a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
10592a58b312SMartin Matuska	.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
10602a58b312SMartin Matuska	.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
10612a58b312SMartin Matuska	.inst	0x5e0460e5	//sha256su1 v5.16b,v7.16b,v4.16b
10622a58b312SMartin Matuska	ld1		{v17.4s},[x3],#16
10632a58b312SMartin Matuska	add		v16.4s,v16.4s,v6.4s
10642a58b312SMartin Matuska	.inst	0x5e2828e6	//sha256su0 v6.16b,v7.16b
10652a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
10662a58b312SMartin Matuska	.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
10672a58b312SMartin Matuska	.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
10682a58b312SMartin Matuska	.inst	0x5e056086	//sha256su1 v6.16b,v4.16b,v5.16b
10692a58b312SMartin Matuska	ld1		{v16.4s},[x3],#16
10702a58b312SMartin Matuska	add		v17.4s,v17.4s,v7.4s
10712a58b312SMartin Matuska	.inst	0x5e282887	//sha256su0 v7.16b,v4.16b
10722a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
10732a58b312SMartin Matuska	.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
10742a58b312SMartin Matuska	.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
10752a58b312SMartin Matuska	.inst	0x5e0660a7	//sha256su1 v7.16b,v5.16b,v6.16b
10762a58b312SMartin Matuska	ld1		{v17.4s},[x3],#16
10772a58b312SMartin Matuska	add		v16.4s,v16.4s,v4.4s
10782a58b312SMartin Matuska	.inst	0x5e2828a4	//sha256su0 v4.16b,v5.16b
10792a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
10802a58b312SMartin Matuska	.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
10812a58b312SMartin Matuska	.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
10822a58b312SMartin Matuska	.inst	0x5e0760c4	//sha256su1 v4.16b,v6.16b,v7.16b
10832a58b312SMartin Matuska	ld1		{v16.4s},[x3],#16
10842a58b312SMartin Matuska	add		v17.4s,v17.4s,v5.4s
10852a58b312SMartin Matuska	.inst	0x5e2828c5	//sha256su0 v5.16b,v6.16b
10862a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
10872a58b312SMartin Matuska	.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
10882a58b312SMartin Matuska	.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
10892a58b312SMartin Matuska	.inst	0x5e0460e5	//sha256su1 v5.16b,v7.16b,v4.16b
10902a58b312SMartin Matuska	ld1		{v17.4s},[x3],#16
10912a58b312SMartin Matuska	add		v16.4s,v16.4s,v6.4s
10922a58b312SMartin Matuska	.inst	0x5e2828e6	//sha256su0 v6.16b,v7.16b
10932a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
10942a58b312SMartin Matuska	.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
10952a58b312SMartin Matuska	.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
10962a58b312SMartin Matuska	.inst	0x5e056086	//sha256su1 v6.16b,v4.16b,v5.16b
10972a58b312SMartin Matuska	ld1		{v16.4s},[x3],#16
10982a58b312SMartin Matuska	add		v17.4s,v17.4s,v7.4s
10992a58b312SMartin Matuska	.inst	0x5e282887	//sha256su0 v7.16b,v4.16b
11002a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
11012a58b312SMartin Matuska	.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
11022a58b312SMartin Matuska	.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
11032a58b312SMartin Matuska	.inst	0x5e0660a7	//sha256su1 v7.16b,v5.16b,v6.16b
11042a58b312SMartin Matuska	ld1		{v17.4s},[x3],#16
11052a58b312SMartin Matuska	add		v16.4s,v16.4s,v4.4s
11062a58b312SMartin Matuska	.inst	0x5e2828a4	//sha256su0 v4.16b,v5.16b
11072a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
11082a58b312SMartin Matuska	.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
11092a58b312SMartin Matuska	.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
11102a58b312SMartin Matuska	.inst	0x5e0760c4	//sha256su1 v4.16b,v6.16b,v7.16b
11112a58b312SMartin Matuska	ld1		{v16.4s},[x3],#16
11122a58b312SMartin Matuska	add		v17.4s,v17.4s,v5.4s
11132a58b312SMartin Matuska	.inst	0x5e2828c5	//sha256su0 v5.16b,v6.16b
11142a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
11152a58b312SMartin Matuska	.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
11162a58b312SMartin Matuska	.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
11172a58b312SMartin Matuska	.inst	0x5e0460e5	//sha256su1 v5.16b,v7.16b,v4.16b
11182a58b312SMartin Matuska	ld1		{v17.4s},[x3],#16
11192a58b312SMartin Matuska	add		v16.4s,v16.4s,v6.4s
11202a58b312SMartin Matuska	.inst	0x5e2828e6	//sha256su0 v6.16b,v7.16b
11212a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
11222a58b312SMartin Matuska	.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
11232a58b312SMartin Matuska	.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
11242a58b312SMartin Matuska	.inst	0x5e056086	//sha256su1 v6.16b,v4.16b,v5.16b
11252a58b312SMartin Matuska	ld1		{v16.4s},[x3],#16
11262a58b312SMartin Matuska	add		v17.4s,v17.4s,v7.4s
11272a58b312SMartin Matuska	.inst	0x5e282887	//sha256su0 v7.16b,v4.16b
11282a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
11292a58b312SMartin Matuska	.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
11302a58b312SMartin Matuska	.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
11312a58b312SMartin Matuska	.inst	0x5e0660a7	//sha256su1 v7.16b,v5.16b,v6.16b
11322a58b312SMartin Matuska	ld1		{v17.4s},[x3],#16
11332a58b312SMartin Matuska	add		v16.4s,v16.4s,v4.4s
11342a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
11352a58b312SMartin Matuska	.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
11362a58b312SMartin Matuska	.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
11372a58b312SMartin Matuska
11382a58b312SMartin Matuska	ld1		{v16.4s},[x3],#16
11392a58b312SMartin Matuska	add		v17.4s,v17.4s,v5.4s
11402a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
11412a58b312SMartin Matuska	.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
11422a58b312SMartin Matuska	.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
11432a58b312SMartin Matuska
11442a58b312SMartin Matuska	ld1		{v17.4s},[x3]
11452a58b312SMartin Matuska	add		v16.4s,v16.4s,v6.4s
11462a58b312SMartin Matuska	sub		x3,x3,#64*4-16	// rewind
11472a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
11482a58b312SMartin Matuska	.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
11492a58b312SMartin Matuska	.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
11502a58b312SMartin Matuska
11512a58b312SMartin Matuska	add		v17.4s,v17.4s,v7.4s
11522a58b312SMartin Matuska	orr		v2.16b,v0.16b,v0.16b
11532a58b312SMartin Matuska	.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
11542a58b312SMartin Matuska	.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
11552a58b312SMartin Matuska
11562a58b312SMartin Matuska	add		v0.4s,v0.4s,v18.4s
11572a58b312SMartin Matuska	add		v1.4s,v1.4s,v19.4s
11582a58b312SMartin Matuska
11592a58b312SMartin Matuska	cbnz		x2,.Loop_hw
11602a58b312SMartin Matuska
11612a58b312SMartin Matuska	st1		{v0.4s,v1.4s},[x0]
11622a58b312SMartin Matuska
11632a58b312SMartin Matuska	ldr		x29,[sp],#16
11642a58b312SMartin Matuska	ret
11652a58b312SMartin Matuska.size	zfs_sha256_block_armv8,.-zfs_sha256_block_armv8
11662a58b312SMartin Matuska
11672a58b312SMartin Matuska.globl	zfs_sha256_block_neon
11682a58b312SMartin Matuska.type	zfs_sha256_block_neon,%function
11692a58b312SMartin Matuska.align	4
11702a58b312SMartin Matuskazfs_sha256_block_neon:
1171f7f4bd06SMartin Matuska	hint	#34					// bti c
11722a58b312SMartin Matuska.Lneon_entry:
11732a58b312SMartin Matuska	stp	x29, x30, [sp, #-16]!
11742a58b312SMartin Matuska	mov	x29, sp
11752a58b312SMartin Matuska	sub	sp,sp,#16*4
11762a58b312SMartin Matuska
11772a58b312SMartin Matuska	adr	x16,.LK256
11782a58b312SMartin Matuska	add	x2,x1,x2,lsl#6	// len to point at the end of inp
11792a58b312SMartin Matuska
11802a58b312SMartin Matuska	ld1	{v0.16b},[x1], #16
11812a58b312SMartin Matuska	ld1	{v1.16b},[x1], #16
11822a58b312SMartin Matuska	ld1	{v2.16b},[x1], #16
11832a58b312SMartin Matuska	ld1	{v3.16b},[x1], #16
11842a58b312SMartin Matuska	ld1	{v4.4s},[x16], #16
11852a58b312SMartin Matuska	ld1	{v5.4s},[x16], #16
11862a58b312SMartin Matuska	ld1	{v6.4s},[x16], #16
11872a58b312SMartin Matuska	ld1	{v7.4s},[x16], #16
11882a58b312SMartin Matuska	rev32	v0.16b,v0.16b		// yes, even on
11892a58b312SMartin Matuska	rev32	v1.16b,v1.16b		// big-endian
11902a58b312SMartin Matuska	rev32	v2.16b,v2.16b
11912a58b312SMartin Matuska	rev32	v3.16b,v3.16b
11922a58b312SMartin Matuska	mov	x17,sp
11932a58b312SMartin Matuska	add	v4.4s,v4.4s,v0.4s
11942a58b312SMartin Matuska	add	v5.4s,v5.4s,v1.4s
11952a58b312SMartin Matuska	add	v6.4s,v6.4s,v2.4s
11962a58b312SMartin Matuska	st1	{v4.4s-v5.4s},[x17], #32
11972a58b312SMartin Matuska	add	v7.4s,v7.4s,v3.4s
11982a58b312SMartin Matuska	st1	{v6.4s-v7.4s},[x17]
11992a58b312SMartin Matuska	sub	x17,x17,#32
12002a58b312SMartin Matuska
12012a58b312SMartin Matuska	ldp	w3,w4,[x0]
12022a58b312SMartin Matuska	ldp	w5,w6,[x0,#8]
12032a58b312SMartin Matuska	ldp	w7,w8,[x0,#16]
12042a58b312SMartin Matuska	ldp	w9,w10,[x0,#24]
12052a58b312SMartin Matuska	ldr	w12,[sp,#0]
12062a58b312SMartin Matuska	mov	w13,wzr
12072a58b312SMartin Matuska	eor	w14,w4,w5
12082a58b312SMartin Matuska	mov	w15,wzr
12092a58b312SMartin Matuska	b	.L_00_48
12102a58b312SMartin Matuska
12112a58b312SMartin Matuska.align	4
12122a58b312SMartin Matuska.L_00_48:
12132a58b312SMartin Matuska	ext	v4.16b,v0.16b,v1.16b,#4
12142a58b312SMartin Matuska	add	w10,w10,w12
12152a58b312SMartin Matuska	add	w3,w3,w15
12162a58b312SMartin Matuska	and	w12,w8,w7
12172a58b312SMartin Matuska	bic	w15,w9,w7
12182a58b312SMartin Matuska	ext	v7.16b,v2.16b,v3.16b,#4
12192a58b312SMartin Matuska	eor	w11,w7,w7,ror#5
12202a58b312SMartin Matuska	add	w3,w3,w13
12212a58b312SMartin Matuska	mov	d19,v3.d[1]
12222a58b312SMartin Matuska	orr	w12,w12,w15
12232a58b312SMartin Matuska	eor	w11,w11,w7,ror#19
12242a58b312SMartin Matuska	ushr	v6.4s,v4.4s,#7
12252a58b312SMartin Matuska	eor	w15,w3,w3,ror#11
12262a58b312SMartin Matuska	ushr	v5.4s,v4.4s,#3
12272a58b312SMartin Matuska	add	w10,w10,w12
12282a58b312SMartin Matuska	add	v0.4s,v0.4s,v7.4s
12292a58b312SMartin Matuska	ror	w11,w11,#6
12302a58b312SMartin Matuska	sli	v6.4s,v4.4s,#25
12312a58b312SMartin Matuska	eor	w13,w3,w4
12322a58b312SMartin Matuska	eor	w15,w15,w3,ror#20
12332a58b312SMartin Matuska	ushr	v7.4s,v4.4s,#18
12342a58b312SMartin Matuska	add	w10,w10,w11
12352a58b312SMartin Matuska	ldr	w12,[sp,#4]
12362a58b312SMartin Matuska	and	w14,w14,w13
12372a58b312SMartin Matuska	eor	v5.16b,v5.16b,v6.16b
12382a58b312SMartin Matuska	ror	w15,w15,#2
12392a58b312SMartin Matuska	add	w6,w6,w10
12402a58b312SMartin Matuska	sli	v7.4s,v4.4s,#14
12412a58b312SMartin Matuska	eor	w14,w14,w4
12422a58b312SMartin Matuska	ushr	v16.4s,v19.4s,#17
12432a58b312SMartin Matuska	add	w9,w9,w12
12442a58b312SMartin Matuska	add	w10,w10,w15
12452a58b312SMartin Matuska	and	w12,w7,w6
12462a58b312SMartin Matuska	eor	v5.16b,v5.16b,v7.16b
12472a58b312SMartin Matuska	bic	w15,w8,w6
12482a58b312SMartin Matuska	eor	w11,w6,w6,ror#5
12492a58b312SMartin Matuska	sli	v16.4s,v19.4s,#15
12502a58b312SMartin Matuska	add	w10,w10,w14
12512a58b312SMartin Matuska	orr	w12,w12,w15
12522a58b312SMartin Matuska	ushr	v17.4s,v19.4s,#10
12532a58b312SMartin Matuska	eor	w11,w11,w6,ror#19
12542a58b312SMartin Matuska	eor	w15,w10,w10,ror#11
12552a58b312SMartin Matuska	ushr	v7.4s,v19.4s,#19
12562a58b312SMartin Matuska	add	w9,w9,w12
12572a58b312SMartin Matuska	ror	w11,w11,#6
12582a58b312SMartin Matuska	add	v0.4s,v0.4s,v5.4s
12592a58b312SMartin Matuska	eor	w14,w10,w3
12602a58b312SMartin Matuska	eor	w15,w15,w10,ror#20
12612a58b312SMartin Matuska	sli	v7.4s,v19.4s,#13
12622a58b312SMartin Matuska	add	w9,w9,w11
12632a58b312SMartin Matuska	ldr	w12,[sp,#8]
12642a58b312SMartin Matuska	and	w13,w13,w14
12652a58b312SMartin Matuska	eor	v17.16b,v17.16b,v16.16b
12662a58b312SMartin Matuska	ror	w15,w15,#2
12672a58b312SMartin Matuska	add	w5,w5,w9
12682a58b312SMartin Matuska	eor	w13,w13,w3
12692a58b312SMartin Matuska	eor	v17.16b,v17.16b,v7.16b
12702a58b312SMartin Matuska	add	w8,w8,w12
12712a58b312SMartin Matuska	add	w9,w9,w15
12722a58b312SMartin Matuska	and	w12,w6,w5
12732a58b312SMartin Matuska	add	v0.4s,v0.4s,v17.4s
12742a58b312SMartin Matuska	bic	w15,w7,w5
12752a58b312SMartin Matuska	eor	w11,w5,w5,ror#5
12762a58b312SMartin Matuska	add	w9,w9,w13
12772a58b312SMartin Matuska	ushr	v18.4s,v0.4s,#17
12782a58b312SMartin Matuska	orr	w12,w12,w15
12792a58b312SMartin Matuska	ushr	v19.4s,v0.4s,#10
12802a58b312SMartin Matuska	eor	w11,w11,w5,ror#19
12812a58b312SMartin Matuska	eor	w15,w9,w9,ror#11
12822a58b312SMartin Matuska	sli	v18.4s,v0.4s,#15
12832a58b312SMartin Matuska	add	w8,w8,w12
12842a58b312SMartin Matuska	ushr	v17.4s,v0.4s,#19
12852a58b312SMartin Matuska	ror	w11,w11,#6
12862a58b312SMartin Matuska	eor	w13,w9,w10
12872a58b312SMartin Matuska	eor	v19.16b,v19.16b,v18.16b
12882a58b312SMartin Matuska	eor	w15,w15,w9,ror#20
12892a58b312SMartin Matuska	add	w8,w8,w11
12902a58b312SMartin Matuska	sli	v17.4s,v0.4s,#13
12912a58b312SMartin Matuska	ldr	w12,[sp,#12]
12922a58b312SMartin Matuska	and	w14,w14,w13
12932a58b312SMartin Matuska	ror	w15,w15,#2
12942a58b312SMartin Matuska	ld1	{v4.4s},[x16], #16
12952a58b312SMartin Matuska	add	w4,w4,w8
12962a58b312SMartin Matuska	eor	v19.16b,v19.16b,v17.16b
12972a58b312SMartin Matuska	eor	w14,w14,w10
12982a58b312SMartin Matuska	eor	v17.16b,v17.16b,v17.16b
12992a58b312SMartin Matuska	add	w7,w7,w12
13002a58b312SMartin Matuska	add	w8,w8,w15
13012a58b312SMartin Matuska	and	w12,w5,w4
13022a58b312SMartin Matuska	mov	v17.d[1],v19.d[0]
13032a58b312SMartin Matuska	bic	w15,w6,w4
13042a58b312SMartin Matuska	eor	w11,w4,w4,ror#5
13052a58b312SMartin Matuska	add	w8,w8,w14
13062a58b312SMartin Matuska	add	v0.4s,v0.4s,v17.4s
13072a58b312SMartin Matuska	orr	w12,w12,w15
13082a58b312SMartin Matuska	eor	w11,w11,w4,ror#19
13092a58b312SMartin Matuska	eor	w15,w8,w8,ror#11
13102a58b312SMartin Matuska	add	v4.4s,v4.4s,v0.4s
13112a58b312SMartin Matuska	add	w7,w7,w12
13122a58b312SMartin Matuska	ror	w11,w11,#6
13132a58b312SMartin Matuska	eor	w14,w8,w9
13142a58b312SMartin Matuska	eor	w15,w15,w8,ror#20
13152a58b312SMartin Matuska	add	w7,w7,w11
13162a58b312SMartin Matuska	ldr	w12,[sp,#16]
13172a58b312SMartin Matuska	and	w13,w13,w14
13182a58b312SMartin Matuska	ror	w15,w15,#2
13192a58b312SMartin Matuska	add	w3,w3,w7
13202a58b312SMartin Matuska	eor	w13,w13,w9
13212a58b312SMartin Matuska	st1	{v4.4s},[x17], #16
13222a58b312SMartin Matuska	ext	v4.16b,v1.16b,v2.16b,#4
13232a58b312SMartin Matuska	add	w6,w6,w12
13242a58b312SMartin Matuska	add	w7,w7,w15
13252a58b312SMartin Matuska	and	w12,w4,w3
13262a58b312SMartin Matuska	bic	w15,w5,w3
13272a58b312SMartin Matuska	ext	v7.16b,v3.16b,v0.16b,#4
13282a58b312SMartin Matuska	eor	w11,w3,w3,ror#5
13292a58b312SMartin Matuska	add	w7,w7,w13
13302a58b312SMartin Matuska	mov	d19,v0.d[1]
13312a58b312SMartin Matuska	orr	w12,w12,w15
13322a58b312SMartin Matuska	eor	w11,w11,w3,ror#19
13332a58b312SMartin Matuska	ushr	v6.4s,v4.4s,#7
13342a58b312SMartin Matuska	eor	w15,w7,w7,ror#11
13352a58b312SMartin Matuska	ushr	v5.4s,v4.4s,#3
13362a58b312SMartin Matuska	add	w6,w6,w12
13372a58b312SMartin Matuska	add	v1.4s,v1.4s,v7.4s
13382a58b312SMartin Matuska	ror	w11,w11,#6
13392a58b312SMartin Matuska	sli	v6.4s,v4.4s,#25
13402a58b312SMartin Matuska	eor	w13,w7,w8
13412a58b312SMartin Matuska	eor	w15,w15,w7,ror#20
13422a58b312SMartin Matuska	ushr	v7.4s,v4.4s,#18
13432a58b312SMartin Matuska	add	w6,w6,w11
13442a58b312SMartin Matuska	ldr	w12,[sp,#20]
13452a58b312SMartin Matuska	and	w14,w14,w13
13462a58b312SMartin Matuska	eor	v5.16b,v5.16b,v6.16b
13472a58b312SMartin Matuska	ror	w15,w15,#2
13482a58b312SMartin Matuska	add	w10,w10,w6
13492a58b312SMartin Matuska	sli	v7.4s,v4.4s,#14
13502a58b312SMartin Matuska	eor	w14,w14,w8
13512a58b312SMartin Matuska	ushr	v16.4s,v19.4s,#17
13522a58b312SMartin Matuska	add	w5,w5,w12
13532a58b312SMartin Matuska	add	w6,w6,w15
13542a58b312SMartin Matuska	and	w12,w3,w10
13552a58b312SMartin Matuska	eor	v5.16b,v5.16b,v7.16b
13562a58b312SMartin Matuska	bic	w15,w4,w10
13572a58b312SMartin Matuska	eor	w11,w10,w10,ror#5
13582a58b312SMartin Matuska	sli	v16.4s,v19.4s,#15
13592a58b312SMartin Matuska	add	w6,w6,w14
13602a58b312SMartin Matuska	orr	w12,w12,w15
13612a58b312SMartin Matuska	ushr	v17.4s,v19.4s,#10
13622a58b312SMartin Matuska	eor	w11,w11,w10,ror#19
13632a58b312SMartin Matuska	eor	w15,w6,w6,ror#11
13642a58b312SMartin Matuska	ushr	v7.4s,v19.4s,#19
13652a58b312SMartin Matuska	add	w5,w5,w12
13662a58b312SMartin Matuska	ror	w11,w11,#6
13672a58b312SMartin Matuska	add	v1.4s,v1.4s,v5.4s
13682a58b312SMartin Matuska	eor	w14,w6,w7
13692a58b312SMartin Matuska	eor	w15,w15,w6,ror#20
13702a58b312SMartin Matuska	sli	v7.4s,v19.4s,#13
13712a58b312SMartin Matuska	add	w5,w5,w11
13722a58b312SMartin Matuska	ldr	w12,[sp,#24]
13732a58b312SMartin Matuska	and	w13,w13,w14
13742a58b312SMartin Matuska	eor	v17.16b,v17.16b,v16.16b
13752a58b312SMartin Matuska	ror	w15,w15,#2
13762a58b312SMartin Matuska	add	w9,w9,w5
13772a58b312SMartin Matuska	eor	w13,w13,w7
13782a58b312SMartin Matuska	eor	v17.16b,v17.16b,v7.16b
13792a58b312SMartin Matuska	add	w4,w4,w12
13802a58b312SMartin Matuska	add	w5,w5,w15
13812a58b312SMartin Matuska	and	w12,w10,w9
13822a58b312SMartin Matuska	add	v1.4s,v1.4s,v17.4s
13832a58b312SMartin Matuska	bic	w15,w3,w9
13842a58b312SMartin Matuska	eor	w11,w9,w9,ror#5
13852a58b312SMartin Matuska	add	w5,w5,w13
13862a58b312SMartin Matuska	ushr	v18.4s,v1.4s,#17
13872a58b312SMartin Matuska	orr	w12,w12,w15
13882a58b312SMartin Matuska	ushr	v19.4s,v1.4s,#10
13892a58b312SMartin Matuska	eor	w11,w11,w9,ror#19
13902a58b312SMartin Matuska	eor	w15,w5,w5,ror#11
13912a58b312SMartin Matuska	sli	v18.4s,v1.4s,#15
13922a58b312SMartin Matuska	add	w4,w4,w12
13932a58b312SMartin Matuska	ushr	v17.4s,v1.4s,#19
13942a58b312SMartin Matuska	ror	w11,w11,#6
13952a58b312SMartin Matuska	eor	w13,w5,w6
13962a58b312SMartin Matuska	eor	v19.16b,v19.16b,v18.16b
13972a58b312SMartin Matuska	eor	w15,w15,w5,ror#20
13982a58b312SMartin Matuska	add	w4,w4,w11
13992a58b312SMartin Matuska	sli	v17.4s,v1.4s,#13
14002a58b312SMartin Matuska	ldr	w12,[sp,#28]
14012a58b312SMartin Matuska	and	w14,w14,w13
14022a58b312SMartin Matuska	ror	w15,w15,#2
14032a58b312SMartin Matuska	ld1	{v4.4s},[x16], #16
14042a58b312SMartin Matuska	add	w8,w8,w4
14052a58b312SMartin Matuska	eor	v19.16b,v19.16b,v17.16b
14062a58b312SMartin Matuska	eor	w14,w14,w6
14072a58b312SMartin Matuska	eor	v17.16b,v17.16b,v17.16b
14082a58b312SMartin Matuska	add	w3,w3,w12
14092a58b312SMartin Matuska	add	w4,w4,w15
14102a58b312SMartin Matuska	and	w12,w9,w8
14112a58b312SMartin Matuska	mov	v17.d[1],v19.d[0]
14122a58b312SMartin Matuska	bic	w15,w10,w8
14132a58b312SMartin Matuska	eor	w11,w8,w8,ror#5
14142a58b312SMartin Matuska	add	w4,w4,w14
14152a58b312SMartin Matuska	add	v1.4s,v1.4s,v17.4s
14162a58b312SMartin Matuska	orr	w12,w12,w15
14172a58b312SMartin Matuska	eor	w11,w11,w8,ror#19
14182a58b312SMartin Matuska	eor	w15,w4,w4,ror#11
14192a58b312SMartin Matuska	add	v4.4s,v4.4s,v1.4s
14202a58b312SMartin Matuska	add	w3,w3,w12
14212a58b312SMartin Matuska	ror	w11,w11,#6
14222a58b312SMartin Matuska	eor	w14,w4,w5
14232a58b312SMartin Matuska	eor	w15,w15,w4,ror#20
14242a58b312SMartin Matuska	add	w3,w3,w11
14252a58b312SMartin Matuska	ldr	w12,[sp,#32]
14262a58b312SMartin Matuska	and	w13,w13,w14
14272a58b312SMartin Matuska	ror	w15,w15,#2
14282a58b312SMartin Matuska	add	w7,w7,w3
14292a58b312SMartin Matuska	eor	w13,w13,w5
14302a58b312SMartin Matuska	st1	{v4.4s},[x17], #16
14312a58b312SMartin Matuska	ext	v4.16b,v2.16b,v3.16b,#4
14322a58b312SMartin Matuska	add	w10,w10,w12
14332a58b312SMartin Matuska	add	w3,w3,w15
14342a58b312SMartin Matuska	and	w12,w8,w7
14352a58b312SMartin Matuska	bic	w15,w9,w7
14362a58b312SMartin Matuska	ext	v7.16b,v0.16b,v1.16b,#4
14372a58b312SMartin Matuska	eor	w11,w7,w7,ror#5
14382a58b312SMartin Matuska	add	w3,w3,w13
14392a58b312SMartin Matuska	mov	d19,v1.d[1]
14402a58b312SMartin Matuska	orr	w12,w12,w15
14412a58b312SMartin Matuska	eor	w11,w11,w7,ror#19
14422a58b312SMartin Matuska	ushr	v6.4s,v4.4s,#7
14432a58b312SMartin Matuska	eor	w15,w3,w3,ror#11
14442a58b312SMartin Matuska	ushr	v5.4s,v4.4s,#3
14452a58b312SMartin Matuska	add	w10,w10,w12
14462a58b312SMartin Matuska	add	v2.4s,v2.4s,v7.4s
14472a58b312SMartin Matuska	ror	w11,w11,#6
14482a58b312SMartin Matuska	sli	v6.4s,v4.4s,#25
14492a58b312SMartin Matuska	eor	w13,w3,w4
14502a58b312SMartin Matuska	eor	w15,w15,w3,ror#20
14512a58b312SMartin Matuska	ushr	v7.4s,v4.4s,#18
14522a58b312SMartin Matuska	add	w10,w10,w11
14532a58b312SMartin Matuska	ldr	w12,[sp,#36]
14542a58b312SMartin Matuska	and	w14,w14,w13
14552a58b312SMartin Matuska	eor	v5.16b,v5.16b,v6.16b
14562a58b312SMartin Matuska	ror	w15,w15,#2
14572a58b312SMartin Matuska	add	w6,w6,w10
14582a58b312SMartin Matuska	sli	v7.4s,v4.4s,#14
14592a58b312SMartin Matuska	eor	w14,w14,w4
14602a58b312SMartin Matuska	ushr	v16.4s,v19.4s,#17
14612a58b312SMartin Matuska	add	w9,w9,w12
14622a58b312SMartin Matuska	add	w10,w10,w15
14632a58b312SMartin Matuska	and	w12,w7,w6
14642a58b312SMartin Matuska	eor	v5.16b,v5.16b,v7.16b
14652a58b312SMartin Matuska	bic	w15,w8,w6
14662a58b312SMartin Matuska	eor	w11,w6,w6,ror#5
14672a58b312SMartin Matuska	sli	v16.4s,v19.4s,#15
14682a58b312SMartin Matuska	add	w10,w10,w14
14692a58b312SMartin Matuska	orr	w12,w12,w15
14702a58b312SMartin Matuska	ushr	v17.4s,v19.4s,#10
14712a58b312SMartin Matuska	eor	w11,w11,w6,ror#19
14722a58b312SMartin Matuska	eor	w15,w10,w10,ror#11
14732a58b312SMartin Matuska	ushr	v7.4s,v19.4s,#19
14742a58b312SMartin Matuska	add	w9,w9,w12
14752a58b312SMartin Matuska	ror	w11,w11,#6
14762a58b312SMartin Matuska	add	v2.4s,v2.4s,v5.4s
14772a58b312SMartin Matuska	eor	w14,w10,w3
14782a58b312SMartin Matuska	eor	w15,w15,w10,ror#20
14792a58b312SMartin Matuska	sli	v7.4s,v19.4s,#13
14802a58b312SMartin Matuska	add	w9,w9,w11
14812a58b312SMartin Matuska	ldr	w12,[sp,#40]
14822a58b312SMartin Matuska	and	w13,w13,w14
14832a58b312SMartin Matuska	eor	v17.16b,v17.16b,v16.16b
14842a58b312SMartin Matuska	ror	w15,w15,#2
14852a58b312SMartin Matuska	add	w5,w5,w9
14862a58b312SMartin Matuska	eor	w13,w13,w3
14872a58b312SMartin Matuska	eor	v17.16b,v17.16b,v7.16b
14882a58b312SMartin Matuska	add	w8,w8,w12
14892a58b312SMartin Matuska	add	w9,w9,w15
14902a58b312SMartin Matuska	and	w12,w6,w5
14912a58b312SMartin Matuska	add	v2.4s,v2.4s,v17.4s
14922a58b312SMartin Matuska	bic	w15,w7,w5
14932a58b312SMartin Matuska	eor	w11,w5,w5,ror#5
14942a58b312SMartin Matuska	add	w9,w9,w13
14952a58b312SMartin Matuska	ushr	v18.4s,v2.4s,#17
14962a58b312SMartin Matuska	orr	w12,w12,w15
14972a58b312SMartin Matuska	ushr	v19.4s,v2.4s,#10
14982a58b312SMartin Matuska	eor	w11,w11,w5,ror#19
14992a58b312SMartin Matuska	eor	w15,w9,w9,ror#11
15002a58b312SMartin Matuska	sli	v18.4s,v2.4s,#15
15012a58b312SMartin Matuska	add	w8,w8,w12
15022a58b312SMartin Matuska	ushr	v17.4s,v2.4s,#19
15032a58b312SMartin Matuska	ror	w11,w11,#6
15042a58b312SMartin Matuska	eor	w13,w9,w10
15052a58b312SMartin Matuska	eor	v19.16b,v19.16b,v18.16b
15062a58b312SMartin Matuska	eor	w15,w15,w9,ror#20
15072a58b312SMartin Matuska	add	w8,w8,w11
15082a58b312SMartin Matuska	sli	v17.4s,v2.4s,#13
15092a58b312SMartin Matuska	ldr	w12,[sp,#44]
15102a58b312SMartin Matuska	and	w14,w14,w13
15112a58b312SMartin Matuska	ror	w15,w15,#2
15122a58b312SMartin Matuska	ld1	{v4.4s},[x16], #16
15132a58b312SMartin Matuska	add	w4,w4,w8
15142a58b312SMartin Matuska	eor	v19.16b,v19.16b,v17.16b
15152a58b312SMartin Matuska	eor	w14,w14,w10
15162a58b312SMartin Matuska	eor	v17.16b,v17.16b,v17.16b
15172a58b312SMartin Matuska	add	w7,w7,w12
15182a58b312SMartin Matuska	add	w8,w8,w15
15192a58b312SMartin Matuska	and	w12,w5,w4
15202a58b312SMartin Matuska	mov	v17.d[1],v19.d[0]
15212a58b312SMartin Matuska	bic	w15,w6,w4
15222a58b312SMartin Matuska	eor	w11,w4,w4,ror#5
15232a58b312SMartin Matuska	add	w8,w8,w14
15242a58b312SMartin Matuska	add	v2.4s,v2.4s,v17.4s
15252a58b312SMartin Matuska	orr	w12,w12,w15
15262a58b312SMartin Matuska	eor	w11,w11,w4,ror#19
15272a58b312SMartin Matuska	eor	w15,w8,w8,ror#11
15282a58b312SMartin Matuska	add	v4.4s,v4.4s,v2.4s
15292a58b312SMartin Matuska	add	w7,w7,w12
15302a58b312SMartin Matuska	ror	w11,w11,#6
15312a58b312SMartin Matuska	eor	w14,w8,w9
15322a58b312SMartin Matuska	eor	w15,w15,w8,ror#20
15332a58b312SMartin Matuska	add	w7,w7,w11
15342a58b312SMartin Matuska	ldr	w12,[sp,#48]
15352a58b312SMartin Matuska	and	w13,w13,w14
15362a58b312SMartin Matuska	ror	w15,w15,#2
15372a58b312SMartin Matuska	add	w3,w3,w7
15382a58b312SMartin Matuska	eor	w13,w13,w9
15392a58b312SMartin Matuska	st1	{v4.4s},[x17], #16
15402a58b312SMartin Matuska	ext	v4.16b,v3.16b,v0.16b,#4
15412a58b312SMartin Matuska	add	w6,w6,w12
15422a58b312SMartin Matuska	add	w7,w7,w15
15432a58b312SMartin Matuska	and	w12,w4,w3
15442a58b312SMartin Matuska	bic	w15,w5,w3
15452a58b312SMartin Matuska	ext	v7.16b,v1.16b,v2.16b,#4
15462a58b312SMartin Matuska	eor	w11,w3,w3,ror#5
15472a58b312SMartin Matuska	add	w7,w7,w13
15482a58b312SMartin Matuska	mov	d19,v2.d[1]
15492a58b312SMartin Matuska	orr	w12,w12,w15
15502a58b312SMartin Matuska	eor	w11,w11,w3,ror#19
15512a58b312SMartin Matuska	ushr	v6.4s,v4.4s,#7
15522a58b312SMartin Matuska	eor	w15,w7,w7,ror#11
15532a58b312SMartin Matuska	ushr	v5.4s,v4.4s,#3
15542a58b312SMartin Matuska	add	w6,w6,w12
15552a58b312SMartin Matuska	add	v3.4s,v3.4s,v7.4s
15562a58b312SMartin Matuska	ror	w11,w11,#6
15572a58b312SMartin Matuska	sli	v6.4s,v4.4s,#25
15582a58b312SMartin Matuska	eor	w13,w7,w8
15592a58b312SMartin Matuska	eor	w15,w15,w7,ror#20
15602a58b312SMartin Matuska	ushr	v7.4s,v4.4s,#18
15612a58b312SMartin Matuska	add	w6,w6,w11
15622a58b312SMartin Matuska	ldr	w12,[sp,#52]
15632a58b312SMartin Matuska	and	w14,w14,w13
15642a58b312SMartin Matuska	eor	v5.16b,v5.16b,v6.16b
15652a58b312SMartin Matuska	ror	w15,w15,#2
15662a58b312SMartin Matuska	add	w10,w10,w6
15672a58b312SMartin Matuska	sli	v7.4s,v4.4s,#14
15682a58b312SMartin Matuska	eor	w14,w14,w8
15692a58b312SMartin Matuska	ushr	v16.4s,v19.4s,#17
15702a58b312SMartin Matuska	add	w5,w5,w12
15712a58b312SMartin Matuska	add	w6,w6,w15
15722a58b312SMartin Matuska	and	w12,w3,w10
15732a58b312SMartin Matuska	eor	v5.16b,v5.16b,v7.16b
15742a58b312SMartin Matuska	bic	w15,w4,w10
15752a58b312SMartin Matuska	eor	w11,w10,w10,ror#5
15762a58b312SMartin Matuska	sli	v16.4s,v19.4s,#15
15772a58b312SMartin Matuska	add	w6,w6,w14
15782a58b312SMartin Matuska	orr	w12,w12,w15
15792a58b312SMartin Matuska	ushr	v17.4s,v19.4s,#10
15802a58b312SMartin Matuska	eor	w11,w11,w10,ror#19
15812a58b312SMartin Matuska	eor	w15,w6,w6,ror#11
15822a58b312SMartin Matuska	ushr	v7.4s,v19.4s,#19
15832a58b312SMartin Matuska	add	w5,w5,w12
15842a58b312SMartin Matuska	ror	w11,w11,#6
15852a58b312SMartin Matuska	add	v3.4s,v3.4s,v5.4s
15862a58b312SMartin Matuska	eor	w14,w6,w7
15872a58b312SMartin Matuska	eor	w15,w15,w6,ror#20
15882a58b312SMartin Matuska	sli	v7.4s,v19.4s,#13
15892a58b312SMartin Matuska	add	w5,w5,w11
15902a58b312SMartin Matuska	ldr	w12,[sp,#56]
15912a58b312SMartin Matuska	and	w13,w13,w14
15922a58b312SMartin Matuska	eor	v17.16b,v17.16b,v16.16b
15932a58b312SMartin Matuska	ror	w15,w15,#2
15942a58b312SMartin Matuska	add	w9,w9,w5
15952a58b312SMartin Matuska	eor	w13,w13,w7
15962a58b312SMartin Matuska	eor	v17.16b,v17.16b,v7.16b
15972a58b312SMartin Matuska	add	w4,w4,w12
15982a58b312SMartin Matuska	add	w5,w5,w15
15992a58b312SMartin Matuska	and	w12,w10,w9
16002a58b312SMartin Matuska	add	v3.4s,v3.4s,v17.4s
16012a58b312SMartin Matuska	bic	w15,w3,w9
16022a58b312SMartin Matuska	eor	w11,w9,w9,ror#5
16032a58b312SMartin Matuska	add	w5,w5,w13
16042a58b312SMartin Matuska	ushr	v18.4s,v3.4s,#17
16052a58b312SMartin Matuska	orr	w12,w12,w15
16062a58b312SMartin Matuska	ushr	v19.4s,v3.4s,#10
16072a58b312SMartin Matuska	eor	w11,w11,w9,ror#19
16082a58b312SMartin Matuska	eor	w15,w5,w5,ror#11
16092a58b312SMartin Matuska	sli	v18.4s,v3.4s,#15
16102a58b312SMartin Matuska	add	w4,w4,w12
16112a58b312SMartin Matuska	ushr	v17.4s,v3.4s,#19
16122a58b312SMartin Matuska	ror	w11,w11,#6
16132a58b312SMartin Matuska	eor	w13,w5,w6
16142a58b312SMartin Matuska	eor	v19.16b,v19.16b,v18.16b
16152a58b312SMartin Matuska	eor	w15,w15,w5,ror#20
16162a58b312SMartin Matuska	add	w4,w4,w11
16172a58b312SMartin Matuska	sli	v17.4s,v3.4s,#13
16182a58b312SMartin Matuska	ldr	w12,[sp,#60]
16192a58b312SMartin Matuska	and	w14,w14,w13
16202a58b312SMartin Matuska	ror	w15,w15,#2
16212a58b312SMartin Matuska	ld1	{v4.4s},[x16], #16
16222a58b312SMartin Matuska	add	w8,w8,w4
16232a58b312SMartin Matuska	eor	v19.16b,v19.16b,v17.16b
16242a58b312SMartin Matuska	eor	w14,w14,w6
16252a58b312SMartin Matuska	eor	v17.16b,v17.16b,v17.16b
16262a58b312SMartin Matuska	add	w3,w3,w12
16272a58b312SMartin Matuska	add	w4,w4,w15
16282a58b312SMartin Matuska	and	w12,w9,w8
16292a58b312SMartin Matuska	mov	v17.d[1],v19.d[0]
16302a58b312SMartin Matuska	bic	w15,w10,w8
16312a58b312SMartin Matuska	eor	w11,w8,w8,ror#5
16322a58b312SMartin Matuska	add	w4,w4,w14
16332a58b312SMartin Matuska	add	v3.4s,v3.4s,v17.4s
16342a58b312SMartin Matuska	orr	w12,w12,w15
16352a58b312SMartin Matuska	eor	w11,w11,w8,ror#19
16362a58b312SMartin Matuska	eor	w15,w4,w4,ror#11
16372a58b312SMartin Matuska	add	v4.4s,v4.4s,v3.4s
16382a58b312SMartin Matuska	add	w3,w3,w12
16392a58b312SMartin Matuska	ror	w11,w11,#6
16402a58b312SMartin Matuska	eor	w14,w4,w5
16412a58b312SMartin Matuska	eor	w15,w15,w4,ror#20
16422a58b312SMartin Matuska	add	w3,w3,w11
16432a58b312SMartin Matuska	ldr	w12,[x16]
16442a58b312SMartin Matuska	and	w13,w13,w14
16452a58b312SMartin Matuska	ror	w15,w15,#2
16462a58b312SMartin Matuska	add	w7,w7,w3
16472a58b312SMartin Matuska	eor	w13,w13,w5
16482a58b312SMartin Matuska	st1	{v4.4s},[x17], #16
16492a58b312SMartin Matuska	cmp	w12,#0				// check for K256 terminator
16502a58b312SMartin Matuska	ldr	w12,[sp,#0]
16512a58b312SMartin Matuska	sub	x17,x17,#64
16522a58b312SMartin Matuska	bne	.L_00_48
16532a58b312SMartin Matuska
16542a58b312SMartin Matuska	sub	x16,x16,#256		// rewind x16
16552a58b312SMartin Matuska	cmp	x1,x2
16562a58b312SMartin Matuska	mov	x17, #64
16572a58b312SMartin Matuska	csel	x17, x17, xzr, eq
16582a58b312SMartin Matuska	sub	x1,x1,x17			// avoid SEGV
16592a58b312SMartin Matuska	mov	x17,sp
16602a58b312SMartin Matuska	add	w10,w10,w12
16612a58b312SMartin Matuska	add	w3,w3,w15
16622a58b312SMartin Matuska	and	w12,w8,w7
16632a58b312SMartin Matuska	ld1	{v0.16b},[x1],#16
16642a58b312SMartin Matuska	bic	w15,w9,w7
16652a58b312SMartin Matuska	eor	w11,w7,w7,ror#5
16662a58b312SMartin Matuska	ld1	{v4.4s},[x16],#16
16672a58b312SMartin Matuska	add	w3,w3,w13
16682a58b312SMartin Matuska	orr	w12,w12,w15
16692a58b312SMartin Matuska	eor	w11,w11,w7,ror#19
16702a58b312SMartin Matuska	eor	w15,w3,w3,ror#11
16712a58b312SMartin Matuska	rev32	v0.16b,v0.16b
16722a58b312SMartin Matuska	add	w10,w10,w12
16732a58b312SMartin Matuska	ror	w11,w11,#6
16742a58b312SMartin Matuska	eor	w13,w3,w4
16752a58b312SMartin Matuska	eor	w15,w15,w3,ror#20
16762a58b312SMartin Matuska	add	v4.4s,v4.4s,v0.4s
16772a58b312SMartin Matuska	add	w10,w10,w11
16782a58b312SMartin Matuska	ldr	w12,[sp,#4]
16792a58b312SMartin Matuska	and	w14,w14,w13
16802a58b312SMartin Matuska	ror	w15,w15,#2
16812a58b312SMartin Matuska	add	w6,w6,w10
16822a58b312SMartin Matuska	eor	w14,w14,w4
16832a58b312SMartin Matuska	add	w9,w9,w12
16842a58b312SMartin Matuska	add	w10,w10,w15
16852a58b312SMartin Matuska	and	w12,w7,w6
16862a58b312SMartin Matuska	bic	w15,w8,w6
16872a58b312SMartin Matuska	eor	w11,w6,w6,ror#5
16882a58b312SMartin Matuska	add	w10,w10,w14
16892a58b312SMartin Matuska	orr	w12,w12,w15
16902a58b312SMartin Matuska	eor	w11,w11,w6,ror#19
16912a58b312SMartin Matuska	eor	w15,w10,w10,ror#11
16922a58b312SMartin Matuska	add	w9,w9,w12
16932a58b312SMartin Matuska	ror	w11,w11,#6
16942a58b312SMartin Matuska	eor	w14,w10,w3
16952a58b312SMartin Matuska	eor	w15,w15,w10,ror#20
16962a58b312SMartin Matuska	add	w9,w9,w11
16972a58b312SMartin Matuska	ldr	w12,[sp,#8]
16982a58b312SMartin Matuska	and	w13,w13,w14
16992a58b312SMartin Matuska	ror	w15,w15,#2
17002a58b312SMartin Matuska	add	w5,w5,w9
17012a58b312SMartin Matuska	eor	w13,w13,w3
17022a58b312SMartin Matuska	add	w8,w8,w12
17032a58b312SMartin Matuska	add	w9,w9,w15
17042a58b312SMartin Matuska	and	w12,w6,w5
17052a58b312SMartin Matuska	bic	w15,w7,w5
17062a58b312SMartin Matuska	eor	w11,w5,w5,ror#5
17072a58b312SMartin Matuska	add	w9,w9,w13
17082a58b312SMartin Matuska	orr	w12,w12,w15
17092a58b312SMartin Matuska	eor	w11,w11,w5,ror#19
17102a58b312SMartin Matuska	eor	w15,w9,w9,ror#11
17112a58b312SMartin Matuska	add	w8,w8,w12
17122a58b312SMartin Matuska	ror	w11,w11,#6
17132a58b312SMartin Matuska	eor	w13,w9,w10
17142a58b312SMartin Matuska	eor	w15,w15,w9,ror#20
17152a58b312SMartin Matuska	add	w8,w8,w11
17162a58b312SMartin Matuska	ldr	w12,[sp,#12]
17172a58b312SMartin Matuska	and	w14,w14,w13
17182a58b312SMartin Matuska	ror	w15,w15,#2
17192a58b312SMartin Matuska	add	w4,w4,w8
17202a58b312SMartin Matuska	eor	w14,w14,w10
17212a58b312SMartin Matuska	add	w7,w7,w12
17222a58b312SMartin Matuska	add	w8,w8,w15
17232a58b312SMartin Matuska	and	w12,w5,w4
17242a58b312SMartin Matuska	bic	w15,w6,w4
17252a58b312SMartin Matuska	eor	w11,w4,w4,ror#5
17262a58b312SMartin Matuska	add	w8,w8,w14
17272a58b312SMartin Matuska	orr	w12,w12,w15
17282a58b312SMartin Matuska	eor	w11,w11,w4,ror#19
17292a58b312SMartin Matuska	eor	w15,w8,w8,ror#11
17302a58b312SMartin Matuska	add	w7,w7,w12
17312a58b312SMartin Matuska	ror	w11,w11,#6
17322a58b312SMartin Matuska	eor	w14,w8,w9
17332a58b312SMartin Matuska	eor	w15,w15,w8,ror#20
17342a58b312SMartin Matuska	add	w7,w7,w11
17352a58b312SMartin Matuska	ldr	w12,[sp,#16]
17362a58b312SMartin Matuska	and	w13,w13,w14
17372a58b312SMartin Matuska	ror	w15,w15,#2
17382a58b312SMartin Matuska	add	w3,w3,w7
17392a58b312SMartin Matuska	eor	w13,w13,w9
17402a58b312SMartin Matuska	st1	{v4.4s},[x17], #16
17412a58b312SMartin Matuska	add	w6,w6,w12
17422a58b312SMartin Matuska	add	w7,w7,w15
17432a58b312SMartin Matuska	and	w12,w4,w3
17442a58b312SMartin Matuska	ld1	{v1.16b},[x1],#16
17452a58b312SMartin Matuska	bic	w15,w5,w3
17462a58b312SMartin Matuska	eor	w11,w3,w3,ror#5
17472a58b312SMartin Matuska	ld1	{v4.4s},[x16],#16
17482a58b312SMartin Matuska	add	w7,w7,w13
17492a58b312SMartin Matuska	orr	w12,w12,w15
17502a58b312SMartin Matuska	eor	w11,w11,w3,ror#19
17512a58b312SMartin Matuska	eor	w15,w7,w7,ror#11
17522a58b312SMartin Matuska	rev32	v1.16b,v1.16b
17532a58b312SMartin Matuska	add	w6,w6,w12
17542a58b312SMartin Matuska	ror	w11,w11,#6
17552a58b312SMartin Matuska	eor	w13,w7,w8
17562a58b312SMartin Matuska	eor	w15,w15,w7,ror#20
17572a58b312SMartin Matuska	add	v4.4s,v4.4s,v1.4s
17582a58b312SMartin Matuska	add	w6,w6,w11
17592a58b312SMartin Matuska	ldr	w12,[sp,#20]
17602a58b312SMartin Matuska	and	w14,w14,w13
17612a58b312SMartin Matuska	ror	w15,w15,#2
17622a58b312SMartin Matuska	add	w10,w10,w6
17632a58b312SMartin Matuska	eor	w14,w14,w8
17642a58b312SMartin Matuska	add	w5,w5,w12
17652a58b312SMartin Matuska	add	w6,w6,w15
17662a58b312SMartin Matuska	and	w12,w3,w10
17672a58b312SMartin Matuska	bic	w15,w4,w10
17682a58b312SMartin Matuska	eor	w11,w10,w10,ror#5
17692a58b312SMartin Matuska	add	w6,w6,w14
17702a58b312SMartin Matuska	orr	w12,w12,w15
17712a58b312SMartin Matuska	eor	w11,w11,w10,ror#19
17722a58b312SMartin Matuska	eor	w15,w6,w6,ror#11
17732a58b312SMartin Matuska	add	w5,w5,w12
17742a58b312SMartin Matuska	ror	w11,w11,#6
17752a58b312SMartin Matuska	eor	w14,w6,w7
17762a58b312SMartin Matuska	eor	w15,w15,w6,ror#20
17772a58b312SMartin Matuska	add	w5,w5,w11
17782a58b312SMartin Matuska	ldr	w12,[sp,#24]
17792a58b312SMartin Matuska	and	w13,w13,w14
17802a58b312SMartin Matuska	ror	w15,w15,#2
17812a58b312SMartin Matuska	add	w9,w9,w5
17822a58b312SMartin Matuska	eor	w13,w13,w7
17832a58b312SMartin Matuska	add	w4,w4,w12
17842a58b312SMartin Matuska	add	w5,w5,w15
17852a58b312SMartin Matuska	and	w12,w10,w9
17862a58b312SMartin Matuska	bic	w15,w3,w9
17872a58b312SMartin Matuska	eor	w11,w9,w9,ror#5
17882a58b312SMartin Matuska	add	w5,w5,w13
17892a58b312SMartin Matuska	orr	w12,w12,w15
17902a58b312SMartin Matuska	eor	w11,w11,w9,ror#19
17912a58b312SMartin Matuska	eor	w15,w5,w5,ror#11
17922a58b312SMartin Matuska	add	w4,w4,w12
17932a58b312SMartin Matuska	ror	w11,w11,#6
17942a58b312SMartin Matuska	eor	w13,w5,w6
17952a58b312SMartin Matuska	eor	w15,w15,w5,ror#20
17962a58b312SMartin Matuska	add	w4,w4,w11
17972a58b312SMartin Matuska	ldr	w12,[sp,#28]
17982a58b312SMartin Matuska	and	w14,w14,w13
17992a58b312SMartin Matuska	ror	w15,w15,#2
18002a58b312SMartin Matuska	add	w8,w8,w4
18012a58b312SMartin Matuska	eor	w14,w14,w6
18022a58b312SMartin Matuska	add	w3,w3,w12
18032a58b312SMartin Matuska	add	w4,w4,w15
18042a58b312SMartin Matuska	and	w12,w9,w8
18052a58b312SMartin Matuska	bic	w15,w10,w8
18062a58b312SMartin Matuska	eor	w11,w8,w8,ror#5
18072a58b312SMartin Matuska	add	w4,w4,w14
18082a58b312SMartin Matuska	orr	w12,w12,w15
18092a58b312SMartin Matuska	eor	w11,w11,w8,ror#19
18102a58b312SMartin Matuska	eor	w15,w4,w4,ror#11
18112a58b312SMartin Matuska	add	w3,w3,w12
18122a58b312SMartin Matuska	ror	w11,w11,#6
18132a58b312SMartin Matuska	eor	w14,w4,w5
18142a58b312SMartin Matuska	eor	w15,w15,w4,ror#20
18152a58b312SMartin Matuska	add	w3,w3,w11
18162a58b312SMartin Matuska	ldr	w12,[sp,#32]
18172a58b312SMartin Matuska	and	w13,w13,w14
18182a58b312SMartin Matuska	ror	w15,w15,#2
18192a58b312SMartin Matuska	add	w7,w7,w3
18202a58b312SMartin Matuska	eor	w13,w13,w5
18212a58b312SMartin Matuska	st1	{v4.4s},[x17], #16
18222a58b312SMartin Matuska	add	w10,w10,w12
18232a58b312SMartin Matuska	add	w3,w3,w15
18242a58b312SMartin Matuska	and	w12,w8,w7
18252a58b312SMartin Matuska	ld1	{v2.16b},[x1],#16
18262a58b312SMartin Matuska	bic	w15,w9,w7
18272a58b312SMartin Matuska	eor	w11,w7,w7,ror#5
18282a58b312SMartin Matuska	ld1	{v4.4s},[x16],#16
18292a58b312SMartin Matuska	add	w3,w3,w13
18302a58b312SMartin Matuska	orr	w12,w12,w15
18312a58b312SMartin Matuska	eor	w11,w11,w7,ror#19
18322a58b312SMartin Matuska	eor	w15,w3,w3,ror#11
18332a58b312SMartin Matuska	rev32	v2.16b,v2.16b
18342a58b312SMartin Matuska	add	w10,w10,w12
18352a58b312SMartin Matuska	ror	w11,w11,#6
18362a58b312SMartin Matuska	eor	w13,w3,w4
18372a58b312SMartin Matuska	eor	w15,w15,w3,ror#20
18382a58b312SMartin Matuska	add	v4.4s,v4.4s,v2.4s
18392a58b312SMartin Matuska	add	w10,w10,w11
18402a58b312SMartin Matuska	ldr	w12,[sp,#36]
18412a58b312SMartin Matuska	and	w14,w14,w13
18422a58b312SMartin Matuska	ror	w15,w15,#2
18432a58b312SMartin Matuska	add	w6,w6,w10
18442a58b312SMartin Matuska	eor	w14,w14,w4
18452a58b312SMartin Matuska	add	w9,w9,w12
18462a58b312SMartin Matuska	add	w10,w10,w15
18472a58b312SMartin Matuska	and	w12,w7,w6
18482a58b312SMartin Matuska	bic	w15,w8,w6
18492a58b312SMartin Matuska	eor	w11,w6,w6,ror#5
18502a58b312SMartin Matuska	add	w10,w10,w14
18512a58b312SMartin Matuska	orr	w12,w12,w15
18522a58b312SMartin Matuska	eor	w11,w11,w6,ror#19
18532a58b312SMartin Matuska	eor	w15,w10,w10,ror#11
18542a58b312SMartin Matuska	add	w9,w9,w12
18552a58b312SMartin Matuska	ror	w11,w11,#6
18562a58b312SMartin Matuska	eor	w14,w10,w3
18572a58b312SMartin Matuska	eor	w15,w15,w10,ror#20
18582a58b312SMartin Matuska	add	w9,w9,w11
18592a58b312SMartin Matuska	ldr	w12,[sp,#40]
18602a58b312SMartin Matuska	and	w13,w13,w14
18612a58b312SMartin Matuska	ror	w15,w15,#2
18622a58b312SMartin Matuska	add	w5,w5,w9
18632a58b312SMartin Matuska	eor	w13,w13,w3
18642a58b312SMartin Matuska	add	w8,w8,w12
18652a58b312SMartin Matuska	add	w9,w9,w15
18662a58b312SMartin Matuska	and	w12,w6,w5
18672a58b312SMartin Matuska	bic	w15,w7,w5
18682a58b312SMartin Matuska	eor	w11,w5,w5,ror#5
18692a58b312SMartin Matuska	add	w9,w9,w13
18702a58b312SMartin Matuska	orr	w12,w12,w15
18712a58b312SMartin Matuska	eor	w11,w11,w5,ror#19
18722a58b312SMartin Matuska	eor	w15,w9,w9,ror#11
18732a58b312SMartin Matuska	add	w8,w8,w12
18742a58b312SMartin Matuska	ror	w11,w11,#6
18752a58b312SMartin Matuska	eor	w13,w9,w10
18762a58b312SMartin Matuska	eor	w15,w15,w9,ror#20
18772a58b312SMartin Matuska	add	w8,w8,w11
18782a58b312SMartin Matuska	ldr	w12,[sp,#44]
18792a58b312SMartin Matuska	and	w14,w14,w13
18802a58b312SMartin Matuska	ror	w15,w15,#2
18812a58b312SMartin Matuska	add	w4,w4,w8
18822a58b312SMartin Matuska	eor	w14,w14,w10
18832a58b312SMartin Matuska	add	w7,w7,w12
18842a58b312SMartin Matuska	add	w8,w8,w15
18852a58b312SMartin Matuska	and	w12,w5,w4
18862a58b312SMartin Matuska	bic	w15,w6,w4
18872a58b312SMartin Matuska	eor	w11,w4,w4,ror#5
18882a58b312SMartin Matuska	add	w8,w8,w14
18892a58b312SMartin Matuska	orr	w12,w12,w15
18902a58b312SMartin Matuska	eor	w11,w11,w4,ror#19
18912a58b312SMartin Matuska	eor	w15,w8,w8,ror#11
18922a58b312SMartin Matuska	add	w7,w7,w12
18932a58b312SMartin Matuska	ror	w11,w11,#6
18942a58b312SMartin Matuska	eor	w14,w8,w9
18952a58b312SMartin Matuska	eor	w15,w15,w8,ror#20
18962a58b312SMartin Matuska	add	w7,w7,w11
18972a58b312SMartin Matuska	ldr	w12,[sp,#48]
18982a58b312SMartin Matuska	and	w13,w13,w14
18992a58b312SMartin Matuska	ror	w15,w15,#2
19002a58b312SMartin Matuska	add	w3,w3,w7
19012a58b312SMartin Matuska	eor	w13,w13,w9
19022a58b312SMartin Matuska	st1	{v4.4s},[x17], #16
19032a58b312SMartin Matuska	add	w6,w6,w12
19042a58b312SMartin Matuska	add	w7,w7,w15
19052a58b312SMartin Matuska	and	w12,w4,w3
19062a58b312SMartin Matuska	ld1	{v3.16b},[x1],#16
19072a58b312SMartin Matuska	bic	w15,w5,w3
19082a58b312SMartin Matuska	eor	w11,w3,w3,ror#5
19092a58b312SMartin Matuska	ld1	{v4.4s},[x16],#16
19102a58b312SMartin Matuska	add	w7,w7,w13
19112a58b312SMartin Matuska	orr	w12,w12,w15
19122a58b312SMartin Matuska	eor	w11,w11,w3,ror#19
19132a58b312SMartin Matuska	eor	w15,w7,w7,ror#11
19142a58b312SMartin Matuska	rev32	v3.16b,v3.16b
19152a58b312SMartin Matuska	add	w6,w6,w12
19162a58b312SMartin Matuska	ror	w11,w11,#6
19172a58b312SMartin Matuska	eor	w13,w7,w8
19182a58b312SMartin Matuska	eor	w15,w15,w7,ror#20
19192a58b312SMartin Matuska	add	v4.4s,v4.4s,v3.4s
19202a58b312SMartin Matuska	add	w6,w6,w11
19212a58b312SMartin Matuska	ldr	w12,[sp,#52]
19222a58b312SMartin Matuska	and	w14,w14,w13
19232a58b312SMartin Matuska	ror	w15,w15,#2
19242a58b312SMartin Matuska	add	w10,w10,w6
19252a58b312SMartin Matuska	eor	w14,w14,w8
19262a58b312SMartin Matuska	add	w5,w5,w12
19272a58b312SMartin Matuska	add	w6,w6,w15
19282a58b312SMartin Matuska	and	w12,w3,w10
19292a58b312SMartin Matuska	bic	w15,w4,w10
19302a58b312SMartin Matuska	eor	w11,w10,w10,ror#5
19312a58b312SMartin Matuska	add	w6,w6,w14
19322a58b312SMartin Matuska	orr	w12,w12,w15
19332a58b312SMartin Matuska	eor	w11,w11,w10,ror#19
19342a58b312SMartin Matuska	eor	w15,w6,w6,ror#11
19352a58b312SMartin Matuska	add	w5,w5,w12
19362a58b312SMartin Matuska	ror	w11,w11,#6
19372a58b312SMartin Matuska	eor	w14,w6,w7
19382a58b312SMartin Matuska	eor	w15,w15,w6,ror#20
19392a58b312SMartin Matuska	add	w5,w5,w11
19402a58b312SMartin Matuska	ldr	w12,[sp,#56]
19412a58b312SMartin Matuska	and	w13,w13,w14
19422a58b312SMartin Matuska	ror	w15,w15,#2
19432a58b312SMartin Matuska	add	w9,w9,w5
19442a58b312SMartin Matuska	eor	w13,w13,w7
19452a58b312SMartin Matuska	add	w4,w4,w12
19462a58b312SMartin Matuska	add	w5,w5,w15
19472a58b312SMartin Matuska	and	w12,w10,w9
19482a58b312SMartin Matuska	bic	w15,w3,w9
19492a58b312SMartin Matuska	eor	w11,w9,w9,ror#5
19502a58b312SMartin Matuska	add	w5,w5,w13
19512a58b312SMartin Matuska	orr	w12,w12,w15
19522a58b312SMartin Matuska	eor	w11,w11,w9,ror#19
19532a58b312SMartin Matuska	eor	w15,w5,w5,ror#11
19542a58b312SMartin Matuska	add	w4,w4,w12
19552a58b312SMartin Matuska	ror	w11,w11,#6
19562a58b312SMartin Matuska	eor	w13,w5,w6
19572a58b312SMartin Matuska	eor	w15,w15,w5,ror#20
19582a58b312SMartin Matuska	add	w4,w4,w11
19592a58b312SMartin Matuska	ldr	w12,[sp,#60]
19602a58b312SMartin Matuska	and	w14,w14,w13
19612a58b312SMartin Matuska	ror	w15,w15,#2
19622a58b312SMartin Matuska	add	w8,w8,w4
19632a58b312SMartin Matuska	eor	w14,w14,w6
19642a58b312SMartin Matuska	add	w3,w3,w12
19652a58b312SMartin Matuska	add	w4,w4,w15
19662a58b312SMartin Matuska	and	w12,w9,w8
19672a58b312SMartin Matuska	bic	w15,w10,w8
19682a58b312SMartin Matuska	eor	w11,w8,w8,ror#5
19692a58b312SMartin Matuska	add	w4,w4,w14
19702a58b312SMartin Matuska	orr	w12,w12,w15
19712a58b312SMartin Matuska	eor	w11,w11,w8,ror#19
19722a58b312SMartin Matuska	eor	w15,w4,w4,ror#11
19732a58b312SMartin Matuska	add	w3,w3,w12
19742a58b312SMartin Matuska	ror	w11,w11,#6
19752a58b312SMartin Matuska	eor	w14,w4,w5
19762a58b312SMartin Matuska	eor	w15,w15,w4,ror#20
19772a58b312SMartin Matuska	add	w3,w3,w11
19782a58b312SMartin Matuska	and	w13,w13,w14
19792a58b312SMartin Matuska	ror	w15,w15,#2
19802a58b312SMartin Matuska	add	w7,w7,w3
19812a58b312SMartin Matuska	eor	w13,w13,w5
19822a58b312SMartin Matuska	st1	{v4.4s},[x17], #16
19832a58b312SMartin Matuska	add	w3,w3,w15			// h+=Sigma0(a) from the past
19842a58b312SMartin Matuska	ldp	w11,w12,[x0,#0]
19852a58b312SMartin Matuska	add	w3,w3,w13			// h+=Maj(a,b,c) from the past
19862a58b312SMartin Matuska	ldp	w13,w14,[x0,#8]
19872a58b312SMartin Matuska	add	w3,w3,w11			// accumulate
19882a58b312SMartin Matuska	add	w4,w4,w12
19892a58b312SMartin Matuska	ldp	w11,w12,[x0,#16]
19902a58b312SMartin Matuska	add	w5,w5,w13
19912a58b312SMartin Matuska	add	w6,w6,w14
19922a58b312SMartin Matuska	ldp	w13,w14,[x0,#24]
19932a58b312SMartin Matuska	add	w7,w7,w11
19942a58b312SMartin Matuska	add	w8,w8,w12
19952a58b312SMartin Matuska	 ldr	w12,[sp,#0]
19962a58b312SMartin Matuska	stp	w3,w4,[x0,#0]
19972a58b312SMartin Matuska	add	w9,w9,w13
19982a58b312SMartin Matuska	 mov	w13,wzr
19992a58b312SMartin Matuska	stp	w5,w6,[x0,#8]
20002a58b312SMartin Matuska	add	w10,w10,w14
20012a58b312SMartin Matuska	stp	w7,w8,[x0,#16]
20022a58b312SMartin Matuska	 eor	w14,w4,w5
20032a58b312SMartin Matuska	stp	w9,w10,[x0,#24]
20042a58b312SMartin Matuska	 mov	w15,wzr
20052a58b312SMartin Matuska	 mov	x17,sp
20062a58b312SMartin Matuska	b.ne	.L_00_48
20072a58b312SMartin Matuska
20082a58b312SMartin Matuska	ldr	x29,[x29]
20092a58b312SMartin Matuska	add	sp,sp,#16*4+16
20102a58b312SMartin Matuska	ret
20112a58b312SMartin Matuska.size	zfs_sha256_block_neon,.-zfs_sha256_block_neon
20122a58b312SMartin Matuska
20132a58b312SMartin Matuska#endif
2014