• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.globl	bn_sub_part_words
997.hidden	bn_sub_part_words
998.type	bn_sub_part_words,@function
999.align	16
1000bn_sub_part_words:
1001.L_bn_sub_part_words_begin:
1002	pushl	%ebp
1003	pushl	%ebx
1004	pushl	%esi
1005	pushl	%edi
1006
1007	movl	20(%esp),%ebx
1008	movl	24(%esp),%esi
1009	movl	28(%esp),%edi
1010	movl	32(%esp),%ebp
1011	xorl	%eax,%eax
1012	andl	$4294967288,%ebp
1013	jz	.L029aw_finish
1014.L030aw_loop:
1015
1016	movl	(%esi),%ecx
1017	movl	(%edi),%edx
1018	subl	%eax,%ecx
1019	movl	$0,%eax
1020	adcl	%eax,%eax
1021	subl	%edx,%ecx
1022	adcl	$0,%eax
1023	movl	%ecx,(%ebx)
1024
1025	movl	4(%esi),%ecx
1026	movl	4(%edi),%edx
1027	subl	%eax,%ecx
1028	movl	$0,%eax
1029	adcl	%eax,%eax
1030	subl	%edx,%ecx
1031	adcl	$0,%eax
1032	movl	%ecx,4(%ebx)
1033
1034	movl	8(%esi),%ecx
1035	movl	8(%edi),%edx
1036	subl	%eax,%ecx
1037	movl	$0,%eax
1038	adcl	%eax,%eax
1039	subl	%edx,%ecx
1040	adcl	$0,%eax
1041	movl	%ecx,8(%ebx)
1042
1043	movl	12(%esi),%ecx
1044	movl	12(%edi),%edx
1045	subl	%eax,%ecx
1046	movl	$0,%eax
1047	adcl	%eax,%eax
1048	subl	%edx,%ecx
1049	adcl	$0,%eax
1050	movl	%ecx,12(%ebx)
1051
1052	movl	16(%esi),%ecx
1053	movl	16(%edi),%edx
1054	subl	%eax,%ecx
1055	movl	$0,%eax
1056	adcl	%eax,%eax
1057	subl	%edx,%ecx
1058	adcl	$0,%eax
1059	movl	%ecx,16(%ebx)
1060
1061	movl	20(%esi),%ecx
1062	movl	20(%edi),%edx
1063	subl	%eax,%ecx
1064	movl	$0,%eax
1065	adcl	%eax,%eax
1066	subl	%edx,%ecx
1067	adcl	$0,%eax
1068	movl	%ecx,20(%ebx)
1069
1070	movl	24(%esi),%ecx
1071	movl	24(%edi),%edx
1072	subl	%eax,%ecx
1073	movl	$0,%eax
1074	adcl	%eax,%eax
1075	subl	%edx,%ecx
1076	adcl	$0,%eax
1077	movl	%ecx,24(%ebx)
1078
1079	movl	28(%esi),%ecx
1080	movl	28(%edi),%edx
1081	subl	%eax,%ecx
1082	movl	$0,%eax
1083	adcl	%eax,%eax
1084	subl	%edx,%ecx
1085	adcl	$0,%eax
1086	movl	%ecx,28(%ebx)
1087
1088	addl	$32,%esi
1089	addl	$32,%edi
1090	addl	$32,%ebx
1091	subl	$8,%ebp
1092	jnz	.L030aw_loop
1093.L029aw_finish:
1094	movl	32(%esp),%ebp
1095	andl	$7,%ebp
1096	jz	.L031aw_end
1097
1098	movl	(%esi),%ecx
1099	movl	(%edi),%edx
1100	subl	%eax,%ecx
1101	movl	$0,%eax
1102	adcl	%eax,%eax
1103	subl	%edx,%ecx
1104	adcl	$0,%eax
1105	movl	%ecx,(%ebx)
1106	addl	$4,%esi
1107	addl	$4,%edi
1108	addl	$4,%ebx
1109	decl	%ebp
1110	jz	.L031aw_end
1111
1112	movl	(%esi),%ecx
1113	movl	(%edi),%edx
1114	subl	%eax,%ecx
1115	movl	$0,%eax
1116	adcl	%eax,%eax
1117	subl	%edx,%ecx
1118	adcl	$0,%eax
1119	movl	%ecx,(%ebx)
1120	addl	$4,%esi
1121	addl	$4,%edi
1122	addl	$4,%ebx
1123	decl	%ebp
1124	jz	.L031aw_end
1125
1126	movl	(%esi),%ecx
1127	movl	(%edi),%edx
1128	subl	%eax,%ecx
1129	movl	$0,%eax
1130	adcl	%eax,%eax
1131	subl	%edx,%ecx
1132	adcl	$0,%eax
1133	movl	%ecx,(%ebx)
1134	addl	$4,%esi
1135	addl	$4,%edi
1136	addl	$4,%ebx
1137	decl	%ebp
1138	jz	.L031aw_end
1139
1140	movl	(%esi),%ecx
1141	movl	(%edi),%edx
1142	subl	%eax,%ecx
1143	movl	$0,%eax
1144	adcl	%eax,%eax
1145	subl	%edx,%ecx
1146	adcl	$0,%eax
1147	movl	%ecx,(%ebx)
1148	addl	$4,%esi
1149	addl	$4,%edi
1150	addl	$4,%ebx
1151	decl	%ebp
1152	jz	.L031aw_end
1153
1154	movl	(%esi),%ecx
1155	movl	(%edi),%edx
1156	subl	%eax,%ecx
1157	movl	$0,%eax
1158	adcl	%eax,%eax
1159	subl	%edx,%ecx
1160	adcl	$0,%eax
1161	movl	%ecx,(%ebx)
1162	addl	$4,%esi
1163	addl	$4,%edi
1164	addl	$4,%ebx
1165	decl	%ebp
1166	jz	.L031aw_end
1167
1168	movl	(%esi),%ecx
1169	movl	(%edi),%edx
1170	subl	%eax,%ecx
1171	movl	$0,%eax
1172	adcl	%eax,%eax
1173	subl	%edx,%ecx
1174	adcl	$0,%eax
1175	movl	%ecx,(%ebx)
1176	addl	$4,%esi
1177	addl	$4,%edi
1178	addl	$4,%ebx
1179	decl	%ebp
1180	jz	.L031aw_end
1181
1182	movl	(%esi),%ecx
1183	movl	(%edi),%edx
1184	subl	%eax,%ecx
1185	movl	$0,%eax
1186	adcl	%eax,%eax
1187	subl	%edx,%ecx
1188	adcl	$0,%eax
1189	movl	%ecx,(%ebx)
1190	addl	$4,%esi
1191	addl	$4,%edi
1192	addl	$4,%ebx
1193.L031aw_end:
1194	cmpl	$0,36(%esp)
1195	je	.L032pw_end
1196	movl	36(%esp),%ebp
1197	cmpl	$0,%ebp
1198	je	.L032pw_end
1199	jge	.L033pw_pos
1200
1201	movl	$0,%edx
1202	subl	%ebp,%edx
1203	movl	%edx,%ebp
1204	andl	$4294967288,%ebp
1205	jz	.L034pw_neg_finish
1206.L035pw_neg_loop:
1207
1208	movl	$0,%ecx
1209	movl	(%edi),%edx
1210	subl	%eax,%ecx
1211	movl	$0,%eax
1212	adcl	%eax,%eax
1213	subl	%edx,%ecx
1214	adcl	$0,%eax
1215	movl	%ecx,(%ebx)
1216
1217	movl	$0,%ecx
1218	movl	4(%edi),%edx
1219	subl	%eax,%ecx
1220	movl	$0,%eax
1221	adcl	%eax,%eax
1222	subl	%edx,%ecx
1223	adcl	$0,%eax
1224	movl	%ecx,4(%ebx)
1225
1226	movl	$0,%ecx
1227	movl	8(%edi),%edx
1228	subl	%eax,%ecx
1229	movl	$0,%eax
1230	adcl	%eax,%eax
1231	subl	%edx,%ecx
1232	adcl	$0,%eax
1233	movl	%ecx,8(%ebx)
1234
1235	movl	$0,%ecx
1236	movl	12(%edi),%edx
1237	subl	%eax,%ecx
1238	movl	$0,%eax
1239	adcl	%eax,%eax
1240	subl	%edx,%ecx
1241	adcl	$0,%eax
1242	movl	%ecx,12(%ebx)
1243
1244	movl	$0,%ecx
1245	movl	16(%edi),%edx
1246	subl	%eax,%ecx
1247	movl	$0,%eax
1248	adcl	%eax,%eax
1249	subl	%edx,%ecx
1250	adcl	$0,%eax
1251	movl	%ecx,16(%ebx)
1252
1253	movl	$0,%ecx
1254	movl	20(%edi),%edx
1255	subl	%eax,%ecx
1256	movl	$0,%eax
1257	adcl	%eax,%eax
1258	subl	%edx,%ecx
1259	adcl	$0,%eax
1260	movl	%ecx,20(%ebx)
1261
1262	movl	$0,%ecx
1263	movl	24(%edi),%edx
1264	subl	%eax,%ecx
1265	movl	$0,%eax
1266	adcl	%eax,%eax
1267	subl	%edx,%ecx
1268	adcl	$0,%eax
1269	movl	%ecx,24(%ebx)
1270
1271	movl	$0,%ecx
1272	movl	28(%edi),%edx
1273	subl	%eax,%ecx
1274	movl	$0,%eax
1275	adcl	%eax,%eax
1276	subl	%edx,%ecx
1277	adcl	$0,%eax
1278	movl	%ecx,28(%ebx)
1279
1280	addl	$32,%edi
1281	addl	$32,%ebx
1282	subl	$8,%ebp
1283	jnz	.L035pw_neg_loop
1284.L034pw_neg_finish:
1285	movl	36(%esp),%edx
1286	movl	$0,%ebp
1287	subl	%edx,%ebp
1288	andl	$7,%ebp
1289	jz	.L032pw_end
1290
1291	movl	$0,%ecx
1292	movl	(%edi),%edx
1293	subl	%eax,%ecx
1294	movl	$0,%eax
1295	adcl	%eax,%eax
1296	subl	%edx,%ecx
1297	adcl	$0,%eax
1298	decl	%ebp
1299	movl	%ecx,(%ebx)
1300	jz	.L032pw_end
1301
1302	movl	$0,%ecx
1303	movl	4(%edi),%edx
1304	subl	%eax,%ecx
1305	movl	$0,%eax
1306	adcl	%eax,%eax
1307	subl	%edx,%ecx
1308	adcl	$0,%eax
1309	decl	%ebp
1310	movl	%ecx,4(%ebx)
1311	jz	.L032pw_end
1312
1313	movl	$0,%ecx
1314	movl	8(%edi),%edx
1315	subl	%eax,%ecx
1316	movl	$0,%eax
1317	adcl	%eax,%eax
1318	subl	%edx,%ecx
1319	adcl	$0,%eax
1320	decl	%ebp
1321	movl	%ecx,8(%ebx)
1322	jz	.L032pw_end
1323
1324	movl	$0,%ecx
1325	movl	12(%edi),%edx
1326	subl	%eax,%ecx
1327	movl	$0,%eax
1328	adcl	%eax,%eax
1329	subl	%edx,%ecx
1330	adcl	$0,%eax
1331	decl	%ebp
1332	movl	%ecx,12(%ebx)
1333	jz	.L032pw_end
1334
1335	movl	$0,%ecx
1336	movl	16(%edi),%edx
1337	subl	%eax,%ecx
1338	movl	$0,%eax
1339	adcl	%eax,%eax
1340	subl	%edx,%ecx
1341	adcl	$0,%eax
1342	decl	%ebp
1343	movl	%ecx,16(%ebx)
1344	jz	.L032pw_end
1345
1346	movl	$0,%ecx
1347	movl	20(%edi),%edx
1348	subl	%eax,%ecx
1349	movl	$0,%eax
1350	adcl	%eax,%eax
1351	subl	%edx,%ecx
1352	adcl	$0,%eax
1353	decl	%ebp
1354	movl	%ecx,20(%ebx)
1355	jz	.L032pw_end
1356
1357	movl	$0,%ecx
1358	movl	24(%edi),%edx
1359	subl	%eax,%ecx
1360	movl	$0,%eax
1361	adcl	%eax,%eax
1362	subl	%edx,%ecx
1363	adcl	$0,%eax
1364	movl	%ecx,24(%ebx)
1365	jmp	.L032pw_end
1366.L033pw_pos:
1367	andl	$4294967288,%ebp
1368	jz	.L036pw_pos_finish
1369.L037pw_pos_loop:
1370
1371	movl	(%esi),%ecx
1372	subl	%eax,%ecx
1373	movl	%ecx,(%ebx)
1374	jnc	.L038pw_nc0
1375
1376	movl	4(%esi),%ecx
1377	subl	%eax,%ecx
1378	movl	%ecx,4(%ebx)
1379	jnc	.L039pw_nc1
1380
1381	movl	8(%esi),%ecx
1382	subl	%eax,%ecx
1383	movl	%ecx,8(%ebx)
1384	jnc	.L040pw_nc2
1385
1386	movl	12(%esi),%ecx
1387	subl	%eax,%ecx
1388	movl	%ecx,12(%ebx)
1389	jnc	.L041pw_nc3
1390
1391	movl	16(%esi),%ecx
1392	subl	%eax,%ecx
1393	movl	%ecx,16(%ebx)
1394	jnc	.L042pw_nc4
1395
1396	movl	20(%esi),%ecx
1397	subl	%eax,%ecx
1398	movl	%ecx,20(%ebx)
1399	jnc	.L043pw_nc5
1400
1401	movl	24(%esi),%ecx
1402	subl	%eax,%ecx
1403	movl	%ecx,24(%ebx)
1404	jnc	.L044pw_nc6
1405
1406	movl	28(%esi),%ecx
1407	subl	%eax,%ecx
1408	movl	%ecx,28(%ebx)
1409	jnc	.L045pw_nc7
1410
1411	addl	$32,%esi
1412	addl	$32,%ebx
1413	subl	$8,%ebp
1414	jnz	.L037pw_pos_loop
1415.L036pw_pos_finish:
1416	movl	36(%esp),%ebp
1417	andl	$7,%ebp
1418	jz	.L032pw_end
1419
1420	movl	(%esi),%ecx
1421	subl	%eax,%ecx
1422	movl	%ecx,(%ebx)
1423	jnc	.L046pw_tail_nc0
1424	decl	%ebp
1425	jz	.L032pw_end
1426
1427	movl	4(%esi),%ecx
1428	subl	%eax,%ecx
1429	movl	%ecx,4(%ebx)
1430	jnc	.L047pw_tail_nc1
1431	decl	%ebp
1432	jz	.L032pw_end
1433
1434	movl	8(%esi),%ecx
1435	subl	%eax,%ecx
1436	movl	%ecx,8(%ebx)
1437	jnc	.L048pw_tail_nc2
1438	decl	%ebp
1439	jz	.L032pw_end
1440
1441	movl	12(%esi),%ecx
1442	subl	%eax,%ecx
1443	movl	%ecx,12(%ebx)
1444	jnc	.L049pw_tail_nc3
1445	decl	%ebp
1446	jz	.L032pw_end
1447
1448	movl	16(%esi),%ecx
1449	subl	%eax,%ecx
1450	movl	%ecx,16(%ebx)
1451	jnc	.L050pw_tail_nc4
1452	decl	%ebp
1453	jz	.L032pw_end
1454
1455	movl	20(%esi),%ecx
1456	subl	%eax,%ecx
1457	movl	%ecx,20(%ebx)
1458	jnc	.L051pw_tail_nc5
1459	decl	%ebp
1460	jz	.L032pw_end
1461
1462	movl	24(%esi),%ecx
1463	subl	%eax,%ecx
1464	movl	%ecx,24(%ebx)
1465	jnc	.L052pw_tail_nc6
1466	movl	$1,%eax
1467	jmp	.L032pw_end
1468.L053pw_nc_loop:
1469	movl	(%esi),%ecx
1470	movl	%ecx,(%ebx)
1471.L038pw_nc0:
1472	movl	4(%esi),%ecx
1473	movl	%ecx,4(%ebx)
1474.L039pw_nc1:
1475	movl	8(%esi),%ecx
1476	movl	%ecx,8(%ebx)
1477.L040pw_nc2:
1478	movl	12(%esi),%ecx
1479	movl	%ecx,12(%ebx)
1480.L041pw_nc3:
1481	movl	16(%esi),%ecx
1482	movl	%ecx,16(%ebx)
1483.L042pw_nc4:
1484	movl	20(%esi),%ecx
1485	movl	%ecx,20(%ebx)
1486.L043pw_nc5:
1487	movl	24(%esi),%ecx
1488	movl	%ecx,24(%ebx)
1489.L044pw_nc6:
1490	movl	28(%esi),%ecx
1491	movl	%ecx,28(%ebx)
1492.L045pw_nc7:
1493
1494	addl	$32,%esi
1495	addl	$32,%ebx
1496	subl	$8,%ebp
1497	jnz	.L053pw_nc_loop
1498	movl	36(%esp),%ebp
1499	andl	$7,%ebp
1500	jz	.L054pw_nc_end
1501	movl	(%esi),%ecx
1502	movl	%ecx,(%ebx)
1503.L046pw_tail_nc0:
1504	decl	%ebp
1505	jz	.L054pw_nc_end
1506	movl	4(%esi),%ecx
1507	movl	%ecx,4(%ebx)
1508.L047pw_tail_nc1:
1509	decl	%ebp
1510	jz	.L054pw_nc_end
1511	movl	8(%esi),%ecx
1512	movl	%ecx,8(%ebx)
1513.L048pw_tail_nc2:
1514	decl	%ebp
1515	jz	.L054pw_nc_end
1516	movl	12(%esi),%ecx
1517	movl	%ecx,12(%ebx)
1518.L049pw_tail_nc3:
1519	decl	%ebp
1520	jz	.L054pw_nc_end
1521	movl	16(%esi),%ecx
1522	movl	%ecx,16(%ebx)
1523.L050pw_tail_nc4:
1524	decl	%ebp
1525	jz	.L054pw_nc_end
1526	movl	20(%esi),%ecx
1527	movl	%ecx,20(%ebx)
1528.L051pw_tail_nc5:
1529	decl	%ebp
1530	jz	.L054pw_nc_end
1531	movl	24(%esi),%ecx
1532	movl	%ecx,24(%ebx)
1533.L052pw_tail_nc6:
1534.L054pw_nc_end:
1535	movl	$0,%eax
1536.L032pw_end:
1537	popl	%edi
1538	popl	%esi
1539	popl	%ebx
1540	popl	%ebp
1541	ret
1542.size	bn_sub_part_words,.-.L_bn_sub_part_words_begin
1543#endif
1544.section	.note.GNU-stack,"",@progbits
1545