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