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