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