1 .machine "any" 2 .abiversion 2 3 .text 4 5 .globl ChaCha20_ctr32_int 6 .type ChaCha20_ctr32_int,@function 7 .align 5 8 ChaCha20_ctr32_int: 9 .localentry ChaCha20_ctr32_int,0 10 11 __ChaCha20_ctr32_int: 12 cmpldi 5,0 13 .long 0x4DC20020 14 15 stdu 1,-256(1) 16 mflr 0 17 18 std 14,112(1) 19 std 15,120(1) 20 std 16,128(1) 21 std 17,136(1) 22 std 18,144(1) 23 std 19,152(1) 24 std 20,160(1) 25 std 21,168(1) 26 std 22,176(1) 27 std 23,184(1) 28 std 24,192(1) 29 std 25,200(1) 30 std 26,208(1) 31 std 27,216(1) 32 std 28,224(1) 33 std 29,232(1) 34 std 30,240(1) 35 std 31,248(1) 36 std 0,272(1) 37 38 lwz 11,0(7) 39 lwz 12,4(7) 40 lwz 14,8(7) 41 lwz 15,12(7) 42 43 bl __ChaCha20_1x 44 45 ld 0,272(1) 46 ld 14,112(1) 47 ld 15,120(1) 48 ld 16,128(1) 49 ld 17,136(1) 50 ld 18,144(1) 51 ld 19,152(1) 52 ld 20,160(1) 53 ld 21,168(1) 54 ld 22,176(1) 55 ld 23,184(1) 56 ld 24,192(1) 57 ld 25,200(1) 58 ld 26,208(1) 59 ld 27,216(1) 60 ld 28,224(1) 61 ld 29,232(1) 62 ld 30,240(1) 63 ld 31,248(1) 64 mtlr 0 65 addi 1,1,256 66 blr 67 .long 0 68 .byte 0,12,4,1,0x80,18,5,0 69 .long 0 70 .size ChaCha20_ctr32_int,.-ChaCha20_ctr32_int 71 72 .align 5 73 __ChaCha20_1x: 74 .Loop_outer: 75 lis 16,0x6170 76 lis 17,0x3320 77 lis 18,0x7962 78 lis 19,0x6b20 79 ori 16,16,0x7865 80 ori 17,17,0x646e 81 ori 18,18,0x2d32 82 ori 19,19,0x6574 83 84 li 0,10 85 lwz 20,0(6) 86 lwz 21,4(6) 87 lwz 22,8(6) 88 lwz 23,12(6) 89 lwz 24,16(6) 90 mr 28,11 91 lwz 25,20(6) 92 mr 29,12 93 lwz 26,24(6) 94 mr 30,14 95 lwz 27,28(6) 96 mr 31,15 97 98 mr 7,20 99 mr 8,21 100 mr 9,22 101 mr 10,23 102 103 mtctr 0 104 .Loop: 105 add 16,16,20 106 add 17,17,21 107 add 18,18,22 108 add 19,19,23 109 xor 28,28,16 110 xor 29,29,17 111 xor 30,30,18 112 xor 31,31,19 113 rotlwi 28,28,16 114 rotlwi 29,29,16 115 rotlwi 30,30,16 116 rotlwi 31,31,16 117 add 24,24,28 118 add 25,25,29 119 add 26,26,30 120 add 27,27,31 121 xor 20,20,24 122 xor 21,21,25 123 xor 22,22,26 124 xor 23,23,27 125 rotlwi 20,20,12 126 rotlwi 21,21,12 127 rotlwi 22,22,12 128 rotlwi 23,23,12 129 add 16,16,20 130 add 17,17,21 131 add 18,18,22 132 add 19,19,23 133 xor 28,28,16 134 xor 29,29,17 135 xor 30,30,18 136 xor 31,31,19 137 rotlwi 28,28,8 138 rotlwi 29,29,8 139 rotlwi 30,30,8 140 rotlwi 31,31,8 141 add 24,24,28 142 add 25,25,29 143 add 26,26,30 144 add 27,27,31 145 xor 20,20,24 146 xor 21,21,25 147 xor 22,22,26 148 xor 23,23,27 149 rotlwi 20,20,7 150 rotlwi 21,21,7 151 rotlwi 22,22,7 152 rotlwi 23,23,7 153 add 16,16,21 154 add 17,17,22 155 add 18,18,23 156 add 19,19,20 157 xor 31,31,16 158 xor 28,28,17 159 xor 29,29,18 160 xor 30,30,19 161 rotlwi 31,31,16 162 rotlwi 28,28,16 163 rotlwi 29,29,16 164 rotlwi 30,30,16 165 add 26,26,31 166 add 27,27,28 167 add 24,24,29 168 add 25,25,30 169 xor 21,21,26 170 xor 22,22,27 171 xor 23,23,24 172 xor 20,20,25 173 rotlwi 21,21,12 174 rotlwi 22,22,12 175 rotlwi 23,23,12 176 rotlwi 20,20,12 177 add 16,16,21 178 add 17,17,22 179 add 18,18,23 180 add 19,19,20 181 xor 31,31,16 182 xor 28,28,17 183 xor 29,29,18 184 xor 30,30,19 185 rotlwi 31,31,8 186 rotlwi 28,28,8 187 rotlwi 29,29,8 188 rotlwi 30,30,8 189 add 26,26,31 190 add 27,27,28 191 add 24,24,29 192 add 25,25,30 193 xor 21,21,26 194 xor 22,22,27 195 xor 23,23,24 196 xor 20,20,25 197 rotlwi 21,21,7 198 rotlwi 22,22,7 199 rotlwi 23,23,7 200 rotlwi 20,20,7 201 bdnz .Loop 202 203 subic 5,5,64 204 addi 16,16,0x7865 205 addi 17,17,0x646e 206 addi 18,18,0x2d32 207 addi 19,19,0x6574 208 addis 16,16,0x6170 209 addis 17,17,0x3320 210 addis 18,18,0x7962 211 addis 19,19,0x6b20 212 213 subfe. 0,0,0 214 add 20,20,7 215 lwz 7,16(6) 216 add 21,21,8 217 lwz 8,20(6) 218 add 22,22,9 219 lwz 9,24(6) 220 add 23,23,10 221 lwz 10,28(6) 222 add 24,24,7 223 add 25,25,8 224 add 26,26,9 225 add 27,27,10 226 227 add 28,28,11 228 add 29,29,12 229 add 30,30,14 230 add 31,31,15 231 addi 11,11,1 232 bne .Ltail 233 234 lwz 7,0(4) 235 lwz 8,4(4) 236 cmpldi 5,0 237 lwz 9,8(4) 238 lwz 10,12(4) 239 xor 16,16,7 240 lwz 7,16(4) 241 xor 17,17,8 242 lwz 8,20(4) 243 xor 18,18,9 244 lwz 9,24(4) 245 xor 19,19,10 246 lwz 10,28(4) 247 xor 20,20,7 248 lwz 7,32(4) 249 xor 21,21,8 250 lwz 8,36(4) 251 xor 22,22,9 252 lwz 9,40(4) 253 xor 23,23,10 254 lwz 10,44(4) 255 xor 24,24,7 256 lwz 7,48(4) 257 xor 25,25,8 258 lwz 8,52(4) 259 xor 26,26,9 260 lwz 9,56(4) 261 xor 27,27,10 262 lwz 10,60(4) 263 xor 28,28,7 264 stw 16,0(3) 265 xor 29,29,8 266 stw 17,4(3) 267 xor 30,30,9 268 stw 18,8(3) 269 xor 31,31,10 270 stw 19,12(3) 271 stw 20,16(3) 272 stw 21,20(3) 273 stw 22,24(3) 274 stw 23,28(3) 275 stw 24,32(3) 276 stw 25,36(3) 277 stw 26,40(3) 278 stw 27,44(3) 279 stw 28,48(3) 280 stw 29,52(3) 281 stw 30,56(3) 282 addi 4,4,64 283 stw 31,60(3) 284 addi 3,3,64 285 286 bne .Loop_outer 287 288 blr 289 290 .align 4 291 .Ltail: 292 addi 5,5,64 293 subi 4,4,1 294 subi 3,3,1 295 addi 7,1,48-1 296 mtctr 5 297 298 stw 16,48(1) 299 stw 17,52(1) 300 stw 18,56(1) 301 stw 19,60(1) 302 stw 20,64(1) 303 stw 21,68(1) 304 stw 22,72(1) 305 stw 23,76(1) 306 stw 24,80(1) 307 stw 25,84(1) 308 stw 26,88(1) 309 stw 27,92(1) 310 stw 28,96(1) 311 stw 29,100(1) 312 stw 30,104(1) 313 stw 31,108(1) 314 315 .Loop_tail: 316 lbzu 11,1(4) 317 lbzu 16,1(7) 318 xor 12,11,16 319 stbu 12,1(3) 320 bdnz .Loop_tail 321 322 stw 1,48(1) 323 stw 1,52(1) 324 stw 1,56(1) 325 stw 1,60(1) 326 stw 1,64(1) 327 stw 1,68(1) 328 stw 1,72(1) 329 stw 1,76(1) 330 stw 1,80(1) 331 stw 1,84(1) 332 stw 1,88(1) 333 stw 1,92(1) 334 stw 1,96(1) 335 stw 1,100(1) 336 stw 1,104(1) 337 stw 1,108(1) 338 339 blr 340 .long 0 341 .byte 0,12,0x14,0,0,0,0,0 342 343 .globl ChaCha20_ctr32_vmx 344 .type ChaCha20_ctr32_vmx,@function 345 .align 5 346 ChaCha20_ctr32_vmx: 347 .localentry ChaCha20_ctr32_vmx,0 348 349 cmpldi 5,256 350 blt __ChaCha20_ctr32_int 351 352 stdu 1,-416(1) 353 mflr 0 354 li 10,127 355 li 11,143 356 li 12,-1 357 stvx 23,10,1 358 addi 10,10,32 359 stvx 24,11,1 360 addi 11,11,32 361 stvx 25,10,1 362 addi 10,10,32 363 stvx 26,11,1 364 addi 11,11,32 365 stvx 27,10,1 366 addi 10,10,32 367 stvx 28,11,1 368 addi 11,11,32 369 stvx 29,10,1 370 addi 10,10,32 371 stvx 30,11,1 372 stvx 31,10,1 373 stw 12,268(1) 374 std 14,272(1) 375 std 15,280(1) 376 std 16,288(1) 377 std 17,296(1) 378 std 18,304(1) 379 std 19,312(1) 380 std 20,320(1) 381 std 21,328(1) 382 std 22,336(1) 383 std 23,344(1) 384 std 24,352(1) 385 std 25,360(1) 386 std 26,368(1) 387 std 27,376(1) 388 std 28,384(1) 389 std 29,392(1) 390 std 30,400(1) 391 std 31,408(1) 392 li 12,-4096+511 393 std 0, 432(1) 394 or 12,12,12 395 396 bl .Lconsts 397 li 16,16 398 li 17,32 399 li 18,48 400 li 19,64 401 li 20,31 402 li 21,15 403 404 lvx 13,0,6 405 lvsr 29,0,6 406 lvx 14,16,6 407 lvx 27,20,6 408 409 lvx 15,0,7 410 lvsr 30,0,7 411 lvx 28,21,7 412 413 lvx 12,0,12 414 lvx 17,16,12 415 lvx 18,17,12 416 lvx 19,18,12 417 lvx 23,19,12 418 419 vperm 13,14,13,29 420 vperm 14,27,14,29 421 vperm 15,28,15,30 422 423 lwz 11,0(7) 424 lwz 12,4(7) 425 vadduwm 15,15,17 426 lwz 14,8(7) 427 vadduwm 16,15,17 428 lwz 15,12(7) 429 vadduwm 17,16,17 430 431 vxor 29,29,29 432 vspltisw 26,-1 433 lvsr 24,0,4 434 lvsl 25,0,3 435 vperm 26,26,29,25 436 437 438 439 440 441 442 443 li 0,10 444 b .Loop_outer_vmx 445 446 .align 4 447 .Loop_outer_vmx: 448 lis 16,0x6170 449 lis 17,0x3320 450 vor 0,12,12 451 lis 18,0x7962 452 lis 19,0x6b20 453 vor 4,12,12 454 ori 16,16,0x7865 455 ori 17,17,0x646e 456 vor 8,12,12 457 ori 18,18,0x2d32 458 ori 19,19,0x6574 459 vor 1,13,13 460 461 lwz 20,0(6) 462 vor 5,13,13 463 lwz 21,4(6) 464 vor 9,13,13 465 lwz 22,8(6) 466 vor 2,14,14 467 lwz 23,12(6) 468 vor 6,14,14 469 lwz 24,16(6) 470 vor 10,14,14 471 mr 28,11 472 lwz 25,20(6) 473 vor 3,15,15 474 mr 29,12 475 lwz 26,24(6) 476 vor 7,16,16 477 mr 30,14 478 lwz 27,28(6) 479 vor 11,17,17 480 mr 31,15 481 482 mr 7,20 483 mr 8,21 484 mr 9,22 485 mr 10,23 486 487 vspltisw 27,12 488 vspltisw 28,7 489 490 mtctr 0 491 nop 492 .Loop_vmx: 493 vadduwm 0,0,1 494 vadduwm 4,4,5 495 vadduwm 8,8,9 496 add 16,16,20 497 add 17,17,21 498 add 18,18,22 499 vxor 3,3,0 500 vxor 7,7,4 501 vxor 11,11,8 502 add 19,19,23 503 xor 28,28,16 504 xor 29,29,17 505 vperm 3,3,3,19 506 vperm 7,7,7,19 507 vperm 11,11,11,19 508 xor 30,30,18 509 xor 31,31,19 510 rotlwi 28,28,16 511 vadduwm 2,2,3 512 vadduwm 6,6,7 513 vadduwm 10,10,11 514 rotlwi 29,29,16 515 rotlwi 30,30,16 516 rotlwi 31,31,16 517 vxor 1,1,2 518 vxor 5,5,6 519 vxor 9,9,10 520 add 24,24,28 521 add 25,25,29 522 add 26,26,30 523 vrlw 1,1,27 524 vrlw 5,5,27 525 vrlw 9,9,27 526 add 27,27,31 527 xor 20,20,24 528 xor 21,21,25 529 vadduwm 0,0,1 530 vadduwm 4,4,5 531 vadduwm 8,8,9 532 xor 22,22,26 533 xor 23,23,27 534 rotlwi 20,20,12 535 vxor 3,3,0 536 vxor 7,7,4 537 vxor 11,11,8 538 rotlwi 21,21,12 539 rotlwi 22,22,12 540 rotlwi 23,23,12 541 vperm 3,3,3,23 542 vperm 7,7,7,23 543 vperm 11,11,11,23 544 add 16,16,20 545 add 17,17,21 546 add 18,18,22 547 vadduwm 2,2,3 548 vadduwm 6,6,7 549 vadduwm 10,10,11 550 add 19,19,23 551 xor 28,28,16 552 xor 29,29,17 553 vxor 1,1,2 554 vxor 5,5,6 555 vxor 9,9,10 556 xor 30,30,18 557 xor 31,31,19 558 rotlwi 28,28,8 559 vrlw 1,1,28 560 vrlw 5,5,28 561 vrlw 9,9,28 562 rotlwi 29,29,8 563 rotlwi 30,30,8 564 rotlwi 31,31,8 565 vsldoi 2,2,2, 8 566 vsldoi 6,6,6, 8 567 vsldoi 10,10,10, 8 568 add 24,24,28 569 add 25,25,29 570 add 26,26,30 571 vsldoi 1,1,1, 12 572 vsldoi 5,5,5, 12 573 vsldoi 9,9,9, 12 574 add 27,27,31 575 xor 20,20,24 576 xor 21,21,25 577 vsldoi 3,3,3, 4 578 vsldoi 7,7,7, 4 579 vsldoi 11,11,11, 4 580 xor 22,22,26 581 xor 23,23,27 582 rotlwi 20,20,7 583 rotlwi 21,21,7 584 rotlwi 22,22,7 585 rotlwi 23,23,7 586 vadduwm 0,0,1 587 vadduwm 4,4,5 588 vadduwm 8,8,9 589 add 16,16,21 590 add 17,17,22 591 add 18,18,23 592 vxor 3,3,0 593 vxor 7,7,4 594 vxor 11,11,8 595 add 19,19,20 596 xor 31,31,16 597 xor 28,28,17 598 vperm 3,3,3,19 599 vperm 7,7,7,19 600 vperm 11,11,11,19 601 xor 29,29,18 602 xor 30,30,19 603 rotlwi 31,31,16 604 vadduwm 2,2,3 605 vadduwm 6,6,7 606 vadduwm 10,10,11 607 rotlwi 28,28,16 608 rotlwi 29,29,16 609 rotlwi 30,30,16 610 vxor 1,1,2 611 vxor 5,5,6 612 vxor 9,9,10 613 add 26,26,31 614 add 27,27,28 615 add 24,24,29 616 vrlw 1,1,27 617 vrlw 5,5,27 618 vrlw 9,9,27 619 add 25,25,30 620 xor 21,21,26 621 xor 22,22,27 622 vadduwm 0,0,1 623 vadduwm 4,4,5 624 vadduwm 8,8,9 625 xor 23,23,24 626 xor 20,20,25 627 rotlwi 21,21,12 628 vxor 3,3,0 629 vxor 7,7,4 630 vxor 11,11,8 631 rotlwi 22,22,12 632 rotlwi 23,23,12 633 rotlwi 20,20,12 634 vperm 3,3,3,23 635 vperm 7,7,7,23 636 vperm 11,11,11,23 637 add 16,16,21 638 add 17,17,22 639 add 18,18,23 640 vadduwm 2,2,3 641 vadduwm 6,6,7 642 vadduwm 10,10,11 643 add 19,19,20 644 xor 31,31,16 645 xor 28,28,17 646 vxor 1,1,2 647 vxor 5,5,6 648 vxor 9,9,10 649 xor 29,29,18 650 xor 30,30,19 651 rotlwi 31,31,8 652 vrlw 1,1,28 653 vrlw 5,5,28 654 vrlw 9,9,28 655 rotlwi 28,28,8 656 rotlwi 29,29,8 657 rotlwi 30,30,8 658 vsldoi 2,2,2, 8 659 vsldoi 6,6,6, 8 660 vsldoi 10,10,10, 8 661 add 26,26,31 662 add 27,27,28 663 add 24,24,29 664 vsldoi 1,1,1, 4 665 vsldoi 5,5,5, 4 666 vsldoi 9,9,9, 4 667 add 25,25,30 668 xor 21,21,26 669 xor 22,22,27 670 vsldoi 3,3,3, 12 671 vsldoi 7,7,7, 12 672 vsldoi 11,11,11, 12 673 xor 23,23,24 674 xor 20,20,25 675 rotlwi 21,21,7 676 rotlwi 22,22,7 677 rotlwi 23,23,7 678 rotlwi 20,20,7 679 bdnz .Loop_vmx 680 681 subi 5,5,256 682 addi 16,16,0x7865 683 addi 17,17,0x646e 684 addi 18,18,0x2d32 685 addi 19,19,0x6574 686 addis 16,16,0x6170 687 addis 17,17,0x3320 688 addis 18,18,0x7962 689 addis 19,19,0x6b20 690 add 20,20,7 691 lwz 7,16(6) 692 add 21,21,8 693 lwz 8,20(6) 694 add 22,22,9 695 lwz 9,24(6) 696 add 23,23,10 697 lwz 10,28(6) 698 add 24,24,7 699 add 25,25,8 700 add 26,26,9 701 add 27,27,10 702 add 28,28,11 703 add 29,29,12 704 add 30,30,14 705 add 31,31,15 706 707 vadduwm 0,0,12 708 vadduwm 4,4,12 709 vadduwm 8,8,12 710 vadduwm 1,1,13 711 vadduwm 5,5,13 712 vadduwm 9,9,13 713 vadduwm 2,2,14 714 vadduwm 6,6,14 715 vadduwm 10,10,14 716 vadduwm 3,3,15 717 vadduwm 7,7,16 718 vadduwm 11,11,17 719 720 addi 11,11,4 721 vadduwm 15,15,18 722 vadduwm 16,16,18 723 vadduwm 17,17,18 724 725 lwz 7,0(4) 726 lwz 8,4(4) 727 lwz 9,8(4) 728 lwz 10,12(4) 729 xor 16,16,7 730 lwz 7,16(4) 731 xor 17,17,8 732 lwz 8,20(4) 733 xor 18,18,9 734 lwz 9,24(4) 735 xor 19,19,10 736 lwz 10,28(4) 737 xor 20,20,7 738 lwz 7,32(4) 739 xor 21,21,8 740 lwz 8,36(4) 741 xor 22,22,9 742 lwz 9,40(4) 743 xor 23,23,10 744 lwz 10,44(4) 745 xor 24,24,7 746 lwz 7,48(4) 747 xor 25,25,8 748 lwz 8,52(4) 749 xor 26,26,9 750 lwz 9,56(4) 751 xor 27,27,10 752 lwz 10,60(4) 753 xor 28,28,7 754 stw 16,0(3) 755 xor 29,29,8 756 stw 17,4(3) 757 xor 30,30,9 758 stw 18,8(3) 759 xor 31,31,10 760 stw 19,12(3) 761 addi 4,4,64 762 stw 20,16(3) 763 li 7,16 764 stw 21,20(3) 765 li 8,32 766 stw 22,24(3) 767 li 9,48 768 stw 23,28(3) 769 li 10,64 770 stw 24,32(3) 771 stw 25,36(3) 772 stw 26,40(3) 773 stw 27,44(3) 774 stw 28,48(3) 775 stw 29,52(3) 776 stw 30,56(3) 777 stw 31,60(3) 778 addi 3,3,64 779 780 lvx 27,0,4 781 lvx 28,7,4 782 lvx 29,8,4 783 lvx 30,9,4 784 lvx 31,10,4 785 addi 4,4,64 786 787 vperm 27,28,27,24 788 vperm 28,29,28,24 789 vperm 29,30,29,24 790 vperm 30,31,30,24 791 vxor 0,0,27 792 vxor 1,1,28 793 lvx 28,7,4 794 vxor 2,2,29 795 lvx 29,8,4 796 vxor 3,3,30 797 lvx 30,9,4 798 lvx 27,10,4 799 addi 4,4,64 800 li 10,63 801 vperm 0,0,0,25 802 vperm 1,1,1,25 803 vperm 2,2,2,25 804 vperm 3,3,3,25 805 806 vperm 31,28,31,24 807 vperm 28,29,28,24 808 vperm 29,30,29,24 809 vperm 30,27,30,24 810 vxor 4,4,31 811 vxor 5,5,28 812 lvx 28,7,4 813 vxor 6,6,29 814 lvx 29,8,4 815 vxor 7,7,30 816 lvx 30,9,4 817 lvx 31,10,4 818 addi 4,4,64 819 vperm 4,4,4,25 820 vperm 5,5,5,25 821 vperm 6,6,6,25 822 vperm 7,7,7,25 823 824 vperm 27,28,27,24 825 vperm 28,29,28,24 826 vperm 29,30,29,24 827 vperm 30,31,30,24 828 vxor 8,8,27 829 vxor 9,9,28 830 vxor 10,10,29 831 vxor 11,11,30 832 vperm 8,8,8,25 833 vperm 9,9,9,25 834 vperm 10,10,10,25 835 vperm 11,11,11,25 836 837 andi. 17,3,15 838 mr 16,3 839 840 vsel 27,0,1,26 841 vsel 28,1,2,26 842 vsel 29,2,3,26 843 vsel 30,3,4,26 844 vsel 1,4,5,26 845 vsel 2,5,6,26 846 vsel 3,6,7,26 847 vsel 4,7,8,26 848 vsel 5,8,9,26 849 vsel 6,9,10,26 850 vsel 7,10,11,26 851 852 853 stvx 27,7,3 854 stvx 28,8,3 855 stvx 29,9,3 856 addi 3,3,64 857 stvx 30,0,3 858 stvx 1,7,3 859 stvx 2,8,3 860 stvx 3,9,3 861 addi 3,3,64 862 stvx 4,0,3 863 stvx 5,7,3 864 stvx 6,8,3 865 stvx 7,9,3 866 addi 3,3,64 867 868 beq .Laligned_vmx 869 870 sub 18,3,17 871 li 19,0 872 .Lunaligned_tail_vmx: 873 stvebx 11,19,18 874 addi 19,19,1 875 cmpw 19,17 876 bne .Lunaligned_tail_vmx 877 878 sub 18,16,17 879 .Lunaligned_head_vmx: 880 stvebx 0,17,18 881 cmpwi 17,15 882 addi 17,17,1 883 bne .Lunaligned_head_vmx 884 885 cmpldi 5,255 886 bgt .Loop_outer_vmx 887 888 b .Ldone_vmx 889 890 .align 4 891 .Laligned_vmx: 892 stvx 0,0,16 893 894 cmpldi 5,255 895 bgt .Loop_outer_vmx 896 nop 897 898 .Ldone_vmx: 899 cmpldi 5,0 900 bnel __ChaCha20_1x 901 902 lwz 12,268(1) 903 li 10,127 904 li 11,143 905 or 12,12,12 906 lvx 23,10,1 907 addi 10,10,32 908 lvx 24,11,1 909 addi 11,11,32 910 lvx 25,10,1 911 addi 10,10,32 912 lvx 26,11,1 913 addi 11,11,32 914 lvx 27,10,1 915 addi 10,10,32 916 lvx 28,11,1 917 addi 11,11,32 918 lvx 29,10,1 919 addi 10,10,32 920 lvx 30,11,1 921 lvx 31,10,1 922 ld 0, 432(1) 923 ld 14,272(1) 924 ld 15,280(1) 925 ld 16,288(1) 926 ld 17,296(1) 927 ld 18,304(1) 928 ld 19,312(1) 929 ld 20,320(1) 930 ld 21,328(1) 931 ld 22,336(1) 932 ld 23,344(1) 933 ld 24,352(1) 934 ld 25,360(1) 935 ld 26,368(1) 936 ld 27,376(1) 937 ld 28,384(1) 938 ld 29,392(1) 939 ld 30,400(1) 940 ld 31,408(1) 941 mtlr 0 942 addi 1,1,416 943 blr 944 .long 0 945 .byte 0,12,0x04,1,0x80,18,5,0 946 .long 0 947 .size ChaCha20_ctr32_vmx,.-ChaCha20_ctr32_vmx 948 949 .globl ChaCha20_ctr32_vsx 950 .type ChaCha20_ctr32_vsx,@function 951 .align 5 952 ChaCha20_ctr32_vsx: 953 .localentry ChaCha20_ctr32_vsx,0 954 955 stdu 1,-224(1) 956 mflr 0 957 li 10,127 958 li 11,143 959 li 12,-1 960 stvx 26,10,1 961 addi 10,10,32 962 stvx 27,11,1 963 addi 11,11,32 964 stvx 28,10,1 965 addi 10,10,32 966 stvx 29,11,1 967 addi 11,11,32 968 stvx 30,10,1 969 stvx 31,11,1 970 stw 12,220(1) 971 li 12,-4096+63 972 std 0, 240(1) 973 or 12,12,12 974 975 bl .Lconsts 976 .long 0x7E006619 977 addi 12,12,0x50 978 li 8,16 979 li 9,32 980 li 10,48 981 li 11,64 982 983 .long 0x7E203619 984 .long 0x7E483619 985 .long 0x7E603E19 986 987 vxor 27,27,27 988 .long 0x7F8B6619 989 vspltw 26,19,0 990 vsldoi 19,19,27,4 991 vsldoi 19,27,19,12 992 vadduwm 26,26,28 993 994 995 996 997 998 li 0,10 999 mtctr 0 1000 b .Loop_outer_vsx 1001 1002 .align 5 1003 .Loop_outer_vsx: 1004 lvx 0,0,12 1005 lvx 1,8,12 1006 lvx 2,9,12 1007 lvx 3,10,12 1008 1009 vspltw 4,17,0 1010 vspltw 5,17,1 1011 vspltw 6,17,2 1012 vspltw 7,17,3 1013 1014 vspltw 8,18,0 1015 vspltw 9,18,1 1016 vspltw 10,18,2 1017 vspltw 11,18,3 1018 1019 vor 12,26,26 1020 vspltw 13,19,1 1021 vspltw 14,19,2 1022 vspltw 15,19,3 1023 1024 vspltisw 27,-16 1025 vspltisw 28,12 1026 vspltisw 29,8 1027 vspltisw 30,7 1028 1029 .Loop_vsx: 1030 vadduwm 0,0,4 1031 vadduwm 1,1,5 1032 vadduwm 2,2,6 1033 vadduwm 3,3,7 1034 vxor 12,12,0 1035 vxor 13,13,1 1036 vxor 14,14,2 1037 vxor 15,15,3 1038 vrlw 12,12,27 1039 vrlw 13,13,27 1040 vrlw 14,14,27 1041 vrlw 15,15,27 1042 vadduwm 8,8,12 1043 vadduwm 9,9,13 1044 vadduwm 10,10,14 1045 vadduwm 11,11,15 1046 vxor 4,4,8 1047 vxor 5,5,9 1048 vxor 6,6,10 1049 vxor 7,7,11 1050 vrlw 4,4,28 1051 vrlw 5,5,28 1052 vrlw 6,6,28 1053 vrlw 7,7,28 1054 vadduwm 0,0,4 1055 vadduwm 1,1,5 1056 vadduwm 2,2,6 1057 vadduwm 3,3,7 1058 vxor 12,12,0 1059 vxor 13,13,1 1060 vxor 14,14,2 1061 vxor 15,15,3 1062 vrlw 12,12,29 1063 vrlw 13,13,29 1064 vrlw 14,14,29 1065 vrlw 15,15,29 1066 vadduwm 8,8,12 1067 vadduwm 9,9,13 1068 vadduwm 10,10,14 1069 vadduwm 11,11,15 1070 vxor 4,4,8 1071 vxor 5,5,9 1072 vxor 6,6,10 1073 vxor 7,7,11 1074 vrlw 4,4,30 1075 vrlw 5,5,30 1076 vrlw 6,6,30 1077 vrlw 7,7,30 1078 vadduwm 0,0,5 1079 vadduwm 1,1,6 1080 vadduwm 2,2,7 1081 vadduwm 3,3,4 1082 vxor 15,15,0 1083 vxor 12,12,1 1084 vxor 13,13,2 1085 vxor 14,14,3 1086 vrlw 15,15,27 1087 vrlw 12,12,27 1088 vrlw 13,13,27 1089 vrlw 14,14,27 1090 vadduwm 10,10,15 1091 vadduwm 11,11,12 1092 vadduwm 8,8,13 1093 vadduwm 9,9,14 1094 vxor 5,5,10 1095 vxor 6,6,11 1096 vxor 7,7,8 1097 vxor 4,4,9 1098 vrlw 5,5,28 1099 vrlw 6,6,28 1100 vrlw 7,7,28 1101 vrlw 4,4,28 1102 vadduwm 0,0,5 1103 vadduwm 1,1,6 1104 vadduwm 2,2,7 1105 vadduwm 3,3,4 1106 vxor 15,15,0 1107 vxor 12,12,1 1108 vxor 13,13,2 1109 vxor 14,14,3 1110 vrlw 15,15,29 1111 vrlw 12,12,29 1112 vrlw 13,13,29 1113 vrlw 14,14,29 1114 vadduwm 10,10,15 1115 vadduwm 11,11,12 1116 vadduwm 8,8,13 1117 vadduwm 9,9,14 1118 vxor 5,5,10 1119 vxor 6,6,11 1120 vxor 7,7,8 1121 vxor 4,4,9 1122 vrlw 5,5,30 1123 vrlw 6,6,30 1124 vrlw 7,7,30 1125 vrlw 4,4,30 1126 bdnz .Loop_vsx 1127 1128 vadduwm 12,12,26 1129 1130 .long 0x13600F8C 1131 .long 0x13821F8C 1132 .long 0x10000E8C 1133 .long 0x10421E8C 1134 .long 0x13A42F8C 1135 .long 0x13C63F8C 1136 .long 0xF0201057 1137 .long 0xF0601357 1138 .long 0xF01BE057 1139 .long 0xF05BE357 1140 1141 .long 0x10842E8C 1142 .long 0x10C63E8C 1143 .long 0x13684F8C 1144 .long 0x138A5F8C 1145 .long 0xF0A43057 1146 .long 0xF0E43357 1147 .long 0xF09DF057 1148 .long 0xF0DDF357 1149 1150 .long 0x11084E8C 1151 .long 0x114A5E8C 1152 .long 0x13AC6F8C 1153 .long 0x13CE7F8C 1154 .long 0xF1285057 1155 .long 0xF1685357 1156 .long 0xF11BE057 1157 .long 0xF15BE357 1158 1159 .long 0x118C6E8C 1160 .long 0x11CE7E8C 1161 vspltisw 27,4 1162 vadduwm 26,26,27 1163 .long 0xF1AC7057 1164 .long 0xF1EC7357 1165 .long 0xF19DF057 1166 .long 0xF1DDF357 1167 1168 vadduwm 0,0,16 1169 vadduwm 4,4,17 1170 vadduwm 8,8,18 1171 vadduwm 12,12,19 1172 1173 1174 1175 1176 1177 1178 cmpldi 5,0x40 1179 blt .Ltail_vsx 1180 1181 .long 0x7F602619 1182 .long 0x7F882619 1183 .long 0x7FA92619 1184 .long 0x7FCA2619 1185 1186 vxor 27,27,0 1187 vxor 28,28,4 1188 vxor 29,29,8 1189 vxor 30,30,12 1190 1191 .long 0x7F601F19 1192 .long 0x7F881F19 1193 addi 4,4,0x40 1194 .long 0x7FA91F19 1195 subi 5,5,0x40 1196 .long 0x7FCA1F19 1197 addi 3,3,0x40 1198 beq .Ldone_vsx 1199 1200 vadduwm 0,1,16 1201 vadduwm 4,5,17 1202 vadduwm 8,9,18 1203 vadduwm 12,13,19 1204 1205 1206 1207 1208 1209 1210 cmpldi 5,0x40 1211 blt .Ltail_vsx 1212 1213 .long 0x7F602619 1214 .long 0x7F882619 1215 .long 0x7FA92619 1216 .long 0x7FCA2619 1217 1218 vxor 27,27,0 1219 vxor 28,28,4 1220 vxor 29,29,8 1221 vxor 30,30,12 1222 1223 .long 0x7F601F19 1224 .long 0x7F881F19 1225 addi 4,4,0x40 1226 .long 0x7FA91F19 1227 subi 5,5,0x40 1228 .long 0x7FCA1F19 1229 addi 3,3,0x40 1230 beq .Ldone_vsx 1231 1232 vadduwm 0,2,16 1233 vadduwm 4,6,17 1234 vadduwm 8,10,18 1235 vadduwm 12,14,19 1236 1237 1238 1239 1240 1241 1242 cmpldi 5,0x40 1243 blt .Ltail_vsx 1244 1245 .long 0x7F602619 1246 .long 0x7F882619 1247 .long 0x7FA92619 1248 .long 0x7FCA2619 1249 1250 vxor 27,27,0 1251 vxor 28,28,4 1252 vxor 29,29,8 1253 vxor 30,30,12 1254 1255 .long 0x7F601F19 1256 .long 0x7F881F19 1257 addi 4,4,0x40 1258 .long 0x7FA91F19 1259 subi 5,5,0x40 1260 .long 0x7FCA1F19 1261 addi 3,3,0x40 1262 beq .Ldone_vsx 1263 1264 vadduwm 0,3,16 1265 vadduwm 4,7,17 1266 vadduwm 8,11,18 1267 vadduwm 12,15,19 1268 1269 1270 1271 1272 1273 1274 cmpldi 5,0x40 1275 blt .Ltail_vsx 1276 1277 .long 0x7F602619 1278 .long 0x7F882619 1279 .long 0x7FA92619 1280 .long 0x7FCA2619 1281 1282 vxor 27,27,0 1283 vxor 28,28,4 1284 vxor 29,29,8 1285 vxor 30,30,12 1286 1287 .long 0x7F601F19 1288 .long 0x7F881F19 1289 addi 4,4,0x40 1290 .long 0x7FA91F19 1291 subi 5,5,0x40 1292 .long 0x7FCA1F19 1293 addi 3,3,0x40 1294 mtctr 0 1295 bne .Loop_outer_vsx 1296 1297 .Ldone_vsx: 1298 lwz 12,220(1) 1299 li 10,127 1300 li 11,143 1301 ld 0, 240(1) 1302 or 12,12,12 1303 lvx 26,10,1 1304 addi 10,10,32 1305 lvx 27,11,1 1306 addi 11,11,32 1307 lvx 28,10,1 1308 addi 10,10,32 1309 lvx 29,11,1 1310 addi 11,11,32 1311 lvx 30,10,1 1312 lvx 31,11,1 1313 mtlr 0 1314 addi 1,1,224 1315 blr 1316 1317 .align 4 1318 .Ltail_vsx: 1319 addi 11,1,48 1320 mtctr 5 1321 .long 0x7C005F19 1322 .long 0x7C885F19 1323 .long 0x7D095F19 1324 .long 0x7D8A5F19 1325 subi 12,11,1 1326 subi 4,4,1 1327 subi 3,3,1 1328 1329 .Loop_tail_vsx: 1330 lbzu 6,1(12) 1331 lbzu 7,1(4) 1332 xor 6,6,7 1333 stbu 6,1(3) 1334 bdnz .Loop_tail_vsx 1335 1336 .long 0x7E005F19 1337 .long 0x7E085F19 1338 .long 0x7E095F19 1339 .long 0x7E0A5F19 1340 1341 b .Ldone_vsx 1342 .long 0 1343 .byte 0,12,0x04,1,0x80,0,5,0 1344 .long 0 1345 .size ChaCha20_ctr32_vsx,.-ChaCha20_ctr32_vsx 1346 .align 5 1347 .Lconsts: 1348 mflr 0 1349 bcl 20,31,$+4 1350 mflr 12 1351 addi 12,12,56 1352 mtlr 0 1353 blr 1354 .long 0 1355 .byte 0,12,0x14,0,0,0,0,0 1356 .space 28 1357 .Lsigma: 1358 .long 0x61707865,0x3320646e,0x79622d32,0x6b206574 1359 .long 1,0,0,0 1360 .long 4,0,0,0 1361 .long 0x0e0f0c0d,0x0a0b0809,0x06070405,0x02030001 1362 .long 0x0d0e0f0c,0x090a0b08,0x05060704,0x01020300 1363 .long 0x61707865,0x61707865,0x61707865,0x61707865 1364 .long 0x3320646e,0x3320646e,0x3320646e,0x3320646e 1365 .long 0x79622d32,0x79622d32,0x79622d32,0x79622d32 1366 .long 0x6b206574,0x6b206574,0x6b206574,0x6b206574 1367 .long 0,1,2,3 1368 .byte 67,104,97,67,104,97,50,48,32,102,111,114,32,80,111,119,101,114,80,67,47,65,108,116,105,86,101,99,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 1369 .align 2 1370 .align 2 1371