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