1	# $FreeBSD$
2.file	"rc5-586.s"
3.text
4.globl	RC5_32_encrypt
5.type	RC5_32_encrypt,@function
6.align	16
7RC5_32_encrypt:
8.L_RC5_32_encrypt_begin:
9
10	pushl	%ebp
11	pushl	%esi
12	pushl	%edi
13	movl	16(%esp),%edx
14	movl	20(%esp),%ebp
15
16	movl	(%edx),%edi
17	movl	4(%edx),%esi
18	pushl	%ebx
19	movl	(%ebp),%ebx
20	addl	4(%ebp),%edi
21	addl	8(%ebp),%esi
22	xorl	%esi,%edi
23	movl	12(%ebp),%eax
24	movl	%esi,%ecx
25	roll	%cl,%edi
26	addl	%eax,%edi
27	xorl	%edi,%esi
28	movl	16(%ebp),%eax
29	movl	%edi,%ecx
30	roll	%cl,%esi
31	addl	%eax,%esi
32	xorl	%esi,%edi
33	movl	20(%ebp),%eax
34	movl	%esi,%ecx
35	roll	%cl,%edi
36	addl	%eax,%edi
37	xorl	%edi,%esi
38	movl	24(%ebp),%eax
39	movl	%edi,%ecx
40	roll	%cl,%esi
41	addl	%eax,%esi
42	xorl	%esi,%edi
43	movl	28(%ebp),%eax
44	movl	%esi,%ecx
45	roll	%cl,%edi
46	addl	%eax,%edi
47	xorl	%edi,%esi
48	movl	32(%ebp),%eax
49	movl	%edi,%ecx
50	roll	%cl,%esi
51	addl	%eax,%esi
52	xorl	%esi,%edi
53	movl	36(%ebp),%eax
54	movl	%esi,%ecx
55	roll	%cl,%edi
56	addl	%eax,%edi
57	xorl	%edi,%esi
58	movl	40(%ebp),%eax
59	movl	%edi,%ecx
60	roll	%cl,%esi
61	addl	%eax,%esi
62	xorl	%esi,%edi
63	movl	44(%ebp),%eax
64	movl	%esi,%ecx
65	roll	%cl,%edi
66	addl	%eax,%edi
67	xorl	%edi,%esi
68	movl	48(%ebp),%eax
69	movl	%edi,%ecx
70	roll	%cl,%esi
71	addl	%eax,%esi
72	xorl	%esi,%edi
73	movl	52(%ebp),%eax
74	movl	%esi,%ecx
75	roll	%cl,%edi
76	addl	%eax,%edi
77	xorl	%edi,%esi
78	movl	56(%ebp),%eax
79	movl	%edi,%ecx
80	roll	%cl,%esi
81	addl	%eax,%esi
82	xorl	%esi,%edi
83	movl	60(%ebp),%eax
84	movl	%esi,%ecx
85	roll	%cl,%edi
86	addl	%eax,%edi
87	xorl	%edi,%esi
88	movl	64(%ebp),%eax
89	movl	%edi,%ecx
90	roll	%cl,%esi
91	addl	%eax,%esi
92	xorl	%esi,%edi
93	movl	68(%ebp),%eax
94	movl	%esi,%ecx
95	roll	%cl,%edi
96	addl	%eax,%edi
97	xorl	%edi,%esi
98	movl	72(%ebp),%eax
99	movl	%edi,%ecx
100	roll	%cl,%esi
101	addl	%eax,%esi
102	cmpl	$8,%ebx
103	je	.L000rc5_exit
104	xorl	%esi,%edi
105	movl	76(%ebp),%eax
106	movl	%esi,%ecx
107	roll	%cl,%edi
108	addl	%eax,%edi
109	xorl	%edi,%esi
110	movl	80(%ebp),%eax
111	movl	%edi,%ecx
112	roll	%cl,%esi
113	addl	%eax,%esi
114	xorl	%esi,%edi
115	movl	84(%ebp),%eax
116	movl	%esi,%ecx
117	roll	%cl,%edi
118	addl	%eax,%edi
119	xorl	%edi,%esi
120	movl	88(%ebp),%eax
121	movl	%edi,%ecx
122	roll	%cl,%esi
123	addl	%eax,%esi
124	xorl	%esi,%edi
125	movl	92(%ebp),%eax
126	movl	%esi,%ecx
127	roll	%cl,%edi
128	addl	%eax,%edi
129	xorl	%edi,%esi
130	movl	96(%ebp),%eax
131	movl	%edi,%ecx
132	roll	%cl,%esi
133	addl	%eax,%esi
134	xorl	%esi,%edi
135	movl	100(%ebp),%eax
136	movl	%esi,%ecx
137	roll	%cl,%edi
138	addl	%eax,%edi
139	xorl	%edi,%esi
140	movl	104(%ebp),%eax
141	movl	%edi,%ecx
142	roll	%cl,%esi
143	addl	%eax,%esi
144	cmpl	$12,%ebx
145	je	.L000rc5_exit
146	xorl	%esi,%edi
147	movl	108(%ebp),%eax
148	movl	%esi,%ecx
149	roll	%cl,%edi
150	addl	%eax,%edi
151	xorl	%edi,%esi
152	movl	112(%ebp),%eax
153	movl	%edi,%ecx
154	roll	%cl,%esi
155	addl	%eax,%esi
156	xorl	%esi,%edi
157	movl	116(%ebp),%eax
158	movl	%esi,%ecx
159	roll	%cl,%edi
160	addl	%eax,%edi
161	xorl	%edi,%esi
162	movl	120(%ebp),%eax
163	movl	%edi,%ecx
164	roll	%cl,%esi
165	addl	%eax,%esi
166	xorl	%esi,%edi
167	movl	124(%ebp),%eax
168	movl	%esi,%ecx
169	roll	%cl,%edi
170	addl	%eax,%edi
171	xorl	%edi,%esi
172	movl	128(%ebp),%eax
173	movl	%edi,%ecx
174	roll	%cl,%esi
175	addl	%eax,%esi
176	xorl	%esi,%edi
177	movl	132(%ebp),%eax
178	movl	%esi,%ecx
179	roll	%cl,%edi
180	addl	%eax,%edi
181	xorl	%edi,%esi
182	movl	136(%ebp),%eax
183	movl	%edi,%ecx
184	roll	%cl,%esi
185	addl	%eax,%esi
186.L000rc5_exit:
187	movl	%edi,(%edx)
188	movl	%esi,4(%edx)
189	popl	%ebx
190	popl	%edi
191	popl	%esi
192	popl	%ebp
193	ret
194.size	RC5_32_encrypt,.-.L_RC5_32_encrypt_begin
195.globl	RC5_32_decrypt
196.type	RC5_32_decrypt,@function
197.align	16
198RC5_32_decrypt:
199.L_RC5_32_decrypt_begin:
200
201	pushl	%ebp
202	pushl	%esi
203	pushl	%edi
204	movl	16(%esp),%edx
205	movl	20(%esp),%ebp
206
207	movl	(%edx),%edi
208	movl	4(%edx),%esi
209	pushl	%ebx
210	movl	(%ebp),%ebx
211	cmpl	$12,%ebx
212	je	.L001rc5_dec_12
213	cmpl	$8,%ebx
214	je	.L002rc5_dec_8
215	movl	136(%ebp),%eax
216	subl	%eax,%esi
217	movl	%edi,%ecx
218	rorl	%cl,%esi
219	xorl	%edi,%esi
220	movl	132(%ebp),%eax
221	subl	%eax,%edi
222	movl	%esi,%ecx
223	rorl	%cl,%edi
224	xorl	%esi,%edi
225	movl	128(%ebp),%eax
226	subl	%eax,%esi
227	movl	%edi,%ecx
228	rorl	%cl,%esi
229	xorl	%edi,%esi
230	movl	124(%ebp),%eax
231	subl	%eax,%edi
232	movl	%esi,%ecx
233	rorl	%cl,%edi
234	xorl	%esi,%edi
235	movl	120(%ebp),%eax
236	subl	%eax,%esi
237	movl	%edi,%ecx
238	rorl	%cl,%esi
239	xorl	%edi,%esi
240	movl	116(%ebp),%eax
241	subl	%eax,%edi
242	movl	%esi,%ecx
243	rorl	%cl,%edi
244	xorl	%esi,%edi
245	movl	112(%ebp),%eax
246	subl	%eax,%esi
247	movl	%edi,%ecx
248	rorl	%cl,%esi
249	xorl	%edi,%esi
250	movl	108(%ebp),%eax
251	subl	%eax,%edi
252	movl	%esi,%ecx
253	rorl	%cl,%edi
254	xorl	%esi,%edi
255.L001rc5_dec_12:
256	movl	104(%ebp),%eax
257	subl	%eax,%esi
258	movl	%edi,%ecx
259	rorl	%cl,%esi
260	xorl	%edi,%esi
261	movl	100(%ebp),%eax
262	subl	%eax,%edi
263	movl	%esi,%ecx
264	rorl	%cl,%edi
265	xorl	%esi,%edi
266	movl	96(%ebp),%eax
267	subl	%eax,%esi
268	movl	%edi,%ecx
269	rorl	%cl,%esi
270	xorl	%edi,%esi
271	movl	92(%ebp),%eax
272	subl	%eax,%edi
273	movl	%esi,%ecx
274	rorl	%cl,%edi
275	xorl	%esi,%edi
276	movl	88(%ebp),%eax
277	subl	%eax,%esi
278	movl	%edi,%ecx
279	rorl	%cl,%esi
280	xorl	%edi,%esi
281	movl	84(%ebp),%eax
282	subl	%eax,%edi
283	movl	%esi,%ecx
284	rorl	%cl,%edi
285	xorl	%esi,%edi
286	movl	80(%ebp),%eax
287	subl	%eax,%esi
288	movl	%edi,%ecx
289	rorl	%cl,%esi
290	xorl	%edi,%esi
291	movl	76(%ebp),%eax
292	subl	%eax,%edi
293	movl	%esi,%ecx
294	rorl	%cl,%edi
295	xorl	%esi,%edi
296.L002rc5_dec_8:
297	movl	72(%ebp),%eax
298	subl	%eax,%esi
299	movl	%edi,%ecx
300	rorl	%cl,%esi
301	xorl	%edi,%esi
302	movl	68(%ebp),%eax
303	subl	%eax,%edi
304	movl	%esi,%ecx
305	rorl	%cl,%edi
306	xorl	%esi,%edi
307	movl	64(%ebp),%eax
308	subl	%eax,%esi
309	movl	%edi,%ecx
310	rorl	%cl,%esi
311	xorl	%edi,%esi
312	movl	60(%ebp),%eax
313	subl	%eax,%edi
314	movl	%esi,%ecx
315	rorl	%cl,%edi
316	xorl	%esi,%edi
317	movl	56(%ebp),%eax
318	subl	%eax,%esi
319	movl	%edi,%ecx
320	rorl	%cl,%esi
321	xorl	%edi,%esi
322	movl	52(%ebp),%eax
323	subl	%eax,%edi
324	movl	%esi,%ecx
325	rorl	%cl,%edi
326	xorl	%esi,%edi
327	movl	48(%ebp),%eax
328	subl	%eax,%esi
329	movl	%edi,%ecx
330	rorl	%cl,%esi
331	xorl	%edi,%esi
332	movl	44(%ebp),%eax
333	subl	%eax,%edi
334	movl	%esi,%ecx
335	rorl	%cl,%edi
336	xorl	%esi,%edi
337	movl	40(%ebp),%eax
338	subl	%eax,%esi
339	movl	%edi,%ecx
340	rorl	%cl,%esi
341	xorl	%edi,%esi
342	movl	36(%ebp),%eax
343	subl	%eax,%edi
344	movl	%esi,%ecx
345	rorl	%cl,%edi
346	xorl	%esi,%edi
347	movl	32(%ebp),%eax
348	subl	%eax,%esi
349	movl	%edi,%ecx
350	rorl	%cl,%esi
351	xorl	%edi,%esi
352	movl	28(%ebp),%eax
353	subl	%eax,%edi
354	movl	%esi,%ecx
355	rorl	%cl,%edi
356	xorl	%esi,%edi
357	movl	24(%ebp),%eax
358	subl	%eax,%esi
359	movl	%edi,%ecx
360	rorl	%cl,%esi
361	xorl	%edi,%esi
362	movl	20(%ebp),%eax
363	subl	%eax,%edi
364	movl	%esi,%ecx
365	rorl	%cl,%edi
366	xorl	%esi,%edi
367	movl	16(%ebp),%eax
368	subl	%eax,%esi
369	movl	%edi,%ecx
370	rorl	%cl,%esi
371	xorl	%edi,%esi
372	movl	12(%ebp),%eax
373	subl	%eax,%edi
374	movl	%esi,%ecx
375	rorl	%cl,%edi
376	xorl	%esi,%edi
377	subl	8(%ebp),%esi
378	subl	4(%ebp),%edi
379.L003rc5_exit:
380	movl	%edi,(%edx)
381	movl	%esi,4(%edx)
382	popl	%ebx
383	popl	%edi
384	popl	%esi
385	popl	%ebp
386	ret
387.size	RC5_32_decrypt,.-.L_RC5_32_decrypt_begin
388.globl	RC5_32_cbc_encrypt
389.type	RC5_32_cbc_encrypt,@function
390.align	16
391RC5_32_cbc_encrypt:
392.L_RC5_32_cbc_encrypt_begin:
393
394	pushl	%ebp
395	pushl	%ebx
396	pushl	%esi
397	pushl	%edi
398	movl	28(%esp),%ebp
399
400	movl	36(%esp),%ebx
401	movl	(%ebx),%esi
402	movl	4(%ebx),%edi
403	pushl	%edi
404	pushl	%esi
405	pushl	%edi
406	pushl	%esi
407	movl	%esp,%ebx
408	movl	36(%esp),%esi
409	movl	40(%esp),%edi
410
411	movl	56(%esp),%ecx
412
413	movl	48(%esp),%eax
414	pushl	%eax
415	pushl	%ebx
416	cmpl	$0,%ecx
417	jz	.L004decrypt
418	andl	$4294967288,%ebp
419	movl	8(%esp),%eax
420	movl	12(%esp),%ebx
421	jz	.L005encrypt_finish
422.L006encrypt_loop:
423	movl	(%esi),%ecx
424	movl	4(%esi),%edx
425	xorl	%ecx,%eax
426	xorl	%edx,%ebx
427	movl	%eax,8(%esp)
428	movl	%ebx,12(%esp)
429	call	.L_RC5_32_encrypt_begin
430	movl	8(%esp),%eax
431	movl	12(%esp),%ebx
432	movl	%eax,(%edi)
433	movl	%ebx,4(%edi)
434	addl	$8,%esi
435	addl	$8,%edi
436	subl	$8,%ebp
437	jnz	.L006encrypt_loop
438.L005encrypt_finish:
439	movl	52(%esp),%ebp
440	andl	$7,%ebp
441	jz	.L007finish
442	call	.L008PIC_point
443.L008PIC_point:
444	popl	%edx
445	leal	.L009cbc_enc_jmp_table-.L008PIC_point(%edx),%ecx
446	movl	(%ecx,%ebp,4),%ebp
447	addl	%edx,%ebp
448	xorl	%ecx,%ecx
449	xorl	%edx,%edx
450	jmp	*%ebp
451.L010ej7:
452	movb	6(%esi),%dh
453	shll	$8,%edx
454.L011ej6:
455	movb	5(%esi),%dh
456.L012ej5:
457	movb	4(%esi),%dl
458.L013ej4:
459	movl	(%esi),%ecx
460	jmp	.L014ejend
461.L015ej3:
462	movb	2(%esi),%ch
463	shll	$8,%ecx
464.L016ej2:
465	movb	1(%esi),%ch
466.L017ej1:
467	movb	(%esi),%cl
468.L014ejend:
469	xorl	%ecx,%eax
470	xorl	%edx,%ebx
471	movl	%eax,8(%esp)
472	movl	%ebx,12(%esp)
473	call	.L_RC5_32_encrypt_begin
474	movl	8(%esp),%eax
475	movl	12(%esp),%ebx
476	movl	%eax,(%edi)
477	movl	%ebx,4(%edi)
478	jmp	.L007finish
479.L004decrypt:
480	andl	$4294967288,%ebp
481	movl	16(%esp),%eax
482	movl	20(%esp),%ebx
483	jz	.L018decrypt_finish
484.L019decrypt_loop:
485	movl	(%esi),%eax
486	movl	4(%esi),%ebx
487	movl	%eax,8(%esp)
488	movl	%ebx,12(%esp)
489	call	.L_RC5_32_decrypt_begin
490	movl	8(%esp),%eax
491	movl	12(%esp),%ebx
492	movl	16(%esp),%ecx
493	movl	20(%esp),%edx
494	xorl	%eax,%ecx
495	xorl	%ebx,%edx
496	movl	(%esi),%eax
497	movl	4(%esi),%ebx
498	movl	%ecx,(%edi)
499	movl	%edx,4(%edi)
500	movl	%eax,16(%esp)
501	movl	%ebx,20(%esp)
502	addl	$8,%esi
503	addl	$8,%edi
504	subl	$8,%ebp
505	jnz	.L019decrypt_loop
506.L018decrypt_finish:
507	movl	52(%esp),%ebp
508	andl	$7,%ebp
509	jz	.L007finish
510	movl	(%esi),%eax
511	movl	4(%esi),%ebx
512	movl	%eax,8(%esp)
513	movl	%ebx,12(%esp)
514	call	.L_RC5_32_decrypt_begin
515	movl	8(%esp),%eax
516	movl	12(%esp),%ebx
517	movl	16(%esp),%ecx
518	movl	20(%esp),%edx
519	xorl	%eax,%ecx
520	xorl	%ebx,%edx
521	movl	(%esi),%eax
522	movl	4(%esi),%ebx
523.L020dj7:
524	rorl	$16,%edx
525	movb	%dl,6(%edi)
526	shrl	$16,%edx
527.L021dj6:
528	movb	%dh,5(%edi)
529.L022dj5:
530	movb	%dl,4(%edi)
531.L023dj4:
532	movl	%ecx,(%edi)
533	jmp	.L024djend
534.L025dj3:
535	rorl	$16,%ecx
536	movb	%cl,2(%edi)
537	shll	$16,%ecx
538.L026dj2:
539	movb	%ch,1(%esi)
540.L027dj1:
541	movb	%cl,(%esi)
542.L024djend:
543	jmp	.L007finish
544.L007finish:
545	movl	60(%esp),%ecx
546	addl	$24,%esp
547	movl	%eax,(%ecx)
548	movl	%ebx,4(%ecx)
549	popl	%edi
550	popl	%esi
551	popl	%ebx
552	popl	%ebp
553	ret
554.align	64
555.L009cbc_enc_jmp_table:
556.long	0
557.long	.L017ej1-.L008PIC_point
558.long	.L016ej2-.L008PIC_point
559.long	.L015ej3-.L008PIC_point
560.long	.L013ej4-.L008PIC_point
561.long	.L012ej5-.L008PIC_point
562.long	.L011ej6-.L008PIC_point
563.long	.L010ej7-.L008PIC_point
564.align	64
565.size	RC5_32_cbc_encrypt,.-.L_RC5_32_cbc_encrypt_begin
566