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