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