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