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