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