8719e386070e3b7dc285196b3d26e53becc7fad2
[openssl.git] / crypto / des / asm / yx86unix.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 fcrypt_body _fcrypt_body
14
15 #endif
16
17 #ifdef OUT
18 #define OK      1
19 #define ALIGN   4
20 #endif
21
22 #ifdef BSDI
23 #define OK              1
24 #define ALIGN           4
25 #undef SIZE
26 #undef TYPE
27 #define SIZE(a,b)
28 #define TYPE(a,b)
29 #endif
30
31 #if defined(ELF) || defined(SOL)
32 #define OK              1
33 #define ALIGN           16
34 #endif
35
36 #ifndef OK
37 You need to define one of
38 ELF - elf systems - linux-elf, NetBSD and DG-UX
39 OUT - a.out systems - linux-a.out and FreeBSD
40 SOL - solaris systems, which are elf with strange comment lines
41 BSDI - a.out with a very primative version of as.
42 #endif
43
44 /* Let the Assembler begin :-) */
45         /* Don't even think of reading this code */
46         /* It was automatically generated by crypt586.pl */
47         /* Which is a perl program used to generate the x86 assember for */
48         /* any of elf, a.out, BSDI,Win32, or Solaris */
49         /* eric <eay@cryptsoft.com> */
50
51         .file   "crypt586.s"
52         .version        "01.01"
53 gcc2_compiled.:
54 .text
55         .align ALIGN
56 .globl fcrypt_body
57         TYPE(fcrypt_body,@function)
58 fcrypt_body:
59         pushl   %ebp
60         pushl   %ebx
61         pushl   %esi
62         pushl   %edi
63
64
65         /* Load the 2 words */
66         xorl    %edi,           %edi
67         xorl    %esi,           %esi
68         movl    24(%esp),       %ebp
69         pushl   $25
70 .L000start:
71
72         /* Round 0 */
73         movl    32(%esp),       %eax
74         movl    %esi,           %edx
75         shrl    $16,            %edx
76         movl    36(%esp),       %ecx
77         xorl    %esi,           %edx
78         andl    %edx,           %eax
79         andl    %ecx,           %edx
80         movl    %eax,           %ebx
81         sall    $16,            %ebx
82         movl    %edx,           %ecx
83         sall    $16,            %ecx
84         xorl    %ebx,           %eax
85         xorl    %ecx,           %edx
86         movl    (%ebp),         %ebx
87         xorl    %ebx,           %eax
88         movl    4(%ebp),        %ecx
89         xorl    %esi,           %eax
90         xorl    %esi,           %edx
91         xorl    %ecx,           %edx
92         andl    $0xfcfcfcfc,    %eax
93         xorl    %ebx,           %ebx
94         andl    $0xcfcfcfcf,    %edx
95         xorl    %ecx,           %ecx
96         movb    %al,            %bl
97         movb    %ah,            %cl
98         rorl    $4,             %edx
99         movl          des_SPtrans(%ebx),%ebp
100         movb    %dl,            %bl
101         xorl    %ebp,           %edi
102         movl    0x200+des_SPtrans(%ecx),%ebp
103         xorl    %ebp,           %edi
104         movb    %dh,            %cl
105         shrl    $16,            %eax
106         movl    0x100+des_SPtrans(%ebx),%ebp
107         xorl    %ebp,           %edi
108         movb    %ah,            %bl
109         shrl    $16,            %edx
110         movl    0x300+des_SPtrans(%ecx),%ebp
111         xorl    %ebp,           %edi
112         movl    28(%esp),       %ebp
113         movb    %dh,            %cl
114         andl    $0xff,          %eax
115         andl    $0xff,          %edx
116         movl    0x600+des_SPtrans(%ebx),%ebx
117         xorl    %ebx,           %edi
118         movl    0x700+des_SPtrans(%ecx),%ebx
119         xorl    %ebx,           %edi
120         movl    0x400+des_SPtrans(%eax),%ebx
121         xorl    %ebx,           %edi
122         movl    0x500+des_SPtrans(%edx),%ebx
123         xorl    %ebx,           %edi
124
125         /* Round 1 */
126         movl    32(%esp),       %eax
127         movl    %edi,           %edx
128         shrl    $16,            %edx
129         movl    36(%esp),       %ecx
130         xorl    %edi,           %edx
131         andl    %edx,           %eax
132         andl    %ecx,           %edx
133         movl    %eax,           %ebx
134         sall    $16,            %ebx
135         movl    %edx,           %ecx
136         sall    $16,            %ecx
137         xorl    %ebx,           %eax
138         xorl    %ecx,           %edx
139         movl    8(%ebp),        %ebx
140         xorl    %ebx,           %eax
141         movl    12(%ebp),       %ecx
142         xorl    %edi,           %eax
143         xorl    %edi,           %edx
144         xorl    %ecx,           %edx
145         andl    $0xfcfcfcfc,    %eax
146         xorl    %ebx,           %ebx
147         andl    $0xcfcfcfcf,    %edx
148         xorl    %ecx,           %ecx
149         movb    %al,            %bl
150         movb    %ah,            %cl
151         rorl    $4,             %edx
152         movl          des_SPtrans(%ebx),%ebp
153         movb    %dl,            %bl
154         xorl    %ebp,           %esi
155         movl    0x200+des_SPtrans(%ecx),%ebp
156         xorl    %ebp,           %esi
157         movb    %dh,            %cl
158         shrl    $16,            %eax
159         movl    0x100+des_SPtrans(%ebx),%ebp
160         xorl    %ebp,           %esi
161         movb    %ah,            %bl
162         shrl    $16,            %edx
163         movl    0x300+des_SPtrans(%ecx),%ebp
164         xorl    %ebp,           %esi
165         movl    28(%esp),       %ebp
166         movb    %dh,            %cl
167         andl    $0xff,          %eax
168         andl    $0xff,          %edx
169         movl    0x600+des_SPtrans(%ebx),%ebx
170         xorl    %ebx,           %esi
171         movl    0x700+des_SPtrans(%ecx),%ebx
172         xorl    %ebx,           %esi
173         movl    0x400+des_SPtrans(%eax),%ebx
174         xorl    %ebx,           %esi
175         movl    0x500+des_SPtrans(%edx),%ebx
176         xorl    %ebx,           %esi
177
178         /* Round 2 */
179         movl    32(%esp),       %eax
180         movl    %esi,           %edx
181         shrl    $16,            %edx
182         movl    36(%esp),       %ecx
183         xorl    %esi,           %edx
184         andl    %edx,           %eax
185         andl    %ecx,           %edx
186         movl    %eax,           %ebx
187         sall    $16,            %ebx
188         movl    %edx,           %ecx
189         sall    $16,            %ecx
190         xorl    %ebx,           %eax
191         xorl    %ecx,           %edx
192         movl    16(%ebp),       %ebx
193         xorl    %ebx,           %eax
194         movl    20(%ebp),       %ecx
195         xorl    %esi,           %eax
196         xorl    %esi,           %edx
197         xorl    %ecx,           %edx
198         andl    $0xfcfcfcfc,    %eax
199         xorl    %ebx,           %ebx
200         andl    $0xcfcfcfcf,    %edx
201         xorl    %ecx,           %ecx
202         movb    %al,            %bl
203         movb    %ah,            %cl
204         rorl    $4,             %edx
205         movl          des_SPtrans(%ebx),%ebp
206         movb    %dl,            %bl
207         xorl    %ebp,           %edi
208         movl    0x200+des_SPtrans(%ecx),%ebp
209         xorl    %ebp,           %edi
210         movb    %dh,            %cl
211         shrl    $16,            %eax
212         movl    0x100+des_SPtrans(%ebx),%ebp
213         xorl    %ebp,           %edi
214         movb    %ah,            %bl
215         shrl    $16,            %edx
216         movl    0x300+des_SPtrans(%ecx),%ebp
217         xorl    %ebp,           %edi
218         movl    28(%esp),       %ebp
219         movb    %dh,            %cl
220         andl    $0xff,          %eax
221         andl    $0xff,          %edx
222         movl    0x600+des_SPtrans(%ebx),%ebx
223         xorl    %ebx,           %edi
224         movl    0x700+des_SPtrans(%ecx),%ebx
225         xorl    %ebx,           %edi
226         movl    0x400+des_SPtrans(%eax),%ebx
227         xorl    %ebx,           %edi
228         movl    0x500+des_SPtrans(%edx),%ebx
229         xorl    %ebx,           %edi
230
231         /* Round 3 */
232         movl    32(%esp),       %eax
233         movl    %edi,           %edx
234         shrl    $16,            %edx
235         movl    36(%esp),       %ecx
236         xorl    %edi,           %edx
237         andl    %edx,           %eax
238         andl    %ecx,           %edx
239         movl    %eax,           %ebx
240         sall    $16,            %ebx
241         movl    %edx,           %ecx
242         sall    $16,            %ecx
243         xorl    %ebx,           %eax
244         xorl    %ecx,           %edx
245         movl    24(%ebp),       %ebx
246         xorl    %ebx,           %eax
247         movl    28(%ebp),       %ecx
248         xorl    %edi,           %eax
249         xorl    %edi,           %edx
250         xorl    %ecx,           %edx
251         andl    $0xfcfcfcfc,    %eax
252         xorl    %ebx,           %ebx
253         andl    $0xcfcfcfcf,    %edx
254         xorl    %ecx,           %ecx
255         movb    %al,            %bl
256         movb    %ah,            %cl
257         rorl    $4,             %edx
258         movl          des_SPtrans(%ebx),%ebp
259         movb    %dl,            %bl
260         xorl    %ebp,           %esi
261         movl    0x200+des_SPtrans(%ecx),%ebp
262         xorl    %ebp,           %esi
263         movb    %dh,            %cl
264         shrl    $16,            %eax
265         movl    0x100+des_SPtrans(%ebx),%ebp
266         xorl    %ebp,           %esi
267         movb    %ah,            %bl
268         shrl    $16,            %edx
269         movl    0x300+des_SPtrans(%ecx),%ebp
270         xorl    %ebp,           %esi
271         movl    28(%esp),       %ebp
272         movb    %dh,            %cl
273         andl    $0xff,          %eax
274         andl    $0xff,          %edx
275         movl    0x600+des_SPtrans(%ebx),%ebx
276         xorl    %ebx,           %esi
277         movl    0x700+des_SPtrans(%ecx),%ebx
278         xorl    %ebx,           %esi
279         movl    0x400+des_SPtrans(%eax),%ebx
280         xorl    %ebx,           %esi
281         movl    0x500+des_SPtrans(%edx),%ebx
282         xorl    %ebx,           %esi
283
284         /* Round 4 */
285         movl    32(%esp),       %eax
286         movl    %esi,           %edx
287         shrl    $16,            %edx
288         movl    36(%esp),       %ecx
289         xorl    %esi,           %edx
290         andl    %edx,           %eax
291         andl    %ecx,           %edx
292         movl    %eax,           %ebx
293         sall    $16,            %ebx
294         movl    %edx,           %ecx
295         sall    $16,            %ecx
296         xorl    %ebx,           %eax
297         xorl    %ecx,           %edx
298         movl    32(%ebp),       %ebx
299         xorl    %ebx,           %eax
300         movl    36(%ebp),       %ecx
301         xorl    %esi,           %eax
302         xorl    %esi,           %edx
303         xorl    %ecx,           %edx
304         andl    $0xfcfcfcfc,    %eax
305         xorl    %ebx,           %ebx
306         andl    $0xcfcfcfcf,    %edx
307         xorl    %ecx,           %ecx
308         movb    %al,            %bl
309         movb    %ah,            %cl
310         rorl    $4,             %edx
311         movl          des_SPtrans(%ebx),%ebp
312         movb    %dl,            %bl
313         xorl    %ebp,           %edi
314         movl    0x200+des_SPtrans(%ecx),%ebp
315         xorl    %ebp,           %edi
316         movb    %dh,            %cl
317         shrl    $16,            %eax
318         movl    0x100+des_SPtrans(%ebx),%ebp
319         xorl    %ebp,           %edi
320         movb    %ah,            %bl
321         shrl    $16,            %edx
322         movl    0x300+des_SPtrans(%ecx),%ebp
323         xorl    %ebp,           %edi
324         movl    28(%esp),       %ebp
325         movb    %dh,            %cl
326         andl    $0xff,          %eax
327         andl    $0xff,          %edx
328         movl    0x600+des_SPtrans(%ebx),%ebx
329         xorl    %ebx,           %edi
330         movl    0x700+des_SPtrans(%ecx),%ebx
331         xorl    %ebx,           %edi
332         movl    0x400+des_SPtrans(%eax),%ebx
333         xorl    %ebx,           %edi
334         movl    0x500+des_SPtrans(%edx),%ebx
335         xorl    %ebx,           %edi
336
337         /* Round 5 */
338         movl    32(%esp),       %eax
339         movl    %edi,           %edx
340         shrl    $16,            %edx
341         movl    36(%esp),       %ecx
342         xorl    %edi,           %edx
343         andl    %edx,           %eax
344         andl    %ecx,           %edx
345         movl    %eax,           %ebx
346         sall    $16,            %ebx
347         movl    %edx,           %ecx
348         sall    $16,            %ecx
349         xorl    %ebx,           %eax
350         xorl    %ecx,           %edx
351         movl    40(%ebp),       %ebx
352         xorl    %ebx,           %eax
353         movl    44(%ebp),       %ecx
354         xorl    %edi,           %eax
355         xorl    %edi,           %edx
356         xorl    %ecx,           %edx
357         andl    $0xfcfcfcfc,    %eax
358         xorl    %ebx,           %ebx
359         andl    $0xcfcfcfcf,    %edx
360         xorl    %ecx,           %ecx
361         movb    %al,            %bl
362         movb    %ah,            %cl
363         rorl    $4,             %edx
364         movl          des_SPtrans(%ebx),%ebp
365         movb    %dl,            %bl
366         xorl    %ebp,           %esi
367         movl    0x200+des_SPtrans(%ecx),%ebp
368         xorl    %ebp,           %esi
369         movb    %dh,            %cl
370         shrl    $16,            %eax
371         movl    0x100+des_SPtrans(%ebx),%ebp
372         xorl    %ebp,           %esi
373         movb    %ah,            %bl
374         shrl    $16,            %edx
375         movl    0x300+des_SPtrans(%ecx),%ebp
376         xorl    %ebp,           %esi
377         movl    28(%esp),       %ebp
378         movb    %dh,            %cl
379         andl    $0xff,          %eax
380         andl    $0xff,          %edx
381         movl    0x600+des_SPtrans(%ebx),%ebx
382         xorl    %ebx,           %esi
383         movl    0x700+des_SPtrans(%ecx),%ebx
384         xorl    %ebx,           %esi
385         movl    0x400+des_SPtrans(%eax),%ebx
386         xorl    %ebx,           %esi
387         movl    0x500+des_SPtrans(%edx),%ebx
388         xorl    %ebx,           %esi
389
390         /* Round 6 */
391         movl    32(%esp),       %eax
392         movl    %esi,           %edx
393         shrl    $16,            %edx
394         movl    36(%esp),       %ecx
395         xorl    %esi,           %edx
396         andl    %edx,           %eax
397         andl    %ecx,           %edx
398         movl    %eax,           %ebx
399         sall    $16,            %ebx
400         movl    %edx,           %ecx
401         sall    $16,            %ecx
402         xorl    %ebx,           %eax
403         xorl    %ecx,           %edx
404         movl    48(%ebp),       %ebx
405         xorl    %ebx,           %eax
406         movl    52(%ebp),       %ecx
407         xorl    %esi,           %eax
408         xorl    %esi,           %edx
409         xorl    %ecx,           %edx
410         andl    $0xfcfcfcfc,    %eax
411         xorl    %ebx,           %ebx
412         andl    $0xcfcfcfcf,    %edx
413         xorl    %ecx,           %ecx
414         movb    %al,            %bl
415         movb    %ah,            %cl
416         rorl    $4,             %edx
417         movl          des_SPtrans(%ebx),%ebp
418         movb    %dl,            %bl
419         xorl    %ebp,           %edi
420         movl    0x200+des_SPtrans(%ecx),%ebp
421         xorl    %ebp,           %edi
422         movb    %dh,            %cl
423         shrl    $16,            %eax
424         movl    0x100+des_SPtrans(%ebx),%ebp
425         xorl    %ebp,           %edi
426         movb    %ah,            %bl
427         shrl    $16,            %edx
428         movl    0x300+des_SPtrans(%ecx),%ebp
429         xorl    %ebp,           %edi
430         movl    28(%esp),       %ebp
431         movb    %dh,            %cl
432         andl    $0xff,          %eax
433         andl    $0xff,          %edx
434         movl    0x600+des_SPtrans(%ebx),%ebx
435         xorl    %ebx,           %edi
436         movl    0x700+des_SPtrans(%ecx),%ebx
437         xorl    %ebx,           %edi
438         movl    0x400+des_SPtrans(%eax),%ebx
439         xorl    %ebx,           %edi
440         movl    0x500+des_SPtrans(%edx),%ebx
441         xorl    %ebx,           %edi
442
443         /* Round 7 */
444         movl    32(%esp),       %eax
445         movl    %edi,           %edx
446         shrl    $16,            %edx
447         movl    36(%esp),       %ecx
448         xorl    %edi,           %edx
449         andl    %edx,           %eax
450         andl    %ecx,           %edx
451         movl    %eax,           %ebx
452         sall    $16,            %ebx
453         movl    %edx,           %ecx
454         sall    $16,            %ecx
455         xorl    %ebx,           %eax
456         xorl    %ecx,           %edx
457         movl    56(%ebp),       %ebx
458         xorl    %ebx,           %eax
459         movl    60(%ebp),       %ecx
460         xorl    %edi,           %eax
461         xorl    %edi,           %edx
462         xorl    %ecx,           %edx
463         andl    $0xfcfcfcfc,    %eax
464         xorl    %ebx,           %ebx
465         andl    $0xcfcfcfcf,    %edx
466         xorl    %ecx,           %ecx
467         movb    %al,            %bl
468         movb    %ah,            %cl
469         rorl    $4,             %edx
470         movl          des_SPtrans(%ebx),%ebp
471         movb    %dl,            %bl
472         xorl    %ebp,           %esi
473         movl    0x200+des_SPtrans(%ecx),%ebp
474         xorl    %ebp,           %esi
475         movb    %dh,            %cl
476         shrl    $16,            %eax
477         movl    0x100+des_SPtrans(%ebx),%ebp
478         xorl    %ebp,           %esi
479         movb    %ah,            %bl
480         shrl    $16,            %edx
481         movl    0x300+des_SPtrans(%ecx),%ebp
482         xorl    %ebp,           %esi
483         movl    28(%esp),       %ebp
484         movb    %dh,            %cl
485         andl    $0xff,          %eax
486         andl    $0xff,          %edx
487         movl    0x600+des_SPtrans(%ebx),%ebx
488         xorl    %ebx,           %esi
489         movl    0x700+des_SPtrans(%ecx),%ebx
490         xorl    %ebx,           %esi
491         movl    0x400+des_SPtrans(%eax),%ebx
492         xorl    %ebx,           %esi
493         movl    0x500+des_SPtrans(%edx),%ebx
494         xorl    %ebx,           %esi
495
496         /* Round 8 */
497         movl    32(%esp),       %eax
498         movl    %esi,           %edx
499         shrl    $16,            %edx
500         movl    36(%esp),       %ecx
501         xorl    %esi,           %edx
502         andl    %edx,           %eax
503         andl    %ecx,           %edx
504         movl    %eax,           %ebx
505         sall    $16,            %ebx
506         movl    %edx,           %ecx
507         sall    $16,            %ecx
508         xorl    %ebx,           %eax
509         xorl    %ecx,           %edx
510         movl    64(%ebp),       %ebx
511         xorl    %ebx,           %eax
512         movl    68(%ebp),       %ecx
513         xorl    %esi,           %eax
514         xorl    %esi,           %edx
515         xorl    %ecx,           %edx
516         andl    $0xfcfcfcfc,    %eax
517         xorl    %ebx,           %ebx
518         andl    $0xcfcfcfcf,    %edx
519         xorl    %ecx,           %ecx
520         movb    %al,            %bl
521         movb    %ah,            %cl
522         rorl    $4,             %edx
523         movl          des_SPtrans(%ebx),%ebp
524         movb    %dl,            %bl
525         xorl    %ebp,           %edi
526         movl    0x200+des_SPtrans(%ecx),%ebp
527         xorl    %ebp,           %edi
528         movb    %dh,            %cl
529         shrl    $16,            %eax
530         movl    0x100+des_SPtrans(%ebx),%ebp
531         xorl    %ebp,           %edi
532         movb    %ah,            %bl
533         shrl    $16,            %edx
534         movl    0x300+des_SPtrans(%ecx),%ebp
535         xorl    %ebp,           %edi
536         movl    28(%esp),       %ebp
537         movb    %dh,            %cl
538         andl    $0xff,          %eax
539         andl    $0xff,          %edx
540         movl    0x600+des_SPtrans(%ebx),%ebx
541         xorl    %ebx,           %edi
542         movl    0x700+des_SPtrans(%ecx),%ebx
543         xorl    %ebx,           %edi
544         movl    0x400+des_SPtrans(%eax),%ebx
545         xorl    %ebx,           %edi
546         movl    0x500+des_SPtrans(%edx),%ebx
547         xorl    %ebx,           %edi
548
549         /* Round 9 */
550         movl    32(%esp),       %eax
551         movl    %edi,           %edx
552         shrl    $16,            %edx
553         movl    36(%esp),       %ecx
554         xorl    %edi,           %edx
555         andl    %edx,           %eax
556         andl    %ecx,           %edx
557         movl    %eax,           %ebx
558         sall    $16,            %ebx
559         movl    %edx,           %ecx
560         sall    $16,            %ecx
561         xorl    %ebx,           %eax
562         xorl    %ecx,           %edx
563         movl    72(%ebp),       %ebx
564         xorl    %ebx,           %eax
565         movl    76(%ebp),       %ecx
566         xorl    %edi,           %eax
567         xorl    %edi,           %edx
568         xorl    %ecx,           %edx
569         andl    $0xfcfcfcfc,    %eax
570         xorl    %ebx,           %ebx
571         andl    $0xcfcfcfcf,    %edx
572         xorl    %ecx,           %ecx
573         movb    %al,            %bl
574         movb    %ah,            %cl
575         rorl    $4,             %edx
576         movl          des_SPtrans(%ebx),%ebp
577         movb    %dl,            %bl
578         xorl    %ebp,           %esi
579         movl    0x200+des_SPtrans(%ecx),%ebp
580         xorl    %ebp,           %esi
581         movb    %dh,            %cl
582         shrl    $16,            %eax
583         movl    0x100+des_SPtrans(%ebx),%ebp
584         xorl    %ebp,           %esi
585         movb    %ah,            %bl
586         shrl    $16,            %edx
587         movl    0x300+des_SPtrans(%ecx),%ebp
588         xorl    %ebp,           %esi
589         movl    28(%esp),       %ebp
590         movb    %dh,            %cl
591         andl    $0xff,          %eax
592         andl    $0xff,          %edx
593         movl    0x600+des_SPtrans(%ebx),%ebx
594         xorl    %ebx,           %esi
595         movl    0x700+des_SPtrans(%ecx),%ebx
596         xorl    %ebx,           %esi
597         movl    0x400+des_SPtrans(%eax),%ebx
598         xorl    %ebx,           %esi
599         movl    0x500+des_SPtrans(%edx),%ebx
600         xorl    %ebx,           %esi
601
602         /* Round 10 */
603         movl    32(%esp),       %eax
604         movl    %esi,           %edx
605         shrl    $16,            %edx
606         movl    36(%esp),       %ecx
607         xorl    %esi,           %edx
608         andl    %edx,           %eax
609         andl    %ecx,           %edx
610         movl    %eax,           %ebx
611         sall    $16,            %ebx
612         movl    %edx,           %ecx
613         sall    $16,            %ecx
614         xorl    %ebx,           %eax
615         xorl    %ecx,           %edx
616         movl    80(%ebp),       %ebx
617         xorl    %ebx,           %eax
618         movl    84(%ebp),       %ecx
619         xorl    %esi,           %eax
620         xorl    %esi,           %edx
621         xorl    %ecx,           %edx
622         andl    $0xfcfcfcfc,    %eax
623         xorl    %ebx,           %ebx
624         andl    $0xcfcfcfcf,    %edx
625         xorl    %ecx,           %ecx
626         movb    %al,            %bl
627         movb    %ah,            %cl
628         rorl    $4,             %edx
629         movl          des_SPtrans(%ebx),%ebp
630         movb    %dl,            %bl
631         xorl    %ebp,           %edi
632         movl    0x200+des_SPtrans(%ecx),%ebp
633         xorl    %ebp,           %edi
634         movb    %dh,            %cl
635         shrl    $16,            %eax
636         movl    0x100+des_SPtrans(%ebx),%ebp
637         xorl    %ebp,           %edi
638         movb    %ah,            %bl
639         shrl    $16,            %edx
640         movl    0x300+des_SPtrans(%ecx),%ebp
641         xorl    %ebp,           %edi
642         movl    28(%esp),       %ebp
643         movb    %dh,            %cl
644         andl    $0xff,          %eax
645         andl    $0xff,          %edx
646         movl    0x600+des_SPtrans(%ebx),%ebx
647         xorl    %ebx,           %edi
648         movl    0x700+des_SPtrans(%ecx),%ebx
649         xorl    %ebx,           %edi
650         movl    0x400+des_SPtrans(%eax),%ebx
651         xorl    %ebx,           %edi
652         movl    0x500+des_SPtrans(%edx),%ebx
653         xorl    %ebx,           %edi
654
655         /* Round 11 */
656         movl    32(%esp),       %eax
657         movl    %edi,           %edx
658         shrl    $16,            %edx
659         movl    36(%esp),       %ecx
660         xorl    %edi,           %edx
661         andl    %edx,           %eax
662         andl    %ecx,           %edx
663         movl    %eax,           %ebx
664         sall    $16,            %ebx
665         movl    %edx,           %ecx
666         sall    $16,            %ecx
667         xorl    %ebx,           %eax
668         xorl    %ecx,           %edx
669         movl    88(%ebp),       %ebx
670         xorl    %ebx,           %eax
671         movl    92(%ebp),       %ecx
672         xorl    %edi,           %eax
673         xorl    %edi,           %edx
674         xorl    %ecx,           %edx
675         andl    $0xfcfcfcfc,    %eax
676         xorl    %ebx,           %ebx
677         andl    $0xcfcfcfcf,    %edx
678         xorl    %ecx,           %ecx
679         movb    %al,            %bl
680         movb    %ah,            %cl
681         rorl    $4,             %edx
682         movl          des_SPtrans(%ebx),%ebp
683         movb    %dl,            %bl
684         xorl    %ebp,           %esi
685         movl    0x200+des_SPtrans(%ecx),%ebp
686         xorl    %ebp,           %esi
687         movb    %dh,            %cl
688         shrl    $16,            %eax
689         movl    0x100+des_SPtrans(%ebx),%ebp
690         xorl    %ebp,           %esi
691         movb    %ah,            %bl
692         shrl    $16,            %edx
693         movl    0x300+des_SPtrans(%ecx),%ebp
694         xorl    %ebp,           %esi
695         movl    28(%esp),       %ebp
696         movb    %dh,            %cl
697         andl    $0xff,          %eax
698         andl    $0xff,          %edx
699         movl    0x600+des_SPtrans(%ebx),%ebx
700         xorl    %ebx,           %esi
701         movl    0x700+des_SPtrans(%ecx),%ebx
702         xorl    %ebx,           %esi
703         movl    0x400+des_SPtrans(%eax),%ebx
704         xorl    %ebx,           %esi
705         movl    0x500+des_SPtrans(%edx),%ebx
706         xorl    %ebx,           %esi
707
708         /* Round 12 */
709         movl    32(%esp),       %eax
710         movl    %esi,           %edx
711         shrl    $16,            %edx
712         movl    36(%esp),       %ecx
713         xorl    %esi,           %edx
714         andl    %edx,           %eax
715         andl    %ecx,           %edx
716         movl    %eax,           %ebx
717         sall    $16,            %ebx
718         movl    %edx,           %ecx
719         sall    $16,            %ecx
720         xorl    %ebx,           %eax
721         xorl    %ecx,           %edx
722         movl    96(%ebp),       %ebx
723         xorl    %ebx,           %eax
724         movl    100(%ebp),      %ecx
725         xorl    %esi,           %eax
726         xorl    %esi,           %edx
727         xorl    %ecx,           %edx
728         andl    $0xfcfcfcfc,    %eax
729         xorl    %ebx,           %ebx
730         andl    $0xcfcfcfcf,    %edx
731         xorl    %ecx,           %ecx
732         movb    %al,            %bl
733         movb    %ah,            %cl
734         rorl    $4,             %edx
735         movl          des_SPtrans(%ebx),%ebp
736         movb    %dl,            %bl
737         xorl    %ebp,           %edi
738         movl    0x200+des_SPtrans(%ecx),%ebp
739         xorl    %ebp,           %edi
740         movb    %dh,            %cl
741         shrl    $16,            %eax
742         movl    0x100+des_SPtrans(%ebx),%ebp
743         xorl    %ebp,           %edi
744         movb    %ah,            %bl
745         shrl    $16,            %edx
746         movl    0x300+des_SPtrans(%ecx),%ebp
747         xorl    %ebp,           %edi
748         movl    28(%esp),       %ebp
749         movb    %dh,            %cl
750         andl    $0xff,          %eax
751         andl    $0xff,          %edx
752         movl    0x600+des_SPtrans(%ebx),%ebx
753         xorl    %ebx,           %edi
754         movl    0x700+des_SPtrans(%ecx),%ebx
755         xorl    %ebx,           %edi
756         movl    0x400+des_SPtrans(%eax),%ebx
757         xorl    %ebx,           %edi
758         movl    0x500+des_SPtrans(%edx),%ebx
759         xorl    %ebx,           %edi
760
761         /* Round 13 */
762         movl    32(%esp),       %eax
763         movl    %edi,           %edx
764         shrl    $16,            %edx
765         movl    36(%esp),       %ecx
766         xorl    %edi,           %edx
767         andl    %edx,           %eax
768         andl    %ecx,           %edx
769         movl    %eax,           %ebx
770         sall    $16,            %ebx
771         movl    %edx,           %ecx
772         sall    $16,            %ecx
773         xorl    %ebx,           %eax
774         xorl    %ecx,           %edx
775         movl    104(%ebp),      %ebx
776         xorl    %ebx,           %eax
777         movl    108(%ebp),      %ecx
778         xorl    %edi,           %eax
779         xorl    %edi,           %edx
780         xorl    %ecx,           %edx
781         andl    $0xfcfcfcfc,    %eax
782         xorl    %ebx,           %ebx
783         andl    $0xcfcfcfcf,    %edx
784         xorl    %ecx,           %ecx
785         movb    %al,            %bl
786         movb    %ah,            %cl
787         rorl    $4,             %edx
788         movl          des_SPtrans(%ebx),%ebp
789         movb    %dl,            %bl
790         xorl    %ebp,           %esi
791         movl    0x200+des_SPtrans(%ecx),%ebp
792         xorl    %ebp,           %esi
793         movb    %dh,            %cl
794         shrl    $16,            %eax
795         movl    0x100+des_SPtrans(%ebx),%ebp
796         xorl    %ebp,           %esi
797         movb    %ah,            %bl
798         shrl    $16,            %edx
799         movl    0x300+des_SPtrans(%ecx),%ebp
800         xorl    %ebp,           %esi
801         movl    28(%esp),       %ebp
802         movb    %dh,            %cl
803         andl    $0xff,          %eax
804         andl    $0xff,          %edx
805         movl    0x600+des_SPtrans(%ebx),%ebx
806         xorl    %ebx,           %esi
807         movl    0x700+des_SPtrans(%ecx),%ebx
808         xorl    %ebx,           %esi
809         movl    0x400+des_SPtrans(%eax),%ebx
810         xorl    %ebx,           %esi
811         movl    0x500+des_SPtrans(%edx),%ebx
812         xorl    %ebx,           %esi
813
814         /* Round 14 */
815         movl    32(%esp),       %eax
816         movl    %esi,           %edx
817         shrl    $16,            %edx
818         movl    36(%esp),       %ecx
819         xorl    %esi,           %edx
820         andl    %edx,           %eax
821         andl    %ecx,           %edx
822         movl    %eax,           %ebx
823         sall    $16,            %ebx
824         movl    %edx,           %ecx
825         sall    $16,            %ecx
826         xorl    %ebx,           %eax
827         xorl    %ecx,           %edx
828         movl    112(%ebp),      %ebx
829         xorl    %ebx,           %eax
830         movl    116(%ebp),      %ecx
831         xorl    %esi,           %eax
832         xorl    %esi,           %edx
833         xorl    %ecx,           %edx
834         andl    $0xfcfcfcfc,    %eax
835         xorl    %ebx,           %ebx
836         andl    $0xcfcfcfcf,    %edx
837         xorl    %ecx,           %ecx
838         movb    %al,            %bl
839         movb    %ah,            %cl
840         rorl    $4,             %edx
841         movl          des_SPtrans(%ebx),%ebp
842         movb    %dl,            %bl
843         xorl    %ebp,           %edi
844         movl    0x200+des_SPtrans(%ecx),%ebp
845         xorl    %ebp,           %edi
846         movb    %dh,            %cl
847         shrl    $16,            %eax
848         movl    0x100+des_SPtrans(%ebx),%ebp
849         xorl    %ebp,           %edi
850         movb    %ah,            %bl
851         shrl    $16,            %edx
852         movl    0x300+des_SPtrans(%ecx),%ebp
853         xorl    %ebp,           %edi
854         movl    28(%esp),       %ebp
855         movb    %dh,            %cl
856         andl    $0xff,          %eax
857         andl    $0xff,          %edx
858         movl    0x600+des_SPtrans(%ebx),%ebx
859         xorl    %ebx,           %edi
860         movl    0x700+des_SPtrans(%ecx),%ebx
861         xorl    %ebx,           %edi
862         movl    0x400+des_SPtrans(%eax),%ebx
863         xorl    %ebx,           %edi
864         movl    0x500+des_SPtrans(%edx),%ebx
865         xorl    %ebx,           %edi
866
867         /* Round 15 */
868         movl    32(%esp),       %eax
869         movl    %edi,           %edx
870         shrl    $16,            %edx
871         movl    36(%esp),       %ecx
872         xorl    %edi,           %edx
873         andl    %edx,           %eax
874         andl    %ecx,           %edx
875         movl    %eax,           %ebx
876         sall    $16,            %ebx
877         movl    %edx,           %ecx
878         sall    $16,            %ecx
879         xorl    %ebx,           %eax
880         xorl    %ecx,           %edx
881         movl    120(%ebp),      %ebx
882         xorl    %ebx,           %eax
883         movl    124(%ebp),      %ecx
884         xorl    %edi,           %eax
885         xorl    %edi,           %edx
886         xorl    %ecx,           %edx
887         andl    $0xfcfcfcfc,    %eax
888         xorl    %ebx,           %ebx
889         andl    $0xcfcfcfcf,    %edx
890         xorl    %ecx,           %ecx
891         movb    %al,            %bl
892         movb    %ah,            %cl
893         rorl    $4,             %edx
894         movl          des_SPtrans(%ebx),%ebp
895         movb    %dl,            %bl
896         xorl    %ebp,           %esi
897         movl    0x200+des_SPtrans(%ecx),%ebp
898         xorl    %ebp,           %esi
899         movb    %dh,            %cl
900         shrl    $16,            %eax
901         movl    0x100+des_SPtrans(%ebx),%ebp
902         xorl    %ebp,           %esi
903         movb    %ah,            %bl
904         shrl    $16,            %edx
905         movl    0x300+des_SPtrans(%ecx),%ebp
906         xorl    %ebp,           %esi
907         movl    28(%esp),       %ebp
908         movb    %dh,            %cl
909         andl    $0xff,          %eax
910         andl    $0xff,          %edx
911         movl    0x600+des_SPtrans(%ebx),%ebx
912         xorl    %ebx,           %esi
913         movl    0x700+des_SPtrans(%ecx),%ebx
914         xorl    %ebx,           %esi
915         movl    0x400+des_SPtrans(%eax),%ebx
916         xorl    %ebx,           %esi
917         movl    0x500+des_SPtrans(%edx),%ebx
918         xorl    %ebx,           %esi
919         movl    (%esp),         %ebx
920         movl    %edi,           %eax
921         decl    %ebx
922         movl    %esi,           %edi
923         movl    %eax,           %esi
924         movl    %ebx,           (%esp)
925         jnz     .L000start
926
927         /* FP */
928         movl    24(%esp),       %edx
929 .byte 209
930 .byte 207               /* rorl $1 %edi */
931         movl    %esi,           %eax
932         xorl    %edi,           %esi
933         andl    $0xaaaaaaaa,    %esi
934         xorl    %esi,           %eax
935         xorl    %esi,           %edi
936
937         roll    $23,            %eax
938         movl    %eax,           %esi
939         xorl    %edi,           %eax
940         andl    $0x03fc03fc,    %eax
941         xorl    %eax,           %esi
942         xorl    %eax,           %edi
943
944         roll    $10,            %esi
945         movl    %esi,           %eax
946         xorl    %edi,           %esi
947         andl    $0x33333333,    %esi
948         xorl    %esi,           %eax
949         xorl    %esi,           %edi
950
951         roll    $18,            %edi
952         movl    %edi,           %esi
953         xorl    %eax,           %edi
954         andl    $0xfff0000f,    %edi
955         xorl    %edi,           %esi
956         xorl    %edi,           %eax
957
958         roll    $12,            %esi
959         movl    %esi,           %edi
960         xorl    %eax,           %esi
961         andl    $0xf0f0f0f0,    %esi
962         xorl    %esi,           %edi
963         xorl    %esi,           %eax
964
965         rorl    $4,             %eax
966         movl    %eax,           (%edx)
967         movl    %edi,           4(%edx)
968         popl    %ecx
969         popl    %edi
970         popl    %esi
971         popl    %ebx
972         popl    %ebp
973         ret
974 .fcrypt_body_end:
975         SIZE(fcrypt_body,.fcrypt_body_end-fcrypt_body)
976 .ident  "fcrypt_body"