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