1#include "x86_arch.h"
2.text
3.align	16
4
5.globl	rc4_md5_enc
6.type	rc4_md5_enc,@function
7rc4_md5_enc:
8	cmpq	$0,%r9
9	je	.Labort
10	pushq	%rbx
11	pushq	%rbp
12	pushq	%r12
13	pushq	%r13
14	pushq	%r14
15	pushq	%r15
16	subq	$40,%rsp
17.Lbody:
18	movq	%rcx,%r11
19	movq	%r9,%r12
20	movq	%rsi,%r13
21	movq	%rdx,%r14
22	movq	%r8,%r15
23	xorq	%rbp,%rbp
24	xorq	%rcx,%rcx
25
26	leaq	8(%rdi),%rdi
27	movb	-8(%rdi),%bpl
28	movb	-4(%rdi),%cl
29
30	incb	%bpl
31	subq	%r13,%r14
32	movl	(%rdi,%rbp,4),%eax
33	addb	%al,%cl
34	leaq	(%rdi,%rbp,4),%rsi
35	shlq	$6,%r12
36	addq	%r15,%r12
37	movq	%r12,16(%rsp)
38
39	movq	%r11,24(%rsp)
40	movl	0(%r11),%r8d
41	movl	4(%r11),%r9d
42	movl	8(%r11),%r10d
43	movl	12(%r11),%r11d
44	jmp	.Loop
45
46.align	16
47.Loop:
48	movl	%r8d,0(%rsp)
49	movl	%r9d,4(%rsp)
50	movl	%r10d,8(%rsp)
51	movl	%r11d,%r12d
52	movl	%r11d,12(%rsp)
53	pxor	%xmm0,%xmm0
54	movl	(%rdi,%rcx,4),%edx
55	xorl	%r10d,%r12d
56	movl	%eax,(%rdi,%rcx,4)
57	andl	%r9d,%r12d
58	addl	0(%r15),%r8d
59	addb	%dl,%al
60	movl	4(%rsi),%ebx
61	addl	$3614090360,%r8d
62	xorl	%r11d,%r12d
63	movzbl	%al,%eax
64	movl	%edx,0(%rsi)
65	addl	%r12d,%r8d
66	addb	%bl,%cl
67	roll	$7,%r8d
68	movl	%r10d,%r12d
69	movd	(%rdi,%rax,4),%xmm0
70
71	addl	%r9d,%r8d
72	pxor	%xmm1,%xmm1
73	movl	(%rdi,%rcx,4),%edx
74	xorl	%r9d,%r12d
75	movl	%ebx,(%rdi,%rcx,4)
76	andl	%r8d,%r12d
77	addl	4(%r15),%r11d
78	addb	%dl,%bl
79	movl	8(%rsi),%eax
80	addl	$3905402710,%r11d
81	xorl	%r10d,%r12d
82	movzbl	%bl,%ebx
83	movl	%edx,4(%rsi)
84	addl	%r12d,%r11d
85	addb	%al,%cl
86	roll	$12,%r11d
87	movl	%r9d,%r12d
88	movd	(%rdi,%rbx,4),%xmm1
89
90	addl	%r8d,%r11d
91	movl	(%rdi,%rcx,4),%edx
92	xorl	%r8d,%r12d
93	movl	%eax,(%rdi,%rcx,4)
94	andl	%r11d,%r12d
95	addl	8(%r15),%r10d
96	addb	%dl,%al
97	movl	12(%rsi),%ebx
98	addl	$606105819,%r10d
99	xorl	%r9d,%r12d
100	movzbl	%al,%eax
101	movl	%edx,8(%rsi)
102	addl	%r12d,%r10d
103	addb	%bl,%cl
104	roll	$17,%r10d
105	movl	%r8d,%r12d
106	pinsrw	$1,(%rdi,%rax,4),%xmm0
107
108	addl	%r11d,%r10d
109	movl	(%rdi,%rcx,4),%edx
110	xorl	%r11d,%r12d
111	movl	%ebx,(%rdi,%rcx,4)
112	andl	%r10d,%r12d
113	addl	12(%r15),%r9d
114	addb	%dl,%bl
115	movl	16(%rsi),%eax
116	addl	$3250441966,%r9d
117	xorl	%r8d,%r12d
118	movzbl	%bl,%ebx
119	movl	%edx,12(%rsi)
120	addl	%r12d,%r9d
121	addb	%al,%cl
122	roll	$22,%r9d
123	movl	%r11d,%r12d
124	pinsrw	$1,(%rdi,%rbx,4),%xmm1
125
126	addl	%r10d,%r9d
127	movl	(%rdi,%rcx,4),%edx
128	xorl	%r10d,%r12d
129	movl	%eax,(%rdi,%rcx,4)
130	andl	%r9d,%r12d
131	addl	16(%r15),%r8d
132	addb	%dl,%al
133	movl	20(%rsi),%ebx
134	addl	$4118548399,%r8d
135	xorl	%r11d,%r12d
136	movzbl	%al,%eax
137	movl	%edx,16(%rsi)
138	addl	%r12d,%r8d
139	addb	%bl,%cl
140	roll	$7,%r8d
141	movl	%r10d,%r12d
142	pinsrw	$2,(%rdi,%rax,4),%xmm0
143
144	addl	%r9d,%r8d
145	movl	(%rdi,%rcx,4),%edx
146	xorl	%r9d,%r12d
147	movl	%ebx,(%rdi,%rcx,4)
148	andl	%r8d,%r12d
149	addl	20(%r15),%r11d
150	addb	%dl,%bl
151	movl	24(%rsi),%eax
152	addl	$1200080426,%r11d
153	xorl	%r10d,%r12d
154	movzbl	%bl,%ebx
155	movl	%edx,20(%rsi)
156	addl	%r12d,%r11d
157	addb	%al,%cl
158	roll	$12,%r11d
159	movl	%r9d,%r12d
160	pinsrw	$2,(%rdi,%rbx,4),%xmm1
161
162	addl	%r8d,%r11d
163	movl	(%rdi,%rcx,4),%edx
164	xorl	%r8d,%r12d
165	movl	%eax,(%rdi,%rcx,4)
166	andl	%r11d,%r12d
167	addl	24(%r15),%r10d
168	addb	%dl,%al
169	movl	28(%rsi),%ebx
170	addl	$2821735955,%r10d
171	xorl	%r9d,%r12d
172	movzbl	%al,%eax
173	movl	%edx,24(%rsi)
174	addl	%r12d,%r10d
175	addb	%bl,%cl
176	roll	$17,%r10d
177	movl	%r8d,%r12d
178	pinsrw	$3,(%rdi,%rax,4),%xmm0
179
180	addl	%r11d,%r10d
181	movl	(%rdi,%rcx,4),%edx
182	xorl	%r11d,%r12d
183	movl	%ebx,(%rdi,%rcx,4)
184	andl	%r10d,%r12d
185	addl	28(%r15),%r9d
186	addb	%dl,%bl
187	movl	32(%rsi),%eax
188	addl	$4249261313,%r9d
189	xorl	%r8d,%r12d
190	movzbl	%bl,%ebx
191	movl	%edx,28(%rsi)
192	addl	%r12d,%r9d
193	addb	%al,%cl
194	roll	$22,%r9d
195	movl	%r11d,%r12d
196	pinsrw	$3,(%rdi,%rbx,4),%xmm1
197
198	addl	%r10d,%r9d
199	movl	(%rdi,%rcx,4),%edx
200	xorl	%r10d,%r12d
201	movl	%eax,(%rdi,%rcx,4)
202	andl	%r9d,%r12d
203	addl	32(%r15),%r8d
204	addb	%dl,%al
205	movl	36(%rsi),%ebx
206	addl	$1770035416,%r8d
207	xorl	%r11d,%r12d
208	movzbl	%al,%eax
209	movl	%edx,32(%rsi)
210	addl	%r12d,%r8d
211	addb	%bl,%cl
212	roll	$7,%r8d
213	movl	%r10d,%r12d
214	pinsrw	$4,(%rdi,%rax,4),%xmm0
215
216	addl	%r9d,%r8d
217	movl	(%rdi,%rcx,4),%edx
218	xorl	%r9d,%r12d
219	movl	%ebx,(%rdi,%rcx,4)
220	andl	%r8d,%r12d
221	addl	36(%r15),%r11d
222	addb	%dl,%bl
223	movl	40(%rsi),%eax
224	addl	$2336552879,%r11d
225	xorl	%r10d,%r12d
226	movzbl	%bl,%ebx
227	movl	%edx,36(%rsi)
228	addl	%r12d,%r11d
229	addb	%al,%cl
230	roll	$12,%r11d
231	movl	%r9d,%r12d
232	pinsrw	$4,(%rdi,%rbx,4),%xmm1
233
234	addl	%r8d,%r11d
235	movl	(%rdi,%rcx,4),%edx
236	xorl	%r8d,%r12d
237	movl	%eax,(%rdi,%rcx,4)
238	andl	%r11d,%r12d
239	addl	40(%r15),%r10d
240	addb	%dl,%al
241	movl	44(%rsi),%ebx
242	addl	$4294925233,%r10d
243	xorl	%r9d,%r12d
244	movzbl	%al,%eax
245	movl	%edx,40(%rsi)
246	addl	%r12d,%r10d
247	addb	%bl,%cl
248	roll	$17,%r10d
249	movl	%r8d,%r12d
250	pinsrw	$5,(%rdi,%rax,4),%xmm0
251
252	addl	%r11d,%r10d
253	movl	(%rdi,%rcx,4),%edx
254	xorl	%r11d,%r12d
255	movl	%ebx,(%rdi,%rcx,4)
256	andl	%r10d,%r12d
257	addl	44(%r15),%r9d
258	addb	%dl,%bl
259	movl	48(%rsi),%eax
260	addl	$2304563134,%r9d
261	xorl	%r8d,%r12d
262	movzbl	%bl,%ebx
263	movl	%edx,44(%rsi)
264	addl	%r12d,%r9d
265	addb	%al,%cl
266	roll	$22,%r9d
267	movl	%r11d,%r12d
268	pinsrw	$5,(%rdi,%rbx,4),%xmm1
269
270	addl	%r10d,%r9d
271	movl	(%rdi,%rcx,4),%edx
272	xorl	%r10d,%r12d
273	movl	%eax,(%rdi,%rcx,4)
274	andl	%r9d,%r12d
275	addl	48(%r15),%r8d
276	addb	%dl,%al
277	movl	52(%rsi),%ebx
278	addl	$1804603682,%r8d
279	xorl	%r11d,%r12d
280	movzbl	%al,%eax
281	movl	%edx,48(%rsi)
282	addl	%r12d,%r8d
283	addb	%bl,%cl
284	roll	$7,%r8d
285	movl	%r10d,%r12d
286	pinsrw	$6,(%rdi,%rax,4),%xmm0
287
288	addl	%r9d,%r8d
289	movl	(%rdi,%rcx,4),%edx
290	xorl	%r9d,%r12d
291	movl	%ebx,(%rdi,%rcx,4)
292	andl	%r8d,%r12d
293	addl	52(%r15),%r11d
294	addb	%dl,%bl
295	movl	56(%rsi),%eax
296	addl	$4254626195,%r11d
297	xorl	%r10d,%r12d
298	movzbl	%bl,%ebx
299	movl	%edx,52(%rsi)
300	addl	%r12d,%r11d
301	addb	%al,%cl
302	roll	$12,%r11d
303	movl	%r9d,%r12d
304	pinsrw	$6,(%rdi,%rbx,4),%xmm1
305
306	addl	%r8d,%r11d
307	movl	(%rdi,%rcx,4),%edx
308	xorl	%r8d,%r12d
309	movl	%eax,(%rdi,%rcx,4)
310	andl	%r11d,%r12d
311	addl	56(%r15),%r10d
312	addb	%dl,%al
313	movl	60(%rsi),%ebx
314	addl	$2792965006,%r10d
315	xorl	%r9d,%r12d
316	movzbl	%al,%eax
317	movl	%edx,56(%rsi)
318	addl	%r12d,%r10d
319	addb	%bl,%cl
320	roll	$17,%r10d
321	movl	%r8d,%r12d
322	pinsrw	$7,(%rdi,%rax,4),%xmm0
323
324	addl	%r11d,%r10d
325	movdqu	(%r13),%xmm2
326	movl	(%rdi,%rcx,4),%edx
327	xorl	%r11d,%r12d
328	movl	%ebx,(%rdi,%rcx,4)
329	andl	%r10d,%r12d
330	addl	60(%r15),%r9d
331	addb	%dl,%bl
332	movl	64(%rsi),%eax
333	addl	$1236535329,%r9d
334	xorl	%r8d,%r12d
335	movzbl	%bl,%ebx
336	movl	%edx,60(%rsi)
337	addl	%r12d,%r9d
338	addb	%al,%cl
339	roll	$22,%r9d
340	movl	%r10d,%r12d
341	pinsrw	$7,(%rdi,%rbx,4),%xmm1
342
343	addl	%r10d,%r9d
344	psllq	$8,%xmm1
345	pxor	%xmm0,%xmm2
346	pxor	%xmm1,%xmm2
347	pxor	%xmm0,%xmm0
348	movl	(%rdi,%rcx,4),%edx
349	xorl	%r9d,%r12d
350	movl	%eax,(%rdi,%rcx,4)
351	andl	%r11d,%r12d
352	addl	4(%r15),%r8d
353	addb	%dl,%al
354	movl	68(%rsi),%ebx
355	addl	$4129170786,%r8d
356	xorl	%r10d,%r12d
357	movzbl	%al,%eax
358	movl	%edx,64(%rsi)
359	addl	%r12d,%r8d
360	addb	%bl,%cl
361	roll	$5,%r8d
362	movl	%r9d,%r12d
363	movd	(%rdi,%rax,4),%xmm0
364
365	addl	%r9d,%r8d
366	pxor	%xmm1,%xmm1
367	movl	(%rdi,%rcx,4),%edx
368	xorl	%r8d,%r12d
369	movl	%ebx,(%rdi,%rcx,4)
370	andl	%r10d,%r12d
371	addl	24(%r15),%r11d
372	addb	%dl,%bl
373	movl	72(%rsi),%eax
374	addl	$3225465664,%r11d
375	xorl	%r9d,%r12d
376	movzbl	%bl,%ebx
377	movl	%edx,68(%rsi)
378	addl	%r12d,%r11d
379	addb	%al,%cl
380	roll	$9,%r11d
381	movl	%r8d,%r12d
382	movd	(%rdi,%rbx,4),%xmm1
383
384	addl	%r8d,%r11d
385	movl	(%rdi,%rcx,4),%edx
386	xorl	%r11d,%r12d
387	movl	%eax,(%rdi,%rcx,4)
388	andl	%r9d,%r12d
389	addl	44(%r15),%r10d
390	addb	%dl,%al
391	movl	76(%rsi),%ebx
392	addl	$643717713,%r10d
393	xorl	%r8d,%r12d
394	movzbl	%al,%eax
395	movl	%edx,72(%rsi)
396	addl	%r12d,%r10d
397	addb	%bl,%cl
398	roll	$14,%r10d
399	movl	%r11d,%r12d
400	pinsrw	$1,(%rdi,%rax,4),%xmm0
401
402	addl	%r11d,%r10d
403	movl	(%rdi,%rcx,4),%edx
404	xorl	%r10d,%r12d
405	movl	%ebx,(%rdi,%rcx,4)
406	andl	%r8d,%r12d
407	addl	0(%r15),%r9d
408	addb	%dl,%bl
409	movl	80(%rsi),%eax
410	addl	$3921069994,%r9d
411	xorl	%r11d,%r12d
412	movzbl	%bl,%ebx
413	movl	%edx,76(%rsi)
414	addl	%r12d,%r9d
415	addb	%al,%cl
416	roll	$20,%r9d
417	movl	%r10d,%r12d
418	pinsrw	$1,(%rdi,%rbx,4),%xmm1
419
420	addl	%r10d,%r9d
421	movl	(%rdi,%rcx,4),%edx
422	xorl	%r9d,%r12d
423	movl	%eax,(%rdi,%rcx,4)
424	andl	%r11d,%r12d
425	addl	20(%r15),%r8d
426	addb	%dl,%al
427	movl	84(%rsi),%ebx
428	addl	$3593408605,%r8d
429	xorl	%r10d,%r12d
430	movzbl	%al,%eax
431	movl	%edx,80(%rsi)
432	addl	%r12d,%r8d
433	addb	%bl,%cl
434	roll	$5,%r8d
435	movl	%r9d,%r12d
436	pinsrw	$2,(%rdi,%rax,4),%xmm0
437
438	addl	%r9d,%r8d
439	movl	(%rdi,%rcx,4),%edx
440	xorl	%r8d,%r12d
441	movl	%ebx,(%rdi,%rcx,4)
442	andl	%r10d,%r12d
443	addl	40(%r15),%r11d
444	addb	%dl,%bl
445	movl	88(%rsi),%eax
446	addl	$38016083,%r11d
447	xorl	%r9d,%r12d
448	movzbl	%bl,%ebx
449	movl	%edx,84(%rsi)
450	addl	%r12d,%r11d
451	addb	%al,%cl
452	roll	$9,%r11d
453	movl	%r8d,%r12d
454	pinsrw	$2,(%rdi,%rbx,4),%xmm1
455
456	addl	%r8d,%r11d
457	movl	(%rdi,%rcx,4),%edx
458	xorl	%r11d,%r12d
459	movl	%eax,(%rdi,%rcx,4)
460	andl	%r9d,%r12d
461	addl	60(%r15),%r10d
462	addb	%dl,%al
463	movl	92(%rsi),%ebx
464	addl	$3634488961,%r10d
465	xorl	%r8d,%r12d
466	movzbl	%al,%eax
467	movl	%edx,88(%rsi)
468	addl	%r12d,%r10d
469	addb	%bl,%cl
470	roll	$14,%r10d
471	movl	%r11d,%r12d
472	pinsrw	$3,(%rdi,%rax,4),%xmm0
473
474	addl	%r11d,%r10d
475	movl	(%rdi,%rcx,4),%edx
476	xorl	%r10d,%r12d
477	movl	%ebx,(%rdi,%rcx,4)
478	andl	%r8d,%r12d
479	addl	16(%r15),%r9d
480	addb	%dl,%bl
481	movl	96(%rsi),%eax
482	addl	$3889429448,%r9d
483	xorl	%r11d,%r12d
484	movzbl	%bl,%ebx
485	movl	%edx,92(%rsi)
486	addl	%r12d,%r9d
487	addb	%al,%cl
488	roll	$20,%r9d
489	movl	%r10d,%r12d
490	pinsrw	$3,(%rdi,%rbx,4),%xmm1
491
492	addl	%r10d,%r9d
493	movl	(%rdi,%rcx,4),%edx
494	xorl	%r9d,%r12d
495	movl	%eax,(%rdi,%rcx,4)
496	andl	%r11d,%r12d
497	addl	36(%r15),%r8d
498	addb	%dl,%al
499	movl	100(%rsi),%ebx
500	addl	$568446438,%r8d
501	xorl	%r10d,%r12d
502	movzbl	%al,%eax
503	movl	%edx,96(%rsi)
504	addl	%r12d,%r8d
505	addb	%bl,%cl
506	roll	$5,%r8d
507	movl	%r9d,%r12d
508	pinsrw	$4,(%rdi,%rax,4),%xmm0
509
510	addl	%r9d,%r8d
511	movl	(%rdi,%rcx,4),%edx
512	xorl	%r8d,%r12d
513	movl	%ebx,(%rdi,%rcx,4)
514	andl	%r10d,%r12d
515	addl	56(%r15),%r11d
516	addb	%dl,%bl
517	movl	104(%rsi),%eax
518	addl	$3275163606,%r11d
519	xorl	%r9d,%r12d
520	movzbl	%bl,%ebx
521	movl	%edx,100(%rsi)
522	addl	%r12d,%r11d
523	addb	%al,%cl
524	roll	$9,%r11d
525	movl	%r8d,%r12d
526	pinsrw	$4,(%rdi,%rbx,4),%xmm1
527
528	addl	%r8d,%r11d
529	movl	(%rdi,%rcx,4),%edx
530	xorl	%r11d,%r12d
531	movl	%eax,(%rdi,%rcx,4)
532	andl	%r9d,%r12d
533	addl	12(%r15),%r10d
534	addb	%dl,%al
535	movl	108(%rsi),%ebx
536	addl	$4107603335,%r10d
537	xorl	%r8d,%r12d
538	movzbl	%al,%eax
539	movl	%edx,104(%rsi)
540	addl	%r12d,%r10d
541	addb	%bl,%cl
542	roll	$14,%r10d
543	movl	%r11d,%r12d
544	pinsrw	$5,(%rdi,%rax,4),%xmm0
545
546	addl	%r11d,%r10d
547	movl	(%rdi,%rcx,4),%edx
548	xorl	%r10d,%r12d
549	movl	%ebx,(%rdi,%rcx,4)
550	andl	%r8d,%r12d
551	addl	32(%r15),%r9d
552	addb	%dl,%bl
553	movl	112(%rsi),%eax
554	addl	$1163531501,%r9d
555	xorl	%r11d,%r12d
556	movzbl	%bl,%ebx
557	movl	%edx,108(%rsi)
558	addl	%r12d,%r9d
559	addb	%al,%cl
560	roll	$20,%r9d
561	movl	%r10d,%r12d
562	pinsrw	$5,(%rdi,%rbx,4),%xmm1
563
564	addl	%r10d,%r9d
565	movl	(%rdi,%rcx,4),%edx
566	xorl	%r9d,%r12d
567	movl	%eax,(%rdi,%rcx,4)
568	andl	%r11d,%r12d
569	addl	52(%r15),%r8d
570	addb	%dl,%al
571	movl	116(%rsi),%ebx
572	addl	$2850285829,%r8d
573	xorl	%r10d,%r12d
574	movzbl	%al,%eax
575	movl	%edx,112(%rsi)
576	addl	%r12d,%r8d
577	addb	%bl,%cl
578	roll	$5,%r8d
579	movl	%r9d,%r12d
580	pinsrw	$6,(%rdi,%rax,4),%xmm0
581
582	addl	%r9d,%r8d
583	movl	(%rdi,%rcx,4),%edx
584	xorl	%r8d,%r12d
585	movl	%ebx,(%rdi,%rcx,4)
586	andl	%r10d,%r12d
587	addl	8(%r15),%r11d
588	addb	%dl,%bl
589	movl	120(%rsi),%eax
590	addl	$4243563512,%r11d
591	xorl	%r9d,%r12d
592	movzbl	%bl,%ebx
593	movl	%edx,116(%rsi)
594	addl	%r12d,%r11d
595	addb	%al,%cl
596	roll	$9,%r11d
597	movl	%r8d,%r12d
598	pinsrw	$6,(%rdi,%rbx,4),%xmm1
599
600	addl	%r8d,%r11d
601	movl	(%rdi,%rcx,4),%edx
602	xorl	%r11d,%r12d
603	movl	%eax,(%rdi,%rcx,4)
604	andl	%r9d,%r12d
605	addl	28(%r15),%r10d
606	addb	%dl,%al
607	movl	124(%rsi),%ebx
608	addl	$1735328473,%r10d
609	xorl	%r8d,%r12d
610	movzbl	%al,%eax
611	movl	%edx,120(%rsi)
612	addl	%r12d,%r10d
613	addb	%bl,%cl
614	roll	$14,%r10d
615	movl	%r11d,%r12d
616	pinsrw	$7,(%rdi,%rax,4),%xmm0
617
618	addl	%r11d,%r10d
619	movdqu	16(%r13),%xmm3
620	addb	$32,%bpl
621	movl	(%rdi,%rcx,4),%edx
622	xorl	%r10d,%r12d
623	movl	%ebx,(%rdi,%rcx,4)
624	andl	%r8d,%r12d
625	addl	48(%r15),%r9d
626	addb	%dl,%bl
627	movl	0(%rdi,%rbp,4),%eax
628	addl	$2368359562,%r9d
629	xorl	%r11d,%r12d
630	movzbl	%bl,%ebx
631	movl	%edx,124(%rsi)
632	addl	%r12d,%r9d
633	addb	%al,%cl
634	roll	$20,%r9d
635	movl	%r11d,%r12d
636	pinsrw	$7,(%rdi,%rbx,4),%xmm1
637
638	addl	%r10d,%r9d
639	movq	%rcx,%rsi
640	xorq	%rcx,%rcx
641	movb	%sil,%cl
642	leaq	(%rdi,%rbp,4),%rsi
643	psllq	$8,%xmm1
644	pxor	%xmm0,%xmm3
645	pxor	%xmm1,%xmm3
646	pxor	%xmm0,%xmm0
647	movl	(%rdi,%rcx,4),%edx
648	xorl	%r10d,%r12d
649	movl	%eax,(%rdi,%rcx,4)
650	xorl	%r9d,%r12d
651	addl	20(%r15),%r8d
652	addb	%dl,%al
653	movl	4(%rsi),%ebx
654	addl	$4294588738,%r8d
655	movzbl	%al,%eax
656	addl	%r12d,%r8d
657	movl	%edx,0(%rsi)
658	addb	%bl,%cl
659	roll	$4,%r8d
660	movl	%r10d,%r12d
661	movd	(%rdi,%rax,4),%xmm0
662
663	addl	%r9d,%r8d
664	pxor	%xmm1,%xmm1
665	movl	(%rdi,%rcx,4),%edx
666	xorl	%r9d,%r12d
667	movl	%ebx,(%rdi,%rcx,4)
668	xorl	%r8d,%r12d
669	addl	32(%r15),%r11d
670	addb	%dl,%bl
671	movl	8(%rsi),%eax
672	addl	$2272392833,%r11d
673	movzbl	%bl,%ebx
674	addl	%r12d,%r11d
675	movl	%edx,4(%rsi)
676	addb	%al,%cl
677	roll	$11,%r11d
678	movl	%r9d,%r12d
679	movd	(%rdi,%rbx,4),%xmm1
680
681	addl	%r8d,%r11d
682	movl	(%rdi,%rcx,4),%edx
683	xorl	%r8d,%r12d
684	movl	%eax,(%rdi,%rcx,4)
685	xorl	%r11d,%r12d
686	addl	44(%r15),%r10d
687	addb	%dl,%al
688	movl	12(%rsi),%ebx
689	addl	$1839030562,%r10d
690	movzbl	%al,%eax
691	addl	%r12d,%r10d
692	movl	%edx,8(%rsi)
693	addb	%bl,%cl
694	roll	$16,%r10d
695	movl	%r8d,%r12d
696	pinsrw	$1,(%rdi,%rax,4),%xmm0
697
698	addl	%r11d,%r10d
699	movl	(%rdi,%rcx,4),%edx
700	xorl	%r11d,%r12d
701	movl	%ebx,(%rdi,%rcx,4)
702	xorl	%r10d,%r12d
703	addl	56(%r15),%r9d
704	addb	%dl,%bl
705	movl	16(%rsi),%eax
706	addl	$4259657740,%r9d
707	movzbl	%bl,%ebx
708	addl	%r12d,%r9d
709	movl	%edx,12(%rsi)
710	addb	%al,%cl
711	roll	$23,%r9d
712	movl	%r11d,%r12d
713	pinsrw	$1,(%rdi,%rbx,4),%xmm1
714
715	addl	%r10d,%r9d
716	movl	(%rdi,%rcx,4),%edx
717	xorl	%r10d,%r12d
718	movl	%eax,(%rdi,%rcx,4)
719	xorl	%r9d,%r12d
720	addl	4(%r15),%r8d
721	addb	%dl,%al
722	movl	20(%rsi),%ebx
723	addl	$2763975236,%r8d
724	movzbl	%al,%eax
725	addl	%r12d,%r8d
726	movl	%edx,16(%rsi)
727	addb	%bl,%cl
728	roll	$4,%r8d
729	movl	%r10d,%r12d
730	pinsrw	$2,(%rdi,%rax,4),%xmm0
731
732	addl	%r9d,%r8d
733	movl	(%rdi,%rcx,4),%edx
734	xorl	%r9d,%r12d
735	movl	%ebx,(%rdi,%rcx,4)
736	xorl	%r8d,%r12d
737	addl	16(%r15),%r11d
738	addb	%dl,%bl
739	movl	24(%rsi),%eax
740	addl	$1272893353,%r11d
741	movzbl	%bl,%ebx
742	addl	%r12d,%r11d
743	movl	%edx,20(%rsi)
744	addb	%al,%cl
745	roll	$11,%r11d
746	movl	%r9d,%r12d
747	pinsrw	$2,(%rdi,%rbx,4),%xmm1
748
749	addl	%r8d,%r11d
750	movl	(%rdi,%rcx,4),%edx
751	xorl	%r8d,%r12d
752	movl	%eax,(%rdi,%rcx,4)
753	xorl	%r11d,%r12d
754	addl	28(%r15),%r10d
755	addb	%dl,%al
756	movl	28(%rsi),%ebx
757	addl	$4139469664,%r10d
758	movzbl	%al,%eax
759	addl	%r12d,%r10d
760	movl	%edx,24(%rsi)
761	addb	%bl,%cl
762	roll	$16,%r10d
763	movl	%r8d,%r12d
764	pinsrw	$3,(%rdi,%rax,4),%xmm0
765
766	addl	%r11d,%r10d
767	movl	(%rdi,%rcx,4),%edx
768	xorl	%r11d,%r12d
769	movl	%ebx,(%rdi,%rcx,4)
770	xorl	%r10d,%r12d
771	addl	40(%r15),%r9d
772	addb	%dl,%bl
773	movl	32(%rsi),%eax
774	addl	$3200236656,%r9d
775	movzbl	%bl,%ebx
776	addl	%r12d,%r9d
777	movl	%edx,28(%rsi)
778	addb	%al,%cl
779	roll	$23,%r9d
780	movl	%r11d,%r12d
781	pinsrw	$3,(%rdi,%rbx,4),%xmm1
782
783	addl	%r10d,%r9d
784	movl	(%rdi,%rcx,4),%edx
785	xorl	%r10d,%r12d
786	movl	%eax,(%rdi,%rcx,4)
787	xorl	%r9d,%r12d
788	addl	52(%r15),%r8d
789	addb	%dl,%al
790	movl	36(%rsi),%ebx
791	addl	$681279174,%r8d
792	movzbl	%al,%eax
793	addl	%r12d,%r8d
794	movl	%edx,32(%rsi)
795	addb	%bl,%cl
796	roll	$4,%r8d
797	movl	%r10d,%r12d
798	pinsrw	$4,(%rdi,%rax,4),%xmm0
799
800	addl	%r9d,%r8d
801	movl	(%rdi,%rcx,4),%edx
802	xorl	%r9d,%r12d
803	movl	%ebx,(%rdi,%rcx,4)
804	xorl	%r8d,%r12d
805	addl	0(%r15),%r11d
806	addb	%dl,%bl
807	movl	40(%rsi),%eax
808	addl	$3936430074,%r11d
809	movzbl	%bl,%ebx
810	addl	%r12d,%r11d
811	movl	%edx,36(%rsi)
812	addb	%al,%cl
813	roll	$11,%r11d
814	movl	%r9d,%r12d
815	pinsrw	$4,(%rdi,%rbx,4),%xmm1
816
817	addl	%r8d,%r11d
818	movl	(%rdi,%rcx,4),%edx
819	xorl	%r8d,%r12d
820	movl	%eax,(%rdi,%rcx,4)
821	xorl	%r11d,%r12d
822	addl	12(%r15),%r10d
823	addb	%dl,%al
824	movl	44(%rsi),%ebx
825	addl	$3572445317,%r10d
826	movzbl	%al,%eax
827	addl	%r12d,%r10d
828	movl	%edx,40(%rsi)
829	addb	%bl,%cl
830	roll	$16,%r10d
831	movl	%r8d,%r12d
832	pinsrw	$5,(%rdi,%rax,4),%xmm0
833
834	addl	%r11d,%r10d
835	movl	(%rdi,%rcx,4),%edx
836	xorl	%r11d,%r12d
837	movl	%ebx,(%rdi,%rcx,4)
838	xorl	%r10d,%r12d
839	addl	24(%r15),%r9d
840	addb	%dl,%bl
841	movl	48(%rsi),%eax
842	addl	$76029189,%r9d
843	movzbl	%bl,%ebx
844	addl	%r12d,%r9d
845	movl	%edx,44(%rsi)
846	addb	%al,%cl
847	roll	$23,%r9d
848	movl	%r11d,%r12d
849	pinsrw	$5,(%rdi,%rbx,4),%xmm1
850
851	addl	%r10d,%r9d
852	movl	(%rdi,%rcx,4),%edx
853	xorl	%r10d,%r12d
854	movl	%eax,(%rdi,%rcx,4)
855	xorl	%r9d,%r12d
856	addl	36(%r15),%r8d
857	addb	%dl,%al
858	movl	52(%rsi),%ebx
859	addl	$3654602809,%r8d
860	movzbl	%al,%eax
861	addl	%r12d,%r8d
862	movl	%edx,48(%rsi)
863	addb	%bl,%cl
864	roll	$4,%r8d
865	movl	%r10d,%r12d
866	pinsrw	$6,(%rdi,%rax,4),%xmm0
867
868	addl	%r9d,%r8d
869	movl	(%rdi,%rcx,4),%edx
870	xorl	%r9d,%r12d
871	movl	%ebx,(%rdi,%rcx,4)
872	xorl	%r8d,%r12d
873	addl	48(%r15),%r11d
874	addb	%dl,%bl
875	movl	56(%rsi),%eax
876	addl	$3873151461,%r11d
877	movzbl	%bl,%ebx
878	addl	%r12d,%r11d
879	movl	%edx,52(%rsi)
880	addb	%al,%cl
881	roll	$11,%r11d
882	movl	%r9d,%r12d
883	pinsrw	$6,(%rdi,%rbx,4),%xmm1
884
885	addl	%r8d,%r11d
886	movl	(%rdi,%rcx,4),%edx
887	xorl	%r8d,%r12d
888	movl	%eax,(%rdi,%rcx,4)
889	xorl	%r11d,%r12d
890	addl	60(%r15),%r10d
891	addb	%dl,%al
892	movl	60(%rsi),%ebx
893	addl	$530742520,%r10d
894	movzbl	%al,%eax
895	addl	%r12d,%r10d
896	movl	%edx,56(%rsi)
897	addb	%bl,%cl
898	roll	$16,%r10d
899	movl	%r8d,%r12d
900	pinsrw	$7,(%rdi,%rax,4),%xmm0
901
902	addl	%r11d,%r10d
903	movdqu	32(%r13),%xmm4
904	movl	(%rdi,%rcx,4),%edx
905	xorl	%r11d,%r12d
906	movl	%ebx,(%rdi,%rcx,4)
907	xorl	%r10d,%r12d
908	addl	8(%r15),%r9d
909	addb	%dl,%bl
910	movl	64(%rsi),%eax
911	addl	$3299628645,%r9d
912	movzbl	%bl,%ebx
913	addl	%r12d,%r9d
914	movl	%edx,60(%rsi)
915	addb	%al,%cl
916	roll	$23,%r9d
917	movl	$-1,%r12d
918	pinsrw	$7,(%rdi,%rbx,4),%xmm1
919
920	addl	%r10d,%r9d
921	psllq	$8,%xmm1
922	pxor	%xmm0,%xmm4
923	pxor	%xmm1,%xmm4
924	pxor	%xmm0,%xmm0
925	movl	(%rdi,%rcx,4),%edx
926	xorl	%r11d,%r12d
927	movl	%eax,(%rdi,%rcx,4)
928	orl	%r9d,%r12d
929	addl	0(%r15),%r8d
930	addb	%dl,%al
931	movl	68(%rsi),%ebx
932	addl	$4096336452,%r8d
933	movzbl	%al,%eax
934	xorl	%r10d,%r12d
935	movl	%edx,64(%rsi)
936	addl	%r12d,%r8d
937	addb	%bl,%cl
938	roll	$6,%r8d
939	movl	$-1,%r12d
940	movd	(%rdi,%rax,4),%xmm0
941
942	addl	%r9d,%r8d
943	pxor	%xmm1,%xmm1
944	movl	(%rdi,%rcx,4),%edx
945	xorl	%r10d,%r12d
946	movl	%ebx,(%rdi,%rcx,4)
947	orl	%r8d,%r12d
948	addl	28(%r15),%r11d
949	addb	%dl,%bl
950	movl	72(%rsi),%eax
951	addl	$1126891415,%r11d
952	movzbl	%bl,%ebx
953	xorl	%r9d,%r12d
954	movl	%edx,68(%rsi)
955	addl	%r12d,%r11d
956	addb	%al,%cl
957	roll	$10,%r11d
958	movl	$-1,%r12d
959	movd	(%rdi,%rbx,4),%xmm1
960
961	addl	%r8d,%r11d
962	movl	(%rdi,%rcx,4),%edx
963	xorl	%r9d,%r12d
964	movl	%eax,(%rdi,%rcx,4)
965	orl	%r11d,%r12d
966	addl	56(%r15),%r10d
967	addb	%dl,%al
968	movl	76(%rsi),%ebx
969	addl	$2878612391,%r10d
970	movzbl	%al,%eax
971	xorl	%r8d,%r12d
972	movl	%edx,72(%rsi)
973	addl	%r12d,%r10d
974	addb	%bl,%cl
975	roll	$15,%r10d
976	movl	$-1,%r12d
977	pinsrw	$1,(%rdi,%rax,4),%xmm0
978
979	addl	%r11d,%r10d
980	movl	(%rdi,%rcx,4),%edx
981	xorl	%r8d,%r12d
982	movl	%ebx,(%rdi,%rcx,4)
983	orl	%r10d,%r12d
984	addl	20(%r15),%r9d
985	addb	%dl,%bl
986	movl	80(%rsi),%eax
987	addl	$4237533241,%r9d
988	movzbl	%bl,%ebx
989	xorl	%r11d,%r12d
990	movl	%edx,76(%rsi)
991	addl	%r12d,%r9d
992	addb	%al,%cl
993	roll	$21,%r9d
994	movl	$-1,%r12d
995	pinsrw	$1,(%rdi,%rbx,4),%xmm1
996
997	addl	%r10d,%r9d
998	movl	(%rdi,%rcx,4),%edx
999	xorl	%r11d,%r12d
1000	movl	%eax,(%rdi,%rcx,4)
1001	orl	%r9d,%r12d
1002	addl	48(%r15),%r8d
1003	addb	%dl,%al
1004	movl	84(%rsi),%ebx
1005	addl	$1700485571,%r8d
1006	movzbl	%al,%eax
1007	xorl	%r10d,%r12d
1008	movl	%edx,80(%rsi)
1009	addl	%r12d,%r8d
1010	addb	%bl,%cl
1011	roll	$6,%r8d
1012	movl	$-1,%r12d
1013	pinsrw	$2,(%rdi,%rax,4),%xmm0
1014
1015	addl	%r9d,%r8d
1016	movl	(%rdi,%rcx,4),%edx
1017	xorl	%r10d,%r12d
1018	movl	%ebx,(%rdi,%rcx,4)
1019	orl	%r8d,%r12d
1020	addl	12(%r15),%r11d
1021	addb	%dl,%bl
1022	movl	88(%rsi),%eax
1023	addl	$2399980690,%r11d
1024	movzbl	%bl,%ebx
1025	xorl	%r9d,%r12d
1026	movl	%edx,84(%rsi)
1027	addl	%r12d,%r11d
1028	addb	%al,%cl
1029	roll	$10,%r11d
1030	movl	$-1,%r12d
1031	pinsrw	$2,(%rdi,%rbx,4),%xmm1
1032
1033	addl	%r8d,%r11d
1034	movl	(%rdi,%rcx,4),%edx
1035	xorl	%r9d,%r12d
1036	movl	%eax,(%rdi,%rcx,4)
1037	orl	%r11d,%r12d
1038	addl	40(%r15),%r10d
1039	addb	%dl,%al
1040	movl	92(%rsi),%ebx
1041	addl	$4293915773,%r10d
1042	movzbl	%al,%eax
1043	xorl	%r8d,%r12d
1044	movl	%edx,88(%rsi)
1045	addl	%r12d,%r10d
1046	addb	%bl,%cl
1047	roll	$15,%r10d
1048	movl	$-1,%r12d
1049	pinsrw	$3,(%rdi,%rax,4),%xmm0
1050
1051	addl	%r11d,%r10d
1052	movl	(%rdi,%rcx,4),%edx
1053	xorl	%r8d,%r12d
1054	movl	%ebx,(%rdi,%rcx,4)
1055	orl	%r10d,%r12d
1056	addl	4(%r15),%r9d
1057	addb	%dl,%bl
1058	movl	96(%rsi),%eax
1059	addl	$2240044497,%r9d
1060	movzbl	%bl,%ebx
1061	xorl	%r11d,%r12d
1062	movl	%edx,92(%rsi)
1063	addl	%r12d,%r9d
1064	addb	%al,%cl
1065	roll	$21,%r9d
1066	movl	$-1,%r12d
1067	pinsrw	$3,(%rdi,%rbx,4),%xmm1
1068
1069	addl	%r10d,%r9d
1070	movl	(%rdi,%rcx,4),%edx
1071	xorl	%r11d,%r12d
1072	movl	%eax,(%rdi,%rcx,4)
1073	orl	%r9d,%r12d
1074	addl	32(%r15),%r8d
1075	addb	%dl,%al
1076	movl	100(%rsi),%ebx
1077	addl	$1873313359,%r8d
1078	movzbl	%al,%eax
1079	xorl	%r10d,%r12d
1080	movl	%edx,96(%rsi)
1081	addl	%r12d,%r8d
1082	addb	%bl,%cl
1083	roll	$6,%r8d
1084	movl	$-1,%r12d
1085	pinsrw	$4,(%rdi,%rax,4),%xmm0
1086
1087	addl	%r9d,%r8d
1088	movl	(%rdi,%rcx,4),%edx
1089	xorl	%r10d,%r12d
1090	movl	%ebx,(%rdi,%rcx,4)
1091	orl	%r8d,%r12d
1092	addl	60(%r15),%r11d
1093	addb	%dl,%bl
1094	movl	104(%rsi),%eax
1095	addl	$4264355552,%r11d
1096	movzbl	%bl,%ebx
1097	xorl	%r9d,%r12d
1098	movl	%edx,100(%rsi)
1099	addl	%r12d,%r11d
1100	addb	%al,%cl
1101	roll	$10,%r11d
1102	movl	$-1,%r12d
1103	pinsrw	$4,(%rdi,%rbx,4),%xmm1
1104
1105	addl	%r8d,%r11d
1106	movl	(%rdi,%rcx,4),%edx
1107	xorl	%r9d,%r12d
1108	movl	%eax,(%rdi,%rcx,4)
1109	orl	%r11d,%r12d
1110	addl	24(%r15),%r10d
1111	addb	%dl,%al
1112	movl	108(%rsi),%ebx
1113	addl	$2734768916,%r10d
1114	movzbl	%al,%eax
1115	xorl	%r8d,%r12d
1116	movl	%edx,104(%rsi)
1117	addl	%r12d,%r10d
1118	addb	%bl,%cl
1119	roll	$15,%r10d
1120	movl	$-1,%r12d
1121	pinsrw	$5,(%rdi,%rax,4),%xmm0
1122
1123	addl	%r11d,%r10d
1124	movl	(%rdi,%rcx,4),%edx
1125	xorl	%r8d,%r12d
1126	movl	%ebx,(%rdi,%rcx,4)
1127	orl	%r10d,%r12d
1128	addl	52(%r15),%r9d
1129	addb	%dl,%bl
1130	movl	112(%rsi),%eax
1131	addl	$1309151649,%r9d
1132	movzbl	%bl,%ebx
1133	xorl	%r11d,%r12d
1134	movl	%edx,108(%rsi)
1135	addl	%r12d,%r9d
1136	addb	%al,%cl
1137	roll	$21,%r9d
1138	movl	$-1,%r12d
1139	pinsrw	$5,(%rdi,%rbx,4),%xmm1
1140
1141	addl	%r10d,%r9d
1142	movl	(%rdi,%rcx,4),%edx
1143	xorl	%r11d,%r12d
1144	movl	%eax,(%rdi,%rcx,4)
1145	orl	%r9d,%r12d
1146	addl	16(%r15),%r8d
1147	addb	%dl,%al
1148	movl	116(%rsi),%ebx
1149	addl	$4149444226,%r8d
1150	movzbl	%al,%eax
1151	xorl	%r10d,%r12d
1152	movl	%edx,112(%rsi)
1153	addl	%r12d,%r8d
1154	addb	%bl,%cl
1155	roll	$6,%r8d
1156	movl	$-1,%r12d
1157	pinsrw	$6,(%rdi,%rax,4),%xmm0
1158
1159	addl	%r9d,%r8d
1160	movl	(%rdi,%rcx,4),%edx
1161	xorl	%r10d,%r12d
1162	movl	%ebx,(%rdi,%rcx,4)
1163	orl	%r8d,%r12d
1164	addl	44(%r15),%r11d
1165	addb	%dl,%bl
1166	movl	120(%rsi),%eax
1167	addl	$3174756917,%r11d
1168	movzbl	%bl,%ebx
1169	xorl	%r9d,%r12d
1170	movl	%edx,116(%rsi)
1171	addl	%r12d,%r11d
1172	addb	%al,%cl
1173	roll	$10,%r11d
1174	movl	$-1,%r12d
1175	pinsrw	$6,(%rdi,%rbx,4),%xmm1
1176
1177	addl	%r8d,%r11d
1178	movl	(%rdi,%rcx,4),%edx
1179	xorl	%r9d,%r12d
1180	movl	%eax,(%rdi,%rcx,4)
1181	orl	%r11d,%r12d
1182	addl	8(%r15),%r10d
1183	addb	%dl,%al
1184	movl	124(%rsi),%ebx
1185	addl	$718787259,%r10d
1186	movzbl	%al,%eax
1187	xorl	%r8d,%r12d
1188	movl	%edx,120(%rsi)
1189	addl	%r12d,%r10d
1190	addb	%bl,%cl
1191	roll	$15,%r10d
1192	movl	$-1,%r12d
1193	pinsrw	$7,(%rdi,%rax,4),%xmm0
1194
1195	addl	%r11d,%r10d
1196	movdqu	48(%r13),%xmm5
1197	addb	$32,%bpl
1198	movl	(%rdi,%rcx,4),%edx
1199	xorl	%r8d,%r12d
1200	movl	%ebx,(%rdi,%rcx,4)
1201	orl	%r10d,%r12d
1202	addl	36(%r15),%r9d
1203	addb	%dl,%bl
1204	movl	0(%rdi,%rbp,4),%eax
1205	addl	$3951481745,%r9d
1206	movzbl	%bl,%ebx
1207	xorl	%r11d,%r12d
1208	movl	%edx,124(%rsi)
1209	addl	%r12d,%r9d
1210	addb	%al,%cl
1211	roll	$21,%r9d
1212	movl	$-1,%r12d
1213	pinsrw	$7,(%rdi,%rbx,4),%xmm1
1214
1215	addl	%r10d,%r9d
1216	movq	%rbp,%rsi
1217	xorq	%rbp,%rbp
1218	movb	%sil,%bpl
1219	movq	%rcx,%rsi
1220	xorq	%rcx,%rcx
1221	movb	%sil,%cl
1222	leaq	(%rdi,%rbp,4),%rsi
1223	psllq	$8,%xmm1
1224	pxor	%xmm0,%xmm5
1225	pxor	%xmm1,%xmm5
1226	addl	0(%rsp),%r8d
1227	addl	4(%rsp),%r9d
1228	addl	8(%rsp),%r10d
1229	addl	12(%rsp),%r11d
1230
1231	movdqu	%xmm2,(%r14,%r13,1)
1232	movdqu	%xmm3,16(%r14,%r13,1)
1233	movdqu	%xmm4,32(%r14,%r13,1)
1234	movdqu	%xmm5,48(%r14,%r13,1)
1235	leaq	64(%r15),%r15
1236	leaq	64(%r13),%r13
1237	cmpq	16(%rsp),%r15
1238	jb	.Loop
1239
1240	movq	24(%rsp),%r12
1241	subb	%al,%cl
1242	movl	%r8d,0(%r12)
1243	movl	%r9d,4(%r12)
1244	movl	%r10d,8(%r12)
1245	movl	%r11d,12(%r12)
1246	subb	$1,%bpl
1247	movl	%ebp,-8(%rdi)
1248	movl	%ecx,-4(%rdi)
1249
1250	movq	40(%rsp),%r15
1251	movq	48(%rsp),%r14
1252	movq	56(%rsp),%r13
1253	movq	64(%rsp),%r12
1254	movq	72(%rsp),%rbp
1255	movq	80(%rsp),%rbx
1256	leaq	88(%rsp),%rsp
1257.Lepilogue:
1258.Labort:
1259	retq
1260.size	rc4_md5_enc,.-rc4_md5_enc
1261#if defined(HAVE_GNU_STACK)
1262.section .note.GNU-stack,"",%progbits
1263#endif
1264