94#endif 95#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 96 ldr r12,.LOPENSSL_armcap 97 ldr r12,[r3,r12] @ OPENSSL_armcap_P 98 tst r12,#ARMV8_SHA256 99 bne .LARMv8 100 tst r12,#ARMV7_NEON 101 bne .LNEON 102#endif 103 add r2,r1,r2,lsl#6 @ len to point at the end of inp 104 stmdb sp!,{r0,r1,r2,r4-r11,lr} 105 ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11} 106 sub r14,r3,#256+32 @ K256 107 sub sp,sp,#16*4 @ alloca(X[16]) 108.Loop: 109# if __ARM_ARCH__>=7 110 ldr r2,[r1],#4 111# else 112 ldrb r2,[r1,#3] 113# endif 114 eor r3,r5,r6 @ magic 115 eor r12,r12,r12 116#if __ARM_ARCH__>=7 117 @ ldr r2,[r1],#4 @ 0 118# if 0==15 119 str r1,[sp,#17*4] @ make room for r1 120# endif 121 eor r0,r8,r8,ror#5 122 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 123 eor r0,r0,r8,ror#19 @ Sigma1(e) 124 rev r2,r2 125#else 126 @ ldrb r2,[r1,#3] @ 0 127 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 128 ldrb r12,[r1,#2] 129 ldrb r0,[r1,#1] 130 orr r2,r2,r12,lsl#8 131 ldrb r12,[r1],#4 132 orr r2,r2,r0,lsl#16 133# if 0==15 134 str r1,[sp,#17*4] @ make room for r1 135# endif 136 eor r0,r8,r8,ror#5 137 orr r2,r2,r12,lsl#24 138 eor r0,r0,r8,ror#19 @ Sigma1(e) 139#endif 140 ldr r12,[r14],#4 @ *K256++ 141 add r11,r11,r2 @ h+=X[i] 142 str r2,[sp,#0*4] 143 eor r2,r9,r10 144 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 145 and r2,r2,r8 146 add r11,r11,r12 @ h+=K256[i] 147 eor r2,r2,r10 @ Ch(e,f,g) 148 eor r0,r4,r4,ror#11 149 add r11,r11,r2 @ h+=Ch(e,f,g) 150#if 0==31 151 and r12,r12,#0xff 152 cmp r12,#0xf2 @ done? 153#endif 154#if 0<15 155# if __ARM_ARCH__>=7 156 ldr r2,[r1],#4 @ prefetch 157# else 158 ldrb r2,[r1,#3] 159# endif 160 eor r12,r4,r5 @ a^b, b^c in next round 161#else 162 ldr r2,[sp,#2*4] @ from future BODY_16_xx 163 eor r12,r4,r5 @ a^b, b^c in next round 164 ldr r1,[sp,#15*4] @ from future BODY_16_xx 165#endif 166 eor r0,r0,r4,ror#20 @ Sigma0(a) 167 and r3,r3,r12 @ (b^c)&=(a^b) 168 add r7,r7,r11 @ d+=h 169 eor r3,r3,r5 @ Maj(a,b,c) 170 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 171 @ add r11,r11,r3 @ h+=Maj(a,b,c) 172#if __ARM_ARCH__>=7 173 @ ldr r2,[r1],#4 @ 1 174# if 1==15 175 str r1,[sp,#17*4] @ make room for r1 176# endif 177 eor r0,r7,r7,ror#5 178 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 179 eor r0,r0,r7,ror#19 @ Sigma1(e) 180 rev r2,r2 181#else 182 @ ldrb r2,[r1,#3] @ 1 183 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 184 ldrb r3,[r1,#2] 185 ldrb r0,[r1,#1] 186 orr r2,r2,r3,lsl#8 187 ldrb r3,[r1],#4 188 orr r2,r2,r0,lsl#16 189# if 1==15 190 str r1,[sp,#17*4] @ make room for r1 191# endif 192 eor r0,r7,r7,ror#5 193 orr r2,r2,r3,lsl#24 194 eor r0,r0,r7,ror#19 @ Sigma1(e) 195#endif 196 ldr r3,[r14],#4 @ *K256++ 197 add r10,r10,r2 @ h+=X[i] 198 str r2,[sp,#1*4] 199 eor r2,r8,r9 200 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 201 and r2,r2,r7 202 add r10,r10,r3 @ h+=K256[i] 203 eor r2,r2,r9 @ Ch(e,f,g) 204 eor r0,r11,r11,ror#11 205 add r10,r10,r2 @ h+=Ch(e,f,g) 206#if 1==31 207 and r3,r3,#0xff 208 cmp r3,#0xf2 @ done? 209#endif 210#if 1<15 211# if __ARM_ARCH__>=7 212 ldr r2,[r1],#4 @ prefetch 213# else 214 ldrb r2,[r1,#3] 215# endif 216 eor r3,r11,r4 @ a^b, b^c in next round 217#else 218 ldr r2,[sp,#3*4] @ from future BODY_16_xx 219 eor r3,r11,r4 @ a^b, b^c in next round 220 ldr r1,[sp,#0*4] @ from future BODY_16_xx 221#endif 222 eor r0,r0,r11,ror#20 @ Sigma0(a) 223 and r12,r12,r3 @ (b^c)&=(a^b) 224 add r6,r6,r10 @ d+=h 225 eor r12,r12,r4 @ Maj(a,b,c) 226 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 227 @ add r10,r10,r12 @ h+=Maj(a,b,c) 228#if __ARM_ARCH__>=7 229 @ ldr r2,[r1],#4 @ 2 230# if 2==15 231 str r1,[sp,#17*4] @ make room for r1 232# endif 233 eor r0,r6,r6,ror#5 234 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 235 eor r0,r0,r6,ror#19 @ Sigma1(e) 236 rev r2,r2 237#else 238 @ ldrb r2,[r1,#3] @ 2 239 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 240 ldrb r12,[r1,#2] 241 ldrb r0,[r1,#1] 242 orr r2,r2,r12,lsl#8 243 ldrb r12,[r1],#4 244 orr r2,r2,r0,lsl#16 245# if 2==15 246 str r1,[sp,#17*4] @ make room for r1 247# endif 248 eor r0,r6,r6,ror#5 249 orr r2,r2,r12,lsl#24 250 eor r0,r0,r6,ror#19 @ Sigma1(e) 251#endif 252 ldr r12,[r14],#4 @ *K256++ 253 add r9,r9,r2 @ h+=X[i] 254 str r2,[sp,#2*4] 255 eor r2,r7,r8 256 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 257 and r2,r2,r6 258 add r9,r9,r12 @ h+=K256[i] 259 eor r2,r2,r8 @ Ch(e,f,g) 260 eor r0,r10,r10,ror#11 261 add r9,r9,r2 @ h+=Ch(e,f,g) 262#if 2==31 263 and r12,r12,#0xff 264 cmp r12,#0xf2 @ done? 265#endif 266#if 2<15 267# if __ARM_ARCH__>=7 268 ldr r2,[r1],#4 @ prefetch 269# else 270 ldrb r2,[r1,#3] 271# endif 272 eor r12,r10,r11 @ a^b, b^c in next round 273#else 274 ldr r2,[sp,#4*4] @ from future BODY_16_xx 275 eor r12,r10,r11 @ a^b, b^c in next round 276 ldr r1,[sp,#1*4] @ from future BODY_16_xx 277#endif 278 eor r0,r0,r10,ror#20 @ Sigma0(a) 279 and r3,r3,r12 @ (b^c)&=(a^b) 280 add r5,r5,r9 @ d+=h 281 eor r3,r3,r11 @ Maj(a,b,c) 282 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 283 @ add r9,r9,r3 @ h+=Maj(a,b,c) 284#if __ARM_ARCH__>=7 285 @ ldr r2,[r1],#4 @ 3 286# if 3==15 287 str r1,[sp,#17*4] @ make room for r1 288# endif 289 eor r0,r5,r5,ror#5 290 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 291 eor r0,r0,r5,ror#19 @ Sigma1(e) 292 rev r2,r2 293#else 294 @ ldrb r2,[r1,#3] @ 3 295 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 296 ldrb r3,[r1,#2] 297 ldrb r0,[r1,#1] 298 orr r2,r2,r3,lsl#8 299 ldrb r3,[r1],#4 300 orr r2,r2,r0,lsl#16 301# if 3==15 302 str r1,[sp,#17*4] @ make room for r1 303# endif 304 eor r0,r5,r5,ror#5 305 orr r2,r2,r3,lsl#24 306 eor r0,r0,r5,ror#19 @ Sigma1(e) 307#endif 308 ldr r3,[r14],#4 @ *K256++ 309 add r8,r8,r2 @ h+=X[i] 310 str r2,[sp,#3*4] 311 eor r2,r6,r7 312 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 313 and r2,r2,r5 314 add r8,r8,r3 @ h+=K256[i] 315 eor r2,r2,r7 @ Ch(e,f,g) 316 eor r0,r9,r9,ror#11 317 add r8,r8,r2 @ h+=Ch(e,f,g) 318#if 3==31 319 and r3,r3,#0xff 320 cmp r3,#0xf2 @ done? 321#endif 322#if 3<15 323# if __ARM_ARCH__>=7 324 ldr r2,[r1],#4 @ prefetch 325# else 326 ldrb r2,[r1,#3] 327# endif 328 eor r3,r9,r10 @ a^b, b^c in next round 329#else 330 ldr r2,[sp,#5*4] @ from future BODY_16_xx 331 eor r3,r9,r10 @ a^b, b^c in next round 332 ldr r1,[sp,#2*4] @ from future BODY_16_xx 333#endif 334 eor r0,r0,r9,ror#20 @ Sigma0(a) 335 and r12,r12,r3 @ (b^c)&=(a^b) 336 add r4,r4,r8 @ d+=h 337 eor r12,r12,r10 @ Maj(a,b,c) 338 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 339 @ add r8,r8,r12 @ h+=Maj(a,b,c) 340#if __ARM_ARCH__>=7 341 @ ldr r2,[r1],#4 @ 4 342# if 4==15 343 str r1,[sp,#17*4] @ make room for r1 344# endif 345 eor r0,r4,r4,ror#5 346 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 347 eor r0,r0,r4,ror#19 @ Sigma1(e) 348 rev r2,r2 349#else 350 @ ldrb r2,[r1,#3] @ 4 351 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 352 ldrb r12,[r1,#2] 353 ldrb r0,[r1,#1] 354 orr r2,r2,r12,lsl#8 355 ldrb r12,[r1],#4 356 orr r2,r2,r0,lsl#16 357# if 4==15 358 str r1,[sp,#17*4] @ make room for r1 359# endif 360 eor r0,r4,r4,ror#5 361 orr r2,r2,r12,lsl#24 362 eor r0,r0,r4,ror#19 @ Sigma1(e) 363#endif 364 ldr r12,[r14],#4 @ *K256++ 365 add r7,r7,r2 @ h+=X[i] 366 str r2,[sp,#4*4] 367 eor r2,r5,r6 368 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 369 and r2,r2,r4 370 add r7,r7,r12 @ h+=K256[i] 371 eor r2,r2,r6 @ Ch(e,f,g) 372 eor r0,r8,r8,ror#11 373 add r7,r7,r2 @ h+=Ch(e,f,g) 374#if 4==31 375 and r12,r12,#0xff 376 cmp r12,#0xf2 @ done? 377#endif 378#if 4<15 379# if __ARM_ARCH__>=7 380 ldr r2,[r1],#4 @ prefetch 381# else 382 ldrb r2,[r1,#3] 383# endif 384 eor r12,r8,r9 @ a^b, b^c in next round 385#else 386 ldr r2,[sp,#6*4] @ from future BODY_16_xx 387 eor r12,r8,r9 @ a^b, b^c in next round 388 ldr r1,[sp,#3*4] @ from future BODY_16_xx 389#endif 390 eor r0,r0,r8,ror#20 @ Sigma0(a) 391 and r3,r3,r12 @ (b^c)&=(a^b) 392 add r11,r11,r7 @ d+=h 393 eor r3,r3,r9 @ Maj(a,b,c) 394 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 395 @ add r7,r7,r3 @ h+=Maj(a,b,c) 396#if __ARM_ARCH__>=7 397 @ ldr r2,[r1],#4 @ 5 398# if 5==15 399 str r1,[sp,#17*4] @ make room for r1 400# endif 401 eor r0,r11,r11,ror#5 402 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 403 eor r0,r0,r11,ror#19 @ Sigma1(e) 404 rev r2,r2 405#else 406 @ ldrb r2,[r1,#3] @ 5 407 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 408 ldrb r3,[r1,#2] 409 ldrb r0,[r1,#1] 410 orr r2,r2,r3,lsl#8 411 ldrb r3,[r1],#4 412 orr r2,r2,r0,lsl#16 413# if 5==15 414 str r1,[sp,#17*4] @ make room for r1 415# endif 416 eor r0,r11,r11,ror#5 417 orr r2,r2,r3,lsl#24 418 eor r0,r0,r11,ror#19 @ Sigma1(e) 419#endif 420 ldr r3,[r14],#4 @ *K256++ 421 add r6,r6,r2 @ h+=X[i] 422 str r2,[sp,#5*4] 423 eor r2,r4,r5 424 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 425 and r2,r2,r11 426 add r6,r6,r3 @ h+=K256[i] 427 eor r2,r2,r5 @ Ch(e,f,g) 428 eor r0,r7,r7,ror#11 429 add r6,r6,r2 @ h+=Ch(e,f,g) 430#if 5==31 431 and r3,r3,#0xff 432 cmp r3,#0xf2 @ done? 433#endif 434#if 5<15 435# if __ARM_ARCH__>=7 436 ldr r2,[r1],#4 @ prefetch 437# else 438 ldrb r2,[r1,#3] 439# endif 440 eor r3,r7,r8 @ a^b, b^c in next round 441#else 442 ldr r2,[sp,#7*4] @ from future BODY_16_xx 443 eor r3,r7,r8 @ a^b, b^c in next round 444 ldr r1,[sp,#4*4] @ from future BODY_16_xx 445#endif 446 eor r0,r0,r7,ror#20 @ Sigma0(a) 447 and r12,r12,r3 @ (b^c)&=(a^b) 448 add r10,r10,r6 @ d+=h 449 eor r12,r12,r8 @ Maj(a,b,c) 450 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 451 @ add r6,r6,r12 @ h+=Maj(a,b,c) 452#if __ARM_ARCH__>=7 453 @ ldr r2,[r1],#4 @ 6 454# if 6==15 455 str r1,[sp,#17*4] @ make room for r1 456# endif 457 eor r0,r10,r10,ror#5 458 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 459 eor r0,r0,r10,ror#19 @ Sigma1(e) 460 rev r2,r2 461#else 462 @ ldrb r2,[r1,#3] @ 6 463 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 464 ldrb r12,[r1,#2] 465 ldrb r0,[r1,#1] 466 orr r2,r2,r12,lsl#8 467 ldrb r12,[r1],#4 468 orr r2,r2,r0,lsl#16 469# if 6==15 470 str r1,[sp,#17*4] @ make room for r1 471# endif 472 eor r0,r10,r10,ror#5 473 orr r2,r2,r12,lsl#24 474 eor r0,r0,r10,ror#19 @ Sigma1(e) 475#endif 476 ldr r12,[r14],#4 @ *K256++ 477 add r5,r5,r2 @ h+=X[i] 478 str r2,[sp,#6*4] 479 eor r2,r11,r4 480 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 481 and r2,r2,r10 482 add r5,r5,r12 @ h+=K256[i] 483 eor r2,r2,r4 @ Ch(e,f,g) 484 eor r0,r6,r6,ror#11 485 add r5,r5,r2 @ h+=Ch(e,f,g) 486#if 6==31 487 and r12,r12,#0xff 488 cmp r12,#0xf2 @ done? 489#endif 490#if 6<15 491# if __ARM_ARCH__>=7 492 ldr r2,[r1],#4 @ prefetch 493# else 494 ldrb r2,[r1,#3] 495# endif 496 eor r12,r6,r7 @ a^b, b^c in next round 497#else 498 ldr r2,[sp,#8*4] @ from future BODY_16_xx 499 eor r12,r6,r7 @ a^b, b^c in next round 500 ldr r1,[sp,#5*4] @ from future BODY_16_xx 501#endif 502 eor r0,r0,r6,ror#20 @ Sigma0(a) 503 and r3,r3,r12 @ (b^c)&=(a^b) 504 add r9,r9,r5 @ d+=h 505 eor r3,r3,r7 @ Maj(a,b,c) 506 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 507 @ add r5,r5,r3 @ h+=Maj(a,b,c) 508#if __ARM_ARCH__>=7 509 @ ldr r2,[r1],#4 @ 7 510# if 7==15 511 str r1,[sp,#17*4] @ make room for r1 512# endif 513 eor r0,r9,r9,ror#5 514 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 515 eor r0,r0,r9,ror#19 @ Sigma1(e) 516 rev r2,r2 517#else 518 @ ldrb r2,[r1,#3] @ 7 519 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 520 ldrb r3,[r1,#2] 521 ldrb r0,[r1,#1] 522 orr r2,r2,r3,lsl#8 523 ldrb r3,[r1],#4 524 orr r2,r2,r0,lsl#16 525# if 7==15 526 str r1,[sp,#17*4] @ make room for r1 527# endif 528 eor r0,r9,r9,ror#5 529 orr r2,r2,r3,lsl#24 530 eor r0,r0,r9,ror#19 @ Sigma1(e) 531#endif 532 ldr r3,[r14],#4 @ *K256++ 533 add r4,r4,r2 @ h+=X[i] 534 str r2,[sp,#7*4] 535 eor r2,r10,r11 536 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 537 and r2,r2,r9 538 add r4,r4,r3 @ h+=K256[i] 539 eor r2,r2,r11 @ Ch(e,f,g) 540 eor r0,r5,r5,ror#11 541 add r4,r4,r2 @ h+=Ch(e,f,g) 542#if 7==31 543 and r3,r3,#0xff 544 cmp r3,#0xf2 @ done? 545#endif 546#if 7<15 547# if __ARM_ARCH__>=7 548 ldr r2,[r1],#4 @ prefetch 549# else 550 ldrb r2,[r1,#3] 551# endif 552 eor r3,r5,r6 @ a^b, b^c in next round 553#else 554 ldr r2,[sp,#9*4] @ from future BODY_16_xx 555 eor r3,r5,r6 @ a^b, b^c in next round 556 ldr r1,[sp,#6*4] @ from future BODY_16_xx 557#endif 558 eor r0,r0,r5,ror#20 @ Sigma0(a) 559 and r12,r12,r3 @ (b^c)&=(a^b) 560 add r8,r8,r4 @ d+=h 561 eor r12,r12,r6 @ Maj(a,b,c) 562 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 563 @ add r4,r4,r12 @ h+=Maj(a,b,c) 564#if __ARM_ARCH__>=7 565 @ ldr r2,[r1],#4 @ 8 566# if 8==15 567 str r1,[sp,#17*4] @ make room for r1 568# endif 569 eor r0,r8,r8,ror#5 570 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 571 eor r0,r0,r8,ror#19 @ Sigma1(e) 572 rev r2,r2 573#else 574 @ ldrb r2,[r1,#3] @ 8 575 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 576 ldrb r12,[r1,#2] 577 ldrb r0,[r1,#1] 578 orr r2,r2,r12,lsl#8 579 ldrb r12,[r1],#4 580 orr r2,r2,r0,lsl#16 581# if 8==15 582 str r1,[sp,#17*4] @ make room for r1 583# endif 584 eor r0,r8,r8,ror#5 585 orr r2,r2,r12,lsl#24 586 eor r0,r0,r8,ror#19 @ Sigma1(e) 587#endif 588 ldr r12,[r14],#4 @ *K256++ 589 add r11,r11,r2 @ h+=X[i] 590 str r2,[sp,#8*4] 591 eor r2,r9,r10 592 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 593 and r2,r2,r8 594 add r11,r11,r12 @ h+=K256[i] 595 eor r2,r2,r10 @ Ch(e,f,g) 596 eor r0,r4,r4,ror#11 597 add r11,r11,r2 @ h+=Ch(e,f,g) 598#if 8==31 599 and r12,r12,#0xff 600 cmp r12,#0xf2 @ done? 601#endif 602#if 8<15 603# if __ARM_ARCH__>=7 604 ldr r2,[r1],#4 @ prefetch 605# else 606 ldrb r2,[r1,#3] 607# endif 608 eor r12,r4,r5 @ a^b, b^c in next round 609#else 610 ldr r2,[sp,#10*4] @ from future BODY_16_xx 611 eor r12,r4,r5 @ a^b, b^c in next round 612 ldr r1,[sp,#7*4] @ from future BODY_16_xx 613#endif 614 eor r0,r0,r4,ror#20 @ Sigma0(a) 615 and r3,r3,r12 @ (b^c)&=(a^b) 616 add r7,r7,r11 @ d+=h 617 eor r3,r3,r5 @ Maj(a,b,c) 618 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 619 @ add r11,r11,r3 @ h+=Maj(a,b,c) 620#if __ARM_ARCH__>=7 621 @ ldr r2,[r1],#4 @ 9 622# if 9==15 623 str r1,[sp,#17*4] @ make room for r1 624# endif 625 eor r0,r7,r7,ror#5 626 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 627 eor r0,r0,r7,ror#19 @ Sigma1(e) 628 rev r2,r2 629#else 630 @ ldrb r2,[r1,#3] @ 9 631 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 632 ldrb r3,[r1,#2] 633 ldrb r0,[r1,#1] 634 orr r2,r2,r3,lsl#8 635 ldrb r3,[r1],#4 636 orr r2,r2,r0,lsl#16 637# if 9==15 638 str r1,[sp,#17*4] @ make room for r1 639# endif 640 eor r0,r7,r7,ror#5 641 orr r2,r2,r3,lsl#24 642 eor r0,r0,r7,ror#19 @ Sigma1(e) 643#endif 644 ldr r3,[r14],#4 @ *K256++ 645 add r10,r10,r2 @ h+=X[i] 646 str r2,[sp,#9*4] 647 eor r2,r8,r9 648 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 649 and r2,r2,r7 650 add r10,r10,r3 @ h+=K256[i] 651 eor r2,r2,r9 @ Ch(e,f,g) 652 eor r0,r11,r11,ror#11 653 add r10,r10,r2 @ h+=Ch(e,f,g) 654#if 9==31 655 and r3,r3,#0xff 656 cmp r3,#0xf2 @ done? 657#endif 658#if 9<15 659# if __ARM_ARCH__>=7 660 ldr r2,[r1],#4 @ prefetch 661# else 662 ldrb r2,[r1,#3] 663# endif 664 eor r3,r11,r4 @ a^b, b^c in next round 665#else 666 ldr r2,[sp,#11*4] @ from future BODY_16_xx 667 eor r3,r11,r4 @ a^b, b^c in next round 668 ldr r1,[sp,#8*4] @ from future BODY_16_xx 669#endif 670 eor r0,r0,r11,ror#20 @ Sigma0(a) 671 and r12,r12,r3 @ (b^c)&=(a^b) 672 add r6,r6,r10 @ d+=h 673 eor r12,r12,r4 @ Maj(a,b,c) 674 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 675 @ add r10,r10,r12 @ h+=Maj(a,b,c) 676#if __ARM_ARCH__>=7 677 @ ldr r2,[r1],#4 @ 10 678# if 10==15 679 str r1,[sp,#17*4] @ make room for r1 680# endif 681 eor r0,r6,r6,ror#5 682 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 683 eor r0,r0,r6,ror#19 @ Sigma1(e) 684 rev r2,r2 685#else 686 @ ldrb r2,[r1,#3] @ 10 687 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 688 ldrb r12,[r1,#2] 689 ldrb r0,[r1,#1] 690 orr r2,r2,r12,lsl#8 691 ldrb r12,[r1],#4 692 orr r2,r2,r0,lsl#16 693# if 10==15 694 str r1,[sp,#17*4] @ make room for r1 695# endif 696 eor r0,r6,r6,ror#5 697 orr r2,r2,r12,lsl#24 698 eor r0,r0,r6,ror#19 @ Sigma1(e) 699#endif 700 ldr r12,[r14],#4 @ *K256++ 701 add r9,r9,r2 @ h+=X[i] 702 str r2,[sp,#10*4] 703 eor r2,r7,r8 704 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 705 and r2,r2,r6 706 add r9,r9,r12 @ h+=K256[i] 707 eor r2,r2,r8 @ Ch(e,f,g) 708 eor r0,r10,r10,ror#11 709 add r9,r9,r2 @ h+=Ch(e,f,g) 710#if 10==31 711 and r12,r12,#0xff 712 cmp r12,#0xf2 @ done? 713#endif 714#if 10<15 715# if __ARM_ARCH__>=7 716 ldr r2,[r1],#4 @ prefetch 717# else 718 ldrb r2,[r1,#3] 719# endif 720 eor r12,r10,r11 @ a^b, b^c in next round 721#else 722 ldr r2,[sp,#12*4] @ from future BODY_16_xx 723 eor r12,r10,r11 @ a^b, b^c in next round 724 ldr r1,[sp,#9*4] @ from future BODY_16_xx 725#endif 726 eor r0,r0,r10,ror#20 @ Sigma0(a) 727 and r3,r3,r12 @ (b^c)&=(a^b) 728 add r5,r5,r9 @ d+=h 729 eor r3,r3,r11 @ Maj(a,b,c) 730 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 731 @ add r9,r9,r3 @ h+=Maj(a,b,c) 732#if __ARM_ARCH__>=7 733 @ ldr r2,[r1],#4 @ 11 734# if 11==15 735 str r1,[sp,#17*4] @ make room for r1 736# endif 737 eor r0,r5,r5,ror#5 738 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 739 eor r0,r0,r5,ror#19 @ Sigma1(e) 740 rev r2,r2 741#else 742 @ ldrb r2,[r1,#3] @ 11 743 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 744 ldrb r3,[r1,#2] 745 ldrb r0,[r1,#1] 746 orr r2,r2,r3,lsl#8 747 ldrb r3,[r1],#4 748 orr r2,r2,r0,lsl#16 749# if 11==15 750 str r1,[sp,#17*4] @ make room for r1 751# endif 752 eor r0,r5,r5,ror#5 753 orr r2,r2,r3,lsl#24 754 eor r0,r0,r5,ror#19 @ Sigma1(e) 755#endif 756 ldr r3,[r14],#4 @ *K256++ 757 add r8,r8,r2 @ h+=X[i] 758 str r2,[sp,#11*4] 759 eor r2,r6,r7 760 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 761 and r2,r2,r5 762 add r8,r8,r3 @ h+=K256[i] 763 eor r2,r2,r7 @ Ch(e,f,g) 764 eor r0,r9,r9,ror#11 765 add r8,r8,r2 @ h+=Ch(e,f,g) 766#if 11==31 767 and r3,r3,#0xff 768 cmp r3,#0xf2 @ done? 769#endif 770#if 11<15 771# if __ARM_ARCH__>=7 772 ldr r2,[r1],#4 @ prefetch 773# else 774 ldrb r2,[r1,#3] 775# endif 776 eor r3,r9,r10 @ a^b, b^c in next round 777#else 778 ldr r2,[sp,#13*4] @ from future BODY_16_xx 779 eor r3,r9,r10 @ a^b, b^c in next round 780 ldr r1,[sp,#10*4] @ from future BODY_16_xx 781#endif 782 eor r0,r0,r9,ror#20 @ Sigma0(a) 783 and r12,r12,r3 @ (b^c)&=(a^b) 784 add r4,r4,r8 @ d+=h 785 eor r12,r12,r10 @ Maj(a,b,c) 786 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 787 @ add r8,r8,r12 @ h+=Maj(a,b,c) 788#if __ARM_ARCH__>=7 789 @ ldr r2,[r1],#4 @ 12 790# if 12==15 791 str r1,[sp,#17*4] @ make room for r1 792# endif 793 eor r0,r4,r4,ror#5 794 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 795 eor r0,r0,r4,ror#19 @ Sigma1(e) 796 rev r2,r2 797#else 798 @ ldrb r2,[r1,#3] @ 12 799 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 800 ldrb r12,[r1,#2] 801 ldrb r0,[r1,#1] 802 orr r2,r2,r12,lsl#8 803 ldrb r12,[r1],#4 804 orr r2,r2,r0,lsl#16 805# if 12==15 806 str r1,[sp,#17*4] @ make room for r1 807# endif 808 eor r0,r4,r4,ror#5 809 orr r2,r2,r12,lsl#24 810 eor r0,r0,r4,ror#19 @ Sigma1(e) 811#endif 812 ldr r12,[r14],#4 @ *K256++ 813 add r7,r7,r2 @ h+=X[i] 814 str r2,[sp,#12*4] 815 eor r2,r5,r6 816 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 817 and r2,r2,r4 818 add r7,r7,r12 @ h+=K256[i] 819 eor r2,r2,r6 @ Ch(e,f,g) 820 eor r0,r8,r8,ror#11 821 add r7,r7,r2 @ h+=Ch(e,f,g) 822#if 12==31 823 and r12,r12,#0xff 824 cmp r12,#0xf2 @ done? 825#endif 826#if 12<15 827# if __ARM_ARCH__>=7 828 ldr r2,[r1],#4 @ prefetch 829# else 830 ldrb r2,[r1,#3] 831# endif 832 eor r12,r8,r9 @ a^b, b^c in next round 833#else 834 ldr r2,[sp,#14*4] @ from future BODY_16_xx 835 eor r12,r8,r9 @ a^b, b^c in next round 836 ldr r1,[sp,#11*4] @ from future BODY_16_xx 837#endif 838 eor r0,r0,r8,ror#20 @ Sigma0(a) 839 and r3,r3,r12 @ (b^c)&=(a^b) 840 add r11,r11,r7 @ d+=h 841 eor r3,r3,r9 @ Maj(a,b,c) 842 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 843 @ add r7,r7,r3 @ h+=Maj(a,b,c) 844#if __ARM_ARCH__>=7 845 @ ldr r2,[r1],#4 @ 13 846# if 13==15 847 str r1,[sp,#17*4] @ make room for r1 848# endif 849 eor r0,r11,r11,ror#5 850 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 851 eor r0,r0,r11,ror#19 @ Sigma1(e) 852 rev r2,r2 853#else 854 @ ldrb r2,[r1,#3] @ 13 855 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 856 ldrb r3,[r1,#2] 857 ldrb r0,[r1,#1] 858 orr r2,r2,r3,lsl#8 859 ldrb r3,[r1],#4 860 orr r2,r2,r0,lsl#16 861# if 13==15 862 str r1,[sp,#17*4] @ make room for r1 863# endif 864 eor r0,r11,r11,ror#5 865 orr r2,r2,r3,lsl#24 866 eor r0,r0,r11,ror#19 @ Sigma1(e) 867#endif 868 ldr r3,[r14],#4 @ *K256++ 869 add r6,r6,r2 @ h+=X[i] 870 str r2,[sp,#13*4] 871 eor r2,r4,r5 872 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 873 and r2,r2,r11 874 add r6,r6,r3 @ h+=K256[i] 875 eor r2,r2,r5 @ Ch(e,f,g) 876 eor r0,r7,r7,ror#11 877 add r6,r6,r2 @ h+=Ch(e,f,g) 878#if 13==31 879 and r3,r3,#0xff 880 cmp r3,#0xf2 @ done? 881#endif 882#if 13<15 883# if __ARM_ARCH__>=7 884 ldr r2,[r1],#4 @ prefetch 885# else 886 ldrb r2,[r1,#3] 887# endif 888 eor r3,r7,r8 @ a^b, b^c in next round 889#else 890 ldr r2,[sp,#15*4] @ from future BODY_16_xx 891 eor r3,r7,r8 @ a^b, b^c in next round 892 ldr r1,[sp,#12*4] @ from future BODY_16_xx 893#endif 894 eor r0,r0,r7,ror#20 @ Sigma0(a) 895 and r12,r12,r3 @ (b^c)&=(a^b) 896 add r10,r10,r6 @ d+=h 897 eor r12,r12,r8 @ Maj(a,b,c) 898 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 899 @ add r6,r6,r12 @ h+=Maj(a,b,c) 900#if __ARM_ARCH__>=7 901 @ ldr r2,[r1],#4 @ 14 902# if 14==15 903 str r1,[sp,#17*4] @ make room for r1 904# endif 905 eor r0,r10,r10,ror#5 906 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 907 eor r0,r0,r10,ror#19 @ Sigma1(e) 908 rev r2,r2 909#else 910 @ ldrb r2,[r1,#3] @ 14 911 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 912 ldrb r12,[r1,#2] 913 ldrb r0,[r1,#1] 914 orr r2,r2,r12,lsl#8 915 ldrb r12,[r1],#4 916 orr r2,r2,r0,lsl#16 917# if 14==15 918 str r1,[sp,#17*4] @ make room for r1 919# endif 920 eor r0,r10,r10,ror#5 921 orr r2,r2,r12,lsl#24 922 eor r0,r0,r10,ror#19 @ Sigma1(e) 923#endif 924 ldr r12,[r14],#4 @ *K256++ 925 add r5,r5,r2 @ h+=X[i] 926 str r2,[sp,#14*4] 927 eor r2,r11,r4 928 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 929 and r2,r2,r10 930 add r5,r5,r12 @ h+=K256[i] 931 eor r2,r2,r4 @ Ch(e,f,g) 932 eor r0,r6,r6,ror#11 933 add r5,r5,r2 @ h+=Ch(e,f,g) 934#if 14==31 935 and r12,r12,#0xff 936 cmp r12,#0xf2 @ done? 937#endif 938#if 14<15 939# if __ARM_ARCH__>=7 940 ldr r2,[r1],#4 @ prefetch 941# else 942 ldrb r2,[r1,#3] 943# endif 944 eor r12,r6,r7 @ a^b, b^c in next round 945#else 946 ldr r2,[sp,#0*4] @ from future BODY_16_xx 947 eor r12,r6,r7 @ a^b, b^c in next round 948 ldr r1,[sp,#13*4] @ from future BODY_16_xx 949#endif 950 eor r0,r0,r6,ror#20 @ Sigma0(a) 951 and r3,r3,r12 @ (b^c)&=(a^b) 952 add r9,r9,r5 @ d+=h 953 eor r3,r3,r7 @ Maj(a,b,c) 954 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 955 @ add r5,r5,r3 @ h+=Maj(a,b,c) 956#if __ARM_ARCH__>=7 957 @ ldr r2,[r1],#4 @ 15 958# if 15==15 959 str r1,[sp,#17*4] @ make room for r1 960# endif 961 eor r0,r9,r9,ror#5 962 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 963 eor r0,r0,r9,ror#19 @ Sigma1(e) 964 rev r2,r2 965#else 966 @ ldrb r2,[r1,#3] @ 15 967 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 968 ldrb r3,[r1,#2] 969 ldrb r0,[r1,#1] 970 orr r2,r2,r3,lsl#8 971 ldrb r3,[r1],#4 972 orr r2,r2,r0,lsl#16 973# if 15==15 974 str r1,[sp,#17*4] @ make room for r1 975# endif 976 eor r0,r9,r9,ror#5 977 orr r2,r2,r3,lsl#24 978 eor r0,r0,r9,ror#19 @ Sigma1(e) 979#endif 980 ldr r3,[r14],#4 @ *K256++ 981 add r4,r4,r2 @ h+=X[i] 982 str r2,[sp,#15*4] 983 eor r2,r10,r11 984 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 985 and r2,r2,r9 986 add r4,r4,r3 @ h+=K256[i] 987 eor r2,r2,r11 @ Ch(e,f,g) 988 eor r0,r5,r5,ror#11 989 add r4,r4,r2 @ h+=Ch(e,f,g) 990#if 15==31 991 and r3,r3,#0xff 992 cmp r3,#0xf2 @ done? 993#endif 994#if 15<15 995# if __ARM_ARCH__>=7 996 ldr r2,[r1],#4 @ prefetch 997# else 998 ldrb r2,[r1,#3] 999# endif 1000 eor r3,r5,r6 @ a^b, b^c in next round 1001#else 1002 ldr r2,[sp,#1*4] @ from future BODY_16_xx 1003 eor r3,r5,r6 @ a^b, b^c in next round 1004 ldr r1,[sp,#14*4] @ from future BODY_16_xx 1005#endif 1006 eor r0,r0,r5,ror#20 @ Sigma0(a) 1007 and r12,r12,r3 @ (b^c)&=(a^b) 1008 add r8,r8,r4 @ d+=h 1009 eor r12,r12,r6 @ Maj(a,b,c) 1010 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1011 @ add r4,r4,r12 @ h+=Maj(a,b,c) 1012.Lrounds_16_xx: 1013 @ ldr r2,[sp,#1*4] @ 16 1014 @ ldr r1,[sp,#14*4] 1015 mov r0,r2,ror#7 1016 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1017 mov r12,r1,ror#17 1018 eor r0,r0,r2,ror#18 1019 eor r12,r12,r1,ror#19 1020 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1021 ldr r2,[sp,#0*4] 1022 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1023 ldr r1,[sp,#9*4] 1024 1025 add r12,r12,r0 1026 eor r0,r8,r8,ror#5 @ from BODY_00_15 1027 add r2,r2,r12 1028 eor r0,r0,r8,ror#19 @ Sigma1(e) 1029 add r2,r2,r1 @ X[i] 1030 ldr r12,[r14],#4 @ *K256++ 1031 add r11,r11,r2 @ h+=X[i] 1032 str r2,[sp,#0*4] 1033 eor r2,r9,r10 1034 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 1035 and r2,r2,r8 1036 add r11,r11,r12 @ h+=K256[i] 1037 eor r2,r2,r10 @ Ch(e,f,g) 1038 eor r0,r4,r4,ror#11 1039 add r11,r11,r2 @ h+=Ch(e,f,g) 1040#if 16==31 1041 and r12,r12,#0xff 1042 cmp r12,#0xf2 @ done? 1043#endif 1044#if 16<15 1045# if __ARM_ARCH__>=7 1046 ldr r2,[r1],#4 @ prefetch 1047# else 1048 ldrb r2,[r1,#3] 1049# endif 1050 eor r12,r4,r5 @ a^b, b^c in next round 1051#else 1052 ldr r2,[sp,#2*4] @ from future BODY_16_xx 1053 eor r12,r4,r5 @ a^b, b^c in next round 1054 ldr r1,[sp,#15*4] @ from future BODY_16_xx 1055#endif 1056 eor r0,r0,r4,ror#20 @ Sigma0(a) 1057 and r3,r3,r12 @ (b^c)&=(a^b) 1058 add r7,r7,r11 @ d+=h 1059 eor r3,r3,r5 @ Maj(a,b,c) 1060 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1061 @ add r11,r11,r3 @ h+=Maj(a,b,c) 1062 @ ldr r2,[sp,#2*4] @ 17 1063 @ ldr r1,[sp,#15*4] 1064 mov r0,r2,ror#7 1065 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1066 mov r3,r1,ror#17 1067 eor r0,r0,r2,ror#18 1068 eor r3,r3,r1,ror#19 1069 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1070 ldr r2,[sp,#1*4] 1071 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1072 ldr r1,[sp,#10*4] 1073 1074 add r3,r3,r0 1075 eor r0,r7,r7,ror#5 @ from BODY_00_15 1076 add r2,r2,r3 1077 eor r0,r0,r7,ror#19 @ Sigma1(e) 1078 add r2,r2,r1 @ X[i] 1079 ldr r3,[r14],#4 @ *K256++ 1080 add r10,r10,r2 @ h+=X[i] 1081 str r2,[sp,#1*4] 1082 eor r2,r8,r9 1083 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1084 and r2,r2,r7 1085 add r10,r10,r3 @ h+=K256[i] 1086 eor r2,r2,r9 @ Ch(e,f,g) 1087 eor r0,r11,r11,ror#11 1088 add r10,r10,r2 @ h+=Ch(e,f,g) 1089#if 17==31 1090 and r3,r3,#0xff 1091 cmp r3,#0xf2 @ done? 1092#endif 1093#if 17<15 1094# if __ARM_ARCH__>=7 1095 ldr r2,[r1],#4 @ prefetch 1096# else 1097 ldrb r2,[r1,#3] 1098# endif 1099 eor r3,r11,r4 @ a^b, b^c in next round 1100#else 1101 ldr r2,[sp,#3*4] @ from future BODY_16_xx 1102 eor r3,r11,r4 @ a^b, b^c in next round 1103 ldr r1,[sp,#0*4] @ from future BODY_16_xx 1104#endif 1105 eor r0,r0,r11,ror#20 @ Sigma0(a) 1106 and r12,r12,r3 @ (b^c)&=(a^b) 1107 add r6,r6,r10 @ d+=h 1108 eor r12,r12,r4 @ Maj(a,b,c) 1109 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1110 @ add r10,r10,r12 @ h+=Maj(a,b,c) 1111 @ ldr r2,[sp,#3*4] @ 18 1112 @ ldr r1,[sp,#0*4] 1113 mov r0,r2,ror#7 1114 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1115 mov r12,r1,ror#17 1116 eor r0,r0,r2,ror#18 1117 eor r12,r12,r1,ror#19 1118 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1119 ldr r2,[sp,#2*4] 1120 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1121 ldr r1,[sp,#11*4] 1122 1123 add r12,r12,r0 1124 eor r0,r6,r6,ror#5 @ from BODY_00_15 1125 add r2,r2,r12 1126 eor r0,r0,r6,ror#19 @ Sigma1(e) 1127 add r2,r2,r1 @ X[i] 1128 ldr r12,[r14],#4 @ *K256++ 1129 add r9,r9,r2 @ h+=X[i] 1130 str r2,[sp,#2*4] 1131 eor r2,r7,r8 1132 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1133 and r2,r2,r6 1134 add r9,r9,r12 @ h+=K256[i] 1135 eor r2,r2,r8 @ Ch(e,f,g) 1136 eor r0,r10,r10,ror#11 1137 add r9,r9,r2 @ h+=Ch(e,f,g) 1138#if 18==31 1139 and r12,r12,#0xff 1140 cmp r12,#0xf2 @ done? 1141#endif 1142#if 18<15 1143# if __ARM_ARCH__>=7 1144 ldr r2,[r1],#4 @ prefetch 1145# else 1146 ldrb r2,[r1,#3] 1147# endif 1148 eor r12,r10,r11 @ a^b, b^c in next round 1149#else 1150 ldr r2,[sp,#4*4] @ from future BODY_16_xx 1151 eor r12,r10,r11 @ a^b, b^c in next round 1152 ldr r1,[sp,#1*4] @ from future BODY_16_xx 1153#endif 1154 eor r0,r0,r10,ror#20 @ Sigma0(a) 1155 and r3,r3,r12 @ (b^c)&=(a^b) 1156 add r5,r5,r9 @ d+=h 1157 eor r3,r3,r11 @ Maj(a,b,c) 1158 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1159 @ add r9,r9,r3 @ h+=Maj(a,b,c) 1160 @ ldr r2,[sp,#4*4] @ 19 1161 @ ldr r1,[sp,#1*4] 1162 mov r0,r2,ror#7 1163 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1164 mov r3,r1,ror#17 1165 eor r0,r0,r2,ror#18 1166 eor r3,r3,r1,ror#19 1167 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1168 ldr r2,[sp,#3*4] 1169 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1170 ldr r1,[sp,#12*4] 1171 1172 add r3,r3,r0 1173 eor r0,r5,r5,ror#5 @ from BODY_00_15 1174 add r2,r2,r3 1175 eor r0,r0,r5,ror#19 @ Sigma1(e) 1176 add r2,r2,r1 @ X[i] 1177 ldr r3,[r14],#4 @ *K256++ 1178 add r8,r8,r2 @ h+=X[i] 1179 str r2,[sp,#3*4] 1180 eor r2,r6,r7 1181 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1182 and r2,r2,r5 1183 add r8,r8,r3 @ h+=K256[i] 1184 eor r2,r2,r7 @ Ch(e,f,g) 1185 eor r0,r9,r9,ror#11 1186 add r8,r8,r2 @ h+=Ch(e,f,g) 1187#if 19==31 1188 and r3,r3,#0xff 1189 cmp r3,#0xf2 @ done? 1190#endif 1191#if 19<15 1192# if __ARM_ARCH__>=7 1193 ldr r2,[r1],#4 @ prefetch 1194# else 1195 ldrb r2,[r1,#3] 1196# endif 1197 eor r3,r9,r10 @ a^b, b^c in next round 1198#else 1199 ldr r2,[sp,#5*4] @ from future BODY_16_xx 1200 eor r3,r9,r10 @ a^b, b^c in next round 1201 ldr r1,[sp,#2*4] @ from future BODY_16_xx 1202#endif 1203 eor r0,r0,r9,ror#20 @ Sigma0(a) 1204 and r12,r12,r3 @ (b^c)&=(a^b) 1205 add r4,r4,r8 @ d+=h 1206 eor r12,r12,r10 @ Maj(a,b,c) 1207 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1208 @ add r8,r8,r12 @ h+=Maj(a,b,c) 1209 @ ldr r2,[sp,#5*4] @ 20 1210 @ ldr r1,[sp,#2*4] 1211 mov r0,r2,ror#7 1212 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1213 mov r12,r1,ror#17 1214 eor r0,r0,r2,ror#18 1215 eor r12,r12,r1,ror#19 1216 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1217 ldr r2,[sp,#4*4] 1218 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1219 ldr r1,[sp,#13*4] 1220 1221 add r12,r12,r0 1222 eor r0,r4,r4,ror#5 @ from BODY_00_15 1223 add r2,r2,r12 1224 eor r0,r0,r4,ror#19 @ Sigma1(e) 1225 add r2,r2,r1 @ X[i] 1226 ldr r12,[r14],#4 @ *K256++ 1227 add r7,r7,r2 @ h+=X[i] 1228 str r2,[sp,#4*4] 1229 eor r2,r5,r6 1230 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1231 and r2,r2,r4 1232 add r7,r7,r12 @ h+=K256[i] 1233 eor r2,r2,r6 @ Ch(e,f,g) 1234 eor r0,r8,r8,ror#11 1235 add r7,r7,r2 @ h+=Ch(e,f,g) 1236#if 20==31 1237 and r12,r12,#0xff 1238 cmp r12,#0xf2 @ done? 1239#endif 1240#if 20<15 1241# if __ARM_ARCH__>=7 1242 ldr r2,[r1],#4 @ prefetch 1243# else 1244 ldrb r2,[r1,#3] 1245# endif 1246 eor r12,r8,r9 @ a^b, b^c in next round 1247#else 1248 ldr r2,[sp,#6*4] @ from future BODY_16_xx 1249 eor r12,r8,r9 @ a^b, b^c in next round 1250 ldr r1,[sp,#3*4] @ from future BODY_16_xx 1251#endif 1252 eor r0,r0,r8,ror#20 @ Sigma0(a) 1253 and r3,r3,r12 @ (b^c)&=(a^b) 1254 add r11,r11,r7 @ d+=h 1255 eor r3,r3,r9 @ Maj(a,b,c) 1256 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1257 @ add r7,r7,r3 @ h+=Maj(a,b,c) 1258 @ ldr r2,[sp,#6*4] @ 21 1259 @ ldr r1,[sp,#3*4] 1260 mov r0,r2,ror#7 1261 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1262 mov r3,r1,ror#17 1263 eor r0,r0,r2,ror#18 1264 eor r3,r3,r1,ror#19 1265 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1266 ldr r2,[sp,#5*4] 1267 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1268 ldr r1,[sp,#14*4] 1269 1270 add r3,r3,r0 1271 eor r0,r11,r11,ror#5 @ from BODY_00_15 1272 add r2,r2,r3 1273 eor r0,r0,r11,ror#19 @ Sigma1(e) 1274 add r2,r2,r1 @ X[i] 1275 ldr r3,[r14],#4 @ *K256++ 1276 add r6,r6,r2 @ h+=X[i] 1277 str r2,[sp,#5*4] 1278 eor r2,r4,r5 1279 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1280 and r2,r2,r11 1281 add r6,r6,r3 @ h+=K256[i] 1282 eor r2,r2,r5 @ Ch(e,f,g) 1283 eor r0,r7,r7,ror#11 1284 add r6,r6,r2 @ h+=Ch(e,f,g) 1285#if 21==31 1286 and r3,r3,#0xff 1287 cmp r3,#0xf2 @ done? 1288#endif 1289#if 21<15 1290# if __ARM_ARCH__>=7 1291 ldr r2,[r1],#4 @ prefetch 1292# else 1293 ldrb r2,[r1,#3] 1294# endif 1295 eor r3,r7,r8 @ a^b, b^c in next round 1296#else 1297 ldr r2,[sp,#7*4] @ from future BODY_16_xx 1298 eor r3,r7,r8 @ a^b, b^c in next round 1299 ldr r1,[sp,#4*4] @ from future BODY_16_xx 1300#endif 1301 eor r0,r0,r7,ror#20 @ Sigma0(a) 1302 and r12,r12,r3 @ (b^c)&=(a^b) 1303 add r10,r10,r6 @ d+=h 1304 eor r12,r12,r8 @ Maj(a,b,c) 1305 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1306 @ add r6,r6,r12 @ h+=Maj(a,b,c) 1307 @ ldr r2,[sp,#7*4] @ 22 1308 @ ldr r1,[sp,#4*4] 1309 mov r0,r2,ror#7 1310 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1311 mov r12,r1,ror#17 1312 eor r0,r0,r2,ror#18 1313 eor r12,r12,r1,ror#19 1314 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1315 ldr r2,[sp,#6*4] 1316 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1317 ldr r1,[sp,#15*4] 1318 1319 add r12,r12,r0 1320 eor r0,r10,r10,ror#5 @ from BODY_00_15 1321 add r2,r2,r12 1322 eor r0,r0,r10,ror#19 @ Sigma1(e) 1323 add r2,r2,r1 @ X[i] 1324 ldr r12,[r14],#4 @ *K256++ 1325 add r5,r5,r2 @ h+=X[i] 1326 str r2,[sp,#6*4] 1327 eor r2,r11,r4 1328 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1329 and r2,r2,r10 1330 add r5,r5,r12 @ h+=K256[i] 1331 eor r2,r2,r4 @ Ch(e,f,g) 1332 eor r0,r6,r6,ror#11 1333 add r5,r5,r2 @ h+=Ch(e,f,g) 1334#if 22==31 1335 and r12,r12,#0xff 1336 cmp r12,#0xf2 @ done? 1337#endif 1338#if 22<15 1339# if __ARM_ARCH__>=7 1340 ldr r2,[r1],#4 @ prefetch 1341# else 1342 ldrb r2,[r1,#3] 1343# endif 1344 eor r12,r6,r7 @ a^b, b^c in next round 1345#else 1346 ldr r2,[sp,#8*4] @ from future BODY_16_xx 1347 eor r12,r6,r7 @ a^b, b^c in next round 1348 ldr r1,[sp,#5*4] @ from future BODY_16_xx 1349#endif 1350 eor r0,r0,r6,ror#20 @ Sigma0(a) 1351 and r3,r3,r12 @ (b^c)&=(a^b) 1352 add r9,r9,r5 @ d+=h 1353 eor r3,r3,r7 @ Maj(a,b,c) 1354 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1355 @ add r5,r5,r3 @ h+=Maj(a,b,c) 1356 @ ldr r2,[sp,#8*4] @ 23 1357 @ ldr r1,[sp,#5*4] 1358 mov r0,r2,ror#7 1359 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1360 mov r3,r1,ror#17 1361 eor r0,r0,r2,ror#18 1362 eor r3,r3,r1,ror#19 1363 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1364 ldr r2,[sp,#7*4] 1365 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1366 ldr r1,[sp,#0*4] 1367 1368 add r3,r3,r0 1369 eor r0,r9,r9,ror#5 @ from BODY_00_15 1370 add r2,r2,r3 1371 eor r0,r0,r9,ror#19 @ Sigma1(e) 1372 add r2,r2,r1 @ X[i] 1373 ldr r3,[r14],#4 @ *K256++ 1374 add r4,r4,r2 @ h+=X[i] 1375 str r2,[sp,#7*4] 1376 eor r2,r10,r11 1377 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1378 and r2,r2,r9 1379 add r4,r4,r3 @ h+=K256[i] 1380 eor r2,r2,r11 @ Ch(e,f,g) 1381 eor r0,r5,r5,ror#11 1382 add r4,r4,r2 @ h+=Ch(e,f,g) 1383#if 23==31 1384 and r3,r3,#0xff 1385 cmp r3,#0xf2 @ done? 1386#endif 1387#if 23<15 1388# if __ARM_ARCH__>=7 1389 ldr r2,[r1],#4 @ prefetch 1390# else 1391 ldrb r2,[r1,#3] 1392# endif 1393 eor r3,r5,r6 @ a^b, b^c in next round 1394#else 1395 ldr r2,[sp,#9*4] @ from future BODY_16_xx 1396 eor r3,r5,r6 @ a^b, b^c in next round 1397 ldr r1,[sp,#6*4] @ from future BODY_16_xx 1398#endif 1399 eor r0,r0,r5,ror#20 @ Sigma0(a) 1400 and r12,r12,r3 @ (b^c)&=(a^b) 1401 add r8,r8,r4 @ d+=h 1402 eor r12,r12,r6 @ Maj(a,b,c) 1403 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1404 @ add r4,r4,r12 @ h+=Maj(a,b,c) 1405 @ ldr r2,[sp,#9*4] @ 24 1406 @ ldr r1,[sp,#6*4] 1407 mov r0,r2,ror#7 1408 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1409 mov r12,r1,ror#17 1410 eor r0,r0,r2,ror#18 1411 eor r12,r12,r1,ror#19 1412 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1413 ldr r2,[sp,#8*4] 1414 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1415 ldr r1,[sp,#1*4] 1416 1417 add r12,r12,r0 1418 eor r0,r8,r8,ror#5 @ from BODY_00_15 1419 add r2,r2,r12 1420 eor r0,r0,r8,ror#19 @ Sigma1(e) 1421 add r2,r2,r1 @ X[i] 1422 ldr r12,[r14],#4 @ *K256++ 1423 add r11,r11,r2 @ h+=X[i] 1424 str r2,[sp,#8*4] 1425 eor r2,r9,r10 1426 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 1427 and r2,r2,r8 1428 add r11,r11,r12 @ h+=K256[i] 1429 eor r2,r2,r10 @ Ch(e,f,g) 1430 eor r0,r4,r4,ror#11 1431 add r11,r11,r2 @ h+=Ch(e,f,g) 1432#if 24==31 1433 and r12,r12,#0xff 1434 cmp r12,#0xf2 @ done? 1435#endif 1436#if 24<15 1437# if __ARM_ARCH__>=7 1438 ldr r2,[r1],#4 @ prefetch 1439# else 1440 ldrb r2,[r1,#3] 1441# endif 1442 eor r12,r4,r5 @ a^b, b^c in next round 1443#else 1444 ldr r2,[sp,#10*4] @ from future BODY_16_xx 1445 eor r12,r4,r5 @ a^b, b^c in next round 1446 ldr r1,[sp,#7*4] @ from future BODY_16_xx 1447#endif 1448 eor r0,r0,r4,ror#20 @ Sigma0(a) 1449 and r3,r3,r12 @ (b^c)&=(a^b) 1450 add r7,r7,r11 @ d+=h 1451 eor r3,r3,r5 @ Maj(a,b,c) 1452 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1453 @ add r11,r11,r3 @ h+=Maj(a,b,c) 1454 @ ldr r2,[sp,#10*4] @ 25 1455 @ ldr r1,[sp,#7*4] 1456 mov r0,r2,ror#7 1457 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1458 mov r3,r1,ror#17 1459 eor r0,r0,r2,ror#18 1460 eor r3,r3,r1,ror#19 1461 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1462 ldr r2,[sp,#9*4] 1463 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1464 ldr r1,[sp,#2*4] 1465 1466 add r3,r3,r0 1467 eor r0,r7,r7,ror#5 @ from BODY_00_15 1468 add r2,r2,r3 1469 eor r0,r0,r7,ror#19 @ Sigma1(e) 1470 add r2,r2,r1 @ X[i] 1471 ldr r3,[r14],#4 @ *K256++ 1472 add r10,r10,r2 @ h+=X[i] 1473 str r2,[sp,#9*4] 1474 eor r2,r8,r9 1475 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1476 and r2,r2,r7 1477 add r10,r10,r3 @ h+=K256[i] 1478 eor r2,r2,r9 @ Ch(e,f,g) 1479 eor r0,r11,r11,ror#11 1480 add r10,r10,r2 @ h+=Ch(e,f,g) 1481#if 25==31 1482 and r3,r3,#0xff 1483 cmp r3,#0xf2 @ done? 1484#endif 1485#if 25<15 1486# if __ARM_ARCH__>=7 1487 ldr r2,[r1],#4 @ prefetch 1488# else 1489 ldrb r2,[r1,#3] 1490# endif 1491 eor r3,r11,r4 @ a^b, b^c in next round 1492#else 1493 ldr r2,[sp,#11*4] @ from future BODY_16_xx 1494 eor r3,r11,r4 @ a^b, b^c in next round 1495 ldr r1,[sp,#8*4] @ from future BODY_16_xx 1496#endif 1497 eor r0,r0,r11,ror#20 @ Sigma0(a) 1498 and r12,r12,r3 @ (b^c)&=(a^b) 1499 add r6,r6,r10 @ d+=h 1500 eor r12,r12,r4 @ Maj(a,b,c) 1501 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1502 @ add r10,r10,r12 @ h+=Maj(a,b,c) 1503 @ ldr r2,[sp,#11*4] @ 26 1504 @ ldr r1,[sp,#8*4] 1505 mov r0,r2,ror#7 1506 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1507 mov r12,r1,ror#17 1508 eor r0,r0,r2,ror#18 1509 eor r12,r12,r1,ror#19 1510 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1511 ldr r2,[sp,#10*4] 1512 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1513 ldr r1,[sp,#3*4] 1514 1515 add r12,r12,r0 1516 eor r0,r6,r6,ror#5 @ from BODY_00_15 1517 add r2,r2,r12 1518 eor r0,r0,r6,ror#19 @ Sigma1(e) 1519 add r2,r2,r1 @ X[i] 1520 ldr r12,[r14],#4 @ *K256++ 1521 add r9,r9,r2 @ h+=X[i] 1522 str r2,[sp,#10*4] 1523 eor r2,r7,r8 1524 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1525 and r2,r2,r6 1526 add r9,r9,r12 @ h+=K256[i] 1527 eor r2,r2,r8 @ Ch(e,f,g) 1528 eor r0,r10,r10,ror#11 1529 add r9,r9,r2 @ h+=Ch(e,f,g) 1530#if 26==31 1531 and r12,r12,#0xff 1532 cmp r12,#0xf2 @ done? 1533#endif 1534#if 26<15 1535# if __ARM_ARCH__>=7 1536 ldr r2,[r1],#4 @ prefetch 1537# else 1538 ldrb r2,[r1,#3] 1539# endif 1540 eor r12,r10,r11 @ a^b, b^c in next round 1541#else 1542 ldr r2,[sp,#12*4] @ from future BODY_16_xx 1543 eor r12,r10,r11 @ a^b, b^c in next round 1544 ldr r1,[sp,#9*4] @ from future BODY_16_xx 1545#endif 1546 eor r0,r0,r10,ror#20 @ Sigma0(a) 1547 and r3,r3,r12 @ (b^c)&=(a^b) 1548 add r5,r5,r9 @ d+=h 1549 eor r3,r3,r11 @ Maj(a,b,c) 1550 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1551 @ add r9,r9,r3 @ h+=Maj(a,b,c) 1552 @ ldr r2,[sp,#12*4] @ 27 1553 @ ldr r1,[sp,#9*4] 1554 mov r0,r2,ror#7 1555 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1556 mov r3,r1,ror#17 1557 eor r0,r0,r2,ror#18 1558 eor r3,r3,r1,ror#19 1559 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1560 ldr r2,[sp,#11*4] 1561 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1562 ldr r1,[sp,#4*4] 1563 1564 add r3,r3,r0 1565 eor r0,r5,r5,ror#5 @ from BODY_00_15 1566 add r2,r2,r3 1567 eor r0,r0,r5,ror#19 @ Sigma1(e) 1568 add r2,r2,r1 @ X[i] 1569 ldr r3,[r14],#4 @ *K256++ 1570 add r8,r8,r2 @ h+=X[i] 1571 str r2,[sp,#11*4] 1572 eor r2,r6,r7 1573 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1574 and r2,r2,r5 1575 add r8,r8,r3 @ h+=K256[i] 1576 eor r2,r2,r7 @ Ch(e,f,g) 1577 eor r0,r9,r9,ror#11 1578 add r8,r8,r2 @ h+=Ch(e,f,g) 1579#if 27==31 1580 and r3,r3,#0xff 1581 cmp r3,#0xf2 @ done? 1582#endif 1583#if 27<15 1584# if __ARM_ARCH__>=7 1585 ldr r2,[r1],#4 @ prefetch 1586# else 1587 ldrb r2,[r1,#3] 1588# endif 1589 eor r3,r9,r10 @ a^b, b^c in next round 1590#else 1591 ldr r2,[sp,#13*4] @ from future BODY_16_xx 1592 eor r3,r9,r10 @ a^b, b^c in next round 1593 ldr r1,[sp,#10*4] @ from future BODY_16_xx 1594#endif 1595 eor r0,r0,r9,ror#20 @ Sigma0(a) 1596 and r12,r12,r3 @ (b^c)&=(a^b) 1597 add r4,r4,r8 @ d+=h 1598 eor r12,r12,r10 @ Maj(a,b,c) 1599 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1600 @ add r8,r8,r12 @ h+=Maj(a,b,c) 1601 @ ldr r2,[sp,#13*4] @ 28 1602 @ ldr r1,[sp,#10*4] 1603 mov r0,r2,ror#7 1604 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1605 mov r12,r1,ror#17 1606 eor r0,r0,r2,ror#18 1607 eor r12,r12,r1,ror#19 1608 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1609 ldr r2,[sp,#12*4] 1610 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1611 ldr r1,[sp,#5*4] 1612 1613 add r12,r12,r0 1614 eor r0,r4,r4,ror#5 @ from BODY_00_15 1615 add r2,r2,r12 1616 eor r0,r0,r4,ror#19 @ Sigma1(e) 1617 add r2,r2,r1 @ X[i] 1618 ldr r12,[r14],#4 @ *K256++ 1619 add r7,r7,r2 @ h+=X[i] 1620 str r2,[sp,#12*4] 1621 eor r2,r5,r6 1622 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1623 and r2,r2,r4 1624 add r7,r7,r12 @ h+=K256[i] 1625 eor r2,r2,r6 @ Ch(e,f,g) 1626 eor r0,r8,r8,ror#11 1627 add r7,r7,r2 @ h+=Ch(e,f,g) 1628#if 28==31 1629 and r12,r12,#0xff 1630 cmp r12,#0xf2 @ done? 1631#endif 1632#if 28<15 1633# if __ARM_ARCH__>=7 1634 ldr r2,[r1],#4 @ prefetch 1635# else 1636 ldrb r2,[r1,#3] 1637# endif 1638 eor r12,r8,r9 @ a^b, b^c in next round 1639#else 1640 ldr r2,[sp,#14*4] @ from future BODY_16_xx 1641 eor r12,r8,r9 @ a^b, b^c in next round 1642 ldr r1,[sp,#11*4] @ from future BODY_16_xx 1643#endif 1644 eor r0,r0,r8,ror#20 @ Sigma0(a) 1645 and r3,r3,r12 @ (b^c)&=(a^b) 1646 add r11,r11,r7 @ d+=h 1647 eor r3,r3,r9 @ Maj(a,b,c) 1648 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1649 @ add r7,r7,r3 @ h+=Maj(a,b,c) 1650 @ ldr r2,[sp,#14*4] @ 29 1651 @ ldr r1,[sp,#11*4] 1652 mov r0,r2,ror#7 1653 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1654 mov r3,r1,ror#17 1655 eor r0,r0,r2,ror#18 1656 eor r3,r3,r1,ror#19 1657 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1658 ldr r2,[sp,#13*4] 1659 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1660 ldr r1,[sp,#6*4] 1661 1662 add r3,r3,r0 1663 eor r0,r11,r11,ror#5 @ from BODY_00_15 1664 add r2,r2,r3 1665 eor r0,r0,r11,ror#19 @ Sigma1(e) 1666 add r2,r2,r1 @ X[i] 1667 ldr r3,[r14],#4 @ *K256++ 1668 add r6,r6,r2 @ h+=X[i] 1669 str r2,[sp,#13*4] 1670 eor r2,r4,r5 1671 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1672 and r2,r2,r11 1673 add r6,r6,r3 @ h+=K256[i] 1674 eor r2,r2,r5 @ Ch(e,f,g) 1675 eor r0,r7,r7,ror#11 1676 add r6,r6,r2 @ h+=Ch(e,f,g) 1677#if 29==31 1678 and r3,r3,#0xff 1679 cmp r3,#0xf2 @ done? 1680#endif 1681#if 29<15 1682# if __ARM_ARCH__>=7 1683 ldr r2,[r1],#4 @ prefetch 1684# else 1685 ldrb r2,[r1,#3] 1686# endif 1687 eor r3,r7,r8 @ a^b, b^c in next round 1688#else 1689 ldr r2,[sp,#15*4] @ from future BODY_16_xx 1690 eor r3,r7,r8 @ a^b, b^c in next round 1691 ldr r1,[sp,#12*4] @ from future BODY_16_xx 1692#endif 1693 eor r0,r0,r7,ror#20 @ Sigma0(a) 1694 and r12,r12,r3 @ (b^c)&=(a^b) 1695 add r10,r10,r6 @ d+=h 1696 eor r12,r12,r8 @ Maj(a,b,c) 1697 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1698 @ add r6,r6,r12 @ h+=Maj(a,b,c) 1699 @ ldr r2,[sp,#15*4] @ 30 1700 @ ldr r1,[sp,#12*4] 1701 mov r0,r2,ror#7 1702 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1703 mov r12,r1,ror#17 1704 eor r0,r0,r2,ror#18 1705 eor r12,r12,r1,ror#19 1706 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1707 ldr r2,[sp,#14*4] 1708 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1709 ldr r1,[sp,#7*4] 1710 1711 add r12,r12,r0 1712 eor r0,r10,r10,ror#5 @ from BODY_00_15 1713 add r2,r2,r12 1714 eor r0,r0,r10,ror#19 @ Sigma1(e) 1715 add r2,r2,r1 @ X[i] 1716 ldr r12,[r14],#4 @ *K256++ 1717 add r5,r5,r2 @ h+=X[i] 1718 str r2,[sp,#14*4] 1719 eor r2,r11,r4 1720 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1721 and r2,r2,r10 1722 add r5,r5,r12 @ h+=K256[i] 1723 eor r2,r2,r4 @ Ch(e,f,g) 1724 eor r0,r6,r6,ror#11 1725 add r5,r5,r2 @ h+=Ch(e,f,g) 1726#if 30==31 1727 and r12,r12,#0xff 1728 cmp r12,#0xf2 @ done? 1729#endif 1730#if 30<15 1731# if __ARM_ARCH__>=7 1732 ldr r2,[r1],#4 @ prefetch 1733# else 1734 ldrb r2,[r1,#3] 1735# endif 1736 eor r12,r6,r7 @ a^b, b^c in next round 1737#else 1738 ldr r2,[sp,#0*4] @ from future BODY_16_xx 1739 eor r12,r6,r7 @ a^b, b^c in next round 1740 ldr r1,[sp,#13*4] @ from future BODY_16_xx 1741#endif 1742 eor r0,r0,r6,ror#20 @ Sigma0(a) 1743 and r3,r3,r12 @ (b^c)&=(a^b) 1744 add r9,r9,r5 @ d+=h 1745 eor r3,r3,r7 @ Maj(a,b,c) 1746 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1747 @ add r5,r5,r3 @ h+=Maj(a,b,c) 1748 @ ldr r2,[sp,#0*4] @ 31 1749 @ ldr r1,[sp,#13*4] 1750 mov r0,r2,ror#7 1751 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1752 mov r3,r1,ror#17 1753 eor r0,r0,r2,ror#18 1754 eor r3,r3,r1,ror#19 1755 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1756 ldr r2,[sp,#15*4] 1757 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1758 ldr r1,[sp,#8*4] 1759 1760 add r3,r3,r0 1761 eor r0,r9,r9,ror#5 @ from BODY_00_15 1762 add r2,r2,r3 1763 eor r0,r0,r9,ror#19 @ Sigma1(e) 1764 add r2,r2,r1 @ X[i] 1765 ldr r3,[r14],#4 @ *K256++ 1766 add r4,r4,r2 @ h+=X[i] 1767 str r2,[sp,#15*4] 1768 eor r2,r10,r11 1769 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1770 and r2,r2,r9 1771 add r4,r4,r3 @ h+=K256[i] 1772 eor r2,r2,r11 @ Ch(e,f,g) 1773 eor r0,r5,r5,ror#11 1774 add r4,r4,r2 @ h+=Ch(e,f,g) 1775#if 31==31 1776 and r3,r3,#0xff 1777 cmp r3,#0xf2 @ done? 1778#endif 1779#if 31<15 1780# if __ARM_ARCH__>=7 1781 ldr r2,[r1],#4 @ prefetch 1782# else 1783 ldrb r2,[r1,#3] 1784# endif 1785 eor r3,r5,r6 @ a^b, b^c in next round 1786#else 1787 ldr r2,[sp,#1*4] @ from future BODY_16_xx 1788 eor r3,r5,r6 @ a^b, b^c in next round 1789 ldr r1,[sp,#14*4] @ from future BODY_16_xx 1790#endif 1791 eor r0,r0,r5,ror#20 @ Sigma0(a) 1792 and r12,r12,r3 @ (b^c)&=(a^b) 1793 add r8,r8,r4 @ d+=h 1794 eor r12,r12,r6 @ Maj(a,b,c) 1795 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1796 @ add r4,r4,r12 @ h+=Maj(a,b,c) 1797#if __ARM_ARCH__>=7 1798 ite eq @ Thumb2 thing, sanity check in ARM 1799#endif 1800 ldreq r3,[sp,#16*4] @ pull ctx 1801 bne .Lrounds_16_xx 1802 1803 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1804 ldr r0,[r3,#0] 1805 ldr r2,[r3,#4] 1806 ldr r12,[r3,#8] 1807 add r4,r4,r0 1808 ldr r0,[r3,#12] 1809 add r5,r5,r2 1810 ldr r2,[r3,#16] 1811 add r6,r6,r12 1812 ldr r12,[r3,#20] 1813 add r7,r7,r0 1814 ldr r0,[r3,#24] 1815 add r8,r8,r2 1816 ldr r2,[r3,#28] 1817 add r9,r9,r12 1818 ldr r1,[sp,#17*4] @ pull inp 1819 ldr r12,[sp,#18*4] @ pull inp+len 1820 add r10,r10,r0 1821 add r11,r11,r2 1822 stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11} 1823 cmp r1,r12 1824 sub r14,r14,#256 @ rewind Ktbl 1825 bne .Loop 1826 1827 add sp,sp,#19*4 @ destroy frame 1828#if __ARM_ARCH__>=5 1829 ldmia sp!,{r4-r11,pc} 1830#else 1831 ldmia sp!,{r4-r11,lr} 1832 tst lr,#1 1833 moveq pc,lr @ be binary compatible with V4, yet 1834 .word 0xe12fff1e @ interoperable with Thumb ISA:-) 1835#endif 1836.size sha256_block_data_order,.-sha256_block_data_order 1837#if __ARM_MAX_ARCH__>=7 1838.arch armv7-a 1839.fpu neon 1840 1841.global sha256_block_data_order_neon 1842.type sha256_block_data_order_neon,%function 1843.align 4 1844sha256_block_data_order_neon: 1845.LNEON: 1846 stmdb sp!,{r4-r12,lr} 1847 1848 sub r11,sp,#16*4+16 1849 adr r14,K256 1850 bic r11,r11,#15 @ align for 128-bit stores 1851 mov r12,sp 1852 mov sp,r11 @ alloca 1853 add r2,r1,r2,lsl#6 @ len to point at the end of inp 1854 1855 vld1.8 {q0},[r1]! 1856 vld1.8 {q1},[r1]! 1857 vld1.8 {q2},[r1]! 1858 vld1.8 {q3},[r1]! 1859 vld1.32 {q8},[r14,:128]! 1860 vld1.32 {q9},[r14,:128]! 1861 vld1.32 {q10},[r14,:128]! 1862 vld1.32 {q11},[r14,:128]! 1863 vrev32.8 q0,q0 @ yes, even on 1864 str r0,[sp,#64] 1865 vrev32.8 q1,q1 @ big-endian 1866 str r1,[sp,#68] 1867 mov r1,sp 1868 vrev32.8 q2,q2 1869 str r2,[sp,#72] 1870 vrev32.8 q3,q3 1871 str r12,[sp,#76] @ save original sp 1872 vadd.i32 q8,q8,q0 1873 vadd.i32 q9,q9,q1 1874 vst1.32 {q8},[r1,:128]! 1875 vadd.i32 q10,q10,q2 1876 vst1.32 {q9},[r1,:128]! 1877 vadd.i32 q11,q11,q3 1878 vst1.32 {q10},[r1,:128]! 1879 vst1.32 {q11},[r1,:128]! 1880 1881 ldmia r0,{r4-r11} 1882 sub r1,r1,#64 1883 ldr r2,[sp,#0] 1884 eor r12,r12,r12 1885 eor r3,r5,r6 1886 b .L_00_48 1887 1888.align 4 1889.L_00_48: 1890 vext.8 q8,q0,q1,#4 1891 add r11,r11,r2 1892 eor r2,r9,r10 1893 eor r0,r8,r8,ror#5 1894 vext.8 q9,q2,q3,#4 1895 add r4,r4,r12 1896 and r2,r2,r8 1897 eor r12,r0,r8,ror#19 1898 vshr.u32 q10,q8,#7 1899 eor r0,r4,r4,ror#11 1900 eor r2,r2,r10 1901 vadd.i32 q0,q0,q9 1902 add r11,r11,r12,ror#6 1903 eor r12,r4,r5 1904 vshr.u32 q9,q8,#3 1905 eor r0,r0,r4,ror#20 1906 add r11,r11,r2 1907 vsli.32 q10,q8,#25 1908 ldr r2,[sp,#4] 1909 and r3,r3,r12 1910 vshr.u32 q11,q8,#18 1911 add r7,r7,r11 1912 add r11,r11,r0,ror#2 1913 eor r3,r3,r5 1914 veor q9,q9,q10 1915 add r10,r10,r2 1916 vsli.32 q11,q8,#14 1917 eor r2,r8,r9 1918 eor r0,r7,r7,ror#5 1919 vshr.u32 d24,d7,#17 1920 add r11,r11,r3 1921 and r2,r2,r7 1922 veor q9,q9,q11 1923 eor r3,r0,r7,ror#19 1924 eor r0,r11,r11,ror#11 1925 vsli.32 d24,d7,#15 1926 eor r2,r2,r9 1927 add r10,r10,r3,ror#6 1928 vshr.u32 d25,d7,#10 1929 eor r3,r11,r4 1930 eor r0,r0,r11,ror#20 1931 vadd.i32 q0,q0,q9 1932 add r10,r10,r2 1933 ldr r2,[sp,#8] 1934 veor d25,d25,d24 1935 and r12,r12,r3 1936 add r6,r6,r10 1937 vshr.u32 d24,d7,#19 1938 add r10,r10,r0,ror#2 1939 eor r12,r12,r4 1940 vsli.32 d24,d7,#13 1941 add r9,r9,r2 1942 eor r2,r7,r8 1943 veor d25,d25,d24 1944 eor r0,r6,r6,ror#5 1945 add r10,r10,r12 1946 vadd.i32 d0,d0,d25 1947 and r2,r2,r6 1948 eor r12,r0,r6,ror#19 1949 vshr.u32 d24,d0,#17 1950 eor r0,r10,r10,ror#11 1951 eor r2,r2,r8 1952 vsli.32 d24,d0,#15 1953 add r9,r9,r12,ror#6 1954 eor r12,r10,r11 1955 vshr.u32 d25,d0,#10 1956 eor r0,r0,r10,ror#20 1957 add r9,r9,r2 1958 veor d25,d25,d24 1959 ldr r2,[sp,#12] 1960 and r3,r3,r12 1961 vshr.u32 d24,d0,#19 1962 add r5,r5,r9 1963 add r9,r9,r0,ror#2 1964 eor r3,r3,r11 1965 vld1.32 {q8},[r14,:128]! 1966 add r8,r8,r2 1967 vsli.32 d24,d0,#13 1968 eor r2,r6,r7 1969 eor r0,r5,r5,ror#5 1970 veor d25,d25,d24 1971 add r9,r9,r3 1972 and r2,r2,r5 1973 vadd.i32 d1,d1,d25 1974 eor r3,r0,r5,ror#19 1975 eor r0,r9,r9,ror#11 1976 vadd.i32 q8,q8,q0 1977 eor r2,r2,r7 1978 add r8,r8,r3,ror#6 1979 eor r3,r9,r10 1980 eor r0,r0,r9,ror#20 1981 add r8,r8,r2 1982 ldr r2,[sp,#16] 1983 and r12,r12,r3 1984 add r4,r4,r8 1985 vst1.32 {q8},[r1,:128]! 1986 add r8,r8,r0,ror#2 1987 eor r12,r12,r10 1988 vext.8 q8,q1,q2,#4 1989 add r7,r7,r2 1990 eor r2,r5,r6 1991 eor r0,r4,r4,ror#5 1992 vext.8 q9,q3,q0,#4 1993 add r8,r8,r12 1994 and r2,r2,r4 1995 eor r12,r0,r4,ror#19 1996 vshr.u32 q10,q8,#7 1997 eor r0,r8,r8,ror#11 1998 eor r2,r2,r6 1999 vadd.i32 q1,q1,q9 2000 add r7,r7,r12,ror#6 2001 eor r12,r8,r9 2002 vshr.u32 q9,q8,#3 2003 eor r0,r0,r8,ror#20 2004 add r7,r7,r2 2005 vsli.32 q10,q8,#25 2006 ldr r2,[sp,#20] 2007 and r3,r3,r12 2008 vshr.u32 q11,q8,#18 2009 add r11,r11,r7 2010 add r7,r7,r0,ror#2 2011 eor r3,r3,r9 2012 veor q9,q9,q10 2013 add r6,r6,r2 2014 vsli.32 q11,q8,#14 2015 eor r2,r4,r5 2016 eor r0,r11,r11,ror#5 2017 vshr.u32 d24,d1,#17 2018 add r7,r7,r3 2019 and r2,r2,r11 2020 veor q9,q9,q11 2021 eor r3,r0,r11,ror#19 2022 eor r0,r7,r7,ror#11 2023 vsli.32 d24,d1,#15 2024 eor r2,r2,r5 2025 add r6,r6,r3,ror#6 2026 vshr.u32 d25,d1,#10 2027 eor r3,r7,r8 2028 eor r0,r0,r7,ror#20 2029 vadd.i32 q1,q1,q9 2030 add r6,r6,r2 2031 ldr r2,[sp,#24] 2032 veor d25,d25,d24 2033 and r12,r12,r3 2034 add r10,r10,r6 2035 vshr.u32 d24,d1,#19 2036 add r6,r6,r0,ror#2 2037 eor r12,r12,r8 2038 vsli.32 d24,d1,#13 2039 add r5,r5,r2 2040 eor r2,r11,r4 2041 veor d25,d25,d24 2042 eor r0,r10,r10,ror#5 2043 add r6,r6,r12 2044 vadd.i32 d2,d2,d25 2045 and r2,r2,r10 2046 eor r12,r0,r10,ror#19 2047 vshr.u32 d24,d2,#17 2048 eor r0,r6,r6,ror#11 2049 eor r2,r2,r4 2050 vsli.32 d24,d2,#15 2051 add r5,r5,r12,ror#6 2052 eor r12,r6,r7 2053 vshr.u32 d25,d2,#10 2054 eor r0,r0,r6,ror#20 2055 add r5,r5,r2 2056 veor d25,d25,d24 2057 ldr r2,[sp,#28] 2058 and r3,r3,r12 2059 vshr.u32 d24,d2,#19 2060 add r9,r9,r5 2061 add r5,r5,r0,ror#2 2062 eor r3,r3,r7 2063 vld1.32 {q8},[r14,:128]! 2064 add r4,r4,r2 2065 vsli.32 d24,d2,#13 2066 eor r2,r10,r11 2067 eor r0,r9,r9,ror#5 2068 veor d25,d25,d24 2069 add r5,r5,r3 2070 and r2,r2,r9 2071 vadd.i32 d3,d3,d25 2072 eor r3,r0,r9,ror#19 2073 eor r0,r5,r5,ror#11 2074 vadd.i32 q8,q8,q1 2075 eor r2,r2,r11 2076 add r4,r4,r3,ror#6 2077 eor r3,r5,r6 2078 eor r0,r0,r5,ror#20 2079 add r4,r4,r2 2080 ldr r2,[sp,#32] 2081 and r12,r12,r3 2082 add r8,r8,r4 2083 vst1.32 {q8},[r1,:128]! 2084 add r4,r4,r0,ror#2 2085 eor r12,r12,r6 2086 vext.8 q8,q2,q3,#4 2087 add r11,r11,r2 2088 eor r2,r9,r10 2089 eor r0,r8,r8,ror#5 2090 vext.8 q9,q0,q1,#4 2091 add r4,r4,r12 2092 and r2,r2,r8 2093 eor r12,r0,r8,ror#19 2094 vshr.u32 q10,q8,#7 2095 eor r0,r4,r4,ror#11 2096 eor r2,r2,r10 2097 vadd.i32 q2,q2,q9 2098 add r11,r11,r12,ror#6 2099 eor r12,r4,r5 2100 vshr.u32 q9,q8,#3 2101 eor r0,r0,r4,ror#20 2102 add r11,r11,r2 2103 vsli.32 q10,q8,#25 2104 ldr r2,[sp,#36] 2105 and r3,r3,r12 2106 vshr.u32 q11,q8,#18 2107 add r7,r7,r11 2108 add r11,r11,r0,ror#2 2109 eor r3,r3,r5 2110 veor q9,q9,q10 2111 add r10,r10,r2 2112 vsli.32 q11,q8,#14 2113 eor r2,r8,r9 2114 eor r0,r7,r7,ror#5 2115 vshr.u32 d24,d3,#17 2116 add r11,r11,r3 2117 and r2,r2,r7 2118 veor q9,q9,q11 2119 eor r3,r0,r7,ror#19 2120 eor r0,r11,r11,ror#11 2121 vsli.32 d24,d3,#15 2122 eor r2,r2,r9 2123 add r10,r10,r3,ror#6 2124 vshr.u32 d25,d3,#10 2125 eor r3,r11,r4 2126 eor r0,r0,r11,ror#20 2127 vadd.i32 q2,q2,q9 2128 add r10,r10,r2 2129 ldr r2,[sp,#40] 2130 veor d25,d25,d24 2131 and r12,r12,r3 2132 add r6,r6,r10 2133 vshr.u32 d24,d3,#19 2134 add r10,r10,r0,ror#2 2135 eor r12,r12,r4 2136 vsli.32 d24,d3,#13 2137 add r9,r9,r2 2138 eor r2,r7,r8 2139 veor d25,d25,d24 2140 eor r0,r6,r6,ror#5 2141 add r10,r10,r12 2142 vadd.i32 d4,d4,d25 2143 and r2,r2,r6 2144 eor r12,r0,r6,ror#19 2145 vshr.u32 d24,d4,#17 2146 eor r0,r10,r10,ror#11 2147 eor r2,r2,r8 2148 vsli.32 d24,d4,#15 2149 add r9,r9,r12,ror#6 2150 eor r12,r10,r11 2151 vshr.u32 d25,d4,#10 2152 eor r0,r0,r10,ror#20 2153 add r9,r9,r2 2154 veor d25,d25,d24 2155 ldr r2,[sp,#44] 2156 and r3,r3,r12 2157 vshr.u32 d24,d4,#19 2158 add r5,r5,r9 2159 add r9,r9,r0,ror#2 2160 eor r3,r3,r11 2161 vld1.32 {q8},[r14,:128]! 2162 add r8,r8,r2 2163 vsli.32 d24,d4,#13 2164 eor r2,r6,r7 2165 eor r0,r5,r5,ror#5 2166 veor d25,d25,d24 2167 add r9,r9,r3 2168 and r2,r2,r5 2169 vadd.i32 d5,d5,d25 2170 eor r3,r0,r5,ror#19 2171 eor r0,r9,r9,ror#11 2172 vadd.i32 q8,q8,q2 2173 eor r2,r2,r7 2174 add r8,r8,r3,ror#6 2175 eor r3,r9,r10 2176 eor r0,r0,r9,ror#20 2177 add r8,r8,r2 2178 ldr r2,[sp,#48] 2179 and r12,r12,r3 2180 add r4,r4,r8 2181 vst1.32 {q8},[r1,:128]! 2182 add r8,r8,r0,ror#2 2183 eor r12,r12,r10 2184 vext.8 q8,q3,q0,#4 2185 add r7,r7,r2 2186 eor r2,r5,r6 2187 eor r0,r4,r4,ror#5 2188 vext.8 q9,q1,q2,#4 2189 add r8,r8,r12 2190 and r2,r2,r4 2191 eor r12,r0,r4,ror#19 2192 vshr.u32 q10,q8,#7 2193 eor r0,r8,r8,ror#11 2194 eor r2,r2,r6 2195 vadd.i32 q3,q3,q9 2196 add r7,r7,r12,ror#6 2197 eor r12,r8,r9 2198 vshr.u32 q9,q8,#3 2199 eor r0,r0,r8,ror#20 2200 add r7,r7,r2 2201 vsli.32 q10,q8,#25 2202 ldr r2,[sp,#52] 2203 and r3,r3,r12 2204 vshr.u32 q11,q8,#18 2205 add r11,r11,r7 2206 add r7,r7,r0,ror#2 2207 eor r3,r3,r9 2208 veor q9,q9,q10 2209 add r6,r6,r2 2210 vsli.32 q11,q8,#14 2211 eor r2,r4,r5 2212 eor r0,r11,r11,ror#5 2213 vshr.u32 d24,d5,#17 2214 add r7,r7,r3 2215 and r2,r2,r11 2216 veor q9,q9,q11 2217 eor r3,r0,r11,ror#19 2218 eor r0,r7,r7,ror#11 2219 vsli.32 d24,d5,#15 2220 eor r2,r2,r5 2221 add r6,r6,r3,ror#6 2222 vshr.u32 d25,d5,#10 2223 eor r3,r7,r8 2224 eor r0,r0,r7,ror#20 2225 vadd.i32 q3,q3,q9 2226 add r6,r6,r2 2227 ldr r2,[sp,#56] 2228 veor d25,d25,d24 2229 and r12,r12,r3 2230 add r10,r10,r6 2231 vshr.u32 d24,d5,#19 2232 add r6,r6,r0,ror#2 2233 eor r12,r12,r8 2234 vsli.32 d24,d5,#13 2235 add r5,r5,r2 2236 eor r2,r11,r4 2237 veor d25,d25,d24 2238 eor r0,r10,r10,ror#5 2239 add r6,r6,r12 2240 vadd.i32 d6,d6,d25 2241 and r2,r2,r10 2242 eor r12,r0,r10,ror#19 2243 vshr.u32 d24,d6,#17 2244 eor r0,r6,r6,ror#11 2245 eor r2,r2,r4 2246 vsli.32 d24,d6,#15 2247 add r5,r5,r12,ror#6 2248 eor r12,r6,r7 2249 vshr.u32 d25,d6,#10 2250 eor r0,r0,r6,ror#20 2251 add r5,r5,r2 2252 veor d25,d25,d24 2253 ldr r2,[sp,#60] 2254 and r3,r3,r12 2255 vshr.u32 d24,d6,#19 2256 add r9,r9,r5 2257 add r5,r5,r0,ror#2 2258 eor r3,r3,r7 2259 vld1.32 {q8},[r14,:128]! 2260 add r4,r4,r2 2261 vsli.32 d24,d6,#13 2262 eor r2,r10,r11 2263 eor r0,r9,r9,ror#5 2264 veor d25,d25,d24 2265 add r5,r5,r3 2266 and r2,r2,r9 2267 vadd.i32 d7,d7,d25 2268 eor r3,r0,r9,ror#19 2269 eor r0,r5,r5,ror#11 2270 vadd.i32 q8,q8,q3 2271 eor r2,r2,r11 2272 add r4,r4,r3,ror#6 2273 eor r3,r5,r6 2274 eor r0,r0,r5,ror#20 2275 add r4,r4,r2 2276 ldr r2,[r14] 2277 and r12,r12,r3 2278 add r8,r8,r4 2279 vst1.32 {q8},[r1,:128]! 2280 add r4,r4,r0,ror#2 2281 eor r12,r12,r6 2282 teq r2,#0 @ check for K256 terminator 2283 ldr r2,[sp,#0] 2284 sub r1,r1,#64 2285 bne .L_00_48 2286 2287 ldr r1,[sp,#68] 2288 ldr r0,[sp,#72] 2289 sub r14,r14,#256 @ rewind r14 2290 teq r1,r0 2291 it eq 2292 subeq r1,r1,#64 @ avoid SEGV 2293 vld1.8 {q0},[r1]! @ load next input block 2294 vld1.8 {q1},[r1]! 2295 vld1.8 {q2},[r1]! 2296 vld1.8 {q3},[r1]! 2297 it ne 2298 strne r1,[sp,#68] 2299 mov r1,sp 2300 add r11,r11,r2 2301 eor r2,r9,r10 2302 eor r0,r8,r8,ror#5 2303 add r4,r4,r12 2304 vld1.32 {q8},[r14,:128]! 2305 and r2,r2,r8 2306 eor r12,r0,r8,ror#19 2307 eor r0,r4,r4,ror#11 2308 eor r2,r2,r10 2309 vrev32.8 q0,q0 2310 add r11,r11,r12,ror#6 2311 eor r12,r4,r5 2312 eor r0,r0,r4,ror#20 2313 add r11,r11,r2 2314 vadd.i32 q8,q8,q0 2315 ldr r2,[sp,#4] 2316 and r3,r3,r12 2317 add r7,r7,r11 2318 add r11,r11,r0,ror#2 2319 eor r3,r3,r5 2320 add r10,r10,r2 2321 eor r2,r8,r9 2322 eor r0,r7,r7,ror#5 2323 add r11,r11,r3 2324 and r2,r2,r7 2325 eor r3,r0,r7,ror#19 2326 eor r0,r11,r11,ror#11 2327 eor r2,r2,r9 2328 add r10,r10,r3,ror#6 2329 eor r3,r11,r4 2330 eor r0,r0,r11,ror#20 2331 add r10,r10,r2 2332 ldr r2,[sp,#8] 2333 and r12,r12,r3 2334 add r6,r6,r10 2335 add r10,r10,r0,ror#2 2336 eor r12,r12,r4 2337 add r9,r9,r2 2338 eor r2,r7,r8 2339 eor r0,r6,r6,ror#5 2340 add r10,r10,r12 2341 and r2,r2,r6 2342 eor r12,r0,r6,ror#19 2343 eor r0,r10,r10,ror#11 2344 eor r2,r2,r8 2345 add r9,r9,r12,ror#6 2346 eor r12,r10,r11 2347 eor r0,r0,r10,ror#20 2348 add r9,r9,r2 2349 ldr r2,[sp,#12] 2350 and r3,r3,r12 2351 add r5,r5,r9 2352 add r9,r9,r0,ror#2 2353 eor r3,r3,r11 2354 add r8,r8,r2 2355 eor r2,r6,r7 2356 eor r0,r5,r5,ror#5 2357 add r9,r9,r3 2358 and r2,r2,r5 2359 eor r3,r0,r5,ror#19 2360 eor r0,r9,r9,ror#11 2361 eor r2,r2,r7 2362 add r8,r8,r3,ror#6 2363 eor r3,r9,r10 2364 eor r0,r0,r9,ror#20 2365 add r8,r8,r2 2366 ldr r2,[sp,#16] 2367 and r12,r12,r3 2368 add r4,r4,r8 2369 add r8,r8,r0,ror#2 2370 eor r12,r12,r10 2371 vst1.32 {q8},[r1,:128]! 2372 add r7,r7,r2 2373 eor r2,r5,r6 2374 eor r0,r4,r4,ror#5 2375 add r8,r8,r12 2376 vld1.32 {q8},[r14,:128]! 2377 and r2,r2,r4 2378 eor r12,r0,r4,ror#19 2379 eor r0,r8,r8,ror#11 2380 eor r2,r2,r6 2381 vrev32.8 q1,q1 2382 add r7,r7,r12,ror#6 2383 eor r12,r8,r9 2384 eor r0,r0,r8,ror#20 2385 add r7,r7,r2 2386 vadd.i32 q8,q8,q1 2387 ldr r2,[sp,#20] 2388 and r3,r3,r12 2389 add r11,r11,r7 2390 add r7,r7,r0,ror#2 2391 eor r3,r3,r9 2392 add r6,r6,r2 2393 eor r2,r4,r5 2394 eor r0,r11,r11,ror#5 2395 add r7,r7,r3 2396 and r2,r2,r11 2397 eor r3,r0,r11,ror#19 2398 eor r0,r7,r7,ror#11 2399 eor r2,r2,r5 2400 add r6,r6,r3,ror#6 2401 eor r3,r7,r8 2402 eor r0,r0,r7,ror#20 2403 add r6,r6,r2 2404 ldr r2,[sp,#24] 2405 and r12,r12,r3 2406 add r10,r10,r6 2407 add r6,r6,r0,ror#2 2408 eor r12,r12,r8 2409 add r5,r5,r2 2410 eor r2,r11,r4 2411 eor r0,r10,r10,ror#5 2412 add r6,r6,r12 2413 and r2,r2,r10 2414 eor r12,r0,r10,ror#19 2415 eor r0,r6,r6,ror#11 2416 eor r2,r2,r4 2417 add r5,r5,r12,ror#6 2418 eor r12,r6,r7 2419 eor r0,r0,r6,ror#20 2420 add r5,r5,r2 2421 ldr r2,[sp,#28] 2422 and r3,r3,r12 2423 add r9,r9,r5 2424 add r5,r5,r0,ror#2 2425 eor r3,r3,r7 2426 add r4,r4,r2 2427 eor r2,r10,r11 2428 eor r0,r9,r9,ror#5 2429 add r5,r5,r3 2430 and r2,r2,r9 2431 eor r3,r0,r9,ror#19 2432 eor r0,r5,r5,ror#11 2433 eor r2,r2,r11 2434 add r4,r4,r3,ror#6 2435 eor r3,r5,r6 2436 eor r0,r0,r5,ror#20 2437 add r4,r4,r2 2438 ldr r2,[sp,#32] 2439 and r12,r12,r3 2440 add r8,r8,r4 2441 add r4,r4,r0,ror#2 2442 eor r12,r12,r6 2443 vst1.32 {q8},[r1,:128]! 2444 add r11,r11,r2 2445 eor r2,r9,r10 2446 eor r0,r8,r8,ror#5 2447 add r4,r4,r12 2448 vld1.32 {q8},[r14,:128]! 2449 and r2,r2,r8 2450 eor r12,r0,r8,ror#19 2451 eor r0,r4,r4,ror#11 2452 eor r2,r2,r10 2453 vrev32.8 q2,q2 2454 add r11,r11,r12,ror#6 2455 eor r12,r4,r5 2456 eor r0,r0,r4,ror#20 2457 add r11,r11,r2 2458 vadd.i32 q8,q8,q2 2459 ldr r2,[sp,#36] 2460 and r3,r3,r12 2461 add r7,r7,r11 2462 add r11,r11,r0,ror#2 2463 eor r3,r3,r5 2464 add r10,r10,r2 2465 eor r2,r8,r9 2466 eor r0,r7,r7,ror#5 2467 add r11,r11,r3 2468 and r2,r2,r7 2469 eor r3,r0,r7,ror#19 2470 eor r0,r11,r11,ror#11 2471 eor r2,r2,r9 2472 add r10,r10,r3,ror#6 2473 eor r3,r11,r4 2474 eor r0,r0,r11,ror#20 2475 add r10,r10,r2 2476 ldr r2,[sp,#40] 2477 and r12,r12,r3 2478 add r6,r6,r10 2479 add r10,r10,r0,ror#2 2480 eor r12,r12,r4 2481 add r9,r9,r2 2482 eor r2,r7,r8 2483 eor r0,r6,r6,ror#5 2484 add r10,r10,r12 2485 and r2,r2,r6 2486 eor r12,r0,r6,ror#19 2487 eor r0,r10,r10,ror#11 2488 eor r2,r2,r8 2489 add r9,r9,r12,ror#6 2490 eor r12,r10,r11 2491 eor r0,r0,r10,ror#20 2492 add r9,r9,r2 2493 ldr r2,[sp,#44] 2494 and r3,r3,r12 2495 add r5,r5,r9 2496 add r9,r9,r0,ror#2 2497 eor r3,r3,r11 2498 add r8,r8,r2 2499 eor r2,r6,r7 2500 eor r0,r5,r5,ror#5 2501 add r9,r9,r3 2502 and r2,r2,r5 2503 eor r3,r0,r5,ror#19 2504 eor r0,r9,r9,ror#11 2505 eor r2,r2,r7 2506 add r8,r8,r3,ror#6 2507 eor r3,r9,r10 2508 eor r0,r0,r9,ror#20 2509 add r8,r8,r2 2510 ldr r2,[sp,#48] 2511 and r12,r12,r3 2512 add r4,r4,r8 2513 add r8,r8,r0,ror#2 2514 eor r12,r12,r10 2515 vst1.32 {q8},[r1,:128]! 2516 add r7,r7,r2 2517 eor r2,r5,r6 2518 eor r0,r4,r4,ror#5 2519 add r8,r8,r12 2520 vld1.32 {q8},[r14,:128]! 2521 and r2,r2,r4 2522 eor r12,r0,r4,ror#19 2523 eor r0,r8,r8,ror#11 2524 eor r2,r2,r6 2525 vrev32.8 q3,q3 2526 add r7,r7,r12,ror#6 2527 eor r12,r8,r9 2528 eor r0,r0,r8,ror#20 2529 add r7,r7,r2 2530 vadd.i32 q8,q8,q3 2531 ldr r2,[sp,#52] 2532 and r3,r3,r12 2533 add r11,r11,r7 2534 add r7,r7,r0,ror#2 2535 eor r3,r3,r9 2536 add r6,r6,r2 2537 eor r2,r4,r5 2538 eor r0,r11,r11,ror#5 2539 add r7,r7,r3 2540 and r2,r2,r11 2541 eor r3,r0,r11,ror#19 2542 eor r0,r7,r7,ror#11 2543 eor r2,r2,r5 2544 add r6,r6,r3,ror#6 2545 eor r3,r7,r8 2546 eor r0,r0,r7,ror#20 2547 add r6,r6,r2 2548 ldr r2,[sp,#56] 2549 and r12,r12,r3 2550 add r10,r10,r6 2551 add r6,r6,r0,ror#2 2552 eor r12,r12,r8 2553 add r5,r5,r2 2554 eor r2,r11,r4 2555 eor r0,r10,r10,ror#5 2556 add r6,r6,r12 2557 and r2,r2,r10 2558 eor r12,r0,r10,ror#19 2559 eor r0,r6,r6,ror#11 2560 eor r2,r2,r4 2561 add r5,r5,r12,ror#6 2562 eor r12,r6,r7 2563 eor r0,r0,r6,ror#20 2564 add r5,r5,r2 2565 ldr r2,[sp,#60] 2566 and r3,r3,r12 2567 add r9,r9,r5 2568 add r5,r5,r0,ror#2 2569 eor r3,r3,r7 2570 add r4,r4,r2 2571 eor r2,r10,r11 2572 eor r0,r9,r9,ror#5 2573 add r5,r5,r3 2574 and r2,r2,r9 2575 eor r3,r0,r9,ror#19 2576 eor r0,r5,r5,ror#11 2577 eor r2,r2,r11 2578 add r4,r4,r3,ror#6 2579 eor r3,r5,r6 2580 eor r0,r0,r5,ror#20 2581 add r4,r4,r2 2582 ldr r2,[sp,#64] 2583 and r12,r12,r3 2584 add r8,r8,r4 2585 add r4,r4,r0,ror#2 2586 eor r12,r12,r6 2587 vst1.32 {q8},[r1,:128]! 2588 ldr r0,[r2,#0] 2589 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 2590 ldr r12,[r2,#4] 2591 ldr r3,[r2,#8] 2592 ldr r1,[r2,#12] 2593 add r4,r4,r0 @ accumulate 2594 ldr r0,[r2,#16] 2595 add r5,r5,r12 2596 ldr r12,[r2,#20] 2597 add r6,r6,r3 2598 ldr r3,[r2,#24] 2599 add r7,r7,r1 2600 ldr r1,[r2,#28] 2601 add r8,r8,r0 2602 str r4,[r2],#4 2603 add r9,r9,r12 2604 str r5,[r2],#4 2605 add r10,r10,r3 2606 str r6,[r2],#4 2607 add r11,r11,r1 2608 str r7,[r2],#4 2609 stmia r2,{r8-r11} 2610 2611 ittte ne 2612 movne r1,sp 2613 ldrne r2,[sp,#0] 2614 eorne r12,r12,r12 2615 ldreq sp,[sp,#76] @ restore original sp 2616 itt ne 2617 eorne r3,r5,r6 2618 bne .L_00_48 2619 2620 ldmia sp!,{r4-r12,pc} 2621.size sha256_block_data_order_neon,.-sha256_block_data_order_neon 2622#endif 2623#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 2624 2625# ifdef __thumb2__ 2626# define INST(a,b,c,d) .byte c,d|0xc,a,b 2627# else 2628# define INST(a,b,c,d) .byte a,b,c,d 2629# endif 2630 2631.type sha256_block_data_order_armv8,%function 2632.align 5 2633sha256_block_data_order_armv8: 2634.LARMv8: 2635 vld1.32 {q0,q1},[r0] 2636# ifdef __thumb2__ 2637 adr r3,.LARMv8 2638 sub r3,r3,#.LARMv8-K256 2639# else 2640 sub r3,r3,#256+32 2641# endif 2642 add r2,r1,r2,lsl#6 @ len to point at the end of inp 2643 2644.Loop_v8: 2645 vld1.8 {q8-q9},[r1]! 2646 vld1.8 {q10-q11},[r1]! 2647 vld1.32 {q12},[r3]! 2648 vrev32.8 q8,q8 2649 vrev32.8 q9,q9 2650 vrev32.8 q10,q10 2651 vrev32.8 q11,q11 2652 vmov q14,q0 @ offload 2653 vmov q15,q1 2654 teq r1,r2 2655 vld1.32 {q13},[r3]! 2656 vadd.i32 q12,q12,q8 2657 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2658 vmov q2,q0 2659 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2660 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2661 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2662 vld1.32 {q12},[r3]! 2663 vadd.i32 q13,q13,q9 2664 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2665 vmov q2,q0 2666 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2667 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2668 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2669 vld1.32 {q13},[r3]! 2670 vadd.i32 q12,q12,q10 2671 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2672 vmov q2,q0 2673 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2674 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2675 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2676 vld1.32 {q12},[r3]! 2677 vadd.i32 q13,q13,q11 2678 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2679 vmov q2,q0 2680 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2681 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2682 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2683 vld1.32 {q13},[r3]! 2684 vadd.i32 q12,q12,q8 2685 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2686 vmov q2,q0 2687 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2688 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2689 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2690 vld1.32 {q12},[r3]! 2691 vadd.i32 q13,q13,q9 2692 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2693 vmov q2,q0 2694 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2695 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2696 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2697 vld1.32 {q13},[r3]! 2698 vadd.i32 q12,q12,q10 2699 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2700 vmov q2,q0 2701 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2702 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2703 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2704 vld1.32 {q12},[r3]! 2705 vadd.i32 q13,q13,q11 2706 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2707 vmov q2,q0 2708 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2709 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2710 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2711 vld1.32 {q13},[r3]! 2712 vadd.i32 q12,q12,q8 2713 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2714 vmov q2,q0 2715 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2716 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2717 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2718 vld1.32 {q12},[r3]! 2719 vadd.i32 q13,q13,q9 2720 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2721 vmov q2,q0 2722 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2723 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2724 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2725 vld1.32 {q13},[r3]! 2726 vadd.i32 q12,q12,q10 2727 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2728 vmov q2,q0 2729 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2730 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2731 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2732 vld1.32 {q12},[r3]! 2733 vadd.i32 q13,q13,q11 2734 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2735 vmov q2,q0 2736 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2737 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2738 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2739 vld1.32 {q13},[r3]! 2740 vadd.i32 q12,q12,q8 2741 vmov q2,q0 2742 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2743 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2744 2745 vld1.32 {q12},[r3]! 2746 vadd.i32 q13,q13,q9 2747 vmov q2,q0 2748 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2749 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2750 2751 vld1.32 {q13},[r3] 2752 vadd.i32 q12,q12,q10 2753 sub r3,r3,#256-16 @ rewind 2754 vmov q2,q0 2755 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2756 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2757 2758 vadd.i32 q13,q13,q11 2759 vmov q2,q0 2760 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2761 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2762 2763 vadd.i32 q0,q0,q14 2764 vadd.i32 q1,q1,q15 2765 it ne 2766 bne .Loop_v8 2767 2768 vst1.32 {q0,q1},[r0] 2769 2770 bx lr @ bx lr 2771.size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8 2772#endif 2773.asciz "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>" 2774.align 2 2775#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 2776.comm OPENSSL_armcap_P,4,4 2777#endif
| 94#endif 95#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 96 ldr r12,.LOPENSSL_armcap 97 ldr r12,[r3,r12] @ OPENSSL_armcap_P 98 tst r12,#ARMV8_SHA256 99 bne .LARMv8 100 tst r12,#ARMV7_NEON 101 bne .LNEON 102#endif 103 add r2,r1,r2,lsl#6 @ len to point at the end of inp 104 stmdb sp!,{r0,r1,r2,r4-r11,lr} 105 ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11} 106 sub r14,r3,#256+32 @ K256 107 sub sp,sp,#16*4 @ alloca(X[16]) 108.Loop: 109# if __ARM_ARCH__>=7 110 ldr r2,[r1],#4 111# else 112 ldrb r2,[r1,#3] 113# endif 114 eor r3,r5,r6 @ magic 115 eor r12,r12,r12 116#if __ARM_ARCH__>=7 117 @ ldr r2,[r1],#4 @ 0 118# if 0==15 119 str r1,[sp,#17*4] @ make room for r1 120# endif 121 eor r0,r8,r8,ror#5 122 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 123 eor r0,r0,r8,ror#19 @ Sigma1(e) 124 rev r2,r2 125#else 126 @ ldrb r2,[r1,#3] @ 0 127 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 128 ldrb r12,[r1,#2] 129 ldrb r0,[r1,#1] 130 orr r2,r2,r12,lsl#8 131 ldrb r12,[r1],#4 132 orr r2,r2,r0,lsl#16 133# if 0==15 134 str r1,[sp,#17*4] @ make room for r1 135# endif 136 eor r0,r8,r8,ror#5 137 orr r2,r2,r12,lsl#24 138 eor r0,r0,r8,ror#19 @ Sigma1(e) 139#endif 140 ldr r12,[r14],#4 @ *K256++ 141 add r11,r11,r2 @ h+=X[i] 142 str r2,[sp,#0*4] 143 eor r2,r9,r10 144 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 145 and r2,r2,r8 146 add r11,r11,r12 @ h+=K256[i] 147 eor r2,r2,r10 @ Ch(e,f,g) 148 eor r0,r4,r4,ror#11 149 add r11,r11,r2 @ h+=Ch(e,f,g) 150#if 0==31 151 and r12,r12,#0xff 152 cmp r12,#0xf2 @ done? 153#endif 154#if 0<15 155# if __ARM_ARCH__>=7 156 ldr r2,[r1],#4 @ prefetch 157# else 158 ldrb r2,[r1,#3] 159# endif 160 eor r12,r4,r5 @ a^b, b^c in next round 161#else 162 ldr r2,[sp,#2*4] @ from future BODY_16_xx 163 eor r12,r4,r5 @ a^b, b^c in next round 164 ldr r1,[sp,#15*4] @ from future BODY_16_xx 165#endif 166 eor r0,r0,r4,ror#20 @ Sigma0(a) 167 and r3,r3,r12 @ (b^c)&=(a^b) 168 add r7,r7,r11 @ d+=h 169 eor r3,r3,r5 @ Maj(a,b,c) 170 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 171 @ add r11,r11,r3 @ h+=Maj(a,b,c) 172#if __ARM_ARCH__>=7 173 @ ldr r2,[r1],#4 @ 1 174# if 1==15 175 str r1,[sp,#17*4] @ make room for r1 176# endif 177 eor r0,r7,r7,ror#5 178 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 179 eor r0,r0,r7,ror#19 @ Sigma1(e) 180 rev r2,r2 181#else 182 @ ldrb r2,[r1,#3] @ 1 183 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 184 ldrb r3,[r1,#2] 185 ldrb r0,[r1,#1] 186 orr r2,r2,r3,lsl#8 187 ldrb r3,[r1],#4 188 orr r2,r2,r0,lsl#16 189# if 1==15 190 str r1,[sp,#17*4] @ make room for r1 191# endif 192 eor r0,r7,r7,ror#5 193 orr r2,r2,r3,lsl#24 194 eor r0,r0,r7,ror#19 @ Sigma1(e) 195#endif 196 ldr r3,[r14],#4 @ *K256++ 197 add r10,r10,r2 @ h+=X[i] 198 str r2,[sp,#1*4] 199 eor r2,r8,r9 200 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 201 and r2,r2,r7 202 add r10,r10,r3 @ h+=K256[i] 203 eor r2,r2,r9 @ Ch(e,f,g) 204 eor r0,r11,r11,ror#11 205 add r10,r10,r2 @ h+=Ch(e,f,g) 206#if 1==31 207 and r3,r3,#0xff 208 cmp r3,#0xf2 @ done? 209#endif 210#if 1<15 211# if __ARM_ARCH__>=7 212 ldr r2,[r1],#4 @ prefetch 213# else 214 ldrb r2,[r1,#3] 215# endif 216 eor r3,r11,r4 @ a^b, b^c in next round 217#else 218 ldr r2,[sp,#3*4] @ from future BODY_16_xx 219 eor r3,r11,r4 @ a^b, b^c in next round 220 ldr r1,[sp,#0*4] @ from future BODY_16_xx 221#endif 222 eor r0,r0,r11,ror#20 @ Sigma0(a) 223 and r12,r12,r3 @ (b^c)&=(a^b) 224 add r6,r6,r10 @ d+=h 225 eor r12,r12,r4 @ Maj(a,b,c) 226 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 227 @ add r10,r10,r12 @ h+=Maj(a,b,c) 228#if __ARM_ARCH__>=7 229 @ ldr r2,[r1],#4 @ 2 230# if 2==15 231 str r1,[sp,#17*4] @ make room for r1 232# endif 233 eor r0,r6,r6,ror#5 234 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 235 eor r0,r0,r6,ror#19 @ Sigma1(e) 236 rev r2,r2 237#else 238 @ ldrb r2,[r1,#3] @ 2 239 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 240 ldrb r12,[r1,#2] 241 ldrb r0,[r1,#1] 242 orr r2,r2,r12,lsl#8 243 ldrb r12,[r1],#4 244 orr r2,r2,r0,lsl#16 245# if 2==15 246 str r1,[sp,#17*4] @ make room for r1 247# endif 248 eor r0,r6,r6,ror#5 249 orr r2,r2,r12,lsl#24 250 eor r0,r0,r6,ror#19 @ Sigma1(e) 251#endif 252 ldr r12,[r14],#4 @ *K256++ 253 add r9,r9,r2 @ h+=X[i] 254 str r2,[sp,#2*4] 255 eor r2,r7,r8 256 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 257 and r2,r2,r6 258 add r9,r9,r12 @ h+=K256[i] 259 eor r2,r2,r8 @ Ch(e,f,g) 260 eor r0,r10,r10,ror#11 261 add r9,r9,r2 @ h+=Ch(e,f,g) 262#if 2==31 263 and r12,r12,#0xff 264 cmp r12,#0xf2 @ done? 265#endif 266#if 2<15 267# if __ARM_ARCH__>=7 268 ldr r2,[r1],#4 @ prefetch 269# else 270 ldrb r2,[r1,#3] 271# endif 272 eor r12,r10,r11 @ a^b, b^c in next round 273#else 274 ldr r2,[sp,#4*4] @ from future BODY_16_xx 275 eor r12,r10,r11 @ a^b, b^c in next round 276 ldr r1,[sp,#1*4] @ from future BODY_16_xx 277#endif 278 eor r0,r0,r10,ror#20 @ Sigma0(a) 279 and r3,r3,r12 @ (b^c)&=(a^b) 280 add r5,r5,r9 @ d+=h 281 eor r3,r3,r11 @ Maj(a,b,c) 282 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 283 @ add r9,r9,r3 @ h+=Maj(a,b,c) 284#if __ARM_ARCH__>=7 285 @ ldr r2,[r1],#4 @ 3 286# if 3==15 287 str r1,[sp,#17*4] @ make room for r1 288# endif 289 eor r0,r5,r5,ror#5 290 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 291 eor r0,r0,r5,ror#19 @ Sigma1(e) 292 rev r2,r2 293#else 294 @ ldrb r2,[r1,#3] @ 3 295 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 296 ldrb r3,[r1,#2] 297 ldrb r0,[r1,#1] 298 orr r2,r2,r3,lsl#8 299 ldrb r3,[r1],#4 300 orr r2,r2,r0,lsl#16 301# if 3==15 302 str r1,[sp,#17*4] @ make room for r1 303# endif 304 eor r0,r5,r5,ror#5 305 orr r2,r2,r3,lsl#24 306 eor r0,r0,r5,ror#19 @ Sigma1(e) 307#endif 308 ldr r3,[r14],#4 @ *K256++ 309 add r8,r8,r2 @ h+=X[i] 310 str r2,[sp,#3*4] 311 eor r2,r6,r7 312 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 313 and r2,r2,r5 314 add r8,r8,r3 @ h+=K256[i] 315 eor r2,r2,r7 @ Ch(e,f,g) 316 eor r0,r9,r9,ror#11 317 add r8,r8,r2 @ h+=Ch(e,f,g) 318#if 3==31 319 and r3,r3,#0xff 320 cmp r3,#0xf2 @ done? 321#endif 322#if 3<15 323# if __ARM_ARCH__>=7 324 ldr r2,[r1],#4 @ prefetch 325# else 326 ldrb r2,[r1,#3] 327# endif 328 eor r3,r9,r10 @ a^b, b^c in next round 329#else 330 ldr r2,[sp,#5*4] @ from future BODY_16_xx 331 eor r3,r9,r10 @ a^b, b^c in next round 332 ldr r1,[sp,#2*4] @ from future BODY_16_xx 333#endif 334 eor r0,r0,r9,ror#20 @ Sigma0(a) 335 and r12,r12,r3 @ (b^c)&=(a^b) 336 add r4,r4,r8 @ d+=h 337 eor r12,r12,r10 @ Maj(a,b,c) 338 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 339 @ add r8,r8,r12 @ h+=Maj(a,b,c) 340#if __ARM_ARCH__>=7 341 @ ldr r2,[r1],#4 @ 4 342# if 4==15 343 str r1,[sp,#17*4] @ make room for r1 344# endif 345 eor r0,r4,r4,ror#5 346 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 347 eor r0,r0,r4,ror#19 @ Sigma1(e) 348 rev r2,r2 349#else 350 @ ldrb r2,[r1,#3] @ 4 351 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 352 ldrb r12,[r1,#2] 353 ldrb r0,[r1,#1] 354 orr r2,r2,r12,lsl#8 355 ldrb r12,[r1],#4 356 orr r2,r2,r0,lsl#16 357# if 4==15 358 str r1,[sp,#17*4] @ make room for r1 359# endif 360 eor r0,r4,r4,ror#5 361 orr r2,r2,r12,lsl#24 362 eor r0,r0,r4,ror#19 @ Sigma1(e) 363#endif 364 ldr r12,[r14],#4 @ *K256++ 365 add r7,r7,r2 @ h+=X[i] 366 str r2,[sp,#4*4] 367 eor r2,r5,r6 368 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 369 and r2,r2,r4 370 add r7,r7,r12 @ h+=K256[i] 371 eor r2,r2,r6 @ Ch(e,f,g) 372 eor r0,r8,r8,ror#11 373 add r7,r7,r2 @ h+=Ch(e,f,g) 374#if 4==31 375 and r12,r12,#0xff 376 cmp r12,#0xf2 @ done? 377#endif 378#if 4<15 379# if __ARM_ARCH__>=7 380 ldr r2,[r1],#4 @ prefetch 381# else 382 ldrb r2,[r1,#3] 383# endif 384 eor r12,r8,r9 @ a^b, b^c in next round 385#else 386 ldr r2,[sp,#6*4] @ from future BODY_16_xx 387 eor r12,r8,r9 @ a^b, b^c in next round 388 ldr r1,[sp,#3*4] @ from future BODY_16_xx 389#endif 390 eor r0,r0,r8,ror#20 @ Sigma0(a) 391 and r3,r3,r12 @ (b^c)&=(a^b) 392 add r11,r11,r7 @ d+=h 393 eor r3,r3,r9 @ Maj(a,b,c) 394 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 395 @ add r7,r7,r3 @ h+=Maj(a,b,c) 396#if __ARM_ARCH__>=7 397 @ ldr r2,[r1],#4 @ 5 398# if 5==15 399 str r1,[sp,#17*4] @ make room for r1 400# endif 401 eor r0,r11,r11,ror#5 402 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 403 eor r0,r0,r11,ror#19 @ Sigma1(e) 404 rev r2,r2 405#else 406 @ ldrb r2,[r1,#3] @ 5 407 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 408 ldrb r3,[r1,#2] 409 ldrb r0,[r1,#1] 410 orr r2,r2,r3,lsl#8 411 ldrb r3,[r1],#4 412 orr r2,r2,r0,lsl#16 413# if 5==15 414 str r1,[sp,#17*4] @ make room for r1 415# endif 416 eor r0,r11,r11,ror#5 417 orr r2,r2,r3,lsl#24 418 eor r0,r0,r11,ror#19 @ Sigma1(e) 419#endif 420 ldr r3,[r14],#4 @ *K256++ 421 add r6,r6,r2 @ h+=X[i] 422 str r2,[sp,#5*4] 423 eor r2,r4,r5 424 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 425 and r2,r2,r11 426 add r6,r6,r3 @ h+=K256[i] 427 eor r2,r2,r5 @ Ch(e,f,g) 428 eor r0,r7,r7,ror#11 429 add r6,r6,r2 @ h+=Ch(e,f,g) 430#if 5==31 431 and r3,r3,#0xff 432 cmp r3,#0xf2 @ done? 433#endif 434#if 5<15 435# if __ARM_ARCH__>=7 436 ldr r2,[r1],#4 @ prefetch 437# else 438 ldrb r2,[r1,#3] 439# endif 440 eor r3,r7,r8 @ a^b, b^c in next round 441#else 442 ldr r2,[sp,#7*4] @ from future BODY_16_xx 443 eor r3,r7,r8 @ a^b, b^c in next round 444 ldr r1,[sp,#4*4] @ from future BODY_16_xx 445#endif 446 eor r0,r0,r7,ror#20 @ Sigma0(a) 447 and r12,r12,r3 @ (b^c)&=(a^b) 448 add r10,r10,r6 @ d+=h 449 eor r12,r12,r8 @ Maj(a,b,c) 450 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 451 @ add r6,r6,r12 @ h+=Maj(a,b,c) 452#if __ARM_ARCH__>=7 453 @ ldr r2,[r1],#4 @ 6 454# if 6==15 455 str r1,[sp,#17*4] @ make room for r1 456# endif 457 eor r0,r10,r10,ror#5 458 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 459 eor r0,r0,r10,ror#19 @ Sigma1(e) 460 rev r2,r2 461#else 462 @ ldrb r2,[r1,#3] @ 6 463 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 464 ldrb r12,[r1,#2] 465 ldrb r0,[r1,#1] 466 orr r2,r2,r12,lsl#8 467 ldrb r12,[r1],#4 468 orr r2,r2,r0,lsl#16 469# if 6==15 470 str r1,[sp,#17*4] @ make room for r1 471# endif 472 eor r0,r10,r10,ror#5 473 orr r2,r2,r12,lsl#24 474 eor r0,r0,r10,ror#19 @ Sigma1(e) 475#endif 476 ldr r12,[r14],#4 @ *K256++ 477 add r5,r5,r2 @ h+=X[i] 478 str r2,[sp,#6*4] 479 eor r2,r11,r4 480 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 481 and r2,r2,r10 482 add r5,r5,r12 @ h+=K256[i] 483 eor r2,r2,r4 @ Ch(e,f,g) 484 eor r0,r6,r6,ror#11 485 add r5,r5,r2 @ h+=Ch(e,f,g) 486#if 6==31 487 and r12,r12,#0xff 488 cmp r12,#0xf2 @ done? 489#endif 490#if 6<15 491# if __ARM_ARCH__>=7 492 ldr r2,[r1],#4 @ prefetch 493# else 494 ldrb r2,[r1,#3] 495# endif 496 eor r12,r6,r7 @ a^b, b^c in next round 497#else 498 ldr r2,[sp,#8*4] @ from future BODY_16_xx 499 eor r12,r6,r7 @ a^b, b^c in next round 500 ldr r1,[sp,#5*4] @ from future BODY_16_xx 501#endif 502 eor r0,r0,r6,ror#20 @ Sigma0(a) 503 and r3,r3,r12 @ (b^c)&=(a^b) 504 add r9,r9,r5 @ d+=h 505 eor r3,r3,r7 @ Maj(a,b,c) 506 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 507 @ add r5,r5,r3 @ h+=Maj(a,b,c) 508#if __ARM_ARCH__>=7 509 @ ldr r2,[r1],#4 @ 7 510# if 7==15 511 str r1,[sp,#17*4] @ make room for r1 512# endif 513 eor r0,r9,r9,ror#5 514 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 515 eor r0,r0,r9,ror#19 @ Sigma1(e) 516 rev r2,r2 517#else 518 @ ldrb r2,[r1,#3] @ 7 519 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 520 ldrb r3,[r1,#2] 521 ldrb r0,[r1,#1] 522 orr r2,r2,r3,lsl#8 523 ldrb r3,[r1],#4 524 orr r2,r2,r0,lsl#16 525# if 7==15 526 str r1,[sp,#17*4] @ make room for r1 527# endif 528 eor r0,r9,r9,ror#5 529 orr r2,r2,r3,lsl#24 530 eor r0,r0,r9,ror#19 @ Sigma1(e) 531#endif 532 ldr r3,[r14],#4 @ *K256++ 533 add r4,r4,r2 @ h+=X[i] 534 str r2,[sp,#7*4] 535 eor r2,r10,r11 536 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 537 and r2,r2,r9 538 add r4,r4,r3 @ h+=K256[i] 539 eor r2,r2,r11 @ Ch(e,f,g) 540 eor r0,r5,r5,ror#11 541 add r4,r4,r2 @ h+=Ch(e,f,g) 542#if 7==31 543 and r3,r3,#0xff 544 cmp r3,#0xf2 @ done? 545#endif 546#if 7<15 547# if __ARM_ARCH__>=7 548 ldr r2,[r1],#4 @ prefetch 549# else 550 ldrb r2,[r1,#3] 551# endif 552 eor r3,r5,r6 @ a^b, b^c in next round 553#else 554 ldr r2,[sp,#9*4] @ from future BODY_16_xx 555 eor r3,r5,r6 @ a^b, b^c in next round 556 ldr r1,[sp,#6*4] @ from future BODY_16_xx 557#endif 558 eor r0,r0,r5,ror#20 @ Sigma0(a) 559 and r12,r12,r3 @ (b^c)&=(a^b) 560 add r8,r8,r4 @ d+=h 561 eor r12,r12,r6 @ Maj(a,b,c) 562 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 563 @ add r4,r4,r12 @ h+=Maj(a,b,c) 564#if __ARM_ARCH__>=7 565 @ ldr r2,[r1],#4 @ 8 566# if 8==15 567 str r1,[sp,#17*4] @ make room for r1 568# endif 569 eor r0,r8,r8,ror#5 570 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 571 eor r0,r0,r8,ror#19 @ Sigma1(e) 572 rev r2,r2 573#else 574 @ ldrb r2,[r1,#3] @ 8 575 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 576 ldrb r12,[r1,#2] 577 ldrb r0,[r1,#1] 578 orr r2,r2,r12,lsl#8 579 ldrb r12,[r1],#4 580 orr r2,r2,r0,lsl#16 581# if 8==15 582 str r1,[sp,#17*4] @ make room for r1 583# endif 584 eor r0,r8,r8,ror#5 585 orr r2,r2,r12,lsl#24 586 eor r0,r0,r8,ror#19 @ Sigma1(e) 587#endif 588 ldr r12,[r14],#4 @ *K256++ 589 add r11,r11,r2 @ h+=X[i] 590 str r2,[sp,#8*4] 591 eor r2,r9,r10 592 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 593 and r2,r2,r8 594 add r11,r11,r12 @ h+=K256[i] 595 eor r2,r2,r10 @ Ch(e,f,g) 596 eor r0,r4,r4,ror#11 597 add r11,r11,r2 @ h+=Ch(e,f,g) 598#if 8==31 599 and r12,r12,#0xff 600 cmp r12,#0xf2 @ done? 601#endif 602#if 8<15 603# if __ARM_ARCH__>=7 604 ldr r2,[r1],#4 @ prefetch 605# else 606 ldrb r2,[r1,#3] 607# endif 608 eor r12,r4,r5 @ a^b, b^c in next round 609#else 610 ldr r2,[sp,#10*4] @ from future BODY_16_xx 611 eor r12,r4,r5 @ a^b, b^c in next round 612 ldr r1,[sp,#7*4] @ from future BODY_16_xx 613#endif 614 eor r0,r0,r4,ror#20 @ Sigma0(a) 615 and r3,r3,r12 @ (b^c)&=(a^b) 616 add r7,r7,r11 @ d+=h 617 eor r3,r3,r5 @ Maj(a,b,c) 618 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 619 @ add r11,r11,r3 @ h+=Maj(a,b,c) 620#if __ARM_ARCH__>=7 621 @ ldr r2,[r1],#4 @ 9 622# if 9==15 623 str r1,[sp,#17*4] @ make room for r1 624# endif 625 eor r0,r7,r7,ror#5 626 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 627 eor r0,r0,r7,ror#19 @ Sigma1(e) 628 rev r2,r2 629#else 630 @ ldrb r2,[r1,#3] @ 9 631 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 632 ldrb r3,[r1,#2] 633 ldrb r0,[r1,#1] 634 orr r2,r2,r3,lsl#8 635 ldrb r3,[r1],#4 636 orr r2,r2,r0,lsl#16 637# if 9==15 638 str r1,[sp,#17*4] @ make room for r1 639# endif 640 eor r0,r7,r7,ror#5 641 orr r2,r2,r3,lsl#24 642 eor r0,r0,r7,ror#19 @ Sigma1(e) 643#endif 644 ldr r3,[r14],#4 @ *K256++ 645 add r10,r10,r2 @ h+=X[i] 646 str r2,[sp,#9*4] 647 eor r2,r8,r9 648 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 649 and r2,r2,r7 650 add r10,r10,r3 @ h+=K256[i] 651 eor r2,r2,r9 @ Ch(e,f,g) 652 eor r0,r11,r11,ror#11 653 add r10,r10,r2 @ h+=Ch(e,f,g) 654#if 9==31 655 and r3,r3,#0xff 656 cmp r3,#0xf2 @ done? 657#endif 658#if 9<15 659# if __ARM_ARCH__>=7 660 ldr r2,[r1],#4 @ prefetch 661# else 662 ldrb r2,[r1,#3] 663# endif 664 eor r3,r11,r4 @ a^b, b^c in next round 665#else 666 ldr r2,[sp,#11*4] @ from future BODY_16_xx 667 eor r3,r11,r4 @ a^b, b^c in next round 668 ldr r1,[sp,#8*4] @ from future BODY_16_xx 669#endif 670 eor r0,r0,r11,ror#20 @ Sigma0(a) 671 and r12,r12,r3 @ (b^c)&=(a^b) 672 add r6,r6,r10 @ d+=h 673 eor r12,r12,r4 @ Maj(a,b,c) 674 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 675 @ add r10,r10,r12 @ h+=Maj(a,b,c) 676#if __ARM_ARCH__>=7 677 @ ldr r2,[r1],#4 @ 10 678# if 10==15 679 str r1,[sp,#17*4] @ make room for r1 680# endif 681 eor r0,r6,r6,ror#5 682 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 683 eor r0,r0,r6,ror#19 @ Sigma1(e) 684 rev r2,r2 685#else 686 @ ldrb r2,[r1,#3] @ 10 687 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 688 ldrb r12,[r1,#2] 689 ldrb r0,[r1,#1] 690 orr r2,r2,r12,lsl#8 691 ldrb r12,[r1],#4 692 orr r2,r2,r0,lsl#16 693# if 10==15 694 str r1,[sp,#17*4] @ make room for r1 695# endif 696 eor r0,r6,r6,ror#5 697 orr r2,r2,r12,lsl#24 698 eor r0,r0,r6,ror#19 @ Sigma1(e) 699#endif 700 ldr r12,[r14],#4 @ *K256++ 701 add r9,r9,r2 @ h+=X[i] 702 str r2,[sp,#10*4] 703 eor r2,r7,r8 704 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 705 and r2,r2,r6 706 add r9,r9,r12 @ h+=K256[i] 707 eor r2,r2,r8 @ Ch(e,f,g) 708 eor r0,r10,r10,ror#11 709 add r9,r9,r2 @ h+=Ch(e,f,g) 710#if 10==31 711 and r12,r12,#0xff 712 cmp r12,#0xf2 @ done? 713#endif 714#if 10<15 715# if __ARM_ARCH__>=7 716 ldr r2,[r1],#4 @ prefetch 717# else 718 ldrb r2,[r1,#3] 719# endif 720 eor r12,r10,r11 @ a^b, b^c in next round 721#else 722 ldr r2,[sp,#12*4] @ from future BODY_16_xx 723 eor r12,r10,r11 @ a^b, b^c in next round 724 ldr r1,[sp,#9*4] @ from future BODY_16_xx 725#endif 726 eor r0,r0,r10,ror#20 @ Sigma0(a) 727 and r3,r3,r12 @ (b^c)&=(a^b) 728 add r5,r5,r9 @ d+=h 729 eor r3,r3,r11 @ Maj(a,b,c) 730 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 731 @ add r9,r9,r3 @ h+=Maj(a,b,c) 732#if __ARM_ARCH__>=7 733 @ ldr r2,[r1],#4 @ 11 734# if 11==15 735 str r1,[sp,#17*4] @ make room for r1 736# endif 737 eor r0,r5,r5,ror#5 738 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 739 eor r0,r0,r5,ror#19 @ Sigma1(e) 740 rev r2,r2 741#else 742 @ ldrb r2,[r1,#3] @ 11 743 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 744 ldrb r3,[r1,#2] 745 ldrb r0,[r1,#1] 746 orr r2,r2,r3,lsl#8 747 ldrb r3,[r1],#4 748 orr r2,r2,r0,lsl#16 749# if 11==15 750 str r1,[sp,#17*4] @ make room for r1 751# endif 752 eor r0,r5,r5,ror#5 753 orr r2,r2,r3,lsl#24 754 eor r0,r0,r5,ror#19 @ Sigma1(e) 755#endif 756 ldr r3,[r14],#4 @ *K256++ 757 add r8,r8,r2 @ h+=X[i] 758 str r2,[sp,#11*4] 759 eor r2,r6,r7 760 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 761 and r2,r2,r5 762 add r8,r8,r3 @ h+=K256[i] 763 eor r2,r2,r7 @ Ch(e,f,g) 764 eor r0,r9,r9,ror#11 765 add r8,r8,r2 @ h+=Ch(e,f,g) 766#if 11==31 767 and r3,r3,#0xff 768 cmp r3,#0xf2 @ done? 769#endif 770#if 11<15 771# if __ARM_ARCH__>=7 772 ldr r2,[r1],#4 @ prefetch 773# else 774 ldrb r2,[r1,#3] 775# endif 776 eor r3,r9,r10 @ a^b, b^c in next round 777#else 778 ldr r2,[sp,#13*4] @ from future BODY_16_xx 779 eor r3,r9,r10 @ a^b, b^c in next round 780 ldr r1,[sp,#10*4] @ from future BODY_16_xx 781#endif 782 eor r0,r0,r9,ror#20 @ Sigma0(a) 783 and r12,r12,r3 @ (b^c)&=(a^b) 784 add r4,r4,r8 @ d+=h 785 eor r12,r12,r10 @ Maj(a,b,c) 786 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 787 @ add r8,r8,r12 @ h+=Maj(a,b,c) 788#if __ARM_ARCH__>=7 789 @ ldr r2,[r1],#4 @ 12 790# if 12==15 791 str r1,[sp,#17*4] @ make room for r1 792# endif 793 eor r0,r4,r4,ror#5 794 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 795 eor r0,r0,r4,ror#19 @ Sigma1(e) 796 rev r2,r2 797#else 798 @ ldrb r2,[r1,#3] @ 12 799 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 800 ldrb r12,[r1,#2] 801 ldrb r0,[r1,#1] 802 orr r2,r2,r12,lsl#8 803 ldrb r12,[r1],#4 804 orr r2,r2,r0,lsl#16 805# if 12==15 806 str r1,[sp,#17*4] @ make room for r1 807# endif 808 eor r0,r4,r4,ror#5 809 orr r2,r2,r12,lsl#24 810 eor r0,r0,r4,ror#19 @ Sigma1(e) 811#endif 812 ldr r12,[r14],#4 @ *K256++ 813 add r7,r7,r2 @ h+=X[i] 814 str r2,[sp,#12*4] 815 eor r2,r5,r6 816 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 817 and r2,r2,r4 818 add r7,r7,r12 @ h+=K256[i] 819 eor r2,r2,r6 @ Ch(e,f,g) 820 eor r0,r8,r8,ror#11 821 add r7,r7,r2 @ h+=Ch(e,f,g) 822#if 12==31 823 and r12,r12,#0xff 824 cmp r12,#0xf2 @ done? 825#endif 826#if 12<15 827# if __ARM_ARCH__>=7 828 ldr r2,[r1],#4 @ prefetch 829# else 830 ldrb r2,[r1,#3] 831# endif 832 eor r12,r8,r9 @ a^b, b^c in next round 833#else 834 ldr r2,[sp,#14*4] @ from future BODY_16_xx 835 eor r12,r8,r9 @ a^b, b^c in next round 836 ldr r1,[sp,#11*4] @ from future BODY_16_xx 837#endif 838 eor r0,r0,r8,ror#20 @ Sigma0(a) 839 and r3,r3,r12 @ (b^c)&=(a^b) 840 add r11,r11,r7 @ d+=h 841 eor r3,r3,r9 @ Maj(a,b,c) 842 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 843 @ add r7,r7,r3 @ h+=Maj(a,b,c) 844#if __ARM_ARCH__>=7 845 @ ldr r2,[r1],#4 @ 13 846# if 13==15 847 str r1,[sp,#17*4] @ make room for r1 848# endif 849 eor r0,r11,r11,ror#5 850 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 851 eor r0,r0,r11,ror#19 @ Sigma1(e) 852 rev r2,r2 853#else 854 @ ldrb r2,[r1,#3] @ 13 855 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 856 ldrb r3,[r1,#2] 857 ldrb r0,[r1,#1] 858 orr r2,r2,r3,lsl#8 859 ldrb r3,[r1],#4 860 orr r2,r2,r0,lsl#16 861# if 13==15 862 str r1,[sp,#17*4] @ make room for r1 863# endif 864 eor r0,r11,r11,ror#5 865 orr r2,r2,r3,lsl#24 866 eor r0,r0,r11,ror#19 @ Sigma1(e) 867#endif 868 ldr r3,[r14],#4 @ *K256++ 869 add r6,r6,r2 @ h+=X[i] 870 str r2,[sp,#13*4] 871 eor r2,r4,r5 872 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 873 and r2,r2,r11 874 add r6,r6,r3 @ h+=K256[i] 875 eor r2,r2,r5 @ Ch(e,f,g) 876 eor r0,r7,r7,ror#11 877 add r6,r6,r2 @ h+=Ch(e,f,g) 878#if 13==31 879 and r3,r3,#0xff 880 cmp r3,#0xf2 @ done? 881#endif 882#if 13<15 883# if __ARM_ARCH__>=7 884 ldr r2,[r1],#4 @ prefetch 885# else 886 ldrb r2,[r1,#3] 887# endif 888 eor r3,r7,r8 @ a^b, b^c in next round 889#else 890 ldr r2,[sp,#15*4] @ from future BODY_16_xx 891 eor r3,r7,r8 @ a^b, b^c in next round 892 ldr r1,[sp,#12*4] @ from future BODY_16_xx 893#endif 894 eor r0,r0,r7,ror#20 @ Sigma0(a) 895 and r12,r12,r3 @ (b^c)&=(a^b) 896 add r10,r10,r6 @ d+=h 897 eor r12,r12,r8 @ Maj(a,b,c) 898 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 899 @ add r6,r6,r12 @ h+=Maj(a,b,c) 900#if __ARM_ARCH__>=7 901 @ ldr r2,[r1],#4 @ 14 902# if 14==15 903 str r1,[sp,#17*4] @ make room for r1 904# endif 905 eor r0,r10,r10,ror#5 906 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 907 eor r0,r0,r10,ror#19 @ Sigma1(e) 908 rev r2,r2 909#else 910 @ ldrb r2,[r1,#3] @ 14 911 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 912 ldrb r12,[r1,#2] 913 ldrb r0,[r1,#1] 914 orr r2,r2,r12,lsl#8 915 ldrb r12,[r1],#4 916 orr r2,r2,r0,lsl#16 917# if 14==15 918 str r1,[sp,#17*4] @ make room for r1 919# endif 920 eor r0,r10,r10,ror#5 921 orr r2,r2,r12,lsl#24 922 eor r0,r0,r10,ror#19 @ Sigma1(e) 923#endif 924 ldr r12,[r14],#4 @ *K256++ 925 add r5,r5,r2 @ h+=X[i] 926 str r2,[sp,#14*4] 927 eor r2,r11,r4 928 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 929 and r2,r2,r10 930 add r5,r5,r12 @ h+=K256[i] 931 eor r2,r2,r4 @ Ch(e,f,g) 932 eor r0,r6,r6,ror#11 933 add r5,r5,r2 @ h+=Ch(e,f,g) 934#if 14==31 935 and r12,r12,#0xff 936 cmp r12,#0xf2 @ done? 937#endif 938#if 14<15 939# if __ARM_ARCH__>=7 940 ldr r2,[r1],#4 @ prefetch 941# else 942 ldrb r2,[r1,#3] 943# endif 944 eor r12,r6,r7 @ a^b, b^c in next round 945#else 946 ldr r2,[sp,#0*4] @ from future BODY_16_xx 947 eor r12,r6,r7 @ a^b, b^c in next round 948 ldr r1,[sp,#13*4] @ from future BODY_16_xx 949#endif 950 eor r0,r0,r6,ror#20 @ Sigma0(a) 951 and r3,r3,r12 @ (b^c)&=(a^b) 952 add r9,r9,r5 @ d+=h 953 eor r3,r3,r7 @ Maj(a,b,c) 954 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 955 @ add r5,r5,r3 @ h+=Maj(a,b,c) 956#if __ARM_ARCH__>=7 957 @ ldr r2,[r1],#4 @ 15 958# if 15==15 959 str r1,[sp,#17*4] @ make room for r1 960# endif 961 eor r0,r9,r9,ror#5 962 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 963 eor r0,r0,r9,ror#19 @ Sigma1(e) 964 rev r2,r2 965#else 966 @ ldrb r2,[r1,#3] @ 15 967 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 968 ldrb r3,[r1,#2] 969 ldrb r0,[r1,#1] 970 orr r2,r2,r3,lsl#8 971 ldrb r3,[r1],#4 972 orr r2,r2,r0,lsl#16 973# if 15==15 974 str r1,[sp,#17*4] @ make room for r1 975# endif 976 eor r0,r9,r9,ror#5 977 orr r2,r2,r3,lsl#24 978 eor r0,r0,r9,ror#19 @ Sigma1(e) 979#endif 980 ldr r3,[r14],#4 @ *K256++ 981 add r4,r4,r2 @ h+=X[i] 982 str r2,[sp,#15*4] 983 eor r2,r10,r11 984 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 985 and r2,r2,r9 986 add r4,r4,r3 @ h+=K256[i] 987 eor r2,r2,r11 @ Ch(e,f,g) 988 eor r0,r5,r5,ror#11 989 add r4,r4,r2 @ h+=Ch(e,f,g) 990#if 15==31 991 and r3,r3,#0xff 992 cmp r3,#0xf2 @ done? 993#endif 994#if 15<15 995# if __ARM_ARCH__>=7 996 ldr r2,[r1],#4 @ prefetch 997# else 998 ldrb r2,[r1,#3] 999# endif 1000 eor r3,r5,r6 @ a^b, b^c in next round 1001#else 1002 ldr r2,[sp,#1*4] @ from future BODY_16_xx 1003 eor r3,r5,r6 @ a^b, b^c in next round 1004 ldr r1,[sp,#14*4] @ from future BODY_16_xx 1005#endif 1006 eor r0,r0,r5,ror#20 @ Sigma0(a) 1007 and r12,r12,r3 @ (b^c)&=(a^b) 1008 add r8,r8,r4 @ d+=h 1009 eor r12,r12,r6 @ Maj(a,b,c) 1010 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1011 @ add r4,r4,r12 @ h+=Maj(a,b,c) 1012.Lrounds_16_xx: 1013 @ ldr r2,[sp,#1*4] @ 16 1014 @ ldr r1,[sp,#14*4] 1015 mov r0,r2,ror#7 1016 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1017 mov r12,r1,ror#17 1018 eor r0,r0,r2,ror#18 1019 eor r12,r12,r1,ror#19 1020 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1021 ldr r2,[sp,#0*4] 1022 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1023 ldr r1,[sp,#9*4] 1024 1025 add r12,r12,r0 1026 eor r0,r8,r8,ror#5 @ from BODY_00_15 1027 add r2,r2,r12 1028 eor r0,r0,r8,ror#19 @ Sigma1(e) 1029 add r2,r2,r1 @ X[i] 1030 ldr r12,[r14],#4 @ *K256++ 1031 add r11,r11,r2 @ h+=X[i] 1032 str r2,[sp,#0*4] 1033 eor r2,r9,r10 1034 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 1035 and r2,r2,r8 1036 add r11,r11,r12 @ h+=K256[i] 1037 eor r2,r2,r10 @ Ch(e,f,g) 1038 eor r0,r4,r4,ror#11 1039 add r11,r11,r2 @ h+=Ch(e,f,g) 1040#if 16==31 1041 and r12,r12,#0xff 1042 cmp r12,#0xf2 @ done? 1043#endif 1044#if 16<15 1045# if __ARM_ARCH__>=7 1046 ldr r2,[r1],#4 @ prefetch 1047# else 1048 ldrb r2,[r1,#3] 1049# endif 1050 eor r12,r4,r5 @ a^b, b^c in next round 1051#else 1052 ldr r2,[sp,#2*4] @ from future BODY_16_xx 1053 eor r12,r4,r5 @ a^b, b^c in next round 1054 ldr r1,[sp,#15*4] @ from future BODY_16_xx 1055#endif 1056 eor r0,r0,r4,ror#20 @ Sigma0(a) 1057 and r3,r3,r12 @ (b^c)&=(a^b) 1058 add r7,r7,r11 @ d+=h 1059 eor r3,r3,r5 @ Maj(a,b,c) 1060 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1061 @ add r11,r11,r3 @ h+=Maj(a,b,c) 1062 @ ldr r2,[sp,#2*4] @ 17 1063 @ ldr r1,[sp,#15*4] 1064 mov r0,r2,ror#7 1065 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1066 mov r3,r1,ror#17 1067 eor r0,r0,r2,ror#18 1068 eor r3,r3,r1,ror#19 1069 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1070 ldr r2,[sp,#1*4] 1071 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1072 ldr r1,[sp,#10*4] 1073 1074 add r3,r3,r0 1075 eor r0,r7,r7,ror#5 @ from BODY_00_15 1076 add r2,r2,r3 1077 eor r0,r0,r7,ror#19 @ Sigma1(e) 1078 add r2,r2,r1 @ X[i] 1079 ldr r3,[r14],#4 @ *K256++ 1080 add r10,r10,r2 @ h+=X[i] 1081 str r2,[sp,#1*4] 1082 eor r2,r8,r9 1083 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1084 and r2,r2,r7 1085 add r10,r10,r3 @ h+=K256[i] 1086 eor r2,r2,r9 @ Ch(e,f,g) 1087 eor r0,r11,r11,ror#11 1088 add r10,r10,r2 @ h+=Ch(e,f,g) 1089#if 17==31 1090 and r3,r3,#0xff 1091 cmp r3,#0xf2 @ done? 1092#endif 1093#if 17<15 1094# if __ARM_ARCH__>=7 1095 ldr r2,[r1],#4 @ prefetch 1096# else 1097 ldrb r2,[r1,#3] 1098# endif 1099 eor r3,r11,r4 @ a^b, b^c in next round 1100#else 1101 ldr r2,[sp,#3*4] @ from future BODY_16_xx 1102 eor r3,r11,r4 @ a^b, b^c in next round 1103 ldr r1,[sp,#0*4] @ from future BODY_16_xx 1104#endif 1105 eor r0,r0,r11,ror#20 @ Sigma0(a) 1106 and r12,r12,r3 @ (b^c)&=(a^b) 1107 add r6,r6,r10 @ d+=h 1108 eor r12,r12,r4 @ Maj(a,b,c) 1109 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1110 @ add r10,r10,r12 @ h+=Maj(a,b,c) 1111 @ ldr r2,[sp,#3*4] @ 18 1112 @ ldr r1,[sp,#0*4] 1113 mov r0,r2,ror#7 1114 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1115 mov r12,r1,ror#17 1116 eor r0,r0,r2,ror#18 1117 eor r12,r12,r1,ror#19 1118 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1119 ldr r2,[sp,#2*4] 1120 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1121 ldr r1,[sp,#11*4] 1122 1123 add r12,r12,r0 1124 eor r0,r6,r6,ror#5 @ from BODY_00_15 1125 add r2,r2,r12 1126 eor r0,r0,r6,ror#19 @ Sigma1(e) 1127 add r2,r2,r1 @ X[i] 1128 ldr r12,[r14],#4 @ *K256++ 1129 add r9,r9,r2 @ h+=X[i] 1130 str r2,[sp,#2*4] 1131 eor r2,r7,r8 1132 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1133 and r2,r2,r6 1134 add r9,r9,r12 @ h+=K256[i] 1135 eor r2,r2,r8 @ Ch(e,f,g) 1136 eor r0,r10,r10,ror#11 1137 add r9,r9,r2 @ h+=Ch(e,f,g) 1138#if 18==31 1139 and r12,r12,#0xff 1140 cmp r12,#0xf2 @ done? 1141#endif 1142#if 18<15 1143# if __ARM_ARCH__>=7 1144 ldr r2,[r1],#4 @ prefetch 1145# else 1146 ldrb r2,[r1,#3] 1147# endif 1148 eor r12,r10,r11 @ a^b, b^c in next round 1149#else 1150 ldr r2,[sp,#4*4] @ from future BODY_16_xx 1151 eor r12,r10,r11 @ a^b, b^c in next round 1152 ldr r1,[sp,#1*4] @ from future BODY_16_xx 1153#endif 1154 eor r0,r0,r10,ror#20 @ Sigma0(a) 1155 and r3,r3,r12 @ (b^c)&=(a^b) 1156 add r5,r5,r9 @ d+=h 1157 eor r3,r3,r11 @ Maj(a,b,c) 1158 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1159 @ add r9,r9,r3 @ h+=Maj(a,b,c) 1160 @ ldr r2,[sp,#4*4] @ 19 1161 @ ldr r1,[sp,#1*4] 1162 mov r0,r2,ror#7 1163 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1164 mov r3,r1,ror#17 1165 eor r0,r0,r2,ror#18 1166 eor r3,r3,r1,ror#19 1167 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1168 ldr r2,[sp,#3*4] 1169 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1170 ldr r1,[sp,#12*4] 1171 1172 add r3,r3,r0 1173 eor r0,r5,r5,ror#5 @ from BODY_00_15 1174 add r2,r2,r3 1175 eor r0,r0,r5,ror#19 @ Sigma1(e) 1176 add r2,r2,r1 @ X[i] 1177 ldr r3,[r14],#4 @ *K256++ 1178 add r8,r8,r2 @ h+=X[i] 1179 str r2,[sp,#3*4] 1180 eor r2,r6,r7 1181 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1182 and r2,r2,r5 1183 add r8,r8,r3 @ h+=K256[i] 1184 eor r2,r2,r7 @ Ch(e,f,g) 1185 eor r0,r9,r9,ror#11 1186 add r8,r8,r2 @ h+=Ch(e,f,g) 1187#if 19==31 1188 and r3,r3,#0xff 1189 cmp r3,#0xf2 @ done? 1190#endif 1191#if 19<15 1192# if __ARM_ARCH__>=7 1193 ldr r2,[r1],#4 @ prefetch 1194# else 1195 ldrb r2,[r1,#3] 1196# endif 1197 eor r3,r9,r10 @ a^b, b^c in next round 1198#else 1199 ldr r2,[sp,#5*4] @ from future BODY_16_xx 1200 eor r3,r9,r10 @ a^b, b^c in next round 1201 ldr r1,[sp,#2*4] @ from future BODY_16_xx 1202#endif 1203 eor r0,r0,r9,ror#20 @ Sigma0(a) 1204 and r12,r12,r3 @ (b^c)&=(a^b) 1205 add r4,r4,r8 @ d+=h 1206 eor r12,r12,r10 @ Maj(a,b,c) 1207 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1208 @ add r8,r8,r12 @ h+=Maj(a,b,c) 1209 @ ldr r2,[sp,#5*4] @ 20 1210 @ ldr r1,[sp,#2*4] 1211 mov r0,r2,ror#7 1212 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1213 mov r12,r1,ror#17 1214 eor r0,r0,r2,ror#18 1215 eor r12,r12,r1,ror#19 1216 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1217 ldr r2,[sp,#4*4] 1218 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1219 ldr r1,[sp,#13*4] 1220 1221 add r12,r12,r0 1222 eor r0,r4,r4,ror#5 @ from BODY_00_15 1223 add r2,r2,r12 1224 eor r0,r0,r4,ror#19 @ Sigma1(e) 1225 add r2,r2,r1 @ X[i] 1226 ldr r12,[r14],#4 @ *K256++ 1227 add r7,r7,r2 @ h+=X[i] 1228 str r2,[sp,#4*4] 1229 eor r2,r5,r6 1230 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1231 and r2,r2,r4 1232 add r7,r7,r12 @ h+=K256[i] 1233 eor r2,r2,r6 @ Ch(e,f,g) 1234 eor r0,r8,r8,ror#11 1235 add r7,r7,r2 @ h+=Ch(e,f,g) 1236#if 20==31 1237 and r12,r12,#0xff 1238 cmp r12,#0xf2 @ done? 1239#endif 1240#if 20<15 1241# if __ARM_ARCH__>=7 1242 ldr r2,[r1],#4 @ prefetch 1243# else 1244 ldrb r2,[r1,#3] 1245# endif 1246 eor r12,r8,r9 @ a^b, b^c in next round 1247#else 1248 ldr r2,[sp,#6*4] @ from future BODY_16_xx 1249 eor r12,r8,r9 @ a^b, b^c in next round 1250 ldr r1,[sp,#3*4] @ from future BODY_16_xx 1251#endif 1252 eor r0,r0,r8,ror#20 @ Sigma0(a) 1253 and r3,r3,r12 @ (b^c)&=(a^b) 1254 add r11,r11,r7 @ d+=h 1255 eor r3,r3,r9 @ Maj(a,b,c) 1256 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1257 @ add r7,r7,r3 @ h+=Maj(a,b,c) 1258 @ ldr r2,[sp,#6*4] @ 21 1259 @ ldr r1,[sp,#3*4] 1260 mov r0,r2,ror#7 1261 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1262 mov r3,r1,ror#17 1263 eor r0,r0,r2,ror#18 1264 eor r3,r3,r1,ror#19 1265 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1266 ldr r2,[sp,#5*4] 1267 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1268 ldr r1,[sp,#14*4] 1269 1270 add r3,r3,r0 1271 eor r0,r11,r11,ror#5 @ from BODY_00_15 1272 add r2,r2,r3 1273 eor r0,r0,r11,ror#19 @ Sigma1(e) 1274 add r2,r2,r1 @ X[i] 1275 ldr r3,[r14],#4 @ *K256++ 1276 add r6,r6,r2 @ h+=X[i] 1277 str r2,[sp,#5*4] 1278 eor r2,r4,r5 1279 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1280 and r2,r2,r11 1281 add r6,r6,r3 @ h+=K256[i] 1282 eor r2,r2,r5 @ Ch(e,f,g) 1283 eor r0,r7,r7,ror#11 1284 add r6,r6,r2 @ h+=Ch(e,f,g) 1285#if 21==31 1286 and r3,r3,#0xff 1287 cmp r3,#0xf2 @ done? 1288#endif 1289#if 21<15 1290# if __ARM_ARCH__>=7 1291 ldr r2,[r1],#4 @ prefetch 1292# else 1293 ldrb r2,[r1,#3] 1294# endif 1295 eor r3,r7,r8 @ a^b, b^c in next round 1296#else 1297 ldr r2,[sp,#7*4] @ from future BODY_16_xx 1298 eor r3,r7,r8 @ a^b, b^c in next round 1299 ldr r1,[sp,#4*4] @ from future BODY_16_xx 1300#endif 1301 eor r0,r0,r7,ror#20 @ Sigma0(a) 1302 and r12,r12,r3 @ (b^c)&=(a^b) 1303 add r10,r10,r6 @ d+=h 1304 eor r12,r12,r8 @ Maj(a,b,c) 1305 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1306 @ add r6,r6,r12 @ h+=Maj(a,b,c) 1307 @ ldr r2,[sp,#7*4] @ 22 1308 @ ldr r1,[sp,#4*4] 1309 mov r0,r2,ror#7 1310 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1311 mov r12,r1,ror#17 1312 eor r0,r0,r2,ror#18 1313 eor r12,r12,r1,ror#19 1314 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1315 ldr r2,[sp,#6*4] 1316 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1317 ldr r1,[sp,#15*4] 1318 1319 add r12,r12,r0 1320 eor r0,r10,r10,ror#5 @ from BODY_00_15 1321 add r2,r2,r12 1322 eor r0,r0,r10,ror#19 @ Sigma1(e) 1323 add r2,r2,r1 @ X[i] 1324 ldr r12,[r14],#4 @ *K256++ 1325 add r5,r5,r2 @ h+=X[i] 1326 str r2,[sp,#6*4] 1327 eor r2,r11,r4 1328 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1329 and r2,r2,r10 1330 add r5,r5,r12 @ h+=K256[i] 1331 eor r2,r2,r4 @ Ch(e,f,g) 1332 eor r0,r6,r6,ror#11 1333 add r5,r5,r2 @ h+=Ch(e,f,g) 1334#if 22==31 1335 and r12,r12,#0xff 1336 cmp r12,#0xf2 @ done? 1337#endif 1338#if 22<15 1339# if __ARM_ARCH__>=7 1340 ldr r2,[r1],#4 @ prefetch 1341# else 1342 ldrb r2,[r1,#3] 1343# endif 1344 eor r12,r6,r7 @ a^b, b^c in next round 1345#else 1346 ldr r2,[sp,#8*4] @ from future BODY_16_xx 1347 eor r12,r6,r7 @ a^b, b^c in next round 1348 ldr r1,[sp,#5*4] @ from future BODY_16_xx 1349#endif 1350 eor r0,r0,r6,ror#20 @ Sigma0(a) 1351 and r3,r3,r12 @ (b^c)&=(a^b) 1352 add r9,r9,r5 @ d+=h 1353 eor r3,r3,r7 @ Maj(a,b,c) 1354 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1355 @ add r5,r5,r3 @ h+=Maj(a,b,c) 1356 @ ldr r2,[sp,#8*4] @ 23 1357 @ ldr r1,[sp,#5*4] 1358 mov r0,r2,ror#7 1359 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1360 mov r3,r1,ror#17 1361 eor r0,r0,r2,ror#18 1362 eor r3,r3,r1,ror#19 1363 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1364 ldr r2,[sp,#7*4] 1365 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1366 ldr r1,[sp,#0*4] 1367 1368 add r3,r3,r0 1369 eor r0,r9,r9,ror#5 @ from BODY_00_15 1370 add r2,r2,r3 1371 eor r0,r0,r9,ror#19 @ Sigma1(e) 1372 add r2,r2,r1 @ X[i] 1373 ldr r3,[r14],#4 @ *K256++ 1374 add r4,r4,r2 @ h+=X[i] 1375 str r2,[sp,#7*4] 1376 eor r2,r10,r11 1377 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1378 and r2,r2,r9 1379 add r4,r4,r3 @ h+=K256[i] 1380 eor r2,r2,r11 @ Ch(e,f,g) 1381 eor r0,r5,r5,ror#11 1382 add r4,r4,r2 @ h+=Ch(e,f,g) 1383#if 23==31 1384 and r3,r3,#0xff 1385 cmp r3,#0xf2 @ done? 1386#endif 1387#if 23<15 1388# if __ARM_ARCH__>=7 1389 ldr r2,[r1],#4 @ prefetch 1390# else 1391 ldrb r2,[r1,#3] 1392# endif 1393 eor r3,r5,r6 @ a^b, b^c in next round 1394#else 1395 ldr r2,[sp,#9*4] @ from future BODY_16_xx 1396 eor r3,r5,r6 @ a^b, b^c in next round 1397 ldr r1,[sp,#6*4] @ from future BODY_16_xx 1398#endif 1399 eor r0,r0,r5,ror#20 @ Sigma0(a) 1400 and r12,r12,r3 @ (b^c)&=(a^b) 1401 add r8,r8,r4 @ d+=h 1402 eor r12,r12,r6 @ Maj(a,b,c) 1403 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1404 @ add r4,r4,r12 @ h+=Maj(a,b,c) 1405 @ ldr r2,[sp,#9*4] @ 24 1406 @ ldr r1,[sp,#6*4] 1407 mov r0,r2,ror#7 1408 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1409 mov r12,r1,ror#17 1410 eor r0,r0,r2,ror#18 1411 eor r12,r12,r1,ror#19 1412 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1413 ldr r2,[sp,#8*4] 1414 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1415 ldr r1,[sp,#1*4] 1416 1417 add r12,r12,r0 1418 eor r0,r8,r8,ror#5 @ from BODY_00_15 1419 add r2,r2,r12 1420 eor r0,r0,r8,ror#19 @ Sigma1(e) 1421 add r2,r2,r1 @ X[i] 1422 ldr r12,[r14],#4 @ *K256++ 1423 add r11,r11,r2 @ h+=X[i] 1424 str r2,[sp,#8*4] 1425 eor r2,r9,r10 1426 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 1427 and r2,r2,r8 1428 add r11,r11,r12 @ h+=K256[i] 1429 eor r2,r2,r10 @ Ch(e,f,g) 1430 eor r0,r4,r4,ror#11 1431 add r11,r11,r2 @ h+=Ch(e,f,g) 1432#if 24==31 1433 and r12,r12,#0xff 1434 cmp r12,#0xf2 @ done? 1435#endif 1436#if 24<15 1437# if __ARM_ARCH__>=7 1438 ldr r2,[r1],#4 @ prefetch 1439# else 1440 ldrb r2,[r1,#3] 1441# endif 1442 eor r12,r4,r5 @ a^b, b^c in next round 1443#else 1444 ldr r2,[sp,#10*4] @ from future BODY_16_xx 1445 eor r12,r4,r5 @ a^b, b^c in next round 1446 ldr r1,[sp,#7*4] @ from future BODY_16_xx 1447#endif 1448 eor r0,r0,r4,ror#20 @ Sigma0(a) 1449 and r3,r3,r12 @ (b^c)&=(a^b) 1450 add r7,r7,r11 @ d+=h 1451 eor r3,r3,r5 @ Maj(a,b,c) 1452 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1453 @ add r11,r11,r3 @ h+=Maj(a,b,c) 1454 @ ldr r2,[sp,#10*4] @ 25 1455 @ ldr r1,[sp,#7*4] 1456 mov r0,r2,ror#7 1457 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1458 mov r3,r1,ror#17 1459 eor r0,r0,r2,ror#18 1460 eor r3,r3,r1,ror#19 1461 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1462 ldr r2,[sp,#9*4] 1463 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1464 ldr r1,[sp,#2*4] 1465 1466 add r3,r3,r0 1467 eor r0,r7,r7,ror#5 @ from BODY_00_15 1468 add r2,r2,r3 1469 eor r0,r0,r7,ror#19 @ Sigma1(e) 1470 add r2,r2,r1 @ X[i] 1471 ldr r3,[r14],#4 @ *K256++ 1472 add r10,r10,r2 @ h+=X[i] 1473 str r2,[sp,#9*4] 1474 eor r2,r8,r9 1475 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1476 and r2,r2,r7 1477 add r10,r10,r3 @ h+=K256[i] 1478 eor r2,r2,r9 @ Ch(e,f,g) 1479 eor r0,r11,r11,ror#11 1480 add r10,r10,r2 @ h+=Ch(e,f,g) 1481#if 25==31 1482 and r3,r3,#0xff 1483 cmp r3,#0xf2 @ done? 1484#endif 1485#if 25<15 1486# if __ARM_ARCH__>=7 1487 ldr r2,[r1],#4 @ prefetch 1488# else 1489 ldrb r2,[r1,#3] 1490# endif 1491 eor r3,r11,r4 @ a^b, b^c in next round 1492#else 1493 ldr r2,[sp,#11*4] @ from future BODY_16_xx 1494 eor r3,r11,r4 @ a^b, b^c in next round 1495 ldr r1,[sp,#8*4] @ from future BODY_16_xx 1496#endif 1497 eor r0,r0,r11,ror#20 @ Sigma0(a) 1498 and r12,r12,r3 @ (b^c)&=(a^b) 1499 add r6,r6,r10 @ d+=h 1500 eor r12,r12,r4 @ Maj(a,b,c) 1501 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1502 @ add r10,r10,r12 @ h+=Maj(a,b,c) 1503 @ ldr r2,[sp,#11*4] @ 26 1504 @ ldr r1,[sp,#8*4] 1505 mov r0,r2,ror#7 1506 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1507 mov r12,r1,ror#17 1508 eor r0,r0,r2,ror#18 1509 eor r12,r12,r1,ror#19 1510 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1511 ldr r2,[sp,#10*4] 1512 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1513 ldr r1,[sp,#3*4] 1514 1515 add r12,r12,r0 1516 eor r0,r6,r6,ror#5 @ from BODY_00_15 1517 add r2,r2,r12 1518 eor r0,r0,r6,ror#19 @ Sigma1(e) 1519 add r2,r2,r1 @ X[i] 1520 ldr r12,[r14],#4 @ *K256++ 1521 add r9,r9,r2 @ h+=X[i] 1522 str r2,[sp,#10*4] 1523 eor r2,r7,r8 1524 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1525 and r2,r2,r6 1526 add r9,r9,r12 @ h+=K256[i] 1527 eor r2,r2,r8 @ Ch(e,f,g) 1528 eor r0,r10,r10,ror#11 1529 add r9,r9,r2 @ h+=Ch(e,f,g) 1530#if 26==31 1531 and r12,r12,#0xff 1532 cmp r12,#0xf2 @ done? 1533#endif 1534#if 26<15 1535# if __ARM_ARCH__>=7 1536 ldr r2,[r1],#4 @ prefetch 1537# else 1538 ldrb r2,[r1,#3] 1539# endif 1540 eor r12,r10,r11 @ a^b, b^c in next round 1541#else 1542 ldr r2,[sp,#12*4] @ from future BODY_16_xx 1543 eor r12,r10,r11 @ a^b, b^c in next round 1544 ldr r1,[sp,#9*4] @ from future BODY_16_xx 1545#endif 1546 eor r0,r0,r10,ror#20 @ Sigma0(a) 1547 and r3,r3,r12 @ (b^c)&=(a^b) 1548 add r5,r5,r9 @ d+=h 1549 eor r3,r3,r11 @ Maj(a,b,c) 1550 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1551 @ add r9,r9,r3 @ h+=Maj(a,b,c) 1552 @ ldr r2,[sp,#12*4] @ 27 1553 @ ldr r1,[sp,#9*4] 1554 mov r0,r2,ror#7 1555 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1556 mov r3,r1,ror#17 1557 eor r0,r0,r2,ror#18 1558 eor r3,r3,r1,ror#19 1559 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1560 ldr r2,[sp,#11*4] 1561 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1562 ldr r1,[sp,#4*4] 1563 1564 add r3,r3,r0 1565 eor r0,r5,r5,ror#5 @ from BODY_00_15 1566 add r2,r2,r3 1567 eor r0,r0,r5,ror#19 @ Sigma1(e) 1568 add r2,r2,r1 @ X[i] 1569 ldr r3,[r14],#4 @ *K256++ 1570 add r8,r8,r2 @ h+=X[i] 1571 str r2,[sp,#11*4] 1572 eor r2,r6,r7 1573 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1574 and r2,r2,r5 1575 add r8,r8,r3 @ h+=K256[i] 1576 eor r2,r2,r7 @ Ch(e,f,g) 1577 eor r0,r9,r9,ror#11 1578 add r8,r8,r2 @ h+=Ch(e,f,g) 1579#if 27==31 1580 and r3,r3,#0xff 1581 cmp r3,#0xf2 @ done? 1582#endif 1583#if 27<15 1584# if __ARM_ARCH__>=7 1585 ldr r2,[r1],#4 @ prefetch 1586# else 1587 ldrb r2,[r1,#3] 1588# endif 1589 eor r3,r9,r10 @ a^b, b^c in next round 1590#else 1591 ldr r2,[sp,#13*4] @ from future BODY_16_xx 1592 eor r3,r9,r10 @ a^b, b^c in next round 1593 ldr r1,[sp,#10*4] @ from future BODY_16_xx 1594#endif 1595 eor r0,r0,r9,ror#20 @ Sigma0(a) 1596 and r12,r12,r3 @ (b^c)&=(a^b) 1597 add r4,r4,r8 @ d+=h 1598 eor r12,r12,r10 @ Maj(a,b,c) 1599 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1600 @ add r8,r8,r12 @ h+=Maj(a,b,c) 1601 @ ldr r2,[sp,#13*4] @ 28 1602 @ ldr r1,[sp,#10*4] 1603 mov r0,r2,ror#7 1604 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1605 mov r12,r1,ror#17 1606 eor r0,r0,r2,ror#18 1607 eor r12,r12,r1,ror#19 1608 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1609 ldr r2,[sp,#12*4] 1610 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1611 ldr r1,[sp,#5*4] 1612 1613 add r12,r12,r0 1614 eor r0,r4,r4,ror#5 @ from BODY_00_15 1615 add r2,r2,r12 1616 eor r0,r0,r4,ror#19 @ Sigma1(e) 1617 add r2,r2,r1 @ X[i] 1618 ldr r12,[r14],#4 @ *K256++ 1619 add r7,r7,r2 @ h+=X[i] 1620 str r2,[sp,#12*4] 1621 eor r2,r5,r6 1622 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1623 and r2,r2,r4 1624 add r7,r7,r12 @ h+=K256[i] 1625 eor r2,r2,r6 @ Ch(e,f,g) 1626 eor r0,r8,r8,ror#11 1627 add r7,r7,r2 @ h+=Ch(e,f,g) 1628#if 28==31 1629 and r12,r12,#0xff 1630 cmp r12,#0xf2 @ done? 1631#endif 1632#if 28<15 1633# if __ARM_ARCH__>=7 1634 ldr r2,[r1],#4 @ prefetch 1635# else 1636 ldrb r2,[r1,#3] 1637# endif 1638 eor r12,r8,r9 @ a^b, b^c in next round 1639#else 1640 ldr r2,[sp,#14*4] @ from future BODY_16_xx 1641 eor r12,r8,r9 @ a^b, b^c in next round 1642 ldr r1,[sp,#11*4] @ from future BODY_16_xx 1643#endif 1644 eor r0,r0,r8,ror#20 @ Sigma0(a) 1645 and r3,r3,r12 @ (b^c)&=(a^b) 1646 add r11,r11,r7 @ d+=h 1647 eor r3,r3,r9 @ Maj(a,b,c) 1648 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1649 @ add r7,r7,r3 @ h+=Maj(a,b,c) 1650 @ ldr r2,[sp,#14*4] @ 29 1651 @ ldr r1,[sp,#11*4] 1652 mov r0,r2,ror#7 1653 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1654 mov r3,r1,ror#17 1655 eor r0,r0,r2,ror#18 1656 eor r3,r3,r1,ror#19 1657 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1658 ldr r2,[sp,#13*4] 1659 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1660 ldr r1,[sp,#6*4] 1661 1662 add r3,r3,r0 1663 eor r0,r11,r11,ror#5 @ from BODY_00_15 1664 add r2,r2,r3 1665 eor r0,r0,r11,ror#19 @ Sigma1(e) 1666 add r2,r2,r1 @ X[i] 1667 ldr r3,[r14],#4 @ *K256++ 1668 add r6,r6,r2 @ h+=X[i] 1669 str r2,[sp,#13*4] 1670 eor r2,r4,r5 1671 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1672 and r2,r2,r11 1673 add r6,r6,r3 @ h+=K256[i] 1674 eor r2,r2,r5 @ Ch(e,f,g) 1675 eor r0,r7,r7,ror#11 1676 add r6,r6,r2 @ h+=Ch(e,f,g) 1677#if 29==31 1678 and r3,r3,#0xff 1679 cmp r3,#0xf2 @ done? 1680#endif 1681#if 29<15 1682# if __ARM_ARCH__>=7 1683 ldr r2,[r1],#4 @ prefetch 1684# else 1685 ldrb r2,[r1,#3] 1686# endif 1687 eor r3,r7,r8 @ a^b, b^c in next round 1688#else 1689 ldr r2,[sp,#15*4] @ from future BODY_16_xx 1690 eor r3,r7,r8 @ a^b, b^c in next round 1691 ldr r1,[sp,#12*4] @ from future BODY_16_xx 1692#endif 1693 eor r0,r0,r7,ror#20 @ Sigma0(a) 1694 and r12,r12,r3 @ (b^c)&=(a^b) 1695 add r10,r10,r6 @ d+=h 1696 eor r12,r12,r8 @ Maj(a,b,c) 1697 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1698 @ add r6,r6,r12 @ h+=Maj(a,b,c) 1699 @ ldr r2,[sp,#15*4] @ 30 1700 @ ldr r1,[sp,#12*4] 1701 mov r0,r2,ror#7 1702 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1703 mov r12,r1,ror#17 1704 eor r0,r0,r2,ror#18 1705 eor r12,r12,r1,ror#19 1706 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1707 ldr r2,[sp,#14*4] 1708 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1709 ldr r1,[sp,#7*4] 1710 1711 add r12,r12,r0 1712 eor r0,r10,r10,ror#5 @ from BODY_00_15 1713 add r2,r2,r12 1714 eor r0,r0,r10,ror#19 @ Sigma1(e) 1715 add r2,r2,r1 @ X[i] 1716 ldr r12,[r14],#4 @ *K256++ 1717 add r5,r5,r2 @ h+=X[i] 1718 str r2,[sp,#14*4] 1719 eor r2,r11,r4 1720 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1721 and r2,r2,r10 1722 add r5,r5,r12 @ h+=K256[i] 1723 eor r2,r2,r4 @ Ch(e,f,g) 1724 eor r0,r6,r6,ror#11 1725 add r5,r5,r2 @ h+=Ch(e,f,g) 1726#if 30==31 1727 and r12,r12,#0xff 1728 cmp r12,#0xf2 @ done? 1729#endif 1730#if 30<15 1731# if __ARM_ARCH__>=7 1732 ldr r2,[r1],#4 @ prefetch 1733# else 1734 ldrb r2,[r1,#3] 1735# endif 1736 eor r12,r6,r7 @ a^b, b^c in next round 1737#else 1738 ldr r2,[sp,#0*4] @ from future BODY_16_xx 1739 eor r12,r6,r7 @ a^b, b^c in next round 1740 ldr r1,[sp,#13*4] @ from future BODY_16_xx 1741#endif 1742 eor r0,r0,r6,ror#20 @ Sigma0(a) 1743 and r3,r3,r12 @ (b^c)&=(a^b) 1744 add r9,r9,r5 @ d+=h 1745 eor r3,r3,r7 @ Maj(a,b,c) 1746 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1747 @ add r5,r5,r3 @ h+=Maj(a,b,c) 1748 @ ldr r2,[sp,#0*4] @ 31 1749 @ ldr r1,[sp,#13*4] 1750 mov r0,r2,ror#7 1751 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1752 mov r3,r1,ror#17 1753 eor r0,r0,r2,ror#18 1754 eor r3,r3,r1,ror#19 1755 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1756 ldr r2,[sp,#15*4] 1757 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1758 ldr r1,[sp,#8*4] 1759 1760 add r3,r3,r0 1761 eor r0,r9,r9,ror#5 @ from BODY_00_15 1762 add r2,r2,r3 1763 eor r0,r0,r9,ror#19 @ Sigma1(e) 1764 add r2,r2,r1 @ X[i] 1765 ldr r3,[r14],#4 @ *K256++ 1766 add r4,r4,r2 @ h+=X[i] 1767 str r2,[sp,#15*4] 1768 eor r2,r10,r11 1769 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1770 and r2,r2,r9 1771 add r4,r4,r3 @ h+=K256[i] 1772 eor r2,r2,r11 @ Ch(e,f,g) 1773 eor r0,r5,r5,ror#11 1774 add r4,r4,r2 @ h+=Ch(e,f,g) 1775#if 31==31 1776 and r3,r3,#0xff 1777 cmp r3,#0xf2 @ done? 1778#endif 1779#if 31<15 1780# if __ARM_ARCH__>=7 1781 ldr r2,[r1],#4 @ prefetch 1782# else 1783 ldrb r2,[r1,#3] 1784# endif 1785 eor r3,r5,r6 @ a^b, b^c in next round 1786#else 1787 ldr r2,[sp,#1*4] @ from future BODY_16_xx 1788 eor r3,r5,r6 @ a^b, b^c in next round 1789 ldr r1,[sp,#14*4] @ from future BODY_16_xx 1790#endif 1791 eor r0,r0,r5,ror#20 @ Sigma0(a) 1792 and r12,r12,r3 @ (b^c)&=(a^b) 1793 add r8,r8,r4 @ d+=h 1794 eor r12,r12,r6 @ Maj(a,b,c) 1795 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1796 @ add r4,r4,r12 @ h+=Maj(a,b,c) 1797#if __ARM_ARCH__>=7 1798 ite eq @ Thumb2 thing, sanity check in ARM 1799#endif 1800 ldreq r3,[sp,#16*4] @ pull ctx 1801 bne .Lrounds_16_xx 1802 1803 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1804 ldr r0,[r3,#0] 1805 ldr r2,[r3,#4] 1806 ldr r12,[r3,#8] 1807 add r4,r4,r0 1808 ldr r0,[r3,#12] 1809 add r5,r5,r2 1810 ldr r2,[r3,#16] 1811 add r6,r6,r12 1812 ldr r12,[r3,#20] 1813 add r7,r7,r0 1814 ldr r0,[r3,#24] 1815 add r8,r8,r2 1816 ldr r2,[r3,#28] 1817 add r9,r9,r12 1818 ldr r1,[sp,#17*4] @ pull inp 1819 ldr r12,[sp,#18*4] @ pull inp+len 1820 add r10,r10,r0 1821 add r11,r11,r2 1822 stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11} 1823 cmp r1,r12 1824 sub r14,r14,#256 @ rewind Ktbl 1825 bne .Loop 1826 1827 add sp,sp,#19*4 @ destroy frame 1828#if __ARM_ARCH__>=5 1829 ldmia sp!,{r4-r11,pc} 1830#else 1831 ldmia sp!,{r4-r11,lr} 1832 tst lr,#1 1833 moveq pc,lr @ be binary compatible with V4, yet 1834 .word 0xe12fff1e @ interoperable with Thumb ISA:-) 1835#endif 1836.size sha256_block_data_order,.-sha256_block_data_order 1837#if __ARM_MAX_ARCH__>=7 1838.arch armv7-a 1839.fpu neon 1840 1841.global sha256_block_data_order_neon 1842.type sha256_block_data_order_neon,%function 1843.align 4 1844sha256_block_data_order_neon: 1845.LNEON: 1846 stmdb sp!,{r4-r12,lr} 1847 1848 sub r11,sp,#16*4+16 1849 adr r14,K256 1850 bic r11,r11,#15 @ align for 128-bit stores 1851 mov r12,sp 1852 mov sp,r11 @ alloca 1853 add r2,r1,r2,lsl#6 @ len to point at the end of inp 1854 1855 vld1.8 {q0},[r1]! 1856 vld1.8 {q1},[r1]! 1857 vld1.8 {q2},[r1]! 1858 vld1.8 {q3},[r1]! 1859 vld1.32 {q8},[r14,:128]! 1860 vld1.32 {q9},[r14,:128]! 1861 vld1.32 {q10},[r14,:128]! 1862 vld1.32 {q11},[r14,:128]! 1863 vrev32.8 q0,q0 @ yes, even on 1864 str r0,[sp,#64] 1865 vrev32.8 q1,q1 @ big-endian 1866 str r1,[sp,#68] 1867 mov r1,sp 1868 vrev32.8 q2,q2 1869 str r2,[sp,#72] 1870 vrev32.8 q3,q3 1871 str r12,[sp,#76] @ save original sp 1872 vadd.i32 q8,q8,q0 1873 vadd.i32 q9,q9,q1 1874 vst1.32 {q8},[r1,:128]! 1875 vadd.i32 q10,q10,q2 1876 vst1.32 {q9},[r1,:128]! 1877 vadd.i32 q11,q11,q3 1878 vst1.32 {q10},[r1,:128]! 1879 vst1.32 {q11},[r1,:128]! 1880 1881 ldmia r0,{r4-r11} 1882 sub r1,r1,#64 1883 ldr r2,[sp,#0] 1884 eor r12,r12,r12 1885 eor r3,r5,r6 1886 b .L_00_48 1887 1888.align 4 1889.L_00_48: 1890 vext.8 q8,q0,q1,#4 1891 add r11,r11,r2 1892 eor r2,r9,r10 1893 eor r0,r8,r8,ror#5 1894 vext.8 q9,q2,q3,#4 1895 add r4,r4,r12 1896 and r2,r2,r8 1897 eor r12,r0,r8,ror#19 1898 vshr.u32 q10,q8,#7 1899 eor r0,r4,r4,ror#11 1900 eor r2,r2,r10 1901 vadd.i32 q0,q0,q9 1902 add r11,r11,r12,ror#6 1903 eor r12,r4,r5 1904 vshr.u32 q9,q8,#3 1905 eor r0,r0,r4,ror#20 1906 add r11,r11,r2 1907 vsli.32 q10,q8,#25 1908 ldr r2,[sp,#4] 1909 and r3,r3,r12 1910 vshr.u32 q11,q8,#18 1911 add r7,r7,r11 1912 add r11,r11,r0,ror#2 1913 eor r3,r3,r5 1914 veor q9,q9,q10 1915 add r10,r10,r2 1916 vsli.32 q11,q8,#14 1917 eor r2,r8,r9 1918 eor r0,r7,r7,ror#5 1919 vshr.u32 d24,d7,#17 1920 add r11,r11,r3 1921 and r2,r2,r7 1922 veor q9,q9,q11 1923 eor r3,r0,r7,ror#19 1924 eor r0,r11,r11,ror#11 1925 vsli.32 d24,d7,#15 1926 eor r2,r2,r9 1927 add r10,r10,r3,ror#6 1928 vshr.u32 d25,d7,#10 1929 eor r3,r11,r4 1930 eor r0,r0,r11,ror#20 1931 vadd.i32 q0,q0,q9 1932 add r10,r10,r2 1933 ldr r2,[sp,#8] 1934 veor d25,d25,d24 1935 and r12,r12,r3 1936 add r6,r6,r10 1937 vshr.u32 d24,d7,#19 1938 add r10,r10,r0,ror#2 1939 eor r12,r12,r4 1940 vsli.32 d24,d7,#13 1941 add r9,r9,r2 1942 eor r2,r7,r8 1943 veor d25,d25,d24 1944 eor r0,r6,r6,ror#5 1945 add r10,r10,r12 1946 vadd.i32 d0,d0,d25 1947 and r2,r2,r6 1948 eor r12,r0,r6,ror#19 1949 vshr.u32 d24,d0,#17 1950 eor r0,r10,r10,ror#11 1951 eor r2,r2,r8 1952 vsli.32 d24,d0,#15 1953 add r9,r9,r12,ror#6 1954 eor r12,r10,r11 1955 vshr.u32 d25,d0,#10 1956 eor r0,r0,r10,ror#20 1957 add r9,r9,r2 1958 veor d25,d25,d24 1959 ldr r2,[sp,#12] 1960 and r3,r3,r12 1961 vshr.u32 d24,d0,#19 1962 add r5,r5,r9 1963 add r9,r9,r0,ror#2 1964 eor r3,r3,r11 1965 vld1.32 {q8},[r14,:128]! 1966 add r8,r8,r2 1967 vsli.32 d24,d0,#13 1968 eor r2,r6,r7 1969 eor r0,r5,r5,ror#5 1970 veor d25,d25,d24 1971 add r9,r9,r3 1972 and r2,r2,r5 1973 vadd.i32 d1,d1,d25 1974 eor r3,r0,r5,ror#19 1975 eor r0,r9,r9,ror#11 1976 vadd.i32 q8,q8,q0 1977 eor r2,r2,r7 1978 add r8,r8,r3,ror#6 1979 eor r3,r9,r10 1980 eor r0,r0,r9,ror#20 1981 add r8,r8,r2 1982 ldr r2,[sp,#16] 1983 and r12,r12,r3 1984 add r4,r4,r8 1985 vst1.32 {q8},[r1,:128]! 1986 add r8,r8,r0,ror#2 1987 eor r12,r12,r10 1988 vext.8 q8,q1,q2,#4 1989 add r7,r7,r2 1990 eor r2,r5,r6 1991 eor r0,r4,r4,ror#5 1992 vext.8 q9,q3,q0,#4 1993 add r8,r8,r12 1994 and r2,r2,r4 1995 eor r12,r0,r4,ror#19 1996 vshr.u32 q10,q8,#7 1997 eor r0,r8,r8,ror#11 1998 eor r2,r2,r6 1999 vadd.i32 q1,q1,q9 2000 add r7,r7,r12,ror#6 2001 eor r12,r8,r9 2002 vshr.u32 q9,q8,#3 2003 eor r0,r0,r8,ror#20 2004 add r7,r7,r2 2005 vsli.32 q10,q8,#25 2006 ldr r2,[sp,#20] 2007 and r3,r3,r12 2008 vshr.u32 q11,q8,#18 2009 add r11,r11,r7 2010 add r7,r7,r0,ror#2 2011 eor r3,r3,r9 2012 veor q9,q9,q10 2013 add r6,r6,r2 2014 vsli.32 q11,q8,#14 2015 eor r2,r4,r5 2016 eor r0,r11,r11,ror#5 2017 vshr.u32 d24,d1,#17 2018 add r7,r7,r3 2019 and r2,r2,r11 2020 veor q9,q9,q11 2021 eor r3,r0,r11,ror#19 2022 eor r0,r7,r7,ror#11 2023 vsli.32 d24,d1,#15 2024 eor r2,r2,r5 2025 add r6,r6,r3,ror#6 2026 vshr.u32 d25,d1,#10 2027 eor r3,r7,r8 2028 eor r0,r0,r7,ror#20 2029 vadd.i32 q1,q1,q9 2030 add r6,r6,r2 2031 ldr r2,[sp,#24] 2032 veor d25,d25,d24 2033 and r12,r12,r3 2034 add r10,r10,r6 2035 vshr.u32 d24,d1,#19 2036 add r6,r6,r0,ror#2 2037 eor r12,r12,r8 2038 vsli.32 d24,d1,#13 2039 add r5,r5,r2 2040 eor r2,r11,r4 2041 veor d25,d25,d24 2042 eor r0,r10,r10,ror#5 2043 add r6,r6,r12 2044 vadd.i32 d2,d2,d25 2045 and r2,r2,r10 2046 eor r12,r0,r10,ror#19 2047 vshr.u32 d24,d2,#17 2048 eor r0,r6,r6,ror#11 2049 eor r2,r2,r4 2050 vsli.32 d24,d2,#15 2051 add r5,r5,r12,ror#6 2052 eor r12,r6,r7 2053 vshr.u32 d25,d2,#10 2054 eor r0,r0,r6,ror#20 2055 add r5,r5,r2 2056 veor d25,d25,d24 2057 ldr r2,[sp,#28] 2058 and r3,r3,r12 2059 vshr.u32 d24,d2,#19 2060 add r9,r9,r5 2061 add r5,r5,r0,ror#2 2062 eor r3,r3,r7 2063 vld1.32 {q8},[r14,:128]! 2064 add r4,r4,r2 2065 vsli.32 d24,d2,#13 2066 eor r2,r10,r11 2067 eor r0,r9,r9,ror#5 2068 veor d25,d25,d24 2069 add r5,r5,r3 2070 and r2,r2,r9 2071 vadd.i32 d3,d3,d25 2072 eor r3,r0,r9,ror#19 2073 eor r0,r5,r5,ror#11 2074 vadd.i32 q8,q8,q1 2075 eor r2,r2,r11 2076 add r4,r4,r3,ror#6 2077 eor r3,r5,r6 2078 eor r0,r0,r5,ror#20 2079 add r4,r4,r2 2080 ldr r2,[sp,#32] 2081 and r12,r12,r3 2082 add r8,r8,r4 2083 vst1.32 {q8},[r1,:128]! 2084 add r4,r4,r0,ror#2 2085 eor r12,r12,r6 2086 vext.8 q8,q2,q3,#4 2087 add r11,r11,r2 2088 eor r2,r9,r10 2089 eor r0,r8,r8,ror#5 2090 vext.8 q9,q0,q1,#4 2091 add r4,r4,r12 2092 and r2,r2,r8 2093 eor r12,r0,r8,ror#19 2094 vshr.u32 q10,q8,#7 2095 eor r0,r4,r4,ror#11 2096 eor r2,r2,r10 2097 vadd.i32 q2,q2,q9 2098 add r11,r11,r12,ror#6 2099 eor r12,r4,r5 2100 vshr.u32 q9,q8,#3 2101 eor r0,r0,r4,ror#20 2102 add r11,r11,r2 2103 vsli.32 q10,q8,#25 2104 ldr r2,[sp,#36] 2105 and r3,r3,r12 2106 vshr.u32 q11,q8,#18 2107 add r7,r7,r11 2108 add r11,r11,r0,ror#2 2109 eor r3,r3,r5 2110 veor q9,q9,q10 2111 add r10,r10,r2 2112 vsli.32 q11,q8,#14 2113 eor r2,r8,r9 2114 eor r0,r7,r7,ror#5 2115 vshr.u32 d24,d3,#17 2116 add r11,r11,r3 2117 and r2,r2,r7 2118 veor q9,q9,q11 2119 eor r3,r0,r7,ror#19 2120 eor r0,r11,r11,ror#11 2121 vsli.32 d24,d3,#15 2122 eor r2,r2,r9 2123 add r10,r10,r3,ror#6 2124 vshr.u32 d25,d3,#10 2125 eor r3,r11,r4 2126 eor r0,r0,r11,ror#20 2127 vadd.i32 q2,q2,q9 2128 add r10,r10,r2 2129 ldr r2,[sp,#40] 2130 veor d25,d25,d24 2131 and r12,r12,r3 2132 add r6,r6,r10 2133 vshr.u32 d24,d3,#19 2134 add r10,r10,r0,ror#2 2135 eor r12,r12,r4 2136 vsli.32 d24,d3,#13 2137 add r9,r9,r2 2138 eor r2,r7,r8 2139 veor d25,d25,d24 2140 eor r0,r6,r6,ror#5 2141 add r10,r10,r12 2142 vadd.i32 d4,d4,d25 2143 and r2,r2,r6 2144 eor r12,r0,r6,ror#19 2145 vshr.u32 d24,d4,#17 2146 eor r0,r10,r10,ror#11 2147 eor r2,r2,r8 2148 vsli.32 d24,d4,#15 2149 add r9,r9,r12,ror#6 2150 eor r12,r10,r11 2151 vshr.u32 d25,d4,#10 2152 eor r0,r0,r10,ror#20 2153 add r9,r9,r2 2154 veor d25,d25,d24 2155 ldr r2,[sp,#44] 2156 and r3,r3,r12 2157 vshr.u32 d24,d4,#19 2158 add r5,r5,r9 2159 add r9,r9,r0,ror#2 2160 eor r3,r3,r11 2161 vld1.32 {q8},[r14,:128]! 2162 add r8,r8,r2 2163 vsli.32 d24,d4,#13 2164 eor r2,r6,r7 2165 eor r0,r5,r5,ror#5 2166 veor d25,d25,d24 2167 add r9,r9,r3 2168 and r2,r2,r5 2169 vadd.i32 d5,d5,d25 2170 eor r3,r0,r5,ror#19 2171 eor r0,r9,r9,ror#11 2172 vadd.i32 q8,q8,q2 2173 eor r2,r2,r7 2174 add r8,r8,r3,ror#6 2175 eor r3,r9,r10 2176 eor r0,r0,r9,ror#20 2177 add r8,r8,r2 2178 ldr r2,[sp,#48] 2179 and r12,r12,r3 2180 add r4,r4,r8 2181 vst1.32 {q8},[r1,:128]! 2182 add r8,r8,r0,ror#2 2183 eor r12,r12,r10 2184 vext.8 q8,q3,q0,#4 2185 add r7,r7,r2 2186 eor r2,r5,r6 2187 eor r0,r4,r4,ror#5 2188 vext.8 q9,q1,q2,#4 2189 add r8,r8,r12 2190 and r2,r2,r4 2191 eor r12,r0,r4,ror#19 2192 vshr.u32 q10,q8,#7 2193 eor r0,r8,r8,ror#11 2194 eor r2,r2,r6 2195 vadd.i32 q3,q3,q9 2196 add r7,r7,r12,ror#6 2197 eor r12,r8,r9 2198 vshr.u32 q9,q8,#3 2199 eor r0,r0,r8,ror#20 2200 add r7,r7,r2 2201 vsli.32 q10,q8,#25 2202 ldr r2,[sp,#52] 2203 and r3,r3,r12 2204 vshr.u32 q11,q8,#18 2205 add r11,r11,r7 2206 add r7,r7,r0,ror#2 2207 eor r3,r3,r9 2208 veor q9,q9,q10 2209 add r6,r6,r2 2210 vsli.32 q11,q8,#14 2211 eor r2,r4,r5 2212 eor r0,r11,r11,ror#5 2213 vshr.u32 d24,d5,#17 2214 add r7,r7,r3 2215 and r2,r2,r11 2216 veor q9,q9,q11 2217 eor r3,r0,r11,ror#19 2218 eor r0,r7,r7,ror#11 2219 vsli.32 d24,d5,#15 2220 eor r2,r2,r5 2221 add r6,r6,r3,ror#6 2222 vshr.u32 d25,d5,#10 2223 eor r3,r7,r8 2224 eor r0,r0,r7,ror#20 2225 vadd.i32 q3,q3,q9 2226 add r6,r6,r2 2227 ldr r2,[sp,#56] 2228 veor d25,d25,d24 2229 and r12,r12,r3 2230 add r10,r10,r6 2231 vshr.u32 d24,d5,#19 2232 add r6,r6,r0,ror#2 2233 eor r12,r12,r8 2234 vsli.32 d24,d5,#13 2235 add r5,r5,r2 2236 eor r2,r11,r4 2237 veor d25,d25,d24 2238 eor r0,r10,r10,ror#5 2239 add r6,r6,r12 2240 vadd.i32 d6,d6,d25 2241 and r2,r2,r10 2242 eor r12,r0,r10,ror#19 2243 vshr.u32 d24,d6,#17 2244 eor r0,r6,r6,ror#11 2245 eor r2,r2,r4 2246 vsli.32 d24,d6,#15 2247 add r5,r5,r12,ror#6 2248 eor r12,r6,r7 2249 vshr.u32 d25,d6,#10 2250 eor r0,r0,r6,ror#20 2251 add r5,r5,r2 2252 veor d25,d25,d24 2253 ldr r2,[sp,#60] 2254 and r3,r3,r12 2255 vshr.u32 d24,d6,#19 2256 add r9,r9,r5 2257 add r5,r5,r0,ror#2 2258 eor r3,r3,r7 2259 vld1.32 {q8},[r14,:128]! 2260 add r4,r4,r2 2261 vsli.32 d24,d6,#13 2262 eor r2,r10,r11 2263 eor r0,r9,r9,ror#5 2264 veor d25,d25,d24 2265 add r5,r5,r3 2266 and r2,r2,r9 2267 vadd.i32 d7,d7,d25 2268 eor r3,r0,r9,ror#19 2269 eor r0,r5,r5,ror#11 2270 vadd.i32 q8,q8,q3 2271 eor r2,r2,r11 2272 add r4,r4,r3,ror#6 2273 eor r3,r5,r6 2274 eor r0,r0,r5,ror#20 2275 add r4,r4,r2 2276 ldr r2,[r14] 2277 and r12,r12,r3 2278 add r8,r8,r4 2279 vst1.32 {q8},[r1,:128]! 2280 add r4,r4,r0,ror#2 2281 eor r12,r12,r6 2282 teq r2,#0 @ check for K256 terminator 2283 ldr r2,[sp,#0] 2284 sub r1,r1,#64 2285 bne .L_00_48 2286 2287 ldr r1,[sp,#68] 2288 ldr r0,[sp,#72] 2289 sub r14,r14,#256 @ rewind r14 2290 teq r1,r0 2291 it eq 2292 subeq r1,r1,#64 @ avoid SEGV 2293 vld1.8 {q0},[r1]! @ load next input block 2294 vld1.8 {q1},[r1]! 2295 vld1.8 {q2},[r1]! 2296 vld1.8 {q3},[r1]! 2297 it ne 2298 strne r1,[sp,#68] 2299 mov r1,sp 2300 add r11,r11,r2 2301 eor r2,r9,r10 2302 eor r0,r8,r8,ror#5 2303 add r4,r4,r12 2304 vld1.32 {q8},[r14,:128]! 2305 and r2,r2,r8 2306 eor r12,r0,r8,ror#19 2307 eor r0,r4,r4,ror#11 2308 eor r2,r2,r10 2309 vrev32.8 q0,q0 2310 add r11,r11,r12,ror#6 2311 eor r12,r4,r5 2312 eor r0,r0,r4,ror#20 2313 add r11,r11,r2 2314 vadd.i32 q8,q8,q0 2315 ldr r2,[sp,#4] 2316 and r3,r3,r12 2317 add r7,r7,r11 2318 add r11,r11,r0,ror#2 2319 eor r3,r3,r5 2320 add r10,r10,r2 2321 eor r2,r8,r9 2322 eor r0,r7,r7,ror#5 2323 add r11,r11,r3 2324 and r2,r2,r7 2325 eor r3,r0,r7,ror#19 2326 eor r0,r11,r11,ror#11 2327 eor r2,r2,r9 2328 add r10,r10,r3,ror#6 2329 eor r3,r11,r4 2330 eor r0,r0,r11,ror#20 2331 add r10,r10,r2 2332 ldr r2,[sp,#8] 2333 and r12,r12,r3 2334 add r6,r6,r10 2335 add r10,r10,r0,ror#2 2336 eor r12,r12,r4 2337 add r9,r9,r2 2338 eor r2,r7,r8 2339 eor r0,r6,r6,ror#5 2340 add r10,r10,r12 2341 and r2,r2,r6 2342 eor r12,r0,r6,ror#19 2343 eor r0,r10,r10,ror#11 2344 eor r2,r2,r8 2345 add r9,r9,r12,ror#6 2346 eor r12,r10,r11 2347 eor r0,r0,r10,ror#20 2348 add r9,r9,r2 2349 ldr r2,[sp,#12] 2350 and r3,r3,r12 2351 add r5,r5,r9 2352 add r9,r9,r0,ror#2 2353 eor r3,r3,r11 2354 add r8,r8,r2 2355 eor r2,r6,r7 2356 eor r0,r5,r5,ror#5 2357 add r9,r9,r3 2358 and r2,r2,r5 2359 eor r3,r0,r5,ror#19 2360 eor r0,r9,r9,ror#11 2361 eor r2,r2,r7 2362 add r8,r8,r3,ror#6 2363 eor r3,r9,r10 2364 eor r0,r0,r9,ror#20 2365 add r8,r8,r2 2366 ldr r2,[sp,#16] 2367 and r12,r12,r3 2368 add r4,r4,r8 2369 add r8,r8,r0,ror#2 2370 eor r12,r12,r10 2371 vst1.32 {q8},[r1,:128]! 2372 add r7,r7,r2 2373 eor r2,r5,r6 2374 eor r0,r4,r4,ror#5 2375 add r8,r8,r12 2376 vld1.32 {q8},[r14,:128]! 2377 and r2,r2,r4 2378 eor r12,r0,r4,ror#19 2379 eor r0,r8,r8,ror#11 2380 eor r2,r2,r6 2381 vrev32.8 q1,q1 2382 add r7,r7,r12,ror#6 2383 eor r12,r8,r9 2384 eor r0,r0,r8,ror#20 2385 add r7,r7,r2 2386 vadd.i32 q8,q8,q1 2387 ldr r2,[sp,#20] 2388 and r3,r3,r12 2389 add r11,r11,r7 2390 add r7,r7,r0,ror#2 2391 eor r3,r3,r9 2392 add r6,r6,r2 2393 eor r2,r4,r5 2394 eor r0,r11,r11,ror#5 2395 add r7,r7,r3 2396 and r2,r2,r11 2397 eor r3,r0,r11,ror#19 2398 eor r0,r7,r7,ror#11 2399 eor r2,r2,r5 2400 add r6,r6,r3,ror#6 2401 eor r3,r7,r8 2402 eor r0,r0,r7,ror#20 2403 add r6,r6,r2 2404 ldr r2,[sp,#24] 2405 and r12,r12,r3 2406 add r10,r10,r6 2407 add r6,r6,r0,ror#2 2408 eor r12,r12,r8 2409 add r5,r5,r2 2410 eor r2,r11,r4 2411 eor r0,r10,r10,ror#5 2412 add r6,r6,r12 2413 and r2,r2,r10 2414 eor r12,r0,r10,ror#19 2415 eor r0,r6,r6,ror#11 2416 eor r2,r2,r4 2417 add r5,r5,r12,ror#6 2418 eor r12,r6,r7 2419 eor r0,r0,r6,ror#20 2420 add r5,r5,r2 2421 ldr r2,[sp,#28] 2422 and r3,r3,r12 2423 add r9,r9,r5 2424 add r5,r5,r0,ror#2 2425 eor r3,r3,r7 2426 add r4,r4,r2 2427 eor r2,r10,r11 2428 eor r0,r9,r9,ror#5 2429 add r5,r5,r3 2430 and r2,r2,r9 2431 eor r3,r0,r9,ror#19 2432 eor r0,r5,r5,ror#11 2433 eor r2,r2,r11 2434 add r4,r4,r3,ror#6 2435 eor r3,r5,r6 2436 eor r0,r0,r5,ror#20 2437 add r4,r4,r2 2438 ldr r2,[sp,#32] 2439 and r12,r12,r3 2440 add r8,r8,r4 2441 add r4,r4,r0,ror#2 2442 eor r12,r12,r6 2443 vst1.32 {q8},[r1,:128]! 2444 add r11,r11,r2 2445 eor r2,r9,r10 2446 eor r0,r8,r8,ror#5 2447 add r4,r4,r12 2448 vld1.32 {q8},[r14,:128]! 2449 and r2,r2,r8 2450 eor r12,r0,r8,ror#19 2451 eor r0,r4,r4,ror#11 2452 eor r2,r2,r10 2453 vrev32.8 q2,q2 2454 add r11,r11,r12,ror#6 2455 eor r12,r4,r5 2456 eor r0,r0,r4,ror#20 2457 add r11,r11,r2 2458 vadd.i32 q8,q8,q2 2459 ldr r2,[sp,#36] 2460 and r3,r3,r12 2461 add r7,r7,r11 2462 add r11,r11,r0,ror#2 2463 eor r3,r3,r5 2464 add r10,r10,r2 2465 eor r2,r8,r9 2466 eor r0,r7,r7,ror#5 2467 add r11,r11,r3 2468 and r2,r2,r7 2469 eor r3,r0,r7,ror#19 2470 eor r0,r11,r11,ror#11 2471 eor r2,r2,r9 2472 add r10,r10,r3,ror#6 2473 eor r3,r11,r4 2474 eor r0,r0,r11,ror#20 2475 add r10,r10,r2 2476 ldr r2,[sp,#40] 2477 and r12,r12,r3 2478 add r6,r6,r10 2479 add r10,r10,r0,ror#2 2480 eor r12,r12,r4 2481 add r9,r9,r2 2482 eor r2,r7,r8 2483 eor r0,r6,r6,ror#5 2484 add r10,r10,r12 2485 and r2,r2,r6 2486 eor r12,r0,r6,ror#19 2487 eor r0,r10,r10,ror#11 2488 eor r2,r2,r8 2489 add r9,r9,r12,ror#6 2490 eor r12,r10,r11 2491 eor r0,r0,r10,ror#20 2492 add r9,r9,r2 2493 ldr r2,[sp,#44] 2494 and r3,r3,r12 2495 add r5,r5,r9 2496 add r9,r9,r0,ror#2 2497 eor r3,r3,r11 2498 add r8,r8,r2 2499 eor r2,r6,r7 2500 eor r0,r5,r5,ror#5 2501 add r9,r9,r3 2502 and r2,r2,r5 2503 eor r3,r0,r5,ror#19 2504 eor r0,r9,r9,ror#11 2505 eor r2,r2,r7 2506 add r8,r8,r3,ror#6 2507 eor r3,r9,r10 2508 eor r0,r0,r9,ror#20 2509 add r8,r8,r2 2510 ldr r2,[sp,#48] 2511 and r12,r12,r3 2512 add r4,r4,r8 2513 add r8,r8,r0,ror#2 2514 eor r12,r12,r10 2515 vst1.32 {q8},[r1,:128]! 2516 add r7,r7,r2 2517 eor r2,r5,r6 2518 eor r0,r4,r4,ror#5 2519 add r8,r8,r12 2520 vld1.32 {q8},[r14,:128]! 2521 and r2,r2,r4 2522 eor r12,r0,r4,ror#19 2523 eor r0,r8,r8,ror#11 2524 eor r2,r2,r6 2525 vrev32.8 q3,q3 2526 add r7,r7,r12,ror#6 2527 eor r12,r8,r9 2528 eor r0,r0,r8,ror#20 2529 add r7,r7,r2 2530 vadd.i32 q8,q8,q3 2531 ldr r2,[sp,#52] 2532 and r3,r3,r12 2533 add r11,r11,r7 2534 add r7,r7,r0,ror#2 2535 eor r3,r3,r9 2536 add r6,r6,r2 2537 eor r2,r4,r5 2538 eor r0,r11,r11,ror#5 2539 add r7,r7,r3 2540 and r2,r2,r11 2541 eor r3,r0,r11,ror#19 2542 eor r0,r7,r7,ror#11 2543 eor r2,r2,r5 2544 add r6,r6,r3,ror#6 2545 eor r3,r7,r8 2546 eor r0,r0,r7,ror#20 2547 add r6,r6,r2 2548 ldr r2,[sp,#56] 2549 and r12,r12,r3 2550 add r10,r10,r6 2551 add r6,r6,r0,ror#2 2552 eor r12,r12,r8 2553 add r5,r5,r2 2554 eor r2,r11,r4 2555 eor r0,r10,r10,ror#5 2556 add r6,r6,r12 2557 and r2,r2,r10 2558 eor r12,r0,r10,ror#19 2559 eor r0,r6,r6,ror#11 2560 eor r2,r2,r4 2561 add r5,r5,r12,ror#6 2562 eor r12,r6,r7 2563 eor r0,r0,r6,ror#20 2564 add r5,r5,r2 2565 ldr r2,[sp,#60] 2566 and r3,r3,r12 2567 add r9,r9,r5 2568 add r5,r5,r0,ror#2 2569 eor r3,r3,r7 2570 add r4,r4,r2 2571 eor r2,r10,r11 2572 eor r0,r9,r9,ror#5 2573 add r5,r5,r3 2574 and r2,r2,r9 2575 eor r3,r0,r9,ror#19 2576 eor r0,r5,r5,ror#11 2577 eor r2,r2,r11 2578 add r4,r4,r3,ror#6 2579 eor r3,r5,r6 2580 eor r0,r0,r5,ror#20 2581 add r4,r4,r2 2582 ldr r2,[sp,#64] 2583 and r12,r12,r3 2584 add r8,r8,r4 2585 add r4,r4,r0,ror#2 2586 eor r12,r12,r6 2587 vst1.32 {q8},[r1,:128]! 2588 ldr r0,[r2,#0] 2589 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 2590 ldr r12,[r2,#4] 2591 ldr r3,[r2,#8] 2592 ldr r1,[r2,#12] 2593 add r4,r4,r0 @ accumulate 2594 ldr r0,[r2,#16] 2595 add r5,r5,r12 2596 ldr r12,[r2,#20] 2597 add r6,r6,r3 2598 ldr r3,[r2,#24] 2599 add r7,r7,r1 2600 ldr r1,[r2,#28] 2601 add r8,r8,r0 2602 str r4,[r2],#4 2603 add r9,r9,r12 2604 str r5,[r2],#4 2605 add r10,r10,r3 2606 str r6,[r2],#4 2607 add r11,r11,r1 2608 str r7,[r2],#4 2609 stmia r2,{r8-r11} 2610 2611 ittte ne 2612 movne r1,sp 2613 ldrne r2,[sp,#0] 2614 eorne r12,r12,r12 2615 ldreq sp,[sp,#76] @ restore original sp 2616 itt ne 2617 eorne r3,r5,r6 2618 bne .L_00_48 2619 2620 ldmia sp!,{r4-r12,pc} 2621.size sha256_block_data_order_neon,.-sha256_block_data_order_neon 2622#endif 2623#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 2624 2625# ifdef __thumb2__ 2626# define INST(a,b,c,d) .byte c,d|0xc,a,b 2627# else 2628# define INST(a,b,c,d) .byte a,b,c,d 2629# endif 2630 2631.type sha256_block_data_order_armv8,%function 2632.align 5 2633sha256_block_data_order_armv8: 2634.LARMv8: 2635 vld1.32 {q0,q1},[r0] 2636# ifdef __thumb2__ 2637 adr r3,.LARMv8 2638 sub r3,r3,#.LARMv8-K256 2639# else 2640 sub r3,r3,#256+32 2641# endif 2642 add r2,r1,r2,lsl#6 @ len to point at the end of inp 2643 2644.Loop_v8: 2645 vld1.8 {q8-q9},[r1]! 2646 vld1.8 {q10-q11},[r1]! 2647 vld1.32 {q12},[r3]! 2648 vrev32.8 q8,q8 2649 vrev32.8 q9,q9 2650 vrev32.8 q10,q10 2651 vrev32.8 q11,q11 2652 vmov q14,q0 @ offload 2653 vmov q15,q1 2654 teq r1,r2 2655 vld1.32 {q13},[r3]! 2656 vadd.i32 q12,q12,q8 2657 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2658 vmov q2,q0 2659 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2660 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2661 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2662 vld1.32 {q12},[r3]! 2663 vadd.i32 q13,q13,q9 2664 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2665 vmov q2,q0 2666 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2667 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2668 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2669 vld1.32 {q13},[r3]! 2670 vadd.i32 q12,q12,q10 2671 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2672 vmov q2,q0 2673 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2674 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2675 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2676 vld1.32 {q12},[r3]! 2677 vadd.i32 q13,q13,q11 2678 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2679 vmov q2,q0 2680 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2681 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2682 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2683 vld1.32 {q13},[r3]! 2684 vadd.i32 q12,q12,q8 2685 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2686 vmov q2,q0 2687 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2688 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2689 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2690 vld1.32 {q12},[r3]! 2691 vadd.i32 q13,q13,q9 2692 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2693 vmov q2,q0 2694 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2695 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2696 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2697 vld1.32 {q13},[r3]! 2698 vadd.i32 q12,q12,q10 2699 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2700 vmov q2,q0 2701 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2702 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2703 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2704 vld1.32 {q12},[r3]! 2705 vadd.i32 q13,q13,q11 2706 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2707 vmov q2,q0 2708 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2709 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2710 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2711 vld1.32 {q13},[r3]! 2712 vadd.i32 q12,q12,q8 2713 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2714 vmov q2,q0 2715 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2716 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2717 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2718 vld1.32 {q12},[r3]! 2719 vadd.i32 q13,q13,q9 2720 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2721 vmov q2,q0 2722 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2723 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2724 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2725 vld1.32 {q13},[r3]! 2726 vadd.i32 q12,q12,q10 2727 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2728 vmov q2,q0 2729 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2730 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2731 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2732 vld1.32 {q12},[r3]! 2733 vadd.i32 q13,q13,q11 2734 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2735 vmov q2,q0 2736 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2737 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2738 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2739 vld1.32 {q13},[r3]! 2740 vadd.i32 q12,q12,q8 2741 vmov q2,q0 2742 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2743 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2744 2745 vld1.32 {q12},[r3]! 2746 vadd.i32 q13,q13,q9 2747 vmov q2,q0 2748 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2749 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2750 2751 vld1.32 {q13},[r3] 2752 vadd.i32 q12,q12,q10 2753 sub r3,r3,#256-16 @ rewind 2754 vmov q2,q0 2755 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2756 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2757 2758 vadd.i32 q13,q13,q11 2759 vmov q2,q0 2760 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2761 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2762 2763 vadd.i32 q0,q0,q14 2764 vadd.i32 q1,q1,q15 2765 it ne 2766 bne .Loop_v8 2767 2768 vst1.32 {q0,q1},[r0] 2769 2770 bx lr @ bx lr 2771.size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8 2772#endif 2773.asciz "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>" 2774.align 2 2775#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 2776.comm OPENSSL_armcap_P,4,4 2777#endif
|