Home | History | Annotate | Download | only in asm
      1 #include "arm_arch.h"
      2 
      3 .text
      4 .code	32
      5 
      6 .global	sha1_block_data_order
      7 .type	sha1_block_data_order,%function
      8 
      9 .align	5
     10 sha1_block_data_order:
     11 #if __ARM_ARCH__>=7
     12 	sub	r3,pc,#8		@ sha1_block_data_order
     13 	ldr	r12,.LOPENSSL_armcap
     14 	ldr	r12,[r3,r12]		@ OPENSSL_armcap_P
     15 	tst	r12,#ARMV8_SHA1
     16 	bne	.LARMv8
     17 	tst	r12,#ARMV7_NEON
     18 	bne	.LNEON
     19 #endif
     20 	stmdb	sp!,{r4-r12,lr}
     21 	add	r2,r1,r2,lsl#6	@ r2 to point at the end of r1
     22 	ldmia	r0,{r3,r4,r5,r6,r7}
     23 .Lloop:
     24 	ldr	r8,.LK_00_19
     25 	mov	r14,sp
     26 	sub	sp,sp,#15*4
     27 	mov	r5,r5,ror#30
     28 	mov	r6,r6,ror#30
     29 	mov	r7,r7,ror#30		@ [6]
     30 .L_00_15:
     31 #if __ARM_ARCH__<7
     32 	ldrb	r10,[r1,#2]
     33 	ldrb	r9,[r1,#3]
     34 	ldrb	r11,[r1,#1]
     35 	add	r7,r8,r7,ror#2			@ E+=K_00_19
     36 	ldrb	r12,[r1],#4
     37 	orr	r9,r9,r10,lsl#8
     38 	eor	r10,r5,r6			@ F_xx_xx
     39 	orr	r9,r9,r11,lsl#16
     40 	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
     41 	orr	r9,r9,r12,lsl#24
     42 #else
     43 	ldr	r9,[r1],#4			@ handles unaligned
     44 	add	r7,r8,r7,ror#2			@ E+=K_00_19
     45 	eor	r10,r5,r6			@ F_xx_xx
     46 	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
     47 #ifdef __ARMEL__
     48 	rev	r9,r9				@ byte swap
     49 #endif
     50 #endif
     51 	and	r10,r4,r10,ror#2
     52 	add	r7,r7,r9			@ E+=X[i]
     53 	eor	r10,r10,r6,ror#2		@ F_00_19(B,C,D)
     54 	str	r9,[r14,#-4]!
     55 	add	r7,r7,r10			@ E+=F_00_19(B,C,D)
     56 #if __ARM_ARCH__<7
     57 	ldrb	r10,[r1,#2]
     58 	ldrb	r9,[r1,#3]
     59 	ldrb	r11,[r1,#1]
     60 	add	r6,r8,r6,ror#2			@ E+=K_00_19
     61 	ldrb	r12,[r1],#4
     62 	orr	r9,r9,r10,lsl#8
     63 	eor	r10,r4,r5			@ F_xx_xx
     64 	orr	r9,r9,r11,lsl#16
     65 	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
     66 	orr	r9,r9,r12,lsl#24
     67 #else
     68 	ldr	r9,[r1],#4			@ handles unaligned
     69 	add	r6,r8,r6,ror#2			@ E+=K_00_19
     70 	eor	r10,r4,r5			@ F_xx_xx
     71 	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
     72 #ifdef __ARMEL__
     73 	rev	r9,r9				@ byte swap
     74 #endif
     75 #endif
     76 	and	r10,r3,r10,ror#2
     77 	add	r6,r6,r9			@ E+=X[i]
     78 	eor	r10,r10,r5,ror#2		@ F_00_19(B,C,D)
     79 	str	r9,[r14,#-4]!
     80 	add	r6,r6,r10			@ E+=F_00_19(B,C,D)
     81 #if __ARM_ARCH__<7
     82 	ldrb	r10,[r1,#2]
     83 	ldrb	r9,[r1,#3]
     84 	ldrb	r11,[r1,#1]
     85 	add	r5,r8,r5,ror#2			@ E+=K_00_19
     86 	ldrb	r12,[r1],#4
     87 	orr	r9,r9,r10,lsl#8
     88 	eor	r10,r3,r4			@ F_xx_xx
     89 	orr	r9,r9,r11,lsl#16
     90 	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
     91 	orr	r9,r9,r12,lsl#24
     92 #else
     93 	ldr	r9,[r1],#4			@ handles unaligned
     94 	add	r5,r8,r5,ror#2			@ E+=K_00_19
     95 	eor	r10,r3,r4			@ F_xx_xx
     96 	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
     97 #ifdef __ARMEL__
     98 	rev	r9,r9				@ byte swap
     99 #endif
    100 #endif
    101 	and	r10,r7,r10,ror#2
    102 	add	r5,r5,r9			@ E+=X[i]
    103 	eor	r10,r10,r4,ror#2		@ F_00_19(B,C,D)
    104 	str	r9,[r14,#-4]!
    105 	add	r5,r5,r10			@ E+=F_00_19(B,C,D)
    106 #if __ARM_ARCH__<7
    107 	ldrb	r10,[r1,#2]
    108 	ldrb	r9,[r1,#3]
    109 	ldrb	r11,[r1,#1]
    110 	add	r4,r8,r4,ror#2			@ E+=K_00_19
    111 	ldrb	r12,[r1],#4
    112 	orr	r9,r9,r10,lsl#8
    113 	eor	r10,r7,r3			@ F_xx_xx
    114 	orr	r9,r9,r11,lsl#16
    115 	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
    116 	orr	r9,r9,r12,lsl#24
    117 #else
    118 	ldr	r9,[r1],#4			@ handles unaligned
    119 	add	r4,r8,r4,ror#2			@ E+=K_00_19
    120 	eor	r10,r7,r3			@ F_xx_xx
    121 	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
    122 #ifdef __ARMEL__
    123 	rev	r9,r9				@ byte swap
    124 #endif
    125 #endif
    126 	and	r10,r6,r10,ror#2
    127 	add	r4,r4,r9			@ E+=X[i]
    128 	eor	r10,r10,r3,ror#2		@ F_00_19(B,C,D)
    129 	str	r9,[r14,#-4]!
    130 	add	r4,r4,r10			@ E+=F_00_19(B,C,D)
    131 #if __ARM_ARCH__<7
    132 	ldrb	r10,[r1,#2]
    133 	ldrb	r9,[r1,#3]
    134 	ldrb	r11,[r1,#1]
    135 	add	r3,r8,r3,ror#2			@ E+=K_00_19
    136 	ldrb	r12,[r1],#4
    137 	orr	r9,r9,r10,lsl#8
    138 	eor	r10,r6,r7			@ F_xx_xx
    139 	orr	r9,r9,r11,lsl#16
    140 	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
    141 	orr	r9,r9,r12,lsl#24
    142 #else
    143 	ldr	r9,[r1],#4			@ handles unaligned
    144 	add	r3,r8,r3,ror#2			@ E+=K_00_19
    145 	eor	r10,r6,r7			@ F_xx_xx
    146 	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
    147 #ifdef __ARMEL__
    148 	rev	r9,r9				@ byte swap
    149 #endif
    150 #endif
    151 	and	r10,r5,r10,ror#2
    152 	add	r3,r3,r9			@ E+=X[i]
    153 	eor	r10,r10,r7,ror#2		@ F_00_19(B,C,D)
    154 	str	r9,[r14,#-4]!
    155 	add	r3,r3,r10			@ E+=F_00_19(B,C,D)
    156 	teq	r14,sp
    157 	bne	.L_00_15		@ [((11+4)*5+2)*3]
    158 	sub	sp,sp,#25*4
    159 #if __ARM_ARCH__<7
    160 	ldrb	r10,[r1,#2]
    161 	ldrb	r9,[r1,#3]
    162 	ldrb	r11,[r1,#1]
    163 	add	r7,r8,r7,ror#2			@ E+=K_00_19
    164 	ldrb	r12,[r1],#4
    165 	orr	r9,r9,r10,lsl#8
    166 	eor	r10,r5,r6			@ F_xx_xx
    167 	orr	r9,r9,r11,lsl#16
    168 	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
    169 	orr	r9,r9,r12,lsl#24
    170 #else
    171 	ldr	r9,[r1],#4			@ handles unaligned
    172 	add	r7,r8,r7,ror#2			@ E+=K_00_19
    173 	eor	r10,r5,r6			@ F_xx_xx
    174 	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
    175 #ifdef __ARMEL__
    176 	rev	r9,r9				@ byte swap
    177 #endif
    178 #endif
    179 	and	r10,r4,r10,ror#2
    180 	add	r7,r7,r9			@ E+=X[i]
    181 	eor	r10,r10,r6,ror#2		@ F_00_19(B,C,D)
    182 	str	r9,[r14,#-4]!
    183 	add	r7,r7,r10			@ E+=F_00_19(B,C,D)
    184 	ldr	r9,[r14,#15*4]
    185 	ldr	r10,[r14,#13*4]
    186 	ldr	r11,[r14,#7*4]
    187 	add	r6,r8,r6,ror#2			@ E+=K_xx_xx
    188 	ldr	r12,[r14,#2*4]
    189 	eor	r9,r9,r10
    190 	eor	r11,r11,r12			@ 1 cycle stall
    191 	eor	r10,r4,r5			@ F_xx_xx
    192 	mov	r9,r9,ror#31
    193 	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
    194 	eor	r9,r9,r11,ror#31
    195 	str	r9,[r14,#-4]!
    196 	and r10,r3,r10,ror#2					@ F_xx_xx
    197 						@ F_xx_xx
    198 	add	r6,r6,r9			@ E+=X[i]
    199 	eor	r10,r10,r5,ror#2		@ F_00_19(B,C,D)
    200 	add	r6,r6,r10			@ E+=F_00_19(B,C,D)
    201 	ldr	r9,[r14,#15*4]
    202 	ldr	r10,[r14,#13*4]
    203 	ldr	r11,[r14,#7*4]
    204 	add	r5,r8,r5,ror#2			@ E+=K_xx_xx
    205 	ldr	r12,[r14,#2*4]
    206 	eor	r9,r9,r10
    207 	eor	r11,r11,r12			@ 1 cycle stall
    208 	eor	r10,r3,r4			@ F_xx_xx
    209 	mov	r9,r9,ror#31
    210 	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
    211 	eor	r9,r9,r11,ror#31
    212 	str	r9,[r14,#-4]!
    213 	and r10,r7,r10,ror#2					@ F_xx_xx
    214 						@ F_xx_xx
    215 	add	r5,r5,r9			@ E+=X[i]
    216 	eor	r10,r10,r4,ror#2		@ F_00_19(B,C,D)
    217 	add	r5,r5,r10			@ E+=F_00_19(B,C,D)
    218 	ldr	r9,[r14,#15*4]
    219 	ldr	r10,[r14,#13*4]
    220 	ldr	r11,[r14,#7*4]
    221 	add	r4,r8,r4,ror#2			@ E+=K_xx_xx
    222 	ldr	r12,[r14,#2*4]
    223 	eor	r9,r9,r10
    224 	eor	r11,r11,r12			@ 1 cycle stall
    225 	eor	r10,r7,r3			@ F_xx_xx
    226 	mov	r9,r9,ror#31
    227 	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
    228 	eor	r9,r9,r11,ror#31
    229 	str	r9,[r14,#-4]!
    230 	and r10,r6,r10,ror#2					@ F_xx_xx
    231 						@ F_xx_xx
    232 	add	r4,r4,r9			@ E+=X[i]
    233 	eor	r10,r10,r3,ror#2		@ F_00_19(B,C,D)
    234 	add	r4,r4,r10			@ E+=F_00_19(B,C,D)
    235 	ldr	r9,[r14,#15*4]
    236 	ldr	r10,[r14,#13*4]
    237 	ldr	r11,[r14,#7*4]
    238 	add	r3,r8,r3,ror#2			@ E+=K_xx_xx
    239 	ldr	r12,[r14,#2*4]
    240 	eor	r9,r9,r10
    241 	eor	r11,r11,r12			@ 1 cycle stall
    242 	eor	r10,r6,r7			@ F_xx_xx
    243 	mov	r9,r9,ror#31
    244 	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
    245 	eor	r9,r9,r11,ror#31
    246 	str	r9,[r14,#-4]!
    247 	and r10,r5,r10,ror#2					@ F_xx_xx
    248 						@ F_xx_xx
    249 	add	r3,r3,r9			@ E+=X[i]
    250 	eor	r10,r10,r7,ror#2		@ F_00_19(B,C,D)
    251 	add	r3,r3,r10			@ E+=F_00_19(B,C,D)
    252 
    253 	ldr	r8,.LK_20_39		@ [+15+16*4]
    254 	cmn	sp,#0			@ [+3], clear carry to denote 20_39
    255 .L_20_39_or_60_79:
    256 	ldr	r9,[r14,#15*4]
    257 	ldr	r10,[r14,#13*4]
    258 	ldr	r11,[r14,#7*4]
    259 	add	r7,r8,r7,ror#2			@ E+=K_xx_xx
    260 	ldr	r12,[r14,#2*4]
    261 	eor	r9,r9,r10
    262 	eor	r11,r11,r12			@ 1 cycle stall
    263 	eor	r10,r5,r6			@ F_xx_xx
    264 	mov	r9,r9,ror#31
    265 	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
    266 	eor	r9,r9,r11,ror#31
    267 	str	r9,[r14,#-4]!
    268 	eor r10,r4,r10,ror#2					@ F_xx_xx
    269 						@ F_xx_xx
    270 	add	r7,r7,r9			@ E+=X[i]
    271 	add	r7,r7,r10			@ E+=F_20_39(B,C,D)
    272 	ldr	r9,[r14,#15*4]
    273 	ldr	r10,[r14,#13*4]
    274 	ldr	r11,[r14,#7*4]
    275 	add	r6,r8,r6,ror#2			@ E+=K_xx_xx
    276 	ldr	r12,[r14,#2*4]
    277 	eor	r9,r9,r10
    278 	eor	r11,r11,r12			@ 1 cycle stall
    279 	eor	r10,r4,r5			@ F_xx_xx
    280 	mov	r9,r9,ror#31
    281 	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
    282 	eor	r9,r9,r11,ror#31
    283 	str	r9,[r14,#-4]!
    284 	eor r10,r3,r10,ror#2					@ F_xx_xx
    285 						@ F_xx_xx
    286 	add	r6,r6,r9			@ E+=X[i]
    287 	add	r6,r6,r10			@ E+=F_20_39(B,C,D)
    288 	ldr	r9,[r14,#15*4]
    289 	ldr	r10,[r14,#13*4]
    290 	ldr	r11,[r14,#7*4]
    291 	add	r5,r8,r5,ror#2			@ E+=K_xx_xx
    292 	ldr	r12,[r14,#2*4]
    293 	eor	r9,r9,r10
    294 	eor	r11,r11,r12			@ 1 cycle stall
    295 	eor	r10,r3,r4			@ F_xx_xx
    296 	mov	r9,r9,ror#31
    297 	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
    298 	eor	r9,r9,r11,ror#31
    299 	str	r9,[r14,#-4]!
    300 	eor r10,r7,r10,ror#2					@ F_xx_xx
    301 						@ F_xx_xx
    302 	add	r5,r5,r9			@ E+=X[i]
    303 	add	r5,r5,r10			@ E+=F_20_39(B,C,D)
    304 	ldr	r9,[r14,#15*4]
    305 	ldr	r10,[r14,#13*4]
    306 	ldr	r11,[r14,#7*4]
    307 	add	r4,r8,r4,ror#2			@ E+=K_xx_xx
    308 	ldr	r12,[r14,#2*4]
    309 	eor	r9,r9,r10
    310 	eor	r11,r11,r12			@ 1 cycle stall
    311 	eor	r10,r7,r3			@ F_xx_xx
    312 	mov	r9,r9,ror#31
    313 	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
    314 	eor	r9,r9,r11,ror#31
    315 	str	r9,[r14,#-4]!
    316 	eor r10,r6,r10,ror#2					@ F_xx_xx
    317 						@ F_xx_xx
    318 	add	r4,r4,r9			@ E+=X[i]
    319 	add	r4,r4,r10			@ E+=F_20_39(B,C,D)
    320 	ldr	r9,[r14,#15*4]
    321 	ldr	r10,[r14,#13*4]
    322 	ldr	r11,[r14,#7*4]
    323 	add	r3,r8,r3,ror#2			@ E+=K_xx_xx
    324 	ldr	r12,[r14,#2*4]
    325 	eor	r9,r9,r10
    326 	eor	r11,r11,r12			@ 1 cycle stall
    327 	eor	r10,r6,r7			@ F_xx_xx
    328 	mov	r9,r9,ror#31
    329 	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
    330 	eor	r9,r9,r11,ror#31
    331 	str	r9,[r14,#-4]!
    332 	eor r10,r5,r10,ror#2					@ F_xx_xx
    333 						@ F_xx_xx
    334 	add	r3,r3,r9			@ E+=X[i]
    335 	add	r3,r3,r10			@ E+=F_20_39(B,C,D)
    336 	teq	r14,sp			@ preserve carry
    337 	bne	.L_20_39_or_60_79	@ [+((12+3)*5+2)*4]
    338 	bcs	.L_done			@ [+((12+3)*5+2)*4], spare 300 bytes
    339 
    340 	ldr	r8,.LK_40_59
    341 	sub	sp,sp,#20*4		@ [+2]
    342 .L_40_59:
    343 	ldr	r9,[r14,#15*4]
    344 	ldr	r10,[r14,#13*4]
    345 	ldr	r11,[r14,#7*4]
    346 	add	r7,r8,r7,ror#2			@ E+=K_xx_xx
    347 	ldr	r12,[r14,#2*4]
    348 	eor	r9,r9,r10
    349 	eor	r11,r11,r12			@ 1 cycle stall
    350 	eor	r10,r5,r6			@ F_xx_xx
    351 	mov	r9,r9,ror#31
    352 	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
    353 	eor	r9,r9,r11,ror#31
    354 	str	r9,[r14,#-4]!
    355 	and r10,r4,r10,ror#2					@ F_xx_xx
    356 	and r11,r5,r6					@ F_xx_xx
    357 	add	r7,r7,r9			@ E+=X[i]
    358 	add	r7,r7,r10			@ E+=F_40_59(B,C,D)
    359 	add	r7,r7,r11,ror#2
    360 	ldr	r9,[r14,#15*4]
    361 	ldr	r10,[r14,#13*4]
    362 	ldr	r11,[r14,#7*4]
    363 	add	r6,r8,r6,ror#2			@ E+=K_xx_xx
    364 	ldr	r12,[r14,#2*4]
    365 	eor	r9,r9,r10
    366 	eor	r11,r11,r12			@ 1 cycle stall
    367 	eor	r10,r4,r5			@ F_xx_xx
    368 	mov	r9,r9,ror#31
    369 	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
    370 	eor	r9,r9,r11,ror#31
    371 	str	r9,[r14,#-4]!
    372 	and r10,r3,r10,ror#2					@ F_xx_xx
    373 	and r11,r4,r5					@ F_xx_xx
    374 	add	r6,r6,r9			@ E+=X[i]
    375 	add	r6,r6,r10			@ E+=F_40_59(B,C,D)
    376 	add	r6,r6,r11,ror#2
    377 	ldr	r9,[r14,#15*4]
    378 	ldr	r10,[r14,#13*4]
    379 	ldr	r11,[r14,#7*4]
    380 	add	r5,r8,r5,ror#2			@ E+=K_xx_xx
    381 	ldr	r12,[r14,#2*4]
    382 	eor	r9,r9,r10
    383 	eor	r11,r11,r12			@ 1 cycle stall
    384 	eor	r10,r3,r4			@ F_xx_xx
    385 	mov	r9,r9,ror#31
    386 	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
    387 	eor	r9,r9,r11,ror#31
    388 	str	r9,[r14,#-4]!
    389 	and r10,r7,r10,ror#2					@ F_xx_xx
    390 	and r11,r3,r4					@ F_xx_xx
    391 	add	r5,r5,r9			@ E+=X[i]
    392 	add	r5,r5,r10			@ E+=F_40_59(B,C,D)
    393 	add	r5,r5,r11,ror#2
    394 	ldr	r9,[r14,#15*4]
    395 	ldr	r10,[r14,#13*4]
    396 	ldr	r11,[r14,#7*4]
    397 	add	r4,r8,r4,ror#2			@ E+=K_xx_xx
    398 	ldr	r12,[r14,#2*4]
    399 	eor	r9,r9,r10
    400 	eor	r11,r11,r12			@ 1 cycle stall
    401 	eor	r10,r7,r3			@ F_xx_xx
    402 	mov	r9,r9,ror#31
    403 	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
    404 	eor	r9,r9,r11,ror#31
    405 	str	r9,[r14,#-4]!
    406 	and r10,r6,r10,ror#2					@ F_xx_xx
    407 	and r11,r7,r3					@ F_xx_xx
    408 	add	r4,r4,r9			@ E+=X[i]
    409 	add	r4,r4,r10			@ E+=F_40_59(B,C,D)
    410 	add	r4,r4,r11,ror#2
    411 	ldr	r9,[r14,#15*4]
    412 	ldr	r10,[r14,#13*4]
    413 	ldr	r11,[r14,#7*4]
    414 	add	r3,r8,r3,ror#2			@ E+=K_xx_xx
    415 	ldr	r12,[r14,#2*4]
    416 	eor	r9,r9,r10
    417 	eor	r11,r11,r12			@ 1 cycle stall
    418 	eor	r10,r6,r7			@ F_xx_xx
    419 	mov	r9,r9,ror#31
    420 	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
    421 	eor	r9,r9,r11,ror#31
    422 	str	r9,[r14,#-4]!
    423 	and r10,r5,r10,ror#2					@ F_xx_xx
    424 	and r11,r6,r7					@ F_xx_xx
    425 	add	r3,r3,r9			@ E+=X[i]
    426 	add	r3,r3,r10			@ E+=F_40_59(B,C,D)
    427 	add	r3,r3,r11,ror#2
    428 	teq	r14,sp
    429 	bne	.L_40_59		@ [+((12+5)*5+2)*4]
    430 
    431 	ldr	r8,.LK_60_79
    432 	sub	sp,sp,#20*4
    433 	cmp	sp,#0			@ set carry to denote 60_79
    434 	b	.L_20_39_or_60_79	@ [+4], spare 300 bytes
    435 .L_done:
    436 	add	sp,sp,#80*4		@ "deallocate" stack frame
    437 	ldmia	r0,{r8,r9,r10,r11,r12}
    438 	add	r3,r8,r3
    439 	add	r4,r9,r4
    440 	add	r5,r10,r5,ror#2
    441 	add	r6,r11,r6,ror#2
    442 	add	r7,r12,r7,ror#2
    443 	stmia	r0,{r3,r4,r5,r6,r7}
    444 	teq	r1,r2
    445 	bne	.Lloop			@ [+18], total 1307
    446 
    447 #if __ARM_ARCH__>=5
    448 	ldmia	sp!,{r4-r12,pc}
    449 #else
    450 	ldmia	sp!,{r4-r12,lr}
    451 	tst	lr,#1
    452 	moveq	pc,lr			@ be binary compatible with V4, yet
    453 	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
    454 #endif
    455 .size	sha1_block_data_order,.-sha1_block_data_order
    456 
    457 .align	5
    458 .LK_00_19:	.word	0x5a827999
    459 .LK_20_39:	.word	0x6ed9eba1
    460 .LK_40_59:	.word	0x8f1bbcdc
    461 .LK_60_79:	.word	0xca62c1d6
    462 .LOPENSSL_armcap:
    463 .word	OPENSSL_armcap_P-sha1_block_data_order
    464 .asciz	"SHA1 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro (at) openssl.org>"
    465 .align	5
    466 #if __ARM_ARCH__>=7
    467 .fpu	neon
    468 
    469 .type	sha1_block_data_order_neon,%function
    470 .align	4
    471 sha1_block_data_order_neon:
    472 .LNEON:
    473 	stmdb	sp!,{r4-r12,lr}
    474 	add	r2,r1,r2,lsl#6	@ r2 to point at the end of r1
    475 	@ dmb				@ errata #451034 on early Cortex A8
    476 	@ vstmdb	sp!,{d8-d15}	@ ABI specification says so
    477 	mov	r14,sp
    478 	sub	sp,sp,#64		@ alloca
    479 	adr	r8,.LK_00_19
    480 	bic	sp,sp,#15		@ align for 128-bit stores
    481 
    482 	ldmia	r0,{r3,r4,r5,r6,r7}	@ load context
    483 	mov	r12,sp
    484 
    485 	vld1.8		{q0-q1},[r1]!	@ handles unaligned
    486 	veor		q15,q15,q15
    487 	vld1.8		{q2-q3},[r1]!
    488 	vld1.32		{d28[],d29[]},[r8,:32]!	@ load K_00_19
    489 	vrev32.8	q0,q0		@ yes, even on
    490 	vrev32.8	q1,q1		@ big-endian...
    491 	vrev32.8	q2,q2
    492 	vadd.i32	q8,q0,q14
    493 	vrev32.8	q3,q3
    494 	vadd.i32	q9,q1,q14
    495 	vst1.32		{q8},[r12,:128]!
    496 	vadd.i32	q10,q2,q14
    497 	vst1.32		{q9},[r12,:128]!
    498 	vst1.32		{q10},[r12,:128]!
    499 	ldr		r9,[sp]			@ big RAW stall
    500 
    501 .Loop_neon:
    502 	vext.8	q8,q0,q1,#8
    503 	bic	r10,r6,r4
    504 	add	r7,r7,r9
    505 	and	r11,r5,r4
    506 	vadd.i32	q13,q3,q14
    507 	ldr	r9,[sp,#4]
    508 	add	r7,r7,r3,ror#27
    509 	vext.8	q12,q3,q15,#4
    510 	eor	r11,r11,r10
    511 	mov	r4,r4,ror#2
    512 	add	r7,r7,r11
    513 	veor	q8,q8,q0
    514 	bic	r10,r5,r3
    515 	add	r6,r6,r9
    516 	veor	q12,q12,q2
    517 	and	r11,r4,r3
    518 	ldr	r9,[sp,#8]
    519 	veor	q12,q12,q8
    520 	add	r6,r6,r7,ror#27
    521 	eor	r11,r11,r10
    522 	vst1.32	{q13},[r12,:128]!
    523 	sub	r12,r12,#64
    524 	mov	r3,r3,ror#2
    525 	add	r6,r6,r11
    526 	vext.8	q13,q15,q12,#4
    527 	bic	r10,r4,r7
    528 	add	r5,r5,r9
    529 	vadd.i32	q8,q12,q12
    530 	and	r11,r3,r7
    531 	ldr	r9,[sp,#12]
    532 	vsri.32	q8,q12,#31
    533 	add	r5,r5,r6,ror#27
    534 	eor	r11,r11,r10
    535 	mov	r7,r7,ror#2
    536 	vshr.u32	q12,q13,#30
    537 	add	r5,r5,r11
    538 	bic	r10,r3,r6
    539 	vshl.u32	q13,q13,#2
    540 	add	r4,r4,r9
    541 	and	r11,r7,r6
    542 	veor	q8,q8,q12
    543 	ldr	r9,[sp,#16]
    544 	add	r4,r4,r5,ror#27
    545 	veor	q8,q8,q13
    546 	eor	r11,r11,r10
    547 	mov	r6,r6,ror#2
    548 	add	r4,r4,r11
    549 	vext.8	q9,q1,q2,#8
    550 	bic	r10,r7,r5
    551 	add	r3,r3,r9
    552 	and	r11,r6,r5
    553 	vadd.i32	q13,q8,q14
    554 	ldr	r9,[sp,#20]
    555 	vld1.32	{d28[],d29[]},[r8,:32]!
    556 	add	r3,r3,r4,ror#27
    557 	vext.8	q12,q8,q15,#4
    558 	eor	r11,r11,r10
    559 	mov	r5,r5,ror#2
    560 	add	r3,r3,r11
    561 	veor	q9,q9,q1
    562 	bic	r10,r6,r4
    563 	add	r7,r7,r9
    564 	veor	q12,q12,q3
    565 	and	r11,r5,r4
    566 	ldr	r9,[sp,#24]
    567 	veor	q12,q12,q9
    568 	add	r7,r7,r3,ror#27
    569 	eor	r11,r11,r10
    570 	vst1.32	{q13},[r12,:128]!
    571 	mov	r4,r4,ror#2
    572 	add	r7,r7,r11
    573 	vext.8	q13,q15,q12,#4
    574 	bic	r10,r5,r3
    575 	add	r6,r6,r9
    576 	vadd.i32	q9,q12,q12
    577 	and	r11,r4,r3
    578 	ldr	r9,[sp,#28]
    579 	vsri.32	q9,q12,#31
    580 	add	r6,r6,r7,ror#27
    581 	eor	r11,r11,r10
    582 	mov	r3,r3,ror#2
    583 	vshr.u32	q12,q13,#30
    584 	add	r6,r6,r11
    585 	bic	r10,r4,r7
    586 	vshl.u32	q13,q13,#2
    587 	add	r5,r5,r9
    588 	and	r11,r3,r7
    589 	veor	q9,q9,q12
    590 	ldr	r9,[sp,#32]
    591 	add	r5,r5,r6,ror#27
    592 	veor	q9,q9,q13
    593 	eor	r11,r11,r10
    594 	mov	r7,r7,ror#2
    595 	add	r5,r5,r11
    596 	vext.8	q10,q2,q3,#8
    597 	bic	r10,r3,r6
    598 	add	r4,r4,r9
    599 	and	r11,r7,r6
    600 	vadd.i32	q13,q9,q14
    601 	ldr	r9,[sp,#36]
    602 	add	r4,r4,r5,ror#27
    603 	vext.8	q12,q9,q15,#4
    604 	eor	r11,r11,r10
    605 	mov	r6,r6,ror#2
    606 	add	r4,r4,r11
    607 	veor	q10,q10,q2
    608 	bic	r10,r7,r5
    609 	add	r3,r3,r9
    610 	veor	q12,q12,q8
    611 	and	r11,r6,r5
    612 	ldr	r9,[sp,#40]
    613 	veor	q12,q12,q10
    614 	add	r3,r3,r4,ror#27
    615 	eor	r11,r11,r10
    616 	vst1.32	{q13},[r12,:128]!
    617 	mov	r5,r5,ror#2
    618 	add	r3,r3,r11
    619 	vext.8	q13,q15,q12,#4
    620 	bic	r10,r6,r4
    621 	add	r7,r7,r9
    622 	vadd.i32	q10,q12,q12
    623 	and	r11,r5,r4
    624 	ldr	r9,[sp,#44]
    625 	vsri.32	q10,q12,#31
    626 	add	r7,r7,r3,ror#27
    627 	eor	r11,r11,r10
    628 	mov	r4,r4,ror#2
    629 	vshr.u32	q12,q13,#30
    630 	add	r7,r7,r11
    631 	bic	r10,r5,r3
    632 	vshl.u32	q13,q13,#2
    633 	add	r6,r6,r9
    634 	and	r11,r4,r3
    635 	veor	q10,q10,q12
    636 	ldr	r9,[sp,#48]
    637 	add	r6,r6,r7,ror#27
    638 	veor	q10,q10,q13
    639 	eor	r11,r11,r10
    640 	mov	r3,r3,ror#2
    641 	add	r6,r6,r11
    642 	vext.8	q11,q3,q8,#8
    643 	bic	r10,r4,r7
    644 	add	r5,r5,r9
    645 	and	r11,r3,r7
    646 	vadd.i32	q13,q10,q14
    647 	ldr	r9,[sp,#52]
    648 	add	r5,r5,r6,ror#27
    649 	vext.8	q12,q10,q15,#4
    650 	eor	r11,r11,r10
    651 	mov	r7,r7,ror#2
    652 	add	r5,r5,r11
    653 	veor	q11,q11,q3
    654 	bic	r10,r3,r6
    655 	add	r4,r4,r9
    656 	veor	q12,q12,q9
    657 	and	r11,r7,r6
    658 	ldr	r9,[sp,#56]
    659 	veor	q12,q12,q11
    660 	add	r4,r4,r5,ror#27
    661 	eor	r11,r11,r10
    662 	vst1.32	{q13},[r12,:128]!
    663 	mov	r6,r6,ror#2
    664 	add	r4,r4,r11
    665 	vext.8	q13,q15,q12,#4
    666 	bic	r10,r7,r5
    667 	add	r3,r3,r9
    668 	vadd.i32	q11,q12,q12
    669 	and	r11,r6,r5
    670 	ldr	r9,[sp,#60]
    671 	vsri.32	q11,q12,#31
    672 	add	r3,r3,r4,ror#27
    673 	eor	r11,r11,r10
    674 	mov	r5,r5,ror#2
    675 	vshr.u32	q12,q13,#30
    676 	add	r3,r3,r11
    677 	bic	r10,r6,r4
    678 	vshl.u32	q13,q13,#2
    679 	add	r7,r7,r9
    680 	and	r11,r5,r4
    681 	veor	q11,q11,q12
    682 	ldr	r9,[sp,#0]
    683 	add	r7,r7,r3,ror#27
    684 	veor	q11,q11,q13
    685 	eor	r11,r11,r10
    686 	mov	r4,r4,ror#2
    687 	add	r7,r7,r11
    688 	vext.8	q12,q10,q11,#8
    689 	bic	r10,r5,r3
    690 	add	r6,r6,r9
    691 	and	r11,r4,r3
    692 	veor	q0,q0,q8
    693 	ldr	r9,[sp,#4]
    694 	add	r6,r6,r7,ror#27
    695 	veor	q0,q0,q1
    696 	eor	r11,r11,r10
    697 	mov	r3,r3,ror#2
    698 	vadd.i32	q13,q11,q14
    699 	add	r6,r6,r11
    700 	bic	r10,r4,r7
    701 	veor	q12,q12,q0
    702 	add	r5,r5,r9
    703 	and	r11,r3,r7
    704 	vshr.u32	q0,q12,#30
    705 	ldr	r9,[sp,#8]
    706 	add	r5,r5,r6,ror#27
    707 	vst1.32	{q13},[r12,:128]!
    708 	sub	r12,r12,#64
    709 	eor	r11,r11,r10
    710 	mov	r7,r7,ror#2
    711 	vsli.32	q0,q12,#2
    712 	add	r5,r5,r11
    713 	bic	r10,r3,r6
    714 	add	r4,r4,r9
    715 	and	r11,r7,r6
    716 	ldr	r9,[sp,#12]
    717 	add	r4,r4,r5,ror#27
    718 	eor	r11,r11,r10
    719 	mov	r6,r6,ror#2
    720 	add	r4,r4,r11
    721 	bic	r10,r7,r5
    722 	add	r3,r3,r9
    723 	and	r11,r6,r5
    724 	ldr	r9,[sp,#16]
    725 	add	r3,r3,r4,ror#27
    726 	eor	r11,r11,r10
    727 	mov	r5,r5,ror#2
    728 	add	r3,r3,r11
    729 	vext.8	q12,q11,q0,#8
    730 	eor	r10,r4,r6
    731 	add	r7,r7,r9
    732 	ldr	r9,[sp,#20]
    733 	veor	q1,q1,q9
    734 	eor	r11,r10,r5
    735 	add	r7,r7,r3,ror#27
    736 	veor	q1,q1,q2
    737 	mov	r4,r4,ror#2
    738 	add	r7,r7,r11
    739 	vadd.i32	q13,q0,q14
    740 	eor	r10,r3,r5
    741 	add	r6,r6,r9
    742 	veor	q12,q12,q1
    743 	ldr	r9,[sp,#24]
    744 	eor	r11,r10,r4
    745 	vshr.u32	q1,q12,#30
    746 	add	r6,r6,r7,ror#27
    747 	mov	r3,r3,ror#2
    748 	vst1.32	{q13},[r12,:128]!
    749 	add	r6,r6,r11
    750 	eor	r10,r7,r4
    751 	vsli.32	q1,q12,#2
    752 	add	r5,r5,r9
    753 	ldr	r9,[sp,#28]
    754 	eor	r11,r10,r3
    755 	add	r5,r5,r6,ror#27
    756 	mov	r7,r7,ror#2
    757 	add	r5,r5,r11
    758 	eor	r10,r6,r3
    759 	add	r4,r4,r9
    760 	ldr	r9,[sp,#32]
    761 	eor	r11,r10,r7
    762 	add	r4,r4,r5,ror#27
    763 	mov	r6,r6,ror#2
    764 	add	r4,r4,r11
    765 	vext.8	q12,q0,q1,#8
    766 	eor	r10,r5,r7
    767 	add	r3,r3,r9
    768 	ldr	r9,[sp,#36]
    769 	veor	q2,q2,q10
    770 	eor	r11,r10,r6
    771 	add	r3,r3,r4,ror#27
    772 	veor	q2,q2,q3
    773 	mov	r5,r5,ror#2
    774 	add	r3,r3,r11
    775 	vadd.i32	q13,q1,q14
    776 	eor	r10,r4,r6
    777 	vld1.32	{d28[],d29[]},[r8,:32]!
    778 	add	r7,r7,r9
    779 	veor	q12,q12,q2
    780 	ldr	r9,[sp,#40]
    781 	eor	r11,r10,r5
    782 	vshr.u32	q2,q12,#30
    783 	add	r7,r7,r3,ror#27
    784 	mov	r4,r4,ror#2
    785 	vst1.32	{q13},[r12,:128]!
    786 	add	r7,r7,r11
    787 	eor	r10,r3,r5
    788 	vsli.32	q2,q12,#2
    789 	add	r6,r6,r9
    790 	ldr	r9,[sp,#44]
    791 	eor	r11,r10,r4
    792 	add	r6,r6,r7,ror#27
    793 	mov	r3,r3,ror#2
    794 	add	r6,r6,r11
    795 	eor	r10,r7,r4
    796 	add	r5,r5,r9
    797 	ldr	r9,[sp,#48]
    798 	eor	r11,r10,r3
    799 	add	r5,r5,r6,ror#27
    800 	mov	r7,r7,ror#2
    801 	add	r5,r5,r11
    802 	vext.8	q12,q1,q2,#8
    803 	eor	r10,r6,r3
    804 	add	r4,r4,r9
    805 	ldr	r9,[sp,#52]
    806 	veor	q3,q3,q11
    807 	eor	r11,r10,r7
    808 	add	r4,r4,r5,ror#27
    809 	veor	q3,q3,q8
    810 	mov	r6,r6,ror#2
    811 	add	r4,r4,r11
    812 	vadd.i32	q13,q2,q14
    813 	eor	r10,r5,r7
    814 	add	r3,r3,r9
    815 	veor	q12,q12,q3
    816 	ldr	r9,[sp,#56]
    817 	eor	r11,r10,r6
    818 	vshr.u32	q3,q12,#30
    819 	add	r3,r3,r4,ror#27
    820 	mov	r5,r5,ror#2
    821 	vst1.32	{q13},[r12,:128]!
    822 	add	r3,r3,r11
    823 	eor	r10,r4,r6
    824 	vsli.32	q3,q12,#2
    825 	add	r7,r7,r9
    826 	ldr	r9,[sp,#60]
    827 	eor	r11,r10,r5
    828 	add	r7,r7,r3,ror#27
    829 	mov	r4,r4,ror#2
    830 	add	r7,r7,r11
    831 	eor	r10,r3,r5
    832 	add	r6,r6,r9
    833 	ldr	r9,[sp,#0]
    834 	eor	r11,r10,r4
    835 	add	r6,r6,r7,ror#27
    836 	mov	r3,r3,ror#2
    837 	add	r6,r6,r11
    838 	vext.8	q12,q2,q3,#8
    839 	eor	r10,r7,r4
    840 	add	r5,r5,r9
    841 	ldr	r9,[sp,#4]
    842 	veor	q8,q8,q0
    843 	eor	r11,r10,r3
    844 	add	r5,r5,r6,ror#27
    845 	veor	q8,q8,q9
    846 	mov	r7,r7,ror#2
    847 	add	r5,r5,r11
    848 	vadd.i32	q13,q3,q14
    849 	eor	r10,r6,r3
    850 	add	r4,r4,r9
    851 	veor	q12,q12,q8
    852 	ldr	r9,[sp,#8]
    853 	eor	r11,r10,r7
    854 	vshr.u32	q8,q12,#30
    855 	add	r4,r4,r5,ror#27
    856 	mov	r6,r6,ror#2
    857 	vst1.32	{q13},[r12,:128]!
    858 	sub	r12,r12,#64
    859 	add	r4,r4,r11
    860 	eor	r10,r5,r7
    861 	vsli.32	q8,q12,#2
    862 	add	r3,r3,r9
    863 	ldr	r9,[sp,#12]
    864 	eor	r11,r10,r6
    865 	add	r3,r3,r4,ror#27
    866 	mov	r5,r5,ror#2
    867 	add	r3,r3,r11
    868 	eor	r10,r4,r6
    869 	add	r7,r7,r9
    870 	ldr	r9,[sp,#16]
    871 	eor	r11,r10,r5
    872 	add	r7,r7,r3,ror#27
    873 	mov	r4,r4,ror#2
    874 	add	r7,r7,r11
    875 	vext.8	q12,q3,q8,#8
    876 	eor	r10,r3,r5
    877 	add	r6,r6,r9
    878 	ldr	r9,[sp,#20]
    879 	veor	q9,q9,q1
    880 	eor	r11,r10,r4
    881 	add	r6,r6,r7,ror#27
    882 	veor	q9,q9,q10
    883 	mov	r3,r3,ror#2
    884 	add	r6,r6,r11
    885 	vadd.i32	q13,q8,q14
    886 	eor	r10,r7,r4
    887 	add	r5,r5,r9
    888 	veor	q12,q12,q9
    889 	ldr	r9,[sp,#24]
    890 	eor	r11,r10,r3
    891 	vshr.u32	q9,q12,#30
    892 	add	r5,r5,r6,ror#27
    893 	mov	r7,r7,ror#2
    894 	vst1.32	{q13},[r12,:128]!
    895 	add	r5,r5,r11
    896 	eor	r10,r6,r3
    897 	vsli.32	q9,q12,#2
    898 	add	r4,r4,r9
    899 	ldr	r9,[sp,#28]
    900 	eor	r11,r10,r7
    901 	add	r4,r4,r5,ror#27
    902 	mov	r6,r6,ror#2
    903 	add	r4,r4,r11
    904 	eor	r10,r5,r7
    905 	add	r3,r3,r9
    906 	ldr	r9,[sp,#32]
    907 	eor	r11,r10,r6
    908 	add	r3,r3,r4,ror#27
    909 	mov	r5,r5,ror#2
    910 	add	r3,r3,r11
    911 	vext.8	q12,q8,q9,#8
    912 	add	r7,r7,r9
    913 	and	r10,r5,r6
    914 	ldr	r9,[sp,#36]
    915 	veor	q10,q10,q2
    916 	add	r7,r7,r3,ror#27
    917 	eor	r11,r5,r6
    918 	veor	q10,q10,q11
    919 	add	r7,r7,r10
    920 	and	r11,r11,r4
    921 	vadd.i32	q13,q9,q14
    922 	mov	r4,r4,ror#2
    923 	add	r7,r7,r11
    924 	veor	q12,q12,q10
    925 	add	r6,r6,r9
    926 	and	r10,r4,r5
    927 	vshr.u32	q10,q12,#30
    928 	ldr	r9,[sp,#40]
    929 	add	r6,r6,r7,ror#27
    930 	vst1.32	{q13},[r12,:128]!
    931 	eor	r11,r4,r5
    932 	add	r6,r6,r10
    933 	vsli.32	q10,q12,#2
    934 	and	r11,r11,r3
    935 	mov	r3,r3,ror#2
    936 	add	r6,r6,r11
    937 	add	r5,r5,r9
    938 	and	r10,r3,r4
    939 	ldr	r9,[sp,#44]
    940 	add	r5,r5,r6,ror#27
    941 	eor	r11,r3,r4
    942 	add	r5,r5,r10
    943 	and	r11,r11,r7
    944 	mov	r7,r7,ror#2
    945 	add	r5,r5,r11
    946 	add	r4,r4,r9
    947 	and	r10,r7,r3
    948 	ldr	r9,[sp,#48]
    949 	add	r4,r4,r5,ror#27
    950 	eor	r11,r7,r3
    951 	add	r4,r4,r10
    952 	and	r11,r11,r6
    953 	mov	r6,r6,ror#2
    954 	add	r4,r4,r11
    955 	vext.8	q12,q9,q10,#8
    956 	add	r3,r3,r9
    957 	and	r10,r6,r7
    958 	ldr	r9,[sp,#52]
    959 	veor	q11,q11,q3
    960 	add	r3,r3,r4,ror#27
    961 	eor	r11,r6,r7
    962 	veor	q11,q11,q0
    963 	add	r3,r3,r10
    964 	and	r11,r11,r5
    965 	vadd.i32	q13,q10,q14
    966 	mov	r5,r5,ror#2
    967 	vld1.32	{d28[],d29[]},[r8,:32]!
    968 	add	r3,r3,r11
    969 	veor	q12,q12,q11
    970 	add	r7,r7,r9
    971 	and	r10,r5,r6
    972 	vshr.u32	q11,q12,#30
    973 	ldr	r9,[sp,#56]
    974 	add	r7,r7,r3,ror#27
    975 	vst1.32	{q13},[r12,:128]!
    976 	eor	r11,r5,r6
    977 	add	r7,r7,r10
    978 	vsli.32	q11,q12,#2
    979 	and	r11,r11,r4
    980 	mov	r4,r4,ror#2
    981 	add	r7,r7,r11
    982 	add	r6,r6,r9
    983 	and	r10,r4,r5
    984 	ldr	r9,[sp,#60]
    985 	add	r6,r6,r7,ror#27
    986 	eor	r11,r4,r5
    987 	add	r6,r6,r10
    988 	and	r11,r11,r3
    989 	mov	r3,r3,ror#2
    990 	add	r6,r6,r11
    991 	add	r5,r5,r9
    992 	and	r10,r3,r4
    993 	ldr	r9,[sp,#0]
    994 	add	r5,r5,r6,ror#27
    995 	eor	r11,r3,r4
    996 	add	r5,r5,r10
    997 	and	r11,r11,r7
    998 	mov	r7,r7,ror#2
    999 	add	r5,r5,r11
   1000 	vext.8	q12,q10,q11,#8
   1001 	add	r4,r4,r9
   1002 	and	r10,r7,r3
   1003 	ldr	r9,[sp,#4]
   1004 	veor	q0,q0,q8
   1005 	add	r4,r4,r5,ror#27
   1006 	eor	r11,r7,r3
   1007 	veor	q0,q0,q1
   1008 	add	r4,r4,r10
   1009 	and	r11,r11,r6
   1010 	vadd.i32	q13,q11,q14
   1011 	mov	r6,r6,ror#2
   1012 	add	r4,r4,r11
   1013 	veor	q12,q12,q0
   1014 	add	r3,r3,r9
   1015 	and	r10,r6,r7
   1016 	vshr.u32	q0,q12,#30
   1017 	ldr	r9,[sp,#8]
   1018 	add	r3,r3,r4,ror#27
   1019 	vst1.32	{q13},[r12,:128]!
   1020 	sub	r12,r12,#64
   1021 	eor	r11,r6,r7
   1022 	add	r3,r3,r10
   1023 	vsli.32	q0,q12,#2
   1024 	and	r11,r11,r5
   1025 	mov	r5,r5,ror#2
   1026 	add	r3,r3,r11
   1027 	add	r7,r7,r9
   1028 	and	r10,r5,r6
   1029 	ldr	r9,[sp,#12]
   1030 	add	r7,r7,r3,ror#27
   1031 	eor	r11,r5,r6
   1032 	add	r7,r7,r10
   1033 	and	r11,r11,r4
   1034 	mov	r4,r4,ror#2
   1035 	add	r7,r7,r11
   1036 	add	r6,r6,r9
   1037 	and	r10,r4,r5
   1038 	ldr	r9,[sp,#16]
   1039 	add	r6,r6,r7,ror#27
   1040 	eor	r11,r4,r5
   1041 	add	r6,r6,r10
   1042 	and	r11,r11,r3
   1043 	mov	r3,r3,ror#2
   1044 	add	r6,r6,r11
   1045 	vext.8	q12,q11,q0,#8
   1046 	add	r5,r5,r9
   1047 	and	r10,r3,r4
   1048 	ldr	r9,[sp,#20]
   1049 	veor	q1,q1,q9
   1050 	add	r5,r5,r6,ror#27
   1051 	eor	r11,r3,r4
   1052 	veor	q1,q1,q2
   1053 	add	r5,r5,r10
   1054 	and	r11,r11,r7
   1055 	vadd.i32	q13,q0,q14
   1056 	mov	r7,r7,ror#2
   1057 	add	r5,r5,r11
   1058 	veor	q12,q12,q1
   1059 	add	r4,r4,r9
   1060 	and	r10,r7,r3
   1061 	vshr.u32	q1,q12,#30
   1062 	ldr	r9,[sp,#24]
   1063 	add	r4,r4,r5,ror#27
   1064 	vst1.32	{q13},[r12,:128]!
   1065 	eor	r11,r7,r3
   1066 	add	r4,r4,r10
   1067 	vsli.32	q1,q12,#2
   1068 	and	r11,r11,r6
   1069 	mov	r6,r6,ror#2
   1070 	add	r4,r4,r11
   1071 	add	r3,r3,r9
   1072 	and	r10,r6,r7
   1073 	ldr	r9,[sp,#28]
   1074 	add	r3,r3,r4,ror#27
   1075 	eor	r11,r6,r7
   1076 	add	r3,r3,r10
   1077 	and	r11,r11,r5
   1078 	mov	r5,r5,ror#2
   1079 	add	r3,r3,r11
   1080 	add	r7,r7,r9
   1081 	and	r10,r5,r6
   1082 	ldr	r9,[sp,#32]
   1083 	add	r7,r7,r3,ror#27
   1084 	eor	r11,r5,r6
   1085 	add	r7,r7,r10
   1086 	and	r11,r11,r4
   1087 	mov	r4,r4,ror#2
   1088 	add	r7,r7,r11
   1089 	vext.8	q12,q0,q1,#8
   1090 	add	r6,r6,r9
   1091 	and	r10,r4,r5
   1092 	ldr	r9,[sp,#36]
   1093 	veor	q2,q2,q10
   1094 	add	r6,r6,r7,ror#27
   1095 	eor	r11,r4,r5
   1096 	veor	q2,q2,q3
   1097 	add	r6,r6,r10
   1098 	and	r11,r11,r3
   1099 	vadd.i32	q13,q1,q14
   1100 	mov	r3,r3,ror#2
   1101 	add	r6,r6,r11
   1102 	veor	q12,q12,q2
   1103 	add	r5,r5,r9
   1104 	and	r10,r3,r4
   1105 	vshr.u32	q2,q12,#30
   1106 	ldr	r9,[sp,#40]
   1107 	add	r5,r5,r6,ror#27
   1108 	vst1.32	{q13},[r12,:128]!
   1109 	eor	r11,r3,r4
   1110 	add	r5,r5,r10
   1111 	vsli.32	q2,q12,#2
   1112 	and	r11,r11,r7
   1113 	mov	r7,r7,ror#2
   1114 	add	r5,r5,r11
   1115 	add	r4,r4,r9
   1116 	and	r10,r7,r3
   1117 	ldr	r9,[sp,#44]
   1118 	add	r4,r4,r5,ror#27
   1119 	eor	r11,r7,r3
   1120 	add	r4,r4,r10
   1121 	and	r11,r11,r6
   1122 	mov	r6,r6,ror#2
   1123 	add	r4,r4,r11
   1124 	add	r3,r3,r9
   1125 	and	r10,r6,r7
   1126 	ldr	r9,[sp,#48]
   1127 	add	r3,r3,r4,ror#27
   1128 	eor	r11,r6,r7
   1129 	add	r3,r3,r10
   1130 	and	r11,r11,r5
   1131 	mov	r5,r5,ror#2
   1132 	add	r3,r3,r11
   1133 	vext.8	q12,q1,q2,#8
   1134 	eor	r10,r4,r6
   1135 	add	r7,r7,r9
   1136 	ldr	r9,[sp,#52]
   1137 	veor	q3,q3,q11
   1138 	eor	r11,r10,r5
   1139 	add	r7,r7,r3,ror#27
   1140 	veor	q3,q3,q8
   1141 	mov	r4,r4,ror#2
   1142 	add	r7,r7,r11
   1143 	vadd.i32	q13,q2,q14
   1144 	eor	r10,r3,r5
   1145 	add	r6,r6,r9
   1146 	veor	q12,q12,q3
   1147 	ldr	r9,[sp,#56]
   1148 	eor	r11,r10,r4
   1149 	vshr.u32	q3,q12,#30
   1150 	add	r6,r6,r7,ror#27
   1151 	mov	r3,r3,ror#2
   1152 	vst1.32	{q13},[r12,:128]!
   1153 	add	r6,r6,r11
   1154 	eor	r10,r7,r4
   1155 	vsli.32	q3,q12,#2
   1156 	add	r5,r5,r9
   1157 	ldr	r9,[sp,#60]
   1158 	eor	r11,r10,r3
   1159 	add	r5,r5,r6,ror#27
   1160 	mov	r7,r7,ror#2
   1161 	add	r5,r5,r11
   1162 	eor	r10,r6,r3
   1163 	add	r4,r4,r9
   1164 	ldr	r9,[sp,#0]
   1165 	eor	r11,r10,r7
   1166 	add	r4,r4,r5,ror#27
   1167 	mov	r6,r6,ror#2
   1168 	add	r4,r4,r11
   1169 	vadd.i32	q13,q3,q14
   1170 	eor	r10,r5,r7
   1171 	add	r3,r3,r9
   1172 	vst1.32	{q13},[r12,:128]!
   1173 	sub	r12,r12,#64
   1174 	teq	r1,r2
   1175 	sub	r8,r8,#16
   1176 	subeq	r1,r1,#64
   1177 	vld1.8	{q0-q1},[r1]!
   1178 	ldr	r9,[sp,#4]
   1179 	eor	r11,r10,r6
   1180 	vld1.8	{q2-q3},[r1]!
   1181 	add	r3,r3,r4,ror#27
   1182 	mov	r5,r5,ror#2
   1183 	vld1.32	{d28[],d29[]},[r8,:32]!
   1184 	add	r3,r3,r11
   1185 	eor	r10,r4,r6
   1186 	vrev32.8	q0,q0
   1187 	add	r7,r7,r9
   1188 	ldr	r9,[sp,#8]
   1189 	eor	r11,r10,r5
   1190 	add	r7,r7,r3,ror#27
   1191 	mov	r4,r4,ror#2
   1192 	add	r7,r7,r11
   1193 	eor	r10,r3,r5
   1194 	add	r6,r6,r9
   1195 	ldr	r9,[sp,#12]
   1196 	eor	r11,r10,r4
   1197 	add	r6,r6,r7,ror#27
   1198 	mov	r3,r3,ror#2
   1199 	add	r6,r6,r11
   1200 	eor	r10,r7,r4
   1201 	add	r5,r5,r9
   1202 	ldr	r9,[sp,#16]
   1203 	eor	r11,r10,r3
   1204 	add	r5,r5,r6,ror#27
   1205 	mov	r7,r7,ror#2
   1206 	add	r5,r5,r11
   1207 	vrev32.8	q1,q1
   1208 	eor	r10,r6,r3
   1209 	add	r4,r4,r9
   1210 	vadd.i32	q8,q0,q14
   1211 	ldr	r9,[sp,#20]
   1212 	eor	r11,r10,r7
   1213 	vst1.32	{q8},[r12,:128]!
   1214 	add	r4,r4,r5,ror#27
   1215 	mov	r6,r6,ror#2
   1216 	add	r4,r4,r11
   1217 	eor	r10,r5,r7
   1218 	add	r3,r3,r9
   1219 	ldr	r9,[sp,#24]
   1220 	eor	r11,r10,r6
   1221 	add	r3,r3,r4,ror#27
   1222 	mov	r5,r5,ror#2
   1223 	add	r3,r3,r11
   1224 	eor	r10,r4,r6
   1225 	add	r7,r7,r9
   1226 	ldr	r9,[sp,#28]
   1227 	eor	r11,r10,r5
   1228 	add	r7,r7,r3,ror#27
   1229 	mov	r4,r4,ror#2
   1230 	add	r7,r7,r11
   1231 	eor	r10,r3,r5
   1232 	add	r6,r6,r9
   1233 	ldr	r9,[sp,#32]
   1234 	eor	r11,r10,r4
   1235 	add	r6,r6,r7,ror#27
   1236 	mov	r3,r3,ror#2
   1237 	add	r6,r6,r11
   1238 	vrev32.8	q2,q2
   1239 	eor	r10,r7,r4
   1240 	add	r5,r5,r9
   1241 	vadd.i32	q9,q1,q14
   1242 	ldr	r9,[sp,#36]
   1243 	eor	r11,r10,r3
   1244 	vst1.32	{q9},[r12,:128]!
   1245 	add	r5,r5,r6,ror#27
   1246 	mov	r7,r7,ror#2
   1247 	add	r5,r5,r11
   1248 	eor	r10,r6,r3
   1249 	add	r4,r4,r9
   1250 	ldr	r9,[sp,#40]
   1251 	eor	r11,r10,r7
   1252 	add	r4,r4,r5,ror#27
   1253 	mov	r6,r6,ror#2
   1254 	add	r4,r4,r11
   1255 	eor	r10,r5,r7
   1256 	add	r3,r3,r9
   1257 	ldr	r9,[sp,#44]
   1258 	eor	r11,r10,r6
   1259 	add	r3,r3,r4,ror#27
   1260 	mov	r5,r5,ror#2
   1261 	add	r3,r3,r11
   1262 	eor	r10,r4,r6
   1263 	add	r7,r7,r9
   1264 	ldr	r9,[sp,#48]
   1265 	eor	r11,r10,r5
   1266 	add	r7,r7,r3,ror#27
   1267 	mov	r4,r4,ror#2
   1268 	add	r7,r7,r11
   1269 	vrev32.8	q3,q3
   1270 	eor	r10,r3,r5
   1271 	add	r6,r6,r9
   1272 	vadd.i32	q10,q2,q14
   1273 	ldr	r9,[sp,#52]
   1274 	eor	r11,r10,r4
   1275 	vst1.32	{q10},[r12,:128]!
   1276 	add	r6,r6,r7,ror#27
   1277 	mov	r3,r3,ror#2
   1278 	add	r6,r6,r11
   1279 	eor	r10,r7,r4
   1280 	add	r5,r5,r9
   1281 	ldr	r9,[sp,#56]
   1282 	eor	r11,r10,r3
   1283 	add	r5,r5,r6,ror#27
   1284 	mov	r7,r7,ror#2
   1285 	add	r5,r5,r11
   1286 	eor	r10,r6,r3
   1287 	add	r4,r4,r9
   1288 	ldr	r9,[sp,#60]
   1289 	eor	r11,r10,r7
   1290 	add	r4,r4,r5,ror#27
   1291 	mov	r6,r6,ror#2
   1292 	add	r4,r4,r11
   1293 	eor	r10,r5,r7
   1294 	add	r3,r3,r9
   1295 	eor	r11,r10,r6
   1296 	add	r3,r3,r4,ror#27
   1297 	mov	r5,r5,ror#2
   1298 	add	r3,r3,r11
   1299 	ldmia	r0,{r9,r10,r11,r12}	@ accumulate context
   1300 	add	r3,r3,r9
   1301 	ldr	r9,[r0,#16]
   1302 	add	r4,r4,r10
   1303 	add	r5,r5,r11
   1304 	add	r6,r6,r12
   1305 	moveq	sp,r14
   1306 	add	r7,r7,r9
   1307 	ldrne	r9,[sp]
   1308 	stmia	r0,{r3,r4,r5,r6,r7}
   1309 	addne	r12,sp,#3*16
   1310 	bne	.Loop_neon
   1311 
   1312 	@ vldmia	sp!,{d8-d15}
   1313 	ldmia	sp!,{r4-r12,pc}
   1314 .size	sha1_block_data_order_neon,.-sha1_block_data_order_neon
   1315 #endif
   1316 #if __ARM_ARCH__>=7
   1317 .type	sha1_block_data_order_armv8,%function
   1318 .align	5
   1319 sha1_block_data_order_armv8:
   1320 .LARMv8:
   1321 	vstmdb	sp!,{d8-d15}		@ ABI specification says so
   1322 
   1323 	veor	q1,q1,q1
   1324 	adr	r3,.LK_00_19
   1325 	vld1.32	{q0},[r0]!
   1326 	vld1.32	{d2[0]},[r0]
   1327 	sub	r0,r0,#16
   1328 	vld1.32	{d16[],d17[]},[r3,:32]!
   1329 	vld1.32	{d18[],d19[]},[r3,:32]!
   1330 	vld1.32	{d20[],d21[]},[r3,:32]!
   1331 	vld1.32	{d22[],d23[]},[r3,:32]
   1332 
   1333 .Loop_v8:
   1334 	vld1.8		{q4-q5},[r1]!
   1335 	vld1.8		{q6-q7},[r1]!
   1336 	vrev32.8	q4,q4
   1337 	vrev32.8	q5,q5
   1338 
   1339 	vadd.i32	q12,q8,q4
   1340 	vrev32.8	q6,q6
   1341 	vmov		q14,q0	@ offload
   1342 	subs		r2,r2,#1
   1343 
   1344 	vadd.i32	q13,q8,q5
   1345 	vrev32.8	q7,q7
   1346 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 0
   1347 	.byte	0x68,0x0c,0x02,0xf2	@ sha1c q0,q1,q12
   1348 	vadd.i32	q12,q8,q6
   1349 	.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
   1350 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 1
   1351 	.byte	0x6a,0x0c,0x06,0xf2	@ sha1c q0,q3,q13
   1352 	vadd.i32	q13,q8,q7
   1353 	.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
   1354 	.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
   1355 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 2
   1356 	.byte	0x68,0x0c,0x04,0xf2	@ sha1c q0,q2,q12
   1357 	vadd.i32	q12,q8,q4
   1358 	.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
   1359 	.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
   1360 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 3
   1361 	.byte	0x6a,0x0c,0x06,0xf2	@ sha1c q0,q3,q13
   1362 	vadd.i32	q13,q9,q5
   1363 	.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
   1364 	.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
   1365 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 4
   1366 	.byte	0x68,0x0c,0x04,0xf2	@ sha1c q0,q2,q12
   1367 	vadd.i32	q12,q9,q6
   1368 	.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
   1369 	.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
   1370 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 5
   1371 	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
   1372 	vadd.i32	q13,q9,q7
   1373 	.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
   1374 	.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
   1375 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 6
   1376 	.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
   1377 	vadd.i32	q12,q9,q4
   1378 	.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
   1379 	.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
   1380 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 7
   1381 	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
   1382 	vadd.i32	q13,q9,q5
   1383 	.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
   1384 	.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
   1385 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 8
   1386 	.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
   1387 	vadd.i32	q12,q10,q6
   1388 	.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
   1389 	.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
   1390 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 9
   1391 	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
   1392 	vadd.i32	q13,q10,q7
   1393 	.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
   1394 	.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
   1395 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 10
   1396 	.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
   1397 	vadd.i32	q12,q10,q4
   1398 	.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
   1399 	.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
   1400 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 11
   1401 	.byte	0x6a,0x0c,0x26,0xf2	@ sha1m q0,q3,q13
   1402 	vadd.i32	q13,q10,q5
   1403 	.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
   1404 	.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
   1405 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 12
   1406 	.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
   1407 	vadd.i32	q12,q10,q6
   1408 	.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
   1409 	.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
   1410 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 13
   1411 	.byte	0x6a,0x0c,0x26,0xf2	@ sha1m q0,q3,q13
   1412 	vadd.i32	q13,q11,q7
   1413 	.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
   1414 	.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
   1415 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 14
   1416 	.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
   1417 	vadd.i32	q12,q11,q4
   1418 	.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
   1419 	.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
   1420 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 15
   1421 	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
   1422 	vadd.i32	q13,q11,q5
   1423 	.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
   1424 	.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
   1425 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 16
   1426 	.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
   1427 	vadd.i32	q12,q11,q6
   1428 	.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
   1429 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 17
   1430 	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
   1431 	vadd.i32	q13,q11,q7
   1432 
   1433 	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 18
   1434 	.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
   1435 
   1436 	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 19
   1437 	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
   1438 
   1439 	vadd.i32	q1,q1,q2
   1440 	vadd.i32	q0,q0,q14
   1441 	bne		.Loop_v8
   1442 
   1443 	vst1.32		{q0},[r0]!
   1444 	vst1.32		{d2[0]},[r0]
   1445 
   1446 	vldmia	sp!,{d8-d15}
   1447 	bx	lr					@ bx lr
   1448 .size	sha1_block_data_order_armv8,.-sha1_block_data_order_armv8
   1449 #endif
   1450 .comm	OPENSSL_armcap_P,4,4
   1451