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