Sync usage with man page.
[netbsd-mini2440.git] / crypto / external / bsd / openssl / lib / libcrypto / arch / x86_64 / rc4-x86_64.S
blobe0f7b5c82b83780d18a1e370118ae5b9f2239f1b
1 .text
3 .globl  RC4
4 .type   RC4,@function
5 .align  16
6 RC4:    orq     %rsi,%rsi
7         jne     .Lentry
8         .byte   0xf3,0xc3
9 .Lentry:
10         pushq   %r12
11         pushq   %r13
13         addq    $8,%rdi
14         movl    -8(%rdi),%r8d
15         movl    -4(%rdi),%r12d
16         cmpl    $-1,256(%rdi)
17         je      .LRC4_CHAR
18         incb    %r8b
19         movl    (%rdi,%r8,4),%r9d
20         testq   $-8,%rsi
21         jz      .Lloop1
22         jmp     .Lloop8
23 .align  16
24 .Lloop8:
25         addb    %r9b,%r12b
26         movq    %r8,%r10
27         movl    (%rdi,%r12,4),%r13d
28         rorq    $8,%rax
29         incb    %r10b
30         movl    (%rdi,%r10,4),%r11d
31         cmpq    %r10,%r12
32         movl    %r9d,(%rdi,%r12,4)
33         cmoveq  %r9,%r11
34         movl    %r13d,(%rdi,%r8,4)
35         addb    %r9b,%r13b
36         movb    (%rdi,%r13,4),%al
37         addb    %r11b,%r12b
38         movq    %r10,%r8
39         movl    (%rdi,%r12,4),%r13d
40         rorq    $8,%rax
41         incb    %r8b
42         movl    (%rdi,%r8,4),%r9d
43         cmpq    %r8,%r12
44         movl    %r11d,(%rdi,%r12,4)
45         cmoveq  %r11,%r9
46         movl    %r13d,(%rdi,%r10,4)
47         addb    %r11b,%r13b
48         movb    (%rdi,%r13,4),%al
49         addb    %r9b,%r12b
50         movq    %r8,%r10
51         movl    (%rdi,%r12,4),%r13d
52         rorq    $8,%rax
53         incb    %r10b
54         movl    (%rdi,%r10,4),%r11d
55         cmpq    %r10,%r12
56         movl    %r9d,(%rdi,%r12,4)
57         cmoveq  %r9,%r11
58         movl    %r13d,(%rdi,%r8,4)
59         addb    %r9b,%r13b
60         movb    (%rdi,%r13,4),%al
61         addb    %r11b,%r12b
62         movq    %r10,%r8
63         movl    (%rdi,%r12,4),%r13d
64         rorq    $8,%rax
65         incb    %r8b
66         movl    (%rdi,%r8,4),%r9d
67         cmpq    %r8,%r12
68         movl    %r11d,(%rdi,%r12,4)
69         cmoveq  %r11,%r9
70         movl    %r13d,(%rdi,%r10,4)
71         addb    %r11b,%r13b
72         movb    (%rdi,%r13,4),%al
73         addb    %r9b,%r12b
74         movq    %r8,%r10
75         movl    (%rdi,%r12,4),%r13d
76         rorq    $8,%rax
77         incb    %r10b
78         movl    (%rdi,%r10,4),%r11d
79         cmpq    %r10,%r12
80         movl    %r9d,(%rdi,%r12,4)
81         cmoveq  %r9,%r11
82         movl    %r13d,(%rdi,%r8,4)
83         addb    %r9b,%r13b
84         movb    (%rdi,%r13,4),%al
85         addb    %r11b,%r12b
86         movq    %r10,%r8
87         movl    (%rdi,%r12,4),%r13d
88         rorq    $8,%rax
89         incb    %r8b
90         movl    (%rdi,%r8,4),%r9d
91         cmpq    %r8,%r12
92         movl    %r11d,(%rdi,%r12,4)
93         cmoveq  %r11,%r9
94         movl    %r13d,(%rdi,%r10,4)
95         addb    %r11b,%r13b
96         movb    (%rdi,%r13,4),%al
97         addb    %r9b,%r12b
98         movq    %r8,%r10
99         movl    (%rdi,%r12,4),%r13d
100         rorq    $8,%rax
101         incb    %r10b
102         movl    (%rdi,%r10,4),%r11d
103         cmpq    %r10,%r12
104         movl    %r9d,(%rdi,%r12,4)
105         cmoveq  %r9,%r11
106         movl    %r13d,(%rdi,%r8,4)
107         addb    %r9b,%r13b
108         movb    (%rdi,%r13,4),%al
109         addb    %r11b,%r12b
110         movq    %r10,%r8
111         movl    (%rdi,%r12,4),%r13d
112         rorq    $8,%rax
113         incb    %r8b
114         movl    (%rdi,%r8,4),%r9d
115         cmpq    %r8,%r12
116         movl    %r11d,(%rdi,%r12,4)
117         cmoveq  %r11,%r9
118         movl    %r13d,(%rdi,%r10,4)
119         addb    %r11b,%r13b
120         movb    (%rdi,%r13,4),%al
121         rorq    $8,%rax
122         subq    $8,%rsi
124         xorq    (%rdx),%rax
125         addq    $8,%rdx
126         movq    %rax,(%rcx)
127         addq    $8,%rcx
129         testq   $-8,%rsi
130         jnz     .Lloop8
131         cmpq    $0,%rsi
132         jne     .Lloop1
133 .Lexit:
134         subb    $1,%r8b
135         movl    %r8d,-8(%rdi)
136         movl    %r12d,-4(%rdi)
138         popq    %r13
139         popq    %r12
140         .byte   0xf3,0xc3
141 .align  16
142 .Lloop1:
143         addb    %r9b,%r12b
144         movl    (%rdi,%r12,4),%r13d
145         movl    %r9d,(%rdi,%r12,4)
146         movl    %r13d,(%rdi,%r8,4)
147         addb    %r13b,%r9b
148         incb    %r8b
149         movl    (%rdi,%r9,4),%r13d
150         movl    (%rdi,%r8,4),%r9d
151         xorb    (%rdx),%r13b
152         incq    %rdx
153         movb    %r13b,(%rcx)
154         incq    %rcx
155         decq    %rsi
156         jnz     .Lloop1
157         jmp     .Lexit
159 .align  16
160 .LRC4_CHAR:
161         addb    $1,%r8b
162         movzbl  (%rdi,%r8,1),%r9d
163         testq   $-8,%rsi
164         jz      .Lcloop1
165         cmpl    $0,260(%rdi)
166         jnz     .Lcloop1
167         pushq   %rbx
168         jmp     .Lcloop8
169 .align  16
170 .Lcloop8:
171         movl    (%rdx),%eax
172         movl    4(%rdx),%ebx
173         addb    %r9b,%r12b
174         leaq    1(%r8),%r10
175         movzbl  (%rdi,%r12,1),%r13d
176         movzbl  %r10b,%r10d
177         movzbl  (%rdi,%r10,1),%r11d
178         movb    %r9b,(%rdi,%r12,1)
179         cmpq    %r10,%r12
180         movb    %r13b,(%rdi,%r8,1)
181         jne     .Lcmov0                 
182         movq    %r9,%r11
183 .Lcmov0:
184         addb    %r9b,%r13b
185         xorb    (%rdi,%r13,1),%al
186         rorl    $8,%eax
187         addb    %r11b,%r12b
188         leaq    1(%r10),%r8
189         movzbl  (%rdi,%r12,1),%r13d
190         movzbl  %r8b,%r8d
191         movzbl  (%rdi,%r8,1),%r9d
192         movb    %r11b,(%rdi,%r12,1)
193         cmpq    %r8,%r12
194         movb    %r13b,(%rdi,%r10,1)
195         jne     .Lcmov1                 
196         movq    %r11,%r9
197 .Lcmov1:
198         addb    %r11b,%r13b
199         xorb    (%rdi,%r13,1),%al
200         rorl    $8,%eax
201         addb    %r9b,%r12b
202         leaq    1(%r8),%r10
203         movzbl  (%rdi,%r12,1),%r13d
204         movzbl  %r10b,%r10d
205         movzbl  (%rdi,%r10,1),%r11d
206         movb    %r9b,(%rdi,%r12,1)
207         cmpq    %r10,%r12
208         movb    %r13b,(%rdi,%r8,1)
209         jne     .Lcmov2                 
210         movq    %r9,%r11
211 .Lcmov2:
212         addb    %r9b,%r13b
213         xorb    (%rdi,%r13,1),%al
214         rorl    $8,%eax
215         addb    %r11b,%r12b
216         leaq    1(%r10),%r8
217         movzbl  (%rdi,%r12,1),%r13d
218         movzbl  %r8b,%r8d
219         movzbl  (%rdi,%r8,1),%r9d
220         movb    %r11b,(%rdi,%r12,1)
221         cmpq    %r8,%r12
222         movb    %r13b,(%rdi,%r10,1)
223         jne     .Lcmov3                 
224         movq    %r11,%r9
225 .Lcmov3:
226         addb    %r11b,%r13b
227         xorb    (%rdi,%r13,1),%al
228         rorl    $8,%eax
229         addb    %r9b,%r12b
230         leaq    1(%r8),%r10
231         movzbl  (%rdi,%r12,1),%r13d
232         movzbl  %r10b,%r10d
233         movzbl  (%rdi,%r10,1),%r11d
234         movb    %r9b,(%rdi,%r12,1)
235         cmpq    %r10,%r12
236         movb    %r13b,(%rdi,%r8,1)
237         jne     .Lcmov4                 
238         movq    %r9,%r11
239 .Lcmov4:
240         addb    %r9b,%r13b
241         xorb    (%rdi,%r13,1),%bl
242         rorl    $8,%ebx
243         addb    %r11b,%r12b
244         leaq    1(%r10),%r8
245         movzbl  (%rdi,%r12,1),%r13d
246         movzbl  %r8b,%r8d
247         movzbl  (%rdi,%r8,1),%r9d
248         movb    %r11b,(%rdi,%r12,1)
249         cmpq    %r8,%r12
250         movb    %r13b,(%rdi,%r10,1)
251         jne     .Lcmov5                 
252         movq    %r11,%r9
253 .Lcmov5:
254         addb    %r11b,%r13b
255         xorb    (%rdi,%r13,1),%bl
256         rorl    $8,%ebx
257         addb    %r9b,%r12b
258         leaq    1(%r8),%r10
259         movzbl  (%rdi,%r12,1),%r13d
260         movzbl  %r10b,%r10d
261         movzbl  (%rdi,%r10,1),%r11d
262         movb    %r9b,(%rdi,%r12,1)
263         cmpq    %r10,%r12
264         movb    %r13b,(%rdi,%r8,1)
265         jne     .Lcmov6                 
266         movq    %r9,%r11
267 .Lcmov6:
268         addb    %r9b,%r13b
269         xorb    (%rdi,%r13,1),%bl
270         rorl    $8,%ebx
271         addb    %r11b,%r12b
272         leaq    1(%r10),%r8
273         movzbl  (%rdi,%r12,1),%r13d
274         movzbl  %r8b,%r8d
275         movzbl  (%rdi,%r8,1),%r9d
276         movb    %r11b,(%rdi,%r12,1)
277         cmpq    %r8,%r12
278         movb    %r13b,(%rdi,%r10,1)
279         jne     .Lcmov7                 
280         movq    %r11,%r9
281 .Lcmov7:
282         addb    %r11b,%r13b
283         xorb    (%rdi,%r13,1),%bl
284         rorl    $8,%ebx
285         leaq    -8(%rsi),%rsi
286         movl    %eax,(%rcx)
287         leaq    8(%rdx),%rdx
288         movl    %ebx,4(%rcx)
289         leaq    8(%rcx),%rcx
291         testq   $-8,%rsi
292         jnz     .Lcloop8
293         popq    %rbx
294         cmpq    $0,%rsi
295         jne     .Lcloop1
296         jmp     .Lexit
297 .align  16
298 .Lcloop1:
299         addb    %r9b,%r12b
300         movzbl  (%rdi,%r12,1),%r13d
301         movb    %r9b,(%rdi,%r12,1)
302         movb    %r13b,(%rdi,%r8,1)
303         addb    %r9b,%r13b
304         addb    $1,%r8b
305         movzbl  %r13b,%r13d
306         movzbl  %r8b,%r8d
307         movzbl  (%rdi,%r13,1),%r13d
308         movzbl  (%rdi,%r8,1),%r9d
309         xorb    (%rdx),%r13b
310         leaq    1(%rdx),%rdx
311         movb    %r13b,(%rcx)
312         leaq    1(%rcx),%rcx
313         subq    $1,%rsi
314         jnz     .Lcloop1
315         jmp     .Lexit
316 .size   RC4,.-RC4
318 .globl  RC4_set_key
319 .type   RC4_set_key,@function
320 .align  16
321 RC4_set_key:
322         leaq    8(%rdi),%rdi
323         leaq    (%rdx,%rsi,1),%rdx
324         negq    %rsi
325         movq    %rsi,%rcx
326         xorl    %eax,%eax
327         xorq    %r9,%r9
328         xorq    %r10,%r10
329         xorq    %r11,%r11
331         movl    OPENSSL_ia32cap_P@GOTPCREL(%rip),%r8d
332         btl     $20,%r8d
333         jnc     .Lw1stloop
334         btl     $30,%r8d
335         setc    %r9b
336         movl    %r9d,260(%rdi)
337         jmp     .Lc1stloop
339 .align  16
340 .Lw1stloop:
341         movl    %eax,(%rdi,%rax,4)
342         addb    $1,%al
343         jnc     .Lw1stloop
345         xorq    %r9,%r9
346         xorq    %r8,%r8
347 .align  16
348 .Lw2ndloop:
349         movl    (%rdi,%r9,4),%r10d
350         addb    (%rdx,%rsi,1),%r8b
351         addb    %r10b,%r8b
352         addq    $1,%rsi
353         movl    (%rdi,%r8,4),%r11d
354         cmovzq  %rcx,%rsi
355         movl    %r10d,(%rdi,%r8,4)
356         movl    %r11d,(%rdi,%r9,4)
357         addb    $1,%r9b
358         jnc     .Lw2ndloop
359         jmp     .Lexit_key
361 .align  16
362 .Lc1stloop:
363         movb    %al,(%rdi,%rax,1)
364         addb    $1,%al
365         jnc     .Lc1stloop
367         xorq    %r9,%r9
368         xorq    %r8,%r8
369 .align  16
370 .Lc2ndloop:
371         movb    (%rdi,%r9,1),%r10b
372         addb    (%rdx,%rsi,1),%r8b
373         addb    %r10b,%r8b
374         addq    $1,%rsi
375         movb    (%rdi,%r8,1),%r11b
376         jnz     .Lcnowrap
377         movq    %rcx,%rsi
378 .Lcnowrap:
379         movb    %r10b,(%rdi,%r8,1)
380         movb    %r11b,(%rdi,%r9,1)
381         addb    $1,%r9b
382         jnc     .Lc2ndloop
383         movl    $-1,256(%rdi)
385 .align  16
386 .Lexit_key:
387         xorl    %eax,%eax
388         movl    %eax,-8(%rdi)
389         movl    %eax,-4(%rdi)
390         .byte   0xf3,0xc3
391 .size   RC4_set_key,.-RC4_set_key
393 .globl  RC4_options
394 .type   RC4_options,@function
395 .align  16
396 RC4_options:
397         .long   0x1058d48,0x90000000
398         leaq    .Lopts-.(%rax),%rax
399         movl    OPENSSL_ia32cap_P@GOTPCREL(%rip),%edx
400         btl     $20,%edx
401         jnc     .Ldone
402         addq    $12,%rax
403         btl     $30,%edx
404         jnc     .Ldone
405         addq    $13,%rax
406 .Ldone:
407         .byte   0xf3,0xc3
408 .align  64
409 .Lopts:
410 .byte   114,99,52,40,56,120,44,105,110,116,41,0
411 .byte   114,99,52,40,56,120,44,99,104,97,114,41,0
412 .byte   114,99,52,40,49,120,44,99,104,97,114,41,0
413 .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
414 .align  64
415 .size   RC4_options,.-RC4_options