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