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