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