xref: /minix3/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/rc4-586.S (revision ebfedea0ce5bbe81e252ddf32d732e40fb633fae)
1*ebfedea0SLionel Sambuc#include <machine/asm.h>
2*ebfedea0SLionel Sambuc.text
3*ebfedea0SLionel Sambuc.globl	RC4
4*ebfedea0SLionel Sambuc.type	RC4,@function
5*ebfedea0SLionel Sambuc.align	16
6*ebfedea0SLionel SambucRC4:
7*ebfedea0SLionel Sambuc.L_RC4_begin:
8*ebfedea0SLionel Sambuc	pushl	%ebp
9*ebfedea0SLionel Sambuc	pushl	%ebx
10*ebfedea0SLionel Sambuc	pushl	%esi
11*ebfedea0SLionel Sambuc	pushl	%edi
12*ebfedea0SLionel Sambuc	movl	20(%esp),%edi
13*ebfedea0SLionel Sambuc	movl	24(%esp),%edx
14*ebfedea0SLionel Sambuc	movl	28(%esp),%esi
15*ebfedea0SLionel Sambuc	movl	32(%esp),%ebp
16*ebfedea0SLionel Sambuc	xorl	%eax,%eax
17*ebfedea0SLionel Sambuc	xorl	%ebx,%ebx
18*ebfedea0SLionel Sambuc	cmpl	$0,%edx
19*ebfedea0SLionel Sambuc	je	.L000abort
20*ebfedea0SLionel Sambuc	movb	(%edi),%al
21*ebfedea0SLionel Sambuc	movb	4(%edi),%bl
22*ebfedea0SLionel Sambuc	addl	$8,%edi
23*ebfedea0SLionel Sambuc	leal	(%esi,%edx,1),%ecx
24*ebfedea0SLionel Sambuc	subl	%esi,%ebp
25*ebfedea0SLionel Sambuc	movl	%ecx,24(%esp)
26*ebfedea0SLionel Sambuc	incb	%al
27*ebfedea0SLionel Sambuc	cmpl	$-1,256(%edi)
28*ebfedea0SLionel Sambuc	je	.L001RC4_CHAR
29*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
30*ebfedea0SLionel Sambuc	andl	$-4,%edx
31*ebfedea0SLionel Sambuc	jz	.L002loop1
32*ebfedea0SLionel Sambuc	testl	$-8,%edx
33*ebfedea0SLionel Sambuc	movl	%ebp,32(%esp)
34*ebfedea0SLionel Sambuc	jz	.L003go4loop4
35*ebfedea0SLionel Sambuc	call	.L004PIC_me_up
36*ebfedea0SLionel Sambuc.L004PIC_me_up:
37*ebfedea0SLionel Sambuc	popl	%ebp
38*ebfedea0SLionel Sambuc	leal	_GLOBAL_OFFSET_TABLE_+[.-.L004PIC_me_up](%ebp),%ebp
39*ebfedea0SLionel Sambuc	movl	OPENSSL_ia32cap_P@GOT(%ebp),%ebp
40*ebfedea0SLionel Sambuc	btl	$26,(%ebp)
41*ebfedea0SLionel Sambuc	jnc	.L003go4loop4
42*ebfedea0SLionel Sambuc	movl	32(%esp),%ebp
43*ebfedea0SLionel Sambuc	andl	$-8,%edx
44*ebfedea0SLionel Sambuc	leal	-8(%esi,%edx,1),%edx
45*ebfedea0SLionel Sambuc	movl	%edx,-4(%edi)
46*ebfedea0SLionel Sambuc	addb	%cl,%bl
47*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
48*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
49*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
50*ebfedea0SLionel Sambuc	incl	%eax
51*ebfedea0SLionel Sambuc	addl	%ecx,%edx
52*ebfedea0SLionel Sambuc	movzbl	%al,%eax
53*ebfedea0SLionel Sambuc	movzbl	%dl,%edx
54*ebfedea0SLionel Sambuc	movq	(%esi),%mm0
55*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
56*ebfedea0SLionel Sambuc	movd	(%edi,%edx,4),%mm2
57*ebfedea0SLionel Sambuc	jmp	.L005loop_mmx_enter
58*ebfedea0SLionel Sambuc.align	16
59*ebfedea0SLionel Sambuc.L006loop_mmx:
60*ebfedea0SLionel Sambuc	addb	%cl,%bl
61*ebfedea0SLionel Sambuc	psllq	$56,%mm1
62*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
63*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
64*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
65*ebfedea0SLionel Sambuc	incl	%eax
66*ebfedea0SLionel Sambuc	addl	%ecx,%edx
67*ebfedea0SLionel Sambuc	movzbl	%al,%eax
68*ebfedea0SLionel Sambuc	movzbl	%dl,%edx
69*ebfedea0SLionel Sambuc	pxor	%mm1,%mm2
70*ebfedea0SLionel Sambuc	movq	(%esi),%mm0
71*ebfedea0SLionel Sambuc	movq	%mm2,-8(%ebp,%esi,1)
72*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
73*ebfedea0SLionel Sambuc	movd	(%edi,%edx,4),%mm2
74*ebfedea0SLionel Sambuc.L005loop_mmx_enter:
75*ebfedea0SLionel Sambuc	addb	%cl,%bl
76*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
77*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
78*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
79*ebfedea0SLionel Sambuc	incl	%eax
80*ebfedea0SLionel Sambuc	addl	%ecx,%edx
81*ebfedea0SLionel Sambuc	movzbl	%al,%eax
82*ebfedea0SLionel Sambuc	movzbl	%dl,%edx
83*ebfedea0SLionel Sambuc	pxor	%mm0,%mm2
84*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
85*ebfedea0SLionel Sambuc	movd	(%edi,%edx,4),%mm1
86*ebfedea0SLionel Sambuc	addb	%cl,%bl
87*ebfedea0SLionel Sambuc	psllq	$8,%mm1
88*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
89*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
90*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
91*ebfedea0SLionel Sambuc	incl	%eax
92*ebfedea0SLionel Sambuc	addl	%ecx,%edx
93*ebfedea0SLionel Sambuc	movzbl	%al,%eax
94*ebfedea0SLionel Sambuc	movzbl	%dl,%edx
95*ebfedea0SLionel Sambuc	pxor	%mm1,%mm2
96*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
97*ebfedea0SLionel Sambuc	movd	(%edi,%edx,4),%mm1
98*ebfedea0SLionel Sambuc	addb	%cl,%bl
99*ebfedea0SLionel Sambuc	psllq	$16,%mm1
100*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
101*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
102*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
103*ebfedea0SLionel Sambuc	incl	%eax
104*ebfedea0SLionel Sambuc	addl	%ecx,%edx
105*ebfedea0SLionel Sambuc	movzbl	%al,%eax
106*ebfedea0SLionel Sambuc	movzbl	%dl,%edx
107*ebfedea0SLionel Sambuc	pxor	%mm1,%mm2
108*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
109*ebfedea0SLionel Sambuc	movd	(%edi,%edx,4),%mm1
110*ebfedea0SLionel Sambuc	addb	%cl,%bl
111*ebfedea0SLionel Sambuc	psllq	$24,%mm1
112*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
113*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
114*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
115*ebfedea0SLionel Sambuc	incl	%eax
116*ebfedea0SLionel Sambuc	addl	%ecx,%edx
117*ebfedea0SLionel Sambuc	movzbl	%al,%eax
118*ebfedea0SLionel Sambuc	movzbl	%dl,%edx
119*ebfedea0SLionel Sambuc	pxor	%mm1,%mm2
120*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
121*ebfedea0SLionel Sambuc	movd	(%edi,%edx,4),%mm1
122*ebfedea0SLionel Sambuc	addb	%cl,%bl
123*ebfedea0SLionel Sambuc	psllq	$32,%mm1
124*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
125*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
126*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
127*ebfedea0SLionel Sambuc	incl	%eax
128*ebfedea0SLionel Sambuc	addl	%ecx,%edx
129*ebfedea0SLionel Sambuc	movzbl	%al,%eax
130*ebfedea0SLionel Sambuc	movzbl	%dl,%edx
131*ebfedea0SLionel Sambuc	pxor	%mm1,%mm2
132*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
133*ebfedea0SLionel Sambuc	movd	(%edi,%edx,4),%mm1
134*ebfedea0SLionel Sambuc	addb	%cl,%bl
135*ebfedea0SLionel Sambuc	psllq	$40,%mm1
136*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
137*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
138*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
139*ebfedea0SLionel Sambuc	incl	%eax
140*ebfedea0SLionel Sambuc	addl	%ecx,%edx
141*ebfedea0SLionel Sambuc	movzbl	%al,%eax
142*ebfedea0SLionel Sambuc	movzbl	%dl,%edx
143*ebfedea0SLionel Sambuc	pxor	%mm1,%mm2
144*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
145*ebfedea0SLionel Sambuc	movd	(%edi,%edx,4),%mm1
146*ebfedea0SLionel Sambuc	addb	%cl,%bl
147*ebfedea0SLionel Sambuc	psllq	$48,%mm1
148*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
149*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
150*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
151*ebfedea0SLionel Sambuc	incl	%eax
152*ebfedea0SLionel Sambuc	addl	%ecx,%edx
153*ebfedea0SLionel Sambuc	movzbl	%al,%eax
154*ebfedea0SLionel Sambuc	movzbl	%dl,%edx
155*ebfedea0SLionel Sambuc	pxor	%mm1,%mm2
156*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
157*ebfedea0SLionel Sambuc	movd	(%edi,%edx,4),%mm1
158*ebfedea0SLionel Sambuc	movl	%ebx,%edx
159*ebfedea0SLionel Sambuc	xorl	%ebx,%ebx
160*ebfedea0SLionel Sambuc	movb	%dl,%bl
161*ebfedea0SLionel Sambuc	cmpl	-4(%edi),%esi
162*ebfedea0SLionel Sambuc	leal	8(%esi),%esi
163*ebfedea0SLionel Sambuc	jb	.L006loop_mmx
164*ebfedea0SLionel Sambuc	psllq	$56,%mm1
165*ebfedea0SLionel Sambuc	pxor	%mm1,%mm2
166*ebfedea0SLionel Sambuc	movq	%mm2,-8(%ebp,%esi,1)
167*ebfedea0SLionel Sambuc	emms
168*ebfedea0SLionel Sambuc	cmpl	24(%esp),%esi
169*ebfedea0SLionel Sambuc	je	.L007done
170*ebfedea0SLionel Sambuc	jmp	.L002loop1
171*ebfedea0SLionel Sambuc.align	16
172*ebfedea0SLionel Sambuc.L003go4loop4:
173*ebfedea0SLionel Sambuc	leal	-4(%esi,%edx,1),%edx
174*ebfedea0SLionel Sambuc	movl	%edx,28(%esp)
175*ebfedea0SLionel Sambuc.L008loop4:
176*ebfedea0SLionel Sambuc	addb	%cl,%bl
177*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
178*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
179*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
180*ebfedea0SLionel Sambuc	addl	%ecx,%edx
181*ebfedea0SLionel Sambuc	incb	%al
182*ebfedea0SLionel Sambuc	andl	$255,%edx
183*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
184*ebfedea0SLionel Sambuc	movl	(%edi,%edx,4),%ebp
185*ebfedea0SLionel Sambuc	addb	%cl,%bl
186*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
187*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
188*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
189*ebfedea0SLionel Sambuc	addl	%ecx,%edx
190*ebfedea0SLionel Sambuc	incb	%al
191*ebfedea0SLionel Sambuc	andl	$255,%edx
192*ebfedea0SLionel Sambuc	rorl	$8,%ebp
193*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
194*ebfedea0SLionel Sambuc	orl	(%edi,%edx,4),%ebp
195*ebfedea0SLionel Sambuc	addb	%cl,%bl
196*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
197*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
198*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
199*ebfedea0SLionel Sambuc	addl	%ecx,%edx
200*ebfedea0SLionel Sambuc	incb	%al
201*ebfedea0SLionel Sambuc	andl	$255,%edx
202*ebfedea0SLionel Sambuc	rorl	$8,%ebp
203*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
204*ebfedea0SLionel Sambuc	orl	(%edi,%edx,4),%ebp
205*ebfedea0SLionel Sambuc	addb	%cl,%bl
206*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
207*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
208*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
209*ebfedea0SLionel Sambuc	addl	%ecx,%edx
210*ebfedea0SLionel Sambuc	incb	%al
211*ebfedea0SLionel Sambuc	andl	$255,%edx
212*ebfedea0SLionel Sambuc	rorl	$8,%ebp
213*ebfedea0SLionel Sambuc	movl	32(%esp),%ecx
214*ebfedea0SLionel Sambuc	orl	(%edi,%edx,4),%ebp
215*ebfedea0SLionel Sambuc	rorl	$8,%ebp
216*ebfedea0SLionel Sambuc	xorl	(%esi),%ebp
217*ebfedea0SLionel Sambuc	cmpl	28(%esp),%esi
218*ebfedea0SLionel Sambuc	movl	%ebp,(%ecx,%esi,1)
219*ebfedea0SLionel Sambuc	leal	4(%esi),%esi
220*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
221*ebfedea0SLionel Sambuc	jb	.L008loop4
222*ebfedea0SLionel Sambuc	cmpl	24(%esp),%esi
223*ebfedea0SLionel Sambuc	je	.L007done
224*ebfedea0SLionel Sambuc	movl	32(%esp),%ebp
225*ebfedea0SLionel Sambuc.align	16
226*ebfedea0SLionel Sambuc.L002loop1:
227*ebfedea0SLionel Sambuc	addb	%cl,%bl
228*ebfedea0SLionel Sambuc	movl	(%edi,%ebx,4),%edx
229*ebfedea0SLionel Sambuc	movl	%ecx,(%edi,%ebx,4)
230*ebfedea0SLionel Sambuc	movl	%edx,(%edi,%eax,4)
231*ebfedea0SLionel Sambuc	addl	%ecx,%edx
232*ebfedea0SLionel Sambuc	incb	%al
233*ebfedea0SLionel Sambuc	andl	$255,%edx
234*ebfedea0SLionel Sambuc	movl	(%edi,%edx,4),%edx
235*ebfedea0SLionel Sambuc	xorb	(%esi),%dl
236*ebfedea0SLionel Sambuc	leal	1(%esi),%esi
237*ebfedea0SLionel Sambuc	movl	(%edi,%eax,4),%ecx
238*ebfedea0SLionel Sambuc	cmpl	24(%esp),%esi
239*ebfedea0SLionel Sambuc	movb	%dl,-1(%ebp,%esi,1)
240*ebfedea0SLionel Sambuc	jb	.L002loop1
241*ebfedea0SLionel Sambuc	jmp	.L007done
242*ebfedea0SLionel Sambuc.align	16
243*ebfedea0SLionel Sambuc.L001RC4_CHAR:
244*ebfedea0SLionel Sambuc	movzbl	(%edi,%eax,1),%ecx
245*ebfedea0SLionel Sambuc.L009cloop1:
246*ebfedea0SLionel Sambuc	addb	%cl,%bl
247*ebfedea0SLionel Sambuc	movzbl	(%edi,%ebx,1),%edx
248*ebfedea0SLionel Sambuc	movb	%cl,(%edi,%ebx,1)
249*ebfedea0SLionel Sambuc	movb	%dl,(%edi,%eax,1)
250*ebfedea0SLionel Sambuc	addb	%cl,%dl
251*ebfedea0SLionel Sambuc	movzbl	(%edi,%edx,1),%edx
252*ebfedea0SLionel Sambuc	addb	$1,%al
253*ebfedea0SLionel Sambuc	xorb	(%esi),%dl
254*ebfedea0SLionel Sambuc	leal	1(%esi),%esi
255*ebfedea0SLionel Sambuc	movzbl	(%edi,%eax,1),%ecx
256*ebfedea0SLionel Sambuc	cmpl	24(%esp),%esi
257*ebfedea0SLionel Sambuc	movb	%dl,-1(%ebp,%esi,1)
258*ebfedea0SLionel Sambuc	jb	.L009cloop1
259*ebfedea0SLionel Sambuc.L007done:
260*ebfedea0SLionel Sambuc	decb	%al
261*ebfedea0SLionel Sambuc	movl	%ebx,-4(%edi)
262*ebfedea0SLionel Sambuc	movb	%al,-8(%edi)
263*ebfedea0SLionel Sambuc.L000abort:
264*ebfedea0SLionel Sambuc	popl	%edi
265*ebfedea0SLionel Sambuc	popl	%esi
266*ebfedea0SLionel Sambuc	popl	%ebx
267*ebfedea0SLionel Sambuc	popl	%ebp
268*ebfedea0SLionel Sambuc	ret
269*ebfedea0SLionel Sambuc.size	RC4,.-.L_RC4_begin
270*ebfedea0SLionel Sambuc.globl	private_RC4_set_key
271*ebfedea0SLionel Sambuc.type	private_RC4_set_key,@function
272*ebfedea0SLionel Sambuc.align	16
273*ebfedea0SLionel Sambucprivate_RC4_set_key:
274*ebfedea0SLionel Sambuc.L_private_RC4_set_key_begin:
275*ebfedea0SLionel Sambuc	pushl	%ebp
276*ebfedea0SLionel Sambuc	pushl	%ebx
277*ebfedea0SLionel Sambuc	pushl	%esi
278*ebfedea0SLionel Sambuc	pushl	%edi
279*ebfedea0SLionel Sambuc	movl	20(%esp),%edi
280*ebfedea0SLionel Sambuc	movl	24(%esp),%ebp
281*ebfedea0SLionel Sambuc	movl	28(%esp),%esi
282*ebfedea0SLionel Sambuc	call	.L010PIC_me_up
283*ebfedea0SLionel Sambuc.L010PIC_me_up:
284*ebfedea0SLionel Sambuc	popl	%edx
285*ebfedea0SLionel Sambuc	leal	_GLOBAL_OFFSET_TABLE_+[.-.L010PIC_me_up](%edx),%edx
286*ebfedea0SLionel Sambuc	movl	OPENSSL_ia32cap_P@GOT(%edx),%edx
287*ebfedea0SLionel Sambuc	leal	8(%edi),%edi
288*ebfedea0SLionel Sambuc	leal	(%esi,%ebp,1),%esi
289*ebfedea0SLionel Sambuc	negl	%ebp
290*ebfedea0SLionel Sambuc	xorl	%eax,%eax
291*ebfedea0SLionel Sambuc	movl	%ebp,-4(%edi)
292*ebfedea0SLionel Sambuc	btl	$20,(%edx)
293*ebfedea0SLionel Sambuc	jc	.L011c1stloop
294*ebfedea0SLionel Sambuc.align	16
295*ebfedea0SLionel Sambuc.L012w1stloop:
296*ebfedea0SLionel Sambuc	movl	%eax,(%edi,%eax,4)
297*ebfedea0SLionel Sambuc	addb	$1,%al
298*ebfedea0SLionel Sambuc	jnc	.L012w1stloop
299*ebfedea0SLionel Sambuc	xorl	%ecx,%ecx
300*ebfedea0SLionel Sambuc	xorl	%edx,%edx
301*ebfedea0SLionel Sambuc.align	16
302*ebfedea0SLionel Sambuc.L013w2ndloop:
303*ebfedea0SLionel Sambuc	movl	(%edi,%ecx,4),%eax
304*ebfedea0SLionel Sambuc	addb	(%esi,%ebp,1),%dl
305*ebfedea0SLionel Sambuc	addb	%al,%dl
306*ebfedea0SLionel Sambuc	addl	$1,%ebp
307*ebfedea0SLionel Sambuc	movl	(%edi,%edx,4),%ebx
308*ebfedea0SLionel Sambuc	jnz	.L014wnowrap
309*ebfedea0SLionel Sambuc	movl	-4(%edi),%ebp
310*ebfedea0SLionel Sambuc.L014wnowrap:
311*ebfedea0SLionel Sambuc	movl	%eax,(%edi,%edx,4)
312*ebfedea0SLionel Sambuc	movl	%ebx,(%edi,%ecx,4)
313*ebfedea0SLionel Sambuc	addb	$1,%cl
314*ebfedea0SLionel Sambuc	jnc	.L013w2ndloop
315*ebfedea0SLionel Sambuc	jmp	.L015exit
316*ebfedea0SLionel Sambuc.align	16
317*ebfedea0SLionel Sambuc.L011c1stloop:
318*ebfedea0SLionel Sambuc	movb	%al,(%edi,%eax,1)
319*ebfedea0SLionel Sambuc	addb	$1,%al
320*ebfedea0SLionel Sambuc	jnc	.L011c1stloop
321*ebfedea0SLionel Sambuc	xorl	%ecx,%ecx
322*ebfedea0SLionel Sambuc	xorl	%edx,%edx
323*ebfedea0SLionel Sambuc	xorl	%ebx,%ebx
324*ebfedea0SLionel Sambuc.align	16
325*ebfedea0SLionel Sambuc.L016c2ndloop:
326*ebfedea0SLionel Sambuc	movb	(%edi,%ecx,1),%al
327*ebfedea0SLionel Sambuc	addb	(%esi,%ebp,1),%dl
328*ebfedea0SLionel Sambuc	addb	%al,%dl
329*ebfedea0SLionel Sambuc	addl	$1,%ebp
330*ebfedea0SLionel Sambuc	movb	(%edi,%edx,1),%bl
331*ebfedea0SLionel Sambuc	jnz	.L017cnowrap
332*ebfedea0SLionel Sambuc	movl	-4(%edi),%ebp
333*ebfedea0SLionel Sambuc.L017cnowrap:
334*ebfedea0SLionel Sambuc	movb	%al,(%edi,%edx,1)
335*ebfedea0SLionel Sambuc	movb	%bl,(%edi,%ecx,1)
336*ebfedea0SLionel Sambuc	addb	$1,%cl
337*ebfedea0SLionel Sambuc	jnc	.L016c2ndloop
338*ebfedea0SLionel Sambuc	movl	$-1,256(%edi)
339*ebfedea0SLionel Sambuc.L015exit:
340*ebfedea0SLionel Sambuc	xorl	%eax,%eax
341*ebfedea0SLionel Sambuc	movl	%eax,-8(%edi)
342*ebfedea0SLionel Sambuc	movl	%eax,-4(%edi)
343*ebfedea0SLionel Sambuc	popl	%edi
344*ebfedea0SLionel Sambuc	popl	%esi
345*ebfedea0SLionel Sambuc	popl	%ebx
346*ebfedea0SLionel Sambuc	popl	%ebp
347*ebfedea0SLionel Sambuc	ret
348*ebfedea0SLionel Sambuc.size	private_RC4_set_key,.-.L_private_RC4_set_key_begin
349*ebfedea0SLionel Sambuc.globl	RC4_options
350*ebfedea0SLionel Sambuc.type	RC4_options,@function
351*ebfedea0SLionel Sambuc.align	16
352*ebfedea0SLionel SambucRC4_options:
353*ebfedea0SLionel Sambuc.L_RC4_options_begin:
354*ebfedea0SLionel Sambuc	call	.L018pic_point
355*ebfedea0SLionel Sambuc.L018pic_point:
356*ebfedea0SLionel Sambuc	popl	%eax
357*ebfedea0SLionel Sambuc	leal	.L019opts-.L018pic_point(%eax),%eax
358*ebfedea0SLionel Sambuc	call	.L020PIC_me_up
359*ebfedea0SLionel Sambuc.L020PIC_me_up:
360*ebfedea0SLionel Sambuc	popl	%edx
361*ebfedea0SLionel Sambuc	leal	_GLOBAL_OFFSET_TABLE_+[.-.L020PIC_me_up](%edx),%edx
362*ebfedea0SLionel Sambuc	movl	OPENSSL_ia32cap_P@GOT(%edx),%edx
363*ebfedea0SLionel Sambuc	movl	(%edx),%edx
364*ebfedea0SLionel Sambuc	btl	$20,%edx
365*ebfedea0SLionel Sambuc	jc	.L0211xchar
366*ebfedea0SLionel Sambuc	btl	$26,%edx
367*ebfedea0SLionel Sambuc	jnc	.L022ret
368*ebfedea0SLionel Sambuc	addl	$25,%eax
369*ebfedea0SLionel Sambuc	ret
370*ebfedea0SLionel Sambuc.L0211xchar:
371*ebfedea0SLionel Sambuc	addl	$12,%eax
372*ebfedea0SLionel Sambuc.L022ret:
373*ebfedea0SLionel Sambuc	ret
374*ebfedea0SLionel Sambuc.align	64
375*ebfedea0SLionel Sambuc.L019opts:
376*ebfedea0SLionel Sambuc.byte	114,99,52,40,52,120,44,105,110,116,41,0
377*ebfedea0SLionel Sambuc.byte	114,99,52,40,49,120,44,99,104,97,114,41,0
378*ebfedea0SLionel Sambuc.byte	114,99,52,40,56,120,44,109,109,120,41,0
379*ebfedea0SLionel Sambuc.byte	82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
380*ebfedea0SLionel Sambuc.byte	80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
381*ebfedea0SLionel Sambuc.byte	111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
382*ebfedea0SLionel Sambuc.align	64
383*ebfedea0SLionel Sambuc.size	RC4_options,.-.L_RC4_options_begin
384*ebfedea0SLionel Sambuc.comm	OPENSSL_ia32cap_P,8,4
385