cast-586.S revision 299966
1# $FreeBSD: stable/10/secure/lib/libcrypto/i386/cast-586.S 299966 2016-05-16 19:30:27Z jkim $
2# Do not modify. This file is auto-generated from cast-586.pl.
3#ifdef PIC
4.file	"cast-586.S"
5.text
6.globl	CAST_encrypt
7.type	CAST_encrypt,@function
8.align	16
9CAST_encrypt:
10.L_CAST_encrypt_begin:
11
12	pushl	%ebp
13	pushl	%ebx
14	movl	12(%esp),%ebx
15	movl	16(%esp),%ebp
16	pushl	%esi
17	pushl	%edi
18
19	movl	(%ebx),%edi
20	movl	4(%ebx),%esi
21
22	movl	128(%ebp),%eax
23	pushl	%eax
24	xorl	%eax,%eax
25
26	movl	(%ebp),%edx
27	movl	4(%ebp),%ecx
28	addl	%esi,%edx
29	roll	%cl,%edx
30	movl	%edx,%ebx
31	xorl	%ecx,%ecx
32	movb	%dh,%cl
33	andl	$255,%ebx
34	shrl	$16,%edx
35	xorl	%eax,%eax
36	movb	%dh,%al
37	andl	$255,%edx
38	movl	CAST_S_table0(,%ecx,4),%ecx
39	movl	CAST_S_table1(,%ebx,4),%ebx
40	xorl	%ebx,%ecx
41	movl	CAST_S_table2(,%eax,4),%ebx
42	subl	%ebx,%ecx
43	movl	CAST_S_table3(,%edx,4),%ebx
44	addl	%ebx,%ecx
45	xorl	%ecx,%edi
46
47	movl	8(%ebp),%edx
48	movl	12(%ebp),%ecx
49	xorl	%edi,%edx
50	roll	%cl,%edx
51	movl	%edx,%ebx
52	xorl	%ecx,%ecx
53	movb	%dh,%cl
54	andl	$255,%ebx
55	shrl	$16,%edx
56	xorl	%eax,%eax
57	movb	%dh,%al
58	andl	$255,%edx
59	movl	CAST_S_table0(,%ecx,4),%ecx
60	movl	CAST_S_table1(,%ebx,4),%ebx
61	subl	%ebx,%ecx
62	movl	CAST_S_table2(,%eax,4),%ebx
63	addl	%ebx,%ecx
64	movl	CAST_S_table3(,%edx,4),%ebx
65	xorl	%ebx,%ecx
66	xorl	%ecx,%esi
67
68	movl	16(%ebp),%edx
69	movl	20(%ebp),%ecx
70	subl	%esi,%edx
71	roll	%cl,%edx
72	movl	%edx,%ebx
73	xorl	%ecx,%ecx
74	movb	%dh,%cl
75	andl	$255,%ebx
76	shrl	$16,%edx
77	xorl	%eax,%eax
78	movb	%dh,%al
79	andl	$255,%edx
80	movl	CAST_S_table0(,%ecx,4),%ecx
81	movl	CAST_S_table1(,%ebx,4),%ebx
82	addl	%ebx,%ecx
83	movl	CAST_S_table2(,%eax,4),%ebx
84	xorl	%ebx,%ecx
85	movl	CAST_S_table3(,%edx,4),%ebx
86	subl	%ebx,%ecx
87	xorl	%ecx,%edi
88
89	movl	24(%ebp),%edx
90	movl	28(%ebp),%ecx
91	addl	%edi,%edx
92	roll	%cl,%edx
93	movl	%edx,%ebx
94	xorl	%ecx,%ecx
95	movb	%dh,%cl
96	andl	$255,%ebx
97	shrl	$16,%edx
98	xorl	%eax,%eax
99	movb	%dh,%al
100	andl	$255,%edx
101	movl	CAST_S_table0(,%ecx,4),%ecx
102	movl	CAST_S_table1(,%ebx,4),%ebx
103	xorl	%ebx,%ecx
104	movl	CAST_S_table2(,%eax,4),%ebx
105	subl	%ebx,%ecx
106	movl	CAST_S_table3(,%edx,4),%ebx
107	addl	%ebx,%ecx
108	xorl	%ecx,%esi
109
110	movl	32(%ebp),%edx
111	movl	36(%ebp),%ecx
112	xorl	%esi,%edx
113	roll	%cl,%edx
114	movl	%edx,%ebx
115	xorl	%ecx,%ecx
116	movb	%dh,%cl
117	andl	$255,%ebx
118	shrl	$16,%edx
119	xorl	%eax,%eax
120	movb	%dh,%al
121	andl	$255,%edx
122	movl	CAST_S_table0(,%ecx,4),%ecx
123	movl	CAST_S_table1(,%ebx,4),%ebx
124	subl	%ebx,%ecx
125	movl	CAST_S_table2(,%eax,4),%ebx
126	addl	%ebx,%ecx
127	movl	CAST_S_table3(,%edx,4),%ebx
128	xorl	%ebx,%ecx
129	xorl	%ecx,%edi
130
131	movl	40(%ebp),%edx
132	movl	44(%ebp),%ecx
133	subl	%edi,%edx
134	roll	%cl,%edx
135	movl	%edx,%ebx
136	xorl	%ecx,%ecx
137	movb	%dh,%cl
138	andl	$255,%ebx
139	shrl	$16,%edx
140	xorl	%eax,%eax
141	movb	%dh,%al
142	andl	$255,%edx
143	movl	CAST_S_table0(,%ecx,4),%ecx
144	movl	CAST_S_table1(,%ebx,4),%ebx
145	addl	%ebx,%ecx
146	movl	CAST_S_table2(,%eax,4),%ebx
147	xorl	%ebx,%ecx
148	movl	CAST_S_table3(,%edx,4),%ebx
149	subl	%ebx,%ecx
150	xorl	%ecx,%esi
151
152	movl	48(%ebp),%edx
153	movl	52(%ebp),%ecx
154	addl	%esi,%edx
155	roll	%cl,%edx
156	movl	%edx,%ebx
157	xorl	%ecx,%ecx
158	movb	%dh,%cl
159	andl	$255,%ebx
160	shrl	$16,%edx
161	xorl	%eax,%eax
162	movb	%dh,%al
163	andl	$255,%edx
164	movl	CAST_S_table0(,%ecx,4),%ecx
165	movl	CAST_S_table1(,%ebx,4),%ebx
166	xorl	%ebx,%ecx
167	movl	CAST_S_table2(,%eax,4),%ebx
168	subl	%ebx,%ecx
169	movl	CAST_S_table3(,%edx,4),%ebx
170	addl	%ebx,%ecx
171	xorl	%ecx,%edi
172
173	movl	56(%ebp),%edx
174	movl	60(%ebp),%ecx
175	xorl	%edi,%edx
176	roll	%cl,%edx
177	movl	%edx,%ebx
178	xorl	%ecx,%ecx
179	movb	%dh,%cl
180	andl	$255,%ebx
181	shrl	$16,%edx
182	xorl	%eax,%eax
183	movb	%dh,%al
184	andl	$255,%edx
185	movl	CAST_S_table0(,%ecx,4),%ecx
186	movl	CAST_S_table1(,%ebx,4),%ebx
187	subl	%ebx,%ecx
188	movl	CAST_S_table2(,%eax,4),%ebx
189	addl	%ebx,%ecx
190	movl	CAST_S_table3(,%edx,4),%ebx
191	xorl	%ebx,%ecx
192	xorl	%ecx,%esi
193
194	movl	64(%ebp),%edx
195	movl	68(%ebp),%ecx
196	subl	%esi,%edx
197	roll	%cl,%edx
198	movl	%edx,%ebx
199	xorl	%ecx,%ecx
200	movb	%dh,%cl
201	andl	$255,%ebx
202	shrl	$16,%edx
203	xorl	%eax,%eax
204	movb	%dh,%al
205	andl	$255,%edx
206	movl	CAST_S_table0(,%ecx,4),%ecx
207	movl	CAST_S_table1(,%ebx,4),%ebx
208	addl	%ebx,%ecx
209	movl	CAST_S_table2(,%eax,4),%ebx
210	xorl	%ebx,%ecx
211	movl	CAST_S_table3(,%edx,4),%ebx
212	subl	%ebx,%ecx
213	xorl	%ecx,%edi
214
215	movl	72(%ebp),%edx
216	movl	76(%ebp),%ecx
217	addl	%edi,%edx
218	roll	%cl,%edx
219	movl	%edx,%ebx
220	xorl	%ecx,%ecx
221	movb	%dh,%cl
222	andl	$255,%ebx
223	shrl	$16,%edx
224	xorl	%eax,%eax
225	movb	%dh,%al
226	andl	$255,%edx
227	movl	CAST_S_table0(,%ecx,4),%ecx
228	movl	CAST_S_table1(,%ebx,4),%ebx
229	xorl	%ebx,%ecx
230	movl	CAST_S_table2(,%eax,4),%ebx
231	subl	%ebx,%ecx
232	movl	CAST_S_table3(,%edx,4),%ebx
233	addl	%ebx,%ecx
234	xorl	%ecx,%esi
235
236	movl	80(%ebp),%edx
237	movl	84(%ebp),%ecx
238	xorl	%esi,%edx
239	roll	%cl,%edx
240	movl	%edx,%ebx
241	xorl	%ecx,%ecx
242	movb	%dh,%cl
243	andl	$255,%ebx
244	shrl	$16,%edx
245	xorl	%eax,%eax
246	movb	%dh,%al
247	andl	$255,%edx
248	movl	CAST_S_table0(,%ecx,4),%ecx
249	movl	CAST_S_table1(,%ebx,4),%ebx
250	subl	%ebx,%ecx
251	movl	CAST_S_table2(,%eax,4),%ebx
252	addl	%ebx,%ecx
253	movl	CAST_S_table3(,%edx,4),%ebx
254	xorl	%ebx,%ecx
255	xorl	%ecx,%edi
256
257	movl	88(%ebp),%edx
258	movl	92(%ebp),%ecx
259	subl	%edi,%edx
260	roll	%cl,%edx
261	movl	%edx,%ebx
262	xorl	%ecx,%ecx
263	movb	%dh,%cl
264	andl	$255,%ebx
265	shrl	$16,%edx
266	xorl	%eax,%eax
267	movb	%dh,%al
268	andl	$255,%edx
269	movl	CAST_S_table0(,%ecx,4),%ecx
270	movl	CAST_S_table1(,%ebx,4),%ebx
271	addl	%ebx,%ecx
272	movl	CAST_S_table2(,%eax,4),%ebx
273	xorl	%ebx,%ecx
274	movl	CAST_S_table3(,%edx,4),%ebx
275	subl	%ebx,%ecx
276	xorl	%ecx,%esi
277
278	popl	%edx
279	orl	%edx,%edx
280	jnz	.L000cast_enc_done
281
282	movl	96(%ebp),%edx
283	movl	100(%ebp),%ecx
284	addl	%esi,%edx
285	roll	%cl,%edx
286	movl	%edx,%ebx
287	xorl	%ecx,%ecx
288	movb	%dh,%cl
289	andl	$255,%ebx
290	shrl	$16,%edx
291	xorl	%eax,%eax
292	movb	%dh,%al
293	andl	$255,%edx
294	movl	CAST_S_table0(,%ecx,4),%ecx
295	movl	CAST_S_table1(,%ebx,4),%ebx
296	xorl	%ebx,%ecx
297	movl	CAST_S_table2(,%eax,4),%ebx
298	subl	%ebx,%ecx
299	movl	CAST_S_table3(,%edx,4),%ebx
300	addl	%ebx,%ecx
301	xorl	%ecx,%edi
302
303	movl	104(%ebp),%edx
304	movl	108(%ebp),%ecx
305	xorl	%edi,%edx
306	roll	%cl,%edx
307	movl	%edx,%ebx
308	xorl	%ecx,%ecx
309	movb	%dh,%cl
310	andl	$255,%ebx
311	shrl	$16,%edx
312	xorl	%eax,%eax
313	movb	%dh,%al
314	andl	$255,%edx
315	movl	CAST_S_table0(,%ecx,4),%ecx
316	movl	CAST_S_table1(,%ebx,4),%ebx
317	subl	%ebx,%ecx
318	movl	CAST_S_table2(,%eax,4),%ebx
319	addl	%ebx,%ecx
320	movl	CAST_S_table3(,%edx,4),%ebx
321	xorl	%ebx,%ecx
322	xorl	%ecx,%esi
323
324	movl	112(%ebp),%edx
325	movl	116(%ebp),%ecx
326	subl	%esi,%edx
327	roll	%cl,%edx
328	movl	%edx,%ebx
329	xorl	%ecx,%ecx
330	movb	%dh,%cl
331	andl	$255,%ebx
332	shrl	$16,%edx
333	xorl	%eax,%eax
334	movb	%dh,%al
335	andl	$255,%edx
336	movl	CAST_S_table0(,%ecx,4),%ecx
337	movl	CAST_S_table1(,%ebx,4),%ebx
338	addl	%ebx,%ecx
339	movl	CAST_S_table2(,%eax,4),%ebx
340	xorl	%ebx,%ecx
341	movl	CAST_S_table3(,%edx,4),%ebx
342	subl	%ebx,%ecx
343	xorl	%ecx,%edi
344
345	movl	120(%ebp),%edx
346	movl	124(%ebp),%ecx
347	addl	%edi,%edx
348	roll	%cl,%edx
349	movl	%edx,%ebx
350	xorl	%ecx,%ecx
351	movb	%dh,%cl
352	andl	$255,%ebx
353	shrl	$16,%edx
354	xorl	%eax,%eax
355	movb	%dh,%al
356	andl	$255,%edx
357	movl	CAST_S_table0(,%ecx,4),%ecx
358	movl	CAST_S_table1(,%ebx,4),%ebx
359	xorl	%ebx,%ecx
360	movl	CAST_S_table2(,%eax,4),%ebx
361	subl	%ebx,%ecx
362	movl	CAST_S_table3(,%edx,4),%ebx
363	addl	%ebx,%ecx
364	xorl	%ecx,%esi
365.L000cast_enc_done:
366	nop
367	movl	20(%esp),%eax
368	movl	%edi,4(%eax)
369	movl	%esi,(%eax)
370	popl	%edi
371	popl	%esi
372	popl	%ebx
373	popl	%ebp
374	ret
375.size	CAST_encrypt,.-.L_CAST_encrypt_begin
376.globl	CAST_decrypt
377.type	CAST_decrypt,@function
378.align	16
379CAST_decrypt:
380.L_CAST_decrypt_begin:
381
382	pushl	%ebp
383	pushl	%ebx
384	movl	12(%esp),%ebx
385	movl	16(%esp),%ebp
386	pushl	%esi
387	pushl	%edi
388
389	movl	(%ebx),%edi
390	movl	4(%ebx),%esi
391
392	movl	128(%ebp),%eax
393	orl	%eax,%eax
394	jnz	.L001cast_dec_skip
395	xorl	%eax,%eax
396
397	movl	120(%ebp),%edx
398	movl	124(%ebp),%ecx
399	addl	%esi,%edx
400	roll	%cl,%edx
401	movl	%edx,%ebx
402	xorl	%ecx,%ecx
403	movb	%dh,%cl
404	andl	$255,%ebx
405	shrl	$16,%edx
406	xorl	%eax,%eax
407	movb	%dh,%al
408	andl	$255,%edx
409	movl	CAST_S_table0(,%ecx,4),%ecx
410	movl	CAST_S_table1(,%ebx,4),%ebx
411	xorl	%ebx,%ecx
412	movl	CAST_S_table2(,%eax,4),%ebx
413	subl	%ebx,%ecx
414	movl	CAST_S_table3(,%edx,4),%ebx
415	addl	%ebx,%ecx
416	xorl	%ecx,%edi
417
418	movl	112(%ebp),%edx
419	movl	116(%ebp),%ecx
420	subl	%edi,%edx
421	roll	%cl,%edx
422	movl	%edx,%ebx
423	xorl	%ecx,%ecx
424	movb	%dh,%cl
425	andl	$255,%ebx
426	shrl	$16,%edx
427	xorl	%eax,%eax
428	movb	%dh,%al
429	andl	$255,%edx
430	movl	CAST_S_table0(,%ecx,4),%ecx
431	movl	CAST_S_table1(,%ebx,4),%ebx
432	addl	%ebx,%ecx
433	movl	CAST_S_table2(,%eax,4),%ebx
434	xorl	%ebx,%ecx
435	movl	CAST_S_table3(,%edx,4),%ebx
436	subl	%ebx,%ecx
437	xorl	%ecx,%esi
438
439	movl	104(%ebp),%edx
440	movl	108(%ebp),%ecx
441	xorl	%esi,%edx
442	roll	%cl,%edx
443	movl	%edx,%ebx
444	xorl	%ecx,%ecx
445	movb	%dh,%cl
446	andl	$255,%ebx
447	shrl	$16,%edx
448	xorl	%eax,%eax
449	movb	%dh,%al
450	andl	$255,%edx
451	movl	CAST_S_table0(,%ecx,4),%ecx
452	movl	CAST_S_table1(,%ebx,4),%ebx
453	subl	%ebx,%ecx
454	movl	CAST_S_table2(,%eax,4),%ebx
455	addl	%ebx,%ecx
456	movl	CAST_S_table3(,%edx,4),%ebx
457	xorl	%ebx,%ecx
458	xorl	%ecx,%edi
459
460	movl	96(%ebp),%edx
461	movl	100(%ebp),%ecx
462	addl	%edi,%edx
463	roll	%cl,%edx
464	movl	%edx,%ebx
465	xorl	%ecx,%ecx
466	movb	%dh,%cl
467	andl	$255,%ebx
468	shrl	$16,%edx
469	xorl	%eax,%eax
470	movb	%dh,%al
471	andl	$255,%edx
472	movl	CAST_S_table0(,%ecx,4),%ecx
473	movl	CAST_S_table1(,%ebx,4),%ebx
474	xorl	%ebx,%ecx
475	movl	CAST_S_table2(,%eax,4),%ebx
476	subl	%ebx,%ecx
477	movl	CAST_S_table3(,%edx,4),%ebx
478	addl	%ebx,%ecx
479	xorl	%ecx,%esi
480.L001cast_dec_skip:
481
482	movl	88(%ebp),%edx
483	movl	92(%ebp),%ecx
484	subl	%esi,%edx
485	roll	%cl,%edx
486	movl	%edx,%ebx
487	xorl	%ecx,%ecx
488	movb	%dh,%cl
489	andl	$255,%ebx
490	shrl	$16,%edx
491	xorl	%eax,%eax
492	movb	%dh,%al
493	andl	$255,%edx
494	movl	CAST_S_table0(,%ecx,4),%ecx
495	movl	CAST_S_table1(,%ebx,4),%ebx
496	addl	%ebx,%ecx
497	movl	CAST_S_table2(,%eax,4),%ebx
498	xorl	%ebx,%ecx
499	movl	CAST_S_table3(,%edx,4),%ebx
500	subl	%ebx,%ecx
501	xorl	%ecx,%edi
502
503	movl	80(%ebp),%edx
504	movl	84(%ebp),%ecx
505	xorl	%edi,%edx
506	roll	%cl,%edx
507	movl	%edx,%ebx
508	xorl	%ecx,%ecx
509	movb	%dh,%cl
510	andl	$255,%ebx
511	shrl	$16,%edx
512	xorl	%eax,%eax
513	movb	%dh,%al
514	andl	$255,%edx
515	movl	CAST_S_table0(,%ecx,4),%ecx
516	movl	CAST_S_table1(,%ebx,4),%ebx
517	subl	%ebx,%ecx
518	movl	CAST_S_table2(,%eax,4),%ebx
519	addl	%ebx,%ecx
520	movl	CAST_S_table3(,%edx,4),%ebx
521	xorl	%ebx,%ecx
522	xorl	%ecx,%esi
523
524	movl	72(%ebp),%edx
525	movl	76(%ebp),%ecx
526	addl	%esi,%edx
527	roll	%cl,%edx
528	movl	%edx,%ebx
529	xorl	%ecx,%ecx
530	movb	%dh,%cl
531	andl	$255,%ebx
532	shrl	$16,%edx
533	xorl	%eax,%eax
534	movb	%dh,%al
535	andl	$255,%edx
536	movl	CAST_S_table0(,%ecx,4),%ecx
537	movl	CAST_S_table1(,%ebx,4),%ebx
538	xorl	%ebx,%ecx
539	movl	CAST_S_table2(,%eax,4),%ebx
540	subl	%ebx,%ecx
541	movl	CAST_S_table3(,%edx,4),%ebx
542	addl	%ebx,%ecx
543	xorl	%ecx,%edi
544
545	movl	64(%ebp),%edx
546	movl	68(%ebp),%ecx
547	subl	%edi,%edx
548	roll	%cl,%edx
549	movl	%edx,%ebx
550	xorl	%ecx,%ecx
551	movb	%dh,%cl
552	andl	$255,%ebx
553	shrl	$16,%edx
554	xorl	%eax,%eax
555	movb	%dh,%al
556	andl	$255,%edx
557	movl	CAST_S_table0(,%ecx,4),%ecx
558	movl	CAST_S_table1(,%ebx,4),%ebx
559	addl	%ebx,%ecx
560	movl	CAST_S_table2(,%eax,4),%ebx
561	xorl	%ebx,%ecx
562	movl	CAST_S_table3(,%edx,4),%ebx
563	subl	%ebx,%ecx
564	xorl	%ecx,%esi
565
566	movl	56(%ebp),%edx
567	movl	60(%ebp),%ecx
568	xorl	%esi,%edx
569	roll	%cl,%edx
570	movl	%edx,%ebx
571	xorl	%ecx,%ecx
572	movb	%dh,%cl
573	andl	$255,%ebx
574	shrl	$16,%edx
575	xorl	%eax,%eax
576	movb	%dh,%al
577	andl	$255,%edx
578	movl	CAST_S_table0(,%ecx,4),%ecx
579	movl	CAST_S_table1(,%ebx,4),%ebx
580	subl	%ebx,%ecx
581	movl	CAST_S_table2(,%eax,4),%ebx
582	addl	%ebx,%ecx
583	movl	CAST_S_table3(,%edx,4),%ebx
584	xorl	%ebx,%ecx
585	xorl	%ecx,%edi
586
587	movl	48(%ebp),%edx
588	movl	52(%ebp),%ecx
589	addl	%edi,%edx
590	roll	%cl,%edx
591	movl	%edx,%ebx
592	xorl	%ecx,%ecx
593	movb	%dh,%cl
594	andl	$255,%ebx
595	shrl	$16,%edx
596	xorl	%eax,%eax
597	movb	%dh,%al
598	andl	$255,%edx
599	movl	CAST_S_table0(,%ecx,4),%ecx
600	movl	CAST_S_table1(,%ebx,4),%ebx
601	xorl	%ebx,%ecx
602	movl	CAST_S_table2(,%eax,4),%ebx
603	subl	%ebx,%ecx
604	movl	CAST_S_table3(,%edx,4),%ebx
605	addl	%ebx,%ecx
606	xorl	%ecx,%esi
607
608	movl	40(%ebp),%edx
609	movl	44(%ebp),%ecx
610	subl	%esi,%edx
611	roll	%cl,%edx
612	movl	%edx,%ebx
613	xorl	%ecx,%ecx
614	movb	%dh,%cl
615	andl	$255,%ebx
616	shrl	$16,%edx
617	xorl	%eax,%eax
618	movb	%dh,%al
619	andl	$255,%edx
620	movl	CAST_S_table0(,%ecx,4),%ecx
621	movl	CAST_S_table1(,%ebx,4),%ebx
622	addl	%ebx,%ecx
623	movl	CAST_S_table2(,%eax,4),%ebx
624	xorl	%ebx,%ecx
625	movl	CAST_S_table3(,%edx,4),%ebx
626	subl	%ebx,%ecx
627	xorl	%ecx,%edi
628
629	movl	32(%ebp),%edx
630	movl	36(%ebp),%ecx
631	xorl	%edi,%edx
632	roll	%cl,%edx
633	movl	%edx,%ebx
634	xorl	%ecx,%ecx
635	movb	%dh,%cl
636	andl	$255,%ebx
637	shrl	$16,%edx
638	xorl	%eax,%eax
639	movb	%dh,%al
640	andl	$255,%edx
641	movl	CAST_S_table0(,%ecx,4),%ecx
642	movl	CAST_S_table1(,%ebx,4),%ebx
643	subl	%ebx,%ecx
644	movl	CAST_S_table2(,%eax,4),%ebx
645	addl	%ebx,%ecx
646	movl	CAST_S_table3(,%edx,4),%ebx
647	xorl	%ebx,%ecx
648	xorl	%ecx,%esi
649
650	movl	24(%ebp),%edx
651	movl	28(%ebp),%ecx
652	addl	%esi,%edx
653	roll	%cl,%edx
654	movl	%edx,%ebx
655	xorl	%ecx,%ecx
656	movb	%dh,%cl
657	andl	$255,%ebx
658	shrl	$16,%edx
659	xorl	%eax,%eax
660	movb	%dh,%al
661	andl	$255,%edx
662	movl	CAST_S_table0(,%ecx,4),%ecx
663	movl	CAST_S_table1(,%ebx,4),%ebx
664	xorl	%ebx,%ecx
665	movl	CAST_S_table2(,%eax,4),%ebx
666	subl	%ebx,%ecx
667	movl	CAST_S_table3(,%edx,4),%ebx
668	addl	%ebx,%ecx
669	xorl	%ecx,%edi
670
671	movl	16(%ebp),%edx
672	movl	20(%ebp),%ecx
673	subl	%edi,%edx
674	roll	%cl,%edx
675	movl	%edx,%ebx
676	xorl	%ecx,%ecx
677	movb	%dh,%cl
678	andl	$255,%ebx
679	shrl	$16,%edx
680	xorl	%eax,%eax
681	movb	%dh,%al
682	andl	$255,%edx
683	movl	CAST_S_table0(,%ecx,4),%ecx
684	movl	CAST_S_table1(,%ebx,4),%ebx
685	addl	%ebx,%ecx
686	movl	CAST_S_table2(,%eax,4),%ebx
687	xorl	%ebx,%ecx
688	movl	CAST_S_table3(,%edx,4),%ebx
689	subl	%ebx,%ecx
690	xorl	%ecx,%esi
691
692	movl	8(%ebp),%edx
693	movl	12(%ebp),%ecx
694	xorl	%esi,%edx
695	roll	%cl,%edx
696	movl	%edx,%ebx
697	xorl	%ecx,%ecx
698	movb	%dh,%cl
699	andl	$255,%ebx
700	shrl	$16,%edx
701	xorl	%eax,%eax
702	movb	%dh,%al
703	andl	$255,%edx
704	movl	CAST_S_table0(,%ecx,4),%ecx
705	movl	CAST_S_table1(,%ebx,4),%ebx
706	subl	%ebx,%ecx
707	movl	CAST_S_table2(,%eax,4),%ebx
708	addl	%ebx,%ecx
709	movl	CAST_S_table3(,%edx,4),%ebx
710	xorl	%ebx,%ecx
711	xorl	%ecx,%edi
712
713	movl	(%ebp),%edx
714	movl	4(%ebp),%ecx
715	addl	%edi,%edx
716	roll	%cl,%edx
717	movl	%edx,%ebx
718	xorl	%ecx,%ecx
719	movb	%dh,%cl
720	andl	$255,%ebx
721	shrl	$16,%edx
722	xorl	%eax,%eax
723	movb	%dh,%al
724	andl	$255,%edx
725	movl	CAST_S_table0(,%ecx,4),%ecx
726	movl	CAST_S_table1(,%ebx,4),%ebx
727	xorl	%ebx,%ecx
728	movl	CAST_S_table2(,%eax,4),%ebx
729	subl	%ebx,%ecx
730	movl	CAST_S_table3(,%edx,4),%ebx
731	addl	%ebx,%ecx
732	xorl	%ecx,%esi
733	nop
734	movl	20(%esp),%eax
735	movl	%edi,4(%eax)
736	movl	%esi,(%eax)
737	popl	%edi
738	popl	%esi
739	popl	%ebx
740	popl	%ebp
741	ret
742.size	CAST_decrypt,.-.L_CAST_decrypt_begin
743.globl	CAST_cbc_encrypt
744.type	CAST_cbc_encrypt,@function
745.align	16
746CAST_cbc_encrypt:
747.L_CAST_cbc_encrypt_begin:
748
749	pushl	%ebp
750	pushl	%ebx
751	pushl	%esi
752	pushl	%edi
753	movl	28(%esp),%ebp
754
755	movl	36(%esp),%ebx
756	movl	(%ebx),%esi
757	movl	4(%ebx),%edi
758	pushl	%edi
759	pushl	%esi
760	pushl	%edi
761	pushl	%esi
762	movl	%esp,%ebx
763	movl	36(%esp),%esi
764	movl	40(%esp),%edi
765
766	movl	56(%esp),%ecx
767
768	movl	48(%esp),%eax
769	pushl	%eax
770	pushl	%ebx
771	cmpl	$0,%ecx
772	jz	.L002decrypt
773	andl	$4294967288,%ebp
774	movl	8(%esp),%eax
775	movl	12(%esp),%ebx
776	jz	.L003encrypt_finish
777.L004encrypt_loop:
778	movl	(%esi),%ecx
779	movl	4(%esi),%edx
780	xorl	%ecx,%eax
781	xorl	%edx,%ebx
782	bswap	%eax
783	bswap	%ebx
784	movl	%eax,8(%esp)
785	movl	%ebx,12(%esp)
786	call	.L_CAST_encrypt_begin
787	movl	8(%esp),%eax
788	movl	12(%esp),%ebx
789	bswap	%eax
790	bswap	%ebx
791	movl	%eax,(%edi)
792	movl	%ebx,4(%edi)
793	addl	$8,%esi
794	addl	$8,%edi
795	subl	$8,%ebp
796	jnz	.L004encrypt_loop
797.L003encrypt_finish:
798	movl	52(%esp),%ebp
799	andl	$7,%ebp
800	jz	.L005finish
801	call	.L006PIC_point
802.L006PIC_point:
803	popl	%edx
804	leal	.L007cbc_enc_jmp_table-.L006PIC_point(%edx),%ecx
805	movl	(%ecx,%ebp,4),%ebp
806	addl	%edx,%ebp
807	xorl	%ecx,%ecx
808	xorl	%edx,%edx
809	jmp	*%ebp
810.L008ej7:
811	movb	6(%esi),%dh
812	shll	$8,%edx
813.L009ej6:
814	movb	5(%esi),%dh
815.L010ej5:
816	movb	4(%esi),%dl
817.L011ej4:
818	movl	(%esi),%ecx
819	jmp	.L012ejend
820.L013ej3:
821	movb	2(%esi),%ch
822	shll	$8,%ecx
823.L014ej2:
824	movb	1(%esi),%ch
825.L015ej1:
826	movb	(%esi),%cl
827.L012ejend:
828	xorl	%ecx,%eax
829	xorl	%edx,%ebx
830	bswap	%eax
831	bswap	%ebx
832	movl	%eax,8(%esp)
833	movl	%ebx,12(%esp)
834	call	.L_CAST_encrypt_begin
835	movl	8(%esp),%eax
836	movl	12(%esp),%ebx
837	bswap	%eax
838	bswap	%ebx
839	movl	%eax,(%edi)
840	movl	%ebx,4(%edi)
841	jmp	.L005finish
842.L002decrypt:
843	andl	$4294967288,%ebp
844	movl	16(%esp),%eax
845	movl	20(%esp),%ebx
846	jz	.L016decrypt_finish
847.L017decrypt_loop:
848	movl	(%esi),%eax
849	movl	4(%esi),%ebx
850	bswap	%eax
851	bswap	%ebx
852	movl	%eax,8(%esp)
853	movl	%ebx,12(%esp)
854	call	.L_CAST_decrypt_begin
855	movl	8(%esp),%eax
856	movl	12(%esp),%ebx
857	bswap	%eax
858	bswap	%ebx
859	movl	16(%esp),%ecx
860	movl	20(%esp),%edx
861	xorl	%eax,%ecx
862	xorl	%ebx,%edx
863	movl	(%esi),%eax
864	movl	4(%esi),%ebx
865	movl	%ecx,(%edi)
866	movl	%edx,4(%edi)
867	movl	%eax,16(%esp)
868	movl	%ebx,20(%esp)
869	addl	$8,%esi
870	addl	$8,%edi
871	subl	$8,%ebp
872	jnz	.L017decrypt_loop
873.L016decrypt_finish:
874	movl	52(%esp),%ebp
875	andl	$7,%ebp
876	jz	.L005finish
877	movl	(%esi),%eax
878	movl	4(%esi),%ebx
879	bswap	%eax
880	bswap	%ebx
881	movl	%eax,8(%esp)
882	movl	%ebx,12(%esp)
883	call	.L_CAST_decrypt_begin
884	movl	8(%esp),%eax
885	movl	12(%esp),%ebx
886	bswap	%eax
887	bswap	%ebx
888	movl	16(%esp),%ecx
889	movl	20(%esp),%edx
890	xorl	%eax,%ecx
891	xorl	%ebx,%edx
892	movl	(%esi),%eax
893	movl	4(%esi),%ebx
894.L018dj7:
895	rorl	$16,%edx
896	movb	%dl,6(%edi)
897	shrl	$16,%edx
898.L019dj6:
899	movb	%dh,5(%edi)
900.L020dj5:
901	movb	%dl,4(%edi)
902.L021dj4:
903	movl	%ecx,(%edi)
904	jmp	.L022djend
905.L023dj3:
906	rorl	$16,%ecx
907	movb	%cl,2(%edi)
908	shll	$16,%ecx
909.L024dj2:
910	movb	%ch,1(%esi)
911.L025dj1:
912	movb	%cl,(%esi)
913.L022djend:
914	jmp	.L005finish
915.L005finish:
916	movl	60(%esp),%ecx
917	addl	$24,%esp
918	movl	%eax,(%ecx)
919	movl	%ebx,4(%ecx)
920	popl	%edi
921	popl	%esi
922	popl	%ebx
923	popl	%ebp
924	ret
925.align	64
926.L007cbc_enc_jmp_table:
927.long	0
928.long	.L015ej1-.L006PIC_point
929.long	.L014ej2-.L006PIC_point
930.long	.L013ej3-.L006PIC_point
931.long	.L011ej4-.L006PIC_point
932.long	.L010ej5-.L006PIC_point
933.long	.L009ej6-.L006PIC_point
934.long	.L008ej7-.L006PIC_point
935.align	64
936.size	CAST_cbc_encrypt,.-.L_CAST_cbc_encrypt_begin
937#else
938.file	"cast-586.S"
939.text
940.globl	CAST_encrypt
941.type	CAST_encrypt,@function
942.align	16
943CAST_encrypt:
944.L_CAST_encrypt_begin:
945
946	pushl	%ebp
947	pushl	%ebx
948	movl	12(%esp),%ebx
949	movl	16(%esp),%ebp
950	pushl	%esi
951	pushl	%edi
952
953	movl	(%ebx),%edi
954	movl	4(%ebx),%esi
955
956	movl	128(%ebp),%eax
957	pushl	%eax
958	xorl	%eax,%eax
959
960	movl	(%ebp),%edx
961	movl	4(%ebp),%ecx
962	addl	%esi,%edx
963	roll	%cl,%edx
964	movl	%edx,%ebx
965	xorl	%ecx,%ecx
966	movb	%dh,%cl
967	andl	$255,%ebx
968	shrl	$16,%edx
969	xorl	%eax,%eax
970	movb	%dh,%al
971	andl	$255,%edx
972	movl	CAST_S_table0(,%ecx,4),%ecx
973	movl	CAST_S_table1(,%ebx,4),%ebx
974	xorl	%ebx,%ecx
975	movl	CAST_S_table2(,%eax,4),%ebx
976	subl	%ebx,%ecx
977	movl	CAST_S_table3(,%edx,4),%ebx
978	addl	%ebx,%ecx
979	xorl	%ecx,%edi
980
981	movl	8(%ebp),%edx
982	movl	12(%ebp),%ecx
983	xorl	%edi,%edx
984	roll	%cl,%edx
985	movl	%edx,%ebx
986	xorl	%ecx,%ecx
987	movb	%dh,%cl
988	andl	$255,%ebx
989	shrl	$16,%edx
990	xorl	%eax,%eax
991	movb	%dh,%al
992	andl	$255,%edx
993	movl	CAST_S_table0(,%ecx,4),%ecx
994	movl	CAST_S_table1(,%ebx,4),%ebx
995	subl	%ebx,%ecx
996	movl	CAST_S_table2(,%eax,4),%ebx
997	addl	%ebx,%ecx
998	movl	CAST_S_table3(,%edx,4),%ebx
999	xorl	%ebx,%ecx
1000	xorl	%ecx,%esi
1001
1002	movl	16(%ebp),%edx
1003	movl	20(%ebp),%ecx
1004	subl	%esi,%edx
1005	roll	%cl,%edx
1006	movl	%edx,%ebx
1007	xorl	%ecx,%ecx
1008	movb	%dh,%cl
1009	andl	$255,%ebx
1010	shrl	$16,%edx
1011	xorl	%eax,%eax
1012	movb	%dh,%al
1013	andl	$255,%edx
1014	movl	CAST_S_table0(,%ecx,4),%ecx
1015	movl	CAST_S_table1(,%ebx,4),%ebx
1016	addl	%ebx,%ecx
1017	movl	CAST_S_table2(,%eax,4),%ebx
1018	xorl	%ebx,%ecx
1019	movl	CAST_S_table3(,%edx,4),%ebx
1020	subl	%ebx,%ecx
1021	xorl	%ecx,%edi
1022
1023	movl	24(%ebp),%edx
1024	movl	28(%ebp),%ecx
1025	addl	%edi,%edx
1026	roll	%cl,%edx
1027	movl	%edx,%ebx
1028	xorl	%ecx,%ecx
1029	movb	%dh,%cl
1030	andl	$255,%ebx
1031	shrl	$16,%edx
1032	xorl	%eax,%eax
1033	movb	%dh,%al
1034	andl	$255,%edx
1035	movl	CAST_S_table0(,%ecx,4),%ecx
1036	movl	CAST_S_table1(,%ebx,4),%ebx
1037	xorl	%ebx,%ecx
1038	movl	CAST_S_table2(,%eax,4),%ebx
1039	subl	%ebx,%ecx
1040	movl	CAST_S_table3(,%edx,4),%ebx
1041	addl	%ebx,%ecx
1042	xorl	%ecx,%esi
1043
1044	movl	32(%ebp),%edx
1045	movl	36(%ebp),%ecx
1046	xorl	%esi,%edx
1047	roll	%cl,%edx
1048	movl	%edx,%ebx
1049	xorl	%ecx,%ecx
1050	movb	%dh,%cl
1051	andl	$255,%ebx
1052	shrl	$16,%edx
1053	xorl	%eax,%eax
1054	movb	%dh,%al
1055	andl	$255,%edx
1056	movl	CAST_S_table0(,%ecx,4),%ecx
1057	movl	CAST_S_table1(,%ebx,4),%ebx
1058	subl	%ebx,%ecx
1059	movl	CAST_S_table2(,%eax,4),%ebx
1060	addl	%ebx,%ecx
1061	movl	CAST_S_table3(,%edx,4),%ebx
1062	xorl	%ebx,%ecx
1063	xorl	%ecx,%edi
1064
1065	movl	40(%ebp),%edx
1066	movl	44(%ebp),%ecx
1067	subl	%edi,%edx
1068	roll	%cl,%edx
1069	movl	%edx,%ebx
1070	xorl	%ecx,%ecx
1071	movb	%dh,%cl
1072	andl	$255,%ebx
1073	shrl	$16,%edx
1074	xorl	%eax,%eax
1075	movb	%dh,%al
1076	andl	$255,%edx
1077	movl	CAST_S_table0(,%ecx,4),%ecx
1078	movl	CAST_S_table1(,%ebx,4),%ebx
1079	addl	%ebx,%ecx
1080	movl	CAST_S_table2(,%eax,4),%ebx
1081	xorl	%ebx,%ecx
1082	movl	CAST_S_table3(,%edx,4),%ebx
1083	subl	%ebx,%ecx
1084	xorl	%ecx,%esi
1085
1086	movl	48(%ebp),%edx
1087	movl	52(%ebp),%ecx
1088	addl	%esi,%edx
1089	roll	%cl,%edx
1090	movl	%edx,%ebx
1091	xorl	%ecx,%ecx
1092	movb	%dh,%cl
1093	andl	$255,%ebx
1094	shrl	$16,%edx
1095	xorl	%eax,%eax
1096	movb	%dh,%al
1097	andl	$255,%edx
1098	movl	CAST_S_table0(,%ecx,4),%ecx
1099	movl	CAST_S_table1(,%ebx,4),%ebx
1100	xorl	%ebx,%ecx
1101	movl	CAST_S_table2(,%eax,4),%ebx
1102	subl	%ebx,%ecx
1103	movl	CAST_S_table3(,%edx,4),%ebx
1104	addl	%ebx,%ecx
1105	xorl	%ecx,%edi
1106
1107	movl	56(%ebp),%edx
1108	movl	60(%ebp),%ecx
1109	xorl	%edi,%edx
1110	roll	%cl,%edx
1111	movl	%edx,%ebx
1112	xorl	%ecx,%ecx
1113	movb	%dh,%cl
1114	andl	$255,%ebx
1115	shrl	$16,%edx
1116	xorl	%eax,%eax
1117	movb	%dh,%al
1118	andl	$255,%edx
1119	movl	CAST_S_table0(,%ecx,4),%ecx
1120	movl	CAST_S_table1(,%ebx,4),%ebx
1121	subl	%ebx,%ecx
1122	movl	CAST_S_table2(,%eax,4),%ebx
1123	addl	%ebx,%ecx
1124	movl	CAST_S_table3(,%edx,4),%ebx
1125	xorl	%ebx,%ecx
1126	xorl	%ecx,%esi
1127
1128	movl	64(%ebp),%edx
1129	movl	68(%ebp),%ecx
1130	subl	%esi,%edx
1131	roll	%cl,%edx
1132	movl	%edx,%ebx
1133	xorl	%ecx,%ecx
1134	movb	%dh,%cl
1135	andl	$255,%ebx
1136	shrl	$16,%edx
1137	xorl	%eax,%eax
1138	movb	%dh,%al
1139	andl	$255,%edx
1140	movl	CAST_S_table0(,%ecx,4),%ecx
1141	movl	CAST_S_table1(,%ebx,4),%ebx
1142	addl	%ebx,%ecx
1143	movl	CAST_S_table2(,%eax,4),%ebx
1144	xorl	%ebx,%ecx
1145	movl	CAST_S_table3(,%edx,4),%ebx
1146	subl	%ebx,%ecx
1147	xorl	%ecx,%edi
1148
1149	movl	72(%ebp),%edx
1150	movl	76(%ebp),%ecx
1151	addl	%edi,%edx
1152	roll	%cl,%edx
1153	movl	%edx,%ebx
1154	xorl	%ecx,%ecx
1155	movb	%dh,%cl
1156	andl	$255,%ebx
1157	shrl	$16,%edx
1158	xorl	%eax,%eax
1159	movb	%dh,%al
1160	andl	$255,%edx
1161	movl	CAST_S_table0(,%ecx,4),%ecx
1162	movl	CAST_S_table1(,%ebx,4),%ebx
1163	xorl	%ebx,%ecx
1164	movl	CAST_S_table2(,%eax,4),%ebx
1165	subl	%ebx,%ecx
1166	movl	CAST_S_table3(,%edx,4),%ebx
1167	addl	%ebx,%ecx
1168	xorl	%ecx,%esi
1169
1170	movl	80(%ebp),%edx
1171	movl	84(%ebp),%ecx
1172	xorl	%esi,%edx
1173	roll	%cl,%edx
1174	movl	%edx,%ebx
1175	xorl	%ecx,%ecx
1176	movb	%dh,%cl
1177	andl	$255,%ebx
1178	shrl	$16,%edx
1179	xorl	%eax,%eax
1180	movb	%dh,%al
1181	andl	$255,%edx
1182	movl	CAST_S_table0(,%ecx,4),%ecx
1183	movl	CAST_S_table1(,%ebx,4),%ebx
1184	subl	%ebx,%ecx
1185	movl	CAST_S_table2(,%eax,4),%ebx
1186	addl	%ebx,%ecx
1187	movl	CAST_S_table3(,%edx,4),%ebx
1188	xorl	%ebx,%ecx
1189	xorl	%ecx,%edi
1190
1191	movl	88(%ebp),%edx
1192	movl	92(%ebp),%ecx
1193	subl	%edi,%edx
1194	roll	%cl,%edx
1195	movl	%edx,%ebx
1196	xorl	%ecx,%ecx
1197	movb	%dh,%cl
1198	andl	$255,%ebx
1199	shrl	$16,%edx
1200	xorl	%eax,%eax
1201	movb	%dh,%al
1202	andl	$255,%edx
1203	movl	CAST_S_table0(,%ecx,4),%ecx
1204	movl	CAST_S_table1(,%ebx,4),%ebx
1205	addl	%ebx,%ecx
1206	movl	CAST_S_table2(,%eax,4),%ebx
1207	xorl	%ebx,%ecx
1208	movl	CAST_S_table3(,%edx,4),%ebx
1209	subl	%ebx,%ecx
1210	xorl	%ecx,%esi
1211
1212	popl	%edx
1213	orl	%edx,%edx
1214	jnz	.L000cast_enc_done
1215
1216	movl	96(%ebp),%edx
1217	movl	100(%ebp),%ecx
1218	addl	%esi,%edx
1219	roll	%cl,%edx
1220	movl	%edx,%ebx
1221	xorl	%ecx,%ecx
1222	movb	%dh,%cl
1223	andl	$255,%ebx
1224	shrl	$16,%edx
1225	xorl	%eax,%eax
1226	movb	%dh,%al
1227	andl	$255,%edx
1228	movl	CAST_S_table0(,%ecx,4),%ecx
1229	movl	CAST_S_table1(,%ebx,4),%ebx
1230	xorl	%ebx,%ecx
1231	movl	CAST_S_table2(,%eax,4),%ebx
1232	subl	%ebx,%ecx
1233	movl	CAST_S_table3(,%edx,4),%ebx
1234	addl	%ebx,%ecx
1235	xorl	%ecx,%edi
1236
1237	movl	104(%ebp),%edx
1238	movl	108(%ebp),%ecx
1239	xorl	%edi,%edx
1240	roll	%cl,%edx
1241	movl	%edx,%ebx
1242	xorl	%ecx,%ecx
1243	movb	%dh,%cl
1244	andl	$255,%ebx
1245	shrl	$16,%edx
1246	xorl	%eax,%eax
1247	movb	%dh,%al
1248	andl	$255,%edx
1249	movl	CAST_S_table0(,%ecx,4),%ecx
1250	movl	CAST_S_table1(,%ebx,4),%ebx
1251	subl	%ebx,%ecx
1252	movl	CAST_S_table2(,%eax,4),%ebx
1253	addl	%ebx,%ecx
1254	movl	CAST_S_table3(,%edx,4),%ebx
1255	xorl	%ebx,%ecx
1256	xorl	%ecx,%esi
1257
1258	movl	112(%ebp),%edx
1259	movl	116(%ebp),%ecx
1260	subl	%esi,%edx
1261	roll	%cl,%edx
1262	movl	%edx,%ebx
1263	xorl	%ecx,%ecx
1264	movb	%dh,%cl
1265	andl	$255,%ebx
1266	shrl	$16,%edx
1267	xorl	%eax,%eax
1268	movb	%dh,%al
1269	andl	$255,%edx
1270	movl	CAST_S_table0(,%ecx,4),%ecx
1271	movl	CAST_S_table1(,%ebx,4),%ebx
1272	addl	%ebx,%ecx
1273	movl	CAST_S_table2(,%eax,4),%ebx
1274	xorl	%ebx,%ecx
1275	movl	CAST_S_table3(,%edx,4),%ebx
1276	subl	%ebx,%ecx
1277	xorl	%ecx,%edi
1278
1279	movl	120(%ebp),%edx
1280	movl	124(%ebp),%ecx
1281	addl	%edi,%edx
1282	roll	%cl,%edx
1283	movl	%edx,%ebx
1284	xorl	%ecx,%ecx
1285	movb	%dh,%cl
1286	andl	$255,%ebx
1287	shrl	$16,%edx
1288	xorl	%eax,%eax
1289	movb	%dh,%al
1290	andl	$255,%edx
1291	movl	CAST_S_table0(,%ecx,4),%ecx
1292	movl	CAST_S_table1(,%ebx,4),%ebx
1293	xorl	%ebx,%ecx
1294	movl	CAST_S_table2(,%eax,4),%ebx
1295	subl	%ebx,%ecx
1296	movl	CAST_S_table3(,%edx,4),%ebx
1297	addl	%ebx,%ecx
1298	xorl	%ecx,%esi
1299.L000cast_enc_done:
1300	nop
1301	movl	20(%esp),%eax
1302	movl	%edi,4(%eax)
1303	movl	%esi,(%eax)
1304	popl	%edi
1305	popl	%esi
1306	popl	%ebx
1307	popl	%ebp
1308	ret
1309.size	CAST_encrypt,.-.L_CAST_encrypt_begin
1310.globl	CAST_decrypt
1311.type	CAST_decrypt,@function
1312.align	16
1313CAST_decrypt:
1314.L_CAST_decrypt_begin:
1315
1316	pushl	%ebp
1317	pushl	%ebx
1318	movl	12(%esp),%ebx
1319	movl	16(%esp),%ebp
1320	pushl	%esi
1321	pushl	%edi
1322
1323	movl	(%ebx),%edi
1324	movl	4(%ebx),%esi
1325
1326	movl	128(%ebp),%eax
1327	orl	%eax,%eax
1328	jnz	.L001cast_dec_skip
1329	xorl	%eax,%eax
1330
1331	movl	120(%ebp),%edx
1332	movl	124(%ebp),%ecx
1333	addl	%esi,%edx
1334	roll	%cl,%edx
1335	movl	%edx,%ebx
1336	xorl	%ecx,%ecx
1337	movb	%dh,%cl
1338	andl	$255,%ebx
1339	shrl	$16,%edx
1340	xorl	%eax,%eax
1341	movb	%dh,%al
1342	andl	$255,%edx
1343	movl	CAST_S_table0(,%ecx,4),%ecx
1344	movl	CAST_S_table1(,%ebx,4),%ebx
1345	xorl	%ebx,%ecx
1346	movl	CAST_S_table2(,%eax,4),%ebx
1347	subl	%ebx,%ecx
1348	movl	CAST_S_table3(,%edx,4),%ebx
1349	addl	%ebx,%ecx
1350	xorl	%ecx,%edi
1351
1352	movl	112(%ebp),%edx
1353	movl	116(%ebp),%ecx
1354	subl	%edi,%edx
1355	roll	%cl,%edx
1356	movl	%edx,%ebx
1357	xorl	%ecx,%ecx
1358	movb	%dh,%cl
1359	andl	$255,%ebx
1360	shrl	$16,%edx
1361	xorl	%eax,%eax
1362	movb	%dh,%al
1363	andl	$255,%edx
1364	movl	CAST_S_table0(,%ecx,4),%ecx
1365	movl	CAST_S_table1(,%ebx,4),%ebx
1366	addl	%ebx,%ecx
1367	movl	CAST_S_table2(,%eax,4),%ebx
1368	xorl	%ebx,%ecx
1369	movl	CAST_S_table3(,%edx,4),%ebx
1370	subl	%ebx,%ecx
1371	xorl	%ecx,%esi
1372
1373	movl	104(%ebp),%edx
1374	movl	108(%ebp),%ecx
1375	xorl	%esi,%edx
1376	roll	%cl,%edx
1377	movl	%edx,%ebx
1378	xorl	%ecx,%ecx
1379	movb	%dh,%cl
1380	andl	$255,%ebx
1381	shrl	$16,%edx
1382	xorl	%eax,%eax
1383	movb	%dh,%al
1384	andl	$255,%edx
1385	movl	CAST_S_table0(,%ecx,4),%ecx
1386	movl	CAST_S_table1(,%ebx,4),%ebx
1387	subl	%ebx,%ecx
1388	movl	CAST_S_table2(,%eax,4),%ebx
1389	addl	%ebx,%ecx
1390	movl	CAST_S_table3(,%edx,4),%ebx
1391	xorl	%ebx,%ecx
1392	xorl	%ecx,%edi
1393
1394	movl	96(%ebp),%edx
1395	movl	100(%ebp),%ecx
1396	addl	%edi,%edx
1397	roll	%cl,%edx
1398	movl	%edx,%ebx
1399	xorl	%ecx,%ecx
1400	movb	%dh,%cl
1401	andl	$255,%ebx
1402	shrl	$16,%edx
1403	xorl	%eax,%eax
1404	movb	%dh,%al
1405	andl	$255,%edx
1406	movl	CAST_S_table0(,%ecx,4),%ecx
1407	movl	CAST_S_table1(,%ebx,4),%ebx
1408	xorl	%ebx,%ecx
1409	movl	CAST_S_table2(,%eax,4),%ebx
1410	subl	%ebx,%ecx
1411	movl	CAST_S_table3(,%edx,4),%ebx
1412	addl	%ebx,%ecx
1413	xorl	%ecx,%esi
1414.L001cast_dec_skip:
1415
1416	movl	88(%ebp),%edx
1417	movl	92(%ebp),%ecx
1418	subl	%esi,%edx
1419	roll	%cl,%edx
1420	movl	%edx,%ebx
1421	xorl	%ecx,%ecx
1422	movb	%dh,%cl
1423	andl	$255,%ebx
1424	shrl	$16,%edx
1425	xorl	%eax,%eax
1426	movb	%dh,%al
1427	andl	$255,%edx
1428	movl	CAST_S_table0(,%ecx,4),%ecx
1429	movl	CAST_S_table1(,%ebx,4),%ebx
1430	addl	%ebx,%ecx
1431	movl	CAST_S_table2(,%eax,4),%ebx
1432	xorl	%ebx,%ecx
1433	movl	CAST_S_table3(,%edx,4),%ebx
1434	subl	%ebx,%ecx
1435	xorl	%ecx,%edi
1436
1437	movl	80(%ebp),%edx
1438	movl	84(%ebp),%ecx
1439	xorl	%edi,%edx
1440	roll	%cl,%edx
1441	movl	%edx,%ebx
1442	xorl	%ecx,%ecx
1443	movb	%dh,%cl
1444	andl	$255,%ebx
1445	shrl	$16,%edx
1446	xorl	%eax,%eax
1447	movb	%dh,%al
1448	andl	$255,%edx
1449	movl	CAST_S_table0(,%ecx,4),%ecx
1450	movl	CAST_S_table1(,%ebx,4),%ebx
1451	subl	%ebx,%ecx
1452	movl	CAST_S_table2(,%eax,4),%ebx
1453	addl	%ebx,%ecx
1454	movl	CAST_S_table3(,%edx,4),%ebx
1455	xorl	%ebx,%ecx
1456	xorl	%ecx,%esi
1457
1458	movl	72(%ebp),%edx
1459	movl	76(%ebp),%ecx
1460	addl	%esi,%edx
1461	roll	%cl,%edx
1462	movl	%edx,%ebx
1463	xorl	%ecx,%ecx
1464	movb	%dh,%cl
1465	andl	$255,%ebx
1466	shrl	$16,%edx
1467	xorl	%eax,%eax
1468	movb	%dh,%al
1469	andl	$255,%edx
1470	movl	CAST_S_table0(,%ecx,4),%ecx
1471	movl	CAST_S_table1(,%ebx,4),%ebx
1472	xorl	%ebx,%ecx
1473	movl	CAST_S_table2(,%eax,4),%ebx
1474	subl	%ebx,%ecx
1475	movl	CAST_S_table3(,%edx,4),%ebx
1476	addl	%ebx,%ecx
1477	xorl	%ecx,%edi
1478
1479	movl	64(%ebp),%edx
1480	movl	68(%ebp),%ecx
1481	subl	%edi,%edx
1482	roll	%cl,%edx
1483	movl	%edx,%ebx
1484	xorl	%ecx,%ecx
1485	movb	%dh,%cl
1486	andl	$255,%ebx
1487	shrl	$16,%edx
1488	xorl	%eax,%eax
1489	movb	%dh,%al
1490	andl	$255,%edx
1491	movl	CAST_S_table0(,%ecx,4),%ecx
1492	movl	CAST_S_table1(,%ebx,4),%ebx
1493	addl	%ebx,%ecx
1494	movl	CAST_S_table2(,%eax,4),%ebx
1495	xorl	%ebx,%ecx
1496	movl	CAST_S_table3(,%edx,4),%ebx
1497	subl	%ebx,%ecx
1498	xorl	%ecx,%esi
1499
1500	movl	56(%ebp),%edx
1501	movl	60(%ebp),%ecx
1502	xorl	%esi,%edx
1503	roll	%cl,%edx
1504	movl	%edx,%ebx
1505	xorl	%ecx,%ecx
1506	movb	%dh,%cl
1507	andl	$255,%ebx
1508	shrl	$16,%edx
1509	xorl	%eax,%eax
1510	movb	%dh,%al
1511	andl	$255,%edx
1512	movl	CAST_S_table0(,%ecx,4),%ecx
1513	movl	CAST_S_table1(,%ebx,4),%ebx
1514	subl	%ebx,%ecx
1515	movl	CAST_S_table2(,%eax,4),%ebx
1516	addl	%ebx,%ecx
1517	movl	CAST_S_table3(,%edx,4),%ebx
1518	xorl	%ebx,%ecx
1519	xorl	%ecx,%edi
1520
1521	movl	48(%ebp),%edx
1522	movl	52(%ebp),%ecx
1523	addl	%edi,%edx
1524	roll	%cl,%edx
1525	movl	%edx,%ebx
1526	xorl	%ecx,%ecx
1527	movb	%dh,%cl
1528	andl	$255,%ebx
1529	shrl	$16,%edx
1530	xorl	%eax,%eax
1531	movb	%dh,%al
1532	andl	$255,%edx
1533	movl	CAST_S_table0(,%ecx,4),%ecx
1534	movl	CAST_S_table1(,%ebx,4),%ebx
1535	xorl	%ebx,%ecx
1536	movl	CAST_S_table2(,%eax,4),%ebx
1537	subl	%ebx,%ecx
1538	movl	CAST_S_table3(,%edx,4),%ebx
1539	addl	%ebx,%ecx
1540	xorl	%ecx,%esi
1541
1542	movl	40(%ebp),%edx
1543	movl	44(%ebp),%ecx
1544	subl	%esi,%edx
1545	roll	%cl,%edx
1546	movl	%edx,%ebx
1547	xorl	%ecx,%ecx
1548	movb	%dh,%cl
1549	andl	$255,%ebx
1550	shrl	$16,%edx
1551	xorl	%eax,%eax
1552	movb	%dh,%al
1553	andl	$255,%edx
1554	movl	CAST_S_table0(,%ecx,4),%ecx
1555	movl	CAST_S_table1(,%ebx,4),%ebx
1556	addl	%ebx,%ecx
1557	movl	CAST_S_table2(,%eax,4),%ebx
1558	xorl	%ebx,%ecx
1559	movl	CAST_S_table3(,%edx,4),%ebx
1560	subl	%ebx,%ecx
1561	xorl	%ecx,%edi
1562
1563	movl	32(%ebp),%edx
1564	movl	36(%ebp),%ecx
1565	xorl	%edi,%edx
1566	roll	%cl,%edx
1567	movl	%edx,%ebx
1568	xorl	%ecx,%ecx
1569	movb	%dh,%cl
1570	andl	$255,%ebx
1571	shrl	$16,%edx
1572	xorl	%eax,%eax
1573	movb	%dh,%al
1574	andl	$255,%edx
1575	movl	CAST_S_table0(,%ecx,4),%ecx
1576	movl	CAST_S_table1(,%ebx,4),%ebx
1577	subl	%ebx,%ecx
1578	movl	CAST_S_table2(,%eax,4),%ebx
1579	addl	%ebx,%ecx
1580	movl	CAST_S_table3(,%edx,4),%ebx
1581	xorl	%ebx,%ecx
1582	xorl	%ecx,%esi
1583
1584	movl	24(%ebp),%edx
1585	movl	28(%ebp),%ecx
1586	addl	%esi,%edx
1587	roll	%cl,%edx
1588	movl	%edx,%ebx
1589	xorl	%ecx,%ecx
1590	movb	%dh,%cl
1591	andl	$255,%ebx
1592	shrl	$16,%edx
1593	xorl	%eax,%eax
1594	movb	%dh,%al
1595	andl	$255,%edx
1596	movl	CAST_S_table0(,%ecx,4),%ecx
1597	movl	CAST_S_table1(,%ebx,4),%ebx
1598	xorl	%ebx,%ecx
1599	movl	CAST_S_table2(,%eax,4),%ebx
1600	subl	%ebx,%ecx
1601	movl	CAST_S_table3(,%edx,4),%ebx
1602	addl	%ebx,%ecx
1603	xorl	%ecx,%edi
1604
1605	movl	16(%ebp),%edx
1606	movl	20(%ebp),%ecx
1607	subl	%edi,%edx
1608	roll	%cl,%edx
1609	movl	%edx,%ebx
1610	xorl	%ecx,%ecx
1611	movb	%dh,%cl
1612	andl	$255,%ebx
1613	shrl	$16,%edx
1614	xorl	%eax,%eax
1615	movb	%dh,%al
1616	andl	$255,%edx
1617	movl	CAST_S_table0(,%ecx,4),%ecx
1618	movl	CAST_S_table1(,%ebx,4),%ebx
1619	addl	%ebx,%ecx
1620	movl	CAST_S_table2(,%eax,4),%ebx
1621	xorl	%ebx,%ecx
1622	movl	CAST_S_table3(,%edx,4),%ebx
1623	subl	%ebx,%ecx
1624	xorl	%ecx,%esi
1625
1626	movl	8(%ebp),%edx
1627	movl	12(%ebp),%ecx
1628	xorl	%esi,%edx
1629	roll	%cl,%edx
1630	movl	%edx,%ebx
1631	xorl	%ecx,%ecx
1632	movb	%dh,%cl
1633	andl	$255,%ebx
1634	shrl	$16,%edx
1635	xorl	%eax,%eax
1636	movb	%dh,%al
1637	andl	$255,%edx
1638	movl	CAST_S_table0(,%ecx,4),%ecx
1639	movl	CAST_S_table1(,%ebx,4),%ebx
1640	subl	%ebx,%ecx
1641	movl	CAST_S_table2(,%eax,4),%ebx
1642	addl	%ebx,%ecx
1643	movl	CAST_S_table3(,%edx,4),%ebx
1644	xorl	%ebx,%ecx
1645	xorl	%ecx,%edi
1646
1647	movl	(%ebp),%edx
1648	movl	4(%ebp),%ecx
1649	addl	%edi,%edx
1650	roll	%cl,%edx
1651	movl	%edx,%ebx
1652	xorl	%ecx,%ecx
1653	movb	%dh,%cl
1654	andl	$255,%ebx
1655	shrl	$16,%edx
1656	xorl	%eax,%eax
1657	movb	%dh,%al
1658	andl	$255,%edx
1659	movl	CAST_S_table0(,%ecx,4),%ecx
1660	movl	CAST_S_table1(,%ebx,4),%ebx
1661	xorl	%ebx,%ecx
1662	movl	CAST_S_table2(,%eax,4),%ebx
1663	subl	%ebx,%ecx
1664	movl	CAST_S_table3(,%edx,4),%ebx
1665	addl	%ebx,%ecx
1666	xorl	%ecx,%esi
1667	nop
1668	movl	20(%esp),%eax
1669	movl	%edi,4(%eax)
1670	movl	%esi,(%eax)
1671	popl	%edi
1672	popl	%esi
1673	popl	%ebx
1674	popl	%ebp
1675	ret
1676.size	CAST_decrypt,.-.L_CAST_decrypt_begin
1677.globl	CAST_cbc_encrypt
1678.type	CAST_cbc_encrypt,@function
1679.align	16
1680CAST_cbc_encrypt:
1681.L_CAST_cbc_encrypt_begin:
1682
1683	pushl	%ebp
1684	pushl	%ebx
1685	pushl	%esi
1686	pushl	%edi
1687	movl	28(%esp),%ebp
1688
1689	movl	36(%esp),%ebx
1690	movl	(%ebx),%esi
1691	movl	4(%ebx),%edi
1692	pushl	%edi
1693	pushl	%esi
1694	pushl	%edi
1695	pushl	%esi
1696	movl	%esp,%ebx
1697	movl	36(%esp),%esi
1698	movl	40(%esp),%edi
1699
1700	movl	56(%esp),%ecx
1701
1702	movl	48(%esp),%eax
1703	pushl	%eax
1704	pushl	%ebx
1705	cmpl	$0,%ecx
1706	jz	.L002decrypt
1707	andl	$4294967288,%ebp
1708	movl	8(%esp),%eax
1709	movl	12(%esp),%ebx
1710	jz	.L003encrypt_finish
1711.L004encrypt_loop:
1712	movl	(%esi),%ecx
1713	movl	4(%esi),%edx
1714	xorl	%ecx,%eax
1715	xorl	%edx,%ebx
1716	bswap	%eax
1717	bswap	%ebx
1718	movl	%eax,8(%esp)
1719	movl	%ebx,12(%esp)
1720	call	.L_CAST_encrypt_begin
1721	movl	8(%esp),%eax
1722	movl	12(%esp),%ebx
1723	bswap	%eax
1724	bswap	%ebx
1725	movl	%eax,(%edi)
1726	movl	%ebx,4(%edi)
1727	addl	$8,%esi
1728	addl	$8,%edi
1729	subl	$8,%ebp
1730	jnz	.L004encrypt_loop
1731.L003encrypt_finish:
1732	movl	52(%esp),%ebp
1733	andl	$7,%ebp
1734	jz	.L005finish
1735	call	.L006PIC_point
1736.L006PIC_point:
1737	popl	%edx
1738	leal	.L007cbc_enc_jmp_table-.L006PIC_point(%edx),%ecx
1739	movl	(%ecx,%ebp,4),%ebp
1740	addl	%edx,%ebp
1741	xorl	%ecx,%ecx
1742	xorl	%edx,%edx
1743	jmp	*%ebp
1744.L008ej7:
1745	movb	6(%esi),%dh
1746	shll	$8,%edx
1747.L009ej6:
1748	movb	5(%esi),%dh
1749.L010ej5:
1750	movb	4(%esi),%dl
1751.L011ej4:
1752	movl	(%esi),%ecx
1753	jmp	.L012ejend
1754.L013ej3:
1755	movb	2(%esi),%ch
1756	shll	$8,%ecx
1757.L014ej2:
1758	movb	1(%esi),%ch
1759.L015ej1:
1760	movb	(%esi),%cl
1761.L012ejend:
1762	xorl	%ecx,%eax
1763	xorl	%edx,%ebx
1764	bswap	%eax
1765	bswap	%ebx
1766	movl	%eax,8(%esp)
1767	movl	%ebx,12(%esp)
1768	call	.L_CAST_encrypt_begin
1769	movl	8(%esp),%eax
1770	movl	12(%esp),%ebx
1771	bswap	%eax
1772	bswap	%ebx
1773	movl	%eax,(%edi)
1774	movl	%ebx,4(%edi)
1775	jmp	.L005finish
1776.L002decrypt:
1777	andl	$4294967288,%ebp
1778	movl	16(%esp),%eax
1779	movl	20(%esp),%ebx
1780	jz	.L016decrypt_finish
1781.L017decrypt_loop:
1782	movl	(%esi),%eax
1783	movl	4(%esi),%ebx
1784	bswap	%eax
1785	bswap	%ebx
1786	movl	%eax,8(%esp)
1787	movl	%ebx,12(%esp)
1788	call	.L_CAST_decrypt_begin
1789	movl	8(%esp),%eax
1790	movl	12(%esp),%ebx
1791	bswap	%eax
1792	bswap	%ebx
1793	movl	16(%esp),%ecx
1794	movl	20(%esp),%edx
1795	xorl	%eax,%ecx
1796	xorl	%ebx,%edx
1797	movl	(%esi),%eax
1798	movl	4(%esi),%ebx
1799	movl	%ecx,(%edi)
1800	movl	%edx,4(%edi)
1801	movl	%eax,16(%esp)
1802	movl	%ebx,20(%esp)
1803	addl	$8,%esi
1804	addl	$8,%edi
1805	subl	$8,%ebp
1806	jnz	.L017decrypt_loop
1807.L016decrypt_finish:
1808	movl	52(%esp),%ebp
1809	andl	$7,%ebp
1810	jz	.L005finish
1811	movl	(%esi),%eax
1812	movl	4(%esi),%ebx
1813	bswap	%eax
1814	bswap	%ebx
1815	movl	%eax,8(%esp)
1816	movl	%ebx,12(%esp)
1817	call	.L_CAST_decrypt_begin
1818	movl	8(%esp),%eax
1819	movl	12(%esp),%ebx
1820	bswap	%eax
1821	bswap	%ebx
1822	movl	16(%esp),%ecx
1823	movl	20(%esp),%edx
1824	xorl	%eax,%ecx
1825	xorl	%ebx,%edx
1826	movl	(%esi),%eax
1827	movl	4(%esi),%ebx
1828.L018dj7:
1829	rorl	$16,%edx
1830	movb	%dl,6(%edi)
1831	shrl	$16,%edx
1832.L019dj6:
1833	movb	%dh,5(%edi)
1834.L020dj5:
1835	movb	%dl,4(%edi)
1836.L021dj4:
1837	movl	%ecx,(%edi)
1838	jmp	.L022djend
1839.L023dj3:
1840	rorl	$16,%ecx
1841	movb	%cl,2(%edi)
1842	shll	$16,%ecx
1843.L024dj2:
1844	movb	%ch,1(%esi)
1845.L025dj1:
1846	movb	%cl,(%esi)
1847.L022djend:
1848	jmp	.L005finish
1849.L005finish:
1850	movl	60(%esp),%ecx
1851	addl	$24,%esp
1852	movl	%eax,(%ecx)
1853	movl	%ebx,4(%ecx)
1854	popl	%edi
1855	popl	%esi
1856	popl	%ebx
1857	popl	%ebp
1858	ret
1859.align	64
1860.L007cbc_enc_jmp_table:
1861.long	0
1862.long	.L015ej1-.L006PIC_point
1863.long	.L014ej2-.L006PIC_point
1864.long	.L013ej3-.L006PIC_point
1865.long	.L011ej4-.L006PIC_point
1866.long	.L010ej5-.L006PIC_point
1867.long	.L009ej6-.L006PIC_point
1868.long	.L008ej7-.L006PIC_point
1869.align	64
1870.size	CAST_cbc_encrypt,.-.L_CAST_cbc_encrypt_begin
1871#endif
1872