• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# This file is generated from a similarly-named Perl script in the BoringSSL
2# source tree. Do not edit by hand.
3
4#if defined(__has_feature)
5#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
6#define OPENSSL_NO_ASM
7#endif
8#endif
9
10#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
11#include "ring_core_generated/prefix_symbols_asm.h"
12.text
13
14
15
16.p2align	6
17L$poly:
18.quad	0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001
19
20L$One:
21.long	1,1,1,1,1,1,1,1
22L$Two:
23.long	2,2,2,2,2,2,2,2
24L$Three:
25.long	3,3,3,3,3,3,3,3
26L$ONE_mont:
27.quad	0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe
28
29
30L$ord:
31.quad	0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000
32L$ordK:
33.quad	0xccd1c8aaee00bc4f
34
35
36
37.globl	_nistz256_neg
38.private_extern _nistz256_neg
39
40.p2align	5
41_nistz256_neg:
42
43	pushq	%r12
44
45	pushq	%r13
46
47L$neg_body:
48
49	xorq	%r8,%r8
50	xorq	%r9,%r9
51	xorq	%r10,%r10
52	xorq	%r11,%r11
53	xorq	%r13,%r13
54
55	subq	0(%rsi),%r8
56	sbbq	8(%rsi),%r9
57	sbbq	16(%rsi),%r10
58	movq	%r8,%rax
59	sbbq	24(%rsi),%r11
60	leaq	L$poly(%rip),%rsi
61	movq	%r9,%rdx
62	sbbq	$0,%r13
63
64	addq	0(%rsi),%r8
65	movq	%r10,%rcx
66	adcq	8(%rsi),%r9
67	adcq	16(%rsi),%r10
68	movq	%r11,%r12
69	adcq	24(%rsi),%r11
70	testq	%r13,%r13
71
72	cmovzq	%rax,%r8
73	cmovzq	%rdx,%r9
74	movq	%r8,0(%rdi)
75	cmovzq	%rcx,%r10
76	movq	%r9,8(%rdi)
77	cmovzq	%r12,%r11
78	movq	%r10,16(%rdi)
79	movq	%r11,24(%rdi)
80
81	movq	0(%rsp),%r13
82
83	movq	8(%rsp),%r12
84
85	leaq	16(%rsp),%rsp
86
87L$neg_epilogue:
88	.byte	0xf3,0xc3
89
90
91
92
93
94
95
96
97.globl	_p256_scalar_mul_mont
98.private_extern _p256_scalar_mul_mont
99
100.p2align	5
101_p256_scalar_mul_mont:
102
103	leaq	_OPENSSL_ia32cap_P(%rip),%rcx
104	movq	8(%rcx),%rcx
105	andl	$0x80100,%ecx
106	cmpl	$0x80100,%ecx
107	je	L$ecp_nistz256_ord_mul_montx
108	pushq	%rbp
109
110	pushq	%rbx
111
112	pushq	%r12
113
114	pushq	%r13
115
116	pushq	%r14
117
118	pushq	%r15
119
120L$ord_mul_body:
121
122	movq	0(%rdx),%rax
123	movq	%rdx,%rbx
124	leaq	L$ord(%rip),%r14
125	movq	L$ordK(%rip),%r15
126
127
128	movq	%rax,%rcx
129	mulq	0(%rsi)
130	movq	%rax,%r8
131	movq	%rcx,%rax
132	movq	%rdx,%r9
133
134	mulq	8(%rsi)
135	addq	%rax,%r9
136	movq	%rcx,%rax
137	adcq	$0,%rdx
138	movq	%rdx,%r10
139
140	mulq	16(%rsi)
141	addq	%rax,%r10
142	movq	%rcx,%rax
143	adcq	$0,%rdx
144
145	movq	%r8,%r13
146	imulq	%r15,%r8
147
148	movq	%rdx,%r11
149	mulq	24(%rsi)
150	addq	%rax,%r11
151	movq	%r8,%rax
152	adcq	$0,%rdx
153	movq	%rdx,%r12
154
155
156	mulq	0(%r14)
157	movq	%r8,%rbp
158	addq	%rax,%r13
159	movq	%r8,%rax
160	adcq	$0,%rdx
161	movq	%rdx,%rcx
162
163	subq	%r8,%r10
164	sbbq	$0,%r8
165
166	mulq	8(%r14)
167	addq	%rcx,%r9
168	adcq	$0,%rdx
169	addq	%rax,%r9
170	movq	%rbp,%rax
171	adcq	%rdx,%r10
172	movq	%rbp,%rdx
173	adcq	$0,%r8
174
175	shlq	$32,%rax
176	shrq	$32,%rdx
177	subq	%rax,%r11
178	movq	8(%rbx),%rax
179	sbbq	%rdx,%rbp
180
181	addq	%r8,%r11
182	adcq	%rbp,%r12
183	adcq	$0,%r13
184
185
186	movq	%rax,%rcx
187	mulq	0(%rsi)
188	addq	%rax,%r9
189	movq	%rcx,%rax
190	adcq	$0,%rdx
191	movq	%rdx,%rbp
192
193	mulq	8(%rsi)
194	addq	%rbp,%r10
195	adcq	$0,%rdx
196	addq	%rax,%r10
197	movq	%rcx,%rax
198	adcq	$0,%rdx
199	movq	%rdx,%rbp
200
201	mulq	16(%rsi)
202	addq	%rbp,%r11
203	adcq	$0,%rdx
204	addq	%rax,%r11
205	movq	%rcx,%rax
206	adcq	$0,%rdx
207
208	movq	%r9,%rcx
209	imulq	%r15,%r9
210
211	movq	%rdx,%rbp
212	mulq	24(%rsi)
213	addq	%rbp,%r12
214	adcq	$0,%rdx
215	xorq	%r8,%r8
216	addq	%rax,%r12
217	movq	%r9,%rax
218	adcq	%rdx,%r13
219	adcq	$0,%r8
220
221
222	mulq	0(%r14)
223	movq	%r9,%rbp
224	addq	%rax,%rcx
225	movq	%r9,%rax
226	adcq	%rdx,%rcx
227
228	subq	%r9,%r11
229	sbbq	$0,%r9
230
231	mulq	8(%r14)
232	addq	%rcx,%r10
233	adcq	$0,%rdx
234	addq	%rax,%r10
235	movq	%rbp,%rax
236	adcq	%rdx,%r11
237	movq	%rbp,%rdx
238	adcq	$0,%r9
239
240	shlq	$32,%rax
241	shrq	$32,%rdx
242	subq	%rax,%r12
243	movq	16(%rbx),%rax
244	sbbq	%rdx,%rbp
245
246	addq	%r9,%r12
247	adcq	%rbp,%r13
248	adcq	$0,%r8
249
250
251	movq	%rax,%rcx
252	mulq	0(%rsi)
253	addq	%rax,%r10
254	movq	%rcx,%rax
255	adcq	$0,%rdx
256	movq	%rdx,%rbp
257
258	mulq	8(%rsi)
259	addq	%rbp,%r11
260	adcq	$0,%rdx
261	addq	%rax,%r11
262	movq	%rcx,%rax
263	adcq	$0,%rdx
264	movq	%rdx,%rbp
265
266	mulq	16(%rsi)
267	addq	%rbp,%r12
268	adcq	$0,%rdx
269	addq	%rax,%r12
270	movq	%rcx,%rax
271	adcq	$0,%rdx
272
273	movq	%r10,%rcx
274	imulq	%r15,%r10
275
276	movq	%rdx,%rbp
277	mulq	24(%rsi)
278	addq	%rbp,%r13
279	adcq	$0,%rdx
280	xorq	%r9,%r9
281	addq	%rax,%r13
282	movq	%r10,%rax
283	adcq	%rdx,%r8
284	adcq	$0,%r9
285
286
287	mulq	0(%r14)
288	movq	%r10,%rbp
289	addq	%rax,%rcx
290	movq	%r10,%rax
291	adcq	%rdx,%rcx
292
293	subq	%r10,%r12
294	sbbq	$0,%r10
295
296	mulq	8(%r14)
297	addq	%rcx,%r11
298	adcq	$0,%rdx
299	addq	%rax,%r11
300	movq	%rbp,%rax
301	adcq	%rdx,%r12
302	movq	%rbp,%rdx
303	adcq	$0,%r10
304
305	shlq	$32,%rax
306	shrq	$32,%rdx
307	subq	%rax,%r13
308	movq	24(%rbx),%rax
309	sbbq	%rdx,%rbp
310
311	addq	%r10,%r13
312	adcq	%rbp,%r8
313	adcq	$0,%r9
314
315
316	movq	%rax,%rcx
317	mulq	0(%rsi)
318	addq	%rax,%r11
319	movq	%rcx,%rax
320	adcq	$0,%rdx
321	movq	%rdx,%rbp
322
323	mulq	8(%rsi)
324	addq	%rbp,%r12
325	adcq	$0,%rdx
326	addq	%rax,%r12
327	movq	%rcx,%rax
328	adcq	$0,%rdx
329	movq	%rdx,%rbp
330
331	mulq	16(%rsi)
332	addq	%rbp,%r13
333	adcq	$0,%rdx
334	addq	%rax,%r13
335	movq	%rcx,%rax
336	adcq	$0,%rdx
337
338	movq	%r11,%rcx
339	imulq	%r15,%r11
340
341	movq	%rdx,%rbp
342	mulq	24(%rsi)
343	addq	%rbp,%r8
344	adcq	$0,%rdx
345	xorq	%r10,%r10
346	addq	%rax,%r8
347	movq	%r11,%rax
348	adcq	%rdx,%r9
349	adcq	$0,%r10
350
351
352	mulq	0(%r14)
353	movq	%r11,%rbp
354	addq	%rax,%rcx
355	movq	%r11,%rax
356	adcq	%rdx,%rcx
357
358	subq	%r11,%r13
359	sbbq	$0,%r11
360
361	mulq	8(%r14)
362	addq	%rcx,%r12
363	adcq	$0,%rdx
364	addq	%rax,%r12
365	movq	%rbp,%rax
366	adcq	%rdx,%r13
367	movq	%rbp,%rdx
368	adcq	$0,%r11
369
370	shlq	$32,%rax
371	shrq	$32,%rdx
372	subq	%rax,%r8
373	sbbq	%rdx,%rbp
374
375	addq	%r11,%r8
376	adcq	%rbp,%r9
377	adcq	$0,%r10
378
379
380	movq	%r12,%rsi
381	subq	0(%r14),%r12
382	movq	%r13,%r11
383	sbbq	8(%r14),%r13
384	movq	%r8,%rcx
385	sbbq	16(%r14),%r8
386	movq	%r9,%rbp
387	sbbq	24(%r14),%r9
388	sbbq	$0,%r10
389
390	cmovcq	%rsi,%r12
391	cmovcq	%r11,%r13
392	cmovcq	%rcx,%r8
393	cmovcq	%rbp,%r9
394
395	movq	%r12,0(%rdi)
396	movq	%r13,8(%rdi)
397	movq	%r8,16(%rdi)
398	movq	%r9,24(%rdi)
399
400	movq	0(%rsp),%r15
401
402	movq	8(%rsp),%r14
403
404	movq	16(%rsp),%r13
405
406	movq	24(%rsp),%r12
407
408	movq	32(%rsp),%rbx
409
410	movq	40(%rsp),%rbp
411
412	leaq	48(%rsp),%rsp
413
414L$ord_mul_epilogue:
415	.byte	0xf3,0xc3
416
417
418
419
420
421
422
423
424
425.globl	_p256_scalar_sqr_rep_mont
426.private_extern _p256_scalar_sqr_rep_mont
427
428.p2align	5
429_p256_scalar_sqr_rep_mont:
430
431	leaq	_OPENSSL_ia32cap_P(%rip),%rcx
432	movq	8(%rcx),%rcx
433	andl	$0x80100,%ecx
434	cmpl	$0x80100,%ecx
435	je	L$ecp_nistz256_ord_sqr_montx
436	pushq	%rbp
437
438	pushq	%rbx
439
440	pushq	%r12
441
442	pushq	%r13
443
444	pushq	%r14
445
446	pushq	%r15
447
448L$ord_sqr_body:
449
450	movq	0(%rsi),%r8
451	movq	8(%rsi),%rax
452	movq	16(%rsi),%r14
453	movq	24(%rsi),%r15
454	leaq	L$ord(%rip),%rsi
455	movq	%rdx,%rbx
456	jmp	L$oop_ord_sqr
457
458.p2align	5
459L$oop_ord_sqr:
460
461	movq	%rax,%rbp
462	mulq	%r8
463	movq	%rax,%r9
464.byte	102,72,15,110,205
465	movq	%r14,%rax
466	movq	%rdx,%r10
467
468	mulq	%r8
469	addq	%rax,%r10
470	movq	%r15,%rax
471.byte	102,73,15,110,214
472	adcq	$0,%rdx
473	movq	%rdx,%r11
474
475	mulq	%r8
476	addq	%rax,%r11
477	movq	%r15,%rax
478.byte	102,73,15,110,223
479	adcq	$0,%rdx
480	movq	%rdx,%r12
481
482
483	mulq	%r14
484	movq	%rax,%r13
485	movq	%r14,%rax
486	movq	%rdx,%r14
487
488
489	mulq	%rbp
490	addq	%rax,%r11
491	movq	%r15,%rax
492	adcq	$0,%rdx
493	movq	%rdx,%r15
494
495	mulq	%rbp
496	addq	%rax,%r12
497	adcq	$0,%rdx
498
499	addq	%r15,%r12
500	adcq	%rdx,%r13
501	adcq	$0,%r14
502
503
504	xorq	%r15,%r15
505	movq	%r8,%rax
506	addq	%r9,%r9
507	adcq	%r10,%r10
508	adcq	%r11,%r11
509	adcq	%r12,%r12
510	adcq	%r13,%r13
511	adcq	%r14,%r14
512	adcq	$0,%r15
513
514
515	mulq	%rax
516	movq	%rax,%r8
517.byte	102,72,15,126,200
518	movq	%rdx,%rbp
519
520	mulq	%rax
521	addq	%rbp,%r9
522	adcq	%rax,%r10
523.byte	102,72,15,126,208
524	adcq	$0,%rdx
525	movq	%rdx,%rbp
526
527	mulq	%rax
528	addq	%rbp,%r11
529	adcq	%rax,%r12
530.byte	102,72,15,126,216
531	adcq	$0,%rdx
532	movq	%rdx,%rbp
533
534	movq	%r8,%rcx
535	imulq	32(%rsi),%r8
536
537	mulq	%rax
538	addq	%rbp,%r13
539	adcq	%rax,%r14
540	movq	0(%rsi),%rax
541	adcq	%rdx,%r15
542
543
544	mulq	%r8
545	movq	%r8,%rbp
546	addq	%rax,%rcx
547	movq	8(%rsi),%rax
548	adcq	%rdx,%rcx
549
550	subq	%r8,%r10
551	sbbq	$0,%rbp
552
553	mulq	%r8
554	addq	%rcx,%r9
555	adcq	$0,%rdx
556	addq	%rax,%r9
557	movq	%r8,%rax
558	adcq	%rdx,%r10
559	movq	%r8,%rdx
560	adcq	$0,%rbp
561
562	movq	%r9,%rcx
563	imulq	32(%rsi),%r9
564
565	shlq	$32,%rax
566	shrq	$32,%rdx
567	subq	%rax,%r11
568	movq	0(%rsi),%rax
569	sbbq	%rdx,%r8
570
571	addq	%rbp,%r11
572	adcq	$0,%r8
573
574
575	mulq	%r9
576	movq	%r9,%rbp
577	addq	%rax,%rcx
578	movq	8(%rsi),%rax
579	adcq	%rdx,%rcx
580
581	subq	%r9,%r11
582	sbbq	$0,%rbp
583
584	mulq	%r9
585	addq	%rcx,%r10
586	adcq	$0,%rdx
587	addq	%rax,%r10
588	movq	%r9,%rax
589	adcq	%rdx,%r11
590	movq	%r9,%rdx
591	adcq	$0,%rbp
592
593	movq	%r10,%rcx
594	imulq	32(%rsi),%r10
595
596	shlq	$32,%rax
597	shrq	$32,%rdx
598	subq	%rax,%r8
599	movq	0(%rsi),%rax
600	sbbq	%rdx,%r9
601
602	addq	%rbp,%r8
603	adcq	$0,%r9
604
605
606	mulq	%r10
607	movq	%r10,%rbp
608	addq	%rax,%rcx
609	movq	8(%rsi),%rax
610	adcq	%rdx,%rcx
611
612	subq	%r10,%r8
613	sbbq	$0,%rbp
614
615	mulq	%r10
616	addq	%rcx,%r11
617	adcq	$0,%rdx
618	addq	%rax,%r11
619	movq	%r10,%rax
620	adcq	%rdx,%r8
621	movq	%r10,%rdx
622	adcq	$0,%rbp
623
624	movq	%r11,%rcx
625	imulq	32(%rsi),%r11
626
627	shlq	$32,%rax
628	shrq	$32,%rdx
629	subq	%rax,%r9
630	movq	0(%rsi),%rax
631	sbbq	%rdx,%r10
632
633	addq	%rbp,%r9
634	adcq	$0,%r10
635
636
637	mulq	%r11
638	movq	%r11,%rbp
639	addq	%rax,%rcx
640	movq	8(%rsi),%rax
641	adcq	%rdx,%rcx
642
643	subq	%r11,%r9
644	sbbq	$0,%rbp
645
646	mulq	%r11
647	addq	%rcx,%r8
648	adcq	$0,%rdx
649	addq	%rax,%r8
650	movq	%r11,%rax
651	adcq	%rdx,%r9
652	movq	%r11,%rdx
653	adcq	$0,%rbp
654
655	shlq	$32,%rax
656	shrq	$32,%rdx
657	subq	%rax,%r10
658	sbbq	%rdx,%r11
659
660	addq	%rbp,%r10
661	adcq	$0,%r11
662
663
664	xorq	%rdx,%rdx
665	addq	%r12,%r8
666	adcq	%r13,%r9
667	movq	%r8,%r12
668	adcq	%r14,%r10
669	adcq	%r15,%r11
670	movq	%r9,%rax
671	adcq	$0,%rdx
672
673
674	subq	0(%rsi),%r8
675	movq	%r10,%r14
676	sbbq	8(%rsi),%r9
677	sbbq	16(%rsi),%r10
678	movq	%r11,%r15
679	sbbq	24(%rsi),%r11
680	sbbq	$0,%rdx
681
682	cmovcq	%r12,%r8
683	cmovncq	%r9,%rax
684	cmovncq	%r10,%r14
685	cmovncq	%r11,%r15
686
687	decq	%rbx
688	jnz	L$oop_ord_sqr
689
690	movq	%r8,0(%rdi)
691	movq	%rax,8(%rdi)
692	pxor	%xmm1,%xmm1
693	movq	%r14,16(%rdi)
694	pxor	%xmm2,%xmm2
695	movq	%r15,24(%rdi)
696	pxor	%xmm3,%xmm3
697
698	movq	0(%rsp),%r15
699
700	movq	8(%rsp),%r14
701
702	movq	16(%rsp),%r13
703
704	movq	24(%rsp),%r12
705
706	movq	32(%rsp),%rbx
707
708	movq	40(%rsp),%rbp
709
710	leaq	48(%rsp),%rsp
711
712L$ord_sqr_epilogue:
713	.byte	0xf3,0xc3
714
715
716
717
718.p2align	5
719ecp_nistz256_ord_mul_montx:
720
721L$ecp_nistz256_ord_mul_montx:
722	pushq	%rbp
723
724	pushq	%rbx
725
726	pushq	%r12
727
728	pushq	%r13
729
730	pushq	%r14
731
732	pushq	%r15
733
734L$ord_mulx_body:
735
736	movq	%rdx,%rbx
737	movq	0(%rdx),%rdx
738	movq	0(%rsi),%r9
739	movq	8(%rsi),%r10
740	movq	16(%rsi),%r11
741	movq	24(%rsi),%r12
742	leaq	-128(%rsi),%rsi
743	leaq	L$ord-128(%rip),%r14
744	movq	L$ordK(%rip),%r15
745
746
747	mulxq	%r9,%r8,%r9
748	mulxq	%r10,%rcx,%r10
749	mulxq	%r11,%rbp,%r11
750	addq	%rcx,%r9
751	mulxq	%r12,%rcx,%r12
752	movq	%r8,%rdx
753	mulxq	%r15,%rdx,%rax
754	adcq	%rbp,%r10
755	adcq	%rcx,%r11
756	adcq	$0,%r12
757
758
759	xorq	%r13,%r13
760	mulxq	0+128(%r14),%rcx,%rbp
761	adcxq	%rcx,%r8
762	adoxq	%rbp,%r9
763
764	mulxq	8+128(%r14),%rcx,%rbp
765	adcxq	%rcx,%r9
766	adoxq	%rbp,%r10
767
768	mulxq	16+128(%r14),%rcx,%rbp
769	adcxq	%rcx,%r10
770	adoxq	%rbp,%r11
771
772	mulxq	24+128(%r14),%rcx,%rbp
773	movq	8(%rbx),%rdx
774	adcxq	%rcx,%r11
775	adoxq	%rbp,%r12
776	adcxq	%r8,%r12
777	adoxq	%r8,%r13
778	adcq	$0,%r13
779
780
781	mulxq	0+128(%rsi),%rcx,%rbp
782	adcxq	%rcx,%r9
783	adoxq	%rbp,%r10
784
785	mulxq	8+128(%rsi),%rcx,%rbp
786	adcxq	%rcx,%r10
787	adoxq	%rbp,%r11
788
789	mulxq	16+128(%rsi),%rcx,%rbp
790	adcxq	%rcx,%r11
791	adoxq	%rbp,%r12
792
793	mulxq	24+128(%rsi),%rcx,%rbp
794	movq	%r9,%rdx
795	mulxq	%r15,%rdx,%rax
796	adcxq	%rcx,%r12
797	adoxq	%rbp,%r13
798
799	adcxq	%r8,%r13
800	adoxq	%r8,%r8
801	adcq	$0,%r8
802
803
804	mulxq	0+128(%r14),%rcx,%rbp
805	adcxq	%rcx,%r9
806	adoxq	%rbp,%r10
807
808	mulxq	8+128(%r14),%rcx,%rbp
809	adcxq	%rcx,%r10
810	adoxq	%rbp,%r11
811
812	mulxq	16+128(%r14),%rcx,%rbp
813	adcxq	%rcx,%r11
814	adoxq	%rbp,%r12
815
816	mulxq	24+128(%r14),%rcx,%rbp
817	movq	16(%rbx),%rdx
818	adcxq	%rcx,%r12
819	adoxq	%rbp,%r13
820	adcxq	%r9,%r13
821	adoxq	%r9,%r8
822	adcq	$0,%r8
823
824
825	mulxq	0+128(%rsi),%rcx,%rbp
826	adcxq	%rcx,%r10
827	adoxq	%rbp,%r11
828
829	mulxq	8+128(%rsi),%rcx,%rbp
830	adcxq	%rcx,%r11
831	adoxq	%rbp,%r12
832
833	mulxq	16+128(%rsi),%rcx,%rbp
834	adcxq	%rcx,%r12
835	adoxq	%rbp,%r13
836
837	mulxq	24+128(%rsi),%rcx,%rbp
838	movq	%r10,%rdx
839	mulxq	%r15,%rdx,%rax
840	adcxq	%rcx,%r13
841	adoxq	%rbp,%r8
842
843	adcxq	%r9,%r8
844	adoxq	%r9,%r9
845	adcq	$0,%r9
846
847
848	mulxq	0+128(%r14),%rcx,%rbp
849	adcxq	%rcx,%r10
850	adoxq	%rbp,%r11
851
852	mulxq	8+128(%r14),%rcx,%rbp
853	adcxq	%rcx,%r11
854	adoxq	%rbp,%r12
855
856	mulxq	16+128(%r14),%rcx,%rbp
857	adcxq	%rcx,%r12
858	adoxq	%rbp,%r13
859
860	mulxq	24+128(%r14),%rcx,%rbp
861	movq	24(%rbx),%rdx
862	adcxq	%rcx,%r13
863	adoxq	%rbp,%r8
864	adcxq	%r10,%r8
865	adoxq	%r10,%r9
866	adcq	$0,%r9
867
868
869	mulxq	0+128(%rsi),%rcx,%rbp
870	adcxq	%rcx,%r11
871	adoxq	%rbp,%r12
872
873	mulxq	8+128(%rsi),%rcx,%rbp
874	adcxq	%rcx,%r12
875	adoxq	%rbp,%r13
876
877	mulxq	16+128(%rsi),%rcx,%rbp
878	adcxq	%rcx,%r13
879	adoxq	%rbp,%r8
880
881	mulxq	24+128(%rsi),%rcx,%rbp
882	movq	%r11,%rdx
883	mulxq	%r15,%rdx,%rax
884	adcxq	%rcx,%r8
885	adoxq	%rbp,%r9
886
887	adcxq	%r10,%r9
888	adoxq	%r10,%r10
889	adcq	$0,%r10
890
891
892	mulxq	0+128(%r14),%rcx,%rbp
893	adcxq	%rcx,%r11
894	adoxq	%rbp,%r12
895
896	mulxq	8+128(%r14),%rcx,%rbp
897	adcxq	%rcx,%r12
898	adoxq	%rbp,%r13
899
900	mulxq	16+128(%r14),%rcx,%rbp
901	adcxq	%rcx,%r13
902	adoxq	%rbp,%r8
903
904	mulxq	24+128(%r14),%rcx,%rbp
905	leaq	128(%r14),%r14
906	movq	%r12,%rbx
907	adcxq	%rcx,%r8
908	adoxq	%rbp,%r9
909	movq	%r13,%rdx
910	adcxq	%r11,%r9
911	adoxq	%r11,%r10
912	adcq	$0,%r10
913
914
915
916	movq	%r8,%rcx
917	subq	0(%r14),%r12
918	sbbq	8(%r14),%r13
919	sbbq	16(%r14),%r8
920	movq	%r9,%rbp
921	sbbq	24(%r14),%r9
922	sbbq	$0,%r10
923
924	cmovcq	%rbx,%r12
925	cmovcq	%rdx,%r13
926	cmovcq	%rcx,%r8
927	cmovcq	%rbp,%r9
928
929	movq	%r12,0(%rdi)
930	movq	%r13,8(%rdi)
931	movq	%r8,16(%rdi)
932	movq	%r9,24(%rdi)
933
934	movq	0(%rsp),%r15
935
936	movq	8(%rsp),%r14
937
938	movq	16(%rsp),%r13
939
940	movq	24(%rsp),%r12
941
942	movq	32(%rsp),%rbx
943
944	movq	40(%rsp),%rbp
945
946	leaq	48(%rsp),%rsp
947
948L$ord_mulx_epilogue:
949	.byte	0xf3,0xc3
950
951
952
953
954.p2align	5
955ecp_nistz256_ord_sqr_montx:
956
957L$ecp_nistz256_ord_sqr_montx:
958	pushq	%rbp
959
960	pushq	%rbx
961
962	pushq	%r12
963
964	pushq	%r13
965
966	pushq	%r14
967
968	pushq	%r15
969
970L$ord_sqrx_body:
971
972	movq	%rdx,%rbx
973	movq	0(%rsi),%rdx
974	movq	8(%rsi),%r14
975	movq	16(%rsi),%r15
976	movq	24(%rsi),%r8
977	leaq	L$ord(%rip),%rsi
978	jmp	L$oop_ord_sqrx
979
980.p2align	5
981L$oop_ord_sqrx:
982	mulxq	%r14,%r9,%r10
983	mulxq	%r15,%rcx,%r11
984	movq	%rdx,%rax
985.byte	102,73,15,110,206
986	mulxq	%r8,%rbp,%r12
987	movq	%r14,%rdx
988	addq	%rcx,%r10
989.byte	102,73,15,110,215
990	adcq	%rbp,%r11
991	adcq	$0,%r12
992	xorq	%r13,%r13
993
994	mulxq	%r15,%rcx,%rbp
995	adcxq	%rcx,%r11
996	adoxq	%rbp,%r12
997
998	mulxq	%r8,%rcx,%rbp
999	movq	%r15,%rdx
1000	adcxq	%rcx,%r12
1001	adoxq	%rbp,%r13
1002	adcq	$0,%r13
1003
1004	mulxq	%r8,%rcx,%r14
1005	movq	%rax,%rdx
1006.byte	102,73,15,110,216
1007	xorq	%r15,%r15
1008	adcxq	%r9,%r9
1009	adoxq	%rcx,%r13
1010	adcxq	%r10,%r10
1011	adoxq	%r15,%r14
1012
1013
1014	mulxq	%rdx,%r8,%rbp
1015.byte	102,72,15,126,202
1016	adcxq	%r11,%r11
1017	adoxq	%rbp,%r9
1018	adcxq	%r12,%r12
1019	mulxq	%rdx,%rcx,%rax
1020.byte	102,72,15,126,210
1021	adcxq	%r13,%r13
1022	adoxq	%rcx,%r10
1023	adcxq	%r14,%r14
1024	mulxq	%rdx,%rcx,%rbp
1025.byte	0x67
1026.byte	102,72,15,126,218
1027	adoxq	%rax,%r11
1028	adcxq	%r15,%r15
1029	adoxq	%rcx,%r12
1030	adoxq	%rbp,%r13
1031	mulxq	%rdx,%rcx,%rax
1032	adoxq	%rcx,%r14
1033	adoxq	%rax,%r15
1034
1035
1036	movq	%r8,%rdx
1037	mulxq	32(%rsi),%rdx,%rcx
1038
1039	xorq	%rax,%rax
1040	mulxq	0(%rsi),%rcx,%rbp
1041	adcxq	%rcx,%r8
1042	adoxq	%rbp,%r9
1043	mulxq	8(%rsi),%rcx,%rbp
1044	adcxq	%rcx,%r9
1045	adoxq	%rbp,%r10
1046	mulxq	16(%rsi),%rcx,%rbp
1047	adcxq	%rcx,%r10
1048	adoxq	%rbp,%r11
1049	mulxq	24(%rsi),%rcx,%rbp
1050	adcxq	%rcx,%r11
1051	adoxq	%rbp,%r8
1052	adcxq	%rax,%r8
1053
1054
1055	movq	%r9,%rdx
1056	mulxq	32(%rsi),%rdx,%rcx
1057
1058	mulxq	0(%rsi),%rcx,%rbp
1059	adoxq	%rcx,%r9
1060	adcxq	%rbp,%r10
1061	mulxq	8(%rsi),%rcx,%rbp
1062	adoxq	%rcx,%r10
1063	adcxq	%rbp,%r11
1064	mulxq	16(%rsi),%rcx,%rbp
1065	adoxq	%rcx,%r11
1066	adcxq	%rbp,%r8
1067	mulxq	24(%rsi),%rcx,%rbp
1068	adoxq	%rcx,%r8
1069	adcxq	%rbp,%r9
1070	adoxq	%rax,%r9
1071
1072
1073	movq	%r10,%rdx
1074	mulxq	32(%rsi),%rdx,%rcx
1075
1076	mulxq	0(%rsi),%rcx,%rbp
1077	adcxq	%rcx,%r10
1078	adoxq	%rbp,%r11
1079	mulxq	8(%rsi),%rcx,%rbp
1080	adcxq	%rcx,%r11
1081	adoxq	%rbp,%r8
1082	mulxq	16(%rsi),%rcx,%rbp
1083	adcxq	%rcx,%r8
1084	adoxq	%rbp,%r9
1085	mulxq	24(%rsi),%rcx,%rbp
1086	adcxq	%rcx,%r9
1087	adoxq	%rbp,%r10
1088	adcxq	%rax,%r10
1089
1090
1091	movq	%r11,%rdx
1092	mulxq	32(%rsi),%rdx,%rcx
1093
1094	mulxq	0(%rsi),%rcx,%rbp
1095	adoxq	%rcx,%r11
1096	adcxq	%rbp,%r8
1097	mulxq	8(%rsi),%rcx,%rbp
1098	adoxq	%rcx,%r8
1099	adcxq	%rbp,%r9
1100	mulxq	16(%rsi),%rcx,%rbp
1101	adoxq	%rcx,%r9
1102	adcxq	%rbp,%r10
1103	mulxq	24(%rsi),%rcx,%rbp
1104	adoxq	%rcx,%r10
1105	adcxq	%rbp,%r11
1106	adoxq	%rax,%r11
1107
1108
1109	addq	%r8,%r12
1110	adcq	%r13,%r9
1111	movq	%r12,%rdx
1112	adcq	%r14,%r10
1113	adcq	%r15,%r11
1114	movq	%r9,%r14
1115	adcq	$0,%rax
1116
1117
1118	subq	0(%rsi),%r12
1119	movq	%r10,%r15
1120	sbbq	8(%rsi),%r9
1121	sbbq	16(%rsi),%r10
1122	movq	%r11,%r8
1123	sbbq	24(%rsi),%r11
1124	sbbq	$0,%rax
1125
1126	cmovncq	%r12,%rdx
1127	cmovncq	%r9,%r14
1128	cmovncq	%r10,%r15
1129	cmovncq	%r11,%r8
1130
1131	decq	%rbx
1132	jnz	L$oop_ord_sqrx
1133
1134	movq	%rdx,0(%rdi)
1135	movq	%r14,8(%rdi)
1136	pxor	%xmm1,%xmm1
1137	movq	%r15,16(%rdi)
1138	pxor	%xmm2,%xmm2
1139	movq	%r8,24(%rdi)
1140	pxor	%xmm3,%xmm3
1141
1142	movq	0(%rsp),%r15
1143
1144	movq	8(%rsp),%r14
1145
1146	movq	16(%rsp),%r13
1147
1148	movq	24(%rsp),%r12
1149
1150	movq	32(%rsp),%rbx
1151
1152	movq	40(%rsp),%rbp
1153
1154	leaq	48(%rsp),%rsp
1155
1156L$ord_sqrx_epilogue:
1157	.byte	0xf3,0xc3
1158
1159
1160
1161
1162
1163
1164
1165
1166.globl	_p256_mul_mont
1167.private_extern _p256_mul_mont
1168
1169.p2align	5
1170_p256_mul_mont:
1171
1172	leaq	_OPENSSL_ia32cap_P(%rip),%rcx
1173	movq	8(%rcx),%rcx
1174	andl	$0x80100,%ecx
1175L$mul_mont:
1176	pushq	%rbp
1177
1178	pushq	%rbx
1179
1180	pushq	%r12
1181
1182	pushq	%r13
1183
1184	pushq	%r14
1185
1186	pushq	%r15
1187
1188L$mul_body:
1189	cmpl	$0x80100,%ecx
1190	je	L$mul_montx
1191	movq	%rdx,%rbx
1192	movq	0(%rdx),%rax
1193	movq	0(%rsi),%r9
1194	movq	8(%rsi),%r10
1195	movq	16(%rsi),%r11
1196	movq	24(%rsi),%r12
1197
1198	call	__ecp_nistz256_mul_montq
1199	jmp	L$mul_mont_done
1200
1201.p2align	5
1202L$mul_montx:
1203	movq	%rdx,%rbx
1204	movq	0(%rdx),%rdx
1205	movq	0(%rsi),%r9
1206	movq	8(%rsi),%r10
1207	movq	16(%rsi),%r11
1208	movq	24(%rsi),%r12
1209	leaq	-128(%rsi),%rsi
1210
1211	call	__ecp_nistz256_mul_montx
1212L$mul_mont_done:
1213	movq	0(%rsp),%r15
1214
1215	movq	8(%rsp),%r14
1216
1217	movq	16(%rsp),%r13
1218
1219	movq	24(%rsp),%r12
1220
1221	movq	32(%rsp),%rbx
1222
1223	movq	40(%rsp),%rbp
1224
1225	leaq	48(%rsp),%rsp
1226
1227L$mul_epilogue:
1228	.byte	0xf3,0xc3
1229
1230
1231
1232
1233.p2align	5
1234__ecp_nistz256_mul_montq:
1235
1236
1237
1238	movq	%rax,%rbp
1239	mulq	%r9
1240	movq	L$poly+8(%rip),%r14
1241	movq	%rax,%r8
1242	movq	%rbp,%rax
1243	movq	%rdx,%r9
1244
1245	mulq	%r10
1246	movq	L$poly+24(%rip),%r15
1247	addq	%rax,%r9
1248	movq	%rbp,%rax
1249	adcq	$0,%rdx
1250	movq	%rdx,%r10
1251
1252	mulq	%r11
1253	addq	%rax,%r10
1254	movq	%rbp,%rax
1255	adcq	$0,%rdx
1256	movq	%rdx,%r11
1257
1258	mulq	%r12
1259	addq	%rax,%r11
1260	movq	%r8,%rax
1261	adcq	$0,%rdx
1262	xorq	%r13,%r13
1263	movq	%rdx,%r12
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274	movq	%r8,%rbp
1275	shlq	$32,%r8
1276	mulq	%r15
1277	shrq	$32,%rbp
1278	addq	%r8,%r9
1279	adcq	%rbp,%r10
1280	adcq	%rax,%r11
1281	movq	8(%rbx),%rax
1282	adcq	%rdx,%r12
1283	adcq	$0,%r13
1284	xorq	%r8,%r8
1285
1286
1287
1288	movq	%rax,%rbp
1289	mulq	0(%rsi)
1290	addq	%rax,%r9
1291	movq	%rbp,%rax
1292	adcq	$0,%rdx
1293	movq	%rdx,%rcx
1294
1295	mulq	8(%rsi)
1296	addq	%rcx,%r10
1297	adcq	$0,%rdx
1298	addq	%rax,%r10
1299	movq	%rbp,%rax
1300	adcq	$0,%rdx
1301	movq	%rdx,%rcx
1302
1303	mulq	16(%rsi)
1304	addq	%rcx,%r11
1305	adcq	$0,%rdx
1306	addq	%rax,%r11
1307	movq	%rbp,%rax
1308	adcq	$0,%rdx
1309	movq	%rdx,%rcx
1310
1311	mulq	24(%rsi)
1312	addq	%rcx,%r12
1313	adcq	$0,%rdx
1314	addq	%rax,%r12
1315	movq	%r9,%rax
1316	adcq	%rdx,%r13
1317	adcq	$0,%r8
1318
1319
1320
1321	movq	%r9,%rbp
1322	shlq	$32,%r9
1323	mulq	%r15
1324	shrq	$32,%rbp
1325	addq	%r9,%r10
1326	adcq	%rbp,%r11
1327	adcq	%rax,%r12
1328	movq	16(%rbx),%rax
1329	adcq	%rdx,%r13
1330	adcq	$0,%r8
1331	xorq	%r9,%r9
1332
1333
1334
1335	movq	%rax,%rbp
1336	mulq	0(%rsi)
1337	addq	%rax,%r10
1338	movq	%rbp,%rax
1339	adcq	$0,%rdx
1340	movq	%rdx,%rcx
1341
1342	mulq	8(%rsi)
1343	addq	%rcx,%r11
1344	adcq	$0,%rdx
1345	addq	%rax,%r11
1346	movq	%rbp,%rax
1347	adcq	$0,%rdx
1348	movq	%rdx,%rcx
1349
1350	mulq	16(%rsi)
1351	addq	%rcx,%r12
1352	adcq	$0,%rdx
1353	addq	%rax,%r12
1354	movq	%rbp,%rax
1355	adcq	$0,%rdx
1356	movq	%rdx,%rcx
1357
1358	mulq	24(%rsi)
1359	addq	%rcx,%r13
1360	adcq	$0,%rdx
1361	addq	%rax,%r13
1362	movq	%r10,%rax
1363	adcq	%rdx,%r8
1364	adcq	$0,%r9
1365
1366
1367
1368	movq	%r10,%rbp
1369	shlq	$32,%r10
1370	mulq	%r15
1371	shrq	$32,%rbp
1372	addq	%r10,%r11
1373	adcq	%rbp,%r12
1374	adcq	%rax,%r13
1375	movq	24(%rbx),%rax
1376	adcq	%rdx,%r8
1377	adcq	$0,%r9
1378	xorq	%r10,%r10
1379
1380
1381
1382	movq	%rax,%rbp
1383	mulq	0(%rsi)
1384	addq	%rax,%r11
1385	movq	%rbp,%rax
1386	adcq	$0,%rdx
1387	movq	%rdx,%rcx
1388
1389	mulq	8(%rsi)
1390	addq	%rcx,%r12
1391	adcq	$0,%rdx
1392	addq	%rax,%r12
1393	movq	%rbp,%rax
1394	adcq	$0,%rdx
1395	movq	%rdx,%rcx
1396
1397	mulq	16(%rsi)
1398	addq	%rcx,%r13
1399	adcq	$0,%rdx
1400	addq	%rax,%r13
1401	movq	%rbp,%rax
1402	adcq	$0,%rdx
1403	movq	%rdx,%rcx
1404
1405	mulq	24(%rsi)
1406	addq	%rcx,%r8
1407	adcq	$0,%rdx
1408	addq	%rax,%r8
1409	movq	%r11,%rax
1410	adcq	%rdx,%r9
1411	adcq	$0,%r10
1412
1413
1414
1415	movq	%r11,%rbp
1416	shlq	$32,%r11
1417	mulq	%r15
1418	shrq	$32,%rbp
1419	addq	%r11,%r12
1420	adcq	%rbp,%r13
1421	movq	%r12,%rcx
1422	adcq	%rax,%r8
1423	adcq	%rdx,%r9
1424	movq	%r13,%rbp
1425	adcq	$0,%r10
1426
1427
1428
1429	subq	$-1,%r12
1430	movq	%r8,%rbx
1431	sbbq	%r14,%r13
1432	sbbq	$0,%r8
1433	movq	%r9,%rdx
1434	sbbq	%r15,%r9
1435	sbbq	$0,%r10
1436
1437	cmovcq	%rcx,%r12
1438	cmovcq	%rbp,%r13
1439	movq	%r12,0(%rdi)
1440	cmovcq	%rbx,%r8
1441	movq	%r13,8(%rdi)
1442	cmovcq	%rdx,%r9
1443	movq	%r8,16(%rdi)
1444	movq	%r9,24(%rdi)
1445
1446	.byte	0xf3,0xc3
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457.globl	_p256_sqr_mont
1458.private_extern _p256_sqr_mont
1459
1460.p2align	5
1461_p256_sqr_mont:
1462
1463	leaq	_OPENSSL_ia32cap_P(%rip),%rcx
1464	movq	8(%rcx),%rcx
1465	andl	$0x80100,%ecx
1466	pushq	%rbp
1467
1468	pushq	%rbx
1469
1470	pushq	%r12
1471
1472	pushq	%r13
1473
1474	pushq	%r14
1475
1476	pushq	%r15
1477
1478L$sqr_body:
1479	cmpl	$0x80100,%ecx
1480	je	L$sqr_montx
1481	movq	0(%rsi),%rax
1482	movq	8(%rsi),%r14
1483	movq	16(%rsi),%r15
1484	movq	24(%rsi),%r8
1485
1486	call	__ecp_nistz256_sqr_montq
1487	jmp	L$sqr_mont_done
1488
1489.p2align	5
1490L$sqr_montx:
1491	movq	0(%rsi),%rdx
1492	movq	8(%rsi),%r14
1493	movq	16(%rsi),%r15
1494	movq	24(%rsi),%r8
1495	leaq	-128(%rsi),%rsi
1496
1497	call	__ecp_nistz256_sqr_montx
1498L$sqr_mont_done:
1499	movq	0(%rsp),%r15
1500
1501	movq	8(%rsp),%r14
1502
1503	movq	16(%rsp),%r13
1504
1505	movq	24(%rsp),%r12
1506
1507	movq	32(%rsp),%rbx
1508
1509	movq	40(%rsp),%rbp
1510
1511	leaq	48(%rsp),%rsp
1512
1513L$sqr_epilogue:
1514	.byte	0xf3,0xc3
1515
1516
1517
1518
1519.p2align	5
1520__ecp_nistz256_sqr_montq:
1521
1522	movq	%rax,%r13
1523	mulq	%r14
1524	movq	%rax,%r9
1525	movq	%r15,%rax
1526	movq	%rdx,%r10
1527
1528	mulq	%r13
1529	addq	%rax,%r10
1530	movq	%r8,%rax
1531	adcq	$0,%rdx
1532	movq	%rdx,%r11
1533
1534	mulq	%r13
1535	addq	%rax,%r11
1536	movq	%r15,%rax
1537	adcq	$0,%rdx
1538	movq	%rdx,%r12
1539
1540
1541	mulq	%r14
1542	addq	%rax,%r11
1543	movq	%r8,%rax
1544	adcq	$0,%rdx
1545	movq	%rdx,%rbp
1546
1547	mulq	%r14
1548	addq	%rax,%r12
1549	movq	%r8,%rax
1550	adcq	$0,%rdx
1551	addq	%rbp,%r12
1552	movq	%rdx,%r13
1553	adcq	$0,%r13
1554
1555
1556	mulq	%r15
1557	xorq	%r15,%r15
1558	addq	%rax,%r13
1559	movq	0(%rsi),%rax
1560	movq	%rdx,%r14
1561	adcq	$0,%r14
1562
1563	addq	%r9,%r9
1564	adcq	%r10,%r10
1565	adcq	%r11,%r11
1566	adcq	%r12,%r12
1567	adcq	%r13,%r13
1568	adcq	%r14,%r14
1569	adcq	$0,%r15
1570
1571	mulq	%rax
1572	movq	%rax,%r8
1573	movq	8(%rsi),%rax
1574	movq	%rdx,%rcx
1575
1576	mulq	%rax
1577	addq	%rcx,%r9
1578	adcq	%rax,%r10
1579	movq	16(%rsi),%rax
1580	adcq	$0,%rdx
1581	movq	%rdx,%rcx
1582
1583	mulq	%rax
1584	addq	%rcx,%r11
1585	adcq	%rax,%r12
1586	movq	24(%rsi),%rax
1587	adcq	$0,%rdx
1588	movq	%rdx,%rcx
1589
1590	mulq	%rax
1591	addq	%rcx,%r13
1592	adcq	%rax,%r14
1593	movq	%r8,%rax
1594	adcq	%rdx,%r15
1595
1596	movq	L$poly+8(%rip),%rsi
1597	movq	L$poly+24(%rip),%rbp
1598
1599
1600
1601
1602	movq	%r8,%rcx
1603	shlq	$32,%r8
1604	mulq	%rbp
1605	shrq	$32,%rcx
1606	addq	%r8,%r9
1607	adcq	%rcx,%r10
1608	adcq	%rax,%r11
1609	movq	%r9,%rax
1610	adcq	$0,%rdx
1611
1612
1613
1614	movq	%r9,%rcx
1615	shlq	$32,%r9
1616	movq	%rdx,%r8
1617	mulq	%rbp
1618	shrq	$32,%rcx
1619	addq	%r9,%r10
1620	adcq	%rcx,%r11
1621	adcq	%rax,%r8
1622	movq	%r10,%rax
1623	adcq	$0,%rdx
1624
1625
1626
1627	movq	%r10,%rcx
1628	shlq	$32,%r10
1629	movq	%rdx,%r9
1630	mulq	%rbp
1631	shrq	$32,%rcx
1632	addq	%r10,%r11
1633	adcq	%rcx,%r8
1634	adcq	%rax,%r9
1635	movq	%r11,%rax
1636	adcq	$0,%rdx
1637
1638
1639
1640	movq	%r11,%rcx
1641	shlq	$32,%r11
1642	movq	%rdx,%r10
1643	mulq	%rbp
1644	shrq	$32,%rcx
1645	addq	%r11,%r8
1646	adcq	%rcx,%r9
1647	adcq	%rax,%r10
1648	adcq	$0,%rdx
1649	xorq	%r11,%r11
1650
1651
1652
1653	addq	%r8,%r12
1654	adcq	%r9,%r13
1655	movq	%r12,%r8
1656	adcq	%r10,%r14
1657	adcq	%rdx,%r15
1658	movq	%r13,%r9
1659	adcq	$0,%r11
1660
1661	subq	$-1,%r12
1662	movq	%r14,%r10
1663	sbbq	%rsi,%r13
1664	sbbq	$0,%r14
1665	movq	%r15,%rcx
1666	sbbq	%rbp,%r15
1667	sbbq	$0,%r11
1668
1669	cmovcq	%r8,%r12
1670	cmovcq	%r9,%r13
1671	movq	%r12,0(%rdi)
1672	cmovcq	%r10,%r14
1673	movq	%r13,8(%rdi)
1674	cmovcq	%rcx,%r15
1675	movq	%r14,16(%rdi)
1676	movq	%r15,24(%rdi)
1677
1678	.byte	0xf3,0xc3
1679
1680
1681
1682.p2align	5
1683__ecp_nistz256_mul_montx:
1684
1685
1686
1687	mulxq	%r9,%r8,%r9
1688	mulxq	%r10,%rcx,%r10
1689	movq	$32,%r14
1690	xorq	%r13,%r13
1691	mulxq	%r11,%rbp,%r11
1692	movq	L$poly+24(%rip),%r15
1693	adcq	%rcx,%r9
1694	mulxq	%r12,%rcx,%r12
1695	movq	%r8,%rdx
1696	adcq	%rbp,%r10
1697	shlxq	%r14,%r8,%rbp
1698	adcq	%rcx,%r11
1699	shrxq	%r14,%r8,%rcx
1700	adcq	$0,%r12
1701
1702
1703
1704	addq	%rbp,%r9
1705	adcq	%rcx,%r10
1706
1707	mulxq	%r15,%rcx,%rbp
1708	movq	8(%rbx),%rdx
1709	adcq	%rcx,%r11
1710	adcq	%rbp,%r12
1711	adcq	$0,%r13
1712	xorq	%r8,%r8
1713
1714
1715
1716	mulxq	0+128(%rsi),%rcx,%rbp
1717	adcxq	%rcx,%r9
1718	adoxq	%rbp,%r10
1719
1720	mulxq	8+128(%rsi),%rcx,%rbp
1721	adcxq	%rcx,%r10
1722	adoxq	%rbp,%r11
1723
1724	mulxq	16+128(%rsi),%rcx,%rbp
1725	adcxq	%rcx,%r11
1726	adoxq	%rbp,%r12
1727
1728	mulxq	24+128(%rsi),%rcx,%rbp
1729	movq	%r9,%rdx
1730	adcxq	%rcx,%r12
1731	shlxq	%r14,%r9,%rcx
1732	adoxq	%rbp,%r13
1733	shrxq	%r14,%r9,%rbp
1734
1735	adcxq	%r8,%r13
1736	adoxq	%r8,%r8
1737	adcq	$0,%r8
1738
1739
1740
1741	addq	%rcx,%r10
1742	adcq	%rbp,%r11
1743
1744	mulxq	%r15,%rcx,%rbp
1745	movq	16(%rbx),%rdx
1746	adcq	%rcx,%r12
1747	adcq	%rbp,%r13
1748	adcq	$0,%r8
1749	xorq	%r9,%r9
1750
1751
1752
1753	mulxq	0+128(%rsi),%rcx,%rbp
1754	adcxq	%rcx,%r10
1755	adoxq	%rbp,%r11
1756
1757	mulxq	8+128(%rsi),%rcx,%rbp
1758	adcxq	%rcx,%r11
1759	adoxq	%rbp,%r12
1760
1761	mulxq	16+128(%rsi),%rcx,%rbp
1762	adcxq	%rcx,%r12
1763	adoxq	%rbp,%r13
1764
1765	mulxq	24+128(%rsi),%rcx,%rbp
1766	movq	%r10,%rdx
1767	adcxq	%rcx,%r13
1768	shlxq	%r14,%r10,%rcx
1769	adoxq	%rbp,%r8
1770	shrxq	%r14,%r10,%rbp
1771
1772	adcxq	%r9,%r8
1773	adoxq	%r9,%r9
1774	adcq	$0,%r9
1775
1776
1777
1778	addq	%rcx,%r11
1779	adcq	%rbp,%r12
1780
1781	mulxq	%r15,%rcx,%rbp
1782	movq	24(%rbx),%rdx
1783	adcq	%rcx,%r13
1784	adcq	%rbp,%r8
1785	adcq	$0,%r9
1786	xorq	%r10,%r10
1787
1788
1789
1790	mulxq	0+128(%rsi),%rcx,%rbp
1791	adcxq	%rcx,%r11
1792	adoxq	%rbp,%r12
1793
1794	mulxq	8+128(%rsi),%rcx,%rbp
1795	adcxq	%rcx,%r12
1796	adoxq	%rbp,%r13
1797
1798	mulxq	16+128(%rsi),%rcx,%rbp
1799	adcxq	%rcx,%r13
1800	adoxq	%rbp,%r8
1801
1802	mulxq	24+128(%rsi),%rcx,%rbp
1803	movq	%r11,%rdx
1804	adcxq	%rcx,%r8
1805	shlxq	%r14,%r11,%rcx
1806	adoxq	%rbp,%r9
1807	shrxq	%r14,%r11,%rbp
1808
1809	adcxq	%r10,%r9
1810	adoxq	%r10,%r10
1811	adcq	$0,%r10
1812
1813
1814
1815	addq	%rcx,%r12
1816	adcq	%rbp,%r13
1817
1818	mulxq	%r15,%rcx,%rbp
1819	movq	%r12,%rbx
1820	movq	L$poly+8(%rip),%r14
1821	adcq	%rcx,%r8
1822	movq	%r13,%rdx
1823	adcq	%rbp,%r9
1824	adcq	$0,%r10
1825
1826
1827
1828	xorl	%eax,%eax
1829	movq	%r8,%rcx
1830	sbbq	$-1,%r12
1831	sbbq	%r14,%r13
1832	sbbq	$0,%r8
1833	movq	%r9,%rbp
1834	sbbq	%r15,%r9
1835	sbbq	$0,%r10
1836
1837	cmovcq	%rbx,%r12
1838	cmovcq	%rdx,%r13
1839	movq	%r12,0(%rdi)
1840	cmovcq	%rcx,%r8
1841	movq	%r13,8(%rdi)
1842	cmovcq	%rbp,%r9
1843	movq	%r8,16(%rdi)
1844	movq	%r9,24(%rdi)
1845
1846	.byte	0xf3,0xc3
1847
1848
1849
1850
1851.p2align	5
1852__ecp_nistz256_sqr_montx:
1853
1854	mulxq	%r14,%r9,%r10
1855	mulxq	%r15,%rcx,%r11
1856	xorl	%eax,%eax
1857	adcq	%rcx,%r10
1858	mulxq	%r8,%rbp,%r12
1859	movq	%r14,%rdx
1860	adcq	%rbp,%r11
1861	adcq	$0,%r12
1862	xorq	%r13,%r13
1863
1864
1865	mulxq	%r15,%rcx,%rbp
1866	adcxq	%rcx,%r11
1867	adoxq	%rbp,%r12
1868
1869	mulxq	%r8,%rcx,%rbp
1870	movq	%r15,%rdx
1871	adcxq	%rcx,%r12
1872	adoxq	%rbp,%r13
1873	adcq	$0,%r13
1874
1875
1876	mulxq	%r8,%rcx,%r14
1877	movq	0+128(%rsi),%rdx
1878	xorq	%r15,%r15
1879	adcxq	%r9,%r9
1880	adoxq	%rcx,%r13
1881	adcxq	%r10,%r10
1882	adoxq	%r15,%r14
1883
1884	mulxq	%rdx,%r8,%rbp
1885	movq	8+128(%rsi),%rdx
1886	adcxq	%r11,%r11
1887	adoxq	%rbp,%r9
1888	adcxq	%r12,%r12
1889	mulxq	%rdx,%rcx,%rax
1890	movq	16+128(%rsi),%rdx
1891	adcxq	%r13,%r13
1892	adoxq	%rcx,%r10
1893	adcxq	%r14,%r14
1894.byte	0x67
1895	mulxq	%rdx,%rcx,%rbp
1896	movq	24+128(%rsi),%rdx
1897	adoxq	%rax,%r11
1898	adcxq	%r15,%r15
1899	adoxq	%rcx,%r12
1900	movq	$32,%rsi
1901	adoxq	%rbp,%r13
1902.byte	0x67,0x67
1903	mulxq	%rdx,%rcx,%rax
1904	movq	L$poly+24(%rip),%rdx
1905	adoxq	%rcx,%r14
1906	shlxq	%rsi,%r8,%rcx
1907	adoxq	%rax,%r15
1908	shrxq	%rsi,%r8,%rax
1909	movq	%rdx,%rbp
1910
1911
1912	addq	%rcx,%r9
1913	adcq	%rax,%r10
1914
1915	mulxq	%r8,%rcx,%r8
1916	adcq	%rcx,%r11
1917	shlxq	%rsi,%r9,%rcx
1918	adcq	$0,%r8
1919	shrxq	%rsi,%r9,%rax
1920
1921
1922	addq	%rcx,%r10
1923	adcq	%rax,%r11
1924
1925	mulxq	%r9,%rcx,%r9
1926	adcq	%rcx,%r8
1927	shlxq	%rsi,%r10,%rcx
1928	adcq	$0,%r9
1929	shrxq	%rsi,%r10,%rax
1930
1931
1932	addq	%rcx,%r11
1933	adcq	%rax,%r8
1934
1935	mulxq	%r10,%rcx,%r10
1936	adcq	%rcx,%r9
1937	shlxq	%rsi,%r11,%rcx
1938	adcq	$0,%r10
1939	shrxq	%rsi,%r11,%rax
1940
1941
1942	addq	%rcx,%r8
1943	adcq	%rax,%r9
1944
1945	mulxq	%r11,%rcx,%r11
1946	adcq	%rcx,%r10
1947	adcq	$0,%r11
1948
1949	xorq	%rdx,%rdx
1950	addq	%r8,%r12
1951	movq	L$poly+8(%rip),%rsi
1952	adcq	%r9,%r13
1953	movq	%r12,%r8
1954	adcq	%r10,%r14
1955	adcq	%r11,%r15
1956	movq	%r13,%r9
1957	adcq	$0,%rdx
1958
1959	subq	$-1,%r12
1960	movq	%r14,%r10
1961	sbbq	%rsi,%r13
1962	sbbq	$0,%r14
1963	movq	%r15,%r11
1964	sbbq	%rbp,%r15
1965	sbbq	$0,%rdx
1966
1967	cmovcq	%r8,%r12
1968	cmovcq	%r9,%r13
1969	movq	%r12,0(%rdi)
1970	cmovcq	%r10,%r14
1971	movq	%r13,8(%rdi)
1972	cmovcq	%r11,%r15
1973	movq	%r14,16(%rdi)
1974	movq	%r15,24(%rdi)
1975
1976	.byte	0xf3,0xc3
1977
1978
1979
1980
1981.globl	_nistz256_select_w5
1982.private_extern _nistz256_select_w5
1983
1984.p2align	5
1985_nistz256_select_w5:
1986
1987	leaq	_OPENSSL_ia32cap_P(%rip),%rax
1988	movq	8(%rax),%rax
1989	testl	$32,%eax
1990	jnz	L$avx2_select_w5
1991	movdqa	L$One(%rip),%xmm0
1992	movd	%edx,%xmm1
1993
1994	pxor	%xmm2,%xmm2
1995	pxor	%xmm3,%xmm3
1996	pxor	%xmm4,%xmm4
1997	pxor	%xmm5,%xmm5
1998	pxor	%xmm6,%xmm6
1999	pxor	%xmm7,%xmm7
2000
2001	movdqa	%xmm0,%xmm8
2002	pshufd	$0,%xmm1,%xmm1
2003
2004	movq	$16,%rax
2005L$select_loop_sse_w5:
2006
2007	movdqa	%xmm8,%xmm15
2008	paddd	%xmm0,%xmm8
2009	pcmpeqd	%xmm1,%xmm15
2010
2011	movdqa	0(%rsi),%xmm9
2012	movdqa	16(%rsi),%xmm10
2013	movdqa	32(%rsi),%xmm11
2014	movdqa	48(%rsi),%xmm12
2015	movdqa	64(%rsi),%xmm13
2016	movdqa	80(%rsi),%xmm14
2017	leaq	96(%rsi),%rsi
2018
2019	pand	%xmm15,%xmm9
2020	pand	%xmm15,%xmm10
2021	por	%xmm9,%xmm2
2022	pand	%xmm15,%xmm11
2023	por	%xmm10,%xmm3
2024	pand	%xmm15,%xmm12
2025	por	%xmm11,%xmm4
2026	pand	%xmm15,%xmm13
2027	por	%xmm12,%xmm5
2028	pand	%xmm15,%xmm14
2029	por	%xmm13,%xmm6
2030	por	%xmm14,%xmm7
2031
2032	decq	%rax
2033	jnz	L$select_loop_sse_w5
2034
2035	movdqu	%xmm2,0(%rdi)
2036	movdqu	%xmm3,16(%rdi)
2037	movdqu	%xmm4,32(%rdi)
2038	movdqu	%xmm5,48(%rdi)
2039	movdqu	%xmm6,64(%rdi)
2040	movdqu	%xmm7,80(%rdi)
2041	.byte	0xf3,0xc3
2042
2043L$SEH_end_nistz256_select_w5:
2044
2045
2046
2047
2048.globl	_nistz256_select_w7
2049.private_extern _nistz256_select_w7
2050
2051.p2align	5
2052_nistz256_select_w7:
2053
2054	leaq	_OPENSSL_ia32cap_P(%rip),%rax
2055	movq	8(%rax),%rax
2056	testl	$32,%eax
2057	jnz	L$avx2_select_w7
2058	movdqa	L$One(%rip),%xmm8
2059	movd	%edx,%xmm1
2060
2061	pxor	%xmm2,%xmm2
2062	pxor	%xmm3,%xmm3
2063	pxor	%xmm4,%xmm4
2064	pxor	%xmm5,%xmm5
2065
2066	movdqa	%xmm8,%xmm0
2067	pshufd	$0,%xmm1,%xmm1
2068	movq	$64,%rax
2069
2070L$select_loop_sse_w7:
2071	movdqa	%xmm8,%xmm15
2072	paddd	%xmm0,%xmm8
2073	movdqa	0(%rsi),%xmm9
2074	movdqa	16(%rsi),%xmm10
2075	pcmpeqd	%xmm1,%xmm15
2076	movdqa	32(%rsi),%xmm11
2077	movdqa	48(%rsi),%xmm12
2078	leaq	64(%rsi),%rsi
2079
2080	pand	%xmm15,%xmm9
2081	pand	%xmm15,%xmm10
2082	por	%xmm9,%xmm2
2083	pand	%xmm15,%xmm11
2084	por	%xmm10,%xmm3
2085	pand	%xmm15,%xmm12
2086	por	%xmm11,%xmm4
2087	prefetcht0	255(%rsi)
2088	por	%xmm12,%xmm5
2089
2090	decq	%rax
2091	jnz	L$select_loop_sse_w7
2092
2093	movdqu	%xmm2,0(%rdi)
2094	movdqu	%xmm3,16(%rdi)
2095	movdqu	%xmm4,32(%rdi)
2096	movdqu	%xmm5,48(%rdi)
2097	.byte	0xf3,0xc3
2098
2099L$SEH_end_nistz256_select_w7:
2100
2101
2102
2103
2104.p2align	5
2105ecp_nistz256_avx2_select_w5:
2106
2107L$avx2_select_w5:
2108	vzeroupper
2109	vmovdqa	L$Two(%rip),%ymm0
2110
2111	vpxor	%ymm2,%ymm2,%ymm2
2112	vpxor	%ymm3,%ymm3,%ymm3
2113	vpxor	%ymm4,%ymm4,%ymm4
2114
2115	vmovdqa	L$One(%rip),%ymm5
2116	vmovdqa	L$Two(%rip),%ymm10
2117
2118	vmovd	%edx,%xmm1
2119	vpermd	%ymm1,%ymm2,%ymm1
2120
2121	movq	$8,%rax
2122L$select_loop_avx2_w5:
2123
2124	vmovdqa	0(%rsi),%ymm6
2125	vmovdqa	32(%rsi),%ymm7
2126	vmovdqa	64(%rsi),%ymm8
2127
2128	vmovdqa	96(%rsi),%ymm11
2129	vmovdqa	128(%rsi),%ymm12
2130	vmovdqa	160(%rsi),%ymm13
2131
2132	vpcmpeqd	%ymm1,%ymm5,%ymm9
2133	vpcmpeqd	%ymm1,%ymm10,%ymm14
2134
2135	vpaddd	%ymm0,%ymm5,%ymm5
2136	vpaddd	%ymm0,%ymm10,%ymm10
2137	leaq	192(%rsi),%rsi
2138
2139	vpand	%ymm9,%ymm6,%ymm6
2140	vpand	%ymm9,%ymm7,%ymm7
2141	vpand	%ymm9,%ymm8,%ymm8
2142	vpand	%ymm14,%ymm11,%ymm11
2143	vpand	%ymm14,%ymm12,%ymm12
2144	vpand	%ymm14,%ymm13,%ymm13
2145
2146	vpxor	%ymm6,%ymm2,%ymm2
2147	vpxor	%ymm7,%ymm3,%ymm3
2148	vpxor	%ymm8,%ymm4,%ymm4
2149	vpxor	%ymm11,%ymm2,%ymm2
2150	vpxor	%ymm12,%ymm3,%ymm3
2151	vpxor	%ymm13,%ymm4,%ymm4
2152
2153	decq	%rax
2154	jnz	L$select_loop_avx2_w5
2155
2156	vmovdqu	%ymm2,0(%rdi)
2157	vmovdqu	%ymm3,32(%rdi)
2158	vmovdqu	%ymm4,64(%rdi)
2159	vzeroupper
2160	.byte	0xf3,0xc3
2161
2162L$SEH_end_ecp_nistz256_avx2_select_w5:
2163
2164
2165
2166
2167
2168.p2align	5
2169ecp_nistz256_avx2_select_w7:
2170
2171L$avx2_select_w7:
2172	vzeroupper
2173	vmovdqa	L$Three(%rip),%ymm0
2174
2175	vpxor	%ymm2,%ymm2,%ymm2
2176	vpxor	%ymm3,%ymm3,%ymm3
2177
2178	vmovdqa	L$One(%rip),%ymm4
2179	vmovdqa	L$Two(%rip),%ymm8
2180	vmovdqa	L$Three(%rip),%ymm12
2181
2182	vmovd	%edx,%xmm1
2183	vpermd	%ymm1,%ymm2,%ymm1
2184
2185
2186	movq	$21,%rax
2187L$select_loop_avx2_w7:
2188
2189	vmovdqa	0(%rsi),%ymm5
2190	vmovdqa	32(%rsi),%ymm6
2191
2192	vmovdqa	64(%rsi),%ymm9
2193	vmovdqa	96(%rsi),%ymm10
2194
2195	vmovdqa	128(%rsi),%ymm13
2196	vmovdqa	160(%rsi),%ymm14
2197
2198	vpcmpeqd	%ymm1,%ymm4,%ymm7
2199	vpcmpeqd	%ymm1,%ymm8,%ymm11
2200	vpcmpeqd	%ymm1,%ymm12,%ymm15
2201
2202	vpaddd	%ymm0,%ymm4,%ymm4
2203	vpaddd	%ymm0,%ymm8,%ymm8
2204	vpaddd	%ymm0,%ymm12,%ymm12
2205	leaq	192(%rsi),%rsi
2206
2207	vpand	%ymm7,%ymm5,%ymm5
2208	vpand	%ymm7,%ymm6,%ymm6
2209	vpand	%ymm11,%ymm9,%ymm9
2210	vpand	%ymm11,%ymm10,%ymm10
2211	vpand	%ymm15,%ymm13,%ymm13
2212	vpand	%ymm15,%ymm14,%ymm14
2213
2214	vpxor	%ymm5,%ymm2,%ymm2
2215	vpxor	%ymm6,%ymm3,%ymm3
2216	vpxor	%ymm9,%ymm2,%ymm2
2217	vpxor	%ymm10,%ymm3,%ymm3
2218	vpxor	%ymm13,%ymm2,%ymm2
2219	vpxor	%ymm14,%ymm3,%ymm3
2220
2221	decq	%rax
2222	jnz	L$select_loop_avx2_w7
2223
2224
2225	vmovdqa	0(%rsi),%ymm5
2226	vmovdqa	32(%rsi),%ymm6
2227
2228	vpcmpeqd	%ymm1,%ymm4,%ymm7
2229
2230	vpand	%ymm7,%ymm5,%ymm5
2231	vpand	%ymm7,%ymm6,%ymm6
2232
2233	vpxor	%ymm5,%ymm2,%ymm2
2234	vpxor	%ymm6,%ymm3,%ymm3
2235
2236	vmovdqu	%ymm2,0(%rdi)
2237	vmovdqu	%ymm3,32(%rdi)
2238	vzeroupper
2239	.byte	0xf3,0xc3
2240
2241L$SEH_end_ecp_nistz256_avx2_select_w7:
2242
2243
2244.p2align	5
2245__ecp_nistz256_add_toq:
2246
2247	xorq	%r11,%r11
2248	addq	0(%rbx),%r12
2249	adcq	8(%rbx),%r13
2250	movq	%r12,%rax
2251	adcq	16(%rbx),%r8
2252	adcq	24(%rbx),%r9
2253	movq	%r13,%rbp
2254	adcq	$0,%r11
2255
2256	subq	$-1,%r12
2257	movq	%r8,%rcx
2258	sbbq	%r14,%r13
2259	sbbq	$0,%r8
2260	movq	%r9,%r10
2261	sbbq	%r15,%r9
2262	sbbq	$0,%r11
2263
2264	cmovcq	%rax,%r12
2265	cmovcq	%rbp,%r13
2266	movq	%r12,0(%rdi)
2267	cmovcq	%rcx,%r8
2268	movq	%r13,8(%rdi)
2269	cmovcq	%r10,%r9
2270	movq	%r8,16(%rdi)
2271	movq	%r9,24(%rdi)
2272
2273	.byte	0xf3,0xc3
2274
2275
2276
2277
2278.p2align	5
2279__ecp_nistz256_sub_fromq:
2280
2281	subq	0(%rbx),%r12
2282	sbbq	8(%rbx),%r13
2283	movq	%r12,%rax
2284	sbbq	16(%rbx),%r8
2285	sbbq	24(%rbx),%r9
2286	movq	%r13,%rbp
2287	sbbq	%r11,%r11
2288
2289	addq	$-1,%r12
2290	movq	%r8,%rcx
2291	adcq	%r14,%r13
2292	adcq	$0,%r8
2293	movq	%r9,%r10
2294	adcq	%r15,%r9
2295	testq	%r11,%r11
2296
2297	cmovzq	%rax,%r12
2298	cmovzq	%rbp,%r13
2299	movq	%r12,0(%rdi)
2300	cmovzq	%rcx,%r8
2301	movq	%r13,8(%rdi)
2302	cmovzq	%r10,%r9
2303	movq	%r8,16(%rdi)
2304	movq	%r9,24(%rdi)
2305
2306	.byte	0xf3,0xc3
2307
2308
2309
2310
2311.p2align	5
2312__ecp_nistz256_subq:
2313
2314	subq	%r12,%rax
2315	sbbq	%r13,%rbp
2316	movq	%rax,%r12
2317	sbbq	%r8,%rcx
2318	sbbq	%r9,%r10
2319	movq	%rbp,%r13
2320	sbbq	%r11,%r11
2321
2322	addq	$-1,%rax
2323	movq	%rcx,%r8
2324	adcq	%r14,%rbp
2325	adcq	$0,%rcx
2326	movq	%r10,%r9
2327	adcq	%r15,%r10
2328	testq	%r11,%r11
2329
2330	cmovnzq	%rax,%r12
2331	cmovnzq	%rbp,%r13
2332	cmovnzq	%rcx,%r8
2333	cmovnzq	%r10,%r9
2334
2335	.byte	0xf3,0xc3
2336
2337
2338
2339
2340.p2align	5
2341__ecp_nistz256_mul_by_2q:
2342
2343	xorq	%r11,%r11
2344	addq	%r12,%r12
2345	adcq	%r13,%r13
2346	movq	%r12,%rax
2347	adcq	%r8,%r8
2348	adcq	%r9,%r9
2349	movq	%r13,%rbp
2350	adcq	$0,%r11
2351
2352	subq	$-1,%r12
2353	movq	%r8,%rcx
2354	sbbq	%r14,%r13
2355	sbbq	$0,%r8
2356	movq	%r9,%r10
2357	sbbq	%r15,%r9
2358	sbbq	$0,%r11
2359
2360	cmovcq	%rax,%r12
2361	cmovcq	%rbp,%r13
2362	movq	%r12,0(%rdi)
2363	cmovcq	%rcx,%r8
2364	movq	%r13,8(%rdi)
2365	cmovcq	%r10,%r9
2366	movq	%r8,16(%rdi)
2367	movq	%r9,24(%rdi)
2368
2369	.byte	0xf3,0xc3
2370
2371
2372.globl	_p256_point_double
2373.private_extern _p256_point_double
2374
2375.p2align	5
2376_p256_point_double:
2377
2378	leaq	_OPENSSL_ia32cap_P(%rip),%rcx
2379	movq	8(%rcx),%rcx
2380	andl	$0x80100,%ecx
2381	cmpl	$0x80100,%ecx
2382	je	L$point_doublex
2383	pushq	%rbp
2384
2385	pushq	%rbx
2386
2387	pushq	%r12
2388
2389	pushq	%r13
2390
2391	pushq	%r14
2392
2393	pushq	%r15
2394
2395	subq	$160+8,%rsp
2396
2397L$point_doubleq_body:
2398
2399L$point_double_shortcutq:
2400	movdqu	0(%rsi),%xmm0
2401	movq	%rsi,%rbx
2402	movdqu	16(%rsi),%xmm1
2403	movq	32+0(%rsi),%r12
2404	movq	32+8(%rsi),%r13
2405	movq	32+16(%rsi),%r8
2406	movq	32+24(%rsi),%r9
2407	movq	L$poly+8(%rip),%r14
2408	movq	L$poly+24(%rip),%r15
2409	movdqa	%xmm0,96(%rsp)
2410	movdqa	%xmm1,96+16(%rsp)
2411	leaq	32(%rdi),%r10
2412	leaq	64(%rdi),%r11
2413.byte	102,72,15,110,199
2414.byte	102,73,15,110,202
2415.byte	102,73,15,110,211
2416
2417	leaq	0(%rsp),%rdi
2418	call	__ecp_nistz256_mul_by_2q
2419
2420	movq	64+0(%rsi),%rax
2421	movq	64+8(%rsi),%r14
2422	movq	64+16(%rsi),%r15
2423	movq	64+24(%rsi),%r8
2424	leaq	64-0(%rsi),%rsi
2425	leaq	64(%rsp),%rdi
2426	call	__ecp_nistz256_sqr_montq
2427
2428	movq	0+0(%rsp),%rax
2429	movq	8+0(%rsp),%r14
2430	leaq	0+0(%rsp),%rsi
2431	movq	16+0(%rsp),%r15
2432	movq	24+0(%rsp),%r8
2433	leaq	0(%rsp),%rdi
2434	call	__ecp_nistz256_sqr_montq
2435
2436	movq	32(%rbx),%rax
2437	movq	64+0(%rbx),%r9
2438	movq	64+8(%rbx),%r10
2439	movq	64+16(%rbx),%r11
2440	movq	64+24(%rbx),%r12
2441	leaq	64-0(%rbx),%rsi
2442	leaq	32(%rbx),%rbx
2443.byte	102,72,15,126,215
2444	call	__ecp_nistz256_mul_montq
2445	call	__ecp_nistz256_mul_by_2q
2446
2447	movq	96+0(%rsp),%r12
2448	movq	96+8(%rsp),%r13
2449	leaq	64(%rsp),%rbx
2450	movq	96+16(%rsp),%r8
2451	movq	96+24(%rsp),%r9
2452	leaq	32(%rsp),%rdi
2453	call	__ecp_nistz256_add_toq
2454
2455	movq	96+0(%rsp),%r12
2456	movq	96+8(%rsp),%r13
2457	leaq	64(%rsp),%rbx
2458	movq	96+16(%rsp),%r8
2459	movq	96+24(%rsp),%r9
2460	leaq	64(%rsp),%rdi
2461	call	__ecp_nistz256_sub_fromq
2462
2463	movq	0+0(%rsp),%rax
2464	movq	8+0(%rsp),%r14
2465	leaq	0+0(%rsp),%rsi
2466	movq	16+0(%rsp),%r15
2467	movq	24+0(%rsp),%r8
2468.byte	102,72,15,126,207
2469	call	__ecp_nistz256_sqr_montq
2470	xorq	%r9,%r9
2471	movq	%r12,%rax
2472	addq	$-1,%r12
2473	movq	%r13,%r10
2474	adcq	%rsi,%r13
2475	movq	%r14,%rcx
2476	adcq	$0,%r14
2477	movq	%r15,%r8
2478	adcq	%rbp,%r15
2479	adcq	$0,%r9
2480	xorq	%rsi,%rsi
2481	testq	$1,%rax
2482
2483	cmovzq	%rax,%r12
2484	cmovzq	%r10,%r13
2485	cmovzq	%rcx,%r14
2486	cmovzq	%r8,%r15
2487	cmovzq	%rsi,%r9
2488
2489	movq	%r13,%rax
2490	shrq	$1,%r12
2491	shlq	$63,%rax
2492	movq	%r14,%r10
2493	shrq	$1,%r13
2494	orq	%rax,%r12
2495	shlq	$63,%r10
2496	movq	%r15,%rcx
2497	shrq	$1,%r14
2498	orq	%r10,%r13
2499	shlq	$63,%rcx
2500	movq	%r12,0(%rdi)
2501	shrq	$1,%r15
2502	movq	%r13,8(%rdi)
2503	shlq	$63,%r9
2504	orq	%rcx,%r14
2505	orq	%r9,%r15
2506	movq	%r14,16(%rdi)
2507	movq	%r15,24(%rdi)
2508	movq	64(%rsp),%rax
2509	leaq	64(%rsp),%rbx
2510	movq	0+32(%rsp),%r9
2511	movq	8+32(%rsp),%r10
2512	leaq	0+32(%rsp),%rsi
2513	movq	16+32(%rsp),%r11
2514	movq	24+32(%rsp),%r12
2515	leaq	32(%rsp),%rdi
2516	call	__ecp_nistz256_mul_montq
2517
2518	leaq	128(%rsp),%rdi
2519	call	__ecp_nistz256_mul_by_2q
2520
2521	leaq	32(%rsp),%rbx
2522	leaq	32(%rsp),%rdi
2523	call	__ecp_nistz256_add_toq
2524
2525	movq	96(%rsp),%rax
2526	leaq	96(%rsp),%rbx
2527	movq	0+0(%rsp),%r9
2528	movq	8+0(%rsp),%r10
2529	leaq	0+0(%rsp),%rsi
2530	movq	16+0(%rsp),%r11
2531	movq	24+0(%rsp),%r12
2532	leaq	0(%rsp),%rdi
2533	call	__ecp_nistz256_mul_montq
2534
2535	leaq	128(%rsp),%rdi
2536	call	__ecp_nistz256_mul_by_2q
2537
2538	movq	0+32(%rsp),%rax
2539	movq	8+32(%rsp),%r14
2540	leaq	0+32(%rsp),%rsi
2541	movq	16+32(%rsp),%r15
2542	movq	24+32(%rsp),%r8
2543.byte	102,72,15,126,199
2544	call	__ecp_nistz256_sqr_montq
2545
2546	leaq	128(%rsp),%rbx
2547	movq	%r14,%r8
2548	movq	%r15,%r9
2549	movq	%rsi,%r14
2550	movq	%rbp,%r15
2551	call	__ecp_nistz256_sub_fromq
2552
2553	movq	0+0(%rsp),%rax
2554	movq	0+8(%rsp),%rbp
2555	movq	0+16(%rsp),%rcx
2556	movq	0+24(%rsp),%r10
2557	leaq	0(%rsp),%rdi
2558	call	__ecp_nistz256_subq
2559
2560	movq	32(%rsp),%rax
2561	leaq	32(%rsp),%rbx
2562	movq	%r12,%r14
2563	xorl	%ecx,%ecx
2564	movq	%r12,0+0(%rsp)
2565	movq	%r13,%r10
2566	movq	%r13,0+8(%rsp)
2567	cmovzq	%r8,%r11
2568	movq	%r8,0+16(%rsp)
2569	leaq	0-0(%rsp),%rsi
2570	cmovzq	%r9,%r12
2571	movq	%r9,0+24(%rsp)
2572	movq	%r14,%r9
2573	leaq	0(%rsp),%rdi
2574	call	__ecp_nistz256_mul_montq
2575
2576.byte	102,72,15,126,203
2577.byte	102,72,15,126,207
2578	call	__ecp_nistz256_sub_fromq
2579
2580	leaq	160+56(%rsp),%rsi
2581
2582	movq	-48(%rsi),%r15
2583
2584	movq	-40(%rsi),%r14
2585
2586	movq	-32(%rsi),%r13
2587
2588	movq	-24(%rsi),%r12
2589
2590	movq	-16(%rsi),%rbx
2591
2592	movq	-8(%rsi),%rbp
2593
2594	leaq	(%rsi),%rsp
2595
2596L$point_doubleq_epilogue:
2597	.byte	0xf3,0xc3
2598
2599
2600.globl	_p256_point_add
2601.private_extern _p256_point_add
2602
2603.p2align	5
2604_p256_point_add:
2605
2606	leaq	_OPENSSL_ia32cap_P(%rip),%rcx
2607	movq	8(%rcx),%rcx
2608	andl	$0x80100,%ecx
2609	cmpl	$0x80100,%ecx
2610	je	L$point_addx
2611	pushq	%rbp
2612
2613	pushq	%rbx
2614
2615	pushq	%r12
2616
2617	pushq	%r13
2618
2619	pushq	%r14
2620
2621	pushq	%r15
2622
2623	subq	$576+8,%rsp
2624
2625L$point_addq_body:
2626
2627	movdqu	0(%rsi),%xmm0
2628	movdqu	16(%rsi),%xmm1
2629	movdqu	32(%rsi),%xmm2
2630	movdqu	48(%rsi),%xmm3
2631	movdqu	64(%rsi),%xmm4
2632	movdqu	80(%rsi),%xmm5
2633	movq	%rsi,%rbx
2634	movq	%rdx,%rsi
2635	movdqa	%xmm0,384(%rsp)
2636	movdqa	%xmm1,384+16(%rsp)
2637	movdqa	%xmm2,416(%rsp)
2638	movdqa	%xmm3,416+16(%rsp)
2639	movdqa	%xmm4,448(%rsp)
2640	movdqa	%xmm5,448+16(%rsp)
2641	por	%xmm4,%xmm5
2642
2643	movdqu	0(%rsi),%xmm0
2644	pshufd	$0xb1,%xmm5,%xmm3
2645	movdqu	16(%rsi),%xmm1
2646	movdqu	32(%rsi),%xmm2
2647	por	%xmm3,%xmm5
2648	movdqu	48(%rsi),%xmm3
2649	movq	64+0(%rsi),%rax
2650	movq	64+8(%rsi),%r14
2651	movq	64+16(%rsi),%r15
2652	movq	64+24(%rsi),%r8
2653	movdqa	%xmm0,480(%rsp)
2654	pshufd	$0x1e,%xmm5,%xmm4
2655	movdqa	%xmm1,480+16(%rsp)
2656	movdqu	64(%rsi),%xmm0
2657	movdqu	80(%rsi),%xmm1
2658	movdqa	%xmm2,512(%rsp)
2659	movdqa	%xmm3,512+16(%rsp)
2660	por	%xmm4,%xmm5
2661	pxor	%xmm4,%xmm4
2662	por	%xmm0,%xmm1
2663.byte	102,72,15,110,199
2664
2665	leaq	64-0(%rsi),%rsi
2666	movq	%rax,544+0(%rsp)
2667	movq	%r14,544+8(%rsp)
2668	movq	%r15,544+16(%rsp)
2669	movq	%r8,544+24(%rsp)
2670	leaq	96(%rsp),%rdi
2671	call	__ecp_nistz256_sqr_montq
2672
2673	pcmpeqd	%xmm4,%xmm5
2674	pshufd	$0xb1,%xmm1,%xmm4
2675	por	%xmm1,%xmm4
2676	pshufd	$0,%xmm5,%xmm5
2677	pshufd	$0x1e,%xmm4,%xmm3
2678	por	%xmm3,%xmm4
2679	pxor	%xmm3,%xmm3
2680	pcmpeqd	%xmm3,%xmm4
2681	pshufd	$0,%xmm4,%xmm4
2682	movq	64+0(%rbx),%rax
2683	movq	64+8(%rbx),%r14
2684	movq	64+16(%rbx),%r15
2685	movq	64+24(%rbx),%r8
2686.byte	102,72,15,110,203
2687
2688	leaq	64-0(%rbx),%rsi
2689	leaq	32(%rsp),%rdi
2690	call	__ecp_nistz256_sqr_montq
2691
2692	movq	544(%rsp),%rax
2693	leaq	544(%rsp),%rbx
2694	movq	0+96(%rsp),%r9
2695	movq	8+96(%rsp),%r10
2696	leaq	0+96(%rsp),%rsi
2697	movq	16+96(%rsp),%r11
2698	movq	24+96(%rsp),%r12
2699	leaq	224(%rsp),%rdi
2700	call	__ecp_nistz256_mul_montq
2701
2702	movq	448(%rsp),%rax
2703	leaq	448(%rsp),%rbx
2704	movq	0+32(%rsp),%r9
2705	movq	8+32(%rsp),%r10
2706	leaq	0+32(%rsp),%rsi
2707	movq	16+32(%rsp),%r11
2708	movq	24+32(%rsp),%r12
2709	leaq	256(%rsp),%rdi
2710	call	__ecp_nistz256_mul_montq
2711
2712	movq	416(%rsp),%rax
2713	leaq	416(%rsp),%rbx
2714	movq	0+224(%rsp),%r9
2715	movq	8+224(%rsp),%r10
2716	leaq	0+224(%rsp),%rsi
2717	movq	16+224(%rsp),%r11
2718	movq	24+224(%rsp),%r12
2719	leaq	224(%rsp),%rdi
2720	call	__ecp_nistz256_mul_montq
2721
2722	movq	512(%rsp),%rax
2723	leaq	512(%rsp),%rbx
2724	movq	0+256(%rsp),%r9
2725	movq	8+256(%rsp),%r10
2726	leaq	0+256(%rsp),%rsi
2727	movq	16+256(%rsp),%r11
2728	movq	24+256(%rsp),%r12
2729	leaq	256(%rsp),%rdi
2730	call	__ecp_nistz256_mul_montq
2731
2732	leaq	224(%rsp),%rbx
2733	leaq	64(%rsp),%rdi
2734	call	__ecp_nistz256_sub_fromq
2735
2736	orq	%r13,%r12
2737	movdqa	%xmm4,%xmm2
2738	orq	%r8,%r12
2739	orq	%r9,%r12
2740	por	%xmm5,%xmm2
2741.byte	102,73,15,110,220
2742
2743	movq	384(%rsp),%rax
2744	leaq	384(%rsp),%rbx
2745	movq	0+96(%rsp),%r9
2746	movq	8+96(%rsp),%r10
2747	leaq	0+96(%rsp),%rsi
2748	movq	16+96(%rsp),%r11
2749	movq	24+96(%rsp),%r12
2750	leaq	160(%rsp),%rdi
2751	call	__ecp_nistz256_mul_montq
2752
2753	movq	480(%rsp),%rax
2754	leaq	480(%rsp),%rbx
2755	movq	0+32(%rsp),%r9
2756	movq	8+32(%rsp),%r10
2757	leaq	0+32(%rsp),%rsi
2758	movq	16+32(%rsp),%r11
2759	movq	24+32(%rsp),%r12
2760	leaq	192(%rsp),%rdi
2761	call	__ecp_nistz256_mul_montq
2762
2763	leaq	160(%rsp),%rbx
2764	leaq	0(%rsp),%rdi
2765	call	__ecp_nistz256_sub_fromq
2766
2767	orq	%r13,%r12
2768	orq	%r8,%r12
2769	orq	%r9,%r12
2770
2771.byte	102,73,15,126,208
2772.byte	102,73,15,126,217
2773	orq	%r8,%r12
2774.byte	0x3e
2775	jnz	L$add_proceedq
2776
2777
2778
2779	testq	%r9,%r9
2780	jz	L$add_doubleq
2781
2782
2783
2784
2785
2786
2787.byte	102,72,15,126,199
2788	pxor	%xmm0,%xmm0
2789	movdqu	%xmm0,0(%rdi)
2790	movdqu	%xmm0,16(%rdi)
2791	movdqu	%xmm0,32(%rdi)
2792	movdqu	%xmm0,48(%rdi)
2793	movdqu	%xmm0,64(%rdi)
2794	movdqu	%xmm0,80(%rdi)
2795	jmp	L$add_doneq
2796
2797.p2align	5
2798L$add_doubleq:
2799.byte	102,72,15,126,206
2800.byte	102,72,15,126,199
2801	addq	$416,%rsp
2802
2803	jmp	L$point_double_shortcutq
2804
2805
2806.p2align	5
2807L$add_proceedq:
2808	movq	0+64(%rsp),%rax
2809	movq	8+64(%rsp),%r14
2810	leaq	0+64(%rsp),%rsi
2811	movq	16+64(%rsp),%r15
2812	movq	24+64(%rsp),%r8
2813	leaq	96(%rsp),%rdi
2814	call	__ecp_nistz256_sqr_montq
2815
2816	movq	448(%rsp),%rax
2817	leaq	448(%rsp),%rbx
2818	movq	0+0(%rsp),%r9
2819	movq	8+0(%rsp),%r10
2820	leaq	0+0(%rsp),%rsi
2821	movq	16+0(%rsp),%r11
2822	movq	24+0(%rsp),%r12
2823	leaq	352(%rsp),%rdi
2824	call	__ecp_nistz256_mul_montq
2825
2826	movq	0+0(%rsp),%rax
2827	movq	8+0(%rsp),%r14
2828	leaq	0+0(%rsp),%rsi
2829	movq	16+0(%rsp),%r15
2830	movq	24+0(%rsp),%r8
2831	leaq	32(%rsp),%rdi
2832	call	__ecp_nistz256_sqr_montq
2833
2834	movq	544(%rsp),%rax
2835	leaq	544(%rsp),%rbx
2836	movq	0+352(%rsp),%r9
2837	movq	8+352(%rsp),%r10
2838	leaq	0+352(%rsp),%rsi
2839	movq	16+352(%rsp),%r11
2840	movq	24+352(%rsp),%r12
2841	leaq	352(%rsp),%rdi
2842	call	__ecp_nistz256_mul_montq
2843
2844	movq	0(%rsp),%rax
2845	leaq	0(%rsp),%rbx
2846	movq	0+32(%rsp),%r9
2847	movq	8+32(%rsp),%r10
2848	leaq	0+32(%rsp),%rsi
2849	movq	16+32(%rsp),%r11
2850	movq	24+32(%rsp),%r12
2851	leaq	128(%rsp),%rdi
2852	call	__ecp_nistz256_mul_montq
2853
2854	movq	160(%rsp),%rax
2855	leaq	160(%rsp),%rbx
2856	movq	0+32(%rsp),%r9
2857	movq	8+32(%rsp),%r10
2858	leaq	0+32(%rsp),%rsi
2859	movq	16+32(%rsp),%r11
2860	movq	24+32(%rsp),%r12
2861	leaq	192(%rsp),%rdi
2862	call	__ecp_nistz256_mul_montq
2863
2864
2865
2866
2867	xorq	%r11,%r11
2868	addq	%r12,%r12
2869	leaq	96(%rsp),%rsi
2870	adcq	%r13,%r13
2871	movq	%r12,%rax
2872	adcq	%r8,%r8
2873	adcq	%r9,%r9
2874	movq	%r13,%rbp
2875	adcq	$0,%r11
2876
2877	subq	$-1,%r12
2878	movq	%r8,%rcx
2879	sbbq	%r14,%r13
2880	sbbq	$0,%r8
2881	movq	%r9,%r10
2882	sbbq	%r15,%r9
2883	sbbq	$0,%r11
2884
2885	cmovcq	%rax,%r12
2886	movq	0(%rsi),%rax
2887	cmovcq	%rbp,%r13
2888	movq	8(%rsi),%rbp
2889	cmovcq	%rcx,%r8
2890	movq	16(%rsi),%rcx
2891	cmovcq	%r10,%r9
2892	movq	24(%rsi),%r10
2893
2894	call	__ecp_nistz256_subq
2895
2896	leaq	128(%rsp),%rbx
2897	leaq	288(%rsp),%rdi
2898	call	__ecp_nistz256_sub_fromq
2899
2900	movq	192+0(%rsp),%rax
2901	movq	192+8(%rsp),%rbp
2902	movq	192+16(%rsp),%rcx
2903	movq	192+24(%rsp),%r10
2904	leaq	320(%rsp),%rdi
2905
2906	call	__ecp_nistz256_subq
2907
2908	movq	%r12,0(%rdi)
2909	movq	%r13,8(%rdi)
2910	movq	%r8,16(%rdi)
2911	movq	%r9,24(%rdi)
2912	movq	128(%rsp),%rax
2913	leaq	128(%rsp),%rbx
2914	movq	0+224(%rsp),%r9
2915	movq	8+224(%rsp),%r10
2916	leaq	0+224(%rsp),%rsi
2917	movq	16+224(%rsp),%r11
2918	movq	24+224(%rsp),%r12
2919	leaq	256(%rsp),%rdi
2920	call	__ecp_nistz256_mul_montq
2921
2922	movq	320(%rsp),%rax
2923	leaq	320(%rsp),%rbx
2924	movq	0+64(%rsp),%r9
2925	movq	8+64(%rsp),%r10
2926	leaq	0+64(%rsp),%rsi
2927	movq	16+64(%rsp),%r11
2928	movq	24+64(%rsp),%r12
2929	leaq	320(%rsp),%rdi
2930	call	__ecp_nistz256_mul_montq
2931
2932	leaq	256(%rsp),%rbx
2933	leaq	320(%rsp),%rdi
2934	call	__ecp_nistz256_sub_fromq
2935
2936.byte	102,72,15,126,199
2937
2938	movdqa	%xmm5,%xmm0
2939	movdqa	%xmm5,%xmm1
2940	pandn	352(%rsp),%xmm0
2941	movdqa	%xmm5,%xmm2
2942	pandn	352+16(%rsp),%xmm1
2943	movdqa	%xmm5,%xmm3
2944	pand	544(%rsp),%xmm2
2945	pand	544+16(%rsp),%xmm3
2946	por	%xmm0,%xmm2
2947	por	%xmm1,%xmm3
2948
2949	movdqa	%xmm4,%xmm0
2950	movdqa	%xmm4,%xmm1
2951	pandn	%xmm2,%xmm0
2952	movdqa	%xmm4,%xmm2
2953	pandn	%xmm3,%xmm1
2954	movdqa	%xmm4,%xmm3
2955	pand	448(%rsp),%xmm2
2956	pand	448+16(%rsp),%xmm3
2957	por	%xmm0,%xmm2
2958	por	%xmm1,%xmm3
2959	movdqu	%xmm2,64(%rdi)
2960	movdqu	%xmm3,80(%rdi)
2961
2962	movdqa	%xmm5,%xmm0
2963	movdqa	%xmm5,%xmm1
2964	pandn	288(%rsp),%xmm0
2965	movdqa	%xmm5,%xmm2
2966	pandn	288+16(%rsp),%xmm1
2967	movdqa	%xmm5,%xmm3
2968	pand	480(%rsp),%xmm2
2969	pand	480+16(%rsp),%xmm3
2970	por	%xmm0,%xmm2
2971	por	%xmm1,%xmm3
2972
2973	movdqa	%xmm4,%xmm0
2974	movdqa	%xmm4,%xmm1
2975	pandn	%xmm2,%xmm0
2976	movdqa	%xmm4,%xmm2
2977	pandn	%xmm3,%xmm1
2978	movdqa	%xmm4,%xmm3
2979	pand	384(%rsp),%xmm2
2980	pand	384+16(%rsp),%xmm3
2981	por	%xmm0,%xmm2
2982	por	%xmm1,%xmm3
2983	movdqu	%xmm2,0(%rdi)
2984	movdqu	%xmm3,16(%rdi)
2985
2986	movdqa	%xmm5,%xmm0
2987	movdqa	%xmm5,%xmm1
2988	pandn	320(%rsp),%xmm0
2989	movdqa	%xmm5,%xmm2
2990	pandn	320+16(%rsp),%xmm1
2991	movdqa	%xmm5,%xmm3
2992	pand	512(%rsp),%xmm2
2993	pand	512+16(%rsp),%xmm3
2994	por	%xmm0,%xmm2
2995	por	%xmm1,%xmm3
2996
2997	movdqa	%xmm4,%xmm0
2998	movdqa	%xmm4,%xmm1
2999	pandn	%xmm2,%xmm0
3000	movdqa	%xmm4,%xmm2
3001	pandn	%xmm3,%xmm1
3002	movdqa	%xmm4,%xmm3
3003	pand	416(%rsp),%xmm2
3004	pand	416+16(%rsp),%xmm3
3005	por	%xmm0,%xmm2
3006	por	%xmm1,%xmm3
3007	movdqu	%xmm2,32(%rdi)
3008	movdqu	%xmm3,48(%rdi)
3009
3010L$add_doneq:
3011	leaq	576+56(%rsp),%rsi
3012
3013	movq	-48(%rsi),%r15
3014
3015	movq	-40(%rsi),%r14
3016
3017	movq	-32(%rsi),%r13
3018
3019	movq	-24(%rsi),%r12
3020
3021	movq	-16(%rsi),%rbx
3022
3023	movq	-8(%rsi),%rbp
3024
3025	leaq	(%rsi),%rsp
3026
3027L$point_addq_epilogue:
3028	.byte	0xf3,0xc3
3029
3030
3031.globl	_p256_point_add_affine
3032.private_extern _p256_point_add_affine
3033
3034.p2align	5
3035_p256_point_add_affine:
3036
3037	leaq	_OPENSSL_ia32cap_P(%rip),%rcx
3038	movq	8(%rcx),%rcx
3039	andl	$0x80100,%ecx
3040	cmpl	$0x80100,%ecx
3041	je	L$point_add_affinex
3042	pushq	%rbp
3043
3044	pushq	%rbx
3045
3046	pushq	%r12
3047
3048	pushq	%r13
3049
3050	pushq	%r14
3051
3052	pushq	%r15
3053
3054	subq	$480+8,%rsp
3055
3056L$add_affineq_body:
3057
3058	movdqu	0(%rsi),%xmm0
3059	movq	%rdx,%rbx
3060	movdqu	16(%rsi),%xmm1
3061	movdqu	32(%rsi),%xmm2
3062	movdqu	48(%rsi),%xmm3
3063	movdqu	64(%rsi),%xmm4
3064	movdqu	80(%rsi),%xmm5
3065	movq	64+0(%rsi),%rax
3066	movq	64+8(%rsi),%r14
3067	movq	64+16(%rsi),%r15
3068	movq	64+24(%rsi),%r8
3069	movdqa	%xmm0,320(%rsp)
3070	movdqa	%xmm1,320+16(%rsp)
3071	movdqa	%xmm2,352(%rsp)
3072	movdqa	%xmm3,352+16(%rsp)
3073	movdqa	%xmm4,384(%rsp)
3074	movdqa	%xmm5,384+16(%rsp)
3075	por	%xmm4,%xmm5
3076
3077	movdqu	0(%rbx),%xmm0
3078	pshufd	$0xb1,%xmm5,%xmm3
3079	movdqu	16(%rbx),%xmm1
3080	movdqu	32(%rbx),%xmm2
3081	por	%xmm3,%xmm5
3082	movdqu	48(%rbx),%xmm3
3083	movdqa	%xmm0,416(%rsp)
3084	pshufd	$0x1e,%xmm5,%xmm4
3085	movdqa	%xmm1,416+16(%rsp)
3086	por	%xmm0,%xmm1
3087.byte	102,72,15,110,199
3088	movdqa	%xmm2,448(%rsp)
3089	movdqa	%xmm3,448+16(%rsp)
3090	por	%xmm2,%xmm3
3091	por	%xmm4,%xmm5
3092	pxor	%xmm4,%xmm4
3093	por	%xmm1,%xmm3
3094
3095	leaq	64-0(%rsi),%rsi
3096	leaq	32(%rsp),%rdi
3097	call	__ecp_nistz256_sqr_montq
3098
3099	pcmpeqd	%xmm4,%xmm5
3100	pshufd	$0xb1,%xmm3,%xmm4
3101	movq	0(%rbx),%rax
3102
3103	movq	%r12,%r9
3104	por	%xmm3,%xmm4
3105	pshufd	$0,%xmm5,%xmm5
3106	pshufd	$0x1e,%xmm4,%xmm3
3107	movq	%r13,%r10
3108	por	%xmm3,%xmm4
3109	pxor	%xmm3,%xmm3
3110	movq	%r14,%r11
3111	pcmpeqd	%xmm3,%xmm4
3112	pshufd	$0,%xmm4,%xmm4
3113
3114	leaq	32-0(%rsp),%rsi
3115	movq	%r15,%r12
3116	leaq	0(%rsp),%rdi
3117	call	__ecp_nistz256_mul_montq
3118
3119	leaq	320(%rsp),%rbx
3120	leaq	64(%rsp),%rdi
3121	call	__ecp_nistz256_sub_fromq
3122
3123	movq	384(%rsp),%rax
3124	leaq	384(%rsp),%rbx
3125	movq	0+32(%rsp),%r9
3126	movq	8+32(%rsp),%r10
3127	leaq	0+32(%rsp),%rsi
3128	movq	16+32(%rsp),%r11
3129	movq	24+32(%rsp),%r12
3130	leaq	32(%rsp),%rdi
3131	call	__ecp_nistz256_mul_montq
3132
3133	movq	384(%rsp),%rax
3134	leaq	384(%rsp),%rbx
3135	movq	0+64(%rsp),%r9
3136	movq	8+64(%rsp),%r10
3137	leaq	0+64(%rsp),%rsi
3138	movq	16+64(%rsp),%r11
3139	movq	24+64(%rsp),%r12
3140	leaq	288(%rsp),%rdi
3141	call	__ecp_nistz256_mul_montq
3142
3143	movq	448(%rsp),%rax
3144	leaq	448(%rsp),%rbx
3145	movq	0+32(%rsp),%r9
3146	movq	8+32(%rsp),%r10
3147	leaq	0+32(%rsp),%rsi
3148	movq	16+32(%rsp),%r11
3149	movq	24+32(%rsp),%r12
3150	leaq	32(%rsp),%rdi
3151	call	__ecp_nistz256_mul_montq
3152
3153	leaq	352(%rsp),%rbx
3154	leaq	96(%rsp),%rdi
3155	call	__ecp_nistz256_sub_fromq
3156
3157	movq	0+64(%rsp),%rax
3158	movq	8+64(%rsp),%r14
3159	leaq	0+64(%rsp),%rsi
3160	movq	16+64(%rsp),%r15
3161	movq	24+64(%rsp),%r8
3162	leaq	128(%rsp),%rdi
3163	call	__ecp_nistz256_sqr_montq
3164
3165	movq	0+96(%rsp),%rax
3166	movq	8+96(%rsp),%r14
3167	leaq	0+96(%rsp),%rsi
3168	movq	16+96(%rsp),%r15
3169	movq	24+96(%rsp),%r8
3170	leaq	192(%rsp),%rdi
3171	call	__ecp_nistz256_sqr_montq
3172
3173	movq	128(%rsp),%rax
3174	leaq	128(%rsp),%rbx
3175	movq	0+64(%rsp),%r9
3176	movq	8+64(%rsp),%r10
3177	leaq	0+64(%rsp),%rsi
3178	movq	16+64(%rsp),%r11
3179	movq	24+64(%rsp),%r12
3180	leaq	160(%rsp),%rdi
3181	call	__ecp_nistz256_mul_montq
3182
3183	movq	320(%rsp),%rax
3184	leaq	320(%rsp),%rbx
3185	movq	0+128(%rsp),%r9
3186	movq	8+128(%rsp),%r10
3187	leaq	0+128(%rsp),%rsi
3188	movq	16+128(%rsp),%r11
3189	movq	24+128(%rsp),%r12
3190	leaq	0(%rsp),%rdi
3191	call	__ecp_nistz256_mul_montq
3192
3193
3194
3195
3196	xorq	%r11,%r11
3197	addq	%r12,%r12
3198	leaq	192(%rsp),%rsi
3199	adcq	%r13,%r13
3200	movq	%r12,%rax
3201	adcq	%r8,%r8
3202	adcq	%r9,%r9
3203	movq	%r13,%rbp
3204	adcq	$0,%r11
3205
3206	subq	$-1,%r12
3207	movq	%r8,%rcx
3208	sbbq	%r14,%r13
3209	sbbq	$0,%r8
3210	movq	%r9,%r10
3211	sbbq	%r15,%r9
3212	sbbq	$0,%r11
3213
3214	cmovcq	%rax,%r12
3215	movq	0(%rsi),%rax
3216	cmovcq	%rbp,%r13
3217	movq	8(%rsi),%rbp
3218	cmovcq	%rcx,%r8
3219	movq	16(%rsi),%rcx
3220	cmovcq	%r10,%r9
3221	movq	24(%rsi),%r10
3222
3223	call	__ecp_nistz256_subq
3224
3225	leaq	160(%rsp),%rbx
3226	leaq	224(%rsp),%rdi
3227	call	__ecp_nistz256_sub_fromq
3228
3229	movq	0+0(%rsp),%rax
3230	movq	0+8(%rsp),%rbp
3231	movq	0+16(%rsp),%rcx
3232	movq	0+24(%rsp),%r10
3233	leaq	64(%rsp),%rdi
3234
3235	call	__ecp_nistz256_subq
3236
3237	movq	%r12,0(%rdi)
3238	movq	%r13,8(%rdi)
3239	movq	%r8,16(%rdi)
3240	movq	%r9,24(%rdi)
3241	movq	352(%rsp),%rax
3242	leaq	352(%rsp),%rbx
3243	movq	0+160(%rsp),%r9
3244	movq	8+160(%rsp),%r10
3245	leaq	0+160(%rsp),%rsi
3246	movq	16+160(%rsp),%r11
3247	movq	24+160(%rsp),%r12
3248	leaq	32(%rsp),%rdi
3249	call	__ecp_nistz256_mul_montq
3250
3251	movq	96(%rsp),%rax
3252	leaq	96(%rsp),%rbx
3253	movq	0+64(%rsp),%r9
3254	movq	8+64(%rsp),%r10
3255	leaq	0+64(%rsp),%rsi
3256	movq	16+64(%rsp),%r11
3257	movq	24+64(%rsp),%r12
3258	leaq	64(%rsp),%rdi
3259	call	__ecp_nistz256_mul_montq
3260
3261	leaq	32(%rsp),%rbx
3262	leaq	256(%rsp),%rdi
3263	call	__ecp_nistz256_sub_fromq
3264
3265.byte	102,72,15,126,199
3266
3267	movdqa	%xmm5,%xmm0
3268	movdqa	%xmm5,%xmm1
3269	pandn	288(%rsp),%xmm0
3270	movdqa	%xmm5,%xmm2
3271	pandn	288+16(%rsp),%xmm1
3272	movdqa	%xmm5,%xmm3
3273	pand	L$ONE_mont(%rip),%xmm2
3274	pand	L$ONE_mont+16(%rip),%xmm3
3275	por	%xmm0,%xmm2
3276	por	%xmm1,%xmm3
3277
3278	movdqa	%xmm4,%xmm0
3279	movdqa	%xmm4,%xmm1
3280	pandn	%xmm2,%xmm0
3281	movdqa	%xmm4,%xmm2
3282	pandn	%xmm3,%xmm1
3283	movdqa	%xmm4,%xmm3
3284	pand	384(%rsp),%xmm2
3285	pand	384+16(%rsp),%xmm3
3286	por	%xmm0,%xmm2
3287	por	%xmm1,%xmm3
3288	movdqu	%xmm2,64(%rdi)
3289	movdqu	%xmm3,80(%rdi)
3290
3291	movdqa	%xmm5,%xmm0
3292	movdqa	%xmm5,%xmm1
3293	pandn	224(%rsp),%xmm0
3294	movdqa	%xmm5,%xmm2
3295	pandn	224+16(%rsp),%xmm1
3296	movdqa	%xmm5,%xmm3
3297	pand	416(%rsp),%xmm2
3298	pand	416+16(%rsp),%xmm3
3299	por	%xmm0,%xmm2
3300	por	%xmm1,%xmm3
3301
3302	movdqa	%xmm4,%xmm0
3303	movdqa	%xmm4,%xmm1
3304	pandn	%xmm2,%xmm0
3305	movdqa	%xmm4,%xmm2
3306	pandn	%xmm3,%xmm1
3307	movdqa	%xmm4,%xmm3
3308	pand	320(%rsp),%xmm2
3309	pand	320+16(%rsp),%xmm3
3310	por	%xmm0,%xmm2
3311	por	%xmm1,%xmm3
3312	movdqu	%xmm2,0(%rdi)
3313	movdqu	%xmm3,16(%rdi)
3314
3315	movdqa	%xmm5,%xmm0
3316	movdqa	%xmm5,%xmm1
3317	pandn	256(%rsp),%xmm0
3318	movdqa	%xmm5,%xmm2
3319	pandn	256+16(%rsp),%xmm1
3320	movdqa	%xmm5,%xmm3
3321	pand	448(%rsp),%xmm2
3322	pand	448+16(%rsp),%xmm3
3323	por	%xmm0,%xmm2
3324	por	%xmm1,%xmm3
3325
3326	movdqa	%xmm4,%xmm0
3327	movdqa	%xmm4,%xmm1
3328	pandn	%xmm2,%xmm0
3329	movdqa	%xmm4,%xmm2
3330	pandn	%xmm3,%xmm1
3331	movdqa	%xmm4,%xmm3
3332	pand	352(%rsp),%xmm2
3333	pand	352+16(%rsp),%xmm3
3334	por	%xmm0,%xmm2
3335	por	%xmm1,%xmm3
3336	movdqu	%xmm2,32(%rdi)
3337	movdqu	%xmm3,48(%rdi)
3338
3339	leaq	480+56(%rsp),%rsi
3340
3341	movq	-48(%rsi),%r15
3342
3343	movq	-40(%rsi),%r14
3344
3345	movq	-32(%rsi),%r13
3346
3347	movq	-24(%rsi),%r12
3348
3349	movq	-16(%rsi),%rbx
3350
3351	movq	-8(%rsi),%rbp
3352
3353	leaq	(%rsi),%rsp
3354
3355L$add_affineq_epilogue:
3356	.byte	0xf3,0xc3
3357
3358
3359
3360.p2align	5
3361__ecp_nistz256_add_tox:
3362
3363	xorq	%r11,%r11
3364	adcq	0(%rbx),%r12
3365	adcq	8(%rbx),%r13
3366	movq	%r12,%rax
3367	adcq	16(%rbx),%r8
3368	adcq	24(%rbx),%r9
3369	movq	%r13,%rbp
3370	adcq	$0,%r11
3371
3372	xorq	%r10,%r10
3373	sbbq	$-1,%r12
3374	movq	%r8,%rcx
3375	sbbq	%r14,%r13
3376	sbbq	$0,%r8
3377	movq	%r9,%r10
3378	sbbq	%r15,%r9
3379	sbbq	$0,%r11
3380
3381	cmovcq	%rax,%r12
3382	cmovcq	%rbp,%r13
3383	movq	%r12,0(%rdi)
3384	cmovcq	%rcx,%r8
3385	movq	%r13,8(%rdi)
3386	cmovcq	%r10,%r9
3387	movq	%r8,16(%rdi)
3388	movq	%r9,24(%rdi)
3389
3390	.byte	0xf3,0xc3
3391
3392
3393
3394
3395.p2align	5
3396__ecp_nistz256_sub_fromx:
3397
3398	xorq	%r11,%r11
3399	sbbq	0(%rbx),%r12
3400	sbbq	8(%rbx),%r13
3401	movq	%r12,%rax
3402	sbbq	16(%rbx),%r8
3403	sbbq	24(%rbx),%r9
3404	movq	%r13,%rbp
3405	sbbq	$0,%r11
3406
3407	xorq	%r10,%r10
3408	adcq	$-1,%r12
3409	movq	%r8,%rcx
3410	adcq	%r14,%r13
3411	adcq	$0,%r8
3412	movq	%r9,%r10
3413	adcq	%r15,%r9
3414
3415	btq	$0,%r11
3416	cmovncq	%rax,%r12
3417	cmovncq	%rbp,%r13
3418	movq	%r12,0(%rdi)
3419	cmovncq	%rcx,%r8
3420	movq	%r13,8(%rdi)
3421	cmovncq	%r10,%r9
3422	movq	%r8,16(%rdi)
3423	movq	%r9,24(%rdi)
3424
3425	.byte	0xf3,0xc3
3426
3427
3428
3429
3430.p2align	5
3431__ecp_nistz256_subx:
3432
3433	xorq	%r11,%r11
3434	sbbq	%r12,%rax
3435	sbbq	%r13,%rbp
3436	movq	%rax,%r12
3437	sbbq	%r8,%rcx
3438	sbbq	%r9,%r10
3439	movq	%rbp,%r13
3440	sbbq	$0,%r11
3441
3442	xorq	%r9,%r9
3443	adcq	$-1,%rax
3444	movq	%rcx,%r8
3445	adcq	%r14,%rbp
3446	adcq	$0,%rcx
3447	movq	%r10,%r9
3448	adcq	%r15,%r10
3449
3450	btq	$0,%r11
3451	cmovcq	%rax,%r12
3452	cmovcq	%rbp,%r13
3453	cmovcq	%rcx,%r8
3454	cmovcq	%r10,%r9
3455
3456	.byte	0xf3,0xc3
3457
3458
3459
3460
3461.p2align	5
3462__ecp_nistz256_mul_by_2x:
3463
3464	xorq	%r11,%r11
3465	adcq	%r12,%r12
3466	adcq	%r13,%r13
3467	movq	%r12,%rax
3468	adcq	%r8,%r8
3469	adcq	%r9,%r9
3470	movq	%r13,%rbp
3471	adcq	$0,%r11
3472
3473	xorq	%r10,%r10
3474	sbbq	$-1,%r12
3475	movq	%r8,%rcx
3476	sbbq	%r14,%r13
3477	sbbq	$0,%r8
3478	movq	%r9,%r10
3479	sbbq	%r15,%r9
3480	sbbq	$0,%r11
3481
3482	cmovcq	%rax,%r12
3483	cmovcq	%rbp,%r13
3484	movq	%r12,0(%rdi)
3485	cmovcq	%rcx,%r8
3486	movq	%r13,8(%rdi)
3487	cmovcq	%r10,%r9
3488	movq	%r8,16(%rdi)
3489	movq	%r9,24(%rdi)
3490
3491	.byte	0xf3,0xc3
3492
3493
3494
3495.p2align	5
3496p256_point_doublex:
3497
3498L$point_doublex:
3499	pushq	%rbp
3500
3501	pushq	%rbx
3502
3503	pushq	%r12
3504
3505	pushq	%r13
3506
3507	pushq	%r14
3508
3509	pushq	%r15
3510
3511	subq	$160+8,%rsp
3512
3513L$point_doublex_body:
3514
3515L$point_double_shortcutx:
3516	movdqu	0(%rsi),%xmm0
3517	movq	%rsi,%rbx
3518	movdqu	16(%rsi),%xmm1
3519	movq	32+0(%rsi),%r12
3520	movq	32+8(%rsi),%r13
3521	movq	32+16(%rsi),%r8
3522	movq	32+24(%rsi),%r9
3523	movq	L$poly+8(%rip),%r14
3524	movq	L$poly+24(%rip),%r15
3525	movdqa	%xmm0,96(%rsp)
3526	movdqa	%xmm1,96+16(%rsp)
3527	leaq	32(%rdi),%r10
3528	leaq	64(%rdi),%r11
3529.byte	102,72,15,110,199
3530.byte	102,73,15,110,202
3531.byte	102,73,15,110,211
3532
3533	leaq	0(%rsp),%rdi
3534	call	__ecp_nistz256_mul_by_2x
3535
3536	movq	64+0(%rsi),%rdx
3537	movq	64+8(%rsi),%r14
3538	movq	64+16(%rsi),%r15
3539	movq	64+24(%rsi),%r8
3540	leaq	64-128(%rsi),%rsi
3541	leaq	64(%rsp),%rdi
3542	call	__ecp_nistz256_sqr_montx
3543
3544	movq	0+0(%rsp),%rdx
3545	movq	8+0(%rsp),%r14
3546	leaq	-128+0(%rsp),%rsi
3547	movq	16+0(%rsp),%r15
3548	movq	24+0(%rsp),%r8
3549	leaq	0(%rsp),%rdi
3550	call	__ecp_nistz256_sqr_montx
3551
3552	movq	32(%rbx),%rdx
3553	movq	64+0(%rbx),%r9
3554	movq	64+8(%rbx),%r10
3555	movq	64+16(%rbx),%r11
3556	movq	64+24(%rbx),%r12
3557	leaq	64-128(%rbx),%rsi
3558	leaq	32(%rbx),%rbx
3559.byte	102,72,15,126,215
3560	call	__ecp_nistz256_mul_montx
3561	call	__ecp_nistz256_mul_by_2x
3562
3563	movq	96+0(%rsp),%r12
3564	movq	96+8(%rsp),%r13
3565	leaq	64(%rsp),%rbx
3566	movq	96+16(%rsp),%r8
3567	movq	96+24(%rsp),%r9
3568	leaq	32(%rsp),%rdi
3569	call	__ecp_nistz256_add_tox
3570
3571	movq	96+0(%rsp),%r12
3572	movq	96+8(%rsp),%r13
3573	leaq	64(%rsp),%rbx
3574	movq	96+16(%rsp),%r8
3575	movq	96+24(%rsp),%r9
3576	leaq	64(%rsp),%rdi
3577	call	__ecp_nistz256_sub_fromx
3578
3579	movq	0+0(%rsp),%rdx
3580	movq	8+0(%rsp),%r14
3581	leaq	-128+0(%rsp),%rsi
3582	movq	16+0(%rsp),%r15
3583	movq	24+0(%rsp),%r8
3584.byte	102,72,15,126,207
3585	call	__ecp_nistz256_sqr_montx
3586	xorq	%r9,%r9
3587	movq	%r12,%rax
3588	addq	$-1,%r12
3589	movq	%r13,%r10
3590	adcq	%rsi,%r13
3591	movq	%r14,%rcx
3592	adcq	$0,%r14
3593	movq	%r15,%r8
3594	adcq	%rbp,%r15
3595	adcq	$0,%r9
3596	xorq	%rsi,%rsi
3597	testq	$1,%rax
3598
3599	cmovzq	%rax,%r12
3600	cmovzq	%r10,%r13
3601	cmovzq	%rcx,%r14
3602	cmovzq	%r8,%r15
3603	cmovzq	%rsi,%r9
3604
3605	movq	%r13,%rax
3606	shrq	$1,%r12
3607	shlq	$63,%rax
3608	movq	%r14,%r10
3609	shrq	$1,%r13
3610	orq	%rax,%r12
3611	shlq	$63,%r10
3612	movq	%r15,%rcx
3613	shrq	$1,%r14
3614	orq	%r10,%r13
3615	shlq	$63,%rcx
3616	movq	%r12,0(%rdi)
3617	shrq	$1,%r15
3618	movq	%r13,8(%rdi)
3619	shlq	$63,%r9
3620	orq	%rcx,%r14
3621	orq	%r9,%r15
3622	movq	%r14,16(%rdi)
3623	movq	%r15,24(%rdi)
3624	movq	64(%rsp),%rdx
3625	leaq	64(%rsp),%rbx
3626	movq	0+32(%rsp),%r9
3627	movq	8+32(%rsp),%r10
3628	leaq	-128+32(%rsp),%rsi
3629	movq	16+32(%rsp),%r11
3630	movq	24+32(%rsp),%r12
3631	leaq	32(%rsp),%rdi
3632	call	__ecp_nistz256_mul_montx
3633
3634	leaq	128(%rsp),%rdi
3635	call	__ecp_nistz256_mul_by_2x
3636
3637	leaq	32(%rsp),%rbx
3638	leaq	32(%rsp),%rdi
3639	call	__ecp_nistz256_add_tox
3640
3641	movq	96(%rsp),%rdx
3642	leaq	96(%rsp),%rbx
3643	movq	0+0(%rsp),%r9
3644	movq	8+0(%rsp),%r10
3645	leaq	-128+0(%rsp),%rsi
3646	movq	16+0(%rsp),%r11
3647	movq	24+0(%rsp),%r12
3648	leaq	0(%rsp),%rdi
3649	call	__ecp_nistz256_mul_montx
3650
3651	leaq	128(%rsp),%rdi
3652	call	__ecp_nistz256_mul_by_2x
3653
3654	movq	0+32(%rsp),%rdx
3655	movq	8+32(%rsp),%r14
3656	leaq	-128+32(%rsp),%rsi
3657	movq	16+32(%rsp),%r15
3658	movq	24+32(%rsp),%r8
3659.byte	102,72,15,126,199
3660	call	__ecp_nistz256_sqr_montx
3661
3662	leaq	128(%rsp),%rbx
3663	movq	%r14,%r8
3664	movq	%r15,%r9
3665	movq	%rsi,%r14
3666	movq	%rbp,%r15
3667	call	__ecp_nistz256_sub_fromx
3668
3669	movq	0+0(%rsp),%rax
3670	movq	0+8(%rsp),%rbp
3671	movq	0+16(%rsp),%rcx
3672	movq	0+24(%rsp),%r10
3673	leaq	0(%rsp),%rdi
3674	call	__ecp_nistz256_subx
3675
3676	movq	32(%rsp),%rdx
3677	leaq	32(%rsp),%rbx
3678	movq	%r12,%r14
3679	xorl	%ecx,%ecx
3680	movq	%r12,0+0(%rsp)
3681	movq	%r13,%r10
3682	movq	%r13,0+8(%rsp)
3683	cmovzq	%r8,%r11
3684	movq	%r8,0+16(%rsp)
3685	leaq	0-128(%rsp),%rsi
3686	cmovzq	%r9,%r12
3687	movq	%r9,0+24(%rsp)
3688	movq	%r14,%r9
3689	leaq	0(%rsp),%rdi
3690	call	__ecp_nistz256_mul_montx
3691
3692.byte	102,72,15,126,203
3693.byte	102,72,15,126,207
3694	call	__ecp_nistz256_sub_fromx
3695
3696	leaq	160+56(%rsp),%rsi
3697
3698	movq	-48(%rsi),%r15
3699
3700	movq	-40(%rsi),%r14
3701
3702	movq	-32(%rsi),%r13
3703
3704	movq	-24(%rsi),%r12
3705
3706	movq	-16(%rsi),%rbx
3707
3708	movq	-8(%rsi),%rbp
3709
3710	leaq	(%rsi),%rsp
3711
3712L$point_doublex_epilogue:
3713	.byte	0xf3,0xc3
3714
3715
3716
3717.p2align	5
3718p256_point_addx:
3719
3720L$point_addx:
3721	pushq	%rbp
3722
3723	pushq	%rbx
3724
3725	pushq	%r12
3726
3727	pushq	%r13
3728
3729	pushq	%r14
3730
3731	pushq	%r15
3732
3733	subq	$576+8,%rsp
3734
3735L$point_addx_body:
3736
3737	movdqu	0(%rsi),%xmm0
3738	movdqu	16(%rsi),%xmm1
3739	movdqu	32(%rsi),%xmm2
3740	movdqu	48(%rsi),%xmm3
3741	movdqu	64(%rsi),%xmm4
3742	movdqu	80(%rsi),%xmm5
3743	movq	%rsi,%rbx
3744	movq	%rdx,%rsi
3745	movdqa	%xmm0,384(%rsp)
3746	movdqa	%xmm1,384+16(%rsp)
3747	movdqa	%xmm2,416(%rsp)
3748	movdqa	%xmm3,416+16(%rsp)
3749	movdqa	%xmm4,448(%rsp)
3750	movdqa	%xmm5,448+16(%rsp)
3751	por	%xmm4,%xmm5
3752
3753	movdqu	0(%rsi),%xmm0
3754	pshufd	$0xb1,%xmm5,%xmm3
3755	movdqu	16(%rsi),%xmm1
3756	movdqu	32(%rsi),%xmm2
3757	por	%xmm3,%xmm5
3758	movdqu	48(%rsi),%xmm3
3759	movq	64+0(%rsi),%rdx
3760	movq	64+8(%rsi),%r14
3761	movq	64+16(%rsi),%r15
3762	movq	64+24(%rsi),%r8
3763	movdqa	%xmm0,480(%rsp)
3764	pshufd	$0x1e,%xmm5,%xmm4
3765	movdqa	%xmm1,480+16(%rsp)
3766	movdqu	64(%rsi),%xmm0
3767	movdqu	80(%rsi),%xmm1
3768	movdqa	%xmm2,512(%rsp)
3769	movdqa	%xmm3,512+16(%rsp)
3770	por	%xmm4,%xmm5
3771	pxor	%xmm4,%xmm4
3772	por	%xmm0,%xmm1
3773.byte	102,72,15,110,199
3774
3775	leaq	64-128(%rsi),%rsi
3776	movq	%rdx,544+0(%rsp)
3777	movq	%r14,544+8(%rsp)
3778	movq	%r15,544+16(%rsp)
3779	movq	%r8,544+24(%rsp)
3780	leaq	96(%rsp),%rdi
3781	call	__ecp_nistz256_sqr_montx
3782
3783	pcmpeqd	%xmm4,%xmm5
3784	pshufd	$0xb1,%xmm1,%xmm4
3785	por	%xmm1,%xmm4
3786	pshufd	$0,%xmm5,%xmm5
3787	pshufd	$0x1e,%xmm4,%xmm3
3788	por	%xmm3,%xmm4
3789	pxor	%xmm3,%xmm3
3790	pcmpeqd	%xmm3,%xmm4
3791	pshufd	$0,%xmm4,%xmm4
3792	movq	64+0(%rbx),%rdx
3793	movq	64+8(%rbx),%r14
3794	movq	64+16(%rbx),%r15
3795	movq	64+24(%rbx),%r8
3796.byte	102,72,15,110,203
3797
3798	leaq	64-128(%rbx),%rsi
3799	leaq	32(%rsp),%rdi
3800	call	__ecp_nistz256_sqr_montx
3801
3802	movq	544(%rsp),%rdx
3803	leaq	544(%rsp),%rbx
3804	movq	0+96(%rsp),%r9
3805	movq	8+96(%rsp),%r10
3806	leaq	-128+96(%rsp),%rsi
3807	movq	16+96(%rsp),%r11
3808	movq	24+96(%rsp),%r12
3809	leaq	224(%rsp),%rdi
3810	call	__ecp_nistz256_mul_montx
3811
3812	movq	448(%rsp),%rdx
3813	leaq	448(%rsp),%rbx
3814	movq	0+32(%rsp),%r9
3815	movq	8+32(%rsp),%r10
3816	leaq	-128+32(%rsp),%rsi
3817	movq	16+32(%rsp),%r11
3818	movq	24+32(%rsp),%r12
3819	leaq	256(%rsp),%rdi
3820	call	__ecp_nistz256_mul_montx
3821
3822	movq	416(%rsp),%rdx
3823	leaq	416(%rsp),%rbx
3824	movq	0+224(%rsp),%r9
3825	movq	8+224(%rsp),%r10
3826	leaq	-128+224(%rsp),%rsi
3827	movq	16+224(%rsp),%r11
3828	movq	24+224(%rsp),%r12
3829	leaq	224(%rsp),%rdi
3830	call	__ecp_nistz256_mul_montx
3831
3832	movq	512(%rsp),%rdx
3833	leaq	512(%rsp),%rbx
3834	movq	0+256(%rsp),%r9
3835	movq	8+256(%rsp),%r10
3836	leaq	-128+256(%rsp),%rsi
3837	movq	16+256(%rsp),%r11
3838	movq	24+256(%rsp),%r12
3839	leaq	256(%rsp),%rdi
3840	call	__ecp_nistz256_mul_montx
3841
3842	leaq	224(%rsp),%rbx
3843	leaq	64(%rsp),%rdi
3844	call	__ecp_nistz256_sub_fromx
3845
3846	orq	%r13,%r12
3847	movdqa	%xmm4,%xmm2
3848	orq	%r8,%r12
3849	orq	%r9,%r12
3850	por	%xmm5,%xmm2
3851.byte	102,73,15,110,220
3852
3853	movq	384(%rsp),%rdx
3854	leaq	384(%rsp),%rbx
3855	movq	0+96(%rsp),%r9
3856	movq	8+96(%rsp),%r10
3857	leaq	-128+96(%rsp),%rsi
3858	movq	16+96(%rsp),%r11
3859	movq	24+96(%rsp),%r12
3860	leaq	160(%rsp),%rdi
3861	call	__ecp_nistz256_mul_montx
3862
3863	movq	480(%rsp),%rdx
3864	leaq	480(%rsp),%rbx
3865	movq	0+32(%rsp),%r9
3866	movq	8+32(%rsp),%r10
3867	leaq	-128+32(%rsp),%rsi
3868	movq	16+32(%rsp),%r11
3869	movq	24+32(%rsp),%r12
3870	leaq	192(%rsp),%rdi
3871	call	__ecp_nistz256_mul_montx
3872
3873	leaq	160(%rsp),%rbx
3874	leaq	0(%rsp),%rdi
3875	call	__ecp_nistz256_sub_fromx
3876
3877	orq	%r13,%r12
3878	orq	%r8,%r12
3879	orq	%r9,%r12
3880
3881.byte	102,73,15,126,208
3882.byte	102,73,15,126,217
3883	orq	%r8,%r12
3884.byte	0x3e
3885	jnz	L$add_proceedx
3886
3887
3888
3889	testq	%r9,%r9
3890	jz	L$add_doublex
3891
3892
3893
3894
3895
3896
3897.byte	102,72,15,126,199
3898	pxor	%xmm0,%xmm0
3899	movdqu	%xmm0,0(%rdi)
3900	movdqu	%xmm0,16(%rdi)
3901	movdqu	%xmm0,32(%rdi)
3902	movdqu	%xmm0,48(%rdi)
3903	movdqu	%xmm0,64(%rdi)
3904	movdqu	%xmm0,80(%rdi)
3905	jmp	L$add_donex
3906
3907.p2align	5
3908L$add_doublex:
3909.byte	102,72,15,126,206
3910.byte	102,72,15,126,199
3911	addq	$416,%rsp
3912
3913	jmp	L$point_double_shortcutx
3914
3915
3916.p2align	5
3917L$add_proceedx:
3918	movq	0+64(%rsp),%rdx
3919	movq	8+64(%rsp),%r14
3920	leaq	-128+64(%rsp),%rsi
3921	movq	16+64(%rsp),%r15
3922	movq	24+64(%rsp),%r8
3923	leaq	96(%rsp),%rdi
3924	call	__ecp_nistz256_sqr_montx
3925
3926	movq	448(%rsp),%rdx
3927	leaq	448(%rsp),%rbx
3928	movq	0+0(%rsp),%r9
3929	movq	8+0(%rsp),%r10
3930	leaq	-128+0(%rsp),%rsi
3931	movq	16+0(%rsp),%r11
3932	movq	24+0(%rsp),%r12
3933	leaq	352(%rsp),%rdi
3934	call	__ecp_nistz256_mul_montx
3935
3936	movq	0+0(%rsp),%rdx
3937	movq	8+0(%rsp),%r14
3938	leaq	-128+0(%rsp),%rsi
3939	movq	16+0(%rsp),%r15
3940	movq	24+0(%rsp),%r8
3941	leaq	32(%rsp),%rdi
3942	call	__ecp_nistz256_sqr_montx
3943
3944	movq	544(%rsp),%rdx
3945	leaq	544(%rsp),%rbx
3946	movq	0+352(%rsp),%r9
3947	movq	8+352(%rsp),%r10
3948	leaq	-128+352(%rsp),%rsi
3949	movq	16+352(%rsp),%r11
3950	movq	24+352(%rsp),%r12
3951	leaq	352(%rsp),%rdi
3952	call	__ecp_nistz256_mul_montx
3953
3954	movq	0(%rsp),%rdx
3955	leaq	0(%rsp),%rbx
3956	movq	0+32(%rsp),%r9
3957	movq	8+32(%rsp),%r10
3958	leaq	-128+32(%rsp),%rsi
3959	movq	16+32(%rsp),%r11
3960	movq	24+32(%rsp),%r12
3961	leaq	128(%rsp),%rdi
3962	call	__ecp_nistz256_mul_montx
3963
3964	movq	160(%rsp),%rdx
3965	leaq	160(%rsp),%rbx
3966	movq	0+32(%rsp),%r9
3967	movq	8+32(%rsp),%r10
3968	leaq	-128+32(%rsp),%rsi
3969	movq	16+32(%rsp),%r11
3970	movq	24+32(%rsp),%r12
3971	leaq	192(%rsp),%rdi
3972	call	__ecp_nistz256_mul_montx
3973
3974
3975
3976
3977	xorq	%r11,%r11
3978	addq	%r12,%r12
3979	leaq	96(%rsp),%rsi
3980	adcq	%r13,%r13
3981	movq	%r12,%rax
3982	adcq	%r8,%r8
3983	adcq	%r9,%r9
3984	movq	%r13,%rbp
3985	adcq	$0,%r11
3986
3987	subq	$-1,%r12
3988	movq	%r8,%rcx
3989	sbbq	%r14,%r13
3990	sbbq	$0,%r8
3991	movq	%r9,%r10
3992	sbbq	%r15,%r9
3993	sbbq	$0,%r11
3994
3995	cmovcq	%rax,%r12
3996	movq	0(%rsi),%rax
3997	cmovcq	%rbp,%r13
3998	movq	8(%rsi),%rbp
3999	cmovcq	%rcx,%r8
4000	movq	16(%rsi),%rcx
4001	cmovcq	%r10,%r9
4002	movq	24(%rsi),%r10
4003
4004	call	__ecp_nistz256_subx
4005
4006	leaq	128(%rsp),%rbx
4007	leaq	288(%rsp),%rdi
4008	call	__ecp_nistz256_sub_fromx
4009
4010	movq	192+0(%rsp),%rax
4011	movq	192+8(%rsp),%rbp
4012	movq	192+16(%rsp),%rcx
4013	movq	192+24(%rsp),%r10
4014	leaq	320(%rsp),%rdi
4015
4016	call	__ecp_nistz256_subx
4017
4018	movq	%r12,0(%rdi)
4019	movq	%r13,8(%rdi)
4020	movq	%r8,16(%rdi)
4021	movq	%r9,24(%rdi)
4022	movq	128(%rsp),%rdx
4023	leaq	128(%rsp),%rbx
4024	movq	0+224(%rsp),%r9
4025	movq	8+224(%rsp),%r10
4026	leaq	-128+224(%rsp),%rsi
4027	movq	16+224(%rsp),%r11
4028	movq	24+224(%rsp),%r12
4029	leaq	256(%rsp),%rdi
4030	call	__ecp_nistz256_mul_montx
4031
4032	movq	320(%rsp),%rdx
4033	leaq	320(%rsp),%rbx
4034	movq	0+64(%rsp),%r9
4035	movq	8+64(%rsp),%r10
4036	leaq	-128+64(%rsp),%rsi
4037	movq	16+64(%rsp),%r11
4038	movq	24+64(%rsp),%r12
4039	leaq	320(%rsp),%rdi
4040	call	__ecp_nistz256_mul_montx
4041
4042	leaq	256(%rsp),%rbx
4043	leaq	320(%rsp),%rdi
4044	call	__ecp_nistz256_sub_fromx
4045
4046.byte	102,72,15,126,199
4047
4048	movdqa	%xmm5,%xmm0
4049	movdqa	%xmm5,%xmm1
4050	pandn	352(%rsp),%xmm0
4051	movdqa	%xmm5,%xmm2
4052	pandn	352+16(%rsp),%xmm1
4053	movdqa	%xmm5,%xmm3
4054	pand	544(%rsp),%xmm2
4055	pand	544+16(%rsp),%xmm3
4056	por	%xmm0,%xmm2
4057	por	%xmm1,%xmm3
4058
4059	movdqa	%xmm4,%xmm0
4060	movdqa	%xmm4,%xmm1
4061	pandn	%xmm2,%xmm0
4062	movdqa	%xmm4,%xmm2
4063	pandn	%xmm3,%xmm1
4064	movdqa	%xmm4,%xmm3
4065	pand	448(%rsp),%xmm2
4066	pand	448+16(%rsp),%xmm3
4067	por	%xmm0,%xmm2
4068	por	%xmm1,%xmm3
4069	movdqu	%xmm2,64(%rdi)
4070	movdqu	%xmm3,80(%rdi)
4071
4072	movdqa	%xmm5,%xmm0
4073	movdqa	%xmm5,%xmm1
4074	pandn	288(%rsp),%xmm0
4075	movdqa	%xmm5,%xmm2
4076	pandn	288+16(%rsp),%xmm1
4077	movdqa	%xmm5,%xmm3
4078	pand	480(%rsp),%xmm2
4079	pand	480+16(%rsp),%xmm3
4080	por	%xmm0,%xmm2
4081	por	%xmm1,%xmm3
4082
4083	movdqa	%xmm4,%xmm0
4084	movdqa	%xmm4,%xmm1
4085	pandn	%xmm2,%xmm0
4086	movdqa	%xmm4,%xmm2
4087	pandn	%xmm3,%xmm1
4088	movdqa	%xmm4,%xmm3
4089	pand	384(%rsp),%xmm2
4090	pand	384+16(%rsp),%xmm3
4091	por	%xmm0,%xmm2
4092	por	%xmm1,%xmm3
4093	movdqu	%xmm2,0(%rdi)
4094	movdqu	%xmm3,16(%rdi)
4095
4096	movdqa	%xmm5,%xmm0
4097	movdqa	%xmm5,%xmm1
4098	pandn	320(%rsp),%xmm0
4099	movdqa	%xmm5,%xmm2
4100	pandn	320+16(%rsp),%xmm1
4101	movdqa	%xmm5,%xmm3
4102	pand	512(%rsp),%xmm2
4103	pand	512+16(%rsp),%xmm3
4104	por	%xmm0,%xmm2
4105	por	%xmm1,%xmm3
4106
4107	movdqa	%xmm4,%xmm0
4108	movdqa	%xmm4,%xmm1
4109	pandn	%xmm2,%xmm0
4110	movdqa	%xmm4,%xmm2
4111	pandn	%xmm3,%xmm1
4112	movdqa	%xmm4,%xmm3
4113	pand	416(%rsp),%xmm2
4114	pand	416+16(%rsp),%xmm3
4115	por	%xmm0,%xmm2
4116	por	%xmm1,%xmm3
4117	movdqu	%xmm2,32(%rdi)
4118	movdqu	%xmm3,48(%rdi)
4119
4120L$add_donex:
4121	leaq	576+56(%rsp),%rsi
4122
4123	movq	-48(%rsi),%r15
4124
4125	movq	-40(%rsi),%r14
4126
4127	movq	-32(%rsi),%r13
4128
4129	movq	-24(%rsi),%r12
4130
4131	movq	-16(%rsi),%rbx
4132
4133	movq	-8(%rsi),%rbp
4134
4135	leaq	(%rsi),%rsp
4136
4137L$point_addx_epilogue:
4138	.byte	0xf3,0xc3
4139
4140
4141
4142.p2align	5
4143p256_point_add_affinex:
4144
4145L$point_add_affinex:
4146	pushq	%rbp
4147
4148	pushq	%rbx
4149
4150	pushq	%r12
4151
4152	pushq	%r13
4153
4154	pushq	%r14
4155
4156	pushq	%r15
4157
4158	subq	$480+8,%rsp
4159
4160L$add_affinex_body:
4161
4162	movdqu	0(%rsi),%xmm0
4163	movq	%rdx,%rbx
4164	movdqu	16(%rsi),%xmm1
4165	movdqu	32(%rsi),%xmm2
4166	movdqu	48(%rsi),%xmm3
4167	movdqu	64(%rsi),%xmm4
4168	movdqu	80(%rsi),%xmm5
4169	movq	64+0(%rsi),%rdx
4170	movq	64+8(%rsi),%r14
4171	movq	64+16(%rsi),%r15
4172	movq	64+24(%rsi),%r8
4173	movdqa	%xmm0,320(%rsp)
4174	movdqa	%xmm1,320+16(%rsp)
4175	movdqa	%xmm2,352(%rsp)
4176	movdqa	%xmm3,352+16(%rsp)
4177	movdqa	%xmm4,384(%rsp)
4178	movdqa	%xmm5,384+16(%rsp)
4179	por	%xmm4,%xmm5
4180
4181	movdqu	0(%rbx),%xmm0
4182	pshufd	$0xb1,%xmm5,%xmm3
4183	movdqu	16(%rbx),%xmm1
4184	movdqu	32(%rbx),%xmm2
4185	por	%xmm3,%xmm5
4186	movdqu	48(%rbx),%xmm3
4187	movdqa	%xmm0,416(%rsp)
4188	pshufd	$0x1e,%xmm5,%xmm4
4189	movdqa	%xmm1,416+16(%rsp)
4190	por	%xmm0,%xmm1
4191.byte	102,72,15,110,199
4192	movdqa	%xmm2,448(%rsp)
4193	movdqa	%xmm3,448+16(%rsp)
4194	por	%xmm2,%xmm3
4195	por	%xmm4,%xmm5
4196	pxor	%xmm4,%xmm4
4197	por	%xmm1,%xmm3
4198
4199	leaq	64-128(%rsi),%rsi
4200	leaq	32(%rsp),%rdi
4201	call	__ecp_nistz256_sqr_montx
4202
4203	pcmpeqd	%xmm4,%xmm5
4204	pshufd	$0xb1,%xmm3,%xmm4
4205	movq	0(%rbx),%rdx
4206
4207	movq	%r12,%r9
4208	por	%xmm3,%xmm4
4209	pshufd	$0,%xmm5,%xmm5
4210	pshufd	$0x1e,%xmm4,%xmm3
4211	movq	%r13,%r10
4212	por	%xmm3,%xmm4
4213	pxor	%xmm3,%xmm3
4214	movq	%r14,%r11
4215	pcmpeqd	%xmm3,%xmm4
4216	pshufd	$0,%xmm4,%xmm4
4217
4218	leaq	32-128(%rsp),%rsi
4219	movq	%r15,%r12
4220	leaq	0(%rsp),%rdi
4221	call	__ecp_nistz256_mul_montx
4222
4223	leaq	320(%rsp),%rbx
4224	leaq	64(%rsp),%rdi
4225	call	__ecp_nistz256_sub_fromx
4226
4227	movq	384(%rsp),%rdx
4228	leaq	384(%rsp),%rbx
4229	movq	0+32(%rsp),%r9
4230	movq	8+32(%rsp),%r10
4231	leaq	-128+32(%rsp),%rsi
4232	movq	16+32(%rsp),%r11
4233	movq	24+32(%rsp),%r12
4234	leaq	32(%rsp),%rdi
4235	call	__ecp_nistz256_mul_montx
4236
4237	movq	384(%rsp),%rdx
4238	leaq	384(%rsp),%rbx
4239	movq	0+64(%rsp),%r9
4240	movq	8+64(%rsp),%r10
4241	leaq	-128+64(%rsp),%rsi
4242	movq	16+64(%rsp),%r11
4243	movq	24+64(%rsp),%r12
4244	leaq	288(%rsp),%rdi
4245	call	__ecp_nistz256_mul_montx
4246
4247	movq	448(%rsp),%rdx
4248	leaq	448(%rsp),%rbx
4249	movq	0+32(%rsp),%r9
4250	movq	8+32(%rsp),%r10
4251	leaq	-128+32(%rsp),%rsi
4252	movq	16+32(%rsp),%r11
4253	movq	24+32(%rsp),%r12
4254	leaq	32(%rsp),%rdi
4255	call	__ecp_nistz256_mul_montx
4256
4257	leaq	352(%rsp),%rbx
4258	leaq	96(%rsp),%rdi
4259	call	__ecp_nistz256_sub_fromx
4260
4261	movq	0+64(%rsp),%rdx
4262	movq	8+64(%rsp),%r14
4263	leaq	-128+64(%rsp),%rsi
4264	movq	16+64(%rsp),%r15
4265	movq	24+64(%rsp),%r8
4266	leaq	128(%rsp),%rdi
4267	call	__ecp_nistz256_sqr_montx
4268
4269	movq	0+96(%rsp),%rdx
4270	movq	8+96(%rsp),%r14
4271	leaq	-128+96(%rsp),%rsi
4272	movq	16+96(%rsp),%r15
4273	movq	24+96(%rsp),%r8
4274	leaq	192(%rsp),%rdi
4275	call	__ecp_nistz256_sqr_montx
4276
4277	movq	128(%rsp),%rdx
4278	leaq	128(%rsp),%rbx
4279	movq	0+64(%rsp),%r9
4280	movq	8+64(%rsp),%r10
4281	leaq	-128+64(%rsp),%rsi
4282	movq	16+64(%rsp),%r11
4283	movq	24+64(%rsp),%r12
4284	leaq	160(%rsp),%rdi
4285	call	__ecp_nistz256_mul_montx
4286
4287	movq	320(%rsp),%rdx
4288	leaq	320(%rsp),%rbx
4289	movq	0+128(%rsp),%r9
4290	movq	8+128(%rsp),%r10
4291	leaq	-128+128(%rsp),%rsi
4292	movq	16+128(%rsp),%r11
4293	movq	24+128(%rsp),%r12
4294	leaq	0(%rsp),%rdi
4295	call	__ecp_nistz256_mul_montx
4296
4297
4298
4299
4300	xorq	%r11,%r11
4301	addq	%r12,%r12
4302	leaq	192(%rsp),%rsi
4303	adcq	%r13,%r13
4304	movq	%r12,%rax
4305	adcq	%r8,%r8
4306	adcq	%r9,%r9
4307	movq	%r13,%rbp
4308	adcq	$0,%r11
4309
4310	subq	$-1,%r12
4311	movq	%r8,%rcx
4312	sbbq	%r14,%r13
4313	sbbq	$0,%r8
4314	movq	%r9,%r10
4315	sbbq	%r15,%r9
4316	sbbq	$0,%r11
4317
4318	cmovcq	%rax,%r12
4319	movq	0(%rsi),%rax
4320	cmovcq	%rbp,%r13
4321	movq	8(%rsi),%rbp
4322	cmovcq	%rcx,%r8
4323	movq	16(%rsi),%rcx
4324	cmovcq	%r10,%r9
4325	movq	24(%rsi),%r10
4326
4327	call	__ecp_nistz256_subx
4328
4329	leaq	160(%rsp),%rbx
4330	leaq	224(%rsp),%rdi
4331	call	__ecp_nistz256_sub_fromx
4332
4333	movq	0+0(%rsp),%rax
4334	movq	0+8(%rsp),%rbp
4335	movq	0+16(%rsp),%rcx
4336	movq	0+24(%rsp),%r10
4337	leaq	64(%rsp),%rdi
4338
4339	call	__ecp_nistz256_subx
4340
4341	movq	%r12,0(%rdi)
4342	movq	%r13,8(%rdi)
4343	movq	%r8,16(%rdi)
4344	movq	%r9,24(%rdi)
4345	movq	352(%rsp),%rdx
4346	leaq	352(%rsp),%rbx
4347	movq	0+160(%rsp),%r9
4348	movq	8+160(%rsp),%r10
4349	leaq	-128+160(%rsp),%rsi
4350	movq	16+160(%rsp),%r11
4351	movq	24+160(%rsp),%r12
4352	leaq	32(%rsp),%rdi
4353	call	__ecp_nistz256_mul_montx
4354
4355	movq	96(%rsp),%rdx
4356	leaq	96(%rsp),%rbx
4357	movq	0+64(%rsp),%r9
4358	movq	8+64(%rsp),%r10
4359	leaq	-128+64(%rsp),%rsi
4360	movq	16+64(%rsp),%r11
4361	movq	24+64(%rsp),%r12
4362	leaq	64(%rsp),%rdi
4363	call	__ecp_nistz256_mul_montx
4364
4365	leaq	32(%rsp),%rbx
4366	leaq	256(%rsp),%rdi
4367	call	__ecp_nistz256_sub_fromx
4368
4369.byte	102,72,15,126,199
4370
4371	movdqa	%xmm5,%xmm0
4372	movdqa	%xmm5,%xmm1
4373	pandn	288(%rsp),%xmm0
4374	movdqa	%xmm5,%xmm2
4375	pandn	288+16(%rsp),%xmm1
4376	movdqa	%xmm5,%xmm3
4377	pand	L$ONE_mont(%rip),%xmm2
4378	pand	L$ONE_mont+16(%rip),%xmm3
4379	por	%xmm0,%xmm2
4380	por	%xmm1,%xmm3
4381
4382	movdqa	%xmm4,%xmm0
4383	movdqa	%xmm4,%xmm1
4384	pandn	%xmm2,%xmm0
4385	movdqa	%xmm4,%xmm2
4386	pandn	%xmm3,%xmm1
4387	movdqa	%xmm4,%xmm3
4388	pand	384(%rsp),%xmm2
4389	pand	384+16(%rsp),%xmm3
4390	por	%xmm0,%xmm2
4391	por	%xmm1,%xmm3
4392	movdqu	%xmm2,64(%rdi)
4393	movdqu	%xmm3,80(%rdi)
4394
4395	movdqa	%xmm5,%xmm0
4396	movdqa	%xmm5,%xmm1
4397	pandn	224(%rsp),%xmm0
4398	movdqa	%xmm5,%xmm2
4399	pandn	224+16(%rsp),%xmm1
4400	movdqa	%xmm5,%xmm3
4401	pand	416(%rsp),%xmm2
4402	pand	416+16(%rsp),%xmm3
4403	por	%xmm0,%xmm2
4404	por	%xmm1,%xmm3
4405
4406	movdqa	%xmm4,%xmm0
4407	movdqa	%xmm4,%xmm1
4408	pandn	%xmm2,%xmm0
4409	movdqa	%xmm4,%xmm2
4410	pandn	%xmm3,%xmm1
4411	movdqa	%xmm4,%xmm3
4412	pand	320(%rsp),%xmm2
4413	pand	320+16(%rsp),%xmm3
4414	por	%xmm0,%xmm2
4415	por	%xmm1,%xmm3
4416	movdqu	%xmm2,0(%rdi)
4417	movdqu	%xmm3,16(%rdi)
4418
4419	movdqa	%xmm5,%xmm0
4420	movdqa	%xmm5,%xmm1
4421	pandn	256(%rsp),%xmm0
4422	movdqa	%xmm5,%xmm2
4423	pandn	256+16(%rsp),%xmm1
4424	movdqa	%xmm5,%xmm3
4425	pand	448(%rsp),%xmm2
4426	pand	448+16(%rsp),%xmm3
4427	por	%xmm0,%xmm2
4428	por	%xmm1,%xmm3
4429
4430	movdqa	%xmm4,%xmm0
4431	movdqa	%xmm4,%xmm1
4432	pandn	%xmm2,%xmm0
4433	movdqa	%xmm4,%xmm2
4434	pandn	%xmm3,%xmm1
4435	movdqa	%xmm4,%xmm3
4436	pand	352(%rsp),%xmm2
4437	pand	352+16(%rsp),%xmm3
4438	por	%xmm0,%xmm2
4439	por	%xmm1,%xmm3
4440	movdqu	%xmm2,32(%rdi)
4441	movdqu	%xmm3,48(%rdi)
4442
4443	leaq	480+56(%rsp),%rsi
4444
4445	movq	-48(%rsi),%r15
4446
4447	movq	-40(%rsi),%r14
4448
4449	movq	-32(%rsi),%r13
4450
4451	movq	-24(%rsi),%r12
4452
4453	movq	-16(%rsi),%rbx
4454
4455	movq	-8(%rsi),%rbp
4456
4457	leaq	(%rsi),%rsp
4458
4459L$add_affinex_epilogue:
4460	.byte	0xf3,0xc3
4461
4462
4463#endif
4464