xref: /freebsd/sys/crypto/openssl/amd64/rsaz-2k-avx512.S (revision 4757b351ea9d59d71d4a38b82506d2d16fcd560d)
1*4757b351SPierre Pronchery/* Do not modify. This file is auto-generated from rsaz-2k-avx512.pl. */
2*4757b351SPierre Pronchery
3*4757b351SPierre Pronchery.globl	ossl_rsaz_avx512ifma_eligible
4*4757b351SPierre Pronchery.type	ossl_rsaz_avx512ifma_eligible,@function
5*4757b351SPierre Pronchery.align	32
6*4757b351SPierre Proncheryossl_rsaz_avx512ifma_eligible:
7*4757b351SPierre Pronchery	movl	OPENSSL_ia32cap_P+8(%rip),%ecx
8*4757b351SPierre Pronchery	xorl	%eax,%eax
9*4757b351SPierre Pronchery	andl	$2149777408,%ecx
10*4757b351SPierre Pronchery	cmpl	$2149777408,%ecx
11*4757b351SPierre Pronchery	cmovel	%ecx,%eax
12*4757b351SPierre Pronchery	.byte	0xf3,0xc3
13*4757b351SPierre Pronchery.size	ossl_rsaz_avx512ifma_eligible, .-ossl_rsaz_avx512ifma_eligible
14*4757b351SPierre Pronchery.text
15*4757b351SPierre Pronchery
16*4757b351SPierre Pronchery.globl	ossl_rsaz_amm52x20_x1_ifma256
17*4757b351SPierre Pronchery.type	ossl_rsaz_amm52x20_x1_ifma256,@function
18*4757b351SPierre Pronchery.align	32
19*4757b351SPierre Proncheryossl_rsaz_amm52x20_x1_ifma256:
20*4757b351SPierre Pronchery.cfi_startproc
21*4757b351SPierre Pronchery.byte	243,15,30,250
22*4757b351SPierre Pronchery	pushq	%rbx
23*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
24*4757b351SPierre Pronchery.cfi_offset	%rbx,-16
25*4757b351SPierre Pronchery	pushq	%rbp
26*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
27*4757b351SPierre Pronchery.cfi_offset	%rbp,-24
28*4757b351SPierre Pronchery	pushq	%r12
29*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
30*4757b351SPierre Pronchery.cfi_offset	%r12,-32
31*4757b351SPierre Pronchery	pushq	%r13
32*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
33*4757b351SPierre Pronchery.cfi_offset	%r13,-40
34*4757b351SPierre Pronchery	pushq	%r14
35*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
36*4757b351SPierre Pronchery.cfi_offset	%r14,-48
37*4757b351SPierre Pronchery	pushq	%r15
38*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
39*4757b351SPierre Pronchery.cfi_offset	%r15,-56
40*4757b351SPierre Pronchery.Lossl_rsaz_amm52x20_x1_ifma256_body:
41*4757b351SPierre Pronchery
42*4757b351SPierre Pronchery
43*4757b351SPierre Pronchery	vpxord	%ymm0,%ymm0,%ymm0
44*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm3
45*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm16
46*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm17
47*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm18
48*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm19
49*4757b351SPierre Pronchery
50*4757b351SPierre Pronchery	xorl	%r9d,%r9d
51*4757b351SPierre Pronchery
52*4757b351SPierre Pronchery	movq	%rdx,%r11
53*4757b351SPierre Pronchery	movq	$0xfffffffffffff,%rax
54*4757b351SPierre Pronchery
55*4757b351SPierre Pronchery
56*4757b351SPierre Pronchery	movl	$5,%ebx
57*4757b351SPierre Pronchery
58*4757b351SPierre Pronchery.align	32
59*4757b351SPierre Pronchery.Lloop5:
60*4757b351SPierre Pronchery	movq	0(%r11),%r13
61*4757b351SPierre Pronchery
62*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm1
63*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
64*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
65*4757b351SPierre Pronchery	addq	%r13,%r9
66*4757b351SPierre Pronchery	movq	%r12,%r10
67*4757b351SPierre Pronchery	adcq	$0,%r10
68*4757b351SPierre Pronchery
69*4757b351SPierre Pronchery	movq	%r8,%r13
70*4757b351SPierre Pronchery	imulq	%r9,%r13
71*4757b351SPierre Pronchery	andq	%rax,%r13
72*4757b351SPierre Pronchery
73*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm2
74*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
75*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
76*4757b351SPierre Pronchery	addq	%r13,%r9
77*4757b351SPierre Pronchery	adcq	%r12,%r10
78*4757b351SPierre Pronchery
79*4757b351SPierre Pronchery	shrq	$52,%r9
80*4757b351SPierre Pronchery	salq	$12,%r10
81*4757b351SPierre Pronchery	orq	%r10,%r9
82*4757b351SPierre Pronchery
83*4757b351SPierre Pronchery	vpmadd52luq	0(%rsi),%ymm1,%ymm3
84*4757b351SPierre Pronchery	vpmadd52luq	32(%rsi),%ymm1,%ymm16
85*4757b351SPierre Pronchery	vpmadd52luq	64(%rsi),%ymm1,%ymm17
86*4757b351SPierre Pronchery	vpmadd52luq	96(%rsi),%ymm1,%ymm18
87*4757b351SPierre Pronchery	vpmadd52luq	128(%rsi),%ymm1,%ymm19
88*4757b351SPierre Pronchery
89*4757b351SPierre Pronchery	vpmadd52luq	0(%rcx),%ymm2,%ymm3
90*4757b351SPierre Pronchery	vpmadd52luq	32(%rcx),%ymm2,%ymm16
91*4757b351SPierre Pronchery	vpmadd52luq	64(%rcx),%ymm2,%ymm17
92*4757b351SPierre Pronchery	vpmadd52luq	96(%rcx),%ymm2,%ymm18
93*4757b351SPierre Pronchery	vpmadd52luq	128(%rcx),%ymm2,%ymm19
94*4757b351SPierre Pronchery
95*4757b351SPierre Pronchery
96*4757b351SPierre Pronchery	valignq	$1,%ymm3,%ymm16,%ymm3
97*4757b351SPierre Pronchery	valignq	$1,%ymm16,%ymm17,%ymm16
98*4757b351SPierre Pronchery	valignq	$1,%ymm17,%ymm18,%ymm17
99*4757b351SPierre Pronchery	valignq	$1,%ymm18,%ymm19,%ymm18
100*4757b351SPierre Pronchery	valignq	$1,%ymm19,%ymm0,%ymm19
101*4757b351SPierre Pronchery
102*4757b351SPierre Pronchery	vmovq	%xmm3,%r13
103*4757b351SPierre Pronchery	addq	%r13,%r9
104*4757b351SPierre Pronchery
105*4757b351SPierre Pronchery	vpmadd52huq	0(%rsi),%ymm1,%ymm3
106*4757b351SPierre Pronchery	vpmadd52huq	32(%rsi),%ymm1,%ymm16
107*4757b351SPierre Pronchery	vpmadd52huq	64(%rsi),%ymm1,%ymm17
108*4757b351SPierre Pronchery	vpmadd52huq	96(%rsi),%ymm1,%ymm18
109*4757b351SPierre Pronchery	vpmadd52huq	128(%rsi),%ymm1,%ymm19
110*4757b351SPierre Pronchery
111*4757b351SPierre Pronchery	vpmadd52huq	0(%rcx),%ymm2,%ymm3
112*4757b351SPierre Pronchery	vpmadd52huq	32(%rcx),%ymm2,%ymm16
113*4757b351SPierre Pronchery	vpmadd52huq	64(%rcx),%ymm2,%ymm17
114*4757b351SPierre Pronchery	vpmadd52huq	96(%rcx),%ymm2,%ymm18
115*4757b351SPierre Pronchery	vpmadd52huq	128(%rcx),%ymm2,%ymm19
116*4757b351SPierre Pronchery	movq	8(%r11),%r13
117*4757b351SPierre Pronchery
118*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm1
119*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
120*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
121*4757b351SPierre Pronchery	addq	%r13,%r9
122*4757b351SPierre Pronchery	movq	%r12,%r10
123*4757b351SPierre Pronchery	adcq	$0,%r10
124*4757b351SPierre Pronchery
125*4757b351SPierre Pronchery	movq	%r8,%r13
126*4757b351SPierre Pronchery	imulq	%r9,%r13
127*4757b351SPierre Pronchery	andq	%rax,%r13
128*4757b351SPierre Pronchery
129*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm2
130*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
131*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
132*4757b351SPierre Pronchery	addq	%r13,%r9
133*4757b351SPierre Pronchery	adcq	%r12,%r10
134*4757b351SPierre Pronchery
135*4757b351SPierre Pronchery	shrq	$52,%r9
136*4757b351SPierre Pronchery	salq	$12,%r10
137*4757b351SPierre Pronchery	orq	%r10,%r9
138*4757b351SPierre Pronchery
139*4757b351SPierre Pronchery	vpmadd52luq	0(%rsi),%ymm1,%ymm3
140*4757b351SPierre Pronchery	vpmadd52luq	32(%rsi),%ymm1,%ymm16
141*4757b351SPierre Pronchery	vpmadd52luq	64(%rsi),%ymm1,%ymm17
142*4757b351SPierre Pronchery	vpmadd52luq	96(%rsi),%ymm1,%ymm18
143*4757b351SPierre Pronchery	vpmadd52luq	128(%rsi),%ymm1,%ymm19
144*4757b351SPierre Pronchery
145*4757b351SPierre Pronchery	vpmadd52luq	0(%rcx),%ymm2,%ymm3
146*4757b351SPierre Pronchery	vpmadd52luq	32(%rcx),%ymm2,%ymm16
147*4757b351SPierre Pronchery	vpmadd52luq	64(%rcx),%ymm2,%ymm17
148*4757b351SPierre Pronchery	vpmadd52luq	96(%rcx),%ymm2,%ymm18
149*4757b351SPierre Pronchery	vpmadd52luq	128(%rcx),%ymm2,%ymm19
150*4757b351SPierre Pronchery
151*4757b351SPierre Pronchery
152*4757b351SPierre Pronchery	valignq	$1,%ymm3,%ymm16,%ymm3
153*4757b351SPierre Pronchery	valignq	$1,%ymm16,%ymm17,%ymm16
154*4757b351SPierre Pronchery	valignq	$1,%ymm17,%ymm18,%ymm17
155*4757b351SPierre Pronchery	valignq	$1,%ymm18,%ymm19,%ymm18
156*4757b351SPierre Pronchery	valignq	$1,%ymm19,%ymm0,%ymm19
157*4757b351SPierre Pronchery
158*4757b351SPierre Pronchery	vmovq	%xmm3,%r13
159*4757b351SPierre Pronchery	addq	%r13,%r9
160*4757b351SPierre Pronchery
161*4757b351SPierre Pronchery	vpmadd52huq	0(%rsi),%ymm1,%ymm3
162*4757b351SPierre Pronchery	vpmadd52huq	32(%rsi),%ymm1,%ymm16
163*4757b351SPierre Pronchery	vpmadd52huq	64(%rsi),%ymm1,%ymm17
164*4757b351SPierre Pronchery	vpmadd52huq	96(%rsi),%ymm1,%ymm18
165*4757b351SPierre Pronchery	vpmadd52huq	128(%rsi),%ymm1,%ymm19
166*4757b351SPierre Pronchery
167*4757b351SPierre Pronchery	vpmadd52huq	0(%rcx),%ymm2,%ymm3
168*4757b351SPierre Pronchery	vpmadd52huq	32(%rcx),%ymm2,%ymm16
169*4757b351SPierre Pronchery	vpmadd52huq	64(%rcx),%ymm2,%ymm17
170*4757b351SPierre Pronchery	vpmadd52huq	96(%rcx),%ymm2,%ymm18
171*4757b351SPierre Pronchery	vpmadd52huq	128(%rcx),%ymm2,%ymm19
172*4757b351SPierre Pronchery	movq	16(%r11),%r13
173*4757b351SPierre Pronchery
174*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm1
175*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
176*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
177*4757b351SPierre Pronchery	addq	%r13,%r9
178*4757b351SPierre Pronchery	movq	%r12,%r10
179*4757b351SPierre Pronchery	adcq	$0,%r10
180*4757b351SPierre Pronchery
181*4757b351SPierre Pronchery	movq	%r8,%r13
182*4757b351SPierre Pronchery	imulq	%r9,%r13
183*4757b351SPierre Pronchery	andq	%rax,%r13
184*4757b351SPierre Pronchery
185*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm2
186*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
187*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
188*4757b351SPierre Pronchery	addq	%r13,%r9
189*4757b351SPierre Pronchery	adcq	%r12,%r10
190*4757b351SPierre Pronchery
191*4757b351SPierre Pronchery	shrq	$52,%r9
192*4757b351SPierre Pronchery	salq	$12,%r10
193*4757b351SPierre Pronchery	orq	%r10,%r9
194*4757b351SPierre Pronchery
195*4757b351SPierre Pronchery	vpmadd52luq	0(%rsi),%ymm1,%ymm3
196*4757b351SPierre Pronchery	vpmadd52luq	32(%rsi),%ymm1,%ymm16
197*4757b351SPierre Pronchery	vpmadd52luq	64(%rsi),%ymm1,%ymm17
198*4757b351SPierre Pronchery	vpmadd52luq	96(%rsi),%ymm1,%ymm18
199*4757b351SPierre Pronchery	vpmadd52luq	128(%rsi),%ymm1,%ymm19
200*4757b351SPierre Pronchery
201*4757b351SPierre Pronchery	vpmadd52luq	0(%rcx),%ymm2,%ymm3
202*4757b351SPierre Pronchery	vpmadd52luq	32(%rcx),%ymm2,%ymm16
203*4757b351SPierre Pronchery	vpmadd52luq	64(%rcx),%ymm2,%ymm17
204*4757b351SPierre Pronchery	vpmadd52luq	96(%rcx),%ymm2,%ymm18
205*4757b351SPierre Pronchery	vpmadd52luq	128(%rcx),%ymm2,%ymm19
206*4757b351SPierre Pronchery
207*4757b351SPierre Pronchery
208*4757b351SPierre Pronchery	valignq	$1,%ymm3,%ymm16,%ymm3
209*4757b351SPierre Pronchery	valignq	$1,%ymm16,%ymm17,%ymm16
210*4757b351SPierre Pronchery	valignq	$1,%ymm17,%ymm18,%ymm17
211*4757b351SPierre Pronchery	valignq	$1,%ymm18,%ymm19,%ymm18
212*4757b351SPierre Pronchery	valignq	$1,%ymm19,%ymm0,%ymm19
213*4757b351SPierre Pronchery
214*4757b351SPierre Pronchery	vmovq	%xmm3,%r13
215*4757b351SPierre Pronchery	addq	%r13,%r9
216*4757b351SPierre Pronchery
217*4757b351SPierre Pronchery	vpmadd52huq	0(%rsi),%ymm1,%ymm3
218*4757b351SPierre Pronchery	vpmadd52huq	32(%rsi),%ymm1,%ymm16
219*4757b351SPierre Pronchery	vpmadd52huq	64(%rsi),%ymm1,%ymm17
220*4757b351SPierre Pronchery	vpmadd52huq	96(%rsi),%ymm1,%ymm18
221*4757b351SPierre Pronchery	vpmadd52huq	128(%rsi),%ymm1,%ymm19
222*4757b351SPierre Pronchery
223*4757b351SPierre Pronchery	vpmadd52huq	0(%rcx),%ymm2,%ymm3
224*4757b351SPierre Pronchery	vpmadd52huq	32(%rcx),%ymm2,%ymm16
225*4757b351SPierre Pronchery	vpmadd52huq	64(%rcx),%ymm2,%ymm17
226*4757b351SPierre Pronchery	vpmadd52huq	96(%rcx),%ymm2,%ymm18
227*4757b351SPierre Pronchery	vpmadd52huq	128(%rcx),%ymm2,%ymm19
228*4757b351SPierre Pronchery	movq	24(%r11),%r13
229*4757b351SPierre Pronchery
230*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm1
231*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
232*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
233*4757b351SPierre Pronchery	addq	%r13,%r9
234*4757b351SPierre Pronchery	movq	%r12,%r10
235*4757b351SPierre Pronchery	adcq	$0,%r10
236*4757b351SPierre Pronchery
237*4757b351SPierre Pronchery	movq	%r8,%r13
238*4757b351SPierre Pronchery	imulq	%r9,%r13
239*4757b351SPierre Pronchery	andq	%rax,%r13
240*4757b351SPierre Pronchery
241*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm2
242*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
243*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
244*4757b351SPierre Pronchery	addq	%r13,%r9
245*4757b351SPierre Pronchery	adcq	%r12,%r10
246*4757b351SPierre Pronchery
247*4757b351SPierre Pronchery	shrq	$52,%r9
248*4757b351SPierre Pronchery	salq	$12,%r10
249*4757b351SPierre Pronchery	orq	%r10,%r9
250*4757b351SPierre Pronchery
251*4757b351SPierre Pronchery	vpmadd52luq	0(%rsi),%ymm1,%ymm3
252*4757b351SPierre Pronchery	vpmadd52luq	32(%rsi),%ymm1,%ymm16
253*4757b351SPierre Pronchery	vpmadd52luq	64(%rsi),%ymm1,%ymm17
254*4757b351SPierre Pronchery	vpmadd52luq	96(%rsi),%ymm1,%ymm18
255*4757b351SPierre Pronchery	vpmadd52luq	128(%rsi),%ymm1,%ymm19
256*4757b351SPierre Pronchery
257*4757b351SPierre Pronchery	vpmadd52luq	0(%rcx),%ymm2,%ymm3
258*4757b351SPierre Pronchery	vpmadd52luq	32(%rcx),%ymm2,%ymm16
259*4757b351SPierre Pronchery	vpmadd52luq	64(%rcx),%ymm2,%ymm17
260*4757b351SPierre Pronchery	vpmadd52luq	96(%rcx),%ymm2,%ymm18
261*4757b351SPierre Pronchery	vpmadd52luq	128(%rcx),%ymm2,%ymm19
262*4757b351SPierre Pronchery
263*4757b351SPierre Pronchery
264*4757b351SPierre Pronchery	valignq	$1,%ymm3,%ymm16,%ymm3
265*4757b351SPierre Pronchery	valignq	$1,%ymm16,%ymm17,%ymm16
266*4757b351SPierre Pronchery	valignq	$1,%ymm17,%ymm18,%ymm17
267*4757b351SPierre Pronchery	valignq	$1,%ymm18,%ymm19,%ymm18
268*4757b351SPierre Pronchery	valignq	$1,%ymm19,%ymm0,%ymm19
269*4757b351SPierre Pronchery
270*4757b351SPierre Pronchery	vmovq	%xmm3,%r13
271*4757b351SPierre Pronchery	addq	%r13,%r9
272*4757b351SPierre Pronchery
273*4757b351SPierre Pronchery	vpmadd52huq	0(%rsi),%ymm1,%ymm3
274*4757b351SPierre Pronchery	vpmadd52huq	32(%rsi),%ymm1,%ymm16
275*4757b351SPierre Pronchery	vpmadd52huq	64(%rsi),%ymm1,%ymm17
276*4757b351SPierre Pronchery	vpmadd52huq	96(%rsi),%ymm1,%ymm18
277*4757b351SPierre Pronchery	vpmadd52huq	128(%rsi),%ymm1,%ymm19
278*4757b351SPierre Pronchery
279*4757b351SPierre Pronchery	vpmadd52huq	0(%rcx),%ymm2,%ymm3
280*4757b351SPierre Pronchery	vpmadd52huq	32(%rcx),%ymm2,%ymm16
281*4757b351SPierre Pronchery	vpmadd52huq	64(%rcx),%ymm2,%ymm17
282*4757b351SPierre Pronchery	vpmadd52huq	96(%rcx),%ymm2,%ymm18
283*4757b351SPierre Pronchery	vpmadd52huq	128(%rcx),%ymm2,%ymm19
284*4757b351SPierre Pronchery	leaq	32(%r11),%r11
285*4757b351SPierre Pronchery	decl	%ebx
286*4757b351SPierre Pronchery	jne	.Lloop5
287*4757b351SPierre Pronchery
288*4757b351SPierre Pronchery	vpbroadcastq	%r9,%ymm0
289*4757b351SPierre Pronchery	vpblendd	$3,%ymm0,%ymm3,%ymm3
290*4757b351SPierre Pronchery
291*4757b351SPierre Pronchery
292*4757b351SPierre Pronchery
293*4757b351SPierre Pronchery	vpsrlq	$52,%ymm3,%ymm0
294*4757b351SPierre Pronchery	vpsrlq	$52,%ymm16,%ymm1
295*4757b351SPierre Pronchery	vpsrlq	$52,%ymm17,%ymm2
296*4757b351SPierre Pronchery	vpsrlq	$52,%ymm18,%ymm25
297*4757b351SPierre Pronchery	vpsrlq	$52,%ymm19,%ymm26
298*4757b351SPierre Pronchery
299*4757b351SPierre Pronchery
300*4757b351SPierre Pronchery	valignq	$3,%ymm25,%ymm26,%ymm26
301*4757b351SPierre Pronchery	valignq	$3,%ymm2,%ymm25,%ymm25
302*4757b351SPierre Pronchery	valignq	$3,%ymm1,%ymm2,%ymm2
303*4757b351SPierre Pronchery	valignq	$3,%ymm0,%ymm1,%ymm1
304*4757b351SPierre Pronchery	valignq	$3,.Lzeros(%rip),%ymm0,%ymm0
305*4757b351SPierre Pronchery
306*4757b351SPierre Pronchery
307*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm3,%ymm3
308*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm16,%ymm16
309*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm17,%ymm17
310*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm18,%ymm18
311*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm19,%ymm19
312*4757b351SPierre Pronchery
313*4757b351SPierre Pronchery
314*4757b351SPierre Pronchery	vpaddq	%ymm0,%ymm3,%ymm3
315*4757b351SPierre Pronchery	vpaddq	%ymm1,%ymm16,%ymm16
316*4757b351SPierre Pronchery	vpaddq	%ymm2,%ymm17,%ymm17
317*4757b351SPierre Pronchery	vpaddq	%ymm25,%ymm18,%ymm18
318*4757b351SPierre Pronchery	vpaddq	%ymm26,%ymm19,%ymm19
319*4757b351SPierre Pronchery
320*4757b351SPierre Pronchery
321*4757b351SPierre Pronchery
322*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm3,%k1
323*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm16,%k2
324*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm17,%k3
325*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm18,%k4
326*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm19,%k5
327*4757b351SPierre Pronchery	kmovb	%k1,%r14d
328*4757b351SPierre Pronchery	kmovb	%k2,%r13d
329*4757b351SPierre Pronchery	kmovb	%k3,%r12d
330*4757b351SPierre Pronchery	kmovb	%k4,%r11d
331*4757b351SPierre Pronchery	kmovb	%k5,%r10d
332*4757b351SPierre Pronchery
333*4757b351SPierre Pronchery
334*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm3,%k1
335*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm16,%k2
336*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm17,%k3
337*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm18,%k4
338*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm19,%k5
339*4757b351SPierre Pronchery	kmovb	%k1,%r9d
340*4757b351SPierre Pronchery	kmovb	%k2,%r8d
341*4757b351SPierre Pronchery	kmovb	%k3,%ebx
342*4757b351SPierre Pronchery	kmovb	%k4,%ecx
343*4757b351SPierre Pronchery	kmovb	%k5,%edx
344*4757b351SPierre Pronchery
345*4757b351SPierre Pronchery
346*4757b351SPierre Pronchery
347*4757b351SPierre Pronchery	shlb	$4,%r13b
348*4757b351SPierre Pronchery	orb	%r13b,%r14b
349*4757b351SPierre Pronchery	shlb	$4,%r11b
350*4757b351SPierre Pronchery	orb	%r11b,%r12b
351*4757b351SPierre Pronchery
352*4757b351SPierre Pronchery	addb	%r14b,%r14b
353*4757b351SPierre Pronchery	adcb	%r12b,%r12b
354*4757b351SPierre Pronchery	adcb	%r10b,%r10b
355*4757b351SPierre Pronchery
356*4757b351SPierre Pronchery	shlb	$4,%r8b
357*4757b351SPierre Pronchery	orb	%r8b,%r9b
358*4757b351SPierre Pronchery	shlb	$4,%cl
359*4757b351SPierre Pronchery	orb	%cl,%bl
360*4757b351SPierre Pronchery
361*4757b351SPierre Pronchery	addb	%r9b,%r14b
362*4757b351SPierre Pronchery	adcb	%bl,%r12b
363*4757b351SPierre Pronchery	adcb	%dl,%r10b
364*4757b351SPierre Pronchery
365*4757b351SPierre Pronchery	xorb	%r9b,%r14b
366*4757b351SPierre Pronchery	xorb	%bl,%r12b
367*4757b351SPierre Pronchery	xorb	%dl,%r10b
368*4757b351SPierre Pronchery
369*4757b351SPierre Pronchery	kmovb	%r14d,%k1
370*4757b351SPierre Pronchery	shrb	$4,%r14b
371*4757b351SPierre Pronchery	kmovb	%r14d,%k2
372*4757b351SPierre Pronchery	kmovb	%r12d,%k3
373*4757b351SPierre Pronchery	shrb	$4,%r12b
374*4757b351SPierre Pronchery	kmovb	%r12d,%k4
375*4757b351SPierre Pronchery	kmovb	%r10d,%k5
376*4757b351SPierre Pronchery
377*4757b351SPierre Pronchery
378*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm3,%ymm3{%k1}
379*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm16,%ymm16{%k2}
380*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm17,%ymm17{%k3}
381*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm18,%ymm18{%k4}
382*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm19,%ymm19{%k5}
383*4757b351SPierre Pronchery
384*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm3,%ymm3
385*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm16,%ymm16
386*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm17,%ymm17
387*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm18,%ymm18
388*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm19,%ymm19
389*4757b351SPierre Pronchery
390*4757b351SPierre Pronchery	vmovdqu64	%ymm3,0(%rdi)
391*4757b351SPierre Pronchery	vmovdqu64	%ymm16,32(%rdi)
392*4757b351SPierre Pronchery	vmovdqu64	%ymm17,64(%rdi)
393*4757b351SPierre Pronchery	vmovdqu64	%ymm18,96(%rdi)
394*4757b351SPierre Pronchery	vmovdqu64	%ymm19,128(%rdi)
395*4757b351SPierre Pronchery
396*4757b351SPierre Pronchery	vzeroupper
397*4757b351SPierre Pronchery	movq	0(%rsp),%r15
398*4757b351SPierre Pronchery.cfi_restore	%r15
399*4757b351SPierre Pronchery	movq	8(%rsp),%r14
400*4757b351SPierre Pronchery.cfi_restore	%r14
401*4757b351SPierre Pronchery	movq	16(%rsp),%r13
402*4757b351SPierre Pronchery.cfi_restore	%r13
403*4757b351SPierre Pronchery	movq	24(%rsp),%r12
404*4757b351SPierre Pronchery.cfi_restore	%r12
405*4757b351SPierre Pronchery	movq	32(%rsp),%rbp
406*4757b351SPierre Pronchery.cfi_restore	%rbp
407*4757b351SPierre Pronchery	movq	40(%rsp),%rbx
408*4757b351SPierre Pronchery.cfi_restore	%rbx
409*4757b351SPierre Pronchery	leaq	48(%rsp),%rsp
410*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	-48
411*4757b351SPierre Pronchery.Lossl_rsaz_amm52x20_x1_ifma256_epilogue:
412*4757b351SPierre Pronchery	.byte	0xf3,0xc3
413*4757b351SPierre Pronchery.cfi_endproc
414*4757b351SPierre Pronchery.size	ossl_rsaz_amm52x20_x1_ifma256, .-ossl_rsaz_amm52x20_x1_ifma256
415*4757b351SPierre Pronchery.section	.rodata
416*4757b351SPierre Pronchery.align	32
417*4757b351SPierre Pronchery.Lmask52x4:
418*4757b351SPierre Pronchery.quad	0xfffffffffffff
419*4757b351SPierre Pronchery.quad	0xfffffffffffff
420*4757b351SPierre Pronchery.quad	0xfffffffffffff
421*4757b351SPierre Pronchery.quad	0xfffffffffffff
422*4757b351SPierre Pronchery.text
423*4757b351SPierre Pronchery
424*4757b351SPierre Pronchery.globl	ossl_rsaz_amm52x20_x2_ifma256
425*4757b351SPierre Pronchery.type	ossl_rsaz_amm52x20_x2_ifma256,@function
426*4757b351SPierre Pronchery.align	32
427*4757b351SPierre Proncheryossl_rsaz_amm52x20_x2_ifma256:
428*4757b351SPierre Pronchery.cfi_startproc
429*4757b351SPierre Pronchery.byte	243,15,30,250
430*4757b351SPierre Pronchery	pushq	%rbx
431*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
432*4757b351SPierre Pronchery.cfi_offset	%rbx,-16
433*4757b351SPierre Pronchery	pushq	%rbp
434*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
435*4757b351SPierre Pronchery.cfi_offset	%rbp,-24
436*4757b351SPierre Pronchery	pushq	%r12
437*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
438*4757b351SPierre Pronchery.cfi_offset	%r12,-32
439*4757b351SPierre Pronchery	pushq	%r13
440*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
441*4757b351SPierre Pronchery.cfi_offset	%r13,-40
442*4757b351SPierre Pronchery	pushq	%r14
443*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
444*4757b351SPierre Pronchery.cfi_offset	%r14,-48
445*4757b351SPierre Pronchery	pushq	%r15
446*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	8
447*4757b351SPierre Pronchery.cfi_offset	%r15,-56
448*4757b351SPierre Pronchery.Lossl_rsaz_amm52x20_x2_ifma256_body:
449*4757b351SPierre Pronchery
450*4757b351SPierre Pronchery
451*4757b351SPierre Pronchery	vpxord	%ymm0,%ymm0,%ymm0
452*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm3
453*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm16
454*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm17
455*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm18
456*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm19
457*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm4
458*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm20
459*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm21
460*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm22
461*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm23
462*4757b351SPierre Pronchery
463*4757b351SPierre Pronchery	xorl	%r9d,%r9d
464*4757b351SPierre Pronchery	xorl	%r15d,%r15d
465*4757b351SPierre Pronchery
466*4757b351SPierre Pronchery	movq	%rdx,%r11
467*4757b351SPierre Pronchery	movq	$0xfffffffffffff,%rax
468*4757b351SPierre Pronchery
469*4757b351SPierre Pronchery	movl	$20,%ebx
470*4757b351SPierre Pronchery
471*4757b351SPierre Pronchery.align	32
472*4757b351SPierre Pronchery.Lloop20:
473*4757b351SPierre Pronchery	movq	0(%r11),%r13
474*4757b351SPierre Pronchery
475*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm1
476*4757b351SPierre Pronchery	movq	0(%rsi),%rdx
477*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
478*4757b351SPierre Pronchery	addq	%r13,%r9
479*4757b351SPierre Pronchery	movq	%r12,%r10
480*4757b351SPierre Pronchery	adcq	$0,%r10
481*4757b351SPierre Pronchery
482*4757b351SPierre Pronchery	movq	(%r8),%r13
483*4757b351SPierre Pronchery	imulq	%r9,%r13
484*4757b351SPierre Pronchery	andq	%rax,%r13
485*4757b351SPierre Pronchery
486*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm2
487*4757b351SPierre Pronchery	movq	0(%rcx),%rdx
488*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
489*4757b351SPierre Pronchery	addq	%r13,%r9
490*4757b351SPierre Pronchery	adcq	%r12,%r10
491*4757b351SPierre Pronchery
492*4757b351SPierre Pronchery	shrq	$52,%r9
493*4757b351SPierre Pronchery	salq	$12,%r10
494*4757b351SPierre Pronchery	orq	%r10,%r9
495*4757b351SPierre Pronchery
496*4757b351SPierre Pronchery	vpmadd52luq	0(%rsi),%ymm1,%ymm3
497*4757b351SPierre Pronchery	vpmadd52luq	32(%rsi),%ymm1,%ymm16
498*4757b351SPierre Pronchery	vpmadd52luq	64(%rsi),%ymm1,%ymm17
499*4757b351SPierre Pronchery	vpmadd52luq	96(%rsi),%ymm1,%ymm18
500*4757b351SPierre Pronchery	vpmadd52luq	128(%rsi),%ymm1,%ymm19
501*4757b351SPierre Pronchery
502*4757b351SPierre Pronchery	vpmadd52luq	0(%rcx),%ymm2,%ymm3
503*4757b351SPierre Pronchery	vpmadd52luq	32(%rcx),%ymm2,%ymm16
504*4757b351SPierre Pronchery	vpmadd52luq	64(%rcx),%ymm2,%ymm17
505*4757b351SPierre Pronchery	vpmadd52luq	96(%rcx),%ymm2,%ymm18
506*4757b351SPierre Pronchery	vpmadd52luq	128(%rcx),%ymm2,%ymm19
507*4757b351SPierre Pronchery
508*4757b351SPierre Pronchery
509*4757b351SPierre Pronchery	valignq	$1,%ymm3,%ymm16,%ymm3
510*4757b351SPierre Pronchery	valignq	$1,%ymm16,%ymm17,%ymm16
511*4757b351SPierre Pronchery	valignq	$1,%ymm17,%ymm18,%ymm17
512*4757b351SPierre Pronchery	valignq	$1,%ymm18,%ymm19,%ymm18
513*4757b351SPierre Pronchery	valignq	$1,%ymm19,%ymm0,%ymm19
514*4757b351SPierre Pronchery
515*4757b351SPierre Pronchery	vmovq	%xmm3,%r13
516*4757b351SPierre Pronchery	addq	%r13,%r9
517*4757b351SPierre Pronchery
518*4757b351SPierre Pronchery	vpmadd52huq	0(%rsi),%ymm1,%ymm3
519*4757b351SPierre Pronchery	vpmadd52huq	32(%rsi),%ymm1,%ymm16
520*4757b351SPierre Pronchery	vpmadd52huq	64(%rsi),%ymm1,%ymm17
521*4757b351SPierre Pronchery	vpmadd52huq	96(%rsi),%ymm1,%ymm18
522*4757b351SPierre Pronchery	vpmadd52huq	128(%rsi),%ymm1,%ymm19
523*4757b351SPierre Pronchery
524*4757b351SPierre Pronchery	vpmadd52huq	0(%rcx),%ymm2,%ymm3
525*4757b351SPierre Pronchery	vpmadd52huq	32(%rcx),%ymm2,%ymm16
526*4757b351SPierre Pronchery	vpmadd52huq	64(%rcx),%ymm2,%ymm17
527*4757b351SPierre Pronchery	vpmadd52huq	96(%rcx),%ymm2,%ymm18
528*4757b351SPierre Pronchery	vpmadd52huq	128(%rcx),%ymm2,%ymm19
529*4757b351SPierre Pronchery	movq	160(%r11),%r13
530*4757b351SPierre Pronchery
531*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm1
532*4757b351SPierre Pronchery	movq	160(%rsi),%rdx
533*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
534*4757b351SPierre Pronchery	addq	%r13,%r15
535*4757b351SPierre Pronchery	movq	%r12,%r10
536*4757b351SPierre Pronchery	adcq	$0,%r10
537*4757b351SPierre Pronchery
538*4757b351SPierre Pronchery	movq	8(%r8),%r13
539*4757b351SPierre Pronchery	imulq	%r15,%r13
540*4757b351SPierre Pronchery	andq	%rax,%r13
541*4757b351SPierre Pronchery
542*4757b351SPierre Pronchery	vpbroadcastq	%r13,%ymm2
543*4757b351SPierre Pronchery	movq	160(%rcx),%rdx
544*4757b351SPierre Pronchery	mulxq	%r13,%r13,%r12
545*4757b351SPierre Pronchery	addq	%r13,%r15
546*4757b351SPierre Pronchery	adcq	%r12,%r10
547*4757b351SPierre Pronchery
548*4757b351SPierre Pronchery	shrq	$52,%r15
549*4757b351SPierre Pronchery	salq	$12,%r10
550*4757b351SPierre Pronchery	orq	%r10,%r15
551*4757b351SPierre Pronchery
552*4757b351SPierre Pronchery	vpmadd52luq	160(%rsi),%ymm1,%ymm4
553*4757b351SPierre Pronchery	vpmadd52luq	192(%rsi),%ymm1,%ymm20
554*4757b351SPierre Pronchery	vpmadd52luq	224(%rsi),%ymm1,%ymm21
555*4757b351SPierre Pronchery	vpmadd52luq	256(%rsi),%ymm1,%ymm22
556*4757b351SPierre Pronchery	vpmadd52luq	288(%rsi),%ymm1,%ymm23
557*4757b351SPierre Pronchery
558*4757b351SPierre Pronchery	vpmadd52luq	160(%rcx),%ymm2,%ymm4
559*4757b351SPierre Pronchery	vpmadd52luq	192(%rcx),%ymm2,%ymm20
560*4757b351SPierre Pronchery	vpmadd52luq	224(%rcx),%ymm2,%ymm21
561*4757b351SPierre Pronchery	vpmadd52luq	256(%rcx),%ymm2,%ymm22
562*4757b351SPierre Pronchery	vpmadd52luq	288(%rcx),%ymm2,%ymm23
563*4757b351SPierre Pronchery
564*4757b351SPierre Pronchery
565*4757b351SPierre Pronchery	valignq	$1,%ymm4,%ymm20,%ymm4
566*4757b351SPierre Pronchery	valignq	$1,%ymm20,%ymm21,%ymm20
567*4757b351SPierre Pronchery	valignq	$1,%ymm21,%ymm22,%ymm21
568*4757b351SPierre Pronchery	valignq	$1,%ymm22,%ymm23,%ymm22
569*4757b351SPierre Pronchery	valignq	$1,%ymm23,%ymm0,%ymm23
570*4757b351SPierre Pronchery
571*4757b351SPierre Pronchery	vmovq	%xmm4,%r13
572*4757b351SPierre Pronchery	addq	%r13,%r15
573*4757b351SPierre Pronchery
574*4757b351SPierre Pronchery	vpmadd52huq	160(%rsi),%ymm1,%ymm4
575*4757b351SPierre Pronchery	vpmadd52huq	192(%rsi),%ymm1,%ymm20
576*4757b351SPierre Pronchery	vpmadd52huq	224(%rsi),%ymm1,%ymm21
577*4757b351SPierre Pronchery	vpmadd52huq	256(%rsi),%ymm1,%ymm22
578*4757b351SPierre Pronchery	vpmadd52huq	288(%rsi),%ymm1,%ymm23
579*4757b351SPierre Pronchery
580*4757b351SPierre Pronchery	vpmadd52huq	160(%rcx),%ymm2,%ymm4
581*4757b351SPierre Pronchery	vpmadd52huq	192(%rcx),%ymm2,%ymm20
582*4757b351SPierre Pronchery	vpmadd52huq	224(%rcx),%ymm2,%ymm21
583*4757b351SPierre Pronchery	vpmadd52huq	256(%rcx),%ymm2,%ymm22
584*4757b351SPierre Pronchery	vpmadd52huq	288(%rcx),%ymm2,%ymm23
585*4757b351SPierre Pronchery	leaq	8(%r11),%r11
586*4757b351SPierre Pronchery	decl	%ebx
587*4757b351SPierre Pronchery	jne	.Lloop20
588*4757b351SPierre Pronchery
589*4757b351SPierre Pronchery	vpbroadcastq	%r9,%ymm0
590*4757b351SPierre Pronchery	vpblendd	$3,%ymm0,%ymm3,%ymm3
591*4757b351SPierre Pronchery
592*4757b351SPierre Pronchery
593*4757b351SPierre Pronchery
594*4757b351SPierre Pronchery	vpsrlq	$52,%ymm3,%ymm0
595*4757b351SPierre Pronchery	vpsrlq	$52,%ymm16,%ymm1
596*4757b351SPierre Pronchery	vpsrlq	$52,%ymm17,%ymm2
597*4757b351SPierre Pronchery	vpsrlq	$52,%ymm18,%ymm25
598*4757b351SPierre Pronchery	vpsrlq	$52,%ymm19,%ymm26
599*4757b351SPierre Pronchery
600*4757b351SPierre Pronchery
601*4757b351SPierre Pronchery	valignq	$3,%ymm25,%ymm26,%ymm26
602*4757b351SPierre Pronchery	valignq	$3,%ymm2,%ymm25,%ymm25
603*4757b351SPierre Pronchery	valignq	$3,%ymm1,%ymm2,%ymm2
604*4757b351SPierre Pronchery	valignq	$3,%ymm0,%ymm1,%ymm1
605*4757b351SPierre Pronchery	valignq	$3,.Lzeros(%rip),%ymm0,%ymm0
606*4757b351SPierre Pronchery
607*4757b351SPierre Pronchery
608*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm3,%ymm3
609*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm16,%ymm16
610*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm17,%ymm17
611*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm18,%ymm18
612*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm19,%ymm19
613*4757b351SPierre Pronchery
614*4757b351SPierre Pronchery
615*4757b351SPierre Pronchery	vpaddq	%ymm0,%ymm3,%ymm3
616*4757b351SPierre Pronchery	vpaddq	%ymm1,%ymm16,%ymm16
617*4757b351SPierre Pronchery	vpaddq	%ymm2,%ymm17,%ymm17
618*4757b351SPierre Pronchery	vpaddq	%ymm25,%ymm18,%ymm18
619*4757b351SPierre Pronchery	vpaddq	%ymm26,%ymm19,%ymm19
620*4757b351SPierre Pronchery
621*4757b351SPierre Pronchery
622*4757b351SPierre Pronchery
623*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm3,%k1
624*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm16,%k2
625*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm17,%k3
626*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm18,%k4
627*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm19,%k5
628*4757b351SPierre Pronchery	kmovb	%k1,%r14d
629*4757b351SPierre Pronchery	kmovb	%k2,%r13d
630*4757b351SPierre Pronchery	kmovb	%k3,%r12d
631*4757b351SPierre Pronchery	kmovb	%k4,%r11d
632*4757b351SPierre Pronchery	kmovb	%k5,%r10d
633*4757b351SPierre Pronchery
634*4757b351SPierre Pronchery
635*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm3,%k1
636*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm16,%k2
637*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm17,%k3
638*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm18,%k4
639*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm19,%k5
640*4757b351SPierre Pronchery	kmovb	%k1,%r9d
641*4757b351SPierre Pronchery	kmovb	%k2,%r8d
642*4757b351SPierre Pronchery	kmovb	%k3,%ebx
643*4757b351SPierre Pronchery	kmovb	%k4,%ecx
644*4757b351SPierre Pronchery	kmovb	%k5,%edx
645*4757b351SPierre Pronchery
646*4757b351SPierre Pronchery
647*4757b351SPierre Pronchery
648*4757b351SPierre Pronchery	shlb	$4,%r13b
649*4757b351SPierre Pronchery	orb	%r13b,%r14b
650*4757b351SPierre Pronchery	shlb	$4,%r11b
651*4757b351SPierre Pronchery	orb	%r11b,%r12b
652*4757b351SPierre Pronchery
653*4757b351SPierre Pronchery	addb	%r14b,%r14b
654*4757b351SPierre Pronchery	adcb	%r12b,%r12b
655*4757b351SPierre Pronchery	adcb	%r10b,%r10b
656*4757b351SPierre Pronchery
657*4757b351SPierre Pronchery	shlb	$4,%r8b
658*4757b351SPierre Pronchery	orb	%r8b,%r9b
659*4757b351SPierre Pronchery	shlb	$4,%cl
660*4757b351SPierre Pronchery	orb	%cl,%bl
661*4757b351SPierre Pronchery
662*4757b351SPierre Pronchery	addb	%r9b,%r14b
663*4757b351SPierre Pronchery	adcb	%bl,%r12b
664*4757b351SPierre Pronchery	adcb	%dl,%r10b
665*4757b351SPierre Pronchery
666*4757b351SPierre Pronchery	xorb	%r9b,%r14b
667*4757b351SPierre Pronchery	xorb	%bl,%r12b
668*4757b351SPierre Pronchery	xorb	%dl,%r10b
669*4757b351SPierre Pronchery
670*4757b351SPierre Pronchery	kmovb	%r14d,%k1
671*4757b351SPierre Pronchery	shrb	$4,%r14b
672*4757b351SPierre Pronchery	kmovb	%r14d,%k2
673*4757b351SPierre Pronchery	kmovb	%r12d,%k3
674*4757b351SPierre Pronchery	shrb	$4,%r12b
675*4757b351SPierre Pronchery	kmovb	%r12d,%k4
676*4757b351SPierre Pronchery	kmovb	%r10d,%k5
677*4757b351SPierre Pronchery
678*4757b351SPierre Pronchery
679*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm3,%ymm3{%k1}
680*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm16,%ymm16{%k2}
681*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm17,%ymm17{%k3}
682*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm18,%ymm18{%k4}
683*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm19,%ymm19{%k5}
684*4757b351SPierre Pronchery
685*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm3,%ymm3
686*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm16,%ymm16
687*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm17,%ymm17
688*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm18,%ymm18
689*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm19,%ymm19
690*4757b351SPierre Pronchery
691*4757b351SPierre Pronchery	vpbroadcastq	%r15,%ymm0
692*4757b351SPierre Pronchery	vpblendd	$3,%ymm0,%ymm4,%ymm4
693*4757b351SPierre Pronchery
694*4757b351SPierre Pronchery
695*4757b351SPierre Pronchery
696*4757b351SPierre Pronchery	vpsrlq	$52,%ymm4,%ymm0
697*4757b351SPierre Pronchery	vpsrlq	$52,%ymm20,%ymm1
698*4757b351SPierre Pronchery	vpsrlq	$52,%ymm21,%ymm2
699*4757b351SPierre Pronchery	vpsrlq	$52,%ymm22,%ymm25
700*4757b351SPierre Pronchery	vpsrlq	$52,%ymm23,%ymm26
701*4757b351SPierre Pronchery
702*4757b351SPierre Pronchery
703*4757b351SPierre Pronchery	valignq	$3,%ymm25,%ymm26,%ymm26
704*4757b351SPierre Pronchery	valignq	$3,%ymm2,%ymm25,%ymm25
705*4757b351SPierre Pronchery	valignq	$3,%ymm1,%ymm2,%ymm2
706*4757b351SPierre Pronchery	valignq	$3,%ymm0,%ymm1,%ymm1
707*4757b351SPierre Pronchery	valignq	$3,.Lzeros(%rip),%ymm0,%ymm0
708*4757b351SPierre Pronchery
709*4757b351SPierre Pronchery
710*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm4,%ymm4
711*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm20,%ymm20
712*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm21,%ymm21
713*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm22,%ymm22
714*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm23,%ymm23
715*4757b351SPierre Pronchery
716*4757b351SPierre Pronchery
717*4757b351SPierre Pronchery	vpaddq	%ymm0,%ymm4,%ymm4
718*4757b351SPierre Pronchery	vpaddq	%ymm1,%ymm20,%ymm20
719*4757b351SPierre Pronchery	vpaddq	%ymm2,%ymm21,%ymm21
720*4757b351SPierre Pronchery	vpaddq	%ymm25,%ymm22,%ymm22
721*4757b351SPierre Pronchery	vpaddq	%ymm26,%ymm23,%ymm23
722*4757b351SPierre Pronchery
723*4757b351SPierre Pronchery
724*4757b351SPierre Pronchery
725*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm4,%k1
726*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm20,%k2
727*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm21,%k3
728*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm22,%k4
729*4757b351SPierre Pronchery	vpcmpuq	$6,.Lmask52x4(%rip),%ymm23,%k5
730*4757b351SPierre Pronchery	kmovb	%k1,%r14d
731*4757b351SPierre Pronchery	kmovb	%k2,%r13d
732*4757b351SPierre Pronchery	kmovb	%k3,%r12d
733*4757b351SPierre Pronchery	kmovb	%k4,%r11d
734*4757b351SPierre Pronchery	kmovb	%k5,%r10d
735*4757b351SPierre Pronchery
736*4757b351SPierre Pronchery
737*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm4,%k1
738*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm20,%k2
739*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm21,%k3
740*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm22,%k4
741*4757b351SPierre Pronchery	vpcmpuq	$0,.Lmask52x4(%rip),%ymm23,%k5
742*4757b351SPierre Pronchery	kmovb	%k1,%r9d
743*4757b351SPierre Pronchery	kmovb	%k2,%r8d
744*4757b351SPierre Pronchery	kmovb	%k3,%ebx
745*4757b351SPierre Pronchery	kmovb	%k4,%ecx
746*4757b351SPierre Pronchery	kmovb	%k5,%edx
747*4757b351SPierre Pronchery
748*4757b351SPierre Pronchery
749*4757b351SPierre Pronchery
750*4757b351SPierre Pronchery	shlb	$4,%r13b
751*4757b351SPierre Pronchery	orb	%r13b,%r14b
752*4757b351SPierre Pronchery	shlb	$4,%r11b
753*4757b351SPierre Pronchery	orb	%r11b,%r12b
754*4757b351SPierre Pronchery
755*4757b351SPierre Pronchery	addb	%r14b,%r14b
756*4757b351SPierre Pronchery	adcb	%r12b,%r12b
757*4757b351SPierre Pronchery	adcb	%r10b,%r10b
758*4757b351SPierre Pronchery
759*4757b351SPierre Pronchery	shlb	$4,%r8b
760*4757b351SPierre Pronchery	orb	%r8b,%r9b
761*4757b351SPierre Pronchery	shlb	$4,%cl
762*4757b351SPierre Pronchery	orb	%cl,%bl
763*4757b351SPierre Pronchery
764*4757b351SPierre Pronchery	addb	%r9b,%r14b
765*4757b351SPierre Pronchery	adcb	%bl,%r12b
766*4757b351SPierre Pronchery	adcb	%dl,%r10b
767*4757b351SPierre Pronchery
768*4757b351SPierre Pronchery	xorb	%r9b,%r14b
769*4757b351SPierre Pronchery	xorb	%bl,%r12b
770*4757b351SPierre Pronchery	xorb	%dl,%r10b
771*4757b351SPierre Pronchery
772*4757b351SPierre Pronchery	kmovb	%r14d,%k1
773*4757b351SPierre Pronchery	shrb	$4,%r14b
774*4757b351SPierre Pronchery	kmovb	%r14d,%k2
775*4757b351SPierre Pronchery	kmovb	%r12d,%k3
776*4757b351SPierre Pronchery	shrb	$4,%r12b
777*4757b351SPierre Pronchery	kmovb	%r12d,%k4
778*4757b351SPierre Pronchery	kmovb	%r10d,%k5
779*4757b351SPierre Pronchery
780*4757b351SPierre Pronchery
781*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm4,%ymm4{%k1}
782*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm20,%ymm20{%k2}
783*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm21,%ymm21{%k3}
784*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm22,%ymm22{%k4}
785*4757b351SPierre Pronchery	vpsubq	.Lmask52x4(%rip),%ymm23,%ymm23{%k5}
786*4757b351SPierre Pronchery
787*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm4,%ymm4
788*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm20,%ymm20
789*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm21,%ymm21
790*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm22,%ymm22
791*4757b351SPierre Pronchery	vpandq	.Lmask52x4(%rip),%ymm23,%ymm23
792*4757b351SPierre Pronchery
793*4757b351SPierre Pronchery	vmovdqu64	%ymm3,0(%rdi)
794*4757b351SPierre Pronchery	vmovdqu64	%ymm16,32(%rdi)
795*4757b351SPierre Pronchery	vmovdqu64	%ymm17,64(%rdi)
796*4757b351SPierre Pronchery	vmovdqu64	%ymm18,96(%rdi)
797*4757b351SPierre Pronchery	vmovdqu64	%ymm19,128(%rdi)
798*4757b351SPierre Pronchery
799*4757b351SPierre Pronchery	vmovdqu64	%ymm4,160(%rdi)
800*4757b351SPierre Pronchery	vmovdqu64	%ymm20,192(%rdi)
801*4757b351SPierre Pronchery	vmovdqu64	%ymm21,224(%rdi)
802*4757b351SPierre Pronchery	vmovdqu64	%ymm22,256(%rdi)
803*4757b351SPierre Pronchery	vmovdqu64	%ymm23,288(%rdi)
804*4757b351SPierre Pronchery
805*4757b351SPierre Pronchery	vzeroupper
806*4757b351SPierre Pronchery	movq	0(%rsp),%r15
807*4757b351SPierre Pronchery.cfi_restore	%r15
808*4757b351SPierre Pronchery	movq	8(%rsp),%r14
809*4757b351SPierre Pronchery.cfi_restore	%r14
810*4757b351SPierre Pronchery	movq	16(%rsp),%r13
811*4757b351SPierre Pronchery.cfi_restore	%r13
812*4757b351SPierre Pronchery	movq	24(%rsp),%r12
813*4757b351SPierre Pronchery.cfi_restore	%r12
814*4757b351SPierre Pronchery	movq	32(%rsp),%rbp
815*4757b351SPierre Pronchery.cfi_restore	%rbp
816*4757b351SPierre Pronchery	movq	40(%rsp),%rbx
817*4757b351SPierre Pronchery.cfi_restore	%rbx
818*4757b351SPierre Pronchery	leaq	48(%rsp),%rsp
819*4757b351SPierre Pronchery.cfi_adjust_cfa_offset	-48
820*4757b351SPierre Pronchery.Lossl_rsaz_amm52x20_x2_ifma256_epilogue:
821*4757b351SPierre Pronchery	.byte	0xf3,0xc3
822*4757b351SPierre Pronchery.cfi_endproc
823*4757b351SPierre Pronchery.size	ossl_rsaz_amm52x20_x2_ifma256, .-ossl_rsaz_amm52x20_x2_ifma256
824*4757b351SPierre Pronchery.text
825*4757b351SPierre Pronchery
826*4757b351SPierre Pronchery.align	32
827*4757b351SPierre Pronchery.globl	ossl_extract_multiplier_2x20_win5
828*4757b351SPierre Pronchery.type	ossl_extract_multiplier_2x20_win5,@function
829*4757b351SPierre Proncheryossl_extract_multiplier_2x20_win5:
830*4757b351SPierre Pronchery.cfi_startproc
831*4757b351SPierre Pronchery.byte	243,15,30,250
832*4757b351SPierre Pronchery	vmovdqa64	.Lones(%rip),%ymm24
833*4757b351SPierre Pronchery	vpbroadcastq	%rdx,%ymm22
834*4757b351SPierre Pronchery	vpbroadcastq	%rcx,%ymm23
835*4757b351SPierre Pronchery	leaq	10240(%rsi),%rax
836*4757b351SPierre Pronchery
837*4757b351SPierre Pronchery
838*4757b351SPierre Pronchery	vpxor	%xmm0,%xmm0,%xmm0
839*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm21
840*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm1
841*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm2
842*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm3
843*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm4
844*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm5
845*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm16
846*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm17
847*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm18
848*4757b351SPierre Pronchery	vmovdqa64	%ymm0,%ymm19
849*4757b351SPierre Pronchery
850*4757b351SPierre Pronchery.align	32
851*4757b351SPierre Pronchery.Lloop:
852*4757b351SPierre Pronchery	vpcmpq	$0,%ymm21,%ymm22,%k1
853*4757b351SPierre Pronchery	vpcmpq	$0,%ymm21,%ymm23,%k2
854*4757b351SPierre Pronchery	vmovdqu64	0(%rsi),%ymm20
855*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm0,%ymm0{%k1}
856*4757b351SPierre Pronchery	vmovdqu64	32(%rsi),%ymm20
857*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm1,%ymm1{%k1}
858*4757b351SPierre Pronchery	vmovdqu64	64(%rsi),%ymm20
859*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm2,%ymm2{%k1}
860*4757b351SPierre Pronchery	vmovdqu64	96(%rsi),%ymm20
861*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm3,%ymm3{%k1}
862*4757b351SPierre Pronchery	vmovdqu64	128(%rsi),%ymm20
863*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm4,%ymm4{%k1}
864*4757b351SPierre Pronchery	vmovdqu64	160(%rsi),%ymm20
865*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm5,%ymm5{%k2}
866*4757b351SPierre Pronchery	vmovdqu64	192(%rsi),%ymm20
867*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm16,%ymm16{%k2}
868*4757b351SPierre Pronchery	vmovdqu64	224(%rsi),%ymm20
869*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm17,%ymm17{%k2}
870*4757b351SPierre Pronchery	vmovdqu64	256(%rsi),%ymm20
871*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm18,%ymm18{%k2}
872*4757b351SPierre Pronchery	vmovdqu64	288(%rsi),%ymm20
873*4757b351SPierre Pronchery	vpblendmq	%ymm20,%ymm19,%ymm19{%k2}
874*4757b351SPierre Pronchery	vpaddq	%ymm24,%ymm21,%ymm21
875*4757b351SPierre Pronchery	addq	$320,%rsi
876*4757b351SPierre Pronchery	cmpq	%rsi,%rax
877*4757b351SPierre Pronchery	jne	.Lloop
878*4757b351SPierre Pronchery	vmovdqu64	%ymm0,0(%rdi)
879*4757b351SPierre Pronchery	vmovdqu64	%ymm1,32(%rdi)
880*4757b351SPierre Pronchery	vmovdqu64	%ymm2,64(%rdi)
881*4757b351SPierre Pronchery	vmovdqu64	%ymm3,96(%rdi)
882*4757b351SPierre Pronchery	vmovdqu64	%ymm4,128(%rdi)
883*4757b351SPierre Pronchery	vmovdqu64	%ymm5,160(%rdi)
884*4757b351SPierre Pronchery	vmovdqu64	%ymm16,192(%rdi)
885*4757b351SPierre Pronchery	vmovdqu64	%ymm17,224(%rdi)
886*4757b351SPierre Pronchery	vmovdqu64	%ymm18,256(%rdi)
887*4757b351SPierre Pronchery	vmovdqu64	%ymm19,288(%rdi)
888*4757b351SPierre Pronchery	.byte	0xf3,0xc3
889*4757b351SPierre Pronchery.cfi_endproc
890*4757b351SPierre Pronchery.size	ossl_extract_multiplier_2x20_win5, .-ossl_extract_multiplier_2x20_win5
891*4757b351SPierre Pronchery.section	.rodata
892*4757b351SPierre Pronchery.align	32
893*4757b351SPierre Pronchery.Lones:
894*4757b351SPierre Pronchery.quad	1,1,1,1
895*4757b351SPierre Pronchery.Lzeros:
896*4757b351SPierre Pronchery.quad	0,0,0,0
897*4757b351SPierre Pronchery	.section ".note.gnu.property", "a"
898*4757b351SPierre Pronchery	.p2align 3
899*4757b351SPierre Pronchery	.long 1f - 0f
900*4757b351SPierre Pronchery	.long 4f - 1f
901*4757b351SPierre Pronchery	.long 5
902*4757b351SPierre Pronchery0:
903*4757b351SPierre Pronchery	# "GNU" encoded with .byte, since .asciz isn't supported
904*4757b351SPierre Pronchery	# on Solaris.
905*4757b351SPierre Pronchery	.byte 0x47
906*4757b351SPierre Pronchery	.byte 0x4e
907*4757b351SPierre Pronchery	.byte 0x55
908*4757b351SPierre Pronchery	.byte 0
909*4757b351SPierre Pronchery1:
910*4757b351SPierre Pronchery	.p2align 3
911*4757b351SPierre Pronchery	.long 0xc0000002
912*4757b351SPierre Pronchery	.long 3f - 2f
913*4757b351SPierre Pronchery2:
914*4757b351SPierre Pronchery	.long 3
915*4757b351SPierre Pronchery3:
916*4757b351SPierre Pronchery	.p2align 3
917*4757b351SPierre Pronchery4:
918