1169689Skan/*	$NetBSD: bf_enc_686.S,v 1.1 2001/09/09 11:01:02 tls Exp $	*/
250397Sobrien/*	$FreeBSD$	*/
3169689Skan
4169689Skan/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
550397Sobrien * All rights reserved.
690075Sobrien *
750397Sobrien * This package is an SSL implementation written
890075Sobrien * by Eric Young (eay@cryptsoft.com).
990075Sobrien * The implementation was written so as to conform with Netscapes SSL.
1090075Sobrien *
1190075Sobrien * This library is free for commercial and non-commercial use as long as
1250397Sobrien * the following conditions are aheared to.  The following conditions
1390075Sobrien * apply to all code found in this distribution, be it the RC4, RSA,
1490075Sobrien * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
1590075Sobrien * included with this distribution is covered by the same copyright terms
1690075Sobrien * except that the holder is Tim Hudson (tjh@cryptsoft.com).
1750397Sobrien *
1850397Sobrien * Copyright remains Eric Young's, and as such any Copyright notices in
1990075Sobrien * the code are not to be removed.
20169689Skan * If this package is used in a product, Eric Young should be given attribution
21169689Skan * as the author of the parts of the library used.
2250397Sobrien * This can be in the form of a textual message at program startup or
2350397Sobrien * in documentation (online or textual) provided with the package.
2450397Sobrien *
2550397Sobrien * Redistribution and use in source and binary forms, with or without
2650397Sobrien * modification, are permitted provided that the following conditions
2750397Sobrien * are met:
2850397Sobrien * 1. Redistributions of source code must retain the copyright
2950397Sobrien *    notice, this list of conditions and the following disclaimer.
3090075Sobrien * 2. Redistributions in binary form must reproduce the above copyright
3190075Sobrien *    notice, this list of conditions and the following disclaimer in the
3250397Sobrien *    documentation and/or other materials provided with the distribution.
3390075Sobrien * 3. All advertising materials mentioning features or use of this software
3490075Sobrien *    must display the following acknowledgement:
3590075Sobrien *    "This product includes cryptographic software written by
3690075Sobrien *     Eric Young (eay@cryptsoft.com)"
3790075Sobrien *    The word 'cryptographic' can be left out if the rouines from the library
3890075Sobrien *    being used are not cryptographic related :-).
3950397Sobrien * 4. If you include any Windows specific code (or a derivative thereof) from
4050397Sobrien *    the apps directory (application code) you must include an acknowledgement:
4190075Sobrien *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
4250397Sobrien *
4350397Sobrien * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
4450397Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4550397Sobrien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4650397Sobrien * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
4750397Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
4850397Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
4950397Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50169689Skan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
5150397Sobrien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
5250397Sobrien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
5350397Sobrien * SUCH DAMAGE.
5490075Sobrien *
55169689Skan * The licence and distribution terms for any publically available version or
5690075Sobrien * derivative of this code cannot be changed.  i.e. this code cannot simply be
5790075Sobrien * copied and put under another distribution licence
5890075Sobrien * [including the GNU Public Licence.]
5950397Sobrien */
60169689Skan
61169689Skan/*
62169689Skan * Modified from the output of `perl bf-686.pl elf' by
63169689Skan * Jason R. Thorpe <thorpej@zembu.com> and Thor Lancelot Simon
64169689Skan * <tls@netbsd.org>
65169689Skan */
66169689Skan
6750397Sobrien#include <i386/include/asm.h>
68169689Skan#define	_C_LABEL	CNAME
69169689Skan
70169689SkanENTRY(BF_encrypt)
71169689Skan	pushl	%ebp
72169689Skan	pushl	%ebx
73169689Skan	pushl	%esi
74169689Skan	pushl	%edi
75169689Skan
76169689Skan
77169689Skan	/* Load the 2 words */
78169689Skan	movl	20(%esp),	%eax
79169689Skan	movl	(%eax),		%ecx
8050397Sobrien	movl	4(%eax),	%edx
8190075Sobrien
82117395Skan	/* P pointer, s and enc flag */
83169689Skan	movl	24(%esp),	%edi
84169689Skan	xorl	%eax,		%eax
85169689Skan	xorl	%ebx,		%ebx
86169689Skan	xorl	(%edi),		%ecx
87169689Skan
88169689Skan	/* Round 0 */
89169689Skan	rorl	$16,		%ecx
90169689Skan	movl	4(%edi),	%esi
91169689Skan	movb	%ch,		%al
92169689Skan	movb	%cl,		%bl
93169689Skan	rorl	$16,		%ecx
94169689Skan	xorl	%esi,		%edx
9590075Sobrien	movl	72(%edi,%eax,4),%esi
9650397Sobrien	movl	1096(%edi,%ebx,4),%ebp
97169689Skan	movb	%ch,		%al
98169689Skan	movb	%cl,		%bl
99169689Skan	addl	%ebp,		%esi
100169689Skan	movl	2120(%edi,%eax,4),%eax
101169689Skan	xorl	%eax,		%esi
102169689Skan	movl	3144(%edi,%ebx,4),%ebp
103169689Skan	addl	%ebp,		%esi
10450397Sobrien	xorl	%eax,		%eax
10590075Sobrien	xorl	%esi,		%edx
10650397Sobrien
107169689Skan	/* Round 1 */
10850397Sobrien	rorl	$16,		%edx
10950397Sobrien	movl	8(%edi),	%esi
11050397Sobrien	movb	%dh,		%al
11150397Sobrien	movb	%dl,		%bl
11250397Sobrien	rorl	$16,		%edx
11350397Sobrien	xorl	%esi,		%ecx
11490075Sobrien	movl	72(%edi,%eax,4),%esi
11550397Sobrien	movl	1096(%edi,%ebx,4),%ebp
11650397Sobrien	movb	%dh,		%al
11750397Sobrien	movb	%dl,		%bl
11850397Sobrien	addl	%ebp,		%esi
11950397Sobrien	movl	2120(%edi,%eax,4),%eax
12050397Sobrien	xorl	%eax,		%esi
12190075Sobrien	movl	3144(%edi,%ebx,4),%ebp
12290075Sobrien	addl	%ebp,		%esi
12390075Sobrien	xorl	%eax,		%eax
12490075Sobrien	xorl	%esi,		%ecx
12590075Sobrien
12690075Sobrien	/* Round 2 */
12790075Sobrien	rorl	$16,		%ecx
12890075Sobrien	movl	12(%edi),	%esi
12990075Sobrien	movb	%ch,		%al
13090075Sobrien	movb	%cl,		%bl
13190075Sobrien	rorl	$16,		%ecx
13250397Sobrien	xorl	%esi,		%edx
133117395Skan	movl	72(%edi,%eax,4),%esi
13450397Sobrien	movl	1096(%edi,%ebx,4),%ebp
13550397Sobrien	movb	%ch,		%al
136169689Skan	movb	%cl,		%bl
137169689Skan	addl	%ebp,		%esi
13890075Sobrien	movl	2120(%edi,%eax,4),%eax
13990075Sobrien	xorl	%eax,		%esi
14090075Sobrien	movl	3144(%edi,%ebx,4),%ebp
14190075Sobrien	addl	%ebp,		%esi
14290075Sobrien	xorl	%eax,		%eax
14390075Sobrien	xorl	%esi,		%edx
144117395Skan
14590075Sobrien	/* Round 3 */
14690075Sobrien	rorl	$16,		%edx
14790075Sobrien	movl	16(%edi),	%esi
14890075Sobrien	movb	%dh,		%al
14990075Sobrien	movb	%dl,		%bl
15090075Sobrien	rorl	$16,		%edx
15190075Sobrien	xorl	%esi,		%ecx
15290075Sobrien	movl	72(%edi,%eax,4),%esi
15390075Sobrien	movl	1096(%edi,%ebx,4),%ebp
15490075Sobrien	movb	%dh,		%al
15590075Sobrien	movb	%dl,		%bl
156117395Skan	addl	%ebp,		%esi
15790075Sobrien	movl	2120(%edi,%eax,4),%eax
15890075Sobrien	xorl	%eax,		%esi
15990075Sobrien	movl	3144(%edi,%ebx,4),%ebp
16090075Sobrien	addl	%ebp,		%esi
16190075Sobrien	xorl	%eax,		%eax
16290075Sobrien	xorl	%esi,		%ecx
163117395Skan
164169689Skan	/* Round 4 */
165117395Skan	rorl	$16,		%ecx
16690075Sobrien	movl	20(%edi),	%esi
16790075Sobrien	movb	%ch,		%al
168117395Skan	movb	%cl,		%bl
169117395Skan	rorl	$16,		%ecx
17090075Sobrien	xorl	%esi,		%edx
17190075Sobrien	movl	72(%edi,%eax,4),%esi
17290075Sobrien	movl	1096(%edi,%ebx,4),%ebp
173117395Skan	movb	%ch,		%al
17490075Sobrien	movb	%cl,		%bl
17590075Sobrien	addl	%ebp,		%esi
17690075Sobrien	movl	2120(%edi,%eax,4),%eax
17790075Sobrien	xorl	%eax,		%esi
17890075Sobrien	movl	3144(%edi,%ebx,4),%ebp
179117395Skan	addl	%ebp,		%esi
18090075Sobrien	xorl	%eax,		%eax
18190075Sobrien	xorl	%esi,		%edx
18290075Sobrien
18390075Sobrien	/* Round 5 */
18490075Sobrien	rorl	$16,		%edx
18590075Sobrien	movl	24(%edi),	%esi
18690075Sobrien	movb	%dh,		%al
18790075Sobrien	movb	%dl,		%bl
18890075Sobrien	rorl	$16,		%edx
18990075Sobrien	xorl	%esi,		%ecx
19090075Sobrien	movl	72(%edi,%eax,4),%esi
19190075Sobrien	movl	1096(%edi,%ebx,4),%ebp
19290075Sobrien	movb	%dh,		%al
19390075Sobrien	movb	%dl,		%bl
19490075Sobrien	addl	%ebp,		%esi
19590075Sobrien	movl	2120(%edi,%eax,4),%eax
19690075Sobrien	xorl	%eax,		%esi
19790075Sobrien	movl	3144(%edi,%ebx,4),%ebp
19890075Sobrien	addl	%ebp,		%esi
199117395Skan	xorl	%eax,		%eax
20090075Sobrien	xorl	%esi,		%ecx
201169689Skan
20290075Sobrien	/* Round 6 */
20390075Sobrien	rorl	$16,		%ecx
20490075Sobrien	movl	28(%edi),	%esi
20590075Sobrien	movb	%ch,		%al
20690075Sobrien	movb	%cl,		%bl
20790075Sobrien	rorl	$16,		%ecx
20890075Sobrien	xorl	%esi,		%edx
20990075Sobrien	movl	72(%edi,%eax,4),%esi
210117395Skan	movl	1096(%edi,%ebx,4),%ebp
21190075Sobrien	movb	%ch,		%al
21290075Sobrien	movb	%cl,		%bl
21390075Sobrien	addl	%ebp,		%esi
21490075Sobrien	movl	2120(%edi,%eax,4),%eax
21590075Sobrien	xorl	%eax,		%esi
216169689Skan	movl	3144(%edi,%ebx,4),%ebp
217117395Skan	addl	%ebp,		%esi
21890075Sobrien	xorl	%eax,		%eax
21990075Sobrien	xorl	%esi,		%edx
22090075Sobrien
22190075Sobrien	/* Round 7 */
22290075Sobrien	rorl	$16,		%edx
22390075Sobrien	movl	32(%edi),	%esi
22490075Sobrien	movb	%dh,		%al
22590075Sobrien	movb	%dl,		%bl
22690075Sobrien	rorl	$16,		%edx
22790075Sobrien	xorl	%esi,		%ecx
22890075Sobrien	movl	72(%edi,%eax,4),%esi
22990075Sobrien	movl	1096(%edi,%ebx,4),%ebp
23090075Sobrien	movb	%dh,		%al
23190075Sobrien	movb	%dl,		%bl
23290075Sobrien	addl	%ebp,		%esi
23390075Sobrien	movl	2120(%edi,%eax,4),%eax
23490075Sobrien	xorl	%eax,		%esi
23590075Sobrien	movl	3144(%edi,%ebx,4),%ebp
236117395Skan	addl	%ebp,		%esi
23790075Sobrien	xorl	%eax,		%eax
23890075Sobrien	xorl	%esi,		%ecx
239169689Skan
24090075Sobrien	/* Round 8 */
24190075Sobrien	rorl	$16,		%ecx
24290075Sobrien	movl	36(%edi),	%esi
24390075Sobrien	movb	%ch,		%al
244117395Skan	movb	%cl,		%bl
24590075Sobrien	rorl	$16,		%ecx
24690075Sobrien	xorl	%esi,		%edx
24790075Sobrien	movl	72(%edi,%eax,4),%esi
248169689Skan	movl	1096(%edi,%ebx,4),%ebp
24990075Sobrien	movb	%ch,		%al
25090075Sobrien	movb	%cl,		%bl
25190075Sobrien	addl	%ebp,		%esi
25290075Sobrien	movl	2120(%edi,%eax,4),%eax
25390075Sobrien	xorl	%eax,		%esi
25490075Sobrien	movl	3144(%edi,%ebx,4),%ebp
25590075Sobrien	addl	%ebp,		%esi
256117395Skan	xorl	%eax,		%eax
25790075Sobrien	xorl	%esi,		%edx
25890075Sobrien
25990075Sobrien	/* Round 9 */
260169689Skan	rorl	$16,		%edx
26190075Sobrien	movl	40(%edi),	%esi
262169689Skan	movb	%dh,		%al
26390075Sobrien	movb	%dl,		%bl
26490075Sobrien	rorl	$16,		%edx
265117395Skan	xorl	%esi,		%ecx
26690075Sobrien	movl	72(%edi,%eax,4),%esi
26790075Sobrien	movl	1096(%edi,%ebx,4),%ebp
26890075Sobrien	movb	%dh,		%al
26990075Sobrien	movb	%dl,		%bl
270117395Skan	addl	%ebp,		%esi
27190075Sobrien	movl	2120(%edi,%eax,4),%eax
27290075Sobrien	xorl	%eax,		%esi
273169689Skan	movl	3144(%edi,%ebx,4),%ebp
27490075Sobrien	addl	%ebp,		%esi
27590075Sobrien	xorl	%eax,		%eax
27690075Sobrien	xorl	%esi,		%ecx
27790075Sobrien
27890075Sobrien	/* Round 10 */
27990075Sobrien	rorl	$16,		%ecx
28090075Sobrien	movl	44(%edi),	%esi
28190075Sobrien	movb	%ch,		%al
28290075Sobrien	movb	%cl,		%bl
283117395Skan	rorl	$16,		%ecx
28490075Sobrien	xorl	%esi,		%edx
28590075Sobrien	movl	72(%edi,%eax,4),%esi
28690075Sobrien	movl	1096(%edi,%ebx,4),%ebp
28790075Sobrien	movb	%ch,		%al
28890075Sobrien	movb	%cl,		%bl
289169689Skan	addl	%ebp,		%esi
29090075Sobrien	movl	2120(%edi,%eax,4),%eax
29190075Sobrien	xorl	%eax,		%esi
29290075Sobrien	movl	3144(%edi,%ebx,4),%ebp
29390075Sobrien	addl	%ebp,		%esi
29490075Sobrien	xorl	%eax,		%eax
29590075Sobrien	xorl	%esi,		%edx
29690075Sobrien
29790075Sobrien	/* Round 11 */
29890075Sobrien	rorl	$16,		%edx
29990075Sobrien	movl	48(%edi),	%esi
30090075Sobrien	movb	%dh,		%al
30190075Sobrien	movb	%dl,		%bl
302117395Skan	rorl	$16,		%edx
30390075Sobrien	xorl	%esi,		%ecx
30490075Sobrien	movl	72(%edi,%eax,4),%esi
30590075Sobrien	movl	1096(%edi,%ebx,4),%ebp
306117395Skan	movb	%dh,		%al
30790075Sobrien	movb	%dl,		%bl
308169689Skan	addl	%ebp,		%esi
309117395Skan	movl	2120(%edi,%eax,4),%eax
310117395Skan	xorl	%eax,		%esi
311117395Skan	movl	3144(%edi,%ebx,4),%ebp
312117395Skan	addl	%ebp,		%esi
313117395Skan	xorl	%eax,		%eax
314117395Skan	xorl	%esi,		%ecx
31590075Sobrien
31690075Sobrien	/* Round 12 */
31790075Sobrien	rorl	$16,		%ecx
31890075Sobrien	movl	52(%edi),	%esi
31990075Sobrien	movb	%ch,		%al
32090075Sobrien	movb	%cl,		%bl
32190075Sobrien	rorl	$16,		%ecx
322117395Skan	xorl	%esi,		%edx
32390075Sobrien	movl	72(%edi,%eax,4),%esi
32490075Sobrien	movl	1096(%edi,%ebx,4),%ebp
32590075Sobrien	movb	%ch,		%al
326169689Skan	movb	%cl,		%bl
327117395Skan	addl	%ebp,		%esi
32890075Sobrien	movl	2120(%edi,%eax,4),%eax
329117395Skan	xorl	%eax,		%esi
33090075Sobrien	movl	3144(%edi,%ebx,4),%ebp
33190075Sobrien	addl	%ebp,		%esi
33290075Sobrien	xorl	%eax,		%eax
33390075Sobrien	xorl	%esi,		%edx
33490075Sobrien
33590075Sobrien	/* Round 13 */
33690075Sobrien	rorl	$16,		%edx
33790075Sobrien	movl	56(%edi),	%esi
338117395Skan	movb	%dh,		%al
33990075Sobrien	movb	%dl,		%bl
34090075Sobrien	rorl	$16,		%edx
341169689Skan	xorl	%esi,		%ecx
34290075Sobrien	movl	72(%edi,%eax,4),%esi
34390075Sobrien	movl	1096(%edi,%ebx,4),%ebp
34490075Sobrien	movb	%dh,		%al
34590075Sobrien	movb	%dl,		%bl
34690075Sobrien	addl	%ebp,		%esi
34790075Sobrien	movl	2120(%edi,%eax,4),%eax
348117395Skan	xorl	%eax,		%esi
34990075Sobrien	movl	3144(%edi,%ebx,4),%ebp
35090075Sobrien	addl	%ebp,		%esi
351169689Skan	xorl	%eax,		%eax
35290075Sobrien	xorl	%esi,		%ecx
35390075Sobrien
35490075Sobrien	/* Round 14 */
35590075Sobrien	rorl	$16,		%ecx
35690075Sobrien	movl	60(%edi),	%esi
35790075Sobrien	movb	%ch,		%al
35890075Sobrien	movb	%cl,		%bl
359117395Skan	rorl	$16,		%ecx
36090075Sobrien	xorl	%esi,		%edx
36190075Sobrien	movl	72(%edi,%eax,4),%esi
362169689Skan	movl	1096(%edi,%ebx,4),%ebp
36390075Sobrien	movb	%ch,		%al
36490075Sobrien	movb	%cl,		%bl
36590075Sobrien	addl	%ebp,		%esi
36690075Sobrien	movl	2120(%edi,%eax,4),%eax
36790075Sobrien	xorl	%eax,		%esi
36890075Sobrien	movl	3144(%edi,%ebx,4),%ebp
36990075Sobrien	addl	%ebp,		%esi
37090075Sobrien	xorl	%eax,		%eax
371169689Skan	xorl	%esi,		%edx
372169689Skan
37390075Sobrien	/* Round 15 */
37490075Sobrien	rorl	$16,		%edx
37590075Sobrien	movl	64(%edi),	%esi
37690075Sobrien	movb	%dh,		%al
37790075Sobrien	movb	%dl,		%bl
37890075Sobrien	rorl	$16,		%edx
37990075Sobrien	xorl	%esi,		%ecx
38090075Sobrien	movl	72(%edi,%eax,4),%esi
38190075Sobrien	movl	1096(%edi,%ebx,4),%ebp
38290075Sobrien	movb	%dh,		%al
383169689Skan	movb	%dl,		%bl
384169689Skan	addl	%ebp,		%esi
38590075Sobrien	movl	2120(%edi,%eax,4),%eax
38690075Sobrien	xorl	%eax,		%esi
38790075Sobrien	movl	3144(%edi,%ebx,4),%ebp
38890075Sobrien	addl	%ebp,		%esi
38990075Sobrien	xorl	%eax,		%eax
39090075Sobrien	xorl	%esi,		%ecx
39190075Sobrien	xorl	68(%edi),	%edx
39290075Sobrien	movl	20(%esp),	%eax
39390075Sobrien	movl	%edx,		(%eax)
39490075Sobrien	movl	%ecx,		4(%eax)
395169689Skan	popl	%edi
396169689Skan	popl	%esi
397169689Skan	popl	%ebx
39890075Sobrien	popl	%ebp
39990075Sobrien	ret
40090075Sobrien.L_BF_encrypt_end:
40190075Sobrien	.size   _C_LABEL(BF_encrypt),.L_BF_encrypt_end-_C_LABEL(BF_encrypt)
40290075Sobrien
40390075SobrienENTRY(BF_decrypt)
40490075Sobrien	pushl	%ebp
40590075Sobrien	pushl	%ebx
40690075Sobrien	pushl	%esi
40790075Sobrien	pushl	%edi
408169689Skan
409169689Skan
41090075Sobrien	/* Load the 2 words */
41190075Sobrien	movl	20(%esp),	%eax
41290075Sobrien	movl	(%eax),		%ecx
41390075Sobrien	movl	4(%eax),	%edx
41490075Sobrien
41590075Sobrien	/* P pointer, s and enc flag */
41690075Sobrien	movl	24(%esp),	%edi
41790075Sobrien	xorl	%eax,		%eax
41890075Sobrien	xorl	%ebx,		%ebx
41990075Sobrien	xorl	68(%edi),	%ecx
420169689Skan
421169689Skan	/* Round 16 */
42290075Sobrien	rorl	$16,		%ecx
42390075Sobrien	movl	64(%edi),	%esi
42490075Sobrien	movb	%ch,		%al
42590075Sobrien	movb	%cl,		%bl
42690075Sobrien	rorl	$16,		%ecx
42790075Sobrien	xorl	%esi,		%edx
42890075Sobrien	movl	72(%edi,%eax,4),%esi
42990075Sobrien	movl	1096(%edi,%ebx,4),%ebp
43090075Sobrien	movb	%ch,		%al
43190075Sobrien	movb	%cl,		%bl
43290075Sobrien	addl	%ebp,		%esi
43390075Sobrien	movl	2120(%edi,%eax,4),%eax
43490075Sobrien	xorl	%eax,		%esi
43590075Sobrien	movl	3144(%edi,%ebx,4),%ebp
436169689Skan	addl	%ebp,		%esi
43750397Sobrien	xorl	%eax,		%eax
43850397Sobrien	xorl	%esi,		%edx
43950397Sobrien
44050397Sobrien	/* Round 15 */
44150397Sobrien	rorl	$16,		%edx
44250397Sobrien	movl	60(%edi),	%esi
44350397Sobrien	movb	%dh,		%al
444169689Skan	movb	%dl,		%bl
44550397Sobrien	rorl	$16,		%edx
44650397Sobrien	xorl	%esi,		%ecx
44750397Sobrien	movl	72(%edi,%eax,4),%esi
448169689Skan	movl	1096(%edi,%ebx,4),%ebp
44950397Sobrien	movb	%dh,		%al
45090075Sobrien	movb	%dl,		%bl
45190075Sobrien	addl	%ebp,		%esi
45250397Sobrien	movl	2120(%edi,%eax,4),%eax
45350397Sobrien	xorl	%eax,		%esi
45450397Sobrien	movl	3144(%edi,%ebx,4),%ebp
45550397Sobrien	addl	%ebp,		%esi
45650397Sobrien	xorl	%eax,		%eax
45750397Sobrien	xorl	%esi,		%ecx
458169689Skan
45950397Sobrien	/* Round 14 */
46050397Sobrien	rorl	$16,		%ecx
46150397Sobrien	movl	56(%edi),	%esi
46250397Sobrien	movb	%ch,		%al
46350397Sobrien	movb	%cl,		%bl
46450397Sobrien	rorl	$16,		%ecx
46550397Sobrien	xorl	%esi,		%edx
46650397Sobrien	movl	72(%edi,%eax,4),%esi
467169689Skan	movl	1096(%edi,%ebx,4),%ebp
46850397Sobrien	movb	%ch,		%al
46950397Sobrien	movb	%cl,		%bl
47090075Sobrien	addl	%ebp,		%esi
47190075Sobrien	movl	2120(%edi,%eax,4),%eax
47290075Sobrien	xorl	%eax,		%esi
47390075Sobrien	movl	3144(%edi,%ebx,4),%ebp
474169689Skan	addl	%ebp,		%esi
47590075Sobrien	xorl	%eax,		%eax
47690075Sobrien	xorl	%esi,		%edx
47750397Sobrien
47850397Sobrien	/* Round 13 */
47950397Sobrien	rorl	$16,		%edx
48050397Sobrien	movl	52(%edi),	%esi
481169689Skan	movb	%dh,		%al
48250397Sobrien	movb	%dl,		%bl
48350397Sobrien	rorl	$16,		%edx
48450397Sobrien	xorl	%esi,		%ecx
48550397Sobrien	movl	72(%edi,%eax,4),%esi
48650397Sobrien	movl	1096(%edi,%ebx,4),%ebp
48750397Sobrien	movb	%dh,		%al
48850397Sobrien	movb	%dl,		%bl
48950397Sobrien	addl	%ebp,		%esi
490169689Skan	movl	2120(%edi,%eax,4),%eax
49150397Sobrien	xorl	%eax,		%esi
49250397Sobrien	movl	3144(%edi,%ebx,4),%ebp
49350397Sobrien	addl	%ebp,		%esi
49450397Sobrien	xorl	%eax,		%eax
49550397Sobrien	xorl	%esi,		%ecx
49650397Sobrien
49750397Sobrien	/* Round 12 */
49850397Sobrien	rorl	$16,		%ecx
499169689Skan	movl	48(%edi),	%esi
50050397Sobrien	movb	%ch,		%al
50150397Sobrien	movb	%cl,		%bl
50250397Sobrien	rorl	$16,		%ecx
50350397Sobrien	xorl	%esi,		%edx
504169689Skan	movl	72(%edi,%eax,4),%esi
505169689Skan	movl	1096(%edi,%ebx,4),%ebp
506169689Skan	movb	%ch,		%al
507169689Skan	movb	%cl,		%bl
508169689Skan	addl	%ebp,		%esi
509169689Skan	movl	2120(%edi,%eax,4),%eax
510169689Skan	xorl	%eax,		%esi
511169689Skan	movl	3144(%edi,%ebx,4),%ebp
512169689Skan	addl	%ebp,		%esi
513169689Skan	xorl	%eax,		%eax
514169689Skan	xorl	%esi,		%edx
515169689Skan
516169689Skan	/* Round 11 */
517169689Skan	rorl	$16,		%edx
518169689Skan	movl	44(%edi),	%esi
519169689Skan	movb	%dh,		%al
520169689Skan	movb	%dl,		%bl
521169689Skan	rorl	$16,		%edx
522169689Skan	xorl	%esi,		%ecx
523169689Skan	movl	72(%edi,%eax,4),%esi
524169689Skan	movl	1096(%edi,%ebx,4),%ebp
525169689Skan	movb	%dh,		%al
526169689Skan	movb	%dl,		%bl
527169689Skan	addl	%ebp,		%esi
528169689Skan	movl	2120(%edi,%eax,4),%eax
529169689Skan	xorl	%eax,		%esi
530169689Skan	movl	3144(%edi,%ebx,4),%ebp
531169689Skan	addl	%ebp,		%esi
532169689Skan	xorl	%eax,		%eax
533169689Skan	xorl	%esi,		%ecx
534169689Skan
535169689Skan	/* Round 10 */
536169689Skan	rorl	$16,		%ecx
537169689Skan	movl	40(%edi),	%esi
538169689Skan	movb	%ch,		%al
539169689Skan	movb	%cl,		%bl
540169689Skan	rorl	$16,		%ecx
541169689Skan	xorl	%esi,		%edx
54290075Sobrien	movl	72(%edi,%eax,4),%esi
54390075Sobrien	movl	1096(%edi,%ebx,4),%ebp
54490075Sobrien	movb	%ch,		%al
54590075Sobrien	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)
735