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