]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - secure/lib/libcrypto/i386/rc4-586.s
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / secure / lib / libcrypto / i386 / rc4-586.s
1         # $FreeBSD$
2 .file   "rc4-586.s"
3 .text
4 .globl  RC4
5 .type   RC4,@function
6 .align  16
7 RC4:
8 .L_RC4_begin:
9         pushl   %ebp
10         pushl   %ebx
11         pushl   %esi
12         pushl   %edi
13         movl    20(%esp),%edi
14         movl    24(%esp),%edx
15         movl    28(%esp),%esi
16         movl    32(%esp),%ebp
17         xorl    %eax,%eax
18         xorl    %ebx,%ebx
19         cmpl    $0,%edx
20         je      .L000abort
21         movb    (%edi),%al
22         movb    4(%edi),%bl
23         addl    $8,%edi
24         leal    (%esi,%edx,1),%ecx
25         subl    %esi,%ebp
26         movl    %ecx,24(%esp)
27         incb    %al
28         cmpl    $-1,256(%edi)
29         je      .L001RC4_CHAR
30         movl    (%edi,%eax,4),%ecx
31         andl    $-4,%edx
32         jz      .L002loop1
33         testl   $-8,%edx
34         movl    %ebp,32(%esp)
35         jz      .L003go4loop4
36         leal    OPENSSL_ia32cap_P,%ebp
37         btl     $26,(%ebp)
38         jnc     .L003go4loop4
39         movl    32(%esp),%ebp
40         andl    $-8,%edx
41         leal    -8(%esi,%edx,1),%edx
42         movl    %edx,-4(%edi)
43         addb    %cl,%bl
44         movl    (%edi,%ebx,4),%edx
45         movl    %ecx,(%edi,%ebx,4)
46         movl    %edx,(%edi,%eax,4)
47         incl    %eax
48         addl    %ecx,%edx
49         movzbl  %al,%eax
50         movzbl  %dl,%edx
51         movq    (%esi),%mm0
52         movl    (%edi,%eax,4),%ecx
53         movd    (%edi,%edx,4),%mm2
54         jmp     .L004loop_mmx_enter
55 .align  16
56 .L005loop_mmx:
57         addb    %cl,%bl
58         psllq   $56,%mm1
59         movl    (%edi,%ebx,4),%edx
60         movl    %ecx,(%edi,%ebx,4)
61         movl    %edx,(%edi,%eax,4)
62         incl    %eax
63         addl    %ecx,%edx
64         movzbl  %al,%eax
65         movzbl  %dl,%edx
66         pxor    %mm1,%mm2
67         movq    (%esi),%mm0
68         movq    %mm2,-8(%ebp,%esi,1)
69         movl    (%edi,%eax,4),%ecx
70         movd    (%edi,%edx,4),%mm2
71 .L004loop_mmx_enter:
72         addb    %cl,%bl
73         movl    (%edi,%ebx,4),%edx
74         movl    %ecx,(%edi,%ebx,4)
75         movl    %edx,(%edi,%eax,4)
76         incl    %eax
77         addl    %ecx,%edx
78         movzbl  %al,%eax
79         movzbl  %dl,%edx
80         pxor    %mm0,%mm2
81         movl    (%edi,%eax,4),%ecx
82         movd    (%edi,%edx,4),%mm1
83         addb    %cl,%bl
84         psllq   $8,%mm1
85         movl    (%edi,%ebx,4),%edx
86         movl    %ecx,(%edi,%ebx,4)
87         movl    %edx,(%edi,%eax,4)
88         incl    %eax
89         addl    %ecx,%edx
90         movzbl  %al,%eax
91         movzbl  %dl,%edx
92         pxor    %mm1,%mm2
93         movl    (%edi,%eax,4),%ecx
94         movd    (%edi,%edx,4),%mm1
95         addb    %cl,%bl
96         psllq   $16,%mm1
97         movl    (%edi,%ebx,4),%edx
98         movl    %ecx,(%edi,%ebx,4)
99         movl    %edx,(%edi,%eax,4)
100         incl    %eax
101         addl    %ecx,%edx
102         movzbl  %al,%eax
103         movzbl  %dl,%edx
104         pxor    %mm1,%mm2
105         movl    (%edi,%eax,4),%ecx
106         movd    (%edi,%edx,4),%mm1
107         addb    %cl,%bl
108         psllq   $24,%mm1
109         movl    (%edi,%ebx,4),%edx
110         movl    %ecx,(%edi,%ebx,4)
111         movl    %edx,(%edi,%eax,4)
112         incl    %eax
113         addl    %ecx,%edx
114         movzbl  %al,%eax
115         movzbl  %dl,%edx
116         pxor    %mm1,%mm2
117         movl    (%edi,%eax,4),%ecx
118         movd    (%edi,%edx,4),%mm1
119         addb    %cl,%bl
120         psllq   $32,%mm1
121         movl    (%edi,%ebx,4),%edx
122         movl    %ecx,(%edi,%ebx,4)
123         movl    %edx,(%edi,%eax,4)
124         incl    %eax
125         addl    %ecx,%edx
126         movzbl  %al,%eax
127         movzbl  %dl,%edx
128         pxor    %mm1,%mm2
129         movl    (%edi,%eax,4),%ecx
130         movd    (%edi,%edx,4),%mm1
131         addb    %cl,%bl
132         psllq   $40,%mm1
133         movl    (%edi,%ebx,4),%edx
134         movl    %ecx,(%edi,%ebx,4)
135         movl    %edx,(%edi,%eax,4)
136         incl    %eax
137         addl    %ecx,%edx
138         movzbl  %al,%eax
139         movzbl  %dl,%edx
140         pxor    %mm1,%mm2
141         movl    (%edi,%eax,4),%ecx
142         movd    (%edi,%edx,4),%mm1
143         addb    %cl,%bl
144         psllq   $48,%mm1
145         movl    (%edi,%ebx,4),%edx
146         movl    %ecx,(%edi,%ebx,4)
147         movl    %edx,(%edi,%eax,4)
148         incl    %eax
149         addl    %ecx,%edx
150         movzbl  %al,%eax
151         movzbl  %dl,%edx
152         pxor    %mm1,%mm2
153         movl    (%edi,%eax,4),%ecx
154         movd    (%edi,%edx,4),%mm1
155         movl    %ebx,%edx
156         xorl    %ebx,%ebx
157         movb    %dl,%bl
158         cmpl    -4(%edi),%esi
159         leal    8(%esi),%esi
160         jb      .L005loop_mmx
161         psllq   $56,%mm1
162         pxor    %mm1,%mm2
163         movq    %mm2,-8(%ebp,%esi,1)
164         emms
165         cmpl    24(%esp),%esi
166         je      .L006done
167         jmp     .L002loop1
168 .align  16
169 .L003go4loop4:
170         leal    -4(%esi,%edx,1),%edx
171         movl    %edx,28(%esp)
172 .L007loop4:
173         addb    %cl,%bl
174         movl    (%edi,%ebx,4),%edx
175         movl    %ecx,(%edi,%ebx,4)
176         movl    %edx,(%edi,%eax,4)
177         addl    %ecx,%edx
178         incb    %al
179         andl    $255,%edx
180         movl    (%edi,%eax,4),%ecx
181         movl    (%edi,%edx,4),%ebp
182         addb    %cl,%bl
183         movl    (%edi,%ebx,4),%edx
184         movl    %ecx,(%edi,%ebx,4)
185         movl    %edx,(%edi,%eax,4)
186         addl    %ecx,%edx
187         incb    %al
188         andl    $255,%edx
189         rorl    $8,%ebp
190         movl    (%edi,%eax,4),%ecx
191         orl     (%edi,%edx,4),%ebp
192         addb    %cl,%bl
193         movl    (%edi,%ebx,4),%edx
194         movl    %ecx,(%edi,%ebx,4)
195         movl    %edx,(%edi,%eax,4)
196         addl    %ecx,%edx
197         incb    %al
198         andl    $255,%edx
199         rorl    $8,%ebp
200         movl    (%edi,%eax,4),%ecx
201         orl     (%edi,%edx,4),%ebp
202         addb    %cl,%bl
203         movl    (%edi,%ebx,4),%edx
204         movl    %ecx,(%edi,%ebx,4)
205         movl    %edx,(%edi,%eax,4)
206         addl    %ecx,%edx
207         incb    %al
208         andl    $255,%edx
209         rorl    $8,%ebp
210         movl    32(%esp),%ecx
211         orl     (%edi,%edx,4),%ebp
212         rorl    $8,%ebp
213         xorl    (%esi),%ebp
214         cmpl    28(%esp),%esi
215         movl    %ebp,(%ecx,%esi,1)
216         leal    4(%esi),%esi
217         movl    (%edi,%eax,4),%ecx
218         jb      .L007loop4
219         cmpl    24(%esp),%esi
220         je      .L006done
221         movl    32(%esp),%ebp
222 .align  16
223 .L002loop1:
224         addb    %cl,%bl
225         movl    (%edi,%ebx,4),%edx
226         movl    %ecx,(%edi,%ebx,4)
227         movl    %edx,(%edi,%eax,4)
228         addl    %ecx,%edx
229         incb    %al
230         andl    $255,%edx
231         movl    (%edi,%edx,4),%edx
232         xorb    (%esi),%dl
233         leal    1(%esi),%esi
234         movl    (%edi,%eax,4),%ecx
235         cmpl    24(%esp),%esi
236         movb    %dl,-1(%ebp,%esi,1)
237         jb      .L002loop1
238         jmp     .L006done
239 .align  16
240 .L001RC4_CHAR:
241         movzbl  (%edi,%eax,1),%ecx
242 .L008cloop1:
243         addb    %cl,%bl
244         movzbl  (%edi,%ebx,1),%edx
245         movb    %cl,(%edi,%ebx,1)
246         movb    %dl,(%edi,%eax,1)
247         addb    %cl,%dl
248         movzbl  (%edi,%edx,1),%edx
249         addb    $1,%al
250         xorb    (%esi),%dl
251         leal    1(%esi),%esi
252         movzbl  (%edi,%eax,1),%ecx
253         cmpl    24(%esp),%esi
254         movb    %dl,-1(%ebp,%esi,1)
255         jb      .L008cloop1
256 .L006done:
257         decb    %al
258         movl    %ebx,-4(%edi)
259         movb    %al,-8(%edi)
260 .L000abort:
261         popl    %edi
262         popl    %esi
263         popl    %ebx
264         popl    %ebp
265         ret
266 .size   RC4,.-.L_RC4_begin
267 .globl  private_RC4_set_key
268 .type   private_RC4_set_key,@function
269 .align  16
270 private_RC4_set_key:
271 .L_private_RC4_set_key_begin:
272         pushl   %ebp
273         pushl   %ebx
274         pushl   %esi
275         pushl   %edi
276         movl    20(%esp),%edi
277         movl    24(%esp),%ebp
278         movl    28(%esp),%esi
279         leal    OPENSSL_ia32cap_P,%edx
280         leal    8(%edi),%edi
281         leal    (%esi,%ebp,1),%esi
282         negl    %ebp
283         xorl    %eax,%eax
284         movl    %ebp,-4(%edi)
285         btl     $20,(%edx)
286         jc      .L009c1stloop
287 .align  16
288 .L010w1stloop:
289         movl    %eax,(%edi,%eax,4)
290         addb    $1,%al
291         jnc     .L010w1stloop
292         xorl    %ecx,%ecx
293         xorl    %edx,%edx
294 .align  16
295 .L011w2ndloop:
296         movl    (%edi,%ecx,4),%eax
297         addb    (%esi,%ebp,1),%dl
298         addb    %al,%dl
299         addl    $1,%ebp
300         movl    (%edi,%edx,4),%ebx
301         jnz     .L012wnowrap
302         movl    -4(%edi),%ebp
303 .L012wnowrap:
304         movl    %eax,(%edi,%edx,4)
305         movl    %ebx,(%edi,%ecx,4)
306         addb    $1,%cl
307         jnc     .L011w2ndloop
308         jmp     .L013exit
309 .align  16
310 .L009c1stloop:
311         movb    %al,(%edi,%eax,1)
312         addb    $1,%al
313         jnc     .L009c1stloop
314         xorl    %ecx,%ecx
315         xorl    %edx,%edx
316         xorl    %ebx,%ebx
317 .align  16
318 .L014c2ndloop:
319         movb    (%edi,%ecx,1),%al
320         addb    (%esi,%ebp,1),%dl
321         addb    %al,%dl
322         addl    $1,%ebp
323         movb    (%edi,%edx,1),%bl
324         jnz     .L015cnowrap
325         movl    -4(%edi),%ebp
326 .L015cnowrap:
327         movb    %al,(%edi,%edx,1)
328         movb    %bl,(%edi,%ecx,1)
329         addb    $1,%cl
330         jnc     .L014c2ndloop
331         movl    $-1,256(%edi)
332 .L013exit:
333         xorl    %eax,%eax
334         movl    %eax,-8(%edi)
335         movl    %eax,-4(%edi)
336         popl    %edi
337         popl    %esi
338         popl    %ebx
339         popl    %ebp
340         ret
341 .size   private_RC4_set_key,.-.L_private_RC4_set_key_begin
342 .globl  RC4_options
343 .type   RC4_options,@function
344 .align  16
345 RC4_options:
346 .L_RC4_options_begin:
347         call    .L016pic_point
348 .L016pic_point:
349         popl    %eax
350         leal    .L017opts-.L016pic_point(%eax),%eax
351         leal    OPENSSL_ia32cap_P,%edx
352         movl    (%edx),%edx
353         btl     $20,%edx
354         jc      .L0181xchar
355         btl     $26,%edx
356         jnc     .L019ret
357         addl    $25,%eax
358         ret
359 .L0181xchar:
360         addl    $12,%eax
361 .L019ret:
362         ret
363 .align  64
364 .L017opts:
365 .byte   114,99,52,40,52,120,44,105,110,116,41,0
366 .byte   114,99,52,40,49,120,44,99,104,97,114,41,0
367 .byte   114,99,52,40,56,120,44,109,109,120,41,0
368 .byte   82,67,52,32,102,111,114,32,120,56,54,44,32,67,82,89
369 .byte   80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
370 .byte   111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
371 .align  64
372 .size   RC4_options,.-.L_RC4_options_begin
373 .comm   OPENSSL_ia32cap_P,8,4