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