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