1299966Sjkim# $FreeBSD$
2299966Sjkim# Do not modify. This file is auto-generated from rc4-586.pl.
3299966Sjkim#ifdef PIC
4299966Sjkim.file	"rc4-586.S"
595967Speter.text
6238405Sjkim.globl	RC4
7238405Sjkim.type	RC4,@function
8238405Sjkim.align	16
995967SpeterRC4:
10238405Sjkim.L_RC4_begin:
1195967Speter	pushl	%ebp
1295967Speter	pushl	%ebx
1395967Speter	pushl	%esi
1495967Speter	pushl	%edi
15238405Sjkim	movl	20(%esp),%edi
16238405Sjkim	movl	24(%esp),%edx
17238405Sjkim	movl	28(%esp),%esi
18238405Sjkim	movl	32(%esp),%ebp
19238405Sjkim	xorl	%eax,%eax
20238405Sjkim	xorl	%ebx,%ebx
21238405Sjkim	cmpl	$0,%edx
22238405Sjkim	je	.L000abort
23238405Sjkim	movb	(%edi),%al
24238405Sjkim	movb	4(%edi),%bl
25238405Sjkim	addl	$8,%edi
26238405Sjkim	leal	(%esi,%edx,1),%ecx
27238405Sjkim	subl	%esi,%ebp
28238405Sjkim	movl	%ecx,24(%esp)
29238405Sjkim	incb	%al
30238405Sjkim	cmpl	$-1,256(%edi)
31238405Sjkim	je	.L001RC4_CHAR
32238405Sjkim	movl	(%edi,%eax,4),%ecx
33238405Sjkim	andl	$-4,%edx
34238405Sjkim	jz	.L002loop1
35238405Sjkim	testl	$-8,%edx
36238405Sjkim	movl	%ebp,32(%esp)
37238405Sjkim	jz	.L003go4loop4
38299966Sjkim	call	.L004PIC_me_up
39299966Sjkim.L004PIC_me_up:
40299966Sjkim	popl	%ebp
41299966Sjkim	leal	_GLOBAL_OFFSET_TABLE_+[.-.L004PIC_me_up](%ebp),%ebp
42299966Sjkim	movl	OPENSSL_ia32cap_P@GOT(%ebp),%ebp
43299966Sjkim	btl	$26,(%ebp)
44299966Sjkim	jnc	.L003go4loop4
45299966Sjkim	movl	32(%esp),%ebp
46299966Sjkim	andl	$-8,%edx
47299966Sjkim	leal	-8(%esi,%edx,1),%edx
48299966Sjkim	movl	%edx,-4(%edi)
49299966Sjkim	addb	%cl,%bl
50299966Sjkim	movl	(%edi,%ebx,4),%edx
51299966Sjkim	movl	%ecx,(%edi,%ebx,4)
52299966Sjkim	movl	%edx,(%edi,%eax,4)
53299966Sjkim	incl	%eax
54299966Sjkim	addl	%ecx,%edx
55299966Sjkim	movzbl	%al,%eax
56299966Sjkim	movzbl	%dl,%edx
57299966Sjkim	movq	(%esi),%mm0
58299966Sjkim	movl	(%edi,%eax,4),%ecx
59299966Sjkim	movd	(%edi,%edx,4),%mm2
60299966Sjkim	jmp	.L005loop_mmx_enter
61299966Sjkim.align	16
62299966Sjkim.L006loop_mmx:
63299966Sjkim	addb	%cl,%bl
64299966Sjkim	psllq	$56,%mm1
65299966Sjkim	movl	(%edi,%ebx,4),%edx
66299966Sjkim	movl	%ecx,(%edi,%ebx,4)
67299966Sjkim	movl	%edx,(%edi,%eax,4)
68299966Sjkim	incl	%eax
69299966Sjkim	addl	%ecx,%edx
70299966Sjkim	movzbl	%al,%eax
71299966Sjkim	movzbl	%dl,%edx
72299966Sjkim	pxor	%mm1,%mm2
73299966Sjkim	movq	(%esi),%mm0
74299966Sjkim	movq	%mm2,-8(%ebp,%esi,1)
75299966Sjkim	movl	(%edi,%eax,4),%ecx
76299966Sjkim	movd	(%edi,%edx,4),%mm2
77299966Sjkim.L005loop_mmx_enter:
78299966Sjkim	addb	%cl,%bl
79299966Sjkim	movl	(%edi,%ebx,4),%edx
80299966Sjkim	movl	%ecx,(%edi,%ebx,4)
81299966Sjkim	movl	%edx,(%edi,%eax,4)
82299966Sjkim	incl	%eax
83299966Sjkim	addl	%ecx,%edx
84299966Sjkim	movzbl	%al,%eax
85299966Sjkim	movzbl	%dl,%edx
86299966Sjkim	pxor	%mm0,%mm2
87299966Sjkim	movl	(%edi,%eax,4),%ecx
88299966Sjkim	movd	(%edi,%edx,4),%mm1
89299966Sjkim	addb	%cl,%bl
90299966Sjkim	psllq	$8,%mm1
91299966Sjkim	movl	(%edi,%ebx,4),%edx
92299966Sjkim	movl	%ecx,(%edi,%ebx,4)
93299966Sjkim	movl	%edx,(%edi,%eax,4)
94299966Sjkim	incl	%eax
95299966Sjkim	addl	%ecx,%edx
96299966Sjkim	movzbl	%al,%eax
97299966Sjkim	movzbl	%dl,%edx
98299966Sjkim	pxor	%mm1,%mm2
99299966Sjkim	movl	(%edi,%eax,4),%ecx
100299966Sjkim	movd	(%edi,%edx,4),%mm1
101299966Sjkim	addb	%cl,%bl
102299966Sjkim	psllq	$16,%mm1
103299966Sjkim	movl	(%edi,%ebx,4),%edx
104299966Sjkim	movl	%ecx,(%edi,%ebx,4)
105299966Sjkim	movl	%edx,(%edi,%eax,4)
106299966Sjkim	incl	%eax
107299966Sjkim	addl	%ecx,%edx
108299966Sjkim	movzbl	%al,%eax
109299966Sjkim	movzbl	%dl,%edx
110299966Sjkim	pxor	%mm1,%mm2
111299966Sjkim	movl	(%edi,%eax,4),%ecx
112299966Sjkim	movd	(%edi,%edx,4),%mm1
113299966Sjkim	addb	%cl,%bl
114299966Sjkim	psllq	$24,%mm1
115299966Sjkim	movl	(%edi,%ebx,4),%edx
116299966Sjkim	movl	%ecx,(%edi,%ebx,4)
117299966Sjkim	movl	%edx,(%edi,%eax,4)
118299966Sjkim	incl	%eax
119299966Sjkim	addl	%ecx,%edx
120299966Sjkim	movzbl	%al,%eax
121299966Sjkim	movzbl	%dl,%edx
122299966Sjkim	pxor	%mm1,%mm2
123299966Sjkim	movl	(%edi,%eax,4),%ecx
124299966Sjkim	movd	(%edi,%edx,4),%mm1
125299966Sjkim	addb	%cl,%bl
126299966Sjkim	psllq	$32,%mm1
127299966Sjkim	movl	(%edi,%ebx,4),%edx
128299966Sjkim	movl	%ecx,(%edi,%ebx,4)
129299966Sjkim	movl	%edx,(%edi,%eax,4)
130299966Sjkim	incl	%eax
131299966Sjkim	addl	%ecx,%edx
132299966Sjkim	movzbl	%al,%eax
133299966Sjkim	movzbl	%dl,%edx
134299966Sjkim	pxor	%mm1,%mm2
135299966Sjkim	movl	(%edi,%eax,4),%ecx
136299966Sjkim	movd	(%edi,%edx,4),%mm1
137299966Sjkim	addb	%cl,%bl
138299966Sjkim	psllq	$40,%mm1
139299966Sjkim	movl	(%edi,%ebx,4),%edx
140299966Sjkim	movl	%ecx,(%edi,%ebx,4)
141299966Sjkim	movl	%edx,(%edi,%eax,4)
142299966Sjkim	incl	%eax
143299966Sjkim	addl	%ecx,%edx
144299966Sjkim	movzbl	%al,%eax
145299966Sjkim	movzbl	%dl,%edx
146299966Sjkim	pxor	%mm1,%mm2
147299966Sjkim	movl	(%edi,%eax,4),%ecx
148299966Sjkim	movd	(%edi,%edx,4),%mm1
149299966Sjkim	addb	%cl,%bl
150299966Sjkim	psllq	$48,%mm1
151299966Sjkim	movl	(%edi,%ebx,4),%edx
152299966Sjkim	movl	%ecx,(%edi,%ebx,4)
153299966Sjkim	movl	%edx,(%edi,%eax,4)
154299966Sjkim	incl	%eax
155299966Sjkim	addl	%ecx,%edx
156299966Sjkim	movzbl	%al,%eax
157299966Sjkim	movzbl	%dl,%edx
158299966Sjkim	pxor	%mm1,%mm2
159299966Sjkim	movl	(%edi,%eax,4),%ecx
160299966Sjkim	movd	(%edi,%edx,4),%mm1
161299966Sjkim	movl	%ebx,%edx
162299966Sjkim	xorl	%ebx,%ebx
163299966Sjkim	movb	%dl,%bl
164299966Sjkim	cmpl	-4(%edi),%esi
165299966Sjkim	leal	8(%esi),%esi
166299966Sjkim	jb	.L006loop_mmx
167299966Sjkim	psllq	$56,%mm1
168299966Sjkim	pxor	%mm1,%mm2
169299966Sjkim	movq	%mm2,-8(%ebp,%esi,1)
170299966Sjkim	emms
171299966Sjkim	cmpl	24(%esp),%esi
172299966Sjkim	je	.L007done
173299966Sjkim	jmp	.L002loop1
174299966Sjkim.align	16
175299966Sjkim.L003go4loop4:
176299966Sjkim	leal	-4(%esi,%edx,1),%edx
177299966Sjkim	movl	%edx,28(%esp)
178299966Sjkim.L008loop4:
179299966Sjkim	addb	%cl,%bl
180299966Sjkim	movl	(%edi,%ebx,4),%edx
181299966Sjkim	movl	%ecx,(%edi,%ebx,4)
182299966Sjkim	movl	%edx,(%edi,%eax,4)
183299966Sjkim	addl	%ecx,%edx
184299966Sjkim	incb	%al
185299966Sjkim	andl	$255,%edx
186299966Sjkim	movl	(%edi,%eax,4),%ecx
187299966Sjkim	movl	(%edi,%edx,4),%ebp
188299966Sjkim	addb	%cl,%bl
189299966Sjkim	movl	(%edi,%ebx,4),%edx
190299966Sjkim	movl	%ecx,(%edi,%ebx,4)
191299966Sjkim	movl	%edx,(%edi,%eax,4)
192299966Sjkim	addl	%ecx,%edx
193299966Sjkim	incb	%al
194299966Sjkim	andl	$255,%edx
195299966Sjkim	rorl	$8,%ebp
196299966Sjkim	movl	(%edi,%eax,4),%ecx
197299966Sjkim	orl	(%edi,%edx,4),%ebp
198299966Sjkim	addb	%cl,%bl
199299966Sjkim	movl	(%edi,%ebx,4),%edx
200299966Sjkim	movl	%ecx,(%edi,%ebx,4)
201299966Sjkim	movl	%edx,(%edi,%eax,4)
202299966Sjkim	addl	%ecx,%edx
203299966Sjkim	incb	%al
204299966Sjkim	andl	$255,%edx
205299966Sjkim	rorl	$8,%ebp
206299966Sjkim	movl	(%edi,%eax,4),%ecx
207299966Sjkim	orl	(%edi,%edx,4),%ebp
208299966Sjkim	addb	%cl,%bl
209299966Sjkim	movl	(%edi,%ebx,4),%edx
210299966Sjkim	movl	%ecx,(%edi,%ebx,4)
211299966Sjkim	movl	%edx,(%edi,%eax,4)
212299966Sjkim	addl	%ecx,%edx
213299966Sjkim	incb	%al
214299966Sjkim	andl	$255,%edx
215299966Sjkim	rorl	$8,%ebp
216299966Sjkim	movl	32(%esp),%ecx
217299966Sjkim	orl	(%edi,%edx,4),%ebp
218299966Sjkim	rorl	$8,%ebp
219299966Sjkim	xorl	(%esi),%ebp
220299966Sjkim	cmpl	28(%esp),%esi
221299966Sjkim	movl	%ebp,(%ecx,%esi,1)
222299966Sjkim	leal	4(%esi),%esi
223299966Sjkim	movl	(%edi,%eax,4),%ecx
224299966Sjkim	jb	.L008loop4
225299966Sjkim	cmpl	24(%esp),%esi
226299966Sjkim	je	.L007done
227299966Sjkim	movl	32(%esp),%ebp
228299966Sjkim.align	16
229299966Sjkim.L002loop1:
230299966Sjkim	addb	%cl,%bl
231299966Sjkim	movl	(%edi,%ebx,4),%edx
232299966Sjkim	movl	%ecx,(%edi,%ebx,4)
233299966Sjkim	movl	%edx,(%edi,%eax,4)
234299966Sjkim	addl	%ecx,%edx
235299966Sjkim	incb	%al
236299966Sjkim	andl	$255,%edx
237299966Sjkim	movl	(%edi,%edx,4),%edx
238299966Sjkim	xorb	(%esi),%dl
239299966Sjkim	leal	1(%esi),%esi
240299966Sjkim	movl	(%edi,%eax,4),%ecx
241299966Sjkim	cmpl	24(%esp),%esi
242299966Sjkim	movb	%dl,-1(%ebp,%esi,1)
243299966Sjkim	jb	.L002loop1
244299966Sjkim	jmp	.L007done
245299966Sjkim.align	16
246299966Sjkim.L001RC4_CHAR:
247299966Sjkim	movzbl	(%edi,%eax,1),%ecx
248299966Sjkim.L009cloop1:
249299966Sjkim	addb	%cl,%bl
250299966Sjkim	movzbl	(%edi,%ebx,1),%edx
251299966Sjkim	movb	%cl,(%edi,%ebx,1)
252299966Sjkim	movb	%dl,(%edi,%eax,1)
253299966Sjkim	addb	%cl,%dl
254299966Sjkim	movzbl	(%edi,%edx,1),%edx
255299966Sjkim	addb	$1,%al
256299966Sjkim	xorb	(%esi),%dl
257299966Sjkim	leal	1(%esi),%esi
258299966Sjkim	movzbl	(%edi,%eax,1),%ecx
259299966Sjkim	cmpl	24(%esp),%esi
260299966Sjkim	movb	%dl,-1(%ebp,%esi,1)
261299966Sjkim	jb	.L009cloop1
262299966Sjkim.L007done:
263299966Sjkim	decb	%al
264299966Sjkim	movl	%ebx,-4(%edi)
265299966Sjkim	movb	%al,-8(%edi)
266299966Sjkim.L000abort:
267299966Sjkim	popl	%edi
268299966Sjkim	popl	%esi
269299966Sjkim	popl	%ebx
270299966Sjkim	popl	%ebp
271299966Sjkim	ret
272299966Sjkim.size	RC4,.-.L_RC4_begin
273299966Sjkim.globl	private_RC4_set_key
274299966Sjkim.type	private_RC4_set_key,@function
275299966Sjkim.align	16
276299966Sjkimprivate_RC4_set_key:
277299966Sjkim.L_private_RC4_set_key_begin:
278299966Sjkim	pushl	%ebp
279299966Sjkim	pushl	%ebx
280299966Sjkim	pushl	%esi
281299966Sjkim	pushl	%edi
282299966Sjkim	movl	20(%esp),%edi
283299966Sjkim	movl	24(%esp),%ebp
284299966Sjkim	movl	28(%esp),%esi
285299966Sjkim	call	.L010PIC_me_up
286299966Sjkim.L010PIC_me_up:
287299966Sjkim	popl	%edx
288299966Sjkim	leal	_GLOBAL_OFFSET_TABLE_+[.-.L010PIC_me_up](%edx),%edx
289299966Sjkim	movl	OPENSSL_ia32cap_P@GOT(%edx),%edx
290299966Sjkim	leal	8(%edi),%edi
291299966Sjkim	leal	(%esi,%ebp,1),%esi
292299966Sjkim	negl	%ebp
293299966Sjkim	xorl	%eax,%eax
294299966Sjkim	movl	%ebp,-4(%edi)
295299966Sjkim	btl	$20,(%edx)
296299966Sjkim	jc	.L011c1stloop
297299966Sjkim.align	16
298299966Sjkim.L012w1stloop:
299299966Sjkim	movl	%eax,(%edi,%eax,4)
300299966Sjkim	addb	$1,%al
301299966Sjkim	jnc	.L012w1stloop
302299966Sjkim	xorl	%ecx,%ecx
303299966Sjkim	xorl	%edx,%edx
304299966Sjkim.align	16
305299966Sjkim.L013w2ndloop:
306299966Sjkim	movl	(%edi,%ecx,4),%eax
307299966Sjkim	addb	(%esi,%ebp,1),%dl
308299966Sjkim	addb	%al,%dl
309299966Sjkim	addl	$1,%ebp
310299966Sjkim	movl	(%edi,%edx,4),%ebx
311299966Sjkim	jnz	.L014wnowrap
312299966Sjkim	movl	-4(%edi),%ebp
313299966Sjkim.L014wnowrap:
314299966Sjkim	movl	%eax,(%edi,%edx,4)
315299966Sjkim	movl	%ebx,(%edi,%ecx,4)
316299966Sjkim	addb	$1,%cl
317299966Sjkim	jnc	.L013w2ndloop
318299966Sjkim	jmp	.L015exit
319299966Sjkim.align	16
320299966Sjkim.L011c1stloop:
321299966Sjkim	movb	%al,(%edi,%eax,1)
322299966Sjkim	addb	$1,%al
323299966Sjkim	jnc	.L011c1stloop
324299966Sjkim	xorl	%ecx,%ecx
325299966Sjkim	xorl	%edx,%edx
326299966Sjkim	xorl	%ebx,%ebx
327299966Sjkim.align	16
328299966Sjkim.L016c2ndloop:
329299966Sjkim	movb	(%edi,%ecx,1),%al
330299966Sjkim	addb	(%esi,%ebp,1),%dl
331299966Sjkim	addb	%al,%dl
332299966Sjkim	addl	$1,%ebp
333299966Sjkim	movb	(%edi,%edx,1),%bl
334299966Sjkim	jnz	.L017cnowrap
335299966Sjkim	movl	-4(%edi),%ebp
336299966Sjkim.L017cnowrap:
337299966Sjkim	movb	%al,(%edi,%edx,1)
338299966Sjkim	movb	%bl,(%edi,%ecx,1)
339299966Sjkim	addb	$1,%cl
340299966Sjkim	jnc	.L016c2ndloop
341299966Sjkim	movl	$-1,256(%edi)
342299966Sjkim.L015exit:
343299966Sjkim	xorl	%eax,%eax
344299966Sjkim	movl	%eax,-8(%edi)
345299966Sjkim	movl	%eax,-4(%edi)
346299966Sjkim	popl	%edi
347299966Sjkim	popl	%esi
348299966Sjkim	popl	%ebx
349299966Sjkim	popl	%ebp
350299966Sjkim	ret
351299966Sjkim.size	private_RC4_set_key,.-.L_private_RC4_set_key_begin
352299966Sjkim.globl	RC4_options
353299966Sjkim.type	RC4_options,@function
354299966Sjkim.align	16
355299966SjkimRC4_options:
356299966Sjkim.L_RC4_options_begin:
357299966Sjkim	call	.L018pic_point
358299966Sjkim.L018pic_point:
359299966Sjkim	popl	%eax
360299966Sjkim	leal	.L019opts-.L018pic_point(%eax),%eax
361299966Sjkim	call	.L020PIC_me_up
362299966Sjkim.L020PIC_me_up:
363299966Sjkim	popl	%edx
364299966Sjkim	leal	_GLOBAL_OFFSET_TABLE_+[.-.L020PIC_me_up](%edx),%edx
365299966Sjkim	movl	OPENSSL_ia32cap_P@GOT(%edx),%edx
366299966Sjkim	movl	(%edx),%edx
367299966Sjkim	btl	$20,%edx
368299966Sjkim	jc	.L0211xchar
369299966Sjkim	btl	$26,%edx
370299966Sjkim	jnc	.L022ret
371299966Sjkim	addl	$25,%eax
372299966Sjkim	ret
373299966Sjkim.L0211xchar:
374299966Sjkim	addl	$12,%eax
375299966Sjkim.L022ret:
376299966Sjkim	ret
377299966Sjkim.align	64
378299966Sjkim.L019opts:
379299966Sjkim.byte	114,99,52,40,52,120,44,105,110,116,41,0
380299966Sjkim.byte	114,99,52,40,49,120,44,99,104,97,114,41,0
381299966Sjkim.byte	114,99,52,40,56,120,44,109,109,120,41,0
382299966Sjkim.byte	82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
383299966Sjkim.byte	80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
384299966Sjkim.byte	111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
385299966Sjkim.align	64
386299966Sjkim.size	RC4_options,.-.L_RC4_options_begin
387299966Sjkim.comm	OPENSSL_ia32cap_P,8,4
388299966Sjkim#else
389299966Sjkim.file	"rc4-586.S"
390299966Sjkim.text
391299966Sjkim.globl	RC4
392299966Sjkim.type	RC4,@function
393299966Sjkim.align	16
394299966SjkimRC4:
395299966Sjkim.L_RC4_begin:
396299966Sjkim	pushl	%ebp
397299966Sjkim	pushl	%ebx
398299966Sjkim	pushl	%esi
399299966Sjkim	pushl	%edi
400299966Sjkim	movl	20(%esp),%edi
401299966Sjkim	movl	24(%esp),%edx
402299966Sjkim	movl	28(%esp),%esi
403299966Sjkim	movl	32(%esp),%ebp
404299966Sjkim	xorl	%eax,%eax
405299966Sjkim	xorl	%ebx,%ebx
406299966Sjkim	cmpl	$0,%edx
407299966Sjkim	je	.L000abort
408299966Sjkim	movb	(%edi),%al
409299966Sjkim	movb	4(%edi),%bl
410299966Sjkim	addl	$8,%edi
411299966Sjkim	leal	(%esi,%edx,1),%ecx
412299966Sjkim	subl	%esi,%ebp
413299966Sjkim	movl	%ecx,24(%esp)
414299966Sjkim	incb	%al
415299966Sjkim	cmpl	$-1,256(%edi)
416299966Sjkim	je	.L001RC4_CHAR
417299966Sjkim	movl	(%edi,%eax,4),%ecx
418299966Sjkim	andl	$-4,%edx
419299966Sjkim	jz	.L002loop1
420299966Sjkim	testl	$-8,%edx
421299966Sjkim	movl	%ebp,32(%esp)
422299966Sjkim	jz	.L003go4loop4
423238405Sjkim	leal	OPENSSL_ia32cap_P,%ebp
424238405Sjkim	btl	$26,(%ebp)
425238405Sjkim	jnc	.L003go4loop4
426238405Sjkim	movl	32(%esp),%ebp
427238405Sjkim	andl	$-8,%edx
428238405Sjkim	leal	-8(%esi,%edx,1),%edx
429238405Sjkim	movl	%edx,-4(%edi)
430238405Sjkim	addb	%cl,%bl
431238405Sjkim	movl	(%edi,%ebx,4),%edx
432238405Sjkim	movl	%ecx,(%edi,%ebx,4)
433238405Sjkim	movl	%edx,(%edi,%eax,4)
434238405Sjkim	incl	%eax
435238405Sjkim	addl	%ecx,%edx
436238405Sjkim	movzbl	%al,%eax
437238405Sjkim	movzbl	%dl,%edx
438238405Sjkim	movq	(%esi),%mm0
439238405Sjkim	movl	(%edi,%eax,4),%ecx
440238405Sjkim	movd	(%edi,%edx,4),%mm2
441238405Sjkim	jmp	.L004loop_mmx_enter
442238405Sjkim.align	16
443238405Sjkim.L005loop_mmx:
444238405Sjkim	addb	%cl,%bl
445238405Sjkim	psllq	$56,%mm1
446238405Sjkim	movl	(%edi,%ebx,4),%edx
447238405Sjkim	movl	%ecx,(%edi,%ebx,4)
448238405Sjkim	movl	%edx,(%edi,%eax,4)
449238405Sjkim	incl	%eax
450238405Sjkim	addl	%ecx,%edx
451238405Sjkim	movzbl	%al,%eax
452238405Sjkim	movzbl	%dl,%edx
453238405Sjkim	pxor	%mm1,%mm2
454238405Sjkim	movq	(%esi),%mm0
455238405Sjkim	movq	%mm2,-8(%ebp,%esi,1)
456238405Sjkim	movl	(%edi,%eax,4),%ecx
457238405Sjkim	movd	(%edi,%edx,4),%mm2
458238405Sjkim.L004loop_mmx_enter:
459238405Sjkim	addb	%cl,%bl
460238405Sjkim	movl	(%edi,%ebx,4),%edx
461238405Sjkim	movl	%ecx,(%edi,%ebx,4)
462238405Sjkim	movl	%edx,(%edi,%eax,4)
463238405Sjkim	incl	%eax
464238405Sjkim	addl	%ecx,%edx
465238405Sjkim	movzbl	%al,%eax
466238405Sjkim	movzbl	%dl,%edx
467238405Sjkim	pxor	%mm0,%mm2
468238405Sjkim	movl	(%edi,%eax,4),%ecx
469238405Sjkim	movd	(%edi,%edx,4),%mm1
470238405Sjkim	addb	%cl,%bl
471238405Sjkim	psllq	$8,%mm1
472238405Sjkim	movl	(%edi,%ebx,4),%edx
473238405Sjkim	movl	%ecx,(%edi,%ebx,4)
474238405Sjkim	movl	%edx,(%edi,%eax,4)
475238405Sjkim	incl	%eax
476238405Sjkim	addl	%ecx,%edx
477238405Sjkim	movzbl	%al,%eax
478238405Sjkim	movzbl	%dl,%edx
479238405Sjkim	pxor	%mm1,%mm2
480238405Sjkim	movl	(%edi,%eax,4),%ecx
481238405Sjkim	movd	(%edi,%edx,4),%mm1
482238405Sjkim	addb	%cl,%bl
483238405Sjkim	psllq	$16,%mm1
484238405Sjkim	movl	(%edi,%ebx,4),%edx
485238405Sjkim	movl	%ecx,(%edi,%ebx,4)
486238405Sjkim	movl	%edx,(%edi,%eax,4)
487238405Sjkim	incl	%eax
488238405Sjkim	addl	%ecx,%edx
489238405Sjkim	movzbl	%al,%eax
490238405Sjkim	movzbl	%dl,%edx
491238405Sjkim	pxor	%mm1,%mm2
492238405Sjkim	movl	(%edi,%eax,4),%ecx
493238405Sjkim	movd	(%edi,%edx,4),%mm1
494238405Sjkim	addb	%cl,%bl
495238405Sjkim	psllq	$24,%mm1
496238405Sjkim	movl	(%edi,%ebx,4),%edx
497238405Sjkim	movl	%ecx,(%edi,%ebx,4)
498238405Sjkim	movl	%edx,(%edi,%eax,4)
499238405Sjkim	incl	%eax
500238405Sjkim	addl	%ecx,%edx
501238405Sjkim	movzbl	%al,%eax
502238405Sjkim	movzbl	%dl,%edx
503238405Sjkim	pxor	%mm1,%mm2
504238405Sjkim	movl	(%edi,%eax,4),%ecx
505238405Sjkim	movd	(%edi,%edx,4),%mm1
506238405Sjkim	addb	%cl,%bl
507238405Sjkim	psllq	$32,%mm1
508238405Sjkim	movl	(%edi,%ebx,4),%edx
509238405Sjkim	movl	%ecx,(%edi,%ebx,4)
510238405Sjkim	movl	%edx,(%edi,%eax,4)
511238405Sjkim	incl	%eax
512238405Sjkim	addl	%ecx,%edx
513238405Sjkim	movzbl	%al,%eax
514238405Sjkim	movzbl	%dl,%edx
515238405Sjkim	pxor	%mm1,%mm2
516238405Sjkim	movl	(%edi,%eax,4),%ecx
517238405Sjkim	movd	(%edi,%edx,4),%mm1
518238405Sjkim	addb	%cl,%bl
519238405Sjkim	psllq	$40,%mm1
520238405Sjkim	movl	(%edi,%ebx,4),%edx
521238405Sjkim	movl	%ecx,(%edi,%ebx,4)
522238405Sjkim	movl	%edx,(%edi,%eax,4)
523238405Sjkim	incl	%eax
524238405Sjkim	addl	%ecx,%edx
525238405Sjkim	movzbl	%al,%eax
526238405Sjkim	movzbl	%dl,%edx
527238405Sjkim	pxor	%mm1,%mm2
528238405Sjkim	movl	(%edi,%eax,4),%ecx
529238405Sjkim	movd	(%edi,%edx,4),%mm1
530238405Sjkim	addb	%cl,%bl
531238405Sjkim	psllq	$48,%mm1
532238405Sjkim	movl	(%edi,%ebx,4),%edx
533238405Sjkim	movl	%ecx,(%edi,%ebx,4)
534238405Sjkim	movl	%edx,(%edi,%eax,4)
535238405Sjkim	incl	%eax
536238405Sjkim	addl	%ecx,%edx
537238405Sjkim	movzbl	%al,%eax
538238405Sjkim	movzbl	%dl,%edx
539238405Sjkim	pxor	%mm1,%mm2
540238405Sjkim	movl	(%edi,%eax,4),%ecx
541238405Sjkim	movd	(%edi,%edx,4),%mm1
542238405Sjkim	movl	%ebx,%edx
543238405Sjkim	xorl	%ebx,%ebx
544238405Sjkim	movb	%dl,%bl
545238405Sjkim	cmpl	-4(%edi),%esi
546238405Sjkim	leal	8(%esi),%esi
547238405Sjkim	jb	.L005loop_mmx
548238405Sjkim	psllq	$56,%mm1
549238405Sjkim	pxor	%mm1,%mm2
550238405Sjkim	movq	%mm2,-8(%ebp,%esi,1)
551238405Sjkim	emms
552238405Sjkim	cmpl	24(%esp),%esi
553238405Sjkim	je	.L006done
554238405Sjkim	jmp	.L002loop1
555238405Sjkim.align	16
556238405Sjkim.L003go4loop4:
557238405Sjkim	leal	-4(%esi,%edx,1),%edx
558238405Sjkim	movl	%edx,28(%esp)
559238405Sjkim.L007loop4:
560238405Sjkim	addb	%cl,%bl
561238405Sjkim	movl	(%edi,%ebx,4),%edx
562238405Sjkim	movl	%ecx,(%edi,%ebx,4)
563238405Sjkim	movl	%edx,(%edi,%eax,4)
564238405Sjkim	addl	%ecx,%edx
565238405Sjkim	incb	%al
566238405Sjkim	andl	$255,%edx
567238405Sjkim	movl	(%edi,%eax,4),%ecx
568238405Sjkim	movl	(%edi,%edx,4),%ebp
569238405Sjkim	addb	%cl,%bl
570238405Sjkim	movl	(%edi,%ebx,4),%edx
571238405Sjkim	movl	%ecx,(%edi,%ebx,4)
572238405Sjkim	movl	%edx,(%edi,%eax,4)
573238405Sjkim	addl	%ecx,%edx
574238405Sjkim	incb	%al
575238405Sjkim	andl	$255,%edx
576238405Sjkim	rorl	$8,%ebp
577238405Sjkim	movl	(%edi,%eax,4),%ecx
578238405Sjkim	orl	(%edi,%edx,4),%ebp
579238405Sjkim	addb	%cl,%bl
580238405Sjkim	movl	(%edi,%ebx,4),%edx
581238405Sjkim	movl	%ecx,(%edi,%ebx,4)
582238405Sjkim	movl	%edx,(%edi,%eax,4)
583238405Sjkim	addl	%ecx,%edx
584238405Sjkim	incb	%al
585238405Sjkim	andl	$255,%edx
586238405Sjkim	rorl	$8,%ebp
587238405Sjkim	movl	(%edi,%eax,4),%ecx
588238405Sjkim	orl	(%edi,%edx,4),%ebp
589238405Sjkim	addb	%cl,%bl
590238405Sjkim	movl	(%edi,%ebx,4),%edx
591238405Sjkim	movl	%ecx,(%edi,%ebx,4)
592238405Sjkim	movl	%edx,(%edi,%eax,4)
593238405Sjkim	addl	%ecx,%edx
594238405Sjkim	incb	%al
595238405Sjkim	andl	$255,%edx
596238405Sjkim	rorl	$8,%ebp
597238405Sjkim	movl	32(%esp),%ecx
598238405Sjkim	orl	(%edi,%edx,4),%ebp
599238405Sjkim	rorl	$8,%ebp
600238405Sjkim	xorl	(%esi),%ebp
601238405Sjkim	cmpl	28(%esp),%esi
602238405Sjkim	movl	%ebp,(%ecx,%esi,1)
603238405Sjkim	leal	4(%esi),%esi
604238405Sjkim	movl	(%edi,%eax,4),%ecx
605238405Sjkim	jb	.L007loop4
606238405Sjkim	cmpl	24(%esp),%esi
607238405Sjkim	je	.L006done
608238405Sjkim	movl	32(%esp),%ebp
609238405Sjkim.align	16
610238405Sjkim.L002loop1:
611238405Sjkim	addb	%cl,%bl
612238405Sjkim	movl	(%edi,%ebx,4),%edx
613238405Sjkim	movl	%ecx,(%edi,%ebx,4)
614238405Sjkim	movl	%edx,(%edi,%eax,4)
615238405Sjkim	addl	%ecx,%edx
616238405Sjkim	incb	%al
617238405Sjkim	andl	$255,%edx
618238405Sjkim	movl	(%edi,%edx,4),%edx
619238405Sjkim	xorb	(%esi),%dl
620238405Sjkim	leal	1(%esi),%esi
621238405Sjkim	movl	(%edi,%eax,4),%ecx
622238405Sjkim	cmpl	24(%esp),%esi
623238405Sjkim	movb	%dl,-1(%ebp,%esi,1)
624238405Sjkim	jb	.L002loop1
625238405Sjkim	jmp	.L006done
626238405Sjkim.align	16
627238405Sjkim.L001RC4_CHAR:
628238405Sjkim	movzbl	(%edi,%eax,1),%ecx
629238405Sjkim.L008cloop1:
630238405Sjkim	addb	%cl,%bl
631238405Sjkim	movzbl	(%edi,%ebx,1),%edx
632238405Sjkim	movb	%cl,(%edi,%ebx,1)
633238405Sjkim	movb	%dl,(%edi,%eax,1)
634238405Sjkim	addb	%cl,%dl
635238405Sjkim	movzbl	(%edi,%edx,1),%edx
636238405Sjkim	addb	$1,%al
637238405Sjkim	xorb	(%esi),%dl
638238405Sjkim	leal	1(%esi),%esi
639238405Sjkim	movzbl	(%edi,%eax,1),%ecx
640238405Sjkim	cmpl	24(%esp),%esi
641238405Sjkim	movb	%dl,-1(%ebp,%esi,1)
642238405Sjkim	jb	.L008cloop1
643238405Sjkim.L006done:
644238405Sjkim	decb	%al
645238405Sjkim	movl	%ebx,-4(%edi)
646238405Sjkim	movb	%al,-8(%edi)
647238405Sjkim.L000abort:
64895967Speter	popl	%edi
64995967Speter	popl	%esi
65095967Speter	popl	%ebx
65195967Speter	popl	%ebp
65295967Speter	ret
653238405Sjkim.size	RC4,.-.L_RC4_begin
654238405Sjkim.globl	private_RC4_set_key
655238405Sjkim.type	private_RC4_set_key,@function
656238405Sjkim.align	16
657238405Sjkimprivate_RC4_set_key:
658238405Sjkim.L_private_RC4_set_key_begin:
659238405Sjkim	pushl	%ebp
660238405Sjkim	pushl	%ebx
661238405Sjkim	pushl	%esi
662238405Sjkim	pushl	%edi
663238405Sjkim	movl	20(%esp),%edi
664238405Sjkim	movl	24(%esp),%ebp
665238405Sjkim	movl	28(%esp),%esi
666238405Sjkim	leal	OPENSSL_ia32cap_P,%edx
667238405Sjkim	leal	8(%edi),%edi
668238405Sjkim	leal	(%esi,%ebp,1),%esi
669238405Sjkim	negl	%ebp
670238405Sjkim	xorl	%eax,%eax
671238405Sjkim	movl	%ebp,-4(%edi)
672238405Sjkim	btl	$20,(%edx)
673238405Sjkim	jc	.L009c1stloop
674238405Sjkim.align	16
675238405Sjkim.L010w1stloop:
676238405Sjkim	movl	%eax,(%edi,%eax,4)
677238405Sjkim	addb	$1,%al
678238405Sjkim	jnc	.L010w1stloop
679238405Sjkim	xorl	%ecx,%ecx
680238405Sjkim	xorl	%edx,%edx
681238405Sjkim.align	16
682238405Sjkim.L011w2ndloop:
683238405Sjkim	movl	(%edi,%ecx,4),%eax
684238405Sjkim	addb	(%esi,%ebp,1),%dl
685238405Sjkim	addb	%al,%dl
686238405Sjkim	addl	$1,%ebp
687238405Sjkim	movl	(%edi,%edx,4),%ebx
688238405Sjkim	jnz	.L012wnowrap
689238405Sjkim	movl	-4(%edi),%ebp
690238405Sjkim.L012wnowrap:
691238405Sjkim	movl	%eax,(%edi,%edx,4)
692238405Sjkim	movl	%ebx,(%edi,%ecx,4)
693238405Sjkim	addb	$1,%cl
694238405Sjkim	jnc	.L011w2ndloop
695238405Sjkim	jmp	.L013exit
696238405Sjkim.align	16
697238405Sjkim.L009c1stloop:
698238405Sjkim	movb	%al,(%edi,%eax,1)
699238405Sjkim	addb	$1,%al
700238405Sjkim	jnc	.L009c1stloop
701238405Sjkim	xorl	%ecx,%ecx
702238405Sjkim	xorl	%edx,%edx
703238405Sjkim	xorl	%ebx,%ebx
704238405Sjkim.align	16
705238405Sjkim.L014c2ndloop:
706238405Sjkim	movb	(%edi,%ecx,1),%al
707238405Sjkim	addb	(%esi,%ebp,1),%dl
708238405Sjkim	addb	%al,%dl
709238405Sjkim	addl	$1,%ebp
710238405Sjkim	movb	(%edi,%edx,1),%bl
711238405Sjkim	jnz	.L015cnowrap
712238405Sjkim	movl	-4(%edi),%ebp
713238405Sjkim.L015cnowrap:
714238405Sjkim	movb	%al,(%edi,%edx,1)
715238405Sjkim	movb	%bl,(%edi,%ecx,1)
716238405Sjkim	addb	$1,%cl
717238405Sjkim	jnc	.L014c2ndloop
718238405Sjkim	movl	$-1,256(%edi)
719238405Sjkim.L013exit:
720238405Sjkim	xorl	%eax,%eax
721238405Sjkim	movl	%eax,-8(%edi)
722238405Sjkim	movl	%eax,-4(%edi)
723238405Sjkim	popl	%edi
724238405Sjkim	popl	%esi
725238405Sjkim	popl	%ebx
726238405Sjkim	popl	%ebp
727238405Sjkim	ret
728238405Sjkim.size	private_RC4_set_key,.-.L_private_RC4_set_key_begin
729238405Sjkim.globl	RC4_options
730238405Sjkim.type	RC4_options,@function
731238405Sjkim.align	16
732238405SjkimRC4_options:
733238405Sjkim.L_RC4_options_begin:
734238405Sjkim	call	.L016pic_point
735238405Sjkim.L016pic_point:
736238405Sjkim	popl	%eax
737238405Sjkim	leal	.L017opts-.L016pic_point(%eax),%eax
738238405Sjkim	leal	OPENSSL_ia32cap_P,%edx
739238405Sjkim	movl	(%edx),%edx
740238405Sjkim	btl	$20,%edx
741238405Sjkim	jc	.L0181xchar
742238405Sjkim	btl	$26,%edx
743238405Sjkim	jnc	.L019ret
744238405Sjkim	addl	$25,%eax
745238405Sjkim	ret
746238405Sjkim.L0181xchar:
747238405Sjkim	addl	$12,%eax
748238405Sjkim.L019ret:
749238405Sjkim	ret
750238405Sjkim.align	64
751238405Sjkim.L017opts:
752238405Sjkim.byte	114,99,52,40,52,120,44,105,110,116,41,0
753238405Sjkim.byte	114,99,52,40,49,120,44,99,104,97,114,41,0
754238405Sjkim.byte	114,99,52,40,56,120,44,109,109,120,41,0
755238405Sjkim.byte	82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
756238405Sjkim.byte	80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
757238405Sjkim.byte	111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
758238405Sjkim.align	64
759238405Sjkim.size	RC4_options,.-.L_RC4_options_begin
760238405Sjkim.comm	OPENSSL_ia32cap_P,8,4
761299966Sjkim#endif
762