1243789Sdim# $FreeBSD$
2243789Sdim# Do not modify. This file is auto-generated from bn-586.pl.
3243789Sdim#ifdef PIC
4243789Sdim.file	"bn-586.S"
5243789Sdim.text
6243789Sdim.globl	bn_mul_add_words
7243789Sdim.type	bn_mul_add_words,@function
8243789Sdim.align	16
9243789Sdimbn_mul_add_words:
10243789Sdim.L_bn_mul_add_words_begin:
11243789Sdim	call	.L000PIC_me_up
12243789Sdim.L000PIC_me_up:
13243789Sdim	popl	%eax
14243789Sdim	leal	_GLOBAL_OFFSET_TABLE_+[.-.L000PIC_me_up](%eax),%eax
15243789Sdim	movl	OPENSSL_ia32cap_P@GOT(%eax),%eax
16243789Sdim	btl	$26,(%eax)
17243789Sdim	jnc	.L001maw_non_sse2
18243789Sdim	movl	4(%esp),%eax
19243789Sdim	movl	8(%esp),%edx
20243789Sdim	movl	12(%esp),%ecx
21243789Sdim	movd	16(%esp),%mm0
22243789Sdim	pxor	%mm1,%mm1
23243789Sdim	jmp	.L002maw_sse2_entry
24243789Sdim.align	16
25243789Sdim.L003maw_sse2_unrolled:
26243789Sdim	movd	(%eax),%mm3
27263508Sdim	paddq	%mm3,%mm1
28263508Sdim	movd	(%edx),%mm2
29263508Sdim	pmuludq	%mm0,%mm2
30263508Sdim	movd	4(%edx),%mm4
31263508Sdim	pmuludq	%mm0,%mm4
32243789Sdim	movd	8(%edx),%mm6
33243789Sdim	pmuludq	%mm0,%mm6
34243789Sdim	movd	12(%edx),%mm7
35243789Sdim	pmuludq	%mm0,%mm7
36243789Sdim	paddq	%mm2,%mm1
37243789Sdim	movd	4(%eax),%mm3
38243789Sdim	paddq	%mm4,%mm3
39243789Sdim	movd	8(%eax),%mm5
40243789Sdim	paddq	%mm6,%mm5
41243789Sdim	movd	12(%eax),%mm4
42243789Sdim	paddq	%mm4,%mm7
43243789Sdim	movd	%mm1,(%eax)
44243789Sdim	movd	16(%edx),%mm2
45243789Sdim	pmuludq	%mm0,%mm2
46243789Sdim	psrlq	$32,%mm1
47243789Sdim	movd	20(%edx),%mm4
48243789Sdim	pmuludq	%mm0,%mm4
49243789Sdim	paddq	%mm3,%mm1
50243789Sdim	movd	24(%edx),%mm6
51243789Sdim	pmuludq	%mm0,%mm6
52243789Sdim	movd	%mm1,4(%eax)
53243789Sdim	psrlq	$32,%mm1
54243789Sdim	movd	28(%edx),%mm3
55243789Sdim	addl	$32,%edx
56243789Sdim	pmuludq	%mm0,%mm3
57243789Sdim	paddq	%mm5,%mm1
58243789Sdim	movd	16(%eax),%mm5
59243789Sdim	paddq	%mm5,%mm2
60243789Sdim	movd	%mm1,8(%eax)
61243789Sdim	psrlq	$32,%mm1
62249423Sdim	paddq	%mm7,%mm1
63249423Sdim	movd	20(%eax),%mm5
64263508Sdim	paddq	%mm5,%mm4
65243789Sdim	movd	%mm1,12(%eax)
66243789Sdim	psrlq	$32,%mm1
67243789Sdim	paddq	%mm2,%mm1
68243789Sdim	movd	24(%eax),%mm5
69243789Sdim	paddq	%mm5,%mm6
70243789Sdim	movd	%mm1,16(%eax)
71243789Sdim	psrlq	$32,%mm1
72243789Sdim	paddq	%mm4,%mm1
73243789Sdim	movd	28(%eax),%mm5
74243789Sdim	paddq	%mm5,%mm3
75243789Sdim	movd	%mm1,20(%eax)
76243789Sdim	psrlq	$32,%mm1
77243789Sdim	paddq	%mm6,%mm1
78243789Sdim	movd	%mm1,24(%eax)
79243789Sdim	psrlq	$32,%mm1
80243789Sdim	paddq	%mm3,%mm1
81243789Sdim	movd	%mm1,28(%eax)
82243789Sdim	leal	32(%eax),%eax
83243789Sdim	psrlq	$32,%mm1
84243789Sdim	subl	$8,%ecx
85243789Sdim	jz	.L004maw_sse2_exit
86243789Sdim.L002maw_sse2_entry:
87243789Sdim	testl	$4294967288,%ecx
88243789Sdim	jnz	.L003maw_sse2_unrolled
89243789Sdim.align	4
90243789Sdim.L005maw_sse2_loop:
91243789Sdim	movd	(%edx),%mm2
92243789Sdim	movd	(%eax),%mm3
93243789Sdim	pmuludq	%mm0,%mm2
94243789Sdim	leal	4(%edx),%edx
95243789Sdim	paddq	%mm3,%mm1
96243789Sdim	paddq	%mm2,%mm1
97243789Sdim	movd	%mm1,(%eax)
98243789Sdim	subl	$1,%ecx
99243789Sdim	psrlq	$32,%mm1
100243789Sdim	leal	4(%eax),%eax
101243789Sdim	jnz	.L005maw_sse2_loop
102243789Sdim.L004maw_sse2_exit:
103243789Sdim	movd	%mm1,%eax
104243789Sdim	emms
105243789Sdim	ret
106243789Sdim.align	16
107243789Sdim.L001maw_non_sse2:
108263508Sdim	pushl	%ebp
109263508Sdim	pushl	%ebx
110263508Sdim	pushl	%esi
111263508Sdim	pushl	%edi
112243789Sdim
113243789Sdim	xorl	%esi,%esi
114243789Sdim	movl	20(%esp),%edi
115243789Sdim	movl	28(%esp),%ecx
116243789Sdim	movl	24(%esp),%ebx
117243789Sdim	andl	$4294967288,%ecx
118243789Sdim	movl	32(%esp),%ebp
119243789Sdim	pushl	%ecx
120243789Sdim	jz	.L006maw_finish
121243789Sdim.align	16
122243789Sdim.L007maw_loop:
123243789Sdim
124243789Sdim	movl	(%ebx),%eax
125243789Sdim	mull	%ebp
126243789Sdim	addl	%esi,%eax
127243789Sdim	adcl	$0,%edx
128243789Sdim	addl	(%edi),%eax
129243789Sdim	adcl	$0,%edx
130243789Sdim	movl	%eax,(%edi)
131243789Sdim	movl	%edx,%esi
132243789Sdim
133243789Sdim	movl	4(%ebx),%eax
134243789Sdim	mull	%ebp
135243789Sdim	addl	%esi,%eax
136243789Sdim	adcl	$0,%edx
137243789Sdim	addl	4(%edi),%eax
138243789Sdim	adcl	$0,%edx
139243789Sdim	movl	%eax,4(%edi)
140243789Sdim	movl	%edx,%esi
141243789Sdim
142243789Sdim	movl	8(%ebx),%eax
143243789Sdim	mull	%ebp
144243789Sdim	addl	%esi,%eax
145243789Sdim	adcl	$0,%edx
146243789Sdim	addl	8(%edi),%eax
147243789Sdim	adcl	$0,%edx
148243789Sdim	movl	%eax,8(%edi)
149243789Sdim	movl	%edx,%esi
150243789Sdim
151243789Sdim	movl	12(%ebx),%eax
152243789Sdim	mull	%ebp
153249423Sdim	addl	%esi,%eax
154249423Sdim	adcl	$0,%edx
155243789Sdim	addl	12(%edi),%eax
156243789Sdim	adcl	$0,%edx
157243789Sdim	movl	%eax,12(%edi)
158243789Sdim	movl	%edx,%esi
159243789Sdim
160243789Sdim	movl	16(%ebx),%eax
161249423Sdim	mull	%ebp
162243789Sdim	addl	%esi,%eax
163243789Sdim	adcl	$0,%edx
164249423Sdim	addl	16(%edi),%eax
165243789Sdim	adcl	$0,%edx
166249423Sdim	movl	%eax,16(%edi)
167243789Sdim	movl	%edx,%esi
168243789Sdim
169243789Sdim	movl	20(%ebx),%eax
170243789Sdim	mull	%ebp
171243789Sdim	addl	%esi,%eax
172243789Sdim	adcl	$0,%edx
173243789Sdim	addl	20(%edi),%eax
174243789Sdim	adcl	$0,%edx
175243789Sdim	movl	%eax,20(%edi)
176243789Sdim	movl	%edx,%esi
177243789Sdim
178243789Sdim	movl	24(%ebx),%eax
179243789Sdim	mull	%ebp
180243789Sdim	addl	%esi,%eax
181243789Sdim	adcl	$0,%edx
182243789Sdim	addl	24(%edi),%eax
183243789Sdim	adcl	$0,%edx
184243789Sdim	movl	%eax,24(%edi)
185243789Sdim	movl	%edx,%esi
186243789Sdim
187243789Sdim	movl	28(%ebx),%eax
188243789Sdim	mull	%ebp
189243789Sdim	addl	%esi,%eax
190243789Sdim	adcl	$0,%edx
191243789Sdim	addl	28(%edi),%eax
192243789Sdim	adcl	$0,%edx
193243789Sdim	movl	%eax,28(%edi)
194243789Sdim	movl	%edx,%esi
195243789Sdim
196243789Sdim	subl	$8,%ecx
197243789Sdim	leal	32(%ebx),%ebx
198243789Sdim	leal	32(%edi),%edi
199243789Sdim	jnz	.L007maw_loop
200243789Sdim.L006maw_finish:
201243789Sdim	movl	32(%esp),%ecx
202243789Sdim	andl	$7,%ecx
203243789Sdim	jnz	.L008maw_finish2
204243789Sdim	jmp	.L009maw_end
205243789Sdim.L008maw_finish2:
206243789Sdim
207243789Sdim	movl	(%ebx),%eax
208243789Sdim	mull	%ebp
209243789Sdim	addl	%esi,%eax
210243789Sdim	adcl	$0,%edx
211243789Sdim	addl	(%edi),%eax
212243789Sdim	adcl	$0,%edx
213243789Sdim	decl	%ecx
214243789Sdim	movl	%eax,(%edi)
215243789Sdim	movl	%edx,%esi
216243789Sdim	jz	.L009maw_end
217243789Sdim
218243789Sdim	movl	4(%ebx),%eax
219243789Sdim	mull	%ebp
220243789Sdim	addl	%esi,%eax
221243789Sdim	adcl	$0,%edx
222243789Sdim	addl	4(%edi),%eax
223243789Sdim	adcl	$0,%edx
224243789Sdim	decl	%ecx
225243789Sdim	movl	%eax,4(%edi)
226243789Sdim	movl	%edx,%esi
227243789Sdim	jz	.L009maw_end
228243789Sdim
229249423Sdim	movl	8(%ebx),%eax
230249423Sdim	mull	%ebp
231243789Sdim	addl	%esi,%eax
232243789Sdim	adcl	$0,%edx
233243789Sdim	addl	8(%edi),%eax
234243789Sdim	adcl	$0,%edx
235243789Sdim	decl	%ecx
236243789Sdim	movl	%eax,8(%edi)
237243789Sdim	movl	%edx,%esi
238243789Sdim	jz	.L009maw_end
239243789Sdim
240243789Sdim	movl	12(%ebx),%eax
241243789Sdim	mull	%ebp
242243789Sdim	addl	%esi,%eax
243243789Sdim	adcl	$0,%edx
244243789Sdim	addl	12(%edi),%eax
245243789Sdim	adcl	$0,%edx
246243789Sdim	decl	%ecx
247243789Sdim	movl	%eax,12(%edi)
248243789Sdim	movl	%edx,%esi
249243789Sdim	jz	.L009maw_end
250243789Sdim
251243789Sdim	movl	16(%ebx),%eax
252243789Sdim	mull	%ebp
253243789Sdim	addl	%esi,%eax
254243789Sdim	adcl	$0,%edx
255243789Sdim	addl	16(%edi),%eax
256243789Sdim	adcl	$0,%edx
257243789Sdim	decl	%ecx
258243789Sdim	movl	%eax,16(%edi)
259243789Sdim	movl	%edx,%esi
260243789Sdim	jz	.L009maw_end
261243789Sdim
262243789Sdim	movl	20(%ebx),%eax
263243789Sdim	mull	%ebp
264243789Sdim	addl	%esi,%eax
265243789Sdim	adcl	$0,%edx
266243789Sdim	addl	20(%edi),%eax
267243789Sdim	adcl	$0,%edx
268243789Sdim	decl	%ecx
269243789Sdim	movl	%eax,20(%edi)
270243789Sdim	movl	%edx,%esi
271243789Sdim	jz	.L009maw_end
272243789Sdim
273243789Sdim	movl	24(%ebx),%eax
274243789Sdim	mull	%ebp
275243789Sdim	addl	%esi,%eax
276243789Sdim	adcl	$0,%edx
277243789Sdim	addl	24(%edi),%eax
278243789Sdim	adcl	$0,%edx
279243789Sdim	movl	%eax,24(%edi)
280243789Sdim	movl	%edx,%esi
281243789Sdim.L009maw_end:
282243789Sdim	movl	%esi,%eax
283243789Sdim	popl	%ecx
284243789Sdim	popl	%edi
285243789Sdim	popl	%esi
286243789Sdim	popl	%ebx
287243789Sdim	popl	%ebp
288243789Sdim	ret
289243789Sdim.size	bn_mul_add_words,.-.L_bn_mul_add_words_begin
290243789Sdim.globl	bn_mul_words
291243789Sdim.type	bn_mul_words,@function
292243789Sdim.align	16
293243789Sdimbn_mul_words:
294243789Sdim.L_bn_mul_words_begin:
295243789Sdim	call	.L010PIC_me_up
296243789Sdim.L010PIC_me_up:
297243789Sdim	popl	%eax
298243789Sdim	leal	_GLOBAL_OFFSET_TABLE_+[.-.L010PIC_me_up](%eax),%eax
299243789Sdim	movl	OPENSSL_ia32cap_P@GOT(%eax),%eax
300243789Sdim	btl	$26,(%eax)
301243789Sdim	jnc	.L011mw_non_sse2
302243789Sdim	movl	4(%esp),%eax
303243789Sdim	movl	8(%esp),%edx
304243789Sdim	movl	12(%esp),%ecx
305243789Sdim	movd	16(%esp),%mm0
306243789Sdim	pxor	%mm1,%mm1
307243789Sdim.align	16
308243789Sdim.L012mw_sse2_loop:
309243789Sdim	movd	(%edx),%mm2
310243789Sdim	pmuludq	%mm0,%mm2
311243789Sdim	leal	4(%edx),%edx
312243789Sdim	paddq	%mm2,%mm1
313243789Sdim	movd	%mm1,(%eax)
314243789Sdim	subl	$1,%ecx
315243789Sdim	psrlq	$32,%mm1
316243789Sdim	leal	4(%eax),%eax
317243789Sdim	jnz	.L012mw_sse2_loop
318243789Sdim	movd	%mm1,%eax
319243789Sdim	emms
320243789Sdim	ret
321243789Sdim.align	16
322243789Sdim.L011mw_non_sse2:
323243789Sdim	pushl	%ebp
324243789Sdim	pushl	%ebx
325243789Sdim	pushl	%esi
326243789Sdim	pushl	%edi
327243789Sdim
328243789Sdim	xorl	%esi,%esi
329243789Sdim	movl	20(%esp),%edi
330243789Sdim	movl	24(%esp),%ebx
331243789Sdim	movl	28(%esp),%ebp
332243789Sdim	movl	32(%esp),%ecx
333243789Sdim	andl	$4294967288,%ebp
334243789Sdim	jz	.L013mw_finish
335243789Sdim.L014mw_loop:
336243789Sdim
337243789Sdim	movl	(%ebx),%eax
338243789Sdim	mull	%ecx
339243789Sdim	addl	%esi,%eax
340243789Sdim	adcl	$0,%edx
341243789Sdim	movl	%eax,(%edi)
342243789Sdim	movl	%edx,%esi
343243789Sdim
344243789Sdim	movl	4(%ebx),%eax
345243789Sdim	mull	%ecx
346243789Sdim	addl	%esi,%eax
347243789Sdim	adcl	$0,%edx
348243789Sdim	movl	%eax,4(%edi)
349243789Sdim	movl	%edx,%esi
350243789Sdim
351243789Sdim	movl	8(%ebx),%eax
352243789Sdim	mull	%ecx
353243789Sdim	addl	%esi,%eax
354243789Sdim	adcl	$0,%edx
355243789Sdim	movl	%eax,8(%edi)
356243789Sdim	movl	%edx,%esi
357243789Sdim
358243789Sdim	movl	12(%ebx),%eax
359243789Sdim	mull	%ecx
360243789Sdim	addl	%esi,%eax
361243789Sdim	adcl	$0,%edx
362243789Sdim	movl	%eax,12(%edi)
363243789Sdim	movl	%edx,%esi
364243789Sdim
365243789Sdim	movl	16(%ebx),%eax
366243789Sdim	mull	%ecx
367243789Sdim	addl	%esi,%eax
368243789Sdim	adcl	$0,%edx
369243789Sdim	movl	%eax,16(%edi)
370243789Sdim	movl	%edx,%esi
371243789Sdim
372243789Sdim	movl	20(%ebx),%eax
373243789Sdim	mull	%ecx
374243789Sdim	addl	%esi,%eax
375243789Sdim	adcl	$0,%edx
376243789Sdim	movl	%eax,20(%edi)
377243789Sdim	movl	%edx,%esi
378243789Sdim
379243789Sdim	movl	24(%ebx),%eax
380243789Sdim	mull	%ecx
381243789Sdim	addl	%esi,%eax
382243789Sdim	adcl	$0,%edx
383243789Sdim	movl	%eax,24(%edi)
384243789Sdim	movl	%edx,%esi
385243789Sdim
386243789Sdim	movl	28(%ebx),%eax
387243789Sdim	mull	%ecx
388243789Sdim	addl	%esi,%eax
389243789Sdim	adcl	$0,%edx
390243789Sdim	movl	%eax,28(%edi)
391243789Sdim	movl	%edx,%esi
392243789Sdim
393243789Sdim	addl	$32,%ebx
394243789Sdim	addl	$32,%edi
395243789Sdim	subl	$8,%ebp
396243789Sdim	jz	.L013mw_finish
397243789Sdim	jmp	.L014mw_loop
398243789Sdim.L013mw_finish:
399243789Sdim	movl	28(%esp),%ebp
400243789Sdim	andl	$7,%ebp
401243789Sdim	jnz	.L015mw_finish2
402243789Sdim	jmp	.L016mw_end
403243789Sdim.L015mw_finish2:
404243789Sdim
405243789Sdim	movl	(%ebx),%eax
406243789Sdim	mull	%ecx
407243789Sdim	addl	%esi,%eax
408243789Sdim	adcl	$0,%edx
409243789Sdim	movl	%eax,(%edi)
410243789Sdim	movl	%edx,%esi
411243789Sdim	decl	%ebp
412243789Sdim	jz	.L016mw_end
413243789Sdim
414243789Sdim	movl	4(%ebx),%eax
415243789Sdim	mull	%ecx
416243789Sdim	addl	%esi,%eax
417243789Sdim	adcl	$0,%edx
418243789Sdim	movl	%eax,4(%edi)
419243789Sdim	movl	%edx,%esi
420243789Sdim	decl	%ebp
421243789Sdim	jz	.L016mw_end
422243789Sdim
423243789Sdim	movl	8(%ebx),%eax
424243789Sdim	mull	%ecx
425243789Sdim	addl	%esi,%eax
426243789Sdim	adcl	$0,%edx
427243789Sdim	movl	%eax,8(%edi)
428243789Sdim	movl	%edx,%esi
429243789Sdim	decl	%ebp
430243789Sdim	jz	.L016mw_end
431243789Sdim
432243789Sdim	movl	12(%ebx),%eax
433243789Sdim	mull	%ecx
434243789Sdim	addl	%esi,%eax
435243789Sdim	adcl	$0,%edx
436243789Sdim	movl	%eax,12(%edi)
437243789Sdim	movl	%edx,%esi
438243789Sdim	decl	%ebp
439243789Sdim	jz	.L016mw_end
440243789Sdim
441243789Sdim	movl	16(%ebx),%eax
442243789Sdim	mull	%ecx
443243789Sdim	addl	%esi,%eax
444243789Sdim	adcl	$0,%edx
445243789Sdim	movl	%eax,16(%edi)
446243789Sdim	movl	%edx,%esi
447243789Sdim	decl	%ebp
448243789Sdim	jz	.L016mw_end
449243789Sdim
450243789Sdim	movl	20(%ebx),%eax
451243789Sdim	mull	%ecx
452243789Sdim	addl	%esi,%eax
453243789Sdim	adcl	$0,%edx
454243789Sdim	movl	%eax,20(%edi)
455243789Sdim	movl	%edx,%esi
456243789Sdim	decl	%ebp
457243789Sdim	jz	.L016mw_end
458243789Sdim
459243789Sdim	movl	24(%ebx),%eax
460243789Sdim	mull	%ecx
461243789Sdim	addl	%esi,%eax
462243789Sdim	adcl	$0,%edx
463243789Sdim	movl	%eax,24(%edi)
464243789Sdim	movl	%edx,%esi
465243789Sdim.L016mw_end:
466243789Sdim	movl	%esi,%eax
467243789Sdim	popl	%edi
468243789Sdim	popl	%esi
469243789Sdim	popl	%ebx
470243789Sdim	popl	%ebp
471243789Sdim	ret
472243789Sdim.size	bn_mul_words,.-.L_bn_mul_words_begin
473243789Sdim.globl	bn_sqr_words
474243789Sdim.type	bn_sqr_words,@function
475243789Sdim.align	16
476243789Sdimbn_sqr_words:
477243789Sdim.L_bn_sqr_words_begin:
478243789Sdim	call	.L017PIC_me_up
479243789Sdim.L017PIC_me_up:
480243789Sdim	popl	%eax
481243789Sdim	leal	_GLOBAL_OFFSET_TABLE_+[.-.L017PIC_me_up](%eax),%eax
482243789Sdim	movl	OPENSSL_ia32cap_P@GOT(%eax),%eax
483243789Sdim	btl	$26,(%eax)
484243789Sdim	jnc	.L018sqr_non_sse2
485243789Sdim	movl	4(%esp),%eax
486243789Sdim	movl	8(%esp),%edx
487243789Sdim	movl	12(%esp),%ecx
488243789Sdim.align	16
489243789Sdim.L019sqr_sse2_loop:
490243789Sdim	movd	(%edx),%mm0
491243789Sdim	pmuludq	%mm0,%mm0
492243789Sdim	leal	4(%edx),%edx
493243789Sdim	movq	%mm0,(%eax)
494243789Sdim	subl	$1,%ecx
495243789Sdim	leal	8(%eax),%eax
496243789Sdim	jnz	.L019sqr_sse2_loop
497243789Sdim	emms
498243789Sdim	ret
499243789Sdim.align	16
500243789Sdim.L018sqr_non_sse2:
501243789Sdim	pushl	%ebp
502243789Sdim	pushl	%ebx
503243789Sdim	pushl	%esi
504243789Sdim	pushl	%edi
505243789Sdim
506243789Sdim	movl	20(%esp),%esi
507243789Sdim	movl	24(%esp),%edi
508243789Sdim	movl	28(%esp),%ebx
509243789Sdim	andl	$4294967288,%ebx
510243789Sdim	jz	.L020sw_finish
511243789Sdim.L021sw_loop:
512243789Sdim
513243789Sdim	movl	(%edi),%eax
514243789Sdim	mull	%eax
515243789Sdim	movl	%eax,(%esi)
516263508Sdim	movl	%edx,4(%esi)
517243789Sdim
518243789Sdim	movl	4(%edi),%eax
519243789Sdim	mull	%eax
520243789Sdim	movl	%eax,8(%esi)
521243789Sdim	movl	%edx,12(%esi)
522243789Sdim
523243789Sdim	movl	8(%edi),%eax
524243789Sdim	mull	%eax
525243789Sdim	movl	%eax,16(%esi)
526243789Sdim	movl	%edx,20(%esi)
527243789Sdim
528243789Sdim	movl	12(%edi),%eax
529243789Sdim	mull	%eax
530243789Sdim	movl	%eax,24(%esi)
531243789Sdim	movl	%edx,28(%esi)
532243789Sdim
533243789Sdim	movl	16(%edi),%eax
534243789Sdim	mull	%eax
535243789Sdim	movl	%eax,32(%esi)
536243789Sdim	movl	%edx,36(%esi)
537243789Sdim
538243789Sdim	movl	20(%edi),%eax
539243789Sdim	mull	%eax
540243789Sdim	movl	%eax,40(%esi)
541243789Sdim	movl	%edx,44(%esi)
542243789Sdim
543243789Sdim	movl	24(%edi),%eax
544243789Sdim	mull	%eax
545243789Sdim	movl	%eax,48(%esi)
546243789Sdim	movl	%edx,52(%esi)
547243789Sdim
548243789Sdim	movl	28(%edi),%eax
549243789Sdim	mull	%eax
550243789Sdim	movl	%eax,56(%esi)
551243789Sdim	movl	%edx,60(%esi)
552243789Sdim
553243789Sdim	addl	$32,%edi
554243789Sdim	addl	$64,%esi
555243789Sdim	subl	$8,%ebx
556243789Sdim	jnz	.L021sw_loop
557243789Sdim.L020sw_finish:
558243789Sdim	movl	28(%esp),%ebx
559243789Sdim	andl	$7,%ebx
560243789Sdim	jz	.L022sw_end
561243789Sdim
562243789Sdim	movl	(%edi),%eax
563243789Sdim	mull	%eax
564243789Sdim	movl	%eax,(%esi)
565243789Sdim	decl	%ebx
566243789Sdim	movl	%edx,4(%esi)
567243789Sdim	jz	.L022sw_end
568243789Sdim
569243789Sdim	movl	4(%edi),%eax
570243789Sdim	mull	%eax
571243789Sdim	movl	%eax,8(%esi)
572243789Sdim	decl	%ebx
573243789Sdim	movl	%edx,12(%esi)
574243789Sdim	jz	.L022sw_end
575243789Sdim
576243789Sdim	movl	8(%edi),%eax
577243789Sdim	mull	%eax
578243789Sdim	movl	%eax,16(%esi)
579243789Sdim	decl	%ebx
580243789Sdim	movl	%edx,20(%esi)
581243789Sdim	jz	.L022sw_end
582243789Sdim
583243789Sdim	movl	12(%edi),%eax
584243789Sdim	mull	%eax
585243789Sdim	movl	%eax,24(%esi)
586243789Sdim	decl	%ebx
587243789Sdim	movl	%edx,28(%esi)
588243789Sdim	jz	.L022sw_end
589243789Sdim
590243789Sdim	movl	16(%edi),%eax
591249423Sdim	mull	%eax
592249423Sdim	movl	%eax,32(%esi)
593249423Sdim	decl	%ebx
594249423Sdim	movl	%edx,36(%esi)
595249423Sdim	jz	.L022sw_end
596249423Sdim
597249423Sdim	movl	20(%edi),%eax
598249423Sdim	mull	%eax
599249423Sdim	movl	%eax,40(%esi)
600249423Sdim	decl	%ebx
601249423Sdim	movl	%edx,44(%esi)
602249423Sdim	jz	.L022sw_end
603249423Sdim
604249423Sdim	movl	24(%edi),%eax
605249423Sdim	mull	%eax
606243789Sdim	movl	%eax,48(%esi)
607249423Sdim	movl	%edx,52(%esi)
608249423Sdim.L022sw_end:
609249423Sdim	popl	%edi
610249423Sdim	popl	%esi
611249423Sdim	popl	%ebx
612249423Sdim	popl	%ebp
613243789Sdim	ret
614243789Sdim.size	bn_sqr_words,.-.L_bn_sqr_words_begin
615249423Sdim.globl	bn_div_words
616249423Sdim.type	bn_div_words,@function
617249423Sdim.align	16
618249423Sdimbn_div_words:
619243789Sdim.L_bn_div_words_begin:
620249423Sdim	movl	4(%esp),%edx
621249423Sdim	movl	8(%esp),%eax
622249423Sdim	movl	12(%esp),%ecx
623249423Sdim	divl	%ecx
624249423Sdim	ret
625243789Sdim.size	bn_div_words,.-.L_bn_div_words_begin
626243789Sdim.globl	bn_add_words
627243789Sdim.type	bn_add_words,@function
628243789Sdim.align	16
629243789Sdimbn_add_words:
630243789Sdim.L_bn_add_words_begin:
631243789Sdim	pushl	%ebp
632243789Sdim	pushl	%ebx
633243789Sdim	pushl	%esi
634243789Sdim	pushl	%edi
635243789Sdim
636243789Sdim	movl	20(%esp),%ebx
637243789Sdim	movl	24(%esp),%esi
638243789Sdim	movl	28(%esp),%edi
639243789Sdim	movl	32(%esp),%ebp
640243789Sdim	xorl	%eax,%eax
641243789Sdim	andl	$4294967288,%ebp
642243789Sdim	jz	.L023aw_finish
643243789Sdim.L024aw_loop:
644243789Sdim
645243789Sdim	movl	(%esi),%ecx
646243789Sdim	movl	(%edi),%edx
647243789Sdim	addl	%eax,%ecx
648243789Sdim	movl	$0,%eax
649243789Sdim	adcl	%eax,%eax
650243789Sdim	addl	%edx,%ecx
651243789Sdim	adcl	$0,%eax
652243789Sdim	movl	%ecx,(%ebx)
653243789Sdim
654243789Sdim	movl	4(%esi),%ecx
655249423Sdim	movl	4(%edi),%edx
656249423Sdim	addl	%eax,%ecx
657243789Sdim	movl	$0,%eax
658249423Sdim	adcl	%eax,%eax
659243789Sdim	addl	%edx,%ecx
660243789Sdim	adcl	$0,%eax
661243789Sdim	movl	%ecx,4(%ebx)
662243789Sdim
663243789Sdim	movl	8(%esi),%ecx
664243789Sdim	movl	8(%edi),%edx
665243789Sdim	addl	%eax,%ecx
666243789Sdim	movl	$0,%eax
667243789Sdim	adcl	%eax,%eax
668243789Sdim	addl	%edx,%ecx
669243789Sdim	adcl	$0,%eax
670243789Sdim	movl	%ecx,8(%ebx)
671243789Sdim
672243789Sdim	movl	12(%esi),%ecx
673243789Sdim	movl	12(%edi),%edx
674243789Sdim	addl	%eax,%ecx
675243789Sdim	movl	$0,%eax
676243789Sdim	adcl	%eax,%eax
677243789Sdim	addl	%edx,%ecx
678243789Sdim	adcl	$0,%eax
679243789Sdim	movl	%ecx,12(%ebx)
680243789Sdim
681243789Sdim	movl	16(%esi),%ecx
682243789Sdim	movl	16(%edi),%edx
683243789Sdim	addl	%eax,%ecx
684243789Sdim	movl	$0,%eax
685243789Sdim	adcl	%eax,%eax
686243789Sdim	addl	%edx,%ecx
687243789Sdim	adcl	$0,%eax
688243789Sdim	movl	%ecx,16(%ebx)
689243789Sdim
690243789Sdim	movl	20(%esi),%ecx
691243789Sdim	movl	20(%edi),%edx
692243789Sdim	addl	%eax,%ecx
693243789Sdim	movl	$0,%eax
694243789Sdim	adcl	%eax,%eax
695243789Sdim	addl	%edx,%ecx
696243789Sdim	adcl	$0,%eax
697243789Sdim	movl	%ecx,20(%ebx)
698243789Sdim
699243789Sdim	movl	24(%esi),%ecx
700243789Sdim	movl	24(%edi),%edx
701243789Sdim	addl	%eax,%ecx
702243789Sdim	movl	$0,%eax
703243789Sdim	adcl	%eax,%eax
704243789Sdim	addl	%edx,%ecx
705243789Sdim	adcl	$0,%eax
706243789Sdim	movl	%ecx,24(%ebx)
707243789Sdim
708243789Sdim	movl	28(%esi),%ecx
709243789Sdim	movl	28(%edi),%edx
710243789Sdim	addl	%eax,%ecx
711243789Sdim	movl	$0,%eax
712243789Sdim	adcl	%eax,%eax
713243789Sdim	addl	%edx,%ecx
714243789Sdim	adcl	$0,%eax
715243789Sdim	movl	%ecx,28(%ebx)
716243789Sdim
717243789Sdim	addl	$32,%esi
718243789Sdim	addl	$32,%edi
719243789Sdim	addl	$32,%ebx
720243789Sdim	subl	$8,%ebp
721243789Sdim	jnz	.L024aw_loop
722243789Sdim.L023aw_finish:
723243789Sdim	movl	32(%esp),%ebp
724243789Sdim	andl	$7,%ebp
725243789Sdim	jz	.L025aw_end
726243789Sdim
727243789Sdim	movl	(%esi),%ecx
728243789Sdim	movl	(%edi),%edx
729243789Sdim	addl	%eax,%ecx
730243789Sdim	movl	$0,%eax
731243789Sdim	adcl	%eax,%eax
732243789Sdim	addl	%edx,%ecx
733243789Sdim	adcl	$0,%eax
734243789Sdim	decl	%ebp
735243789Sdim	movl	%ecx,(%ebx)
736243789Sdim	jz	.L025aw_end
737243789Sdim
738243789Sdim	movl	4(%esi),%ecx
739243789Sdim	movl	4(%edi),%edx
740243789Sdim	addl	%eax,%ecx
741243789Sdim	movl	$0,%eax
742243789Sdim	adcl	%eax,%eax
743243789Sdim	addl	%edx,%ecx
744243789Sdim	adcl	$0,%eax
745243789Sdim	decl	%ebp
746243789Sdim	movl	%ecx,4(%ebx)
747243789Sdim	jz	.L025aw_end
748243789Sdim
749243789Sdim	movl	8(%esi),%ecx
750243789Sdim	movl	8(%edi),%edx
751243789Sdim	addl	%eax,%ecx
752243789Sdim	movl	$0,%eax
753243789Sdim	adcl	%eax,%eax
754243789Sdim	addl	%edx,%ecx
755243789Sdim	adcl	$0,%eax
756243789Sdim	decl	%ebp
757243789Sdim	movl	%ecx,8(%ebx)
758243789Sdim	jz	.L025aw_end
759243789Sdim
760243789Sdim	movl	12(%esi),%ecx
761243789Sdim	movl	12(%edi),%edx
762243789Sdim	addl	%eax,%ecx
763243789Sdim	movl	$0,%eax
764243789Sdim	adcl	%eax,%eax
765243789Sdim	addl	%edx,%ecx
766243789Sdim	adcl	$0,%eax
767243789Sdim	decl	%ebp
768243789Sdim	movl	%ecx,12(%ebx)
769243789Sdim	jz	.L025aw_end
770243789Sdim
771243789Sdim	movl	16(%esi),%ecx
772243789Sdim	movl	16(%edi),%edx
773243789Sdim	addl	%eax,%ecx
774243789Sdim	movl	$0,%eax
775243789Sdim	adcl	%eax,%eax
776243789Sdim	addl	%edx,%ecx
777243789Sdim	adcl	$0,%eax
778243789Sdim	decl	%ebp
779243789Sdim	movl	%ecx,16(%ebx)
780243789Sdim	jz	.L025aw_end
781243789Sdim
782243789Sdim	movl	20(%esi),%ecx
783243789Sdim	movl	20(%edi),%edx
784243789Sdim	addl	%eax,%ecx
785243789Sdim	movl	$0,%eax
786243789Sdim	adcl	%eax,%eax
787243789Sdim	addl	%edx,%ecx
788243789Sdim	adcl	$0,%eax
789243789Sdim	decl	%ebp
790243789Sdim	movl	%ecx,20(%ebx)
791243789Sdim	jz	.L025aw_end
792243789Sdim
793243789Sdim	movl	24(%esi),%ecx
794243789Sdim	movl	24(%edi),%edx
795243789Sdim	addl	%eax,%ecx
796243789Sdim	movl	$0,%eax
797243789Sdim	adcl	%eax,%eax
798243789Sdim	addl	%edx,%ecx
799243789Sdim	adcl	$0,%eax
800243789Sdim	movl	%ecx,24(%ebx)
801243789Sdim.L025aw_end:
802243789Sdim	popl	%edi
803243789Sdim	popl	%esi
804243789Sdim	popl	%ebx
805243789Sdim	popl	%ebp
806243789Sdim	ret
807243789Sdim.size	bn_add_words,.-.L_bn_add_words_begin
808243789Sdim.globl	bn_sub_words
809243789Sdim.type	bn_sub_words,@function
810243789Sdim.align	16
811243789Sdimbn_sub_words:
812243789Sdim.L_bn_sub_words_begin:
813243789Sdim	pushl	%ebp
814243789Sdim	pushl	%ebx
815243789Sdim	pushl	%esi
816243789Sdim	pushl	%edi
817243789Sdim
818243789Sdim	movl	20(%esp),%ebx
819243789Sdim	movl	24(%esp),%esi
820243789Sdim	movl	28(%esp),%edi
821243789Sdim	movl	32(%esp),%ebp
822243789Sdim	xorl	%eax,%eax
823243789Sdim	andl	$4294967288,%ebp
824243789Sdim	jz	.L026aw_finish
825243789Sdim.L027aw_loop:
826243789Sdim
827243789Sdim	movl	(%esi),%ecx
828243789Sdim	movl	(%edi),%edx
829243789Sdim	subl	%eax,%ecx
830243789Sdim	movl	$0,%eax
831243789Sdim	adcl	%eax,%eax
832243789Sdim	subl	%edx,%ecx
833243789Sdim	adcl	$0,%eax
834243789Sdim	movl	%ecx,(%ebx)
835243789Sdim
836243789Sdim	movl	4(%esi),%ecx
837243789Sdim	movl	4(%edi),%edx
838243789Sdim	subl	%eax,%ecx
839243789Sdim	movl	$0,%eax
840243789Sdim	adcl	%eax,%eax
841243789Sdim	subl	%edx,%ecx
842243789Sdim	adcl	$0,%eax
843243789Sdim	movl	%ecx,4(%ebx)
844243789Sdim
845243789Sdim	movl	8(%esi),%ecx
846243789Sdim	movl	8(%edi),%edx
847243789Sdim	subl	%eax,%ecx
848243789Sdim	movl	$0,%eax
849243789Sdim	adcl	%eax,%eax
850243789Sdim	subl	%edx,%ecx
851243789Sdim	adcl	$0,%eax
852243789Sdim	movl	%ecx,8(%ebx)
853243789Sdim
854243789Sdim	movl	12(%esi),%ecx
855243789Sdim	movl	12(%edi),%edx
856243789Sdim	subl	%eax,%ecx
857243789Sdim	movl	$0,%eax
858243789Sdim	adcl	%eax,%eax
859243789Sdim	subl	%edx,%ecx
860243789Sdim	adcl	$0,%eax
861243789Sdim	movl	%ecx,12(%ebx)
862243789Sdim
863243789Sdim	movl	16(%esi),%ecx
864243789Sdim	movl	16(%edi),%edx
865243789Sdim	subl	%eax,%ecx
866243789Sdim	movl	$0,%eax
867243789Sdim	adcl	%eax,%eax
868243789Sdim	subl	%edx,%ecx
869243789Sdim	adcl	$0,%eax
870243789Sdim	movl	%ecx,16(%ebx)
871243789Sdim
872243789Sdim	movl	20(%esi),%ecx
873243789Sdim	movl	20(%edi),%edx
874243789Sdim	subl	%eax,%ecx
875243789Sdim	movl	$0,%eax
876243789Sdim	adcl	%eax,%eax
877243789Sdim	subl	%edx,%ecx
878243789Sdim	adcl	$0,%eax
879243789Sdim	movl	%ecx,20(%ebx)
880243789Sdim
881243789Sdim	movl	24(%esi),%ecx
882243789Sdim	movl	24(%edi),%edx
883243789Sdim	subl	%eax,%ecx
884243789Sdim	movl	$0,%eax
885243789Sdim	adcl	%eax,%eax
886243789Sdim	subl	%edx,%ecx
887243789Sdim	adcl	$0,%eax
888243789Sdim	movl	%ecx,24(%ebx)
889243789Sdim
890243789Sdim	movl	28(%esi),%ecx
891243789Sdim	movl	28(%edi),%edx
892243789Sdim	subl	%eax,%ecx
893243789Sdim	movl	$0,%eax
894243789Sdim	adcl	%eax,%eax
895243789Sdim	subl	%edx,%ecx
896243789Sdim	adcl	$0,%eax
897243789Sdim	movl	%ecx,28(%ebx)
898243789Sdim
899243789Sdim	addl	$32,%esi
900243789Sdim	addl	$32,%edi
901243789Sdim	addl	$32,%ebx
902243789Sdim	subl	$8,%ebp
903243789Sdim	jnz	.L027aw_loop
904243789Sdim.L026aw_finish:
905243789Sdim	movl	32(%esp),%ebp
906243789Sdim	andl	$7,%ebp
907243789Sdim	jz	.L028aw_end
908243789Sdim
909243789Sdim	movl	(%esi),%ecx
910243789Sdim	movl	(%edi),%edx
911243789Sdim	subl	%eax,%ecx
912243789Sdim	movl	$0,%eax
913243789Sdim	adcl	%eax,%eax
914243789Sdim	subl	%edx,%ecx
915243789Sdim	adcl	$0,%eax
916243789Sdim	decl	%ebp
917243789Sdim	movl	%ecx,(%ebx)
918243789Sdim	jz	.L028aw_end
919243789Sdim
920243789Sdim	movl	4(%esi),%ecx
921243789Sdim	movl	4(%edi),%edx
922243789Sdim	subl	%eax,%ecx
923243789Sdim	movl	$0,%eax
924243789Sdim	adcl	%eax,%eax
925243789Sdim	subl	%edx,%ecx
926243789Sdim	adcl	$0,%eax
927243789Sdim	decl	%ebp
928243789Sdim	movl	%ecx,4(%ebx)
929243789Sdim	jz	.L028aw_end
930243789Sdim
931243789Sdim	movl	8(%esi),%ecx
932243789Sdim	movl	8(%edi),%edx
933243789Sdim	subl	%eax,%ecx
934243789Sdim	movl	$0,%eax
935243789Sdim	adcl	%eax,%eax
936243789Sdim	subl	%edx,%ecx
937243789Sdim	adcl	$0,%eax
938243789Sdim	decl	%ebp
939243789Sdim	movl	%ecx,8(%ebx)
940243789Sdim	jz	.L028aw_end
941243789Sdim
942243789Sdim	movl	12(%esi),%ecx
943243789Sdim	movl	12(%edi),%edx
944243789Sdim	subl	%eax,%ecx
945243789Sdim	movl	$0,%eax
946243789Sdim	adcl	%eax,%eax
947243789Sdim	subl	%edx,%ecx
948243789Sdim	adcl	$0,%eax
949243789Sdim	decl	%ebp
950243789Sdim	movl	%ecx,12(%ebx)
951243789Sdim	jz	.L028aw_end
952243789Sdim
953243789Sdim	movl	16(%esi),%ecx
954243789Sdim	movl	16(%edi),%edx
955243789Sdim	subl	%eax,%ecx
956243789Sdim	movl	$0,%eax
957243789Sdim	adcl	%eax,%eax
958243789Sdim	subl	%edx,%ecx
959243789Sdim	adcl	$0,%eax
960243789Sdim	decl	%ebp
961243789Sdim	movl	%ecx,16(%ebx)
962243789Sdim	jz	.L028aw_end
963243789Sdim
964243789Sdim	movl	20(%esi),%ecx
965243789Sdim	movl	20(%edi),%edx
966243789Sdim	subl	%eax,%ecx
967243789Sdim	movl	$0,%eax
968243789Sdim	adcl	%eax,%eax
969243789Sdim	subl	%edx,%ecx
970243789Sdim	adcl	$0,%eax
971243789Sdim	decl	%ebp
972243789Sdim	movl	%ecx,20(%ebx)
973243789Sdim	jz	.L028aw_end
974243789Sdim
975243789Sdim	movl	24(%esi),%ecx
976243789Sdim	movl	24(%edi),%edx
977243789Sdim	subl	%eax,%ecx
978243789Sdim	movl	$0,%eax
979243789Sdim	adcl	%eax,%eax
980243789Sdim	subl	%edx,%ecx
981243789Sdim	adcl	$0,%eax
982243789Sdim	movl	%ecx,24(%ebx)
983243789Sdim.L028aw_end:
984243789Sdim	popl	%edi
985243789Sdim	popl	%esi
986243789Sdim	popl	%ebx
987243789Sdim	popl	%ebp
988243789Sdim	ret
989243789Sdim.size	bn_sub_words,.-.L_bn_sub_words_begin
990243789Sdim.globl	bn_sub_part_words
991243789Sdim.type	bn_sub_part_words,@function
992243789Sdim.align	16
993243789Sdimbn_sub_part_words:
994243789Sdim.L_bn_sub_part_words_begin:
995243789Sdim	pushl	%ebp
996243789Sdim	pushl	%ebx
997243789Sdim	pushl	%esi
998243789Sdim	pushl	%edi
999243789Sdim
1000243789Sdim	movl	20(%esp),%ebx
1001243789Sdim	movl	24(%esp),%esi
1002243789Sdim	movl	28(%esp),%edi
1003243789Sdim	movl	32(%esp),%ebp
1004243789Sdim	xorl	%eax,%eax
1005243789Sdim	andl	$4294967288,%ebp
1006243789Sdim	jz	.L029aw_finish
1007243789Sdim.L030aw_loop:
1008243789Sdim
1009243789Sdim	movl	(%esi),%ecx
1010243789Sdim	movl	(%edi),%edx
1011243789Sdim	subl	%eax,%ecx
1012243789Sdim	movl	$0,%eax
1013243789Sdim	adcl	%eax,%eax
1014243789Sdim	subl	%edx,%ecx
1015243789Sdim	adcl	$0,%eax
1016243789Sdim	movl	%ecx,(%ebx)
1017243789Sdim
1018243789Sdim	movl	4(%esi),%ecx
1019243789Sdim	movl	4(%edi),%edx
1020243789Sdim	subl	%eax,%ecx
1021243789Sdim	movl	$0,%eax
1022243789Sdim	adcl	%eax,%eax
1023243789Sdim	subl	%edx,%ecx
1024243789Sdim	adcl	$0,%eax
1025243789Sdim	movl	%ecx,4(%ebx)
1026243789Sdim
1027243789Sdim	movl	8(%esi),%ecx
1028243789Sdim	movl	8(%edi),%edx
1029243789Sdim	subl	%eax,%ecx
1030243789Sdim	movl	$0,%eax
1031243789Sdim	adcl	%eax,%eax
1032243789Sdim	subl	%edx,%ecx
1033243789Sdim	adcl	$0,%eax
1034243789Sdim	movl	%ecx,8(%ebx)
1035243789Sdim
1036243789Sdim	movl	12(%esi),%ecx
1037243789Sdim	movl	12(%edi),%edx
1038243789Sdim	subl	%eax,%ecx
1039243789Sdim	movl	$0,%eax
1040243789Sdim	adcl	%eax,%eax
1041243789Sdim	subl	%edx,%ecx
1042243789Sdim	adcl	$0,%eax
1043243789Sdim	movl	%ecx,12(%ebx)
1044243789Sdim
1045243789Sdim	movl	16(%esi),%ecx
1046243789Sdim	movl	16(%edi),%edx
1047243789Sdim	subl	%eax,%ecx
1048243789Sdim	movl	$0,%eax
1049243789Sdim	adcl	%eax,%eax
1050243789Sdim	subl	%edx,%ecx
1051243789Sdim	adcl	$0,%eax
1052243789Sdim	movl	%ecx,16(%ebx)
1053243789Sdim
1054243789Sdim	movl	20(%esi),%ecx
1055243789Sdim	movl	20(%edi),%edx
1056243789Sdim	subl	%eax,%ecx
1057243789Sdim	movl	$0,%eax
1058243789Sdim	adcl	%eax,%eax
1059243789Sdim	subl	%edx,%ecx
1060243789Sdim	adcl	$0,%eax
1061243789Sdim	movl	%ecx,20(%ebx)
1062243789Sdim
1063243789Sdim	movl	24(%esi),%ecx
1064243789Sdim	movl	24(%edi),%edx
1065243789Sdim	subl	%eax,%ecx
1066243789Sdim	movl	$0,%eax
1067243789Sdim	adcl	%eax,%eax
1068243789Sdim	subl	%edx,%ecx
1069243789Sdim	adcl	$0,%eax
1070243789Sdim	movl	%ecx,24(%ebx)
1071243789Sdim
1072243789Sdim	movl	28(%esi),%ecx
1073243789Sdim	movl	28(%edi),%edx
1074243789Sdim	subl	%eax,%ecx
1075243789Sdim	movl	$0,%eax
1076243789Sdim	adcl	%eax,%eax
1077243789Sdim	subl	%edx,%ecx
1078243789Sdim	adcl	$0,%eax
1079243789Sdim	movl	%ecx,28(%ebx)
1080243789Sdim
1081243789Sdim	addl	$32,%esi
1082243789Sdim	addl	$32,%edi
1083243789Sdim	addl	$32,%ebx
1084243789Sdim	subl	$8,%ebp
1085243789Sdim	jnz	.L030aw_loop
1086243789Sdim.L029aw_finish:
1087243789Sdim	movl	32(%esp),%ebp
1088243789Sdim	andl	$7,%ebp
1089243789Sdim	jz	.L031aw_end
1090243789Sdim
1091243789Sdim	movl	(%esi),%ecx
1092243789Sdim	movl	(%edi),%edx
1093243789Sdim	subl	%eax,%ecx
1094243789Sdim	movl	$0,%eax
1095243789Sdim	adcl	%eax,%eax
1096243789Sdim	subl	%edx,%ecx
1097243789Sdim	adcl	$0,%eax
1098243789Sdim	movl	%ecx,(%ebx)
1099243789Sdim	addl	$4,%esi
1100243789Sdim	addl	$4,%edi
1101243789Sdim	addl	$4,%ebx
1102243789Sdim	decl	%ebp
1103243789Sdim	jz	.L031aw_end
1104243789Sdim
1105243789Sdim	movl	(%esi),%ecx
1106243789Sdim	movl	(%edi),%edx
1107243789Sdim	subl	%eax,%ecx
1108243789Sdim	movl	$0,%eax
1109243789Sdim	adcl	%eax,%eax
1110243789Sdim	subl	%edx,%ecx
1111243789Sdim	adcl	$0,%eax
1112243789Sdim	movl	%ecx,(%ebx)
1113243789Sdim	addl	$4,%esi
1114243789Sdim	addl	$4,%edi
1115243789Sdim	addl	$4,%ebx
1116243789Sdim	decl	%ebp
1117243789Sdim	jz	.L031aw_end
1118243789Sdim
1119243789Sdim	movl	(%esi),%ecx
1120243789Sdim	movl	(%edi),%edx
1121243789Sdim	subl	%eax,%ecx
1122243789Sdim	movl	$0,%eax
1123243789Sdim	adcl	%eax,%eax
1124243789Sdim	subl	%edx,%ecx
1125243789Sdim	adcl	$0,%eax
1126243789Sdim	movl	%ecx,(%ebx)
1127243789Sdim	addl	$4,%esi
1128243789Sdim	addl	$4,%edi
1129243789Sdim	addl	$4,%ebx
1130243789Sdim	decl	%ebp
1131243789Sdim	jz	.L031aw_end
1132243789Sdim
1133243789Sdim	movl	(%esi),%ecx
1134243789Sdim	movl	(%edi),%edx
1135243789Sdim	subl	%eax,%ecx
1136243789Sdim	movl	$0,%eax
1137243789Sdim	adcl	%eax,%eax
1138243789Sdim	subl	%edx,%ecx
1139243789Sdim	adcl	$0,%eax
1140243789Sdim	movl	%ecx,(%ebx)
1141243789Sdim	addl	$4,%esi
1142243789Sdim	addl	$4,%edi
1143243789Sdim	addl	$4,%ebx
1144243789Sdim	decl	%ebp
1145243789Sdim	jz	.L031aw_end
1146243789Sdim
1147243789Sdim	movl	(%esi),%ecx
1148243789Sdim	movl	(%edi),%edx
1149243789Sdim	subl	%eax,%ecx
1150243789Sdim	movl	$0,%eax
1151243789Sdim	adcl	%eax,%eax
1152243789Sdim	subl	%edx,%ecx
1153243789Sdim	adcl	$0,%eax
1154243789Sdim	movl	%ecx,(%ebx)
1155243789Sdim	addl	$4,%esi
1156243789Sdim	addl	$4,%edi
1157243789Sdim	addl	$4,%ebx
1158243789Sdim	decl	%ebp
1159243789Sdim	jz	.L031aw_end
1160243789Sdim
1161243789Sdim	movl	(%esi),%ecx
1162243789Sdim	movl	(%edi),%edx
1163243789Sdim	subl	%eax,%ecx
1164243789Sdim	movl	$0,%eax
1165243789Sdim	adcl	%eax,%eax
1166243789Sdim	subl	%edx,%ecx
1167243789Sdim	adcl	$0,%eax
1168243789Sdim	movl	%ecx,(%ebx)
1169243789Sdim	addl	$4,%esi
1170243789Sdim	addl	$4,%edi
1171243789Sdim	addl	$4,%ebx
1172243789Sdim	decl	%ebp
1173243789Sdim	jz	.L031aw_end
1174243789Sdim
1175243789Sdim	movl	(%esi),%ecx
1176243789Sdim	movl	(%edi),%edx
1177243789Sdim	subl	%eax,%ecx
1178243789Sdim	movl	$0,%eax
1179243789Sdim	adcl	%eax,%eax
1180243789Sdim	subl	%edx,%ecx
1181243789Sdim	adcl	$0,%eax
1182243789Sdim	movl	%ecx,(%ebx)
1183243789Sdim	addl	$4,%esi
1184243789Sdim	addl	$4,%edi
1185243789Sdim	addl	$4,%ebx
1186243789Sdim.L031aw_end:
1187243789Sdim	cmpl	$0,36(%esp)
1188243789Sdim	je	.L032pw_end
1189243789Sdim	movl	36(%esp),%ebp
1190243789Sdim	cmpl	$0,%ebp
1191243789Sdim	je	.L032pw_end
1192243789Sdim	jge	.L033pw_pos
1193243789Sdim
1194243789Sdim	movl	$0,%edx
1195243789Sdim	subl	%ebp,%edx
1196243789Sdim	movl	%edx,%ebp
1197243789Sdim	andl	$4294967288,%ebp
1198243789Sdim	jz	.L034pw_neg_finish
1199243789Sdim.L035pw_neg_loop:
1200243789Sdim
1201243789Sdim	movl	$0,%ecx
1202243789Sdim	movl	(%edi),%edx
1203243789Sdim	subl	%eax,%ecx
1204243789Sdim	movl	$0,%eax
1205243789Sdim	adcl	%eax,%eax
1206243789Sdim	subl	%edx,%ecx
1207243789Sdim	adcl	$0,%eax
1208243789Sdim	movl	%ecx,(%ebx)
1209243789Sdim
1210243789Sdim	movl	$0,%ecx
1211243789Sdim	movl	4(%edi),%edx
1212243789Sdim	subl	%eax,%ecx
1213243789Sdim	movl	$0,%eax
1214243789Sdim	adcl	%eax,%eax
1215243789Sdim	subl	%edx,%ecx
1216243789Sdim	adcl	$0,%eax
1217243789Sdim	movl	%ecx,4(%ebx)
1218243789Sdim
1219243789Sdim	movl	$0,%ecx
1220243789Sdim	movl	8(%edi),%edx
1221243789Sdim	subl	%eax,%ecx
1222243789Sdim	movl	$0,%eax
1223243789Sdim	adcl	%eax,%eax
1224243789Sdim	subl	%edx,%ecx
1225243789Sdim	adcl	$0,%eax
1226243789Sdim	movl	%ecx,8(%ebx)
1227243789Sdim
1228243789Sdim	movl	$0,%ecx
1229243789Sdim	movl	12(%edi),%edx
1230243789Sdim	subl	%eax,%ecx
1231243789Sdim	movl	$0,%eax
1232243789Sdim	adcl	%eax,%eax
1233243789Sdim	subl	%edx,%ecx
1234243789Sdim	adcl	$0,%eax
1235243789Sdim	movl	%ecx,12(%ebx)
1236243789Sdim
1237243789Sdim	movl	$0,%ecx
1238243789Sdim	movl	16(%edi),%edx
1239243789Sdim	subl	%eax,%ecx
1240243789Sdim	movl	$0,%eax
1241243789Sdim	adcl	%eax,%eax
1242243789Sdim	subl	%edx,%ecx
1243243789Sdim	adcl	$0,%eax
1244243789Sdim	movl	%ecx,16(%ebx)
1245243789Sdim
1246243789Sdim	movl	$0,%ecx
1247243789Sdim	movl	20(%edi),%edx
1248243789Sdim	subl	%eax,%ecx
1249243789Sdim	movl	$0,%eax
1250243789Sdim	adcl	%eax,%eax
1251243789Sdim	subl	%edx,%ecx
1252243789Sdim	adcl	$0,%eax
1253243789Sdim	movl	%ecx,20(%ebx)
1254243789Sdim
1255243789Sdim	movl	$0,%ecx
1256243789Sdim	movl	24(%edi),%edx
1257243789Sdim	subl	%eax,%ecx
1258243789Sdim	movl	$0,%eax
1259243789Sdim	adcl	%eax,%eax
1260243789Sdim	subl	%edx,%ecx
1261243789Sdim	adcl	$0,%eax
1262243789Sdim	movl	%ecx,24(%ebx)
1263243789Sdim
1264243789Sdim	movl	$0,%ecx
1265243789Sdim	movl	28(%edi),%edx
1266243789Sdim	subl	%eax,%ecx
1267243789Sdim	movl	$0,%eax
1268243789Sdim	adcl	%eax,%eax
1269243789Sdim	subl	%edx,%ecx
1270243789Sdim	adcl	$0,%eax
1271243789Sdim	movl	%ecx,28(%ebx)
1272243789Sdim
1273243789Sdim	addl	$32,%edi
1274243789Sdim	addl	$32,%ebx
1275243789Sdim	subl	$8,%ebp
1276243789Sdim	jnz	.L035pw_neg_loop
1277243789Sdim.L034pw_neg_finish:
1278243789Sdim	movl	36(%esp),%edx
1279243789Sdim	movl	$0,%ebp
1280243789Sdim	subl	%edx,%ebp
1281243789Sdim	andl	$7,%ebp
1282243789Sdim	jz	.L032pw_end
1283243789Sdim
1284243789Sdim	movl	$0,%ecx
1285243789Sdim	movl	(%edi),%edx
1286243789Sdim	subl	%eax,%ecx
1287243789Sdim	movl	$0,%eax
1288243789Sdim	adcl	%eax,%eax
1289243789Sdim	subl	%edx,%ecx
1290243789Sdim	adcl	$0,%eax
1291243789Sdim	decl	%ebp
1292243789Sdim	movl	%ecx,(%ebx)
1293243789Sdim	jz	.L032pw_end
1294243789Sdim
1295243789Sdim	movl	$0,%ecx
1296243789Sdim	movl	4(%edi),%edx
1297243789Sdim	subl	%eax,%ecx
1298243789Sdim	movl	$0,%eax
1299243789Sdim	adcl	%eax,%eax
1300243789Sdim	subl	%edx,%ecx
1301243789Sdim	adcl	$0,%eax
1302243789Sdim	decl	%ebp
1303243789Sdim	movl	%ecx,4(%ebx)
1304243789Sdim	jz	.L032pw_end
1305243789Sdim
1306243789Sdim	movl	$0,%ecx
1307243789Sdim	movl	8(%edi),%edx
1308243789Sdim	subl	%eax,%ecx
1309243789Sdim	movl	$0,%eax
1310243789Sdim	adcl	%eax,%eax
1311243789Sdim	subl	%edx,%ecx
1312243789Sdim	adcl	$0,%eax
1313243789Sdim	decl	%ebp
1314243789Sdim	movl	%ecx,8(%ebx)
1315243789Sdim	jz	.L032pw_end
1316243789Sdim
1317243789Sdim	movl	$0,%ecx
1318243789Sdim	movl	12(%edi),%edx
1319243789Sdim	subl	%eax,%ecx
1320243789Sdim	movl	$0,%eax
1321243789Sdim	adcl	%eax,%eax
1322243789Sdim	subl	%edx,%ecx
1323243789Sdim	adcl	$0,%eax
1324243789Sdim	decl	%ebp
1325243789Sdim	movl	%ecx,12(%ebx)
1326243789Sdim	jz	.L032pw_end
1327243789Sdim
1328243789Sdim	movl	$0,%ecx
1329243789Sdim	movl	16(%edi),%edx
1330243789Sdim	subl	%eax,%ecx
1331243789Sdim	movl	$0,%eax
1332243789Sdim	adcl	%eax,%eax
1333243789Sdim	subl	%edx,%ecx
1334243789Sdim	adcl	$0,%eax
1335243789Sdim	decl	%ebp
1336243789Sdim	movl	%ecx,16(%ebx)
1337243789Sdim	jz	.L032pw_end
1338243789Sdim
1339243789Sdim	movl	$0,%ecx
1340243789Sdim	movl	20(%edi),%edx
1341243789Sdim	subl	%eax,%ecx
1342243789Sdim	movl	$0,%eax
1343243789Sdim	adcl	%eax,%eax
1344243789Sdim	subl	%edx,%ecx
1345243789Sdim	adcl	$0,%eax
1346243789Sdim	decl	%ebp
1347243789Sdim	movl	%ecx,20(%ebx)
1348243789Sdim	jz	.L032pw_end
1349243789Sdim
1350243789Sdim	movl	$0,%ecx
1351243789Sdim	movl	24(%edi),%edx
1352243789Sdim	subl	%eax,%ecx
1353243789Sdim	movl	$0,%eax
1354243789Sdim	adcl	%eax,%eax
1355243789Sdim	subl	%edx,%ecx
1356243789Sdim	adcl	$0,%eax
1357243789Sdim	movl	%ecx,24(%ebx)
1358243789Sdim	jmp	.L032pw_end
1359243789Sdim.L033pw_pos:
1360243789Sdim	andl	$4294967288,%ebp
1361243789Sdim	jz	.L036pw_pos_finish
1362243789Sdim.L037pw_pos_loop:
1363243789Sdim
1364243789Sdim	movl	(%esi),%ecx
1365243789Sdim	subl	%eax,%ecx
1366243789Sdim	movl	%ecx,(%ebx)
1367243789Sdim	jnc	.L038pw_nc0
1368243789Sdim
1369243789Sdim	movl	4(%esi),%ecx
1370243789Sdim	subl	%eax,%ecx
1371243789Sdim	movl	%ecx,4(%ebx)
1372243789Sdim	jnc	.L039pw_nc1
1373243789Sdim
1374243789Sdim	movl	8(%esi),%ecx
1375243789Sdim	subl	%eax,%ecx
1376243789Sdim	movl	%ecx,8(%ebx)
1377243789Sdim	jnc	.L040pw_nc2
1378243789Sdim
1379243789Sdim	movl	12(%esi),%ecx
1380243789Sdim	subl	%eax,%ecx
1381243789Sdim	movl	%ecx,12(%ebx)
1382243789Sdim	jnc	.L041pw_nc3
1383243789Sdim
1384243789Sdim	movl	16(%esi),%ecx
1385243789Sdim	subl	%eax,%ecx
1386243789Sdim	movl	%ecx,16(%ebx)
1387243789Sdim	jnc	.L042pw_nc4
1388243789Sdim
1389243789Sdim	movl	20(%esi),%ecx
1390243789Sdim	subl	%eax,%ecx
1391243789Sdim	movl	%ecx,20(%ebx)
1392243789Sdim	jnc	.L043pw_nc5
1393243789Sdim
1394243789Sdim	movl	24(%esi),%ecx
1395243789Sdim	subl	%eax,%ecx
1396243789Sdim	movl	%ecx,24(%ebx)
1397243789Sdim	jnc	.L044pw_nc6
1398243789Sdim
1399243789Sdim	movl	28(%esi),%ecx
1400243789Sdim	subl	%eax,%ecx
1401243789Sdim	movl	%ecx,28(%ebx)
1402243789Sdim	jnc	.L045pw_nc7
1403243789Sdim
1404243789Sdim	addl	$32,%esi
1405243789Sdim	addl	$32,%ebx
1406243789Sdim	subl	$8,%ebp
1407243789Sdim	jnz	.L037pw_pos_loop
1408243789Sdim.L036pw_pos_finish:
1409243789Sdim	movl	36(%esp),%ebp
1410243789Sdim	andl	$7,%ebp
1411243789Sdim	jz	.L032pw_end
1412243789Sdim
1413243789Sdim	movl	(%esi),%ecx
1414243789Sdim	subl	%eax,%ecx
1415243789Sdim	movl	%ecx,(%ebx)
1416243789Sdim	jnc	.L046pw_tail_nc0
1417243789Sdim	decl	%ebp
1418243789Sdim	jz	.L032pw_end
1419243789Sdim
1420243789Sdim	movl	4(%esi),%ecx
1421243789Sdim	subl	%eax,%ecx
1422243789Sdim	movl	%ecx,4(%ebx)
1423243789Sdim	jnc	.L047pw_tail_nc1
1424243789Sdim	decl	%ebp
1425243789Sdim	jz	.L032pw_end
1426243789Sdim
1427243789Sdim	movl	8(%esi),%ecx
1428243789Sdim	subl	%eax,%ecx
1429243789Sdim	movl	%ecx,8(%ebx)
1430243789Sdim	jnc	.L048pw_tail_nc2
1431243789Sdim	decl	%ebp
1432243789Sdim	jz	.L032pw_end
1433243789Sdim
1434243789Sdim	movl	12(%esi),%ecx
1435243789Sdim	subl	%eax,%ecx
1436243789Sdim	movl	%ecx,12(%ebx)
1437243789Sdim	jnc	.L049pw_tail_nc3
1438243789Sdim	decl	%ebp
1439243789Sdim	jz	.L032pw_end
1440243789Sdim
1441243789Sdim	movl	16(%esi),%ecx
1442243789Sdim	subl	%eax,%ecx
1443243789Sdim	movl	%ecx,16(%ebx)
1444243789Sdim	jnc	.L050pw_tail_nc4
1445243789Sdim	decl	%ebp
1446243789Sdim	jz	.L032pw_end
1447243789Sdim
1448243789Sdim	movl	20(%esi),%ecx
1449243789Sdim	subl	%eax,%ecx
1450243789Sdim	movl	%ecx,20(%ebx)
1451243789Sdim	jnc	.L051pw_tail_nc5
1452243789Sdim	decl	%ebp
1453243789Sdim	jz	.L032pw_end
1454243789Sdim
1455243789Sdim	movl	24(%esi),%ecx
1456243789Sdim	subl	%eax,%ecx
1457243789Sdim	movl	%ecx,24(%ebx)
1458243789Sdim	jnc	.L052pw_tail_nc6
1459243789Sdim	movl	$1,%eax
1460243789Sdim	jmp	.L032pw_end
1461243789Sdim.L053pw_nc_loop:
1462243789Sdim	movl	(%esi),%ecx
1463243789Sdim	movl	%ecx,(%ebx)
1464243789Sdim.L038pw_nc0:
1465243789Sdim	movl	4(%esi),%ecx
1466243789Sdim	movl	%ecx,4(%ebx)
1467243789Sdim.L039pw_nc1:
1468243789Sdim	movl	8(%esi),%ecx
1469243789Sdim	movl	%ecx,8(%ebx)
1470243789Sdim.L040pw_nc2:
1471243789Sdim	movl	12(%esi),%ecx
1472243789Sdim	movl	%ecx,12(%ebx)
1473243789Sdim.L041pw_nc3:
1474243789Sdim	movl	16(%esi),%ecx
1475243789Sdim	movl	%ecx,16(%ebx)
1476243789Sdim.L042pw_nc4:
1477243789Sdim	movl	20(%esi),%ecx
1478243789Sdim	movl	%ecx,20(%ebx)
1479243789Sdim.L043pw_nc5:
1480243789Sdim	movl	24(%esi),%ecx
1481243789Sdim	movl	%ecx,24(%ebx)
1482243789Sdim.L044pw_nc6:
1483243789Sdim	movl	28(%esi),%ecx
1484243789Sdim	movl	%ecx,28(%ebx)
1485243789Sdim.L045pw_nc7:
1486243789Sdim
1487243789Sdim	addl	$32,%esi
1488243789Sdim	addl	$32,%ebx
1489243789Sdim	subl	$8,%ebp
1490243789Sdim	jnz	.L053pw_nc_loop
1491243789Sdim	movl	36(%esp),%ebp
1492243789Sdim	andl	$7,%ebp
1493243789Sdim	jz	.L054pw_nc_end
1494243789Sdim	movl	(%esi),%ecx
1495243789Sdim	movl	%ecx,(%ebx)
1496243789Sdim.L046pw_tail_nc0:
1497243789Sdim	decl	%ebp
1498243789Sdim	jz	.L054pw_nc_end
1499243789Sdim	movl	4(%esi),%ecx
1500243789Sdim	movl	%ecx,4(%ebx)
1501243789Sdim.L047pw_tail_nc1:
1502243789Sdim	decl	%ebp
1503243789Sdim	jz	.L054pw_nc_end
1504243789Sdim	movl	8(%esi),%ecx
1505243789Sdim	movl	%ecx,8(%ebx)
1506243789Sdim.L048pw_tail_nc2:
1507243789Sdim	decl	%ebp
1508243789Sdim	jz	.L054pw_nc_end
1509243789Sdim	movl	12(%esi),%ecx
1510243789Sdim	movl	%ecx,12(%ebx)
1511243789Sdim.L049pw_tail_nc3:
1512243789Sdim	decl	%ebp
1513243789Sdim	jz	.L054pw_nc_end
1514243789Sdim	movl	16(%esi),%ecx
1515243789Sdim	movl	%ecx,16(%ebx)
1516243789Sdim.L050pw_tail_nc4:
1517243789Sdim	decl	%ebp
1518243789Sdim	jz	.L054pw_nc_end
1519243789Sdim	movl	20(%esi),%ecx
1520243789Sdim	movl	%ecx,20(%ebx)
1521243789Sdim.L051pw_tail_nc5:
1522243789Sdim	decl	%ebp
1523243789Sdim	jz	.L054pw_nc_end
1524243789Sdim	movl	24(%esi),%ecx
1525243789Sdim	movl	%ecx,24(%ebx)
1526243789Sdim.L052pw_tail_nc6:
1527243789Sdim.L054pw_nc_end:
1528243789Sdim	movl	$0,%eax
1529243789Sdim.L032pw_end:
1530243789Sdim	popl	%edi
1531243789Sdim	popl	%esi
1532243789Sdim	popl	%ebx
1533243789Sdim	popl	%ebp
1534243789Sdim	ret
1535243789Sdim.size	bn_sub_part_words,.-.L_bn_sub_part_words_begin
1536243789Sdim.comm	OPENSSL_ia32cap_P,8,4
1537243789Sdim#else
1538243789Sdim.file	"bn-586.S"
1539243789Sdim.text
1540243789Sdim.globl	bn_mul_add_words
1541243789Sdim.type	bn_mul_add_words,@function
1542243789Sdim.align	16
1543243789Sdimbn_mul_add_words:
1544243789Sdim.L_bn_mul_add_words_begin:
1545243789Sdim	leal	OPENSSL_ia32cap_P,%eax
1546243789Sdim	btl	$26,(%eax)
1547243789Sdim	jnc	.L000maw_non_sse2
1548243789Sdim	movl	4(%esp),%eax
1549243789Sdim	movl	8(%esp),%edx
1550243789Sdim	movl	12(%esp),%ecx
1551243789Sdim	movd	16(%esp),%mm0
1552243789Sdim	pxor	%mm1,%mm1
1553243789Sdim	jmp	.L001maw_sse2_entry
1554243789Sdim.align	16
1555243789Sdim.L002maw_sse2_unrolled:
1556243789Sdim	movd	(%eax),%mm3
1557243789Sdim	paddq	%mm3,%mm1
1558243789Sdim	movd	(%edx),%mm2
1559243789Sdim	pmuludq	%mm0,%mm2
1560243789Sdim	movd	4(%edx),%mm4
1561243789Sdim	pmuludq	%mm0,%mm4
1562243789Sdim	movd	8(%edx),%mm6
1563243789Sdim	pmuludq	%mm0,%mm6
1564243789Sdim	movd	12(%edx),%mm7
1565243789Sdim	pmuludq	%mm0,%mm7
1566243789Sdim	paddq	%mm2,%mm1
1567243789Sdim	movd	4(%eax),%mm3
1568243789Sdim	paddq	%mm4,%mm3
1569243789Sdim	movd	8(%eax),%mm5
1570243789Sdim	paddq	%mm6,%mm5
1571243789Sdim	movd	12(%eax),%mm4
1572243789Sdim	paddq	%mm4,%mm7
1573243789Sdim	movd	%mm1,(%eax)
1574243789Sdim	movd	16(%edx),%mm2
1575243789Sdim	pmuludq	%mm0,%mm2
1576243789Sdim	psrlq	$32,%mm1
1577243789Sdim	movd	20(%edx),%mm4
1578243789Sdim	pmuludq	%mm0,%mm4
1579243789Sdim	paddq	%mm3,%mm1
1580243789Sdim	movd	24(%edx),%mm6
1581243789Sdim	pmuludq	%mm0,%mm6
1582243789Sdim	movd	%mm1,4(%eax)
1583243789Sdim	psrlq	$32,%mm1
1584243789Sdim	movd	28(%edx),%mm3
1585243789Sdim	addl	$32,%edx
1586243789Sdim	pmuludq	%mm0,%mm3
1587243789Sdim	paddq	%mm5,%mm1
1588243789Sdim	movd	16(%eax),%mm5
1589243789Sdim	paddq	%mm5,%mm2
1590243789Sdim	movd	%mm1,8(%eax)
1591243789Sdim	psrlq	$32,%mm1
1592243789Sdim	paddq	%mm7,%mm1
1593243789Sdim	movd	20(%eax),%mm5
1594243789Sdim	paddq	%mm5,%mm4
1595243789Sdim	movd	%mm1,12(%eax)
1596243789Sdim	psrlq	$32,%mm1
1597243789Sdim	paddq	%mm2,%mm1
1598243789Sdim	movd	24(%eax),%mm5
1599243789Sdim	paddq	%mm5,%mm6
1600243789Sdim	movd	%mm1,16(%eax)
1601243789Sdim	psrlq	$32,%mm1
1602243789Sdim	paddq	%mm4,%mm1
1603243789Sdim	movd	28(%eax),%mm5
1604243789Sdim	paddq	%mm5,%mm3
1605243789Sdim	movd	%mm1,20(%eax)
1606243789Sdim	psrlq	$32,%mm1
1607243789Sdim	paddq	%mm6,%mm1
1608243789Sdim	movd	%mm1,24(%eax)
1609243789Sdim	psrlq	$32,%mm1
1610243789Sdim	paddq	%mm3,%mm1
1611243789Sdim	movd	%mm1,28(%eax)
1612243789Sdim	leal	32(%eax),%eax
1613243789Sdim	psrlq	$32,%mm1
1614243789Sdim	subl	$8,%ecx
1615243789Sdim	jz	.L003maw_sse2_exit
1616243789Sdim.L001maw_sse2_entry:
1617243789Sdim	testl	$4294967288,%ecx
1618243789Sdim	jnz	.L002maw_sse2_unrolled
1619243789Sdim.align	4
1620243789Sdim.L004maw_sse2_loop:
1621243789Sdim	movd	(%edx),%mm2
1622243789Sdim	movd	(%eax),%mm3
1623243789Sdim	pmuludq	%mm0,%mm2
1624243789Sdim	leal	4(%edx),%edx
1625243789Sdim	paddq	%mm3,%mm1
1626243789Sdim	paddq	%mm2,%mm1
1627243789Sdim	movd	%mm1,(%eax)
1628243789Sdim	subl	$1,%ecx
1629243789Sdim	psrlq	$32,%mm1
1630243789Sdim	leal	4(%eax),%eax
1631243789Sdim	jnz	.L004maw_sse2_loop
1632243789Sdim.L003maw_sse2_exit:
1633243789Sdim	movd	%mm1,%eax
1634243789Sdim	emms
1635243789Sdim	ret
1636243789Sdim.align	16
1637243789Sdim.L000maw_non_sse2:
1638243789Sdim	pushl	%ebp
1639243789Sdim	pushl	%ebx
1640243789Sdim	pushl	%esi
1641243789Sdim	pushl	%edi
1642243789Sdim
1643243789Sdim	xorl	%esi,%esi
1644243789Sdim	movl	20(%esp),%edi
1645243789Sdim	movl	28(%esp),%ecx
1646243789Sdim	movl	24(%esp),%ebx
1647243789Sdim	andl	$4294967288,%ecx
1648243789Sdim	movl	32(%esp),%ebp
1649243789Sdim	pushl	%ecx
1650243789Sdim	jz	.L005maw_finish
1651243789Sdim.align	16
1652243789Sdim.L006maw_loop:
1653243789Sdim
1654243789Sdim	movl	(%ebx),%eax
1655243789Sdim	mull	%ebp
1656243789Sdim	addl	%esi,%eax
1657243789Sdim	adcl	$0,%edx
1658243789Sdim	addl	(%edi),%eax
1659243789Sdim	adcl	$0,%edx
1660243789Sdim	movl	%eax,(%edi)
1661243789Sdim	movl	%edx,%esi
1662243789Sdim
1663243789Sdim	movl	4(%ebx),%eax
1664243789Sdim	mull	%ebp
1665243789Sdim	addl	%esi,%eax
1666243789Sdim	adcl	$0,%edx
1667243789Sdim	addl	4(%edi),%eax
1668243789Sdim	adcl	$0,%edx
1669243789Sdim	movl	%eax,4(%edi)
1670243789Sdim	movl	%edx,%esi
1671243789Sdim
1672243789Sdim	movl	8(%ebx),%eax
1673243789Sdim	mull	%ebp
1674243789Sdim	addl	%esi,%eax
1675243789Sdim	adcl	$0,%edx
1676243789Sdim	addl	8(%edi),%eax
1677243789Sdim	adcl	$0,%edx
1678243789Sdim	movl	%eax,8(%edi)
1679243789Sdim	movl	%edx,%esi
1680243789Sdim
1681243789Sdim	movl	12(%ebx),%eax
1682243789Sdim	mull	%ebp
1683243789Sdim	addl	%esi,%eax
1684243789Sdim	adcl	$0,%edx
1685243789Sdim	addl	12(%edi),%eax
1686243789Sdim	adcl	$0,%edx
1687243789Sdim	movl	%eax,12(%edi)
1688243789Sdim	movl	%edx,%esi
1689243789Sdim
1690243789Sdim	movl	16(%ebx),%eax
1691243789Sdim	mull	%ebp
1692243789Sdim	addl	%esi,%eax
1693243789Sdim	adcl	$0,%edx
1694243789Sdim	addl	16(%edi),%eax
1695243789Sdim	adcl	$0,%edx
1696243789Sdim	movl	%eax,16(%edi)
1697243789Sdim	movl	%edx,%esi
1698243789Sdim
1699243789Sdim	movl	20(%ebx),%eax
1700243789Sdim	mull	%ebp
1701243789Sdim	addl	%esi,%eax
1702243789Sdim	adcl	$0,%edx
1703243789Sdim	addl	20(%edi),%eax
1704243789Sdim	adcl	$0,%edx
1705243789Sdim	movl	%eax,20(%edi)
1706243789Sdim	movl	%edx,%esi
1707243789Sdim
1708243789Sdim	movl	24(%ebx),%eax
1709243789Sdim	mull	%ebp
1710243789Sdim	addl	%esi,%eax
1711243789Sdim	adcl	$0,%edx
1712243789Sdim	addl	24(%edi),%eax
1713243789Sdim	adcl	$0,%edx
1714243789Sdim	movl	%eax,24(%edi)
1715243789Sdim	movl	%edx,%esi
1716243789Sdim
1717243789Sdim	movl	28(%ebx),%eax
1718243789Sdim	mull	%ebp
1719243789Sdim	addl	%esi,%eax
1720243789Sdim	adcl	$0,%edx
1721243789Sdim	addl	28(%edi),%eax
1722243789Sdim	adcl	$0,%edx
1723243789Sdim	movl	%eax,28(%edi)
1724243789Sdim	movl	%edx,%esi
1725243789Sdim
1726243789Sdim	subl	$8,%ecx
1727243789Sdim	leal	32(%ebx),%ebx
1728243789Sdim	leal	32(%edi),%edi
1729243789Sdim	jnz	.L006maw_loop
1730243789Sdim.L005maw_finish:
1731243789Sdim	movl	32(%esp),%ecx
1732243789Sdim	andl	$7,%ecx
1733243789Sdim	jnz	.L007maw_finish2
1734243789Sdim	jmp	.L008maw_end
1735243789Sdim.L007maw_finish2:
1736243789Sdim
1737243789Sdim	movl	(%ebx),%eax
1738243789Sdim	mull	%ebp
1739243789Sdim	addl	%esi,%eax
1740243789Sdim	adcl	$0,%edx
1741243789Sdim	addl	(%edi),%eax
1742243789Sdim	adcl	$0,%edx
1743243789Sdim	decl	%ecx
1744243789Sdim	movl	%eax,(%edi)
1745243789Sdim	movl	%edx,%esi
1746243789Sdim	jz	.L008maw_end
1747243789Sdim
1748243789Sdim	movl	4(%ebx),%eax
1749243789Sdim	mull	%ebp
1750243789Sdim	addl	%esi,%eax
1751243789Sdim	adcl	$0,%edx
1752243789Sdim	addl	4(%edi),%eax
1753243789Sdim	adcl	$0,%edx
1754243789Sdim	decl	%ecx
1755243789Sdim	movl	%eax,4(%edi)
1756243789Sdim	movl	%edx,%esi
1757243789Sdim	jz	.L008maw_end
1758243789Sdim
1759243789Sdim	movl	8(%ebx),%eax
1760243789Sdim	mull	%ebp
1761243789Sdim	addl	%esi,%eax
1762243789Sdim	adcl	$0,%edx
1763243789Sdim	addl	8(%edi),%eax
1764243789Sdim	adcl	$0,%edx
1765243789Sdim	decl	%ecx
1766243789Sdim	movl	%eax,8(%edi)
1767243789Sdim	movl	%edx,%esi
1768243789Sdim	jz	.L008maw_end
1769243789Sdim
1770243789Sdim	movl	12(%ebx),%eax
1771243789Sdim	mull	%ebp
1772243789Sdim	addl	%esi,%eax
1773243789Sdim	adcl	$0,%edx
1774243789Sdim	addl	12(%edi),%eax
1775243789Sdim	adcl	$0,%edx
1776243789Sdim	decl	%ecx
1777243789Sdim	movl	%eax,12(%edi)
1778243789Sdim	movl	%edx,%esi
1779243789Sdim	jz	.L008maw_end
1780243789Sdim
1781243789Sdim	movl	16(%ebx),%eax
1782243789Sdim	mull	%ebp
1783243789Sdim	addl	%esi,%eax
1784243789Sdim	adcl	$0,%edx
1785243789Sdim	addl	16(%edi),%eax
1786243789Sdim	adcl	$0,%edx
1787243789Sdim	decl	%ecx
1788243789Sdim	movl	%eax,16(%edi)
1789243789Sdim	movl	%edx,%esi
1790243789Sdim	jz	.L008maw_end
1791243789Sdim
1792243789Sdim	movl	20(%ebx),%eax
1793243789Sdim	mull	%ebp
1794243789Sdim	addl	%esi,%eax
1795243789Sdim	adcl	$0,%edx
1796243789Sdim	addl	20(%edi),%eax
1797243789Sdim	adcl	$0,%edx
1798243789Sdim	decl	%ecx
1799243789Sdim	movl	%eax,20(%edi)
1800243789Sdim	movl	%edx,%esi
1801243789Sdim	jz	.L008maw_end
1802243789Sdim
1803243789Sdim	movl	24(%ebx),%eax
1804243789Sdim	mull	%ebp
1805243789Sdim	addl	%esi,%eax
1806243789Sdim	adcl	$0,%edx
1807243789Sdim	addl	24(%edi),%eax
1808243789Sdim	adcl	$0,%edx
1809243789Sdim	movl	%eax,24(%edi)
1810243789Sdim	movl	%edx,%esi
1811243789Sdim.L008maw_end:
1812243789Sdim	movl	%esi,%eax
1813243789Sdim	popl	%ecx
1814243789Sdim	popl	%edi
1815243789Sdim	popl	%esi
1816243789Sdim	popl	%ebx
1817243789Sdim	popl	%ebp
1818243789Sdim	ret
1819243789Sdim.size	bn_mul_add_words,.-.L_bn_mul_add_words_begin
1820243789Sdim.globl	bn_mul_words
1821243789Sdim.type	bn_mul_words,@function
1822243789Sdim.align	16
1823243789Sdimbn_mul_words:
1824243789Sdim.L_bn_mul_words_begin:
1825243789Sdim	leal	OPENSSL_ia32cap_P,%eax
1826243789Sdim	btl	$26,(%eax)
1827243789Sdim	jnc	.L009mw_non_sse2
1828243789Sdim	movl	4(%esp),%eax
1829243789Sdim	movl	8(%esp),%edx
1830243789Sdim	movl	12(%esp),%ecx
1831243789Sdim	movd	16(%esp),%mm0
1832243789Sdim	pxor	%mm1,%mm1
1833243789Sdim.align	16
1834243789Sdim.L010mw_sse2_loop:
1835243789Sdim	movd	(%edx),%mm2
1836243789Sdim	pmuludq	%mm0,%mm2
1837243789Sdim	leal	4(%edx),%edx
1838243789Sdim	paddq	%mm2,%mm1
1839243789Sdim	movd	%mm1,(%eax)
1840243789Sdim	subl	$1,%ecx
1841243789Sdim	psrlq	$32,%mm1
1842243789Sdim	leal	4(%eax),%eax
1843243789Sdim	jnz	.L010mw_sse2_loop
1844243789Sdim	movd	%mm1,%eax
1845243789Sdim	emms
1846243789Sdim	ret
1847243789Sdim.align	16
1848243789Sdim.L009mw_non_sse2:
1849243789Sdim	pushl	%ebp
1850243789Sdim	pushl	%ebx
1851243789Sdim	pushl	%esi
1852243789Sdim	pushl	%edi
1853243789Sdim
1854243789Sdim	xorl	%esi,%esi
1855243789Sdim	movl	20(%esp),%edi
1856243789Sdim	movl	24(%esp),%ebx
1857243789Sdim	movl	28(%esp),%ebp
1858243789Sdim	movl	32(%esp),%ecx
1859243789Sdim	andl	$4294967288,%ebp
1860243789Sdim	jz	.L011mw_finish
1861243789Sdim.L012mw_loop:
1862243789Sdim
1863243789Sdim	movl	(%ebx),%eax
1864243789Sdim	mull	%ecx
1865243789Sdim	addl	%esi,%eax
1866243789Sdim	adcl	$0,%edx
1867243789Sdim	movl	%eax,(%edi)
1868243789Sdim	movl	%edx,%esi
1869243789Sdim
1870243789Sdim	movl	4(%ebx),%eax
1871243789Sdim	mull	%ecx
1872243789Sdim	addl	%esi,%eax
1873243789Sdim	adcl	$0,%edx
1874243789Sdim	movl	%eax,4(%edi)
1875243789Sdim	movl	%edx,%esi
1876243789Sdim
1877243789Sdim	movl	8(%ebx),%eax
1878243789Sdim	mull	%ecx
1879243789Sdim	addl	%esi,%eax
1880243789Sdim	adcl	$0,%edx
1881243789Sdim	movl	%eax,8(%edi)
1882243789Sdim	movl	%edx,%esi
1883243789Sdim
1884243789Sdim	movl	12(%ebx),%eax
1885243789Sdim	mull	%ecx
1886243789Sdim	addl	%esi,%eax
1887243789Sdim	adcl	$0,%edx
1888243789Sdim	movl	%eax,12(%edi)
1889243789Sdim	movl	%edx,%esi
1890243789Sdim
1891243789Sdim	movl	16(%ebx),%eax
1892243789Sdim	mull	%ecx
1893243789Sdim	addl	%esi,%eax
1894243789Sdim	adcl	$0,%edx
1895243789Sdim	movl	%eax,16(%edi)
1896243789Sdim	movl	%edx,%esi
1897243789Sdim
1898243789Sdim	movl	20(%ebx),%eax
1899243789Sdim	mull	%ecx
1900243789Sdim	addl	%esi,%eax
1901243789Sdim	adcl	$0,%edx
1902243789Sdim	movl	%eax,20(%edi)
1903243789Sdim	movl	%edx,%esi
1904243789Sdim
1905243789Sdim	movl	24(%ebx),%eax
1906243789Sdim	mull	%ecx
1907243789Sdim	addl	%esi,%eax
1908243789Sdim	adcl	$0,%edx
1909243789Sdim	movl	%eax,24(%edi)
1910243789Sdim	movl	%edx,%esi
1911243789Sdim
1912243789Sdim	movl	28(%ebx),%eax
1913243789Sdim	mull	%ecx
1914243789Sdim	addl	%esi,%eax
1915243789Sdim	adcl	$0,%edx
1916243789Sdim	movl	%eax,28(%edi)
1917243789Sdim	movl	%edx,%esi
1918243789Sdim
1919243789Sdim	addl	$32,%ebx
1920243789Sdim	addl	$32,%edi
1921243789Sdim	subl	$8,%ebp
1922243789Sdim	jz	.L011mw_finish
1923243789Sdim	jmp	.L012mw_loop
1924243789Sdim.L011mw_finish:
1925243789Sdim	movl	28(%esp),%ebp
1926243789Sdim	andl	$7,%ebp
1927243789Sdim	jnz	.L013mw_finish2
1928243789Sdim	jmp	.L014mw_end
1929243789Sdim.L013mw_finish2:
1930243789Sdim
1931243789Sdim	movl	(%ebx),%eax
1932243789Sdim	mull	%ecx
1933243789Sdim	addl	%esi,%eax
1934243789Sdim	adcl	$0,%edx
1935243789Sdim	movl	%eax,(%edi)
1936243789Sdim	movl	%edx,%esi
1937243789Sdim	decl	%ebp
1938243789Sdim	jz	.L014mw_end
1939243789Sdim
1940243789Sdim	movl	4(%ebx),%eax
1941243789Sdim	mull	%ecx
1942243789Sdim	addl	%esi,%eax
1943243789Sdim	adcl	$0,%edx
1944243789Sdim	movl	%eax,4(%edi)
1945243789Sdim	movl	%edx,%esi
1946243789Sdim	decl	%ebp
1947243789Sdim	jz	.L014mw_end
1948243789Sdim
1949243789Sdim	movl	8(%ebx),%eax
1950243789Sdim	mull	%ecx
1951243789Sdim	addl	%esi,%eax
1952243789Sdim	adcl	$0,%edx
1953243789Sdim	movl	%eax,8(%edi)
1954243789Sdim	movl	%edx,%esi
1955243789Sdim	decl	%ebp
1956243789Sdim	jz	.L014mw_end
1957243789Sdim
1958243789Sdim	movl	12(%ebx),%eax
1959243789Sdim	mull	%ecx
1960243789Sdim	addl	%esi,%eax
1961243789Sdim	adcl	$0,%edx
1962243789Sdim	movl	%eax,12(%edi)
1963243789Sdim	movl	%edx,%esi
1964243789Sdim	decl	%ebp
1965243789Sdim	jz	.L014mw_end
1966243789Sdim
1967243789Sdim	movl	16(%ebx),%eax
1968243789Sdim	mull	%ecx
1969243789Sdim	addl	%esi,%eax
1970243789Sdim	adcl	$0,%edx
1971243789Sdim	movl	%eax,16(%edi)
1972243789Sdim	movl	%edx,%esi
1973243789Sdim	decl	%ebp
1974243789Sdim	jz	.L014mw_end
1975243789Sdim
1976243789Sdim	movl	20(%ebx),%eax
1977243789Sdim	mull	%ecx
1978243789Sdim	addl	%esi,%eax
1979243789Sdim	adcl	$0,%edx
1980243789Sdim	movl	%eax,20(%edi)
1981243789Sdim	movl	%edx,%esi
1982243789Sdim	decl	%ebp
1983243789Sdim	jz	.L014mw_end
1984243789Sdim
1985243789Sdim	movl	24(%ebx),%eax
1986243789Sdim	mull	%ecx
1987243789Sdim	addl	%esi,%eax
1988243789Sdim	adcl	$0,%edx
1989243789Sdim	movl	%eax,24(%edi)
1990243789Sdim	movl	%edx,%esi
1991243789Sdim.L014mw_end:
1992243789Sdim	movl	%esi,%eax
1993243789Sdim	popl	%edi
1994243789Sdim	popl	%esi
1995243789Sdim	popl	%ebx
1996243789Sdim	popl	%ebp
1997243789Sdim	ret
1998243789Sdim.size	bn_mul_words,.-.L_bn_mul_words_begin
1999243789Sdim.globl	bn_sqr_words
2000243789Sdim.type	bn_sqr_words,@function
2001243789Sdim.align	16
2002243789Sdimbn_sqr_words:
2003243789Sdim.L_bn_sqr_words_begin:
2004243789Sdim	leal	OPENSSL_ia32cap_P,%eax
2005243789Sdim	btl	$26,(%eax)
2006243789Sdim	jnc	.L015sqr_non_sse2
2007243789Sdim	movl	4(%esp),%eax
2008243789Sdim	movl	8(%esp),%edx
2009243789Sdim	movl	12(%esp),%ecx
2010243789Sdim.align	16
2011243789Sdim.L016sqr_sse2_loop:
2012243789Sdim	movd	(%edx),%mm0
2013243789Sdim	pmuludq	%mm0,%mm0
2014243789Sdim	leal	4(%edx),%edx
2015243789Sdim	movq	%mm0,(%eax)
2016243789Sdim	subl	$1,%ecx
2017243789Sdim	leal	8(%eax),%eax
2018243789Sdim	jnz	.L016sqr_sse2_loop
2019243789Sdim	emms
2020243789Sdim	ret
2021243789Sdim.align	16
2022243789Sdim.L015sqr_non_sse2:
2023243789Sdim	pushl	%ebp
2024243789Sdim	pushl	%ebx
2025243789Sdim	pushl	%esi
2026243789Sdim	pushl	%edi
2027243789Sdim
2028243789Sdim	movl	20(%esp),%esi
2029243789Sdim	movl	24(%esp),%edi
2030243789Sdim	movl	28(%esp),%ebx
2031243789Sdim	andl	$4294967288,%ebx
2032243789Sdim	jz	.L017sw_finish
2033243789Sdim.L018sw_loop:
2034243789Sdim
2035243789Sdim	movl	(%edi),%eax
2036243789Sdim	mull	%eax
2037243789Sdim	movl	%eax,(%esi)
2038243789Sdim	movl	%edx,4(%esi)
2039243789Sdim
2040243789Sdim	movl	4(%edi),%eax
2041243789Sdim	mull	%eax
2042243789Sdim	movl	%eax,8(%esi)
2043243789Sdim	movl	%edx,12(%esi)
2044243789Sdim
2045243789Sdim	movl	8(%edi),%eax
2046243789Sdim	mull	%eax
2047243789Sdim	movl	%eax,16(%esi)
2048243789Sdim	movl	%edx,20(%esi)
2049243789Sdim
2050243789Sdim	movl	12(%edi),%eax
2051243789Sdim	mull	%eax
2052243789Sdim	movl	%eax,24(%esi)
2053243789Sdim	movl	%edx,28(%esi)
2054243789Sdim
2055243789Sdim	movl	16(%edi),%eax
2056243789Sdim	mull	%eax
2057243789Sdim	movl	%eax,32(%esi)
2058243789Sdim	movl	%edx,36(%esi)
2059243789Sdim
2060243789Sdim	movl	20(%edi),%eax
2061243789Sdim	mull	%eax
2062243789Sdim	movl	%eax,40(%esi)
2063243789Sdim	movl	%edx,44(%esi)
2064243789Sdim
2065243789Sdim	movl	24(%edi),%eax
2066243789Sdim	mull	%eax
2067243789Sdim	movl	%eax,48(%esi)
2068243789Sdim	movl	%edx,52(%esi)
2069243789Sdim
2070243789Sdim	movl	28(%edi),%eax
2071243789Sdim	mull	%eax
2072243789Sdim	movl	%eax,56(%esi)
2073243789Sdim	movl	%edx,60(%esi)
2074243789Sdim
2075243789Sdim	addl	$32,%edi
2076243789Sdim	addl	$64,%esi
2077243789Sdim	subl	$8,%ebx
2078243789Sdim	jnz	.L018sw_loop
2079243789Sdim.L017sw_finish:
2080243789Sdim	movl	28(%esp),%ebx
2081243789Sdim	andl	$7,%ebx
2082243789Sdim	jz	.L019sw_end
2083243789Sdim
2084243789Sdim	movl	(%edi),%eax
2085243789Sdim	mull	%eax
2086243789Sdim	movl	%eax,(%esi)
2087243789Sdim	decl	%ebx
2088243789Sdim	movl	%edx,4(%esi)
2089243789Sdim	jz	.L019sw_end
2090243789Sdim
2091243789Sdim	movl	4(%edi),%eax
2092243789Sdim	mull	%eax
2093243789Sdim	movl	%eax,8(%esi)
2094243789Sdim	decl	%ebx
2095243789Sdim	movl	%edx,12(%esi)
2096243789Sdim	jz	.L019sw_end
2097243789Sdim
2098243789Sdim	movl	8(%edi),%eax
2099243789Sdim	mull	%eax
2100243789Sdim	movl	%eax,16(%esi)
2101243789Sdim	decl	%ebx
2102243789Sdim	movl	%edx,20(%esi)
2103243789Sdim	jz	.L019sw_end
2104243789Sdim
2105243789Sdim	movl	12(%edi),%eax
2106243789Sdim	mull	%eax
2107243789Sdim	movl	%eax,24(%esi)
2108243789Sdim	decl	%ebx
2109243789Sdim	movl	%edx,28(%esi)
2110243789Sdim	jz	.L019sw_end
2111243789Sdim
2112243789Sdim	movl	16(%edi),%eax
2113243789Sdim	mull	%eax
2114243789Sdim	movl	%eax,32(%esi)
2115243789Sdim	decl	%ebx
2116243789Sdim	movl	%edx,36(%esi)
2117243789Sdim	jz	.L019sw_end
2118243789Sdim
2119243789Sdim	movl	20(%edi),%eax
2120243789Sdim	mull	%eax
2121243789Sdim	movl	%eax,40(%esi)
2122243789Sdim	decl	%ebx
2123243789Sdim	movl	%edx,44(%esi)
2124243789Sdim	jz	.L019sw_end
2125243789Sdim
2126243789Sdim	movl	24(%edi),%eax
2127243789Sdim	mull	%eax
2128243789Sdim	movl	%eax,48(%esi)
2129243789Sdim	movl	%edx,52(%esi)
2130243789Sdim.L019sw_end:
2131243789Sdim	popl	%edi
2132243789Sdim	popl	%esi
2133243789Sdim	popl	%ebx
2134243789Sdim	popl	%ebp
2135243789Sdim	ret
2136243789Sdim.size	bn_sqr_words,.-.L_bn_sqr_words_begin
2137243789Sdim.globl	bn_div_words
2138243789Sdim.type	bn_div_words,@function
2139243789Sdim.align	16
2140243789Sdimbn_div_words:
2141243789Sdim.L_bn_div_words_begin:
2142243789Sdim	movl	4(%esp),%edx
2143243789Sdim	movl	8(%esp),%eax
2144243789Sdim	movl	12(%esp),%ecx
2145243789Sdim	divl	%ecx
2146243789Sdim	ret
2147243789Sdim.size	bn_div_words,.-.L_bn_div_words_begin
2148243789Sdim.globl	bn_add_words
2149243789Sdim.type	bn_add_words,@function
2150243789Sdim.align	16
2151243789Sdimbn_add_words:
2152243789Sdim.L_bn_add_words_begin:
2153243789Sdim	pushl	%ebp
2154243789Sdim	pushl	%ebx
2155243789Sdim	pushl	%esi
2156243789Sdim	pushl	%edi
2157243789Sdim
2158243789Sdim	movl	20(%esp),%ebx
2159243789Sdim	movl	24(%esp),%esi
2160243789Sdim	movl	28(%esp),%edi
2161243789Sdim	movl	32(%esp),%ebp
2162243789Sdim	xorl	%eax,%eax
2163243789Sdim	andl	$4294967288,%ebp
2164243789Sdim	jz	.L020aw_finish
2165243789Sdim.L021aw_loop:
2166243789Sdim
2167243789Sdim	movl	(%esi),%ecx
2168243789Sdim	movl	(%edi),%edx
2169243789Sdim	addl	%eax,%ecx
2170243789Sdim	movl	$0,%eax
2171243789Sdim	adcl	%eax,%eax
2172243789Sdim	addl	%edx,%ecx
2173243789Sdim	adcl	$0,%eax
2174243789Sdim	movl	%ecx,(%ebx)
2175243789Sdim
2176243789Sdim	movl	4(%esi),%ecx
2177243789Sdim	movl	4(%edi),%edx
2178243789Sdim	addl	%eax,%ecx
2179243789Sdim	movl	$0,%eax
2180243789Sdim	adcl	%eax,%eax
2181243789Sdim	addl	%edx,%ecx
2182243789Sdim	adcl	$0,%eax
2183243789Sdim	movl	%ecx,4(%ebx)
2184243789Sdim
2185243789Sdim	movl	8(%esi),%ecx
2186243789Sdim	movl	8(%edi),%edx
2187243789Sdim	addl	%eax,%ecx
2188243789Sdim	movl	$0,%eax
2189243789Sdim	adcl	%eax,%eax
2190243789Sdim	addl	%edx,%ecx
2191243789Sdim	adcl	$0,%eax
2192243789Sdim	movl	%ecx,8(%ebx)
2193243789Sdim
2194243789Sdim	movl	12(%esi),%ecx
2195243789Sdim	movl	12(%edi),%edx
2196243789Sdim	addl	%eax,%ecx
2197243789Sdim	movl	$0,%eax
2198243789Sdim	adcl	%eax,%eax
2199243789Sdim	addl	%edx,%ecx
2200243789Sdim	adcl	$0,%eax
2201243789Sdim	movl	%ecx,12(%ebx)
2202243789Sdim
2203243789Sdim	movl	16(%esi),%ecx
2204243789Sdim	movl	16(%edi),%edx
2205243789Sdim	addl	%eax,%ecx
2206243789Sdim	movl	$0,%eax
2207243789Sdim	adcl	%eax,%eax
2208243789Sdim	addl	%edx,%ecx
2209243789Sdim	adcl	$0,%eax
2210243789Sdim	movl	%ecx,16(%ebx)
2211243789Sdim
2212243789Sdim	movl	20(%esi),%ecx
2213243789Sdim	movl	20(%edi),%edx
2214243789Sdim	addl	%eax,%ecx
2215243789Sdim	movl	$0,%eax
2216243789Sdim	adcl	%eax,%eax
2217243789Sdim	addl	%edx,%ecx
2218249423Sdim	adcl	$0,%eax
2219243789Sdim	movl	%ecx,20(%ebx)
2220243789Sdim
2221243789Sdim	movl	24(%esi),%ecx
2222243789Sdim	movl	24(%edi),%edx
2223243789Sdim	addl	%eax,%ecx
2224249423Sdim	movl	$0,%eax
2225243789Sdim	adcl	%eax,%eax
2226243789Sdim	addl	%edx,%ecx
2227243789Sdim	adcl	$0,%eax
2228243789Sdim	movl	%ecx,24(%ebx)
2229243789Sdim
2230243789Sdim	movl	28(%esi),%ecx
2231243789Sdim	movl	28(%edi),%edx
2232243789Sdim	addl	%eax,%ecx
2233243789Sdim	movl	$0,%eax
2234243789Sdim	adcl	%eax,%eax
2235243789Sdim	addl	%edx,%ecx
2236243789Sdim	adcl	$0,%eax
2237243789Sdim	movl	%ecx,28(%ebx)
2238243789Sdim
2239243789Sdim	addl	$32,%esi
2240243789Sdim	addl	$32,%edi
2241243789Sdim	addl	$32,%ebx
2242243789Sdim	subl	$8,%ebp
2243243789Sdim	jnz	.L021aw_loop
2244243789Sdim.L020aw_finish:
2245243789Sdim	movl	32(%esp),%ebp
2246243789Sdim	andl	$7,%ebp
2247243789Sdim	jz	.L022aw_end
2248243789Sdim
2249243789Sdim	movl	(%esi),%ecx
2250243789Sdim	movl	(%edi),%edx
2251243789Sdim	addl	%eax,%ecx
2252243789Sdim	movl	$0,%eax
2253243789Sdim	adcl	%eax,%eax
2254243789Sdim	addl	%edx,%ecx
2255243789Sdim	adcl	$0,%eax
2256243789Sdim	decl	%ebp
2257243789Sdim	movl	%ecx,(%ebx)
2258243789Sdim	jz	.L022aw_end
2259243789Sdim
2260243789Sdim	movl	4(%esi),%ecx
2261243789Sdim	movl	4(%edi),%edx
2262243789Sdim	addl	%eax,%ecx
2263243789Sdim	movl	$0,%eax
2264243789Sdim	adcl	%eax,%eax
2265243789Sdim	addl	%edx,%ecx
2266243789Sdim	adcl	$0,%eax
2267243789Sdim	decl	%ebp
2268243789Sdim	movl	%ecx,4(%ebx)
2269243789Sdim	jz	.L022aw_end
2270243789Sdim
2271243789Sdim	movl	8(%esi),%ecx
2272243789Sdim	movl	8(%edi),%edx
2273243789Sdim	addl	%eax,%ecx
2274243789Sdim	movl	$0,%eax
2275243789Sdim	adcl	%eax,%eax
2276243789Sdim	addl	%edx,%ecx
2277243789Sdim	adcl	$0,%eax
2278243789Sdim	decl	%ebp
2279243789Sdim	movl	%ecx,8(%ebx)
2280243789Sdim	jz	.L022aw_end
2281243789Sdim
2282243789Sdim	movl	12(%esi),%ecx
2283243789Sdim	movl	12(%edi),%edx
2284243789Sdim	addl	%eax,%ecx
2285243789Sdim	movl	$0,%eax
2286243789Sdim	adcl	%eax,%eax
2287243789Sdim	addl	%edx,%ecx
2288243789Sdim	adcl	$0,%eax
2289243789Sdim	decl	%ebp
2290243789Sdim	movl	%ecx,12(%ebx)
2291243789Sdim	jz	.L022aw_end
2292243789Sdim
2293243789Sdim	movl	16(%esi),%ecx
2294243789Sdim	movl	16(%edi),%edx
2295243789Sdim	addl	%eax,%ecx
2296243789Sdim	movl	$0,%eax
2297243789Sdim	adcl	%eax,%eax
2298243789Sdim	addl	%edx,%ecx
2299243789Sdim	adcl	$0,%eax
2300243789Sdim	decl	%ebp
2301243789Sdim	movl	%ecx,16(%ebx)
2302243789Sdim	jz	.L022aw_end
2303243789Sdim
2304243789Sdim	movl	20(%esi),%ecx
2305243789Sdim	movl	20(%edi),%edx
2306243789Sdim	addl	%eax,%ecx
2307243789Sdim	movl	$0,%eax
2308243789Sdim	adcl	%eax,%eax
2309243789Sdim	addl	%edx,%ecx
2310243789Sdim	adcl	$0,%eax
2311243789Sdim	decl	%ebp
2312243789Sdim	movl	%ecx,20(%ebx)
2313243789Sdim	jz	.L022aw_end
2314243789Sdim
2315243789Sdim	movl	24(%esi),%ecx
2316243789Sdim	movl	24(%edi),%edx
2317243789Sdim	addl	%eax,%ecx
2318243789Sdim	movl	$0,%eax
2319243789Sdim	adcl	%eax,%eax
2320243789Sdim	addl	%edx,%ecx
2321243789Sdim	adcl	$0,%eax
2322243789Sdim	movl	%ecx,24(%ebx)
2323243789Sdim.L022aw_end:
2324243789Sdim	popl	%edi
2325243789Sdim	popl	%esi
2326243789Sdim	popl	%ebx
2327243789Sdim	popl	%ebp
2328243789Sdim	ret
2329243789Sdim.size	bn_add_words,.-.L_bn_add_words_begin
2330243789Sdim.globl	bn_sub_words
2331243789Sdim.type	bn_sub_words,@function
2332243789Sdim.align	16
2333243789Sdimbn_sub_words:
2334243789Sdim.L_bn_sub_words_begin:
2335243789Sdim	pushl	%ebp
2336243789Sdim	pushl	%ebx
2337243789Sdim	pushl	%esi
2338243789Sdim	pushl	%edi
2339243789Sdim
2340243789Sdim	movl	20(%esp),%ebx
2341243789Sdim	movl	24(%esp),%esi
2342243789Sdim	movl	28(%esp),%edi
2343243789Sdim	movl	32(%esp),%ebp
2344243789Sdim	xorl	%eax,%eax
2345243789Sdim	andl	$4294967288,%ebp
2346243789Sdim	jz	.L023aw_finish
2347243789Sdim.L024aw_loop:
2348243789Sdim
2349243789Sdim	movl	(%esi),%ecx
2350243789Sdim	movl	(%edi),%edx
2351243789Sdim	subl	%eax,%ecx
2352243789Sdim	movl	$0,%eax
2353243789Sdim	adcl	%eax,%eax
2354243789Sdim	subl	%edx,%ecx
2355243789Sdim	adcl	$0,%eax
2356243789Sdim	movl	%ecx,(%ebx)
2357243789Sdim
2358243789Sdim	movl	4(%esi),%ecx
2359243789Sdim	movl	4(%edi),%edx
2360243789Sdim	subl	%eax,%ecx
2361243789Sdim	movl	$0,%eax
2362243789Sdim	adcl	%eax,%eax
2363243789Sdim	subl	%edx,%ecx
2364243789Sdim	adcl	$0,%eax
2365243789Sdim	movl	%ecx,4(%ebx)
2366243789Sdim
2367243789Sdim	movl	8(%esi),%ecx
2368243789Sdim	movl	8(%edi),%edx
2369243789Sdim	subl	%eax,%ecx
2370243789Sdim	movl	$0,%eax
2371243789Sdim	adcl	%eax,%eax
2372243789Sdim	subl	%edx,%ecx
2373243789Sdim	adcl	$0,%eax
2374243789Sdim	movl	%ecx,8(%ebx)
2375243789Sdim
2376243789Sdim	movl	12(%esi),%ecx
2377243789Sdim	movl	12(%edi),%edx
2378243789Sdim	subl	%eax,%ecx
2379243789Sdim	movl	$0,%eax
2380243789Sdim	adcl	%eax,%eax
2381243789Sdim	subl	%edx,%ecx
2382243789Sdim	adcl	$0,%eax
2383243789Sdim	movl	%ecx,12(%ebx)
2384243789Sdim
2385243789Sdim	movl	16(%esi),%ecx
2386243789Sdim	movl	16(%edi),%edx
2387243789Sdim	subl	%eax,%ecx
2388243789Sdim	movl	$0,%eax
2389243789Sdim	adcl	%eax,%eax
2390243789Sdim	subl	%edx,%ecx
2391243789Sdim	adcl	$0,%eax
2392243789Sdim	movl	%ecx,16(%ebx)
2393243789Sdim
2394243789Sdim	movl	20(%esi),%ecx
2395243789Sdim	movl	20(%edi),%edx
2396243789Sdim	subl	%eax,%ecx
2397243789Sdim	movl	$0,%eax
2398243789Sdim	adcl	%eax,%eax
2399243789Sdim	subl	%edx,%ecx
2400243789Sdim	adcl	$0,%eax
2401243789Sdim	movl	%ecx,20(%ebx)
2402243789Sdim
2403243789Sdim	movl	24(%esi),%ecx
2404243789Sdim	movl	24(%edi),%edx
2405243789Sdim	subl	%eax,%ecx
2406243789Sdim	movl	$0,%eax
2407243789Sdim	adcl	%eax,%eax
2408243789Sdim	subl	%edx,%ecx
2409243789Sdim	adcl	$0,%eax
2410243789Sdim	movl	%ecx,24(%ebx)
2411243789Sdim
2412243789Sdim	movl	28(%esi),%ecx
2413243789Sdim	movl	28(%edi),%edx
2414243789Sdim	subl	%eax,%ecx
2415243789Sdim	movl	$0,%eax
2416243789Sdim	adcl	%eax,%eax
2417243789Sdim	subl	%edx,%ecx
2418243789Sdim	adcl	$0,%eax
2419243789Sdim	movl	%ecx,28(%ebx)
2420243789Sdim
2421243789Sdim	addl	$32,%esi
2422243789Sdim	addl	$32,%edi
2423243789Sdim	addl	$32,%ebx
2424243789Sdim	subl	$8,%ebp
2425243789Sdim	jnz	.L024aw_loop
2426243789Sdim.L023aw_finish:
2427243789Sdim	movl	32(%esp),%ebp
2428243789Sdim	andl	$7,%ebp
2429243789Sdim	jz	.L025aw_end
2430243789Sdim
2431243789Sdim	movl	(%esi),%ecx
2432243789Sdim	movl	(%edi),%edx
2433243789Sdim	subl	%eax,%ecx
2434243789Sdim	movl	$0,%eax
2435243789Sdim	adcl	%eax,%eax
2436243789Sdim	subl	%edx,%ecx
2437243789Sdim	adcl	$0,%eax
2438243789Sdim	decl	%ebp
2439243789Sdim	movl	%ecx,(%ebx)
2440243789Sdim	jz	.L025aw_end
2441243789Sdim
2442243789Sdim	movl	4(%esi),%ecx
2443243789Sdim	movl	4(%edi),%edx
2444243789Sdim	subl	%eax,%ecx
2445243789Sdim	movl	$0,%eax
2446243789Sdim	adcl	%eax,%eax
2447243789Sdim	subl	%edx,%ecx
2448243789Sdim	adcl	$0,%eax
2449243789Sdim	decl	%ebp
2450243789Sdim	movl	%ecx,4(%ebx)
2451243789Sdim	jz	.L025aw_end
2452243789Sdim
2453243789Sdim	movl	8(%esi),%ecx
2454243789Sdim	movl	8(%edi),%edx
2455243789Sdim	subl	%eax,%ecx
2456243789Sdim	movl	$0,%eax
2457243789Sdim	adcl	%eax,%eax
2458243789Sdim	subl	%edx,%ecx
2459243789Sdim	adcl	$0,%eax
2460243789Sdim	decl	%ebp
2461243789Sdim	movl	%ecx,8(%ebx)
2462243789Sdim	jz	.L025aw_end
2463243789Sdim
2464243789Sdim	movl	12(%esi),%ecx
2465243789Sdim	movl	12(%edi),%edx
2466243789Sdim	subl	%eax,%ecx
2467243789Sdim	movl	$0,%eax
2468243789Sdim	adcl	%eax,%eax
2469243789Sdim	subl	%edx,%ecx
2470243789Sdim	adcl	$0,%eax
2471243789Sdim	decl	%ebp
2472243789Sdim	movl	%ecx,12(%ebx)
2473243789Sdim	jz	.L025aw_end
2474243789Sdim
2475243789Sdim	movl	16(%esi),%ecx
2476243789Sdim	movl	16(%edi),%edx
2477243789Sdim	subl	%eax,%ecx
2478243789Sdim	movl	$0,%eax
2479243789Sdim	adcl	%eax,%eax
2480243789Sdim	subl	%edx,%ecx
2481243789Sdim	adcl	$0,%eax
2482243789Sdim	decl	%ebp
2483243789Sdim	movl	%ecx,16(%ebx)
2484243789Sdim	jz	.L025aw_end
2485243789Sdim
2486243789Sdim	movl	20(%esi),%ecx
2487243789Sdim	movl	20(%edi),%edx
2488243789Sdim	subl	%eax,%ecx
2489243789Sdim	movl	$0,%eax
2490243789Sdim	adcl	%eax,%eax
2491243789Sdim	subl	%edx,%ecx
2492243789Sdim	adcl	$0,%eax
2493243789Sdim	decl	%ebp
2494243789Sdim	movl	%ecx,20(%ebx)
2495243789Sdim	jz	.L025aw_end
2496243789Sdim
2497243789Sdim	movl	24(%esi),%ecx
2498243789Sdim	movl	24(%edi),%edx
2499243789Sdim	subl	%eax,%ecx
2500243789Sdim	movl	$0,%eax
2501243789Sdim	adcl	%eax,%eax
2502243789Sdim	subl	%edx,%ecx
2503243789Sdim	adcl	$0,%eax
2504243789Sdim	movl	%ecx,24(%ebx)
2505243789Sdim.L025aw_end:
2506243789Sdim	popl	%edi
2507243789Sdim	popl	%esi
2508243789Sdim	popl	%ebx
2509243789Sdim	popl	%ebp
2510243789Sdim	ret
2511243789Sdim.size	bn_sub_words,.-.L_bn_sub_words_begin
2512243789Sdim.globl	bn_sub_part_words
2513243789Sdim.type	bn_sub_part_words,@function
2514243789Sdim.align	16
2515243789Sdimbn_sub_part_words:
2516243789Sdim.L_bn_sub_part_words_begin:
2517243789Sdim	pushl	%ebp
2518243789Sdim	pushl	%ebx
2519243789Sdim	pushl	%esi
2520243789Sdim	pushl	%edi
2521243789Sdim
2522243789Sdim	movl	20(%esp),%ebx
2523243789Sdim	movl	24(%esp),%esi
2524243789Sdim	movl	28(%esp),%edi
2525243789Sdim	movl	32(%esp),%ebp
2526243789Sdim	xorl	%eax,%eax
2527243789Sdim	andl	$4294967288,%ebp
2528243789Sdim	jz	.L026aw_finish
2529243789Sdim.L027aw_loop:
2530243789Sdim
2531243789Sdim	movl	(%esi),%ecx
2532243789Sdim	movl	(%edi),%edx
2533243789Sdim	subl	%eax,%ecx
2534243789Sdim	movl	$0,%eax
2535243789Sdim	adcl	%eax,%eax
2536243789Sdim	subl	%edx,%ecx
2537243789Sdim	adcl	$0,%eax
2538243789Sdim	movl	%ecx,(%ebx)
2539243789Sdim
2540243789Sdim	movl	4(%esi),%ecx
2541243789Sdim	movl	4(%edi),%edx
2542243789Sdim	subl	%eax,%ecx
2543243789Sdim	movl	$0,%eax
2544243789Sdim	adcl	%eax,%eax
2545243789Sdim	subl	%edx,%ecx
2546243789Sdim	adcl	$0,%eax
2547243789Sdim	movl	%ecx,4(%ebx)
2548243789Sdim
2549243789Sdim	movl	8(%esi),%ecx
2550243789Sdim	movl	8(%edi),%edx
2551243789Sdim	subl	%eax,%ecx
2552243789Sdim	movl	$0,%eax
2553243789Sdim	adcl	%eax,%eax
2554243789Sdim	subl	%edx,%ecx
2555243789Sdim	adcl	$0,%eax
2556243789Sdim	movl	%ecx,8(%ebx)
2557243789Sdim
2558243789Sdim	movl	12(%esi),%ecx
2559243789Sdim	movl	12(%edi),%edx
2560243789Sdim	subl	%eax,%ecx
2561243789Sdim	movl	$0,%eax
2562243789Sdim	adcl	%eax,%eax
2563243789Sdim	subl	%edx,%ecx
2564243789Sdim	adcl	$0,%eax
2565243789Sdim	movl	%ecx,12(%ebx)
2566243789Sdim
2567243789Sdim	movl	16(%esi),%ecx
2568243789Sdim	movl	16(%edi),%edx
2569243789Sdim	subl	%eax,%ecx
2570243789Sdim	movl	$0,%eax
2571243789Sdim	adcl	%eax,%eax
2572243789Sdim	subl	%edx,%ecx
2573243789Sdim	adcl	$0,%eax
2574243789Sdim	movl	%ecx,16(%ebx)
2575243789Sdim
2576243789Sdim	movl	20(%esi),%ecx
2577243789Sdim	movl	20(%edi),%edx
2578243789Sdim	subl	%eax,%ecx
2579243789Sdim	movl	$0,%eax
2580243789Sdim	adcl	%eax,%eax
2581243789Sdim	subl	%edx,%ecx
2582243789Sdim	adcl	$0,%eax
2583243789Sdim	movl	%ecx,20(%ebx)
2584243789Sdim
2585243789Sdim	movl	24(%esi),%ecx
2586243789Sdim	movl	24(%edi),%edx
2587243789Sdim	subl	%eax,%ecx
2588243789Sdim	movl	$0,%eax
2589243789Sdim	adcl	%eax,%eax
2590243789Sdim	subl	%edx,%ecx
2591243789Sdim	adcl	$0,%eax
2592243789Sdim	movl	%ecx,24(%ebx)
2593243789Sdim
2594243789Sdim	movl	28(%esi),%ecx
2595243789Sdim	movl	28(%edi),%edx
2596243789Sdim	subl	%eax,%ecx
2597243789Sdim	movl	$0,%eax
2598243789Sdim	adcl	%eax,%eax
2599243789Sdim	subl	%edx,%ecx
2600243789Sdim	adcl	$0,%eax
2601243789Sdim	movl	%ecx,28(%ebx)
2602243789Sdim
2603243789Sdim	addl	$32,%esi
2604243789Sdim	addl	$32,%edi
2605243789Sdim	addl	$32,%ebx
2606243789Sdim	subl	$8,%ebp
2607243789Sdim	jnz	.L027aw_loop
2608243789Sdim.L026aw_finish:
2609243789Sdim	movl	32(%esp),%ebp
2610243789Sdim	andl	$7,%ebp
2611243789Sdim	jz	.L028aw_end
2612243789Sdim
2613243789Sdim	movl	(%esi),%ecx
2614243789Sdim	movl	(%edi),%edx
2615243789Sdim	subl	%eax,%ecx
2616243789Sdim	movl	$0,%eax
2617243789Sdim	adcl	%eax,%eax
2618243789Sdim	subl	%edx,%ecx
2619243789Sdim	adcl	$0,%eax
2620243789Sdim	movl	%ecx,(%ebx)
2621243789Sdim	addl	$4,%esi
2622243789Sdim	addl	$4,%edi
2623243789Sdim	addl	$4,%ebx
2624243789Sdim	decl	%ebp
2625243789Sdim	jz	.L028aw_end
2626243789Sdim
2627243789Sdim	movl	(%esi),%ecx
2628243789Sdim	movl	(%edi),%edx
2629243789Sdim	subl	%eax,%ecx
2630243789Sdim	movl	$0,%eax
2631243789Sdim	adcl	%eax,%eax
2632243789Sdim	subl	%edx,%ecx
2633243789Sdim	adcl	$0,%eax
2634243789Sdim	movl	%ecx,(%ebx)
2635243789Sdim	addl	$4,%esi
2636243789Sdim	addl	$4,%edi
2637243789Sdim	addl	$4,%ebx
2638243789Sdim	decl	%ebp
2639243789Sdim	jz	.L028aw_end
2640243789Sdim
2641243789Sdim	movl	(%esi),%ecx
2642243789Sdim	movl	(%edi),%edx
2643243789Sdim	subl	%eax,%ecx
2644243789Sdim	movl	$0,%eax
2645243789Sdim	adcl	%eax,%eax
2646243789Sdim	subl	%edx,%ecx
2647243789Sdim	adcl	$0,%eax
2648243789Sdim	movl	%ecx,(%ebx)
2649243789Sdim	addl	$4,%esi
2650243789Sdim	addl	$4,%edi
2651243789Sdim	addl	$4,%ebx
2652243789Sdim	decl	%ebp
2653243789Sdim	jz	.L028aw_end
2654243789Sdim
2655243789Sdim	movl	(%esi),%ecx
2656243789Sdim	movl	(%edi),%edx
2657243789Sdim	subl	%eax,%ecx
2658243789Sdim	movl	$0,%eax
2659243789Sdim	adcl	%eax,%eax
2660243789Sdim	subl	%edx,%ecx
2661243789Sdim	adcl	$0,%eax
2662243789Sdim	movl	%ecx,(%ebx)
2663243789Sdim	addl	$4,%esi
2664243789Sdim	addl	$4,%edi
2665243789Sdim	addl	$4,%ebx
2666243789Sdim	decl	%ebp
2667243789Sdim	jz	.L028aw_end
2668243789Sdim
2669243789Sdim	movl	(%esi),%ecx
2670243789Sdim	movl	(%edi),%edx
2671243789Sdim	subl	%eax,%ecx
2672243789Sdim	movl	$0,%eax
2673243789Sdim	adcl	%eax,%eax
2674243789Sdim	subl	%edx,%ecx
2675243789Sdim	adcl	$0,%eax
2676243789Sdim	movl	%ecx,(%ebx)
2677243789Sdim	addl	$4,%esi
2678243789Sdim	addl	$4,%edi
2679243789Sdim	addl	$4,%ebx
2680243789Sdim	decl	%ebp
2681243789Sdim	jz	.L028aw_end
2682243789Sdim
2683243789Sdim	movl	(%esi),%ecx
2684243789Sdim	movl	(%edi),%edx
2685243789Sdim	subl	%eax,%ecx
2686243789Sdim	movl	$0,%eax
2687243789Sdim	adcl	%eax,%eax
2688243789Sdim	subl	%edx,%ecx
2689243789Sdim	adcl	$0,%eax
2690243789Sdim	movl	%ecx,(%ebx)
2691243789Sdim	addl	$4,%esi
2692243789Sdim	addl	$4,%edi
2693243789Sdim	addl	$4,%ebx
2694243789Sdim	decl	%ebp
2695243789Sdim	jz	.L028aw_end
2696243789Sdim
2697243789Sdim	movl	(%esi),%ecx
2698243789Sdim	movl	(%edi),%edx
2699243789Sdim	subl	%eax,%ecx
2700243789Sdim	movl	$0,%eax
2701243789Sdim	adcl	%eax,%eax
2702243789Sdim	subl	%edx,%ecx
2703243789Sdim	adcl	$0,%eax
2704243789Sdim	movl	%ecx,(%ebx)
2705243789Sdim	addl	$4,%esi
2706243789Sdim	addl	$4,%edi
2707243789Sdim	addl	$4,%ebx
2708243789Sdim.L028aw_end:
2709243789Sdim	cmpl	$0,36(%esp)
2710243789Sdim	je	.L029pw_end
2711243789Sdim	movl	36(%esp),%ebp
2712243789Sdim	cmpl	$0,%ebp
2713243789Sdim	je	.L029pw_end
2714243789Sdim	jge	.L030pw_pos
2715243789Sdim
2716243789Sdim	movl	$0,%edx
2717243789Sdim	subl	%ebp,%edx
2718243789Sdim	movl	%edx,%ebp
2719243789Sdim	andl	$4294967288,%ebp
2720243789Sdim	jz	.L031pw_neg_finish
2721243789Sdim.L032pw_neg_loop:
2722243789Sdim
2723243789Sdim	movl	$0,%ecx
2724243789Sdim	movl	(%edi),%edx
2725243789Sdim	subl	%eax,%ecx
2726243789Sdim	movl	$0,%eax
2727243789Sdim	adcl	%eax,%eax
2728243789Sdim	subl	%edx,%ecx
2729243789Sdim	adcl	$0,%eax
2730243789Sdim	movl	%ecx,(%ebx)
2731243789Sdim
2732243789Sdim	movl	$0,%ecx
2733243789Sdim	movl	4(%edi),%edx
2734243789Sdim	subl	%eax,%ecx
2735243789Sdim	movl	$0,%eax
2736243789Sdim	adcl	%eax,%eax
2737243789Sdim	subl	%edx,%ecx
2738243789Sdim	adcl	$0,%eax
2739243789Sdim	movl	%ecx,4(%ebx)
2740243789Sdim
2741243789Sdim	movl	$0,%ecx
2742243789Sdim	movl	8(%edi),%edx
2743243789Sdim	subl	%eax,%ecx
2744243789Sdim	movl	$0,%eax
2745243789Sdim	adcl	%eax,%eax
2746243789Sdim	subl	%edx,%ecx
2747243789Sdim	adcl	$0,%eax
2748243789Sdim	movl	%ecx,8(%ebx)
2749243789Sdim
2750243789Sdim	movl	$0,%ecx
2751243789Sdim	movl	12(%edi),%edx
2752243789Sdim	subl	%eax,%ecx
2753243789Sdim	movl	$0,%eax
2754243789Sdim	adcl	%eax,%eax
2755243789Sdim	subl	%edx,%ecx
2756243789Sdim	adcl	$0,%eax
2757243789Sdim	movl	%ecx,12(%ebx)
2758243789Sdim
2759243789Sdim	movl	$0,%ecx
2760243789Sdim	movl	16(%edi),%edx
2761243789Sdim	subl	%eax,%ecx
2762243789Sdim	movl	$0,%eax
2763243789Sdim	adcl	%eax,%eax
2764243789Sdim	subl	%edx,%ecx
2765243789Sdim	adcl	$0,%eax
2766243789Sdim	movl	%ecx,16(%ebx)
2767243789Sdim
2768243789Sdim	movl	$0,%ecx
2769243789Sdim	movl	20(%edi),%edx
2770243789Sdim	subl	%eax,%ecx
2771243789Sdim	movl	$0,%eax
2772243789Sdim	adcl	%eax,%eax
2773243789Sdim	subl	%edx,%ecx
2774243789Sdim	adcl	$0,%eax
2775243789Sdim	movl	%ecx,20(%ebx)
2776243789Sdim
2777243789Sdim	movl	$0,%ecx
2778243789Sdim	movl	24(%edi),%edx
2779243789Sdim	subl	%eax,%ecx
2780243789Sdim	movl	$0,%eax
2781243789Sdim	adcl	%eax,%eax
2782243789Sdim	subl	%edx,%ecx
2783243789Sdim	adcl	$0,%eax
2784243789Sdim	movl	%ecx,24(%ebx)
2785243789Sdim
2786243789Sdim	movl	$0,%ecx
2787243789Sdim	movl	28(%edi),%edx
2788243789Sdim	subl	%eax,%ecx
2789243789Sdim	movl	$0,%eax
2790243789Sdim	adcl	%eax,%eax
2791243789Sdim	subl	%edx,%ecx
2792243789Sdim	adcl	$0,%eax
2793243789Sdim	movl	%ecx,28(%ebx)
2794243789Sdim
2795243789Sdim	addl	$32,%edi
2796243789Sdim	addl	$32,%ebx
2797243789Sdim	subl	$8,%ebp
2798243789Sdim	jnz	.L032pw_neg_loop
2799243789Sdim.L031pw_neg_finish:
2800243789Sdim	movl	36(%esp),%edx
2801243789Sdim	movl	$0,%ebp
2802243789Sdim	subl	%edx,%ebp
2803243789Sdim	andl	$7,%ebp
2804243789Sdim	jz	.L029pw_end
2805243789Sdim
2806243789Sdim	movl	$0,%ecx
2807243789Sdim	movl	(%edi),%edx
2808243789Sdim	subl	%eax,%ecx
2809243789Sdim	movl	$0,%eax
2810243789Sdim	adcl	%eax,%eax
2811243789Sdim	subl	%edx,%ecx
2812243789Sdim	adcl	$0,%eax
2813243789Sdim	decl	%ebp
2814243789Sdim	movl	%ecx,(%ebx)
2815243789Sdim	jz	.L029pw_end
2816243789Sdim
2817243789Sdim	movl	$0,%ecx
2818243789Sdim	movl	4(%edi),%edx
2819243789Sdim	subl	%eax,%ecx
2820243789Sdim	movl	$0,%eax
2821243789Sdim	adcl	%eax,%eax
2822243789Sdim	subl	%edx,%ecx
2823243789Sdim	adcl	$0,%eax
2824243789Sdim	decl	%ebp
2825243789Sdim	movl	%ecx,4(%ebx)
2826243789Sdim	jz	.L029pw_end
2827243789Sdim
2828243789Sdim	movl	$0,%ecx
2829243789Sdim	movl	8(%edi),%edx
2830243789Sdim	subl	%eax,%ecx
2831243789Sdim	movl	$0,%eax
2832243789Sdim	adcl	%eax,%eax
2833243789Sdim	subl	%edx,%ecx
2834243789Sdim	adcl	$0,%eax
2835243789Sdim	decl	%ebp
2836243789Sdim	movl	%ecx,8(%ebx)
2837243789Sdim	jz	.L029pw_end
2838243789Sdim
2839243789Sdim	movl	$0,%ecx
2840243789Sdim	movl	12(%edi),%edx
2841243789Sdim	subl	%eax,%ecx
2842243789Sdim	movl	$0,%eax
2843243789Sdim	adcl	%eax,%eax
2844243789Sdim	subl	%edx,%ecx
2845243789Sdim	adcl	$0,%eax
2846243789Sdim	decl	%ebp
2847243789Sdim	movl	%ecx,12(%ebx)
2848243789Sdim	jz	.L029pw_end
2849243789Sdim
2850243789Sdim	movl	$0,%ecx
2851243789Sdim	movl	16(%edi),%edx
2852243789Sdim	subl	%eax,%ecx
2853243789Sdim	movl	$0,%eax
2854243789Sdim	adcl	%eax,%eax
2855243789Sdim	subl	%edx,%ecx
2856243789Sdim	adcl	$0,%eax
2857243789Sdim	decl	%ebp
2858243789Sdim	movl	%ecx,16(%ebx)
2859243789Sdim	jz	.L029pw_end
2860243789Sdim
2861243789Sdim	movl	$0,%ecx
2862243789Sdim	movl	20(%edi),%edx
2863243789Sdim	subl	%eax,%ecx
2864243789Sdim	movl	$0,%eax
2865243789Sdim	adcl	%eax,%eax
2866243789Sdim	subl	%edx,%ecx
2867243789Sdim	adcl	$0,%eax
2868243789Sdim	decl	%ebp
2869243789Sdim	movl	%ecx,20(%ebx)
2870243789Sdim	jz	.L029pw_end
2871243789Sdim
2872243789Sdim	movl	$0,%ecx
2873243789Sdim	movl	24(%edi),%edx
2874243789Sdim	subl	%eax,%ecx
2875243789Sdim	movl	$0,%eax
2876243789Sdim	adcl	%eax,%eax
2877243789Sdim	subl	%edx,%ecx
2878243789Sdim	adcl	$0,%eax
2879243789Sdim	movl	%ecx,24(%ebx)
2880243789Sdim	jmp	.L029pw_end
2881243789Sdim.L030pw_pos:
2882243789Sdim	andl	$4294967288,%ebp
2883243789Sdim	jz	.L033pw_pos_finish
2884243789Sdim.L034pw_pos_loop:
2885243789Sdim
2886243789Sdim	movl	(%esi),%ecx
2887243789Sdim	subl	%eax,%ecx
2888243789Sdim	movl	%ecx,(%ebx)
2889243789Sdim	jnc	.L035pw_nc0
2890243789Sdim
2891243789Sdim	movl	4(%esi),%ecx
2892243789Sdim	subl	%eax,%ecx
2893243789Sdim	movl	%ecx,4(%ebx)
2894243789Sdim	jnc	.L036pw_nc1
2895243789Sdim
2896243789Sdim	movl	8(%esi),%ecx
2897243789Sdim	subl	%eax,%ecx
2898243789Sdim	movl	%ecx,8(%ebx)
2899243789Sdim	jnc	.L037pw_nc2
2900243789Sdim
2901243789Sdim	movl	12(%esi),%ecx
2902243789Sdim	subl	%eax,%ecx
2903243789Sdim	movl	%ecx,12(%ebx)
2904243789Sdim	jnc	.L038pw_nc3
2905243789Sdim
2906243789Sdim	movl	16(%esi),%ecx
2907243789Sdim	subl	%eax,%ecx
2908243789Sdim	movl	%ecx,16(%ebx)
2909243789Sdim	jnc	.L039pw_nc4
2910243789Sdim
2911243789Sdim	movl	20(%esi),%ecx
2912243789Sdim	subl	%eax,%ecx
2913243789Sdim	movl	%ecx,20(%ebx)
2914243789Sdim	jnc	.L040pw_nc5
2915243789Sdim
2916243789Sdim	movl	24(%esi),%ecx
2917243789Sdim	subl	%eax,%ecx
2918243789Sdim	movl	%ecx,24(%ebx)
2919243789Sdim	jnc	.L041pw_nc6
2920243789Sdim
2921243789Sdim	movl	28(%esi),%ecx
2922243789Sdim	subl	%eax,%ecx
2923243789Sdim	movl	%ecx,28(%ebx)
2924243789Sdim	jnc	.L042pw_nc7
2925243789Sdim
2926243789Sdim	addl	$32,%esi
2927243789Sdim	addl	$32,%ebx
2928243789Sdim	subl	$8,%ebp
2929243789Sdim	jnz	.L034pw_pos_loop
2930243789Sdim.L033pw_pos_finish:
2931243789Sdim	movl	36(%esp),%ebp
2932243789Sdim	andl	$7,%ebp
2933243789Sdim	jz	.L029pw_end
2934243789Sdim
2935243789Sdim	movl	(%esi),%ecx
2936243789Sdim	subl	%eax,%ecx
2937243789Sdim	movl	%ecx,(%ebx)
2938243789Sdim	jnc	.L043pw_tail_nc0
2939243789Sdim	decl	%ebp
2940243789Sdim	jz	.L029pw_end
2941243789Sdim
2942243789Sdim	movl	4(%esi),%ecx
2943243789Sdim	subl	%eax,%ecx
2944243789Sdim	movl	%ecx,4(%ebx)
2945243789Sdim	jnc	.L044pw_tail_nc1
2946243789Sdim	decl	%ebp
2947243789Sdim	jz	.L029pw_end
2948243789Sdim
2949243789Sdim	movl	8(%esi),%ecx
2950243789Sdim	subl	%eax,%ecx
2951243789Sdim	movl	%ecx,8(%ebx)
2952243789Sdim	jnc	.L045pw_tail_nc2
2953243789Sdim	decl	%ebp
2954243789Sdim	jz	.L029pw_end
2955243789Sdim
2956243789Sdim	movl	12(%esi),%ecx
2957243789Sdim	subl	%eax,%ecx
2958243789Sdim	movl	%ecx,12(%ebx)
2959263508Sdim	jnc	.L046pw_tail_nc3
2960263508Sdim	decl	%ebp
2961263508Sdim	jz	.L029pw_end
2962263508Sdim
2963263508Sdim	movl	16(%esi),%ecx
2964243789Sdim	subl	%eax,%ecx
2965243789Sdim	movl	%ecx,16(%ebx)
2966243789Sdim	jnc	.L047pw_tail_nc4
2967243789Sdim	decl	%ebp
2968243789Sdim	jz	.L029pw_end
2969243789Sdim
2970243789Sdim	movl	20(%esi),%ecx
2971243789Sdim	subl	%eax,%ecx
2972243789Sdim	movl	%ecx,20(%ebx)
2973243789Sdim	jnc	.L048pw_tail_nc5
2974243789Sdim	decl	%ebp
2975243789Sdim	jz	.L029pw_end
2976243789Sdim
2977243789Sdim	movl	24(%esi),%ecx
2978243789Sdim	subl	%eax,%ecx
2979243789Sdim	movl	%ecx,24(%ebx)
2980243789Sdim	jnc	.L049pw_tail_nc6
2981243789Sdim	movl	$1,%eax
2982243789Sdim	jmp	.L029pw_end
2983243789Sdim.L050pw_nc_loop:
2984243789Sdim	movl	(%esi),%ecx
2985263508Sdim	movl	%ecx,(%ebx)
2986243789Sdim.L035pw_nc0:
2987243789Sdim	movl	4(%esi),%ecx
2988243789Sdim	movl	%ecx,4(%ebx)
2989243789Sdim.L036pw_nc1:
2990243789Sdim	movl	8(%esi),%ecx
2991243789Sdim	movl	%ecx,8(%ebx)
2992243789Sdim.L037pw_nc2:
2993243789Sdim	movl	12(%esi),%ecx
2994243789Sdim	movl	%ecx,12(%ebx)
2995243789Sdim.L038pw_nc3:
2996243789Sdim	movl	16(%esi),%ecx
2997243789Sdim	movl	%ecx,16(%ebx)
2998243789Sdim.L039pw_nc4:
2999243789Sdim	movl	20(%esi),%ecx
3000243789Sdim	movl	%ecx,20(%ebx)
3001243789Sdim.L040pw_nc5:
3002243789Sdim	movl	24(%esi),%ecx
3003243789Sdim	movl	%ecx,24(%ebx)
3004243789Sdim.L041pw_nc6:
3005243789Sdim	movl	28(%esi),%ecx
3006243789Sdim	movl	%ecx,28(%ebx)
3007243789Sdim.L042pw_nc7:
3008243789Sdim
3009243789Sdim	addl	$32,%esi
3010243789Sdim	addl	$32,%ebx
3011243789Sdim	subl	$8,%ebp
3012243789Sdim	jnz	.L050pw_nc_loop
3013243789Sdim	movl	36(%esp),%ebp
3014243789Sdim	andl	$7,%ebp
3015243789Sdim	jz	.L051pw_nc_end
3016243789Sdim	movl	(%esi),%ecx
3017243789Sdim	movl	%ecx,(%ebx)
3018243789Sdim.L043pw_tail_nc0:
3019243789Sdim	decl	%ebp
3020243789Sdim	jz	.L051pw_nc_end
3021243789Sdim	movl	4(%esi),%ecx
3022243789Sdim	movl	%ecx,4(%ebx)
3023243789Sdim.L044pw_tail_nc1:
3024243789Sdim	decl	%ebp
3025243789Sdim	jz	.L051pw_nc_end
3026243789Sdim	movl	8(%esi),%ecx
3027243789Sdim	movl	%ecx,8(%ebx)
3028243789Sdim.L045pw_tail_nc2:
3029243789Sdim	decl	%ebp
3030243789Sdim	jz	.L051pw_nc_end
3031243789Sdim	movl	12(%esi),%ecx
3032243789Sdim	movl	%ecx,12(%ebx)
3033243789Sdim.L046pw_tail_nc3:
3034243789Sdim	decl	%ebp
3035243789Sdim	jz	.L051pw_nc_end
3036243789Sdim	movl	16(%esi),%ecx
3037243789Sdim	movl	%ecx,16(%ebx)
3038243789Sdim.L047pw_tail_nc4:
3039243789Sdim	decl	%ebp
3040243789Sdim	jz	.L051pw_nc_end
3041243789Sdim	movl	20(%esi),%ecx
3042243789Sdim	movl	%ecx,20(%ebx)
3043243789Sdim.L048pw_tail_nc5:
3044243789Sdim	decl	%ebp
3045243789Sdim	jz	.L051pw_nc_end
3046243789Sdim	movl	24(%esi),%ecx
3047243789Sdim	movl	%ecx,24(%ebx)
3048243789Sdim.L049pw_tail_nc6:
3049243789Sdim.L051pw_nc_end:
3050243789Sdim	movl	$0,%eax
3051243789Sdim.L029pw_end:
3052243789Sdim	popl	%edi
3053243789Sdim	popl	%esi
3054243789Sdim	popl	%ebx
3055243789Sdim	popl	%ebp
3056243789Sdim	ret
3057243789Sdim.size	bn_sub_part_words,.-.L_bn_sub_part_words_begin
3058243789Sdim.comm	OPENSSL_ia32cap_P,8,4
3059243789Sdim#endif
3060243789Sdim