1/*	$NetBSD: bf_enc_686.S,v 1.1 2001/09/09 11:01:02 tls Exp $	*/
2
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 */
59
60/*
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 */
65
66#include <i386/include/asm.h>
67
68ENTRY(BF_encrypt)
69	pushl	%ebp
70	pushl	%ebx
71	pushl	%esi
72	pushl	%edi
73
74
75	/* Load the 2 words */
76	movl	20(%esp),	%eax
77	movl	(%eax),		%ecx
78	movl	4(%eax),	%edx
79
80	/* P pointer, s and enc flag */
81	movl	24(%esp),	%edi
82	xorl	%eax,		%eax
83	xorl	%ebx,		%ebx
84	xorl	(%edi),		%ecx
85
86	/* Round 0 */
87	rorl	$16,		%ecx
88	movl	4(%edi),	%esi
89	movb	%ch,		%al
90	movb	%cl,		%bl
91	rorl	$16,		%ecx
92	xorl	%esi,		%edx
93	movl	72(%edi,%eax,4),%esi
94	movl	1096(%edi,%ebx,4),%ebp
95	movb	%ch,		%al
96	movb	%cl,		%bl
97	addl	%ebp,		%esi
98	movl	2120(%edi,%eax,4),%eax
99	xorl	%eax,		%esi
100	movl	3144(%edi,%ebx,4),%ebp
101	addl	%ebp,		%esi
102	xorl	%eax,		%eax
103	xorl	%esi,		%edx
104
105	/* Round 1 */
106	rorl	$16,		%edx
107	movl	8(%edi),	%esi
108	movb	%dh,		%al
109	movb	%dl,		%bl
110	rorl	$16,		%edx
111	xorl	%esi,		%ecx
112	movl	72(%edi,%eax,4),%esi
113	movl	1096(%edi,%ebx,4),%ebp
114	movb	%dh,		%al
115	movb	%dl,		%bl
116	addl	%ebp,		%esi
117	movl	2120(%edi,%eax,4),%eax
118	xorl	%eax,		%esi
119	movl	3144(%edi,%ebx,4),%ebp
120	addl	%ebp,		%esi
121	xorl	%eax,		%eax
122	xorl	%esi,		%ecx
123
124	/* Round 2 */
125	rorl	$16,		%ecx
126	movl	12(%edi),	%esi
127	movb	%ch,		%al
128	movb	%cl,		%bl
129	rorl	$16,		%ecx
130	xorl	%esi,		%edx
131	movl	72(%edi,%eax,4),%esi
132	movl	1096(%edi,%ebx,4),%ebp
133	movb	%ch,		%al
134	movb	%cl,		%bl
135	addl	%ebp,		%esi
136	movl	2120(%edi,%eax,4),%eax
137	xorl	%eax,		%esi
138	movl	3144(%edi,%ebx,4),%ebp
139	addl	%ebp,		%esi
140	xorl	%eax,		%eax
141	xorl	%esi,		%edx
142
143	/* Round 3 */
144	rorl	$16,		%edx
145	movl	16(%edi),	%esi
146	movb	%dh,		%al
147	movb	%dl,		%bl
148	rorl	$16,		%edx
149	xorl	%esi,		%ecx
150	movl	72(%edi,%eax,4),%esi
151	movl	1096(%edi,%ebx,4),%ebp
152	movb	%dh,		%al
153	movb	%dl,		%bl
154	addl	%ebp,		%esi
155	movl	2120(%edi,%eax,4),%eax
156	xorl	%eax,		%esi
157	movl	3144(%edi,%ebx,4),%ebp
158	addl	%ebp,		%esi
159	xorl	%eax,		%eax
160	xorl	%esi,		%ecx
161
162	/* Round 4 */
163	rorl	$16,		%ecx
164	movl	20(%edi),	%esi
165	movb	%ch,		%al
166	movb	%cl,		%bl
167	rorl	$16,		%ecx
168	xorl	%esi,		%edx
169	movl	72(%edi,%eax,4),%esi
170	movl	1096(%edi,%ebx,4),%ebp
171	movb	%ch,		%al
172	movb	%cl,		%bl
173	addl	%ebp,		%esi
174	movl	2120(%edi,%eax,4),%eax
175	xorl	%eax,		%esi
176	movl	3144(%edi,%ebx,4),%ebp
177	addl	%ebp,		%esi
178	xorl	%eax,		%eax
179	xorl	%esi,		%edx
180
181	/* Round 5 */
182	rorl	$16,		%edx
183	movl	24(%edi),	%esi
184	movb	%dh,		%al
185	movb	%dl,		%bl
186	rorl	$16,		%edx
187	xorl	%esi,		%ecx
188	movl	72(%edi,%eax,4),%esi
189	movl	1096(%edi,%ebx,4),%ebp
190	movb	%dh,		%al
191	movb	%dl,		%bl
192	addl	%ebp,		%esi
193	movl	2120(%edi,%eax,4),%eax
194	xorl	%eax,		%esi
195	movl	3144(%edi,%ebx,4),%ebp
196	addl	%ebp,		%esi
197	xorl	%eax,		%eax
198	xorl	%esi,		%ecx
199
200	/* Round 6 */
201	rorl	$16,		%ecx
202	movl	28(%edi),	%esi
203	movb	%ch,		%al
204	movb	%cl,		%bl
205	rorl	$16,		%ecx
206	xorl	%esi,		%edx
207	movl	72(%edi,%eax,4),%esi
208	movl	1096(%edi,%ebx,4),%ebp
209	movb	%ch,		%al
210	movb	%cl,		%bl
211	addl	%ebp,		%esi
212	movl	2120(%edi,%eax,4),%eax
213	xorl	%eax,		%esi
214	movl	3144(%edi,%ebx,4),%ebp
215	addl	%ebp,		%esi
216	xorl	%eax,		%eax
217	xorl	%esi,		%edx
218
219	/* Round 7 */
220	rorl	$16,		%edx
221	movl	32(%edi),	%esi
222	movb	%dh,		%al
223	movb	%dl,		%bl
224	rorl	$16,		%edx
225	xorl	%esi,		%ecx
226	movl	72(%edi,%eax,4),%esi
227	movl	1096(%edi,%ebx,4),%ebp
228	movb	%dh,		%al
229	movb	%dl,		%bl
230	addl	%ebp,		%esi
231	movl	2120(%edi,%eax,4),%eax
232	xorl	%eax,		%esi
233	movl	3144(%edi,%ebx,4),%ebp
234	addl	%ebp,		%esi
235	xorl	%eax,		%eax
236	xorl	%esi,		%ecx
237
238	/* Round 8 */
239	rorl	$16,		%ecx
240	movl	36(%edi),	%esi
241	movb	%ch,		%al
242	movb	%cl,		%bl
243	rorl	$16,		%ecx
244	xorl	%esi,		%edx
245	movl	72(%edi,%eax,4),%esi
246	movl	1096(%edi,%ebx,4),%ebp
247	movb	%ch,		%al
248	movb	%cl,		%bl
249	addl	%ebp,		%esi
250	movl	2120(%edi,%eax,4),%eax
251	xorl	%eax,		%esi
252	movl	3144(%edi,%ebx,4),%ebp
253	addl	%ebp,		%esi
254	xorl	%eax,		%eax
255	xorl	%esi,		%edx
256
257	/* Round 9 */
258	rorl	$16,		%edx
259	movl	40(%edi),	%esi
260	movb	%dh,		%al
261	movb	%dl,		%bl
262	rorl	$16,		%edx
263	xorl	%esi,		%ecx
264	movl	72(%edi,%eax,4),%esi
265	movl	1096(%edi,%ebx,4),%ebp
266	movb	%dh,		%al
267	movb	%dl,		%bl
268	addl	%ebp,		%esi
269	movl	2120(%edi,%eax,4),%eax
270	xorl	%eax,		%esi
271	movl	3144(%edi,%ebx,4),%ebp
272	addl	%ebp,		%esi
273	xorl	%eax,		%eax
274	xorl	%esi,		%ecx
275
276	/* Round 10 */
277	rorl	$16,		%ecx
278	movl	44(%edi),	%esi
279	movb	%ch,		%al
280	movb	%cl,		%bl
281	rorl	$16,		%ecx
282	xorl	%esi,		%edx
283	movl	72(%edi,%eax,4),%esi
284	movl	1096(%edi,%ebx,4),%ebp
285	movb	%ch,		%al
286	movb	%cl,		%bl
287	addl	%ebp,		%esi
288	movl	2120(%edi,%eax,4),%eax
289	xorl	%eax,		%esi
290	movl	3144(%edi,%ebx,4),%ebp
291	addl	%ebp,		%esi
292	xorl	%eax,		%eax
293	xorl	%esi,		%edx
294
295	/* Round 11 */
296	rorl	$16,		%edx
297	movl	48(%edi),	%esi
298	movb	%dh,		%al
299	movb	%dl,		%bl
300	rorl	$16,		%edx
301	xorl	%esi,		%ecx
302	movl	72(%edi,%eax,4),%esi
303	movl	1096(%edi,%ebx,4),%ebp
304	movb	%dh,		%al
305	movb	%dl,		%bl
306	addl	%ebp,		%esi
307	movl	2120(%edi,%eax,4),%eax
308	xorl	%eax,		%esi
309	movl	3144(%edi,%ebx,4),%ebp
310	addl	%ebp,		%esi
311	xorl	%eax,		%eax
312	xorl	%esi,		%ecx
313
314	/* Round 12 */
315	rorl	$16,		%ecx
316	movl	52(%edi),	%esi
317	movb	%ch,		%al
318	movb	%cl,		%bl
319	rorl	$16,		%ecx
320	xorl	%esi,		%edx
321	movl	72(%edi,%eax,4),%esi
322	movl	1096(%edi,%ebx,4),%ebp
323	movb	%ch,		%al
324	movb	%cl,		%bl
325	addl	%ebp,		%esi
326	movl	2120(%edi,%eax,4),%eax
327	xorl	%eax,		%esi
328	movl	3144(%edi,%ebx,4),%ebp
329	addl	%ebp,		%esi
330	xorl	%eax,		%eax
331	xorl	%esi,		%edx
332
333	/* Round 13 */
334	rorl	$16,		%edx
335	movl	56(%edi),	%esi
336	movb	%dh,		%al
337	movb	%dl,		%bl
338	rorl	$16,		%edx
339	xorl	%esi,		%ecx
340	movl	72(%edi,%eax,4),%esi
341	movl	1096(%edi,%ebx,4),%ebp
342	movb	%dh,		%al
343	movb	%dl,		%bl
344	addl	%ebp,		%esi
345	movl	2120(%edi,%eax,4),%eax
346	xorl	%eax,		%esi
347	movl	3144(%edi,%ebx,4),%ebp
348	addl	%ebp,		%esi
349	xorl	%eax,		%eax
350	xorl	%esi,		%ecx
351
352	/* Round 14 */
353	rorl	$16,		%ecx
354	movl	60(%edi),	%esi
355	movb	%ch,		%al
356	movb	%cl,		%bl
357	rorl	$16,		%ecx
358	xorl	%esi,		%edx
359	movl	72(%edi,%eax,4),%esi
360	movl	1096(%edi,%ebx,4),%ebp
361	movb	%ch,		%al
362	movb	%cl,		%bl
363	addl	%ebp,		%esi
364	movl	2120(%edi,%eax,4),%eax
365	xorl	%eax,		%esi
366	movl	3144(%edi,%ebx,4),%ebp
367	addl	%ebp,		%esi
368	xorl	%eax,		%eax
369	xorl	%esi,		%edx
370
371	/* Round 15 */
372	rorl	$16,		%edx
373	movl	64(%edi),	%esi
374	movb	%dh,		%al
375	movb	%dl,		%bl
376	rorl	$16,		%edx
377	xorl	%esi,		%ecx
378	movl	72(%edi,%eax,4),%esi
379	movl	1096(%edi,%ebx,4),%ebp
380	movb	%dh,		%al
381	movb	%dl,		%bl
382	addl	%ebp,		%esi
383	movl	2120(%edi,%eax,4),%eax
384	xorl	%eax,		%esi
385	movl	3144(%edi,%ebx,4),%ebp
386	addl	%ebp,		%esi
387	xorl	%eax,		%eax
388	xorl	%esi,		%ecx
389	xorl	68(%edi),	%edx
390	movl	20(%esp),	%eax
391	movl	%edx,		(%eax)
392	movl	%ecx,		4(%eax)
393	popl	%edi
394	popl	%esi
395	popl	%ebx
396	popl	%ebp
397	ret
398.L_BF_encrypt_end:
399	.size   _C_LABEL(BF_encrypt),.L_BF_encrypt_end-_C_LABEL(BF_encrypt)
400
401ENTRY(BF_decrypt)
402	pushl	%ebp
403	pushl	%ebx
404	pushl	%esi
405	pushl	%edi
406
407
408	/* Load the 2 words */
409	movl	20(%esp),	%eax
410	movl	(%eax),		%ecx
411	movl	4(%eax),	%edx
412
413	/* P pointer, s and enc flag */
414	movl	24(%esp),	%edi
415	xorl	%eax,		%eax
416	xorl	%ebx,		%ebx
417	xorl	68(%edi),	%ecx
418
419	/* Round 16 */
420	rorl	$16,		%ecx
421	movl	64(%edi),	%esi
422	movb	%ch,		%al
423	movb	%cl,		%bl
424	rorl	$16,		%ecx
425	xorl	%esi,		%edx
426	movl	72(%edi,%eax,4),%esi
427	movl	1096(%edi,%ebx,4),%ebp
428	movb	%ch,		%al
429	movb	%cl,		%bl
430	addl	%ebp,		%esi
431	movl	2120(%edi,%eax,4),%eax
432	xorl	%eax,		%esi
433	movl	3144(%edi,%ebx,4),%ebp
434	addl	%ebp,		%esi
435	xorl	%eax,		%eax
436	xorl	%esi,		%edx
437
438	/* Round 15 */
439	rorl	$16,		%edx
440	movl	60(%edi),	%esi
441	movb	%dh,		%al
442	movb	%dl,		%bl
443	rorl	$16,		%edx
444	xorl	%esi,		%ecx
445	movl	72(%edi,%eax,4),%esi
446	movl	1096(%edi,%ebx,4),%ebp
447	movb	%dh,		%al
448	movb	%dl,		%bl
449	addl	%ebp,		%esi
450	movl	2120(%edi,%eax,4),%eax
451	xorl	%eax,		%esi
452	movl	3144(%edi,%ebx,4),%ebp
453	addl	%ebp,		%esi
454	xorl	%eax,		%eax
455	xorl	%esi,		%ecx
456
457	/* Round 14 */
458	rorl	$16,		%ecx
459	movl	56(%edi),	%esi
460	movb	%ch,		%al
461	movb	%cl,		%bl
462	rorl	$16,		%ecx
463	xorl	%esi,		%edx
464	movl	72(%edi,%eax,4),%esi
465	movl	1096(%edi,%ebx,4),%ebp
466	movb	%ch,		%al
467	movb	%cl,		%bl
468	addl	%ebp,		%esi
469	movl	2120(%edi,%eax,4),%eax
470	xorl	%eax,		%esi
471	movl	3144(%edi,%ebx,4),%ebp
472	addl	%ebp,		%esi
473	xorl	%eax,		%eax
474	xorl	%esi,		%edx
475
476	/* Round 13 */
477	rorl	$16,		%edx
478	movl	52(%edi),	%esi
479	movb	%dh,		%al
480	movb	%dl,		%bl
481	rorl	$16,		%edx
482	xorl	%esi,		%ecx
483	movl	72(%edi,%eax,4),%esi
484	movl	1096(%edi,%ebx,4),%ebp
485	movb	%dh,		%al
486	movb	%dl,		%bl
487	addl	%ebp,		%esi
488	movl	2120(%edi,%eax,4),%eax
489	xorl	%eax,		%esi
490	movl	3144(%edi,%ebx,4),%ebp
491	addl	%ebp,		%esi
492	xorl	%eax,		%eax
493	xorl	%esi,		%ecx
494
495	/* Round 12 */
496	rorl	$16,		%ecx
497	movl	48(%edi),	%esi
498	movb	%ch,		%al
499	movb	%cl,		%bl
500	rorl	$16,		%ecx
501	xorl	%esi,		%edx
502	movl	72(%edi,%eax,4),%esi
503	movl	1096(%edi,%ebx,4),%ebp
504	movb	%ch,		%al
505	movb	%cl,		%bl
506	addl	%ebp,		%esi
507	movl	2120(%edi,%eax,4),%eax
508	xorl	%eax,		%esi
509	movl	3144(%edi,%ebx,4),%ebp
510	addl	%ebp,		%esi
511	xorl	%eax,		%eax
512	xorl	%esi,		%edx
513
514	/* Round 11 */
515	rorl	$16,		%edx
516	movl	44(%edi),	%esi
517	movb	%dh,		%al
518	movb	%dl,		%bl
519	rorl	$16,		%edx
520	xorl	%esi,		%ecx
521	movl	72(%edi,%eax,4),%esi
522	movl	1096(%edi,%ebx,4),%ebp
523	movb	%dh,		%al
524	movb	%dl,		%bl
525	addl	%ebp,		%esi
526	movl	2120(%edi,%eax,4),%eax
527	xorl	%eax,		%esi
528	movl	3144(%edi,%ebx,4),%ebp
529	addl	%ebp,		%esi
530	xorl	%eax,		%eax
531	xorl	%esi,		%ecx
532
533	/* Round 10 */
534	rorl	$16,		%ecx
535	movl	40(%edi),	%esi
536	movb	%ch,		%al
537	movb	%cl,		%bl
538	rorl	$16,		%ecx
539	xorl	%esi,		%edx
540	movl	72(%edi,%eax,4),%esi
541	movl	1096(%edi,%ebx,4),%ebp
542	movb	%ch,		%al
543	movb	%cl,		%bl
544	addl	%ebp,		%esi
545	movl	2120(%edi,%eax,4),%eax
546	xorl	%eax,		%esi
547	movl	3144(%edi,%ebx,4),%ebp
548	addl	%ebp,		%esi
549	xorl	%eax,		%eax
550	xorl	%esi,		%edx
551
552	/* Round 9 */
553	rorl	$16,		%edx
554	movl	36(%edi),	%esi
555	movb	%dh,		%al
556	movb	%dl,		%bl
557	rorl	$16,		%edx
558	xorl	%esi,		%ecx
559	movl	72(%edi,%eax,4),%esi
560	movl	1096(%edi,%ebx,4),%ebp
561	movb	%dh,		%al
562	movb	%dl,		%bl
563	addl	%ebp,		%esi
564	movl	2120(%edi,%eax,4),%eax
565	xorl	%eax,		%esi
566	movl	3144(%edi,%ebx,4),%ebp
567	addl	%ebp,		%esi
568	xorl	%eax,		%eax
569	xorl	%esi,		%ecx
570
571	/* Round 8 */
572	rorl	$16,		%ecx
573	movl	32(%edi),	%esi
574	movb	%ch,		%al
575	movb	%cl,		%bl
576	rorl	$16,		%ecx
577	xorl	%esi,		%edx
578	movl	72(%edi,%eax,4),%esi
579	movl	1096(%edi,%ebx,4),%ebp
580	movb	%ch,		%al
581	movb	%cl,		%bl
582	addl	%ebp,		%esi
583	movl	2120(%edi,%eax,4),%eax
584	xorl	%eax,		%esi
585	movl	3144(%edi,%ebx,4),%ebp
586	addl	%ebp,		%esi
587	xorl	%eax,		%eax
588	xorl	%esi,		%edx
589
590	/* Round 7 */
591	rorl	$16,		%edx
592	movl	28(%edi),	%esi
593	movb	%dh,		%al
594	movb	%dl,		%bl
595	rorl	$16,		%edx
596	xorl	%esi,		%ecx
597	movl	72(%edi,%eax,4),%esi
598	movl	1096(%edi,%ebx,4),%ebp
599	movb	%dh,		%al
600	movb	%dl,		%bl
601	addl	%ebp,		%esi
602	movl	2120(%edi,%eax,4),%eax
603	xorl	%eax,		%esi
604	movl	3144(%edi,%ebx,4),%ebp
605	addl	%ebp,		%esi
606	xorl	%eax,		%eax
607	xorl	%esi,		%ecx
608
609	/* Round 6 */
610	rorl	$16,		%ecx
611	movl	24(%edi),	%esi
612	movb	%ch,		%al
613	movb	%cl,		%bl
614	rorl	$16,		%ecx
615	xorl	%esi,		%edx
616	movl	72(%edi,%eax,4),%esi
617	movl	1096(%edi,%ebx,4),%ebp
618	movb	%ch,		%al
619	movb	%cl,		%bl
620	addl	%ebp,		%esi
621	movl	2120(%edi,%eax,4),%eax
622	xorl	%eax,		%esi
623	movl	3144(%edi,%ebx,4),%ebp
624	addl	%ebp,		%esi
625	xorl	%eax,		%eax
626	xorl	%esi,		%edx
627
628	/* Round 5 */
629	rorl	$16,		%edx
630	movl	20(%edi),	%esi
631	movb	%dh,		%al
632	movb	%dl,		%bl
633	rorl	$16,		%edx
634	xorl	%esi,		%ecx
635	movl	72(%edi,%eax,4),%esi
636	movl	1096(%edi,%ebx,4),%ebp
637	movb	%dh,		%al
638	movb	%dl,		%bl
639	addl	%ebp,		%esi
640	movl	2120(%edi,%eax,4),%eax
641	xorl	%eax,		%esi
642	movl	3144(%edi,%ebx,4),%ebp
643	addl	%ebp,		%esi
644	xorl	%eax,		%eax
645	xorl	%esi,		%ecx
646
647	/* Round 4 */
648	rorl	$16,		%ecx
649	movl	16(%edi),	%esi
650	movb	%ch,		%al
651	movb	%cl,		%bl
652	rorl	$16,		%ecx
653	xorl	%esi,		%edx
654	movl	72(%edi,%eax,4),%esi
655	movl	1096(%edi,%ebx,4),%ebp
656	movb	%ch,		%al
657	movb	%cl,		%bl
658	addl	%ebp,		%esi
659	movl	2120(%edi,%eax,4),%eax
660	xorl	%eax,		%esi
661	movl	3144(%edi,%ebx,4),%ebp
662	addl	%ebp,		%esi
663	xorl	%eax,		%eax
664	xorl	%esi,		%edx
665
666	/* Round 3 */
667	rorl	$16,		%edx
668	movl	12(%edi),	%esi
669	movb	%dh,		%al
670	movb	%dl,		%bl
671	rorl	$16,		%edx
672	xorl	%esi,		%ecx
673	movl	72(%edi,%eax,4),%esi
674	movl	1096(%edi,%ebx,4),%ebp
675	movb	%dh,		%al
676	movb	%dl,		%bl
677	addl	%ebp,		%esi
678	movl	2120(%edi,%eax,4),%eax
679	xorl	%eax,		%esi
680	movl	3144(%edi,%ebx,4),%ebp
681	addl	%ebp,		%esi
682	xorl	%eax,		%eax
683	xorl	%esi,		%ecx
684
685	/* Round 2 */
686	rorl	$16,		%ecx
687	movl	8(%edi),	%esi
688	movb	%ch,		%al
689	movb	%cl,		%bl
690	rorl	$16,		%ecx
691	xorl	%esi,		%edx
692	movl	72(%edi,%eax,4),%esi
693	movl	1096(%edi,%ebx,4),%ebp
694	movb	%ch,		%al
695	movb	%cl,		%bl
696	addl	%ebp,		%esi
697	movl	2120(%edi,%eax,4),%eax
698	xorl	%eax,		%esi
699	movl	3144(%edi,%ebx,4),%ebp
700	addl	%ebp,		%esi
701	xorl	%eax,		%eax
702	xorl	%esi,		%edx
703
704	/* Round 1 */
705	rorl	$16,		%edx
706	movl	4(%edi),	%esi
707	movb	%dh,		%al
708	movb	%dl,		%bl
709	rorl	$16,		%edx
710	xorl	%esi,		%ecx
711	movl	72(%edi,%eax,4),%esi
712	movl	1096(%edi,%ebx,4),%ebp
713	movb	%dh,		%al
714	movb	%dl,		%bl
715	addl	%ebp,		%esi
716	movl	2120(%edi,%eax,4),%eax
717	xorl	%eax,		%esi
718	movl	3144(%edi,%ebx,4),%ebp
719	addl	%ebp,		%esi
720	xorl	%eax,		%eax
721	xorl	%esi,		%ecx
722	xorl	(%edi),		%edx
723	movl	20(%esp),	%eax
724	movl	%edx,		(%eax)
725	movl	%ecx,		4(%eax)
726	popl	%edi
727	popl	%esi
728	popl	%ebx
729	popl	%ebp
730	ret
731	.L_BF_decrypt_end:
732	.size   _C_LABEL(BF_decrypt),.L_BF_decrypt_end-_C_LABEL(BF_decrypt)
733