1.file	"crypto/bn/asm/bn-586.s"
2.text
3.globl	bn_mul_add_words
4.type	bn_mul_add_words,@function
5.align	16
6bn_mul_add_words:
7.L_bn_mul_add_words_begin:
8	call	.L000PIC_me_up
9.L000PIC_me_up:
10	popl	%eax
11	leal	_GLOBAL_OFFSET_TABLE_+[.-.L000PIC_me_up](%eax),%eax
12	movl	OPENSSL_ia32cap_P@GOT(%eax),%eax
13	btl	$26,(%eax)
14	jnc	.L001maw_non_sse2
15	movl	4(%esp),%eax
16	movl	8(%esp),%edx
17	movl	12(%esp),%ecx
18	movd	16(%esp),%mm0
19	pxor	%mm1,%mm1
20	jmp	.L002maw_sse2_entry
21.align	16
22.L003maw_sse2_unrolled:
23	movd	(%eax),%mm3
24	paddq	%mm3,%mm1
25	movd	(%edx),%mm2
26	pmuludq	%mm0,%mm2
27	movd	4(%edx),%mm4
28	pmuludq	%mm0,%mm4
29	movd	8(%edx),%mm6
30	pmuludq	%mm0,%mm6
31	movd	12(%edx),%mm7
32	pmuludq	%mm0,%mm7
33	paddq	%mm2,%mm1
34	movd	4(%eax),%mm3
35	paddq	%mm4,%mm3
36	movd	8(%eax),%mm5
37	paddq	%mm6,%mm5
38	movd	12(%eax),%mm4
39	paddq	%mm4,%mm7
40	movd	%mm1,(%eax)
41	movd	16(%edx),%mm2
42	pmuludq	%mm0,%mm2
43	psrlq	$32,%mm1
44	movd	20(%edx),%mm4
45	pmuludq	%mm0,%mm4
46	paddq	%mm3,%mm1
47	movd	24(%edx),%mm6
48	pmuludq	%mm0,%mm6
49	movd	%mm1,4(%eax)
50	psrlq	$32,%mm1
51	movd	28(%edx),%mm3
52	addl	$32,%edx
53	pmuludq	%mm0,%mm3
54	paddq	%mm5,%mm1
55	movd	16(%eax),%mm5
56	paddq	%mm5,%mm2
57	movd	%mm1,8(%eax)
58	psrlq	$32,%mm1
59	paddq	%mm7,%mm1
60	movd	20(%eax),%mm5
61	paddq	%mm5,%mm4
62	movd	%mm1,12(%eax)
63	psrlq	$32,%mm1
64	paddq	%mm2,%mm1
65	movd	24(%eax),%mm5
66	paddq	%mm5,%mm6
67	movd	%mm1,16(%eax)
68	psrlq	$32,%mm1
69	paddq	%mm4,%mm1
70	movd	28(%eax),%mm5
71	paddq	%mm5,%mm3
72	movd	%mm1,20(%eax)
73	psrlq	$32,%mm1
74	paddq	%mm6,%mm1
75	movd	%mm1,24(%eax)
76	psrlq	$32,%mm1
77	paddq	%mm3,%mm1
78	movd	%mm1,28(%eax)
79	leal	32(%eax),%eax
80	psrlq	$32,%mm1
81	subl	$8,%ecx
82	jz	.L004maw_sse2_exit
83.L002maw_sse2_entry:
84	testl	$4294967288,%ecx
85	jnz	.L003maw_sse2_unrolled
86.align	4
87.L005maw_sse2_loop:
88	movd	(%edx),%mm2
89	movd	(%eax),%mm3
90	pmuludq	%mm0,%mm2
91	leal	4(%edx),%edx
92	paddq	%mm3,%mm1
93	paddq	%mm2,%mm1
94	movd	%mm1,(%eax)
95	subl	$1,%ecx
96	psrlq	$32,%mm1
97	leal	4(%eax),%eax
98	jnz	.L005maw_sse2_loop
99.L004maw_sse2_exit:
100	movd	%mm1,%eax
101	emms
102	ret
103.align	16
104.L001maw_non_sse2:
105	pushl	%ebp
106	pushl	%ebx
107	pushl	%esi
108	pushl	%edi
109
110	xorl	%esi,%esi
111	movl	20(%esp),%edi
112	movl	28(%esp),%ecx
113	movl	24(%esp),%ebx
114	andl	$4294967288,%ecx
115	movl	32(%esp),%ebp
116	pushl	%ecx
117	jz	.L006maw_finish
118.align	16
119.L007maw_loop:
120
121	movl	(%ebx),%eax
122	mull	%ebp
123	addl	%esi,%eax
124	adcl	$0,%edx
125	addl	(%edi),%eax
126	adcl	$0,%edx
127	movl	%eax,(%edi)
128	movl	%edx,%esi
129
130	movl	4(%ebx),%eax
131	mull	%ebp
132	addl	%esi,%eax
133	adcl	$0,%edx
134	addl	4(%edi),%eax
135	adcl	$0,%edx
136	movl	%eax,4(%edi)
137	movl	%edx,%esi
138
139	movl	8(%ebx),%eax
140	mull	%ebp
141	addl	%esi,%eax
142	adcl	$0,%edx
143	addl	8(%edi),%eax
144	adcl	$0,%edx
145	movl	%eax,8(%edi)
146	movl	%edx,%esi
147
148	movl	12(%ebx),%eax
149	mull	%ebp
150	addl	%esi,%eax
151	adcl	$0,%edx
152	addl	12(%edi),%eax
153	adcl	$0,%edx
154	movl	%eax,12(%edi)
155	movl	%edx,%esi
156
157	movl	16(%ebx),%eax
158	mull	%ebp
159	addl	%esi,%eax
160	adcl	$0,%edx
161	addl	16(%edi),%eax
162	adcl	$0,%edx
163	movl	%eax,16(%edi)
164	movl	%edx,%esi
165
166	movl	20(%ebx),%eax
167	mull	%ebp
168	addl	%esi,%eax
169	adcl	$0,%edx
170	addl	20(%edi),%eax
171	adcl	$0,%edx
172	movl	%eax,20(%edi)
173	movl	%edx,%esi
174
175	movl	24(%ebx),%eax
176	mull	%ebp
177	addl	%esi,%eax
178	adcl	$0,%edx
179	addl	24(%edi),%eax
180	adcl	$0,%edx
181	movl	%eax,24(%edi)
182	movl	%edx,%esi
183
184	movl	28(%ebx),%eax
185	mull	%ebp
186	addl	%esi,%eax
187	adcl	$0,%edx
188	addl	28(%edi),%eax
189	adcl	$0,%edx
190	movl	%eax,28(%edi)
191	movl	%edx,%esi
192
193	subl	$8,%ecx
194	leal	32(%ebx),%ebx
195	leal	32(%edi),%edi
196	jnz	.L007maw_loop
197.L006maw_finish:
198	movl	32(%esp),%ecx
199	andl	$7,%ecx
200	jnz	.L008maw_finish2
201	jmp	.L009maw_end
202.L008maw_finish2:
203
204	movl	(%ebx),%eax
205	mull	%ebp
206	addl	%esi,%eax
207	adcl	$0,%edx
208	addl	(%edi),%eax
209	adcl	$0,%edx
210	decl	%ecx
211	movl	%eax,(%edi)
212	movl	%edx,%esi
213	jz	.L009maw_end
214
215	movl	4(%ebx),%eax
216	mull	%ebp
217	addl	%esi,%eax
218	adcl	$0,%edx
219	addl	4(%edi),%eax
220	adcl	$0,%edx
221	decl	%ecx
222	movl	%eax,4(%edi)
223	movl	%edx,%esi
224	jz	.L009maw_end
225
226	movl	8(%ebx),%eax
227	mull	%ebp
228	addl	%esi,%eax
229	adcl	$0,%edx
230	addl	8(%edi),%eax
231	adcl	$0,%edx
232	decl	%ecx
233	movl	%eax,8(%edi)
234	movl	%edx,%esi
235	jz	.L009maw_end
236
237	movl	12(%ebx),%eax
238	mull	%ebp
239	addl	%esi,%eax
240	adcl	$0,%edx
241	addl	12(%edi),%eax
242	adcl	$0,%edx
243	decl	%ecx
244	movl	%eax,12(%edi)
245	movl	%edx,%esi
246	jz	.L009maw_end
247
248	movl	16(%ebx),%eax
249	mull	%ebp
250	addl	%esi,%eax
251	adcl	$0,%edx
252	addl	16(%edi),%eax
253	adcl	$0,%edx
254	decl	%ecx
255	movl	%eax,16(%edi)
256	movl	%edx,%esi
257	jz	.L009maw_end
258
259	movl	20(%ebx),%eax
260	mull	%ebp
261	addl	%esi,%eax
262	adcl	$0,%edx
263	addl	20(%edi),%eax
264	adcl	$0,%edx
265	decl	%ecx
266	movl	%eax,20(%edi)
267	movl	%edx,%esi
268	jz	.L009maw_end
269
270	movl	24(%ebx),%eax
271	mull	%ebp
272	addl	%esi,%eax
273	adcl	$0,%edx
274	addl	24(%edi),%eax
275	adcl	$0,%edx
276	movl	%eax,24(%edi)
277	movl	%edx,%esi
278.L009maw_end:
279	movl	%esi,%eax
280	popl	%ecx
281	popl	%edi
282	popl	%esi
283	popl	%ebx
284	popl	%ebp
285	ret
286.size	bn_mul_add_words,.-.L_bn_mul_add_words_begin
287.globl	bn_mul_words
288.type	bn_mul_words,@function
289.align	16
290bn_mul_words:
291.L_bn_mul_words_begin:
292	call	.L010PIC_me_up
293.L010PIC_me_up:
294	popl	%eax
295	leal	_GLOBAL_OFFSET_TABLE_+[.-.L010PIC_me_up](%eax),%eax
296	movl	OPENSSL_ia32cap_P@GOT(%eax),%eax
297	btl	$26,(%eax)
298	jnc	.L011mw_non_sse2
299	movl	4(%esp),%eax
300	movl	8(%esp),%edx
301	movl	12(%esp),%ecx
302	movd	16(%esp),%mm0
303	pxor	%mm1,%mm1
304.align	16
305.L012mw_sse2_loop:
306	movd	(%edx),%mm2
307	pmuludq	%mm0,%mm2
308	leal	4(%edx),%edx
309	paddq	%mm2,%mm1
310	movd	%mm1,(%eax)
311	subl	$1,%ecx
312	psrlq	$32,%mm1
313	leal	4(%eax),%eax
314	jnz	.L012mw_sse2_loop
315	movd	%mm1,%eax
316	emms
317	ret
318.align	16
319.L011mw_non_sse2:
320	pushl	%ebp
321	pushl	%ebx
322	pushl	%esi
323	pushl	%edi
324
325	xorl	%esi,%esi
326	movl	20(%esp),%edi
327	movl	24(%esp),%ebx
328	movl	28(%esp),%ebp
329	movl	32(%esp),%ecx
330	andl	$4294967288,%ebp
331	jz	.L013mw_finish
332.L014mw_loop:
333
334	movl	(%ebx),%eax
335	mull	%ecx
336	addl	%esi,%eax
337	adcl	$0,%edx
338	movl	%eax,(%edi)
339	movl	%edx,%esi
340
341	movl	4(%ebx),%eax
342	mull	%ecx
343	addl	%esi,%eax
344	adcl	$0,%edx
345	movl	%eax,4(%edi)
346	movl	%edx,%esi
347
348	movl	8(%ebx),%eax
349	mull	%ecx
350	addl	%esi,%eax
351	adcl	$0,%edx
352	movl	%eax,8(%edi)
353	movl	%edx,%esi
354
355	movl	12(%ebx),%eax
356	mull	%ecx
357	addl	%esi,%eax
358	adcl	$0,%edx
359	movl	%eax,12(%edi)
360	movl	%edx,%esi
361
362	movl	16(%ebx),%eax
363	mull	%ecx
364	addl	%esi,%eax
365	adcl	$0,%edx
366	movl	%eax,16(%edi)
367	movl	%edx,%esi
368
369	movl	20(%ebx),%eax
370	mull	%ecx
371	addl	%esi,%eax
372	adcl	$0,%edx
373	movl	%eax,20(%edi)
374	movl	%edx,%esi
375
376	movl	24(%ebx),%eax
377	mull	%ecx
378	addl	%esi,%eax
379	adcl	$0,%edx
380	movl	%eax,24(%edi)
381	movl	%edx,%esi
382
383	movl	28(%ebx),%eax
384	mull	%ecx
385	addl	%esi,%eax
386	adcl	$0,%edx
387	movl	%eax,28(%edi)
388	movl	%edx,%esi
389
390	addl	$32,%ebx
391	addl	$32,%edi
392	subl	$8,%ebp
393	jz	.L013mw_finish
394	jmp	.L014mw_loop
395.L013mw_finish:
396	movl	28(%esp),%ebp
397	andl	$7,%ebp
398	jnz	.L015mw_finish2
399	jmp	.L016mw_end
400.L015mw_finish2:
401
402	movl	(%ebx),%eax
403	mull	%ecx
404	addl	%esi,%eax
405	adcl	$0,%edx
406	movl	%eax,(%edi)
407	movl	%edx,%esi
408	decl	%ebp
409	jz	.L016mw_end
410
411	movl	4(%ebx),%eax
412	mull	%ecx
413	addl	%esi,%eax
414	adcl	$0,%edx
415	movl	%eax,4(%edi)
416	movl	%edx,%esi
417	decl	%ebp
418	jz	.L016mw_end
419
420	movl	8(%ebx),%eax
421	mull	%ecx
422	addl	%esi,%eax
423	adcl	$0,%edx
424	movl	%eax,8(%edi)
425	movl	%edx,%esi
426	decl	%ebp
427	jz	.L016mw_end
428
429	movl	12(%ebx),%eax
430	mull	%ecx
431	addl	%esi,%eax
432	adcl	$0,%edx
433	movl	%eax,12(%edi)
434	movl	%edx,%esi
435	decl	%ebp
436	jz	.L016mw_end
437
438	movl	16(%ebx),%eax
439	mull	%ecx
440	addl	%esi,%eax
441	adcl	$0,%edx
442	movl	%eax,16(%edi)
443	movl	%edx,%esi
444	decl	%ebp
445	jz	.L016mw_end
446
447	movl	20(%ebx),%eax
448	mull	%ecx
449	addl	%esi,%eax
450	adcl	$0,%edx
451	movl	%eax,20(%edi)
452	movl	%edx,%esi
453	decl	%ebp
454	jz	.L016mw_end
455
456	movl	24(%ebx),%eax
457	mull	%ecx
458	addl	%esi,%eax
459	adcl	$0,%edx
460	movl	%eax,24(%edi)
461	movl	%edx,%esi
462.L016mw_end:
463	movl	%esi,%eax
464	popl	%edi
465	popl	%esi
466	popl	%ebx
467	popl	%ebp
468	ret
469.size	bn_mul_words,.-.L_bn_mul_words_begin
470.globl	bn_sqr_words
471.type	bn_sqr_words,@function
472.align	16
473bn_sqr_words:
474.L_bn_sqr_words_begin:
475	call	.L017PIC_me_up
476.L017PIC_me_up:
477	popl	%eax
478	leal	_GLOBAL_OFFSET_TABLE_+[.-.L017PIC_me_up](%eax),%eax
479	movl	OPENSSL_ia32cap_P@GOT(%eax),%eax
480	btl	$26,(%eax)
481	jnc	.L018sqr_non_sse2
482	movl	4(%esp),%eax
483	movl	8(%esp),%edx
484	movl	12(%esp),%ecx
485.align	16
486.L019sqr_sse2_loop:
487	movd	(%edx),%mm0
488	pmuludq	%mm0,%mm0
489	leal	4(%edx),%edx
490	movq	%mm0,(%eax)
491	subl	$1,%ecx
492	leal	8(%eax),%eax
493	jnz	.L019sqr_sse2_loop
494	emms
495	ret
496.align	16
497.L018sqr_non_sse2:
498	pushl	%ebp
499	pushl	%ebx
500	pushl	%esi
501	pushl	%edi
502
503	movl	20(%esp),%esi
504	movl	24(%esp),%edi
505	movl	28(%esp),%ebx
506	andl	$4294967288,%ebx
507	jz	.L020sw_finish
508.L021sw_loop:
509
510	movl	(%edi),%eax
511	mull	%eax
512	movl	%eax,(%esi)
513	movl	%edx,4(%esi)
514
515	movl	4(%edi),%eax
516	mull	%eax
517	movl	%eax,8(%esi)
518	movl	%edx,12(%esi)
519
520	movl	8(%edi),%eax
521	mull	%eax
522	movl	%eax,16(%esi)
523	movl	%edx,20(%esi)
524
525	movl	12(%edi),%eax
526	mull	%eax
527	movl	%eax,24(%esi)
528	movl	%edx,28(%esi)
529
530	movl	16(%edi),%eax
531	mull	%eax
532	movl	%eax,32(%esi)
533	movl	%edx,36(%esi)
534
535	movl	20(%edi),%eax
536	mull	%eax
537	movl	%eax,40(%esi)
538	movl	%edx,44(%esi)
539
540	movl	24(%edi),%eax
541	mull	%eax
542	movl	%eax,48(%esi)
543	movl	%edx,52(%esi)
544
545	movl	28(%edi),%eax
546	mull	%eax
547	movl	%eax,56(%esi)
548	movl	%edx,60(%esi)
549
550	addl	$32,%edi
551	addl	$64,%esi
552	subl	$8,%ebx
553	jnz	.L021sw_loop
554.L020sw_finish:
555	movl	28(%esp),%ebx
556	andl	$7,%ebx
557	jz	.L022sw_end
558
559	movl	(%edi),%eax
560	mull	%eax
561	movl	%eax,(%esi)
562	decl	%ebx
563	movl	%edx,4(%esi)
564	jz	.L022sw_end
565
566	movl	4(%edi),%eax
567	mull	%eax
568	movl	%eax,8(%esi)
569	decl	%ebx
570	movl	%edx,12(%esi)
571	jz	.L022sw_end
572
573	movl	8(%edi),%eax
574	mull	%eax
575	movl	%eax,16(%esi)
576	decl	%ebx
577	movl	%edx,20(%esi)
578	jz	.L022sw_end
579
580	movl	12(%edi),%eax
581	mull	%eax
582	movl	%eax,24(%esi)
583	decl	%ebx
584	movl	%edx,28(%esi)
585	jz	.L022sw_end
586
587	movl	16(%edi),%eax
588	mull	%eax
589	movl	%eax,32(%esi)
590	decl	%ebx
591	movl	%edx,36(%esi)
592	jz	.L022sw_end
593
594	movl	20(%edi),%eax
595	mull	%eax
596	movl	%eax,40(%esi)
597	decl	%ebx
598	movl	%edx,44(%esi)
599	jz	.L022sw_end
600
601	movl	24(%edi),%eax
602	mull	%eax
603	movl	%eax,48(%esi)
604	movl	%edx,52(%esi)
605.L022sw_end:
606	popl	%edi
607	popl	%esi
608	popl	%ebx
609	popl	%ebp
610	ret
611.size	bn_sqr_words,.-.L_bn_sqr_words_begin
612.globl	bn_div_words
613.type	bn_div_words,@function
614.align	16
615bn_div_words:
616.L_bn_div_words_begin:
617	movl	4(%esp),%edx
618	movl	8(%esp),%eax
619	movl	12(%esp),%ecx
620	divl	%ecx
621	ret
622.size	bn_div_words,.-.L_bn_div_words_begin
623.globl	bn_add_words
624.type	bn_add_words,@function
625.align	16
626bn_add_words:
627.L_bn_add_words_begin:
628	pushl	%ebp
629	pushl	%ebx
630	pushl	%esi
631	pushl	%edi
632
633	movl	20(%esp),%ebx
634	movl	24(%esp),%esi
635	movl	28(%esp),%edi
636	movl	32(%esp),%ebp
637	xorl	%eax,%eax
638	andl	$4294967288,%ebp
639	jz	.L023aw_finish
640.L024aw_loop:
641
642	movl	(%esi),%ecx
643	movl	(%edi),%edx
644	addl	%eax,%ecx
645	movl	$0,%eax
646	adcl	%eax,%eax
647	addl	%edx,%ecx
648	adcl	$0,%eax
649	movl	%ecx,(%ebx)
650
651	movl	4(%esi),%ecx
652	movl	4(%edi),%edx
653	addl	%eax,%ecx
654	movl	$0,%eax
655	adcl	%eax,%eax
656	addl	%edx,%ecx
657	adcl	$0,%eax
658	movl	%ecx,4(%ebx)
659
660	movl	8(%esi),%ecx
661	movl	8(%edi),%edx
662	addl	%eax,%ecx
663	movl	$0,%eax
664	adcl	%eax,%eax
665	addl	%edx,%ecx
666	adcl	$0,%eax
667	movl	%ecx,8(%ebx)
668
669	movl	12(%esi),%ecx
670	movl	12(%edi),%edx
671	addl	%eax,%ecx
672	movl	$0,%eax
673	adcl	%eax,%eax
674	addl	%edx,%ecx
675	adcl	$0,%eax
676	movl	%ecx,12(%ebx)
677
678	movl	16(%esi),%ecx
679	movl	16(%edi),%edx
680	addl	%eax,%ecx
681	movl	$0,%eax
682	adcl	%eax,%eax
683	addl	%edx,%ecx
684	adcl	$0,%eax
685	movl	%ecx,16(%ebx)
686
687	movl	20(%esi),%ecx
688	movl	20(%edi),%edx
689	addl	%eax,%ecx
690	movl	$0,%eax
691	adcl	%eax,%eax
692	addl	%edx,%ecx
693	adcl	$0,%eax
694	movl	%ecx,20(%ebx)
695
696	movl	24(%esi),%ecx
697	movl	24(%edi),%edx
698	addl	%eax,%ecx
699	movl	$0,%eax
700	adcl	%eax,%eax
701	addl	%edx,%ecx
702	adcl	$0,%eax
703	movl	%ecx,24(%ebx)
704
705	movl	28(%esi),%ecx
706	movl	28(%edi),%edx
707	addl	%eax,%ecx
708	movl	$0,%eax
709	adcl	%eax,%eax
710	addl	%edx,%ecx
711	adcl	$0,%eax
712	movl	%ecx,28(%ebx)
713
714	addl	$32,%esi
715	addl	$32,%edi
716	addl	$32,%ebx
717	subl	$8,%ebp
718	jnz	.L024aw_loop
719.L023aw_finish:
720	movl	32(%esp),%ebp
721	andl	$7,%ebp
722	jz	.L025aw_end
723
724	movl	(%esi),%ecx
725	movl	(%edi),%edx
726	addl	%eax,%ecx
727	movl	$0,%eax
728	adcl	%eax,%eax
729	addl	%edx,%ecx
730	adcl	$0,%eax
731	decl	%ebp
732	movl	%ecx,(%ebx)
733	jz	.L025aw_end
734
735	movl	4(%esi),%ecx
736	movl	4(%edi),%edx
737	addl	%eax,%ecx
738	movl	$0,%eax
739	adcl	%eax,%eax
740	addl	%edx,%ecx
741	adcl	$0,%eax
742	decl	%ebp
743	movl	%ecx,4(%ebx)
744	jz	.L025aw_end
745
746	movl	8(%esi),%ecx
747	movl	8(%edi),%edx
748	addl	%eax,%ecx
749	movl	$0,%eax
750	adcl	%eax,%eax
751	addl	%edx,%ecx
752	adcl	$0,%eax
753	decl	%ebp
754	movl	%ecx,8(%ebx)
755	jz	.L025aw_end
756
757	movl	12(%esi),%ecx
758	movl	12(%edi),%edx
759	addl	%eax,%ecx
760	movl	$0,%eax
761	adcl	%eax,%eax
762	addl	%edx,%ecx
763	adcl	$0,%eax
764	decl	%ebp
765	movl	%ecx,12(%ebx)
766	jz	.L025aw_end
767
768	movl	16(%esi),%ecx
769	movl	16(%edi),%edx
770	addl	%eax,%ecx
771	movl	$0,%eax
772	adcl	%eax,%eax
773	addl	%edx,%ecx
774	adcl	$0,%eax
775	decl	%ebp
776	movl	%ecx,16(%ebx)
777	jz	.L025aw_end
778
779	movl	20(%esi),%ecx
780	movl	20(%edi),%edx
781	addl	%eax,%ecx
782	movl	$0,%eax
783	adcl	%eax,%eax
784	addl	%edx,%ecx
785	adcl	$0,%eax
786	decl	%ebp
787	movl	%ecx,20(%ebx)
788	jz	.L025aw_end
789
790	movl	24(%esi),%ecx
791	movl	24(%edi),%edx
792	addl	%eax,%ecx
793	movl	$0,%eax
794	adcl	%eax,%eax
795	addl	%edx,%ecx
796	adcl	$0,%eax
797	movl	%ecx,24(%ebx)
798.L025aw_end:
799	popl	%edi
800	popl	%esi
801	popl	%ebx
802	popl	%ebp
803	ret
804.size	bn_add_words,.-.L_bn_add_words_begin
805.globl	bn_sub_words
806.type	bn_sub_words,@function
807.align	16
808bn_sub_words:
809.L_bn_sub_words_begin:
810	pushl	%ebp
811	pushl	%ebx
812	pushl	%esi
813	pushl	%edi
814
815	movl	20(%esp),%ebx
816	movl	24(%esp),%esi
817	movl	28(%esp),%edi
818	movl	32(%esp),%ebp
819	xorl	%eax,%eax
820	andl	$4294967288,%ebp
821	jz	.L026aw_finish
822.L027aw_loop:
823
824	movl	(%esi),%ecx
825	movl	(%edi),%edx
826	subl	%eax,%ecx
827	movl	$0,%eax
828	adcl	%eax,%eax
829	subl	%edx,%ecx
830	adcl	$0,%eax
831	movl	%ecx,(%ebx)
832
833	movl	4(%esi),%ecx
834	movl	4(%edi),%edx
835	subl	%eax,%ecx
836	movl	$0,%eax
837	adcl	%eax,%eax
838	subl	%edx,%ecx
839	adcl	$0,%eax
840	movl	%ecx,4(%ebx)
841
842	movl	8(%esi),%ecx
843	movl	8(%edi),%edx
844	subl	%eax,%ecx
845	movl	$0,%eax
846	adcl	%eax,%eax
847	subl	%edx,%ecx
848	adcl	$0,%eax
849	movl	%ecx,8(%ebx)
850
851	movl	12(%esi),%ecx
852	movl	12(%edi),%edx
853	subl	%eax,%ecx
854	movl	$0,%eax
855	adcl	%eax,%eax
856	subl	%edx,%ecx
857	adcl	$0,%eax
858	movl	%ecx,12(%ebx)
859
860	movl	16(%esi),%ecx
861	movl	16(%edi),%edx
862	subl	%eax,%ecx
863	movl	$0,%eax
864	adcl	%eax,%eax
865	subl	%edx,%ecx
866	adcl	$0,%eax
867	movl	%ecx,16(%ebx)
868
869	movl	20(%esi),%ecx
870	movl	20(%edi),%edx
871	subl	%eax,%ecx
872	movl	$0,%eax
873	adcl	%eax,%eax
874	subl	%edx,%ecx
875	adcl	$0,%eax
876	movl	%ecx,20(%ebx)
877
878	movl	24(%esi),%ecx
879	movl	24(%edi),%edx
880	subl	%eax,%ecx
881	movl	$0,%eax
882	adcl	%eax,%eax
883	subl	%edx,%ecx
884	adcl	$0,%eax
885	movl	%ecx,24(%ebx)
886
887	movl	28(%esi),%ecx
888	movl	28(%edi),%edx
889	subl	%eax,%ecx
890	movl	$0,%eax
891	adcl	%eax,%eax
892	subl	%edx,%ecx
893	adcl	$0,%eax
894	movl	%ecx,28(%ebx)
895
896	addl	$32,%esi
897	addl	$32,%edi
898	addl	$32,%ebx
899	subl	$8,%ebp
900	jnz	.L027aw_loop
901.L026aw_finish:
902	movl	32(%esp),%ebp
903	andl	$7,%ebp
904	jz	.L028aw_end
905
906	movl	(%esi),%ecx
907	movl	(%edi),%edx
908	subl	%eax,%ecx
909	movl	$0,%eax
910	adcl	%eax,%eax
911	subl	%edx,%ecx
912	adcl	$0,%eax
913	decl	%ebp
914	movl	%ecx,(%ebx)
915	jz	.L028aw_end
916
917	movl	4(%esi),%ecx
918	movl	4(%edi),%edx
919	subl	%eax,%ecx
920	movl	$0,%eax
921	adcl	%eax,%eax
922	subl	%edx,%ecx
923	adcl	$0,%eax
924	decl	%ebp
925	movl	%ecx,4(%ebx)
926	jz	.L028aw_end
927
928	movl	8(%esi),%ecx
929	movl	8(%edi),%edx
930	subl	%eax,%ecx
931	movl	$0,%eax
932	adcl	%eax,%eax
933	subl	%edx,%ecx
934	adcl	$0,%eax
935	decl	%ebp
936	movl	%ecx,8(%ebx)
937	jz	.L028aw_end
938
939	movl	12(%esi),%ecx
940	movl	12(%edi),%edx
941	subl	%eax,%ecx
942	movl	$0,%eax
943	adcl	%eax,%eax
944	subl	%edx,%ecx
945	adcl	$0,%eax
946	decl	%ebp
947	movl	%ecx,12(%ebx)
948	jz	.L028aw_end
949
950	movl	16(%esi),%ecx
951	movl	16(%edi),%edx
952	subl	%eax,%ecx
953	movl	$0,%eax
954	adcl	%eax,%eax
955	subl	%edx,%ecx
956	adcl	$0,%eax
957	decl	%ebp
958	movl	%ecx,16(%ebx)
959	jz	.L028aw_end
960
961	movl	20(%esi),%ecx
962	movl	20(%edi),%edx
963	subl	%eax,%ecx
964	movl	$0,%eax
965	adcl	%eax,%eax
966	subl	%edx,%ecx
967	adcl	$0,%eax
968	decl	%ebp
969	movl	%ecx,20(%ebx)
970	jz	.L028aw_end
971
972	movl	24(%esi),%ecx
973	movl	24(%edi),%edx
974	subl	%eax,%ecx
975	movl	$0,%eax
976	adcl	%eax,%eax
977	subl	%edx,%ecx
978	adcl	$0,%eax
979	movl	%ecx,24(%ebx)
980.L028aw_end:
981	popl	%edi
982	popl	%esi
983	popl	%ebx
984	popl	%ebp
985	ret
986.size	bn_sub_words,.-.L_bn_sub_words_begin
987.globl	bn_sub_part_words
988.type	bn_sub_part_words,@function
989.align	16
990bn_sub_part_words:
991.L_bn_sub_part_words_begin:
992	pushl	%ebp
993	pushl	%ebx
994	pushl	%esi
995	pushl	%edi
996
997	movl	20(%esp),%ebx
998	movl	24(%esp),%esi
999	movl	28(%esp),%edi
1000	movl	32(%esp),%ebp
1001	xorl	%eax,%eax
1002	andl	$4294967288,%ebp
1003	jz	.L029aw_finish
1004.L030aw_loop:
1005
1006	movl	(%esi),%ecx
1007	movl	(%edi),%edx
1008	subl	%eax,%ecx
1009	movl	$0,%eax
1010	adcl	%eax,%eax
1011	subl	%edx,%ecx
1012	adcl	$0,%eax
1013	movl	%ecx,(%ebx)
1014
1015	movl	4(%esi),%ecx
1016	movl	4(%edi),%edx
1017	subl	%eax,%ecx
1018	movl	$0,%eax
1019	adcl	%eax,%eax
1020	subl	%edx,%ecx
1021	adcl	$0,%eax
1022	movl	%ecx,4(%ebx)
1023
1024	movl	8(%esi),%ecx
1025	movl	8(%edi),%edx
1026	subl	%eax,%ecx
1027	movl	$0,%eax
1028	adcl	%eax,%eax
1029	subl	%edx,%ecx
1030	adcl	$0,%eax
1031	movl	%ecx,8(%ebx)
1032
1033	movl	12(%esi),%ecx
1034	movl	12(%edi),%edx
1035	subl	%eax,%ecx
1036	movl	$0,%eax
1037	adcl	%eax,%eax
1038	subl	%edx,%ecx
1039	adcl	$0,%eax
1040	movl	%ecx,12(%ebx)
1041
1042	movl	16(%esi),%ecx
1043	movl	16(%edi),%edx
1044	subl	%eax,%ecx
1045	movl	$0,%eax
1046	adcl	%eax,%eax
1047	subl	%edx,%ecx
1048	adcl	$0,%eax
1049	movl	%ecx,16(%ebx)
1050
1051	movl	20(%esi),%ecx
1052	movl	20(%edi),%edx
1053	subl	%eax,%ecx
1054	movl	$0,%eax
1055	adcl	%eax,%eax
1056	subl	%edx,%ecx
1057	adcl	$0,%eax
1058	movl	%ecx,20(%ebx)
1059
1060	movl	24(%esi),%ecx
1061	movl	24(%edi),%edx
1062	subl	%eax,%ecx
1063	movl	$0,%eax
1064	adcl	%eax,%eax
1065	subl	%edx,%ecx
1066	adcl	$0,%eax
1067	movl	%ecx,24(%ebx)
1068
1069	movl	28(%esi),%ecx
1070	movl	28(%edi),%edx
1071	subl	%eax,%ecx
1072	movl	$0,%eax
1073	adcl	%eax,%eax
1074	subl	%edx,%ecx
1075	adcl	$0,%eax
1076	movl	%ecx,28(%ebx)
1077
1078	addl	$32,%esi
1079	addl	$32,%edi
1080	addl	$32,%ebx
1081	subl	$8,%ebp
1082	jnz	.L030aw_loop
1083.L029aw_finish:
1084	movl	32(%esp),%ebp
1085	andl	$7,%ebp
1086	jz	.L031aw_end
1087
1088	movl	(%esi),%ecx
1089	movl	(%edi),%edx
1090	subl	%eax,%ecx
1091	movl	$0,%eax
1092	adcl	%eax,%eax
1093	subl	%edx,%ecx
1094	adcl	$0,%eax
1095	movl	%ecx,(%ebx)
1096	addl	$4,%esi
1097	addl	$4,%edi
1098	addl	$4,%ebx
1099	decl	%ebp
1100	jz	.L031aw_end
1101
1102	movl	(%esi),%ecx
1103	movl	(%edi),%edx
1104	subl	%eax,%ecx
1105	movl	$0,%eax
1106	adcl	%eax,%eax
1107	subl	%edx,%ecx
1108	adcl	$0,%eax
1109	movl	%ecx,(%ebx)
1110	addl	$4,%esi
1111	addl	$4,%edi
1112	addl	$4,%ebx
1113	decl	%ebp
1114	jz	.L031aw_end
1115
1116	movl	(%esi),%ecx
1117	movl	(%edi),%edx
1118	subl	%eax,%ecx
1119	movl	$0,%eax
1120	adcl	%eax,%eax
1121	subl	%edx,%ecx
1122	adcl	$0,%eax
1123	movl	%ecx,(%ebx)
1124	addl	$4,%esi
1125	addl	$4,%edi
1126	addl	$4,%ebx
1127	decl	%ebp
1128	jz	.L031aw_end
1129
1130	movl	(%esi),%ecx
1131	movl	(%edi),%edx
1132	subl	%eax,%ecx
1133	movl	$0,%eax
1134	adcl	%eax,%eax
1135	subl	%edx,%ecx
1136	adcl	$0,%eax
1137	movl	%ecx,(%ebx)
1138	addl	$4,%esi
1139	addl	$4,%edi
1140	addl	$4,%ebx
1141	decl	%ebp
1142	jz	.L031aw_end
1143
1144	movl	(%esi),%ecx
1145	movl	(%edi),%edx
1146	subl	%eax,%ecx
1147	movl	$0,%eax
1148	adcl	%eax,%eax
1149	subl	%edx,%ecx
1150	adcl	$0,%eax
1151	movl	%ecx,(%ebx)
1152	addl	$4,%esi
1153	addl	$4,%edi
1154	addl	$4,%ebx
1155	decl	%ebp
1156	jz	.L031aw_end
1157
1158	movl	(%esi),%ecx
1159	movl	(%edi),%edx
1160	subl	%eax,%ecx
1161	movl	$0,%eax
1162	adcl	%eax,%eax
1163	subl	%edx,%ecx
1164	adcl	$0,%eax
1165	movl	%ecx,(%ebx)
1166	addl	$4,%esi
1167	addl	$4,%edi
1168	addl	$4,%ebx
1169	decl	%ebp
1170	jz	.L031aw_end
1171
1172	movl	(%esi),%ecx
1173	movl	(%edi),%edx
1174	subl	%eax,%ecx
1175	movl	$0,%eax
1176	adcl	%eax,%eax
1177	subl	%edx,%ecx
1178	adcl	$0,%eax
1179	movl	%ecx,(%ebx)
1180	addl	$4,%esi
1181	addl	$4,%edi
1182	addl	$4,%ebx
1183.L031aw_end:
1184	cmpl	$0,36(%esp)
1185	je	.L032pw_end
1186	movl	36(%esp),%ebp
1187	cmpl	$0,%ebp
1188	je	.L032pw_end
1189	jge	.L033pw_pos
1190
1191	movl	$0,%edx
1192	subl	%ebp,%edx
1193	movl	%edx,%ebp
1194	andl	$4294967288,%ebp
1195	jz	.L034pw_neg_finish
1196.L035pw_neg_loop:
1197
1198	movl	$0,%ecx
1199	movl	(%edi),%edx
1200	subl	%eax,%ecx
1201	movl	$0,%eax
1202	adcl	%eax,%eax
1203	subl	%edx,%ecx
1204	adcl	$0,%eax
1205	movl	%ecx,(%ebx)
1206
1207	movl	$0,%ecx
1208	movl	4(%edi),%edx
1209	subl	%eax,%ecx
1210	movl	$0,%eax
1211	adcl	%eax,%eax
1212	subl	%edx,%ecx
1213	adcl	$0,%eax
1214	movl	%ecx,4(%ebx)
1215
1216	movl	$0,%ecx
1217	movl	8(%edi),%edx
1218	subl	%eax,%ecx
1219	movl	$0,%eax
1220	adcl	%eax,%eax
1221	subl	%edx,%ecx
1222	adcl	$0,%eax
1223	movl	%ecx,8(%ebx)
1224
1225	movl	$0,%ecx
1226	movl	12(%edi),%edx
1227	subl	%eax,%ecx
1228	movl	$0,%eax
1229	adcl	%eax,%eax
1230	subl	%edx,%ecx
1231	adcl	$0,%eax
1232	movl	%ecx,12(%ebx)
1233
1234	movl	$0,%ecx
1235	movl	16(%edi),%edx
1236	subl	%eax,%ecx
1237	movl	$0,%eax
1238	adcl	%eax,%eax
1239	subl	%edx,%ecx
1240	adcl	$0,%eax
1241	movl	%ecx,16(%ebx)
1242
1243	movl	$0,%ecx
1244	movl	20(%edi),%edx
1245	subl	%eax,%ecx
1246	movl	$0,%eax
1247	adcl	%eax,%eax
1248	subl	%edx,%ecx
1249	adcl	$0,%eax
1250	movl	%ecx,20(%ebx)
1251
1252	movl	$0,%ecx
1253	movl	24(%edi),%edx
1254	subl	%eax,%ecx
1255	movl	$0,%eax
1256	adcl	%eax,%eax
1257	subl	%edx,%ecx
1258	adcl	$0,%eax
1259	movl	%ecx,24(%ebx)
1260
1261	movl	$0,%ecx
1262	movl	28(%edi),%edx
1263	subl	%eax,%ecx
1264	movl	$0,%eax
1265	adcl	%eax,%eax
1266	subl	%edx,%ecx
1267	adcl	$0,%eax
1268	movl	%ecx,28(%ebx)
1269
1270	addl	$32,%edi
1271	addl	$32,%ebx
1272	subl	$8,%ebp
1273	jnz	.L035pw_neg_loop
1274.L034pw_neg_finish:
1275	movl	36(%esp),%edx
1276	movl	$0,%ebp
1277	subl	%edx,%ebp
1278	andl	$7,%ebp
1279	jz	.L032pw_end
1280
1281	movl	$0,%ecx
1282	movl	(%edi),%edx
1283	subl	%eax,%ecx
1284	movl	$0,%eax
1285	adcl	%eax,%eax
1286	subl	%edx,%ecx
1287	adcl	$0,%eax
1288	decl	%ebp
1289	movl	%ecx,(%ebx)
1290	jz	.L032pw_end
1291
1292	movl	$0,%ecx
1293	movl	4(%edi),%edx
1294	subl	%eax,%ecx
1295	movl	$0,%eax
1296	adcl	%eax,%eax
1297	subl	%edx,%ecx
1298	adcl	$0,%eax
1299	decl	%ebp
1300	movl	%ecx,4(%ebx)
1301	jz	.L032pw_end
1302
1303	movl	$0,%ecx
1304	movl	8(%edi),%edx
1305	subl	%eax,%ecx
1306	movl	$0,%eax
1307	adcl	%eax,%eax
1308	subl	%edx,%ecx
1309	adcl	$0,%eax
1310	decl	%ebp
1311	movl	%ecx,8(%ebx)
1312	jz	.L032pw_end
1313
1314	movl	$0,%ecx
1315	movl	12(%edi),%edx
1316	subl	%eax,%ecx
1317	movl	$0,%eax
1318	adcl	%eax,%eax
1319	subl	%edx,%ecx
1320	adcl	$0,%eax
1321	decl	%ebp
1322	movl	%ecx,12(%ebx)
1323	jz	.L032pw_end
1324
1325	movl	$0,%ecx
1326	movl	16(%edi),%edx
1327	subl	%eax,%ecx
1328	movl	$0,%eax
1329	adcl	%eax,%eax
1330	subl	%edx,%ecx
1331	adcl	$0,%eax
1332	decl	%ebp
1333	movl	%ecx,16(%ebx)
1334	jz	.L032pw_end
1335
1336	movl	$0,%ecx
1337	movl	20(%edi),%edx
1338	subl	%eax,%ecx
1339	movl	$0,%eax
1340	adcl	%eax,%eax
1341	subl	%edx,%ecx
1342	adcl	$0,%eax
1343	decl	%ebp
1344	movl	%ecx,20(%ebx)
1345	jz	.L032pw_end
1346
1347	movl	$0,%ecx
1348	movl	24(%edi),%edx
1349	subl	%eax,%ecx
1350	movl	$0,%eax
1351	adcl	%eax,%eax
1352	subl	%edx,%ecx
1353	adcl	$0,%eax
1354	movl	%ecx,24(%ebx)
1355	jmp	.L032pw_end
1356.L033pw_pos:
1357	andl	$4294967288,%ebp
1358	jz	.L036pw_pos_finish
1359.L037pw_pos_loop:
1360
1361	movl	(%esi),%ecx
1362	subl	%eax,%ecx
1363	movl	%ecx,(%ebx)
1364	jnc	.L038pw_nc0
1365
1366	movl	4(%esi),%ecx
1367	subl	%eax,%ecx
1368	movl	%ecx,4(%ebx)
1369	jnc	.L039pw_nc1
1370
1371	movl	8(%esi),%ecx
1372	subl	%eax,%ecx
1373	movl	%ecx,8(%ebx)
1374	jnc	.L040pw_nc2
1375
1376	movl	12(%esi),%ecx
1377	subl	%eax,%ecx
1378	movl	%ecx,12(%ebx)
1379	jnc	.L041pw_nc3
1380
1381	movl	16(%esi),%ecx
1382	subl	%eax,%ecx
1383	movl	%ecx,16(%ebx)
1384	jnc	.L042pw_nc4
1385
1386	movl	20(%esi),%ecx
1387	subl	%eax,%ecx
1388	movl	%ecx,20(%ebx)
1389	jnc	.L043pw_nc5
1390
1391	movl	24(%esi),%ecx
1392	subl	%eax,%ecx
1393	movl	%ecx,24(%ebx)
1394	jnc	.L044pw_nc6
1395
1396	movl	28(%esi),%ecx
1397	subl	%eax,%ecx
1398	movl	%ecx,28(%ebx)
1399	jnc	.L045pw_nc7
1400
1401	addl	$32,%esi
1402	addl	$32,%ebx
1403	subl	$8,%ebp
1404	jnz	.L037pw_pos_loop
1405.L036pw_pos_finish:
1406	movl	36(%esp),%ebp
1407	andl	$7,%ebp
1408	jz	.L032pw_end
1409
1410	movl	(%esi),%ecx
1411	subl	%eax,%ecx
1412	movl	%ecx,(%ebx)
1413	jnc	.L046pw_tail_nc0
1414	decl	%ebp
1415	jz	.L032pw_end
1416
1417	movl	4(%esi),%ecx
1418	subl	%eax,%ecx
1419	movl	%ecx,4(%ebx)
1420	jnc	.L047pw_tail_nc1
1421	decl	%ebp
1422	jz	.L032pw_end
1423
1424	movl	8(%esi),%ecx
1425	subl	%eax,%ecx
1426	movl	%ecx,8(%ebx)
1427	jnc	.L048pw_tail_nc2
1428	decl	%ebp
1429	jz	.L032pw_end
1430
1431	movl	12(%esi),%ecx
1432	subl	%eax,%ecx
1433	movl	%ecx,12(%ebx)
1434	jnc	.L049pw_tail_nc3
1435	decl	%ebp
1436	jz	.L032pw_end
1437
1438	movl	16(%esi),%ecx
1439	subl	%eax,%ecx
1440	movl	%ecx,16(%ebx)
1441	jnc	.L050pw_tail_nc4
1442	decl	%ebp
1443	jz	.L032pw_end
1444
1445	movl	20(%esi),%ecx
1446	subl	%eax,%ecx
1447	movl	%ecx,20(%ebx)
1448	jnc	.L051pw_tail_nc5
1449	decl	%ebp
1450	jz	.L032pw_end
1451
1452	movl	24(%esi),%ecx
1453	subl	%eax,%ecx
1454	movl	%ecx,24(%ebx)
1455	jnc	.L052pw_tail_nc6
1456	movl	$1,%eax
1457	jmp	.L032pw_end
1458.L053pw_nc_loop:
1459	movl	(%esi),%ecx
1460	movl	%ecx,(%ebx)
1461.L038pw_nc0:
1462	movl	4(%esi),%ecx
1463	movl	%ecx,4(%ebx)
1464.L039pw_nc1:
1465	movl	8(%esi),%ecx
1466	movl	%ecx,8(%ebx)
1467.L040pw_nc2:
1468	movl	12(%esi),%ecx
1469	movl	%ecx,12(%ebx)
1470.L041pw_nc3:
1471	movl	16(%esi),%ecx
1472	movl	%ecx,16(%ebx)
1473.L042pw_nc4:
1474	movl	20(%esi),%ecx
1475	movl	%ecx,20(%ebx)
1476.L043pw_nc5:
1477	movl	24(%esi),%ecx
1478	movl	%ecx,24(%ebx)
1479.L044pw_nc6:
1480	movl	28(%esi),%ecx
1481	movl	%ecx,28(%ebx)
1482.L045pw_nc7:
1483
1484	addl	$32,%esi
1485	addl	$32,%ebx
1486	subl	$8,%ebp
1487	jnz	.L053pw_nc_loop
1488	movl	36(%esp),%ebp
1489	andl	$7,%ebp
1490	jz	.L054pw_nc_end
1491	movl	(%esi),%ecx
1492	movl	%ecx,(%ebx)
1493.L046pw_tail_nc0:
1494	decl	%ebp
1495	jz	.L054pw_nc_end
1496	movl	4(%esi),%ecx
1497	movl	%ecx,4(%ebx)
1498.L047pw_tail_nc1:
1499	decl	%ebp
1500	jz	.L054pw_nc_end
1501	movl	8(%esi),%ecx
1502	movl	%ecx,8(%ebx)
1503.L048pw_tail_nc2:
1504	decl	%ebp
1505	jz	.L054pw_nc_end
1506	movl	12(%esi),%ecx
1507	movl	%ecx,12(%ebx)
1508.L049pw_tail_nc3:
1509	decl	%ebp
1510	jz	.L054pw_nc_end
1511	movl	16(%esi),%ecx
1512	movl	%ecx,16(%ebx)
1513.L050pw_tail_nc4:
1514	decl	%ebp
1515	jz	.L054pw_nc_end
1516	movl	20(%esi),%ecx
1517	movl	%ecx,20(%ebx)
1518.L051pw_tail_nc5:
1519	decl	%ebp
1520	jz	.L054pw_nc_end
1521	movl	24(%esi),%ecx
1522	movl	%ecx,24(%ebx)
1523.L052pw_tail_nc6:
1524.L054pw_nc_end:
1525	movl	$0,%eax
1526.L032pw_end:
1527	popl	%edi
1528	popl	%esi
1529	popl	%ebx
1530	popl	%ebp
1531	ret
1532.size	bn_sub_part_words,.-.L_bn_sub_part_words_begin
1533.comm	OPENSSL_ia32cap_P,8,4
1534