1#include "arm_arch.h" 2 3#if defined(__thumb2__) 4.syntax unified 5.thumb 6#else 7.code 32 8#endif 9 10.text 11 12.globl sha1_block_data_order 13.type sha1_block_data_order,%function 14 15.align 5 16sha1_block_data_order: 17#if __ARM_MAX_ARCH__>=7 18.Lsha1_block: 19 ldr r12,.LOPENSSL_armcap 20# if !defined(_WIN32) 21 adr r3,.Lsha1_block 22 ldr r12,[r3,r12] @ OPENSSL_armcap_P 23# endif 24# if defined(__APPLE__) || defined(_WIN32) 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} 35.Lloop: 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] 42.L_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 272.L_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] 364.L_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 462.L_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.size sha1_block_data_order,.-sha1_block_data_order 483 484.align 5 485.LK_00_19:.word 0x5a827999 486.LK_20_39:.word 0x6ed9eba1 487.LK_40_59:.word 0x8f1bbcdc 488.LK_60_79:.word 0xca62c1d6 489#if __ARM_MAX_ARCH__>=7 490.LOPENSSL_armcap: 491# ifdef _WIN32 492.word OPENSSL_armcap_P 493# else 494.word OPENSSL_armcap_P-.Lsha1_block 495# endif 496#endif 497.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 498.align 2 499.align 5 500#if __ARM_MAX_ARCH__>=7 501.arch armv7-a 502.fpu neon 503 504.type sha1_block_data_order_neon,%function 505.align 4 506sha1_block_data_order_neon: 507.LNEON: 508 stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr} 509 add r2,r1,r2,lsl#6 @ r2 to point at the end of r1 510 @ dmb @ errata #451034 on early Cortex A8 511 @ vstmdb sp!,{d8-d15} @ ABI specification says so 512 mov r14,sp 513 sub r12,sp,#64 514 adr r8,.LK_00_19 515 bic r12,r12,#15 @ align for 128-bit stores 516 517 ldmia r0,{r3,r4,r5,r6,r7} @ load context 518 mov sp,r12 @ alloca 519 520 vld1.8 {q0,q1},[r1]! @ handles unaligned 521 veor q15,q15,q15 522 vld1.8 {q2,q3},[r1]! 523 vld1.32 {d28[],d29[]},[r8,:32]! @ load K_00_19 524 vrev32.8 q0,q0 @ yes, even on 525 vrev32.8 q1,q1 @ big-endian... 526 vrev32.8 q2,q2 527 vadd.i32 q8,q0,q14 528 vrev32.8 q3,q3 529 vadd.i32 q9,q1,q14 530 vst1.32 {q8},[r12,:128]! 531 vadd.i32 q10,q2,q14 532 vst1.32 {q9},[r12,:128]! 533 vst1.32 {q10},[r12,:128]! 534 ldr r9,[sp] @ big RAW stall 535 536.Loop_neon: 537 vext.8 q8,q0,q1,#8 538 bic r10,r6,r4 539 add r7,r7,r9 540 and r11,r5,r4 541 vadd.i32 q13,q3,q14 542 ldr r9,[sp,#4] 543 add r7,r7,r3,ror#27 544 vext.8 q12,q3,q15,#4 545 eor r11,r11,r10 546 mov r4,r4,ror#2 547 add r7,r7,r11 548 veor q8,q8,q0 549 bic r10,r5,r3 550 add r6,r6,r9 551 veor q12,q12,q2 552 and r11,r4,r3 553 ldr r9,[sp,#8] 554 veor q12,q12,q8 555 add r6,r6,r7,ror#27 556 eor r11,r11,r10 557 vst1.32 {q13},[r12,:128]! 558 sub r12,r12,#64 559 mov r3,r3,ror#2 560 add r6,r6,r11 561 vext.8 q13,q15,q12,#4 562 bic r10,r4,r7 563 add r5,r5,r9 564 vadd.i32 q8,q12,q12 565 and r11,r3,r7 566 ldr r9,[sp,#12] 567 vsri.32 q8,q12,#31 568 add r5,r5,r6,ror#27 569 eor r11,r11,r10 570 mov r7,r7,ror#2 571 vshr.u32 q12,q13,#30 572 add r5,r5,r11 573 bic r10,r3,r6 574 vshl.u32 q13,q13,#2 575 add r4,r4,r9 576 and r11,r7,r6 577 veor q8,q8,q12 578 ldr r9,[sp,#16] 579 add r4,r4,r5,ror#27 580 veor q8,q8,q13 581 eor r11,r11,r10 582 mov r6,r6,ror#2 583 add r4,r4,r11 584 vext.8 q9,q1,q2,#8 585 bic r10,r7,r5 586 add r3,r3,r9 587 and r11,r6,r5 588 vadd.i32 q13,q8,q14 589 ldr r9,[sp,#20] 590 vld1.32 {d28[],d29[]},[r8,:32]! 591 add r3,r3,r4,ror#27 592 vext.8 q12,q8,q15,#4 593 eor r11,r11,r10 594 mov r5,r5,ror#2 595 add r3,r3,r11 596 veor q9,q9,q1 597 bic r10,r6,r4 598 add r7,r7,r9 599 veor q12,q12,q3 600 and r11,r5,r4 601 ldr r9,[sp,#24] 602 veor q12,q12,q9 603 add r7,r7,r3,ror#27 604 eor r11,r11,r10 605 vst1.32 {q13},[r12,:128]! 606 mov r4,r4,ror#2 607 add r7,r7,r11 608 vext.8 q13,q15,q12,#4 609 bic r10,r5,r3 610 add r6,r6,r9 611 vadd.i32 q9,q12,q12 612 and r11,r4,r3 613 ldr r9,[sp,#28] 614 vsri.32 q9,q12,#31 615 add r6,r6,r7,ror#27 616 eor r11,r11,r10 617 mov r3,r3,ror#2 618 vshr.u32 q12,q13,#30 619 add r6,r6,r11 620 bic r10,r4,r7 621 vshl.u32 q13,q13,#2 622 add r5,r5,r9 623 and r11,r3,r7 624 veor q9,q9,q12 625 ldr r9,[sp,#32] 626 add r5,r5,r6,ror#27 627 veor q9,q9,q13 628 eor r11,r11,r10 629 mov r7,r7,ror#2 630 add r5,r5,r11 631 vext.8 q10,q2,q3,#8 632 bic r10,r3,r6 633 add r4,r4,r9 634 and r11,r7,r6 635 vadd.i32 q13,q9,q14 636 ldr r9,[sp,#36] 637 add r4,r4,r5,ror#27 638 vext.8 q12,q9,q15,#4 639 eor r11,r11,r10 640 mov r6,r6,ror#2 641 add r4,r4,r11 642 veor q10,q10,q2 643 bic r10,r7,r5 644 add r3,r3,r9 645 veor q12,q12,q8 646 and r11,r6,r5 647 ldr r9,[sp,#40] 648 veor q12,q12,q10 649 add r3,r3,r4,ror#27 650 eor r11,r11,r10 651 vst1.32 {q13},[r12,:128]! 652 mov r5,r5,ror#2 653 add r3,r3,r11 654 vext.8 q13,q15,q12,#4 655 bic r10,r6,r4 656 add r7,r7,r9 657 vadd.i32 q10,q12,q12 658 and r11,r5,r4 659 ldr r9,[sp,#44] 660 vsri.32 q10,q12,#31 661 add r7,r7,r3,ror#27 662 eor r11,r11,r10 663 mov r4,r4,ror#2 664 vshr.u32 q12,q13,#30 665 add r7,r7,r11 666 bic r10,r5,r3 667 vshl.u32 q13,q13,#2 668 add r6,r6,r9 669 and r11,r4,r3 670 veor q10,q10,q12 671 ldr r9,[sp,#48] 672 add r6,r6,r7,ror#27 673 veor q10,q10,q13 674 eor r11,r11,r10 675 mov r3,r3,ror#2 676 add r6,r6,r11 677 vext.8 q11,q3,q8,#8 678 bic r10,r4,r7 679 add r5,r5,r9 680 and r11,r3,r7 681 vadd.i32 q13,q10,q14 682 ldr r9,[sp,#52] 683 add r5,r5,r6,ror#27 684 vext.8 q12,q10,q15,#4 685 eor r11,r11,r10 686 mov r7,r7,ror#2 687 add r5,r5,r11 688 veor q11,q11,q3 689 bic r10,r3,r6 690 add r4,r4,r9 691 veor q12,q12,q9 692 and r11,r7,r6 693 ldr r9,[sp,#56] 694 veor q12,q12,q11 695 add r4,r4,r5,ror#27 696 eor r11,r11,r10 697 vst1.32 {q13},[r12,:128]! 698 mov r6,r6,ror#2 699 add r4,r4,r11 700 vext.8 q13,q15,q12,#4 701 bic r10,r7,r5 702 add r3,r3,r9 703 vadd.i32 q11,q12,q12 704 and r11,r6,r5 705 ldr r9,[sp,#60] 706 vsri.32 q11,q12,#31 707 add r3,r3,r4,ror#27 708 eor r11,r11,r10 709 mov r5,r5,ror#2 710 vshr.u32 q12,q13,#30 711 add r3,r3,r11 712 bic r10,r6,r4 713 vshl.u32 q13,q13,#2 714 add r7,r7,r9 715 and r11,r5,r4 716 veor q11,q11,q12 717 ldr r9,[sp,#0] 718 add r7,r7,r3,ror#27 719 veor q11,q11,q13 720 eor r11,r11,r10 721 mov r4,r4,ror#2 722 add r7,r7,r11 723 vext.8 q12,q10,q11,#8 724 bic r10,r5,r3 725 add r6,r6,r9 726 and r11,r4,r3 727 veor q0,q0,q8 728 ldr r9,[sp,#4] 729 add r6,r6,r7,ror#27 730 veor q0,q0,q1 731 eor r11,r11,r10 732 mov r3,r3,ror#2 733 vadd.i32 q13,q11,q14 734 add r6,r6,r11 735 bic r10,r4,r7 736 veor q12,q12,q0 737 add r5,r5,r9 738 and r11,r3,r7 739 vshr.u32 q0,q12,#30 740 ldr r9,[sp,#8] 741 add r5,r5,r6,ror#27 742 vst1.32 {q13},[r12,:128]! 743 sub r12,r12,#64 744 eor r11,r11,r10 745 mov r7,r7,ror#2 746 vsli.32 q0,q12,#2 747 add r5,r5,r11 748 bic r10,r3,r6 749 add r4,r4,r9 750 and r11,r7,r6 751 ldr r9,[sp,#12] 752 add r4,r4,r5,ror#27 753 eor r11,r11,r10 754 mov r6,r6,ror#2 755 add r4,r4,r11 756 bic r10,r7,r5 757 add r3,r3,r9 758 and r11,r6,r5 759 ldr r9,[sp,#16] 760 add r3,r3,r4,ror#27 761 eor r11,r11,r10 762 mov r5,r5,ror#2 763 add r3,r3,r11 764 vext.8 q12,q11,q0,#8 765 eor r10,r4,r6 766 add r7,r7,r9 767 ldr r9,[sp,#20] 768 veor q1,q1,q9 769 eor r11,r10,r5 770 add r7,r7,r3,ror#27 771 veor q1,q1,q2 772 mov r4,r4,ror#2 773 add r7,r7,r11 774 vadd.i32 q13,q0,q14 775 eor r10,r3,r5 776 add r6,r6,r9 777 veor q12,q12,q1 778 ldr r9,[sp,#24] 779 eor r11,r10,r4 780 vshr.u32 q1,q12,#30 781 add r6,r6,r7,ror#27 782 mov r3,r3,ror#2 783 vst1.32 {q13},[r12,:128]! 784 add r6,r6,r11 785 eor r10,r7,r4 786 vsli.32 q1,q12,#2 787 add r5,r5,r9 788 ldr r9,[sp,#28] 789 eor r11,r10,r3 790 add r5,r5,r6,ror#27 791 mov r7,r7,ror#2 792 add r5,r5,r11 793 eor r10,r6,r3 794 add r4,r4,r9 795 ldr r9,[sp,#32] 796 eor r11,r10,r7 797 add r4,r4,r5,ror#27 798 mov r6,r6,ror#2 799 add r4,r4,r11 800 vext.8 q12,q0,q1,#8 801 eor r10,r5,r7 802 add r3,r3,r9 803 ldr r9,[sp,#36] 804 veor q2,q2,q10 805 eor r11,r10,r6 806 add r3,r3,r4,ror#27 807 veor q2,q2,q3 808 mov r5,r5,ror#2 809 add r3,r3,r11 810 vadd.i32 q13,q1,q14 811 eor r10,r4,r6 812 vld1.32 {d28[],d29[]},[r8,:32]! 813 add r7,r7,r9 814 veor q12,q12,q2 815 ldr r9,[sp,#40] 816 eor r11,r10,r5 817 vshr.u32 q2,q12,#30 818 add r7,r7,r3,ror#27 819 mov r4,r4,ror#2 820 vst1.32 {q13},[r12,:128]! 821 add r7,r7,r11 822 eor r10,r3,r5 823 vsli.32 q2,q12,#2 824 add r6,r6,r9 825 ldr r9,[sp,#44] 826 eor r11,r10,r4 827 add r6,r6,r7,ror#27 828 mov r3,r3,ror#2 829 add r6,r6,r11 830 eor r10,r7,r4 831 add r5,r5,r9 832 ldr r9,[sp,#48] 833 eor r11,r10,r3 834 add r5,r5,r6,ror#27 835 mov r7,r7,ror#2 836 add r5,r5,r11 837 vext.8 q12,q1,q2,#8 838 eor r10,r6,r3 839 add r4,r4,r9 840 ldr r9,[sp,#52] 841 veor q3,q3,q11 842 eor r11,r10,r7 843 add r4,r4,r5,ror#27 844 veor q3,q3,q8 845 mov r6,r6,ror#2 846 add r4,r4,r11 847 vadd.i32 q13,q2,q14 848 eor r10,r5,r7 849 add r3,r3,r9 850 veor q12,q12,q3 851 ldr r9,[sp,#56] 852 eor r11,r10,r6 853 vshr.u32 q3,q12,#30 854 add r3,r3,r4,ror#27 855 mov r5,r5,ror#2 856 vst1.32 {q13},[r12,:128]! 857 add r3,r3,r11 858 eor r10,r4,r6 859 vsli.32 q3,q12,#2 860 add r7,r7,r9 861 ldr r9,[sp,#60] 862 eor r11,r10,r5 863 add r7,r7,r3,ror#27 864 mov r4,r4,ror#2 865 add r7,r7,r11 866 eor r10,r3,r5 867 add r6,r6,r9 868 ldr r9,[sp,#0] 869 eor r11,r10,r4 870 add r6,r6,r7,ror#27 871 mov r3,r3,ror#2 872 add r6,r6,r11 873 vext.8 q12,q2,q3,#8 874 eor r10,r7,r4 875 add r5,r5,r9 876 ldr r9,[sp,#4] 877 veor q8,q8,q0 878 eor r11,r10,r3 879 add r5,r5,r6,ror#27 880 veor q8,q8,q9 881 mov r7,r7,ror#2 882 add r5,r5,r11 883 vadd.i32 q13,q3,q14 884 eor r10,r6,r3 885 add r4,r4,r9 886 veor q12,q12,q8 887 ldr r9,[sp,#8] 888 eor r11,r10,r7 889 vshr.u32 q8,q12,#30 890 add r4,r4,r5,ror#27 891 mov r6,r6,ror#2 892 vst1.32 {q13},[r12,:128]! 893 sub r12,r12,#64 894 add r4,r4,r11 895 eor r10,r5,r7 896 vsli.32 q8,q12,#2 897 add r3,r3,r9 898 ldr r9,[sp,#12] 899 eor r11,r10,r6 900 add r3,r3,r4,ror#27 901 mov r5,r5,ror#2 902 add r3,r3,r11 903 eor r10,r4,r6 904 add r7,r7,r9 905 ldr r9,[sp,#16] 906 eor r11,r10,r5 907 add r7,r7,r3,ror#27 908 mov r4,r4,ror#2 909 add r7,r7,r11 910 vext.8 q12,q3,q8,#8 911 eor r10,r3,r5 912 add r6,r6,r9 913 ldr r9,[sp,#20] 914 veor q9,q9,q1 915 eor r11,r10,r4 916 add r6,r6,r7,ror#27 917 veor q9,q9,q10 918 mov r3,r3,ror#2 919 add r6,r6,r11 920 vadd.i32 q13,q8,q14 921 eor r10,r7,r4 922 add r5,r5,r9 923 veor q12,q12,q9 924 ldr r9,[sp,#24] 925 eor r11,r10,r3 926 vshr.u32 q9,q12,#30 927 add r5,r5,r6,ror#27 928 mov r7,r7,ror#2 929 vst1.32 {q13},[r12,:128]! 930 add r5,r5,r11 931 eor r10,r6,r3 932 vsli.32 q9,q12,#2 933 add r4,r4,r9 934 ldr r9,[sp,#28] 935 eor r11,r10,r7 936 add r4,r4,r5,ror#27 937 mov r6,r6,ror#2 938 add r4,r4,r11 939 eor r10,r5,r7 940 add r3,r3,r9 941 ldr r9,[sp,#32] 942 eor r11,r10,r6 943 add r3,r3,r4,ror#27 944 mov r5,r5,ror#2 945 add r3,r3,r11 946 vext.8 q12,q8,q9,#8 947 add r7,r7,r9 948 and r10,r5,r6 949 ldr r9,[sp,#36] 950 veor q10,q10,q2 951 add r7,r7,r3,ror#27 952 eor r11,r5,r6 953 veor q10,q10,q11 954 add r7,r7,r10 955 and r11,r11,r4 956 vadd.i32 q13,q9,q14 957 mov r4,r4,ror#2 958 add r7,r7,r11 959 veor q12,q12,q10 960 add r6,r6,r9 961 and r10,r4,r5 962 vshr.u32 q10,q12,#30 963 ldr r9,[sp,#40] 964 add r6,r6,r7,ror#27 965 vst1.32 {q13},[r12,:128]! 966 eor r11,r4,r5 967 add r6,r6,r10 968 vsli.32 q10,q12,#2 969 and r11,r11,r3 970 mov r3,r3,ror#2 971 add r6,r6,r11 972 add r5,r5,r9 973 and r10,r3,r4 974 ldr r9,[sp,#44] 975 add r5,r5,r6,ror#27 976 eor r11,r3,r4 977 add r5,r5,r10 978 and r11,r11,r7 979 mov r7,r7,ror#2 980 add r5,r5,r11 981 add r4,r4,r9 982 and r10,r7,r3 983 ldr r9,[sp,#48] 984 add r4,r4,r5,ror#27 985 eor r11,r7,r3 986 add r4,r4,r10 987 and r11,r11,r6 988 mov r6,r6,ror#2 989 add r4,r4,r11 990 vext.8 q12,q9,q10,#8 991 add r3,r3,r9 992 and r10,r6,r7 993 ldr r9,[sp,#52] 994 veor q11,q11,q3 995 add r3,r3,r4,ror#27 996 eor r11,r6,r7 997 veor q11,q11,q0 998 add r3,r3,r10 999 and r11,r11,r5 1000 vadd.i32 q13,q10,q14 1001 mov r5,r5,ror#2 1002 vld1.32 {d28[],d29[]},[r8,:32]! 1003 add r3,r3,r11 1004 veor q12,q12,q11 1005 add r7,r7,r9 1006 and r10,r5,r6 1007 vshr.u32 q11,q12,#30 1008 ldr r9,[sp,#56] 1009 add r7,r7,r3,ror#27 1010 vst1.32 {q13},[r12,:128]! 1011 eor r11,r5,r6 1012 add r7,r7,r10 1013 vsli.32 q11,q12,#2 1014 and r11,r11,r4 1015 mov r4,r4,ror#2 1016 add r7,r7,r11 1017 add r6,r6,r9 1018 and r10,r4,r5 1019 ldr r9,[sp,#60] 1020 add r6,r6,r7,ror#27 1021 eor r11,r4,r5 1022 add r6,r6,r10 1023 and r11,r11,r3 1024 mov r3,r3,ror#2 1025 add r6,r6,r11 1026 add r5,r5,r9 1027 and r10,r3,r4 1028 ldr r9,[sp,#0] 1029 add r5,r5,r6,ror#27 1030 eor r11,r3,r4 1031 add r5,r5,r10 1032 and r11,r11,r7 1033 mov r7,r7,ror#2 1034 add r5,r5,r11 1035 vext.8 q12,q10,q11,#8 1036 add r4,r4,r9 1037 and r10,r7,r3 1038 ldr r9,[sp,#4] 1039 veor q0,q0,q8 1040 add r4,r4,r5,ror#27 1041 eor r11,r7,r3 1042 veor q0,q0,q1 1043 add r4,r4,r10 1044 and r11,r11,r6 1045 vadd.i32 q13,q11,q14 1046 mov r6,r6,ror#2 1047 add r4,r4,r11 1048 veor q12,q12,q0 1049 add r3,r3,r9 1050 and r10,r6,r7 1051 vshr.u32 q0,q12,#30 1052 ldr r9,[sp,#8] 1053 add r3,r3,r4,ror#27 1054 vst1.32 {q13},[r12,:128]! 1055 sub r12,r12,#64 1056 eor r11,r6,r7 1057 add r3,r3,r10 1058 vsli.32 q0,q12,#2 1059 and r11,r11,r5 1060 mov r5,r5,ror#2 1061 add r3,r3,r11 1062 add r7,r7,r9 1063 and r10,r5,r6 1064 ldr r9,[sp,#12] 1065 add r7,r7,r3,ror#27 1066 eor r11,r5,r6 1067 add r7,r7,r10 1068 and r11,r11,r4 1069 mov r4,r4,ror#2 1070 add r7,r7,r11 1071 add r6,r6,r9 1072 and r10,r4,r5 1073 ldr r9,[sp,#16] 1074 add r6,r6,r7,ror#27 1075 eor r11,r4,r5 1076 add r6,r6,r10 1077 and r11,r11,r3 1078 mov r3,r3,ror#2 1079 add r6,r6,r11 1080 vext.8 q12,q11,q0,#8 1081 add r5,r5,r9 1082 and r10,r3,r4 1083 ldr r9,[sp,#20] 1084 veor q1,q1,q9 1085 add r5,r5,r6,ror#27 1086 eor r11,r3,r4 1087 veor q1,q1,q2 1088 add r5,r5,r10 1089 and r11,r11,r7 1090 vadd.i32 q13,q0,q14 1091 mov r7,r7,ror#2 1092 add r5,r5,r11 1093 veor q12,q12,q1 1094 add r4,r4,r9 1095 and r10,r7,r3 1096 vshr.u32 q1,q12,#30 1097 ldr r9,[sp,#24] 1098 add r4,r4,r5,ror#27 1099 vst1.32 {q13},[r12,:128]! 1100 eor r11,r7,r3 1101 add r4,r4,r10 1102 vsli.32 q1,q12,#2 1103 and r11,r11,r6 1104 mov r6,r6,ror#2 1105 add r4,r4,r11 1106 add r3,r3,r9 1107 and r10,r6,r7 1108 ldr r9,[sp,#28] 1109 add r3,r3,r4,ror#27 1110 eor r11,r6,r7 1111 add r3,r3,r10 1112 and r11,r11,r5 1113 mov r5,r5,ror#2 1114 add r3,r3,r11 1115 add r7,r7,r9 1116 and r10,r5,r6 1117 ldr r9,[sp,#32] 1118 add r7,r7,r3,ror#27 1119 eor r11,r5,r6 1120 add r7,r7,r10 1121 and r11,r11,r4 1122 mov r4,r4,ror#2 1123 add r7,r7,r11 1124 vext.8 q12,q0,q1,#8 1125 add r6,r6,r9 1126 and r10,r4,r5 1127 ldr r9,[sp,#36] 1128 veor q2,q2,q10 1129 add r6,r6,r7,ror#27 1130 eor r11,r4,r5 1131 veor q2,q2,q3 1132 add r6,r6,r10 1133 and r11,r11,r3 1134 vadd.i32 q13,q1,q14 1135 mov r3,r3,ror#2 1136 add r6,r6,r11 1137 veor q12,q12,q2 1138 add r5,r5,r9 1139 and r10,r3,r4 1140 vshr.u32 q2,q12,#30 1141 ldr r9,[sp,#40] 1142 add r5,r5,r6,ror#27 1143 vst1.32 {q13},[r12,:128]! 1144 eor r11,r3,r4 1145 add r5,r5,r10 1146 vsli.32 q2,q12,#2 1147 and r11,r11,r7 1148 mov r7,r7,ror#2 1149 add r5,r5,r11 1150 add r4,r4,r9 1151 and r10,r7,r3 1152 ldr r9,[sp,#44] 1153 add r4,r4,r5,ror#27 1154 eor r11,r7,r3 1155 add r4,r4,r10 1156 and r11,r11,r6 1157 mov r6,r6,ror#2 1158 add r4,r4,r11 1159 add r3,r3,r9 1160 and r10,r6,r7 1161 ldr r9,[sp,#48] 1162 add r3,r3,r4,ror#27 1163 eor r11,r6,r7 1164 add r3,r3,r10 1165 and r11,r11,r5 1166 mov r5,r5,ror#2 1167 add r3,r3,r11 1168 vext.8 q12,q1,q2,#8 1169 eor r10,r4,r6 1170 add r7,r7,r9 1171 ldr r9,[sp,#52] 1172 veor q3,q3,q11 1173 eor r11,r10,r5 1174 add r7,r7,r3,ror#27 1175 veor q3,q3,q8 1176 mov r4,r4,ror#2 1177 add r7,r7,r11 1178 vadd.i32 q13,q2,q14 1179 eor r10,r3,r5 1180 add r6,r6,r9 1181 veor q12,q12,q3 1182 ldr r9,[sp,#56] 1183 eor r11,r10,r4 1184 vshr.u32 q3,q12,#30 1185 add r6,r6,r7,ror#27 1186 mov r3,r3,ror#2 1187 vst1.32 {q13},[r12,:128]! 1188 add r6,r6,r11 1189 eor r10,r7,r4 1190 vsli.32 q3,q12,#2 1191 add r5,r5,r9 1192 ldr r9,[sp,#60] 1193 eor r11,r10,r3 1194 add r5,r5,r6,ror#27 1195 mov r7,r7,ror#2 1196 add r5,r5,r11 1197 eor r10,r6,r3 1198 add r4,r4,r9 1199 ldr r9,[sp,#0] 1200 eor r11,r10,r7 1201 add r4,r4,r5,ror#27 1202 mov r6,r6,ror#2 1203 add r4,r4,r11 1204 vadd.i32 q13,q3,q14 1205 eor r10,r5,r7 1206 add r3,r3,r9 1207 vst1.32 {q13},[r12,:128]! 1208 sub r12,r12,#64 1209 teq r1,r2 1210 sub r8,r8,#16 1211 it eq 1212 subeq r1,r1,#64 1213 vld1.8 {q0,q1},[r1]! 1214 ldr r9,[sp,#4] 1215 eor r11,r10,r6 1216 vld1.8 {q2,q3},[r1]! 1217 add r3,r3,r4,ror#27 1218 mov r5,r5,ror#2 1219 vld1.32 {d28[],d29[]},[r8,:32]! 1220 add r3,r3,r11 1221 eor r10,r4,r6 1222 vrev32.8 q0,q0 1223 add r7,r7,r9 1224 ldr r9,[sp,#8] 1225 eor r11,r10,r5 1226 add r7,r7,r3,ror#27 1227 mov r4,r4,ror#2 1228 add r7,r7,r11 1229 eor r10,r3,r5 1230 add r6,r6,r9 1231 ldr r9,[sp,#12] 1232 eor r11,r10,r4 1233 add r6,r6,r7,ror#27 1234 mov r3,r3,ror#2 1235 add r6,r6,r11 1236 eor r10,r7,r4 1237 add r5,r5,r9 1238 ldr r9,[sp,#16] 1239 eor r11,r10,r3 1240 add r5,r5,r6,ror#27 1241 mov r7,r7,ror#2 1242 add r5,r5,r11 1243 vrev32.8 q1,q1 1244 eor r10,r6,r3 1245 add r4,r4,r9 1246 vadd.i32 q8,q0,q14 1247 ldr r9,[sp,#20] 1248 eor r11,r10,r7 1249 vst1.32 {q8},[r12,:128]! 1250 add r4,r4,r5,ror#27 1251 mov r6,r6,ror#2 1252 add r4,r4,r11 1253 eor r10,r5,r7 1254 add r3,r3,r9 1255 ldr r9,[sp,#24] 1256 eor r11,r10,r6 1257 add r3,r3,r4,ror#27 1258 mov r5,r5,ror#2 1259 add r3,r3,r11 1260 eor r10,r4,r6 1261 add r7,r7,r9 1262 ldr r9,[sp,#28] 1263 eor r11,r10,r5 1264 add r7,r7,r3,ror#27 1265 mov r4,r4,ror#2 1266 add r7,r7,r11 1267 eor r10,r3,r5 1268 add r6,r6,r9 1269 ldr r9,[sp,#32] 1270 eor r11,r10,r4 1271 add r6,r6,r7,ror#27 1272 mov r3,r3,ror#2 1273 add r6,r6,r11 1274 vrev32.8 q2,q2 1275 eor r10,r7,r4 1276 add r5,r5,r9 1277 vadd.i32 q9,q1,q14 1278 ldr r9,[sp,#36] 1279 eor r11,r10,r3 1280 vst1.32 {q9},[r12,:128]! 1281 add r5,r5,r6,ror#27 1282 mov r7,r7,ror#2 1283 add r5,r5,r11 1284 eor r10,r6,r3 1285 add r4,r4,r9 1286 ldr r9,[sp,#40] 1287 eor r11,r10,r7 1288 add r4,r4,r5,ror#27 1289 mov r6,r6,ror#2 1290 add r4,r4,r11 1291 eor r10,r5,r7 1292 add r3,r3,r9 1293 ldr r9,[sp,#44] 1294 eor r11,r10,r6 1295 add r3,r3,r4,ror#27 1296 mov r5,r5,ror#2 1297 add r3,r3,r11 1298 eor r10,r4,r6 1299 add r7,r7,r9 1300 ldr r9,[sp,#48] 1301 eor r11,r10,r5 1302 add r7,r7,r3,ror#27 1303 mov r4,r4,ror#2 1304 add r7,r7,r11 1305 vrev32.8 q3,q3 1306 eor r10,r3,r5 1307 add r6,r6,r9 1308 vadd.i32 q10,q2,q14 1309 ldr r9,[sp,#52] 1310 eor r11,r10,r4 1311 vst1.32 {q10},[r12,:128]! 1312 add r6,r6,r7,ror#27 1313 mov r3,r3,ror#2 1314 add r6,r6,r11 1315 eor r10,r7,r4 1316 add r5,r5,r9 1317 ldr r9,[sp,#56] 1318 eor r11,r10,r3 1319 add r5,r5,r6,ror#27 1320 mov r7,r7,ror#2 1321 add r5,r5,r11 1322 eor r10,r6,r3 1323 add r4,r4,r9 1324 ldr r9,[sp,#60] 1325 eor r11,r10,r7 1326 add r4,r4,r5,ror#27 1327 mov r6,r6,ror#2 1328 add r4,r4,r11 1329 eor r10,r5,r7 1330 add r3,r3,r9 1331 eor r11,r10,r6 1332 add r3,r3,r4,ror#27 1333 mov r5,r5,ror#2 1334 add r3,r3,r11 1335 ldmia r0,{r9,r10,r11,r12} @ accumulate context 1336 add r3,r3,r9 1337 ldr r9,[r0,#16] 1338 add r4,r4,r10 1339 add r5,r5,r11 1340 add r6,r6,r12 1341 it eq 1342 moveq sp,r14 1343 add r7,r7,r9 1344 it ne 1345 ldrne r9,[sp] 1346 stmia r0,{r3,r4,r5,r6,r7} 1347 itt ne 1348 addne r12,sp,#3*16 1349 bne .Loop_neon 1350 1351 @ vldmia sp!,{d8-d15} 1352 ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc} 1353.size sha1_block_data_order_neon,.-sha1_block_data_order_neon 1354#endif 1355#if __ARM_MAX_ARCH__>=7 1356 1357# if defined(__thumb2__) 1358# define INST(a,b,c,d) .byte c,d|0xf,a,b 1359# else 1360# define INST(a,b,c,d) .byte a,b,c,d|0x10 1361# endif 1362 1363.type sha1_block_data_order_armv8,%function 1364.align 5 1365sha1_block_data_order_armv8: 1366.LARMv8: 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 1379.Loop_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.size sha1_block_data_order_armv8,.-sha1_block_data_order_armv8 1495#endif 1496#if __ARM_MAX_ARCH__>=7 1497.comm OPENSSL_armcap_P,4,4 1498#endif 1499