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