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