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