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