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