195967Speter	# $FreeBSD$
2238405Sjkim.file	"bn-586.s"
395967Speter.text
4238405Sjkim.globl	bn_mul_add_words
5238405Sjkim.type	bn_mul_add_words,@function
6238405Sjkim.align	16
795967Speterbn_mul_add_words:
8238405Sjkim.L_bn_mul_add_words_begin:
9238405Sjkim	leal	OPENSSL_ia32cap_P,%eax
10238405Sjkim	btl	$26,(%eax)
11238405Sjkim	jnc	.L000maw_non_sse2
12238405Sjkim	movl	4(%esp),%eax
13238405Sjkim	movl	8(%esp),%edx
14238405Sjkim	movl	12(%esp),%ecx
15238405Sjkim	movd	16(%esp),%mm0
16238405Sjkim	pxor	%mm1,%mm1
17238405Sjkim	jmp	.L001maw_sse2_entry
18238405Sjkim.align	16
19238405Sjkim.L002maw_sse2_unrolled:
20238405Sjkim	movd	(%eax),%mm3
21238405Sjkim	paddq	%mm3,%mm1
22238405Sjkim	movd	(%edx),%mm2
23238405Sjkim	pmuludq	%mm0,%mm2
24238405Sjkim	movd	4(%edx),%mm4
25238405Sjkim	pmuludq	%mm0,%mm4
26238405Sjkim	movd	8(%edx),%mm6
27238405Sjkim	pmuludq	%mm0,%mm6
28238405Sjkim	movd	12(%edx),%mm7
29238405Sjkim	pmuludq	%mm0,%mm7
30238405Sjkim	paddq	%mm2,%mm1
31238405Sjkim	movd	4(%eax),%mm3
32238405Sjkim	paddq	%mm4,%mm3
33238405Sjkim	movd	8(%eax),%mm5
34238405Sjkim	paddq	%mm6,%mm5
35238405Sjkim	movd	12(%eax),%mm4
36238405Sjkim	paddq	%mm4,%mm7
37238405Sjkim	movd	%mm1,(%eax)
38238405Sjkim	movd	16(%edx),%mm2
39238405Sjkim	pmuludq	%mm0,%mm2
40238405Sjkim	psrlq	$32,%mm1
41238405Sjkim	movd	20(%edx),%mm4
42238405Sjkim	pmuludq	%mm0,%mm4
43238405Sjkim	paddq	%mm3,%mm1
44238405Sjkim	movd	24(%edx),%mm6
45238405Sjkim	pmuludq	%mm0,%mm6
46238405Sjkim	movd	%mm1,4(%eax)
47238405Sjkim	psrlq	$32,%mm1
48238405Sjkim	movd	28(%edx),%mm3
49238405Sjkim	addl	$32,%edx
50238405Sjkim	pmuludq	%mm0,%mm3
51238405Sjkim	paddq	%mm5,%mm1
52238405Sjkim	movd	16(%eax),%mm5
53238405Sjkim	paddq	%mm5,%mm2
54238405Sjkim	movd	%mm1,8(%eax)
55238405Sjkim	psrlq	$32,%mm1
56238405Sjkim	paddq	%mm7,%mm1
57238405Sjkim	movd	20(%eax),%mm5
58238405Sjkim	paddq	%mm5,%mm4
59238405Sjkim	movd	%mm1,12(%eax)
60238405Sjkim	psrlq	$32,%mm1
61238405Sjkim	paddq	%mm2,%mm1
62238405Sjkim	movd	24(%eax),%mm5
63238405Sjkim	paddq	%mm5,%mm6
64238405Sjkim	movd	%mm1,16(%eax)
65238405Sjkim	psrlq	$32,%mm1
66238405Sjkim	paddq	%mm4,%mm1
67238405Sjkim	movd	28(%eax),%mm5
68238405Sjkim	paddq	%mm5,%mm3
69238405Sjkim	movd	%mm1,20(%eax)
70238405Sjkim	psrlq	$32,%mm1
71238405Sjkim	paddq	%mm6,%mm1
72238405Sjkim	movd	%mm1,24(%eax)
73238405Sjkim	psrlq	$32,%mm1
74238405Sjkim	paddq	%mm3,%mm1
75238405Sjkim	movd	%mm1,28(%eax)
76238405Sjkim	leal	32(%eax),%eax
77238405Sjkim	psrlq	$32,%mm1
78238405Sjkim	subl	$8,%ecx
79238405Sjkim	jz	.L003maw_sse2_exit
80238405Sjkim.L001maw_sse2_entry:
81238405Sjkim	testl	$4294967288,%ecx
82238405Sjkim	jnz	.L002maw_sse2_unrolled
83238405Sjkim.align	4
84238405Sjkim.L004maw_sse2_loop:
85238405Sjkim	movd	(%edx),%mm2
86238405Sjkim	movd	(%eax),%mm3
87238405Sjkim	pmuludq	%mm0,%mm2
88238405Sjkim	leal	4(%edx),%edx
89238405Sjkim	paddq	%mm3,%mm1
90238405Sjkim	paddq	%mm2,%mm1
91238405Sjkim	movd	%mm1,(%eax)
92238405Sjkim	subl	$1,%ecx
93238405Sjkim	psrlq	$32,%mm1
94238405Sjkim	leal	4(%eax),%eax
95238405Sjkim	jnz	.L004maw_sse2_loop
96238405Sjkim.L003maw_sse2_exit:
97238405Sjkim	movd	%mm1,%eax
98238405Sjkim	emms
99238405Sjkim	ret
100238405Sjkim.align	16
101238405Sjkim.L000maw_non_sse2:
10295967Speter	pushl	%ebp
10395967Speter	pushl	%ebx
10495967Speter	pushl	%esi
10595967Speter	pushl	%edi
10695967Speter
107238405Sjkim	xorl	%esi,%esi
108238405Sjkim	movl	20(%esp),%edi
109238405Sjkim	movl	28(%esp),%ecx
110238405Sjkim	movl	24(%esp),%ebx
111238405Sjkim	andl	$4294967288,%ecx
112238405Sjkim	movl	32(%esp),%ebp
11395967Speter	pushl	%ecx
114238405Sjkim	jz	.L005maw_finish
115238405Sjkim.align	16
116238405Sjkim.L006maw_loop:
117127326Smarkm
118238405Sjkim	movl	(%ebx),%eax
11995967Speter	mull	%ebp
120238405Sjkim	addl	%esi,%eax
121238405Sjkim	adcl	$0,%edx
122238405Sjkim	addl	(%edi),%eax
123238405Sjkim	adcl	$0,%edx
124238405Sjkim	movl	%eax,(%edi)
125238405Sjkim	movl	%edx,%esi
126127326Smarkm
127238405Sjkim	movl	4(%ebx),%eax
12895967Speter	mull	%ebp
129238405Sjkim	addl	%esi,%eax
130238405Sjkim	adcl	$0,%edx
131238405Sjkim	addl	4(%edi),%eax
132238405Sjkim	adcl	$0,%edx
133238405Sjkim	movl	%eax,4(%edi)
134238405Sjkim	movl	%edx,%esi
135127326Smarkm
136238405Sjkim	movl	8(%ebx),%eax
13795967Speter	mull	%ebp
138238405Sjkim	addl	%esi,%eax
139238405Sjkim	adcl	$0,%edx
140238405Sjkim	addl	8(%edi),%eax
141238405Sjkim	adcl	$0,%edx
142238405Sjkim	movl	%eax,8(%edi)
143238405Sjkim	movl	%edx,%esi
144127326Smarkm
145238405Sjkim	movl	12(%ebx),%eax
14695967Speter	mull	%ebp
147238405Sjkim	addl	%esi,%eax
148238405Sjkim	adcl	$0,%edx
149238405Sjkim	addl	12(%edi),%eax
150238405Sjkim	adcl	$0,%edx
151238405Sjkim	movl	%eax,12(%edi)
152238405Sjkim	movl	%edx,%esi
153127326Smarkm
154238405Sjkim	movl	16(%ebx),%eax
15595967Speter	mull	%ebp
156238405Sjkim	addl	%esi,%eax
157238405Sjkim	adcl	$0,%edx
158238405Sjkim	addl	16(%edi),%eax
159238405Sjkim	adcl	$0,%edx
160238405Sjkim	movl	%eax,16(%edi)
161238405Sjkim	movl	%edx,%esi
162127326Smarkm
163238405Sjkim	movl	20(%ebx),%eax
16495967Speter	mull	%ebp
165238405Sjkim	addl	%esi,%eax
166238405Sjkim	adcl	$0,%edx
167238405Sjkim	addl	20(%edi),%eax
168238405Sjkim	adcl	$0,%edx
169238405Sjkim	movl	%eax,20(%edi)
170238405Sjkim	movl	%edx,%esi
171127326Smarkm
172238405Sjkim	movl	24(%ebx),%eax
17395967Speter	mull	%ebp
174238405Sjkim	addl	%esi,%eax
175238405Sjkim	adcl	$0,%edx
176238405Sjkim	addl	24(%edi),%eax
177238405Sjkim	adcl	$0,%edx
178238405Sjkim	movl	%eax,24(%edi)
179238405Sjkim	movl	%edx,%esi
180127326Smarkm
181238405Sjkim	movl	28(%ebx),%eax
18295967Speter	mull	%ebp
183238405Sjkim	addl	%esi,%eax
184238405Sjkim	adcl	$0,%edx
185238405Sjkim	addl	28(%edi),%eax
186238405Sjkim	adcl	$0,%edx
187238405Sjkim	movl	%eax,28(%edi)
188238405Sjkim	movl	%edx,%esi
18995967Speter
190238405Sjkim	subl	$8,%ecx
191238405Sjkim	leal	32(%ebx),%ebx
192238405Sjkim	leal	32(%edi),%edi
193238405Sjkim	jnz	.L006maw_loop
194238405Sjkim.L005maw_finish:
195238405Sjkim	movl	32(%esp),%ecx
196238405Sjkim	andl	$7,%ecx
197238405Sjkim	jnz	.L007maw_finish2
198238405Sjkim	jmp	.L008maw_end
199238405Sjkim.L007maw_finish2:
200127326Smarkm
201238405Sjkim	movl	(%ebx),%eax
20295967Speter	mull	%ebp
203238405Sjkim	addl	%esi,%eax
204238405Sjkim	adcl	$0,%edx
205238405Sjkim	addl	(%edi),%eax
206238405Sjkim	adcl	$0,%edx
20795967Speter	decl	%ecx
208238405Sjkim	movl	%eax,(%edi)
209238405Sjkim	movl	%edx,%esi
210238405Sjkim	jz	.L008maw_end
211127326Smarkm
212238405Sjkim	movl	4(%ebx),%eax
21395967Speter	mull	%ebp
214238405Sjkim	addl	%esi,%eax
215238405Sjkim	adcl	$0,%edx
216238405Sjkim	addl	4(%edi),%eax
217238405Sjkim	adcl	$0,%edx
21895967Speter	decl	%ecx
219238405Sjkim	movl	%eax,4(%edi)
220238405Sjkim	movl	%edx,%esi
221238405Sjkim	jz	.L008maw_end
222127326Smarkm
223238405Sjkim	movl	8(%ebx),%eax
22495967Speter	mull	%ebp
225238405Sjkim	addl	%esi,%eax
226238405Sjkim	adcl	$0,%edx
227238405Sjkim	addl	8(%edi),%eax
228238405Sjkim	adcl	$0,%edx
22995967Speter	decl	%ecx
230238405Sjkim	movl	%eax,8(%edi)
231238405Sjkim	movl	%edx,%esi
232238405Sjkim	jz	.L008maw_end
233127326Smarkm
234238405Sjkim	movl	12(%ebx),%eax
23595967Speter	mull	%ebp
236238405Sjkim	addl	%esi,%eax
237238405Sjkim	adcl	$0,%edx
238238405Sjkim	addl	12(%edi),%eax
239238405Sjkim	adcl	$0,%edx
24095967Speter	decl	%ecx
241238405Sjkim	movl	%eax,12(%edi)
242238405Sjkim	movl	%edx,%esi
243238405Sjkim	jz	.L008maw_end
244127326Smarkm
245238405Sjkim	movl	16(%ebx),%eax
24695967Speter	mull	%ebp
247238405Sjkim	addl	%esi,%eax
248238405Sjkim	adcl	$0,%edx
249238405Sjkim	addl	16(%edi),%eax
250238405Sjkim	adcl	$0,%edx
25195967Speter	decl	%ecx
252238405Sjkim	movl	%eax,16(%edi)
253238405Sjkim	movl	%edx,%esi
254238405Sjkim	jz	.L008maw_end
255127326Smarkm
256238405Sjkim	movl	20(%ebx),%eax
25795967Speter	mull	%ebp
258238405Sjkim	addl	%esi,%eax
259238405Sjkim	adcl	$0,%edx
260238405Sjkim	addl	20(%edi),%eax
261238405Sjkim	adcl	$0,%edx
26295967Speter	decl	%ecx
263238405Sjkim	movl	%eax,20(%edi)
264238405Sjkim	movl	%edx,%esi
265238405Sjkim	jz	.L008maw_end
266127326Smarkm
267238405Sjkim	movl	24(%ebx),%eax
26895967Speter	mull	%ebp
269238405Sjkim	addl	%esi,%eax
270238405Sjkim	adcl	$0,%edx
271238405Sjkim	addl	24(%edi),%eax
272238405Sjkim	adcl	$0,%edx
273238405Sjkim	movl	%eax,24(%edi)
274238405Sjkim	movl	%edx,%esi
275238405Sjkim.L008maw_end:
276238405Sjkim	movl	%esi,%eax
27795967Speter	popl	%ecx
27895967Speter	popl	%edi
27995967Speter	popl	%esi
28095967Speter	popl	%ebx
28195967Speter	popl	%ebp
28295967Speter	ret
283238405Sjkim.size	bn_mul_add_words,.-.L_bn_mul_add_words_begin
284238405Sjkim.globl	bn_mul_words
285238405Sjkim.type	bn_mul_words,@function
286238405Sjkim.align	16
28795967Speterbn_mul_words:
288238405Sjkim.L_bn_mul_words_begin:
289238405Sjkim	leal	OPENSSL_ia32cap_P,%eax
290238405Sjkim	btl	$26,(%eax)
291238405Sjkim	jnc	.L009mw_non_sse2
292238405Sjkim	movl	4(%esp),%eax
293238405Sjkim	movl	8(%esp),%edx
294238405Sjkim	movl	12(%esp),%ecx
295238405Sjkim	movd	16(%esp),%mm0
296238405Sjkim	pxor	%mm1,%mm1
297238405Sjkim.align	16
298238405Sjkim.L010mw_sse2_loop:
299238405Sjkim	movd	(%edx),%mm2
300238405Sjkim	pmuludq	%mm0,%mm2
301238405Sjkim	leal	4(%edx),%edx
302238405Sjkim	paddq	%mm2,%mm1
303238405Sjkim	movd	%mm1,(%eax)
304238405Sjkim	subl	$1,%ecx
305238405Sjkim	psrlq	$32,%mm1
306238405Sjkim	leal	4(%eax),%eax
307238405Sjkim	jnz	.L010mw_sse2_loop
308238405Sjkim	movd	%mm1,%eax
309238405Sjkim	emms
310238405Sjkim	ret
311238405Sjkim.align	16
312238405Sjkim.L009mw_non_sse2:
31395967Speter	pushl	%ebp
31495967Speter	pushl	%ebx
31595967Speter	pushl	%esi
31695967Speter	pushl	%edi
31795967Speter
318238405Sjkim	xorl	%esi,%esi
319238405Sjkim	movl	20(%esp),%edi
320238405Sjkim	movl	24(%esp),%ebx
321238405Sjkim	movl	28(%esp),%ebp
322238405Sjkim	movl	32(%esp),%ecx
323238405Sjkim	andl	$4294967288,%ebp
324238405Sjkim	jz	.L011mw_finish
325238405Sjkim.L012mw_loop:
32695967Speter
327238405Sjkim	movl	(%ebx),%eax
32895967Speter	mull	%ecx
329238405Sjkim	addl	%esi,%eax
330238405Sjkim	adcl	$0,%edx
331238405Sjkim	movl	%eax,(%edi)
332238405Sjkim	movl	%edx,%esi
333127326Smarkm
334238405Sjkim	movl	4(%ebx),%eax
33595967Speter	mull	%ecx
336238405Sjkim	addl	%esi,%eax
337238405Sjkim	adcl	$0,%edx
338238405Sjkim	movl	%eax,4(%edi)
339238405Sjkim	movl	%edx,%esi
340127326Smarkm
341238405Sjkim	movl	8(%ebx),%eax
34295967Speter	mull	%ecx
343238405Sjkim	addl	%esi,%eax
344238405Sjkim	adcl	$0,%edx
345238405Sjkim	movl	%eax,8(%edi)
346238405Sjkim	movl	%edx,%esi
347127326Smarkm
348238405Sjkim	movl	12(%ebx),%eax
34995967Speter	mull	%ecx
350238405Sjkim	addl	%esi,%eax
351238405Sjkim	adcl	$0,%edx
352238405Sjkim	movl	%eax,12(%edi)
353238405Sjkim	movl	%edx,%esi
354127326Smarkm
355238405Sjkim	movl	16(%ebx),%eax
35695967Speter	mull	%ecx
357238405Sjkim	addl	%esi,%eax
358238405Sjkim	adcl	$0,%edx
359238405Sjkim	movl	%eax,16(%edi)
360238405Sjkim	movl	%edx,%esi
361127326Smarkm
362238405Sjkim	movl	20(%ebx),%eax
36395967Speter	mull	%ecx
364238405Sjkim	addl	%esi,%eax
365238405Sjkim	adcl	$0,%edx
366238405Sjkim	movl	%eax,20(%edi)
367238405Sjkim	movl	%edx,%esi
368127326Smarkm
369238405Sjkim	movl	24(%ebx),%eax
37095967Speter	mull	%ecx
371238405Sjkim	addl	%esi,%eax
372238405Sjkim	adcl	$0,%edx
373238405Sjkim	movl	%eax,24(%edi)
374238405Sjkim	movl	%edx,%esi
375127326Smarkm
376238405Sjkim	movl	28(%ebx),%eax
37795967Speter	mull	%ecx
378238405Sjkim	addl	%esi,%eax
379238405Sjkim	adcl	$0,%edx
380238405Sjkim	movl	%eax,28(%edi)
381238405Sjkim	movl	%edx,%esi
38295967Speter
383238405Sjkim	addl	$32,%ebx
384238405Sjkim	addl	$32,%edi
385238405Sjkim	subl	$8,%ebp
386238405Sjkim	jz	.L011mw_finish
387238405Sjkim	jmp	.L012mw_loop
388238405Sjkim.L011mw_finish:
389238405Sjkim	movl	28(%esp),%ebp
390238405Sjkim	andl	$7,%ebp
391238405Sjkim	jnz	.L013mw_finish2
392238405Sjkim	jmp	.L014mw_end
393238405Sjkim.L013mw_finish2:
394127326Smarkm
395238405Sjkim	movl	(%ebx),%eax
39695967Speter	mull	%ecx
397238405Sjkim	addl	%esi,%eax
398238405Sjkim	adcl	$0,%edx
399238405Sjkim	movl	%eax,(%edi)
400238405Sjkim	movl	%edx,%esi
40195967Speter	decl	%ebp
402238405Sjkim	jz	.L014mw_end
403127326Smarkm
404238405Sjkim	movl	4(%ebx),%eax
40595967Speter	mull	%ecx
406238405Sjkim	addl	%esi,%eax
407238405Sjkim	adcl	$0,%edx
408238405Sjkim	movl	%eax,4(%edi)
409238405Sjkim	movl	%edx,%esi
41095967Speter	decl	%ebp
411238405Sjkim	jz	.L014mw_end
412127326Smarkm
413238405Sjkim	movl	8(%ebx),%eax
41495967Speter	mull	%ecx
415238405Sjkim	addl	%esi,%eax
416238405Sjkim	adcl	$0,%edx
417238405Sjkim	movl	%eax,8(%edi)
418238405Sjkim	movl	%edx,%esi
41995967Speter	decl	%ebp
420238405Sjkim	jz	.L014mw_end
421127326Smarkm
422238405Sjkim	movl	12(%ebx),%eax
42395967Speter	mull	%ecx
424238405Sjkim	addl	%esi,%eax
425238405Sjkim	adcl	$0,%edx
426238405Sjkim	movl	%eax,12(%edi)
427238405Sjkim	movl	%edx,%esi
42895967Speter	decl	%ebp
429238405Sjkim	jz	.L014mw_end
430127326Smarkm
431238405Sjkim	movl	16(%ebx),%eax
43295967Speter	mull	%ecx
433238405Sjkim	addl	%esi,%eax
434238405Sjkim	adcl	$0,%edx
435238405Sjkim	movl	%eax,16(%edi)
436238405Sjkim	movl	%edx,%esi
43795967Speter	decl	%ebp
438238405Sjkim	jz	.L014mw_end
439127326Smarkm
440238405Sjkim	movl	20(%ebx),%eax
44195967Speter	mull	%ecx
442238405Sjkim	addl	%esi,%eax
443238405Sjkim	adcl	$0,%edx
444238405Sjkim	movl	%eax,20(%edi)
445238405Sjkim	movl	%edx,%esi
44695967Speter	decl	%ebp
447238405Sjkim	jz	.L014mw_end
448127326Smarkm
449238405Sjkim	movl	24(%ebx),%eax
45095967Speter	mull	%ecx
451238405Sjkim	addl	%esi,%eax
452238405Sjkim	adcl	$0,%edx
453238405Sjkim	movl	%eax,24(%edi)
454238405Sjkim	movl	%edx,%esi
455238405Sjkim.L014mw_end:
456238405Sjkim	movl	%esi,%eax
45795967Speter	popl	%edi
45895967Speter	popl	%esi
45995967Speter	popl	%ebx
46095967Speter	popl	%ebp
46195967Speter	ret
462238405Sjkim.size	bn_mul_words,.-.L_bn_mul_words_begin
463238405Sjkim.globl	bn_sqr_words
464238405Sjkim.type	bn_sqr_words,@function
465238405Sjkim.align	16
46695967Speterbn_sqr_words:
467238405Sjkim.L_bn_sqr_words_begin:
468238405Sjkim	leal	OPENSSL_ia32cap_P,%eax
469238405Sjkim	btl	$26,(%eax)
470238405Sjkim	jnc	.L015sqr_non_sse2
471238405Sjkim	movl	4(%esp),%eax
472238405Sjkim	movl	8(%esp),%edx
473238405Sjkim	movl	12(%esp),%ecx
474238405Sjkim.align	16
475238405Sjkim.L016sqr_sse2_loop:
476238405Sjkim	movd	(%edx),%mm0
477238405Sjkim	pmuludq	%mm0,%mm0
478238405Sjkim	leal	4(%edx),%edx
479238405Sjkim	movq	%mm0,(%eax)
480238405Sjkim	subl	$1,%ecx
481238405Sjkim	leal	8(%eax),%eax
482238405Sjkim	jnz	.L016sqr_sse2_loop
483238405Sjkim	emms
484238405Sjkim	ret
485238405Sjkim.align	16
486238405Sjkim.L015sqr_non_sse2:
48795967Speter	pushl	%ebp
48895967Speter	pushl	%ebx
48995967Speter	pushl	%esi
49095967Speter	pushl	%edi
49195967Speter
492238405Sjkim	movl	20(%esp),%esi
493238405Sjkim	movl	24(%esp),%edi
494238405Sjkim	movl	28(%esp),%ebx
495238405Sjkim	andl	$4294967288,%ebx
496238405Sjkim	jz	.L017sw_finish
497238405Sjkim.L018sw_loop:
49895967Speter
499238405Sjkim	movl	(%edi),%eax
50095967Speter	mull	%eax
501238405Sjkim	movl	%eax,(%esi)
502238405Sjkim	movl	%edx,4(%esi)
503127326Smarkm
504238405Sjkim	movl	4(%edi),%eax
50595967Speter	mull	%eax
506238405Sjkim	movl	%eax,8(%esi)
507238405Sjkim	movl	%edx,12(%esi)
508127326Smarkm
509238405Sjkim	movl	8(%edi),%eax
51095967Speter	mull	%eax
511238405Sjkim	movl	%eax,16(%esi)
512238405Sjkim	movl	%edx,20(%esi)
513127326Smarkm
514238405Sjkim	movl	12(%edi),%eax
51595967Speter	mull	%eax
516238405Sjkim	movl	%eax,24(%esi)
517238405Sjkim	movl	%edx,28(%esi)
518127326Smarkm
519238405Sjkim	movl	16(%edi),%eax
52095967Speter	mull	%eax
521238405Sjkim	movl	%eax,32(%esi)
522238405Sjkim	movl	%edx,36(%esi)
523127326Smarkm
524238405Sjkim	movl	20(%edi),%eax
52595967Speter	mull	%eax
526238405Sjkim	movl	%eax,40(%esi)
527238405Sjkim	movl	%edx,44(%esi)
528127326Smarkm
529238405Sjkim	movl	24(%edi),%eax
53095967Speter	mull	%eax
531238405Sjkim	movl	%eax,48(%esi)
532238405Sjkim	movl	%edx,52(%esi)
533127326Smarkm
534238405Sjkim	movl	28(%edi),%eax
53595967Speter	mull	%eax
536238405Sjkim	movl	%eax,56(%esi)
537238405Sjkim	movl	%edx,60(%esi)
53895967Speter
539238405Sjkim	addl	$32,%edi
540238405Sjkim	addl	$64,%esi
541238405Sjkim	subl	$8,%ebx
542238405Sjkim	jnz	.L018sw_loop
543238405Sjkim.L017sw_finish:
544238405Sjkim	movl	28(%esp),%ebx
545238405Sjkim	andl	$7,%ebx
546238405Sjkim	jz	.L019sw_end
547127326Smarkm
548238405Sjkim	movl	(%edi),%eax
54995967Speter	mull	%eax
550238405Sjkim	movl	%eax,(%esi)
55195967Speter	decl	%ebx
552238405Sjkim	movl	%edx,4(%esi)
553238405Sjkim	jz	.L019sw_end
554127326Smarkm
555238405Sjkim	movl	4(%edi),%eax
55695967Speter	mull	%eax
557238405Sjkim	movl	%eax,8(%esi)
55895967Speter	decl	%ebx
559238405Sjkim	movl	%edx,12(%esi)
560238405Sjkim	jz	.L019sw_end
561127326Smarkm
562238405Sjkim	movl	8(%edi),%eax
56395967Speter	mull	%eax
564238405Sjkim	movl	%eax,16(%esi)
56595967Speter	decl	%ebx
566238405Sjkim	movl	%edx,20(%esi)
567238405Sjkim	jz	.L019sw_end
568127326Smarkm
569238405Sjkim	movl	12(%edi),%eax
57095967Speter	mull	%eax
571238405Sjkim	movl	%eax,24(%esi)
57295967Speter	decl	%ebx
573238405Sjkim	movl	%edx,28(%esi)
574238405Sjkim	jz	.L019sw_end
575127326Smarkm
576238405Sjkim	movl	16(%edi),%eax
57795967Speter	mull	%eax
578238405Sjkim	movl	%eax,32(%esi)
57995967Speter	decl	%ebx
580238405Sjkim	movl	%edx,36(%esi)
581238405Sjkim	jz	.L019sw_end
582127326Smarkm
583238405Sjkim	movl	20(%edi),%eax
58495967Speter	mull	%eax
585238405Sjkim	movl	%eax,40(%esi)
58695967Speter	decl	%ebx
587238405Sjkim	movl	%edx,44(%esi)
588238405Sjkim	jz	.L019sw_end
589127326Smarkm
590238405Sjkim	movl	24(%edi),%eax
59195967Speter	mull	%eax
592238405Sjkim	movl	%eax,48(%esi)
593238405Sjkim	movl	%edx,52(%esi)
594238405Sjkim.L019sw_end:
59595967Speter	popl	%edi
59695967Speter	popl	%esi
59795967Speter	popl	%ebx
59895967Speter	popl	%ebp
59995967Speter	ret
600238405Sjkim.size	bn_sqr_words,.-.L_bn_sqr_words_begin
601238405Sjkim.globl	bn_div_words
602238405Sjkim.type	bn_div_words,@function
603238405Sjkim.align	16
60495967Speterbn_div_words:
605238405Sjkim.L_bn_div_words_begin:
606238405Sjkim	movl	4(%esp),%edx
607238405Sjkim	movl	8(%esp),%eax
608238405Sjkim	movl	12(%esp),%ecx
609238405Sjkim	divl	%ecx
610238405Sjkim	ret
611238405Sjkim.size	bn_div_words,.-.L_bn_div_words_begin
612238405Sjkim.globl	bn_add_words
613238405Sjkim.type	bn_add_words,@function
614238405Sjkim.align	16
615238405Sjkimbn_add_words:
616238405Sjkim.L_bn_add_words_begin:
61795967Speter	pushl	%ebp
61895967Speter	pushl	%ebx
61995967Speter	pushl	%esi
62095967Speter	pushl	%edi
62195967Speter
622238405Sjkim	movl	20(%esp),%ebx
623238405Sjkim	movl	24(%esp),%esi
624238405Sjkim	movl	28(%esp),%edi
625238405Sjkim	movl	32(%esp),%ebp
626238405Sjkim	xorl	%eax,%eax
627238405Sjkim	andl	$4294967288,%ebp
628238405Sjkim	jz	.L020aw_finish
629238405Sjkim.L021aw_loop:
630238405Sjkim
631238405Sjkim	movl	(%esi),%ecx
632238405Sjkim	movl	(%edi),%edx
633238405Sjkim	addl	%eax,%ecx
634238405Sjkim	movl	$0,%eax
635238405Sjkim	adcl	%eax,%eax
636238405Sjkim	addl	%edx,%ecx
637238405Sjkim	adcl	$0,%eax
638238405Sjkim	movl	%ecx,(%ebx)
639238405Sjkim
640238405Sjkim	movl	4(%esi),%ecx
641238405Sjkim	movl	4(%edi),%edx
642238405Sjkim	addl	%eax,%ecx
643238405Sjkim	movl	$0,%eax
644238405Sjkim	adcl	%eax,%eax
645238405Sjkim	addl	%edx,%ecx
646238405Sjkim	adcl	$0,%eax
647238405Sjkim	movl	%ecx,4(%ebx)
648238405Sjkim
649238405Sjkim	movl	8(%esi),%ecx
650238405Sjkim	movl	8(%edi),%edx
651238405Sjkim	addl	%eax,%ecx
652238405Sjkim	movl	$0,%eax
653238405Sjkim	adcl	%eax,%eax
654238405Sjkim	addl	%edx,%ecx
655238405Sjkim	adcl	$0,%eax
656238405Sjkim	movl	%ecx,8(%ebx)
657238405Sjkim
658238405Sjkim	movl	12(%esi),%ecx
659238405Sjkim	movl	12(%edi),%edx
660238405Sjkim	addl	%eax,%ecx
661238405Sjkim	movl	$0,%eax
662238405Sjkim	adcl	%eax,%eax
663238405Sjkim	addl	%edx,%ecx
664238405Sjkim	adcl	$0,%eax
665238405Sjkim	movl	%ecx,12(%ebx)
666238405Sjkim
667238405Sjkim	movl	16(%esi),%ecx
668238405Sjkim	movl	16(%edi),%edx
669238405Sjkim	addl	%eax,%ecx
670238405Sjkim	movl	$0,%eax
671238405Sjkim	adcl	%eax,%eax
672238405Sjkim	addl	%edx,%ecx
673238405Sjkim	adcl	$0,%eax
674238405Sjkim	movl	%ecx,16(%ebx)
675238405Sjkim
676238405Sjkim	movl	20(%esi),%ecx
677238405Sjkim	movl	20(%edi),%edx
678238405Sjkim	addl	%eax,%ecx
679238405Sjkim	movl	$0,%eax
680238405Sjkim	adcl	%eax,%eax
681238405Sjkim	addl	%edx,%ecx
682238405Sjkim	adcl	$0,%eax
683238405Sjkim	movl	%ecx,20(%ebx)
684238405Sjkim
685238405Sjkim	movl	24(%esi),%ecx
686238405Sjkim	movl	24(%edi),%edx
687238405Sjkim	addl	%eax,%ecx
688238405Sjkim	movl	$0,%eax
689238405Sjkim	adcl	%eax,%eax
690238405Sjkim	addl	%edx,%ecx
691238405Sjkim	adcl	$0,%eax
692238405Sjkim	movl	%ecx,24(%ebx)
693238405Sjkim
694238405Sjkim	movl	28(%esi),%ecx
695238405Sjkim	movl	28(%edi),%edx
696238405Sjkim	addl	%eax,%ecx
697238405Sjkim	movl	$0,%eax
698238405Sjkim	adcl	%eax,%eax
699238405Sjkim	addl	%edx,%ecx
700238405Sjkim	adcl	$0,%eax
701238405Sjkim	movl	%ecx,28(%ebx)
702238405Sjkim
703238405Sjkim	addl	$32,%esi
704238405Sjkim	addl	$32,%edi
705238405Sjkim	addl	$32,%ebx
706238405Sjkim	subl	$8,%ebp
707238405Sjkim	jnz	.L021aw_loop
708238405Sjkim.L020aw_finish:
709238405Sjkim	movl	32(%esp),%ebp
710238405Sjkim	andl	$7,%ebp
711238405Sjkim	jz	.L022aw_end
712238405Sjkim
713238405Sjkim	movl	(%esi),%ecx
714238405Sjkim	movl	(%edi),%edx
715238405Sjkim	addl	%eax,%ecx
716238405Sjkim	movl	$0,%eax
717238405Sjkim	adcl	%eax,%eax
718238405Sjkim	addl	%edx,%ecx
719238405Sjkim	adcl	$0,%eax
720238405Sjkim	decl	%ebp
721238405Sjkim	movl	%ecx,(%ebx)
722238405Sjkim	jz	.L022aw_end
723238405Sjkim
724238405Sjkim	movl	4(%esi),%ecx
725238405Sjkim	movl	4(%edi),%edx
726238405Sjkim	addl	%eax,%ecx
727238405Sjkim	movl	$0,%eax
728238405Sjkim	adcl	%eax,%eax
729238405Sjkim	addl	%edx,%ecx
730238405Sjkim	adcl	$0,%eax
731238405Sjkim	decl	%ebp
732238405Sjkim	movl	%ecx,4(%ebx)
733238405Sjkim	jz	.L022aw_end
734238405Sjkim
735238405Sjkim	movl	8(%esi),%ecx
736238405Sjkim	movl	8(%edi),%edx
737238405Sjkim	addl	%eax,%ecx
738238405Sjkim	movl	$0,%eax
739238405Sjkim	adcl	%eax,%eax
740238405Sjkim	addl	%edx,%ecx
741238405Sjkim	adcl	$0,%eax
742238405Sjkim	decl	%ebp
743238405Sjkim	movl	%ecx,8(%ebx)
744238405Sjkim	jz	.L022aw_end
745238405Sjkim
746238405Sjkim	movl	12(%esi),%ecx
747238405Sjkim	movl	12(%edi),%edx
748238405Sjkim	addl	%eax,%ecx
749238405Sjkim	movl	$0,%eax
750238405Sjkim	adcl	%eax,%eax
751238405Sjkim	addl	%edx,%ecx
752238405Sjkim	adcl	$0,%eax
753238405Sjkim	decl	%ebp
754238405Sjkim	movl	%ecx,12(%ebx)
755238405Sjkim	jz	.L022aw_end
756238405Sjkim
757238405Sjkim	movl	16(%esi),%ecx
758238405Sjkim	movl	16(%edi),%edx
759238405Sjkim	addl	%eax,%ecx
760238405Sjkim	movl	$0,%eax
761238405Sjkim	adcl	%eax,%eax
762238405Sjkim	addl	%edx,%ecx
763238405Sjkim	adcl	$0,%eax
764238405Sjkim	decl	%ebp
765238405Sjkim	movl	%ecx,16(%ebx)
766238405Sjkim	jz	.L022aw_end
767238405Sjkim
768238405Sjkim	movl	20(%esi),%ecx
769238405Sjkim	movl	20(%edi),%edx
770238405Sjkim	addl	%eax,%ecx
771238405Sjkim	movl	$0,%eax
772238405Sjkim	adcl	%eax,%eax
773238405Sjkim	addl	%edx,%ecx
774238405Sjkim	adcl	$0,%eax
775238405Sjkim	decl	%ebp
776238405Sjkim	movl	%ecx,20(%ebx)
777238405Sjkim	jz	.L022aw_end
778238405Sjkim
779238405Sjkim	movl	24(%esi),%ecx
780238405Sjkim	movl	24(%edi),%edx
781238405Sjkim	addl	%eax,%ecx
782238405Sjkim	movl	$0,%eax
783238405Sjkim	adcl	%eax,%eax
784238405Sjkim	addl	%edx,%ecx
785238405Sjkim	adcl	$0,%eax
786238405Sjkim	movl	%ecx,24(%ebx)
787238405Sjkim.L022aw_end:
78895967Speter	popl	%edi
78995967Speter	popl	%esi
79095967Speter	popl	%ebx
79195967Speter	popl	%ebp
79295967Speter	ret
793238405Sjkim.size	bn_add_words,.-.L_bn_add_words_begin
794238405Sjkim.globl	bn_sub_words
795238405Sjkim.type	bn_sub_words,@function
796238405Sjkim.align	16
797238405Sjkimbn_sub_words:
798238405Sjkim.L_bn_sub_words_begin:
79995967Speter	pushl	%ebp
80095967Speter	pushl	%ebx
80195967Speter	pushl	%esi
80295967Speter	pushl	%edi
80395967Speter
804238405Sjkim	movl	20(%esp),%ebx
805238405Sjkim	movl	24(%esp),%esi
806238405Sjkim	movl	28(%esp),%edi
807238405Sjkim	movl	32(%esp),%ebp
808238405Sjkim	xorl	%eax,%eax
809238405Sjkim	andl	$4294967288,%ebp
810238405Sjkim	jz	.L023aw_finish
811238405Sjkim.L024aw_loop:
81295967Speter
813238405Sjkim	movl	(%esi),%ecx
814238405Sjkim	movl	(%edi),%edx
815238405Sjkim	subl	%eax,%ecx
816238405Sjkim	movl	$0,%eax
817238405Sjkim	adcl	%eax,%eax
818238405Sjkim	subl	%edx,%ecx
819238405Sjkim	adcl	$0,%eax
820238405Sjkim	movl	%ecx,(%ebx)
821127326Smarkm
822238405Sjkim	movl	4(%esi),%ecx
823238405Sjkim	movl	4(%edi),%edx
824238405Sjkim	subl	%eax,%ecx
825238405Sjkim	movl	$0,%eax
826238405Sjkim	adcl	%eax,%eax
827238405Sjkim	subl	%edx,%ecx
828238405Sjkim	adcl	$0,%eax
829238405Sjkim	movl	%ecx,4(%ebx)
830127326Smarkm
831238405Sjkim	movl	8(%esi),%ecx
832238405Sjkim	movl	8(%edi),%edx
833238405Sjkim	subl	%eax,%ecx
834238405Sjkim	movl	$0,%eax
835238405Sjkim	adcl	%eax,%eax
836238405Sjkim	subl	%edx,%ecx
837238405Sjkim	adcl	$0,%eax
838238405Sjkim	movl	%ecx,8(%ebx)
839127326Smarkm
840238405Sjkim	movl	12(%esi),%ecx
841238405Sjkim	movl	12(%edi),%edx
842238405Sjkim	subl	%eax,%ecx
843238405Sjkim	movl	$0,%eax
844238405Sjkim	adcl	%eax,%eax
845238405Sjkim	subl	%edx,%ecx
846238405Sjkim	adcl	$0,%eax
847238405Sjkim	movl	%ecx,12(%ebx)
848127326Smarkm
849238405Sjkim	movl	16(%esi),%ecx
850238405Sjkim	movl	16(%edi),%edx
851238405Sjkim	subl	%eax,%ecx
852238405Sjkim	movl	$0,%eax
853238405Sjkim	adcl	%eax,%eax
854238405Sjkim	subl	%edx,%ecx
855238405Sjkim	adcl	$0,%eax
856238405Sjkim	movl	%ecx,16(%ebx)
857127326Smarkm
858238405Sjkim	movl	20(%esi),%ecx
859238405Sjkim	movl	20(%edi),%edx
860238405Sjkim	subl	%eax,%ecx
861238405Sjkim	movl	$0,%eax
862238405Sjkim	adcl	%eax,%eax
863238405Sjkim	subl	%edx,%ecx
864238405Sjkim	adcl	$0,%eax
865238405Sjkim	movl	%ecx,20(%ebx)
866127326Smarkm
867238405Sjkim	movl	24(%esi),%ecx
868238405Sjkim	movl	24(%edi),%edx
869238405Sjkim	subl	%eax,%ecx
870238405Sjkim	movl	$0,%eax
871238405Sjkim	adcl	%eax,%eax
872238405Sjkim	subl	%edx,%ecx
873238405Sjkim	adcl	$0,%eax
874238405Sjkim	movl	%ecx,24(%ebx)
875127326Smarkm
876238405Sjkim	movl	28(%esi),%ecx
877238405Sjkim	movl	28(%edi),%edx
878238405Sjkim	subl	%eax,%ecx
879238405Sjkim	movl	$0,%eax
880238405Sjkim	adcl	%eax,%eax
881238405Sjkim	subl	%edx,%ecx
882238405Sjkim	adcl	$0,%eax
883238405Sjkim	movl	%ecx,28(%ebx)
884127326Smarkm
885238405Sjkim	addl	$32,%esi
886238405Sjkim	addl	$32,%edi
887238405Sjkim	addl	$32,%ebx
888238405Sjkim	subl	$8,%ebp
889238405Sjkim	jnz	.L024aw_loop
890238405Sjkim.L023aw_finish:
891238405Sjkim	movl	32(%esp),%ebp
892238405Sjkim	andl	$7,%ebp
893238405Sjkim	jz	.L025aw_end
89495967Speter
895238405Sjkim	movl	(%esi),%ecx
896238405Sjkim	movl	(%edi),%edx
897238405Sjkim	subl	%eax,%ecx
898238405Sjkim	movl	$0,%eax
899238405Sjkim	adcl	%eax,%eax
900238405Sjkim	subl	%edx,%ecx
901238405Sjkim	adcl	$0,%eax
90295967Speter	decl	%ebp
903238405Sjkim	movl	%ecx,(%ebx)
904238405Sjkim	jz	.L025aw_end
905127326Smarkm
906238405Sjkim	movl	4(%esi),%ecx
907238405Sjkim	movl	4(%edi),%edx
908238405Sjkim	subl	%eax,%ecx
909238405Sjkim	movl	$0,%eax
910238405Sjkim	adcl	%eax,%eax
911238405Sjkim	subl	%edx,%ecx
912238405Sjkim	adcl	$0,%eax
91395967Speter	decl	%ebp
914238405Sjkim	movl	%ecx,4(%ebx)
915238405Sjkim	jz	.L025aw_end
916127326Smarkm
917238405Sjkim	movl	8(%esi),%ecx
918238405Sjkim	movl	8(%edi),%edx
919238405Sjkim	subl	%eax,%ecx
920238405Sjkim	movl	$0,%eax
921238405Sjkim	adcl	%eax,%eax
922238405Sjkim	subl	%edx,%ecx
923238405Sjkim	adcl	$0,%eax
92495967Speter	decl	%ebp
925238405Sjkim	movl	%ecx,8(%ebx)
926238405Sjkim	jz	.L025aw_end
927127326Smarkm
928238405Sjkim	movl	12(%esi),%ecx
929238405Sjkim	movl	12(%edi),%edx
930238405Sjkim	subl	%eax,%ecx
931238405Sjkim	movl	$0,%eax
932238405Sjkim	adcl	%eax,%eax
933238405Sjkim	subl	%edx,%ecx
934238405Sjkim	adcl	$0,%eax
93595967Speter	decl	%ebp
936238405Sjkim	movl	%ecx,12(%ebx)
937238405Sjkim	jz	.L025aw_end
938127326Smarkm
939238405Sjkim	movl	16(%esi),%ecx
940238405Sjkim	movl	16(%edi),%edx
941238405Sjkim	subl	%eax,%ecx
942238405Sjkim	movl	$0,%eax
943238405Sjkim	adcl	%eax,%eax
944238405Sjkim	subl	%edx,%ecx
945238405Sjkim	adcl	$0,%eax
94695967Speter	decl	%ebp
947238405Sjkim	movl	%ecx,16(%ebx)
948238405Sjkim	jz	.L025aw_end
949127326Smarkm
950238405Sjkim	movl	20(%esi),%ecx
951238405Sjkim	movl	20(%edi),%edx
952238405Sjkim	subl	%eax,%ecx
953238405Sjkim	movl	$0,%eax
954238405Sjkim	adcl	%eax,%eax
955238405Sjkim	subl	%edx,%ecx
956238405Sjkim	adcl	$0,%eax
95795967Speter	decl	%ebp
958238405Sjkim	movl	%ecx,20(%ebx)
959238405Sjkim	jz	.L025aw_end
960127326Smarkm
961238405Sjkim	movl	24(%esi),%ecx
962238405Sjkim	movl	24(%edi),%edx
963238405Sjkim	subl	%eax,%ecx
964238405Sjkim	movl	$0,%eax
965238405Sjkim	adcl	%eax,%eax
966238405Sjkim	subl	%edx,%ecx
967238405Sjkim	adcl	$0,%eax
968238405Sjkim	movl	%ecx,24(%ebx)
969238405Sjkim.L025aw_end:
97095967Speter	popl	%edi
97195967Speter	popl	%esi
97295967Speter	popl	%ebx
97395967Speter	popl	%ebp
97495967Speter	ret
975238405Sjkim.size	bn_sub_words,.-.L_bn_sub_words_begin
976238405Sjkim.globl	bn_sub_part_words
977238405Sjkim.type	bn_sub_part_words,@function
978238405Sjkim.align	16
979238405Sjkimbn_sub_part_words:
980238405Sjkim.L_bn_sub_part_words_begin:
98195967Speter	pushl	%ebp
98295967Speter	pushl	%ebx
98395967Speter	pushl	%esi
98495967Speter	pushl	%edi
98595967Speter
986238405Sjkim	movl	20(%esp),%ebx
987238405Sjkim	movl	24(%esp),%esi
988238405Sjkim	movl	28(%esp),%edi
989238405Sjkim	movl	32(%esp),%ebp
990238405Sjkim	xorl	%eax,%eax
991238405Sjkim	andl	$4294967288,%ebp
992238405Sjkim	jz	.L026aw_finish
993238405Sjkim.L027aw_loop:
99495967Speter
995238405Sjkim	movl	(%esi),%ecx
996238405Sjkim	movl	(%edi),%edx
997238405Sjkim	subl	%eax,%ecx
998238405Sjkim	movl	$0,%eax
999238405Sjkim	adcl	%eax,%eax
1000238405Sjkim	subl	%edx,%ecx
1001238405Sjkim	adcl	$0,%eax
1002238405Sjkim	movl	%ecx,(%ebx)
1003127326Smarkm
1004238405Sjkim	movl	4(%esi),%ecx
1005238405Sjkim	movl	4(%edi),%edx
1006238405Sjkim	subl	%eax,%ecx
1007238405Sjkim	movl	$0,%eax
1008238405Sjkim	adcl	%eax,%eax
1009238405Sjkim	subl	%edx,%ecx
1010238405Sjkim	adcl	$0,%eax
1011238405Sjkim	movl	%ecx,4(%ebx)
1012127326Smarkm
1013238405Sjkim	movl	8(%esi),%ecx
1014238405Sjkim	movl	8(%edi),%edx
1015238405Sjkim	subl	%eax,%ecx
1016238405Sjkim	movl	$0,%eax
1017238405Sjkim	adcl	%eax,%eax
1018238405Sjkim	subl	%edx,%ecx
1019238405Sjkim	adcl	$0,%eax
1020238405Sjkim	movl	%ecx,8(%ebx)
1021127326Smarkm
1022238405Sjkim	movl	12(%esi),%ecx
1023238405Sjkim	movl	12(%edi),%edx
1024238405Sjkim	subl	%eax,%ecx
1025238405Sjkim	movl	$0,%eax
1026238405Sjkim	adcl	%eax,%eax
1027238405Sjkim	subl	%edx,%ecx
1028238405Sjkim	adcl	$0,%eax
1029238405Sjkim	movl	%ecx,12(%ebx)
1030127326Smarkm
1031238405Sjkim	movl	16(%esi),%ecx
1032238405Sjkim	movl	16(%edi),%edx
1033238405Sjkim	subl	%eax,%ecx
1034238405Sjkim	movl	$0,%eax
1035238405Sjkim	adcl	%eax,%eax
1036238405Sjkim	subl	%edx,%ecx
1037238405Sjkim	adcl	$0,%eax
1038238405Sjkim	movl	%ecx,16(%ebx)
1039127326Smarkm
1040238405Sjkim	movl	20(%esi),%ecx
1041238405Sjkim	movl	20(%edi),%edx
1042238405Sjkim	subl	%eax,%ecx
1043238405Sjkim	movl	$0,%eax
1044238405Sjkim	adcl	%eax,%eax
1045238405Sjkim	subl	%edx,%ecx
1046238405Sjkim	adcl	$0,%eax
1047238405Sjkim	movl	%ecx,20(%ebx)
1048127326Smarkm
1049238405Sjkim	movl	24(%esi),%ecx
1050238405Sjkim	movl	24(%edi),%edx
1051238405Sjkim	subl	%eax,%ecx
1052238405Sjkim	movl	$0,%eax
1053238405Sjkim	adcl	%eax,%eax
1054238405Sjkim	subl	%edx,%ecx
1055238405Sjkim	adcl	$0,%eax
1056238405Sjkim	movl	%ecx,24(%ebx)
1057127326Smarkm
1058238405Sjkim	movl	28(%esi),%ecx
1059238405Sjkim	movl	28(%edi),%edx
1060238405Sjkim	subl	%eax,%ecx
1061238405Sjkim	movl	$0,%eax
1062238405Sjkim	adcl	%eax,%eax
1063238405Sjkim	subl	%edx,%ecx
1064238405Sjkim	adcl	$0,%eax
1065238405Sjkim	movl	%ecx,28(%ebx)
1066127326Smarkm
1067238405Sjkim	addl	$32,%esi
1068238405Sjkim	addl	$32,%edi
1069238405Sjkim	addl	$32,%ebx
1070238405Sjkim	subl	$8,%ebp
1071238405Sjkim	jnz	.L027aw_loop
1072238405Sjkim.L026aw_finish:
1073238405Sjkim	movl	32(%esp),%ebp
1074238405Sjkim	andl	$7,%ebp
1075238405Sjkim	jz	.L028aw_end
107695967Speter
1077238405Sjkim	movl	(%esi),%ecx
1078238405Sjkim	movl	(%edi),%edx
1079238405Sjkim	subl	%eax,%ecx
1080238405Sjkim	movl	$0,%eax
1081238405Sjkim	adcl	%eax,%eax
1082238405Sjkim	subl	%edx,%ecx
1083238405Sjkim	adcl	$0,%eax
1084238405Sjkim	movl	%ecx,(%ebx)
1085238405Sjkim	addl	$4,%esi
1086238405Sjkim	addl	$4,%edi
1087238405Sjkim	addl	$4,%ebx
1088238405Sjkim	decl	%ebp
1089238405Sjkim	jz	.L028aw_end
1090127326Smarkm
1091238405Sjkim	movl	(%esi),%ecx
1092238405Sjkim	movl	(%edi),%edx
1093238405Sjkim	subl	%eax,%ecx
1094238405Sjkim	movl	$0,%eax
1095238405Sjkim	adcl	%eax,%eax
1096238405Sjkim	subl	%edx,%ecx
1097238405Sjkim	adcl	$0,%eax
1098238405Sjkim	movl	%ecx,(%ebx)
1099238405Sjkim	addl	$4,%esi
1100238405Sjkim	addl	$4,%edi
1101238405Sjkim	addl	$4,%ebx
110295967Speter	decl	%ebp
1103238405Sjkim	jz	.L028aw_end
1104127326Smarkm
1105238405Sjkim	movl	(%esi),%ecx
1106238405Sjkim	movl	(%edi),%edx
1107238405Sjkim	subl	%eax,%ecx
1108238405Sjkim	movl	$0,%eax
1109238405Sjkim	adcl	%eax,%eax
1110238405Sjkim	subl	%edx,%ecx
1111238405Sjkim	adcl	$0,%eax
1112238405Sjkim	movl	%ecx,(%ebx)
1113238405Sjkim	addl	$4,%esi
1114238405Sjkim	addl	$4,%edi
1115238405Sjkim	addl	$4,%ebx
111695967Speter	decl	%ebp
1117238405Sjkim	jz	.L028aw_end
1118127326Smarkm
1119238405Sjkim	movl	(%esi),%ecx
1120238405Sjkim	movl	(%edi),%edx
1121238405Sjkim	subl	%eax,%ecx
1122238405Sjkim	movl	$0,%eax
1123238405Sjkim	adcl	%eax,%eax
1124238405Sjkim	subl	%edx,%ecx
1125238405Sjkim	adcl	$0,%eax
1126238405Sjkim	movl	%ecx,(%ebx)
1127238405Sjkim	addl	$4,%esi
1128238405Sjkim	addl	$4,%edi
1129238405Sjkim	addl	$4,%ebx
113095967Speter	decl	%ebp
1131238405Sjkim	jz	.L028aw_end
1132127326Smarkm
1133238405Sjkim	movl	(%esi),%ecx
1134238405Sjkim	movl	(%edi),%edx
1135238405Sjkim	subl	%eax,%ecx
1136238405Sjkim	movl	$0,%eax
1137238405Sjkim	adcl	%eax,%eax
1138238405Sjkim	subl	%edx,%ecx
1139238405Sjkim	adcl	$0,%eax
1140238405Sjkim	movl	%ecx,(%ebx)
1141238405Sjkim	addl	$4,%esi
1142238405Sjkim	addl	$4,%edi
1143238405Sjkim	addl	$4,%ebx
114495967Speter	decl	%ebp
1145238405Sjkim	jz	.L028aw_end
1146127326Smarkm
1147238405Sjkim	movl	(%esi),%ecx
1148238405Sjkim	movl	(%edi),%edx
1149238405Sjkim	subl	%eax,%ecx
1150238405Sjkim	movl	$0,%eax
1151238405Sjkim	adcl	%eax,%eax
1152238405Sjkim	subl	%edx,%ecx
1153238405Sjkim	adcl	$0,%eax
1154238405Sjkim	movl	%ecx,(%ebx)
1155238405Sjkim	addl	$4,%esi
1156238405Sjkim	addl	$4,%edi
1157238405Sjkim	addl	$4,%ebx
115895967Speter	decl	%ebp
1159238405Sjkim	jz	.L028aw_end
1160127326Smarkm
1161238405Sjkim	movl	(%esi),%ecx
1162238405Sjkim	movl	(%edi),%edx
1163238405Sjkim	subl	%eax,%ecx
1164238405Sjkim	movl	$0,%eax
1165238405Sjkim	adcl	%eax,%eax
1166238405Sjkim	subl	%edx,%ecx
1167238405Sjkim	adcl	$0,%eax
1168238405Sjkim	movl	%ecx,(%ebx)
1169238405Sjkim	addl	$4,%esi
1170238405Sjkim	addl	$4,%edi
1171238405Sjkim	addl	$4,%ebx
1172238405Sjkim.L028aw_end:
1173238405Sjkim	cmpl	$0,36(%esp)
1174238405Sjkim	je	.L029pw_end
1175238405Sjkim	movl	36(%esp),%ebp
1176238405Sjkim	cmpl	$0,%ebp
1177238405Sjkim	je	.L029pw_end
1178238405Sjkim	jge	.L030pw_pos
1179238405Sjkim
1180238405Sjkim	movl	$0,%edx
1181238405Sjkim	subl	%ebp,%edx
1182238405Sjkim	movl	%edx,%ebp
1183238405Sjkim	andl	$4294967288,%ebp
1184238405Sjkim	jz	.L031pw_neg_finish
1185238405Sjkim.L032pw_neg_loop:
1186238405Sjkim
1187238405Sjkim	movl	$0,%ecx
1188238405Sjkim	movl	(%edi),%edx
1189238405Sjkim	subl	%eax,%ecx
1190238405Sjkim	movl	$0,%eax
1191238405Sjkim	adcl	%eax,%eax
1192238405Sjkim	subl	%edx,%ecx
1193238405Sjkim	adcl	$0,%eax
1194238405Sjkim	movl	%ecx,(%ebx)
1195238405Sjkim
1196238405Sjkim	movl	$0,%ecx
1197238405Sjkim	movl	4(%edi),%edx
1198238405Sjkim	subl	%eax,%ecx
1199238405Sjkim	movl	$0,%eax
1200238405Sjkim	adcl	%eax,%eax
1201238405Sjkim	subl	%edx,%ecx
1202238405Sjkim	adcl	$0,%eax
1203238405Sjkim	movl	%ecx,4(%ebx)
1204238405Sjkim
1205238405Sjkim	movl	$0,%ecx
1206238405Sjkim	movl	8(%edi),%edx
1207238405Sjkim	subl	%eax,%ecx
1208238405Sjkim	movl	$0,%eax
1209238405Sjkim	adcl	%eax,%eax
1210238405Sjkim	subl	%edx,%ecx
1211238405Sjkim	adcl	$0,%eax
1212238405Sjkim	movl	%ecx,8(%ebx)
1213238405Sjkim
1214238405Sjkim	movl	$0,%ecx
1215238405Sjkim	movl	12(%edi),%edx
1216238405Sjkim	subl	%eax,%ecx
1217238405Sjkim	movl	$0,%eax
1218238405Sjkim	adcl	%eax,%eax
1219238405Sjkim	subl	%edx,%ecx
1220238405Sjkim	adcl	$0,%eax
1221238405Sjkim	movl	%ecx,12(%ebx)
1222238405Sjkim
1223238405Sjkim	movl	$0,%ecx
1224238405Sjkim	movl	16(%edi),%edx
1225238405Sjkim	subl	%eax,%ecx
1226238405Sjkim	movl	$0,%eax
1227238405Sjkim	adcl	%eax,%eax
1228238405Sjkim	subl	%edx,%ecx
1229238405Sjkim	adcl	$0,%eax
1230238405Sjkim	movl	%ecx,16(%ebx)
1231238405Sjkim
1232238405Sjkim	movl	$0,%ecx
1233238405Sjkim	movl	20(%edi),%edx
1234238405Sjkim	subl	%eax,%ecx
1235238405Sjkim	movl	$0,%eax
1236238405Sjkim	adcl	%eax,%eax
1237238405Sjkim	subl	%edx,%ecx
1238238405Sjkim	adcl	$0,%eax
1239238405Sjkim	movl	%ecx,20(%ebx)
1240238405Sjkim
1241238405Sjkim	movl	$0,%ecx
1242238405Sjkim	movl	24(%edi),%edx
1243238405Sjkim	subl	%eax,%ecx
1244238405Sjkim	movl	$0,%eax
1245238405Sjkim	adcl	%eax,%eax
1246238405Sjkim	subl	%edx,%ecx
1247238405Sjkim	adcl	$0,%eax
1248238405Sjkim	movl	%ecx,24(%ebx)
1249238405Sjkim
1250238405Sjkim	movl	$0,%ecx
1251238405Sjkim	movl	28(%edi),%edx
1252238405Sjkim	subl	%eax,%ecx
1253238405Sjkim	movl	$0,%eax
1254238405Sjkim	adcl	%eax,%eax
1255238405Sjkim	subl	%edx,%ecx
1256238405Sjkim	adcl	$0,%eax
1257238405Sjkim	movl	%ecx,28(%ebx)
1258238405Sjkim
1259238405Sjkim	addl	$32,%edi
1260238405Sjkim	addl	$32,%ebx
1261238405Sjkim	subl	$8,%ebp
1262238405Sjkim	jnz	.L032pw_neg_loop
1263238405Sjkim.L031pw_neg_finish:
1264238405Sjkim	movl	36(%esp),%edx
1265238405Sjkim	movl	$0,%ebp
1266238405Sjkim	subl	%edx,%ebp
1267238405Sjkim	andl	$7,%ebp
1268238405Sjkim	jz	.L029pw_end
1269238405Sjkim
1270238405Sjkim	movl	$0,%ecx
1271238405Sjkim	movl	(%edi),%edx
1272238405Sjkim	subl	%eax,%ecx
1273238405Sjkim	movl	$0,%eax
1274238405Sjkim	adcl	%eax,%eax
1275238405Sjkim	subl	%edx,%ecx
1276238405Sjkim	adcl	$0,%eax
127795967Speter	decl	%ebp
1278238405Sjkim	movl	%ecx,(%ebx)
1279238405Sjkim	jz	.L029pw_end
1280127326Smarkm
1281238405Sjkim	movl	$0,%ecx
1282238405Sjkim	movl	4(%edi),%edx
1283238405Sjkim	subl	%eax,%ecx
1284238405Sjkim	movl	$0,%eax
1285238405Sjkim	adcl	%eax,%eax
1286238405Sjkim	subl	%edx,%ecx
1287238405Sjkim	adcl	$0,%eax
1288238405Sjkim	decl	%ebp
1289238405Sjkim	movl	%ecx,4(%ebx)
1290238405Sjkim	jz	.L029pw_end
1291238405Sjkim
1292238405Sjkim	movl	$0,%ecx
1293238405Sjkim	movl	8(%edi),%edx
1294238405Sjkim	subl	%eax,%ecx
1295238405Sjkim	movl	$0,%eax
1296238405Sjkim	adcl	%eax,%eax
1297238405Sjkim	subl	%edx,%ecx
1298238405Sjkim	adcl	$0,%eax
1299238405Sjkim	decl	%ebp
1300238405Sjkim	movl	%ecx,8(%ebx)
1301238405Sjkim	jz	.L029pw_end
1302238405Sjkim
1303238405Sjkim	movl	$0,%ecx
1304238405Sjkim	movl	12(%edi),%edx
1305238405Sjkim	subl	%eax,%ecx
1306238405Sjkim	movl	$0,%eax
1307238405Sjkim	adcl	%eax,%eax
1308238405Sjkim	subl	%edx,%ecx
1309238405Sjkim	adcl	$0,%eax
1310238405Sjkim	decl	%ebp
1311238405Sjkim	movl	%ecx,12(%ebx)
1312238405Sjkim	jz	.L029pw_end
1313238405Sjkim
1314238405Sjkim	movl	$0,%ecx
1315238405Sjkim	movl	16(%edi),%edx
1316238405Sjkim	subl	%eax,%ecx
1317238405Sjkim	movl	$0,%eax
1318238405Sjkim	adcl	%eax,%eax
1319238405Sjkim	subl	%edx,%ecx
1320238405Sjkim	adcl	$0,%eax
1321238405Sjkim	decl	%ebp
1322238405Sjkim	movl	%ecx,16(%ebx)
1323238405Sjkim	jz	.L029pw_end
1324238405Sjkim
1325238405Sjkim	movl	$0,%ecx
1326238405Sjkim	movl	20(%edi),%edx
1327238405Sjkim	subl	%eax,%ecx
1328238405Sjkim	movl	$0,%eax
1329238405Sjkim	adcl	%eax,%eax
1330238405Sjkim	subl	%edx,%ecx
1331238405Sjkim	adcl	$0,%eax
1332238405Sjkim	decl	%ebp
1333238405Sjkim	movl	%ecx,20(%ebx)
1334238405Sjkim	jz	.L029pw_end
1335238405Sjkim
1336238405Sjkim	movl	$0,%ecx
1337238405Sjkim	movl	24(%edi),%edx
1338238405Sjkim	subl	%eax,%ecx
1339238405Sjkim	movl	$0,%eax
1340238405Sjkim	adcl	%eax,%eax
1341238405Sjkim	subl	%edx,%ecx
1342238405Sjkim	adcl	$0,%eax
1343238405Sjkim	movl	%ecx,24(%ebx)
1344238405Sjkim	jmp	.L029pw_end
1345238405Sjkim.L030pw_pos:
1346238405Sjkim	andl	$4294967288,%ebp
1347238405Sjkim	jz	.L033pw_pos_finish
1348238405Sjkim.L034pw_pos_loop:
1349238405Sjkim
1350238405Sjkim	movl	(%esi),%ecx
1351238405Sjkim	subl	%eax,%ecx
1352238405Sjkim	movl	%ecx,(%ebx)
1353238405Sjkim	jnc	.L035pw_nc0
1354238405Sjkim
1355238405Sjkim	movl	4(%esi),%ecx
1356238405Sjkim	subl	%eax,%ecx
1357238405Sjkim	movl	%ecx,4(%ebx)
1358238405Sjkim	jnc	.L036pw_nc1
1359238405Sjkim
1360238405Sjkim	movl	8(%esi),%ecx
1361238405Sjkim	subl	%eax,%ecx
1362238405Sjkim	movl	%ecx,8(%ebx)
1363238405Sjkim	jnc	.L037pw_nc2
1364238405Sjkim
1365238405Sjkim	movl	12(%esi),%ecx
1366238405Sjkim	subl	%eax,%ecx
1367238405Sjkim	movl	%ecx,12(%ebx)
1368238405Sjkim	jnc	.L038pw_nc3
1369238405Sjkim
1370238405Sjkim	movl	16(%esi),%ecx
1371238405Sjkim	subl	%eax,%ecx
1372238405Sjkim	movl	%ecx,16(%ebx)
1373238405Sjkim	jnc	.L039pw_nc4
1374238405Sjkim
1375238405Sjkim	movl	20(%esi),%ecx
1376238405Sjkim	subl	%eax,%ecx
1377238405Sjkim	movl	%ecx,20(%ebx)
1378238405Sjkim	jnc	.L040pw_nc5
1379238405Sjkim
1380238405Sjkim	movl	24(%esi),%ecx
1381238405Sjkim	subl	%eax,%ecx
1382238405Sjkim	movl	%ecx,24(%ebx)
1383238405Sjkim	jnc	.L041pw_nc6
1384238405Sjkim
1385238405Sjkim	movl	28(%esi),%ecx
1386238405Sjkim	subl	%eax,%ecx
1387238405Sjkim	movl	%ecx,28(%ebx)
1388238405Sjkim	jnc	.L042pw_nc7
1389238405Sjkim
1390238405Sjkim	addl	$32,%esi
1391238405Sjkim	addl	$32,%ebx
1392238405Sjkim	subl	$8,%ebp
1393238405Sjkim	jnz	.L034pw_pos_loop
1394238405Sjkim.L033pw_pos_finish:
1395238405Sjkim	movl	36(%esp),%ebp
1396238405Sjkim	andl	$7,%ebp
1397238405Sjkim	jz	.L029pw_end
1398238405Sjkim
1399238405Sjkim	movl	(%esi),%ecx
1400238405Sjkim	subl	%eax,%ecx
1401238405Sjkim	movl	%ecx,(%ebx)
1402238405Sjkim	jnc	.L043pw_tail_nc0
1403238405Sjkim	decl	%ebp
1404238405Sjkim	jz	.L029pw_end
1405238405Sjkim
1406238405Sjkim	movl	4(%esi),%ecx
1407238405Sjkim	subl	%eax,%ecx
1408238405Sjkim	movl	%ecx,4(%ebx)
1409238405Sjkim	jnc	.L044pw_tail_nc1
1410238405Sjkim	decl	%ebp
1411238405Sjkim	jz	.L029pw_end
1412238405Sjkim
1413238405Sjkim	movl	8(%esi),%ecx
1414238405Sjkim	subl	%eax,%ecx
1415238405Sjkim	movl	%ecx,8(%ebx)
1416238405Sjkim	jnc	.L045pw_tail_nc2
1417238405Sjkim	decl	%ebp
1418238405Sjkim	jz	.L029pw_end
1419238405Sjkim
1420238405Sjkim	movl	12(%esi),%ecx
1421238405Sjkim	subl	%eax,%ecx
1422238405Sjkim	movl	%ecx,12(%ebx)
1423238405Sjkim	jnc	.L046pw_tail_nc3
1424238405Sjkim	decl	%ebp
1425238405Sjkim	jz	.L029pw_end
1426238405Sjkim
1427238405Sjkim	movl	16(%esi),%ecx
1428238405Sjkim	subl	%eax,%ecx
1429238405Sjkim	movl	%ecx,16(%ebx)
1430238405Sjkim	jnc	.L047pw_tail_nc4
1431238405Sjkim	decl	%ebp
1432238405Sjkim	jz	.L029pw_end
1433238405Sjkim
1434238405Sjkim	movl	20(%esi),%ecx
1435238405Sjkim	subl	%eax,%ecx
1436238405Sjkim	movl	%ecx,20(%ebx)
1437238405Sjkim	jnc	.L048pw_tail_nc5
1438238405Sjkim	decl	%ebp
1439238405Sjkim	jz	.L029pw_end
1440238405Sjkim
1441238405Sjkim	movl	24(%esi),%ecx
1442238405Sjkim	subl	%eax,%ecx
1443238405Sjkim	movl	%ecx,24(%ebx)
1444238405Sjkim	jnc	.L049pw_tail_nc6
1445238405Sjkim	movl	$1,%eax
1446238405Sjkim	jmp	.L029pw_end
1447238405Sjkim.L050pw_nc_loop:
1448238405Sjkim	movl	(%esi),%ecx
1449238405Sjkim	movl	%ecx,(%ebx)
1450238405Sjkim.L035pw_nc0:
1451238405Sjkim	movl	4(%esi),%ecx
1452238405Sjkim	movl	%ecx,4(%ebx)
1453238405Sjkim.L036pw_nc1:
1454238405Sjkim	movl	8(%esi),%ecx
1455238405Sjkim	movl	%ecx,8(%ebx)
1456238405Sjkim.L037pw_nc2:
1457238405Sjkim	movl	12(%esi),%ecx
1458238405Sjkim	movl	%ecx,12(%ebx)
1459238405Sjkim.L038pw_nc3:
1460238405Sjkim	movl	16(%esi),%ecx
1461238405Sjkim	movl	%ecx,16(%ebx)
1462238405Sjkim.L039pw_nc4:
1463238405Sjkim	movl	20(%esi),%ecx
1464238405Sjkim	movl	%ecx,20(%ebx)
1465238405Sjkim.L040pw_nc5:
1466238405Sjkim	movl	24(%esi),%ecx
1467238405Sjkim	movl	%ecx,24(%ebx)
1468238405Sjkim.L041pw_nc6:
1469238405Sjkim	movl	28(%esi),%ecx
1470238405Sjkim	movl	%ecx,28(%ebx)
1471238405Sjkim.L042pw_nc7:
1472238405Sjkim
1473238405Sjkim	addl	$32,%esi
1474238405Sjkim	addl	$32,%ebx
1475238405Sjkim	subl	$8,%ebp
1476238405Sjkim	jnz	.L050pw_nc_loop
1477238405Sjkim	movl	36(%esp),%ebp
1478238405Sjkim	andl	$7,%ebp
1479238405Sjkim	jz	.L051pw_nc_end
1480238405Sjkim	movl	(%esi),%ecx
1481238405Sjkim	movl	%ecx,(%ebx)
1482238405Sjkim.L043pw_tail_nc0:
1483238405Sjkim	decl	%ebp
1484238405Sjkim	jz	.L051pw_nc_end
1485238405Sjkim	movl	4(%esi),%ecx
1486238405Sjkim	movl	%ecx,4(%ebx)
1487238405Sjkim.L044pw_tail_nc1:
1488238405Sjkim	decl	%ebp
1489238405Sjkim	jz	.L051pw_nc_end
1490238405Sjkim	movl	8(%esi),%ecx
1491238405Sjkim	movl	%ecx,8(%ebx)
1492238405Sjkim.L045pw_tail_nc2:
1493238405Sjkim	decl	%ebp
1494238405Sjkim	jz	.L051pw_nc_end
1495238405Sjkim	movl	12(%esi),%ecx
1496238405Sjkim	movl	%ecx,12(%ebx)
1497238405Sjkim.L046pw_tail_nc3:
1498238405Sjkim	decl	%ebp
1499238405Sjkim	jz	.L051pw_nc_end
1500238405Sjkim	movl	16(%esi),%ecx
1501238405Sjkim	movl	%ecx,16(%ebx)
1502238405Sjkim.L047pw_tail_nc4:
1503238405Sjkim	decl	%ebp
1504238405Sjkim	jz	.L051pw_nc_end
1505238405Sjkim	movl	20(%esi),%ecx
1506238405Sjkim	movl	%ecx,20(%ebx)
1507238405Sjkim.L048pw_tail_nc5:
1508238405Sjkim	decl	%ebp
1509238405Sjkim	jz	.L051pw_nc_end
1510238405Sjkim	movl	24(%esi),%ecx
1511238405Sjkim	movl	%ecx,24(%ebx)
1512238405Sjkim.L049pw_tail_nc6:
1513238405Sjkim.L051pw_nc_end:
1514238405Sjkim	movl	$0,%eax
1515238405Sjkim.L029pw_end:
151695967Speter	popl	%edi
151795967Speter	popl	%esi
151895967Speter	popl	%ebx
151995967Speter	popl	%ebp
152095967Speter	ret
1521238405Sjkim.size	bn_sub_part_words,.-.L_bn_sub_part_words_begin
1522238405Sjkim.comm	OPENSSL_ia32cap_P,8,4
1523