Sync usage with man page.
[netbsd-mini2440.git] / sys / crypto / blowfish / arch / i386 / bf_enc_686.S
blobbbe775702e11fb540840e03bf22082e2c769bab9
1 /*      $NetBSD: bf_enc_686.S,v 1.4 2005/12/11 12:20:52 christos Exp $  */
3 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
4  * All rights reserved.
5  *
6  * This package is an SSL implementation written
7  * by Eric Young (eay@cryptsoft.com).
8  * The implementation was written so as to conform with Netscapes SSL.
9  *
10  * This library is free for commercial and non-commercial use as long as
11  * the following conditions are aheared to.  The following conditions
12  * apply to all code found in this distribution, be it the RC4, RSA,
13  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
14  * included with this distribution is covered by the same copyright terms
15  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
16  *
17  * Copyright remains Eric Young's, and as such any Copyright notices in
18  * the code are not to be removed.
19  * If this package is used in a product, Eric Young should be given attribution
20  * as the author of the parts of the library used.
21  * This can be in the form of a textual message at program startup or
22  * in documentation (online or textual) provided with the package.
23  *
24  * Redistribution and use in source and binary forms, with or without
25  * modification, are permitted provided that the following conditions
26  * are met:
27  * 1. Redistributions of source code must retain the copyright
28  *    notice, this list of conditions and the following disclaimer.
29  * 2. Redistributions in binary form must reproduce the above copyright
30  *    notice, this list of conditions and the following disclaimer in the
31  *    documentation and/or other materials provided with the distribution.
32  * 3. All advertising materials mentioning features or use of this software
33  *    must display the following acknowledgement:
34  *    "This product includes cryptographic software written by
35  *     Eric Young (eay@cryptsoft.com)"
36  *    The word 'cryptographic' can be left out if the rouines from the library
37  *    being used are not cryptographic related :-).
38  * 4. If you include any Windows specific code (or a derivative thereof) from
39  *    the apps directory (application code) you must include an acknowledgement:
40  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
41  *
42  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
43  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
45  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
46  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
47  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
48  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
49  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
50  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
51  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52  * SUCH DAMAGE.
53  *
54  * The licence and distribution terms for any publically available version or
55  * derivative of this code cannot be changed.  i.e. this code cannot simply be
56  * copied and put under another distribution licence
57  * [including the GNU Public Licence.]
58  */
61  * Modified from the output of `perl bf-686.pl elf' by
62  * Jason R. Thorpe <thorpej@zembu.com> and Thor Lancelot Simon
63  * <tls@NetBSD.org>
64  */
66 #include <i386/include/asm.h>
67 __KERNEL_RCSID(1, "$NetBSD$");
69 ENTRY(BF_encrypt)
70         pushl   %ebp
71         pushl   %ebx
72         pushl   %esi
73         pushl   %edi
76         /* Load the 2 words */
77         movl    20(%esp),       %eax
78         movl    (%eax),         %ecx
79         movl    4(%eax),        %edx
81         /* P pointer, s and enc flag */
82         movl    24(%esp),       %edi
83         xorl    %eax,           %eax
84         xorl    %ebx,           %ebx
85         xorl    (%edi),         %ecx
87         /* Round 0 */
88         rorl    $16,            %ecx
89         movl    4(%edi),        %esi
90         movb    %ch,            %al
91         movb    %cl,            %bl
92         rorl    $16,            %ecx
93         xorl    %esi,           %edx
94         movl    72(%edi,%eax,4),%esi
95         movl    1096(%edi,%ebx,4),%ebp
96         movb    %ch,            %al
97         movb    %cl,            %bl
98         addl    %ebp,           %esi
99         movl    2120(%edi,%eax,4),%eax
100         xorl    %eax,           %esi
101         movl    3144(%edi,%ebx,4),%ebp
102         addl    %ebp,           %esi
103         xorl    %eax,           %eax
104         xorl    %esi,           %edx
106         /* Round 1 */
107         rorl    $16,            %edx
108         movl    8(%edi),        %esi
109         movb    %dh,            %al
110         movb    %dl,            %bl
111         rorl    $16,            %edx
112         xorl    %esi,           %ecx
113         movl    72(%edi,%eax,4),%esi
114         movl    1096(%edi,%ebx,4),%ebp
115         movb    %dh,            %al
116         movb    %dl,            %bl
117         addl    %ebp,           %esi
118         movl    2120(%edi,%eax,4),%eax
119         xorl    %eax,           %esi
120         movl    3144(%edi,%ebx,4),%ebp
121         addl    %ebp,           %esi
122         xorl    %eax,           %eax
123         xorl    %esi,           %ecx
125         /* Round 2 */
126         rorl    $16,            %ecx
127         movl    12(%edi),       %esi
128         movb    %ch,            %al
129         movb    %cl,            %bl
130         rorl    $16,            %ecx
131         xorl    %esi,           %edx
132         movl    72(%edi,%eax,4),%esi
133         movl    1096(%edi,%ebx,4),%ebp
134         movb    %ch,            %al
135         movb    %cl,            %bl
136         addl    %ebp,           %esi
137         movl    2120(%edi,%eax,4),%eax
138         xorl    %eax,           %esi
139         movl    3144(%edi,%ebx,4),%ebp
140         addl    %ebp,           %esi
141         xorl    %eax,           %eax
142         xorl    %esi,           %edx
144         /* Round 3 */
145         rorl    $16,            %edx
146         movl    16(%edi),       %esi
147         movb    %dh,            %al
148         movb    %dl,            %bl
149         rorl    $16,            %edx
150         xorl    %esi,           %ecx
151         movl    72(%edi,%eax,4),%esi
152         movl    1096(%edi,%ebx,4),%ebp
153         movb    %dh,            %al
154         movb    %dl,            %bl
155         addl    %ebp,           %esi
156         movl    2120(%edi,%eax,4),%eax
157         xorl    %eax,           %esi
158         movl    3144(%edi,%ebx,4),%ebp
159         addl    %ebp,           %esi
160         xorl    %eax,           %eax
161         xorl    %esi,           %ecx
163         /* Round 4 */
164         rorl    $16,            %ecx
165         movl    20(%edi),       %esi
166         movb    %ch,            %al
167         movb    %cl,            %bl
168         rorl    $16,            %ecx
169         xorl    %esi,           %edx
170         movl    72(%edi,%eax,4),%esi
171         movl    1096(%edi,%ebx,4),%ebp
172         movb    %ch,            %al
173         movb    %cl,            %bl
174         addl    %ebp,           %esi
175         movl    2120(%edi,%eax,4),%eax
176         xorl    %eax,           %esi
177         movl    3144(%edi,%ebx,4),%ebp
178         addl    %ebp,           %esi
179         xorl    %eax,           %eax
180         xorl    %esi,           %edx
182         /* Round 5 */
183         rorl    $16,            %edx
184         movl    24(%edi),       %esi
185         movb    %dh,            %al
186         movb    %dl,            %bl
187         rorl    $16,            %edx
188         xorl    %esi,           %ecx
189         movl    72(%edi,%eax,4),%esi
190         movl    1096(%edi,%ebx,4),%ebp
191         movb    %dh,            %al
192         movb    %dl,            %bl
193         addl    %ebp,           %esi
194         movl    2120(%edi,%eax,4),%eax
195         xorl    %eax,           %esi
196         movl    3144(%edi,%ebx,4),%ebp
197         addl    %ebp,           %esi
198         xorl    %eax,           %eax
199         xorl    %esi,           %ecx
201         /* Round 6 */
202         rorl    $16,            %ecx
203         movl    28(%edi),       %esi
204         movb    %ch,            %al
205         movb    %cl,            %bl
206         rorl    $16,            %ecx
207         xorl    %esi,           %edx
208         movl    72(%edi,%eax,4),%esi
209         movl    1096(%edi,%ebx,4),%ebp
210         movb    %ch,            %al
211         movb    %cl,            %bl
212         addl    %ebp,           %esi
213         movl    2120(%edi,%eax,4),%eax
214         xorl    %eax,           %esi
215         movl    3144(%edi,%ebx,4),%ebp
216         addl    %ebp,           %esi
217         xorl    %eax,           %eax
218         xorl    %esi,           %edx
220         /* Round 7 */
221         rorl    $16,            %edx
222         movl    32(%edi),       %esi
223         movb    %dh,            %al
224         movb    %dl,            %bl
225         rorl    $16,            %edx
226         xorl    %esi,           %ecx
227         movl    72(%edi,%eax,4),%esi
228         movl    1096(%edi,%ebx,4),%ebp
229         movb    %dh,            %al
230         movb    %dl,            %bl
231         addl    %ebp,           %esi
232         movl    2120(%edi,%eax,4),%eax
233         xorl    %eax,           %esi
234         movl    3144(%edi,%ebx,4),%ebp
235         addl    %ebp,           %esi
236         xorl    %eax,           %eax
237         xorl    %esi,           %ecx
239         /* Round 8 */
240         rorl    $16,            %ecx
241         movl    36(%edi),       %esi
242         movb    %ch,            %al
243         movb    %cl,            %bl
244         rorl    $16,            %ecx
245         xorl    %esi,           %edx
246         movl    72(%edi,%eax,4),%esi
247         movl    1096(%edi,%ebx,4),%ebp
248         movb    %ch,            %al
249         movb    %cl,            %bl
250         addl    %ebp,           %esi
251         movl    2120(%edi,%eax,4),%eax
252         xorl    %eax,           %esi
253         movl    3144(%edi,%ebx,4),%ebp
254         addl    %ebp,           %esi
255         xorl    %eax,           %eax
256         xorl    %esi,           %edx
258         /* Round 9 */
259         rorl    $16,            %edx
260         movl    40(%edi),       %esi
261         movb    %dh,            %al
262         movb    %dl,            %bl
263         rorl    $16,            %edx
264         xorl    %esi,           %ecx
265         movl    72(%edi,%eax,4),%esi
266         movl    1096(%edi,%ebx,4),%ebp
267         movb    %dh,            %al
268         movb    %dl,            %bl
269         addl    %ebp,           %esi
270         movl    2120(%edi,%eax,4),%eax
271         xorl    %eax,           %esi
272         movl    3144(%edi,%ebx,4),%ebp
273         addl    %ebp,           %esi
274         xorl    %eax,           %eax
275         xorl    %esi,           %ecx
277         /* Round 10 */
278         rorl    $16,            %ecx
279         movl    44(%edi),       %esi
280         movb    %ch,            %al
281         movb    %cl,            %bl
282         rorl    $16,            %ecx
283         xorl    %esi,           %edx
284         movl    72(%edi,%eax,4),%esi
285         movl    1096(%edi,%ebx,4),%ebp
286         movb    %ch,            %al
287         movb    %cl,            %bl
288         addl    %ebp,           %esi
289         movl    2120(%edi,%eax,4),%eax
290         xorl    %eax,           %esi
291         movl    3144(%edi,%ebx,4),%ebp
292         addl    %ebp,           %esi
293         xorl    %eax,           %eax
294         xorl    %esi,           %edx
296         /* Round 11 */
297         rorl    $16,            %edx
298         movl    48(%edi),       %esi
299         movb    %dh,            %al
300         movb    %dl,            %bl
301         rorl    $16,            %edx
302         xorl    %esi,           %ecx
303         movl    72(%edi,%eax,4),%esi
304         movl    1096(%edi,%ebx,4),%ebp
305         movb    %dh,            %al
306         movb    %dl,            %bl
307         addl    %ebp,           %esi
308         movl    2120(%edi,%eax,4),%eax
309         xorl    %eax,           %esi
310         movl    3144(%edi,%ebx,4),%ebp
311         addl    %ebp,           %esi
312         xorl    %eax,           %eax
313         xorl    %esi,           %ecx
315         /* Round 12 */
316         rorl    $16,            %ecx
317         movl    52(%edi),       %esi
318         movb    %ch,            %al
319         movb    %cl,            %bl
320         rorl    $16,            %ecx
321         xorl    %esi,           %edx
322         movl    72(%edi,%eax,4),%esi
323         movl    1096(%edi,%ebx,4),%ebp
324         movb    %ch,            %al
325         movb    %cl,            %bl
326         addl    %ebp,           %esi
327         movl    2120(%edi,%eax,4),%eax
328         xorl    %eax,           %esi
329         movl    3144(%edi,%ebx,4),%ebp
330         addl    %ebp,           %esi
331         xorl    %eax,           %eax
332         xorl    %esi,           %edx
334         /* Round 13 */
335         rorl    $16,            %edx
336         movl    56(%edi),       %esi
337         movb    %dh,            %al
338         movb    %dl,            %bl
339         rorl    $16,            %edx
340         xorl    %esi,           %ecx
341         movl    72(%edi,%eax,4),%esi
342         movl    1096(%edi,%ebx,4),%ebp
343         movb    %dh,            %al
344         movb    %dl,            %bl
345         addl    %ebp,           %esi
346         movl    2120(%edi,%eax,4),%eax
347         xorl    %eax,           %esi
348         movl    3144(%edi,%ebx,4),%ebp
349         addl    %ebp,           %esi
350         xorl    %eax,           %eax
351         xorl    %esi,           %ecx
353         /* Round 14 */
354         rorl    $16,            %ecx
355         movl    60(%edi),       %esi
356         movb    %ch,            %al
357         movb    %cl,            %bl
358         rorl    $16,            %ecx
359         xorl    %esi,           %edx
360         movl    72(%edi,%eax,4),%esi
361         movl    1096(%edi,%ebx,4),%ebp
362         movb    %ch,            %al
363         movb    %cl,            %bl
364         addl    %ebp,           %esi
365         movl    2120(%edi,%eax,4),%eax
366         xorl    %eax,           %esi
367         movl    3144(%edi,%ebx,4),%ebp
368         addl    %ebp,           %esi
369         xorl    %eax,           %eax
370         xorl    %esi,           %edx
372         /* Round 15 */
373         rorl    $16,            %edx
374         movl    64(%edi),       %esi
375         movb    %dh,            %al
376         movb    %dl,            %bl
377         rorl    $16,            %edx
378         xorl    %esi,           %ecx
379         movl    72(%edi,%eax,4),%esi
380         movl    1096(%edi,%ebx,4),%ebp
381         movb    %dh,            %al
382         movb    %dl,            %bl
383         addl    %ebp,           %esi
384         movl    2120(%edi,%eax,4),%eax
385         xorl    %eax,           %esi
386         movl    3144(%edi,%ebx,4),%ebp
387         addl    %ebp,           %esi
388         xorl    %eax,           %eax
389         xorl    %esi,           %ecx
390         xorl    68(%edi),       %edx
391         movl    20(%esp),       %eax
392         movl    %edx,           (%eax)
393         movl    %ecx,           4(%eax)
394         popl    %edi
395         popl    %esi
396         popl    %ebx
397         popl    %ebp
398         ret
399 .L_BF_encrypt_end:
400         .size   _C_LABEL(BF_encrypt),.L_BF_encrypt_end-_C_LABEL(BF_encrypt)
402 ENTRY(BF_decrypt)
403         pushl   %ebp
404         pushl   %ebx
405         pushl   %esi
406         pushl   %edi
409         /* Load the 2 words */
410         movl    20(%esp),       %eax
411         movl    (%eax),         %ecx
412         movl    4(%eax),        %edx
414         /* P pointer, s and enc flag */
415         movl    24(%esp),       %edi
416         xorl    %eax,           %eax
417         xorl    %ebx,           %ebx
418         xorl    68(%edi),       %ecx
420         /* Round 16 */
421         rorl    $16,            %ecx
422         movl    64(%edi),       %esi
423         movb    %ch,            %al
424         movb    %cl,            %bl
425         rorl    $16,            %ecx
426         xorl    %esi,           %edx
427         movl    72(%edi,%eax,4),%esi
428         movl    1096(%edi,%ebx,4),%ebp
429         movb    %ch,            %al
430         movb    %cl,            %bl
431         addl    %ebp,           %esi
432         movl    2120(%edi,%eax,4),%eax
433         xorl    %eax,           %esi
434         movl    3144(%edi,%ebx,4),%ebp
435         addl    %ebp,           %esi
436         xorl    %eax,           %eax
437         xorl    %esi,           %edx
439         /* Round 15 */
440         rorl    $16,            %edx
441         movl    60(%edi),       %esi
442         movb    %dh,            %al
443         movb    %dl,            %bl
444         rorl    $16,            %edx
445         xorl    %esi,           %ecx
446         movl    72(%edi,%eax,4),%esi
447         movl    1096(%edi,%ebx,4),%ebp
448         movb    %dh,            %al
449         movb    %dl,            %bl
450         addl    %ebp,           %esi
451         movl    2120(%edi,%eax,4),%eax
452         xorl    %eax,           %esi
453         movl    3144(%edi,%ebx,4),%ebp
454         addl    %ebp,           %esi
455         xorl    %eax,           %eax
456         xorl    %esi,           %ecx
458         /* Round 14 */
459         rorl    $16,            %ecx
460         movl    56(%edi),       %esi
461         movb    %ch,            %al
462         movb    %cl,            %bl
463         rorl    $16,            %ecx
464         xorl    %esi,           %edx
465         movl    72(%edi,%eax,4),%esi
466         movl    1096(%edi,%ebx,4),%ebp
467         movb    %ch,            %al
468         movb    %cl,            %bl
469         addl    %ebp,           %esi
470         movl    2120(%edi,%eax,4),%eax
471         xorl    %eax,           %esi
472         movl    3144(%edi,%ebx,4),%ebp
473         addl    %ebp,           %esi
474         xorl    %eax,           %eax
475         xorl    %esi,           %edx
477         /* Round 13 */
478         rorl    $16,            %edx
479         movl    52(%edi),       %esi
480         movb    %dh,            %al
481         movb    %dl,            %bl
482         rorl    $16,            %edx
483         xorl    %esi,           %ecx
484         movl    72(%edi,%eax,4),%esi
485         movl    1096(%edi,%ebx,4),%ebp
486         movb    %dh,            %al
487         movb    %dl,            %bl
488         addl    %ebp,           %esi
489         movl    2120(%edi,%eax,4),%eax
490         xorl    %eax,           %esi
491         movl    3144(%edi,%ebx,4),%ebp
492         addl    %ebp,           %esi
493         xorl    %eax,           %eax
494         xorl    %esi,           %ecx
496         /* Round 12 */
497         rorl    $16,            %ecx
498         movl    48(%edi),       %esi
499         movb    %ch,            %al
500         movb    %cl,            %bl
501         rorl    $16,            %ecx
502         xorl    %esi,           %edx
503         movl    72(%edi,%eax,4),%esi
504         movl    1096(%edi,%ebx,4),%ebp
505         movb    %ch,            %al
506         movb    %cl,            %bl
507         addl    %ebp,           %esi
508         movl    2120(%edi,%eax,4),%eax
509         xorl    %eax,           %esi
510         movl    3144(%edi,%ebx,4),%ebp
511         addl    %ebp,           %esi
512         xorl    %eax,           %eax
513         xorl    %esi,           %edx
515         /* Round 11 */
516         rorl    $16,            %edx
517         movl    44(%edi),       %esi
518         movb    %dh,            %al
519         movb    %dl,            %bl
520         rorl    $16,            %edx
521         xorl    %esi,           %ecx
522         movl    72(%edi,%eax,4),%esi
523         movl    1096(%edi,%ebx,4),%ebp
524         movb    %dh,            %al
525         movb    %dl,            %bl
526         addl    %ebp,           %esi
527         movl    2120(%edi,%eax,4),%eax
528         xorl    %eax,           %esi
529         movl    3144(%edi,%ebx,4),%ebp
530         addl    %ebp,           %esi
531         xorl    %eax,           %eax
532         xorl    %esi,           %ecx
534         /* Round 10 */
535         rorl    $16,            %ecx
536         movl    40(%edi),       %esi
537         movb    %ch,            %al
538         movb    %cl,            %bl
539         rorl    $16,            %ecx
540         xorl    %esi,           %edx
541         movl    72(%edi,%eax,4),%esi
542         movl    1096(%edi,%ebx,4),%ebp
543         movb    %ch,            %al
544         movb    %cl,            %bl
545         addl    %ebp,           %esi
546         movl    2120(%edi,%eax,4),%eax
547         xorl    %eax,           %esi
548         movl    3144(%edi,%ebx,4),%ebp
549         addl    %ebp,           %esi
550         xorl    %eax,           %eax
551         xorl    %esi,           %edx
553         /* Round 9 */
554         rorl    $16,            %edx
555         movl    36(%edi),       %esi
556         movb    %dh,            %al
557         movb    %dl,            %bl
558         rorl    $16,            %edx
559         xorl    %esi,           %ecx
560         movl    72(%edi,%eax,4),%esi
561         movl    1096(%edi,%ebx,4),%ebp
562         movb    %dh,            %al
563         movb    %dl,            %bl
564         addl    %ebp,           %esi
565         movl    2120(%edi,%eax,4),%eax
566         xorl    %eax,           %esi
567         movl    3144(%edi,%ebx,4),%ebp
568         addl    %ebp,           %esi
569         xorl    %eax,           %eax
570         xorl    %esi,           %ecx
572         /* Round 8 */
573         rorl    $16,            %ecx
574         movl    32(%edi),       %esi
575         movb    %ch,            %al
576         movb    %cl,            %bl
577         rorl    $16,            %ecx
578         xorl    %esi,           %edx
579         movl    72(%edi,%eax,4),%esi
580         movl    1096(%edi,%ebx,4),%ebp
581         movb    %ch,            %al
582         movb    %cl,            %bl
583         addl    %ebp,           %esi
584         movl    2120(%edi,%eax,4),%eax
585         xorl    %eax,           %esi
586         movl    3144(%edi,%ebx,4),%ebp
587         addl    %ebp,           %esi
588         xorl    %eax,           %eax
589         xorl    %esi,           %edx
591         /* Round 7 */
592         rorl    $16,            %edx
593         movl    28(%edi),       %esi
594         movb    %dh,            %al
595         movb    %dl,            %bl
596         rorl    $16,            %edx
597         xorl    %esi,           %ecx
598         movl    72(%edi,%eax,4),%esi
599         movl    1096(%edi,%ebx,4),%ebp
600         movb    %dh,            %al
601         movb    %dl,            %bl
602         addl    %ebp,           %esi
603         movl    2120(%edi,%eax,4),%eax
604         xorl    %eax,           %esi
605         movl    3144(%edi,%ebx,4),%ebp
606         addl    %ebp,           %esi
607         xorl    %eax,           %eax
608         xorl    %esi,           %ecx
610         /* Round 6 */
611         rorl    $16,            %ecx
612         movl    24(%edi),       %esi
613         movb    %ch,            %al
614         movb    %cl,            %bl
615         rorl    $16,            %ecx
616         xorl    %esi,           %edx
617         movl    72(%edi,%eax,4),%esi
618         movl    1096(%edi,%ebx,4),%ebp
619         movb    %ch,            %al
620         movb    %cl,            %bl
621         addl    %ebp,           %esi
622         movl    2120(%edi,%eax,4),%eax
623         xorl    %eax,           %esi
624         movl    3144(%edi,%ebx,4),%ebp
625         addl    %ebp,           %esi
626         xorl    %eax,           %eax
627         xorl    %esi,           %edx
629         /* Round 5 */
630         rorl    $16,            %edx
631         movl    20(%edi),       %esi
632         movb    %dh,            %al
633         movb    %dl,            %bl
634         rorl    $16,            %edx
635         xorl    %esi,           %ecx
636         movl    72(%edi,%eax,4),%esi
637         movl    1096(%edi,%ebx,4),%ebp
638         movb    %dh,            %al
639         movb    %dl,            %bl
640         addl    %ebp,           %esi
641         movl    2120(%edi,%eax,4),%eax
642         xorl    %eax,           %esi
643         movl    3144(%edi,%ebx,4),%ebp
644         addl    %ebp,           %esi
645         xorl    %eax,           %eax
646         xorl    %esi,           %ecx
648         /* Round 4 */
649         rorl    $16,            %ecx
650         movl    16(%edi),       %esi
651         movb    %ch,            %al
652         movb    %cl,            %bl
653         rorl    $16,            %ecx
654         xorl    %esi,           %edx
655         movl    72(%edi,%eax,4),%esi
656         movl    1096(%edi,%ebx,4),%ebp
657         movb    %ch,            %al
658         movb    %cl,            %bl
659         addl    %ebp,           %esi
660         movl    2120(%edi,%eax,4),%eax
661         xorl    %eax,           %esi
662         movl    3144(%edi,%ebx,4),%ebp
663         addl    %ebp,           %esi
664         xorl    %eax,           %eax
665         xorl    %esi,           %edx
667         /* Round 3 */
668         rorl    $16,            %edx
669         movl    12(%edi),       %esi
670         movb    %dh,            %al
671         movb    %dl,            %bl
672         rorl    $16,            %edx
673         xorl    %esi,           %ecx
674         movl    72(%edi,%eax,4),%esi
675         movl    1096(%edi,%ebx,4),%ebp
676         movb    %dh,            %al
677         movb    %dl,            %bl
678         addl    %ebp,           %esi
679         movl    2120(%edi,%eax,4),%eax
680         xorl    %eax,           %esi
681         movl    3144(%edi,%ebx,4),%ebp
682         addl    %ebp,           %esi
683         xorl    %eax,           %eax
684         xorl    %esi,           %ecx
686         /* Round 2 */
687         rorl    $16,            %ecx
688         movl    8(%edi),        %esi
689         movb    %ch,            %al
690         movb    %cl,            %bl
691         rorl    $16,            %ecx
692         xorl    %esi,           %edx
693         movl    72(%edi,%eax,4),%esi
694         movl    1096(%edi,%ebx,4),%ebp
695         movb    %ch,            %al
696         movb    %cl,            %bl
697         addl    %ebp,           %esi
698         movl    2120(%edi,%eax,4),%eax
699         xorl    %eax,           %esi
700         movl    3144(%edi,%ebx,4),%ebp
701         addl    %ebp,           %esi
702         xorl    %eax,           %eax
703         xorl    %esi,           %edx
705         /* Round 1 */
706         rorl    $16,            %edx
707         movl    4(%edi),        %esi
708         movb    %dh,            %al
709         movb    %dl,            %bl
710         rorl    $16,            %edx
711         xorl    %esi,           %ecx
712         movl    72(%edi,%eax,4),%esi
713         movl    1096(%edi,%ebx,4),%ebp
714         movb    %dh,            %al
715         movb    %dl,            %bl
716         addl    %ebp,           %esi
717         movl    2120(%edi,%eax,4),%eax
718         xorl    %eax,           %esi
719         movl    3144(%edi,%ebx,4),%ebp
720         addl    %ebp,           %esi
721         xorl    %eax,           %eax
722         xorl    %esi,           %ecx
723         xorl    (%edi),         %edx
724         movl    20(%esp),       %eax
725         movl    %edx,           (%eax)
726         movl    %ecx,           4(%eax)
727         popl    %edi
728         popl    %esi
729         popl    %ebx
730         popl    %ebp
731         ret
732         .L_BF_decrypt_end:
733         .size   _C_LABEL(BF_decrypt),.L_BF_decrypt_end-_C_LABEL(BF_decrypt)