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