Home | History | Annotate | Line # | Download | only in x86_64
      1 #include <machine/asm.h>
      2 .text
      3 
      4 .globl	x25519_fe51_mul
      5 .type	x25519_fe51_mul,@function
      6 .align	32
      7 x25519_fe51_mul:
      8 .cfi_startproc
      9 	pushq	%rbp
     10 .cfi_adjust_cfa_offset	8
     11 .cfi_offset	%rbp,-16
     12 	pushq	%rbx
     13 .cfi_adjust_cfa_offset	8
     14 .cfi_offset	%rbx,-24
     15 	pushq	%r12
     16 .cfi_adjust_cfa_offset	8
     17 .cfi_offset	%r12,-32
     18 	pushq	%r13
     19 .cfi_adjust_cfa_offset	8
     20 .cfi_offset	%r13,-40
     21 	pushq	%r14
     22 .cfi_adjust_cfa_offset	8
     23 .cfi_offset	%r14,-48
     24 	pushq	%r15
     25 .cfi_adjust_cfa_offset	8
     26 .cfi_offset	%r15,-56
     27 	leaq	-40(%rsp),%rsp
     28 .cfi_adjust_cfa_offset	40
     29 .Lfe51_mul_body:
     30 
     31 	movq	0(%rsi),%rax
     32 	movq	0(%rdx),%r11
     33 	movq	8(%rdx),%r12
     34 	movq	16(%rdx),%r13
     35 	movq	24(%rdx),%rbp
     36 	movq	32(%rdx),%r14
     37 
     38 	movq	%rdi,32(%rsp)
     39 	movq	%rax,%rdi
     40 	mulq	%r11
     41 	movq	%r11,0(%rsp)
     42 	movq	%rax,%rbx
     43 	movq	%rdi,%rax
     44 	movq	%rdx,%rcx
     45 	mulq	%r12
     46 	movq	%r12,8(%rsp)
     47 	movq	%rax,%r8
     48 	movq	%rdi,%rax
     49 	leaq	(%r14,%r14,8),%r15
     50 	movq	%rdx,%r9
     51 	mulq	%r13
     52 	movq	%r13,16(%rsp)
     53 	movq	%rax,%r10
     54 	movq	%rdi,%rax
     55 	leaq	(%r14,%r15,2),%rdi
     56 	movq	%rdx,%r11
     57 	mulq	%rbp
     58 	movq	%rax,%r12
     59 	movq	0(%rsi),%rax
     60 	movq	%rdx,%r13
     61 	mulq	%r14
     62 	movq	%rax,%r14
     63 	movq	8(%rsi),%rax
     64 	movq	%rdx,%r15
     65 
     66 	mulq	%rdi
     67 	addq	%rax,%rbx
     68 	movq	16(%rsi),%rax
     69 	adcq	%rdx,%rcx
     70 	mulq	%rdi
     71 	addq	%rax,%r8
     72 	movq	24(%rsi),%rax
     73 	adcq	%rdx,%r9
     74 	mulq	%rdi
     75 	addq	%rax,%r10
     76 	movq	32(%rsi),%rax
     77 	adcq	%rdx,%r11
     78 	mulq	%rdi
     79 	imulq	$19,%rbp,%rdi
     80 	addq	%rax,%r12
     81 	movq	8(%rsi),%rax
     82 	adcq	%rdx,%r13
     83 	mulq	%rbp
     84 	movq	16(%rsp),%rbp
     85 	addq	%rax,%r14
     86 	movq	16(%rsi),%rax
     87 	adcq	%rdx,%r15
     88 
     89 	mulq	%rdi
     90 	addq	%rax,%rbx
     91 	movq	24(%rsi),%rax
     92 	adcq	%rdx,%rcx
     93 	mulq	%rdi
     94 	addq	%rax,%r8
     95 	movq	32(%rsi),%rax
     96 	adcq	%rdx,%r9
     97 	mulq	%rdi
     98 	imulq	$19,%rbp,%rdi
     99 	addq	%rax,%r10
    100 	movq	8(%rsi),%rax
    101 	adcq	%rdx,%r11
    102 	mulq	%rbp
    103 	addq	%rax,%r12
    104 	movq	16(%rsi),%rax
    105 	adcq	%rdx,%r13
    106 	mulq	%rbp
    107 	movq	8(%rsp),%rbp
    108 	addq	%rax,%r14
    109 	movq	24(%rsi),%rax
    110 	adcq	%rdx,%r15
    111 
    112 	mulq	%rdi
    113 	addq	%rax,%rbx
    114 	movq	32(%rsi),%rax
    115 	adcq	%rdx,%rcx
    116 	mulq	%rdi
    117 	addq	%rax,%r8
    118 	movq	8(%rsi),%rax
    119 	adcq	%rdx,%r9
    120 	mulq	%rbp
    121 	imulq	$19,%rbp,%rdi
    122 	addq	%rax,%r10
    123 	movq	16(%rsi),%rax
    124 	adcq	%rdx,%r11
    125 	mulq	%rbp
    126 	addq	%rax,%r12
    127 	movq	24(%rsi),%rax
    128 	adcq	%rdx,%r13
    129 	mulq	%rbp
    130 	movq	0(%rsp),%rbp
    131 	addq	%rax,%r14
    132 	movq	32(%rsi),%rax
    133 	adcq	%rdx,%r15
    134 
    135 	mulq	%rdi
    136 	addq	%rax,%rbx
    137 	movq	8(%rsi),%rax
    138 	adcq	%rdx,%rcx
    139 	mulq	%rbp
    140 	addq	%rax,%r8
    141 	movq	16(%rsi),%rax
    142 	adcq	%rdx,%r9
    143 	mulq	%rbp
    144 	addq	%rax,%r10
    145 	movq	24(%rsi),%rax
    146 	adcq	%rdx,%r11
    147 	mulq	%rbp
    148 	addq	%rax,%r12
    149 	movq	32(%rsi),%rax
    150 	adcq	%rdx,%r13
    151 	mulq	%rbp
    152 	addq	%rax,%r14
    153 	adcq	%rdx,%r15
    154 
    155 	movq	32(%rsp),%rdi
    156 	jmp	.Lreduce51
    157 .Lfe51_mul_epilogue:
    158 .cfi_endproc
    159 .size	x25519_fe51_mul,.-x25519_fe51_mul
    160 
    161 .globl	x25519_fe51_sqr
    162 .type	x25519_fe51_sqr,@function
    163 .align	32
    164 x25519_fe51_sqr:
    165 .cfi_startproc
    166 	pushq	%rbp
    167 .cfi_adjust_cfa_offset	8
    168 .cfi_offset	%rbp,-16
    169 	pushq	%rbx
    170 .cfi_adjust_cfa_offset	8
    171 .cfi_offset	%rbx,-24
    172 	pushq	%r12
    173 .cfi_adjust_cfa_offset	8
    174 .cfi_offset	%r12,-32
    175 	pushq	%r13
    176 .cfi_adjust_cfa_offset	8
    177 .cfi_offset	%r13,-40
    178 	pushq	%r14
    179 .cfi_adjust_cfa_offset	8
    180 .cfi_offset	%r14,-48
    181 	pushq	%r15
    182 .cfi_adjust_cfa_offset	8
    183 .cfi_offset	%r15,-56
    184 	leaq	-40(%rsp),%rsp
    185 .cfi_adjust_cfa_offset	40
    186 .Lfe51_sqr_body:
    187 
    188 	movq	0(%rsi),%rax
    189 	movq	16(%rsi),%r15
    190 	movq	32(%rsi),%rbp
    191 
    192 	movq	%rdi,32(%rsp)
    193 	leaq	(%rax,%rax,1),%r14
    194 	mulq	%rax
    195 	movq	%rax,%rbx
    196 	movq	8(%rsi),%rax
    197 	movq	%rdx,%rcx
    198 	mulq	%r14
    199 	movq	%rax,%r8
    200 	movq	%r15,%rax
    201 	movq	%r15,0(%rsp)
    202 	movq	%rdx,%r9
    203 	mulq	%r14
    204 	movq	%rax,%r10
    205 	movq	24(%rsi),%rax
    206 	movq	%rdx,%r11
    207 	imulq	$19,%rbp,%rdi
    208 	mulq	%r14
    209 	movq	%rax,%r12
    210 	movq	%rbp,%rax
    211 	movq	%rdx,%r13
    212 	mulq	%r14
    213 	movq	%rax,%r14
    214 	movq	%rbp,%rax
    215 	movq	%rdx,%r15
    216 
    217 	mulq	%rdi
    218 	addq	%rax,%r12
    219 	movq	8(%rsi),%rax
    220 	adcq	%rdx,%r13
    221 
    222 	movq	24(%rsi),%rsi
    223 	leaq	(%rax,%rax,1),%rbp
    224 	mulq	%rax
    225 	addq	%rax,%r10
    226 	movq	0(%rsp),%rax
    227 	adcq	%rdx,%r11
    228 	mulq	%rbp
    229 	addq	%rax,%r12
    230 	movq	%rbp,%rax
    231 	adcq	%rdx,%r13
    232 	mulq	%rsi
    233 	addq	%rax,%r14
    234 	movq	%rbp,%rax
    235 	adcq	%rdx,%r15
    236 	imulq	$19,%rsi,%rbp
    237 	mulq	%rdi
    238 	addq	%rax,%rbx
    239 	leaq	(%rsi,%rsi,1),%rax
    240 	adcq	%rdx,%rcx
    241 
    242 	mulq	%rdi
    243 	addq	%rax,%r10
    244 	movq	%rsi,%rax
    245 	adcq	%rdx,%r11
    246 	mulq	%rbp
    247 	addq	%rax,%r8
    248 	movq	0(%rsp),%rax
    249 	adcq	%rdx,%r9
    250 
    251 	leaq	(%rax,%rax,1),%rsi
    252 	mulq	%rax
    253 	addq	%rax,%r14
    254 	movq	%rbp,%rax
    255 	adcq	%rdx,%r15
    256 	mulq	%rsi
    257 	addq	%rax,%rbx
    258 	movq	%rsi,%rax
    259 	adcq	%rdx,%rcx
    260 	mulq	%rdi
    261 	addq	%rax,%r8
    262 	adcq	%rdx,%r9
    263 
    264 	movq	32(%rsp),%rdi
    265 	jmp	.Lreduce51
    266 
    267 .align	32
    268 .Lreduce51:
    269 	movq	$0x7ffffffffffff,%rbp
    270 
    271 	movq	%r10,%rdx
    272 	shrq	$51,%r10
    273 	shlq	$13,%r11
    274 	andq	%rbp,%rdx
    275 	orq	%r10,%r11
    276 	addq	%r11,%r12
    277 	adcq	$0,%r13
    278 
    279 	movq	%rbx,%rax
    280 	shrq	$51,%rbx
    281 	shlq	$13,%rcx
    282 	andq	%rbp,%rax
    283 	orq	%rbx,%rcx
    284 	addq	%rcx,%r8
    285 	adcq	$0,%r9
    286 
    287 	movq	%r12,%rbx
    288 	shrq	$51,%r12
    289 	shlq	$13,%r13
    290 	andq	%rbp,%rbx
    291 	orq	%r12,%r13
    292 	addq	%r13,%r14
    293 	adcq	$0,%r15
    294 
    295 	movq	%r8,%rcx
    296 	shrq	$51,%r8
    297 	shlq	$13,%r9
    298 	andq	%rbp,%rcx
    299 	orq	%r8,%r9
    300 	addq	%r9,%rdx
    301 
    302 	movq	%r14,%r10
    303 	shrq	$51,%r14
    304 	shlq	$13,%r15
    305 	andq	%rbp,%r10
    306 	orq	%r14,%r15
    307 
    308 	leaq	(%r15,%r15,8),%r14
    309 	leaq	(%r15,%r14,2),%r15
    310 	addq	%r15,%rax
    311 
    312 	movq	%rdx,%r8
    313 	andq	%rbp,%rdx
    314 	shrq	$51,%r8
    315 	addq	%r8,%rbx
    316 
    317 	movq	%rax,%r9
    318 	andq	%rbp,%rax
    319 	shrq	$51,%r9
    320 	addq	%r9,%rcx
    321 
    322 	movq	%rax,0(%rdi)
    323 	movq	%rcx,8(%rdi)
    324 	movq	%rdx,16(%rdi)
    325 	movq	%rbx,24(%rdi)
    326 	movq	%r10,32(%rdi)
    327 
    328 	movq	40(%rsp),%r15
    329 .cfi_restore	%r15
    330 	movq	48(%rsp),%r14
    331 .cfi_restore	%r14
    332 	movq	56(%rsp),%r13
    333 .cfi_restore	%r13
    334 	movq	64(%rsp),%r12
    335 .cfi_restore	%r12
    336 	movq	72(%rsp),%rbx
    337 .cfi_restore	%rbx
    338 	movq	80(%rsp),%rbp
    339 .cfi_restore	%rbp
    340 	leaq	88(%rsp),%rsp
    341 .cfi_adjust_cfa_offset	88
    342 .Lfe51_sqr_epilogue:
    343 	.byte	0xf3,0xc3
    344 .cfi_endproc
    345 .size	x25519_fe51_sqr,.-x25519_fe51_sqr
    346 
    347 .globl	x25519_fe51_mul121666
    348 .type	x25519_fe51_mul121666,@function
    349 .align	32
    350 x25519_fe51_mul121666:
    351 .cfi_startproc
    352 	pushq	%rbp
    353 .cfi_adjust_cfa_offset	8
    354 .cfi_offset	%rbp,-16
    355 	pushq	%rbx
    356 .cfi_adjust_cfa_offset	8
    357 .cfi_offset	%rbx,-24
    358 	pushq	%r12
    359 .cfi_adjust_cfa_offset	8
    360 .cfi_offset	%r12,-32
    361 	pushq	%r13
    362 .cfi_adjust_cfa_offset	8
    363 .cfi_offset	%r13,-40
    364 	pushq	%r14
    365 .cfi_adjust_cfa_offset	8
    366 .cfi_offset	%r14,-48
    367 	pushq	%r15
    368 .cfi_adjust_cfa_offset	8
    369 .cfi_offset	%r15,-56
    370 	leaq	-40(%rsp),%rsp
    371 .cfi_adjust_cfa_offset	40
    372 .Lfe51_mul121666_body:
    373 	movl	$121666,%eax
    374 
    375 	mulq	0(%rsi)
    376 	movq	%rax,%rbx
    377 	movl	$121666,%eax
    378 	movq	%rdx,%rcx
    379 	mulq	8(%rsi)
    380 	movq	%rax,%r8
    381 	movl	$121666,%eax
    382 	movq	%rdx,%r9
    383 	mulq	16(%rsi)
    384 	movq	%rax,%r10
    385 	movl	$121666,%eax
    386 	movq	%rdx,%r11
    387 	mulq	24(%rsi)
    388 	movq	%rax,%r12
    389 	movl	$121666,%eax
    390 	movq	%rdx,%r13
    391 	mulq	32(%rsi)
    392 	movq	%rax,%r14
    393 	movq	%rdx,%r15
    394 
    395 	jmp	.Lreduce51
    396 .Lfe51_mul121666_epilogue:
    397 .cfi_endproc
    398 .size	x25519_fe51_mul121666,.-x25519_fe51_mul121666
    399 
    400 .globl	x25519_fe64_eligible
    401 .type	x25519_fe64_eligible,@function
    402 .align	32
    403 x25519_fe64_eligible:
    404 .cfi_startproc
    405 	movl	OPENSSL_ia32cap_P+8(%rip),%ecx
    406 	xorl	%eax,%eax
    407 	andl	$0x80100,%ecx
    408 	cmpl	$0x80100,%ecx
    409 	cmovel	%ecx,%eax
    410 	.byte	0xf3,0xc3
    411 .cfi_endproc
    412 .size	x25519_fe64_eligible,.-x25519_fe64_eligible
    413 
    414 .globl	x25519_fe64_mul
    415 .type	x25519_fe64_mul,@function
    416 .align	32
    417 x25519_fe64_mul:
    418 .cfi_startproc
    419 	pushq	%rbp
    420 .cfi_adjust_cfa_offset	8
    421 .cfi_offset	%rbp,-16
    422 	pushq	%rbx
    423 .cfi_adjust_cfa_offset	8
    424 .cfi_offset	%rbx,-24
    425 	pushq	%r12
    426 .cfi_adjust_cfa_offset	8
    427 .cfi_offset	%r12,-32
    428 	pushq	%r13
    429 .cfi_adjust_cfa_offset	8
    430 .cfi_offset	%r13,-40
    431 	pushq	%r14
    432 .cfi_adjust_cfa_offset	8
    433 .cfi_offset	%r14,-48
    434 	pushq	%r15
    435 .cfi_adjust_cfa_offset	8
    436 .cfi_offset	%r15,-56
    437 	pushq	%rdi
    438 .cfi_adjust_cfa_offset	8
    439 .cfi_offset	%rdi,-64
    440 	leaq	-16(%rsp),%rsp
    441 .cfi_adjust_cfa_offset	16
    442 .Lfe64_mul_body:
    443 
    444 	movq	%rdx,%rax
    445 	movq	0(%rdx),%rbp
    446 	movq	0(%rsi),%rdx
    447 	movq	8(%rax),%rcx
    448 	movq	16(%rax),%r14
    449 	movq	24(%rax),%r15
    450 
    451 	mulxq	%rbp,%r8,%rax
    452 	xorl	%edi,%edi
    453 	mulxq	%rcx,%r9,%rbx
    454 	adcxq	%rax,%r9
    455 	mulxq	%r14,%r10,%rax
    456 	adcxq	%rbx,%r10
    457 	mulxq	%r15,%r11,%r12
    458 	movq	8(%rsi),%rdx
    459 	adcxq	%rax,%r11
    460 	movq	%r14,(%rsp)
    461 	adcxq	%rdi,%r12
    462 
    463 	mulxq	%rbp,%rax,%rbx
    464 	adoxq	%rax,%r9
    465 	adcxq	%rbx,%r10
    466 	mulxq	%rcx,%rax,%rbx
    467 	adoxq	%rax,%r10
    468 	adcxq	%rbx,%r11
    469 	mulxq	%r14,%rax,%rbx
    470 	adoxq	%rax,%r11
    471 	adcxq	%rbx,%r12
    472 	mulxq	%r15,%rax,%r13
    473 	movq	16(%rsi),%rdx
    474 	adoxq	%rax,%r12
    475 	adcxq	%rdi,%r13
    476 	adoxq	%rdi,%r13
    477 
    478 	mulxq	%rbp,%rax,%rbx
    479 	adcxq	%rax,%r10
    480 	adoxq	%rbx,%r11
    481 	mulxq	%rcx,%rax,%rbx
    482 	adcxq	%rax,%r11
    483 	adoxq	%rbx,%r12
    484 	mulxq	%r14,%rax,%rbx
    485 	adcxq	%rax,%r12
    486 	adoxq	%rbx,%r13
    487 	mulxq	%r15,%rax,%r14
    488 	movq	24(%rsi),%rdx
    489 	adcxq	%rax,%r13
    490 	adoxq	%rdi,%r14
    491 	adcxq	%rdi,%r14
    492 
    493 	mulxq	%rbp,%rax,%rbx
    494 	adoxq	%rax,%r11
    495 	adcxq	%rbx,%r12
    496 	mulxq	%rcx,%rax,%rbx
    497 	adoxq	%rax,%r12
    498 	adcxq	%rbx,%r13
    499 	mulxq	(%rsp),%rax,%rbx
    500 	adoxq	%rax,%r13
    501 	adcxq	%rbx,%r14
    502 	mulxq	%r15,%rax,%r15
    503 	movl	$38,%edx
    504 	adoxq	%rax,%r14
    505 	adcxq	%rdi,%r15
    506 	adoxq	%rdi,%r15
    507 
    508 	jmp	.Lreduce64
    509 .Lfe64_mul_epilogue:
    510 .cfi_endproc
    511 .size	x25519_fe64_mul,.-x25519_fe64_mul
    512 
    513 .globl	x25519_fe64_sqr
    514 .type	x25519_fe64_sqr,@function
    515 .align	32
    516 x25519_fe64_sqr:
    517 .cfi_startproc
    518 	pushq	%rbp
    519 .cfi_adjust_cfa_offset	8
    520 .cfi_offset	%rbp,-16
    521 	pushq	%rbx
    522 .cfi_adjust_cfa_offset	8
    523 .cfi_offset	%rbx,-24
    524 	pushq	%r12
    525 .cfi_adjust_cfa_offset	8
    526 .cfi_offset	%r12,-32
    527 	pushq	%r13
    528 .cfi_adjust_cfa_offset	8
    529 .cfi_offset	%r13,-40
    530 	pushq	%r14
    531 .cfi_adjust_cfa_offset	8
    532 .cfi_offset	%r14,-48
    533 	pushq	%r15
    534 .cfi_adjust_cfa_offset	8
    535 .cfi_offset	%r15,-56
    536 	pushq	%rdi
    537 .cfi_adjust_cfa_offset	8
    538 .cfi_offset	%rdi,-64
    539 	leaq	-16(%rsp),%rsp
    540 .cfi_adjust_cfa_offset	16
    541 .Lfe64_sqr_body:
    542 
    543 	movq	0(%rsi),%rdx
    544 	movq	8(%rsi),%rcx
    545 	movq	16(%rsi),%rbp
    546 	movq	24(%rsi),%rsi
    547 
    548 
    549 	mulxq	%rdx,%r8,%r15
    550 	mulxq	%rcx,%r9,%rax
    551 	xorl	%edi,%edi
    552 	mulxq	%rbp,%r10,%rbx
    553 	adcxq	%rax,%r10
    554 	mulxq	%rsi,%r11,%r12
    555 	movq	%rcx,%rdx
    556 	adcxq	%rbx,%r11
    557 	adcxq	%rdi,%r12
    558 
    559 
    560 	mulxq	%rbp,%rax,%rbx
    561 	adoxq	%rax,%r11
    562 	adcxq	%rbx,%r12
    563 	mulxq	%rsi,%rax,%r13
    564 	movq	%rbp,%rdx
    565 	adoxq	%rax,%r12
    566 	adcxq	%rdi,%r13
    567 
    568 
    569 	mulxq	%rsi,%rax,%r14
    570 	movq	%rcx,%rdx
    571 	adoxq	%rax,%r13
    572 	adcxq	%rdi,%r14
    573 	adoxq	%rdi,%r14
    574 
    575 	adcxq	%r9,%r9
    576 	adoxq	%r15,%r9
    577 	adcxq	%r10,%r10
    578 	mulxq	%rdx,%rax,%rbx
    579 	movq	%rbp,%rdx
    580 	adcxq	%r11,%r11
    581 	adoxq	%rax,%r10
    582 	adcxq	%r12,%r12
    583 	adoxq	%rbx,%r11
    584 	mulxq	%rdx,%rax,%rbx
    585 	movq	%rsi,%rdx
    586 	adcxq	%r13,%r13
    587 	adoxq	%rax,%r12
    588 	adcxq	%r14,%r14
    589 	adoxq	%rbx,%r13
    590 	mulxq	%rdx,%rax,%r15
    591 	movl	$38,%edx
    592 	adoxq	%rax,%r14
    593 	adcxq	%rdi,%r15
    594 	adoxq	%rdi,%r15
    595 	jmp	.Lreduce64
    596 
    597 .align	32
    598 .Lreduce64:
    599 	mulxq	%r12,%rax,%rbx
    600 	adcxq	%rax,%r8
    601 	adoxq	%rbx,%r9
    602 	mulxq	%r13,%rax,%rbx
    603 	adcxq	%rax,%r9
    604 	adoxq	%rbx,%r10
    605 	mulxq	%r14,%rax,%rbx
    606 	adcxq	%rax,%r10
    607 	adoxq	%rbx,%r11
    608 	mulxq	%r15,%rax,%r12
    609 	adcxq	%rax,%r11
    610 	adoxq	%rdi,%r12
    611 	adcxq	%rdi,%r12
    612 
    613 	movq	16(%rsp),%rdi
    614 	imulq	%rdx,%r12
    615 
    616 	addq	%r12,%r8
    617 	adcq	$0,%r9
    618 	adcq	$0,%r10
    619 	adcq	$0,%r11
    620 
    621 	sbbq	%rax,%rax
    622 	andq	$38,%rax
    623 
    624 	addq	%rax,%r8
    625 	movq	%r9,8(%rdi)
    626 	movq	%r10,16(%rdi)
    627 	movq	%r11,24(%rdi)
    628 	movq	%r8,0(%rdi)
    629 
    630 	movq	24(%rsp),%r15
    631 .cfi_restore	%r15
    632 	movq	32(%rsp),%r14
    633 .cfi_restore	%r14
    634 	movq	40(%rsp),%r13
    635 .cfi_restore	%r13
    636 	movq	48(%rsp),%r12
    637 .cfi_restore	%r12
    638 	movq	56(%rsp),%rbx
    639 .cfi_restore	%rbx
    640 	movq	64(%rsp),%rbp
    641 .cfi_restore	%rbp
    642 	leaq	72(%rsp),%rsp
    643 .cfi_adjust_cfa_offset	88
    644 .Lfe64_sqr_epilogue:
    645 	.byte	0xf3,0xc3
    646 .cfi_endproc
    647 .size	x25519_fe64_sqr,.-x25519_fe64_sqr
    648 
    649 .globl	x25519_fe64_mul121666
    650 .type	x25519_fe64_mul121666,@function
    651 .align	32
    652 x25519_fe64_mul121666:
    653 .Lfe64_mul121666_body:
    654 .cfi_startproc
    655 	movl	$121666,%edx
    656 	mulxq	0(%rsi),%r8,%rcx
    657 	mulxq	8(%rsi),%r9,%rax
    658 	addq	%rcx,%r9
    659 	mulxq	16(%rsi),%r10,%rcx
    660 	adcq	%rax,%r10
    661 	mulxq	24(%rsi),%r11,%rax
    662 	adcq	%rcx,%r11
    663 	adcq	$0,%rax
    664 
    665 	imulq	$38,%rax,%rax
    666 
    667 	addq	%rax,%r8
    668 	adcq	$0,%r9
    669 	adcq	$0,%r10
    670 	adcq	$0,%r11
    671 
    672 	sbbq	%rax,%rax
    673 	andq	$38,%rax
    674 
    675 	addq	%rax,%r8
    676 	movq	%r9,8(%rdi)
    677 	movq	%r10,16(%rdi)
    678 	movq	%r11,24(%rdi)
    679 	movq	%r8,0(%rdi)
    680 
    681 .Lfe64_mul121666_epilogue:
    682 	.byte	0xf3,0xc3
    683 .cfi_endproc
    684 .size	x25519_fe64_mul121666,.-x25519_fe64_mul121666
    685 
    686 .globl	x25519_fe64_add
    687 .type	x25519_fe64_add,@function
    688 .align	32
    689 x25519_fe64_add:
    690 .Lfe64_add_body:
    691 .cfi_startproc
    692 	movq	0(%rsi),%r8
    693 	movq	8(%rsi),%r9
    694 	movq	16(%rsi),%r10
    695 	movq	24(%rsi),%r11
    696 
    697 	addq	0(%rdx),%r8
    698 	adcq	8(%rdx),%r9
    699 	adcq	16(%rdx),%r10
    700 	adcq	24(%rdx),%r11
    701 
    702 	sbbq	%rax,%rax
    703 	andq	$38,%rax
    704 
    705 	addq	%rax,%r8
    706 	adcq	$0,%r9
    707 	adcq	$0,%r10
    708 	movq	%r9,8(%rdi)
    709 	adcq	$0,%r11
    710 	movq	%r10,16(%rdi)
    711 	sbbq	%rax,%rax
    712 	movq	%r11,24(%rdi)
    713 	andq	$38,%rax
    714 
    715 	addq	%rax,%r8
    716 	movq	%r8,0(%rdi)
    717 
    718 .Lfe64_add_epilogue:
    719 	.byte	0xf3,0xc3
    720 .cfi_endproc
    721 .size	x25519_fe64_add,.-x25519_fe64_add
    722 
    723 .globl	x25519_fe64_sub
    724 .type	x25519_fe64_sub,@function
    725 .align	32
    726 x25519_fe64_sub:
    727 .Lfe64_sub_body:
    728 .cfi_startproc
    729 	movq	0(%rsi),%r8
    730 	movq	8(%rsi),%r9
    731 	movq	16(%rsi),%r10
    732 	movq	24(%rsi),%r11
    733 
    734 	subq	0(%rdx),%r8
    735 	sbbq	8(%rdx),%r9
    736 	sbbq	16(%rdx),%r10
    737 	sbbq	24(%rdx),%r11
    738 
    739 	sbbq	%rax,%rax
    740 	andq	$38,%rax
    741 
    742 	subq	%rax,%r8
    743 	sbbq	$0,%r9
    744 	sbbq	$0,%r10
    745 	movq	%r9,8(%rdi)
    746 	sbbq	$0,%r11
    747 	movq	%r10,16(%rdi)
    748 	sbbq	%rax,%rax
    749 	movq	%r11,24(%rdi)
    750 	andq	$38,%rax
    751 
    752 	subq	%rax,%r8
    753 	movq	%r8,0(%rdi)
    754 
    755 .Lfe64_sub_epilogue:
    756 	.byte	0xf3,0xc3
    757 .cfi_endproc
    758 .size	x25519_fe64_sub,.-x25519_fe64_sub
    759 
    760 .globl	x25519_fe64_tobytes
    761 .type	x25519_fe64_tobytes,@function
    762 .align	32
    763 x25519_fe64_tobytes:
    764 .Lfe64_to_body:
    765 .cfi_startproc
    766 	movq	0(%rsi),%r8
    767 	movq	8(%rsi),%r9
    768 	movq	16(%rsi),%r10
    769 	movq	24(%rsi),%r11
    770 
    771 
    772 	leaq	(%r11,%r11,1),%rax
    773 	sarq	$63,%r11
    774 	shrq	$1,%rax
    775 	andq	$19,%r11
    776 	addq	$19,%r11
    777 
    778 	addq	%r11,%r8
    779 	adcq	$0,%r9
    780 	adcq	$0,%r10
    781 	adcq	$0,%rax
    782 
    783 	leaq	(%rax,%rax,1),%r11
    784 	sarq	$63,%rax
    785 	shrq	$1,%r11
    786 	notq	%rax
    787 	andq	$19,%rax
    788 
    789 	subq	%rax,%r8
    790 	sbbq	$0,%r9
    791 	sbbq	$0,%r10
    792 	sbbq	$0,%r11
    793 
    794 	movq	%r8,0(%rdi)
    795 	movq	%r9,8(%rdi)
    796 	movq	%r10,16(%rdi)
    797 	movq	%r11,24(%rdi)
    798 
    799 .Lfe64_to_epilogue:
    800 	.byte	0xf3,0xc3
    801 .cfi_endproc
    802 .size	x25519_fe64_tobytes,.-x25519_fe64_tobytes
    803 .byte	88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,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
    804 	.section ".note.gnu.property", "a"
    805 	.p2align 3
    806 	.long 1f - 0f
    807 	.long 4f - 1f
    808 	.long 5
    809 0:
    810 	# "GNU" encoded with .byte, since .asciz isn't supported
    811 	# on Solaris.
    812 	.byte 0x47
    813 	.byte 0x4e
    814 	.byte 0x55
    815 	.byte 0
    816 1:
    817 	.p2align 3
    818 	.long 0xc0000002
    819 	.long 3f - 2f
    820 2:
    821 	.long 3
    822 3:
    823 	.p2align 3
    824 4:
    825