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