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