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