1# This file is generated from a similarly-named Perl script in the BoringSSL
2# source tree. Do not edit by hand.
3
4#if defined(__i386__)
5#if defined(BORINGSSL_PREFIX)
6#include <boringssl_prefix_symbols_asm.h>
7#endif
8.text
9.globl	bn_mul_add_words
10.hidden	bn_mul_add_words
11.type	bn_mul_add_words,@function
12.align	16
13bn_mul_add_words:
14.L_bn_mul_add_words_begin:
15	call	.L000PIC_me_up
16.L000PIC_me_up:
17	popl	%eax
18	leal	OPENSSL_ia32cap_P-.L000PIC_me_up(%eax),%eax
19	btl	$26,(%eax)
20	jnc	.L001maw_non_sse2
21	movl	4(%esp),%eax
22	movl	8(%esp),%edx
23	movl	12(%esp),%ecx
24	movd	16(%esp),%mm0
25	pxor	%mm1,%mm1
26	jmp	.L002maw_sse2_entry
27.align	16
28.L003maw_sse2_unrolled:
29	movd	(%eax),%mm3
30	paddq	%mm3,%mm1
31	movd	(%edx),%mm2
32	pmuludq	%mm0,%mm2
33	movd	4(%edx),%mm4
34	pmuludq	%mm0,%mm4
35	movd	8(%edx),%mm6
36	pmuludq	%mm0,%mm6
37	movd	12(%edx),%mm7
38	pmuludq	%mm0,%mm7
39	paddq	%mm2,%mm1
40	movd	4(%eax),%mm3
41	paddq	%mm4,%mm3
42	movd	8(%eax),%mm5
43	paddq	%mm6,%mm5
44	movd	12(%eax),%mm4
45	paddq	%mm4,%mm7
46	movd	%mm1,(%eax)
47	movd	16(%edx),%mm2
48	pmuludq	%mm0,%mm2
49	psrlq	$32,%mm1
50	movd	20(%edx),%mm4
51	pmuludq	%mm0,%mm4
52	paddq	%mm3,%mm1
53	movd	24(%edx),%mm6
54	pmuludq	%mm0,%mm6
55	movd	%mm1,4(%eax)
56	psrlq	$32,%mm1
57	movd	28(%edx),%mm3
58	addl	$32,%edx
59	pmuludq	%mm0,%mm3
60	paddq	%mm5,%mm1
61	movd	16(%eax),%mm5
62	paddq	%mm5,%mm2
63	movd	%mm1,8(%eax)
64	psrlq	$32,%mm1
65	paddq	%mm7,%mm1
66	movd	20(%eax),%mm5
67	paddq	%mm5,%mm4
68	movd	%mm1,12(%eax)
69	psrlq	$32,%mm1
70	paddq	%mm2,%mm1
71	movd	24(%eax),%mm5
72	paddq	%mm5,%mm6
73	movd	%mm1,16(%eax)
74	psrlq	$32,%mm1
75	paddq	%mm4,%mm1
76	movd	28(%eax),%mm5
77	paddq	%mm5,%mm3
78	movd	%mm1,20(%eax)
79	psrlq	$32,%mm1
80	paddq	%mm6,%mm1
81	movd	%mm1,24(%eax)
82	psrlq	$32,%mm1
83	paddq	%mm3,%mm1
84	movd	%mm1,28(%eax)
85	leal	32(%eax),%eax
86	psrlq	$32,%mm1
87	subl	$8,%ecx
88	jz	.L004maw_sse2_exit
89.L002maw_sse2_entry:
90	testl	$4294967288,%ecx
91	jnz	.L003maw_sse2_unrolled
92.align	4
93.L005maw_sse2_loop:
94	movd	(%edx),%mm2
95	movd	(%eax),%mm3
96	pmuludq	%mm0,%mm2
97	leal	4(%edx),%edx
98	paddq	%mm3,%mm1
99	paddq	%mm2,%mm1
100	movd	%mm1,(%eax)
101	subl	$1,%ecx
102	psrlq	$32,%mm1
103	leal	4(%eax),%eax
104	jnz	.L005maw_sse2_loop
105.L004maw_sse2_exit:
106	movd	%mm1,%eax
107	emms
108	ret
109.align	16
110.L001maw_non_sse2:
111	pushl	%ebp
112	pushl	%ebx
113	pushl	%esi
114	pushl	%edi
115
116	xorl	%esi,%esi
117	movl	20(%esp),%edi
118	movl	28(%esp),%ecx
119	movl	24(%esp),%ebx
120	andl	$4294967288,%ecx
121	movl	32(%esp),%ebp
122	pushl	%ecx
123	jz	.L006maw_finish
124.align	16
125.L007maw_loop:
126
127	movl	(%ebx),%eax
128	mull	%ebp
129	addl	%esi,%eax
130	adcl	$0,%edx
131	addl	(%edi),%eax
132	adcl	$0,%edx
133	movl	%eax,(%edi)
134	movl	%edx,%esi
135
136	movl	4(%ebx),%eax
137	mull	%ebp
138	addl	%esi,%eax
139	adcl	$0,%edx
140	addl	4(%edi),%eax
141	adcl	$0,%edx
142	movl	%eax,4(%edi)
143	movl	%edx,%esi
144
145	movl	8(%ebx),%eax
146	mull	%ebp
147	addl	%esi,%eax
148	adcl	$0,%edx
149	addl	8(%edi),%eax
150	adcl	$0,%edx
151	movl	%eax,8(%edi)
152	movl	%edx,%esi
153
154	movl	12(%ebx),%eax
155	mull	%ebp
156	addl	%esi,%eax
157	adcl	$0,%edx
158	addl	12(%edi),%eax
159	adcl	$0,%edx
160	movl	%eax,12(%edi)
161	movl	%edx,%esi
162
163	movl	16(%ebx),%eax
164	mull	%ebp
165	addl	%esi,%eax
166	adcl	$0,%edx
167	addl	16(%edi),%eax
168	adcl	$0,%edx
169	movl	%eax,16(%edi)
170	movl	%edx,%esi
171
172	movl	20(%ebx),%eax
173	mull	%ebp
174	addl	%esi,%eax
175	adcl	$0,%edx
176	addl	20(%edi),%eax
177	adcl	$0,%edx
178	movl	%eax,20(%edi)
179	movl	%edx,%esi
180
181	movl	24(%ebx),%eax
182	mull	%ebp
183	addl	%esi,%eax
184	adcl	$0,%edx
185	addl	24(%edi),%eax
186	adcl	$0,%edx
187	movl	%eax,24(%edi)
188	movl	%edx,%esi
189
190	movl	28(%ebx),%eax
191	mull	%ebp
192	addl	%esi,%eax
193	adcl	$0,%edx
194	addl	28(%edi),%eax
195	adcl	$0,%edx
196	movl	%eax,28(%edi)
197	movl	%edx,%esi
198
199	subl	$8,%ecx
200	leal	32(%ebx),%ebx
201	leal	32(%edi),%edi
202	jnz	.L007maw_loop
203.L006maw_finish:
204	movl	32(%esp),%ecx
205	andl	$7,%ecx
206	jnz	.L008maw_finish2
207	jmp	.L009maw_end
208.L008maw_finish2:
209
210	movl	(%ebx),%eax
211	mull	%ebp
212	addl	%esi,%eax
213	adcl	$0,%edx
214	addl	(%edi),%eax
215	adcl	$0,%edx
216	decl	%ecx
217	movl	%eax,(%edi)
218	movl	%edx,%esi
219	jz	.L009maw_end
220
221	movl	4(%ebx),%eax
222	mull	%ebp
223	addl	%esi,%eax
224	adcl	$0,%edx
225	addl	4(%edi),%eax
226	adcl	$0,%edx
227	decl	%ecx
228	movl	%eax,4(%edi)
229	movl	%edx,%esi
230	jz	.L009maw_end
231
232	movl	8(%ebx),%eax
233	mull	%ebp
234	addl	%esi,%eax
235	adcl	$0,%edx
236	addl	8(%edi),%eax
237	adcl	$0,%edx
238	decl	%ecx
239	movl	%eax,8(%edi)
240	movl	%edx,%esi
241	jz	.L009maw_end
242
243	movl	12(%ebx),%eax
244	mull	%ebp
245	addl	%esi,%eax
246	adcl	$0,%edx
247	addl	12(%edi),%eax
248	adcl	$0,%edx
249	decl	%ecx
250	movl	%eax,12(%edi)
251	movl	%edx,%esi
252	jz	.L009maw_end
253
254	movl	16(%ebx),%eax
255	mull	%ebp
256	addl	%esi,%eax
257	adcl	$0,%edx
258	addl	16(%edi),%eax
259	adcl	$0,%edx
260	decl	%ecx
261	movl	%eax,16(%edi)
262	movl	%edx,%esi
263	jz	.L009maw_end
264
265	movl	20(%ebx),%eax
266	mull	%ebp
267	addl	%esi,%eax
268	adcl	$0,%edx
269	addl	20(%edi),%eax
270	adcl	$0,%edx
271	decl	%ecx
272	movl	%eax,20(%edi)
273	movl	%edx,%esi
274	jz	.L009maw_end
275
276	movl	24(%ebx),%eax
277	mull	%ebp
278	addl	%esi,%eax
279	adcl	$0,%edx
280	addl	24(%edi),%eax
281	adcl	$0,%edx
282	movl	%eax,24(%edi)
283	movl	%edx,%esi
284.L009maw_end:
285	movl	%esi,%eax
286	popl	%ecx
287	popl	%edi
288	popl	%esi
289	popl	%ebx
290	popl	%ebp
291	ret
292.size	bn_mul_add_words,.-.L_bn_mul_add_words_begin
293.globl	bn_mul_words
294.hidden	bn_mul_words
295.type	bn_mul_words,@function
296.align	16
297bn_mul_words:
298.L_bn_mul_words_begin:
299	call	.L010PIC_me_up
300.L010PIC_me_up:
301	popl	%eax
302	leal	OPENSSL_ia32cap_P-.L010PIC_me_up(%eax),%eax
303	btl	$26,(%eax)
304	jnc	.L011mw_non_sse2
305	movl	4(%esp),%eax
306	movl	8(%esp),%edx
307	movl	12(%esp),%ecx
308	movd	16(%esp),%mm0
309	pxor	%mm1,%mm1
310.align	16
311.L012mw_sse2_loop:
312	movd	(%edx),%mm2
313	pmuludq	%mm0,%mm2
314	leal	4(%edx),%edx
315	paddq	%mm2,%mm1
316	movd	%mm1,(%eax)
317	subl	$1,%ecx
318	psrlq	$32,%mm1
319	leal	4(%eax),%eax
320	jnz	.L012mw_sse2_loop
321	movd	%mm1,%eax
322	emms
323	ret
324.align	16
325.L011mw_non_sse2:
326	pushl	%ebp
327	pushl	%ebx
328	pushl	%esi
329	pushl	%edi
330
331	xorl	%esi,%esi
332	movl	20(%esp),%edi
333	movl	24(%esp),%ebx
334	movl	28(%esp),%ebp
335	movl	32(%esp),%ecx
336	andl	$4294967288,%ebp
337	jz	.L013mw_finish
338.L014mw_loop:
339
340	movl	(%ebx),%eax
341	mull	%ecx
342	addl	%esi,%eax
343	adcl	$0,%edx
344	movl	%eax,(%edi)
345	movl	%edx,%esi
346
347	movl	4(%ebx),%eax
348	mull	%ecx
349	addl	%esi,%eax
350	adcl	$0,%edx
351	movl	%eax,4(%edi)
352	movl	%edx,%esi
353
354	movl	8(%ebx),%eax
355	mull	%ecx
356	addl	%esi,%eax
357	adcl	$0,%edx
358	movl	%eax,8(%edi)
359	movl	%edx,%esi
360
361	movl	12(%ebx),%eax
362	mull	%ecx
363	addl	%esi,%eax
364	adcl	$0,%edx
365	movl	%eax,12(%edi)
366	movl	%edx,%esi
367
368	movl	16(%ebx),%eax
369	mull	%ecx
370	addl	%esi,%eax
371	adcl	$0,%edx
372	movl	%eax,16(%edi)
373	movl	%edx,%esi
374
375	movl	20(%ebx),%eax
376	mull	%ecx
377	addl	%esi,%eax
378	adcl	$0,%edx
379	movl	%eax,20(%edi)
380	movl	%edx,%esi
381
382	movl	24(%ebx),%eax
383	mull	%ecx
384	addl	%esi,%eax
385	adcl	$0,%edx
386	movl	%eax,24(%edi)
387	movl	%edx,%esi
388
389	movl	28(%ebx),%eax
390	mull	%ecx
391	addl	%esi,%eax
392	adcl	$0,%edx
393	movl	%eax,28(%edi)
394	movl	%edx,%esi
395
396	addl	$32,%ebx
397	addl	$32,%edi
398	subl	$8,%ebp
399	jz	.L013mw_finish
400	jmp	.L014mw_loop
401.L013mw_finish:
402	movl	28(%esp),%ebp
403	andl	$7,%ebp
404	jnz	.L015mw_finish2
405	jmp	.L016mw_end
406.L015mw_finish2:
407
408	movl	(%ebx),%eax
409	mull	%ecx
410	addl	%esi,%eax
411	adcl	$0,%edx
412	movl	%eax,(%edi)
413	movl	%edx,%esi
414	decl	%ebp
415	jz	.L016mw_end
416
417	movl	4(%ebx),%eax
418	mull	%ecx
419	addl	%esi,%eax
420	adcl	$0,%edx
421	movl	%eax,4(%edi)
422	movl	%edx,%esi
423	decl	%ebp
424	jz	.L016mw_end
425
426	movl	8(%ebx),%eax
427	mull	%ecx
428	addl	%esi,%eax
429	adcl	$0,%edx
430	movl	%eax,8(%edi)
431	movl	%edx,%esi
432	decl	%ebp
433	jz	.L016mw_end
434
435	movl	12(%ebx),%eax
436	mull	%ecx
437	addl	%esi,%eax
438	adcl	$0,%edx
439	movl	%eax,12(%edi)
440	movl	%edx,%esi
441	decl	%ebp
442	jz	.L016mw_end
443
444	movl	16(%ebx),%eax
445	mull	%ecx
446	addl	%esi,%eax
447	adcl	$0,%edx
448	movl	%eax,16(%edi)
449	movl	%edx,%esi
450	decl	%ebp
451	jz	.L016mw_end
452
453	movl	20(%ebx),%eax
454	mull	%ecx
455	addl	%esi,%eax
456	adcl	$0,%edx
457	movl	%eax,20(%edi)
458	movl	%edx,%esi
459	decl	%ebp
460	jz	.L016mw_end
461
462	movl	24(%ebx),%eax
463	mull	%ecx
464	addl	%esi,%eax
465	adcl	$0,%edx
466	movl	%eax,24(%edi)
467	movl	%edx,%esi
468.L016mw_end:
469	movl	%esi,%eax
470	popl	%edi
471	popl	%esi
472	popl	%ebx
473	popl	%ebp
474	ret
475.size	bn_mul_words,.-.L_bn_mul_words_begin
476.globl	bn_sqr_words
477.hidden	bn_sqr_words
478.type	bn_sqr_words,@function
479.align	16
480bn_sqr_words:
481.L_bn_sqr_words_begin:
482	call	.L017PIC_me_up
483.L017PIC_me_up:
484	popl	%eax
485	leal	OPENSSL_ia32cap_P-.L017PIC_me_up(%eax),%eax
486	btl	$26,(%eax)
487	jnc	.L018sqr_non_sse2
488	movl	4(%esp),%eax
489	movl	8(%esp),%edx
490	movl	12(%esp),%ecx
491.align	16
492.L019sqr_sse2_loop:
493	movd	(%edx),%mm0
494	pmuludq	%mm0,%mm0
495	leal	4(%edx),%edx
496	movq	%mm0,(%eax)
497	subl	$1,%ecx
498	leal	8(%eax),%eax
499	jnz	.L019sqr_sse2_loop
500	emms
501	ret
502.align	16
503.L018sqr_non_sse2:
504	pushl	%ebp
505	pushl	%ebx
506	pushl	%esi
507	pushl	%edi
508
509	movl	20(%esp),%esi
510	movl	24(%esp),%edi
511	movl	28(%esp),%ebx
512	andl	$4294967288,%ebx
513	jz	.L020sw_finish
514.L021sw_loop:
515
516	movl	(%edi),%eax
517	mull	%eax
518	movl	%eax,(%esi)
519	movl	%edx,4(%esi)
520
521	movl	4(%edi),%eax
522	mull	%eax
523	movl	%eax,8(%esi)
524	movl	%edx,12(%esi)
525
526	movl	8(%edi),%eax
527	mull	%eax
528	movl	%eax,16(%esi)
529	movl	%edx,20(%esi)
530
531	movl	12(%edi),%eax
532	mull	%eax
533	movl	%eax,24(%esi)
534	movl	%edx,28(%esi)
535
536	movl	16(%edi),%eax
537	mull	%eax
538	movl	%eax,32(%esi)
539	movl	%edx,36(%esi)
540
541	movl	20(%edi),%eax
542	mull	%eax
543	movl	%eax,40(%esi)
544	movl	%edx,44(%esi)
545
546	movl	24(%edi),%eax
547	mull	%eax
548	movl	%eax,48(%esi)
549	movl	%edx,52(%esi)
550
551	movl	28(%edi),%eax
552	mull	%eax
553	movl	%eax,56(%esi)
554	movl	%edx,60(%esi)
555
556	addl	$32,%edi
557	addl	$64,%esi
558	subl	$8,%ebx
559	jnz	.L021sw_loop
560.L020sw_finish:
561	movl	28(%esp),%ebx
562	andl	$7,%ebx
563	jz	.L022sw_end
564
565	movl	(%edi),%eax
566	mull	%eax
567	movl	%eax,(%esi)
568	decl	%ebx
569	movl	%edx,4(%esi)
570	jz	.L022sw_end
571
572	movl	4(%edi),%eax
573	mull	%eax
574	movl	%eax,8(%esi)
575	decl	%ebx
576	movl	%edx,12(%esi)
577	jz	.L022sw_end
578
579	movl	8(%edi),%eax
580	mull	%eax
581	movl	%eax,16(%esi)
582	decl	%ebx
583	movl	%edx,20(%esi)
584	jz	.L022sw_end
585
586	movl	12(%edi),%eax
587	mull	%eax
588	movl	%eax,24(%esi)
589	decl	%ebx
590	movl	%edx,28(%esi)
591	jz	.L022sw_end
592
593	movl	16(%edi),%eax
594	mull	%eax
595	movl	%eax,32(%esi)
596	decl	%ebx
597	movl	%edx,36(%esi)
598	jz	.L022sw_end
599
600	movl	20(%edi),%eax
601	mull	%eax
602	movl	%eax,40(%esi)
603	decl	%ebx
604	movl	%edx,44(%esi)
605	jz	.L022sw_end
606
607	movl	24(%edi),%eax
608	mull	%eax
609	movl	%eax,48(%esi)
610	movl	%edx,52(%esi)
611.L022sw_end:
612	popl	%edi
613	popl	%esi
614	popl	%ebx
615	popl	%ebp
616	ret
617.size	bn_sqr_words,.-.L_bn_sqr_words_begin
618.globl	bn_div_words
619.hidden	bn_div_words
620.type	bn_div_words,@function
621.align	16
622bn_div_words:
623.L_bn_div_words_begin:
624	movl	4(%esp),%edx
625	movl	8(%esp),%eax
626	movl	12(%esp),%ecx
627	divl	%ecx
628	ret
629.size	bn_div_words,.-.L_bn_div_words_begin
630.globl	bn_add_words
631.hidden	bn_add_words
632.type	bn_add_words,@function
633.align	16
634bn_add_words:
635.L_bn_add_words_begin:
636	pushl	%ebp
637	pushl	%ebx
638	pushl	%esi
639	pushl	%edi
640
641	movl	20(%esp),%ebx
642	movl	24(%esp),%esi
643	movl	28(%esp),%edi
644	movl	32(%esp),%ebp
645	xorl	%eax,%eax
646	andl	$4294967288,%ebp
647	jz	.L023aw_finish
648.L024aw_loop:
649
650	movl	(%esi),%ecx
651	movl	(%edi),%edx
652	addl	%eax,%ecx
653	movl	$0,%eax
654	adcl	%eax,%eax
655	addl	%edx,%ecx
656	adcl	$0,%eax
657	movl	%ecx,(%ebx)
658
659	movl	4(%esi),%ecx
660	movl	4(%edi),%edx
661	addl	%eax,%ecx
662	movl	$0,%eax
663	adcl	%eax,%eax
664	addl	%edx,%ecx
665	adcl	$0,%eax
666	movl	%ecx,4(%ebx)
667
668	movl	8(%esi),%ecx
669	movl	8(%edi),%edx
670	addl	%eax,%ecx
671	movl	$0,%eax
672	adcl	%eax,%eax
673	addl	%edx,%ecx
674	adcl	$0,%eax
675	movl	%ecx,8(%ebx)
676
677	movl	12(%esi),%ecx
678	movl	12(%edi),%edx
679	addl	%eax,%ecx
680	movl	$0,%eax
681	adcl	%eax,%eax
682	addl	%edx,%ecx
683	adcl	$0,%eax
684	movl	%ecx,12(%ebx)
685
686	movl	16(%esi),%ecx
687	movl	16(%edi),%edx
688	addl	%eax,%ecx
689	movl	$0,%eax
690	adcl	%eax,%eax
691	addl	%edx,%ecx
692	adcl	$0,%eax
693	movl	%ecx,16(%ebx)
694
695	movl	20(%esi),%ecx
696	movl	20(%edi),%edx
697	addl	%eax,%ecx
698	movl	$0,%eax
699	adcl	%eax,%eax
700	addl	%edx,%ecx
701	adcl	$0,%eax
702	movl	%ecx,20(%ebx)
703
704	movl	24(%esi),%ecx
705	movl	24(%edi),%edx
706	addl	%eax,%ecx
707	movl	$0,%eax
708	adcl	%eax,%eax
709	addl	%edx,%ecx
710	adcl	$0,%eax
711	movl	%ecx,24(%ebx)
712
713	movl	28(%esi),%ecx
714	movl	28(%edi),%edx
715	addl	%eax,%ecx
716	movl	$0,%eax
717	adcl	%eax,%eax
718	addl	%edx,%ecx
719	adcl	$0,%eax
720	movl	%ecx,28(%ebx)
721
722	addl	$32,%esi
723	addl	$32,%edi
724	addl	$32,%ebx
725	subl	$8,%ebp
726	jnz	.L024aw_loop
727.L023aw_finish:
728	movl	32(%esp),%ebp
729	andl	$7,%ebp
730	jz	.L025aw_end
731
732	movl	(%esi),%ecx
733	movl	(%edi),%edx
734	addl	%eax,%ecx
735	movl	$0,%eax
736	adcl	%eax,%eax
737	addl	%edx,%ecx
738	adcl	$0,%eax
739	decl	%ebp
740	movl	%ecx,(%ebx)
741	jz	.L025aw_end
742
743	movl	4(%esi),%ecx
744	movl	4(%edi),%edx
745	addl	%eax,%ecx
746	movl	$0,%eax
747	adcl	%eax,%eax
748	addl	%edx,%ecx
749	adcl	$0,%eax
750	decl	%ebp
751	movl	%ecx,4(%ebx)
752	jz	.L025aw_end
753
754	movl	8(%esi),%ecx
755	movl	8(%edi),%edx
756	addl	%eax,%ecx
757	movl	$0,%eax
758	adcl	%eax,%eax
759	addl	%edx,%ecx
760	adcl	$0,%eax
761	decl	%ebp
762	movl	%ecx,8(%ebx)
763	jz	.L025aw_end
764
765	movl	12(%esi),%ecx
766	movl	12(%edi),%edx
767	addl	%eax,%ecx
768	movl	$0,%eax
769	adcl	%eax,%eax
770	addl	%edx,%ecx
771	adcl	$0,%eax
772	decl	%ebp
773	movl	%ecx,12(%ebx)
774	jz	.L025aw_end
775
776	movl	16(%esi),%ecx
777	movl	16(%edi),%edx
778	addl	%eax,%ecx
779	movl	$0,%eax
780	adcl	%eax,%eax
781	addl	%edx,%ecx
782	adcl	$0,%eax
783	decl	%ebp
784	movl	%ecx,16(%ebx)
785	jz	.L025aw_end
786
787	movl	20(%esi),%ecx
788	movl	20(%edi),%edx
789	addl	%eax,%ecx
790	movl	$0,%eax
791	adcl	%eax,%eax
792	addl	%edx,%ecx
793	adcl	$0,%eax
794	decl	%ebp
795	movl	%ecx,20(%ebx)
796	jz	.L025aw_end
797
798	movl	24(%esi),%ecx
799	movl	24(%edi),%edx
800	addl	%eax,%ecx
801	movl	$0,%eax
802	adcl	%eax,%eax
803	addl	%edx,%ecx
804	adcl	$0,%eax
805	movl	%ecx,24(%ebx)
806.L025aw_end:
807	popl	%edi
808	popl	%esi
809	popl	%ebx
810	popl	%ebp
811	ret
812.size	bn_add_words,.-.L_bn_add_words_begin
813.globl	bn_sub_words
814.hidden	bn_sub_words
815.type	bn_sub_words,@function
816.align	16
817bn_sub_words:
818.L_bn_sub_words_begin:
819	pushl	%ebp
820	pushl	%ebx
821	pushl	%esi
822	pushl	%edi
823
824	movl	20(%esp),%ebx
825	movl	24(%esp),%esi
826	movl	28(%esp),%edi
827	movl	32(%esp),%ebp
828	xorl	%eax,%eax
829	andl	$4294967288,%ebp
830	jz	.L026aw_finish
831.L027aw_loop:
832
833	movl	(%esi),%ecx
834	movl	(%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,(%ebx)
841
842	movl	4(%esi),%ecx
843	movl	4(%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,4(%ebx)
850
851	movl	8(%esi),%ecx
852	movl	8(%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,8(%ebx)
859
860	movl	12(%esi),%ecx
861	movl	12(%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,12(%ebx)
868
869	movl	16(%esi),%ecx
870	movl	16(%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,16(%ebx)
877
878	movl	20(%esi),%ecx
879	movl	20(%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,20(%ebx)
886
887	movl	24(%esi),%ecx
888	movl	24(%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,24(%ebx)
895
896	movl	28(%esi),%ecx
897	movl	28(%edi),%edx
898	subl	%eax,%ecx
899	movl	$0,%eax
900	adcl	%eax,%eax
901	subl	%edx,%ecx
902	adcl	$0,%eax
903	movl	%ecx,28(%ebx)
904
905	addl	$32,%esi
906	addl	$32,%edi
907	addl	$32,%ebx
908	subl	$8,%ebp
909	jnz	.L027aw_loop
910.L026aw_finish:
911	movl	32(%esp),%ebp
912	andl	$7,%ebp
913	jz	.L028aw_end
914
915	movl	(%esi),%ecx
916	movl	(%edi),%edx
917	subl	%eax,%ecx
918	movl	$0,%eax
919	adcl	%eax,%eax
920	subl	%edx,%ecx
921	adcl	$0,%eax
922	decl	%ebp
923	movl	%ecx,(%ebx)
924	jz	.L028aw_end
925
926	movl	4(%esi),%ecx
927	movl	4(%edi),%edx
928	subl	%eax,%ecx
929	movl	$0,%eax
930	adcl	%eax,%eax
931	subl	%edx,%ecx
932	adcl	$0,%eax
933	decl	%ebp
934	movl	%ecx,4(%ebx)
935	jz	.L028aw_end
936
937	movl	8(%esi),%ecx
938	movl	8(%edi),%edx
939	subl	%eax,%ecx
940	movl	$0,%eax
941	adcl	%eax,%eax
942	subl	%edx,%ecx
943	adcl	$0,%eax
944	decl	%ebp
945	movl	%ecx,8(%ebx)
946	jz	.L028aw_end
947
948	movl	12(%esi),%ecx
949	movl	12(%edi),%edx
950	subl	%eax,%ecx
951	movl	$0,%eax
952	adcl	%eax,%eax
953	subl	%edx,%ecx
954	adcl	$0,%eax
955	decl	%ebp
956	movl	%ecx,12(%ebx)
957	jz	.L028aw_end
958
959	movl	16(%esi),%ecx
960	movl	16(%edi),%edx
961	subl	%eax,%ecx
962	movl	$0,%eax
963	adcl	%eax,%eax
964	subl	%edx,%ecx
965	adcl	$0,%eax
966	decl	%ebp
967	movl	%ecx,16(%ebx)
968	jz	.L028aw_end
969
970	movl	20(%esi),%ecx
971	movl	20(%edi),%edx
972	subl	%eax,%ecx
973	movl	$0,%eax
974	adcl	%eax,%eax
975	subl	%edx,%ecx
976	adcl	$0,%eax
977	decl	%ebp
978	movl	%ecx,20(%ebx)
979	jz	.L028aw_end
980
981	movl	24(%esi),%ecx
982	movl	24(%edi),%edx
983	subl	%eax,%ecx
984	movl	$0,%eax
985	adcl	%eax,%eax
986	subl	%edx,%ecx
987	adcl	$0,%eax
988	movl	%ecx,24(%ebx)
989.L028aw_end:
990	popl	%edi
991	popl	%esi
992	popl	%ebx
993	popl	%ebp
994	ret
995.size	bn_sub_words,.-.L_bn_sub_words_begin
996#endif
997.section	.note.GNU-stack,"",@progbits
998