1305153Sjkim/* $FreeBSD: stable/11/secure/lib/libcrypto/amd64/rsaz-avx2.S 326663 2017-12-07 18:04:48Z jkim $ */
2305153Sjkim/* Do not modify. This file is auto-generated from rsaz-avx2.pl. */
3290207Sjkim.text
4290207Sjkim
5290207Sjkim.globl	rsaz_1024_sqr_avx2
6290207Sjkim.type	rsaz_1024_sqr_avx2,@function
7299481Sjkim.align	64
8290207Sjkimrsaz_1024_sqr_avx2:
9299481Sjkim	leaq	(%rsp),%rax
10299481Sjkim	pushq	%rbx
11299481Sjkim	pushq	%rbp
12299481Sjkim	pushq	%r12
13299481Sjkim	pushq	%r13
14299481Sjkim	pushq	%r14
15299481Sjkim	pushq	%r15
16299481Sjkim	vzeroupper
17299481Sjkim	movq	%rax,%rbp
18299481Sjkim	movq	%rdx,%r13
19299481Sjkim	subq	$832,%rsp
20299481Sjkim	movq	%r13,%r15
21299481Sjkim	subq	$-128,%rdi
22299481Sjkim	subq	$-128,%rsi
23299481Sjkim	subq	$-128,%r13
24299481Sjkim
25299481Sjkim	andq	$4095,%r15
26299481Sjkim	addq	$320,%r15
27299481Sjkim	shrq	$12,%r15
28299481Sjkim	vpxor	%ymm9,%ymm9,%ymm9
29299481Sjkim	jz	.Lsqr_1024_no_n_copy
30299481Sjkim
31299481Sjkim
32299481Sjkim
33299481Sjkim
34299481Sjkim
35299481Sjkim	subq	$320,%rsp
36299481Sjkim	vmovdqu	0-128(%r13),%ymm0
37299481Sjkim	andq	$-2048,%rsp
38299481Sjkim	vmovdqu	32-128(%r13),%ymm1
39299481Sjkim	vmovdqu	64-128(%r13),%ymm2
40299481Sjkim	vmovdqu	96-128(%r13),%ymm3
41299481Sjkim	vmovdqu	128-128(%r13),%ymm4
42299481Sjkim	vmovdqu	160-128(%r13),%ymm5
43299481Sjkim	vmovdqu	192-128(%r13),%ymm6
44299481Sjkim	vmovdqu	224-128(%r13),%ymm7
45299481Sjkim	vmovdqu	256-128(%r13),%ymm8
46299481Sjkim	leaq	832+128(%rsp),%r13
47299481Sjkim	vmovdqu	%ymm0,0-128(%r13)
48299481Sjkim	vmovdqu	%ymm1,32-128(%r13)
49299481Sjkim	vmovdqu	%ymm2,64-128(%r13)
50299481Sjkim	vmovdqu	%ymm3,96-128(%r13)
51299481Sjkim	vmovdqu	%ymm4,128-128(%r13)
52299481Sjkim	vmovdqu	%ymm5,160-128(%r13)
53299481Sjkim	vmovdqu	%ymm6,192-128(%r13)
54299481Sjkim	vmovdqu	%ymm7,224-128(%r13)
55299481Sjkim	vmovdqu	%ymm8,256-128(%r13)
56299481Sjkim	vmovdqu	%ymm9,288-128(%r13)
57299481Sjkim
58299481Sjkim.Lsqr_1024_no_n_copy:
59299481Sjkim	andq	$-1024,%rsp
60299481Sjkim
61299481Sjkim	vmovdqu	32-128(%rsi),%ymm1
62299481Sjkim	vmovdqu	64-128(%rsi),%ymm2
63299481Sjkim	vmovdqu	96-128(%rsi),%ymm3
64299481Sjkim	vmovdqu	128-128(%rsi),%ymm4
65299481Sjkim	vmovdqu	160-128(%rsi),%ymm5
66299481Sjkim	vmovdqu	192-128(%rsi),%ymm6
67299481Sjkim	vmovdqu	224-128(%rsi),%ymm7
68299481Sjkim	vmovdqu	256-128(%rsi),%ymm8
69299481Sjkim
70299481Sjkim	leaq	192(%rsp),%rbx
71326663Sjkim	vmovdqu	.Land_mask(%rip),%ymm15
72299481Sjkim	jmp	.LOOP_GRANDE_SQR_1024
73299481Sjkim
74299481Sjkim.align	32
75299481Sjkim.LOOP_GRANDE_SQR_1024:
76299481Sjkim	leaq	576+128(%rsp),%r9
77299481Sjkim	leaq	448(%rsp),%r12
78299481Sjkim
79299481Sjkim
80299481Sjkim
81299481Sjkim
82299481Sjkim	vpaddq	%ymm1,%ymm1,%ymm1
83299481Sjkim	vpbroadcastq	0-128(%rsi),%ymm10
84299481Sjkim	vpaddq	%ymm2,%ymm2,%ymm2
85299481Sjkim	vmovdqa	%ymm1,0-128(%r9)
86299481Sjkim	vpaddq	%ymm3,%ymm3,%ymm3
87299481Sjkim	vmovdqa	%ymm2,32-128(%r9)
88299481Sjkim	vpaddq	%ymm4,%ymm4,%ymm4
89299481Sjkim	vmovdqa	%ymm3,64-128(%r9)
90299481Sjkim	vpaddq	%ymm5,%ymm5,%ymm5
91299481Sjkim	vmovdqa	%ymm4,96-128(%r9)
92299481Sjkim	vpaddq	%ymm6,%ymm6,%ymm6
93299481Sjkim	vmovdqa	%ymm5,128-128(%r9)
94299481Sjkim	vpaddq	%ymm7,%ymm7,%ymm7
95299481Sjkim	vmovdqa	%ymm6,160-128(%r9)
96299481Sjkim	vpaddq	%ymm8,%ymm8,%ymm8
97299481Sjkim	vmovdqa	%ymm7,192-128(%r9)
98299481Sjkim	vpxor	%ymm9,%ymm9,%ymm9
99299481Sjkim	vmovdqa	%ymm8,224-128(%r9)
100299481Sjkim
101299481Sjkim	vpmuludq	0-128(%rsi),%ymm10,%ymm0
102299481Sjkim	vpbroadcastq	32-128(%rsi),%ymm11
103299481Sjkim	vmovdqu	%ymm9,288-192(%rbx)
104299481Sjkim	vpmuludq	%ymm10,%ymm1,%ymm1
105299481Sjkim	vmovdqu	%ymm9,320-448(%r12)
106299481Sjkim	vpmuludq	%ymm10,%ymm2,%ymm2
107299481Sjkim	vmovdqu	%ymm9,352-448(%r12)
108299481Sjkim	vpmuludq	%ymm10,%ymm3,%ymm3
109299481Sjkim	vmovdqu	%ymm9,384-448(%r12)
110299481Sjkim	vpmuludq	%ymm10,%ymm4,%ymm4
111299481Sjkim	vmovdqu	%ymm9,416-448(%r12)
112299481Sjkim	vpmuludq	%ymm10,%ymm5,%ymm5
113299481Sjkim	vmovdqu	%ymm9,448-448(%r12)
114299481Sjkim	vpmuludq	%ymm10,%ymm6,%ymm6
115299481Sjkim	vmovdqu	%ymm9,480-448(%r12)
116299481Sjkim	vpmuludq	%ymm10,%ymm7,%ymm7
117299481Sjkim	vmovdqu	%ymm9,512-448(%r12)
118299481Sjkim	vpmuludq	%ymm10,%ymm8,%ymm8
119299481Sjkim	vpbroadcastq	64-128(%rsi),%ymm10
120299481Sjkim	vmovdqu	%ymm9,544-448(%r12)
121299481Sjkim
122299481Sjkim	movq	%rsi,%r15
123299481Sjkim	movl	$4,%r14d
124299481Sjkim	jmp	.Lsqr_entry_1024
125299481Sjkim.align	32
126299481Sjkim.LOOP_SQR_1024:
127299481Sjkim	vpbroadcastq	32-128(%r15),%ymm11
128299481Sjkim	vpmuludq	0-128(%rsi),%ymm10,%ymm0
129299481Sjkim	vpaddq	0-192(%rbx),%ymm0,%ymm0
130299481Sjkim	vpmuludq	0-128(%r9),%ymm10,%ymm1
131299481Sjkim	vpaddq	32-192(%rbx),%ymm1,%ymm1
132299481Sjkim	vpmuludq	32-128(%r9),%ymm10,%ymm2
133299481Sjkim	vpaddq	64-192(%rbx),%ymm2,%ymm2
134299481Sjkim	vpmuludq	64-128(%r9),%ymm10,%ymm3
135299481Sjkim	vpaddq	96-192(%rbx),%ymm3,%ymm3
136299481Sjkim	vpmuludq	96-128(%r9),%ymm10,%ymm4
137299481Sjkim	vpaddq	128-192(%rbx),%ymm4,%ymm4
138299481Sjkim	vpmuludq	128-128(%r9),%ymm10,%ymm5
139299481Sjkim	vpaddq	160-192(%rbx),%ymm5,%ymm5
140299481Sjkim	vpmuludq	160-128(%r9),%ymm10,%ymm6
141299481Sjkim	vpaddq	192-192(%rbx),%ymm6,%ymm6
142299481Sjkim	vpmuludq	192-128(%r9),%ymm10,%ymm7
143299481Sjkim	vpaddq	224-192(%rbx),%ymm7,%ymm7
144299481Sjkim	vpmuludq	224-128(%r9),%ymm10,%ymm8
145299481Sjkim	vpbroadcastq	64-128(%r15),%ymm10
146299481Sjkim	vpaddq	256-192(%rbx),%ymm8,%ymm8
147299481Sjkim.Lsqr_entry_1024:
148299481Sjkim	vmovdqu	%ymm0,0-192(%rbx)
149299481Sjkim	vmovdqu	%ymm1,32-192(%rbx)
150299481Sjkim
151299481Sjkim	vpmuludq	32-128(%rsi),%ymm11,%ymm12
152299481Sjkim	vpaddq	%ymm12,%ymm2,%ymm2
153299481Sjkim	vpmuludq	32-128(%r9),%ymm11,%ymm14
154299481Sjkim	vpaddq	%ymm14,%ymm3,%ymm3
155299481Sjkim	vpmuludq	64-128(%r9),%ymm11,%ymm13
156299481Sjkim	vpaddq	%ymm13,%ymm4,%ymm4
157299481Sjkim	vpmuludq	96-128(%r9),%ymm11,%ymm12
158299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
159299481Sjkim	vpmuludq	128-128(%r9),%ymm11,%ymm14
160299481Sjkim	vpaddq	%ymm14,%ymm6,%ymm6
161299481Sjkim	vpmuludq	160-128(%r9),%ymm11,%ymm13
162299481Sjkim	vpaddq	%ymm13,%ymm7,%ymm7
163299481Sjkim	vpmuludq	192-128(%r9),%ymm11,%ymm12
164299481Sjkim	vpaddq	%ymm12,%ymm8,%ymm8
165299481Sjkim	vpmuludq	224-128(%r9),%ymm11,%ymm0
166299481Sjkim	vpbroadcastq	96-128(%r15),%ymm11
167299481Sjkim	vpaddq	288-192(%rbx),%ymm0,%ymm0
168299481Sjkim
169299481Sjkim	vmovdqu	%ymm2,64-192(%rbx)
170299481Sjkim	vmovdqu	%ymm3,96-192(%rbx)
171299481Sjkim
172299481Sjkim	vpmuludq	64-128(%rsi),%ymm10,%ymm13
173299481Sjkim	vpaddq	%ymm13,%ymm4,%ymm4
174299481Sjkim	vpmuludq	64-128(%r9),%ymm10,%ymm12
175299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
176299481Sjkim	vpmuludq	96-128(%r9),%ymm10,%ymm14
177299481Sjkim	vpaddq	%ymm14,%ymm6,%ymm6
178299481Sjkim	vpmuludq	128-128(%r9),%ymm10,%ymm13
179299481Sjkim	vpaddq	%ymm13,%ymm7,%ymm7
180299481Sjkim	vpmuludq	160-128(%r9),%ymm10,%ymm12
181299481Sjkim	vpaddq	%ymm12,%ymm8,%ymm8
182299481Sjkim	vpmuludq	192-128(%r9),%ymm10,%ymm14
183299481Sjkim	vpaddq	%ymm14,%ymm0,%ymm0
184299481Sjkim	vpmuludq	224-128(%r9),%ymm10,%ymm1
185299481Sjkim	vpbroadcastq	128-128(%r15),%ymm10
186299481Sjkim	vpaddq	320-448(%r12),%ymm1,%ymm1
187299481Sjkim
188299481Sjkim	vmovdqu	%ymm4,128-192(%rbx)
189299481Sjkim	vmovdqu	%ymm5,160-192(%rbx)
190299481Sjkim
191299481Sjkim	vpmuludq	96-128(%rsi),%ymm11,%ymm12
192299481Sjkim	vpaddq	%ymm12,%ymm6,%ymm6
193299481Sjkim	vpmuludq	96-128(%r9),%ymm11,%ymm14
194299481Sjkim	vpaddq	%ymm14,%ymm7,%ymm7
195299481Sjkim	vpmuludq	128-128(%r9),%ymm11,%ymm13
196299481Sjkim	vpaddq	%ymm13,%ymm8,%ymm8
197299481Sjkim	vpmuludq	160-128(%r9),%ymm11,%ymm12
198299481Sjkim	vpaddq	%ymm12,%ymm0,%ymm0
199299481Sjkim	vpmuludq	192-128(%r9),%ymm11,%ymm14
200299481Sjkim	vpaddq	%ymm14,%ymm1,%ymm1
201299481Sjkim	vpmuludq	224-128(%r9),%ymm11,%ymm2
202299481Sjkim	vpbroadcastq	160-128(%r15),%ymm11
203299481Sjkim	vpaddq	352-448(%r12),%ymm2,%ymm2
204299481Sjkim
205299481Sjkim	vmovdqu	%ymm6,192-192(%rbx)
206299481Sjkim	vmovdqu	%ymm7,224-192(%rbx)
207299481Sjkim
208299481Sjkim	vpmuludq	128-128(%rsi),%ymm10,%ymm12
209299481Sjkim	vpaddq	%ymm12,%ymm8,%ymm8
210299481Sjkim	vpmuludq	128-128(%r9),%ymm10,%ymm14
211299481Sjkim	vpaddq	%ymm14,%ymm0,%ymm0
212299481Sjkim	vpmuludq	160-128(%r9),%ymm10,%ymm13
213299481Sjkim	vpaddq	%ymm13,%ymm1,%ymm1
214299481Sjkim	vpmuludq	192-128(%r9),%ymm10,%ymm12
215299481Sjkim	vpaddq	%ymm12,%ymm2,%ymm2
216299481Sjkim	vpmuludq	224-128(%r9),%ymm10,%ymm3
217299481Sjkim	vpbroadcastq	192-128(%r15),%ymm10
218299481Sjkim	vpaddq	384-448(%r12),%ymm3,%ymm3
219299481Sjkim
220299481Sjkim	vmovdqu	%ymm8,256-192(%rbx)
221299481Sjkim	vmovdqu	%ymm0,288-192(%rbx)
222299481Sjkim	leaq	8(%rbx),%rbx
223299481Sjkim
224299481Sjkim	vpmuludq	160-128(%rsi),%ymm11,%ymm13
225299481Sjkim	vpaddq	%ymm13,%ymm1,%ymm1
226299481Sjkim	vpmuludq	160-128(%r9),%ymm11,%ymm12
227299481Sjkim	vpaddq	%ymm12,%ymm2,%ymm2
228299481Sjkim	vpmuludq	192-128(%r9),%ymm11,%ymm14
229299481Sjkim	vpaddq	%ymm14,%ymm3,%ymm3
230299481Sjkim	vpmuludq	224-128(%r9),%ymm11,%ymm4
231299481Sjkim	vpbroadcastq	224-128(%r15),%ymm11
232299481Sjkim	vpaddq	416-448(%r12),%ymm4,%ymm4
233299481Sjkim
234299481Sjkim	vmovdqu	%ymm1,320-448(%r12)
235299481Sjkim	vmovdqu	%ymm2,352-448(%r12)
236299481Sjkim
237299481Sjkim	vpmuludq	192-128(%rsi),%ymm10,%ymm12
238299481Sjkim	vpaddq	%ymm12,%ymm3,%ymm3
239299481Sjkim	vpmuludq	192-128(%r9),%ymm10,%ymm14
240299481Sjkim	vpbroadcastq	256-128(%r15),%ymm0
241299481Sjkim	vpaddq	%ymm14,%ymm4,%ymm4
242299481Sjkim	vpmuludq	224-128(%r9),%ymm10,%ymm5
243299481Sjkim	vpbroadcastq	0+8-128(%r15),%ymm10
244299481Sjkim	vpaddq	448-448(%r12),%ymm5,%ymm5
245299481Sjkim
246299481Sjkim	vmovdqu	%ymm3,384-448(%r12)
247299481Sjkim	vmovdqu	%ymm4,416-448(%r12)
248299481Sjkim	leaq	8(%r15),%r15
249299481Sjkim
250299481Sjkim	vpmuludq	224-128(%rsi),%ymm11,%ymm12
251299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
252299481Sjkim	vpmuludq	224-128(%r9),%ymm11,%ymm6
253299481Sjkim	vpaddq	480-448(%r12),%ymm6,%ymm6
254299481Sjkim
255299481Sjkim	vpmuludq	256-128(%rsi),%ymm0,%ymm7
256299481Sjkim	vmovdqu	%ymm5,448-448(%r12)
257299481Sjkim	vpaddq	512-448(%r12),%ymm7,%ymm7
258299481Sjkim	vmovdqu	%ymm6,480-448(%r12)
259299481Sjkim	vmovdqu	%ymm7,512-448(%r12)
260299481Sjkim	leaq	8(%r12),%r12
261299481Sjkim
262299481Sjkim	decl	%r14d
263299481Sjkim	jnz	.LOOP_SQR_1024
264299481Sjkim
265299481Sjkim	vmovdqu	256(%rsp),%ymm8
266299481Sjkim	vmovdqu	288(%rsp),%ymm1
267299481Sjkim	vmovdqu	320(%rsp),%ymm2
268299481Sjkim	leaq	192(%rsp),%rbx
269299481Sjkim
270299481Sjkim	vpsrlq	$29,%ymm8,%ymm14
271299481Sjkim	vpand	%ymm15,%ymm8,%ymm8
272299481Sjkim	vpsrlq	$29,%ymm1,%ymm11
273299481Sjkim	vpand	%ymm15,%ymm1,%ymm1
274299481Sjkim
275299481Sjkim	vpermq	$0x93,%ymm14,%ymm14
276299481Sjkim	vpxor	%ymm9,%ymm9,%ymm9
277299481Sjkim	vpermq	$0x93,%ymm11,%ymm11
278299481Sjkim
279299481Sjkim	vpblendd	$3,%ymm9,%ymm14,%ymm10
280299481Sjkim	vpblendd	$3,%ymm14,%ymm11,%ymm14
281299481Sjkim	vpaddq	%ymm10,%ymm8,%ymm8
282299481Sjkim	vpblendd	$3,%ymm11,%ymm9,%ymm11
283299481Sjkim	vpaddq	%ymm14,%ymm1,%ymm1
284299481Sjkim	vpaddq	%ymm11,%ymm2,%ymm2
285299481Sjkim	vmovdqu	%ymm1,288-192(%rbx)
286299481Sjkim	vmovdqu	%ymm2,320-192(%rbx)
287299481Sjkim
288299481Sjkim	movq	(%rsp),%rax
289299481Sjkim	movq	8(%rsp),%r10
290299481Sjkim	movq	16(%rsp),%r11
291299481Sjkim	movq	24(%rsp),%r12
292299481Sjkim	vmovdqu	32(%rsp),%ymm1
293299481Sjkim	vmovdqu	64-192(%rbx),%ymm2
294299481Sjkim	vmovdqu	96-192(%rbx),%ymm3
295299481Sjkim	vmovdqu	128-192(%rbx),%ymm4
296299481Sjkim	vmovdqu	160-192(%rbx),%ymm5
297299481Sjkim	vmovdqu	192-192(%rbx),%ymm6
298299481Sjkim	vmovdqu	224-192(%rbx),%ymm7
299299481Sjkim
300299481Sjkim	movq	%rax,%r9
301299481Sjkim	imull	%ecx,%eax
302299481Sjkim	andl	$0x1fffffff,%eax
303299481Sjkim	vmovd	%eax,%xmm12
304299481Sjkim
305299481Sjkim	movq	%rax,%rdx
306299481Sjkim	imulq	-128(%r13),%rax
307299481Sjkim	vpbroadcastq	%xmm12,%ymm12
308299481Sjkim	addq	%rax,%r9
309299481Sjkim	movq	%rdx,%rax
310299481Sjkim	imulq	8-128(%r13),%rax
311299481Sjkim	shrq	$29,%r9
312299481Sjkim	addq	%rax,%r10
313299481Sjkim	movq	%rdx,%rax
314299481Sjkim	imulq	16-128(%r13),%rax
315299481Sjkim	addq	%r9,%r10
316299481Sjkim	addq	%rax,%r11
317299481Sjkim	imulq	24-128(%r13),%rdx
318299481Sjkim	addq	%rdx,%r12
319299481Sjkim
320299481Sjkim	movq	%r10,%rax
321299481Sjkim	imull	%ecx,%eax
322299481Sjkim	andl	$0x1fffffff,%eax
323299481Sjkim
324299481Sjkim	movl	$9,%r14d
325299481Sjkim	jmp	.LOOP_REDUCE_1024
326299481Sjkim
327299481Sjkim.align	32
328299481Sjkim.LOOP_REDUCE_1024:
329299481Sjkim	vmovd	%eax,%xmm13
330299481Sjkim	vpbroadcastq	%xmm13,%ymm13
331299481Sjkim
332299481Sjkim	vpmuludq	32-128(%r13),%ymm12,%ymm10
333299481Sjkim	movq	%rax,%rdx
334299481Sjkim	imulq	-128(%r13),%rax
335299481Sjkim	vpaddq	%ymm10,%ymm1,%ymm1
336299481Sjkim	addq	%rax,%r10
337299481Sjkim	vpmuludq	64-128(%r13),%ymm12,%ymm14
338299481Sjkim	movq	%rdx,%rax
339299481Sjkim	imulq	8-128(%r13),%rax
340299481Sjkim	vpaddq	%ymm14,%ymm2,%ymm2
341299481Sjkim	vpmuludq	96-128(%r13),%ymm12,%ymm11
342299481Sjkim.byte	0x67
343299481Sjkim	addq	%rax,%r11
344299481Sjkim.byte	0x67
345299481Sjkim	movq	%rdx,%rax
346299481Sjkim	imulq	16-128(%r13),%rax
347299481Sjkim	shrq	$29,%r10
348299481Sjkim	vpaddq	%ymm11,%ymm3,%ymm3
349299481Sjkim	vpmuludq	128-128(%r13),%ymm12,%ymm10
350299481Sjkim	addq	%rax,%r12
351299481Sjkim	addq	%r10,%r11
352299481Sjkim	vpaddq	%ymm10,%ymm4,%ymm4
353299481Sjkim	vpmuludq	160-128(%r13),%ymm12,%ymm14
354299481Sjkim	movq	%r11,%rax
355299481Sjkim	imull	%ecx,%eax
356299481Sjkim	vpaddq	%ymm14,%ymm5,%ymm5
357299481Sjkim	vpmuludq	192-128(%r13),%ymm12,%ymm11
358299481Sjkim	andl	$0x1fffffff,%eax
359299481Sjkim	vpaddq	%ymm11,%ymm6,%ymm6
360299481Sjkim	vpmuludq	224-128(%r13),%ymm12,%ymm10
361299481Sjkim	vpaddq	%ymm10,%ymm7,%ymm7
362299481Sjkim	vpmuludq	256-128(%r13),%ymm12,%ymm14
363299481Sjkim	vmovd	%eax,%xmm12
364299481Sjkim
365299481Sjkim	vpaddq	%ymm14,%ymm8,%ymm8
366299481Sjkim
367299481Sjkim	vpbroadcastq	%xmm12,%ymm12
368299481Sjkim
369299481Sjkim	vpmuludq	32-8-128(%r13),%ymm13,%ymm11
370299481Sjkim	vmovdqu	96-8-128(%r13),%ymm14
371299481Sjkim	movq	%rax,%rdx
372299481Sjkim	imulq	-128(%r13),%rax
373299481Sjkim	vpaddq	%ymm11,%ymm1,%ymm1
374299481Sjkim	vpmuludq	64-8-128(%r13),%ymm13,%ymm10
375299481Sjkim	vmovdqu	128-8-128(%r13),%ymm11
376299481Sjkim	addq	%rax,%r11
377299481Sjkim	movq	%rdx,%rax
378299481Sjkim	imulq	8-128(%r13),%rax
379299481Sjkim	vpaddq	%ymm10,%ymm2,%ymm2
380299481Sjkim	addq	%r12,%rax
381299481Sjkim	shrq	$29,%r11
382299481Sjkim	vpmuludq	%ymm13,%ymm14,%ymm14
383299481Sjkim	vmovdqu	160-8-128(%r13),%ymm10
384299481Sjkim	addq	%r11,%rax
385299481Sjkim	vpaddq	%ymm14,%ymm3,%ymm3
386299481Sjkim	vpmuludq	%ymm13,%ymm11,%ymm11
387299481Sjkim	vmovdqu	192-8-128(%r13),%ymm14
388299481Sjkim.byte	0x67
389299481Sjkim	movq	%rax,%r12
390299481Sjkim	imull	%ecx,%eax
391299481Sjkim	vpaddq	%ymm11,%ymm4,%ymm4
392299481Sjkim	vpmuludq	%ymm13,%ymm10,%ymm10
393299481Sjkim.byte	0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00
394299481Sjkim	andl	$0x1fffffff,%eax
395299481Sjkim	vpaddq	%ymm10,%ymm5,%ymm5
396299481Sjkim	vpmuludq	%ymm13,%ymm14,%ymm14
397299481Sjkim	vmovdqu	256-8-128(%r13),%ymm10
398299481Sjkim	vpaddq	%ymm14,%ymm6,%ymm6
399299481Sjkim	vpmuludq	%ymm13,%ymm11,%ymm11
400299481Sjkim	vmovdqu	288-8-128(%r13),%ymm9
401299481Sjkim	vmovd	%eax,%xmm0
402299481Sjkim	imulq	-128(%r13),%rax
403299481Sjkim	vpaddq	%ymm11,%ymm7,%ymm7
404299481Sjkim	vpmuludq	%ymm13,%ymm10,%ymm10
405299481Sjkim	vmovdqu	32-16-128(%r13),%ymm14
406299481Sjkim	vpbroadcastq	%xmm0,%ymm0
407299481Sjkim	vpaddq	%ymm10,%ymm8,%ymm8
408299481Sjkim	vpmuludq	%ymm13,%ymm9,%ymm9
409299481Sjkim	vmovdqu	64-16-128(%r13),%ymm11
410299481Sjkim	addq	%rax,%r12
411299481Sjkim
412299481Sjkim	vmovdqu	32-24-128(%r13),%ymm13
413299481Sjkim	vpmuludq	%ymm12,%ymm14,%ymm14
414299481Sjkim	vmovdqu	96-16-128(%r13),%ymm10
415299481Sjkim	vpaddq	%ymm14,%ymm1,%ymm1
416299481Sjkim	vpmuludq	%ymm0,%ymm13,%ymm13
417299481Sjkim	vpmuludq	%ymm12,%ymm11,%ymm11
418299481Sjkim.byte	0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff
419299481Sjkim	vpaddq	%ymm1,%ymm13,%ymm13
420299481Sjkim	vpaddq	%ymm11,%ymm2,%ymm2
421299481Sjkim	vpmuludq	%ymm12,%ymm10,%ymm10
422299481Sjkim	vmovdqu	160-16-128(%r13),%ymm11
423299481Sjkim.byte	0x67
424299481Sjkim	vmovq	%xmm13,%rax
425299481Sjkim	vmovdqu	%ymm13,(%rsp)
426299481Sjkim	vpaddq	%ymm10,%ymm3,%ymm3
427299481Sjkim	vpmuludq	%ymm12,%ymm14,%ymm14
428299481Sjkim	vmovdqu	192-16-128(%r13),%ymm10
429299481Sjkim	vpaddq	%ymm14,%ymm4,%ymm4
430299481Sjkim	vpmuludq	%ymm12,%ymm11,%ymm11
431299481Sjkim	vmovdqu	224-16-128(%r13),%ymm14
432299481Sjkim	vpaddq	%ymm11,%ymm5,%ymm5
433299481Sjkim	vpmuludq	%ymm12,%ymm10,%ymm10
434299481Sjkim	vmovdqu	256-16-128(%r13),%ymm11
435299481Sjkim	vpaddq	%ymm10,%ymm6,%ymm6
436299481Sjkim	vpmuludq	%ymm12,%ymm14,%ymm14
437299481Sjkim	shrq	$29,%r12
438299481Sjkim	vmovdqu	288-16-128(%r13),%ymm10
439299481Sjkim	addq	%r12,%rax
440299481Sjkim	vpaddq	%ymm14,%ymm7,%ymm7
441299481Sjkim	vpmuludq	%ymm12,%ymm11,%ymm11
442299481Sjkim
443299481Sjkim	movq	%rax,%r9
444299481Sjkim	imull	%ecx,%eax
445299481Sjkim	vpaddq	%ymm11,%ymm8,%ymm8
446299481Sjkim	vpmuludq	%ymm12,%ymm10,%ymm10
447299481Sjkim	andl	$0x1fffffff,%eax
448299481Sjkim	vmovd	%eax,%xmm12
449299481Sjkim	vmovdqu	96-24-128(%r13),%ymm11
450299481Sjkim.byte	0x67
451299481Sjkim	vpaddq	%ymm10,%ymm9,%ymm9
452299481Sjkim	vpbroadcastq	%xmm12,%ymm12
453299481Sjkim
454299481Sjkim	vpmuludq	64-24-128(%r13),%ymm0,%ymm14
455299481Sjkim	vmovdqu	128-24-128(%r13),%ymm10
456299481Sjkim	movq	%rax,%rdx
457299481Sjkim	imulq	-128(%r13),%rax
458299481Sjkim	movq	8(%rsp),%r10
459299481Sjkim	vpaddq	%ymm14,%ymm2,%ymm1
460299481Sjkim	vpmuludq	%ymm0,%ymm11,%ymm11
461299481Sjkim	vmovdqu	160-24-128(%r13),%ymm14
462299481Sjkim	addq	%rax,%r9
463299481Sjkim	movq	%rdx,%rax
464299481Sjkim	imulq	8-128(%r13),%rax
465299481Sjkim.byte	0x67
466299481Sjkim	shrq	$29,%r9
467299481Sjkim	movq	16(%rsp),%r11
468299481Sjkim	vpaddq	%ymm11,%ymm3,%ymm2
469299481Sjkim	vpmuludq	%ymm0,%ymm10,%ymm10
470299481Sjkim	vmovdqu	192-24-128(%r13),%ymm11
471299481Sjkim	addq	%rax,%r10
472299481Sjkim	movq	%rdx,%rax
473299481Sjkim	imulq	16-128(%r13),%rax
474299481Sjkim	vpaddq	%ymm10,%ymm4,%ymm3
475299481Sjkim	vpmuludq	%ymm0,%ymm14,%ymm14
476299481Sjkim	vmovdqu	224-24-128(%r13),%ymm10
477299481Sjkim	imulq	24-128(%r13),%rdx
478299481Sjkim	addq	%rax,%r11
479299481Sjkim	leaq	(%r9,%r10,1),%rax
480299481Sjkim	vpaddq	%ymm14,%ymm5,%ymm4
481299481Sjkim	vpmuludq	%ymm0,%ymm11,%ymm11
482299481Sjkim	vmovdqu	256-24-128(%r13),%ymm14
483299481Sjkim	movq	%rax,%r10
484299481Sjkim	imull	%ecx,%eax
485299481Sjkim	vpmuludq	%ymm0,%ymm10,%ymm10
486299481Sjkim	vpaddq	%ymm11,%ymm6,%ymm5
487299481Sjkim	vmovdqu	288-24-128(%r13),%ymm11
488299481Sjkim	andl	$0x1fffffff,%eax
489299481Sjkim	vpaddq	%ymm10,%ymm7,%ymm6
490299481Sjkim	vpmuludq	%ymm0,%ymm14,%ymm14
491299481Sjkim	addq	24(%rsp),%rdx
492299481Sjkim	vpaddq	%ymm14,%ymm8,%ymm7
493299481Sjkim	vpmuludq	%ymm0,%ymm11,%ymm11
494299481Sjkim	vpaddq	%ymm11,%ymm9,%ymm8
495299481Sjkim	vmovq	%r12,%xmm9
496299481Sjkim	movq	%rdx,%r12
497299481Sjkim
498299481Sjkim	decl	%r14d
499299481Sjkim	jnz	.LOOP_REDUCE_1024
500299481Sjkim	leaq	448(%rsp),%r12
501299481Sjkim	vpaddq	%ymm9,%ymm13,%ymm0
502299481Sjkim	vpxor	%ymm9,%ymm9,%ymm9
503299481Sjkim
504299481Sjkim	vpaddq	288-192(%rbx),%ymm0,%ymm0
505299481Sjkim	vpaddq	320-448(%r12),%ymm1,%ymm1
506299481Sjkim	vpaddq	352-448(%r12),%ymm2,%ymm2
507299481Sjkim	vpaddq	384-448(%r12),%ymm3,%ymm3
508299481Sjkim	vpaddq	416-448(%r12),%ymm4,%ymm4
509299481Sjkim	vpaddq	448-448(%r12),%ymm5,%ymm5
510299481Sjkim	vpaddq	480-448(%r12),%ymm6,%ymm6
511299481Sjkim	vpaddq	512-448(%r12),%ymm7,%ymm7
512299481Sjkim	vpaddq	544-448(%r12),%ymm8,%ymm8
513299481Sjkim
514299481Sjkim	vpsrlq	$29,%ymm0,%ymm14
515299481Sjkim	vpand	%ymm15,%ymm0,%ymm0
516299481Sjkim	vpsrlq	$29,%ymm1,%ymm11
517299481Sjkim	vpand	%ymm15,%ymm1,%ymm1
518299481Sjkim	vpsrlq	$29,%ymm2,%ymm12
519299481Sjkim	vpermq	$0x93,%ymm14,%ymm14
520299481Sjkim	vpand	%ymm15,%ymm2,%ymm2
521299481Sjkim	vpsrlq	$29,%ymm3,%ymm13
522299481Sjkim	vpermq	$0x93,%ymm11,%ymm11
523299481Sjkim	vpand	%ymm15,%ymm3,%ymm3
524299481Sjkim	vpermq	$0x93,%ymm12,%ymm12
525299481Sjkim
526299481Sjkim	vpblendd	$3,%ymm9,%ymm14,%ymm10
527299481Sjkim	vpermq	$0x93,%ymm13,%ymm13
528299481Sjkim	vpblendd	$3,%ymm14,%ymm11,%ymm14
529299481Sjkim	vpaddq	%ymm10,%ymm0,%ymm0
530299481Sjkim	vpblendd	$3,%ymm11,%ymm12,%ymm11
531299481Sjkim	vpaddq	%ymm14,%ymm1,%ymm1
532299481Sjkim	vpblendd	$3,%ymm12,%ymm13,%ymm12
533299481Sjkim	vpaddq	%ymm11,%ymm2,%ymm2
534299481Sjkim	vpblendd	$3,%ymm13,%ymm9,%ymm13
535299481Sjkim	vpaddq	%ymm12,%ymm3,%ymm3
536299481Sjkim	vpaddq	%ymm13,%ymm4,%ymm4
537299481Sjkim
538299481Sjkim	vpsrlq	$29,%ymm0,%ymm14
539299481Sjkim	vpand	%ymm15,%ymm0,%ymm0
540299481Sjkim	vpsrlq	$29,%ymm1,%ymm11
541299481Sjkim	vpand	%ymm15,%ymm1,%ymm1
542299481Sjkim	vpsrlq	$29,%ymm2,%ymm12
543299481Sjkim	vpermq	$0x93,%ymm14,%ymm14
544299481Sjkim	vpand	%ymm15,%ymm2,%ymm2
545299481Sjkim	vpsrlq	$29,%ymm3,%ymm13
546299481Sjkim	vpermq	$0x93,%ymm11,%ymm11
547299481Sjkim	vpand	%ymm15,%ymm3,%ymm3
548299481Sjkim	vpermq	$0x93,%ymm12,%ymm12
549299481Sjkim
550299481Sjkim	vpblendd	$3,%ymm9,%ymm14,%ymm10
551299481Sjkim	vpermq	$0x93,%ymm13,%ymm13
552299481Sjkim	vpblendd	$3,%ymm14,%ymm11,%ymm14
553299481Sjkim	vpaddq	%ymm10,%ymm0,%ymm0
554299481Sjkim	vpblendd	$3,%ymm11,%ymm12,%ymm11
555299481Sjkim	vpaddq	%ymm14,%ymm1,%ymm1
556299481Sjkim	vmovdqu	%ymm0,0-128(%rdi)
557299481Sjkim	vpblendd	$3,%ymm12,%ymm13,%ymm12
558299481Sjkim	vpaddq	%ymm11,%ymm2,%ymm2
559299481Sjkim	vmovdqu	%ymm1,32-128(%rdi)
560299481Sjkim	vpblendd	$3,%ymm13,%ymm9,%ymm13
561299481Sjkim	vpaddq	%ymm12,%ymm3,%ymm3
562299481Sjkim	vmovdqu	%ymm2,64-128(%rdi)
563299481Sjkim	vpaddq	%ymm13,%ymm4,%ymm4
564299481Sjkim	vmovdqu	%ymm3,96-128(%rdi)
565299481Sjkim	vpsrlq	$29,%ymm4,%ymm14
566299481Sjkim	vpand	%ymm15,%ymm4,%ymm4
567299481Sjkim	vpsrlq	$29,%ymm5,%ymm11
568299481Sjkim	vpand	%ymm15,%ymm5,%ymm5
569299481Sjkim	vpsrlq	$29,%ymm6,%ymm12
570299481Sjkim	vpermq	$0x93,%ymm14,%ymm14
571299481Sjkim	vpand	%ymm15,%ymm6,%ymm6
572299481Sjkim	vpsrlq	$29,%ymm7,%ymm13
573299481Sjkim	vpermq	$0x93,%ymm11,%ymm11
574299481Sjkim	vpand	%ymm15,%ymm7,%ymm7
575299481Sjkim	vpsrlq	$29,%ymm8,%ymm0
576299481Sjkim	vpermq	$0x93,%ymm12,%ymm12
577299481Sjkim	vpand	%ymm15,%ymm8,%ymm8
578299481Sjkim	vpermq	$0x93,%ymm13,%ymm13
579299481Sjkim
580299481Sjkim	vpblendd	$3,%ymm9,%ymm14,%ymm10
581299481Sjkim	vpermq	$0x93,%ymm0,%ymm0
582299481Sjkim	vpblendd	$3,%ymm14,%ymm11,%ymm14
583299481Sjkim	vpaddq	%ymm10,%ymm4,%ymm4
584299481Sjkim	vpblendd	$3,%ymm11,%ymm12,%ymm11
585299481Sjkim	vpaddq	%ymm14,%ymm5,%ymm5
586299481Sjkim	vpblendd	$3,%ymm12,%ymm13,%ymm12
587299481Sjkim	vpaddq	%ymm11,%ymm6,%ymm6
588299481Sjkim	vpblendd	$3,%ymm13,%ymm0,%ymm13
589299481Sjkim	vpaddq	%ymm12,%ymm7,%ymm7
590299481Sjkim	vpaddq	%ymm13,%ymm8,%ymm8
591299481Sjkim
592299481Sjkim	vpsrlq	$29,%ymm4,%ymm14
593299481Sjkim	vpand	%ymm15,%ymm4,%ymm4
594299481Sjkim	vpsrlq	$29,%ymm5,%ymm11
595299481Sjkim	vpand	%ymm15,%ymm5,%ymm5
596299481Sjkim	vpsrlq	$29,%ymm6,%ymm12
597299481Sjkim	vpermq	$0x93,%ymm14,%ymm14
598299481Sjkim	vpand	%ymm15,%ymm6,%ymm6
599299481Sjkim	vpsrlq	$29,%ymm7,%ymm13
600299481Sjkim	vpermq	$0x93,%ymm11,%ymm11
601299481Sjkim	vpand	%ymm15,%ymm7,%ymm7
602299481Sjkim	vpsrlq	$29,%ymm8,%ymm0
603299481Sjkim	vpermq	$0x93,%ymm12,%ymm12
604299481Sjkim	vpand	%ymm15,%ymm8,%ymm8
605299481Sjkim	vpermq	$0x93,%ymm13,%ymm13
606299481Sjkim
607299481Sjkim	vpblendd	$3,%ymm9,%ymm14,%ymm10
608299481Sjkim	vpermq	$0x93,%ymm0,%ymm0
609299481Sjkim	vpblendd	$3,%ymm14,%ymm11,%ymm14
610299481Sjkim	vpaddq	%ymm10,%ymm4,%ymm4
611299481Sjkim	vpblendd	$3,%ymm11,%ymm12,%ymm11
612299481Sjkim	vpaddq	%ymm14,%ymm5,%ymm5
613299481Sjkim	vmovdqu	%ymm4,128-128(%rdi)
614299481Sjkim	vpblendd	$3,%ymm12,%ymm13,%ymm12
615299481Sjkim	vpaddq	%ymm11,%ymm6,%ymm6
616299481Sjkim	vmovdqu	%ymm5,160-128(%rdi)
617299481Sjkim	vpblendd	$3,%ymm13,%ymm0,%ymm13
618299481Sjkim	vpaddq	%ymm12,%ymm7,%ymm7
619299481Sjkim	vmovdqu	%ymm6,192-128(%rdi)
620299481Sjkim	vpaddq	%ymm13,%ymm8,%ymm8
621299481Sjkim	vmovdqu	%ymm7,224-128(%rdi)
622299481Sjkim	vmovdqu	%ymm8,256-128(%rdi)
623299481Sjkim
624299481Sjkim	movq	%rdi,%rsi
625299481Sjkim	decl	%r8d
626299481Sjkim	jne	.LOOP_GRANDE_SQR_1024
627299481Sjkim
628299481Sjkim	vzeroall
629299481Sjkim	movq	%rbp,%rax
630299481Sjkim	movq	-48(%rax),%r15
631299481Sjkim	movq	-40(%rax),%r14
632299481Sjkim	movq	-32(%rax),%r13
633299481Sjkim	movq	-24(%rax),%r12
634299481Sjkim	movq	-16(%rax),%rbp
635299481Sjkim	movq	-8(%rax),%rbx
636299481Sjkim	leaq	(%rax),%rsp
637299481Sjkim.Lsqr_1024_epilogue:
638299481Sjkim	.byte	0xf3,0xc3
639299481Sjkim.size	rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2
640299481Sjkim.globl	rsaz_1024_mul_avx2
641299481Sjkim.type	rsaz_1024_mul_avx2,@function
642299481Sjkim.align	64
643290207Sjkimrsaz_1024_mul_avx2:
644299481Sjkim	leaq	(%rsp),%rax
645299481Sjkim	pushq	%rbx
646299481Sjkim	pushq	%rbp
647299481Sjkim	pushq	%r12
648299481Sjkim	pushq	%r13
649299481Sjkim	pushq	%r14
650299481Sjkim	pushq	%r15
651299481Sjkim	movq	%rax,%rbp
652299481Sjkim	vzeroall
653299481Sjkim	movq	%rdx,%r13
654299481Sjkim	subq	$64,%rsp
655299481Sjkim
656299481Sjkim
657299481Sjkim
658299481Sjkim
659299481Sjkim
660299481Sjkim
661299481Sjkim.byte	0x67,0x67
662299481Sjkim	movq	%rsi,%r15
663299481Sjkim	andq	$4095,%r15
664299481Sjkim	addq	$320,%r15
665299481Sjkim	shrq	$12,%r15
666299481Sjkim	movq	%rsi,%r15
667299481Sjkim	cmovnzq	%r13,%rsi
668299481Sjkim	cmovnzq	%r15,%r13
669299481Sjkim
670299481Sjkim	movq	%rcx,%r15
671299481Sjkim	subq	$-128,%rsi
672299481Sjkim	subq	$-128,%rcx
673299481Sjkim	subq	$-128,%rdi
674299481Sjkim
675299481Sjkim	andq	$4095,%r15
676299481Sjkim	addq	$320,%r15
677299481Sjkim.byte	0x67,0x67
678299481Sjkim	shrq	$12,%r15
679299481Sjkim	jz	.Lmul_1024_no_n_copy
680299481Sjkim
681299481Sjkim
682299481Sjkim
683299481Sjkim
684299481Sjkim
685299481Sjkim	subq	$320,%rsp
686299481Sjkim	vmovdqu	0-128(%rcx),%ymm0
687299481Sjkim	andq	$-512,%rsp
688299481Sjkim	vmovdqu	32-128(%rcx),%ymm1
689299481Sjkim	vmovdqu	64-128(%rcx),%ymm2
690299481Sjkim	vmovdqu	96-128(%rcx),%ymm3
691299481Sjkim	vmovdqu	128-128(%rcx),%ymm4
692299481Sjkim	vmovdqu	160-128(%rcx),%ymm5
693299481Sjkim	vmovdqu	192-128(%rcx),%ymm6
694299481Sjkim	vmovdqu	224-128(%rcx),%ymm7
695299481Sjkim	vmovdqu	256-128(%rcx),%ymm8
696299481Sjkim	leaq	64+128(%rsp),%rcx
697299481Sjkim	vmovdqu	%ymm0,0-128(%rcx)
698299481Sjkim	vpxor	%ymm0,%ymm0,%ymm0
699299481Sjkim	vmovdqu	%ymm1,32-128(%rcx)
700299481Sjkim	vpxor	%ymm1,%ymm1,%ymm1
701299481Sjkim	vmovdqu	%ymm2,64-128(%rcx)
702299481Sjkim	vpxor	%ymm2,%ymm2,%ymm2
703299481Sjkim	vmovdqu	%ymm3,96-128(%rcx)
704299481Sjkim	vpxor	%ymm3,%ymm3,%ymm3
705299481Sjkim	vmovdqu	%ymm4,128-128(%rcx)
706299481Sjkim	vpxor	%ymm4,%ymm4,%ymm4
707299481Sjkim	vmovdqu	%ymm5,160-128(%rcx)
708299481Sjkim	vpxor	%ymm5,%ymm5,%ymm5
709299481Sjkim	vmovdqu	%ymm6,192-128(%rcx)
710299481Sjkim	vpxor	%ymm6,%ymm6,%ymm6
711299481Sjkim	vmovdqu	%ymm7,224-128(%rcx)
712299481Sjkim	vpxor	%ymm7,%ymm7,%ymm7
713299481Sjkim	vmovdqu	%ymm8,256-128(%rcx)
714299481Sjkim	vmovdqa	%ymm0,%ymm8
715299481Sjkim	vmovdqu	%ymm9,288-128(%rcx)
716299481Sjkim.Lmul_1024_no_n_copy:
717299481Sjkim	andq	$-64,%rsp
718299481Sjkim
719299481Sjkim	movq	(%r13),%rbx
720299481Sjkim	vpbroadcastq	(%r13),%ymm10
721299481Sjkim	vmovdqu	%ymm0,(%rsp)
722299481Sjkim	xorq	%r9,%r9
723299481Sjkim.byte	0x67
724299481Sjkim	xorq	%r10,%r10
725299481Sjkim	xorq	%r11,%r11
726299481Sjkim	xorq	%r12,%r12
727299481Sjkim
728299481Sjkim	vmovdqu	.Land_mask(%rip),%ymm15
729299481Sjkim	movl	$9,%r14d
730299481Sjkim	vmovdqu	%ymm9,288-128(%rdi)
731299481Sjkim	jmp	.Loop_mul_1024
732299481Sjkim
733299481Sjkim.align	32
734299481Sjkim.Loop_mul_1024:
735299481Sjkim	vpsrlq	$29,%ymm3,%ymm9
736299481Sjkim	movq	%rbx,%rax
737299481Sjkim	imulq	-128(%rsi),%rax
738299481Sjkim	addq	%r9,%rax
739299481Sjkim	movq	%rbx,%r10
740299481Sjkim	imulq	8-128(%rsi),%r10
741299481Sjkim	addq	8(%rsp),%r10
742299481Sjkim
743299481Sjkim	movq	%rax,%r9
744299481Sjkim	imull	%r8d,%eax
745299481Sjkim	andl	$0x1fffffff,%eax
746299481Sjkim
747299481Sjkim	movq	%rbx,%r11
748299481Sjkim	imulq	16-128(%rsi),%r11
749299481Sjkim	addq	16(%rsp),%r11
750299481Sjkim
751299481Sjkim	movq	%rbx,%r12
752299481Sjkim	imulq	24-128(%rsi),%r12
753299481Sjkim	addq	24(%rsp),%r12
754299481Sjkim	vpmuludq	32-128(%rsi),%ymm10,%ymm0
755299481Sjkim	vmovd	%eax,%xmm11
756299481Sjkim	vpaddq	%ymm0,%ymm1,%ymm1
757299481Sjkim	vpmuludq	64-128(%rsi),%ymm10,%ymm12
758299481Sjkim	vpbroadcastq	%xmm11,%ymm11
759299481Sjkim	vpaddq	%ymm12,%ymm2,%ymm2
760299481Sjkim	vpmuludq	96-128(%rsi),%ymm10,%ymm13
761299481Sjkim	vpand	%ymm15,%ymm3,%ymm3
762299481Sjkim	vpaddq	%ymm13,%ymm3,%ymm3
763299481Sjkim	vpmuludq	128-128(%rsi),%ymm10,%ymm0
764299481Sjkim	vpaddq	%ymm0,%ymm4,%ymm4
765299481Sjkim	vpmuludq	160-128(%rsi),%ymm10,%ymm12
766299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
767299481Sjkim	vpmuludq	192-128(%rsi),%ymm10,%ymm13
768299481Sjkim	vpaddq	%ymm13,%ymm6,%ymm6
769299481Sjkim	vpmuludq	224-128(%rsi),%ymm10,%ymm0
770299481Sjkim	vpermq	$0x93,%ymm9,%ymm9
771299481Sjkim	vpaddq	%ymm0,%ymm7,%ymm7
772299481Sjkim	vpmuludq	256-128(%rsi),%ymm10,%ymm12
773299481Sjkim	vpbroadcastq	8(%r13),%ymm10
774299481Sjkim	vpaddq	%ymm12,%ymm8,%ymm8
775299481Sjkim
776299481Sjkim	movq	%rax,%rdx
777299481Sjkim	imulq	-128(%rcx),%rax
778299481Sjkim	addq	%rax,%r9
779299481Sjkim	movq	%rdx,%rax
780299481Sjkim	imulq	8-128(%rcx),%rax
781299481Sjkim	addq	%rax,%r10
782299481Sjkim	movq	%rdx,%rax
783299481Sjkim	imulq	16-128(%rcx),%rax
784299481Sjkim	addq	%rax,%r11
785299481Sjkim	shrq	$29,%r9
786299481Sjkim	imulq	24-128(%rcx),%rdx
787299481Sjkim	addq	%rdx,%r12
788299481Sjkim	addq	%r9,%r10
789299481Sjkim
790299481Sjkim	vpmuludq	32-128(%rcx),%ymm11,%ymm13
791299481Sjkim	vmovq	%xmm10,%rbx
792299481Sjkim	vpaddq	%ymm13,%ymm1,%ymm1
793299481Sjkim	vpmuludq	64-128(%rcx),%ymm11,%ymm0
794299481Sjkim	vpaddq	%ymm0,%ymm2,%ymm2
795299481Sjkim	vpmuludq	96-128(%rcx),%ymm11,%ymm12
796299481Sjkim	vpaddq	%ymm12,%ymm3,%ymm3
797299481Sjkim	vpmuludq	128-128(%rcx),%ymm11,%ymm13
798299481Sjkim	vpaddq	%ymm13,%ymm4,%ymm4
799299481Sjkim	vpmuludq	160-128(%rcx),%ymm11,%ymm0
800299481Sjkim	vpaddq	%ymm0,%ymm5,%ymm5
801299481Sjkim	vpmuludq	192-128(%rcx),%ymm11,%ymm12
802299481Sjkim	vpaddq	%ymm12,%ymm6,%ymm6
803299481Sjkim	vpmuludq	224-128(%rcx),%ymm11,%ymm13
804326663Sjkim	vpblendd	$3,%ymm14,%ymm9,%ymm12
805299481Sjkim	vpaddq	%ymm13,%ymm7,%ymm7
806299481Sjkim	vpmuludq	256-128(%rcx),%ymm11,%ymm0
807326663Sjkim	vpaddq	%ymm12,%ymm3,%ymm3
808299481Sjkim	vpaddq	%ymm0,%ymm8,%ymm8
809299481Sjkim
810299481Sjkim	movq	%rbx,%rax
811299481Sjkim	imulq	-128(%rsi),%rax
812299481Sjkim	addq	%rax,%r10
813299481Sjkim	vmovdqu	-8+32-128(%rsi),%ymm12
814299481Sjkim	movq	%rbx,%rax
815299481Sjkim	imulq	8-128(%rsi),%rax
816299481Sjkim	addq	%rax,%r11
817299481Sjkim	vmovdqu	-8+64-128(%rsi),%ymm13
818299481Sjkim
819299481Sjkim	movq	%r10,%rax
820326663Sjkim	vpblendd	$0xfc,%ymm14,%ymm9,%ymm9
821299481Sjkim	imull	%r8d,%eax
822326663Sjkim	vpaddq	%ymm9,%ymm4,%ymm4
823299481Sjkim	andl	$0x1fffffff,%eax
824299481Sjkim
825299481Sjkim	imulq	16-128(%rsi),%rbx
826299481Sjkim	addq	%rbx,%r12
827299481Sjkim	vpmuludq	%ymm10,%ymm12,%ymm12
828299481Sjkim	vmovd	%eax,%xmm11
829299481Sjkim	vmovdqu	-8+96-128(%rsi),%ymm0
830299481Sjkim	vpaddq	%ymm12,%ymm1,%ymm1
831299481Sjkim	vpmuludq	%ymm10,%ymm13,%ymm13
832299481Sjkim	vpbroadcastq	%xmm11,%ymm11
833299481Sjkim	vmovdqu	-8+128-128(%rsi),%ymm12
834299481Sjkim	vpaddq	%ymm13,%ymm2,%ymm2
835299481Sjkim	vpmuludq	%ymm10,%ymm0,%ymm0
836299481Sjkim	vmovdqu	-8+160-128(%rsi),%ymm13
837299481Sjkim	vpaddq	%ymm0,%ymm3,%ymm3
838299481Sjkim	vpmuludq	%ymm10,%ymm12,%ymm12
839299481Sjkim	vmovdqu	-8+192-128(%rsi),%ymm0
840299481Sjkim	vpaddq	%ymm12,%ymm4,%ymm4
841299481Sjkim	vpmuludq	%ymm10,%ymm13,%ymm13
842299481Sjkim	vmovdqu	-8+224-128(%rsi),%ymm12
843299481Sjkim	vpaddq	%ymm13,%ymm5,%ymm5
844299481Sjkim	vpmuludq	%ymm10,%ymm0,%ymm0
845299481Sjkim	vmovdqu	-8+256-128(%rsi),%ymm13
846299481Sjkim	vpaddq	%ymm0,%ymm6,%ymm6
847299481Sjkim	vpmuludq	%ymm10,%ymm12,%ymm12
848299481Sjkim	vmovdqu	-8+288-128(%rsi),%ymm9
849299481Sjkim	vpaddq	%ymm12,%ymm7,%ymm7
850299481Sjkim	vpmuludq	%ymm10,%ymm13,%ymm13
851299481Sjkim	vpaddq	%ymm13,%ymm8,%ymm8
852299481Sjkim	vpmuludq	%ymm10,%ymm9,%ymm9
853299481Sjkim	vpbroadcastq	16(%r13),%ymm10
854299481Sjkim
855299481Sjkim	movq	%rax,%rdx
856299481Sjkim	imulq	-128(%rcx),%rax
857299481Sjkim	addq	%rax,%r10
858299481Sjkim	vmovdqu	-8+32-128(%rcx),%ymm0
859299481Sjkim	movq	%rdx,%rax
860299481Sjkim	imulq	8-128(%rcx),%rax
861299481Sjkim	addq	%rax,%r11
862299481Sjkim	vmovdqu	-8+64-128(%rcx),%ymm12
863299481Sjkim	shrq	$29,%r10
864299481Sjkim	imulq	16-128(%rcx),%rdx
865299481Sjkim	addq	%rdx,%r12
866299481Sjkim	addq	%r10,%r11
867299481Sjkim
868299481Sjkim	vpmuludq	%ymm11,%ymm0,%ymm0
869299481Sjkim	vmovq	%xmm10,%rbx
870299481Sjkim	vmovdqu	-8+96-128(%rcx),%ymm13
871299481Sjkim	vpaddq	%ymm0,%ymm1,%ymm1
872299481Sjkim	vpmuludq	%ymm11,%ymm12,%ymm12
873299481Sjkim	vmovdqu	-8+128-128(%rcx),%ymm0
874299481Sjkim	vpaddq	%ymm12,%ymm2,%ymm2
875299481Sjkim	vpmuludq	%ymm11,%ymm13,%ymm13
876299481Sjkim	vmovdqu	-8+160-128(%rcx),%ymm12
877299481Sjkim	vpaddq	%ymm13,%ymm3,%ymm3
878299481Sjkim	vpmuludq	%ymm11,%ymm0,%ymm0
879299481Sjkim	vmovdqu	-8+192-128(%rcx),%ymm13
880299481Sjkim	vpaddq	%ymm0,%ymm4,%ymm4
881299481Sjkim	vpmuludq	%ymm11,%ymm12,%ymm12
882299481Sjkim	vmovdqu	-8+224-128(%rcx),%ymm0
883299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
884299481Sjkim	vpmuludq	%ymm11,%ymm13,%ymm13
885299481Sjkim	vmovdqu	-8+256-128(%rcx),%ymm12
886299481Sjkim	vpaddq	%ymm13,%ymm6,%ymm6
887299481Sjkim	vpmuludq	%ymm11,%ymm0,%ymm0
888299481Sjkim	vmovdqu	-8+288-128(%rcx),%ymm13
889299481Sjkim	vpaddq	%ymm0,%ymm7,%ymm7
890299481Sjkim	vpmuludq	%ymm11,%ymm12,%ymm12
891299481Sjkim	vpaddq	%ymm12,%ymm8,%ymm8
892299481Sjkim	vpmuludq	%ymm11,%ymm13,%ymm13
893299481Sjkim	vpaddq	%ymm13,%ymm9,%ymm9
894299481Sjkim
895299481Sjkim	vmovdqu	-16+32-128(%rsi),%ymm0
896299481Sjkim	movq	%rbx,%rax
897299481Sjkim	imulq	-128(%rsi),%rax
898299481Sjkim	addq	%r11,%rax
899299481Sjkim
900299481Sjkim	vmovdqu	-16+64-128(%rsi),%ymm12
901299481Sjkim	movq	%rax,%r11
902299481Sjkim	imull	%r8d,%eax
903299481Sjkim	andl	$0x1fffffff,%eax
904299481Sjkim
905299481Sjkim	imulq	8-128(%rsi),%rbx
906299481Sjkim	addq	%rbx,%r12
907299481Sjkim	vpmuludq	%ymm10,%ymm0,%ymm0
908299481Sjkim	vmovd	%eax,%xmm11
909299481Sjkim	vmovdqu	-16+96-128(%rsi),%ymm13
910299481Sjkim	vpaddq	%ymm0,%ymm1,%ymm1
911299481Sjkim	vpmuludq	%ymm10,%ymm12,%ymm12
912299481Sjkim	vpbroadcastq	%xmm11,%ymm11
913299481Sjkim	vmovdqu	-16+128-128(%rsi),%ymm0
914299481Sjkim	vpaddq	%ymm12,%ymm2,%ymm2
915299481Sjkim	vpmuludq	%ymm10,%ymm13,%ymm13
916299481Sjkim	vmovdqu	-16+160-128(%rsi),%ymm12
917299481Sjkim	vpaddq	%ymm13,%ymm3,%ymm3
918299481Sjkim	vpmuludq	%ymm10,%ymm0,%ymm0
919299481Sjkim	vmovdqu	-16+192-128(%rsi),%ymm13
920299481Sjkim	vpaddq	%ymm0,%ymm4,%ymm4
921299481Sjkim	vpmuludq	%ymm10,%ymm12,%ymm12
922299481Sjkim	vmovdqu	-16+224-128(%rsi),%ymm0
923299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
924299481Sjkim	vpmuludq	%ymm10,%ymm13,%ymm13
925299481Sjkim	vmovdqu	-16+256-128(%rsi),%ymm12
926299481Sjkim	vpaddq	%ymm13,%ymm6,%ymm6
927299481Sjkim	vpmuludq	%ymm10,%ymm0,%ymm0
928299481Sjkim	vmovdqu	-16+288-128(%rsi),%ymm13
929299481Sjkim	vpaddq	%ymm0,%ymm7,%ymm7
930299481Sjkim	vpmuludq	%ymm10,%ymm12,%ymm12
931299481Sjkim	vpaddq	%ymm12,%ymm8,%ymm8
932299481Sjkim	vpmuludq	%ymm10,%ymm13,%ymm13
933299481Sjkim	vpbroadcastq	24(%r13),%ymm10
934299481Sjkim	vpaddq	%ymm13,%ymm9,%ymm9
935299481Sjkim
936299481Sjkim	vmovdqu	-16+32-128(%rcx),%ymm0
937299481Sjkim	movq	%rax,%rdx
938299481Sjkim	imulq	-128(%rcx),%rax
939299481Sjkim	addq	%rax,%r11
940299481Sjkim	vmovdqu	-16+64-128(%rcx),%ymm12
941299481Sjkim	imulq	8-128(%rcx),%rdx
942299481Sjkim	addq	%rdx,%r12
943299481Sjkim	shrq	$29,%r11
944299481Sjkim
945299481Sjkim	vpmuludq	%ymm11,%ymm0,%ymm0
946299481Sjkim	vmovq	%xmm10,%rbx
947299481Sjkim	vmovdqu	-16+96-128(%rcx),%ymm13
948299481Sjkim	vpaddq	%ymm0,%ymm1,%ymm1
949299481Sjkim	vpmuludq	%ymm11,%ymm12,%ymm12
950299481Sjkim	vmovdqu	-16+128-128(%rcx),%ymm0
951299481Sjkim	vpaddq	%ymm12,%ymm2,%ymm2
952299481Sjkim	vpmuludq	%ymm11,%ymm13,%ymm13
953299481Sjkim	vmovdqu	-16+160-128(%rcx),%ymm12
954299481Sjkim	vpaddq	%ymm13,%ymm3,%ymm3
955299481Sjkim	vpmuludq	%ymm11,%ymm0,%ymm0
956299481Sjkim	vmovdqu	-16+192-128(%rcx),%ymm13
957299481Sjkim	vpaddq	%ymm0,%ymm4,%ymm4
958299481Sjkim	vpmuludq	%ymm11,%ymm12,%ymm12
959299481Sjkim	vmovdqu	-16+224-128(%rcx),%ymm0
960299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
961299481Sjkim	vpmuludq	%ymm11,%ymm13,%ymm13
962299481Sjkim	vmovdqu	-16+256-128(%rcx),%ymm12
963299481Sjkim	vpaddq	%ymm13,%ymm6,%ymm6
964299481Sjkim	vpmuludq	%ymm11,%ymm0,%ymm0
965299481Sjkim	vmovdqu	-16+288-128(%rcx),%ymm13
966299481Sjkim	vpaddq	%ymm0,%ymm7,%ymm7
967299481Sjkim	vpmuludq	%ymm11,%ymm12,%ymm12
968299481Sjkim	vmovdqu	-24+32-128(%rsi),%ymm0
969299481Sjkim	vpaddq	%ymm12,%ymm8,%ymm8
970299481Sjkim	vpmuludq	%ymm11,%ymm13,%ymm13
971299481Sjkim	vmovdqu	-24+64-128(%rsi),%ymm12
972299481Sjkim	vpaddq	%ymm13,%ymm9,%ymm9
973299481Sjkim
974299481Sjkim	addq	%r11,%r12
975299481Sjkim	imulq	-128(%rsi),%rbx
976299481Sjkim	addq	%rbx,%r12
977299481Sjkim
978299481Sjkim	movq	%r12,%rax
979299481Sjkim	imull	%r8d,%eax
980299481Sjkim	andl	$0x1fffffff,%eax
981299481Sjkim
982299481Sjkim	vpmuludq	%ymm10,%ymm0,%ymm0
983299481Sjkim	vmovd	%eax,%xmm11
984299481Sjkim	vmovdqu	-24+96-128(%rsi),%ymm13
985299481Sjkim	vpaddq	%ymm0,%ymm1,%ymm1
986299481Sjkim	vpmuludq	%ymm10,%ymm12,%ymm12
987299481Sjkim	vpbroadcastq	%xmm11,%ymm11
988299481Sjkim	vmovdqu	-24+128-128(%rsi),%ymm0
989299481Sjkim	vpaddq	%ymm12,%ymm2,%ymm2
990299481Sjkim	vpmuludq	%ymm10,%ymm13,%ymm13
991299481Sjkim	vmovdqu	-24+160-128(%rsi),%ymm12
992299481Sjkim	vpaddq	%ymm13,%ymm3,%ymm3
993299481Sjkim	vpmuludq	%ymm10,%ymm0,%ymm0
994299481Sjkim	vmovdqu	-24+192-128(%rsi),%ymm13
995299481Sjkim	vpaddq	%ymm0,%ymm4,%ymm4
996299481Sjkim	vpmuludq	%ymm10,%ymm12,%ymm12
997299481Sjkim	vmovdqu	-24+224-128(%rsi),%ymm0
998299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
999299481Sjkim	vpmuludq	%ymm10,%ymm13,%ymm13
1000299481Sjkim	vmovdqu	-24+256-128(%rsi),%ymm12
1001299481Sjkim	vpaddq	%ymm13,%ymm6,%ymm6
1002299481Sjkim	vpmuludq	%ymm10,%ymm0,%ymm0
1003299481Sjkim	vmovdqu	-24+288-128(%rsi),%ymm13
1004299481Sjkim	vpaddq	%ymm0,%ymm7,%ymm7
1005299481Sjkim	vpmuludq	%ymm10,%ymm12,%ymm12
1006299481Sjkim	vpaddq	%ymm12,%ymm8,%ymm8
1007299481Sjkim	vpmuludq	%ymm10,%ymm13,%ymm13
1008299481Sjkim	vpbroadcastq	32(%r13),%ymm10
1009299481Sjkim	vpaddq	%ymm13,%ymm9,%ymm9
1010299481Sjkim	addq	$32,%r13
1011299481Sjkim
1012299481Sjkim	vmovdqu	-24+32-128(%rcx),%ymm0
1013299481Sjkim	imulq	-128(%rcx),%rax
1014299481Sjkim	addq	%rax,%r12
1015299481Sjkim	shrq	$29,%r12
1016299481Sjkim
1017299481Sjkim	vmovdqu	-24+64-128(%rcx),%ymm12
1018299481Sjkim	vpmuludq	%ymm11,%ymm0,%ymm0
1019299481Sjkim	vmovq	%xmm10,%rbx
1020299481Sjkim	vmovdqu	-24+96-128(%rcx),%ymm13
1021299481Sjkim	vpaddq	%ymm0,%ymm1,%ymm0
1022299481Sjkim	vpmuludq	%ymm11,%ymm12,%ymm12
1023299481Sjkim	vmovdqu	%ymm0,(%rsp)
1024299481Sjkim	vpaddq	%ymm12,%ymm2,%ymm1
1025299481Sjkim	vmovdqu	-24+128-128(%rcx),%ymm0
1026299481Sjkim	vpmuludq	%ymm11,%ymm13,%ymm13
1027299481Sjkim	vmovdqu	-24+160-128(%rcx),%ymm12
1028299481Sjkim	vpaddq	%ymm13,%ymm3,%ymm2
1029299481Sjkim	vpmuludq	%ymm11,%ymm0,%ymm0
1030299481Sjkim	vmovdqu	-24+192-128(%rcx),%ymm13
1031299481Sjkim	vpaddq	%ymm0,%ymm4,%ymm3
1032299481Sjkim	vpmuludq	%ymm11,%ymm12,%ymm12
1033299481Sjkim	vmovdqu	-24+224-128(%rcx),%ymm0
1034299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm4
1035299481Sjkim	vpmuludq	%ymm11,%ymm13,%ymm13
1036299481Sjkim	vmovdqu	-24+256-128(%rcx),%ymm12
1037299481Sjkim	vpaddq	%ymm13,%ymm6,%ymm5
1038299481Sjkim	vpmuludq	%ymm11,%ymm0,%ymm0
1039299481Sjkim	vmovdqu	-24+288-128(%rcx),%ymm13
1040299481Sjkim	movq	%r12,%r9
1041299481Sjkim	vpaddq	%ymm0,%ymm7,%ymm6
1042299481Sjkim	vpmuludq	%ymm11,%ymm12,%ymm12
1043299481Sjkim	addq	(%rsp),%r9
1044299481Sjkim	vpaddq	%ymm12,%ymm8,%ymm7
1045299481Sjkim	vpmuludq	%ymm11,%ymm13,%ymm13
1046299481Sjkim	vmovq	%r12,%xmm12
1047299481Sjkim	vpaddq	%ymm13,%ymm9,%ymm8
1048299481Sjkim
1049299481Sjkim	decl	%r14d
1050299481Sjkim	jnz	.Loop_mul_1024
1051299481Sjkim	vpaddq	(%rsp),%ymm12,%ymm0
1052299481Sjkim
1053299481Sjkim	vpsrlq	$29,%ymm0,%ymm12
1054299481Sjkim	vpand	%ymm15,%ymm0,%ymm0
1055299481Sjkim	vpsrlq	$29,%ymm1,%ymm13
1056299481Sjkim	vpand	%ymm15,%ymm1,%ymm1
1057299481Sjkim	vpsrlq	$29,%ymm2,%ymm10
1058299481Sjkim	vpermq	$0x93,%ymm12,%ymm12
1059299481Sjkim	vpand	%ymm15,%ymm2,%ymm2
1060299481Sjkim	vpsrlq	$29,%ymm3,%ymm11
1061299481Sjkim	vpermq	$0x93,%ymm13,%ymm13
1062299481Sjkim	vpand	%ymm15,%ymm3,%ymm3
1063299481Sjkim
1064299481Sjkim	vpblendd	$3,%ymm14,%ymm12,%ymm9
1065299481Sjkim	vpermq	$0x93,%ymm10,%ymm10
1066299481Sjkim	vpblendd	$3,%ymm12,%ymm13,%ymm12
1067299481Sjkim	vpermq	$0x93,%ymm11,%ymm11
1068299481Sjkim	vpaddq	%ymm9,%ymm0,%ymm0
1069299481Sjkim	vpblendd	$3,%ymm13,%ymm10,%ymm13
1070299481Sjkim	vpaddq	%ymm12,%ymm1,%ymm1
1071299481Sjkim	vpblendd	$3,%ymm10,%ymm11,%ymm10
1072299481Sjkim	vpaddq	%ymm13,%ymm2,%ymm2
1073299481Sjkim	vpblendd	$3,%ymm11,%ymm14,%ymm11
1074299481Sjkim	vpaddq	%ymm10,%ymm3,%ymm3
1075299481Sjkim	vpaddq	%ymm11,%ymm4,%ymm4
1076299481Sjkim
1077299481Sjkim	vpsrlq	$29,%ymm0,%ymm12
1078299481Sjkim	vpand	%ymm15,%ymm0,%ymm0
1079299481Sjkim	vpsrlq	$29,%ymm1,%ymm13
1080299481Sjkim	vpand	%ymm15,%ymm1,%ymm1
1081299481Sjkim	vpsrlq	$29,%ymm2,%ymm10
1082299481Sjkim	vpermq	$0x93,%ymm12,%ymm12
1083299481Sjkim	vpand	%ymm15,%ymm2,%ymm2
1084299481Sjkim	vpsrlq	$29,%ymm3,%ymm11
1085299481Sjkim	vpermq	$0x93,%ymm13,%ymm13
1086299481Sjkim	vpand	%ymm15,%ymm3,%ymm3
1087299481Sjkim	vpermq	$0x93,%ymm10,%ymm10
1088299481Sjkim
1089299481Sjkim	vpblendd	$3,%ymm14,%ymm12,%ymm9
1090299481Sjkim	vpermq	$0x93,%ymm11,%ymm11
1091299481Sjkim	vpblendd	$3,%ymm12,%ymm13,%ymm12
1092299481Sjkim	vpaddq	%ymm9,%ymm0,%ymm0
1093299481Sjkim	vpblendd	$3,%ymm13,%ymm10,%ymm13
1094299481Sjkim	vpaddq	%ymm12,%ymm1,%ymm1
1095299481Sjkim	vpblendd	$3,%ymm10,%ymm11,%ymm10
1096299481Sjkim	vpaddq	%ymm13,%ymm2,%ymm2
1097299481Sjkim	vpblendd	$3,%ymm11,%ymm14,%ymm11
1098299481Sjkim	vpaddq	%ymm10,%ymm3,%ymm3
1099299481Sjkim	vpaddq	%ymm11,%ymm4,%ymm4
1100299481Sjkim
1101299481Sjkim	vmovdqu	%ymm0,0-128(%rdi)
1102299481Sjkim	vmovdqu	%ymm1,32-128(%rdi)
1103299481Sjkim	vmovdqu	%ymm2,64-128(%rdi)
1104299481Sjkim	vmovdqu	%ymm3,96-128(%rdi)
1105299481Sjkim	vpsrlq	$29,%ymm4,%ymm12
1106299481Sjkim	vpand	%ymm15,%ymm4,%ymm4
1107299481Sjkim	vpsrlq	$29,%ymm5,%ymm13
1108299481Sjkim	vpand	%ymm15,%ymm5,%ymm5
1109299481Sjkim	vpsrlq	$29,%ymm6,%ymm10
1110299481Sjkim	vpermq	$0x93,%ymm12,%ymm12
1111299481Sjkim	vpand	%ymm15,%ymm6,%ymm6
1112299481Sjkim	vpsrlq	$29,%ymm7,%ymm11
1113299481Sjkim	vpermq	$0x93,%ymm13,%ymm13
1114299481Sjkim	vpand	%ymm15,%ymm7,%ymm7
1115299481Sjkim	vpsrlq	$29,%ymm8,%ymm0
1116299481Sjkim	vpermq	$0x93,%ymm10,%ymm10
1117299481Sjkim	vpand	%ymm15,%ymm8,%ymm8
1118299481Sjkim	vpermq	$0x93,%ymm11,%ymm11
1119299481Sjkim
1120299481Sjkim	vpblendd	$3,%ymm14,%ymm12,%ymm9
1121299481Sjkim	vpermq	$0x93,%ymm0,%ymm0
1122299481Sjkim	vpblendd	$3,%ymm12,%ymm13,%ymm12
1123299481Sjkim	vpaddq	%ymm9,%ymm4,%ymm4
1124299481Sjkim	vpblendd	$3,%ymm13,%ymm10,%ymm13
1125299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
1126299481Sjkim	vpblendd	$3,%ymm10,%ymm11,%ymm10
1127299481Sjkim	vpaddq	%ymm13,%ymm6,%ymm6
1128299481Sjkim	vpblendd	$3,%ymm11,%ymm0,%ymm11
1129299481Sjkim	vpaddq	%ymm10,%ymm7,%ymm7
1130299481Sjkim	vpaddq	%ymm11,%ymm8,%ymm8
1131299481Sjkim
1132299481Sjkim	vpsrlq	$29,%ymm4,%ymm12
1133299481Sjkim	vpand	%ymm15,%ymm4,%ymm4
1134299481Sjkim	vpsrlq	$29,%ymm5,%ymm13
1135299481Sjkim	vpand	%ymm15,%ymm5,%ymm5
1136299481Sjkim	vpsrlq	$29,%ymm6,%ymm10
1137299481Sjkim	vpermq	$0x93,%ymm12,%ymm12
1138299481Sjkim	vpand	%ymm15,%ymm6,%ymm6
1139299481Sjkim	vpsrlq	$29,%ymm7,%ymm11
1140299481Sjkim	vpermq	$0x93,%ymm13,%ymm13
1141299481Sjkim	vpand	%ymm15,%ymm7,%ymm7
1142299481Sjkim	vpsrlq	$29,%ymm8,%ymm0
1143299481Sjkim	vpermq	$0x93,%ymm10,%ymm10
1144299481Sjkim	vpand	%ymm15,%ymm8,%ymm8
1145299481Sjkim	vpermq	$0x93,%ymm11,%ymm11
1146299481Sjkim
1147299481Sjkim	vpblendd	$3,%ymm14,%ymm12,%ymm9
1148299481Sjkim	vpermq	$0x93,%ymm0,%ymm0
1149299481Sjkim	vpblendd	$3,%ymm12,%ymm13,%ymm12
1150299481Sjkim	vpaddq	%ymm9,%ymm4,%ymm4
1151299481Sjkim	vpblendd	$3,%ymm13,%ymm10,%ymm13
1152299481Sjkim	vpaddq	%ymm12,%ymm5,%ymm5
1153299481Sjkim	vpblendd	$3,%ymm10,%ymm11,%ymm10
1154299481Sjkim	vpaddq	%ymm13,%ymm6,%ymm6
1155299481Sjkim	vpblendd	$3,%ymm11,%ymm0,%ymm11
1156299481Sjkim	vpaddq	%ymm10,%ymm7,%ymm7
1157299481Sjkim	vpaddq	%ymm11,%ymm8,%ymm8
1158299481Sjkim
1159299481Sjkim	vmovdqu	%ymm4,128-128(%rdi)
1160299481Sjkim	vmovdqu	%ymm5,160-128(%rdi)
1161299481Sjkim	vmovdqu	%ymm6,192-128(%rdi)
1162299481Sjkim	vmovdqu	%ymm7,224-128(%rdi)
1163299481Sjkim	vmovdqu	%ymm8,256-128(%rdi)
1164299481Sjkim	vzeroupper
1165299481Sjkim
1166299481Sjkim	movq	%rbp,%rax
1167299481Sjkim	movq	-48(%rax),%r15
1168299481Sjkim	movq	-40(%rax),%r14
1169299481Sjkim	movq	-32(%rax),%r13
1170299481Sjkim	movq	-24(%rax),%r12
1171299481Sjkim	movq	-16(%rax),%rbp
1172299481Sjkim	movq	-8(%rax),%rbx
1173299481Sjkim	leaq	(%rax),%rsp
1174299481Sjkim.Lmul_1024_epilogue:
1175299481Sjkim	.byte	0xf3,0xc3
1176299481Sjkim.size	rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2
1177299481Sjkim.globl	rsaz_1024_red2norm_avx2
1178299481Sjkim.type	rsaz_1024_red2norm_avx2,@function
1179299481Sjkim.align	32
1180299481Sjkimrsaz_1024_red2norm_avx2:
1181299481Sjkim	subq	$-128,%rsi
1182299481Sjkim	xorq	%rax,%rax
1183299481Sjkim	movq	-128(%rsi),%r8
1184299481Sjkim	movq	-120(%rsi),%r9
1185299481Sjkim	movq	-112(%rsi),%r10
1186299481Sjkim	shlq	$0,%r8
1187299481Sjkim	shlq	$29,%r9
1188299481Sjkim	movq	%r10,%r11
1189299481Sjkim	shlq	$58,%r10
1190299481Sjkim	shrq	$6,%r11
1191299481Sjkim	addq	%r8,%rax
1192299481Sjkim	addq	%r9,%rax
1193299481Sjkim	addq	%r10,%rax
1194299481Sjkim	adcq	$0,%r11
1195299481Sjkim	movq	%rax,0(%rdi)
1196299481Sjkim	movq	%r11,%rax
1197299481Sjkim	movq	-104(%rsi),%r8
1198299481Sjkim	movq	-96(%rsi),%r9
1199299481Sjkim	shlq	$23,%r8
1200299481Sjkim	movq	%r9,%r10
1201299481Sjkim	shlq	$52,%r9
1202299481Sjkim	shrq	$12,%r10
1203299481Sjkim	addq	%r8,%rax
1204299481Sjkim	addq	%r9,%rax
1205299481Sjkim	adcq	$0,%r10
1206299481Sjkim	movq	%rax,8(%rdi)
1207299481Sjkim	movq	%r10,%rax
1208299481Sjkim	movq	-88(%rsi),%r11
1209299481Sjkim	movq	-80(%rsi),%r8
1210299481Sjkim	shlq	$17,%r11
1211299481Sjkim	movq	%r8,%r9
1212299481Sjkim	shlq	$46,%r8
1213299481Sjkim	shrq	$18,%r9
1214299481Sjkim	addq	%r11,%rax
1215299481Sjkim	addq	%r8,%rax
1216299481Sjkim	adcq	$0,%r9
1217299481Sjkim	movq	%rax,16(%rdi)
1218299481Sjkim	movq	%r9,%rax
1219299481Sjkim	movq	-72(%rsi),%r10
1220299481Sjkim	movq	-64(%rsi),%r11
1221299481Sjkim	shlq	$11,%r10
1222299481Sjkim	movq	%r11,%r8
1223299481Sjkim	shlq	$40,%r11
1224299481Sjkim	shrq	$24,%r8
1225299481Sjkim	addq	%r10,%rax
1226299481Sjkim	addq	%r11,%rax
1227299481Sjkim	adcq	$0,%r8
1228299481Sjkim	movq	%rax,24(%rdi)
1229299481Sjkim	movq	%r8,%rax
1230299481Sjkim	movq	-56(%rsi),%r9
1231299481Sjkim	movq	-48(%rsi),%r10
1232299481Sjkim	movq	-40(%rsi),%r11
1233299481Sjkim	shlq	$5,%r9
1234299481Sjkim	shlq	$34,%r10
1235299481Sjkim	movq	%r11,%r8
1236299481Sjkim	shlq	$63,%r11
1237299481Sjkim	shrq	$1,%r8
1238299481Sjkim	addq	%r9,%rax
1239299481Sjkim	addq	%r10,%rax
1240299481Sjkim	addq	%r11,%rax
1241299481Sjkim	adcq	$0,%r8
1242299481Sjkim	movq	%rax,32(%rdi)
1243299481Sjkim	movq	%r8,%rax
1244299481Sjkim	movq	-32(%rsi),%r9
1245299481Sjkim	movq	-24(%rsi),%r10
1246299481Sjkim	shlq	$28,%r9
1247299481Sjkim	movq	%r10,%r11
1248299481Sjkim	shlq	$57,%r10
1249299481Sjkim	shrq	$7,%r11
1250299481Sjkim	addq	%r9,%rax
1251299481Sjkim	addq	%r10,%rax
1252299481Sjkim	adcq	$0,%r11
1253299481Sjkim	movq	%rax,40(%rdi)
1254299481Sjkim	movq	%r11,%rax
1255299481Sjkim	movq	-16(%rsi),%r8
1256299481Sjkim	movq	-8(%rsi),%r9
1257299481Sjkim	shlq	$22,%r8
1258299481Sjkim	movq	%r9,%r10
1259299481Sjkim	shlq	$51,%r9
1260299481Sjkim	shrq	$13,%r10
1261299481Sjkim	addq	%r8,%rax
1262299481Sjkim	addq	%r9,%rax
1263299481Sjkim	adcq	$0,%r10
1264299481Sjkim	movq	%rax,48(%rdi)
1265299481Sjkim	movq	%r10,%rax
1266299481Sjkim	movq	0(%rsi),%r11
1267299481Sjkim	movq	8(%rsi),%r8
1268299481Sjkim	shlq	$16,%r11
1269299481Sjkim	movq	%r8,%r9
1270299481Sjkim	shlq	$45,%r8
1271299481Sjkim	shrq	$19,%r9
1272299481Sjkim	addq	%r11,%rax
1273299481Sjkim	addq	%r8,%rax
1274299481Sjkim	adcq	$0,%r9
1275299481Sjkim	movq	%rax,56(%rdi)
1276299481Sjkim	movq	%r9,%rax
1277299481Sjkim	movq	16(%rsi),%r10
1278299481Sjkim	movq	24(%rsi),%r11
1279299481Sjkim	shlq	$10,%r10
1280299481Sjkim	movq	%r11,%r8
1281299481Sjkim	shlq	$39,%r11
1282299481Sjkim	shrq	$25,%r8
1283299481Sjkim	addq	%r10,%rax
1284299481Sjkim	addq	%r11,%rax
1285299481Sjkim	adcq	$0,%r8
1286299481Sjkim	movq	%rax,64(%rdi)
1287299481Sjkim	movq	%r8,%rax
1288299481Sjkim	movq	32(%rsi),%r9
1289299481Sjkim	movq	40(%rsi),%r10
1290299481Sjkim	movq	48(%rsi),%r11
1291299481Sjkim	shlq	$4,%r9
1292299481Sjkim	shlq	$33,%r10
1293299481Sjkim	movq	%r11,%r8
1294299481Sjkim	shlq	$62,%r11
1295299481Sjkim	shrq	$2,%r8
1296299481Sjkim	addq	%r9,%rax
1297299481Sjkim	addq	%r10,%rax
1298299481Sjkim	addq	%r11,%rax
1299299481Sjkim	adcq	$0,%r8
1300299481Sjkim	movq	%rax,72(%rdi)
1301299481Sjkim	movq	%r8,%rax
1302299481Sjkim	movq	56(%rsi),%r9
1303299481Sjkim	movq	64(%rsi),%r10
1304299481Sjkim	shlq	$27,%r9
1305299481Sjkim	movq	%r10,%r11
1306299481Sjkim	shlq	$56,%r10
1307299481Sjkim	shrq	$8,%r11
1308299481Sjkim	addq	%r9,%rax
1309299481Sjkim	addq	%r10,%rax
1310299481Sjkim	adcq	$0,%r11
1311299481Sjkim	movq	%rax,80(%rdi)
1312299481Sjkim	movq	%r11,%rax
1313299481Sjkim	movq	72(%rsi),%r8
1314299481Sjkim	movq	80(%rsi),%r9
1315299481Sjkim	shlq	$21,%r8
1316299481Sjkim	movq	%r9,%r10
1317299481Sjkim	shlq	$50,%r9
1318299481Sjkim	shrq	$14,%r10
1319299481Sjkim	addq	%r8,%rax
1320299481Sjkim	addq	%r9,%rax
1321299481Sjkim	adcq	$0,%r10
1322299481Sjkim	movq	%rax,88(%rdi)
1323299481Sjkim	movq	%r10,%rax
1324299481Sjkim	movq	88(%rsi),%r11
1325299481Sjkim	movq	96(%rsi),%r8
1326299481Sjkim	shlq	$15,%r11
1327299481Sjkim	movq	%r8,%r9
1328299481Sjkim	shlq	$44,%r8
1329299481Sjkim	shrq	$20,%r9
1330299481Sjkim	addq	%r11,%rax
1331299481Sjkim	addq	%r8,%rax
1332299481Sjkim	adcq	$0,%r9
1333299481Sjkim	movq	%rax,96(%rdi)
1334299481Sjkim	movq	%r9,%rax
1335299481Sjkim	movq	104(%rsi),%r10
1336299481Sjkim	movq	112(%rsi),%r11
1337299481Sjkim	shlq	$9,%r10
1338299481Sjkim	movq	%r11,%r8
1339299481Sjkim	shlq	$38,%r11
1340299481Sjkim	shrq	$26,%r8
1341299481Sjkim	addq	%r10,%rax
1342299481Sjkim	addq	%r11,%rax
1343299481Sjkim	adcq	$0,%r8
1344299481Sjkim	movq	%rax,104(%rdi)
1345299481Sjkim	movq	%r8,%rax
1346299481Sjkim	movq	120(%rsi),%r9
1347299481Sjkim	movq	128(%rsi),%r10
1348299481Sjkim	movq	136(%rsi),%r11
1349299481Sjkim	shlq	$3,%r9
1350299481Sjkim	shlq	$32,%r10
1351299481Sjkim	movq	%r11,%r8
1352299481Sjkim	shlq	$61,%r11
1353299481Sjkim	shrq	$3,%r8
1354299481Sjkim	addq	%r9,%rax
1355299481Sjkim	addq	%r10,%rax
1356299481Sjkim	addq	%r11,%rax
1357299481Sjkim	adcq	$0,%r8
1358299481Sjkim	movq	%rax,112(%rdi)
1359299481Sjkim	movq	%r8,%rax
1360299481Sjkim	movq	144(%rsi),%r9
1361299481Sjkim	movq	152(%rsi),%r10
1362299481Sjkim	shlq	$26,%r9
1363299481Sjkim	movq	%r10,%r11
1364299481Sjkim	shlq	$55,%r10
1365299481Sjkim	shrq	$9,%r11
1366299481Sjkim	addq	%r9,%rax
1367299481Sjkim	addq	%r10,%rax
1368299481Sjkim	adcq	$0,%r11
1369299481Sjkim	movq	%rax,120(%rdi)
1370299481Sjkim	movq	%r11,%rax
1371299481Sjkim	.byte	0xf3,0xc3
1372299481Sjkim.size	rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2
1373299481Sjkim
1374299481Sjkim.globl	rsaz_1024_norm2red_avx2
1375299481Sjkim.type	rsaz_1024_norm2red_avx2,@function
1376299481Sjkim.align	32
1377290207Sjkimrsaz_1024_norm2red_avx2:
1378299481Sjkim	subq	$-128,%rdi
1379299481Sjkim	movq	(%rsi),%r8
1380299481Sjkim	movl	$0x1fffffff,%eax
1381299481Sjkim	movq	8(%rsi),%r9
1382299481Sjkim	movq	%r8,%r11
1383299481Sjkim	shrq	$0,%r11
1384299481Sjkim	andq	%rax,%r11
1385299481Sjkim	movq	%r11,-128(%rdi)
1386299481Sjkim	movq	%r8,%r10
1387299481Sjkim	shrq	$29,%r10
1388299481Sjkim	andq	%rax,%r10
1389299481Sjkim	movq	%r10,-120(%rdi)
1390299481Sjkim	shrdq	$58,%r9,%r8
1391299481Sjkim	andq	%rax,%r8
1392299481Sjkim	movq	%r8,-112(%rdi)
1393299481Sjkim	movq	16(%rsi),%r10
1394299481Sjkim	movq	%r9,%r8
1395299481Sjkim	shrq	$23,%r8
1396299481Sjkim	andq	%rax,%r8
1397299481Sjkim	movq	%r8,-104(%rdi)
1398299481Sjkim	shrdq	$52,%r10,%r9
1399299481Sjkim	andq	%rax,%r9
1400299481Sjkim	movq	%r9,-96(%rdi)
1401299481Sjkim	movq	24(%rsi),%r11
1402299481Sjkim	movq	%r10,%r9
1403299481Sjkim	shrq	$17,%r9
1404299481Sjkim	andq	%rax,%r9
1405299481Sjkim	movq	%r9,-88(%rdi)
1406299481Sjkim	shrdq	$46,%r11,%r10
1407299481Sjkim	andq	%rax,%r10
1408299481Sjkim	movq	%r10,-80(%rdi)
1409299481Sjkim	movq	32(%rsi),%r8
1410299481Sjkim	movq	%r11,%r10
1411299481Sjkim	shrq	$11,%r10
1412299481Sjkim	andq	%rax,%r10
1413299481Sjkim	movq	%r10,-72(%rdi)
1414299481Sjkim	shrdq	$40,%r8,%r11
1415299481Sjkim	andq	%rax,%r11
1416299481Sjkim	movq	%r11,-64(%rdi)
1417299481Sjkim	movq	40(%rsi),%r9
1418299481Sjkim	movq	%r8,%r11
1419299481Sjkim	shrq	$5,%r11
1420299481Sjkim	andq	%rax,%r11
1421299481Sjkim	movq	%r11,-56(%rdi)
1422299481Sjkim	movq	%r8,%r10
1423299481Sjkim	shrq	$34,%r10
1424299481Sjkim	andq	%rax,%r10
1425299481Sjkim	movq	%r10,-48(%rdi)
1426299481Sjkim	shrdq	$63,%r9,%r8
1427299481Sjkim	andq	%rax,%r8
1428299481Sjkim	movq	%r8,-40(%rdi)
1429299481Sjkim	movq	48(%rsi),%r10
1430299481Sjkim	movq	%r9,%r8
1431299481Sjkim	shrq	$28,%r8
1432299481Sjkim	andq	%rax,%r8
1433299481Sjkim	movq	%r8,-32(%rdi)
1434299481Sjkim	shrdq	$57,%r10,%r9
1435299481Sjkim	andq	%rax,%r9
1436299481Sjkim	movq	%r9,-24(%rdi)
1437299481Sjkim	movq	56(%rsi),%r11
1438299481Sjkim	movq	%r10,%r9
1439299481Sjkim	shrq	$22,%r9
1440299481Sjkim	andq	%rax,%r9
1441299481Sjkim	movq	%r9,-16(%rdi)
1442299481Sjkim	shrdq	$51,%r11,%r10
1443299481Sjkim	andq	%rax,%r10
1444299481Sjkim	movq	%r10,-8(%rdi)
1445299481Sjkim	movq	64(%rsi),%r8
1446299481Sjkim	movq	%r11,%r10
1447299481Sjkim	shrq	$16,%r10
1448299481Sjkim	andq	%rax,%r10
1449299481Sjkim	movq	%r10,0(%rdi)
1450299481Sjkim	shrdq	$45,%r8,%r11
1451299481Sjkim	andq	%rax,%r11
1452299481Sjkim	movq	%r11,8(%rdi)
1453299481Sjkim	movq	72(%rsi),%r9
1454299481Sjkim	movq	%r8,%r11
1455299481Sjkim	shrq	$10,%r11
1456299481Sjkim	andq	%rax,%r11
1457299481Sjkim	movq	%r11,16(%rdi)
1458299481Sjkim	shrdq	$39,%r9,%r8
1459299481Sjkim	andq	%rax,%r8
1460299481Sjkim	movq	%r8,24(%rdi)
1461299481Sjkim	movq	80(%rsi),%r10
1462299481Sjkim	movq	%r9,%r8
1463299481Sjkim	shrq	$4,%r8
1464299481Sjkim	andq	%rax,%r8
1465299481Sjkim	movq	%r8,32(%rdi)
1466299481Sjkim	movq	%r9,%r11
1467299481Sjkim	shrq	$33,%r11
1468299481Sjkim	andq	%rax,%r11
1469299481Sjkim	movq	%r11,40(%rdi)
1470299481Sjkim	shrdq	$62,%r10,%r9
1471299481Sjkim	andq	%rax,%r9
1472299481Sjkim	movq	%r9,48(%rdi)
1473299481Sjkim	movq	88(%rsi),%r11
1474299481Sjkim	movq	%r10,%r9
1475299481Sjkim	shrq	$27,%r9
1476299481Sjkim	andq	%rax,%r9
1477299481Sjkim	movq	%r9,56(%rdi)
1478299481Sjkim	shrdq	$56,%r11,%r10
1479299481Sjkim	andq	%rax,%r10
1480299481Sjkim	movq	%r10,64(%rdi)
1481299481Sjkim	movq	96(%rsi),%r8
1482299481Sjkim	movq	%r11,%r10
1483299481Sjkim	shrq	$21,%r10
1484299481Sjkim	andq	%rax,%r10
1485299481Sjkim	movq	%r10,72(%rdi)
1486299481Sjkim	shrdq	$50,%r8,%r11
1487299481Sjkim	andq	%rax,%r11
1488299481Sjkim	movq	%r11,80(%rdi)
1489299481Sjkim	movq	104(%rsi),%r9
1490299481Sjkim	movq	%r8,%r11
1491299481Sjkim	shrq	$15,%r11
1492299481Sjkim	andq	%rax,%r11
1493299481Sjkim	movq	%r11,88(%rdi)
1494299481Sjkim	shrdq	$44,%r9,%r8
1495299481Sjkim	andq	%rax,%r8
1496299481Sjkim	movq	%r8,96(%rdi)
1497299481Sjkim	movq	112(%rsi),%r10
1498299481Sjkim	movq	%r9,%r8
1499299481Sjkim	shrq	$9,%r8
1500299481Sjkim	andq	%rax,%r8
1501299481Sjkim	movq	%r8,104(%rdi)
1502299481Sjkim	shrdq	$38,%r10,%r9
1503299481Sjkim	andq	%rax,%r9
1504299481Sjkim	movq	%r9,112(%rdi)
1505299481Sjkim	movq	120(%rsi),%r11
1506299481Sjkim	movq	%r10,%r9
1507299481Sjkim	shrq	$3,%r9
1508299481Sjkim	andq	%rax,%r9
1509299481Sjkim	movq	%r9,120(%rdi)
1510299481Sjkim	movq	%r10,%r8
1511299481Sjkim	shrq	$32,%r8
1512299481Sjkim	andq	%rax,%r8
1513299481Sjkim	movq	%r8,128(%rdi)
1514299481Sjkim	shrdq	$61,%r11,%r10
1515299481Sjkim	andq	%rax,%r10
1516299481Sjkim	movq	%r10,136(%rdi)
1517299481Sjkim	xorq	%r8,%r8
1518299481Sjkim	movq	%r11,%r10
1519299481Sjkim	shrq	$26,%r10
1520299481Sjkim	andq	%rax,%r10
1521299481Sjkim	movq	%r10,144(%rdi)
1522299481Sjkim	shrdq	$55,%r8,%r11
1523299481Sjkim	andq	%rax,%r11
1524299481Sjkim	movq	%r11,152(%rdi)
1525299481Sjkim	movq	%r8,160(%rdi)
1526299481Sjkim	movq	%r8,168(%rdi)
1527299481Sjkim	movq	%r8,176(%rdi)
1528299481Sjkim	movq	%r8,184(%rdi)
1529299481Sjkim	.byte	0xf3,0xc3
1530299481Sjkim.size	rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2
1531299481Sjkim.globl	rsaz_1024_scatter5_avx2
1532299481Sjkim.type	rsaz_1024_scatter5_avx2,@function
1533299481Sjkim.align	32
1534290207Sjkimrsaz_1024_scatter5_avx2:
1535299481Sjkim	vzeroupper
1536299481Sjkim	vmovdqu	.Lscatter_permd(%rip),%ymm5
1537299481Sjkim	shll	$4,%edx
1538299481Sjkim	leaq	(%rdi,%rdx,1),%rdi
1539299481Sjkim	movl	$9,%eax
1540299481Sjkim	jmp	.Loop_scatter_1024
1541299481Sjkim
1542299481Sjkim.align	32
1543299481Sjkim.Loop_scatter_1024:
1544299481Sjkim	vmovdqu	(%rsi),%ymm0
1545299481Sjkim	leaq	32(%rsi),%rsi
1546299481Sjkim	vpermd	%ymm0,%ymm5,%ymm0
1547299481Sjkim	vmovdqu	%xmm0,(%rdi)
1548299481Sjkim	leaq	512(%rdi),%rdi
1549299481Sjkim	decl	%eax
1550299481Sjkim	jnz	.Loop_scatter_1024
1551299481Sjkim
1552299481Sjkim	vzeroupper
1553299481Sjkim	.byte	0xf3,0xc3
1554299481Sjkim.size	rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2
1555299481Sjkim
1556299481Sjkim.globl	rsaz_1024_gather5_avx2
1557299481Sjkim.type	rsaz_1024_gather5_avx2,@function
1558299481Sjkim.align	32
1559290207Sjkimrsaz_1024_gather5_avx2:
1560299481Sjkim	vzeroupper
1561299481Sjkim	movq	%rsp,%r11
1562299481Sjkim	leaq	-256(%rsp),%rsp
1563299481Sjkim	andq	$-32,%rsp
1564299481Sjkim	leaq	.Linc(%rip),%r10
1565299481Sjkim	leaq	-128(%rsp),%rax
1566299481Sjkim
1567299481Sjkim	vmovd	%edx,%xmm4
1568299481Sjkim	vmovdqa	(%r10),%ymm0
1569299481Sjkim	vmovdqa	32(%r10),%ymm1
1570299481Sjkim	vmovdqa	64(%r10),%ymm5
1571299481Sjkim	vpbroadcastd	%xmm4,%ymm4
1572299481Sjkim
1573299481Sjkim	vpaddd	%ymm5,%ymm0,%ymm2
1574299481Sjkim	vpcmpeqd	%ymm4,%ymm0,%ymm0
1575299481Sjkim	vpaddd	%ymm5,%ymm1,%ymm3
1576299481Sjkim	vpcmpeqd	%ymm4,%ymm1,%ymm1
1577299481Sjkim	vmovdqa	%ymm0,0+128(%rax)
1578299481Sjkim	vpaddd	%ymm5,%ymm2,%ymm0
1579299481Sjkim	vpcmpeqd	%ymm4,%ymm2,%ymm2
1580299481Sjkim	vmovdqa	%ymm1,32+128(%rax)
1581299481Sjkim	vpaddd	%ymm5,%ymm3,%ymm1
1582299481Sjkim	vpcmpeqd	%ymm4,%ymm3,%ymm3
1583299481Sjkim	vmovdqa	%ymm2,64+128(%rax)
1584299481Sjkim	vpaddd	%ymm5,%ymm0,%ymm2
1585299481Sjkim	vpcmpeqd	%ymm4,%ymm0,%ymm0
1586299481Sjkim	vmovdqa	%ymm3,96+128(%rax)
1587299481Sjkim	vpaddd	%ymm5,%ymm1,%ymm3
1588299481Sjkim	vpcmpeqd	%ymm4,%ymm1,%ymm1
1589299481Sjkim	vmovdqa	%ymm0,128+128(%rax)
1590299481Sjkim	vpaddd	%ymm5,%ymm2,%ymm8
1591299481Sjkim	vpcmpeqd	%ymm4,%ymm2,%ymm2
1592299481Sjkim	vmovdqa	%ymm1,160+128(%rax)
1593299481Sjkim	vpaddd	%ymm5,%ymm3,%ymm9
1594299481Sjkim	vpcmpeqd	%ymm4,%ymm3,%ymm3
1595299481Sjkim	vmovdqa	%ymm2,192+128(%rax)
1596299481Sjkim	vpaddd	%ymm5,%ymm8,%ymm10
1597299481Sjkim	vpcmpeqd	%ymm4,%ymm8,%ymm8
1598299481Sjkim	vmovdqa	%ymm3,224+128(%rax)
1599299481Sjkim	vpaddd	%ymm5,%ymm9,%ymm11
1600299481Sjkim	vpcmpeqd	%ymm4,%ymm9,%ymm9
1601299481Sjkim	vpaddd	%ymm5,%ymm10,%ymm12
1602299481Sjkim	vpcmpeqd	%ymm4,%ymm10,%ymm10
1603299481Sjkim	vpaddd	%ymm5,%ymm11,%ymm13
1604299481Sjkim	vpcmpeqd	%ymm4,%ymm11,%ymm11
1605299481Sjkim	vpaddd	%ymm5,%ymm12,%ymm14
1606299481Sjkim	vpcmpeqd	%ymm4,%ymm12,%ymm12
1607299481Sjkim	vpaddd	%ymm5,%ymm13,%ymm15
1608299481Sjkim	vpcmpeqd	%ymm4,%ymm13,%ymm13
1609299481Sjkim	vpcmpeqd	%ymm4,%ymm14,%ymm14
1610299481Sjkim	vpcmpeqd	%ymm4,%ymm15,%ymm15
1611299481Sjkim
1612299481Sjkim	vmovdqa	-32(%r10),%ymm7
1613299481Sjkim	leaq	128(%rsi),%rsi
1614299481Sjkim	movl	$9,%edx
1615299481Sjkim
1616299481Sjkim.Loop_gather_1024:
1617299481Sjkim	vmovdqa	0-128(%rsi),%ymm0
1618299481Sjkim	vmovdqa	32-128(%rsi),%ymm1
1619299481Sjkim	vmovdqa	64-128(%rsi),%ymm2
1620299481Sjkim	vmovdqa	96-128(%rsi),%ymm3
1621299481Sjkim	vpand	0+128(%rax),%ymm0,%ymm0
1622299481Sjkim	vpand	32+128(%rax),%ymm1,%ymm1
1623299481Sjkim	vpand	64+128(%rax),%ymm2,%ymm2
1624299481Sjkim	vpor	%ymm0,%ymm1,%ymm4
1625299481Sjkim	vpand	96+128(%rax),%ymm3,%ymm3
1626299481Sjkim	vmovdqa	128-128(%rsi),%ymm0
1627299481Sjkim	vmovdqa	160-128(%rsi),%ymm1
1628299481Sjkim	vpor	%ymm2,%ymm3,%ymm5
1629299481Sjkim	vmovdqa	192-128(%rsi),%ymm2
1630299481Sjkim	vmovdqa	224-128(%rsi),%ymm3
1631299481Sjkim	vpand	128+128(%rax),%ymm0,%ymm0
1632299481Sjkim	vpand	160+128(%rax),%ymm1,%ymm1
1633299481Sjkim	vpand	192+128(%rax),%ymm2,%ymm2
1634299481Sjkim	vpor	%ymm0,%ymm4,%ymm4
1635299481Sjkim	vpand	224+128(%rax),%ymm3,%ymm3
1636299481Sjkim	vpand	256-128(%rsi),%ymm8,%ymm0
1637299481Sjkim	vpor	%ymm1,%ymm5,%ymm5
1638299481Sjkim	vpand	288-128(%rsi),%ymm9,%ymm1
1639299481Sjkim	vpor	%ymm2,%ymm4,%ymm4
1640299481Sjkim	vpand	320-128(%rsi),%ymm10,%ymm2
1641299481Sjkim	vpor	%ymm3,%ymm5,%ymm5
1642299481Sjkim	vpand	352-128(%rsi),%ymm11,%ymm3
1643299481Sjkim	vpor	%ymm0,%ymm4,%ymm4
1644299481Sjkim	vpand	384-128(%rsi),%ymm12,%ymm0
1645299481Sjkim	vpor	%ymm1,%ymm5,%ymm5
1646299481Sjkim	vpand	416-128(%rsi),%ymm13,%ymm1
1647299481Sjkim	vpor	%ymm2,%ymm4,%ymm4
1648299481Sjkim	vpand	448-128(%rsi),%ymm14,%ymm2
1649299481Sjkim	vpor	%ymm3,%ymm5,%ymm5
1650299481Sjkim	vpand	480-128(%rsi),%ymm15,%ymm3
1651299481Sjkim	leaq	512(%rsi),%rsi
1652299481Sjkim	vpor	%ymm0,%ymm4,%ymm4
1653299481Sjkim	vpor	%ymm1,%ymm5,%ymm5
1654299481Sjkim	vpor	%ymm2,%ymm4,%ymm4
1655299481Sjkim	vpor	%ymm3,%ymm5,%ymm5
1656299481Sjkim
1657299481Sjkim	vpor	%ymm5,%ymm4,%ymm4
1658299481Sjkim	vextracti128	$1,%ymm4,%xmm5
1659299481Sjkim	vpor	%xmm4,%xmm5,%xmm5
1660299481Sjkim	vpermd	%ymm5,%ymm7,%ymm5
1661299481Sjkim	vmovdqu	%ymm5,(%rdi)
1662299481Sjkim	leaq	32(%rdi),%rdi
1663299481Sjkim	decl	%edx
1664299481Sjkim	jnz	.Loop_gather_1024
1665299481Sjkim
1666299481Sjkim	vpxor	%ymm0,%ymm0,%ymm0
1667299481Sjkim	vmovdqu	%ymm0,(%rdi)
1668299481Sjkim	vzeroupper
1669299481Sjkim	leaq	(%r11),%rsp
1670290207Sjkim	.byte	0xf3,0xc3
1671299481Sjkim.size	rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2
1672299481Sjkim
1673299481Sjkim.globl	rsaz_avx2_eligible
1674299481Sjkim.type	rsaz_avx2_eligible,@function
1675299481Sjkim.align	32
1676299481Sjkimrsaz_avx2_eligible:
1677299481Sjkim	movl	OPENSSL_ia32cap_P+8(%rip),%eax
1678299481Sjkim	movl	$524544,%ecx
1679299481Sjkim	movl	$0,%edx
1680299481Sjkim	andl	%eax,%ecx
1681299481Sjkim	cmpl	$524544,%ecx
1682299481Sjkim	cmovel	%edx,%eax
1683299481Sjkim	andl	$32,%eax
1684299481Sjkim	shrl	$5,%eax
1685299481Sjkim	.byte	0xf3,0xc3
1686299481Sjkim.size	rsaz_avx2_eligible,.-rsaz_avx2_eligible
1687299481Sjkim
1688299481Sjkim.align	64
1689299481Sjkim.Land_mask:
1690326663Sjkim.quad	0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff
1691299481Sjkim.Lscatter_permd:
1692299481Sjkim.long	0,2,4,6,7,7,7,7
1693299481Sjkim.Lgather_permd:
1694299481Sjkim.long	0,7,1,7,2,7,3,7
1695299481Sjkim.Linc:
1696299481Sjkim.long	0,0,0,0, 1,1,1,1
1697299481Sjkim.long	2,2,2,2, 3,3,3,3
1698299481Sjkim.long	4,4,4,4, 4,4,4,4
1699299481Sjkim.align	64
1700