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