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