xref: /netbsd/sys/crypto/des/arch/i386/des_enc.S (revision bf9ec67e)
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
67ENTRY(des_encrypt1)
68	pushl	%esi
69	pushl	%edi
70
71	# Load the 2 words
72	movl	12(%esp),	%esi
73	xorl	%ecx,		%ecx
74	pushl	%ebx
75	pushl	%ebp
76	movl	(%esi),		%eax
77	movl	28(%esp),	%ebx
78	movl	4(%esi),	%edi
79
80	# IP
81	roll	$4,		%eax
82	movl	%eax,		%esi
83	xorl	%edi,		%eax
84	andl	$0xf0f0f0f0,	%eax
85	xorl	%eax,		%esi
86	xorl	%eax,		%edi
87
88	roll	$20,		%edi
89	movl	%edi,		%eax
90	xorl	%esi,		%edi
91	andl	$0xfff0000f,	%edi
92	xorl	%edi,		%eax
93	xorl	%edi,		%esi
94
95	roll	$14,		%eax
96	movl	%eax,		%edi
97	xorl	%esi,		%eax
98	andl	$0x33333333,	%eax
99	xorl	%eax,		%edi
100	xorl	%eax,		%esi
101
102	roll	$22,		%esi
103	movl	%esi,		%eax
104	xorl	%edi,		%esi
105	andl	$0x03fc03fc,	%esi
106	xorl	%esi,		%eax
107	xorl	%esi,		%edi
108
109	roll	$9,		%eax
110	movl	%eax,		%esi
111	xorl	%edi,		%eax
112	andl	$0xaaaaaaaa,	%eax
113	xorl	%eax,		%esi
114	xorl	%eax,		%edi
115
116.byte 209
117.byte 199		# roll $1 %edi
118	movl	24(%esp),	%ebp
119	cmpl	$0,		%ebx
120	je	.L000start_decrypt
121
122	# Round 0
123	movl	(%ebp),		%eax
124	xorl	%ebx,		%ebx
125	movl	4(%ebp),	%edx
126	xorl	%esi,		%eax
127	xorl	%esi,		%edx
128	andl	$0xfcfcfcfc,	%eax
129	andl	$0xcfcfcfcf,	%edx
130	movb	%al,		%bl
131	movb	%ah,		%cl
132	rorl	$4,		%edx
133	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
134	movb	%dl,		%bl
135	xorl	%ebp,		%edi
136	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
137	xorl	%ebp,		%edi
138	movb	%dh,		%cl
139	shrl	$16,		%eax
140	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
141	xorl	%ebp,		%edi
142	movb	%ah,		%bl
143	shrl	$16,		%edx
144	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
145	xorl	%ebp,		%edi
146	movl	24(%esp),	%ebp
147	movb	%dh,		%cl
148	andl	$0xff,		%eax
149	andl	$0xff,		%edx
150	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
151	xorl	%ebx,		%edi
152	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
153	xorl	%ebx,		%edi
154	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
155	xorl	%ebx,		%edi
156	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
157	xorl	%ebx,		%edi
158
159	# Round 1
160	movl	8(%ebp),	%eax
161	xorl	%ebx,		%ebx
162	movl	12(%ebp),	%edx
163	xorl	%edi,		%eax
164	xorl	%edi,		%edx
165	andl	$0xfcfcfcfc,	%eax
166	andl	$0xcfcfcfcf,	%edx
167	movb	%al,		%bl
168	movb	%ah,		%cl
169	rorl	$4,		%edx
170	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
171	movb	%dl,		%bl
172	xorl	%ebp,		%esi
173	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
174	xorl	%ebp,		%esi
175	movb	%dh,		%cl
176	shrl	$16,		%eax
177	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
178	xorl	%ebp,		%esi
179	movb	%ah,		%bl
180	shrl	$16,		%edx
181	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
182	xorl	%ebp,		%esi
183	movl	24(%esp),	%ebp
184	movb	%dh,		%cl
185	andl	$0xff,		%eax
186	andl	$0xff,		%edx
187	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
188	xorl	%ebx,		%esi
189	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
190	xorl	%ebx,		%esi
191	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
192	xorl	%ebx,		%esi
193	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
194	xorl	%ebx,		%esi
195
196	# Round 2
197	movl	16(%ebp),	%eax
198	xorl	%ebx,		%ebx
199	movl	20(%ebp),	%edx
200	xorl	%esi,		%eax
201	xorl	%esi,		%edx
202	andl	$0xfcfcfcfc,	%eax
203	andl	$0xcfcfcfcf,	%edx
204	movb	%al,		%bl
205	movb	%ah,		%cl
206	rorl	$4,		%edx
207	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
208	movb	%dl,		%bl
209	xorl	%ebp,		%edi
210	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
211	xorl	%ebp,		%edi
212	movb	%dh,		%cl
213	shrl	$16,		%eax
214	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
215	xorl	%ebp,		%edi
216	movb	%ah,		%bl
217	shrl	$16,		%edx
218	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
219	xorl	%ebp,		%edi
220	movl	24(%esp),	%ebp
221	movb	%dh,		%cl
222	andl	$0xff,		%eax
223	andl	$0xff,		%edx
224	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
225	xorl	%ebx,		%edi
226	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
227	xorl	%ebx,		%edi
228	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
229	xorl	%ebx,		%edi
230	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
231	xorl	%ebx,		%edi
232
233	# Round 3
234	movl	24(%ebp),	%eax
235	xorl	%ebx,		%ebx
236	movl	28(%ebp),	%edx
237	xorl	%edi,		%eax
238	xorl	%edi,		%edx
239	andl	$0xfcfcfcfc,	%eax
240	andl	$0xcfcfcfcf,	%edx
241	movb	%al,		%bl
242	movb	%ah,		%cl
243	rorl	$4,		%edx
244	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
245	movb	%dl,		%bl
246	xorl	%ebp,		%esi
247	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
248	xorl	%ebp,		%esi
249	movb	%dh,		%cl
250	shrl	$16,		%eax
251	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
252	xorl	%ebp,		%esi
253	movb	%ah,		%bl
254	shrl	$16,		%edx
255	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
256	xorl	%ebp,		%esi
257	movl	24(%esp),	%ebp
258	movb	%dh,		%cl
259	andl	$0xff,		%eax
260	andl	$0xff,		%edx
261	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
262	xorl	%ebx,		%esi
263	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
264	xorl	%ebx,		%esi
265	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
266	xorl	%ebx,		%esi
267	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
268	xorl	%ebx,		%esi
269
270	# Round 4
271	movl	32(%ebp),	%eax
272	xorl	%ebx,		%ebx
273	movl	36(%ebp),	%edx
274	xorl	%esi,		%eax
275	xorl	%esi,		%edx
276	andl	$0xfcfcfcfc,	%eax
277	andl	$0xcfcfcfcf,	%edx
278	movb	%al,		%bl
279	movb	%ah,		%cl
280	rorl	$4,		%edx
281	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
282	movb	%dl,		%bl
283	xorl	%ebp,		%edi
284	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
285	xorl	%ebp,		%edi
286	movb	%dh,		%cl
287	shrl	$16,		%eax
288	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
289	xorl	%ebp,		%edi
290	movb	%ah,		%bl
291	shrl	$16,		%edx
292	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
293	xorl	%ebp,		%edi
294	movl	24(%esp),	%ebp
295	movb	%dh,		%cl
296	andl	$0xff,		%eax
297	andl	$0xff,		%edx
298	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
299	xorl	%ebx,		%edi
300	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
301	xorl	%ebx,		%edi
302	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
303	xorl	%ebx,		%edi
304	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
305	xorl	%ebx,		%edi
306
307	# Round 5
308	movl	40(%ebp),	%eax
309	xorl	%ebx,		%ebx
310	movl	44(%ebp),	%edx
311	xorl	%edi,		%eax
312	xorl	%edi,		%edx
313	andl	$0xfcfcfcfc,	%eax
314	andl	$0xcfcfcfcf,	%edx
315	movb	%al,		%bl
316	movb	%ah,		%cl
317	rorl	$4,		%edx
318	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
319	movb	%dl,		%bl
320	xorl	%ebp,		%esi
321	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
322	xorl	%ebp,		%esi
323	movb	%dh,		%cl
324	shrl	$16,		%eax
325	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
326	xorl	%ebp,		%esi
327	movb	%ah,		%bl
328	shrl	$16,		%edx
329	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
330	xorl	%ebp,		%esi
331	movl	24(%esp),	%ebp
332	movb	%dh,		%cl
333	andl	$0xff,		%eax
334	andl	$0xff,		%edx
335	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
336	xorl	%ebx,		%esi
337	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
338	xorl	%ebx,		%esi
339	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
340	xorl	%ebx,		%esi
341	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
342	xorl	%ebx,		%esi
343
344	# Round 6
345	movl	48(%ebp),	%eax
346	xorl	%ebx,		%ebx
347	movl	52(%ebp),	%edx
348	xorl	%esi,		%eax
349	xorl	%esi,		%edx
350	andl	$0xfcfcfcfc,	%eax
351	andl	$0xcfcfcfcf,	%edx
352	movb	%al,		%bl
353	movb	%ah,		%cl
354	rorl	$4,		%edx
355	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
356	movb	%dl,		%bl
357	xorl	%ebp,		%edi
358	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
359	xorl	%ebp,		%edi
360	movb	%dh,		%cl
361	shrl	$16,		%eax
362	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
363	xorl	%ebp,		%edi
364	movb	%ah,		%bl
365	shrl	$16,		%edx
366	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
367	xorl	%ebp,		%edi
368	movl	24(%esp),	%ebp
369	movb	%dh,		%cl
370	andl	$0xff,		%eax
371	andl	$0xff,		%edx
372	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
373	xorl	%ebx,		%edi
374	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
375	xorl	%ebx,		%edi
376	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
377	xorl	%ebx,		%edi
378	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
379	xorl	%ebx,		%edi
380
381	# Round 7
382	movl	56(%ebp),	%eax
383	xorl	%ebx,		%ebx
384	movl	60(%ebp),	%edx
385	xorl	%edi,		%eax
386	xorl	%edi,		%edx
387	andl	$0xfcfcfcfc,	%eax
388	andl	$0xcfcfcfcf,	%edx
389	movb	%al,		%bl
390	movb	%ah,		%cl
391	rorl	$4,		%edx
392	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
393	movb	%dl,		%bl
394	xorl	%ebp,		%esi
395	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
396	xorl	%ebp,		%esi
397	movb	%dh,		%cl
398	shrl	$16,		%eax
399	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
400	xorl	%ebp,		%esi
401	movb	%ah,		%bl
402	shrl	$16,		%edx
403	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
404	xorl	%ebp,		%esi
405	movl	24(%esp),	%ebp
406	movb	%dh,		%cl
407	andl	$0xff,		%eax
408	andl	$0xff,		%edx
409	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
410	xorl	%ebx,		%esi
411	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
412	xorl	%ebx,		%esi
413	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
414	xorl	%ebx,		%esi
415	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
416	xorl	%ebx,		%esi
417
418	# Round 8
419	movl	64(%ebp),	%eax
420	xorl	%ebx,		%ebx
421	movl	68(%ebp),	%edx
422	xorl	%esi,		%eax
423	xorl	%esi,		%edx
424	andl	$0xfcfcfcfc,	%eax
425	andl	$0xcfcfcfcf,	%edx
426	movb	%al,		%bl
427	movb	%ah,		%cl
428	rorl	$4,		%edx
429	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
430	movb	%dl,		%bl
431	xorl	%ebp,		%edi
432	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
433	xorl	%ebp,		%edi
434	movb	%dh,		%cl
435	shrl	$16,		%eax
436	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
437	xorl	%ebp,		%edi
438	movb	%ah,		%bl
439	shrl	$16,		%edx
440	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
441	xorl	%ebp,		%edi
442	movl	24(%esp),	%ebp
443	movb	%dh,		%cl
444	andl	$0xff,		%eax
445	andl	$0xff,		%edx
446	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
447	xorl	%ebx,		%edi
448	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
449	xorl	%ebx,		%edi
450	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
451	xorl	%ebx,		%edi
452	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
453	xorl	%ebx,		%edi
454
455	# Round 9
456	movl	72(%ebp),	%eax
457	xorl	%ebx,		%ebx
458	movl	76(%ebp),	%edx
459	xorl	%edi,		%eax
460	xorl	%edi,		%edx
461	andl	$0xfcfcfcfc,	%eax
462	andl	$0xcfcfcfcf,	%edx
463	movb	%al,		%bl
464	movb	%ah,		%cl
465	rorl	$4,		%edx
466	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
467	movb	%dl,		%bl
468	xorl	%ebp,		%esi
469	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
470	xorl	%ebp,		%esi
471	movb	%dh,		%cl
472	shrl	$16,		%eax
473	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
474	xorl	%ebp,		%esi
475	movb	%ah,		%bl
476	shrl	$16,		%edx
477	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
478	xorl	%ebp,		%esi
479	movl	24(%esp),	%ebp
480	movb	%dh,		%cl
481	andl	$0xff,		%eax
482	andl	$0xff,		%edx
483	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
484	xorl	%ebx,		%esi
485	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
486	xorl	%ebx,		%esi
487	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
488	xorl	%ebx,		%esi
489	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
490	xorl	%ebx,		%esi
491
492	# Round 10
493	movl	80(%ebp),	%eax
494	xorl	%ebx,		%ebx
495	movl	84(%ebp),	%edx
496	xorl	%esi,		%eax
497	xorl	%esi,		%edx
498	andl	$0xfcfcfcfc,	%eax
499	andl	$0xcfcfcfcf,	%edx
500	movb	%al,		%bl
501	movb	%ah,		%cl
502	rorl	$4,		%edx
503	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
504	movb	%dl,		%bl
505	xorl	%ebp,		%edi
506	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
507	xorl	%ebp,		%edi
508	movb	%dh,		%cl
509	shrl	$16,		%eax
510	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
511	xorl	%ebp,		%edi
512	movb	%ah,		%bl
513	shrl	$16,		%edx
514	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
515	xorl	%ebp,		%edi
516	movl	24(%esp),	%ebp
517	movb	%dh,		%cl
518	andl	$0xff,		%eax
519	andl	$0xff,		%edx
520	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
521	xorl	%ebx,		%edi
522	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
523	xorl	%ebx,		%edi
524	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
525	xorl	%ebx,		%edi
526	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
527	xorl	%ebx,		%edi
528
529	# Round 11
530	movl	88(%ebp),	%eax
531	xorl	%ebx,		%ebx
532	movl	92(%ebp),	%edx
533	xorl	%edi,		%eax
534	xorl	%edi,		%edx
535	andl	$0xfcfcfcfc,	%eax
536	andl	$0xcfcfcfcf,	%edx
537	movb	%al,		%bl
538	movb	%ah,		%cl
539	rorl	$4,		%edx
540	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
541	movb	%dl,		%bl
542	xorl	%ebp,		%esi
543	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
544	xorl	%ebp,		%esi
545	movb	%dh,		%cl
546	shrl	$16,		%eax
547	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
548	xorl	%ebp,		%esi
549	movb	%ah,		%bl
550	shrl	$16,		%edx
551	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
552	xorl	%ebp,		%esi
553	movl	24(%esp),	%ebp
554	movb	%dh,		%cl
555	andl	$0xff,		%eax
556	andl	$0xff,		%edx
557	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
558	xorl	%ebx,		%esi
559	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
560	xorl	%ebx,		%esi
561	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
562	xorl	%ebx,		%esi
563	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
564	xorl	%ebx,		%esi
565
566	# Round 12
567	movl	96(%ebp),	%eax
568	xorl	%ebx,		%ebx
569	movl	100(%ebp),	%edx
570	xorl	%esi,		%eax
571	xorl	%esi,		%edx
572	andl	$0xfcfcfcfc,	%eax
573	andl	$0xcfcfcfcf,	%edx
574	movb	%al,		%bl
575	movb	%ah,		%cl
576	rorl	$4,		%edx
577	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
578	movb	%dl,		%bl
579	xorl	%ebp,		%edi
580	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
581	xorl	%ebp,		%edi
582	movb	%dh,		%cl
583	shrl	$16,		%eax
584	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
585	xorl	%ebp,		%edi
586	movb	%ah,		%bl
587	shrl	$16,		%edx
588	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
589	xorl	%ebp,		%edi
590	movl	24(%esp),	%ebp
591	movb	%dh,		%cl
592	andl	$0xff,		%eax
593	andl	$0xff,		%edx
594	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
595	xorl	%ebx,		%edi
596	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
597	xorl	%ebx,		%edi
598	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
599	xorl	%ebx,		%edi
600	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
601	xorl	%ebx,		%edi
602
603	# Round 13
604	movl	104(%ebp),	%eax
605	xorl	%ebx,		%ebx
606	movl	108(%ebp),	%edx
607	xorl	%edi,		%eax
608	xorl	%edi,		%edx
609	andl	$0xfcfcfcfc,	%eax
610	andl	$0xcfcfcfcf,	%edx
611	movb	%al,		%bl
612	movb	%ah,		%cl
613	rorl	$4,		%edx
614	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
615	movb	%dl,		%bl
616	xorl	%ebp,		%esi
617	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
618	xorl	%ebp,		%esi
619	movb	%dh,		%cl
620	shrl	$16,		%eax
621	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
622	xorl	%ebp,		%esi
623	movb	%ah,		%bl
624	shrl	$16,		%edx
625	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
626	xorl	%ebp,		%esi
627	movl	24(%esp),	%ebp
628	movb	%dh,		%cl
629	andl	$0xff,		%eax
630	andl	$0xff,		%edx
631	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
632	xorl	%ebx,		%esi
633	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
634	xorl	%ebx,		%esi
635	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
636	xorl	%ebx,		%esi
637	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
638	xorl	%ebx,		%esi
639
640	# Round 14
641	movl	112(%ebp),	%eax
642	xorl	%ebx,		%ebx
643	movl	116(%ebp),	%edx
644	xorl	%esi,		%eax
645	xorl	%esi,		%edx
646	andl	$0xfcfcfcfc,	%eax
647	andl	$0xcfcfcfcf,	%edx
648	movb	%al,		%bl
649	movb	%ah,		%cl
650	rorl	$4,		%edx
651	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
652	movb	%dl,		%bl
653	xorl	%ebp,		%edi
654	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
655	xorl	%ebp,		%edi
656	movb	%dh,		%cl
657	shrl	$16,		%eax
658	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
659	xorl	%ebp,		%edi
660	movb	%ah,		%bl
661	shrl	$16,		%edx
662	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
663	xorl	%ebp,		%edi
664	movl	24(%esp),	%ebp
665	movb	%dh,		%cl
666	andl	$0xff,		%eax
667	andl	$0xff,		%edx
668	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
669	xorl	%ebx,		%edi
670	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
671	xorl	%ebx,		%edi
672	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
673	xorl	%ebx,		%edi
674	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
675	xorl	%ebx,		%edi
676
677	# Round 15
678	movl	120(%ebp),	%eax
679	xorl	%ebx,		%ebx
680	movl	124(%ebp),	%edx
681	xorl	%edi,		%eax
682	xorl	%edi,		%edx
683	andl	$0xfcfcfcfc,	%eax
684	andl	$0xcfcfcfcf,	%edx
685	movb	%al,		%bl
686	movb	%ah,		%cl
687	rorl	$4,		%edx
688	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
689	movb	%dl,		%bl
690	xorl	%ebp,		%esi
691	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
692	xorl	%ebp,		%esi
693	movb	%dh,		%cl
694	shrl	$16,		%eax
695	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
696	xorl	%ebp,		%esi
697	movb	%ah,		%bl
698	shrl	$16,		%edx
699	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
700	xorl	%ebp,		%esi
701	movl	24(%esp),	%ebp
702	movb	%dh,		%cl
703	andl	$0xff,		%eax
704	andl	$0xff,		%edx
705	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
706	xorl	%ebx,		%esi
707	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
708	xorl	%ebx,		%esi
709	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
710	xorl	%ebx,		%esi
711	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
712	xorl	%ebx,		%esi
713	jmp	.L001end
714.L000start_decrypt:
715
716	# Round 15
717	movl	120(%ebp),	%eax
718	xorl	%ebx,		%ebx
719	movl	124(%ebp),	%edx
720	xorl	%esi,		%eax
721	xorl	%esi,		%edx
722	andl	$0xfcfcfcfc,	%eax
723	andl	$0xcfcfcfcf,	%edx
724	movb	%al,		%bl
725	movb	%ah,		%cl
726	rorl	$4,		%edx
727	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
728	movb	%dl,		%bl
729	xorl	%ebp,		%edi
730	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
731	xorl	%ebp,		%edi
732	movb	%dh,		%cl
733	shrl	$16,		%eax
734	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
735	xorl	%ebp,		%edi
736	movb	%ah,		%bl
737	shrl	$16,		%edx
738	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
739	xorl	%ebp,		%edi
740	movl	24(%esp),	%ebp
741	movb	%dh,		%cl
742	andl	$0xff,		%eax
743	andl	$0xff,		%edx
744	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
745	xorl	%ebx,		%edi
746	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
747	xorl	%ebx,		%edi
748	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
749	xorl	%ebx,		%edi
750	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
751	xorl	%ebx,		%edi
752
753	# Round 14
754	movl	112(%ebp),	%eax
755	xorl	%ebx,		%ebx
756	movl	116(%ebp),	%edx
757	xorl	%edi,		%eax
758	xorl	%edi,		%edx
759	andl	$0xfcfcfcfc,	%eax
760	andl	$0xcfcfcfcf,	%edx
761	movb	%al,		%bl
762	movb	%ah,		%cl
763	rorl	$4,		%edx
764	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
765	movb	%dl,		%bl
766	xorl	%ebp,		%esi
767	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
768	xorl	%ebp,		%esi
769	movb	%dh,		%cl
770	shrl	$16,		%eax
771	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
772	xorl	%ebp,		%esi
773	movb	%ah,		%bl
774	shrl	$16,		%edx
775	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
776	xorl	%ebp,		%esi
777	movl	24(%esp),	%ebp
778	movb	%dh,		%cl
779	andl	$0xff,		%eax
780	andl	$0xff,		%edx
781	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
782	xorl	%ebx,		%esi
783	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
784	xorl	%ebx,		%esi
785	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
786	xorl	%ebx,		%esi
787	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
788	xorl	%ebx,		%esi
789
790	# Round 13
791	movl	104(%ebp),	%eax
792	xorl	%ebx,		%ebx
793	movl	108(%ebp),	%edx
794	xorl	%esi,		%eax
795	xorl	%esi,		%edx
796	andl	$0xfcfcfcfc,	%eax
797	andl	$0xcfcfcfcf,	%edx
798	movb	%al,		%bl
799	movb	%ah,		%cl
800	rorl	$4,		%edx
801	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
802	movb	%dl,		%bl
803	xorl	%ebp,		%edi
804	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
805	xorl	%ebp,		%edi
806	movb	%dh,		%cl
807	shrl	$16,		%eax
808	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
809	xorl	%ebp,		%edi
810	movb	%ah,		%bl
811	shrl	$16,		%edx
812	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
813	xorl	%ebp,		%edi
814	movl	24(%esp),	%ebp
815	movb	%dh,		%cl
816	andl	$0xff,		%eax
817	andl	$0xff,		%edx
818	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
819	xorl	%ebx,		%edi
820	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
821	xorl	%ebx,		%edi
822	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
823	xorl	%ebx,		%edi
824	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
825	xorl	%ebx,		%edi
826
827	# Round 12
828	movl	96(%ebp),	%eax
829	xorl	%ebx,		%ebx
830	movl	100(%ebp),	%edx
831	xorl	%edi,		%eax
832	xorl	%edi,		%edx
833	andl	$0xfcfcfcfc,	%eax
834	andl	$0xcfcfcfcf,	%edx
835	movb	%al,		%bl
836	movb	%ah,		%cl
837	rorl	$4,		%edx
838	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
839	movb	%dl,		%bl
840	xorl	%ebp,		%esi
841	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
842	xorl	%ebp,		%esi
843	movb	%dh,		%cl
844	shrl	$16,		%eax
845	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
846	xorl	%ebp,		%esi
847	movb	%ah,		%bl
848	shrl	$16,		%edx
849	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
850	xorl	%ebp,		%esi
851	movl	24(%esp),	%ebp
852	movb	%dh,		%cl
853	andl	$0xff,		%eax
854	andl	$0xff,		%edx
855	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
856	xorl	%ebx,		%esi
857	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
858	xorl	%ebx,		%esi
859	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
860	xorl	%ebx,		%esi
861	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
862	xorl	%ebx,		%esi
863
864	# Round 11
865	movl	88(%ebp),	%eax
866	xorl	%ebx,		%ebx
867	movl	92(%ebp),	%edx
868	xorl	%esi,		%eax
869	xorl	%esi,		%edx
870	andl	$0xfcfcfcfc,	%eax
871	andl	$0xcfcfcfcf,	%edx
872	movb	%al,		%bl
873	movb	%ah,		%cl
874	rorl	$4,		%edx
875	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
876	movb	%dl,		%bl
877	xorl	%ebp,		%edi
878	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
879	xorl	%ebp,		%edi
880	movb	%dh,		%cl
881	shrl	$16,		%eax
882	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
883	xorl	%ebp,		%edi
884	movb	%ah,		%bl
885	shrl	$16,		%edx
886	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
887	xorl	%ebp,		%edi
888	movl	24(%esp),	%ebp
889	movb	%dh,		%cl
890	andl	$0xff,		%eax
891	andl	$0xff,		%edx
892	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
893	xorl	%ebx,		%edi
894	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
895	xorl	%ebx,		%edi
896	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
897	xorl	%ebx,		%edi
898	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
899	xorl	%ebx,		%edi
900
901	# Round 10
902	movl	80(%ebp),	%eax
903	xorl	%ebx,		%ebx
904	movl	84(%ebp),	%edx
905	xorl	%edi,		%eax
906	xorl	%edi,		%edx
907	andl	$0xfcfcfcfc,	%eax
908	andl	$0xcfcfcfcf,	%edx
909	movb	%al,		%bl
910	movb	%ah,		%cl
911	rorl	$4,		%edx
912	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
913	movb	%dl,		%bl
914	xorl	%ebp,		%esi
915	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
916	xorl	%ebp,		%esi
917	movb	%dh,		%cl
918	shrl	$16,		%eax
919	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
920	xorl	%ebp,		%esi
921	movb	%ah,		%bl
922	shrl	$16,		%edx
923	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
924	xorl	%ebp,		%esi
925	movl	24(%esp),	%ebp
926	movb	%dh,		%cl
927	andl	$0xff,		%eax
928	andl	$0xff,		%edx
929	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
930	xorl	%ebx,		%esi
931	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
932	xorl	%ebx,		%esi
933	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
934	xorl	%ebx,		%esi
935	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
936	xorl	%ebx,		%esi
937
938	# Round 9
939	movl	72(%ebp),	%eax
940	xorl	%ebx,		%ebx
941	movl	76(%ebp),	%edx
942	xorl	%esi,		%eax
943	xorl	%esi,		%edx
944	andl	$0xfcfcfcfc,	%eax
945	andl	$0xcfcfcfcf,	%edx
946	movb	%al,		%bl
947	movb	%ah,		%cl
948	rorl	$4,		%edx
949	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
950	movb	%dl,		%bl
951	xorl	%ebp,		%edi
952	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
953	xorl	%ebp,		%edi
954	movb	%dh,		%cl
955	shrl	$16,		%eax
956	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
957	xorl	%ebp,		%edi
958	movb	%ah,		%bl
959	shrl	$16,		%edx
960	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
961	xorl	%ebp,		%edi
962	movl	24(%esp),	%ebp
963	movb	%dh,		%cl
964	andl	$0xff,		%eax
965	andl	$0xff,		%edx
966	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
967	xorl	%ebx,		%edi
968	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
969	xorl	%ebx,		%edi
970	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
971	xorl	%ebx,		%edi
972	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
973	xorl	%ebx,		%edi
974
975	# Round 8
976	movl	64(%ebp),	%eax
977	xorl	%ebx,		%ebx
978	movl	68(%ebp),	%edx
979	xorl	%edi,		%eax
980	xorl	%edi,		%edx
981	andl	$0xfcfcfcfc,	%eax
982	andl	$0xcfcfcfcf,	%edx
983	movb	%al,		%bl
984	movb	%ah,		%cl
985	rorl	$4,		%edx
986	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
987	movb	%dl,		%bl
988	xorl	%ebp,		%esi
989	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
990	xorl	%ebp,		%esi
991	movb	%dh,		%cl
992	shrl	$16,		%eax
993	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
994	xorl	%ebp,		%esi
995	movb	%ah,		%bl
996	shrl	$16,		%edx
997	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
998	xorl	%ebp,		%esi
999	movl	24(%esp),	%ebp
1000	movb	%dh,		%cl
1001	andl	$0xff,		%eax
1002	andl	$0xff,		%edx
1003	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1004	xorl	%ebx,		%esi
1005	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1006	xorl	%ebx,		%esi
1007	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1008	xorl	%ebx,		%esi
1009	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1010	xorl	%ebx,		%esi
1011
1012	# Round 7
1013	movl	56(%ebp),	%eax
1014	xorl	%ebx,		%ebx
1015	movl	60(%ebp),	%edx
1016	xorl	%esi,		%eax
1017	xorl	%esi,		%edx
1018	andl	$0xfcfcfcfc,	%eax
1019	andl	$0xcfcfcfcf,	%edx
1020	movb	%al,		%bl
1021	movb	%ah,		%cl
1022	rorl	$4,		%edx
1023	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1024	movb	%dl,		%bl
1025	xorl	%ebp,		%edi
1026	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1027	xorl	%ebp,		%edi
1028	movb	%dh,		%cl
1029	shrl	$16,		%eax
1030	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1031	xorl	%ebp,		%edi
1032	movb	%ah,		%bl
1033	shrl	$16,		%edx
1034	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1035	xorl	%ebp,		%edi
1036	movl	24(%esp),	%ebp
1037	movb	%dh,		%cl
1038	andl	$0xff,		%eax
1039	andl	$0xff,		%edx
1040	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1041	xorl	%ebx,		%edi
1042	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1043	xorl	%ebx,		%edi
1044	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1045	xorl	%ebx,		%edi
1046	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1047	xorl	%ebx,		%edi
1048
1049	# Round 6
1050	movl	48(%ebp),	%eax
1051	xorl	%ebx,		%ebx
1052	movl	52(%ebp),	%edx
1053	xorl	%edi,		%eax
1054	xorl	%edi,		%edx
1055	andl	$0xfcfcfcfc,	%eax
1056	andl	$0xcfcfcfcf,	%edx
1057	movb	%al,		%bl
1058	movb	%ah,		%cl
1059	rorl	$4,		%edx
1060	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1061	movb	%dl,		%bl
1062	xorl	%ebp,		%esi
1063	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1064	xorl	%ebp,		%esi
1065	movb	%dh,		%cl
1066	shrl	$16,		%eax
1067	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1068	xorl	%ebp,		%esi
1069	movb	%ah,		%bl
1070	shrl	$16,		%edx
1071	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1072	xorl	%ebp,		%esi
1073	movl	24(%esp),	%ebp
1074	movb	%dh,		%cl
1075	andl	$0xff,		%eax
1076	andl	$0xff,		%edx
1077	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1078	xorl	%ebx,		%esi
1079	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1080	xorl	%ebx,		%esi
1081	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1082	xorl	%ebx,		%esi
1083	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1084	xorl	%ebx,		%esi
1085
1086	# Round 5
1087	movl	40(%ebp),	%eax
1088	xorl	%ebx,		%ebx
1089	movl	44(%ebp),	%edx
1090	xorl	%esi,		%eax
1091	xorl	%esi,		%edx
1092	andl	$0xfcfcfcfc,	%eax
1093	andl	$0xcfcfcfcf,	%edx
1094	movb	%al,		%bl
1095	movb	%ah,		%cl
1096	rorl	$4,		%edx
1097	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1098	movb	%dl,		%bl
1099	xorl	%ebp,		%edi
1100	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1101	xorl	%ebp,		%edi
1102	movb	%dh,		%cl
1103	shrl	$16,		%eax
1104	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1105	xorl	%ebp,		%edi
1106	movb	%ah,		%bl
1107	shrl	$16,		%edx
1108	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1109	xorl	%ebp,		%edi
1110	movl	24(%esp),	%ebp
1111	movb	%dh,		%cl
1112	andl	$0xff,		%eax
1113	andl	$0xff,		%edx
1114	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1115	xorl	%ebx,		%edi
1116	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1117	xorl	%ebx,		%edi
1118	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1119	xorl	%ebx,		%edi
1120	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1121	xorl	%ebx,		%edi
1122
1123	# Round 4
1124	movl	32(%ebp),	%eax
1125	xorl	%ebx,		%ebx
1126	movl	36(%ebp),	%edx
1127	xorl	%edi,		%eax
1128	xorl	%edi,		%edx
1129	andl	$0xfcfcfcfc,	%eax
1130	andl	$0xcfcfcfcf,	%edx
1131	movb	%al,		%bl
1132	movb	%ah,		%cl
1133	rorl	$4,		%edx
1134	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1135	movb	%dl,		%bl
1136	xorl	%ebp,		%esi
1137	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1138	xorl	%ebp,		%esi
1139	movb	%dh,		%cl
1140	shrl	$16,		%eax
1141	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1142	xorl	%ebp,		%esi
1143	movb	%ah,		%bl
1144	shrl	$16,		%edx
1145	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1146	xorl	%ebp,		%esi
1147	movl	24(%esp),	%ebp
1148	movb	%dh,		%cl
1149	andl	$0xff,		%eax
1150	andl	$0xff,		%edx
1151	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1152	xorl	%ebx,		%esi
1153	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1154	xorl	%ebx,		%esi
1155	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1156	xorl	%ebx,		%esi
1157	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1158	xorl	%ebx,		%esi
1159
1160	# Round 3
1161	movl	24(%ebp),	%eax
1162	xorl	%ebx,		%ebx
1163	movl	28(%ebp),	%edx
1164	xorl	%esi,		%eax
1165	xorl	%esi,		%edx
1166	andl	$0xfcfcfcfc,	%eax
1167	andl	$0xcfcfcfcf,	%edx
1168	movb	%al,		%bl
1169	movb	%ah,		%cl
1170	rorl	$4,		%edx
1171	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1172	movb	%dl,		%bl
1173	xorl	%ebp,		%edi
1174	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1175	xorl	%ebp,		%edi
1176	movb	%dh,		%cl
1177	shrl	$16,		%eax
1178	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1179	xorl	%ebp,		%edi
1180	movb	%ah,		%bl
1181	shrl	$16,		%edx
1182	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1183	xorl	%ebp,		%edi
1184	movl	24(%esp),	%ebp
1185	movb	%dh,		%cl
1186	andl	$0xff,		%eax
1187	andl	$0xff,		%edx
1188	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1189	xorl	%ebx,		%edi
1190	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1191	xorl	%ebx,		%edi
1192	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1193	xorl	%ebx,		%edi
1194	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1195	xorl	%ebx,		%edi
1196
1197	# Round 2
1198	movl	16(%ebp),	%eax
1199	xorl	%ebx,		%ebx
1200	movl	20(%ebp),	%edx
1201	xorl	%edi,		%eax
1202	xorl	%edi,		%edx
1203	andl	$0xfcfcfcfc,	%eax
1204	andl	$0xcfcfcfcf,	%edx
1205	movb	%al,		%bl
1206	movb	%ah,		%cl
1207	rorl	$4,		%edx
1208	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1209	movb	%dl,		%bl
1210	xorl	%ebp,		%esi
1211	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1212	xorl	%ebp,		%esi
1213	movb	%dh,		%cl
1214	shrl	$16,		%eax
1215	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1216	xorl	%ebp,		%esi
1217	movb	%ah,		%bl
1218	shrl	$16,		%edx
1219	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1220	xorl	%ebp,		%esi
1221	movl	24(%esp),	%ebp
1222	movb	%dh,		%cl
1223	andl	$0xff,		%eax
1224	andl	$0xff,		%edx
1225	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1226	xorl	%ebx,		%esi
1227	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1228	xorl	%ebx,		%esi
1229	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1230	xorl	%ebx,		%esi
1231	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1232	xorl	%ebx,		%esi
1233
1234	# Round 1
1235	movl	8(%ebp),	%eax
1236	xorl	%ebx,		%ebx
1237	movl	12(%ebp),	%edx
1238	xorl	%esi,		%eax
1239	xorl	%esi,		%edx
1240	andl	$0xfcfcfcfc,	%eax
1241	andl	$0xcfcfcfcf,	%edx
1242	movb	%al,		%bl
1243	movb	%ah,		%cl
1244	rorl	$4,		%edx
1245	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1246	movb	%dl,		%bl
1247	xorl	%ebp,		%edi
1248	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1249	xorl	%ebp,		%edi
1250	movb	%dh,		%cl
1251	shrl	$16,		%eax
1252	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1253	xorl	%ebp,		%edi
1254	movb	%ah,		%bl
1255	shrl	$16,		%edx
1256	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1257	xorl	%ebp,		%edi
1258	movl	24(%esp),	%ebp
1259	movb	%dh,		%cl
1260	andl	$0xff,		%eax
1261	andl	$0xff,		%edx
1262	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1263	xorl	%ebx,		%edi
1264	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1265	xorl	%ebx,		%edi
1266	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1267	xorl	%ebx,		%edi
1268	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1269	xorl	%ebx,		%edi
1270
1271	# Round 0
1272	movl	(%ebp),		%eax
1273	xorl	%ebx,		%ebx
1274	movl	4(%ebp),	%edx
1275	xorl	%edi,		%eax
1276	xorl	%edi,		%edx
1277	andl	$0xfcfcfcfc,	%eax
1278	andl	$0xcfcfcfcf,	%edx
1279	movb	%al,		%bl
1280	movb	%ah,		%cl
1281	rorl	$4,		%edx
1282	movl	      _C_LABEL(des_SPtrans)(%ebx),%ebp
1283	movb	%dl,		%bl
1284	xorl	%ebp,		%esi
1285	movl	0x200+_C_LABEL(des_SPtrans)(%ecx),%ebp
1286	xorl	%ebp,		%esi
1287	movb	%dh,		%cl
1288	shrl	$16,		%eax
1289	movl	0x100+_C_LABEL(des_SPtrans)(%ebx),%ebp
1290	xorl	%ebp,		%esi
1291	movb	%ah,		%bl
1292	shrl	$16,		%edx
1293	movl	0x300+_C_LABEL(des_SPtrans)(%ecx),%ebp
1294	xorl	%ebp,		%esi
1295	movl	24(%esp),	%ebp
1296	movb	%dh,		%cl
1297	andl	$0xff,		%eax
1298	andl	$0xff,		%edx
1299	movl	0x600+_C_LABEL(des_SPtrans)(%ebx),%ebx
1300	xorl	%ebx,		%esi
1301	movl	0x700+_C_LABEL(des_SPtrans)(%ecx),%ebx
1302	xorl	%ebx,		%esi
1303	movl	0x400+_C_LABEL(des_SPtrans)(%eax),%ebx
1304	xorl	%ebx,		%esi
1305	movl	0x500+_C_LABEL(des_SPtrans)(%edx),%ebx
1306	xorl	%ebx,		%esi
1307.L001end:
1308
1309	# FP
1310	movl	20(%esp),	%edx
1311.byte 209
1312.byte 206		# rorl $1 %esi
1313	movl	%edi,		%eax
1314	xorl	%esi,		%edi
1315	andl	$0xaaaaaaaa,	%edi
1316	xorl	%edi,		%eax
1317	xorl	%edi,		%esi
1318
1319	roll	$23,		%eax
1320	movl	%eax,		%edi
1321	xorl	%esi,		%eax
1322	andl	$0x03fc03fc,	%eax
1323	xorl	%eax,		%edi
1324	xorl	%eax,		%esi
1325
1326	roll	$10,		%edi
1327	movl	%edi,		%eax
1328	xorl	%esi,		%edi
1329	andl	$0x33333333,	%edi
1330	xorl	%edi,		%eax
1331	xorl	%edi,		%esi
1332
1333	roll	$18,		%esi
1334	movl	%esi,		%edi
1335	xorl	%eax,		%esi
1336	andl	$0xfff0000f,	%esi
1337	xorl	%esi,		%edi
1338	xorl	%esi,		%eax
1339
1340	roll	$12,		%edi
1341	movl	%edi,		%esi
1342	xorl	%eax,		%edi
1343	andl	$0xf0f0f0f0,	%edi
1344	xorl	%edi,		%esi
1345	xorl	%edi,		%eax
1346
1347	rorl	$4,		%eax
1348	movl	%eax,		(%edx)
1349	movl	%esi,		4(%edx)
1350	popl	%ebp
1351	popl	%ebx
1352	popl	%edi
1353	popl	%esi
1354	ret
1355.L_des_encrypt1_end:
1356	.size	_C_LABEL(des_encrypt1),.L_des_encrypt1_end-_C_LABEL(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
2574.L_des_encrypt2_end:
2575	.size	_C_LABEL(des_encrypt2),.L_des_encrypt2_end-_C_LABEL(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
2693.L_des_encrypt3_end:
2694        .size   _C_LABEL(des_encrypt3),.L_des_encrypt3_end-_C_LABEL(des_encrypt3)
2695
2696ENTRY(des_decrypt3)
2697	pushl   %ebx
2698	movl    8(%esp),        %ebx
2699	pushl   %ebp
2700	pushl   %esi
2701	pushl   %edi
2702
2703	# Load the data words
2704	movl    (%ebx),         %edi
2705	movl    4(%ebx),        %esi
2706	subl    $12,            %esp
2707
2708	# IP
2709	roll    $4,             %edi
2710	movl    %edi,           %edx
2711	xorl    %esi,           %edi
2712	andl    $0xf0f0f0f0,    %edi
2713	xorl    %edi,           %edx
2714	xorl    %edi,           %esi
2715
2716	roll    $20,            %esi
2717	movl    %esi,           %edi
2718	xorl    %edx,           %esi
2719	andl    $0xfff0000f,    %esi
2720	xorl    %esi,           %edi
2721	xorl    %esi,           %edx
2722
2723	roll    $14,            %edi
2724	movl    %edi,           %esi
2725	xorl    %edx,           %edi
2726	andl    $0x33333333,    %edi
2727	xorl    %edi,           %esi
2728	xorl    %edi,           %edx
2729
2730	roll    $22,            %edx
2731	movl    %edx,           %edi
2732	xorl    %esi,           %edx
2733	andl    $0x03fc03fc,    %edx
2734	xorl    %edx,           %edi
2735	xorl    %edx,           %esi
2736
2737	roll    $9,             %edi
2738	movl    %edi,           %edx
2739	xorl    %esi,           %edi
2740	andl    $0xaaaaaaaa,    %edi
2741	xorl    %edi,           %edx
2742	xorl    %edi,           %esi
2743
2744	rorl    $3,             %edx
2745	rorl    $2,             %esi
2746	movl    %esi,           4(%ebx)
2747	movl    36(%esp),       %esi
2748	movl    %edx,           (%ebx)
2749	movl    40(%esp),       %edi
2750	movl    44(%esp),       %eax
2751	movl    $0,             8(%esp)
2752	movl    %eax,           4(%esp)
2753	movl    %ebx,           (%esp)
2754	call    _C_LABEL(des_encrypt2)
2755	movl    $1,             8(%esp)
2756	movl    %edi,           4(%esp)
2757	movl    %ebx,           (%esp)
2758	call    _C_LABEL(des_encrypt2)
2759	movl    $0,             8(%esp)
2760	movl    %esi,           4(%esp)
2761	movl    %ebx,           (%esp)
2762	call    _C_LABEL(des_encrypt2)
2763	addl    $12,            %esp
2764	movl    (%ebx),         %edi
2765	movl    4(%ebx),        %esi
2766
2767	# FP
2768	roll    $2,             %esi
2769	roll    $3,             %edi
2770	movl    %edi,           %eax
2771	xorl    %esi,           %edi
2772	andl    $0xaaaaaaaa,    %edi
2773	xorl    %edi,           %eax
2774	xorl    %edi,           %esi
2775
2776	roll    $23,            %eax
2777	movl    %eax,           %edi
2778	xorl    %esi,           %eax
2779	andl    $0x03fc03fc,    %eax
2780	xorl    %eax,           %edi
2781	xorl    %eax,           %esi
2782
2783	roll    $10,            %edi
2784	movl    %edi,           %eax
2785	xorl    %esi,           %edi
2786	andl    $0x33333333,    %edi
2787	xorl    %edi,           %eax
2788	xorl    %edi,           %esi
2789
2790	roll    $18,            %esi
2791	movl    %esi,           %edi
2792	xorl    %eax,           %esi
2793	andl    $0xfff0000f,    %esi
2794	xorl    %esi,           %edi
2795	xorl    %esi,           %eax
2796
2797	roll    $12,            %edi
2798	movl    %edi,           %esi
2799	xorl    %eax,           %edi
2800	andl    $0xf0f0f0f0,    %edi
2801	xorl    %edi,           %esi
2802	xorl    %edi,           %eax
2803
2804        rorl    $4,             %eax
2805	movl    %eax,           (%ebx)
2806	movl    %esi,           4(%ebx)
2807	popl    %edi
2808	popl    %esi
2809	popl    %ebp
2810	popl    %ebx
2811	ret
2812.L_des_decrypt3_end:
2813	.size   _C_LABEL(des_decrypt3),.L_des_decrypt3_end-_C_LABEL(des_decrypt3)
2814