xref: /aosp_15_r20/external/boringssl/src/gen/bcm/bn-586-apple.S (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
1*8fb009dcSAndroid Build Coastguard Worker// This file is generated from a similarly-named Perl script in the BoringSSL
2*8fb009dcSAndroid Build Coastguard Worker// source tree. Do not edit by hand.
3*8fb009dcSAndroid Build Coastguard Worker
4*8fb009dcSAndroid Build Coastguard Worker#include <openssl/asm_base.h>
5*8fb009dcSAndroid Build Coastguard Worker
6*8fb009dcSAndroid Build Coastguard Worker#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__APPLE__)
7*8fb009dcSAndroid Build Coastguard Worker.text
8*8fb009dcSAndroid Build Coastguard Worker.globl	_bn_mul_add_words
9*8fb009dcSAndroid Build Coastguard Worker.private_extern	_bn_mul_add_words
10*8fb009dcSAndroid Build Coastguard Worker.align	4
11*8fb009dcSAndroid Build Coastguard Worker_bn_mul_add_words:
12*8fb009dcSAndroid Build Coastguard WorkerL_bn_mul_add_words_begin:
13*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esp),%eax
14*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esp),%edx
15*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esp),%ecx
16*8fb009dcSAndroid Build Coastguard Worker	movd	16(%esp),%mm0
17*8fb009dcSAndroid Build Coastguard Worker	pxor	%mm1,%mm1
18*8fb009dcSAndroid Build Coastguard Worker	jmp	L000maw_sse2_entry
19*8fb009dcSAndroid Build Coastguard Worker.align	4,0x90
20*8fb009dcSAndroid Build Coastguard WorkerL001maw_sse2_unrolled:
21*8fb009dcSAndroid Build Coastguard Worker	movd	(%eax),%mm3
22*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm3,%mm1
23*8fb009dcSAndroid Build Coastguard Worker	movd	(%edx),%mm2
24*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm2
25*8fb009dcSAndroid Build Coastguard Worker	movd	4(%edx),%mm4
26*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm4
27*8fb009dcSAndroid Build Coastguard Worker	movd	8(%edx),%mm6
28*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm6
29*8fb009dcSAndroid Build Coastguard Worker	movd	12(%edx),%mm7
30*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm7
31*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm2,%mm1
32*8fb009dcSAndroid Build Coastguard Worker	movd	4(%eax),%mm3
33*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm4,%mm3
34*8fb009dcSAndroid Build Coastguard Worker	movd	8(%eax),%mm5
35*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm6,%mm5
36*8fb009dcSAndroid Build Coastguard Worker	movd	12(%eax),%mm4
37*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm4,%mm7
38*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,(%eax)
39*8fb009dcSAndroid Build Coastguard Worker	movd	16(%edx),%mm2
40*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm2
41*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
42*8fb009dcSAndroid Build Coastguard Worker	movd	20(%edx),%mm4
43*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm4
44*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm3,%mm1
45*8fb009dcSAndroid Build Coastguard Worker	movd	24(%edx),%mm6
46*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm6
47*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,4(%eax)
48*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
49*8fb009dcSAndroid Build Coastguard Worker	movd	28(%edx),%mm3
50*8fb009dcSAndroid Build Coastguard Worker	addl	$32,%edx
51*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm3
52*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm5,%mm1
53*8fb009dcSAndroid Build Coastguard Worker	movd	16(%eax),%mm5
54*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm5,%mm2
55*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,8(%eax)
56*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
57*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm7,%mm1
58*8fb009dcSAndroid Build Coastguard Worker	movd	20(%eax),%mm5
59*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm5,%mm4
60*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,12(%eax)
61*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
62*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm2,%mm1
63*8fb009dcSAndroid Build Coastguard Worker	movd	24(%eax),%mm5
64*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm5,%mm6
65*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,16(%eax)
66*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
67*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm4,%mm1
68*8fb009dcSAndroid Build Coastguard Worker	movd	28(%eax),%mm5
69*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm5,%mm3
70*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,20(%eax)
71*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
72*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm6,%mm1
73*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,24(%eax)
74*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
75*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm3,%mm1
76*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,28(%eax)
77*8fb009dcSAndroid Build Coastguard Worker	leal	32(%eax),%eax
78*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
79*8fb009dcSAndroid Build Coastguard Worker	subl	$8,%ecx
80*8fb009dcSAndroid Build Coastguard Worker	jz	L002maw_sse2_exit
81*8fb009dcSAndroid Build Coastguard WorkerL000maw_sse2_entry:
82*8fb009dcSAndroid Build Coastguard Worker	testl	$4294967288,%ecx
83*8fb009dcSAndroid Build Coastguard Worker	jnz	L001maw_sse2_unrolled
84*8fb009dcSAndroid Build Coastguard Worker.align	2,0x90
85*8fb009dcSAndroid Build Coastguard WorkerL003maw_sse2_loop:
86*8fb009dcSAndroid Build Coastguard Worker	movd	(%edx),%mm2
87*8fb009dcSAndroid Build Coastguard Worker	movd	(%eax),%mm3
88*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm2
89*8fb009dcSAndroid Build Coastguard Worker	leal	4(%edx),%edx
90*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm3,%mm1
91*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm2,%mm1
92*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,(%eax)
93*8fb009dcSAndroid Build Coastguard Worker	subl	$1,%ecx
94*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
95*8fb009dcSAndroid Build Coastguard Worker	leal	4(%eax),%eax
96*8fb009dcSAndroid Build Coastguard Worker	jnz	L003maw_sse2_loop
97*8fb009dcSAndroid Build Coastguard WorkerL002maw_sse2_exit:
98*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,%eax
99*8fb009dcSAndroid Build Coastguard Worker	emms
100*8fb009dcSAndroid Build Coastguard Worker	ret
101*8fb009dcSAndroid Build Coastguard Worker	popl	%edi
102*8fb009dcSAndroid Build Coastguard Worker	popl	%esi
103*8fb009dcSAndroid Build Coastguard Worker	popl	%ebx
104*8fb009dcSAndroid Build Coastguard Worker	popl	%ebp
105*8fb009dcSAndroid Build Coastguard Worker	ret
106*8fb009dcSAndroid Build Coastguard Worker.globl	_bn_mul_words
107*8fb009dcSAndroid Build Coastguard Worker.private_extern	_bn_mul_words
108*8fb009dcSAndroid Build Coastguard Worker.align	4
109*8fb009dcSAndroid Build Coastguard Worker_bn_mul_words:
110*8fb009dcSAndroid Build Coastguard WorkerL_bn_mul_words_begin:
111*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esp),%eax
112*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esp),%edx
113*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esp),%ecx
114*8fb009dcSAndroid Build Coastguard Worker	movd	16(%esp),%mm0
115*8fb009dcSAndroid Build Coastguard Worker	pxor	%mm1,%mm1
116*8fb009dcSAndroid Build Coastguard Worker.align	4,0x90
117*8fb009dcSAndroid Build Coastguard WorkerL004mw_sse2_loop:
118*8fb009dcSAndroid Build Coastguard Worker	movd	(%edx),%mm2
119*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm2
120*8fb009dcSAndroid Build Coastguard Worker	leal	4(%edx),%edx
121*8fb009dcSAndroid Build Coastguard Worker	paddq	%mm2,%mm1
122*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,(%eax)
123*8fb009dcSAndroid Build Coastguard Worker	subl	$1,%ecx
124*8fb009dcSAndroid Build Coastguard Worker	psrlq	$32,%mm1
125*8fb009dcSAndroid Build Coastguard Worker	leal	4(%eax),%eax
126*8fb009dcSAndroid Build Coastguard Worker	jnz	L004mw_sse2_loop
127*8fb009dcSAndroid Build Coastguard Worker	movd	%mm1,%eax
128*8fb009dcSAndroid Build Coastguard Worker	emms
129*8fb009dcSAndroid Build Coastguard Worker	ret
130*8fb009dcSAndroid Build Coastguard Worker	popl	%edi
131*8fb009dcSAndroid Build Coastguard Worker	popl	%esi
132*8fb009dcSAndroid Build Coastguard Worker	popl	%ebx
133*8fb009dcSAndroid Build Coastguard Worker	popl	%ebp
134*8fb009dcSAndroid Build Coastguard Worker	ret
135*8fb009dcSAndroid Build Coastguard Worker.globl	_bn_sqr_words
136*8fb009dcSAndroid Build Coastguard Worker.private_extern	_bn_sqr_words
137*8fb009dcSAndroid Build Coastguard Worker.align	4
138*8fb009dcSAndroid Build Coastguard Worker_bn_sqr_words:
139*8fb009dcSAndroid Build Coastguard WorkerL_bn_sqr_words_begin:
140*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esp),%eax
141*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esp),%edx
142*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esp),%ecx
143*8fb009dcSAndroid Build Coastguard Worker.align	4,0x90
144*8fb009dcSAndroid Build Coastguard WorkerL005sqr_sse2_loop:
145*8fb009dcSAndroid Build Coastguard Worker	movd	(%edx),%mm0
146*8fb009dcSAndroid Build Coastguard Worker	pmuludq	%mm0,%mm0
147*8fb009dcSAndroid Build Coastguard Worker	leal	4(%edx),%edx
148*8fb009dcSAndroid Build Coastguard Worker	movq	%mm0,(%eax)
149*8fb009dcSAndroid Build Coastguard Worker	subl	$1,%ecx
150*8fb009dcSAndroid Build Coastguard Worker	leal	8(%eax),%eax
151*8fb009dcSAndroid Build Coastguard Worker	jnz	L005sqr_sse2_loop
152*8fb009dcSAndroid Build Coastguard Worker	emms
153*8fb009dcSAndroid Build Coastguard Worker	ret
154*8fb009dcSAndroid Build Coastguard Worker	popl	%edi
155*8fb009dcSAndroid Build Coastguard Worker	popl	%esi
156*8fb009dcSAndroid Build Coastguard Worker	popl	%ebx
157*8fb009dcSAndroid Build Coastguard Worker	popl	%ebp
158*8fb009dcSAndroid Build Coastguard Worker	ret
159*8fb009dcSAndroid Build Coastguard Worker.globl	_bn_div_words
160*8fb009dcSAndroid Build Coastguard Worker.private_extern	_bn_div_words
161*8fb009dcSAndroid Build Coastguard Worker.align	4
162*8fb009dcSAndroid Build Coastguard Worker_bn_div_words:
163*8fb009dcSAndroid Build Coastguard WorkerL_bn_div_words_begin:
164*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esp),%edx
165*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esp),%eax
166*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esp),%ecx
167*8fb009dcSAndroid Build Coastguard Worker	divl	%ecx
168*8fb009dcSAndroid Build Coastguard Worker	ret
169*8fb009dcSAndroid Build Coastguard Worker.globl	_bn_add_words
170*8fb009dcSAndroid Build Coastguard Worker.private_extern	_bn_add_words
171*8fb009dcSAndroid Build Coastguard Worker.align	4
172*8fb009dcSAndroid Build Coastguard Worker_bn_add_words:
173*8fb009dcSAndroid Build Coastguard WorkerL_bn_add_words_begin:
174*8fb009dcSAndroid Build Coastguard Worker	pushl	%ebp
175*8fb009dcSAndroid Build Coastguard Worker	pushl	%ebx
176*8fb009dcSAndroid Build Coastguard Worker	pushl	%esi
177*8fb009dcSAndroid Build Coastguard Worker	pushl	%edi
178*8fb009dcSAndroid Build Coastguard Worker
179*8fb009dcSAndroid Build Coastguard Worker	movl	20(%esp),%ebx
180*8fb009dcSAndroid Build Coastguard Worker	movl	24(%esp),%esi
181*8fb009dcSAndroid Build Coastguard Worker	movl	28(%esp),%edi
182*8fb009dcSAndroid Build Coastguard Worker	movl	32(%esp),%ebp
183*8fb009dcSAndroid Build Coastguard Worker	xorl	%eax,%eax
184*8fb009dcSAndroid Build Coastguard Worker	andl	$4294967288,%ebp
185*8fb009dcSAndroid Build Coastguard Worker	jz	L006aw_finish
186*8fb009dcSAndroid Build Coastguard WorkerL007aw_loop:
187*8fb009dcSAndroid Build Coastguard Worker	# Round 0
188*8fb009dcSAndroid Build Coastguard Worker	movl	(%esi),%ecx
189*8fb009dcSAndroid Build Coastguard Worker	movl	(%edi),%edx
190*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
191*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
192*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
193*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
194*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
195*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,(%ebx)
196*8fb009dcSAndroid Build Coastguard Worker	# Round 1
197*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esi),%ecx
198*8fb009dcSAndroid Build Coastguard Worker	movl	4(%edi),%edx
199*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
200*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
201*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
202*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
203*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
204*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,4(%ebx)
205*8fb009dcSAndroid Build Coastguard Worker	# Round 2
206*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esi),%ecx
207*8fb009dcSAndroid Build Coastguard Worker	movl	8(%edi),%edx
208*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
209*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
210*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
211*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
212*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
213*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,8(%ebx)
214*8fb009dcSAndroid Build Coastguard Worker	# Round 3
215*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esi),%ecx
216*8fb009dcSAndroid Build Coastguard Worker	movl	12(%edi),%edx
217*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
218*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
219*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
220*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
221*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
222*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,12(%ebx)
223*8fb009dcSAndroid Build Coastguard Worker	# Round 4
224*8fb009dcSAndroid Build Coastguard Worker	movl	16(%esi),%ecx
225*8fb009dcSAndroid Build Coastguard Worker	movl	16(%edi),%edx
226*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
227*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
228*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
229*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
230*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
231*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,16(%ebx)
232*8fb009dcSAndroid Build Coastguard Worker	# Round 5
233*8fb009dcSAndroid Build Coastguard Worker	movl	20(%esi),%ecx
234*8fb009dcSAndroid Build Coastguard Worker	movl	20(%edi),%edx
235*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
236*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
237*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
238*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
239*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
240*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,20(%ebx)
241*8fb009dcSAndroid Build Coastguard Worker	# Round 6
242*8fb009dcSAndroid Build Coastguard Worker	movl	24(%esi),%ecx
243*8fb009dcSAndroid Build Coastguard Worker	movl	24(%edi),%edx
244*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
245*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
246*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
247*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
248*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
249*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,24(%ebx)
250*8fb009dcSAndroid Build Coastguard Worker	# Round 7
251*8fb009dcSAndroid Build Coastguard Worker	movl	28(%esi),%ecx
252*8fb009dcSAndroid Build Coastguard Worker	movl	28(%edi),%edx
253*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
254*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
255*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
256*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
257*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
258*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,28(%ebx)
259*8fb009dcSAndroid Build Coastguard Worker
260*8fb009dcSAndroid Build Coastguard Worker	addl	$32,%esi
261*8fb009dcSAndroid Build Coastguard Worker	addl	$32,%edi
262*8fb009dcSAndroid Build Coastguard Worker	addl	$32,%ebx
263*8fb009dcSAndroid Build Coastguard Worker	subl	$8,%ebp
264*8fb009dcSAndroid Build Coastguard Worker	jnz	L007aw_loop
265*8fb009dcSAndroid Build Coastguard WorkerL006aw_finish:
266*8fb009dcSAndroid Build Coastguard Worker	movl	32(%esp),%ebp
267*8fb009dcSAndroid Build Coastguard Worker	andl	$7,%ebp
268*8fb009dcSAndroid Build Coastguard Worker	jz	L008aw_end
269*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 0
270*8fb009dcSAndroid Build Coastguard Worker	movl	(%esi),%ecx
271*8fb009dcSAndroid Build Coastguard Worker	movl	(%edi),%edx
272*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
273*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
274*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
275*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
276*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
277*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
278*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,(%ebx)
279*8fb009dcSAndroid Build Coastguard Worker	jz	L008aw_end
280*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 1
281*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esi),%ecx
282*8fb009dcSAndroid Build Coastguard Worker	movl	4(%edi),%edx
283*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
284*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
285*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
286*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
287*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
288*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
289*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,4(%ebx)
290*8fb009dcSAndroid Build Coastguard Worker	jz	L008aw_end
291*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 2
292*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esi),%ecx
293*8fb009dcSAndroid Build Coastguard Worker	movl	8(%edi),%edx
294*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
295*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
296*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
297*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
298*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
299*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
300*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,8(%ebx)
301*8fb009dcSAndroid Build Coastguard Worker	jz	L008aw_end
302*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 3
303*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esi),%ecx
304*8fb009dcSAndroid Build Coastguard Worker	movl	12(%edi),%edx
305*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
306*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
307*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
308*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
309*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
310*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
311*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,12(%ebx)
312*8fb009dcSAndroid Build Coastguard Worker	jz	L008aw_end
313*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 4
314*8fb009dcSAndroid Build Coastguard Worker	movl	16(%esi),%ecx
315*8fb009dcSAndroid Build Coastguard Worker	movl	16(%edi),%edx
316*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
317*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
318*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
319*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
320*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
321*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
322*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,16(%ebx)
323*8fb009dcSAndroid Build Coastguard Worker	jz	L008aw_end
324*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 5
325*8fb009dcSAndroid Build Coastguard Worker	movl	20(%esi),%ecx
326*8fb009dcSAndroid Build Coastguard Worker	movl	20(%edi),%edx
327*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
328*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
329*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
330*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
331*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
332*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
333*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,20(%ebx)
334*8fb009dcSAndroid Build Coastguard Worker	jz	L008aw_end
335*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 6
336*8fb009dcSAndroid Build Coastguard Worker	movl	24(%esi),%ecx
337*8fb009dcSAndroid Build Coastguard Worker	movl	24(%edi),%edx
338*8fb009dcSAndroid Build Coastguard Worker	addl	%eax,%ecx
339*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
340*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
341*8fb009dcSAndroid Build Coastguard Worker	addl	%edx,%ecx
342*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
343*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,24(%ebx)
344*8fb009dcSAndroid Build Coastguard WorkerL008aw_end:
345*8fb009dcSAndroid Build Coastguard Worker	popl	%edi
346*8fb009dcSAndroid Build Coastguard Worker	popl	%esi
347*8fb009dcSAndroid Build Coastguard Worker	popl	%ebx
348*8fb009dcSAndroid Build Coastguard Worker	popl	%ebp
349*8fb009dcSAndroid Build Coastguard Worker	ret
350*8fb009dcSAndroid Build Coastguard Worker.globl	_bn_sub_words
351*8fb009dcSAndroid Build Coastguard Worker.private_extern	_bn_sub_words
352*8fb009dcSAndroid Build Coastguard Worker.align	4
353*8fb009dcSAndroid Build Coastguard Worker_bn_sub_words:
354*8fb009dcSAndroid Build Coastguard WorkerL_bn_sub_words_begin:
355*8fb009dcSAndroid Build Coastguard Worker	pushl	%ebp
356*8fb009dcSAndroid Build Coastguard Worker	pushl	%ebx
357*8fb009dcSAndroid Build Coastguard Worker	pushl	%esi
358*8fb009dcSAndroid Build Coastguard Worker	pushl	%edi
359*8fb009dcSAndroid Build Coastguard Worker
360*8fb009dcSAndroid Build Coastguard Worker	movl	20(%esp),%ebx
361*8fb009dcSAndroid Build Coastguard Worker	movl	24(%esp),%esi
362*8fb009dcSAndroid Build Coastguard Worker	movl	28(%esp),%edi
363*8fb009dcSAndroid Build Coastguard Worker	movl	32(%esp),%ebp
364*8fb009dcSAndroid Build Coastguard Worker	xorl	%eax,%eax
365*8fb009dcSAndroid Build Coastguard Worker	andl	$4294967288,%ebp
366*8fb009dcSAndroid Build Coastguard Worker	jz	L009aw_finish
367*8fb009dcSAndroid Build Coastguard WorkerL010aw_loop:
368*8fb009dcSAndroid Build Coastguard Worker	# Round 0
369*8fb009dcSAndroid Build Coastguard Worker	movl	(%esi),%ecx
370*8fb009dcSAndroid Build Coastguard Worker	movl	(%edi),%edx
371*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
372*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
373*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
374*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
375*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
376*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,(%ebx)
377*8fb009dcSAndroid Build Coastguard Worker	# Round 1
378*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esi),%ecx
379*8fb009dcSAndroid Build Coastguard Worker	movl	4(%edi),%edx
380*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
381*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
382*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
383*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
384*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
385*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,4(%ebx)
386*8fb009dcSAndroid Build Coastguard Worker	# Round 2
387*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esi),%ecx
388*8fb009dcSAndroid Build Coastguard Worker	movl	8(%edi),%edx
389*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
390*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
391*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
392*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
393*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
394*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,8(%ebx)
395*8fb009dcSAndroid Build Coastguard Worker	# Round 3
396*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esi),%ecx
397*8fb009dcSAndroid Build Coastguard Worker	movl	12(%edi),%edx
398*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
399*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
400*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
401*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
402*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
403*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,12(%ebx)
404*8fb009dcSAndroid Build Coastguard Worker	# Round 4
405*8fb009dcSAndroid Build Coastguard Worker	movl	16(%esi),%ecx
406*8fb009dcSAndroid Build Coastguard Worker	movl	16(%edi),%edx
407*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
408*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
409*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
410*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
411*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
412*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,16(%ebx)
413*8fb009dcSAndroid Build Coastguard Worker	# Round 5
414*8fb009dcSAndroid Build Coastguard Worker	movl	20(%esi),%ecx
415*8fb009dcSAndroid Build Coastguard Worker	movl	20(%edi),%edx
416*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
417*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
418*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
419*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
420*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
421*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,20(%ebx)
422*8fb009dcSAndroid Build Coastguard Worker	# Round 6
423*8fb009dcSAndroid Build Coastguard Worker	movl	24(%esi),%ecx
424*8fb009dcSAndroid Build Coastguard Worker	movl	24(%edi),%edx
425*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
426*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
427*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
428*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
429*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
430*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,24(%ebx)
431*8fb009dcSAndroid Build Coastguard Worker	# Round 7
432*8fb009dcSAndroid Build Coastguard Worker	movl	28(%esi),%ecx
433*8fb009dcSAndroid Build Coastguard Worker	movl	28(%edi),%edx
434*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
435*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
436*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
437*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
438*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
439*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,28(%ebx)
440*8fb009dcSAndroid Build Coastguard Worker
441*8fb009dcSAndroid Build Coastguard Worker	addl	$32,%esi
442*8fb009dcSAndroid Build Coastguard Worker	addl	$32,%edi
443*8fb009dcSAndroid Build Coastguard Worker	addl	$32,%ebx
444*8fb009dcSAndroid Build Coastguard Worker	subl	$8,%ebp
445*8fb009dcSAndroid Build Coastguard Worker	jnz	L010aw_loop
446*8fb009dcSAndroid Build Coastguard WorkerL009aw_finish:
447*8fb009dcSAndroid Build Coastguard Worker	movl	32(%esp),%ebp
448*8fb009dcSAndroid Build Coastguard Worker	andl	$7,%ebp
449*8fb009dcSAndroid Build Coastguard Worker	jz	L011aw_end
450*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 0
451*8fb009dcSAndroid Build Coastguard Worker	movl	(%esi),%ecx
452*8fb009dcSAndroid Build Coastguard Worker	movl	(%edi),%edx
453*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
454*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
455*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
456*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
457*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
458*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
459*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,(%ebx)
460*8fb009dcSAndroid Build Coastguard Worker	jz	L011aw_end
461*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 1
462*8fb009dcSAndroid Build Coastguard Worker	movl	4(%esi),%ecx
463*8fb009dcSAndroid Build Coastguard Worker	movl	4(%edi),%edx
464*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
465*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
466*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
467*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
468*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
469*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
470*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,4(%ebx)
471*8fb009dcSAndroid Build Coastguard Worker	jz	L011aw_end
472*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 2
473*8fb009dcSAndroid Build Coastguard Worker	movl	8(%esi),%ecx
474*8fb009dcSAndroid Build Coastguard Worker	movl	8(%edi),%edx
475*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
476*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
477*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
478*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
479*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
480*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
481*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,8(%ebx)
482*8fb009dcSAndroid Build Coastguard Worker	jz	L011aw_end
483*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 3
484*8fb009dcSAndroid Build Coastguard Worker	movl	12(%esi),%ecx
485*8fb009dcSAndroid Build Coastguard Worker	movl	12(%edi),%edx
486*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
487*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
488*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
489*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
490*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
491*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
492*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,12(%ebx)
493*8fb009dcSAndroid Build Coastguard Worker	jz	L011aw_end
494*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 4
495*8fb009dcSAndroid Build Coastguard Worker	movl	16(%esi),%ecx
496*8fb009dcSAndroid Build Coastguard Worker	movl	16(%edi),%edx
497*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
498*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
499*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
500*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
501*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
502*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
503*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,16(%ebx)
504*8fb009dcSAndroid Build Coastguard Worker	jz	L011aw_end
505*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 5
506*8fb009dcSAndroid Build Coastguard Worker	movl	20(%esi),%ecx
507*8fb009dcSAndroid Build Coastguard Worker	movl	20(%edi),%edx
508*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
509*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
510*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
511*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
512*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
513*8fb009dcSAndroid Build Coastguard Worker	decl	%ebp
514*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,20(%ebx)
515*8fb009dcSAndroid Build Coastguard Worker	jz	L011aw_end
516*8fb009dcSAndroid Build Coastguard Worker	# Tail Round 6
517*8fb009dcSAndroid Build Coastguard Worker	movl	24(%esi),%ecx
518*8fb009dcSAndroid Build Coastguard Worker	movl	24(%edi),%edx
519*8fb009dcSAndroid Build Coastguard Worker	subl	%eax,%ecx
520*8fb009dcSAndroid Build Coastguard Worker	movl	$0,%eax
521*8fb009dcSAndroid Build Coastguard Worker	adcl	%eax,%eax
522*8fb009dcSAndroid Build Coastguard Worker	subl	%edx,%ecx
523*8fb009dcSAndroid Build Coastguard Worker	adcl	$0,%eax
524*8fb009dcSAndroid Build Coastguard Worker	movl	%ecx,24(%ebx)
525*8fb009dcSAndroid Build Coastguard WorkerL011aw_end:
526*8fb009dcSAndroid Build Coastguard Worker	popl	%edi
527*8fb009dcSAndroid Build Coastguard Worker	popl	%esi
528*8fb009dcSAndroid Build Coastguard Worker	popl	%ebx
529*8fb009dcSAndroid Build Coastguard Worker	popl	%ebp
530*8fb009dcSAndroid Build Coastguard Worker	ret
531*8fb009dcSAndroid Build Coastguard Worker#endif  // !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__APPLE__)
532