xref: /freebsd/sys/crypto/des/arch/i386/des_enc.S (revision 2e3507c25e42292b45a5482e116d278f5515d04d)
1/* $NetBSD: des_enc.S,v 1.1 2001/09/09 11:01:02 tls Exp $ */
2
3/* Copyright (C) 1995-1997 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 des686.pl elf' by
62 * Thor Lancelot Simon <tls@netbsd.org>
63 */
64
65#include <i386/include/asm.h>
66#define	_C_LABEL	CNAME
67
68ENTRY(des_encrypt1)
69	pushl	%esi
70	pushl	%edi
71
72	/* Load the 2 words */
73	movl	12(%esp),	%esi
74	xorl	%ecx,		%ecx
75	pushl	%ebx
76	pushl	%ebp
77	movl	(%esi),		%eax
78	movl	28(%esp),	%ebx
79	movl	4(%esi),	%edi
80
81	/* IP */
82	roll	$4,		%eax
83	movl	%eax,		%esi
84	xorl	%edi,		%eax
85	andl	$0xf0f0f0f0,	%eax
86	xorl	%eax,		%esi
87	xorl	%eax,		%edi
88
89	roll	$20,		%edi
90	movl	%edi,		%eax
91	xorl	%esi,		%edi
92	andl	$0xfff0000f,	%edi
93	xorl	%edi,		%eax
94	xorl	%edi,		%esi
95
96	roll	$14,		%eax
97	movl	%eax,		%edi
98	xorl	%esi,		%eax
99	andl	$0x33333333,	%eax
100	xorl	%eax,		%edi
101	xorl	%eax,		%esi
102
103	roll	$22,		%esi
104	movl	%esi,		%eax
105	xorl	%edi,		%esi
106	andl	$0x03fc03fc,	%esi
107	xorl	%esi,		%eax
108	xorl	%esi,		%edi
109
110	roll	$9,		%eax
111	movl	%eax,		%esi
112	xorl	%edi,		%eax
113	andl	$0xaaaaaaaa,	%eax
114	xorl	%eax,		%esi
115	xorl	%eax,		%edi
116
117.byte 209
118.byte 199		# roll $1 %edi
119	movl	24(%esp),	%ebp
120	cmpl	$0,		%ebx
121	je	.L000start_decrypt
122
123	/* Round 0 */
124	movl	(%ebp),		%eax
125	xorl	%ebx,		%ebx
126	movl	4(%ebp),	%edx
127	xorl	%esi,		%eax
128	xorl	%esi,		%edx
129	andl	$0xfcfcfcfc,	%eax
130	andl	$0xcfcfcfcf,	%edx
131	movb	%al,		%bl
132	movb	%ah,		%cl
133	rorl	$4,		%edx
134	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
135	movb	%dl,		%bl
136	xorl	%ebp,		%edi
137	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
138	xorl	%ebp,		%edi
139	movb	%dh,		%cl
140	shrl	$16,		%eax
141	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
142	xorl	%ebp,		%edi
143	movb	%ah,		%bl
144	shrl	$16,		%edx
145	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
146	xorl	%ebp,		%edi
147	movl	24(%esp),	%ebp
148	movb	%dh,		%cl
149	andl	$0xff,		%eax
150	andl	$0xff,		%edx
151	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
152	xorl	%ebx,		%edi
153	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
154	xorl	%ebx,		%edi
155	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
156	xorl	%ebx,		%edi
157	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
158	xorl	%ebx,		%edi
159
160	/* Round 1 */
161	movl	8(%ebp),	%eax
162	xorl	%ebx,		%ebx
163	movl	12(%ebp),	%edx
164	xorl	%edi,		%eax
165	xorl	%edi,		%edx
166	andl	$0xfcfcfcfc,	%eax
167	andl	$0xcfcfcfcf,	%edx
168	movb	%al,		%bl
169	movb	%ah,		%cl
170	rorl	$4,		%edx
171	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
172	movb	%dl,		%bl
173	xorl	%ebp,		%esi
174	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
175	xorl	%ebp,		%esi
176	movb	%dh,		%cl
177	shrl	$16,		%eax
178	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
179	xorl	%ebp,		%esi
180	movb	%ah,		%bl
181	shrl	$16,		%edx
182	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
183	xorl	%ebp,		%esi
184	movl	24(%esp),	%ebp
185	movb	%dh,		%cl
186	andl	$0xff,		%eax
187	andl	$0xff,		%edx
188	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
189	xorl	%ebx,		%esi
190	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
191	xorl	%ebx,		%esi
192	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
193	xorl	%ebx,		%esi
194	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
195	xorl	%ebx,		%esi
196
197	/* Round 2 */
198	movl	16(%ebp),	%eax
199	xorl	%ebx,		%ebx
200	movl	20(%ebp),	%edx
201	xorl	%esi,		%eax
202	xorl	%esi,		%edx
203	andl	$0xfcfcfcfc,	%eax
204	andl	$0xcfcfcfcf,	%edx
205	movb	%al,		%bl
206	movb	%ah,		%cl
207	rorl	$4,		%edx
208	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
209	movb	%dl,		%bl
210	xorl	%ebp,		%edi
211	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
212	xorl	%ebp,		%edi
213	movb	%dh,		%cl
214	shrl	$16,		%eax
215	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
216	xorl	%ebp,		%edi
217	movb	%ah,		%bl
218	shrl	$16,		%edx
219	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
220	xorl	%ebp,		%edi
221	movl	24(%esp),	%ebp
222	movb	%dh,		%cl
223	andl	$0xff,		%eax
224	andl	$0xff,		%edx
225	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
226	xorl	%ebx,		%edi
227	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
228	xorl	%ebx,		%edi
229	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
230	xorl	%ebx,		%edi
231	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
232	xorl	%ebx,		%edi
233
234	/* Round 3 */
235	movl	24(%ebp),	%eax
236	xorl	%ebx,		%ebx
237	movl	28(%ebp),	%edx
238	xorl	%edi,		%eax
239	xorl	%edi,		%edx
240	andl	$0xfcfcfcfc,	%eax
241	andl	$0xcfcfcfcf,	%edx
242	movb	%al,		%bl
243	movb	%ah,		%cl
244	rorl	$4,		%edx
245	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
246	movb	%dl,		%bl
247	xorl	%ebp,		%esi
248	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
249	xorl	%ebp,		%esi
250	movb	%dh,		%cl
251	shrl	$16,		%eax
252	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
253	xorl	%ebp,		%esi
254	movb	%ah,		%bl
255	shrl	$16,		%edx
256	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
257	xorl	%ebp,		%esi
258	movl	24(%esp),	%ebp
259	movb	%dh,		%cl
260	andl	$0xff,		%eax
261	andl	$0xff,		%edx
262	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
263	xorl	%ebx,		%esi
264	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
265	xorl	%ebx,		%esi
266	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
267	xorl	%ebx,		%esi
268	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
269	xorl	%ebx,		%esi
270
271	/* Round 4 */
272	movl	32(%ebp),	%eax
273	xorl	%ebx,		%ebx
274	movl	36(%ebp),	%edx
275	xorl	%esi,		%eax
276	xorl	%esi,		%edx
277	andl	$0xfcfcfcfc,	%eax
278	andl	$0xcfcfcfcf,	%edx
279	movb	%al,		%bl
280	movb	%ah,		%cl
281	rorl	$4,		%edx
282	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
283	movb	%dl,		%bl
284	xorl	%ebp,		%edi
285	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
286	xorl	%ebp,		%edi
287	movb	%dh,		%cl
288	shrl	$16,		%eax
289	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
290	xorl	%ebp,		%edi
291	movb	%ah,		%bl
292	shrl	$16,		%edx
293	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
294	xorl	%ebp,		%edi
295	movl	24(%esp),	%ebp
296	movb	%dh,		%cl
297	andl	$0xff,		%eax
298	andl	$0xff,		%edx
299	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
300	xorl	%ebx,		%edi
301	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
302	xorl	%ebx,		%edi
303	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
304	xorl	%ebx,		%edi
305	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
306	xorl	%ebx,		%edi
307
308	/* Round 5 */
309	movl	40(%ebp),	%eax
310	xorl	%ebx,		%ebx
311	movl	44(%ebp),	%edx
312	xorl	%edi,		%eax
313	xorl	%edi,		%edx
314	andl	$0xfcfcfcfc,	%eax
315	andl	$0xcfcfcfcf,	%edx
316	movb	%al,		%bl
317	movb	%ah,		%cl
318	rorl	$4,		%edx
319	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
320	movb	%dl,		%bl
321	xorl	%ebp,		%esi
322	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
323	xorl	%ebp,		%esi
324	movb	%dh,		%cl
325	shrl	$16,		%eax
326	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
327	xorl	%ebp,		%esi
328	movb	%ah,		%bl
329	shrl	$16,		%edx
330	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
331	xorl	%ebp,		%esi
332	movl	24(%esp),	%ebp
333	movb	%dh,		%cl
334	andl	$0xff,		%eax
335	andl	$0xff,		%edx
336	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
337	xorl	%ebx,		%esi
338	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
339	xorl	%ebx,		%esi
340	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
341	xorl	%ebx,		%esi
342	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
343	xorl	%ebx,		%esi
344
345	/* Round 6 */
346	movl	48(%ebp),	%eax
347	xorl	%ebx,		%ebx
348	movl	52(%ebp),	%edx
349	xorl	%esi,		%eax
350	xorl	%esi,		%edx
351	andl	$0xfcfcfcfc,	%eax
352	andl	$0xcfcfcfcf,	%edx
353	movb	%al,		%bl
354	movb	%ah,		%cl
355	rorl	$4,		%edx
356	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
357	movb	%dl,		%bl
358	xorl	%ebp,		%edi
359	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
360	xorl	%ebp,		%edi
361	movb	%dh,		%cl
362	shrl	$16,		%eax
363	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
364	xorl	%ebp,		%edi
365	movb	%ah,		%bl
366	shrl	$16,		%edx
367	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
368	xorl	%ebp,		%edi
369	movl	24(%esp),	%ebp
370	movb	%dh,		%cl
371	andl	$0xff,		%eax
372	andl	$0xff,		%edx
373	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
374	xorl	%ebx,		%edi
375	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
376	xorl	%ebx,		%edi
377	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
378	xorl	%ebx,		%edi
379	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
380	xorl	%ebx,		%edi
381
382	/* Round 7 */
383	movl	56(%ebp),	%eax
384	xorl	%ebx,		%ebx
385	movl	60(%ebp),	%edx
386	xorl	%edi,		%eax
387	xorl	%edi,		%edx
388	andl	$0xfcfcfcfc,	%eax
389	andl	$0xcfcfcfcf,	%edx
390	movb	%al,		%bl
391	movb	%ah,		%cl
392	rorl	$4,		%edx
393	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
394	movb	%dl,		%bl
395	xorl	%ebp,		%esi
396	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
397	xorl	%ebp,		%esi
398	movb	%dh,		%cl
399	shrl	$16,		%eax
400	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
401	xorl	%ebp,		%esi
402	movb	%ah,		%bl
403	shrl	$16,		%edx
404	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
405	xorl	%ebp,		%esi
406	movl	24(%esp),	%ebp
407	movb	%dh,		%cl
408	andl	$0xff,		%eax
409	andl	$0xff,		%edx
410	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
411	xorl	%ebx,		%esi
412	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
413	xorl	%ebx,		%esi
414	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
415	xorl	%ebx,		%esi
416	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
417	xorl	%ebx,		%esi
418
419	/* Round 8 */
420	movl	64(%ebp),	%eax
421	xorl	%ebx,		%ebx
422	movl	68(%ebp),	%edx
423	xorl	%esi,		%eax
424	xorl	%esi,		%edx
425	andl	$0xfcfcfcfc,	%eax
426	andl	$0xcfcfcfcf,	%edx
427	movb	%al,		%bl
428	movb	%ah,		%cl
429	rorl	$4,		%edx
430	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
431	movb	%dl,		%bl
432	xorl	%ebp,		%edi
433	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
434	xorl	%ebp,		%edi
435	movb	%dh,		%cl
436	shrl	$16,		%eax
437	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
438	xorl	%ebp,		%edi
439	movb	%ah,		%bl
440	shrl	$16,		%edx
441	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
442	xorl	%ebp,		%edi
443	movl	24(%esp),	%ebp
444	movb	%dh,		%cl
445	andl	$0xff,		%eax
446	andl	$0xff,		%edx
447	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
448	xorl	%ebx,		%edi
449	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
450	xorl	%ebx,		%edi
451	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
452	xorl	%ebx,		%edi
453	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
454	xorl	%ebx,		%edi
455
456	/* Round 9 */
457	movl	72(%ebp),	%eax
458	xorl	%ebx,		%ebx
459	movl	76(%ebp),	%edx
460	xorl	%edi,		%eax
461	xorl	%edi,		%edx
462	andl	$0xfcfcfcfc,	%eax
463	andl	$0xcfcfcfcf,	%edx
464	movb	%al,		%bl
465	movb	%ah,		%cl
466	rorl	$4,		%edx
467	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
468	movb	%dl,		%bl
469	xorl	%ebp,		%esi
470	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
471	xorl	%ebp,		%esi
472	movb	%dh,		%cl
473	shrl	$16,		%eax
474	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
475	xorl	%ebp,		%esi
476	movb	%ah,		%bl
477	shrl	$16,		%edx
478	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
479	xorl	%ebp,		%esi
480	movl	24(%esp),	%ebp
481	movb	%dh,		%cl
482	andl	$0xff,		%eax
483	andl	$0xff,		%edx
484	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
485	xorl	%ebx,		%esi
486	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
487	xorl	%ebx,		%esi
488	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
489	xorl	%ebx,		%esi
490	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
491	xorl	%ebx,		%esi
492
493	/* Round 10 */
494	movl	80(%ebp),	%eax
495	xorl	%ebx,		%ebx
496	movl	84(%ebp),	%edx
497	xorl	%esi,		%eax
498	xorl	%esi,		%edx
499	andl	$0xfcfcfcfc,	%eax
500	andl	$0xcfcfcfcf,	%edx
501	movb	%al,		%bl
502	movb	%ah,		%cl
503	rorl	$4,		%edx
504	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
505	movb	%dl,		%bl
506	xorl	%ebp,		%edi
507	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
508	xorl	%ebp,		%edi
509	movb	%dh,		%cl
510	shrl	$16,		%eax
511	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
512	xorl	%ebp,		%edi
513	movb	%ah,		%bl
514	shrl	$16,		%edx
515	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
516	xorl	%ebp,		%edi
517	movl	24(%esp),	%ebp
518	movb	%dh,		%cl
519	andl	$0xff,		%eax
520	andl	$0xff,		%edx
521	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
522	xorl	%ebx,		%edi
523	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
524	xorl	%ebx,		%edi
525	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
526	xorl	%ebx,		%edi
527	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
528	xorl	%ebx,		%edi
529
530	/* Round 11 */
531	movl	88(%ebp),	%eax
532	xorl	%ebx,		%ebx
533	movl	92(%ebp),	%edx
534	xorl	%edi,		%eax
535	xorl	%edi,		%edx
536	andl	$0xfcfcfcfc,	%eax
537	andl	$0xcfcfcfcf,	%edx
538	movb	%al,		%bl
539	movb	%ah,		%cl
540	rorl	$4,		%edx
541	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
542	movb	%dl,		%bl
543	xorl	%ebp,		%esi
544	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
545	xorl	%ebp,		%esi
546	movb	%dh,		%cl
547	shrl	$16,		%eax
548	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
549	xorl	%ebp,		%esi
550	movb	%ah,		%bl
551	shrl	$16,		%edx
552	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
553	xorl	%ebp,		%esi
554	movl	24(%esp),	%ebp
555	movb	%dh,		%cl
556	andl	$0xff,		%eax
557	andl	$0xff,		%edx
558	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
559	xorl	%ebx,		%esi
560	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
561	xorl	%ebx,		%esi
562	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
563	xorl	%ebx,		%esi
564	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
565	xorl	%ebx,		%esi
566
567	/* Round 12 */
568	movl	96(%ebp),	%eax
569	xorl	%ebx,		%ebx
570	movl	100(%ebp),	%edx
571	xorl	%esi,		%eax
572	xorl	%esi,		%edx
573	andl	$0xfcfcfcfc,	%eax
574	andl	$0xcfcfcfcf,	%edx
575	movb	%al,		%bl
576	movb	%ah,		%cl
577	rorl	$4,		%edx
578	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
579	movb	%dl,		%bl
580	xorl	%ebp,		%edi
581	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
582	xorl	%ebp,		%edi
583	movb	%dh,		%cl
584	shrl	$16,		%eax
585	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
586	xorl	%ebp,		%edi
587	movb	%ah,		%bl
588	shrl	$16,		%edx
589	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
590	xorl	%ebp,		%edi
591	movl	24(%esp),	%ebp
592	movb	%dh,		%cl
593	andl	$0xff,		%eax
594	andl	$0xff,		%edx
595	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
596	xorl	%ebx,		%edi
597	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
598	xorl	%ebx,		%edi
599	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
600	xorl	%ebx,		%edi
601	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
602	xorl	%ebx,		%edi
603
604	/* Round 13 */
605	movl	104(%ebp),	%eax
606	xorl	%ebx,		%ebx
607	movl	108(%ebp),	%edx
608	xorl	%edi,		%eax
609	xorl	%edi,		%edx
610	andl	$0xfcfcfcfc,	%eax
611	andl	$0xcfcfcfcf,	%edx
612	movb	%al,		%bl
613	movb	%ah,		%cl
614	rorl	$4,		%edx
615	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
616	movb	%dl,		%bl
617	xorl	%ebp,		%esi
618	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
619	xorl	%ebp,		%esi
620	movb	%dh,		%cl
621	shrl	$16,		%eax
622	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
623	xorl	%ebp,		%esi
624	movb	%ah,		%bl
625	shrl	$16,		%edx
626	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
627	xorl	%ebp,		%esi
628	movl	24(%esp),	%ebp
629	movb	%dh,		%cl
630	andl	$0xff,		%eax
631	andl	$0xff,		%edx
632	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
633	xorl	%ebx,		%esi
634	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
635	xorl	%ebx,		%esi
636	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
637	xorl	%ebx,		%esi
638	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
639	xorl	%ebx,		%esi
640
641	/* Round 14 */
642	movl	112(%ebp),	%eax
643	xorl	%ebx,		%ebx
644	movl	116(%ebp),	%edx
645	xorl	%esi,		%eax
646	xorl	%esi,		%edx
647	andl	$0xfcfcfcfc,	%eax
648	andl	$0xcfcfcfcf,	%edx
649	movb	%al,		%bl
650	movb	%ah,		%cl
651	rorl	$4,		%edx
652	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
653	movb	%dl,		%bl
654	xorl	%ebp,		%edi
655	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
656	xorl	%ebp,		%edi
657	movb	%dh,		%cl
658	shrl	$16,		%eax
659	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
660	xorl	%ebp,		%edi
661	movb	%ah,		%bl
662	shrl	$16,		%edx
663	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
664	xorl	%ebp,		%edi
665	movl	24(%esp),	%ebp
666	movb	%dh,		%cl
667	andl	$0xff,		%eax
668	andl	$0xff,		%edx
669	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
670	xorl	%ebx,		%edi
671	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
672	xorl	%ebx,		%edi
673	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
674	xorl	%ebx,		%edi
675	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
676	xorl	%ebx,		%edi
677
678	/* Round 15 */
679	movl	120(%ebp),	%eax
680	xorl	%ebx,		%ebx
681	movl	124(%ebp),	%edx
682	xorl	%edi,		%eax
683	xorl	%edi,		%edx
684	andl	$0xfcfcfcfc,	%eax
685	andl	$0xcfcfcfcf,	%edx
686	movb	%al,		%bl
687	movb	%ah,		%cl
688	rorl	$4,		%edx
689	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
690	movb	%dl,		%bl
691	xorl	%ebp,		%esi
692	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
693	xorl	%ebp,		%esi
694	movb	%dh,		%cl
695	shrl	$16,		%eax
696	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
697	xorl	%ebp,		%esi
698	movb	%ah,		%bl
699	shrl	$16,		%edx
700	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
701	xorl	%ebp,		%esi
702	movl	24(%esp),	%ebp
703	movb	%dh,		%cl
704	andl	$0xff,		%eax
705	andl	$0xff,		%edx
706	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
707	xorl	%ebx,		%esi
708	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
709	xorl	%ebx,		%esi
710	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
711	xorl	%ebx,		%esi
712	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
713	xorl	%ebx,		%esi
714	jmp	.L001end
715.L000start_decrypt:
716
717	/* Round 15 */
718	movl	120(%ebp),	%eax
719	xorl	%ebx,		%ebx
720	movl	124(%ebp),	%edx
721	xorl	%esi,		%eax
722	xorl	%esi,		%edx
723	andl	$0xfcfcfcfc,	%eax
724	andl	$0xcfcfcfcf,	%edx
725	movb	%al,		%bl
726	movb	%ah,		%cl
727	rorl	$4,		%edx
728	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
729	movb	%dl,		%bl
730	xorl	%ebp,		%edi
731	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
732	xorl	%ebp,		%edi
733	movb	%dh,		%cl
734	shrl	$16,		%eax
735	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
736	xorl	%ebp,		%edi
737	movb	%ah,		%bl
738	shrl	$16,		%edx
739	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
740	xorl	%ebp,		%edi
741	movl	24(%esp),	%ebp
742	movb	%dh,		%cl
743	andl	$0xff,		%eax
744	andl	$0xff,		%edx
745	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
746	xorl	%ebx,		%edi
747	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
748	xorl	%ebx,		%edi
749	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
750	xorl	%ebx,		%edi
751	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
752	xorl	%ebx,		%edi
753
754	/* Round 14 */
755	movl	112(%ebp),	%eax
756	xorl	%ebx,		%ebx
757	movl	116(%ebp),	%edx
758	xorl	%edi,		%eax
759	xorl	%edi,		%edx
760	andl	$0xfcfcfcfc,	%eax
761	andl	$0xcfcfcfcf,	%edx
762	movb	%al,		%bl
763	movb	%ah,		%cl
764	rorl	$4,		%edx
765	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
766	movb	%dl,		%bl
767	xorl	%ebp,		%esi
768	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
769	xorl	%ebp,		%esi
770	movb	%dh,		%cl
771	shrl	$16,		%eax
772	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
773	xorl	%ebp,		%esi
774	movb	%ah,		%bl
775	shrl	$16,		%edx
776	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
777	xorl	%ebp,		%esi
778	movl	24(%esp),	%ebp
779	movb	%dh,		%cl
780	andl	$0xff,		%eax
781	andl	$0xff,		%edx
782	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
783	xorl	%ebx,		%esi
784	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
785	xorl	%ebx,		%esi
786	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
787	xorl	%ebx,		%esi
788	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
789	xorl	%ebx,		%esi
790
791	/* Round 13 */
792	movl	104(%ebp),	%eax
793	xorl	%ebx,		%ebx
794	movl	108(%ebp),	%edx
795	xorl	%esi,		%eax
796	xorl	%esi,		%edx
797	andl	$0xfcfcfcfc,	%eax
798	andl	$0xcfcfcfcf,	%edx
799	movb	%al,		%bl
800	movb	%ah,		%cl
801	rorl	$4,		%edx
802	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
803	movb	%dl,		%bl
804	xorl	%ebp,		%edi
805	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
806	xorl	%ebp,		%edi
807	movb	%dh,		%cl
808	shrl	$16,		%eax
809	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
810	xorl	%ebp,		%edi
811	movb	%ah,		%bl
812	shrl	$16,		%edx
813	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
814	xorl	%ebp,		%edi
815	movl	24(%esp),	%ebp
816	movb	%dh,		%cl
817	andl	$0xff,		%eax
818	andl	$0xff,		%edx
819	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
820	xorl	%ebx,		%edi
821	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
822	xorl	%ebx,		%edi
823	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
824	xorl	%ebx,		%edi
825	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
826	xorl	%ebx,		%edi
827
828	/* Round 12 */
829	movl	96(%ebp),	%eax
830	xorl	%ebx,		%ebx
831	movl	100(%ebp),	%edx
832	xorl	%edi,		%eax
833	xorl	%edi,		%edx
834	andl	$0xfcfcfcfc,	%eax
835	andl	$0xcfcfcfcf,	%edx
836	movb	%al,		%bl
837	movb	%ah,		%cl
838	rorl	$4,		%edx
839	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
840	movb	%dl,		%bl
841	xorl	%ebp,		%esi
842	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
843	xorl	%ebp,		%esi
844	movb	%dh,		%cl
845	shrl	$16,		%eax
846	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
847	xorl	%ebp,		%esi
848	movb	%ah,		%bl
849	shrl	$16,		%edx
850	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
851	xorl	%ebp,		%esi
852	movl	24(%esp),	%ebp
853	movb	%dh,		%cl
854	andl	$0xff,		%eax
855	andl	$0xff,		%edx
856	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
857	xorl	%ebx,		%esi
858	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
859	xorl	%ebx,		%esi
860	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
861	xorl	%ebx,		%esi
862	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
863	xorl	%ebx,		%esi
864
865	/* Round 11 */
866	movl	88(%ebp),	%eax
867	xorl	%ebx,		%ebx
868	movl	92(%ebp),	%edx
869	xorl	%esi,		%eax
870	xorl	%esi,		%edx
871	andl	$0xfcfcfcfc,	%eax
872	andl	$0xcfcfcfcf,	%edx
873	movb	%al,		%bl
874	movb	%ah,		%cl
875	rorl	$4,		%edx
876	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
877	movb	%dl,		%bl
878	xorl	%ebp,		%edi
879	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
880	xorl	%ebp,		%edi
881	movb	%dh,		%cl
882	shrl	$16,		%eax
883	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
884	xorl	%ebp,		%edi
885	movb	%ah,		%bl
886	shrl	$16,		%edx
887	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
888	xorl	%ebp,		%edi
889	movl	24(%esp),	%ebp
890	movb	%dh,		%cl
891	andl	$0xff,		%eax
892	andl	$0xff,		%edx
893	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
894	xorl	%ebx,		%edi
895	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
896	xorl	%ebx,		%edi
897	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
898	xorl	%ebx,		%edi
899	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
900	xorl	%ebx,		%edi
901
902	/* Round 10 */
903	movl	80(%ebp),	%eax
904	xorl	%ebx,		%ebx
905	movl	84(%ebp),	%edx
906	xorl	%edi,		%eax
907	xorl	%edi,		%edx
908	andl	$0xfcfcfcfc,	%eax
909	andl	$0xcfcfcfcf,	%edx
910	movb	%al,		%bl
911	movb	%ah,		%cl
912	rorl	$4,		%edx
913	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
914	movb	%dl,		%bl
915	xorl	%ebp,		%esi
916	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
917	xorl	%ebp,		%esi
918	movb	%dh,		%cl
919	shrl	$16,		%eax
920	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
921	xorl	%ebp,		%esi
922	movb	%ah,		%bl
923	shrl	$16,		%edx
924	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
925	xorl	%ebp,		%esi
926	movl	24(%esp),	%ebp
927	movb	%dh,		%cl
928	andl	$0xff,		%eax
929	andl	$0xff,		%edx
930	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
931	xorl	%ebx,		%esi
932	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
933	xorl	%ebx,		%esi
934	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
935	xorl	%ebx,		%esi
936	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
937	xorl	%ebx,		%esi
938
939	/* Round 9 */
940	movl	72(%ebp),	%eax
941	xorl	%ebx,		%ebx
942	movl	76(%ebp),	%edx
943	xorl	%esi,		%eax
944	xorl	%esi,		%edx
945	andl	$0xfcfcfcfc,	%eax
946	andl	$0xcfcfcfcf,	%edx
947	movb	%al,		%bl
948	movb	%ah,		%cl
949	rorl	$4,		%edx
950	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
951	movb	%dl,		%bl
952	xorl	%ebp,		%edi
953	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
954	xorl	%ebp,		%edi
955	movb	%dh,		%cl
956	shrl	$16,		%eax
957	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
958	xorl	%ebp,		%edi
959	movb	%ah,		%bl
960	shrl	$16,		%edx
961	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
962	xorl	%ebp,		%edi
963	movl	24(%esp),	%ebp
964	movb	%dh,		%cl
965	andl	$0xff,		%eax
966	andl	$0xff,		%edx
967	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
968	xorl	%ebx,		%edi
969	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
970	xorl	%ebx,		%edi
971	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
972	xorl	%ebx,		%edi
973	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
974	xorl	%ebx,		%edi
975
976	/* Round 8 */
977	movl	64(%ebp),	%eax
978	xorl	%ebx,		%ebx
979	movl	68(%ebp),	%edx
980	xorl	%edi,		%eax
981	xorl	%edi,		%edx
982	andl	$0xfcfcfcfc,	%eax
983	andl	$0xcfcfcfcf,	%edx
984	movb	%al,		%bl
985	movb	%ah,		%cl
986	rorl	$4,		%edx
987	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
988	movb	%dl,		%bl
989	xorl	%ebp,		%esi
990	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
991	xorl	%ebp,		%esi
992	movb	%dh,		%cl
993	shrl	$16,		%eax
994	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
995	xorl	%ebp,		%esi
996	movb	%ah,		%bl
997	shrl	$16,		%edx
998	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
999	xorl	%ebp,		%esi
1000	movl	24(%esp),	%ebp
1001	movb	%dh,		%cl
1002	andl	$0xff,		%eax
1003	andl	$0xff,		%edx
1004	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1005	xorl	%ebx,		%esi
1006	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1007	xorl	%ebx,		%esi
1008	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1009	xorl	%ebx,		%esi
1010	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1011	xorl	%ebx,		%esi
1012
1013	/* Round 7 */
1014	movl	56(%ebp),	%eax
1015	xorl	%ebx,		%ebx
1016	movl	60(%ebp),	%edx
1017	xorl	%esi,		%eax
1018	xorl	%esi,		%edx
1019	andl	$0xfcfcfcfc,	%eax
1020	andl	$0xcfcfcfcf,	%edx
1021	movb	%al,		%bl
1022	movb	%ah,		%cl
1023	rorl	$4,		%edx
1024	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1025	movb	%dl,		%bl
1026	xorl	%ebp,		%edi
1027	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1028	xorl	%ebp,		%edi
1029	movb	%dh,		%cl
1030	shrl	$16,		%eax
1031	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1032	xorl	%ebp,		%edi
1033	movb	%ah,		%bl
1034	shrl	$16,		%edx
1035	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1036	xorl	%ebp,		%edi
1037	movl	24(%esp),	%ebp
1038	movb	%dh,		%cl
1039	andl	$0xff,		%eax
1040	andl	$0xff,		%edx
1041	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1042	xorl	%ebx,		%edi
1043	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1044	xorl	%ebx,		%edi
1045	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1046	xorl	%ebx,		%edi
1047	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1048	xorl	%ebx,		%edi
1049
1050	/* Round 6 */
1051	movl	48(%ebp),	%eax
1052	xorl	%ebx,		%ebx
1053	movl	52(%ebp),	%edx
1054	xorl	%edi,		%eax
1055	xorl	%edi,		%edx
1056	andl	$0xfcfcfcfc,	%eax
1057	andl	$0xcfcfcfcf,	%edx
1058	movb	%al,		%bl
1059	movb	%ah,		%cl
1060	rorl	$4,		%edx
1061	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1062	movb	%dl,		%bl
1063	xorl	%ebp,		%esi
1064	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1065	xorl	%ebp,		%esi
1066	movb	%dh,		%cl
1067	shrl	$16,		%eax
1068	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1069	xorl	%ebp,		%esi
1070	movb	%ah,		%bl
1071	shrl	$16,		%edx
1072	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1073	xorl	%ebp,		%esi
1074	movl	24(%esp),	%ebp
1075	movb	%dh,		%cl
1076	andl	$0xff,		%eax
1077	andl	$0xff,		%edx
1078	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1079	xorl	%ebx,		%esi
1080	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1081	xorl	%ebx,		%esi
1082	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1083	xorl	%ebx,		%esi
1084	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1085	xorl	%ebx,		%esi
1086
1087	/* Round 5 */
1088	movl	40(%ebp),	%eax
1089	xorl	%ebx,		%ebx
1090	movl	44(%ebp),	%edx
1091	xorl	%esi,		%eax
1092	xorl	%esi,		%edx
1093	andl	$0xfcfcfcfc,	%eax
1094	andl	$0xcfcfcfcf,	%edx
1095	movb	%al,		%bl
1096	movb	%ah,		%cl
1097	rorl	$4,		%edx
1098	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1099	movb	%dl,		%bl
1100	xorl	%ebp,		%edi
1101	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1102	xorl	%ebp,		%edi
1103	movb	%dh,		%cl
1104	shrl	$16,		%eax
1105	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1106	xorl	%ebp,		%edi
1107	movb	%ah,		%bl
1108	shrl	$16,		%edx
1109	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1110	xorl	%ebp,		%edi
1111	movl	24(%esp),	%ebp
1112	movb	%dh,		%cl
1113	andl	$0xff,		%eax
1114	andl	$0xff,		%edx
1115	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1116	xorl	%ebx,		%edi
1117	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1118	xorl	%ebx,		%edi
1119	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1120	xorl	%ebx,		%edi
1121	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1122	xorl	%ebx,		%edi
1123
1124	/* Round 4 */
1125	movl	32(%ebp),	%eax
1126	xorl	%ebx,		%ebx
1127	movl	36(%ebp),	%edx
1128	xorl	%edi,		%eax
1129	xorl	%edi,		%edx
1130	andl	$0xfcfcfcfc,	%eax
1131	andl	$0xcfcfcfcf,	%edx
1132	movb	%al,		%bl
1133	movb	%ah,		%cl
1134	rorl	$4,		%edx
1135	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1136	movb	%dl,		%bl
1137	xorl	%ebp,		%esi
1138	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1139	xorl	%ebp,		%esi
1140	movb	%dh,		%cl
1141	shrl	$16,		%eax
1142	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1143	xorl	%ebp,		%esi
1144	movb	%ah,		%bl
1145	shrl	$16,		%edx
1146	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1147	xorl	%ebp,		%esi
1148	movl	24(%esp),	%ebp
1149	movb	%dh,		%cl
1150	andl	$0xff,		%eax
1151	andl	$0xff,		%edx
1152	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1153	xorl	%ebx,		%esi
1154	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1155	xorl	%ebx,		%esi
1156	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1157	xorl	%ebx,		%esi
1158	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1159	xorl	%ebx,		%esi
1160
1161	/* Round 3 */
1162	movl	24(%ebp),	%eax
1163	xorl	%ebx,		%ebx
1164	movl	28(%ebp),	%edx
1165	xorl	%esi,		%eax
1166	xorl	%esi,		%edx
1167	andl	$0xfcfcfcfc,	%eax
1168	andl	$0xcfcfcfcf,	%edx
1169	movb	%al,		%bl
1170	movb	%ah,		%cl
1171	rorl	$4,		%edx
1172	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1173	movb	%dl,		%bl
1174	xorl	%ebp,		%edi
1175	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1176	xorl	%ebp,		%edi
1177	movb	%dh,		%cl
1178	shrl	$16,		%eax
1179	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1180	xorl	%ebp,		%edi
1181	movb	%ah,		%bl
1182	shrl	$16,		%edx
1183	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1184	xorl	%ebp,		%edi
1185	movl	24(%esp),	%ebp
1186	movb	%dh,		%cl
1187	andl	$0xff,		%eax
1188	andl	$0xff,		%edx
1189	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1190	xorl	%ebx,		%edi
1191	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1192	xorl	%ebx,		%edi
1193	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1194	xorl	%ebx,		%edi
1195	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1196	xorl	%ebx,		%edi
1197
1198	/* Round 2 */
1199	movl	16(%ebp),	%eax
1200	xorl	%ebx,		%ebx
1201	movl	20(%ebp),	%edx
1202	xorl	%edi,		%eax
1203	xorl	%edi,		%edx
1204	andl	$0xfcfcfcfc,	%eax
1205	andl	$0xcfcfcfcf,	%edx
1206	movb	%al,		%bl
1207	movb	%ah,		%cl
1208	rorl	$4,		%edx
1209	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1210	movb	%dl,		%bl
1211	xorl	%ebp,		%esi
1212	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1213	xorl	%ebp,		%esi
1214	movb	%dh,		%cl
1215	shrl	$16,		%eax
1216	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1217	xorl	%ebp,		%esi
1218	movb	%ah,		%bl
1219	shrl	$16,		%edx
1220	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1221	xorl	%ebp,		%esi
1222	movl	24(%esp),	%ebp
1223	movb	%dh,		%cl
1224	andl	$0xff,		%eax
1225	andl	$0xff,		%edx
1226	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1227	xorl	%ebx,		%esi
1228	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1229	xorl	%ebx,		%esi
1230	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1231	xorl	%ebx,		%esi
1232	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1233	xorl	%ebx,		%esi
1234
1235	/* Round 1 */
1236	movl	8(%ebp),	%eax
1237	xorl	%ebx,		%ebx
1238	movl	12(%ebp),	%edx
1239	xorl	%esi,		%eax
1240	xorl	%esi,		%edx
1241	andl	$0xfcfcfcfc,	%eax
1242	andl	$0xcfcfcfcf,	%edx
1243	movb	%al,		%bl
1244	movb	%ah,		%cl
1245	rorl	$4,		%edx
1246	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1247	movb	%dl,		%bl
1248	xorl	%ebp,		%edi
1249	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1250	xorl	%ebp,		%edi
1251	movb	%dh,		%cl
1252	shrl	$16,		%eax
1253	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1254	xorl	%ebp,		%edi
1255	movb	%ah,		%bl
1256	shrl	$16,		%edx
1257	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1258	xorl	%ebp,		%edi
1259	movl	24(%esp),	%ebp
1260	movb	%dh,		%cl
1261	andl	$0xff,		%eax
1262	andl	$0xff,		%edx
1263	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1264	xorl	%ebx,		%edi
1265	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1266	xorl	%ebx,		%edi
1267	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1268	xorl	%ebx,		%edi
1269	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1270	xorl	%ebx,		%edi
1271
1272	/* Round 0 */
1273	movl	(%ebp),		%eax
1274	xorl	%ebx,		%ebx
1275	movl	4(%ebp),	%edx
1276	xorl	%edi,		%eax
1277	xorl	%edi,		%edx
1278	andl	$0xfcfcfcfc,	%eax
1279	andl	$0xcfcfcfcf,	%edx
1280	movb	%al,		%bl
1281	movb	%ah,		%cl
1282	rorl	$4,		%edx
1283	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1284	movb	%dl,		%bl
1285	xorl	%ebp,		%esi
1286	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1287	xorl	%ebp,		%esi
1288	movb	%dh,		%cl
1289	shrl	$16,		%eax
1290	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1291	xorl	%ebp,		%esi
1292	movb	%ah,		%bl
1293	shrl	$16,		%edx
1294	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1295	xorl	%ebp,		%esi
1296	movl	24(%esp),	%ebp
1297	movb	%dh,		%cl
1298	andl	$0xff,		%eax
1299	andl	$0xff,		%edx
1300	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1301	xorl	%ebx,		%esi
1302	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1303	xorl	%ebx,		%esi
1304	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1305	xorl	%ebx,		%esi
1306	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1307	xorl	%ebx,		%esi
1308.L001end:
1309
1310	/* FP */
1311	movl	20(%esp),	%edx
1312.byte 209
1313.byte 206		# rorl $1 %esi
1314	movl	%edi,		%eax
1315	xorl	%esi,		%edi
1316	andl	$0xaaaaaaaa,	%edi
1317	xorl	%edi,		%eax
1318	xorl	%edi,		%esi
1319
1320	roll	$23,		%eax
1321	movl	%eax,		%edi
1322	xorl	%esi,		%eax
1323	andl	$0x03fc03fc,	%eax
1324	xorl	%eax,		%edi
1325	xorl	%eax,		%esi
1326
1327	roll	$10,		%edi
1328	movl	%edi,		%eax
1329	xorl	%esi,		%edi
1330	andl	$0x33333333,	%edi
1331	xorl	%edi,		%eax
1332	xorl	%edi,		%esi
1333
1334	roll	$18,		%esi
1335	movl	%esi,		%edi
1336	xorl	%eax,		%esi
1337	andl	$0xfff0000f,	%esi
1338	xorl	%esi,		%edi
1339	xorl	%esi,		%eax
1340
1341	roll	$12,		%edi
1342	movl	%edi,		%esi
1343	xorl	%eax,		%edi
1344	andl	$0xf0f0f0f0,	%edi
1345	xorl	%edi,		%esi
1346	xorl	%edi,		%eax
1347
1348	rorl	$4,		%eax
1349	movl	%eax,		(%edx)
1350	movl	%esi,		4(%edx)
1351	popl	%ebp
1352	popl	%ebx
1353	popl	%edi
1354	popl	%esi
1355	ret
1356END(des_encrypt1)
1357
1358ENTRY(des_encrypt2)
1359	pushl	%esi
1360	pushl	%edi
1361
1362	/* Load the 2 words */
1363	movl	12(%esp),	%eax
1364	xorl	%ecx,		%ecx
1365	pushl	%ebx
1366	pushl	%ebp
1367	movl	(%eax),		%esi
1368	movl	28(%esp),	%ebx
1369	roll	$3,		%esi
1370	movl	4(%eax),	%edi
1371	roll	$3,		%edi
1372	movl	24(%esp),	%ebp
1373	cmpl	$0,		%ebx
1374	je	.L002start_decrypt
1375
1376	/* Round 0 */
1377	movl	(%ebp),		%eax
1378	xorl	%ebx,		%ebx
1379	movl	4(%ebp),	%edx
1380	xorl	%esi,		%eax
1381	xorl	%esi,		%edx
1382	andl	$0xfcfcfcfc,	%eax
1383	andl	$0xcfcfcfcf,	%edx
1384	movb	%al,		%bl
1385	movb	%ah,		%cl
1386	rorl	$4,		%edx
1387	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1388	movb	%dl,		%bl
1389	xorl	%ebp,		%edi
1390	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1391	xorl	%ebp,		%edi
1392	movb	%dh,		%cl
1393	shrl	$16,		%eax
1394	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1395	xorl	%ebp,		%edi
1396	movb	%ah,		%bl
1397	shrl	$16,		%edx
1398	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1399	xorl	%ebp,		%edi
1400	movl	24(%esp),	%ebp
1401	movb	%dh,		%cl
1402	andl	$0xff,		%eax
1403	andl	$0xff,		%edx
1404	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1405	xorl	%ebx,		%edi
1406	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1407	xorl	%ebx,		%edi
1408	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1409	xorl	%ebx,		%edi
1410	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1411	xorl	%ebx,		%edi
1412
1413	/* Round 1 */
1414	movl	8(%ebp),	%eax
1415	xorl	%ebx,		%ebx
1416	movl	12(%ebp),	%edx
1417	xorl	%edi,		%eax
1418	xorl	%edi,		%edx
1419	andl	$0xfcfcfcfc,	%eax
1420	andl	$0xcfcfcfcf,	%edx
1421	movb	%al,		%bl
1422	movb	%ah,		%cl
1423	rorl	$4,		%edx
1424	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1425	movb	%dl,		%bl
1426	xorl	%ebp,		%esi
1427	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1428	xorl	%ebp,		%esi
1429	movb	%dh,		%cl
1430	shrl	$16,		%eax
1431	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1432	xorl	%ebp,		%esi
1433	movb	%ah,		%bl
1434	shrl	$16,		%edx
1435	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1436	xorl	%ebp,		%esi
1437	movl	24(%esp),	%ebp
1438	movb	%dh,		%cl
1439	andl	$0xff,		%eax
1440	andl	$0xff,		%edx
1441	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1442	xorl	%ebx,		%esi
1443	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1444	xorl	%ebx,		%esi
1445	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1446	xorl	%ebx,		%esi
1447	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1448	xorl	%ebx,		%esi
1449
1450	/* Round 2 */
1451	movl	16(%ebp),	%eax
1452	xorl	%ebx,		%ebx
1453	movl	20(%ebp),	%edx
1454	xorl	%esi,		%eax
1455	xorl	%esi,		%edx
1456	andl	$0xfcfcfcfc,	%eax
1457	andl	$0xcfcfcfcf,	%edx
1458	movb	%al,		%bl
1459	movb	%ah,		%cl
1460	rorl	$4,		%edx
1461	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1462	movb	%dl,		%bl
1463	xorl	%ebp,		%edi
1464	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1465	xorl	%ebp,		%edi
1466	movb	%dh,		%cl
1467	shrl	$16,		%eax
1468	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1469	xorl	%ebp,		%edi
1470	movb	%ah,		%bl
1471	shrl	$16,		%edx
1472	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1473	xorl	%ebp,		%edi
1474	movl	24(%esp),	%ebp
1475	movb	%dh,		%cl
1476	andl	$0xff,		%eax
1477	andl	$0xff,		%edx
1478	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1479	xorl	%ebx,		%edi
1480	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1481	xorl	%ebx,		%edi
1482	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1483	xorl	%ebx,		%edi
1484	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1485	xorl	%ebx,		%edi
1486
1487	/* Round 3 */
1488	movl	24(%ebp),	%eax
1489	xorl	%ebx,		%ebx
1490	movl	28(%ebp),	%edx
1491	xorl	%edi,		%eax
1492	xorl	%edi,		%edx
1493	andl	$0xfcfcfcfc,	%eax
1494	andl	$0xcfcfcfcf,	%edx
1495	movb	%al,		%bl
1496	movb	%ah,		%cl
1497	rorl	$4,		%edx
1498	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1499	movb	%dl,		%bl
1500	xorl	%ebp,		%esi
1501	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1502	xorl	%ebp,		%esi
1503	movb	%dh,		%cl
1504	shrl	$16,		%eax
1505	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1506	xorl	%ebp,		%esi
1507	movb	%ah,		%bl
1508	shrl	$16,		%edx
1509	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1510	xorl	%ebp,		%esi
1511	movl	24(%esp),	%ebp
1512	movb	%dh,		%cl
1513	andl	$0xff,		%eax
1514	andl	$0xff,		%edx
1515	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1516	xorl	%ebx,		%esi
1517	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1518	xorl	%ebx,		%esi
1519	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1520	xorl	%ebx,		%esi
1521	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1522	xorl	%ebx,		%esi
1523
1524	/* Round 4 */
1525	movl	32(%ebp),	%eax
1526	xorl	%ebx,		%ebx
1527	movl	36(%ebp),	%edx
1528	xorl	%esi,		%eax
1529	xorl	%esi,		%edx
1530	andl	$0xfcfcfcfc,	%eax
1531	andl	$0xcfcfcfcf,	%edx
1532	movb	%al,		%bl
1533	movb	%ah,		%cl
1534	rorl	$4,		%edx
1535	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1536	movb	%dl,		%bl
1537	xorl	%ebp,		%edi
1538	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1539	xorl	%ebp,		%edi
1540	movb	%dh,		%cl
1541	shrl	$16,		%eax
1542	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1543	xorl	%ebp,		%edi
1544	movb	%ah,		%bl
1545	shrl	$16,		%edx
1546	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1547	xorl	%ebp,		%edi
1548	movl	24(%esp),	%ebp
1549	movb	%dh,		%cl
1550	andl	$0xff,		%eax
1551	andl	$0xff,		%edx
1552	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1553	xorl	%ebx,		%edi
1554	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1555	xorl	%ebx,		%edi
1556	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1557	xorl	%ebx,		%edi
1558	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1559	xorl	%ebx,		%edi
1560
1561	/* Round 5 */
1562	movl	40(%ebp),	%eax
1563	xorl	%ebx,		%ebx
1564	movl	44(%ebp),	%edx
1565	xorl	%edi,		%eax
1566	xorl	%edi,		%edx
1567	andl	$0xfcfcfcfc,	%eax
1568	andl	$0xcfcfcfcf,	%edx
1569	movb	%al,		%bl
1570	movb	%ah,		%cl
1571	rorl	$4,		%edx
1572	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1573	movb	%dl,		%bl
1574	xorl	%ebp,		%esi
1575	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1576	xorl	%ebp,		%esi
1577	movb	%dh,		%cl
1578	shrl	$16,		%eax
1579	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1580	xorl	%ebp,		%esi
1581	movb	%ah,		%bl
1582	shrl	$16,		%edx
1583	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1584	xorl	%ebp,		%esi
1585	movl	24(%esp),	%ebp
1586	movb	%dh,		%cl
1587	andl	$0xff,		%eax
1588	andl	$0xff,		%edx
1589	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1590	xorl	%ebx,		%esi
1591	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1592	xorl	%ebx,		%esi
1593	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1594	xorl	%ebx,		%esi
1595	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1596	xorl	%ebx,		%esi
1597
1598	/* Round 6 */
1599	movl	48(%ebp),	%eax
1600	xorl	%ebx,		%ebx
1601	movl	52(%ebp),	%edx
1602	xorl	%esi,		%eax
1603	xorl	%esi,		%edx
1604	andl	$0xfcfcfcfc,	%eax
1605	andl	$0xcfcfcfcf,	%edx
1606	movb	%al,		%bl
1607	movb	%ah,		%cl
1608	rorl	$4,		%edx
1609	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1610	movb	%dl,		%bl
1611	xorl	%ebp,		%edi
1612	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1613	xorl	%ebp,		%edi
1614	movb	%dh,		%cl
1615	shrl	$16,		%eax
1616	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1617	xorl	%ebp,		%edi
1618	movb	%ah,		%bl
1619	shrl	$16,		%edx
1620	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1621	xorl	%ebp,		%edi
1622	movl	24(%esp),	%ebp
1623	movb	%dh,		%cl
1624	andl	$0xff,		%eax
1625	andl	$0xff,		%edx
1626	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1627	xorl	%ebx,		%edi
1628	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1629	xorl	%ebx,		%edi
1630	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1631	xorl	%ebx,		%edi
1632	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1633	xorl	%ebx,		%edi
1634
1635	/* Round 7 */
1636	movl	56(%ebp),	%eax
1637	xorl	%ebx,		%ebx
1638	movl	60(%ebp),	%edx
1639	xorl	%edi,		%eax
1640	xorl	%edi,		%edx
1641	andl	$0xfcfcfcfc,	%eax
1642	andl	$0xcfcfcfcf,	%edx
1643	movb	%al,		%bl
1644	movb	%ah,		%cl
1645	rorl	$4,		%edx
1646	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1647	movb	%dl,		%bl
1648	xorl	%ebp,		%esi
1649	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1650	xorl	%ebp,		%esi
1651	movb	%dh,		%cl
1652	shrl	$16,		%eax
1653	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1654	xorl	%ebp,		%esi
1655	movb	%ah,		%bl
1656	shrl	$16,		%edx
1657	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1658	xorl	%ebp,		%esi
1659	movl	24(%esp),	%ebp
1660	movb	%dh,		%cl
1661	andl	$0xff,		%eax
1662	andl	$0xff,		%edx
1663	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1664	xorl	%ebx,		%esi
1665	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1666	xorl	%ebx,		%esi
1667	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1668	xorl	%ebx,		%esi
1669	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1670	xorl	%ebx,		%esi
1671
1672	/* Round 8 */
1673	movl	64(%ebp),	%eax
1674	xorl	%ebx,		%ebx
1675	movl	68(%ebp),	%edx
1676	xorl	%esi,		%eax
1677	xorl	%esi,		%edx
1678	andl	$0xfcfcfcfc,	%eax
1679	andl	$0xcfcfcfcf,	%edx
1680	movb	%al,		%bl
1681	movb	%ah,		%cl
1682	rorl	$4,		%edx
1683	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1684	movb	%dl,		%bl
1685	xorl	%ebp,		%edi
1686	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1687	xorl	%ebp,		%edi
1688	movb	%dh,		%cl
1689	shrl	$16,		%eax
1690	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1691	xorl	%ebp,		%edi
1692	movb	%ah,		%bl
1693	shrl	$16,		%edx
1694	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1695	xorl	%ebp,		%edi
1696	movl	24(%esp),	%ebp
1697	movb	%dh,		%cl
1698	andl	$0xff,		%eax
1699	andl	$0xff,		%edx
1700	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1701	xorl	%ebx,		%edi
1702	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1703	xorl	%ebx,		%edi
1704	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1705	xorl	%ebx,		%edi
1706	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1707	xorl	%ebx,		%edi
1708
1709	/* Round 9 */
1710	movl	72(%ebp),	%eax
1711	xorl	%ebx,		%ebx
1712	movl	76(%ebp),	%edx
1713	xorl	%edi,		%eax
1714	xorl	%edi,		%edx
1715	andl	$0xfcfcfcfc,	%eax
1716	andl	$0xcfcfcfcf,	%edx
1717	movb	%al,		%bl
1718	movb	%ah,		%cl
1719	rorl	$4,		%edx
1720	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1721	movb	%dl,		%bl
1722	xorl	%ebp,		%esi
1723	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1724	xorl	%ebp,		%esi
1725	movb	%dh,		%cl
1726	shrl	$16,		%eax
1727	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1728	xorl	%ebp,		%esi
1729	movb	%ah,		%bl
1730	shrl	$16,		%edx
1731	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1732	xorl	%ebp,		%esi
1733	movl	24(%esp),	%ebp
1734	movb	%dh,		%cl
1735	andl	$0xff,		%eax
1736	andl	$0xff,		%edx
1737	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1738	xorl	%ebx,		%esi
1739	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1740	xorl	%ebx,		%esi
1741	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1742	xorl	%ebx,		%esi
1743	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1744	xorl	%ebx,		%esi
1745
1746	/* Round 10 */
1747	movl	80(%ebp),	%eax
1748	xorl	%ebx,		%ebx
1749	movl	84(%ebp),	%edx
1750	xorl	%esi,		%eax
1751	xorl	%esi,		%edx
1752	andl	$0xfcfcfcfc,	%eax
1753	andl	$0xcfcfcfcf,	%edx
1754	movb	%al,		%bl
1755	movb	%ah,		%cl
1756	rorl	$4,		%edx
1757	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1758	movb	%dl,		%bl
1759	xorl	%ebp,		%edi
1760	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1761	xorl	%ebp,		%edi
1762	movb	%dh,		%cl
1763	shrl	$16,		%eax
1764	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1765	xorl	%ebp,		%edi
1766	movb	%ah,		%bl
1767	shrl	$16,		%edx
1768	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1769	xorl	%ebp,		%edi
1770	movl	24(%esp),	%ebp
1771	movb	%dh,		%cl
1772	andl	$0xff,		%eax
1773	andl	$0xff,		%edx
1774	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1775	xorl	%ebx,		%edi
1776	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1777	xorl	%ebx,		%edi
1778	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1779	xorl	%ebx,		%edi
1780	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1781	xorl	%ebx,		%edi
1782
1783	/* Round 11 */
1784	movl	88(%ebp),	%eax
1785	xorl	%ebx,		%ebx
1786	movl	92(%ebp),	%edx
1787	xorl	%edi,		%eax
1788	xorl	%edi,		%edx
1789	andl	$0xfcfcfcfc,	%eax
1790	andl	$0xcfcfcfcf,	%edx
1791	movb	%al,		%bl
1792	movb	%ah,		%cl
1793	rorl	$4,		%edx
1794	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1795	movb	%dl,		%bl
1796	xorl	%ebp,		%esi
1797	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1798	xorl	%ebp,		%esi
1799	movb	%dh,		%cl
1800	shrl	$16,		%eax
1801	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1802	xorl	%ebp,		%esi
1803	movb	%ah,		%bl
1804	shrl	$16,		%edx
1805	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1806	xorl	%ebp,		%esi
1807	movl	24(%esp),	%ebp
1808	movb	%dh,		%cl
1809	andl	$0xff,		%eax
1810	andl	$0xff,		%edx
1811	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1812	xorl	%ebx,		%esi
1813	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1814	xorl	%ebx,		%esi
1815	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1816	xorl	%ebx,		%esi
1817	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1818	xorl	%ebx,		%esi
1819
1820	/* Round 12 */
1821	movl	96(%ebp),	%eax
1822	xorl	%ebx,		%ebx
1823	movl	100(%ebp),	%edx
1824	xorl	%esi,		%eax
1825	xorl	%esi,		%edx
1826	andl	$0xfcfcfcfc,	%eax
1827	andl	$0xcfcfcfcf,	%edx
1828	movb	%al,		%bl
1829	movb	%ah,		%cl
1830	rorl	$4,		%edx
1831	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1832	movb	%dl,		%bl
1833	xorl	%ebp,		%edi
1834	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1835	xorl	%ebp,		%edi
1836	movb	%dh,		%cl
1837	shrl	$16,		%eax
1838	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1839	xorl	%ebp,		%edi
1840	movb	%ah,		%bl
1841	shrl	$16,		%edx
1842	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1843	xorl	%ebp,		%edi
1844	movl	24(%esp),	%ebp
1845	movb	%dh,		%cl
1846	andl	$0xff,		%eax
1847	andl	$0xff,		%edx
1848	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1849	xorl	%ebx,		%edi
1850	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1851	xorl	%ebx,		%edi
1852	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1853	xorl	%ebx,		%edi
1854	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1855	xorl	%ebx,		%edi
1856
1857	/* Round 13 */
1858	movl	104(%ebp),	%eax
1859	xorl	%ebx,		%ebx
1860	movl	108(%ebp),	%edx
1861	xorl	%edi,		%eax
1862	xorl	%edi,		%edx
1863	andl	$0xfcfcfcfc,	%eax
1864	andl	$0xcfcfcfcf,	%edx
1865	movb	%al,		%bl
1866	movb	%ah,		%cl
1867	rorl	$4,		%edx
1868	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1869	movb	%dl,		%bl
1870	xorl	%ebp,		%esi
1871	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1872	xorl	%ebp,		%esi
1873	movb	%dh,		%cl
1874	shrl	$16,		%eax
1875	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1876	xorl	%ebp,		%esi
1877	movb	%ah,		%bl
1878	shrl	$16,		%edx
1879	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1880	xorl	%ebp,		%esi
1881	movl	24(%esp),	%ebp
1882	movb	%dh,		%cl
1883	andl	$0xff,		%eax
1884	andl	$0xff,		%edx
1885	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1886	xorl	%ebx,		%esi
1887	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1888	xorl	%ebx,		%esi
1889	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1890	xorl	%ebx,		%esi
1891	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1892	xorl	%ebx,		%esi
1893
1894	/* Round 14 */
1895	movl	112(%ebp),	%eax
1896	xorl	%ebx,		%ebx
1897	movl	116(%ebp),	%edx
1898	xorl	%esi,		%eax
1899	xorl	%esi,		%edx
1900	andl	$0xfcfcfcfc,	%eax
1901	andl	$0xcfcfcfcf,	%edx
1902	movb	%al,		%bl
1903	movb	%ah,		%cl
1904	rorl	$4,		%edx
1905	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1906	movb	%dl,		%bl
1907	xorl	%ebp,		%edi
1908	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1909	xorl	%ebp,		%edi
1910	movb	%dh,		%cl
1911	shrl	$16,		%eax
1912	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1913	xorl	%ebp,		%edi
1914	movb	%ah,		%bl
1915	shrl	$16,		%edx
1916	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1917	xorl	%ebp,		%edi
1918	movl	24(%esp),	%ebp
1919	movb	%dh,		%cl
1920	andl	$0xff,		%eax
1921	andl	$0xff,		%edx
1922	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1923	xorl	%ebx,		%edi
1924	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1925	xorl	%ebx,		%edi
1926	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1927	xorl	%ebx,		%edi
1928	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1929	xorl	%ebx,		%edi
1930
1931	/* Round 15 */
1932	movl	120(%ebp),	%eax
1933	xorl	%ebx,		%ebx
1934	movl	124(%ebp),	%edx
1935	xorl	%edi,		%eax
1936	xorl	%edi,		%edx
1937	andl	$0xfcfcfcfc,	%eax
1938	andl	$0xcfcfcfcf,	%edx
1939	movb	%al,		%bl
1940	movb	%ah,		%cl
1941	rorl	$4,		%edx
1942	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1943	movb	%dl,		%bl
1944	xorl	%ebp,		%esi
1945	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1946	xorl	%ebp,		%esi
1947	movb	%dh,		%cl
1948	shrl	$16,		%eax
1949	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1950	xorl	%ebp,		%esi
1951	movb	%ah,		%bl
1952	shrl	$16,		%edx
1953	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1954	xorl	%ebp,		%esi
1955	movl	24(%esp),	%ebp
1956	movb	%dh,		%cl
1957	andl	$0xff,		%eax
1958	andl	$0xff,		%edx
1959	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1960	xorl	%ebx,		%esi
1961	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1962	xorl	%ebx,		%esi
1963	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1964	xorl	%ebx,		%esi
1965	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1966	xorl	%ebx,		%esi
1967	jmp	.L003end
1968.L002start_decrypt:
1969
1970	/* Round 15 */
1971	movl	120(%ebp),	%eax
1972	xorl	%ebx,		%ebx
1973	movl	124(%ebp),	%edx
1974	xorl	%esi,		%eax
1975	xorl	%esi,		%edx
1976	andl	$0xfcfcfcfc,	%eax
1977	andl	$0xcfcfcfcf,	%edx
1978	movb	%al,		%bl
1979	movb	%ah,		%cl
1980	rorl	$4,		%edx
1981	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1982	movb	%dl,		%bl
1983	xorl	%ebp,		%edi
1984	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1985	xorl	%ebp,		%edi
1986	movb	%dh,		%cl
1987	shrl	$16,		%eax
1988	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1989	xorl	%ebp,		%edi
1990	movb	%ah,		%bl
1991	shrl	$16,		%edx
1992	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1993	xorl	%ebp,		%edi
1994	movl	24(%esp),	%ebp
1995	movb	%dh,		%cl
1996	andl	$0xff,		%eax
1997	andl	$0xff,		%edx
1998	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1999	xorl	%ebx,		%edi
2000	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2001	xorl	%ebx,		%edi
2002	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2003	xorl	%ebx,		%edi
2004	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2005	xorl	%ebx,		%edi
2006
2007	/* Round 14 */
2008	movl	112(%ebp),	%eax
2009	xorl	%ebx,		%ebx
2010	movl	116(%ebp),	%edx
2011	xorl	%edi,		%eax
2012	xorl	%edi,		%edx
2013	andl	$0xfcfcfcfc,	%eax
2014	andl	$0xcfcfcfcf,	%edx
2015	movb	%al,		%bl
2016	movb	%ah,		%cl
2017	rorl	$4,		%edx
2018	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2019	movb	%dl,		%bl
2020	xorl	%ebp,		%esi
2021	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2022	xorl	%ebp,		%esi
2023	movb	%dh,		%cl
2024	shrl	$16,		%eax
2025	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2026	xorl	%ebp,		%esi
2027	movb	%ah,		%bl
2028	shrl	$16,		%edx
2029	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2030	xorl	%ebp,		%esi
2031	movl	24(%esp),	%ebp
2032	movb	%dh,		%cl
2033	andl	$0xff,		%eax
2034	andl	$0xff,		%edx
2035	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2036	xorl	%ebx,		%esi
2037	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2038	xorl	%ebx,		%esi
2039	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2040	xorl	%ebx,		%esi
2041	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2042	xorl	%ebx,		%esi
2043
2044	/* Round 13 */
2045	movl	104(%ebp),	%eax
2046	xorl	%ebx,		%ebx
2047	movl	108(%ebp),	%edx
2048	xorl	%esi,		%eax
2049	xorl	%esi,		%edx
2050	andl	$0xfcfcfcfc,	%eax
2051	andl	$0xcfcfcfcf,	%edx
2052	movb	%al,		%bl
2053	movb	%ah,		%cl
2054	rorl	$4,		%edx
2055	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2056	movb	%dl,		%bl
2057	xorl	%ebp,		%edi
2058	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2059	xorl	%ebp,		%edi
2060	movb	%dh,		%cl
2061	shrl	$16,		%eax
2062	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2063	xorl	%ebp,		%edi
2064	movb	%ah,		%bl
2065	shrl	$16,		%edx
2066	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2067	xorl	%ebp,		%edi
2068	movl	24(%esp),	%ebp
2069	movb	%dh,		%cl
2070	andl	$0xff,		%eax
2071	andl	$0xff,		%edx
2072	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2073	xorl	%ebx,		%edi
2074	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2075	xorl	%ebx,		%edi
2076	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2077	xorl	%ebx,		%edi
2078	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2079	xorl	%ebx,		%edi
2080
2081	/* Round 12 */
2082	movl	96(%ebp),	%eax
2083	xorl	%ebx,		%ebx
2084	movl	100(%ebp),	%edx
2085	xorl	%edi,		%eax
2086	xorl	%edi,		%edx
2087	andl	$0xfcfcfcfc,	%eax
2088	andl	$0xcfcfcfcf,	%edx
2089	movb	%al,		%bl
2090	movb	%ah,		%cl
2091	rorl	$4,		%edx
2092	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2093	movb	%dl,		%bl
2094	xorl	%ebp,		%esi
2095	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2096	xorl	%ebp,		%esi
2097	movb	%dh,		%cl
2098	shrl	$16,		%eax
2099	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2100	xorl	%ebp,		%esi
2101	movb	%ah,		%bl
2102	shrl	$16,		%edx
2103	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2104	xorl	%ebp,		%esi
2105	movl	24(%esp),	%ebp
2106	movb	%dh,		%cl
2107	andl	$0xff,		%eax
2108	andl	$0xff,		%edx
2109	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2110	xorl	%ebx,		%esi
2111	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2112	xorl	%ebx,		%esi
2113	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2114	xorl	%ebx,		%esi
2115	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2116	xorl	%ebx,		%esi
2117
2118	/* Round 11 */
2119	movl	88(%ebp),	%eax
2120	xorl	%ebx,		%ebx
2121	movl	92(%ebp),	%edx
2122	xorl	%esi,		%eax
2123	xorl	%esi,		%edx
2124	andl	$0xfcfcfcfc,	%eax
2125	andl	$0xcfcfcfcf,	%edx
2126	movb	%al,		%bl
2127	movb	%ah,		%cl
2128	rorl	$4,		%edx
2129	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2130	movb	%dl,		%bl
2131	xorl	%ebp,		%edi
2132	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2133	xorl	%ebp,		%edi
2134	movb	%dh,		%cl
2135	shrl	$16,		%eax
2136	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2137	xorl	%ebp,		%edi
2138	movb	%ah,		%bl
2139	shrl	$16,		%edx
2140	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2141	xorl	%ebp,		%edi
2142	movl	24(%esp),	%ebp
2143	movb	%dh,		%cl
2144	andl	$0xff,		%eax
2145	andl	$0xff,		%edx
2146	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2147	xorl	%ebx,		%edi
2148	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2149	xorl	%ebx,		%edi
2150	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2151	xorl	%ebx,		%edi
2152	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2153	xorl	%ebx,		%edi
2154
2155	/* Round 10 */
2156	movl	80(%ebp),	%eax
2157	xorl	%ebx,		%ebx
2158	movl	84(%ebp),	%edx
2159	xorl	%edi,		%eax
2160	xorl	%edi,		%edx
2161	andl	$0xfcfcfcfc,	%eax
2162	andl	$0xcfcfcfcf,	%edx
2163	movb	%al,		%bl
2164	movb	%ah,		%cl
2165	rorl	$4,		%edx
2166	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2167	movb	%dl,		%bl
2168	xorl	%ebp,		%esi
2169	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2170	xorl	%ebp,		%esi
2171	movb	%dh,		%cl
2172	shrl	$16,		%eax
2173	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2174	xorl	%ebp,		%esi
2175	movb	%ah,		%bl
2176	shrl	$16,		%edx
2177	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2178	xorl	%ebp,		%esi
2179	movl	24(%esp),	%ebp
2180	movb	%dh,		%cl
2181	andl	$0xff,		%eax
2182	andl	$0xff,		%edx
2183	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2184	xorl	%ebx,		%esi
2185	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2186	xorl	%ebx,		%esi
2187	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2188	xorl	%ebx,		%esi
2189	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2190	xorl	%ebx,		%esi
2191
2192	/* Round 9 */
2193	movl	72(%ebp),	%eax
2194	xorl	%ebx,		%ebx
2195	movl	76(%ebp),	%edx
2196	xorl	%esi,		%eax
2197	xorl	%esi,		%edx
2198	andl	$0xfcfcfcfc,	%eax
2199	andl	$0xcfcfcfcf,	%edx
2200	movb	%al,		%bl
2201	movb	%ah,		%cl
2202	rorl	$4,		%edx
2203	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2204	movb	%dl,		%bl
2205	xorl	%ebp,		%edi
2206	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2207	xorl	%ebp,		%edi
2208	movb	%dh,		%cl
2209	shrl	$16,		%eax
2210	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2211	xorl	%ebp,		%edi
2212	movb	%ah,		%bl
2213	shrl	$16,		%edx
2214	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2215	xorl	%ebp,		%edi
2216	movl	24(%esp),	%ebp
2217	movb	%dh,		%cl
2218	andl	$0xff,		%eax
2219	andl	$0xff,		%edx
2220	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2221	xorl	%ebx,		%edi
2222	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2223	xorl	%ebx,		%edi
2224	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2225	xorl	%ebx,		%edi
2226	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2227	xorl	%ebx,		%edi
2228
2229	/* Round 8 */
2230	movl	64(%ebp),	%eax
2231	xorl	%ebx,		%ebx
2232	movl	68(%ebp),	%edx
2233	xorl	%edi,		%eax
2234	xorl	%edi,		%edx
2235	andl	$0xfcfcfcfc,	%eax
2236	andl	$0xcfcfcfcf,	%edx
2237	movb	%al,		%bl
2238	movb	%ah,		%cl
2239	rorl	$4,		%edx
2240	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2241	movb	%dl,		%bl
2242	xorl	%ebp,		%esi
2243	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2244	xorl	%ebp,		%esi
2245	movb	%dh,		%cl
2246	shrl	$16,		%eax
2247	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2248	xorl	%ebp,		%esi
2249	movb	%ah,		%bl
2250	shrl	$16,		%edx
2251	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2252	xorl	%ebp,		%esi
2253	movl	24(%esp),	%ebp
2254	movb	%dh,		%cl
2255	andl	$0xff,		%eax
2256	andl	$0xff,		%edx
2257	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2258	xorl	%ebx,		%esi
2259	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2260	xorl	%ebx,		%esi
2261	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2262	xorl	%ebx,		%esi
2263	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2264	xorl	%ebx,		%esi
2265
2266	/* Round 7 */
2267	movl	56(%ebp),	%eax
2268	xorl	%ebx,		%ebx
2269	movl	60(%ebp),	%edx
2270	xorl	%esi,		%eax
2271	xorl	%esi,		%edx
2272	andl	$0xfcfcfcfc,	%eax
2273	andl	$0xcfcfcfcf,	%edx
2274	movb	%al,		%bl
2275	movb	%ah,		%cl
2276	rorl	$4,		%edx
2277	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2278	movb	%dl,		%bl
2279	xorl	%ebp,		%edi
2280	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2281	xorl	%ebp,		%edi
2282	movb	%dh,		%cl
2283	shrl	$16,		%eax
2284	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2285	xorl	%ebp,		%edi
2286	movb	%ah,		%bl
2287	shrl	$16,		%edx
2288	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2289	xorl	%ebp,		%edi
2290	movl	24(%esp),	%ebp
2291	movb	%dh,		%cl
2292	andl	$0xff,		%eax
2293	andl	$0xff,		%edx
2294	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2295	xorl	%ebx,		%edi
2296	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2297	xorl	%ebx,		%edi
2298	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2299	xorl	%ebx,		%edi
2300	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2301	xorl	%ebx,		%edi
2302
2303	/* Round 6 */
2304	movl	48(%ebp),	%eax
2305	xorl	%ebx,		%ebx
2306	movl	52(%ebp),	%edx
2307	xorl	%edi,		%eax
2308	xorl	%edi,		%edx
2309	andl	$0xfcfcfcfc,	%eax
2310	andl	$0xcfcfcfcf,	%edx
2311	movb	%al,		%bl
2312	movb	%ah,		%cl
2313	rorl	$4,		%edx
2314	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2315	movb	%dl,		%bl
2316	xorl	%ebp,		%esi
2317	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2318	xorl	%ebp,		%esi
2319	movb	%dh,		%cl
2320	shrl	$16,		%eax
2321	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2322	xorl	%ebp,		%esi
2323	movb	%ah,		%bl
2324	shrl	$16,		%edx
2325	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2326	xorl	%ebp,		%esi
2327	movl	24(%esp),	%ebp
2328	movb	%dh,		%cl
2329	andl	$0xff,		%eax
2330	andl	$0xff,		%edx
2331	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2332	xorl	%ebx,		%esi
2333	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2334	xorl	%ebx,		%esi
2335	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2336	xorl	%ebx,		%esi
2337	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2338	xorl	%ebx,		%esi
2339
2340	/* Round 5 */
2341	movl	40(%ebp),	%eax
2342	xorl	%ebx,		%ebx
2343	movl	44(%ebp),	%edx
2344	xorl	%esi,		%eax
2345	xorl	%esi,		%edx
2346	andl	$0xfcfcfcfc,	%eax
2347	andl	$0xcfcfcfcf,	%edx
2348	movb	%al,		%bl
2349	movb	%ah,		%cl
2350	rorl	$4,		%edx
2351	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2352	movb	%dl,		%bl
2353	xorl	%ebp,		%edi
2354	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2355	xorl	%ebp,		%edi
2356	movb	%dh,		%cl
2357	shrl	$16,		%eax
2358	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2359	xorl	%ebp,		%edi
2360	movb	%ah,		%bl
2361	shrl	$16,		%edx
2362	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2363	xorl	%ebp,		%edi
2364	movl	24(%esp),	%ebp
2365	movb	%dh,		%cl
2366	andl	$0xff,		%eax
2367	andl	$0xff,		%edx
2368	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2369	xorl	%ebx,		%edi
2370	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2371	xorl	%ebx,		%edi
2372	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2373	xorl	%ebx,		%edi
2374	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2375	xorl	%ebx,		%edi
2376
2377	/* Round 4 */
2378	movl	32(%ebp),	%eax
2379	xorl	%ebx,		%ebx
2380	movl	36(%ebp),	%edx
2381	xorl	%edi,		%eax
2382	xorl	%edi,		%edx
2383	andl	$0xfcfcfcfc,	%eax
2384	andl	$0xcfcfcfcf,	%edx
2385	movb	%al,		%bl
2386	movb	%ah,		%cl
2387	rorl	$4,		%edx
2388	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2389	movb	%dl,		%bl
2390	xorl	%ebp,		%esi
2391	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2392	xorl	%ebp,		%esi
2393	movb	%dh,		%cl
2394	shrl	$16,		%eax
2395	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2396	xorl	%ebp,		%esi
2397	movb	%ah,		%bl
2398	shrl	$16,		%edx
2399	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2400	xorl	%ebp,		%esi
2401	movl	24(%esp),	%ebp
2402	movb	%dh,		%cl
2403	andl	$0xff,		%eax
2404	andl	$0xff,		%edx
2405	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2406	xorl	%ebx,		%esi
2407	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2408	xorl	%ebx,		%esi
2409	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2410	xorl	%ebx,		%esi
2411	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2412	xorl	%ebx,		%esi
2413
2414	/* Round 3 */
2415	movl	24(%ebp),	%eax
2416	xorl	%ebx,		%ebx
2417	movl	28(%ebp),	%edx
2418	xorl	%esi,		%eax
2419	xorl	%esi,		%edx
2420	andl	$0xfcfcfcfc,	%eax
2421	andl	$0xcfcfcfcf,	%edx
2422	movb	%al,		%bl
2423	movb	%ah,		%cl
2424	rorl	$4,		%edx
2425	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2426	movb	%dl,		%bl
2427	xorl	%ebp,		%edi
2428	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2429	xorl	%ebp,		%edi
2430	movb	%dh,		%cl
2431	shrl	$16,		%eax
2432	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2433	xorl	%ebp,		%edi
2434	movb	%ah,		%bl
2435	shrl	$16,		%edx
2436	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2437	xorl	%ebp,		%edi
2438	movl	24(%esp),	%ebp
2439	movb	%dh,		%cl
2440	andl	$0xff,		%eax
2441	andl	$0xff,		%edx
2442	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2443	xorl	%ebx,		%edi
2444	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2445	xorl	%ebx,		%edi
2446	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2447	xorl	%ebx,		%edi
2448	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2449	xorl	%ebx,		%edi
2450
2451	/* Round 2 */
2452	movl	16(%ebp),	%eax
2453	xorl	%ebx,		%ebx
2454	movl	20(%ebp),	%edx
2455	xorl	%edi,		%eax
2456	xorl	%edi,		%edx
2457	andl	$0xfcfcfcfc,	%eax
2458	andl	$0xcfcfcfcf,	%edx
2459	movb	%al,		%bl
2460	movb	%ah,		%cl
2461	rorl	$4,		%edx
2462	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2463	movb	%dl,		%bl
2464	xorl	%ebp,		%esi
2465	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2466	xorl	%ebp,		%esi
2467	movb	%dh,		%cl
2468	shrl	$16,		%eax
2469	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2470	xorl	%ebp,		%esi
2471	movb	%ah,		%bl
2472	shrl	$16,		%edx
2473	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2474	xorl	%ebp,		%esi
2475	movl	24(%esp),	%ebp
2476	movb	%dh,		%cl
2477	andl	$0xff,		%eax
2478	andl	$0xff,		%edx
2479	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2480	xorl	%ebx,		%esi
2481	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2482	xorl	%ebx,		%esi
2483	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2484	xorl	%ebx,		%esi
2485	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2486	xorl	%ebx,		%esi
2487
2488	/* Round 1 */
2489	movl	8(%ebp),	%eax
2490	xorl	%ebx,		%ebx
2491	movl	12(%ebp),	%edx
2492	xorl	%esi,		%eax
2493	xorl	%esi,		%edx
2494	andl	$0xfcfcfcfc,	%eax
2495	andl	$0xcfcfcfcf,	%edx
2496	movb	%al,		%bl
2497	movb	%ah,		%cl
2498	rorl	$4,		%edx
2499	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2500	movb	%dl,		%bl
2501	xorl	%ebp,		%edi
2502	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2503	xorl	%ebp,		%edi
2504	movb	%dh,		%cl
2505	shrl	$16,		%eax
2506	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2507	xorl	%ebp,		%edi
2508	movb	%ah,		%bl
2509	shrl	$16,		%edx
2510	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2511	xorl	%ebp,		%edi
2512	movl	24(%esp),	%ebp
2513	movb	%dh,		%cl
2514	andl	$0xff,		%eax
2515	andl	$0xff,		%edx
2516	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2517	xorl	%ebx,		%edi
2518	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2519	xorl	%ebx,		%edi
2520	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2521	xorl	%ebx,		%edi
2522	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2523	xorl	%ebx,		%edi
2524
2525	/* Round 0 */
2526	movl	(%ebp),		%eax
2527	xorl	%ebx,		%ebx
2528	movl	4(%ebp),	%edx
2529	xorl	%edi,		%eax
2530	xorl	%edi,		%edx
2531	andl	$0xfcfcfcfc,	%eax
2532	andl	$0xcfcfcfcf,	%edx
2533	movb	%al,		%bl
2534	movb	%ah,		%cl
2535	rorl	$4,		%edx
2536	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
2537	movb	%dl,		%bl
2538	xorl	%ebp,		%esi
2539	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
2540	xorl	%ebp,		%esi
2541	movb	%dh,		%cl
2542	shrl	$16,		%eax
2543	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
2544	xorl	%ebp,		%esi
2545	movb	%ah,		%bl
2546	shrl	$16,		%edx
2547	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
2548	xorl	%ebp,		%esi
2549	movl	24(%esp),	%ebp
2550	movb	%dh,		%cl
2551	andl	$0xff,		%eax
2552	andl	$0xff,		%edx
2553	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
2554	xorl	%ebx,		%esi
2555	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
2556	xorl	%ebx,		%esi
2557	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
2558	xorl	%ebx,		%esi
2559	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
2560	xorl	%ebx,		%esi
2561.L003end:
2562
2563	/* Fixup */
2564	rorl	$3,		%edi
2565	movl	20(%esp),	%eax
2566	rorl	$3,		%esi
2567	movl	%edi,		(%eax)
2568	movl	%esi,		4(%eax)
2569	popl	%ebp
2570	popl	%ebx
2571	popl	%edi
2572	popl	%esi
2573	ret
2574END(des_encrypt2)
2575
2576ENTRY(des_encrypt3)
2577	pushl   %ebx
2578	movl    8(%esp),        %ebx
2579	pushl   %ebp
2580	pushl   %esi
2581	pushl   %edi
2582
2583	/* Load the data words */
2584	movl    (%ebx),         %edi
2585	movl    4(%ebx),        %esi
2586	subl    $12,            %esp
2587
2588	/* IP */
2589	roll    $4,             %edi
2590	movl    %edi,           %edx
2591	xorl    %esi,           %edi
2592	andl    $0xf0f0f0f0,    %edi
2593	xorl    %edi,           %edx
2594	xorl    %edi,           %esi
2595
2596	roll    $20,            %esi
2597	movl    %esi,           %edi
2598	xorl    %edx,           %esi
2599	andl    $0xfff0000f,    %esi
2600	xorl    %esi,           %edi
2601	xorl    %esi,           %edx
2602
2603	roll    $14,            %edi
2604	movl    %edi,           %esi
2605	xorl    %edx,           %edi
2606	andl    $0x33333333,    %edi
2607	xorl    %edi,           %esi
2608	xorl    %edi,           %edx
2609
2610	roll    $22,            %edx
2611	movl    %edx,           %edi
2612	xorl    %esi,           %edx
2613	andl    $0x03fc03fc,    %edx
2614	xorl    %edx,           %edi
2615	xorl    %edx,           %esi
2616
2617	roll    $9,             %edi
2618	movl    %edi,           %edx
2619	xorl    %esi,           %edi
2620	andl    $0xaaaaaaaa,    %edi
2621	xorl    %edi,           %edx
2622	xorl    %edi,           %esi
2623
2624	rorl    $3,             %edx
2625	rorl    $2,             %esi
2626	movl    %esi,           4(%ebx)
2627	movl    36(%esp),       %eax
2628	movl    %edx,           (%ebx)
2629	movl    40(%esp),       %edi
2630	movl    44(%esp),       %esi
2631	movl    $1,             8(%esp)
2632	movl    %eax,           4(%esp)
2633	movl    %ebx,           (%esp)
2634	call    _C_LABEL(des_encrypt2)
2635	movl    $0,             8(%esp)
2636	movl    %edi,           4(%esp)
2637	movl    %ebx,           (%esp)
2638	call    _C_LABEL(des_encrypt2)
2639	movl    $1,             8(%esp)
2640	movl    %esi,           4(%esp)
2641	movl    %ebx,           (%esp)
2642	call    _C_LABEL(des_encrypt2)
2643	addl    $12,            %esp
2644	movl    (%ebx),         %edi
2645	movl    4(%ebx),        %esi
2646
2647	/* FP */
2648	roll    $2,             %esi
2649	roll    $3,             %edi
2650	movl    %edi,           %eax
2651	xorl    %esi,           %edi
2652	andl    $0xaaaaaaaa,    %edi
2653	xorl    %edi,           %eax
2654	xorl    %edi,           %esi
2655
2656	roll    $23,            %eax
2657	movl    %eax,           %edi
2658	xorl    %esi,           %eax
2659	andl    $0x03fc03fc,    %eax
2660	xorl    %eax,           %edi
2661	xorl    %eax,           %esi
2662
2663	roll    $10,            %edi
2664	movl    %edi,           %eax
2665	xorl    %esi,           %edi
2666	andl    $0x33333333,    %edi
2667	xorl    %edi,           %eax
2668	xorl    %edi,           %esi
2669
2670	roll    $18,            %esi
2671	movl    %esi,           %edi
2672	xorl    %eax,           %esi
2673	andl    $0xfff0000f,    %esi
2674	xorl    %esi,           %edi
2675	xorl    %esi,           %eax
2676
2677	roll    $12,            %edi
2678	movl    %edi,           %esi
2679	xorl    %eax,           %edi
2680	andl    $0xf0f0f0f0,    %edi
2681	xorl    %edi,           %esi
2682	xorl    %edi,           %eax
2683
2684	rorl    $4,             %eax
2685	movl    %eax,           (%ebx)
2686	movl    %esi,           4(%ebx)
2687	popl    %edi
2688	popl    %esi
2689	popl    %ebp
2690	popl    %ebx
2691	ret
2692END(des_encrypt3)
2693
2694ENTRY(des_decrypt3)
2695	pushl   %ebx
2696	movl    8(%esp),        %ebx
2697	pushl   %ebp
2698	pushl   %esi
2699	pushl   %edi
2700
2701	/* Load the data words */
2702	movl    (%ebx),         %edi
2703	movl    4(%ebx),        %esi
2704	subl    $12,            %esp
2705
2706	/* IP */
2707	roll    $4,             %edi
2708	movl    %edi,           %edx
2709	xorl    %esi,           %edi
2710	andl    $0xf0f0f0f0,    %edi
2711	xorl    %edi,           %edx
2712	xorl    %edi,           %esi
2713
2714	roll    $20,            %esi
2715	movl    %esi,           %edi
2716	xorl    %edx,           %esi
2717	andl    $0xfff0000f,    %esi
2718	xorl    %esi,           %edi
2719	xorl    %esi,           %edx
2720
2721	roll    $14,            %edi
2722	movl    %edi,           %esi
2723	xorl    %edx,           %edi
2724	andl    $0x33333333,    %edi
2725	xorl    %edi,           %esi
2726	xorl    %edi,           %edx
2727
2728	roll    $22,            %edx
2729	movl    %edx,           %edi
2730	xorl    %esi,           %edx
2731	andl    $0x03fc03fc,    %edx
2732	xorl    %edx,           %edi
2733	xorl    %edx,           %esi
2734
2735	roll    $9,             %edi
2736	movl    %edi,           %edx
2737	xorl    %esi,           %edi
2738	andl    $0xaaaaaaaa,    %edi
2739	xorl    %edi,           %edx
2740	xorl    %edi,           %esi
2741
2742	rorl    $3,             %edx
2743	rorl    $2,             %esi
2744	movl    %esi,           4(%ebx)
2745	movl    36(%esp),       %esi
2746	movl    %edx,           (%ebx)
2747	movl    40(%esp),       %edi
2748	movl    44(%esp),       %eax
2749	movl    $0,             8(%esp)
2750	movl    %eax,           4(%esp)
2751	movl    %ebx,           (%esp)
2752	call    _C_LABEL(des_encrypt2)
2753	movl    $1,             8(%esp)
2754	movl    %edi,           4(%esp)
2755	movl    %ebx,           (%esp)
2756	call    _C_LABEL(des_encrypt2)
2757	movl    $0,             8(%esp)
2758	movl    %esi,           4(%esp)
2759	movl    %ebx,           (%esp)
2760	call    _C_LABEL(des_encrypt2)
2761	addl    $12,            %esp
2762	movl    (%ebx),         %edi
2763	movl    4(%ebx),        %esi
2764
2765	/* FP */
2766	roll    $2,             %esi
2767	roll    $3,             %edi
2768	movl    %edi,           %eax
2769	xorl    %esi,           %edi
2770	andl    $0xaaaaaaaa,    %edi
2771	xorl    %edi,           %eax
2772	xorl    %edi,           %esi
2773
2774	roll    $23,            %eax
2775	movl    %eax,           %edi
2776	xorl    %esi,           %eax
2777	andl    $0x03fc03fc,    %eax
2778	xorl    %eax,           %edi
2779	xorl    %eax,           %esi
2780
2781	roll    $10,            %edi
2782	movl    %edi,           %eax
2783	xorl    %esi,           %edi
2784	andl    $0x33333333,    %edi
2785	xorl    %edi,           %eax
2786	xorl    %edi,           %esi
2787
2788	roll    $18,            %esi
2789	movl    %esi,           %edi
2790	xorl    %eax,           %esi
2791	andl    $0xfff0000f,    %esi
2792	xorl    %esi,           %edi
2793	xorl    %esi,           %eax
2794
2795	roll    $12,            %edi
2796	movl    %edi,           %esi
2797	xorl    %eax,           %edi
2798	andl    $0xf0f0f0f0,    %edi
2799	xorl    %edi,           %esi
2800	xorl    %edi,           %eax
2801
2802        rorl    $4,             %eax
2803	movl    %eax,           (%ebx)
2804	movl    %esi,           4(%ebx)
2805	popl    %edi
2806	popl    %esi
2807	popl    %ebp
2808	popl    %ebx
2809	ret
2810END(des_decrypt3)
2811