• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#if defined(__i386__)
2.text
3.globl	bn_mul_add_words
4.hidden	bn_mul_add_words
5.type	bn_mul_add_words,@function
6.align	16
7bn_mul_add_words:
8.L_bn_mul_add_words_begin:
9	call	.L000PIC_me_up
10.L000PIC_me_up:
11	popl	%eax
12	leal	OPENSSL_ia32cap_P-.L000PIC_me_up(%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.hidden	bn_mul_words
289.type	bn_mul_words,@function
290.align	16
291bn_mul_words:
292.L_bn_mul_words_begin:
293	call	.L010PIC_me_up
294.L010PIC_me_up:
295	popl	%eax
296	leal	OPENSSL_ia32cap_P-.L010PIC_me_up(%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.hidden	bn_sqr_words
472.type	bn_sqr_words,@function
473.align	16
474bn_sqr_words:
475.L_bn_sqr_words_begin:
476	call	.L017PIC_me_up
477.L017PIC_me_up:
478	popl	%eax
479	leal	OPENSSL_ia32cap_P-.L017PIC_me_up(%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.hidden	bn_div_words
614.type	bn_div_words,@function
615.align	16
616bn_div_words:
617.L_bn_div_words_begin:
618	movl	4(%esp),%edx
619	movl	8(%esp),%eax
620	movl	12(%esp),%ecx
621	divl	%ecx
622	ret
623.size	bn_div_words,.-.L_bn_div_words_begin
624.globl	bn_add_words
625.hidden	bn_add_words
626.type	bn_add_words,@function
627.align	16
628bn_add_words:
629.L_bn_add_words_begin:
630	pushl	%ebp
631	pushl	%ebx
632	pushl	%esi
633	pushl	%edi
634
635	movl	20(%esp),%ebx
636	movl	24(%esp),%esi
637	movl	28(%esp),%edi
638	movl	32(%esp),%ebp
639	xorl	%eax,%eax
640	andl	$4294967288,%ebp
641	jz	.L023aw_finish
642.L024aw_loop:
643
644	movl	(%esi),%ecx
645	movl	(%edi),%edx
646	addl	%eax,%ecx
647	movl	$0,%eax
648	adcl	%eax,%eax
649	addl	%edx,%ecx
650	adcl	$0,%eax
651	movl	%ecx,(%ebx)
652
653	movl	4(%esi),%ecx
654	movl	4(%edi),%edx
655	addl	%eax,%ecx
656	movl	$0,%eax
657	adcl	%eax,%eax
658	addl	%edx,%ecx
659	adcl	$0,%eax
660	movl	%ecx,4(%ebx)
661
662	movl	8(%esi),%ecx
663	movl	8(%edi),%edx
664	addl	%eax,%ecx
665	movl	$0,%eax
666	adcl	%eax,%eax
667	addl	%edx,%ecx
668	adcl	$0,%eax
669	movl	%ecx,8(%ebx)
670
671	movl	12(%esi),%ecx
672	movl	12(%edi),%edx
673	addl	%eax,%ecx
674	movl	$0,%eax
675	adcl	%eax,%eax
676	addl	%edx,%ecx
677	adcl	$0,%eax
678	movl	%ecx,12(%ebx)
679
680	movl	16(%esi),%ecx
681	movl	16(%edi),%edx
682	addl	%eax,%ecx
683	movl	$0,%eax
684	adcl	%eax,%eax
685	addl	%edx,%ecx
686	adcl	$0,%eax
687	movl	%ecx,16(%ebx)
688
689	movl	20(%esi),%ecx
690	movl	20(%edi),%edx
691	addl	%eax,%ecx
692	movl	$0,%eax
693	adcl	%eax,%eax
694	addl	%edx,%ecx
695	adcl	$0,%eax
696	movl	%ecx,20(%ebx)
697
698	movl	24(%esi),%ecx
699	movl	24(%edi),%edx
700	addl	%eax,%ecx
701	movl	$0,%eax
702	adcl	%eax,%eax
703	addl	%edx,%ecx
704	adcl	$0,%eax
705	movl	%ecx,24(%ebx)
706
707	movl	28(%esi),%ecx
708	movl	28(%edi),%edx
709	addl	%eax,%ecx
710	movl	$0,%eax
711	adcl	%eax,%eax
712	addl	%edx,%ecx
713	adcl	$0,%eax
714	movl	%ecx,28(%ebx)
715
716	addl	$32,%esi
717	addl	$32,%edi
718	addl	$32,%ebx
719	subl	$8,%ebp
720	jnz	.L024aw_loop
721.L023aw_finish:
722	movl	32(%esp),%ebp
723	andl	$7,%ebp
724	jz	.L025aw_end
725
726	movl	(%esi),%ecx
727	movl	(%edi),%edx
728	addl	%eax,%ecx
729	movl	$0,%eax
730	adcl	%eax,%eax
731	addl	%edx,%ecx
732	adcl	$0,%eax
733	decl	%ebp
734	movl	%ecx,(%ebx)
735	jz	.L025aw_end
736
737	movl	4(%esi),%ecx
738	movl	4(%edi),%edx
739	addl	%eax,%ecx
740	movl	$0,%eax
741	adcl	%eax,%eax
742	addl	%edx,%ecx
743	adcl	$0,%eax
744	decl	%ebp
745	movl	%ecx,4(%ebx)
746	jz	.L025aw_end
747
748	movl	8(%esi),%ecx
749	movl	8(%edi),%edx
750	addl	%eax,%ecx
751	movl	$0,%eax
752	adcl	%eax,%eax
753	addl	%edx,%ecx
754	adcl	$0,%eax
755	decl	%ebp
756	movl	%ecx,8(%ebx)
757	jz	.L025aw_end
758
759	movl	12(%esi),%ecx
760	movl	12(%edi),%edx
761	addl	%eax,%ecx
762	movl	$0,%eax
763	adcl	%eax,%eax
764	addl	%edx,%ecx
765	adcl	$0,%eax
766	decl	%ebp
767	movl	%ecx,12(%ebx)
768	jz	.L025aw_end
769
770	movl	16(%esi),%ecx
771	movl	16(%edi),%edx
772	addl	%eax,%ecx
773	movl	$0,%eax
774	adcl	%eax,%eax
775	addl	%edx,%ecx
776	adcl	$0,%eax
777	decl	%ebp
778	movl	%ecx,16(%ebx)
779	jz	.L025aw_end
780
781	movl	20(%esi),%ecx
782	movl	20(%edi),%edx
783	addl	%eax,%ecx
784	movl	$0,%eax
785	adcl	%eax,%eax
786	addl	%edx,%ecx
787	adcl	$0,%eax
788	decl	%ebp
789	movl	%ecx,20(%ebx)
790	jz	.L025aw_end
791
792	movl	24(%esi),%ecx
793	movl	24(%edi),%edx
794	addl	%eax,%ecx
795	movl	$0,%eax
796	adcl	%eax,%eax
797	addl	%edx,%ecx
798	adcl	$0,%eax
799	movl	%ecx,24(%ebx)
800.L025aw_end:
801	popl	%edi
802	popl	%esi
803	popl	%ebx
804	popl	%ebp
805	ret
806.size	bn_add_words,.-.L_bn_add_words_begin
807.globl	bn_sub_words
808.hidden	bn_sub_words
809.type	bn_sub_words,@function
810.align	16
811bn_sub_words:
812.L_bn_sub_words_begin:
813	pushl	%ebp
814	pushl	%ebx
815	pushl	%esi
816	pushl	%edi
817
818	movl	20(%esp),%ebx
819	movl	24(%esp),%esi
820	movl	28(%esp),%edi
821	movl	32(%esp),%ebp
822	xorl	%eax,%eax
823	andl	$4294967288,%ebp
824	jz	.L026aw_finish
825.L027aw_loop:
826
827	movl	(%esi),%ecx
828	movl	(%edi),%edx
829	subl	%eax,%ecx
830	movl	$0,%eax
831	adcl	%eax,%eax
832	subl	%edx,%ecx
833	adcl	$0,%eax
834	movl	%ecx,(%ebx)
835
836	movl	4(%esi),%ecx
837	movl	4(%edi),%edx
838	subl	%eax,%ecx
839	movl	$0,%eax
840	adcl	%eax,%eax
841	subl	%edx,%ecx
842	adcl	$0,%eax
843	movl	%ecx,4(%ebx)
844
845	movl	8(%esi),%ecx
846	movl	8(%edi),%edx
847	subl	%eax,%ecx
848	movl	$0,%eax
849	adcl	%eax,%eax
850	subl	%edx,%ecx
851	adcl	$0,%eax
852	movl	%ecx,8(%ebx)
853
854	movl	12(%esi),%ecx
855	movl	12(%edi),%edx
856	subl	%eax,%ecx
857	movl	$0,%eax
858	adcl	%eax,%eax
859	subl	%edx,%ecx
860	adcl	$0,%eax
861	movl	%ecx,12(%ebx)
862
863	movl	16(%esi),%ecx
864	movl	16(%edi),%edx
865	subl	%eax,%ecx
866	movl	$0,%eax
867	adcl	%eax,%eax
868	subl	%edx,%ecx
869	adcl	$0,%eax
870	movl	%ecx,16(%ebx)
871
872	movl	20(%esi),%ecx
873	movl	20(%edi),%edx
874	subl	%eax,%ecx
875	movl	$0,%eax
876	adcl	%eax,%eax
877	subl	%edx,%ecx
878	adcl	$0,%eax
879	movl	%ecx,20(%ebx)
880
881	movl	24(%esi),%ecx
882	movl	24(%edi),%edx
883	subl	%eax,%ecx
884	movl	$0,%eax
885	adcl	%eax,%eax
886	subl	%edx,%ecx
887	adcl	$0,%eax
888	movl	%ecx,24(%ebx)
889
890	movl	28(%esi),%ecx
891	movl	28(%edi),%edx
892	subl	%eax,%ecx
893	movl	$0,%eax
894	adcl	%eax,%eax
895	subl	%edx,%ecx
896	adcl	$0,%eax
897	movl	%ecx,28(%ebx)
898
899	addl	$32,%esi
900	addl	$32,%edi
901	addl	$32,%ebx
902	subl	$8,%ebp
903	jnz	.L027aw_loop
904.L026aw_finish:
905	movl	32(%esp),%ebp
906	andl	$7,%ebp
907	jz	.L028aw_end
908
909	movl	(%esi),%ecx
910	movl	(%edi),%edx
911	subl	%eax,%ecx
912	movl	$0,%eax
913	adcl	%eax,%eax
914	subl	%edx,%ecx
915	adcl	$0,%eax
916	decl	%ebp
917	movl	%ecx,(%ebx)
918	jz	.L028aw_end
919
920	movl	4(%esi),%ecx
921	movl	4(%edi),%edx
922	subl	%eax,%ecx
923	movl	$0,%eax
924	adcl	%eax,%eax
925	subl	%edx,%ecx
926	adcl	$0,%eax
927	decl	%ebp
928	movl	%ecx,4(%ebx)
929	jz	.L028aw_end
930
931	movl	8(%esi),%ecx
932	movl	8(%edi),%edx
933	subl	%eax,%ecx
934	movl	$0,%eax
935	adcl	%eax,%eax
936	subl	%edx,%ecx
937	adcl	$0,%eax
938	decl	%ebp
939	movl	%ecx,8(%ebx)
940	jz	.L028aw_end
941
942	movl	12(%esi),%ecx
943	movl	12(%edi),%edx
944	subl	%eax,%ecx
945	movl	$0,%eax
946	adcl	%eax,%eax
947	subl	%edx,%ecx
948	adcl	$0,%eax
949	decl	%ebp
950	movl	%ecx,12(%ebx)
951	jz	.L028aw_end
952
953	movl	16(%esi),%ecx
954	movl	16(%edi),%edx
955	subl	%eax,%ecx
956	movl	$0,%eax
957	adcl	%eax,%eax
958	subl	%edx,%ecx
959	adcl	$0,%eax
960	decl	%ebp
961	movl	%ecx,16(%ebx)
962	jz	.L028aw_end
963
964	movl	20(%esi),%ecx
965	movl	20(%edi),%edx
966	subl	%eax,%ecx
967	movl	$0,%eax
968	adcl	%eax,%eax
969	subl	%edx,%ecx
970	adcl	$0,%eax
971	decl	%ebp
972	movl	%ecx,20(%ebx)
973	jz	.L028aw_end
974
975	movl	24(%esi),%ecx
976	movl	24(%edi),%edx
977	subl	%eax,%ecx
978	movl	$0,%eax
979	adcl	%eax,%eax
980	subl	%edx,%ecx
981	adcl	$0,%eax
982	movl	%ecx,24(%ebx)
983.L028aw_end:
984	popl	%edi
985	popl	%esi
986	popl	%ebx
987	popl	%ebp
988	ret
989.size	bn_sub_words,.-.L_bn_sub_words_begin
990.globl	bn_sub_part_words
991.hidden	bn_sub_part_words
992.type	bn_sub_part_words,@function
993.align	16
994bn_sub_part_words:
995.L_bn_sub_part_words_begin:
996	pushl	%ebp
997	pushl	%ebx
998	pushl	%esi
999	pushl	%edi
1000
1001	movl	20(%esp),%ebx
1002	movl	24(%esp),%esi
1003	movl	28(%esp),%edi
1004	movl	32(%esp),%ebp
1005	xorl	%eax,%eax
1006	andl	$4294967288,%ebp
1007	jz	.L029aw_finish
1008.L030aw_loop:
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
1019	movl	4(%esi),%ecx
1020	movl	4(%edi),%edx
1021	subl	%eax,%ecx
1022	movl	$0,%eax
1023	adcl	%eax,%eax
1024	subl	%edx,%ecx
1025	adcl	$0,%eax
1026	movl	%ecx,4(%ebx)
1027
1028	movl	8(%esi),%ecx
1029	movl	8(%edi),%edx
1030	subl	%eax,%ecx
1031	movl	$0,%eax
1032	adcl	%eax,%eax
1033	subl	%edx,%ecx
1034	adcl	$0,%eax
1035	movl	%ecx,8(%ebx)
1036
1037	movl	12(%esi),%ecx
1038	movl	12(%edi),%edx
1039	subl	%eax,%ecx
1040	movl	$0,%eax
1041	adcl	%eax,%eax
1042	subl	%edx,%ecx
1043	adcl	$0,%eax
1044	movl	%ecx,12(%ebx)
1045
1046	movl	16(%esi),%ecx
1047	movl	16(%edi),%edx
1048	subl	%eax,%ecx
1049	movl	$0,%eax
1050	adcl	%eax,%eax
1051	subl	%edx,%ecx
1052	adcl	$0,%eax
1053	movl	%ecx,16(%ebx)
1054
1055	movl	20(%esi),%ecx
1056	movl	20(%edi),%edx
1057	subl	%eax,%ecx
1058	movl	$0,%eax
1059	adcl	%eax,%eax
1060	subl	%edx,%ecx
1061	adcl	$0,%eax
1062	movl	%ecx,20(%ebx)
1063
1064	movl	24(%esi),%ecx
1065	movl	24(%edi),%edx
1066	subl	%eax,%ecx
1067	movl	$0,%eax
1068	adcl	%eax,%eax
1069	subl	%edx,%ecx
1070	adcl	$0,%eax
1071	movl	%ecx,24(%ebx)
1072
1073	movl	28(%esi),%ecx
1074	movl	28(%edi),%edx
1075	subl	%eax,%ecx
1076	movl	$0,%eax
1077	adcl	%eax,%eax
1078	subl	%edx,%ecx
1079	adcl	$0,%eax
1080	movl	%ecx,28(%ebx)
1081
1082	addl	$32,%esi
1083	addl	$32,%edi
1084	addl	$32,%ebx
1085	subl	$8,%ebp
1086	jnz	.L030aw_loop
1087.L029aw_finish:
1088	movl	32(%esp),%ebp
1089	andl	$7,%ebp
1090	jz	.L031aw_end
1091
1092	movl	(%esi),%ecx
1093	movl	(%edi),%edx
1094	subl	%eax,%ecx
1095	movl	$0,%eax
1096	adcl	%eax,%eax
1097	subl	%edx,%ecx
1098	adcl	$0,%eax
1099	movl	%ecx,(%ebx)
1100	addl	$4,%esi
1101	addl	$4,%edi
1102	addl	$4,%ebx
1103	decl	%ebp
1104	jz	.L031aw_end
1105
1106	movl	(%esi),%ecx
1107	movl	(%edi),%edx
1108	subl	%eax,%ecx
1109	movl	$0,%eax
1110	adcl	%eax,%eax
1111	subl	%edx,%ecx
1112	adcl	$0,%eax
1113	movl	%ecx,(%ebx)
1114	addl	$4,%esi
1115	addl	$4,%edi
1116	addl	$4,%ebx
1117	decl	%ebp
1118	jz	.L031aw_end
1119
1120	movl	(%esi),%ecx
1121	movl	(%edi),%edx
1122	subl	%eax,%ecx
1123	movl	$0,%eax
1124	adcl	%eax,%eax
1125	subl	%edx,%ecx
1126	adcl	$0,%eax
1127	movl	%ecx,(%ebx)
1128	addl	$4,%esi
1129	addl	$4,%edi
1130	addl	$4,%ebx
1131	decl	%ebp
1132	jz	.L031aw_end
1133
1134	movl	(%esi),%ecx
1135	movl	(%edi),%edx
1136	subl	%eax,%ecx
1137	movl	$0,%eax
1138	adcl	%eax,%eax
1139	subl	%edx,%ecx
1140	adcl	$0,%eax
1141	movl	%ecx,(%ebx)
1142	addl	$4,%esi
1143	addl	$4,%edi
1144	addl	$4,%ebx
1145	decl	%ebp
1146	jz	.L031aw_end
1147
1148	movl	(%esi),%ecx
1149	movl	(%edi),%edx
1150	subl	%eax,%ecx
1151	movl	$0,%eax
1152	adcl	%eax,%eax
1153	subl	%edx,%ecx
1154	adcl	$0,%eax
1155	movl	%ecx,(%ebx)
1156	addl	$4,%esi
1157	addl	$4,%edi
1158	addl	$4,%ebx
1159	decl	%ebp
1160	jz	.L031aw_end
1161
1162	movl	(%esi),%ecx
1163	movl	(%edi),%edx
1164	subl	%eax,%ecx
1165	movl	$0,%eax
1166	adcl	%eax,%eax
1167	subl	%edx,%ecx
1168	adcl	$0,%eax
1169	movl	%ecx,(%ebx)
1170	addl	$4,%esi
1171	addl	$4,%edi
1172	addl	$4,%ebx
1173	decl	%ebp
1174	jz	.L031aw_end
1175
1176	movl	(%esi),%ecx
1177	movl	(%edi),%edx
1178	subl	%eax,%ecx
1179	movl	$0,%eax
1180	adcl	%eax,%eax
1181	subl	%edx,%ecx
1182	adcl	$0,%eax
1183	movl	%ecx,(%ebx)
1184	addl	$4,%esi
1185	addl	$4,%edi
1186	addl	$4,%ebx
1187.L031aw_end:
1188	cmpl	$0,36(%esp)
1189	je	.L032pw_end
1190	movl	36(%esp),%ebp
1191	cmpl	$0,%ebp
1192	je	.L032pw_end
1193	jge	.L033pw_pos
1194
1195	movl	$0,%edx
1196	subl	%ebp,%edx
1197	movl	%edx,%ebp
1198	andl	$4294967288,%ebp
1199	jz	.L034pw_neg_finish
1200.L035pw_neg_loop:
1201
1202	movl	$0,%ecx
1203	movl	(%edi),%edx
1204	subl	%eax,%ecx
1205	movl	$0,%eax
1206	adcl	%eax,%eax
1207	subl	%edx,%ecx
1208	adcl	$0,%eax
1209	movl	%ecx,(%ebx)
1210
1211	movl	$0,%ecx
1212	movl	4(%edi),%edx
1213	subl	%eax,%ecx
1214	movl	$0,%eax
1215	adcl	%eax,%eax
1216	subl	%edx,%ecx
1217	adcl	$0,%eax
1218	movl	%ecx,4(%ebx)
1219
1220	movl	$0,%ecx
1221	movl	8(%edi),%edx
1222	subl	%eax,%ecx
1223	movl	$0,%eax
1224	adcl	%eax,%eax
1225	subl	%edx,%ecx
1226	adcl	$0,%eax
1227	movl	%ecx,8(%ebx)
1228
1229	movl	$0,%ecx
1230	movl	12(%edi),%edx
1231	subl	%eax,%ecx
1232	movl	$0,%eax
1233	adcl	%eax,%eax
1234	subl	%edx,%ecx
1235	adcl	$0,%eax
1236	movl	%ecx,12(%ebx)
1237
1238	movl	$0,%ecx
1239	movl	16(%edi),%edx
1240	subl	%eax,%ecx
1241	movl	$0,%eax
1242	adcl	%eax,%eax
1243	subl	%edx,%ecx
1244	adcl	$0,%eax
1245	movl	%ecx,16(%ebx)
1246
1247	movl	$0,%ecx
1248	movl	20(%edi),%edx
1249	subl	%eax,%ecx
1250	movl	$0,%eax
1251	adcl	%eax,%eax
1252	subl	%edx,%ecx
1253	adcl	$0,%eax
1254	movl	%ecx,20(%ebx)
1255
1256	movl	$0,%ecx
1257	movl	24(%edi),%edx
1258	subl	%eax,%ecx
1259	movl	$0,%eax
1260	adcl	%eax,%eax
1261	subl	%edx,%ecx
1262	adcl	$0,%eax
1263	movl	%ecx,24(%ebx)
1264
1265	movl	$0,%ecx
1266	movl	28(%edi),%edx
1267	subl	%eax,%ecx
1268	movl	$0,%eax
1269	adcl	%eax,%eax
1270	subl	%edx,%ecx
1271	adcl	$0,%eax
1272	movl	%ecx,28(%ebx)
1273
1274	addl	$32,%edi
1275	addl	$32,%ebx
1276	subl	$8,%ebp
1277	jnz	.L035pw_neg_loop
1278.L034pw_neg_finish:
1279	movl	36(%esp),%edx
1280	movl	$0,%ebp
1281	subl	%edx,%ebp
1282	andl	$7,%ebp
1283	jz	.L032pw_end
1284
1285	movl	$0,%ecx
1286	movl	(%edi),%edx
1287	subl	%eax,%ecx
1288	movl	$0,%eax
1289	adcl	%eax,%eax
1290	subl	%edx,%ecx
1291	adcl	$0,%eax
1292	decl	%ebp
1293	movl	%ecx,(%ebx)
1294	jz	.L032pw_end
1295
1296	movl	$0,%ecx
1297	movl	4(%edi),%edx
1298	subl	%eax,%ecx
1299	movl	$0,%eax
1300	adcl	%eax,%eax
1301	subl	%edx,%ecx
1302	adcl	$0,%eax
1303	decl	%ebp
1304	movl	%ecx,4(%ebx)
1305	jz	.L032pw_end
1306
1307	movl	$0,%ecx
1308	movl	8(%edi),%edx
1309	subl	%eax,%ecx
1310	movl	$0,%eax
1311	adcl	%eax,%eax
1312	subl	%edx,%ecx
1313	adcl	$0,%eax
1314	decl	%ebp
1315	movl	%ecx,8(%ebx)
1316	jz	.L032pw_end
1317
1318	movl	$0,%ecx
1319	movl	12(%edi),%edx
1320	subl	%eax,%ecx
1321	movl	$0,%eax
1322	adcl	%eax,%eax
1323	subl	%edx,%ecx
1324	adcl	$0,%eax
1325	decl	%ebp
1326	movl	%ecx,12(%ebx)
1327	jz	.L032pw_end
1328
1329	movl	$0,%ecx
1330	movl	16(%edi),%edx
1331	subl	%eax,%ecx
1332	movl	$0,%eax
1333	adcl	%eax,%eax
1334	subl	%edx,%ecx
1335	adcl	$0,%eax
1336	decl	%ebp
1337	movl	%ecx,16(%ebx)
1338	jz	.L032pw_end
1339
1340	movl	$0,%ecx
1341	movl	20(%edi),%edx
1342	subl	%eax,%ecx
1343	movl	$0,%eax
1344	adcl	%eax,%eax
1345	subl	%edx,%ecx
1346	adcl	$0,%eax
1347	decl	%ebp
1348	movl	%ecx,20(%ebx)
1349	jz	.L032pw_end
1350
1351	movl	$0,%ecx
1352	movl	24(%edi),%edx
1353	subl	%eax,%ecx
1354	movl	$0,%eax
1355	adcl	%eax,%eax
1356	subl	%edx,%ecx
1357	adcl	$0,%eax
1358	movl	%ecx,24(%ebx)
1359	jmp	.L032pw_end
1360.L033pw_pos:
1361	andl	$4294967288,%ebp
1362	jz	.L036pw_pos_finish
1363.L037pw_pos_loop:
1364
1365	movl	(%esi),%ecx
1366	subl	%eax,%ecx
1367	movl	%ecx,(%ebx)
1368	jnc	.L038pw_nc0
1369
1370	movl	4(%esi),%ecx
1371	subl	%eax,%ecx
1372	movl	%ecx,4(%ebx)
1373	jnc	.L039pw_nc1
1374
1375	movl	8(%esi),%ecx
1376	subl	%eax,%ecx
1377	movl	%ecx,8(%ebx)
1378	jnc	.L040pw_nc2
1379
1380	movl	12(%esi),%ecx
1381	subl	%eax,%ecx
1382	movl	%ecx,12(%ebx)
1383	jnc	.L041pw_nc3
1384
1385	movl	16(%esi),%ecx
1386	subl	%eax,%ecx
1387	movl	%ecx,16(%ebx)
1388	jnc	.L042pw_nc4
1389
1390	movl	20(%esi),%ecx
1391	subl	%eax,%ecx
1392	movl	%ecx,20(%ebx)
1393	jnc	.L043pw_nc5
1394
1395	movl	24(%esi),%ecx
1396	subl	%eax,%ecx
1397	movl	%ecx,24(%ebx)
1398	jnc	.L044pw_nc6
1399
1400	movl	28(%esi),%ecx
1401	subl	%eax,%ecx
1402	movl	%ecx,28(%ebx)
1403	jnc	.L045pw_nc7
1404
1405	addl	$32,%esi
1406	addl	$32,%ebx
1407	subl	$8,%ebp
1408	jnz	.L037pw_pos_loop
1409.L036pw_pos_finish:
1410	movl	36(%esp),%ebp
1411	andl	$7,%ebp
1412	jz	.L032pw_end
1413
1414	movl	(%esi),%ecx
1415	subl	%eax,%ecx
1416	movl	%ecx,(%ebx)
1417	jnc	.L046pw_tail_nc0
1418	decl	%ebp
1419	jz	.L032pw_end
1420
1421	movl	4(%esi),%ecx
1422	subl	%eax,%ecx
1423	movl	%ecx,4(%ebx)
1424	jnc	.L047pw_tail_nc1
1425	decl	%ebp
1426	jz	.L032pw_end
1427
1428	movl	8(%esi),%ecx
1429	subl	%eax,%ecx
1430	movl	%ecx,8(%ebx)
1431	jnc	.L048pw_tail_nc2
1432	decl	%ebp
1433	jz	.L032pw_end
1434
1435	movl	12(%esi),%ecx
1436	subl	%eax,%ecx
1437	movl	%ecx,12(%ebx)
1438	jnc	.L049pw_tail_nc3
1439	decl	%ebp
1440	jz	.L032pw_end
1441
1442	movl	16(%esi),%ecx
1443	subl	%eax,%ecx
1444	movl	%ecx,16(%ebx)
1445	jnc	.L050pw_tail_nc4
1446	decl	%ebp
1447	jz	.L032pw_end
1448
1449	movl	20(%esi),%ecx
1450	subl	%eax,%ecx
1451	movl	%ecx,20(%ebx)
1452	jnc	.L051pw_tail_nc5
1453	decl	%ebp
1454	jz	.L032pw_end
1455
1456	movl	24(%esi),%ecx
1457	subl	%eax,%ecx
1458	movl	%ecx,24(%ebx)
1459	jnc	.L052pw_tail_nc6
1460	movl	$1,%eax
1461	jmp	.L032pw_end
1462.L053pw_nc_loop:
1463	movl	(%esi),%ecx
1464	movl	%ecx,(%ebx)
1465.L038pw_nc0:
1466	movl	4(%esi),%ecx
1467	movl	%ecx,4(%ebx)
1468.L039pw_nc1:
1469	movl	8(%esi),%ecx
1470	movl	%ecx,8(%ebx)
1471.L040pw_nc2:
1472	movl	12(%esi),%ecx
1473	movl	%ecx,12(%ebx)
1474.L041pw_nc3:
1475	movl	16(%esi),%ecx
1476	movl	%ecx,16(%ebx)
1477.L042pw_nc4:
1478	movl	20(%esi),%ecx
1479	movl	%ecx,20(%ebx)
1480.L043pw_nc5:
1481	movl	24(%esi),%ecx
1482	movl	%ecx,24(%ebx)
1483.L044pw_nc6:
1484	movl	28(%esi),%ecx
1485	movl	%ecx,28(%ebx)
1486.L045pw_nc7:
1487
1488	addl	$32,%esi
1489	addl	$32,%ebx
1490	subl	$8,%ebp
1491	jnz	.L053pw_nc_loop
1492	movl	36(%esp),%ebp
1493	andl	$7,%ebp
1494	jz	.L054pw_nc_end
1495	movl	(%esi),%ecx
1496	movl	%ecx,(%ebx)
1497.L046pw_tail_nc0:
1498	decl	%ebp
1499	jz	.L054pw_nc_end
1500	movl	4(%esi),%ecx
1501	movl	%ecx,4(%ebx)
1502.L047pw_tail_nc1:
1503	decl	%ebp
1504	jz	.L054pw_nc_end
1505	movl	8(%esi),%ecx
1506	movl	%ecx,8(%ebx)
1507.L048pw_tail_nc2:
1508	decl	%ebp
1509	jz	.L054pw_nc_end
1510	movl	12(%esi),%ecx
1511	movl	%ecx,12(%ebx)
1512.L049pw_tail_nc3:
1513	decl	%ebp
1514	jz	.L054pw_nc_end
1515	movl	16(%esi),%ecx
1516	movl	%ecx,16(%ebx)
1517.L050pw_tail_nc4:
1518	decl	%ebp
1519	jz	.L054pw_nc_end
1520	movl	20(%esi),%ecx
1521	movl	%ecx,20(%ebx)
1522.L051pw_tail_nc5:
1523	decl	%ebp
1524	jz	.L054pw_nc_end
1525	movl	24(%esi),%ecx
1526	movl	%ecx,24(%ebx)
1527.L052pw_tail_nc6:
1528.L054pw_nc_end:
1529	movl	$0,%eax
1530.L032pw_end:
1531	popl	%edi
1532	popl	%esi
1533	popl	%ebx
1534	popl	%ebp
1535	ret
1536.size	bn_sub_part_words,.-.L_bn_sub_part_words_begin
1537#endif
1538