]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/i386/chacha-x86.S
MFV: r362286
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / i386 / chacha-x86.S
1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from chacha-x86.pl. */
3 #ifdef PIC
4 .text
5 .globl  ChaCha20_ctr32
6 .type   ChaCha20_ctr32,@function
7 .align  16
8 ChaCha20_ctr32:
9 .L_ChaCha20_ctr32_begin:
10         pushl   %ebp
11         pushl   %ebx
12         pushl   %esi
13         pushl   %edi
14         xorl    %eax,%eax
15         cmpl    28(%esp),%eax
16         je      .L000no_data
17         call    .Lpic_point
18 .Lpic_point:
19         popl    %eax
20         leal    OPENSSL_ia32cap_P-.Lpic_point(%eax),%ebp
21         testl   $16777216,(%ebp)
22         jz      .L001x86
23         testl   $512,4(%ebp)
24         jz      .L001x86
25         jmp     .Lssse3_shortcut
26 .L001x86:
27         movl    32(%esp),%esi
28         movl    36(%esp),%edi
29         subl    $132,%esp
30         movl    (%esi),%eax
31         movl    4(%esi),%ebx
32         movl    8(%esi),%ecx
33         movl    12(%esi),%edx
34         movl    %eax,80(%esp)
35         movl    %ebx,84(%esp)
36         movl    %ecx,88(%esp)
37         movl    %edx,92(%esp)
38         movl    16(%esi),%eax
39         movl    20(%esi),%ebx
40         movl    24(%esi),%ecx
41         movl    28(%esi),%edx
42         movl    %eax,96(%esp)
43         movl    %ebx,100(%esp)
44         movl    %ecx,104(%esp)
45         movl    %edx,108(%esp)
46         movl    (%edi),%eax
47         movl    4(%edi),%ebx
48         movl    8(%edi),%ecx
49         movl    12(%edi),%edx
50         subl    $1,%eax
51         movl    %eax,112(%esp)
52         movl    %ebx,116(%esp)
53         movl    %ecx,120(%esp)
54         movl    %edx,124(%esp)
55         jmp     .L002entry
56 .align  16
57 .L003outer_loop:
58         movl    %ebx,156(%esp)
59         movl    %eax,152(%esp)
60         movl    %ecx,160(%esp)
61 .L002entry:
62         movl    $1634760805,%eax
63         movl    $857760878,4(%esp)
64         movl    $2036477234,8(%esp)
65         movl    $1797285236,12(%esp)
66         movl    84(%esp),%ebx
67         movl    88(%esp),%ebp
68         movl    104(%esp),%ecx
69         movl    108(%esp),%esi
70         movl    116(%esp),%edx
71         movl    120(%esp),%edi
72         movl    %ebx,20(%esp)
73         movl    %ebp,24(%esp)
74         movl    %ecx,40(%esp)
75         movl    %esi,44(%esp)
76         movl    %edx,52(%esp)
77         movl    %edi,56(%esp)
78         movl    92(%esp),%ebx
79         movl    124(%esp),%edi
80         movl    112(%esp),%edx
81         movl    80(%esp),%ebp
82         movl    96(%esp),%ecx
83         movl    100(%esp),%esi
84         addl    $1,%edx
85         movl    %ebx,28(%esp)
86         movl    %edi,60(%esp)
87         movl    %edx,112(%esp)
88         movl    $10,%ebx
89         jmp     .L004loop
90 .align  16
91 .L004loop:
92         addl    %ebp,%eax
93         movl    %ebx,128(%esp)
94         movl    %ebp,%ebx
95         xorl    %eax,%edx
96         roll    $16,%edx
97         addl    %edx,%ecx
98         xorl    %ecx,%ebx
99         movl    52(%esp),%edi
100         roll    $12,%ebx
101         movl    20(%esp),%ebp
102         addl    %ebx,%eax
103         xorl    %eax,%edx
104         movl    %eax,(%esp)
105         roll    $8,%edx
106         movl    4(%esp),%eax
107         addl    %edx,%ecx
108         movl    %edx,48(%esp)
109         xorl    %ecx,%ebx
110         addl    %ebp,%eax
111         roll    $7,%ebx
112         xorl    %eax,%edi
113         movl    %ecx,32(%esp)
114         roll    $16,%edi
115         movl    %ebx,16(%esp)
116         addl    %edi,%esi
117         movl    40(%esp),%ecx
118         xorl    %esi,%ebp
119         movl    56(%esp),%edx
120         roll    $12,%ebp
121         movl    24(%esp),%ebx
122         addl    %ebp,%eax
123         xorl    %eax,%edi
124         movl    %eax,4(%esp)
125         roll    $8,%edi
126         movl    8(%esp),%eax
127         addl    %edi,%esi
128         movl    %edi,52(%esp)
129         xorl    %esi,%ebp
130         addl    %ebx,%eax
131         roll    $7,%ebp
132         xorl    %eax,%edx
133         movl    %esi,36(%esp)
134         roll    $16,%edx
135         movl    %ebp,20(%esp)
136         addl    %edx,%ecx
137         movl    44(%esp),%esi
138         xorl    %ecx,%ebx
139         movl    60(%esp),%edi
140         roll    $12,%ebx
141         movl    28(%esp),%ebp
142         addl    %ebx,%eax
143         xorl    %eax,%edx
144         movl    %eax,8(%esp)
145         roll    $8,%edx
146         movl    12(%esp),%eax
147         addl    %edx,%ecx
148         movl    %edx,56(%esp)
149         xorl    %ecx,%ebx
150         addl    %ebp,%eax
151         roll    $7,%ebx
152         xorl    %eax,%edi
153         roll    $16,%edi
154         movl    %ebx,24(%esp)
155         addl    %edi,%esi
156         xorl    %esi,%ebp
157         roll    $12,%ebp
158         movl    20(%esp),%ebx
159         addl    %ebp,%eax
160         xorl    %eax,%edi
161         movl    %eax,12(%esp)
162         roll    $8,%edi
163         movl    (%esp),%eax
164         addl    %edi,%esi
165         movl    %edi,%edx
166         xorl    %esi,%ebp
167         addl    %ebx,%eax
168         roll    $7,%ebp
169         xorl    %eax,%edx
170         roll    $16,%edx
171         movl    %ebp,28(%esp)
172         addl    %edx,%ecx
173         xorl    %ecx,%ebx
174         movl    48(%esp),%edi
175         roll    $12,%ebx
176         movl    24(%esp),%ebp
177         addl    %ebx,%eax
178         xorl    %eax,%edx
179         movl    %eax,(%esp)
180         roll    $8,%edx
181         movl    4(%esp),%eax
182         addl    %edx,%ecx
183         movl    %edx,60(%esp)
184         xorl    %ecx,%ebx
185         addl    %ebp,%eax
186         roll    $7,%ebx
187         xorl    %eax,%edi
188         movl    %ecx,40(%esp)
189         roll    $16,%edi
190         movl    %ebx,20(%esp)
191         addl    %edi,%esi
192         movl    32(%esp),%ecx
193         xorl    %esi,%ebp
194         movl    52(%esp),%edx
195         roll    $12,%ebp
196         movl    28(%esp),%ebx
197         addl    %ebp,%eax
198         xorl    %eax,%edi
199         movl    %eax,4(%esp)
200         roll    $8,%edi
201         movl    8(%esp),%eax
202         addl    %edi,%esi
203         movl    %edi,48(%esp)
204         xorl    %esi,%ebp
205         addl    %ebx,%eax
206         roll    $7,%ebp
207         xorl    %eax,%edx
208         movl    %esi,44(%esp)
209         roll    $16,%edx
210         movl    %ebp,24(%esp)
211         addl    %edx,%ecx
212         movl    36(%esp),%esi
213         xorl    %ecx,%ebx
214         movl    56(%esp),%edi
215         roll    $12,%ebx
216         movl    16(%esp),%ebp
217         addl    %ebx,%eax
218         xorl    %eax,%edx
219         movl    %eax,8(%esp)
220         roll    $8,%edx
221         movl    12(%esp),%eax
222         addl    %edx,%ecx
223         movl    %edx,52(%esp)
224         xorl    %ecx,%ebx
225         addl    %ebp,%eax
226         roll    $7,%ebx
227         xorl    %eax,%edi
228         roll    $16,%edi
229         movl    %ebx,28(%esp)
230         addl    %edi,%esi
231         xorl    %esi,%ebp
232         movl    48(%esp),%edx
233         roll    $12,%ebp
234         movl    128(%esp),%ebx
235         addl    %ebp,%eax
236         xorl    %eax,%edi
237         movl    %eax,12(%esp)
238         roll    $8,%edi
239         movl    (%esp),%eax
240         addl    %edi,%esi
241         movl    %edi,56(%esp)
242         xorl    %esi,%ebp
243         roll    $7,%ebp
244         decl    %ebx
245         jnz     .L004loop
246         movl    160(%esp),%ebx
247         addl    $1634760805,%eax
248         addl    80(%esp),%ebp
249         addl    96(%esp),%ecx
250         addl    100(%esp),%esi
251         cmpl    $64,%ebx
252         jb      .L005tail
253         movl    156(%esp),%ebx
254         addl    112(%esp),%edx
255         addl    120(%esp),%edi
256         xorl    (%ebx),%eax
257         xorl    16(%ebx),%ebp
258         movl    %eax,(%esp)
259         movl    152(%esp),%eax
260         xorl    32(%ebx),%ecx
261         xorl    36(%ebx),%esi
262         xorl    48(%ebx),%edx
263         xorl    56(%ebx),%edi
264         movl    %ebp,16(%eax)
265         movl    %ecx,32(%eax)
266         movl    %esi,36(%eax)
267         movl    %edx,48(%eax)
268         movl    %edi,56(%eax)
269         movl    4(%esp),%ebp
270         movl    8(%esp),%ecx
271         movl    12(%esp),%esi
272         movl    20(%esp),%edx
273         movl    24(%esp),%edi
274         addl    $857760878,%ebp
275         addl    $2036477234,%ecx
276         addl    $1797285236,%esi
277         addl    84(%esp),%edx
278         addl    88(%esp),%edi
279         xorl    4(%ebx),%ebp
280         xorl    8(%ebx),%ecx
281         xorl    12(%ebx),%esi
282         xorl    20(%ebx),%edx
283         xorl    24(%ebx),%edi
284         movl    %ebp,4(%eax)
285         movl    %ecx,8(%eax)
286         movl    %esi,12(%eax)
287         movl    %edx,20(%eax)
288         movl    %edi,24(%eax)
289         movl    28(%esp),%ebp
290         movl    40(%esp),%ecx
291         movl    44(%esp),%esi
292         movl    52(%esp),%edx
293         movl    60(%esp),%edi
294         addl    92(%esp),%ebp
295         addl    104(%esp),%ecx
296         addl    108(%esp),%esi
297         addl    116(%esp),%edx
298         addl    124(%esp),%edi
299         xorl    28(%ebx),%ebp
300         xorl    40(%ebx),%ecx
301         xorl    44(%ebx),%esi
302         xorl    52(%ebx),%edx
303         xorl    60(%ebx),%edi
304         leal    64(%ebx),%ebx
305         movl    %ebp,28(%eax)
306         movl    (%esp),%ebp
307         movl    %ecx,40(%eax)
308         movl    160(%esp),%ecx
309         movl    %esi,44(%eax)
310         movl    %edx,52(%eax)
311         movl    %edi,60(%eax)
312         movl    %ebp,(%eax)
313         leal    64(%eax),%eax
314         subl    $64,%ecx
315         jnz     .L003outer_loop
316         jmp     .L006done
317 .L005tail:
318         addl    112(%esp),%edx
319         addl    120(%esp),%edi
320         movl    %eax,(%esp)
321         movl    %ebp,16(%esp)
322         movl    %ecx,32(%esp)
323         movl    %esi,36(%esp)
324         movl    %edx,48(%esp)
325         movl    %edi,56(%esp)
326         movl    4(%esp),%ebp
327         movl    8(%esp),%ecx
328         movl    12(%esp),%esi
329         movl    20(%esp),%edx
330         movl    24(%esp),%edi
331         addl    $857760878,%ebp
332         addl    $2036477234,%ecx
333         addl    $1797285236,%esi
334         addl    84(%esp),%edx
335         addl    88(%esp),%edi
336         movl    %ebp,4(%esp)
337         movl    %ecx,8(%esp)
338         movl    %esi,12(%esp)
339         movl    %edx,20(%esp)
340         movl    %edi,24(%esp)
341         movl    28(%esp),%ebp
342         movl    40(%esp),%ecx
343         movl    44(%esp),%esi
344         movl    52(%esp),%edx
345         movl    60(%esp),%edi
346         addl    92(%esp),%ebp
347         addl    104(%esp),%ecx
348         addl    108(%esp),%esi
349         addl    116(%esp),%edx
350         addl    124(%esp),%edi
351         movl    %ebp,28(%esp)
352         movl    156(%esp),%ebp
353         movl    %ecx,40(%esp)
354         movl    152(%esp),%ecx
355         movl    %esi,44(%esp)
356         xorl    %esi,%esi
357         movl    %edx,52(%esp)
358         movl    %edi,60(%esp)
359         xorl    %eax,%eax
360         xorl    %edx,%edx
361 .L007tail_loop:
362         movb    (%esi,%ebp,1),%al
363         movb    (%esp,%esi,1),%dl
364         leal    1(%esi),%esi
365         xorb    %dl,%al
366         movb    %al,-1(%ecx,%esi,1)
367         decl    %ebx
368         jnz     .L007tail_loop
369 .L006done:
370         addl    $132,%esp
371 .L000no_data:
372         popl    %edi
373         popl    %esi
374         popl    %ebx
375         popl    %ebp
376         ret
377 .size   ChaCha20_ctr32,.-.L_ChaCha20_ctr32_begin
378 .globl  ChaCha20_ssse3
379 .type   ChaCha20_ssse3,@function
380 .align  16
381 ChaCha20_ssse3:
382 .L_ChaCha20_ssse3_begin:
383         pushl   %ebp
384         pushl   %ebx
385         pushl   %esi
386         pushl   %edi
387 .Lssse3_shortcut:
388         movl    20(%esp),%edi
389         movl    24(%esp),%esi
390         movl    28(%esp),%ecx
391         movl    32(%esp),%edx
392         movl    36(%esp),%ebx
393         movl    %esp,%ebp
394         subl    $524,%esp
395         andl    $-64,%esp
396         movl    %ebp,512(%esp)
397         leal    .Lssse3_data-.Lpic_point(%eax),%eax
398         movdqu  (%ebx),%xmm3
399 .L0081x:
400         movdqa  32(%eax),%xmm0
401         movdqu  (%edx),%xmm1
402         movdqu  16(%edx),%xmm2
403         movdqa  (%eax),%xmm6
404         movdqa  16(%eax),%xmm7
405         movl    %ebp,48(%esp)
406         movdqa  %xmm0,(%esp)
407         movdqa  %xmm1,16(%esp)
408         movdqa  %xmm2,32(%esp)
409         movdqa  %xmm3,48(%esp)
410         movl    $10,%edx
411         jmp     .L009loop1x
412 .align  16
413 .L010outer1x:
414         movdqa  80(%eax),%xmm3
415         movdqa  (%esp),%xmm0
416         movdqa  16(%esp),%xmm1
417         movdqa  32(%esp),%xmm2
418         paddd   48(%esp),%xmm3
419         movl    $10,%edx
420         movdqa  %xmm3,48(%esp)
421         jmp     .L009loop1x
422 .align  16
423 .L009loop1x:
424         paddd   %xmm1,%xmm0
425         pxor    %xmm0,%xmm3
426 .byte   102,15,56,0,222
427         paddd   %xmm3,%xmm2
428         pxor    %xmm2,%xmm1
429         movdqa  %xmm1,%xmm4
430         psrld   $20,%xmm1
431         pslld   $12,%xmm4
432         por     %xmm4,%xmm1
433         paddd   %xmm1,%xmm0
434         pxor    %xmm0,%xmm3
435 .byte   102,15,56,0,223
436         paddd   %xmm3,%xmm2
437         pxor    %xmm2,%xmm1
438         movdqa  %xmm1,%xmm4
439         psrld   $25,%xmm1
440         pslld   $7,%xmm4
441         por     %xmm4,%xmm1
442         pshufd  $78,%xmm2,%xmm2
443         pshufd  $57,%xmm1,%xmm1
444         pshufd  $147,%xmm3,%xmm3
445         nop
446         paddd   %xmm1,%xmm0
447         pxor    %xmm0,%xmm3
448 .byte   102,15,56,0,222
449         paddd   %xmm3,%xmm2
450         pxor    %xmm2,%xmm1
451         movdqa  %xmm1,%xmm4
452         psrld   $20,%xmm1
453         pslld   $12,%xmm4
454         por     %xmm4,%xmm1
455         paddd   %xmm1,%xmm0
456         pxor    %xmm0,%xmm3
457 .byte   102,15,56,0,223
458         paddd   %xmm3,%xmm2
459         pxor    %xmm2,%xmm1
460         movdqa  %xmm1,%xmm4
461         psrld   $25,%xmm1
462         pslld   $7,%xmm4
463         por     %xmm4,%xmm1
464         pshufd  $78,%xmm2,%xmm2
465         pshufd  $147,%xmm1,%xmm1
466         pshufd  $57,%xmm3,%xmm3
467         decl    %edx
468         jnz     .L009loop1x
469         paddd   (%esp),%xmm0
470         paddd   16(%esp),%xmm1
471         paddd   32(%esp),%xmm2
472         paddd   48(%esp),%xmm3
473         cmpl    $64,%ecx
474         jb      .L011tail
475         movdqu  (%esi),%xmm4
476         movdqu  16(%esi),%xmm5
477         pxor    %xmm4,%xmm0
478         movdqu  32(%esi),%xmm4
479         pxor    %xmm5,%xmm1
480         movdqu  48(%esi),%xmm5
481         pxor    %xmm4,%xmm2
482         pxor    %xmm5,%xmm3
483         leal    64(%esi),%esi
484         movdqu  %xmm0,(%edi)
485         movdqu  %xmm1,16(%edi)
486         movdqu  %xmm2,32(%edi)
487         movdqu  %xmm3,48(%edi)
488         leal    64(%edi),%edi
489         subl    $64,%ecx
490         jnz     .L010outer1x
491         jmp     .L012done
492 .L011tail:
493         movdqa  %xmm0,(%esp)
494         movdqa  %xmm1,16(%esp)
495         movdqa  %xmm2,32(%esp)
496         movdqa  %xmm3,48(%esp)
497         xorl    %eax,%eax
498         xorl    %edx,%edx
499         xorl    %ebp,%ebp
500 .L013tail_loop:
501         movb    (%esp,%ebp,1),%al
502         movb    (%esi,%ebp,1),%dl
503         leal    1(%ebp),%ebp
504         xorb    %dl,%al
505         movb    %al,-1(%edi,%ebp,1)
506         decl    %ecx
507         jnz     .L013tail_loop
508 .L012done:
509         movl    512(%esp),%esp
510         popl    %edi
511         popl    %esi
512         popl    %ebx
513         popl    %ebp
514         ret
515 .size   ChaCha20_ssse3,.-.L_ChaCha20_ssse3_begin
516 .align  64
517 .Lssse3_data:
518 .byte   2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13
519 .byte   3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14
520 .long   1634760805,857760878,2036477234,1797285236
521 .long   0,1,2,3
522 .long   4,4,4,4
523 .long   1,0,0,0
524 .long   4,0,0,0
525 .long   0,-1,-1,-1
526 .align  64
527 .byte   67,104,97,67,104,97,50,48,32,102,111,114,32,120,56,54
528 .byte   44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
529 .byte   60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
530 .byte   114,103,62,0
531 .comm   OPENSSL_ia32cap_P,16,4
532 #else
533 .text
534 .globl  ChaCha20_ctr32
535 .type   ChaCha20_ctr32,@function
536 .align  16
537 ChaCha20_ctr32:
538 .L_ChaCha20_ctr32_begin:
539         pushl   %ebp
540         pushl   %ebx
541         pushl   %esi
542         pushl   %edi
543         xorl    %eax,%eax
544         cmpl    28(%esp),%eax
545         je      .L000no_data
546         call    .Lpic_point
547 .Lpic_point:
548         popl    %eax
549         leal    OPENSSL_ia32cap_P,%ebp
550         testl   $16777216,(%ebp)
551         jz      .L001x86
552         testl   $512,4(%ebp)
553         jz      .L001x86
554         jmp     .Lssse3_shortcut
555 .L001x86:
556         movl    32(%esp),%esi
557         movl    36(%esp),%edi
558         subl    $132,%esp
559         movl    (%esi),%eax
560         movl    4(%esi),%ebx
561         movl    8(%esi),%ecx
562         movl    12(%esi),%edx
563         movl    %eax,80(%esp)
564         movl    %ebx,84(%esp)
565         movl    %ecx,88(%esp)
566         movl    %edx,92(%esp)
567         movl    16(%esi),%eax
568         movl    20(%esi),%ebx
569         movl    24(%esi),%ecx
570         movl    28(%esi),%edx
571         movl    %eax,96(%esp)
572         movl    %ebx,100(%esp)
573         movl    %ecx,104(%esp)
574         movl    %edx,108(%esp)
575         movl    (%edi),%eax
576         movl    4(%edi),%ebx
577         movl    8(%edi),%ecx
578         movl    12(%edi),%edx
579         subl    $1,%eax
580         movl    %eax,112(%esp)
581         movl    %ebx,116(%esp)
582         movl    %ecx,120(%esp)
583         movl    %edx,124(%esp)
584         jmp     .L002entry
585 .align  16
586 .L003outer_loop:
587         movl    %ebx,156(%esp)
588         movl    %eax,152(%esp)
589         movl    %ecx,160(%esp)
590 .L002entry:
591         movl    $1634760805,%eax
592         movl    $857760878,4(%esp)
593         movl    $2036477234,8(%esp)
594         movl    $1797285236,12(%esp)
595         movl    84(%esp),%ebx
596         movl    88(%esp),%ebp
597         movl    104(%esp),%ecx
598         movl    108(%esp),%esi
599         movl    116(%esp),%edx
600         movl    120(%esp),%edi
601         movl    %ebx,20(%esp)
602         movl    %ebp,24(%esp)
603         movl    %ecx,40(%esp)
604         movl    %esi,44(%esp)
605         movl    %edx,52(%esp)
606         movl    %edi,56(%esp)
607         movl    92(%esp),%ebx
608         movl    124(%esp),%edi
609         movl    112(%esp),%edx
610         movl    80(%esp),%ebp
611         movl    96(%esp),%ecx
612         movl    100(%esp),%esi
613         addl    $1,%edx
614         movl    %ebx,28(%esp)
615         movl    %edi,60(%esp)
616         movl    %edx,112(%esp)
617         movl    $10,%ebx
618         jmp     .L004loop
619 .align  16
620 .L004loop:
621         addl    %ebp,%eax
622         movl    %ebx,128(%esp)
623         movl    %ebp,%ebx
624         xorl    %eax,%edx
625         roll    $16,%edx
626         addl    %edx,%ecx
627         xorl    %ecx,%ebx
628         movl    52(%esp),%edi
629         roll    $12,%ebx
630         movl    20(%esp),%ebp
631         addl    %ebx,%eax
632         xorl    %eax,%edx
633         movl    %eax,(%esp)
634         roll    $8,%edx
635         movl    4(%esp),%eax
636         addl    %edx,%ecx
637         movl    %edx,48(%esp)
638         xorl    %ecx,%ebx
639         addl    %ebp,%eax
640         roll    $7,%ebx
641         xorl    %eax,%edi
642         movl    %ecx,32(%esp)
643         roll    $16,%edi
644         movl    %ebx,16(%esp)
645         addl    %edi,%esi
646         movl    40(%esp),%ecx
647         xorl    %esi,%ebp
648         movl    56(%esp),%edx
649         roll    $12,%ebp
650         movl    24(%esp),%ebx
651         addl    %ebp,%eax
652         xorl    %eax,%edi
653         movl    %eax,4(%esp)
654         roll    $8,%edi
655         movl    8(%esp),%eax
656         addl    %edi,%esi
657         movl    %edi,52(%esp)
658         xorl    %esi,%ebp
659         addl    %ebx,%eax
660         roll    $7,%ebp
661         xorl    %eax,%edx
662         movl    %esi,36(%esp)
663         roll    $16,%edx
664         movl    %ebp,20(%esp)
665         addl    %edx,%ecx
666         movl    44(%esp),%esi
667         xorl    %ecx,%ebx
668         movl    60(%esp),%edi
669         roll    $12,%ebx
670         movl    28(%esp),%ebp
671         addl    %ebx,%eax
672         xorl    %eax,%edx
673         movl    %eax,8(%esp)
674         roll    $8,%edx
675         movl    12(%esp),%eax
676         addl    %edx,%ecx
677         movl    %edx,56(%esp)
678         xorl    %ecx,%ebx
679         addl    %ebp,%eax
680         roll    $7,%ebx
681         xorl    %eax,%edi
682         roll    $16,%edi
683         movl    %ebx,24(%esp)
684         addl    %edi,%esi
685         xorl    %esi,%ebp
686         roll    $12,%ebp
687         movl    20(%esp),%ebx
688         addl    %ebp,%eax
689         xorl    %eax,%edi
690         movl    %eax,12(%esp)
691         roll    $8,%edi
692         movl    (%esp),%eax
693         addl    %edi,%esi
694         movl    %edi,%edx
695         xorl    %esi,%ebp
696         addl    %ebx,%eax
697         roll    $7,%ebp
698         xorl    %eax,%edx
699         roll    $16,%edx
700         movl    %ebp,28(%esp)
701         addl    %edx,%ecx
702         xorl    %ecx,%ebx
703         movl    48(%esp),%edi
704         roll    $12,%ebx
705         movl    24(%esp),%ebp
706         addl    %ebx,%eax
707         xorl    %eax,%edx
708         movl    %eax,(%esp)
709         roll    $8,%edx
710         movl    4(%esp),%eax
711         addl    %edx,%ecx
712         movl    %edx,60(%esp)
713         xorl    %ecx,%ebx
714         addl    %ebp,%eax
715         roll    $7,%ebx
716         xorl    %eax,%edi
717         movl    %ecx,40(%esp)
718         roll    $16,%edi
719         movl    %ebx,20(%esp)
720         addl    %edi,%esi
721         movl    32(%esp),%ecx
722         xorl    %esi,%ebp
723         movl    52(%esp),%edx
724         roll    $12,%ebp
725         movl    28(%esp),%ebx
726         addl    %ebp,%eax
727         xorl    %eax,%edi
728         movl    %eax,4(%esp)
729         roll    $8,%edi
730         movl    8(%esp),%eax
731         addl    %edi,%esi
732         movl    %edi,48(%esp)
733         xorl    %esi,%ebp
734         addl    %ebx,%eax
735         roll    $7,%ebp
736         xorl    %eax,%edx
737         movl    %esi,44(%esp)
738         roll    $16,%edx
739         movl    %ebp,24(%esp)
740         addl    %edx,%ecx
741         movl    36(%esp),%esi
742         xorl    %ecx,%ebx
743         movl    56(%esp),%edi
744         roll    $12,%ebx
745         movl    16(%esp),%ebp
746         addl    %ebx,%eax
747         xorl    %eax,%edx
748         movl    %eax,8(%esp)
749         roll    $8,%edx
750         movl    12(%esp),%eax
751         addl    %edx,%ecx
752         movl    %edx,52(%esp)
753         xorl    %ecx,%ebx
754         addl    %ebp,%eax
755         roll    $7,%ebx
756         xorl    %eax,%edi
757         roll    $16,%edi
758         movl    %ebx,28(%esp)
759         addl    %edi,%esi
760         xorl    %esi,%ebp
761         movl    48(%esp),%edx
762         roll    $12,%ebp
763         movl    128(%esp),%ebx
764         addl    %ebp,%eax
765         xorl    %eax,%edi
766         movl    %eax,12(%esp)
767         roll    $8,%edi
768         movl    (%esp),%eax
769         addl    %edi,%esi
770         movl    %edi,56(%esp)
771         xorl    %esi,%ebp
772         roll    $7,%ebp
773         decl    %ebx
774         jnz     .L004loop
775         movl    160(%esp),%ebx
776         addl    $1634760805,%eax
777         addl    80(%esp),%ebp
778         addl    96(%esp),%ecx
779         addl    100(%esp),%esi
780         cmpl    $64,%ebx
781         jb      .L005tail
782         movl    156(%esp),%ebx
783         addl    112(%esp),%edx
784         addl    120(%esp),%edi
785         xorl    (%ebx),%eax
786         xorl    16(%ebx),%ebp
787         movl    %eax,(%esp)
788         movl    152(%esp),%eax
789         xorl    32(%ebx),%ecx
790         xorl    36(%ebx),%esi
791         xorl    48(%ebx),%edx
792         xorl    56(%ebx),%edi
793         movl    %ebp,16(%eax)
794         movl    %ecx,32(%eax)
795         movl    %esi,36(%eax)
796         movl    %edx,48(%eax)
797         movl    %edi,56(%eax)
798         movl    4(%esp),%ebp
799         movl    8(%esp),%ecx
800         movl    12(%esp),%esi
801         movl    20(%esp),%edx
802         movl    24(%esp),%edi
803         addl    $857760878,%ebp
804         addl    $2036477234,%ecx
805         addl    $1797285236,%esi
806         addl    84(%esp),%edx
807         addl    88(%esp),%edi
808         xorl    4(%ebx),%ebp
809         xorl    8(%ebx),%ecx
810         xorl    12(%ebx),%esi
811         xorl    20(%ebx),%edx
812         xorl    24(%ebx),%edi
813         movl    %ebp,4(%eax)
814         movl    %ecx,8(%eax)
815         movl    %esi,12(%eax)
816         movl    %edx,20(%eax)
817         movl    %edi,24(%eax)
818         movl    28(%esp),%ebp
819         movl    40(%esp),%ecx
820         movl    44(%esp),%esi
821         movl    52(%esp),%edx
822         movl    60(%esp),%edi
823         addl    92(%esp),%ebp
824         addl    104(%esp),%ecx
825         addl    108(%esp),%esi
826         addl    116(%esp),%edx
827         addl    124(%esp),%edi
828         xorl    28(%ebx),%ebp
829         xorl    40(%ebx),%ecx
830         xorl    44(%ebx),%esi
831         xorl    52(%ebx),%edx
832         xorl    60(%ebx),%edi
833         leal    64(%ebx),%ebx
834         movl    %ebp,28(%eax)
835         movl    (%esp),%ebp
836         movl    %ecx,40(%eax)
837         movl    160(%esp),%ecx
838         movl    %esi,44(%eax)
839         movl    %edx,52(%eax)
840         movl    %edi,60(%eax)
841         movl    %ebp,(%eax)
842         leal    64(%eax),%eax
843         subl    $64,%ecx
844         jnz     .L003outer_loop
845         jmp     .L006done
846 .L005tail:
847         addl    112(%esp),%edx
848         addl    120(%esp),%edi
849         movl    %eax,(%esp)
850         movl    %ebp,16(%esp)
851         movl    %ecx,32(%esp)
852         movl    %esi,36(%esp)
853         movl    %edx,48(%esp)
854         movl    %edi,56(%esp)
855         movl    4(%esp),%ebp
856         movl    8(%esp),%ecx
857         movl    12(%esp),%esi
858         movl    20(%esp),%edx
859         movl    24(%esp),%edi
860         addl    $857760878,%ebp
861         addl    $2036477234,%ecx
862         addl    $1797285236,%esi
863         addl    84(%esp),%edx
864         addl    88(%esp),%edi
865         movl    %ebp,4(%esp)
866         movl    %ecx,8(%esp)
867         movl    %esi,12(%esp)
868         movl    %edx,20(%esp)
869         movl    %edi,24(%esp)
870         movl    28(%esp),%ebp
871         movl    40(%esp),%ecx
872         movl    44(%esp),%esi
873         movl    52(%esp),%edx
874         movl    60(%esp),%edi
875         addl    92(%esp),%ebp
876         addl    104(%esp),%ecx
877         addl    108(%esp),%esi
878         addl    116(%esp),%edx
879         addl    124(%esp),%edi
880         movl    %ebp,28(%esp)
881         movl    156(%esp),%ebp
882         movl    %ecx,40(%esp)
883         movl    152(%esp),%ecx
884         movl    %esi,44(%esp)
885         xorl    %esi,%esi
886         movl    %edx,52(%esp)
887         movl    %edi,60(%esp)
888         xorl    %eax,%eax
889         xorl    %edx,%edx
890 .L007tail_loop:
891         movb    (%esi,%ebp,1),%al
892         movb    (%esp,%esi,1),%dl
893         leal    1(%esi),%esi
894         xorb    %dl,%al
895         movb    %al,-1(%ecx,%esi,1)
896         decl    %ebx
897         jnz     .L007tail_loop
898 .L006done:
899         addl    $132,%esp
900 .L000no_data:
901         popl    %edi
902         popl    %esi
903         popl    %ebx
904         popl    %ebp
905         ret
906 .size   ChaCha20_ctr32,.-.L_ChaCha20_ctr32_begin
907 .globl  ChaCha20_ssse3
908 .type   ChaCha20_ssse3,@function
909 .align  16
910 ChaCha20_ssse3:
911 .L_ChaCha20_ssse3_begin:
912         pushl   %ebp
913         pushl   %ebx
914         pushl   %esi
915         pushl   %edi
916 .Lssse3_shortcut:
917         movl    20(%esp),%edi
918         movl    24(%esp),%esi
919         movl    28(%esp),%ecx
920         movl    32(%esp),%edx
921         movl    36(%esp),%ebx
922         movl    %esp,%ebp
923         subl    $524,%esp
924         andl    $-64,%esp
925         movl    %ebp,512(%esp)
926         leal    .Lssse3_data-.Lpic_point(%eax),%eax
927         movdqu  (%ebx),%xmm3
928 .L0081x:
929         movdqa  32(%eax),%xmm0
930         movdqu  (%edx),%xmm1
931         movdqu  16(%edx),%xmm2
932         movdqa  (%eax),%xmm6
933         movdqa  16(%eax),%xmm7
934         movl    %ebp,48(%esp)
935         movdqa  %xmm0,(%esp)
936         movdqa  %xmm1,16(%esp)
937         movdqa  %xmm2,32(%esp)
938         movdqa  %xmm3,48(%esp)
939         movl    $10,%edx
940         jmp     .L009loop1x
941 .align  16
942 .L010outer1x:
943         movdqa  80(%eax),%xmm3
944         movdqa  (%esp),%xmm0
945         movdqa  16(%esp),%xmm1
946         movdqa  32(%esp),%xmm2
947         paddd   48(%esp),%xmm3
948         movl    $10,%edx
949         movdqa  %xmm3,48(%esp)
950         jmp     .L009loop1x
951 .align  16
952 .L009loop1x:
953         paddd   %xmm1,%xmm0
954         pxor    %xmm0,%xmm3
955 .byte   102,15,56,0,222
956         paddd   %xmm3,%xmm2
957         pxor    %xmm2,%xmm1
958         movdqa  %xmm1,%xmm4
959         psrld   $20,%xmm1
960         pslld   $12,%xmm4
961         por     %xmm4,%xmm1
962         paddd   %xmm1,%xmm0
963         pxor    %xmm0,%xmm3
964 .byte   102,15,56,0,223
965         paddd   %xmm3,%xmm2
966         pxor    %xmm2,%xmm1
967         movdqa  %xmm1,%xmm4
968         psrld   $25,%xmm1
969         pslld   $7,%xmm4
970         por     %xmm4,%xmm1
971         pshufd  $78,%xmm2,%xmm2
972         pshufd  $57,%xmm1,%xmm1
973         pshufd  $147,%xmm3,%xmm3
974         nop
975         paddd   %xmm1,%xmm0
976         pxor    %xmm0,%xmm3
977 .byte   102,15,56,0,222
978         paddd   %xmm3,%xmm2
979         pxor    %xmm2,%xmm1
980         movdqa  %xmm1,%xmm4
981         psrld   $20,%xmm1
982         pslld   $12,%xmm4
983         por     %xmm4,%xmm1
984         paddd   %xmm1,%xmm0
985         pxor    %xmm0,%xmm3
986 .byte   102,15,56,0,223
987         paddd   %xmm3,%xmm2
988         pxor    %xmm2,%xmm1
989         movdqa  %xmm1,%xmm4
990         psrld   $25,%xmm1
991         pslld   $7,%xmm4
992         por     %xmm4,%xmm1
993         pshufd  $78,%xmm2,%xmm2
994         pshufd  $147,%xmm1,%xmm1
995         pshufd  $57,%xmm3,%xmm3
996         decl    %edx
997         jnz     .L009loop1x
998         paddd   (%esp),%xmm0
999         paddd   16(%esp),%xmm1
1000         paddd   32(%esp),%xmm2
1001         paddd   48(%esp),%xmm3
1002         cmpl    $64,%ecx
1003         jb      .L011tail
1004         movdqu  (%esi),%xmm4
1005         movdqu  16(%esi),%xmm5
1006         pxor    %xmm4,%xmm0
1007         movdqu  32(%esi),%xmm4
1008         pxor    %xmm5,%xmm1
1009         movdqu  48(%esi),%xmm5
1010         pxor    %xmm4,%xmm2
1011         pxor    %xmm5,%xmm3
1012         leal    64(%esi),%esi
1013         movdqu  %xmm0,(%edi)
1014         movdqu  %xmm1,16(%edi)
1015         movdqu  %xmm2,32(%edi)
1016         movdqu  %xmm3,48(%edi)
1017         leal    64(%edi),%edi
1018         subl    $64,%ecx
1019         jnz     .L010outer1x
1020         jmp     .L012done
1021 .L011tail:
1022         movdqa  %xmm0,(%esp)
1023         movdqa  %xmm1,16(%esp)
1024         movdqa  %xmm2,32(%esp)
1025         movdqa  %xmm3,48(%esp)
1026         xorl    %eax,%eax
1027         xorl    %edx,%edx
1028         xorl    %ebp,%ebp
1029 .L013tail_loop:
1030         movb    (%esp,%ebp,1),%al
1031         movb    (%esi,%ebp,1),%dl
1032         leal    1(%ebp),%ebp
1033         xorb    %dl,%al
1034         movb    %al,-1(%edi,%ebp,1)
1035         decl    %ecx
1036         jnz     .L013tail_loop
1037 .L012done:
1038         movl    512(%esp),%esp
1039         popl    %edi
1040         popl    %esi
1041         popl    %ebx
1042         popl    %ebp
1043         ret
1044 .size   ChaCha20_ssse3,.-.L_ChaCha20_ssse3_begin
1045 .align  64
1046 .Lssse3_data:
1047 .byte   2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13
1048 .byte   3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14
1049 .long   1634760805,857760878,2036477234,1797285236
1050 .long   0,1,2,3
1051 .long   4,4,4,4
1052 .long   1,0,0,0
1053 .long   4,0,0,0
1054 .long   0,-1,-1,-1
1055 .align  64
1056 .byte   67,104,97,67,104,97,50,48,32,102,111,114,32,120,56,54
1057 .byte   44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32
1058 .byte   60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111
1059 .byte   114,103,62,0
1060 .comm   OPENSSL_ia32cap_P,16,4
1061 #endif