1 .abiversion 2 2 .text 3 4 .type KeccakF1600_int,@function 5 .align 5 6 KeccakF1600_int: 7 .localentry KeccakF1600_int,0 8 9 li 0,24 10 mtctr 0 11 b .Loop 12 .align 4 13 .Loop: 14 xor 0,7,12 15 std 11,96(1) 16 xor 3,8,6 17 std 16,104(1) 18 xor 4,9,14 19 std 21,112(1) 20 xor 5,10,15 21 std 26,120(1) 22 xor 11,11,16 23 xor 0,0,17 24 xor 3,3,18 25 xor 4,4,19 26 xor 5,5,20 27 xor 11,11,21 28 xor 0,0,22 29 xor 3,3,23 30 xor 4,4,24 31 xor 5,5,25 32 xor 11,11,26 33 xor 0,0,27 34 xor 4,4,29 35 xor 3,3,28 36 xor 5,5,30 37 rotldi 16,4,1 38 xor 11,11,31 39 rotldi 21,5,1 40 xor 16,16,0 41 rotldi 26,11,1 42 43 xor 8,8,16 44 xor 6,6,16 45 xor 18,18,16 46 xor 23,23,16 47 xor 28,28,16 48 49 rotldi 16,0,1 50 xor 21,21,3 51 xor 4,4,26 52 rotldi 26,3,1 53 xor 5,5,16 54 xor 11,11,26 55 56 xor 3, 9,21 57 xor 14,14,21 58 xor 19,19,21 59 xor 24,24,21 60 xor 29,29,21 61 62 xor 7,7,11 63 xor 12,12,11 64 xor 17,17,11 65 xor 22,22,11 66 xor 27,27,11 67 ld 11,96(1) 68 xor 0, 10,4 69 ld 16,104(1) 70 xor 15,15,4 71 ld 21,112(1) 72 xor 20,20,4 73 ld 26,120(1) 74 xor 25,25,4 75 xor 30,30,4 76 77 xor 4, 11,5 78 xor 16,16,5 79 xor 21,21,5 80 xor 26,26,5 81 xor 31,31,5 82 83 mr 5,8 84 rotldi 8,6,44 85 86 rotldi 9,19,43 87 88 rotldi 10,25,21 89 90 rotldi 11,31,14 91 92 rotldi 6,16,20 93 rotldi 19,20,25 94 rotldi 25,24,15 95 rotldi 31,28,2 96 97 rotldi 16,29,61 98 rotldi 20,26,8 99 rotldi 24,18,10 100 rotldi 28,15,55 101 102 rotldi 29,21,39 103 rotldi 26,30,56 104 rotldi 18,14,6 105 rotldi 15,23,45 106 107 rotldi 21,27,18 108 rotldi 30,22,41 109 rotldi 14,17,3 110 rotldi 23,12,36 111 112 rotldi 12,0,28 113 rotldi 17,5,1 114 rotldi 22,4,27 115 rotldi 27,3,62 116 117 andc 0,9,8 118 andc 3,10,9 119 andc 4,7,11 120 andc 5,8,7 121 xor 7,7,0 122 andc 0,11,10 123 xor 8,8,3 124 ld 3,80(1) 125 xor 10,10,4 126 xor 11,11,5 127 xor 9,9,0 128 ldu 5,8(3) 129 130 andc 0,14,6 131 std 3,80(1) 132 andc 3,15,14 133 andc 4,12,16 134 xor 7,7,5 135 andc 5,6,12 136 xor 12,12,0 137 andc 0,16,15 138 xor 6,6,3 139 xor 15,15,4 140 xor 16,16,5 141 xor 14,14,0 142 143 andc 0,19,18 144 andc 3,20,19 145 andc 4,17,21 146 andc 5,18,17 147 xor 17,17,0 148 andc 0,21,20 149 xor 18,18,3 150 xor 20,20,4 151 xor 21,21,5 152 xor 19,19,0 153 154 andc 0,24,23 155 andc 3,25,24 156 andc 4,22,26 157 andc 5,23,22 158 xor 22,22,0 159 andc 0,26,25 160 xor 23,23,3 161 xor 25,25,4 162 xor 26,26,5 163 xor 24,24,0 164 165 andc 0,29,28 166 andc 3,30,29 167 andc 4,27,31 168 andc 5,28,27 169 xor 27,27,0 170 andc 0,31,30 171 xor 28,28,3 172 xor 30,30,4 173 xor 31,31,5 174 xor 29,29,0 175 176 bdnz .Loop 177 178 blr 179 .long 0 180 .byte 0,12,0x14,0,0,0,0,0 181 .size KeccakF1600_int,.-KeccakF1600_int 182 183 .type KeccakF1600,@function 184 .align 5 185 KeccakF1600: 186 .localentry KeccakF1600,0 187 188 stdu 1,-272(1) 189 mflr 0 190 std 14,128(1) 191 std 15,136(1) 192 std 16,144(1) 193 std 17,152(1) 194 std 18,160(1) 195 std 19,168(1) 196 std 20,176(1) 197 std 21,184(1) 198 std 22,192(1) 199 std 23,200(1) 200 std 24,208(1) 201 std 25,216(1) 202 std 26,224(1) 203 std 27,232(1) 204 std 28,240(1) 205 std 29,248(1) 206 std 30,256(1) 207 std 31,264(1) 208 std 0,288(1) 209 210 bl PICmeup 211 subi 12,12,8 212 213 std 3,48(1) 214 215 216 217 std 12,80(1) 218 219 ld 7,0(3) 220 ld 8,8(3) 221 ld 9,16(3) 222 ld 10,24(3) 223 ld 11,32(3) 224 ld 12,40(3) 225 ld 6,48(3) 226 ld 14,56(3) 227 ld 15,64(3) 228 ld 16,72(3) 229 ld 17,80(3) 230 ld 18,88(3) 231 ld 19,96(3) 232 ld 20,104(3) 233 ld 21,112(3) 234 ld 22,120(3) 235 ld 23,128(3) 236 ld 24,136(3) 237 ld 25,144(3) 238 ld 26,152(3) 239 ld 27,160(3) 240 ld 28,168(3) 241 ld 29,176(3) 242 ld 30,184(3) 243 ld 31,192(3) 244 245 bl KeccakF1600_int 246 247 ld 3,48(1) 248 std 7,0(3) 249 std 8,8(3) 250 std 9,16(3) 251 std 10,24(3) 252 std 11,32(3) 253 std 12,40(3) 254 std 6,48(3) 255 std 14,56(3) 256 std 15,64(3) 257 std 16,72(3) 258 std 17,80(3) 259 std 18,88(3) 260 std 19,96(3) 261 std 20,104(3) 262 std 21,112(3) 263 std 22,120(3) 264 std 23,128(3) 265 std 24,136(3) 266 std 25,144(3) 267 std 26,152(3) 268 std 27,160(3) 269 std 28,168(3) 270 std 29,176(3) 271 std 30,184(3) 272 std 31,192(3) 273 274 ld 0,288(1) 275 ld 14,128(1) 276 ld 15,136(1) 277 ld 16,144(1) 278 ld 17,152(1) 279 ld 18,160(1) 280 ld 19,168(1) 281 ld 20,176(1) 282 ld 21,184(1) 283 ld 22,192(1) 284 ld 23,200(1) 285 ld 24,208(1) 286 ld 25,216(1) 287 ld 26,224(1) 288 ld 27,232(1) 289 ld 28,240(1) 290 ld 29,248(1) 291 ld 30,256(1) 292 ld 31,264(1) 293 mtlr 0 294 addi 1,1,272 295 blr 296 .long 0 297 .byte 0,12,4,1,0x80,18,1,0 298 .long 0 299 .size KeccakF1600,.-KeccakF1600 300 301 .type dword_le_load,@function 302 .align 5 303 dword_le_load: 304 .localentry dword_le_load,0 305 306 lbz 0,1(3) 307 lbz 4,2(3) 308 lbz 5,3(3) 309 insrdi 0,4,8,48 310 lbz 4,4(3) 311 insrdi 0,5,8,40 312 lbz 5,5(3) 313 insrdi 0,4,8,32 314 lbz 4,6(3) 315 insrdi 0,5,8,24 316 lbz 5,7(3) 317 insrdi 0,4,8,16 318 lbzu 4,8(3) 319 insrdi 0,5,8,8 320 insrdi 0,4,8,0 321 blr 322 .long 0 323 .byte 0,12,0x14,0,0,0,1,0 324 .long 0 325 .size dword_le_load,.-dword_le_load 326 327 .globl SHA3_absorb 328 .type SHA3_absorb,@function 329 .type SHA3_absorb,@function 330 .align 5 331 SHA3_absorb: 332 .localentry SHA3_absorb,0 333 334 stdu 1,-272(1) 335 mflr 0 336 std 14,128(1) 337 std 15,136(1) 338 std 16,144(1) 339 std 17,152(1) 340 std 18,160(1) 341 std 19,168(1) 342 std 20,176(1) 343 std 21,184(1) 344 std 22,192(1) 345 std 23,200(1) 346 std 24,208(1) 347 std 25,216(1) 348 std 26,224(1) 349 std 27,232(1) 350 std 28,240(1) 351 std 29,248(1) 352 std 30,256(1) 353 std 31,264(1) 354 std 0,288(1) 355 356 bl PICmeup 357 subi 4,4,1 358 subi 12,12,8 359 360 std 3,48(1) 361 std 4,56(1) 362 std 5,64(1) 363 std 6,72(1) 364 mr 0,6 365 std 12,80(1) 366 367 ld 7,0(3) 368 ld 8,8(3) 369 ld 9,16(3) 370 ld 10,24(3) 371 ld 11,32(3) 372 ld 12,40(3) 373 ld 6,48(3) 374 ld 14,56(3) 375 ld 15,64(3) 376 ld 16,72(3) 377 ld 17,80(3) 378 ld 18,88(3) 379 ld 19,96(3) 380 ld 20,104(3) 381 ld 21,112(3) 382 ld 22,120(3) 383 ld 23,128(3) 384 ld 24,136(3) 385 ld 25,144(3) 386 ld 26,152(3) 387 ld 27,160(3) 388 ld 28,168(3) 389 ld 29,176(3) 390 ld 30,184(3) 391 ld 31,192(3) 392 393 mr 3,4 394 mr 4,5 395 mr 5,0 396 397 b .Loop_absorb 398 399 .align 4 400 .Loop_absorb: 401 cmpld 4,5 402 blt .Labsorbed 403 404 sub 4,4,5 405 srwi 5,5,3 406 std 4,64(1) 407 mtctr 5 408 bl dword_le_load 409 xor 7,7,0 410 bdz .Lprocess_block 411 bl dword_le_load 412 xor 8,8,0 413 bdz .Lprocess_block 414 bl dword_le_load 415 xor 9,9,0 416 bdz .Lprocess_block 417 bl dword_le_load 418 xor 10,10,0 419 bdz .Lprocess_block 420 bl dword_le_load 421 xor 11,11,0 422 bdz .Lprocess_block 423 bl dword_le_load 424 xor 12,12,0 425 bdz .Lprocess_block 426 bl dword_le_load 427 xor 6,6,0 428 bdz .Lprocess_block 429 bl dword_le_load 430 xor 14,14,0 431 bdz .Lprocess_block 432 bl dword_le_load 433 xor 15,15,0 434 bdz .Lprocess_block 435 bl dword_le_load 436 xor 16,16,0 437 bdz .Lprocess_block 438 bl dword_le_load 439 xor 17,17,0 440 bdz .Lprocess_block 441 bl dword_le_load 442 xor 18,18,0 443 bdz .Lprocess_block 444 bl dword_le_load 445 xor 19,19,0 446 bdz .Lprocess_block 447 bl dword_le_load 448 xor 20,20,0 449 bdz .Lprocess_block 450 bl dword_le_load 451 xor 21,21,0 452 bdz .Lprocess_block 453 bl dword_le_load 454 xor 22,22,0 455 bdz .Lprocess_block 456 bl dword_le_load 457 xor 23,23,0 458 bdz .Lprocess_block 459 bl dword_le_load 460 xor 24,24,0 461 bdz .Lprocess_block 462 bl dword_le_load 463 xor 25,25,0 464 bdz .Lprocess_block 465 bl dword_le_load 466 xor 26,26,0 467 bdz .Lprocess_block 468 bl dword_le_load 469 xor 27,27,0 470 bdz .Lprocess_block 471 bl dword_le_load 472 xor 28,28,0 473 bdz .Lprocess_block 474 bl dword_le_load 475 xor 29,29,0 476 bdz .Lprocess_block 477 bl dword_le_load 478 xor 30,30,0 479 bdz .Lprocess_block 480 bl dword_le_load 481 xor 31,31,0 482 483 .Lprocess_block: 484 std 3,56(1) 485 486 bl KeccakF1600_int 487 488 ld 0,80(1) 489 ld 5,72(1) 490 ld 4,64(1) 491 ld 3,56(1) 492 addic 0,0,-192 493 std 0,80(1) 494 495 b .Loop_absorb 496 497 .align 4 498 .Labsorbed: 499 ld 3,48(1) 500 std 7,0(3) 501 std 8,8(3) 502 std 9,16(3) 503 std 10,24(3) 504 std 11,32(3) 505 std 12,40(3) 506 std 6,48(3) 507 std 14,56(3) 508 std 15,64(3) 509 std 16,72(3) 510 std 17,80(3) 511 std 18,88(3) 512 std 19,96(3) 513 std 20,104(3) 514 std 21,112(3) 515 std 22,120(3) 516 std 23,128(3) 517 std 24,136(3) 518 std 25,144(3) 519 std 26,152(3) 520 std 27,160(3) 521 std 28,168(3) 522 std 29,176(3) 523 std 30,184(3) 524 std 31,192(3) 525 526 mr 3,4 527 ld 0,288(1) 528 ld 14,128(1) 529 ld 15,136(1) 530 ld 16,144(1) 531 ld 17,152(1) 532 ld 18,160(1) 533 ld 19,168(1) 534 ld 20,176(1) 535 ld 21,184(1) 536 ld 22,192(1) 537 ld 23,200(1) 538 ld 24,208(1) 539 ld 25,216(1) 540 ld 26,224(1) 541 ld 27,232(1) 542 ld 28,240(1) 543 ld 29,248(1) 544 ld 30,256(1) 545 ld 31,264(1) 546 mtlr 0 547 addi 1,1,272 548 blr 549 .long 0 550 .byte 0,12,4,1,0x80,18,4,0 551 .long 0 552 .size SHA3_absorb,.-SHA3_absorb 553 .globl SHA3_squeeze 554 .type SHA3_squeeze,@function 555 .type SHA3_squeeze,@function 556 .align 5 557 SHA3_squeeze: 558 .localentry SHA3_squeeze,0 559 560 stdu 1,-80(1) 561 mflr 0 562 std 28,48(1) 563 std 29,56(1) 564 std 30,64(1) 565 std 31,72(1) 566 std 0,96(1) 567 568 mr 28,3 569 subi 3,3,8 570 subi 29,4,1 571 mr 30,5 572 mr 31,6 573 b .Loop_squeeze 574 575 .align 4 576 .Loop_squeeze: 577 ldu 0,8(3) 578 cmpldi 30,8 579 blt .Lsqueeze_tail 580 581 stb 0,1(29) 582 srdi 0,0,8 583 stb 0,2(29) 584 srdi 0,0,8 585 stb 0,3(29) 586 srdi 0,0,8 587 stb 0,4(29) 588 srdi 0,0,8 589 stb 0,5(29) 590 srdi 0,0,8 591 stb 0,6(29) 592 srdi 0,0,8 593 stb 0,7(29) 594 srdi 0,0,8 595 stbu 0,8(29) 596 597 subic. 30,30,8 598 beq .Lsqueeze_done 599 600 subic. 6,6,8 601 bgt .Loop_squeeze 602 603 mr 3,28 604 bl KeccakF1600 605 subi 3,28,8 606 mr 6,31 607 b .Loop_squeeze 608 609 .align 4 610 .Lsqueeze_tail: 611 mtctr 30 612 .Loop_tail: 613 stbu 0,1(29) 614 srdi 0,0,8 615 bdnz .Loop_tail 616 617 .Lsqueeze_done: 618 ld 0,96(1) 619 ld 28,48(1) 620 ld 29,56(1) 621 ld 30,64(1) 622 ld 31,72(1) 623 mtlr 0 624 addi 1,1,80 625 blr 626 .long 0 627 .byte 0,12,4,1,0x80,4,4,0 628 .long 0 629 .size SHA3_squeeze,.-SHA3_squeeze 630 .align 6 631 PICmeup: 632 mflr 0 633 bcl 20,31,$+4 634 mflr 12 635 addi 12,12,56 636 mtlr 0 637 blr 638 .long 0 639 .byte 0,12,0x14,0,0,0,0,0 640 .space 28 641 .type iotas,@object 642 iotas: 643 .long 0x00000001,0x00000000 644 .long 0x00008082,0x00000000 645 .long 0x0000808a,0x80000000 646 .long 0x80008000,0x80000000 647 .long 0x0000808b,0x00000000 648 .long 0x80000001,0x00000000 649 .long 0x80008081,0x80000000 650 .long 0x00008009,0x80000000 651 .long 0x0000008a,0x00000000 652 .long 0x00000088,0x00000000 653 .long 0x80008009,0x00000000 654 .long 0x8000000a,0x00000000 655 .long 0x8000808b,0x00000000 656 .long 0x0000008b,0x80000000 657 .long 0x00008089,0x80000000 658 .long 0x00008003,0x80000000 659 .long 0x00008002,0x80000000 660 .long 0x00000080,0x80000000 661 .long 0x0000800a,0x00000000 662 .long 0x8000000a,0x80000000 663 .long 0x80008081,0x80000000 664 .long 0x00008080,0x80000000 665 .long 0x80000001,0x00000000 666 .long 0x80008008,0x80000000 667 .size iotas,.-iotas 668 .byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,80,80,67,54,52,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 669 .align 2 670