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