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