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