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