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