xref: /freebsd/sys/crypto/openssl/amd64/rsaz-2k-avxifma.S (revision 4757b351ea9d59d71d4a38b82506d2d16fcd560d)
1*4757b351SPierre Pronchery/* Do not modify. This file is auto-generated from rsaz-2k-avxifma.pl. */
2*4757b351SPierre Pronchery.text
3*4757b351SPierre Pronchery
4*4757b351SPierre Pronchery.globl	ossl_rsaz_avxifma_eligible
5*4757b351SPierre Pronchery.type	ossl_rsaz_avxifma_eligible,@function
6*4757b351SPierre Pronchery.align	32
7*4757b351SPierre Proncheryossl_rsaz_avxifma_eligible:
8*4757b351SPierre Pronchery	movl	OPENSSL_ia32cap_P+20(%rip),%ecx
9*4757b351SPierre Pronchery	xorl	%eax,%eax
10*4757b351SPierre Pronchery	andl	$8388608,%ecx
11*4757b351SPierre Pronchery	cmpl	$8388608,%ecx
12*4757b351SPierre Pronchery	cmovel	%ecx,%eax
13*4757b351SPierre Pronchery	.byte	0xf3,0xc3
14*4757b351SPierre Pronchery.size	ossl_rsaz_avxifma_eligible, .-ossl_rsaz_avxifma_eligible
15*4757b351SPierre Pronchery.text
16*4757b351SPierre Pronchery
17*4757b351SPierre Pronchery.globl	ossl_rsaz_amm52x20_x1_avxifma256
18*4757b351SPierre Pronchery.type	ossl_rsaz_amm52x20_x1_avxifma256,@function
19*4757b351SPierre Pronchery.align	32
20*4757b351SPierre Proncheryossl_rsaz_amm52x20_x1_avxifma256:
21*4757b351SPierre Pronchery.cfi_startproc
22*4757b351SPierre Pronchery.byte	243,15,30,250
23*4757b351SPierre Pronchery	pushq	%rbx
24*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
25*4757b351SPierre Pronchery.cfi_offset	%rbx,-16
26*4757b351SPierre Pronchery	pushq	%rbp
27*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
28*4757b351SPierre Pronchery.cfi_offset	%rbp,-24
29*4757b351SPierre Pronchery	pushq	%r12
30*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
31*4757b351SPierre Pronchery.cfi_offset	%r12,-32
32*4757b351SPierre Pronchery	pushq	%r13
33*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
34*4757b351SPierre Pronchery.cfi_offset	%r13,-40
35*4757b351SPierre Pronchery	pushq	%r14
36*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
37*4757b351SPierre Pronchery.cfi_offset	%r14,-48
38*4757b351SPierre Pronchery	pushq	%r15
39*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
40*4757b351SPierre Pronchery.cfi_offset	%r15,-56
41*4757b351SPierre Pronchery.Lossl_rsaz_amm52x20_x1_avxifma256_body:
42*4757b351SPierre Pronchery
43*4757b351SPierre Pronchery
44*4757b351SPierre Pronchery	vpxor	%ymm0,%ymm0,%ymm0
45*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm3
46*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm5
47*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm6
48*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm7
49*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm8
50*4757b351SPierre Pronchery
51*4757b351SPierre Pronchery	xorl	%r9d,%r9d
52*4757b351SPierre Pronchery
53*4757b351SPierre Pronchery	movq	%rdx,%r11
54*4757b351SPierre Pronchery	movq	$0xfffffffffffff,%rax
55*4757b351SPierre Pronchery
56*4757b351SPierre Pronchery
57*4757b351SPierre Pronchery	movl	$5,%ebx
58*4757b351SPierre Pronchery
59*4757b351SPierre Pronchery.align	32
60*4757b351SPierre Pronchery.Lloop5:
61*4757b351SPierre Pronchery	movq	0(%r11),%r13
62*4757b351SPierre Pronchery
63*4757b351SPierre Pronchery	vpbroadcastq	0(%r11),%ymm1
64*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
65*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
66*4757b351SPierre Pronchery	addq	%r13,%r9
67*4757b351SPierre Pronchery	movq	%r12,%r10
68*4757b351SPierre Pronchery	adcq	$0,%r10
69*4757b351SPierre Pronchery
70*4757b351SPierre Pronchery	movq	%r8,%r13
71*4757b351SPierre Pronchery	imulq	%r9,%r13
72*4757b351SPierre Pronchery	andq	%rax,%r13
73*4757b351SPierre Pronchery
74*4757b351SPierre Pronchery	vmovq	%r13,%xmm2
75*4757b351SPierre Pronchery	vpbroadcastq	%xmm2,%ymm2
76*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
77*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
78*4757b351SPierre Pronchery	addq	%r13,%r9
79*4757b351SPierre Pronchery	adcq	%r12,%r10
80*4757b351SPierre Pronchery
81*4757b351SPierre Pronchery	shrq	$52,%r9
82*4757b351SPierre Pronchery	salq	$12,%r10
83*4757b351SPierre Pronchery	orq	%r10,%r9
84*4757b351SPierre Pronchery
85*4757b351SPierre Pronchery	leaq	-168(%rsp),%rsp
86*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rsi),%ymm1,%ymm3
87*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rsi),%ymm1,%ymm5
88*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rsi),%ymm1,%ymm6
89*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rsi),%ymm1,%ymm7
90*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rsi),%ymm1,%ymm8
91*4757b351SPierre Pronchery
92*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rcx),%ymm2,%ymm3
93*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rcx),%ymm2,%ymm5
94*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rcx),%ymm2,%ymm6
95*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rcx),%ymm2,%ymm7
96*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rcx),%ymm2,%ymm8
97*4757b351SPierre Pronchery
98*4757b351SPierre Pronchery
99*4757b351SPierre Pronchery	vmovdqu	%ymm3,0(%rsp)
100*4757b351SPierre Pronchery	vmovdqu	%ymm5,32(%rsp)
101*4757b351SPierre Pronchery	vmovdqu	%ymm6,64(%rsp)
102*4757b351SPierre Pronchery	vmovdqu	%ymm7,96(%rsp)
103*4757b351SPierre Pronchery	vmovdqu	%ymm8,128(%rsp)
104*4757b351SPierre Pronchery	movq	$0,160(%rsp)
105*4757b351SPierre Pronchery
106*4757b351SPierre Pronchery	vmovdqu	8(%rsp),%ymm3
107*4757b351SPierre Pronchery	vmovdqu	40(%rsp),%ymm5
108*4757b351SPierre Pronchery	vmovdqu	72(%rsp),%ymm6
109*4757b351SPierre Pronchery	vmovdqu	104(%rsp),%ymm7
110*4757b351SPierre Pronchery	vmovdqu	136(%rsp),%ymm8
111*4757b351SPierre Pronchery
112*4757b351SPierre Pronchery	addq	8(%rsp),%r9
113*4757b351SPierre Pronchery
114*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rsi),%ymm1,%ymm3
115*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rsi),%ymm1,%ymm5
116*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rsi),%ymm1,%ymm6
117*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rsi),%ymm1,%ymm7
118*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rsi),%ymm1,%ymm8
119*4757b351SPierre Pronchery
120*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rcx),%ymm2,%ymm3
121*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rcx),%ymm2,%ymm5
122*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rcx),%ymm2,%ymm6
123*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rcx),%ymm2,%ymm7
124*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rcx),%ymm2,%ymm8
125*4757b351SPierre Pronchery	leaq	168(%rsp),%rsp
126*4757b351SPierre Pronchery	movq	8(%r11),%r13
127*4757b351SPierre Pronchery
128*4757b351SPierre Pronchery	vpbroadcastq	8(%r11),%ymm1
129*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
130*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
131*4757b351SPierre Pronchery	addq	%r13,%r9
132*4757b351SPierre Pronchery	movq	%r12,%r10
133*4757b351SPierre Pronchery	adcq	$0,%r10
134*4757b351SPierre Pronchery
135*4757b351SPierre Pronchery	movq	%r8,%r13
136*4757b351SPierre Pronchery	imulq	%r9,%r13
137*4757b351SPierre Pronchery	andq	%rax,%r13
138*4757b351SPierre Pronchery
139*4757b351SPierre Pronchery	vmovq	%r13,%xmm2
140*4757b351SPierre Pronchery	vpbroadcastq	%xmm2,%ymm2
141*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
142*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
143*4757b351SPierre Pronchery	addq	%r13,%r9
144*4757b351SPierre Pronchery	adcq	%r12,%r10
145*4757b351SPierre Pronchery
146*4757b351SPierre Pronchery	shrq	$52,%r9
147*4757b351SPierre Pronchery	salq	$12,%r10
148*4757b351SPierre Pronchery	orq	%r10,%r9
149*4757b351SPierre Pronchery
150*4757b351SPierre Pronchery	leaq	-168(%rsp),%rsp
151*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rsi),%ymm1,%ymm3
152*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rsi),%ymm1,%ymm5
153*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rsi),%ymm1,%ymm6
154*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rsi),%ymm1,%ymm7
155*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rsi),%ymm1,%ymm8
156*4757b351SPierre Pronchery
157*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rcx),%ymm2,%ymm3
158*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rcx),%ymm2,%ymm5
159*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rcx),%ymm2,%ymm6
160*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rcx),%ymm2,%ymm7
161*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rcx),%ymm2,%ymm8
162*4757b351SPierre Pronchery
163*4757b351SPierre Pronchery
164*4757b351SPierre Pronchery	vmovdqu	%ymm3,0(%rsp)
165*4757b351SPierre Pronchery	vmovdqu	%ymm5,32(%rsp)
166*4757b351SPierre Pronchery	vmovdqu	%ymm6,64(%rsp)
167*4757b351SPierre Pronchery	vmovdqu	%ymm7,96(%rsp)
168*4757b351SPierre Pronchery	vmovdqu	%ymm8,128(%rsp)
169*4757b351SPierre Pronchery	movq	$0,160(%rsp)
170*4757b351SPierre Pronchery
171*4757b351SPierre Pronchery	vmovdqu	8(%rsp),%ymm3
172*4757b351SPierre Pronchery	vmovdqu	40(%rsp),%ymm5
173*4757b351SPierre Pronchery	vmovdqu	72(%rsp),%ymm6
174*4757b351SPierre Pronchery	vmovdqu	104(%rsp),%ymm7
175*4757b351SPierre Pronchery	vmovdqu	136(%rsp),%ymm8
176*4757b351SPierre Pronchery
177*4757b351SPierre Pronchery	addq	8(%rsp),%r9
178*4757b351SPierre Pronchery
179*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rsi),%ymm1,%ymm3
180*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rsi),%ymm1,%ymm5
181*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rsi),%ymm1,%ymm6
182*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rsi),%ymm1,%ymm7
183*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rsi),%ymm1,%ymm8
184*4757b351SPierre Pronchery
185*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rcx),%ymm2,%ymm3
186*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rcx),%ymm2,%ymm5
187*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rcx),%ymm2,%ymm6
188*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rcx),%ymm2,%ymm7
189*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rcx),%ymm2,%ymm8
190*4757b351SPierre Pronchery	leaq	168(%rsp),%rsp
191*4757b351SPierre Pronchery	movq	16(%r11),%r13
192*4757b351SPierre Pronchery
193*4757b351SPierre Pronchery	vpbroadcastq	16(%r11),%ymm1
194*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
195*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
196*4757b351SPierre Pronchery	addq	%r13,%r9
197*4757b351SPierre Pronchery	movq	%r12,%r10
198*4757b351SPierre Pronchery	adcq	$0,%r10
199*4757b351SPierre Pronchery
200*4757b351SPierre Pronchery	movq	%r8,%r13
201*4757b351SPierre Pronchery	imulq	%r9,%r13
202*4757b351SPierre Pronchery	andq	%rax,%r13
203*4757b351SPierre Pronchery
204*4757b351SPierre Pronchery	vmovq	%r13,%xmm2
205*4757b351SPierre Pronchery	vpbroadcastq	%xmm2,%ymm2
206*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
207*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
208*4757b351SPierre Pronchery	addq	%r13,%r9
209*4757b351SPierre Pronchery	adcq	%r12,%r10
210*4757b351SPierre Pronchery
211*4757b351SPierre Pronchery	shrq	$52,%r9
212*4757b351SPierre Pronchery	salq	$12,%r10
213*4757b351SPierre Pronchery	orq	%r10,%r9
214*4757b351SPierre Pronchery
215*4757b351SPierre Pronchery	leaq	-168(%rsp),%rsp
216*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rsi),%ymm1,%ymm3
217*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rsi),%ymm1,%ymm5
218*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rsi),%ymm1,%ymm6
219*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rsi),%ymm1,%ymm7
220*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rsi),%ymm1,%ymm8
221*4757b351SPierre Pronchery
222*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rcx),%ymm2,%ymm3
223*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rcx),%ymm2,%ymm5
224*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rcx),%ymm2,%ymm6
225*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rcx),%ymm2,%ymm7
226*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rcx),%ymm2,%ymm8
227*4757b351SPierre Pronchery
228*4757b351SPierre Pronchery
229*4757b351SPierre Pronchery	vmovdqu	%ymm3,0(%rsp)
230*4757b351SPierre Pronchery	vmovdqu	%ymm5,32(%rsp)
231*4757b351SPierre Pronchery	vmovdqu	%ymm6,64(%rsp)
232*4757b351SPierre Pronchery	vmovdqu	%ymm7,96(%rsp)
233*4757b351SPierre Pronchery	vmovdqu	%ymm8,128(%rsp)
234*4757b351SPierre Pronchery	movq	$0,160(%rsp)
235*4757b351SPierre Pronchery
236*4757b351SPierre Pronchery	vmovdqu	8(%rsp),%ymm3
237*4757b351SPierre Pronchery	vmovdqu	40(%rsp),%ymm5
238*4757b351SPierre Pronchery	vmovdqu	72(%rsp),%ymm6
239*4757b351SPierre Pronchery	vmovdqu	104(%rsp),%ymm7
240*4757b351SPierre Pronchery	vmovdqu	136(%rsp),%ymm8
241*4757b351SPierre Pronchery
242*4757b351SPierre Pronchery	addq	8(%rsp),%r9
243*4757b351SPierre Pronchery
244*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rsi),%ymm1,%ymm3
245*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rsi),%ymm1,%ymm5
246*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rsi),%ymm1,%ymm6
247*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rsi),%ymm1,%ymm7
248*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rsi),%ymm1,%ymm8
249*4757b351SPierre Pronchery
250*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rcx),%ymm2,%ymm3
251*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rcx),%ymm2,%ymm5
252*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rcx),%ymm2,%ymm6
253*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rcx),%ymm2,%ymm7
254*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rcx),%ymm2,%ymm8
255*4757b351SPierre Pronchery	leaq	168(%rsp),%rsp
256*4757b351SPierre Pronchery	movq	24(%r11),%r13
257*4757b351SPierre Pronchery
258*4757b351SPierre Pronchery	vpbroadcastq	24(%r11),%ymm1
259*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
260*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
261*4757b351SPierre Pronchery	addq	%r13,%r9
262*4757b351SPierre Pronchery	movq	%r12,%r10
263*4757b351SPierre Pronchery	adcq	$0,%r10
264*4757b351SPierre Pronchery
265*4757b351SPierre Pronchery	movq	%r8,%r13
266*4757b351SPierre Pronchery	imulq	%r9,%r13
267*4757b351SPierre Pronchery	andq	%rax,%r13
268*4757b351SPierre Pronchery
269*4757b351SPierre Pronchery	vmovq	%r13,%xmm2
270*4757b351SPierre Pronchery	vpbroadcastq	%xmm2,%ymm2
271*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
272*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
273*4757b351SPierre Pronchery	addq	%r13,%r9
274*4757b351SPierre Pronchery	adcq	%r12,%r10
275*4757b351SPierre Pronchery
276*4757b351SPierre Pronchery	shrq	$52,%r9
277*4757b351SPierre Pronchery	salq	$12,%r10
278*4757b351SPierre Pronchery	orq	%r10,%r9
279*4757b351SPierre Pronchery
280*4757b351SPierre Pronchery	leaq	-168(%rsp),%rsp
281*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rsi),%ymm1,%ymm3
282*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rsi),%ymm1,%ymm5
283*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rsi),%ymm1,%ymm6
284*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rsi),%ymm1,%ymm7
285*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rsi),%ymm1,%ymm8
286*4757b351SPierre Pronchery
287*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rcx),%ymm2,%ymm3
288*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rcx),%ymm2,%ymm5
289*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rcx),%ymm2,%ymm6
290*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rcx),%ymm2,%ymm7
291*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rcx),%ymm2,%ymm8
292*4757b351SPierre Pronchery
293*4757b351SPierre Pronchery
294*4757b351SPierre Pronchery	vmovdqu	%ymm3,0(%rsp)
295*4757b351SPierre Pronchery	vmovdqu	%ymm5,32(%rsp)
296*4757b351SPierre Pronchery	vmovdqu	%ymm6,64(%rsp)
297*4757b351SPierre Pronchery	vmovdqu	%ymm7,96(%rsp)
298*4757b351SPierre Pronchery	vmovdqu	%ymm8,128(%rsp)
299*4757b351SPierre Pronchery	movq	$0,160(%rsp)
300*4757b351SPierre Pronchery
301*4757b351SPierre Pronchery	vmovdqu	8(%rsp),%ymm3
302*4757b351SPierre Pronchery	vmovdqu	40(%rsp),%ymm5
303*4757b351SPierre Pronchery	vmovdqu	72(%rsp),%ymm6
304*4757b351SPierre Pronchery	vmovdqu	104(%rsp),%ymm7
305*4757b351SPierre Pronchery	vmovdqu	136(%rsp),%ymm8
306*4757b351SPierre Pronchery
307*4757b351SPierre Pronchery	addq	8(%rsp),%r9
308*4757b351SPierre Pronchery
309*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rsi),%ymm1,%ymm3
310*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rsi),%ymm1,%ymm5
311*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rsi),%ymm1,%ymm6
312*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rsi),%ymm1,%ymm7
313*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rsi),%ymm1,%ymm8
314*4757b351SPierre Pronchery
315*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rcx),%ymm2,%ymm3
316*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rcx),%ymm2,%ymm5
317*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rcx),%ymm2,%ymm6
318*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rcx),%ymm2,%ymm7
319*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rcx),%ymm2,%ymm8
320*4757b351SPierre Pronchery	leaq	168(%rsp),%rsp
321*4757b351SPierre Pronchery	leaq	32(%r11),%r11
322*4757b351SPierre Pronchery	decl	%ebx
323*4757b351SPierre Pronchery	jne	.Lloop5
324*4757b351SPierre Pronchery
325*4757b351SPierre Pronchery	vmovq	%r9,%xmm0
326*4757b351SPierre Pronchery	vpbroadcastq	%xmm0,%ymm0
327*4757b351SPierre Pronchery	vpblendd	$3,%ymm0,%ymm3,%ymm3
328*4757b351SPierre Pronchery
329*4757b351SPierre Pronchery
330*4757b351SPierre Pronchery
331*4757b351SPierre Pronchery	vpsrlq	$52,%ymm3,%ymm0
332*4757b351SPierre Pronchery	vpsrlq	$52,%ymm5,%ymm1
333*4757b351SPierre Pronchery	vpsrlq	$52,%ymm6,%ymm2
334*4757b351SPierre Pronchery	vpsrlq	$52,%ymm7,%ymm13
335*4757b351SPierre Pronchery	vpsrlq	$52,%ymm8,%ymm14
336*4757b351SPierre Pronchery
337*4757b351SPierre Pronchery
338*4757b351SPierre Pronchery	vpermq	$144,%ymm14,%ymm14
339*4757b351SPierre Pronchery	vpermq	$3,%ymm13,%ymm15
340*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm14,%ymm14
341*4757b351SPierre Pronchery
342*4757b351SPierre Pronchery	vpermq	$144,%ymm13,%ymm13
343*4757b351SPierre Pronchery	vpermq	$3,%ymm2,%ymm15
344*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm13,%ymm13
345*4757b351SPierre Pronchery
346*4757b351SPierre Pronchery	vpermq	$144,%ymm2,%ymm2
347*4757b351SPierre Pronchery	vpermq	$3,%ymm1,%ymm15
348*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm2,%ymm2
349*4757b351SPierre Pronchery
350*4757b351SPierre Pronchery	vpermq	$144,%ymm1,%ymm1
351*4757b351SPierre Pronchery	vpermq	$3,%ymm0,%ymm15
352*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm1,%ymm1
353*4757b351SPierre Pronchery
354*4757b351SPierre Pronchery	vpermq	$144,%ymm0,%ymm0
355*4757b351SPierre Pronchery	vpand	.Lhigh64x3(%rip),%ymm0,%ymm0
356*4757b351SPierre Pronchery
357*4757b351SPierre Pronchery
358*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm3,%ymm3
359*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm5,%ymm5
360*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm6,%ymm6
361*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm7,%ymm7
362*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm8,%ymm8
363*4757b351SPierre Pronchery
364*4757b351SPierre Pronchery
365*4757b351SPierre Pronchery	vpaddq	%ymm0,%ymm3,%ymm3
366*4757b351SPierre Pronchery	vpaddq	%ymm1,%ymm5,%ymm5
367*4757b351SPierre Pronchery	vpaddq	%ymm2,%ymm6,%ymm6
368*4757b351SPierre Pronchery	vpaddq	%ymm13,%ymm7,%ymm7
369*4757b351SPierre Pronchery	vpaddq	%ymm14,%ymm8,%ymm8
370*4757b351SPierre Pronchery
371*4757b351SPierre Pronchery
372*4757b351SPierre Pronchery
373*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm3,%ymm0
374*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm5,%ymm1
375*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm6,%ymm2
376*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm7,%ymm13
377*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm8,%ymm14
378*4757b351SPierre Pronchery	vmovmskpd	%ymm0,%r14d
379*4757b351SPierre Pronchery	vmovmskpd	%ymm1,%r13d
380*4757b351SPierre Pronchery	vmovmskpd	%ymm2,%r12d
381*4757b351SPierre Pronchery	vmovmskpd	%ymm13,%r11d
382*4757b351SPierre Pronchery	vmovmskpd	%ymm14,%r10d
383*4757b351SPierre Pronchery
384*4757b351SPierre Pronchery
385*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm3,%ymm0
386*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm5,%ymm1
387*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm6,%ymm2
388*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm7,%ymm13
389*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm8,%ymm14
390*4757b351SPierre Pronchery	vmovmskpd	%ymm0,%r9d
391*4757b351SPierre Pronchery	vmovmskpd	%ymm1,%r8d
392*4757b351SPierre Pronchery	vmovmskpd	%ymm2,%ebx
393*4757b351SPierre Pronchery	vmovmskpd	%ymm13,%ecx
394*4757b351SPierre Pronchery	vmovmskpd	%ymm14,%edx
395*4757b351SPierre Pronchery
396*4757b351SPierre Pronchery
397*4757b351SPierre Pronchery
398*4757b351SPierre Pronchery	shlb	$4,%r13b
399*4757b351SPierre Pronchery	orb	%r13b,%r14b
400*4757b351SPierre Pronchery	shlb	$4,%r11b
401*4757b351SPierre Pronchery	orb	%r11b,%r12b
402*4757b351SPierre Pronchery
403*4757b351SPierre Pronchery	addb	%r14b,%r14b
404*4757b351SPierre Pronchery	adcb	%r12b,%r12b
405*4757b351SPierre Pronchery	adcb	%r10b,%r10b
406*4757b351SPierre Pronchery
407*4757b351SPierre Pronchery	shlb	$4,%r8b
408*4757b351SPierre Pronchery	orb	%r8b,%r9b
409*4757b351SPierre Pronchery	shlb	$4,%cl
410*4757b351SPierre Pronchery	orb	%cl,%bl
411*4757b351SPierre Pronchery
412*4757b351SPierre Pronchery	addb	%r9b,%r14b
413*4757b351SPierre Pronchery	adcb	%bl,%r12b
414*4757b351SPierre Pronchery	adcb	%dl,%r10b
415*4757b351SPierre Pronchery
416*4757b351SPierre Pronchery	xorb	%r9b,%r14b
417*4757b351SPierre Pronchery	xorb	%bl,%r12b
418*4757b351SPierre Pronchery	xorb	%dl,%r10b
419*4757b351SPierre Pronchery
420*4757b351SPierre Pronchery	leaq	.Lkmasklut(%rip),%rdx
421*4757b351SPierre Pronchery
422*4757b351SPierre Pronchery	movb	%r14b,%r13b
423*4757b351SPierre Pronchery	andq	$0xf,%r14
424*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm3,%ymm0
425*4757b351SPierre Pronchery	shlq	$5,%r14
426*4757b351SPierre Pronchery	vmovapd	(%rdx,%r14,1),%ymm2
427*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm3,%ymm3
428*4757b351SPierre Pronchery
429*4757b351SPierre Pronchery	shrb	$4,%r13b
430*4757b351SPierre Pronchery	andq	$0xf,%r13
431*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm5,%ymm0
432*4757b351SPierre Pronchery	shlq	$5,%r13
433*4757b351SPierre Pronchery	vmovapd	(%rdx,%r13,1),%ymm2
434*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm5,%ymm5
435*4757b351SPierre Pronchery
436*4757b351SPierre Pronchery	movb	%r12b,%r11b
437*4757b351SPierre Pronchery	andq	$0xf,%r12
438*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm6,%ymm0
439*4757b351SPierre Pronchery	shlq	$5,%r12
440*4757b351SPierre Pronchery	vmovapd	(%rdx,%r12,1),%ymm2
441*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm6,%ymm6
442*4757b351SPierre Pronchery
443*4757b351SPierre Pronchery	shrb	$4,%r11b
444*4757b351SPierre Pronchery	andq	$0xf,%r11
445*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm7,%ymm0
446*4757b351SPierre Pronchery	shlq	$5,%r11
447*4757b351SPierre Pronchery	vmovapd	(%rdx,%r11,1),%ymm2
448*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm7,%ymm7
449*4757b351SPierre Pronchery
450*4757b351SPierre Pronchery	andq	$0xf,%r10
451*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm8,%ymm0
452*4757b351SPierre Pronchery	shlq	$5,%r10
453*4757b351SPierre Pronchery	vmovapd	(%rdx,%r10,1),%ymm2
454*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm8,%ymm8
455*4757b351SPierre Pronchery
456*4757b351SPierre Pronchery
457*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm3,%ymm3
458*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm5,%ymm5
459*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm6,%ymm6
460*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm7,%ymm7
461*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm8,%ymm8
462*4757b351SPierre Pronchery
463*4757b351SPierre Pronchery	vmovdqu	%ymm3,0(%rdi)
464*4757b351SPierre Pronchery	vmovdqu	%ymm5,32(%rdi)
465*4757b351SPierre Pronchery	vmovdqu	%ymm6,64(%rdi)
466*4757b351SPierre Pronchery	vmovdqu	%ymm7,96(%rdi)
467*4757b351SPierre Pronchery	vmovdqu	%ymm8,128(%rdi)
468*4757b351SPierre Pronchery
469*4757b351SPierre Pronchery	vzeroupper
470*4757b351SPierre Pronchery	movq	0(%rsp),%r15
471*4757b351SPierre Pronchery.cfi_restore	%r15
472*4757b351SPierre Pronchery	movq	8(%rsp),%r14
473*4757b351SPierre Pronchery.cfi_restore	%r14
474*4757b351SPierre Pronchery	movq	16(%rsp),%r13
475*4757b351SPierre Pronchery.cfi_restore	%r13
476*4757b351SPierre Pronchery	movq	24(%rsp),%r12
477*4757b351SPierre Pronchery.cfi_restore	%r12
478*4757b351SPierre Pronchery	movq	32(%rsp),%rbp
479*4757b351SPierre Pronchery.cfi_restore	%rbp
480*4757b351SPierre Pronchery	movq	40(%rsp),%rbx
481*4757b351SPierre Pronchery.cfi_restore	%rbx
482*4757b351SPierre Pronchery	leaq	48(%rsp),%rsp
483*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	-48
484*4757b351SPierre Pronchery.Lossl_rsaz_amm52x20_x1_avxifma256_epilogue:
485*4757b351SPierre Pronchery	.byte	0xf3,0xc3
486*4757b351SPierre Pronchery.cfi_endproc
487*4757b351SPierre Pronchery.size	ossl_rsaz_amm52x20_x1_avxifma256, .-ossl_rsaz_amm52x20_x1_avxifma256
488*4757b351SPierre Pronchery.section	.rodata
489*4757b351SPierre Pronchery.align	32
490*4757b351SPierre Pronchery.Lmask52x4:
491*4757b351SPierre Pronchery.quad	0xfffffffffffff
492*4757b351SPierre Pronchery.quad	0xfffffffffffff
493*4757b351SPierre Pronchery.quad	0xfffffffffffff
494*4757b351SPierre Pronchery.quad	0xfffffffffffff
495*4757b351SPierre Pronchery.Lhigh64x3:
496*4757b351SPierre Pronchery.quad	0x0
497*4757b351SPierre Pronchery.quad	0xffffffffffffffff
498*4757b351SPierre Pronchery.quad	0xffffffffffffffff
499*4757b351SPierre Pronchery.quad	0xffffffffffffffff
500*4757b351SPierre Pronchery.Lkmasklut:
501*4757b351SPierre Pronchery
502*4757b351SPierre Pronchery.quad	0x0
503*4757b351SPierre Pronchery.quad	0x0
504*4757b351SPierre Pronchery.quad	0x0
505*4757b351SPierre Pronchery.quad	0x0
506*4757b351SPierre Pronchery
507*4757b351SPierre Pronchery.quad	0xffffffffffffffff
508*4757b351SPierre Pronchery.quad	0x0
509*4757b351SPierre Pronchery.quad	0x0
510*4757b351SPierre Pronchery.quad	0x0
511*4757b351SPierre Pronchery
512*4757b351SPierre Pronchery.quad	0x0
513*4757b351SPierre Pronchery.quad	0xffffffffffffffff
514*4757b351SPierre Pronchery.quad	0x0
515*4757b351SPierre Pronchery.quad	0x0
516*4757b351SPierre Pronchery
517*4757b351SPierre Pronchery.quad	0xffffffffffffffff
518*4757b351SPierre Pronchery.quad	0xffffffffffffffff
519*4757b351SPierre Pronchery.quad	0x0
520*4757b351SPierre Pronchery.quad	0x0
521*4757b351SPierre Pronchery
522*4757b351SPierre Pronchery.quad	0x0
523*4757b351SPierre Pronchery.quad	0x0
524*4757b351SPierre Pronchery.quad	0xffffffffffffffff
525*4757b351SPierre Pronchery.quad	0x0
526*4757b351SPierre Pronchery
527*4757b351SPierre Pronchery.quad	0xffffffffffffffff
528*4757b351SPierre Pronchery.quad	0x0
529*4757b351SPierre Pronchery.quad	0xffffffffffffffff
530*4757b351SPierre Pronchery.quad	0x0
531*4757b351SPierre Pronchery
532*4757b351SPierre Pronchery.quad	0x0
533*4757b351SPierre Pronchery.quad	0xffffffffffffffff
534*4757b351SPierre Pronchery.quad	0xffffffffffffffff
535*4757b351SPierre Pronchery.quad	0x0
536*4757b351SPierre Pronchery
537*4757b351SPierre Pronchery.quad	0xffffffffffffffff
538*4757b351SPierre Pronchery.quad	0xffffffffffffffff
539*4757b351SPierre Pronchery.quad	0xffffffffffffffff
540*4757b351SPierre Pronchery.quad	0x0
541*4757b351SPierre Pronchery
542*4757b351SPierre Pronchery.quad	0x0
543*4757b351SPierre Pronchery.quad	0x0
544*4757b351SPierre Pronchery.quad	0x0
545*4757b351SPierre Pronchery.quad	0xffffffffffffffff
546*4757b351SPierre Pronchery
547*4757b351SPierre Pronchery.quad	0xffffffffffffffff
548*4757b351SPierre Pronchery.quad	0x0
549*4757b351SPierre Pronchery.quad	0x0
550*4757b351SPierre Pronchery.quad	0xffffffffffffffff
551*4757b351SPierre Pronchery
552*4757b351SPierre Pronchery.quad	0x0
553*4757b351SPierre Pronchery.quad	0xffffffffffffffff
554*4757b351SPierre Pronchery.quad	0x0
555*4757b351SPierre Pronchery.quad	0xffffffffffffffff
556*4757b351SPierre Pronchery
557*4757b351SPierre Pronchery.quad	0xffffffffffffffff
558*4757b351SPierre Pronchery.quad	0xffffffffffffffff
559*4757b351SPierre Pronchery.quad	0x0
560*4757b351SPierre Pronchery.quad	0xffffffffffffffff
561*4757b351SPierre Pronchery
562*4757b351SPierre Pronchery.quad	0x0
563*4757b351SPierre Pronchery.quad	0x0
564*4757b351SPierre Pronchery.quad	0xffffffffffffffff
565*4757b351SPierre Pronchery.quad	0xffffffffffffffff
566*4757b351SPierre Pronchery
567*4757b351SPierre Pronchery.quad	0xffffffffffffffff
568*4757b351SPierre Pronchery.quad	0x0
569*4757b351SPierre Pronchery.quad	0xffffffffffffffff
570*4757b351SPierre Pronchery.quad	0xffffffffffffffff
571*4757b351SPierre Pronchery
572*4757b351SPierre Pronchery.quad	0x0
573*4757b351SPierre Pronchery.quad	0xffffffffffffffff
574*4757b351SPierre Pronchery.quad	0xffffffffffffffff
575*4757b351SPierre Pronchery.quad	0xffffffffffffffff
576*4757b351SPierre Pronchery
577*4757b351SPierre Pronchery.quad	0xffffffffffffffff
578*4757b351SPierre Pronchery.quad	0xffffffffffffffff
579*4757b351SPierre Pronchery.quad	0xffffffffffffffff
580*4757b351SPierre Pronchery.quad	0xffffffffffffffff
581*4757b351SPierre Pronchery.text
582*4757b351SPierre Pronchery
583*4757b351SPierre Pronchery.globl	ossl_rsaz_amm52x20_x2_avxifma256
584*4757b351SPierre Pronchery.type	ossl_rsaz_amm52x20_x2_avxifma256,@function
585*4757b351SPierre Pronchery.align	32
586*4757b351SPierre Proncheryossl_rsaz_amm52x20_x2_avxifma256:
587*4757b351SPierre Pronchery.cfi_startproc
588*4757b351SPierre Pronchery.byte	243,15,30,250
589*4757b351SPierre Pronchery	pushq	%rbx
590*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
591*4757b351SPierre Pronchery.cfi_offset	%rbx,-16
592*4757b351SPierre Pronchery	pushq	%rbp
593*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
594*4757b351SPierre Pronchery.cfi_offset	%rbp,-24
595*4757b351SPierre Pronchery	pushq	%r12
596*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
597*4757b351SPierre Pronchery.cfi_offset	%r12,-32
598*4757b351SPierre Pronchery	pushq	%r13
599*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
600*4757b351SPierre Pronchery.cfi_offset	%r13,-40
601*4757b351SPierre Pronchery	pushq	%r14
602*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
603*4757b351SPierre Pronchery.cfi_offset	%r14,-48
604*4757b351SPierre Pronchery	pushq	%r15
605*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
606*4757b351SPierre Pronchery.cfi_offset	%r15,-56
607*4757b351SPierre Pronchery.Lossl_rsaz_amm52x20_x2_avxifma256_body:
608*4757b351SPierre Pronchery
609*4757b351SPierre Pronchery
610*4757b351SPierre Pronchery	vpxor	%ymm0,%ymm0,%ymm0
611*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm3
612*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm5
613*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm6
614*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm7
615*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm8
616*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm4
617*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm9
618*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm10
619*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm11
620*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm12
621*4757b351SPierre Pronchery
622*4757b351SPierre Pronchery	xorl	%r9d,%r9d
623*4757b351SPierre Pronchery	xorl	%r15d,%r15d
624*4757b351SPierre Pronchery
625*4757b351SPierre Pronchery	movq	%rdx,%r11
626*4757b351SPierre Pronchery	movq	$0xfffffffffffff,%rax
627*4757b351SPierre Pronchery
628*4757b351SPierre Pronchery	movl	$20,%ebx
629*4757b351SPierre Pronchery
630*4757b351SPierre Pronchery.align	32
631*4757b351SPierre Pronchery.Lloop20:
632*4757b351SPierre Pronchery	movq	0(%r11),%r13
633*4757b351SPierre Pronchery
634*4757b351SPierre Pronchery	vpbroadcastq	0(%r11),%ymm1
635*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
636*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
637*4757b351SPierre Pronchery	addq	%r13,%r9
638*4757b351SPierre Pronchery	movq	%r12,%r10
639*4757b351SPierre Pronchery	adcq	$0,%r10
640*4757b351SPierre Pronchery
641*4757b351SPierre Pronchery	movq	(%r8),%r13
642*4757b351SPierre Pronchery	imulq	%r9,%r13
643*4757b351SPierre Pronchery	andq	%rax,%r13
644*4757b351SPierre Pronchery
645*4757b351SPierre Pronchery	vmovq	%r13,%xmm2
646*4757b351SPierre Pronchery	vpbroadcastq	%xmm2,%ymm2
647*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
648*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
649*4757b351SPierre Pronchery	addq	%r13,%r9
650*4757b351SPierre Pronchery	adcq	%r12,%r10
651*4757b351SPierre Pronchery
652*4757b351SPierre Pronchery	shrq	$52,%r9
653*4757b351SPierre Pronchery	salq	$12,%r10
654*4757b351SPierre Pronchery	orq	%r10,%r9
655*4757b351SPierre Pronchery
656*4757b351SPierre Pronchery	leaq	-168(%rsp),%rsp
657*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rsi),%ymm1,%ymm3
658*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rsi),%ymm1,%ymm5
659*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rsi),%ymm1,%ymm6
660*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rsi),%ymm1,%ymm7
661*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rsi),%ymm1,%ymm8
662*4757b351SPierre Pronchery
663*4757b351SPierre Pronchery{vex}	vpmadd52luq	0(%rcx),%ymm2,%ymm3
664*4757b351SPierre Pronchery{vex}	vpmadd52luq	32(%rcx),%ymm2,%ymm5
665*4757b351SPierre Pronchery{vex}	vpmadd52luq	64(%rcx),%ymm2,%ymm6
666*4757b351SPierre Pronchery{vex}	vpmadd52luq	96(%rcx),%ymm2,%ymm7
667*4757b351SPierre Pronchery{vex}	vpmadd52luq	128(%rcx),%ymm2,%ymm8
668*4757b351SPierre Pronchery
669*4757b351SPierre Pronchery
670*4757b351SPierre Pronchery	vmovdqu	%ymm3,0(%rsp)
671*4757b351SPierre Pronchery	vmovdqu	%ymm5,32(%rsp)
672*4757b351SPierre Pronchery	vmovdqu	%ymm6,64(%rsp)
673*4757b351SPierre Pronchery	vmovdqu	%ymm7,96(%rsp)
674*4757b351SPierre Pronchery	vmovdqu	%ymm8,128(%rsp)
675*4757b351SPierre Pronchery	movq	$0,160(%rsp)
676*4757b351SPierre Pronchery
677*4757b351SPierre Pronchery	vmovdqu	8(%rsp),%ymm3
678*4757b351SPierre Pronchery	vmovdqu	40(%rsp),%ymm5
679*4757b351SPierre Pronchery	vmovdqu	72(%rsp),%ymm6
680*4757b351SPierre Pronchery	vmovdqu	104(%rsp),%ymm7
681*4757b351SPierre Pronchery	vmovdqu	136(%rsp),%ymm8
682*4757b351SPierre Pronchery
683*4757b351SPierre Pronchery	addq	8(%rsp),%r9
684*4757b351SPierre Pronchery
685*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rsi),%ymm1,%ymm3
686*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rsi),%ymm1,%ymm5
687*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rsi),%ymm1,%ymm6
688*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rsi),%ymm1,%ymm7
689*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rsi),%ymm1,%ymm8
690*4757b351SPierre Pronchery
691*4757b351SPierre Pronchery{vex}	vpmadd52huq	0(%rcx),%ymm2,%ymm3
692*4757b351SPierre Pronchery{vex}	vpmadd52huq	32(%rcx),%ymm2,%ymm5
693*4757b351SPierre Pronchery{vex}	vpmadd52huq	64(%rcx),%ymm2,%ymm6
694*4757b351SPierre Pronchery{vex}	vpmadd52huq	96(%rcx),%ymm2,%ymm7
695*4757b351SPierre Pronchery{vex}	vpmadd52huq	128(%rcx),%ymm2,%ymm8
696*4757b351SPierre Pronchery	leaq	168(%rsp),%rsp
697*4757b351SPierre Pronchery	movq	160(%r11),%r13
698*4757b351SPierre Pronchery
699*4757b351SPierre Pronchery	vpbroadcastq	160(%r11),%ymm1
700*4757b351SPierre Pronchery	movq	160(%rsi),%rdx
701*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
702*4757b351SPierre Pronchery	addq	%r13,%r15
703*4757b351SPierre Pronchery	movq	%r12,%r10
704*4757b351SPierre Pronchery	adcq	$0,%r10
705*4757b351SPierre Pronchery
706*4757b351SPierre Pronchery	movq	8(%r8),%r13
707*4757b351SPierre Pronchery	imulq	%r15,%r13
708*4757b351SPierre Pronchery	andq	%rax,%r13
709*4757b351SPierre Pronchery
710*4757b351SPierre Pronchery	vmovq	%r13,%xmm2
711*4757b351SPierre Pronchery	vpbroadcastq	%xmm2,%ymm2
712*4757b351SPierre Pronchery	movq	160(%rcx),%rdx
713*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
714*4757b351SPierre Pronchery	addq	%r13,%r15
715*4757b351SPierre Pronchery	adcq	%r12,%r10
716*4757b351SPierre Pronchery
717*4757b351SPierre Pronchery	shrq	$52,%r15
718*4757b351SPierre Pronchery	salq	$12,%r10
719*4757b351SPierre Pronchery	orq	%r10,%r15
720*4757b351SPierre Pronchery
721*4757b351SPierre Pronchery	leaq	-168(%rsp),%rsp
722*4757b351SPierre Pronchery{vex}	vpmadd52luq	160(%rsi),%ymm1,%ymm4
723*4757b351SPierre Pronchery{vex}	vpmadd52luq	192(%rsi),%ymm1,%ymm9
724*4757b351SPierre Pronchery{vex}	vpmadd52luq	224(%rsi),%ymm1,%ymm10
725*4757b351SPierre Pronchery{vex}	vpmadd52luq	256(%rsi),%ymm1,%ymm11
726*4757b351SPierre Pronchery{vex}	vpmadd52luq	288(%rsi),%ymm1,%ymm12
727*4757b351SPierre Pronchery
728*4757b351SPierre Pronchery{vex}	vpmadd52luq	160(%rcx),%ymm2,%ymm4
729*4757b351SPierre Pronchery{vex}	vpmadd52luq	192(%rcx),%ymm2,%ymm9
730*4757b351SPierre Pronchery{vex}	vpmadd52luq	224(%rcx),%ymm2,%ymm10
731*4757b351SPierre Pronchery{vex}	vpmadd52luq	256(%rcx),%ymm2,%ymm11
732*4757b351SPierre Pronchery{vex}	vpmadd52luq	288(%rcx),%ymm2,%ymm12
733*4757b351SPierre Pronchery
734*4757b351SPierre Pronchery
735*4757b351SPierre Pronchery	vmovdqu	%ymm4,0(%rsp)
736*4757b351SPierre Pronchery	vmovdqu	%ymm9,32(%rsp)
737*4757b351SPierre Pronchery	vmovdqu	%ymm10,64(%rsp)
738*4757b351SPierre Pronchery	vmovdqu	%ymm11,96(%rsp)
739*4757b351SPierre Pronchery	vmovdqu	%ymm12,128(%rsp)
740*4757b351SPierre Pronchery	movq	$0,160(%rsp)
741*4757b351SPierre Pronchery
742*4757b351SPierre Pronchery	vmovdqu	8(%rsp),%ymm4
743*4757b351SPierre Pronchery	vmovdqu	40(%rsp),%ymm9
744*4757b351SPierre Pronchery	vmovdqu	72(%rsp),%ymm10
745*4757b351SPierre Pronchery	vmovdqu	104(%rsp),%ymm11
746*4757b351SPierre Pronchery	vmovdqu	136(%rsp),%ymm12
747*4757b351SPierre Pronchery
748*4757b351SPierre Pronchery	addq	8(%rsp),%r15
749*4757b351SPierre Pronchery
750*4757b351SPierre Pronchery{vex}	vpmadd52huq	160(%rsi),%ymm1,%ymm4
751*4757b351SPierre Pronchery{vex}	vpmadd52huq	192(%rsi),%ymm1,%ymm9
752*4757b351SPierre Pronchery{vex}	vpmadd52huq	224(%rsi),%ymm1,%ymm10
753*4757b351SPierre Pronchery{vex}	vpmadd52huq	256(%rsi),%ymm1,%ymm11
754*4757b351SPierre Pronchery{vex}	vpmadd52huq	288(%rsi),%ymm1,%ymm12
755*4757b351SPierre Pronchery
756*4757b351SPierre Pronchery{vex}	vpmadd52huq	160(%rcx),%ymm2,%ymm4
757*4757b351SPierre Pronchery{vex}	vpmadd52huq	192(%rcx),%ymm2,%ymm9
758*4757b351SPierre Pronchery{vex}	vpmadd52huq	224(%rcx),%ymm2,%ymm10
759*4757b351SPierre Pronchery{vex}	vpmadd52huq	256(%rcx),%ymm2,%ymm11
760*4757b351SPierre Pronchery{vex}	vpmadd52huq	288(%rcx),%ymm2,%ymm12
761*4757b351SPierre Pronchery	leaq	168(%rsp),%rsp
762*4757b351SPierre Pronchery	leaq	8(%r11),%r11
763*4757b351SPierre Pronchery	decl	%ebx
764*4757b351SPierre Pronchery	jne	.Lloop20
765*4757b351SPierre Pronchery
766*4757b351SPierre Pronchery	vmovq	%r9,%xmm0
767*4757b351SPierre Pronchery	vpbroadcastq	%xmm0,%ymm0
768*4757b351SPierre Pronchery	vpblendd	$3,%ymm0,%ymm3,%ymm3
769*4757b351SPierre Pronchery
770*4757b351SPierre Pronchery
771*4757b351SPierre Pronchery
772*4757b351SPierre Pronchery	vpsrlq	$52,%ymm3,%ymm0
773*4757b351SPierre Pronchery	vpsrlq	$52,%ymm5,%ymm1
774*4757b351SPierre Pronchery	vpsrlq	$52,%ymm6,%ymm2
775*4757b351SPierre Pronchery	vpsrlq	$52,%ymm7,%ymm13
776*4757b351SPierre Pronchery	vpsrlq	$52,%ymm8,%ymm14
777*4757b351SPierre Pronchery
778*4757b351SPierre Pronchery
779*4757b351SPierre Pronchery	vpermq	$144,%ymm14,%ymm14
780*4757b351SPierre Pronchery	vpermq	$3,%ymm13,%ymm15
781*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm14,%ymm14
782*4757b351SPierre Pronchery
783*4757b351SPierre Pronchery	vpermq	$144,%ymm13,%ymm13
784*4757b351SPierre Pronchery	vpermq	$3,%ymm2,%ymm15
785*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm13,%ymm13
786*4757b351SPierre Pronchery
787*4757b351SPierre Pronchery	vpermq	$144,%ymm2,%ymm2
788*4757b351SPierre Pronchery	vpermq	$3,%ymm1,%ymm15
789*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm2,%ymm2
790*4757b351SPierre Pronchery
791*4757b351SPierre Pronchery	vpermq	$144,%ymm1,%ymm1
792*4757b351SPierre Pronchery	vpermq	$3,%ymm0,%ymm15
793*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm1,%ymm1
794*4757b351SPierre Pronchery
795*4757b351SPierre Pronchery	vpermq	$144,%ymm0,%ymm0
796*4757b351SPierre Pronchery	vpand	.Lhigh64x3(%rip),%ymm0,%ymm0
797*4757b351SPierre Pronchery
798*4757b351SPierre Pronchery
799*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm3,%ymm3
800*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm5,%ymm5
801*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm6,%ymm6
802*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm7,%ymm7
803*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm8,%ymm8
804*4757b351SPierre Pronchery
805*4757b351SPierre Pronchery
806*4757b351SPierre Pronchery	vpaddq	%ymm0,%ymm3,%ymm3
807*4757b351SPierre Pronchery	vpaddq	%ymm1,%ymm5,%ymm5
808*4757b351SPierre Pronchery	vpaddq	%ymm2,%ymm6,%ymm6
809*4757b351SPierre Pronchery	vpaddq	%ymm13,%ymm7,%ymm7
810*4757b351SPierre Pronchery	vpaddq	%ymm14,%ymm8,%ymm8
811*4757b351SPierre Pronchery
812*4757b351SPierre Pronchery
813*4757b351SPierre Pronchery
814*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm3,%ymm0
815*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm5,%ymm1
816*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm6,%ymm2
817*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm7,%ymm13
818*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm8,%ymm14
819*4757b351SPierre Pronchery	vmovmskpd	%ymm0,%r14d
820*4757b351SPierre Pronchery	vmovmskpd	%ymm1,%r13d
821*4757b351SPierre Pronchery	vmovmskpd	%ymm2,%r12d
822*4757b351SPierre Pronchery	vmovmskpd	%ymm13,%r11d
823*4757b351SPierre Pronchery	vmovmskpd	%ymm14,%r10d
824*4757b351SPierre Pronchery
825*4757b351SPierre Pronchery
826*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm3,%ymm0
827*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm5,%ymm1
828*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm6,%ymm2
829*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm7,%ymm13
830*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm8,%ymm14
831*4757b351SPierre Pronchery	vmovmskpd	%ymm0,%r9d
832*4757b351SPierre Pronchery	vmovmskpd	%ymm1,%r8d
833*4757b351SPierre Pronchery	vmovmskpd	%ymm2,%ebx
834*4757b351SPierre Pronchery	vmovmskpd	%ymm13,%ecx
835*4757b351SPierre Pronchery	vmovmskpd	%ymm14,%edx
836*4757b351SPierre Pronchery
837*4757b351SPierre Pronchery
838*4757b351SPierre Pronchery
839*4757b351SPierre Pronchery	shlb	$4,%r13b
840*4757b351SPierre Pronchery	orb	%r13b,%r14b
841*4757b351SPierre Pronchery	shlb	$4,%r11b
842*4757b351SPierre Pronchery	orb	%r11b,%r12b
843*4757b351SPierre Pronchery
844*4757b351SPierre Pronchery	addb	%r14b,%r14b
845*4757b351SPierre Pronchery	adcb	%r12b,%r12b
846*4757b351SPierre Pronchery	adcb	%r10b,%r10b
847*4757b351SPierre Pronchery
848*4757b351SPierre Pronchery	shlb	$4,%r8b
849*4757b351SPierre Pronchery	orb	%r8b,%r9b
850*4757b351SPierre Pronchery	shlb	$4,%cl
851*4757b351SPierre Pronchery	orb	%cl,%bl
852*4757b351SPierre Pronchery
853*4757b351SPierre Pronchery	addb	%r9b,%r14b
854*4757b351SPierre Pronchery	adcb	%bl,%r12b
855*4757b351SPierre Pronchery	adcb	%dl,%r10b
856*4757b351SPierre Pronchery
857*4757b351SPierre Pronchery	xorb	%r9b,%r14b
858*4757b351SPierre Pronchery	xorb	%bl,%r12b
859*4757b351SPierre Pronchery	xorb	%dl,%r10b
860*4757b351SPierre Pronchery
861*4757b351SPierre Pronchery	leaq	.Lkmasklut(%rip),%rdx
862*4757b351SPierre Pronchery
863*4757b351SPierre Pronchery	movb	%r14b,%r13b
864*4757b351SPierre Pronchery	andq	$0xf,%r14
865*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm3,%ymm0
866*4757b351SPierre Pronchery	shlq	$5,%r14
867*4757b351SPierre Pronchery	vmovapd	(%rdx,%r14,1),%ymm2
868*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm3,%ymm3
869*4757b351SPierre Pronchery
870*4757b351SPierre Pronchery	shrb	$4,%r13b
871*4757b351SPierre Pronchery	andq	$0xf,%r13
872*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm5,%ymm0
873*4757b351SPierre Pronchery	shlq	$5,%r13
874*4757b351SPierre Pronchery	vmovapd	(%rdx,%r13,1),%ymm2
875*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm5,%ymm5
876*4757b351SPierre Pronchery
877*4757b351SPierre Pronchery	movb	%r12b,%r11b
878*4757b351SPierre Pronchery	andq	$0xf,%r12
879*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm6,%ymm0
880*4757b351SPierre Pronchery	shlq	$5,%r12
881*4757b351SPierre Pronchery	vmovapd	(%rdx,%r12,1),%ymm2
882*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm6,%ymm6
883*4757b351SPierre Pronchery
884*4757b351SPierre Pronchery	shrb	$4,%r11b
885*4757b351SPierre Pronchery	andq	$0xf,%r11
886*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm7,%ymm0
887*4757b351SPierre Pronchery	shlq	$5,%r11
888*4757b351SPierre Pronchery	vmovapd	(%rdx,%r11,1),%ymm2
889*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm7,%ymm7
890*4757b351SPierre Pronchery
891*4757b351SPierre Pronchery	andq	$0xf,%r10
892*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm8,%ymm0
893*4757b351SPierre Pronchery	shlq	$5,%r10
894*4757b351SPierre Pronchery	vmovapd	(%rdx,%r10,1),%ymm2
895*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm8,%ymm8
896*4757b351SPierre Pronchery
897*4757b351SPierre Pronchery
898*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm3,%ymm3
899*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm5,%ymm5
900*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm6,%ymm6
901*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm7,%ymm7
902*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm8,%ymm8
903*4757b351SPierre Pronchery
904*4757b351SPierre Pronchery	vmovq	%r15,%xmm0
905*4757b351SPierre Pronchery	vpbroadcastq	%xmm0,%ymm0
906*4757b351SPierre Pronchery	vpblendd	$3,%ymm0,%ymm4,%ymm4
907*4757b351SPierre Pronchery
908*4757b351SPierre Pronchery
909*4757b351SPierre Pronchery
910*4757b351SPierre Pronchery	vpsrlq	$52,%ymm4,%ymm0
911*4757b351SPierre Pronchery	vpsrlq	$52,%ymm9,%ymm1
912*4757b351SPierre Pronchery	vpsrlq	$52,%ymm10,%ymm2
913*4757b351SPierre Pronchery	vpsrlq	$52,%ymm11,%ymm13
914*4757b351SPierre Pronchery	vpsrlq	$52,%ymm12,%ymm14
915*4757b351SPierre Pronchery
916*4757b351SPierre Pronchery
917*4757b351SPierre Pronchery	vpermq	$144,%ymm14,%ymm14
918*4757b351SPierre Pronchery	vpermq	$3,%ymm13,%ymm15
919*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm14,%ymm14
920*4757b351SPierre Pronchery
921*4757b351SPierre Pronchery	vpermq	$144,%ymm13,%ymm13
922*4757b351SPierre Pronchery	vpermq	$3,%ymm2,%ymm15
923*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm13,%ymm13
924*4757b351SPierre Pronchery
925*4757b351SPierre Pronchery	vpermq	$144,%ymm2,%ymm2
926*4757b351SPierre Pronchery	vpermq	$3,%ymm1,%ymm15
927*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm2,%ymm2
928*4757b351SPierre Pronchery
929*4757b351SPierre Pronchery	vpermq	$144,%ymm1,%ymm1
930*4757b351SPierre Pronchery	vpermq	$3,%ymm0,%ymm15
931*4757b351SPierre Pronchery	vblendpd	$1,%ymm15,%ymm1,%ymm1
932*4757b351SPierre Pronchery
933*4757b351SPierre Pronchery	vpermq	$144,%ymm0,%ymm0
934*4757b351SPierre Pronchery	vpand	.Lhigh64x3(%rip),%ymm0,%ymm0
935*4757b351SPierre Pronchery
936*4757b351SPierre Pronchery
937*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm4,%ymm4
938*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm9,%ymm9
939*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm10,%ymm10
940*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm11,%ymm11
941*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm12,%ymm12
942*4757b351SPierre Pronchery
943*4757b351SPierre Pronchery
944*4757b351SPierre Pronchery	vpaddq	%ymm0,%ymm4,%ymm4
945*4757b351SPierre Pronchery	vpaddq	%ymm1,%ymm9,%ymm9
946*4757b351SPierre Pronchery	vpaddq	%ymm2,%ymm10,%ymm10
947*4757b351SPierre Pronchery	vpaddq	%ymm13,%ymm11,%ymm11
948*4757b351SPierre Pronchery	vpaddq	%ymm14,%ymm12,%ymm12
949*4757b351SPierre Pronchery
950*4757b351SPierre Pronchery
951*4757b351SPierre Pronchery
952*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm4,%ymm0
953*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm9,%ymm1
954*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm10,%ymm2
955*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm11,%ymm13
956*4757b351SPierre Pronchery	vpcmpgtq	.Lmask52x4(%rip),%ymm12,%ymm14
957*4757b351SPierre Pronchery	vmovmskpd	%ymm0,%r14d
958*4757b351SPierre Pronchery	vmovmskpd	%ymm1,%r13d
959*4757b351SPierre Pronchery	vmovmskpd	%ymm2,%r12d
960*4757b351SPierre Pronchery	vmovmskpd	%ymm13,%r11d
961*4757b351SPierre Pronchery	vmovmskpd	%ymm14,%r10d
962*4757b351SPierre Pronchery
963*4757b351SPierre Pronchery
964*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm4,%ymm0
965*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm9,%ymm1
966*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm10,%ymm2
967*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm11,%ymm13
968*4757b351SPierre Pronchery	vpcmpeqq	.Lmask52x4(%rip),%ymm12,%ymm14
969*4757b351SPierre Pronchery	vmovmskpd	%ymm0,%r9d
970*4757b351SPierre Pronchery	vmovmskpd	%ymm1,%r8d
971*4757b351SPierre Pronchery	vmovmskpd	%ymm2,%ebx
972*4757b351SPierre Pronchery	vmovmskpd	%ymm13,%ecx
973*4757b351SPierre Pronchery	vmovmskpd	%ymm14,%edx
974*4757b351SPierre Pronchery
975*4757b351SPierre Pronchery
976*4757b351SPierre Pronchery
977*4757b351SPierre Pronchery	shlb	$4,%r13b
978*4757b351SPierre Pronchery	orb	%r13b,%r14b
979*4757b351SPierre Pronchery	shlb	$4,%r11b
980*4757b351SPierre Pronchery	orb	%r11b,%r12b
981*4757b351SPierre Pronchery
982*4757b351SPierre Pronchery	addb	%r14b,%r14b
983*4757b351SPierre Pronchery	adcb	%r12b,%r12b
984*4757b351SPierre Pronchery	adcb	%r10b,%r10b
985*4757b351SPierre Pronchery
986*4757b351SPierre Pronchery	shlb	$4,%r8b
987*4757b351SPierre Pronchery	orb	%r8b,%r9b
988*4757b351SPierre Pronchery	shlb	$4,%cl
989*4757b351SPierre Pronchery	orb	%cl,%bl
990*4757b351SPierre Pronchery
991*4757b351SPierre Pronchery	addb	%r9b,%r14b
992*4757b351SPierre Pronchery	adcb	%bl,%r12b
993*4757b351SPierre Pronchery	adcb	%dl,%r10b
994*4757b351SPierre Pronchery
995*4757b351SPierre Pronchery	xorb	%r9b,%r14b
996*4757b351SPierre Pronchery	xorb	%bl,%r12b
997*4757b351SPierre Pronchery	xorb	%dl,%r10b
998*4757b351SPierre Pronchery
999*4757b351SPierre Pronchery	leaq	.Lkmasklut(%rip),%rdx
1000*4757b351SPierre Pronchery
1001*4757b351SPierre Pronchery	movb	%r14b,%r13b
1002*4757b351SPierre Pronchery	andq	$0xf,%r14
1003*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm4,%ymm0
1004*4757b351SPierre Pronchery	shlq	$5,%r14
1005*4757b351SPierre Pronchery	vmovapd	(%rdx,%r14,1),%ymm2
1006*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm4,%ymm4
1007*4757b351SPierre Pronchery
1008*4757b351SPierre Pronchery	shrb	$4,%r13b
1009*4757b351SPierre Pronchery	andq	$0xf,%r13
1010*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm9,%ymm0
1011*4757b351SPierre Pronchery	shlq	$5,%r13
1012*4757b351SPierre Pronchery	vmovapd	(%rdx,%r13,1),%ymm2
1013*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm9,%ymm9
1014*4757b351SPierre Pronchery
1015*4757b351SPierre Pronchery	movb	%r12b,%r11b
1016*4757b351SPierre Pronchery	andq	$0xf,%r12
1017*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm10,%ymm0
1018*4757b351SPierre Pronchery	shlq	$5,%r12
1019*4757b351SPierre Pronchery	vmovapd	(%rdx,%r12,1),%ymm2
1020*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm10,%ymm10
1021*4757b351SPierre Pronchery
1022*4757b351SPierre Pronchery	shrb	$4,%r11b
1023*4757b351SPierre Pronchery	andq	$0xf,%r11
1024*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm11,%ymm0
1025*4757b351SPierre Pronchery	shlq	$5,%r11
1026*4757b351SPierre Pronchery	vmovapd	(%rdx,%r11,1),%ymm2
1027*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm11,%ymm11
1028*4757b351SPierre Pronchery
1029*4757b351SPierre Pronchery	andq	$0xf,%r10
1030*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm12,%ymm0
1031*4757b351SPierre Pronchery	shlq	$5,%r10
1032*4757b351SPierre Pronchery	vmovapd	(%rdx,%r10,1),%ymm2
1033*4757b351SPierre Pronchery	vblendvpd	%ymm2,%ymm0,%ymm12,%ymm12
1034*4757b351SPierre Pronchery
1035*4757b351SPierre Pronchery
1036*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm4,%ymm4
1037*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm9,%ymm9
1038*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm10,%ymm10
1039*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm11,%ymm11
1040*4757b351SPierre Pronchery	vpand	.Lmask52x4(%rip),%ymm12,%ymm12
1041*4757b351SPierre Pronchery
1042*4757b351SPierre Pronchery	vmovdqu	%ymm3,0(%rdi)
1043*4757b351SPierre Pronchery	vmovdqu	%ymm5,32(%rdi)
1044*4757b351SPierre Pronchery	vmovdqu	%ymm6,64(%rdi)
1045*4757b351SPierre Pronchery	vmovdqu	%ymm7,96(%rdi)
1046*4757b351SPierre Pronchery	vmovdqu	%ymm8,128(%rdi)
1047*4757b351SPierre Pronchery
1048*4757b351SPierre Pronchery	vmovdqu	%ymm4,160(%rdi)
1049*4757b351SPierre Pronchery	vmovdqu	%ymm9,192(%rdi)
1050*4757b351SPierre Pronchery	vmovdqu	%ymm10,224(%rdi)
1051*4757b351SPierre Pronchery	vmovdqu	%ymm11,256(%rdi)
1052*4757b351SPierre Pronchery	vmovdqu	%ymm12,288(%rdi)
1053*4757b351SPierre Pronchery
1054*4757b351SPierre Pronchery	vzeroupper
1055*4757b351SPierre Pronchery	movq	0(%rsp),%r15
1056*4757b351SPierre Pronchery.cfi_restore	%r15
1057*4757b351SPierre Pronchery	movq	8(%rsp),%r14
1058*4757b351SPierre Pronchery.cfi_restore	%r14
1059*4757b351SPierre Pronchery	movq	16(%rsp),%r13
1060*4757b351SPierre Pronchery.cfi_restore	%r13
1061*4757b351SPierre Pronchery	movq	24(%rsp),%r12
1062*4757b351SPierre Pronchery.cfi_restore	%r12
1063*4757b351SPierre Pronchery	movq	32(%rsp),%rbp
1064*4757b351SPierre Pronchery.cfi_restore	%rbp
1065*4757b351SPierre Pronchery	movq	40(%rsp),%rbx
1066*4757b351SPierre Pronchery.cfi_restore	%rbx
1067*4757b351SPierre Pronchery	leaq	48(%rsp),%rsp
1068*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	-48
1069*4757b351SPierre Pronchery.Lossl_rsaz_amm52x20_x2_avxifma256_epilogue:
1070*4757b351SPierre Pronchery	.byte	0xf3,0xc3
1071*4757b351SPierre Pronchery.cfi_endproc
1072*4757b351SPierre Pronchery.size	ossl_rsaz_amm52x20_x2_avxifma256, .-ossl_rsaz_amm52x20_x2_avxifma256
1073*4757b351SPierre Pronchery.text
1074*4757b351SPierre Pronchery
1075*4757b351SPierre Pronchery.align	32
1076*4757b351SPierre Pronchery.globl	ossl_extract_multiplier_2x20_win5_avx
1077*4757b351SPierre Pronchery.type	ossl_extract_multiplier_2x20_win5_avx,@function
1078*4757b351SPierre Proncheryossl_extract_multiplier_2x20_win5_avx:
1079*4757b351SPierre Pronchery.cfi_startproc
1080*4757b351SPierre Pronchery.byte	243,15,30,250
1081*4757b351SPierre Pronchery	vmovapd	.Lones(%rip),%ymm14
1082*4757b351SPierre Pronchery	vmovq	%rdx,%xmm10
1083*4757b351SPierre Pronchery	vpbroadcastq	%xmm10,%ymm12
1084*4757b351SPierre Pronchery	vmovq	%rcx,%xmm10
1085*4757b351SPierre Pronchery	vpbroadcastq	%xmm10,%ymm13
1086*4757b351SPierre Pronchery	leaq	10240(%rsi),%rax
1087*4757b351SPierre Pronchery
1088*4757b351SPierre Pronchery
1089*4757b351SPierre Pronchery	vpxor	%xmm0,%xmm0,%xmm0
1090*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm11
1091*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm1
1092*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm2
1093*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm3
1094*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm4
1095*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm5
1096*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm6
1097*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm7
1098*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm8
1099*4757b351SPierre Pronchery	vmovapd	%ymm0,%ymm9
1100*4757b351SPierre Pronchery
1101*4757b351SPierre Pronchery.align	32
1102*4757b351SPierre Pronchery.Lloop:
1103*4757b351SPierre Pronchery	vpcmpeqq	%ymm11,%ymm12,%ymm15
1104*4757b351SPierre Pronchery	vmovdqu	0(%rsi),%ymm10
1105*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm0,%ymm0
1106*4757b351SPierre Pronchery	vmovdqu	32(%rsi),%ymm10
1107*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm1,%ymm1
1108*4757b351SPierre Pronchery	vmovdqu	64(%rsi),%ymm10
1109*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm2,%ymm2
1110*4757b351SPierre Pronchery	vmovdqu	96(%rsi),%ymm10
1111*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm3,%ymm3
1112*4757b351SPierre Pronchery	vmovdqu	128(%rsi),%ymm10
1113*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm4,%ymm4
1114*4757b351SPierre Pronchery	vpcmpeqq	%ymm11,%ymm13,%ymm15
1115*4757b351SPierre Pronchery	vmovdqu	160(%rsi),%ymm10
1116*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm5,%ymm5
1117*4757b351SPierre Pronchery	vmovdqu	192(%rsi),%ymm10
1118*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm6,%ymm6
1119*4757b351SPierre Pronchery	vmovdqu	224(%rsi),%ymm10
1120*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm7,%ymm7
1121*4757b351SPierre Pronchery	vmovdqu	256(%rsi),%ymm10
1122*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm8,%ymm8
1123*4757b351SPierre Pronchery	vmovdqu	288(%rsi),%ymm10
1124*4757b351SPierre Pronchery	vblendvpd	%ymm15,%ymm10,%ymm9,%ymm9
1125*4757b351SPierre Pronchery	vpaddq	%ymm14,%ymm11,%ymm11
1126*4757b351SPierre Pronchery	addq	$320,%rsi
1127*4757b351SPierre Pronchery	cmpq	%rsi,%rax
1128*4757b351SPierre Pronchery	jne	.Lloop
1129*4757b351SPierre Pronchery	vmovdqu	%ymm0,0(%rdi)
1130*4757b351SPierre Pronchery	vmovdqu	%ymm1,32(%rdi)
1131*4757b351SPierre Pronchery	vmovdqu	%ymm2,64(%rdi)
1132*4757b351SPierre Pronchery	vmovdqu	%ymm3,96(%rdi)
1133*4757b351SPierre Pronchery	vmovdqu	%ymm4,128(%rdi)
1134*4757b351SPierre Pronchery	vmovdqu	%ymm5,160(%rdi)
1135*4757b351SPierre Pronchery	vmovdqu	%ymm6,192(%rdi)
1136*4757b351SPierre Pronchery	vmovdqu	%ymm7,224(%rdi)
1137*4757b351SPierre Pronchery	vmovdqu	%ymm8,256(%rdi)
1138*4757b351SPierre Pronchery	vmovdqu	%ymm9,288(%rdi)
1139*4757b351SPierre Pronchery	.byte	0xf3,0xc3
1140*4757b351SPierre Pronchery.cfi_endproc
1141*4757b351SPierre Pronchery.size	ossl_extract_multiplier_2x20_win5_avx, .-ossl_extract_multiplier_2x20_win5_avx
1142*4757b351SPierre Pronchery.section	.rodata
1143*4757b351SPierre Pronchery.align	32
1144*4757b351SPierre Pronchery.Lones:
1145*4757b351SPierre Pronchery.quad	1,1,1,1
1146*4757b351SPierre Pronchery.Lzeros:
1147*4757b351SPierre Pronchery.quad	0,0,0,0
1148*4757b351SPierre Pronchery	.section ".note.gnu.property", "a"
1149*4757b351SPierre Pronchery	.p2align 3
1150*4757b351SPierre Pronchery	.long 1f - 0f
1151*4757b351SPierre Pronchery	.long 4f - 1f
1152*4757b351SPierre Pronchery	.long 5
1153*4757b351SPierre Pronchery0:
1154*4757b351SPierre Pronchery	# "GNU" encoded with .byte, since .asciz isn't supported
1155*4757b351SPierre Pronchery	# on Solaris.
1156*4757b351SPierre Pronchery	.byte 0x47
1157*4757b351SPierre Pronchery	.byte 0x4e
1158*4757b351SPierre Pronchery	.byte 0x55
1159*4757b351SPierre Pronchery	.byte 0
1160*4757b351SPierre Pronchery1:
1161*4757b351SPierre Pronchery	.p2align 3
1162*4757b351SPierre Pronchery	.long 0xc0000002
1163*4757b351SPierre Pronchery	.long 3f - 2f
1164*4757b351SPierre Pronchery2:
1165*4757b351SPierre Pronchery	.long 3
1166*4757b351SPierre Pronchery3:
1167*4757b351SPierre Pronchery	.p2align 3
1168*4757b351SPierre Pronchery4:
1169