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