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