1#include "mips_arch.h" 2 3.text 4.set noat 5#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__)) 6.option pic2 7#endif 8 9.align 5 10.globl sha512_block_data_order 11.ent sha512_block_data_order 12sha512_block_data_order: 13 .frame $29,256,$31 14 .mask 0xc0ff0000,-8 15 .set noreorder 16 dsubu $29,256 17 sd $31,256-1*8($29) 18 sd $30,256-2*8($29) 19 sd $23,256-3*8($29) 20 sd $22,256-4*8($29) 21 sd $21,256-5*8($29) 22 sd $20,256-6*8($29) 23 sd $19,256-7*8($29) 24 sd $18,256-8*8($29) 25 sd $17,256-9*8($29) 26 sd $16,256-10*8($29) 27 dsll $23,$6,7 28 .cplocal $6 29 .cpsetup $25,$0,sha512_block_data_order 30 .set reorder 31 dla $6,K512 # PIC-ified 'load address' 32 33 ld $1,0*8($4) # load context 34 ld $2,1*8($4) 35 ld $3,2*8($4) 36 ld $7,3*8($4) 37 ld $24,4*8($4) 38 ld $25,5*8($4) 39 ld $30,6*8($4) 40 ld $31,7*8($4) 41 42 daddu $23,$5 # pointer to the end of input 43 sd $23,16*8($29) 44 b .Loop 45 46.align 5 47.Loop: 48#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 49 ld $8,($5) 50#else 51 ldl $8,7($5) 52 ldr $8,0($5) 53#endif 54#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 55 ld $9,8($5) 56#else 57 ldl $9,15($5) 58 ldr $9,8($5) 59#endif 60#if defined(_MIPS_ARCH_MIPS64R2) 61 dsbh $8,$8 # byte swap(0) 62 dshd $8,$8 63#else 64 ori $13,$0,0xFF 65 dsll $15,$13,32 66 or $13,$15 # 0x000000FF000000FF 67 and $14,$8,$13 # byte swap(0) 68 dsrl $15,$8,24 69 dsll $14,24 70 and $15,$13 71 dsll $13,8 # 0x0000FF000000FF00 72 or $14,$15 73 and $15,$8,$13 74 dsrl $8,8 75 dsll $15,8 76 and $8,$13 77 or $14,$15 78 or $8,$14 79 dsrl $14,$8,32 80 dsll $8,32 81 or $8,$14 82#endif 83#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 84 xor $15,$25,$30 # 0 85 drotr $13,$24,14 86 daddu $12,$8,$31 87 drotr $14,$24,18 88 and $15,$24 89 drotr $31,$24,41 90 xor $13,$14 91 drotr $14,$1,28 92 xor $15,$30 # Ch(e,f,g) 93 xor $13,$31 # Sigma1(e) 94 95 drotr $31,$1,34 96 daddu $12,$15 97 ld $15,0($6) # K[0] 98 xor $31,$14 99 drotr $14,$1,39 100 daddu $12,$13 101 and $13,$2,$3 102 xor $31,$14 # Sigma0(a) 103 xor $14,$2,$3 104#else 105 daddu $12,$8,$31 # 0 106 dsrl $31,$24,14 107 xor $15,$25,$30 108 dsll $14,$24,23 109 and $15,$24 110 dsrl $13,$24,18 111 xor $31,$14 112 dsll $14,$24,46 113 xor $31,$13 114 dsrl $13,$24,41 115 xor $31,$14 116 dsll $14,$24,50 117 xor $31,$13 118 xor $15,$30 # Ch(e,f,g) 119 xor $13,$14,$31 # Sigma1(e) 120 121 dsrl $31,$1,28 122 daddu $12,$15 123 ld $15,0($6) # K[0] 124 dsll $14,$1,25 125 daddu $12,$13 126 dsrl $13,$1,34 127 xor $31,$14 128 dsll $14,$1,30 129 xor $31,$13 130 dsrl $13,$1,39 131 xor $31,$14 132 dsll $14,$1,36 133 xor $31,$13 134 and $13,$2,$3 135 xor $31,$14 # Sigma0(a) 136 xor $14,$2,$3 137#endif 138 sd $8,0($29) # offload to ring buffer 139 daddu $31,$13 140 and $14,$1 141 daddu $12,$15 # +=K[0] 142 daddu $31,$14 # +=Maj(a,b,c) 143 daddu $7,$12 144 daddu $31,$12 145#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 146 ld $10,16($5) 147#else 148 ldl $10,23($5) 149 ldr $10,16($5) 150#endif 151#if defined(_MIPS_ARCH_MIPS64R2) 152 dsbh $9,$9 # byte swap(1) 153 dshd $9,$9 154#else 155 ori $14,$0,0xFF 156 dsll $16,$14,32 157 or $14,$16 # 0x000000FF000000FF 158 and $15,$9,$14 # byte swap(1) 159 dsrl $16,$9,24 160 dsll $15,24 161 and $16,$14 162 dsll $14,8 # 0x0000FF000000FF00 163 or $15,$16 164 and $16,$9,$14 165 dsrl $9,8 166 dsll $16,8 167 and $9,$14 168 or $15,$16 169 or $9,$15 170 dsrl $15,$9,32 171 dsll $9,32 172 or $9,$15 173#endif 174#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 175 xor $16,$24,$25 # 1 176 drotr $14,$7,14 177 daddu $13,$9,$30 178 drotr $15,$7,18 179 and $16,$7 180 drotr $30,$7,41 181 xor $14,$15 182 drotr $15,$31,28 183 xor $16,$25 # Ch(e,f,g) 184 xor $14,$30 # Sigma1(e) 185 186 drotr $30,$31,34 187 daddu $13,$16 188 ld $16,8($6) # K[1] 189 xor $30,$15 190 drotr $15,$31,39 191 daddu $13,$14 192 and $14,$1,$2 193 xor $30,$15 # Sigma0(a) 194 xor $15,$1,$2 195#else 196 daddu $13,$9,$30 # 1 197 dsrl $30,$7,14 198 xor $16,$24,$25 199 dsll $15,$7,23 200 and $16,$7 201 dsrl $14,$7,18 202 xor $30,$15 203 dsll $15,$7,46 204 xor $30,$14 205 dsrl $14,$7,41 206 xor $30,$15 207 dsll $15,$7,50 208 xor $30,$14 209 xor $16,$25 # Ch(e,f,g) 210 xor $14,$15,$30 # Sigma1(e) 211 212 dsrl $30,$31,28 213 daddu $13,$16 214 ld $16,8($6) # K[1] 215 dsll $15,$31,25 216 daddu $13,$14 217 dsrl $14,$31,34 218 xor $30,$15 219 dsll $15,$31,30 220 xor $30,$14 221 dsrl $14,$31,39 222 xor $30,$15 223 dsll $15,$31,36 224 xor $30,$14 225 and $14,$1,$2 226 xor $30,$15 # Sigma0(a) 227 xor $15,$1,$2 228#endif 229 sd $9,8($29) # offload to ring buffer 230 daddu $30,$14 231 and $15,$31 232 daddu $13,$16 # +=K[1] 233 daddu $30,$15 # +=Maj(a,b,c) 234 daddu $3,$13 235 daddu $30,$13 236#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 237 ld $11,24($5) 238#else 239 ldl $11,31($5) 240 ldr $11,24($5) 241#endif 242#if defined(_MIPS_ARCH_MIPS64R2) 243 dsbh $10,$10 # byte swap(2) 244 dshd $10,$10 245#else 246 ori $15,$0,0xFF 247 dsll $17,$15,32 248 or $15,$17 # 0x000000FF000000FF 249 and $16,$10,$15 # byte swap(2) 250 dsrl $17,$10,24 251 dsll $16,24 252 and $17,$15 253 dsll $15,8 # 0x0000FF000000FF00 254 or $16,$17 255 and $17,$10,$15 256 dsrl $10,8 257 dsll $17,8 258 and $10,$15 259 or $16,$17 260 or $10,$16 261 dsrl $16,$10,32 262 dsll $10,32 263 or $10,$16 264#endif 265#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 266 xor $17,$7,$24 # 2 267 drotr $15,$3,14 268 daddu $14,$10,$25 269 drotr $16,$3,18 270 and $17,$3 271 drotr $25,$3,41 272 xor $15,$16 273 drotr $16,$30,28 274 xor $17,$24 # Ch(e,f,g) 275 xor $15,$25 # Sigma1(e) 276 277 drotr $25,$30,34 278 daddu $14,$17 279 ld $17,16($6) # K[2] 280 xor $25,$16 281 drotr $16,$30,39 282 daddu $14,$15 283 and $15,$31,$1 284 xor $25,$16 # Sigma0(a) 285 xor $16,$31,$1 286#else 287 daddu $14,$10,$25 # 2 288 dsrl $25,$3,14 289 xor $17,$7,$24 290 dsll $16,$3,23 291 and $17,$3 292 dsrl $15,$3,18 293 xor $25,$16 294 dsll $16,$3,46 295 xor $25,$15 296 dsrl $15,$3,41 297 xor $25,$16 298 dsll $16,$3,50 299 xor $25,$15 300 xor $17,$24 # Ch(e,f,g) 301 xor $15,$16,$25 # Sigma1(e) 302 303 dsrl $25,$30,28 304 daddu $14,$17 305 ld $17,16($6) # K[2] 306 dsll $16,$30,25 307 daddu $14,$15 308 dsrl $15,$30,34 309 xor $25,$16 310 dsll $16,$30,30 311 xor $25,$15 312 dsrl $15,$30,39 313 xor $25,$16 314 dsll $16,$30,36 315 xor $25,$15 316 and $15,$31,$1 317 xor $25,$16 # Sigma0(a) 318 xor $16,$31,$1 319#endif 320 sd $10,16($29) # offload to ring buffer 321 daddu $25,$15 322 and $16,$30 323 daddu $14,$17 # +=K[2] 324 daddu $25,$16 # +=Maj(a,b,c) 325 daddu $2,$14 326 daddu $25,$14 327#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 328 ld $12,32($5) 329#else 330 ldl $12,39($5) 331 ldr $12,32($5) 332#endif 333#if defined(_MIPS_ARCH_MIPS64R2) 334 dsbh $11,$11 # byte swap(3) 335 dshd $11,$11 336#else 337 ori $16,$0,0xFF 338 dsll $18,$16,32 339 or $16,$18 # 0x000000FF000000FF 340 and $17,$11,$16 # byte swap(3) 341 dsrl $18,$11,24 342 dsll $17,24 343 and $18,$16 344 dsll $16,8 # 0x0000FF000000FF00 345 or $17,$18 346 and $18,$11,$16 347 dsrl $11,8 348 dsll $18,8 349 and $11,$16 350 or $17,$18 351 or $11,$17 352 dsrl $17,$11,32 353 dsll $11,32 354 or $11,$17 355#endif 356#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 357 xor $18,$3,$7 # 3 358 drotr $16,$2,14 359 daddu $15,$11,$24 360 drotr $17,$2,18 361 and $18,$2 362 drotr $24,$2,41 363 xor $16,$17 364 drotr $17,$25,28 365 xor $18,$7 # Ch(e,f,g) 366 xor $16,$24 # Sigma1(e) 367 368 drotr $24,$25,34 369 daddu $15,$18 370 ld $18,24($6) # K[3] 371 xor $24,$17 372 drotr $17,$25,39 373 daddu $15,$16 374 and $16,$30,$31 375 xor $24,$17 # Sigma0(a) 376 xor $17,$30,$31 377#else 378 daddu $15,$11,$24 # 3 379 dsrl $24,$2,14 380 xor $18,$3,$7 381 dsll $17,$2,23 382 and $18,$2 383 dsrl $16,$2,18 384 xor $24,$17 385 dsll $17,$2,46 386 xor $24,$16 387 dsrl $16,$2,41 388 xor $24,$17 389 dsll $17,$2,50 390 xor $24,$16 391 xor $18,$7 # Ch(e,f,g) 392 xor $16,$17,$24 # Sigma1(e) 393 394 dsrl $24,$25,28 395 daddu $15,$18 396 ld $18,24($6) # K[3] 397 dsll $17,$25,25 398 daddu $15,$16 399 dsrl $16,$25,34 400 xor $24,$17 401 dsll $17,$25,30 402 xor $24,$16 403 dsrl $16,$25,39 404 xor $24,$17 405 dsll $17,$25,36 406 xor $24,$16 407 and $16,$30,$31 408 xor $24,$17 # Sigma0(a) 409 xor $17,$30,$31 410#endif 411 sd $11,24($29) # offload to ring buffer 412 daddu $24,$16 413 and $17,$25 414 daddu $15,$18 # +=K[3] 415 daddu $24,$17 # +=Maj(a,b,c) 416 daddu $1,$15 417 daddu $24,$15 418#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 419 ld $13,40($5) 420#else 421 ldl $13,47($5) 422 ldr $13,40($5) 423#endif 424#if defined(_MIPS_ARCH_MIPS64R2) 425 dsbh $12,$12 # byte swap(4) 426 dshd $12,$12 427#else 428 ori $17,$0,0xFF 429 dsll $19,$17,32 430 or $17,$19 # 0x000000FF000000FF 431 and $18,$12,$17 # byte swap(4) 432 dsrl $19,$12,24 433 dsll $18,24 434 and $19,$17 435 dsll $17,8 # 0x0000FF000000FF00 436 or $18,$19 437 and $19,$12,$17 438 dsrl $12,8 439 dsll $19,8 440 and $12,$17 441 or $18,$19 442 or $12,$18 443 dsrl $18,$12,32 444 dsll $12,32 445 or $12,$18 446#endif 447#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 448 xor $19,$2,$3 # 4 449 drotr $17,$1,14 450 daddu $16,$12,$7 451 drotr $18,$1,18 452 and $19,$1 453 drotr $7,$1,41 454 xor $17,$18 455 drotr $18,$24,28 456 xor $19,$3 # Ch(e,f,g) 457 xor $17,$7 # Sigma1(e) 458 459 drotr $7,$24,34 460 daddu $16,$19 461 ld $19,32($6) # K[4] 462 xor $7,$18 463 drotr $18,$24,39 464 daddu $16,$17 465 and $17,$25,$30 466 xor $7,$18 # Sigma0(a) 467 xor $18,$25,$30 468#else 469 daddu $16,$12,$7 # 4 470 dsrl $7,$1,14 471 xor $19,$2,$3 472 dsll $18,$1,23 473 and $19,$1 474 dsrl $17,$1,18 475 xor $7,$18 476 dsll $18,$1,46 477 xor $7,$17 478 dsrl $17,$1,41 479 xor $7,$18 480 dsll $18,$1,50 481 xor $7,$17 482 xor $19,$3 # Ch(e,f,g) 483 xor $17,$18,$7 # Sigma1(e) 484 485 dsrl $7,$24,28 486 daddu $16,$19 487 ld $19,32($6) # K[4] 488 dsll $18,$24,25 489 daddu $16,$17 490 dsrl $17,$24,34 491 xor $7,$18 492 dsll $18,$24,30 493 xor $7,$17 494 dsrl $17,$24,39 495 xor $7,$18 496 dsll $18,$24,36 497 xor $7,$17 498 and $17,$25,$30 499 xor $7,$18 # Sigma0(a) 500 xor $18,$25,$30 501#endif 502 sd $12,32($29) # offload to ring buffer 503 daddu $7,$17 504 and $18,$24 505 daddu $16,$19 # +=K[4] 506 daddu $7,$18 # +=Maj(a,b,c) 507 daddu $31,$16 508 daddu $7,$16 509#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 510 ld $14,48($5) 511#else 512 ldl $14,55($5) 513 ldr $14,48($5) 514#endif 515#if defined(_MIPS_ARCH_MIPS64R2) 516 dsbh $13,$13 # byte swap(5) 517 dshd $13,$13 518#else 519 ori $18,$0,0xFF 520 dsll $20,$18,32 521 or $18,$20 # 0x000000FF000000FF 522 and $19,$13,$18 # byte swap(5) 523 dsrl $20,$13,24 524 dsll $19,24 525 and $20,$18 526 dsll $18,8 # 0x0000FF000000FF00 527 or $19,$20 528 and $20,$13,$18 529 dsrl $13,8 530 dsll $20,8 531 and $13,$18 532 or $19,$20 533 or $13,$19 534 dsrl $19,$13,32 535 dsll $13,32 536 or $13,$19 537#endif 538#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 539 xor $20,$1,$2 # 5 540 drotr $18,$31,14 541 daddu $17,$13,$3 542 drotr $19,$31,18 543 and $20,$31 544 drotr $3,$31,41 545 xor $18,$19 546 drotr $19,$7,28 547 xor $20,$2 # Ch(e,f,g) 548 xor $18,$3 # Sigma1(e) 549 550 drotr $3,$7,34 551 daddu $17,$20 552 ld $20,40($6) # K[5] 553 xor $3,$19 554 drotr $19,$7,39 555 daddu $17,$18 556 and $18,$24,$25 557 xor $3,$19 # Sigma0(a) 558 xor $19,$24,$25 559#else 560 daddu $17,$13,$3 # 5 561 dsrl $3,$31,14 562 xor $20,$1,$2 563 dsll $19,$31,23 564 and $20,$31 565 dsrl $18,$31,18 566 xor $3,$19 567 dsll $19,$31,46 568 xor $3,$18 569 dsrl $18,$31,41 570 xor $3,$19 571 dsll $19,$31,50 572 xor $3,$18 573 xor $20,$2 # Ch(e,f,g) 574 xor $18,$19,$3 # Sigma1(e) 575 576 dsrl $3,$7,28 577 daddu $17,$20 578 ld $20,40($6) # K[5] 579 dsll $19,$7,25 580 daddu $17,$18 581 dsrl $18,$7,34 582 xor $3,$19 583 dsll $19,$7,30 584 xor $3,$18 585 dsrl $18,$7,39 586 xor $3,$19 587 dsll $19,$7,36 588 xor $3,$18 589 and $18,$24,$25 590 xor $3,$19 # Sigma0(a) 591 xor $19,$24,$25 592#endif 593 sd $13,40($29) # offload to ring buffer 594 daddu $3,$18 595 and $19,$7 596 daddu $17,$20 # +=K[5] 597 daddu $3,$19 # +=Maj(a,b,c) 598 daddu $30,$17 599 daddu $3,$17 600#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 601 ld $15,56($5) 602#else 603 ldl $15,63($5) 604 ldr $15,56($5) 605#endif 606#if defined(_MIPS_ARCH_MIPS64R2) 607 dsbh $14,$14 # byte swap(6) 608 dshd $14,$14 609#else 610 ori $19,$0,0xFF 611 dsll $21,$19,32 612 or $19,$21 # 0x000000FF000000FF 613 and $20,$14,$19 # byte swap(6) 614 dsrl $21,$14,24 615 dsll $20,24 616 and $21,$19 617 dsll $19,8 # 0x0000FF000000FF00 618 or $20,$21 619 and $21,$14,$19 620 dsrl $14,8 621 dsll $21,8 622 and $14,$19 623 or $20,$21 624 or $14,$20 625 dsrl $20,$14,32 626 dsll $14,32 627 or $14,$20 628#endif 629#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 630 xor $21,$31,$1 # 6 631 drotr $19,$30,14 632 daddu $18,$14,$2 633 drotr $20,$30,18 634 and $21,$30 635 drotr $2,$30,41 636 xor $19,$20 637 drotr $20,$3,28 638 xor $21,$1 # Ch(e,f,g) 639 xor $19,$2 # Sigma1(e) 640 641 drotr $2,$3,34 642 daddu $18,$21 643 ld $21,48($6) # K[6] 644 xor $2,$20 645 drotr $20,$3,39 646 daddu $18,$19 647 and $19,$7,$24 648 xor $2,$20 # Sigma0(a) 649 xor $20,$7,$24 650#else 651 daddu $18,$14,$2 # 6 652 dsrl $2,$30,14 653 xor $21,$31,$1 654 dsll $20,$30,23 655 and $21,$30 656 dsrl $19,$30,18 657 xor $2,$20 658 dsll $20,$30,46 659 xor $2,$19 660 dsrl $19,$30,41 661 xor $2,$20 662 dsll $20,$30,50 663 xor $2,$19 664 xor $21,$1 # Ch(e,f,g) 665 xor $19,$20,$2 # Sigma1(e) 666 667 dsrl $2,$3,28 668 daddu $18,$21 669 ld $21,48($6) # K[6] 670 dsll $20,$3,25 671 daddu $18,$19 672 dsrl $19,$3,34 673 xor $2,$20 674 dsll $20,$3,30 675 xor $2,$19 676 dsrl $19,$3,39 677 xor $2,$20 678 dsll $20,$3,36 679 xor $2,$19 680 and $19,$7,$24 681 xor $2,$20 # Sigma0(a) 682 xor $20,$7,$24 683#endif 684 sd $14,48($29) # offload to ring buffer 685 daddu $2,$19 686 and $20,$3 687 daddu $18,$21 # +=K[6] 688 daddu $2,$20 # +=Maj(a,b,c) 689 daddu $25,$18 690 daddu $2,$18 691#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 692 ld $16,64($5) 693#else 694 ldl $16,71($5) 695 ldr $16,64($5) 696#endif 697#if defined(_MIPS_ARCH_MIPS64R2) 698 dsbh $15,$15 # byte swap(7) 699 dshd $15,$15 700#else 701 ori $20,$0,0xFF 702 dsll $22,$20,32 703 or $20,$22 # 0x000000FF000000FF 704 and $21,$15,$20 # byte swap(7) 705 dsrl $22,$15,24 706 dsll $21,24 707 and $22,$20 708 dsll $20,8 # 0x0000FF000000FF00 709 or $21,$22 710 and $22,$15,$20 711 dsrl $15,8 712 dsll $22,8 713 and $15,$20 714 or $21,$22 715 or $15,$21 716 dsrl $21,$15,32 717 dsll $15,32 718 or $15,$21 719#endif 720#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 721 xor $22,$30,$31 # 7 722 drotr $20,$25,14 723 daddu $19,$15,$1 724 drotr $21,$25,18 725 and $22,$25 726 drotr $1,$25,41 727 xor $20,$21 728 drotr $21,$2,28 729 xor $22,$31 # Ch(e,f,g) 730 xor $20,$1 # Sigma1(e) 731 732 drotr $1,$2,34 733 daddu $19,$22 734 ld $22,56($6) # K[7] 735 xor $1,$21 736 drotr $21,$2,39 737 daddu $19,$20 738 and $20,$3,$7 739 xor $1,$21 # Sigma0(a) 740 xor $21,$3,$7 741#else 742 daddu $19,$15,$1 # 7 743 dsrl $1,$25,14 744 xor $22,$30,$31 745 dsll $21,$25,23 746 and $22,$25 747 dsrl $20,$25,18 748 xor $1,$21 749 dsll $21,$25,46 750 xor $1,$20 751 dsrl $20,$25,41 752 xor $1,$21 753 dsll $21,$25,50 754 xor $1,$20 755 xor $22,$31 # Ch(e,f,g) 756 xor $20,$21,$1 # Sigma1(e) 757 758 dsrl $1,$2,28 759 daddu $19,$22 760 ld $22,56($6) # K[7] 761 dsll $21,$2,25 762 daddu $19,$20 763 dsrl $20,$2,34 764 xor $1,$21 765 dsll $21,$2,30 766 xor $1,$20 767 dsrl $20,$2,39 768 xor $1,$21 769 dsll $21,$2,36 770 xor $1,$20 771 and $20,$3,$7 772 xor $1,$21 # Sigma0(a) 773 xor $21,$3,$7 774#endif 775 sd $15,56($29) # offload to ring buffer 776 daddu $1,$20 777 and $21,$2 778 daddu $19,$22 # +=K[7] 779 daddu $1,$21 # +=Maj(a,b,c) 780 daddu $24,$19 781 daddu $1,$19 782#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 783 ld $17,72($5) 784#else 785 ldl $17,79($5) 786 ldr $17,72($5) 787#endif 788#if defined(_MIPS_ARCH_MIPS64R2) 789 dsbh $16,$16 # byte swap(8) 790 dshd $16,$16 791#else 792 ori $21,$0,0xFF 793 dsll $23,$21,32 794 or $21,$23 # 0x000000FF000000FF 795 and $22,$16,$21 # byte swap(8) 796 dsrl $23,$16,24 797 dsll $22,24 798 and $23,$21 799 dsll $21,8 # 0x0000FF000000FF00 800 or $22,$23 801 and $23,$16,$21 802 dsrl $16,8 803 dsll $23,8 804 and $16,$21 805 or $22,$23 806 or $16,$22 807 dsrl $22,$16,32 808 dsll $16,32 809 or $16,$22 810#endif 811#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 812 xor $23,$25,$30 # 8 813 drotr $21,$24,14 814 daddu $20,$16,$31 815 drotr $22,$24,18 816 and $23,$24 817 drotr $31,$24,41 818 xor $21,$22 819 drotr $22,$1,28 820 xor $23,$30 # Ch(e,f,g) 821 xor $21,$31 # Sigma1(e) 822 823 drotr $31,$1,34 824 daddu $20,$23 825 ld $23,64($6) # K[8] 826 xor $31,$22 827 drotr $22,$1,39 828 daddu $20,$21 829 and $21,$2,$3 830 xor $31,$22 # Sigma0(a) 831 xor $22,$2,$3 832#else 833 daddu $20,$16,$31 # 8 834 dsrl $31,$24,14 835 xor $23,$25,$30 836 dsll $22,$24,23 837 and $23,$24 838 dsrl $21,$24,18 839 xor $31,$22 840 dsll $22,$24,46 841 xor $31,$21 842 dsrl $21,$24,41 843 xor $31,$22 844 dsll $22,$24,50 845 xor $31,$21 846 xor $23,$30 # Ch(e,f,g) 847 xor $21,$22,$31 # Sigma1(e) 848 849 dsrl $31,$1,28 850 daddu $20,$23 851 ld $23,64($6) # K[8] 852 dsll $22,$1,25 853 daddu $20,$21 854 dsrl $21,$1,34 855 xor $31,$22 856 dsll $22,$1,30 857 xor $31,$21 858 dsrl $21,$1,39 859 xor $31,$22 860 dsll $22,$1,36 861 xor $31,$21 862 and $21,$2,$3 863 xor $31,$22 # Sigma0(a) 864 xor $22,$2,$3 865#endif 866 sd $16,64($29) # offload to ring buffer 867 daddu $31,$21 868 and $22,$1 869 daddu $20,$23 # +=K[8] 870 daddu $31,$22 # +=Maj(a,b,c) 871 daddu $7,$20 872 daddu $31,$20 873#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 874 ld $18,80($5) 875#else 876 ldl $18,87($5) 877 ldr $18,80($5) 878#endif 879#if defined(_MIPS_ARCH_MIPS64R2) 880 dsbh $17,$17 # byte swap(9) 881 dshd $17,$17 882#else 883 ori $22,$0,0xFF 884 dsll $8,$22,32 885 or $22,$8 # 0x000000FF000000FF 886 and $23,$17,$22 # byte swap(9) 887 dsrl $8,$17,24 888 dsll $23,24 889 and $8,$22 890 dsll $22,8 # 0x0000FF000000FF00 891 or $23,$8 892 and $8,$17,$22 893 dsrl $17,8 894 dsll $8,8 895 and $17,$22 896 or $23,$8 897 or $17,$23 898 dsrl $23,$17,32 899 dsll $17,32 900 or $17,$23 901#endif 902#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 903 xor $8,$24,$25 # 9 904 drotr $22,$7,14 905 daddu $21,$17,$30 906 drotr $23,$7,18 907 and $8,$7 908 drotr $30,$7,41 909 xor $22,$23 910 drotr $23,$31,28 911 xor $8,$25 # Ch(e,f,g) 912 xor $22,$30 # Sigma1(e) 913 914 drotr $30,$31,34 915 daddu $21,$8 916 ld $8,72($6) # K[9] 917 xor $30,$23 918 drotr $23,$31,39 919 daddu $21,$22 920 and $22,$1,$2 921 xor $30,$23 # Sigma0(a) 922 xor $23,$1,$2 923#else 924 daddu $21,$17,$30 # 9 925 dsrl $30,$7,14 926 xor $8,$24,$25 927 dsll $23,$7,23 928 and $8,$7 929 dsrl $22,$7,18 930 xor $30,$23 931 dsll $23,$7,46 932 xor $30,$22 933 dsrl $22,$7,41 934 xor $30,$23 935 dsll $23,$7,50 936 xor $30,$22 937 xor $8,$25 # Ch(e,f,g) 938 xor $22,$23,$30 # Sigma1(e) 939 940 dsrl $30,$31,28 941 daddu $21,$8 942 ld $8,72($6) # K[9] 943 dsll $23,$31,25 944 daddu $21,$22 945 dsrl $22,$31,34 946 xor $30,$23 947 dsll $23,$31,30 948 xor $30,$22 949 dsrl $22,$31,39 950 xor $30,$23 951 dsll $23,$31,36 952 xor $30,$22 953 and $22,$1,$2 954 xor $30,$23 # Sigma0(a) 955 xor $23,$1,$2 956#endif 957 sd $17,72($29) # offload to ring buffer 958 daddu $30,$22 959 and $23,$31 960 daddu $21,$8 # +=K[9] 961 daddu $30,$23 # +=Maj(a,b,c) 962 daddu $3,$21 963 daddu $30,$21 964#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 965 ld $19,88($5) 966#else 967 ldl $19,95($5) 968 ldr $19,88($5) 969#endif 970#if defined(_MIPS_ARCH_MIPS64R2) 971 dsbh $18,$18 # byte swap(10) 972 dshd $18,$18 973#else 974 ori $23,$0,0xFF 975 dsll $9,$23,32 976 or $23,$9 # 0x000000FF000000FF 977 and $8,$18,$23 # byte swap(10) 978 dsrl $9,$18,24 979 dsll $8,24 980 and $9,$23 981 dsll $23,8 # 0x0000FF000000FF00 982 or $8,$9 983 and $9,$18,$23 984 dsrl $18,8 985 dsll $9,8 986 and $18,$23 987 or $8,$9 988 or $18,$8 989 dsrl $8,$18,32 990 dsll $18,32 991 or $18,$8 992#endif 993#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 994 xor $9,$7,$24 # 10 995 drotr $23,$3,14 996 daddu $22,$18,$25 997 drotr $8,$3,18 998 and $9,$3 999 drotr $25,$3,41 1000 xor $23,$8 1001 drotr $8,$30,28 1002 xor $9,$24 # Ch(e,f,g) 1003 xor $23,$25 # Sigma1(e) 1004 1005 drotr $25,$30,34 1006 daddu $22,$9 1007 ld $9,80($6) # K[10] 1008 xor $25,$8 1009 drotr $8,$30,39 1010 daddu $22,$23 1011 and $23,$31,$1 1012 xor $25,$8 # Sigma0(a) 1013 xor $8,$31,$1 1014#else 1015 daddu $22,$18,$25 # 10 1016 dsrl $25,$3,14 1017 xor $9,$7,$24 1018 dsll $8,$3,23 1019 and $9,$3 1020 dsrl $23,$3,18 1021 xor $25,$8 1022 dsll $8,$3,46 1023 xor $25,$23 1024 dsrl $23,$3,41 1025 xor $25,$8 1026 dsll $8,$3,50 1027 xor $25,$23 1028 xor $9,$24 # Ch(e,f,g) 1029 xor $23,$8,$25 # Sigma1(e) 1030 1031 dsrl $25,$30,28 1032 daddu $22,$9 1033 ld $9,80($6) # K[10] 1034 dsll $8,$30,25 1035 daddu $22,$23 1036 dsrl $23,$30,34 1037 xor $25,$8 1038 dsll $8,$30,30 1039 xor $25,$23 1040 dsrl $23,$30,39 1041 xor $25,$8 1042 dsll $8,$30,36 1043 xor $25,$23 1044 and $23,$31,$1 1045 xor $25,$8 # Sigma0(a) 1046 xor $8,$31,$1 1047#endif 1048 sd $18,80($29) # offload to ring buffer 1049 daddu $25,$23 1050 and $8,$30 1051 daddu $22,$9 # +=K[10] 1052 daddu $25,$8 # +=Maj(a,b,c) 1053 daddu $2,$22 1054 daddu $25,$22 1055#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1056 ld $20,96($5) 1057#else 1058 ldl $20,103($5) 1059 ldr $20,96($5) 1060#endif 1061#if defined(_MIPS_ARCH_MIPS64R2) 1062 dsbh $19,$19 # byte swap(11) 1063 dshd $19,$19 1064#else 1065 ori $8,$0,0xFF 1066 dsll $10,$8,32 1067 or $8,$10 # 0x000000FF000000FF 1068 and $9,$19,$8 # byte swap(11) 1069 dsrl $10,$19,24 1070 dsll $9,24 1071 and $10,$8 1072 dsll $8,8 # 0x0000FF000000FF00 1073 or $9,$10 1074 and $10,$19,$8 1075 dsrl $19,8 1076 dsll $10,8 1077 and $19,$8 1078 or $9,$10 1079 or $19,$9 1080 dsrl $9,$19,32 1081 dsll $19,32 1082 or $19,$9 1083#endif 1084#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1085 xor $10,$3,$7 # 11 1086 drotr $8,$2,14 1087 daddu $23,$19,$24 1088 drotr $9,$2,18 1089 and $10,$2 1090 drotr $24,$2,41 1091 xor $8,$9 1092 drotr $9,$25,28 1093 xor $10,$7 # Ch(e,f,g) 1094 xor $8,$24 # Sigma1(e) 1095 1096 drotr $24,$25,34 1097 daddu $23,$10 1098 ld $10,88($6) # K[11] 1099 xor $24,$9 1100 drotr $9,$25,39 1101 daddu $23,$8 1102 and $8,$30,$31 1103 xor $24,$9 # Sigma0(a) 1104 xor $9,$30,$31 1105#else 1106 daddu $23,$19,$24 # 11 1107 dsrl $24,$2,14 1108 xor $10,$3,$7 1109 dsll $9,$2,23 1110 and $10,$2 1111 dsrl $8,$2,18 1112 xor $24,$9 1113 dsll $9,$2,46 1114 xor $24,$8 1115 dsrl $8,$2,41 1116 xor $24,$9 1117 dsll $9,$2,50 1118 xor $24,$8 1119 xor $10,$7 # Ch(e,f,g) 1120 xor $8,$9,$24 # Sigma1(e) 1121 1122 dsrl $24,$25,28 1123 daddu $23,$10 1124 ld $10,88($6) # K[11] 1125 dsll $9,$25,25 1126 daddu $23,$8 1127 dsrl $8,$25,34 1128 xor $24,$9 1129 dsll $9,$25,30 1130 xor $24,$8 1131 dsrl $8,$25,39 1132 xor $24,$9 1133 dsll $9,$25,36 1134 xor $24,$8 1135 and $8,$30,$31 1136 xor $24,$9 # Sigma0(a) 1137 xor $9,$30,$31 1138#endif 1139 sd $19,88($29) # offload to ring buffer 1140 daddu $24,$8 1141 and $9,$25 1142 daddu $23,$10 # +=K[11] 1143 daddu $24,$9 # +=Maj(a,b,c) 1144 daddu $1,$23 1145 daddu $24,$23 1146#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1147 ld $21,104($5) 1148#else 1149 ldl $21,111($5) 1150 ldr $21,104($5) 1151#endif 1152#if defined(_MIPS_ARCH_MIPS64R2) 1153 dsbh $20,$20 # byte swap(12) 1154 dshd $20,$20 1155#else 1156 ori $9,$0,0xFF 1157 dsll $11,$9,32 1158 or $9,$11 # 0x000000FF000000FF 1159 and $10,$20,$9 # byte swap(12) 1160 dsrl $11,$20,24 1161 dsll $10,24 1162 and $11,$9 1163 dsll $9,8 # 0x0000FF000000FF00 1164 or $10,$11 1165 and $11,$20,$9 1166 dsrl $20,8 1167 dsll $11,8 1168 and $20,$9 1169 or $10,$11 1170 or $20,$10 1171 dsrl $10,$20,32 1172 dsll $20,32 1173 or $20,$10 1174#endif 1175#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1176 xor $11,$2,$3 # 12 1177 drotr $9,$1,14 1178 daddu $8,$20,$7 1179 drotr $10,$1,18 1180 and $11,$1 1181 drotr $7,$1,41 1182 xor $9,$10 1183 drotr $10,$24,28 1184 xor $11,$3 # Ch(e,f,g) 1185 xor $9,$7 # Sigma1(e) 1186 1187 drotr $7,$24,34 1188 daddu $8,$11 1189 ld $11,96($6) # K[12] 1190 xor $7,$10 1191 drotr $10,$24,39 1192 daddu $8,$9 1193 and $9,$25,$30 1194 xor $7,$10 # Sigma0(a) 1195 xor $10,$25,$30 1196#else 1197 daddu $8,$20,$7 # 12 1198 dsrl $7,$1,14 1199 xor $11,$2,$3 1200 dsll $10,$1,23 1201 and $11,$1 1202 dsrl $9,$1,18 1203 xor $7,$10 1204 dsll $10,$1,46 1205 xor $7,$9 1206 dsrl $9,$1,41 1207 xor $7,$10 1208 dsll $10,$1,50 1209 xor $7,$9 1210 xor $11,$3 # Ch(e,f,g) 1211 xor $9,$10,$7 # Sigma1(e) 1212 1213 dsrl $7,$24,28 1214 daddu $8,$11 1215 ld $11,96($6) # K[12] 1216 dsll $10,$24,25 1217 daddu $8,$9 1218 dsrl $9,$24,34 1219 xor $7,$10 1220 dsll $10,$24,30 1221 xor $7,$9 1222 dsrl $9,$24,39 1223 xor $7,$10 1224 dsll $10,$24,36 1225 xor $7,$9 1226 and $9,$25,$30 1227 xor $7,$10 # Sigma0(a) 1228 xor $10,$25,$30 1229#endif 1230 sd $20,96($29) # offload to ring buffer 1231 daddu $7,$9 1232 and $10,$24 1233 daddu $8,$11 # +=K[12] 1234 daddu $7,$10 # +=Maj(a,b,c) 1235 daddu $31,$8 1236 daddu $7,$8 1237#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1238 ld $22,112($5) 1239#else 1240 ldl $22,119($5) 1241 ldr $22,112($5) 1242#endif 1243#if defined(_MIPS_ARCH_MIPS64R2) 1244 dsbh $21,$21 # byte swap(13) 1245 dshd $21,$21 1246#else 1247 ori $10,$0,0xFF 1248 dsll $12,$10,32 1249 or $10,$12 # 0x000000FF000000FF 1250 and $11,$21,$10 # byte swap(13) 1251 dsrl $12,$21,24 1252 dsll $11,24 1253 and $12,$10 1254 dsll $10,8 # 0x0000FF000000FF00 1255 or $11,$12 1256 and $12,$21,$10 1257 dsrl $21,8 1258 dsll $12,8 1259 and $21,$10 1260 or $11,$12 1261 or $21,$11 1262 dsrl $11,$21,32 1263 dsll $21,32 1264 or $21,$11 1265#endif 1266#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1267 xor $12,$1,$2 # 13 1268 drotr $10,$31,14 1269 daddu $9,$21,$3 1270 drotr $11,$31,18 1271 and $12,$31 1272 drotr $3,$31,41 1273 xor $10,$11 1274 drotr $11,$7,28 1275 xor $12,$2 # Ch(e,f,g) 1276 xor $10,$3 # Sigma1(e) 1277 1278 drotr $3,$7,34 1279 daddu $9,$12 1280 ld $12,104($6) # K[13] 1281 xor $3,$11 1282 drotr $11,$7,39 1283 daddu $9,$10 1284 and $10,$24,$25 1285 xor $3,$11 # Sigma0(a) 1286 xor $11,$24,$25 1287#else 1288 daddu $9,$21,$3 # 13 1289 dsrl $3,$31,14 1290 xor $12,$1,$2 1291 dsll $11,$31,23 1292 and $12,$31 1293 dsrl $10,$31,18 1294 xor $3,$11 1295 dsll $11,$31,46 1296 xor $3,$10 1297 dsrl $10,$31,41 1298 xor $3,$11 1299 dsll $11,$31,50 1300 xor $3,$10 1301 xor $12,$2 # Ch(e,f,g) 1302 xor $10,$11,$3 # Sigma1(e) 1303 1304 dsrl $3,$7,28 1305 daddu $9,$12 1306 ld $12,104($6) # K[13] 1307 dsll $11,$7,25 1308 daddu $9,$10 1309 dsrl $10,$7,34 1310 xor $3,$11 1311 dsll $11,$7,30 1312 xor $3,$10 1313 dsrl $10,$7,39 1314 xor $3,$11 1315 dsll $11,$7,36 1316 xor $3,$10 1317 and $10,$24,$25 1318 xor $3,$11 # Sigma0(a) 1319 xor $11,$24,$25 1320#endif 1321 sd $21,104($29) # offload to ring buffer 1322 daddu $3,$10 1323 and $11,$7 1324 daddu $9,$12 # +=K[13] 1325 daddu $3,$11 # +=Maj(a,b,c) 1326 daddu $30,$9 1327 daddu $3,$9 1328 ld $8,0($29) # prefetch from ring buffer 1329#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) 1330 ld $23,120($5) 1331#else 1332 ldl $23,127($5) 1333 ldr $23,120($5) 1334#endif 1335#if defined(_MIPS_ARCH_MIPS64R2) 1336 dsbh $22,$22 # byte swap(14) 1337 dshd $22,$22 1338#else 1339 ori $11,$0,0xFF 1340 dsll $13,$11,32 1341 or $11,$13 # 0x000000FF000000FF 1342 and $12,$22,$11 # byte swap(14) 1343 dsrl $13,$22,24 1344 dsll $12,24 1345 and $13,$11 1346 dsll $11,8 # 0x0000FF000000FF00 1347 or $12,$13 1348 and $13,$22,$11 1349 dsrl $22,8 1350 dsll $13,8 1351 and $22,$11 1352 or $12,$13 1353 or $22,$12 1354 dsrl $12,$22,32 1355 dsll $22,32 1356 or $22,$12 1357#endif 1358#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1359 xor $13,$31,$1 # 14 1360 drotr $11,$30,14 1361 daddu $10,$22,$2 1362 drotr $12,$30,18 1363 and $13,$30 1364 drotr $2,$30,41 1365 xor $11,$12 1366 drotr $12,$3,28 1367 xor $13,$1 # Ch(e,f,g) 1368 xor $11,$2 # Sigma1(e) 1369 1370 drotr $2,$3,34 1371 daddu $10,$13 1372 ld $13,112($6) # K[14] 1373 xor $2,$12 1374 drotr $12,$3,39 1375 daddu $10,$11 1376 and $11,$7,$24 1377 xor $2,$12 # Sigma0(a) 1378 xor $12,$7,$24 1379#else 1380 daddu $10,$22,$2 # 14 1381 dsrl $2,$30,14 1382 xor $13,$31,$1 1383 dsll $12,$30,23 1384 and $13,$30 1385 dsrl $11,$30,18 1386 xor $2,$12 1387 dsll $12,$30,46 1388 xor $2,$11 1389 dsrl $11,$30,41 1390 xor $2,$12 1391 dsll $12,$30,50 1392 xor $2,$11 1393 xor $13,$1 # Ch(e,f,g) 1394 xor $11,$12,$2 # Sigma1(e) 1395 1396 dsrl $2,$3,28 1397 daddu $10,$13 1398 ld $13,112($6) # K[14] 1399 dsll $12,$3,25 1400 daddu $10,$11 1401 dsrl $11,$3,34 1402 xor $2,$12 1403 dsll $12,$3,30 1404 xor $2,$11 1405 dsrl $11,$3,39 1406 xor $2,$12 1407 dsll $12,$3,36 1408 xor $2,$11 1409 and $11,$7,$24 1410 xor $2,$12 # Sigma0(a) 1411 xor $12,$7,$24 1412#endif 1413 sd $22,112($29) # offload to ring buffer 1414 daddu $2,$11 1415 and $12,$3 1416 daddu $10,$13 # +=K[14] 1417 daddu $2,$12 # +=Maj(a,b,c) 1418 daddu $25,$10 1419 daddu $2,$10 1420 ld $9,8($29) # prefetch from ring buffer 1421#if defined(_MIPS_ARCH_MIPS64R2) 1422 dsbh $23,$23 # byte swap(15) 1423 dshd $23,$23 1424#else 1425 ori $12,$0,0xFF 1426 dsll $14,$12,32 1427 or $12,$14 # 0x000000FF000000FF 1428 and $13,$23,$12 # byte swap(15) 1429 dsrl $14,$23,24 1430 dsll $13,24 1431 and $14,$12 1432 dsll $12,8 # 0x0000FF000000FF00 1433 or $13,$14 1434 and $14,$23,$12 1435 dsrl $23,8 1436 dsll $14,8 1437 and $23,$12 1438 or $13,$14 1439 or $23,$13 1440 dsrl $13,$23,32 1441 dsll $23,32 1442 or $23,$13 1443#endif 1444#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1445 xor $14,$30,$31 # 15 1446 drotr $12,$25,14 1447 daddu $11,$23,$1 1448 drotr $13,$25,18 1449 and $14,$25 1450 drotr $1,$25,41 1451 xor $12,$13 1452 drotr $13,$2,28 1453 xor $14,$31 # Ch(e,f,g) 1454 xor $12,$1 # Sigma1(e) 1455 1456 drotr $1,$2,34 1457 daddu $11,$14 1458 ld $14,120($6) # K[15] 1459 xor $1,$13 1460 drotr $13,$2,39 1461 daddu $11,$12 1462 and $12,$3,$7 1463 xor $1,$13 # Sigma0(a) 1464 xor $13,$3,$7 1465#else 1466 daddu $11,$23,$1 # 15 1467 dsrl $1,$25,14 1468 xor $14,$30,$31 1469 dsll $13,$25,23 1470 and $14,$25 1471 dsrl $12,$25,18 1472 xor $1,$13 1473 dsll $13,$25,46 1474 xor $1,$12 1475 dsrl $12,$25,41 1476 xor $1,$13 1477 dsll $13,$25,50 1478 xor $1,$12 1479 xor $14,$31 # Ch(e,f,g) 1480 xor $12,$13,$1 # Sigma1(e) 1481 1482 dsrl $1,$2,28 1483 daddu $11,$14 1484 ld $14,120($6) # K[15] 1485 dsll $13,$2,25 1486 daddu $11,$12 1487 dsrl $12,$2,34 1488 xor $1,$13 1489 dsll $13,$2,30 1490 xor $1,$12 1491 dsrl $12,$2,39 1492 xor $1,$13 1493 dsll $13,$2,36 1494 xor $1,$12 1495 and $12,$3,$7 1496 xor $1,$13 # Sigma0(a) 1497 xor $13,$3,$7 1498#endif 1499 sd $23,120($29) # offload to ring buffer 1500 daddu $1,$12 1501 and $13,$2 1502 daddu $11,$14 # +=K[15] 1503 daddu $1,$13 # +=Maj(a,b,c) 1504 daddu $24,$11 1505 daddu $1,$11 1506 ld $10,16($29) # prefetch from ring buffer 1507 b .L16_xx 1508.align 4 1509.L16_xx: 1510#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1511 dsrl $14,$9,7 # Xupdate(16) 1512 drotr $12,$9,1 1513 daddu $8,$17 # +=X[i+9] 1514 xor $14,$12 1515 drotr $12,$9,8 1516 1517 dsrl $15,$22,6 1518 drotr $13,$22,19 1519 xor $14,$12 # sigma0(X[i+1]) 1520 drotr $12,$22,61 1521 xor $15,$13 1522 daddu $8,$14 1523#else 1524 dsrl $14,$9,7 # Xupdate(16) 1525 daddu $8,$17 # +=X[i+9] 1526 dsll $13,$9,56 1527 dsrl $12,$9,1 1528 xor $14,$13 1529 dsll $13,7 1530 xor $14,$12 1531 dsrl $12,$9,8 1532 xor $14,$13 1533 1534 dsrl $15,$22,6 1535 xor $14,$12 # sigma0(X[i+1]) 1536 dsll $13,$22,3 1537 daddu $8,$14 1538 dsrl $12,$22,19 1539 xor $15,$13 1540 dsll $13,42 1541 xor $15,$12 1542 dsrl $12,$22,61 1543 xor $15,$13 1544#endif 1545 xor $15,$12 # sigma1(X[i+14]) 1546 daddu $8,$15 1547#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1548 xor $15,$25,$30 # 16 1549 drotr $13,$24,14 1550 daddu $12,$8,$31 1551 drotr $14,$24,18 1552 and $15,$24 1553 drotr $31,$24,41 1554 xor $13,$14 1555 drotr $14,$1,28 1556 xor $15,$30 # Ch(e,f,g) 1557 xor $13,$31 # Sigma1(e) 1558 1559 drotr $31,$1,34 1560 daddu $12,$15 1561 ld $15,128($6) # K[16] 1562 xor $31,$14 1563 drotr $14,$1,39 1564 daddu $12,$13 1565 and $13,$2,$3 1566 xor $31,$14 # Sigma0(a) 1567 xor $14,$2,$3 1568#else 1569 daddu $12,$8,$31 # 16 1570 dsrl $31,$24,14 1571 xor $15,$25,$30 1572 dsll $14,$24,23 1573 and $15,$24 1574 dsrl $13,$24,18 1575 xor $31,$14 1576 dsll $14,$24,46 1577 xor $31,$13 1578 dsrl $13,$24,41 1579 xor $31,$14 1580 dsll $14,$24,50 1581 xor $31,$13 1582 xor $15,$30 # Ch(e,f,g) 1583 xor $13,$14,$31 # Sigma1(e) 1584 1585 dsrl $31,$1,28 1586 daddu $12,$15 1587 ld $15,128($6) # K[16] 1588 dsll $14,$1,25 1589 daddu $12,$13 1590 dsrl $13,$1,34 1591 xor $31,$14 1592 dsll $14,$1,30 1593 xor $31,$13 1594 dsrl $13,$1,39 1595 xor $31,$14 1596 dsll $14,$1,36 1597 xor $31,$13 1598 and $13,$2,$3 1599 xor $31,$14 # Sigma0(a) 1600 xor $14,$2,$3 1601#endif 1602 sd $8,0($29) # offload to ring buffer 1603 daddu $31,$13 1604 and $14,$1 1605 daddu $12,$15 # +=K[16] 1606 daddu $31,$14 # +=Maj(a,b,c) 1607 daddu $7,$12 1608 daddu $31,$12 1609 ld $11,24($29) # prefetch from ring buffer 1610#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1611 dsrl $15,$10,7 # Xupdate(17) 1612 drotr $13,$10,1 1613 daddu $9,$18 # +=X[i+9] 1614 xor $15,$13 1615 drotr $13,$10,8 1616 1617 dsrl $16,$23,6 1618 drotr $14,$23,19 1619 xor $15,$13 # sigma0(X[i+1]) 1620 drotr $13,$23,61 1621 xor $16,$14 1622 daddu $9,$15 1623#else 1624 dsrl $15,$10,7 # Xupdate(17) 1625 daddu $9,$18 # +=X[i+9] 1626 dsll $14,$10,56 1627 dsrl $13,$10,1 1628 xor $15,$14 1629 dsll $14,7 1630 xor $15,$13 1631 dsrl $13,$10,8 1632 xor $15,$14 1633 1634 dsrl $16,$23,6 1635 xor $15,$13 # sigma0(X[i+1]) 1636 dsll $14,$23,3 1637 daddu $9,$15 1638 dsrl $13,$23,19 1639 xor $16,$14 1640 dsll $14,42 1641 xor $16,$13 1642 dsrl $13,$23,61 1643 xor $16,$14 1644#endif 1645 xor $16,$13 # sigma1(X[i+14]) 1646 daddu $9,$16 1647#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1648 xor $16,$24,$25 # 17 1649 drotr $14,$7,14 1650 daddu $13,$9,$30 1651 drotr $15,$7,18 1652 and $16,$7 1653 drotr $30,$7,41 1654 xor $14,$15 1655 drotr $15,$31,28 1656 xor $16,$25 # Ch(e,f,g) 1657 xor $14,$30 # Sigma1(e) 1658 1659 drotr $30,$31,34 1660 daddu $13,$16 1661 ld $16,136($6) # K[17] 1662 xor $30,$15 1663 drotr $15,$31,39 1664 daddu $13,$14 1665 and $14,$1,$2 1666 xor $30,$15 # Sigma0(a) 1667 xor $15,$1,$2 1668#else 1669 daddu $13,$9,$30 # 17 1670 dsrl $30,$7,14 1671 xor $16,$24,$25 1672 dsll $15,$7,23 1673 and $16,$7 1674 dsrl $14,$7,18 1675 xor $30,$15 1676 dsll $15,$7,46 1677 xor $30,$14 1678 dsrl $14,$7,41 1679 xor $30,$15 1680 dsll $15,$7,50 1681 xor $30,$14 1682 xor $16,$25 # Ch(e,f,g) 1683 xor $14,$15,$30 # Sigma1(e) 1684 1685 dsrl $30,$31,28 1686 daddu $13,$16 1687 ld $16,136($6) # K[17] 1688 dsll $15,$31,25 1689 daddu $13,$14 1690 dsrl $14,$31,34 1691 xor $30,$15 1692 dsll $15,$31,30 1693 xor $30,$14 1694 dsrl $14,$31,39 1695 xor $30,$15 1696 dsll $15,$31,36 1697 xor $30,$14 1698 and $14,$1,$2 1699 xor $30,$15 # Sigma0(a) 1700 xor $15,$1,$2 1701#endif 1702 sd $9,8($29) # offload to ring buffer 1703 daddu $30,$14 1704 and $15,$31 1705 daddu $13,$16 # +=K[17] 1706 daddu $30,$15 # +=Maj(a,b,c) 1707 daddu $3,$13 1708 daddu $30,$13 1709 ld $12,32($29) # prefetch from ring buffer 1710#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1711 dsrl $16,$11,7 # Xupdate(18) 1712 drotr $14,$11,1 1713 daddu $10,$19 # +=X[i+9] 1714 xor $16,$14 1715 drotr $14,$11,8 1716 1717 dsrl $17,$8,6 1718 drotr $15,$8,19 1719 xor $16,$14 # sigma0(X[i+1]) 1720 drotr $14,$8,61 1721 xor $17,$15 1722 daddu $10,$16 1723#else 1724 dsrl $16,$11,7 # Xupdate(18) 1725 daddu $10,$19 # +=X[i+9] 1726 dsll $15,$11,56 1727 dsrl $14,$11,1 1728 xor $16,$15 1729 dsll $15,7 1730 xor $16,$14 1731 dsrl $14,$11,8 1732 xor $16,$15 1733 1734 dsrl $17,$8,6 1735 xor $16,$14 # sigma0(X[i+1]) 1736 dsll $15,$8,3 1737 daddu $10,$16 1738 dsrl $14,$8,19 1739 xor $17,$15 1740 dsll $15,42 1741 xor $17,$14 1742 dsrl $14,$8,61 1743 xor $17,$15 1744#endif 1745 xor $17,$14 # sigma1(X[i+14]) 1746 daddu $10,$17 1747#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1748 xor $17,$7,$24 # 18 1749 drotr $15,$3,14 1750 daddu $14,$10,$25 1751 drotr $16,$3,18 1752 and $17,$3 1753 drotr $25,$3,41 1754 xor $15,$16 1755 drotr $16,$30,28 1756 xor $17,$24 # Ch(e,f,g) 1757 xor $15,$25 # Sigma1(e) 1758 1759 drotr $25,$30,34 1760 daddu $14,$17 1761 ld $17,144($6) # K[18] 1762 xor $25,$16 1763 drotr $16,$30,39 1764 daddu $14,$15 1765 and $15,$31,$1 1766 xor $25,$16 # Sigma0(a) 1767 xor $16,$31,$1 1768#else 1769 daddu $14,$10,$25 # 18 1770 dsrl $25,$3,14 1771 xor $17,$7,$24 1772 dsll $16,$3,23 1773 and $17,$3 1774 dsrl $15,$3,18 1775 xor $25,$16 1776 dsll $16,$3,46 1777 xor $25,$15 1778 dsrl $15,$3,41 1779 xor $25,$16 1780 dsll $16,$3,50 1781 xor $25,$15 1782 xor $17,$24 # Ch(e,f,g) 1783 xor $15,$16,$25 # Sigma1(e) 1784 1785 dsrl $25,$30,28 1786 daddu $14,$17 1787 ld $17,144($6) # K[18] 1788 dsll $16,$30,25 1789 daddu $14,$15 1790 dsrl $15,$30,34 1791 xor $25,$16 1792 dsll $16,$30,30 1793 xor $25,$15 1794 dsrl $15,$30,39 1795 xor $25,$16 1796 dsll $16,$30,36 1797 xor $25,$15 1798 and $15,$31,$1 1799 xor $25,$16 # Sigma0(a) 1800 xor $16,$31,$1 1801#endif 1802 sd $10,16($29) # offload to ring buffer 1803 daddu $25,$15 1804 and $16,$30 1805 daddu $14,$17 # +=K[18] 1806 daddu $25,$16 # +=Maj(a,b,c) 1807 daddu $2,$14 1808 daddu $25,$14 1809 ld $13,40($29) # prefetch from ring buffer 1810#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1811 dsrl $17,$12,7 # Xupdate(19) 1812 drotr $15,$12,1 1813 daddu $11,$20 # +=X[i+9] 1814 xor $17,$15 1815 drotr $15,$12,8 1816 1817 dsrl $18,$9,6 1818 drotr $16,$9,19 1819 xor $17,$15 # sigma0(X[i+1]) 1820 drotr $15,$9,61 1821 xor $18,$16 1822 daddu $11,$17 1823#else 1824 dsrl $17,$12,7 # Xupdate(19) 1825 daddu $11,$20 # +=X[i+9] 1826 dsll $16,$12,56 1827 dsrl $15,$12,1 1828 xor $17,$16 1829 dsll $16,7 1830 xor $17,$15 1831 dsrl $15,$12,8 1832 xor $17,$16 1833 1834 dsrl $18,$9,6 1835 xor $17,$15 # sigma0(X[i+1]) 1836 dsll $16,$9,3 1837 daddu $11,$17 1838 dsrl $15,$9,19 1839 xor $18,$16 1840 dsll $16,42 1841 xor $18,$15 1842 dsrl $15,$9,61 1843 xor $18,$16 1844#endif 1845 xor $18,$15 # sigma1(X[i+14]) 1846 daddu $11,$18 1847#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1848 xor $18,$3,$7 # 19 1849 drotr $16,$2,14 1850 daddu $15,$11,$24 1851 drotr $17,$2,18 1852 and $18,$2 1853 drotr $24,$2,41 1854 xor $16,$17 1855 drotr $17,$25,28 1856 xor $18,$7 # Ch(e,f,g) 1857 xor $16,$24 # Sigma1(e) 1858 1859 drotr $24,$25,34 1860 daddu $15,$18 1861 ld $18,152($6) # K[19] 1862 xor $24,$17 1863 drotr $17,$25,39 1864 daddu $15,$16 1865 and $16,$30,$31 1866 xor $24,$17 # Sigma0(a) 1867 xor $17,$30,$31 1868#else 1869 daddu $15,$11,$24 # 19 1870 dsrl $24,$2,14 1871 xor $18,$3,$7 1872 dsll $17,$2,23 1873 and $18,$2 1874 dsrl $16,$2,18 1875 xor $24,$17 1876 dsll $17,$2,46 1877 xor $24,$16 1878 dsrl $16,$2,41 1879 xor $24,$17 1880 dsll $17,$2,50 1881 xor $24,$16 1882 xor $18,$7 # Ch(e,f,g) 1883 xor $16,$17,$24 # Sigma1(e) 1884 1885 dsrl $24,$25,28 1886 daddu $15,$18 1887 ld $18,152($6) # K[19] 1888 dsll $17,$25,25 1889 daddu $15,$16 1890 dsrl $16,$25,34 1891 xor $24,$17 1892 dsll $17,$25,30 1893 xor $24,$16 1894 dsrl $16,$25,39 1895 xor $24,$17 1896 dsll $17,$25,36 1897 xor $24,$16 1898 and $16,$30,$31 1899 xor $24,$17 # Sigma0(a) 1900 xor $17,$30,$31 1901#endif 1902 sd $11,24($29) # offload to ring buffer 1903 daddu $24,$16 1904 and $17,$25 1905 daddu $15,$18 # +=K[19] 1906 daddu $24,$17 # +=Maj(a,b,c) 1907 daddu $1,$15 1908 daddu $24,$15 1909 ld $14,48($29) # prefetch from ring buffer 1910#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1911 dsrl $18,$13,7 # Xupdate(20) 1912 drotr $16,$13,1 1913 daddu $12,$21 # +=X[i+9] 1914 xor $18,$16 1915 drotr $16,$13,8 1916 1917 dsrl $19,$10,6 1918 drotr $17,$10,19 1919 xor $18,$16 # sigma0(X[i+1]) 1920 drotr $16,$10,61 1921 xor $19,$17 1922 daddu $12,$18 1923#else 1924 dsrl $18,$13,7 # Xupdate(20) 1925 daddu $12,$21 # +=X[i+9] 1926 dsll $17,$13,56 1927 dsrl $16,$13,1 1928 xor $18,$17 1929 dsll $17,7 1930 xor $18,$16 1931 dsrl $16,$13,8 1932 xor $18,$17 1933 1934 dsrl $19,$10,6 1935 xor $18,$16 # sigma0(X[i+1]) 1936 dsll $17,$10,3 1937 daddu $12,$18 1938 dsrl $16,$10,19 1939 xor $19,$17 1940 dsll $17,42 1941 xor $19,$16 1942 dsrl $16,$10,61 1943 xor $19,$17 1944#endif 1945 xor $19,$16 # sigma1(X[i+14]) 1946 daddu $12,$19 1947#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 1948 xor $19,$2,$3 # 20 1949 drotr $17,$1,14 1950 daddu $16,$12,$7 1951 drotr $18,$1,18 1952 and $19,$1 1953 drotr $7,$1,41 1954 xor $17,$18 1955 drotr $18,$24,28 1956 xor $19,$3 # Ch(e,f,g) 1957 xor $17,$7 # Sigma1(e) 1958 1959 drotr $7,$24,34 1960 daddu $16,$19 1961 ld $19,160($6) # K[20] 1962 xor $7,$18 1963 drotr $18,$24,39 1964 daddu $16,$17 1965 and $17,$25,$30 1966 xor $7,$18 # Sigma0(a) 1967 xor $18,$25,$30 1968#else 1969 daddu $16,$12,$7 # 20 1970 dsrl $7,$1,14 1971 xor $19,$2,$3 1972 dsll $18,$1,23 1973 and $19,$1 1974 dsrl $17,$1,18 1975 xor $7,$18 1976 dsll $18,$1,46 1977 xor $7,$17 1978 dsrl $17,$1,41 1979 xor $7,$18 1980 dsll $18,$1,50 1981 xor $7,$17 1982 xor $19,$3 # Ch(e,f,g) 1983 xor $17,$18,$7 # Sigma1(e) 1984 1985 dsrl $7,$24,28 1986 daddu $16,$19 1987 ld $19,160($6) # K[20] 1988 dsll $18,$24,25 1989 daddu $16,$17 1990 dsrl $17,$24,34 1991 xor $7,$18 1992 dsll $18,$24,30 1993 xor $7,$17 1994 dsrl $17,$24,39 1995 xor $7,$18 1996 dsll $18,$24,36 1997 xor $7,$17 1998 and $17,$25,$30 1999 xor $7,$18 # Sigma0(a) 2000 xor $18,$25,$30 2001#endif 2002 sd $12,32($29) # offload to ring buffer 2003 daddu $7,$17 2004 and $18,$24 2005 daddu $16,$19 # +=K[20] 2006 daddu $7,$18 # +=Maj(a,b,c) 2007 daddu $31,$16 2008 daddu $7,$16 2009 ld $15,56($29) # prefetch from ring buffer 2010#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2011 dsrl $19,$14,7 # Xupdate(21) 2012 drotr $17,$14,1 2013 daddu $13,$22 # +=X[i+9] 2014 xor $19,$17 2015 drotr $17,$14,8 2016 2017 dsrl $20,$11,6 2018 drotr $18,$11,19 2019 xor $19,$17 # sigma0(X[i+1]) 2020 drotr $17,$11,61 2021 xor $20,$18 2022 daddu $13,$19 2023#else 2024 dsrl $19,$14,7 # Xupdate(21) 2025 daddu $13,$22 # +=X[i+9] 2026 dsll $18,$14,56 2027 dsrl $17,$14,1 2028 xor $19,$18 2029 dsll $18,7 2030 xor $19,$17 2031 dsrl $17,$14,8 2032 xor $19,$18 2033 2034 dsrl $20,$11,6 2035 xor $19,$17 # sigma0(X[i+1]) 2036 dsll $18,$11,3 2037 daddu $13,$19 2038 dsrl $17,$11,19 2039 xor $20,$18 2040 dsll $18,42 2041 xor $20,$17 2042 dsrl $17,$11,61 2043 xor $20,$18 2044#endif 2045 xor $20,$17 # sigma1(X[i+14]) 2046 daddu $13,$20 2047#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2048 xor $20,$1,$2 # 21 2049 drotr $18,$31,14 2050 daddu $17,$13,$3 2051 drotr $19,$31,18 2052 and $20,$31 2053 drotr $3,$31,41 2054 xor $18,$19 2055 drotr $19,$7,28 2056 xor $20,$2 # Ch(e,f,g) 2057 xor $18,$3 # Sigma1(e) 2058 2059 drotr $3,$7,34 2060 daddu $17,$20 2061 ld $20,168($6) # K[21] 2062 xor $3,$19 2063 drotr $19,$7,39 2064 daddu $17,$18 2065 and $18,$24,$25 2066 xor $3,$19 # Sigma0(a) 2067 xor $19,$24,$25 2068#else 2069 daddu $17,$13,$3 # 21 2070 dsrl $3,$31,14 2071 xor $20,$1,$2 2072 dsll $19,$31,23 2073 and $20,$31 2074 dsrl $18,$31,18 2075 xor $3,$19 2076 dsll $19,$31,46 2077 xor $3,$18 2078 dsrl $18,$31,41 2079 xor $3,$19 2080 dsll $19,$31,50 2081 xor $3,$18 2082 xor $20,$2 # Ch(e,f,g) 2083 xor $18,$19,$3 # Sigma1(e) 2084 2085 dsrl $3,$7,28 2086 daddu $17,$20 2087 ld $20,168($6) # K[21] 2088 dsll $19,$7,25 2089 daddu $17,$18 2090 dsrl $18,$7,34 2091 xor $3,$19 2092 dsll $19,$7,30 2093 xor $3,$18 2094 dsrl $18,$7,39 2095 xor $3,$19 2096 dsll $19,$7,36 2097 xor $3,$18 2098 and $18,$24,$25 2099 xor $3,$19 # Sigma0(a) 2100 xor $19,$24,$25 2101#endif 2102 sd $13,40($29) # offload to ring buffer 2103 daddu $3,$18 2104 and $19,$7 2105 daddu $17,$20 # +=K[21] 2106 daddu $3,$19 # +=Maj(a,b,c) 2107 daddu $30,$17 2108 daddu $3,$17 2109 ld $16,64($29) # prefetch from ring buffer 2110#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2111 dsrl $20,$15,7 # Xupdate(22) 2112 drotr $18,$15,1 2113 daddu $14,$23 # +=X[i+9] 2114 xor $20,$18 2115 drotr $18,$15,8 2116 2117 dsrl $21,$12,6 2118 drotr $19,$12,19 2119 xor $20,$18 # sigma0(X[i+1]) 2120 drotr $18,$12,61 2121 xor $21,$19 2122 daddu $14,$20 2123#else 2124 dsrl $20,$15,7 # Xupdate(22) 2125 daddu $14,$23 # +=X[i+9] 2126 dsll $19,$15,56 2127 dsrl $18,$15,1 2128 xor $20,$19 2129 dsll $19,7 2130 xor $20,$18 2131 dsrl $18,$15,8 2132 xor $20,$19 2133 2134 dsrl $21,$12,6 2135 xor $20,$18 # sigma0(X[i+1]) 2136 dsll $19,$12,3 2137 daddu $14,$20 2138 dsrl $18,$12,19 2139 xor $21,$19 2140 dsll $19,42 2141 xor $21,$18 2142 dsrl $18,$12,61 2143 xor $21,$19 2144#endif 2145 xor $21,$18 # sigma1(X[i+14]) 2146 daddu $14,$21 2147#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2148 xor $21,$31,$1 # 22 2149 drotr $19,$30,14 2150 daddu $18,$14,$2 2151 drotr $20,$30,18 2152 and $21,$30 2153 drotr $2,$30,41 2154 xor $19,$20 2155 drotr $20,$3,28 2156 xor $21,$1 # Ch(e,f,g) 2157 xor $19,$2 # Sigma1(e) 2158 2159 drotr $2,$3,34 2160 daddu $18,$21 2161 ld $21,176($6) # K[22] 2162 xor $2,$20 2163 drotr $20,$3,39 2164 daddu $18,$19 2165 and $19,$7,$24 2166 xor $2,$20 # Sigma0(a) 2167 xor $20,$7,$24 2168#else 2169 daddu $18,$14,$2 # 22 2170 dsrl $2,$30,14 2171 xor $21,$31,$1 2172 dsll $20,$30,23 2173 and $21,$30 2174 dsrl $19,$30,18 2175 xor $2,$20 2176 dsll $20,$30,46 2177 xor $2,$19 2178 dsrl $19,$30,41 2179 xor $2,$20 2180 dsll $20,$30,50 2181 xor $2,$19 2182 xor $21,$1 # Ch(e,f,g) 2183 xor $19,$20,$2 # Sigma1(e) 2184 2185 dsrl $2,$3,28 2186 daddu $18,$21 2187 ld $21,176($6) # K[22] 2188 dsll $20,$3,25 2189 daddu $18,$19 2190 dsrl $19,$3,34 2191 xor $2,$20 2192 dsll $20,$3,30 2193 xor $2,$19 2194 dsrl $19,$3,39 2195 xor $2,$20 2196 dsll $20,$3,36 2197 xor $2,$19 2198 and $19,$7,$24 2199 xor $2,$20 # Sigma0(a) 2200 xor $20,$7,$24 2201#endif 2202 sd $14,48($29) # offload to ring buffer 2203 daddu $2,$19 2204 and $20,$3 2205 daddu $18,$21 # +=K[22] 2206 daddu $2,$20 # +=Maj(a,b,c) 2207 daddu $25,$18 2208 daddu $2,$18 2209 ld $17,72($29) # prefetch from ring buffer 2210#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2211 dsrl $21,$16,7 # Xupdate(23) 2212 drotr $19,$16,1 2213 daddu $15,$8 # +=X[i+9] 2214 xor $21,$19 2215 drotr $19,$16,8 2216 2217 dsrl $22,$13,6 2218 drotr $20,$13,19 2219 xor $21,$19 # sigma0(X[i+1]) 2220 drotr $19,$13,61 2221 xor $22,$20 2222 daddu $15,$21 2223#else 2224 dsrl $21,$16,7 # Xupdate(23) 2225 daddu $15,$8 # +=X[i+9] 2226 dsll $20,$16,56 2227 dsrl $19,$16,1 2228 xor $21,$20 2229 dsll $20,7 2230 xor $21,$19 2231 dsrl $19,$16,8 2232 xor $21,$20 2233 2234 dsrl $22,$13,6 2235 xor $21,$19 # sigma0(X[i+1]) 2236 dsll $20,$13,3 2237 daddu $15,$21 2238 dsrl $19,$13,19 2239 xor $22,$20 2240 dsll $20,42 2241 xor $22,$19 2242 dsrl $19,$13,61 2243 xor $22,$20 2244#endif 2245 xor $22,$19 # sigma1(X[i+14]) 2246 daddu $15,$22 2247#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2248 xor $22,$30,$31 # 23 2249 drotr $20,$25,14 2250 daddu $19,$15,$1 2251 drotr $21,$25,18 2252 and $22,$25 2253 drotr $1,$25,41 2254 xor $20,$21 2255 drotr $21,$2,28 2256 xor $22,$31 # Ch(e,f,g) 2257 xor $20,$1 # Sigma1(e) 2258 2259 drotr $1,$2,34 2260 daddu $19,$22 2261 ld $22,184($6) # K[23] 2262 xor $1,$21 2263 drotr $21,$2,39 2264 daddu $19,$20 2265 and $20,$3,$7 2266 xor $1,$21 # Sigma0(a) 2267 xor $21,$3,$7 2268#else 2269 daddu $19,$15,$1 # 23 2270 dsrl $1,$25,14 2271 xor $22,$30,$31 2272 dsll $21,$25,23 2273 and $22,$25 2274 dsrl $20,$25,18 2275 xor $1,$21 2276 dsll $21,$25,46 2277 xor $1,$20 2278 dsrl $20,$25,41 2279 xor $1,$21 2280 dsll $21,$25,50 2281 xor $1,$20 2282 xor $22,$31 # Ch(e,f,g) 2283 xor $20,$21,$1 # Sigma1(e) 2284 2285 dsrl $1,$2,28 2286 daddu $19,$22 2287 ld $22,184($6) # K[23] 2288 dsll $21,$2,25 2289 daddu $19,$20 2290 dsrl $20,$2,34 2291 xor $1,$21 2292 dsll $21,$2,30 2293 xor $1,$20 2294 dsrl $20,$2,39 2295 xor $1,$21 2296 dsll $21,$2,36 2297 xor $1,$20 2298 and $20,$3,$7 2299 xor $1,$21 # Sigma0(a) 2300 xor $21,$3,$7 2301#endif 2302 sd $15,56($29) # offload to ring buffer 2303 daddu $1,$20 2304 and $21,$2 2305 daddu $19,$22 # +=K[23] 2306 daddu $1,$21 # +=Maj(a,b,c) 2307 daddu $24,$19 2308 daddu $1,$19 2309 ld $18,80($29) # prefetch from ring buffer 2310#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2311 dsrl $22,$17,7 # Xupdate(24) 2312 drotr $20,$17,1 2313 daddu $16,$9 # +=X[i+9] 2314 xor $22,$20 2315 drotr $20,$17,8 2316 2317 dsrl $23,$14,6 2318 drotr $21,$14,19 2319 xor $22,$20 # sigma0(X[i+1]) 2320 drotr $20,$14,61 2321 xor $23,$21 2322 daddu $16,$22 2323#else 2324 dsrl $22,$17,7 # Xupdate(24) 2325 daddu $16,$9 # +=X[i+9] 2326 dsll $21,$17,56 2327 dsrl $20,$17,1 2328 xor $22,$21 2329 dsll $21,7 2330 xor $22,$20 2331 dsrl $20,$17,8 2332 xor $22,$21 2333 2334 dsrl $23,$14,6 2335 xor $22,$20 # sigma0(X[i+1]) 2336 dsll $21,$14,3 2337 daddu $16,$22 2338 dsrl $20,$14,19 2339 xor $23,$21 2340 dsll $21,42 2341 xor $23,$20 2342 dsrl $20,$14,61 2343 xor $23,$21 2344#endif 2345 xor $23,$20 # sigma1(X[i+14]) 2346 daddu $16,$23 2347#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2348 xor $23,$25,$30 # 24 2349 drotr $21,$24,14 2350 daddu $20,$16,$31 2351 drotr $22,$24,18 2352 and $23,$24 2353 drotr $31,$24,41 2354 xor $21,$22 2355 drotr $22,$1,28 2356 xor $23,$30 # Ch(e,f,g) 2357 xor $21,$31 # Sigma1(e) 2358 2359 drotr $31,$1,34 2360 daddu $20,$23 2361 ld $23,192($6) # K[24] 2362 xor $31,$22 2363 drotr $22,$1,39 2364 daddu $20,$21 2365 and $21,$2,$3 2366 xor $31,$22 # Sigma0(a) 2367 xor $22,$2,$3 2368#else 2369 daddu $20,$16,$31 # 24 2370 dsrl $31,$24,14 2371 xor $23,$25,$30 2372 dsll $22,$24,23 2373 and $23,$24 2374 dsrl $21,$24,18 2375 xor $31,$22 2376 dsll $22,$24,46 2377 xor $31,$21 2378 dsrl $21,$24,41 2379 xor $31,$22 2380 dsll $22,$24,50 2381 xor $31,$21 2382 xor $23,$30 # Ch(e,f,g) 2383 xor $21,$22,$31 # Sigma1(e) 2384 2385 dsrl $31,$1,28 2386 daddu $20,$23 2387 ld $23,192($6) # K[24] 2388 dsll $22,$1,25 2389 daddu $20,$21 2390 dsrl $21,$1,34 2391 xor $31,$22 2392 dsll $22,$1,30 2393 xor $31,$21 2394 dsrl $21,$1,39 2395 xor $31,$22 2396 dsll $22,$1,36 2397 xor $31,$21 2398 and $21,$2,$3 2399 xor $31,$22 # Sigma0(a) 2400 xor $22,$2,$3 2401#endif 2402 sd $16,64($29) # offload to ring buffer 2403 daddu $31,$21 2404 and $22,$1 2405 daddu $20,$23 # +=K[24] 2406 daddu $31,$22 # +=Maj(a,b,c) 2407 daddu $7,$20 2408 daddu $31,$20 2409 ld $19,88($29) # prefetch from ring buffer 2410#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2411 dsrl $23,$18,7 # Xupdate(25) 2412 drotr $21,$18,1 2413 daddu $17,$10 # +=X[i+9] 2414 xor $23,$21 2415 drotr $21,$18,8 2416 2417 dsrl $8,$15,6 2418 drotr $22,$15,19 2419 xor $23,$21 # sigma0(X[i+1]) 2420 drotr $21,$15,61 2421 xor $8,$22 2422 daddu $17,$23 2423#else 2424 dsrl $23,$18,7 # Xupdate(25) 2425 daddu $17,$10 # +=X[i+9] 2426 dsll $22,$18,56 2427 dsrl $21,$18,1 2428 xor $23,$22 2429 dsll $22,7 2430 xor $23,$21 2431 dsrl $21,$18,8 2432 xor $23,$22 2433 2434 dsrl $8,$15,6 2435 xor $23,$21 # sigma0(X[i+1]) 2436 dsll $22,$15,3 2437 daddu $17,$23 2438 dsrl $21,$15,19 2439 xor $8,$22 2440 dsll $22,42 2441 xor $8,$21 2442 dsrl $21,$15,61 2443 xor $8,$22 2444#endif 2445 xor $8,$21 # sigma1(X[i+14]) 2446 daddu $17,$8 2447#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2448 xor $8,$24,$25 # 25 2449 drotr $22,$7,14 2450 daddu $21,$17,$30 2451 drotr $23,$7,18 2452 and $8,$7 2453 drotr $30,$7,41 2454 xor $22,$23 2455 drotr $23,$31,28 2456 xor $8,$25 # Ch(e,f,g) 2457 xor $22,$30 # Sigma1(e) 2458 2459 drotr $30,$31,34 2460 daddu $21,$8 2461 ld $8,200($6) # K[25] 2462 xor $30,$23 2463 drotr $23,$31,39 2464 daddu $21,$22 2465 and $22,$1,$2 2466 xor $30,$23 # Sigma0(a) 2467 xor $23,$1,$2 2468#else 2469 daddu $21,$17,$30 # 25 2470 dsrl $30,$7,14 2471 xor $8,$24,$25 2472 dsll $23,$7,23 2473 and $8,$7 2474 dsrl $22,$7,18 2475 xor $30,$23 2476 dsll $23,$7,46 2477 xor $30,$22 2478 dsrl $22,$7,41 2479 xor $30,$23 2480 dsll $23,$7,50 2481 xor $30,$22 2482 xor $8,$25 # Ch(e,f,g) 2483 xor $22,$23,$30 # Sigma1(e) 2484 2485 dsrl $30,$31,28 2486 daddu $21,$8 2487 ld $8,200($6) # K[25] 2488 dsll $23,$31,25 2489 daddu $21,$22 2490 dsrl $22,$31,34 2491 xor $30,$23 2492 dsll $23,$31,30 2493 xor $30,$22 2494 dsrl $22,$31,39 2495 xor $30,$23 2496 dsll $23,$31,36 2497 xor $30,$22 2498 and $22,$1,$2 2499 xor $30,$23 # Sigma0(a) 2500 xor $23,$1,$2 2501#endif 2502 sd $17,72($29) # offload to ring buffer 2503 daddu $30,$22 2504 and $23,$31 2505 daddu $21,$8 # +=K[25] 2506 daddu $30,$23 # +=Maj(a,b,c) 2507 daddu $3,$21 2508 daddu $30,$21 2509 ld $20,96($29) # prefetch from ring buffer 2510#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2511 dsrl $8,$19,7 # Xupdate(26) 2512 drotr $22,$19,1 2513 daddu $18,$11 # +=X[i+9] 2514 xor $8,$22 2515 drotr $22,$19,8 2516 2517 dsrl $9,$16,6 2518 drotr $23,$16,19 2519 xor $8,$22 # sigma0(X[i+1]) 2520 drotr $22,$16,61 2521 xor $9,$23 2522 daddu $18,$8 2523#else 2524 dsrl $8,$19,7 # Xupdate(26) 2525 daddu $18,$11 # +=X[i+9] 2526 dsll $23,$19,56 2527 dsrl $22,$19,1 2528 xor $8,$23 2529 dsll $23,7 2530 xor $8,$22 2531 dsrl $22,$19,8 2532 xor $8,$23 2533 2534 dsrl $9,$16,6 2535 xor $8,$22 # sigma0(X[i+1]) 2536 dsll $23,$16,3 2537 daddu $18,$8 2538 dsrl $22,$16,19 2539 xor $9,$23 2540 dsll $23,42 2541 xor $9,$22 2542 dsrl $22,$16,61 2543 xor $9,$23 2544#endif 2545 xor $9,$22 # sigma1(X[i+14]) 2546 daddu $18,$9 2547#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2548 xor $9,$7,$24 # 26 2549 drotr $23,$3,14 2550 daddu $22,$18,$25 2551 drotr $8,$3,18 2552 and $9,$3 2553 drotr $25,$3,41 2554 xor $23,$8 2555 drotr $8,$30,28 2556 xor $9,$24 # Ch(e,f,g) 2557 xor $23,$25 # Sigma1(e) 2558 2559 drotr $25,$30,34 2560 daddu $22,$9 2561 ld $9,208($6) # K[26] 2562 xor $25,$8 2563 drotr $8,$30,39 2564 daddu $22,$23 2565 and $23,$31,$1 2566 xor $25,$8 # Sigma0(a) 2567 xor $8,$31,$1 2568#else 2569 daddu $22,$18,$25 # 26 2570 dsrl $25,$3,14 2571 xor $9,$7,$24 2572 dsll $8,$3,23 2573 and $9,$3 2574 dsrl $23,$3,18 2575 xor $25,$8 2576 dsll $8,$3,46 2577 xor $25,$23 2578 dsrl $23,$3,41 2579 xor $25,$8 2580 dsll $8,$3,50 2581 xor $25,$23 2582 xor $9,$24 # Ch(e,f,g) 2583 xor $23,$8,$25 # Sigma1(e) 2584 2585 dsrl $25,$30,28 2586 daddu $22,$9 2587 ld $9,208($6) # K[26] 2588 dsll $8,$30,25 2589 daddu $22,$23 2590 dsrl $23,$30,34 2591 xor $25,$8 2592 dsll $8,$30,30 2593 xor $25,$23 2594 dsrl $23,$30,39 2595 xor $25,$8 2596 dsll $8,$30,36 2597 xor $25,$23 2598 and $23,$31,$1 2599 xor $25,$8 # Sigma0(a) 2600 xor $8,$31,$1 2601#endif 2602 sd $18,80($29) # offload to ring buffer 2603 daddu $25,$23 2604 and $8,$30 2605 daddu $22,$9 # +=K[26] 2606 daddu $25,$8 # +=Maj(a,b,c) 2607 daddu $2,$22 2608 daddu $25,$22 2609 ld $21,104($29) # prefetch from ring buffer 2610#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2611 dsrl $9,$20,7 # Xupdate(27) 2612 drotr $23,$20,1 2613 daddu $19,$12 # +=X[i+9] 2614 xor $9,$23 2615 drotr $23,$20,8 2616 2617 dsrl $10,$17,6 2618 drotr $8,$17,19 2619 xor $9,$23 # sigma0(X[i+1]) 2620 drotr $23,$17,61 2621 xor $10,$8 2622 daddu $19,$9 2623#else 2624 dsrl $9,$20,7 # Xupdate(27) 2625 daddu $19,$12 # +=X[i+9] 2626 dsll $8,$20,56 2627 dsrl $23,$20,1 2628 xor $9,$8 2629 dsll $8,7 2630 xor $9,$23 2631 dsrl $23,$20,8 2632 xor $9,$8 2633 2634 dsrl $10,$17,6 2635 xor $9,$23 # sigma0(X[i+1]) 2636 dsll $8,$17,3 2637 daddu $19,$9 2638 dsrl $23,$17,19 2639 xor $10,$8 2640 dsll $8,42 2641 xor $10,$23 2642 dsrl $23,$17,61 2643 xor $10,$8 2644#endif 2645 xor $10,$23 # sigma1(X[i+14]) 2646 daddu $19,$10 2647#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2648 xor $10,$3,$7 # 27 2649 drotr $8,$2,14 2650 daddu $23,$19,$24 2651 drotr $9,$2,18 2652 and $10,$2 2653 drotr $24,$2,41 2654 xor $8,$9 2655 drotr $9,$25,28 2656 xor $10,$7 # Ch(e,f,g) 2657 xor $8,$24 # Sigma1(e) 2658 2659 drotr $24,$25,34 2660 daddu $23,$10 2661 ld $10,216($6) # K[27] 2662 xor $24,$9 2663 drotr $9,$25,39 2664 daddu $23,$8 2665 and $8,$30,$31 2666 xor $24,$9 # Sigma0(a) 2667 xor $9,$30,$31 2668#else 2669 daddu $23,$19,$24 # 27 2670 dsrl $24,$2,14 2671 xor $10,$3,$7 2672 dsll $9,$2,23 2673 and $10,$2 2674 dsrl $8,$2,18 2675 xor $24,$9 2676 dsll $9,$2,46 2677 xor $24,$8 2678 dsrl $8,$2,41 2679 xor $24,$9 2680 dsll $9,$2,50 2681 xor $24,$8 2682 xor $10,$7 # Ch(e,f,g) 2683 xor $8,$9,$24 # Sigma1(e) 2684 2685 dsrl $24,$25,28 2686 daddu $23,$10 2687 ld $10,216($6) # K[27] 2688 dsll $9,$25,25 2689 daddu $23,$8 2690 dsrl $8,$25,34 2691 xor $24,$9 2692 dsll $9,$25,30 2693 xor $24,$8 2694 dsrl $8,$25,39 2695 xor $24,$9 2696 dsll $9,$25,36 2697 xor $24,$8 2698 and $8,$30,$31 2699 xor $24,$9 # Sigma0(a) 2700 xor $9,$30,$31 2701#endif 2702 sd $19,88($29) # offload to ring buffer 2703 daddu $24,$8 2704 and $9,$25 2705 daddu $23,$10 # +=K[27] 2706 daddu $24,$9 # +=Maj(a,b,c) 2707 daddu $1,$23 2708 daddu $24,$23 2709 ld $22,112($29) # prefetch from ring buffer 2710#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2711 dsrl $10,$21,7 # Xupdate(28) 2712 drotr $8,$21,1 2713 daddu $20,$13 # +=X[i+9] 2714 xor $10,$8 2715 drotr $8,$21,8 2716 2717 dsrl $11,$18,6 2718 drotr $9,$18,19 2719 xor $10,$8 # sigma0(X[i+1]) 2720 drotr $8,$18,61 2721 xor $11,$9 2722 daddu $20,$10 2723#else 2724 dsrl $10,$21,7 # Xupdate(28) 2725 daddu $20,$13 # +=X[i+9] 2726 dsll $9,$21,56 2727 dsrl $8,$21,1 2728 xor $10,$9 2729 dsll $9,7 2730 xor $10,$8 2731 dsrl $8,$21,8 2732 xor $10,$9 2733 2734 dsrl $11,$18,6 2735 xor $10,$8 # sigma0(X[i+1]) 2736 dsll $9,$18,3 2737 daddu $20,$10 2738 dsrl $8,$18,19 2739 xor $11,$9 2740 dsll $9,42 2741 xor $11,$8 2742 dsrl $8,$18,61 2743 xor $11,$9 2744#endif 2745 xor $11,$8 # sigma1(X[i+14]) 2746 daddu $20,$11 2747#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2748 xor $11,$2,$3 # 28 2749 drotr $9,$1,14 2750 daddu $8,$20,$7 2751 drotr $10,$1,18 2752 and $11,$1 2753 drotr $7,$1,41 2754 xor $9,$10 2755 drotr $10,$24,28 2756 xor $11,$3 # Ch(e,f,g) 2757 xor $9,$7 # Sigma1(e) 2758 2759 drotr $7,$24,34 2760 daddu $8,$11 2761 ld $11,224($6) # K[28] 2762 xor $7,$10 2763 drotr $10,$24,39 2764 daddu $8,$9 2765 and $9,$25,$30 2766 xor $7,$10 # Sigma0(a) 2767 xor $10,$25,$30 2768#else 2769 daddu $8,$20,$7 # 28 2770 dsrl $7,$1,14 2771 xor $11,$2,$3 2772 dsll $10,$1,23 2773 and $11,$1 2774 dsrl $9,$1,18 2775 xor $7,$10 2776 dsll $10,$1,46 2777 xor $7,$9 2778 dsrl $9,$1,41 2779 xor $7,$10 2780 dsll $10,$1,50 2781 xor $7,$9 2782 xor $11,$3 # Ch(e,f,g) 2783 xor $9,$10,$7 # Sigma1(e) 2784 2785 dsrl $7,$24,28 2786 daddu $8,$11 2787 ld $11,224($6) # K[28] 2788 dsll $10,$24,25 2789 daddu $8,$9 2790 dsrl $9,$24,34 2791 xor $7,$10 2792 dsll $10,$24,30 2793 xor $7,$9 2794 dsrl $9,$24,39 2795 xor $7,$10 2796 dsll $10,$24,36 2797 xor $7,$9 2798 and $9,$25,$30 2799 xor $7,$10 # Sigma0(a) 2800 xor $10,$25,$30 2801#endif 2802 sd $20,96($29) # offload to ring buffer 2803 daddu $7,$9 2804 and $10,$24 2805 daddu $8,$11 # +=K[28] 2806 daddu $7,$10 # +=Maj(a,b,c) 2807 daddu $31,$8 2808 daddu $7,$8 2809 ld $23,120($29) # prefetch from ring buffer 2810#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2811 dsrl $11,$22,7 # Xupdate(29) 2812 drotr $9,$22,1 2813 daddu $21,$14 # +=X[i+9] 2814 xor $11,$9 2815 drotr $9,$22,8 2816 2817 dsrl $12,$19,6 2818 drotr $10,$19,19 2819 xor $11,$9 # sigma0(X[i+1]) 2820 drotr $9,$19,61 2821 xor $12,$10 2822 daddu $21,$11 2823#else 2824 dsrl $11,$22,7 # Xupdate(29) 2825 daddu $21,$14 # +=X[i+9] 2826 dsll $10,$22,56 2827 dsrl $9,$22,1 2828 xor $11,$10 2829 dsll $10,7 2830 xor $11,$9 2831 dsrl $9,$22,8 2832 xor $11,$10 2833 2834 dsrl $12,$19,6 2835 xor $11,$9 # sigma0(X[i+1]) 2836 dsll $10,$19,3 2837 daddu $21,$11 2838 dsrl $9,$19,19 2839 xor $12,$10 2840 dsll $10,42 2841 xor $12,$9 2842 dsrl $9,$19,61 2843 xor $12,$10 2844#endif 2845 xor $12,$9 # sigma1(X[i+14]) 2846 daddu $21,$12 2847#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2848 xor $12,$1,$2 # 29 2849 drotr $10,$31,14 2850 daddu $9,$21,$3 2851 drotr $11,$31,18 2852 and $12,$31 2853 drotr $3,$31,41 2854 xor $10,$11 2855 drotr $11,$7,28 2856 xor $12,$2 # Ch(e,f,g) 2857 xor $10,$3 # Sigma1(e) 2858 2859 drotr $3,$7,34 2860 daddu $9,$12 2861 ld $12,232($6) # K[29] 2862 xor $3,$11 2863 drotr $11,$7,39 2864 daddu $9,$10 2865 and $10,$24,$25 2866 xor $3,$11 # Sigma0(a) 2867 xor $11,$24,$25 2868#else 2869 daddu $9,$21,$3 # 29 2870 dsrl $3,$31,14 2871 xor $12,$1,$2 2872 dsll $11,$31,23 2873 and $12,$31 2874 dsrl $10,$31,18 2875 xor $3,$11 2876 dsll $11,$31,46 2877 xor $3,$10 2878 dsrl $10,$31,41 2879 xor $3,$11 2880 dsll $11,$31,50 2881 xor $3,$10 2882 xor $12,$2 # Ch(e,f,g) 2883 xor $10,$11,$3 # Sigma1(e) 2884 2885 dsrl $3,$7,28 2886 daddu $9,$12 2887 ld $12,232($6) # K[29] 2888 dsll $11,$7,25 2889 daddu $9,$10 2890 dsrl $10,$7,34 2891 xor $3,$11 2892 dsll $11,$7,30 2893 xor $3,$10 2894 dsrl $10,$7,39 2895 xor $3,$11 2896 dsll $11,$7,36 2897 xor $3,$10 2898 and $10,$24,$25 2899 xor $3,$11 # Sigma0(a) 2900 xor $11,$24,$25 2901#endif 2902 sd $21,104($29) # offload to ring buffer 2903 daddu $3,$10 2904 and $11,$7 2905 daddu $9,$12 # +=K[29] 2906 daddu $3,$11 # +=Maj(a,b,c) 2907 daddu $30,$9 2908 daddu $3,$9 2909 ld $8,0($29) # prefetch from ring buffer 2910#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2911 dsrl $12,$23,7 # Xupdate(30) 2912 drotr $10,$23,1 2913 daddu $22,$15 # +=X[i+9] 2914 xor $12,$10 2915 drotr $10,$23,8 2916 2917 dsrl $13,$20,6 2918 drotr $11,$20,19 2919 xor $12,$10 # sigma0(X[i+1]) 2920 drotr $10,$20,61 2921 xor $13,$11 2922 daddu $22,$12 2923#else 2924 dsrl $12,$23,7 # Xupdate(30) 2925 daddu $22,$15 # +=X[i+9] 2926 dsll $11,$23,56 2927 dsrl $10,$23,1 2928 xor $12,$11 2929 dsll $11,7 2930 xor $12,$10 2931 dsrl $10,$23,8 2932 xor $12,$11 2933 2934 dsrl $13,$20,6 2935 xor $12,$10 # sigma0(X[i+1]) 2936 dsll $11,$20,3 2937 daddu $22,$12 2938 dsrl $10,$20,19 2939 xor $13,$11 2940 dsll $11,42 2941 xor $13,$10 2942 dsrl $10,$20,61 2943 xor $13,$11 2944#endif 2945 xor $13,$10 # sigma1(X[i+14]) 2946 daddu $22,$13 2947#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 2948 xor $13,$31,$1 # 30 2949 drotr $11,$30,14 2950 daddu $10,$22,$2 2951 drotr $12,$30,18 2952 and $13,$30 2953 drotr $2,$30,41 2954 xor $11,$12 2955 drotr $12,$3,28 2956 xor $13,$1 # Ch(e,f,g) 2957 xor $11,$2 # Sigma1(e) 2958 2959 drotr $2,$3,34 2960 daddu $10,$13 2961 ld $13,240($6) # K[30] 2962 xor $2,$12 2963 drotr $12,$3,39 2964 daddu $10,$11 2965 and $11,$7,$24 2966 xor $2,$12 # Sigma0(a) 2967 xor $12,$7,$24 2968#else 2969 daddu $10,$22,$2 # 30 2970 dsrl $2,$30,14 2971 xor $13,$31,$1 2972 dsll $12,$30,23 2973 and $13,$30 2974 dsrl $11,$30,18 2975 xor $2,$12 2976 dsll $12,$30,46 2977 xor $2,$11 2978 dsrl $11,$30,41 2979 xor $2,$12 2980 dsll $12,$30,50 2981 xor $2,$11 2982 xor $13,$1 # Ch(e,f,g) 2983 xor $11,$12,$2 # Sigma1(e) 2984 2985 dsrl $2,$3,28 2986 daddu $10,$13 2987 ld $13,240($6) # K[30] 2988 dsll $12,$3,25 2989 daddu $10,$11 2990 dsrl $11,$3,34 2991 xor $2,$12 2992 dsll $12,$3,30 2993 xor $2,$11 2994 dsrl $11,$3,39 2995 xor $2,$12 2996 dsll $12,$3,36 2997 xor $2,$11 2998 and $11,$7,$24 2999 xor $2,$12 # Sigma0(a) 3000 xor $12,$7,$24 3001#endif 3002 sd $22,112($29) # offload to ring buffer 3003 daddu $2,$11 3004 and $12,$3 3005 daddu $10,$13 # +=K[30] 3006 daddu $2,$12 # +=Maj(a,b,c) 3007 daddu $25,$10 3008 daddu $2,$10 3009 ld $9,8($29) # prefetch from ring buffer 3010#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 3011 dsrl $13,$8,7 # Xupdate(31) 3012 drotr $11,$8,1 3013 daddu $23,$16 # +=X[i+9] 3014 xor $13,$11 3015 drotr $11,$8,8 3016 3017 dsrl $14,$21,6 3018 drotr $12,$21,19 3019 xor $13,$11 # sigma0(X[i+1]) 3020 drotr $11,$21,61 3021 xor $14,$12 3022 daddu $23,$13 3023#else 3024 dsrl $13,$8,7 # Xupdate(31) 3025 daddu $23,$16 # +=X[i+9] 3026 dsll $12,$8,56 3027 dsrl $11,$8,1 3028 xor $13,$12 3029 dsll $12,7 3030 xor $13,$11 3031 dsrl $11,$8,8 3032 xor $13,$12 3033 3034 dsrl $14,$21,6 3035 xor $13,$11 # sigma0(X[i+1]) 3036 dsll $12,$21,3 3037 daddu $23,$13 3038 dsrl $11,$21,19 3039 xor $14,$12 3040 dsll $12,42 3041 xor $14,$11 3042 dsrl $11,$21,61 3043 xor $14,$12 3044#endif 3045 xor $14,$11 # sigma1(X[i+14]) 3046 daddu $23,$14 3047#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) 3048 xor $14,$30,$31 # 31 3049 drotr $12,$25,14 3050 daddu $11,$23,$1 3051 drotr $13,$25,18 3052 and $14,$25 3053 drotr $1,$25,41 3054 xor $12,$13 3055 drotr $13,$2,28 3056 xor $14,$31 # Ch(e,f,g) 3057 xor $12,$1 # Sigma1(e) 3058 3059 drotr $1,$2,34 3060 daddu $11,$14 3061 ld $14,248($6) # K[31] 3062 xor $1,$13 3063 drotr $13,$2,39 3064 daddu $11,$12 3065 and $12,$3,$7 3066 xor $1,$13 # Sigma0(a) 3067 xor $13,$3,$7 3068#else 3069 daddu $11,$23,$1 # 31 3070 dsrl $1,$25,14 3071 xor $14,$30,$31 3072 dsll $13,$25,23 3073 and $14,$25 3074 dsrl $12,$25,18 3075 xor $1,$13 3076 dsll $13,$25,46 3077 xor $1,$12 3078 dsrl $12,$25,41 3079 xor $1,$13 3080 dsll $13,$25,50 3081 xor $1,$12 3082 xor $14,$31 # Ch(e,f,g) 3083 xor $12,$13,$1 # Sigma1(e) 3084 3085 dsrl $1,$2,28 3086 daddu $11,$14 3087 ld $14,248($6) # K[31] 3088 dsll $13,$2,25 3089 daddu $11,$12 3090 dsrl $12,$2,34 3091 xor $1,$13 3092 dsll $13,$2,30 3093 xor $1,$12 3094 dsrl $12,$2,39 3095 xor $1,$13 3096 dsll $13,$2,36 3097 xor $1,$12 3098 and $12,$3,$7 3099 xor $1,$13 # Sigma0(a) 3100 xor $13,$3,$7 3101#endif 3102 sd $23,120($29) # offload to ring buffer 3103 daddu $1,$12 3104 and $13,$2 3105 daddu $11,$14 # +=K[31] 3106 daddu $1,$13 # +=Maj(a,b,c) 3107 daddu $24,$11 3108 daddu $1,$11 3109 ld $10,16($29) # prefetch from ring buffer 3110 and $14,0xfff 3111 li $15,2071 3112 .set noreorder 3113 bne $14,$15,.L16_xx 3114 daddu $6,16*8 # Ktbl+=16 3115 3116 ld $23,16*8($29) # restore pointer to the end of input 3117 ld $8,0*8($4) 3118 ld $9,1*8($4) 3119 ld $10,2*8($4) 3120 daddu $5,16*8 3121 ld $11,3*8($4) 3122 daddu $1,$8 3123 ld $12,4*8($4) 3124 daddu $2,$9 3125 ld $13,5*8($4) 3126 daddu $3,$10 3127 ld $14,6*8($4) 3128 daddu $7,$11 3129 ld $15,7*8($4) 3130 daddu $24,$12 3131 sd $1,0*8($4) 3132 daddu $25,$13 3133 sd $2,1*8($4) 3134 daddu $30,$14 3135 sd $3,2*8($4) 3136 daddu $31,$15 3137 sd $7,3*8($4) 3138 sd $24,4*8($4) 3139 sd $25,5*8($4) 3140 sd $30,6*8($4) 3141 sd $31,7*8($4) 3142 3143 bne $5,$23,.Loop 3144 dsubu $6,512 # rewind $6 3145 3146 ld $31,256-1*8($29) 3147 ld $30,256-2*8($29) 3148 ld $23,256-3*8($29) 3149 ld $22,256-4*8($29) 3150 ld $21,256-5*8($29) 3151 ld $20,256-6*8($29) 3152 ld $19,256-7*8($29) 3153 ld $18,256-8*8($29) 3154 ld $17,256-9*8($29) 3155 ld $16,256-10*8($29) 3156 jr $31 3157 daddu $29,256 3158.end sha512_block_data_order 3159 3160.rdata 3161.align 5 3162K512: 3163 .dword 0x428a2f98d728ae22, 0x7137449123ef65cd 3164 .dword 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc 3165 .dword 0x3956c25bf348b538, 0x59f111f1b605d019 3166 .dword 0x923f82a4af194f9b, 0xab1c5ed5da6d8118 3167 .dword 0xd807aa98a3030242, 0x12835b0145706fbe 3168 .dword 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2 3169 .dword 0x72be5d74f27b896f, 0x80deb1fe3b1696b1 3170 .dword 0x9bdc06a725c71235, 0xc19bf174cf692694 3171 .dword 0xe49b69c19ef14ad2, 0xefbe4786384f25e3 3172 .dword 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65 3173 .dword 0x2de92c6f592b0275, 0x4a7484aa6ea6e483 3174 .dword 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5 3175 .dword 0x983e5152ee66dfab, 0xa831c66d2db43210 3176 .dword 0xb00327c898fb213f, 0xbf597fc7beef0ee4 3177 .dword 0xc6e00bf33da88fc2, 0xd5a79147930aa725 3178 .dword 0x06ca6351e003826f, 0x142929670a0e6e70 3179 .dword 0x27b70a8546d22ffc, 0x2e1b21385c26c926 3180 .dword 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df 3181 .dword 0x650a73548baf63de, 0x766a0abb3c77b2a8 3182 .dword 0x81c2c92e47edaee6, 0x92722c851482353b 3183 .dword 0xa2bfe8a14cf10364, 0xa81a664bbc423001 3184 .dword 0xc24b8b70d0f89791, 0xc76c51a30654be30 3185 .dword 0xd192e819d6ef5218, 0xd69906245565a910 3186 .dword 0xf40e35855771202a, 0x106aa07032bbd1b8 3187 .dword 0x19a4c116b8d2d0c8, 0x1e376c085141ab53 3188 .dword 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8 3189 .dword 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb 3190 .dword 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3 3191 .dword 0x748f82ee5defb2fc, 0x78a5636f43172f60 3192 .dword 0x84c87814a1f0ab72, 0x8cc702081a6439ec 3193 .dword 0x90befffa23631e28, 0xa4506cebde82bde9 3194 .dword 0xbef9a3f7b2c67915, 0xc67178f2e372532b 3195 .dword 0xca273eceea26619c, 0xd186b8c721c0c207 3196 .dword 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178 3197 .dword 0x06f067aa72176fba, 0x0a637dc5a2c898a6 3198 .dword 0x113f9804bef90dae, 0x1b710b35131c471b 3199 .dword 0x28db77f523047d84, 0x32caab7b40c72493 3200 .dword 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c 3201 .dword 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a 3202 .dword 0x5fcb6fab3ad6faec, 0x6c44198c4a475817 3203.asciiz "SHA512 for MIPS, CRYPTOGAMS by <appro@openssl.org>" 3204.align 5 3205 3206