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