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