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