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