1#if defined(__x86_64__) 2.text 3 4 5 6.p2align 6 7L$poly: 8.quad 0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001 9 10L$One: 11.long 1,1,1,1,1,1,1,1 12L$Two: 13.long 2,2,2,2,2,2,2,2 14L$Three: 15.long 3,3,3,3,3,3,3,3 16L$ONE_mont: 17.quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe 18 19 20.p2align 6 21ecp_nistz256_mul_by_2: 22 pushq %r12 23 pushq %r13 24 25 movq 0(%rsi),%r8 26 movq 8(%rsi),%r9 27 addq %r8,%r8 28 movq 16(%rsi),%r10 29 adcq %r9,%r9 30 movq 24(%rsi),%r11 31 leaq L$poly(%rip),%rsi 32 movq %r8,%rax 33 adcq %r10,%r10 34 adcq %r11,%r11 35 movq %r9,%rdx 36 sbbq %r13,%r13 37 38 subq 0(%rsi),%r8 39 movq %r10,%rcx 40 sbbq 8(%rsi),%r9 41 sbbq 16(%rsi),%r10 42 movq %r11,%r12 43 sbbq 24(%rsi),%r11 44 testq %r13,%r13 45 46 cmovzq %rax,%r8 47 cmovzq %rdx,%r9 48 movq %r8,0(%rdi) 49 cmovzq %rcx,%r10 50 movq %r9,8(%rdi) 51 cmovzq %r12,%r11 52 movq %r10,16(%rdi) 53 movq %r11,24(%rdi) 54 55 popq %r13 56 popq %r12 57 .byte 0xf3,0xc3 58 59 60 61 62.globl _ecp_nistz256_neg 63.private_extern _ecp_nistz256_neg 64 65.p2align 5 66_ecp_nistz256_neg: 67 pushq %r12 68 pushq %r13 69 70 xorq %r8,%r8 71 xorq %r9,%r9 72 xorq %r10,%r10 73 xorq %r11,%r11 74 xorq %r13,%r13 75 76 subq 0(%rsi),%r8 77 sbbq 8(%rsi),%r9 78 sbbq 16(%rsi),%r10 79 movq %r8,%rax 80 sbbq 24(%rsi),%r11 81 leaq L$poly(%rip),%rsi 82 movq %r9,%rdx 83 sbbq $0,%r13 84 85 addq 0(%rsi),%r8 86 movq %r10,%rcx 87 adcq 8(%rsi),%r9 88 adcq 16(%rsi),%r10 89 movq %r11,%r12 90 adcq 24(%rsi),%r11 91 testq %r13,%r13 92 93 cmovzq %rax,%r8 94 cmovzq %rdx,%r9 95 movq %r8,0(%rdi) 96 cmovzq %rcx,%r10 97 movq %r9,8(%rdi) 98 cmovzq %r12,%r11 99 movq %r10,16(%rdi) 100 movq %r11,24(%rdi) 101 102 popq %r13 103 popq %r12 104 .byte 0xf3,0xc3 105 106 107 108 109 110 111 112.globl _ecp_nistz256_mul_mont 113.private_extern _ecp_nistz256_mul_mont 114 115.p2align 5 116_ecp_nistz256_mul_mont: 117L$mul_mont: 118 pushq %rbp 119 pushq %rbx 120 pushq %r12 121 pushq %r13 122 pushq %r14 123 pushq %r15 124 movq %rdx,%rbx 125 movq 0(%rdx),%rax 126 movq 0(%rsi),%r9 127 movq 8(%rsi),%r10 128 movq 16(%rsi),%r11 129 movq 24(%rsi),%r12 130 131 call __ecp_nistz256_mul_montq 132L$mul_mont_done: 133 popq %r15 134 popq %r14 135 popq %r13 136 popq %r12 137 popq %rbx 138 popq %rbp 139 .byte 0xf3,0xc3 140 141 142 143.p2align 5 144__ecp_nistz256_mul_montq: 145 146 147 movq %rax,%rbp 148 mulq %r9 149 movq L$poly+8(%rip),%r14 150 movq %rax,%r8 151 movq %rbp,%rax 152 movq %rdx,%r9 153 154 mulq %r10 155 movq L$poly+24(%rip),%r15 156 addq %rax,%r9 157 movq %rbp,%rax 158 adcq $0,%rdx 159 movq %rdx,%r10 160 161 mulq %r11 162 addq %rax,%r10 163 movq %rbp,%rax 164 adcq $0,%rdx 165 movq %rdx,%r11 166 167 mulq %r12 168 addq %rax,%r11 169 movq %r8,%rax 170 adcq $0,%rdx 171 xorq %r13,%r13 172 movq %rdx,%r12 173 174 175 176 177 178 179 180 181 182 183 movq %r8,%rbp 184 shlq $32,%r8 185 mulq %r15 186 shrq $32,%rbp 187 addq %r8,%r9 188 adcq %rbp,%r10 189 adcq %rax,%r11 190 movq 8(%rbx),%rax 191 adcq %rdx,%r12 192 adcq $0,%r13 193 xorq %r8,%r8 194 195 196 197 movq %rax,%rbp 198 mulq 0(%rsi) 199 addq %rax,%r9 200 movq %rbp,%rax 201 adcq $0,%rdx 202 movq %rdx,%rcx 203 204 mulq 8(%rsi) 205 addq %rcx,%r10 206 adcq $0,%rdx 207 addq %rax,%r10 208 movq %rbp,%rax 209 adcq $0,%rdx 210 movq %rdx,%rcx 211 212 mulq 16(%rsi) 213 addq %rcx,%r11 214 adcq $0,%rdx 215 addq %rax,%r11 216 movq %rbp,%rax 217 adcq $0,%rdx 218 movq %rdx,%rcx 219 220 mulq 24(%rsi) 221 addq %rcx,%r12 222 adcq $0,%rdx 223 addq %rax,%r12 224 movq %r9,%rax 225 adcq %rdx,%r13 226 adcq $0,%r8 227 228 229 230 movq %r9,%rbp 231 shlq $32,%r9 232 mulq %r15 233 shrq $32,%rbp 234 addq %r9,%r10 235 adcq %rbp,%r11 236 adcq %rax,%r12 237 movq 16(%rbx),%rax 238 adcq %rdx,%r13 239 adcq $0,%r8 240 xorq %r9,%r9 241 242 243 244 movq %rax,%rbp 245 mulq 0(%rsi) 246 addq %rax,%r10 247 movq %rbp,%rax 248 adcq $0,%rdx 249 movq %rdx,%rcx 250 251 mulq 8(%rsi) 252 addq %rcx,%r11 253 adcq $0,%rdx 254 addq %rax,%r11 255 movq %rbp,%rax 256 adcq $0,%rdx 257 movq %rdx,%rcx 258 259 mulq 16(%rsi) 260 addq %rcx,%r12 261 adcq $0,%rdx 262 addq %rax,%r12 263 movq %rbp,%rax 264 adcq $0,%rdx 265 movq %rdx,%rcx 266 267 mulq 24(%rsi) 268 addq %rcx,%r13 269 adcq $0,%rdx 270 addq %rax,%r13 271 movq %r10,%rax 272 adcq %rdx,%r8 273 adcq $0,%r9 274 275 276 277 movq %r10,%rbp 278 shlq $32,%r10 279 mulq %r15 280 shrq $32,%rbp 281 addq %r10,%r11 282 adcq %rbp,%r12 283 adcq %rax,%r13 284 movq 24(%rbx),%rax 285 adcq %rdx,%r8 286 adcq $0,%r9 287 xorq %r10,%r10 288 289 290 291 movq %rax,%rbp 292 mulq 0(%rsi) 293 addq %rax,%r11 294 movq %rbp,%rax 295 adcq $0,%rdx 296 movq %rdx,%rcx 297 298 mulq 8(%rsi) 299 addq %rcx,%r12 300 adcq $0,%rdx 301 addq %rax,%r12 302 movq %rbp,%rax 303 adcq $0,%rdx 304 movq %rdx,%rcx 305 306 mulq 16(%rsi) 307 addq %rcx,%r13 308 adcq $0,%rdx 309 addq %rax,%r13 310 movq %rbp,%rax 311 adcq $0,%rdx 312 movq %rdx,%rcx 313 314 mulq 24(%rsi) 315 addq %rcx,%r8 316 adcq $0,%rdx 317 addq %rax,%r8 318 movq %r11,%rax 319 adcq %rdx,%r9 320 adcq $0,%r10 321 322 323 324 movq %r11,%rbp 325 shlq $32,%r11 326 mulq %r15 327 shrq $32,%rbp 328 addq %r11,%r12 329 adcq %rbp,%r13 330 movq %r12,%rcx 331 adcq %rax,%r8 332 adcq %rdx,%r9 333 movq %r13,%rbp 334 adcq $0,%r10 335 336 337 338 subq $-1,%r12 339 movq %r8,%rbx 340 sbbq %r14,%r13 341 sbbq $0,%r8 342 movq %r9,%rdx 343 sbbq %r15,%r9 344 sbbq $0,%r10 345 346 cmovcq %rcx,%r12 347 cmovcq %rbp,%r13 348 movq %r12,0(%rdi) 349 cmovcq %rbx,%r8 350 movq %r13,8(%rdi) 351 cmovcq %rdx,%r9 352 movq %r8,16(%rdi) 353 movq %r9,24(%rdi) 354 355 .byte 0xf3,0xc3 356 357 358 359 360 361 362 363 364 365.globl _ecp_nistz256_sqr_mont 366.private_extern _ecp_nistz256_sqr_mont 367 368.p2align 5 369_ecp_nistz256_sqr_mont: 370 pushq %rbp 371 pushq %rbx 372 pushq %r12 373 pushq %r13 374 pushq %r14 375 pushq %r15 376 movq 0(%rsi),%rax 377 movq 8(%rsi),%r14 378 movq 16(%rsi),%r15 379 movq 24(%rsi),%r8 380 381 call __ecp_nistz256_sqr_montq 382L$sqr_mont_done: 383 popq %r15 384 popq %r14 385 popq %r13 386 popq %r12 387 popq %rbx 388 popq %rbp 389 .byte 0xf3,0xc3 390 391 392 393.p2align 5 394__ecp_nistz256_sqr_montq: 395 movq %rax,%r13 396 mulq %r14 397 movq %rax,%r9 398 movq %r15,%rax 399 movq %rdx,%r10 400 401 mulq %r13 402 addq %rax,%r10 403 movq %r8,%rax 404 adcq $0,%rdx 405 movq %rdx,%r11 406 407 mulq %r13 408 addq %rax,%r11 409 movq %r15,%rax 410 adcq $0,%rdx 411 movq %rdx,%r12 412 413 414 mulq %r14 415 addq %rax,%r11 416 movq %r8,%rax 417 adcq $0,%rdx 418 movq %rdx,%rbp 419 420 mulq %r14 421 addq %rax,%r12 422 movq %r8,%rax 423 adcq $0,%rdx 424 addq %rbp,%r12 425 movq %rdx,%r13 426 adcq $0,%r13 427 428 429 mulq %r15 430 xorq %r15,%r15 431 addq %rax,%r13 432 movq 0(%rsi),%rax 433 movq %rdx,%r14 434 adcq $0,%r14 435 436 addq %r9,%r9 437 adcq %r10,%r10 438 adcq %r11,%r11 439 adcq %r12,%r12 440 adcq %r13,%r13 441 adcq %r14,%r14 442 adcq $0,%r15 443 444 mulq %rax 445 movq %rax,%r8 446 movq 8(%rsi),%rax 447 movq %rdx,%rcx 448 449 mulq %rax 450 addq %rcx,%r9 451 adcq %rax,%r10 452 movq 16(%rsi),%rax 453 adcq $0,%rdx 454 movq %rdx,%rcx 455 456 mulq %rax 457 addq %rcx,%r11 458 adcq %rax,%r12 459 movq 24(%rsi),%rax 460 adcq $0,%rdx 461 movq %rdx,%rcx 462 463 mulq %rax 464 addq %rcx,%r13 465 adcq %rax,%r14 466 movq %r8,%rax 467 adcq %rdx,%r15 468 469 movq L$poly+8(%rip),%rsi 470 movq L$poly+24(%rip),%rbp 471 472 473 474 475 movq %r8,%rcx 476 shlq $32,%r8 477 mulq %rbp 478 shrq $32,%rcx 479 addq %r8,%r9 480 adcq %rcx,%r10 481 adcq %rax,%r11 482 movq %r9,%rax 483 adcq $0,%rdx 484 485 486 487 movq %r9,%rcx 488 shlq $32,%r9 489 movq %rdx,%r8 490 mulq %rbp 491 shrq $32,%rcx 492 addq %r9,%r10 493 adcq %rcx,%r11 494 adcq %rax,%r8 495 movq %r10,%rax 496 adcq $0,%rdx 497 498 499 500 movq %r10,%rcx 501 shlq $32,%r10 502 movq %rdx,%r9 503 mulq %rbp 504 shrq $32,%rcx 505 addq %r10,%r11 506 adcq %rcx,%r8 507 adcq %rax,%r9 508 movq %r11,%rax 509 adcq $0,%rdx 510 511 512 513 movq %r11,%rcx 514 shlq $32,%r11 515 movq %rdx,%r10 516 mulq %rbp 517 shrq $32,%rcx 518 addq %r11,%r8 519 adcq %rcx,%r9 520 adcq %rax,%r10 521 adcq $0,%rdx 522 xorq %r11,%r11 523 524 525 526 addq %r8,%r12 527 adcq %r9,%r13 528 movq %r12,%r8 529 adcq %r10,%r14 530 adcq %rdx,%r15 531 movq %r13,%r9 532 adcq $0,%r11 533 534 subq $-1,%r12 535 movq %r14,%r10 536 sbbq %rsi,%r13 537 sbbq $0,%r14 538 movq %r15,%rcx 539 sbbq %rbp,%r15 540 sbbq $0,%r11 541 542 cmovcq %r8,%r12 543 cmovcq %r9,%r13 544 movq %r12,0(%rdi) 545 cmovcq %r10,%r14 546 movq %r13,8(%rdi) 547 cmovcq %rcx,%r15 548 movq %r14,16(%rdi) 549 movq %r15,24(%rdi) 550 551 .byte 0xf3,0xc3 552 553 554 555 556 557 558 559.globl _ecp_nistz256_from_mont 560.private_extern _ecp_nistz256_from_mont 561 562.p2align 5 563_ecp_nistz256_from_mont: 564 pushq %r12 565 pushq %r13 566 567 movq 0(%rsi),%rax 568 movq L$poly+24(%rip),%r13 569 movq 8(%rsi),%r9 570 movq 16(%rsi),%r10 571 movq 24(%rsi),%r11 572 movq %rax,%r8 573 movq L$poly+8(%rip),%r12 574 575 576 577 movq %rax,%rcx 578 shlq $32,%r8 579 mulq %r13 580 shrq $32,%rcx 581 addq %r8,%r9 582 adcq %rcx,%r10 583 adcq %rax,%r11 584 movq %r9,%rax 585 adcq $0,%rdx 586 587 588 589 movq %r9,%rcx 590 shlq $32,%r9 591 movq %rdx,%r8 592 mulq %r13 593 shrq $32,%rcx 594 addq %r9,%r10 595 adcq %rcx,%r11 596 adcq %rax,%r8 597 movq %r10,%rax 598 adcq $0,%rdx 599 600 601 602 movq %r10,%rcx 603 shlq $32,%r10 604 movq %rdx,%r9 605 mulq %r13 606 shrq $32,%rcx 607 addq %r10,%r11 608 adcq %rcx,%r8 609 adcq %rax,%r9 610 movq %r11,%rax 611 adcq $0,%rdx 612 613 614 615 movq %r11,%rcx 616 shlq $32,%r11 617 movq %rdx,%r10 618 mulq %r13 619 shrq $32,%rcx 620 addq %r11,%r8 621 adcq %rcx,%r9 622 movq %r8,%rcx 623 adcq %rax,%r10 624 movq %r9,%rsi 625 adcq $0,%rdx 626 627 subq $-1,%r8 628 movq %r10,%rax 629 sbbq %r12,%r9 630 sbbq $0,%r10 631 movq %rdx,%r11 632 sbbq %r13,%rdx 633 sbbq %r13,%r13 634 635 cmovnzq %rcx,%r8 636 cmovnzq %rsi,%r9 637 movq %r8,0(%rdi) 638 cmovnzq %rax,%r10 639 movq %r9,8(%rdi) 640 cmovzq %rdx,%r11 641 movq %r10,16(%rdi) 642 movq %r11,24(%rdi) 643 644 popq %r13 645 popq %r12 646 .byte 0xf3,0xc3 647 648 649 650.globl _ecp_nistz256_select_w5 651.private_extern _ecp_nistz256_select_w5 652 653.p2align 5 654_ecp_nistz256_select_w5: 655 movdqa L$One(%rip),%xmm0 656 movd %edx,%xmm1 657 658 pxor %xmm2,%xmm2 659 pxor %xmm3,%xmm3 660 pxor %xmm4,%xmm4 661 pxor %xmm5,%xmm5 662 pxor %xmm6,%xmm6 663 pxor %xmm7,%xmm7 664 665 movdqa %xmm0,%xmm8 666 pshufd $0,%xmm1,%xmm1 667 668 movq $16,%rax 669L$select_loop_sse_w5: 670 671 movdqa %xmm8,%xmm15 672 paddd %xmm0,%xmm8 673 pcmpeqd %xmm1,%xmm15 674 675 movdqa 0(%rsi),%xmm9 676 movdqa 16(%rsi),%xmm10 677 movdqa 32(%rsi),%xmm11 678 movdqa 48(%rsi),%xmm12 679 movdqa 64(%rsi),%xmm13 680 movdqa 80(%rsi),%xmm14 681 leaq 96(%rsi),%rsi 682 683 pand %xmm15,%xmm9 684 pand %xmm15,%xmm10 685 por %xmm9,%xmm2 686 pand %xmm15,%xmm11 687 por %xmm10,%xmm3 688 pand %xmm15,%xmm12 689 por %xmm11,%xmm4 690 pand %xmm15,%xmm13 691 por %xmm12,%xmm5 692 pand %xmm15,%xmm14 693 por %xmm13,%xmm6 694 por %xmm14,%xmm7 695 696 decq %rax 697 jnz L$select_loop_sse_w5 698 699 movdqu %xmm2,0(%rdi) 700 movdqu %xmm3,16(%rdi) 701 movdqu %xmm4,32(%rdi) 702 movdqu %xmm5,48(%rdi) 703 movdqu %xmm6,64(%rdi) 704 movdqu %xmm7,80(%rdi) 705 .byte 0xf3,0xc3 706 707 708 709 710.globl _ecp_nistz256_select_w7 711.private_extern _ecp_nistz256_select_w7 712 713.p2align 5 714_ecp_nistz256_select_w7: 715 movdqa L$One(%rip),%xmm8 716 movd %edx,%xmm1 717 718 pxor %xmm2,%xmm2 719 pxor %xmm3,%xmm3 720 pxor %xmm4,%xmm4 721 pxor %xmm5,%xmm5 722 723 movdqa %xmm8,%xmm0 724 pshufd $0,%xmm1,%xmm1 725 movq $64,%rax 726 727L$select_loop_sse_w7: 728 movdqa %xmm8,%xmm15 729 paddd %xmm0,%xmm8 730 movdqa 0(%rsi),%xmm9 731 movdqa 16(%rsi),%xmm10 732 pcmpeqd %xmm1,%xmm15 733 movdqa 32(%rsi),%xmm11 734 movdqa 48(%rsi),%xmm12 735 leaq 64(%rsi),%rsi 736 737 pand %xmm15,%xmm9 738 pand %xmm15,%xmm10 739 por %xmm9,%xmm2 740 pand %xmm15,%xmm11 741 por %xmm10,%xmm3 742 pand %xmm15,%xmm12 743 por %xmm11,%xmm4 744 prefetcht0 255(%rsi) 745 por %xmm12,%xmm5 746 747 decq %rax 748 jnz L$select_loop_sse_w7 749 750 movdqu %xmm2,0(%rdi) 751 movdqu %xmm3,16(%rdi) 752 movdqu %xmm4,32(%rdi) 753 movdqu %xmm5,48(%rdi) 754 .byte 0xf3,0xc3 755 756.globl _ecp_nistz256_avx2_select_w7 757.private_extern _ecp_nistz256_avx2_select_w7 758 759.p2align 5 760_ecp_nistz256_avx2_select_w7: 761.byte 0x0f,0x0b 762 .byte 0xf3,0xc3 763 764 765.p2align 5 766__ecp_nistz256_add_toq: 767 addq 0(%rbx),%r12 768 adcq 8(%rbx),%r13 769 movq %r12,%rax 770 adcq 16(%rbx),%r8 771 adcq 24(%rbx),%r9 772 movq %r13,%rbp 773 sbbq %r11,%r11 774 775 subq $-1,%r12 776 movq %r8,%rcx 777 sbbq %r14,%r13 778 sbbq $0,%r8 779 movq %r9,%r10 780 sbbq %r15,%r9 781 testq %r11,%r11 782 783 cmovzq %rax,%r12 784 cmovzq %rbp,%r13 785 movq %r12,0(%rdi) 786 cmovzq %rcx,%r8 787 movq %r13,8(%rdi) 788 cmovzq %r10,%r9 789 movq %r8,16(%rdi) 790 movq %r9,24(%rdi) 791 792 .byte 0xf3,0xc3 793 794 795 796.p2align 5 797__ecp_nistz256_sub_fromq: 798 subq 0(%rbx),%r12 799 sbbq 8(%rbx),%r13 800 movq %r12,%rax 801 sbbq 16(%rbx),%r8 802 sbbq 24(%rbx),%r9 803 movq %r13,%rbp 804 sbbq %r11,%r11 805 806 addq $-1,%r12 807 movq %r8,%rcx 808 adcq %r14,%r13 809 adcq $0,%r8 810 movq %r9,%r10 811 adcq %r15,%r9 812 testq %r11,%r11 813 814 cmovzq %rax,%r12 815 cmovzq %rbp,%r13 816 movq %r12,0(%rdi) 817 cmovzq %rcx,%r8 818 movq %r13,8(%rdi) 819 cmovzq %r10,%r9 820 movq %r8,16(%rdi) 821 movq %r9,24(%rdi) 822 823 .byte 0xf3,0xc3 824 825 826 827.p2align 5 828__ecp_nistz256_subq: 829 subq %r12,%rax 830 sbbq %r13,%rbp 831 movq %rax,%r12 832 sbbq %r8,%rcx 833 sbbq %r9,%r10 834 movq %rbp,%r13 835 sbbq %r11,%r11 836 837 addq $-1,%rax 838 movq %rcx,%r8 839 adcq %r14,%rbp 840 adcq $0,%rcx 841 movq %r10,%r9 842 adcq %r15,%r10 843 testq %r11,%r11 844 845 cmovnzq %rax,%r12 846 cmovnzq %rbp,%r13 847 cmovnzq %rcx,%r8 848 cmovnzq %r10,%r9 849 850 .byte 0xf3,0xc3 851 852 853 854.p2align 5 855__ecp_nistz256_mul_by_2q: 856 addq %r12,%r12 857 adcq %r13,%r13 858 movq %r12,%rax 859 adcq %r8,%r8 860 adcq %r9,%r9 861 movq %r13,%rbp 862 sbbq %r11,%r11 863 864 subq $-1,%r12 865 movq %r8,%rcx 866 sbbq %r14,%r13 867 sbbq $0,%r8 868 movq %r9,%r10 869 sbbq %r15,%r9 870 testq %r11,%r11 871 872 cmovzq %rax,%r12 873 cmovzq %rbp,%r13 874 movq %r12,0(%rdi) 875 cmovzq %rcx,%r8 876 movq %r13,8(%rdi) 877 cmovzq %r10,%r9 878 movq %r8,16(%rdi) 879 movq %r9,24(%rdi) 880 881 .byte 0xf3,0xc3 882 883.globl _ecp_nistz256_point_double 884.private_extern _ecp_nistz256_point_double 885 886.p2align 5 887_ecp_nistz256_point_double: 888 pushq %rbp 889 pushq %rbx 890 pushq %r12 891 pushq %r13 892 pushq %r14 893 pushq %r15 894 subq $160+8,%rsp 895 896 movdqu 0(%rsi),%xmm0 897 movq %rsi,%rbx 898 movdqu 16(%rsi),%xmm1 899 movq 32+0(%rsi),%r12 900 movq 32+8(%rsi),%r13 901 movq 32+16(%rsi),%r8 902 movq 32+24(%rsi),%r9 903 movq L$poly+8(%rip),%r14 904 movq L$poly+24(%rip),%r15 905 movdqa %xmm0,96(%rsp) 906 movdqa %xmm1,96+16(%rsp) 907 leaq 32(%rdi),%r10 908 leaq 64(%rdi),%r11 909.byte 102,72,15,110,199 910.byte 102,73,15,110,202 911.byte 102,73,15,110,211 912 913 leaq 0(%rsp),%rdi 914 call __ecp_nistz256_mul_by_2q 915 916 movq 64+0(%rsi),%rax 917 movq 64+8(%rsi),%r14 918 movq 64+16(%rsi),%r15 919 movq 64+24(%rsi),%r8 920 leaq 64-0(%rsi),%rsi 921 leaq 64(%rsp),%rdi 922 call __ecp_nistz256_sqr_montq 923 924 movq 0+0(%rsp),%rax 925 movq 8+0(%rsp),%r14 926 leaq 0+0(%rsp),%rsi 927 movq 16+0(%rsp),%r15 928 movq 24+0(%rsp),%r8 929 leaq 0(%rsp),%rdi 930 call __ecp_nistz256_sqr_montq 931 932 movq 32(%rbx),%rax 933 movq 64+0(%rbx),%r9 934 movq 64+8(%rbx),%r10 935 movq 64+16(%rbx),%r11 936 movq 64+24(%rbx),%r12 937 leaq 64-0(%rbx),%rsi 938 leaq 32(%rbx),%rbx 939.byte 102,72,15,126,215 940 call __ecp_nistz256_mul_montq 941 call __ecp_nistz256_mul_by_2q 942 943 movq 96+0(%rsp),%r12 944 movq 96+8(%rsp),%r13 945 leaq 64(%rsp),%rbx 946 movq 96+16(%rsp),%r8 947 movq 96+24(%rsp),%r9 948 leaq 32(%rsp),%rdi 949 call __ecp_nistz256_add_toq 950 951 movq 96+0(%rsp),%r12 952 movq 96+8(%rsp),%r13 953 leaq 64(%rsp),%rbx 954 movq 96+16(%rsp),%r8 955 movq 96+24(%rsp),%r9 956 leaq 64(%rsp),%rdi 957 call __ecp_nistz256_sub_fromq 958 959 movq 0+0(%rsp),%rax 960 movq 8+0(%rsp),%r14 961 leaq 0+0(%rsp),%rsi 962 movq 16+0(%rsp),%r15 963 movq 24+0(%rsp),%r8 964.byte 102,72,15,126,207 965 call __ecp_nistz256_sqr_montq 966 xorq %r9,%r9 967 movq %r12,%rax 968 addq $-1,%r12 969 movq %r13,%r10 970 adcq %rsi,%r13 971 movq %r14,%rcx 972 adcq $0,%r14 973 movq %r15,%r8 974 adcq %rbp,%r15 975 adcq $0,%r9 976 xorq %rsi,%rsi 977 testq $1,%rax 978 979 cmovzq %rax,%r12 980 cmovzq %r10,%r13 981 cmovzq %rcx,%r14 982 cmovzq %r8,%r15 983 cmovzq %rsi,%r9 984 985 movq %r13,%rax 986 shrq $1,%r12 987 shlq $63,%rax 988 movq %r14,%r10 989 shrq $1,%r13 990 orq %rax,%r12 991 shlq $63,%r10 992 movq %r15,%rcx 993 shrq $1,%r14 994 orq %r10,%r13 995 shlq $63,%rcx 996 movq %r12,0(%rdi) 997 shrq $1,%r15 998 movq %r13,8(%rdi) 999 shlq $63,%r9 1000 orq %rcx,%r14 1001 orq %r9,%r15 1002 movq %r14,16(%rdi) 1003 movq %r15,24(%rdi) 1004 movq 64(%rsp),%rax 1005 leaq 64(%rsp),%rbx 1006 movq 0+32(%rsp),%r9 1007 movq 8+32(%rsp),%r10 1008 leaq 0+32(%rsp),%rsi 1009 movq 16+32(%rsp),%r11 1010 movq 24+32(%rsp),%r12 1011 leaq 32(%rsp),%rdi 1012 call __ecp_nistz256_mul_montq 1013 1014 leaq 128(%rsp),%rdi 1015 call __ecp_nistz256_mul_by_2q 1016 1017 leaq 32(%rsp),%rbx 1018 leaq 32(%rsp),%rdi 1019 call __ecp_nistz256_add_toq 1020 1021 movq 96(%rsp),%rax 1022 leaq 96(%rsp),%rbx 1023 movq 0+0(%rsp),%r9 1024 movq 8+0(%rsp),%r10 1025 leaq 0+0(%rsp),%rsi 1026 movq 16+0(%rsp),%r11 1027 movq 24+0(%rsp),%r12 1028 leaq 0(%rsp),%rdi 1029 call __ecp_nistz256_mul_montq 1030 1031 leaq 128(%rsp),%rdi 1032 call __ecp_nistz256_mul_by_2q 1033 1034 movq 0+32(%rsp),%rax 1035 movq 8+32(%rsp),%r14 1036 leaq 0+32(%rsp),%rsi 1037 movq 16+32(%rsp),%r15 1038 movq 24+32(%rsp),%r8 1039.byte 102,72,15,126,199 1040 call __ecp_nistz256_sqr_montq 1041 1042 leaq 128(%rsp),%rbx 1043 movq %r14,%r8 1044 movq %r15,%r9 1045 movq %rsi,%r14 1046 movq %rbp,%r15 1047 call __ecp_nistz256_sub_fromq 1048 1049 movq 0+0(%rsp),%rax 1050 movq 0+8(%rsp),%rbp 1051 movq 0+16(%rsp),%rcx 1052 movq 0+24(%rsp),%r10 1053 leaq 0(%rsp),%rdi 1054 call __ecp_nistz256_subq 1055 1056 movq 32(%rsp),%rax 1057 leaq 32(%rsp),%rbx 1058 movq %r12,%r14 1059 xorl %ecx,%ecx 1060 movq %r12,0+0(%rsp) 1061 movq %r13,%r10 1062 movq %r13,0+8(%rsp) 1063 cmovzq %r8,%r11 1064 movq %r8,0+16(%rsp) 1065 leaq 0-0(%rsp),%rsi 1066 cmovzq %r9,%r12 1067 movq %r9,0+24(%rsp) 1068 movq %r14,%r9 1069 leaq 0(%rsp),%rdi 1070 call __ecp_nistz256_mul_montq 1071 1072.byte 102,72,15,126,203 1073.byte 102,72,15,126,207 1074 call __ecp_nistz256_sub_fromq 1075 1076 addq $160+8,%rsp 1077 popq %r15 1078 popq %r14 1079 popq %r13 1080 popq %r12 1081 popq %rbx 1082 popq %rbp 1083 .byte 0xf3,0xc3 1084 1085.globl _ecp_nistz256_point_add 1086.private_extern _ecp_nistz256_point_add 1087 1088.p2align 5 1089_ecp_nistz256_point_add: 1090 pushq %rbp 1091 pushq %rbx 1092 pushq %r12 1093 pushq %r13 1094 pushq %r14 1095 pushq %r15 1096 subq $576+8,%rsp 1097 1098 movdqu 0(%rsi),%xmm0 1099 movdqu 16(%rsi),%xmm1 1100 movdqu 32(%rsi),%xmm2 1101 movdqu 48(%rsi),%xmm3 1102 movdqu 64(%rsi),%xmm4 1103 movdqu 80(%rsi),%xmm5 1104 movq %rsi,%rbx 1105 movq %rdx,%rsi 1106 movdqa %xmm0,384(%rsp) 1107 movdqa %xmm1,384+16(%rsp) 1108 por %xmm0,%xmm1 1109 movdqa %xmm2,416(%rsp) 1110 movdqa %xmm3,416+16(%rsp) 1111 por %xmm2,%xmm3 1112 movdqa %xmm4,448(%rsp) 1113 movdqa %xmm5,448+16(%rsp) 1114 por %xmm1,%xmm3 1115 1116 movdqu 0(%rsi),%xmm0 1117 pshufd $177,%xmm3,%xmm5 1118 movdqu 16(%rsi),%xmm1 1119 movdqu 32(%rsi),%xmm2 1120 por %xmm3,%xmm5 1121 movdqu 48(%rsi),%xmm3 1122 movq 64+0(%rsi),%rax 1123 movq 64+8(%rsi),%r14 1124 movq 64+16(%rsi),%r15 1125 movq 64+24(%rsi),%r8 1126 movdqa %xmm0,480(%rsp) 1127 pshufd $30,%xmm5,%xmm4 1128 movdqa %xmm1,480+16(%rsp) 1129 por %xmm0,%xmm1 1130.byte 102,72,15,110,199 1131 movdqa %xmm2,512(%rsp) 1132 movdqa %xmm3,512+16(%rsp) 1133 por %xmm2,%xmm3 1134 por %xmm4,%xmm5 1135 pxor %xmm4,%xmm4 1136 por %xmm1,%xmm3 1137 1138 leaq 64-0(%rsi),%rsi 1139 movq %rax,544+0(%rsp) 1140 movq %r14,544+8(%rsp) 1141 movq %r15,544+16(%rsp) 1142 movq %r8,544+24(%rsp) 1143 leaq 96(%rsp),%rdi 1144 call __ecp_nistz256_sqr_montq 1145 1146 pcmpeqd %xmm4,%xmm5 1147 pshufd $177,%xmm3,%xmm4 1148 por %xmm3,%xmm4 1149 pshufd $0,%xmm5,%xmm5 1150 pshufd $30,%xmm4,%xmm3 1151 por %xmm3,%xmm4 1152 pxor %xmm3,%xmm3 1153 pcmpeqd %xmm3,%xmm4 1154 pshufd $0,%xmm4,%xmm4 1155 movq 64+0(%rbx),%rax 1156 movq 64+8(%rbx),%r14 1157 movq 64+16(%rbx),%r15 1158 movq 64+24(%rbx),%r8 1159 1160 leaq 64-0(%rbx),%rsi 1161 leaq 32(%rsp),%rdi 1162 call __ecp_nistz256_sqr_montq 1163 1164 movq 544(%rsp),%rax 1165 leaq 544(%rsp),%rbx 1166 movq 0+96(%rsp),%r9 1167 movq 8+96(%rsp),%r10 1168 leaq 0+96(%rsp),%rsi 1169 movq 16+96(%rsp),%r11 1170 movq 24+96(%rsp),%r12 1171 leaq 224(%rsp),%rdi 1172 call __ecp_nistz256_mul_montq 1173 1174 movq 448(%rsp),%rax 1175 leaq 448(%rsp),%rbx 1176 movq 0+32(%rsp),%r9 1177 movq 8+32(%rsp),%r10 1178 leaq 0+32(%rsp),%rsi 1179 movq 16+32(%rsp),%r11 1180 movq 24+32(%rsp),%r12 1181 leaq 256(%rsp),%rdi 1182 call __ecp_nistz256_mul_montq 1183 1184 movq 416(%rsp),%rax 1185 leaq 416(%rsp),%rbx 1186 movq 0+224(%rsp),%r9 1187 movq 8+224(%rsp),%r10 1188 leaq 0+224(%rsp),%rsi 1189 movq 16+224(%rsp),%r11 1190 movq 24+224(%rsp),%r12 1191 leaq 224(%rsp),%rdi 1192 call __ecp_nistz256_mul_montq 1193 1194 movq 512(%rsp),%rax 1195 leaq 512(%rsp),%rbx 1196 movq 0+256(%rsp),%r9 1197 movq 8+256(%rsp),%r10 1198 leaq 0+256(%rsp),%rsi 1199 movq 16+256(%rsp),%r11 1200 movq 24+256(%rsp),%r12 1201 leaq 256(%rsp),%rdi 1202 call __ecp_nistz256_mul_montq 1203 1204 leaq 224(%rsp),%rbx 1205 leaq 64(%rsp),%rdi 1206 call __ecp_nistz256_sub_fromq 1207 1208 orq %r13,%r12 1209 movdqa %xmm4,%xmm2 1210 orq %r8,%r12 1211 orq %r9,%r12 1212 por %xmm5,%xmm2 1213.byte 102,73,15,110,220 1214 1215 movq 384(%rsp),%rax 1216 leaq 384(%rsp),%rbx 1217 movq 0+96(%rsp),%r9 1218 movq 8+96(%rsp),%r10 1219 leaq 0+96(%rsp),%rsi 1220 movq 16+96(%rsp),%r11 1221 movq 24+96(%rsp),%r12 1222 leaq 160(%rsp),%rdi 1223 call __ecp_nistz256_mul_montq 1224 1225 movq 480(%rsp),%rax 1226 leaq 480(%rsp),%rbx 1227 movq 0+32(%rsp),%r9 1228 movq 8+32(%rsp),%r10 1229 leaq 0+32(%rsp),%rsi 1230 movq 16+32(%rsp),%r11 1231 movq 24+32(%rsp),%r12 1232 leaq 192(%rsp),%rdi 1233 call __ecp_nistz256_mul_montq 1234 1235 leaq 160(%rsp),%rbx 1236 leaq 0(%rsp),%rdi 1237 call __ecp_nistz256_sub_fromq 1238 1239 orq %r13,%r12 1240 orq %r8,%r12 1241 orq %r9,%r12 1242 1243.byte 0x3e 1244 jnz L$add_proceedq 1245.byte 102,73,15,126,208 1246.byte 102,73,15,126,217 1247 testq %r8,%r8 1248 jnz L$add_proceedq 1249 testq %r9,%r9 1250 jz L$add_proceedq 1251 1252.byte 102,72,15,126,199 1253 pxor %xmm0,%xmm0 1254 movdqu %xmm0,0(%rdi) 1255 movdqu %xmm0,16(%rdi) 1256 movdqu %xmm0,32(%rdi) 1257 movdqu %xmm0,48(%rdi) 1258 movdqu %xmm0,64(%rdi) 1259 movdqu %xmm0,80(%rdi) 1260 jmp L$add_doneq 1261 1262.p2align 5 1263L$add_proceedq: 1264 movq 0+64(%rsp),%rax 1265 movq 8+64(%rsp),%r14 1266 leaq 0+64(%rsp),%rsi 1267 movq 16+64(%rsp),%r15 1268 movq 24+64(%rsp),%r8 1269 leaq 96(%rsp),%rdi 1270 call __ecp_nistz256_sqr_montq 1271 1272 movq 448(%rsp),%rax 1273 leaq 448(%rsp),%rbx 1274 movq 0+0(%rsp),%r9 1275 movq 8+0(%rsp),%r10 1276 leaq 0+0(%rsp),%rsi 1277 movq 16+0(%rsp),%r11 1278 movq 24+0(%rsp),%r12 1279 leaq 352(%rsp),%rdi 1280 call __ecp_nistz256_mul_montq 1281 1282 movq 0+0(%rsp),%rax 1283 movq 8+0(%rsp),%r14 1284 leaq 0+0(%rsp),%rsi 1285 movq 16+0(%rsp),%r15 1286 movq 24+0(%rsp),%r8 1287 leaq 32(%rsp),%rdi 1288 call __ecp_nistz256_sqr_montq 1289 1290 movq 544(%rsp),%rax 1291 leaq 544(%rsp),%rbx 1292 movq 0+352(%rsp),%r9 1293 movq 8+352(%rsp),%r10 1294 leaq 0+352(%rsp),%rsi 1295 movq 16+352(%rsp),%r11 1296 movq 24+352(%rsp),%r12 1297 leaq 352(%rsp),%rdi 1298 call __ecp_nistz256_mul_montq 1299 1300 movq 0(%rsp),%rax 1301 leaq 0(%rsp),%rbx 1302 movq 0+32(%rsp),%r9 1303 movq 8+32(%rsp),%r10 1304 leaq 0+32(%rsp),%rsi 1305 movq 16+32(%rsp),%r11 1306 movq 24+32(%rsp),%r12 1307 leaq 128(%rsp),%rdi 1308 call __ecp_nistz256_mul_montq 1309 1310 movq 160(%rsp),%rax 1311 leaq 160(%rsp),%rbx 1312 movq 0+32(%rsp),%r9 1313 movq 8+32(%rsp),%r10 1314 leaq 0+32(%rsp),%rsi 1315 movq 16+32(%rsp),%r11 1316 movq 24+32(%rsp),%r12 1317 leaq 192(%rsp),%rdi 1318 call __ecp_nistz256_mul_montq 1319 1320 1321 1322 1323 addq %r12,%r12 1324 leaq 96(%rsp),%rsi 1325 adcq %r13,%r13 1326 movq %r12,%rax 1327 adcq %r8,%r8 1328 adcq %r9,%r9 1329 movq %r13,%rbp 1330 sbbq %r11,%r11 1331 1332 subq $-1,%r12 1333 movq %r8,%rcx 1334 sbbq %r14,%r13 1335 sbbq $0,%r8 1336 movq %r9,%r10 1337 sbbq %r15,%r9 1338 testq %r11,%r11 1339 1340 cmovzq %rax,%r12 1341 movq 0(%rsi),%rax 1342 cmovzq %rbp,%r13 1343 movq 8(%rsi),%rbp 1344 cmovzq %rcx,%r8 1345 movq 16(%rsi),%rcx 1346 cmovzq %r10,%r9 1347 movq 24(%rsi),%r10 1348 1349 call __ecp_nistz256_subq 1350 1351 leaq 128(%rsp),%rbx 1352 leaq 288(%rsp),%rdi 1353 call __ecp_nistz256_sub_fromq 1354 1355 movq 192+0(%rsp),%rax 1356 movq 192+8(%rsp),%rbp 1357 movq 192+16(%rsp),%rcx 1358 movq 192+24(%rsp),%r10 1359 leaq 320(%rsp),%rdi 1360 1361 call __ecp_nistz256_subq 1362 1363 movq %r12,0(%rdi) 1364 movq %r13,8(%rdi) 1365 movq %r8,16(%rdi) 1366 movq %r9,24(%rdi) 1367 movq 128(%rsp),%rax 1368 leaq 128(%rsp),%rbx 1369 movq 0+224(%rsp),%r9 1370 movq 8+224(%rsp),%r10 1371 leaq 0+224(%rsp),%rsi 1372 movq 16+224(%rsp),%r11 1373 movq 24+224(%rsp),%r12 1374 leaq 256(%rsp),%rdi 1375 call __ecp_nistz256_mul_montq 1376 1377 movq 320(%rsp),%rax 1378 leaq 320(%rsp),%rbx 1379 movq 0+64(%rsp),%r9 1380 movq 8+64(%rsp),%r10 1381 leaq 0+64(%rsp),%rsi 1382 movq 16+64(%rsp),%r11 1383 movq 24+64(%rsp),%r12 1384 leaq 320(%rsp),%rdi 1385 call __ecp_nistz256_mul_montq 1386 1387 leaq 256(%rsp),%rbx 1388 leaq 320(%rsp),%rdi 1389 call __ecp_nistz256_sub_fromq 1390 1391.byte 102,72,15,126,199 1392 1393 movdqa %xmm5,%xmm0 1394 movdqa %xmm5,%xmm1 1395 pandn 352(%rsp),%xmm0 1396 movdqa %xmm5,%xmm2 1397 pandn 352+16(%rsp),%xmm1 1398 movdqa %xmm5,%xmm3 1399 pand 544(%rsp),%xmm2 1400 pand 544+16(%rsp),%xmm3 1401 por %xmm0,%xmm2 1402 por %xmm1,%xmm3 1403 1404 movdqa %xmm4,%xmm0 1405 movdqa %xmm4,%xmm1 1406 pandn %xmm2,%xmm0 1407 movdqa %xmm4,%xmm2 1408 pandn %xmm3,%xmm1 1409 movdqa %xmm4,%xmm3 1410 pand 448(%rsp),%xmm2 1411 pand 448+16(%rsp),%xmm3 1412 por %xmm0,%xmm2 1413 por %xmm1,%xmm3 1414 movdqu %xmm2,64(%rdi) 1415 movdqu %xmm3,80(%rdi) 1416 1417 movdqa %xmm5,%xmm0 1418 movdqa %xmm5,%xmm1 1419 pandn 288(%rsp),%xmm0 1420 movdqa %xmm5,%xmm2 1421 pandn 288+16(%rsp),%xmm1 1422 movdqa %xmm5,%xmm3 1423 pand 480(%rsp),%xmm2 1424 pand 480+16(%rsp),%xmm3 1425 por %xmm0,%xmm2 1426 por %xmm1,%xmm3 1427 1428 movdqa %xmm4,%xmm0 1429 movdqa %xmm4,%xmm1 1430 pandn %xmm2,%xmm0 1431 movdqa %xmm4,%xmm2 1432 pandn %xmm3,%xmm1 1433 movdqa %xmm4,%xmm3 1434 pand 384(%rsp),%xmm2 1435 pand 384+16(%rsp),%xmm3 1436 por %xmm0,%xmm2 1437 por %xmm1,%xmm3 1438 movdqu %xmm2,0(%rdi) 1439 movdqu %xmm3,16(%rdi) 1440 1441 movdqa %xmm5,%xmm0 1442 movdqa %xmm5,%xmm1 1443 pandn 320(%rsp),%xmm0 1444 movdqa %xmm5,%xmm2 1445 pandn 320+16(%rsp),%xmm1 1446 movdqa %xmm5,%xmm3 1447 pand 512(%rsp),%xmm2 1448 pand 512+16(%rsp),%xmm3 1449 por %xmm0,%xmm2 1450 por %xmm1,%xmm3 1451 1452 movdqa %xmm4,%xmm0 1453 movdqa %xmm4,%xmm1 1454 pandn %xmm2,%xmm0 1455 movdqa %xmm4,%xmm2 1456 pandn %xmm3,%xmm1 1457 movdqa %xmm4,%xmm3 1458 pand 416(%rsp),%xmm2 1459 pand 416+16(%rsp),%xmm3 1460 por %xmm0,%xmm2 1461 por %xmm1,%xmm3 1462 movdqu %xmm2,32(%rdi) 1463 movdqu %xmm3,48(%rdi) 1464 1465L$add_doneq: 1466 addq $576+8,%rsp 1467 popq %r15 1468 popq %r14 1469 popq %r13 1470 popq %r12 1471 popq %rbx 1472 popq %rbp 1473 .byte 0xf3,0xc3 1474 1475.globl _ecp_nistz256_point_add_affine 1476.private_extern _ecp_nistz256_point_add_affine 1477 1478.p2align 5 1479_ecp_nistz256_point_add_affine: 1480 pushq %rbp 1481 pushq %rbx 1482 pushq %r12 1483 pushq %r13 1484 pushq %r14 1485 pushq %r15 1486 subq $480+8,%rsp 1487 1488 movdqu 0(%rsi),%xmm0 1489 movq %rdx,%rbx 1490 movdqu 16(%rsi),%xmm1 1491 movdqu 32(%rsi),%xmm2 1492 movdqu 48(%rsi),%xmm3 1493 movdqu 64(%rsi),%xmm4 1494 movdqu 80(%rsi),%xmm5 1495 movq 64+0(%rsi),%rax 1496 movq 64+8(%rsi),%r14 1497 movq 64+16(%rsi),%r15 1498 movq 64+24(%rsi),%r8 1499 movdqa %xmm0,320(%rsp) 1500 movdqa %xmm1,320+16(%rsp) 1501 por %xmm0,%xmm1 1502 movdqa %xmm2,352(%rsp) 1503 movdqa %xmm3,352+16(%rsp) 1504 por %xmm2,%xmm3 1505 movdqa %xmm4,384(%rsp) 1506 movdqa %xmm5,384+16(%rsp) 1507 por %xmm1,%xmm3 1508 1509 movdqu 0(%rbx),%xmm0 1510 pshufd $177,%xmm3,%xmm5 1511 movdqu 16(%rbx),%xmm1 1512 movdqu 32(%rbx),%xmm2 1513 por %xmm3,%xmm5 1514 movdqu 48(%rbx),%xmm3 1515 movdqa %xmm0,416(%rsp) 1516 pshufd $30,%xmm5,%xmm4 1517 movdqa %xmm1,416+16(%rsp) 1518 por %xmm0,%xmm1 1519.byte 102,72,15,110,199 1520 movdqa %xmm2,448(%rsp) 1521 movdqa %xmm3,448+16(%rsp) 1522 por %xmm2,%xmm3 1523 por %xmm4,%xmm5 1524 pxor %xmm4,%xmm4 1525 por %xmm1,%xmm3 1526 1527 leaq 64-0(%rsi),%rsi 1528 leaq 32(%rsp),%rdi 1529 call __ecp_nistz256_sqr_montq 1530 1531 pcmpeqd %xmm4,%xmm5 1532 pshufd $177,%xmm3,%xmm4 1533 movq 0(%rbx),%rax 1534 1535 movq %r12,%r9 1536 por %xmm3,%xmm4 1537 pshufd $0,%xmm5,%xmm5 1538 pshufd $30,%xmm4,%xmm3 1539 movq %r13,%r10 1540 por %xmm3,%xmm4 1541 pxor %xmm3,%xmm3 1542 movq %r14,%r11 1543 pcmpeqd %xmm3,%xmm4 1544 pshufd $0,%xmm4,%xmm4 1545 1546 leaq 32-0(%rsp),%rsi 1547 movq %r15,%r12 1548 leaq 0(%rsp),%rdi 1549 call __ecp_nistz256_mul_montq 1550 1551 leaq 320(%rsp),%rbx 1552 leaq 64(%rsp),%rdi 1553 call __ecp_nistz256_sub_fromq 1554 1555 movq 384(%rsp),%rax 1556 leaq 384(%rsp),%rbx 1557 movq 0+32(%rsp),%r9 1558 movq 8+32(%rsp),%r10 1559 leaq 0+32(%rsp),%rsi 1560 movq 16+32(%rsp),%r11 1561 movq 24+32(%rsp),%r12 1562 leaq 32(%rsp),%rdi 1563 call __ecp_nistz256_mul_montq 1564 1565 movq 384(%rsp),%rax 1566 leaq 384(%rsp),%rbx 1567 movq 0+64(%rsp),%r9 1568 movq 8+64(%rsp),%r10 1569 leaq 0+64(%rsp),%rsi 1570 movq 16+64(%rsp),%r11 1571 movq 24+64(%rsp),%r12 1572 leaq 288(%rsp),%rdi 1573 call __ecp_nistz256_mul_montq 1574 1575 movq 448(%rsp),%rax 1576 leaq 448(%rsp),%rbx 1577 movq 0+32(%rsp),%r9 1578 movq 8+32(%rsp),%r10 1579 leaq 0+32(%rsp),%rsi 1580 movq 16+32(%rsp),%r11 1581 movq 24+32(%rsp),%r12 1582 leaq 32(%rsp),%rdi 1583 call __ecp_nistz256_mul_montq 1584 1585 leaq 352(%rsp),%rbx 1586 leaq 96(%rsp),%rdi 1587 call __ecp_nistz256_sub_fromq 1588 1589 movq 0+64(%rsp),%rax 1590 movq 8+64(%rsp),%r14 1591 leaq 0+64(%rsp),%rsi 1592 movq 16+64(%rsp),%r15 1593 movq 24+64(%rsp),%r8 1594 leaq 128(%rsp),%rdi 1595 call __ecp_nistz256_sqr_montq 1596 1597 movq 0+96(%rsp),%rax 1598 movq 8+96(%rsp),%r14 1599 leaq 0+96(%rsp),%rsi 1600 movq 16+96(%rsp),%r15 1601 movq 24+96(%rsp),%r8 1602 leaq 192(%rsp),%rdi 1603 call __ecp_nistz256_sqr_montq 1604 1605 movq 128(%rsp),%rax 1606 leaq 128(%rsp),%rbx 1607 movq 0+64(%rsp),%r9 1608 movq 8+64(%rsp),%r10 1609 leaq 0+64(%rsp),%rsi 1610 movq 16+64(%rsp),%r11 1611 movq 24+64(%rsp),%r12 1612 leaq 160(%rsp),%rdi 1613 call __ecp_nistz256_mul_montq 1614 1615 movq 320(%rsp),%rax 1616 leaq 320(%rsp),%rbx 1617 movq 0+128(%rsp),%r9 1618 movq 8+128(%rsp),%r10 1619 leaq 0+128(%rsp),%rsi 1620 movq 16+128(%rsp),%r11 1621 movq 24+128(%rsp),%r12 1622 leaq 0(%rsp),%rdi 1623 call __ecp_nistz256_mul_montq 1624 1625 1626 1627 1628 addq %r12,%r12 1629 leaq 192(%rsp),%rsi 1630 adcq %r13,%r13 1631 movq %r12,%rax 1632 adcq %r8,%r8 1633 adcq %r9,%r9 1634 movq %r13,%rbp 1635 sbbq %r11,%r11 1636 1637 subq $-1,%r12 1638 movq %r8,%rcx 1639 sbbq %r14,%r13 1640 sbbq $0,%r8 1641 movq %r9,%r10 1642 sbbq %r15,%r9 1643 testq %r11,%r11 1644 1645 cmovzq %rax,%r12 1646 movq 0(%rsi),%rax 1647 cmovzq %rbp,%r13 1648 movq 8(%rsi),%rbp 1649 cmovzq %rcx,%r8 1650 movq 16(%rsi),%rcx 1651 cmovzq %r10,%r9 1652 movq 24(%rsi),%r10 1653 1654 call __ecp_nistz256_subq 1655 1656 leaq 160(%rsp),%rbx 1657 leaq 224(%rsp),%rdi 1658 call __ecp_nistz256_sub_fromq 1659 1660 movq 0+0(%rsp),%rax 1661 movq 0+8(%rsp),%rbp 1662 movq 0+16(%rsp),%rcx 1663 movq 0+24(%rsp),%r10 1664 leaq 64(%rsp),%rdi 1665 1666 call __ecp_nistz256_subq 1667 1668 movq %r12,0(%rdi) 1669 movq %r13,8(%rdi) 1670 movq %r8,16(%rdi) 1671 movq %r9,24(%rdi) 1672 movq 352(%rsp),%rax 1673 leaq 352(%rsp),%rbx 1674 movq 0+160(%rsp),%r9 1675 movq 8+160(%rsp),%r10 1676 leaq 0+160(%rsp),%rsi 1677 movq 16+160(%rsp),%r11 1678 movq 24+160(%rsp),%r12 1679 leaq 32(%rsp),%rdi 1680 call __ecp_nistz256_mul_montq 1681 1682 movq 96(%rsp),%rax 1683 leaq 96(%rsp),%rbx 1684 movq 0+64(%rsp),%r9 1685 movq 8+64(%rsp),%r10 1686 leaq 0+64(%rsp),%rsi 1687 movq 16+64(%rsp),%r11 1688 movq 24+64(%rsp),%r12 1689 leaq 64(%rsp),%rdi 1690 call __ecp_nistz256_mul_montq 1691 1692 leaq 32(%rsp),%rbx 1693 leaq 256(%rsp),%rdi 1694 call __ecp_nistz256_sub_fromq 1695 1696.byte 102,72,15,126,199 1697 1698 movdqa %xmm5,%xmm0 1699 movdqa %xmm5,%xmm1 1700 pandn 288(%rsp),%xmm0 1701 movdqa %xmm5,%xmm2 1702 pandn 288+16(%rsp),%xmm1 1703 movdqa %xmm5,%xmm3 1704 pand L$ONE_mont(%rip),%xmm2 1705 pand L$ONE_mont+16(%rip),%xmm3 1706 por %xmm0,%xmm2 1707 por %xmm1,%xmm3 1708 1709 movdqa %xmm4,%xmm0 1710 movdqa %xmm4,%xmm1 1711 pandn %xmm2,%xmm0 1712 movdqa %xmm4,%xmm2 1713 pandn %xmm3,%xmm1 1714 movdqa %xmm4,%xmm3 1715 pand 384(%rsp),%xmm2 1716 pand 384+16(%rsp),%xmm3 1717 por %xmm0,%xmm2 1718 por %xmm1,%xmm3 1719 movdqu %xmm2,64(%rdi) 1720 movdqu %xmm3,80(%rdi) 1721 1722 movdqa %xmm5,%xmm0 1723 movdqa %xmm5,%xmm1 1724 pandn 224(%rsp),%xmm0 1725 movdqa %xmm5,%xmm2 1726 pandn 224+16(%rsp),%xmm1 1727 movdqa %xmm5,%xmm3 1728 pand 416(%rsp),%xmm2 1729 pand 416+16(%rsp),%xmm3 1730 por %xmm0,%xmm2 1731 por %xmm1,%xmm3 1732 1733 movdqa %xmm4,%xmm0 1734 movdqa %xmm4,%xmm1 1735 pandn %xmm2,%xmm0 1736 movdqa %xmm4,%xmm2 1737 pandn %xmm3,%xmm1 1738 movdqa %xmm4,%xmm3 1739 pand 320(%rsp),%xmm2 1740 pand 320+16(%rsp),%xmm3 1741 por %xmm0,%xmm2 1742 por %xmm1,%xmm3 1743 movdqu %xmm2,0(%rdi) 1744 movdqu %xmm3,16(%rdi) 1745 1746 movdqa %xmm5,%xmm0 1747 movdqa %xmm5,%xmm1 1748 pandn 256(%rsp),%xmm0 1749 movdqa %xmm5,%xmm2 1750 pandn 256+16(%rsp),%xmm1 1751 movdqa %xmm5,%xmm3 1752 pand 448(%rsp),%xmm2 1753 pand 448+16(%rsp),%xmm3 1754 por %xmm0,%xmm2 1755 por %xmm1,%xmm3 1756 1757 movdqa %xmm4,%xmm0 1758 movdqa %xmm4,%xmm1 1759 pandn %xmm2,%xmm0 1760 movdqa %xmm4,%xmm2 1761 pandn %xmm3,%xmm1 1762 movdqa %xmm4,%xmm3 1763 pand 352(%rsp),%xmm2 1764 pand 352+16(%rsp),%xmm3 1765 por %xmm0,%xmm2 1766 por %xmm1,%xmm3 1767 movdqu %xmm2,32(%rdi) 1768 movdqu %xmm3,48(%rdi) 1769 1770 addq $480+8,%rsp 1771 popq %r15 1772 popq %r14 1773 popq %r13 1774 popq %r12 1775 popq %rbx 1776 popq %rbp 1777 .byte 0xf3,0xc3 1778 1779#endif 1780