]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - secure/lib/libcrypto/amd64/rc4-md5-x86_64.S
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / secure / lib / libcrypto / amd64 / rc4-md5-x86_64.S
1         # $FreeBSD$
2 .text   
3 .align  16
4
5 .globl  rc4_md5_enc
6 .type   rc4_md5_enc,@function
7 rc4_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         .byte   0xf3,0xc3
1260 .size   rc4_md5_enc,.-rc4_md5_enc