• 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#if defined(BORINGSSL_PREFIX)
12#include <boringssl_prefix_symbols_asm.h>
13#endif
14.text
15
16.globl	_rsaz_1024_sqr_avx2
17.private_extern _rsaz_1024_sqr_avx2
18
19.p2align	6
20_rsaz_1024_sqr_avx2:
21
22	leaq	(%rsp),%rax
23
24	pushq	%rbx
25
26	pushq	%rbp
27
28	pushq	%r12
29
30	pushq	%r13
31
32	pushq	%r14
33
34	pushq	%r15
35
36	vzeroupper
37	movq	%rax,%rbp
38
39	movq	%rdx,%r13
40	subq	$832,%rsp
41	movq	%r13,%r15
42	subq	$-128,%rdi
43	subq	$-128,%rsi
44	subq	$-128,%r13
45
46	andq	$4095,%r15
47	addq	$320,%r15
48	shrq	$12,%r15
49	vpxor	%ymm9,%ymm9,%ymm9
50	jz	L$sqr_1024_no_n_copy
51
52
53
54
55
56	subq	$320,%rsp
57	vmovdqu	0-128(%r13),%ymm0
58	andq	$-2048,%rsp
59	vmovdqu	32-128(%r13),%ymm1
60	vmovdqu	64-128(%r13),%ymm2
61	vmovdqu	96-128(%r13),%ymm3
62	vmovdqu	128-128(%r13),%ymm4
63	vmovdqu	160-128(%r13),%ymm5
64	vmovdqu	192-128(%r13),%ymm6
65	vmovdqu	224-128(%r13),%ymm7
66	vmovdqu	256-128(%r13),%ymm8
67	leaq	832+128(%rsp),%r13
68	vmovdqu	%ymm0,0-128(%r13)
69	vmovdqu	%ymm1,32-128(%r13)
70	vmovdqu	%ymm2,64-128(%r13)
71	vmovdqu	%ymm3,96-128(%r13)
72	vmovdqu	%ymm4,128-128(%r13)
73	vmovdqu	%ymm5,160-128(%r13)
74	vmovdqu	%ymm6,192-128(%r13)
75	vmovdqu	%ymm7,224-128(%r13)
76	vmovdqu	%ymm8,256-128(%r13)
77	vmovdqu	%ymm9,288-128(%r13)
78
79L$sqr_1024_no_n_copy:
80	andq	$-1024,%rsp
81
82	vmovdqu	32-128(%rsi),%ymm1
83	vmovdqu	64-128(%rsi),%ymm2
84	vmovdqu	96-128(%rsi),%ymm3
85	vmovdqu	128-128(%rsi),%ymm4
86	vmovdqu	160-128(%rsi),%ymm5
87	vmovdqu	192-128(%rsi),%ymm6
88	vmovdqu	224-128(%rsi),%ymm7
89	vmovdqu	256-128(%rsi),%ymm8
90
91	leaq	192(%rsp),%rbx
92	vmovdqu	L$and_mask(%rip),%ymm15
93	jmp	L$OOP_GRANDE_SQR_1024
94
95.p2align	5
96L$OOP_GRANDE_SQR_1024:
97	leaq	576+128(%rsp),%r9
98	leaq	448(%rsp),%r12
99
100
101
102
103	vpaddq	%ymm1,%ymm1,%ymm1
104	vpbroadcastq	0-128(%rsi),%ymm10
105	vpaddq	%ymm2,%ymm2,%ymm2
106	vmovdqa	%ymm1,0-128(%r9)
107	vpaddq	%ymm3,%ymm3,%ymm3
108	vmovdqa	%ymm2,32-128(%r9)
109	vpaddq	%ymm4,%ymm4,%ymm4
110	vmovdqa	%ymm3,64-128(%r9)
111	vpaddq	%ymm5,%ymm5,%ymm5
112	vmovdqa	%ymm4,96-128(%r9)
113	vpaddq	%ymm6,%ymm6,%ymm6
114	vmovdqa	%ymm5,128-128(%r9)
115	vpaddq	%ymm7,%ymm7,%ymm7
116	vmovdqa	%ymm6,160-128(%r9)
117	vpaddq	%ymm8,%ymm8,%ymm8
118	vmovdqa	%ymm7,192-128(%r9)
119	vpxor	%ymm9,%ymm9,%ymm9
120	vmovdqa	%ymm8,224-128(%r9)
121
122	vpmuludq	0-128(%rsi),%ymm10,%ymm0
123	vpbroadcastq	32-128(%rsi),%ymm11
124	vmovdqu	%ymm9,288-192(%rbx)
125	vpmuludq	%ymm10,%ymm1,%ymm1
126	vmovdqu	%ymm9,320-448(%r12)
127	vpmuludq	%ymm10,%ymm2,%ymm2
128	vmovdqu	%ymm9,352-448(%r12)
129	vpmuludq	%ymm10,%ymm3,%ymm3
130	vmovdqu	%ymm9,384-448(%r12)
131	vpmuludq	%ymm10,%ymm4,%ymm4
132	vmovdqu	%ymm9,416-448(%r12)
133	vpmuludq	%ymm10,%ymm5,%ymm5
134	vmovdqu	%ymm9,448-448(%r12)
135	vpmuludq	%ymm10,%ymm6,%ymm6
136	vmovdqu	%ymm9,480-448(%r12)
137	vpmuludq	%ymm10,%ymm7,%ymm7
138	vmovdqu	%ymm9,512-448(%r12)
139	vpmuludq	%ymm10,%ymm8,%ymm8
140	vpbroadcastq	64-128(%rsi),%ymm10
141	vmovdqu	%ymm9,544-448(%r12)
142
143	movq	%rsi,%r15
144	movl	$4,%r14d
145	jmp	L$sqr_entry_1024
146.p2align	5
147L$OOP_SQR_1024:
148	vpbroadcastq	32-128(%r15),%ymm11
149	vpmuludq	0-128(%rsi),%ymm10,%ymm0
150	vpaddq	0-192(%rbx),%ymm0,%ymm0
151	vpmuludq	0-128(%r9),%ymm10,%ymm1
152	vpaddq	32-192(%rbx),%ymm1,%ymm1
153	vpmuludq	32-128(%r9),%ymm10,%ymm2
154	vpaddq	64-192(%rbx),%ymm2,%ymm2
155	vpmuludq	64-128(%r9),%ymm10,%ymm3
156	vpaddq	96-192(%rbx),%ymm3,%ymm3
157	vpmuludq	96-128(%r9),%ymm10,%ymm4
158	vpaddq	128-192(%rbx),%ymm4,%ymm4
159	vpmuludq	128-128(%r9),%ymm10,%ymm5
160	vpaddq	160-192(%rbx),%ymm5,%ymm5
161	vpmuludq	160-128(%r9),%ymm10,%ymm6
162	vpaddq	192-192(%rbx),%ymm6,%ymm6
163	vpmuludq	192-128(%r9),%ymm10,%ymm7
164	vpaddq	224-192(%rbx),%ymm7,%ymm7
165	vpmuludq	224-128(%r9),%ymm10,%ymm8
166	vpbroadcastq	64-128(%r15),%ymm10
167	vpaddq	256-192(%rbx),%ymm8,%ymm8
168L$sqr_entry_1024:
169	vmovdqu	%ymm0,0-192(%rbx)
170	vmovdqu	%ymm1,32-192(%rbx)
171
172	vpmuludq	32-128(%rsi),%ymm11,%ymm12
173	vpaddq	%ymm12,%ymm2,%ymm2
174	vpmuludq	32-128(%r9),%ymm11,%ymm14
175	vpaddq	%ymm14,%ymm3,%ymm3
176	vpmuludq	64-128(%r9),%ymm11,%ymm13
177	vpaddq	%ymm13,%ymm4,%ymm4
178	vpmuludq	96-128(%r9),%ymm11,%ymm12
179	vpaddq	%ymm12,%ymm5,%ymm5
180	vpmuludq	128-128(%r9),%ymm11,%ymm14
181	vpaddq	%ymm14,%ymm6,%ymm6
182	vpmuludq	160-128(%r9),%ymm11,%ymm13
183	vpaddq	%ymm13,%ymm7,%ymm7
184	vpmuludq	192-128(%r9),%ymm11,%ymm12
185	vpaddq	%ymm12,%ymm8,%ymm8
186	vpmuludq	224-128(%r9),%ymm11,%ymm0
187	vpbroadcastq	96-128(%r15),%ymm11
188	vpaddq	288-192(%rbx),%ymm0,%ymm0
189
190	vmovdqu	%ymm2,64-192(%rbx)
191	vmovdqu	%ymm3,96-192(%rbx)
192
193	vpmuludq	64-128(%rsi),%ymm10,%ymm13
194	vpaddq	%ymm13,%ymm4,%ymm4
195	vpmuludq	64-128(%r9),%ymm10,%ymm12
196	vpaddq	%ymm12,%ymm5,%ymm5
197	vpmuludq	96-128(%r9),%ymm10,%ymm14
198	vpaddq	%ymm14,%ymm6,%ymm6
199	vpmuludq	128-128(%r9),%ymm10,%ymm13
200	vpaddq	%ymm13,%ymm7,%ymm7
201	vpmuludq	160-128(%r9),%ymm10,%ymm12
202	vpaddq	%ymm12,%ymm8,%ymm8
203	vpmuludq	192-128(%r9),%ymm10,%ymm14
204	vpaddq	%ymm14,%ymm0,%ymm0
205	vpmuludq	224-128(%r9),%ymm10,%ymm1
206	vpbroadcastq	128-128(%r15),%ymm10
207	vpaddq	320-448(%r12),%ymm1,%ymm1
208
209	vmovdqu	%ymm4,128-192(%rbx)
210	vmovdqu	%ymm5,160-192(%rbx)
211
212	vpmuludq	96-128(%rsi),%ymm11,%ymm12
213	vpaddq	%ymm12,%ymm6,%ymm6
214	vpmuludq	96-128(%r9),%ymm11,%ymm14
215	vpaddq	%ymm14,%ymm7,%ymm7
216	vpmuludq	128-128(%r9),%ymm11,%ymm13
217	vpaddq	%ymm13,%ymm8,%ymm8
218	vpmuludq	160-128(%r9),%ymm11,%ymm12
219	vpaddq	%ymm12,%ymm0,%ymm0
220	vpmuludq	192-128(%r9),%ymm11,%ymm14
221	vpaddq	%ymm14,%ymm1,%ymm1
222	vpmuludq	224-128(%r9),%ymm11,%ymm2
223	vpbroadcastq	160-128(%r15),%ymm11
224	vpaddq	352-448(%r12),%ymm2,%ymm2
225
226	vmovdqu	%ymm6,192-192(%rbx)
227	vmovdqu	%ymm7,224-192(%rbx)
228
229	vpmuludq	128-128(%rsi),%ymm10,%ymm12
230	vpaddq	%ymm12,%ymm8,%ymm8
231	vpmuludq	128-128(%r9),%ymm10,%ymm14
232	vpaddq	%ymm14,%ymm0,%ymm0
233	vpmuludq	160-128(%r9),%ymm10,%ymm13
234	vpaddq	%ymm13,%ymm1,%ymm1
235	vpmuludq	192-128(%r9),%ymm10,%ymm12
236	vpaddq	%ymm12,%ymm2,%ymm2
237	vpmuludq	224-128(%r9),%ymm10,%ymm3
238	vpbroadcastq	192-128(%r15),%ymm10
239	vpaddq	384-448(%r12),%ymm3,%ymm3
240
241	vmovdqu	%ymm8,256-192(%rbx)
242	vmovdqu	%ymm0,288-192(%rbx)
243	leaq	8(%rbx),%rbx
244
245	vpmuludq	160-128(%rsi),%ymm11,%ymm13
246	vpaddq	%ymm13,%ymm1,%ymm1
247	vpmuludq	160-128(%r9),%ymm11,%ymm12
248	vpaddq	%ymm12,%ymm2,%ymm2
249	vpmuludq	192-128(%r9),%ymm11,%ymm14
250	vpaddq	%ymm14,%ymm3,%ymm3
251	vpmuludq	224-128(%r9),%ymm11,%ymm4
252	vpbroadcastq	224-128(%r15),%ymm11
253	vpaddq	416-448(%r12),%ymm4,%ymm4
254
255	vmovdqu	%ymm1,320-448(%r12)
256	vmovdqu	%ymm2,352-448(%r12)
257
258	vpmuludq	192-128(%rsi),%ymm10,%ymm12
259	vpaddq	%ymm12,%ymm3,%ymm3
260	vpmuludq	192-128(%r9),%ymm10,%ymm14
261	vpbroadcastq	256-128(%r15),%ymm0
262	vpaddq	%ymm14,%ymm4,%ymm4
263	vpmuludq	224-128(%r9),%ymm10,%ymm5
264	vpbroadcastq	0+8-128(%r15),%ymm10
265	vpaddq	448-448(%r12),%ymm5,%ymm5
266
267	vmovdqu	%ymm3,384-448(%r12)
268	vmovdqu	%ymm4,416-448(%r12)
269	leaq	8(%r15),%r15
270
271	vpmuludq	224-128(%rsi),%ymm11,%ymm12
272	vpaddq	%ymm12,%ymm5,%ymm5
273	vpmuludq	224-128(%r9),%ymm11,%ymm6
274	vpaddq	480-448(%r12),%ymm6,%ymm6
275
276	vpmuludq	256-128(%rsi),%ymm0,%ymm7
277	vmovdqu	%ymm5,448-448(%r12)
278	vpaddq	512-448(%r12),%ymm7,%ymm7
279	vmovdqu	%ymm6,480-448(%r12)
280	vmovdqu	%ymm7,512-448(%r12)
281	leaq	8(%r12),%r12
282
283	decl	%r14d
284	jnz	L$OOP_SQR_1024
285
286	vmovdqu	256(%rsp),%ymm8
287	vmovdqu	288(%rsp),%ymm1
288	vmovdqu	320(%rsp),%ymm2
289	leaq	192(%rsp),%rbx
290
291	vpsrlq	$29,%ymm8,%ymm14
292	vpand	%ymm15,%ymm8,%ymm8
293	vpsrlq	$29,%ymm1,%ymm11
294	vpand	%ymm15,%ymm1,%ymm1
295
296	vpermq	$0x93,%ymm14,%ymm14
297	vpxor	%ymm9,%ymm9,%ymm9
298	vpermq	$0x93,%ymm11,%ymm11
299
300	vpblendd	$3,%ymm9,%ymm14,%ymm10
301	vpblendd	$3,%ymm14,%ymm11,%ymm14
302	vpaddq	%ymm10,%ymm8,%ymm8
303	vpblendd	$3,%ymm11,%ymm9,%ymm11
304	vpaddq	%ymm14,%ymm1,%ymm1
305	vpaddq	%ymm11,%ymm2,%ymm2
306	vmovdqu	%ymm1,288-192(%rbx)
307	vmovdqu	%ymm2,320-192(%rbx)
308
309	movq	(%rsp),%rax
310	movq	8(%rsp),%r10
311	movq	16(%rsp),%r11
312	movq	24(%rsp),%r12
313	vmovdqu	32(%rsp),%ymm1
314	vmovdqu	64-192(%rbx),%ymm2
315	vmovdqu	96-192(%rbx),%ymm3
316	vmovdqu	128-192(%rbx),%ymm4
317	vmovdqu	160-192(%rbx),%ymm5
318	vmovdqu	192-192(%rbx),%ymm6
319	vmovdqu	224-192(%rbx),%ymm7
320
321	movq	%rax,%r9
322	imull	%ecx,%eax
323	andl	$0x1fffffff,%eax
324	vmovd	%eax,%xmm12
325
326	movq	%rax,%rdx
327	imulq	-128(%r13),%rax
328	vpbroadcastq	%xmm12,%ymm12
329	addq	%rax,%r9
330	movq	%rdx,%rax
331	imulq	8-128(%r13),%rax
332	shrq	$29,%r9
333	addq	%rax,%r10
334	movq	%rdx,%rax
335	imulq	16-128(%r13),%rax
336	addq	%r9,%r10
337	addq	%rax,%r11
338	imulq	24-128(%r13),%rdx
339	addq	%rdx,%r12
340
341	movq	%r10,%rax
342	imull	%ecx,%eax
343	andl	$0x1fffffff,%eax
344
345	movl	$9,%r14d
346	jmp	L$OOP_REDUCE_1024
347
348.p2align	5
349L$OOP_REDUCE_1024:
350	vmovd	%eax,%xmm13
351	vpbroadcastq	%xmm13,%ymm13
352
353	vpmuludq	32-128(%r13),%ymm12,%ymm10
354	movq	%rax,%rdx
355	imulq	-128(%r13),%rax
356	vpaddq	%ymm10,%ymm1,%ymm1
357	addq	%rax,%r10
358	vpmuludq	64-128(%r13),%ymm12,%ymm14
359	movq	%rdx,%rax
360	imulq	8-128(%r13),%rax
361	vpaddq	%ymm14,%ymm2,%ymm2
362	vpmuludq	96-128(%r13),%ymm12,%ymm11
363.byte	0x67
364	addq	%rax,%r11
365.byte	0x67
366	movq	%rdx,%rax
367	imulq	16-128(%r13),%rax
368	shrq	$29,%r10
369	vpaddq	%ymm11,%ymm3,%ymm3
370	vpmuludq	128-128(%r13),%ymm12,%ymm10
371	addq	%rax,%r12
372	addq	%r10,%r11
373	vpaddq	%ymm10,%ymm4,%ymm4
374	vpmuludq	160-128(%r13),%ymm12,%ymm14
375	movq	%r11,%rax
376	imull	%ecx,%eax
377	vpaddq	%ymm14,%ymm5,%ymm5
378	vpmuludq	192-128(%r13),%ymm12,%ymm11
379	andl	$0x1fffffff,%eax
380	vpaddq	%ymm11,%ymm6,%ymm6
381	vpmuludq	224-128(%r13),%ymm12,%ymm10
382	vpaddq	%ymm10,%ymm7,%ymm7
383	vpmuludq	256-128(%r13),%ymm12,%ymm14
384	vmovd	%eax,%xmm12
385
386	vpaddq	%ymm14,%ymm8,%ymm8
387
388	vpbroadcastq	%xmm12,%ymm12
389
390	vpmuludq	32-8-128(%r13),%ymm13,%ymm11
391	vmovdqu	96-8-128(%r13),%ymm14
392	movq	%rax,%rdx
393	imulq	-128(%r13),%rax
394	vpaddq	%ymm11,%ymm1,%ymm1
395	vpmuludq	64-8-128(%r13),%ymm13,%ymm10
396	vmovdqu	128-8-128(%r13),%ymm11
397	addq	%rax,%r11
398	movq	%rdx,%rax
399	imulq	8-128(%r13),%rax
400	vpaddq	%ymm10,%ymm2,%ymm2
401	addq	%r12,%rax
402	shrq	$29,%r11
403	vpmuludq	%ymm13,%ymm14,%ymm14
404	vmovdqu	160-8-128(%r13),%ymm10
405	addq	%r11,%rax
406	vpaddq	%ymm14,%ymm3,%ymm3
407	vpmuludq	%ymm13,%ymm11,%ymm11
408	vmovdqu	192-8-128(%r13),%ymm14
409.byte	0x67
410	movq	%rax,%r12
411	imull	%ecx,%eax
412	vpaddq	%ymm11,%ymm4,%ymm4
413	vpmuludq	%ymm13,%ymm10,%ymm10
414.byte	0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00
415	andl	$0x1fffffff,%eax
416	vpaddq	%ymm10,%ymm5,%ymm5
417	vpmuludq	%ymm13,%ymm14,%ymm14
418	vmovdqu	256-8-128(%r13),%ymm10
419	vpaddq	%ymm14,%ymm6,%ymm6
420	vpmuludq	%ymm13,%ymm11,%ymm11
421	vmovdqu	288-8-128(%r13),%ymm9
422	vmovd	%eax,%xmm0
423	imulq	-128(%r13),%rax
424	vpaddq	%ymm11,%ymm7,%ymm7
425	vpmuludq	%ymm13,%ymm10,%ymm10
426	vmovdqu	32-16-128(%r13),%ymm14
427	vpbroadcastq	%xmm0,%ymm0
428	vpaddq	%ymm10,%ymm8,%ymm8
429	vpmuludq	%ymm13,%ymm9,%ymm9
430	vmovdqu	64-16-128(%r13),%ymm11
431	addq	%rax,%r12
432
433	vmovdqu	32-24-128(%r13),%ymm13
434	vpmuludq	%ymm12,%ymm14,%ymm14
435	vmovdqu	96-16-128(%r13),%ymm10
436	vpaddq	%ymm14,%ymm1,%ymm1
437	vpmuludq	%ymm0,%ymm13,%ymm13
438	vpmuludq	%ymm12,%ymm11,%ymm11
439.byte	0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff
440	vpaddq	%ymm1,%ymm13,%ymm13
441	vpaddq	%ymm11,%ymm2,%ymm2
442	vpmuludq	%ymm12,%ymm10,%ymm10
443	vmovdqu	160-16-128(%r13),%ymm11
444.byte	0x67
445	vmovq	%xmm13,%rax
446	vmovdqu	%ymm13,(%rsp)
447	vpaddq	%ymm10,%ymm3,%ymm3
448	vpmuludq	%ymm12,%ymm14,%ymm14
449	vmovdqu	192-16-128(%r13),%ymm10
450	vpaddq	%ymm14,%ymm4,%ymm4
451	vpmuludq	%ymm12,%ymm11,%ymm11
452	vmovdqu	224-16-128(%r13),%ymm14
453	vpaddq	%ymm11,%ymm5,%ymm5
454	vpmuludq	%ymm12,%ymm10,%ymm10
455	vmovdqu	256-16-128(%r13),%ymm11
456	vpaddq	%ymm10,%ymm6,%ymm6
457	vpmuludq	%ymm12,%ymm14,%ymm14
458	shrq	$29,%r12
459	vmovdqu	288-16-128(%r13),%ymm10
460	addq	%r12,%rax
461	vpaddq	%ymm14,%ymm7,%ymm7
462	vpmuludq	%ymm12,%ymm11,%ymm11
463
464	movq	%rax,%r9
465	imull	%ecx,%eax
466	vpaddq	%ymm11,%ymm8,%ymm8
467	vpmuludq	%ymm12,%ymm10,%ymm10
468	andl	$0x1fffffff,%eax
469	vmovd	%eax,%xmm12
470	vmovdqu	96-24-128(%r13),%ymm11
471.byte	0x67
472	vpaddq	%ymm10,%ymm9,%ymm9
473	vpbroadcastq	%xmm12,%ymm12
474
475	vpmuludq	64-24-128(%r13),%ymm0,%ymm14
476	vmovdqu	128-24-128(%r13),%ymm10
477	movq	%rax,%rdx
478	imulq	-128(%r13),%rax
479	movq	8(%rsp),%r10
480	vpaddq	%ymm14,%ymm2,%ymm1
481	vpmuludq	%ymm0,%ymm11,%ymm11
482	vmovdqu	160-24-128(%r13),%ymm14
483	addq	%rax,%r9
484	movq	%rdx,%rax
485	imulq	8-128(%r13),%rax
486.byte	0x67
487	shrq	$29,%r9
488	movq	16(%rsp),%r11
489	vpaddq	%ymm11,%ymm3,%ymm2
490	vpmuludq	%ymm0,%ymm10,%ymm10
491	vmovdqu	192-24-128(%r13),%ymm11
492	addq	%rax,%r10
493	movq	%rdx,%rax
494	imulq	16-128(%r13),%rax
495	vpaddq	%ymm10,%ymm4,%ymm3
496	vpmuludq	%ymm0,%ymm14,%ymm14
497	vmovdqu	224-24-128(%r13),%ymm10
498	imulq	24-128(%r13),%rdx
499	addq	%rax,%r11
500	leaq	(%r9,%r10,1),%rax
501	vpaddq	%ymm14,%ymm5,%ymm4
502	vpmuludq	%ymm0,%ymm11,%ymm11
503	vmovdqu	256-24-128(%r13),%ymm14
504	movq	%rax,%r10
505	imull	%ecx,%eax
506	vpmuludq	%ymm0,%ymm10,%ymm10
507	vpaddq	%ymm11,%ymm6,%ymm5
508	vmovdqu	288-24-128(%r13),%ymm11
509	andl	$0x1fffffff,%eax
510	vpaddq	%ymm10,%ymm7,%ymm6
511	vpmuludq	%ymm0,%ymm14,%ymm14
512	addq	24(%rsp),%rdx
513	vpaddq	%ymm14,%ymm8,%ymm7
514	vpmuludq	%ymm0,%ymm11,%ymm11
515	vpaddq	%ymm11,%ymm9,%ymm8
516	vmovq	%r12,%xmm9
517	movq	%rdx,%r12
518
519	decl	%r14d
520	jnz	L$OOP_REDUCE_1024
521	leaq	448(%rsp),%r12
522	vpaddq	%ymm9,%ymm13,%ymm0
523	vpxor	%ymm9,%ymm9,%ymm9
524
525	vpaddq	288-192(%rbx),%ymm0,%ymm0
526	vpaddq	320-448(%r12),%ymm1,%ymm1
527	vpaddq	352-448(%r12),%ymm2,%ymm2
528	vpaddq	384-448(%r12),%ymm3,%ymm3
529	vpaddq	416-448(%r12),%ymm4,%ymm4
530	vpaddq	448-448(%r12),%ymm5,%ymm5
531	vpaddq	480-448(%r12),%ymm6,%ymm6
532	vpaddq	512-448(%r12),%ymm7,%ymm7
533	vpaddq	544-448(%r12),%ymm8,%ymm8
534
535	vpsrlq	$29,%ymm0,%ymm14
536	vpand	%ymm15,%ymm0,%ymm0
537	vpsrlq	$29,%ymm1,%ymm11
538	vpand	%ymm15,%ymm1,%ymm1
539	vpsrlq	$29,%ymm2,%ymm12
540	vpermq	$0x93,%ymm14,%ymm14
541	vpand	%ymm15,%ymm2,%ymm2
542	vpsrlq	$29,%ymm3,%ymm13
543	vpermq	$0x93,%ymm11,%ymm11
544	vpand	%ymm15,%ymm3,%ymm3
545	vpermq	$0x93,%ymm12,%ymm12
546
547	vpblendd	$3,%ymm9,%ymm14,%ymm10
548	vpermq	$0x93,%ymm13,%ymm13
549	vpblendd	$3,%ymm14,%ymm11,%ymm14
550	vpaddq	%ymm10,%ymm0,%ymm0
551	vpblendd	$3,%ymm11,%ymm12,%ymm11
552	vpaddq	%ymm14,%ymm1,%ymm1
553	vpblendd	$3,%ymm12,%ymm13,%ymm12
554	vpaddq	%ymm11,%ymm2,%ymm2
555	vpblendd	$3,%ymm13,%ymm9,%ymm13
556	vpaddq	%ymm12,%ymm3,%ymm3
557	vpaddq	%ymm13,%ymm4,%ymm4
558
559	vpsrlq	$29,%ymm0,%ymm14
560	vpand	%ymm15,%ymm0,%ymm0
561	vpsrlq	$29,%ymm1,%ymm11
562	vpand	%ymm15,%ymm1,%ymm1
563	vpsrlq	$29,%ymm2,%ymm12
564	vpermq	$0x93,%ymm14,%ymm14
565	vpand	%ymm15,%ymm2,%ymm2
566	vpsrlq	$29,%ymm3,%ymm13
567	vpermq	$0x93,%ymm11,%ymm11
568	vpand	%ymm15,%ymm3,%ymm3
569	vpermq	$0x93,%ymm12,%ymm12
570
571	vpblendd	$3,%ymm9,%ymm14,%ymm10
572	vpermq	$0x93,%ymm13,%ymm13
573	vpblendd	$3,%ymm14,%ymm11,%ymm14
574	vpaddq	%ymm10,%ymm0,%ymm0
575	vpblendd	$3,%ymm11,%ymm12,%ymm11
576	vpaddq	%ymm14,%ymm1,%ymm1
577	vmovdqu	%ymm0,0-128(%rdi)
578	vpblendd	$3,%ymm12,%ymm13,%ymm12
579	vpaddq	%ymm11,%ymm2,%ymm2
580	vmovdqu	%ymm1,32-128(%rdi)
581	vpblendd	$3,%ymm13,%ymm9,%ymm13
582	vpaddq	%ymm12,%ymm3,%ymm3
583	vmovdqu	%ymm2,64-128(%rdi)
584	vpaddq	%ymm13,%ymm4,%ymm4
585	vmovdqu	%ymm3,96-128(%rdi)
586	vpsrlq	$29,%ymm4,%ymm14
587	vpand	%ymm15,%ymm4,%ymm4
588	vpsrlq	$29,%ymm5,%ymm11
589	vpand	%ymm15,%ymm5,%ymm5
590	vpsrlq	$29,%ymm6,%ymm12
591	vpermq	$0x93,%ymm14,%ymm14
592	vpand	%ymm15,%ymm6,%ymm6
593	vpsrlq	$29,%ymm7,%ymm13
594	vpermq	$0x93,%ymm11,%ymm11
595	vpand	%ymm15,%ymm7,%ymm7
596	vpsrlq	$29,%ymm8,%ymm0
597	vpermq	$0x93,%ymm12,%ymm12
598	vpand	%ymm15,%ymm8,%ymm8
599	vpermq	$0x93,%ymm13,%ymm13
600
601	vpblendd	$3,%ymm9,%ymm14,%ymm10
602	vpermq	$0x93,%ymm0,%ymm0
603	vpblendd	$3,%ymm14,%ymm11,%ymm14
604	vpaddq	%ymm10,%ymm4,%ymm4
605	vpblendd	$3,%ymm11,%ymm12,%ymm11
606	vpaddq	%ymm14,%ymm5,%ymm5
607	vpblendd	$3,%ymm12,%ymm13,%ymm12
608	vpaddq	%ymm11,%ymm6,%ymm6
609	vpblendd	$3,%ymm13,%ymm0,%ymm13
610	vpaddq	%ymm12,%ymm7,%ymm7
611	vpaddq	%ymm13,%ymm8,%ymm8
612
613	vpsrlq	$29,%ymm4,%ymm14
614	vpand	%ymm15,%ymm4,%ymm4
615	vpsrlq	$29,%ymm5,%ymm11
616	vpand	%ymm15,%ymm5,%ymm5
617	vpsrlq	$29,%ymm6,%ymm12
618	vpermq	$0x93,%ymm14,%ymm14
619	vpand	%ymm15,%ymm6,%ymm6
620	vpsrlq	$29,%ymm7,%ymm13
621	vpermq	$0x93,%ymm11,%ymm11
622	vpand	%ymm15,%ymm7,%ymm7
623	vpsrlq	$29,%ymm8,%ymm0
624	vpermq	$0x93,%ymm12,%ymm12
625	vpand	%ymm15,%ymm8,%ymm8
626	vpermq	$0x93,%ymm13,%ymm13
627
628	vpblendd	$3,%ymm9,%ymm14,%ymm10
629	vpermq	$0x93,%ymm0,%ymm0
630	vpblendd	$3,%ymm14,%ymm11,%ymm14
631	vpaddq	%ymm10,%ymm4,%ymm4
632	vpblendd	$3,%ymm11,%ymm12,%ymm11
633	vpaddq	%ymm14,%ymm5,%ymm5
634	vmovdqu	%ymm4,128-128(%rdi)
635	vpblendd	$3,%ymm12,%ymm13,%ymm12
636	vpaddq	%ymm11,%ymm6,%ymm6
637	vmovdqu	%ymm5,160-128(%rdi)
638	vpblendd	$3,%ymm13,%ymm0,%ymm13
639	vpaddq	%ymm12,%ymm7,%ymm7
640	vmovdqu	%ymm6,192-128(%rdi)
641	vpaddq	%ymm13,%ymm8,%ymm8
642	vmovdqu	%ymm7,224-128(%rdi)
643	vmovdqu	%ymm8,256-128(%rdi)
644
645	movq	%rdi,%rsi
646	decl	%r8d
647	jne	L$OOP_GRANDE_SQR_1024
648
649	vzeroall
650	movq	%rbp,%rax
651
652	movq	-48(%rax),%r15
653
654	movq	-40(%rax),%r14
655
656	movq	-32(%rax),%r13
657
658	movq	-24(%rax),%r12
659
660	movq	-16(%rax),%rbp
661
662	movq	-8(%rax),%rbx
663
664	leaq	(%rax),%rsp
665
666L$sqr_1024_epilogue:
667	.byte	0xf3,0xc3
668
669
670.globl	_rsaz_1024_mul_avx2
671.private_extern _rsaz_1024_mul_avx2
672
673.p2align	6
674_rsaz_1024_mul_avx2:
675
676	leaq	(%rsp),%rax
677
678	pushq	%rbx
679
680	pushq	%rbp
681
682	pushq	%r12
683
684	pushq	%r13
685
686	pushq	%r14
687
688	pushq	%r15
689
690	movq	%rax,%rbp
691
692	vzeroall
693	movq	%rdx,%r13
694	subq	$64,%rsp
695
696
697
698
699
700
701.byte	0x67,0x67
702	movq	%rsi,%r15
703	andq	$4095,%r15
704	addq	$320,%r15
705	shrq	$12,%r15
706	movq	%rsi,%r15
707	cmovnzq	%r13,%rsi
708	cmovnzq	%r15,%r13
709
710	movq	%rcx,%r15
711	subq	$-128,%rsi
712	subq	$-128,%rcx
713	subq	$-128,%rdi
714
715	andq	$4095,%r15
716	addq	$320,%r15
717.byte	0x67,0x67
718	shrq	$12,%r15
719	jz	L$mul_1024_no_n_copy
720
721
722
723
724
725	subq	$320,%rsp
726	vmovdqu	0-128(%rcx),%ymm0
727	andq	$-512,%rsp
728	vmovdqu	32-128(%rcx),%ymm1
729	vmovdqu	64-128(%rcx),%ymm2
730	vmovdqu	96-128(%rcx),%ymm3
731	vmovdqu	128-128(%rcx),%ymm4
732	vmovdqu	160-128(%rcx),%ymm5
733	vmovdqu	192-128(%rcx),%ymm6
734	vmovdqu	224-128(%rcx),%ymm7
735	vmovdqu	256-128(%rcx),%ymm8
736	leaq	64+128(%rsp),%rcx
737	vmovdqu	%ymm0,0-128(%rcx)
738	vpxor	%ymm0,%ymm0,%ymm0
739	vmovdqu	%ymm1,32-128(%rcx)
740	vpxor	%ymm1,%ymm1,%ymm1
741	vmovdqu	%ymm2,64-128(%rcx)
742	vpxor	%ymm2,%ymm2,%ymm2
743	vmovdqu	%ymm3,96-128(%rcx)
744	vpxor	%ymm3,%ymm3,%ymm3
745	vmovdqu	%ymm4,128-128(%rcx)
746	vpxor	%ymm4,%ymm4,%ymm4
747	vmovdqu	%ymm5,160-128(%rcx)
748	vpxor	%ymm5,%ymm5,%ymm5
749	vmovdqu	%ymm6,192-128(%rcx)
750	vpxor	%ymm6,%ymm6,%ymm6
751	vmovdqu	%ymm7,224-128(%rcx)
752	vpxor	%ymm7,%ymm7,%ymm7
753	vmovdqu	%ymm8,256-128(%rcx)
754	vmovdqa	%ymm0,%ymm8
755	vmovdqu	%ymm9,288-128(%rcx)
756L$mul_1024_no_n_copy:
757	andq	$-64,%rsp
758
759	movq	(%r13),%rbx
760	vpbroadcastq	(%r13),%ymm10
761	vmovdqu	%ymm0,(%rsp)
762	xorq	%r9,%r9
763.byte	0x67
764	xorq	%r10,%r10
765	xorq	%r11,%r11
766	xorq	%r12,%r12
767
768	vmovdqu	L$and_mask(%rip),%ymm15
769	movl	$9,%r14d
770	vmovdqu	%ymm9,288-128(%rdi)
771	jmp	L$oop_mul_1024
772
773.p2align	5
774L$oop_mul_1024:
775	vpsrlq	$29,%ymm3,%ymm9
776	movq	%rbx,%rax
777	imulq	-128(%rsi),%rax
778	addq	%r9,%rax
779	movq	%rbx,%r10
780	imulq	8-128(%rsi),%r10
781	addq	8(%rsp),%r10
782
783	movq	%rax,%r9
784	imull	%r8d,%eax
785	andl	$0x1fffffff,%eax
786
787	movq	%rbx,%r11
788	imulq	16-128(%rsi),%r11
789	addq	16(%rsp),%r11
790
791	movq	%rbx,%r12
792	imulq	24-128(%rsi),%r12
793	addq	24(%rsp),%r12
794	vpmuludq	32-128(%rsi),%ymm10,%ymm0
795	vmovd	%eax,%xmm11
796	vpaddq	%ymm0,%ymm1,%ymm1
797	vpmuludq	64-128(%rsi),%ymm10,%ymm12
798	vpbroadcastq	%xmm11,%ymm11
799	vpaddq	%ymm12,%ymm2,%ymm2
800	vpmuludq	96-128(%rsi),%ymm10,%ymm13
801	vpand	%ymm15,%ymm3,%ymm3
802	vpaddq	%ymm13,%ymm3,%ymm3
803	vpmuludq	128-128(%rsi),%ymm10,%ymm0
804	vpaddq	%ymm0,%ymm4,%ymm4
805	vpmuludq	160-128(%rsi),%ymm10,%ymm12
806	vpaddq	%ymm12,%ymm5,%ymm5
807	vpmuludq	192-128(%rsi),%ymm10,%ymm13
808	vpaddq	%ymm13,%ymm6,%ymm6
809	vpmuludq	224-128(%rsi),%ymm10,%ymm0
810	vpermq	$0x93,%ymm9,%ymm9
811	vpaddq	%ymm0,%ymm7,%ymm7
812	vpmuludq	256-128(%rsi),%ymm10,%ymm12
813	vpbroadcastq	8(%r13),%ymm10
814	vpaddq	%ymm12,%ymm8,%ymm8
815
816	movq	%rax,%rdx
817	imulq	-128(%rcx),%rax
818	addq	%rax,%r9
819	movq	%rdx,%rax
820	imulq	8-128(%rcx),%rax
821	addq	%rax,%r10
822	movq	%rdx,%rax
823	imulq	16-128(%rcx),%rax
824	addq	%rax,%r11
825	shrq	$29,%r9
826	imulq	24-128(%rcx),%rdx
827	addq	%rdx,%r12
828	addq	%r9,%r10
829
830	vpmuludq	32-128(%rcx),%ymm11,%ymm13
831	vmovq	%xmm10,%rbx
832	vpaddq	%ymm13,%ymm1,%ymm1
833	vpmuludq	64-128(%rcx),%ymm11,%ymm0
834	vpaddq	%ymm0,%ymm2,%ymm2
835	vpmuludq	96-128(%rcx),%ymm11,%ymm12
836	vpaddq	%ymm12,%ymm3,%ymm3
837	vpmuludq	128-128(%rcx),%ymm11,%ymm13
838	vpaddq	%ymm13,%ymm4,%ymm4
839	vpmuludq	160-128(%rcx),%ymm11,%ymm0
840	vpaddq	%ymm0,%ymm5,%ymm5
841	vpmuludq	192-128(%rcx),%ymm11,%ymm12
842	vpaddq	%ymm12,%ymm6,%ymm6
843	vpmuludq	224-128(%rcx),%ymm11,%ymm13
844	vpblendd	$3,%ymm14,%ymm9,%ymm12
845	vpaddq	%ymm13,%ymm7,%ymm7
846	vpmuludq	256-128(%rcx),%ymm11,%ymm0
847	vpaddq	%ymm12,%ymm3,%ymm3
848	vpaddq	%ymm0,%ymm8,%ymm8
849
850	movq	%rbx,%rax
851	imulq	-128(%rsi),%rax
852	addq	%rax,%r10
853	vmovdqu	-8+32-128(%rsi),%ymm12
854	movq	%rbx,%rax
855	imulq	8-128(%rsi),%rax
856	addq	%rax,%r11
857	vmovdqu	-8+64-128(%rsi),%ymm13
858
859	movq	%r10,%rax
860	vpblendd	$0xfc,%ymm14,%ymm9,%ymm9
861	imull	%r8d,%eax
862	vpaddq	%ymm9,%ymm4,%ymm4
863	andl	$0x1fffffff,%eax
864
865	imulq	16-128(%rsi),%rbx
866	addq	%rbx,%r12
867	vpmuludq	%ymm10,%ymm12,%ymm12
868	vmovd	%eax,%xmm11
869	vmovdqu	-8+96-128(%rsi),%ymm0
870	vpaddq	%ymm12,%ymm1,%ymm1
871	vpmuludq	%ymm10,%ymm13,%ymm13
872	vpbroadcastq	%xmm11,%ymm11
873	vmovdqu	-8+128-128(%rsi),%ymm12
874	vpaddq	%ymm13,%ymm2,%ymm2
875	vpmuludq	%ymm10,%ymm0,%ymm0
876	vmovdqu	-8+160-128(%rsi),%ymm13
877	vpaddq	%ymm0,%ymm3,%ymm3
878	vpmuludq	%ymm10,%ymm12,%ymm12
879	vmovdqu	-8+192-128(%rsi),%ymm0
880	vpaddq	%ymm12,%ymm4,%ymm4
881	vpmuludq	%ymm10,%ymm13,%ymm13
882	vmovdqu	-8+224-128(%rsi),%ymm12
883	vpaddq	%ymm13,%ymm5,%ymm5
884	vpmuludq	%ymm10,%ymm0,%ymm0
885	vmovdqu	-8+256-128(%rsi),%ymm13
886	vpaddq	%ymm0,%ymm6,%ymm6
887	vpmuludq	%ymm10,%ymm12,%ymm12
888	vmovdqu	-8+288-128(%rsi),%ymm9
889	vpaddq	%ymm12,%ymm7,%ymm7
890	vpmuludq	%ymm10,%ymm13,%ymm13
891	vpaddq	%ymm13,%ymm8,%ymm8
892	vpmuludq	%ymm10,%ymm9,%ymm9
893	vpbroadcastq	16(%r13),%ymm10
894
895	movq	%rax,%rdx
896	imulq	-128(%rcx),%rax
897	addq	%rax,%r10
898	vmovdqu	-8+32-128(%rcx),%ymm0
899	movq	%rdx,%rax
900	imulq	8-128(%rcx),%rax
901	addq	%rax,%r11
902	vmovdqu	-8+64-128(%rcx),%ymm12
903	shrq	$29,%r10
904	imulq	16-128(%rcx),%rdx
905	addq	%rdx,%r12
906	addq	%r10,%r11
907
908	vpmuludq	%ymm11,%ymm0,%ymm0
909	vmovq	%xmm10,%rbx
910	vmovdqu	-8+96-128(%rcx),%ymm13
911	vpaddq	%ymm0,%ymm1,%ymm1
912	vpmuludq	%ymm11,%ymm12,%ymm12
913	vmovdqu	-8+128-128(%rcx),%ymm0
914	vpaddq	%ymm12,%ymm2,%ymm2
915	vpmuludq	%ymm11,%ymm13,%ymm13
916	vmovdqu	-8+160-128(%rcx),%ymm12
917	vpaddq	%ymm13,%ymm3,%ymm3
918	vpmuludq	%ymm11,%ymm0,%ymm0
919	vmovdqu	-8+192-128(%rcx),%ymm13
920	vpaddq	%ymm0,%ymm4,%ymm4
921	vpmuludq	%ymm11,%ymm12,%ymm12
922	vmovdqu	-8+224-128(%rcx),%ymm0
923	vpaddq	%ymm12,%ymm5,%ymm5
924	vpmuludq	%ymm11,%ymm13,%ymm13
925	vmovdqu	-8+256-128(%rcx),%ymm12
926	vpaddq	%ymm13,%ymm6,%ymm6
927	vpmuludq	%ymm11,%ymm0,%ymm0
928	vmovdqu	-8+288-128(%rcx),%ymm13
929	vpaddq	%ymm0,%ymm7,%ymm7
930	vpmuludq	%ymm11,%ymm12,%ymm12
931	vpaddq	%ymm12,%ymm8,%ymm8
932	vpmuludq	%ymm11,%ymm13,%ymm13
933	vpaddq	%ymm13,%ymm9,%ymm9
934
935	vmovdqu	-16+32-128(%rsi),%ymm0
936	movq	%rbx,%rax
937	imulq	-128(%rsi),%rax
938	addq	%r11,%rax
939
940	vmovdqu	-16+64-128(%rsi),%ymm12
941	movq	%rax,%r11
942	imull	%r8d,%eax
943	andl	$0x1fffffff,%eax
944
945	imulq	8-128(%rsi),%rbx
946	addq	%rbx,%r12
947	vpmuludq	%ymm10,%ymm0,%ymm0
948	vmovd	%eax,%xmm11
949	vmovdqu	-16+96-128(%rsi),%ymm13
950	vpaddq	%ymm0,%ymm1,%ymm1
951	vpmuludq	%ymm10,%ymm12,%ymm12
952	vpbroadcastq	%xmm11,%ymm11
953	vmovdqu	-16+128-128(%rsi),%ymm0
954	vpaddq	%ymm12,%ymm2,%ymm2
955	vpmuludq	%ymm10,%ymm13,%ymm13
956	vmovdqu	-16+160-128(%rsi),%ymm12
957	vpaddq	%ymm13,%ymm3,%ymm3
958	vpmuludq	%ymm10,%ymm0,%ymm0
959	vmovdqu	-16+192-128(%rsi),%ymm13
960	vpaddq	%ymm0,%ymm4,%ymm4
961	vpmuludq	%ymm10,%ymm12,%ymm12
962	vmovdqu	-16+224-128(%rsi),%ymm0
963	vpaddq	%ymm12,%ymm5,%ymm5
964	vpmuludq	%ymm10,%ymm13,%ymm13
965	vmovdqu	-16+256-128(%rsi),%ymm12
966	vpaddq	%ymm13,%ymm6,%ymm6
967	vpmuludq	%ymm10,%ymm0,%ymm0
968	vmovdqu	-16+288-128(%rsi),%ymm13
969	vpaddq	%ymm0,%ymm7,%ymm7
970	vpmuludq	%ymm10,%ymm12,%ymm12
971	vpaddq	%ymm12,%ymm8,%ymm8
972	vpmuludq	%ymm10,%ymm13,%ymm13
973	vpbroadcastq	24(%r13),%ymm10
974	vpaddq	%ymm13,%ymm9,%ymm9
975
976	vmovdqu	-16+32-128(%rcx),%ymm0
977	movq	%rax,%rdx
978	imulq	-128(%rcx),%rax
979	addq	%rax,%r11
980	vmovdqu	-16+64-128(%rcx),%ymm12
981	imulq	8-128(%rcx),%rdx
982	addq	%rdx,%r12
983	shrq	$29,%r11
984
985	vpmuludq	%ymm11,%ymm0,%ymm0
986	vmovq	%xmm10,%rbx
987	vmovdqu	-16+96-128(%rcx),%ymm13
988	vpaddq	%ymm0,%ymm1,%ymm1
989	vpmuludq	%ymm11,%ymm12,%ymm12
990	vmovdqu	-16+128-128(%rcx),%ymm0
991	vpaddq	%ymm12,%ymm2,%ymm2
992	vpmuludq	%ymm11,%ymm13,%ymm13
993	vmovdqu	-16+160-128(%rcx),%ymm12
994	vpaddq	%ymm13,%ymm3,%ymm3
995	vpmuludq	%ymm11,%ymm0,%ymm0
996	vmovdqu	-16+192-128(%rcx),%ymm13
997	vpaddq	%ymm0,%ymm4,%ymm4
998	vpmuludq	%ymm11,%ymm12,%ymm12
999	vmovdqu	-16+224-128(%rcx),%ymm0
1000	vpaddq	%ymm12,%ymm5,%ymm5
1001	vpmuludq	%ymm11,%ymm13,%ymm13
1002	vmovdqu	-16+256-128(%rcx),%ymm12
1003	vpaddq	%ymm13,%ymm6,%ymm6
1004	vpmuludq	%ymm11,%ymm0,%ymm0
1005	vmovdqu	-16+288-128(%rcx),%ymm13
1006	vpaddq	%ymm0,%ymm7,%ymm7
1007	vpmuludq	%ymm11,%ymm12,%ymm12
1008	vmovdqu	-24+32-128(%rsi),%ymm0
1009	vpaddq	%ymm12,%ymm8,%ymm8
1010	vpmuludq	%ymm11,%ymm13,%ymm13
1011	vmovdqu	-24+64-128(%rsi),%ymm12
1012	vpaddq	%ymm13,%ymm9,%ymm9
1013
1014	addq	%r11,%r12
1015	imulq	-128(%rsi),%rbx
1016	addq	%rbx,%r12
1017
1018	movq	%r12,%rax
1019	imull	%r8d,%eax
1020	andl	$0x1fffffff,%eax
1021
1022	vpmuludq	%ymm10,%ymm0,%ymm0
1023	vmovd	%eax,%xmm11
1024	vmovdqu	-24+96-128(%rsi),%ymm13
1025	vpaddq	%ymm0,%ymm1,%ymm1
1026	vpmuludq	%ymm10,%ymm12,%ymm12
1027	vpbroadcastq	%xmm11,%ymm11
1028	vmovdqu	-24+128-128(%rsi),%ymm0
1029	vpaddq	%ymm12,%ymm2,%ymm2
1030	vpmuludq	%ymm10,%ymm13,%ymm13
1031	vmovdqu	-24+160-128(%rsi),%ymm12
1032	vpaddq	%ymm13,%ymm3,%ymm3
1033	vpmuludq	%ymm10,%ymm0,%ymm0
1034	vmovdqu	-24+192-128(%rsi),%ymm13
1035	vpaddq	%ymm0,%ymm4,%ymm4
1036	vpmuludq	%ymm10,%ymm12,%ymm12
1037	vmovdqu	-24+224-128(%rsi),%ymm0
1038	vpaddq	%ymm12,%ymm5,%ymm5
1039	vpmuludq	%ymm10,%ymm13,%ymm13
1040	vmovdqu	-24+256-128(%rsi),%ymm12
1041	vpaddq	%ymm13,%ymm6,%ymm6
1042	vpmuludq	%ymm10,%ymm0,%ymm0
1043	vmovdqu	-24+288-128(%rsi),%ymm13
1044	vpaddq	%ymm0,%ymm7,%ymm7
1045	vpmuludq	%ymm10,%ymm12,%ymm12
1046	vpaddq	%ymm12,%ymm8,%ymm8
1047	vpmuludq	%ymm10,%ymm13,%ymm13
1048	vpbroadcastq	32(%r13),%ymm10
1049	vpaddq	%ymm13,%ymm9,%ymm9
1050	addq	$32,%r13
1051
1052	vmovdqu	-24+32-128(%rcx),%ymm0
1053	imulq	-128(%rcx),%rax
1054	addq	%rax,%r12
1055	shrq	$29,%r12
1056
1057	vmovdqu	-24+64-128(%rcx),%ymm12
1058	vpmuludq	%ymm11,%ymm0,%ymm0
1059	vmovq	%xmm10,%rbx
1060	vmovdqu	-24+96-128(%rcx),%ymm13
1061	vpaddq	%ymm0,%ymm1,%ymm0
1062	vpmuludq	%ymm11,%ymm12,%ymm12
1063	vmovdqu	%ymm0,(%rsp)
1064	vpaddq	%ymm12,%ymm2,%ymm1
1065	vmovdqu	-24+128-128(%rcx),%ymm0
1066	vpmuludq	%ymm11,%ymm13,%ymm13
1067	vmovdqu	-24+160-128(%rcx),%ymm12
1068	vpaddq	%ymm13,%ymm3,%ymm2
1069	vpmuludq	%ymm11,%ymm0,%ymm0
1070	vmovdqu	-24+192-128(%rcx),%ymm13
1071	vpaddq	%ymm0,%ymm4,%ymm3
1072	vpmuludq	%ymm11,%ymm12,%ymm12
1073	vmovdqu	-24+224-128(%rcx),%ymm0
1074	vpaddq	%ymm12,%ymm5,%ymm4
1075	vpmuludq	%ymm11,%ymm13,%ymm13
1076	vmovdqu	-24+256-128(%rcx),%ymm12
1077	vpaddq	%ymm13,%ymm6,%ymm5
1078	vpmuludq	%ymm11,%ymm0,%ymm0
1079	vmovdqu	-24+288-128(%rcx),%ymm13
1080	movq	%r12,%r9
1081	vpaddq	%ymm0,%ymm7,%ymm6
1082	vpmuludq	%ymm11,%ymm12,%ymm12
1083	addq	(%rsp),%r9
1084	vpaddq	%ymm12,%ymm8,%ymm7
1085	vpmuludq	%ymm11,%ymm13,%ymm13
1086	vmovq	%r12,%xmm12
1087	vpaddq	%ymm13,%ymm9,%ymm8
1088
1089	decl	%r14d
1090	jnz	L$oop_mul_1024
1091	vpaddq	(%rsp),%ymm12,%ymm0
1092
1093	vpsrlq	$29,%ymm0,%ymm12
1094	vpand	%ymm15,%ymm0,%ymm0
1095	vpsrlq	$29,%ymm1,%ymm13
1096	vpand	%ymm15,%ymm1,%ymm1
1097	vpsrlq	$29,%ymm2,%ymm10
1098	vpermq	$0x93,%ymm12,%ymm12
1099	vpand	%ymm15,%ymm2,%ymm2
1100	vpsrlq	$29,%ymm3,%ymm11
1101	vpermq	$0x93,%ymm13,%ymm13
1102	vpand	%ymm15,%ymm3,%ymm3
1103
1104	vpblendd	$3,%ymm14,%ymm12,%ymm9
1105	vpermq	$0x93,%ymm10,%ymm10
1106	vpblendd	$3,%ymm12,%ymm13,%ymm12
1107	vpermq	$0x93,%ymm11,%ymm11
1108	vpaddq	%ymm9,%ymm0,%ymm0
1109	vpblendd	$3,%ymm13,%ymm10,%ymm13
1110	vpaddq	%ymm12,%ymm1,%ymm1
1111	vpblendd	$3,%ymm10,%ymm11,%ymm10
1112	vpaddq	%ymm13,%ymm2,%ymm2
1113	vpblendd	$3,%ymm11,%ymm14,%ymm11
1114	vpaddq	%ymm10,%ymm3,%ymm3
1115	vpaddq	%ymm11,%ymm4,%ymm4
1116
1117	vpsrlq	$29,%ymm0,%ymm12
1118	vpand	%ymm15,%ymm0,%ymm0
1119	vpsrlq	$29,%ymm1,%ymm13
1120	vpand	%ymm15,%ymm1,%ymm1
1121	vpsrlq	$29,%ymm2,%ymm10
1122	vpermq	$0x93,%ymm12,%ymm12
1123	vpand	%ymm15,%ymm2,%ymm2
1124	vpsrlq	$29,%ymm3,%ymm11
1125	vpermq	$0x93,%ymm13,%ymm13
1126	vpand	%ymm15,%ymm3,%ymm3
1127	vpermq	$0x93,%ymm10,%ymm10
1128
1129	vpblendd	$3,%ymm14,%ymm12,%ymm9
1130	vpermq	$0x93,%ymm11,%ymm11
1131	vpblendd	$3,%ymm12,%ymm13,%ymm12
1132	vpaddq	%ymm9,%ymm0,%ymm0
1133	vpblendd	$3,%ymm13,%ymm10,%ymm13
1134	vpaddq	%ymm12,%ymm1,%ymm1
1135	vpblendd	$3,%ymm10,%ymm11,%ymm10
1136	vpaddq	%ymm13,%ymm2,%ymm2
1137	vpblendd	$3,%ymm11,%ymm14,%ymm11
1138	vpaddq	%ymm10,%ymm3,%ymm3
1139	vpaddq	%ymm11,%ymm4,%ymm4
1140
1141	vmovdqu	%ymm0,0-128(%rdi)
1142	vmovdqu	%ymm1,32-128(%rdi)
1143	vmovdqu	%ymm2,64-128(%rdi)
1144	vmovdqu	%ymm3,96-128(%rdi)
1145	vpsrlq	$29,%ymm4,%ymm12
1146	vpand	%ymm15,%ymm4,%ymm4
1147	vpsrlq	$29,%ymm5,%ymm13
1148	vpand	%ymm15,%ymm5,%ymm5
1149	vpsrlq	$29,%ymm6,%ymm10
1150	vpermq	$0x93,%ymm12,%ymm12
1151	vpand	%ymm15,%ymm6,%ymm6
1152	vpsrlq	$29,%ymm7,%ymm11
1153	vpermq	$0x93,%ymm13,%ymm13
1154	vpand	%ymm15,%ymm7,%ymm7
1155	vpsrlq	$29,%ymm8,%ymm0
1156	vpermq	$0x93,%ymm10,%ymm10
1157	vpand	%ymm15,%ymm8,%ymm8
1158	vpermq	$0x93,%ymm11,%ymm11
1159
1160	vpblendd	$3,%ymm14,%ymm12,%ymm9
1161	vpermq	$0x93,%ymm0,%ymm0
1162	vpblendd	$3,%ymm12,%ymm13,%ymm12
1163	vpaddq	%ymm9,%ymm4,%ymm4
1164	vpblendd	$3,%ymm13,%ymm10,%ymm13
1165	vpaddq	%ymm12,%ymm5,%ymm5
1166	vpblendd	$3,%ymm10,%ymm11,%ymm10
1167	vpaddq	%ymm13,%ymm6,%ymm6
1168	vpblendd	$3,%ymm11,%ymm0,%ymm11
1169	vpaddq	%ymm10,%ymm7,%ymm7
1170	vpaddq	%ymm11,%ymm8,%ymm8
1171
1172	vpsrlq	$29,%ymm4,%ymm12
1173	vpand	%ymm15,%ymm4,%ymm4
1174	vpsrlq	$29,%ymm5,%ymm13
1175	vpand	%ymm15,%ymm5,%ymm5
1176	vpsrlq	$29,%ymm6,%ymm10
1177	vpermq	$0x93,%ymm12,%ymm12
1178	vpand	%ymm15,%ymm6,%ymm6
1179	vpsrlq	$29,%ymm7,%ymm11
1180	vpermq	$0x93,%ymm13,%ymm13
1181	vpand	%ymm15,%ymm7,%ymm7
1182	vpsrlq	$29,%ymm8,%ymm0
1183	vpermq	$0x93,%ymm10,%ymm10
1184	vpand	%ymm15,%ymm8,%ymm8
1185	vpermq	$0x93,%ymm11,%ymm11
1186
1187	vpblendd	$3,%ymm14,%ymm12,%ymm9
1188	vpermq	$0x93,%ymm0,%ymm0
1189	vpblendd	$3,%ymm12,%ymm13,%ymm12
1190	vpaddq	%ymm9,%ymm4,%ymm4
1191	vpblendd	$3,%ymm13,%ymm10,%ymm13
1192	vpaddq	%ymm12,%ymm5,%ymm5
1193	vpblendd	$3,%ymm10,%ymm11,%ymm10
1194	vpaddq	%ymm13,%ymm6,%ymm6
1195	vpblendd	$3,%ymm11,%ymm0,%ymm11
1196	vpaddq	%ymm10,%ymm7,%ymm7
1197	vpaddq	%ymm11,%ymm8,%ymm8
1198
1199	vmovdqu	%ymm4,128-128(%rdi)
1200	vmovdqu	%ymm5,160-128(%rdi)
1201	vmovdqu	%ymm6,192-128(%rdi)
1202	vmovdqu	%ymm7,224-128(%rdi)
1203	vmovdqu	%ymm8,256-128(%rdi)
1204	vzeroupper
1205
1206	movq	%rbp,%rax
1207
1208	movq	-48(%rax),%r15
1209
1210	movq	-40(%rax),%r14
1211
1212	movq	-32(%rax),%r13
1213
1214	movq	-24(%rax),%r12
1215
1216	movq	-16(%rax),%rbp
1217
1218	movq	-8(%rax),%rbx
1219
1220	leaq	(%rax),%rsp
1221
1222L$mul_1024_epilogue:
1223	.byte	0xf3,0xc3
1224
1225
1226.globl	_rsaz_1024_red2norm_avx2
1227.private_extern _rsaz_1024_red2norm_avx2
1228
1229.p2align	5
1230_rsaz_1024_red2norm_avx2:
1231
1232	subq	$-128,%rsi
1233	xorq	%rax,%rax
1234	movq	-128(%rsi),%r8
1235	movq	-120(%rsi),%r9
1236	movq	-112(%rsi),%r10
1237	shlq	$0,%r8
1238	shlq	$29,%r9
1239	movq	%r10,%r11
1240	shlq	$58,%r10
1241	shrq	$6,%r11
1242	addq	%r8,%rax
1243	addq	%r9,%rax
1244	addq	%r10,%rax
1245	adcq	$0,%r11
1246	movq	%rax,0(%rdi)
1247	movq	%r11,%rax
1248	movq	-104(%rsi),%r8
1249	movq	-96(%rsi),%r9
1250	shlq	$23,%r8
1251	movq	%r9,%r10
1252	shlq	$52,%r9
1253	shrq	$12,%r10
1254	addq	%r8,%rax
1255	addq	%r9,%rax
1256	adcq	$0,%r10
1257	movq	%rax,8(%rdi)
1258	movq	%r10,%rax
1259	movq	-88(%rsi),%r11
1260	movq	-80(%rsi),%r8
1261	shlq	$17,%r11
1262	movq	%r8,%r9
1263	shlq	$46,%r8
1264	shrq	$18,%r9
1265	addq	%r11,%rax
1266	addq	%r8,%rax
1267	adcq	$0,%r9
1268	movq	%rax,16(%rdi)
1269	movq	%r9,%rax
1270	movq	-72(%rsi),%r10
1271	movq	-64(%rsi),%r11
1272	shlq	$11,%r10
1273	movq	%r11,%r8
1274	shlq	$40,%r11
1275	shrq	$24,%r8
1276	addq	%r10,%rax
1277	addq	%r11,%rax
1278	adcq	$0,%r8
1279	movq	%rax,24(%rdi)
1280	movq	%r8,%rax
1281	movq	-56(%rsi),%r9
1282	movq	-48(%rsi),%r10
1283	movq	-40(%rsi),%r11
1284	shlq	$5,%r9
1285	shlq	$34,%r10
1286	movq	%r11,%r8
1287	shlq	$63,%r11
1288	shrq	$1,%r8
1289	addq	%r9,%rax
1290	addq	%r10,%rax
1291	addq	%r11,%rax
1292	adcq	$0,%r8
1293	movq	%rax,32(%rdi)
1294	movq	%r8,%rax
1295	movq	-32(%rsi),%r9
1296	movq	-24(%rsi),%r10
1297	shlq	$28,%r9
1298	movq	%r10,%r11
1299	shlq	$57,%r10
1300	shrq	$7,%r11
1301	addq	%r9,%rax
1302	addq	%r10,%rax
1303	adcq	$0,%r11
1304	movq	%rax,40(%rdi)
1305	movq	%r11,%rax
1306	movq	-16(%rsi),%r8
1307	movq	-8(%rsi),%r9
1308	shlq	$22,%r8
1309	movq	%r9,%r10
1310	shlq	$51,%r9
1311	shrq	$13,%r10
1312	addq	%r8,%rax
1313	addq	%r9,%rax
1314	adcq	$0,%r10
1315	movq	%rax,48(%rdi)
1316	movq	%r10,%rax
1317	movq	0(%rsi),%r11
1318	movq	8(%rsi),%r8
1319	shlq	$16,%r11
1320	movq	%r8,%r9
1321	shlq	$45,%r8
1322	shrq	$19,%r9
1323	addq	%r11,%rax
1324	addq	%r8,%rax
1325	adcq	$0,%r9
1326	movq	%rax,56(%rdi)
1327	movq	%r9,%rax
1328	movq	16(%rsi),%r10
1329	movq	24(%rsi),%r11
1330	shlq	$10,%r10
1331	movq	%r11,%r8
1332	shlq	$39,%r11
1333	shrq	$25,%r8
1334	addq	%r10,%rax
1335	addq	%r11,%rax
1336	adcq	$0,%r8
1337	movq	%rax,64(%rdi)
1338	movq	%r8,%rax
1339	movq	32(%rsi),%r9
1340	movq	40(%rsi),%r10
1341	movq	48(%rsi),%r11
1342	shlq	$4,%r9
1343	shlq	$33,%r10
1344	movq	%r11,%r8
1345	shlq	$62,%r11
1346	shrq	$2,%r8
1347	addq	%r9,%rax
1348	addq	%r10,%rax
1349	addq	%r11,%rax
1350	adcq	$0,%r8
1351	movq	%rax,72(%rdi)
1352	movq	%r8,%rax
1353	movq	56(%rsi),%r9
1354	movq	64(%rsi),%r10
1355	shlq	$27,%r9
1356	movq	%r10,%r11
1357	shlq	$56,%r10
1358	shrq	$8,%r11
1359	addq	%r9,%rax
1360	addq	%r10,%rax
1361	adcq	$0,%r11
1362	movq	%rax,80(%rdi)
1363	movq	%r11,%rax
1364	movq	72(%rsi),%r8
1365	movq	80(%rsi),%r9
1366	shlq	$21,%r8
1367	movq	%r9,%r10
1368	shlq	$50,%r9
1369	shrq	$14,%r10
1370	addq	%r8,%rax
1371	addq	%r9,%rax
1372	adcq	$0,%r10
1373	movq	%rax,88(%rdi)
1374	movq	%r10,%rax
1375	movq	88(%rsi),%r11
1376	movq	96(%rsi),%r8
1377	shlq	$15,%r11
1378	movq	%r8,%r9
1379	shlq	$44,%r8
1380	shrq	$20,%r9
1381	addq	%r11,%rax
1382	addq	%r8,%rax
1383	adcq	$0,%r9
1384	movq	%rax,96(%rdi)
1385	movq	%r9,%rax
1386	movq	104(%rsi),%r10
1387	movq	112(%rsi),%r11
1388	shlq	$9,%r10
1389	movq	%r11,%r8
1390	shlq	$38,%r11
1391	shrq	$26,%r8
1392	addq	%r10,%rax
1393	addq	%r11,%rax
1394	adcq	$0,%r8
1395	movq	%rax,104(%rdi)
1396	movq	%r8,%rax
1397	movq	120(%rsi),%r9
1398	movq	128(%rsi),%r10
1399	movq	136(%rsi),%r11
1400	shlq	$3,%r9
1401	shlq	$32,%r10
1402	movq	%r11,%r8
1403	shlq	$61,%r11
1404	shrq	$3,%r8
1405	addq	%r9,%rax
1406	addq	%r10,%rax
1407	addq	%r11,%rax
1408	adcq	$0,%r8
1409	movq	%rax,112(%rdi)
1410	movq	%r8,%rax
1411	movq	144(%rsi),%r9
1412	movq	152(%rsi),%r10
1413	shlq	$26,%r9
1414	movq	%r10,%r11
1415	shlq	$55,%r10
1416	shrq	$9,%r11
1417	addq	%r9,%rax
1418	addq	%r10,%rax
1419	adcq	$0,%r11
1420	movq	%rax,120(%rdi)
1421	movq	%r11,%rax
1422	.byte	0xf3,0xc3
1423
1424
1425
1426.globl	_rsaz_1024_norm2red_avx2
1427.private_extern _rsaz_1024_norm2red_avx2
1428
1429.p2align	5
1430_rsaz_1024_norm2red_avx2:
1431
1432	subq	$-128,%rdi
1433	movq	(%rsi),%r8
1434	movl	$0x1fffffff,%eax
1435	movq	8(%rsi),%r9
1436	movq	%r8,%r11
1437	shrq	$0,%r11
1438	andq	%rax,%r11
1439	movq	%r11,-128(%rdi)
1440	movq	%r8,%r10
1441	shrq	$29,%r10
1442	andq	%rax,%r10
1443	movq	%r10,-120(%rdi)
1444	shrdq	$58,%r9,%r8
1445	andq	%rax,%r8
1446	movq	%r8,-112(%rdi)
1447	movq	16(%rsi),%r10
1448	movq	%r9,%r8
1449	shrq	$23,%r8
1450	andq	%rax,%r8
1451	movq	%r8,-104(%rdi)
1452	shrdq	$52,%r10,%r9
1453	andq	%rax,%r9
1454	movq	%r9,-96(%rdi)
1455	movq	24(%rsi),%r11
1456	movq	%r10,%r9
1457	shrq	$17,%r9
1458	andq	%rax,%r9
1459	movq	%r9,-88(%rdi)
1460	shrdq	$46,%r11,%r10
1461	andq	%rax,%r10
1462	movq	%r10,-80(%rdi)
1463	movq	32(%rsi),%r8
1464	movq	%r11,%r10
1465	shrq	$11,%r10
1466	andq	%rax,%r10
1467	movq	%r10,-72(%rdi)
1468	shrdq	$40,%r8,%r11
1469	andq	%rax,%r11
1470	movq	%r11,-64(%rdi)
1471	movq	40(%rsi),%r9
1472	movq	%r8,%r11
1473	shrq	$5,%r11
1474	andq	%rax,%r11
1475	movq	%r11,-56(%rdi)
1476	movq	%r8,%r10
1477	shrq	$34,%r10
1478	andq	%rax,%r10
1479	movq	%r10,-48(%rdi)
1480	shrdq	$63,%r9,%r8
1481	andq	%rax,%r8
1482	movq	%r8,-40(%rdi)
1483	movq	48(%rsi),%r10
1484	movq	%r9,%r8
1485	shrq	$28,%r8
1486	andq	%rax,%r8
1487	movq	%r8,-32(%rdi)
1488	shrdq	$57,%r10,%r9
1489	andq	%rax,%r9
1490	movq	%r9,-24(%rdi)
1491	movq	56(%rsi),%r11
1492	movq	%r10,%r9
1493	shrq	$22,%r9
1494	andq	%rax,%r9
1495	movq	%r9,-16(%rdi)
1496	shrdq	$51,%r11,%r10
1497	andq	%rax,%r10
1498	movq	%r10,-8(%rdi)
1499	movq	64(%rsi),%r8
1500	movq	%r11,%r10
1501	shrq	$16,%r10
1502	andq	%rax,%r10
1503	movq	%r10,0(%rdi)
1504	shrdq	$45,%r8,%r11
1505	andq	%rax,%r11
1506	movq	%r11,8(%rdi)
1507	movq	72(%rsi),%r9
1508	movq	%r8,%r11
1509	shrq	$10,%r11
1510	andq	%rax,%r11
1511	movq	%r11,16(%rdi)
1512	shrdq	$39,%r9,%r8
1513	andq	%rax,%r8
1514	movq	%r8,24(%rdi)
1515	movq	80(%rsi),%r10
1516	movq	%r9,%r8
1517	shrq	$4,%r8
1518	andq	%rax,%r8
1519	movq	%r8,32(%rdi)
1520	movq	%r9,%r11
1521	shrq	$33,%r11
1522	andq	%rax,%r11
1523	movq	%r11,40(%rdi)
1524	shrdq	$62,%r10,%r9
1525	andq	%rax,%r9
1526	movq	%r9,48(%rdi)
1527	movq	88(%rsi),%r11
1528	movq	%r10,%r9
1529	shrq	$27,%r9
1530	andq	%rax,%r9
1531	movq	%r9,56(%rdi)
1532	shrdq	$56,%r11,%r10
1533	andq	%rax,%r10
1534	movq	%r10,64(%rdi)
1535	movq	96(%rsi),%r8
1536	movq	%r11,%r10
1537	shrq	$21,%r10
1538	andq	%rax,%r10
1539	movq	%r10,72(%rdi)
1540	shrdq	$50,%r8,%r11
1541	andq	%rax,%r11
1542	movq	%r11,80(%rdi)
1543	movq	104(%rsi),%r9
1544	movq	%r8,%r11
1545	shrq	$15,%r11
1546	andq	%rax,%r11
1547	movq	%r11,88(%rdi)
1548	shrdq	$44,%r9,%r8
1549	andq	%rax,%r8
1550	movq	%r8,96(%rdi)
1551	movq	112(%rsi),%r10
1552	movq	%r9,%r8
1553	shrq	$9,%r8
1554	andq	%rax,%r8
1555	movq	%r8,104(%rdi)
1556	shrdq	$38,%r10,%r9
1557	andq	%rax,%r9
1558	movq	%r9,112(%rdi)
1559	movq	120(%rsi),%r11
1560	movq	%r10,%r9
1561	shrq	$3,%r9
1562	andq	%rax,%r9
1563	movq	%r9,120(%rdi)
1564	movq	%r10,%r8
1565	shrq	$32,%r8
1566	andq	%rax,%r8
1567	movq	%r8,128(%rdi)
1568	shrdq	$61,%r11,%r10
1569	andq	%rax,%r10
1570	movq	%r10,136(%rdi)
1571	xorq	%r8,%r8
1572	movq	%r11,%r10
1573	shrq	$26,%r10
1574	andq	%rax,%r10
1575	movq	%r10,144(%rdi)
1576	shrdq	$55,%r8,%r11
1577	andq	%rax,%r11
1578	movq	%r11,152(%rdi)
1579	movq	%r8,160(%rdi)
1580	movq	%r8,168(%rdi)
1581	movq	%r8,176(%rdi)
1582	movq	%r8,184(%rdi)
1583	.byte	0xf3,0xc3
1584
1585
1586.globl	_rsaz_1024_scatter5_avx2
1587.private_extern _rsaz_1024_scatter5_avx2
1588
1589.p2align	5
1590_rsaz_1024_scatter5_avx2:
1591
1592	vzeroupper
1593	vmovdqu	L$scatter_permd(%rip),%ymm5
1594	shll	$4,%edx
1595	leaq	(%rdi,%rdx,1),%rdi
1596	movl	$9,%eax
1597	jmp	L$oop_scatter_1024
1598
1599.p2align	5
1600L$oop_scatter_1024:
1601	vmovdqu	(%rsi),%ymm0
1602	leaq	32(%rsi),%rsi
1603	vpermd	%ymm0,%ymm5,%ymm0
1604	vmovdqu	%xmm0,(%rdi)
1605	leaq	512(%rdi),%rdi
1606	decl	%eax
1607	jnz	L$oop_scatter_1024
1608
1609	vzeroupper
1610	.byte	0xf3,0xc3
1611
1612
1613
1614.globl	_rsaz_1024_gather5_avx2
1615.private_extern _rsaz_1024_gather5_avx2
1616
1617.p2align	5
1618_rsaz_1024_gather5_avx2:
1619
1620	vzeroupper
1621	movq	%rsp,%r11
1622
1623	leaq	-256(%rsp),%rsp
1624	andq	$-32,%rsp
1625	leaq	L$inc(%rip),%r10
1626	leaq	-128(%rsp),%rax
1627
1628	vmovd	%edx,%xmm4
1629	vmovdqa	(%r10),%ymm0
1630	vmovdqa	32(%r10),%ymm1
1631	vmovdqa	64(%r10),%ymm5
1632	vpbroadcastd	%xmm4,%ymm4
1633
1634	vpaddd	%ymm5,%ymm0,%ymm2
1635	vpcmpeqd	%ymm4,%ymm0,%ymm0
1636	vpaddd	%ymm5,%ymm1,%ymm3
1637	vpcmpeqd	%ymm4,%ymm1,%ymm1
1638	vmovdqa	%ymm0,0+128(%rax)
1639	vpaddd	%ymm5,%ymm2,%ymm0
1640	vpcmpeqd	%ymm4,%ymm2,%ymm2
1641	vmovdqa	%ymm1,32+128(%rax)
1642	vpaddd	%ymm5,%ymm3,%ymm1
1643	vpcmpeqd	%ymm4,%ymm3,%ymm3
1644	vmovdqa	%ymm2,64+128(%rax)
1645	vpaddd	%ymm5,%ymm0,%ymm2
1646	vpcmpeqd	%ymm4,%ymm0,%ymm0
1647	vmovdqa	%ymm3,96+128(%rax)
1648	vpaddd	%ymm5,%ymm1,%ymm3
1649	vpcmpeqd	%ymm4,%ymm1,%ymm1
1650	vmovdqa	%ymm0,128+128(%rax)
1651	vpaddd	%ymm5,%ymm2,%ymm8
1652	vpcmpeqd	%ymm4,%ymm2,%ymm2
1653	vmovdqa	%ymm1,160+128(%rax)
1654	vpaddd	%ymm5,%ymm3,%ymm9
1655	vpcmpeqd	%ymm4,%ymm3,%ymm3
1656	vmovdqa	%ymm2,192+128(%rax)
1657	vpaddd	%ymm5,%ymm8,%ymm10
1658	vpcmpeqd	%ymm4,%ymm8,%ymm8
1659	vmovdqa	%ymm3,224+128(%rax)
1660	vpaddd	%ymm5,%ymm9,%ymm11
1661	vpcmpeqd	%ymm4,%ymm9,%ymm9
1662	vpaddd	%ymm5,%ymm10,%ymm12
1663	vpcmpeqd	%ymm4,%ymm10,%ymm10
1664	vpaddd	%ymm5,%ymm11,%ymm13
1665	vpcmpeqd	%ymm4,%ymm11,%ymm11
1666	vpaddd	%ymm5,%ymm12,%ymm14
1667	vpcmpeqd	%ymm4,%ymm12,%ymm12
1668	vpaddd	%ymm5,%ymm13,%ymm15
1669	vpcmpeqd	%ymm4,%ymm13,%ymm13
1670	vpcmpeqd	%ymm4,%ymm14,%ymm14
1671	vpcmpeqd	%ymm4,%ymm15,%ymm15
1672
1673	vmovdqa	-32(%r10),%ymm7
1674	leaq	128(%rsi),%rsi
1675	movl	$9,%edx
1676
1677L$oop_gather_1024:
1678	vmovdqa	0-128(%rsi),%ymm0
1679	vmovdqa	32-128(%rsi),%ymm1
1680	vmovdqa	64-128(%rsi),%ymm2
1681	vmovdqa	96-128(%rsi),%ymm3
1682	vpand	0+128(%rax),%ymm0,%ymm0
1683	vpand	32+128(%rax),%ymm1,%ymm1
1684	vpand	64+128(%rax),%ymm2,%ymm2
1685	vpor	%ymm0,%ymm1,%ymm4
1686	vpand	96+128(%rax),%ymm3,%ymm3
1687	vmovdqa	128-128(%rsi),%ymm0
1688	vmovdqa	160-128(%rsi),%ymm1
1689	vpor	%ymm2,%ymm3,%ymm5
1690	vmovdqa	192-128(%rsi),%ymm2
1691	vmovdqa	224-128(%rsi),%ymm3
1692	vpand	128+128(%rax),%ymm0,%ymm0
1693	vpand	160+128(%rax),%ymm1,%ymm1
1694	vpand	192+128(%rax),%ymm2,%ymm2
1695	vpor	%ymm0,%ymm4,%ymm4
1696	vpand	224+128(%rax),%ymm3,%ymm3
1697	vpand	256-128(%rsi),%ymm8,%ymm0
1698	vpor	%ymm1,%ymm5,%ymm5
1699	vpand	288-128(%rsi),%ymm9,%ymm1
1700	vpor	%ymm2,%ymm4,%ymm4
1701	vpand	320-128(%rsi),%ymm10,%ymm2
1702	vpor	%ymm3,%ymm5,%ymm5
1703	vpand	352-128(%rsi),%ymm11,%ymm3
1704	vpor	%ymm0,%ymm4,%ymm4
1705	vpand	384-128(%rsi),%ymm12,%ymm0
1706	vpor	%ymm1,%ymm5,%ymm5
1707	vpand	416-128(%rsi),%ymm13,%ymm1
1708	vpor	%ymm2,%ymm4,%ymm4
1709	vpand	448-128(%rsi),%ymm14,%ymm2
1710	vpor	%ymm3,%ymm5,%ymm5
1711	vpand	480-128(%rsi),%ymm15,%ymm3
1712	leaq	512(%rsi),%rsi
1713	vpor	%ymm0,%ymm4,%ymm4
1714	vpor	%ymm1,%ymm5,%ymm5
1715	vpor	%ymm2,%ymm4,%ymm4
1716	vpor	%ymm3,%ymm5,%ymm5
1717
1718	vpor	%ymm5,%ymm4,%ymm4
1719	vextracti128	$1,%ymm4,%xmm5
1720	vpor	%xmm4,%xmm5,%xmm5
1721	vpermd	%ymm5,%ymm7,%ymm5
1722	vmovdqu	%ymm5,(%rdi)
1723	leaq	32(%rdi),%rdi
1724	decl	%edx
1725	jnz	L$oop_gather_1024
1726
1727	vpxor	%ymm0,%ymm0,%ymm0
1728	vmovdqu	%ymm0,(%rdi)
1729	vzeroupper
1730	leaq	(%r11),%rsp
1731
1732	.byte	0xf3,0xc3
1733
1734L$SEH_end_rsaz_1024_gather5:
1735
1736.p2align	6
1737L$and_mask:
1738.quad	0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff
1739L$scatter_permd:
1740.long	0,2,4,6,7,7,7,7
1741L$gather_permd:
1742.long	0,7,1,7,2,7,3,7
1743L$inc:
1744.long	0,0,0,0, 1,1,1,1
1745.long	2,2,2,2, 3,3,3,3
1746.long	4,4,4,4, 4,4,4,4
1747.p2align	6
1748#endif
1749