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