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