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