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