Added Mike Hamburg's SSSE3 AES implementation.
[gnutls:gnutls.git] / lib / accelerated / x86 / elf / e_padlock-x86.s
1 # Copyright (c) 2011-2013, Andy Polyakov <appro@openssl.org>
2 # All rights reserved.
3 #
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions
6 # are met:
7
8 #     * Redistributions of source code must retain copyright notices,
9 #      this list of conditions and the following disclaimer.
10 #
11 #     * Redistributions in binary form must reproduce the above
12 #      copyright notice, this list of conditions and the following
13 #      disclaimer in the documentation and/or other materials
14 #      provided with the distribution.
15 #
16 #     * Neither the name of the Andy Polyakov nor the names of its
17 #      copyright holder and contributors may be used to endorse or
18 #      promote products derived from this software without specific
19 #      prior written permission.
20 #
21 # ALTERNATIVELY, provided that this notice is retained in full, this
22 # product may be distributed under the terms of the GNU General Public
23 # License (GPL), in which case the provisions of the GPL apply INSTEAD OF
24 # those given above.
25 #
26 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
27 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 #
38 # *** This file is auto-generated ***
39 #
40 .file   "devel/perlasm/e_padlock-x86.s"
41 .text
42 .globl  padlock_capability
43 .type   padlock_capability,@function
44 .align  16
45 padlock_capability:
46 .L_padlock_capability_begin:
47         pushl   %ebx
48         pushfl
49         popl    %eax
50         movl    %eax,%ecx
51         xorl    $2097152,%eax
52         pushl   %eax
53         popfl
54         pushfl
55         popl    %eax
56         xorl    %eax,%ecx
57         xorl    %eax,%eax
58         btl     $21,%ecx
59         jnc     .L000noluck
60         .byte   0x0f,0xa2
61         xorl    %eax,%eax
62         cmpl    $0x746e6543,%ebx
63         jne     .L000noluck
64         cmpl    $0x48727561,%edx
65         jne     .L000noluck
66         cmpl    $0x736c7561,%ecx
67         jne     .L000noluck
68         movl    $3221225472,%eax
69         .byte   0x0f,0xa2
70         movl    %eax,%edx
71         xorl    %eax,%eax
72         cmpl    $3221225473,%edx
73         jb      .L000noluck
74         movl    $1,%eax
75         .byte   0x0f,0xa2
76         orl     $15,%eax
77         xorl    %ebx,%ebx
78         andl    $4095,%eax
79         cmpl    $1791,%eax
80         sete    %bl
81         movl    $3221225473,%eax
82         pushl   %ebx
83         .byte   0x0f,0xa2
84         popl    %ebx
85         movl    %edx,%eax
86         shll    $4,%ebx
87         andl    $4294967279,%eax
88         orl     %ebx,%eax
89 .L000noluck:
90         popl    %ebx
91         ret
92 .size   padlock_capability,.-.L_padlock_capability_begin
93 .globl  padlock_key_bswap
94 .type   padlock_key_bswap,@function
95 .align  16
96 padlock_key_bswap:
97 .L_padlock_key_bswap_begin:
98         movl    4(%esp),%edx
99         movl    240(%edx),%ecx
100 .L001bswap_loop:
101         movl    (%edx),%eax
102         bswap   %eax
103         movl    %eax,(%edx)
104         leal    4(%edx),%edx
105         subl    $1,%ecx
106         jnz     .L001bswap_loop
107         ret
108 .size   padlock_key_bswap,.-.L_padlock_key_bswap_begin
109 .globl  padlock_verify_context
110 .type   padlock_verify_context,@function
111 .align  16
112 padlock_verify_context:
113 .L_padlock_verify_context_begin:
114         movl    4(%esp),%edx
115         leal    .Lpadlock_saved_context-.L002verify_pic_point,%eax
116         pushfl
117         call    _padlock_verify_ctx
118 .L002verify_pic_point:
119         leal    4(%esp),%esp
120         ret
121 .size   padlock_verify_context,.-.L_padlock_verify_context_begin
122 .type   _padlock_verify_ctx,@function
123 .align  16
124 _padlock_verify_ctx:
125         addl    (%esp),%eax
126         btl     $30,4(%esp)
127         jnc     .L003verified
128         cmpl    (%eax),%edx
129         je      .L003verified
130         pushfl
131         popfl
132 .L003verified:
133         movl    %edx,(%eax)
134         ret
135 .size   _padlock_verify_ctx,.-_padlock_verify_ctx
136 .globl  padlock_reload_key
137 .type   padlock_reload_key,@function
138 .align  16
139 padlock_reload_key:
140 .L_padlock_reload_key_begin:
141         pushfl
142         popfl
143         ret
144 .size   padlock_reload_key,.-.L_padlock_reload_key_begin
145 .globl  padlock_aes_block
146 .type   padlock_aes_block,@function
147 .align  16
148 padlock_aes_block:
149 .L_padlock_aes_block_begin:
150         pushl   %edi
151         pushl   %esi
152         pushl   %ebx
153         movl    16(%esp),%edi
154         movl    20(%esp),%esi
155         movl    24(%esp),%edx
156         movl    $1,%ecx
157         leal    32(%edx),%ebx
158         leal    16(%edx),%edx
159 .byte   243,15,167,200
160         popl    %ebx
161         popl    %esi
162         popl    %edi
163         ret
164 .size   padlock_aes_block,.-.L_padlock_aes_block_begin
165 .globl  padlock_ecb_encrypt
166 .type   padlock_ecb_encrypt,@function
167 .align  16
168 padlock_ecb_encrypt:
169 .L_padlock_ecb_encrypt_begin:
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     .L004ecb_abort
180         testl   $15,%ecx
181         jnz     .L004ecb_abort
182         leal    .Lpadlock_saved_context-.L005ecb_pic_point,%eax
183         pushfl
184         cld
185         call    _padlock_verify_ctx
186 .L005ecb_pic_point:
187         leal    16(%edx),%edx
188         xorl    %eax,%eax
189         xorl    %ebx,%ebx
190         testl   $32,(%edx)
191         jnz     .L006ecb_aligned
192         testl   $15,%edi
193         setz    %al
194         testl   $15,%esi
195         setz    %bl
196         testl   %ebx,%eax
197         jnz     .L006ecb_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      .L007ecb_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      .L008ecb_unaligned_tail
228         jmp     .L007ecb_loop
229 .align  16
230 .L007ecb_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      .L009ecb_inp_aligned
240         shrl    $2,%ecx
241 .byte   243,165
242         subl    %ebx,%edi
243         movl    %ebx,%ecx
244         movl    %edi,%esi
245 .L009ecb_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      .L010ecb_out_aligned
254         movl    %ebx,%ecx
255         leal    (%esp),%esi
256         shrl    $2,%ecx
257 .byte   243,165
258         subl    %ebx,%edi
259 .L010ecb_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      .L011ecb_break
267         cmpl    %ebx,%ecx
268         jae     .L007ecb_loop
269 .L008ecb_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     .L007ecb_loop
283 .align  16
284 .L011ecb_break:
285         cmpl    %ebp,%esp
286         je      .L012ecb_done
287         pxor    %xmm0,%xmm0
288         leal    (%esp),%eax
289 .L013ecb_bzero:
290         movaps  %xmm0,(%eax)
291         leal    16(%eax),%eax
292         cmpl    %eax,%ebp
293         ja      .L013ecb_bzero
294 .L012ecb_done:
295         movl    16(%ebp),%ebp
296         leal    24(%ebp),%esp
297         jmp     .L014ecb_exit
298 .align  16
299 .L006ecb_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      .L015ecb_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      .L014ecb_exit
316 .L015ecb_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     .L007ecb_loop
334 .L014ecb_exit:
335         movl    $1,%eax
336         leal    4(%esp),%esp
337 .L004ecb_abort:
338         popl    %edi
339         popl    %esi
340         popl    %ebx
341         popl    %ebp
342         ret
343 .size   padlock_ecb_encrypt,.-.L_padlock_ecb_encrypt_begin
344 .globl  padlock_cbc_encrypt
345 .type   padlock_cbc_encrypt,@function
346 .align  16
347 padlock_cbc_encrypt:
348 .L_padlock_cbc_encrypt_begin:
349         pushl   %ebp
350         pushl   %ebx
351         pushl   %esi
352         pushl   %edi
353         movl    20(%esp),%edi
354         movl    24(%esp),%esi
355         movl    28(%esp),%edx
356         movl    32(%esp),%ecx
357         testl   $15,%edx
358         jnz     .L016cbc_abort
359         testl   $15,%ecx
360         jnz     .L016cbc_abort
361         leal    .Lpadlock_saved_context-.L017cbc_pic_point,%eax
362         pushfl
363         cld
364         call    _padlock_verify_ctx
365 .L017cbc_pic_point:
366         leal    16(%edx),%edx
367         xorl    %eax,%eax
368         xorl    %ebx,%ebx
369         testl   $32,(%edx)
370         jnz     .L018cbc_aligned
371         testl   $15,%edi
372         setz    %al
373         testl   $15,%esi
374         setz    %bl
375         testl   %ebx,%eax
376         jnz     .L018cbc_aligned
377         negl    %eax
378         movl    $512,%ebx
379         notl    %eax
380         leal    -24(%esp),%ebp
381         cmpl    %ebx,%ecx
382         cmovcl  %ecx,%ebx
383         andl    %ebx,%eax
384         movl    %ecx,%ebx
385         negl    %eax
386         andl    $511,%ebx
387         leal    (%eax,%ebp,1),%esp
388         movl    $512,%eax
389         cmovzl  %eax,%ebx
390         movl    %ebp,%eax
391         andl    $-16,%ebp
392         andl    $-16,%esp
393         movl    %eax,16(%ebp)
394         cmpl    %ebx,%ecx
395         ja      .L019cbc_loop
396         movl    %esi,%eax
397         cmpl    %esp,%ebp
398         cmovel  %edi,%eax
399         addl    %ecx,%eax
400         negl    %eax
401         andl    $4095,%eax
402         cmpl    $64,%eax
403         movl    $-64,%eax
404         cmovael %ebx,%eax
405         andl    %eax,%ebx
406         jz      .L020cbc_unaligned_tail
407         jmp     .L019cbc_loop
408 .align  16
409 .L019cbc_loop:
410         movl    %edi,(%ebp)
411         movl    %esi,4(%ebp)
412         movl    %ecx,8(%ebp)
413         movl    %ebx,%ecx
414         movl    %ebx,12(%ebp)
415         testl   $15,%edi
416         cmovnzl %esp,%edi
417         testl   $15,%esi
418         jz      .L021cbc_inp_aligned
419         shrl    $2,%ecx
420 .byte   243,165
421         subl    %ebx,%edi
422         movl    %ebx,%ecx
423         movl    %edi,%esi
424 .L021cbc_inp_aligned:
425         leal    -16(%edx),%eax
426         leal    16(%edx),%ebx
427         shrl    $4,%ecx
428 .byte   243,15,167,208
429         movaps  (%eax),%xmm0
430         movaps  %xmm0,-16(%edx)
431         movl    (%ebp),%edi
432         movl    12(%ebp),%ebx
433         testl   $15,%edi
434         jz      .L022cbc_out_aligned
435         movl    %ebx,%ecx
436         leal    (%esp),%esi
437         shrl    $2,%ecx
438 .byte   243,165
439         subl    %ebx,%edi
440 .L022cbc_out_aligned:
441         movl    4(%ebp),%esi
442         movl    8(%ebp),%ecx
443         addl    %ebx,%edi
444         addl    %ebx,%esi
445         subl    %ebx,%ecx
446         movl    $512,%ebx
447         jz      .L023cbc_break
448         cmpl    %ebx,%ecx
449         jae     .L019cbc_loop
450 .L020cbc_unaligned_tail:
451         xorl    %eax,%eax
452         cmpl    %ebp,%esp
453         cmovel  %ecx,%eax
454         subl    %eax,%esp
455         movl    %edi,%eax
456         movl    %ecx,%ebx
457         shrl    $2,%ecx
458         leal    (%esp),%edi
459 .byte   243,165
460         movl    %esp,%esi
461         movl    %eax,%edi
462         movl    %ebx,%ecx
463         jmp     .L019cbc_loop
464 .align  16
465 .L023cbc_break:
466         cmpl    %ebp,%esp
467         je      .L024cbc_done
468         pxor    %xmm0,%xmm0
469         leal    (%esp),%eax
470 .L025cbc_bzero:
471         movaps  %xmm0,(%eax)
472         leal    16(%eax),%eax
473         cmpl    %eax,%ebp
474         ja      .L025cbc_bzero
475 .L024cbc_done:
476         movl    16(%ebp),%ebp
477         leal    24(%ebp),%esp
478         jmp     .L026cbc_exit
479 .align  16
480 .L018cbc_aligned:
481         leal    (%esi,%ecx,1),%ebp
482         negl    %ebp
483         andl    $4095,%ebp
484         xorl    %eax,%eax
485         cmpl    $64,%ebp
486         movl    $63,%ebp
487         cmovael %eax,%ebp
488         andl    %ecx,%ebp
489         subl    %ebp,%ecx
490         jz      .L027cbc_aligned_tail
491         leal    -16(%edx),%eax
492         leal    16(%edx),%ebx
493         shrl    $4,%ecx
494 .byte   243,15,167,208
495         movaps  (%eax),%xmm0
496         movaps  %xmm0,-16(%edx)
497         testl   %ebp,%ebp
498         jz      .L026cbc_exit
499 .L027cbc_aligned_tail:
500         movl    %ebp,%ecx
501         leal    -24(%esp),%ebp
502         movl    %ebp,%esp
503         movl    %ebp,%eax
504         subl    %ecx,%esp
505         andl    $-16,%ebp
506         andl    $-16,%esp
507         movl    %eax,16(%ebp)
508         movl    %edi,%eax
509         movl    %ecx,%ebx
510         shrl    $2,%ecx
511         leal    (%esp),%edi
512 .byte   243,165
513         movl    %esp,%esi
514         movl    %eax,%edi
515         movl    %ebx,%ecx
516         jmp     .L019cbc_loop
517 .L026cbc_exit:
518         movl    $1,%eax
519         leal    4(%esp),%esp
520 .L016cbc_abort:
521         popl    %edi
522         popl    %esi
523         popl    %ebx
524         popl    %ebp
525         ret
526 .size   padlock_cbc_encrypt,.-.L_padlock_cbc_encrypt_begin
527 .globl  padlock_cfb_encrypt
528 .type   padlock_cfb_encrypt,@function
529 .align  16
530 padlock_cfb_encrypt:
531 .L_padlock_cfb_encrypt_begin:
532         pushl   %ebp
533         pushl   %ebx
534         pushl   %esi
535         pushl   %edi
536         movl    20(%esp),%edi
537         movl    24(%esp),%esi
538         movl    28(%esp),%edx
539         movl    32(%esp),%ecx
540         testl   $15,%edx
541         jnz     .L028cfb_abort
542         testl   $15,%ecx
543         jnz     .L028cfb_abort
544         leal    .Lpadlock_saved_context-.L029cfb_pic_point,%eax
545         pushfl
546         cld
547         call    _padlock_verify_ctx
548 .L029cfb_pic_point:
549         leal    16(%edx),%edx
550         xorl    %eax,%eax
551         xorl    %ebx,%ebx
552         testl   $32,(%edx)
553         jnz     .L030cfb_aligned
554         testl   $15,%edi
555         setz    %al
556         testl   $15,%esi
557         setz    %bl
558         testl   %ebx,%eax
559         jnz     .L030cfb_aligned
560         negl    %eax
561         movl    $512,%ebx
562         notl    %eax
563         leal    -24(%esp),%ebp
564         cmpl    %ebx,%ecx
565         cmovcl  %ecx,%ebx
566         andl    %ebx,%eax
567         movl    %ecx,%ebx
568         negl    %eax
569         andl    $511,%ebx
570         leal    (%eax,%ebp,1),%esp
571         movl    $512,%eax
572         cmovzl  %eax,%ebx
573         movl    %ebp,%eax
574         andl    $-16,%ebp
575         andl    $-16,%esp
576         movl    %eax,16(%ebp)
577         jmp     .L031cfb_loop
578 .align  16
579 .L031cfb_loop:
580         movl    %edi,(%ebp)
581         movl    %esi,4(%ebp)
582         movl    %ecx,8(%ebp)
583         movl    %ebx,%ecx
584         movl    %ebx,12(%ebp)
585         testl   $15,%edi
586         cmovnzl %esp,%edi
587         testl   $15,%esi
588         jz      .L032cfb_inp_aligned
589         shrl    $2,%ecx
590 .byte   243,165
591         subl    %ebx,%edi
592         movl    %ebx,%ecx
593         movl    %edi,%esi
594 .L032cfb_inp_aligned:
595         leal    -16(%edx),%eax
596         leal    16(%edx),%ebx
597         shrl    $4,%ecx
598 .byte   243,15,167,224
599         movaps  (%eax),%xmm0
600         movaps  %xmm0,-16(%edx)
601         movl    (%ebp),%edi
602         movl    12(%ebp),%ebx
603         testl   $15,%edi
604         jz      .L033cfb_out_aligned
605         movl    %ebx,%ecx
606         leal    (%esp),%esi
607         shrl    $2,%ecx
608 .byte   243,165
609         subl    %ebx,%edi
610 .L033cfb_out_aligned:
611         movl    4(%ebp),%esi
612         movl    8(%ebp),%ecx
613         addl    %ebx,%edi
614         addl    %ebx,%esi
615         subl    %ebx,%ecx
616         movl    $512,%ebx
617         jnz     .L031cfb_loop
618         cmpl    %ebp,%esp
619         je      .L034cfb_done
620         pxor    %xmm0,%xmm0
621         leal    (%esp),%eax
622 .L035cfb_bzero:
623         movaps  %xmm0,(%eax)
624         leal    16(%eax),%eax
625         cmpl    %eax,%ebp
626         ja      .L035cfb_bzero
627 .L034cfb_done:
628         movl    16(%ebp),%ebp
629         leal    24(%ebp),%esp
630         jmp     .L036cfb_exit
631 .align  16
632 .L030cfb_aligned:
633         leal    -16(%edx),%eax
634         leal    16(%edx),%ebx
635         shrl    $4,%ecx
636 .byte   243,15,167,224
637         movaps  (%eax),%xmm0
638         movaps  %xmm0,-16(%edx)
639 .L036cfb_exit:
640         movl    $1,%eax
641         leal    4(%esp),%esp
642 .L028cfb_abort:
643         popl    %edi
644         popl    %esi
645         popl    %ebx
646         popl    %ebp
647         ret
648 .size   padlock_cfb_encrypt,.-.L_padlock_cfb_encrypt_begin
649 .globl  padlock_ofb_encrypt
650 .type   padlock_ofb_encrypt,@function
651 .align  16
652 padlock_ofb_encrypt:
653 .L_padlock_ofb_encrypt_begin:
654         pushl   %ebp
655         pushl   %ebx
656         pushl   %esi
657         pushl   %edi
658         movl    20(%esp),%edi
659         movl    24(%esp),%esi
660         movl    28(%esp),%edx
661         movl    32(%esp),%ecx
662         testl   $15,%edx
663         jnz     .L037ofb_abort
664         testl   $15,%ecx
665         jnz     .L037ofb_abort
666         leal    .Lpadlock_saved_context-.L038ofb_pic_point,%eax
667         pushfl
668         cld
669         call    _padlock_verify_ctx
670 .L038ofb_pic_point:
671         leal    16(%edx),%edx
672         xorl    %eax,%eax
673         xorl    %ebx,%ebx
674         testl   $32,(%edx)
675         jnz     .L039ofb_aligned
676         testl   $15,%edi
677         setz    %al
678         testl   $15,%esi
679         setz    %bl
680         testl   %ebx,%eax
681         jnz     .L039ofb_aligned
682         negl    %eax
683         movl    $512,%ebx
684         notl    %eax
685         leal    -24(%esp),%ebp
686         cmpl    %ebx,%ecx
687         cmovcl  %ecx,%ebx
688         andl    %ebx,%eax
689         movl    %ecx,%ebx
690         negl    %eax
691         andl    $511,%ebx
692         leal    (%eax,%ebp,1),%esp
693         movl    $512,%eax
694         cmovzl  %eax,%ebx
695         movl    %ebp,%eax
696         andl    $-16,%ebp
697         andl    $-16,%esp
698         movl    %eax,16(%ebp)
699         jmp     .L040ofb_loop
700 .align  16
701 .L040ofb_loop:
702         movl    %edi,(%ebp)
703         movl    %esi,4(%ebp)
704         movl    %ecx,8(%ebp)
705         movl    %ebx,%ecx
706         movl    %ebx,12(%ebp)
707         testl   $15,%edi
708         cmovnzl %esp,%edi
709         testl   $15,%esi
710         jz      .L041ofb_inp_aligned
711         shrl    $2,%ecx
712 .byte   243,165
713         subl    %ebx,%edi
714         movl    %ebx,%ecx
715         movl    %edi,%esi
716 .L041ofb_inp_aligned:
717         leal    -16(%edx),%eax
718         leal    16(%edx),%ebx
719         shrl    $4,%ecx
720 .byte   243,15,167,232
721         movaps  (%eax),%xmm0
722         movaps  %xmm0,-16(%edx)
723         movl    (%ebp),%edi
724         movl    12(%ebp),%ebx
725         testl   $15,%edi
726         jz      .L042ofb_out_aligned
727         movl    %ebx,%ecx
728         leal    (%esp),%esi
729         shrl    $2,%ecx
730 .byte   243,165
731         subl    %ebx,%edi
732 .L042ofb_out_aligned:
733         movl    4(%ebp),%esi
734         movl    8(%ebp),%ecx
735         addl    %ebx,%edi
736         addl    %ebx,%esi
737         subl    %ebx,%ecx
738         movl    $512,%ebx
739         jnz     .L040ofb_loop
740         cmpl    %ebp,%esp
741         je      .L043ofb_done
742         pxor    %xmm0,%xmm0
743         leal    (%esp),%eax
744 .L044ofb_bzero:
745         movaps  %xmm0,(%eax)
746         leal    16(%eax),%eax
747         cmpl    %eax,%ebp
748         ja      .L044ofb_bzero
749 .L043ofb_done:
750         movl    16(%ebp),%ebp
751         leal    24(%ebp),%esp
752         jmp     .L045ofb_exit
753 .align  16
754 .L039ofb_aligned:
755         leal    -16(%edx),%eax
756         leal    16(%edx),%ebx
757         shrl    $4,%ecx
758 .byte   243,15,167,232
759         movaps  (%eax),%xmm0
760         movaps  %xmm0,-16(%edx)
761 .L045ofb_exit:
762         movl    $1,%eax
763         leal    4(%esp),%esp
764 .L037ofb_abort:
765         popl    %edi
766         popl    %esi
767         popl    %ebx
768         popl    %ebp
769         ret
770 .size   padlock_ofb_encrypt,.-.L_padlock_ofb_encrypt_begin
771 .globl  padlock_ctr32_encrypt
772 .type   padlock_ctr32_encrypt,@function
773 .align  16
774 padlock_ctr32_encrypt:
775 .L_padlock_ctr32_encrypt_begin:
776         pushl   %ebp
777         pushl   %ebx
778         pushl   %esi
779         pushl   %edi
780         movl    20(%esp),%edi
781         movl    24(%esp),%esi
782         movl    28(%esp),%edx
783         movl    32(%esp),%ecx
784         testl   $15,%edx
785         jnz     .L046ctr32_abort
786         testl   $15,%ecx
787         jnz     .L046ctr32_abort
788         leal    .Lpadlock_saved_context-.L047ctr32_pic_point,%eax
789         pushfl
790         cld
791         call    _padlock_verify_ctx
792 .L047ctr32_pic_point:
793         leal    16(%edx),%edx
794         xorl    %eax,%eax
795         movq    -16(%edx),%mm0
796         movl    $512,%ebx
797         notl    %eax
798         leal    -24(%esp),%ebp
799         cmpl    %ebx,%ecx
800         cmovcl  %ecx,%ebx
801         andl    %ebx,%eax
802         movl    %ecx,%ebx
803         negl    %eax
804         andl    $511,%ebx
805         leal    (%eax,%ebp,1),%esp
806         movl    $512,%eax
807         cmovzl  %eax,%ebx
808         movl    %ebp,%eax
809         andl    $-16,%ebp
810         andl    $-16,%esp
811         movl    %eax,16(%ebp)
812         jmp     .L048ctr32_loop
813 .align  16
814 .L048ctr32_loop:
815         movl    %edi,(%ebp)
816         movl    %esi,4(%ebp)
817         movl    %ecx,8(%ebp)
818         movl    %ebx,%ecx
819         movl    %ebx,12(%ebp)
820         movl    -4(%edx),%ecx
821         xorl    %edi,%edi
822         movl    -8(%edx),%eax
823 .L049ctr32_prepare:
824         movl    %ecx,12(%esp,%edi,1)
825         bswap   %ecx
826         movq    %mm0,(%esp,%edi,1)
827         incl    %ecx
828         movl    %eax,8(%esp,%edi,1)
829         bswap   %ecx
830         leal    16(%edi),%edi
831         cmpl    %ebx,%edi
832         jb      .L049ctr32_prepare
833         movl    %ecx,-4(%edx)
834         leal    (%esp),%esi
835         leal    (%esp),%edi
836         movl    %ebx,%ecx
837         leal    -16(%edx),%eax
838         leal    16(%edx),%ebx
839         shrl    $4,%ecx
840 .byte   243,15,167,200
841         movl    (%ebp),%edi
842         movl    12(%ebp),%ebx
843         movl    4(%ebp),%esi
844         xorl    %ecx,%ecx
845 .L050ctr32_xor:
846         movups  (%esi,%ecx,1),%xmm1
847         leal    16(%ecx),%ecx
848         pxor    -16(%esp,%ecx,1),%xmm1
849         movups  %xmm1,-16(%edi,%ecx,1)
850         cmpl    %ebx,%ecx
851         jb      .L050ctr32_xor
852         movl    8(%ebp),%ecx
853         addl    %ebx,%edi
854         addl    %ebx,%esi
855         subl    %ebx,%ecx
856         movl    $512,%ebx
857         jnz     .L048ctr32_loop
858         pxor    %xmm0,%xmm0
859         leal    (%esp),%eax
860 .L051ctr32_bzero:
861         movaps  %xmm0,(%eax)
862         leal    16(%eax),%eax
863         cmpl    %eax,%ebp
864         ja      .L051ctr32_bzero
865 .L052ctr32_done:
866         movl    16(%ebp),%ebp
867         leal    24(%ebp),%esp
868         movl    $1,%eax
869         leal    4(%esp),%esp
870         emms
871 .L046ctr32_abort:
872         popl    %edi
873         popl    %esi
874         popl    %ebx
875         popl    %ebp
876         ret
877 .size   padlock_ctr32_encrypt,.-.L_padlock_ctr32_encrypt_begin
878 .globl  padlock_xstore
879 .type   padlock_xstore,@function
880 .align  16
881 padlock_xstore:
882 .L_padlock_xstore_begin:
883         pushl   %edi
884         movl    8(%esp),%edi
885         movl    12(%esp),%edx
886 .byte   15,167,192
887         popl    %edi
888         ret
889 .size   padlock_xstore,.-.L_padlock_xstore_begin
890 .type   _win32_segv_handler,@function
891 .align  16
892 _win32_segv_handler:
893         movl    $1,%eax
894         movl    4(%esp),%edx
895         movl    12(%esp),%ecx
896         cmpl    $3221225477,(%edx)
897         jne     .L053ret
898         addl    $4,184(%ecx)
899         movl    $0,%eax
900 .L053ret:
901         ret
902 .size   _win32_segv_handler,.-_win32_segv_handler
903 .globl  padlock_sha1_oneshot
904 .type   padlock_sha1_oneshot,@function
905 .align  16
906 padlock_sha1_oneshot:
907 .L_padlock_sha1_oneshot_begin:
908         pushl   %edi
909         pushl   %esi
910         xorl    %eax,%eax
911         movl    12(%esp),%edi
912         movl    16(%esp),%esi
913         movl    20(%esp),%ecx
914         movl    %esp,%edx
915         addl    $-128,%esp
916         movups  (%edi),%xmm0
917         andl    $-16,%esp
918         movl    16(%edi),%eax
919         movaps  %xmm0,(%esp)
920         movl    %esp,%edi
921         movl    %eax,16(%esp)
922         xorl    %eax,%eax
923 .byte   243,15,166,200
924         movaps  (%esp),%xmm0
925         movl    16(%esp),%eax
926         movl    %edx,%esp
927         movl    12(%esp),%edi
928         movups  %xmm0,(%edi)
929         movl    %eax,16(%edi)
930         popl    %esi
931         popl    %edi
932         ret
933 .size   padlock_sha1_oneshot,.-.L_padlock_sha1_oneshot_begin
934 .globl  padlock_sha1_blocks
935 .type   padlock_sha1_blocks,@function
936 .align  16
937 padlock_sha1_blocks:
938 .L_padlock_sha1_blocks_begin:
939         pushl   %edi
940         pushl   %esi
941         movl    12(%esp),%edi
942         movl    16(%esp),%esi
943         movl    %esp,%edx
944         movl    20(%esp),%ecx
945         addl    $-128,%esp
946         movups  (%edi),%xmm0
947         andl    $-16,%esp
948         movl    16(%edi),%eax
949         movaps  %xmm0,(%esp)
950         movl    %esp,%edi
951         movl    %eax,16(%esp)
952         movl    $-1,%eax
953 .byte   243,15,166,200
954         movaps  (%esp),%xmm0
955         movl    16(%esp),%eax
956         movl    %edx,%esp
957         movl    12(%esp),%edi
958         movups  %xmm0,(%edi)
959         movl    %eax,16(%edi)
960         popl    %esi
961         popl    %edi
962         ret
963 .size   padlock_sha1_blocks,.-.L_padlock_sha1_blocks_begin
964 .globl  padlock_sha256_oneshot
965 .type   padlock_sha256_oneshot,@function
966 .align  16
967 padlock_sha256_oneshot:
968 .L_padlock_sha256_oneshot_begin:
969         pushl   %edi
970         pushl   %esi
971         xorl    %eax,%eax
972         movl    12(%esp),%edi
973         movl    16(%esp),%esi
974         movl    20(%esp),%ecx
975         movl    %esp,%edx
976         addl    $-128,%esp
977         movups  (%edi),%xmm0
978         andl    $-16,%esp
979         movups  16(%edi),%xmm1
980         movaps  %xmm0,(%esp)
981         movl    %esp,%edi
982         movaps  %xmm1,16(%esp)
983         xorl    %eax,%eax
984 .byte   243,15,166,208
985         movaps  (%esp),%xmm0
986         movaps  16(%esp),%xmm1
987         movl    %edx,%esp
988         movl    12(%esp),%edi
989         movups  %xmm0,(%edi)
990         movups  %xmm1,16(%edi)
991         popl    %esi
992         popl    %edi
993         ret
994 .size   padlock_sha256_oneshot,.-.L_padlock_sha256_oneshot_begin
995 .globl  padlock_sha256_blocks
996 .type   padlock_sha256_blocks,@function
997 .align  16
998 padlock_sha256_blocks:
999 .L_padlock_sha256_blocks_begin:
1000         pushl   %edi
1001         pushl   %esi
1002         movl    12(%esp),%edi
1003         movl    16(%esp),%esi
1004         movl    20(%esp),%ecx
1005         movl    %esp,%edx
1006         addl    $-128,%esp
1007         movups  (%edi),%xmm0
1008         andl    $-16,%esp
1009         movups  16(%edi),%xmm1
1010         movaps  %xmm0,(%esp)
1011         movl    %esp,%edi
1012         movaps  %xmm1,16(%esp)
1013         movl    $-1,%eax
1014 .byte   243,15,166,208
1015         movaps  (%esp),%xmm0
1016         movaps  16(%esp),%xmm1
1017         movl    %edx,%esp
1018         movl    12(%esp),%edi
1019         movups  %xmm0,(%edi)
1020         movups  %xmm1,16(%edi)
1021         popl    %esi
1022         popl    %edi
1023         ret
1024 .size   padlock_sha256_blocks,.-.L_padlock_sha256_blocks_begin
1025 .globl  padlock_sha512_blocks
1026 .type   padlock_sha512_blocks,@function
1027 .align  16
1028 padlock_sha512_blocks:
1029 .L_padlock_sha512_blocks_begin:
1030         pushl   %edi
1031         pushl   %esi
1032         movl    12(%esp),%edi
1033         movl    16(%esp),%esi
1034         movl    20(%esp),%ecx
1035         movl    %esp,%edx
1036         addl    $-128,%esp
1037         movups  (%edi),%xmm0
1038         andl    $-16,%esp
1039         movups  16(%edi),%xmm1
1040         movups  32(%edi),%xmm2
1041         movups  48(%edi),%xmm3
1042         movaps  %xmm0,(%esp)
1043         movl    %esp,%edi
1044         movaps  %xmm1,16(%esp)
1045         movaps  %xmm2,32(%esp)
1046         movaps  %xmm3,48(%esp)
1047 .byte   243,15,166,224
1048         movaps  (%esp),%xmm0
1049         movaps  16(%esp),%xmm1
1050         movaps  32(%esp),%xmm2
1051         movaps  48(%esp),%xmm3
1052         movl    %edx,%esp
1053         movl    12(%esp),%edi
1054         movups  %xmm0,(%edi)
1055         movups  %xmm1,16(%edi)
1056         movups  %xmm2,32(%edi)
1057         movups  %xmm3,48(%edi)
1058         popl    %esi
1059         popl    %edi
1060         ret
1061 .size   padlock_sha512_blocks,.-.L_padlock_sha512_blocks_begin
1062 .byte   86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
1063 .byte   109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
1064 .byte   77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
1065 .byte   110,115,115,108,46,111,114,103,62,0
1066 .align  16
1067 .data
1068 .align  4
1069 .Lpadlock_saved_context:
1070 .long   0
1071
1072 .section .note.GNU-stack,"",%progbits