• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.file	"crypto/bn/asm/x86-mont.s"
2.text
3.globl	bn_mul_mont
4.type	bn_mul_mont,@function
5.align	16
6bn_mul_mont:
7.L_bn_mul_mont_begin:
8	pushl	%ebp
9	pushl	%ebx
10	pushl	%esi
11	pushl	%edi
12	xorl	%eax,%eax
13	movl	40(%esp),%edi
14	cmpl	$4,%edi
15	jl	.L000just_leave
16	leal	20(%esp),%esi
17	leal	24(%esp),%edx
18	movl	%esp,%ebp
19	addl	$2,%edi
20	negl	%edi
21	leal	-32(%esp,%edi,4),%esp
22	negl	%edi
23	movl	%esp,%eax
24	subl	%edx,%eax
25	andl	$2047,%eax
26	subl	%eax,%esp
27	xorl	%esp,%edx
28	andl	$2048,%edx
29	xorl	$2048,%edx
30	subl	%edx,%esp
31	andl	$-64,%esp
32	movl	(%esi),%eax
33	movl	4(%esi),%ebx
34	movl	8(%esi),%ecx
35	movl	12(%esi),%edx
36	movl	16(%esi),%esi
37	movl	(%esi),%esi
38	movl	%eax,4(%esp)
39	movl	%ebx,8(%esp)
40	movl	%ecx,12(%esp)
41	movl	%edx,16(%esp)
42	movl	%esi,20(%esp)
43	leal	-3(%edi),%ebx
44	movl	%ebp,24(%esp)
45	movl	8(%esp),%esi
46	leal	1(%ebx),%ebp
47	movl	12(%esp),%edi
48	xorl	%ecx,%ecx
49	movl	%esi,%edx
50	andl	$1,%ebp
51	subl	%edi,%edx
52	leal	4(%edi,%ebx,4),%eax
53	orl	%edx,%ebp
54	movl	(%edi),%edi
55	jz	.L001bn_sqr_mont
56	movl	%eax,28(%esp)
57	movl	(%esi),%eax
58	xorl	%edx,%edx
59.align	16
60.L002mull:
61	movl	%edx,%ebp
62	mull	%edi
63	addl	%eax,%ebp
64	leal	1(%ecx),%ecx
65	adcl	$0,%edx
66	movl	(%esi,%ecx,4),%eax
67	cmpl	%ebx,%ecx
68	movl	%ebp,28(%esp,%ecx,4)
69	jl	.L002mull
70	movl	%edx,%ebp
71	mull	%edi
72	movl	20(%esp),%edi
73	addl	%ebp,%eax
74	movl	16(%esp),%esi
75	adcl	$0,%edx
76	imull	32(%esp),%edi
77	movl	%eax,32(%esp,%ebx,4)
78	xorl	%ecx,%ecx
79	movl	%edx,36(%esp,%ebx,4)
80	movl	%ecx,40(%esp,%ebx,4)
81	movl	(%esi),%eax
82	mull	%edi
83	addl	32(%esp),%eax
84	movl	4(%esi),%eax
85	adcl	$0,%edx
86	incl	%ecx
87	jmp	.L0032ndmadd
88.align	16
89.L0041stmadd:
90	movl	%edx,%ebp
91	mull	%edi
92	addl	32(%esp,%ecx,4),%ebp
93	leal	1(%ecx),%ecx
94	adcl	$0,%edx
95	addl	%eax,%ebp
96	movl	(%esi,%ecx,4),%eax
97	adcl	$0,%edx
98	cmpl	%ebx,%ecx
99	movl	%ebp,28(%esp,%ecx,4)
100	jl	.L0041stmadd
101	movl	%edx,%ebp
102	mull	%edi
103	addl	32(%esp,%ebx,4),%eax
104	movl	20(%esp),%edi
105	adcl	$0,%edx
106	movl	16(%esp),%esi
107	addl	%eax,%ebp
108	adcl	$0,%edx
109	imull	32(%esp),%edi
110	xorl	%ecx,%ecx
111	addl	36(%esp,%ebx,4),%edx
112	movl	%ebp,32(%esp,%ebx,4)
113	adcl	$0,%ecx
114	movl	(%esi),%eax
115	movl	%edx,36(%esp,%ebx,4)
116	movl	%ecx,40(%esp,%ebx,4)
117	mull	%edi
118	addl	32(%esp),%eax
119	movl	4(%esi),%eax
120	adcl	$0,%edx
121	movl	$1,%ecx
122.align	16
123.L0032ndmadd:
124	movl	%edx,%ebp
125	mull	%edi
126	addl	32(%esp,%ecx,4),%ebp
127	leal	1(%ecx),%ecx
128	adcl	$0,%edx
129	addl	%eax,%ebp
130	movl	(%esi,%ecx,4),%eax
131	adcl	$0,%edx
132	cmpl	%ebx,%ecx
133	movl	%ebp,24(%esp,%ecx,4)
134	jl	.L0032ndmadd
135	movl	%edx,%ebp
136	mull	%edi
137	addl	32(%esp,%ebx,4),%ebp
138	adcl	$0,%edx
139	addl	%eax,%ebp
140	adcl	$0,%edx
141	movl	%ebp,28(%esp,%ebx,4)
142	xorl	%eax,%eax
143	movl	12(%esp),%ecx
144	addl	36(%esp,%ebx,4),%edx
145	adcl	40(%esp,%ebx,4),%eax
146	leal	4(%ecx),%ecx
147	movl	%edx,32(%esp,%ebx,4)
148	cmpl	28(%esp),%ecx
149	movl	%eax,36(%esp,%ebx,4)
150	je	.L005common_tail
151	movl	(%ecx),%edi
152	movl	8(%esp),%esi
153	movl	%ecx,12(%esp)
154	xorl	%ecx,%ecx
155	xorl	%edx,%edx
156	movl	(%esi),%eax
157	jmp	.L0041stmadd
158.align	16
159.L001bn_sqr_mont:
160	movl	%ebx,(%esp)
161	movl	%ecx,12(%esp)
162	movl	%edi,%eax
163	mull	%edi
164	movl	%eax,32(%esp)
165	movl	%edx,%ebx
166	shrl	$1,%edx
167	andl	$1,%ebx
168	incl	%ecx
169.align	16
170.L006sqr:
171	movl	(%esi,%ecx,4),%eax
172	movl	%edx,%ebp
173	mull	%edi
174	addl	%ebp,%eax
175	leal	1(%ecx),%ecx
176	adcl	$0,%edx
177	leal	(%ebx,%eax,2),%ebp
178	shrl	$31,%eax
179	cmpl	(%esp),%ecx
180	movl	%eax,%ebx
181	movl	%ebp,28(%esp,%ecx,4)
182	jl	.L006sqr
183	movl	(%esi,%ecx,4),%eax
184	movl	%edx,%ebp
185	mull	%edi
186	addl	%ebp,%eax
187	movl	20(%esp),%edi
188	adcl	$0,%edx
189	movl	16(%esp),%esi
190	leal	(%ebx,%eax,2),%ebp
191	imull	32(%esp),%edi
192	shrl	$31,%eax
193	movl	%ebp,32(%esp,%ecx,4)
194	leal	(%eax,%edx,2),%ebp
195	movl	(%esi),%eax
196	shrl	$31,%edx
197	movl	%ebp,36(%esp,%ecx,4)
198	movl	%edx,40(%esp,%ecx,4)
199	mull	%edi
200	addl	32(%esp),%eax
201	movl	%ecx,%ebx
202	adcl	$0,%edx
203	movl	4(%esi),%eax
204	movl	$1,%ecx
205.align	16
206.L0073rdmadd:
207	movl	%edx,%ebp
208	mull	%edi
209	addl	32(%esp,%ecx,4),%ebp
210	adcl	$0,%edx
211	addl	%eax,%ebp
212	movl	4(%esi,%ecx,4),%eax
213	adcl	$0,%edx
214	movl	%ebp,28(%esp,%ecx,4)
215	movl	%edx,%ebp
216	mull	%edi
217	addl	36(%esp,%ecx,4),%ebp
218	leal	2(%ecx),%ecx
219	adcl	$0,%edx
220	addl	%eax,%ebp
221	movl	(%esi,%ecx,4),%eax
222	adcl	$0,%edx
223	cmpl	%ebx,%ecx
224	movl	%ebp,24(%esp,%ecx,4)
225	jl	.L0073rdmadd
226	movl	%edx,%ebp
227	mull	%edi
228	addl	32(%esp,%ebx,4),%ebp
229	adcl	$0,%edx
230	addl	%eax,%ebp
231	adcl	$0,%edx
232	movl	%ebp,28(%esp,%ebx,4)
233	movl	12(%esp),%ecx
234	xorl	%eax,%eax
235	movl	8(%esp),%esi
236	addl	36(%esp,%ebx,4),%edx
237	adcl	40(%esp,%ebx,4),%eax
238	movl	%edx,32(%esp,%ebx,4)
239	cmpl	%ebx,%ecx
240	movl	%eax,36(%esp,%ebx,4)
241	je	.L005common_tail
242	movl	4(%esi,%ecx,4),%edi
243	leal	1(%ecx),%ecx
244	movl	%edi,%eax
245	movl	%ecx,12(%esp)
246	mull	%edi
247	addl	32(%esp,%ecx,4),%eax
248	adcl	$0,%edx
249	movl	%eax,32(%esp,%ecx,4)
250	xorl	%ebp,%ebp
251	cmpl	%ebx,%ecx
252	leal	1(%ecx),%ecx
253	je	.L008sqrlast
254	movl	%edx,%ebx
255	shrl	$1,%edx
256	andl	$1,%ebx
257.align	16
258.L009sqradd:
259	movl	(%esi,%ecx,4),%eax
260	movl	%edx,%ebp
261	mull	%edi
262	addl	%ebp,%eax
263	leal	(%eax,%eax,1),%ebp
264	adcl	$0,%edx
265	shrl	$31,%eax
266	addl	32(%esp,%ecx,4),%ebp
267	leal	1(%ecx),%ecx
268	adcl	$0,%eax
269	addl	%ebx,%ebp
270	adcl	$0,%eax
271	cmpl	(%esp),%ecx
272	movl	%ebp,28(%esp,%ecx,4)
273	movl	%eax,%ebx
274	jle	.L009sqradd
275	movl	%edx,%ebp
276	addl	%edx,%edx
277	shrl	$31,%ebp
278	addl	%ebx,%edx
279	adcl	$0,%ebp
280.L008sqrlast:
281	movl	20(%esp),%edi
282	movl	16(%esp),%esi
283	imull	32(%esp),%edi
284	addl	32(%esp,%ecx,4),%edx
285	movl	(%esi),%eax
286	adcl	$0,%ebp
287	movl	%edx,32(%esp,%ecx,4)
288	movl	%ebp,36(%esp,%ecx,4)
289	mull	%edi
290	addl	32(%esp),%eax
291	leal	-1(%ecx),%ebx
292	adcl	$0,%edx
293	movl	$1,%ecx
294	movl	4(%esi),%eax
295	jmp	.L0073rdmadd
296.align	16
297.L005common_tail:
298	movl	16(%esp),%ebp
299	movl	4(%esp),%edi
300	leal	32(%esp),%esi
301	movl	(%esi),%eax
302	movl	%ebx,%ecx
303	xorl	%edx,%edx
304.align	16
305.L010sub:
306	sbbl	(%ebp,%edx,4),%eax
307	movl	%eax,(%edi,%edx,4)
308	decl	%ecx
309	movl	4(%esi,%edx,4),%eax
310	leal	1(%edx),%edx
311	jge	.L010sub
312	sbbl	$0,%eax
313	andl	%eax,%esi
314	notl	%eax
315	movl	%edi,%ebp
316	andl	%eax,%ebp
317	orl	%ebp,%esi
318.align	16
319.L011copy:
320	movl	(%esi,%ebx,4),%eax
321	movl	%eax,(%edi,%ebx,4)
322	movl	%ecx,32(%esp,%ebx,4)
323	decl	%ebx
324	jge	.L011copy
325	movl	24(%esp),%esp
326	movl	$1,%eax
327.L000just_leave:
328	popl	%edi
329	popl	%esi
330	popl	%ebx
331	popl	%ebp
332	ret
333.size	bn_mul_mont,.-.L_bn_mul_mont_begin
334.byte	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
335.byte	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
336.byte	54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
337.byte	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
338.byte	111,114,103,62,0
339