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