]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - secure/lib/libcrypto/amd64/rc4-x86_64.S
- Make libcrypto.so position independent on i386.
[FreeBSD/stable/10.git] / secure / lib / libcrypto / amd64 / rc4-x86_64.S
1 # $FreeBSD$
2 # Do not modify. This file is auto-generated from rc4-x86_64.pl.
3 .text   
4
5
6 .globl  RC4
7 .type   RC4,@function
8 .align  16
9 RC4:    orq     %rsi,%rsi
10         jne     .Lentry
11         .byte   0xf3,0xc3
12 .Lentry:
13         pushq   %rbx
14         pushq   %r12
15         pushq   %r13
16 .Lprologue:
17         movq    %rsi,%r11
18         movq    %rdx,%r12
19         movq    %rcx,%r13
20         xorq    %r10,%r10
21         xorq    %rcx,%rcx
22
23         leaq    8(%rdi),%rdi
24         movb    -8(%rdi),%r10b
25         movb    -4(%rdi),%cl
26         cmpl    $-1,256(%rdi)
27         je      .LRC4_CHAR
28         movl    OPENSSL_ia32cap_P(%rip),%r8d
29         xorq    %rbx,%rbx
30         incb    %r10b
31         subq    %r10,%rbx
32         subq    %r12,%r13
33         movl    (%rdi,%r10,4),%eax
34         testq   $-16,%r11
35         jz      .Lloop1
36         btl     $30,%r8d
37         jc      .Lintel
38         andq    $7,%rbx
39         leaq    1(%r10),%rsi
40         jz      .Loop8
41         subq    %rbx,%r11
42 .Loop8_warmup:
43         addb    %al,%cl
44         movl    (%rdi,%rcx,4),%edx
45         movl    %eax,(%rdi,%rcx,4)
46         movl    %edx,(%rdi,%r10,4)
47         addb    %dl,%al
48         incb    %r10b
49         movl    (%rdi,%rax,4),%edx
50         movl    (%rdi,%r10,4),%eax
51         xorb    (%r12),%dl
52         movb    %dl,(%r13,%r12,1)
53         leaq    1(%r12),%r12
54         decq    %rbx
55         jnz     .Loop8_warmup
56
57         leaq    1(%r10),%rsi
58         jmp     .Loop8
59 .align  16
60 .Loop8:
61         addb    %al,%cl
62         movl    (%rdi,%rcx,4),%edx
63         movl    %eax,(%rdi,%rcx,4)
64         movl    0(%rdi,%rsi,4),%ebx
65         rorq    $8,%r8
66         movl    %edx,0(%rdi,%r10,4)
67         addb    %al,%dl
68         movb    (%rdi,%rdx,4),%r8b
69         addb    %bl,%cl
70         movl    (%rdi,%rcx,4),%edx
71         movl    %ebx,(%rdi,%rcx,4)
72         movl    4(%rdi,%rsi,4),%eax
73         rorq    $8,%r8
74         movl    %edx,4(%rdi,%r10,4)
75         addb    %bl,%dl
76         movb    (%rdi,%rdx,4),%r8b
77         addb    %al,%cl
78         movl    (%rdi,%rcx,4),%edx
79         movl    %eax,(%rdi,%rcx,4)
80         movl    8(%rdi,%rsi,4),%ebx
81         rorq    $8,%r8
82         movl    %edx,8(%rdi,%r10,4)
83         addb    %al,%dl
84         movb    (%rdi,%rdx,4),%r8b
85         addb    %bl,%cl
86         movl    (%rdi,%rcx,4),%edx
87         movl    %ebx,(%rdi,%rcx,4)
88         movl    12(%rdi,%rsi,4),%eax
89         rorq    $8,%r8
90         movl    %edx,12(%rdi,%r10,4)
91         addb    %bl,%dl
92         movb    (%rdi,%rdx,4),%r8b
93         addb    %al,%cl
94         movl    (%rdi,%rcx,4),%edx
95         movl    %eax,(%rdi,%rcx,4)
96         movl    16(%rdi,%rsi,4),%ebx
97         rorq    $8,%r8
98         movl    %edx,16(%rdi,%r10,4)
99         addb    %al,%dl
100         movb    (%rdi,%rdx,4),%r8b
101         addb    %bl,%cl
102         movl    (%rdi,%rcx,4),%edx
103         movl    %ebx,(%rdi,%rcx,4)
104         movl    20(%rdi,%rsi,4),%eax
105         rorq    $8,%r8
106         movl    %edx,20(%rdi,%r10,4)
107         addb    %bl,%dl
108         movb    (%rdi,%rdx,4),%r8b
109         addb    %al,%cl
110         movl    (%rdi,%rcx,4),%edx
111         movl    %eax,(%rdi,%rcx,4)
112         movl    24(%rdi,%rsi,4),%ebx
113         rorq    $8,%r8
114         movl    %edx,24(%rdi,%r10,4)
115         addb    %al,%dl
116         movb    (%rdi,%rdx,4),%r8b
117         addb    $8,%sil
118         addb    %bl,%cl
119         movl    (%rdi,%rcx,4),%edx
120         movl    %ebx,(%rdi,%rcx,4)
121         movl    -4(%rdi,%rsi,4),%eax
122         rorq    $8,%r8
123         movl    %edx,28(%rdi,%r10,4)
124         addb    %bl,%dl
125         movb    (%rdi,%rdx,4),%r8b
126         addb    $8,%r10b
127         rorq    $8,%r8
128         subq    $8,%r11
129
130         xorq    (%r12),%r8
131         movq    %r8,(%r13,%r12,1)
132         leaq    8(%r12),%r12
133
134         testq   $-8,%r11
135         jnz     .Loop8
136         cmpq    $0,%r11
137         jne     .Lloop1
138         jmp     .Lexit
139
140 .align  16
141 .Lintel:
142         testq   $-32,%r11
143         jz      .Lloop1
144         andq    $15,%rbx
145         jz      .Loop16_is_hot
146         subq    %rbx,%r11
147 .Loop16_warmup:
148         addb    %al,%cl
149         movl    (%rdi,%rcx,4),%edx
150         movl    %eax,(%rdi,%rcx,4)
151         movl    %edx,(%rdi,%r10,4)
152         addb    %dl,%al
153         incb    %r10b
154         movl    (%rdi,%rax,4),%edx
155         movl    (%rdi,%r10,4),%eax
156         xorb    (%r12),%dl
157         movb    %dl,(%r13,%r12,1)
158         leaq    1(%r12),%r12
159         decq    %rbx
160         jnz     .Loop16_warmup
161
162         movq    %rcx,%rbx
163         xorq    %rcx,%rcx
164         movb    %bl,%cl
165
166 .Loop16_is_hot:
167         leaq    (%rdi,%r10,4),%rsi
168         addb    %al,%cl
169         movl    (%rdi,%rcx,4),%edx
170         pxor    %xmm0,%xmm0
171         movl    %eax,(%rdi,%rcx,4)
172         addb    %dl,%al
173         movl    4(%rsi),%ebx
174         movzbl  %al,%eax
175         movl    %edx,0(%rsi)
176         addb    %bl,%cl
177         pinsrw  $0,(%rdi,%rax,4),%xmm0
178         jmp     .Loop16_enter
179 .align  16
180 .Loop16:
181         addb    %al,%cl
182         movl    (%rdi,%rcx,4),%edx
183         pxor    %xmm0,%xmm2
184         psllq   $8,%xmm1
185         pxor    %xmm0,%xmm0
186         movl    %eax,(%rdi,%rcx,4)
187         addb    %dl,%al
188         movl    4(%rsi),%ebx
189         movzbl  %al,%eax
190         movl    %edx,0(%rsi)
191         pxor    %xmm1,%xmm2
192         addb    %bl,%cl
193         pinsrw  $0,(%rdi,%rax,4),%xmm0
194         movdqu  %xmm2,(%r13,%r12,1)
195         leaq    16(%r12),%r12
196 .Loop16_enter:
197         movl    (%rdi,%rcx,4),%edx
198         pxor    %xmm1,%xmm1
199         movl    %ebx,(%rdi,%rcx,4)
200         addb    %dl,%bl
201         movl    8(%rsi),%eax
202         movzbl  %bl,%ebx
203         movl    %edx,4(%rsi)
204         addb    %al,%cl
205         pinsrw  $0,(%rdi,%rbx,4),%xmm1
206         movl    (%rdi,%rcx,4),%edx
207         movl    %eax,(%rdi,%rcx,4)
208         addb    %dl,%al
209         movl    12(%rsi),%ebx
210         movzbl  %al,%eax
211         movl    %edx,8(%rsi)
212         addb    %bl,%cl
213         pinsrw  $1,(%rdi,%rax,4),%xmm0
214         movl    (%rdi,%rcx,4),%edx
215         movl    %ebx,(%rdi,%rcx,4)
216         addb    %dl,%bl
217         movl    16(%rsi),%eax
218         movzbl  %bl,%ebx
219         movl    %edx,12(%rsi)
220         addb    %al,%cl
221         pinsrw  $1,(%rdi,%rbx,4),%xmm1
222         movl    (%rdi,%rcx,4),%edx
223         movl    %eax,(%rdi,%rcx,4)
224         addb    %dl,%al
225         movl    20(%rsi),%ebx
226         movzbl  %al,%eax
227         movl    %edx,16(%rsi)
228         addb    %bl,%cl
229         pinsrw  $2,(%rdi,%rax,4),%xmm0
230         movl    (%rdi,%rcx,4),%edx
231         movl    %ebx,(%rdi,%rcx,4)
232         addb    %dl,%bl
233         movl    24(%rsi),%eax
234         movzbl  %bl,%ebx
235         movl    %edx,20(%rsi)
236         addb    %al,%cl
237         pinsrw  $2,(%rdi,%rbx,4),%xmm1
238         movl    (%rdi,%rcx,4),%edx
239         movl    %eax,(%rdi,%rcx,4)
240         addb    %dl,%al
241         movl    28(%rsi),%ebx
242         movzbl  %al,%eax
243         movl    %edx,24(%rsi)
244         addb    %bl,%cl
245         pinsrw  $3,(%rdi,%rax,4),%xmm0
246         movl    (%rdi,%rcx,4),%edx
247         movl    %ebx,(%rdi,%rcx,4)
248         addb    %dl,%bl
249         movl    32(%rsi),%eax
250         movzbl  %bl,%ebx
251         movl    %edx,28(%rsi)
252         addb    %al,%cl
253         pinsrw  $3,(%rdi,%rbx,4),%xmm1
254         movl    (%rdi,%rcx,4),%edx
255         movl    %eax,(%rdi,%rcx,4)
256         addb    %dl,%al
257         movl    36(%rsi),%ebx
258         movzbl  %al,%eax
259         movl    %edx,32(%rsi)
260         addb    %bl,%cl
261         pinsrw  $4,(%rdi,%rax,4),%xmm0
262         movl    (%rdi,%rcx,4),%edx
263         movl    %ebx,(%rdi,%rcx,4)
264         addb    %dl,%bl
265         movl    40(%rsi),%eax
266         movzbl  %bl,%ebx
267         movl    %edx,36(%rsi)
268         addb    %al,%cl
269         pinsrw  $4,(%rdi,%rbx,4),%xmm1
270         movl    (%rdi,%rcx,4),%edx
271         movl    %eax,(%rdi,%rcx,4)
272         addb    %dl,%al
273         movl    44(%rsi),%ebx
274         movzbl  %al,%eax
275         movl    %edx,40(%rsi)
276         addb    %bl,%cl
277         pinsrw  $5,(%rdi,%rax,4),%xmm0
278         movl    (%rdi,%rcx,4),%edx
279         movl    %ebx,(%rdi,%rcx,4)
280         addb    %dl,%bl
281         movl    48(%rsi),%eax
282         movzbl  %bl,%ebx
283         movl    %edx,44(%rsi)
284         addb    %al,%cl
285         pinsrw  $5,(%rdi,%rbx,4),%xmm1
286         movl    (%rdi,%rcx,4),%edx
287         movl    %eax,(%rdi,%rcx,4)
288         addb    %dl,%al
289         movl    52(%rsi),%ebx
290         movzbl  %al,%eax
291         movl    %edx,48(%rsi)
292         addb    %bl,%cl
293         pinsrw  $6,(%rdi,%rax,4),%xmm0
294         movl    (%rdi,%rcx,4),%edx
295         movl    %ebx,(%rdi,%rcx,4)
296         addb    %dl,%bl
297         movl    56(%rsi),%eax
298         movzbl  %bl,%ebx
299         movl    %edx,52(%rsi)
300         addb    %al,%cl
301         pinsrw  $6,(%rdi,%rbx,4),%xmm1
302         movl    (%rdi,%rcx,4),%edx
303         movl    %eax,(%rdi,%rcx,4)
304         addb    %dl,%al
305         movl    60(%rsi),%ebx
306         movzbl  %al,%eax
307         movl    %edx,56(%rsi)
308         addb    %bl,%cl
309         pinsrw  $7,(%rdi,%rax,4),%xmm0
310         addb    $16,%r10b
311         movdqu  (%r12),%xmm2
312         movl    (%rdi,%rcx,4),%edx
313         movl    %ebx,(%rdi,%rcx,4)
314         addb    %dl,%bl
315         movzbl  %bl,%ebx
316         movl    %edx,60(%rsi)
317         leaq    (%rdi,%r10,4),%rsi
318         pinsrw  $7,(%rdi,%rbx,4),%xmm1
319         movl    (%rsi),%eax
320         movq    %rcx,%rbx
321         xorq    %rcx,%rcx
322         subq    $16,%r11
323         movb    %bl,%cl
324         testq   $-16,%r11
325         jnz     .Loop16
326
327         psllq   $8,%xmm1
328         pxor    %xmm0,%xmm2
329         pxor    %xmm1,%xmm2
330         movdqu  %xmm2,(%r13,%r12,1)
331         leaq    16(%r12),%r12
332
333         cmpq    $0,%r11
334         jne     .Lloop1
335         jmp     .Lexit
336
337 .align  16
338 .Lloop1:
339         addb    %al,%cl
340         movl    (%rdi,%rcx,4),%edx
341         movl    %eax,(%rdi,%rcx,4)
342         movl    %edx,(%rdi,%r10,4)
343         addb    %dl,%al
344         incb    %r10b
345         movl    (%rdi,%rax,4),%edx
346         movl    (%rdi,%r10,4),%eax
347         xorb    (%r12),%dl
348         movb    %dl,(%r13,%r12,1)
349         leaq    1(%r12),%r12
350         decq    %r11
351         jnz     .Lloop1
352         jmp     .Lexit
353
354 .align  16
355 .LRC4_CHAR:
356         addb    $1,%r10b
357         movzbl  (%rdi,%r10,1),%eax
358         testq   $-8,%r11
359         jz      .Lcloop1
360         jmp     .Lcloop8
361 .align  16
362 .Lcloop8:
363         movl    (%r12),%r8d
364         movl    4(%r12),%r9d
365         addb    %al,%cl
366         leaq    1(%r10),%rsi
367         movzbl  (%rdi,%rcx,1),%edx
368         movzbl  %sil,%esi
369         movzbl  (%rdi,%rsi,1),%ebx
370         movb    %al,(%rdi,%rcx,1)
371         cmpq    %rsi,%rcx
372         movb    %dl,(%rdi,%r10,1)
373         jne     .Lcmov0                 
374         movq    %rax,%rbx
375 .Lcmov0:
376         addb    %al,%dl
377         xorb    (%rdi,%rdx,1),%r8b
378         rorl    $8,%r8d
379         addb    %bl,%cl
380         leaq    1(%rsi),%r10
381         movzbl  (%rdi,%rcx,1),%edx
382         movzbl  %r10b,%r10d
383         movzbl  (%rdi,%r10,1),%eax
384         movb    %bl,(%rdi,%rcx,1)
385         cmpq    %r10,%rcx
386         movb    %dl,(%rdi,%rsi,1)
387         jne     .Lcmov1                 
388         movq    %rbx,%rax
389 .Lcmov1:
390         addb    %bl,%dl
391         xorb    (%rdi,%rdx,1),%r8b
392         rorl    $8,%r8d
393         addb    %al,%cl
394         leaq    1(%r10),%rsi
395         movzbl  (%rdi,%rcx,1),%edx
396         movzbl  %sil,%esi
397         movzbl  (%rdi,%rsi,1),%ebx
398         movb    %al,(%rdi,%rcx,1)
399         cmpq    %rsi,%rcx
400         movb    %dl,(%rdi,%r10,1)
401         jne     .Lcmov2                 
402         movq    %rax,%rbx
403 .Lcmov2:
404         addb    %al,%dl
405         xorb    (%rdi,%rdx,1),%r8b
406         rorl    $8,%r8d
407         addb    %bl,%cl
408         leaq    1(%rsi),%r10
409         movzbl  (%rdi,%rcx,1),%edx
410         movzbl  %r10b,%r10d
411         movzbl  (%rdi,%r10,1),%eax
412         movb    %bl,(%rdi,%rcx,1)
413         cmpq    %r10,%rcx
414         movb    %dl,(%rdi,%rsi,1)
415         jne     .Lcmov3                 
416         movq    %rbx,%rax
417 .Lcmov3:
418         addb    %bl,%dl
419         xorb    (%rdi,%rdx,1),%r8b
420         rorl    $8,%r8d
421         addb    %al,%cl
422         leaq    1(%r10),%rsi
423         movzbl  (%rdi,%rcx,1),%edx
424         movzbl  %sil,%esi
425         movzbl  (%rdi,%rsi,1),%ebx
426         movb    %al,(%rdi,%rcx,1)
427         cmpq    %rsi,%rcx
428         movb    %dl,(%rdi,%r10,1)
429         jne     .Lcmov4                 
430         movq    %rax,%rbx
431 .Lcmov4:
432         addb    %al,%dl
433         xorb    (%rdi,%rdx,1),%r9b
434         rorl    $8,%r9d
435         addb    %bl,%cl
436         leaq    1(%rsi),%r10
437         movzbl  (%rdi,%rcx,1),%edx
438         movzbl  %r10b,%r10d
439         movzbl  (%rdi,%r10,1),%eax
440         movb    %bl,(%rdi,%rcx,1)
441         cmpq    %r10,%rcx
442         movb    %dl,(%rdi,%rsi,1)
443         jne     .Lcmov5                 
444         movq    %rbx,%rax
445 .Lcmov5:
446         addb    %bl,%dl
447         xorb    (%rdi,%rdx,1),%r9b
448         rorl    $8,%r9d
449         addb    %al,%cl
450         leaq    1(%r10),%rsi
451         movzbl  (%rdi,%rcx,1),%edx
452         movzbl  %sil,%esi
453         movzbl  (%rdi,%rsi,1),%ebx
454         movb    %al,(%rdi,%rcx,1)
455         cmpq    %rsi,%rcx
456         movb    %dl,(%rdi,%r10,1)
457         jne     .Lcmov6                 
458         movq    %rax,%rbx
459 .Lcmov6:
460         addb    %al,%dl
461         xorb    (%rdi,%rdx,1),%r9b
462         rorl    $8,%r9d
463         addb    %bl,%cl
464         leaq    1(%rsi),%r10
465         movzbl  (%rdi,%rcx,1),%edx
466         movzbl  %r10b,%r10d
467         movzbl  (%rdi,%r10,1),%eax
468         movb    %bl,(%rdi,%rcx,1)
469         cmpq    %r10,%rcx
470         movb    %dl,(%rdi,%rsi,1)
471         jne     .Lcmov7                 
472         movq    %rbx,%rax
473 .Lcmov7:
474         addb    %bl,%dl
475         xorb    (%rdi,%rdx,1),%r9b
476         rorl    $8,%r9d
477         leaq    -8(%r11),%r11
478         movl    %r8d,(%r13)
479         leaq    8(%r12),%r12
480         movl    %r9d,4(%r13)
481         leaq    8(%r13),%r13
482
483         testq   $-8,%r11
484         jnz     .Lcloop8
485         cmpq    $0,%r11
486         jne     .Lcloop1
487         jmp     .Lexit
488 .align  16
489 .Lcloop1:
490         addb    %al,%cl
491         movzbl  %cl,%ecx
492         movzbl  (%rdi,%rcx,1),%edx
493         movb    %al,(%rdi,%rcx,1)
494         movb    %dl,(%rdi,%r10,1)
495         addb    %al,%dl
496         addb    $1,%r10b
497         movzbl  %dl,%edx
498         movzbl  %r10b,%r10d
499         movzbl  (%rdi,%rdx,1),%edx
500         movzbl  (%rdi,%r10,1),%eax
501         xorb    (%r12),%dl
502         leaq    1(%r12),%r12
503         movb    %dl,(%r13)
504         leaq    1(%r13),%r13
505         subq    $1,%r11
506         jnz     .Lcloop1
507         jmp     .Lexit
508
509 .align  16
510 .Lexit:
511         subb    $1,%r10b
512         movl    %r10d,-8(%rdi)
513         movl    %ecx,-4(%rdi)
514
515         movq    (%rsp),%r13
516         movq    8(%rsp),%r12
517         movq    16(%rsp),%rbx
518         addq    $24,%rsp
519 .Lepilogue:
520         .byte   0xf3,0xc3
521 .size   RC4,.-RC4
522 .globl  private_RC4_set_key
523 .type   private_RC4_set_key,@function
524 .align  16
525 private_RC4_set_key:
526         leaq    8(%rdi),%rdi
527         leaq    (%rdx,%rsi,1),%rdx
528         negq    %rsi
529         movq    %rsi,%rcx
530         xorl    %eax,%eax
531         xorq    %r9,%r9
532         xorq    %r10,%r10
533         xorq    %r11,%r11
534
535         movl    OPENSSL_ia32cap_P(%rip),%r8d
536         btl     $20,%r8d
537         jc      .Lc1stloop
538         jmp     .Lw1stloop
539
540 .align  16
541 .Lw1stloop:
542         movl    %eax,(%rdi,%rax,4)
543         addb    $1,%al
544         jnc     .Lw1stloop
545
546         xorq    %r9,%r9
547         xorq    %r8,%r8
548 .align  16
549 .Lw2ndloop:
550         movl    (%rdi,%r9,4),%r10d
551         addb    (%rdx,%rsi,1),%r8b
552         addb    %r10b,%r8b
553         addq    $1,%rsi
554         movl    (%rdi,%r8,4),%r11d
555         cmovzq  %rcx,%rsi
556         movl    %r10d,(%rdi,%r8,4)
557         movl    %r11d,(%rdi,%r9,4)
558         addb    $1,%r9b
559         jnc     .Lw2ndloop
560         jmp     .Lexit_key
561
562 .align  16
563 .Lc1stloop:
564         movb    %al,(%rdi,%rax,1)
565         addb    $1,%al
566         jnc     .Lc1stloop
567
568         xorq    %r9,%r9
569         xorq    %r8,%r8
570 .align  16
571 .Lc2ndloop:
572         movb    (%rdi,%r9,1),%r10b
573         addb    (%rdx,%rsi,1),%r8b
574         addb    %r10b,%r8b
575         addq    $1,%rsi
576         movb    (%rdi,%r8,1),%r11b
577         jnz     .Lcnowrap
578         movq    %rcx,%rsi
579 .Lcnowrap:
580         movb    %r10b,(%rdi,%r8,1)
581         movb    %r11b,(%rdi,%r9,1)
582         addb    $1,%r9b
583         jnc     .Lc2ndloop
584         movl    $-1,256(%rdi)
585
586 .align  16
587 .Lexit_key:
588         xorl    %eax,%eax
589         movl    %eax,-8(%rdi)
590         movl    %eax,-4(%rdi)
591         .byte   0xf3,0xc3
592 .size   private_RC4_set_key,.-private_RC4_set_key
593
594 .globl  RC4_options
595 .type   RC4_options,@function
596 .align  16
597 RC4_options:
598         leaq    .Lopts(%rip),%rax
599         movl    OPENSSL_ia32cap_P(%rip),%edx
600         btl     $20,%edx
601         jc      .L8xchar
602         btl     $30,%edx
603         jnc     .Ldone
604         addq    $25,%rax
605         .byte   0xf3,0xc3
606 .L8xchar:
607         addq    $12,%rax
608 .Ldone:
609         .byte   0xf3,0xc3
610 .align  64
611 .Lopts:
612 .byte   114,99,52,40,56,120,44,105,110,116,41,0
613 .byte   114,99,52,40,56,120,44,99,104,97,114,41,0
614 .byte   114,99,52,40,49,54,120,44,105,110,116,41,0
615 .byte   82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
616 .align  64
617 .size   RC4_options,.-RC4_options