Home | History | Annotate | Line # | Download | only in aarch64
      1 // Copyright 2014-2025 The OpenSSL Project Authors. All Rights Reserved.
      2 //
      3 // Licensed under the Apache License 2.0 (the "License").  You may not use
      4 // this file except in compliance with the License.  You can obtain a copy
      5 // in the file LICENSE in the source distribution or at
      6 // https://www.openssl.org/source/license.html
      7 
      8 // ====================================================================
      9 // Written by Andy Polyakov <appro (at) openssl.org> for the OpenSSL
     10 // project. The module is, however, dual licensed under OpenSSL and
     11 // CRYPTOGAMS licenses depending on where you obtain it. For further
     12 // details see http://www.openssl.org/~appro/cryptogams/.
     13 //
     14 // Permission to use under GPLv2 terms is granted.
     15 // ====================================================================
     16 //
     17 // SHA256/512 for ARMv8.
     18 //
     19 // Performance in cycles per processed byte and improvement coefficient
     20 // over code generated with "default" compiler:
     21 //
     22 //		SHA256-hw	SHA256(*)	SHA512
     23 // Apple A7	1.97		10.5 (+33%)	6.73 (-1%(**))
     24 // Cortex-A53	2.38		15.5 (+115%)	10.0 (+150%(***))
     25 // Cortex-A57	2.31		11.6 (+86%)	7.51 (+260%(***))
     26 // Denver	2.01		10.5 (+26%)	6.70 (+8%)
     27 // X-Gene			20.0 (+100%)	12.8 (+300%(***))
     28 // Mongoose	2.36		13.0 (+50%)	8.36 (+33%)
     29 // Kryo		1.92		17.4 (+30%)	11.2 (+8%)
     30 // ThunderX2	2.54		13.2 (+40%)	8.40 (+18%)
     31 //
     32 // (*)	Software SHA256 results are of lesser relevance, presented
     33 //	mostly for informational purposes.
     34 // (**)	The result is a trade-off: it's possible to improve it by
     35 //	10% (or by 1 cycle per round), but at the cost of 20% loss
     36 //	on Cortex-A53 (or by 4 cycles per round).
     37 // (***)	Super-impressive coefficients over gcc-generated code are
     38 //	indication of some compiler "pathology", most notably code
     39 //	generated with -mgeneral-regs-only is significantly faster
     40 //	and the gap is only 40-90%.
     41 //
     42 // October 2016.
     43 //
     44 // Originally it was reckoned that it makes no sense to implement NEON
     45 // version of SHA256 for 64-bit processors. This is because performance
     46 // improvement on most wide-spread Cortex-A5x processors was observed
     47 // to be marginal, same on Cortex-A53 and ~10% on A57. But then it was
     48 // observed that 32-bit NEON SHA256 performs significantly better than
     49 // 64-bit scalar version on *some* of the more recent processors. As
     50 // result 64-bit NEON version of SHA256 was added to provide best
     51 // all-round performance. For example it executes ~30% faster on X-Gene
     52 // and Mongoose. [For reference, NEON version of SHA512 is bound to
     53 // deliver much less improvement, likely *negative* on Cortex-A5x.
     54 // Which is why NEON support is limited to SHA256.]
     55 
     56 // $output is the last argument if it looks like a file (it has an extension)
     57 // $flavour is the first argument if it doesn't look like a file
     58 #include "arm_arch.h"
     59 #ifndef	__KERNEL__
     60 
     61 .hidden	OPENSSL_armcap_P
     62 #endif
     63 
     64 .text
     65 
     66 .globl	sha256_block_data_order
     67 .type	sha256_block_data_order,%function
     68 .align	6
     69 sha256_block_data_order:
     70 	AARCH64_VALID_CALL_TARGET
     71 #ifndef	__KERNEL__
     72 	adrp	x16,OPENSSL_armcap_P
     73 	ldr	w16,[x16,#:lo12:OPENSSL_armcap_P]
     74 	tst	w16,#ARMV8_SHA256
     75 	b.ne	.Lv8_entry
     76 	tst	w16,#ARMV7_NEON
     77 	b.ne	.Lneon_entry
     78 #endif
     79 	AARCH64_SIGN_LINK_REGISTER
     80 	stp	x29,x30,[sp,#-128]!
     81 	add	x29,sp,#0
     82 
     83 	stp	x19,x20,[sp,#16]
     84 	stp	x21,x22,[sp,#32]
     85 	stp	x23,x24,[sp,#48]
     86 	stp	x25,x26,[sp,#64]
     87 	stp	x27,x28,[sp,#80]
     88 	sub	sp,sp,#4*4
     89 
     90 	ldp	w20,w21,[x0]				// load context
     91 	ldp	w22,w23,[x0,#2*4]
     92 	ldp	w24,w25,[x0,#4*4]
     93 	add	x2,x1,x2,lsl#6	// end of input
     94 	ldp	w26,w27,[x0,#6*4]
     95 	adrp	x30,.LK256
     96 	add	x30,x30,#:lo12:.LK256
     97 	stp	x0,x2,[x29,#96]
     98 
     99 .Loop:
    100 	ldp	w3,w4,[x1],#2*4
    101 	ldr	w19,[x30],#4			// *K++
    102 	eor	w28,w21,w22				// magic seed
    103 	str	x1,[x29,#112]
    104 #ifndef	__AARCH64EB__
    105 	rev	w3,w3			// 0
    106 #endif
    107 	ror	w16,w24,#6
    108 	add	w27,w27,w19			// h+=K[i]
    109 	eor	w6,w24,w24,ror#14
    110 	and	w17,w25,w24
    111 	bic	w19,w26,w24
    112 	add	w27,w27,w3			// h+=X[i]
    113 	orr	w17,w17,w19			// Ch(e,f,g)
    114 	eor	w19,w20,w21			// a^b, b^c in next round
    115 	eor	w16,w16,w6,ror#11	// Sigma1(e)
    116 	ror	w6,w20,#2
    117 	add	w27,w27,w17			// h+=Ch(e,f,g)
    118 	eor	w17,w20,w20,ror#9
    119 	add	w27,w27,w16			// h+=Sigma1(e)
    120 	and	w28,w28,w19			// (b^c)&=(a^b)
    121 	add	w23,w23,w27			// d+=h
    122 	eor	w28,w28,w21			// Maj(a,b,c)
    123 	eor	w17,w6,w17,ror#13	// Sigma0(a)
    124 	add	w27,w27,w28			// h+=Maj(a,b,c)
    125 	ldr	w28,[x30],#4		// *K++, w19 in next round
    126 	//add	w27,w27,w17			// h+=Sigma0(a)
    127 #ifndef	__AARCH64EB__
    128 	rev	w4,w4			// 1
    129 #endif
    130 	ldp	w5,w6,[x1],#2*4
    131 	add	w27,w27,w17			// h+=Sigma0(a)
    132 	ror	w16,w23,#6
    133 	add	w26,w26,w28			// h+=K[i]
    134 	eor	w7,w23,w23,ror#14
    135 	and	w17,w24,w23
    136 	bic	w28,w25,w23
    137 	add	w26,w26,w4			// h+=X[i]
    138 	orr	w17,w17,w28			// Ch(e,f,g)
    139 	eor	w28,w27,w20			// a^b, b^c in next round
    140 	eor	w16,w16,w7,ror#11	// Sigma1(e)
    141 	ror	w7,w27,#2
    142 	add	w26,w26,w17			// h+=Ch(e,f,g)
    143 	eor	w17,w27,w27,ror#9
    144 	add	w26,w26,w16			// h+=Sigma1(e)
    145 	and	w19,w19,w28			// (b^c)&=(a^b)
    146 	add	w22,w22,w26			// d+=h
    147 	eor	w19,w19,w20			// Maj(a,b,c)
    148 	eor	w17,w7,w17,ror#13	// Sigma0(a)
    149 	add	w26,w26,w19			// h+=Maj(a,b,c)
    150 	ldr	w19,[x30],#4		// *K++, w28 in next round
    151 	//add	w26,w26,w17			// h+=Sigma0(a)
    152 #ifndef	__AARCH64EB__
    153 	rev	w5,w5			// 2
    154 #endif
    155 	add	w26,w26,w17			// h+=Sigma0(a)
    156 	ror	w16,w22,#6
    157 	add	w25,w25,w19			// h+=K[i]
    158 	eor	w8,w22,w22,ror#14
    159 	and	w17,w23,w22
    160 	bic	w19,w24,w22
    161 	add	w25,w25,w5			// h+=X[i]
    162 	orr	w17,w17,w19			// Ch(e,f,g)
    163 	eor	w19,w26,w27			// a^b, b^c in next round
    164 	eor	w16,w16,w8,ror#11	// Sigma1(e)
    165 	ror	w8,w26,#2
    166 	add	w25,w25,w17			// h+=Ch(e,f,g)
    167 	eor	w17,w26,w26,ror#9
    168 	add	w25,w25,w16			// h+=Sigma1(e)
    169 	and	w28,w28,w19			// (b^c)&=(a^b)
    170 	add	w21,w21,w25			// d+=h
    171 	eor	w28,w28,w27			// Maj(a,b,c)
    172 	eor	w17,w8,w17,ror#13	// Sigma0(a)
    173 	add	w25,w25,w28			// h+=Maj(a,b,c)
    174 	ldr	w28,[x30],#4		// *K++, w19 in next round
    175 	//add	w25,w25,w17			// h+=Sigma0(a)
    176 #ifndef	__AARCH64EB__
    177 	rev	w6,w6			// 3
    178 #endif
    179 	ldp	w7,w8,[x1],#2*4
    180 	add	w25,w25,w17			// h+=Sigma0(a)
    181 	ror	w16,w21,#6
    182 	add	w24,w24,w28			// h+=K[i]
    183 	eor	w9,w21,w21,ror#14
    184 	and	w17,w22,w21
    185 	bic	w28,w23,w21
    186 	add	w24,w24,w6			// h+=X[i]
    187 	orr	w17,w17,w28			// Ch(e,f,g)
    188 	eor	w28,w25,w26			// a^b, b^c in next round
    189 	eor	w16,w16,w9,ror#11	// Sigma1(e)
    190 	ror	w9,w25,#2
    191 	add	w24,w24,w17			// h+=Ch(e,f,g)
    192 	eor	w17,w25,w25,ror#9
    193 	add	w24,w24,w16			// h+=Sigma1(e)
    194 	and	w19,w19,w28			// (b^c)&=(a^b)
    195 	add	w20,w20,w24			// d+=h
    196 	eor	w19,w19,w26			// Maj(a,b,c)
    197 	eor	w17,w9,w17,ror#13	// Sigma0(a)
    198 	add	w24,w24,w19			// h+=Maj(a,b,c)
    199 	ldr	w19,[x30],#4		// *K++, w28 in next round
    200 	//add	w24,w24,w17			// h+=Sigma0(a)
    201 #ifndef	__AARCH64EB__
    202 	rev	w7,w7			// 4
    203 #endif
    204 	add	w24,w24,w17			// h+=Sigma0(a)
    205 	ror	w16,w20,#6
    206 	add	w23,w23,w19			// h+=K[i]
    207 	eor	w10,w20,w20,ror#14
    208 	and	w17,w21,w20
    209 	bic	w19,w22,w20
    210 	add	w23,w23,w7			// h+=X[i]
    211 	orr	w17,w17,w19			// Ch(e,f,g)
    212 	eor	w19,w24,w25			// a^b, b^c in next round
    213 	eor	w16,w16,w10,ror#11	// Sigma1(e)
    214 	ror	w10,w24,#2
    215 	add	w23,w23,w17			// h+=Ch(e,f,g)
    216 	eor	w17,w24,w24,ror#9
    217 	add	w23,w23,w16			// h+=Sigma1(e)
    218 	and	w28,w28,w19			// (b^c)&=(a^b)
    219 	add	w27,w27,w23			// d+=h
    220 	eor	w28,w28,w25			// Maj(a,b,c)
    221 	eor	w17,w10,w17,ror#13	// Sigma0(a)
    222 	add	w23,w23,w28			// h+=Maj(a,b,c)
    223 	ldr	w28,[x30],#4		// *K++, w19 in next round
    224 	//add	w23,w23,w17			// h+=Sigma0(a)
    225 #ifndef	__AARCH64EB__
    226 	rev	w8,w8			// 5
    227 #endif
    228 	ldp	w9,w10,[x1],#2*4
    229 	add	w23,w23,w17			// h+=Sigma0(a)
    230 	ror	w16,w27,#6
    231 	add	w22,w22,w28			// h+=K[i]
    232 	eor	w11,w27,w27,ror#14
    233 	and	w17,w20,w27
    234 	bic	w28,w21,w27
    235 	add	w22,w22,w8			// h+=X[i]
    236 	orr	w17,w17,w28			// Ch(e,f,g)
    237 	eor	w28,w23,w24			// a^b, b^c in next round
    238 	eor	w16,w16,w11,ror#11	// Sigma1(e)
    239 	ror	w11,w23,#2
    240 	add	w22,w22,w17			// h+=Ch(e,f,g)
    241 	eor	w17,w23,w23,ror#9
    242 	add	w22,w22,w16			// h+=Sigma1(e)
    243 	and	w19,w19,w28			// (b^c)&=(a^b)
    244 	add	w26,w26,w22			// d+=h
    245 	eor	w19,w19,w24			// Maj(a,b,c)
    246 	eor	w17,w11,w17,ror#13	// Sigma0(a)
    247 	add	w22,w22,w19			// h+=Maj(a,b,c)
    248 	ldr	w19,[x30],#4		// *K++, w28 in next round
    249 	//add	w22,w22,w17			// h+=Sigma0(a)
    250 #ifndef	__AARCH64EB__
    251 	rev	w9,w9			// 6
    252 #endif
    253 	add	w22,w22,w17			// h+=Sigma0(a)
    254 	ror	w16,w26,#6
    255 	add	w21,w21,w19			// h+=K[i]
    256 	eor	w12,w26,w26,ror#14
    257 	and	w17,w27,w26
    258 	bic	w19,w20,w26
    259 	add	w21,w21,w9			// h+=X[i]
    260 	orr	w17,w17,w19			// Ch(e,f,g)
    261 	eor	w19,w22,w23			// a^b, b^c in next round
    262 	eor	w16,w16,w12,ror#11	// Sigma1(e)
    263 	ror	w12,w22,#2
    264 	add	w21,w21,w17			// h+=Ch(e,f,g)
    265 	eor	w17,w22,w22,ror#9
    266 	add	w21,w21,w16			// h+=Sigma1(e)
    267 	and	w28,w28,w19			// (b^c)&=(a^b)
    268 	add	w25,w25,w21			// d+=h
    269 	eor	w28,w28,w23			// Maj(a,b,c)
    270 	eor	w17,w12,w17,ror#13	// Sigma0(a)
    271 	add	w21,w21,w28			// h+=Maj(a,b,c)
    272 	ldr	w28,[x30],#4		// *K++, w19 in next round
    273 	//add	w21,w21,w17			// h+=Sigma0(a)
    274 #ifndef	__AARCH64EB__
    275 	rev	w10,w10			// 7
    276 #endif
    277 	ldp	w11,w12,[x1],#2*4
    278 	add	w21,w21,w17			// h+=Sigma0(a)
    279 	ror	w16,w25,#6
    280 	add	w20,w20,w28			// h+=K[i]
    281 	eor	w13,w25,w25,ror#14
    282 	and	w17,w26,w25
    283 	bic	w28,w27,w25
    284 	add	w20,w20,w10			// h+=X[i]
    285 	orr	w17,w17,w28			// Ch(e,f,g)
    286 	eor	w28,w21,w22			// a^b, b^c in next round
    287 	eor	w16,w16,w13,ror#11	// Sigma1(e)
    288 	ror	w13,w21,#2
    289 	add	w20,w20,w17			// h+=Ch(e,f,g)
    290 	eor	w17,w21,w21,ror#9
    291 	add	w20,w20,w16			// h+=Sigma1(e)
    292 	and	w19,w19,w28			// (b^c)&=(a^b)
    293 	add	w24,w24,w20			// d+=h
    294 	eor	w19,w19,w22			// Maj(a,b,c)
    295 	eor	w17,w13,w17,ror#13	// Sigma0(a)
    296 	add	w20,w20,w19			// h+=Maj(a,b,c)
    297 	ldr	w19,[x30],#4		// *K++, w28 in next round
    298 	//add	w20,w20,w17			// h+=Sigma0(a)
    299 #ifndef	__AARCH64EB__
    300 	rev	w11,w11			// 8
    301 #endif
    302 	add	w20,w20,w17			// h+=Sigma0(a)
    303 	ror	w16,w24,#6
    304 	add	w27,w27,w19			// h+=K[i]
    305 	eor	w14,w24,w24,ror#14
    306 	and	w17,w25,w24
    307 	bic	w19,w26,w24
    308 	add	w27,w27,w11			// h+=X[i]
    309 	orr	w17,w17,w19			// Ch(e,f,g)
    310 	eor	w19,w20,w21			// a^b, b^c in next round
    311 	eor	w16,w16,w14,ror#11	// Sigma1(e)
    312 	ror	w14,w20,#2
    313 	add	w27,w27,w17			// h+=Ch(e,f,g)
    314 	eor	w17,w20,w20,ror#9
    315 	add	w27,w27,w16			// h+=Sigma1(e)
    316 	and	w28,w28,w19			// (b^c)&=(a^b)
    317 	add	w23,w23,w27			// d+=h
    318 	eor	w28,w28,w21			// Maj(a,b,c)
    319 	eor	w17,w14,w17,ror#13	// Sigma0(a)
    320 	add	w27,w27,w28			// h+=Maj(a,b,c)
    321 	ldr	w28,[x30],#4		// *K++, w19 in next round
    322 	//add	w27,w27,w17			// h+=Sigma0(a)
    323 #ifndef	__AARCH64EB__
    324 	rev	w12,w12			// 9
    325 #endif
    326 	ldp	w13,w14,[x1],#2*4
    327 	add	w27,w27,w17			// h+=Sigma0(a)
    328 	ror	w16,w23,#6
    329 	add	w26,w26,w28			// h+=K[i]
    330 	eor	w15,w23,w23,ror#14
    331 	and	w17,w24,w23
    332 	bic	w28,w25,w23
    333 	add	w26,w26,w12			// h+=X[i]
    334 	orr	w17,w17,w28			// Ch(e,f,g)
    335 	eor	w28,w27,w20			// a^b, b^c in next round
    336 	eor	w16,w16,w15,ror#11	// Sigma1(e)
    337 	ror	w15,w27,#2
    338 	add	w26,w26,w17			// h+=Ch(e,f,g)
    339 	eor	w17,w27,w27,ror#9
    340 	add	w26,w26,w16			// h+=Sigma1(e)
    341 	and	w19,w19,w28			// (b^c)&=(a^b)
    342 	add	w22,w22,w26			// d+=h
    343 	eor	w19,w19,w20			// Maj(a,b,c)
    344 	eor	w17,w15,w17,ror#13	// Sigma0(a)
    345 	add	w26,w26,w19			// h+=Maj(a,b,c)
    346 	ldr	w19,[x30],#4		// *K++, w28 in next round
    347 	//add	w26,w26,w17			// h+=Sigma0(a)
    348 #ifndef	__AARCH64EB__
    349 	rev	w13,w13			// 10
    350 #endif
    351 	add	w26,w26,w17			// h+=Sigma0(a)
    352 	ror	w16,w22,#6
    353 	add	w25,w25,w19			// h+=K[i]
    354 	eor	w0,w22,w22,ror#14
    355 	and	w17,w23,w22
    356 	bic	w19,w24,w22
    357 	add	w25,w25,w13			// h+=X[i]
    358 	orr	w17,w17,w19			// Ch(e,f,g)
    359 	eor	w19,w26,w27			// a^b, b^c in next round
    360 	eor	w16,w16,w0,ror#11	// Sigma1(e)
    361 	ror	w0,w26,#2
    362 	add	w25,w25,w17			// h+=Ch(e,f,g)
    363 	eor	w17,w26,w26,ror#9
    364 	add	w25,w25,w16			// h+=Sigma1(e)
    365 	and	w28,w28,w19			// (b^c)&=(a^b)
    366 	add	w21,w21,w25			// d+=h
    367 	eor	w28,w28,w27			// Maj(a,b,c)
    368 	eor	w17,w0,w17,ror#13	// Sigma0(a)
    369 	add	w25,w25,w28			// h+=Maj(a,b,c)
    370 	ldr	w28,[x30],#4		// *K++, w19 in next round
    371 	//add	w25,w25,w17			// h+=Sigma0(a)
    372 #ifndef	__AARCH64EB__
    373 	rev	w14,w14			// 11
    374 #endif
    375 	ldp	w15,w0,[x1],#2*4
    376 	add	w25,w25,w17			// h+=Sigma0(a)
    377 	str	w6,[sp,#12]
    378 	ror	w16,w21,#6
    379 	add	w24,w24,w28			// h+=K[i]
    380 	eor	w6,w21,w21,ror#14
    381 	and	w17,w22,w21
    382 	bic	w28,w23,w21
    383 	add	w24,w24,w14			// h+=X[i]
    384 	orr	w17,w17,w28			// Ch(e,f,g)
    385 	eor	w28,w25,w26			// a^b, b^c in next round
    386 	eor	w16,w16,w6,ror#11	// Sigma1(e)
    387 	ror	w6,w25,#2
    388 	add	w24,w24,w17			// h+=Ch(e,f,g)
    389 	eor	w17,w25,w25,ror#9
    390 	add	w24,w24,w16			// h+=Sigma1(e)
    391 	and	w19,w19,w28			// (b^c)&=(a^b)
    392 	add	w20,w20,w24			// d+=h
    393 	eor	w19,w19,w26			// Maj(a,b,c)
    394 	eor	w17,w6,w17,ror#13	// Sigma0(a)
    395 	add	w24,w24,w19			// h+=Maj(a,b,c)
    396 	ldr	w19,[x30],#4		// *K++, w28 in next round
    397 	//add	w24,w24,w17			// h+=Sigma0(a)
    398 #ifndef	__AARCH64EB__
    399 	rev	w15,w15			// 12
    400 #endif
    401 	add	w24,w24,w17			// h+=Sigma0(a)
    402 	str	w7,[sp,#0]
    403 	ror	w16,w20,#6
    404 	add	w23,w23,w19			// h+=K[i]
    405 	eor	w7,w20,w20,ror#14
    406 	and	w17,w21,w20
    407 	bic	w19,w22,w20
    408 	add	w23,w23,w15			// h+=X[i]
    409 	orr	w17,w17,w19			// Ch(e,f,g)
    410 	eor	w19,w24,w25			// a^b, b^c in next round
    411 	eor	w16,w16,w7,ror#11	// Sigma1(e)
    412 	ror	w7,w24,#2
    413 	add	w23,w23,w17			// h+=Ch(e,f,g)
    414 	eor	w17,w24,w24,ror#9
    415 	add	w23,w23,w16			// h+=Sigma1(e)
    416 	and	w28,w28,w19			// (b^c)&=(a^b)
    417 	add	w27,w27,w23			// d+=h
    418 	eor	w28,w28,w25			// Maj(a,b,c)
    419 	eor	w17,w7,w17,ror#13	// Sigma0(a)
    420 	add	w23,w23,w28			// h+=Maj(a,b,c)
    421 	ldr	w28,[x30],#4		// *K++, w19 in next round
    422 	//add	w23,w23,w17			// h+=Sigma0(a)
    423 #ifndef	__AARCH64EB__
    424 	rev	w0,w0			// 13
    425 #endif
    426 	ldp	w1,w2,[x1]
    427 	add	w23,w23,w17			// h+=Sigma0(a)
    428 	str	w8,[sp,#4]
    429 	ror	w16,w27,#6
    430 	add	w22,w22,w28			// h+=K[i]
    431 	eor	w8,w27,w27,ror#14
    432 	and	w17,w20,w27
    433 	bic	w28,w21,w27
    434 	add	w22,w22,w0			// h+=X[i]
    435 	orr	w17,w17,w28			// Ch(e,f,g)
    436 	eor	w28,w23,w24			// a^b, b^c in next round
    437 	eor	w16,w16,w8,ror#11	// Sigma1(e)
    438 	ror	w8,w23,#2
    439 	add	w22,w22,w17			// h+=Ch(e,f,g)
    440 	eor	w17,w23,w23,ror#9
    441 	add	w22,w22,w16			// h+=Sigma1(e)
    442 	and	w19,w19,w28			// (b^c)&=(a^b)
    443 	add	w26,w26,w22			// d+=h
    444 	eor	w19,w19,w24			// Maj(a,b,c)
    445 	eor	w17,w8,w17,ror#13	// Sigma0(a)
    446 	add	w22,w22,w19			// h+=Maj(a,b,c)
    447 	ldr	w19,[x30],#4		// *K++, w28 in next round
    448 	//add	w22,w22,w17			// h+=Sigma0(a)
    449 #ifndef	__AARCH64EB__
    450 	rev	w1,w1			// 14
    451 #endif
    452 	ldr	w6,[sp,#12]
    453 	add	w22,w22,w17			// h+=Sigma0(a)
    454 	str	w9,[sp,#8]
    455 	ror	w16,w26,#6
    456 	add	w21,w21,w19			// h+=K[i]
    457 	eor	w9,w26,w26,ror#14
    458 	and	w17,w27,w26
    459 	bic	w19,w20,w26
    460 	add	w21,w21,w1			// h+=X[i]
    461 	orr	w17,w17,w19			// Ch(e,f,g)
    462 	eor	w19,w22,w23			// a^b, b^c in next round
    463 	eor	w16,w16,w9,ror#11	// Sigma1(e)
    464 	ror	w9,w22,#2
    465 	add	w21,w21,w17			// h+=Ch(e,f,g)
    466 	eor	w17,w22,w22,ror#9
    467 	add	w21,w21,w16			// h+=Sigma1(e)
    468 	and	w28,w28,w19			// (b^c)&=(a^b)
    469 	add	w25,w25,w21			// d+=h
    470 	eor	w28,w28,w23			// Maj(a,b,c)
    471 	eor	w17,w9,w17,ror#13	// Sigma0(a)
    472 	add	w21,w21,w28			// h+=Maj(a,b,c)
    473 	ldr	w28,[x30],#4		// *K++, w19 in next round
    474 	//add	w21,w21,w17			// h+=Sigma0(a)
    475 #ifndef	__AARCH64EB__
    476 	rev	w2,w2			// 15
    477 #endif
    478 	ldr	w7,[sp,#0]
    479 	add	w21,w21,w17			// h+=Sigma0(a)
    480 	str	w10,[sp,#12]
    481 	ror	w16,w25,#6
    482 	add	w20,w20,w28			// h+=K[i]
    483 	ror	w9,w4,#7
    484 	and	w17,w26,w25
    485 	ror	w8,w1,#17
    486 	bic	w28,w27,w25
    487 	ror	w10,w21,#2
    488 	add	w20,w20,w2			// h+=X[i]
    489 	eor	w16,w16,w25,ror#11
    490 	eor	w9,w9,w4,ror#18
    491 	orr	w17,w17,w28			// Ch(e,f,g)
    492 	eor	w28,w21,w22			// a^b, b^c in next round
    493 	eor	w16,w16,w25,ror#25	// Sigma1(e)
    494 	eor	w10,w10,w21,ror#13
    495 	add	w20,w20,w17			// h+=Ch(e,f,g)
    496 	and	w19,w19,w28			// (b^c)&=(a^b)
    497 	eor	w8,w8,w1,ror#19
    498 	eor	w9,w9,w4,lsr#3	// sigma0(X[i+1])
    499 	add	w20,w20,w16			// h+=Sigma1(e)
    500 	eor	w19,w19,w22			// Maj(a,b,c)
    501 	eor	w17,w10,w21,ror#22	// Sigma0(a)
    502 	eor	w8,w8,w1,lsr#10	// sigma1(X[i+14])
    503 	add	w3,w3,w12
    504 	add	w24,w24,w20			// d+=h
    505 	add	w20,w20,w19			// h+=Maj(a,b,c)
    506 	ldr	w19,[x30],#4		// *K++, w28 in next round
    507 	add	w3,w3,w9
    508 	add	w20,w20,w17			// h+=Sigma0(a)
    509 	add	w3,w3,w8
    510 .Loop_16_xx:
    511 	ldr	w8,[sp,#4]
    512 	str	w11,[sp,#0]
    513 	ror	w16,w24,#6
    514 	add	w27,w27,w19			// h+=K[i]
    515 	ror	w10,w5,#7
    516 	and	w17,w25,w24
    517 	ror	w9,w2,#17
    518 	bic	w19,w26,w24
    519 	ror	w11,w20,#2
    520 	add	w27,w27,w3			// h+=X[i]
    521 	eor	w16,w16,w24,ror#11
    522 	eor	w10,w10,w5,ror#18
    523 	orr	w17,w17,w19			// Ch(e,f,g)
    524 	eor	w19,w20,w21			// a^b, b^c in next round
    525 	eor	w16,w16,w24,ror#25	// Sigma1(e)
    526 	eor	w11,w11,w20,ror#13
    527 	add	w27,w27,w17			// h+=Ch(e,f,g)
    528 	and	w28,w28,w19			// (b^c)&=(a^b)
    529 	eor	w9,w9,w2,ror#19
    530 	eor	w10,w10,w5,lsr#3	// sigma0(X[i+1])
    531 	add	w27,w27,w16			// h+=Sigma1(e)
    532 	eor	w28,w28,w21			// Maj(a,b,c)
    533 	eor	w17,w11,w20,ror#22	// Sigma0(a)
    534 	eor	w9,w9,w2,lsr#10	// sigma1(X[i+14])
    535 	add	w4,w4,w13
    536 	add	w23,w23,w27			// d+=h
    537 	add	w27,w27,w28			// h+=Maj(a,b,c)
    538 	ldr	w28,[x30],#4		// *K++, w19 in next round
    539 	add	w4,w4,w10
    540 	add	w27,w27,w17			// h+=Sigma0(a)
    541 	add	w4,w4,w9
    542 	ldr	w9,[sp,#8]
    543 	str	w12,[sp,#4]
    544 	ror	w16,w23,#6
    545 	add	w26,w26,w28			// h+=K[i]
    546 	ror	w11,w6,#7
    547 	and	w17,w24,w23
    548 	ror	w10,w3,#17
    549 	bic	w28,w25,w23
    550 	ror	w12,w27,#2
    551 	add	w26,w26,w4			// h+=X[i]
    552 	eor	w16,w16,w23,ror#11
    553 	eor	w11,w11,w6,ror#18
    554 	orr	w17,w17,w28			// Ch(e,f,g)
    555 	eor	w28,w27,w20			// a^b, b^c in next round
    556 	eor	w16,w16,w23,ror#25	// Sigma1(e)
    557 	eor	w12,w12,w27,ror#13
    558 	add	w26,w26,w17			// h+=Ch(e,f,g)
    559 	and	w19,w19,w28			// (b^c)&=(a^b)
    560 	eor	w10,w10,w3,ror#19
    561 	eor	w11,w11,w6,lsr#3	// sigma0(X[i+1])
    562 	add	w26,w26,w16			// h+=Sigma1(e)
    563 	eor	w19,w19,w20			// Maj(a,b,c)
    564 	eor	w17,w12,w27,ror#22	// Sigma0(a)
    565 	eor	w10,w10,w3,lsr#10	// sigma1(X[i+14])
    566 	add	w5,w5,w14
    567 	add	w22,w22,w26			// d+=h
    568 	add	w26,w26,w19			// h+=Maj(a,b,c)
    569 	ldr	w19,[x30],#4		// *K++, w28 in next round
    570 	add	w5,w5,w11
    571 	add	w26,w26,w17			// h+=Sigma0(a)
    572 	add	w5,w5,w10
    573 	ldr	w10,[sp,#12]
    574 	str	w13,[sp,#8]
    575 	ror	w16,w22,#6
    576 	add	w25,w25,w19			// h+=K[i]
    577 	ror	w12,w7,#7
    578 	and	w17,w23,w22
    579 	ror	w11,w4,#17
    580 	bic	w19,w24,w22
    581 	ror	w13,w26,#2
    582 	add	w25,w25,w5			// h+=X[i]
    583 	eor	w16,w16,w22,ror#11
    584 	eor	w12,w12,w7,ror#18
    585 	orr	w17,w17,w19			// Ch(e,f,g)
    586 	eor	w19,w26,w27			// a^b, b^c in next round
    587 	eor	w16,w16,w22,ror#25	// Sigma1(e)
    588 	eor	w13,w13,w26,ror#13
    589 	add	w25,w25,w17			// h+=Ch(e,f,g)
    590 	and	w28,w28,w19			// (b^c)&=(a^b)
    591 	eor	w11,w11,w4,ror#19
    592 	eor	w12,w12,w7,lsr#3	// sigma0(X[i+1])
    593 	add	w25,w25,w16			// h+=Sigma1(e)
    594 	eor	w28,w28,w27			// Maj(a,b,c)
    595 	eor	w17,w13,w26,ror#22	// Sigma0(a)
    596 	eor	w11,w11,w4,lsr#10	// sigma1(X[i+14])
    597 	add	w6,w6,w15
    598 	add	w21,w21,w25			// d+=h
    599 	add	w25,w25,w28			// h+=Maj(a,b,c)
    600 	ldr	w28,[x30],#4		// *K++, w19 in next round
    601 	add	w6,w6,w12
    602 	add	w25,w25,w17			// h+=Sigma0(a)
    603 	add	w6,w6,w11
    604 	ldr	w11,[sp,#0]
    605 	str	w14,[sp,#12]
    606 	ror	w16,w21,#6
    607 	add	w24,w24,w28			// h+=K[i]
    608 	ror	w13,w8,#7
    609 	and	w17,w22,w21
    610 	ror	w12,w5,#17
    611 	bic	w28,w23,w21
    612 	ror	w14,w25,#2
    613 	add	w24,w24,w6			// h+=X[i]
    614 	eor	w16,w16,w21,ror#11
    615 	eor	w13,w13,w8,ror#18
    616 	orr	w17,w17,w28			// Ch(e,f,g)
    617 	eor	w28,w25,w26			// a^b, b^c in next round
    618 	eor	w16,w16,w21,ror#25	// Sigma1(e)
    619 	eor	w14,w14,w25,ror#13
    620 	add	w24,w24,w17			// h+=Ch(e,f,g)
    621 	and	w19,w19,w28			// (b^c)&=(a^b)
    622 	eor	w12,w12,w5,ror#19
    623 	eor	w13,w13,w8,lsr#3	// sigma0(X[i+1])
    624 	add	w24,w24,w16			// h+=Sigma1(e)
    625 	eor	w19,w19,w26			// Maj(a,b,c)
    626 	eor	w17,w14,w25,ror#22	// Sigma0(a)
    627 	eor	w12,w12,w5,lsr#10	// sigma1(X[i+14])
    628 	add	w7,w7,w0
    629 	add	w20,w20,w24			// d+=h
    630 	add	w24,w24,w19			// h+=Maj(a,b,c)
    631 	ldr	w19,[x30],#4		// *K++, w28 in next round
    632 	add	w7,w7,w13
    633 	add	w24,w24,w17			// h+=Sigma0(a)
    634 	add	w7,w7,w12
    635 	ldr	w12,[sp,#4]
    636 	str	w15,[sp,#0]
    637 	ror	w16,w20,#6
    638 	add	w23,w23,w19			// h+=K[i]
    639 	ror	w14,w9,#7
    640 	and	w17,w21,w20
    641 	ror	w13,w6,#17
    642 	bic	w19,w22,w20
    643 	ror	w15,w24,#2
    644 	add	w23,w23,w7			// h+=X[i]
    645 	eor	w16,w16,w20,ror#11
    646 	eor	w14,w14,w9,ror#18
    647 	orr	w17,w17,w19			// Ch(e,f,g)
    648 	eor	w19,w24,w25			// a^b, b^c in next round
    649 	eor	w16,w16,w20,ror#25	// Sigma1(e)
    650 	eor	w15,w15,w24,ror#13
    651 	add	w23,w23,w17			// h+=Ch(e,f,g)
    652 	and	w28,w28,w19			// (b^c)&=(a^b)
    653 	eor	w13,w13,w6,ror#19
    654 	eor	w14,w14,w9,lsr#3	// sigma0(X[i+1])
    655 	add	w23,w23,w16			// h+=Sigma1(e)
    656 	eor	w28,w28,w25			// Maj(a,b,c)
    657 	eor	w17,w15,w24,ror#22	// Sigma0(a)
    658 	eor	w13,w13,w6,lsr#10	// sigma1(X[i+14])
    659 	add	w8,w8,w1
    660 	add	w27,w27,w23			// d+=h
    661 	add	w23,w23,w28			// h+=Maj(a,b,c)
    662 	ldr	w28,[x30],#4		// *K++, w19 in next round
    663 	add	w8,w8,w14
    664 	add	w23,w23,w17			// h+=Sigma0(a)
    665 	add	w8,w8,w13
    666 	ldr	w13,[sp,#8]
    667 	str	w0,[sp,#4]
    668 	ror	w16,w27,#6
    669 	add	w22,w22,w28			// h+=K[i]
    670 	ror	w15,w10,#7
    671 	and	w17,w20,w27
    672 	ror	w14,w7,#17
    673 	bic	w28,w21,w27
    674 	ror	w0,w23,#2
    675 	add	w22,w22,w8			// h+=X[i]
    676 	eor	w16,w16,w27,ror#11
    677 	eor	w15,w15,w10,ror#18
    678 	orr	w17,w17,w28			// Ch(e,f,g)
    679 	eor	w28,w23,w24			// a^b, b^c in next round
    680 	eor	w16,w16,w27,ror#25	// Sigma1(e)
    681 	eor	w0,w0,w23,ror#13
    682 	add	w22,w22,w17			// h+=Ch(e,f,g)
    683 	and	w19,w19,w28			// (b^c)&=(a^b)
    684 	eor	w14,w14,w7,ror#19
    685 	eor	w15,w15,w10,lsr#3	// sigma0(X[i+1])
    686 	add	w22,w22,w16			// h+=Sigma1(e)
    687 	eor	w19,w19,w24			// Maj(a,b,c)
    688 	eor	w17,w0,w23,ror#22	// Sigma0(a)
    689 	eor	w14,w14,w7,lsr#10	// sigma1(X[i+14])
    690 	add	w9,w9,w2
    691 	add	w26,w26,w22			// d+=h
    692 	add	w22,w22,w19			// h+=Maj(a,b,c)
    693 	ldr	w19,[x30],#4		// *K++, w28 in next round
    694 	add	w9,w9,w15
    695 	add	w22,w22,w17			// h+=Sigma0(a)
    696 	add	w9,w9,w14
    697 	ldr	w14,[sp,#12]
    698 	str	w1,[sp,#8]
    699 	ror	w16,w26,#6
    700 	add	w21,w21,w19			// h+=K[i]
    701 	ror	w0,w11,#7
    702 	and	w17,w27,w26
    703 	ror	w15,w8,#17
    704 	bic	w19,w20,w26
    705 	ror	w1,w22,#2
    706 	add	w21,w21,w9			// h+=X[i]
    707 	eor	w16,w16,w26,ror#11
    708 	eor	w0,w0,w11,ror#18
    709 	orr	w17,w17,w19			// Ch(e,f,g)
    710 	eor	w19,w22,w23			// a^b, b^c in next round
    711 	eor	w16,w16,w26,ror#25	// Sigma1(e)
    712 	eor	w1,w1,w22,ror#13
    713 	add	w21,w21,w17			// h+=Ch(e,f,g)
    714 	and	w28,w28,w19			// (b^c)&=(a^b)
    715 	eor	w15,w15,w8,ror#19
    716 	eor	w0,w0,w11,lsr#3	// sigma0(X[i+1])
    717 	add	w21,w21,w16			// h+=Sigma1(e)
    718 	eor	w28,w28,w23			// Maj(a,b,c)
    719 	eor	w17,w1,w22,ror#22	// Sigma0(a)
    720 	eor	w15,w15,w8,lsr#10	// sigma1(X[i+14])
    721 	add	w10,w10,w3
    722 	add	w25,w25,w21			// d+=h
    723 	add	w21,w21,w28			// h+=Maj(a,b,c)
    724 	ldr	w28,[x30],#4		// *K++, w19 in next round
    725 	add	w10,w10,w0
    726 	add	w21,w21,w17			// h+=Sigma0(a)
    727 	add	w10,w10,w15
    728 	ldr	w15,[sp,#0]
    729 	str	w2,[sp,#12]
    730 	ror	w16,w25,#6
    731 	add	w20,w20,w28			// h+=K[i]
    732 	ror	w1,w12,#7
    733 	and	w17,w26,w25
    734 	ror	w0,w9,#17
    735 	bic	w28,w27,w25
    736 	ror	w2,w21,#2
    737 	add	w20,w20,w10			// h+=X[i]
    738 	eor	w16,w16,w25,ror#11
    739 	eor	w1,w1,w12,ror#18
    740 	orr	w17,w17,w28			// Ch(e,f,g)
    741 	eor	w28,w21,w22			// a^b, b^c in next round
    742 	eor	w16,w16,w25,ror#25	// Sigma1(e)
    743 	eor	w2,w2,w21,ror#13
    744 	add	w20,w20,w17			// h+=Ch(e,f,g)
    745 	and	w19,w19,w28			// (b^c)&=(a^b)
    746 	eor	w0,w0,w9,ror#19
    747 	eor	w1,w1,w12,lsr#3	// sigma0(X[i+1])
    748 	add	w20,w20,w16			// h+=Sigma1(e)
    749 	eor	w19,w19,w22			// Maj(a,b,c)
    750 	eor	w17,w2,w21,ror#22	// Sigma0(a)
    751 	eor	w0,w0,w9,lsr#10	// sigma1(X[i+14])
    752 	add	w11,w11,w4
    753 	add	w24,w24,w20			// d+=h
    754 	add	w20,w20,w19			// h+=Maj(a,b,c)
    755 	ldr	w19,[x30],#4		// *K++, w28 in next round
    756 	add	w11,w11,w1
    757 	add	w20,w20,w17			// h+=Sigma0(a)
    758 	add	w11,w11,w0
    759 	ldr	w0,[sp,#4]
    760 	str	w3,[sp,#0]
    761 	ror	w16,w24,#6
    762 	add	w27,w27,w19			// h+=K[i]
    763 	ror	w2,w13,#7
    764 	and	w17,w25,w24
    765 	ror	w1,w10,#17
    766 	bic	w19,w26,w24
    767 	ror	w3,w20,#2
    768 	add	w27,w27,w11			// h+=X[i]
    769 	eor	w16,w16,w24,ror#11
    770 	eor	w2,w2,w13,ror#18
    771 	orr	w17,w17,w19			// Ch(e,f,g)
    772 	eor	w19,w20,w21			// a^b, b^c in next round
    773 	eor	w16,w16,w24,ror#25	// Sigma1(e)
    774 	eor	w3,w3,w20,ror#13
    775 	add	w27,w27,w17			// h+=Ch(e,f,g)
    776 	and	w28,w28,w19			// (b^c)&=(a^b)
    777 	eor	w1,w1,w10,ror#19
    778 	eor	w2,w2,w13,lsr#3	// sigma0(X[i+1])
    779 	add	w27,w27,w16			// h+=Sigma1(e)
    780 	eor	w28,w28,w21			// Maj(a,b,c)
    781 	eor	w17,w3,w20,ror#22	// Sigma0(a)
    782 	eor	w1,w1,w10,lsr#10	// sigma1(X[i+14])
    783 	add	w12,w12,w5
    784 	add	w23,w23,w27			// d+=h
    785 	add	w27,w27,w28			// h+=Maj(a,b,c)
    786 	ldr	w28,[x30],#4		// *K++, w19 in next round
    787 	add	w12,w12,w2
    788 	add	w27,w27,w17			// h+=Sigma0(a)
    789 	add	w12,w12,w1
    790 	ldr	w1,[sp,#8]
    791 	str	w4,[sp,#4]
    792 	ror	w16,w23,#6
    793 	add	w26,w26,w28			// h+=K[i]
    794 	ror	w3,w14,#7
    795 	and	w17,w24,w23
    796 	ror	w2,w11,#17
    797 	bic	w28,w25,w23
    798 	ror	w4,w27,#2
    799 	add	w26,w26,w12			// h+=X[i]
    800 	eor	w16,w16,w23,ror#11
    801 	eor	w3,w3,w14,ror#18
    802 	orr	w17,w17,w28			// Ch(e,f,g)
    803 	eor	w28,w27,w20			// a^b, b^c in next round
    804 	eor	w16,w16,w23,ror#25	// Sigma1(e)
    805 	eor	w4,w4,w27,ror#13
    806 	add	w26,w26,w17			// h+=Ch(e,f,g)
    807 	and	w19,w19,w28			// (b^c)&=(a^b)
    808 	eor	w2,w2,w11,ror#19
    809 	eor	w3,w3,w14,lsr#3	// sigma0(X[i+1])
    810 	add	w26,w26,w16			// h+=Sigma1(e)
    811 	eor	w19,w19,w20			// Maj(a,b,c)
    812 	eor	w17,w4,w27,ror#22	// Sigma0(a)
    813 	eor	w2,w2,w11,lsr#10	// sigma1(X[i+14])
    814 	add	w13,w13,w6
    815 	add	w22,w22,w26			// d+=h
    816 	add	w26,w26,w19			// h+=Maj(a,b,c)
    817 	ldr	w19,[x30],#4		// *K++, w28 in next round
    818 	add	w13,w13,w3
    819 	add	w26,w26,w17			// h+=Sigma0(a)
    820 	add	w13,w13,w2
    821 	ldr	w2,[sp,#12]
    822 	str	w5,[sp,#8]
    823 	ror	w16,w22,#6
    824 	add	w25,w25,w19			// h+=K[i]
    825 	ror	w4,w15,#7
    826 	and	w17,w23,w22
    827 	ror	w3,w12,#17
    828 	bic	w19,w24,w22
    829 	ror	w5,w26,#2
    830 	add	w25,w25,w13			// h+=X[i]
    831 	eor	w16,w16,w22,ror#11
    832 	eor	w4,w4,w15,ror#18
    833 	orr	w17,w17,w19			// Ch(e,f,g)
    834 	eor	w19,w26,w27			// a^b, b^c in next round
    835 	eor	w16,w16,w22,ror#25	// Sigma1(e)
    836 	eor	w5,w5,w26,ror#13
    837 	add	w25,w25,w17			// h+=Ch(e,f,g)
    838 	and	w28,w28,w19			// (b^c)&=(a^b)
    839 	eor	w3,w3,w12,ror#19
    840 	eor	w4,w4,w15,lsr#3	// sigma0(X[i+1])
    841 	add	w25,w25,w16			// h+=Sigma1(e)
    842 	eor	w28,w28,w27			// Maj(a,b,c)
    843 	eor	w17,w5,w26,ror#22	// Sigma0(a)
    844 	eor	w3,w3,w12,lsr#10	// sigma1(X[i+14])
    845 	add	w14,w14,w7
    846 	add	w21,w21,w25			// d+=h
    847 	add	w25,w25,w28			// h+=Maj(a,b,c)
    848 	ldr	w28,[x30],#4		// *K++, w19 in next round
    849 	add	w14,w14,w4
    850 	add	w25,w25,w17			// h+=Sigma0(a)
    851 	add	w14,w14,w3
    852 	ldr	w3,[sp,#0]
    853 	str	w6,[sp,#12]
    854 	ror	w16,w21,#6
    855 	add	w24,w24,w28			// h+=K[i]
    856 	ror	w5,w0,#7
    857 	and	w17,w22,w21
    858 	ror	w4,w13,#17
    859 	bic	w28,w23,w21
    860 	ror	w6,w25,#2
    861 	add	w24,w24,w14			// h+=X[i]
    862 	eor	w16,w16,w21,ror#11
    863 	eor	w5,w5,w0,ror#18
    864 	orr	w17,w17,w28			// Ch(e,f,g)
    865 	eor	w28,w25,w26			// a^b, b^c in next round
    866 	eor	w16,w16,w21,ror#25	// Sigma1(e)
    867 	eor	w6,w6,w25,ror#13
    868 	add	w24,w24,w17			// h+=Ch(e,f,g)
    869 	and	w19,w19,w28			// (b^c)&=(a^b)
    870 	eor	w4,w4,w13,ror#19
    871 	eor	w5,w5,w0,lsr#3	// sigma0(X[i+1])
    872 	add	w24,w24,w16			// h+=Sigma1(e)
    873 	eor	w19,w19,w26			// Maj(a,b,c)
    874 	eor	w17,w6,w25,ror#22	// Sigma0(a)
    875 	eor	w4,w4,w13,lsr#10	// sigma1(X[i+14])
    876 	add	w15,w15,w8
    877 	add	w20,w20,w24			// d+=h
    878 	add	w24,w24,w19			// h+=Maj(a,b,c)
    879 	ldr	w19,[x30],#4		// *K++, w28 in next round
    880 	add	w15,w15,w5
    881 	add	w24,w24,w17			// h+=Sigma0(a)
    882 	add	w15,w15,w4
    883 	ldr	w4,[sp,#4]
    884 	str	w7,[sp,#0]
    885 	ror	w16,w20,#6
    886 	add	w23,w23,w19			// h+=K[i]
    887 	ror	w6,w1,#7
    888 	and	w17,w21,w20
    889 	ror	w5,w14,#17
    890 	bic	w19,w22,w20
    891 	ror	w7,w24,#2
    892 	add	w23,w23,w15			// h+=X[i]
    893 	eor	w16,w16,w20,ror#11
    894 	eor	w6,w6,w1,ror#18
    895 	orr	w17,w17,w19			// Ch(e,f,g)
    896 	eor	w19,w24,w25			// a^b, b^c in next round
    897 	eor	w16,w16,w20,ror#25	// Sigma1(e)
    898 	eor	w7,w7,w24,ror#13
    899 	add	w23,w23,w17			// h+=Ch(e,f,g)
    900 	and	w28,w28,w19			// (b^c)&=(a^b)
    901 	eor	w5,w5,w14,ror#19
    902 	eor	w6,w6,w1,lsr#3	// sigma0(X[i+1])
    903 	add	w23,w23,w16			// h+=Sigma1(e)
    904 	eor	w28,w28,w25			// Maj(a,b,c)
    905 	eor	w17,w7,w24,ror#22	// Sigma0(a)
    906 	eor	w5,w5,w14,lsr#10	// sigma1(X[i+14])
    907 	add	w0,w0,w9
    908 	add	w27,w27,w23			// d+=h
    909 	add	w23,w23,w28			// h+=Maj(a,b,c)
    910 	ldr	w28,[x30],#4		// *K++, w19 in next round
    911 	add	w0,w0,w6
    912 	add	w23,w23,w17			// h+=Sigma0(a)
    913 	add	w0,w0,w5
    914 	ldr	w5,[sp,#8]
    915 	str	w8,[sp,#4]
    916 	ror	w16,w27,#6
    917 	add	w22,w22,w28			// h+=K[i]
    918 	ror	w7,w2,#7
    919 	and	w17,w20,w27
    920 	ror	w6,w15,#17
    921 	bic	w28,w21,w27
    922 	ror	w8,w23,#2
    923 	add	w22,w22,w0			// h+=X[i]
    924 	eor	w16,w16,w27,ror#11
    925 	eor	w7,w7,w2,ror#18
    926 	orr	w17,w17,w28			// Ch(e,f,g)
    927 	eor	w28,w23,w24			// a^b, b^c in next round
    928 	eor	w16,w16,w27,ror#25	// Sigma1(e)
    929 	eor	w8,w8,w23,ror#13
    930 	add	w22,w22,w17			// h+=Ch(e,f,g)
    931 	and	w19,w19,w28			// (b^c)&=(a^b)
    932 	eor	w6,w6,w15,ror#19
    933 	eor	w7,w7,w2,lsr#3	// sigma0(X[i+1])
    934 	add	w22,w22,w16			// h+=Sigma1(e)
    935 	eor	w19,w19,w24			// Maj(a,b,c)
    936 	eor	w17,w8,w23,ror#22	// Sigma0(a)
    937 	eor	w6,w6,w15,lsr#10	// sigma1(X[i+14])
    938 	add	w1,w1,w10
    939 	add	w26,w26,w22			// d+=h
    940 	add	w22,w22,w19			// h+=Maj(a,b,c)
    941 	ldr	w19,[x30],#4		// *K++, w28 in next round
    942 	add	w1,w1,w7
    943 	add	w22,w22,w17			// h+=Sigma0(a)
    944 	add	w1,w1,w6
    945 	ldr	w6,[sp,#12]
    946 	str	w9,[sp,#8]
    947 	ror	w16,w26,#6
    948 	add	w21,w21,w19			// h+=K[i]
    949 	ror	w8,w3,#7
    950 	and	w17,w27,w26
    951 	ror	w7,w0,#17
    952 	bic	w19,w20,w26
    953 	ror	w9,w22,#2
    954 	add	w21,w21,w1			// h+=X[i]
    955 	eor	w16,w16,w26,ror#11
    956 	eor	w8,w8,w3,ror#18
    957 	orr	w17,w17,w19			// Ch(e,f,g)
    958 	eor	w19,w22,w23			// a^b, b^c in next round
    959 	eor	w16,w16,w26,ror#25	// Sigma1(e)
    960 	eor	w9,w9,w22,ror#13
    961 	add	w21,w21,w17			// h+=Ch(e,f,g)
    962 	and	w28,w28,w19			// (b^c)&=(a^b)
    963 	eor	w7,w7,w0,ror#19
    964 	eor	w8,w8,w3,lsr#3	// sigma0(X[i+1])
    965 	add	w21,w21,w16			// h+=Sigma1(e)
    966 	eor	w28,w28,w23			// Maj(a,b,c)
    967 	eor	w17,w9,w22,ror#22	// Sigma0(a)
    968 	eor	w7,w7,w0,lsr#10	// sigma1(X[i+14])
    969 	add	w2,w2,w11
    970 	add	w25,w25,w21			// d+=h
    971 	add	w21,w21,w28			// h+=Maj(a,b,c)
    972 	ldr	w28,[x30],#4		// *K++, w19 in next round
    973 	add	w2,w2,w8
    974 	add	w21,w21,w17			// h+=Sigma0(a)
    975 	add	w2,w2,w7
    976 	ldr	w7,[sp,#0]
    977 	str	w10,[sp,#12]
    978 	ror	w16,w25,#6
    979 	add	w20,w20,w28			// h+=K[i]
    980 	ror	w9,w4,#7
    981 	and	w17,w26,w25
    982 	ror	w8,w1,#17
    983 	bic	w28,w27,w25
    984 	ror	w10,w21,#2
    985 	add	w20,w20,w2			// h+=X[i]
    986 	eor	w16,w16,w25,ror#11
    987 	eor	w9,w9,w4,ror#18
    988 	orr	w17,w17,w28			// Ch(e,f,g)
    989 	eor	w28,w21,w22			// a^b, b^c in next round
    990 	eor	w16,w16,w25,ror#25	// Sigma1(e)
    991 	eor	w10,w10,w21,ror#13
    992 	add	w20,w20,w17			// h+=Ch(e,f,g)
    993 	and	w19,w19,w28			// (b^c)&=(a^b)
    994 	eor	w8,w8,w1,ror#19
    995 	eor	w9,w9,w4,lsr#3	// sigma0(X[i+1])
    996 	add	w20,w20,w16			// h+=Sigma1(e)
    997 	eor	w19,w19,w22			// Maj(a,b,c)
    998 	eor	w17,w10,w21,ror#22	// Sigma0(a)
    999 	eor	w8,w8,w1,lsr#10	// sigma1(X[i+14])
   1000 	add	w3,w3,w12
   1001 	add	w24,w24,w20			// d+=h
   1002 	add	w20,w20,w19			// h+=Maj(a,b,c)
   1003 	ldr	w19,[x30],#4		// *K++, w28 in next round
   1004 	add	w3,w3,w9
   1005 	add	w20,w20,w17			// h+=Sigma0(a)
   1006 	add	w3,w3,w8
   1007 	cbnz	w19,.Loop_16_xx
   1008 
   1009 	ldp	x0,x2,[x29,#96]
   1010 	ldr	x1,[x29,#112]
   1011 	sub	x30,x30,#260		// rewind
   1012 
   1013 	ldp	w3,w4,[x0]
   1014 	ldp	w5,w6,[x0,#2*4]
   1015 	add	x1,x1,#14*4			// advance input pointer
   1016 	ldp	w7,w8,[x0,#4*4]
   1017 	add	w20,w20,w3
   1018 	ldp	w9,w10,[x0,#6*4]
   1019 	add	w21,w21,w4
   1020 	add	w22,w22,w5
   1021 	add	w23,w23,w6
   1022 	stp	w20,w21,[x0]
   1023 	add	w24,w24,w7
   1024 	add	w25,w25,w8
   1025 	stp	w22,w23,[x0,#2*4]
   1026 	add	w26,w26,w9
   1027 	add	w27,w27,w10
   1028 	cmp	x1,x2
   1029 	stp	w24,w25,[x0,#4*4]
   1030 	stp	w26,w27,[x0,#6*4]
   1031 	b.ne	.Loop
   1032 
   1033 	ldp	x19,x20,[x29,#16]
   1034 	add	sp,sp,#4*4
   1035 	ldp	x21,x22,[x29,#32]
   1036 	ldp	x23,x24,[x29,#48]
   1037 	ldp	x25,x26,[x29,#64]
   1038 	ldp	x27,x28,[x29,#80]
   1039 	ldp	x29,x30,[sp],#128
   1040 	AARCH64_VALIDATE_LINK_REGISTER
   1041 	ret
   1042 .size	sha256_block_data_order,.-sha256_block_data_order
   1043 
   1044 .section	.rodata
   1045 
   1046 .align	6
   1047 .type	.LK256,%object
   1048 .LK256:
   1049 .long	0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
   1050 .long	0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
   1051 .long	0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
   1052 .long	0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
   1053 .long	0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
   1054 .long	0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
   1055 .long	0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
   1056 .long	0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
   1057 .long	0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
   1058 .long	0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
   1059 .long	0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
   1060 .long	0xd192e819,0xd6990624,0xf40e3585,0x106aa070
   1061 .long	0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
   1062 .long	0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
   1063 .long	0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
   1064 .long	0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
   1065 .long	0	//terminator
   1066 .size	.LK256,.-.LK256
   1067 .byte	83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
   1068 .align	2
   1069 .align	2
   1070 
   1071 .text
   1072 #ifndef	__KERNEL__
   1073 .type	sha256_block_armv8,%function
   1074 .align	6
   1075 sha256_block_armv8:
   1076 .Lv8_entry:
   1077 	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
   1078 	stp	x29,x30,[sp,#-16]!
   1079 	add	x29,sp,#0
   1080 
   1081 	ld1	{v0.4s,v1.4s},[x0]
   1082 	adrp	x3,.LK256
   1083 	add	x3,x3,#:lo12:.LK256
   1084 
   1085 .Loop_hw:
   1086 	ld1	{v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
   1087 	sub	x2,x2,#1
   1088 	ld1	{v16.4s},[x3],#16
   1089 	rev32	v4.16b,v4.16b
   1090 	rev32	v5.16b,v5.16b
   1091 	rev32	v6.16b,v6.16b
   1092 	rev32	v7.16b,v7.16b
   1093 	orr	v18.16b,v0.16b,v0.16b		// offload
   1094 	orr	v19.16b,v1.16b,v1.16b
   1095 	ld1	{v17.4s},[x3],#16
   1096 	add	v16.4s,v16.4s,v4.4s
   1097 .inst	0x5e2828a4	//sha256su0 v4.16b,v5.16b
   1098 	orr	v2.16b,v0.16b,v0.16b
   1099 .inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
   1100 .inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
   1101 .inst	0x5e0760c4	//sha256su1 v4.16b,v6.16b,v7.16b
   1102 	ld1	{v16.4s},[x3],#16
   1103 	add	v17.4s,v17.4s,v5.4s
   1104 .inst	0x5e2828c5	//sha256su0 v5.16b,v6.16b
   1105 	orr	v2.16b,v0.16b,v0.16b
   1106 .inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
   1107 .inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
   1108 .inst	0x5e0460e5	//sha256su1 v5.16b,v7.16b,v4.16b
   1109 	ld1	{v17.4s},[x3],#16
   1110 	add	v16.4s,v16.4s,v6.4s
   1111 .inst	0x5e2828e6	//sha256su0 v6.16b,v7.16b
   1112 	orr	v2.16b,v0.16b,v0.16b
   1113 .inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
   1114 .inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
   1115 .inst	0x5e056086	//sha256su1 v6.16b,v4.16b,v5.16b
   1116 	ld1	{v16.4s},[x3],#16
   1117 	add	v17.4s,v17.4s,v7.4s
   1118 .inst	0x5e282887	//sha256su0 v7.16b,v4.16b
   1119 	orr	v2.16b,v0.16b,v0.16b
   1120 .inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
   1121 .inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
   1122 .inst	0x5e0660a7	//sha256su1 v7.16b,v5.16b,v6.16b
   1123 	ld1	{v17.4s},[x3],#16
   1124 	add	v16.4s,v16.4s,v4.4s
   1125 .inst	0x5e2828a4	//sha256su0 v4.16b,v5.16b
   1126 	orr	v2.16b,v0.16b,v0.16b
   1127 .inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
   1128 .inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
   1129 .inst	0x5e0760c4	//sha256su1 v4.16b,v6.16b,v7.16b
   1130 	ld1	{v16.4s},[x3],#16
   1131 	add	v17.4s,v17.4s,v5.4s
   1132 .inst	0x5e2828c5	//sha256su0 v5.16b,v6.16b
   1133 	orr	v2.16b,v0.16b,v0.16b
   1134 .inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
   1135 .inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
   1136 .inst	0x5e0460e5	//sha256su1 v5.16b,v7.16b,v4.16b
   1137 	ld1	{v17.4s},[x3],#16
   1138 	add	v16.4s,v16.4s,v6.4s
   1139 .inst	0x5e2828e6	//sha256su0 v6.16b,v7.16b
   1140 	orr	v2.16b,v0.16b,v0.16b
   1141 .inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
   1142 .inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
   1143 .inst	0x5e056086	//sha256su1 v6.16b,v4.16b,v5.16b
   1144 	ld1	{v16.4s},[x3],#16
   1145 	add	v17.4s,v17.4s,v7.4s
   1146 .inst	0x5e282887	//sha256su0 v7.16b,v4.16b
   1147 	orr	v2.16b,v0.16b,v0.16b
   1148 .inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
   1149 .inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
   1150 .inst	0x5e0660a7	//sha256su1 v7.16b,v5.16b,v6.16b
   1151 	ld1	{v17.4s},[x3],#16
   1152 	add	v16.4s,v16.4s,v4.4s
   1153 .inst	0x5e2828a4	//sha256su0 v4.16b,v5.16b
   1154 	orr	v2.16b,v0.16b,v0.16b
   1155 .inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
   1156 .inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
   1157 .inst	0x5e0760c4	//sha256su1 v4.16b,v6.16b,v7.16b
   1158 	ld1	{v16.4s},[x3],#16
   1159 	add	v17.4s,v17.4s,v5.4s
   1160 .inst	0x5e2828c5	//sha256su0 v5.16b,v6.16b
   1161 	orr	v2.16b,v0.16b,v0.16b
   1162 .inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
   1163 .inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
   1164 .inst	0x5e0460e5	//sha256su1 v5.16b,v7.16b,v4.16b
   1165 	ld1	{v17.4s},[x3],#16
   1166 	add	v16.4s,v16.4s,v6.4s
   1167 .inst	0x5e2828e6	//sha256su0 v6.16b,v7.16b
   1168 	orr	v2.16b,v0.16b,v0.16b
   1169 .inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
   1170 .inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
   1171 .inst	0x5e056086	//sha256su1 v6.16b,v4.16b,v5.16b
   1172 	ld1	{v16.4s},[x3],#16
   1173 	add	v17.4s,v17.4s,v7.4s
   1174 .inst	0x5e282887	//sha256su0 v7.16b,v4.16b
   1175 	orr	v2.16b,v0.16b,v0.16b
   1176 .inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
   1177 .inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
   1178 .inst	0x5e0660a7	//sha256su1 v7.16b,v5.16b,v6.16b
   1179 	ld1	{v17.4s},[x3],#16
   1180 	add	v16.4s,v16.4s,v4.4s
   1181 	orr	v2.16b,v0.16b,v0.16b
   1182 .inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
   1183 .inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
   1184 
   1185 	ld1	{v16.4s},[x3],#16
   1186 	add	v17.4s,v17.4s,v5.4s
   1187 	orr	v2.16b,v0.16b,v0.16b
   1188 .inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
   1189 .inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
   1190 
   1191 	ld1	{v17.4s},[x3]
   1192 	add	v16.4s,v16.4s,v6.4s
   1193 	sub	x3,x3,#64*4-16	// rewind
   1194 	orr	v2.16b,v0.16b,v0.16b
   1195 .inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
   1196 .inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
   1197 
   1198 	add	v17.4s,v17.4s,v7.4s
   1199 	orr	v2.16b,v0.16b,v0.16b
   1200 .inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
   1201 .inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
   1202 
   1203 	add	v0.4s,v0.4s,v18.4s
   1204 	add	v1.4s,v1.4s,v19.4s
   1205 
   1206 	cbnz	x2,.Loop_hw
   1207 
   1208 	st1	{v0.4s,v1.4s},[x0]
   1209 
   1210 	ldr	x29,[sp],#16
   1211 	ret
   1212 .size	sha256_block_armv8,.-sha256_block_armv8
   1213 #endif
   1214 #ifdef	__KERNEL__
   1215 .globl	sha256_block_neon
   1216 #endif
   1217 .type	sha256_block_neon,%function
   1218 .align	4
   1219 sha256_block_neon:
   1220 	AARCH64_VALID_CALL_TARGET
   1221 .Lneon_entry:
   1222 	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later
   1223 	stp	x29, x30, [sp, #-16]!
   1224 	mov	x29, sp
   1225 	sub	sp,sp,#16*4
   1226 
   1227 	adrp	x16,.LK256
   1228 	add	x16,x16,#:lo12:.LK256
   1229 	add	x2,x1,x2,lsl#6	// len to point at the end of inp
   1230 
   1231 	ld1	{v0.16b},[x1], #16
   1232 	ld1	{v1.16b},[x1], #16
   1233 	ld1	{v2.16b},[x1], #16
   1234 	ld1	{v3.16b},[x1], #16
   1235 	ld1	{v4.4s},[x16], #16
   1236 	ld1	{v5.4s},[x16], #16
   1237 	ld1	{v6.4s},[x16], #16
   1238 	ld1	{v7.4s},[x16], #16
   1239 	rev32	v0.16b,v0.16b		// yes, even on
   1240 	rev32	v1.16b,v1.16b		// big-endian
   1241 	rev32	v2.16b,v2.16b
   1242 	rev32	v3.16b,v3.16b
   1243 	mov	x17,sp
   1244 	add	v4.4s,v4.4s,v0.4s
   1245 	add	v5.4s,v5.4s,v1.4s
   1246 	add	v6.4s,v6.4s,v2.4s
   1247 	st1	{v4.4s,v5.4s},[x17], #32
   1248 	add	v7.4s,v7.4s,v3.4s
   1249 	st1	{v6.4s,v7.4s},[x17]
   1250 	sub	x17,x17,#32
   1251 
   1252 	ldp	w3,w4,[x0]
   1253 	ldp	w5,w6,[x0,#8]
   1254 	ldp	w7,w8,[x0,#16]
   1255 	ldp	w9,w10,[x0,#24]
   1256 	ldr	w12,[sp,#0]
   1257 	mov	w13,wzr
   1258 	eor	w14,w4,w5
   1259 	mov	w15,wzr
   1260 	b	.L_00_48
   1261 
   1262 .align	4
   1263 .L_00_48:
   1264 	ext	v4.16b,v0.16b,v1.16b,#4
   1265 	add	w10,w10,w12
   1266 	add	w3,w3,w15
   1267 	and	w12,w8,w7
   1268 	bic	w15,w9,w7
   1269 	ext	v7.16b,v2.16b,v3.16b,#4
   1270 	eor	w11,w7,w7,ror#5
   1271 	add	w3,w3,w13
   1272 	mov	d19,v3.d[1]
   1273 	orr	w12,w12,w15
   1274 	eor	w11,w11,w7,ror#19
   1275 	ushr	v6.4s,v4.4s,#7
   1276 	eor	w15,w3,w3,ror#11
   1277 	ushr	v5.4s,v4.4s,#3
   1278 	add	w10,w10,w12
   1279 	add	v0.4s,v0.4s,v7.4s
   1280 	ror	w11,w11,#6
   1281 	sli	v6.4s,v4.4s,#25
   1282 	eor	w13,w3,w4
   1283 	eor	w15,w15,w3,ror#20
   1284 	ushr	v7.4s,v4.4s,#18
   1285 	add	w10,w10,w11
   1286 	ldr	w12,[sp,#4]
   1287 	and	w14,w14,w13
   1288 	eor	v5.16b,v5.16b,v6.16b
   1289 	ror	w15,w15,#2
   1290 	add	w6,w6,w10
   1291 	sli	v7.4s,v4.4s,#14
   1292 	eor	w14,w14,w4
   1293 	ushr	v16.4s,v19.4s,#17
   1294 	add	w9,w9,w12
   1295 	add	w10,w10,w15
   1296 	and	w12,w7,w6
   1297 	eor	v5.16b,v5.16b,v7.16b
   1298 	bic	w15,w8,w6
   1299 	eor	w11,w6,w6,ror#5
   1300 	sli	v16.4s,v19.4s,#15
   1301 	add	w10,w10,w14
   1302 	orr	w12,w12,w15
   1303 	ushr	v17.4s,v19.4s,#10
   1304 	eor	w11,w11,w6,ror#19
   1305 	eor	w15,w10,w10,ror#11
   1306 	ushr	v7.4s,v19.4s,#19
   1307 	add	w9,w9,w12
   1308 	ror	w11,w11,#6
   1309 	add	v0.4s,v0.4s,v5.4s
   1310 	eor	w14,w10,w3
   1311 	eor	w15,w15,w10,ror#20
   1312 	sli	v7.4s,v19.4s,#13
   1313 	add	w9,w9,w11
   1314 	ldr	w12,[sp,#8]
   1315 	and	w13,w13,w14
   1316 	eor	v17.16b,v17.16b,v16.16b
   1317 	ror	w15,w15,#2
   1318 	add	w5,w5,w9
   1319 	eor	w13,w13,w3
   1320 	eor	v17.16b,v17.16b,v7.16b
   1321 	add	w8,w8,w12
   1322 	add	w9,w9,w15
   1323 	and	w12,w6,w5
   1324 	add	v0.4s,v0.4s,v17.4s
   1325 	bic	w15,w7,w5
   1326 	eor	w11,w5,w5,ror#5
   1327 	add	w9,w9,w13
   1328 	ushr	v18.4s,v0.4s,#17
   1329 	orr	w12,w12,w15
   1330 	ushr	v19.4s,v0.4s,#10
   1331 	eor	w11,w11,w5,ror#19
   1332 	eor	w15,w9,w9,ror#11
   1333 	sli	v18.4s,v0.4s,#15
   1334 	add	w8,w8,w12
   1335 	ushr	v17.4s,v0.4s,#19
   1336 	ror	w11,w11,#6
   1337 	eor	w13,w9,w10
   1338 	eor	v19.16b,v19.16b,v18.16b
   1339 	eor	w15,w15,w9,ror#20
   1340 	add	w8,w8,w11
   1341 	sli	v17.4s,v0.4s,#13
   1342 	ldr	w12,[sp,#12]
   1343 	and	w14,w14,w13
   1344 	ror	w15,w15,#2
   1345 	ld1	{v4.4s},[x16], #16
   1346 	add	w4,w4,w8
   1347 	eor	v19.16b,v19.16b,v17.16b
   1348 	eor	w14,w14,w10
   1349 	eor	v17.16b,v17.16b,v17.16b
   1350 	add	w7,w7,w12
   1351 	add	w8,w8,w15
   1352 	and	w12,w5,w4
   1353 	mov	v17.d[1],v19.d[0]
   1354 	bic	w15,w6,w4
   1355 	eor	w11,w4,w4,ror#5
   1356 	add	w8,w8,w14
   1357 	add	v0.4s,v0.4s,v17.4s
   1358 	orr	w12,w12,w15
   1359 	eor	w11,w11,w4,ror#19
   1360 	eor	w15,w8,w8,ror#11
   1361 	add	v4.4s,v4.4s,v0.4s
   1362 	add	w7,w7,w12
   1363 	ror	w11,w11,#6
   1364 	eor	w14,w8,w9
   1365 	eor	w15,w15,w8,ror#20
   1366 	add	w7,w7,w11
   1367 	ldr	w12,[sp,#16]
   1368 	and	w13,w13,w14
   1369 	ror	w15,w15,#2
   1370 	add	w3,w3,w7
   1371 	eor	w13,w13,w9
   1372 	st1	{v4.4s},[x17], #16
   1373 	ext	v4.16b,v1.16b,v2.16b,#4
   1374 	add	w6,w6,w12
   1375 	add	w7,w7,w15
   1376 	and	w12,w4,w3
   1377 	bic	w15,w5,w3
   1378 	ext	v7.16b,v3.16b,v0.16b,#4
   1379 	eor	w11,w3,w3,ror#5
   1380 	add	w7,w7,w13
   1381 	mov	d19,v0.d[1]
   1382 	orr	w12,w12,w15
   1383 	eor	w11,w11,w3,ror#19
   1384 	ushr	v6.4s,v4.4s,#7
   1385 	eor	w15,w7,w7,ror#11
   1386 	ushr	v5.4s,v4.4s,#3
   1387 	add	w6,w6,w12
   1388 	add	v1.4s,v1.4s,v7.4s
   1389 	ror	w11,w11,#6
   1390 	sli	v6.4s,v4.4s,#25
   1391 	eor	w13,w7,w8
   1392 	eor	w15,w15,w7,ror#20
   1393 	ushr	v7.4s,v4.4s,#18
   1394 	add	w6,w6,w11
   1395 	ldr	w12,[sp,#20]
   1396 	and	w14,w14,w13
   1397 	eor	v5.16b,v5.16b,v6.16b
   1398 	ror	w15,w15,#2
   1399 	add	w10,w10,w6
   1400 	sli	v7.4s,v4.4s,#14
   1401 	eor	w14,w14,w8
   1402 	ushr	v16.4s,v19.4s,#17
   1403 	add	w5,w5,w12
   1404 	add	w6,w6,w15
   1405 	and	w12,w3,w10
   1406 	eor	v5.16b,v5.16b,v7.16b
   1407 	bic	w15,w4,w10
   1408 	eor	w11,w10,w10,ror#5
   1409 	sli	v16.4s,v19.4s,#15
   1410 	add	w6,w6,w14
   1411 	orr	w12,w12,w15
   1412 	ushr	v17.4s,v19.4s,#10
   1413 	eor	w11,w11,w10,ror#19
   1414 	eor	w15,w6,w6,ror#11
   1415 	ushr	v7.4s,v19.4s,#19
   1416 	add	w5,w5,w12
   1417 	ror	w11,w11,#6
   1418 	add	v1.4s,v1.4s,v5.4s
   1419 	eor	w14,w6,w7
   1420 	eor	w15,w15,w6,ror#20
   1421 	sli	v7.4s,v19.4s,#13
   1422 	add	w5,w5,w11
   1423 	ldr	w12,[sp,#24]
   1424 	and	w13,w13,w14
   1425 	eor	v17.16b,v17.16b,v16.16b
   1426 	ror	w15,w15,#2
   1427 	add	w9,w9,w5
   1428 	eor	w13,w13,w7
   1429 	eor	v17.16b,v17.16b,v7.16b
   1430 	add	w4,w4,w12
   1431 	add	w5,w5,w15
   1432 	and	w12,w10,w9
   1433 	add	v1.4s,v1.4s,v17.4s
   1434 	bic	w15,w3,w9
   1435 	eor	w11,w9,w9,ror#5
   1436 	add	w5,w5,w13
   1437 	ushr	v18.4s,v1.4s,#17
   1438 	orr	w12,w12,w15
   1439 	ushr	v19.4s,v1.4s,#10
   1440 	eor	w11,w11,w9,ror#19
   1441 	eor	w15,w5,w5,ror#11
   1442 	sli	v18.4s,v1.4s,#15
   1443 	add	w4,w4,w12
   1444 	ushr	v17.4s,v1.4s,#19
   1445 	ror	w11,w11,#6
   1446 	eor	w13,w5,w6
   1447 	eor	v19.16b,v19.16b,v18.16b
   1448 	eor	w15,w15,w5,ror#20
   1449 	add	w4,w4,w11
   1450 	sli	v17.4s,v1.4s,#13
   1451 	ldr	w12,[sp,#28]
   1452 	and	w14,w14,w13
   1453 	ror	w15,w15,#2
   1454 	ld1	{v4.4s},[x16], #16
   1455 	add	w8,w8,w4
   1456 	eor	v19.16b,v19.16b,v17.16b
   1457 	eor	w14,w14,w6
   1458 	eor	v17.16b,v17.16b,v17.16b
   1459 	add	w3,w3,w12
   1460 	add	w4,w4,w15
   1461 	and	w12,w9,w8
   1462 	mov	v17.d[1],v19.d[0]
   1463 	bic	w15,w10,w8
   1464 	eor	w11,w8,w8,ror#5
   1465 	add	w4,w4,w14
   1466 	add	v1.4s,v1.4s,v17.4s
   1467 	orr	w12,w12,w15
   1468 	eor	w11,w11,w8,ror#19
   1469 	eor	w15,w4,w4,ror#11
   1470 	add	v4.4s,v4.4s,v1.4s
   1471 	add	w3,w3,w12
   1472 	ror	w11,w11,#6
   1473 	eor	w14,w4,w5
   1474 	eor	w15,w15,w4,ror#20
   1475 	add	w3,w3,w11
   1476 	ldr	w12,[sp,#32]
   1477 	and	w13,w13,w14
   1478 	ror	w15,w15,#2
   1479 	add	w7,w7,w3
   1480 	eor	w13,w13,w5
   1481 	st1	{v4.4s},[x17], #16
   1482 	ext	v4.16b,v2.16b,v3.16b,#4
   1483 	add	w10,w10,w12
   1484 	add	w3,w3,w15
   1485 	and	w12,w8,w7
   1486 	bic	w15,w9,w7
   1487 	ext	v7.16b,v0.16b,v1.16b,#4
   1488 	eor	w11,w7,w7,ror#5
   1489 	add	w3,w3,w13
   1490 	mov	d19,v1.d[1]
   1491 	orr	w12,w12,w15
   1492 	eor	w11,w11,w7,ror#19
   1493 	ushr	v6.4s,v4.4s,#7
   1494 	eor	w15,w3,w3,ror#11
   1495 	ushr	v5.4s,v4.4s,#3
   1496 	add	w10,w10,w12
   1497 	add	v2.4s,v2.4s,v7.4s
   1498 	ror	w11,w11,#6
   1499 	sli	v6.4s,v4.4s,#25
   1500 	eor	w13,w3,w4
   1501 	eor	w15,w15,w3,ror#20
   1502 	ushr	v7.4s,v4.4s,#18
   1503 	add	w10,w10,w11
   1504 	ldr	w12,[sp,#36]
   1505 	and	w14,w14,w13
   1506 	eor	v5.16b,v5.16b,v6.16b
   1507 	ror	w15,w15,#2
   1508 	add	w6,w6,w10
   1509 	sli	v7.4s,v4.4s,#14
   1510 	eor	w14,w14,w4
   1511 	ushr	v16.4s,v19.4s,#17
   1512 	add	w9,w9,w12
   1513 	add	w10,w10,w15
   1514 	and	w12,w7,w6
   1515 	eor	v5.16b,v5.16b,v7.16b
   1516 	bic	w15,w8,w6
   1517 	eor	w11,w6,w6,ror#5
   1518 	sli	v16.4s,v19.4s,#15
   1519 	add	w10,w10,w14
   1520 	orr	w12,w12,w15
   1521 	ushr	v17.4s,v19.4s,#10
   1522 	eor	w11,w11,w6,ror#19
   1523 	eor	w15,w10,w10,ror#11
   1524 	ushr	v7.4s,v19.4s,#19
   1525 	add	w9,w9,w12
   1526 	ror	w11,w11,#6
   1527 	add	v2.4s,v2.4s,v5.4s
   1528 	eor	w14,w10,w3
   1529 	eor	w15,w15,w10,ror#20
   1530 	sli	v7.4s,v19.4s,#13
   1531 	add	w9,w9,w11
   1532 	ldr	w12,[sp,#40]
   1533 	and	w13,w13,w14
   1534 	eor	v17.16b,v17.16b,v16.16b
   1535 	ror	w15,w15,#2
   1536 	add	w5,w5,w9
   1537 	eor	w13,w13,w3
   1538 	eor	v17.16b,v17.16b,v7.16b
   1539 	add	w8,w8,w12
   1540 	add	w9,w9,w15
   1541 	and	w12,w6,w5
   1542 	add	v2.4s,v2.4s,v17.4s
   1543 	bic	w15,w7,w5
   1544 	eor	w11,w5,w5,ror#5
   1545 	add	w9,w9,w13
   1546 	ushr	v18.4s,v2.4s,#17
   1547 	orr	w12,w12,w15
   1548 	ushr	v19.4s,v2.4s,#10
   1549 	eor	w11,w11,w5,ror#19
   1550 	eor	w15,w9,w9,ror#11
   1551 	sli	v18.4s,v2.4s,#15
   1552 	add	w8,w8,w12
   1553 	ushr	v17.4s,v2.4s,#19
   1554 	ror	w11,w11,#6
   1555 	eor	w13,w9,w10
   1556 	eor	v19.16b,v19.16b,v18.16b
   1557 	eor	w15,w15,w9,ror#20
   1558 	add	w8,w8,w11
   1559 	sli	v17.4s,v2.4s,#13
   1560 	ldr	w12,[sp,#44]
   1561 	and	w14,w14,w13
   1562 	ror	w15,w15,#2
   1563 	ld1	{v4.4s},[x16], #16
   1564 	add	w4,w4,w8
   1565 	eor	v19.16b,v19.16b,v17.16b
   1566 	eor	w14,w14,w10
   1567 	eor	v17.16b,v17.16b,v17.16b
   1568 	add	w7,w7,w12
   1569 	add	w8,w8,w15
   1570 	and	w12,w5,w4
   1571 	mov	v17.d[1],v19.d[0]
   1572 	bic	w15,w6,w4
   1573 	eor	w11,w4,w4,ror#5
   1574 	add	w8,w8,w14
   1575 	add	v2.4s,v2.4s,v17.4s
   1576 	orr	w12,w12,w15
   1577 	eor	w11,w11,w4,ror#19
   1578 	eor	w15,w8,w8,ror#11
   1579 	add	v4.4s,v4.4s,v2.4s
   1580 	add	w7,w7,w12
   1581 	ror	w11,w11,#6
   1582 	eor	w14,w8,w9
   1583 	eor	w15,w15,w8,ror#20
   1584 	add	w7,w7,w11
   1585 	ldr	w12,[sp,#48]
   1586 	and	w13,w13,w14
   1587 	ror	w15,w15,#2
   1588 	add	w3,w3,w7
   1589 	eor	w13,w13,w9
   1590 	st1	{v4.4s},[x17], #16
   1591 	ext	v4.16b,v3.16b,v0.16b,#4
   1592 	add	w6,w6,w12
   1593 	add	w7,w7,w15
   1594 	and	w12,w4,w3
   1595 	bic	w15,w5,w3
   1596 	ext	v7.16b,v1.16b,v2.16b,#4
   1597 	eor	w11,w3,w3,ror#5
   1598 	add	w7,w7,w13
   1599 	mov	d19,v2.d[1]
   1600 	orr	w12,w12,w15
   1601 	eor	w11,w11,w3,ror#19
   1602 	ushr	v6.4s,v4.4s,#7
   1603 	eor	w15,w7,w7,ror#11
   1604 	ushr	v5.4s,v4.4s,#3
   1605 	add	w6,w6,w12
   1606 	add	v3.4s,v3.4s,v7.4s
   1607 	ror	w11,w11,#6
   1608 	sli	v6.4s,v4.4s,#25
   1609 	eor	w13,w7,w8
   1610 	eor	w15,w15,w7,ror#20
   1611 	ushr	v7.4s,v4.4s,#18
   1612 	add	w6,w6,w11
   1613 	ldr	w12,[sp,#52]
   1614 	and	w14,w14,w13
   1615 	eor	v5.16b,v5.16b,v6.16b
   1616 	ror	w15,w15,#2
   1617 	add	w10,w10,w6
   1618 	sli	v7.4s,v4.4s,#14
   1619 	eor	w14,w14,w8
   1620 	ushr	v16.4s,v19.4s,#17
   1621 	add	w5,w5,w12
   1622 	add	w6,w6,w15
   1623 	and	w12,w3,w10
   1624 	eor	v5.16b,v5.16b,v7.16b
   1625 	bic	w15,w4,w10
   1626 	eor	w11,w10,w10,ror#5
   1627 	sli	v16.4s,v19.4s,#15
   1628 	add	w6,w6,w14
   1629 	orr	w12,w12,w15
   1630 	ushr	v17.4s,v19.4s,#10
   1631 	eor	w11,w11,w10,ror#19
   1632 	eor	w15,w6,w6,ror#11
   1633 	ushr	v7.4s,v19.4s,#19
   1634 	add	w5,w5,w12
   1635 	ror	w11,w11,#6
   1636 	add	v3.4s,v3.4s,v5.4s
   1637 	eor	w14,w6,w7
   1638 	eor	w15,w15,w6,ror#20
   1639 	sli	v7.4s,v19.4s,#13
   1640 	add	w5,w5,w11
   1641 	ldr	w12,[sp,#56]
   1642 	and	w13,w13,w14
   1643 	eor	v17.16b,v17.16b,v16.16b
   1644 	ror	w15,w15,#2
   1645 	add	w9,w9,w5
   1646 	eor	w13,w13,w7
   1647 	eor	v17.16b,v17.16b,v7.16b
   1648 	add	w4,w4,w12
   1649 	add	w5,w5,w15
   1650 	and	w12,w10,w9
   1651 	add	v3.4s,v3.4s,v17.4s
   1652 	bic	w15,w3,w9
   1653 	eor	w11,w9,w9,ror#5
   1654 	add	w5,w5,w13
   1655 	ushr	v18.4s,v3.4s,#17
   1656 	orr	w12,w12,w15
   1657 	ushr	v19.4s,v3.4s,#10
   1658 	eor	w11,w11,w9,ror#19
   1659 	eor	w15,w5,w5,ror#11
   1660 	sli	v18.4s,v3.4s,#15
   1661 	add	w4,w4,w12
   1662 	ushr	v17.4s,v3.4s,#19
   1663 	ror	w11,w11,#6
   1664 	eor	w13,w5,w6
   1665 	eor	v19.16b,v19.16b,v18.16b
   1666 	eor	w15,w15,w5,ror#20
   1667 	add	w4,w4,w11
   1668 	sli	v17.4s,v3.4s,#13
   1669 	ldr	w12,[sp,#60]
   1670 	and	w14,w14,w13
   1671 	ror	w15,w15,#2
   1672 	ld1	{v4.4s},[x16], #16
   1673 	add	w8,w8,w4
   1674 	eor	v19.16b,v19.16b,v17.16b
   1675 	eor	w14,w14,w6
   1676 	eor	v17.16b,v17.16b,v17.16b
   1677 	add	w3,w3,w12
   1678 	add	w4,w4,w15
   1679 	and	w12,w9,w8
   1680 	mov	v17.d[1],v19.d[0]
   1681 	bic	w15,w10,w8
   1682 	eor	w11,w8,w8,ror#5
   1683 	add	w4,w4,w14
   1684 	add	v3.4s,v3.4s,v17.4s
   1685 	orr	w12,w12,w15
   1686 	eor	w11,w11,w8,ror#19
   1687 	eor	w15,w4,w4,ror#11
   1688 	add	v4.4s,v4.4s,v3.4s
   1689 	add	w3,w3,w12
   1690 	ror	w11,w11,#6
   1691 	eor	w14,w4,w5
   1692 	eor	w15,w15,w4,ror#20
   1693 	add	w3,w3,w11
   1694 	ldr	w12,[x16]
   1695 	and	w13,w13,w14
   1696 	ror	w15,w15,#2
   1697 	add	w7,w7,w3
   1698 	eor	w13,w13,w5
   1699 	st1	{v4.4s},[x17], #16
   1700 	cmp	w12,#0				// check for K256 terminator
   1701 	ldr	w12,[sp,#0]
   1702 	sub	x17,x17,#64
   1703 	bne	.L_00_48
   1704 
   1705 	sub	x16,x16,#256		// rewind x16
   1706 	cmp	x1,x2
   1707 	mov	x17, #64
   1708 	csel	x17, x17, xzr, eq
   1709 	sub	x1,x1,x17			// avoid SEGV
   1710 	mov	x17,sp
   1711 	add	w10,w10,w12
   1712 	add	w3,w3,w15
   1713 	and	w12,w8,w7
   1714 	ld1	{v0.16b},[x1],#16
   1715 	bic	w15,w9,w7
   1716 	eor	w11,w7,w7,ror#5
   1717 	ld1	{v4.4s},[x16],#16
   1718 	add	w3,w3,w13
   1719 	orr	w12,w12,w15
   1720 	eor	w11,w11,w7,ror#19
   1721 	eor	w15,w3,w3,ror#11
   1722 	rev32	v0.16b,v0.16b
   1723 	add	w10,w10,w12
   1724 	ror	w11,w11,#6
   1725 	eor	w13,w3,w4
   1726 	eor	w15,w15,w3,ror#20
   1727 	add	v4.4s,v4.4s,v0.4s
   1728 	add	w10,w10,w11
   1729 	ldr	w12,[sp,#4]
   1730 	and	w14,w14,w13
   1731 	ror	w15,w15,#2
   1732 	add	w6,w6,w10
   1733 	eor	w14,w14,w4
   1734 	add	w9,w9,w12
   1735 	add	w10,w10,w15
   1736 	and	w12,w7,w6
   1737 	bic	w15,w8,w6
   1738 	eor	w11,w6,w6,ror#5
   1739 	add	w10,w10,w14
   1740 	orr	w12,w12,w15
   1741 	eor	w11,w11,w6,ror#19
   1742 	eor	w15,w10,w10,ror#11
   1743 	add	w9,w9,w12
   1744 	ror	w11,w11,#6
   1745 	eor	w14,w10,w3
   1746 	eor	w15,w15,w10,ror#20
   1747 	add	w9,w9,w11
   1748 	ldr	w12,[sp,#8]
   1749 	and	w13,w13,w14
   1750 	ror	w15,w15,#2
   1751 	add	w5,w5,w9
   1752 	eor	w13,w13,w3
   1753 	add	w8,w8,w12
   1754 	add	w9,w9,w15
   1755 	and	w12,w6,w5
   1756 	bic	w15,w7,w5
   1757 	eor	w11,w5,w5,ror#5
   1758 	add	w9,w9,w13
   1759 	orr	w12,w12,w15
   1760 	eor	w11,w11,w5,ror#19
   1761 	eor	w15,w9,w9,ror#11
   1762 	add	w8,w8,w12
   1763 	ror	w11,w11,#6
   1764 	eor	w13,w9,w10
   1765 	eor	w15,w15,w9,ror#20
   1766 	add	w8,w8,w11
   1767 	ldr	w12,[sp,#12]
   1768 	and	w14,w14,w13
   1769 	ror	w15,w15,#2
   1770 	add	w4,w4,w8
   1771 	eor	w14,w14,w10
   1772 	add	w7,w7,w12
   1773 	add	w8,w8,w15
   1774 	and	w12,w5,w4
   1775 	bic	w15,w6,w4
   1776 	eor	w11,w4,w4,ror#5
   1777 	add	w8,w8,w14
   1778 	orr	w12,w12,w15
   1779 	eor	w11,w11,w4,ror#19
   1780 	eor	w15,w8,w8,ror#11
   1781 	add	w7,w7,w12
   1782 	ror	w11,w11,#6
   1783 	eor	w14,w8,w9
   1784 	eor	w15,w15,w8,ror#20
   1785 	add	w7,w7,w11
   1786 	ldr	w12,[sp,#16]
   1787 	and	w13,w13,w14
   1788 	ror	w15,w15,#2
   1789 	add	w3,w3,w7
   1790 	eor	w13,w13,w9
   1791 	st1	{v4.4s},[x17], #16
   1792 	add	w6,w6,w12
   1793 	add	w7,w7,w15
   1794 	and	w12,w4,w3
   1795 	ld1	{v1.16b},[x1],#16
   1796 	bic	w15,w5,w3
   1797 	eor	w11,w3,w3,ror#5
   1798 	ld1	{v4.4s},[x16],#16
   1799 	add	w7,w7,w13
   1800 	orr	w12,w12,w15
   1801 	eor	w11,w11,w3,ror#19
   1802 	eor	w15,w7,w7,ror#11
   1803 	rev32	v1.16b,v1.16b
   1804 	add	w6,w6,w12
   1805 	ror	w11,w11,#6
   1806 	eor	w13,w7,w8
   1807 	eor	w15,w15,w7,ror#20
   1808 	add	v4.4s,v4.4s,v1.4s
   1809 	add	w6,w6,w11
   1810 	ldr	w12,[sp,#20]
   1811 	and	w14,w14,w13
   1812 	ror	w15,w15,#2
   1813 	add	w10,w10,w6
   1814 	eor	w14,w14,w8
   1815 	add	w5,w5,w12
   1816 	add	w6,w6,w15
   1817 	and	w12,w3,w10
   1818 	bic	w15,w4,w10
   1819 	eor	w11,w10,w10,ror#5
   1820 	add	w6,w6,w14
   1821 	orr	w12,w12,w15
   1822 	eor	w11,w11,w10,ror#19
   1823 	eor	w15,w6,w6,ror#11
   1824 	add	w5,w5,w12
   1825 	ror	w11,w11,#6
   1826 	eor	w14,w6,w7
   1827 	eor	w15,w15,w6,ror#20
   1828 	add	w5,w5,w11
   1829 	ldr	w12,[sp,#24]
   1830 	and	w13,w13,w14
   1831 	ror	w15,w15,#2
   1832 	add	w9,w9,w5
   1833 	eor	w13,w13,w7
   1834 	add	w4,w4,w12
   1835 	add	w5,w5,w15
   1836 	and	w12,w10,w9
   1837 	bic	w15,w3,w9
   1838 	eor	w11,w9,w9,ror#5
   1839 	add	w5,w5,w13
   1840 	orr	w12,w12,w15
   1841 	eor	w11,w11,w9,ror#19
   1842 	eor	w15,w5,w5,ror#11
   1843 	add	w4,w4,w12
   1844 	ror	w11,w11,#6
   1845 	eor	w13,w5,w6
   1846 	eor	w15,w15,w5,ror#20
   1847 	add	w4,w4,w11
   1848 	ldr	w12,[sp,#28]
   1849 	and	w14,w14,w13
   1850 	ror	w15,w15,#2
   1851 	add	w8,w8,w4
   1852 	eor	w14,w14,w6
   1853 	add	w3,w3,w12
   1854 	add	w4,w4,w15
   1855 	and	w12,w9,w8
   1856 	bic	w15,w10,w8
   1857 	eor	w11,w8,w8,ror#5
   1858 	add	w4,w4,w14
   1859 	orr	w12,w12,w15
   1860 	eor	w11,w11,w8,ror#19
   1861 	eor	w15,w4,w4,ror#11
   1862 	add	w3,w3,w12
   1863 	ror	w11,w11,#6
   1864 	eor	w14,w4,w5
   1865 	eor	w15,w15,w4,ror#20
   1866 	add	w3,w3,w11
   1867 	ldr	w12,[sp,#32]
   1868 	and	w13,w13,w14
   1869 	ror	w15,w15,#2
   1870 	add	w7,w7,w3
   1871 	eor	w13,w13,w5
   1872 	st1	{v4.4s},[x17], #16
   1873 	add	w10,w10,w12
   1874 	add	w3,w3,w15
   1875 	and	w12,w8,w7
   1876 	ld1	{v2.16b},[x1],#16
   1877 	bic	w15,w9,w7
   1878 	eor	w11,w7,w7,ror#5
   1879 	ld1	{v4.4s},[x16],#16
   1880 	add	w3,w3,w13
   1881 	orr	w12,w12,w15
   1882 	eor	w11,w11,w7,ror#19
   1883 	eor	w15,w3,w3,ror#11
   1884 	rev32	v2.16b,v2.16b
   1885 	add	w10,w10,w12
   1886 	ror	w11,w11,#6
   1887 	eor	w13,w3,w4
   1888 	eor	w15,w15,w3,ror#20
   1889 	add	v4.4s,v4.4s,v2.4s
   1890 	add	w10,w10,w11
   1891 	ldr	w12,[sp,#36]
   1892 	and	w14,w14,w13
   1893 	ror	w15,w15,#2
   1894 	add	w6,w6,w10
   1895 	eor	w14,w14,w4
   1896 	add	w9,w9,w12
   1897 	add	w10,w10,w15
   1898 	and	w12,w7,w6
   1899 	bic	w15,w8,w6
   1900 	eor	w11,w6,w6,ror#5
   1901 	add	w10,w10,w14
   1902 	orr	w12,w12,w15
   1903 	eor	w11,w11,w6,ror#19
   1904 	eor	w15,w10,w10,ror#11
   1905 	add	w9,w9,w12
   1906 	ror	w11,w11,#6
   1907 	eor	w14,w10,w3
   1908 	eor	w15,w15,w10,ror#20
   1909 	add	w9,w9,w11
   1910 	ldr	w12,[sp,#40]
   1911 	and	w13,w13,w14
   1912 	ror	w15,w15,#2
   1913 	add	w5,w5,w9
   1914 	eor	w13,w13,w3
   1915 	add	w8,w8,w12
   1916 	add	w9,w9,w15
   1917 	and	w12,w6,w5
   1918 	bic	w15,w7,w5
   1919 	eor	w11,w5,w5,ror#5
   1920 	add	w9,w9,w13
   1921 	orr	w12,w12,w15
   1922 	eor	w11,w11,w5,ror#19
   1923 	eor	w15,w9,w9,ror#11
   1924 	add	w8,w8,w12
   1925 	ror	w11,w11,#6
   1926 	eor	w13,w9,w10
   1927 	eor	w15,w15,w9,ror#20
   1928 	add	w8,w8,w11
   1929 	ldr	w12,[sp,#44]
   1930 	and	w14,w14,w13
   1931 	ror	w15,w15,#2
   1932 	add	w4,w4,w8
   1933 	eor	w14,w14,w10
   1934 	add	w7,w7,w12
   1935 	add	w8,w8,w15
   1936 	and	w12,w5,w4
   1937 	bic	w15,w6,w4
   1938 	eor	w11,w4,w4,ror#5
   1939 	add	w8,w8,w14
   1940 	orr	w12,w12,w15
   1941 	eor	w11,w11,w4,ror#19
   1942 	eor	w15,w8,w8,ror#11
   1943 	add	w7,w7,w12
   1944 	ror	w11,w11,#6
   1945 	eor	w14,w8,w9
   1946 	eor	w15,w15,w8,ror#20
   1947 	add	w7,w7,w11
   1948 	ldr	w12,[sp,#48]
   1949 	and	w13,w13,w14
   1950 	ror	w15,w15,#2
   1951 	add	w3,w3,w7
   1952 	eor	w13,w13,w9
   1953 	st1	{v4.4s},[x17], #16
   1954 	add	w6,w6,w12
   1955 	add	w7,w7,w15
   1956 	and	w12,w4,w3
   1957 	ld1	{v3.16b},[x1],#16
   1958 	bic	w15,w5,w3
   1959 	eor	w11,w3,w3,ror#5
   1960 	ld1	{v4.4s},[x16],#16
   1961 	add	w7,w7,w13
   1962 	orr	w12,w12,w15
   1963 	eor	w11,w11,w3,ror#19
   1964 	eor	w15,w7,w7,ror#11
   1965 	rev32	v3.16b,v3.16b
   1966 	add	w6,w6,w12
   1967 	ror	w11,w11,#6
   1968 	eor	w13,w7,w8
   1969 	eor	w15,w15,w7,ror#20
   1970 	add	v4.4s,v4.4s,v3.4s
   1971 	add	w6,w6,w11
   1972 	ldr	w12,[sp,#52]
   1973 	and	w14,w14,w13
   1974 	ror	w15,w15,#2
   1975 	add	w10,w10,w6
   1976 	eor	w14,w14,w8
   1977 	add	w5,w5,w12
   1978 	add	w6,w6,w15
   1979 	and	w12,w3,w10
   1980 	bic	w15,w4,w10
   1981 	eor	w11,w10,w10,ror#5
   1982 	add	w6,w6,w14
   1983 	orr	w12,w12,w15
   1984 	eor	w11,w11,w10,ror#19
   1985 	eor	w15,w6,w6,ror#11
   1986 	add	w5,w5,w12
   1987 	ror	w11,w11,#6
   1988 	eor	w14,w6,w7
   1989 	eor	w15,w15,w6,ror#20
   1990 	add	w5,w5,w11
   1991 	ldr	w12,[sp,#56]
   1992 	and	w13,w13,w14
   1993 	ror	w15,w15,#2
   1994 	add	w9,w9,w5
   1995 	eor	w13,w13,w7
   1996 	add	w4,w4,w12
   1997 	add	w5,w5,w15
   1998 	and	w12,w10,w9
   1999 	bic	w15,w3,w9
   2000 	eor	w11,w9,w9,ror#5
   2001 	add	w5,w5,w13
   2002 	orr	w12,w12,w15
   2003 	eor	w11,w11,w9,ror#19
   2004 	eor	w15,w5,w5,ror#11
   2005 	add	w4,w4,w12
   2006 	ror	w11,w11,#6
   2007 	eor	w13,w5,w6
   2008 	eor	w15,w15,w5,ror#20
   2009 	add	w4,w4,w11
   2010 	ldr	w12,[sp,#60]
   2011 	and	w14,w14,w13
   2012 	ror	w15,w15,#2
   2013 	add	w8,w8,w4
   2014 	eor	w14,w14,w6
   2015 	add	w3,w3,w12
   2016 	add	w4,w4,w15
   2017 	and	w12,w9,w8
   2018 	bic	w15,w10,w8
   2019 	eor	w11,w8,w8,ror#5
   2020 	add	w4,w4,w14
   2021 	orr	w12,w12,w15
   2022 	eor	w11,w11,w8,ror#19
   2023 	eor	w15,w4,w4,ror#11
   2024 	add	w3,w3,w12
   2025 	ror	w11,w11,#6
   2026 	eor	w14,w4,w5
   2027 	eor	w15,w15,w4,ror#20
   2028 	add	w3,w3,w11
   2029 	and	w13,w13,w14
   2030 	ror	w15,w15,#2
   2031 	add	w7,w7,w3
   2032 	eor	w13,w13,w5
   2033 	st1	{v4.4s},[x17], #16
   2034 	add	w3,w3,w15			// h+=Sigma0(a) from the past
   2035 	ldp	w11,w12,[x0,#0]
   2036 	add	w3,w3,w13			// h+=Maj(a,b,c) from the past
   2037 	ldp	w13,w14,[x0,#8]
   2038 	add	w3,w3,w11			// accumulate
   2039 	add	w4,w4,w12
   2040 	ldp	w11,w12,[x0,#16]
   2041 	add	w5,w5,w13
   2042 	add	w6,w6,w14
   2043 	ldp	w13,w14,[x0,#24]
   2044 	add	w7,w7,w11
   2045 	add	w8,w8,w12
   2046 	ldr	w12,[sp,#0]
   2047 	stp	w3,w4,[x0,#0]
   2048 	add	w9,w9,w13
   2049 	mov	w13,wzr
   2050 	stp	w5,w6,[x0,#8]
   2051 	add	w10,w10,w14
   2052 	stp	w7,w8,[x0,#16]
   2053 	eor	w14,w4,w5
   2054 	stp	w9,w10,[x0,#24]
   2055 	mov	w15,wzr
   2056 	mov	x17,sp
   2057 	b.ne	.L_00_48
   2058 
   2059 	ldr	x29,[x29]
   2060 	add	sp,sp,#16*4+16
   2061 	ret
   2062 .size	sha256_block_neon,.-sha256_block_neon
   2063