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	GFp_bn_mul_mont
10.hidden	GFp_bn_mul_mont
11.type	GFp_bn_mul_mont,@function
12.align	16
13GFp_bn_mul_mont:
14.L_GFp_bn_mul_mont_begin:
15	pushl	%ebp
16	pushl	%ebx
17	pushl	%esi
18	pushl	%edi
19	xorl	%eax,%eax
20	movl	40(%esp),%edi
21	leal	20(%esp),%esi
22	leal	24(%esp),%edx
23	addl	$2,%edi
24	negl	%edi
25	leal	-32(%esp,%edi,4),%ebp
26	negl	%edi
27	movl	%ebp,%eax
28	subl	%edx,%eax
29	andl	$2047,%eax
30	subl	%eax,%ebp
31	xorl	%ebp,%edx
32	andl	$2048,%edx
33	xorl	$2048,%edx
34	subl	%edx,%ebp
35	andl	$-64,%ebp
36	movl	%esp,%eax
37	subl	%ebp,%eax
38	andl	$-4096,%eax
39	movl	%esp,%edx
40	leal	(%ebp,%eax,1),%esp
41	movl	(%esp),%eax
42	cmpl	%ebp,%esp
43	ja	.L000page_walk
44	jmp	.L001page_walk_done
45.align	16
46.L000page_walk:
47	leal	-4096(%esp),%esp
48	movl	(%esp),%eax
49	cmpl	%ebp,%esp
50	ja	.L000page_walk
51.L001page_walk_done:
52	movl	(%esi),%eax
53	movl	4(%esi),%ebx
54	movl	8(%esi),%ecx
55	movl	12(%esi),%ebp
56	movl	16(%esi),%esi
57	movl	(%esi),%esi
58	movl	%eax,4(%esp)
59	movl	%ebx,8(%esp)
60	movl	%ecx,12(%esp)
61	movl	%ebp,16(%esp)
62	movl	%esi,20(%esp)
63	leal	-3(%edi),%ebx
64	movl	%edx,24(%esp)
65	call	.L002PIC_me_up
66.L002PIC_me_up:
67	popl	%eax
68	leal	GFp_ia32cap_P-.L002PIC_me_up(%eax),%eax
69	btl	$26,(%eax)
70	movl	$-1,%eax
71	movd	%eax,%mm7
72	movl	8(%esp),%esi
73	movl	12(%esp),%edi
74	movl	16(%esp),%ebp
75	xorl	%edx,%edx
76	xorl	%ecx,%ecx
77	movd	(%edi),%mm4
78	movd	(%esi),%mm5
79	movd	(%ebp),%mm3
80	pmuludq	%mm4,%mm5
81	movq	%mm5,%mm2
82	movq	%mm5,%mm0
83	pand	%mm7,%mm0
84	pmuludq	20(%esp),%mm5
85	pmuludq	%mm5,%mm3
86	paddq	%mm0,%mm3
87	movd	4(%ebp),%mm1
88	movd	4(%esi),%mm0
89	psrlq	$32,%mm2
90	psrlq	$32,%mm3
91	incl	%ecx
92.align	16
93.L0031st:
94	pmuludq	%mm4,%mm0
95	pmuludq	%mm5,%mm1
96	paddq	%mm0,%mm2
97	paddq	%mm1,%mm3
98	movq	%mm2,%mm0
99	pand	%mm7,%mm0
100	movd	4(%ebp,%ecx,4),%mm1
101	paddq	%mm0,%mm3
102	movd	4(%esi,%ecx,4),%mm0
103	psrlq	$32,%mm2
104	movd	%mm3,28(%esp,%ecx,4)
105	psrlq	$32,%mm3
106	leal	1(%ecx),%ecx
107	cmpl	%ebx,%ecx
108	jl	.L0031st
109	pmuludq	%mm4,%mm0
110	pmuludq	%mm5,%mm1
111	paddq	%mm0,%mm2
112	paddq	%mm1,%mm3
113	movq	%mm2,%mm0
114	pand	%mm7,%mm0
115	paddq	%mm0,%mm3
116	movd	%mm3,28(%esp,%ecx,4)
117	psrlq	$32,%mm2
118	psrlq	$32,%mm3
119	paddq	%mm2,%mm3
120	movq	%mm3,32(%esp,%ebx,4)
121	incl	%edx
122.L004outer:
123	xorl	%ecx,%ecx
124	movd	(%edi,%edx,4),%mm4
125	movd	(%esi),%mm5
126	movd	32(%esp),%mm6
127	movd	(%ebp),%mm3
128	pmuludq	%mm4,%mm5
129	paddq	%mm6,%mm5
130	movq	%mm5,%mm0
131	movq	%mm5,%mm2
132	pand	%mm7,%mm0
133	pmuludq	20(%esp),%mm5
134	pmuludq	%mm5,%mm3
135	paddq	%mm0,%mm3
136	movd	36(%esp),%mm6
137	movd	4(%ebp),%mm1
138	movd	4(%esi),%mm0
139	psrlq	$32,%mm2
140	psrlq	$32,%mm3
141	paddq	%mm6,%mm2
142	incl	%ecx
143	decl	%ebx
144.L005inner:
145	pmuludq	%mm4,%mm0
146	pmuludq	%mm5,%mm1
147	paddq	%mm0,%mm2
148	paddq	%mm1,%mm3
149	movq	%mm2,%mm0
150	movd	36(%esp,%ecx,4),%mm6
151	pand	%mm7,%mm0
152	movd	4(%ebp,%ecx,4),%mm1
153	paddq	%mm0,%mm3
154	movd	4(%esi,%ecx,4),%mm0
155	psrlq	$32,%mm2
156	movd	%mm3,28(%esp,%ecx,4)
157	psrlq	$32,%mm3
158	paddq	%mm6,%mm2
159	decl	%ebx
160	leal	1(%ecx),%ecx
161	jnz	.L005inner
162	movl	%ecx,%ebx
163	pmuludq	%mm4,%mm0
164	pmuludq	%mm5,%mm1
165	paddq	%mm0,%mm2
166	paddq	%mm1,%mm3
167	movq	%mm2,%mm0
168	pand	%mm7,%mm0
169	paddq	%mm0,%mm3
170	movd	%mm3,28(%esp,%ecx,4)
171	psrlq	$32,%mm2
172	psrlq	$32,%mm3
173	movd	36(%esp,%ebx,4),%mm6
174	paddq	%mm2,%mm3
175	paddq	%mm6,%mm3
176	movq	%mm3,32(%esp,%ebx,4)
177	leal	1(%edx),%edx
178	cmpl	%ebx,%edx
179	jle	.L004outer
180	emms
181.align	16
182.L006common_tail:
183	movl	16(%esp),%ebp
184	movl	4(%esp),%edi
185	leal	32(%esp),%esi
186	movl	(%esi),%eax
187	movl	%ebx,%ecx
188	xorl	%edx,%edx
189.align	16
190.L007sub:
191	sbbl	(%ebp,%edx,4),%eax
192	movl	%eax,(%edi,%edx,4)
193	decl	%ecx
194	movl	4(%esi,%edx,4),%eax
195	leal	1(%edx),%edx
196	jge	.L007sub
197	sbbl	$0,%eax
198	movl	$-1,%edx
199	xorl	%eax,%edx
200	jmp	.L008copy
201.align	16
202.L008copy:
203	movl	32(%esp,%ebx,4),%esi
204	movl	(%edi,%ebx,4),%ebp
205	movl	%ecx,32(%esp,%ebx,4)
206	andl	%eax,%esi
207	andl	%edx,%ebp
208	orl	%esi,%ebp
209	movl	%ebp,(%edi,%ebx,4)
210	decl	%ebx
211	jge	.L008copy
212	movl	24(%esp),%esp
213	movl	$1,%eax
214	popl	%edi
215	popl	%esi
216	popl	%ebx
217	popl	%ebp
218	ret
219.size	GFp_bn_mul_mont,.-.L_GFp_bn_mul_mont_begin
220.byte	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
221.byte	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
222.byte	54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
223.byte	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
224.byte	111,114,103,62,0
225#endif
226.section	.note.GNU-stack,"",@progbits
227