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