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