1 .text 2 3 .globl bn_mul_mont 4 .type bn_mul_mont,@function 5 .align 16 6 bn_mul_mont: 7 testl $3,%r9d 8 jnz .Lmul_enter 9 cmpl $8,%r9d 10 jb .Lmul_enter 11 cmpq %rsi,%rdx 12 jne .Lmul4x_enter 13 jmp .Lsqr4x_enter 14 15 .align 16 16 .Lmul_enter: 17 pushq %rbx 18 pushq %rbp 19 pushq %r12 20 pushq %r13 21 pushq %r14 22 pushq %r15 23 24 movl %r9d,%r9d 25 leaq 2(%r9),%r10 26 movq %rsp,%r11 27 negq %r10 28 leaq (%rsp,%r10,8),%rsp 29 andq $-1024,%rsp 30 31 movq %r11,8(%rsp,%r9,8) 32 .Lmul_body: 33 movq %rdx,%r12 34 movq (%r8),%r8 35 movq (%r12),%rbx 36 movq (%rsi),%rax 37 38 xorq %r14,%r14 39 xorq %r15,%r15 40 41 movq %r8,%rbp 42 mulq %rbx 43 movq %rax,%r10 44 movq (%rcx),%rax 45 46 imulq %r10,%rbp 47 movq %rdx,%r11 48 49 mulq %rbp 50 addq %rax,%r10 51 movq 8(%rsi),%rax 52 adcq $0,%rdx 53 movq %rdx,%r13 54 55 leaq 1(%r15),%r15 56 jmp .L1st_enter 57 58 .align 16 59 .L1st: 60 addq %rax,%r13 61 movq (%rsi,%r15,8),%rax 62 adcq $0,%rdx 63 addq %r11,%r13 64 movq %r10,%r11 65 adcq $0,%rdx 66 movq %r13,-16(%rsp,%r15,8) 67 movq %rdx,%r13 68 69 .L1st_enter: 70 mulq %rbx 71 addq %rax,%r11 72 movq (%rcx,%r15,8),%rax 73 adcq $0,%rdx 74 leaq 1(%r15),%r15 75 movq %rdx,%r10 76 77 mulq %rbp 78 cmpq %r9,%r15 79 jne .L1st 80 81 addq %rax,%r13 82 movq (%rsi),%rax 83 adcq $0,%rdx 84 addq %r11,%r13 85 adcq $0,%rdx 86 movq %r13,-16(%rsp,%r15,8) 87 movq %rdx,%r13 88 movq %r10,%r11 89 90 xorq %rdx,%rdx 91 addq %r11,%r13 92 adcq $0,%rdx 93 movq %r13,-8(%rsp,%r9,8) 94 movq %rdx,(%rsp,%r9,8) 95 96 leaq 1(%r14),%r14 97 jmp .Louter 98 .align 16 99 .Louter: 100 movq (%r12,%r14,8),%rbx 101 xorq %r15,%r15 102 movq %r8,%rbp 103 movq (%rsp),%r10 104 mulq %rbx 105 addq %rax,%r10 106 movq (%rcx),%rax 107 adcq $0,%rdx 108 109 imulq %r10,%rbp 110 movq %rdx,%r11 111 112 mulq %rbp 113 addq %rax,%r10 114 movq 8(%rsi),%rax 115 adcq $0,%rdx 116 movq 8(%rsp),%r10 117 movq %rdx,%r13 118 119 leaq 1(%r15),%r15 120 jmp .Linner_enter 121 122 .align 16 123 .Linner: 124 addq %rax,%r13 125 movq (%rsi,%r15,8),%rax 126 adcq $0,%rdx 127 addq %r10,%r13 128 movq (%rsp,%r15,8),%r10 129 adcq $0,%rdx 130 movq %r13,-16(%rsp,%r15,8) 131 movq %rdx,%r13 132 133 .Linner_enter: 134 mulq %rbx 135 addq %rax,%r11 136 movq (%rcx,%r15,8),%rax 137 adcq $0,%rdx 138 addq %r11,%r10 139 movq %rdx,%r11 140 adcq $0,%r11 141 leaq 1(%r15),%r15 142 143 mulq %rbp 144 cmpq %r9,%r15 145 jne .Linner 146 147 addq %rax,%r13 148 movq (%rsi),%rax 149 adcq $0,%rdx 150 addq %r10,%r13 151 movq (%rsp,%r15,8),%r10 152 adcq $0,%rdx 153 movq %r13,-16(%rsp,%r15,8) 154 movq %rdx,%r13 155 156 xorq %rdx,%rdx 157 addq %r11,%r13 158 adcq $0,%rdx 159 addq %r10,%r13 160 adcq $0,%rdx 161 movq %r13,-8(%rsp,%r9,8) 162 movq %rdx,(%rsp,%r9,8) 163 164 leaq 1(%r14),%r14 165 cmpq %r9,%r14 166 jl .Louter 167 168 xorq %r14,%r14 169 movq (%rsp),%rax 170 leaq (%rsp),%rsi 171 movq %r9,%r15 172 jmp .Lsub 173 .align 16 174 .Lsub: sbbq (%rcx,%r14,8),%rax 175 movq %rax,(%rdi,%r14,8) 176 movq 8(%rsi,%r14,8),%rax 177 leaq 1(%r14),%r14 178 decq %r15 179 jnz .Lsub 180 181 sbbq $0,%rax 182 xorq %r14,%r14 183 andq %rax,%rsi 184 notq %rax 185 movq %rdi,%rcx 186 andq %rax,%rcx 187 movq %r9,%r15 188 orq %rcx,%rsi 189 .align 16 190 .Lcopy: 191 movq (%rsi,%r14,8),%rax 192 movq %r14,(%rsp,%r14,8) 193 movq %rax,(%rdi,%r14,8) 194 leaq 1(%r14),%r14 195 subq $1,%r15 196 jnz .Lcopy 197 198 movq 8(%rsp,%r9,8),%rsi 199 movq $1,%rax 200 movq (%rsi),%r15 201 movq 8(%rsi),%r14 202 movq 16(%rsi),%r13 203 movq 24(%rsi),%r12 204 movq 32(%rsi),%rbp 205 movq 40(%rsi),%rbx 206 leaq 48(%rsi),%rsp 207 .Lmul_epilogue: 208 .byte 0xf3,0xc3 209 .size bn_mul_mont,.-bn_mul_mont 210 .type bn_mul4x_mont,@function 211 .align 16 212 bn_mul4x_mont: 213 .Lmul4x_enter: 214 pushq %rbx 215 pushq %rbp 216 pushq %r12 217 pushq %r13 218 pushq %r14 219 pushq %r15 220 221 movl %r9d,%r9d 222 leaq 4(%r9),%r10 223 movq %rsp,%r11 224 negq %r10 225 leaq (%rsp,%r10,8),%rsp 226 andq $-1024,%rsp 227 228 movq %r11,8(%rsp,%r9,8) 229 .Lmul4x_body: 230 movq %rdi,16(%rsp,%r9,8) 231 movq %rdx,%r12 232 movq (%r8),%r8 233 movq (%r12),%rbx 234 movq (%rsi),%rax 235 236 xorq %r14,%r14 237 xorq %r15,%r15 238 239 movq %r8,%rbp 240 mulq %rbx 241 movq %rax,%r10 242 movq (%rcx),%rax 243 244 imulq %r10,%rbp 245 movq %rdx,%r11 246 247 mulq %rbp 248 addq %rax,%r10 249 movq 8(%rsi),%rax 250 adcq $0,%rdx 251 movq %rdx,%rdi 252 253 mulq %rbx 254 addq %rax,%r11 255 movq 8(%rcx),%rax 256 adcq $0,%rdx 257 movq %rdx,%r10 258 259 mulq %rbp 260 addq %rax,%rdi 261 movq 16(%rsi),%rax 262 adcq $0,%rdx 263 addq %r11,%rdi 264 leaq 4(%r15),%r15 265 adcq $0,%rdx 266 movq %rdi,(%rsp) 267 movq %rdx,%r13 268 jmp .L1st4x 269 .align 16 270 .L1st4x: 271 mulq %rbx 272 addq %rax,%r10 273 movq -16(%rcx,%r15,8),%rax 274 adcq $0,%rdx 275 movq %rdx,%r11 276 277 mulq %rbp 278 addq %rax,%r13 279 movq -8(%rsi,%r15,8),%rax 280 adcq $0,%rdx 281 addq %r10,%r13 282 adcq $0,%rdx 283 movq %r13,-24(%rsp,%r15,8) 284 movq %rdx,%rdi 285 286 mulq %rbx 287 addq %rax,%r11 288 movq -8(%rcx,%r15,8),%rax 289 adcq $0,%rdx 290 movq %rdx,%r10 291 292 mulq %rbp 293 addq %rax,%rdi 294 movq (%rsi,%r15,8),%rax 295 adcq $0,%rdx 296 addq %r11,%rdi 297 adcq $0,%rdx 298 movq %rdi,-16(%rsp,%r15,8) 299 movq %rdx,%r13 300 301 mulq %rbx 302 addq %rax,%r10 303 movq (%rcx,%r15,8),%rax 304 adcq $0,%rdx 305 movq %rdx,%r11 306 307 mulq %rbp 308 addq %rax,%r13 309 movq 8(%rsi,%r15,8),%rax 310 adcq $0,%rdx 311 addq %r10,%r13 312 adcq $0,%rdx 313 movq %r13,-8(%rsp,%r15,8) 314 movq %rdx,%rdi 315 316 mulq %rbx 317 addq %rax,%r11 318 movq 8(%rcx,%r15,8),%rax 319 adcq $0,%rdx 320 leaq 4(%r15),%r15 321 movq %rdx,%r10 322 323 mulq %rbp 324 addq %rax,%rdi 325 movq -16(%rsi,%r15,8),%rax 326 adcq $0,%rdx 327 addq %r11,%rdi 328 adcq $0,%rdx 329 movq %rdi,-32(%rsp,%r15,8) 330 movq %rdx,%r13 331 cmpq %r9,%r15 332 jl .L1st4x 333 334 mulq %rbx 335 addq %rax,%r10 336 movq -16(%rcx,%r15,8),%rax 337 adcq $0,%rdx 338 movq %rdx,%r11 339 340 mulq %rbp 341 addq %rax,%r13 342 movq -8(%rsi,%r15,8),%rax 343 adcq $0,%rdx 344 addq %r10,%r13 345 adcq $0,%rdx 346 movq %r13,-24(%rsp,%r15,8) 347 movq %rdx,%rdi 348 349 mulq %rbx 350 addq %rax,%r11 351 movq -8(%rcx,%r15,8),%rax 352 adcq $0,%rdx 353 movq %rdx,%r10 354 355 mulq %rbp 356 addq %rax,%rdi 357 movq (%rsi),%rax 358 adcq $0,%rdx 359 addq %r11,%rdi 360 adcq $0,%rdx 361 movq %rdi,-16(%rsp,%r15,8) 362 movq %rdx,%r13 363 364 xorq %rdi,%rdi 365 addq %r10,%r13 366 adcq $0,%rdi 367 movq %r13,-8(%rsp,%r15,8) 368 movq %rdi,(%rsp,%r15,8) 369 370 leaq 1(%r14),%r14 371 .align 4 372 .Louter4x: 373 movq (%r12,%r14,8),%rbx 374 xorq %r15,%r15 375 movq (%rsp),%r10 376 movq %r8,%rbp 377 mulq %rbx 378 addq %rax,%r10 379 movq (%rcx),%rax 380 adcq $0,%rdx 381 382 imulq %r10,%rbp 383 movq %rdx,%r11 384 385 mulq %rbp 386 addq %rax,%r10 387 movq 8(%rsi),%rax 388 adcq $0,%rdx 389 movq %rdx,%rdi 390 391 mulq %rbx 392 addq %rax,%r11 393 movq 8(%rcx),%rax 394 adcq $0,%rdx 395 addq 8(%rsp),%r11 396 adcq $0,%rdx 397 movq %rdx,%r10 398 399 mulq %rbp 400 addq %rax,%rdi 401 movq 16(%rsi),%rax 402 adcq $0,%rdx 403 addq %r11,%rdi 404 leaq 4(%r15),%r15 405 adcq $0,%rdx 406 movq %rdi,(%rsp) 407 movq %rdx,%r13 408 jmp .Linner4x 409 .align 16 410 .Linner4x: 411 mulq %rbx 412 addq %rax,%r10 413 movq -16(%rcx,%r15,8),%rax 414 adcq $0,%rdx 415 addq -16(%rsp,%r15,8),%r10 416 adcq $0,%rdx 417 movq %rdx,%r11 418 419 mulq %rbp 420 addq %rax,%r13 421 movq -8(%rsi,%r15,8),%rax 422 adcq $0,%rdx 423 addq %r10,%r13 424 adcq $0,%rdx 425 movq %r13,-24(%rsp,%r15,8) 426 movq %rdx,%rdi 427 428 mulq %rbx 429 addq %rax,%r11 430 movq -8(%rcx,%r15,8),%rax 431 adcq $0,%rdx 432 addq -8(%rsp,%r15,8),%r11 433 adcq $0,%rdx 434 movq %rdx,%r10 435 436 mulq %rbp 437 addq %rax,%rdi 438 movq (%rsi,%r15,8),%rax 439 adcq $0,%rdx 440 addq %r11,%rdi 441 adcq $0,%rdx 442 movq %rdi,-16(%rsp,%r15,8) 443 movq %rdx,%r13 444 445 mulq %rbx 446 addq %rax,%r10 447 movq (%rcx,%r15,8),%rax 448 adcq $0,%rdx 449 addq (%rsp,%r15,8),%r10 450 adcq $0,%rdx 451 movq %rdx,%r11 452 453 mulq %rbp 454 addq %rax,%r13 455 movq 8(%rsi,%r15,8),%rax 456 adcq $0,%rdx 457 addq %r10,%r13 458 adcq $0,%rdx 459 movq %r13,-8(%rsp,%r15,8) 460 movq %rdx,%rdi 461 462 mulq %rbx 463 addq %rax,%r11 464 movq 8(%rcx,%r15,8),%rax 465 adcq $0,%rdx 466 addq 8(%rsp,%r15,8),%r11 467 adcq $0,%rdx 468 leaq 4(%r15),%r15 469 movq %rdx,%r10 470 471 mulq %rbp 472 addq %rax,%rdi 473 movq -16(%rsi,%r15,8),%rax 474 adcq $0,%rdx 475 addq %r11,%rdi 476 adcq $0,%rdx 477 movq %rdi,-32(%rsp,%r15,8) 478 movq %rdx,%r13 479 cmpq %r9,%r15 480 jl .Linner4x 481 482 mulq %rbx 483 addq %rax,%r10 484 movq -16(%rcx,%r15,8),%rax 485 adcq $0,%rdx 486 addq -16(%rsp,%r15,8),%r10 487 adcq $0,%rdx 488 movq %rdx,%r11 489 490 mulq %rbp 491 addq %rax,%r13 492 movq -8(%rsi,%r15,8),%rax 493 adcq $0,%rdx 494 addq %r10,%r13 495 adcq $0,%rdx 496 movq %r13,-24(%rsp,%r15,8) 497 movq %rdx,%rdi 498 499 mulq %rbx 500 addq %rax,%r11 501 movq -8(%rcx,%r15,8),%rax 502 adcq $0,%rdx 503 addq -8(%rsp,%r15,8),%r11 504 adcq $0,%rdx 505 leaq 1(%r14),%r14 506 movq %rdx,%r10 507 508 mulq %rbp 509 addq %rax,%rdi 510 movq (%rsi),%rax 511 adcq $0,%rdx 512 addq %r11,%rdi 513 adcq $0,%rdx 514 movq %rdi,-16(%rsp,%r15,8) 515 movq %rdx,%r13 516 517 xorq %rdi,%rdi 518 addq %r10,%r13 519 adcq $0,%rdi 520 addq (%rsp,%r9,8),%r13 521 adcq $0,%rdi 522 movq %r13,-8(%rsp,%r15,8) 523 movq %rdi,(%rsp,%r15,8) 524 525 cmpq %r9,%r14 526 jl .Louter4x 527 movq 16(%rsp,%r9,8),%rdi 528 movq 0(%rsp),%rax 529 pxor %xmm0,%xmm0 530 movq 8(%rsp),%rdx 531 shrq $2,%r9 532 leaq (%rsp),%rsi 533 xorq %r14,%r14 534 535 subq 0(%rcx),%rax 536 movq 16(%rsi),%rbx 537 movq 24(%rsi),%rbp 538 sbbq 8(%rcx),%rdx 539 leaq -1(%r9),%r15 540 jmp .Lsub4x 541 .align 16 542 .Lsub4x: 543 movq %rax,0(%rdi,%r14,8) 544 movq %rdx,8(%rdi,%r14,8) 545 sbbq 16(%rcx,%r14,8),%rbx 546 movq 32(%rsi,%r14,8),%rax 547 movq 40(%rsi,%r14,8),%rdx 548 sbbq 24(%rcx,%r14,8),%rbp 549 movq %rbx,16(%rdi,%r14,8) 550 movq %rbp,24(%rdi,%r14,8) 551 sbbq 32(%rcx,%r14,8),%rax 552 movq 48(%rsi,%r14,8),%rbx 553 movq 56(%rsi,%r14,8),%rbp 554 sbbq 40(%rcx,%r14,8),%rdx 555 leaq 4(%r14),%r14 556 decq %r15 557 jnz .Lsub4x 558 559 movq %rax,0(%rdi,%r14,8) 560 movq 32(%rsi,%r14,8),%rax 561 sbbq 16(%rcx,%r14,8),%rbx 562 movq %rdx,8(%rdi,%r14,8) 563 sbbq 24(%rcx,%r14,8),%rbp 564 movq %rbx,16(%rdi,%r14,8) 565 566 sbbq $0,%rax 567 movq %rbp,24(%rdi,%r14,8) 568 xorq %r14,%r14 569 andq %rax,%rsi 570 notq %rax 571 movq %rdi,%rcx 572 andq %rax,%rcx 573 leaq -1(%r9),%r15 574 orq %rcx,%rsi 575 576 movdqu (%rsi),%xmm1 577 movdqa %xmm0,(%rsp) 578 movdqu %xmm1,(%rdi) 579 jmp .Lcopy4x 580 .align 16 581 .Lcopy4x: 582 movdqu 16(%rsi,%r14,1),%xmm2 583 movdqu 32(%rsi,%r14,1),%xmm1 584 movdqa %xmm0,16(%rsp,%r14,1) 585 movdqu %xmm2,16(%rdi,%r14,1) 586 movdqa %xmm0,32(%rsp,%r14,1) 587 movdqu %xmm1,32(%rdi,%r14,1) 588 leaq 32(%r14),%r14 589 decq %r15 590 jnz .Lcopy4x 591 592 shlq $2,%r9 593 movdqu 16(%rsi,%r14,1),%xmm2 594 movdqa %xmm0,16(%rsp,%r14,1) 595 movdqu %xmm2,16(%rdi,%r14,1) 596 movq 8(%rsp,%r9,8),%rsi 597 movq $1,%rax 598 movq (%rsi),%r15 599 movq 8(%rsi),%r14 600 movq 16(%rsi),%r13 601 movq 24(%rsi),%r12 602 movq 32(%rsi),%rbp 603 movq 40(%rsi),%rbx 604 leaq 48(%rsi),%rsp 605 .Lmul4x_epilogue: 606 .byte 0xf3,0xc3 607 .size bn_mul4x_mont,.-bn_mul4x_mont 608 .type bn_sqr4x_mont,@function 609 .align 16 610 bn_sqr4x_mont: 611 .Lsqr4x_enter: 612 pushq %rbx 613 pushq %rbp 614 pushq %r12 615 pushq %r13 616 pushq %r14 617 pushq %r15 618 619 shll $3,%r9d 620 xorq %r10,%r10 621 movq %rsp,%r11 622 subq %r9,%r10 623 movq (%r8),%r8 624 leaq -72(%rsp,%r10,2),%rsp 625 andq $-1024,%rsp 626 627 628 629 630 631 632 633 634 635 636 637 movq %rdi,32(%rsp) 638 movq %rcx,40(%rsp) 639 movq %r8,48(%rsp) 640 movq %r11,56(%rsp) 641 .Lsqr4x_body: 642 643 644 645 646 647 648 649 leaq 32(%r10),%rbp 650 leaq (%rsi,%r9,1),%rsi 651 652 movq %r9,%rcx 653 654 655 movq -32(%rsi,%rbp,1),%r14 656 leaq 64(%rsp,%r9,2),%rdi 657 movq -24(%rsi,%rbp,1),%rax 658 leaq -32(%rdi,%rbp,1),%rdi 659 movq -16(%rsi,%rbp,1),%rbx 660 movq %rax,%r15 661 662 mulq %r14 663 movq %rax,%r10 664 movq %rbx,%rax 665 movq %rdx,%r11 666 movq %r10,-24(%rdi,%rbp,1) 667 668 xorq %r10,%r10 669 mulq %r14 670 addq %rax,%r11 671 movq %rbx,%rax 672 adcq %rdx,%r10 673 movq %r11,-16(%rdi,%rbp,1) 674 675 leaq -16(%rbp),%rcx 676 677 678 movq 8(%rsi,%rcx,1),%rbx 679 mulq %r15 680 movq %rax,%r12 681 movq %rbx,%rax 682 movq %rdx,%r13 683 684 xorq %r11,%r11 685 addq %r12,%r10 686 leaq 16(%rcx),%rcx 687 adcq $0,%r11 688 mulq %r14 689 addq %rax,%r10 690 movq %rbx,%rax 691 adcq %rdx,%r11 692 movq %r10,-8(%rdi,%rcx,1) 693 jmp .Lsqr4x_1st 694 695 .align 16 696 .Lsqr4x_1st: 697 movq (%rsi,%rcx,1),%rbx 698 xorq %r12,%r12 699 mulq %r15 700 addq %rax,%r13 701 movq %rbx,%rax 702 adcq %rdx,%r12 703 704 xorq %r10,%r10 705 addq %r13,%r11 706 adcq $0,%r10 707 mulq %r14 708 addq %rax,%r11 709 movq %rbx,%rax 710 adcq %rdx,%r10 711 movq %r11,(%rdi,%rcx,1) 712 713 714 movq 8(%rsi,%rcx,1),%rbx 715 xorq %r13,%r13 716 mulq %r15 717 addq %rax,%r12 718 movq %rbx,%rax 719 adcq %rdx,%r13 720 721 xorq %r11,%r11 722 addq %r12,%r10 723 adcq $0,%r11 724 mulq %r14 725 addq %rax,%r10 726 movq %rbx,%rax 727 adcq %rdx,%r11 728 movq %r10,8(%rdi,%rcx,1) 729 730 movq 16(%rsi,%rcx,1),%rbx 731 xorq %r12,%r12 732 mulq %r15 733 addq %rax,%r13 734 movq %rbx,%rax 735 adcq %rdx,%r12 736 737 xorq %r10,%r10 738 addq %r13,%r11 739 adcq $0,%r10 740 mulq %r14 741 addq %rax,%r11 742 movq %rbx,%rax 743 adcq %rdx,%r10 744 movq %r11,16(%rdi,%rcx,1) 745 746 747 movq 24(%rsi,%rcx,1),%rbx 748 xorq %r13,%r13 749 mulq %r15 750 addq %rax,%r12 751 movq %rbx,%rax 752 adcq %rdx,%r13 753 754 xorq %r11,%r11 755 addq %r12,%r10 756 leaq 32(%rcx),%rcx 757 adcq $0,%r11 758 mulq %r14 759 addq %rax,%r10 760 movq %rbx,%rax 761 adcq %rdx,%r11 762 movq %r10,-8(%rdi,%rcx,1) 763 764 cmpq $0,%rcx 765 jne .Lsqr4x_1st 766 767 xorq %r12,%r12 768 addq %r11,%r13 769 adcq $0,%r12 770 mulq %r15 771 addq %rax,%r13 772 adcq %rdx,%r12 773 774 movq %r13,(%rdi) 775 leaq 16(%rbp),%rbp 776 movq %r12,8(%rdi) 777 jmp .Lsqr4x_outer 778 779 .align 16 780 .Lsqr4x_outer: 781 movq -32(%rsi,%rbp,1),%r14 782 leaq 64(%rsp,%r9,2),%rdi 783 movq -24(%rsi,%rbp,1),%rax 784 leaq -32(%rdi,%rbp,1),%rdi 785 movq -16(%rsi,%rbp,1),%rbx 786 movq %rax,%r15 787 788 movq -24(%rdi,%rbp,1),%r10 789 xorq %r11,%r11 790 mulq %r14 791 addq %rax,%r10 792 movq %rbx,%rax 793 adcq %rdx,%r11 794 movq %r10,-24(%rdi,%rbp,1) 795 796 xorq %r10,%r10 797 addq -16(%rdi,%rbp,1),%r11 798 adcq $0,%r10 799 mulq %r14 800 addq %rax,%r11 801 movq %rbx,%rax 802 adcq %rdx,%r10 803 movq %r11,-16(%rdi,%rbp,1) 804 805 leaq -16(%rbp),%rcx 806 xorq %r12,%r12 807 808 809 movq 8(%rsi,%rcx,1),%rbx 810 xorq %r13,%r13 811 addq 8(%rdi,%rcx,1),%r12 812 adcq $0,%r13 813 mulq %r15 814 addq %rax,%r12 815 movq %rbx,%rax 816 adcq %rdx,%r13 817 818 xorq %r11,%r11 819 addq %r12,%r10 820 adcq $0,%r11 821 mulq %r14 822 addq %rax,%r10 823 movq %rbx,%rax 824 adcq %rdx,%r11 825 movq %r10,8(%rdi,%rcx,1) 826 827 leaq 16(%rcx),%rcx 828 jmp .Lsqr4x_inner 829 830 .align 16 831 .Lsqr4x_inner: 832 movq (%rsi,%rcx,1),%rbx 833 xorq %r12,%r12 834 addq (%rdi,%rcx,1),%r13 835 adcq $0,%r12 836 mulq %r15 837 addq %rax,%r13 838 movq %rbx,%rax 839 adcq %rdx,%r12 840 841 xorq %r10,%r10 842 addq %r13,%r11 843 adcq $0,%r10 844 mulq %r14 845 addq %rax,%r11 846 movq %rbx,%rax 847 adcq %rdx,%r10 848 movq %r11,(%rdi,%rcx,1) 849 850 movq 8(%rsi,%rcx,1),%rbx 851 xorq %r13,%r13 852 addq 8(%rdi,%rcx,1),%r12 853 adcq $0,%r13 854 mulq %r15 855 addq %rax,%r12 856 movq %rbx,%rax 857 adcq %rdx,%r13 858 859 xorq %r11,%r11 860 addq %r12,%r10 861 leaq 16(%rcx),%rcx 862 adcq $0,%r11 863 mulq %r14 864 addq %rax,%r10 865 movq %rbx,%rax 866 adcq %rdx,%r11 867 movq %r10,-8(%rdi,%rcx,1) 868 869 cmpq $0,%rcx 870 jne .Lsqr4x_inner 871 872 xorq %r12,%r12 873 addq %r11,%r13 874 adcq $0,%r12 875 mulq %r15 876 addq %rax,%r13 877 adcq %rdx,%r12 878 879 movq %r13,(%rdi) 880 movq %r12,8(%rdi) 881 882 addq $16,%rbp 883 jnz .Lsqr4x_outer 884 885 886 movq -32(%rsi),%r14 887 leaq 64(%rsp,%r9,2),%rdi 888 movq -24(%rsi),%rax 889 leaq -32(%rdi,%rbp,1),%rdi 890 movq -16(%rsi),%rbx 891 movq %rax,%r15 892 893 xorq %r11,%r11 894 mulq %r14 895 addq %rax,%r10 896 movq %rbx,%rax 897 adcq %rdx,%r11 898 movq %r10,-24(%rdi) 899 900 xorq %r10,%r10 901 addq %r13,%r11 902 adcq $0,%r10 903 mulq %r14 904 addq %rax,%r11 905 movq %rbx,%rax 906 adcq %rdx,%r10 907 movq %r11,-16(%rdi) 908 909 movq -8(%rsi),%rbx 910 mulq %r15 911 addq %rax,%r12 912 movq %rbx,%rax 913 adcq $0,%rdx 914 915 xorq %r11,%r11 916 addq %r12,%r10 917 movq %rdx,%r13 918 adcq $0,%r11 919 mulq %r14 920 addq %rax,%r10 921 movq %rbx,%rax 922 adcq %rdx,%r11 923 movq %r10,-8(%rdi) 924 925 xorq %r12,%r12 926 addq %r11,%r13 927 adcq $0,%r12 928 mulq %r15 929 addq %rax,%r13 930 movq -16(%rsi),%rax 931 adcq %rdx,%r12 932 933 movq %r13,(%rdi) 934 movq %r12,8(%rdi) 935 936 mulq %rbx 937 addq $16,%rbp 938 xorq %r14,%r14 939 subq %r9,%rbp 940 xorq %r15,%r15 941 942 addq %r12,%rax 943 adcq $0,%rdx 944 movq %rax,8(%rdi) 945 movq %rdx,16(%rdi) 946 movq %r15,24(%rdi) 947 948 movq -16(%rsi,%rbp,1),%rax 949 leaq 64(%rsp,%r9,2),%rdi 950 xorq %r10,%r10 951 movq -24(%rdi,%rbp,2),%r11 952 953 leaq (%r14,%r10,2),%r12 954 shrq $63,%r10 955 leaq (%rcx,%r11,2),%r13 956 shrq $63,%r11 957 orq %r10,%r13 958 movq -16(%rdi,%rbp,2),%r10 959 movq %r11,%r14 960 mulq %rax 961 negq %r15 962 movq -8(%rdi,%rbp,2),%r11 963 adcq %rax,%r12 964 movq -8(%rsi,%rbp,1),%rax 965 movq %r12,-32(%rdi,%rbp,2) 966 adcq %rdx,%r13 967 968 leaq (%r14,%r10,2),%rbx 969 movq %r13,-24(%rdi,%rbp,2) 970 sbbq %r15,%r15 971 shrq $63,%r10 972 leaq (%rcx,%r11,2),%r8 973 shrq $63,%r11 974 orq %r10,%r8 975 movq 0(%rdi,%rbp,2),%r10 976 movq %r11,%r14 977 mulq %rax 978 negq %r15 979 movq 8(%rdi,%rbp,2),%r11 980 adcq %rax,%rbx 981 movq 0(%rsi,%rbp,1),%rax 982 movq %rbx,-16(%rdi,%rbp,2) 983 adcq %rdx,%r8 984 leaq 16(%rbp),%rbp 985 movq %r8,-40(%rdi,%rbp,2) 986 sbbq %r15,%r15 987 jmp .Lsqr4x_shift_n_add 988 989 .align 16 990 .Lsqr4x_shift_n_add: 991 leaq (%r14,%r10,2),%r12 992 shrq $63,%r10 993 leaq (%rcx,%r11,2),%r13 994 shrq $63,%r11 995 orq %r10,%r13 996 movq -16(%rdi,%rbp,2),%r10 997 movq %r11,%r14 998 mulq %rax 999 negq %r15 1000 movq -8(%rdi,%rbp,2),%r11 1001 adcq %rax,%r12 1002 movq -8(%rsi,%rbp,1),%rax 1003 movq %r12,-32(%rdi,%rbp,2) 1004 adcq %rdx,%r13 1005 1006 leaq (%r14,%r10,2),%rbx 1007 movq %r13,-24(%rdi,%rbp,2) 1008 sbbq %r15,%r15 1009 shrq $63,%r10 1010 leaq (%rcx,%r11,2),%r8 1011 shrq $63,%r11 1012 orq %r10,%r8 1013 movq 0(%rdi,%rbp,2),%r10 1014 movq %r11,%r14 1015 mulq %rax 1016 negq %r15 1017 movq 8(%rdi,%rbp,2),%r11 1018 adcq %rax,%rbx 1019 movq 0(%rsi,%rbp,1),%rax 1020 movq %rbx,-16(%rdi,%rbp,2) 1021 adcq %rdx,%r8 1022 1023 leaq (%r14,%r10,2),%r12 1024 movq %r8,-8(%rdi,%rbp,2) 1025 sbbq %r15,%r15 1026 shrq $63,%r10 1027 leaq (%rcx,%r11,2),%r13 1028 shrq $63,%r11 1029 orq %r10,%r13 1030 movq 16(%rdi,%rbp,2),%r10 1031 movq %r11,%r14 1032 mulq %rax 1033 negq %r15 1034 movq 24(%rdi,%rbp,2),%r11 1035 adcq %rax,%r12 1036 movq 8(%rsi,%rbp,1),%rax 1037 movq %r12,0(%rdi,%rbp,2) 1038 adcq %rdx,%r13 1039 1040 leaq (%r14,%r10,2),%rbx 1041 movq %r13,8(%rdi,%rbp,2) 1042 sbbq %r15,%r15 1043 shrq $63,%r10 1044 leaq (%rcx,%r11,2),%r8 1045 shrq $63,%r11 1046 orq %r10,%r8 1047 movq 32(%rdi,%rbp,2),%r10 1048 movq %r11,%r14 1049 mulq %rax 1050 negq %r15 1051 movq 40(%rdi,%rbp,2),%r11 1052 adcq %rax,%rbx 1053 movq 16(%rsi,%rbp,1),%rax 1054 movq %rbx,16(%rdi,%rbp,2) 1055 adcq %rdx,%r8 1056 movq %r8,24(%rdi,%rbp,2) 1057 sbbq %r15,%r15 1058 addq $32,%rbp 1059 jnz .Lsqr4x_shift_n_add 1060 1061 leaq (%r14,%r10,2),%r12 1062 shrq $63,%r10 1063 leaq (%rcx,%r11,2),%r13 1064 shrq $63,%r11 1065 orq %r10,%r13 1066 movq -16(%rdi),%r10 1067 movq %r11,%r14 1068 mulq %rax 1069 negq %r15 1070 movq -8(%rdi),%r11 1071 adcq %rax,%r12 1072 movq -8(%rsi),%rax 1073 movq %r12,-32(%rdi) 1074 adcq %rdx,%r13 1075 1076 leaq (%r14,%r10,2),%rbx 1077 movq %r13,-24(%rdi) 1078 sbbq %r15,%r15 1079 shrq $63,%r10 1080 leaq (%rcx,%r11,2),%r8 1081 shrq $63,%r11 1082 orq %r10,%r8 1083 mulq %rax 1084 negq %r15 1085 adcq %rax,%rbx 1086 adcq %rdx,%r8 1087 movq %rbx,-16(%rdi) 1088 movq %r8,-8(%rdi) 1089 movq 40(%rsp),%rsi 1090 movq 48(%rsp),%r8 1091 xorq %rcx,%rcx 1092 movq %r9,0(%rsp) 1093 subq %r9,%rcx 1094 movq 64(%rsp),%r10 1095 movq %r8,%r14 1096 leaq 64(%rsp,%r9,2),%rax 1097 leaq 64(%rsp,%r9,1),%rdi 1098 movq %rax,8(%rsp) 1099 leaq (%rsi,%r9,1),%rsi 1100 xorq %rbp,%rbp 1101 1102 movq 0(%rsi,%rcx,1),%rax 1103 movq 8(%rsi,%rcx,1),%r9 1104 imulq %r10,%r14 1105 movq %rax,%rbx 1106 jmp .Lsqr4x_mont_outer 1107 1108 .align 16 1109 .Lsqr4x_mont_outer: 1110 xorq %r11,%r11 1111 mulq %r14 1112 addq %rax,%r10 1113 movq %r9,%rax 1114 adcq %rdx,%r11 1115 movq %r8,%r15 1116 1117 xorq %r10,%r10 1118 addq 8(%rdi,%rcx,1),%r11 1119 adcq $0,%r10 1120 mulq %r14 1121 addq %rax,%r11 1122 movq %rbx,%rax 1123 adcq %rdx,%r10 1124 1125 imulq %r11,%r15 1126 1127 movq 16(%rsi,%rcx,1),%rbx 1128 xorq %r13,%r13 1129 addq %r11,%r12 1130 adcq $0,%r13 1131 mulq %r15 1132 addq %rax,%r12 1133 movq %rbx,%rax 1134 adcq %rdx,%r13 1135 movq %r12,8(%rdi,%rcx,1) 1136 1137 xorq %r11,%r11 1138 addq 16(%rdi,%rcx,1),%r10 1139 adcq $0,%r11 1140 mulq %r14 1141 addq %rax,%r10 1142 movq %r9,%rax 1143 adcq %rdx,%r11 1144 1145 movq 24(%rsi,%rcx,1),%r9 1146 xorq %r12,%r12 1147 addq %r10,%r13 1148 adcq $0,%r12 1149 mulq %r15 1150 addq %rax,%r13 1151 movq %r9,%rax 1152 adcq %rdx,%r12 1153 movq %r13,16(%rdi,%rcx,1) 1154 1155 xorq %r10,%r10 1156 addq 24(%rdi,%rcx,1),%r11 1157 leaq 32(%rcx),%rcx 1158 adcq $0,%r10 1159 mulq %r14 1160 addq %rax,%r11 1161 movq %rbx,%rax 1162 adcq %rdx,%r10 1163 jmp .Lsqr4x_mont_inner 1164 1165 .align 16 1166 .Lsqr4x_mont_inner: 1167 movq (%rsi,%rcx,1),%rbx 1168 xorq %r13,%r13 1169 addq %r11,%r12 1170 adcq $0,%r13 1171 mulq %r15 1172 addq %rax,%r12 1173 movq %rbx,%rax 1174 adcq %rdx,%r13 1175 movq %r12,-8(%rdi,%rcx,1) 1176 1177 xorq %r11,%r11 1178 addq (%rdi,%rcx,1),%r10 1179 adcq $0,%r11 1180 mulq %r14 1181 addq %rax,%r10 1182 movq %r9,%rax 1183 adcq %rdx,%r11 1184 1185 movq 8(%rsi,%rcx,1),%r9 1186 xorq %r12,%r12 1187 addq %r10,%r13 1188 adcq $0,%r12 1189 mulq %r15 1190 addq %rax,%r13 1191 movq %r9,%rax 1192 adcq %rdx,%r12 1193 movq %r13,(%rdi,%rcx,1) 1194 1195 xorq %r10,%r10 1196 addq 8(%rdi,%rcx,1),%r11 1197 adcq $0,%r10 1198 mulq %r14 1199 addq %rax,%r11 1200 movq %rbx,%rax 1201 adcq %rdx,%r10 1202 1203 1204 movq 16(%rsi,%rcx,1),%rbx 1205 xorq %r13,%r13 1206 addq %r11,%r12 1207 adcq $0,%r13 1208 mulq %r15 1209 addq %rax,%r12 1210 movq %rbx,%rax 1211 adcq %rdx,%r13 1212 movq %r12,8(%rdi,%rcx,1) 1213 1214 xorq %r11,%r11 1215 addq 16(%rdi,%rcx,1),%r10 1216 adcq $0,%r11 1217 mulq %r14 1218 addq %rax,%r10 1219 movq %r9,%rax 1220 adcq %rdx,%r11 1221 1222 movq 24(%rsi,%rcx,1),%r9 1223 xorq %r12,%r12 1224 addq %r10,%r13 1225 adcq $0,%r12 1226 mulq %r15 1227 addq %rax,%r13 1228 movq %r9,%rax 1229 adcq %rdx,%r12 1230 movq %r13,16(%rdi,%rcx,1) 1231 1232 xorq %r10,%r10 1233 addq 24(%rdi,%rcx,1),%r11 1234 leaq 32(%rcx),%rcx 1235 adcq $0,%r10 1236 mulq %r14 1237 addq %rax,%r11 1238 movq %rbx,%rax 1239 adcq %rdx,%r10 1240 cmpq $0,%rcx 1241 jne .Lsqr4x_mont_inner 1242 1243 subq 0(%rsp),%rcx 1244 movq %r8,%r14 1245 1246 xorq %r13,%r13 1247 addq %r11,%r12 1248 adcq $0,%r13 1249 mulq %r15 1250 addq %rax,%r12 1251 movq %r9,%rax 1252 adcq %rdx,%r13 1253 movq %r12,-8(%rdi) 1254 1255 xorq %r11,%r11 1256 addq (%rdi),%r10 1257 adcq $0,%r11 1258 movq 0(%rsi,%rcx,1),%rbx 1259 addq %rbp,%r10 1260 adcq $0,%r11 1261 1262 imulq 16(%rdi,%rcx,1),%r14 1263 xorq %r12,%r12 1264 movq 8(%rsi,%rcx,1),%r9 1265 addq %r10,%r13 1266 movq 16(%rdi,%rcx,1),%r10 1267 adcq $0,%r12 1268 mulq %r15 1269 addq %rax,%r13 1270 movq %rbx,%rax 1271 adcq %rdx,%r12 1272 movq %r13,(%rdi) 1273 1274 xorq %rbp,%rbp 1275 addq 8(%rdi),%r12 1276 adcq %rbp,%rbp 1277 addq %r11,%r12 1278 leaq 16(%rdi),%rdi 1279 adcq $0,%rbp 1280 movq %r12,-8(%rdi) 1281 cmpq 8(%rsp),%rdi 1282 jb .Lsqr4x_mont_outer 1283 1284 movq 0(%rsp),%r9 1285 movq %rbp,(%rdi) 1286 movq 64(%rsp,%r9,1),%rax 1287 leaq 64(%rsp,%r9,1),%rbx 1288 movq 40(%rsp),%rsi 1289 shrq $5,%r9 1290 movq 8(%rbx),%rdx 1291 xorq %rbp,%rbp 1292 1293 movq 32(%rsp),%rdi 1294 subq 0(%rsi),%rax 1295 movq 16(%rbx),%r10 1296 movq 24(%rbx),%r11 1297 sbbq 8(%rsi),%rdx 1298 leaq -1(%r9),%rcx 1299 jmp .Lsqr4x_sub 1300 .align 16 1301 .Lsqr4x_sub: 1302 movq %rax,0(%rdi,%rbp,8) 1303 movq %rdx,8(%rdi,%rbp,8) 1304 sbbq 16(%rsi,%rbp,8),%r10 1305 movq 32(%rbx,%rbp,8),%rax 1306 movq 40(%rbx,%rbp,8),%rdx 1307 sbbq 24(%rsi,%rbp,8),%r11 1308 movq %r10,16(%rdi,%rbp,8) 1309 movq %r11,24(%rdi,%rbp,8) 1310 sbbq 32(%rsi,%rbp,8),%rax 1311 movq 48(%rbx,%rbp,8),%r10 1312 movq 56(%rbx,%rbp,8),%r11 1313 sbbq 40(%rsi,%rbp,8),%rdx 1314 leaq 4(%rbp),%rbp 1315 decq %rcx 1316 jnz .Lsqr4x_sub 1317 1318 movq %rax,0(%rdi,%rbp,8) 1319 movq 32(%rbx,%rbp,8),%rax 1320 sbbq 16(%rsi,%rbp,8),%r10 1321 movq %rdx,8(%rdi,%rbp,8) 1322 sbbq 24(%rsi,%rbp,8),%r11 1323 movq %r10,16(%rdi,%rbp,8) 1324 1325 sbbq $0,%rax 1326 movq %r11,24(%rdi,%rbp,8) 1327 xorq %rbp,%rbp 1328 andq %rax,%rbx 1329 notq %rax 1330 movq %rdi,%rsi 1331 andq %rax,%rsi 1332 leaq -1(%r9),%rcx 1333 orq %rsi,%rbx 1334 1335 pxor %xmm0,%xmm0 1336 leaq 64(%rsp,%r9,8),%rsi 1337 movdqu (%rbx),%xmm1 1338 leaq (%rsi,%r9,8),%rsi 1339 movdqa %xmm0,64(%rsp) 1340 movdqa %xmm0,(%rsi) 1341 movdqu %xmm1,(%rdi) 1342 jmp .Lsqr4x_copy 1343 .align 16 1344 .Lsqr4x_copy: 1345 movdqu 16(%rbx,%rbp,1),%xmm2 1346 movdqu 32(%rbx,%rbp,1),%xmm1 1347 movdqa %xmm0,80(%rsp,%rbp,1) 1348 movdqa %xmm0,96(%rsp,%rbp,1) 1349 movdqa %xmm0,16(%rsi,%rbp,1) 1350 movdqa %xmm0,32(%rsi,%rbp,1) 1351 movdqu %xmm2,16(%rdi,%rbp,1) 1352 movdqu %xmm1,32(%rdi,%rbp,1) 1353 leaq 32(%rbp),%rbp 1354 decq %rcx 1355 jnz .Lsqr4x_copy 1356 1357 movdqu 16(%rbx,%rbp,1),%xmm2 1358 movdqa %xmm0,80(%rsp,%rbp,1) 1359 movdqa %xmm0,16(%rsi,%rbp,1) 1360 movdqu %xmm2,16(%rdi,%rbp,1) 1361 movq 56(%rsp),%rsi 1362 movq $1,%rax 1363 movq 0(%rsi),%r15 1364 movq 8(%rsi),%r14 1365 movq 16(%rsi),%r13 1366 movq 24(%rsi),%r12 1367 movq 32(%rsi),%rbp 1368 movq 40(%rsi),%rbx 1369 leaq 48(%rsi),%rsp 1370 .Lsqr4x_epilogue: 1371 .byte 0xf3,0xc3 1372 .size bn_sqr4x_mont,.-bn_sqr4x_mont 1373 .byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 1374 .align 16 1375