xref: /freebsd/sys/crypto/openssl/i386/rc4-586.S (revision 9768746b)
1/* $FreeBSD$ */
2/* Do not modify. This file is auto-generated from rc4-586.pl. */
3#ifdef PIC
4.text
5.globl	RC4
6.type	RC4,@function
7.align	16
8RC4:
9.L_RC4_begin:
10	pushl	%ebp
11	pushl	%ebx
12	pushl	%esi
13	pushl	%edi
14	movl	20(%esp),%edi
15	movl	24(%esp),%edx
16	movl	28(%esp),%esi
17	movl	32(%esp),%ebp
18	xorl	%eax,%eax
19	xorl	%ebx,%ebx
20	cmpl	$0,%edx
21	je	.L000abort
22	movb	(%edi),%al
23	movb	4(%edi),%bl
24	addl	$8,%edi
25	leal	(%esi,%edx,1),%ecx
26	subl	%esi,%ebp
27	movl	%ecx,24(%esp)
28	incb	%al
29	cmpl	$-1,256(%edi)
30	je	.L001RC4_CHAR
31	movl	(%edi,%eax,4),%ecx
32	andl	$-4,%edx
33	jz	.L002loop1
34	movl	%ebp,32(%esp)
35	testl	$-8,%edx
36	jz	.L003go4loop4
37	call	.L004PIC_me_up
38.L004PIC_me_up:
39	popl	%ebp
40	leal	OPENSSL_ia32cap_P-.L004PIC_me_up(%ebp),%ebp
41	btl	$26,(%ebp)
42	jnc	.L003go4loop4
43	movl	32(%esp),%ebp
44	andl	$-8,%edx
45	leal	-8(%esi,%edx,1),%edx
46	movl	%edx,-4(%edi)
47	addb	%cl,%bl
48	movl	(%edi,%ebx,4),%edx
49	movl	%ecx,(%edi,%ebx,4)
50	movl	%edx,(%edi,%eax,4)
51	incl	%eax
52	addl	%ecx,%edx
53	movzbl	%al,%eax
54	movzbl	%dl,%edx
55	movq	(%esi),%mm0
56	movl	(%edi,%eax,4),%ecx
57	movd	(%edi,%edx,4),%mm2
58	jmp	.L005loop_mmx_enter
59.align	16
60.L006loop_mmx:
61	addb	%cl,%bl
62	psllq	$56,%mm1
63	movl	(%edi,%ebx,4),%edx
64	movl	%ecx,(%edi,%ebx,4)
65	movl	%edx,(%edi,%eax,4)
66	incl	%eax
67	addl	%ecx,%edx
68	movzbl	%al,%eax
69	movzbl	%dl,%edx
70	pxor	%mm1,%mm2
71	movq	(%esi),%mm0
72	movq	%mm2,-8(%ebp,%esi,1)
73	movl	(%edi,%eax,4),%ecx
74	movd	(%edi,%edx,4),%mm2
75.L005loop_mmx_enter:
76	addb	%cl,%bl
77	movl	(%edi,%ebx,4),%edx
78	movl	%ecx,(%edi,%ebx,4)
79	movl	%edx,(%edi,%eax,4)
80	incl	%eax
81	addl	%ecx,%edx
82	movzbl	%al,%eax
83	movzbl	%dl,%edx
84	pxor	%mm0,%mm2
85	movl	(%edi,%eax,4),%ecx
86	movd	(%edi,%edx,4),%mm1
87	addb	%cl,%bl
88	psllq	$8,%mm1
89	movl	(%edi,%ebx,4),%edx
90	movl	%ecx,(%edi,%ebx,4)
91	movl	%edx,(%edi,%eax,4)
92	incl	%eax
93	addl	%ecx,%edx
94	movzbl	%al,%eax
95	movzbl	%dl,%edx
96	pxor	%mm1,%mm2
97	movl	(%edi,%eax,4),%ecx
98	movd	(%edi,%edx,4),%mm1
99	addb	%cl,%bl
100	psllq	$16,%mm1
101	movl	(%edi,%ebx,4),%edx
102	movl	%ecx,(%edi,%ebx,4)
103	movl	%edx,(%edi,%eax,4)
104	incl	%eax
105	addl	%ecx,%edx
106	movzbl	%al,%eax
107	movzbl	%dl,%edx
108	pxor	%mm1,%mm2
109	movl	(%edi,%eax,4),%ecx
110	movd	(%edi,%edx,4),%mm1
111	addb	%cl,%bl
112	psllq	$24,%mm1
113	movl	(%edi,%ebx,4),%edx
114	movl	%ecx,(%edi,%ebx,4)
115	movl	%edx,(%edi,%eax,4)
116	incl	%eax
117	addl	%ecx,%edx
118	movzbl	%al,%eax
119	movzbl	%dl,%edx
120	pxor	%mm1,%mm2
121	movl	(%edi,%eax,4),%ecx
122	movd	(%edi,%edx,4),%mm1
123	addb	%cl,%bl
124	psllq	$32,%mm1
125	movl	(%edi,%ebx,4),%edx
126	movl	%ecx,(%edi,%ebx,4)
127	movl	%edx,(%edi,%eax,4)
128	incl	%eax
129	addl	%ecx,%edx
130	movzbl	%al,%eax
131	movzbl	%dl,%edx
132	pxor	%mm1,%mm2
133	movl	(%edi,%eax,4),%ecx
134	movd	(%edi,%edx,4),%mm1
135	addb	%cl,%bl
136	psllq	$40,%mm1
137	movl	(%edi,%ebx,4),%edx
138	movl	%ecx,(%edi,%ebx,4)
139	movl	%edx,(%edi,%eax,4)
140	incl	%eax
141	addl	%ecx,%edx
142	movzbl	%al,%eax
143	movzbl	%dl,%edx
144	pxor	%mm1,%mm2
145	movl	(%edi,%eax,4),%ecx
146	movd	(%edi,%edx,4),%mm1
147	addb	%cl,%bl
148	psllq	$48,%mm1
149	movl	(%edi,%ebx,4),%edx
150	movl	%ecx,(%edi,%ebx,4)
151	movl	%edx,(%edi,%eax,4)
152	incl	%eax
153	addl	%ecx,%edx
154	movzbl	%al,%eax
155	movzbl	%dl,%edx
156	pxor	%mm1,%mm2
157	movl	(%edi,%eax,4),%ecx
158	movd	(%edi,%edx,4),%mm1
159	movl	%ebx,%edx
160	xorl	%ebx,%ebx
161	movb	%dl,%bl
162	cmpl	-4(%edi),%esi
163	leal	8(%esi),%esi
164	jb	.L006loop_mmx
165	psllq	$56,%mm1
166	pxor	%mm1,%mm2
167	movq	%mm2,-8(%ebp,%esi,1)
168	emms
169	cmpl	24(%esp),%esi
170	je	.L007done
171	jmp	.L002loop1
172.align	16
173.L003go4loop4:
174	leal	-4(%esi,%edx,1),%edx
175	movl	%edx,28(%esp)
176.L008loop4:
177	addb	%cl,%bl
178	movl	(%edi,%ebx,4),%edx
179	movl	%ecx,(%edi,%ebx,4)
180	movl	%edx,(%edi,%eax,4)
181	addl	%ecx,%edx
182	incb	%al
183	andl	$255,%edx
184	movl	(%edi,%eax,4),%ecx
185	movl	(%edi,%edx,4),%ebp
186	addb	%cl,%bl
187	movl	(%edi,%ebx,4),%edx
188	movl	%ecx,(%edi,%ebx,4)
189	movl	%edx,(%edi,%eax,4)
190	addl	%ecx,%edx
191	incb	%al
192	andl	$255,%edx
193	rorl	$8,%ebp
194	movl	(%edi,%eax,4),%ecx
195	orl	(%edi,%edx,4),%ebp
196	addb	%cl,%bl
197	movl	(%edi,%ebx,4),%edx
198	movl	%ecx,(%edi,%ebx,4)
199	movl	%edx,(%edi,%eax,4)
200	addl	%ecx,%edx
201	incb	%al
202	andl	$255,%edx
203	rorl	$8,%ebp
204	movl	(%edi,%eax,4),%ecx
205	orl	(%edi,%edx,4),%ebp
206	addb	%cl,%bl
207	movl	(%edi,%ebx,4),%edx
208	movl	%ecx,(%edi,%ebx,4)
209	movl	%edx,(%edi,%eax,4)
210	addl	%ecx,%edx
211	incb	%al
212	andl	$255,%edx
213	rorl	$8,%ebp
214	movl	32(%esp),%ecx
215	orl	(%edi,%edx,4),%ebp
216	rorl	$8,%ebp
217	xorl	(%esi),%ebp
218	cmpl	28(%esp),%esi
219	movl	%ebp,(%ecx,%esi,1)
220	leal	4(%esi),%esi
221	movl	(%edi,%eax,4),%ecx
222	jb	.L008loop4
223	cmpl	24(%esp),%esi
224	je	.L007done
225	movl	32(%esp),%ebp
226.align	16
227.L002loop1:
228	addb	%cl,%bl
229	movl	(%edi,%ebx,4),%edx
230	movl	%ecx,(%edi,%ebx,4)
231	movl	%edx,(%edi,%eax,4)
232	addl	%ecx,%edx
233	incb	%al
234	andl	$255,%edx
235	movl	(%edi,%edx,4),%edx
236	xorb	(%esi),%dl
237	leal	1(%esi),%esi
238	movl	(%edi,%eax,4),%ecx
239	cmpl	24(%esp),%esi
240	movb	%dl,-1(%ebp,%esi,1)
241	jb	.L002loop1
242	jmp	.L007done
243.align	16
244.L001RC4_CHAR:
245	movzbl	(%edi,%eax,1),%ecx
246.L009cloop1:
247	addb	%cl,%bl
248	movzbl	(%edi,%ebx,1),%edx
249	movb	%cl,(%edi,%ebx,1)
250	movb	%dl,(%edi,%eax,1)
251	addb	%cl,%dl
252	movzbl	(%edi,%edx,1),%edx
253	addb	$1,%al
254	xorb	(%esi),%dl
255	leal	1(%esi),%esi
256	movzbl	(%edi,%eax,1),%ecx
257	cmpl	24(%esp),%esi
258	movb	%dl,-1(%ebp,%esi,1)
259	jb	.L009cloop1
260.L007done:
261	decb	%al
262	movl	%ebx,-4(%edi)
263	movb	%al,-8(%edi)
264.L000abort:
265	popl	%edi
266	popl	%esi
267	popl	%ebx
268	popl	%ebp
269	ret
270.size	RC4,.-.L_RC4_begin
271.globl	RC4_set_key
272.type	RC4_set_key,@function
273.align	16
274RC4_set_key:
275.L_RC4_set_key_begin:
276	pushl	%ebp
277	pushl	%ebx
278	pushl	%esi
279	pushl	%edi
280	movl	20(%esp),%edi
281	movl	24(%esp),%ebp
282	movl	28(%esp),%esi
283	call	.L010PIC_me_up
284.L010PIC_me_up:
285	popl	%edx
286	leal	OPENSSL_ia32cap_P-.L010PIC_me_up(%edx),%edx
287	leal	8(%edi),%edi
288	leal	(%esi,%ebp,1),%esi
289	negl	%ebp
290	xorl	%eax,%eax
291	movl	%ebp,-4(%edi)
292	btl	$20,(%edx)
293	jc	.L011c1stloop
294.align	16
295.L012w1stloop:
296	movl	%eax,(%edi,%eax,4)
297	addb	$1,%al
298	jnc	.L012w1stloop
299	xorl	%ecx,%ecx
300	xorl	%edx,%edx
301.align	16
302.L013w2ndloop:
303	movl	(%edi,%ecx,4),%eax
304	addb	(%esi,%ebp,1),%dl
305	addb	%al,%dl
306	addl	$1,%ebp
307	movl	(%edi,%edx,4),%ebx
308	jnz	.L014wnowrap
309	movl	-4(%edi),%ebp
310.L014wnowrap:
311	movl	%eax,(%edi,%edx,4)
312	movl	%ebx,(%edi,%ecx,4)
313	addb	$1,%cl
314	jnc	.L013w2ndloop
315	jmp	.L015exit
316.align	16
317.L011c1stloop:
318	movb	%al,(%edi,%eax,1)
319	addb	$1,%al
320	jnc	.L011c1stloop
321	xorl	%ecx,%ecx
322	xorl	%edx,%edx
323	xorl	%ebx,%ebx
324.align	16
325.L016c2ndloop:
326	movb	(%edi,%ecx,1),%al
327	addb	(%esi,%ebp,1),%dl
328	addb	%al,%dl
329	addl	$1,%ebp
330	movb	(%edi,%edx,1),%bl
331	jnz	.L017cnowrap
332	movl	-4(%edi),%ebp
333.L017cnowrap:
334	movb	%al,(%edi,%edx,1)
335	movb	%bl,(%edi,%ecx,1)
336	addb	$1,%cl
337	jnc	.L016c2ndloop
338	movl	$-1,256(%edi)
339.L015exit:
340	xorl	%eax,%eax
341	movl	%eax,-8(%edi)
342	movl	%eax,-4(%edi)
343	popl	%edi
344	popl	%esi
345	popl	%ebx
346	popl	%ebp
347	ret
348.size	RC4_set_key,.-.L_RC4_set_key_begin
349.globl	RC4_options
350.type	RC4_options,@function
351.align	16
352RC4_options:
353.L_RC4_options_begin:
354	call	.L018pic_point
355.L018pic_point:
356	popl	%eax
357	leal	.L019opts-.L018pic_point(%eax),%eax
358	call	.L020PIC_me_up
359.L020PIC_me_up:
360	popl	%edx
361	leal	OPENSSL_ia32cap_P-.L020PIC_me_up(%edx),%edx
362	movl	(%edx),%edx
363	btl	$20,%edx
364	jc	.L0211xchar
365	btl	$26,%edx
366	jnc	.L022ret
367	addl	$25,%eax
368	ret
369.L0211xchar:
370	addl	$12,%eax
371.L022ret:
372	ret
373.align	64
374.L019opts:
375.byte	114,99,52,40,52,120,44,105,110,116,41,0
376.byte	114,99,52,40,49,120,44,99,104,97,114,41,0
377.byte	114,99,52,40,56,120,44,109,109,120,41,0
378.byte	82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
379.byte	80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
380.byte	111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
381.align	64
382.size	RC4_options,.-.L_RC4_options_begin
383.comm	OPENSSL_ia32cap_P,16,4
384#else
385.text
386.globl	RC4
387.type	RC4,@function
388.align	16
389RC4:
390.L_RC4_begin:
391	pushl	%ebp
392	pushl	%ebx
393	pushl	%esi
394	pushl	%edi
395	movl	20(%esp),%edi
396	movl	24(%esp),%edx
397	movl	28(%esp),%esi
398	movl	32(%esp),%ebp
399	xorl	%eax,%eax
400	xorl	%ebx,%ebx
401	cmpl	$0,%edx
402	je	.L000abort
403	movb	(%edi),%al
404	movb	4(%edi),%bl
405	addl	$8,%edi
406	leal	(%esi,%edx,1),%ecx
407	subl	%esi,%ebp
408	movl	%ecx,24(%esp)
409	incb	%al
410	cmpl	$-1,256(%edi)
411	je	.L001RC4_CHAR
412	movl	(%edi,%eax,4),%ecx
413	andl	$-4,%edx
414	jz	.L002loop1
415	movl	%ebp,32(%esp)
416	testl	$-8,%edx
417	jz	.L003go4loop4
418	leal	OPENSSL_ia32cap_P,%ebp
419	btl	$26,(%ebp)
420	jnc	.L003go4loop4
421	movl	32(%esp),%ebp
422	andl	$-8,%edx
423	leal	-8(%esi,%edx,1),%edx
424	movl	%edx,-4(%edi)
425	addb	%cl,%bl
426	movl	(%edi,%ebx,4),%edx
427	movl	%ecx,(%edi,%ebx,4)
428	movl	%edx,(%edi,%eax,4)
429	incl	%eax
430	addl	%ecx,%edx
431	movzbl	%al,%eax
432	movzbl	%dl,%edx
433	movq	(%esi),%mm0
434	movl	(%edi,%eax,4),%ecx
435	movd	(%edi,%edx,4),%mm2
436	jmp	.L004loop_mmx_enter
437.align	16
438.L005loop_mmx:
439	addb	%cl,%bl
440	psllq	$56,%mm1
441	movl	(%edi,%ebx,4),%edx
442	movl	%ecx,(%edi,%ebx,4)
443	movl	%edx,(%edi,%eax,4)
444	incl	%eax
445	addl	%ecx,%edx
446	movzbl	%al,%eax
447	movzbl	%dl,%edx
448	pxor	%mm1,%mm2
449	movq	(%esi),%mm0
450	movq	%mm2,-8(%ebp,%esi,1)
451	movl	(%edi,%eax,4),%ecx
452	movd	(%edi,%edx,4),%mm2
453.L004loop_mmx_enter:
454	addb	%cl,%bl
455	movl	(%edi,%ebx,4),%edx
456	movl	%ecx,(%edi,%ebx,4)
457	movl	%edx,(%edi,%eax,4)
458	incl	%eax
459	addl	%ecx,%edx
460	movzbl	%al,%eax
461	movzbl	%dl,%edx
462	pxor	%mm0,%mm2
463	movl	(%edi,%eax,4),%ecx
464	movd	(%edi,%edx,4),%mm1
465	addb	%cl,%bl
466	psllq	$8,%mm1
467	movl	(%edi,%ebx,4),%edx
468	movl	%ecx,(%edi,%ebx,4)
469	movl	%edx,(%edi,%eax,4)
470	incl	%eax
471	addl	%ecx,%edx
472	movzbl	%al,%eax
473	movzbl	%dl,%edx
474	pxor	%mm1,%mm2
475	movl	(%edi,%eax,4),%ecx
476	movd	(%edi,%edx,4),%mm1
477	addb	%cl,%bl
478	psllq	$16,%mm1
479	movl	(%edi,%ebx,4),%edx
480	movl	%ecx,(%edi,%ebx,4)
481	movl	%edx,(%edi,%eax,4)
482	incl	%eax
483	addl	%ecx,%edx
484	movzbl	%al,%eax
485	movzbl	%dl,%edx
486	pxor	%mm1,%mm2
487	movl	(%edi,%eax,4),%ecx
488	movd	(%edi,%edx,4),%mm1
489	addb	%cl,%bl
490	psllq	$24,%mm1
491	movl	(%edi,%ebx,4),%edx
492	movl	%ecx,(%edi,%ebx,4)
493	movl	%edx,(%edi,%eax,4)
494	incl	%eax
495	addl	%ecx,%edx
496	movzbl	%al,%eax
497	movzbl	%dl,%edx
498	pxor	%mm1,%mm2
499	movl	(%edi,%eax,4),%ecx
500	movd	(%edi,%edx,4),%mm1
501	addb	%cl,%bl
502	psllq	$32,%mm1
503	movl	(%edi,%ebx,4),%edx
504	movl	%ecx,(%edi,%ebx,4)
505	movl	%edx,(%edi,%eax,4)
506	incl	%eax
507	addl	%ecx,%edx
508	movzbl	%al,%eax
509	movzbl	%dl,%edx
510	pxor	%mm1,%mm2
511	movl	(%edi,%eax,4),%ecx
512	movd	(%edi,%edx,4),%mm1
513	addb	%cl,%bl
514	psllq	$40,%mm1
515	movl	(%edi,%ebx,4),%edx
516	movl	%ecx,(%edi,%ebx,4)
517	movl	%edx,(%edi,%eax,4)
518	incl	%eax
519	addl	%ecx,%edx
520	movzbl	%al,%eax
521	movzbl	%dl,%edx
522	pxor	%mm1,%mm2
523	movl	(%edi,%eax,4),%ecx
524	movd	(%edi,%edx,4),%mm1
525	addb	%cl,%bl
526	psllq	$48,%mm1
527	movl	(%edi,%ebx,4),%edx
528	movl	%ecx,(%edi,%ebx,4)
529	movl	%edx,(%edi,%eax,4)
530	incl	%eax
531	addl	%ecx,%edx
532	movzbl	%al,%eax
533	movzbl	%dl,%edx
534	pxor	%mm1,%mm2
535	movl	(%edi,%eax,4),%ecx
536	movd	(%edi,%edx,4),%mm1
537	movl	%ebx,%edx
538	xorl	%ebx,%ebx
539	movb	%dl,%bl
540	cmpl	-4(%edi),%esi
541	leal	8(%esi),%esi
542	jb	.L005loop_mmx
543	psllq	$56,%mm1
544	pxor	%mm1,%mm2
545	movq	%mm2,-8(%ebp,%esi,1)
546	emms
547	cmpl	24(%esp),%esi
548	je	.L006done
549	jmp	.L002loop1
550.align	16
551.L003go4loop4:
552	leal	-4(%esi,%edx,1),%edx
553	movl	%edx,28(%esp)
554.L007loop4:
555	addb	%cl,%bl
556	movl	(%edi,%ebx,4),%edx
557	movl	%ecx,(%edi,%ebx,4)
558	movl	%edx,(%edi,%eax,4)
559	addl	%ecx,%edx
560	incb	%al
561	andl	$255,%edx
562	movl	(%edi,%eax,4),%ecx
563	movl	(%edi,%edx,4),%ebp
564	addb	%cl,%bl
565	movl	(%edi,%ebx,4),%edx
566	movl	%ecx,(%edi,%ebx,4)
567	movl	%edx,(%edi,%eax,4)
568	addl	%ecx,%edx
569	incb	%al
570	andl	$255,%edx
571	rorl	$8,%ebp
572	movl	(%edi,%eax,4),%ecx
573	orl	(%edi,%edx,4),%ebp
574	addb	%cl,%bl
575	movl	(%edi,%ebx,4),%edx
576	movl	%ecx,(%edi,%ebx,4)
577	movl	%edx,(%edi,%eax,4)
578	addl	%ecx,%edx
579	incb	%al
580	andl	$255,%edx
581	rorl	$8,%ebp
582	movl	(%edi,%eax,4),%ecx
583	orl	(%edi,%edx,4),%ebp
584	addb	%cl,%bl
585	movl	(%edi,%ebx,4),%edx
586	movl	%ecx,(%edi,%ebx,4)
587	movl	%edx,(%edi,%eax,4)
588	addl	%ecx,%edx
589	incb	%al
590	andl	$255,%edx
591	rorl	$8,%ebp
592	movl	32(%esp),%ecx
593	orl	(%edi,%edx,4),%ebp
594	rorl	$8,%ebp
595	xorl	(%esi),%ebp
596	cmpl	28(%esp),%esi
597	movl	%ebp,(%ecx,%esi,1)
598	leal	4(%esi),%esi
599	movl	(%edi,%eax,4),%ecx
600	jb	.L007loop4
601	cmpl	24(%esp),%esi
602	je	.L006done
603	movl	32(%esp),%ebp
604.align	16
605.L002loop1:
606	addb	%cl,%bl
607	movl	(%edi,%ebx,4),%edx
608	movl	%ecx,(%edi,%ebx,4)
609	movl	%edx,(%edi,%eax,4)
610	addl	%ecx,%edx
611	incb	%al
612	andl	$255,%edx
613	movl	(%edi,%edx,4),%edx
614	xorb	(%esi),%dl
615	leal	1(%esi),%esi
616	movl	(%edi,%eax,4),%ecx
617	cmpl	24(%esp),%esi
618	movb	%dl,-1(%ebp,%esi,1)
619	jb	.L002loop1
620	jmp	.L006done
621.align	16
622.L001RC4_CHAR:
623	movzbl	(%edi,%eax,1),%ecx
624.L008cloop1:
625	addb	%cl,%bl
626	movzbl	(%edi,%ebx,1),%edx
627	movb	%cl,(%edi,%ebx,1)
628	movb	%dl,(%edi,%eax,1)
629	addb	%cl,%dl
630	movzbl	(%edi,%edx,1),%edx
631	addb	$1,%al
632	xorb	(%esi),%dl
633	leal	1(%esi),%esi
634	movzbl	(%edi,%eax,1),%ecx
635	cmpl	24(%esp),%esi
636	movb	%dl,-1(%ebp,%esi,1)
637	jb	.L008cloop1
638.L006done:
639	decb	%al
640	movl	%ebx,-4(%edi)
641	movb	%al,-8(%edi)
642.L000abort:
643	popl	%edi
644	popl	%esi
645	popl	%ebx
646	popl	%ebp
647	ret
648.size	RC4,.-.L_RC4_begin
649.globl	RC4_set_key
650.type	RC4_set_key,@function
651.align	16
652RC4_set_key:
653.L_RC4_set_key_begin:
654	pushl	%ebp
655	pushl	%ebx
656	pushl	%esi
657	pushl	%edi
658	movl	20(%esp),%edi
659	movl	24(%esp),%ebp
660	movl	28(%esp),%esi
661	leal	OPENSSL_ia32cap_P,%edx
662	leal	8(%edi),%edi
663	leal	(%esi,%ebp,1),%esi
664	negl	%ebp
665	xorl	%eax,%eax
666	movl	%ebp,-4(%edi)
667	btl	$20,(%edx)
668	jc	.L009c1stloop
669.align	16
670.L010w1stloop:
671	movl	%eax,(%edi,%eax,4)
672	addb	$1,%al
673	jnc	.L010w1stloop
674	xorl	%ecx,%ecx
675	xorl	%edx,%edx
676.align	16
677.L011w2ndloop:
678	movl	(%edi,%ecx,4),%eax
679	addb	(%esi,%ebp,1),%dl
680	addb	%al,%dl
681	addl	$1,%ebp
682	movl	(%edi,%edx,4),%ebx
683	jnz	.L012wnowrap
684	movl	-4(%edi),%ebp
685.L012wnowrap:
686	movl	%eax,(%edi,%edx,4)
687	movl	%ebx,(%edi,%ecx,4)
688	addb	$1,%cl
689	jnc	.L011w2ndloop
690	jmp	.L013exit
691.align	16
692.L009c1stloop:
693	movb	%al,(%edi,%eax,1)
694	addb	$1,%al
695	jnc	.L009c1stloop
696	xorl	%ecx,%ecx
697	xorl	%edx,%edx
698	xorl	%ebx,%ebx
699.align	16
700.L014c2ndloop:
701	movb	(%edi,%ecx,1),%al
702	addb	(%esi,%ebp,1),%dl
703	addb	%al,%dl
704	addl	$1,%ebp
705	movb	(%edi,%edx,1),%bl
706	jnz	.L015cnowrap
707	movl	-4(%edi),%ebp
708.L015cnowrap:
709	movb	%al,(%edi,%edx,1)
710	movb	%bl,(%edi,%ecx,1)
711	addb	$1,%cl
712	jnc	.L014c2ndloop
713	movl	$-1,256(%edi)
714.L013exit:
715	xorl	%eax,%eax
716	movl	%eax,-8(%edi)
717	movl	%eax,-4(%edi)
718	popl	%edi
719	popl	%esi
720	popl	%ebx
721	popl	%ebp
722	ret
723.size	RC4_set_key,.-.L_RC4_set_key_begin
724.globl	RC4_options
725.type	RC4_options,@function
726.align	16
727RC4_options:
728.L_RC4_options_begin:
729	call	.L016pic_point
730.L016pic_point:
731	popl	%eax
732	leal	.L017opts-.L016pic_point(%eax),%eax
733	leal	OPENSSL_ia32cap_P,%edx
734	movl	(%edx),%edx
735	btl	$20,%edx
736	jc	.L0181xchar
737	btl	$26,%edx
738	jnc	.L019ret
739	addl	$25,%eax
740	ret
741.L0181xchar:
742	addl	$12,%eax
743.L019ret:
744	ret
745.align	64
746.L017opts:
747.byte	114,99,52,40,52,120,44,105,110,116,41,0
748.byte	114,99,52,40,49,120,44,99,104,97,114,41,0
749.byte	114,99,52,40,56,120,44,109,109,120,41,0
750.byte	82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
751.byte	80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
752.byte	111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
753.align	64
754.size	RC4_options,.-.L_RC4_options_begin
755.comm	OPENSSL_ia32cap_P,16,4
756#endif
757