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