1// This file is generated from a similarly-named Perl script in the BoringSSL 2// source tree. Do not edit by hand. 3 4#include <ring-core/asm_base.h> 5 6#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && defined(__APPLE__) 7.text 8 9 10 11.section __DATA,__const 12.p2align 6 13L$poly: 14.quad 0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001 15 16L$One: 17.long 1,1,1,1,1,1,1,1 18L$Two: 19.long 2,2,2,2,2,2,2,2 20L$Three: 21.long 3,3,3,3,3,3,3,3 22L$ONE_mont: 23.quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe 24 25 26L$ord: 27.quad 0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000 28L$ordK: 29.quad 0xccd1c8aaee00bc4f 30.text 31 32 33 34.globl _ecp_nistz256_neg 35.private_extern _ecp_nistz256_neg 36 37.p2align 5 38_ecp_nistz256_neg: 39 40_CET_ENDBR 41 pushq %r12 42 43 pushq %r13 44 45L$neg_body: 46 47 xorq %r8,%r8 48 xorq %r9,%r9 49 xorq %r10,%r10 50 xorq %r11,%r11 51 xorq %r13,%r13 52 53 subq 0(%rsi),%r8 54 sbbq 8(%rsi),%r9 55 sbbq 16(%rsi),%r10 56 movq %r8,%rax 57 sbbq 24(%rsi),%r11 58 leaq L$poly(%rip),%rsi 59 movq %r9,%rdx 60 sbbq $0,%r13 61 62 addq 0(%rsi),%r8 63 movq %r10,%rcx 64 adcq 8(%rsi),%r9 65 adcq 16(%rsi),%r10 66 movq %r11,%r12 67 adcq 24(%rsi),%r11 68 testq %r13,%r13 69 70 cmovzq %rax,%r8 71 cmovzq %rdx,%r9 72 movq %r8,0(%rdi) 73 cmovzq %rcx,%r10 74 movq %r9,8(%rdi) 75 cmovzq %r12,%r11 76 movq %r10,16(%rdi) 77 movq %r11,24(%rdi) 78 79 movq 0(%rsp),%r13 80 81 movq 8(%rsp),%r12 82 83 leaq 16(%rsp),%rsp 84 85L$neg_epilogue: 86 ret 87 88 89 90 91 92 93 94 95.globl _ecp_nistz256_ord_mul_mont 96.private_extern _ecp_nistz256_ord_mul_mont 97 98.p2align 5 99_ecp_nistz256_ord_mul_mont: 100 101_CET_ENDBR 102 leaq _OPENSSL_ia32cap_P(%rip),%rcx 103 movq 8(%rcx),%rcx 104 andl $0x80100,%ecx 105 cmpl $0x80100,%ecx 106 je L$ecp_nistz256_ord_mul_montx 107 pushq %rbp 108 109 pushq %rbx 110 111 pushq %r12 112 113 pushq %r13 114 115 pushq %r14 116 117 pushq %r15 118 119L$ord_mul_body: 120 121 movq 0(%rdx),%rax 122 movq %rdx,%rbx 123 leaq L$ord(%rip),%r14 124 movq L$ordK(%rip),%r15 125 126 127 movq %rax,%rcx 128 mulq 0(%rsi) 129 movq %rax,%r8 130 movq %rcx,%rax 131 movq %rdx,%r9 132 133 mulq 8(%rsi) 134 addq %rax,%r9 135 movq %rcx,%rax 136 adcq $0,%rdx 137 movq %rdx,%r10 138 139 mulq 16(%rsi) 140 addq %rax,%r10 141 movq %rcx,%rax 142 adcq $0,%rdx 143 144 movq %r8,%r13 145 imulq %r15,%r8 146 147 movq %rdx,%r11 148 mulq 24(%rsi) 149 addq %rax,%r11 150 movq %r8,%rax 151 adcq $0,%rdx 152 movq %rdx,%r12 153 154 155 mulq 0(%r14) 156 movq %r8,%rbp 157 addq %rax,%r13 158 movq %r8,%rax 159 adcq $0,%rdx 160 movq %rdx,%rcx 161 162 subq %r8,%r10 163 sbbq $0,%r8 164 165 mulq 8(%r14) 166 addq %rcx,%r9 167 adcq $0,%rdx 168 addq %rax,%r9 169 movq %rbp,%rax 170 adcq %rdx,%r10 171 movq %rbp,%rdx 172 adcq $0,%r8 173 174 shlq $32,%rax 175 shrq $32,%rdx 176 subq %rax,%r11 177 movq 8(%rbx),%rax 178 sbbq %rdx,%rbp 179 180 addq %r8,%r11 181 adcq %rbp,%r12 182 adcq $0,%r13 183 184 185 movq %rax,%rcx 186 mulq 0(%rsi) 187 addq %rax,%r9 188 movq %rcx,%rax 189 adcq $0,%rdx 190 movq %rdx,%rbp 191 192 mulq 8(%rsi) 193 addq %rbp,%r10 194 adcq $0,%rdx 195 addq %rax,%r10 196 movq %rcx,%rax 197 adcq $0,%rdx 198 movq %rdx,%rbp 199 200 mulq 16(%rsi) 201 addq %rbp,%r11 202 adcq $0,%rdx 203 addq %rax,%r11 204 movq %rcx,%rax 205 adcq $0,%rdx 206 207 movq %r9,%rcx 208 imulq %r15,%r9 209 210 movq %rdx,%rbp 211 mulq 24(%rsi) 212 addq %rbp,%r12 213 adcq $0,%rdx 214 xorq %r8,%r8 215 addq %rax,%r12 216 movq %r9,%rax 217 adcq %rdx,%r13 218 adcq $0,%r8 219 220 221 mulq 0(%r14) 222 movq %r9,%rbp 223 addq %rax,%rcx 224 movq %r9,%rax 225 adcq %rdx,%rcx 226 227 subq %r9,%r11 228 sbbq $0,%r9 229 230 mulq 8(%r14) 231 addq %rcx,%r10 232 adcq $0,%rdx 233 addq %rax,%r10 234 movq %rbp,%rax 235 adcq %rdx,%r11 236 movq %rbp,%rdx 237 adcq $0,%r9 238 239 shlq $32,%rax 240 shrq $32,%rdx 241 subq %rax,%r12 242 movq 16(%rbx),%rax 243 sbbq %rdx,%rbp 244 245 addq %r9,%r12 246 adcq %rbp,%r13 247 adcq $0,%r8 248 249 250 movq %rax,%rcx 251 mulq 0(%rsi) 252 addq %rax,%r10 253 movq %rcx,%rax 254 adcq $0,%rdx 255 movq %rdx,%rbp 256 257 mulq 8(%rsi) 258 addq %rbp,%r11 259 adcq $0,%rdx 260 addq %rax,%r11 261 movq %rcx,%rax 262 adcq $0,%rdx 263 movq %rdx,%rbp 264 265 mulq 16(%rsi) 266 addq %rbp,%r12 267 adcq $0,%rdx 268 addq %rax,%r12 269 movq %rcx,%rax 270 adcq $0,%rdx 271 272 movq %r10,%rcx 273 imulq %r15,%r10 274 275 movq %rdx,%rbp 276 mulq 24(%rsi) 277 addq %rbp,%r13 278 adcq $0,%rdx 279 xorq %r9,%r9 280 addq %rax,%r13 281 movq %r10,%rax 282 adcq %rdx,%r8 283 adcq $0,%r9 284 285 286 mulq 0(%r14) 287 movq %r10,%rbp 288 addq %rax,%rcx 289 movq %r10,%rax 290 adcq %rdx,%rcx 291 292 subq %r10,%r12 293 sbbq $0,%r10 294 295 mulq 8(%r14) 296 addq %rcx,%r11 297 adcq $0,%rdx 298 addq %rax,%r11 299 movq %rbp,%rax 300 adcq %rdx,%r12 301 movq %rbp,%rdx 302 adcq $0,%r10 303 304 shlq $32,%rax 305 shrq $32,%rdx 306 subq %rax,%r13 307 movq 24(%rbx),%rax 308 sbbq %rdx,%rbp 309 310 addq %r10,%r13 311 adcq %rbp,%r8 312 adcq $0,%r9 313 314 315 movq %rax,%rcx 316 mulq 0(%rsi) 317 addq %rax,%r11 318 movq %rcx,%rax 319 adcq $0,%rdx 320 movq %rdx,%rbp 321 322 mulq 8(%rsi) 323 addq %rbp,%r12 324 adcq $0,%rdx 325 addq %rax,%r12 326 movq %rcx,%rax 327 adcq $0,%rdx 328 movq %rdx,%rbp 329 330 mulq 16(%rsi) 331 addq %rbp,%r13 332 adcq $0,%rdx 333 addq %rax,%r13 334 movq %rcx,%rax 335 adcq $0,%rdx 336 337 movq %r11,%rcx 338 imulq %r15,%r11 339 340 movq %rdx,%rbp 341 mulq 24(%rsi) 342 addq %rbp,%r8 343 adcq $0,%rdx 344 xorq %r10,%r10 345 addq %rax,%r8 346 movq %r11,%rax 347 adcq %rdx,%r9 348 adcq $0,%r10 349 350 351 mulq 0(%r14) 352 movq %r11,%rbp 353 addq %rax,%rcx 354 movq %r11,%rax 355 adcq %rdx,%rcx 356 357 subq %r11,%r13 358 sbbq $0,%r11 359 360 mulq 8(%r14) 361 addq %rcx,%r12 362 adcq $0,%rdx 363 addq %rax,%r12 364 movq %rbp,%rax 365 adcq %rdx,%r13 366 movq %rbp,%rdx 367 adcq $0,%r11 368 369 shlq $32,%rax 370 shrq $32,%rdx 371 subq %rax,%r8 372 sbbq %rdx,%rbp 373 374 addq %r11,%r8 375 adcq %rbp,%r9 376 adcq $0,%r10 377 378 379 movq %r12,%rsi 380 subq 0(%r14),%r12 381 movq %r13,%r11 382 sbbq 8(%r14),%r13 383 movq %r8,%rcx 384 sbbq 16(%r14),%r8 385 movq %r9,%rbp 386 sbbq 24(%r14),%r9 387 sbbq $0,%r10 388 389 cmovcq %rsi,%r12 390 cmovcq %r11,%r13 391 cmovcq %rcx,%r8 392 cmovcq %rbp,%r9 393 394 movq %r12,0(%rdi) 395 movq %r13,8(%rdi) 396 movq %r8,16(%rdi) 397 movq %r9,24(%rdi) 398 399 movq 0(%rsp),%r15 400 401 movq 8(%rsp),%r14 402 403 movq 16(%rsp),%r13 404 405 movq 24(%rsp),%r12 406 407 movq 32(%rsp),%rbx 408 409 movq 40(%rsp),%rbp 410 411 leaq 48(%rsp),%rsp 412 413L$ord_mul_epilogue: 414 ret 415 416 417 418 419 420 421 422 423 424.globl _ecp_nistz256_ord_sqr_mont 425.private_extern _ecp_nistz256_ord_sqr_mont 426 427.p2align 5 428_ecp_nistz256_ord_sqr_mont: 429 430_CET_ENDBR 431 leaq _OPENSSL_ia32cap_P(%rip),%rcx 432 movq 8(%rcx),%rcx 433 andl $0x80100,%ecx 434 cmpl $0x80100,%ecx 435 je L$ecp_nistz256_ord_sqr_montx 436 pushq %rbp 437 438 pushq %rbx 439 440 pushq %r12 441 442 pushq %r13 443 444 pushq %r14 445 446 pushq %r15 447 448L$ord_sqr_body: 449 450 movq 0(%rsi),%r8 451 movq 8(%rsi),%rax 452 movq 16(%rsi),%r14 453 movq 24(%rsi),%r15 454 leaq L$ord(%rip),%rsi 455 movq %rdx,%rbx 456 jmp L$oop_ord_sqr 457 458.p2align 5 459L$oop_ord_sqr: 460 461 movq %rax,%rbp 462 mulq %r8 463 movq %rax,%r9 464.byte 102,72,15,110,205 465 movq %r14,%rax 466 movq %rdx,%r10 467 468 mulq %r8 469 addq %rax,%r10 470 movq %r15,%rax 471.byte 102,73,15,110,214 472 adcq $0,%rdx 473 movq %rdx,%r11 474 475 mulq %r8 476 addq %rax,%r11 477 movq %r15,%rax 478.byte 102,73,15,110,223 479 adcq $0,%rdx 480 movq %rdx,%r12 481 482 483 mulq %r14 484 movq %rax,%r13 485 movq %r14,%rax 486 movq %rdx,%r14 487 488 489 mulq %rbp 490 addq %rax,%r11 491 movq %r15,%rax 492 adcq $0,%rdx 493 movq %rdx,%r15 494 495 mulq %rbp 496 addq %rax,%r12 497 adcq $0,%rdx 498 499 addq %r15,%r12 500 adcq %rdx,%r13 501 adcq $0,%r14 502 503 504 xorq %r15,%r15 505 movq %r8,%rax 506 addq %r9,%r9 507 adcq %r10,%r10 508 adcq %r11,%r11 509 adcq %r12,%r12 510 adcq %r13,%r13 511 adcq %r14,%r14 512 adcq $0,%r15 513 514 515 mulq %rax 516 movq %rax,%r8 517.byte 102,72,15,126,200 518 movq %rdx,%rbp 519 520 mulq %rax 521 addq %rbp,%r9 522 adcq %rax,%r10 523.byte 102,72,15,126,208 524 adcq $0,%rdx 525 movq %rdx,%rbp 526 527 mulq %rax 528 addq %rbp,%r11 529 adcq %rax,%r12 530.byte 102,72,15,126,216 531 adcq $0,%rdx 532 movq %rdx,%rbp 533 534 movq %r8,%rcx 535 imulq 32(%rsi),%r8 536 537 mulq %rax 538 addq %rbp,%r13 539 adcq %rax,%r14 540 movq 0(%rsi),%rax 541 adcq %rdx,%r15 542 543 544 mulq %r8 545 movq %r8,%rbp 546 addq %rax,%rcx 547 movq 8(%rsi),%rax 548 adcq %rdx,%rcx 549 550 subq %r8,%r10 551 sbbq $0,%rbp 552 553 mulq %r8 554 addq %rcx,%r9 555 adcq $0,%rdx 556 addq %rax,%r9 557 movq %r8,%rax 558 adcq %rdx,%r10 559 movq %r8,%rdx 560 adcq $0,%rbp 561 562 movq %r9,%rcx 563 imulq 32(%rsi),%r9 564 565 shlq $32,%rax 566 shrq $32,%rdx 567 subq %rax,%r11 568 movq 0(%rsi),%rax 569 sbbq %rdx,%r8 570 571 addq %rbp,%r11 572 adcq $0,%r8 573 574 575 mulq %r9 576 movq %r9,%rbp 577 addq %rax,%rcx 578 movq 8(%rsi),%rax 579 adcq %rdx,%rcx 580 581 subq %r9,%r11 582 sbbq $0,%rbp 583 584 mulq %r9 585 addq %rcx,%r10 586 adcq $0,%rdx 587 addq %rax,%r10 588 movq %r9,%rax 589 adcq %rdx,%r11 590 movq %r9,%rdx 591 adcq $0,%rbp 592 593 movq %r10,%rcx 594 imulq 32(%rsi),%r10 595 596 shlq $32,%rax 597 shrq $32,%rdx 598 subq %rax,%r8 599 movq 0(%rsi),%rax 600 sbbq %rdx,%r9 601 602 addq %rbp,%r8 603 adcq $0,%r9 604 605 606 mulq %r10 607 movq %r10,%rbp 608 addq %rax,%rcx 609 movq 8(%rsi),%rax 610 adcq %rdx,%rcx 611 612 subq %r10,%r8 613 sbbq $0,%rbp 614 615 mulq %r10 616 addq %rcx,%r11 617 adcq $0,%rdx 618 addq %rax,%r11 619 movq %r10,%rax 620 adcq %rdx,%r8 621 movq %r10,%rdx 622 adcq $0,%rbp 623 624 movq %r11,%rcx 625 imulq 32(%rsi),%r11 626 627 shlq $32,%rax 628 shrq $32,%rdx 629 subq %rax,%r9 630 movq 0(%rsi),%rax 631 sbbq %rdx,%r10 632 633 addq %rbp,%r9 634 adcq $0,%r10 635 636 637 mulq %r11 638 movq %r11,%rbp 639 addq %rax,%rcx 640 movq 8(%rsi),%rax 641 adcq %rdx,%rcx 642 643 subq %r11,%r9 644 sbbq $0,%rbp 645 646 mulq %r11 647 addq %rcx,%r8 648 adcq $0,%rdx 649 addq %rax,%r8 650 movq %r11,%rax 651 adcq %rdx,%r9 652 movq %r11,%rdx 653 adcq $0,%rbp 654 655 shlq $32,%rax 656 shrq $32,%rdx 657 subq %rax,%r10 658 sbbq %rdx,%r11 659 660 addq %rbp,%r10 661 adcq $0,%r11 662 663 664 xorq %rdx,%rdx 665 addq %r12,%r8 666 adcq %r13,%r9 667 movq %r8,%r12 668 adcq %r14,%r10 669 adcq %r15,%r11 670 movq %r9,%rax 671 adcq $0,%rdx 672 673 674 subq 0(%rsi),%r8 675 movq %r10,%r14 676 sbbq 8(%rsi),%r9 677 sbbq 16(%rsi),%r10 678 movq %r11,%r15 679 sbbq 24(%rsi),%r11 680 sbbq $0,%rdx 681 682 cmovcq %r12,%r8 683 cmovncq %r9,%rax 684 cmovncq %r10,%r14 685 cmovncq %r11,%r15 686 687 decq %rbx 688 jnz L$oop_ord_sqr 689 690 movq %r8,0(%rdi) 691 movq %rax,8(%rdi) 692 pxor %xmm1,%xmm1 693 movq %r14,16(%rdi) 694 pxor %xmm2,%xmm2 695 movq %r15,24(%rdi) 696 pxor %xmm3,%xmm3 697 698 movq 0(%rsp),%r15 699 700 movq 8(%rsp),%r14 701 702 movq 16(%rsp),%r13 703 704 movq 24(%rsp),%r12 705 706 movq 32(%rsp),%rbx 707 708 movq 40(%rsp),%rbp 709 710 leaq 48(%rsp),%rsp 711 712L$ord_sqr_epilogue: 713 ret 714 715 716 717 718.p2align 5 719ecp_nistz256_ord_mul_montx: 720 721L$ecp_nistz256_ord_mul_montx: 722 pushq %rbp 723 724 pushq %rbx 725 726 pushq %r12 727 728 pushq %r13 729 730 pushq %r14 731 732 pushq %r15 733 734L$ord_mulx_body: 735 736 movq %rdx,%rbx 737 movq 0(%rdx),%rdx 738 movq 0(%rsi),%r9 739 movq 8(%rsi),%r10 740 movq 16(%rsi),%r11 741 movq 24(%rsi),%r12 742 leaq -128(%rsi),%rsi 743 leaq L$ord-128(%rip),%r14 744 movq L$ordK(%rip),%r15 745 746 747 mulxq %r9,%r8,%r9 748 mulxq %r10,%rcx,%r10 749 mulxq %r11,%rbp,%r11 750 addq %rcx,%r9 751 mulxq %r12,%rcx,%r12 752 movq %r8,%rdx 753 mulxq %r15,%rdx,%rax 754 adcq %rbp,%r10 755 adcq %rcx,%r11 756 adcq $0,%r12 757 758 759 xorq %r13,%r13 760 mulxq 0+128(%r14),%rcx,%rbp 761 adcxq %rcx,%r8 762 adoxq %rbp,%r9 763 764 mulxq 8+128(%r14),%rcx,%rbp 765 adcxq %rcx,%r9 766 adoxq %rbp,%r10 767 768 mulxq 16+128(%r14),%rcx,%rbp 769 adcxq %rcx,%r10 770 adoxq %rbp,%r11 771 772 mulxq 24+128(%r14),%rcx,%rbp 773 movq 8(%rbx),%rdx 774 adcxq %rcx,%r11 775 adoxq %rbp,%r12 776 adcxq %r8,%r12 777 adoxq %r8,%r13 778 adcq $0,%r13 779 780 781 mulxq 0+128(%rsi),%rcx,%rbp 782 adcxq %rcx,%r9 783 adoxq %rbp,%r10 784 785 mulxq 8+128(%rsi),%rcx,%rbp 786 adcxq %rcx,%r10 787 adoxq %rbp,%r11 788 789 mulxq 16+128(%rsi),%rcx,%rbp 790 adcxq %rcx,%r11 791 adoxq %rbp,%r12 792 793 mulxq 24+128(%rsi),%rcx,%rbp 794 movq %r9,%rdx 795 mulxq %r15,%rdx,%rax 796 adcxq %rcx,%r12 797 adoxq %rbp,%r13 798 799 adcxq %r8,%r13 800 adoxq %r8,%r8 801 adcq $0,%r8 802 803 804 mulxq 0+128(%r14),%rcx,%rbp 805 adcxq %rcx,%r9 806 adoxq %rbp,%r10 807 808 mulxq 8+128(%r14),%rcx,%rbp 809 adcxq %rcx,%r10 810 adoxq %rbp,%r11 811 812 mulxq 16+128(%r14),%rcx,%rbp 813 adcxq %rcx,%r11 814 adoxq %rbp,%r12 815 816 mulxq 24+128(%r14),%rcx,%rbp 817 movq 16(%rbx),%rdx 818 adcxq %rcx,%r12 819 adoxq %rbp,%r13 820 adcxq %r9,%r13 821 adoxq %r9,%r8 822 adcq $0,%r8 823 824 825 mulxq 0+128(%rsi),%rcx,%rbp 826 adcxq %rcx,%r10 827 adoxq %rbp,%r11 828 829 mulxq 8+128(%rsi),%rcx,%rbp 830 adcxq %rcx,%r11 831 adoxq %rbp,%r12 832 833 mulxq 16+128(%rsi),%rcx,%rbp 834 adcxq %rcx,%r12 835 adoxq %rbp,%r13 836 837 mulxq 24+128(%rsi),%rcx,%rbp 838 movq %r10,%rdx 839 mulxq %r15,%rdx,%rax 840 adcxq %rcx,%r13 841 adoxq %rbp,%r8 842 843 adcxq %r9,%r8 844 adoxq %r9,%r9 845 adcq $0,%r9 846 847 848 mulxq 0+128(%r14),%rcx,%rbp 849 adcxq %rcx,%r10 850 adoxq %rbp,%r11 851 852 mulxq 8+128(%r14),%rcx,%rbp 853 adcxq %rcx,%r11 854 adoxq %rbp,%r12 855 856 mulxq 16+128(%r14),%rcx,%rbp 857 adcxq %rcx,%r12 858 adoxq %rbp,%r13 859 860 mulxq 24+128(%r14),%rcx,%rbp 861 movq 24(%rbx),%rdx 862 adcxq %rcx,%r13 863 adoxq %rbp,%r8 864 adcxq %r10,%r8 865 adoxq %r10,%r9 866 adcq $0,%r9 867 868 869 mulxq 0+128(%rsi),%rcx,%rbp 870 adcxq %rcx,%r11 871 adoxq %rbp,%r12 872 873 mulxq 8+128(%rsi),%rcx,%rbp 874 adcxq %rcx,%r12 875 adoxq %rbp,%r13 876 877 mulxq 16+128(%rsi),%rcx,%rbp 878 adcxq %rcx,%r13 879 adoxq %rbp,%r8 880 881 mulxq 24+128(%rsi),%rcx,%rbp 882 movq %r11,%rdx 883 mulxq %r15,%rdx,%rax 884 adcxq %rcx,%r8 885 adoxq %rbp,%r9 886 887 adcxq %r10,%r9 888 adoxq %r10,%r10 889 adcq $0,%r10 890 891 892 mulxq 0+128(%r14),%rcx,%rbp 893 adcxq %rcx,%r11 894 adoxq %rbp,%r12 895 896 mulxq 8+128(%r14),%rcx,%rbp 897 adcxq %rcx,%r12 898 adoxq %rbp,%r13 899 900 mulxq 16+128(%r14),%rcx,%rbp 901 adcxq %rcx,%r13 902 adoxq %rbp,%r8 903 904 mulxq 24+128(%r14),%rcx,%rbp 905 leaq 128(%r14),%r14 906 movq %r12,%rbx 907 adcxq %rcx,%r8 908 adoxq %rbp,%r9 909 movq %r13,%rdx 910 adcxq %r11,%r9 911 adoxq %r11,%r10 912 adcq $0,%r10 913 914 915 916 movq %r8,%rcx 917 subq 0(%r14),%r12 918 sbbq 8(%r14),%r13 919 sbbq 16(%r14),%r8 920 movq %r9,%rbp 921 sbbq 24(%r14),%r9 922 sbbq $0,%r10 923 924 cmovcq %rbx,%r12 925 cmovcq %rdx,%r13 926 cmovcq %rcx,%r8 927 cmovcq %rbp,%r9 928 929 movq %r12,0(%rdi) 930 movq %r13,8(%rdi) 931 movq %r8,16(%rdi) 932 movq %r9,24(%rdi) 933 934 movq 0(%rsp),%r15 935 936 movq 8(%rsp),%r14 937 938 movq 16(%rsp),%r13 939 940 movq 24(%rsp),%r12 941 942 movq 32(%rsp),%rbx 943 944 movq 40(%rsp),%rbp 945 946 leaq 48(%rsp),%rsp 947 948L$ord_mulx_epilogue: 949 ret 950 951 952 953 954.p2align 5 955ecp_nistz256_ord_sqr_montx: 956 957L$ecp_nistz256_ord_sqr_montx: 958 pushq %rbp 959 960 pushq %rbx 961 962 pushq %r12 963 964 pushq %r13 965 966 pushq %r14 967 968 pushq %r15 969 970L$ord_sqrx_body: 971 972 movq %rdx,%rbx 973 movq 0(%rsi),%rdx 974 movq 8(%rsi),%r14 975 movq 16(%rsi),%r15 976 movq 24(%rsi),%r8 977 leaq L$ord(%rip),%rsi 978 jmp L$oop_ord_sqrx 979 980.p2align 5 981L$oop_ord_sqrx: 982 mulxq %r14,%r9,%r10 983 mulxq %r15,%rcx,%r11 984 movq %rdx,%rax 985.byte 102,73,15,110,206 986 mulxq %r8,%rbp,%r12 987 movq %r14,%rdx 988 addq %rcx,%r10 989.byte 102,73,15,110,215 990 adcq %rbp,%r11 991 adcq $0,%r12 992 xorq %r13,%r13 993 994 mulxq %r15,%rcx,%rbp 995 adcxq %rcx,%r11 996 adoxq %rbp,%r12 997 998 mulxq %r8,%rcx,%rbp 999 movq %r15,%rdx 1000 adcxq %rcx,%r12 1001 adoxq %rbp,%r13 1002 adcq $0,%r13 1003 1004 mulxq %r8,%rcx,%r14 1005 movq %rax,%rdx 1006.byte 102,73,15,110,216 1007 xorq %r15,%r15 1008 adcxq %r9,%r9 1009 adoxq %rcx,%r13 1010 adcxq %r10,%r10 1011 adoxq %r15,%r14 1012 1013 1014 mulxq %rdx,%r8,%rbp 1015.byte 102,72,15,126,202 1016 adcxq %r11,%r11 1017 adoxq %rbp,%r9 1018 adcxq %r12,%r12 1019 mulxq %rdx,%rcx,%rax 1020.byte 102,72,15,126,210 1021 adcxq %r13,%r13 1022 adoxq %rcx,%r10 1023 adcxq %r14,%r14 1024 mulxq %rdx,%rcx,%rbp 1025.byte 0x67 1026.byte 102,72,15,126,218 1027 adoxq %rax,%r11 1028 adcxq %r15,%r15 1029 adoxq %rcx,%r12 1030 adoxq %rbp,%r13 1031 mulxq %rdx,%rcx,%rax 1032 adoxq %rcx,%r14 1033 adoxq %rax,%r15 1034 1035 1036 movq %r8,%rdx 1037 mulxq 32(%rsi),%rdx,%rcx 1038 1039 xorq %rax,%rax 1040 mulxq 0(%rsi),%rcx,%rbp 1041 adcxq %rcx,%r8 1042 adoxq %rbp,%r9 1043 mulxq 8(%rsi),%rcx,%rbp 1044 adcxq %rcx,%r9 1045 adoxq %rbp,%r10 1046 mulxq 16(%rsi),%rcx,%rbp 1047 adcxq %rcx,%r10 1048 adoxq %rbp,%r11 1049 mulxq 24(%rsi),%rcx,%rbp 1050 adcxq %rcx,%r11 1051 adoxq %rbp,%r8 1052 adcxq %rax,%r8 1053 1054 1055 movq %r9,%rdx 1056 mulxq 32(%rsi),%rdx,%rcx 1057 1058 mulxq 0(%rsi),%rcx,%rbp 1059 adoxq %rcx,%r9 1060 adcxq %rbp,%r10 1061 mulxq 8(%rsi),%rcx,%rbp 1062 adoxq %rcx,%r10 1063 adcxq %rbp,%r11 1064 mulxq 16(%rsi),%rcx,%rbp 1065 adoxq %rcx,%r11 1066 adcxq %rbp,%r8 1067 mulxq 24(%rsi),%rcx,%rbp 1068 adoxq %rcx,%r8 1069 adcxq %rbp,%r9 1070 adoxq %rax,%r9 1071 1072 1073 movq %r10,%rdx 1074 mulxq 32(%rsi),%rdx,%rcx 1075 1076 mulxq 0(%rsi),%rcx,%rbp 1077 adcxq %rcx,%r10 1078 adoxq %rbp,%r11 1079 mulxq 8(%rsi),%rcx,%rbp 1080 adcxq %rcx,%r11 1081 adoxq %rbp,%r8 1082 mulxq 16(%rsi),%rcx,%rbp 1083 adcxq %rcx,%r8 1084 adoxq %rbp,%r9 1085 mulxq 24(%rsi),%rcx,%rbp 1086 adcxq %rcx,%r9 1087 adoxq %rbp,%r10 1088 adcxq %rax,%r10 1089 1090 1091 movq %r11,%rdx 1092 mulxq 32(%rsi),%rdx,%rcx 1093 1094 mulxq 0(%rsi),%rcx,%rbp 1095 adoxq %rcx,%r11 1096 adcxq %rbp,%r8 1097 mulxq 8(%rsi),%rcx,%rbp 1098 adoxq %rcx,%r8 1099 adcxq %rbp,%r9 1100 mulxq 16(%rsi),%rcx,%rbp 1101 adoxq %rcx,%r9 1102 adcxq %rbp,%r10 1103 mulxq 24(%rsi),%rcx,%rbp 1104 adoxq %rcx,%r10 1105 adcxq %rbp,%r11 1106 adoxq %rax,%r11 1107 1108 1109 addq %r8,%r12 1110 adcq %r13,%r9 1111 movq %r12,%rdx 1112 adcq %r14,%r10 1113 adcq %r15,%r11 1114 movq %r9,%r14 1115 adcq $0,%rax 1116 1117 1118 subq 0(%rsi),%r12 1119 movq %r10,%r15 1120 sbbq 8(%rsi),%r9 1121 sbbq 16(%rsi),%r10 1122 movq %r11,%r8 1123 sbbq 24(%rsi),%r11 1124 sbbq $0,%rax 1125 1126 cmovncq %r12,%rdx 1127 cmovncq %r9,%r14 1128 cmovncq %r10,%r15 1129 cmovncq %r11,%r8 1130 1131 decq %rbx 1132 jnz L$oop_ord_sqrx 1133 1134 movq %rdx,0(%rdi) 1135 movq %r14,8(%rdi) 1136 pxor %xmm1,%xmm1 1137 movq %r15,16(%rdi) 1138 pxor %xmm2,%xmm2 1139 movq %r8,24(%rdi) 1140 pxor %xmm3,%xmm3 1141 1142 movq 0(%rsp),%r15 1143 1144 movq 8(%rsp),%r14 1145 1146 movq 16(%rsp),%r13 1147 1148 movq 24(%rsp),%r12 1149 1150 movq 32(%rsp),%rbx 1151 1152 movq 40(%rsp),%rbp 1153 1154 leaq 48(%rsp),%rsp 1155 1156L$ord_sqrx_epilogue: 1157 ret 1158 1159 1160 1161 1162 1163 1164 1165 1166.globl _ecp_nistz256_mul_mont 1167.private_extern _ecp_nistz256_mul_mont 1168 1169.p2align 5 1170_ecp_nistz256_mul_mont: 1171 1172_CET_ENDBR 1173 leaq _OPENSSL_ia32cap_P(%rip),%rcx 1174 movq 8(%rcx),%rcx 1175 andl $0x80100,%ecx 1176L$mul_mont: 1177 pushq %rbp 1178 1179 pushq %rbx 1180 1181 pushq %r12 1182 1183 pushq %r13 1184 1185 pushq %r14 1186 1187 pushq %r15 1188 1189L$mul_body: 1190 cmpl $0x80100,%ecx 1191 je L$mul_montx 1192 movq %rdx,%rbx 1193 movq 0(%rdx),%rax 1194 movq 0(%rsi),%r9 1195 movq 8(%rsi),%r10 1196 movq 16(%rsi),%r11 1197 movq 24(%rsi),%r12 1198 1199 call __ecp_nistz256_mul_montq 1200 jmp L$mul_mont_done 1201 1202.p2align 5 1203L$mul_montx: 1204 movq %rdx,%rbx 1205 movq 0(%rdx),%rdx 1206 movq 0(%rsi),%r9 1207 movq 8(%rsi),%r10 1208 movq 16(%rsi),%r11 1209 movq 24(%rsi),%r12 1210 leaq -128(%rsi),%rsi 1211 1212 call __ecp_nistz256_mul_montx 1213L$mul_mont_done: 1214 movq 0(%rsp),%r15 1215 1216 movq 8(%rsp),%r14 1217 1218 movq 16(%rsp),%r13 1219 1220 movq 24(%rsp),%r12 1221 1222 movq 32(%rsp),%rbx 1223 1224 movq 40(%rsp),%rbp 1225 1226 leaq 48(%rsp),%rsp 1227 1228L$mul_epilogue: 1229 ret 1230 1231 1232 1233 1234.p2align 5 1235__ecp_nistz256_mul_montq: 1236 1237 1238 1239 movq %rax,%rbp 1240 mulq %r9 1241 movq L$poly+8(%rip),%r14 1242 movq %rax,%r8 1243 movq %rbp,%rax 1244 movq %rdx,%r9 1245 1246 mulq %r10 1247 movq L$poly+24(%rip),%r15 1248 addq %rax,%r9 1249 movq %rbp,%rax 1250 adcq $0,%rdx 1251 movq %rdx,%r10 1252 1253 mulq %r11 1254 addq %rax,%r10 1255 movq %rbp,%rax 1256 adcq $0,%rdx 1257 movq %rdx,%r11 1258 1259 mulq %r12 1260 addq %rax,%r11 1261 movq %r8,%rax 1262 adcq $0,%rdx 1263 xorq %r13,%r13 1264 movq %rdx,%r12 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 movq %r8,%rbp 1276 shlq $32,%r8 1277 mulq %r15 1278 shrq $32,%rbp 1279 addq %r8,%r9 1280 adcq %rbp,%r10 1281 adcq %rax,%r11 1282 movq 8(%rbx),%rax 1283 adcq %rdx,%r12 1284 adcq $0,%r13 1285 xorq %r8,%r8 1286 1287 1288 1289 movq %rax,%rbp 1290 mulq 0(%rsi) 1291 addq %rax,%r9 1292 movq %rbp,%rax 1293 adcq $0,%rdx 1294 movq %rdx,%rcx 1295 1296 mulq 8(%rsi) 1297 addq %rcx,%r10 1298 adcq $0,%rdx 1299 addq %rax,%r10 1300 movq %rbp,%rax 1301 adcq $0,%rdx 1302 movq %rdx,%rcx 1303 1304 mulq 16(%rsi) 1305 addq %rcx,%r11 1306 adcq $0,%rdx 1307 addq %rax,%r11 1308 movq %rbp,%rax 1309 adcq $0,%rdx 1310 movq %rdx,%rcx 1311 1312 mulq 24(%rsi) 1313 addq %rcx,%r12 1314 adcq $0,%rdx 1315 addq %rax,%r12 1316 movq %r9,%rax 1317 adcq %rdx,%r13 1318 adcq $0,%r8 1319 1320 1321 1322 movq %r9,%rbp 1323 shlq $32,%r9 1324 mulq %r15 1325 shrq $32,%rbp 1326 addq %r9,%r10 1327 adcq %rbp,%r11 1328 adcq %rax,%r12 1329 movq 16(%rbx),%rax 1330 adcq %rdx,%r13 1331 adcq $0,%r8 1332 xorq %r9,%r9 1333 1334 1335 1336 movq %rax,%rbp 1337 mulq 0(%rsi) 1338 addq %rax,%r10 1339 movq %rbp,%rax 1340 adcq $0,%rdx 1341 movq %rdx,%rcx 1342 1343 mulq 8(%rsi) 1344 addq %rcx,%r11 1345 adcq $0,%rdx 1346 addq %rax,%r11 1347 movq %rbp,%rax 1348 adcq $0,%rdx 1349 movq %rdx,%rcx 1350 1351 mulq 16(%rsi) 1352 addq %rcx,%r12 1353 adcq $0,%rdx 1354 addq %rax,%r12 1355 movq %rbp,%rax 1356 adcq $0,%rdx 1357 movq %rdx,%rcx 1358 1359 mulq 24(%rsi) 1360 addq %rcx,%r13 1361 adcq $0,%rdx 1362 addq %rax,%r13 1363 movq %r10,%rax 1364 adcq %rdx,%r8 1365 adcq $0,%r9 1366 1367 1368 1369 movq %r10,%rbp 1370 shlq $32,%r10 1371 mulq %r15 1372 shrq $32,%rbp 1373 addq %r10,%r11 1374 adcq %rbp,%r12 1375 adcq %rax,%r13 1376 movq 24(%rbx),%rax 1377 adcq %rdx,%r8 1378 adcq $0,%r9 1379 xorq %r10,%r10 1380 1381 1382 1383 movq %rax,%rbp 1384 mulq 0(%rsi) 1385 addq %rax,%r11 1386 movq %rbp,%rax 1387 adcq $0,%rdx 1388 movq %rdx,%rcx 1389 1390 mulq 8(%rsi) 1391 addq %rcx,%r12 1392 adcq $0,%rdx 1393 addq %rax,%r12 1394 movq %rbp,%rax 1395 adcq $0,%rdx 1396 movq %rdx,%rcx 1397 1398 mulq 16(%rsi) 1399 addq %rcx,%r13 1400 adcq $0,%rdx 1401 addq %rax,%r13 1402 movq %rbp,%rax 1403 adcq $0,%rdx 1404 movq %rdx,%rcx 1405 1406 mulq 24(%rsi) 1407 addq %rcx,%r8 1408 adcq $0,%rdx 1409 addq %rax,%r8 1410 movq %r11,%rax 1411 adcq %rdx,%r9 1412 adcq $0,%r10 1413 1414 1415 1416 movq %r11,%rbp 1417 shlq $32,%r11 1418 mulq %r15 1419 shrq $32,%rbp 1420 addq %r11,%r12 1421 adcq %rbp,%r13 1422 movq %r12,%rcx 1423 adcq %rax,%r8 1424 adcq %rdx,%r9 1425 movq %r13,%rbp 1426 adcq $0,%r10 1427 1428 1429 1430 subq $-1,%r12 1431 movq %r8,%rbx 1432 sbbq %r14,%r13 1433 sbbq $0,%r8 1434 movq %r9,%rdx 1435 sbbq %r15,%r9 1436 sbbq $0,%r10 1437 1438 cmovcq %rcx,%r12 1439 cmovcq %rbp,%r13 1440 movq %r12,0(%rdi) 1441 cmovcq %rbx,%r8 1442 movq %r13,8(%rdi) 1443 cmovcq %rdx,%r9 1444 movq %r8,16(%rdi) 1445 movq %r9,24(%rdi) 1446 1447 ret 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458.globl _ecp_nistz256_sqr_mont 1459.private_extern _ecp_nistz256_sqr_mont 1460 1461.p2align 5 1462_ecp_nistz256_sqr_mont: 1463 1464_CET_ENDBR 1465 leaq _OPENSSL_ia32cap_P(%rip),%rcx 1466 movq 8(%rcx),%rcx 1467 andl $0x80100,%ecx 1468 pushq %rbp 1469 1470 pushq %rbx 1471 1472 pushq %r12 1473 1474 pushq %r13 1475 1476 pushq %r14 1477 1478 pushq %r15 1479 1480L$sqr_body: 1481 cmpl $0x80100,%ecx 1482 je L$sqr_montx 1483 movq 0(%rsi),%rax 1484 movq 8(%rsi),%r14 1485 movq 16(%rsi),%r15 1486 movq 24(%rsi),%r8 1487 1488 call __ecp_nistz256_sqr_montq 1489 jmp L$sqr_mont_done 1490 1491.p2align 5 1492L$sqr_montx: 1493 movq 0(%rsi),%rdx 1494 movq 8(%rsi),%r14 1495 movq 16(%rsi),%r15 1496 movq 24(%rsi),%r8 1497 leaq -128(%rsi),%rsi 1498 1499 call __ecp_nistz256_sqr_montx 1500L$sqr_mont_done: 1501 movq 0(%rsp),%r15 1502 1503 movq 8(%rsp),%r14 1504 1505 movq 16(%rsp),%r13 1506 1507 movq 24(%rsp),%r12 1508 1509 movq 32(%rsp),%rbx 1510 1511 movq 40(%rsp),%rbp 1512 1513 leaq 48(%rsp),%rsp 1514 1515L$sqr_epilogue: 1516 ret 1517 1518 1519 1520 1521.p2align 5 1522__ecp_nistz256_sqr_montq: 1523 1524 movq %rax,%r13 1525 mulq %r14 1526 movq %rax,%r9 1527 movq %r15,%rax 1528 movq %rdx,%r10 1529 1530 mulq %r13 1531 addq %rax,%r10 1532 movq %r8,%rax 1533 adcq $0,%rdx 1534 movq %rdx,%r11 1535 1536 mulq %r13 1537 addq %rax,%r11 1538 movq %r15,%rax 1539 adcq $0,%rdx 1540 movq %rdx,%r12 1541 1542 1543 mulq %r14 1544 addq %rax,%r11 1545 movq %r8,%rax 1546 adcq $0,%rdx 1547 movq %rdx,%rbp 1548 1549 mulq %r14 1550 addq %rax,%r12 1551 movq %r8,%rax 1552 adcq $0,%rdx 1553 addq %rbp,%r12 1554 movq %rdx,%r13 1555 adcq $0,%r13 1556 1557 1558 mulq %r15 1559 xorq %r15,%r15 1560 addq %rax,%r13 1561 movq 0(%rsi),%rax 1562 movq %rdx,%r14 1563 adcq $0,%r14 1564 1565 addq %r9,%r9 1566 adcq %r10,%r10 1567 adcq %r11,%r11 1568 adcq %r12,%r12 1569 adcq %r13,%r13 1570 adcq %r14,%r14 1571 adcq $0,%r15 1572 1573 mulq %rax 1574 movq %rax,%r8 1575 movq 8(%rsi),%rax 1576 movq %rdx,%rcx 1577 1578 mulq %rax 1579 addq %rcx,%r9 1580 adcq %rax,%r10 1581 movq 16(%rsi),%rax 1582 adcq $0,%rdx 1583 movq %rdx,%rcx 1584 1585 mulq %rax 1586 addq %rcx,%r11 1587 adcq %rax,%r12 1588 movq 24(%rsi),%rax 1589 adcq $0,%rdx 1590 movq %rdx,%rcx 1591 1592 mulq %rax 1593 addq %rcx,%r13 1594 adcq %rax,%r14 1595 movq %r8,%rax 1596 adcq %rdx,%r15 1597 1598 movq L$poly+8(%rip),%rsi 1599 movq L$poly+24(%rip),%rbp 1600 1601 1602 1603 1604 movq %r8,%rcx 1605 shlq $32,%r8 1606 mulq %rbp 1607 shrq $32,%rcx 1608 addq %r8,%r9 1609 adcq %rcx,%r10 1610 adcq %rax,%r11 1611 movq %r9,%rax 1612 adcq $0,%rdx 1613 1614 1615 1616 movq %r9,%rcx 1617 shlq $32,%r9 1618 movq %rdx,%r8 1619 mulq %rbp 1620 shrq $32,%rcx 1621 addq %r9,%r10 1622 adcq %rcx,%r11 1623 adcq %rax,%r8 1624 movq %r10,%rax 1625 adcq $0,%rdx 1626 1627 1628 1629 movq %r10,%rcx 1630 shlq $32,%r10 1631 movq %rdx,%r9 1632 mulq %rbp 1633 shrq $32,%rcx 1634 addq %r10,%r11 1635 adcq %rcx,%r8 1636 adcq %rax,%r9 1637 movq %r11,%rax 1638 adcq $0,%rdx 1639 1640 1641 1642 movq %r11,%rcx 1643 shlq $32,%r11 1644 movq %rdx,%r10 1645 mulq %rbp 1646 shrq $32,%rcx 1647 addq %r11,%r8 1648 adcq %rcx,%r9 1649 adcq %rax,%r10 1650 adcq $0,%rdx 1651 xorq %r11,%r11 1652 1653 1654 1655 addq %r8,%r12 1656 adcq %r9,%r13 1657 movq %r12,%r8 1658 adcq %r10,%r14 1659 adcq %rdx,%r15 1660 movq %r13,%r9 1661 adcq $0,%r11 1662 1663 subq $-1,%r12 1664 movq %r14,%r10 1665 sbbq %rsi,%r13 1666 sbbq $0,%r14 1667 movq %r15,%rcx 1668 sbbq %rbp,%r15 1669 sbbq $0,%r11 1670 1671 cmovcq %r8,%r12 1672 cmovcq %r9,%r13 1673 movq %r12,0(%rdi) 1674 cmovcq %r10,%r14 1675 movq %r13,8(%rdi) 1676 cmovcq %rcx,%r15 1677 movq %r14,16(%rdi) 1678 movq %r15,24(%rdi) 1679 1680 ret 1681 1682 1683 1684.p2align 5 1685__ecp_nistz256_mul_montx: 1686 1687 1688 1689 mulxq %r9,%r8,%r9 1690 mulxq %r10,%rcx,%r10 1691 movq $32,%r14 1692 xorq %r13,%r13 1693 mulxq %r11,%rbp,%r11 1694 movq L$poly+24(%rip),%r15 1695 adcq %rcx,%r9 1696 mulxq %r12,%rcx,%r12 1697 movq %r8,%rdx 1698 adcq %rbp,%r10 1699 shlxq %r14,%r8,%rbp 1700 adcq %rcx,%r11 1701 shrxq %r14,%r8,%rcx 1702 adcq $0,%r12 1703 1704 1705 1706 addq %rbp,%r9 1707 adcq %rcx,%r10 1708 1709 mulxq %r15,%rcx,%rbp 1710 movq 8(%rbx),%rdx 1711 adcq %rcx,%r11 1712 adcq %rbp,%r12 1713 adcq $0,%r13 1714 xorq %r8,%r8 1715 1716 1717 1718 mulxq 0+128(%rsi),%rcx,%rbp 1719 adcxq %rcx,%r9 1720 adoxq %rbp,%r10 1721 1722 mulxq 8+128(%rsi),%rcx,%rbp 1723 adcxq %rcx,%r10 1724 adoxq %rbp,%r11 1725 1726 mulxq 16+128(%rsi),%rcx,%rbp 1727 adcxq %rcx,%r11 1728 adoxq %rbp,%r12 1729 1730 mulxq 24+128(%rsi),%rcx,%rbp 1731 movq %r9,%rdx 1732 adcxq %rcx,%r12 1733 shlxq %r14,%r9,%rcx 1734 adoxq %rbp,%r13 1735 shrxq %r14,%r9,%rbp 1736 1737 adcxq %r8,%r13 1738 adoxq %r8,%r8 1739 adcq $0,%r8 1740 1741 1742 1743 addq %rcx,%r10 1744 adcq %rbp,%r11 1745 1746 mulxq %r15,%rcx,%rbp 1747 movq 16(%rbx),%rdx 1748 adcq %rcx,%r12 1749 adcq %rbp,%r13 1750 adcq $0,%r8 1751 xorq %r9,%r9 1752 1753 1754 1755 mulxq 0+128(%rsi),%rcx,%rbp 1756 adcxq %rcx,%r10 1757 adoxq %rbp,%r11 1758 1759 mulxq 8+128(%rsi),%rcx,%rbp 1760 adcxq %rcx,%r11 1761 adoxq %rbp,%r12 1762 1763 mulxq 16+128(%rsi),%rcx,%rbp 1764 adcxq %rcx,%r12 1765 adoxq %rbp,%r13 1766 1767 mulxq 24+128(%rsi),%rcx,%rbp 1768 movq %r10,%rdx 1769 adcxq %rcx,%r13 1770 shlxq %r14,%r10,%rcx 1771 adoxq %rbp,%r8 1772 shrxq %r14,%r10,%rbp 1773 1774 adcxq %r9,%r8 1775 adoxq %r9,%r9 1776 adcq $0,%r9 1777 1778 1779 1780 addq %rcx,%r11 1781 adcq %rbp,%r12 1782 1783 mulxq %r15,%rcx,%rbp 1784 movq 24(%rbx),%rdx 1785 adcq %rcx,%r13 1786 adcq %rbp,%r8 1787 adcq $0,%r9 1788 xorq %r10,%r10 1789 1790 1791 1792 mulxq 0+128(%rsi),%rcx,%rbp 1793 adcxq %rcx,%r11 1794 adoxq %rbp,%r12 1795 1796 mulxq 8+128(%rsi),%rcx,%rbp 1797 adcxq %rcx,%r12 1798 adoxq %rbp,%r13 1799 1800 mulxq 16+128(%rsi),%rcx,%rbp 1801 adcxq %rcx,%r13 1802 adoxq %rbp,%r8 1803 1804 mulxq 24+128(%rsi),%rcx,%rbp 1805 movq %r11,%rdx 1806 adcxq %rcx,%r8 1807 shlxq %r14,%r11,%rcx 1808 adoxq %rbp,%r9 1809 shrxq %r14,%r11,%rbp 1810 1811 adcxq %r10,%r9 1812 adoxq %r10,%r10 1813 adcq $0,%r10 1814 1815 1816 1817 addq %rcx,%r12 1818 adcq %rbp,%r13 1819 1820 mulxq %r15,%rcx,%rbp 1821 movq %r12,%rbx 1822 movq L$poly+8(%rip),%r14 1823 adcq %rcx,%r8 1824 movq %r13,%rdx 1825 adcq %rbp,%r9 1826 adcq $0,%r10 1827 1828 1829 1830 xorl %eax,%eax 1831 movq %r8,%rcx 1832 sbbq $-1,%r12 1833 sbbq %r14,%r13 1834 sbbq $0,%r8 1835 movq %r9,%rbp 1836 sbbq %r15,%r9 1837 sbbq $0,%r10 1838 1839 cmovcq %rbx,%r12 1840 cmovcq %rdx,%r13 1841 movq %r12,0(%rdi) 1842 cmovcq %rcx,%r8 1843 movq %r13,8(%rdi) 1844 cmovcq %rbp,%r9 1845 movq %r8,16(%rdi) 1846 movq %r9,24(%rdi) 1847 1848 ret 1849 1850 1851 1852 1853.p2align 5 1854__ecp_nistz256_sqr_montx: 1855 1856 mulxq %r14,%r9,%r10 1857 mulxq %r15,%rcx,%r11 1858 xorl %eax,%eax 1859 adcq %rcx,%r10 1860 mulxq %r8,%rbp,%r12 1861 movq %r14,%rdx 1862 adcq %rbp,%r11 1863 adcq $0,%r12 1864 xorq %r13,%r13 1865 1866 1867 mulxq %r15,%rcx,%rbp 1868 adcxq %rcx,%r11 1869 adoxq %rbp,%r12 1870 1871 mulxq %r8,%rcx,%rbp 1872 movq %r15,%rdx 1873 adcxq %rcx,%r12 1874 adoxq %rbp,%r13 1875 adcq $0,%r13 1876 1877 1878 mulxq %r8,%rcx,%r14 1879 movq 0+128(%rsi),%rdx 1880 xorq %r15,%r15 1881 adcxq %r9,%r9 1882 adoxq %rcx,%r13 1883 adcxq %r10,%r10 1884 adoxq %r15,%r14 1885 1886 mulxq %rdx,%r8,%rbp 1887 movq 8+128(%rsi),%rdx 1888 adcxq %r11,%r11 1889 adoxq %rbp,%r9 1890 adcxq %r12,%r12 1891 mulxq %rdx,%rcx,%rax 1892 movq 16+128(%rsi),%rdx 1893 adcxq %r13,%r13 1894 adoxq %rcx,%r10 1895 adcxq %r14,%r14 1896.byte 0x67 1897 mulxq %rdx,%rcx,%rbp 1898 movq 24+128(%rsi),%rdx 1899 adoxq %rax,%r11 1900 adcxq %r15,%r15 1901 adoxq %rcx,%r12 1902 movq $32,%rsi 1903 adoxq %rbp,%r13 1904.byte 0x67,0x67 1905 mulxq %rdx,%rcx,%rax 1906 movq L$poly+24(%rip),%rdx 1907 adoxq %rcx,%r14 1908 shlxq %rsi,%r8,%rcx 1909 adoxq %rax,%r15 1910 shrxq %rsi,%r8,%rax 1911 movq %rdx,%rbp 1912 1913 1914 addq %rcx,%r9 1915 adcq %rax,%r10 1916 1917 mulxq %r8,%rcx,%r8 1918 adcq %rcx,%r11 1919 shlxq %rsi,%r9,%rcx 1920 adcq $0,%r8 1921 shrxq %rsi,%r9,%rax 1922 1923 1924 addq %rcx,%r10 1925 adcq %rax,%r11 1926 1927 mulxq %r9,%rcx,%r9 1928 adcq %rcx,%r8 1929 shlxq %rsi,%r10,%rcx 1930 adcq $0,%r9 1931 shrxq %rsi,%r10,%rax 1932 1933 1934 addq %rcx,%r11 1935 adcq %rax,%r8 1936 1937 mulxq %r10,%rcx,%r10 1938 adcq %rcx,%r9 1939 shlxq %rsi,%r11,%rcx 1940 adcq $0,%r10 1941 shrxq %rsi,%r11,%rax 1942 1943 1944 addq %rcx,%r8 1945 adcq %rax,%r9 1946 1947 mulxq %r11,%rcx,%r11 1948 adcq %rcx,%r10 1949 adcq $0,%r11 1950 1951 xorq %rdx,%rdx 1952 addq %r8,%r12 1953 movq L$poly+8(%rip),%rsi 1954 adcq %r9,%r13 1955 movq %r12,%r8 1956 adcq %r10,%r14 1957 adcq %r11,%r15 1958 movq %r13,%r9 1959 adcq $0,%rdx 1960 1961 subq $-1,%r12 1962 movq %r14,%r10 1963 sbbq %rsi,%r13 1964 sbbq $0,%r14 1965 movq %r15,%r11 1966 sbbq %rbp,%r15 1967 sbbq $0,%rdx 1968 1969 cmovcq %r8,%r12 1970 cmovcq %r9,%r13 1971 movq %r12,0(%rdi) 1972 cmovcq %r10,%r14 1973 movq %r13,8(%rdi) 1974 cmovcq %r11,%r15 1975 movq %r14,16(%rdi) 1976 movq %r15,24(%rdi) 1977 1978 ret 1979 1980 1981 1982 1983.globl _ecp_nistz256_select_w5 1984.private_extern _ecp_nistz256_select_w5 1985 1986.p2align 5 1987_ecp_nistz256_select_w5: 1988 1989_CET_ENDBR 1990 leaq _OPENSSL_ia32cap_P(%rip),%rax 1991 movq 8(%rax),%rax 1992 testl $32,%eax 1993 jnz L$avx2_select_w5 1994 movdqa L$One(%rip),%xmm0 1995 movd %edx,%xmm1 1996 1997 pxor %xmm2,%xmm2 1998 pxor %xmm3,%xmm3 1999 pxor %xmm4,%xmm4 2000 pxor %xmm5,%xmm5 2001 pxor %xmm6,%xmm6 2002 pxor %xmm7,%xmm7 2003 2004 movdqa %xmm0,%xmm8 2005 pshufd $0,%xmm1,%xmm1 2006 2007 movq $16,%rax 2008L$select_loop_sse_w5: 2009 2010 movdqa %xmm8,%xmm15 2011 paddd %xmm0,%xmm8 2012 pcmpeqd %xmm1,%xmm15 2013 2014 movdqa 0(%rsi),%xmm9 2015 movdqa 16(%rsi),%xmm10 2016 movdqa 32(%rsi),%xmm11 2017 movdqa 48(%rsi),%xmm12 2018 movdqa 64(%rsi),%xmm13 2019 movdqa 80(%rsi),%xmm14 2020 leaq 96(%rsi),%rsi 2021 2022 pand %xmm15,%xmm9 2023 pand %xmm15,%xmm10 2024 por %xmm9,%xmm2 2025 pand %xmm15,%xmm11 2026 por %xmm10,%xmm3 2027 pand %xmm15,%xmm12 2028 por %xmm11,%xmm4 2029 pand %xmm15,%xmm13 2030 por %xmm12,%xmm5 2031 pand %xmm15,%xmm14 2032 por %xmm13,%xmm6 2033 por %xmm14,%xmm7 2034 2035 decq %rax 2036 jnz L$select_loop_sse_w5 2037 2038 movdqu %xmm2,0(%rdi) 2039 movdqu %xmm3,16(%rdi) 2040 movdqu %xmm4,32(%rdi) 2041 movdqu %xmm5,48(%rdi) 2042 movdqu %xmm6,64(%rdi) 2043 movdqu %xmm7,80(%rdi) 2044 ret 2045 2046L$SEH_end_ecp_nistz256_select_w5: 2047 2048 2049 2050 2051.globl _ecp_nistz256_select_w7 2052.private_extern _ecp_nistz256_select_w7 2053 2054.p2align 5 2055_ecp_nistz256_select_w7: 2056 2057_CET_ENDBR 2058 leaq _OPENSSL_ia32cap_P(%rip),%rax 2059 movq 8(%rax),%rax 2060 testl $32,%eax 2061 jnz L$avx2_select_w7 2062 movdqa L$One(%rip),%xmm8 2063 movd %edx,%xmm1 2064 2065 pxor %xmm2,%xmm2 2066 pxor %xmm3,%xmm3 2067 pxor %xmm4,%xmm4 2068 pxor %xmm5,%xmm5 2069 2070 movdqa %xmm8,%xmm0 2071 pshufd $0,%xmm1,%xmm1 2072 movq $64,%rax 2073 2074L$select_loop_sse_w7: 2075 movdqa %xmm8,%xmm15 2076 paddd %xmm0,%xmm8 2077 movdqa 0(%rsi),%xmm9 2078 movdqa 16(%rsi),%xmm10 2079 pcmpeqd %xmm1,%xmm15 2080 movdqa 32(%rsi),%xmm11 2081 movdqa 48(%rsi),%xmm12 2082 leaq 64(%rsi),%rsi 2083 2084 pand %xmm15,%xmm9 2085 pand %xmm15,%xmm10 2086 por %xmm9,%xmm2 2087 pand %xmm15,%xmm11 2088 por %xmm10,%xmm3 2089 pand %xmm15,%xmm12 2090 por %xmm11,%xmm4 2091 prefetcht0 255(%rsi) 2092 por %xmm12,%xmm5 2093 2094 decq %rax 2095 jnz L$select_loop_sse_w7 2096 2097 movdqu %xmm2,0(%rdi) 2098 movdqu %xmm3,16(%rdi) 2099 movdqu %xmm4,32(%rdi) 2100 movdqu %xmm5,48(%rdi) 2101 ret 2102 2103L$SEH_end_ecp_nistz256_select_w7: 2104 2105 2106 2107 2108.p2align 5 2109ecp_nistz256_avx2_select_w5: 2110 2111L$avx2_select_w5: 2112 vzeroupper 2113 vmovdqa L$Two(%rip),%ymm0 2114 2115 vpxor %ymm2,%ymm2,%ymm2 2116 vpxor %ymm3,%ymm3,%ymm3 2117 vpxor %ymm4,%ymm4,%ymm4 2118 2119 vmovdqa L$One(%rip),%ymm5 2120 vmovdqa L$Two(%rip),%ymm10 2121 2122 vmovd %edx,%xmm1 2123 vpermd %ymm1,%ymm2,%ymm1 2124 2125 movq $8,%rax 2126L$select_loop_avx2_w5: 2127 2128 vmovdqa 0(%rsi),%ymm6 2129 vmovdqa 32(%rsi),%ymm7 2130 vmovdqa 64(%rsi),%ymm8 2131 2132 vmovdqa 96(%rsi),%ymm11 2133 vmovdqa 128(%rsi),%ymm12 2134 vmovdqa 160(%rsi),%ymm13 2135 2136 vpcmpeqd %ymm1,%ymm5,%ymm9 2137 vpcmpeqd %ymm1,%ymm10,%ymm14 2138 2139 vpaddd %ymm0,%ymm5,%ymm5 2140 vpaddd %ymm0,%ymm10,%ymm10 2141 leaq 192(%rsi),%rsi 2142 2143 vpand %ymm9,%ymm6,%ymm6 2144 vpand %ymm9,%ymm7,%ymm7 2145 vpand %ymm9,%ymm8,%ymm8 2146 vpand %ymm14,%ymm11,%ymm11 2147 vpand %ymm14,%ymm12,%ymm12 2148 vpand %ymm14,%ymm13,%ymm13 2149 2150 vpxor %ymm6,%ymm2,%ymm2 2151 vpxor %ymm7,%ymm3,%ymm3 2152 vpxor %ymm8,%ymm4,%ymm4 2153 vpxor %ymm11,%ymm2,%ymm2 2154 vpxor %ymm12,%ymm3,%ymm3 2155 vpxor %ymm13,%ymm4,%ymm4 2156 2157 decq %rax 2158 jnz L$select_loop_avx2_w5 2159 2160 vmovdqu %ymm2,0(%rdi) 2161 vmovdqu %ymm3,32(%rdi) 2162 vmovdqu %ymm4,64(%rdi) 2163 vzeroupper 2164 ret 2165 2166L$SEH_end_ecp_nistz256_avx2_select_w5: 2167 2168 2169 2170 2171 2172.p2align 5 2173ecp_nistz256_avx2_select_w7: 2174 2175L$avx2_select_w7: 2176_CET_ENDBR 2177 vzeroupper 2178 vmovdqa L$Three(%rip),%ymm0 2179 2180 vpxor %ymm2,%ymm2,%ymm2 2181 vpxor %ymm3,%ymm3,%ymm3 2182 2183 vmovdqa L$One(%rip),%ymm4 2184 vmovdqa L$Two(%rip),%ymm8 2185 vmovdqa L$Three(%rip),%ymm12 2186 2187 vmovd %edx,%xmm1 2188 vpermd %ymm1,%ymm2,%ymm1 2189 2190 2191 movq $21,%rax 2192L$select_loop_avx2_w7: 2193 2194 vmovdqa 0(%rsi),%ymm5 2195 vmovdqa 32(%rsi),%ymm6 2196 2197 vmovdqa 64(%rsi),%ymm9 2198 vmovdqa 96(%rsi),%ymm10 2199 2200 vmovdqa 128(%rsi),%ymm13 2201 vmovdqa 160(%rsi),%ymm14 2202 2203 vpcmpeqd %ymm1,%ymm4,%ymm7 2204 vpcmpeqd %ymm1,%ymm8,%ymm11 2205 vpcmpeqd %ymm1,%ymm12,%ymm15 2206 2207 vpaddd %ymm0,%ymm4,%ymm4 2208 vpaddd %ymm0,%ymm8,%ymm8 2209 vpaddd %ymm0,%ymm12,%ymm12 2210 leaq 192(%rsi),%rsi 2211 2212 vpand %ymm7,%ymm5,%ymm5 2213 vpand %ymm7,%ymm6,%ymm6 2214 vpand %ymm11,%ymm9,%ymm9 2215 vpand %ymm11,%ymm10,%ymm10 2216 vpand %ymm15,%ymm13,%ymm13 2217 vpand %ymm15,%ymm14,%ymm14 2218 2219 vpxor %ymm5,%ymm2,%ymm2 2220 vpxor %ymm6,%ymm3,%ymm3 2221 vpxor %ymm9,%ymm2,%ymm2 2222 vpxor %ymm10,%ymm3,%ymm3 2223 vpxor %ymm13,%ymm2,%ymm2 2224 vpxor %ymm14,%ymm3,%ymm3 2225 2226 decq %rax 2227 jnz L$select_loop_avx2_w7 2228 2229 2230 vmovdqa 0(%rsi),%ymm5 2231 vmovdqa 32(%rsi),%ymm6 2232 2233 vpcmpeqd %ymm1,%ymm4,%ymm7 2234 2235 vpand %ymm7,%ymm5,%ymm5 2236 vpand %ymm7,%ymm6,%ymm6 2237 2238 vpxor %ymm5,%ymm2,%ymm2 2239 vpxor %ymm6,%ymm3,%ymm3 2240 2241 vmovdqu %ymm2,0(%rdi) 2242 vmovdqu %ymm3,32(%rdi) 2243 vzeroupper 2244 ret 2245 2246L$SEH_end_ecp_nistz256_avx2_select_w7: 2247 2248 2249.p2align 5 2250__ecp_nistz256_add_toq: 2251 2252 xorq %r11,%r11 2253 addq 0(%rbx),%r12 2254 adcq 8(%rbx),%r13 2255 movq %r12,%rax 2256 adcq 16(%rbx),%r8 2257 adcq 24(%rbx),%r9 2258 movq %r13,%rbp 2259 adcq $0,%r11 2260 2261 subq $-1,%r12 2262 movq %r8,%rcx 2263 sbbq %r14,%r13 2264 sbbq $0,%r8 2265 movq %r9,%r10 2266 sbbq %r15,%r9 2267 sbbq $0,%r11 2268 2269 cmovcq %rax,%r12 2270 cmovcq %rbp,%r13 2271 movq %r12,0(%rdi) 2272 cmovcq %rcx,%r8 2273 movq %r13,8(%rdi) 2274 cmovcq %r10,%r9 2275 movq %r8,16(%rdi) 2276 movq %r9,24(%rdi) 2277 2278 ret 2279 2280 2281 2282 2283.p2align 5 2284__ecp_nistz256_sub_fromq: 2285 2286 subq 0(%rbx),%r12 2287 sbbq 8(%rbx),%r13 2288 movq %r12,%rax 2289 sbbq 16(%rbx),%r8 2290 sbbq 24(%rbx),%r9 2291 movq %r13,%rbp 2292 sbbq %r11,%r11 2293 2294 addq $-1,%r12 2295 movq %r8,%rcx 2296 adcq %r14,%r13 2297 adcq $0,%r8 2298 movq %r9,%r10 2299 adcq %r15,%r9 2300 testq %r11,%r11 2301 2302 cmovzq %rax,%r12 2303 cmovzq %rbp,%r13 2304 movq %r12,0(%rdi) 2305 cmovzq %rcx,%r8 2306 movq %r13,8(%rdi) 2307 cmovzq %r10,%r9 2308 movq %r8,16(%rdi) 2309 movq %r9,24(%rdi) 2310 2311 ret 2312 2313 2314 2315 2316.p2align 5 2317__ecp_nistz256_subq: 2318 2319 subq %r12,%rax 2320 sbbq %r13,%rbp 2321 movq %rax,%r12 2322 sbbq %r8,%rcx 2323 sbbq %r9,%r10 2324 movq %rbp,%r13 2325 sbbq %r11,%r11 2326 2327 addq $-1,%rax 2328 movq %rcx,%r8 2329 adcq %r14,%rbp 2330 adcq $0,%rcx 2331 movq %r10,%r9 2332 adcq %r15,%r10 2333 testq %r11,%r11 2334 2335 cmovnzq %rax,%r12 2336 cmovnzq %rbp,%r13 2337 cmovnzq %rcx,%r8 2338 cmovnzq %r10,%r9 2339 2340 ret 2341 2342 2343 2344 2345.p2align 5 2346__ecp_nistz256_mul_by_2q: 2347 2348 xorq %r11,%r11 2349 addq %r12,%r12 2350 adcq %r13,%r13 2351 movq %r12,%rax 2352 adcq %r8,%r8 2353 adcq %r9,%r9 2354 movq %r13,%rbp 2355 adcq $0,%r11 2356 2357 subq $-1,%r12 2358 movq %r8,%rcx 2359 sbbq %r14,%r13 2360 sbbq $0,%r8 2361 movq %r9,%r10 2362 sbbq %r15,%r9 2363 sbbq $0,%r11 2364 2365 cmovcq %rax,%r12 2366 cmovcq %rbp,%r13 2367 movq %r12,0(%rdi) 2368 cmovcq %rcx,%r8 2369 movq %r13,8(%rdi) 2370 cmovcq %r10,%r9 2371 movq %r8,16(%rdi) 2372 movq %r9,24(%rdi) 2373 2374 ret 2375 2376 2377.globl _ecp_nistz256_point_double 2378.private_extern _ecp_nistz256_point_double 2379 2380.p2align 5 2381_ecp_nistz256_point_double: 2382 2383_CET_ENDBR 2384 leaq _OPENSSL_ia32cap_P(%rip),%rcx 2385 movq 8(%rcx),%rcx 2386 andl $0x80100,%ecx 2387 cmpl $0x80100,%ecx 2388 je L$point_doublex 2389 pushq %rbp 2390 2391 pushq %rbx 2392 2393 pushq %r12 2394 2395 pushq %r13 2396 2397 pushq %r14 2398 2399 pushq %r15 2400 2401 subq $160+8,%rsp 2402 2403L$point_doubleq_body: 2404 2405L$point_double_shortcutq: 2406 movdqu 0(%rsi),%xmm0 2407 movq %rsi,%rbx 2408 movdqu 16(%rsi),%xmm1 2409 movq 32+0(%rsi),%r12 2410 movq 32+8(%rsi),%r13 2411 movq 32+16(%rsi),%r8 2412 movq 32+24(%rsi),%r9 2413 movq L$poly+8(%rip),%r14 2414 movq L$poly+24(%rip),%r15 2415 movdqa %xmm0,96(%rsp) 2416 movdqa %xmm1,96+16(%rsp) 2417 leaq 32(%rdi),%r10 2418 leaq 64(%rdi),%r11 2419.byte 102,72,15,110,199 2420.byte 102,73,15,110,202 2421.byte 102,73,15,110,211 2422 2423 leaq 0(%rsp),%rdi 2424 call __ecp_nistz256_mul_by_2q 2425 2426 movq 64+0(%rsi),%rax 2427 movq 64+8(%rsi),%r14 2428 movq 64+16(%rsi),%r15 2429 movq 64+24(%rsi),%r8 2430 leaq 64-0(%rsi),%rsi 2431 leaq 64(%rsp),%rdi 2432 call __ecp_nistz256_sqr_montq 2433 2434 movq 0+0(%rsp),%rax 2435 movq 8+0(%rsp),%r14 2436 leaq 0+0(%rsp),%rsi 2437 movq 16+0(%rsp),%r15 2438 movq 24+0(%rsp),%r8 2439 leaq 0(%rsp),%rdi 2440 call __ecp_nistz256_sqr_montq 2441 2442 movq 32(%rbx),%rax 2443 movq 64+0(%rbx),%r9 2444 movq 64+8(%rbx),%r10 2445 movq 64+16(%rbx),%r11 2446 movq 64+24(%rbx),%r12 2447 leaq 64-0(%rbx),%rsi 2448 leaq 32(%rbx),%rbx 2449.byte 102,72,15,126,215 2450 call __ecp_nistz256_mul_montq 2451 call __ecp_nistz256_mul_by_2q 2452 2453 movq 96+0(%rsp),%r12 2454 movq 96+8(%rsp),%r13 2455 leaq 64(%rsp),%rbx 2456 movq 96+16(%rsp),%r8 2457 movq 96+24(%rsp),%r9 2458 leaq 32(%rsp),%rdi 2459 call __ecp_nistz256_add_toq 2460 2461 movq 96+0(%rsp),%r12 2462 movq 96+8(%rsp),%r13 2463 leaq 64(%rsp),%rbx 2464 movq 96+16(%rsp),%r8 2465 movq 96+24(%rsp),%r9 2466 leaq 64(%rsp),%rdi 2467 call __ecp_nistz256_sub_fromq 2468 2469 movq 0+0(%rsp),%rax 2470 movq 8+0(%rsp),%r14 2471 leaq 0+0(%rsp),%rsi 2472 movq 16+0(%rsp),%r15 2473 movq 24+0(%rsp),%r8 2474.byte 102,72,15,126,207 2475 call __ecp_nistz256_sqr_montq 2476 xorq %r9,%r9 2477 movq %r12,%rax 2478 addq $-1,%r12 2479 movq %r13,%r10 2480 adcq %rsi,%r13 2481 movq %r14,%rcx 2482 adcq $0,%r14 2483 movq %r15,%r8 2484 adcq %rbp,%r15 2485 adcq $0,%r9 2486 xorq %rsi,%rsi 2487 testq $1,%rax 2488 2489 cmovzq %rax,%r12 2490 cmovzq %r10,%r13 2491 cmovzq %rcx,%r14 2492 cmovzq %r8,%r15 2493 cmovzq %rsi,%r9 2494 2495 movq %r13,%rax 2496 shrq $1,%r12 2497 shlq $63,%rax 2498 movq %r14,%r10 2499 shrq $1,%r13 2500 orq %rax,%r12 2501 shlq $63,%r10 2502 movq %r15,%rcx 2503 shrq $1,%r14 2504 orq %r10,%r13 2505 shlq $63,%rcx 2506 movq %r12,0(%rdi) 2507 shrq $1,%r15 2508 movq %r13,8(%rdi) 2509 shlq $63,%r9 2510 orq %rcx,%r14 2511 orq %r9,%r15 2512 movq %r14,16(%rdi) 2513 movq %r15,24(%rdi) 2514 movq 64(%rsp),%rax 2515 leaq 64(%rsp),%rbx 2516 movq 0+32(%rsp),%r9 2517 movq 8+32(%rsp),%r10 2518 leaq 0+32(%rsp),%rsi 2519 movq 16+32(%rsp),%r11 2520 movq 24+32(%rsp),%r12 2521 leaq 32(%rsp),%rdi 2522 call __ecp_nistz256_mul_montq 2523 2524 leaq 128(%rsp),%rdi 2525 call __ecp_nistz256_mul_by_2q 2526 2527 leaq 32(%rsp),%rbx 2528 leaq 32(%rsp),%rdi 2529 call __ecp_nistz256_add_toq 2530 2531 movq 96(%rsp),%rax 2532 leaq 96(%rsp),%rbx 2533 movq 0+0(%rsp),%r9 2534 movq 8+0(%rsp),%r10 2535 leaq 0+0(%rsp),%rsi 2536 movq 16+0(%rsp),%r11 2537 movq 24+0(%rsp),%r12 2538 leaq 0(%rsp),%rdi 2539 call __ecp_nistz256_mul_montq 2540 2541 leaq 128(%rsp),%rdi 2542 call __ecp_nistz256_mul_by_2q 2543 2544 movq 0+32(%rsp),%rax 2545 movq 8+32(%rsp),%r14 2546 leaq 0+32(%rsp),%rsi 2547 movq 16+32(%rsp),%r15 2548 movq 24+32(%rsp),%r8 2549.byte 102,72,15,126,199 2550 call __ecp_nistz256_sqr_montq 2551 2552 leaq 128(%rsp),%rbx 2553 movq %r14,%r8 2554 movq %r15,%r9 2555 movq %rsi,%r14 2556 movq %rbp,%r15 2557 call __ecp_nistz256_sub_fromq 2558 2559 movq 0+0(%rsp),%rax 2560 movq 0+8(%rsp),%rbp 2561 movq 0+16(%rsp),%rcx 2562 movq 0+24(%rsp),%r10 2563 leaq 0(%rsp),%rdi 2564 call __ecp_nistz256_subq 2565 2566 movq 32(%rsp),%rax 2567 leaq 32(%rsp),%rbx 2568 movq %r12,%r14 2569 xorl %ecx,%ecx 2570 movq %r12,0+0(%rsp) 2571 movq %r13,%r10 2572 movq %r13,0+8(%rsp) 2573 cmovzq %r8,%r11 2574 movq %r8,0+16(%rsp) 2575 leaq 0-0(%rsp),%rsi 2576 cmovzq %r9,%r12 2577 movq %r9,0+24(%rsp) 2578 movq %r14,%r9 2579 leaq 0(%rsp),%rdi 2580 call __ecp_nistz256_mul_montq 2581 2582.byte 102,72,15,126,203 2583.byte 102,72,15,126,207 2584 call __ecp_nistz256_sub_fromq 2585 2586 leaq 160+56(%rsp),%rsi 2587 2588 movq -48(%rsi),%r15 2589 2590 movq -40(%rsi),%r14 2591 2592 movq -32(%rsi),%r13 2593 2594 movq -24(%rsi),%r12 2595 2596 movq -16(%rsi),%rbx 2597 2598 movq -8(%rsi),%rbp 2599 2600 leaq (%rsi),%rsp 2601 2602L$point_doubleq_epilogue: 2603 ret 2604 2605 2606.globl _ecp_nistz256_point_add 2607.private_extern _ecp_nistz256_point_add 2608 2609.p2align 5 2610_ecp_nistz256_point_add: 2611 2612_CET_ENDBR 2613 leaq _OPENSSL_ia32cap_P(%rip),%rcx 2614 movq 8(%rcx),%rcx 2615 andl $0x80100,%ecx 2616 cmpl $0x80100,%ecx 2617 je L$point_addx 2618 pushq %rbp 2619 2620 pushq %rbx 2621 2622 pushq %r12 2623 2624 pushq %r13 2625 2626 pushq %r14 2627 2628 pushq %r15 2629 2630 subq $576+8,%rsp 2631 2632L$point_addq_body: 2633 2634 movdqu 0(%rsi),%xmm0 2635 movdqu 16(%rsi),%xmm1 2636 movdqu 32(%rsi),%xmm2 2637 movdqu 48(%rsi),%xmm3 2638 movdqu 64(%rsi),%xmm4 2639 movdqu 80(%rsi),%xmm5 2640 movq %rsi,%rbx 2641 movq %rdx,%rsi 2642 movdqa %xmm0,384(%rsp) 2643 movdqa %xmm1,384+16(%rsp) 2644 movdqa %xmm2,416(%rsp) 2645 movdqa %xmm3,416+16(%rsp) 2646 movdqa %xmm4,448(%rsp) 2647 movdqa %xmm5,448+16(%rsp) 2648 por %xmm4,%xmm5 2649 2650 movdqu 0(%rsi),%xmm0 2651 pshufd $0xb1,%xmm5,%xmm3 2652 movdqu 16(%rsi),%xmm1 2653 movdqu 32(%rsi),%xmm2 2654 por %xmm3,%xmm5 2655 movdqu 48(%rsi),%xmm3 2656 movq 64+0(%rsi),%rax 2657 movq 64+8(%rsi),%r14 2658 movq 64+16(%rsi),%r15 2659 movq 64+24(%rsi),%r8 2660 movdqa %xmm0,480(%rsp) 2661 pshufd $0x1e,%xmm5,%xmm4 2662 movdqa %xmm1,480+16(%rsp) 2663 movdqu 64(%rsi),%xmm0 2664 movdqu 80(%rsi),%xmm1 2665 movdqa %xmm2,512(%rsp) 2666 movdqa %xmm3,512+16(%rsp) 2667 por %xmm4,%xmm5 2668 pxor %xmm4,%xmm4 2669 por %xmm0,%xmm1 2670.byte 102,72,15,110,199 2671 2672 leaq 64-0(%rsi),%rsi 2673 movq %rax,544+0(%rsp) 2674 movq %r14,544+8(%rsp) 2675 movq %r15,544+16(%rsp) 2676 movq %r8,544+24(%rsp) 2677 leaq 96(%rsp),%rdi 2678 call __ecp_nistz256_sqr_montq 2679 2680 pcmpeqd %xmm4,%xmm5 2681 pshufd $0xb1,%xmm1,%xmm4 2682 por %xmm1,%xmm4 2683 pshufd $0,%xmm5,%xmm5 2684 pshufd $0x1e,%xmm4,%xmm3 2685 por %xmm3,%xmm4 2686 pxor %xmm3,%xmm3 2687 pcmpeqd %xmm3,%xmm4 2688 pshufd $0,%xmm4,%xmm4 2689 movq 64+0(%rbx),%rax 2690 movq 64+8(%rbx),%r14 2691 movq 64+16(%rbx),%r15 2692 movq 64+24(%rbx),%r8 2693.byte 102,72,15,110,203 2694 2695 leaq 64-0(%rbx),%rsi 2696 leaq 32(%rsp),%rdi 2697 call __ecp_nistz256_sqr_montq 2698 2699 movq 544(%rsp),%rax 2700 leaq 544(%rsp),%rbx 2701 movq 0+96(%rsp),%r9 2702 movq 8+96(%rsp),%r10 2703 leaq 0+96(%rsp),%rsi 2704 movq 16+96(%rsp),%r11 2705 movq 24+96(%rsp),%r12 2706 leaq 224(%rsp),%rdi 2707 call __ecp_nistz256_mul_montq 2708 2709 movq 448(%rsp),%rax 2710 leaq 448(%rsp),%rbx 2711 movq 0+32(%rsp),%r9 2712 movq 8+32(%rsp),%r10 2713 leaq 0+32(%rsp),%rsi 2714 movq 16+32(%rsp),%r11 2715 movq 24+32(%rsp),%r12 2716 leaq 256(%rsp),%rdi 2717 call __ecp_nistz256_mul_montq 2718 2719 movq 416(%rsp),%rax 2720 leaq 416(%rsp),%rbx 2721 movq 0+224(%rsp),%r9 2722 movq 8+224(%rsp),%r10 2723 leaq 0+224(%rsp),%rsi 2724 movq 16+224(%rsp),%r11 2725 movq 24+224(%rsp),%r12 2726 leaq 224(%rsp),%rdi 2727 call __ecp_nistz256_mul_montq 2728 2729 movq 512(%rsp),%rax 2730 leaq 512(%rsp),%rbx 2731 movq 0+256(%rsp),%r9 2732 movq 8+256(%rsp),%r10 2733 leaq 0+256(%rsp),%rsi 2734 movq 16+256(%rsp),%r11 2735 movq 24+256(%rsp),%r12 2736 leaq 256(%rsp),%rdi 2737 call __ecp_nistz256_mul_montq 2738 2739 leaq 224(%rsp),%rbx 2740 leaq 64(%rsp),%rdi 2741 call __ecp_nistz256_sub_fromq 2742 2743 orq %r13,%r12 2744 movdqa %xmm4,%xmm2 2745 orq %r8,%r12 2746 orq %r9,%r12 2747 por %xmm5,%xmm2 2748.byte 102,73,15,110,220 2749 2750 movq 384(%rsp),%rax 2751 leaq 384(%rsp),%rbx 2752 movq 0+96(%rsp),%r9 2753 movq 8+96(%rsp),%r10 2754 leaq 0+96(%rsp),%rsi 2755 movq 16+96(%rsp),%r11 2756 movq 24+96(%rsp),%r12 2757 leaq 160(%rsp),%rdi 2758 call __ecp_nistz256_mul_montq 2759 2760 movq 480(%rsp),%rax 2761 leaq 480(%rsp),%rbx 2762 movq 0+32(%rsp),%r9 2763 movq 8+32(%rsp),%r10 2764 leaq 0+32(%rsp),%rsi 2765 movq 16+32(%rsp),%r11 2766 movq 24+32(%rsp),%r12 2767 leaq 192(%rsp),%rdi 2768 call __ecp_nistz256_mul_montq 2769 2770 leaq 160(%rsp),%rbx 2771 leaq 0(%rsp),%rdi 2772 call __ecp_nistz256_sub_fromq 2773 2774 orq %r13,%r12 2775 orq %r8,%r12 2776 orq %r9,%r12 2777 2778.byte 102,73,15,126,208 2779.byte 102,73,15,126,217 2780 orq %r8,%r12 2781.byte 0x3e 2782 jnz L$add_proceedq 2783 2784 2785 2786 testq %r9,%r9 2787 jz L$add_doubleq 2788 2789 2790 2791 2792 2793 2794.byte 102,72,15,126,199 2795 pxor %xmm0,%xmm0 2796 movdqu %xmm0,0(%rdi) 2797 movdqu %xmm0,16(%rdi) 2798 movdqu %xmm0,32(%rdi) 2799 movdqu %xmm0,48(%rdi) 2800 movdqu %xmm0,64(%rdi) 2801 movdqu %xmm0,80(%rdi) 2802 jmp L$add_doneq 2803 2804.p2align 5 2805L$add_doubleq: 2806.byte 102,72,15,126,206 2807.byte 102,72,15,126,199 2808 addq $416,%rsp 2809 2810 jmp L$point_double_shortcutq 2811 2812 2813.p2align 5 2814L$add_proceedq: 2815 movq 0+64(%rsp),%rax 2816 movq 8+64(%rsp),%r14 2817 leaq 0+64(%rsp),%rsi 2818 movq 16+64(%rsp),%r15 2819 movq 24+64(%rsp),%r8 2820 leaq 96(%rsp),%rdi 2821 call __ecp_nistz256_sqr_montq 2822 2823 movq 448(%rsp),%rax 2824 leaq 448(%rsp),%rbx 2825 movq 0+0(%rsp),%r9 2826 movq 8+0(%rsp),%r10 2827 leaq 0+0(%rsp),%rsi 2828 movq 16+0(%rsp),%r11 2829 movq 24+0(%rsp),%r12 2830 leaq 352(%rsp),%rdi 2831 call __ecp_nistz256_mul_montq 2832 2833 movq 0+0(%rsp),%rax 2834 movq 8+0(%rsp),%r14 2835 leaq 0+0(%rsp),%rsi 2836 movq 16+0(%rsp),%r15 2837 movq 24+0(%rsp),%r8 2838 leaq 32(%rsp),%rdi 2839 call __ecp_nistz256_sqr_montq 2840 2841 movq 544(%rsp),%rax 2842 leaq 544(%rsp),%rbx 2843 movq 0+352(%rsp),%r9 2844 movq 8+352(%rsp),%r10 2845 leaq 0+352(%rsp),%rsi 2846 movq 16+352(%rsp),%r11 2847 movq 24+352(%rsp),%r12 2848 leaq 352(%rsp),%rdi 2849 call __ecp_nistz256_mul_montq 2850 2851 movq 0(%rsp),%rax 2852 leaq 0(%rsp),%rbx 2853 movq 0+32(%rsp),%r9 2854 movq 8+32(%rsp),%r10 2855 leaq 0+32(%rsp),%rsi 2856 movq 16+32(%rsp),%r11 2857 movq 24+32(%rsp),%r12 2858 leaq 128(%rsp),%rdi 2859 call __ecp_nistz256_mul_montq 2860 2861 movq 160(%rsp),%rax 2862 leaq 160(%rsp),%rbx 2863 movq 0+32(%rsp),%r9 2864 movq 8+32(%rsp),%r10 2865 leaq 0+32(%rsp),%rsi 2866 movq 16+32(%rsp),%r11 2867 movq 24+32(%rsp),%r12 2868 leaq 192(%rsp),%rdi 2869 call __ecp_nistz256_mul_montq 2870 2871 2872 2873 2874 xorq %r11,%r11 2875 addq %r12,%r12 2876 leaq 96(%rsp),%rsi 2877 adcq %r13,%r13 2878 movq %r12,%rax 2879 adcq %r8,%r8 2880 adcq %r9,%r9 2881 movq %r13,%rbp 2882 adcq $0,%r11 2883 2884 subq $-1,%r12 2885 movq %r8,%rcx 2886 sbbq %r14,%r13 2887 sbbq $0,%r8 2888 movq %r9,%r10 2889 sbbq %r15,%r9 2890 sbbq $0,%r11 2891 2892 cmovcq %rax,%r12 2893 movq 0(%rsi),%rax 2894 cmovcq %rbp,%r13 2895 movq 8(%rsi),%rbp 2896 cmovcq %rcx,%r8 2897 movq 16(%rsi),%rcx 2898 cmovcq %r10,%r9 2899 movq 24(%rsi),%r10 2900 2901 call __ecp_nistz256_subq 2902 2903 leaq 128(%rsp),%rbx 2904 leaq 288(%rsp),%rdi 2905 call __ecp_nistz256_sub_fromq 2906 2907 movq 192+0(%rsp),%rax 2908 movq 192+8(%rsp),%rbp 2909 movq 192+16(%rsp),%rcx 2910 movq 192+24(%rsp),%r10 2911 leaq 320(%rsp),%rdi 2912 2913 call __ecp_nistz256_subq 2914 2915 movq %r12,0(%rdi) 2916 movq %r13,8(%rdi) 2917 movq %r8,16(%rdi) 2918 movq %r9,24(%rdi) 2919 movq 128(%rsp),%rax 2920 leaq 128(%rsp),%rbx 2921 movq 0+224(%rsp),%r9 2922 movq 8+224(%rsp),%r10 2923 leaq 0+224(%rsp),%rsi 2924 movq 16+224(%rsp),%r11 2925 movq 24+224(%rsp),%r12 2926 leaq 256(%rsp),%rdi 2927 call __ecp_nistz256_mul_montq 2928 2929 movq 320(%rsp),%rax 2930 leaq 320(%rsp),%rbx 2931 movq 0+64(%rsp),%r9 2932 movq 8+64(%rsp),%r10 2933 leaq 0+64(%rsp),%rsi 2934 movq 16+64(%rsp),%r11 2935 movq 24+64(%rsp),%r12 2936 leaq 320(%rsp),%rdi 2937 call __ecp_nistz256_mul_montq 2938 2939 leaq 256(%rsp),%rbx 2940 leaq 320(%rsp),%rdi 2941 call __ecp_nistz256_sub_fromq 2942 2943.byte 102,72,15,126,199 2944 2945 movdqa %xmm5,%xmm0 2946 movdqa %xmm5,%xmm1 2947 pandn 352(%rsp),%xmm0 2948 movdqa %xmm5,%xmm2 2949 pandn 352+16(%rsp),%xmm1 2950 movdqa %xmm5,%xmm3 2951 pand 544(%rsp),%xmm2 2952 pand 544+16(%rsp),%xmm3 2953 por %xmm0,%xmm2 2954 por %xmm1,%xmm3 2955 2956 movdqa %xmm4,%xmm0 2957 movdqa %xmm4,%xmm1 2958 pandn %xmm2,%xmm0 2959 movdqa %xmm4,%xmm2 2960 pandn %xmm3,%xmm1 2961 movdqa %xmm4,%xmm3 2962 pand 448(%rsp),%xmm2 2963 pand 448+16(%rsp),%xmm3 2964 por %xmm0,%xmm2 2965 por %xmm1,%xmm3 2966 movdqu %xmm2,64(%rdi) 2967 movdqu %xmm3,80(%rdi) 2968 2969 movdqa %xmm5,%xmm0 2970 movdqa %xmm5,%xmm1 2971 pandn 288(%rsp),%xmm0 2972 movdqa %xmm5,%xmm2 2973 pandn 288+16(%rsp),%xmm1 2974 movdqa %xmm5,%xmm3 2975 pand 480(%rsp),%xmm2 2976 pand 480+16(%rsp),%xmm3 2977 por %xmm0,%xmm2 2978 por %xmm1,%xmm3 2979 2980 movdqa %xmm4,%xmm0 2981 movdqa %xmm4,%xmm1 2982 pandn %xmm2,%xmm0 2983 movdqa %xmm4,%xmm2 2984 pandn %xmm3,%xmm1 2985 movdqa %xmm4,%xmm3 2986 pand 384(%rsp),%xmm2 2987 pand 384+16(%rsp),%xmm3 2988 por %xmm0,%xmm2 2989 por %xmm1,%xmm3 2990 movdqu %xmm2,0(%rdi) 2991 movdqu %xmm3,16(%rdi) 2992 2993 movdqa %xmm5,%xmm0 2994 movdqa %xmm5,%xmm1 2995 pandn 320(%rsp),%xmm0 2996 movdqa %xmm5,%xmm2 2997 pandn 320+16(%rsp),%xmm1 2998 movdqa %xmm5,%xmm3 2999 pand 512(%rsp),%xmm2 3000 pand 512+16(%rsp),%xmm3 3001 por %xmm0,%xmm2 3002 por %xmm1,%xmm3 3003 3004 movdqa %xmm4,%xmm0 3005 movdqa %xmm4,%xmm1 3006 pandn %xmm2,%xmm0 3007 movdqa %xmm4,%xmm2 3008 pandn %xmm3,%xmm1 3009 movdqa %xmm4,%xmm3 3010 pand 416(%rsp),%xmm2 3011 pand 416+16(%rsp),%xmm3 3012 por %xmm0,%xmm2 3013 por %xmm1,%xmm3 3014 movdqu %xmm2,32(%rdi) 3015 movdqu %xmm3,48(%rdi) 3016 3017L$add_doneq: 3018 leaq 576+56(%rsp),%rsi 3019 3020 movq -48(%rsi),%r15 3021 3022 movq -40(%rsi),%r14 3023 3024 movq -32(%rsi),%r13 3025 3026 movq -24(%rsi),%r12 3027 3028 movq -16(%rsi),%rbx 3029 3030 movq -8(%rsi),%rbp 3031 3032 leaq (%rsi),%rsp 3033 3034L$point_addq_epilogue: 3035 ret 3036 3037 3038.globl _ecp_nistz256_point_add_affine 3039.private_extern _ecp_nistz256_point_add_affine 3040 3041.p2align 5 3042_ecp_nistz256_point_add_affine: 3043 3044_CET_ENDBR 3045 leaq _OPENSSL_ia32cap_P(%rip),%rcx 3046 movq 8(%rcx),%rcx 3047 andl $0x80100,%ecx 3048 cmpl $0x80100,%ecx 3049 je L$point_add_affinex 3050 pushq %rbp 3051 3052 pushq %rbx 3053 3054 pushq %r12 3055 3056 pushq %r13 3057 3058 pushq %r14 3059 3060 pushq %r15 3061 3062 subq $480+8,%rsp 3063 3064L$add_affineq_body: 3065 3066 movdqu 0(%rsi),%xmm0 3067 movq %rdx,%rbx 3068 movdqu 16(%rsi),%xmm1 3069 movdqu 32(%rsi),%xmm2 3070 movdqu 48(%rsi),%xmm3 3071 movdqu 64(%rsi),%xmm4 3072 movdqu 80(%rsi),%xmm5 3073 movq 64+0(%rsi),%rax 3074 movq 64+8(%rsi),%r14 3075 movq 64+16(%rsi),%r15 3076 movq 64+24(%rsi),%r8 3077 movdqa %xmm0,320(%rsp) 3078 movdqa %xmm1,320+16(%rsp) 3079 movdqa %xmm2,352(%rsp) 3080 movdqa %xmm3,352+16(%rsp) 3081 movdqa %xmm4,384(%rsp) 3082 movdqa %xmm5,384+16(%rsp) 3083 por %xmm4,%xmm5 3084 3085 movdqu 0(%rbx),%xmm0 3086 pshufd $0xb1,%xmm5,%xmm3 3087 movdqu 16(%rbx),%xmm1 3088 movdqu 32(%rbx),%xmm2 3089 por %xmm3,%xmm5 3090 movdqu 48(%rbx),%xmm3 3091 movdqa %xmm0,416(%rsp) 3092 pshufd $0x1e,%xmm5,%xmm4 3093 movdqa %xmm1,416+16(%rsp) 3094 por %xmm0,%xmm1 3095.byte 102,72,15,110,199 3096 movdqa %xmm2,448(%rsp) 3097 movdqa %xmm3,448+16(%rsp) 3098 por %xmm2,%xmm3 3099 por %xmm4,%xmm5 3100 pxor %xmm4,%xmm4 3101 por %xmm1,%xmm3 3102 3103 leaq 64-0(%rsi),%rsi 3104 leaq 32(%rsp),%rdi 3105 call __ecp_nistz256_sqr_montq 3106 3107 pcmpeqd %xmm4,%xmm5 3108 pshufd $0xb1,%xmm3,%xmm4 3109 movq 0(%rbx),%rax 3110 3111 movq %r12,%r9 3112 por %xmm3,%xmm4 3113 pshufd $0,%xmm5,%xmm5 3114 pshufd $0x1e,%xmm4,%xmm3 3115 movq %r13,%r10 3116 por %xmm3,%xmm4 3117 pxor %xmm3,%xmm3 3118 movq %r14,%r11 3119 pcmpeqd %xmm3,%xmm4 3120 pshufd $0,%xmm4,%xmm4 3121 3122 leaq 32-0(%rsp),%rsi 3123 movq %r15,%r12 3124 leaq 0(%rsp),%rdi 3125 call __ecp_nistz256_mul_montq 3126 3127 leaq 320(%rsp),%rbx 3128 leaq 64(%rsp),%rdi 3129 call __ecp_nistz256_sub_fromq 3130 3131 movq 384(%rsp),%rax 3132 leaq 384(%rsp),%rbx 3133 movq 0+32(%rsp),%r9 3134 movq 8+32(%rsp),%r10 3135 leaq 0+32(%rsp),%rsi 3136 movq 16+32(%rsp),%r11 3137 movq 24+32(%rsp),%r12 3138 leaq 32(%rsp),%rdi 3139 call __ecp_nistz256_mul_montq 3140 3141 movq 384(%rsp),%rax 3142 leaq 384(%rsp),%rbx 3143 movq 0+64(%rsp),%r9 3144 movq 8+64(%rsp),%r10 3145 leaq 0+64(%rsp),%rsi 3146 movq 16+64(%rsp),%r11 3147 movq 24+64(%rsp),%r12 3148 leaq 288(%rsp),%rdi 3149 call __ecp_nistz256_mul_montq 3150 3151 movq 448(%rsp),%rax 3152 leaq 448(%rsp),%rbx 3153 movq 0+32(%rsp),%r9 3154 movq 8+32(%rsp),%r10 3155 leaq 0+32(%rsp),%rsi 3156 movq 16+32(%rsp),%r11 3157 movq 24+32(%rsp),%r12 3158 leaq 32(%rsp),%rdi 3159 call __ecp_nistz256_mul_montq 3160 3161 leaq 352(%rsp),%rbx 3162 leaq 96(%rsp),%rdi 3163 call __ecp_nistz256_sub_fromq 3164 3165 movq 0+64(%rsp),%rax 3166 movq 8+64(%rsp),%r14 3167 leaq 0+64(%rsp),%rsi 3168 movq 16+64(%rsp),%r15 3169 movq 24+64(%rsp),%r8 3170 leaq 128(%rsp),%rdi 3171 call __ecp_nistz256_sqr_montq 3172 3173 movq 0+96(%rsp),%rax 3174 movq 8+96(%rsp),%r14 3175 leaq 0+96(%rsp),%rsi 3176 movq 16+96(%rsp),%r15 3177 movq 24+96(%rsp),%r8 3178 leaq 192(%rsp),%rdi 3179 call __ecp_nistz256_sqr_montq 3180 3181 movq 128(%rsp),%rax 3182 leaq 128(%rsp),%rbx 3183 movq 0+64(%rsp),%r9 3184 movq 8+64(%rsp),%r10 3185 leaq 0+64(%rsp),%rsi 3186 movq 16+64(%rsp),%r11 3187 movq 24+64(%rsp),%r12 3188 leaq 160(%rsp),%rdi 3189 call __ecp_nistz256_mul_montq 3190 3191 movq 320(%rsp),%rax 3192 leaq 320(%rsp),%rbx 3193 movq 0+128(%rsp),%r9 3194 movq 8+128(%rsp),%r10 3195 leaq 0+128(%rsp),%rsi 3196 movq 16+128(%rsp),%r11 3197 movq 24+128(%rsp),%r12 3198 leaq 0(%rsp),%rdi 3199 call __ecp_nistz256_mul_montq 3200 3201 3202 3203 3204 xorq %r11,%r11 3205 addq %r12,%r12 3206 leaq 192(%rsp),%rsi 3207 adcq %r13,%r13 3208 movq %r12,%rax 3209 adcq %r8,%r8 3210 adcq %r9,%r9 3211 movq %r13,%rbp 3212 adcq $0,%r11 3213 3214 subq $-1,%r12 3215 movq %r8,%rcx 3216 sbbq %r14,%r13 3217 sbbq $0,%r8 3218 movq %r9,%r10 3219 sbbq %r15,%r9 3220 sbbq $0,%r11 3221 3222 cmovcq %rax,%r12 3223 movq 0(%rsi),%rax 3224 cmovcq %rbp,%r13 3225 movq 8(%rsi),%rbp 3226 cmovcq %rcx,%r8 3227 movq 16(%rsi),%rcx 3228 cmovcq %r10,%r9 3229 movq 24(%rsi),%r10 3230 3231 call __ecp_nistz256_subq 3232 3233 leaq 160(%rsp),%rbx 3234 leaq 224(%rsp),%rdi 3235 call __ecp_nistz256_sub_fromq 3236 3237 movq 0+0(%rsp),%rax 3238 movq 0+8(%rsp),%rbp 3239 movq 0+16(%rsp),%rcx 3240 movq 0+24(%rsp),%r10 3241 leaq 64(%rsp),%rdi 3242 3243 call __ecp_nistz256_subq 3244 3245 movq %r12,0(%rdi) 3246 movq %r13,8(%rdi) 3247 movq %r8,16(%rdi) 3248 movq %r9,24(%rdi) 3249 movq 352(%rsp),%rax 3250 leaq 352(%rsp),%rbx 3251 movq 0+160(%rsp),%r9 3252 movq 8+160(%rsp),%r10 3253 leaq 0+160(%rsp),%rsi 3254 movq 16+160(%rsp),%r11 3255 movq 24+160(%rsp),%r12 3256 leaq 32(%rsp),%rdi 3257 call __ecp_nistz256_mul_montq 3258 3259 movq 96(%rsp),%rax 3260 leaq 96(%rsp),%rbx 3261 movq 0+64(%rsp),%r9 3262 movq 8+64(%rsp),%r10 3263 leaq 0+64(%rsp),%rsi 3264 movq 16+64(%rsp),%r11 3265 movq 24+64(%rsp),%r12 3266 leaq 64(%rsp),%rdi 3267 call __ecp_nistz256_mul_montq 3268 3269 leaq 32(%rsp),%rbx 3270 leaq 256(%rsp),%rdi 3271 call __ecp_nistz256_sub_fromq 3272 3273.byte 102,72,15,126,199 3274 3275 movdqa %xmm5,%xmm0 3276 movdqa %xmm5,%xmm1 3277 pandn 288(%rsp),%xmm0 3278 movdqa %xmm5,%xmm2 3279 pandn 288+16(%rsp),%xmm1 3280 movdqa %xmm5,%xmm3 3281 pand L$ONE_mont(%rip),%xmm2 3282 pand L$ONE_mont+16(%rip),%xmm3 3283 por %xmm0,%xmm2 3284 por %xmm1,%xmm3 3285 3286 movdqa %xmm4,%xmm0 3287 movdqa %xmm4,%xmm1 3288 pandn %xmm2,%xmm0 3289 movdqa %xmm4,%xmm2 3290 pandn %xmm3,%xmm1 3291 movdqa %xmm4,%xmm3 3292 pand 384(%rsp),%xmm2 3293 pand 384+16(%rsp),%xmm3 3294 por %xmm0,%xmm2 3295 por %xmm1,%xmm3 3296 movdqu %xmm2,64(%rdi) 3297 movdqu %xmm3,80(%rdi) 3298 3299 movdqa %xmm5,%xmm0 3300 movdqa %xmm5,%xmm1 3301 pandn 224(%rsp),%xmm0 3302 movdqa %xmm5,%xmm2 3303 pandn 224+16(%rsp),%xmm1 3304 movdqa %xmm5,%xmm3 3305 pand 416(%rsp),%xmm2 3306 pand 416+16(%rsp),%xmm3 3307 por %xmm0,%xmm2 3308 por %xmm1,%xmm3 3309 3310 movdqa %xmm4,%xmm0 3311 movdqa %xmm4,%xmm1 3312 pandn %xmm2,%xmm0 3313 movdqa %xmm4,%xmm2 3314 pandn %xmm3,%xmm1 3315 movdqa %xmm4,%xmm3 3316 pand 320(%rsp),%xmm2 3317 pand 320+16(%rsp),%xmm3 3318 por %xmm0,%xmm2 3319 por %xmm1,%xmm3 3320 movdqu %xmm2,0(%rdi) 3321 movdqu %xmm3,16(%rdi) 3322 3323 movdqa %xmm5,%xmm0 3324 movdqa %xmm5,%xmm1 3325 pandn 256(%rsp),%xmm0 3326 movdqa %xmm5,%xmm2 3327 pandn 256+16(%rsp),%xmm1 3328 movdqa %xmm5,%xmm3 3329 pand 448(%rsp),%xmm2 3330 pand 448+16(%rsp),%xmm3 3331 por %xmm0,%xmm2 3332 por %xmm1,%xmm3 3333 3334 movdqa %xmm4,%xmm0 3335 movdqa %xmm4,%xmm1 3336 pandn %xmm2,%xmm0 3337 movdqa %xmm4,%xmm2 3338 pandn %xmm3,%xmm1 3339 movdqa %xmm4,%xmm3 3340 pand 352(%rsp),%xmm2 3341 pand 352+16(%rsp),%xmm3 3342 por %xmm0,%xmm2 3343 por %xmm1,%xmm3 3344 movdqu %xmm2,32(%rdi) 3345 movdqu %xmm3,48(%rdi) 3346 3347 leaq 480+56(%rsp),%rsi 3348 3349 movq -48(%rsi),%r15 3350 3351 movq -40(%rsi),%r14 3352 3353 movq -32(%rsi),%r13 3354 3355 movq -24(%rsi),%r12 3356 3357 movq -16(%rsi),%rbx 3358 3359 movq -8(%rsi),%rbp 3360 3361 leaq (%rsi),%rsp 3362 3363L$add_affineq_epilogue: 3364 ret 3365 3366 3367 3368.p2align 5 3369__ecp_nistz256_add_tox: 3370 3371 xorq %r11,%r11 3372 adcq 0(%rbx),%r12 3373 adcq 8(%rbx),%r13 3374 movq %r12,%rax 3375 adcq 16(%rbx),%r8 3376 adcq 24(%rbx),%r9 3377 movq %r13,%rbp 3378 adcq $0,%r11 3379 3380 xorq %r10,%r10 3381 sbbq $-1,%r12 3382 movq %r8,%rcx 3383 sbbq %r14,%r13 3384 sbbq $0,%r8 3385 movq %r9,%r10 3386 sbbq %r15,%r9 3387 sbbq $0,%r11 3388 3389 cmovcq %rax,%r12 3390 cmovcq %rbp,%r13 3391 movq %r12,0(%rdi) 3392 cmovcq %rcx,%r8 3393 movq %r13,8(%rdi) 3394 cmovcq %r10,%r9 3395 movq %r8,16(%rdi) 3396 movq %r9,24(%rdi) 3397 3398 ret 3399 3400 3401 3402 3403.p2align 5 3404__ecp_nistz256_sub_fromx: 3405 3406 xorq %r11,%r11 3407 sbbq 0(%rbx),%r12 3408 sbbq 8(%rbx),%r13 3409 movq %r12,%rax 3410 sbbq 16(%rbx),%r8 3411 sbbq 24(%rbx),%r9 3412 movq %r13,%rbp 3413 sbbq $0,%r11 3414 3415 xorq %r10,%r10 3416 adcq $-1,%r12 3417 movq %r8,%rcx 3418 adcq %r14,%r13 3419 adcq $0,%r8 3420 movq %r9,%r10 3421 adcq %r15,%r9 3422 3423 btq $0,%r11 3424 cmovncq %rax,%r12 3425 cmovncq %rbp,%r13 3426 movq %r12,0(%rdi) 3427 cmovncq %rcx,%r8 3428 movq %r13,8(%rdi) 3429 cmovncq %r10,%r9 3430 movq %r8,16(%rdi) 3431 movq %r9,24(%rdi) 3432 3433 ret 3434 3435 3436 3437 3438.p2align 5 3439__ecp_nistz256_subx: 3440 3441 xorq %r11,%r11 3442 sbbq %r12,%rax 3443 sbbq %r13,%rbp 3444 movq %rax,%r12 3445 sbbq %r8,%rcx 3446 sbbq %r9,%r10 3447 movq %rbp,%r13 3448 sbbq $0,%r11 3449 3450 xorq %r9,%r9 3451 adcq $-1,%rax 3452 movq %rcx,%r8 3453 adcq %r14,%rbp 3454 adcq $0,%rcx 3455 movq %r10,%r9 3456 adcq %r15,%r10 3457 3458 btq $0,%r11 3459 cmovcq %rax,%r12 3460 cmovcq %rbp,%r13 3461 cmovcq %rcx,%r8 3462 cmovcq %r10,%r9 3463 3464 ret 3465 3466 3467 3468 3469.p2align 5 3470__ecp_nistz256_mul_by_2x: 3471 3472 xorq %r11,%r11 3473 adcq %r12,%r12 3474 adcq %r13,%r13 3475 movq %r12,%rax 3476 adcq %r8,%r8 3477 adcq %r9,%r9 3478 movq %r13,%rbp 3479 adcq $0,%r11 3480 3481 xorq %r10,%r10 3482 sbbq $-1,%r12 3483 movq %r8,%rcx 3484 sbbq %r14,%r13 3485 sbbq $0,%r8 3486 movq %r9,%r10 3487 sbbq %r15,%r9 3488 sbbq $0,%r11 3489 3490 cmovcq %rax,%r12 3491 cmovcq %rbp,%r13 3492 movq %r12,0(%rdi) 3493 cmovcq %rcx,%r8 3494 movq %r13,8(%rdi) 3495 cmovcq %r10,%r9 3496 movq %r8,16(%rdi) 3497 movq %r9,24(%rdi) 3498 3499 ret 3500 3501 3502 3503.p2align 5 3504ecp_nistz256_point_doublex: 3505 3506L$point_doublex: 3507 pushq %rbp 3508 3509 pushq %rbx 3510 3511 pushq %r12 3512 3513 pushq %r13 3514 3515 pushq %r14 3516 3517 pushq %r15 3518 3519 subq $160+8,%rsp 3520 3521L$point_doublex_body: 3522 3523L$point_double_shortcutx: 3524 movdqu 0(%rsi),%xmm0 3525 movq %rsi,%rbx 3526 movdqu 16(%rsi),%xmm1 3527 movq 32+0(%rsi),%r12 3528 movq 32+8(%rsi),%r13 3529 movq 32+16(%rsi),%r8 3530 movq 32+24(%rsi),%r9 3531 movq L$poly+8(%rip),%r14 3532 movq L$poly+24(%rip),%r15 3533 movdqa %xmm0,96(%rsp) 3534 movdqa %xmm1,96+16(%rsp) 3535 leaq 32(%rdi),%r10 3536 leaq 64(%rdi),%r11 3537.byte 102,72,15,110,199 3538.byte 102,73,15,110,202 3539.byte 102,73,15,110,211 3540 3541 leaq 0(%rsp),%rdi 3542 call __ecp_nistz256_mul_by_2x 3543 3544 movq 64+0(%rsi),%rdx 3545 movq 64+8(%rsi),%r14 3546 movq 64+16(%rsi),%r15 3547 movq 64+24(%rsi),%r8 3548 leaq 64-128(%rsi),%rsi 3549 leaq 64(%rsp),%rdi 3550 call __ecp_nistz256_sqr_montx 3551 3552 movq 0+0(%rsp),%rdx 3553 movq 8+0(%rsp),%r14 3554 leaq -128+0(%rsp),%rsi 3555 movq 16+0(%rsp),%r15 3556 movq 24+0(%rsp),%r8 3557 leaq 0(%rsp),%rdi 3558 call __ecp_nistz256_sqr_montx 3559 3560 movq 32(%rbx),%rdx 3561 movq 64+0(%rbx),%r9 3562 movq 64+8(%rbx),%r10 3563 movq 64+16(%rbx),%r11 3564 movq 64+24(%rbx),%r12 3565 leaq 64-128(%rbx),%rsi 3566 leaq 32(%rbx),%rbx 3567.byte 102,72,15,126,215 3568 call __ecp_nistz256_mul_montx 3569 call __ecp_nistz256_mul_by_2x 3570 3571 movq 96+0(%rsp),%r12 3572 movq 96+8(%rsp),%r13 3573 leaq 64(%rsp),%rbx 3574 movq 96+16(%rsp),%r8 3575 movq 96+24(%rsp),%r9 3576 leaq 32(%rsp),%rdi 3577 call __ecp_nistz256_add_tox 3578 3579 movq 96+0(%rsp),%r12 3580 movq 96+8(%rsp),%r13 3581 leaq 64(%rsp),%rbx 3582 movq 96+16(%rsp),%r8 3583 movq 96+24(%rsp),%r9 3584 leaq 64(%rsp),%rdi 3585 call __ecp_nistz256_sub_fromx 3586 3587 movq 0+0(%rsp),%rdx 3588 movq 8+0(%rsp),%r14 3589 leaq -128+0(%rsp),%rsi 3590 movq 16+0(%rsp),%r15 3591 movq 24+0(%rsp),%r8 3592.byte 102,72,15,126,207 3593 call __ecp_nistz256_sqr_montx 3594 xorq %r9,%r9 3595 movq %r12,%rax 3596 addq $-1,%r12 3597 movq %r13,%r10 3598 adcq %rsi,%r13 3599 movq %r14,%rcx 3600 adcq $0,%r14 3601 movq %r15,%r8 3602 adcq %rbp,%r15 3603 adcq $0,%r9 3604 xorq %rsi,%rsi 3605 testq $1,%rax 3606 3607 cmovzq %rax,%r12 3608 cmovzq %r10,%r13 3609 cmovzq %rcx,%r14 3610 cmovzq %r8,%r15 3611 cmovzq %rsi,%r9 3612 3613 movq %r13,%rax 3614 shrq $1,%r12 3615 shlq $63,%rax 3616 movq %r14,%r10 3617 shrq $1,%r13 3618 orq %rax,%r12 3619 shlq $63,%r10 3620 movq %r15,%rcx 3621 shrq $1,%r14 3622 orq %r10,%r13 3623 shlq $63,%rcx 3624 movq %r12,0(%rdi) 3625 shrq $1,%r15 3626 movq %r13,8(%rdi) 3627 shlq $63,%r9 3628 orq %rcx,%r14 3629 orq %r9,%r15 3630 movq %r14,16(%rdi) 3631 movq %r15,24(%rdi) 3632 movq 64(%rsp),%rdx 3633 leaq 64(%rsp),%rbx 3634 movq 0+32(%rsp),%r9 3635 movq 8+32(%rsp),%r10 3636 leaq -128+32(%rsp),%rsi 3637 movq 16+32(%rsp),%r11 3638 movq 24+32(%rsp),%r12 3639 leaq 32(%rsp),%rdi 3640 call __ecp_nistz256_mul_montx 3641 3642 leaq 128(%rsp),%rdi 3643 call __ecp_nistz256_mul_by_2x 3644 3645 leaq 32(%rsp),%rbx 3646 leaq 32(%rsp),%rdi 3647 call __ecp_nistz256_add_tox 3648 3649 movq 96(%rsp),%rdx 3650 leaq 96(%rsp),%rbx 3651 movq 0+0(%rsp),%r9 3652 movq 8+0(%rsp),%r10 3653 leaq -128+0(%rsp),%rsi 3654 movq 16+0(%rsp),%r11 3655 movq 24+0(%rsp),%r12 3656 leaq 0(%rsp),%rdi 3657 call __ecp_nistz256_mul_montx 3658 3659 leaq 128(%rsp),%rdi 3660 call __ecp_nistz256_mul_by_2x 3661 3662 movq 0+32(%rsp),%rdx 3663 movq 8+32(%rsp),%r14 3664 leaq -128+32(%rsp),%rsi 3665 movq 16+32(%rsp),%r15 3666 movq 24+32(%rsp),%r8 3667.byte 102,72,15,126,199 3668 call __ecp_nistz256_sqr_montx 3669 3670 leaq 128(%rsp),%rbx 3671 movq %r14,%r8 3672 movq %r15,%r9 3673 movq %rsi,%r14 3674 movq %rbp,%r15 3675 call __ecp_nistz256_sub_fromx 3676 3677 movq 0+0(%rsp),%rax 3678 movq 0+8(%rsp),%rbp 3679 movq 0+16(%rsp),%rcx 3680 movq 0+24(%rsp),%r10 3681 leaq 0(%rsp),%rdi 3682 call __ecp_nistz256_subx 3683 3684 movq 32(%rsp),%rdx 3685 leaq 32(%rsp),%rbx 3686 movq %r12,%r14 3687 xorl %ecx,%ecx 3688 movq %r12,0+0(%rsp) 3689 movq %r13,%r10 3690 movq %r13,0+8(%rsp) 3691 cmovzq %r8,%r11 3692 movq %r8,0+16(%rsp) 3693 leaq 0-128(%rsp),%rsi 3694 cmovzq %r9,%r12 3695 movq %r9,0+24(%rsp) 3696 movq %r14,%r9 3697 leaq 0(%rsp),%rdi 3698 call __ecp_nistz256_mul_montx 3699 3700.byte 102,72,15,126,203 3701.byte 102,72,15,126,207 3702 call __ecp_nistz256_sub_fromx 3703 3704 leaq 160+56(%rsp),%rsi 3705 3706 movq -48(%rsi),%r15 3707 3708 movq -40(%rsi),%r14 3709 3710 movq -32(%rsi),%r13 3711 3712 movq -24(%rsi),%r12 3713 3714 movq -16(%rsi),%rbx 3715 3716 movq -8(%rsi),%rbp 3717 3718 leaq (%rsi),%rsp 3719 3720L$point_doublex_epilogue: 3721 ret 3722 3723 3724 3725.p2align 5 3726ecp_nistz256_point_addx: 3727 3728L$point_addx: 3729 pushq %rbp 3730 3731 pushq %rbx 3732 3733 pushq %r12 3734 3735 pushq %r13 3736 3737 pushq %r14 3738 3739 pushq %r15 3740 3741 subq $576+8,%rsp 3742 3743L$point_addx_body: 3744 3745 movdqu 0(%rsi),%xmm0 3746 movdqu 16(%rsi),%xmm1 3747 movdqu 32(%rsi),%xmm2 3748 movdqu 48(%rsi),%xmm3 3749 movdqu 64(%rsi),%xmm4 3750 movdqu 80(%rsi),%xmm5 3751 movq %rsi,%rbx 3752 movq %rdx,%rsi 3753 movdqa %xmm0,384(%rsp) 3754 movdqa %xmm1,384+16(%rsp) 3755 movdqa %xmm2,416(%rsp) 3756 movdqa %xmm3,416+16(%rsp) 3757 movdqa %xmm4,448(%rsp) 3758 movdqa %xmm5,448+16(%rsp) 3759 por %xmm4,%xmm5 3760 3761 movdqu 0(%rsi),%xmm0 3762 pshufd $0xb1,%xmm5,%xmm3 3763 movdqu 16(%rsi),%xmm1 3764 movdqu 32(%rsi),%xmm2 3765 por %xmm3,%xmm5 3766 movdqu 48(%rsi),%xmm3 3767 movq 64+0(%rsi),%rdx 3768 movq 64+8(%rsi),%r14 3769 movq 64+16(%rsi),%r15 3770 movq 64+24(%rsi),%r8 3771 movdqa %xmm0,480(%rsp) 3772 pshufd $0x1e,%xmm5,%xmm4 3773 movdqa %xmm1,480+16(%rsp) 3774 movdqu 64(%rsi),%xmm0 3775 movdqu 80(%rsi),%xmm1 3776 movdqa %xmm2,512(%rsp) 3777 movdqa %xmm3,512+16(%rsp) 3778 por %xmm4,%xmm5 3779 pxor %xmm4,%xmm4 3780 por %xmm0,%xmm1 3781.byte 102,72,15,110,199 3782 3783 leaq 64-128(%rsi),%rsi 3784 movq %rdx,544+0(%rsp) 3785 movq %r14,544+8(%rsp) 3786 movq %r15,544+16(%rsp) 3787 movq %r8,544+24(%rsp) 3788 leaq 96(%rsp),%rdi 3789 call __ecp_nistz256_sqr_montx 3790 3791 pcmpeqd %xmm4,%xmm5 3792 pshufd $0xb1,%xmm1,%xmm4 3793 por %xmm1,%xmm4 3794 pshufd $0,%xmm5,%xmm5 3795 pshufd $0x1e,%xmm4,%xmm3 3796 por %xmm3,%xmm4 3797 pxor %xmm3,%xmm3 3798 pcmpeqd %xmm3,%xmm4 3799 pshufd $0,%xmm4,%xmm4 3800 movq 64+0(%rbx),%rdx 3801 movq 64+8(%rbx),%r14 3802 movq 64+16(%rbx),%r15 3803 movq 64+24(%rbx),%r8 3804.byte 102,72,15,110,203 3805 3806 leaq 64-128(%rbx),%rsi 3807 leaq 32(%rsp),%rdi 3808 call __ecp_nistz256_sqr_montx 3809 3810 movq 544(%rsp),%rdx 3811 leaq 544(%rsp),%rbx 3812 movq 0+96(%rsp),%r9 3813 movq 8+96(%rsp),%r10 3814 leaq -128+96(%rsp),%rsi 3815 movq 16+96(%rsp),%r11 3816 movq 24+96(%rsp),%r12 3817 leaq 224(%rsp),%rdi 3818 call __ecp_nistz256_mul_montx 3819 3820 movq 448(%rsp),%rdx 3821 leaq 448(%rsp),%rbx 3822 movq 0+32(%rsp),%r9 3823 movq 8+32(%rsp),%r10 3824 leaq -128+32(%rsp),%rsi 3825 movq 16+32(%rsp),%r11 3826 movq 24+32(%rsp),%r12 3827 leaq 256(%rsp),%rdi 3828 call __ecp_nistz256_mul_montx 3829 3830 movq 416(%rsp),%rdx 3831 leaq 416(%rsp),%rbx 3832 movq 0+224(%rsp),%r9 3833 movq 8+224(%rsp),%r10 3834 leaq -128+224(%rsp),%rsi 3835 movq 16+224(%rsp),%r11 3836 movq 24+224(%rsp),%r12 3837 leaq 224(%rsp),%rdi 3838 call __ecp_nistz256_mul_montx 3839 3840 movq 512(%rsp),%rdx 3841 leaq 512(%rsp),%rbx 3842 movq 0+256(%rsp),%r9 3843 movq 8+256(%rsp),%r10 3844 leaq -128+256(%rsp),%rsi 3845 movq 16+256(%rsp),%r11 3846 movq 24+256(%rsp),%r12 3847 leaq 256(%rsp),%rdi 3848 call __ecp_nistz256_mul_montx 3849 3850 leaq 224(%rsp),%rbx 3851 leaq 64(%rsp),%rdi 3852 call __ecp_nistz256_sub_fromx 3853 3854 orq %r13,%r12 3855 movdqa %xmm4,%xmm2 3856 orq %r8,%r12 3857 orq %r9,%r12 3858 por %xmm5,%xmm2 3859.byte 102,73,15,110,220 3860 3861 movq 384(%rsp),%rdx 3862 leaq 384(%rsp),%rbx 3863 movq 0+96(%rsp),%r9 3864 movq 8+96(%rsp),%r10 3865 leaq -128+96(%rsp),%rsi 3866 movq 16+96(%rsp),%r11 3867 movq 24+96(%rsp),%r12 3868 leaq 160(%rsp),%rdi 3869 call __ecp_nistz256_mul_montx 3870 3871 movq 480(%rsp),%rdx 3872 leaq 480(%rsp),%rbx 3873 movq 0+32(%rsp),%r9 3874 movq 8+32(%rsp),%r10 3875 leaq -128+32(%rsp),%rsi 3876 movq 16+32(%rsp),%r11 3877 movq 24+32(%rsp),%r12 3878 leaq 192(%rsp),%rdi 3879 call __ecp_nistz256_mul_montx 3880 3881 leaq 160(%rsp),%rbx 3882 leaq 0(%rsp),%rdi 3883 call __ecp_nistz256_sub_fromx 3884 3885 orq %r13,%r12 3886 orq %r8,%r12 3887 orq %r9,%r12 3888 3889.byte 102,73,15,126,208 3890.byte 102,73,15,126,217 3891 orq %r8,%r12 3892.byte 0x3e 3893 jnz L$add_proceedx 3894 3895 3896 3897 testq %r9,%r9 3898 jz L$add_doublex 3899 3900 3901 3902 3903 3904 3905.byte 102,72,15,126,199 3906 pxor %xmm0,%xmm0 3907 movdqu %xmm0,0(%rdi) 3908 movdqu %xmm0,16(%rdi) 3909 movdqu %xmm0,32(%rdi) 3910 movdqu %xmm0,48(%rdi) 3911 movdqu %xmm0,64(%rdi) 3912 movdqu %xmm0,80(%rdi) 3913 jmp L$add_donex 3914 3915.p2align 5 3916L$add_doublex: 3917.byte 102,72,15,126,206 3918.byte 102,72,15,126,199 3919 addq $416,%rsp 3920 3921 jmp L$point_double_shortcutx 3922 3923 3924.p2align 5 3925L$add_proceedx: 3926 movq 0+64(%rsp),%rdx 3927 movq 8+64(%rsp),%r14 3928 leaq -128+64(%rsp),%rsi 3929 movq 16+64(%rsp),%r15 3930 movq 24+64(%rsp),%r8 3931 leaq 96(%rsp),%rdi 3932 call __ecp_nistz256_sqr_montx 3933 3934 movq 448(%rsp),%rdx 3935 leaq 448(%rsp),%rbx 3936 movq 0+0(%rsp),%r9 3937 movq 8+0(%rsp),%r10 3938 leaq -128+0(%rsp),%rsi 3939 movq 16+0(%rsp),%r11 3940 movq 24+0(%rsp),%r12 3941 leaq 352(%rsp),%rdi 3942 call __ecp_nistz256_mul_montx 3943 3944 movq 0+0(%rsp),%rdx 3945 movq 8+0(%rsp),%r14 3946 leaq -128+0(%rsp),%rsi 3947 movq 16+0(%rsp),%r15 3948 movq 24+0(%rsp),%r8 3949 leaq 32(%rsp),%rdi 3950 call __ecp_nistz256_sqr_montx 3951 3952 movq 544(%rsp),%rdx 3953 leaq 544(%rsp),%rbx 3954 movq 0+352(%rsp),%r9 3955 movq 8+352(%rsp),%r10 3956 leaq -128+352(%rsp),%rsi 3957 movq 16+352(%rsp),%r11 3958 movq 24+352(%rsp),%r12 3959 leaq 352(%rsp),%rdi 3960 call __ecp_nistz256_mul_montx 3961 3962 movq 0(%rsp),%rdx 3963 leaq 0(%rsp),%rbx 3964 movq 0+32(%rsp),%r9 3965 movq 8+32(%rsp),%r10 3966 leaq -128+32(%rsp),%rsi 3967 movq 16+32(%rsp),%r11 3968 movq 24+32(%rsp),%r12 3969 leaq 128(%rsp),%rdi 3970 call __ecp_nistz256_mul_montx 3971 3972 movq 160(%rsp),%rdx 3973 leaq 160(%rsp),%rbx 3974 movq 0+32(%rsp),%r9 3975 movq 8+32(%rsp),%r10 3976 leaq -128+32(%rsp),%rsi 3977 movq 16+32(%rsp),%r11 3978 movq 24+32(%rsp),%r12 3979 leaq 192(%rsp),%rdi 3980 call __ecp_nistz256_mul_montx 3981 3982 3983 3984 3985 xorq %r11,%r11 3986 addq %r12,%r12 3987 leaq 96(%rsp),%rsi 3988 adcq %r13,%r13 3989 movq %r12,%rax 3990 adcq %r8,%r8 3991 adcq %r9,%r9 3992 movq %r13,%rbp 3993 adcq $0,%r11 3994 3995 subq $-1,%r12 3996 movq %r8,%rcx 3997 sbbq %r14,%r13 3998 sbbq $0,%r8 3999 movq %r9,%r10 4000 sbbq %r15,%r9 4001 sbbq $0,%r11 4002 4003 cmovcq %rax,%r12 4004 movq 0(%rsi),%rax 4005 cmovcq %rbp,%r13 4006 movq 8(%rsi),%rbp 4007 cmovcq %rcx,%r8 4008 movq 16(%rsi),%rcx 4009 cmovcq %r10,%r9 4010 movq 24(%rsi),%r10 4011 4012 call __ecp_nistz256_subx 4013 4014 leaq 128(%rsp),%rbx 4015 leaq 288(%rsp),%rdi 4016 call __ecp_nistz256_sub_fromx 4017 4018 movq 192+0(%rsp),%rax 4019 movq 192+8(%rsp),%rbp 4020 movq 192+16(%rsp),%rcx 4021 movq 192+24(%rsp),%r10 4022 leaq 320(%rsp),%rdi 4023 4024 call __ecp_nistz256_subx 4025 4026 movq %r12,0(%rdi) 4027 movq %r13,8(%rdi) 4028 movq %r8,16(%rdi) 4029 movq %r9,24(%rdi) 4030 movq 128(%rsp),%rdx 4031 leaq 128(%rsp),%rbx 4032 movq 0+224(%rsp),%r9 4033 movq 8+224(%rsp),%r10 4034 leaq -128+224(%rsp),%rsi 4035 movq 16+224(%rsp),%r11 4036 movq 24+224(%rsp),%r12 4037 leaq 256(%rsp),%rdi 4038 call __ecp_nistz256_mul_montx 4039 4040 movq 320(%rsp),%rdx 4041 leaq 320(%rsp),%rbx 4042 movq 0+64(%rsp),%r9 4043 movq 8+64(%rsp),%r10 4044 leaq -128+64(%rsp),%rsi 4045 movq 16+64(%rsp),%r11 4046 movq 24+64(%rsp),%r12 4047 leaq 320(%rsp),%rdi 4048 call __ecp_nistz256_mul_montx 4049 4050 leaq 256(%rsp),%rbx 4051 leaq 320(%rsp),%rdi 4052 call __ecp_nistz256_sub_fromx 4053 4054.byte 102,72,15,126,199 4055 4056 movdqa %xmm5,%xmm0 4057 movdqa %xmm5,%xmm1 4058 pandn 352(%rsp),%xmm0 4059 movdqa %xmm5,%xmm2 4060 pandn 352+16(%rsp),%xmm1 4061 movdqa %xmm5,%xmm3 4062 pand 544(%rsp),%xmm2 4063 pand 544+16(%rsp),%xmm3 4064 por %xmm0,%xmm2 4065 por %xmm1,%xmm3 4066 4067 movdqa %xmm4,%xmm0 4068 movdqa %xmm4,%xmm1 4069 pandn %xmm2,%xmm0 4070 movdqa %xmm4,%xmm2 4071 pandn %xmm3,%xmm1 4072 movdqa %xmm4,%xmm3 4073 pand 448(%rsp),%xmm2 4074 pand 448+16(%rsp),%xmm3 4075 por %xmm0,%xmm2 4076 por %xmm1,%xmm3 4077 movdqu %xmm2,64(%rdi) 4078 movdqu %xmm3,80(%rdi) 4079 4080 movdqa %xmm5,%xmm0 4081 movdqa %xmm5,%xmm1 4082 pandn 288(%rsp),%xmm0 4083 movdqa %xmm5,%xmm2 4084 pandn 288+16(%rsp),%xmm1 4085 movdqa %xmm5,%xmm3 4086 pand 480(%rsp),%xmm2 4087 pand 480+16(%rsp),%xmm3 4088 por %xmm0,%xmm2 4089 por %xmm1,%xmm3 4090 4091 movdqa %xmm4,%xmm0 4092 movdqa %xmm4,%xmm1 4093 pandn %xmm2,%xmm0 4094 movdqa %xmm4,%xmm2 4095 pandn %xmm3,%xmm1 4096 movdqa %xmm4,%xmm3 4097 pand 384(%rsp),%xmm2 4098 pand 384+16(%rsp),%xmm3 4099 por %xmm0,%xmm2 4100 por %xmm1,%xmm3 4101 movdqu %xmm2,0(%rdi) 4102 movdqu %xmm3,16(%rdi) 4103 4104 movdqa %xmm5,%xmm0 4105 movdqa %xmm5,%xmm1 4106 pandn 320(%rsp),%xmm0 4107 movdqa %xmm5,%xmm2 4108 pandn 320+16(%rsp),%xmm1 4109 movdqa %xmm5,%xmm3 4110 pand 512(%rsp),%xmm2 4111 pand 512+16(%rsp),%xmm3 4112 por %xmm0,%xmm2 4113 por %xmm1,%xmm3 4114 4115 movdqa %xmm4,%xmm0 4116 movdqa %xmm4,%xmm1 4117 pandn %xmm2,%xmm0 4118 movdqa %xmm4,%xmm2 4119 pandn %xmm3,%xmm1 4120 movdqa %xmm4,%xmm3 4121 pand 416(%rsp),%xmm2 4122 pand 416+16(%rsp),%xmm3 4123 por %xmm0,%xmm2 4124 por %xmm1,%xmm3 4125 movdqu %xmm2,32(%rdi) 4126 movdqu %xmm3,48(%rdi) 4127 4128L$add_donex: 4129 leaq 576+56(%rsp),%rsi 4130 4131 movq -48(%rsi),%r15 4132 4133 movq -40(%rsi),%r14 4134 4135 movq -32(%rsi),%r13 4136 4137 movq -24(%rsi),%r12 4138 4139 movq -16(%rsi),%rbx 4140 4141 movq -8(%rsi),%rbp 4142 4143 leaq (%rsi),%rsp 4144 4145L$point_addx_epilogue: 4146 ret 4147 4148 4149 4150.p2align 5 4151ecp_nistz256_point_add_affinex: 4152 4153L$point_add_affinex: 4154 pushq %rbp 4155 4156 pushq %rbx 4157 4158 pushq %r12 4159 4160 pushq %r13 4161 4162 pushq %r14 4163 4164 pushq %r15 4165 4166 subq $480+8,%rsp 4167 4168L$add_affinex_body: 4169 4170 movdqu 0(%rsi),%xmm0 4171 movq %rdx,%rbx 4172 movdqu 16(%rsi),%xmm1 4173 movdqu 32(%rsi),%xmm2 4174 movdqu 48(%rsi),%xmm3 4175 movdqu 64(%rsi),%xmm4 4176 movdqu 80(%rsi),%xmm5 4177 movq 64+0(%rsi),%rdx 4178 movq 64+8(%rsi),%r14 4179 movq 64+16(%rsi),%r15 4180 movq 64+24(%rsi),%r8 4181 movdqa %xmm0,320(%rsp) 4182 movdqa %xmm1,320+16(%rsp) 4183 movdqa %xmm2,352(%rsp) 4184 movdqa %xmm3,352+16(%rsp) 4185 movdqa %xmm4,384(%rsp) 4186 movdqa %xmm5,384+16(%rsp) 4187 por %xmm4,%xmm5 4188 4189 movdqu 0(%rbx),%xmm0 4190 pshufd $0xb1,%xmm5,%xmm3 4191 movdqu 16(%rbx),%xmm1 4192 movdqu 32(%rbx),%xmm2 4193 por %xmm3,%xmm5 4194 movdqu 48(%rbx),%xmm3 4195 movdqa %xmm0,416(%rsp) 4196 pshufd $0x1e,%xmm5,%xmm4 4197 movdqa %xmm1,416+16(%rsp) 4198 por %xmm0,%xmm1 4199.byte 102,72,15,110,199 4200 movdqa %xmm2,448(%rsp) 4201 movdqa %xmm3,448+16(%rsp) 4202 por %xmm2,%xmm3 4203 por %xmm4,%xmm5 4204 pxor %xmm4,%xmm4 4205 por %xmm1,%xmm3 4206 4207 leaq 64-128(%rsi),%rsi 4208 leaq 32(%rsp),%rdi 4209 call __ecp_nistz256_sqr_montx 4210 4211 pcmpeqd %xmm4,%xmm5 4212 pshufd $0xb1,%xmm3,%xmm4 4213 movq 0(%rbx),%rdx 4214 4215 movq %r12,%r9 4216 por %xmm3,%xmm4 4217 pshufd $0,%xmm5,%xmm5 4218 pshufd $0x1e,%xmm4,%xmm3 4219 movq %r13,%r10 4220 por %xmm3,%xmm4 4221 pxor %xmm3,%xmm3 4222 movq %r14,%r11 4223 pcmpeqd %xmm3,%xmm4 4224 pshufd $0,%xmm4,%xmm4 4225 4226 leaq 32-128(%rsp),%rsi 4227 movq %r15,%r12 4228 leaq 0(%rsp),%rdi 4229 call __ecp_nistz256_mul_montx 4230 4231 leaq 320(%rsp),%rbx 4232 leaq 64(%rsp),%rdi 4233 call __ecp_nistz256_sub_fromx 4234 4235 movq 384(%rsp),%rdx 4236 leaq 384(%rsp),%rbx 4237 movq 0+32(%rsp),%r9 4238 movq 8+32(%rsp),%r10 4239 leaq -128+32(%rsp),%rsi 4240 movq 16+32(%rsp),%r11 4241 movq 24+32(%rsp),%r12 4242 leaq 32(%rsp),%rdi 4243 call __ecp_nistz256_mul_montx 4244 4245 movq 384(%rsp),%rdx 4246 leaq 384(%rsp),%rbx 4247 movq 0+64(%rsp),%r9 4248 movq 8+64(%rsp),%r10 4249 leaq -128+64(%rsp),%rsi 4250 movq 16+64(%rsp),%r11 4251 movq 24+64(%rsp),%r12 4252 leaq 288(%rsp),%rdi 4253 call __ecp_nistz256_mul_montx 4254 4255 movq 448(%rsp),%rdx 4256 leaq 448(%rsp),%rbx 4257 movq 0+32(%rsp),%r9 4258 movq 8+32(%rsp),%r10 4259 leaq -128+32(%rsp),%rsi 4260 movq 16+32(%rsp),%r11 4261 movq 24+32(%rsp),%r12 4262 leaq 32(%rsp),%rdi 4263 call __ecp_nistz256_mul_montx 4264 4265 leaq 352(%rsp),%rbx 4266 leaq 96(%rsp),%rdi 4267 call __ecp_nistz256_sub_fromx 4268 4269 movq 0+64(%rsp),%rdx 4270 movq 8+64(%rsp),%r14 4271 leaq -128+64(%rsp),%rsi 4272 movq 16+64(%rsp),%r15 4273 movq 24+64(%rsp),%r8 4274 leaq 128(%rsp),%rdi 4275 call __ecp_nistz256_sqr_montx 4276 4277 movq 0+96(%rsp),%rdx 4278 movq 8+96(%rsp),%r14 4279 leaq -128+96(%rsp),%rsi 4280 movq 16+96(%rsp),%r15 4281 movq 24+96(%rsp),%r8 4282 leaq 192(%rsp),%rdi 4283 call __ecp_nistz256_sqr_montx 4284 4285 movq 128(%rsp),%rdx 4286 leaq 128(%rsp),%rbx 4287 movq 0+64(%rsp),%r9 4288 movq 8+64(%rsp),%r10 4289 leaq -128+64(%rsp),%rsi 4290 movq 16+64(%rsp),%r11 4291 movq 24+64(%rsp),%r12 4292 leaq 160(%rsp),%rdi 4293 call __ecp_nistz256_mul_montx 4294 4295 movq 320(%rsp),%rdx 4296 leaq 320(%rsp),%rbx 4297 movq 0+128(%rsp),%r9 4298 movq 8+128(%rsp),%r10 4299 leaq -128+128(%rsp),%rsi 4300 movq 16+128(%rsp),%r11 4301 movq 24+128(%rsp),%r12 4302 leaq 0(%rsp),%rdi 4303 call __ecp_nistz256_mul_montx 4304 4305 4306 4307 4308 xorq %r11,%r11 4309 addq %r12,%r12 4310 leaq 192(%rsp),%rsi 4311 adcq %r13,%r13 4312 movq %r12,%rax 4313 adcq %r8,%r8 4314 adcq %r9,%r9 4315 movq %r13,%rbp 4316 adcq $0,%r11 4317 4318 subq $-1,%r12 4319 movq %r8,%rcx 4320 sbbq %r14,%r13 4321 sbbq $0,%r8 4322 movq %r9,%r10 4323 sbbq %r15,%r9 4324 sbbq $0,%r11 4325 4326 cmovcq %rax,%r12 4327 movq 0(%rsi),%rax 4328 cmovcq %rbp,%r13 4329 movq 8(%rsi),%rbp 4330 cmovcq %rcx,%r8 4331 movq 16(%rsi),%rcx 4332 cmovcq %r10,%r9 4333 movq 24(%rsi),%r10 4334 4335 call __ecp_nistz256_subx 4336 4337 leaq 160(%rsp),%rbx 4338 leaq 224(%rsp),%rdi 4339 call __ecp_nistz256_sub_fromx 4340 4341 movq 0+0(%rsp),%rax 4342 movq 0+8(%rsp),%rbp 4343 movq 0+16(%rsp),%rcx 4344 movq 0+24(%rsp),%r10 4345 leaq 64(%rsp),%rdi 4346 4347 call __ecp_nistz256_subx 4348 4349 movq %r12,0(%rdi) 4350 movq %r13,8(%rdi) 4351 movq %r8,16(%rdi) 4352 movq %r9,24(%rdi) 4353 movq 352(%rsp),%rdx 4354 leaq 352(%rsp),%rbx 4355 movq 0+160(%rsp),%r9 4356 movq 8+160(%rsp),%r10 4357 leaq -128+160(%rsp),%rsi 4358 movq 16+160(%rsp),%r11 4359 movq 24+160(%rsp),%r12 4360 leaq 32(%rsp),%rdi 4361 call __ecp_nistz256_mul_montx 4362 4363 movq 96(%rsp),%rdx 4364 leaq 96(%rsp),%rbx 4365 movq 0+64(%rsp),%r9 4366 movq 8+64(%rsp),%r10 4367 leaq -128+64(%rsp),%rsi 4368 movq 16+64(%rsp),%r11 4369 movq 24+64(%rsp),%r12 4370 leaq 64(%rsp),%rdi 4371 call __ecp_nistz256_mul_montx 4372 4373 leaq 32(%rsp),%rbx 4374 leaq 256(%rsp),%rdi 4375 call __ecp_nistz256_sub_fromx 4376 4377.byte 102,72,15,126,199 4378 4379 movdqa %xmm5,%xmm0 4380 movdqa %xmm5,%xmm1 4381 pandn 288(%rsp),%xmm0 4382 movdqa %xmm5,%xmm2 4383 pandn 288+16(%rsp),%xmm1 4384 movdqa %xmm5,%xmm3 4385 pand L$ONE_mont(%rip),%xmm2 4386 pand L$ONE_mont+16(%rip),%xmm3 4387 por %xmm0,%xmm2 4388 por %xmm1,%xmm3 4389 4390 movdqa %xmm4,%xmm0 4391 movdqa %xmm4,%xmm1 4392 pandn %xmm2,%xmm0 4393 movdqa %xmm4,%xmm2 4394 pandn %xmm3,%xmm1 4395 movdqa %xmm4,%xmm3 4396 pand 384(%rsp),%xmm2 4397 pand 384+16(%rsp),%xmm3 4398 por %xmm0,%xmm2 4399 por %xmm1,%xmm3 4400 movdqu %xmm2,64(%rdi) 4401 movdqu %xmm3,80(%rdi) 4402 4403 movdqa %xmm5,%xmm0 4404 movdqa %xmm5,%xmm1 4405 pandn 224(%rsp),%xmm0 4406 movdqa %xmm5,%xmm2 4407 pandn 224+16(%rsp),%xmm1 4408 movdqa %xmm5,%xmm3 4409 pand 416(%rsp),%xmm2 4410 pand 416+16(%rsp),%xmm3 4411 por %xmm0,%xmm2 4412 por %xmm1,%xmm3 4413 4414 movdqa %xmm4,%xmm0 4415 movdqa %xmm4,%xmm1 4416 pandn %xmm2,%xmm0 4417 movdqa %xmm4,%xmm2 4418 pandn %xmm3,%xmm1 4419 movdqa %xmm4,%xmm3 4420 pand 320(%rsp),%xmm2 4421 pand 320+16(%rsp),%xmm3 4422 por %xmm0,%xmm2 4423 por %xmm1,%xmm3 4424 movdqu %xmm2,0(%rdi) 4425 movdqu %xmm3,16(%rdi) 4426 4427 movdqa %xmm5,%xmm0 4428 movdqa %xmm5,%xmm1 4429 pandn 256(%rsp),%xmm0 4430 movdqa %xmm5,%xmm2 4431 pandn 256+16(%rsp),%xmm1 4432 movdqa %xmm5,%xmm3 4433 pand 448(%rsp),%xmm2 4434 pand 448+16(%rsp),%xmm3 4435 por %xmm0,%xmm2 4436 por %xmm1,%xmm3 4437 4438 movdqa %xmm4,%xmm0 4439 movdqa %xmm4,%xmm1 4440 pandn %xmm2,%xmm0 4441 movdqa %xmm4,%xmm2 4442 pandn %xmm3,%xmm1 4443 movdqa %xmm4,%xmm3 4444 pand 352(%rsp),%xmm2 4445 pand 352+16(%rsp),%xmm3 4446 por %xmm0,%xmm2 4447 por %xmm1,%xmm3 4448 movdqu %xmm2,32(%rdi) 4449 movdqu %xmm3,48(%rdi) 4450 4451 leaq 480+56(%rsp),%rsi 4452 4453 movq -48(%rsi),%r15 4454 4455 movq -40(%rsi),%r14 4456 4457 movq -32(%rsi),%r13 4458 4459 movq -24(%rsi),%r12 4460 4461 movq -16(%rsi),%rbx 4462 4463 movq -8(%rsi),%rbp 4464 4465 leaq (%rsi),%rsp 4466 4467L$add_affinex_epilogue: 4468 ret 4469 4470 4471#endif 4472