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