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