Initial import from FreeBSD RELENG_4:
[games.git] / secure / lib / libcrypto / i386 / rc4-586.s
1         # $FreeBSD: src/secure/lib/libcrypto/i386/rc4-586.s,v 1.1.4.1 2003/02/14 22:38:15 nectar Exp $
2         # Dont even think of reading this code 
3         # It was automatically generated by rc4-586.pl 
4         # Which is a perl program used to generate the x86 assember for 
5         # any of elf, a.out, BSDI, Win32, gaswin (for GNU as on Win32) or Solaris 
6         # eric <eay@cryptsoft.com> 
7
8         .file   "rc4-586.s"
9         .version        "01.01"
10 gcc2_compiled.:
11 .text
12         .align 16
13 .globl RC4
14         .type   RC4,@function
15 RC4:
16
17         pushl   %ebp
18         pushl   %ebx
19         movl    12(%esp),       %ebp
20         movl    16(%esp),       %ebx
21         pushl   %esi
22         pushl   %edi
23         movl    (%ebp),         %ecx
24         movl    4(%ebp),        %edx
25         movl    28(%esp),       %esi
26         incl    %ecx
27         subl    $12,            %esp
28         addl    $8,             %ebp
29         andl    $255,           %ecx
30         leal    -8(%ebx,%esi),  %ebx
31         movl    44(%esp),       %edi
32         movl    %ebx,           8(%esp)
33         movl    (%ebp,%ecx,4),  %eax
34         cmpl    %esi,           %ebx
35         jl      .L000end
36 .L001start:
37         addl    $8,             %esi
38         # Round 0 
39         addl    %eax,           %edx
40         andl    $255,           %edx
41         incl    %ecx
42         movl    (%ebp,%edx,4),  %ebx
43         movl    %ebx,           -4(%ebp,%ecx,4)
44         addl    %eax,           %ebx
45         andl    $255,           %ecx
46         andl    $255,           %ebx
47         movl    %eax,           (%ebp,%edx,4)
48         nop
49         movl    (%ebp,%ebx,4),  %ebx
50         movl    (%ebp,%ecx,4),  %eax
51         movb    %bl,            (%esp)
52         # Round 1 
53         addl    %eax,           %edx
54         andl    $255,           %edx
55         incl    %ecx
56         movl    (%ebp,%edx,4),  %ebx
57         movl    %ebx,           -4(%ebp,%ecx,4)
58         addl    %eax,           %ebx
59         andl    $255,           %ecx
60         andl    $255,           %ebx
61         movl    %eax,           (%ebp,%edx,4)
62         nop
63         movl    (%ebp,%ebx,4),  %ebx
64         movl    (%ebp,%ecx,4),  %eax
65         movb    %bl,            1(%esp)
66         # Round 2 
67         addl    %eax,           %edx
68         andl    $255,           %edx
69         incl    %ecx
70         movl    (%ebp,%edx,4),  %ebx
71         movl    %ebx,           -4(%ebp,%ecx,4)
72         addl    %eax,           %ebx
73         andl    $255,           %ecx
74         andl    $255,           %ebx
75         movl    %eax,           (%ebp,%edx,4)
76         nop
77         movl    (%ebp,%ebx,4),  %ebx
78         movl    (%ebp,%ecx,4),  %eax
79         movb    %bl,            2(%esp)
80         # Round 3 
81         addl    %eax,           %edx
82         andl    $255,           %edx
83         incl    %ecx
84         movl    (%ebp,%edx,4),  %ebx
85         movl    %ebx,           -4(%ebp,%ecx,4)
86         addl    %eax,           %ebx
87         andl    $255,           %ecx
88         andl    $255,           %ebx
89         movl    %eax,           (%ebp,%edx,4)
90         nop
91         movl    (%ebp,%ebx,4),  %ebx
92         movl    (%ebp,%ecx,4),  %eax
93         movb    %bl,            3(%esp)
94         # Round 4 
95         addl    %eax,           %edx
96         andl    $255,           %edx
97         incl    %ecx
98         movl    (%ebp,%edx,4),  %ebx
99         movl    %ebx,           -4(%ebp,%ecx,4)
100         addl    %eax,           %ebx
101         andl    $255,           %ecx
102         andl    $255,           %ebx
103         movl    %eax,           (%ebp,%edx,4)
104         nop
105         movl    (%ebp,%ebx,4),  %ebx
106         movl    (%ebp,%ecx,4),  %eax
107         movb    %bl,            4(%esp)
108         # Round 5 
109         addl    %eax,           %edx
110         andl    $255,           %edx
111         incl    %ecx
112         movl    (%ebp,%edx,4),  %ebx
113         movl    %ebx,           -4(%ebp,%ecx,4)
114         addl    %eax,           %ebx
115         andl    $255,           %ecx
116         andl    $255,           %ebx
117         movl    %eax,           (%ebp,%edx,4)
118         nop
119         movl    (%ebp,%ebx,4),  %ebx
120         movl    (%ebp,%ecx,4),  %eax
121         movb    %bl,            5(%esp)
122         # Round 6 
123         addl    %eax,           %edx
124         andl    $255,           %edx
125         incl    %ecx
126         movl    (%ebp,%edx,4),  %ebx
127         movl    %ebx,           -4(%ebp,%ecx,4)
128         addl    %eax,           %ebx
129         andl    $255,           %ecx
130         andl    $255,           %ebx
131         movl    %eax,           (%ebp,%edx,4)
132         nop
133         movl    (%ebp,%ebx,4),  %ebx
134         movl    (%ebp,%ecx,4),  %eax
135         movb    %bl,            6(%esp)
136         # Round 7 
137         addl    %eax,           %edx
138         andl    $255,           %edx
139         incl    %ecx
140         movl    (%ebp,%edx,4),  %ebx
141         movl    %ebx,           -4(%ebp,%ecx,4)
142         addl    %eax,           %ebx
143         andl    $255,           %ecx
144         andl    $255,           %ebx
145         movl    %eax,           (%ebp,%edx,4)
146         nop
147         movl    (%ebp,%ebx,4),  %ebx
148         addl    $8,             %edi
149         movb    %bl,            7(%esp)
150         # apply the cipher text 
151         movl    (%esp),         %eax
152         movl    -8(%esi),       %ebx
153         xorl    %ebx,           %eax
154         movl    -4(%esi),       %ebx
155         movl    %eax,           -8(%edi)
156         movl    4(%esp),        %eax
157         xorl    %ebx,           %eax
158         movl    8(%esp),        %ebx
159         movl    %eax,           -4(%edi)
160         movl    (%ebp,%ecx,4),  %eax
161         cmpl    %ebx,           %esi
162         jle     .L001start
163 .L000end:
164         # Round 0 
165         addl    $8,             %ebx
166         incl    %esi
167         cmpl    %esi,           %ebx
168         jl      .L002finished
169         movl    %ebx,           8(%esp)
170         addl    %eax,           %edx
171         andl    $255,           %edx
172         incl    %ecx
173         movl    (%ebp,%edx,4),  %ebx
174         movl    %ebx,           -4(%ebp,%ecx,4)
175         addl    %eax,           %ebx
176         andl    $255,           %ecx
177         andl    $255,           %ebx
178         movl    %eax,           (%ebp,%edx,4)
179         nop
180         movl    (%ebp,%ebx,4),  %ebx
181         movl    (%ebp,%ecx,4),  %eax
182         movb    -1(%esi),       %bh
183         xorb    %bh,            %bl
184         movb    %bl,            (%edi)
185         # Round 1 
186         movl    8(%esp),        %ebx
187         cmpl    %esi,           %ebx
188         jle     .L002finished
189         incl    %esi
190         addl    %eax,           %edx
191         andl    $255,           %edx
192         incl    %ecx
193         movl    (%ebp,%edx,4),  %ebx
194         movl    %ebx,           -4(%ebp,%ecx,4)
195         addl    %eax,           %ebx
196         andl    $255,           %ecx
197         andl    $255,           %ebx
198         movl    %eax,           (%ebp,%edx,4)
199         nop
200         movl    (%ebp,%ebx,4),  %ebx
201         movl    (%ebp,%ecx,4),  %eax
202         movb    -1(%esi),       %bh
203         xorb    %bh,            %bl
204         movb    %bl,            1(%edi)
205         # Round 2 
206         movl    8(%esp),        %ebx
207         cmpl    %esi,           %ebx
208         jle     .L002finished
209         incl    %esi
210         addl    %eax,           %edx
211         andl    $255,           %edx
212         incl    %ecx
213         movl    (%ebp,%edx,4),  %ebx
214         movl    %ebx,           -4(%ebp,%ecx,4)
215         addl    %eax,           %ebx
216         andl    $255,           %ecx
217         andl    $255,           %ebx
218         movl    %eax,           (%ebp,%edx,4)
219         nop
220         movl    (%ebp,%ebx,4),  %ebx
221         movl    (%ebp,%ecx,4),  %eax
222         movb    -1(%esi),       %bh
223         xorb    %bh,            %bl
224         movb    %bl,            2(%edi)
225         # Round 3 
226         movl    8(%esp),        %ebx
227         cmpl    %esi,           %ebx
228         jle     .L002finished
229         incl    %esi
230         addl    %eax,           %edx
231         andl    $255,           %edx
232         incl    %ecx
233         movl    (%ebp,%edx,4),  %ebx
234         movl    %ebx,           -4(%ebp,%ecx,4)
235         addl    %eax,           %ebx
236         andl    $255,           %ecx
237         andl    $255,           %ebx
238         movl    %eax,           (%ebp,%edx,4)
239         nop
240         movl    (%ebp,%ebx,4),  %ebx
241         movl    (%ebp,%ecx,4),  %eax
242         movb    -1(%esi),       %bh
243         xorb    %bh,            %bl
244         movb    %bl,            3(%edi)
245         # Round 4 
246         movl    8(%esp),        %ebx
247         cmpl    %esi,           %ebx
248         jle     .L002finished
249         incl    %esi
250         addl    %eax,           %edx
251         andl    $255,           %edx
252         incl    %ecx
253         movl    (%ebp,%edx,4),  %ebx
254         movl    %ebx,           -4(%ebp,%ecx,4)
255         addl    %eax,           %ebx
256         andl    $255,           %ecx
257         andl    $255,           %ebx
258         movl    %eax,           (%ebp,%edx,4)
259         nop
260         movl    (%ebp,%ebx,4),  %ebx
261         movl    (%ebp,%ecx,4),  %eax
262         movb    -1(%esi),       %bh
263         xorb    %bh,            %bl
264         movb    %bl,            4(%edi)
265         # Round 5 
266         movl    8(%esp),        %ebx
267         cmpl    %esi,           %ebx
268         jle     .L002finished
269         incl    %esi
270         addl    %eax,           %edx
271         andl    $255,           %edx
272         incl    %ecx
273         movl    (%ebp,%edx,4),  %ebx
274         movl    %ebx,           -4(%ebp,%ecx,4)
275         addl    %eax,           %ebx
276         andl    $255,           %ecx
277         andl    $255,           %ebx
278         movl    %eax,           (%ebp,%edx,4)
279         nop
280         movl    (%ebp,%ebx,4),  %ebx
281         movl    (%ebp,%ecx,4),  %eax
282         movb    -1(%esi),       %bh
283         xorb    %bh,            %bl
284         movb    %bl,            5(%edi)
285         # Round 6 
286         movl    8(%esp),        %ebx
287         cmpl    %esi,           %ebx
288         jle     .L002finished
289         incl    %esi
290         addl    %eax,           %edx
291         andl    $255,           %edx
292         incl    %ecx
293         movl    (%ebp,%edx,4),  %ebx
294         movl    %ebx,           -4(%ebp,%ecx,4)
295         addl    %eax,           %ebx
296         andl    $255,           %ecx
297         andl    $255,           %ebx
298         movl    %eax,           (%ebp,%edx,4)
299         nop
300         movl    (%ebp,%ebx,4),  %ebx
301         movb    -1(%esi),       %bh
302         xorb    %bh,            %bl
303         movb    %bl,            6(%edi)
304 .L002finished:
305         decl    %ecx
306         addl    $12,            %esp
307         movl    %edx,           -4(%ebp)
308         movb    %cl,            -8(%ebp)
309         popl    %edi
310         popl    %esi
311         popl    %ebx
312         popl    %ebp
313         ret
314 .RC4_end:
315         .size   RC4,.RC4_end-RC4
316 .ident  "RC4"