Home | History | Annotate | Download | only in fipsmodule
      1 #include <openssl/arm_arch.h>
      2 
      3 .text
      4 
      5 
      6 .globl	_sha1_block_data_order
      7 .private_extern	_sha1_block_data_order
      8 
      9 .align	6
     10 _sha1_block_data_order:
     11 #ifdef	__ILP32__
     12 	ldrsw	x16,LOPENSSL_armcap_P
     13 #else
     14 	ldr	x16,LOPENSSL_armcap_P
     15 #endif
     16 	adr	x17,LOPENSSL_armcap_P
     17 	add	x16,x16,x17
     18 	ldr	w16,[x16]
     19 	tst	w16,#ARMV8_SHA1
     20 	b.ne	Lv8_entry
     21 
     22 	stp	x29,x30,[sp,#-96]!
     23 	add	x29,sp,#0
     24 	stp	x19,x20,[sp,#16]
     25 	stp	x21,x22,[sp,#32]
     26 	stp	x23,x24,[sp,#48]
     27 	stp	x25,x26,[sp,#64]
     28 	stp	x27,x28,[sp,#80]
     29 
     30 	ldp	w20,w21,[x0]
     31 	ldp	w22,w23,[x0,#8]
     32 	ldr	w24,[x0,#16]
     33 
     34 Loop:
     35 	ldr	x3,[x1],#64
     36 	movz	w28,#0x7999
     37 	sub	x2,x2,#1
     38 	movk	w28,#0x5a82,lsl#16
     39 #ifdef	__ARMEB__
     40 	ror	x3,x3,#32
     41 #else
     42 	rev32	x3,x3
     43 #endif
     44 	add	w24,w24,w28		// warm it up
     45 	add	w24,w24,w3
     46 	lsr	x4,x3,#32
     47 	ldr	x5,[x1,#-56]
     48 	bic	w25,w23,w21
     49 	and	w26,w22,w21
     50 	ror	w27,w20,#27
     51 	add	w23,w23,w28		// future e+=K
     52 	orr	w25,w25,w26
     53 	add	w24,w24,w27		// e+=rot(a,5)
     54 	ror	w21,w21,#2
     55 	add	w23,w23,w4	// future e+=X[i]
     56 	add	w24,w24,w25		// e+=F(b,c,d)
     57 #ifdef	__ARMEB__
     58 	ror	x5,x5,#32
     59 #else
     60 	rev32	x5,x5
     61 #endif
     62 	bic	w25,w22,w20
     63 	and	w26,w21,w20
     64 	ror	w27,w24,#27
     65 	add	w22,w22,w28		// future e+=K
     66 	orr	w25,w25,w26
     67 	add	w23,w23,w27		// e+=rot(a,5)
     68 	ror	w20,w20,#2
     69 	add	w22,w22,w5	// future e+=X[i]
     70 	add	w23,w23,w25		// e+=F(b,c,d)
     71 	lsr	x6,x5,#32
     72 	ldr	x7,[x1,#-48]
     73 	bic	w25,w21,w24
     74 	and	w26,w20,w24
     75 	ror	w27,w23,#27
     76 	add	w21,w21,w28		// future e+=K
     77 	orr	w25,w25,w26
     78 	add	w22,w22,w27		// e+=rot(a,5)
     79 	ror	w24,w24,#2
     80 	add	w21,w21,w6	// future e+=X[i]
     81 	add	w22,w22,w25		// e+=F(b,c,d)
     82 #ifdef	__ARMEB__
     83 	ror	x7,x7,#32
     84 #else
     85 	rev32	x7,x7
     86 #endif
     87 	bic	w25,w20,w23
     88 	and	w26,w24,w23
     89 	ror	w27,w22,#27
     90 	add	w20,w20,w28		// future e+=K
     91 	orr	w25,w25,w26
     92 	add	w21,w21,w27		// e+=rot(a,5)
     93 	ror	w23,w23,#2
     94 	add	w20,w20,w7	// future e+=X[i]
     95 	add	w21,w21,w25		// e+=F(b,c,d)
     96 	lsr	x8,x7,#32
     97 	ldr	x9,[x1,#-40]
     98 	bic	w25,w24,w22
     99 	and	w26,w23,w22
    100 	ror	w27,w21,#27
    101 	add	w24,w24,w28		// future e+=K
    102 	orr	w25,w25,w26
    103 	add	w20,w20,w27		// e+=rot(a,5)
    104 	ror	w22,w22,#2
    105 	add	w24,w24,w8	// future e+=X[i]
    106 	add	w20,w20,w25		// e+=F(b,c,d)
    107 #ifdef	__ARMEB__
    108 	ror	x9,x9,#32
    109 #else
    110 	rev32	x9,x9
    111 #endif
    112 	bic	w25,w23,w21
    113 	and	w26,w22,w21
    114 	ror	w27,w20,#27
    115 	add	w23,w23,w28		// future e+=K
    116 	orr	w25,w25,w26
    117 	add	w24,w24,w27		// e+=rot(a,5)
    118 	ror	w21,w21,#2
    119 	add	w23,w23,w9	// future e+=X[i]
    120 	add	w24,w24,w25		// e+=F(b,c,d)
    121 	lsr	x10,x9,#32
    122 	ldr	x11,[x1,#-32]
    123 	bic	w25,w22,w20
    124 	and	w26,w21,w20
    125 	ror	w27,w24,#27
    126 	add	w22,w22,w28		// future e+=K
    127 	orr	w25,w25,w26
    128 	add	w23,w23,w27		// e+=rot(a,5)
    129 	ror	w20,w20,#2
    130 	add	w22,w22,w10	// future e+=X[i]
    131 	add	w23,w23,w25		// e+=F(b,c,d)
    132 #ifdef	__ARMEB__
    133 	ror	x11,x11,#32
    134 #else
    135 	rev32	x11,x11
    136 #endif
    137 	bic	w25,w21,w24
    138 	and	w26,w20,w24
    139 	ror	w27,w23,#27
    140 	add	w21,w21,w28		// future e+=K
    141 	orr	w25,w25,w26
    142 	add	w22,w22,w27		// e+=rot(a,5)
    143 	ror	w24,w24,#2
    144 	add	w21,w21,w11	// future e+=X[i]
    145 	add	w22,w22,w25		// e+=F(b,c,d)
    146 	lsr	x12,x11,#32
    147 	ldr	x13,[x1,#-24]
    148 	bic	w25,w20,w23
    149 	and	w26,w24,w23
    150 	ror	w27,w22,#27
    151 	add	w20,w20,w28		// future e+=K
    152 	orr	w25,w25,w26
    153 	add	w21,w21,w27		// e+=rot(a,5)
    154 	ror	w23,w23,#2
    155 	add	w20,w20,w12	// future e+=X[i]
    156 	add	w21,w21,w25		// e+=F(b,c,d)
    157 #ifdef	__ARMEB__
    158 	ror	x13,x13,#32
    159 #else
    160 	rev32	x13,x13
    161 #endif
    162 	bic	w25,w24,w22
    163 	and	w26,w23,w22
    164 	ror	w27,w21,#27
    165 	add	w24,w24,w28		// future e+=K
    166 	orr	w25,w25,w26
    167 	add	w20,w20,w27		// e+=rot(a,5)
    168 	ror	w22,w22,#2
    169 	add	w24,w24,w13	// future e+=X[i]
    170 	add	w20,w20,w25		// e+=F(b,c,d)
    171 	lsr	x14,x13,#32
    172 	ldr	x15,[x1,#-16]
    173 	bic	w25,w23,w21
    174 	and	w26,w22,w21
    175 	ror	w27,w20,#27
    176 	add	w23,w23,w28		// future e+=K
    177 	orr	w25,w25,w26
    178 	add	w24,w24,w27		// e+=rot(a,5)
    179 	ror	w21,w21,#2
    180 	add	w23,w23,w14	// future e+=X[i]
    181 	add	w24,w24,w25		// e+=F(b,c,d)
    182 #ifdef	__ARMEB__
    183 	ror	x15,x15,#32
    184 #else
    185 	rev32	x15,x15
    186 #endif
    187 	bic	w25,w22,w20
    188 	and	w26,w21,w20
    189 	ror	w27,w24,#27
    190 	add	w22,w22,w28		// future e+=K
    191 	orr	w25,w25,w26
    192 	add	w23,w23,w27		// e+=rot(a,5)
    193 	ror	w20,w20,#2
    194 	add	w22,w22,w15	// future e+=X[i]
    195 	add	w23,w23,w25		// e+=F(b,c,d)
    196 	lsr	x16,x15,#32
    197 	ldr	x17,[x1,#-8]
    198 	bic	w25,w21,w24
    199 	and	w26,w20,w24
    200 	ror	w27,w23,#27
    201 	add	w21,w21,w28		// future e+=K
    202 	orr	w25,w25,w26
    203 	add	w22,w22,w27		// e+=rot(a,5)
    204 	ror	w24,w24,#2
    205 	add	w21,w21,w16	// future e+=X[i]
    206 	add	w22,w22,w25		// e+=F(b,c,d)
    207 #ifdef	__ARMEB__
    208 	ror	x17,x17,#32
    209 #else
    210 	rev32	x17,x17
    211 #endif
    212 	bic	w25,w20,w23
    213 	and	w26,w24,w23
    214 	ror	w27,w22,#27
    215 	add	w20,w20,w28		// future e+=K
    216 	orr	w25,w25,w26
    217 	add	w21,w21,w27		// e+=rot(a,5)
    218 	ror	w23,w23,#2
    219 	add	w20,w20,w17	// future e+=X[i]
    220 	add	w21,w21,w25		// e+=F(b,c,d)
    221 	lsr	x19,x17,#32
    222 	eor	w3,w3,w5
    223 	bic	w25,w24,w22
    224 	and	w26,w23,w22
    225 	ror	w27,w21,#27
    226 	eor	w3,w3,w11
    227 	add	w24,w24,w28		// future e+=K
    228 	orr	w25,w25,w26
    229 	add	w20,w20,w27		// e+=rot(a,5)
    230 	eor	w3,w3,w16
    231 	ror	w22,w22,#2
    232 	add	w24,w24,w19	// future e+=X[i]
    233 	add	w20,w20,w25		// e+=F(b,c,d)
    234 	ror	w3,w3,#31
    235 	eor	w4,w4,w6
    236 	bic	w25,w23,w21
    237 	and	w26,w22,w21
    238 	ror	w27,w20,#27
    239 	eor	w4,w4,w12
    240 	add	w23,w23,w28		// future e+=K
    241 	orr	w25,w25,w26
    242 	add	w24,w24,w27		// e+=rot(a,5)
    243 	eor	w4,w4,w17
    244 	ror	w21,w21,#2
    245 	add	w23,w23,w3	// future e+=X[i]
    246 	add	w24,w24,w25		// e+=F(b,c,d)
    247 	ror	w4,w4,#31
    248 	eor	w5,w5,w7
    249 	bic	w25,w22,w20
    250 	and	w26,w21,w20
    251 	ror	w27,w24,#27
    252 	eor	w5,w5,w13
    253 	add	w22,w22,w28		// future e+=K
    254 	orr	w25,w25,w26
    255 	add	w23,w23,w27		// e+=rot(a,5)
    256 	eor	w5,w5,w19
    257 	ror	w20,w20,#2
    258 	add	w22,w22,w4	// future e+=X[i]
    259 	add	w23,w23,w25		// e+=F(b,c,d)
    260 	ror	w5,w5,#31
    261 	eor	w6,w6,w8
    262 	bic	w25,w21,w24
    263 	and	w26,w20,w24
    264 	ror	w27,w23,#27
    265 	eor	w6,w6,w14
    266 	add	w21,w21,w28		// future e+=K
    267 	orr	w25,w25,w26
    268 	add	w22,w22,w27		// e+=rot(a,5)
    269 	eor	w6,w6,w3
    270 	ror	w24,w24,#2
    271 	add	w21,w21,w5	// future e+=X[i]
    272 	add	w22,w22,w25		// e+=F(b,c,d)
    273 	ror	w6,w6,#31
    274 	eor	w7,w7,w9
    275 	bic	w25,w20,w23
    276 	and	w26,w24,w23
    277 	ror	w27,w22,#27
    278 	eor	w7,w7,w15
    279 	add	w20,w20,w28		// future e+=K
    280 	orr	w25,w25,w26
    281 	add	w21,w21,w27		// e+=rot(a,5)
    282 	eor	w7,w7,w4
    283 	ror	w23,w23,#2
    284 	add	w20,w20,w6	// future e+=X[i]
    285 	add	w21,w21,w25		// e+=F(b,c,d)
    286 	ror	w7,w7,#31
    287 	movz	w28,#0xeba1
    288 	movk	w28,#0x6ed9,lsl#16
    289 	eor	w8,w8,w10
    290 	bic	w25,w24,w22
    291 	and	w26,w23,w22
    292 	ror	w27,w21,#27
    293 	eor	w8,w8,w16
    294 	add	w24,w24,w28		// future e+=K
    295 	orr	w25,w25,w26
    296 	add	w20,w20,w27		// e+=rot(a,5)
    297 	eor	w8,w8,w5
    298 	ror	w22,w22,#2
    299 	add	w24,w24,w7	// future e+=X[i]
    300 	add	w20,w20,w25		// e+=F(b,c,d)
    301 	ror	w8,w8,#31
    302 	eor	w9,w9,w11
    303 	eor	w25,w23,w21
    304 	ror	w27,w20,#27
    305 	add	w23,w23,w28		// future e+=K
    306 	eor	w9,w9,w17
    307 	eor	w25,w25,w22
    308 	add	w24,w24,w27		// e+=rot(a,5)
    309 	ror	w21,w21,#2
    310 	eor	w9,w9,w6
    311 	add	w23,w23,w8	// future e+=X[i]
    312 	add	w24,w24,w25		// e+=F(b,c,d)
    313 	ror	w9,w9,#31
    314 	eor	w10,w10,w12
    315 	eor	w25,w22,w20
    316 	ror	w27,w24,#27
    317 	add	w22,w22,w28		// future e+=K
    318 	eor	w10,w10,w19
    319 	eor	w25,w25,w21
    320 	add	w23,w23,w27		// e+=rot(a,5)
    321 	ror	w20,w20,#2
    322 	eor	w10,w10,w7
    323 	add	w22,w22,w9	// future e+=X[i]
    324 	add	w23,w23,w25		// e+=F(b,c,d)
    325 	ror	w10,w10,#31
    326 	eor	w11,w11,w13
    327 	eor	w25,w21,w24
    328 	ror	w27,w23,#27
    329 	add	w21,w21,w28		// future e+=K
    330 	eor	w11,w11,w3
    331 	eor	w25,w25,w20
    332 	add	w22,w22,w27		// e+=rot(a,5)
    333 	ror	w24,w24,#2
    334 	eor	w11,w11,w8
    335 	add	w21,w21,w10	// future e+=X[i]
    336 	add	w22,w22,w25		// e+=F(b,c,d)
    337 	ror	w11,w11,#31
    338 	eor	w12,w12,w14
    339 	eor	w25,w20,w23
    340 	ror	w27,w22,#27
    341 	add	w20,w20,w28		// future e+=K
    342 	eor	w12,w12,w4
    343 	eor	w25,w25,w24
    344 	add	w21,w21,w27		// e+=rot(a,5)
    345 	ror	w23,w23,#2
    346 	eor	w12,w12,w9
    347 	add	w20,w20,w11	// future e+=X[i]
    348 	add	w21,w21,w25		// e+=F(b,c,d)
    349 	ror	w12,w12,#31
    350 	eor	w13,w13,w15
    351 	eor	w25,w24,w22
    352 	ror	w27,w21,#27
    353 	add	w24,w24,w28		// future e+=K
    354 	eor	w13,w13,w5
    355 	eor	w25,w25,w23
    356 	add	w20,w20,w27		// e+=rot(a,5)
    357 	ror	w22,w22,#2
    358 	eor	w13,w13,w10
    359 	add	w24,w24,w12	// future e+=X[i]
    360 	add	w20,w20,w25		// e+=F(b,c,d)
    361 	ror	w13,w13,#31
    362 	eor	w14,w14,w16
    363 	eor	w25,w23,w21
    364 	ror	w27,w20,#27
    365 	add	w23,w23,w28		// future e+=K
    366 	eor	w14,w14,w6
    367 	eor	w25,w25,w22
    368 	add	w24,w24,w27		// e+=rot(a,5)
    369 	ror	w21,w21,#2
    370 	eor	w14,w14,w11
    371 	add	w23,w23,w13	// future e+=X[i]
    372 	add	w24,w24,w25		// e+=F(b,c,d)
    373 	ror	w14,w14,#31
    374 	eor	w15,w15,w17
    375 	eor	w25,w22,w20
    376 	ror	w27,w24,#27
    377 	add	w22,w22,w28		// future e+=K
    378 	eor	w15,w15,w7
    379 	eor	w25,w25,w21
    380 	add	w23,w23,w27		// e+=rot(a,5)
    381 	ror	w20,w20,#2
    382 	eor	w15,w15,w12
    383 	add	w22,w22,w14	// future e+=X[i]
    384 	add	w23,w23,w25		// e+=F(b,c,d)
    385 	ror	w15,w15,#31
    386 	eor	w16,w16,w19
    387 	eor	w25,w21,w24
    388 	ror	w27,w23,#27
    389 	add	w21,w21,w28		// future e+=K
    390 	eor	w16,w16,w8
    391 	eor	w25,w25,w20
    392 	add	w22,w22,w27		// e+=rot(a,5)
    393 	ror	w24,w24,#2
    394 	eor	w16,w16,w13
    395 	add	w21,w21,w15	// future e+=X[i]
    396 	add	w22,w22,w25		// e+=F(b,c,d)
    397 	ror	w16,w16,#31
    398 	eor	w17,w17,w3
    399 	eor	w25,w20,w23
    400 	ror	w27,w22,#27
    401 	add	w20,w20,w28		// future e+=K
    402 	eor	w17,w17,w9
    403 	eor	w25,w25,w24
    404 	add	w21,w21,w27		// e+=rot(a,5)
    405 	ror	w23,w23,#2
    406 	eor	w17,w17,w14
    407 	add	w20,w20,w16	// future e+=X[i]
    408 	add	w21,w21,w25		// e+=F(b,c,d)
    409 	ror	w17,w17,#31
    410 	eor	w19,w19,w4
    411 	eor	w25,w24,w22
    412 	ror	w27,w21,#27
    413 	add	w24,w24,w28		// future e+=K
    414 	eor	w19,w19,w10
    415 	eor	w25,w25,w23
    416 	add	w20,w20,w27		// e+=rot(a,5)
    417 	ror	w22,w22,#2
    418 	eor	w19,w19,w15
    419 	add	w24,w24,w17	// future e+=X[i]
    420 	add	w20,w20,w25		// e+=F(b,c,d)
    421 	ror	w19,w19,#31
    422 	eor	w3,w3,w5
    423 	eor	w25,w23,w21
    424 	ror	w27,w20,#27
    425 	add	w23,w23,w28		// future e+=K
    426 	eor	w3,w3,w11
    427 	eor	w25,w25,w22
    428 	add	w24,w24,w27		// e+=rot(a,5)
    429 	ror	w21,w21,#2
    430 	eor	w3,w3,w16
    431 	add	w23,w23,w19	// future e+=X[i]
    432 	add	w24,w24,w25		// e+=F(b,c,d)
    433 	ror	w3,w3,#31
    434 	eor	w4,w4,w6
    435 	eor	w25,w22,w20
    436 	ror	w27,w24,#27
    437 	add	w22,w22,w28		// future e+=K
    438 	eor	w4,w4,w12
    439 	eor	w25,w25,w21
    440 	add	w23,w23,w27		// e+=rot(a,5)
    441 	ror	w20,w20,#2
    442 	eor	w4,w4,w17
    443 	add	w22,w22,w3	// future e+=X[i]
    444 	add	w23,w23,w25		// e+=F(b,c,d)
    445 	ror	w4,w4,#31
    446 	eor	w5,w5,w7
    447 	eor	w25,w21,w24
    448 	ror	w27,w23,#27
    449 	add	w21,w21,w28		// future e+=K
    450 	eor	w5,w5,w13
    451 	eor	w25,w25,w20
    452 	add	w22,w22,w27		// e+=rot(a,5)
    453 	ror	w24,w24,#2
    454 	eor	w5,w5,w19
    455 	add	w21,w21,w4	// future e+=X[i]
    456 	add	w22,w22,w25		// e+=F(b,c,d)
    457 	ror	w5,w5,#31
    458 	eor	w6,w6,w8
    459 	eor	w25,w20,w23
    460 	ror	w27,w22,#27
    461 	add	w20,w20,w28		// future e+=K
    462 	eor	w6,w6,w14
    463 	eor	w25,w25,w24
    464 	add	w21,w21,w27		// e+=rot(a,5)
    465 	ror	w23,w23,#2
    466 	eor	w6,w6,w3
    467 	add	w20,w20,w5	// future e+=X[i]
    468 	add	w21,w21,w25		// e+=F(b,c,d)
    469 	ror	w6,w6,#31
    470 	eor	w7,w7,w9
    471 	eor	w25,w24,w22
    472 	ror	w27,w21,#27
    473 	add	w24,w24,w28		// future e+=K
    474 	eor	w7,w7,w15
    475 	eor	w25,w25,w23
    476 	add	w20,w20,w27		// e+=rot(a,5)
    477 	ror	w22,w22,#2
    478 	eor	w7,w7,w4
    479 	add	w24,w24,w6	// future e+=X[i]
    480 	add	w20,w20,w25		// e+=F(b,c,d)
    481 	ror	w7,w7,#31
    482 	eor	w8,w8,w10
    483 	eor	w25,w23,w21
    484 	ror	w27,w20,#27
    485 	add	w23,w23,w28		// future e+=K
    486 	eor	w8,w8,w16
    487 	eor	w25,w25,w22
    488 	add	w24,w24,w27		// e+=rot(a,5)
    489 	ror	w21,w21,#2
    490 	eor	w8,w8,w5
    491 	add	w23,w23,w7	// future e+=X[i]
    492 	add	w24,w24,w25		// e+=F(b,c,d)
    493 	ror	w8,w8,#31
    494 	eor	w9,w9,w11
    495 	eor	w25,w22,w20
    496 	ror	w27,w24,#27
    497 	add	w22,w22,w28		// future e+=K
    498 	eor	w9,w9,w17
    499 	eor	w25,w25,w21
    500 	add	w23,w23,w27		// e+=rot(a,5)
    501 	ror	w20,w20,#2
    502 	eor	w9,w9,w6
    503 	add	w22,w22,w8	// future e+=X[i]
    504 	add	w23,w23,w25		// e+=F(b,c,d)
    505 	ror	w9,w9,#31
    506 	eor	w10,w10,w12
    507 	eor	w25,w21,w24
    508 	ror	w27,w23,#27
    509 	add	w21,w21,w28		// future e+=K
    510 	eor	w10,w10,w19
    511 	eor	w25,w25,w20
    512 	add	w22,w22,w27		// e+=rot(a,5)
    513 	ror	w24,w24,#2
    514 	eor	w10,w10,w7
    515 	add	w21,w21,w9	// future e+=X[i]
    516 	add	w22,w22,w25		// e+=F(b,c,d)
    517 	ror	w10,w10,#31
    518 	eor	w11,w11,w13
    519 	eor	w25,w20,w23
    520 	ror	w27,w22,#27
    521 	add	w20,w20,w28		// future e+=K
    522 	eor	w11,w11,w3
    523 	eor	w25,w25,w24
    524 	add	w21,w21,w27		// e+=rot(a,5)
    525 	ror	w23,w23,#2
    526 	eor	w11,w11,w8
    527 	add	w20,w20,w10	// future e+=X[i]
    528 	add	w21,w21,w25		// e+=F(b,c,d)
    529 	ror	w11,w11,#31
    530 	movz	w28,#0xbcdc
    531 	movk	w28,#0x8f1b,lsl#16
    532 	eor	w12,w12,w14
    533 	eor	w25,w24,w22
    534 	ror	w27,w21,#27
    535 	add	w24,w24,w28		// future e+=K
    536 	eor	w12,w12,w4
    537 	eor	w25,w25,w23
    538 	add	w20,w20,w27		// e+=rot(a,5)
    539 	ror	w22,w22,#2
    540 	eor	w12,w12,w9
    541 	add	w24,w24,w11	// future e+=X[i]
    542 	add	w20,w20,w25		// e+=F(b,c,d)
    543 	ror	w12,w12,#31
    544 	orr	w25,w21,w22
    545 	and	w26,w21,w22
    546 	eor	w13,w13,w15
    547 	ror	w27,w20,#27
    548 	and	w25,w25,w23
    549 	add	w23,w23,w28		// future e+=K
    550 	eor	w13,w13,w5
    551 	add	w24,w24,w27		// e+=rot(a,5)
    552 	orr	w25,w25,w26
    553 	ror	w21,w21,#2
    554 	eor	w13,w13,w10
    555 	add	w23,w23,w12	// future e+=X[i]
    556 	add	w24,w24,w25		// e+=F(b,c,d)
    557 	ror	w13,w13,#31
    558 	orr	w25,w20,w21
    559 	and	w26,w20,w21
    560 	eor	w14,w14,w16
    561 	ror	w27,w24,#27
    562 	and	w25,w25,w22
    563 	add	w22,w22,w28		// future e+=K
    564 	eor	w14,w14,w6
    565 	add	w23,w23,w27		// e+=rot(a,5)
    566 	orr	w25,w25,w26
    567 	ror	w20,w20,#2
    568 	eor	w14,w14,w11
    569 	add	w22,w22,w13	// future e+=X[i]
    570 	add	w23,w23,w25		// e+=F(b,c,d)
    571 	ror	w14,w14,#31
    572 	orr	w25,w24,w20
    573 	and	w26,w24,w20
    574 	eor	w15,w15,w17
    575 	ror	w27,w23,#27
    576 	and	w25,w25,w21
    577 	add	w21,w21,w28		// future e+=K
    578 	eor	w15,w15,w7
    579 	add	w22,w22,w27		// e+=rot(a,5)
    580 	orr	w25,w25,w26
    581 	ror	w24,w24,#2
    582 	eor	w15,w15,w12
    583 	add	w21,w21,w14	// future e+=X[i]
    584 	add	w22,w22,w25		// e+=F(b,c,d)
    585 	ror	w15,w15,#31
    586 	orr	w25,w23,w24
    587 	and	w26,w23,w24
    588 	eor	w16,w16,w19
    589 	ror	w27,w22,#27
    590 	and	w25,w25,w20
    591 	add	w20,w20,w28		// future e+=K
    592 	eor	w16,w16,w8
    593 	add	w21,w21,w27		// e+=rot(a,5)
    594 	orr	w25,w25,w26
    595 	ror	w23,w23,#2
    596 	eor	w16,w16,w13
    597 	add	w20,w20,w15	// future e+=X[i]
    598 	add	w21,w21,w25		// e+=F(b,c,d)
    599 	ror	w16,w16,#31
    600 	orr	w25,w22,w23
    601 	and	w26,w22,w23
    602 	eor	w17,w17,w3
    603 	ror	w27,w21,#27
    604 	and	w25,w25,w24
    605 	add	w24,w24,w28		// future e+=K
    606 	eor	w17,w17,w9
    607 	add	w20,w20,w27		// e+=rot(a,5)
    608 	orr	w25,w25,w26
    609 	ror	w22,w22,#2
    610 	eor	w17,w17,w14
    611 	add	w24,w24,w16	// future e+=X[i]
    612 	add	w20,w20,w25		// e+=F(b,c,d)
    613 	ror	w17,w17,#31
    614 	orr	w25,w21,w22
    615 	and	w26,w21,w22
    616 	eor	w19,w19,w4
    617 	ror	w27,w20,#27
    618 	and	w25,w25,w23
    619 	add	w23,w23,w28		// future e+=K
    620 	eor	w19,w19,w10
    621 	add	w24,w24,w27		// e+=rot(a,5)
    622 	orr	w25,w25,w26
    623 	ror	w21,w21,#2
    624 	eor	w19,w19,w15
    625 	add	w23,w23,w17	// future e+=X[i]
    626 	add	w24,w24,w25		// e+=F(b,c,d)
    627 	ror	w19,w19,#31
    628 	orr	w25,w20,w21
    629 	and	w26,w20,w21
    630 	eor	w3,w3,w5
    631 	ror	w27,w24,#27
    632 	and	w25,w25,w22
    633 	add	w22,w22,w28		// future e+=K
    634 	eor	w3,w3,w11
    635 	add	w23,w23,w27		// e+=rot(a,5)
    636 	orr	w25,w25,w26
    637 	ror	w20,w20,#2
    638 	eor	w3,w3,w16
    639 	add	w22,w22,w19	// future e+=X[i]
    640 	add	w23,w23,w25		// e+=F(b,c,d)
    641 	ror	w3,w3,#31
    642 	orr	w25,w24,w20
    643 	and	w26,w24,w20
    644 	eor	w4,w4,w6
    645 	ror	w27,w23,#27
    646 	and	w25,w25,w21
    647 	add	w21,w21,w28		// future e+=K
    648 	eor	w4,w4,w12
    649 	add	w22,w22,w27		// e+=rot(a,5)
    650 	orr	w25,w25,w26
    651 	ror	w24,w24,#2
    652 	eor	w4,w4,w17
    653 	add	w21,w21,w3	// future e+=X[i]
    654 	add	w22,w22,w25		// e+=F(b,c,d)
    655 	ror	w4,w4,#31
    656 	orr	w25,w23,w24
    657 	and	w26,w23,w24
    658 	eor	w5,w5,w7
    659 	ror	w27,w22,#27
    660 	and	w25,w25,w20
    661 	add	w20,w20,w28		// future e+=K
    662 	eor	w5,w5,w13
    663 	add	w21,w21,w27		// e+=rot(a,5)
    664 	orr	w25,w25,w26
    665 	ror	w23,w23,#2
    666 	eor	w5,w5,w19
    667 	add	w20,w20,w4	// future e+=X[i]
    668 	add	w21,w21,w25		// e+=F(b,c,d)
    669 	ror	w5,w5,#31
    670 	orr	w25,w22,w23
    671 	and	w26,w22,w23
    672 	eor	w6,w6,w8
    673 	ror	w27,w21,#27
    674 	and	w25,w25,w24
    675 	add	w24,w24,w28		// future e+=K
    676 	eor	w6,w6,w14
    677 	add	w20,w20,w27		// e+=rot(a,5)
    678 	orr	w25,w25,w26
    679 	ror	w22,w22,#2
    680 	eor	w6,w6,w3
    681 	add	w24,w24,w5	// future e+=X[i]
    682 	add	w20,w20,w25		// e+=F(b,c,d)
    683 	ror	w6,w6,#31
    684 	orr	w25,w21,w22
    685 	and	w26,w21,w22
    686 	eor	w7,w7,w9
    687 	ror	w27,w20,#27
    688 	and	w25,w25,w23
    689 	add	w23,w23,w28		// future e+=K
    690 	eor	w7,w7,w15
    691 	add	w24,w24,w27		// e+=rot(a,5)
    692 	orr	w25,w25,w26
    693 	ror	w21,w21,#2
    694 	eor	w7,w7,w4
    695 	add	w23,w23,w6	// future e+=X[i]
    696 	add	w24,w24,w25		// e+=F(b,c,d)
    697 	ror	w7,w7,#31
    698 	orr	w25,w20,w21
    699 	and	w26,w20,w21
    700 	eor	w8,w8,w10
    701 	ror	w27,w24,#27
    702 	and	w25,w25,w22
    703 	add	w22,w22,w28		// future e+=K
    704 	eor	w8,w8,w16
    705 	add	w23,w23,w27		// e+=rot(a,5)
    706 	orr	w25,w25,w26
    707 	ror	w20,w20,#2
    708 	eor	w8,w8,w5
    709 	add	w22,w22,w7	// future e+=X[i]
    710 	add	w23,w23,w25		// e+=F(b,c,d)
    711 	ror	w8,w8,#31
    712 	orr	w25,w24,w20
    713 	and	w26,w24,w20
    714 	eor	w9,w9,w11
    715 	ror	w27,w23,#27
    716 	and	w25,w25,w21
    717 	add	w21,w21,w28		// future e+=K
    718 	eor	w9,w9,w17
    719 	add	w22,w22,w27		// e+=rot(a,5)
    720 	orr	w25,w25,w26
    721 	ror	w24,w24,#2
    722 	eor	w9,w9,w6
    723 	add	w21,w21,w8	// future e+=X[i]
    724 	add	w22,w22,w25		// e+=F(b,c,d)
    725 	ror	w9,w9,#31
    726 	orr	w25,w23,w24
    727 	and	w26,w23,w24
    728 	eor	w10,w10,w12
    729 	ror	w27,w22,#27
    730 	and	w25,w25,w20
    731 	add	w20,w20,w28		// future e+=K
    732 	eor	w10,w10,w19
    733 	add	w21,w21,w27		// e+=rot(a,5)
    734 	orr	w25,w25,w26
    735 	ror	w23,w23,#2
    736 	eor	w10,w10,w7
    737 	add	w20,w20,w9	// future e+=X[i]
    738 	add	w21,w21,w25		// e+=F(b,c,d)
    739 	ror	w10,w10,#31
    740 	orr	w25,w22,w23
    741 	and	w26,w22,w23
    742 	eor	w11,w11,w13
    743 	ror	w27,w21,#27
    744 	and	w25,w25,w24
    745 	add	w24,w24,w28		// future e+=K
    746 	eor	w11,w11,w3
    747 	add	w20,w20,w27		// e+=rot(a,5)
    748 	orr	w25,w25,w26
    749 	ror	w22,w22,#2
    750 	eor	w11,w11,w8
    751 	add	w24,w24,w10	// future e+=X[i]
    752 	add	w20,w20,w25		// e+=F(b,c,d)
    753 	ror	w11,w11,#31
    754 	orr	w25,w21,w22
    755 	and	w26,w21,w22
    756 	eor	w12,w12,w14
    757 	ror	w27,w20,#27
    758 	and	w25,w25,w23
    759 	add	w23,w23,w28		// future e+=K
    760 	eor	w12,w12,w4
    761 	add	w24,w24,w27		// e+=rot(a,5)
    762 	orr	w25,w25,w26
    763 	ror	w21,w21,#2
    764 	eor	w12,w12,w9
    765 	add	w23,w23,w11	// future e+=X[i]
    766 	add	w24,w24,w25		// e+=F(b,c,d)
    767 	ror	w12,w12,#31
    768 	orr	w25,w20,w21
    769 	and	w26,w20,w21
    770 	eor	w13,w13,w15
    771 	ror	w27,w24,#27
    772 	and	w25,w25,w22
    773 	add	w22,w22,w28		// future e+=K
    774 	eor	w13,w13,w5
    775 	add	w23,w23,w27		// e+=rot(a,5)
    776 	orr	w25,w25,w26
    777 	ror	w20,w20,#2
    778 	eor	w13,w13,w10
    779 	add	w22,w22,w12	// future e+=X[i]
    780 	add	w23,w23,w25		// e+=F(b,c,d)
    781 	ror	w13,w13,#31
    782 	orr	w25,w24,w20
    783 	and	w26,w24,w20
    784 	eor	w14,w14,w16
    785 	ror	w27,w23,#27
    786 	and	w25,w25,w21
    787 	add	w21,w21,w28		// future e+=K
    788 	eor	w14,w14,w6
    789 	add	w22,w22,w27		// e+=rot(a,5)
    790 	orr	w25,w25,w26
    791 	ror	w24,w24,#2
    792 	eor	w14,w14,w11
    793 	add	w21,w21,w13	// future e+=X[i]
    794 	add	w22,w22,w25		// e+=F(b,c,d)
    795 	ror	w14,w14,#31
    796 	orr	w25,w23,w24
    797 	and	w26,w23,w24
    798 	eor	w15,w15,w17
    799 	ror	w27,w22,#27
    800 	and	w25,w25,w20
    801 	add	w20,w20,w28		// future e+=K
    802 	eor	w15,w15,w7
    803 	add	w21,w21,w27		// e+=rot(a,5)
    804 	orr	w25,w25,w26
    805 	ror	w23,w23,#2
    806 	eor	w15,w15,w12
    807 	add	w20,w20,w14	// future e+=X[i]
    808 	add	w21,w21,w25		// e+=F(b,c,d)
    809 	ror	w15,w15,#31
    810 	movz	w28,#0xc1d6
    811 	movk	w28,#0xca62,lsl#16
    812 	orr	w25,w22,w23
    813 	and	w26,w22,w23
    814 	eor	w16,w16,w19
    815 	ror	w27,w21,#27
    816 	and	w25,w25,w24
    817 	add	w24,w24,w28		// future e+=K
    818 	eor	w16,w16,w8
    819 	add	w20,w20,w27		// e+=rot(a,5)
    820 	orr	w25,w25,w26
    821 	ror	w22,w22,#2
    822 	eor	w16,w16,w13
    823 	add	w24,w24,w15	// future e+=X[i]
    824 	add	w20,w20,w25		// e+=F(b,c,d)
    825 	ror	w16,w16,#31
    826 	eor	w17,w17,w3
    827 	eor	w25,w23,w21
    828 	ror	w27,w20,#27
    829 	add	w23,w23,w28		// future e+=K
    830 	eor	w17,w17,w9
    831 	eor	w25,w25,w22
    832 	add	w24,w24,w27		// e+=rot(a,5)
    833 	ror	w21,w21,#2
    834 	eor	w17,w17,w14
    835 	add	w23,w23,w16	// future e+=X[i]
    836 	add	w24,w24,w25		// e+=F(b,c,d)
    837 	ror	w17,w17,#31
    838 	eor	w19,w19,w4
    839 	eor	w25,w22,w20
    840 	ror	w27,w24,#27
    841 	add	w22,w22,w28		// future e+=K
    842 	eor	w19,w19,w10
    843 	eor	w25,w25,w21
    844 	add	w23,w23,w27		// e+=rot(a,5)
    845 	ror	w20,w20,#2
    846 	eor	w19,w19,w15
    847 	add	w22,w22,w17	// future e+=X[i]
    848 	add	w23,w23,w25		// e+=F(b,c,d)
    849 	ror	w19,w19,#31
    850 	eor	w3,w3,w5
    851 	eor	w25,w21,w24
    852 	ror	w27,w23,#27
    853 	add	w21,w21,w28		// future e+=K
    854 	eor	w3,w3,w11
    855 	eor	w25,w25,w20
    856 	add	w22,w22,w27		// e+=rot(a,5)
    857 	ror	w24,w24,#2
    858 	eor	w3,w3,w16
    859 	add	w21,w21,w19	// future e+=X[i]
    860 	add	w22,w22,w25		// e+=F(b,c,d)
    861 	ror	w3,w3,#31
    862 	eor	w4,w4,w6
    863 	eor	w25,w20,w23
    864 	ror	w27,w22,#27
    865 	add	w20,w20,w28		// future e+=K
    866 	eor	w4,w4,w12
    867 	eor	w25,w25,w24
    868 	add	w21,w21,w27		// e+=rot(a,5)
    869 	ror	w23,w23,#2
    870 	eor	w4,w4,w17
    871 	add	w20,w20,w3	// future e+=X[i]
    872 	add	w21,w21,w25		// e+=F(b,c,d)
    873 	ror	w4,w4,#31
    874 	eor	w5,w5,w7
    875 	eor	w25,w24,w22
    876 	ror	w27,w21,#27
    877 	add	w24,w24,w28		// future e+=K
    878 	eor	w5,w5,w13
    879 	eor	w25,w25,w23
    880 	add	w20,w20,w27		// e+=rot(a,5)
    881 	ror	w22,w22,#2
    882 	eor	w5,w5,w19
    883 	add	w24,w24,w4	// future e+=X[i]
    884 	add	w20,w20,w25		// e+=F(b,c,d)
    885 	ror	w5,w5,#31
    886 	eor	w6,w6,w8
    887 	eor	w25,w23,w21
    888 	ror	w27,w20,#27
    889 	add	w23,w23,w28		// future e+=K
    890 	eor	w6,w6,w14
    891 	eor	w25,w25,w22
    892 	add	w24,w24,w27		// e+=rot(a,5)
    893 	ror	w21,w21,#2
    894 	eor	w6,w6,w3
    895 	add	w23,w23,w5	// future e+=X[i]
    896 	add	w24,w24,w25		// e+=F(b,c,d)
    897 	ror	w6,w6,#31
    898 	eor	w7,w7,w9
    899 	eor	w25,w22,w20
    900 	ror	w27,w24,#27
    901 	add	w22,w22,w28		// future e+=K
    902 	eor	w7,w7,w15
    903 	eor	w25,w25,w21
    904 	add	w23,w23,w27		// e+=rot(a,5)
    905 	ror	w20,w20,#2
    906 	eor	w7,w7,w4
    907 	add	w22,w22,w6	// future e+=X[i]
    908 	add	w23,w23,w25		// e+=F(b,c,d)
    909 	ror	w7,w7,#31
    910 	eor	w8,w8,w10
    911 	eor	w25,w21,w24
    912 	ror	w27,w23,#27
    913 	add	w21,w21,w28		// future e+=K
    914 	eor	w8,w8,w16
    915 	eor	w25,w25,w20
    916 	add	w22,w22,w27		// e+=rot(a,5)
    917 	ror	w24,w24,#2
    918 	eor	w8,w8,w5
    919 	add	w21,w21,w7	// future e+=X[i]
    920 	add	w22,w22,w25		// e+=F(b,c,d)
    921 	ror	w8,w8,#31
    922 	eor	w9,w9,w11
    923 	eor	w25,w20,w23
    924 	ror	w27,w22,#27
    925 	add	w20,w20,w28		// future e+=K
    926 	eor	w9,w9,w17
    927 	eor	w25,w25,w24
    928 	add	w21,w21,w27		// e+=rot(a,5)
    929 	ror	w23,w23,#2
    930 	eor	w9,w9,w6
    931 	add	w20,w20,w8	// future e+=X[i]
    932 	add	w21,w21,w25		// e+=F(b,c,d)
    933 	ror	w9,w9,#31
    934 	eor	w10,w10,w12
    935 	eor	w25,w24,w22
    936 	ror	w27,w21,#27
    937 	add	w24,w24,w28		// future e+=K
    938 	eor	w10,w10,w19
    939 	eor	w25,w25,w23
    940 	add	w20,w20,w27		// e+=rot(a,5)
    941 	ror	w22,w22,#2
    942 	eor	w10,w10,w7
    943 	add	w24,w24,w9	// future e+=X[i]
    944 	add	w20,w20,w25		// e+=F(b,c,d)
    945 	ror	w10,w10,#31
    946 	eor	w11,w11,w13
    947 	eor	w25,w23,w21
    948 	ror	w27,w20,#27
    949 	add	w23,w23,w28		// future e+=K
    950 	eor	w11,w11,w3
    951 	eor	w25,w25,w22
    952 	add	w24,w24,w27		// e+=rot(a,5)
    953 	ror	w21,w21,#2
    954 	eor	w11,w11,w8
    955 	add	w23,w23,w10	// future e+=X[i]
    956 	add	w24,w24,w25		// e+=F(b,c,d)
    957 	ror	w11,w11,#31
    958 	eor	w12,w12,w14
    959 	eor	w25,w22,w20
    960 	ror	w27,w24,#27
    961 	add	w22,w22,w28		// future e+=K
    962 	eor	w12,w12,w4
    963 	eor	w25,w25,w21
    964 	add	w23,w23,w27		// e+=rot(a,5)
    965 	ror	w20,w20,#2
    966 	eor	w12,w12,w9
    967 	add	w22,w22,w11	// future e+=X[i]
    968 	add	w23,w23,w25		// e+=F(b,c,d)
    969 	ror	w12,w12,#31
    970 	eor	w13,w13,w15
    971 	eor	w25,w21,w24
    972 	ror	w27,w23,#27
    973 	add	w21,w21,w28		// future e+=K
    974 	eor	w13,w13,w5
    975 	eor	w25,w25,w20
    976 	add	w22,w22,w27		// e+=rot(a,5)
    977 	ror	w24,w24,#2
    978 	eor	w13,w13,w10
    979 	add	w21,w21,w12	// future e+=X[i]
    980 	add	w22,w22,w25		// e+=F(b,c,d)
    981 	ror	w13,w13,#31
    982 	eor	w14,w14,w16
    983 	eor	w25,w20,w23
    984 	ror	w27,w22,#27
    985 	add	w20,w20,w28		// future e+=K
    986 	eor	w14,w14,w6
    987 	eor	w25,w25,w24
    988 	add	w21,w21,w27		// e+=rot(a,5)
    989 	ror	w23,w23,#2
    990 	eor	w14,w14,w11
    991 	add	w20,w20,w13	// future e+=X[i]
    992 	add	w21,w21,w25		// e+=F(b,c,d)
    993 	ror	w14,w14,#31
    994 	eor	w15,w15,w17
    995 	eor	w25,w24,w22
    996 	ror	w27,w21,#27
    997 	add	w24,w24,w28		// future e+=K
    998 	eor	w15,w15,w7
    999 	eor	w25,w25,w23
   1000 	add	w20,w20,w27		// e+=rot(a,5)
   1001 	ror	w22,w22,#2
   1002 	eor	w15,w15,w12
   1003 	add	w24,w24,w14	// future e+=X[i]
   1004 	add	w20,w20,w25		// e+=F(b,c,d)
   1005 	ror	w15,w15,#31
   1006 	eor	w16,w16,w19
   1007 	eor	w25,w23,w21
   1008 	ror	w27,w20,#27
   1009 	add	w23,w23,w28		// future e+=K
   1010 	eor	w16,w16,w8
   1011 	eor	w25,w25,w22
   1012 	add	w24,w24,w27		// e+=rot(a,5)
   1013 	ror	w21,w21,#2
   1014 	eor	w16,w16,w13
   1015 	add	w23,w23,w15	// future e+=X[i]
   1016 	add	w24,w24,w25		// e+=F(b,c,d)
   1017 	ror	w16,w16,#31
   1018 	eor	w17,w17,w3
   1019 	eor	w25,w22,w20
   1020 	ror	w27,w24,#27
   1021 	add	w22,w22,w28		// future e+=K
   1022 	eor	w17,w17,w9
   1023 	eor	w25,w25,w21
   1024 	add	w23,w23,w27		// e+=rot(a,5)
   1025 	ror	w20,w20,#2
   1026 	eor	w17,w17,w14
   1027 	add	w22,w22,w16	// future e+=X[i]
   1028 	add	w23,w23,w25		// e+=F(b,c,d)
   1029 	ror	w17,w17,#31
   1030 	eor	w19,w19,w4
   1031 	eor	w25,w21,w24
   1032 	ror	w27,w23,#27
   1033 	add	w21,w21,w28		// future e+=K
   1034 	eor	w19,w19,w10
   1035 	eor	w25,w25,w20
   1036 	add	w22,w22,w27		// e+=rot(a,5)
   1037 	ror	w24,w24,#2
   1038 	eor	w19,w19,w15
   1039 	add	w21,w21,w17	// future e+=X[i]
   1040 	add	w22,w22,w25		// e+=F(b,c,d)
   1041 	ror	w19,w19,#31
   1042 	ldp	w4,w5,[x0]
   1043 	eor	w25,w20,w23
   1044 	ror	w27,w22,#27
   1045 	add	w20,w20,w28		// future e+=K
   1046 	eor	w25,w25,w24
   1047 	add	w21,w21,w27		// e+=rot(a,5)
   1048 	ror	w23,w23,#2
   1049 	add	w20,w20,w19	// future e+=X[i]
   1050 	add	w21,w21,w25		// e+=F(b,c,d)
   1051 	ldp	w6,w7,[x0,#8]
   1052 	eor	w25,w24,w22
   1053 	ror	w27,w21,#27
   1054 	eor	w25,w25,w23
   1055 	add	w20,w20,w27		// e+=rot(a,5)
   1056 	ror	w22,w22,#2
   1057 	ldr	w8,[x0,#16]
   1058 	add	w20,w20,w25		// e+=F(b,c,d)
   1059 	add	w21,w21,w5
   1060 	add	w22,w22,w6
   1061 	add	w20,w20,w4
   1062 	add	w23,w23,w7
   1063 	add	w24,w24,w8
   1064 	stp	w20,w21,[x0]
   1065 	stp	w22,w23,[x0,#8]
   1066 	str	w24,[x0,#16]
   1067 	cbnz	x2,Loop
   1068 
   1069 	ldp	x19,x20,[sp,#16]
   1070 	ldp	x21,x22,[sp,#32]
   1071 	ldp	x23,x24,[sp,#48]
   1072 	ldp	x25,x26,[sp,#64]
   1073 	ldp	x27,x28,[sp,#80]
   1074 	ldr	x29,[sp],#96
   1075 	ret
   1076 
   1077 
   1078 .align	6
   1079 sha1_block_armv8:
   1080 Lv8_entry:
   1081 	stp	x29,x30,[sp,#-16]!
   1082 	add	x29,sp,#0
   1083 
   1084 	adr	x4,Lconst
   1085 	eor	v1.16b,v1.16b,v1.16b
   1086 	ld1	{v0.4s},[x0],#16
   1087 	ld1	{v1.s}[0],[x0]
   1088 	sub	x0,x0,#16
   1089 	ld1	{v16.4s,v17.4s,v18.4s,v19.4s},[x4]
   1090 
   1091 Loop_hw:
   1092 	ld1	{v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
   1093 	sub	x2,x2,#1
   1094 	rev32	v4.16b,v4.16b
   1095 	rev32	v5.16b,v5.16b
   1096 
   1097 	add	v20.4s,v16.4s,v4.4s
   1098 	rev32	v6.16b,v6.16b
   1099 	orr	v22.16b,v0.16b,v0.16b	// offload
   1100 
   1101 	add	v21.4s,v16.4s,v5.4s
   1102 	rev32	v7.16b,v7.16b
   1103 .long	0x5e280803	//sha1h v3.16b,v0.16b
   1104 .long	0x5e140020	//sha1c v0.16b,v1.16b,v20.4s		// 0
   1105 	add	v20.4s,v16.4s,v6.4s
   1106 .long	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
   1107 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 1
   1108 .long	0x5e150060	//sha1c v0.16b,v3.16b,v21.4s
   1109 	add	v21.4s,v16.4s,v7.4s
   1110 .long	0x5e2818e4	//sha1su1 v4.16b,v7.16b
   1111 .long	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
   1112 .long	0x5e280803	//sha1h v3.16b,v0.16b		// 2
   1113 .long	0x5e140040	//sha1c v0.16b,v2.16b,v20.4s
   1114 	add	v20.4s,v16.4s,v4.4s
   1115 .long	0x5e281885	//sha1su1 v5.16b,v4.16b
   1116 .long	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
   1117 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 3
   1118 .long	0x5e150060	//sha1c v0.16b,v3.16b,v21.4s
   1119 	add	v21.4s,v17.4s,v5.4s
   1120 .long	0x5e2818a6	//sha1su1 v6.16b,v5.16b
   1121 .long	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
   1122 .long	0x5e280803	//sha1h v3.16b,v0.16b		// 4
   1123 .long	0x5e140040	//sha1c v0.16b,v2.16b,v20.4s
   1124 	add	v20.4s,v17.4s,v6.4s
   1125 .long	0x5e2818c7	//sha1su1 v7.16b,v6.16b
   1126 .long	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
   1127 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 5
   1128 .long	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
   1129 	add	v21.4s,v17.4s,v7.4s
   1130 .long	0x5e2818e4	//sha1su1 v4.16b,v7.16b
   1131 .long	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
   1132 .long	0x5e280803	//sha1h v3.16b,v0.16b		// 6
   1133 .long	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
   1134 	add	v20.4s,v17.4s,v4.4s
   1135 .long	0x5e281885	//sha1su1 v5.16b,v4.16b
   1136 .long	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
   1137 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 7
   1138 .long	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
   1139 	add	v21.4s,v17.4s,v5.4s
   1140 .long	0x5e2818a6	//sha1su1 v6.16b,v5.16b
   1141 .long	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
   1142 .long	0x5e280803	//sha1h v3.16b,v0.16b		// 8
   1143 .long	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
   1144 	add	v20.4s,v18.4s,v6.4s
   1145 .long	0x5e2818c7	//sha1su1 v7.16b,v6.16b
   1146 .long	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
   1147 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 9
   1148 .long	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
   1149 	add	v21.4s,v18.4s,v7.4s
   1150 .long	0x5e2818e4	//sha1su1 v4.16b,v7.16b
   1151 .long	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
   1152 .long	0x5e280803	//sha1h v3.16b,v0.16b		// 10
   1153 .long	0x5e142040	//sha1m v0.16b,v2.16b,v20.4s
   1154 	add	v20.4s,v18.4s,v4.4s
   1155 .long	0x5e281885	//sha1su1 v5.16b,v4.16b
   1156 .long	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
   1157 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 11
   1158 .long	0x5e152060	//sha1m v0.16b,v3.16b,v21.4s
   1159 	add	v21.4s,v18.4s,v5.4s
   1160 .long	0x5e2818a6	//sha1su1 v6.16b,v5.16b
   1161 .long	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
   1162 .long	0x5e280803	//sha1h v3.16b,v0.16b		// 12
   1163 .long	0x5e142040	//sha1m v0.16b,v2.16b,v20.4s
   1164 	add	v20.4s,v18.4s,v6.4s
   1165 .long	0x5e2818c7	//sha1su1 v7.16b,v6.16b
   1166 .long	0x5e0630a4	//sha1su0 v4.16b,v5.16b,v6.16b
   1167 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 13
   1168 .long	0x5e152060	//sha1m v0.16b,v3.16b,v21.4s
   1169 	add	v21.4s,v19.4s,v7.4s
   1170 .long	0x5e2818e4	//sha1su1 v4.16b,v7.16b
   1171 .long	0x5e0730c5	//sha1su0 v5.16b,v6.16b,v7.16b
   1172 .long	0x5e280803	//sha1h v3.16b,v0.16b		// 14
   1173 .long	0x5e142040	//sha1m v0.16b,v2.16b,v20.4s
   1174 	add	v20.4s,v19.4s,v4.4s
   1175 .long	0x5e281885	//sha1su1 v5.16b,v4.16b
   1176 .long	0x5e0430e6	//sha1su0 v6.16b,v7.16b,v4.16b
   1177 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 15
   1178 .long	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
   1179 	add	v21.4s,v19.4s,v5.4s
   1180 .long	0x5e2818a6	//sha1su1 v6.16b,v5.16b
   1181 .long	0x5e053087	//sha1su0 v7.16b,v4.16b,v5.16b
   1182 .long	0x5e280803	//sha1h v3.16b,v0.16b		// 16
   1183 .long	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
   1184 	add	v20.4s,v19.4s,v6.4s
   1185 .long	0x5e2818c7	//sha1su1 v7.16b,v6.16b
   1186 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 17
   1187 .long	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
   1188 	add	v21.4s,v19.4s,v7.4s
   1189 
   1190 .long	0x5e280803	//sha1h v3.16b,v0.16b		// 18
   1191 .long	0x5e141040	//sha1p v0.16b,v2.16b,v20.4s
   1192 
   1193 .long	0x5e280802	//sha1h v2.16b,v0.16b		// 19
   1194 .long	0x5e151060	//sha1p v0.16b,v3.16b,v21.4s
   1195 
   1196 	add	v1.4s,v1.4s,v2.4s
   1197 	add	v0.4s,v0.4s,v22.4s
   1198 
   1199 	cbnz	x2,Loop_hw
   1200 
   1201 	st1	{v0.4s},[x0],#16
   1202 	st1	{v1.s}[0],[x0]
   1203 
   1204 	ldr	x29,[sp],#16
   1205 	ret
   1206 
   1207 .align	6
   1208 Lconst:
   1209 .long	0x5a827999,0x5a827999,0x5a827999,0x5a827999	//K_00_19
   1210 .long	0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1	//K_20_39
   1211 .long	0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc	//K_40_59
   1212 .long	0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6	//K_60_79
   1213 LOPENSSL_armcap_P:
   1214 #ifdef	__ILP32__
   1215 .long	_OPENSSL_armcap_P-.
   1216 #else
   1217 .quad	_OPENSSL_armcap_P-.
   1218 #endif
   1219 .byte	83,72,65,49,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
   1220 .align	2
   1221 .align	2
   1222 .comm	_OPENSSL_armcap_P,4,4
   1223