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