1# This file is generated from a similarly-named Perl script in the BoringSSL
2# source tree. Do not edit by hand.
3
4#if defined(__i386__)
5#if defined(BORINGSSL_PREFIX)
6#include <boringssl_prefix_symbols_asm.h>
7#endif
8.text
9.globl	_bn_mul_mont
10.private_extern	_bn_mul_mont
11.align	4
12_bn_mul_mont:
13L_bn_mul_mont_begin:
14	pushl	%ebp
15	pushl	%ebx
16	pushl	%esi
17	pushl	%edi
18	xorl	%eax,%eax
19	movl	40(%esp),%edi
20	cmpl	$4,%edi
21	jl	L000just_leave
22	leal	20(%esp),%esi
23	leal	24(%esp),%edx
24	addl	$2,%edi
25	negl	%edi
26	leal	-32(%esp,%edi,4),%ebp
27	negl	%edi
28	movl	%ebp,%eax
29	subl	%edx,%eax
30	andl	$2047,%eax
31	subl	%eax,%ebp
32	xorl	%ebp,%edx
33	andl	$2048,%edx
34	xorl	$2048,%edx
35	subl	%edx,%ebp
36	andl	$-64,%ebp
37	movl	%esp,%eax
38	subl	%ebp,%eax
39	andl	$-4096,%eax
40	movl	%esp,%edx
41	leal	(%ebp,%eax,1),%esp
42	movl	(%esp),%eax
43	cmpl	%ebp,%esp
44	ja	L001page_walk
45	jmp	L002page_walk_done
46.align	4,0x90
47L001page_walk:
48	leal	-4096(%esp),%esp
49	movl	(%esp),%eax
50	cmpl	%ebp,%esp
51	ja	L001page_walk
52L002page_walk_done:
53	movl	(%esi),%eax
54	movl	4(%esi),%ebx
55	movl	8(%esi),%ecx
56	movl	12(%esi),%ebp
57	movl	16(%esi),%esi
58	movl	(%esi),%esi
59	movl	%eax,4(%esp)
60	movl	%ebx,8(%esp)
61	movl	%ecx,12(%esp)
62	movl	%ebp,16(%esp)
63	movl	%esi,20(%esp)
64	leal	-3(%edi),%ebx
65	movl	%edx,24(%esp)
66	call	L003PIC_me_up
67L003PIC_me_up:
68	popl	%eax
69	movl	L_OPENSSL_ia32cap_P$non_lazy_ptr-L003PIC_me_up(%eax),%eax
70	btl	$26,(%eax)
71	jnc	L004non_sse2
72	movl	$-1,%eax
73	movd	%eax,%mm7
74	movl	8(%esp),%esi
75	movl	12(%esp),%edi
76	movl	16(%esp),%ebp
77	xorl	%edx,%edx
78	xorl	%ecx,%ecx
79	movd	(%edi),%mm4
80	movd	(%esi),%mm5
81	movd	(%ebp),%mm3
82	pmuludq	%mm4,%mm5
83	movq	%mm5,%mm2
84	movq	%mm5,%mm0
85	pand	%mm7,%mm0
86	pmuludq	20(%esp),%mm5
87	pmuludq	%mm5,%mm3
88	paddq	%mm0,%mm3
89	movd	4(%ebp),%mm1
90	movd	4(%esi),%mm0
91	psrlq	$32,%mm2
92	psrlq	$32,%mm3
93	incl	%ecx
94.align	4,0x90
95L0051st:
96	pmuludq	%mm4,%mm0
97	pmuludq	%mm5,%mm1
98	paddq	%mm0,%mm2
99	paddq	%mm1,%mm3
100	movq	%mm2,%mm0
101	pand	%mm7,%mm0
102	movd	4(%ebp,%ecx,4),%mm1
103	paddq	%mm0,%mm3
104	movd	4(%esi,%ecx,4),%mm0
105	psrlq	$32,%mm2
106	movd	%mm3,28(%esp,%ecx,4)
107	psrlq	$32,%mm3
108	leal	1(%ecx),%ecx
109	cmpl	%ebx,%ecx
110	jl	L0051st
111	pmuludq	%mm4,%mm0
112	pmuludq	%mm5,%mm1
113	paddq	%mm0,%mm2
114	paddq	%mm1,%mm3
115	movq	%mm2,%mm0
116	pand	%mm7,%mm0
117	paddq	%mm0,%mm3
118	movd	%mm3,28(%esp,%ecx,4)
119	psrlq	$32,%mm2
120	psrlq	$32,%mm3
121	paddq	%mm2,%mm3
122	movq	%mm3,32(%esp,%ebx,4)
123	incl	%edx
124L006outer:
125	xorl	%ecx,%ecx
126	movd	(%edi,%edx,4),%mm4
127	movd	(%esi),%mm5
128	movd	32(%esp),%mm6
129	movd	(%ebp),%mm3
130	pmuludq	%mm4,%mm5
131	paddq	%mm6,%mm5
132	movq	%mm5,%mm0
133	movq	%mm5,%mm2
134	pand	%mm7,%mm0
135	pmuludq	20(%esp),%mm5
136	pmuludq	%mm5,%mm3
137	paddq	%mm0,%mm3
138	movd	36(%esp),%mm6
139	movd	4(%ebp),%mm1
140	movd	4(%esi),%mm0
141	psrlq	$32,%mm2
142	psrlq	$32,%mm3
143	paddq	%mm6,%mm2
144	incl	%ecx
145	decl	%ebx
146L007inner:
147	pmuludq	%mm4,%mm0
148	pmuludq	%mm5,%mm1
149	paddq	%mm0,%mm2
150	paddq	%mm1,%mm3
151	movq	%mm2,%mm0
152	movd	36(%esp,%ecx,4),%mm6
153	pand	%mm7,%mm0
154	movd	4(%ebp,%ecx,4),%mm1
155	paddq	%mm0,%mm3
156	movd	4(%esi,%ecx,4),%mm0
157	psrlq	$32,%mm2
158	movd	%mm3,28(%esp,%ecx,4)
159	psrlq	$32,%mm3
160	paddq	%mm6,%mm2
161	decl	%ebx
162	leal	1(%ecx),%ecx
163	jnz	L007inner
164	movl	%ecx,%ebx
165	pmuludq	%mm4,%mm0
166	pmuludq	%mm5,%mm1
167	paddq	%mm0,%mm2
168	paddq	%mm1,%mm3
169	movq	%mm2,%mm0
170	pand	%mm7,%mm0
171	paddq	%mm0,%mm3
172	movd	%mm3,28(%esp,%ecx,4)
173	psrlq	$32,%mm2
174	psrlq	$32,%mm3
175	movd	36(%esp,%ebx,4),%mm6
176	paddq	%mm2,%mm3
177	paddq	%mm6,%mm3
178	movq	%mm3,32(%esp,%ebx,4)
179	leal	1(%edx),%edx
180	cmpl	%ebx,%edx
181	jle	L006outer
182	emms
183	jmp	L008common_tail
184.align	4,0x90
185L004non_sse2:
186	movl	8(%esp),%esi
187	leal	1(%ebx),%ebp
188	movl	12(%esp),%edi
189	xorl	%ecx,%ecx
190	movl	%esi,%edx
191	andl	$1,%ebp
192	subl	%edi,%edx
193	leal	4(%edi,%ebx,4),%eax
194	orl	%edx,%ebp
195	movl	(%edi),%edi
196	jz	L009bn_sqr_mont
197	movl	%eax,28(%esp)
198	movl	(%esi),%eax
199	xorl	%edx,%edx
200.align	4,0x90
201L010mull:
202	movl	%edx,%ebp
203	mull	%edi
204	addl	%eax,%ebp
205	leal	1(%ecx),%ecx
206	adcl	$0,%edx
207	movl	(%esi,%ecx,4),%eax
208	cmpl	%ebx,%ecx
209	movl	%ebp,28(%esp,%ecx,4)
210	jl	L010mull
211	movl	%edx,%ebp
212	mull	%edi
213	movl	20(%esp),%edi
214	addl	%ebp,%eax
215	movl	16(%esp),%esi
216	adcl	$0,%edx
217	imull	32(%esp),%edi
218	movl	%eax,32(%esp,%ebx,4)
219	xorl	%ecx,%ecx
220	movl	%edx,36(%esp,%ebx,4)
221	movl	%ecx,40(%esp,%ebx,4)
222	movl	(%esi),%eax
223	mull	%edi
224	addl	32(%esp),%eax
225	movl	4(%esi),%eax
226	adcl	$0,%edx
227	incl	%ecx
228	jmp	L0112ndmadd
229.align	4,0x90
230L0121stmadd:
231	movl	%edx,%ebp
232	mull	%edi
233	addl	32(%esp,%ecx,4),%ebp
234	leal	1(%ecx),%ecx
235	adcl	$0,%edx
236	addl	%eax,%ebp
237	movl	(%esi,%ecx,4),%eax
238	adcl	$0,%edx
239	cmpl	%ebx,%ecx
240	movl	%ebp,28(%esp,%ecx,4)
241	jl	L0121stmadd
242	movl	%edx,%ebp
243	mull	%edi
244	addl	32(%esp,%ebx,4),%eax
245	movl	20(%esp),%edi
246	adcl	$0,%edx
247	movl	16(%esp),%esi
248	addl	%eax,%ebp
249	adcl	$0,%edx
250	imull	32(%esp),%edi
251	xorl	%ecx,%ecx
252	addl	36(%esp,%ebx,4),%edx
253	movl	%ebp,32(%esp,%ebx,4)
254	adcl	$0,%ecx
255	movl	(%esi),%eax
256	movl	%edx,36(%esp,%ebx,4)
257	movl	%ecx,40(%esp,%ebx,4)
258	mull	%edi
259	addl	32(%esp),%eax
260	movl	4(%esi),%eax
261	adcl	$0,%edx
262	movl	$1,%ecx
263.align	4,0x90
264L0112ndmadd:
265	movl	%edx,%ebp
266	mull	%edi
267	addl	32(%esp,%ecx,4),%ebp
268	leal	1(%ecx),%ecx
269	adcl	$0,%edx
270	addl	%eax,%ebp
271	movl	(%esi,%ecx,4),%eax
272	adcl	$0,%edx
273	cmpl	%ebx,%ecx
274	movl	%ebp,24(%esp,%ecx,4)
275	jl	L0112ndmadd
276	movl	%edx,%ebp
277	mull	%edi
278	addl	32(%esp,%ebx,4),%ebp
279	adcl	$0,%edx
280	addl	%eax,%ebp
281	adcl	$0,%edx
282	movl	%ebp,28(%esp,%ebx,4)
283	xorl	%eax,%eax
284	movl	12(%esp),%ecx
285	addl	36(%esp,%ebx,4),%edx
286	adcl	40(%esp,%ebx,4),%eax
287	leal	4(%ecx),%ecx
288	movl	%edx,32(%esp,%ebx,4)
289	cmpl	28(%esp),%ecx
290	movl	%eax,36(%esp,%ebx,4)
291	je	L008common_tail
292	movl	(%ecx),%edi
293	movl	8(%esp),%esi
294	movl	%ecx,12(%esp)
295	xorl	%ecx,%ecx
296	xorl	%edx,%edx
297	movl	(%esi),%eax
298	jmp	L0121stmadd
299.align	4,0x90
300L009bn_sqr_mont:
301	movl	%ebx,(%esp)
302	movl	%ecx,12(%esp)
303	movl	%edi,%eax
304	mull	%edi
305	movl	%eax,32(%esp)
306	movl	%edx,%ebx
307	shrl	$1,%edx
308	andl	$1,%ebx
309	incl	%ecx
310.align	4,0x90
311L013sqr:
312	movl	(%esi,%ecx,4),%eax
313	movl	%edx,%ebp
314	mull	%edi
315	addl	%ebp,%eax
316	leal	1(%ecx),%ecx
317	adcl	$0,%edx
318	leal	(%ebx,%eax,2),%ebp
319	shrl	$31,%eax
320	cmpl	(%esp),%ecx
321	movl	%eax,%ebx
322	movl	%ebp,28(%esp,%ecx,4)
323	jl	L013sqr
324	movl	(%esi,%ecx,4),%eax
325	movl	%edx,%ebp
326	mull	%edi
327	addl	%ebp,%eax
328	movl	20(%esp),%edi
329	adcl	$0,%edx
330	movl	16(%esp),%esi
331	leal	(%ebx,%eax,2),%ebp
332	imull	32(%esp),%edi
333	shrl	$31,%eax
334	movl	%ebp,32(%esp,%ecx,4)
335	leal	(%eax,%edx,2),%ebp
336	movl	(%esi),%eax
337	shrl	$31,%edx
338	movl	%ebp,36(%esp,%ecx,4)
339	movl	%edx,40(%esp,%ecx,4)
340	mull	%edi
341	addl	32(%esp),%eax
342	movl	%ecx,%ebx
343	adcl	$0,%edx
344	movl	4(%esi),%eax
345	movl	$1,%ecx
346.align	4,0x90
347L0143rdmadd:
348	movl	%edx,%ebp
349	mull	%edi
350	addl	32(%esp,%ecx,4),%ebp
351	adcl	$0,%edx
352	addl	%eax,%ebp
353	movl	4(%esi,%ecx,4),%eax
354	adcl	$0,%edx
355	movl	%ebp,28(%esp,%ecx,4)
356	movl	%edx,%ebp
357	mull	%edi
358	addl	36(%esp,%ecx,4),%ebp
359	leal	2(%ecx),%ecx
360	adcl	$0,%edx
361	addl	%eax,%ebp
362	movl	(%esi,%ecx,4),%eax
363	adcl	$0,%edx
364	cmpl	%ebx,%ecx
365	movl	%ebp,24(%esp,%ecx,4)
366	jl	L0143rdmadd
367	movl	%edx,%ebp
368	mull	%edi
369	addl	32(%esp,%ebx,4),%ebp
370	adcl	$0,%edx
371	addl	%eax,%ebp
372	adcl	$0,%edx
373	movl	%ebp,28(%esp,%ebx,4)
374	movl	12(%esp),%ecx
375	xorl	%eax,%eax
376	movl	8(%esp),%esi
377	addl	36(%esp,%ebx,4),%edx
378	adcl	40(%esp,%ebx,4),%eax
379	movl	%edx,32(%esp,%ebx,4)
380	cmpl	%ebx,%ecx
381	movl	%eax,36(%esp,%ebx,4)
382	je	L008common_tail
383	movl	4(%esi,%ecx,4),%edi
384	leal	1(%ecx),%ecx
385	movl	%edi,%eax
386	movl	%ecx,12(%esp)
387	mull	%edi
388	addl	32(%esp,%ecx,4),%eax
389	adcl	$0,%edx
390	movl	%eax,32(%esp,%ecx,4)
391	xorl	%ebp,%ebp
392	cmpl	%ebx,%ecx
393	leal	1(%ecx),%ecx
394	je	L015sqrlast
395	movl	%edx,%ebx
396	shrl	$1,%edx
397	andl	$1,%ebx
398.align	4,0x90
399L016sqradd:
400	movl	(%esi,%ecx,4),%eax
401	movl	%edx,%ebp
402	mull	%edi
403	addl	%ebp,%eax
404	leal	(%eax,%eax,1),%ebp
405	adcl	$0,%edx
406	shrl	$31,%eax
407	addl	32(%esp,%ecx,4),%ebp
408	leal	1(%ecx),%ecx
409	adcl	$0,%eax
410	addl	%ebx,%ebp
411	adcl	$0,%eax
412	cmpl	(%esp),%ecx
413	movl	%ebp,28(%esp,%ecx,4)
414	movl	%eax,%ebx
415	jle	L016sqradd
416	movl	%edx,%ebp
417	addl	%edx,%edx
418	shrl	$31,%ebp
419	addl	%ebx,%edx
420	adcl	$0,%ebp
421L015sqrlast:
422	movl	20(%esp),%edi
423	movl	16(%esp),%esi
424	imull	32(%esp),%edi
425	addl	32(%esp,%ecx,4),%edx
426	movl	(%esi),%eax
427	adcl	$0,%ebp
428	movl	%edx,32(%esp,%ecx,4)
429	movl	%ebp,36(%esp,%ecx,4)
430	mull	%edi
431	addl	32(%esp),%eax
432	leal	-1(%ecx),%ebx
433	adcl	$0,%edx
434	movl	$1,%ecx
435	movl	4(%esi),%eax
436	jmp	L0143rdmadd
437.align	4,0x90
438L008common_tail:
439	movl	16(%esp),%ebp
440	movl	4(%esp),%edi
441	leal	32(%esp),%esi
442	movl	(%esi),%eax
443	movl	%ebx,%ecx
444	xorl	%edx,%edx
445.align	4,0x90
446L017sub:
447	sbbl	(%ebp,%edx,4),%eax
448	movl	%eax,(%edi,%edx,4)
449	decl	%ecx
450	movl	4(%esi,%edx,4),%eax
451	leal	1(%edx),%edx
452	jge	L017sub
453	sbbl	$0,%eax
454	movl	$-1,%edx
455	xorl	%eax,%edx
456	jmp	L018copy
457.align	4,0x90
458L018copy:
459	movl	32(%esp,%ebx,4),%esi
460	movl	(%edi,%ebx,4),%ebp
461	movl	%ecx,32(%esp,%ebx,4)
462	andl	%eax,%esi
463	andl	%edx,%ebp
464	orl	%esi,%ebp
465	movl	%ebp,(%edi,%ebx,4)
466	decl	%ebx
467	jge	L018copy
468	movl	24(%esp),%esp
469	movl	$1,%eax
470L000just_leave:
471	popl	%edi
472	popl	%esi
473	popl	%ebx
474	popl	%ebp
475	ret
476.byte	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
477.byte	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
478.byte	54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
479.byte	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
480.byte	111,114,103,62,0
481.section __IMPORT,__pointers,non_lazy_symbol_pointers
482L_OPENSSL_ia32cap_P$non_lazy_ptr:
483.indirect_symbol	_OPENSSL_ia32cap_P
484.long	0
485#endif
486