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